OwlCyberSecurity - MANAGER
Edit File: bundle.development.js
var AdminJSDesignSystem = (function (React, ReactDOM, FeatherIcons) { 'use strict'; function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n.default = e; return Object.freeze(n); } var React__namespace = /*#__PURE__*/_interopNamespace(React); var ReactDOM__namespace = /*#__PURE__*/_interopNamespace(ReactDOM); var FeatherIcons__namespace = /*#__PURE__*/_interopNamespace(FeatherIcons); var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; function getDefaultExportFromCjs (x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; } var propTypes = {exports: {}}; var reactIs$1 = {exports: {}}; var reactIs_development = {}; /** @license React v16.13.1 * react-is.development.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ { (function () { // The Symbol used to tag the ReactElement-like types. If there is no native Symbol // nor polyfill, then a plain number is used for performance. var hasSymbol = typeof Symbol === 'function' && Symbol.for; var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7; var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca; var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb; var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc; var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2; var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd; var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary // (unstable) APIs that have been removed. Can we remove the symbols? var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf; var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf; var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0; var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1; var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8; var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3; var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4; var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9; var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5; var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6; var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7; function isValidElementType(type) { return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill. type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE); } function typeOf(object) { if (typeof object === 'object' && object !== null) { var $$typeof = object.$$typeof; switch ($$typeof) { case REACT_ELEMENT_TYPE: var type = object.type; switch (type) { case REACT_ASYNC_MODE_TYPE: case REACT_CONCURRENT_MODE_TYPE: case REACT_FRAGMENT_TYPE: case REACT_PROFILER_TYPE: case REACT_STRICT_MODE_TYPE: case REACT_SUSPENSE_TYPE: return type; default: var $$typeofType = type && type.$$typeof; switch ($$typeofType) { case REACT_CONTEXT_TYPE: case REACT_FORWARD_REF_TYPE: case REACT_LAZY_TYPE: case REACT_MEMO_TYPE: case REACT_PROVIDER_TYPE: return $$typeofType; default: return $$typeof; } } case REACT_PORTAL_TYPE: return $$typeof; } } return undefined; } // AsyncMode is deprecated along with isAsyncMode var AsyncMode = REACT_ASYNC_MODE_TYPE; var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE; var ContextConsumer = REACT_CONTEXT_TYPE; var ContextProvider = REACT_PROVIDER_TYPE; var Element = REACT_ELEMENT_TYPE; var ForwardRef = REACT_FORWARD_REF_TYPE; var Fragment = REACT_FRAGMENT_TYPE; var Lazy = REACT_LAZY_TYPE; var Memo = REACT_MEMO_TYPE; var Portal = REACT_PORTAL_TYPE; var Profiler = REACT_PROFILER_TYPE; var StrictMode = REACT_STRICT_MODE_TYPE; var Suspense = REACT_SUSPENSE_TYPE; var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated function isAsyncMode(object) { { if (!hasWarnedAboutDeprecatedIsAsyncMode) { hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.'); } } return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE; } function isConcurrentMode(object) { return typeOf(object) === REACT_CONCURRENT_MODE_TYPE; } function isContextConsumer(object) { return typeOf(object) === REACT_CONTEXT_TYPE; } function isContextProvider(object) { return typeOf(object) === REACT_PROVIDER_TYPE; } function isElement(object) { return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; } function isForwardRef(object) { return typeOf(object) === REACT_FORWARD_REF_TYPE; } function isFragment(object) { return typeOf(object) === REACT_FRAGMENT_TYPE; } function isLazy(object) { return typeOf(object) === REACT_LAZY_TYPE; } function isMemo(object) { return typeOf(object) === REACT_MEMO_TYPE; } function isPortal(object) { return typeOf(object) === REACT_PORTAL_TYPE; } function isProfiler(object) { return typeOf(object) === REACT_PROFILER_TYPE; } function isStrictMode(object) { return typeOf(object) === REACT_STRICT_MODE_TYPE; } function isSuspense(object) { return typeOf(object) === REACT_SUSPENSE_TYPE; } reactIs_development.AsyncMode = AsyncMode; reactIs_development.ConcurrentMode = ConcurrentMode; reactIs_development.ContextConsumer = ContextConsumer; reactIs_development.ContextProvider = ContextProvider; reactIs_development.Element = Element; reactIs_development.ForwardRef = ForwardRef; reactIs_development.Fragment = Fragment; reactIs_development.Lazy = Lazy; reactIs_development.Memo = Memo; reactIs_development.Portal = Portal; reactIs_development.Profiler = Profiler; reactIs_development.StrictMode = StrictMode; reactIs_development.Suspense = Suspense; reactIs_development.isAsyncMode = isAsyncMode; reactIs_development.isConcurrentMode = isConcurrentMode; reactIs_development.isContextConsumer = isContextConsumer; reactIs_development.isContextProvider = isContextProvider; reactIs_development.isElement = isElement; reactIs_development.isForwardRef = isForwardRef; reactIs_development.isFragment = isFragment; reactIs_development.isLazy = isLazy; reactIs_development.isMemo = isMemo; reactIs_development.isPortal = isPortal; reactIs_development.isProfiler = isProfiler; reactIs_development.isStrictMode = isStrictMode; reactIs_development.isSuspense = isSuspense; reactIs_development.isValidElementType = isValidElementType; reactIs_development.typeOf = typeOf; })(); } { reactIs$1.exports = reactIs_development; } var reactIsExports = reactIs$1.exports; /* object-assign (c) Sindre Sorhus @license MIT */ /* eslint-disable no-unused-vars */ var getOwnPropertySymbols$1 = Object.getOwnPropertySymbols; var hasOwnProperty$d = Object.prototype.hasOwnProperty; var propIsEnumerable = Object.prototype.propertyIsEnumerable; function toObject(val) { if (val === null || val === undefined) { throw new TypeError('Object.assign cannot be called with null or undefined'); } return Object(val); } function shouldUseNative() { try { if (!Object.assign) { return false; } // Detect buggy property enumeration order in older V8 versions. // https://bugs.chromium.org/p/v8/issues/detail?id=4118 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers test1[5] = 'de'; if (Object.getOwnPropertyNames(test1)[0] === '5') { return false; } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 var test2 = {}; for (var i = 0; i < 10; i++) { test2['_' + String.fromCharCode(i)] = i; } var order2 = Object.getOwnPropertyNames(test2).map(function (n) { return test2[n]; }); if (order2.join('') !== '0123456789') { return false; } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 var test3 = {}; 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { test3[letter] = letter; }); if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') { return false; } return true; } catch (err) { // We don't expect any of the above to throw, but better to be safe. return false; } } var objectAssign = shouldUseNative() ? Object.assign : function (target, source) { var from; var to = toObject(target); var symbols; for (var s = 1; s < arguments.length; s++) { from = Object(arguments[s]); for (var key in from) { if (hasOwnProperty$d.call(from, key)) { to[key] = from[key]; } } if (getOwnPropertySymbols$1) { symbols = getOwnPropertySymbols$1(from); for (var i = 0; i < symbols.length; i++) { if (propIsEnumerable.call(from, symbols[i])) { to[symbols[i]] = from[symbols[i]]; } } } } return to; }; var assign$4 = /*@__PURE__*/getDefaultExportFromCjs(objectAssign); /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var ReactPropTypesSecret$2 = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; var ReactPropTypesSecret_1 = ReactPropTypesSecret$2; var has$2 = Function.call.bind(Object.prototype.hasOwnProperty); /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var printWarning$2 = function () {}; { var ReactPropTypesSecret$1 = ReactPropTypesSecret_1; var loggedTypeFailures = {}; var has$1 = has$2; printWarning$2 = function (text) { var message = 'Warning: ' + text; if (typeof console !== 'undefined') { console.error(message); } try { // --- Welcome to debugging React --- // This error was thrown as a convenience so that you can use this stack // to find the callsite that caused this warning to fire. throw new Error(message); } catch (x) {/**/} }; } /** * Assert that the values match with the type specs. * Error messages are memorized and will only be shown once. * * @param {object} typeSpecs Map of name to a ReactPropType * @param {object} values Runtime values that need to be type-checked * @param {string} location e.g. "prop", "context", "child context" * @param {string} componentName Name of the component for error messages. * @param {?Function} getStack Returns the component stack. * @private */ function checkPropTypes$1(typeSpecs, values, location, componentName, getStack) { { for (var typeSpecName in typeSpecs) { if (has$1(typeSpecs, typeSpecName)) { var error; // Prop type validation may throw. In case they do, we don't want to // fail the render phase where it didn't fail before. So we log it. // After these have been cleaned up, we'll let them throw. try { // This is intentionally an invariant that gets caught. It's the same // behavior as without this statement except with a better message. if (typeof typeSpecs[typeSpecName] !== 'function') { var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'); err.name = 'Invariant Violation'; throw err; } error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret$1); } catch (ex) { error = ex; } if (error && !(error instanceof Error)) { printWarning$2((componentName || 'React class') + ': type specification of ' + location + ' `' + typeSpecName + '` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).'); } if (error instanceof Error && !(error.message in loggedTypeFailures)) { // Only monitor this failure once because there tends to be a lot of the // same error. loggedTypeFailures[error.message] = true; var stack = getStack ? getStack() : ''; printWarning$2('Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')); } } } } } /** * Resets warning cache when testing. * * @private */ checkPropTypes$1.resetWarningCache = function () { { loggedTypeFailures = {}; } }; var checkPropTypes_1 = checkPropTypes$1; /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var ReactIs$1 = reactIsExports; var assign$3 = objectAssign; var ReactPropTypesSecret = ReactPropTypesSecret_1; var has = has$2; var checkPropTypes = checkPropTypes_1; var printWarning$1 = function () {}; { printWarning$1 = function (text) { var message = 'Warning: ' + text; if (typeof console !== 'undefined') { console.error(message); } try { // --- Welcome to debugging React --- // This error was thrown as a convenience so that you can use this stack // to find the callsite that caused this warning to fire. throw new Error(message); } catch (x) {} }; } function emptyFunctionThatReturnsNull() { return null; } var factoryWithTypeCheckers = function (isValidElement, throwOnDirectAccess) { /* global Symbol */ var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. /** * Returns the iterator method function contained on the iterable object. * * Be sure to invoke the function with the iterable as context: * * var iteratorFn = getIteratorFn(myIterable); * if (iteratorFn) { * var iterator = iteratorFn.call(myIterable); * ... * } * * @param {?object} maybeIterable * @return {?function} */ function getIteratorFn(maybeIterable) { var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); if (typeof iteratorFn === 'function') { return iteratorFn; } } /** * Collection of methods that allow declaration and validation of props that are * supplied to React components. Example usage: * * var Props = require('ReactPropTypes'); * var MyArticle = React.createClass({ * propTypes: { * // An optional string prop named "description". * description: Props.string, * * // A required enum prop named "category". * category: Props.oneOf(['News','Photos']).isRequired, * * // A prop named "dialog" that requires an instance of Dialog. * dialog: Props.instanceOf(Dialog).isRequired * }, * render: function() { ... } * }); * * A more formal specification of how these methods are used: * * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) * decl := ReactPropTypes.{type}(.isRequired)? * * Each and every declaration produces a function with the same signature. This * allows the creation of custom validation functions. For example: * * var MyLink = React.createClass({ * propTypes: { * // An optional string or URI prop named "href". * href: function(props, propName, componentName) { * var propValue = props[propName]; * if (propValue != null && typeof propValue !== 'string' && * !(propValue instanceof URI)) { * return new Error( * 'Expected a string or an URI for ' + propName + ' in ' + * componentName * ); * } * } * }, * render: function() {...} * }); * * @internal */ var ANONYMOUS = '<<anonymous>>'; // Important! // Keep this list in sync with production version in `./factoryWithThrowingShims.js`. var ReactPropTypes = { array: createPrimitiveTypeChecker('array'), bigint: createPrimitiveTypeChecker('bigint'), bool: createPrimitiveTypeChecker('boolean'), func: createPrimitiveTypeChecker('function'), number: createPrimitiveTypeChecker('number'), object: createPrimitiveTypeChecker('object'), string: createPrimitiveTypeChecker('string'), symbol: createPrimitiveTypeChecker('symbol'), any: createAnyTypeChecker(), arrayOf: createArrayOfTypeChecker, element: createElementTypeChecker(), elementType: createElementTypeTypeChecker(), instanceOf: createInstanceTypeChecker, node: createNodeChecker(), objectOf: createObjectOfTypeChecker, oneOf: createEnumTypeChecker, oneOfType: createUnionTypeChecker, shape: createShapeTypeChecker, exact: createStrictShapeTypeChecker }; /** * inlined Object.is polyfill to avoid requiring consumers ship their own * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is */ /*eslint-disable no-self-compare*/ function is(x, y) { // SameValue algorithm if (x === y) { // Steps 1-5, 7-10 // Steps 6.b-6.e: +0 != -0 return x !== 0 || 1 / x === 1 / y; } else { // Step 6.a: NaN == NaN return x !== x && y !== y; } } /*eslint-enable no-self-compare*/ /** * We use an Error-like object for backward compatibility as people may call * PropTypes directly and inspect their output. However, we don't use real * Errors anymore. We don't inspect their stack anyway, and creating them * is prohibitively expensive if they are created too often, such as what * happens in oneOfType() for any type before the one that matched. */ function PropTypeError(message, data) { this.message = message; this.data = data && typeof data === 'object' ? data : {}; this.stack = ''; } // Make `instanceof Error` still work for returned errors. PropTypeError.prototype = Error.prototype; function createChainableTypeChecker(validate) { { var manualPropTypeCallCache = {}; var manualPropTypeWarningCount = 0; } function checkType(isRequired, props, propName, componentName, location, propFullName, secret) { componentName = componentName || ANONYMOUS; propFullName = propFullName || propName; if (secret !== ReactPropTypesSecret) { if (throwOnDirectAccess) { // New behavior only for users of `prop-types` package var err = new Error('Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use `PropTypes.checkPropTypes()` to call them. ' + 'Read more at http://fb.me/use-check-prop-types'); err.name = 'Invariant Violation'; throw err; } else if (typeof console !== 'undefined') { // Old behavior for people using React.PropTypes var cacheKey = componentName + ':' + propName; if (!manualPropTypeCallCache[cacheKey] && // Avoid spamming the console because they are often not actionable except for lib authors manualPropTypeWarningCount < 3) { printWarning$1('You are manually calling a React.PropTypes validation ' + 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' + 'and will throw in the standalone `prop-types` package. ' + 'You may be seeing this warning due to a third-party PropTypes ' + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'); manualPropTypeCallCache[cacheKey] = true; manualPropTypeWarningCount++; } } } if (props[propName] == null) { if (isRequired) { if (props[propName] === null) { return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.')); } return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.')); } return null; } else { return validate(props, propName, componentName, location, propFullName); } } var chainedCheckType = checkType.bind(null, false); chainedCheckType.isRequired = checkType.bind(null, true); return chainedCheckType; } function createPrimitiveTypeChecker(expectedType) { function validate(props, propName, componentName, location, propFullName, secret) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== expectedType) { // `propValue` being instance of, say, date/regexp, pass the 'object' // check, but we can offer a more precise error message here rather than // 'of type `object`'. var preciseType = getPreciseType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'), { expectedType: expectedType }); } return null; } return createChainableTypeChecker(validate); } function createAnyTypeChecker() { return createChainableTypeChecker(emptyFunctionThatReturnsNull); } function createArrayOfTypeChecker(typeChecker) { function validate(props, propName, componentName, location, propFullName) { if (typeof typeChecker !== 'function') { return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.'); } var propValue = props[propName]; if (!Array.isArray(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); } for (var i = 0; i < propValue.length; i++) { var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret); if (error instanceof Error) { return error; } } return null; } return createChainableTypeChecker(validate); } function createElementTypeChecker() { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; if (!isValidElement(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.')); } return null; } return createChainableTypeChecker(validate); } function createElementTypeTypeChecker() { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; if (!ReactIs$1.isValidElementType(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.')); } return null; } return createChainableTypeChecker(validate); } function createInstanceTypeChecker(expectedClass) { function validate(props, propName, componentName, location, propFullName) { if (!(props[propName] instanceof expectedClass)) { var expectedClassName = expectedClass.name || ANONYMOUS; var actualClassName = getClassName(props[propName]); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); } return null; } return createChainableTypeChecker(validate); } function createEnumTypeChecker(expectedValues) { if (!Array.isArray(expectedValues)) { { if (arguments.length > 1) { printWarning$1('Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' + 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'); } else { printWarning$1('Invalid argument supplied to oneOf, expected an array.'); } } return emptyFunctionThatReturnsNull; } function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; for (var i = 0; i < expectedValues.length; i++) { if (is(propValue, expectedValues[i])) { return null; } } var valuesString = JSON.stringify(expectedValues, function replacer(key, value) { var type = getPreciseType(value); if (type === 'symbol') { return String(value); } return value; }); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); } return createChainableTypeChecker(validate); } function createObjectOfTypeChecker(typeChecker) { function validate(props, propName, componentName, location, propFullName) { if (typeof typeChecker !== 'function') { return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.'); } var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); } for (var key in propValue) { if (has(propValue, key)) { var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error instanceof Error) { return error; } } } return null; } return createChainableTypeChecker(validate); } function createUnionTypeChecker(arrayOfTypeCheckers) { if (!Array.isArray(arrayOfTypeCheckers)) { printWarning$1('Invalid argument supplied to oneOfType, expected an instance of array.') ; return emptyFunctionThatReturnsNull; } for (var i = 0; i < arrayOfTypeCheckers.length; i++) { var checker = arrayOfTypeCheckers[i]; if (typeof checker !== 'function') { printWarning$1('Invalid argument supplied to oneOfType. Expected an array of check functions, but ' + 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'); return emptyFunctionThatReturnsNull; } } function validate(props, propName, componentName, location, propFullName) { var expectedTypes = []; for (var i = 0; i < arrayOfTypeCheckers.length; i++) { var checker = arrayOfTypeCheckers[i]; var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret); if (checkerResult == null) { return null; } if (checkerResult.data && has(checkerResult.data, 'expectedType')) { expectedTypes.push(checkerResult.data.expectedType); } } var expectedTypesMessage = expectedTypes.length > 0 ? ', expected one of type [' + expectedTypes.join(', ') + ']' : ''; return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.')); } return createChainableTypeChecker(validate); } function createNodeChecker() { function validate(props, propName, componentName, location, propFullName) { if (!isNode(props[propName])) { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); } return null; } return createChainableTypeChecker(validate); } function invalidValidatorError(componentName, location, propFullName, key, type) { return new PropTypeError((componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'); } function createShapeTypeChecker(shapeTypes) { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); } for (var key in shapeTypes) { var checker = shapeTypes[key]; if (typeof checker !== 'function') { return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker)); } var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error) { return error; } } return null; } return createChainableTypeChecker(validate); } function createStrictShapeTypeChecker(shapeTypes) { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); } // We need to check all keys in case some are required but missing from props. var allKeys = assign$3({}, props[propName], shapeTypes); for (var key in allKeys) { var checker = shapeTypes[key]; if (has(shapeTypes, key) && typeof checker !== 'function') { return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker)); } if (!checker) { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' + '\nBad object: ' + JSON.stringify(props[propName], null, ' ') + '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')); } var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error) { return error; } } return null; } return createChainableTypeChecker(validate); } function isNode(propValue) { switch (typeof propValue) { case 'number': case 'string': case 'undefined': return true; case 'boolean': return !propValue; case 'object': if (Array.isArray(propValue)) { return propValue.every(isNode); } if (propValue === null || isValidElement(propValue)) { return true; } var iteratorFn = getIteratorFn(propValue); if (iteratorFn) { var iterator = iteratorFn.call(propValue); var step; if (iteratorFn !== propValue.entries) { while (!(step = iterator.next()).done) { if (!isNode(step.value)) { return false; } } } else { // Iterator will provide entry [k,v] tuples rather than values. while (!(step = iterator.next()).done) { var entry = step.value; if (entry) { if (!isNode(entry[1])) { return false; } } } } } else { return false; } return true; default: return false; } } function isSymbol(propType, propValue) { // Native Symbol. if (propType === 'symbol') { return true; } // falsy value can't be a Symbol if (!propValue) { return false; } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' if (propValue['@@toStringTag'] === 'Symbol') { return true; } // Fallback for non-spec compliant Symbols which are polyfilled. if (typeof Symbol === 'function' && propValue instanceof Symbol) { return true; } return false; } // Equivalent of `typeof` but with special handling for array and regexp. function getPropType(propValue) { var propType = typeof propValue; if (Array.isArray(propValue)) { return 'array'; } if (propValue instanceof RegExp) { // Old webkits (at least until Android 4.0) return 'function' rather than // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ // passes PropTypes.object. return 'object'; } if (isSymbol(propType, propValue)) { return 'symbol'; } return propType; } // This handles more types than `getPropType`. Only used for error messages. // See `createPrimitiveTypeChecker`. function getPreciseType(propValue) { if (typeof propValue === 'undefined' || propValue === null) { return '' + propValue; } var propType = getPropType(propValue); if (propType === 'object') { if (propValue instanceof Date) { return 'date'; } else if (propValue instanceof RegExp) { return 'regexp'; } } return propType; } // Returns a string that is postfixed to a warning about an invalid type. // For example, "undefined" or "of type array" function getPostfixForTypeWarning(value) { var type = getPreciseType(value); switch (type) { case 'array': case 'object': return 'an ' + type; case 'boolean': case 'date': case 'regexp': return 'a ' + type; default: return type; } } // Returns class name of the object, if any. function getClassName(propValue) { if (!propValue.constructor || !propValue.constructor.name) { return ANONYMOUS; } return propValue.constructor.name; } ReactPropTypes.checkPropTypes = checkPropTypes; ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache; ReactPropTypes.PropTypes = ReactPropTypes; return ReactPropTypes; }; /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ { var ReactIs = reactIsExports; // By explicitly using `prop-types` you are opting into new development behavior. // http://fb.me/prop-types-in-prod var throwOnDirectAccess = true; propTypes.exports = factoryWithTypeCheckers(ReactIs.isElement, throwOnDirectAccess); } var propTypesExports = propTypes.exports; var classnames$1 = {exports: {}}; /*! Copyright (c) 2018 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames */ (function (module) { /* global define */ (function () { var hasOwn = {}.hasOwnProperty; function classNames() { var classes = []; for (var i = 0; i < arguments.length; i++) { var arg = arguments[i]; if (!arg) continue; var argType = typeof arg; if (argType === 'string' || argType === 'number') { classes.push(arg); } else if (Array.isArray(arg)) { if (arg.length) { var inner = classNames.apply(null, arg); if (inner) { classes.push(inner); } } } else if (argType === 'object') { if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) { classes.push(arg.toString()); continue; } for (var key in arg) { if (hasOwn.call(arg, key) && arg[key]) { classes.push(key); } } } } return classes.join(' '); } if (module.exports) { classNames.default = classNames; module.exports = classNames; } else { window.classNames = classNames; } })(); })(classnames$1); var classnamesExports = classnames$1.exports; var r = /*@__PURE__*/getDefaultExportFromCjs(classnamesExports); function requiredArgs$1(required, args) { if (args.length < required) { throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present'); } } function _typeof$C(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$C = function _typeof(obj) { return typeof obj; }; } else { _typeof$C = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$C(obj); } /** * @name isDate * @category Common Helpers * @summary Is the given value a date? * * @description * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes. * * @param {*} value - the value to check * @returns {boolean} true if the given value is a date * @throws {TypeError} 1 arguments required * * @example * // For a valid date: * const result = isDate(new Date()) * //=> true * * @example * // For an invalid date: * const result = isDate(new Date(NaN)) * //=> true * * @example * // For some value: * const result = isDate('2014-02-31') * //=> false * * @example * // For an object: * const result = isDate({}) * //=> false */ function isDate(value) { requiredArgs$1(1, arguments); return value instanceof Date || _typeof$C(value) === 'object' && Object.prototype.toString.call(value) === '[object Date]'; } function _typeof$B(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$B = function _typeof(obj) { return typeof obj; }; } else { _typeof$B = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$B(obj); } /** * @name toDate * @category Common Helpers * @summary Convert the given argument to an instance of Date. * * @description * Convert the given argument to an instance of Date. * * If the argument is an instance of Date, the function returns its clone. * * If the argument is a number, it is treated as a timestamp. * * If the argument is none of the above, the function returns Invalid Date. * * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`. * * @param {Date|Number} argument - the value to convert * @returns {Date} the parsed date in the local time zone * @throws {TypeError} 1 argument required * * @example * // Clone the date: * const result = toDate(new Date(2014, 1, 11, 11, 30, 30)) * //=> Tue Feb 11 2014 11:30:30 * * @example * // Convert the timestamp to date: * const result = toDate(1392098430000) * //=> Tue Feb 11 2014 11:30:30 */ function toDate(argument) { requiredArgs$1(1, arguments); var argStr = Object.prototype.toString.call(argument); // Clone the date if (argument instanceof Date || _typeof$B(argument) === 'object' && argStr === '[object Date]') { // Prevent the date to lose the milliseconds when passed to new Date() in IE10 return new Date(argument.getTime()); } else if (typeof argument === 'number' || argStr === '[object Number]') { return new Date(argument); } else { if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') { // eslint-disable-next-line no-console console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments"); // eslint-disable-next-line no-console console.warn(new Error().stack); } return new Date(NaN); } } /** * @name isValid * @category Common Helpers * @summary Is the given date valid? * * @description * Returns false if argument is Invalid Date and true otherwise. * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate} * Invalid Date is a Date, whose time value is NaN. * * Time value of Date: http://es5.github.io/#x15.9.1.1 * * @param {*} date - the date to check * @returns {Boolean} the date is valid * @throws {TypeError} 1 argument required * * @example * // For the valid date: * const result = isValid(new Date(2014, 1, 31)) * //=> true * * @example * // For the value, convertable into a date: * const result = isValid(1393804800000) * //=> true * * @example * // For the invalid date: * const result = isValid(new Date('')) * //=> false */ function isValid(dirtyDate) { requiredArgs$1(1, arguments); if (!isDate(dirtyDate) && typeof dirtyDate !== 'number') { return false; } var date = toDate(dirtyDate); return !isNaN(Number(date)); } function toInteger$1(dirtyNumber) { if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) { return NaN; } var number = Number(dirtyNumber); if (isNaN(number)) { return number; } return number < 0 ? Math.ceil(number) : Math.floor(number); } /** * @name addMilliseconds * @category Millisecond Helpers * @summary Add the specified number of milliseconds to the given date. * * @description * Add the specified number of milliseconds to the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. * @returns {Date} the new date with the milliseconds added * @throws {TypeError} 2 arguments required * * @example * // Add 750 milliseconds to 10 July 2014 12:45:30.000: * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750) * //=> Thu Jul 10 2014 12:45:30.750 */ function addMilliseconds(dirtyDate, dirtyAmount) { requiredArgs$1(2, arguments); var timestamp = toDate(dirtyDate).getTime(); var amount = toInteger$1(dirtyAmount); return new Date(timestamp + amount); } /** * @name subMilliseconds * @category Millisecond Helpers * @summary Subtract the specified number of milliseconds from the given date. * * @description * Subtract the specified number of milliseconds from the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. * @returns {Date} the new date with the milliseconds subtracted * @throws {TypeError} 2 arguments required * * @example * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000: * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750) * //=> Thu Jul 10 2014 12:45:29.250 */ function subMilliseconds(dirtyDate, dirtyAmount) { requiredArgs$1(2, arguments); var amount = toInteger$1(dirtyAmount); return addMilliseconds(dirtyDate, -amount); } var MILLISECONDS_IN_DAY$1 = 86400000; function getUTCDayOfYear(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var timestamp = date.getTime(); date.setUTCMonth(0, 1); date.setUTCHours(0, 0, 0, 0); var startOfYearTimestamp = date.getTime(); var difference = timestamp - startOfYearTimestamp; return Math.floor(difference / MILLISECONDS_IN_DAY$1) + 1; } function startOfUTCISOWeek(dirtyDate) { requiredArgs$1(1, arguments); var weekStartsOn = 1; var date = toDate(dirtyDate); var day = date.getUTCDay(); var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; date.setUTCDate(date.getUTCDate() - diff); date.setUTCHours(0, 0, 0, 0); return date; } function getUTCISOWeekYear(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var year = date.getUTCFullYear(); var fourthOfJanuaryOfNextYear = new Date(0); fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4); fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0); var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear); var fourthOfJanuaryOfThisYear = new Date(0); fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4); fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0); var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear); if (date.getTime() >= startOfNextYear.getTime()) { return year + 1; } else if (date.getTime() >= startOfThisYear.getTime()) { return year; } else { return year - 1; } } function startOfUTCISOWeekYear(dirtyDate) { requiredArgs$1(1, arguments); var year = getUTCISOWeekYear(dirtyDate); var fourthOfJanuary = new Date(0); fourthOfJanuary.setUTCFullYear(year, 0, 4); fourthOfJanuary.setUTCHours(0, 0, 0, 0); var date = startOfUTCISOWeek(fourthOfJanuary); return date; } var MILLISECONDS_IN_WEEK$2 = 604800000; function getUTCISOWeek(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); // Round the number of days to the nearest integer // because the number of milliseconds in a week is not constant // (e.g. it's different in the week of the daylight saving time clock shift) return Math.round(diff / MILLISECONDS_IN_WEEK$2) + 1; } var defaultOptions = {}; function getDefaultOptions() { return defaultOptions; } function startOfUTCWeek(dirtyDate, options) { var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; requiredArgs$1(1, arguments); var defaultOptions = getDefaultOptions(); var weekStartsOn = toInteger$1((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { throw new RangeError('weekStartsOn must be between 0 and 6 inclusively'); } var date = toDate(dirtyDate); var day = date.getUTCDay(); var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; date.setUTCDate(date.getUTCDate() - diff); date.setUTCHours(0, 0, 0, 0); return date; } function getUTCWeekYear(dirtyDate, options) { var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var year = date.getUTCFullYear(); var defaultOptions = getDefaultOptions(); var firstWeekContainsDate = toInteger$1((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively'); } var firstWeekOfNextYear = new Date(0); firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate); firstWeekOfNextYear.setUTCHours(0, 0, 0, 0); var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, options); var firstWeekOfThisYear = new Date(0); firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate); firstWeekOfThisYear.setUTCHours(0, 0, 0, 0); var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, options); if (date.getTime() >= startOfNextYear.getTime()) { return year + 1; } else if (date.getTime() >= startOfThisYear.getTime()) { return year; } else { return year - 1; } } function startOfUTCWeekYear(dirtyDate, options) { var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; requiredArgs$1(1, arguments); var defaultOptions = getDefaultOptions(); var firstWeekContainsDate = toInteger$1((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); var year = getUTCWeekYear(dirtyDate, options); var firstWeek = new Date(0); firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate); firstWeek.setUTCHours(0, 0, 0, 0); var date = startOfUTCWeek(firstWeek, options); return date; } var MILLISECONDS_IN_WEEK$1 = 604800000; function getUTCWeek(dirtyDate, options) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); // Round the number of days to the nearest integer // because the number of milliseconds in a week is not constant // (e.g. it's different in the week of the daylight saving time clock shift) return Math.round(diff / MILLISECONDS_IN_WEEK$1) + 1; } function addLeadingZeros(number, targetLength) { var sign = number < 0 ? '-' : ''; var output = Math.abs(number).toString(); while (output.length < targetLength) { output = '0' + output; } return sign + output; } /* * | | Unit | | Unit | * |-----|--------------------------------|-----|--------------------------------| * | a | AM, PM | A* | | * | d | Day of month | D | | * | h | Hour [1-12] | H | Hour [0-23] | * | m | Minute | M | Month | * | s | Second | S | Fraction of second | * | y | Year (abs) | Y | | * * Letters marked by * are not implemented but reserved by Unicode standard. */ var formatters$1 = { // Year y: function y(date, token) { // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens // | Year | y | yy | yyy | yyyy | yyyyy | // |----------|-------|----|-------|-------|-------| // | AD 1 | 1 | 01 | 001 | 0001 | 00001 | // | AD 12 | 12 | 12 | 012 | 0012 | 00012 | // | AD 123 | 123 | 23 | 123 | 0123 | 00123 | // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 | // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 | var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript) var year = signedYear > 0 ? signedYear : 1 - signedYear; return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length); }, // Month M: function M(date, token) { var month = date.getUTCMonth(); return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2); }, // Day of the month d: function d(date, token) { return addLeadingZeros(date.getUTCDate(), token.length); }, // AM or PM a: function a(date, token) { var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am'; switch (token) { case 'a': case 'aa': return dayPeriodEnumValue.toUpperCase(); case 'aaa': return dayPeriodEnumValue; case 'aaaaa': return dayPeriodEnumValue[0]; case 'aaaa': default: return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.'; } }, // Hour [1-12] h: function h(date, token) { return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length); }, // Hour [0-23] H: function H(date, token) { return addLeadingZeros(date.getUTCHours(), token.length); }, // Minute m: function m(date, token) { return addLeadingZeros(date.getUTCMinutes(), token.length); }, // Second s: function s(date, token) { return addLeadingZeros(date.getUTCSeconds(), token.length); }, // Fraction of second S: function S(date, token) { var numberOfDigits = token.length; var milliseconds = date.getUTCMilliseconds(); var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3)); return addLeadingZeros(fractionalSeconds, token.length); } }; var lightFormatters = formatters$1; var dayPeriodEnum = { am: 'am', pm: 'pm', midnight: 'midnight', noon: 'noon', morning: 'morning', afternoon: 'afternoon', evening: 'evening', night: 'night' }; /* * | | Unit | | Unit | * |-----|--------------------------------|-----|--------------------------------| * | a | AM, PM | A* | Milliseconds in day | * | b | AM, PM, noon, midnight | B | Flexible day period | * | c | Stand-alone local day of week | C* | Localized hour w/ day period | * | d | Day of month | D | Day of year | * | e | Local day of week | E | Day of week | * | f | | F* | Day of week in month | * | g* | Modified Julian day | G | Era | * | h | Hour [1-12] | H | Hour [0-23] | * | i! | ISO day of week | I! | ISO week of year | * | j* | Localized hour w/ day period | J* | Localized hour w/o day period | * | k | Hour [1-24] | K | Hour [0-11] | * | l* | (deprecated) | L | Stand-alone month | * | m | Minute | M | Month | * | n | | N | | * | o! | Ordinal number modifier | O | Timezone (GMT) | * | p! | Long localized time | P! | Long localized date | * | q | Stand-alone quarter | Q | Quarter | * | r* | Related Gregorian year | R! | ISO week-numbering year | * | s | Second | S | Fraction of second | * | t! | Seconds timestamp | T! | Milliseconds timestamp | * | u | Extended year | U* | Cyclic year | * | v* | Timezone (generic non-locat.) | V* | Timezone (location) | * | w | Local week of year | W* | Week of month | * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) | * | y | Year (abs) | Y | Local week-numbering year | * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) | * * Letters marked by * are not implemented but reserved by Unicode standard. * * Letters marked by ! are non-standard, but implemented by date-fns: * - `o` modifies the previous token to turn it into an ordinal (see `format` docs) * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days, * i.e. 7 for Sunday, 1 for Monday, etc. * - `I` is ISO week of year, as opposed to `w` which is local week of year. * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year. * `R` is supposed to be used in conjunction with `I` and `i` * for universal ISO week-numbering date, whereas * `Y` is supposed to be used in conjunction with `w` and `e` * for week-numbering date specific to the locale. * - `P` is long localized date format * - `p` is long localized time format */ var formatters = { // Era G: function G(date, token, localize) { var era = date.getUTCFullYear() > 0 ? 1 : 0; switch (token) { // AD, BC case 'G': case 'GG': case 'GGG': return localize.era(era, { width: 'abbreviated' }); // A, B case 'GGGGG': return localize.era(era, { width: 'narrow' }); // Anno Domini, Before Christ case 'GGGG': default: return localize.era(era, { width: 'wide' }); } }, // Year y: function y(date, token, localize) { // Ordinal number if (token === 'yo') { var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript) var year = signedYear > 0 ? signedYear : 1 - signedYear; return localize.ordinalNumber(year, { unit: 'year' }); } return lightFormatters.y(date, token); }, // Local week-numbering year Y: function Y(date, token, localize, options) { var signedWeekYear = getUTCWeekYear(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript) var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; // Two digit year if (token === 'YY') { var twoDigitYear = weekYear % 100; return addLeadingZeros(twoDigitYear, 2); } // Ordinal number if (token === 'Yo') { return localize.ordinalNumber(weekYear, { unit: 'year' }); } // Padding return addLeadingZeros(weekYear, token.length); }, // ISO week-numbering year R: function R(date, token) { var isoWeekYear = getUTCISOWeekYear(date); // Padding return addLeadingZeros(isoWeekYear, token.length); }, // Extended year. This is a single number designating the year of this calendar system. // The main difference between `y` and `u` localizers are B.C. years: // | Year | `y` | `u` | // |------|-----|-----| // | AC 1 | 1 | 1 | // | BC 1 | 1 | 0 | // | BC 2 | 2 | -1 | // Also `yy` always returns the last two digits of a year, // while `uu` pads single digit years to 2 characters and returns other years unchanged. u: function u(date, token) { var year = date.getUTCFullYear(); return addLeadingZeros(year, token.length); }, // Quarter Q: function Q(date, token, localize) { var quarter = Math.ceil((date.getUTCMonth() + 1) / 3); switch (token) { // 1, 2, 3, 4 case 'Q': return String(quarter); // 01, 02, 03, 04 case 'QQ': return addLeadingZeros(quarter, 2); // 1st, 2nd, 3rd, 4th case 'Qo': return localize.ordinalNumber(quarter, { unit: 'quarter' }); // Q1, Q2, Q3, Q4 case 'QQQ': return localize.quarter(quarter, { width: 'abbreviated', context: 'formatting' }); // 1, 2, 3, 4 (narrow quarter; could be not numerical) case 'QQQQQ': return localize.quarter(quarter, { width: 'narrow', context: 'formatting' }); // 1st quarter, 2nd quarter, ... case 'QQQQ': default: return localize.quarter(quarter, { width: 'wide', context: 'formatting' }); } }, // Stand-alone quarter q: function q(date, token, localize) { var quarter = Math.ceil((date.getUTCMonth() + 1) / 3); switch (token) { // 1, 2, 3, 4 case 'q': return String(quarter); // 01, 02, 03, 04 case 'qq': return addLeadingZeros(quarter, 2); // 1st, 2nd, 3rd, 4th case 'qo': return localize.ordinalNumber(quarter, { unit: 'quarter' }); // Q1, Q2, Q3, Q4 case 'qqq': return localize.quarter(quarter, { width: 'abbreviated', context: 'standalone' }); // 1, 2, 3, 4 (narrow quarter; could be not numerical) case 'qqqqq': return localize.quarter(quarter, { width: 'narrow', context: 'standalone' }); // 1st quarter, 2nd quarter, ... case 'qqqq': default: return localize.quarter(quarter, { width: 'wide', context: 'standalone' }); } }, // Month M: function M(date, token, localize) { var month = date.getUTCMonth(); switch (token) { case 'M': case 'MM': return lightFormatters.M(date, token); // 1st, 2nd, ..., 12th case 'Mo': return localize.ordinalNumber(month + 1, { unit: 'month' }); // Jan, Feb, ..., Dec case 'MMM': return localize.month(month, { width: 'abbreviated', context: 'formatting' }); // J, F, ..., D case 'MMMMM': return localize.month(month, { width: 'narrow', context: 'formatting' }); // January, February, ..., December case 'MMMM': default: return localize.month(month, { width: 'wide', context: 'formatting' }); } }, // Stand-alone month L: function L(date, token, localize) { var month = date.getUTCMonth(); switch (token) { // 1, 2, ..., 12 case 'L': return String(month + 1); // 01, 02, ..., 12 case 'LL': return addLeadingZeros(month + 1, 2); // 1st, 2nd, ..., 12th case 'Lo': return localize.ordinalNumber(month + 1, { unit: 'month' }); // Jan, Feb, ..., Dec case 'LLL': return localize.month(month, { width: 'abbreviated', context: 'standalone' }); // J, F, ..., D case 'LLLLL': return localize.month(month, { width: 'narrow', context: 'standalone' }); // January, February, ..., December case 'LLLL': default: return localize.month(month, { width: 'wide', context: 'standalone' }); } }, // Local week of year w: function w(date, token, localize, options) { var week = getUTCWeek(date, options); if (token === 'wo') { return localize.ordinalNumber(week, { unit: 'week' }); } return addLeadingZeros(week, token.length); }, // ISO week of year I: function I(date, token, localize) { var isoWeek = getUTCISOWeek(date); if (token === 'Io') { return localize.ordinalNumber(isoWeek, { unit: 'week' }); } return addLeadingZeros(isoWeek, token.length); }, // Day of the month d: function d(date, token, localize) { if (token === 'do') { return localize.ordinalNumber(date.getUTCDate(), { unit: 'date' }); } return lightFormatters.d(date, token); }, // Day of year D: function D(date, token, localize) { var dayOfYear = getUTCDayOfYear(date); if (token === 'Do') { return localize.ordinalNumber(dayOfYear, { unit: 'dayOfYear' }); } return addLeadingZeros(dayOfYear, token.length); }, // Day of week E: function E(date, token, localize) { var dayOfWeek = date.getUTCDay(); switch (token) { // Tue case 'E': case 'EE': case 'EEE': return localize.day(dayOfWeek, { width: 'abbreviated', context: 'formatting' }); // T case 'EEEEE': return localize.day(dayOfWeek, { width: 'narrow', context: 'formatting' }); // Tu case 'EEEEEE': return localize.day(dayOfWeek, { width: 'short', context: 'formatting' }); // Tuesday case 'EEEE': default: return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' }); } }, // Local day of week e: function e(date, token, localize, options) { var dayOfWeek = date.getUTCDay(); var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; switch (token) { // Numerical value (Nth day of week with current locale or weekStartsOn) case 'e': return String(localDayOfWeek); // Padded numerical value case 'ee': return addLeadingZeros(localDayOfWeek, 2); // 1st, 2nd, ..., 7th case 'eo': return localize.ordinalNumber(localDayOfWeek, { unit: 'day' }); case 'eee': return localize.day(dayOfWeek, { width: 'abbreviated', context: 'formatting' }); // T case 'eeeee': return localize.day(dayOfWeek, { width: 'narrow', context: 'formatting' }); // Tu case 'eeeeee': return localize.day(dayOfWeek, { width: 'short', context: 'formatting' }); // Tuesday case 'eeee': default: return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' }); } }, // Stand-alone local day of week c: function c(date, token, localize, options) { var dayOfWeek = date.getUTCDay(); var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; switch (token) { // Numerical value (same as in `e`) case 'c': return String(localDayOfWeek); // Padded numerical value case 'cc': return addLeadingZeros(localDayOfWeek, token.length); // 1st, 2nd, ..., 7th case 'co': return localize.ordinalNumber(localDayOfWeek, { unit: 'day' }); case 'ccc': return localize.day(dayOfWeek, { width: 'abbreviated', context: 'standalone' }); // T case 'ccccc': return localize.day(dayOfWeek, { width: 'narrow', context: 'standalone' }); // Tu case 'cccccc': return localize.day(dayOfWeek, { width: 'short', context: 'standalone' }); // Tuesday case 'cccc': default: return localize.day(dayOfWeek, { width: 'wide', context: 'standalone' }); } }, // ISO day of week i: function i(date, token, localize) { var dayOfWeek = date.getUTCDay(); var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; switch (token) { // 2 case 'i': return String(isoDayOfWeek); // 02 case 'ii': return addLeadingZeros(isoDayOfWeek, token.length); // 2nd case 'io': return localize.ordinalNumber(isoDayOfWeek, { unit: 'day' }); // Tue case 'iii': return localize.day(dayOfWeek, { width: 'abbreviated', context: 'formatting' }); // T case 'iiiii': return localize.day(dayOfWeek, { width: 'narrow', context: 'formatting' }); // Tu case 'iiiiii': return localize.day(dayOfWeek, { width: 'short', context: 'formatting' }); // Tuesday case 'iiii': default: return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' }); } }, // AM or PM a: function a(date, token, localize) { var hours = date.getUTCHours(); var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'; switch (token) { case 'a': case 'aa': return localize.dayPeriod(dayPeriodEnumValue, { width: 'abbreviated', context: 'formatting' }); case 'aaa': return localize.dayPeriod(dayPeriodEnumValue, { width: 'abbreviated', context: 'formatting' }).toLowerCase(); case 'aaaaa': return localize.dayPeriod(dayPeriodEnumValue, { width: 'narrow', context: 'formatting' }); case 'aaaa': default: return localize.dayPeriod(dayPeriodEnumValue, { width: 'wide', context: 'formatting' }); } }, // AM, PM, midnight, noon b: function b(date, token, localize) { var hours = date.getUTCHours(); var dayPeriodEnumValue; if (hours === 12) { dayPeriodEnumValue = dayPeriodEnum.noon; } else if (hours === 0) { dayPeriodEnumValue = dayPeriodEnum.midnight; } else { dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'; } switch (token) { case 'b': case 'bb': return localize.dayPeriod(dayPeriodEnumValue, { width: 'abbreviated', context: 'formatting' }); case 'bbb': return localize.dayPeriod(dayPeriodEnumValue, { width: 'abbreviated', context: 'formatting' }).toLowerCase(); case 'bbbbb': return localize.dayPeriod(dayPeriodEnumValue, { width: 'narrow', context: 'formatting' }); case 'bbbb': default: return localize.dayPeriod(dayPeriodEnumValue, { width: 'wide', context: 'formatting' }); } }, // in the morning, in the afternoon, in the evening, at night B: function B(date, token, localize) { var hours = date.getUTCHours(); var dayPeriodEnumValue; if (hours >= 17) { dayPeriodEnumValue = dayPeriodEnum.evening; } else if (hours >= 12) { dayPeriodEnumValue = dayPeriodEnum.afternoon; } else if (hours >= 4) { dayPeriodEnumValue = dayPeriodEnum.morning; } else { dayPeriodEnumValue = dayPeriodEnum.night; } switch (token) { case 'B': case 'BB': case 'BBB': return localize.dayPeriod(dayPeriodEnumValue, { width: 'abbreviated', context: 'formatting' }); case 'BBBBB': return localize.dayPeriod(dayPeriodEnumValue, { width: 'narrow', context: 'formatting' }); case 'BBBB': default: return localize.dayPeriod(dayPeriodEnumValue, { width: 'wide', context: 'formatting' }); } }, // Hour [1-12] h: function h(date, token, localize) { if (token === 'ho') { var hours = date.getUTCHours() % 12; if (hours === 0) hours = 12; return localize.ordinalNumber(hours, { unit: 'hour' }); } return lightFormatters.h(date, token); }, // Hour [0-23] H: function H(date, token, localize) { if (token === 'Ho') { return localize.ordinalNumber(date.getUTCHours(), { unit: 'hour' }); } return lightFormatters.H(date, token); }, // Hour [0-11] K: function K(date, token, localize) { var hours = date.getUTCHours() % 12; if (token === 'Ko') { return localize.ordinalNumber(hours, { unit: 'hour' }); } return addLeadingZeros(hours, token.length); }, // Hour [1-24] k: function k(date, token, localize) { var hours = date.getUTCHours(); if (hours === 0) hours = 24; if (token === 'ko') { return localize.ordinalNumber(hours, { unit: 'hour' }); } return addLeadingZeros(hours, token.length); }, // Minute m: function m(date, token, localize) { if (token === 'mo') { return localize.ordinalNumber(date.getUTCMinutes(), { unit: 'minute' }); } return lightFormatters.m(date, token); }, // Second s: function s(date, token, localize) { if (token === 'so') { return localize.ordinalNumber(date.getUTCSeconds(), { unit: 'second' }); } return lightFormatters.s(date, token); }, // Fraction of second S: function S(date, token) { return lightFormatters.S(date, token); }, // Timezone (ISO-8601. If offset is 0, output is always `'Z'`) X: function X(date, token, _localize, options) { var originalDate = options._originalDate || date; var timezoneOffset = originalDate.getTimezoneOffset(); if (timezoneOffset === 0) { return 'Z'; } switch (token) { // Hours and optional minutes case 'X': return formatTimezoneWithOptionalMinutes(timezoneOffset); // Hours, minutes and optional seconds without `:` delimiter // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets // so this token always has the same output as `XX` case 'XXXX': case 'XX': // Hours and minutes without `:` delimiter return formatTimezone(timezoneOffset); // Hours, minutes and optional seconds with `:` delimiter // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets // so this token always has the same output as `XXX` case 'XXXXX': case 'XXX': // Hours and minutes with `:` delimiter default: return formatTimezone(timezoneOffset, ':'); } }, // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent) x: function x(date, token, _localize, options) { var originalDate = options._originalDate || date; var timezoneOffset = originalDate.getTimezoneOffset(); switch (token) { // Hours and optional minutes case 'x': return formatTimezoneWithOptionalMinutes(timezoneOffset); // Hours, minutes and optional seconds without `:` delimiter // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets // so this token always has the same output as `xx` case 'xxxx': case 'xx': // Hours and minutes without `:` delimiter return formatTimezone(timezoneOffset); // Hours, minutes and optional seconds with `:` delimiter // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets // so this token always has the same output as `xxx` case 'xxxxx': case 'xxx': // Hours and minutes with `:` delimiter default: return formatTimezone(timezoneOffset, ':'); } }, // Timezone (GMT) O: function O(date, token, _localize, options) { var originalDate = options._originalDate || date; var timezoneOffset = originalDate.getTimezoneOffset(); switch (token) { // Short case 'O': case 'OO': case 'OOO': return 'GMT' + formatTimezoneShort(timezoneOffset, ':'); // Long case 'OOOO': default: return 'GMT' + formatTimezone(timezoneOffset, ':'); } }, // Timezone (specific non-location) z: function z(date, token, _localize, options) { var originalDate = options._originalDate || date; var timezoneOffset = originalDate.getTimezoneOffset(); switch (token) { // Short case 'z': case 'zz': case 'zzz': return 'GMT' + formatTimezoneShort(timezoneOffset, ':'); // Long case 'zzzz': default: return 'GMT' + formatTimezone(timezoneOffset, ':'); } }, // Seconds timestamp t: function t(date, token, _localize, options) { var originalDate = options._originalDate || date; var timestamp = Math.floor(originalDate.getTime() / 1000); return addLeadingZeros(timestamp, token.length); }, // Milliseconds timestamp T: function T(date, token, _localize, options) { var originalDate = options._originalDate || date; var timestamp = originalDate.getTime(); return addLeadingZeros(timestamp, token.length); } }; function formatTimezoneShort(offset, dirtyDelimiter) { var sign = offset > 0 ? '-' : '+'; var absOffset = Math.abs(offset); var hours = Math.floor(absOffset / 60); var minutes = absOffset % 60; if (minutes === 0) { return sign + String(hours); } var delimiter = dirtyDelimiter || ''; return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2); } function formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) { if (offset % 60 === 0) { var sign = offset > 0 ? '-' : '+'; return sign + addLeadingZeros(Math.abs(offset) / 60, 2); } return formatTimezone(offset, dirtyDelimiter); } function formatTimezone(offset, dirtyDelimiter) { var delimiter = dirtyDelimiter || ''; var sign = offset > 0 ? '-' : '+'; var absOffset = Math.abs(offset); var hours = addLeadingZeros(Math.floor(absOffset / 60), 2); var minutes = addLeadingZeros(absOffset % 60, 2); return sign + hours + delimiter + minutes; } var dateLongFormatter = function dateLongFormatter(pattern, formatLong) { switch (pattern) { case 'P': return formatLong.date({ width: 'short' }); case 'PP': return formatLong.date({ width: 'medium' }); case 'PPP': return formatLong.date({ width: 'long' }); case 'PPPP': default: return formatLong.date({ width: 'full' }); } }; var timeLongFormatter = function timeLongFormatter(pattern, formatLong) { switch (pattern) { case 'p': return formatLong.time({ width: 'short' }); case 'pp': return formatLong.time({ width: 'medium' }); case 'ppp': return formatLong.time({ width: 'long' }); case 'pppp': default: return formatLong.time({ width: 'full' }); } }; var dateTimeLongFormatter = function dateTimeLongFormatter(pattern, formatLong) { var matchResult = pattern.match(/(P+)(p+)?/) || []; var datePattern = matchResult[1]; var timePattern = matchResult[2]; if (!timePattern) { return dateLongFormatter(pattern, formatLong); } var dateTimeFormat; switch (datePattern) { case 'P': dateTimeFormat = formatLong.dateTime({ width: 'short' }); break; case 'PP': dateTimeFormat = formatLong.dateTime({ width: 'medium' }); break; case 'PPP': dateTimeFormat = formatLong.dateTime({ width: 'long' }); break; case 'PPPP': default: dateTimeFormat = formatLong.dateTime({ width: 'full' }); break; } return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong)); }; var longFormatters = { p: timeLongFormatter, P: dateTimeLongFormatter }; /** * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds. * They usually appear for dates that denote time before the timezones were introduced * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891 * and GMT+01:00:00 after that date) * * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above, * which would lead to incorrect calculations. * * This function returns the timezone offset in milliseconds that takes seconds in account. */ function getTimezoneOffsetInMilliseconds(date) { var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds())); utcDate.setUTCFullYear(date.getFullYear()); return date.getTime() - utcDate.getTime(); } var protectedDayOfYearTokens = ['D', 'DD']; var protectedWeekYearTokens = ['YY', 'YYYY']; function isProtectedDayOfYearToken(token) { return protectedDayOfYearTokens.indexOf(token) !== -1; } function isProtectedWeekYearToken(token) { return protectedWeekYearTokens.indexOf(token) !== -1; } function throwProtectedError(token, format, input) { if (token === 'YYYY') { throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(format, "`) for formatting years to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); } else if (token === 'YY') { throw new RangeError("Use `yy` instead of `YY` (in `".concat(format, "`) for formatting years to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); } else if (token === 'D') { throw new RangeError("Use `d` instead of `D` (in `".concat(format, "`) for formatting days of the month to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); } else if (token === 'DD') { throw new RangeError("Use `dd` instead of `DD` (in `".concat(format, "`) for formatting days of the month to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); } } var formatDistanceLocale = { lessThanXSeconds: { one: 'less than a second', other: 'less than {{count}} seconds' }, xSeconds: { one: '1 second', other: '{{count}} seconds' }, halfAMinute: 'half a minute', lessThanXMinutes: { one: 'less than a minute', other: 'less than {{count}} minutes' }, xMinutes: { one: '1 minute', other: '{{count}} minutes' }, aboutXHours: { one: 'about 1 hour', other: 'about {{count}} hours' }, xHours: { one: '1 hour', other: '{{count}} hours' }, xDays: { one: '1 day', other: '{{count}} days' }, aboutXWeeks: { one: 'about 1 week', other: 'about {{count}} weeks' }, xWeeks: { one: '1 week', other: '{{count}} weeks' }, aboutXMonths: { one: 'about 1 month', other: 'about {{count}} months' }, xMonths: { one: '1 month', other: '{{count}} months' }, aboutXYears: { one: 'about 1 year', other: 'about {{count}} years' }, xYears: { one: '1 year', other: '{{count}} years' }, overXYears: { one: 'over 1 year', other: 'over {{count}} years' }, almostXYears: { one: 'almost 1 year', other: 'almost {{count}} years' } }; var formatDistance = function formatDistance(token, count, options) { var result; var tokenValue = formatDistanceLocale[token]; if (typeof tokenValue === 'string') { result = tokenValue; } else if (count === 1) { result = tokenValue.one; } else { result = tokenValue.other.replace('{{count}}', count.toString()); } if (options !== null && options !== void 0 && options.addSuffix) { if (options.comparison && options.comparison > 0) { return 'in ' + result; } else { return result + ' ago'; } } return result; }; var formatDistance$1 = formatDistance; function buildFormatLongFn(args) { return function () { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; // TODO: Remove String() var width = options.width ? String(options.width) : args.defaultWidth; var format = args.formats[width] || args.formats[args.defaultWidth]; return format; }; } var dateFormats = { full: 'EEEE, MMMM do, y', long: 'MMMM do, y', medium: 'MMM d, y', short: 'MM/dd/yyyy' }; var timeFormats = { full: 'h:mm:ss a zzzz', long: 'h:mm:ss a z', medium: 'h:mm:ss a', short: 'h:mm a' }; var dateTimeFormats = { full: "{{date}} 'at' {{time}}", long: "{{date}} 'at' {{time}}", medium: '{{date}}, {{time}}', short: '{{date}}, {{time}}' }; var formatLong = { date: buildFormatLongFn({ formats: dateFormats, defaultWidth: 'full' }), time: buildFormatLongFn({ formats: timeFormats, defaultWidth: 'full' }), dateTime: buildFormatLongFn({ formats: dateTimeFormats, defaultWidth: 'full' }) }; var formatLong$1 = formatLong; var formatRelativeLocale = { lastWeek: "'last' eeee 'at' p", yesterday: "'yesterday at' p", today: "'today at' p", tomorrow: "'tomorrow at' p", nextWeek: "eeee 'at' p", other: 'P' }; var formatRelative = function formatRelative(token, _date, _baseDate, _options) { return formatRelativeLocale[token]; }; var formatRelative$1 = formatRelative; function buildLocalizeFn(args) { return function (dirtyIndex, options) { var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone'; var valuesArray; if (context === 'formatting' && args.formattingValues) { var defaultWidth = args.defaultFormattingWidth || args.defaultWidth; var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth; valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth]; } else { var _defaultWidth = args.defaultWidth; var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth; valuesArray = args.values[_width] || args.values[_defaultWidth]; } var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it! return valuesArray[index]; }; } var eraValues = { narrow: ['B', 'A'], abbreviated: ['BC', 'AD'], wide: ['Before Christ', 'Anno Domini'] }; var quarterValues = { narrow: ['1', '2', '3', '4'], abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'], wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter'] }; // Note: in English, the names of days of the week and months are capitalized. // If you are making a new locale based on this one, check if the same is true for the language you're working on. // Generally, formatted dates should look like they are in the middle of a sentence, // e.g. in Spanish language the weekdays and months should be in the lowercase. var monthValues = { narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'], abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }; var dayValues = { narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'], short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] }; var dayPeriodValues = { narrow: { am: 'a', pm: 'p', midnight: 'mi', noon: 'n', morning: 'morning', afternoon: 'afternoon', evening: 'evening', night: 'night' }, abbreviated: { am: 'AM', pm: 'PM', midnight: 'midnight', noon: 'noon', morning: 'morning', afternoon: 'afternoon', evening: 'evening', night: 'night' }, wide: { am: 'a.m.', pm: 'p.m.', midnight: 'midnight', noon: 'noon', morning: 'morning', afternoon: 'afternoon', evening: 'evening', night: 'night' } }; var formattingDayPeriodValues = { narrow: { am: 'a', pm: 'p', midnight: 'mi', noon: 'n', morning: 'in the morning', afternoon: 'in the afternoon', evening: 'in the evening', night: 'at night' }, abbreviated: { am: 'AM', pm: 'PM', midnight: 'midnight', noon: 'noon', morning: 'in the morning', afternoon: 'in the afternoon', evening: 'in the evening', night: 'at night' }, wide: { am: 'a.m.', pm: 'p.m.', midnight: 'midnight', noon: 'noon', morning: 'in the morning', afternoon: 'in the afternoon', evening: 'in the evening', night: 'at night' } }; var ordinalNumber = function ordinalNumber(dirtyNumber, _options) { var number = Number(dirtyNumber); // If ordinal numbers depend on context, for example, // if they are different for different grammatical genders, // use `options.unit`. // // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear', // 'day', 'hour', 'minute', 'second'. var rem100 = number % 100; if (rem100 > 20 || rem100 < 10) { switch (rem100 % 10) { case 1: return number + 'st'; case 2: return number + 'nd'; case 3: return number + 'rd'; } } return number + 'th'; }; var localize = { ordinalNumber: ordinalNumber, era: buildLocalizeFn({ values: eraValues, defaultWidth: 'wide' }), quarter: buildLocalizeFn({ values: quarterValues, defaultWidth: 'wide', argumentCallback: function argumentCallback(quarter) { return quarter - 1; } }), month: buildLocalizeFn({ values: monthValues, defaultWidth: 'wide' }), day: buildLocalizeFn({ values: dayValues, defaultWidth: 'wide' }), dayPeriod: buildLocalizeFn({ values: dayPeriodValues, defaultWidth: 'wide', formattingValues: formattingDayPeriodValues, defaultFormattingWidth: 'wide' }) }; var localize$1 = localize; function buildMatchFn(args) { return function (string) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var width = options.width; var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth]; var matchResult = string.match(matchPattern); if (!matchResult) { return null; } var matchedString = matchResult[0]; var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth]; var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) { return pattern.test(matchedString); }) : findKey(parsePatterns, function (pattern) { return pattern.test(matchedString); }); var value; value = args.valueCallback ? args.valueCallback(key) : key; value = options.valueCallback ? options.valueCallback(value) : value; var rest = string.slice(matchedString.length); return { value: value, rest: rest }; }; } function findKey(object, predicate) { for (var key in object) { if (object.hasOwnProperty(key) && predicate(object[key])) { return key; } } return undefined; } function findIndex(array, predicate) { for (var key = 0; key < array.length; key++) { if (predicate(array[key])) { return key; } } return undefined; } function buildMatchPatternFn(args) { return function (string) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var matchResult = string.match(args.matchPattern); if (!matchResult) return null; var matchedString = matchResult[0]; var parseResult = string.match(args.parsePattern); if (!parseResult) return null; var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]; value = options.valueCallback ? options.valueCallback(value) : value; var rest = string.slice(matchedString.length); return { value: value, rest: rest }; }; } var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i; var parseOrdinalNumberPattern = /\d+/i; var matchEraPatterns = { narrow: /^(b|a)/i, abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, wide: /^(before christ|before common era|anno domini|common era)/i }; var parseEraPatterns = { any: [/^b/i, /^(a|c)/i] }; var matchQuarterPatterns = { narrow: /^[1234]/i, abbreviated: /^q[1234]/i, wide: /^[1234](th|st|nd|rd)? quarter/i }; var parseQuarterPatterns = { any: [/1/i, /2/i, /3/i, /4/i] }; var matchMonthPatterns = { narrow: /^[jfmasond]/i, abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i }; var parseMonthPatterns = { narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i], any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i] }; var matchDayPatterns = { narrow: /^[smtwf]/i, short: /^(su|mo|tu|we|th|fr|sa)/i, abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i }; var parseDayPatterns = { narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] }; var matchDayPeriodPatterns = { narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i }; var parseDayPeriodPatterns = { any: { am: /^a/i, pm: /^p/i, midnight: /^mi/i, noon: /^no/i, morning: /morning/i, afternoon: /afternoon/i, evening: /evening/i, night: /night/i } }; var match$1 = { ordinalNumber: buildMatchPatternFn({ matchPattern: matchOrdinalNumberPattern, parsePattern: parseOrdinalNumberPattern, valueCallback: function valueCallback(value) { return parseInt(value, 10); } }), era: buildMatchFn({ matchPatterns: matchEraPatterns, defaultMatchWidth: 'wide', parsePatterns: parseEraPatterns, defaultParseWidth: 'any' }), quarter: buildMatchFn({ matchPatterns: matchQuarterPatterns, defaultMatchWidth: 'wide', parsePatterns: parseQuarterPatterns, defaultParseWidth: 'any', valueCallback: function valueCallback(index) { return index + 1; } }), month: buildMatchFn({ matchPatterns: matchMonthPatterns, defaultMatchWidth: 'wide', parsePatterns: parseMonthPatterns, defaultParseWidth: 'any' }), day: buildMatchFn({ matchPatterns: matchDayPatterns, defaultMatchWidth: 'wide', parsePatterns: parseDayPatterns, defaultParseWidth: 'any' }), dayPeriod: buildMatchFn({ matchPatterns: matchDayPeriodPatterns, defaultMatchWidth: 'any', parsePatterns: parseDayPeriodPatterns, defaultParseWidth: 'any' }) }; var match$2 = match$1; /** * @type {Locale} * @category Locales * @summary English locale (United States). * @language English * @iso-639-2 eng * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp} * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss} */ var locale = { code: 'en-US', formatDistance: formatDistance$1, formatLong: formatLong$1, formatRelative: formatRelative$1, localize: localize$1, match: match$2, options: { weekStartsOn: 0 /* Sunday */, firstWeekContainsDate: 1 } }; var defaultLocale = locale; // - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token // (one of the certain letters followed by `o`) // - (\w)\1* matches any sequences of the same letter // - '' matches two quote characters in a row // - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('), // except a single quote symbol, which ends the sequence. // Two quote characters do not end the sequence. // If there is no matching single quote // then the sequence will continue until the end of the string. // - . matches any single character unmatched by previous parts of the RegExps var formattingTokensRegExp$1 = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also // sequences of symbols P, p, and the combinations like `PPPPPPPppppp` var longFormattingTokensRegExp$1 = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; var escapedStringRegExp$1 = /^'([^]*?)'?$/; var doubleQuoteRegExp$1 = /''/g; var unescapedLatinCharacterRegExp$1 = /[a-zA-Z]/; /** * @name format * @category Common Helpers * @summary Format the date. * * @description * Return the formatted date string in the given format. The result may vary by locale. * * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries. * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * * The characters wrapped between two single quotes characters (') are escaped. * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote. * (see the last example) * * Format of the string is based on Unicode Technical Standard #35: * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table * with a few additions (see note 7 below the table). * * Accepted patterns: * | Unit | Pattern | Result examples | Notes | * |---------------------------------|---------|-----------------------------------|-------| * | Era | G..GGG | AD, BC | | * | | GGGG | Anno Domini, Before Christ | 2 | * | | GGGGG | A, B | | * | Calendar year | y | 44, 1, 1900, 2017 | 5 | * | | yo | 44th, 1st, 0th, 17th | 5,7 | * | | yy | 44, 01, 00, 17 | 5 | * | | yyy | 044, 001, 1900, 2017 | 5 | * | | yyyy | 0044, 0001, 1900, 2017 | 5 | * | | yyyyy | ... | 3,5 | * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 | * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 | * | | YY | 44, 01, 00, 17 | 5,8 | * | | YYY | 044, 001, 1900, 2017 | 5 | * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 | * | | YYYYY | ... | 3,5 | * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 | * | | RR | -43, 00, 01, 1900, 2017 | 5,7 | * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 | * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 | * | | RRRRR | ... | 3,5,7 | * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 | * | | uu | -43, 01, 1900, 2017 | 5 | * | | uuu | -043, 001, 1900, 2017 | 5 | * | | uuuu | -0043, 0001, 1900, 2017 | 5 | * | | uuuuu | ... | 3,5 | * | Quarter (formatting) | Q | 1, 2, 3, 4 | | * | | Qo | 1st, 2nd, 3rd, 4th | 7 | * | | QQ | 01, 02, 03, 04 | | * | | QQQ | Q1, Q2, Q3, Q4 | | * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 | * | | QQQQQ | 1, 2, 3, 4 | 4 | * | Quarter (stand-alone) | q | 1, 2, 3, 4 | | * | | qo | 1st, 2nd, 3rd, 4th | 7 | * | | qq | 01, 02, 03, 04 | | * | | qqq | Q1, Q2, Q3, Q4 | | * | | qqqq | 1st quarter, 2nd quarter, ... | 2 | * | | qqqqq | 1, 2, 3, 4 | 4 | * | Month (formatting) | M | 1, 2, ..., 12 | | * | | Mo | 1st, 2nd, ..., 12th | 7 | * | | MM | 01, 02, ..., 12 | | * | | MMM | Jan, Feb, ..., Dec | | * | | MMMM | January, February, ..., December | 2 | * | | MMMMM | J, F, ..., D | | * | Month (stand-alone) | L | 1, 2, ..., 12 | | * | | Lo | 1st, 2nd, ..., 12th | 7 | * | | LL | 01, 02, ..., 12 | | * | | LLL | Jan, Feb, ..., Dec | | * | | LLLL | January, February, ..., December | 2 | * | | LLLLL | J, F, ..., D | | * | Local week of year | w | 1, 2, ..., 53 | | * | | wo | 1st, 2nd, ..., 53th | 7 | * | | ww | 01, 02, ..., 53 | | * | ISO week of year | I | 1, 2, ..., 53 | 7 | * | | Io | 1st, 2nd, ..., 53th | 7 | * | | II | 01, 02, ..., 53 | 7 | * | Day of month | d | 1, 2, ..., 31 | | * | | do | 1st, 2nd, ..., 31st | 7 | * | | dd | 01, 02, ..., 31 | | * | Day of year | D | 1, 2, ..., 365, 366 | 9 | * | | Do | 1st, 2nd, ..., 365th, 366th | 7 | * | | DD | 01, 02, ..., 365, 366 | 9 | * | | DDD | 001, 002, ..., 365, 366 | | * | | DDDD | ... | 3 | * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | | * | | EEEE | Monday, Tuesday, ..., Sunday | 2 | * | | EEEEE | M, T, W, T, F, S, S | | * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | | * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 | * | | io | 1st, 2nd, ..., 7th | 7 | * | | ii | 01, 02, ..., 07 | 7 | * | | iii | Mon, Tue, Wed, ..., Sun | 7 | * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 | * | | iiiii | M, T, W, T, F, S, S | 7 | * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 | * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | | * | | eo | 2nd, 3rd, ..., 1st | 7 | * | | ee | 02, 03, ..., 01 | | * | | eee | Mon, Tue, Wed, ..., Sun | | * | | eeee | Monday, Tuesday, ..., Sunday | 2 | * | | eeeee | M, T, W, T, F, S, S | | * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | | * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | | * | | co | 2nd, 3rd, ..., 1st | 7 | * | | cc | 02, 03, ..., 01 | | * | | ccc | Mon, Tue, Wed, ..., Sun | | * | | cccc | Monday, Tuesday, ..., Sunday | 2 | * | | ccccc | M, T, W, T, F, S, S | | * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | | * | AM, PM | a..aa | AM, PM | | * | | aaa | am, pm | | * | | aaaa | a.m., p.m. | 2 | * | | aaaaa | a, p | | * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | | * | | bbb | am, pm, noon, midnight | | * | | bbbb | a.m., p.m., noon, midnight | 2 | * | | bbbbb | a, p, n, mi | | * | Flexible day period | B..BBB | at night, in the morning, ... | | * | | BBBB | at night, in the morning, ... | 2 | * | | BBBBB | at night, in the morning, ... | | * | Hour [1-12] | h | 1, 2, ..., 11, 12 | | * | | ho | 1st, 2nd, ..., 11th, 12th | 7 | * | | hh | 01, 02, ..., 11, 12 | | * | Hour [0-23] | H | 0, 1, 2, ..., 23 | | * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 | * | | HH | 00, 01, 02, ..., 23 | | * | Hour [0-11] | K | 1, 2, ..., 11, 0 | | * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 | * | | KK | 01, 02, ..., 11, 00 | | * | Hour [1-24] | k | 24, 1, 2, ..., 23 | | * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 | * | | kk | 24, 01, 02, ..., 23 | | * | Minute | m | 0, 1, ..., 59 | | * | | mo | 0th, 1st, ..., 59th | 7 | * | | mm | 00, 01, ..., 59 | | * | Second | s | 0, 1, ..., 59 | | * | | so | 0th, 1st, ..., 59th | 7 | * | | ss | 00, 01, ..., 59 | | * | Fraction of second | S | 0, 1, ..., 9 | | * | | SS | 00, 01, ..., 99 | | * | | SSS | 000, 001, ..., 999 | | * | | SSSS | ... | 3 | * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | | * | | XX | -0800, +0530, Z | | * | | XXX | -08:00, +05:30, Z | | * | | XXXX | -0800, +0530, Z, +123456 | 2 | * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | | * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | | * | | xx | -0800, +0530, +0000 | | * | | xxx | -08:00, +05:30, +00:00 | 2 | * | | xxxx | -0800, +0530, +0000, +123456 | | * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | | * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | | * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 | * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 | * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 | * | Seconds timestamp | t | 512969520 | 7 | * | | tt | ... | 3,7 | * | Milliseconds timestamp | T | 512969520900 | 7 | * | | TT | ... | 3,7 | * | Long localized date | P | 04/29/1453 | 7 | * | | PP | Apr 29, 1453 | 7 | * | | PPP | April 29th, 1453 | 7 | * | | PPPP | Friday, April 29th, 1453 | 2,7 | * | Long localized time | p | 12:00 AM | 7 | * | | pp | 12:00:00 AM | 7 | * | | ppp | 12:00:00 AM GMT+2 | 7 | * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 | * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 | * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 | * | | PPPppp | April 29th, 1453 at ... | 7 | * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 | * Notes: * 1. "Formatting" units (e.g. formatting quarter) in the default en-US locale * are the same as "stand-alone" units, but are different in some languages. * "Formatting" units are declined according to the rules of the language * in the context of a date. "Stand-alone" units are always nominative singular: * * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'` * * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'` * * 2. Any sequence of the identical letters is a pattern, unless it is escaped by * the single quote characters (see below). * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`) * the output will be the same as default pattern for this unit, usually * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units * are marked with "2" in the last column of the table. * * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'` * * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'` * * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'` * * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'` * * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'` * * 3. Some patterns could be unlimited length (such as `yyyyyyyy`). * The output will be padded with zeros to match the length of the pattern. * * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'` * * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales. * These tokens represent the shortest form of the quarter. * * 5. The main difference between `y` and `u` patterns are B.C. years: * * | Year | `y` | `u` | * |------|-----|-----| * | AC 1 | 1 | 1 | * | BC 1 | 1 | 0 | * | BC 2 | 2 | -1 | * * Also `yy` always returns the last two digits of a year, * while `uu` pads single digit years to 2 characters and returns other years unchanged: * * | Year | `yy` | `uu` | * |------|------|------| * | 1 | 01 | 01 | * | 14 | 14 | 14 | * | 376 | 76 | 376 | * | 1453 | 53 | 1453 | * * The same difference is true for local and ISO week-numbering years (`Y` and `R`), * except local week-numbering years are dependent on `options.weekStartsOn` * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear} * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}). * * 6. Specific non-location timezones are currently unavailable in `date-fns`, * so right now these tokens fall back to GMT timezones. * * 7. These patterns are not in the Unicode Technical Standard #35: * - `i`: ISO day of week * - `I`: ISO week of year * - `R`: ISO week-numbering year * - `t`: seconds timestamp * - `T`: milliseconds timestamp * - `o`: ordinal number modifier * - `P`: long localized date * - `p`: long localized time * * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years. * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month. * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * * @param {Date|Number} date - the original date * @param {String} format - the string of tokens * @param {Object} [options] - an object with options. * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale} * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday) * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`; * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`; * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * @returns {String} the formatted date string * @throws {TypeError} 2 arguments required * @throws {RangeError} `date` must not be Invalid Date * @throws {RangeError} `options.locale` must contain `localize` property * @throws {RangeError} `options.locale` must contain `formatLong` property * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6 * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7 * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * @throws {RangeError} format string contains an unescaped latin alphabet character * * @example * // Represent 11 February 2014 in middle-endian format: * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy') * //=> '02/11/2014' * * @example * // Represent 2 July 2014 in Esperanto: * import { eoLocale } from 'date-fns/locale/eo' * const result = format(new Date(2014, 6, 2), "do 'de' MMMM yyyy", { * locale: eoLocale * }) * //=> '2-a de julio 2014' * * @example * // Escape string by single quote characters: * const result = format(new Date(2014, 6, 2, 15), "h 'o''clock'") * //=> "3 o'clock" */ function format$2(dirtyDate, dirtyFormatStr, options) { var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4; requiredArgs$1(2, arguments); var formatStr = String(dirtyFormatStr); var defaultOptions = getDefaultOptions(); var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale; var firstWeekContainsDate = toInteger$1((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively'); } var weekStartsOn = toInteger$1((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { throw new RangeError('weekStartsOn must be between 0 and 6 inclusively'); } if (!locale.localize) { throw new RangeError('locale must contain localize property'); } if (!locale.formatLong) { throw new RangeError('locale must contain formatLong property'); } var originalDate = toDate(dirtyDate); if (!isValid(originalDate)) { throw new RangeError('Invalid time value'); } // Convert the date in system timezone to the same date in UTC+00:00 timezone. // This ensures that when UTC functions will be implemented, locales will be compatible with them. // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376 var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate); var utcDate = subMilliseconds(originalDate, timezoneOffset); var formatterOptions = { firstWeekContainsDate: firstWeekContainsDate, weekStartsOn: weekStartsOn, locale: locale, _originalDate: originalDate }; var result = formatStr.match(longFormattingTokensRegExp$1).map(function (substring) { var firstCharacter = substring[0]; if (firstCharacter === 'p' || firstCharacter === 'P') { var longFormatter = longFormatters[firstCharacter]; return longFormatter(substring, locale.formatLong); } return substring; }).join('').match(formattingTokensRegExp$1).map(function (substring) { // Replace two single quote characters with one single quote character if (substring === "''") { return "'"; } var firstCharacter = substring[0]; if (firstCharacter === "'") { return cleanEscapedString$1(substring); } var formatter = formatters[firstCharacter]; if (formatter) { if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(substring)) { throwProtectedError(substring, dirtyFormatStr, String(dirtyDate)); } if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(substring)) { throwProtectedError(substring, dirtyFormatStr, String(dirtyDate)); } return formatter(utcDate, substring, locale.localize, formatterOptions); } if (firstCharacter.match(unescapedLatinCharacterRegExp$1)) { throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`'); } return substring; }).join(''); return result; } function cleanEscapedString$1(input) { var matched = input.match(escapedStringRegExp$1); if (!matched) { return input; } return matched[1].replace(doubleQuoteRegExp$1, "'"); } var MILLISECONDS_IN_MINUTE = 60000; /** * @name addMinutes * @category Minute Helpers * @summary Add the specified number of minutes to the given date. * * @description * Add the specified number of minutes to the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of minutes to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. * @returns {Date} the new date with the minutes added * @throws {TypeError} 2 arguments required * * @example * // Add 30 minutes to 10 July 2014 12:00:00: * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30) * //=> Thu Jul 10 2014 12:30:00 */ function addMinutes(dirtyDate, dirtyAmount) { requiredArgs$1(2, arguments); var amount = toInteger$1(dirtyAmount); return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_MINUTE); } var MILLISECONDS_IN_HOUR = 3600000; /** * @name addHours * @category Hour Helpers * @summary Add the specified number of hours to the given date. * * @description * Add the specified number of hours to the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of hours to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. * @returns {Date} the new date with the hours added * @throws {TypeError} 2 arguments required * * @example * // Add 2 hours to 10 July 2014 23:00:00: * const result = addHours(new Date(2014, 6, 10, 23, 0), 2) * //=> Fri Jul 11 2014 01:00:00 */ function addHours(dirtyDate, dirtyAmount) { requiredArgs$1(2, arguments); var amount = toInteger$1(dirtyAmount); return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR); } /** * @name addDays * @category Day Helpers * @summary Add the specified number of days to the given date. * * @description * Add the specified number of days to the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. * @returns {Date} - the new date with the days added * @throws {TypeError} - 2 arguments required * * @example * // Add 10 days to 1 September 2014: * const result = addDays(new Date(2014, 8, 1), 10) * //=> Thu Sep 11 2014 00:00:00 */ function addDays(dirtyDate, dirtyAmount) { requiredArgs$1(2, arguments); var date = toDate(dirtyDate); var amount = toInteger$1(dirtyAmount); if (isNaN(amount)) { return new Date(NaN); } if (!amount) { // If 0 days, no-op to avoid changing times in the hour before end of DST return date; } date.setDate(date.getDate() + amount); return date; } /** * @name addWeeks * @category Week Helpers * @summary Add the specified number of weeks to the given date. * * @description * Add the specified number of week to the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of weeks to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. * @returns {Date} the new date with the weeks added * @throws {TypeError} 2 arguments required * * @example * // Add 4 weeks to 1 September 2014: * const result = addWeeks(new Date(2014, 8, 1), 4) * //=> Mon Sep 29 2014 00:00:00 */ function addWeeks(dirtyDate, dirtyAmount) { requiredArgs$1(2, arguments); var amount = toInteger$1(dirtyAmount); var days = amount * 7; return addDays(dirtyDate, days); } /** * @name addMonths * @category Month Helpers * @summary Add the specified number of months to the given date. * * @description * Add the specified number of months to the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. * @returns {Date} the new date with the months added * @throws {TypeError} 2 arguments required * * @example * // Add 5 months to 1 September 2014: * const result = addMonths(new Date(2014, 8, 1), 5) * //=> Sun Feb 01 2015 00:00:00 */ function addMonths(dirtyDate, dirtyAmount) { requiredArgs$1(2, arguments); var date = toDate(dirtyDate); var amount = toInteger$1(dirtyAmount); if (isNaN(amount)) { return new Date(NaN); } if (!amount) { // If 0 months, no-op to avoid changing times in the hour before end of DST return date; } var dayOfMonth = date.getDate(); // The JS Date object supports date math by accepting out-of-bounds values for // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we // want except that dates will wrap around the end of a month, meaning that // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So // we'll default to the end of the desired month by adding 1 to the desired // month and using a date of 0 to back up one day to the end of the desired // month. var endOfDesiredMonth = new Date(date.getTime()); endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0); var daysInMonth = endOfDesiredMonth.getDate(); if (dayOfMonth >= daysInMonth) { // If we're already at the end of the month, then this is the correct date // and we're done. return endOfDesiredMonth; } else { // Otherwise, we now know that setting the original day-of-month value won't // cause an overflow, so set the desired day-of-month. Note that we can't // just set the date of `endOfDesiredMonth` because that object may have had // its time changed in the unusual case where where a DST transition was on // the last day of the month and its local time was in the hour skipped or // repeated next to a DST transition. So we use `date` instead which is // guaranteed to still have the original time. date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth); return date; } } /** * @name addQuarters * @category Quarter Helpers * @summary Add the specified number of year quarters to the given date. * * @description * Add the specified number of year quarters to the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of quarters to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. * @returns {Date} the new date with the quarters added * @throws {TypeError} 2 arguments required * * @example * // Add 1 quarter to 1 September 2014: * const result = addQuarters(new Date(2014, 8, 1), 1) * //=> Mon Dec 01 2014 00:00:00 */ function addQuarters(dirtyDate, dirtyAmount) { requiredArgs$1(2, arguments); var amount = toInteger$1(dirtyAmount); var months = amount * 3; return addMonths(dirtyDate, months); } /** * @name addYears * @category Year Helpers * @summary Add the specified number of years to the given date. * * @description * Add the specified number of years to the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. * @returns {Date} the new date with the years added * @throws {TypeError} 2 arguments required * * @example * // Add 5 years to 1 September 2014: * const result = addYears(new Date(2014, 8, 1), 5) * //=> Sun Sep 01 2019 00:00:00 */ function addYears(dirtyDate, dirtyAmount) { requiredArgs$1(2, arguments); var amount = toInteger$1(dirtyAmount); return addMonths(dirtyDate, amount * 12); } /** * @name subDays * @category Day Helpers * @summary Subtract the specified number of days from the given date. * * @description * Subtract the specified number of days from the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of days to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. * @returns {Date} the new date with the days subtracted * @throws {TypeError} 2 arguments required * * @example * // Subtract 10 days from 1 September 2014: * const result = subDays(new Date(2014, 8, 1), 10) * //=> Fri Aug 22 2014 00:00:00 */ function subDays(dirtyDate, dirtyAmount) { requiredArgs$1(2, arguments); var amount = toInteger$1(dirtyAmount); return addDays(dirtyDate, -amount); } /** * @name subWeeks * @category Week Helpers * @summary Subtract the specified number of weeks from the given date. * * @description * Subtract the specified number of weeks from the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of weeks to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. * @returns {Date} the new date with the weeks subtracted * @throws {TypeError} 2 arguments required * * @example * // Subtract 4 weeks from 1 September 2014: * const result = subWeeks(new Date(2014, 8, 1), 4) * //=> Mon Aug 04 2014 00:00:00 */ function subWeeks(dirtyDate, dirtyAmount) { requiredArgs$1(2, arguments); var amount = toInteger$1(dirtyAmount); return addWeeks(dirtyDate, -amount); } /** * @name subMonths * @category Month Helpers * @summary Subtract the specified number of months from the given date. * * @description * Subtract the specified number of months from the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of months to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. * @returns {Date} the new date with the months subtracted * @throws {TypeError} 2 arguments required * * @example * // Subtract 5 months from 1 February 2015: * const result = subMonths(new Date(2015, 1, 1), 5) * //=> Mon Sep 01 2014 00:00:00 */ function subMonths(dirtyDate, dirtyAmount) { requiredArgs$1(2, arguments); var amount = toInteger$1(dirtyAmount); return addMonths(dirtyDate, -amount); } /** * @name subQuarters * @category Quarter Helpers * @summary Subtract the specified number of year quarters from the given date. * * @description * Subtract the specified number of year quarters from the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of quarters to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. * @returns {Date} the new date with the quarters subtracted * @throws {TypeError} 2 arguments required * * @example * // Subtract 3 quarters from 1 September 2014: * const result = subQuarters(new Date(2014, 8, 1), 3) * //=> Sun Dec 01 2013 00:00:00 */ function subQuarters(dirtyDate, dirtyAmount) { requiredArgs$1(2, arguments); var amount = toInteger$1(dirtyAmount); return addQuarters(dirtyDate, -amount); } /** * @name subYears * @category Year Helpers * @summary Subtract the specified number of years from the given date. * * @description * Subtract the specified number of years from the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of years to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. * @returns {Date} the new date with the years subtracted * @throws {TypeError} 2 arguments required * * @example * // Subtract 5 years from 1 September 2014: * const result = subYears(new Date(2014, 8, 1), 5) * //=> Tue Sep 01 2009 00:00:00 */ function subYears(dirtyDate, dirtyAmount) { requiredArgs$1(2, arguments); var amount = toInteger$1(dirtyAmount); return addYears(dirtyDate, -amount); } /** * @name getSeconds * @category Second Helpers * @summary Get the seconds of the given date. * * @description * Get the seconds of the given date. * * @param {Date|Number} date - the given date * @returns {Number} the seconds * @throws {TypeError} 1 argument required * * @example * // Get the seconds of 29 February 2012 11:45:05.123: * const result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123)) * //=> 5 */ function getSeconds(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var seconds = date.getSeconds(); return seconds; } /** * @name getMinutes * @category Minute Helpers * @summary Get the minutes of the given date. * * @description * Get the minutes of the given date. * * @param {Date|Number} date - the given date * @returns {Number} the minutes * @throws {TypeError} 1 argument required * * @example * // Get the minutes of 29 February 2012 11:45:05: * const result = getMinutes(new Date(2012, 1, 29, 11, 45, 5)) * //=> 45 */ function getMinutes(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var minutes = date.getMinutes(); return minutes; } /** * @name getHours * @category Hour Helpers * @summary Get the hours of the given date. * * @description * Get the hours of the given date. * * @param {Date|Number} date - the given date * @returns {Number} the hours * @throws {TypeError} 1 argument required * * @example * // Get the hours of 29 February 2012 11:45:00: * const result = getHours(new Date(2012, 1, 29, 11, 45)) * //=> 11 */ function getHours(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var hours = date.getHours(); return hours; } /** * @name getDay * @category Weekday Helpers * @summary Get the day of the week of the given date. * * @description * Get the day of the week of the given date. * * @param {Date|Number} date - the given date * @returns {0|1|2|3|4|5|6} the day of week, 0 represents Sunday * @throws {TypeError} 1 argument required * * @example * // Which day of the week is 29 February 2012? * const result = getDay(new Date(2012, 1, 29)) * //=> 3 */ function getDay(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var day = date.getDay(); return day; } /** * @name getDate * @category Day Helpers * @summary Get the day of the month of the given date. * * @description * Get the day of the month of the given date. * * @param {Date|Number} date - the given date * @returns {Number} the day of month * @throws {TypeError} 1 argument required * * @example * // Which day of the month is 29 February 2012? * const result = getDate(new Date(2012, 1, 29)) * //=> 29 */ function getDate(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var dayOfMonth = date.getDate(); return dayOfMonth; } /** * @name startOfWeek * @category Week Helpers * @summary Return the start of a week for the given date. * * @description * Return the start of a week for the given date. * The result will be in the local timezone. * * @param {Date|Number} date - the original date * @param {Object} [options] - an object with options. * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale} * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday) * @returns {Date} the start of a week * @throws {TypeError} 1 argument required * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6 * * @example * // The start of a week for 2 September 2014 11:55:00: * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0)) * //=> Sun Aug 31 2014 00:00:00 * * @example * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00: * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 }) * //=> Mon Sep 01 2014 00:00:00 */ function startOfWeek(dirtyDate, options) { var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; requiredArgs$1(1, arguments); var defaultOptions = getDefaultOptions(); var weekStartsOn = toInteger$1((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { throw new RangeError('weekStartsOn must be between 0 and 6 inclusively'); } var date = toDate(dirtyDate); var day = date.getDay(); var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; date.setDate(date.getDate() - diff); date.setHours(0, 0, 0, 0); return date; } /** * @name startOfISOWeek * @category ISO Week Helpers * @summary Return the start of an ISO week for the given date. * * @description * Return the start of an ISO week for the given date. * The result will be in the local timezone. * * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date * * @param {Date|Number} date - the original date * @returns {Date} the start of an ISO week * @throws {TypeError} 1 argument required * * @example * // The start of an ISO week for 2 September 2014 11:55:00: * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0)) * //=> Mon Sep 01 2014 00:00:00 */ function startOfISOWeek(dirtyDate) { requiredArgs$1(1, arguments); return startOfWeek(dirtyDate, { weekStartsOn: 1 }); } /** * @name getISOWeekYear * @category ISO Week-Numbering Year Helpers * @summary Get the ISO week-numbering year of the given date. * * @description * Get the ISO week-numbering year of the given date, * which always starts 3 days before the year's first Thursday. * * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date * * @param {Date|Number} date - the given date * @returns {Number} the ISO week-numbering year * @throws {TypeError} 1 argument required * * @example * // Which ISO-week numbering year is 2 January 2005? * const result = getISOWeekYear(new Date(2005, 0, 2)) * //=> 2004 */ function getISOWeekYear(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var year = date.getFullYear(); var fourthOfJanuaryOfNextYear = new Date(0); fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4); fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0); var startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear); var fourthOfJanuaryOfThisYear = new Date(0); fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4); fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0); var startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear); if (date.getTime() >= startOfNextYear.getTime()) { return year + 1; } else if (date.getTime() >= startOfThisYear.getTime()) { return year; } else { return year - 1; } } /** * @name startOfISOWeekYear * @category ISO Week-Numbering Year Helpers * @summary Return the start of an ISO week-numbering year for the given date. * * @description * Return the start of an ISO week-numbering year, * which always starts 3 days before the year's first Thursday. * The result will be in the local timezone. * * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date * * @param {Date|Number} date - the original date * @returns {Date} the start of an ISO week-numbering year * @throws {TypeError} 1 argument required * * @example * // The start of an ISO week-numbering year for 2 July 2005: * const result = startOfISOWeekYear(new Date(2005, 6, 2)) * //=> Mon Jan 03 2005 00:00:00 */ function startOfISOWeekYear(dirtyDate) { requiredArgs$1(1, arguments); var year = getISOWeekYear(dirtyDate); var fourthOfJanuary = new Date(0); fourthOfJanuary.setFullYear(year, 0, 4); fourthOfJanuary.setHours(0, 0, 0, 0); var date = startOfISOWeek(fourthOfJanuary); return date; } var MILLISECONDS_IN_WEEK = 604800000; /** * @name getISOWeek * @category ISO Week Helpers * @summary Get the ISO week of the given date. * * @description * Get the ISO week of the given date. * * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date * * @param {Date|Number} date - the given date * @returns {Number} the ISO week * @throws {TypeError} 1 argument required * * @example * // Which week of the ISO-week numbering year is 2 January 2005? * const result = getISOWeek(new Date(2005, 0, 2)) * //=> 53 */ function getISOWeek(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var diff = startOfISOWeek(date).getTime() - startOfISOWeekYear(date).getTime(); // Round the number of days to the nearest integer // because the number of milliseconds in a week is not constant // (e.g. it's different in the week of the daylight saving time clock shift) return Math.round(diff / MILLISECONDS_IN_WEEK) + 1; } /** * @name getMonth * @category Month Helpers * @summary Get the month of the given date. * * @description * Get the month of the given date. * * @param {Date|Number} date - the given date * @returns {Number} the month * @throws {TypeError} 1 argument required * * @example * // Which month is 29 February 2012? * const result = getMonth(new Date(2012, 1, 29)) * //=> 1 */ function getMonth(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var month = date.getMonth(); return month; } /** * @name getQuarter * @category Quarter Helpers * @summary Get the year quarter of the given date. * * @description * Get the year quarter of the given date. * * @param {Date|Number} date - the given date * @returns {Number} the quarter * @throws {TypeError} 1 argument required * * @example * // Which quarter is 2 July 2014? * const result = getQuarter(new Date(2014, 6, 2)) * //=> 3 */ function getQuarter(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var quarter = Math.floor(date.getMonth() / 3) + 1; return quarter; } /** * @name getYear * @category Year Helpers * @summary Get the year of the given date. * * @description * Get the year of the given date. * * @param {Date|Number} date - the given date * @returns {Number} the year * @throws {TypeError} 1 argument required * * @example * // Which year is 2 July 2014? * const result = getYear(new Date(2014, 6, 2)) * //=> 2014 */ function getYear(dirtyDate) { requiredArgs$1(1, arguments); return toDate(dirtyDate).getFullYear(); } /** * @name getTime * @category Timestamp Helpers * @summary Get the milliseconds timestamp of the given date. * * @description * Get the milliseconds timestamp of the given date. * * @param {Date|Number} date - the given date * @returns {Number} the timestamp * @throws {TypeError} 1 argument required * * @example * // Get the timestamp of 29 February 2012 11:45:05.123: * const result = getTime(new Date(2012, 1, 29, 11, 45, 5, 123)) * //=> 1330515905123 */ function getTime(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var timestamp = date.getTime(); return timestamp; } /** * @name setSeconds * @category Second Helpers * @summary Set the seconds to the given date. * * @description * Set the seconds to the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} seconds - the seconds of the new date * @returns {Date} the new date with the seconds set * @throws {TypeError} 2 arguments required * * @example * // Set 45 seconds to 1 September 2014 11:30:40: * const result = setSeconds(new Date(2014, 8, 1, 11, 30, 40), 45) * //=> Mon Sep 01 2014 11:30:45 */ function setSeconds(dirtyDate, dirtySeconds) { requiredArgs$1(2, arguments); var date = toDate(dirtyDate); var seconds = toInteger$1(dirtySeconds); date.setSeconds(seconds); return date; } /** * @name setMinutes * @category Minute Helpers * @summary Set the minutes to the given date. * * @description * Set the minutes to the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} minutes - the minutes of the new date * @returns {Date} the new date with the minutes set * @throws {TypeError} 2 arguments required * * @example * // Set 45 minutes to 1 September 2014 11:30:40: * const result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45) * //=> Mon Sep 01 2014 11:45:40 */ function setMinutes(dirtyDate, dirtyMinutes) { requiredArgs$1(2, arguments); var date = toDate(dirtyDate); var minutes = toInteger$1(dirtyMinutes); date.setMinutes(minutes); return date; } /** * @name setHours * @category Hour Helpers * @summary Set the hours to the given date. * * @description * Set the hours to the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} hours - the hours of the new date * @returns {Date} the new date with the hours set * @throws {TypeError} 2 arguments required * * @example * // Set 4 hours to 1 September 2014 11:30:00: * const result = setHours(new Date(2014, 8, 1, 11, 30), 4) * //=> Mon Sep 01 2014 04:30:00 */ function setHours(dirtyDate, dirtyHours) { requiredArgs$1(2, arguments); var date = toDate(dirtyDate); var hours = toInteger$1(dirtyHours); date.setHours(hours); return date; } /** * @name getDaysInMonth * @category Month Helpers * @summary Get the number of days in a month of the given date. * * @description * Get the number of days in a month of the given date. * * @param {Date|Number} date - the given date * @returns {Number} the number of days in a month * @throws {TypeError} 1 argument required * * @example * // How many days are in February 2000? * const result = getDaysInMonth(new Date(2000, 1)) * //=> 29 */ function getDaysInMonth(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var year = date.getFullYear(); var monthIndex = date.getMonth(); var lastDayOfMonth = new Date(0); lastDayOfMonth.setFullYear(year, monthIndex + 1, 0); lastDayOfMonth.setHours(0, 0, 0, 0); return lastDayOfMonth.getDate(); } /** * @name setMonth * @category Month Helpers * @summary Set the month to the given date. * * @description * Set the month to the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} month - the month of the new date * @returns {Date} the new date with the month set * @throws {TypeError} 2 arguments required * * @example * // Set February to 1 September 2014: * const result = setMonth(new Date(2014, 8, 1), 1) * //=> Sat Feb 01 2014 00:00:00 */ function setMonth(dirtyDate, dirtyMonth) { requiredArgs$1(2, arguments); var date = toDate(dirtyDate); var month = toInteger$1(dirtyMonth); var year = date.getFullYear(); var day = date.getDate(); var dateWithDesiredMonth = new Date(0); dateWithDesiredMonth.setFullYear(year, month, 15); dateWithDesiredMonth.setHours(0, 0, 0, 0); var daysInMonth = getDaysInMonth(dateWithDesiredMonth); // Set the last day of the new month // if the original date was the last day of the longer month date.setMonth(month, Math.min(day, daysInMonth)); return date; } /** * @name setQuarter * @category Quarter Helpers * @summary Set the year quarter to the given date. * * @description * Set the year quarter to the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} quarter - the quarter of the new date * @returns {Date} the new date with the quarter set * @throws {TypeError} 2 arguments required * * @example * // Set the 2nd quarter to 2 July 2014: * const result = setQuarter(new Date(2014, 6, 2), 2) * //=> Wed Apr 02 2014 00:00:00 */ function setQuarter(dirtyDate, dirtyQuarter) { requiredArgs$1(2, arguments); var date = toDate(dirtyDate); var quarter = toInteger$1(dirtyQuarter); var oldQuarter = Math.floor(date.getMonth() / 3) + 1; var diff = quarter - oldQuarter; return setMonth(date, date.getMonth() + diff * 3); } /** * @name setYear * @category Year Helpers * @summary Set the year to the given date. * * @description * Set the year to the given date. * * @param {Date|Number} date - the date to be changed * @param {Number} year - the year of the new date * @returns {Date} the new date with the year set * @throws {TypeError} 2 arguments required * * @example * // Set year 2013 to 1 September 2014: * const result = setYear(new Date(2014, 8, 1), 2013) * //=> Sun Sep 01 2013 00:00:00 */ function setYear(dirtyDate, dirtyYear) { requiredArgs$1(2, arguments); var date = toDate(dirtyDate); var year = toInteger$1(dirtyYear); // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date if (isNaN(date.getTime())) { return new Date(NaN); } date.setFullYear(year); return date; } function _typeof$A(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$A = function _typeof(obj) { return typeof obj; }; } else { _typeof$A = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$A(obj); } /** * @name min * @category Common Helpers * @summary Returns the earliest of the given dates. * * @description * Returns the earliest of the given dates. * * @param {Date[]|Number[]} datesArray - the dates to compare * @returns {Date} - the earliest of the dates * @throws {TypeError} 1 argument required * * @example * // Which of these dates is the earliest? * const result = min([ * new Date(1989, 6, 10), * new Date(1987, 1, 11), * new Date(1995, 6, 2), * new Date(1990, 0, 1) * ]) * //=> Wed Feb 11 1987 00:00:00 */ function min$1(dirtyDatesArray) { requiredArgs$1(1, arguments); var datesArray; // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method if (dirtyDatesArray && typeof dirtyDatesArray.forEach === 'function') { datesArray = dirtyDatesArray; // If `dirtyDatesArray` is Array-like Object, convert to Array. } else if (_typeof$A(dirtyDatesArray) === 'object' && dirtyDatesArray !== null) { datesArray = Array.prototype.slice.call(dirtyDatesArray); } else { // `dirtyDatesArray` is non-iterable, return Invalid Date return new Date(NaN); } var result; datesArray.forEach(function (dirtyDate) { var currentDate = toDate(dirtyDate); if (result === undefined || result > currentDate || isNaN(currentDate.getDate())) { result = currentDate; } }); return result || new Date(NaN); } function _typeof$z(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$z = function _typeof(obj) { return typeof obj; }; } else { _typeof$z = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$z(obj); } /** * @name max * @category Common Helpers * @summary Return the latest of the given dates. * * @description * Return the latest of the given dates. * * @param {Date[]|Number[]} datesArray - the dates to compare * @returns {Date} the latest of the dates * @throws {TypeError} 1 argument required * * @example * // Which of these dates is the latest? * const result = max([ * new Date(1989, 6, 10), * new Date(1987, 1, 11), * new Date(1995, 6, 2), * new Date(1990, 0, 1) * ]) * //=> Sun Jul 02 1995 00:00:00 */ function max$1(dirtyDatesArray) { requiredArgs$1(1, arguments); var datesArray; // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method if (dirtyDatesArray && typeof dirtyDatesArray.forEach === 'function') { datesArray = dirtyDatesArray; // If `dirtyDatesArray` is Array-like Object, convert to Array. } else if (_typeof$z(dirtyDatesArray) === 'object' && dirtyDatesArray !== null) { datesArray = Array.prototype.slice.call(dirtyDatesArray); } else { // `dirtyDatesArray` is non-iterable, return Invalid Date return new Date(NaN); } var result; datesArray.forEach(function (dirtyDate) { var currentDate = toDate(dirtyDate); if (result === undefined || result < currentDate || isNaN(Number(currentDate))) { result = currentDate; } }); return result || new Date(NaN); } /** * @name startOfDay * @category Day Helpers * @summary Return the start of a day for the given date. * * @description * Return the start of a day for the given date. * The result will be in the local timezone. * * @param {Date|Number} date - the original date * @returns {Date} the start of a day * @throws {TypeError} 1 argument required * * @example * // The start of a day for 2 September 2014 11:55:00: * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0)) * //=> Tue Sep 02 2014 00:00:00 */ function startOfDay(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); date.setHours(0, 0, 0, 0); return date; } var MILLISECONDS_IN_DAY = 86400000; /** * @name differenceInCalendarDays * @category Day Helpers * @summary Get the number of calendar days between the given dates. * * @description * Get the number of calendar days between the given dates. This means that the times are removed * from the dates and then the difference in days is calculated. * * @param {Date|Number} dateLeft - the later date * @param {Date|Number} dateRight - the earlier date * @returns {Number} the number of calendar days * @throws {TypeError} 2 arguments required * * @example * // How many calendar days are between * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00? * const result = differenceInCalendarDays( * new Date(2012, 6, 2, 0, 0), * new Date(2011, 6, 2, 23, 0) * ) * //=> 366 * // How many calendar days are between * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00? * const result = differenceInCalendarDays( * new Date(2011, 6, 3, 0, 1), * new Date(2011, 6, 2, 23, 59) * ) * //=> 1 */ function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) { requiredArgs$1(2, arguments); var startOfDayLeft = startOfDay(dirtyDateLeft); var startOfDayRight = startOfDay(dirtyDateRight); var timestampLeft = startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft); var timestampRight = startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight); // Round the number of days to the nearest integer // because the number of milliseconds in a day is not constant // (e.g. it's different in the day of the daylight saving time clock shift) return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY); } /** * @name differenceInCalendarMonths * @category Month Helpers * @summary Get the number of calendar months between the given dates. * * @description * Get the number of calendar months between the given dates. * * @param {Date|Number} dateLeft - the later date * @param {Date|Number} dateRight - the earlier date * @returns {Number} the number of calendar months * @throws {TypeError} 2 arguments required * * @example * // How many calendar months are between 31 January 2014 and 1 September 2014? * const result = differenceInCalendarMonths( * new Date(2014, 8, 1), * new Date(2014, 0, 31) * ) * //=> 8 */ function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) { requiredArgs$1(2, arguments); var dateLeft = toDate(dirtyDateLeft); var dateRight = toDate(dirtyDateRight); var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear(); var monthDiff = dateLeft.getMonth() - dateRight.getMonth(); return yearDiff * 12 + monthDiff; } /** * @name differenceInCalendarYears * @category Year Helpers * @summary Get the number of calendar years between the given dates. * * @description * Get the number of calendar years between the given dates. * * @param {Date|Number} dateLeft - the later date * @param {Date|Number} dateRight - the earlier date * @returns {Number} the number of calendar years * @throws {TypeError} 2 arguments required * * @example * // How many calendar years are between 31 December 2013 and 11 February 2015? * const result = differenceInCalendarYears( * new Date(2015, 1, 11), * new Date(2013, 11, 31) * ) * //=> 2 */ function differenceInCalendarYears(dirtyDateLeft, dirtyDateRight) { requiredArgs$1(2, arguments); var dateLeft = toDate(dirtyDateLeft); var dateRight = toDate(dirtyDateRight); return dateLeft.getFullYear() - dateRight.getFullYear(); } /** * @name startOfMonth * @category Month Helpers * @summary Return the start of a month for the given date. * * @description * Return the start of a month for the given date. * The result will be in the local timezone. * * @param {Date|Number} date - the original date * @returns {Date} the start of a month * @throws {TypeError} 1 argument required * * @example * // The start of a month for 2 September 2014 11:55:00: * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0)) * //=> Mon Sep 01 2014 00:00:00 */ function startOfMonth(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); date.setDate(1); date.setHours(0, 0, 0, 0); return date; } /** * @name startOfQuarter * @category Quarter Helpers * @summary Return the start of a year quarter for the given date. * * @description * Return the start of a year quarter for the given date. * The result will be in the local timezone. * * @param {Date|Number} date - the original date * @returns {Date} the start of a quarter * @throws {TypeError} 1 argument required * * @example * // The start of a quarter for 2 September 2014 11:55:00: * const result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0)) * //=> Tue Jul 01 2014 00:00:00 */ function startOfQuarter(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var currentMonth = date.getMonth(); var month = currentMonth - currentMonth % 3; date.setMonth(month, 1); date.setHours(0, 0, 0, 0); return date; } /** * @name startOfYear * @category Year Helpers * @summary Return the start of a year for the given date. * * @description * Return the start of a year for the given date. * The result will be in the local timezone. * * @param {Date|Number} date - the original date * @returns {Date} the start of a year * @throws {TypeError} 1 argument required * * @example * // The start of a year for 2 September 2014 11:55:00: * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00)) * //=> Wed Jan 01 2014 00:00:00 */ function startOfYear(dirtyDate) { requiredArgs$1(1, arguments); var cleanDate = toDate(dirtyDate); var date = new Date(0); date.setFullYear(cleanDate.getFullYear(), 0, 1); date.setHours(0, 0, 0, 0); return date; } /** * @name endOfDay * @category Day Helpers * @summary Return the end of a day for the given date. * * @description * Return the end of a day for the given date. * The result will be in the local timezone. * * @param {Date|Number} date - the original date * @returns {Date} the end of a day * @throws {TypeError} 1 argument required * * @example * // The end of a day for 2 September 2014 11:55:00: * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0)) * //=> Tue Sep 02 2014 23:59:59.999 */ function endOfDay(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); date.setHours(23, 59, 59, 999); return date; } /** * @name endOfMonth * @category Month Helpers * @summary Return the end of a month for the given date. * * @description * Return the end of a month for the given date. * The result will be in the local timezone. * * @param {Date|Number} date - the original date * @returns {Date} the end of a month * @throws {TypeError} 1 argument required * * @example * // The end of a month for 2 September 2014 11:55:00: * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0)) * //=> Tue Sep 30 2014 23:59:59.999 */ function endOfMonth(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var month = date.getMonth(); date.setFullYear(date.getFullYear(), month + 1, 0); date.setHours(23, 59, 59, 999); return date; } /** * @name endOfYear * @category Year Helpers * @summary Return the end of a year for the given date. * * @description * Return the end of a year for the given date. * The result will be in the local timezone. * * @param {Date|Number} date - the original date * @returns {Date} the end of a year * @throws {TypeError} 1 argument required * * @example * // The end of a year for 2 September 2014 11:55:00: * const result = endOfYear(new Date(2014, 8, 2, 11, 55, 00)) * //=> Wed Dec 31 2014 23:59:59.999 */ function endOfYear(dirtyDate) { requiredArgs$1(1, arguments); var date = toDate(dirtyDate); var year = date.getFullYear(); date.setFullYear(year + 1, 0, 0); date.setHours(23, 59, 59, 999); return date; } /** * @name isEqual * @category Common Helpers * @summary Are the given dates equal? * * @description * Are the given dates equal? * * @param {Date|Number} dateLeft - the first date to compare * @param {Date|Number} dateRight - the second date to compare * @returns {Boolean} the dates are equal * @throws {TypeError} 2 arguments required * * @example * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal? * const result = isEqual( * new Date(2014, 6, 2, 6, 30, 45, 0), * new Date(2014, 6, 2, 6, 30, 45, 500) * ) * //=> false */ function isEqual$2(dirtyLeftDate, dirtyRightDate) { requiredArgs$1(2, arguments); var dateLeft = toDate(dirtyLeftDate); var dateRight = toDate(dirtyRightDate); return dateLeft.getTime() === dateRight.getTime(); } /** * @name isSameDay * @category Day Helpers * @summary Are the given dates in the same day (and year and month)? * * @description * Are the given dates in the same day (and year and month)? * * @param {Date|Number} dateLeft - the first date to check * @param {Date|Number} dateRight - the second date to check * @returns {Boolean} the dates are in the same day (and year and month) * @throws {TypeError} 2 arguments required * * @example * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day? * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0)) * //=> true * * @example * // Are 4 September and 4 October in the same day? * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4)) * //=> false * * @example * // Are 4 September, 2014 and 4 September, 2015 in the same day? * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4)) * //=> false */ function isSameDay(dirtyDateLeft, dirtyDateRight) { requiredArgs$1(2, arguments); var dateLeftStartOfDay = startOfDay(dirtyDateLeft); var dateRightStartOfDay = startOfDay(dirtyDateRight); return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime(); } /** * @name isSameMonth * @category Month Helpers * @summary Are the given dates in the same month (and year)? * * @description * Are the given dates in the same month (and year)? * * @param {Date|Number} dateLeft - the first date to check * @param {Date|Number} dateRight - the second date to check * @returns {Boolean} the dates are in the same month (and year) * @throws {TypeError} 2 arguments required * * @example * // Are 2 September 2014 and 25 September 2014 in the same month? * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25)) * //=> true * * @example * // Are 2 September 2014 and 25 September 2015 in the same month? * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25)) * //=> false */ function isSameMonth(dirtyDateLeft, dirtyDateRight) { requiredArgs$1(2, arguments); var dateLeft = toDate(dirtyDateLeft); var dateRight = toDate(dirtyDateRight); return dateLeft.getFullYear() === dateRight.getFullYear() && dateLeft.getMonth() === dateRight.getMonth(); } /** * @name isSameYear * @category Year Helpers * @summary Are the given dates in the same year? * * @description * Are the given dates in the same year? * * @param {Date|Number} dateLeft - the first date to check * @param {Date|Number} dateRight - the second date to check * @returns {Boolean} the dates are in the same year * @throws {TypeError} 2 arguments required * * @example * // Are 2 September 2014 and 25 September 2014 in the same year? * const result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25)) * //=> true */ function isSameYear(dirtyDateLeft, dirtyDateRight) { requiredArgs$1(2, arguments); var dateLeft = toDate(dirtyDateLeft); var dateRight = toDate(dirtyDateRight); return dateLeft.getFullYear() === dateRight.getFullYear(); } /** * @name isSameQuarter * @category Quarter Helpers * @summary Are the given dates in the same quarter (and year)? * * @description * Are the given dates in the same quarter (and year)? * * @param {Date|Number} dateLeft - the first date to check * @param {Date|Number} dateRight - the second date to check * @returns {Boolean} the dates are in the same quarter (and year) * @throws {TypeError} 2 arguments required * * @example * // Are 1 January 2014 and 8 March 2014 in the same quarter? * const result = isSameQuarter(new Date(2014, 0, 1), new Date(2014, 2, 8)) * //=> true * * @example * // Are 1 January 2014 and 1 January 2015 in the same quarter? * const result = isSameQuarter(new Date(2014, 0, 1), new Date(2015, 0, 1)) * //=> false */ function isSameQuarter(dirtyDateLeft, dirtyDateRight) { requiredArgs$1(2, arguments); var dateLeftStartOfQuarter = startOfQuarter(dirtyDateLeft); var dateRightStartOfQuarter = startOfQuarter(dirtyDateRight); return dateLeftStartOfQuarter.getTime() === dateRightStartOfQuarter.getTime(); } /** * @name isAfter * @category Common Helpers * @summary Is the first date after the second one? * * @description * Is the first date after the second one? * * @param {Date|Number} date - the date that should be after the other one to return true * @param {Date|Number} dateToCompare - the date to compare with * @returns {Boolean} the first date is after the second date * @throws {TypeError} 2 arguments required * * @example * // Is 10 July 1989 after 11 February 1987? * const result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11)) * //=> true */ function isAfter(dirtyDate, dirtyDateToCompare) { requiredArgs$1(2, arguments); var date = toDate(dirtyDate); var dateToCompare = toDate(dirtyDateToCompare); return date.getTime() > dateToCompare.getTime(); } /** * @name isBefore * @category Common Helpers * @summary Is the first date before the second one? * * @description * Is the first date before the second one? * * @param {Date|Number} date - the date that should be before the other one to return true * @param {Date|Number} dateToCompare - the date to compare with * @returns {Boolean} the first date is before the second date * @throws {TypeError} 2 arguments required * * @example * // Is 10 July 1989 before 11 February 1987? * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11)) * //=> false */ function isBefore(dirtyDate, dirtyDateToCompare) { requiredArgs$1(2, arguments); var date = toDate(dirtyDate); var dateToCompare = toDate(dirtyDateToCompare); return date.getTime() < dateToCompare.getTime(); } /** * @name isWithinInterval * @category Interval Helpers * @summary Is the given date within the interval? * * @description * Is the given date within the interval? (Including start and end.) * * @param {Date|Number} date - the date to check * @param {Interval} interval - the interval to check * @returns {Boolean} the date is within the interval * @throws {TypeError} 2 arguments required * @throws {RangeError} The start of an interval cannot be after its end * @throws {RangeError} Date in interval cannot be `Invalid Date` * * @example * // For the date within the interval: * isWithinInterval(new Date(2014, 0, 3), { * start: new Date(2014, 0, 1), * end: new Date(2014, 0, 7) * }) * //=> true * * @example * // For the date outside of the interval: * isWithinInterval(new Date(2014, 0, 10), { * start: new Date(2014, 0, 1), * end: new Date(2014, 0, 7) * }) * //=> false * * @example * // For date equal to interval start: * isWithinInterval(date, { start, end: date }) // => true * * @example * // For date equal to interval end: * isWithinInterval(date, { start: date, end }) // => true */ function isWithinInterval(dirtyDate, interval) { requiredArgs$1(2, arguments); var time = toDate(dirtyDate).getTime(); var startTime = toDate(interval.start).getTime(); var endTime = toDate(interval.end).getTime(); // Throw an exception if start date is after end date or if any date is `Invalid Date` if (!(startTime <= endTime)) { throw new RangeError('Invalid interval'); } return time >= startTime && time <= endTime; } function assign$2(target, object) { if (target == null) { throw new TypeError('assign requires that input parameter not be null or undefined'); } for (var property in object) { if (Object.prototype.hasOwnProperty.call(object, property)) { target[property] = object[property]; } } return target; } function _typeof$y(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$y = function _typeof(obj) { return typeof obj; }; } else { _typeof$y = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$y(obj); } function _inherits$w(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$x(subClass, superClass); } function _setPrototypeOf$x(o, p) { _setPrototypeOf$x = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$x(o, p); } function _createSuper$w(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$w(); return function _createSuperInternal() { var Super = _getPrototypeOf$w(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$w(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$w(this, result); }; } function _possibleConstructorReturn$w(self, call) { if (call && (_typeof$y(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$x(self); } function _assertThisInitialized$x(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$w() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$w(o) { _getPrototypeOf$w = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$w(o); } function _classCallCheck$x(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$x(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$x(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$x(Constructor.prototype, protoProps); if (staticProps) _defineProperties$x(Constructor, staticProps); return Constructor; } function _defineProperty$x(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var TIMEZONE_UNIT_PRIORITY = 10; var Setter = /*#__PURE__*/function () { function Setter() { _classCallCheck$x(this, Setter); _defineProperty$x(this, "subPriority", 0); } _createClass$x(Setter, [{ key: "validate", value: function validate(_utcDate, _options) { return true; } }]); return Setter; }(); var ValueSetter = /*#__PURE__*/function (_Setter) { _inherits$w(ValueSetter, _Setter); var _super = _createSuper$w(ValueSetter); function ValueSetter(value, validateValue, setValue, priority, subPriority) { var _this; _classCallCheck$x(this, ValueSetter); _this = _super.call(this); _this.value = value; _this.validateValue = validateValue; _this.setValue = setValue; _this.priority = priority; if (subPriority) { _this.subPriority = subPriority; } return _this; } _createClass$x(ValueSetter, [{ key: "validate", value: function validate(utcDate, options) { return this.validateValue(utcDate, this.value, options); } }, { key: "set", value: function set(utcDate, flags, options) { return this.setValue(utcDate, flags, this.value, options); } }]); return ValueSetter; }(Setter); var DateToSystemTimezoneSetter = /*#__PURE__*/function (_Setter2) { _inherits$w(DateToSystemTimezoneSetter, _Setter2); var _super2 = _createSuper$w(DateToSystemTimezoneSetter); function DateToSystemTimezoneSetter() { var _this2; _classCallCheck$x(this, DateToSystemTimezoneSetter); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this2 = _super2.call.apply(_super2, [this].concat(args)); _defineProperty$x(_assertThisInitialized$x(_this2), "priority", TIMEZONE_UNIT_PRIORITY); _defineProperty$x(_assertThisInitialized$x(_this2), "subPriority", -1); return _this2; } _createClass$x(DateToSystemTimezoneSetter, [{ key: "set", value: function set(date, flags) { if (flags.timestampIsSet) { return date; } var convertedDate = new Date(0); convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()); convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds()); return convertedDate; } }]); return DateToSystemTimezoneSetter; }(Setter); function _classCallCheck$w(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$w(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$w(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$w(Constructor.prototype, protoProps); if (staticProps) _defineProperties$w(Constructor, staticProps); return Constructor; } var Parser = /*#__PURE__*/function () { function Parser() { _classCallCheck$w(this, Parser); } _createClass$w(Parser, [{ key: "run", value: function run(dateString, token, match, options) { var result = this.parse(dateString, token, match, options); if (!result) { return null; } return { setter: new ValueSetter(result.value, this.validate, this.set, this.priority, this.subPriority), rest: result.rest }; } }, { key: "validate", value: function validate(_utcDate, _value, _options) { return true; } }]); return Parser; }(); function _typeof$x(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$x = function _typeof(obj) { return typeof obj; }; } else { _typeof$x = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$x(obj); } function _classCallCheck$v(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$v(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$v(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$v(Constructor.prototype, protoProps); if (staticProps) _defineProperties$v(Constructor, staticProps); return Constructor; } function _inherits$v(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$w(subClass, superClass); } function _setPrototypeOf$w(o, p) { _setPrototypeOf$w = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$w(o, p); } function _createSuper$v(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$v(); return function _createSuperInternal() { var Super = _getPrototypeOf$v(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$v(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$v(this, result); }; } function _possibleConstructorReturn$v(self, call) { if (call && (_typeof$x(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$w(self); } function _assertThisInitialized$w(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$v() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$v(o) { _getPrototypeOf$v = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$v(o); } function _defineProperty$w(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var EraParser = /*#__PURE__*/function (_Parser) { _inherits$v(EraParser, _Parser); var _super = _createSuper$v(EraParser); function EraParser() { var _this; _classCallCheck$v(this, EraParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$w(_assertThisInitialized$w(_this), "priority", 140); _defineProperty$w(_assertThisInitialized$w(_this), "incompatibleTokens", ['R', 'u', 't', 'T']); return _this; } _createClass$v(EraParser, [{ key: "parse", value: function parse(dateString, token, match) { switch (token) { // AD, BC case 'G': case 'GG': case 'GGG': return match.era(dateString, { width: 'abbreviated' }) || match.era(dateString, { width: 'narrow' }); // A, B case 'GGGGG': return match.era(dateString, { width: 'narrow' }); // Anno Domini, Before Christ case 'GGGG': default: return match.era(dateString, { width: 'wide' }) || match.era(dateString, { width: 'abbreviated' }) || match.era(dateString, { width: 'narrow' }); } } }, { key: "set", value: function set(date, flags, value) { flags.era = value; date.setUTCFullYear(value, 0, 1); date.setUTCHours(0, 0, 0, 0); return date; } }]); return EraParser; }(Parser); /** * Days in 1 week. * * @name daysInWeek * @constant * @type {number} * @default */ /** * Milliseconds in 1 minute * * @name millisecondsInMinute * @constant * @type {number} * @default */ var millisecondsInMinute$1 = 60000; /** * Milliseconds in 1 hour * * @name millisecondsInHour * @constant * @type {number} * @default */ var millisecondsInHour$1 = 3600000; /** * Milliseconds in 1 second * * @name millisecondsInSecond * @constant * @type {number} * @default */ var millisecondsInSecond$1 = 1000; var numericPatterns = { month: /^(1[0-2]|0?\d)/, // 0 to 12 date: /^(3[0-1]|[0-2]?\d)/, // 0 to 31 dayOfYear: /^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/, // 0 to 366 week: /^(5[0-3]|[0-4]?\d)/, // 0 to 53 hour23h: /^(2[0-3]|[0-1]?\d)/, // 0 to 23 hour24h: /^(2[0-4]|[0-1]?\d)/, // 0 to 24 hour11h: /^(1[0-1]|0?\d)/, // 0 to 11 hour12h: /^(1[0-2]|0?\d)/, // 0 to 12 minute: /^[0-5]?\d/, // 0 to 59 second: /^[0-5]?\d/, // 0 to 59 singleDigit: /^\d/, // 0 to 9 twoDigits: /^\d{1,2}/, // 0 to 99 threeDigits: /^\d{1,3}/, // 0 to 999 fourDigits: /^\d{1,4}/, // 0 to 9999 anyDigitsSigned: /^-?\d+/, singleDigitSigned: /^-?\d/, // 0 to 9, -0 to -9 twoDigitsSigned: /^-?\d{1,2}/, // 0 to 99, -0 to -99 threeDigitsSigned: /^-?\d{1,3}/, // 0 to 999, -0 to -999 fourDigitsSigned: /^-?\d{1,4}/ // 0 to 9999, -0 to -9999 }; var timezonePatterns = { basicOptionalMinutes: /^([+-])(\d{2})(\d{2})?|Z/, basic: /^([+-])(\d{2})(\d{2})|Z/, basicOptionalSeconds: /^([+-])(\d{2})(\d{2})((\d{2}))?|Z/, extended: /^([+-])(\d{2}):(\d{2})|Z/, extendedOptionalSeconds: /^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/ }; function mapValue(parseFnResult, mapFn) { if (!parseFnResult) { return parseFnResult; } return { value: mapFn(parseFnResult.value), rest: parseFnResult.rest }; } function parseNumericPattern(pattern, dateString) { var matchResult = dateString.match(pattern); if (!matchResult) { return null; } return { value: parseInt(matchResult[0], 10), rest: dateString.slice(matchResult[0].length) }; } function parseTimezonePattern(pattern, dateString) { var matchResult = dateString.match(pattern); if (!matchResult) { return null; } // Input is 'Z' if (matchResult[0] === 'Z') { return { value: 0, rest: dateString.slice(1) }; } var sign = matchResult[1] === '+' ? 1 : -1; var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0; var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0; var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0; return { value: sign * (hours * millisecondsInHour$1 + minutes * millisecondsInMinute$1 + seconds * millisecondsInSecond$1), rest: dateString.slice(matchResult[0].length) }; } function parseAnyDigitsSigned(dateString) { return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString); } function parseNDigits(n, dateString) { switch (n) { case 1: return parseNumericPattern(numericPatterns.singleDigit, dateString); case 2: return parseNumericPattern(numericPatterns.twoDigits, dateString); case 3: return parseNumericPattern(numericPatterns.threeDigits, dateString); case 4: return parseNumericPattern(numericPatterns.fourDigits, dateString); default: return parseNumericPattern(new RegExp('^\\d{1,' + n + '}'), dateString); } } function parseNDigitsSigned(n, dateString) { switch (n) { case 1: return parseNumericPattern(numericPatterns.singleDigitSigned, dateString); case 2: return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString); case 3: return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString); case 4: return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString); default: return parseNumericPattern(new RegExp('^-?\\d{1,' + n + '}'), dateString); } } function dayPeriodEnumToHours(dayPeriod) { switch (dayPeriod) { case 'morning': return 4; case 'evening': return 17; case 'pm': case 'noon': case 'afternoon': return 12; case 'am': case 'midnight': case 'night': default: return 0; } } function normalizeTwoDigitYear(twoDigitYear, currentYear) { var isCommonEra = currentYear > 0; // Absolute number of the current year: // 1 -> 1 AC // 0 -> 1 BC // -1 -> 2 BC var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear; var result; if (absCurrentYear <= 50) { result = twoDigitYear || 100; } else { var rangeEnd = absCurrentYear + 50; var rangeEndCentury = Math.floor(rangeEnd / 100) * 100; var isPreviousCentury = twoDigitYear >= rangeEnd % 100; result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0); } return isCommonEra ? result : 1 - result; } function isLeapYearIndex$1(year) { return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0; } function _typeof$w(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$w = function _typeof(obj) { return typeof obj; }; } else { _typeof$w = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$w(obj); } function _classCallCheck$u(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$u(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$u(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$u(Constructor.prototype, protoProps); if (staticProps) _defineProperties$u(Constructor, staticProps); return Constructor; } function _inherits$u(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$v(subClass, superClass); } function _setPrototypeOf$v(o, p) { _setPrototypeOf$v = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$v(o, p); } function _createSuper$u(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$u(); return function _createSuperInternal() { var Super = _getPrototypeOf$u(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$u(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$u(this, result); }; } function _possibleConstructorReturn$u(self, call) { if (call && (_typeof$w(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$v(self); } function _assertThisInitialized$v(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$u() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$u(o) { _getPrototypeOf$u = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$u(o); } function _defineProperty$v(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns // | Year | y | yy | yyy | yyyy | yyyyy | // |----------|-------|----|-------|-------|-------| // | AD 1 | 1 | 01 | 001 | 0001 | 00001 | // | AD 12 | 12 | 12 | 012 | 0012 | 00012 | // | AD 123 | 123 | 23 | 123 | 0123 | 00123 | // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 | // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 | var YearParser = /*#__PURE__*/function (_Parser) { _inherits$u(YearParser, _Parser); var _super = _createSuper$u(YearParser); function YearParser() { var _this; _classCallCheck$u(this, YearParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$v(_assertThisInitialized$v(_this), "priority", 130); _defineProperty$v(_assertThisInitialized$v(_this), "incompatibleTokens", ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']); return _this; } _createClass$u(YearParser, [{ key: "parse", value: function parse(dateString, token, match) { var valueCallback = function valueCallback(year) { return { year: year, isTwoDigitYear: token === 'yy' }; }; switch (token) { case 'y': return mapValue(parseNDigits(4, dateString), valueCallback); case 'yo': return mapValue(match.ordinalNumber(dateString, { unit: 'year' }), valueCallback); default: return mapValue(parseNDigits(token.length, dateString), valueCallback); } } }, { key: "validate", value: function validate(_date, value) { return value.isTwoDigitYear || value.year > 0; } }, { key: "set", value: function set(date, flags, value) { var currentYear = date.getUTCFullYear(); if (value.isTwoDigitYear) { var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear); date.setUTCFullYear(normalizedTwoDigitYear, 0, 1); date.setUTCHours(0, 0, 0, 0); return date; } var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year; date.setUTCFullYear(year, 0, 1); date.setUTCHours(0, 0, 0, 0); return date; } }]); return YearParser; }(Parser); function _typeof$v(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$v = function _typeof(obj) { return typeof obj; }; } else { _typeof$v = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$v(obj); } function _classCallCheck$t(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$t(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$t(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$t(Constructor.prototype, protoProps); if (staticProps) _defineProperties$t(Constructor, staticProps); return Constructor; } function _inherits$t(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$u(subClass, superClass); } function _setPrototypeOf$u(o, p) { _setPrototypeOf$u = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$u(o, p); } function _createSuper$t(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$t(); return function _createSuperInternal() { var Super = _getPrototypeOf$t(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$t(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$t(this, result); }; } function _possibleConstructorReturn$t(self, call) { if (call && (_typeof$v(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$u(self); } function _assertThisInitialized$u(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$t() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$t(o) { _getPrototypeOf$t = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$t(o); } function _defineProperty$u(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } // Local week-numbering year var LocalWeekYearParser = /*#__PURE__*/function (_Parser) { _inherits$t(LocalWeekYearParser, _Parser); var _super = _createSuper$t(LocalWeekYearParser); function LocalWeekYearParser() { var _this; _classCallCheck$t(this, LocalWeekYearParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$u(_assertThisInitialized$u(_this), "priority", 130); _defineProperty$u(_assertThisInitialized$u(_this), "incompatibleTokens", ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']); return _this; } _createClass$t(LocalWeekYearParser, [{ key: "parse", value: function parse(dateString, token, match) { var valueCallback = function valueCallback(year) { return { year: year, isTwoDigitYear: token === 'YY' }; }; switch (token) { case 'Y': return mapValue(parseNDigits(4, dateString), valueCallback); case 'Yo': return mapValue(match.ordinalNumber(dateString, { unit: 'year' }), valueCallback); default: return mapValue(parseNDigits(token.length, dateString), valueCallback); } } }, { key: "validate", value: function validate(_date, value) { return value.isTwoDigitYear || value.year > 0; } }, { key: "set", value: function set(date, flags, value, options) { var currentYear = getUTCWeekYear(date, options); if (value.isTwoDigitYear) { var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear); date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate); date.setUTCHours(0, 0, 0, 0); return startOfUTCWeek(date, options); } var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year; date.setUTCFullYear(year, 0, options.firstWeekContainsDate); date.setUTCHours(0, 0, 0, 0); return startOfUTCWeek(date, options); } }]); return LocalWeekYearParser; }(Parser); function _typeof$u(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$u = function _typeof(obj) { return typeof obj; }; } else { _typeof$u = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$u(obj); } function _classCallCheck$s(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$s(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$s(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$s(Constructor.prototype, protoProps); if (staticProps) _defineProperties$s(Constructor, staticProps); return Constructor; } function _inherits$s(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$t(subClass, superClass); } function _setPrototypeOf$t(o, p) { _setPrototypeOf$t = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$t(o, p); } function _createSuper$s(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$s(); return function _createSuperInternal() { var Super = _getPrototypeOf$s(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$s(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$s(this, result); }; } function _possibleConstructorReturn$s(self, call) { if (call && (_typeof$u(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$t(self); } function _assertThisInitialized$t(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$s() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$s(o) { _getPrototypeOf$s = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$s(o); } function _defineProperty$t(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var ISOWeekYearParser = /*#__PURE__*/function (_Parser) { _inherits$s(ISOWeekYearParser, _Parser); var _super = _createSuper$s(ISOWeekYearParser); function ISOWeekYearParser() { var _this; _classCallCheck$s(this, ISOWeekYearParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$t(_assertThisInitialized$t(_this), "priority", 130); _defineProperty$t(_assertThisInitialized$t(_this), "incompatibleTokens", ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']); return _this; } _createClass$s(ISOWeekYearParser, [{ key: "parse", value: function parse(dateString, token) { if (token === 'R') { return parseNDigitsSigned(4, dateString); } return parseNDigitsSigned(token.length, dateString); } }, { key: "set", value: function set(_date, _flags, value) { var firstWeekOfYear = new Date(0); firstWeekOfYear.setUTCFullYear(value, 0, 4); firstWeekOfYear.setUTCHours(0, 0, 0, 0); return startOfUTCISOWeek(firstWeekOfYear); } }]); return ISOWeekYearParser; }(Parser); function _typeof$t(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$t = function _typeof(obj) { return typeof obj; }; } else { _typeof$t = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$t(obj); } function _classCallCheck$r(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$r(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$r(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$r(Constructor.prototype, protoProps); if (staticProps) _defineProperties$r(Constructor, staticProps); return Constructor; } function _inherits$r(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$s(subClass, superClass); } function _setPrototypeOf$s(o, p) { _setPrototypeOf$s = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$s(o, p); } function _createSuper$r(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$r(); return function _createSuperInternal() { var Super = _getPrototypeOf$r(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$r(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$r(this, result); }; } function _possibleConstructorReturn$r(self, call) { if (call && (_typeof$t(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$s(self); } function _assertThisInitialized$s(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$r() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$r(o) { _getPrototypeOf$r = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$r(o); } function _defineProperty$s(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var ExtendedYearParser = /*#__PURE__*/function (_Parser) { _inherits$r(ExtendedYearParser, _Parser); var _super = _createSuper$r(ExtendedYearParser); function ExtendedYearParser() { var _this; _classCallCheck$r(this, ExtendedYearParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$s(_assertThisInitialized$s(_this), "priority", 130); _defineProperty$s(_assertThisInitialized$s(_this), "incompatibleTokens", ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']); return _this; } _createClass$r(ExtendedYearParser, [{ key: "parse", value: function parse(dateString, token) { if (token === 'u') { return parseNDigitsSigned(4, dateString); } return parseNDigitsSigned(token.length, dateString); } }, { key: "set", value: function set(date, _flags, value) { date.setUTCFullYear(value, 0, 1); date.setUTCHours(0, 0, 0, 0); return date; } }]); return ExtendedYearParser; }(Parser); function _typeof$s(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$s = function _typeof(obj) { return typeof obj; }; } else { _typeof$s = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$s(obj); } function _classCallCheck$q(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$q(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$q(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$q(Constructor.prototype, protoProps); if (staticProps) _defineProperties$q(Constructor, staticProps); return Constructor; } function _inherits$q(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$r(subClass, superClass); } function _setPrototypeOf$r(o, p) { _setPrototypeOf$r = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$r(o, p); } function _createSuper$q(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$q(); return function _createSuperInternal() { var Super = _getPrototypeOf$q(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$q(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$q(this, result); }; } function _possibleConstructorReturn$q(self, call) { if (call && (_typeof$s(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$r(self); } function _assertThisInitialized$r(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$q() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$q(o) { _getPrototypeOf$q = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$q(o); } function _defineProperty$r(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var QuarterParser = /*#__PURE__*/function (_Parser) { _inherits$q(QuarterParser, _Parser); var _super = _createSuper$q(QuarterParser); function QuarterParser() { var _this; _classCallCheck$q(this, QuarterParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$r(_assertThisInitialized$r(_this), "priority", 120); _defineProperty$r(_assertThisInitialized$r(_this), "incompatibleTokens", ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']); return _this; } _createClass$q(QuarterParser, [{ key: "parse", value: function parse(dateString, token, match) { switch (token) { // 1, 2, 3, 4 case 'Q': case 'QQ': // 01, 02, 03, 04 return parseNDigits(token.length, dateString); // 1st, 2nd, 3rd, 4th case 'Qo': return match.ordinalNumber(dateString, { unit: 'quarter' }); // Q1, Q2, Q3, Q4 case 'QQQ': return match.quarter(dateString, { width: 'abbreviated', context: 'formatting' }) || match.quarter(dateString, { width: 'narrow', context: 'formatting' }); // 1, 2, 3, 4 (narrow quarter; could be not numerical) case 'QQQQQ': return match.quarter(dateString, { width: 'narrow', context: 'formatting' }); // 1st quarter, 2nd quarter, ... case 'QQQQ': default: return match.quarter(dateString, { width: 'wide', context: 'formatting' }) || match.quarter(dateString, { width: 'abbreviated', context: 'formatting' }) || match.quarter(dateString, { width: 'narrow', context: 'formatting' }); } } }, { key: "validate", value: function validate(_date, value) { return value >= 1 && value <= 4; } }, { key: "set", value: function set(date, _flags, value) { date.setUTCMonth((value - 1) * 3, 1); date.setUTCHours(0, 0, 0, 0); return date; } }]); return QuarterParser; }(Parser); function _typeof$r(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$r = function _typeof(obj) { return typeof obj; }; } else { _typeof$r = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$r(obj); } function _classCallCheck$p(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$p(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$p(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$p(Constructor.prototype, protoProps); if (staticProps) _defineProperties$p(Constructor, staticProps); return Constructor; } function _inherits$p(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$q(subClass, superClass); } function _setPrototypeOf$q(o, p) { _setPrototypeOf$q = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$q(o, p); } function _createSuper$p(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$p(); return function _createSuperInternal() { var Super = _getPrototypeOf$p(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$p(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$p(this, result); }; } function _possibleConstructorReturn$p(self, call) { if (call && (_typeof$r(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$q(self); } function _assertThisInitialized$q(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$p() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$p(o) { _getPrototypeOf$p = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$p(o); } function _defineProperty$q(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var StandAloneQuarterParser = /*#__PURE__*/function (_Parser) { _inherits$p(StandAloneQuarterParser, _Parser); var _super = _createSuper$p(StandAloneQuarterParser); function StandAloneQuarterParser() { var _this; _classCallCheck$p(this, StandAloneQuarterParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$q(_assertThisInitialized$q(_this), "priority", 120); _defineProperty$q(_assertThisInitialized$q(_this), "incompatibleTokens", ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']); return _this; } _createClass$p(StandAloneQuarterParser, [{ key: "parse", value: function parse(dateString, token, match) { switch (token) { // 1, 2, 3, 4 case 'q': case 'qq': // 01, 02, 03, 04 return parseNDigits(token.length, dateString); // 1st, 2nd, 3rd, 4th case 'qo': return match.ordinalNumber(dateString, { unit: 'quarter' }); // Q1, Q2, Q3, Q4 case 'qqq': return match.quarter(dateString, { width: 'abbreviated', context: 'standalone' }) || match.quarter(dateString, { width: 'narrow', context: 'standalone' }); // 1, 2, 3, 4 (narrow quarter; could be not numerical) case 'qqqqq': return match.quarter(dateString, { width: 'narrow', context: 'standalone' }); // 1st quarter, 2nd quarter, ... case 'qqqq': default: return match.quarter(dateString, { width: 'wide', context: 'standalone' }) || match.quarter(dateString, { width: 'abbreviated', context: 'standalone' }) || match.quarter(dateString, { width: 'narrow', context: 'standalone' }); } } }, { key: "validate", value: function validate(_date, value) { return value >= 1 && value <= 4; } }, { key: "set", value: function set(date, _flags, value) { date.setUTCMonth((value - 1) * 3, 1); date.setUTCHours(0, 0, 0, 0); return date; } }]); return StandAloneQuarterParser; }(Parser); function _typeof$q(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$q = function _typeof(obj) { return typeof obj; }; } else { _typeof$q = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$q(obj); } function _classCallCheck$o(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$o(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$o(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$o(Constructor.prototype, protoProps); if (staticProps) _defineProperties$o(Constructor, staticProps); return Constructor; } function _inherits$o(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$p(subClass, superClass); } function _setPrototypeOf$p(o, p) { _setPrototypeOf$p = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$p(o, p); } function _createSuper$o(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$o(); return function _createSuperInternal() { var Super = _getPrototypeOf$o(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$o(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$o(this, result); }; } function _possibleConstructorReturn$o(self, call) { if (call && (_typeof$q(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$p(self); } function _assertThisInitialized$p(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$o() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$o(o) { _getPrototypeOf$o = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$o(o); } function _defineProperty$p(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var MonthParser = /*#__PURE__*/function (_Parser) { _inherits$o(MonthParser, _Parser); var _super = _createSuper$o(MonthParser); function MonthParser() { var _this; _classCallCheck$o(this, MonthParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$p(_assertThisInitialized$p(_this), "incompatibleTokens", ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']); _defineProperty$p(_assertThisInitialized$p(_this), "priority", 110); return _this; } _createClass$o(MonthParser, [{ key: "parse", value: function parse(dateString, token, match) { var valueCallback = function valueCallback(value) { return value - 1; }; switch (token) { // 1, 2, ..., 12 case 'M': return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback); // 01, 02, ..., 12 case 'MM': return mapValue(parseNDigits(2, dateString), valueCallback); // 1st, 2nd, ..., 12th case 'Mo': return mapValue(match.ordinalNumber(dateString, { unit: 'month' }), valueCallback); // Jan, Feb, ..., Dec case 'MMM': return match.month(dateString, { width: 'abbreviated', context: 'formatting' }) || match.month(dateString, { width: 'narrow', context: 'formatting' }); // J, F, ..., D case 'MMMMM': return match.month(dateString, { width: 'narrow', context: 'formatting' }); // January, February, ..., December case 'MMMM': default: return match.month(dateString, { width: 'wide', context: 'formatting' }) || match.month(dateString, { width: 'abbreviated', context: 'formatting' }) || match.month(dateString, { width: 'narrow', context: 'formatting' }); } } }, { key: "validate", value: function validate(_date, value) { return value >= 0 && value <= 11; } }, { key: "set", value: function set(date, _flags, value) { date.setUTCMonth(value, 1); date.setUTCHours(0, 0, 0, 0); return date; } }]); return MonthParser; }(Parser); function _typeof$p(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$p = function _typeof(obj) { return typeof obj; }; } else { _typeof$p = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$p(obj); } function _classCallCheck$n(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$n(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$n(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$n(Constructor.prototype, protoProps); if (staticProps) _defineProperties$n(Constructor, staticProps); return Constructor; } function _inherits$n(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$o(subClass, superClass); } function _setPrototypeOf$o(o, p) { _setPrototypeOf$o = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$o(o, p); } function _createSuper$n(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$n(); return function _createSuperInternal() { var Super = _getPrototypeOf$n(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$n(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$n(this, result); }; } function _possibleConstructorReturn$n(self, call) { if (call && (_typeof$p(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$o(self); } function _assertThisInitialized$o(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$n() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$n(o) { _getPrototypeOf$n = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$n(o); } function _defineProperty$o(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var StandAloneMonthParser = /*#__PURE__*/function (_Parser) { _inherits$n(StandAloneMonthParser, _Parser); var _super = _createSuper$n(StandAloneMonthParser); function StandAloneMonthParser() { var _this; _classCallCheck$n(this, StandAloneMonthParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$o(_assertThisInitialized$o(_this), "priority", 110); _defineProperty$o(_assertThisInitialized$o(_this), "incompatibleTokens", ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']); return _this; } _createClass$n(StandAloneMonthParser, [{ key: "parse", value: function parse(dateString, token, match) { var valueCallback = function valueCallback(value) { return value - 1; }; switch (token) { // 1, 2, ..., 12 case 'L': return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback); // 01, 02, ..., 12 case 'LL': return mapValue(parseNDigits(2, dateString), valueCallback); // 1st, 2nd, ..., 12th case 'Lo': return mapValue(match.ordinalNumber(dateString, { unit: 'month' }), valueCallback); // Jan, Feb, ..., Dec case 'LLL': return match.month(dateString, { width: 'abbreviated', context: 'standalone' }) || match.month(dateString, { width: 'narrow', context: 'standalone' }); // J, F, ..., D case 'LLLLL': return match.month(dateString, { width: 'narrow', context: 'standalone' }); // January, February, ..., December case 'LLLL': default: return match.month(dateString, { width: 'wide', context: 'standalone' }) || match.month(dateString, { width: 'abbreviated', context: 'standalone' }) || match.month(dateString, { width: 'narrow', context: 'standalone' }); } } }, { key: "validate", value: function validate(_date, value) { return value >= 0 && value <= 11; } }, { key: "set", value: function set(date, _flags, value) { date.setUTCMonth(value, 1); date.setUTCHours(0, 0, 0, 0); return date; } }]); return StandAloneMonthParser; }(Parser); function setUTCWeek(dirtyDate, dirtyWeek, options) { requiredArgs$1(2, arguments); var date = toDate(dirtyDate); var week = toInteger$1(dirtyWeek); var diff = getUTCWeek(date, options) - week; date.setUTCDate(date.getUTCDate() - diff * 7); return date; } function _typeof$o(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$o = function _typeof(obj) { return typeof obj; }; } else { _typeof$o = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$o(obj); } function _classCallCheck$m(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$m(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$m(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$m(Constructor.prototype, protoProps); if (staticProps) _defineProperties$m(Constructor, staticProps); return Constructor; } function _inherits$m(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$n(subClass, superClass); } function _setPrototypeOf$n(o, p) { _setPrototypeOf$n = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$n(o, p); } function _createSuper$m(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$m(); return function _createSuperInternal() { var Super = _getPrototypeOf$m(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$m(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$m(this, result); }; } function _possibleConstructorReturn$m(self, call) { if (call && (_typeof$o(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$n(self); } function _assertThisInitialized$n(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$m() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$m(o) { _getPrototypeOf$m = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$m(o); } function _defineProperty$n(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var LocalWeekParser = /*#__PURE__*/function (_Parser) { _inherits$m(LocalWeekParser, _Parser); var _super = _createSuper$m(LocalWeekParser); function LocalWeekParser() { var _this; _classCallCheck$m(this, LocalWeekParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$n(_assertThisInitialized$n(_this), "priority", 100); _defineProperty$n(_assertThisInitialized$n(_this), "incompatibleTokens", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']); return _this; } _createClass$m(LocalWeekParser, [{ key: "parse", value: function parse(dateString, token, match) { switch (token) { case 'w': return parseNumericPattern(numericPatterns.week, dateString); case 'wo': return match.ordinalNumber(dateString, { unit: 'week' }); default: return parseNDigits(token.length, dateString); } } }, { key: "validate", value: function validate(_date, value) { return value >= 1 && value <= 53; } }, { key: "set", value: function set(date, _flags, value, options) { return startOfUTCWeek(setUTCWeek(date, value, options), options); } }]); return LocalWeekParser; }(Parser); function setUTCISOWeek(dirtyDate, dirtyISOWeek) { requiredArgs$1(2, arguments); var date = toDate(dirtyDate); var isoWeek = toInteger$1(dirtyISOWeek); var diff = getUTCISOWeek(date) - isoWeek; date.setUTCDate(date.getUTCDate() - diff * 7); return date; } function _typeof$n(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$n = function _typeof(obj) { return typeof obj; }; } else { _typeof$n = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$n(obj); } function _classCallCheck$l(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$l(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$l(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$l(Constructor.prototype, protoProps); if (staticProps) _defineProperties$l(Constructor, staticProps); return Constructor; } function _inherits$l(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$m(subClass, superClass); } function _setPrototypeOf$m(o, p) { _setPrototypeOf$m = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$m(o, p); } function _createSuper$l(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$l(); return function _createSuperInternal() { var Super = _getPrototypeOf$l(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$l(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$l(this, result); }; } function _possibleConstructorReturn$l(self, call) { if (call && (_typeof$n(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$m(self); } function _assertThisInitialized$m(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$l() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$l(o) { _getPrototypeOf$l = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$l(o); } function _defineProperty$m(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var ISOWeekParser = /*#__PURE__*/function (_Parser) { _inherits$l(ISOWeekParser, _Parser); var _super = _createSuper$l(ISOWeekParser); function ISOWeekParser() { var _this; _classCallCheck$l(this, ISOWeekParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$m(_assertThisInitialized$m(_this), "priority", 100); _defineProperty$m(_assertThisInitialized$m(_this), "incompatibleTokens", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']); return _this; } _createClass$l(ISOWeekParser, [{ key: "parse", value: function parse(dateString, token, match) { switch (token) { case 'I': return parseNumericPattern(numericPatterns.week, dateString); case 'Io': return match.ordinalNumber(dateString, { unit: 'week' }); default: return parseNDigits(token.length, dateString); } } }, { key: "validate", value: function validate(_date, value) { return value >= 1 && value <= 53; } }, { key: "set", value: function set(date, _flags, value) { return startOfUTCISOWeek(setUTCISOWeek(date, value)); } }]); return ISOWeekParser; }(Parser); function _typeof$m(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$m = function _typeof(obj) { return typeof obj; }; } else { _typeof$m = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$m(obj); } function _classCallCheck$k(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$k(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$k(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$k(Constructor.prototype, protoProps); if (staticProps) _defineProperties$k(Constructor, staticProps); return Constructor; } function _inherits$k(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$l(subClass, superClass); } function _setPrototypeOf$l(o, p) { _setPrototypeOf$l = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$l(o, p); } function _createSuper$k(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$k(); return function _createSuperInternal() { var Super = _getPrototypeOf$k(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$k(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$k(this, result); }; } function _possibleConstructorReturn$k(self, call) { if (call && (_typeof$m(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$l(self); } function _assertThisInitialized$l(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$k() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$k(o) { _getPrototypeOf$k = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$k(o); } function _defineProperty$l(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; var DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // Day of the month var DateParser = /*#__PURE__*/function (_Parser) { _inherits$k(DateParser, _Parser); var _super = _createSuper$k(DateParser); function DateParser() { var _this; _classCallCheck$k(this, DateParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$l(_assertThisInitialized$l(_this), "priority", 90); _defineProperty$l(_assertThisInitialized$l(_this), "subPriority", 1); _defineProperty$l(_assertThisInitialized$l(_this), "incompatibleTokens", ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']); return _this; } _createClass$k(DateParser, [{ key: "parse", value: function parse(dateString, token, match) { switch (token) { case 'd': return parseNumericPattern(numericPatterns.date, dateString); case 'do': return match.ordinalNumber(dateString, { unit: 'date' }); default: return parseNDigits(token.length, dateString); } } }, { key: "validate", value: function validate(date, value) { var year = date.getUTCFullYear(); var isLeapYear = isLeapYearIndex$1(year); var month = date.getUTCMonth(); if (isLeapYear) { return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month]; } else { return value >= 1 && value <= DAYS_IN_MONTH[month]; } } }, { key: "set", value: function set(date, _flags, value) { date.setUTCDate(value); date.setUTCHours(0, 0, 0, 0); return date; } }]); return DateParser; }(Parser); function _typeof$l(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$l = function _typeof(obj) { return typeof obj; }; } else { _typeof$l = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$l(obj); } function _classCallCheck$j(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$j(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$j(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$j(Constructor.prototype, protoProps); if (staticProps) _defineProperties$j(Constructor, staticProps); return Constructor; } function _inherits$j(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$k(subClass, superClass); } function _setPrototypeOf$k(o, p) { _setPrototypeOf$k = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$k(o, p); } function _createSuper$j(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$j(); return function _createSuperInternal() { var Super = _getPrototypeOf$j(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$j(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$j(this, result); }; } function _possibleConstructorReturn$j(self, call) { if (call && (_typeof$l(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$k(self); } function _assertThisInitialized$k(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$j() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$j(o) { _getPrototypeOf$j = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$j(o); } function _defineProperty$k(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var DayOfYearParser = /*#__PURE__*/function (_Parser) { _inherits$j(DayOfYearParser, _Parser); var _super = _createSuper$j(DayOfYearParser); function DayOfYearParser() { var _this; _classCallCheck$j(this, DayOfYearParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$k(_assertThisInitialized$k(_this), "priority", 90); _defineProperty$k(_assertThisInitialized$k(_this), "subpriority", 1); _defineProperty$k(_assertThisInitialized$k(_this), "incompatibleTokens", ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']); return _this; } _createClass$j(DayOfYearParser, [{ key: "parse", value: function parse(dateString, token, match) { switch (token) { case 'D': case 'DD': return parseNumericPattern(numericPatterns.dayOfYear, dateString); case 'Do': return match.ordinalNumber(dateString, { unit: 'date' }); default: return parseNDigits(token.length, dateString); } } }, { key: "validate", value: function validate(date, value) { var year = date.getUTCFullYear(); var isLeapYear = isLeapYearIndex$1(year); if (isLeapYear) { return value >= 1 && value <= 366; } else { return value >= 1 && value <= 365; } } }, { key: "set", value: function set(date, _flags, value) { date.setUTCMonth(0, value); date.setUTCHours(0, 0, 0, 0); return date; } }]); return DayOfYearParser; }(Parser); function setUTCDay(dirtyDate, dirtyDay, options) { var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; requiredArgs$1(2, arguments); var defaultOptions = getDefaultOptions(); var weekStartsOn = toInteger$1((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { throw new RangeError('weekStartsOn must be between 0 and 6 inclusively'); } var date = toDate(dirtyDate); var day = toInteger$1(dirtyDay); var currentDay = date.getUTCDay(); var remainder = day % 7; var dayIndex = (remainder + 7) % 7; var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay; date.setUTCDate(date.getUTCDate() + diff); return date; } function _typeof$k(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$k = function _typeof(obj) { return typeof obj; }; } else { _typeof$k = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$k(obj); } function _classCallCheck$i(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$i(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$i(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$i(Constructor.prototype, protoProps); if (staticProps) _defineProperties$i(Constructor, staticProps); return Constructor; } function _inherits$i(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$j(subClass, superClass); } function _setPrototypeOf$j(o, p) { _setPrototypeOf$j = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$j(o, p); } function _createSuper$i(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$i(); return function _createSuperInternal() { var Super = _getPrototypeOf$i(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$i(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$i(this, result); }; } function _possibleConstructorReturn$i(self, call) { if (call && (_typeof$k(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$j(self); } function _assertThisInitialized$j(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$i() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$i(o) { _getPrototypeOf$i = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$i(o); } function _defineProperty$j(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var DayParser = /*#__PURE__*/function (_Parser) { _inherits$i(DayParser, _Parser); var _super = _createSuper$i(DayParser); function DayParser() { var _this; _classCallCheck$i(this, DayParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$j(_assertThisInitialized$j(_this), "priority", 90); _defineProperty$j(_assertThisInitialized$j(_this), "incompatibleTokens", ['D', 'i', 'e', 'c', 't', 'T']); return _this; } _createClass$i(DayParser, [{ key: "parse", value: function parse(dateString, token, match) { switch (token) { // Tue case 'E': case 'EE': case 'EEE': return match.day(dateString, { width: 'abbreviated', context: 'formatting' }) || match.day(dateString, { width: 'short', context: 'formatting' }) || match.day(dateString, { width: 'narrow', context: 'formatting' }); // T case 'EEEEE': return match.day(dateString, { width: 'narrow', context: 'formatting' }); // Tu case 'EEEEEE': return match.day(dateString, { width: 'short', context: 'formatting' }) || match.day(dateString, { width: 'narrow', context: 'formatting' }); // Tuesday case 'EEEE': default: return match.day(dateString, { width: 'wide', context: 'formatting' }) || match.day(dateString, { width: 'abbreviated', context: 'formatting' }) || match.day(dateString, { width: 'short', context: 'formatting' }) || match.day(dateString, { width: 'narrow', context: 'formatting' }); } } }, { key: "validate", value: function validate(_date, value) { return value >= 0 && value <= 6; } }, { key: "set", value: function set(date, _flags, value, options) { date = setUTCDay(date, value, options); date.setUTCHours(0, 0, 0, 0); return date; } }]); return DayParser; }(Parser); function _typeof$j(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$j = function _typeof(obj) { return typeof obj; }; } else { _typeof$j = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$j(obj); } function _classCallCheck$h(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$h(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$h(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$h(Constructor.prototype, protoProps); if (staticProps) _defineProperties$h(Constructor, staticProps); return Constructor; } function _inherits$h(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$i(subClass, superClass); } function _setPrototypeOf$i(o, p) { _setPrototypeOf$i = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$i(o, p); } function _createSuper$h(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$h(); return function _createSuperInternal() { var Super = _getPrototypeOf$h(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$h(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$h(this, result); }; } function _possibleConstructorReturn$h(self, call) { if (call && (_typeof$j(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$i(self); } function _assertThisInitialized$i(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$h() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$h(o) { _getPrototypeOf$h = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$h(o); } function _defineProperty$i(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var LocalDayParser = /*#__PURE__*/function (_Parser) { _inherits$h(LocalDayParser, _Parser); var _super = _createSuper$h(LocalDayParser); function LocalDayParser() { var _this; _classCallCheck$h(this, LocalDayParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$i(_assertThisInitialized$i(_this), "priority", 90); _defineProperty$i(_assertThisInitialized$i(_this), "incompatibleTokens", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']); return _this; } _createClass$h(LocalDayParser, [{ key: "parse", value: function parse(dateString, token, match, options) { var valueCallback = function valueCallback(value) { var wholeWeekDays = Math.floor((value - 1) / 7) * 7; return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays; }; switch (token) { // 3 case 'e': case 'ee': // 03 return mapValue(parseNDigits(token.length, dateString), valueCallback); // 3rd case 'eo': return mapValue(match.ordinalNumber(dateString, { unit: 'day' }), valueCallback); // Tue case 'eee': return match.day(dateString, { width: 'abbreviated', context: 'formatting' }) || match.day(dateString, { width: 'short', context: 'formatting' }) || match.day(dateString, { width: 'narrow', context: 'formatting' }); // T case 'eeeee': return match.day(dateString, { width: 'narrow', context: 'formatting' }); // Tu case 'eeeeee': return match.day(dateString, { width: 'short', context: 'formatting' }) || match.day(dateString, { width: 'narrow', context: 'formatting' }); // Tuesday case 'eeee': default: return match.day(dateString, { width: 'wide', context: 'formatting' }) || match.day(dateString, { width: 'abbreviated', context: 'formatting' }) || match.day(dateString, { width: 'short', context: 'formatting' }) || match.day(dateString, { width: 'narrow', context: 'formatting' }); } } }, { key: "validate", value: function validate(_date, value) { return value >= 0 && value <= 6; } }, { key: "set", value: function set(date, _flags, value, options) { date = setUTCDay(date, value, options); date.setUTCHours(0, 0, 0, 0); return date; } }]); return LocalDayParser; }(Parser); function _typeof$i(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$i = function _typeof(obj) { return typeof obj; }; } else { _typeof$i = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$i(obj); } function _classCallCheck$g(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$g(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$g(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$g(Constructor.prototype, protoProps); if (staticProps) _defineProperties$g(Constructor, staticProps); return Constructor; } function _inherits$g(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$h(subClass, superClass); } function _setPrototypeOf$h(o, p) { _setPrototypeOf$h = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$h(o, p); } function _createSuper$g(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$g(); return function _createSuperInternal() { var Super = _getPrototypeOf$g(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$g(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$g(this, result); }; } function _possibleConstructorReturn$g(self, call) { if (call && (_typeof$i(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$h(self); } function _assertThisInitialized$h(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$g() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$g(o) { _getPrototypeOf$g = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$g(o); } function _defineProperty$h(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var StandAloneLocalDayParser = /*#__PURE__*/function (_Parser) { _inherits$g(StandAloneLocalDayParser, _Parser); var _super = _createSuper$g(StandAloneLocalDayParser); function StandAloneLocalDayParser() { var _this; _classCallCheck$g(this, StandAloneLocalDayParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$h(_assertThisInitialized$h(_this), "priority", 90); _defineProperty$h(_assertThisInitialized$h(_this), "incompatibleTokens", ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']); return _this; } _createClass$g(StandAloneLocalDayParser, [{ key: "parse", value: function parse(dateString, token, match, options) { var valueCallback = function valueCallback(value) { var wholeWeekDays = Math.floor((value - 1) / 7) * 7; return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays; }; switch (token) { // 3 case 'c': case 'cc': // 03 return mapValue(parseNDigits(token.length, dateString), valueCallback); // 3rd case 'co': return mapValue(match.ordinalNumber(dateString, { unit: 'day' }), valueCallback); // Tue case 'ccc': return match.day(dateString, { width: 'abbreviated', context: 'standalone' }) || match.day(dateString, { width: 'short', context: 'standalone' }) || match.day(dateString, { width: 'narrow', context: 'standalone' }); // T case 'ccccc': return match.day(dateString, { width: 'narrow', context: 'standalone' }); // Tu case 'cccccc': return match.day(dateString, { width: 'short', context: 'standalone' }) || match.day(dateString, { width: 'narrow', context: 'standalone' }); // Tuesday case 'cccc': default: return match.day(dateString, { width: 'wide', context: 'standalone' }) || match.day(dateString, { width: 'abbreviated', context: 'standalone' }) || match.day(dateString, { width: 'short', context: 'standalone' }) || match.day(dateString, { width: 'narrow', context: 'standalone' }); } } }, { key: "validate", value: function validate(_date, value) { return value >= 0 && value <= 6; } }, { key: "set", value: function set(date, _flags, value, options) { date = setUTCDay(date, value, options); date.setUTCHours(0, 0, 0, 0); return date; } }]); return StandAloneLocalDayParser; }(Parser); function setUTCISODay(dirtyDate, dirtyDay) { requiredArgs$1(2, arguments); var day = toInteger$1(dirtyDay); if (day % 7 === 0) { day = day - 7; } var weekStartsOn = 1; var date = toDate(dirtyDate); var currentDay = date.getUTCDay(); var remainder = day % 7; var dayIndex = (remainder + 7) % 7; var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay; date.setUTCDate(date.getUTCDate() + diff); return date; } function _typeof$h(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$h = function _typeof(obj) { return typeof obj; }; } else { _typeof$h = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$h(obj); } function _classCallCheck$f(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$f(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$f(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$f(Constructor.prototype, protoProps); if (staticProps) _defineProperties$f(Constructor, staticProps); return Constructor; } function _inherits$f(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$g(subClass, superClass); } function _setPrototypeOf$g(o, p) { _setPrototypeOf$g = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$g(o, p); } function _createSuper$f(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$f(); return function _createSuperInternal() { var Super = _getPrototypeOf$f(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$f(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$f(this, result); }; } function _possibleConstructorReturn$f(self, call) { if (call && (_typeof$h(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$g(self); } function _assertThisInitialized$g(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$f() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$f(o) { _getPrototypeOf$f = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$f(o); } function _defineProperty$g(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var ISODayParser = /*#__PURE__*/function (_Parser) { _inherits$f(ISODayParser, _Parser); var _super = _createSuper$f(ISODayParser); function ISODayParser() { var _this; _classCallCheck$f(this, ISODayParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$g(_assertThisInitialized$g(_this), "priority", 90); _defineProperty$g(_assertThisInitialized$g(_this), "incompatibleTokens", ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']); return _this; } _createClass$f(ISODayParser, [{ key: "parse", value: function parse(dateString, token, match) { var valueCallback = function valueCallback(value) { if (value === 0) { return 7; } return value; }; switch (token) { // 2 case 'i': case 'ii': // 02 return parseNDigits(token.length, dateString); // 2nd case 'io': return match.ordinalNumber(dateString, { unit: 'day' }); // Tue case 'iii': return mapValue(match.day(dateString, { width: 'abbreviated', context: 'formatting' }) || match.day(dateString, { width: 'short', context: 'formatting' }) || match.day(dateString, { width: 'narrow', context: 'formatting' }), valueCallback); // T case 'iiiii': return mapValue(match.day(dateString, { width: 'narrow', context: 'formatting' }), valueCallback); // Tu case 'iiiiii': return mapValue(match.day(dateString, { width: 'short', context: 'formatting' }) || match.day(dateString, { width: 'narrow', context: 'formatting' }), valueCallback); // Tuesday case 'iiii': default: return mapValue(match.day(dateString, { width: 'wide', context: 'formatting' }) || match.day(dateString, { width: 'abbreviated', context: 'formatting' }) || match.day(dateString, { width: 'short', context: 'formatting' }) || match.day(dateString, { width: 'narrow', context: 'formatting' }), valueCallback); } } }, { key: "validate", value: function validate(_date, value) { return value >= 1 && value <= 7; } }, { key: "set", value: function set(date, _flags, value) { date = setUTCISODay(date, value); date.setUTCHours(0, 0, 0, 0); return date; } }]); return ISODayParser; }(Parser); function _typeof$g(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$g = function _typeof(obj) { return typeof obj; }; } else { _typeof$g = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$g(obj); } function _classCallCheck$e(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$e(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$e(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$e(Constructor.prototype, protoProps); if (staticProps) _defineProperties$e(Constructor, staticProps); return Constructor; } function _inherits$e(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$f(subClass, superClass); } function _setPrototypeOf$f(o, p) { _setPrototypeOf$f = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$f(o, p); } function _createSuper$e(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$e(); return function _createSuperInternal() { var Super = _getPrototypeOf$e(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$e(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$e(this, result); }; } function _possibleConstructorReturn$e(self, call) { if (call && (_typeof$g(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$f(self); } function _assertThisInitialized$f(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$e() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$e(o) { _getPrototypeOf$e = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$e(o); } function _defineProperty$f(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var AMPMParser = /*#__PURE__*/function (_Parser) { _inherits$e(AMPMParser, _Parser); var _super = _createSuper$e(AMPMParser); function AMPMParser() { var _this; _classCallCheck$e(this, AMPMParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$f(_assertThisInitialized$f(_this), "priority", 80); _defineProperty$f(_assertThisInitialized$f(_this), "incompatibleTokens", ['b', 'B', 'H', 'k', 't', 'T']); return _this; } _createClass$e(AMPMParser, [{ key: "parse", value: function parse(dateString, token, match) { switch (token) { case 'a': case 'aa': case 'aaa': return match.dayPeriod(dateString, { width: 'abbreviated', context: 'formatting' }) || match.dayPeriod(dateString, { width: 'narrow', context: 'formatting' }); case 'aaaaa': return match.dayPeriod(dateString, { width: 'narrow', context: 'formatting' }); case 'aaaa': default: return match.dayPeriod(dateString, { width: 'wide', context: 'formatting' }) || match.dayPeriod(dateString, { width: 'abbreviated', context: 'formatting' }) || match.dayPeriod(dateString, { width: 'narrow', context: 'formatting' }); } } }, { key: "set", value: function set(date, _flags, value) { date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0); return date; } }]); return AMPMParser; }(Parser); function _typeof$f(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$f = function _typeof(obj) { return typeof obj; }; } else { _typeof$f = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$f(obj); } function _classCallCheck$d(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$d(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$d(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$d(Constructor.prototype, protoProps); if (staticProps) _defineProperties$d(Constructor, staticProps); return Constructor; } function _inherits$d(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$e(subClass, superClass); } function _setPrototypeOf$e(o, p) { _setPrototypeOf$e = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$e(o, p); } function _createSuper$d(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$d(); return function _createSuperInternal() { var Super = _getPrototypeOf$d(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$d(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$d(this, result); }; } function _possibleConstructorReturn$d(self, call) { if (call && (_typeof$f(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$e(self); } function _assertThisInitialized$e(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$d() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$d(o) { _getPrototypeOf$d = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$d(o); } function _defineProperty$e(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var AMPMMidnightParser = /*#__PURE__*/function (_Parser) { _inherits$d(AMPMMidnightParser, _Parser); var _super = _createSuper$d(AMPMMidnightParser); function AMPMMidnightParser() { var _this; _classCallCheck$d(this, AMPMMidnightParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$e(_assertThisInitialized$e(_this), "priority", 80); _defineProperty$e(_assertThisInitialized$e(_this), "incompatibleTokens", ['a', 'B', 'H', 'k', 't', 'T']); return _this; } _createClass$d(AMPMMidnightParser, [{ key: "parse", value: function parse(dateString, token, match) { switch (token) { case 'b': case 'bb': case 'bbb': return match.dayPeriod(dateString, { width: 'abbreviated', context: 'formatting' }) || match.dayPeriod(dateString, { width: 'narrow', context: 'formatting' }); case 'bbbbb': return match.dayPeriod(dateString, { width: 'narrow', context: 'formatting' }); case 'bbbb': default: return match.dayPeriod(dateString, { width: 'wide', context: 'formatting' }) || match.dayPeriod(dateString, { width: 'abbreviated', context: 'formatting' }) || match.dayPeriod(dateString, { width: 'narrow', context: 'formatting' }); } } }, { key: "set", value: function set(date, _flags, value) { date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0); return date; } }]); return AMPMMidnightParser; }(Parser); function _typeof$e(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$e = function _typeof(obj) { return typeof obj; }; } else { _typeof$e = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$e(obj); } function _classCallCheck$c(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$c(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$c(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$c(Constructor.prototype, protoProps); if (staticProps) _defineProperties$c(Constructor, staticProps); return Constructor; } function _inherits$c(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$d(subClass, superClass); } function _setPrototypeOf$d(o, p) { _setPrototypeOf$d = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$d(o, p); } function _createSuper$c(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$c(); return function _createSuperInternal() { var Super = _getPrototypeOf$c(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$c(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$c(this, result); }; } function _possibleConstructorReturn$c(self, call) { if (call && (_typeof$e(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$d(self); } function _assertThisInitialized$d(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$c() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$c(o) { _getPrototypeOf$c = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$c(o); } function _defineProperty$d(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var DayPeriodParser = /*#__PURE__*/function (_Parser) { _inherits$c(DayPeriodParser, _Parser); var _super = _createSuper$c(DayPeriodParser); function DayPeriodParser() { var _this; _classCallCheck$c(this, DayPeriodParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$d(_assertThisInitialized$d(_this), "priority", 80); _defineProperty$d(_assertThisInitialized$d(_this), "incompatibleTokens", ['a', 'b', 't', 'T']); return _this; } _createClass$c(DayPeriodParser, [{ key: "parse", value: function parse(dateString, token, match) { switch (token) { case 'B': case 'BB': case 'BBB': return match.dayPeriod(dateString, { width: 'abbreviated', context: 'formatting' }) || match.dayPeriod(dateString, { width: 'narrow', context: 'formatting' }); case 'BBBBB': return match.dayPeriod(dateString, { width: 'narrow', context: 'formatting' }); case 'BBBB': default: return match.dayPeriod(dateString, { width: 'wide', context: 'formatting' }) || match.dayPeriod(dateString, { width: 'abbreviated', context: 'formatting' }) || match.dayPeriod(dateString, { width: 'narrow', context: 'formatting' }); } } }, { key: "set", value: function set(date, _flags, value) { date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0); return date; } }]); return DayPeriodParser; }(Parser); function _typeof$d(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$d = function _typeof(obj) { return typeof obj; }; } else { _typeof$d = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$d(obj); } function _classCallCheck$b(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$b(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$b(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$b(Constructor.prototype, protoProps); if (staticProps) _defineProperties$b(Constructor, staticProps); return Constructor; } function _inherits$b(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$c(subClass, superClass); } function _setPrototypeOf$c(o, p) { _setPrototypeOf$c = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$c(o, p); } function _createSuper$b(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$b(); return function _createSuperInternal() { var Super = _getPrototypeOf$b(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$b(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$b(this, result); }; } function _possibleConstructorReturn$b(self, call) { if (call && (_typeof$d(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$c(self); } function _assertThisInitialized$c(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$b() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$b(o) { _getPrototypeOf$b = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$b(o); } function _defineProperty$c(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var Hour1to12Parser = /*#__PURE__*/function (_Parser) { _inherits$b(Hour1to12Parser, _Parser); var _super = _createSuper$b(Hour1to12Parser); function Hour1to12Parser() { var _this; _classCallCheck$b(this, Hour1to12Parser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$c(_assertThisInitialized$c(_this), "priority", 70); _defineProperty$c(_assertThisInitialized$c(_this), "incompatibleTokens", ['H', 'K', 'k', 't', 'T']); return _this; } _createClass$b(Hour1to12Parser, [{ key: "parse", value: function parse(dateString, token, match) { switch (token) { case 'h': return parseNumericPattern(numericPatterns.hour12h, dateString); case 'ho': return match.ordinalNumber(dateString, { unit: 'hour' }); default: return parseNDigits(token.length, dateString); } } }, { key: "validate", value: function validate(_date, value) { return value >= 1 && value <= 12; } }, { key: "set", value: function set(date, _flags, value) { var isPM = date.getUTCHours() >= 12; if (isPM && value < 12) { date.setUTCHours(value + 12, 0, 0, 0); } else if (!isPM && value === 12) { date.setUTCHours(0, 0, 0, 0); } else { date.setUTCHours(value, 0, 0, 0); } return date; } }]); return Hour1to12Parser; }(Parser); function _typeof$c(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$c = function _typeof(obj) { return typeof obj; }; } else { _typeof$c = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$c(obj); } function _classCallCheck$a(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$a(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$a(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$a(Constructor.prototype, protoProps); if (staticProps) _defineProperties$a(Constructor, staticProps); return Constructor; } function _inherits$a(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$b(subClass, superClass); } function _setPrototypeOf$b(o, p) { _setPrototypeOf$b = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$b(o, p); } function _createSuper$a(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$a(); return function _createSuperInternal() { var Super = _getPrototypeOf$a(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$a(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$a(this, result); }; } function _possibleConstructorReturn$a(self, call) { if (call && (_typeof$c(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$b(self); } function _assertThisInitialized$b(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$a() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$a(o) { _getPrototypeOf$a = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$a(o); } function _defineProperty$b(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var Hour0to23Parser = /*#__PURE__*/function (_Parser) { _inherits$a(Hour0to23Parser, _Parser); var _super = _createSuper$a(Hour0to23Parser); function Hour0to23Parser() { var _this; _classCallCheck$a(this, Hour0to23Parser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$b(_assertThisInitialized$b(_this), "priority", 70); _defineProperty$b(_assertThisInitialized$b(_this), "incompatibleTokens", ['a', 'b', 'h', 'K', 'k', 't', 'T']); return _this; } _createClass$a(Hour0to23Parser, [{ key: "parse", value: function parse(dateString, token, match) { switch (token) { case 'H': return parseNumericPattern(numericPatterns.hour23h, dateString); case 'Ho': return match.ordinalNumber(dateString, { unit: 'hour' }); default: return parseNDigits(token.length, dateString); } } }, { key: "validate", value: function validate(_date, value) { return value >= 0 && value <= 23; } }, { key: "set", value: function set(date, _flags, value) { date.setUTCHours(value, 0, 0, 0); return date; } }]); return Hour0to23Parser; }(Parser); function _typeof$b(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$b = function _typeof(obj) { return typeof obj; }; } else { _typeof$b = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$b(obj); } function _classCallCheck$9(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$9(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$9(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$9(Constructor.prototype, protoProps); if (staticProps) _defineProperties$9(Constructor, staticProps); return Constructor; } function _inherits$9(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$a(subClass, superClass); } function _setPrototypeOf$a(o, p) { _setPrototypeOf$a = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$a(o, p); } function _createSuper$9(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$9(); return function _createSuperInternal() { var Super = _getPrototypeOf$9(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$9(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$9(this, result); }; } function _possibleConstructorReturn$9(self, call) { if (call && (_typeof$b(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$a(self); } function _assertThisInitialized$a(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$9() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$9(o) { _getPrototypeOf$9 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$9(o); } function _defineProperty$a(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var Hour0To11Parser = /*#__PURE__*/function (_Parser) { _inherits$9(Hour0To11Parser, _Parser); var _super = _createSuper$9(Hour0To11Parser); function Hour0To11Parser() { var _this; _classCallCheck$9(this, Hour0To11Parser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$a(_assertThisInitialized$a(_this), "priority", 70); _defineProperty$a(_assertThisInitialized$a(_this), "incompatibleTokens", ['h', 'H', 'k', 't', 'T']); return _this; } _createClass$9(Hour0To11Parser, [{ key: "parse", value: function parse(dateString, token, match) { switch (token) { case 'K': return parseNumericPattern(numericPatterns.hour11h, dateString); case 'Ko': return match.ordinalNumber(dateString, { unit: 'hour' }); default: return parseNDigits(token.length, dateString); } } }, { key: "validate", value: function validate(_date, value) { return value >= 0 && value <= 11; } }, { key: "set", value: function set(date, _flags, value) { var isPM = date.getUTCHours() >= 12; if (isPM && value < 12) { date.setUTCHours(value + 12, 0, 0, 0); } else { date.setUTCHours(value, 0, 0, 0); } return date; } }]); return Hour0To11Parser; }(Parser); function _typeof$a(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$a = function _typeof(obj) { return typeof obj; }; } else { _typeof$a = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$a(obj); } function _classCallCheck$8(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$8(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$8(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$8(Constructor.prototype, protoProps); if (staticProps) _defineProperties$8(Constructor, staticProps); return Constructor; } function _inherits$8(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$9(subClass, superClass); } function _setPrototypeOf$9(o, p) { _setPrototypeOf$9 = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$9(o, p); } function _createSuper$8(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$8(); return function _createSuperInternal() { var Super = _getPrototypeOf$8(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$8(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$8(this, result); }; } function _possibleConstructorReturn$8(self, call) { if (call && (_typeof$a(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$9(self); } function _assertThisInitialized$9(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$8() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$8(o) { _getPrototypeOf$8 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$8(o); } function _defineProperty$9(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var Hour1To24Parser = /*#__PURE__*/function (_Parser) { _inherits$8(Hour1To24Parser, _Parser); var _super = _createSuper$8(Hour1To24Parser); function Hour1To24Parser() { var _this; _classCallCheck$8(this, Hour1To24Parser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$9(_assertThisInitialized$9(_this), "priority", 70); _defineProperty$9(_assertThisInitialized$9(_this), "incompatibleTokens", ['a', 'b', 'h', 'H', 'K', 't', 'T']); return _this; } _createClass$8(Hour1To24Parser, [{ key: "parse", value: function parse(dateString, token, match) { switch (token) { case 'k': return parseNumericPattern(numericPatterns.hour24h, dateString); case 'ko': return match.ordinalNumber(dateString, { unit: 'hour' }); default: return parseNDigits(token.length, dateString); } } }, { key: "validate", value: function validate(_date, value) { return value >= 1 && value <= 24; } }, { key: "set", value: function set(date, _flags, value) { var hours = value <= 24 ? value % 24 : value; date.setUTCHours(hours, 0, 0, 0); return date; } }]); return Hour1To24Parser; }(Parser); function _typeof$9(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$9 = function _typeof(obj) { return typeof obj; }; } else { _typeof$9 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$9(obj); } function _classCallCheck$7(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$7(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$7(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$7(Constructor.prototype, protoProps); if (staticProps) _defineProperties$7(Constructor, staticProps); return Constructor; } function _inherits$7(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$8(subClass, superClass); } function _setPrototypeOf$8(o, p) { _setPrototypeOf$8 = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$8(o, p); } function _createSuper$7(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$7(); return function _createSuperInternal() { var Super = _getPrototypeOf$7(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$7(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$7(this, result); }; } function _possibleConstructorReturn$7(self, call) { if (call && (_typeof$9(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$8(self); } function _assertThisInitialized$8(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$7() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$7(o) { _getPrototypeOf$7 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$7(o); } function _defineProperty$8(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var MinuteParser = /*#__PURE__*/function (_Parser) { _inherits$7(MinuteParser, _Parser); var _super = _createSuper$7(MinuteParser); function MinuteParser() { var _this; _classCallCheck$7(this, MinuteParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$8(_assertThisInitialized$8(_this), "priority", 60); _defineProperty$8(_assertThisInitialized$8(_this), "incompatibleTokens", ['t', 'T']); return _this; } _createClass$7(MinuteParser, [{ key: "parse", value: function parse(dateString, token, match) { switch (token) { case 'm': return parseNumericPattern(numericPatterns.minute, dateString); case 'mo': return match.ordinalNumber(dateString, { unit: 'minute' }); default: return parseNDigits(token.length, dateString); } } }, { key: "validate", value: function validate(_date, value) { return value >= 0 && value <= 59; } }, { key: "set", value: function set(date, _flags, value) { date.setUTCMinutes(value, 0, 0); return date; } }]); return MinuteParser; }(Parser); function _typeof$8(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$8 = function _typeof(obj) { return typeof obj; }; } else { _typeof$8 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$8(obj); } function _classCallCheck$6(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$6(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$6(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$6(Constructor.prototype, protoProps); if (staticProps) _defineProperties$6(Constructor, staticProps); return Constructor; } function _inherits$6(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$7(subClass, superClass); } function _setPrototypeOf$7(o, p) { _setPrototypeOf$7 = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$7(o, p); } function _createSuper$6(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$6(); return function _createSuperInternal() { var Super = _getPrototypeOf$6(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$6(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$6(this, result); }; } function _possibleConstructorReturn$6(self, call) { if (call && (_typeof$8(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$7(self); } function _assertThisInitialized$7(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$6() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$6(o) { _getPrototypeOf$6 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$6(o); } function _defineProperty$7(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var SecondParser = /*#__PURE__*/function (_Parser) { _inherits$6(SecondParser, _Parser); var _super = _createSuper$6(SecondParser); function SecondParser() { var _this; _classCallCheck$6(this, SecondParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$7(_assertThisInitialized$7(_this), "priority", 50); _defineProperty$7(_assertThisInitialized$7(_this), "incompatibleTokens", ['t', 'T']); return _this; } _createClass$6(SecondParser, [{ key: "parse", value: function parse(dateString, token, match) { switch (token) { case 's': return parseNumericPattern(numericPatterns.second, dateString); case 'so': return match.ordinalNumber(dateString, { unit: 'second' }); default: return parseNDigits(token.length, dateString); } } }, { key: "validate", value: function validate(_date, value) { return value >= 0 && value <= 59; } }, { key: "set", value: function set(date, _flags, value) { date.setUTCSeconds(value, 0); return date; } }]); return SecondParser; }(Parser); function _typeof$7(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$7 = function _typeof(obj) { return typeof obj; }; } else { _typeof$7 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$7(obj); } function _classCallCheck$5(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$5(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$5(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$5(Constructor.prototype, protoProps); if (staticProps) _defineProperties$5(Constructor, staticProps); return Constructor; } function _inherits$5(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$6(subClass, superClass); } function _setPrototypeOf$6(o, p) { _setPrototypeOf$6 = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$6(o, p); } function _createSuper$5(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$5(); return function _createSuperInternal() { var Super = _getPrototypeOf$5(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$5(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$5(this, result); }; } function _possibleConstructorReturn$5(self, call) { if (call && (_typeof$7(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$6(self); } function _assertThisInitialized$6(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$5() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$5(o) { _getPrototypeOf$5 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$5(o); } function _defineProperty$6(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var FractionOfSecondParser = /*#__PURE__*/function (_Parser) { _inherits$5(FractionOfSecondParser, _Parser); var _super = _createSuper$5(FractionOfSecondParser); function FractionOfSecondParser() { var _this; _classCallCheck$5(this, FractionOfSecondParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$6(_assertThisInitialized$6(_this), "priority", 30); _defineProperty$6(_assertThisInitialized$6(_this), "incompatibleTokens", ['t', 'T']); return _this; } _createClass$5(FractionOfSecondParser, [{ key: "parse", value: function parse(dateString, token) { var valueCallback = function valueCallback(value) { return Math.floor(value * Math.pow(10, -token.length + 3)); }; return mapValue(parseNDigits(token.length, dateString), valueCallback); } }, { key: "set", value: function set(date, _flags, value) { date.setUTCMilliseconds(value); return date; } }]); return FractionOfSecondParser; }(Parser); function _typeof$6(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$6 = function _typeof(obj) { return typeof obj; }; } else { _typeof$6 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$6(obj); } function _classCallCheck$4(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$4(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$4(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$4(Constructor.prototype, protoProps); if (staticProps) _defineProperties$4(Constructor, staticProps); return Constructor; } function _inherits$4(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$5(subClass, superClass); } function _setPrototypeOf$5(o, p) { _setPrototypeOf$5 = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$5(o, p); } function _createSuper$4(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$4(); return function _createSuperInternal() { var Super = _getPrototypeOf$4(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$4(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$4(this, result); }; } function _possibleConstructorReturn$4(self, call) { if (call && (_typeof$6(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$5(self); } function _assertThisInitialized$5(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$4() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$4(o) { _getPrototypeOf$4 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$4(o); } function _defineProperty$5(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var ISOTimezoneWithZParser = /*#__PURE__*/function (_Parser) { _inherits$4(ISOTimezoneWithZParser, _Parser); var _super = _createSuper$4(ISOTimezoneWithZParser); function ISOTimezoneWithZParser() { var _this; _classCallCheck$4(this, ISOTimezoneWithZParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$5(_assertThisInitialized$5(_this), "priority", 10); _defineProperty$5(_assertThisInitialized$5(_this), "incompatibleTokens", ['t', 'T', 'x']); return _this; } _createClass$4(ISOTimezoneWithZParser, [{ key: "parse", value: function parse(dateString, token) { switch (token) { case 'X': return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString); case 'XX': return parseTimezonePattern(timezonePatterns.basic, dateString); case 'XXXX': return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString); case 'XXXXX': return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString); case 'XXX': default: return parseTimezonePattern(timezonePatterns.extended, dateString); } } }, { key: "set", value: function set(date, flags, value) { if (flags.timestampIsSet) { return date; } return new Date(date.getTime() - value); } }]); return ISOTimezoneWithZParser; }(Parser); function _typeof$5(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$5 = function _typeof(obj) { return typeof obj; }; } else { _typeof$5 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$5(obj); } function _classCallCheck$3(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$3(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$3(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$3(Constructor.prototype, protoProps); if (staticProps) _defineProperties$3(Constructor, staticProps); return Constructor; } function _inherits$3(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$4(subClass, superClass); } function _setPrototypeOf$4(o, p) { _setPrototypeOf$4 = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$4(o, p); } function _createSuper$3(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$3(); return function _createSuperInternal() { var Super = _getPrototypeOf$3(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$3(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$3(this, result); }; } function _possibleConstructorReturn$3(self, call) { if (call && (_typeof$5(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$4(self); } function _assertThisInitialized$4(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$3() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$3(o) { _getPrototypeOf$3 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$3(o); } function _defineProperty$4(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var ISOTimezoneParser = /*#__PURE__*/function (_Parser) { _inherits$3(ISOTimezoneParser, _Parser); var _super = _createSuper$3(ISOTimezoneParser); function ISOTimezoneParser() { var _this; _classCallCheck$3(this, ISOTimezoneParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$4(_assertThisInitialized$4(_this), "priority", 10); _defineProperty$4(_assertThisInitialized$4(_this), "incompatibleTokens", ['t', 'T', 'X']); return _this; } _createClass$3(ISOTimezoneParser, [{ key: "parse", value: function parse(dateString, token) { switch (token) { case 'x': return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString); case 'xx': return parseTimezonePattern(timezonePatterns.basic, dateString); case 'xxxx': return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString); case 'xxxxx': return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString); case 'xxx': default: return parseTimezonePattern(timezonePatterns.extended, dateString); } } }, { key: "set", value: function set(date, flags, value) { if (flags.timestampIsSet) { return date; } return new Date(date.getTime() - value); } }]); return ISOTimezoneParser; }(Parser); function _typeof$4(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$4 = function _typeof(obj) { return typeof obj; }; } else { _typeof$4 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$4(obj); } function _classCallCheck$2(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$2(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$2(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$2(Constructor.prototype, protoProps); if (staticProps) _defineProperties$2(Constructor, staticProps); return Constructor; } function _inherits$2(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$3(subClass, superClass); } function _setPrototypeOf$3(o, p) { _setPrototypeOf$3 = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$3(o, p); } function _createSuper$2(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$2(); return function _createSuperInternal() { var Super = _getPrototypeOf$2(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$2(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$2(this, result); }; } function _possibleConstructorReturn$2(self, call) { if (call && (_typeof$4(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$3(self); } function _assertThisInitialized$3(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$2() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$2(o) { _getPrototypeOf$2 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$2(o); } function _defineProperty$3(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var TimestampSecondsParser = /*#__PURE__*/function (_Parser) { _inherits$2(TimestampSecondsParser, _Parser); var _super = _createSuper$2(TimestampSecondsParser); function TimestampSecondsParser() { var _this; _classCallCheck$2(this, TimestampSecondsParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$3(_assertThisInitialized$3(_this), "priority", 40); _defineProperty$3(_assertThisInitialized$3(_this), "incompatibleTokens", '*'); return _this; } _createClass$2(TimestampSecondsParser, [{ key: "parse", value: function parse(dateString) { return parseAnyDigitsSigned(dateString); } }, { key: "set", value: function set(_date, _flags, value) { return [new Date(value * 1000), { timestampIsSet: true }]; } }]); return TimestampSecondsParser; }(Parser); function _typeof$3(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$3 = function _typeof(obj) { return typeof obj; }; } else { _typeof$3 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$3(obj); } function _classCallCheck$1(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$1(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass$1(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$1(Constructor.prototype, protoProps); if (staticProps) _defineProperties$1(Constructor, staticProps); return Constructor; } function _inherits$1(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf$2(subClass, superClass); } function _setPrototypeOf$2(o, p) { _setPrototypeOf$2 = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$2(o, p); } function _createSuper$1(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$1(); return function _createSuperInternal() { var Super = _getPrototypeOf$1(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf$1(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn$1(this, result); }; } function _possibleConstructorReturn$1(self, call) { if (call && (_typeof$3(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized$2(self); } function _assertThisInitialized$2(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct$1() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf$1(o) { _getPrototypeOf$1 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf$1(o); } function _defineProperty$2(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var TimestampMillisecondsParser = /*#__PURE__*/function (_Parser) { _inherits$1(TimestampMillisecondsParser, _Parser); var _super = _createSuper$1(TimestampMillisecondsParser); function TimestampMillisecondsParser() { var _this; _classCallCheck$1(this, TimestampMillisecondsParser); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _defineProperty$2(_assertThisInitialized$2(_this), "priority", 20); _defineProperty$2(_assertThisInitialized$2(_this), "incompatibleTokens", '*'); return _this; } _createClass$1(TimestampMillisecondsParser, [{ key: "parse", value: function parse(dateString) { return parseAnyDigitsSigned(dateString); } }, { key: "set", value: function set(_date, _flags, value) { return [new Date(value), { timestampIsSet: true }]; } }]); return TimestampMillisecondsParser; }(Parser); /* * | | Unit | | Unit | * |-----|--------------------------------|-----|--------------------------------| * | a | AM, PM | A* | Milliseconds in day | * | b | AM, PM, noon, midnight | B | Flexible day period | * | c | Stand-alone local day of week | C* | Localized hour w/ day period | * | d | Day of month | D | Day of year | * | e | Local day of week | E | Day of week | * | f | | F* | Day of week in month | * | g* | Modified Julian day | G | Era | * | h | Hour [1-12] | H | Hour [0-23] | * | i! | ISO day of week | I! | ISO week of year | * | j* | Localized hour w/ day period | J* | Localized hour w/o day period | * | k | Hour [1-24] | K | Hour [0-11] | * | l* | (deprecated) | L | Stand-alone month | * | m | Minute | M | Month | * | n | | N | | * | o! | Ordinal number modifier | O* | Timezone (GMT) | * | p | | P | | * | q | Stand-alone quarter | Q | Quarter | * | r* | Related Gregorian year | R! | ISO week-numbering year | * | s | Second | S | Fraction of second | * | t! | Seconds timestamp | T! | Milliseconds timestamp | * | u | Extended year | U* | Cyclic year | * | v* | Timezone (generic non-locat.) | V* | Timezone (location) | * | w | Local week of year | W* | Week of month | * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) | * | y | Year (abs) | Y | Local week-numbering year | * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) | * * Letters marked by * are not implemented but reserved by Unicode standard. * * Letters marked by ! are non-standard, but implemented by date-fns: * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs) * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days, * i.e. 7 for Sunday, 1 for Monday, etc. * - `I` is ISO week of year, as opposed to `w` which is local week of year. * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year. * `R` is supposed to be used in conjunction with `I` and `i` * for universal ISO week-numbering date, whereas * `Y` is supposed to be used in conjunction with `w` and `e` * for week-numbering date specific to the locale. */ var parsers = { G: new EraParser(), y: new YearParser(), Y: new LocalWeekYearParser(), R: new ISOWeekYearParser(), u: new ExtendedYearParser(), Q: new QuarterParser(), q: new StandAloneQuarterParser(), M: new MonthParser(), L: new StandAloneMonthParser(), w: new LocalWeekParser(), I: new ISOWeekParser(), d: new DateParser(), D: new DayOfYearParser(), E: new DayParser(), e: new LocalDayParser(), c: new StandAloneLocalDayParser(), i: new ISODayParser(), a: new AMPMParser(), b: new AMPMMidnightParser(), B: new DayPeriodParser(), h: new Hour1to12Parser(), H: new Hour0to23Parser(), K: new Hour0To11Parser(), k: new Hour1To24Parser(), m: new MinuteParser(), s: new SecondParser(), S: new FractionOfSecondParser(), X: new ISOTimezoneWithZParser(), x: new ISOTimezoneParser(), t: new TimestampSecondsParser(), T: new TimestampMillisecondsParser() }; function _typeof$2(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$2 = function _typeof(obj) { return typeof obj; }; } else { _typeof$2 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$2(obj); } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$1(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray$1(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$1(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$1(o, minLen); } function _arrayLikeToArray$1(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } // - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token // (one of the certain letters followed by `o`) // - (\w)\1* matches any sequences of the same letter // - '' matches two quote characters in a row // - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('), // except a single quote symbol, which ends the sequence. // Two quote characters do not end the sequence. // If there is no matching single quote // then the sequence will continue until the end of the string. // - . matches any single character unmatched by previous parts of the RegExps var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also // sequences of symbols P, p, and the combinations like `PPPPPPPppppp` var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; var escapedStringRegExp = /^'([^]*?)'?$/; var doubleQuoteRegExp = /''/g; var notWhitespaceRegExp = /\S/; var unescapedLatinCharacterRegExp = /[a-zA-Z]/; /** * @name parse * @category Common Helpers * @summary Parse the date. * * @description * Return the date parsed from string using the given format string. * * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries. * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * * The characters in the format string wrapped between two single quotes characters (') are escaped. * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote. * * Format of the format string is based on Unicode Technical Standard #35: * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table * with a few additions (see note 5 below the table). * * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception: * * ```javascript * parse('23 AM', 'HH a', new Date()) * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time * ``` * * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true * * Accepted format string patterns: * | Unit |Prior| Pattern | Result examples | Notes | * |---------------------------------|-----|---------|-----------------------------------|-------| * | Era | 140 | G..GGG | AD, BC | | * | | | GGGG | Anno Domini, Before Christ | 2 | * | | | GGGGG | A, B | | * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 | * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 | * | | | yy | 44, 01, 00, 17 | 4 | * | | | yyy | 044, 001, 123, 999 | 4 | * | | | yyyy | 0044, 0001, 1900, 2017 | 4 | * | | | yyyyy | ... | 2,4 | * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 | * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 | * | | | YY | 44, 01, 00, 17 | 4,6 | * | | | YYY | 044, 001, 123, 999 | 4 | * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 | * | | | YYYYY | ... | 2,4 | * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 | * | | | RR | -43, 01, 00, 17 | 4,5 | * | | | RRR | -043, 001, 123, 999, -999 | 4,5 | * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 | * | | | RRRRR | ... | 2,4,5 | * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 | * | | | uu | -43, 01, 99, -99 | 4 | * | | | uuu | -043, 001, 123, 999, -999 | 4 | * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 | * | | | uuuuu | ... | 2,4 | * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | | * | | | Qo | 1st, 2nd, 3rd, 4th | 5 | * | | | QQ | 01, 02, 03, 04 | | * | | | QQQ | Q1, Q2, Q3, Q4 | | * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 | * | | | QQQQQ | 1, 2, 3, 4 | 4 | * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | | * | | | qo | 1st, 2nd, 3rd, 4th | 5 | * | | | qq | 01, 02, 03, 04 | | * | | | qqq | Q1, Q2, Q3, Q4 | | * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 | * | | | qqqqq | 1, 2, 3, 4 | 3 | * | Month (formatting) | 110 | M | 1, 2, ..., 12 | | * | | | Mo | 1st, 2nd, ..., 12th | 5 | * | | | MM | 01, 02, ..., 12 | | * | | | MMM | Jan, Feb, ..., Dec | | * | | | MMMM | January, February, ..., December | 2 | * | | | MMMMM | J, F, ..., D | | * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | | * | | | Lo | 1st, 2nd, ..., 12th | 5 | * | | | LL | 01, 02, ..., 12 | | * | | | LLL | Jan, Feb, ..., Dec | | * | | | LLLL | January, February, ..., December | 2 | * | | | LLLLL | J, F, ..., D | | * | Local week of year | 100 | w | 1, 2, ..., 53 | | * | | | wo | 1st, 2nd, ..., 53th | 5 | * | | | ww | 01, 02, ..., 53 | | * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 | * | | | Io | 1st, 2nd, ..., 53th | 5 | * | | | II | 01, 02, ..., 53 | 5 | * | Day of month | 90 | d | 1, 2, ..., 31 | | * | | | do | 1st, 2nd, ..., 31st | 5 | * | | | dd | 01, 02, ..., 31 | | * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 | * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 | * | | | DD | 01, 02, ..., 365, 366 | 7 | * | | | DDD | 001, 002, ..., 365, 366 | | * | | | DDDD | ... | 2 | * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | | * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 | * | | | EEEEE | M, T, W, T, F, S, S | | * | | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | | * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 | * | | | io | 1st, 2nd, ..., 7th | 5 | * | | | ii | 01, 02, ..., 07 | 5 | * | | | iii | Mon, Tue, Wed, ..., Sun | 5 | * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 | * | | | iiiii | M, T, W, T, F, S, S | 5 | * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 | * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | | * | | | eo | 2nd, 3rd, ..., 1st | 5 | * | | | ee | 02, 03, ..., 01 | | * | | | eee | Mon, Tue, Wed, ..., Sun | | * | | | eeee | Monday, Tuesday, ..., Sunday | 2 | * | | | eeeee | M, T, W, T, F, S, S | | * | | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | | * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | | * | | | co | 2nd, 3rd, ..., 1st | 5 | * | | | cc | 02, 03, ..., 01 | | * | | | ccc | Mon, Tue, Wed, ..., Sun | | * | | | cccc | Monday, Tuesday, ..., Sunday | 2 | * | | | ccccc | M, T, W, T, F, S, S | | * | | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | | * | AM, PM | 80 | a..aaa | AM, PM | | * | | | aaaa | a.m., p.m. | 2 | * | | | aaaaa | a, p | | * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | | * | | | bbbb | a.m., p.m., noon, midnight | 2 | * | | | bbbbb | a, p, n, mi | | * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | | * | | | BBBB | at night, in the morning, ... | 2 | * | | | BBBBB | at night, in the morning, ... | | * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | | * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 | * | | | hh | 01, 02, ..., 11, 12 | | * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | | * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 | * | | | HH | 00, 01, 02, ..., 23 | | * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | | * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 | * | | | KK | 01, 02, ..., 11, 00 | | * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | | * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 | * | | | kk | 24, 01, 02, ..., 23 | | * | Minute | 60 | m | 0, 1, ..., 59 | | * | | | mo | 0th, 1st, ..., 59th | 5 | * | | | mm | 00, 01, ..., 59 | | * | Second | 50 | s | 0, 1, ..., 59 | | * | | | so | 0th, 1st, ..., 59th | 5 | * | | | ss | 00, 01, ..., 59 | | * | Seconds timestamp | 40 | t | 512969520 | | * | | | tt | ... | 2 | * | Fraction of second | 30 | S | 0, 1, ..., 9 | | * | | | SS | 00, 01, ..., 99 | | * | | | SSS | 000, 001, ..., 999 | | * | | | SSSS | ... | 2 | * | Milliseconds timestamp | 20 | T | 512969520900 | | * | | | TT | ... | 2 | * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | | * | | | XX | -0800, +0530, Z | | * | | | XXX | -08:00, +05:30, Z | | * | | | XXXX | -0800, +0530, Z, +123456 | 2 | * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | | * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | | * | | | xx | -0800, +0530, +0000 | | * | | | xxx | -08:00, +05:30, +00:00 | 2 | * | | | xxxx | -0800, +0530, +0000, +123456 | | * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | | * | Long localized date | NA | P | 05/29/1453 | 5,8 | * | | | PP | May 29, 1453 | | * | | | PPP | May 29th, 1453 | | * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 | * | Long localized time | NA | p | 12:00 AM | 5,8 | * | | | pp | 12:00:00 AM | | * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | | * | | | PPpp | May 29, 1453, 12:00:00 AM | | * | | | PPPpp | May 29th, 1453 at ... | | * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 | * Notes: * 1. "Formatting" units (e.g. formatting quarter) in the default en-US locale * are the same as "stand-alone" units, but are different in some languages. * "Formatting" units are declined according to the rules of the language * in the context of a date. "Stand-alone" units are always nominative singular. * In `format` function, they will produce different result: * * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'` * * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'` * * `parse` will try to match both formatting and stand-alone units interchangably. * * 2. Any sequence of the identical letters is a pattern, unless it is escaped by * the single quote characters (see below). * If the sequence is longer than listed in table: * - for numerical units (`yyyyyyyy`) `parse` will try to match a number * as wide as the sequence * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit. * These variations are marked with "2" in the last column of the table. * * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales. * These tokens represent the shortest form of the quarter. * * 4. The main difference between `y` and `u` patterns are B.C. years: * * | Year | `y` | `u` | * |------|-----|-----| * | AC 1 | 1 | 1 | * | BC 1 | 1 | 0 | * | BC 2 | 2 | -1 | * * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`: * * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00` * * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00` * * while `uu` will just assign the year as is: * * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00` * * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00` * * The same difference is true for local and ISO week-numbering years (`Y` and `R`), * except local week-numbering years are dependent on `options.weekStartsOn` * and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear} * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}). * * 5. These patterns are not in the Unicode Technical Standard #35: * - `i`: ISO day of week * - `I`: ISO week of year * - `R`: ISO week-numbering year * - `o`: ordinal number modifier * - `P`: long localized date * - `p`: long localized time * * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years. * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month. * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based * on the given locale. * * using `en-US` locale: `P` => `MM/dd/yyyy` * using `en-US` locale: `p` => `hh:mm a` * using `pt-BR` locale: `P` => `dd/MM/yyyy` * using `pt-BR` locale: `p` => `HH:mm` * * Values will be assigned to the date in the descending order of its unit's priority. * Units of an equal priority overwrite each other in the order of appearance. * * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year), * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing. * * `referenceDate` must be passed for correct work of the function. * If you're not sure which `referenceDate` to supply, create a new instance of Date: * `parse('02/11/2014', 'MM/dd/yyyy', new Date())` * In this case parsing will be done in the context of the current date. * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`, * then `Invalid Date` will be returned. * * The result may vary by locale. * * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned. * * If parsing failed, `Invalid Date` will be returned. * Invalid Date is a Date, whose time value is NaN. * Time value of Date: http://es5.github.io/#x15.9.1.1 * * @param {String} dateString - the string to parse * @param {String} formatString - the string of tokens * @param {Date|Number} referenceDate - defines values missing from the parsed dateString * @param {Object} [options] - an object with options. * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale} * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday) * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`; * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`; * see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * @returns {Date} the parsed date * @throws {TypeError} 3 arguments required * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6 * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7 * @throws {RangeError} `options.locale` must contain `match` property * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md * @throws {RangeError} format string contains an unescaped latin alphabet character * * @example * // Parse 11 February 2014 from middle-endian format: * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date()) * //=> Tue Feb 11 2014 00:00:00 * * @example * // Parse 28th of February in Esperanto locale in the context of 2010 year: * import eo from 'date-fns/locale/eo' * var result = parse('28-a de februaro', "do 'de' MMMM", new Date(2010, 0, 1), { * locale: eo * }) * //=> Sun Feb 28 2010 00:00:00 */ function parse$1(dirtyDateString, dirtyFormatString, dirtyReferenceDate, options) { var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4; requiredArgs$1(3, arguments); var dateString = String(dirtyDateString); var formatString = String(dirtyFormatString); var defaultOptions = getDefaultOptions(); var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale; if (!locale.match) { throw new RangeError('locale must contain match property'); } var firstWeekContainsDate = toInteger$1((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively'); } var weekStartsOn = toInteger$1((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { throw new RangeError('weekStartsOn must be between 0 and 6 inclusively'); } if (formatString === '') { if (dateString === '') { return toDate(dirtyReferenceDate); } else { return new Date(NaN); } } var subFnOptions = { firstWeekContainsDate: firstWeekContainsDate, weekStartsOn: weekStartsOn, locale: locale }; // If timezone isn't specified, it will be set to the system timezone var setters = [new DateToSystemTimezoneSetter()]; var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) { var firstCharacter = substring[0]; if (firstCharacter in longFormatters) { var longFormatter = longFormatters[firstCharacter]; return longFormatter(substring, locale.formatLong); } return substring; }).join('').match(formattingTokensRegExp); var usedTokens = []; var _iterator = _createForOfIteratorHelper(tokens), _step; try { var _loop = function _loop() { var token = _step.value; if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(token)) { throwProtectedError(token, formatString, dirtyDateString); } if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(token)) { throwProtectedError(token, formatString, dirtyDateString); } var firstCharacter = token[0]; var parser = parsers[firstCharacter]; if (parser) { var incompatibleTokens = parser.incompatibleTokens; if (Array.isArray(incompatibleTokens)) { var incompatibleToken = usedTokens.find(function (usedToken) { return incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter; }); if (incompatibleToken) { throw new RangeError("The format string mustn't contain `".concat(incompatibleToken.fullToken, "` and `").concat(token, "` at the same time")); } } else if (parser.incompatibleTokens === '*' && usedTokens.length > 0) { throw new RangeError("The format string mustn't contain `".concat(token, "` and any other token at the same time")); } usedTokens.push({ token: firstCharacter, fullToken: token }); var parseResult = parser.run(dateString, token, locale.match, subFnOptions); if (!parseResult) { return { v: new Date(NaN) }; } setters.push(parseResult.setter); dateString = parseResult.rest; } else { if (firstCharacter.match(unescapedLatinCharacterRegExp)) { throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`'); } // Replace two single quote characters with one single quote character if (token === "''") { token = "'"; } else if (firstCharacter === "'") { token = cleanEscapedString(token); } // Cut token from string, or, if string doesn't match the token, return Invalid Date if (dateString.indexOf(token) === 0) { dateString = dateString.slice(token.length); } else { return { v: new Date(NaN) }; } } }; for (_iterator.s(); !(_step = _iterator.n()).done;) { var _ret = _loop(); if (_typeof$2(_ret) === "object") return _ret.v; } // Check if the remaining input contains something other than whitespace } catch (err) { _iterator.e(err); } finally { _iterator.f(); } if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) { return new Date(NaN); } var uniquePrioritySetters = setters.map(function (setter) { return setter.priority; }).sort(function (a, b) { return b - a; }).filter(function (priority, index, array) { return array.indexOf(priority) === index; }).map(function (priority) { return setters.filter(function (setter) { return setter.priority === priority; }).sort(function (a, b) { return b.subPriority - a.subPriority; }); }).map(function (setterArray) { return setterArray[0]; }); var date = toDate(dirtyReferenceDate); if (isNaN(date.getTime())) { return new Date(NaN); } // Convert the date in system timezone to the same date in UTC+00:00 timezone. var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date)); var flags = {}; var _iterator2 = _createForOfIteratorHelper(uniquePrioritySetters), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var setter = _step2.value; if (!setter.validate(utcDate, subFnOptions)) { return new Date(NaN); } var result = setter.set(utcDate, flags, subFnOptions); // Result is tuple (date, flags) if (Array.isArray(result)) { utcDate = result[0]; assign$2(flags, result[1]); // Result is date } else { utcDate = result; } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } return utcDate; } function cleanEscapedString(input) { return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, "'"); } /** * @name parseISO * @category Common Helpers * @summary Parse ISO string * * @description * Parse the given string in ISO 8601 format and return an instance of Date. * * Function accepts complete ISO 8601 formats as well as partial implementations. * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601 * * If the argument isn't a string, the function cannot parse the string or * the values are invalid, it returns Invalid Date. * * @param {String} argument - the value to convert * @param {Object} [options] - an object with options. * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format * @returns {Date} the parsed date in the local time zone * @throws {TypeError} 1 argument required * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2 * * @example * // Convert string '2014-02-11T11:30:30' to date: * const result = parseISO('2014-02-11T11:30:30') * //=> Tue Feb 11 2014 11:30:30 * * @example * // Convert string '+02014101' to date, * // if the additional number of digits in the extended year format is 1: * const result = parseISO('+02014101', { additionalDigits: 1 }) * //=> Fri Apr 11 2014 00:00:00 */ function parseISO$2(argument, options) { var _options$additionalDi; requiredArgs$1(1, arguments); var additionalDigits = toInteger$1((_options$additionalDi = options === null || options === void 0 ? void 0 : options.additionalDigits) !== null && _options$additionalDi !== void 0 ? _options$additionalDi : 2); if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) { throw new RangeError('additionalDigits must be 0, 1 or 2'); } if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) { return new Date(NaN); } var dateStrings = splitDateString(argument); var date; if (dateStrings.date) { var parseYearResult = parseYear(dateStrings.date, additionalDigits); date = parseDate(parseYearResult.restDateString, parseYearResult.year); } if (!date || isNaN(date.getTime())) { return new Date(NaN); } var timestamp = date.getTime(); var time = 0; var offset; if (dateStrings.time) { time = parseTime(dateStrings.time); if (isNaN(time)) { return new Date(NaN); } } if (dateStrings.timezone) { offset = parseTimezone(dateStrings.timezone); if (isNaN(offset)) { return new Date(NaN); } } else { var dirtyDate = new Date(timestamp + time); // js parsed string assuming it's in UTC timezone // but we need it to be parsed in our timezone // so we use utc values to build date in our timezone. // Year values from 0 to 99 map to the years 1900 to 1999 // so set year explicitly with setFullYear. var result = new Date(0); result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate()); result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds()); return result; } return new Date(timestamp + time + offset); } var patterns = { dateTimeDelimiter: /[T ]/, timeZoneDelimiter: /[Z ]/i, timezone: /([Z+-].*)$/ }; var dateRegex = /^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/; var timeRegex = /^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/; var timezoneRegex = /^([+-])(\d{2})(?::?(\d{2}))?$/; function splitDateString(dateString) { var dateStrings = {}; var array = dateString.split(patterns.dateTimeDelimiter); var timeString; // The regex match should only return at maximum two array elements. // [date], [time], or [date, time]. if (array.length > 2) { return dateStrings; } if (/:/.test(array[0])) { timeString = array[0]; } else { dateStrings.date = array[0]; timeString = array[1]; if (patterns.timeZoneDelimiter.test(dateStrings.date)) { dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0]; timeString = dateString.substr(dateStrings.date.length, dateString.length); } } if (timeString) { var token = patterns.timezone.exec(timeString); if (token) { dateStrings.time = timeString.replace(token[1], ''); dateStrings.timezone = token[1]; } else { dateStrings.time = timeString; } } return dateStrings; } function parseYear(dateString, additionalDigits) { var regex = new RegExp('^(?:(\\d{4}|[+-]\\d{' + (4 + additionalDigits) + '})|(\\d{2}|[+-]\\d{' + (2 + additionalDigits) + '})$)'); var captures = dateString.match(regex); // Invalid ISO-formatted year if (!captures) return { year: NaN, restDateString: '' }; var year = captures[1] ? parseInt(captures[1]) : null; var century = captures[2] ? parseInt(captures[2]) : null; // either year or century is null, not both return { year: century === null ? year : century * 100, restDateString: dateString.slice((captures[1] || captures[2]).length) }; } function parseDate(dateString, year) { // Invalid ISO-formatted year if (year === null) return new Date(NaN); var captures = dateString.match(dateRegex); // Invalid ISO-formatted string if (!captures) return new Date(NaN); var isWeekDate = !!captures[4]; var dayOfYear = parseDateUnit(captures[1]); var month = parseDateUnit(captures[2]) - 1; var day = parseDateUnit(captures[3]); var week = parseDateUnit(captures[4]); var dayOfWeek = parseDateUnit(captures[5]) - 1; if (isWeekDate) { if (!validateWeekDate(year, week, dayOfWeek)) { return new Date(NaN); } return dayOfISOWeekYear(year, week, dayOfWeek); } else { var date = new Date(0); if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) { return new Date(NaN); } date.setUTCFullYear(year, month, Math.max(dayOfYear, day)); return date; } } function parseDateUnit(value) { return value ? parseInt(value) : 1; } function parseTime(timeString) { var captures = timeString.match(timeRegex); if (!captures) return NaN; // Invalid ISO-formatted time var hours = parseTimeUnit(captures[1]); var minutes = parseTimeUnit(captures[2]); var seconds = parseTimeUnit(captures[3]); if (!validateTime(hours, minutes, seconds)) { return NaN; } return hours * millisecondsInHour$1 + minutes * millisecondsInMinute$1 + seconds * 1000; } function parseTimeUnit(value) { return value && parseFloat(value.replace(',', '.')) || 0; } function parseTimezone(timezoneString) { if (timezoneString === 'Z') return 0; var captures = timezoneString.match(timezoneRegex); if (!captures) return 0; var sign = captures[1] === '+' ? -1 : 1; var hours = parseInt(captures[2]); var minutes = captures[3] && parseInt(captures[3]) || 0; if (!validateTimezone(hours, minutes)) { return NaN; } return sign * (hours * millisecondsInHour$1 + minutes * millisecondsInMinute$1); } function dayOfISOWeekYear(isoWeekYear, week, day) { var date = new Date(0); date.setUTCFullYear(isoWeekYear, 0, 4); var fourthOfJanuaryDay = date.getUTCDay() || 7; var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay; date.setUTCDate(date.getUTCDate() + diff); return date; } // Validation functions // February is null to handle the leap year (using ||) var daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; function isLeapYearIndex(year) { return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0; } function validateDate(year, month, date) { return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28)); } function validateDayOfYearDate(year, dayOfYear) { return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365); } function validateWeekDate(_year, week, day) { return week >= 1 && week <= 53 && day >= 0 && day <= 6; } function validateTime(hours, minutes, seconds) { if (hours === 24) { return minutes === 0 && seconds === 0; } return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25; } function validateTimezone(_hours, minutes) { return minutes >= 0 && minutes <= 59; } function _inheritsLoose$1(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf$1(subClass, superClass); } function _setPrototypeOf$1(o, p) { _setPrototypeOf$1 = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf$1(o, p); } function _objectWithoutPropertiesLoose$1(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } function _assertThisInitialized$1(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } /** * Check whether some DOM node is our Component's node. */ function isNodeFound(current, componentNode, ignoreClass) { if (current === componentNode) { return true; } // SVG <use/> elements do not technically reside in the rendered DOM, so // they do not have classList directly, but they offer a link to their // corresponding element, which can have classList. This extra check is for // that case. // See: http://www.w3.org/TR/SVG11/struct.html#InterfaceSVGUseElement // Discussion: https://github.com/Pomax/react-onclickoutside/pull/17 if (current.correspondingElement) { return current.correspondingElement.classList.contains(ignoreClass); } return current.classList.contains(ignoreClass); } /** * Try to find our node in a hierarchy of nodes, returning the document * node as highest node if our node is not found in the path up. */ function findHighest(current, componentNode, ignoreClass) { if (current === componentNode) { return true; } // If source=local then this event came from 'somewhere' // inside and should be ignored. We could handle this with // a layered approach, too, but that requires going back to // thinking in terms of Dom node nesting, running counter // to React's 'you shouldn't care about the DOM' philosophy. // Also cover shadowRoot node by checking current.host while (current.parentNode || current.host) { // Only check normal node without shadowRoot if (current.parentNode && isNodeFound(current, componentNode, ignoreClass)) { return true; } current = current.parentNode || current.host; } return current; } /** * Check if the browser scrollbar was clicked */ function clickedScrollbar(evt) { return document.documentElement.clientWidth <= evt.clientX || document.documentElement.clientHeight <= evt.clientY; } // ideally will get replaced with external dep // when rafrex/detect-passive-events#4 and rafrex/detect-passive-events#5 get merged in var testPassiveEventSupport = function testPassiveEventSupport() { if (typeof window === 'undefined' || typeof window.addEventListener !== 'function') { return; } var passive = false; var options = Object.defineProperty({}, 'passive', { get: function get() { passive = true; } }); var noop = function noop() {}; window.addEventListener('testPassiveEventSupport', noop, options); window.removeEventListener('testPassiveEventSupport', noop, options); return passive; }; function autoInc(seed) { if (seed === void 0) { seed = 0; } return function () { return ++seed; }; } var uid = autoInc(); var passiveEventSupport; var handlersMap = {}; var enabledInstances = {}; var touchEvents = ['touchstart', 'touchmove']; var IGNORE_CLASS_NAME = 'ignore-react-onclickoutside'; /** * Options for addEventHandler and removeEventHandler */ function getEventHandlerOptions(instance, eventName) { var handlerOptions = {}; var isTouchEvent = touchEvents.indexOf(eventName) !== -1; if (isTouchEvent && passiveEventSupport) { handlerOptions.passive = !instance.props.preventDefault; } return handlerOptions; } /** * This function generates the HOC function that you'll use * in order to impart onOutsideClick listening to an * arbitrary component. It gets called at the end of the * bootstrapping code to yield an instance of the * onClickOutsideHOC function defined inside setupHOC(). */ function onClickOutsideHOC(WrappedComponent, config) { var _class, _temp; var componentName = WrappedComponent.displayName || WrappedComponent.name || 'Component'; return _temp = _class = /*#__PURE__*/function (_Component) { _inheritsLoose$1(onClickOutside, _Component); function onClickOutside(props) { var _this; _this = _Component.call(this, props) || this; _this.__outsideClickHandler = function (event) { if (typeof _this.__clickOutsideHandlerProp === 'function') { _this.__clickOutsideHandlerProp(event); return; } var instance = _this.getInstance(); if (typeof instance.props.handleClickOutside === 'function') { instance.props.handleClickOutside(event); return; } if (typeof instance.handleClickOutside === 'function') { instance.handleClickOutside(event); return; } throw new Error("WrappedComponent: " + componentName + " lacks a handleClickOutside(event) function for processing outside click events."); }; _this.__getComponentNode = function () { var instance = _this.getInstance(); if (config && typeof config.setClickOutsideRef === 'function') { return config.setClickOutsideRef()(instance); } if (typeof instance.setClickOutsideRef === 'function') { return instance.setClickOutsideRef(); } return ReactDOM.findDOMNode(instance); }; _this.enableOnClickOutside = function () { if (typeof document === 'undefined' || enabledInstances[_this._uid]) { return; } if (typeof passiveEventSupport === 'undefined') { passiveEventSupport = testPassiveEventSupport(); } enabledInstances[_this._uid] = true; var events = _this.props.eventTypes; if (!events.forEach) { events = [events]; } handlersMap[_this._uid] = function (event) { if (_this.componentNode === null) return; if (_this.props.preventDefault) { event.preventDefault(); } if (_this.props.stopPropagation) { event.stopPropagation(); } if (_this.props.excludeScrollbar && clickedScrollbar(event)) return; var current = event.composed && event.composedPath && event.composedPath().shift() || event.target; if (findHighest(current, _this.componentNode, _this.props.outsideClickIgnoreClass) !== document) { return; } _this.__outsideClickHandler(event); }; events.forEach(function (eventName) { document.addEventListener(eventName, handlersMap[_this._uid], getEventHandlerOptions(_assertThisInitialized$1(_this), eventName)); }); }; _this.disableOnClickOutside = function () { delete enabledInstances[_this._uid]; var fn = handlersMap[_this._uid]; if (fn && typeof document !== 'undefined') { var events = _this.props.eventTypes; if (!events.forEach) { events = [events]; } events.forEach(function (eventName) { return document.removeEventListener(eventName, fn, getEventHandlerOptions(_assertThisInitialized$1(_this), eventName)); }); delete handlersMap[_this._uid]; } }; _this.getRef = function (ref) { return _this.instanceRef = ref; }; _this._uid = uid(); return _this; } /** * Access the WrappedComponent's instance. */ var _proto = onClickOutside.prototype; _proto.getInstance = function getInstance() { if (WrappedComponent.prototype && !WrappedComponent.prototype.isReactComponent) { return this; } var ref = this.instanceRef; return ref.getInstance ? ref.getInstance() : ref; }; /** * Add click listeners to the current document, * linked to this component's state. */ _proto.componentDidMount = function componentDidMount() { // If we are in an environment without a DOM such // as shallow rendering or snapshots then we exit // early to prevent any unhandled errors being thrown. if (typeof document === 'undefined' || !document.createElement) { return; } var instance = this.getInstance(); if (config && typeof config.handleClickOutside === 'function') { this.__clickOutsideHandlerProp = config.handleClickOutside(instance); if (typeof this.__clickOutsideHandlerProp !== 'function') { throw new Error("WrappedComponent: " + componentName + " lacks a function for processing outside click events specified by the handleClickOutside config option."); } } this.componentNode = this.__getComponentNode(); // return early so we dont initiate onClickOutside if (this.props.disableOnClickOutside) return; this.enableOnClickOutside(); }; _proto.componentDidUpdate = function componentDidUpdate() { this.componentNode = this.__getComponentNode(); } /** * Remove all document's event listeners for this component */; _proto.componentWillUnmount = function componentWillUnmount() { this.disableOnClickOutside(); } /** * Can be called to explicitly enable event listening * for clicks and touches outside of this element. */; /** * Pass-through render */ _proto.render = function render() { // eslint-disable-next-line no-unused-vars var _this$props = this.props; _this$props.excludeScrollbar; var props = _objectWithoutPropertiesLoose$1(_this$props, ["excludeScrollbar"]); if (WrappedComponent.prototype && WrappedComponent.prototype.isReactComponent) { props.ref = this.getRef; } else { props.wrappedRef = this.getRef; } props.disableOnClickOutside = this.disableOnClickOutside; props.enableOnClickOutside = this.enableOnClickOutside; return /*#__PURE__*/React.createElement(WrappedComponent, props); }; return onClickOutside; }(React.Component), _class.displayName = "OnClickOutside(" + componentName + ")", _class.defaultProps = { eventTypes: ['mousedown', 'touchstart'], excludeScrollbar: config && config.excludeScrollbar || false, outsideClickIgnoreClass: IGNORE_CLASS_NAME, preventDefault: false, stopPropagation: false }, _class.getClass = function () { return WrappedComponent.getClass ? WrappedComponent.getClass() : WrappedComponent; }, _temp; } var ManagerReferenceNodeContext = /*#__PURE__*/React__namespace.createContext(); var ManagerReferenceNodeSetterContext = /*#__PURE__*/React__namespace.createContext(); function Manager(_ref) { var children = _ref.children; var _React$useState = React__namespace.useState(null), referenceNode = _React$useState[0], setReferenceNode = _React$useState[1]; var hasUnmounted = React__namespace.useRef(false); React__namespace.useEffect(function () { return function () { hasUnmounted.current = true; }; }, []); var handleSetReferenceNode = React__namespace.useCallback(function (node) { if (!hasUnmounted.current) { setReferenceNode(node); } }, []); return /*#__PURE__*/React__namespace.createElement(ManagerReferenceNodeContext.Provider, { value: referenceNode }, /*#__PURE__*/React__namespace.createElement(ManagerReferenceNodeSetterContext.Provider, { value: handleSetReferenceNode }, children)); } /** * Takes an argument and if it's an array, returns the first item in the array, * otherwise returns the argument. Used for Preact compatibility. */ var unwrapArray = function unwrapArray(arg) { return Array.isArray(arg) ? arg[0] : arg; }; /** * Takes a maybe-undefined function and arbitrary args and invokes the function * only if it is defined. */ var safeInvoke = function safeInvoke(fn) { if (typeof fn === 'function') { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } return fn.apply(void 0, args); } }; /** * Sets a ref using either a ref callback or a ref object */ var setRef = function setRef(ref, node) { // if its a function call it if (typeof ref === 'function') { return safeInvoke(ref, node); } // otherwise we should treat it as a ref object else if (ref != null) { ref.current = node; } }; /** * Simple ponyfill for Object.fromEntries */ var fromEntries = function fromEntries(entries) { return entries.reduce(function (acc, _ref) { var key = _ref[0], value = _ref[1]; acc[key] = value; return acc; }, {}); }; /** * Small wrapper around `useLayoutEffect` to get rid of the warning on SSR envs */ var useIsomorphicLayoutEffect = typeof window !== 'undefined' && window.document && window.document.createElement ? React__namespace.useLayoutEffect : React__namespace.useEffect; var top = 'top'; var bottom = 'bottom'; var right = 'right'; var left = 'left'; var auto = 'auto'; var basePlacements = [top, bottom, right, left]; var start = 'start'; var end = 'end'; var clippingParents = 'clippingParents'; var viewport = 'viewport'; var popper = 'popper'; var reference = 'reference'; var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) { return acc.concat([placement + "-" + start, placement + "-" + end]); }, []); var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) { return acc.concat([placement, placement + "-" + start, placement + "-" + end]); }, []); // modifiers that need to read the DOM var beforeRead = 'beforeRead'; var read = 'read'; var afterRead = 'afterRead'; // pure-logic modifiers var beforeMain = 'beforeMain'; var main = 'main'; var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state) var beforeWrite = 'beforeWrite'; var write = 'write'; var afterWrite = 'afterWrite'; var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; function getNodeName$1(element) { return element ? (element.nodeName || '').toLowerCase() : null; } function getWindow$1(node) { if (node == null) { return window; } if (node.toString() !== '[object Window]') { var ownerDocument = node.ownerDocument; return ownerDocument ? ownerDocument.defaultView || window : window; } return node; } function isElement$1(node) { var OwnElement = getWindow$1(node).Element; return node instanceof OwnElement || node instanceof Element; } function isHTMLElement$1(node) { var OwnElement = getWindow$1(node).HTMLElement; return node instanceof OwnElement || node instanceof HTMLElement; } function isShadowRoot$1(node) { // IE 11 has no ShadowRoot if (typeof ShadowRoot === 'undefined') { return false; } var OwnElement = getWindow$1(node).ShadowRoot; return node instanceof OwnElement || node instanceof ShadowRoot; } // and applies them to the HTMLElements such as popper and arrow function applyStyles(_ref) { var state = _ref.state; Object.keys(state.elements).forEach(function (name) { var style = state.styles[name] || {}; var attributes = state.attributes[name] || {}; var element = state.elements[name]; // arrow is optional + virtual elements if (!isHTMLElement$1(element) || !getNodeName$1(element)) { return; } // Flow doesn't support to extend this property, but it's the most // effective way to apply styles to an HTMLElement // $FlowFixMe[cannot-write] Object.assign(element.style, style); Object.keys(attributes).forEach(function (name) { var value = attributes[name]; if (value === false) { element.removeAttribute(name); } else { element.setAttribute(name, value === true ? '' : value); } }); }); } function effect$2(_ref2) { var state = _ref2.state; var initialStyles = { popper: { position: state.options.strategy, left: '0', top: '0', margin: '0' }, arrow: { position: 'absolute' }, reference: {} }; Object.assign(state.elements.popper.style, initialStyles.popper); state.styles = initialStyles; if (state.elements.arrow) { Object.assign(state.elements.arrow.style, initialStyles.arrow); } return function () { Object.keys(state.elements).forEach(function (name) { var element = state.elements[name]; var attributes = state.attributes[name] || {}; var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them var style = styleProperties.reduce(function (style, property) { style[property] = ''; return style; }, {}); // arrow is optional + virtual elements if (!isHTMLElement$1(element) || !getNodeName$1(element)) { return; } Object.assign(element.style, style); Object.keys(attributes).forEach(function (attribute) { element.removeAttribute(attribute); }); }); }; } // eslint-disable-next-line import/no-unused-modules var applyStyles$1 = { name: 'applyStyles', enabled: true, phase: 'write', fn: applyStyles, effect: effect$2, requires: ['computeStyles'] }; function getBasePlacement(placement) { return placement.split('-')[0]; } var max = Math.max; var min = Math.min; var round$1 = Math.round; function getUAString$1() { var uaData = navigator.userAgentData; if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) { return uaData.brands.map(function (item) { return item.brand + "/" + item.version; }).join(' '); } return navigator.userAgent; } function isLayoutViewport() { return !/^((?!chrome|android).)*safari/i.test(getUAString$1()); } function getBoundingClientRect$1(element, includeScale, isFixedStrategy) { if (includeScale === void 0) { includeScale = false; } if (isFixedStrategy === void 0) { isFixedStrategy = false; } var clientRect = element.getBoundingClientRect(); var scaleX = 1; var scaleY = 1; if (includeScale && isHTMLElement$1(element)) { scaleX = element.offsetWidth > 0 ? round$1(clientRect.width) / element.offsetWidth || 1 : 1; scaleY = element.offsetHeight > 0 ? round$1(clientRect.height) / element.offsetHeight || 1 : 1; } var _ref = isElement$1(element) ? getWindow$1(element) : window, visualViewport = _ref.visualViewport; var addVisualOffsets = !isLayoutViewport() && isFixedStrategy; var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX; var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY; var width = clientRect.width / scaleX; var height = clientRect.height / scaleY; return { width: width, height: height, top: y, right: x + width, bottom: y + height, left: x, x: x, y: y }; } // means it doesn't take into account transforms. function getLayoutRect(element) { var clientRect = getBoundingClientRect$1(element); // Use the clientRect sizes if it's not been transformed. // Fixes https://github.com/popperjs/popper-core/issues/1223 var width = element.offsetWidth; var height = element.offsetHeight; if (Math.abs(clientRect.width - width) <= 1) { width = clientRect.width; } if (Math.abs(clientRect.height - height) <= 1) { height = clientRect.height; } return { x: element.offsetLeft, y: element.offsetTop, width: width, height: height }; } function contains(parent, child) { var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method if (parent.contains(child)) { return true; } // then fallback to custom implementation with Shadow DOM support else if (rootNode && isShadowRoot$1(rootNode)) { var next = child; do { if (next && parent.isSameNode(next)) { return true; } // $FlowFixMe[prop-missing]: need a better way to handle this... next = next.parentNode || next.host; } while (next); } // Give up, the result is false return false; } function getComputedStyle$2(element) { return getWindow$1(element).getComputedStyle(element); } function isTableElement(element) { return ['table', 'td', 'th'].indexOf(getNodeName$1(element)) >= 0; } function getDocumentElement$1(element) { // $FlowFixMe[incompatible-return]: assume body is always available return ((isElement$1(element) ? element.ownerDocument : // $FlowFixMe[prop-missing] element.document) || window.document).documentElement; } function getParentNode$1(element) { if (getNodeName$1(element) === 'html') { return element; } return ( // this is a quicker (but less type safe) way to save quite some bytes from the bundle // $FlowFixMe[incompatible-return] // $FlowFixMe[prop-missing] element.assignedSlot || // step into the shadow DOM of the parent of a slotted node element.parentNode || ( // DOM Element detected isShadowRoot$1(element) ? element.host : null) || // ShadowRoot detected // $FlowFixMe[incompatible-call]: HTMLElement is a Node getDocumentElement$1(element) // fallback ); } function getTrueOffsetParent(element) { if (!isHTMLElement$1(element) || // https://github.com/popperjs/popper-core/issues/837 getComputedStyle$2(element).position === 'fixed') { return null; } return element.offsetParent; } // `.offsetParent` reports `null` for fixed elements, while absolute elements // return the containing block function getContainingBlock(element) { var isFirefox = /firefox/i.test(getUAString$1()); var isIE = /Trident/i.test(getUAString$1()); if (isIE && isHTMLElement$1(element)) { // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport var elementCss = getComputedStyle$2(element); if (elementCss.position === 'fixed') { return null; } } var currentNode = getParentNode$1(element); if (isShadowRoot$1(currentNode)) { currentNode = currentNode.host; } while (isHTMLElement$1(currentNode) && ['html', 'body'].indexOf(getNodeName$1(currentNode)) < 0) { var css = getComputedStyle$2(currentNode); // This is non-exhaustive but covers the most common CSS properties that // create a containing block. // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') { return currentNode; } else { currentNode = currentNode.parentNode; } } return null; } // Gets the closest ancestor positioned element. Handles some edge cases, // such as table ancestors and cross browser bugs. function getOffsetParent(element) { var window = getWindow$1(element); var offsetParent = getTrueOffsetParent(element); while (offsetParent && isTableElement(offsetParent) && getComputedStyle$2(offsetParent).position === 'static') { offsetParent = getTrueOffsetParent(offsetParent); } if (offsetParent && (getNodeName$1(offsetParent) === 'html' || getNodeName$1(offsetParent) === 'body' && getComputedStyle$2(offsetParent).position === 'static')) { return window; } return offsetParent || getContainingBlock(element) || window; } function getMainAxisFromPlacement(placement) { return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y'; } function within(min$1, value, max$1) { return max(min$1, min(value, max$1)); } function withinMaxClamp(min, value, max) { var v = within(min, value, max); return v > max ? max : v; } function getFreshSideObject() { return { top: 0, right: 0, bottom: 0, left: 0 }; } function mergePaddingObject(paddingObject) { return Object.assign({}, getFreshSideObject(), paddingObject); } function expandToHashMap(value, keys) { return keys.reduce(function (hashMap, key) { hashMap[key] = value; return hashMap; }, {}); } var toPaddingObject = function toPaddingObject(padding, state) { padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, { placement: state.placement })) : padding; return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); }; function arrow$2(_ref) { var _state$modifiersData$; var state = _ref.state, name = _ref.name, options = _ref.options; var arrowElement = state.elements.arrow; var popperOffsets = state.modifiersData.popperOffsets; var basePlacement = getBasePlacement(state.placement); var axis = getMainAxisFromPlacement(basePlacement); var isVertical = [left, right].indexOf(basePlacement) >= 0; var len = isVertical ? 'height' : 'width'; if (!arrowElement || !popperOffsets) { return; } var paddingObject = toPaddingObject(options.padding, state); var arrowRect = getLayoutRect(arrowElement); var minProp = axis === 'y' ? top : left; var maxProp = axis === 'y' ? bottom : right; var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len]; var startDiff = popperOffsets[axis] - state.rects.reference[axis]; var arrowOffsetParent = getOffsetParent(arrowElement); var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is // outside of the popper bounds var min = paddingObject[minProp]; var max = clientSize - arrowRect[len] - paddingObject[maxProp]; var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; var offset = within(min, center, max); // Prevents breaking syntax highlighting... var axisProp = axis; state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$); } function effect$1(_ref2) { var state = _ref2.state, options = _ref2.options; var _options$element = options.element, arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element; if (arrowElement == null) { return; } // CSS selector if (typeof arrowElement === 'string') { arrowElement = state.elements.popper.querySelector(arrowElement); if (!arrowElement) { return; } } { if (!isHTMLElement$1(arrowElement)) { console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' ')); } } if (!contains(state.elements.popper, arrowElement)) { { console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', 'element.'].join(' ')); } return; } state.elements.arrow = arrowElement; } // eslint-disable-next-line import/no-unused-modules var arrow$3 = { name: 'arrow', enabled: true, phase: 'main', fn: arrow$2, effect: effect$1, requires: ['popperOffsets'], requiresIfExists: ['preventOverflow'] }; function getVariation(placement) { return placement.split('-')[1]; } var unsetSides = { top: 'auto', right: 'auto', bottom: 'auto', left: 'auto' }; // Round the offsets to the nearest suitable subpixel based on the DPR. // Zooming can change the DPR, but it seems to report a value that will // cleanly divide the values into the appropriate subpixels. function roundOffsetsByDPR(_ref, win) { var x = _ref.x, y = _ref.y; var dpr = win.devicePixelRatio || 1; return { x: round$1(x * dpr) / dpr || 0, y: round$1(y * dpr) / dpr || 0 }; } function mapToStyles(_ref2) { var _Object$assign2; var popper = _ref2.popper, popperRect = _ref2.popperRect, placement = _ref2.placement, variation = _ref2.variation, offsets = _ref2.offsets, position = _ref2.position, gpuAcceleration = _ref2.gpuAcceleration, adaptive = _ref2.adaptive, roundOffsets = _ref2.roundOffsets, isFixed = _ref2.isFixed; var _offsets$x = offsets.x, x = _offsets$x === void 0 ? 0 : _offsets$x, _offsets$y = offsets.y, y = _offsets$y === void 0 ? 0 : _offsets$y; var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({ x: x, y: y }) : { x: x, y: y }; x = _ref3.x; y = _ref3.y; var hasX = offsets.hasOwnProperty('x'); var hasY = offsets.hasOwnProperty('y'); var sideX = left; var sideY = top; var win = window; if (adaptive) { var offsetParent = getOffsetParent(popper); var heightProp = 'clientHeight'; var widthProp = 'clientWidth'; if (offsetParent === getWindow$1(popper)) { offsetParent = getDocumentElement$1(popper); if (getComputedStyle$2(offsetParent).position !== 'static' && position === 'absolute') { heightProp = 'scrollHeight'; widthProp = 'scrollWidth'; } } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it offsetParent = offsetParent; if (placement === top || (placement === left || placement === right) && variation === end) { sideY = bottom; var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing] offsetParent[heightProp]; y -= offsetY - popperRect.height; y *= gpuAcceleration ? 1 : -1; } if (placement === left || (placement === top || placement === bottom) && variation === end) { sideX = right; var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing] offsetParent[widthProp]; x -= offsetX - popperRect.width; x *= gpuAcceleration ? 1 : -1; } } var commonStyles = Object.assign({ position: position }, adaptive && unsetSides); var _ref4 = roundOffsets === true ? roundOffsetsByDPR({ x: x, y: y }, getWindow$1(popper)) : { x: x, y: y }; x = _ref4.x; y = _ref4.y; if (gpuAcceleration) { var _Object$assign; return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); } return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2)); } function computeStyles(_ref5) { var state = _ref5.state, options = _ref5.options; var _options$gpuAccelerat = options.gpuAcceleration, gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, _options$adaptive = options.adaptive, adaptive = _options$adaptive === void 0 ? true : _options$adaptive, _options$roundOffsets = options.roundOffsets, roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; { var transitionProperty = getComputedStyle$2(state.elements.popper).transitionProperty || ''; if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) { return transitionProperty.indexOf(property) >= 0; })) { console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: "transform", "top", "right", "bottom", "left".', '\n\n', 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\n\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' ')); } } var commonStyles = { placement: getBasePlacement(state.placement), variation: getVariation(state.placement), popper: state.elements.popper, popperRect: state.rects.popper, gpuAcceleration: gpuAcceleration, isFixed: state.options.strategy === 'fixed' }; if (state.modifiersData.popperOffsets != null) { state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { offsets: state.modifiersData.popperOffsets, position: state.options.strategy, adaptive: adaptive, roundOffsets: roundOffsets }))); } if (state.modifiersData.arrow != null) { state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { offsets: state.modifiersData.arrow, position: 'absolute', adaptive: false, roundOffsets: roundOffsets }))); } state.attributes.popper = Object.assign({}, state.attributes.popper, { 'data-popper-placement': state.placement }); } // eslint-disable-next-line import/no-unused-modules var computeStyles$1 = { name: 'computeStyles', enabled: true, phase: 'beforeWrite', fn: computeStyles, data: {} }; var passive = { passive: true }; function effect(_ref) { var state = _ref.state, instance = _ref.instance, options = _ref.options; var _options$scroll = options.scroll, scroll = _options$scroll === void 0 ? true : _options$scroll, _options$resize = options.resize, resize = _options$resize === void 0 ? true : _options$resize; var window = getWindow$1(state.elements.popper); var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); if (scroll) { scrollParents.forEach(function (scrollParent) { scrollParent.addEventListener('scroll', instance.update, passive); }); } if (resize) { window.addEventListener('resize', instance.update, passive); } return function () { if (scroll) { scrollParents.forEach(function (scrollParent) { scrollParent.removeEventListener('scroll', instance.update, passive); }); } if (resize) { window.removeEventListener('resize', instance.update, passive); } }; } // eslint-disable-next-line import/no-unused-modules var eventListeners = { name: 'eventListeners', enabled: true, phase: 'write', fn: function fn() {}, effect: effect, data: {} }; var hash$2 = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; function getOppositePlacement(placement) { return placement.replace(/left|right|bottom|top/g, function (matched) { return hash$2[matched]; }); } var hash$1 = { start: 'end', end: 'start' }; function getOppositeVariationPlacement(placement) { return placement.replace(/start|end/g, function (matched) { return hash$1[matched]; }); } function getWindowScroll(node) { var win = getWindow$1(node); var scrollLeft = win.pageXOffset; var scrollTop = win.pageYOffset; return { scrollLeft: scrollLeft, scrollTop: scrollTop }; } function getWindowScrollBarX(element) { // If <html> has a CSS width greater than the viewport, then this will be // incorrect for RTL. // Popper 1 is broken in this case and never had a bug report so let's assume // it's not an issue. I don't think anyone ever specifies width on <html> // anyway. // Browsers where the left scrollbar doesn't cause an issue report `0` for // this (e.g. Edge 2019, IE11, Safari) return getBoundingClientRect$1(getDocumentElement$1(element)).left + getWindowScroll(element).scrollLeft; } function getViewportRect(element, strategy) { var win = getWindow$1(element); var html = getDocumentElement$1(element); var visualViewport = win.visualViewport; var width = html.clientWidth; var height = html.clientHeight; var x = 0; var y = 0; if (visualViewport) { width = visualViewport.width; height = visualViewport.height; var layoutViewport = isLayoutViewport(); if (layoutViewport || !layoutViewport && strategy === 'fixed') { x = visualViewport.offsetLeft; y = visualViewport.offsetTop; } } return { width: width, height: height, x: x + getWindowScrollBarX(element), y: y }; } // of the `<html>` and `<body>` rect bounds if horizontally scrollable function getDocumentRect(element) { var _element$ownerDocumen; var html = getDocumentElement$1(element); var winScroll = getWindowScroll(element); var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); var x = -winScroll.scrollLeft + getWindowScrollBarX(element); var y = -winScroll.scrollTop; if (getComputedStyle$2(body || html).direction === 'rtl') { x += max(html.clientWidth, body ? body.clientWidth : 0) - width; } return { width: width, height: height, x: x, y: y }; } function isScrollParent(element) { // Firefox wants us to check `-x` and `-y` variations as well var _getComputedStyle = getComputedStyle$2(element), overflow = _getComputedStyle.overflow, overflowX = _getComputedStyle.overflowX, overflowY = _getComputedStyle.overflowY; return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); } function getScrollParent$1(node) { if (['html', 'body', '#document'].indexOf(getNodeName$1(node)) >= 0) { // $FlowFixMe[incompatible-return]: assume body is always available return node.ownerDocument.body; } if (isHTMLElement$1(node) && isScrollParent(node)) { return node; } return getScrollParent$1(getParentNode$1(node)); } /* given a DOM element, return the list of all scroll parents, up the list of ancesors until we get to the top window object. This list is what we attach scroll listeners to, because if any of these parent elements scroll, we'll need to re-calculate the reference element's position. */ function listScrollParents(element, list) { var _element$ownerDocumen; if (list === void 0) { list = []; } var scrollParent = getScrollParent$1(element); var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); var win = getWindow$1(scrollParent); var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent; var updatedList = list.concat(target); return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here updatedList.concat(listScrollParents(getParentNode$1(target))); } function rectToClientRect$1(rect) { return Object.assign({}, rect, { left: rect.x, top: rect.y, right: rect.x + rect.width, bottom: rect.y + rect.height }); } function getInnerBoundingClientRect(element, strategy) { var rect = getBoundingClientRect$1(element, false, strategy === 'fixed'); rect.top = rect.top + element.clientTop; rect.left = rect.left + element.clientLeft; rect.bottom = rect.top + element.clientHeight; rect.right = rect.left + element.clientWidth; rect.width = element.clientWidth; rect.height = element.clientHeight; rect.x = rect.left; rect.y = rect.top; return rect; } function getClientRectFromMixedType(element, clippingParent, strategy) { return clippingParent === viewport ? rectToClientRect$1(getViewportRect(element, strategy)) : isElement$1(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect$1(getDocumentRect(getDocumentElement$1(element))); } // A "clipping parent" is an overflowable container with the characteristic of // clipping (or hiding) overflowing elements with a position different from // `initial` function getClippingParents(element) { var clippingParents = listScrollParents(getParentNode$1(element)); var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$2(element).position) >= 0; var clipperElement = canEscapeClipping && isHTMLElement$1(element) ? getOffsetParent(element) : element; if (!isElement$1(clipperElement)) { return []; } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414 return clippingParents.filter(function (clippingParent) { return isElement$1(clippingParent) && contains(clippingParent, clipperElement) && getNodeName$1(clippingParent) !== 'body'; }); } // Gets the maximum area that the element is visible in due to any number of // clipping parents function getClippingRect(element, boundary, rootBoundary, strategy) { var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary); var clippingParents = [].concat(mainClippingParents, [rootBoundary]); var firstClippingParent = clippingParents[0]; var clippingRect = clippingParents.reduce(function (accRect, clippingParent) { var rect = getClientRectFromMixedType(element, clippingParent, strategy); accRect.top = max(rect.top, accRect.top); accRect.right = min(rect.right, accRect.right); accRect.bottom = min(rect.bottom, accRect.bottom); accRect.left = max(rect.left, accRect.left); return accRect; }, getClientRectFromMixedType(element, firstClippingParent, strategy)); clippingRect.width = clippingRect.right - clippingRect.left; clippingRect.height = clippingRect.bottom - clippingRect.top; clippingRect.x = clippingRect.left; clippingRect.y = clippingRect.top; return clippingRect; } function computeOffsets(_ref) { var reference = _ref.reference, element = _ref.element, placement = _ref.placement; var basePlacement = placement ? getBasePlacement(placement) : null; var variation = placement ? getVariation(placement) : null; var commonX = reference.x + reference.width / 2 - element.width / 2; var commonY = reference.y + reference.height / 2 - element.height / 2; var offsets; switch (basePlacement) { case top: offsets = { x: commonX, y: reference.y - element.height }; break; case bottom: offsets = { x: commonX, y: reference.y + reference.height }; break; case right: offsets = { x: reference.x + reference.width, y: commonY }; break; case left: offsets = { x: reference.x - element.width, y: commonY }; break; default: offsets = { x: reference.x, y: reference.y }; } var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null; if (mainAxis != null) { var len = mainAxis === 'y' ? 'height' : 'width'; switch (variation) { case start: offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2); break; case end: offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2); break; } } return offsets; } function detectOverflow(state, options) { if (options === void 0) { options = {}; } var _options = options, _options$placement = _options.placement, placement = _options$placement === void 0 ? state.placement : _options$placement, _options$strategy = _options.strategy, strategy = _options$strategy === void 0 ? state.strategy : _options$strategy, _options$boundary = _options.boundary, boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, _options$rootBoundary = _options.rootBoundary, rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, _options$elementConte = _options.elementContext, elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, _options$altBoundary = _options.altBoundary, altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, _options$padding = _options.padding, padding = _options$padding === void 0 ? 0 : _options$padding; var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); var altContext = elementContext === popper ? reference : popper; var popperRect = state.rects.popper; var element = state.elements[altBoundary ? altContext : elementContext]; var clippingClientRect = getClippingRect(isElement$1(element) ? element : element.contextElement || getDocumentElement$1(state.elements.popper), boundary, rootBoundary, strategy); var referenceClientRect = getBoundingClientRect$1(state.elements.reference); var popperOffsets = computeOffsets({ reference: referenceClientRect, element: popperRect, strategy: 'absolute', placement: placement }); var popperClientRect = rectToClientRect$1(Object.assign({}, popperRect, popperOffsets)); var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect // 0 or negative = within the clipping rect var overflowOffsets = { top: clippingClientRect.top - elementClientRect.top + paddingObject.top, bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, left: clippingClientRect.left - elementClientRect.left + paddingObject.left, right: elementClientRect.right - clippingClientRect.right + paddingObject.right }; var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element if (elementContext === popper && offsetData) { var offset = offsetData[placement]; Object.keys(overflowOffsets).forEach(function (key) { var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1; var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x'; overflowOffsets[key] += offset[axis] * multiply; }); } return overflowOffsets; } function computeAutoPlacement(state, options) { if (options === void 0) { options = {}; } var _options = options, placement = _options.placement, boundary = _options.boundary, rootBoundary = _options.rootBoundary, padding = _options.padding, flipVariations = _options.flipVariations, _options$allowedAutoP = _options.allowedAutoPlacements, allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP; var variation = getVariation(placement); var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) { return getVariation(placement) === variation; }) : basePlacements; var allowedPlacements = placements$1.filter(function (placement) { return allowedAutoPlacements.indexOf(placement) >= 0; }); if (allowedPlacements.length === 0) { allowedPlacements = placements$1; { console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(' ')); } } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions... var overflows = allowedPlacements.reduce(function (acc, placement) { acc[placement] = detectOverflow(state, { placement: placement, boundary: boundary, rootBoundary: rootBoundary, padding: padding })[getBasePlacement(placement)]; return acc; }, {}); return Object.keys(overflows).sort(function (a, b) { return overflows[a] - overflows[b]; }); } function getExpandedFallbackPlacements(placement) { if (getBasePlacement(placement) === auto) { return []; } var oppositePlacement = getOppositePlacement(placement); return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)]; } function flip(_ref) { var state = _ref.state, options = _ref.options, name = _ref.name; if (state.modifiersData[name]._skip) { return; } var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, specifiedFallbackPlacements = options.fallbackPlacements, padding = options.padding, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, _options$flipVariatio = options.flipVariations, flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, allowedAutoPlacements = options.allowedAutoPlacements; var preferredPlacement = state.options.placement; var basePlacement = getBasePlacement(preferredPlacement); var isBasePlacement = basePlacement === preferredPlacement; var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) { return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, { placement: placement, boundary: boundary, rootBoundary: rootBoundary, padding: padding, flipVariations: flipVariations, allowedAutoPlacements: allowedAutoPlacements }) : placement); }, []); var referenceRect = state.rects.reference; var popperRect = state.rects.popper; var checksMap = new Map(); var makeFallbackChecks = true; var firstFittingPlacement = placements[0]; for (var i = 0; i < placements.length; i++) { var placement = placements[i]; var _basePlacement = getBasePlacement(placement); var isStartVariation = getVariation(placement) === start; var isVertical = [top, bottom].indexOf(_basePlacement) >= 0; var len = isVertical ? 'width' : 'height'; var overflow = detectOverflow(state, { placement: placement, boundary: boundary, rootBoundary: rootBoundary, altBoundary: altBoundary, padding: padding }); var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top; if (referenceRect[len] > popperRect[len]) { mainVariationSide = getOppositePlacement(mainVariationSide); } var altVariationSide = getOppositePlacement(mainVariationSide); var checks = []; if (checkMainAxis) { checks.push(overflow[_basePlacement] <= 0); } if (checkAltAxis) { checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); } if (checks.every(function (check) { return check; })) { firstFittingPlacement = placement; makeFallbackChecks = false; break; } checksMap.set(placement, checks); } if (makeFallbackChecks) { // `2` may be desired in some cases – research later var numberOfChecks = flipVariations ? 3 : 1; var _loop = function _loop(_i) { var fittingPlacement = placements.find(function (placement) { var checks = checksMap.get(placement); if (checks) { return checks.slice(0, _i).every(function (check) { return check; }); } }); if (fittingPlacement) { firstFittingPlacement = fittingPlacement; return "break"; } }; for (var _i = numberOfChecks; _i > 0; _i--) { var _ret = _loop(_i); if (_ret === "break") break; } } if (state.placement !== firstFittingPlacement) { state.modifiersData[name]._skip = true; state.placement = firstFittingPlacement; state.reset = true; } } // eslint-disable-next-line import/no-unused-modules var flip$1 = { name: 'flip', enabled: true, phase: 'main', fn: flip, requiresIfExists: ['offset'], data: { _skip: false } }; function getSideOffsets(overflow, rect, preventedOffsets) { if (preventedOffsets === void 0) { preventedOffsets = { x: 0, y: 0 }; } return { top: overflow.top - rect.height - preventedOffsets.y, right: overflow.right - rect.width + preventedOffsets.x, bottom: overflow.bottom - rect.height + preventedOffsets.y, left: overflow.left - rect.width - preventedOffsets.x }; } function isAnySideFullyClipped(overflow) { return [top, right, bottom, left].some(function (side) { return overflow[side] >= 0; }); } function hide(_ref) { var state = _ref.state, name = _ref.name; var referenceRect = state.rects.reference; var popperRect = state.rects.popper; var preventedOffsets = state.modifiersData.preventOverflow; var referenceOverflow = detectOverflow(state, { elementContext: 'reference' }); var popperAltOverflow = detectOverflow(state, { altBoundary: true }); var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); state.modifiersData[name] = { referenceClippingOffsets: referenceClippingOffsets, popperEscapeOffsets: popperEscapeOffsets, isReferenceHidden: isReferenceHidden, hasPopperEscaped: hasPopperEscaped }; state.attributes.popper = Object.assign({}, state.attributes.popper, { 'data-popper-reference-hidden': isReferenceHidden, 'data-popper-escaped': hasPopperEscaped }); } // eslint-disable-next-line import/no-unused-modules var hide$1 = { name: 'hide', enabled: true, phase: 'main', requiresIfExists: ['preventOverflow'], fn: hide }; function distanceAndSkiddingToXY(placement, rects, offset) { var basePlacement = getBasePlacement(placement); var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, { placement: placement })) : offset, skidding = _ref[0], distance = _ref[1]; skidding = skidding || 0; distance = (distance || 0) * invertDistance; return [left, right].indexOf(basePlacement) >= 0 ? { x: distance, y: skidding } : { x: skidding, y: distance }; } function offset(_ref2) { var state = _ref2.state, options = _ref2.options, name = _ref2.name; var _options$offset = options.offset, offset = _options$offset === void 0 ? [0, 0] : _options$offset; var data = placements.reduce(function (acc, placement) { acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset); return acc; }, {}); var _data$state$placement = data[state.placement], x = _data$state$placement.x, y = _data$state$placement.y; if (state.modifiersData.popperOffsets != null) { state.modifiersData.popperOffsets.x += x; state.modifiersData.popperOffsets.y += y; } state.modifiersData[name] = data; } // eslint-disable-next-line import/no-unused-modules var offset$1 = { name: 'offset', enabled: true, phase: 'main', requires: ['popperOffsets'], fn: offset }; function popperOffsets(_ref) { var state = _ref.state, name = _ref.name; // Offsets are the actual position the popper needs to have to be // properly positioned near its reference element // This is the most basic placement, and will be adjusted by // the modifiers in the next step state.modifiersData[name] = computeOffsets({ reference: state.rects.reference, element: state.rects.popper, strategy: 'absolute', placement: state.placement }); } // eslint-disable-next-line import/no-unused-modules var popperOffsets$1 = { name: 'popperOffsets', enabled: true, phase: 'read', fn: popperOffsets, data: {} }; function getAltAxis(axis) { return axis === 'x' ? 'y' : 'x'; } function preventOverflow(_ref) { var state = _ref.state, options = _ref.options, name = _ref.name; var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, padding = options.padding, _options$tether = options.tether, tether = _options$tether === void 0 ? true : _options$tether, _options$tetherOffset = options.tetherOffset, tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; var overflow = detectOverflow(state, { boundary: boundary, rootBoundary: rootBoundary, padding: padding, altBoundary: altBoundary }); var basePlacement = getBasePlacement(state.placement); var variation = getVariation(state.placement); var isBasePlacement = !variation; var mainAxis = getMainAxisFromPlacement(basePlacement); var altAxis = getAltAxis(mainAxis); var popperOffsets = state.modifiersData.popperOffsets; var referenceRect = state.rects.reference; var popperRect = state.rects.popper; var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, { placement: state.placement })) : tetherOffset; var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? { mainAxis: tetherOffsetValue, altAxis: tetherOffsetValue } : Object.assign({ mainAxis: 0, altAxis: 0 }, tetherOffsetValue); var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null; var data = { x: 0, y: 0 }; if (!popperOffsets) { return; } if (checkMainAxis) { var _offsetModifierState$; var mainSide = mainAxis === 'y' ? top : left; var altSide = mainAxis === 'y' ? bottom : right; var len = mainAxis === 'y' ? 'height' : 'width'; var offset = popperOffsets[mainAxis]; var min$1 = offset + overflow[mainSide]; var max$1 = offset - overflow[altSide]; var additive = tether ? -popperRect[len] / 2 : 0; var minLen = variation === start ? referenceRect[len] : popperRect[len]; var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go // outside the reference bounds var arrowElement = state.elements.arrow; var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : { width: 0, height: 0 }; var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject(); var arrowPaddingMin = arrowPaddingObject[mainSide]; var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want // to include its full size in the calculation. If the reference is small // and near the edge of a boundary, the popper can overflow even if the // reference is not overflowing as well (e.g. virtual elements with no // width or height) var arrowLen = within(0, referenceRect[len], arrowRect[len]); var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis; var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis; var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow); var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0; var tetherMin = offset + minOffset - offsetModifierValue - clientOffset; var tetherMax = offset + maxOffset - offsetModifierValue; var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1); popperOffsets[mainAxis] = preventedOffset; data[mainAxis] = preventedOffset - offset; } if (checkAltAxis) { var _offsetModifierState$2; var _mainSide = mainAxis === 'x' ? top : left; var _altSide = mainAxis === 'x' ? bottom : right; var _offset = popperOffsets[altAxis]; var _len = altAxis === 'y' ? 'height' : 'width'; var _min = _offset + overflow[_mainSide]; var _max = _offset - overflow[_altSide]; var isOriginSide = [top, left].indexOf(basePlacement) !== -1; var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0; var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis; var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max; var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max); popperOffsets[altAxis] = _preventedOffset; data[altAxis] = _preventedOffset - _offset; } state.modifiersData[name] = data; } // eslint-disable-next-line import/no-unused-modules var preventOverflow$1 = { name: 'preventOverflow', enabled: true, phase: 'main', fn: preventOverflow, requiresIfExists: ['offset'] }; function getHTMLElementScroll(element) { return { scrollLeft: element.scrollLeft, scrollTop: element.scrollTop }; } function getNodeScroll(node) { if (node === getWindow$1(node) || !isHTMLElement$1(node)) { return getWindowScroll(node); } else { return getHTMLElementScroll(node); } } function isElementScaled(element) { var rect = element.getBoundingClientRect(); var scaleX = round$1(rect.width) / element.offsetWidth || 1; var scaleY = round$1(rect.height) / element.offsetHeight || 1; return scaleX !== 1 || scaleY !== 1; } // Returns the composite rect of an element relative to its offsetParent. // Composite means it takes into account transforms as well as layout. function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { if (isFixed === void 0) { isFixed = false; } var isOffsetParentAnElement = isHTMLElement$1(offsetParent); var offsetParentIsScaled = isHTMLElement$1(offsetParent) && isElementScaled(offsetParent); var documentElement = getDocumentElement$1(offsetParent); var rect = getBoundingClientRect$1(elementOrVirtualElement, offsetParentIsScaled, isFixed); var scroll = { scrollLeft: 0, scrollTop: 0 }; var offsets = { x: 0, y: 0 }; if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { if (getNodeName$1(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078 isScrollParent(documentElement)) { scroll = getNodeScroll(offsetParent); } if (isHTMLElement$1(offsetParent)) { offsets = getBoundingClientRect$1(offsetParent, true); offsets.x += offsetParent.clientLeft; offsets.y += offsetParent.clientTop; } else if (documentElement) { offsets.x = getWindowScrollBarX(documentElement); } } return { x: rect.left + scroll.scrollLeft - offsets.x, y: rect.top + scroll.scrollTop - offsets.y, width: rect.width, height: rect.height }; } function order(modifiers) { var map = new Map(); var visited = new Set(); var result = []; modifiers.forEach(function (modifier) { map.set(modifier.name, modifier); }); // On visiting object, check for its dependencies and visit them recursively function sort(modifier) { visited.add(modifier.name); var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); requires.forEach(function (dep) { if (!visited.has(dep)) { var depModifier = map.get(dep); if (depModifier) { sort(depModifier); } } }); result.push(modifier); } modifiers.forEach(function (modifier) { if (!visited.has(modifier.name)) { // check for visited object sort(modifier); } }); return result; } function orderModifiers(modifiers) { // order based on dependencies var orderedModifiers = order(modifiers); // order based on phase return modifierPhases.reduce(function (acc, phase) { return acc.concat(orderedModifiers.filter(function (modifier) { return modifier.phase === phase; })); }, []); } function debounce(fn) { var pending; return function () { if (!pending) { pending = new Promise(function (resolve) { Promise.resolve().then(function () { pending = undefined; resolve(fn()); }); }); } return pending; }; } function format$1(str) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } return [].concat(args).reduce(function (p, c) { return p.replace(/%s/, c); }, str); } var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s'; var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available'; var VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options']; function validateModifiers(modifiers) { modifiers.forEach(function (modifier) { [].concat(Object.keys(modifier), VALID_PROPERTIES) // IE11-compatible replacement for `new Set(iterable)` .filter(function (value, index, self) { return self.indexOf(value) === index; }).forEach(function (key) { switch (key) { case 'name': if (typeof modifier.name !== 'string') { console.error(format$1(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', "\"" + String(modifier.name) + "\"")); } break; case 'enabled': if (typeof modifier.enabled !== 'boolean') { console.error(format$1(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', "\"" + String(modifier.enabled) + "\"")); } break; case 'phase': if (modifierPhases.indexOf(modifier.phase) < 0) { console.error(format$1(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(', '), "\"" + String(modifier.phase) + "\"")); } break; case 'fn': if (typeof modifier.fn !== 'function') { console.error(format$1(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', "\"" + String(modifier.fn) + "\"")); } break; case 'effect': if (modifier.effect != null && typeof modifier.effect !== 'function') { console.error(format$1(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', "\"" + String(modifier.fn) + "\"")); } break; case 'requires': if (modifier.requires != null && !Array.isArray(modifier.requires)) { console.error(format$1(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', "\"" + String(modifier.requires) + "\"")); } break; case 'requiresIfExists': if (!Array.isArray(modifier.requiresIfExists)) { console.error(format$1(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', "\"" + String(modifier.requiresIfExists) + "\"")); } break; case 'options': case 'data': break; default: console.error("PopperJS: an invalid property has been provided to the \"" + modifier.name + "\" modifier, valid properties are " + VALID_PROPERTIES.map(function (s) { return "\"" + s + "\""; }).join(', ') + "; but \"" + key + "\" was provided."); } modifier.requires && modifier.requires.forEach(function (requirement) { if (modifiers.find(function (mod) { return mod.name === requirement; }) == null) { console.error(format$1(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement)); } }); }); }); } function uniqueBy(arr, fn) { var identifiers = new Set(); return arr.filter(function (item) { var identifier = fn(item); if (!identifiers.has(identifier)) { identifiers.add(identifier); return true; } }); } function mergeByName(modifiers) { var merged = modifiers.reduce(function (merged, current) { var existing = merged[current.name]; merged[current.name] = existing ? Object.assign({}, existing, current, { options: Object.assign({}, existing.options, current.options), data: Object.assign({}, existing.data, current.data) }) : current; return merged; }, {}); // IE11 does not support Object.values return Object.keys(merged).map(function (key) { return merged[key]; }); } var INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.'; var INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.'; var DEFAULT_OPTIONS = { placement: 'bottom', modifiers: [], strategy: 'absolute' }; function areValidElements() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return !args.some(function (element) { return !(element && typeof element.getBoundingClientRect === 'function'); }); } function popperGenerator(generatorOptions) { if (generatorOptions === void 0) { generatorOptions = {}; } var _generatorOptions = generatorOptions, _generatorOptions$def = _generatorOptions.defaultModifiers, defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, _generatorOptions$def2 = _generatorOptions.defaultOptions, defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; return function createPopper(reference, popper, options) { if (options === void 0) { options = defaultOptions; } var state = { placement: 'bottom', orderedModifiers: [], options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), modifiersData: {}, elements: { reference: reference, popper: popper }, attributes: {}, styles: {} }; var effectCleanupFns = []; var isDestroyed = false; var instance = { state: state, setOptions: function setOptions(setOptionsAction) { var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction; cleanupModifierEffects(); state.options = Object.assign({}, defaultOptions, state.options, options); state.scrollParents = { reference: isElement$1(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [], popper: listScrollParents(popper) }; // Orders the modifiers based on their dependencies and `phase` // properties var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers state.orderedModifiers = orderedModifiers.filter(function (m) { return m.enabled; }); // Validate the provided modifiers so that the consumer will get warned // if one of the modifiers is invalid for any reason { var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) { var name = _ref.name; return name; }); validateModifiers(modifiers); if (getBasePlacement(state.options.placement) === auto) { var flipModifier = state.orderedModifiers.find(function (_ref2) { var name = _ref2.name; return name === 'flip'; }); if (!flipModifier) { console.error(['Popper: "auto" placements require the "flip" modifier be', 'present and enabled to work.'].join(' ')); } } var _getComputedStyle = getComputedStyle$2(popper), marginTop = _getComputedStyle.marginTop, marginRight = _getComputedStyle.marginRight, marginBottom = _getComputedStyle.marginBottom, marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can // cause bugs with positioning, so we'll warn the consumer if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) { return parseFloat(margin); })) { console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' ')); } } runModifierEffects(); return instance.update(); }, // Sync update – it will always be executed, even if not necessary. This // is useful for low frequency updates where sync behavior simplifies the // logic. // For high frequency updates (e.g. `resize` and `scroll` events), always // prefer the async Popper#update method forceUpdate: function forceUpdate() { if (isDestroyed) { return; } var _state$elements = state.elements, reference = _state$elements.reference, popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements // anymore if (!areValidElements(reference, popper)) { { console.error(INVALID_ELEMENT_ERROR); } return; } // Store the reference and popper rects to be read by modifiers state.rects = { reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'), popper: getLayoutRect(popper) }; // Modifiers have the ability to reset the current update cycle. The // most common use case for this is the `flip` modifier changing the // placement, which then needs to re-run all the modifiers, because the // logic was previously ran for the previous placement and is therefore // stale/incorrect state.reset = false; state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier // is filled with the initial data specified by the modifier. This means // it doesn't persist and is fresh on each update. // To ensure persistent data, use `${name}#persistent` state.orderedModifiers.forEach(function (modifier) { return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); }); var __debug_loops__ = 0; for (var index = 0; index < state.orderedModifiers.length; index++) { { __debug_loops__ += 1; if (__debug_loops__ > 100) { console.error(INFINITE_LOOP_ERROR); break; } } if (state.reset === true) { state.reset = false; index = -1; continue; } var _state$orderedModifie = state.orderedModifiers[index], fn = _state$orderedModifie.fn, _state$orderedModifie2 = _state$orderedModifie.options, _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, name = _state$orderedModifie.name; if (typeof fn === 'function') { state = fn({ state: state, options: _options, name: name, instance: instance }) || state; } } }, // Async and optimistically optimized update – it will not be executed if // not necessary (debounced to run at most once-per-tick) update: debounce(function () { return new Promise(function (resolve) { instance.forceUpdate(); resolve(state); }); }), destroy: function destroy() { cleanupModifierEffects(); isDestroyed = true; } }; if (!areValidElements(reference, popper)) { { console.error(INVALID_ELEMENT_ERROR); } return instance; } instance.setOptions(options).then(function (state) { if (!isDestroyed && options.onFirstUpdate) { options.onFirstUpdate(state); } }); // Modifiers have the ability to execute arbitrary code before the first // update cycle runs. They will be executed in the same order as the update // cycle. This is useful when a modifier adds some persistent data that // other modifiers need to use, but the modifier is run after the dependent // one. function runModifierEffects() { state.orderedModifiers.forEach(function (_ref3) { var name = _ref3.name, _ref3$options = _ref3.options, options = _ref3$options === void 0 ? {} : _ref3$options, effect = _ref3.effect; if (typeof effect === 'function') { var cleanupFn = effect({ state: state, name: name, instance: instance, options: options }); var noopFn = function noopFn() {}; effectCleanupFns.push(cleanupFn || noopFn); } }); } function cleanupModifierEffects() { effectCleanupFns.forEach(function (fn) { return fn(); }); effectCleanupFns = []; } return instance; }; } var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$3, hide$1]; var createPopper = /*#__PURE__*/popperGenerator({ defaultModifiers: defaultModifiers }); // eslint-disable-next-line import/no-unused-modules /* global Map:readonly, Set:readonly, ArrayBuffer:readonly */ var hasElementType = typeof Element !== 'undefined'; var hasMap = typeof Map === 'function'; var hasSet = typeof Set === 'function'; var hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView; // Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js function equal(a, b) { // START: fast-deep-equal es6/index.js 3.1.3 if (a === b) return true; if (a && b && typeof a == 'object' && typeof b == 'object') { if (a.constructor !== b.constructor) return false; var length, i, keys; if (Array.isArray(a)) { length = a.length; if (length != b.length) return false; for (i = length; i-- !== 0;) if (!equal(a[i], b[i])) return false; return true; } // START: Modifications: // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code // to co-exist with es5. // 2. Replace `for of` with es5 compliant iteration using `for`. // Basically, take: // // ```js // for (i of a.entries()) // if (!b.has(i[0])) return false; // ``` // // ... and convert to: // // ```js // it = a.entries(); // while (!(i = it.next()).done) // if (!b.has(i.value[0])) return false; // ``` // // **Note**: `i` access switches to `i.value`. var it; if (hasMap && a instanceof Map && b instanceof Map) { if (a.size !== b.size) return false; it = a.entries(); while (!(i = it.next()).done) if (!b.has(i.value[0])) return false; it = a.entries(); while (!(i = it.next()).done) if (!equal(i.value[1], b.get(i.value[0]))) return false; return true; } if (hasSet && a instanceof Set && b instanceof Set) { if (a.size !== b.size) return false; it = a.entries(); while (!(i = it.next()).done) if (!b.has(i.value[0])) return false; return true; } // END: Modifications if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) { length = a.length; if (length != b.length) return false; for (i = length; i-- !== 0;) if (a[i] !== b[i]) return false; return true; } if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags; // START: Modifications: // Apply guards for `Object.create(null)` handling. See: // - https://github.com/FormidableLabs/react-fast-compare/issues/64 // - https://github.com/epoberezkin/fast-deep-equal/issues/49 if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf(); if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString(); // END: Modifications keys = Object.keys(a); length = keys.length; if (length !== Object.keys(b).length) return false; for (i = length; i-- !== 0;) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; // END: fast-deep-equal // START: react-fast-compare // custom handling for DOM elements if (hasElementType && a instanceof Element) return false; // custom handling for React/Preact for (i = length; i-- !== 0;) { if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) { // React-specific: avoid traversing React elements' _owner // Preact-specific: avoid traversing Preact elements' __v and __o // __v = $_original / $_vnode // __o = $_owner // These properties contain circular references and are not needed when // comparing the actual elements (and not their owners) // .$$typeof and ._store on just reasonable markers of elements continue; } // all other properties should be traversed as usual if (!equal(a[keys[i]], b[keys[i]])) return false; } // END: react-fast-compare // START: fast-deep-equal return true; } return a !== a && b !== b; } // end fast-deep-equal var reactFastCompare = function isEqual(a, b) { try { return equal(a, b); } catch (error) { if ((error.message || '').match(/stack|recursion/i)) { // warn on circular references, don't crash // browsers give this different errors name and messages: // chrome/safari: "RangeError", "Maximum call stack size exceeded" // firefox: "InternalError", too much recursion" // edge: "Error", "Out of stack space" console.warn('react-fast-compare cannot handle circular refs'); return false; } // some other error. we should definitely know about these throw error; } }; var isEqual$1 = /*@__PURE__*/getDefaultExportFromCjs(reactFastCompare); var EMPTY_MODIFIERS$1 = []; var usePopper = function usePopper(referenceElement, popperElement, options) { if (options === void 0) { options = {}; } var prevOptions = React__namespace.useRef(null); var optionsWithDefaults = { onFirstUpdate: options.onFirstUpdate, placement: options.placement || 'bottom', strategy: options.strategy || 'absolute', modifiers: options.modifiers || EMPTY_MODIFIERS$1 }; var _React$useState = React__namespace.useState({ styles: { popper: { position: optionsWithDefaults.strategy, left: '0', top: '0' }, arrow: { position: 'absolute' } }, attributes: {} }), state = _React$useState[0], setState = _React$useState[1]; var updateStateModifier = React__namespace.useMemo(function () { return { name: 'updateState', enabled: true, phase: 'write', fn: function fn(_ref) { var state = _ref.state; var elements = Object.keys(state.elements); ReactDOM__namespace.flushSync(function () { setState({ styles: fromEntries(elements.map(function (element) { return [element, state.styles[element] || {}]; })), attributes: fromEntries(elements.map(function (element) { return [element, state.attributes[element]]; })) }); }); }, requires: ['computeStyles'] }; }, []); var popperOptions = React__namespace.useMemo(function () { var newOptions = { onFirstUpdate: optionsWithDefaults.onFirstUpdate, placement: optionsWithDefaults.placement, strategy: optionsWithDefaults.strategy, modifiers: [].concat(optionsWithDefaults.modifiers, [updateStateModifier, { name: 'applyStyles', enabled: false }]) }; if (isEqual$1(prevOptions.current, newOptions)) { return prevOptions.current || newOptions; } else { prevOptions.current = newOptions; return newOptions; } }, [optionsWithDefaults.onFirstUpdate, optionsWithDefaults.placement, optionsWithDefaults.strategy, optionsWithDefaults.modifiers, updateStateModifier]); var popperInstanceRef = React__namespace.useRef(); useIsomorphicLayoutEffect(function () { if (popperInstanceRef.current) { popperInstanceRef.current.setOptions(popperOptions); } }, [popperOptions]); useIsomorphicLayoutEffect(function () { if (referenceElement == null || popperElement == null) { return; } var createPopper$1 = options.createPopper || createPopper; var popperInstance = createPopper$1(referenceElement, popperElement, popperOptions); popperInstanceRef.current = popperInstance; return function () { popperInstance.destroy(); popperInstanceRef.current = null; }; }, [referenceElement, popperElement, options.createPopper]); return { state: popperInstanceRef.current ? popperInstanceRef.current.state : null, styles: state.styles, attributes: state.attributes, update: popperInstanceRef.current ? popperInstanceRef.current.update : null, forceUpdate: popperInstanceRef.current ? popperInstanceRef.current.forceUpdate : null }; }; var NOOP = function NOOP() { return void 0; }; var NOOP_PROMISE = function NOOP_PROMISE() { return Promise.resolve(null); }; var EMPTY_MODIFIERS = []; function Popper(_ref) { var _ref$placement = _ref.placement, placement = _ref$placement === void 0 ? 'bottom' : _ref$placement, _ref$strategy = _ref.strategy, strategy = _ref$strategy === void 0 ? 'absolute' : _ref$strategy, _ref$modifiers = _ref.modifiers, modifiers = _ref$modifiers === void 0 ? EMPTY_MODIFIERS : _ref$modifiers, referenceElement = _ref.referenceElement, onFirstUpdate = _ref.onFirstUpdate, innerRef = _ref.innerRef, children = _ref.children; var referenceNode = React__namespace.useContext(ManagerReferenceNodeContext); var _React$useState = React__namespace.useState(null), popperElement = _React$useState[0], setPopperElement = _React$useState[1]; var _React$useState2 = React__namespace.useState(null), arrowElement = _React$useState2[0], setArrowElement = _React$useState2[1]; React__namespace.useEffect(function () { setRef(innerRef, popperElement); }, [innerRef, popperElement]); var options = React__namespace.useMemo(function () { return { placement: placement, strategy: strategy, onFirstUpdate: onFirstUpdate, modifiers: [].concat(modifiers, [{ name: 'arrow', enabled: arrowElement != null, options: { element: arrowElement } }]) }; }, [placement, strategy, onFirstUpdate, modifiers, arrowElement]); var _usePopper = usePopper(referenceElement || referenceNode, popperElement, options), state = _usePopper.state, styles = _usePopper.styles, forceUpdate = _usePopper.forceUpdate, update = _usePopper.update; var childrenProps = React__namespace.useMemo(function () { return { ref: setPopperElement, style: styles.popper, placement: state ? state.placement : placement, hasPopperEscaped: state && state.modifiersData.hide ? state.modifiersData.hide.hasPopperEscaped : null, isReferenceHidden: state && state.modifiersData.hide ? state.modifiersData.hide.isReferenceHidden : null, arrowProps: { style: styles.arrow, ref: setArrowElement }, forceUpdate: forceUpdate || NOOP, update: update || NOOP_PROMISE }; }, [setPopperElement, setArrowElement, placement, state, styles, update, forceUpdate]); return unwrapArray(children)(childrenProps); } /** * Copyright (c) 2014-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var warning = function () {}; { var printWarning = function printWarning(format, args) { var len = arguments.length; args = new Array(len > 1 ? len - 1 : 0); for (var key = 1; key < len; key++) { args[key - 1] = arguments[key]; } var argIndex = 0; var message = 'Warning: ' + format.replace(/%s/g, function () { return args[argIndex++]; }); if (typeof console !== 'undefined') { console.error(message); } try { // --- Welcome to debugging React --- // This error was thrown as a convenience so that you can use this stack // to find the callsite that caused this warning to fire. throw new Error(message); } catch (x) {} }; warning = function (condition, format, args) { var len = arguments.length; args = new Array(len > 2 ? len - 2 : 0); for (var key = 2; key < len; key++) { args[key - 2] = arguments[key]; } if (format === undefined) { throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); } if (!condition) { printWarning.apply(null, [format].concat(args)); } }; } var warning_1 = warning; var warning$1 = /*@__PURE__*/getDefaultExportFromCjs(warning_1); function Reference(_ref) { var children = _ref.children, innerRef = _ref.innerRef; var setReferenceNode = React__namespace.useContext(ManagerReferenceNodeSetterContext); var refHandler = React__namespace.useCallback(function (node) { setRef(innerRef, node); safeInvoke(setReferenceNode, node); }, [innerRef, setReferenceNode]); // ran on unmount // eslint-disable-next-line react-hooks/exhaustive-deps React__namespace.useEffect(function () { return function () { return setRef(innerRef, null); }; }, []); React__namespace.useEffect(function () { warning$1(Boolean(setReferenceNode), '`Reference` should not be used outside of a `Manager` component.'); }, [setReferenceNode]); return unwrapArray(children)({ ref: refHandler }); } function _typeof$1(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof$1 = function _typeof(obj) { return typeof obj; }; } else { _typeof$1 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof$1(obj); } /** * @name set * @category Common Helpers * @summary Set date values to a given date. * * @description * Set date values to a given date. * * Sets time values to date from object `values`. * A value is not set if it is undefined or null or doesn't exist in `values`. * * Note about bundle size: `set` does not internally use `setX` functions from date-fns but instead opts * to use native `Date#setX` methods. If you use this function, you may not want to include the * other `setX` functions that date-fns provides if you are concerned about the bundle size. * * @param {Date|Number} date - the date to be changed * @param {Object} values - an object with options * @param {Number} [values.year] - the number of years to be set * @param {Number} [values.month] - the number of months to be set * @param {Number} [values.date] - the number of days to be set * @param {Number} [values.hours] - the number of hours to be set * @param {Number} [values.minutes] - the number of minutes to be set * @param {Number} [values.seconds] - the number of seconds to be set * @param {Number} [values.milliseconds] - the number of milliseconds to be set * @returns {Date} the new date with options set * @throws {TypeError} 2 arguments required * @throws {RangeError} `values` must be an object * * @example * // Transform 1 September 2014 into 20 October 2015 in a single line: * const result = set(new Date(2014, 8, 20), { year: 2015, month: 9, date: 20 }) * //=> Tue Oct 20 2015 00:00:00 * * @example * // Set 12 PM to 1 September 2014 01:23:45 to 1 September 2014 12:00:00: * const result = set(new Date(2014, 8, 1, 1, 23, 45), { hours: 12 }) * //=> Mon Sep 01 2014 12:23:45 */ function set(dirtyDate, values) { requiredArgs$1(2, arguments); if (_typeof$1(values) !== 'object' || values === null) { throw new RangeError('values parameter must be an object'); } var date = toDate(dirtyDate); // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date if (isNaN(date.getTime())) { return new Date(NaN); } if (values.year != null) { date.setFullYear(values.year); } if (values.month != null) { date = setMonth(date, values.month); } if (values.date != null) { date.setDate(toInteger$1(values.date)); } if (values.hours != null) { date.setHours(toInteger$1(values.hours)); } if (values.minutes != null) { date.setMinutes(toInteger$1(values.minutes)); } if (values.seconds != null) { date.setSeconds(toInteger$1(values.seconds)); } if (values.milliseconds != null) { date.setMilliseconds(toInteger$1(values.milliseconds)); } return date; } function le$1(e, t) { var r = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), r.push.apply(r, n); } return r; } function de$1(e) { for (var t = 1; t < arguments.length; t++) { var r = null != arguments[t] ? arguments[t] : {}; t % 2 ? le$1(Object(r), !0).forEach(function (t) { ye$1(e, t, r[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : le$1(Object(r)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(r, t)); }); } return e; } function ue$1(e) { return (ue$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) { return typeof e; } : function (e) { return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; })(e); } function he$1(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); } function me$1(e, t) { for (var r = 0; r < t.length; r++) { var n = t[r]; n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, Me$1(n.key), n); } } function fe$1(e, t, r) { return t && me$1(e.prototype, t), r && me$1(e, r), Object.defineProperty(e, "prototype", { writable: !1 }), e; } function ye$1(e, t, r) { return (t = Me$1(t)) in e ? Object.defineProperty(e, t, { value: r, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = r, e; } function ve$1() { return (ve$1 = Object.assign ? Object.assign.bind() : function (e) { for (var t = 1; t < arguments.length; t++) { var r = arguments[t]; for (var n in r) Object.prototype.hasOwnProperty.call(r, n) && (e[n] = r[n]); } return e; }).apply(this, arguments); } function De$1(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, writable: !0, configurable: !0 } }), Object.defineProperty(e, "prototype", { writable: !1 }), t && ge$1(e, t); } function we$1(e) { return (we$1 = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (e) { return e.__proto__ || Object.getPrototypeOf(e); })(e); } function ge$1(e, t) { return (ge$1 = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (e, t) { return e.__proto__ = t, e; })(e, t); } function ke$1(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } function be$1(e, t) { if (t && ("object" == typeof t || "function" == typeof t)) return t; if (void 0 !== t) throw new TypeError("Derived constructors may only return object or undefined"); return ke$1(e); } function Se$1(e) { var t = function () { if ("undefined" == typeof Reflect || !Reflect.construct) return !1; if (Reflect.construct.sham) return !1; if ("function" == typeof Proxy) return !0; try { return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})), !0; } catch (e) { return !1; } }(); return function () { var r, n = we$1(e); if (t) { var o = we$1(this).constructor; r = Reflect.construct(n, arguments, o); } else r = n.apply(this, arguments); return be$1(this, r); }; } function Ce$1(e) { return function (e) { if (Array.isArray(e)) return _e$1(e); }(e) || function (e) { if ("undefined" != typeof Symbol && null != e[Symbol.iterator] || null != e["@@iterator"]) return Array.from(e); }(e) || function (e, t) { if (!e) return; if ("string" == typeof e) return _e$1(e, t); var r = Object.prototype.toString.call(e).slice(8, -1); "Object" === r && e.constructor && (r = e.constructor.name); if ("Map" === r || "Set" === r) return Array.from(e); if ("Arguments" === r || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)) return _e$1(e, t); }(e) || function () { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }(); } function _e$1(e, t) { (null == t || t > e.length) && (t = e.length); for (var r = 0, n = new Array(t); r < t; r++) n[r] = e[r]; return n; } function Me$1(e) { var t = function (e, t) { if ("object" != typeof e || null === e) return e; var r = e[Symbol.toPrimitive]; if (void 0 !== r) { var n = r.call(e, t || "default"); if ("object" != typeof n) return n; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === t ? String : Number)(e); }(e, "string"); return "symbol" == typeof t ? t : String(t); } function Pe$1(e, t) { switch (e) { case "P": return t.date({ width: "short" }); case "PP": return t.date({ width: "medium" }); case "PPP": return t.date({ width: "long" }); case "PPPP": default: return t.date({ width: "full" }); } } function Ee$1(e, t) { switch (e) { case "p": return t.time({ width: "short" }); case "pp": return t.time({ width: "medium" }); case "ppp": return t.time({ width: "long" }); case "pppp": default: return t.time({ width: "full" }); } } var Ne$1 = { p: Ee$1, P: function (e, t) { var r, n = e.match(/(P+)(p+)?/) || [], o = n[1], a = n[2]; if (!a) return Pe$1(e, t); switch (o) { case "P": r = t.dateTime({ width: "short" }); break; case "PP": r = t.dateTime({ width: "medium" }); break; case "PPP": r = t.dateTime({ width: "long" }); break; case "PPPP": default: r = t.dateTime({ width: "full" }); } return r.replace("{{date}}", Pe$1(o, t)).replace("{{time}}", Ee$1(a, t)); } }, xe$1 = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; function Ye$1(e) { var t = e ? "string" == typeof e || e instanceof String ? parseISO$2(e) : toDate(e) : new Date(); return Te$1(t) ? t : null; } function Oe$1(e, t, r, n, o) { var a = null, s = et(r) || et(Ze$1()), i = !0; return Array.isArray(t) ? (t.forEach(function (t) { var p = parse$1(e, t, new Date(), { locale: s }); n && (i = Te$1(p, o) && e === Ie$1(p, t, r)), Te$1(p, o) && i && (a = p); }), a) : (a = parse$1(e, t, new Date(), { locale: s }), n ? i = Te$1(a) && e === Ie$1(a, t, r) : Te$1(a) || (t = t.match(xe$1).map(function (e) { var t = e[0]; return "p" === t || "P" === t ? s ? (0, Ne$1[t])(e, s.formatLong) : t : e; }).join(""), e.length > 0 && (a = parse$1(e, t.slice(0, e.length), new Date())), Te$1(a) || (a = new Date(e))), Te$1(a) && i ? a : null); } function Te$1(e, t) { return t = t || new Date("1/1/1000"), isValid(e) && !isBefore(e, t); } function Ie$1(e, t, r) { if ("en" === r) return format$2(e, t, { awareOfUnicodeTokens: !0 }); var n = et(r); return r && !n && console.warn('A locale object was not found for the provided string ["'.concat(r, '"].')), !n && Ze$1() && et(Ze$1()) && (n = et(Ze$1())), format$2(e, t, { locale: n || null, awareOfUnicodeTokens: !0 }); } function Le$1(e, t) { var r = t.dateFormat, n = t.locale; return e && Ie$1(e, Array.isArray(r) ? r[0] : r, n) || ""; } function Re$1(e, t) { var r = t.hour, n = void 0 === r ? 0 : r, o = t.minute, a = void 0 === o ? 0 : o, s = t.second; return setHours(setMinutes(setSeconds(e, void 0 === s ? 0 : s), a), n); } function Fe$1(e, t) { var r = t && et(t) || Ze$1() && et(Ze$1()); return getISOWeek(e, r ? { locale: r } : null); } function Ae$1(e, t) { return Ie$1(e, "ddd", t); } function Ke$1(e) { return startOfDay(e); } function Be$1(e, t, r) { var n = et(t || Ze$1()); return startOfWeek(e, { locale: n, weekStartsOn: r }); } function We$1(e) { return startOfMonth(e); } function He$1(e) { return startOfYear(e); } function je$1(e) { return startOfQuarter(e); } function Qe() { return startOfDay(Ye$1()); } function Ve$1(e, t) { return e && t ? isSameYear(e, t) : !e && !t; } function qe$1(e, t) { return e && t ? isSameMonth(e, t) : !e && !t; } function Ue$1(e, t) { return e && t ? isSameQuarter(e, t) : !e && !t; } function ze$1(e, t) { return e && t ? isSameDay(e, t) : !e && !t; } function $e$1(e, t) { return e && t ? isEqual$2(e, t) : !e && !t; } function Ge$1(e, t, r) { var n, o = startOfDay(t), a = endOfDay(r); try { n = isWithinInterval(e, { start: o, end: a }); } catch (e) { n = !1; } return n; } function Ze$1() { return ("undefined" != typeof window ? window : globalThis).__localeId__; } function et(e) { if ("string" == typeof e) { var t = "undefined" != typeof window ? window : globalThis; return t.__localeData__ ? t.__localeData__[e] : null; } return e; } function tt$1(e, t) { return Ie$1(setMonth(Ye$1(), e), "LLLL", t); } function rt(e, t) { return Ie$1(setMonth(Ye$1(), e), "LLL", t); } function nt(e, t) { return Ie$1(setQuarter(Ye$1(), e), "QQQ", t); } function ot(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, r = t.minDate, n = t.maxDate, o = t.excludeDates, a = t.excludeDateIntervals, s = t.includeDates, i = t.includeDateIntervals, p = t.filterDate; return dt(e, { minDate: r, maxDate: n }) || o && o.some(function (t) { return ze$1(e, t); }) || a && a.some(function (t) { var r = t.start, n = t.end; return isWithinInterval(e, { start: r, end: n }); }) || s && !s.some(function (t) { return ze$1(e, t); }) || i && !i.some(function (t) { var r = t.start, n = t.end; return isWithinInterval(e, { start: r, end: n }); }) || p && !p(Ye$1(e)) || !1; } function at(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, r = t.excludeDates, n = t.excludeDateIntervals; return n && n.length > 0 ? n.some(function (t) { var r = t.start, n = t.end; return isWithinInterval(e, { start: r, end: n }); }) : r && r.some(function (t) { return ze$1(e, t); }) || !1; } function st(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, r = t.minDate, n = t.maxDate, o = t.excludeDates, a = t.includeDates, s = t.filterDate; return dt(e, { minDate: startOfMonth(r), maxDate: endOfMonth(n) }) || o && o.some(function (t) { return qe$1(e, t); }) || a && !a.some(function (t) { return qe$1(e, t); }) || s && !s(Ye$1(e)) || !1; } function it(e, t, r, n) { var o = getYear(e), a = getMonth(e), s = getYear(t), i = getMonth(t), p = getYear(n); return o === s && o === p ? a <= r && r <= i : o < s ? p === o && a <= r || p === s && i >= r || p < s && p > o : void 0; } function pt(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, r = t.minDate, n = t.maxDate, o = t.excludeDates, a = t.includeDates, s = t.filterDate; return dt(e, { minDate: r, maxDate: n }) || o && o.some(function (t) { return Ue$1(e, t); }) || a && !a.some(function (t) { return Ue$1(e, t); }) || s && !s(Ye$1(e)) || !1; } function ct(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, r = t.minDate, n = t.maxDate, o = t.excludeDates, a = t.includeDates, s = t.filterDate, i = new Date(e, 0, 1); return dt(i, { minDate: startOfYear(r), maxDate: endOfYear(n) }) || o && o.some(function (e) { return Ve$1(i, e); }) || a && !a.some(function (e) { return Ve$1(i, e); }) || s && !s(Ye$1(i)) || !1; } function lt(e, t, r, n) { var o = getYear(e), a = getQuarter(e), s = getYear(t), i = getQuarter(t), p = getYear(n); return o === s && o === p ? a <= r && r <= i : o < s ? p === o && a <= r || p === s && i >= r || p < s && p > o : void 0; } function dt(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, r = t.minDate, n = t.maxDate; return r && differenceInCalendarDays(e, r) < 0 || n && differenceInCalendarDays(e, n) > 0; } function ut(e, t) { return t.some(function (t) { return getHours(t) === getHours(e) && getMinutes(t) === getMinutes(e); }); } function ht(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, r = t.excludeTimes, n = t.includeTimes, o = t.filterTime; return r && ut(e, r) || n && !ut(e, n) || o && !o(e) || !1; } function mt(e, t) { var r = t.minTime, n = t.maxTime; if (!r || !n) throw new Error("Both minTime and maxTime props required"); var o, a = Ye$1(), s = setHours(setMinutes(a, getMinutes(e)), getHours(e)), i = setHours(setMinutes(a, getMinutes(r)), getHours(r)), p = setHours(setMinutes(a, getMinutes(n)), getHours(n)); try { o = !isWithinInterval(s, { start: i, end: p }); } catch (e) { o = !1; } return o; } function ft(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, r = t.minDate, n = t.includeDates, o = subMonths(e, 1); return r && differenceInCalendarMonths(r, o) > 0 || n && n.every(function (e) { return differenceInCalendarMonths(e, o) > 0; }) || !1; } function yt(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, r = t.maxDate, n = t.includeDates, o = addMonths(e, 1); return r && differenceInCalendarMonths(o, r) > 0 || n && n.every(function (e) { return differenceInCalendarMonths(o, e) > 0; }) || !1; } function vt(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, r = t.minDate, n = t.includeDates, o = subYears(e, 1); return r && differenceInCalendarYears(r, o) > 0 || n && n.every(function (e) { return differenceInCalendarYears(e, o) > 0; }) || !1; } function Dt(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, r = t.maxDate, n = t.includeDates, o = addYears(e, 1); return r && differenceInCalendarYears(o, r) > 0 || n && n.every(function (e) { return differenceInCalendarYears(o, e) > 0; }) || !1; } function wt(e) { var t = e.minDate, r = e.includeDates; if (r && t) { var n = r.filter(function (e) { return differenceInCalendarDays(e, t) >= 0; }); return min$1(n); } return r ? min$1(r) : t; } function gt(e) { var t = e.maxDate, r = e.includeDates; if (r && t) { var n = r.filter(function (e) { return differenceInCalendarDays(e, t) <= 0; }); return max$1(n); } return r ? max$1(r) : t; } function kt() { for (var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "react-datepicker__day--highlighted", r = new Map(), o = 0, a = e.length; o < a; o++) { var s = e[o]; if (isDate(s)) { var i = Ie$1(s, "MM.dd.yyyy"), p = r.get(i) || []; p.includes(t) || (p.push(t), r.set(i, p)); } else if ("object" === ue$1(s)) { var c = Object.keys(s), l = c[0], d = s[c[0]]; if ("string" == typeof l && d.constructor === Array) for (var u = 0, h = d.length; u < h; u++) { var m = Ie$1(d[u], "MM.dd.yyyy"), f = r.get(m) || []; f.includes(l) || (f.push(l), r.set(m, f)); } } } return r; } function bt(e, t, r, n, o) { for (var a = o.length, p = [], c = 0; c < a; c++) { var l = addMinutes(addHours(e, getHours(o[c])), getMinutes(o[c])), d = addMinutes(e, (r + 1) * n); isAfter(l, t) && isBefore(l, d) && p.push(o[c]); } return p; } function St(e) { return e < 10 ? "0".concat(e) : "".concat(e); } function Ct(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 12, r = Math.ceil(getYear(e) / t) * t, n = r - (t - 1); return { startPeriod: n, endPeriod: r }; } function _t(e, t, r, n) { for (var o = [], a = 0; a < 2 * t + 1; a++) { var s = e + t - a, i = !0; r && (i = getYear(r) <= s), n && i && (i = getYear(n) >= s), i && o.push(s); } return o; } var Mt = onClickOutsideHOC(function (n) { De$1(a, React__namespace.default.Component); var o = Se$1(a); function a(r) { var n; he$1(this, a), ye$1(ke$1(n = o.call(this, r)), "renderOptions", function () { var t = n.props.year, r = n.state.yearsList.map(function (r) { return /*#__PURE__*/React__namespace.default.createElement("div", { className: t === r ? "react-datepicker__year-option react-datepicker__year-option--selected_year" : "react-datepicker__year-option", key: r, onClick: n.onChange.bind(ke$1(n), r), "aria-selected": t === r ? "true" : void 0 }, t === r ? /*#__PURE__*/React__namespace.default.createElement("span", { className: "react-datepicker__year-option--selected" }, "✓") : "", r); }), o = n.props.minDate ? getYear(n.props.minDate) : null, a = n.props.maxDate ? getYear(n.props.maxDate) : null; return a && n.state.yearsList.find(function (e) { return e === a; }) || r.unshift( /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__year-option", key: "upcoming", onClick: n.incrementYears }, /*#__PURE__*/React__namespace.default.createElement("a", { className: "react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-upcoming" }))), o && n.state.yearsList.find(function (e) { return e === o; }) || r.push( /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__year-option", key: "previous", onClick: n.decrementYears }, /*#__PURE__*/React__namespace.default.createElement("a", { className: "react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-previous" }))), r; }), ye$1(ke$1(n), "onChange", function (e) { n.props.onChange(e); }), ye$1(ke$1(n), "handleClickOutside", function () { n.props.onCancel(); }), ye$1(ke$1(n), "shiftYears", function (e) { var t = n.state.yearsList.map(function (t) { return t + e; }); n.setState({ yearsList: t }); }), ye$1(ke$1(n), "incrementYears", function () { return n.shiftYears(1); }), ye$1(ke$1(n), "decrementYears", function () { return n.shiftYears(-1); }); var s = r.yearDropdownItemNumber, i = r.scrollableYearDropdown, p = s || (i ? 10 : 5); return n.state = { yearsList: _t(n.props.year, p, n.props.minDate, n.props.maxDate) }, n.dropdownRef = /*#__PURE__*/React.createRef(), n; } return fe$1(a, [{ key: "componentDidMount", value: function () { var e = this.dropdownRef.current; if (e) { var t = e.children ? Array.from(e.children) : null, r = t ? t.find(function (e) { return e.ariaSelected; }) : null; e.scrollTop = r ? r.offsetTop + (r.clientHeight - e.clientHeight) / 2 : (e.scrollHeight - e.clientHeight) / 2; } } }, { key: "render", value: function () { var t = r({ "react-datepicker__year-dropdown": !0, "react-datepicker__year-dropdown--scrollable": this.props.scrollableYearDropdown }); return /*#__PURE__*/React__namespace.default.createElement("div", { className: t, ref: this.dropdownRef }, this.renderOptions()); } }]), a; }()), Pt = function (t) { De$1(n, React__namespace.default.Component); var r = Se$1(n); function n() { var t; he$1(this, n); for (var o = arguments.length, a = new Array(o), s = 0; s < o; s++) a[s] = arguments[s]; return ye$1(ke$1(t = r.call.apply(r, [this].concat(a))), "state", { dropdownVisible: !1 }), ye$1(ke$1(t), "renderSelectOptions", function () { for (var r = t.props.minDate ? getYear(t.props.minDate) : 1900, n = t.props.maxDate ? getYear(t.props.maxDate) : 2100, o = [], a = r; a <= n; a++) o.push( /*#__PURE__*/React__namespace.default.createElement("option", { key: a, value: a }, a)); return o; }), ye$1(ke$1(t), "onSelectChange", function (e) { t.onChange(e.target.value); }), ye$1(ke$1(t), "renderSelectMode", function () { return /*#__PURE__*/React__namespace.default.createElement("select", { value: t.props.year, className: "react-datepicker__year-select", onChange: t.onSelectChange }, t.renderSelectOptions()); }), ye$1(ke$1(t), "renderReadView", function (r) { return /*#__PURE__*/React__namespace.default.createElement("div", { key: "read", style: { visibility: r ? "visible" : "hidden" }, className: "react-datepicker__year-read-view", onClick: function (e) { return t.toggleDropdown(e); } }, /*#__PURE__*/React__namespace.default.createElement("span", { className: "react-datepicker__year-read-view--down-arrow" }), /*#__PURE__*/React__namespace.default.createElement("span", { className: "react-datepicker__year-read-view--selected-year" }, t.props.year)); }), ye$1(ke$1(t), "renderDropdown", function () { return /*#__PURE__*/React__namespace.default.createElement(Mt, { key: "dropdown", year: t.props.year, onChange: t.onChange, onCancel: t.toggleDropdown, minDate: t.props.minDate, maxDate: t.props.maxDate, scrollableYearDropdown: t.props.scrollableYearDropdown, yearDropdownItemNumber: t.props.yearDropdownItemNumber }); }), ye$1(ke$1(t), "renderScrollMode", function () { var e = t.state.dropdownVisible, r = [t.renderReadView(!e)]; return e && r.unshift(t.renderDropdown()), r; }), ye$1(ke$1(t), "onChange", function (e) { t.toggleDropdown(), e !== t.props.year && t.props.onChange(e); }), ye$1(ke$1(t), "toggleDropdown", function (e) { t.setState({ dropdownVisible: !t.state.dropdownVisible }, function () { t.props.adjustDateOnChange && t.handleYearChange(t.props.date, e); }); }), ye$1(ke$1(t), "handleYearChange", function (e, r) { t.onSelect(e, r), t.setOpen(); }), ye$1(ke$1(t), "onSelect", function (e, r) { t.props.onSelect && t.props.onSelect(e, r); }), ye$1(ke$1(t), "setOpen", function () { t.props.setOpen && t.props.setOpen(!0); }), t; } return fe$1(n, [{ key: "render", value: function () { var t; switch (this.props.dropdownMode) { case "scroll": t = this.renderScrollMode(); break; case "select": t = this.renderSelectMode(); } return /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__year-dropdown-container react-datepicker__year-dropdown-container--".concat(this.props.dropdownMode) }, t); } }]), n; }(), Et = onClickOutsideHOC(function (t) { De$1(n, React__namespace.default.Component); var r = Se$1(n); function n() { var t; he$1(this, n); for (var o = arguments.length, a = new Array(o), s = 0; s < o; s++) a[s] = arguments[s]; return ye$1(ke$1(t = r.call.apply(r, [this].concat(a))), "isSelectedMonth", function (e) { return t.props.month === e; }), ye$1(ke$1(t), "renderOptions", function () { return t.props.monthNames.map(function (r, n) { return /*#__PURE__*/React__namespace.default.createElement("div", { className: t.isSelectedMonth(n) ? "react-datepicker__month-option react-datepicker__month-option--selected_month" : "react-datepicker__month-option", key: r, onClick: t.onChange.bind(ke$1(t), n), "aria-selected": t.isSelectedMonth(n) ? "true" : void 0 }, t.isSelectedMonth(n) ? /*#__PURE__*/React__namespace.default.createElement("span", { className: "react-datepicker__month-option--selected" }, "✓") : "", r); }); }), ye$1(ke$1(t), "onChange", function (e) { return t.props.onChange(e); }), ye$1(ke$1(t), "handleClickOutside", function () { return t.props.onCancel(); }), t; } return fe$1(n, [{ key: "render", value: function () { return /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__month-dropdown" }, this.renderOptions()); } }]), n; }()), Nt = function (t) { De$1(n, React__namespace.default.Component); var r = Se$1(n); function n() { var t; he$1(this, n); for (var o = arguments.length, a = new Array(o), s = 0; s < o; s++) a[s] = arguments[s]; return ye$1(ke$1(t = r.call.apply(r, [this].concat(a))), "state", { dropdownVisible: !1 }), ye$1(ke$1(t), "renderSelectOptions", function (t) { return t.map(function (t, r) { return /*#__PURE__*/React__namespace.default.createElement("option", { key: r, value: r }, t); }); }), ye$1(ke$1(t), "renderSelectMode", function (r) { return /*#__PURE__*/React__namespace.default.createElement("select", { value: t.props.month, className: "react-datepicker__month-select", onChange: function (e) { return t.onChange(e.target.value); } }, t.renderSelectOptions(r)); }), ye$1(ke$1(t), "renderReadView", function (r, n) { return /*#__PURE__*/React__namespace.default.createElement("div", { key: "read", style: { visibility: r ? "visible" : "hidden" }, className: "react-datepicker__month-read-view", onClick: t.toggleDropdown }, /*#__PURE__*/React__namespace.default.createElement("span", { className: "react-datepicker__month-read-view--down-arrow" }), /*#__PURE__*/React__namespace.default.createElement("span", { className: "react-datepicker__month-read-view--selected-month" }, n[t.props.month])); }), ye$1(ke$1(t), "renderDropdown", function (r) { return /*#__PURE__*/React__namespace.default.createElement(Et, { key: "dropdown", month: t.props.month, monthNames: r, onChange: t.onChange, onCancel: t.toggleDropdown }); }), ye$1(ke$1(t), "renderScrollMode", function (e) { var r = t.state.dropdownVisible, n = [t.renderReadView(!r, e)]; return r && n.unshift(t.renderDropdown(e)), n; }), ye$1(ke$1(t), "onChange", function (e) { t.toggleDropdown(), e !== t.props.month && t.props.onChange(e); }), ye$1(ke$1(t), "toggleDropdown", function () { return t.setState({ dropdownVisible: !t.state.dropdownVisible }); }), t; } return fe$1(n, [{ key: "render", value: function () { var t, r = this, n = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map(this.props.useShortMonthInDropdown ? function (e) { return rt(e, r.props.locale); } : function (e) { return tt$1(e, r.props.locale); }); switch (this.props.dropdownMode) { case "scroll": t = this.renderScrollMode(n); break; case "select": t = this.renderSelectMode(n); } return /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__month-dropdown-container react-datepicker__month-dropdown-container--".concat(this.props.dropdownMode) }, t); } }]), n; }(); function xt(e, t) { for (var r = [], n = We$1(e), o = We$1(t); !isAfter(n, o);) r.push(Ye$1(n)), n = addMonths(n, 1); return r; } var Yt = onClickOutsideHOC(function (t) { De$1(o, React__namespace.default.Component); var n = Se$1(o); function o(t) { var r; return he$1(this, o), ye$1(ke$1(r = n.call(this, t)), "renderOptions", function () { return r.state.monthYearsList.map(function (t) { var n = getTime(t), o = Ve$1(r.props.date, t) && qe$1(r.props.date, t); return /*#__PURE__*/React__namespace.default.createElement("div", { className: o ? "react-datepicker__month-year-option--selected_month-year" : "react-datepicker__month-year-option", key: n, onClick: r.onChange.bind(ke$1(r), n), "aria-selected": o ? "true" : void 0 }, o ? /*#__PURE__*/React__namespace.default.createElement("span", { className: "react-datepicker__month-year-option--selected" }, "✓") : "", Ie$1(t, r.props.dateFormat, r.props.locale)); }); }), ye$1(ke$1(r), "onChange", function (e) { return r.props.onChange(e); }), ye$1(ke$1(r), "handleClickOutside", function () { r.props.onCancel(); }), r.state = { monthYearsList: xt(r.props.minDate, r.props.maxDate) }, r; } return fe$1(o, [{ key: "render", value: function () { var t = r({ "react-datepicker__month-year-dropdown": !0, "react-datepicker__month-year-dropdown--scrollable": this.props.scrollableMonthYearDropdown }); return /*#__PURE__*/React__namespace.default.createElement("div", { className: t }, this.renderOptions()); } }]), o; }()), Ot = function (t) { De$1(n, React__namespace.default.Component); var r = Se$1(n); function n() { var t; he$1(this, n); for (var o = arguments.length, a = new Array(o), s = 0; s < o; s++) a[s] = arguments[s]; return ye$1(ke$1(t = r.call.apply(r, [this].concat(a))), "state", { dropdownVisible: !1 }), ye$1(ke$1(t), "renderSelectOptions", function () { for (var r = We$1(t.props.minDate), n = We$1(t.props.maxDate), o = []; !isAfter(r, n);) { var a = getTime(r); o.push( /*#__PURE__*/React__namespace.default.createElement("option", { key: a, value: a }, Ie$1(r, t.props.dateFormat, t.props.locale))), r = addMonths(r, 1); } return o; }), ye$1(ke$1(t), "onSelectChange", function (e) { t.onChange(e.target.value); }), ye$1(ke$1(t), "renderSelectMode", function () { return /*#__PURE__*/React__namespace.default.createElement("select", { value: getTime(We$1(t.props.date)), className: "react-datepicker__month-year-select", onChange: t.onSelectChange }, t.renderSelectOptions()); }), ye$1(ke$1(t), "renderReadView", function (r) { var n = Ie$1(t.props.date, t.props.dateFormat, t.props.locale); return /*#__PURE__*/React__namespace.default.createElement("div", { key: "read", style: { visibility: r ? "visible" : "hidden" }, className: "react-datepicker__month-year-read-view", onClick: function (e) { return t.toggleDropdown(e); } }, /*#__PURE__*/React__namespace.default.createElement("span", { className: "react-datepicker__month-year-read-view--down-arrow" }), /*#__PURE__*/React__namespace.default.createElement("span", { className: "react-datepicker__month-year-read-view--selected-month-year" }, n)); }), ye$1(ke$1(t), "renderDropdown", function () { return /*#__PURE__*/React__namespace.default.createElement(Yt, { key: "dropdown", date: t.props.date, dateFormat: t.props.dateFormat, onChange: t.onChange, onCancel: t.toggleDropdown, minDate: t.props.minDate, maxDate: t.props.maxDate, scrollableMonthYearDropdown: t.props.scrollableMonthYearDropdown, locale: t.props.locale }); }), ye$1(ke$1(t), "renderScrollMode", function () { var e = t.state.dropdownVisible, r = [t.renderReadView(!e)]; return e && r.unshift(t.renderDropdown()), r; }), ye$1(ke$1(t), "onChange", function (e) { t.toggleDropdown(); var r = Ye$1(parseInt(e)); Ve$1(t.props.date, r) && qe$1(t.props.date, r) || t.props.onChange(r); }), ye$1(ke$1(t), "toggleDropdown", function () { return t.setState({ dropdownVisible: !t.state.dropdownVisible }); }), t; } return fe$1(n, [{ key: "render", value: function () { var t; switch (this.props.dropdownMode) { case "scroll": t = this.renderScrollMode(); break; case "select": t = this.renderSelectMode(); } return /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__month-year-dropdown-container react-datepicker__month-year-dropdown-container--".concat(this.props.dropdownMode) }, t); } }]), n; }(), Tt = function (t) { De$1(o, React__namespace.default.Component); var n = Se$1(o); function o() { var t; he$1(this, o); for (var a = arguments.length, s = new Array(a), i = 0; i < a; i++) s[i] = arguments[i]; return ye$1(ke$1(t = n.call.apply(n, [this].concat(s))), "dayEl", /*#__PURE__*/React__namespace.default.createRef()), ye$1(ke$1(t), "handleClick", function (e) { !t.isDisabled() && t.props.onClick && t.props.onClick(e); }), ye$1(ke$1(t), "handleMouseEnter", function (e) { !t.isDisabled() && t.props.onMouseEnter && t.props.onMouseEnter(e); }), ye$1(ke$1(t), "handleOnKeyDown", function (e) { " " === e.key && (e.preventDefault(), e.key = "Enter"), t.props.handleOnKeyDown(e); }), ye$1(ke$1(t), "isSameDay", function (e) { return ze$1(t.props.day, e); }), ye$1(ke$1(t), "isKeyboardSelected", function () { return !t.props.disabledKeyboardNavigation && !t.isSameDay(t.props.selected) && t.isSameDay(t.props.preSelection); }), ye$1(ke$1(t), "isDisabled", function () { return ot(t.props.day, t.props); }), ye$1(ke$1(t), "isExcluded", function () { return at(t.props.day, t.props); }), ye$1(ke$1(t), "getHighLightedClass", function (e) { var r = t.props, n = r.day, o = r.highlightDates; if (!o) return !1; var a = Ie$1(n, "MM.dd.yyyy"); return o.get(a); }), ye$1(ke$1(t), "isInRange", function () { var e = t.props, r = e.day, n = e.startDate, o = e.endDate; return !(!n || !o) && Ge$1(r, n, o); }), ye$1(ke$1(t), "isInSelectingRange", function () { var e, r = t.props, n = r.day, o = r.selectsStart, a = r.selectsEnd, s = r.selectsRange, i = r.selectsDisabledDaysInRange, p = r.startDate, c = r.endDate, l = null !== (e = t.props.selectingDate) && void 0 !== e ? e : t.props.preSelection; return !(!(o || a || s) || !l || !i && t.isDisabled()) && (o && c && (isBefore(l, c) || $e$1(l, c)) ? Ge$1(n, l, c) : (a && p && (isAfter(l, p) || $e$1(l, p)) || !(!s || !p || c || !isAfter(l, p) && !$e$1(l, p))) && Ge$1(n, p, l)); }), ye$1(ke$1(t), "isSelectingRangeStart", function () { var e; if (!t.isInSelectingRange()) return !1; var r = t.props, n = r.day, o = r.startDate, a = r.selectsStart, s = null !== (e = t.props.selectingDate) && void 0 !== e ? e : t.props.preSelection; return ze$1(n, a ? s : o); }), ye$1(ke$1(t), "isSelectingRangeEnd", function () { var e; if (!t.isInSelectingRange()) return !1; var r = t.props, n = r.day, o = r.endDate, a = r.selectsEnd, s = r.selectsRange, i = null !== (e = t.props.selectingDate) && void 0 !== e ? e : t.props.preSelection; return ze$1(n, a || s ? i : o); }), ye$1(ke$1(t), "isRangeStart", function () { var e = t.props, r = e.day, n = e.startDate, o = e.endDate; return !(!n || !o) && ze$1(n, r); }), ye$1(ke$1(t), "isRangeEnd", function () { var e = t.props, r = e.day, n = e.startDate, o = e.endDate; return !(!n || !o) && ze$1(o, r); }), ye$1(ke$1(t), "isWeekend", function () { var e = getDay(t.props.day); return 0 === e || 6 === e; }), ye$1(ke$1(t), "isAfterMonth", function () { return void 0 !== t.props.month && (t.props.month + 1) % 12 === getMonth(t.props.day); }), ye$1(ke$1(t), "isBeforeMonth", function () { return void 0 !== t.props.month && (getMonth(t.props.day) + 1) % 12 === t.props.month; }), ye$1(ke$1(t), "isCurrentDay", function () { return t.isSameDay(Ye$1()); }), ye$1(ke$1(t), "isSelected", function () { return t.isSameDay(t.props.selected); }), ye$1(ke$1(t), "getClassNames", function (e) { var n = t.props.dayClassName ? t.props.dayClassName(e) : void 0; return r("react-datepicker__day", n, "react-datepicker__day--" + Ae$1(t.props.day), { "react-datepicker__day--disabled": t.isDisabled(), "react-datepicker__day--excluded": t.isExcluded(), "react-datepicker__day--selected": t.isSelected(), "react-datepicker__day--keyboard-selected": t.isKeyboardSelected(), "react-datepicker__day--range-start": t.isRangeStart(), "react-datepicker__day--range-end": t.isRangeEnd(), "react-datepicker__day--in-range": t.isInRange(), "react-datepicker__day--in-selecting-range": t.isInSelectingRange(), "react-datepicker__day--selecting-range-start": t.isSelectingRangeStart(), "react-datepicker__day--selecting-range-end": t.isSelectingRangeEnd(), "react-datepicker__day--today": t.isCurrentDay(), "react-datepicker__day--weekend": t.isWeekend(), "react-datepicker__day--outside-month": t.isAfterMonth() || t.isBeforeMonth() }, t.getHighLightedClass("react-datepicker__day--highlighted")); }), ye$1(ke$1(t), "getAriaLabel", function () { var e = t.props, r = e.day, n = e.ariaLabelPrefixWhenEnabled, o = void 0 === n ? "Choose" : n, a = e.ariaLabelPrefixWhenDisabled, s = void 0 === a ? "Not available" : a, i = t.isDisabled() || t.isExcluded() ? s : o; return "".concat(i, " ").concat(Ie$1(r, "PPPP", t.props.locale)); }), ye$1(ke$1(t), "getTabIndex", function (e, r) { var n = e || t.props.selected, o = r || t.props.preSelection; return t.isKeyboardSelected() || t.isSameDay(n) && ze$1(o, n) ? 0 : -1; }), ye$1(ke$1(t), "handleFocusDay", function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, r = !1; 0 === t.getTabIndex() && !e.isInputFocused && t.isSameDay(t.props.preSelection) && (document.activeElement && document.activeElement !== document.body || (r = !0), t.props.inline && !t.props.shouldFocusDayInline && (r = !1), t.props.containerRef && t.props.containerRef.current && t.props.containerRef.current.contains(document.activeElement) && document.activeElement.classList.contains("react-datepicker__day") && (r = !0)), r && t.dayEl.current.focus({ preventScroll: !0 }); }), ye$1(ke$1(t), "renderDayContents", function () { return t.props.monthShowsDuplicateDaysEnd && t.isAfterMonth() || t.props.monthShowsDuplicateDaysStart && t.isBeforeMonth() ? null : t.props.renderDayContents ? t.props.renderDayContents(getDate(t.props.day), t.props.day) : getDate(t.props.day); }), ye$1(ke$1(t), "render", function () { return /*#__PURE__*/React__namespace.default.createElement("div", { ref: t.dayEl, className: t.getClassNames(t.props.day), onKeyDown: t.handleOnKeyDown, onClick: t.handleClick, onMouseEnter: t.handleMouseEnter, tabIndex: t.getTabIndex(), "aria-label": t.getAriaLabel(), role: "option", "aria-disabled": t.isDisabled(), "aria-current": t.isCurrentDay() ? "date" : void 0, "aria-selected": t.isSelected() }, t.renderDayContents()); }), t; } return fe$1(o, [{ key: "componentDidMount", value: function () { this.handleFocusDay(); } }, { key: "componentDidUpdate", value: function (e) { this.handleFocusDay(e); } }]), o; }(), It = function (t) { De$1(o, React__namespace.default.Component); var n = Se$1(o); function o() { var e; he$1(this, o); for (var t = arguments.length, r = new Array(t), a = 0; a < t; a++) r[a] = arguments[a]; return ye$1(ke$1(e = n.call.apply(n, [this].concat(r))), "handleClick", function (t) { e.props.onClick && e.props.onClick(t); }), e; } return fe$1(o, [{ key: "render", value: function () { var t = this.props, n = t.weekNumber, o = t.ariaLabelPrefix, a = void 0 === o ? "week " : o, s = { "react-datepicker__week-number": !0, "react-datepicker__week-number--clickable": !!t.onClick }; return /*#__PURE__*/React__namespace.default.createElement("div", { className: r(s), "aria-label": "".concat(a, " ").concat(this.props.weekNumber), onClick: this.handleClick }, n); } }]), o; }(), Lt = function (t) { De$1(n, React__namespace.default.Component); var r = Se$1(n); function n() { var t; he$1(this, n); for (var o = arguments.length, a = new Array(o), s = 0; s < o; s++) a[s] = arguments[s]; return ye$1(ke$1(t = r.call.apply(r, [this].concat(a))), "handleDayClick", function (e, r) { t.props.onDayClick && t.props.onDayClick(e, r); }), ye$1(ke$1(t), "handleDayMouseEnter", function (e) { t.props.onDayMouseEnter && t.props.onDayMouseEnter(e); }), ye$1(ke$1(t), "handleWeekClick", function (e, r, n) { "function" == typeof t.props.onWeekSelect && t.props.onWeekSelect(e, r, n), t.props.shouldCloseOnSelect && t.props.setOpen(!1); }), ye$1(ke$1(t), "formatWeekNumber", function (e) { return t.props.formatWeekNumber ? t.props.formatWeekNumber(e) : Fe$1(e); }), ye$1(ke$1(t), "renderDays", function () { var r = Be$1(t.props.day, t.props.locale, t.props.calendarStartDay), n = [], o = t.formatWeekNumber(r); if (t.props.showWeekNumber) { var a = t.props.onWeekSelect ? t.handleWeekClick.bind(ke$1(t), r, o) : void 0; n.push( /*#__PURE__*/React__namespace.default.createElement(It, { key: "W", weekNumber: o, onClick: a, ariaLabelPrefix: t.props.ariaLabelPrefix })); } return n.concat([0, 1, 2, 3, 4, 5, 6].map(function (n) { var o = addDays(r, n); return /*#__PURE__*/React__namespace.default.createElement(Tt, { ariaLabelPrefixWhenEnabled: t.props.chooseDayAriaLabelPrefix, ariaLabelPrefixWhenDisabled: t.props.disabledDayAriaLabelPrefix, key: o.valueOf(), day: o, month: t.props.month, onClick: t.handleDayClick.bind(ke$1(t), o), onMouseEnter: t.handleDayMouseEnter.bind(ke$1(t), o), minDate: t.props.minDate, maxDate: t.props.maxDate, excludeDates: t.props.excludeDates, excludeDateIntervals: t.props.excludeDateIntervals, includeDates: t.props.includeDates, includeDateIntervals: t.props.includeDateIntervals, highlightDates: t.props.highlightDates, selectingDate: t.props.selectingDate, filterDate: t.props.filterDate, preSelection: t.props.preSelection, selected: t.props.selected, selectsStart: t.props.selectsStart, selectsEnd: t.props.selectsEnd, selectsRange: t.props.selectsRange, selectsDisabledDaysInRange: t.props.selectsDisabledDaysInRange, startDate: t.props.startDate, endDate: t.props.endDate, dayClassName: t.props.dayClassName, renderDayContents: t.props.renderDayContents, disabledKeyboardNavigation: t.props.disabledKeyboardNavigation, handleOnKeyDown: t.props.handleOnKeyDown, isInputFocused: t.props.isInputFocused, containerRef: t.props.containerRef, inline: t.props.inline, shouldFocusDayInline: t.props.shouldFocusDayInline, monthShowsDuplicateDaysEnd: t.props.monthShowsDuplicateDaysEnd, monthShowsDuplicateDaysStart: t.props.monthShowsDuplicateDaysStart, locale: t.props.locale }); })); }), t; } return fe$1(n, [{ key: "render", value: function () { return /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__week" }, this.renderDays()); } }], [{ key: "defaultProps", get: function () { return { shouldCloseOnSelect: !0 }; } }]), n; }(), Rt = function (t) { De$1(o, React__namespace.default.Component); var n = Se$1(o); function o() { var t; he$1(this, o); for (var a = arguments.length, s = new Array(a), i = 0; i < a; i++) s[i] = arguments[i]; return ye$1(ke$1(t = n.call.apply(n, [this].concat(s))), "MONTH_REFS", Ce$1(Array(12)).map(function () { return /*#__PURE__*/React__namespace.default.createRef(); })), ye$1(ke$1(t), "QUARTER_REFS", Ce$1(Array(4)).map(function () { return /*#__PURE__*/React__namespace.default.createRef(); })), ye$1(ke$1(t), "isDisabled", function (e) { return ot(e, t.props); }), ye$1(ke$1(t), "isExcluded", function (e) { return at(e, t.props); }), ye$1(ke$1(t), "handleDayClick", function (e, r) { t.props.onDayClick && t.props.onDayClick(e, r, t.props.orderInDisplay); }), ye$1(ke$1(t), "handleDayMouseEnter", function (e) { t.props.onDayMouseEnter && t.props.onDayMouseEnter(e); }), ye$1(ke$1(t), "handleMouseLeave", function () { t.props.onMouseLeave && t.props.onMouseLeave(); }), ye$1(ke$1(t), "isRangeStartMonth", function (e) { var r = t.props, n = r.day, o = r.startDate, a = r.endDate; return !(!o || !a) && qe$1(setMonth(n, e), o); }), ye$1(ke$1(t), "isRangeStartQuarter", function (e) { var r = t.props, n = r.day, o = r.startDate, a = r.endDate; return !(!o || !a) && Ue$1(setQuarter(n, e), o); }), ye$1(ke$1(t), "isRangeEndMonth", function (e) { var r = t.props, n = r.day, o = r.startDate, a = r.endDate; return !(!o || !a) && qe$1(setMonth(n, e), a); }), ye$1(ke$1(t), "isRangeEndQuarter", function (e) { var r = t.props, n = r.day, o = r.startDate, a = r.endDate; return !(!o || !a) && Ue$1(setQuarter(n, e), a); }), ye$1(ke$1(t), "isWeekInMonth", function (e) { var r = t.props.day, n = addDays(e, 6); return qe$1(e, r) || qe$1(n, r); }), ye$1(ke$1(t), "isCurrentMonth", function (e, t) { return getYear(e) === getYear(Ye$1()) && t === getMonth(Ye$1()); }), ye$1(ke$1(t), "isCurrentQuarter", function (e, t) { return getYear(e) === getYear(Ye$1()) && t === getQuarter(Ye$1()); }), ye$1(ke$1(t), "isSelectedMonth", function (e, t, r) { return getMonth(e) === t && getYear(e) === getYear(r); }), ye$1(ke$1(t), "isSelectedQuarter", function (e, t, r) { return getQuarter(e) === t && getYear(e) === getYear(r); }), ye$1(ke$1(t), "renderWeeks", function () { for (var r = [], n = t.props.fixedHeight, o = 0, a = !1, s = Be$1(We$1(t.props.day), t.props.locale, t.props.calendarStartDay); r.push( /*#__PURE__*/React__namespace.default.createElement(Lt, { ariaLabelPrefix: t.props.weekAriaLabelPrefix, chooseDayAriaLabelPrefix: t.props.chooseDayAriaLabelPrefix, disabledDayAriaLabelPrefix: t.props.disabledDayAriaLabelPrefix, key: o, day: s, month: getMonth(t.props.day), onDayClick: t.handleDayClick, onDayMouseEnter: t.handleDayMouseEnter, onWeekSelect: t.props.onWeekSelect, formatWeekNumber: t.props.formatWeekNumber, locale: t.props.locale, minDate: t.props.minDate, maxDate: t.props.maxDate, excludeDates: t.props.excludeDates, excludeDateIntervals: t.props.excludeDateIntervals, includeDates: t.props.includeDates, includeDateIntervals: t.props.includeDateIntervals, inline: t.props.inline, shouldFocusDayInline: t.props.shouldFocusDayInline, highlightDates: t.props.highlightDates, selectingDate: t.props.selectingDate, filterDate: t.props.filterDate, preSelection: t.props.preSelection, selected: t.props.selected, selectsStart: t.props.selectsStart, selectsEnd: t.props.selectsEnd, selectsRange: t.props.selectsRange, selectsDisabledDaysInRange: t.props.selectsDisabledDaysInRange, showWeekNumber: t.props.showWeekNumbers, startDate: t.props.startDate, endDate: t.props.endDate, dayClassName: t.props.dayClassName, setOpen: t.props.setOpen, shouldCloseOnSelect: t.props.shouldCloseOnSelect, disabledKeyboardNavigation: t.props.disabledKeyboardNavigation, renderDayContents: t.props.renderDayContents, handleOnKeyDown: t.props.handleOnKeyDown, isInputFocused: t.props.isInputFocused, containerRef: t.props.containerRef, calendarStartDay: t.props.calendarStartDay, monthShowsDuplicateDaysEnd: t.props.monthShowsDuplicateDaysEnd, monthShowsDuplicateDaysStart: t.props.monthShowsDuplicateDaysStart })), !a;) { o++, s = addWeeks(s, 1); var i = n && o >= 6, p = !n && !t.isWeekInMonth(s); if (i || p) { if (!t.props.peekNextMonth) break; a = !0; } } return r; }), ye$1(ke$1(t), "onMonthClick", function (e, r) { t.handleDayClick(We$1(setMonth(t.props.day, r)), e); }), ye$1(ke$1(t), "handleMonthNavigation", function (e, r) { t.isDisabled(r) || t.isExcluded(r) || (t.props.setPreSelection(r), t.MONTH_REFS[e].current && t.MONTH_REFS[e].current.focus()); }), ye$1(ke$1(t), "onMonthKeyDown", function (e, r) { e.preventDefault(); var n = e.key; if (!t.props.disabledKeyboardNavigation) switch (n) { case "Enter": t.onMonthClick(e, r), t.props.setPreSelection(t.props.selected); break; case "ArrowRight": t.handleMonthNavigation(11 === r ? 0 : r + 1, addMonths(t.props.preSelection, 1)); break; case "ArrowLeft": t.handleMonthNavigation(0 === r ? 11 : r - 1, subMonths(t.props.preSelection, 1)); break; case "ArrowUp": t.handleMonthNavigation(r >= 0 && r <= 2 ? r + 9 : r - 3, subMonths(t.props.preSelection, 3)); break; case "ArrowDown": t.handleMonthNavigation(r >= 9 && r <= 11 ? r - 9 : r + 3, addMonths(t.props.preSelection, 3)); } }), ye$1(ke$1(t), "onQuarterClick", function (e, r) { t.handleDayClick(je$1(setQuarter(t.props.day, r)), e); }), ye$1(ke$1(t), "handleQuarterNavigation", function (e, r) { t.isDisabled(r) || t.isExcluded(r) || (t.props.setPreSelection(r), t.QUARTER_REFS[e - 1].current && t.QUARTER_REFS[e - 1].current.focus()); }), ye$1(ke$1(t), "onQuarterKeyDown", function (e, r) { var n = e.key; if (!t.props.disabledKeyboardNavigation) switch (n) { case "Enter": t.onQuarterClick(e, r), t.props.setPreSelection(t.props.selected); break; case "ArrowRight": t.handleQuarterNavigation(4 === r ? 1 : r + 1, addQuarters(t.props.preSelection, 1)); break; case "ArrowLeft": t.handleQuarterNavigation(1 === r ? 4 : r - 1, subQuarters(t.props.preSelection, 1)); } }), ye$1(ke$1(t), "getMonthClassNames", function (e) { var n = t.props, o = n.day, a = n.startDate, s = n.endDate, i = n.selected, p = n.minDate, c = n.maxDate, l = n.preSelection, d = n.monthClassName, u = n.excludeDates, h = n.includeDates, m = d ? d(setMonth(o, e)) : void 0, f = setMonth(o, e); return r("react-datepicker__month-text", "react-datepicker__month-".concat(e), m, { "react-datepicker__month--disabled": (p || c || u || h) && st(f, t.props), "react-datepicker__month--selected": t.isSelectedMonth(o, e, i), "react-datepicker__month-text--keyboard-selected": !t.props.disabledKeyboardNavigation && getMonth(l) === e, "react-datepicker__month--in-range": it(a, s, e, o), "react-datepicker__month--range-start": t.isRangeStartMonth(e), "react-datepicker__month--range-end": t.isRangeEndMonth(e), "react-datepicker__month-text--today": t.isCurrentMonth(o, e) }); }), ye$1(ke$1(t), "getTabIndex", function (e) { var r = getMonth(t.props.preSelection); return t.props.disabledKeyboardNavigation || e !== r ? "-1" : "0"; }), ye$1(ke$1(t), "getQuarterTabIndex", function (e) { var r = getQuarter(t.props.preSelection); return t.props.disabledKeyboardNavigation || e !== r ? "-1" : "0"; }), ye$1(ke$1(t), "getAriaLabel", function (e) { var r = t.props, n = r.chooseDayAriaLabelPrefix, o = void 0 === n ? "Choose" : n, a = r.disabledDayAriaLabelPrefix, s = void 0 === a ? "Not available" : a, i = r.day, p = setMonth(i, e), c = t.isDisabled(p) || t.isExcluded(p) ? s : o; return "".concat(c, " ").concat(Ie$1(p, "MMMM yyyy")); }), ye$1(ke$1(t), "getQuarterClassNames", function (e) { var n = t.props, o = n.day, a = n.startDate, s = n.endDate, i = n.selected, p = n.minDate, c = n.maxDate, l = n.preSelection; return r("react-datepicker__quarter-text", "react-datepicker__quarter-".concat(e), { "react-datepicker__quarter--disabled": (p || c) && pt(setQuarter(o, e), t.props), "react-datepicker__quarter--selected": t.isSelectedQuarter(o, e, i), "react-datepicker__quarter-text--keyboard-selected": getQuarter(l) === e, "react-datepicker__quarter--in-range": lt(a, s, e, o), "react-datepicker__quarter--range-start": t.isRangeStartQuarter(e), "react-datepicker__quarter--range-end": t.isRangeEndQuarter(e) }); }), ye$1(ke$1(t), "renderMonths", function () { var r = t.props, n = r.showFullMonthYearPicker, o = r.showTwoColumnMonthYearPicker, a = r.showFourColumnMonthYearPicker, s = r.locale, i = r.day, p = r.selected; return (a ? [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]] : o ? [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10, 11]] : [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]]).map(function (r, o) { return /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__month-wrapper", key: o }, r.map(function (r, o) { return /*#__PURE__*/React__namespace.default.createElement("div", { ref: t.MONTH_REFS[r], key: o, onClick: function (e) { t.onMonthClick(e, r); }, onKeyDown: function (e) { t.onMonthKeyDown(e, r); }, tabIndex: t.getTabIndex(r), className: t.getMonthClassNames(r), role: "option", "aria-label": t.getAriaLabel(r), "aria-current": t.isCurrentMonth(i, r) ? "date" : void 0, "aria-selected": t.isSelectedMonth(i, r, p) }, n ? tt$1(r, s) : rt(r, s)); })); }); }), ye$1(ke$1(t), "renderQuarters", function () { var r = t.props, n = r.day, o = r.selected; return /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__quarter-wrapper" }, [1, 2, 3, 4].map(function (r, a) { return /*#__PURE__*/React__namespace.default.createElement("div", { key: a, ref: t.QUARTER_REFS[a], role: "option", onClick: function (e) { t.onQuarterClick(e, r); }, onKeyDown: function (e) { t.onQuarterKeyDown(e, r); }, className: t.getQuarterClassNames(r), "aria-selected": t.isSelectedQuarter(n, r, o), tabIndex: t.getQuarterTabIndex(r), "aria-current": t.isCurrentQuarter(n, r) ? "date" : void 0 }, nt(r, t.props.locale)); })); }), ye$1(ke$1(t), "getClassNames", function () { var e = t.props; e.day; var n = e.selectingDate, o = e.selectsStart, a = e.selectsEnd, s = e.showMonthYearPicker, i = e.showQuarterYearPicker; return r("react-datepicker__month", { "react-datepicker__month--selecting-range": n && (o || a) }, { "react-datepicker__monthPicker": s }, { "react-datepicker__quarterPicker": i }); }), t; } return fe$1(o, [{ key: "render", value: function () { var t = this.props, r = t.showMonthYearPicker, n = t.showQuarterYearPicker, o = t.day, a = t.ariaLabelPrefix, s = void 0 === a ? "month " : a; return /*#__PURE__*/React__namespace.default.createElement("div", { className: this.getClassNames(), onMouseLeave: this.handleMouseLeave, "aria-label": "".concat(s, " ").concat(Ie$1(o, "yyyy-MM")), role: "listbox" }, r ? this.renderMonths() : n ? this.renderQuarters() : this.renderWeeks()); } }]), o; }(), Ft = function (t) { De$1(n, React__namespace.default.Component); var r = Se$1(n); function n() { var t; he$1(this, n); for (var o = arguments.length, a = new Array(o), i = 0; i < o; i++) a[i] = arguments[i]; return ye$1(ke$1(t = r.call.apply(r, [this].concat(a))), "state", { height: null }), ye$1(ke$1(t), "handleClick", function (e) { (t.props.minTime || t.props.maxTime) && mt(e, t.props) || (t.props.excludeTimes || t.props.includeTimes || t.props.filterTime) && ht(e, t.props) || t.props.onChange(e); }), ye$1(ke$1(t), "isSelectedTime", function (e, r, n) { return t.props.selected && r === getHours(e) && n === getMinutes(e); }), ye$1(ke$1(t), "liClasses", function (e, r, n) { var o = ["react-datepicker__time-list-item", t.props.timeClassName ? t.props.timeClassName(e, r, n) : void 0]; return t.isSelectedTime(e, r, n) && o.push("react-datepicker__time-list-item--selected"), ((t.props.minTime || t.props.maxTime) && mt(e, t.props) || (t.props.excludeTimes || t.props.includeTimes || t.props.filterTime) && ht(e, t.props)) && o.push("react-datepicker__time-list-item--disabled"), t.props.injectTimes && (60 * getHours(e) + getMinutes(e)) % t.props.intervals != 0 && o.push("react-datepicker__time-list-item--injected"), o.join(" "); }), ye$1(ke$1(t), "handleOnKeyDown", function (e, r) { " " === e.key && (e.preventDefault(), e.key = "Enter"), "Enter" === e.key && t.handleClick(r), t.props.handleOnKeyDown(e); }), ye$1(ke$1(t), "renderTimes", function () { for (var r = [], n = t.props.format ? t.props.format : "p", o = t.props.intervals, a = Ke$1(Ye$1(t.props.selected)), i = 1440 / o, p = t.props.injectTimes && t.props.injectTimes.sort(function (e, t) { return e - t; }), c = t.props.selected || t.props.openToDate || Ye$1(), l = getHours(c), d = getMinutes(c), u = setHours(setMinutes(a, d), l), h = 0; h < i; h++) { var m = addMinutes(a, h * o); if (r.push(m), p) { var f = bt(a, m, h, o, p); r = r.concat(f); } } return r.map(function (r, o) { return /*#__PURE__*/React__namespace.default.createElement("li", { key: o, onClick: t.handleClick.bind(ke$1(t), r), className: t.liClasses(r, l, d), ref: function (e) { (isBefore(r, u) || $e$1(r, u)) && (t.centerLi = e); }, onKeyDown: function (e) { t.handleOnKeyDown(e, r); }, tabIndex: "0", "aria-selected": t.isSelectedTime(r, l, d) ? "true" : void 0 }, Ie$1(r, n, t.props.locale)); }); }), t; } return fe$1(n, [{ key: "componentDidMount", value: function () { this.list.scrollTop = this.centerLi && n.calcCenterPosition(this.props.monthRef ? this.props.monthRef.clientHeight - this.header.clientHeight : this.list.clientHeight, this.centerLi), this.props.monthRef && this.header && this.setState({ height: this.props.monthRef.clientHeight - this.header.clientHeight }); } }, { key: "render", value: function () { var t = this, r = this.state.height; return /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__time-container ".concat(this.props.todayButton ? "react-datepicker__time-container--with-today-button" : "") }, /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__header react-datepicker__header--time ".concat(this.props.showTimeSelectOnly ? "react-datepicker__header--time--only" : ""), ref: function (e) { t.header = e; } }, /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker-time__header" }, this.props.timeCaption)), /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__time" }, /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__time-box" }, /*#__PURE__*/React__namespace.default.createElement("ul", { className: "react-datepicker__time-list", ref: function (e) { t.list = e; }, style: r ? { height: r } : {}, tabIndex: "0" }, this.renderTimes())))); } }], [{ key: "defaultProps", get: function () { return { intervals: 30, onTimeChange: function () {}, todayButton: null, timeCaption: "Time" }; } }]), n; }(); ye$1(Ft, "calcCenterPosition", function (e, t) { return t.offsetTop - (e / 2 - t.clientHeight / 2); }); var At = function (t) { De$1(o, React__namespace.default.Component); var n = Se$1(o); function o(t) { var a; return he$1(this, o), ye$1(ke$1(a = n.call(this, t)), "YEAR_REFS", Ce$1(Array(a.props.yearItemNumber)).map(function () { return /*#__PURE__*/React__namespace.default.createRef(); })), ye$1(ke$1(a), "isDisabled", function (e) { return ot(e, a.props); }), ye$1(ke$1(a), "isExcluded", function (e) { return at(e, a.props); }), ye$1(ke$1(a), "updateFocusOnPaginate", function (e) { var t = function () { this.YEAR_REFS[e].current.focus(); }.bind(ke$1(a)); window.requestAnimationFrame(t); }), ye$1(ke$1(a), "handleYearClick", function (e, t) { a.props.onDayClick && a.props.onDayClick(e, t); }), ye$1(ke$1(a), "handleYearNavigation", function (e, t) { var r = a.props, n = r.date, o = r.yearItemNumber, s = Ct(n, o).startPeriod; a.isDisabled(t) || a.isExcluded(t) || (a.props.setPreSelection(t), e - s == -1 ? a.updateFocusOnPaginate(o - 1) : e - s === o ? a.updateFocusOnPaginate(0) : a.YEAR_REFS[e - s].current.focus()); }), ye$1(ke$1(a), "isSameDay", function (e, t) { return ze$1(e, t); }), ye$1(ke$1(a), "isCurrentYear", function (e) { return e === getYear(Ye$1()); }), ye$1(ke$1(a), "isKeyboardSelected", function (e) { var t = He$1(setYear(a.props.date, e)); return !a.props.disabledKeyboardNavigation && !a.props.inline && !ze$1(t, He$1(a.props.selected)) && ze$1(t, He$1(a.props.preSelection)); }), ye$1(ke$1(a), "onYearClick", function (e, t) { var r = a.props.date; a.handleYearClick(He$1(setYear(r, t)), e); }), ye$1(ke$1(a), "onYearKeyDown", function (e, t) { var r = e.key; if (!a.props.disabledKeyboardNavigation) switch (r) { case "Enter": a.onYearClick(e, t), a.props.setPreSelection(a.props.selected); break; case "ArrowRight": a.handleYearNavigation(t + 1, addYears(a.props.preSelection, 1)); break; case "ArrowLeft": a.handleYearNavigation(t - 1, subYears(a.props.preSelection, 1)); } }), ye$1(ke$1(a), "getYearClassNames", function (e) { var t = a.props, n = t.minDate, o = t.maxDate, s = t.selected, i = t.excludeDates, p = t.includeDates, c = t.filterDate; return r("react-datepicker__year-text", { "react-datepicker__year-text--selected": e === getYear(s), "react-datepicker__year-text--disabled": (n || o || i || p || c) && ct(e, a.props), "react-datepicker__year-text--keyboard-selected": a.isKeyboardSelected(e), "react-datepicker__year-text--today": a.isCurrentYear(e) }); }), ye$1(ke$1(a), "getYearTabIndex", function (e) { return a.props.disabledKeyboardNavigation ? "-1" : e === getYear(a.props.preSelection) ? "0" : "-1"; }), a; } return fe$1(o, [{ key: "render", value: function () { for (var t = this, r = [], n = this.props, o = Ct(n.date, n.yearItemNumber), a = o.startPeriod, s = o.endPeriod, i = function (n) { r.push( /*#__PURE__*/React__namespace.default.createElement("div", { ref: t.YEAR_REFS[n - a], onClick: function (e) { t.onYearClick(e, n); }, onKeyDown: function (e) { t.onYearKeyDown(e, n); }, tabIndex: t.getYearTabIndex(n), className: t.getYearClassNames(n), key: n, "aria-current": t.isCurrentYear(n) ? "date" : void 0 }, n)); }, p = a; p <= s; p++) i(p); return /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__year" }, /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__year-wrapper" }, r)); } }]), o; }(), Kt = function (t) { De$1(n, React__namespace.default.Component); var r = Se$1(n); function n(t) { var o; return he$1(this, n), ye$1(ke$1(o = r.call(this, t)), "onTimeChange", function (e) { o.setState({ time: e }); var t = new Date(); t.setHours(e.split(":")[0]), t.setMinutes(e.split(":")[1]), o.props.onChange(t); }), ye$1(ke$1(o), "renderTimeInput", function () { var t = o.state.time, r = o.props, n = r.date, a = r.timeString, s = r.customTimeInput; return s ? /*#__PURE__*/React__namespace.default.cloneElement(s, { date: n, value: t, onChange: o.onTimeChange }) : /*#__PURE__*/React__namespace.default.createElement("input", { type: "time", className: "react-datepicker-time__input", placeholder: "Time", name: "time-input", required: !0, value: t, onChange: function (e) { o.onTimeChange(e.target.value || a); } }); }), o.state = { time: o.props.timeString }, o; } return fe$1(n, [{ key: "render", value: function () { return /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__input-time-container" }, /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker-time__caption" }, this.props.timeInputLabel), /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker-time__input-container" }, /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker-time__input" }, this.renderTimeInput()))); } }], [{ key: "getDerivedStateFromProps", value: function (e, t) { return e.timeString !== t.time ? { time: e.timeString } : null; } }]), n; }(); function Bt(t) { var r = t.className, n = t.children, o = t.showPopperArrow, a = t.arrowProps, s = void 0 === a ? {} : a; return /*#__PURE__*/React__namespace.default.createElement("div", { className: r }, o && /*#__PURE__*/React__namespace.default.createElement("div", ve$1({ className: "react-datepicker__triangle" }, s)), n); } var Wt = ["react-datepicker__year-select", "react-datepicker__month-select", "react-datepicker__month-year-select"], Ht = function (t) { De$1(o, React__namespace.default.Component); var n = Se$1(o); function o(t) { var a; return he$1(this, o), ye$1(ke$1(a = n.call(this, t)), "handleClickOutside", function (e) { a.props.onClickOutside(e); }), ye$1(ke$1(a), "setClickOutsideRef", function () { return a.containerRef.current; }), ye$1(ke$1(a), "handleDropdownFocus", function (e) { (function () { var e = ((arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).className || "").split(/\s+/); return Wt.some(function (t) { return e.indexOf(t) >= 0; }); })(e.target) && a.props.onDropdownFocus(); }), ye$1(ke$1(a), "getDateInView", function () { var e = a.props, t = e.preSelection, r = e.selected, n = e.openToDate, o = wt(a.props), s = gt(a.props), i = Ye$1(), p = n || r || t; return p || (o && isBefore(i, o) ? o : s && isAfter(i, s) ? s : i); }), ye$1(ke$1(a), "increaseMonth", function () { a.setState(function (e) { var t = e.date; return { date: addMonths(t, 1) }; }, function () { return a.handleMonthChange(a.state.date); }); }), ye$1(ke$1(a), "decreaseMonth", function () { a.setState(function (e) { var t = e.date; return { date: subMonths(t, 1) }; }, function () { return a.handleMonthChange(a.state.date); }); }), ye$1(ke$1(a), "handleDayClick", function (e, t, r) { a.props.onSelect(e, t, r), a.props.setPreSelection && a.props.setPreSelection(e); }), ye$1(ke$1(a), "handleDayMouseEnter", function (e) { a.setState({ selectingDate: e }), a.props.onDayMouseEnter && a.props.onDayMouseEnter(e); }), ye$1(ke$1(a), "handleMonthMouseLeave", function () { a.setState({ selectingDate: null }), a.props.onMonthMouseLeave && a.props.onMonthMouseLeave(); }), ye$1(ke$1(a), "handleYearChange", function (e) { a.props.onYearChange && (a.props.onYearChange(e), a.setState({ isRenderAriaLiveMessage: !0 })), a.props.adjustDateOnChange && (a.props.onSelect && a.props.onSelect(e), a.props.setOpen && a.props.setOpen(!0)), a.props.setPreSelection && a.props.setPreSelection(e); }), ye$1(ke$1(a), "handleMonthChange", function (e) { a.props.onMonthChange && (a.props.onMonthChange(e), a.setState({ isRenderAriaLiveMessage: !0 })), a.props.adjustDateOnChange && (a.props.onSelect && a.props.onSelect(e), a.props.setOpen && a.props.setOpen(!0)), a.props.setPreSelection && a.props.setPreSelection(e); }), ye$1(ke$1(a), "handleMonthYearChange", function (e) { a.handleYearChange(e), a.handleMonthChange(e); }), ye$1(ke$1(a), "changeYear", function (e) { a.setState(function (t) { var r = t.date; return { date: setYear(r, e) }; }, function () { return a.handleYearChange(a.state.date); }); }), ye$1(ke$1(a), "changeMonth", function (e) { a.setState(function (t) { var r = t.date; return { date: setMonth(r, e) }; }, function () { return a.handleMonthChange(a.state.date); }); }), ye$1(ke$1(a), "changeMonthYear", function (e) { a.setState(function (t) { var r = t.date; return { date: setYear(setMonth(r, getMonth(e)), getYear(e)) }; }, function () { return a.handleMonthYearChange(a.state.date); }); }), ye$1(ke$1(a), "header", function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : a.state.date, n = Be$1(t, a.props.locale, a.props.calendarStartDay), o = []; return a.props.showWeekNumbers && o.push( /*#__PURE__*/React__namespace.default.createElement("div", { key: "W", className: "react-datepicker__day-name" }, a.props.weekLabel || "#")), o.concat([0, 1, 2, 3, 4, 5, 6].map(function (t) { var o = addDays(n, t), s = a.formatWeekday(o, a.props.locale), i = a.props.weekDayClassName ? a.props.weekDayClassName(o) : void 0; return /*#__PURE__*/React__namespace.default.createElement("div", { key: t, className: r("react-datepicker__day-name", i) }, s); })); }), ye$1(ke$1(a), "formatWeekday", function (e, t) { return a.props.formatWeekDay ? function (e, t, r) { return t(Ie$1(e, "EEEE", r)); }(e, a.props.formatWeekDay, t) : a.props.useWeekdaysShort ? function (e, t) { return Ie$1(e, "EEE", t); }(e, t) : function (e, t) { return Ie$1(e, "EEEEEE", t); }(e, t); }), ye$1(ke$1(a), "decreaseYear", function () { a.setState(function (e) { var t = e.date; return { date: subYears(t, a.props.showYearPicker ? a.props.yearItemNumber : 1) }; }, function () { return a.handleYearChange(a.state.date); }); }), ye$1(ke$1(a), "renderPreviousButton", function () { if (!a.props.renderCustomHeader) { var t; switch (!0) { case a.props.showMonthYearPicker: t = vt(a.state.date, a.props); break; case a.props.showYearPicker: t = function (e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, r = t.minDate, n = t.yearItemNumber, o = void 0 === n ? 12 : n, a = Ct(He$1(subYears(e, o)), o).endPeriod, s = r && getYear(r); return s && s > a || !1; }(a.state.date, a.props); break; default: t = ft(a.state.date, a.props); } if ((a.props.forceShowMonthNavigation || a.props.showDisabledMonthNavigation || !t) && !a.props.showTimeSelectOnly) { var r = ["react-datepicker__navigation", "react-datepicker__navigation--previous"], n = a.decreaseMonth; (a.props.showMonthYearPicker || a.props.showQuarterYearPicker || a.props.showYearPicker) && (n = a.decreaseYear), t && a.props.showDisabledMonthNavigation && (r.push("react-datepicker__navigation--previous--disabled"), n = null); var o = a.props.showMonthYearPicker || a.props.showQuarterYearPicker || a.props.showYearPicker, s = a.props, i = s.previousMonthButtonLabel, p = s.previousYearButtonLabel, c = a.props, l = c.previousMonthAriaLabel, d = void 0 === l ? "string" == typeof i ? i : "Previous Month" : l, u = c.previousYearAriaLabel, h = void 0 === u ? "string" == typeof p ? p : "Previous Year" : u; return /*#__PURE__*/React__namespace.default.createElement("button", { type: "button", className: r.join(" "), onClick: n, onKeyDown: a.props.handleOnKeyDown, "aria-label": o ? h : d }, /*#__PURE__*/React__namespace.default.createElement("span", { className: ["react-datepicker__navigation-icon", "react-datepicker__navigation-icon--previous"].join(" ") }, o ? a.props.previousYearButtonLabel : a.props.previousMonthButtonLabel)); } } }), ye$1(ke$1(a), "increaseYear", function () { a.setState(function (e) { var t = e.date; return { date: addYears(t, a.props.showYearPicker ? a.props.yearItemNumber : 1) }; }, function () { return a.handleYearChange(a.state.date); }); }), ye$1(ke$1(a), "renderNextButton", function () { if (!a.props.renderCustomHeader) { var t; switch (!0) { case a.props.showMonthYearPicker: t = Dt(a.state.date, a.props); break; case a.props.showYearPicker: t = function (e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, r = t.maxDate, n = t.yearItemNumber, o = void 0 === n ? 12 : n, a = Ct(addYears(e, o), o).startPeriod, s = r && getYear(r); return s && s < a || !1; }(a.state.date, a.props); break; default: t = yt(a.state.date, a.props); } if ((a.props.forceShowMonthNavigation || a.props.showDisabledMonthNavigation || !t) && !a.props.showTimeSelectOnly) { var r = ["react-datepicker__navigation", "react-datepicker__navigation--next"]; a.props.showTimeSelect && r.push("react-datepicker__navigation--next--with-time"), a.props.todayButton && r.push("react-datepicker__navigation--next--with-today-button"); var n = a.increaseMonth; (a.props.showMonthYearPicker || a.props.showQuarterYearPicker || a.props.showYearPicker) && (n = a.increaseYear), t && a.props.showDisabledMonthNavigation && (r.push("react-datepicker__navigation--next--disabled"), n = null); var o = a.props.showMonthYearPicker || a.props.showQuarterYearPicker || a.props.showYearPicker, s = a.props, i = s.nextMonthButtonLabel, p = s.nextYearButtonLabel, c = a.props, l = c.nextMonthAriaLabel, d = void 0 === l ? "string" == typeof i ? i : "Next Month" : l, h = c.nextYearAriaLabel, m = void 0 === h ? "string" == typeof p ? p : "Next Year" : h; return /*#__PURE__*/React__namespace.default.createElement("button", { type: "button", className: r.join(" "), onClick: n, onKeyDown: a.props.handleOnKeyDown, "aria-label": o ? m : d }, /*#__PURE__*/React__namespace.default.createElement("span", { className: ["react-datepicker__navigation-icon", "react-datepicker__navigation-icon--next"].join(" ") }, o ? a.props.nextYearButtonLabel : a.props.nextMonthButtonLabel)); } } }), ye$1(ke$1(a), "renderCurrentMonth", function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : a.state.date, r = ["react-datepicker__current-month"]; return a.props.showYearDropdown && r.push("react-datepicker__current-month--hasYearDropdown"), a.props.showMonthDropdown && r.push("react-datepicker__current-month--hasMonthDropdown"), a.props.showMonthYearDropdown && r.push("react-datepicker__current-month--hasMonthYearDropdown"), /*#__PURE__*/React__namespace.default.createElement("div", { className: r.join(" ") }, Ie$1(t, a.props.dateFormat, a.props.locale)); }), ye$1(ke$1(a), "renderYearDropdown", function () { var t = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; if (a.props.showYearDropdown && !t) return /*#__PURE__*/React__namespace.default.createElement(Pt, { adjustDateOnChange: a.props.adjustDateOnChange, date: a.state.date, onSelect: a.props.onSelect, setOpen: a.props.setOpen, dropdownMode: a.props.dropdownMode, onChange: a.changeYear, minDate: a.props.minDate, maxDate: a.props.maxDate, year: getYear(a.state.date), scrollableYearDropdown: a.props.scrollableYearDropdown, yearDropdownItemNumber: a.props.yearDropdownItemNumber }); }), ye$1(ke$1(a), "renderMonthDropdown", function () { var t = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; if (a.props.showMonthDropdown && !t) return /*#__PURE__*/React__namespace.default.createElement(Nt, { dropdownMode: a.props.dropdownMode, locale: a.props.locale, onChange: a.changeMonth, month: getMonth(a.state.date), useShortMonthInDropdown: a.props.useShortMonthInDropdown }); }), ye$1(ke$1(a), "renderMonthYearDropdown", function () { var t = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; if (a.props.showMonthYearDropdown && !t) return /*#__PURE__*/React__namespace.default.createElement(Ot, { dropdownMode: a.props.dropdownMode, locale: a.props.locale, dateFormat: a.props.dateFormat, onChange: a.changeMonthYear, minDate: a.props.minDate, maxDate: a.props.maxDate, date: a.state.date, scrollableMonthYearDropdown: a.props.scrollableMonthYearDropdown }); }), ye$1(ke$1(a), "handleTodayButtonClick", function (e) { a.props.onSelect(Qe(), e), a.props.setPreSelection && a.props.setPreSelection(Qe()); }), ye$1(ke$1(a), "renderTodayButton", function () { if (a.props.todayButton && !a.props.showTimeSelectOnly) return /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__today-button", onClick: function (e) { return a.handleTodayButtonClick(e); } }, a.props.todayButton); }), ye$1(ke$1(a), "renderDefaultHeader", function (t) { var r = t.monthDate, n = t.i; return /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__header ".concat(a.props.showTimeSelect ? "react-datepicker__header--has-time-select" : "") }, a.renderCurrentMonth(r), /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__header__dropdown react-datepicker__header__dropdown--".concat(a.props.dropdownMode), onFocus: a.handleDropdownFocus }, a.renderMonthDropdown(0 !== n), a.renderMonthYearDropdown(0 !== n), a.renderYearDropdown(0 !== n)), /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__day-names" }, a.header(r))); }), ye$1(ke$1(a), "renderCustomHeader", function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, r = t.monthDate, n = t.i; if (a.props.showTimeSelect && !a.state.monthContainer || a.props.showTimeSelectOnly) return null; var o = ft(a.state.date, a.props), s = yt(a.state.date, a.props), i = vt(a.state.date, a.props), p = Dt(a.state.date, a.props), c = !a.props.showMonthYearPicker && !a.props.showQuarterYearPicker && !a.props.showYearPicker; return /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__header react-datepicker__header--custom", onFocus: a.props.onDropdownFocus }, a.props.renderCustomHeader(de$1(de$1({}, a.state), {}, { customHeaderCount: n, monthDate: r, changeMonth: a.changeMonth, changeYear: a.changeYear, decreaseMonth: a.decreaseMonth, increaseMonth: a.increaseMonth, decreaseYear: a.decreaseYear, increaseYear: a.increaseYear, prevMonthButtonDisabled: o, nextMonthButtonDisabled: s, prevYearButtonDisabled: i, nextYearButtonDisabled: p })), c && /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__day-names" }, a.header(r))); }), ye$1(ke$1(a), "renderYearHeader", function () { var t = a.state.date, r = a.props, n = r.showYearPicker, o = Ct(t, r.yearItemNumber), s = o.startPeriod, i = o.endPeriod; return /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__header react-datepicker-year-header" }, n ? "".concat(s, " - ").concat(i) : getYear(t)); }), ye$1(ke$1(a), "renderHeader", function (e) { switch (!0) { case void 0 !== a.props.renderCustomHeader: return a.renderCustomHeader(e); case a.props.showMonthYearPicker || a.props.showQuarterYearPicker || a.props.showYearPicker: return a.renderYearHeader(e); default: return a.renderDefaultHeader(e); } }), ye$1(ke$1(a), "renderMonths", function () { if (!a.props.showTimeSelectOnly && !a.props.showYearPicker) { for (var t = [], r = a.props.showPreviousMonths ? a.props.monthsShown - 1 : 0, n = subMonths(a.state.date, r), o = 0; o < a.props.monthsShown; ++o) { var s = o - a.props.monthSelectedIn, i = addMonths(n, s), p = "month-".concat(o), c = o < a.props.monthsShown - 1, d = o > 0; t.push( /*#__PURE__*/React__namespace.default.createElement("div", { key: p, ref: function (e) { a.monthContainer = e; }, className: "react-datepicker__month-container" }, a.renderHeader({ monthDate: i, i: o }), /*#__PURE__*/React__namespace.default.createElement(Rt, { chooseDayAriaLabelPrefix: a.props.chooseDayAriaLabelPrefix, disabledDayAriaLabelPrefix: a.props.disabledDayAriaLabelPrefix, weekAriaLabelPrefix: a.props.weekAriaLabelPrefix, ariaLabelPrefix: a.props.monthAriaLabelPrefix, onChange: a.changeMonthYear, day: i, dayClassName: a.props.dayClassName, calendarStartDay: a.props.calendarStartDay, monthClassName: a.props.monthClassName, onDayClick: a.handleDayClick, handleOnKeyDown: a.props.handleOnDayKeyDown, onDayMouseEnter: a.handleDayMouseEnter, onMouseLeave: a.handleMonthMouseLeave, onWeekSelect: a.props.onWeekSelect, orderInDisplay: o, formatWeekNumber: a.props.formatWeekNumber, locale: a.props.locale, minDate: a.props.minDate, maxDate: a.props.maxDate, excludeDates: a.props.excludeDates, excludeDateIntervals: a.props.excludeDateIntervals, highlightDates: a.props.highlightDates, selectingDate: a.state.selectingDate, includeDates: a.props.includeDates, includeDateIntervals: a.props.includeDateIntervals, inline: a.props.inline, shouldFocusDayInline: a.props.shouldFocusDayInline, fixedHeight: a.props.fixedHeight, filterDate: a.props.filterDate, preSelection: a.props.preSelection, setPreSelection: a.props.setPreSelection, selected: a.props.selected, selectsStart: a.props.selectsStart, selectsEnd: a.props.selectsEnd, selectsRange: a.props.selectsRange, selectsDisabledDaysInRange: a.props.selectsDisabledDaysInRange, showWeekNumbers: a.props.showWeekNumbers, startDate: a.props.startDate, endDate: a.props.endDate, peekNextMonth: a.props.peekNextMonth, setOpen: a.props.setOpen, shouldCloseOnSelect: a.props.shouldCloseOnSelect, renderDayContents: a.props.renderDayContents, disabledKeyboardNavigation: a.props.disabledKeyboardNavigation, showMonthYearPicker: a.props.showMonthYearPicker, showFullMonthYearPicker: a.props.showFullMonthYearPicker, showTwoColumnMonthYearPicker: a.props.showTwoColumnMonthYearPicker, showFourColumnMonthYearPicker: a.props.showFourColumnMonthYearPicker, showYearPicker: a.props.showYearPicker, showQuarterYearPicker: a.props.showQuarterYearPicker, isInputFocused: a.props.isInputFocused, containerRef: a.containerRef, monthShowsDuplicateDaysEnd: c, monthShowsDuplicateDaysStart: d }))); } return t; } }), ye$1(ke$1(a), "renderYears", function () { if (!a.props.showTimeSelectOnly) return a.props.showYearPicker ? /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__year--container" }, a.renderHeader(), /*#__PURE__*/React__namespace.default.createElement(At, ve$1({ onDayClick: a.handleDayClick, date: a.state.date }, a.props))) : void 0; }), ye$1(ke$1(a), "renderTimeSection", function () { if (a.props.showTimeSelect && (a.state.monthContainer || a.props.showTimeSelectOnly)) return /*#__PURE__*/React__namespace.default.createElement(Ft, { selected: a.props.selected, openToDate: a.props.openToDate, onChange: a.props.onTimeChange, timeClassName: a.props.timeClassName, format: a.props.timeFormat, includeTimes: a.props.includeTimes, intervals: a.props.timeIntervals, minTime: a.props.minTime, maxTime: a.props.maxTime, excludeTimes: a.props.excludeTimes, filterTime: a.props.filterTime, timeCaption: a.props.timeCaption, todayButton: a.props.todayButton, showMonthDropdown: a.props.showMonthDropdown, showMonthYearDropdown: a.props.showMonthYearDropdown, showYearDropdown: a.props.showYearDropdown, withPortal: a.props.withPortal, monthRef: a.state.monthContainer, injectTimes: a.props.injectTimes, locale: a.props.locale, handleOnKeyDown: a.props.handleOnKeyDown, showTimeSelectOnly: a.props.showTimeSelectOnly }); }), ye$1(ke$1(a), "renderInputTimeSection", function () { var t = new Date(a.props.selected), r = Te$1(t) && Boolean(a.props.selected) ? "".concat(St(t.getHours()), ":").concat(St(t.getMinutes())) : ""; if (a.props.showTimeInput) return /*#__PURE__*/React__namespace.default.createElement(Kt, { date: t, timeString: r, timeInputLabel: a.props.timeInputLabel, onChange: a.props.onTimeChange, customTimeInput: a.props.customTimeInput }); }), ye$1(ke$1(a), "renderAriaLiveRegion", function () { var t, r = Ct(a.state.date, a.props.yearItemNumber), n = r.startPeriod, o = r.endPeriod; return t = a.props.showYearPicker ? "".concat(n, " - ").concat(o) : a.props.showMonthYearPicker || a.props.showQuarterYearPicker ? getYear(a.state.date) : "".concat(tt$1(getMonth(a.state.date), a.props.locale), " ").concat(getYear(a.state.date)), /*#__PURE__*/React__namespace.default.createElement("span", { role: "alert", "aria-live": "polite", className: "react-datepicker__aria-live" }, a.state.isRenderAriaLiveMessage && t); }), ye$1(ke$1(a), "renderChildren", function () { if (a.props.children) return /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__children-container" }, a.props.children); }), a.containerRef = /*#__PURE__*/React__namespace.default.createRef(), a.state = { date: a.getDateInView(), selectingDate: null, monthContainer: null, isRenderAriaLiveMessage: !1 }, a; } return fe$1(o, [{ key: "componentDidMount", value: function () { var e = this; this.props.showTimeSelect && (this.assignMonthContainer = void e.setState({ monthContainer: e.monthContainer })); } }, { key: "componentDidUpdate", value: function (e) { !this.props.preSelection || ze$1(this.props.preSelection, e.preSelection) && this.props.monthSelectedIn === e.monthSelectedIn ? this.props.openToDate && !ze$1(this.props.openToDate, e.openToDate) && this.setState({ date: this.props.openToDate }) : this.setState({ date: this.props.preSelection }); } }, { key: "render", value: function () { var t = this.props.container || Bt; return /*#__PURE__*/React__namespace.default.createElement("div", { ref: this.containerRef }, /*#__PURE__*/React__namespace.default.createElement(t, { className: r("react-datepicker", this.props.className, { "react-datepicker--time-only": this.props.showTimeSelectOnly }), showPopperArrow: this.props.showPopperArrow, arrowProps: this.props.arrowProps }, this.renderAriaLiveRegion(), this.renderPreviousButton(), this.renderNextButton(), this.renderMonths(), this.renderYears(), this.renderTodayButton(), this.renderTimeSection(), this.renderInputTimeSection(), this.renderChildren())); } }], [{ key: "defaultProps", get: function () { return { onDropdownFocus: function () {}, monthsShown: 1, monthSelectedIn: 0, forceShowMonthNavigation: !1, timeCaption: "Time", previousYearButtonLabel: "Previous Year", nextYearButtonLabel: "Next Year", previousMonthButtonLabel: "Previous Month", nextMonthButtonLabel: "Next Month", customTimeInput: null, yearItemNumber: 12 }; } }]), o; }(), jt = function (t) { De$1(n, React__namespace.default.Component); var r = Se$1(n); function n(e) { var t; return he$1(this, n), (t = r.call(this, e)).el = document.createElement("div"), t; } return fe$1(n, [{ key: "componentDidMount", value: function () { this.portalRoot = (this.props.portalHost || document).getElementById(this.props.portalId), this.portalRoot || (this.portalRoot = document.createElement("div"), this.portalRoot.setAttribute("id", this.props.portalId), (this.props.portalHost || document.body).appendChild(this.portalRoot)), this.portalRoot.appendChild(this.el); } }, { key: "componentWillUnmount", value: function () { this.portalRoot.removeChild(this.el); } }, { key: "render", value: function () { return /*#__PURE__*/ReactDOM__namespace.default.createPortal(this.props.children, this.el); } }]), n; }(), Qt = function (e) { return !e.disabled && -1 !== e.tabIndex; }, Vt = function (t) { De$1(n, React__namespace.default.Component); var r = Se$1(n); function n(t) { var o; return he$1(this, n), ye$1(ke$1(o = r.call(this, t)), "getTabChildren", function () { return Array.prototype.slice.call(o.tabLoopRef.current.querySelectorAll("[tabindex], a, button, input, select, textarea"), 1, -1).filter(Qt); }), ye$1(ke$1(o), "handleFocusStart", function (e) { var t = o.getTabChildren(); t && t.length > 1 && t[t.length - 1].focus(); }), ye$1(ke$1(o), "handleFocusEnd", function (e) { var t = o.getTabChildren(); t && t.length > 1 && t[0].focus(); }), o.tabLoopRef = /*#__PURE__*/React__namespace.default.createRef(), o; } return fe$1(n, [{ key: "render", value: function () { return this.props.enableTabLoop ? /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__tab-loop", ref: this.tabLoopRef }, /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__tab-loop__start", tabIndex: "0", onFocus: this.handleFocusStart }), this.props.children, /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__tab-loop__end", tabIndex: "0", onFocus: this.handleFocusEnd })) : this.props.children; } }], [{ key: "defaultProps", get: function () { return { enableTabLoop: !0 }; } }]), n; }(), qt = function (t) { De$1(o, React__namespace.default.Component); var n = Se$1(o); function o() { return he$1(this, o), n.apply(this, arguments); } return fe$1(o, [{ key: "render", value: function () { var t, n = this.props, o = n.className, a = n.wrapperClassName, s = n.hidePopper, i = n.popperComponent, p = n.popperModifiers, c = n.popperPlacement, l = n.popperProps, d = n.targetComponent, u = n.enableTabLoop, h = n.popperOnKeyDown, m = n.portalId, f = n.portalHost; if (!s) { var y = r("react-datepicker-popper", o); t = /*#__PURE__*/React__namespace.default.createElement(Popper, ve$1({ modifiers: p, placement: c }, l), function (t) { var r = t.ref, n = t.style, o = t.placement, a = t.arrowProps; return /*#__PURE__*/React__namespace.default.createElement(Vt, { enableTabLoop: u }, /*#__PURE__*/React__namespace.default.createElement("div", { ref: r, style: n, className: y, "data-placement": o, onKeyDown: h }, /*#__PURE__*/React__namespace.default.cloneElement(i, { arrowProps: a }))); }); } this.props.popperContainer && (t = /*#__PURE__*/React__namespace.default.createElement(this.props.popperContainer, {}, t)), m && !s && (t = /*#__PURE__*/React__namespace.default.createElement(jt, { portalId: m, portalHost: f }, t)); var v = r("react-datepicker-wrapper", a); return /*#__PURE__*/React__namespace.default.createElement(Manager, { className: "react-datepicker-manager" }, /*#__PURE__*/React__namespace.default.createElement(Reference, null, function (t) { var r = t.ref; return /*#__PURE__*/React__namespace.default.createElement("div", { ref: r, className: v }, d); }), t); } }], [{ key: "defaultProps", get: function () { return { hidePopper: !0, popperModifiers: [], popperProps: {}, popperPlacement: "bottom-start" }; } }]), o; }(), Ut = onClickOutsideHOC(Ht); var zt = function (t) { De$1(a, React__namespace.default.Component); var o = Se$1(a); function a(t) { var s; return he$1(this, a), ye$1(ke$1(s = o.call(this, t)), "getPreSelection", function () { return s.props.openToDate ? s.props.openToDate : s.props.selectsEnd && s.props.startDate ? s.props.startDate : s.props.selectsStart && s.props.endDate ? s.props.endDate : Ye$1(); }), ye$1(ke$1(s), "calcInitialState", function () { var e, t = s.getPreSelection(), r = wt(s.props), n = gt(s.props), o = r && isBefore(t, startOfDay(r)) ? r : n && isAfter(t, endOfDay(n)) ? n : t; return { open: s.props.startOpen || !1, preventFocus: !1, preSelection: null !== (e = s.props.selectsRange ? s.props.startDate : s.props.selected) && void 0 !== e ? e : o, highlightDates: kt(s.props.highlightDates), focused: !1, shouldFocusDayInline: !1, isRenderAriaLiveMessage: !1 }; }), ye$1(ke$1(s), "clearPreventFocusTimeout", function () { s.preventFocusTimeout && clearTimeout(s.preventFocusTimeout); }), ye$1(ke$1(s), "setFocus", function () { s.input && s.input.focus && s.input.focus({ preventScroll: !0 }); }), ye$1(ke$1(s), "setBlur", function () { s.input && s.input.blur && s.input.blur(), s.cancelFocusInput(); }), ye$1(ke$1(s), "setOpen", function (e) { var t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; s.setState({ open: e, preSelection: e && s.state.open ? s.state.preSelection : s.calcInitialState().preSelection, lastPreSelectChange: Gt }, function () { e || s.setState(function (e) { return { focused: !!t && e.focused }; }, function () { !t && s.setBlur(), s.setState({ inputValue: null }); }); }); }), ye$1(ke$1(s), "inputOk", function () { return isDate(s.state.preSelection); }), ye$1(ke$1(s), "isCalendarOpen", function () { return void 0 === s.props.open ? s.state.open && !s.props.disabled && !s.props.readOnly : s.props.open; }), ye$1(ke$1(s), "handleFocus", function (e) { s.state.preventFocus || (s.props.onFocus(e), s.props.preventOpenOnFocus || s.props.readOnly || s.setOpen(!0)), s.setState({ focused: !0 }); }), ye$1(ke$1(s), "cancelFocusInput", function () { clearTimeout(s.inputFocusTimeout), s.inputFocusTimeout = null; }), ye$1(ke$1(s), "deferFocusInput", function () { s.cancelFocusInput(), s.inputFocusTimeout = setTimeout(function () { return s.setFocus(); }, 1); }), ye$1(ke$1(s), "handleDropdownFocus", function () { s.cancelFocusInput(); }), ye$1(ke$1(s), "handleBlur", function (e) { (!s.state.open || s.props.withPortal || s.props.showTimeInput) && s.props.onBlur(e), s.setState({ focused: !1 }); }), ye$1(ke$1(s), "handleCalendarClickOutside", function (e) { s.props.inline || s.setOpen(!1), s.props.onClickOutside(e), s.props.withPortal && e.preventDefault(); }), ye$1(ke$1(s), "handleChange", function () { for (var e = arguments.length, t = new Array(e), r = 0; r < e; r++) t[r] = arguments[r]; var n = t[0]; if (!s.props.onChangeRaw || (s.props.onChangeRaw.apply(ke$1(s), t), "function" == typeof n.isDefaultPrevented && !n.isDefaultPrevented())) { s.setState({ inputValue: n.target.value, lastPreSelectChange: $t }); var o = Oe$1(n.target.value, s.props.dateFormat, s.props.locale, s.props.strictParsing, s.props.minDate); s.props.showTimeSelectOnly && !ze$1(o, s.props.selected) && (o = set(s.props.selected, null == o ? { hours: getHours(s.props.selected), minutes: getMinutes(s.props.selected), seconds: getSeconds(s.props.selected) } : { hours: getHours(o), minutes: getMinutes(o), seconds: getSeconds(o) })), !o && n.target.value || s.setSelected(o, n, !0); } }), ye$1(ke$1(s), "handleSelect", function (e, t, r) { if (s.setState({ preventFocus: !0 }, function () { return s.preventFocusTimeout = setTimeout(function () { return s.setState({ preventFocus: !1 }); }, 50), s.preventFocusTimeout; }), s.props.onChangeRaw && s.props.onChangeRaw(t), s.setSelected(e, t, !1, r), s.setState({ isRenderAriaLiveMessage: !0 }), !s.props.shouldCloseOnSelect || s.props.showTimeSelect) s.setPreSelection(e);else if (!s.props.inline) { s.props.selectsRange || s.setOpen(!1); var n = s.props, o = n.startDate, a = n.endDate; !o || a || isBefore(e, o) || s.setOpen(!1); } }), ye$1(ke$1(s), "setSelected", function (e, t, r, n) { var o = e; if (s.props.showYearPicker) { if (null !== o && ct(getYear(o), s.props)) return; } else if (s.props.showMonthYearPicker) { if (null !== o && st(o, s.props)) return; } else if (null !== o && ot(o, s.props)) return; var a = s.props, i = a.onChange, p = a.selectsRange, c = a.startDate, l = a.endDate; if (!$e$1(s.props.selected, o) || s.props.allowSameDay || p) if (null !== o && (!s.props.selected || r && (s.props.showTimeSelect || s.props.showTimeSelectOnly || s.props.showTimeInput) || (o = Re$1(o, { hour: getHours(s.props.selected), minute: getMinutes(s.props.selected), second: getSeconds(s.props.selected) })), s.props.inline || s.setState({ preSelection: o }), s.props.focusSelectedMonth || s.setState({ monthSelectedIn: n })), p) { var d = c && !l, u = c && l; !c && !l ? i([o, null], t) : d && (isBefore(o, c) ? i([o, null], t) : i([c, o], t)), u && i([o, null], t); } else i(o, t); r || (s.props.onSelect(o, t), s.setState({ inputValue: null })); }), ye$1(ke$1(s), "setPreSelection", function (e) { var t = void 0 !== s.props.minDate, r = void 0 !== s.props.maxDate, n = !0; if (e) { var o = startOfDay(e); if (t && r) n = Ge$1(e, s.props.minDate, s.props.maxDate);else if (t) { var a = startOfDay(s.props.minDate); n = isAfter(e, a) || $e$1(o, a); } else if (r) { var i = endOfDay(s.props.maxDate); n = isBefore(e, i) || $e$1(o, i); } } n && s.setState({ preSelection: e }); }), ye$1(ke$1(s), "handleTimeChange", function (e) { var t = Re$1(s.props.selected ? s.props.selected : s.getPreSelection(), { hour: getHours(e), minute: getMinutes(e) }); s.setState({ preSelection: t }), s.props.onChange(t), s.props.shouldCloseOnSelect && s.setOpen(!1), s.props.showTimeInput && s.setOpen(!0), (s.props.showTimeSelectOnly || s.props.showTimeSelect) && s.setState({ isRenderAriaLiveMessage: !0 }), s.setState({ inputValue: null }); }), ye$1(ke$1(s), "onInputClick", function () { s.props.disabled || s.props.readOnly || s.setOpen(!0), s.props.onInputClick(); }), ye$1(ke$1(s), "onInputKeyDown", function (e) { s.props.onKeyDown(e); var t = e.key; if (s.state.open || s.props.inline || s.props.preventOpenOnFocus) { if (s.state.open) { if ("ArrowDown" === t || "ArrowUp" === t) { e.preventDefault(); var r = s.calendar.componentNode && s.calendar.componentNode.querySelector('.react-datepicker__day[tabindex="0"]'); return void (r && r.focus({ preventScroll: !0 })); } var n = Ye$1(s.state.preSelection); "Enter" === t ? (e.preventDefault(), s.inputOk() && s.state.lastPreSelectChange === Gt ? (s.handleSelect(n, e), !s.props.shouldCloseOnSelect && s.setPreSelection(n)) : s.setOpen(!1)) : "Escape" === t && (e.preventDefault(), s.setOpen(!1)), s.inputOk() || s.props.onInputError({ code: 1, msg: "Date input not valid." }); } } else "ArrowDown" !== t && "ArrowUp" !== t && "Enter" !== t || s.onInputClick(); }), ye$1(ke$1(s), "onPortalKeyDown", function (e) { "Escape" === e.key && (e.preventDefault(), s.setState({ preventFocus: !0 }, function () { s.setOpen(!1), setTimeout(function () { s.setFocus(), s.setState({ preventFocus: !1 }); }); })); }), ye$1(ke$1(s), "onDayKeyDown", function (e) { s.props.onKeyDown(e); var t = e.key, r = Ye$1(s.state.preSelection); if ("Enter" === t) e.preventDefault(), s.handleSelect(r, e), !s.props.shouldCloseOnSelect && s.setPreSelection(r);else if ("Escape" === t) e.preventDefault(), s.setOpen(!1), s.inputOk() || s.props.onInputError({ code: 1, msg: "Date input not valid." });else if (!s.props.disabledKeyboardNavigation) { var n; switch (t) { case "ArrowLeft": n = subDays(r, 1); break; case "ArrowRight": n = addDays(r, 1); break; case "ArrowUp": n = subWeeks(r, 1); break; case "ArrowDown": n = addWeeks(r, 1); break; case "PageUp": n = subMonths(r, 1); break; case "PageDown": n = addMonths(r, 1); break; case "Home": n = subYears(r, 1); break; case "End": n = addYears(r, 1); } if (!n) return void (s.props.onInputError && s.props.onInputError({ code: 1, msg: "Date input not valid." })); if (e.preventDefault(), s.setState({ lastPreSelectChange: Gt }), s.props.adjustDateOnChange && s.setSelected(n), s.setPreSelection(n), s.props.inline) { var o = getMonth(r), a = getMonth(n), i = getYear(r), d = getYear(n); o !== a || i !== d ? s.setState({ shouldFocusDayInline: !0 }) : s.setState({ shouldFocusDayInline: !1 }); } } }), ye$1(ke$1(s), "onPopperKeyDown", function (e) { "Escape" === e.key && (e.preventDefault(), s.setState({ preventFocus: !0 }, function () { s.setOpen(!1), setTimeout(function () { s.setFocus(), s.setState({ preventFocus: !1 }); }); })); }), ye$1(ke$1(s), "onClearClick", function (e) { e && e.preventDefault && e.preventDefault(), s.props.selectsRange ? s.props.onChange([null, null], e) : s.props.onChange(null, e), s.setState({ inputValue: null }); }), ye$1(ke$1(s), "clear", function () { s.onClearClick(); }), ye$1(ke$1(s), "onScroll", function (e) { "boolean" == typeof s.props.closeOnScroll && s.props.closeOnScroll ? e.target !== document && e.target !== document.documentElement && e.target !== document.body || s.setOpen(!1) : "function" == typeof s.props.closeOnScroll && s.props.closeOnScroll(e) && s.setOpen(!1); }), ye$1(ke$1(s), "renderCalendar", function () { return s.props.inline || s.isCalendarOpen() ? /*#__PURE__*/React__namespace.default.createElement(Ut, { ref: function (e) { s.calendar = e; }, locale: s.props.locale, calendarStartDay: s.props.calendarStartDay, chooseDayAriaLabelPrefix: s.props.chooseDayAriaLabelPrefix, disabledDayAriaLabelPrefix: s.props.disabledDayAriaLabelPrefix, weekAriaLabelPrefix: s.props.weekAriaLabelPrefix, monthAriaLabelPrefix: s.props.monthAriaLabelPrefix, adjustDateOnChange: s.props.adjustDateOnChange, setOpen: s.setOpen, shouldCloseOnSelect: s.props.shouldCloseOnSelect, dateFormat: s.props.dateFormatCalendar, useWeekdaysShort: s.props.useWeekdaysShort, formatWeekDay: s.props.formatWeekDay, dropdownMode: s.props.dropdownMode, selected: s.props.selected, preSelection: s.state.preSelection, onSelect: s.handleSelect, onWeekSelect: s.props.onWeekSelect, openToDate: s.props.openToDate, minDate: s.props.minDate, maxDate: s.props.maxDate, selectsStart: s.props.selectsStart, selectsEnd: s.props.selectsEnd, selectsRange: s.props.selectsRange, startDate: s.props.startDate, endDate: s.props.endDate, excludeDates: s.props.excludeDates, excludeDateIntervals: s.props.excludeDateIntervals, filterDate: s.props.filterDate, onClickOutside: s.handleCalendarClickOutside, formatWeekNumber: s.props.formatWeekNumber, highlightDates: s.state.highlightDates, includeDates: s.props.includeDates, includeDateIntervals: s.props.includeDateIntervals, includeTimes: s.props.includeTimes, injectTimes: s.props.injectTimes, inline: s.props.inline, shouldFocusDayInline: s.state.shouldFocusDayInline, peekNextMonth: s.props.peekNextMonth, showMonthDropdown: s.props.showMonthDropdown, showPreviousMonths: s.props.showPreviousMonths, useShortMonthInDropdown: s.props.useShortMonthInDropdown, showMonthYearDropdown: s.props.showMonthYearDropdown, showWeekNumbers: s.props.showWeekNumbers, showYearDropdown: s.props.showYearDropdown, withPortal: s.props.withPortal, forceShowMonthNavigation: s.props.forceShowMonthNavigation, showDisabledMonthNavigation: s.props.showDisabledMonthNavigation, scrollableYearDropdown: s.props.scrollableYearDropdown, scrollableMonthYearDropdown: s.props.scrollableMonthYearDropdown, todayButton: s.props.todayButton, weekLabel: s.props.weekLabel, outsideClickIgnoreClass: "react-datepicker-ignore-onclickoutside", fixedHeight: s.props.fixedHeight, monthsShown: s.props.monthsShown, monthSelectedIn: s.state.monthSelectedIn, onDropdownFocus: s.handleDropdownFocus, onMonthChange: s.props.onMonthChange, onYearChange: s.props.onYearChange, dayClassName: s.props.dayClassName, weekDayClassName: s.props.weekDayClassName, monthClassName: s.props.monthClassName, timeClassName: s.props.timeClassName, showTimeSelect: s.props.showTimeSelect, showTimeSelectOnly: s.props.showTimeSelectOnly, onTimeChange: s.handleTimeChange, timeFormat: s.props.timeFormat, timeIntervals: s.props.timeIntervals, minTime: s.props.minTime, maxTime: s.props.maxTime, excludeTimes: s.props.excludeTimes, filterTime: s.props.filterTime, timeCaption: s.props.timeCaption, className: s.props.calendarClassName, container: s.props.calendarContainer, yearItemNumber: s.props.yearItemNumber, yearDropdownItemNumber: s.props.yearDropdownItemNumber, previousMonthAriaLabel: s.props.previousMonthAriaLabel, previousMonthButtonLabel: s.props.previousMonthButtonLabel, nextMonthAriaLabel: s.props.nextMonthAriaLabel, nextMonthButtonLabel: s.props.nextMonthButtonLabel, previousYearAriaLabel: s.props.previousYearAriaLabel, previousYearButtonLabel: s.props.previousYearButtonLabel, nextYearAriaLabel: s.props.nextYearAriaLabel, nextYearButtonLabel: s.props.nextYearButtonLabel, timeInputLabel: s.props.timeInputLabel, disabledKeyboardNavigation: s.props.disabledKeyboardNavigation, renderCustomHeader: s.props.renderCustomHeader, popperProps: s.props.popperProps, renderDayContents: s.props.renderDayContents, onDayMouseEnter: s.props.onDayMouseEnter, onMonthMouseLeave: s.props.onMonthMouseLeave, selectsDisabledDaysInRange: s.props.selectsDisabledDaysInRange, showTimeInput: s.props.showTimeInput, showMonthYearPicker: s.props.showMonthYearPicker, showFullMonthYearPicker: s.props.showFullMonthYearPicker, showTwoColumnMonthYearPicker: s.props.showTwoColumnMonthYearPicker, showFourColumnMonthYearPicker: s.props.showFourColumnMonthYearPicker, showYearPicker: s.props.showYearPicker, showQuarterYearPicker: s.props.showQuarterYearPicker, showPopperArrow: s.props.showPopperArrow, excludeScrollbar: s.props.excludeScrollbar, handleOnKeyDown: s.props.onKeyDown, handleOnDayKeyDown: s.onDayKeyDown, isInputFocused: s.state.focused, customTimeInput: s.props.customTimeInput, setPreSelection: s.setPreSelection }, s.props.children) : null; }), ye$1(ke$1(s), "renderAriaLiveRegion", function () { var t, r = s.props, n = r.dateFormat, o = r.locale, a = s.props.showTimeInput || s.props.showTimeSelect ? "PPPPp" : "PPPP"; return t = s.props.selectsRange ? "Selected start date: ".concat(Le$1(s.props.startDate, { dateFormat: a, locale: o }), ". ").concat(s.props.endDate ? "End date: " + Le$1(s.props.endDate, { dateFormat: a, locale: o }) : "") : s.props.showTimeSelectOnly ? "Selected time: ".concat(Le$1(s.props.selected, { dateFormat: n, locale: o })) : s.props.showYearPicker ? "Selected year: ".concat(Le$1(s.props.selected, { dateFormat: "yyyy", locale: o })) : s.props.showMonthYearPicker ? "Selected month: ".concat(Le$1(s.props.selected, { dateFormat: "MMMM yyyy", locale: o })) : s.props.showQuarterYearPicker ? "Selected quarter: ".concat(Le$1(s.props.selected, { dateFormat: "yyyy, QQQ", locale: o })) : "Selected date: ".concat(Le$1(s.props.selected, { dateFormat: a, locale: o })), /*#__PURE__*/React__namespace.default.createElement("span", { role: "alert", "aria-live": "polite", className: "react-datepicker__aria-live" }, s.state.isRenderAriaLiveMessage && t); }), ye$1(ke$1(s), "renderDateInput", function () { var t, n = r(s.props.className, ye$1({}, "react-datepicker-ignore-onclickoutside", s.state.open)), o = s.props.customInput || /*#__PURE__*/React__namespace.default.createElement("input", { type: "text" }), a = s.props.customInputRef || "ref", i = "string" == typeof s.props.value ? s.props.value : "string" == typeof s.state.inputValue ? s.state.inputValue : s.props.selectsRange ? function (e, t, r) { if (!e) return ""; var n = Le$1(e, r), o = t ? Le$1(t, r) : ""; return "".concat(n, " - ").concat(o); }(s.props.startDate, s.props.endDate, s.props) : Le$1(s.props.selected, s.props); return /*#__PURE__*/React__namespace.default.cloneElement(o, (ye$1(t = {}, a, function (e) { s.input = e; }), ye$1(t, "value", i), ye$1(t, "onBlur", s.handleBlur), ye$1(t, "onChange", s.handleChange), ye$1(t, "onClick", s.onInputClick), ye$1(t, "onFocus", s.handleFocus), ye$1(t, "onKeyDown", s.onInputKeyDown), ye$1(t, "id", s.props.id), ye$1(t, "name", s.props.name), ye$1(t, "form", s.props.form), ye$1(t, "autoFocus", s.props.autoFocus), ye$1(t, "placeholder", s.props.placeholderText), ye$1(t, "disabled", s.props.disabled), ye$1(t, "autoComplete", s.props.autoComplete), ye$1(t, "className", r(o.props.className, n)), ye$1(t, "title", s.props.title), ye$1(t, "readOnly", s.props.readOnly), ye$1(t, "required", s.props.required), ye$1(t, "tabIndex", s.props.tabIndex), ye$1(t, "aria-describedby", s.props.ariaDescribedBy), ye$1(t, "aria-invalid", s.props.ariaInvalid), ye$1(t, "aria-labelledby", s.props.ariaLabelledBy), ye$1(t, "aria-required", s.props.ariaRequired), t)); }), ye$1(ke$1(s), "renderClearButton", function () { var t = s.props, r = t.isClearable, n = t.selected, o = t.startDate, a = t.endDate, i = t.clearButtonTitle, p = t.clearButtonClassName, c = void 0 === p ? "" : p, l = t.ariaLabelClose, d = void 0 === l ? "Close" : l; return !r || null == n && null == o && null == a ? null : /*#__PURE__*/React__namespace.default.createElement("button", { type: "button", className: "react-datepicker__close-icon ".concat(c).trim(), "aria-label": d, onClick: s.onClearClick, title: i, tabIndex: -1 }); }), s.state = s.calcInitialState(), s; } return fe$1(a, [{ key: "componentDidMount", value: function () { window.addEventListener("scroll", this.onScroll, !0); } }, { key: "componentDidUpdate", value: function (e, t) { var r, n; e.inline && (r = e.selected, n = this.props.selected, r && n ? getMonth(r) !== getMonth(n) || getYear(r) !== getYear(n) : r !== n) && this.setPreSelection(this.props.selected), void 0 !== this.state.monthSelectedIn && e.monthsShown !== this.props.monthsShown && this.setState({ monthSelectedIn: 0 }), e.highlightDates !== this.props.highlightDates && this.setState({ highlightDates: kt(this.props.highlightDates) }), t.focused || $e$1(e.selected, this.props.selected) || this.setState({ inputValue: null }), t.open !== this.state.open && (!1 === t.open && !0 === this.state.open && this.props.onCalendarOpen(), !0 === t.open && !1 === this.state.open && this.props.onCalendarClose()); } }, { key: "componentWillUnmount", value: function () { this.clearPreventFocusTimeout(), window.removeEventListener("scroll", this.onScroll, !0); } }, { key: "renderInputContainer", value: function () { var t = this.props.showIcon; return /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__input-container ".concat(t ? "react-datepicker__view-calendar-icon" : "") }, t && /*#__PURE__*/React__namespace.default.createElement("svg", { className: "react-datepicker__calendar-icon", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512" }, /*#__PURE__*/React__namespace.default.createElement("path", { d: "M96 32V64H48C21.5 64 0 85.5 0 112v48H448V112c0-26.5-21.5-48-48-48H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V64H160V32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192H0V464c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V192z" })), this.renderAriaLiveRegion(), this.renderDateInput(), this.renderClearButton()); } }, { key: "render", value: function () { var t = this.renderCalendar(); if (this.props.inline) return t; if (this.props.withPortal) { var r = this.state.open ? /*#__PURE__*/React__namespace.default.createElement(Vt, { enableTabLoop: this.props.enableTabLoop }, /*#__PURE__*/React__namespace.default.createElement("div", { className: "react-datepicker__portal", tabIndex: -1, onKeyDown: this.onPortalKeyDown }, t)) : null; return this.state.open && this.props.portalId && (r = /*#__PURE__*/React__namespace.default.createElement(jt, { portalId: this.props.portalId, portalHost: this.props.portalHost }, r)), /*#__PURE__*/React__namespace.default.createElement("div", null, this.renderInputContainer(), r); } return /*#__PURE__*/React__namespace.default.createElement(qt, { className: this.props.popperClassName, wrapperClassName: this.props.wrapperClassName, hidePopper: !this.isCalendarOpen(), portalId: this.props.portalId, portalHost: this.props.portalHost, popperModifiers: this.props.popperModifiers, targetComponent: this.renderInputContainer(), popperContainer: this.props.popperContainer, popperComponent: t, popperPlacement: this.props.popperPlacement, popperProps: this.props.popperProps, popperOnKeyDown: this.onPopperKeyDown, enableTabLoop: this.props.enableTabLoop }); } }], [{ key: "defaultProps", get: function () { return { allowSameDay: !1, dateFormat: "MM/dd/yyyy", dateFormatCalendar: "LLLL yyyy", onChange: function () {}, disabled: !1, disabledKeyboardNavigation: !1, dropdownMode: "scroll", onFocus: function () {}, onBlur: function () {}, onKeyDown: function () {}, onInputClick: function () {}, onSelect: function () {}, onClickOutside: function () {}, onMonthChange: function () {}, onCalendarOpen: function () {}, onCalendarClose: function () {}, preventOpenOnFocus: !1, onYearChange: function () {}, onInputError: function () {}, monthsShown: 1, readOnly: !1, withPortal: !1, selectsDisabledDaysInRange: !1, shouldCloseOnSelect: !0, showTimeSelect: !1, showTimeInput: !1, showPreviousMonths: !1, showMonthYearPicker: !1, showFullMonthYearPicker: !1, showTwoColumnMonthYearPicker: !1, showFourColumnMonthYearPicker: !1, showYearPicker: !1, showQuarterYearPicker: !1, strictParsing: !1, timeIntervals: 30, timeCaption: "Time", previousMonthAriaLabel: "Previous Month", previousMonthButtonLabel: "Previous Month", nextMonthAriaLabel: "Next Month", nextMonthButtonLabel: "Next Month", previousYearAriaLabel: "Previous Year", previousYearButtonLabel: "Previous Year", nextYearAriaLabel: "Next Year", nextYearButtonLabel: "Next Year", timeInputLabel: "Time", enableTabLoop: !0, yearItemNumber: 12, renderDayContents: function (e) { return e; }, focusSelectedMonth: !1, showPopperArrow: !0, excludeScrollbar: !0, customTimeInput: null, calendarStartDay: void 0 }; } }]), a; }(), $t = "input", Gt = "navigate"; /* eslint-disable max-len */ /** * @interface Theme * @load ./theme.doc.md * @section design-system */ /** * Color palette. * * @memberof Theme * @alias colors * @property {string} primary100=#4268F6 <div style="background: #4268F6; height: 20px;" /> * @property {string} primary80=#6483F8 <div style="background: #6483F8; height: 20px;" /> * @property {string} primary60=#879FFA <div style="background: #879FFA; height: 20px;" /> * @property {string} primary40=#A9BAFA <div style="background: #A9BAFA; height: 20px;" /> * @property {string} primary20=#CBD5FD <div style="background: #CBD5FD; height: 20px;" /> * @property {string} accent=#38CAF1 <div style="background: #38CAF1; height: 20px;" /> * @property {string} love=#e6282b <div style="background: #e6282b; height: 20px;" /> * @property {string} grey100=#1C1C38 <div style="background: #1C1C38; height: 20px;" /> * @property {string} grey80=#454655 <div style="background: #454655; height: 20px;" /> * @property {string} grey60=#898A9A <div style="background: #898A9A; height: 20px;" /> * @property {string} grey40=#C0C0CA <div style="background: #C0C0CA; height: 20px;" /> * @property {string} grey20=#F6F7FB <div style="background: #F6F7FB; height: 20px;" /> * @property {string} white=#fff <div style="background: #fff; height: 20px;" /> * @property {string} errorDark=#DE405D <div style="background: #DE405D; height: 20px;" /> * @property {string} error=#FF4567 <div style="background: #FF4567; height: 20px;" /> * @property {string} errorLight=#FFA5B5 <div style="background: #FFA5B5; height: 20px;" /> * @property {string} successDark=#32A887 <div style="background: #32A887; height: 20px;" /> * @property {string} success=#70C9B0 <div style="background: #70C9B0; height: 20px;" /> * @property {string} successLight=#DBF0F1 <div style="background: #DBF0F1; height: 20px;" /> * @property {string} infoDark=#4268F6 <div style="background: #4268F6; height: 20px;" /> * @property {string} info=#879FFA <div style="background: #879FFA; height: 20px;" /> * @property {string} infoLight=#CBD5FD <div style="background: #CBD5FD; height: 20px;" /> * @property {string} filterBg=#343F87 <div style="background: #343F87; height: 20px;" /> * @property {string} hoverBg=#535B8E <div style="background: #535B8E; height: 20px;" /> * @property {string} inputBorder=#898A9A <div style="background: #898A9A; height: 20px;" /> * @property {string} border=#DDE1E5, <div style="background: #DDE1E5; height: 20px;" /> * @property {string} separator=#C0C0CA <div style="background: #C0C0CA; height: 20px;" /> * @property {string} highlight=#F6F7FB <div style="background: #F6F7FB; height: 20px;" /> * @property {string} filterInputBorder=rgba(255,255,255,0.15) <div style="background: rgba(255,255,255,0.15); height: 20px;" /> * @property {string} filterDisabled=rgba(83,91,142,0.05) <div style="background: rgba(83,91,142,0.05); height: 20px;" /> * @property {string} bg=#F6F7FB <div style="background: #F6F7FB; height: 20px;" /> */ const colors$1 = { // global border: '#EEEEEF', text: '#0C1E29', // primary primary100: '#3040D6', primary80: '#6483F8', primary60: '#99A9EE', primary40: '#BBC5F4', primary20: '#DDE2F9', // accent accent: '#3B3552', // grey grey100: '#0C1E29', grey80: '#454655', grey60: '#898A9A', grey40: '#BBC3CB', grey20: '#F2F2F2', // common white: '#fff', black: '#000', // alerts errorDark: '#9d0616', error: '#C20012', errorLight: '#F9E5E7', successDark: '#007D7F', success: '#007D7F', successLight: '#E5F2F2', warningDark: '#A14F17', warning: '#A14F17', warningLight: '#F6EDE8', infoDark: '#4268F6', info: '#3040D6', infoLight: '#CBD5FD', // backgrounds bg: '#F8F9F9', filterBg: '#FBFBFB', container: '#FFFFFF', sidebar: '#FFFFFF', // elements inputBorder: '#BBC3CB', separator: '#BBC3CB', highlight: '#F2F2F2', // AdminJS logo color love: '#4D70EB' }; const ColorVariants = { primary: 'primary100', secondary: 'accent', danger: 'error', success: 'success', info: 'info', warning: 'warning', text: 'text' }; /** * Sizes can be used with paddings, margins etc. * * This is the example of using responsive margin with Box component * * ```javascript * <Box p=['default', 'xl']>some content</Box> * ``` * * This component will have 8px padding for lowest breakpoint and 24px above * this breakpoint. * * @memberof Theme * @alias space * @property {string} xs=2px 2px - <span class="space-box" style="width: 2px;" /> * @property {string} sm=4px 4px - <span class="space-box" style="width: 4px;" /> * @property {string} default=8px 8px - <span class="space-box" style="width: 8px;" /> (alias md) * @property {string} lg=16px 16px - <span class="space-box" style="width: 16px;" /> * @property {string} xl=24px 24px - <span class="space-box" style="width: 24px;" /> * @property {string} xxl=32px 32px - <span class="space-box" style="width: 32px;" /> * @property {string} x3=48px 48px - <span class="space-box" style="width: 48px;" /> * @property {string} x4=64px 64px - <span class="space-box" style="width: 64px;" /> * @property {string} x5=80px 80px - <span class="space-box" style="width: 80px;" /> * @property {string} x6=128px 128px - <span class="space-box" style="width: 128px;" /> */ const space$1 = { xs: '2px', sm: '4px', default: '8px', md: '8px', lg: '16px', xl: '24px', xxl: '32px', x3: '48px', x4: '64px', x5: '80px', x6: '128px' }; /** * @memberof Theme * @alias sizes * @property {string} navbarHeight=64px * @property {string} sidebarWidth=300px * @property {string} maxFormWidth=740px */ const sizes = { navbarHeight: '64px', sidebarWidth: '300px', maxFormWidth: '740px' }; /** * @memberof Theme * @alias fontSizes * @property {string} xs=10px <div style="font-size: 10px;">'xs' font size</div> * @property {string} sm=12px <div style="font-size: 12px;">'sm' font size</div> * @property {string} default=14px (alias md) <div style="font-size: 14px;">'default' font size</div> * @property {string} lg=16px <div style="font-size: 16px;">'lg' font size</div> * @property {string} xl=18px <div style="font-size: 18px;">'xl' font size</div> * @property {string} h4=24px <div style="font-size: 24px;">'h4' font size</div> * @property {string} h3=28px <div style="font-size: 28px;">'h3' font size</div> * @property {string} h2=32px <div style="font-size: 32px;">'h2' font size</div> * @property {string} h1=40px <div style="font-size: 40px;">'h1' font size</div> */ const fontSizes = { xs: '10px', sm: '12px', default: '14px', md: '14px', lg: '16px', xl: '18px', h4: '24px', h3: '28px', h2: '32px', h1: '40px' }; /** * @memberof Theme * @alias fontWeights * @property {string} lighter=200 * @property {string} lighter=300 * @property {string} normal=400 * @property {string} normal=500 * @property {string} bolder=900 */ const fontWeights = { lighter: 200, light: 300, normal: 400, bold: 700, bolder: 900 }; /** * @memberof Theme * @alias lineHeights * @property {string} xs=10px * @property {string} sm=12px * @property {string} default=16px (alias md) * @property {string} lg=24px * @property {string} xl=32px * @property {string} xxl=40px */ const lineHeights = { xs: '10px', sm: '12px', default: '16px', md: '16px', lg: '24px', xl: '32px', xxl: '40px' }; /** * This dimension can be used with `testShadow` and `boxShadow` props provided * by {@link ShadowProps} * * ```javascript * <Box variant="grey" boxShadow="card">Some content...</Box> * ``` * * @alias shadows * @memberof Theme * @property {string} login <div class="shadow-div" style="box-shadow: 0 15px 24px 0 rgba(137,138,154,0.15);"/> * @property {string} cardHover <div class="shadow-div" style="box-shadow: 0 4px 12px 0 rgba(137,138,154,0.4);"/> * @property {string} drawer <div class="shadow-div" style="box-shadow: -2px 0 8px 0 rgba(137,138,154,0.2);"/> * @property {string} card <div class="shadow-div" style="box-shadow: 0 1px 6px 0 rgba(137,138,154,0.4);"/> * @property {string} inputFocus <div class="shadow-div" style="box-shadow: 0 2px 4px 0 rgba(135,159,250,0.4);"/> * @property {string} buttonFocus <div class="shadow-div" style="box-shadow: 0 4px 6px 0 rgba(56,202,241,0.3);"/> */ const shadows = { login: '0 15px 24px 0 rgba(137,138,154,0.15)', cardHover: '0 4px 12px 0 rgba(137,138,154,0.4)', drawer: '-2px 0 8px 0 rgba(137,138,154,0.2)', card: '0rem 0.25rem 0.5rem rgba(0, 0, 0, 0.1)', inputFocus: '0 2px 4px 0 rgba(135,159,250,0.4)', buttonFocus: '0 4px 6px 0 rgba(56,202,241,0.3)' }; /** * Responsive breakpoints * * How to use them - simply pass an array to given prop: * * ```javascript * // Showing box on mobile devices * <Box display={["block", "none"]}>...</Box> * * // responsive width * <Box width={[1, 1/2, 1/3, 1/4]}>...</Box> * ``` * * @memberof Theme * @alias breakpoints * @property {string} 0=577px * @property {string} 1=769px * @property {string} 2=1024px * @property {string} 3=1324px */ const breakpoints = ['577px', '769px', '1024px', '1324px' // 1024 + sidebarWidth ]; const font = '\'Roboto\', sans-serif'; /** * Border styles * * @memberof Theme * @alias borders * @property {string} input * @property {string} filterInput * @property {string} bg * @property {string} default */ const borders = { input: `1px solid ${colors$1.border}`, filterInput: ' 1px rgba(255,255,255, 0.15)', bg: `1px solid ${colors$1.bg}`, default: `1px solid ${colors$1.border}` }; /** * Border widths set for an entire layout. If you like to have border radius in Button's and Box'es * Then set default property. * * @memberof Theme * @alias borderWidths * @property {string} default - default border with */ const borderWidths = { default: '0px' }; // TODO: add transitions const defaultProps$1 = {}; /** * The color utility parses a component's color and bg props and converts them into CSS * declarations. By default the raw value of the prop is returned. But most often you * would use one of the color from the [color palette]{@link colors}. * * @typedef {object} ColorProps * @alias ColorProps * @memberof Theme * @property {string} [color] Text color. It could be either a #hash or * {@link colors} from css theme name like * `grey80` * @property {string} [backgroundColor, bg] Background color. Similar as above could be a * #hash or one of {@link colors}. */ /** * The space utility converts shorthand margin and padding props to margin and padding * CSS declarations. * * You can use as a value raw dimensions in "px" or one of the value from the * [space scale]{@link space}. * * @typedef {object} SpaceProps * @alias SpaceProps * @memberof Theme * @property {string} [margin, m] margin * @property {string} [marginTop, mt] margin-top * @property {string} [marginRight, mr] margin-right * @property {string} [marginBottom, mb] margin-bottom * @property {string} [marginLeft, ml] margin-left * @property {string} [marginX, mx] margin-left and margin-right * @property {string} [marginY, my] margin-top and margin-bottom * @property {string} [padding, p] padding * @property {string} [paddingTop, pt] padding-top * @property {string} [paddingRight, pr] padding-right * @property {string} [paddingBottom, pb] padding-bottom * @property {string} [paddingLeft, pl] padding-left * @property {string} [paddingX, px] padding-left and padding-right * @property {string} [paddingY, py] padding-top and padding-bottom * * Set of props related to {@link space}. You can put there either string with 'px' or * one of `space` properties like `sm`, `default`, `xl` etc. */ /** * Typography props include _fontFamily_, _fontSize_, _fontWeight_, _lineHeight_, _letterSpacing_, * _textAlign_, and _fontStyle_. * * @typedef {object} TypographyProps * @alias TypographyProps * @memberof Theme * @property {string} [fontSize] font-size. Could be either actual css value or key taken from * {@link fontSizes} * @property {string} [fontWeight] font-weight. Could be either actual css value or key taken from * {@link fontWeights} * @property {string} [lineHeight] line-height. Could be either actual css value or key taken from * {@link lineHeights} * @property {string} [textAlign] text-align * @property {string} [fontFamily] font-family * @property {string} [fontStyle] font-style * @property {string} [letterSpacing] letter-spacing */ /** * The layout utility includes style props for width, height, display, minWidth, * minHeight, maxWidth, maxHeight, size, verticalAlign, overflow, overflowX, and overflowY. * * The width prop is transformed based on the following: * * - Numbers from 0-1 are converted to percentage widths. * - Numbers greater than 1 are converted to pixel values. * - String values are passed as raw CSS values. * - And arrays are converted to responsive width styles. * - the width prop will attempt to pick up values from the {@link sizes} * * @example * // width `50%` * <Box width={1/2} /> * * // width `256px` * <Box width={256} /> * * // width `'2em'` * <Box width='2em' /> * * // width `100%` on all viewport and `50%` from the smallest breakpoint and up * <Box width={[ 1, 1/2 ]} /> * * // width from `sizes` * <Box height='navbarHeight' /> * * @typedef {object} LayoutProps * @alias LayoutProps * @memberof Theme * @property {string} [width] width * @property {string} [height] height * @property {string} [display] display * @property {string} [minWidth] min-width * @property {string} [minHeight] min-height * @property {string} [maxWidth] max-width * @property {string} [maxHeight] max-height * @property {string} [size] size * @property {string} [verticalAlign] vertical-align * @property {string} [overflow] overflow * @property {string} [overflowX] overflow-x * @property {string} [overflowY] overflow-y */ /** * The flexbox utility includes style props for alignItems, alignContent, justifyItems, * justifyContent, flexWrap, flexDirection, flex, flexGrow, flexShrink, flexBasis, * justifySelf, alignSelf, and order. * * The width prop is transformed based on the following: * * - Numbers from 0-1 are converted to percentage widths. * - Numbers greater than 1 are converted to pixel values. * - String values are passed as raw CSS values. * - And arrays are converted to responsive width styles. * - the width prop will attempt to pick up values from the {@link sizes} * * @example * // alignItems * <Box alignItems='center' /> * * // alignContent * <Box alignContent='center' /> * * // justifyContent * <Box justifyContent='center' /> * * // flexWrap * <Box flexWrap='wrap' /> * * // flexBasis * <Box flexBasis='auto' /> * * // flexDirection * <Box flexDirection='column' /> * * // flex * <Box flex /> * * // justifySelf * <Box justifySelf='center' /> * * // alignSelf * <Box alignSelf='center' /> * * // order * <Box order='2' /> * * @typedef {object} FlexboxProps * @alias FlexboxProps * @memberof Theme * @property {string} [alignItems] align-items * @property {string} [alignContent] align-content * @property {string} [justifyItems] justify-items * @property {string} [justifyContent] justify-content * @property {string} [flexWrap] flex-wrap * @property {string} [flexDirection] flex-direction * @property {boolean} [flex] flex * @property {number|string} [flexGrow] flex-grow * @property {number} [flexShrink] flex-shrink * @property {string} [flexBasis] flex-basis * @property {string} [justifySelf] justify-self * @property {string} [alignSelf] align-self * @property {number|string} [order] order */ /** * Reused Variant Enum: `primary` | `danger` | `success` | `info` | `secondary` | `default` * * @typedef {Enum} VariantType * @alias VariantType * @memberof Theme */ /** * The border utility includes all style props related to border * * @typedef {object} BorderProps * @alias BorderProps * @memberof Theme * @property {string | number} [borderWidth] * @property {string} [borderStyle] * @property {string} [borderColor] It could be either a #hash or {@link colors} * @property {string | number} [borderRadius] * @property {string | number} [borderTop] * @property {string | number} [borderTopWidth] * @property {string} [borderTopStyle] * @property {string} [borderTopColor] It could be either a #hash or {@link colors} * @property {string | number} [borderTopLeftRadius] * @property {string | number} [borderTopRightRadius] * @property {string | number} [borderRight] * @property {string | number} [borderRightWidth] * @property {string} [borderRightStyle] * @property {string} [borderRightColor] It could be either a #hash or {@link colors} * @property {string | number} [borderBottom] * @property {string | number} [borderBottomWidth] * @property {string} [borderBottomStyle] * @property {string} [borderBottomColor] It could be either a #hash or {@link colors} * @property {string | number} [borderBottomLeftRadius] * @property {string | number} [borderBottomRightRadius] * @property {string | number} [borderLeft] * @property {string | number} [borderLeftWidth] * @property {string} [borderLeftStyle] * @property {string} [borderLeftColor] It could be either a #hash or {@link colors} * @property {string | number} [borderX] * @property {string | number} [borderY] */ /** * The position utility includes style props for position, zIndex, top, right, bottom, and left. * * @typedef {object} PositionProps * @alias PositionProps * @memberof Theme * property {string | number} [position] * property {string | number} [zIndex] * property {string | number} [top] * property {string | number} [right] * property {string | number} [bottom] * property {string | number} [left] */ /** * The shadow utility includes style props for textShadow and boxShadow. * * @typedef {object} ShadowProps * @alias ShadowProps * @memberof Theme * property {string} [boxShadow] * property {string} [textShadow] */ var defautTheme = /*#__PURE__*/Object.freeze({ __proto__: null, ColorVariants: ColorVariants, borderWidths: borderWidths, borders: borders, breakpoints: breakpoints, colors: colors$1, defaultProps: defaultProps$1, font: font, fontSizes: fontSizes, fontWeights: fontWeights, lineHeights: lineHeights, shadows: shadows, sizes: sizes, space: space$1 }); var merge$3 = function merge(a, b) { var result = assign$4({}, a, b); for (var key in a) { var _assign; if (!a[key] || typeof b[key] !== 'object') continue; assign$4(result, (_assign = {}, _assign[key] = assign$4(a[key], b[key]), _assign)); } return result; }; // sort object-value responsive styles var sort = function sort(obj) { var next = {}; Object.keys(obj).sort(function (a, b) { return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' }); }).forEach(function (key) { next[key] = obj[key]; }); return next; }; var defaults$5 = { breakpoints: [40, 52, 64].map(function (n) { return n + 'em'; }) }; var createMediaQuery = function createMediaQuery(n) { return "@media screen and (min-width: " + n + ")"; }; var getValue$2 = function getValue(n, scale) { return get$1(scale, n, n); }; var get$1 = function get(obj, key, def, p, undef) { key = key && key.split ? key.split('.') : [key]; for (p = 0; p < key.length; p++) { obj = obj ? obj[key[p]] : undef; } return obj === undef ? def : obj; }; var createParser = function createParser(config) { var cache = {}; var parse = function parse(props) { var styles = {}; var shouldSort = false; var isCacheDisabled = props.theme && props.theme.disableStyledSystemCache; for (var key in props) { if (!config[key]) continue; var sx = config[key]; var raw = props[key]; var scale = get$1(props.theme, sx.scale, sx.defaults); if (typeof raw === 'object') { cache.breakpoints = !isCacheDisabled && cache.breakpoints || get$1(props.theme, 'breakpoints', defaults$5.breakpoints); if (Array.isArray(raw)) { cache.media = !isCacheDisabled && cache.media || [null].concat(cache.breakpoints.map(createMediaQuery)); styles = merge$3(styles, parseResponsiveStyle(cache.media, sx, scale, raw, props)); continue; } if (raw !== null) { styles = merge$3(styles, parseResponsiveObject(cache.breakpoints, sx, scale, raw, props)); shouldSort = true; } continue; } assign$4(styles, sx(raw, scale, props)); } // sort object-based responsive styles if (shouldSort) { styles = sort(styles); } return styles; }; parse.config = config; parse.propNames = Object.keys(config); parse.cache = cache; var keys = Object.keys(config).filter(function (k) { return k !== 'config'; }); if (keys.length > 1) { keys.forEach(function (key) { var _createParser; parse[key] = createParser((_createParser = {}, _createParser[key] = config[key], _createParser)); }); } return parse; }; var parseResponsiveStyle = function parseResponsiveStyle(mediaQueries, sx, scale, raw, _props) { var styles = {}; raw.slice(0, mediaQueries.length).forEach(function (value, i) { var media = mediaQueries[i]; var style = sx(value, scale, _props); if (!media) { assign$4(styles, style); } else { var _assign2; assign$4(styles, (_assign2 = {}, _assign2[media] = assign$4({}, styles[media], style), _assign2)); } }); return styles; }; var parseResponsiveObject = function parseResponsiveObject(breakpoints, sx, scale, raw, _props) { var styles = {}; for (var key in raw) { var breakpoint = breakpoints[key]; var value = raw[key]; var style = sx(value, scale, _props); if (!breakpoint) { assign$4(styles, style); } else { var _assign3; var media = createMediaQuery(breakpoint); assign$4(styles, (_assign3 = {}, _assign3[media] = assign$4({}, styles[media], style), _assign3)); } } return styles; }; var createStyleFunction = function createStyleFunction(_ref) { var properties = _ref.properties, property = _ref.property, scale = _ref.scale, _ref$transform = _ref.transform, transform = _ref$transform === void 0 ? getValue$2 : _ref$transform, defaultScale = _ref.defaultScale; properties = properties || [property]; var sx = function sx(value, scale, _props) { var result = {}; var n = transform(value, scale, _props); if (n === null) return; properties.forEach(function (prop) { result[prop] = n; }); return result; }; sx.scale = scale; sx.defaults = defaultScale; return sx; }; // new v5 API var system = function system(args) { if (args === void 0) { args = {}; } var config = {}; Object.keys(args).forEach(function (key) { var conf = args[key]; if (conf === true) { // shortcut definition config[key] = createStyleFunction({ property: key, scale: key }); return; } if (typeof conf === 'function') { config[key] = conf; return; } config[key] = createStyleFunction(conf); }); var parser = createParser(config); return parser; }; var compose = function compose() { var config = {}; for (var _len = arguments.length, parsers = new Array(_len), _key = 0; _key < _len; _key++) { parsers[_key] = arguments[_key]; } parsers.forEach(function (parser) { if (!parser || !parser.config) return; assign$4(config, parser.config); }); var parser = createParser(config); return parser; }; var isNumber$3 = function isNumber(n) { return typeof n === 'number' && !isNaN(n); }; var getWidth = function getWidth(n, scale) { return get$1(scale, n, !isNumber$3(n) || n > 1 ? n : n * 100 + '%'); }; var config$7 = { width: { property: 'width', scale: 'sizes', transform: getWidth }, height: { property: 'height', scale: 'sizes' }, minWidth: { property: 'minWidth', scale: 'sizes' }, minHeight: { property: 'minHeight', scale: 'sizes' }, maxWidth: { property: 'maxWidth', scale: 'sizes' }, maxHeight: { property: 'maxHeight', scale: 'sizes' }, size: { properties: ['width', 'height'], scale: 'sizes' }, overflow: true, overflowX: true, overflowY: true, display: true, verticalAlign: true }; var layout = system(config$7); var config$6 = { color: { property: 'color', scale: 'colors' }, backgroundColor: { property: 'backgroundColor', scale: 'colors' }, opacity: true }; config$6.bg = config$6.backgroundColor; var color = system(config$6); var defaults$4 = { fontSizes: [12, 14, 16, 20, 24, 32, 48, 64, 72] }; var config$5 = { fontFamily: { property: 'fontFamily', scale: 'fonts' }, fontSize: { property: 'fontSize', scale: 'fontSizes', defaultScale: defaults$4.fontSizes }, fontWeight: { property: 'fontWeight', scale: 'fontWeights' }, lineHeight: { property: 'lineHeight', scale: 'lineHeights' }, letterSpacing: { property: 'letterSpacing', scale: 'letterSpacings' }, textAlign: true, fontStyle: true }; var typography = system(config$5); var config$4 = { alignItems: true, alignContent: true, justifyItems: true, justifyContent: true, flexWrap: true, flexDirection: true, // item flex: true, flexGrow: true, flexShrink: true, flexBasis: true, justifySelf: true, alignSelf: true, order: true }; var flexbox = system(config$4); var defaults$3 = { space: [0, 4, 8, 16, 32, 64, 128, 256, 512] }; var config$3 = { gridGap: { property: 'gridGap', scale: 'space', defaultScale: defaults$3.space }, gridColumnGap: { property: 'gridColumnGap', scale: 'space', defaultScale: defaults$3.space }, gridRowGap: { property: 'gridRowGap', scale: 'space', defaultScale: defaults$3.space }, gridColumn: true, gridRow: true, gridAutoFlow: true, gridAutoColumns: true, gridAutoRows: true, gridTemplateColumns: true, gridTemplateRows: true, gridTemplateAreas: true, gridArea: true }; var grid = system(config$3); var config$2 = { border: { property: 'border', scale: 'borders' }, borderWidth: { property: 'borderWidth', scale: 'borderWidths' }, borderStyle: { property: 'borderStyle', scale: 'borderStyles' }, borderColor: { property: 'borderColor', scale: 'colors' }, borderRadius: { property: 'borderRadius', scale: 'radii' }, borderTop: { property: 'borderTop', scale: 'borders' }, borderTopLeftRadius: { property: 'borderTopLeftRadius', scale: 'radii' }, borderTopRightRadius: { property: 'borderTopRightRadius', scale: 'radii' }, borderRight: { property: 'borderRight', scale: 'borders' }, borderBottom: { property: 'borderBottom', scale: 'borders' }, borderBottomLeftRadius: { property: 'borderBottomLeftRadius', scale: 'radii' }, borderBottomRightRadius: { property: 'borderBottomRightRadius', scale: 'radii' }, borderLeft: { property: 'borderLeft', scale: 'borders' }, borderX: { properties: ['borderLeft', 'borderRight'], scale: 'borders' }, borderY: { properties: ['borderTop', 'borderBottom'], scale: 'borders' } }; config$2.borderTopWidth = { property: 'borderTopWidth', scale: 'borderWidths' }; config$2.borderTopColor = { property: 'borderTopColor', scale: 'colors' }; config$2.borderTopStyle = { property: 'borderTopStyle', scale: 'borderStyles' }; config$2.borderTopLeftRadius = { property: 'borderTopLeftRadius', scale: 'radii' }; config$2.borderTopRightRadius = { property: 'borderTopRightRadius', scale: 'radii' }; config$2.borderBottomWidth = { property: 'borderBottomWidth', scale: 'borderWidths' }; config$2.borderBottomColor = { property: 'borderBottomColor', scale: 'colors' }; config$2.borderBottomStyle = { property: 'borderBottomStyle', scale: 'borderStyles' }; config$2.borderBottomLeftRadius = { property: 'borderBottomLeftRadius', scale: 'radii' }; config$2.borderBottomRightRadius = { property: 'borderBottomRightRadius', scale: 'radii' }; config$2.borderLeftWidth = { property: 'borderLeftWidth', scale: 'borderWidths' }; config$2.borderLeftColor = { property: 'borderLeftColor', scale: 'colors' }; config$2.borderLeftStyle = { property: 'borderLeftStyle', scale: 'borderStyles' }; config$2.borderRightWidth = { property: 'borderRightWidth', scale: 'borderWidths' }; config$2.borderRightColor = { property: 'borderRightColor', scale: 'colors' }; config$2.borderRightStyle = { property: 'borderRightStyle', scale: 'borderStyles' }; var border = system(config$2); var config$1 = { background: true, backgroundImage: true, backgroundSize: true, backgroundPosition: true, backgroundRepeat: true }; config$1.bgImage = config$1.backgroundImage; config$1.bgSize = config$1.backgroundSize; config$1.bgPosition = config$1.backgroundPosition; config$1.bgRepeat = config$1.backgroundRepeat; var background = system(config$1); var defaults$2 = { space: [0, 4, 8, 16, 32, 64, 128, 256, 512] }; var config = { position: true, zIndex: { property: 'zIndex', scale: 'zIndices' }, top: { property: 'top', scale: 'space', defaultScale: defaults$2.space }, right: { property: 'right', scale: 'space', defaultScale: defaults$2.space }, bottom: { property: 'bottom', scale: 'space', defaultScale: defaults$2.space }, left: { property: 'left', scale: 'space', defaultScale: defaults$2.space } }; var position$1 = system(config); var defaults$1 = { space: [0, 4, 8, 16, 32, 64, 128, 256, 512] }; var isNumber$2 = function isNumber(n) { return typeof n === 'number' && !isNaN(n); }; var getMargin = function getMargin(n, scale) { if (!isNumber$2(n)) { return get$1(scale, n, n); } var isNegative = n < 0; var absolute = Math.abs(n); var value = get$1(scale, absolute, absolute); if (!isNumber$2(value)) { return isNegative ? '-' + value : value; } return value * (isNegative ? -1 : 1); }; var configs = {}; configs.margin = { margin: { property: 'margin', scale: 'space', transform: getMargin, defaultScale: defaults$1.space }, marginTop: { property: 'marginTop', scale: 'space', transform: getMargin, defaultScale: defaults$1.space }, marginRight: { property: 'marginRight', scale: 'space', transform: getMargin, defaultScale: defaults$1.space }, marginBottom: { property: 'marginBottom', scale: 'space', transform: getMargin, defaultScale: defaults$1.space }, marginLeft: { property: 'marginLeft', scale: 'space', transform: getMargin, defaultScale: defaults$1.space }, marginX: { properties: ['marginLeft', 'marginRight'], scale: 'space', transform: getMargin, defaultScale: defaults$1.space }, marginY: { properties: ['marginTop', 'marginBottom'], scale: 'space', transform: getMargin, defaultScale: defaults$1.space } }; configs.margin.m = configs.margin.margin; configs.margin.mt = configs.margin.marginTop; configs.margin.mr = configs.margin.marginRight; configs.margin.mb = configs.margin.marginBottom; configs.margin.ml = configs.margin.marginLeft; configs.margin.mx = configs.margin.marginX; configs.margin.my = configs.margin.marginY; configs.padding = { padding: { property: 'padding', scale: 'space', defaultScale: defaults$1.space }, paddingTop: { property: 'paddingTop', scale: 'space', defaultScale: defaults$1.space }, paddingRight: { property: 'paddingRight', scale: 'space', defaultScale: defaults$1.space }, paddingBottom: { property: 'paddingBottom', scale: 'space', defaultScale: defaults$1.space }, paddingLeft: { property: 'paddingLeft', scale: 'space', defaultScale: defaults$1.space }, paddingX: { properties: ['paddingLeft', 'paddingRight'], scale: 'space', defaultScale: defaults$1.space }, paddingY: { properties: ['paddingTop', 'paddingBottom'], scale: 'space', defaultScale: defaults$1.space } }; configs.padding.p = configs.padding.padding; configs.padding.pt = configs.padding.paddingTop; configs.padding.pr = configs.padding.paddingRight; configs.padding.pb = configs.padding.paddingBottom; configs.padding.pl = configs.padding.paddingLeft; configs.padding.px = configs.padding.paddingX; configs.padding.py = configs.padding.paddingY; var margin = system(configs.margin); var padding = system(configs.padding); var space = compose(margin, padding); var shadow = system({ boxShadow: { property: 'boxShadow', scale: 'shadows' }, textShadow: { property: 'textShadow', scale: 'shadows' } }); function _extends$l() { _extends$l = 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; }; return _extends$l.apply(this, arguments); } // based on https://github.com/developit/dlv var get = function get(obj, key, def, p, undef) { key = key && key.split ? key.split('.') : [key]; for (p = 0; p < key.length; p++) { obj = obj ? obj[key[p]] : undef; } return obj === undef ? def : obj; }; var defaultBreakpoints = [40, 52, 64].map(function (n) { return n + 'em'; }); var defaultTheme$1 = { space: [0, 4, 8, 16, 32, 64, 128, 256, 512], fontSizes: [12, 14, 16, 20, 24, 32, 48, 64, 72] }; var aliases = { bg: 'backgroundColor', m: 'margin', mt: 'marginTop', mr: 'marginRight', mb: 'marginBottom', ml: 'marginLeft', mx: 'marginX', my: 'marginY', p: 'padding', pt: 'paddingTop', pr: 'paddingRight', pb: 'paddingBottom', pl: 'paddingLeft', px: 'paddingX', py: 'paddingY' }; var multiples = { marginX: ['marginLeft', 'marginRight'], marginY: ['marginTop', 'marginBottom'], paddingX: ['paddingLeft', 'paddingRight'], paddingY: ['paddingTop', 'paddingBottom'], size: ['width', 'height'] }; var scales = { color: 'colors', backgroundColor: 'colors', borderColor: 'colors', margin: 'space', marginTop: 'space', marginRight: 'space', marginBottom: 'space', marginLeft: 'space', marginX: 'space', marginY: 'space', padding: 'space', paddingTop: 'space', paddingRight: 'space', paddingBottom: 'space', paddingLeft: 'space', paddingX: 'space', paddingY: 'space', top: 'space', right: 'space', bottom: 'space', left: 'space', gridGap: 'space', gridColumnGap: 'space', gridRowGap: 'space', gap: 'space', columnGap: 'space', rowGap: 'space', fontFamily: 'fonts', fontSize: 'fontSizes', fontWeight: 'fontWeights', lineHeight: 'lineHeights', letterSpacing: 'letterSpacings', border: 'borders', borderTop: 'borders', borderRight: 'borders', borderBottom: 'borders', borderLeft: 'borders', borderWidth: 'borderWidths', borderStyle: 'borderStyles', borderRadius: 'radii', borderTopRightRadius: 'radii', borderTopLeftRadius: 'radii', borderBottomRightRadius: 'radii', borderBottomLeftRadius: 'radii', borderTopWidth: 'borderWidths', borderTopColor: 'colors', borderTopStyle: 'borderStyles', borderBottomWidth: 'borderWidths', borderBottomColor: 'colors', borderBottomStyle: 'borderStyles', borderLeftWidth: 'borderWidths', borderLeftColor: 'colors', borderLeftStyle: 'borderStyles', borderRightWidth: 'borderWidths', borderRightColor: 'colors', borderRightStyle: 'borderStyles', outlineColor: 'colors', boxShadow: 'shadows', textShadow: 'shadows', zIndex: 'zIndices', width: 'sizes', minWidth: 'sizes', maxWidth: 'sizes', height: 'sizes', minHeight: 'sizes', maxHeight: 'sizes', flexBasis: 'sizes', size: 'sizes', // svg fill: 'colors', stroke: 'colors' }; var positiveOrNegative = function positiveOrNegative(scale, value) { if (typeof value !== 'number' || value >= 0) { return get(scale, value, value); } var absolute = Math.abs(value); var n = get(scale, absolute, absolute); if (typeof n === 'string') return '-' + n; return n * -1; }; var transforms = ['margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'top', 'bottom', 'left', 'right'].reduce(function (acc, curr) { var _extends2; return _extends$l({}, acc, (_extends2 = {}, _extends2[curr] = positiveOrNegative, _extends2)); }, {}); var responsive = function responsive(styles) { return function (theme) { var next = {}; var breakpoints = get(theme, 'breakpoints', defaultBreakpoints); var mediaQueries = [null].concat(breakpoints.map(function (n) { return "@media screen and (min-width: " + n + ")"; })); for (var key in styles) { var value = typeof styles[key] === 'function' ? styles[key](theme) : styles[key]; if (value == null) continue; if (!Array.isArray(value)) { next[key] = value; continue; } for (var i = 0; i < value.slice(0, mediaQueries.length).length; i++) { var media = mediaQueries[i]; if (!media) { next[key] = value[i]; continue; } next[media] = next[media] || {}; if (value[i] == null) continue; next[media][key] = value[i]; } } return next; }; }; var css$3 = function css(args) { return function (props) { if (props === void 0) { props = {}; } var theme = _extends$l({}, defaultTheme$1, {}, props.theme || props); var result = {}; var obj = typeof args === 'function' ? args(theme) : args; var styles = responsive(obj)(theme); for (var key in styles) { var x = styles[key]; var val = typeof x === 'function' ? x(theme) : x; if (key === 'variant') { var variant = css(get(theme, val))(theme); result = _extends$l({}, result, {}, variant); continue; } if (val && typeof val === 'object') { result[key] = css(val)(theme); continue; } var prop = get(aliases, key, key); var scaleName = get(scales, prop); var scale = get(theme, scaleName, get(theme, prop, {})); var transform = get(transforms, prop, get); var value = transform(scale, val, val); if (multiples[prop]) { var dirs = multiples[prop]; for (var i = 0; i < dirs.length; i++) { result[dirs[i]] = value; } } else { result[prop] = value; } } return result; }; }; var variant = function variant(_ref) { var _config; var scale = _ref.scale, _ref$prop = _ref.prop, prop = _ref$prop === void 0 ? 'variant' : _ref$prop, _ref$variants = _ref.variants, variants = _ref$variants === void 0 ? {} : _ref$variants, key = _ref.key; var sx; if (Object.keys(variants).length) { sx = function sx(value, scale, props) { return css$3(get$1(scale, value, null))(props.theme); }; } else { sx = function sx(value, scale) { return get$1(scale, value, null); }; } sx.scale = scale || key; sx.defaults = variants; var config = (_config = {}, _config[prop] = sx, _config); var parser = createParser(config); return parser; }; variant({ key: 'buttons' }); variant({ key: 'textStyles', prop: 'textStyle' }); variant({ key: 'colorStyles', prop: 'colors' }); layout.width; layout.height; layout.minWidth; layout.minHeight; layout.maxWidth; layout.maxHeight; layout.size; layout.verticalAlign; layout.display; layout.overflow; layout.overflowX; layout.overflowY; color.opacity; typography.fontSize; typography.fontFamily; typography.fontWeight; typography.lineHeight; typography.textAlign; typography.fontStyle; typography.letterSpacing; flexbox.alignItems; flexbox.alignContent; flexbox.justifyItems; flexbox.justifyContent; flexbox.flexWrap; flexbox.flexDirection; flexbox.flex; flexbox.flexGrow; flexbox.flexShrink; flexbox.flexBasis; flexbox.justifySelf; flexbox.alignSelf; flexbox.order; grid.gridGap; grid.gridColumnGap; grid.gridRowGap; grid.gridColumn; grid.gridRow; grid.gridAutoFlow; grid.gridAutoColumns; grid.gridAutoRows; grid.gridTemplateColumns; grid.gridTemplateRows; grid.gridTemplateAreas; grid.gridArea; border.borderWidth; border.borderStyle; border.borderColor; border.borderTop; border.borderRight; border.borderBottom; border.borderLeft; var borderRadius$1 = border.borderRadius; background.backgroundImage; background.backgroundSize; background.backgroundPosition; background.backgroundRepeat; var zIndex = position$1.zIndex; position$1.top; position$1.right; position$1.bottom; position$1.left; // var shallowequal = function shallowEqual(objA, objB, compare, compareContext) { var ret = compare ? compare.call(compareContext, objA, objB) : void 0; if (ret !== void 0) { return !!ret; } if (objA === objB) { return true; } if (typeof objA !== "object" || !objA || typeof objB !== "object" || !objB) { return false; } var keysA = Object.keys(objA); var keysB = Object.keys(objB); if (keysA.length !== keysB.length) { return false; } var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB); // Test for A's keys different from B. for (var idx = 0; idx < keysA.length; idx++) { var key = keysA[idx]; if (!bHasOwnProperty(key)) { return false; } var valueA = objA[key]; var valueB = objB[key]; ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0; if (ret === false || ret === void 0 && valueA !== valueB) { return false; } } return true; }; var d = /*@__PURE__*/getDefaultExportFromCjs(shallowequal); function stylis_min(W) { function M(d, c, e, h, a) { for (var m = 0, b = 0, v = 0, n = 0, q, g, x = 0, K = 0, k, u = k = q = 0, l = 0, r = 0, I = 0, t = 0, B = e.length, J = B - 1, y, f = '', p = '', F = '', G = '', C; l < B;) { g = e.charCodeAt(l); l === J && 0 !== b + n + v + m && (0 !== b && (g = 47 === b ? 10 : 47), n = v = m = 0, B++, J++); if (0 === b + n + v + m) { if (l === J && (0 < r && (f = f.replace(N, '')), 0 < f.trim().length)) { switch (g) { case 32: case 9: case 59: case 13: case 10: break; default: f += e.charAt(l); } g = 59; } switch (g) { case 123: f = f.trim(); q = f.charCodeAt(0); k = 1; for (t = ++l; l < B;) { switch (g = e.charCodeAt(l)) { case 123: k++; break; case 125: k--; break; case 47: switch (g = e.charCodeAt(l + 1)) { case 42: case 47: a: { for (u = l + 1; u < J; ++u) { switch (e.charCodeAt(u)) { case 47: if (42 === g && 42 === e.charCodeAt(u - 1) && l + 2 !== u) { l = u + 1; break a; } break; case 10: if (47 === g) { l = u + 1; break a; } } } l = u; } } break; case 91: g++; case 40: g++; case 34: case 39: for (; l++ < J && e.charCodeAt(l) !== g;) {} } if (0 === k) break; l++; } k = e.substring(t, l); 0 === q && (q = (f = f.replace(ca, '').trim()).charCodeAt(0)); switch (q) { case 64: 0 < r && (f = f.replace(N, '')); g = f.charCodeAt(1); switch (g) { case 100: case 109: case 115: case 45: r = c; break; default: r = O; } k = M(c, r, k, g, a + 1); t = k.length; 0 < A && (r = X(O, f, I), C = H(3, k, r, c, D, z, t, g, a, h), f = r.join(''), void 0 !== C && 0 === (t = (k = C.trim()).length) && (g = 0, k = '')); if (0 < t) switch (g) { case 115: f = f.replace(da, ea); case 100: case 109: case 45: k = f + '{' + k + '}'; break; case 107: f = f.replace(fa, '$1 $2'); k = f + '{' + k + '}'; k = 1 === w || 2 === w && L('@' + k, 3) ? '@-webkit-' + k + '@' + k : '@' + k; break; default: k = f + k, 112 === h && (k = (p += k, '')); } else k = ''; break; default: k = M(c, X(c, f, I), k, h, a + 1); } F += k; k = I = r = u = q = 0; f = ''; g = e.charCodeAt(++l); break; case 125: case 59: f = (0 < r ? f.replace(N, '') : f).trim(); if (1 < (t = f.length)) switch (0 === u && (q = f.charCodeAt(0), 45 === q || 96 < q && 123 > q) && (t = (f = f.replace(' ', ':')).length), 0 < A && void 0 !== (C = H(1, f, c, d, D, z, p.length, h, a, h)) && 0 === (t = (f = C.trim()).length) && (f = '\x00\x00'), q = f.charCodeAt(0), g = f.charCodeAt(1), q) { case 0: break; case 64: if (105 === g || 99 === g) { G += f + e.charAt(l); break; } default: 58 !== f.charCodeAt(t - 1) && (p += P(f, q, g, f.charCodeAt(2))); } I = r = u = q = 0; f = ''; g = e.charCodeAt(++l); } } switch (g) { case 13: case 10: 47 === b ? b = 0 : 0 === 1 + q && 107 !== h && 0 < f.length && (r = 1, f += '\x00'); 0 < A * Y && H(0, f, c, d, D, z, p.length, h, a, h); z = 1; D++; break; case 59: case 125: if (0 === b + n + v + m) { z++; break; } default: z++; y = e.charAt(l); switch (g) { case 9: case 32: if (0 === n + m + b) switch (x) { case 44: case 58: case 9: case 32: y = ''; break; default: 32 !== g && (y = ' '); } break; case 0: y = '\\0'; break; case 12: y = '\\f'; break; case 11: y = '\\v'; break; case 38: 0 === n + b + m && (r = I = 1, y = '\f' + y); break; case 108: if (0 === n + b + m + E && 0 < u) switch (l - u) { case 2: 112 === x && 58 === e.charCodeAt(l - 3) && (E = x); case 8: 111 === K && (E = K); } break; case 58: 0 === n + b + m && (u = l); break; case 44: 0 === b + v + n + m && (r = 1, y += '\r'); break; case 34: case 39: 0 === b && (n = n === g ? 0 : 0 === n ? g : n); break; case 91: 0 === n + b + v && m++; break; case 93: 0 === n + b + v && m--; break; case 41: 0 === n + b + m && v--; break; case 40: if (0 === n + b + m) { if (0 === q) switch (2 * x + 3 * K) { case 533: break; default: q = 1; } v++; } break; case 64: 0 === b + v + n + m + u + k && (k = 1); break; case 42: case 47: if (!(0 < n + m + v)) switch (b) { case 0: switch (2 * g + 3 * e.charCodeAt(l + 1)) { case 235: b = 47; break; case 220: t = l, b = 42; } break; case 42: 47 === g && 42 === x && t + 2 !== l && (33 === e.charCodeAt(t + 2) && (p += e.substring(t, l + 1)), y = '', b = 0); } } 0 === b && (f += y); } K = x; x = g; l++; } t = p.length; if (0 < t) { r = c; if (0 < A && (C = H(2, p, r, d, D, z, t, h, a, h), void 0 !== C && 0 === (p = C).length)) return G + p + F; p = r.join(',') + '{' + p + '}'; if (0 !== w * E) { 2 !== w || L(p, 2) || (E = 0); switch (E) { case 111: p = p.replace(ha, ':-moz-$1') + p; break; case 112: p = p.replace(Q, '::-webkit-input-$1') + p.replace(Q, '::-moz-$1') + p.replace(Q, ':-ms-input-$1') + p; } E = 0; } } return G + p + F; } function X(d, c, e) { var h = c.trim().split(ia); c = h; var a = h.length, m = d.length; switch (m) { case 0: case 1: var b = 0; for (d = 0 === m ? '' : d[0] + ' '; b < a; ++b) { c[b] = Z(d, c[b], e).trim(); } break; default: var v = b = 0; for (c = []; b < a; ++b) { for (var n = 0; n < m; ++n) { c[v++] = Z(d[n] + ' ', h[b], e).trim(); } } } return c; } function Z(d, c, e) { var h = c.charCodeAt(0); 33 > h && (h = (c = c.trim()).charCodeAt(0)); switch (h) { case 38: return c.replace(F, '$1' + d.trim()); case 58: return d.trim() + c.replace(F, '$1' + d.trim()); default: if (0 < 1 * e && 0 < c.indexOf('\f')) return c.replace(F, (58 === d.charCodeAt(0) ? '' : '$1') + d.trim()); } return d + c; } function P(d, c, e, h) { var a = d + ';', m = 2 * c + 3 * e + 4 * h; if (944 === m) { d = a.indexOf(':', 9) + 1; var b = a.substring(d, a.length - 1).trim(); b = a.substring(0, d).trim() + b + ';'; return 1 === w || 2 === w && L(b, 1) ? '-webkit-' + b + b : b; } if (0 === w || 2 === w && !L(a, 1)) return a; switch (m) { case 1015: return 97 === a.charCodeAt(10) ? '-webkit-' + a + a : a; case 951: return 116 === a.charCodeAt(3) ? '-webkit-' + a + a : a; case 963: return 110 === a.charCodeAt(5) ? '-webkit-' + a + a : a; case 1009: if (100 !== a.charCodeAt(4)) break; case 969: case 942: return '-webkit-' + a + a; case 978: return '-webkit-' + a + '-moz-' + a + a; case 1019: case 983: return '-webkit-' + a + '-moz-' + a + '-ms-' + a + a; case 883: if (45 === a.charCodeAt(8)) return '-webkit-' + a + a; if (0 < a.indexOf('image-set(', 11)) return a.replace(ja, '$1-webkit-$2') + a; break; case 932: if (45 === a.charCodeAt(4)) switch (a.charCodeAt(5)) { case 103: return '-webkit-box-' + a.replace('-grow', '') + '-webkit-' + a + '-ms-' + a.replace('grow', 'positive') + a; case 115: return '-webkit-' + a + '-ms-' + a.replace('shrink', 'negative') + a; case 98: return '-webkit-' + a + '-ms-' + a.replace('basis', 'preferred-size') + a; } return '-webkit-' + a + '-ms-' + a + a; case 964: return '-webkit-' + a + '-ms-flex-' + a + a; case 1023: if (99 !== a.charCodeAt(8)) break; b = a.substring(a.indexOf(':', 15)).replace('flex-', '').replace('space-between', 'justify'); return '-webkit-box-pack' + b + '-webkit-' + a + '-ms-flex-pack' + b + a; case 1005: return ka.test(a) ? a.replace(aa, ':-webkit-') + a.replace(aa, ':-moz-') + a : a; case 1e3: b = a.substring(13).trim(); c = b.indexOf('-') + 1; switch (b.charCodeAt(0) + b.charCodeAt(c)) { case 226: b = a.replace(G, 'tb'); break; case 232: b = a.replace(G, 'tb-rl'); break; case 220: b = a.replace(G, 'lr'); break; default: return a; } return '-webkit-' + a + '-ms-' + b + a; case 1017: if (-1 === a.indexOf('sticky', 9)) break; case 975: c = (a = d).length - 10; b = (33 === a.charCodeAt(c) ? a.substring(0, c) : a).substring(d.indexOf(':', 7) + 1).trim(); switch (m = b.charCodeAt(0) + (b.charCodeAt(7) | 0)) { case 203: if (111 > b.charCodeAt(8)) break; case 115: a = a.replace(b, '-webkit-' + b) + ';' + a; break; case 207: case 102: a = a.replace(b, '-webkit-' + (102 < m ? 'inline-' : '') + 'box') + ';' + a.replace(b, '-webkit-' + b) + ';' + a.replace(b, '-ms-' + b + 'box') + ';' + a; } return a + ';'; case 938: if (45 === a.charCodeAt(5)) switch (a.charCodeAt(6)) { case 105: return b = a.replace('-items', ''), '-webkit-' + a + '-webkit-box-' + b + '-ms-flex-' + b + a; case 115: return '-webkit-' + a + '-ms-flex-item-' + a.replace(ba, '') + a; default: return '-webkit-' + a + '-ms-flex-line-pack' + a.replace('align-content', '').replace(ba, '') + a; } break; case 973: case 989: if (45 !== a.charCodeAt(3) || 122 === a.charCodeAt(4)) break; case 931: case 953: if (!0 === la.test(d)) return 115 === (b = d.substring(d.indexOf(':') + 1)).charCodeAt(0) ? P(d.replace('stretch', 'fill-available'), c, e, h).replace(':fill-available', ':stretch') : a.replace(b, '-webkit-' + b) + a.replace(b, '-moz-' + b.replace('fill-', '')) + a; break; case 962: if (a = '-webkit-' + a + (102 === a.charCodeAt(5) ? '-ms-' + a : '') + a, 211 === e + h && 105 === a.charCodeAt(13) && 0 < a.indexOf('transform', 10)) return a.substring(0, a.indexOf(';', 27) + 1).replace(ma, '$1-webkit-$2') + a; } return a; } function L(d, c) { var e = d.indexOf(1 === c ? ':' : '{'), h = d.substring(0, 3 !== c ? e : 10); e = d.substring(e + 1, d.length - 1); return R(2 !== c ? h : h.replace(na, '$1'), e, c); } function ea(d, c) { var e = P(c, c.charCodeAt(0), c.charCodeAt(1), c.charCodeAt(2)); return e !== c + ';' ? e.replace(oa, ' or ($1)').substring(4) : '(' + c + ')'; } function H(d, c, e, h, a, m, b, v, n, q) { for (var g = 0, x = c, w; g < A; ++g) { switch (w = S[g].call(B, d, x, e, h, a, m, b, v, n, q)) { case void 0: case !1: case !0: case null: break; default: x = w; } } if (x !== c) return x; } function T(d) { switch (d) { case void 0: case null: A = S.length = 0; break; default: if ('function' === typeof d) S[A++] = d;else if ('object' === typeof d) for (var c = 0, e = d.length; c < e; ++c) { T(d[c]); } else Y = !!d | 0; } return T; } function U(d) { d = d.prefix; void 0 !== d && (R = null, d ? 'function' !== typeof d ? w = 1 : (w = 2, R = d) : w = 0); return U; } function B(d, c) { var e = d; 33 > e.charCodeAt(0) && (e = e.trim()); V = e; e = [V]; if (0 < A) { var h = H(-1, c, e, e, D, z, 0, 0, 0, 0); void 0 !== h && 'string' === typeof h && (c = h); } var a = M(O, e, c, 0, 0); 0 < A && (h = H(-2, a, e, e, D, z, a.length, 0, 0, 0), void 0 !== h && (a = h)); V = ''; E = 0; z = D = 1; return a; } var ca = /^\0+/g, N = /[\0\r\f]/g, aa = /: */g, ka = /zoo|gra/, ma = /([,: ])(transform)/g, ia = /,\r+?/g, F = /([\t\r\n ])*\f?&/g, fa = /@(k\w+)\s*(\S*)\s*/, Q = /::(place)/g, ha = /:(read-only)/g, G = /[svh]\w+-[tblr]{2}/, da = /\(\s*(.*)\s*\)/g, oa = /([\s\S]*?);/g, ba = /-self|flex-/g, na = /[^]*?(:[rp][el]a[\w-]+)[^]*/, la = /stretch|:\s*\w+\-(?:conte|avail)/, ja = /([^-])(image-set\()/, z = 1, D = 1, E = 0, w = 1, O = [], S = [], A = 0, R = null, Y = 0, V = ''; B.use = T; B.set = U; void 0 !== W && U(W); return B; } var unitlessKeys$1 = { animationIterationCount: 1, borderImageOutset: 1, borderImageSlice: 1, borderImageWidth: 1, boxFlex: 1, boxFlexGroup: 1, boxOrdinalGroup: 1, columnCount: 1, columns: 1, flex: 1, flexGrow: 1, flexPositive: 1, flexShrink: 1, flexNegative: 1, flexOrder: 1, gridRow: 1, gridRowEnd: 1, gridRowSpan: 1, gridRowStart: 1, gridColumn: 1, gridColumnEnd: 1, gridColumnSpan: 1, gridColumnStart: 1, msGridRow: 1, msGridRowSpan: 1, msGridColumn: 1, msGridColumnSpan: 1, fontWeight: 1, lineHeight: 1, opacity: 1, order: 1, orphans: 1, tabSize: 1, widows: 1, zIndex: 1, zoom: 1, WebkitLineClamp: 1, // SVG-related properties fillOpacity: 1, floodOpacity: 1, stopOpacity: 1, strokeDasharray: 1, strokeDashoffset: 1, strokeMiterlimit: 1, strokeOpacity: 1, strokeWidth: 1 }; function memoize$1(fn) { var cache = Object.create(null); return function (arg) { if (cache[arg] === undefined) cache[arg] = fn(arg); return cache[arg]; }; } var reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23 var isPropValid = /* #__PURE__ */memoize$1(function (prop) { return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111 /* o */ && prop.charCodeAt(1) === 110 /* n */ && prop.charCodeAt(2) < 91; } /* Z+1 */); var reactIs = reactIsExports; /** * Copyright 2015, Yahoo! Inc. * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. */ var REACT_STATICS = { childContextTypes: true, contextType: true, contextTypes: true, defaultProps: true, displayName: true, getDefaultProps: true, getDerivedStateFromError: true, getDerivedStateFromProps: true, mixins: true, propTypes: true, type: true }; var KNOWN_STATICS = { name: true, length: true, prototype: true, caller: true, callee: true, arguments: true, arity: true }; var FORWARD_REF_STATICS = { '$$typeof': true, render: true, defaultProps: true, displayName: true, propTypes: true }; var MEMO_STATICS = { '$$typeof': true, compare: true, defaultProps: true, displayName: true, propTypes: true, type: true }; var TYPE_STATICS = {}; TYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS; TYPE_STATICS[reactIs.Memo] = MEMO_STATICS; function getStatics(component) { // React v16.11 and below if (reactIs.isMemo(component)) { return MEMO_STATICS; } // React v16.12 and above return TYPE_STATICS[component['$$typeof']] || REACT_STATICS; } var defineProperty$3 = Object.defineProperty; var getOwnPropertyNames = Object.getOwnPropertyNames; var getOwnPropertySymbols = Object.getOwnPropertySymbols; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; var getPrototypeOf = Object.getPrototypeOf; var objectPrototype = Object.prototype; function hoistNonReactStatics(targetComponent, sourceComponent, blacklist) { if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components if (objectPrototype) { var inheritedComponent = getPrototypeOf(sourceComponent); if (inheritedComponent && inheritedComponent !== objectPrototype) { hoistNonReactStatics(targetComponent, inheritedComponent, blacklist); } } var keys = getOwnPropertyNames(sourceComponent); if (getOwnPropertySymbols) { keys = keys.concat(getOwnPropertySymbols(sourceComponent)); } var targetStatics = getStatics(targetComponent); var sourceStatics = getStatics(sourceComponent); for (var i = 0; i < keys.length; ++i) { var key = keys[i]; if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) { var descriptor = getOwnPropertyDescriptor(sourceComponent, key); try { // Avoid failures from read-only properties defineProperty$3(targetComponent, key, descriptor); } catch (e) {} } } } return targetComponent; } var hoistNonReactStatics_cjs = hoistNonReactStatics; var hoistNonReactStatics$1 = /*@__PURE__*/getDefaultExportFromCjs(hoistNonReactStatics_cjs); function v() { return (v = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }).apply(this, arguments); } var y = function (e, t) { for (var n = [e[0]], r = 0, o = t.length; r < o; r += 1) n.push(t[r], e[r + 1]); return n; }, g = function (t) { return null !== t && "object" == typeof t && "[object Object]" === (t.toString ? t.toString() : Object.prototype.toString.call(t)) && !reactIsExports.typeOf(t); }, S = Object.freeze([]), w$1 = Object.freeze({}); function E(e) { return "function" == typeof e; } function b(e) { return "string" == typeof e && e || e.displayName || e.name || "Component"; } function _(e) { return e && "string" == typeof e.styledComponentId; } var N = "undefined" != typeof process && void 0 !== process.env && (process.env.REACT_APP_SC_ATTR || process.env.SC_ATTR) || "data-styled", A = "5.3.9", C = "undefined" != typeof window && "HTMLElement" in window, I = Boolean("boolean" == typeof SC_DISABLE_SPEEDY ? SC_DISABLE_SPEEDY : "undefined" != typeof process && void 0 !== process.env && (void 0 !== process.env.REACT_APP_SC_DISABLE_SPEEDY && "" !== process.env.REACT_APP_SC_DISABLE_SPEEDY ? "false" !== process.env.REACT_APP_SC_DISABLE_SPEEDY && process.env.REACT_APP_SC_DISABLE_SPEEDY : void 0 !== process.env.SC_DISABLE_SPEEDY && "" !== process.env.SC_DISABLE_SPEEDY ? "false" !== process.env.SC_DISABLE_SPEEDY && process.env.SC_DISABLE_SPEEDY : "production" !== "development")), P = {}, O = { 1: "Cannot create styled-component for component: %s.\n\n", 2: "Can't collect styles once you've consumed a `ServerStyleSheet`'s styles! `ServerStyleSheet` is a one off instance for each server-side render cycle.\n\n- Are you trying to reuse it across renders?\n- Are you accidentally calling collectStyles twice?\n\n", 3: "Streaming SSR is only supported in a Node.js environment; Please do not try to call this method in the browser.\n\n", 4: "The `StyleSheetManager` expects a valid target or sheet prop!\n\n- Does this error occur on the client and is your target falsy?\n- Does this error occur on the server and is the sheet falsy?\n\n", 5: "The clone method cannot be used on the client!\n\n- Are you running in a client-like environment on the server?\n- Are you trying to run SSR on the client?\n\n", 6: "Trying to insert a new style tag, but the given Node is unmounted!\n\n- Are you using a custom target that isn't mounted?\n- Does your document not have a valid head element?\n- Have you accidentally removed a style tag manually?\n\n", 7: 'ThemeProvider: Please return an object from your "theme" prop function, e.g.\n\n```js\ntheme={() => ({})}\n```\n\n', 8: 'ThemeProvider: Please make your "theme" prop an object.\n\n', 9: "Missing document `<head>`\n\n", 10: "Cannot find a StyleSheet instance. Usually this happens if there are multiple copies of styled-components loaded at once. Check out this issue for how to troubleshoot and fix the common cases where this situation can happen: https://github.com/styled-components/styled-components/issues/1941#issuecomment-417862021\n\n", 11: "_This error was replaced with a dev-time warning, it will be deleted for v4 final._ [createGlobalStyle] received children which will not be rendered. Please use the component without passing children elements.\n\n", 12: "It seems you are interpolating a keyframe declaration (%s) into an untagged string. This was supported in styled-components v3, but is not longer supported in v4 as keyframes are now injected on-demand. Please wrap your string in the css\\`\\` helper which ensures the styles are injected correctly. See https://www.styled-components.com/docs/api#css\n\n", 13: "%s is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\n\n", 14: 'ThemeProvider: "theme" prop is required.\n\n', 15: "A stylis plugin has been supplied that is not named. We need a name for each plugin to be able to prevent styling collisions between different stylis configurations within the same app. Before you pass your plugin to `<StyleSheetManager stylisPlugins={[]}>`, please make sure each plugin is uniquely-named, e.g.\n\n```js\nObject.defineProperty(importedPlugin, 'name', { value: 'some-unique-name' });\n```\n\n", 16: "Reached the limit of how many styled components may be created at group %s.\nYou may only create up to 1,073,741,824 components. If you're creating components dynamically,\nas for instance in your render method then you may be running into this limitation.\n\n", 17: "CSSStyleSheet could not be found on HTMLStyleElement.\nHas styled-components' style tag been unmounted or altered by another script?\n" } ; function R() { for (var e = arguments.length <= 0 ? void 0 : arguments[0], t = [], n = 1, r = arguments.length; n < r; n += 1) t.push(n < 0 || arguments.length <= n ? void 0 : arguments[n]); return t.forEach(function (t) { e = e.replace(/%[a-z]/, t); }), e; } function D(e) { for (var t = arguments.length, n = new Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++) n[r - 1] = arguments[r]; throw new Error(R.apply(void 0, [O[e]].concat(n)).trim()); } var j$1 = function () { function e(e) { this.groupSizes = new Uint32Array(512), this.length = 512, this.tag = e; } var t = e.prototype; return t.indexOfGroup = function (e) { for (var t = 0, n = 0; n < e; n++) t += this.groupSizes[n]; return t; }, t.insertRules = function (e, t) { if (e >= this.groupSizes.length) { for (var n = this.groupSizes, r = n.length, o = r; e >= o;) (o <<= 1) < 0 && D(16, "" + e); this.groupSizes = new Uint32Array(o), this.groupSizes.set(n), this.length = o; for (var s = r; s < o; s++) this.groupSizes[s] = 0; } for (var i = this.indexOfGroup(e + 1), a = 0, c = t.length; a < c; a++) this.tag.insertRule(i, t[a]) && (this.groupSizes[e]++, i++); }, t.clearGroup = function (e) { if (e < this.length) { var t = this.groupSizes[e], n = this.indexOfGroup(e), r = n + t; this.groupSizes[e] = 0; for (var o = n; o < r; o++) this.tag.deleteRule(n); } }, t.getGroup = function (e) { var t = ""; if (e >= this.length || 0 === this.groupSizes[e]) return t; for (var n = this.groupSizes[e], r = this.indexOfGroup(e), o = r + n, s = r; s < o; s++) t += this.tag.getRule(s) + "/*!sc*/\n"; return t; }, e; }(), T = new Map(), x = new Map(), k = 1, V = function (e) { if (T.has(e)) return T.get(e); for (; x.has(k);) k++; var t = k++; return ((0 | t) < 0 || t > 1 << 30) && D(16, "" + t), T.set(e, t), x.set(t, e), t; }, z = function (e) { return x.get(e); }, B = function (e, t) { t >= k && (k = t + 1), T.set(e, t), x.set(t, e); }, M = "style[" + N + '][data-styled-version="5.3.9"]', G = new RegExp("^" + N + '\\.g(\\d+)\\[id="([\\w\\d-]+)"\\].*?"([^"]*)'), L = function (e, t, n) { for (var r, o = n.split(","), s = 0, i = o.length; s < i; s++) (r = o[s]) && e.registerName(t, r); }, F = function (e, t) { for (var n = (t.textContent || "").split("/*!sc*/\n"), r = [], o = 0, s = n.length; o < s; o++) { var i = n[o].trim(); if (i) { var a = i.match(G); if (a) { var c = 0 | parseInt(a[1], 10), u = a[2]; 0 !== c && (B(u, c), L(e, u, a[3]), e.getTag().insertRules(c, r)), r.length = 0; } else r.push(i); } } }, Y = function () { return "undefined" != typeof __webpack_nonce__ ? __webpack_nonce__ : null; }, q = function (e) { var t = document.head, n = e || t, r = document.createElement("style"), o = function (e) { for (var t = e.childNodes, n = t.length; n >= 0; n--) { var r = t[n]; if (r && 1 === r.nodeType && r.hasAttribute(N)) return r; } }(n), s = void 0 !== o ? o.nextSibling : null; r.setAttribute(N, "active"), r.setAttribute("data-styled-version", "5.3.9"); var i = Y(); return i && r.setAttribute("nonce", i), n.insertBefore(r, s), r; }, H = function () { function e(e) { var t = this.element = q(e); t.appendChild(document.createTextNode("")), this.sheet = function (e) { if (e.sheet) return e.sheet; for (var t = document.styleSheets, n = 0, r = t.length; n < r; n++) { var o = t[n]; if (o.ownerNode === e) return o; } D(17); }(t), this.length = 0; } var t = e.prototype; return t.insertRule = function (e, t) { try { return this.sheet.insertRule(t, e), this.length++, !0; } catch (e) { return !1; } }, t.deleteRule = function (e) { this.sheet.deleteRule(e), this.length--; }, t.getRule = function (e) { var t = this.sheet.cssRules[e]; return void 0 !== t && "string" == typeof t.cssText ? t.cssText : ""; }, e; }(), $ = function () { function e(e) { var t = this.element = q(e); this.nodes = t.childNodes, this.length = 0; } var t = e.prototype; return t.insertRule = function (e, t) { if (e <= this.length && e >= 0) { var n = document.createTextNode(t), r = this.nodes[e]; return this.element.insertBefore(n, r || null), this.length++, !0; } return !1; }, t.deleteRule = function (e) { this.element.removeChild(this.nodes[e]), this.length--; }, t.getRule = function (e) { return e < this.length ? this.nodes[e].textContent : ""; }, e; }(), W = function () { function e(e) { this.rules = [], this.length = 0; } var t = e.prototype; return t.insertRule = function (e, t) { return e <= this.length && (this.rules.splice(e, 0, t), this.length++, !0); }, t.deleteRule = function (e) { this.rules.splice(e, 1), this.length--; }, t.getRule = function (e) { return e < this.length ? this.rules[e] : ""; }, e; }(), U = C, J = { isServer: !C, useCSSOMInjection: !I }, X = function () { function e(e, t, n) { void 0 === e && (e = w$1), void 0 === t && (t = {}), this.options = v({}, J, {}, e), this.gs = t, this.names = new Map(n), this.server = !!e.isServer, !this.server && C && U && (U = !1, function (e) { for (var t = document.querySelectorAll(M), n = 0, r = t.length; n < r; n++) { var o = t[n]; o && "active" !== o.getAttribute(N) && (F(e, o), o.parentNode && o.parentNode.removeChild(o)); } }(this)); } e.registerId = function (e) { return V(e); }; var t = e.prototype; return t.reconstructWithOptions = function (t, n) { return void 0 === n && (n = !0), new e(v({}, this.options, {}, t), this.gs, n && this.names || void 0); }, t.allocateGSInstance = function (e) { return this.gs[e] = (this.gs[e] || 0) + 1; }, t.getTag = function () { return this.tag || (this.tag = (n = (t = this.options).isServer, r = t.useCSSOMInjection, o = t.target, e = n ? new W(o) : r ? new H(o) : new $(o), new j$1(e))); var e, t, n, r, o; }, t.hasNameForId = function (e, t) { return this.names.has(e) && this.names.get(e).has(t); }, t.registerName = function (e, t) { if (V(e), this.names.has(e)) this.names.get(e).add(t);else { var n = new Set(); n.add(t), this.names.set(e, n); } }, t.insertRules = function (e, t, n) { this.registerName(e, t), this.getTag().insertRules(V(e), n); }, t.clearNames = function (e) { this.names.has(e) && this.names.get(e).clear(); }, t.clearRules = function (e) { this.getTag().clearGroup(V(e)), this.clearNames(e); }, t.clearTag = function () { this.tag = void 0; }, t.toString = function () { return function (e) { for (var t = e.getTag(), n = t.length, r = "", o = 0; o < n; o++) { var s = z(o); if (void 0 !== s) { var i = e.names.get(s), a = t.getGroup(o); if (i && a && i.size) { var c = N + ".g" + o + '[id="' + s + '"]', u = ""; void 0 !== i && i.forEach(function (e) { e.length > 0 && (u += e + ","); }), r += "" + a + c + '{content:"' + u + '"}/*!sc*/\n'; } } } return r; }(this); }, e; }(), Z = /(a)(d)/gi, K = function (e) { return String.fromCharCode(e + (e > 25 ? 39 : 97)); }; function Q(e) { var t, n = ""; for (t = Math.abs(e); t > 52; t = t / 52 | 0) n = K(t % 52) + n; return (K(t % 52) + n).replace(Z, "$1-$2"); } var ee = function (e, t) { for (var n = t.length; n;) e = 33 * e ^ t.charCodeAt(--n); return e; }, te = function (e) { return ee(5381, e); }; function ne(e) { for (var t = 0; t < e.length; t += 1) { var n = e[t]; if (E(n) && !_(n)) return !1; } return !0; } var re = te("5.3.9"), oe = function () { function e(e, t, n) { this.rules = e, this.staticRulesId = "", this.isStatic = "production" === "development" , this.componentId = t, this.baseHash = ee(re, t), this.baseStyle = n, X.registerId(t); } return e.prototype.generateAndInjectStyles = function (e, t, n) { var r = this.componentId, o = []; if (this.baseStyle && o.push(this.baseStyle.generateAndInjectStyles(e, t, n)), this.isStatic && !n.hash) { if (this.staticRulesId && t.hasNameForId(r, this.staticRulesId)) o.push(this.staticRulesId);else { var s = _e(this.rules, e, t, n).join(""), i = Q(ee(this.baseHash, s) >>> 0); if (!t.hasNameForId(r, i)) { var a = n(s, "." + i, void 0, r); t.insertRules(r, i, a); } o.push(i), this.staticRulesId = i; } } else { for (var c = this.rules.length, u = ee(this.baseHash, n.hash), l = "", d = 0; d < c; d++) { var h = this.rules[d]; if ("string" == typeof h) l += h, (u = ee(u, h + d));else if (h) { var p = _e(h, e, t, n), f = Array.isArray(p) ? p.join("") : p; u = ee(u, f + d), l += f; } } if (l) { var m = Q(u >>> 0); if (!t.hasNameForId(r, m)) { var v = n(l, "." + m, void 0, r); t.insertRules(r, m, v); } o.push(m); } } return o.join(" "); }, e; }(), se = /^\s*\/\/.*$/gm, ie$2 = [":", "[", ".", "#"]; function ae(e) { var t, n, r, o, s = void 0 === e ? w$1 : e, i = s.options, a = void 0 === i ? w$1 : i, c = s.plugins, u = void 0 === c ? S : c, l = new stylis_min(a), d = [], p = function (e) { function t(t) { if (t) try { e(t + "}"); } catch (e) {} } return function (n, r, o, s, i, a, c, u, l, d) { switch (n) { case 1: if (0 === l && 64 === r.charCodeAt(0)) return e(r + ";"), ""; break; case 2: if (0 === u) return r + "/*|*/"; break; case 3: switch (u) { case 102: case 112: return e(o[0] + r), ""; default: return r + (0 === d ? "/*|*/" : ""); } case -2: r.split("/*|*/}").forEach(t); } }; }(function (e) { d.push(e); }), f = function (e, r, s) { return 0 === r && -1 !== ie$2.indexOf(s[n.length]) || s.match(o) ? e : "." + t; }; function m(e, s, i, a) { void 0 === a && (a = "&"); var c = e.replace(se, ""), u = s && i ? i + " " + s + " { " + c + " }" : c; return t = a, n = s, r = new RegExp("\\" + n + "\\b", "g"), o = new RegExp("(\\" + n + "\\b){2,}"), l(i || !s ? "" : s, u); } return l.use([].concat(u, [function (e, t, o) { 2 === e && o.length && o[0].lastIndexOf(n) > 0 && (o[0] = o[0].replace(r, f)); }, p, function (e) { if (-2 === e) { var t = d; return d = [], t; } }])), m.hash = u.length ? u.reduce(function (e, t) { return t.name || D(15), ee(e, t.name); }, 5381).toString() : "", m; } var ce = /*#__PURE__*/React__namespace.default.createContext(), ue = ce.Consumer, le = /*#__PURE__*/React__namespace.default.createContext(), de = (le.Consumer, new X()), he = ae(); function pe() { return React.useContext(ce) || de; } function fe() { return React.useContext(le) || he; } function me(e) { var t = React.useState(e.stylisPlugins), n = t[0], s = t[1], c = pe(), u = React.useMemo(function () { var t = c; return e.sheet ? t = e.sheet : e.target && (t = t.reconstructWithOptions({ target: e.target }, !1)), e.disableCSSOMInjection && (t = t.reconstructWithOptions({ useCSSOMInjection: !1 })), t; }, [e.disableCSSOMInjection, e.sheet, e.target]), l = React.useMemo(function () { return ae({ options: { prefix: !e.disableVendorPrefixes }, plugins: n }); }, [e.disableVendorPrefixes, n]); return React.useEffect(function () { d(n, e.stylisPlugins) || s(e.stylisPlugins); }, [e.stylisPlugins]), /*#__PURE__*/React__namespace.default.createElement(ce.Provider, { value: u }, /*#__PURE__*/React__namespace.default.createElement(le.Provider, { value: l }, React__namespace.default.Children.only(e.children) )); } var ve = function () { function e(e, t) { var n = this; this.inject = function (e, t) { void 0 === t && (t = he); var r = n.name + t.hash; e.hasNameForId(n.id, r) || e.insertRules(n.id, r, t(n.rules, r, "@keyframes")); }, this.toString = function () { return D(12, String(n.name)); }, this.name = e, this.id = "sc-keyframes-" + e, this.rules = t; } return e.prototype.getName = function (e) { return void 0 === e && (e = he), this.name + e.hash; }, e; }(), ye = /([A-Z])/, ge = /([A-Z])/g, Se = /^ms-/, we = function (e) { return "-" + e.toLowerCase(); }; function Ee(e) { return ye.test(e) ? e.replace(ge, we).replace(Se, "-ms-") : e; } var be = function (e) { return null == e || !1 === e || "" === e; }; function _e(e, n, r, o) { if (Array.isArray(e)) { for (var s, i = [], a = 0, c = e.length; a < c; a += 1) "" !== (s = _e(e[a], n, r, o)) && (Array.isArray(s) ? i.push.apply(i, s) : i.push(s)); return i; } if (be(e)) return ""; if (_(e)) return "." + e.styledComponentId; if (E(e)) { if ("function" != typeof (l = e) || l.prototype && l.prototype.isReactComponent || !n) return e; var u = e(n); return reactIsExports.isElement(u) && console.warn(b(e) + " is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details."), _e(u, n, r, o); } var l; return e instanceof ve ? r ? (e.inject(r, o), e.getName(o)) : e : g(e) ? function e(t, n) { var r, o, s = []; for (var i in t) t.hasOwnProperty(i) && !be(t[i]) && (Array.isArray(t[i]) && t[i].isCss || E(t[i]) ? s.push(Ee(i) + ":", t[i], ";") : g(t[i]) ? s.push.apply(s, e(t[i], i)) : s.push(Ee(i) + ": " + (r = i, null == (o = t[i]) || "boolean" == typeof o || "" === o ? "" : "number" != typeof o || 0 === o || r in unitlessKeys$1 ? String(o).trim() : o + "px") + ";")); return n ? [n + " {"].concat(s, ["}"]) : s; }(e) : e.toString(); } var Ne = function (e) { return Array.isArray(e) && (e.isCss = !0), e; }; function Ae(e) { for (var t = arguments.length, n = new Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++) n[r - 1] = arguments[r]; return E(e) || g(e) ? Ne(_e(y(S, [e].concat(n)))) : 0 === n.length && 1 === e.length && "string" == typeof e[0] ? e : Ne(_e(y(e, n))); } var Ce = /invalid hook call/i, Ie = new Set(), Pe = function (e, t) { { var n = "The component " + e + (t ? ' with the id of "' + t + '"' : "") + " has been created dynamically.\nYou may see this warning because you've called styled inside another component.\nTo resolve this only create new StyledComponents outside of any render method and function component.", r = console.error; try { var o = !0; console.error = function (e) { if (Ce.test(e)) o = !1, Ie.delete(n);else { for (var t = arguments.length, s = new Array(t > 1 ? t - 1 : 0), i = 1; i < t; i++) s[i - 1] = arguments[i]; r.apply(void 0, [e].concat(s)); } }, React.useRef(), o && !Ie.has(n) && (console.warn(n), Ie.add(n)); } catch (e) { Ce.test(e.message) && Ie.delete(n); } finally { console.error = r; } } }, Oe = function (e, t, n) { return void 0 === n && (n = w$1), e.theme !== n.theme && e.theme || t || n.theme; }, Re = /[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g, De = /(^-|-$)/g; function je(e) { return e.replace(Re, "-").replace(De, ""); } var Te = function (e) { return Q(te(e) >>> 0); }; function xe(e) { return "string" == typeof e && (e.charAt(0) === e.charAt(0).toLowerCase()); } var ke = function (e) { return "function" == typeof e || "object" == typeof e && null !== e && !Array.isArray(e); }, Ve = function (e) { return "__proto__" !== e && "constructor" !== e && "prototype" !== e; }; function ze(e, t, n) { var r = e[n]; ke(t) && ke(r) ? Be(r, t) : e[n] = t; } function Be(e) { for (var t = arguments.length, n = new Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++) n[r - 1] = arguments[r]; for (var o = 0, s = n; o < s.length; o++) { var i = s[o]; if (ke(i)) for (var a in i) Ve(a) && ze(e, i[a], a); } return e; } var Me = /*#__PURE__*/React__namespace.default.createContext(), Ge = Me.Consumer; function Le(e) { var t = React.useContext(Me), n = React.useMemo(function () { return function (e, t) { if (!e) return D(14); if (E(e)) { var n = e(t); return null !== n && !Array.isArray(n) && "object" == typeof n ? n : D(7); } return Array.isArray(e) || "object" != typeof e ? D(8) : t ? v({}, t, {}, e) : e; }(e.theme, t); }, [e.theme, t]); return e.children ? /*#__PURE__*/React__namespace.default.createElement(Me.Provider, { value: n }, e.children) : null; } var Fe = {}; function Ye(e, t, n) { var o = _(e), i = !xe(e), a = t.attrs, c = void 0 === a ? S : a, d = t.componentId, h = void 0 === d ? function (e, t) { var n = "string" != typeof e ? "sc" : je(e); Fe[n] = (Fe[n] || 0) + 1; var r = n + "-" + Te("5.3.9" + n + Fe[n]); return t ? t + "-" + r : r; }(t.displayName, t.parentComponentId) : d, p = t.displayName, y = void 0 === p ? function (e) { return xe(e) ? "styled." + e : "Styled(" + b(e) + ")"; }(e) : p, g = t.displayName && t.componentId ? je(t.displayName) + "-" + t.componentId : t.componentId || h, N = o && e.attrs ? Array.prototype.concat(e.attrs, c).filter(Boolean) : c, A = t.shouldForwardProp; o && e.shouldForwardProp && (A = t.shouldForwardProp ? function (n, r, o) { return e.shouldForwardProp(n, r, o) && t.shouldForwardProp(n, r, o); } : e.shouldForwardProp); var C, I = new oe(n, g, o ? e.componentStyle : void 0), P = I.isStatic && 0 === c.length, O = function (e, t) { return function (e, t, n, r) { var o = e.attrs, i = e.componentStyle, a = e.defaultProps, c = e.foldedComponentIds, d = e.shouldForwardProp, h = e.styledComponentId, p = e.target; React.useDebugValue(h); var m = function (e, t, n) { void 0 === e && (e = w$1); var r = v({}, t, { theme: e }), o = {}; return n.forEach(function (e) { var t, n, s, i = e; for (t in E(i) && (i = i(r)), i) r[t] = o[t] = "className" === t ? (n = o[t], s = i[t], n && s ? n + " " + s : n || s) : i[t]; }), [r, o]; }(Oe(t, React.useContext(Me), a) || w$1, t, o), y = m[0], g = m[1], S = function (e, t, n, r) { var o = pe(), s = fe(), i = t ? e.generateAndInjectStyles(w$1, o, s) : e.generateAndInjectStyles(n, o, s); return React.useDebugValue(i), !t && r && r(i), i; }(i, r, y, e.warnTooManyClasses ), b = n, _ = g.$as || t.$as || g.as || t.as || p, N = xe(_), A = g !== t ? v({}, t, {}, g) : t, C = {}; for (var I in A) "$" !== I[0] && "as" !== I && ("forwardedAs" === I ? C.as = A[I] : (d ? d(I, isPropValid, _) : !N || isPropValid(I)) && (C[I] = A[I])); return t.style && g.style !== t.style && (C.style = v({}, t.style, {}, g.style)), C.className = Array.prototype.concat(c, h, S !== h ? S : null, t.className, g.className).filter(Boolean).join(" "), C.ref = b, /*#__PURE__*/React.createElement(_, C); }(C, e, t, P); }; return O.displayName = y, (C = /*#__PURE__*/React__namespace.default.forwardRef(O)).attrs = N, C.componentStyle = I, C.displayName = y, C.shouldForwardProp = A, C.foldedComponentIds = o ? Array.prototype.concat(e.foldedComponentIds, e.styledComponentId) : S, C.styledComponentId = g, C.target = o ? e.target : e, C.withComponent = function (e) { var r = t.componentId, o = function (e, t) { if (null == e) return {}; var n, r, o = {}, s = Object.keys(e); for (r = 0; r < s.length; r++) n = s[r], t.indexOf(n) >= 0 || (o[n] = e[n]); return o; }(t, ["componentId"]), s = r && r + "-" + (xe(e) ? e : je(b(e))); return Ye(e, v({}, o, { attrs: N, componentId: s }), n); }, Object.defineProperty(C, "defaultProps", { get: function () { return this._foldedDefaultProps; }, set: function (t) { this._foldedDefaultProps = o ? Be({}, e.defaultProps, t) : t; } }), (Pe(y, g), C.warnTooManyClasses = function (e, t) { var n = {}, r = !1; return function (o) { if (!r && (n[o] = !0, Object.keys(n).length >= 200)) { var s = t ? ' with the id of "' + t + '"' : ""; console.warn("Over 200 classes were generated for component " + e + s + ".\nConsider using the attrs method, together with a style object for frequently changed styles.\nExample:\n const Component = styled.div.attrs(props => ({\n style: {\n background: props.background,\n },\n }))`width: 100%;`\n\n <Component />"), r = !0, n = {}; } }; }(y, g)), Object.defineProperty(C, "toString", { value: function () { return "." + C.styledComponentId; } }), i && hoistNonReactStatics$1(C, e, { attrs: !0, componentStyle: !0, displayName: !0, foldedComponentIds: !0, shouldForwardProp: !0, styledComponentId: !0, target: !0, withComponent: !0 }), C; } var qe = function (e) { return function e(t, r, o) { if (void 0 === o && (o = w$1), !reactIsExports.isValidElementType(r)) return D(1, String(r)); var s = function () { return t(r, o, Ae.apply(void 0, arguments)); }; return s.withConfig = function (n) { return e(t, r, v({}, o, {}, n)); }, s.attrs = function (n) { return e(t, r, v({}, o, { attrs: Array.prototype.concat(o.attrs, n).filter(Boolean) })); }, s; }(Ye, e); }; ["a", "abbr", "address", "area", "article", "aside", "audio", "b", "base", "bdi", "bdo", "big", "blockquote", "body", "br", "button", "canvas", "caption", "cite", "code", "col", "colgroup", "data", "datalist", "dd", "del", "details", "dfn", "dialog", "div", "dl", "dt", "em", "embed", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "iframe", "img", "input", "ins", "kbd", "keygen", "label", "legend", "li", "link", "main", "map", "mark", "marquee", "menu", "menuitem", "meta", "meter", "nav", "noscript", "object", "ol", "optgroup", "option", "output", "p", "param", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "script", "section", "select", "small", "source", "span", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "textarea", "tfoot", "th", "thead", "time", "title", "tr", "track", "u", "ul", "var", "video", "wbr", "circle", "clipPath", "defs", "ellipse", "foreignObject", "g", "image", "line", "linearGradient", "marker", "mask", "path", "pattern", "polygon", "polyline", "radialGradient", "rect", "stop", "svg", "text", "textPath", "tspan"].forEach(function (e) { qe[e] = qe(e); }); var He = function () { function e(e, t) { this.rules = e, this.componentId = t, this.isStatic = ne(e), X.registerId(this.componentId + 1); } var t = e.prototype; return t.createStyles = function (e, t, n, r) { var o = r(_e(this.rules, t, n, r).join(""), ""), s = this.componentId + e; n.insertRules(s, s, o); }, t.removeStyles = function (e, t) { t.clearRules(this.componentId + e); }, t.renderStyles = function (e, t, n, r) { e > 2 && X.registerId(this.componentId + e), this.removeStyles(e, n), this.createStyles(e, t, n, r); }, e; }(); function $e(e) { for (var t = arguments.length, n = new Array(t > 1 ? t - 1 : 0), o = 1; o < t; o++) n[o - 1] = arguments[o]; var i = Ae.apply(void 0, [e].concat(n)), a = "sc-global-" + Te(JSON.stringify(i)), u = new He(i, a); function l(e) { var t = pe(), n = fe(), o = React.useContext(Me), u = React.useRef(t.allocateGSInstance(a)).current; return React__namespace.default.Children.count(e.children) && console.warn("The global style component " + a + " was given child JSX. createGlobalStyle does not render children."), i.some(function (e) { return "string" == typeof e && -1 !== e.indexOf("@import"); }) && console.warn("Please do not use @import CSS syntax in createGlobalStyle at this time, as the CSSOM APIs we use in production do not handle it well. Instead, we recommend using a library such as react-helmet to inject a typical <link> meta tag to the stylesheet, or simply embedding it manually in your index.html <head> section for a simpler app."), t.server && d(u, e, t, o, n), null; } function d(e, t, n, r, o) { if (u.isStatic) u.renderStyles(e, P, n, o);else { var s = v({}, t, { theme: Oe(t, r, l.defaultProps) }); u.renderStyles(e, s, n, o); } } return Pe(a), /*#__PURE__*/React__namespace.default.memo(l); } function We(e) { "undefined" != typeof navigator && "ReactNative" === navigator.product && console.warn("`keyframes` cannot be used on ReactNative, only on the web. To do animation in ReactNative please use Animated."); for (var t = arguments.length, n = new Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++) n[r - 1] = arguments[r]; var o = Ae.apply(void 0, [e].concat(n)).join(""), s = Te(o); return new ve(s, o); } var Ue = /^\s*<\/[a-z]/i, Je = function () { function e() { var e = this; this._emitSheetCSS = function () { var t = e.instance.toString(); if (!t) return ""; var n = Y(); return "<style " + [n && 'nonce="' + n + '"', N + '="true"', 'data-styled-version="5.3.9"'].filter(Boolean).join(" ") + ">" + t + "</style>"; }, this.getStyleTags = function () { return e.sealed ? D(2) : e._emitSheetCSS(); }, this.getStyleElement = function () { var t; if (e.sealed) return D(2); var n = ((t = {})[N] = "", t["data-styled-version"] = "5.3.9", t.dangerouslySetInnerHTML = { __html: e.instance.toString() }, t), o = Y(); return o && (n.nonce = o), [/*#__PURE__*/React__namespace.default.createElement("style", v({}, n, { key: "sc-0-0" }))]; }, this.seal = function () { e.sealed = !0; }, this.instance = new X({ isServer: !0 }), this.sealed = !1; } var t = e.prototype; return t.collectStyles = function (e) { return this.sealed ? D(2) : /*#__PURE__*/React__namespace.default.createElement(me, { sheet: this.instance }, e); }, t.interleaveWithNodeStream = function (e) { if (C) return D(3); if (this.sealed) return D(2); this.seal(); var t = require("stream"), n = (t.Readable, t.Transform), r = e, o = this.instance, s = this._emitSheetCSS, i = new n({ transform: function (e, t, n) { var r = e.toString(), i = s(); if (o.clearTag(), Ue.test(r)) { var a = r.indexOf(">") + 1, c = r.slice(0, a), u = r.slice(a); this.push(c + i + u); } else this.push(i + r); n(); } }); return r.on("error", function (e) { i.emit("error", e); }), r.pipe(i); }, e; }(), Xe = function (e) { var t = /*#__PURE__*/React__namespace.default.forwardRef(function (t, n) { var o = React.useContext(Me), i = e.defaultProps, a = Oe(t, o, i); return void 0 === a && console.warn('[withTheme] You are not using a ThemeProvider nor passing a theme prop or a theme in defaultProps in component class "' + b(e) + '"'), /*#__PURE__*/React__namespace.default.createElement(e, v({}, t, { theme: a, ref: n })); }); return hoistNonReactStatics$1(t, e), t.displayName = "WithTheme(" + b(e) + ")", t; }, Ze = function () { return React.useContext(Me); }, Ke = { StyleSheet: X, masterSheet: de }; "undefined" != typeof navigator && "ReactNative" === navigator.product && console.warn("It looks like you've imported 'styled-components' on React Native.\nPerhaps you're looking to import 'styled-components/native'?\nRead more about this at https://www.styled-components.com/docs/basics#react-native"), "undefined" != typeof window && (window["__styled-components-init__"] = window["__styled-components-init__"] || 0, 1 === window["__styled-components-init__"] && console.warn("It looks like there are several instances of 'styled-components' initialized in this application. This may cause dynamic styles to not render properly, errors during the rehydration process, a missing theme prop, and makes your application bigger without good reason.\n\nSee https://s-c.sh/2BAXzed for more info."), window["__styled-components-init__"] += 1); const styled = typeof qe === 'function' ? qe : qe.default; var styled$1 = /*#__PURE__*/Object.freeze({ __proto__: null, ServerStyleSheet: Je, StyleSheetConsumer: ue, StyleSheetContext: ce, StyleSheetManager: me, ThemeConsumer: Ge, ThemeContext: Me, ThemeProvider: Le, __PRIVATE__: Ke, createGlobalStyle: $e, css: Ae, default: styled, isStyledComponent: _, keyframes: We, styled: styled, useTheme: Ze, version: A, withTheme: Xe }); const Avatar = styled.div` width: 36px; height: 36px; border-radius: 50%; position: relative; display: flex; align-items: center; justify-content: center; flex-shrink: 0; line-height: 1; overflow: hidden; font-size: ${({ theme }) => theme.space.lg}; user-select: none; &:before { content: ''; position: absolute; width: 100%; height: 100%; border-radius: 50%; background-color: transparent; background-image: url('${({ src }) => src}'); background-position: center; background-repeat: no-repeat; background-size: cover; } background-color: ${({ theme }) => theme.colors.primary100}; color: ${({ theme }) => theme.colors.white}; ${space} `; Avatar.displayName = 'Avatar'; // eslint-disable-next-line import/prefer-default-export /** * * Generates class name for given component. It is used by AdminJS core to append namespaced * classes. * * ### example * * ```javascript * import { cssClass } from '@adminjs/design-system' * * cssClass('Icon', 'my-regular-class-name') * // returns: 'adminjs_Icon my-regular-class-name' * ``` * * * @param {string | Array<string>} className * @param {string} [regularClass] * @memberof module:@adminjs/design-system */ const cssClass = (className, regularClass) => { let names = []; if (className.join) { names = className; } else { names = [className]; } const parsed = names.map(name => `adminjs_${name}`); if (regularClass) { parsed.push(regularClass); } return parsed.join(' '); }; /** * @load ./badge-props.doc.md * @memberof Badge * @alias BadgeProps * @property {string} [...] Other props from {@link ColorProps}, {@link SpaceProps} * and {@link TypographyProps} */ const variantStyle$1 = (variantColor, props) => ({ bg: variantColor, borderColor: variantColor, color: props.outline ? variantColor : 'white' }); const colorVariant = props => variant({ variants: { primary: variantStyle$1('primary100', props), danger: variantStyle$1('error', props), success: variantStyle$1('success', props), info: variantStyle$1('info', props), secondary: variantStyle$1('accent', props), light: variantStyle$1('light', props), default: {} } }); const sizeVariants$4 = variant({ prop: 'size', variants: { sm: { py: 'xs' }, lg: { py: '11px', px: '14px' }, default: {} } }); /** * @load ./badge.doc.md * @see BadgeProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-badge--default StoryBook} * @component * @hideconstructor * @section design-system * @subcategory Atoms */ const Badge = styled.span` border-radius: 20px; border: 1px solid ${({ theme }) => theme.colors.grey40}; color: ${({ outline, theme }) => outline ? theme.colors.grey60 : theme.colors.white}; vertical-align: middle; font-family: ${({ theme }) => theme.font}; display: inline; white-space: nowrap; ${space}; ${color}; ${typography}; ${props => colorVariant(props)}; ${sizeVariants$4}; ${({ outline }) => outline ? 'background: transparent;' : ''} `; Badge.defaultProps = { px: 'default', py: 'sm', fontSize: 'sm', bg: 'grey40', className: cssClass('Badge') }; Badge.displayName = 'Badge'; /** * @load ./box-props.doc.md * @memberof Box * @alias BoxProps * @property {string} [...] Other props from {@link SpaceProps}, {@link ColorProps}, * {@link LayoutProps}, {@link FlexboxProps}, * {@link PositionProps} and {@link BorderProps}. */ const variants$4 = variant({ variants: { grey: { flexGrow: 1, bg: 'bg', py: 'xl', px: ['0', 'xl'], className: cssClass(['Box', 'Box_Grey']) }, container: { flexGrow: 1, bg: 'container', py: 'xl', px: ['0', 'xl'], className: cssClass(['Box', 'Box_Container']), borderRadius: 8 }, white: { px: ['default', 'xxl'], py: 'xxl', bg: 'white', className: cssClass(['Box', 'Box_White']) }, card: { p: 'xxl', bg: 'white', className: cssClass(['Box', 'Box_Card']), boxShadow: 'card' }, transparent: { px: ['default', 'xxl'], py: 'xxl', bg: 'transparent', className: cssClass(['Box', 'Box_Transparent']) } } }); /** * @load ./box.doc.md * @hideconstructor * @component * @subcategory Atoms * @section design-system * @see BoxProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-box--simple-white-gray-wrapper StoryBook} */ const Box$1 = styled.section` box-sizing: border-box; min-width: 0; ${({ flex }) => flex && typeof flex === 'boolean' ? 'display: flex;' : ''} font-family: ${({ theme }) => theme.font}; line-height: ${({ theme }) => theme.lineHeights.default}; font-size: ${({ theme }) => theme.fontSizes.default}; font-weight: normal; ${({ animate }) => animate ? 'transition: all 500ms;' : ''}; ${space}; ${color}; ${layout}; ${flexbox}; ${grid}; ${border}; ${borderRadius$1} ${shadow}; ${position$1}; ${variants$4}; `; Box$1.defaultProps = { className: cssClass('Box') }; Box$1.displayName = 'Box'; const datepickerStyles = Ae` .react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle, .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle, .react-datepicker__year-read-view--down-arrow, .react-datepicker__month-read-view--down-arrow, .react-datepicker__month-year-read-view--down-arrow { margin-left: -8px; position: absolute; } .react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle, .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle, .react-datepicker__year-read-view--down-arrow, .react-datepicker__month-read-view--down-arrow, .react-datepicker__month-year-read-view--down-arrow, .react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle::before, .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle::before, .react-datepicker__year-read-view--down-arrow::before, .react-datepicker__month-read-view--down-arrow::before, .react-datepicker__month-year-read-view--down-arrow::before { box-sizing: content-box; position: absolute; border: 8px solid transparent; height: 0; width: 1px; } .react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle::before, .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle::before, .react-datepicker__year-read-view--down-arrow::before, .react-datepicker__month-read-view--down-arrow::before, .react-datepicker__month-year-read-view--down-arrow::before { content: ""; z-index: -1; border-width: 8px; left: -8px; border-bottom-color: #aeaeae; } .react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle { top: 0; margin-top: -8px; } .react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle, .react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle::before { border-top: none; border-bottom-color: #f0f0f0; } .react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle::before { top: -1px; border-bottom-color: #aeaeae; } .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle, .react-datepicker__year-read-view--down-arrow, .react-datepicker__month-read-view--down-arrow, .react-datepicker__month-year-read-view--down-arrow { bottom: 0; margin-bottom: -8px; } .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle, .react-datepicker__year-read-view--down-arrow, .react-datepicker__month-read-view--down-arrow, .react-datepicker__month-year-read-view--down-arrow, .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle::before, .react-datepicker__year-read-view--down-arrow::before, .react-datepicker__month-read-view--down-arrow::before, .react-datepicker__month-year-read-view--down-arrow::before { border-bottom: none; border-top-color: #fff; } .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle::before, .react-datepicker__year-read-view--down-arrow::before, .react-datepicker__month-read-view--down-arrow::before, .react-datepicker__month-year-read-view--down-arrow::before { bottom: -1px; border-top-color: #aeaeae; } .react-datepicker-wrapper { display: inline-block; padding: 0; border: 0; } .react-datepicker { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 0.8rem; background-color: #fff; color: #000; border: 1px solid #aeaeae; border-radius: 0.3rem; display: inline-block; position: relative; } .react-datepicker--time-only .react-datepicker__triangle { left: 35px; } .react-datepicker--time-only .react-datepicker__time-container { border-left: 0; } .react-datepicker--time-only .react-datepicker__time { border-radius: 0.3rem; } .react-datepicker--time-only .react-datepicker__time-box { border-radius: 0.3rem; } .react-datepicker__triangle { position: absolute; left: 50px; } .react-datepicker-popper { z-index: 1; } .react-datepicker-popper[data-placement^="bottom"] { margin-top: 10px; } .react-datepicker-popper[data-placement="bottom-end"] .react-datepicker__triangle, .react-datepicker-popper[data-placement="top-end"] .react-datepicker__triangle { left: auto; right: 50px; } .react-datepicker-popper[data-placement^="top"] { margin-bottom: 10px; } .react-datepicker-popper[data-placement^="right"] { margin-left: 8px; } .react-datepicker-popper[data-placement^="right"] .react-datepicker__triangle { left: auto; right: 42px; } .react-datepicker-popper[data-placement^="left"] { margin-right: 8px; } .react-datepicker-popper[data-placement^="left"] .react-datepicker__triangle { left: 42px; right: auto; } .react-datepicker__header { text-align: center; background-color: #f0f0f0; border-bottom: 1px solid #aeaeae; border-top-left-radius: 0.3rem; border-top-right-radius: 0.3rem; padding-top: 8px; position: relative; } .react-datepicker__header--time { padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } .react-datepicker__year-dropdown-container--select, .react-datepicker__month-dropdown-container--select, .react-datepicker__month-year-dropdown-container--select, .react-datepicker__year-dropdown-container--scroll, .react-datepicker__month-dropdown-container--scroll, .react-datepicker__month-year-dropdown-container--scroll { display: inline-block; margin: 0 2px; } .react-datepicker__current-month, .react-datepicker-time__header, .react-datepicker-year-header { margin-top: 0; color: #000; font-weight: bold; font-size: 0.944rem; } .react-datepicker-time__header { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .react-datepicker__navigation { background: none; line-height: 1.7rem; text-align: center; cursor: pointer; position: absolute; top: 10px; width: 0; padding: 0; border: 0.45rem solid transparent; z-index: 1; height: 10px; width: 10px; text-indent: -999em; overflow: hidden; } .react-datepicker__navigation--previous { left: 10px; border-right-color: #ccc; } .react-datepicker__navigation--previous:hover { border-right-color: #b3b3b3; } .react-datepicker__navigation--previous--disabled, .react-datepicker__navigation--previous--disabled:hover { border-right-color: #e6e6e6; cursor: default; } .react-datepicker__navigation--next { right: 10px; border-left-color: #ccc; } .react-datepicker__navigation--next--with-time:not(.react-datepicker__navigation--next--with-today-button) { right: 80px; } .react-datepicker__navigation--next:hover { border-left-color: #b3b3b3; } .react-datepicker__navigation--next--disabled, .react-datepicker__navigation--next--disabled:hover { border-left-color: #e6e6e6; cursor: default; } .react-datepicker__navigation--years { position: relative; top: 0; display: block; margin-left: auto; margin-right: auto; } .react-datepicker__navigation--years-previous { top: 4px; border-top-color: #ccc; } .react-datepicker__navigation--years-previous:hover { border-top-color: #b3b3b3; } .react-datepicker__navigation--years-upcoming { top: -4px; border-bottom-color: #ccc; } .react-datepicker__navigation--years-upcoming:hover { border-bottom-color: #b3b3b3; } .react-datepicker__month-container { float: left; } .react-datepicker__month { margin: 0.4rem; text-align: center; } .react-datepicker__month .react-datepicker__month-text, .react-datepicker__month .react-datepicker__quarter-text { display: inline-block; width: 4rem; margin: 2px; } .react-datepicker__input-time-container { clear: both; width: 100%; float: left; margin: 5px 0 10px 15px; text-align: left; } .react-datepicker__input-time-container .react-datepicker-time__caption { display: inline-block; } .react-datepicker__input-time-container .react-datepicker-time__input-container { display: inline-block; } .react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input { display: inline-block; margin-left: 10px; } .react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input { width: 85px; } .react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type="time"]::-webkit-inner-spin-button, .react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type="time"]::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; } .react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type="time"] { -moz-appearance: textfield; } .react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__delimiter { margin-left: 5px; display: inline-block; } .react-datepicker__time-container { float: right; border-left: 1px solid #aeaeae; width: 85px; } .react-datepicker__time-container--with-today-button { display: inline; border: 1px solid #aeaeae; border-radius: 0.3rem; position: absolute; right: -72px; top: 0; } .react-datepicker__time-container .react-datepicker__time { position: relative; background: white; } .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box { width: 85px; overflow-x: hidden; margin: 0 auto; text-align: center; } .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list { list-style: none; margin: 0; height: calc(195px + (1.7rem / 2)); overflow-y: scroll; padding-right: 0px; padding-left: 0px; width: 100%; box-sizing: content-box; } .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item { height: 30px; padding: 5px 10px; white-space: nowrap; } .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item:hover { cursor: pointer; background-color: #f0f0f0; } .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected { background-color: #216ba5; color: white; font-weight: bold; } .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected:hover { background-color: #216ba5; } .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled { color: #ccc; } .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled:hover { cursor: default; background-color: transparent; } .react-datepicker__week-number { color: #ccc; display: inline-block; width: 1.7rem; line-height: 1.7rem; text-align: center; margin: 0.166rem; } .react-datepicker__week-number.react-datepicker__week-number--clickable { cursor: pointer; } .react-datepicker__week-number.react-datepicker__week-number--clickable:hover { border-radius: 0.3rem; background-color: #f0f0f0; } .react-datepicker__day-names, .react-datepicker__week { white-space: nowrap; } .react-datepicker__day-name, .react-datepicker__day, .react-datepicker__time-name { color: #000; display: inline-block; width: 1.7rem; line-height: 1.7rem; text-align: center; margin: 0.166rem; } .react-datepicker__month--selected, .react-datepicker__month--in-selecting-range, .react-datepicker__month--in-range, .react-datepicker__quarter--selected, .react-datepicker__quarter--in-selecting-range, .react-datepicker__quarter--in-range { border-radius: 0.3rem; background-color: #216ba5; color: #fff; } .react-datepicker__month--selected:hover, .react-datepicker__month--in-selecting-range:hover, .react-datepicker__month--in-range:hover, .react-datepicker__quarter--selected:hover, .react-datepicker__quarter--in-selecting-range:hover, .react-datepicker__quarter--in-range:hover { background-color: #1d5d90; } .react-datepicker__month--disabled, .react-datepicker__quarter--disabled { color: #ccc; pointer-events: none; } .react-datepicker__month--disabled:hover, .react-datepicker__quarter--disabled:hover { cursor: default; background-color: transparent; } .react-datepicker__day, .react-datepicker__month-text, .react-datepicker__quarter-text { cursor: pointer; } .react-datepicker__day:hover, .react-datepicker__month-text:hover, .react-datepicker__quarter-text:hover { border-radius: 0.3rem; background-color: #f0f0f0; } .react-datepicker__day--today, .react-datepicker__month-text--today, .react-datepicker__quarter-text--today { font-weight: bold; } .react-datepicker__day--highlighted, .react-datepicker__month-text--highlighted, .react-datepicker__quarter-text--highlighted { border-radius: 0.3rem; background-color: #3dcc4a; color: #fff; } .react-datepicker__day--highlighted:hover, .react-datepicker__month-text--highlighted:hover, .react-datepicker__quarter-text--highlighted:hover { background-color: #32be3f; } .react-datepicker__day--highlighted-custom-1, .react-datepicker__month-text--highlighted-custom-1, .react-datepicker__quarter-text--highlighted-custom-1 { color: magenta; } .react-datepicker__day--highlighted-custom-2, .react-datepicker__month-text--highlighted-custom-2, .react-datepicker__quarter-text--highlighted-custom-2 { color: green; } .react-datepicker__day--selected, .react-datepicker__day--in-selecting-range, .react-datepicker__day--in-range, .react-datepicker__month-text--selected, .react-datepicker__month-text--in-selecting-range, .react-datepicker__month-text--in-range, .react-datepicker__quarter-text--selected, .react-datepicker__quarter-text--in-selecting-range, .react-datepicker__quarter-text--in-range { border-radius: 0.3rem; background-color: #216ba5; color: #fff; } .react-datepicker__day--selected:hover, .react-datepicker__day--in-selecting-range:hover, .react-datepicker__day--in-range:hover, .react-datepicker__month-text--selected:hover, .react-datepicker__month-text--in-selecting-range:hover, .react-datepicker__month-text--in-range:hover, .react-datepicker__quarter-text--selected:hover, .react-datepicker__quarter-text--in-selecting-range:hover, .react-datepicker__quarter-text--in-range:hover { background-color: #1d5d90; } .react-datepicker__day--keyboard-selected, .react-datepicker__month-text--keyboard-selected, .react-datepicker__quarter-text--keyboard-selected { border-radius: 0.3rem; background-color: #2a87d0; color: #fff; } .react-datepicker__day--keyboard-selected:hover, .react-datepicker__month-text--keyboard-selected:hover, .react-datepicker__quarter-text--keyboard-selected:hover { background-color: #1d5d90; } .react-datepicker__day--in-selecting-range , .react-datepicker__month-text--in-selecting-range , .react-datepicker__quarter-text--in-selecting-range { background-color: rgba(33, 107, 165, 0.5); } .react-datepicker__month--selecting-range .react-datepicker__day--in-range , .react-datepicker__month--selecting-range .react-datepicker__month-text--in-range , .react-datepicker__month--selecting-range .react-datepicker__quarter-text--in-range { background-color: #f0f0f0; color: #000; } .react-datepicker__day--disabled, .react-datepicker__month-text--disabled, .react-datepicker__quarter-text--disabled { cursor: default; color: #ccc; } .react-datepicker__day--disabled:hover, .react-datepicker__month-text--disabled:hover, .react-datepicker__quarter-text--disabled:hover { background-color: transparent; } .react-datepicker__month-text.react-datepicker__month--selected:hover, .react-datepicker__month-text.react-datepicker__month--in-range:hover, .react-datepicker__month-text.react-datepicker__quarter--selected:hover, .react-datepicker__month-text.react-datepicker__quarter--in-range:hover, .react-datepicker__quarter-text.react-datepicker__month--selected:hover, .react-datepicker__quarter-text.react-datepicker__month--in-range:hover, .react-datepicker__quarter-text.react-datepicker__quarter--selected:hover, .react-datepicker__quarter-text.react-datepicker__quarter--in-range:hover { background-color: #216ba5; } .react-datepicker__month-text:hover, .react-datepicker__quarter-text:hover { background-color: #f0f0f0; } .react-datepicker__input-container { position: relative; display: inline-block; width: 100%; } .react-datepicker__year-read-view, .react-datepicker__month-read-view, .react-datepicker__month-year-read-view { border: 1px solid transparent; border-radius: 0.3rem; } .react-datepicker__year-read-view:hover, .react-datepicker__month-read-view:hover, .react-datepicker__month-year-read-view:hover { cursor: pointer; } .react-datepicker__year-read-view:hover .react-datepicker__year-read-view--down-arrow, .react-datepicker__year-read-view:hover .react-datepicker__month-read-view--down-arrow, .react-datepicker__month-read-view:hover .react-datepicker__year-read-view--down-arrow, .react-datepicker__month-read-view:hover .react-datepicker__month-read-view--down-arrow, .react-datepicker__month-year-read-view:hover .react-datepicker__year-read-view--down-arrow, .react-datepicker__month-year-read-view:hover .react-datepicker__month-read-view--down-arrow { border-top-color: #b3b3b3; } .react-datepicker__year-read-view--down-arrow, .react-datepicker__month-read-view--down-arrow, .react-datepicker__month-year-read-view--down-arrow { border-top-color: #ccc; float: right; margin-left: 20px; top: 8px; position: relative; border-width: 0.45rem; } .react-datepicker__year-dropdown, .react-datepicker__month-dropdown, .react-datepicker__month-year-dropdown { background-color: #f0f0f0; position: absolute; width: 50%; left: 25%; top: 30px; z-index: 1; text-align: center; border-radius: 0.3rem; border: 1px solid #aeaeae; } .react-datepicker__year-dropdown:hover, .react-datepicker__month-dropdown:hover, .react-datepicker__month-year-dropdown:hover { cursor: pointer; } .react-datepicker__year-dropdown--scrollable, .react-datepicker__month-dropdown--scrollable, .react-datepicker__month-year-dropdown--scrollable { height: 150px; overflow-y: scroll; } .react-datepicker__year-option, .react-datepicker__month-option, .react-datepicker__month-year-option { line-height: 20px; width: 100%; display: block; margin-left: auto; margin-right: auto; } .react-datepicker__year-option:first-of-type, .react-datepicker__month-option:first-of-type, .react-datepicker__month-year-option:first-of-type { border-top-left-radius: 0.3rem; border-top-right-radius: 0.3rem; } .react-datepicker__year-option:last-of-type, .react-datepicker__month-option:last-of-type, .react-datepicker__month-year-option:last-of-type { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; border-bottom-left-radius: 0.3rem; border-bottom-right-radius: 0.3rem; } .react-datepicker__year-option:hover, .react-datepicker__month-option:hover, .react-datepicker__month-year-option:hover { background-color: #ccc; } .react-datepicker__year-option:hover .react-datepicker__navigation--years-upcoming, .react-datepicker__month-option:hover .react-datepicker__navigation--years-upcoming, .react-datepicker__month-year-option:hover .react-datepicker__navigation--years-upcoming { border-bottom-color: #b3b3b3; } .react-datepicker__year-option:hover .react-datepicker__navigation--years-previous, .react-datepicker__month-option:hover .react-datepicker__navigation--years-previous, .react-datepicker__month-year-option:hover .react-datepicker__navigation--years-previous { border-top-color: #b3b3b3; } .react-datepicker__year-option--selected, .react-datepicker__month-option--selected, .react-datepicker__month-year-option--selected { position: absolute; left: 15px; } .react-datepicker__close-icon { cursor: pointer; background-color: transparent; border: 0; outline: 0; padding: 0px 6px 0px 0px; position: absolute; top: 0; right: 0; height: 100%; display: table-cell; vertical-align: middle; } .react-datepicker__close-icon::after { cursor: pointer; background-color: #216ba5; color: #fff; border-radius: 50%; height: 16px; width: 16px; padding: 2px; font-size: 12px; line-height: 1; text-align: center; display: table-cell; vertical-align: middle; content: "00d7"; } .react-datepicker__today-button { background: #f0f0f0; border-top: 1px solid #aeaeae; cursor: pointer; text-align: center; font-weight: bold; padding: 5px 0; clear: left; } .react-datepicker__portal { position: fixed; width: 100vw; height: 100vh; background-color: rgba(0, 0, 0, 0.8); left: 0; top: 0; justify-content: center; align-items: center; display: flex; z-index: 2147483647; } .react-datepicker__portal .react-datepicker__day-name, .react-datepicker__portal .react-datepicker__day, .react-datepicker__portal .react-datepicker__time-name { width: 3rem; line-height: 3rem; } @media (max-width: 400px), (max-height: 550px) { .react-datepicker__portal .react-datepicker__day-name, .react-datepicker__portal .react-datepicker__day, .react-datepicker__portal .react-datepicker__time-name { width: 2rem; line-height: 2rem; } } .react-datepicker__portal .react-datepicker__current-month, .react-datepicker__portal .react-datepicker-time__header { font-size: 1.44rem; } .react-datepicker__portal .react-datepicker__navigation { border: 0.81rem solid transparent; } .react-datepicker__portal .react-datepicker__navigation--previous { border-right-color: #ccc; } .react-datepicker__portal .react-datepicker__navigation--previous:hover { border-right-color: #b3b3b3; } .react-datepicker__portal .react-datepicker__navigation--previous--disabled, .react-datepicker__portal .react-datepicker__navigation--previous--disabled:hover { border-right-color: #e6e6e6; cursor: default; } .react-datepicker__portal .react-datepicker__navigation--next { border-left-color: #ccc; } .react-datepicker__portal .react-datepicker__navigation--next:hover { border-left-color: #b3b3b3; } .react-datepicker__portal .react-datepicker__navigation--next--disabled, .react-datepicker__portal .react-datepicker__navigation--next--disabled:hover { border-left-color: #e6e6e6; cursor: default; } `; function _extends$k() { _extends$k = Object.assign ? Object.assign.bind() : 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; }; return _extends$k.apply(this, arguments); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct.bind(); } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); } // based on https://github.com/styled-components/styled-components/blob/fcf6f3804c57a14dd7984dfab7bc06ee2edca044/src/utils/error.js /** * Parse errors.md and turn it into a simple hash of code: message * @private */ var ERRORS = { "1": "Passed invalid arguments to hsl, please pass multiple numbers e.g. hsl(360, 0.75, 0.4) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75 }).\n\n", "2": "Passed invalid arguments to hsla, please pass multiple numbers e.g. hsla(360, 0.75, 0.4, 0.7) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75, alpha: 0.7 }).\n\n", "3": "Passed an incorrect argument to a color function, please pass a string representation of a color.\n\n", "4": "Couldn't generate valid rgb string from %s, it returned %s.\n\n", "5": "Couldn't parse the color string. Please provide the color as a string in hex, rgb, rgba, hsl or hsla notation.\n\n", "6": "Passed invalid arguments to rgb, please pass multiple numbers e.g. rgb(255, 205, 100) or an object e.g. rgb({ red: 255, green: 205, blue: 100 }).\n\n", "7": "Passed invalid arguments to rgba, please pass multiple numbers e.g. rgb(255, 205, 100, 0.75) or an object e.g. rgb({ red: 255, green: 205, blue: 100, alpha: 0.75 }).\n\n", "8": "Passed invalid argument to toColorString, please pass a RgbColor, RgbaColor, HslColor or HslaColor object.\n\n", "9": "Please provide a number of steps to the modularScale helper.\n\n", "10": "Please pass a number or one of the predefined scales to the modularScale helper as the ratio.\n\n", "11": "Invalid value passed as base to modularScale, expected number or em string but got \"%s\"\n\n", "12": "Expected a string ending in \"px\" or a number passed as the first argument to %s(), got \"%s\" instead.\n\n", "13": "Expected a string ending in \"px\" or a number passed as the second argument to %s(), got \"%s\" instead.\n\n", "14": "Passed invalid pixel value (\"%s\") to %s(), please pass a value like \"12px\" or 12.\n\n", "15": "Passed invalid base value (\"%s\") to %s(), please pass a value like \"12px\" or 12.\n\n", "16": "You must provide a template to this method.\n\n", "17": "You passed an unsupported selector state to this method.\n\n", "18": "minScreen and maxScreen must be provided as stringified numbers with the same units.\n\n", "19": "fromSize and toSize must be provided as stringified numbers with the same units.\n\n", "20": "expects either an array of objects or a single object with the properties prop, fromSize, and toSize.\n\n", "21": "expects the objects in the first argument array to have the properties `prop`, `fromSize`, and `toSize`.\n\n", "22": "expects the first argument object to have the properties `prop`, `fromSize`, and `toSize`.\n\n", "23": "fontFace expects a name of a font-family.\n\n", "24": "fontFace expects either the path to the font file(s) or a name of a local copy.\n\n", "25": "fontFace expects localFonts to be an array.\n\n", "26": "fontFace expects fileFormats to be an array.\n\n", "27": "radialGradient requries at least 2 color-stops to properly render.\n\n", "28": "Please supply a filename to retinaImage() as the first argument.\n\n", "29": "Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.\n\n", "30": "Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\n\n", "31": "The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation\n\n", "32": "To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s')\n\n", "33": "The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation\n\n", "34": "borderRadius expects a radius value as a string or number as the second argument.\n\n", "35": "borderRadius expects one of \"top\", \"bottom\", \"left\" or \"right\" as the first argument.\n\n", "36": "Property must be a string value.\n\n", "37": "Syntax Error at %s.\n\n", "38": "Formula contains a function that needs parentheses at %s.\n\n", "39": "Formula is missing closing parenthesis at %s.\n\n", "40": "Formula has too many closing parentheses at %s.\n\n", "41": "All values in a formula must have the same unit or be unitless.\n\n", "42": "Please provide a number of steps to the modularScale helper.\n\n", "43": "Please pass a number or one of the predefined scales to the modularScale helper as the ratio.\n\n", "44": "Invalid value passed as base to modularScale, expected number or em/rem string but got %s.\n\n", "45": "Passed invalid argument to hslToColorString, please pass a HslColor or HslaColor object.\n\n", "46": "Passed invalid argument to rgbToColorString, please pass a RgbColor or RgbaColor object.\n\n", "47": "minScreen and maxScreen must be provided as stringified numbers with the same units.\n\n", "48": "fromSize and toSize must be provided as stringified numbers with the same units.\n\n", "49": "Expects either an array of objects or a single object with the properties prop, fromSize, and toSize.\n\n", "50": "Expects the objects in the first argument array to have the properties prop, fromSize, and toSize.\n\n", "51": "Expects the first argument object to have the properties prop, fromSize, and toSize.\n\n", "52": "fontFace expects either the path to the font file(s) or a name of a local copy.\n\n", "53": "fontFace expects localFonts to be an array.\n\n", "54": "fontFace expects fileFormats to be an array.\n\n", "55": "fontFace expects a name of a font-family.\n\n", "56": "linearGradient requries at least 2 color-stops to properly render.\n\n", "57": "radialGradient requries at least 2 color-stops to properly render.\n\n", "58": "Please supply a filename to retinaImage() as the first argument.\n\n", "59": "Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.\n\n", "60": "Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\n\n", "61": "Property must be a string value.\n\n", "62": "borderRadius expects a radius value as a string or number as the second argument.\n\n", "63": "borderRadius expects one of \"top\", \"bottom\", \"left\" or \"right\" as the first argument.\n\n", "64": "The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation.\n\n", "65": "To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s').\n\n", "66": "The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation.\n\n", "67": "You must provide a template to this method.\n\n", "68": "You passed an unsupported selector state to this method.\n\n", "69": "Expected a string ending in \"px\" or a number passed as the first argument to %s(), got %s instead.\n\n", "70": "Expected a string ending in \"px\" or a number passed as the second argument to %s(), got %s instead.\n\n", "71": "Passed invalid pixel value %s to %s(), please pass a value like \"12px\" or 12.\n\n", "72": "Passed invalid base value %s to %s(), please pass a value like \"12px\" or 12.\n\n", "73": "Please provide a valid CSS variable.\n\n", "74": "CSS variable not found and no default was provided.\n\n", "75": "important requires a valid style object, got a %s instead.\n\n", "76": "fromSize and toSize must be provided as stringified numbers with the same units as minScreen and maxScreen.\n\n", "77": "remToPx expects a value in \"rem\" but you provided it in \"%s\".\n\n", "78": "base must be set in \"px\" or \"%\" but you set it in \"%s\".\n" }; /** * super basic version of sprintf * @private */ function format() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var a = args[0]; var b = []; var c; for (c = 1; c < args.length; c += 1) { b.push(args[c]); } b.forEach(function (d) { a = a.replace(/%[a-z]/, d); }); return a; } /** * Create an error file out of errors.md for development and a simple web link to the full errors * in production mode. * @private */ var PolishedError = /*#__PURE__*/function (_Error) { _inheritsLoose(PolishedError, _Error); function PolishedError(code) { var _this; { for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { args[_key2 - 1] = arguments[_key2]; } _this = _Error.call(this, format.apply(void 0, [ERRORS[code]].concat(args))) || this; } return _assertThisInitialized(_this); } return PolishedError; }( /*#__PURE__*/_wrapNativeSuper(Error)); var cssRegex = /^([+-]?(?:\d+|\d*\.\d+))([a-z]*|%)$/; /** * Returns a given CSS value and its unit as elements of an array. * * @example * // Styles as object usage * const styles = { * '--dimension': getValueAndUnit('100px')[0], * '--unit': getValueAndUnit('100px')[1], * } * * // styled-components usage * const div = styled.div` * --dimension: ${getValueAndUnit('100px')[0]}; * --unit: ${getValueAndUnit('100px')[1]}; * ` * * // CSS in JS Output * * element { * '--dimension': 100, * '--unit': 'px', * } */ function getValueAndUnit(value) { if (typeof value !== 'string') return [value, '']; var matchedValue = value.match(cssRegex); if (matchedValue) return [parseFloat(value), matchedValue[2]]; return [value, undefined]; } function colorToInt(color) { return Math.round(color * 255); } function convertToInt(red, green, blue) { return colorToInt(red) + "," + colorToInt(green) + "," + colorToInt(blue); } function hslToRgb(hue, saturation, lightness, convert) { if (convert === void 0) { convert = convertToInt; } if (saturation === 0) { // achromatic return convert(lightness, lightness, lightness); } // formulae from https://en.wikipedia.org/wiki/HSL_and_HSV var huePrime = (hue % 360 + 360) % 360 / 60; var chroma = (1 - Math.abs(2 * lightness - 1)) * saturation; var secondComponent = chroma * (1 - Math.abs(huePrime % 2 - 1)); var red = 0; var green = 0; var blue = 0; if (huePrime >= 0 && huePrime < 1) { red = chroma; green = secondComponent; } else if (huePrime >= 1 && huePrime < 2) { red = secondComponent; green = chroma; } else if (huePrime >= 2 && huePrime < 3) { green = chroma; blue = secondComponent; } else if (huePrime >= 3 && huePrime < 4) { green = secondComponent; blue = chroma; } else if (huePrime >= 4 && huePrime < 5) { red = secondComponent; blue = chroma; } else if (huePrime >= 5 && huePrime < 6) { red = chroma; blue = secondComponent; } var lightnessModification = lightness - chroma / 2; var finalRed = red + lightnessModification; var finalGreen = green + lightnessModification; var finalBlue = blue + lightnessModification; return convert(finalRed, finalGreen, finalBlue); } var namedColorMap = { aliceblue: 'f0f8ff', antiquewhite: 'faebd7', aqua: '00ffff', aquamarine: '7fffd4', azure: 'f0ffff', beige: 'f5f5dc', bisque: 'ffe4c4', black: '000', blanchedalmond: 'ffebcd', blue: '0000ff', blueviolet: '8a2be2', brown: 'a52a2a', burlywood: 'deb887', cadetblue: '5f9ea0', chartreuse: '7fff00', chocolate: 'd2691e', coral: 'ff7f50', cornflowerblue: '6495ed', cornsilk: 'fff8dc', crimson: 'dc143c', cyan: '00ffff', darkblue: '00008b', darkcyan: '008b8b', darkgoldenrod: 'b8860b', darkgray: 'a9a9a9', darkgreen: '006400', darkgrey: 'a9a9a9', darkkhaki: 'bdb76b', darkmagenta: '8b008b', darkolivegreen: '556b2f', darkorange: 'ff8c00', darkorchid: '9932cc', darkred: '8b0000', darksalmon: 'e9967a', darkseagreen: '8fbc8f', darkslateblue: '483d8b', darkslategray: '2f4f4f', darkslategrey: '2f4f4f', darkturquoise: '00ced1', darkviolet: '9400d3', deeppink: 'ff1493', deepskyblue: '00bfff', dimgray: '696969', dimgrey: '696969', dodgerblue: '1e90ff', firebrick: 'b22222', floralwhite: 'fffaf0', forestgreen: '228b22', fuchsia: 'ff00ff', gainsboro: 'dcdcdc', ghostwhite: 'f8f8ff', gold: 'ffd700', goldenrod: 'daa520', gray: '808080', green: '008000', greenyellow: 'adff2f', grey: '808080', honeydew: 'f0fff0', hotpink: 'ff69b4', indianred: 'cd5c5c', indigo: '4b0082', ivory: 'fffff0', khaki: 'f0e68c', lavender: 'e6e6fa', lavenderblush: 'fff0f5', lawngreen: '7cfc00', lemonchiffon: 'fffacd', lightblue: 'add8e6', lightcoral: 'f08080', lightcyan: 'e0ffff', lightgoldenrodyellow: 'fafad2', lightgray: 'd3d3d3', lightgreen: '90ee90', lightgrey: 'd3d3d3', lightpink: 'ffb6c1', lightsalmon: 'ffa07a', lightseagreen: '20b2aa', lightskyblue: '87cefa', lightslategray: '789', lightslategrey: '789', lightsteelblue: 'b0c4de', lightyellow: 'ffffe0', lime: '0f0', limegreen: '32cd32', linen: 'faf0e6', magenta: 'f0f', maroon: '800000', mediumaquamarine: '66cdaa', mediumblue: '0000cd', mediumorchid: 'ba55d3', mediumpurple: '9370db', mediumseagreen: '3cb371', mediumslateblue: '7b68ee', mediumspringgreen: '00fa9a', mediumturquoise: '48d1cc', mediumvioletred: 'c71585', midnightblue: '191970', mintcream: 'f5fffa', mistyrose: 'ffe4e1', moccasin: 'ffe4b5', navajowhite: 'ffdead', navy: '000080', oldlace: 'fdf5e6', olive: '808000', olivedrab: '6b8e23', orange: 'ffa500', orangered: 'ff4500', orchid: 'da70d6', palegoldenrod: 'eee8aa', palegreen: '98fb98', paleturquoise: 'afeeee', palevioletred: 'db7093', papayawhip: 'ffefd5', peachpuff: 'ffdab9', peru: 'cd853f', pink: 'ffc0cb', plum: 'dda0dd', powderblue: 'b0e0e6', purple: '800080', rebeccapurple: '639', red: 'f00', rosybrown: 'bc8f8f', royalblue: '4169e1', saddlebrown: '8b4513', salmon: 'fa8072', sandybrown: 'f4a460', seagreen: '2e8b57', seashell: 'fff5ee', sienna: 'a0522d', silver: 'c0c0c0', skyblue: '87ceeb', slateblue: '6a5acd', slategray: '708090', slategrey: '708090', snow: 'fffafa', springgreen: '00ff7f', steelblue: '4682b4', tan: 'd2b48c', teal: '008080', thistle: 'd8bfd8', tomato: 'ff6347', turquoise: '40e0d0', violet: 'ee82ee', wheat: 'f5deb3', white: 'fff', whitesmoke: 'f5f5f5', yellow: 'ff0', yellowgreen: '9acd32' }; /** * Checks if a string is a CSS named color and returns its equivalent hex value, otherwise returns the original color. * @private */ function nameToHex(color) { if (typeof color !== 'string') return color; var normalizedColorName = color.toLowerCase(); return namedColorMap[normalizedColorName] ? "#" + namedColorMap[normalizedColorName] : color; } var hexRegex = /^#[a-fA-F0-9]{6}$/; var hexRgbaRegex = /^#[a-fA-F0-9]{8}$/; var reducedHexRegex = /^#[a-fA-F0-9]{3}$/; var reducedRgbaHexRegex = /^#[a-fA-F0-9]{4}$/; var rgbRegex = /^rgb\(\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*\)$/i; var rgbaRegex = /^rgb(?:a)?\(\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,|\/)\s*([-+]?\d*[.]?\d+[%]?)\s*\)$/i; var hslRegex = /^hsl\(\s*(\d{0,3}[.]?[0-9]+(?:deg)?)\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*\)$/i; var hslaRegex = /^hsl(?:a)?\(\s*(\d{0,3}[.]?[0-9]+(?:deg)?)\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,|\/)\s*([-+]?\d*[.]?\d+[%]?)\s*\)$/i; /** * Returns an RgbColor or RgbaColor object. This utility function is only useful * if want to extract a color component. With the color util `toColorString` you * can convert a RgbColor or RgbaColor object back to a string. * * @example * // Assigns `{ red: 255, green: 0, blue: 0 }` to color1 * const color1 = parseToRgb('rgb(255, 0, 0)'); * // Assigns `{ red: 92, green: 102, blue: 112, alpha: 0.75 }` to color2 * const color2 = parseToRgb('hsla(210, 10%, 40%, 0.75)'); */ function parseToRgb(color) { if (typeof color !== 'string') { throw new PolishedError(3); } var normalizedColor = nameToHex(color); if (normalizedColor.match(hexRegex)) { return { red: parseInt("" + normalizedColor[1] + normalizedColor[2], 16), green: parseInt("" + normalizedColor[3] + normalizedColor[4], 16), blue: parseInt("" + normalizedColor[5] + normalizedColor[6], 16) }; } if (normalizedColor.match(hexRgbaRegex)) { var alpha = parseFloat((parseInt("" + normalizedColor[7] + normalizedColor[8], 16) / 255).toFixed(2)); return { red: parseInt("" + normalizedColor[1] + normalizedColor[2], 16), green: parseInt("" + normalizedColor[3] + normalizedColor[4], 16), blue: parseInt("" + normalizedColor[5] + normalizedColor[6], 16), alpha: alpha }; } if (normalizedColor.match(reducedHexRegex)) { return { red: parseInt("" + normalizedColor[1] + normalizedColor[1], 16), green: parseInt("" + normalizedColor[2] + normalizedColor[2], 16), blue: parseInt("" + normalizedColor[3] + normalizedColor[3], 16) }; } if (normalizedColor.match(reducedRgbaHexRegex)) { var _alpha = parseFloat((parseInt("" + normalizedColor[4] + normalizedColor[4], 16) / 255).toFixed(2)); return { red: parseInt("" + normalizedColor[1] + normalizedColor[1], 16), green: parseInt("" + normalizedColor[2] + normalizedColor[2], 16), blue: parseInt("" + normalizedColor[3] + normalizedColor[3], 16), alpha: _alpha }; } var rgbMatched = rgbRegex.exec(normalizedColor); if (rgbMatched) { return { red: parseInt("" + rgbMatched[1], 10), green: parseInt("" + rgbMatched[2], 10), blue: parseInt("" + rgbMatched[3], 10) }; } var rgbaMatched = rgbaRegex.exec(normalizedColor.substring(0, 50)); if (rgbaMatched) { return { red: parseInt("" + rgbaMatched[1], 10), green: parseInt("" + rgbaMatched[2], 10), blue: parseInt("" + rgbaMatched[3], 10), alpha: parseFloat("" + rgbaMatched[4]) > 1 ? parseFloat("" + rgbaMatched[4]) / 100 : parseFloat("" + rgbaMatched[4]) }; } var hslMatched = hslRegex.exec(normalizedColor); if (hslMatched) { var hue = parseInt("" + hslMatched[1], 10); var saturation = parseInt("" + hslMatched[2], 10) / 100; var lightness = parseInt("" + hslMatched[3], 10) / 100; var rgbColorString = "rgb(" + hslToRgb(hue, saturation, lightness) + ")"; var hslRgbMatched = rgbRegex.exec(rgbColorString); if (!hslRgbMatched) { throw new PolishedError(4, normalizedColor, rgbColorString); } return { red: parseInt("" + hslRgbMatched[1], 10), green: parseInt("" + hslRgbMatched[2], 10), blue: parseInt("" + hslRgbMatched[3], 10) }; } var hslaMatched = hslaRegex.exec(normalizedColor.substring(0, 50)); if (hslaMatched) { var _hue = parseInt("" + hslaMatched[1], 10); var _saturation = parseInt("" + hslaMatched[2], 10) / 100; var _lightness = parseInt("" + hslaMatched[3], 10) / 100; var _rgbColorString = "rgb(" + hslToRgb(_hue, _saturation, _lightness) + ")"; var _hslRgbMatched = rgbRegex.exec(_rgbColorString); if (!_hslRgbMatched) { throw new PolishedError(4, normalizedColor, _rgbColorString); } return { red: parseInt("" + _hslRgbMatched[1], 10), green: parseInt("" + _hslRgbMatched[2], 10), blue: parseInt("" + _hslRgbMatched[3], 10), alpha: parseFloat("" + hslaMatched[4]) > 1 ? parseFloat("" + hslaMatched[4]) / 100 : parseFloat("" + hslaMatched[4]) }; } throw new PolishedError(5); } function rgbToHsl(color) { // make sure rgb are contained in a set of [0, 255] var red = color.red / 255; var green = color.green / 255; var blue = color.blue / 255; var max = Math.max(red, green, blue); var min = Math.min(red, green, blue); var lightness = (max + min) / 2; if (max === min) { // achromatic if (color.alpha !== undefined) { return { hue: 0, saturation: 0, lightness: lightness, alpha: color.alpha }; } else { return { hue: 0, saturation: 0, lightness: lightness }; } } var hue; var delta = max - min; var saturation = lightness > 0.5 ? delta / (2 - max - min) : delta / (max + min); switch (max) { case red: hue = (green - blue) / delta + (green < blue ? 6 : 0); break; case green: hue = (blue - red) / delta + 2; break; default: // blue case hue = (red - green) / delta + 4; break; } hue *= 60; if (color.alpha !== undefined) { return { hue: hue, saturation: saturation, lightness: lightness, alpha: color.alpha }; } return { hue: hue, saturation: saturation, lightness: lightness }; } /** * Returns an HslColor or HslaColor object. This utility function is only useful * if want to extract a color component. With the color util `toColorString` you * can convert a HslColor or HslaColor object back to a string. * * @example * // Assigns `{ hue: 0, saturation: 1, lightness: 0.5 }` to color1 * const color1 = parseToHsl('rgb(255, 0, 0)'); * // Assigns `{ hue: 128, saturation: 1, lightness: 0.5, alpha: 0.75 }` to color2 * const color2 = parseToHsl('hsla(128, 100%, 50%, 0.75)'); */ function parseToHsl(color) { // Note: At a later stage we can optimize this function as right now a hsl // color would be parsed converted to rgb values and converted back to hsl. return rgbToHsl(parseToRgb(color)); } /** * Reduces hex values if possible e.g. #ff8866 to #f86 * @private */ var reduceHexValue = function reduceHexValue(value) { if (value.length === 7 && value[1] === value[2] && value[3] === value[4] && value[5] === value[6]) { return "#" + value[1] + value[3] + value[5]; } return value; }; var reduceHexValue$1 = reduceHexValue; function numberToHex(value) { var hex = value.toString(16); return hex.length === 1 ? "0" + hex : hex; } function colorToHex(color) { return numberToHex(Math.round(color * 255)); } function convertToHex(red, green, blue) { return reduceHexValue$1("#" + colorToHex(red) + colorToHex(green) + colorToHex(blue)); } function hslToHex(hue, saturation, lightness) { return hslToRgb(hue, saturation, lightness, convertToHex); } /** * Returns a string value for the color. The returned result is the smallest possible hex notation. * * @example * // Styles as object usage * const styles = { * background: hsl(359, 0.75, 0.4), * background: hsl({ hue: 360, saturation: 0.75, lightness: 0.4 }), * } * * // styled-components usage * const div = styled.div` * background: ${hsl(359, 0.75, 0.4)}; * background: ${hsl({ hue: 360, saturation: 0.75, lightness: 0.4 })}; * ` * * // CSS in JS Output * * element { * background: "#b3191c"; * background: "#b3191c"; * } */ function hsl(value, saturation, lightness) { if (typeof value === 'number' && typeof saturation === 'number' && typeof lightness === 'number') { return hslToHex(value, saturation, lightness); } else if (typeof value === 'object' && saturation === undefined && lightness === undefined) { return hslToHex(value.hue, value.saturation, value.lightness); } throw new PolishedError(1); } /** * Returns a string value for the color. The returned result is the smallest possible rgba or hex notation. * * @example * // Styles as object usage * const styles = { * background: hsla(359, 0.75, 0.4, 0.7), * background: hsla({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0,7 }), * background: hsla(359, 0.75, 0.4, 1), * } * * // styled-components usage * const div = styled.div` * background: ${hsla(359, 0.75, 0.4, 0.7)}; * background: ${hsla({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0,7 })}; * background: ${hsla(359, 0.75, 0.4, 1)}; * ` * * // CSS in JS Output * * element { * background: "rgba(179,25,28,0.7)"; * background: "rgba(179,25,28,0.7)"; * background: "#b3191c"; * } */ function hsla(value, saturation, lightness, alpha) { if (typeof value === 'number' && typeof saturation === 'number' && typeof lightness === 'number' && typeof alpha === 'number') { return alpha >= 1 ? hslToHex(value, saturation, lightness) : "rgba(" + hslToRgb(value, saturation, lightness) + "," + alpha + ")"; } else if (typeof value === 'object' && saturation === undefined && lightness === undefined && alpha === undefined) { return value.alpha >= 1 ? hslToHex(value.hue, value.saturation, value.lightness) : "rgba(" + hslToRgb(value.hue, value.saturation, value.lightness) + "," + value.alpha + ")"; } throw new PolishedError(2); } /** * Returns a string value for the color. The returned result is the smallest possible hex notation. * * @example * // Styles as object usage * const styles = { * background: rgb(255, 205, 100), * background: rgb({ red: 255, green: 205, blue: 100 }), * } * * // styled-components usage * const div = styled.div` * background: ${rgb(255, 205, 100)}; * background: ${rgb({ red: 255, green: 205, blue: 100 })}; * ` * * // CSS in JS Output * * element { * background: "#ffcd64"; * background: "#ffcd64"; * } */ function rgb(value, green, blue) { if (typeof value === 'number' && typeof green === 'number' && typeof blue === 'number') { return reduceHexValue$1("#" + numberToHex(value) + numberToHex(green) + numberToHex(blue)); } else if (typeof value === 'object' && green === undefined && blue === undefined) { return reduceHexValue$1("#" + numberToHex(value.red) + numberToHex(value.green) + numberToHex(value.blue)); } throw new PolishedError(6); } /** * Returns a string value for the color. The returned result is the smallest possible rgba or hex notation. * * Can also be used to fade a color by passing a hex value or named CSS color along with an alpha value. * * @example * // Styles as object usage * const styles = { * background: rgba(255, 205, 100, 0.7), * background: rgba({ red: 255, green: 205, blue: 100, alpha: 0.7 }), * background: rgba(255, 205, 100, 1), * background: rgba('#ffffff', 0.4), * background: rgba('black', 0.7), * } * * // styled-components usage * const div = styled.div` * background: ${rgba(255, 205, 100, 0.7)}; * background: ${rgba({ red: 255, green: 205, blue: 100, alpha: 0.7 })}; * background: ${rgba(255, 205, 100, 1)}; * background: ${rgba('#ffffff', 0.4)}; * background: ${rgba('black', 0.7)}; * ` * * // CSS in JS Output * * element { * background: "rgba(255,205,100,0.7)"; * background: "rgba(255,205,100,0.7)"; * background: "#ffcd64"; * background: "rgba(255,255,255,0.4)"; * background: "rgba(0,0,0,0.7)"; * } */ function rgba(firstValue, secondValue, thirdValue, fourthValue) { if (typeof firstValue === 'string' && typeof secondValue === 'number') { var rgbValue = parseToRgb(firstValue); return "rgba(" + rgbValue.red + "," + rgbValue.green + "," + rgbValue.blue + "," + secondValue + ")"; } else if (typeof firstValue === 'number' && typeof secondValue === 'number' && typeof thirdValue === 'number' && typeof fourthValue === 'number') { return fourthValue >= 1 ? rgb(firstValue, secondValue, thirdValue) : "rgba(" + firstValue + "," + secondValue + "," + thirdValue + "," + fourthValue + ")"; } else if (typeof firstValue === 'object' && secondValue === undefined && thirdValue === undefined && fourthValue === undefined) { return firstValue.alpha >= 1 ? rgb(firstValue.red, firstValue.green, firstValue.blue) : "rgba(" + firstValue.red + "," + firstValue.green + "," + firstValue.blue + "," + firstValue.alpha + ")"; } throw new PolishedError(7); } var isRgb = function isRgb(color) { return typeof color.red === 'number' && typeof color.green === 'number' && typeof color.blue === 'number' && (typeof color.alpha !== 'number' || typeof color.alpha === 'undefined'); }; var isRgba = function isRgba(color) { return typeof color.red === 'number' && typeof color.green === 'number' && typeof color.blue === 'number' && typeof color.alpha === 'number'; }; var isHsl = function isHsl(color) { return typeof color.hue === 'number' && typeof color.saturation === 'number' && typeof color.lightness === 'number' && (typeof color.alpha !== 'number' || typeof color.alpha === 'undefined'); }; var isHsla = function isHsla(color) { return typeof color.hue === 'number' && typeof color.saturation === 'number' && typeof color.lightness === 'number' && typeof color.alpha === 'number'; }; /** * Converts a RgbColor, RgbaColor, HslColor or HslaColor object to a color string. * This util is useful in case you only know on runtime which color object is * used. Otherwise we recommend to rely on `rgb`, `rgba`, `hsl` or `hsla`. * * @example * // Styles as object usage * const styles = { * background: toColorString({ red: 255, green: 205, blue: 100 }), * background: toColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 }), * background: toColorString({ hue: 240, saturation: 1, lightness: 0.5 }), * background: toColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 }), * } * * // styled-components usage * const div = styled.div` * background: ${toColorString({ red: 255, green: 205, blue: 100 })}; * background: ${toColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 })}; * background: ${toColorString({ hue: 240, saturation: 1, lightness: 0.5 })}; * background: ${toColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 })}; * ` * * // CSS in JS Output * element { * background: "#ffcd64"; * background: "rgba(255,205,100,0.72)"; * background: "#00f"; * background: "rgba(179,25,25,0.72)"; * } */ function toColorString(color) { if (typeof color !== 'object') throw new PolishedError(8); if (isRgba(color)) return rgba(color); if (isRgb(color)) return rgb(color); if (isHsla(color)) return hsla(color); if (isHsl(color)) return hsl(color); throw new PolishedError(8); } // Type definitions taken from https://github.com/gcanti/flow-static-land/blob/master/src/Fun.js // eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-redeclare function curried(f, length, acc) { return function fn() { // eslint-disable-next-line prefer-rest-params var combined = acc.concat(Array.prototype.slice.call(arguments)); return combined.length >= length ? f.apply(this, combined) : curried(f, length, combined); }; } // eslint-disable-next-line no-redeclare function curry(f) { // eslint-disable-line no-redeclare return curried(f, f.length, []); } function guard(lowerBoundary, upperBoundary, value) { return Math.max(lowerBoundary, Math.min(upperBoundary, value)); } /** * Returns a string value for the darkened color. * * @example * // Styles as object usage * const styles = { * background: darken(0.2, '#FFCD64'), * background: darken('0.2', 'rgba(255,205,100,0.7)'), * } * * // styled-components usage * const div = styled.div` * background: ${darken(0.2, '#FFCD64')}; * background: ${darken('0.2', 'rgba(255,205,100,0.7)')}; * ` * * // CSS in JS Output * * element { * background: "#ffbd31"; * background: "rgba(255,189,49,0.7)"; * } */ function darken(amount, color) { if (color === 'transparent') return color; var hslColor = parseToHsl(color); return toColorString(_extends$k({}, hslColor, { lightness: guard(0, 1, hslColor.lightness - parseFloat(amount)) })); } // prettier-ignore var curriedDarken = /*#__PURE__*/curry /* ::<number | string, string, string> */(darken); var curriedDarken$1 = curriedDarken; var focusShadowStyle = (theme => { const rgb = parseToRgb(theme.colors.accent); const color = `rgba(${rgb.red}, ${rgb.green}, ${rgb.blue}, .58)`; return `0 1px 4px 0 ${color};`; }); var flat = flatten$1; flatten$1.flatten = flatten$1; flatten$1.unflatten = unflatten$1; function isBuffer$3(obj) { return obj && obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj); } function keyIdentity(key) { return key; } function flatten$1(target, opts) { opts = opts || {}; const delimiter = opts.delimiter || '.'; const maxDepth = opts.maxDepth; const transformKey = opts.transformKey || keyIdentity; const output = {}; function step(object, prev, currentDepth) { currentDepth = currentDepth || 1; Object.keys(object).forEach(function (key) { const value = object[key]; const isarray = opts.safe && Array.isArray(value); const type = Object.prototype.toString.call(value); const isbuffer = isBuffer$3(value); const isobject = type === '[object Object]' || type === '[object Array]'; const newKey = prev ? prev + delimiter + transformKey(key) : transformKey(key); if (!isarray && !isbuffer && isobject && Object.keys(value).length && (!opts.maxDepth || currentDepth < maxDepth)) { return step(value, newKey, currentDepth + 1); } output[newKey] = value; }); } step(target); return output; } function unflatten$1(target, opts) { opts = opts || {}; const delimiter = opts.delimiter || '.'; const overwrite = opts.overwrite || false; const transformKey = opts.transformKey || keyIdentity; const result = {}; const isbuffer = isBuffer$3(target); if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') { return target; } // safely ensure that the key is // an integer. function getkey(key) { const parsedKey = Number(key); return isNaN(parsedKey) || key.indexOf('.') !== -1 || opts.object ? key : parsedKey; } function addKeys(keyPrefix, recipient, target) { return Object.keys(target).reduce(function (result, key) { result[keyPrefix + delimiter + key] = target[key]; return result; }, recipient); } function isEmpty(val) { const type = Object.prototype.toString.call(val); const isArray = type === '[object Array]'; const isObject = type === '[object Object]'; if (!val) { return true; } else if (isArray) { return !val.length; } else if (isObject) { return !Object.keys(val).length; } } target = Object.keys(target).reduce(function (result, key) { const type = Object.prototype.toString.call(target[key]); const isObject = type === '[object Object]' || type === '[object Array]'; if (!isObject || isEmpty(target[key])) { result[key] = target[key]; return result; } else { return addKeys(key, result, flatten$1(target[key], opts)); } }, {}); Object.keys(target).forEach(function (key) { const split = key.split(delimiter).map(transformKey); let key1 = getkey(split.shift()); let key2 = getkey(split[0]); let recipient = result; while (key2 !== undefined) { if (key1 === '__proto__') { return; } const type = Object.prototype.toString.call(recipient[key1]); const isobject = type === '[object Object]' || type === '[object Array]'; // do not write over falsey, non-undefined values if overwrite is false if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') { return; } if (overwrite && !isobject || !overwrite && recipient[key1] == null) { recipient[key1] = typeof key2 === 'number' && !opts.object ? [] : {}; } recipient = recipient[key1]; if (split.length > 0) { key1 = getkey(split.shift()); key2 = getkey(split[0]); } } // unflatten again for 'messy objects' recipient[key1] = unflatten$1(target[key], opts); }); return result; } var flat$1 = /*@__PURE__*/getDefaultExportFromCjs(flat); /** * Removes all key-value entries from the list cache. * * @private * @name clear * @memberOf ListCache */ function listCacheClear$1() { this.__data__ = []; this.size = 0; } var _listCacheClear = listCacheClear$1; /** * Performs a * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * comparison between two values to determine if they are equivalent. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * * var object = { 'a': 1 }; * var other = { 'a': 1 }; * * _.eq(object, object); * // => true * * _.eq(object, other); * // => false * * _.eq('a', 'a'); * // => true * * _.eq('a', Object('a')); * // => false * * _.eq(NaN, NaN); * // => true */ function eq$5(value, other) { return value === other || value !== value && other !== other; } var eq_1 = eq$5; var eq$4 = eq_1; /** * Gets the index at which the `key` is found in `array` of key-value pairs. * * @private * @param {Array} array The array to inspect. * @param {*} key The key to search for. * @returns {number} Returns the index of the matched value, else `-1`. */ function assocIndexOf$4(array, key) { var length = array.length; while (length--) { if (eq$4(array[length][0], key)) { return length; } } return -1; } var _assocIndexOf = assocIndexOf$4; var assocIndexOf$3 = _assocIndexOf; /** Used for built-in method references. */ var arrayProto = Array.prototype; /** Built-in value references. */ var splice = arrayProto.splice; /** * Removes `key` and its value from the list cache. * * @private * @name delete * @memberOf ListCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function listCacheDelete$1(key) { var data = this.__data__, index = assocIndexOf$3(data, key); if (index < 0) { return false; } var lastIndex = data.length - 1; if (index == lastIndex) { data.pop(); } else { splice.call(data, index, 1); } --this.size; return true; } var _listCacheDelete = listCacheDelete$1; var assocIndexOf$2 = _assocIndexOf; /** * Gets the list cache value for `key`. * * @private * @name get * @memberOf ListCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function listCacheGet$1(key) { var data = this.__data__, index = assocIndexOf$2(data, key); return index < 0 ? undefined : data[index][1]; } var _listCacheGet = listCacheGet$1; var assocIndexOf$1 = _assocIndexOf; /** * Checks if a list cache value for `key` exists. * * @private * @name has * @memberOf ListCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function listCacheHas$1(key) { return assocIndexOf$1(this.__data__, key) > -1; } var _listCacheHas = listCacheHas$1; var assocIndexOf = _assocIndexOf; /** * Sets the list cache `key` to `value`. * * @private * @name set * @memberOf ListCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the list cache instance. */ function listCacheSet$1(key, value) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { ++this.size; data.push([key, value]); } else { data[index][1] = value; } return this; } var _listCacheSet = listCacheSet$1; var listCacheClear = _listCacheClear, listCacheDelete = _listCacheDelete, listCacheGet = _listCacheGet, listCacheHas = _listCacheHas, listCacheSet = _listCacheSet; /** * Creates an list cache object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function ListCache$4(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `ListCache`. ListCache$4.prototype.clear = listCacheClear; ListCache$4.prototype['delete'] = listCacheDelete; ListCache$4.prototype.get = listCacheGet; ListCache$4.prototype.has = listCacheHas; ListCache$4.prototype.set = listCacheSet; var _ListCache = ListCache$4; var ListCache$3 = _ListCache; /** * Removes all key-value entries from the stack. * * @private * @name clear * @memberOf Stack */ function stackClear$1() { this.__data__ = new ListCache$3(); this.size = 0; } var _stackClear = stackClear$1; /** * Removes `key` and its value from the stack. * * @private * @name delete * @memberOf Stack * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function stackDelete$1(key) { var data = this.__data__, result = data['delete'](key); this.size = data.size; return result; } var _stackDelete = stackDelete$1; /** * Gets the stack value for `key`. * * @private * @name get * @memberOf Stack * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function stackGet$1(key) { return this.__data__.get(key); } var _stackGet = stackGet$1; /** * Checks if a stack value for `key` exists. * * @private * @name has * @memberOf Stack * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function stackHas$1(key) { return this.__data__.has(key); } var _stackHas = stackHas$1; /** Detect free variable `global` from Node.js. */ var freeGlobal$1 = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; var _freeGlobal = freeGlobal$1; var freeGlobal = _freeGlobal; /** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root$4 = freeGlobal || freeSelf || Function('return this')(); var _root = root$4; var root$3 = _root; /** Built-in value references. */ var Symbol$4 = root$3.Symbol; var _Symbol = Symbol$4; var Symbol$3 = _Symbol; /** Used for built-in method references. */ var objectProto$d = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$c = objectProto$d.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString$1 = objectProto$d.toString; /** Built-in value references. */ var symToStringTag$1 = Symbol$3 ? Symbol$3.toStringTag : undefined; /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ function getRawTag$1(value) { var isOwn = hasOwnProperty$c.call(value, symToStringTag$1), tag = value[symToStringTag$1]; try { value[symToStringTag$1] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString$1.call(value); if (unmasked) { if (isOwn) { value[symToStringTag$1] = tag; } else { delete value[symToStringTag$1]; } } return result; } var _getRawTag = getRawTag$1; /** Used for built-in method references. */ var objectProto$c = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto$c.toString; /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString$1(value) { return nativeObjectToString.call(value); } var _objectToString = objectToString$1; var Symbol$2 = _Symbol, getRawTag = _getRawTag, objectToString = _objectToString; /** `Object#toString` result references. */ var nullTag = '[object Null]', undefinedTag = '[object Undefined]'; /** Built-in value references. */ var symToStringTag = Symbol$2 ? Symbol$2.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag$6(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); } var _baseGetTag = baseGetTag$6; /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */ function isObject$7(value) { var type = typeof value; return value != null && (type == 'object' || type == 'function'); } var isObject_1 = isObject$7; var baseGetTag$5 = _baseGetTag, isObject$6 = isObject_1; /** `Object#toString` result references. */ var asyncTag = '[object AsyncFunction]', funcTag$1 = '[object Function]', genTag = '[object GeneratorFunction]', proxyTag = '[object Proxy]'; /** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */ function isFunction$5(value) { if (!isObject$6(value)) { return false; } // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 9 which returns 'object' for typed arrays and other constructors. var tag = baseGetTag$5(value); return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; } var isFunction_1 = isFunction$5; var root$2 = _root; /** Used to detect overreaching core-js shims. */ var coreJsData$1 = root$2['__core-js_shared__']; var _coreJsData = coreJsData$1; var coreJsData = _coreJsData; /** Used to detect methods masquerading as native. */ var maskSrcKey = function () { var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); return uid ? 'Symbol(src)_1.' + uid : ''; }(); /** * Checks if `func` has its source masked. * * @private * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` is masked, else `false`. */ function isMasked$1(func) { return !!maskSrcKey && maskSrcKey in func; } var _isMasked = isMasked$1; /** Used for built-in method references. */ var funcProto$2 = Function.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString$2 = funcProto$2.toString; /** * Converts `func` to its source code. * * @private * @param {Function} func The function to convert. * @returns {string} Returns the source code. */ function toSource$1(func) { if (func != null) { try { return funcToString$2.call(func); } catch (e) {} try { return func + ''; } catch (e) {} } return ''; } var _toSource = toSource$1; var isFunction$4 = isFunction_1, isMasked = _isMasked, isObject$5 = isObject_1, toSource = _toSource; /** * Used to match `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; /** Used for built-in method references. */ var funcProto$1 = Function.prototype, objectProto$b = Object.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString$1 = funcProto$1.toString; /** Used to check objects for own properties. */ var hasOwnProperty$b = objectProto$b.hasOwnProperty; /** Used to detect if a method is native. */ var reIsNative = RegExp('^' + funcToString$1.call(hasOwnProperty$b).replace(reRegExpChar, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'); /** * The base implementation of `_.isNative` without bad shim checks. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a native function, * else `false`. */ function baseIsNative$1(value) { if (!isObject$5(value) || isMasked(value)) { return false; } var pattern = isFunction$4(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } var _baseIsNative = baseIsNative$1; /** * Gets the value at `key` of `object`. * * @private * @param {Object} [object] The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ function getValue$1(object, key) { return object == null ? undefined : object[key]; } var _getValue = getValue$1; var baseIsNative = _baseIsNative, getValue = _getValue; /** * Gets the native function at `key` of `object`. * * @private * @param {Object} object The object to query. * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */ function getNative$3(object, key) { var value = getValue(object, key); return baseIsNative(value) ? value : undefined; } var _getNative = getNative$3; var getNative$2 = _getNative, root$1 = _root; /* Built-in method references that are verified to be native. */ var Map$3 = getNative$2(root$1, 'Map'); var _Map = Map$3; var getNative$1 = _getNative; /* Built-in method references that are verified to be native. */ var nativeCreate$4 = getNative$1(Object, 'create'); var _nativeCreate = nativeCreate$4; var nativeCreate$3 = _nativeCreate; /** * Removes all key-value entries from the hash. * * @private * @name clear * @memberOf Hash */ function hashClear$1() { this.__data__ = nativeCreate$3 ? nativeCreate$3(null) : {}; this.size = 0; } var _hashClear = hashClear$1; /** * Removes `key` and its value from the hash. * * @private * @name delete * @memberOf Hash * @param {Object} hash The hash to modify. * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function hashDelete$1(key) { var result = this.has(key) && delete this.__data__[key]; this.size -= result ? 1 : 0; return result; } var _hashDelete = hashDelete$1; var nativeCreate$2 = _nativeCreate; /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED$1 = '__lodash_hash_undefined__'; /** Used for built-in method references. */ var objectProto$a = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$a = objectProto$a.hasOwnProperty; /** * Gets the hash value for `key`. * * @private * @name get * @memberOf Hash * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function hashGet$1(key) { var data = this.__data__; if (nativeCreate$2) { var result = data[key]; return result === HASH_UNDEFINED$1 ? undefined : result; } return hasOwnProperty$a.call(data, key) ? data[key] : undefined; } var _hashGet = hashGet$1; var nativeCreate$1 = _nativeCreate; /** Used for built-in method references. */ var objectProto$9 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$9 = objectProto$9.hasOwnProperty; /** * Checks if a hash value for `key` exists. * * @private * @name has * @memberOf Hash * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function hashHas$1(key) { var data = this.__data__; return nativeCreate$1 ? data[key] !== undefined : hasOwnProperty$9.call(data, key); } var _hashHas = hashHas$1; var nativeCreate = _nativeCreate; /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** * Sets the hash `key` to `value`. * * @private * @name set * @memberOf Hash * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the hash instance. */ function hashSet$1(key, value) { var data = this.__data__; this.size += this.has(key) ? 0 : 1; data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value; return this; } var _hashSet = hashSet$1; var hashClear = _hashClear, hashDelete = _hashDelete, hashGet = _hashGet, hashHas = _hashHas, hashSet = _hashSet; /** * Creates a hash object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Hash$1(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `Hash`. Hash$1.prototype.clear = hashClear; Hash$1.prototype['delete'] = hashDelete; Hash$1.prototype.get = hashGet; Hash$1.prototype.has = hashHas; Hash$1.prototype.set = hashSet; var _Hash = Hash$1; var Hash = _Hash, ListCache$2 = _ListCache, Map$2 = _Map; /** * Removes all key-value entries from the map. * * @private * @name clear * @memberOf MapCache */ function mapCacheClear$1() { this.size = 0; this.__data__ = { 'hash': new Hash(), 'map': new (Map$2 || ListCache$2)(), 'string': new Hash() }; } var _mapCacheClear = mapCacheClear$1; /** * Checks if `value` is suitable for use as unique object key. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is suitable, else `false`. */ function isKeyable$1(value) { var type = typeof value; return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null; } var _isKeyable = isKeyable$1; var isKeyable = _isKeyable; /** * Gets the data for `map`. * * @private * @param {Object} map The map to query. * @param {string} key The reference key. * @returns {*} Returns the map data. */ function getMapData$4(map, key) { var data = map.__data__; return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; } var _getMapData = getMapData$4; var getMapData$3 = _getMapData; /** * Removes `key` and its value from the map. * * @private * @name delete * @memberOf MapCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function mapCacheDelete$1(key) { var result = getMapData$3(this, key)['delete'](key); this.size -= result ? 1 : 0; return result; } var _mapCacheDelete = mapCacheDelete$1; var getMapData$2 = _getMapData; /** * Gets the map value for `key`. * * @private * @name get * @memberOf MapCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function mapCacheGet$1(key) { return getMapData$2(this, key).get(key); } var _mapCacheGet = mapCacheGet$1; var getMapData$1 = _getMapData; /** * Checks if a map value for `key` exists. * * @private * @name has * @memberOf MapCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function mapCacheHas$1(key) { return getMapData$1(this, key).has(key); } var _mapCacheHas = mapCacheHas$1; var getMapData = _getMapData; /** * Sets the map `key` to `value`. * * @private * @name set * @memberOf MapCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the map cache instance. */ function mapCacheSet$1(key, value) { var data = getMapData(this, key), size = data.size; data.set(key, value); this.size += data.size == size ? 0 : 1; return this; } var _mapCacheSet = mapCacheSet$1; var mapCacheClear = _mapCacheClear, mapCacheDelete = _mapCacheDelete, mapCacheGet = _mapCacheGet, mapCacheHas = _mapCacheHas, mapCacheSet = _mapCacheSet; /** * Creates a map cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function MapCache$1(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `MapCache`. MapCache$1.prototype.clear = mapCacheClear; MapCache$1.prototype['delete'] = mapCacheDelete; MapCache$1.prototype.get = mapCacheGet; MapCache$1.prototype.has = mapCacheHas; MapCache$1.prototype.set = mapCacheSet; var _MapCache = MapCache$1; var ListCache$1 = _ListCache, Map$1 = _Map, MapCache = _MapCache; /** Used as the size to enable large array optimizations. */ var LARGE_ARRAY_SIZE = 200; /** * Sets the stack `key` to `value`. * * @private * @name set * @memberOf Stack * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the stack cache instance. */ function stackSet$1(key, value) { var data = this.__data__; if (data instanceof ListCache$1) { var pairs = data.__data__; if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE - 1) { pairs.push([key, value]); this.size = ++data.size; return this; } data = this.__data__ = new MapCache(pairs); } data.set(key, value); this.size = data.size; return this; } var _stackSet = stackSet$1; var ListCache = _ListCache, stackClear = _stackClear, stackDelete = _stackDelete, stackGet = _stackGet, stackHas = _stackHas, stackSet = _stackSet; /** * Creates a stack cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Stack$1(entries) { var data = this.__data__ = new ListCache(entries); this.size = data.size; } // Add methods to `Stack`. Stack$1.prototype.clear = stackClear; Stack$1.prototype['delete'] = stackDelete; Stack$1.prototype.get = stackGet; Stack$1.prototype.has = stackHas; Stack$1.prototype.set = stackSet; var _Stack = Stack$1; var getNative = _getNative; var defineProperty$2 = function () { try { var func = getNative(Object, 'defineProperty'); func({}, '', {}); return func; } catch (e) {} }(); var _defineProperty$1 = defineProperty$2; var defineProperty$1 = _defineProperty$1; /** * The base implementation of `assignValue` and `assignMergeValue` without * value checks. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function baseAssignValue$3(object, key, value) { if (key == '__proto__' && defineProperty$1) { defineProperty$1(object, key, { 'configurable': true, 'enumerable': true, 'value': value, 'writable': true }); } else { object[key] = value; } } var _baseAssignValue = baseAssignValue$3; var baseAssignValue$2 = _baseAssignValue, eq$3 = eq_1; /** * This function is like `assignValue` except that it doesn't assign * `undefined` values. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function assignMergeValue$2(object, key, value) { if (value !== undefined && !eq$3(object[key], value) || value === undefined && !(key in object)) { baseAssignValue$2(object, key, value); } } var _assignMergeValue = assignMergeValue$2; /** * Creates a base function for methods like `_.forIn` and `_.forOwn`. * * @private * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ function createBaseFor$1(fromRight) { return function (object, iteratee, keysFunc) { var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; while (length--) { var key = props[fromRight ? length : ++index]; if (iteratee(iterable[key], key, iterable) === false) { break; } } return object; }; } var _createBaseFor = createBaseFor$1; var createBaseFor = _createBaseFor; /** * The base implementation of `baseForOwn` which iterates over `object` * properties returned by `keysFunc` and invokes `iteratee` for each property. * Iteratee functions may exit iteration early by explicitly returning `false`. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {Function} keysFunc The function to get the keys of `object`. * @returns {Object} Returns `object`. */ var baseFor$1 = createBaseFor(); var _baseFor = baseFor$1; var _cloneBuffer = {exports: {}}; _cloneBuffer.exports; (function (module, exports) { var root = _root; /** Detect free variable `exports`. */ var freeExports = exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined, allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; /** * Creates a clone of `buffer`. * * @private * @param {Buffer} buffer The buffer to clone. * @param {boolean} [isDeep] Specify a deep clone. * @returns {Buffer} Returns the cloned buffer. */ function cloneBuffer(buffer, isDeep) { if (isDeep) { return buffer.slice(); } var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); buffer.copy(result); return result; } module.exports = cloneBuffer; })(_cloneBuffer, _cloneBuffer.exports); var _cloneBufferExports = _cloneBuffer.exports; var root = _root; /** Built-in value references. */ var Uint8Array$1 = root.Uint8Array; var _Uint8Array = Uint8Array$1; var Uint8Array = _Uint8Array; /** * Creates a clone of `arrayBuffer`. * * @private * @param {ArrayBuffer} arrayBuffer The array buffer to clone. * @returns {ArrayBuffer} Returns the cloned array buffer. */ function cloneArrayBuffer$1(arrayBuffer) { var result = new arrayBuffer.constructor(arrayBuffer.byteLength); new Uint8Array(result).set(new Uint8Array(arrayBuffer)); return result; } var _cloneArrayBuffer = cloneArrayBuffer$1; var cloneArrayBuffer = _cloneArrayBuffer; /** * Creates a clone of `typedArray`. * * @private * @param {Object} typedArray The typed array to clone. * @param {boolean} [isDeep] Specify a deep clone. * @returns {Object} Returns the cloned typed array. */ function cloneTypedArray$1(typedArray, isDeep) { var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); } var _cloneTypedArray = cloneTypedArray$1; /** * Copies the values of `source` to `array`. * * @private * @param {Array} source The array to copy values from. * @param {Array} [array=[]] The array to copy values to. * @returns {Array} Returns `array`. */ function copyArray$1(source, array) { var index = -1, length = source.length; array || (array = Array(length)); while (++index < length) { array[index] = source[index]; } return array; } var _copyArray = copyArray$1; var isObject$4 = isObject_1; /** Built-in value references. */ var objectCreate = Object.create; /** * The base implementation of `_.create` without support for assigning * properties to the created object. * * @private * @param {Object} proto The object to inherit from. * @returns {Object} Returns the new object. */ var baseCreate$1 = function () { function object() {} return function (proto) { if (!isObject$4(proto)) { return {}; } if (objectCreate) { return objectCreate(proto); } object.prototype = proto; var result = new object(); object.prototype = undefined; return result; }; }(); var _baseCreate = baseCreate$1; /** * Creates a unary function that invokes `func` with its argument transformed. * * @private * @param {Function} func The function to wrap. * @param {Function} transform The argument transform. * @returns {Function} Returns the new function. */ function overArg$2(func, transform) { return function (arg) { return func(transform(arg)); }; } var _overArg = overArg$2; var overArg$1 = _overArg; /** Built-in value references. */ var getPrototype$2 = overArg$1(Object.getPrototypeOf, Object); var _getPrototype = getPrototype$2; /** Used for built-in method references. */ var objectProto$8 = Object.prototype; /** * Checks if `value` is likely a prototype object. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. */ function isPrototype$3(value) { var Ctor = value && value.constructor, proto = typeof Ctor == 'function' && Ctor.prototype || objectProto$8; return value === proto; } var _isPrototype = isPrototype$3; var baseCreate = _baseCreate, getPrototype$1 = _getPrototype, isPrototype$2 = _isPrototype; /** * Initializes an object clone. * * @private * @param {Object} object The object to clone. * @returns {Object} Returns the initialized clone. */ function initCloneObject$1(object) { return typeof object.constructor == 'function' && !isPrototype$2(object) ? baseCreate(getPrototype$1(object)) : {}; } var _initCloneObject = initCloneObject$1; /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike$7(value) { return value != null && typeof value == 'object'; } var isObjectLike_1 = isObjectLike$7; var baseGetTag$4 = _baseGetTag, isObjectLike$6 = isObjectLike_1; /** `Object#toString` result references. */ var argsTag$1 = '[object Arguments]'; /** * The base implementation of `_.isArguments`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, */ function baseIsArguments$1(value) { return isObjectLike$6(value) && baseGetTag$4(value) == argsTag$1; } var _baseIsArguments = baseIsArguments$1; var baseIsArguments = _baseIsArguments, isObjectLike$5 = isObjectLike_1; /** Used for built-in method references. */ var objectProto$7 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$8 = objectProto$7.hasOwnProperty; /** Built-in value references. */ var propertyIsEnumerable = objectProto$7.propertyIsEnumerable; /** * Checks if `value` is likely an `arguments` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, * else `false`. * @example * * _.isArguments(function() { return arguments; }()); * // => true * * _.isArguments([1, 2, 3]); * // => false */ var isArguments$2 = baseIsArguments(function () { return arguments; }()) ? baseIsArguments : function (value) { return isObjectLike$5(value) && hasOwnProperty$8.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; var isArguments_1 = isArguments$2; /** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */ var isArray$4 = Array.isArray; var isArray_1 = isArray$4; /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER$1 = 9007199254740991; /** * Checks if `value` is a valid array-like length. * * **Note:** This method is loosely based on * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. * @example * * _.isLength(3); * // => true * * _.isLength(Number.MIN_VALUE); * // => false * * _.isLength(Infinity); * // => false * * _.isLength('3'); * // => false */ function isLength$2(value) { return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1; } var isLength_1 = isLength$2; var isFunction$3 = isFunction_1, isLength$1 = isLength_1; /** * Checks if `value` is array-like. A value is considered array-like if it's * not a function and has a `value.length` that's an integer greater than or * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is array-like, else `false`. * @example * * _.isArrayLike([1, 2, 3]); * // => true * * _.isArrayLike(document.body.children); * // => true * * _.isArrayLike('abc'); * // => true * * _.isArrayLike(_.noop); * // => false */ function isArrayLike$4(value) { return value != null && isLength$1(value.length) && !isFunction$3(value); } var isArrayLike_1 = isArrayLike$4; var isArrayLike$3 = isArrayLike_1, isObjectLike$4 = isObjectLike_1; /** * This method is like `_.isArrayLike` except that it also checks if `value` * is an object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array-like object, * else `false`. * @example * * _.isArrayLikeObject([1, 2, 3]); * // => true * * _.isArrayLikeObject(document.body.children); * // => true * * _.isArrayLikeObject('abc'); * // => false * * _.isArrayLikeObject(_.noop); * // => false */ function isArrayLikeObject$1(value) { return isObjectLike$4(value) && isArrayLike$3(value); } var isArrayLikeObject_1 = isArrayLikeObject$1; var isBuffer$2 = {exports: {}}; /** * This method returns `false`. * * @static * @memberOf _ * @since 4.13.0 * @category Util * @returns {boolean} Returns `false`. * @example * * _.times(2, _.stubFalse); * // => [false, false] */ function stubFalse() { return false; } var stubFalse_1 = stubFalse; isBuffer$2.exports; (function (module, exports) { var root = _root, stubFalse = stubFalse_1; /** Detect free variable `exports`. */ var freeExports = exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; /** * Checks if `value` is a buffer. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. * @example * * _.isBuffer(new Buffer(2)); * // => true * * _.isBuffer(new Uint8Array(2)); * // => false */ var isBuffer = nativeIsBuffer || stubFalse; module.exports = isBuffer; })(isBuffer$2, isBuffer$2.exports); var isBufferExports = isBuffer$2.exports; var baseGetTag$3 = _baseGetTag, getPrototype = _getPrototype, isObjectLike$3 = isObjectLike_1; /** `Object#toString` result references. */ var objectTag$1 = '[object Object]'; /** Used for built-in method references. */ var funcProto = Function.prototype, objectProto$6 = Object.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var hasOwnProperty$7 = objectProto$6.hasOwnProperty; /** Used to infer the `Object` constructor. */ var objectCtorString = funcToString.call(Object); /** * Checks if `value` is a plain object, that is, an object created by the * `Object` constructor or one with a `[[Prototype]]` of `null`. * * @static * @memberOf _ * @since 0.8.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. * @example * * function Foo() { * this.a = 1; * } * * _.isPlainObject(new Foo); * // => false * * _.isPlainObject([1, 2, 3]); * // => false * * _.isPlainObject({ 'x': 0, 'y': 0 }); * // => true * * _.isPlainObject(Object.create(null)); * // => true */ function isPlainObject$3(value) { if (!isObjectLike$3(value) || baseGetTag$3(value) != objectTag$1) { return false; } var proto = getPrototype(value); if (proto === null) { return true; } var Ctor = hasOwnProperty$7.call(proto, 'constructor') && proto.constructor; return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; } var isPlainObject_1 = isPlainObject$3; var baseGetTag$2 = _baseGetTag, isLength = isLength_1, isObjectLike$2 = isObjectLike_1; /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag$1 = '[object Error]', funcTag = '[object Function]', mapTag = '[object Map]', numberTag = '[object Number]', objectTag = '[object Object]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', weakMapTag = '[object WeakMap]'; var arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]'; /** Used to identify `toStringTag` values of typed arrays. */ var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag$1] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; /** * The base implementation of `_.isTypedArray` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. */ function baseIsTypedArray$1(value) { return isObjectLike$2(value) && isLength(value.length) && !!typedArrayTags[baseGetTag$2(value)]; } var _baseIsTypedArray = baseIsTypedArray$1; /** * The base implementation of `_.unary` without support for storing metadata. * * @private * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. */ function baseUnary$1(func) { return function (value) { return func(value); }; } var _baseUnary = baseUnary$1; var _nodeUtil = {exports: {}}; _nodeUtil.exports; (function (module, exports) { var freeGlobal = _freeGlobal; /** Detect free variable `exports`. */ var freeExports = exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Detect free variable `process` from Node.js. */ var freeProcess = moduleExports && freeGlobal.process; /** Used to access faster Node.js helpers. */ var nodeUtil = function () { try { // Use `util.types` for Node.js 10+. var types = freeModule && freeModule.require && freeModule.require('util').types; if (types) { return types; } // Legacy `process.binding('util')` for Node.js < 10. return freeProcess && freeProcess.binding && freeProcess.binding('util'); } catch (e) {} }(); module.exports = nodeUtil; })(_nodeUtil, _nodeUtil.exports); var _nodeUtilExports = _nodeUtil.exports; var baseIsTypedArray = _baseIsTypedArray, baseUnary = _baseUnary, nodeUtil = _nodeUtilExports; /* Node.js helper references. */ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; /** * Checks if `value` is classified as a typed array. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. * @example * * _.isTypedArray(new Uint8Array); * // => true * * _.isTypedArray([]); * // => false */ var isTypedArray$2 = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; var isTypedArray_1 = isTypedArray$2; /** * Gets the value at `key`, unless `key` is "__proto__" or "constructor". * * @private * @param {Object} object The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ function safeGet$2(object, key) { if (key === 'constructor' && typeof object[key] === 'function') { return; } if (key == '__proto__') { return; } return object[key]; } var _safeGet = safeGet$2; var baseAssignValue$1 = _baseAssignValue, eq$2 = eq_1; /** Used for built-in method references. */ var objectProto$5 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$6 = objectProto$5.hasOwnProperty; /** * Assigns `value` to `key` of `object` if the existing value is not equivalent * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * for equality comparisons. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function assignValue$1(object, key, value) { var objValue = object[key]; if (!(hasOwnProperty$6.call(object, key) && eq$2(objValue, value)) || value === undefined && !(key in object)) { baseAssignValue$1(object, key, value); } } var _assignValue = assignValue$1; var assignValue = _assignValue, baseAssignValue = _baseAssignValue; /** * Copies properties of `source` to `object`. * * @private * @param {Object} source The object to copy properties from. * @param {Array} props The property identifiers to copy. * @param {Object} [object={}] The object to copy properties to. * @param {Function} [customizer] The function to customize copied values. * @returns {Object} Returns `object`. */ function copyObject$2(source, props, object, customizer) { var isNew = !object; object || (object = {}); var index = -1, length = props.length; while (++index < length) { var key = props[index]; var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined; if (newValue === undefined) { newValue = source[key]; } if (isNew) { baseAssignValue(object, key, newValue); } else { assignValue(object, key, newValue); } } return object; } var _copyObject = copyObject$2; /** * The base implementation of `_.times` without support for iteratee shorthands * or max array length checks. * * @private * @param {number} n The number of times to invoke `iteratee`. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the array of results. */ function baseTimes$1(n, iteratee) { var index = -1, result = Array(n); while (++index < n) { result[index] = iteratee(index); } return result; } var _baseTimes = baseTimes$1; /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\d*)$/; /** * Checks if `value` is a valid array-like index. * * @private * @param {*} value The value to check. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */ function isIndex$2(value, length) { var type = typeof value; length = length == null ? MAX_SAFE_INTEGER : length; return !!length && (type == 'number' || type != 'symbol' && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length; } var _isIndex = isIndex$2; var baseTimes = _baseTimes, isArguments$1 = isArguments_1, isArray$3 = isArray_1, isBuffer$1 = isBufferExports, isIndex$1 = _isIndex, isTypedArray$1 = isTypedArray_1; /** Used for built-in method references. */ var objectProto$4 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$5 = objectProto$4.hasOwnProperty; /** * Creates an array of the enumerable property names of the array-like `value`. * * @private * @param {*} value The value to query. * @param {boolean} inherited Specify returning inherited property names. * @returns {Array} Returns the array of property names. */ function arrayLikeKeys$2(value, inherited) { var isArr = isArray$3(value), isArg = !isArr && isArguments$1(value), isBuff = !isArr && !isArg && isBuffer$1(value), isType = !isArr && !isArg && !isBuff && isTypedArray$1(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; for (var key in value) { if ((inherited || hasOwnProperty$5.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode. key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers. isBuff && (key == 'offset' || key == 'parent') || // PhantomJS 2 has enumerable non-index properties on typed arrays. isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || // Skip index properties. isIndex$1(key, length)))) { result.push(key); } } return result; } var _arrayLikeKeys = arrayLikeKeys$2; /** * This function is like * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * except that it includes inherited enumerable properties. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function nativeKeysIn$1(object) { var result = []; if (object != null) { for (var key in Object(object)) { result.push(key); } } return result; } var _nativeKeysIn = nativeKeysIn$1; var isObject$3 = isObject_1, isPrototype$1 = _isPrototype, nativeKeysIn = _nativeKeysIn; /** Used for built-in method references. */ var objectProto$3 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$4 = objectProto$3.hasOwnProperty; /** * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeysIn$1(object) { if (!isObject$3(object)) { return nativeKeysIn(object); } var isProto = isPrototype$1(object), result = []; for (var key in object) { if (!(key == 'constructor' && (isProto || !hasOwnProperty$4.call(object, key)))) { result.push(key); } } return result; } var _baseKeysIn = baseKeysIn$1; var arrayLikeKeys$1 = _arrayLikeKeys, baseKeysIn = _baseKeysIn, isArrayLike$2 = isArrayLike_1; /** * Creates an array of the own and inherited enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. * * @static * @memberOf _ * @since 3.0.0 * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keysIn(new Foo); * // => ['a', 'b', 'c'] (iteration order is not guaranteed) */ function keysIn$3(object) { return isArrayLike$2(object) ? arrayLikeKeys$1(object, true) : baseKeysIn(object); } var keysIn_1 = keysIn$3; var copyObject$1 = _copyObject, keysIn$2 = keysIn_1; /** * Converts `value` to a plain object flattening inherited enumerable string * keyed properties of `value` to own properties of the plain object. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to convert. * @returns {Object} Returns the converted plain object. * @example * * function Foo() { * this.b = 2; * } * * Foo.prototype.c = 3; * * _.assign({ 'a': 1 }, new Foo); * // => { 'a': 1, 'b': 2 } * * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); * // => { 'a': 1, 'b': 2, 'c': 3 } */ function toPlainObject$1(value) { return copyObject$1(value, keysIn$2(value)); } var toPlainObject_1 = toPlainObject$1; var assignMergeValue$1 = _assignMergeValue, cloneBuffer = _cloneBufferExports, cloneTypedArray = _cloneTypedArray, copyArray = _copyArray, initCloneObject = _initCloneObject, isArguments = isArguments_1, isArray$2 = isArray_1, isArrayLikeObject = isArrayLikeObject_1, isBuffer = isBufferExports, isFunction$2 = isFunction_1, isObject$2 = isObject_1, isPlainObject$2 = isPlainObject_1, isTypedArray = isTypedArray_1, safeGet$1 = _safeGet, toPlainObject = toPlainObject_1; /** * A specialized version of `baseMerge` for arrays and objects which performs * deep merges and tracks traversed objects enabling objects with circular * references to be merged. * * @private * @param {Object} object The destination object. * @param {Object} source The source object. * @param {string} key The key of the value to merge. * @param {number} srcIndex The index of `source`. * @param {Function} mergeFunc The function to merge values. * @param {Function} [customizer] The function to customize assigned values. * @param {Object} [stack] Tracks traversed source values and their merged * counterparts. */ function baseMergeDeep$1(object, source, key, srcIndex, mergeFunc, customizer, stack) { var objValue = safeGet$1(object, key), srcValue = safeGet$1(source, key), stacked = stack.get(srcValue); if (stacked) { assignMergeValue$1(object, key, stacked); return; } var newValue = customizer ? customizer(objValue, srcValue, key + '', object, source, stack) : undefined; var isCommon = newValue === undefined; if (isCommon) { var isArr = isArray$2(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue); newValue = srcValue; if (isArr || isBuff || isTyped) { if (isArray$2(objValue)) { newValue = objValue; } else if (isArrayLikeObject(objValue)) { newValue = copyArray(objValue); } else if (isBuff) { isCommon = false; newValue = cloneBuffer(srcValue, true); } else if (isTyped) { isCommon = false; newValue = cloneTypedArray(srcValue, true); } else { newValue = []; } } else if (isPlainObject$2(srcValue) || isArguments(srcValue)) { newValue = objValue; if (isArguments(objValue)) { newValue = toPlainObject(objValue); } else if (!isObject$2(objValue) || isFunction$2(objValue)) { newValue = initCloneObject(srcValue); } } else { isCommon = false; } } if (isCommon) { // Recursively merge objects and arrays (susceptible to call stack limits). stack.set(srcValue, newValue); mergeFunc(newValue, srcValue, srcIndex, customizer, stack); stack['delete'](srcValue); } assignMergeValue$1(object, key, newValue); } var _baseMergeDeep = baseMergeDeep$1; var Stack = _Stack, assignMergeValue = _assignMergeValue, baseFor = _baseFor, baseMergeDeep = _baseMergeDeep, isObject$1 = isObject_1, keysIn$1 = keysIn_1, safeGet = _safeGet; /** * The base implementation of `_.merge` without support for multiple sources. * * @private * @param {Object} object The destination object. * @param {Object} source The source object. * @param {number} srcIndex The index of `source`. * @param {Function} [customizer] The function to customize merged values. * @param {Object} [stack] Tracks traversed source values and their merged * counterparts. */ function baseMerge$1(object, source, srcIndex, customizer, stack) { if (object === source) { return; } baseFor(source, function (srcValue, key) { stack || (stack = new Stack()); if (isObject$1(srcValue)) { baseMergeDeep(object, source, key, srcIndex, baseMerge$1, customizer, stack); } else { var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + '', object, source, stack) : undefined; if (newValue === undefined) { newValue = srcValue; } assignMergeValue(object, key, newValue); } }, keysIn$1); } var _baseMerge = baseMerge$1; /** * This method returns the first argument it receives. * * @static * @since 0.1.0 * @memberOf _ * @category Util * @param {*} value Any value. * @returns {*} Returns `value`. * @example * * var object = { 'a': 1 }; * * console.log(_.identity(object) === object); * // => true */ function identity$2(value) { return value; } var identity_1 = identity$2; /** * A faster alternative to `Function#apply`, this function invokes `func` * with the `this` binding of `thisArg` and the arguments of `args`. * * @private * @param {Function} func The function to invoke. * @param {*} thisArg The `this` binding of `func`. * @param {Array} args The arguments to invoke `func` with. * @returns {*} Returns the result of `func`. */ function apply$3(func, thisArg, args) { switch (args.length) { case 0: return func.call(thisArg); case 1: return func.call(thisArg, args[0]); case 2: return func.call(thisArg, args[0], args[1]); case 3: return func.call(thisArg, args[0], args[1], args[2]); } return func.apply(thisArg, args); } var _apply = apply$3; var apply$2 = _apply; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max; /** * A specialized version of `baseRest` which transforms the rest array. * * @private * @param {Function} func The function to apply a rest parameter to. * @param {number} [start=func.length-1] The start position of the rest parameter. * @param {Function} transform The rest array transform. * @returns {Function} Returns the new function. */ function overRest$1(func, start, transform) { start = nativeMax(start === undefined ? func.length - 1 : start, 0); return function () { var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array = Array(length); while (++index < length) { array[index] = args[start + index]; } index = -1; var otherArgs = Array(start + 1); while (++index < start) { otherArgs[index] = args[index]; } otherArgs[start] = transform(array); return apply$2(func, this, otherArgs); }; } var _overRest = overRest$1; /** * Creates a function that returns `value`. * * @static * @memberOf _ * @since 2.4.0 * @category Util * @param {*} value The value to return from the new function. * @returns {Function} Returns the new constant function. * @example * * var objects = _.times(2, _.constant({ 'a': 1 })); * * console.log(objects); * // => [{ 'a': 1 }, { 'a': 1 }] * * console.log(objects[0] === objects[1]); * // => true */ function constant$1(value) { return function () { return value; }; } var constant_1 = constant$1; var constant = constant_1, defineProperty = _defineProperty$1, identity$1 = identity_1; /** * The base implementation of `setToString` without support for hot loop shorting. * * @private * @param {Function} func The function to modify. * @param {Function} string The `toString` result. * @returns {Function} Returns `func`. */ var baseSetToString$1 = !defineProperty ? identity$1 : function (func, string) { return defineProperty(func, 'toString', { 'configurable': true, 'enumerable': false, 'value': constant(string), 'writable': true }); }; var _baseSetToString = baseSetToString$1; /** Used to detect hot functions by number of calls within a span of milliseconds. */ var HOT_COUNT = 800, HOT_SPAN = 16; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeNow = Date.now; /** * Creates a function that'll short out and invoke `identity` instead * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` * milliseconds. * * @private * @param {Function} func The function to restrict. * @returns {Function} Returns the new shortable function. */ function shortOut$1(func) { var count = 0, lastCalled = 0; return function () { var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); lastCalled = stamp; if (remaining > 0) { if (++count >= HOT_COUNT) { return arguments[0]; } } else { count = 0; } return func.apply(undefined, arguments); }; } var _shortOut = shortOut$1; var baseSetToString = _baseSetToString, shortOut = _shortOut; /** * Sets the `toString` method of `func` to return `string`. * * @private * @param {Function} func The function to modify. * @param {Function} string The `toString` result. * @returns {Function} Returns `func`. */ var setToString$1 = shortOut(baseSetToString); var _setToString = setToString$1; var identity = identity_1, overRest = _overRest, setToString = _setToString; /** * The base implementation of `_.rest` which doesn't validate or coerce arguments. * * @private * @param {Function} func The function to apply a rest parameter to. * @param {number} [start=func.length-1] The start position of the rest parameter. * @returns {Function} Returns the new function. */ function baseRest$2(func, start) { return setToString(overRest(func, start, identity), func + ''); } var _baseRest = baseRest$2; var eq$1 = eq_1, isArrayLike$1 = isArrayLike_1, isIndex = _isIndex, isObject = isObject_1; /** * Checks if the given arguments are from an iteratee call. * * @private * @param {*} value The potential iteratee value argument. * @param {*} index The potential iteratee index or key argument. * @param {*} object The potential iteratee object argument. * @returns {boolean} Returns `true` if the arguments are from an iteratee call, * else `false`. */ function isIterateeCall$2(value, index, object) { if (!isObject(object)) { return false; } var type = typeof index; if (type == 'number' ? isArrayLike$1(object) && isIndex(index, object.length) : type == 'string' && index in object) { return eq$1(object[index], value); } return false; } var _isIterateeCall = isIterateeCall$2; var baseRest$1 = _baseRest, isIterateeCall$1 = _isIterateeCall; /** * Creates a function like `_.assign`. * * @private * @param {Function} assigner The function to assign values. * @returns {Function} Returns the new assigner function. */ function createAssigner$2(assigner) { return baseRest$1(function (object, sources) { var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : undefined, guard = length > 2 ? sources[2] : undefined; customizer = assigner.length > 3 && typeof customizer == 'function' ? (length--, customizer) : undefined; if (guard && isIterateeCall$1(sources[0], sources[1], guard)) { customizer = length < 3 ? undefined : customizer; length = 1; } object = Object(object); while (++index < length) { var source = sources[index]; if (source) { assigner(object, source, index, customizer); } } return object; }); } var _createAssigner = createAssigner$2; var baseMerge = _baseMerge, createAssigner$1 = _createAssigner; /** * This method is like `_.assign` except that it recursively merges own and * inherited enumerable string keyed properties of source objects into the * destination object. Source properties that resolve to `undefined` are * skipped if a destination value exists. Array and plain object properties * are merged recursively. Other objects and value types are overridden by * assignment. Source objects are applied from left to right. Subsequent * sources overwrite property assignments of previous sources. * * **Note:** This method mutates `object`. * * @static * @memberOf _ * @since 0.5.0 * @category Object * @param {Object} object The destination object. * @param {...Object} [sources] The source objects. * @returns {Object} Returns `object`. * @example * * var object = { * 'a': [{ 'b': 2 }, { 'd': 4 }] * }; * * var other = { * 'a': [{ 'c': 3 }, { 'e': 5 }] * }; * * _.merge(object, other); * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } */ var merge$1 = createAssigner$1(function (object, source, srcIndex) { baseMerge(object, source, srcIndex); }); var merge_1 = merge$1; var merge$2 = /*@__PURE__*/getDefaultExportFromCjs(merge_1); const { flatten, unflatten } = flat$1; /** * Applies new styles to the default theme * * ### Example * * ```jsx * import { combineStyles } from '@adminjs/design-system` * * const myTheme = combineStyles({ * colors: { * primary100: '#000' * } * }) * ``` * * @param {ThemeOverride} overrides * @memberof module:@adminjs/design-system * * @return {Theme} */ const combineStyles = (...overrides) => { const merged = merge$2(flatten(defautTheme), ...overrides.map((o = {}) => flatten(o))); return unflatten(merged); }; /** * adds leading 0 to the number when it is lower than 10 * @param {number} pad number - i.e 8 * @returns {sting} formatted number: i.e. "08" * @memberof module:@adminjs/design-system */ const pad = n => n < 10 ? `0${n.toString()}` : n.toString(); /** * Formats date to YYYY-MM-DD * * @param {Date} date * @return {string} * @memberof module:@adminjs/design-system */ const formatDate = date => `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`; /** * Formats date to HH:mm * * @param {Date} date * @return {string} * @memberof module:@adminjs/design-system */ const formatTime = date => `${pad(date.getHours())}:${pad(date.getMinutes())}`; /** * Formats date to YYYY-MM-DD HH:mm * * @param {Date} date * @return {string} * @memberof module:@adminjs/design-system */ const formatDateTime = date => `${formatDate(date)} ${formatTime(date)}`; /** * Based on the property type formats date to either YYYY-MM-DD HH:mm or YYYY-MM-DD * * @param {Date} date * @param {PropertyType} propertyType * @return {string} * @memberof module:@adminjs/design-system */ const formatDateProperty = (date, propertyType) => { if (propertyType === 'date') { return formatDate(date); } return formatDateTime(date); }; const generateId = key => { const accessKey = `UNIQUE_KEY_${key}`; window.AdminJS = window.AdminJS || {}; // eslint-disable-next-line max-len window.AdminJS[accessKey] = (Number.parseInt(window.AdminJS[accessKey], 10) || 0) + 1; return [accessKey, window.AdminJS[accessKey]].join('_'); }; /* Solution inspired by https://stackoverflow.com/a/20732091/2594227 answer */ const UNITS = ['B', 'KB', 'MB', 'GB', 'TB']; // eslint-disable-next-line import/prefer-default-export /** * Changes size in bytes to string. If unit is not provided - tries to find the best match. * * @param {number} size * @param {'B' | 'KB' | 'MB' | 'GB' | 'TB'} [unit] * @returns {string} * @memberof module:@adminjs/design-system */ const humanFileSize = (size, unit) => { let foundUnitIndex = null; if (unit) { foundUnitIndex = UNITS.findIndex(u => u === unit); } const unitIndex = foundUnitIndex || Math.min(Math.floor(Math.log(+size) / Math.log(1024)), UNITS.length); const calculatedSize = +size / 1024 ** unitIndex; const guessedUnit = ['B', 'kB', 'MB', 'GB', 'TB'][unitIndex]; return `${Math.round(calculatedSize)} ${guessedUnit}`; }; /* eslint-disable arrow-body-style */ // TODO: handle iframe case with ref.current.ownerDocument const PortalUtils = { appendElement: element => { window.document.body.appendChild(element); }, removeElement: id => { const domElement = window.document.getElementById(id); domElement?.remove(); }, createPortalForKey: function createPortalForKey(idKey, Component) { const Portal = props => { const [id] = React.useState(generateId(idKey)); const [portalElement] = React.useState(window.document.createElement('div')); React.useEffect(() => { portalElement.id = id; PortalUtils.appendElement(portalElement); return () => { PortalUtils.removeElement(id); }; }); return /*#__PURE__*/ReactDOM__namespace.default.createPortal( /*#__PURE__*/React__namespace.default.createElement(Component, props), portalElement); }; return Portal; } }; /* cSpell:disable */ /** * Resets css styles which can be applied to element created by styled-component * * ### Example * * ```javascript * import { reset } from '@adminjs/design-system' * * const myContentComponent = styled` * ${reset}; * ` * ``` * @new in version 3.3 * @memberof module:@adminjs/design-system */ const reset$1 = Ae` /* http://meyerweb.com/eric/tools/css/reset/ v4.0 | 20180602 License: none (public domain) */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, main, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section { display: block; } /* HTML5 hidden-attribute fix for newer browsers */ *[hidden] { display: none; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } table { border-collapse: collapse; border-spacing: 0; } `; /* cSpell:enable */ /** * Resets css component which should be applied to the top of the html * * ### Example * * ```jsx * import { Reset } from '@adminjs/design-system' * * <ThemeProvider theme={theme}> * <Reset /> * <Box> * { ... } * </Box> * </ThemeProvider> * ``` * @new in version 3.3 * @memberof module:@adminjs/design-system */ const Reset = $e`${reset$1}`; const selectStyles = theme => ({ control: baseStyles => ({ ...baseStyles, boxShadow: 'none', background: 'transparent', borderColor: theme.colors.inputBorder }), input: baseStyles => ({ ...baseStyles, color: theme.colors.grey100 }), singleValue: baseStyles => ({ ...baseStyles, color: theme.colors.grey100 }), menu: baseStyles => ({ ...baseStyles, boxShadow: 'none', background: theme.colors.container, border: theme.borders.input, zIndex: 100 }) }); const filterStyles = theme => ({ control: provided => ({ ...provided, boxShadow: 'none', background: 'transparent', borderColor: theme.colors.inputBorder }), input: () => ({ color: theme.colors.grey100, gridArea: '1/1/2/3', gridTemplateColumns: '0px min-content' }), singleValue: () => ({ color: theme.colors.grey100, gridArea: '1/1/2/3' }), menu: provided => ({ ...provided, borderColor: theme.colors.border, background: theme.colors.filterBg, zIndex: 5 }) }); function themeGet(kind, value, offset) { return ({ theme }) => { const themeVal = value ? theme[kind][value] : theme[kind]; if (themeVal && offset) { let offsetValue; if (typeof offset === 'string') { [offsetValue] = getValueAndUnit(offset); } else { offsetValue = offset; } const [pxValue, unit] = getValueAndUnit(themeVal); return `${pxValue + offsetValue}${unit}`; } return themeVal; }; } /** * * Handy utility function which simplifies taking values from the {@link Theme}. * * ### Example * * ```javascript * import { Box, themeGet } from '@adminjs/design-system' * * const myComponent = styled(Box)` * padding: ${themeGet('space', 'xl')}; * font: ${themeGet('font')}; * margin-top: ${themeGet('space', 'xl', -2)}; * * margin-bottom: ${(props) => themeGet('space', props.disabled ? 'xl' : 'xxl')(props)}; * ` * * ``` * * @param {string} kind One of the keys in the {@link Theme} interface. For example: * `fontWeights` * @param {string} [value] Value for the key * @param {string | number} [offset] optional offset. When you want to take xxl + 2pixels * you can do this by passing +2 as the offset. * @return {ThemeFunction} function taking props as an argument * * @new in version 3.3 * @function themeGet * @memberof Theme */ const getColor = theme => color => theme.colors[ColorVariants[color] || 'primary100']; const legacyButtonVariants = ['danger', 'default', 'info', 'primary', 'secondary', 'success'].reduce((acc, color) => ({ ...acc, [color]: { className: cssClass(['Button', 'Button_Legacy']), borderColor: 'currentColor', color: theme => getColor(theme)(color), '&:hover': { bg: theme => rgba(getColor(theme)(color), 0.05) }, '&:focus, &:active': { bg: theme => rgba(getColor(theme)(color), 0.1) } } }), {}); const buttonVariants = ({ color = 'primary' }) => variant({ variants: { ...legacyButtonVariants, contained: { className: cssClass(['Button', 'Button_Contained']), color: theme => theme.colors.white, bg: theme => getColor(theme)(color), borderColor: theme => getColor(theme)(color), '&:hover': { bg: theme => curriedDarken$1(0.15, getColor(theme)(color)), borderColor: theme => curriedDarken$1(0.15, getColor(theme)(color)) }, '&:focus, &:active': { bg: theme => curriedDarken$1(0.2, getColor(theme)(color)), borderColor: theme => curriedDarken$1(0.2, getColor(theme)(color)) } }, outlined: { className: cssClass(['Button', 'Button_Outlined']), borderColor: 'currentColor', color: theme => getColor(theme)(color), '&:hover': { bg: theme => rgba(getColor(theme)(color), 0.05) }, '&:focus, &:active': { bg: theme => rgba(getColor(theme)(color), 0.1) } }, light: { className: cssClass(['Button', 'Button_Light']), color: theme => color && getColor(theme)(color), borderColor: 'grey40', [`& .${cssClass('Icon')} svg`]: { stroke: 'grey80' }, '&:hover': { bg: theme => rgba(getColor(theme)(color), 0.05) }, '&:focus, &:active': { bg: theme => rgba(getColor(theme)(color), 0.1) } }, text: { className: cssClass(['Button', 'Button_Text']), color: theme => color && getColor(theme)(color), borderColor: 'transparent', '&:disabled': { 'border-color': 'transparent' }, '&:hover': { bg: theme => rgba(getColor(theme)(color), 0.05) }, '&:focus, &:active': { bg: theme => rgba(getColor(theme)(color), 0.1) } } } }); const sizeVariants$3 = variant({ prop: 'size', variants: { sm: { fontSize: 'sm', py: 'xs', lineHeight: 'default', px: 'lg', [`& .${cssClass('Icon')}`]: { marginTop: '-1px', marginBottom: '-1px' } }, default: { py: 'sm', px: 'xxl', lineHeight: 'lg' }, md: { py: 'sm', px: 'xxl', lineHeight: 'lg' }, lg: { py: 'default', px: 'x3', lineHeight: 'lg' }, icon: { py: 'default', px: 'default', lineHeight: 'sm', minWidth: '34px', height: '34px', [`& .${cssClass('Icon')}`]: { padding: 0, margin: 0 } } } }); /** * Button CSS Styles which can be reused in another button-like component with styled-components * * Usage: * ``` * import { ButtonCSS } from '@adminjs/design-system' * import { Link } from 'react-router-dom' * * const MyStyledLink = styled(Link)` * ${ButtonCSS} * ` * ``` * @memberof Button * @alias ButtonCSS */ const ButtonCSS = Ae` -webkit-appearance: none; -moz-appearance: none; display: inline-block; background-color: transparent; outline: 0; font-family: ${({ theme }) => theme.font}; font-size: ${themeGet('fontSizes', 'default')}; vertical-align: middle; border-radius: ${themeGet('space', 'sm')}; user-select: none; text-align: center; border: 1px solid ${themeGet('colors', 'primary100')}; color: ${themeGet('colors', 'primary100')}; cursor: pointer; text-decoration: none; box-sizing: border-box; & .${cssClass('Icon')} { vertical-align: middle; margin: 0 ${themeGet('space', 'md')} 0 0; color: inherit; } transition: all 0.1s ease-in; ${({ rounded }) => rounded ? 'border-radius: 9999px' : ''}; &:disabled { background-color: rgba(0, 0, 0, 0.2); border-color: transparent; color: rgba(0, 0, 0, 0.3); cursor: auto; &:hover, &:focus, &:active { background-color: rgba(0, 0, 0, 0.2); border-color: transparent; } } ${color}; ${space}; ${typography}; ${buttonVariants}; ${sizeVariants$3}; `; const addContent = Ae` &:before { content: '${({ label }) => label}'; } `; /** * @load ./button.doc.md * @component * @see ButtonProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-button--default StoryBook} * @hideconstructor * @subcategory Atoms * @section design-system */ const Button = styled.button.attrs(props => ({ className: cssClass('Button', props.className) }))` ${ButtonCSS}; ${({ label }) => label ? addContent : ''}; `; Button.defaultProps = { variant: 'text', color: 'primary', size: 'md' }; Button.displayName = 'Button'; const labelVariants = variant({ variants: { primary: { color: 'primary100', [`& .${cssClass('Icon')} svg`]: { stroke: 'primary100' } }, danger: { color: 'error', [`& .${cssClass('Icon')} svg`]: { stroke: 'error' } }, success: { color: 'success', [`& .${cssClass('Icon')} svg`]: { stroke: 'success' } }, info: { color: 'info', [`& .${cssClass('Icon')} svg`]: { stroke: 'info' } }, secondary: { color: 'accent', [`& .${cssClass('Icon')} svg`]: { stroke: 'accent' } }, light: { color: 'grey60', mb: 'sm', fontWeight: 'light', [`& .${cssClass('Icon')} svg`]: { stroke: 'grey60' } }, default: {} } }); /** * Prop Types of a Label component. * Apart from those explicitly specified below it extends all {@link ColorProps}, * {@link SpaceProps} and {@link TypographyProps} * * @memberof Label * @alias LabelProps * @property {string} [...] All props default to _label_ html component like `htmlFor`, * `id` etc. * @property {string} [...] Other props from {@link ColorProps}, {@link SpaceProps} * and {@link TypographyProps} */ const setDisabled = ({ disabled, theme }) => disabled ? Ae` color: ${theme.colors.grey40}; & .${cssClass('Icon')} svg { stroke: ${theme.colors.grey40}; } ` : Ae``; /** * @classdesc * * <img src="components/label.png" /> * * Styled form of **label** element. * * ### Usage * * ```javascript * import { Label, LabelProps } from '@adminjs/design-system' * ``` * * @component * @subcategory Atoms * @see LabelProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-label--default Storybook} * @hideconstructor * @example <caption>2 Different versions</caption> * return ( * <Box p="xl"> * <Text> * <Label uppercase>Some uppercase label</Label> * </Text> * <Text mt="default"> * <Label required>Label for required field</Label> * </Text> * </Box> * ) * @section design-system */ const Label = styled.label` display: ${({ inline }) => inline ? 'inline-block' : 'block'}; font-family: ${themeGet('font')}; font-size: ${props => themeGet('fontSizes', props.size === 'lg' ? 'md' : 'sm')(props)}; line-height: ${themeGet('lineHeights', 'default')}; margin-bottom: ${({ theme, inline }) => inline ? '0' : theme.space.default}; &:before { content: "${({ required }) => required ? '*' : ''}"; color: ${themeGet('colors', 'primary100')}; margin-right: ${themeGet('space', 'sm')}; display: ${({ required }) => required ? 'block-inline' : 'none'}; } & > .${cssClass('Icon')}:first-child { margin-right: ${themeGet('space', 'md')}; } ${({ uppercase }) => uppercase ? 'text-transform: uppercase;' : ''} ${color}; ${typography}; ${space}; ${labelVariants}; ${props => setDisabled(props)}; `; Label.defaultProps = { className: cssClass('Label') }; Label.displayName = 'Label'; function _extends$j() { _extends$j = Object.assign ? Object.assign.bind() : 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; }; return _extends$j.apply(this, arguments); } const Icon$1 = styled.svg` fill: none; stroke: white; stroke-width: 2px; `; const CheckboxRadioContainer = styled.span` position: relative; display: inline-block; vertical-align: middle; & + ${Label} { margin-left: ${({ theme }) => theme.space.default}; vertical-align: middle; margin-bottom: ${({ theme }) => theme.space.sm}; } `; // Hide checkbox visually but remain accessible to screen readers. // Source: https://polished.js.org/docs/#hidevisually const HiddenCheckbox = styled.input.attrs({ type: 'checkbox' })` border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; white-space: nowrap; width: 1px; `; const checkboxBackground = (theme, checked, disabled) => { if (checked) { return disabled ? theme.colors.grey40 : theme.colors.primary100; } return 'transparent'; }; const StyledCheckbox = styled.a` display: inline-block; width: 16px; /* when it is placed within a container setting different font size */ font-size: 12px; border: 1px solid ${({ theme, checked, disabled }) => checked && !disabled ? theme.colors.primary100 : theme.colors.inputBorder}; height: 16px; background: ${({ checked, theme, disabled }) => checkboxBackground(theme, checked, disabled)}; transition: all 150ms; position: relative; border-radius: 2px; ${HiddenCheckbox}:focus + & { ${({ theme }) => `box-shadow: ${focusShadowStyle(theme)};`}; } ${HiddenCheckbox}:hover + & { border-color: ${({ theme }) => theme.colors.grey60}; } ${Icon$1} { visibility: ${props => props.checked ? 'visible' : 'hidden'}; } ${({ disabled }) => !disabled && Ae` cursor: pointer; `} &:after { content: ''; position: absolute; left: -5px; top: -5px; width: 24px; height: 24px; opacity: 0; background: ${({ theme }) => theme.colors.primary100}; } &:after:before { opacity: 0.1; } `; /** * @typedef {object} CheckBoxProps * @alias CheckBoxProps * @memberof module:@adminjs/design-system.CheckBox * @property {string} [...] All props default to _checkbox_ html input like `onChange`, * `checked` etc. */ /** * @classdesc * * <img src="components/checkbox.png" /> * * HTML CheckBox * * ### Usage * * ```javascript * import { CheckBox, CheckBoxProps } from '@adminjs/design-system' * ``` * * @component * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-checkbox--default StoryBook} * @hideconstructor * @subcategory Atoms * @example * return ( * <Box p="xl"> * <CheckBox id="checkbox1"/> * <Label inline htmlFor="checkbox1" ml="default">Some example label</Label> * </Box> * ) * @section design-system */ const CheckBox = props => { const { className, checked, onChange, disabled, ...restProps } = props; const [isChecked, setChecked] = React.useState(checked ?? false); const handleChange = event => { if (disabled) return; if (onChange) { onChange(event); } else { setChecked(!event.target.checked); } }; React.useEffect(() => { setChecked(checked ?? false); }, [checked]); return /*#__PURE__*/React__namespace.default.createElement(CheckboxRadioContainer, { className: [className ?? '', 'adminjs_Checkbox'].join(' ') }, /*#__PURE__*/React__namespace.default.createElement(HiddenCheckbox, _extends$j({ checked: isChecked, onChange: handleChange // eslint-disable-next-line @typescript-eslint/ban-types }, restProps, { disabled: disabled })), /*#__PURE__*/React__namespace.default.createElement(StyledCheckbox, { checked: isChecked, disabled: disabled, onClick: event => handleChange && handleChange(event) }, /*#__PURE__*/React__namespace.default.createElement(Icon$1, { viewBox: "0 0 24 24" }, /*#__PURE__*/React__namespace.default.createElement("polyline", { points: "20 6 9 17 4 12" })))); }; CheckBox.displayName = 'CheckBox'; /*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ var __assign$3 = function () { __assign$3 = Object.assign || function __assign(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign$3.apply(this, arguments); }; function __rest(s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; } function __spreadArray(to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || from); } /** * Escape regex char * * See: https://stackoverflow.com/questions/17885855/use-dynamic-variable-string-as-regex-pattern-in-javascript */ var escapeRegExp = function (stringToGoIntoTheRegex) { return stringToGoIntoTheRegex.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); }; var abbrMap = { k: 1000, m: 1000000, b: 1000000000 }; /** * Parse a value with abbreviation e.g 1k = 1000 */ var parseAbbrValue = function (value, decimalSeparator) { if (decimalSeparator === void 0) { decimalSeparator = '.'; } var reg = new RegExp("(\\d+(" + escapeRegExp(decimalSeparator) + "\\d*)?)([kmb])$", 'i'); var match = value.match(reg); if (match) { var digits = match[1], abbr = match[3]; var multiplier = abbrMap[abbr.toLowerCase()]; return Number(digits.replace(decimalSeparator, '.')) * multiplier; } return undefined; }; /** * Remove group separator from value eg. 1,000 > 1000 */ var removeSeparators = function (value, separator) { if (separator === void 0) { separator = ','; } var reg = new RegExp(escapeRegExp(separator), 'g'); return value.replace(reg, ''); }; /** * Remove invalid characters */ var removeInvalidChars = function (value, validChars) { var chars = escapeRegExp(validChars.join('')); var reg = new RegExp("[^\\d" + chars + "]", 'gi'); return value.replace(reg, ''); }; /** * Remove prefix, separators and extra decimals from value */ var cleanValue$1 = function (_a) { var value = _a.value, _b = _a.groupSeparator, groupSeparator = _b === void 0 ? ',' : _b, _c = _a.decimalSeparator, decimalSeparator = _c === void 0 ? '.' : _c, _d = _a.allowDecimals, allowDecimals = _d === void 0 ? true : _d, _e = _a.decimalsLimit, decimalsLimit = _e === void 0 ? 2 : _e, _f = _a.allowNegativeValue, allowNegativeValue = _f === void 0 ? true : _f, _g = _a.disableAbbreviations, disableAbbreviations = _g === void 0 ? false : _g, _h = _a.prefix, prefix = _h === void 0 ? '' : _h, _j = _a.transformRawValue, transformRawValue = _j === void 0 ? function (rawValue) { return rawValue; } : _j; var transformedValue = transformRawValue(value); if (transformedValue === '-') { return transformedValue; } var abbreviations = disableAbbreviations ? [] : ['k', 'm', 'b']; var reg = new RegExp("((^|\\D)-\\d)|(-" + escapeRegExp(prefix) + ")"); var isNegative = reg.test(transformedValue); // Is there a digit before the prefix? eg. 1$ var _k = RegExp("(\\d+)-?" + escapeRegExp(prefix)).exec(value) || [], prefixWithValue = _k[0], preValue = _k[1]; var withoutPrefix = prefix ? prefixWithValue ? transformedValue.replace(prefixWithValue, '').concat(preValue) : transformedValue.replace(prefix, '') : transformedValue; var withoutSeparators = removeSeparators(withoutPrefix, groupSeparator); var withoutInvalidChars = removeInvalidChars(withoutSeparators, __spreadArray([groupSeparator, decimalSeparator], abbreviations)); var valueOnly = withoutInvalidChars; if (!disableAbbreviations) { // disallow letter without number if (abbreviations.some(function (letter) { return letter === withoutInvalidChars.toLowerCase(); })) { return ''; } var parsed = parseAbbrValue(withoutInvalidChars, decimalSeparator); if (parsed) { valueOnly = String(parsed); } } var includeNegative = isNegative && allowNegativeValue ? '-' : ''; if (decimalSeparator && valueOnly.includes(decimalSeparator)) { var _l = withoutInvalidChars.split(decimalSeparator), int = _l[0], decimals = _l[1]; var trimmedDecimals = decimalsLimit && decimals ? decimals.slice(0, decimalsLimit) : decimals; var includeDecimals = allowDecimals ? "" + decimalSeparator + trimmedDecimals : ''; return "" + includeNegative + int + includeDecimals; } return "" + includeNegative + valueOnly; }; var fixedDecimalValue = function (value, decimalSeparator, fixedDecimalLength) { if (fixedDecimalLength && value.length > 1) { if (value.includes(decimalSeparator)) { var _a = value.split(decimalSeparator), int = _a[0], decimals = _a[1]; if (decimals.length > fixedDecimalLength) { return "" + int + decimalSeparator + decimals.slice(0, fixedDecimalLength); } } var reg = value.length > fixedDecimalLength ? new RegExp("(\\d+)(\\d{" + fixedDecimalLength + "})") : new RegExp("(\\d)(\\d+)"); var match = value.match(reg); if (match) { var int = match[1], decimals = match[2]; return "" + int + decimalSeparator + decimals; } } return value; }; var getSuffix = function (value, _a) { var _b = _a.groupSeparator, groupSeparator = _b === void 0 ? ',' : _b, _c = _a.decimalSeparator, decimalSeparator = _c === void 0 ? '.' : _c; var suffixReg = new RegExp("\\d([^" + escapeRegExp(groupSeparator) + escapeRegExp(decimalSeparator) + "0-9]+)"); var suffixMatch = value.match(suffixReg); return suffixMatch ? suffixMatch[1] : undefined; }; /** * Format value with decimal separator, group separator and prefix */ var formatValue = function (options) { var _value = options.value, decimalSeparator = options.decimalSeparator, intlConfig = options.intlConfig, decimalScale = options.decimalScale, _a = options.prefix, prefix = _a === void 0 ? '' : _a, _b = options.suffix, suffix = _b === void 0 ? '' : _b; if (_value === '' || _value === undefined) { return ''; } if (_value === '-') { return '-'; } var isNegative = new RegExp("^\\d?-" + (prefix ? escapeRegExp(prefix) + "?" : '') + "\\d").test(_value); var value = decimalSeparator !== '.' ? replaceDecimalSeparator(_value, decimalSeparator, isNegative) : _value; var defaultNumberFormatOptions = { minimumFractionDigits: decimalScale || 0, maximumFractionDigits: 20 }; var numberFormatter = intlConfig ? new Intl.NumberFormat(intlConfig.locale, intlConfig.currency ? __assign$3(__assign$3({}, defaultNumberFormatOptions), { style: 'currency', currency: intlConfig.currency }) : defaultNumberFormatOptions) : new Intl.NumberFormat(undefined, defaultNumberFormatOptions); var parts = numberFormatter.formatToParts(Number(value)); var formatted = replaceParts(parts, options); // Does intl formatting add a suffix? var intlSuffix = getSuffix(formatted, __assign$3({}, options)); // Include decimal separator if user input ends with decimal separator var includeDecimalSeparator = _value.slice(-1) === decimalSeparator ? decimalSeparator : ''; var _c = value.match(RegExp('\\d+\\.(\\d+)')) || [], decimals = _c[1]; // Keep original decimal padding if no decimalScale if (decimalScale === undefined && decimals && decimalSeparator) { if (formatted.includes(decimalSeparator)) { formatted = formatted.replace(RegExp("(\\d+)(" + escapeRegExp(decimalSeparator) + ")(\\d+)", 'g'), "$1$2" + decimals); } else { if (intlSuffix && !suffix) { formatted = formatted.replace(intlSuffix, "" + decimalSeparator + decimals + intlSuffix); } else { formatted = "" + formatted + decimalSeparator + decimals; } } } if (suffix && includeDecimalSeparator) { return "" + formatted + includeDecimalSeparator + suffix; } if (intlSuffix && includeDecimalSeparator) { return formatted.replace(intlSuffix, "" + includeDecimalSeparator + intlSuffix); } if (intlSuffix && suffix) { return formatted.replace(intlSuffix, "" + includeDecimalSeparator + suffix); } return [formatted, includeDecimalSeparator, suffix].join(''); }; /** * Before converting to Number, decimal separator has to be . */ var replaceDecimalSeparator = function (value, decimalSeparator, isNegative) { var newValue = value; if (decimalSeparator && decimalSeparator !== '.') { newValue = newValue.replace(RegExp(escapeRegExp(decimalSeparator), 'g'), '.'); if (isNegative && decimalSeparator === '-') { newValue = "-" + newValue.slice(1); } } return newValue; }; var replaceParts = function (parts, _a) { var prefix = _a.prefix, groupSeparator = _a.groupSeparator, decimalSeparator = _a.decimalSeparator, decimalScale = _a.decimalScale, _b = _a.disableGroupSeparators, disableGroupSeparators = _b === void 0 ? false : _b; return parts.reduce(function (prev, _a, i) { var type = _a.type, value = _a.value; if (i === 0 && prefix) { if (type === 'minusSign') { return [value, prefix]; } if (type === 'currency') { return __spreadArray(__spreadArray([], prev), [prefix]); } return [prefix, value]; } if (type === 'currency') { return prefix ? prev : __spreadArray(__spreadArray([], prev), [value]); } if (type === 'group') { return !disableGroupSeparators ? __spreadArray(__spreadArray([], prev), [groupSeparator !== undefined ? groupSeparator : value]) : prev; } if (type === 'decimal') { if (decimalScale !== undefined && decimalScale === 0) { return prev; } return __spreadArray(__spreadArray([], prev), [decimalSeparator !== undefined ? decimalSeparator : value]); } if (type === 'fraction') { return __spreadArray(__spreadArray([], prev), [decimalScale !== undefined ? value.slice(0, decimalScale) : value]); } return __spreadArray(__spreadArray([], prev), [value]); }, ['']).join(''); }; var defaultConfig = { currencySymbol: '', groupSeparator: '', decimalSeparator: '', prefix: '', suffix: '' }; /** * Get locale config from input or default */ var getLocaleConfig = function (intlConfig) { var _a = intlConfig || {}, locale = _a.locale, currency = _a.currency; var numberFormatter = locale ? new Intl.NumberFormat(locale, currency ? { currency: currency, style: 'currency' } : undefined) : new Intl.NumberFormat(); return numberFormatter.formatToParts(1000.1).reduce(function (prev, curr, i) { if (curr.type === 'currency') { if (i === 0) { return __assign$3(__assign$3({}, prev), { currencySymbol: curr.value, prefix: curr.value }); } else { return __assign$3(__assign$3({}, prev), { currencySymbol: curr.value, suffix: curr.value }); } } if (curr.type === 'group') { return __assign$3(__assign$3({}, prev), { groupSeparator: curr.value }); } if (curr.type === 'decimal') { return __assign$3(__assign$3({}, prev), { decimalSeparator: curr.value }); } return prev; }, defaultConfig); }; var isNumber$1 = function (input) { return RegExp(/\d/, 'gi').test(input); }; var padTrimValue = function (value, decimalSeparator, decimalScale) { if (decimalSeparator === void 0) { decimalSeparator = '.'; } if (decimalScale === undefined || value === '' || value === undefined) { return value; } if (!value.match(/\d/g)) { return ''; } var _a = value.split(decimalSeparator), int = _a[0], decimals = _a[1]; if (decimalScale === 0) { return int; } var newValue = decimals || ''; if (newValue.length < decimalScale) { while (newValue.length < decimalScale) { newValue += '0'; } } else { newValue = newValue.slice(0, decimalScale); } return "" + int + decimalSeparator + newValue; }; /** * Based on the last key stroke and the cursor position, update the value * and reposition the cursor to the right place */ var repositionCursor = function (_a) { var selectionStart = _a.selectionStart, value = _a.value, lastKeyStroke = _a.lastKeyStroke, stateValue = _a.stateValue, groupSeparator = _a.groupSeparator; var cursorPosition = selectionStart; var modifiedValue = value; if (stateValue && cursorPosition) { var splitValue = value.split(''); // if cursor is to right of groupSeparator and backspace pressed, delete the character to the left of the separator and reposition the cursor if (lastKeyStroke === 'Backspace' && stateValue[cursorPosition] === groupSeparator) { splitValue.splice(cursorPosition - 1, 1); cursorPosition -= 1; } // if cursor is to left of groupSeparator and delete pressed, delete the character to the right of the separator and reposition the cursor if (lastKeyStroke === 'Delete' && stateValue[cursorPosition] === groupSeparator) { splitValue.splice(cursorPosition, 1); cursorPosition += 1; } modifiedValue = splitValue.join(''); return { modifiedValue: modifiedValue, cursorPosition: cursorPosition }; } return { modifiedValue: modifiedValue, cursorPosition: selectionStart }; }; var CurrencyInput$1 = /*#__PURE__*/React.forwardRef(function (_a, ref) { var _b = _a.allowDecimals, allowDecimals = _b === void 0 ? true : _b, _c = _a.allowNegativeValue, allowNegativeValue = _c === void 0 ? true : _c, id = _a.id, name = _a.name, className = _a.className, customInput = _a.customInput, decimalsLimit = _a.decimalsLimit, defaultValue = _a.defaultValue, _d = _a.disabled, disabled = _d === void 0 ? false : _d, userMaxLength = _a.maxLength, userValue = _a.value, onValueChange = _a.onValueChange, fixedDecimalLength = _a.fixedDecimalLength, placeholder = _a.placeholder, decimalScale = _a.decimalScale, prefix = _a.prefix, suffix = _a.suffix, intlConfig = _a.intlConfig, step = _a.step, min = _a.min, max = _a.max, _e = _a.disableGroupSeparators, disableGroupSeparators = _e === void 0 ? false : _e, _f = _a.disableAbbreviations, disableAbbreviations = _f === void 0 ? false : _f, _decimalSeparator = _a.decimalSeparator, _groupSeparator = _a.groupSeparator, onChange = _a.onChange, onFocus = _a.onFocus, onBlur = _a.onBlur, onKeyDown = _a.onKeyDown, onKeyUp = _a.onKeyUp, transformRawValue = _a.transformRawValue, props = __rest(_a, ["allowDecimals", "allowNegativeValue", "id", "name", "className", "customInput", "decimalsLimit", "defaultValue", "disabled", "maxLength", "value", "onValueChange", "fixedDecimalLength", "placeholder", "decimalScale", "prefix", "suffix", "intlConfig", "step", "min", "max", "disableGroupSeparators", "disableAbbreviations", "decimalSeparator", "groupSeparator", "onChange", "onFocus", "onBlur", "onKeyDown", "onKeyUp", "transformRawValue"]); if (_decimalSeparator && isNumber$1(_decimalSeparator)) { throw new Error('decimalSeparator cannot be a number'); } if (_groupSeparator && isNumber$1(_groupSeparator)) { throw new Error('groupSeparator cannot be a number'); } var localeConfig = React.useMemo(function () { return getLocaleConfig(intlConfig); }, [intlConfig]); var decimalSeparator = _decimalSeparator || localeConfig.decimalSeparator || ''; var groupSeparator = _groupSeparator || localeConfig.groupSeparator || ''; if (decimalSeparator && groupSeparator && decimalSeparator === groupSeparator && disableGroupSeparators === false) { throw new Error('decimalSeparator cannot be the same as groupSeparator'); } var formatValueOptions = { decimalSeparator: decimalSeparator, groupSeparator: groupSeparator, disableGroupSeparators: disableGroupSeparators, intlConfig: intlConfig, prefix: prefix || localeConfig.prefix, suffix: suffix }; var cleanValueOptions = { decimalSeparator: decimalSeparator, groupSeparator: groupSeparator, allowDecimals: allowDecimals, decimalsLimit: decimalsLimit || fixedDecimalLength || 2, allowNegativeValue: allowNegativeValue, disableAbbreviations: disableAbbreviations, prefix: prefix || localeConfig.prefix, transformRawValue: transformRawValue }; var formattedStateValue = defaultValue !== undefined && defaultValue !== null ? formatValue(__assign$3(__assign$3({}, formatValueOptions), { decimalScale: decimalScale, value: String(defaultValue) })) : userValue !== undefined && userValue !== null ? formatValue(__assign$3(__assign$3({}, formatValueOptions), { decimalScale: decimalScale, value: String(userValue) })) : ''; var _g = React.useState(formattedStateValue), stateValue = _g[0], setStateValue = _g[1]; var _h = React.useState(false), dirty = _h[0], setDirty = _h[1]; var _j = React.useState(0), cursor = _j[0], setCursor = _j[1]; var _k = React.useState(0), changeCount = _k[0], setChangeCount = _k[1]; var _l = React.useState(null), lastKeyStroke = _l[0], setLastKeyStroke = _l[1]; var inputRef = React.useRef(null); React.useImperativeHandle(ref, function () { return inputRef.current; }); /** * Process change in value */ var processChange = function (value, selectionStart) { setDirty(true); var _a = repositionCursor({ selectionStart: selectionStart, value: value, lastKeyStroke: lastKeyStroke, stateValue: stateValue, groupSeparator: groupSeparator }), modifiedValue = _a.modifiedValue, cursorPosition = _a.cursorPosition; var stringValue = cleanValue$1(__assign$3({ value: modifiedValue }, cleanValueOptions)); if (userMaxLength && stringValue.replace(/-/g, '').length > userMaxLength) { return; } if (stringValue === '' || stringValue === '-' || stringValue === decimalSeparator) { onValueChange && onValueChange(undefined, name, { float: null, formatted: '', value: '' }); setStateValue(stringValue); return; } var stringValueWithoutSeparator = decimalSeparator ? stringValue.replace(decimalSeparator, '.') : stringValue; var numberValue = parseFloat(stringValueWithoutSeparator); var formattedValue = formatValue(__assign$3({ value: stringValue }, formatValueOptions)); if (cursorPosition !== undefined && cursorPosition !== null) { // Prevent cursor jumping var newCursor = cursorPosition + (formattedValue.length - value.length); newCursor = newCursor <= 0 ? prefix ? prefix.length : 0 : newCursor; setCursor(newCursor); setChangeCount(changeCount + 1); } setStateValue(formattedValue); if (onValueChange) { var values = { float: numberValue, formatted: formattedValue, value: stringValue }; onValueChange(stringValue, name, values); } }; /** * Handle change event */ var handleOnChange = function (event) { var _a = event.target, value = _a.value, selectionStart = _a.selectionStart; processChange(value, selectionStart); onChange && onChange(event); }; /** * Handle focus event */ var handleOnFocus = function (event) { onFocus && onFocus(event); return stateValue ? stateValue.length : 0; }; /** * Handle blur event * * Format value by padding/trimming decimals if required by */ var handleOnBlur = function (event) { var value = event.target.value; var valueOnly = cleanValue$1(__assign$3({ value: value }, cleanValueOptions)); if (valueOnly === '-' || !valueOnly) { setStateValue(''); onBlur && onBlur(event); return; } var fixedDecimals = fixedDecimalValue(valueOnly, decimalSeparator, fixedDecimalLength); var newValue = padTrimValue(fixedDecimals, decimalSeparator, decimalScale !== undefined ? decimalScale : fixedDecimalLength); var numberValue = parseFloat(newValue.replace(decimalSeparator, '.')); var formattedValue = formatValue(__assign$3(__assign$3({}, formatValueOptions), { value: newValue })); if (onValueChange) { onValueChange(newValue, name, { float: numberValue, formatted: formattedValue, value: newValue }); } setStateValue(formattedValue); onBlur && onBlur(event); }; /** * Handle key down event * * Increase or decrease value by step */ var handleOnKeyDown = function (event) { var key = event.key; setLastKeyStroke(key); if (step && (key === 'ArrowUp' || key === 'ArrowDown')) { event.preventDefault(); setCursor(stateValue.length); var currentValue = parseFloat(userValue !== undefined && userValue !== null ? String(userValue).replace(decimalSeparator, '.') : cleanValue$1(__assign$3({ value: stateValue }, cleanValueOptions))) || 0; var newValue = key === 'ArrowUp' ? currentValue + step : currentValue - step; if (min !== undefined && newValue < min) { return; } if (max !== undefined && newValue > max) { return; } var fixedLength = String(step).includes('.') ? Number(String(step).split('.')[1].length) : undefined; processChange(String(fixedLength ? newValue.toFixed(fixedLength) : newValue).replace('.', decimalSeparator)); } onKeyDown && onKeyDown(event); }; /** * Handle key up event * * Move cursor if there is a suffix to prevent user typing past suffix */ var handleOnKeyUp = function (event) { var key = event.key, selectionStart = event.currentTarget.selectionStart; if (key !== 'ArrowUp' && key !== 'ArrowDown' && stateValue !== '-') { var suffix_1 = getSuffix(stateValue, { groupSeparator: groupSeparator, decimalSeparator: decimalSeparator }); if (suffix_1 && selectionStart && selectionStart > stateValue.length - suffix_1.length) { /* istanbul ignore else */ if (inputRef.current) { var newCursor = stateValue.length - suffix_1.length; inputRef.current.setSelectionRange(newCursor, newCursor); } } } onKeyUp && onKeyUp(event); }; React.useEffect(function () { // prevent cursor jumping if editing value if (dirty && stateValue !== '-' && inputRef.current && document.activeElement === inputRef.current) { inputRef.current.setSelectionRange(cursor, cursor); } }, [stateValue, cursor, inputRef, dirty, changeCount]); /** * If user has only entered "-" or decimal separator, * keep the char to allow them to enter next value */ var getRenderValue = function () { if (userValue !== undefined && userValue !== null && stateValue !== '-' && (!decimalSeparator || stateValue !== decimalSeparator)) { return formatValue(__assign$3(__assign$3({}, formatValueOptions), { decimalScale: dirty ? undefined : decimalScale, value: String(userValue) })); } return stateValue; }; var inputProps = __assign$3({ type: 'text', inputMode: 'decimal', id: id, name: name, className: className, onChange: handleOnChange, onBlur: handleOnBlur, onFocus: handleOnFocus, onKeyDown: handleOnKeyDown, onKeyUp: handleOnKeyUp, placeholder: placeholder, disabled: disabled, value: getRenderValue(), ref: inputRef }, props); if (customInput) { var CustomInput = customInput; return /*#__PURE__*/React__namespace.default.createElement(CustomInput, __assign$3({}, inputProps)); } return /*#__PURE__*/React__namespace.default.createElement("input", __assign$3({}, inputProps)); }); CurrencyInput$1.displayName = 'CurrencyInput'; const borderlessCSS = Ae` padding: 0; border-color: transparent; border-width: 0 0 1px 0; color: ${({ theme }) => theme.colors.text}; &:focus { box-shadow: none; border-bottom: 1px solid ${({ theme }) => theme.colors.inputBorder}; } &:hover { cursor: pointer; } `; const sizeVariants$2 = variant({ prop: 'variant', variants: { default: { fontSize: 'default', lineHeight: 'lg' }, sm: { fontSize: 'sm', lineHeight: 'default' }, lg: { fontSize: 'lg', lineHeight: 'xl' }, xl: { fontSize: 'xl', lineHeight: 'xxl' }, xxl: { fontSize: 'h1', fontWeight: 'light', lineHeight: 'x4' } } }); /** * Prop Types of an Input component. * Apart from variant it extends all {@link LayoutProps} and {@link SpaceProps} * * @memberof Input * @alias InputProps * @property {string} [...] Other props from {@link LayoutProps}, {@link SpaceProps} */ /** * Input CSS Styles which can be reused in another input component with styled-components * * ### Usage: * * ``` * import { InputCSS } from '@adminjs/design-system' * * const MyStyledInput = styled.input` * ${InputCSS} * ` * ``` * @memberof Input * @alias InputCSS */ const InputCSS = Ae` box-sizing: border-box; color: ${({ theme }) => theme.colors.grey100}; background: transparent; border: 1px solid ${({ theme }) => theme.colors.inputBorder}; border-radius: ${({ theme }) => theme.space.xs}; font-size: ${({ theme }) => theme.fontSizes.default}; line-height: ${({ theme }) => theme.lineHeights.lg}; font-family: ${({ theme }) => theme.font}; outline: none; &:hover { border-color: ${({ theme }) => curriedDarken$1(0.1, theme.colors.inputBorder)}; } &:focus { border-color: ${({ theme }) => theme.colors.primary100}; } &:disabled { color: ${({ theme }) => rgba(theme.colors.grey80, 0.5)}; border-color: ${({ theme }) => rgba(theme.colors.inputBorder, 0.5)}; background-color: ${({ theme }) => rgba(theme.colors.inputBorder, 0.5)}; } ${({ borderless }) => borderless && borderlessCSS}; ${sizeVariants$2}; `; /** * @classdesc * * <img src="components/input.png" /> * * Wrapped `input` html element. * * ### Usage * * ```javascript * import { Input, InputProps, InputCSS } from '@adminjs/design-system' * ``` * * @component * @subcategory Atoms * @see InputProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-input--default Storybook} * @hideconstructor * @example * return ( * <Box p="xl"> * <Label htmlFor="input1">Some example label</Label> * <Input id="input1" width={1/2} /> * </Box> * ) * @section design-system */ const Input$2 = styled.input` ${InputCSS}; ${space}; ${layout}; `; Input$2.defaultProps = { px: 'default', py: 'sm', className: cssClass('Input') }; Input$2.displayName = 'Input'; const CurrencyInputField = CurrencyInput$1.default ?? CurrencyInput$1; const CurrencyInputComponent = CurrencyInputField.default ?? CurrencyInputField; /** * Prop Types of a CurrencyInput component. * CurrencyInput is based on `react-currency-input-field` @see {@link https://github.com/cchanxzy/react-currency-input-field React Currency Input Field Component} * It extends all {@link SpaceProps}, {@link TypographyProps} and {@link LayoutProps} and {@link https://github.com/cchanxzy/react-currency-input-field#props React Currency Input Field Component Props} * @memberof CurrencyInput * @alias CurrencyInputProps * @property {string} [...] All props default to _currencyinput_ html component like `onChange`, * `value` etc. * @property {string} [...] Props from {@link SpaceProps}, {@link TypographyProps} * and {@link LayoutProps} + they extend {@link InputProps} */ /** * @classdesc * * <img src="components/currency-input.png" /> * * Wrapped `currencyinput` html element. * * ### Usage * * ```ts * import { CurrencyInput, CurrencyInputProps } from '@adminjs/design-system' * ``` * * @component * @subcategory Atoms * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-currencyinput--default Storybook} * @see CurrencyInputProps * @hideconstructor * @example * return ( * <Box p="xl"> * <Label htmlFor="currencyinput1">Some example label</Label> * <CurrencyInput id="currencyinput1" intlConfig={{ locale: 'en-US', currency: 'GBP' }} />; * </Box> * ) * @section design-system */ const CurrencyInput = styled(CurrencyInputComponent)` ${InputCSS} ${space}; ${layout}; ${typography}; width: 100%; `; CurrencyInput.defaultProps = { px: 'default', py: 'sm', className: cssClass('CurrencyInput') }; CurrencyInput.displayName = 'CurrencyInput'; function _extends$i() { _extends$i = Object.assign ? Object.assign.bind() : 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; }; return _extends$i.apply(this, arguments); } /** * Prop Types of an Icon component. * Apart from props defined below it extends all {@link ColorProps} and {@link SpaceProps} * * @memberof Icon * @alias IconProps * @property {string} [...] Other props from {@link ColorProps} and {@link SpaceProps} */ const spinCss = Ae` @keyframes iconSpin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } animation-name: iconSpin; animation-duration: 1000ms; animation-iteration-count: infinite; animation-timing-function: linear; `; const Wrapper$3 = styled.span` vertical-align: middle; display: inline-block; line-height: ${({ theme }) => theme.lineHeights.sm}; font-size: ${({ theme }) => theme.fontSizes.sm}; & > svg { stroke: ${({ theme, color }) => color && color !== 'inherit' ? theme.colors[color] : 'currentColor'}; ${({ spin }) => spin ? spinCss : ''}; } ${({ rounded }) => rounded ? 'border-radius: 9999px;' : ''}; ${space}; ${color}; ${borderRadius$1} `; /** * @classdesc * * <img src="components/icon.png" /> * * Component wrapping [react-feather](https://www.npmjs.com/package/react-feather). * List of all icons can be found here: https://feathericons.com/ * If you have problem verifying the key of given icon - you can always open the * Chrome Terminal (with AdminJS open) and write there: * * ``` * Object.keys(window.FeatherIcons) * ``` * * to see list of all available icon keys. * * ### Usage * * ```javascript * import { Icon, IconProps } from '@adminjs/design-system' * ``` * * @component * @subcategory Atoms * @see IconProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-icon--default Storybook} * @hideconstructor * @example <caption>Icons inside other elements</caption> * return ( * <Box variant="grey"> * <Label mb="default"><Icon icon="Camera" />Icon in Label</Label> * <Button><Icon icon="Camera" />Icon in button</Button> * </Box> * ) * @example <caption>Different sizes</caption> * const sizes = [16, 20, 24, 32] * return ( * <Box variant="grey"> * {sizes.map(size => ( * <Label m="default"><Icon icon="Camera" size={size}/>Icon {size}</Label> * ))} * </Box> * ) * * @example <caption>Big rounded icon with background</caption> * return ( * <Box variant="grey"> * <Icon icon="Plus" color="white" bg="primary100" rounded size={32} p="default"/> * </Box> * ) * @section design-system */ const Icon = props => { const { icon, size = 16, color = 'inherit', ...other } = props; if (!icon) return null; const FeatherIcon = FeatherIcons__namespace[icon] || FeatherIcons__namespace.Slash; if (FeatherIcon) { return /*#__PURE__*/React__namespace.default.createElement(Wrapper$3, _extends$i({ icon: icon, className: cssClass('Icon') }, other, { color: color }), /*#__PURE__*/React__namespace.default.createElement(FeatherIcon, { size: size, color: color })); } return null; }; const Accept = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "106.552", cy: "54.4483", r: "17.4483", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "75.4483", cy: "76.4483", r: "39.4483", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M91.3957 102.098L90.7592 102.495L91.1558 103.131L91.7924 102.735L91.3957 102.098ZM98.8131 95.5823L99.3931 96.0578L99.8686 95.4778L99.2886 95.0023L98.8131 95.5823ZM90.6025 100.825L90.2059 100.188L89.5694 100.585L89.966 101.221L90.6025 100.825ZM97.6531 94.6313L98.1286 94.0513L97.5486 93.5758L97.0731 94.1558L97.6531 94.6313ZM104.196 85.7222L104.91 85.9523V85.9523L104.196 85.7222ZM105.647 76.4492H106.397V75.6992H105.647V76.4492ZM101.435 91.8411L101.052 92.486L101.697 92.8688L102.08 92.2239L101.435 91.8411ZM100.145 91.0755L99.5001 90.6926L99.1173 91.3376L99.7623 91.7204L100.145 91.0755ZM102.768 85.262L102.054 85.0319L102.768 85.262ZM104.147 76.4492V75.6992H103.397V76.4492H104.147ZM91.7924 102.735C94.6786 100.936 97.2465 98.6763 99.3931 96.0578L98.2331 95.1068C96.1899 97.5992 93.7457 99.7502 90.9991 101.461L91.7924 102.735ZM89.966 101.221L90.7592 102.495L92.0323 101.701L91.2391 100.428L89.966 101.221ZM97.0731 94.1558C95.1332 96.5221 92.8128 98.5641 90.2059 100.188L90.9991 101.461C93.7457 99.7502 96.1899 97.5992 98.2331 95.1068L97.0731 94.1558ZM99.2886 95.0023L98.1286 94.0513L97.1776 95.2113L98.3376 96.1623L99.2886 95.0023ZM104.91 85.9523C105.876 82.9561 106.397 79.7621 106.397 76.4492H104.897C104.897 79.604 104.401 82.6429 103.482 85.4921L104.91 85.9523ZM102.08 92.2239C103.244 90.263 104.198 88.162 104.91 85.9523L103.482 85.4921C102.805 87.5939 101.897 89.5925 100.79 91.4583L102.08 92.2239ZM99.7623 91.7204L101.052 92.486L101.818 91.1961L100.528 90.4305L99.7623 91.7204ZM102.054 85.0319C101.412 87.0257 100.551 88.922 99.5001 90.6926L100.79 91.4583C101.897 89.5925 102.805 87.5939 103.482 85.4921L102.054 85.0319ZM103.397 76.4492C103.397 79.4459 102.926 82.3296 102.054 85.0319L103.482 85.4921C104.401 82.6429 104.897 79.604 104.897 76.4492H103.397ZM105.647 75.6992H104.147V77.1992H105.647V75.6992Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M58.3015 32.4619L59.0002 32.1893L58.7277 31.4906L58.029 31.7632L58.3015 32.4619ZM41.5051 43.6534L40.9658 43.1322L40.4446 43.6715L40.9839 44.1927L41.5051 43.6534ZM58.8467 33.8593L59.1192 34.5581L59.8179 34.2855L59.5454 33.5868L58.8467 33.8593ZM42.5837 44.6957L42.0625 45.2351L42.6018 45.7562L43.123 45.2169L42.5837 44.6957ZM36.8518 49.2761L37.2841 48.6632L36.6712 48.2309L36.2389 48.8438L36.8518 49.2761ZM31.3804 59.5114L30.6804 59.2422L30.4111 59.9422L31.1112 60.2114L31.3804 59.5114ZM38.0776 50.1406L38.6905 50.5729L39.1228 49.96L38.5099 49.5277L38.0776 50.1406ZM32.7804 60.0498L32.5112 60.7499L33.2112 61.0191L33.4804 60.3191L32.7804 60.0498ZM58.029 31.7632C51.5321 34.2976 45.7255 38.2069 40.9658 43.1322L42.0444 44.1746C46.6565 39.4021 52.2819 35.6152 58.5741 33.1606L58.029 31.7632ZM59.5454 33.5868L59.0002 32.1893L57.6028 32.7345L58.1479 34.1319L59.5454 33.5868ZM43.123 45.2169C47.5874 40.5973 53.0317 36.9328 59.1192 34.5581L58.5741 33.1606C52.2819 35.6152 46.6565 39.4021 42.0444 44.1746L43.123 45.2169ZM40.9839 44.1927L42.0625 45.2351L43.1049 44.1564L42.0263 43.114L40.9839 44.1927ZM36.2389 48.8438C33.9826 52.043 32.1076 55.5311 30.6804 59.2422L32.0804 59.7806C33.4626 56.1865 35.2788 52.8077 37.4647 49.7084L36.2389 48.8438ZM38.5099 49.5277L37.2841 48.6632L36.4196 49.889L37.6454 50.7535L38.5099 49.5277ZM33.4804 60.3191C34.8177 56.8419 36.575 53.5725 38.6905 50.5729L37.4647 49.7084C35.2788 52.8077 33.4626 56.1865 32.0804 59.7806L33.4804 60.3191ZM31.1112 60.2114L32.5112 60.7499L33.0496 59.3498L31.6496 58.8114L31.1112 60.2114Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M94.4566 55.3952C93.9524 52.5885 97.1355 50.5591 99.2233 52.5014C101.189 54.33 103.108 56.332 104.211 58.0528C107.613 63.3618 109.586 69.675 109.586 76.449C109.586 95.3028 94.3022 110.587 75.4484 110.587C72.1858 110.587 67.9237 109.35 64.2042 107.98C61.4858 106.979 61.9438 103.2 64.7455 102.464C66.6153 101.972 68.4144 101.416 69.7243 100.833C84.7188 94.1575 95.1725 79.1275 95.1725 61.6559C95.1725 59.9413 94.8626 57.6549 94.4566 55.3952Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M56.3673 74.3156C58.1892 72.4984 61.1148 72.4529 62.9919 74.1793L63.1342 74.3156L70.7513 81.9134L89.2802 63.433C91.1021 61.6158 94.0277 61.5704 95.9048 63.2967L96.0471 63.433C97.869 65.2502 97.9146 68.1682 96.1838 70.0405L96.0471 70.1824L74.1353 92.0376C72.3134 93.8548 69.3878 93.9002 67.5107 92.1739L67.3684 92.0376L56.3673 81.065C54.4987 79.2012 54.4987 76.1794 56.3673 74.3156Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" })); const AdminJSLogo = ({ width = 113, height = 113 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 113 113", xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink" }, /*#__PURE__*/React__namespace.default.createElement("defs", null, /*#__PURE__*/React__namespace.default.createElement("filter", { x: "-18.8%", y: "-13.4%", width: "137.6%", height: "137.6%", filterUnits: "objectBoundingBox", id: "a" }, /*#__PURE__*/React__namespace.default.createElement("feOffset", { dy: "5", in: "SourceAlpha", result: "shadowOffsetOuter1" }), /*#__PURE__*/React__namespace.default.createElement("feGaussianBlur", { stdDeviation: "5", in: "shadowOffsetOuter1", result: "shadowBlurOuter1" }), /*#__PURE__*/React__namespace.default.createElement("feColorMatrix", { values: "0 0 0 0 0.301960784 0 0 0 0 0.439215686 0 0 0 0 0.921568627 0 0 0 0.402289117 0", in: "shadowBlurOuter1" })), /*#__PURE__*/React__namespace.default.createElement("rect", { id: "b", x: "0", y: "0", width: "93", height: "93", rx: "20" })), /*#__PURE__*/React__namespace.default.createElement("g", { fill: "none", fillRule: "evenodd" }, /*#__PURE__*/React__namespace.default.createElement("g", { transform: "translate(10 5)" }, /*#__PURE__*/React__namespace.default.createElement("use", { fill: "#000", filter: "url(#a)", xlinkHref: "#b" }), /*#__PURE__*/React__namespace.default.createElement("use", { fill: "#4D70EB", xlinkHref: "#b" })), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M56.5 28 83 74H68.932l-3.282-5.698a5.632 5.632 0 0 0-4.63-2.815l-.25-.006h-8.54a5.632 5.632 0 0 0-4.88 2.82L44.066 74H30l26.5-46zm0 20.444c-3.114 0-5.638 2.543-5.638 5.68 0 3.136 2.524 5.678 5.638 5.678s5.638-2.542 5.638-5.679c0-3.136-2.524-5.679-5.638-5.679z", fill: "#FFF" }))); const Astronaut = ({ width = 152, height = 169 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 169", version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Symbols", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Group", transform: "translate(2.000000, 2.000000)", stroke: "#3B3552", strokeWidth: "3" }, /*#__PURE__*/React__namespace.default.createElement("path", { d: "M74,123.060611 L74,158.723567 C74,162.037275 71.3137085,164.723567 68,164.723567 C66.9452118,164.723567 65.9090627,164.445504 64.995996,163.917406 L6.67495026,130.185774 L6.67495026,130.185774 C2.54398439,127.796512 1.42108547e-14,123.386278 1.42108547e-14,118.614125 L1.42108547e-14,48.436129 C1.42108547e-14,43.6639756 2.54398439,39.2537412 6.67495026,36.8644799 L67.3072083,1.79609278 C71.4477337,-0.598697595 76.5522663,-0.598697595 80.6927917,1.79609278 L141.32505,36.8644799 C145.456016,39.2537412 148,43.6639756 148,48.436129 L148,118.614125 C148,123.386278 145.456016,127.796512 141.32505,130.185774 L92.2812226,158.551663", id: "Path-Copy-2", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M104.072464,59.4347826 L107.42029,59.4347826 C110.501879,59.4347826 113,61.9329039 113,65.0144928 L113,72.826087 C113,75.9076758 110.501879,78.4057971 107.42029,78.4057971 L104.072464,78.4057971", id: "Path", fill: "#3040D6", fillOpacity: "0.2" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M36,59.4347826 L39.3478261,59.4347826 C42.4294149,59.4347826 44.9275362,61.9329039 44.9275362,65.0144928 L44.9275362,72.826087 C44.9275362,75.9076758 42.4294149,78.4057971 39.3478261,78.4057971 L36,78.4057971", id: "Path-Copy-8", fill: "#3040D6", fillOpacity: "0.2", transform: "translate(40.463768, 68.920290) scale(-1, 1) translate(-40.463768, -68.920290) " }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M73.942029,36 L75.057971,36 C91.6985507,36 105.188406,49.4898551 105.188406,66.1304348 L105.188406,74.2608696 C105.188406,86.4111341 95.3386703,96.2608696 83.1884058,96.2608696 L65.8115942,96.2608696 C53.6613297,96.2608696 43.8115942,86.4111341 43.8115942,74.2608696 L43.8115942,66.1304348 C43.8115942,49.4898551 57.3014493,36 73.942029,36 Z", id: "Rectangle" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M61.6231884,54.9710145 L87.3768116,54.9710145 C92.8996591,54.9710145 97.3768116,59.448167 97.3768116,64.9710145 L97.3768116,71.1521739 C97.3768116,80.0887815 90.1322598,87.3333333 81.1956522,87.3333333 L67.8043478,87.3333333 C58.8677402,87.3333333 51.6231884,80.0887815 51.6231884,71.1521739 L51.6231884,64.9710145 C51.6231884,59.448167 56.1003409,54.9710145 61.6231884,54.9710145 Z", id: "Rectangle", fill: "#3040D6", fillOpacity: "0.2" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M98.1625549,96.4072839 C104.039008,97.3212203 108.536232,102.403535 108.536232,108.536232 L108.536232,118.134734 C108.536232,119.211784 107.767028,120.135188 106.707715,120.329844 C106.055061,120.449774 105.513749,120.546295 105.083779,120.619408 C95.9922338,122.165353 85.5737028,123.043478 74.5,123.043478", id: "Path", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M63.9958478,122.775649 C56.839568,122.406752 50.0823079,121.667204 43.9319499,120.622082 C43.4981804,120.548372 42.951644,120.450947 42.2923407,120.329807 C41.2329855,120.135184 40.4637681,119.211754 40.4637681,118.134669 L40.4637681,108.536232 C40.4637681,102.446055 44.8988464,97.391746 50.715414,96.426894", id: "Path", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M100.724638,87.6057924 C100.724638,97.4668767 92.7306494,105.188406 82.8695652,105.188406 L66.1304348,105.188406 C56.2693506,105.188406 48.2753623,97.4668767 48.2753623,87.6057924", id: "Path", strokeLinecap: "round" })))); const Bag = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M37.75 56.9629C37.75 56.5487 38.0858 56.2129 38.5 56.2129H113.5C113.914 56.2129 114.25 56.5487 114.25 56.9629V117.763C114.25 119.558 112.795 121.013 111 121.013H41C39.2051 121.013 37.75 119.558 37.75 117.763V56.9629Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M56.0651 109.102C55.7245 108.868 55.2755 108.868 54.9349 109.102L53.4009 110.152C52.8355 110.54 52.0568 110.256 51.8726 109.596L51.3729 107.805C51.2619 107.408 50.918 107.119 50.5071 107.079L48.6567 106.898C47.9746 106.831 47.5603 106.113 47.8435 105.489L48.6118 103.796C48.7824 103.42 48.7045 102.978 48.4156 102.683L47.1145 101.355C46.6349 100.865 46.7788 100.049 47.3969 99.7532L49.0738 98.9501C49.4462 98.7717 49.6706 98.3829 49.6389 97.9713L49.496 96.1175C49.4433 95.4342 50.078 94.9015 50.7418 95.0721L52.5427 95.5348C52.9425 95.6375 53.3644 95.4839 53.6047 95.1482L54.6868 93.6362C55.0857 93.0789 55.9143 93.0789 56.3132 93.6362L57.3953 95.1482C57.6356 95.4839 58.0575 95.6375 58.4573 95.5348L60.2581 95.0721C60.9219 94.9015 61.5567 95.4342 61.504 96.1175L61.3611 97.9713C61.3293 98.3829 61.5538 98.7717 61.9262 98.9501L63.6031 99.7532C64.2212 100.049 64.3651 100.865 63.8855 101.355L62.5844 102.683C62.2955 102.978 62.2175 103.42 62.3881 103.796L63.1565 105.489C63.4397 106.113 63.0254 106.831 62.3433 106.898L60.4929 107.079C60.082 107.119 59.738 107.408 59.6271 107.805L59.1274 109.596C58.9431 110.256 58.1645 110.54 57.5991 110.152L56.0651 109.102Z", fill: "#3040D6", fillOpacity: "0.2" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M93.7812 61.3623C93.7812 60.2577 94.6767 59.3623 95.7812 59.3623H109.6C110.429 59.3623 111.1 60.0339 111.1 60.8623V116.204C111.1 117.308 110.205 118.204 109.1 118.204H95.7813C94.6767 118.204 93.7812 117.308 93.7812 116.204V61.3623Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M37.818 56.175L39.6376 35.25H112.362L114.182 56.175H37.818Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M40.2845 35.25H111.715L105.584 45.3225L105.314 45.7659L105.634 46.1747L113.461 56.175H38.5393L46.3656 46.1747L46.6855 45.7659L46.4156 45.3225L40.2845 35.25Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "64.3", cy: "67.1623", r: "2.925", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "87.6999", cy: "67.1623", r: "2.925", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M87.6998 70.0879V80.8129C87.6998 87.2746 82.4615 92.5129 75.9998 92.5129V92.5129C69.5381 92.5129 64.2998 87.2746 64.2998 80.8129V70.0879", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M45.6863 39.4191C45.2942 38.7525 45.7748 37.9121 46.5482 37.9121H105.451C106.225 37.9121 106.705 38.7525 106.313 39.4191L102.463 45.9649C102.372 46.1186 102.325 46.2936 102.325 46.4719V53.028C102.325 53.5803 101.877 54.028 101.325 54.028H50.6748C50.1225 54.028 49.6748 53.5803 49.6748 53.028V46.4719C49.6748 46.2936 49.6271 46.1186 49.5367 45.9649L45.6863 39.4191Z", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M76.0896 25V40.3495", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M55.5 129.5H72.5", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M77.1944 129.5H83.8056", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M96.1796 31.4453L88.5049 44.7384", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M56 31.4453L63.6748 44.7384", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" })); const Beware = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "93.3162", cy: "59.0974", r: "16.2556", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M72.5449 33.9231C74.0884 31.277 77.9116 31.277 79.4551 33.9231L119.491 102.556C121.047 105.223 119.123 108.571 116.036 108.571H35.9641C32.877 108.571 30.9535 105.223 32.509 102.556L72.5449 33.9231Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M42.2156 73.4053L41.8377 74.0531L42.4855 74.431L42.8634 73.7832L42.2156 73.4053ZM51.6085 57.3032L52.2563 57.6811L52.6342 57.0332L51.9864 56.6553L51.6085 57.3032ZM40.9199 72.6494L40.2721 72.2715L39.8942 72.9194L40.542 73.2973L40.9199 72.6494ZM50.3128 56.5474L50.6907 55.8995L50.0429 55.5216L49.665 56.1695L50.3128 56.5474ZM55.6883 50.3091L55.3104 50.957L55.9582 51.3349L56.3362 50.6871L55.6883 50.3091ZM60.1696 42.6269L60.8175 43.0048L61.1954 42.357L60.5475 41.9791L60.1696 42.6269ZM54.3926 49.5533L53.7448 49.1754L53.3669 49.8233L54.0147 50.2012L54.3926 49.5533ZM58.874 41.8711L59.2519 41.2233L58.604 40.8454L58.2261 41.4932L58.874 41.8711ZM42.8634 73.7832L52.2563 57.6811L50.9606 56.9253L41.5678 73.0274L42.8634 73.7832ZM40.542 73.2973L41.8377 74.0531L42.5935 72.7574L41.2978 72.0016L40.542 73.2973ZM49.665 56.1695L40.2721 72.2715L41.5678 73.0274L50.9606 56.9253L49.665 56.1695ZM51.9864 56.6553L50.6907 55.8995L49.9349 57.1952L51.2306 57.951L51.9864 56.6553ZM56.3362 50.6871L60.8175 43.0048L59.5218 42.249L55.0405 49.9312L56.3362 50.6871ZM54.0147 50.2012L55.3104 50.957L56.0662 49.6613L54.7706 48.9055L54.0147 50.2012ZM58.2261 41.4932L53.7448 49.1754L55.0405 49.9312L59.5218 42.249L58.2261 41.4932ZM60.5475 41.9791L59.2519 41.2233L58.4961 42.5189L59.7917 43.2747L60.5475 41.9791Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M94.9824 80.8867L94.6045 80.2388L93.9567 80.6167L94.3346 81.2646L94.9824 80.8867ZM97.6411 85.4445L96.9933 85.8224L97.3712 86.4702L98.019 86.0923L97.6411 85.4445ZM96.2781 80.1309L96.9259 79.753L96.548 79.1051L95.9002 79.483L96.2781 80.1309ZM98.9368 84.6886L99.3147 85.3365L99.9625 84.9586L99.5846 84.3107L98.9368 84.6886ZM99.4615 88.5651L99.0836 87.9172L98.4358 88.2951L98.8137 88.943L99.4615 88.5651ZM101.602 92.2339L100.954 92.6118H100.954L101.602 92.2339ZM100.757 87.8093L101.405 87.4314L101.027 86.7835L100.379 87.1614L100.757 87.8093ZM102.897 91.4781L102.249 91.856L102.897 91.4781ZM105.894 96.6145L105.246 96.9924L105.894 96.6145ZM104.904 100.376L104.526 99.7277L104.526 99.7277L104.904 100.376ZM99.4257 100.75H98.6757V101.5H99.4257V100.75ZM99.4257 99.2502V98.5002H98.6757V99.2502H99.4257ZM104.148 99.0799L104.526 99.7277H104.526L104.148 99.0799ZM104.598 97.3703L105.246 96.9924L104.598 97.3703ZM94.3346 81.2646L96.9933 85.8224L98.289 85.0665L95.6303 80.5088L94.3346 81.2646ZM95.9002 79.483L94.6045 80.2388L95.3603 81.5345L96.656 80.7787L95.9002 79.483ZM99.5846 84.3107L96.9259 79.753L95.6303 80.5088L98.289 85.0665L99.5846 84.3107ZM98.019 86.0923L99.3147 85.3365L98.5589 84.0408L97.2632 84.7966L98.019 86.0923ZM98.8137 88.943L100.954 92.6118L102.249 91.856L100.109 88.1872L98.8137 88.943ZM100.379 87.1614L99.0836 87.9172L99.8394 89.2129L101.135 88.4571L100.379 87.1614ZM103.545 91.1002L101.405 87.4314L100.109 88.1872L102.249 91.856L103.545 91.1002ZM106.541 96.2366L103.545 91.1002L102.249 91.856L105.246 96.9924L106.541 96.2366ZM105.282 101.023C106.951 100.049 107.515 97.9063 106.541 96.2366L105.246 96.9924C105.802 97.9465 105.48 99.1712 104.526 99.7277L105.282 101.023ZM103.518 101.5C104.138 101.5 104.746 101.336 105.282 101.023L104.526 99.7277C104.22 99.9061 103.872 100 103.518 100V101.5ZM103.508 101.5H103.518V100H103.508V101.5ZM103.497 101.5H103.508V100H103.497V101.5ZM103.486 101.5H103.497V100H103.486V101.5ZM103.476 101.5H103.486V100H103.476V101.5ZM103.465 101.5H103.476V100H103.465V101.5ZM103.454 101.5H103.465V100H103.454V101.5ZM103.444 101.5H103.454V100H103.444V101.5ZM103.433 101.5H103.444V100H103.433V101.5ZM103.423 101.5H103.433V100H103.423V101.5ZM103.412 101.5H103.423V100H103.412V101.5ZM103.402 101.5H103.412V100H103.402V101.5ZM103.391 101.5H103.402V100H103.391V101.5ZM103.38 101.5H103.391V100H103.38V101.5ZM103.37 101.5H103.38V100H103.37V101.5ZM103.359 101.5H103.37V100H103.359V101.5ZM103.349 101.5H103.359V100H103.349V101.5ZM103.338 101.5H103.349V100H103.338V101.5ZM103.328 101.5H103.338V100H103.328V101.5ZM103.318 101.5H103.328V100H103.318V101.5ZM103.307 101.5H103.318V100H103.307V101.5ZM103.297 101.5H103.307V100H103.297V101.5ZM103.286 101.5H103.297V100H103.286V101.5ZM103.276 101.5H103.286V100H103.276V101.5ZM103.265 101.5H103.276V100H103.265V101.5ZM103.255 101.5H103.265V100H103.255V101.5ZM103.245 101.5H103.255V100H103.245V101.5ZM103.234 101.5H103.245V100H103.234V101.5ZM103.224 101.5H103.234V100H103.224V101.5ZM103.213 101.5H103.224V100H103.213V101.5ZM103.203 101.5H103.213V100H103.203V101.5ZM103.193 101.5H103.203V100H103.193V101.5ZM103.182 101.5H103.193V100H103.182V101.5ZM103.172 101.5H103.182V100H103.172V101.5ZM103.162 101.5H103.172V100H103.162V101.5ZM103.152 101.5H103.162V100H103.152V101.5ZM103.141 101.5H103.152V100H103.141V101.5ZM103.131 101.5H103.141V100H103.131V101.5ZM103.121 101.5H103.131V100H103.121V101.5ZM103.11 101.5H103.121V100H103.11V101.5ZM103.1 101.5H103.11V100H103.1V101.5ZM103.09 101.5H103.1V100H103.09V101.5ZM103.08 101.5H103.09V100H103.08V101.5ZM103.07 101.5H103.08V100H103.07V101.5ZM103.059 101.5H103.07V100H103.059V101.5ZM103.049 101.5H103.059V100H103.049V101.5ZM103.039 101.5H103.049V100H103.039V101.5ZM103.029 101.5H103.039V100H103.029V101.5ZM103.019 101.5H103.029V100H103.019V101.5ZM103.008 101.5H103.019V100H103.008V101.5ZM102.998 101.5H103.008V100H102.998V101.5ZM102.988 101.5H102.998V100H102.988V101.5ZM102.978 101.5H102.988V100H102.978V101.5ZM102.968 101.5H102.978V100H102.968V101.5ZM102.958 101.5H102.968V100H102.958V101.5ZM102.948 101.5H102.958V100H102.948V101.5ZM102.938 101.5H102.948V100H102.938V101.5ZM102.928 101.5H102.938V100H102.928V101.5ZM102.918 101.5H102.928V100H102.918V101.5ZM102.907 101.5H102.918V100H102.907V101.5ZM102.897 101.5H102.907V100H102.897V101.5ZM102.887 101.5H102.897V100H102.887V101.5ZM102.877 101.5H102.887V100H102.877V101.5ZM102.867 101.5H102.877V100H102.867V101.5ZM102.857 101.5H102.867V100H102.857V101.5ZM102.847 101.5H102.857V100H102.847V101.5ZM102.837 101.5H102.847V100H102.837V101.5ZM102.827 101.5H102.837V100H102.827V101.5ZM102.818 101.5H102.827V100H102.818V101.5ZM102.808 101.5H102.818V100H102.808V101.5ZM102.798 101.5H102.808V100H102.798V101.5ZM102.788 101.5H102.798V100H102.788V101.5ZM102.778 101.5H102.788V100H102.778V101.5ZM102.768 101.5H102.778V100H102.768V101.5ZM102.758 101.5H102.768V100H102.758V101.5ZM102.748 101.5H102.758V100H102.748V101.5ZM102.738 101.5H102.748V100H102.738V101.5ZM102.728 101.5H102.738V100H102.728V101.5ZM102.719 101.5H102.728V100H102.719V101.5ZM102.709 101.5H102.719V100H102.709V101.5ZM102.699 101.5H102.709V100H102.699V101.5ZM102.689 101.5H102.699V100H102.689V101.5ZM102.679 101.5H102.689V100H102.679V101.5ZM102.669 101.5H102.679V100H102.669V101.5ZM102.66 101.5H102.669V100H102.66V101.5ZM102.65 101.5H102.66V100H102.65V101.5ZM102.64 101.5H102.65V100H102.64V101.5ZM102.63 101.5H102.64V100H102.63V101.5ZM102.621 101.5H102.63V100H102.621V101.5ZM102.611 101.5H102.621V100H102.611V101.5ZM102.601 101.5H102.611V100H102.601V101.5ZM102.591 101.5H102.601V100H102.591V101.5ZM102.582 101.5H102.591V100H102.582V101.5ZM102.572 101.5H102.582V100H102.572V101.5ZM102.562 101.5H102.572V100H102.562V101.5ZM102.553 101.5H102.562V100H102.553V101.5ZM102.543 101.5H102.553V100H102.543V101.5ZM102.533 101.5H102.543V100H102.533V101.5ZM102.524 101.5H102.533V100H102.524V101.5ZM102.514 101.5H102.524V100H102.514V101.5ZM102.504 101.5H102.514V100H102.504V101.5ZM102.495 101.5H102.504V100H102.495V101.5ZM102.485 101.5H102.495V100H102.485V101.5ZM102.476 101.5H102.485V100H102.476V101.5ZM102.466 101.5H102.476V100H102.466V101.5ZM102.457 101.5H102.466V100H102.457V101.5ZM102.447 101.5H102.457V100H102.447V101.5ZM102.437 101.5H102.447V100H102.437V101.5ZM102.428 101.5H102.437V100H102.428V101.5ZM102.418 101.5H102.428V100H102.418V101.5ZM102.409 101.5H102.418V100H102.409V101.5ZM102.399 101.5H102.409V100H102.399V101.5ZM102.39 101.5H102.399V100H102.39V101.5ZM102.38 101.5H102.39V100H102.38V101.5ZM102.371 101.5H102.38V100H102.371V101.5ZM102.361 101.5H102.371V100H102.361V101.5ZM102.352 101.5H102.361V100H102.352V101.5ZM102.342 101.5H102.352V100H102.342V101.5ZM102.333 101.5H102.342V100H102.333V101.5ZM102.324 101.5H102.333V100H102.324V101.5ZM102.314 101.5H102.324V100H102.314V101.5ZM102.305 101.5H102.314V100H102.305V101.5ZM102.295 101.5H102.305V100H102.295V101.5ZM102.286 101.5H102.295V100H102.286V101.5ZM102.277 101.5H102.286V100H102.277V101.5ZM102.267 101.5H102.277V100H102.267V101.5ZM102.258 101.5H102.267V100H102.258V101.5ZM102.249 101.5H102.258V100H102.249V101.5ZM102.239 101.5H102.249V100H102.239V101.5ZM102.23 101.5H102.239V100H102.23V101.5ZM102.221 101.5H102.23V100H102.221V101.5ZM102.211 101.5H102.221V100H102.211V101.5ZM102.202 101.5H102.211V100H102.202V101.5ZM102.193 101.5H102.202V100H102.193V101.5ZM102.184 101.5H102.193V100H102.184V101.5ZM102.174 101.5H102.184V100H102.174V101.5ZM102.165 101.5H102.174V100H102.165V101.5ZM102.156 101.5H102.165V100H102.156V101.5ZM102.147 101.5H102.156V100H102.147V101.5ZM102.137 101.5H102.147V100H102.137V101.5ZM102.128 101.5H102.137V100H102.128V101.5ZM102.119 101.5H102.128V100H102.119V101.5ZM102.11 101.5H102.119V100H102.11V101.5ZM102.101 101.5H102.11V100H102.101V101.5ZM102.091 101.5H102.101V100H102.091V101.5ZM102.082 101.5H102.091V100H102.082V101.5ZM102.073 101.5H102.082V100H102.073V101.5ZM102.064 101.5H102.073V100H102.064V101.5ZM102.055 101.5H102.064V100H102.055V101.5ZM102.046 101.5H102.055V100H102.046V101.5ZM102.037 101.5H102.046V100H102.037V101.5ZM102.028 101.5H102.037V100H102.028V101.5ZM102.018 101.5H102.028V100H102.018V101.5ZM102.009 101.5H102.018V100H102.009V101.5ZM102 101.5H102.009V100H102V101.5ZM101.991 101.5H102V100H101.991V101.5ZM101.982 101.5H101.991V100H101.982V101.5ZM101.973 101.5H101.982V100H101.973V101.5ZM101.964 101.5H101.973V100H101.964V101.5ZM101.955 101.5H101.964V100H101.955V101.5ZM101.946 101.5H101.955V100H101.946V101.5ZM101.937 101.5H101.946V100H101.937V101.5ZM101.928 101.5H101.937V100H101.928V101.5ZM101.919 101.5H101.928V100H101.919V101.5ZM101.91 101.5H101.919V100H101.91V101.5ZM101.901 101.5H101.91V100H101.901V101.5ZM101.892 101.5H101.901V100H101.892V101.5ZM101.884 101.5H101.892V100H101.884V101.5ZM101.875 101.5H101.884V100H101.875V101.5ZM101.866 101.5H101.875V100H101.866V101.5ZM101.857 101.5H101.866V100H101.857V101.5ZM101.848 101.5H101.857V100H101.848V101.5ZM101.839 101.5H101.848V100H101.839V101.5ZM101.83 101.5H101.839V100H101.83V101.5ZM101.821 101.5H101.83V100H101.821V101.5ZM101.812 101.5H101.821V100H101.812V101.5ZM101.804 101.5H101.812V100H101.804V101.5ZM101.795 101.5H101.804V100H101.795V101.5ZM101.786 101.5H101.795V100H101.786V101.5ZM101.777 101.5H101.786V100H101.777V101.5ZM101.768 101.5H101.777V100H101.768V101.5ZM101.76 101.5H101.768V100H101.76V101.5ZM101.751 101.5H101.76V100H101.751V101.5ZM101.742 101.5H101.751V100H101.742V101.5ZM101.733 101.5H101.742V100H101.733V101.5ZM101.725 101.5H101.733V100H101.725V101.5ZM101.716 101.5H101.725V100H101.716V101.5ZM101.707 101.5H101.716V100H101.707V101.5ZM101.698 101.5H101.707V100H101.698V101.5ZM101.69 101.5H101.698V100H101.69V101.5ZM101.681 101.5H101.69V100H101.681V101.5ZM101.672 101.5H101.681V100H101.672V101.5ZM101.664 101.5H101.672V100H101.664V101.5ZM101.655 101.5H101.664V100H101.655V101.5ZM101.646 101.5H101.655V100H101.646V101.5ZM101.638 101.5H101.646V100H101.638V101.5ZM101.629 101.5H101.638V100H101.629V101.5ZM101.621 101.5H101.629V100H101.621V101.5ZM101.612 101.5H101.621V100H101.612V101.5ZM101.603 101.5H101.612V100H101.603V101.5ZM101.595 101.5H101.603V100H101.595V101.5ZM101.586 101.5H101.595V100H101.586V101.5ZM101.578 101.5H101.586V100H101.578V101.5ZM101.569 101.5H101.578V100H101.569V101.5ZM101.561 101.5H101.569V100H101.561V101.5ZM101.552 101.5H101.561V100H101.552V101.5ZM101.544 101.5H101.552V100H101.544V101.5ZM101.535 101.5H101.544V100H101.535V101.5ZM101.527 101.5H101.535V100H101.527V101.5ZM101.518 101.5H101.527V100H101.518V101.5ZM101.51 101.5H101.518V100H101.51V101.5ZM101.501 101.5H101.51V100H101.501V101.5ZM101.493 101.5H101.501V100H101.493V101.5ZM101.484 101.5H101.493V100H101.484V101.5ZM101.476 101.5H101.484V100H101.476V101.5ZM101.467 101.5H101.476V100H101.467V101.5ZM101.459 101.5H101.467V100H101.459V101.5ZM101.451 101.5H101.459V100H101.451V101.5ZM101.442 101.5H101.451V100H101.442V101.5ZM101.434 101.5H101.442V100H101.434V101.5ZM101.425 101.5H101.434V100H101.425V101.5ZM101.417 101.5H101.425V100H101.417V101.5ZM101.409 101.5H101.417V100H101.409V101.5ZM101.4 101.5H101.409V100H101.4V101.5ZM101.392 101.5H101.4V100H101.392V101.5ZM101.384 101.5H101.392V100H101.384V101.5ZM101.375 101.5H101.384V100H101.375V101.5ZM101.367 101.5H101.375V100H101.367V101.5ZM101.359 101.5H101.367V100H101.359V101.5ZM101.351 101.5H101.359V100H101.351V101.5ZM101.342 101.5H101.351V100H101.342V101.5ZM101.334 101.5H101.342V100H101.334V101.5ZM101.326 101.5H101.334V100H101.326V101.5ZM101.318 101.5H101.326V100H101.318V101.5ZM101.309 101.5H101.318V100H101.309V101.5ZM101.301 101.5H101.309V100H101.301V101.5ZM101.293 101.5H101.301V100H101.293V101.5ZM101.285 101.5H101.293V100H101.285V101.5ZM101.276 101.5H101.285V100H101.276V101.5ZM101.268 101.5H101.276V100H101.268V101.5ZM101.26 101.5H101.268V100H101.26V101.5ZM101.252 101.5H101.26V100H101.252V101.5ZM101.244 101.5H101.252V100H101.244V101.5ZM101.236 101.5H101.244V100H101.236V101.5ZM101.228 101.5H101.236V100H101.228V101.5ZM101.219 101.5H101.228V100H101.219V101.5ZM101.211 101.5H101.219V100H101.211V101.5ZM101.203 101.5H101.211V100H101.203V101.5ZM101.195 101.5H101.203V100H101.195V101.5ZM101.187 101.5H101.195V100H101.187V101.5ZM101.179 101.5H101.187V100H101.179V101.5ZM101.171 101.5H101.179V100H101.171V101.5ZM101.163 101.5H101.171V100H101.163V101.5ZM101.155 101.5H101.163V100H101.155V101.5ZM101.147 101.5H101.155V100H101.147V101.5ZM101.139 101.5H101.147V100H101.139V101.5ZM101.131 101.5H101.139V100H101.131V101.5ZM101.123 101.5H101.131V100H101.123V101.5ZM101.115 101.5H101.123V100H101.115V101.5ZM101.107 101.5H101.115V100H101.107V101.5ZM101.099 101.5H101.107V100H101.099V101.5ZM101.091 101.5H101.099V100H101.091V101.5ZM101.083 101.5H101.091V100H101.083V101.5ZM101.075 101.5H101.083V100H101.075V101.5ZM101.067 101.5H101.075V100H101.067V101.5ZM101.059 101.5H101.067V100H101.059V101.5ZM101.052 101.5H101.059V100H101.052V101.5ZM101.044 101.5H101.052V100H101.044V101.5ZM101.036 101.5H101.044V100H101.036V101.5ZM101.028 101.5H101.036V100H101.028V101.5ZM101.02 101.5H101.028V100H101.02V101.5ZM101.012 101.5H101.02V100H101.012V101.5ZM101.004 101.5H101.012V100H101.004V101.5ZM100.997 101.5H101.004V100H100.997V101.5ZM100.989 101.5H100.997V100H100.989V101.5ZM100.981 101.5H100.989V100H100.981V101.5ZM100.973 101.5H100.981V100H100.973V101.5ZM100.965 101.5H100.973V100H100.965V101.5ZM100.958 101.5H100.965V100H100.958V101.5ZM100.95 101.5H100.958V100H100.95V101.5ZM100.942 101.5H100.95V100H100.942V101.5ZM100.934 101.5H100.942V100H100.934V101.5ZM100.927 101.5H100.934V100H100.927V101.5ZM100.919 101.5H100.927V100H100.919V101.5ZM100.911 101.5H100.919V100H100.911V101.5ZM100.903 101.5H100.911V100H100.903V101.5ZM100.896 101.5H100.903V100H100.896V101.5ZM100.888 101.5H100.896V100H100.888V101.5ZM100.88 101.5H100.888V100H100.88V101.5ZM100.873 101.5H100.88V100H100.873V101.5ZM100.865 101.5H100.873V100H100.865V101.5ZM100.858 101.5H100.865V100H100.858V101.5ZM100.85 101.5H100.858V100H100.85V101.5ZM100.842 101.5H100.85V100H100.842V101.5ZM100.835 101.5H100.842V100H100.835V101.5ZM100.827 101.5H100.835V100H100.827V101.5ZM100.82 101.5H100.827V100H100.82V101.5ZM100.812 101.5H100.82V100H100.812V101.5ZM100.804 101.5H100.812V100H100.804V101.5ZM100.797 101.5H100.804V100H100.797V101.5ZM100.789 101.5H100.797V100H100.789V101.5ZM100.782 101.5H100.789V100H100.782V101.5ZM100.774 101.5H100.782V100H100.774V101.5ZM100.767 101.5H100.774V100H100.767V101.5ZM100.759 101.5H100.767V100H100.759V101.5ZM100.752 101.5H100.759V100H100.752V101.5ZM100.744 101.5H100.752V100H100.744V101.5ZM100.737 101.5H100.744V100H100.737V101.5ZM100.729 101.5H100.737V100H100.729V101.5ZM100.722 101.5H100.729V100H100.722V101.5ZM100.714 101.5H100.722V100H100.714V101.5ZM100.707 101.5H100.714V100H100.707V101.5ZM100.7 101.5H100.707V100H100.7V101.5ZM100.692 101.5H100.7V100H100.692V101.5ZM100.685 101.5H100.692V100H100.685V101.5ZM100.677 101.5H100.685V100H100.677V101.5ZM100.67 101.5H100.677V100H100.67V101.5ZM100.663 101.5H100.67V100H100.663V101.5ZM100.655 101.5H100.663V100H100.655V101.5ZM100.648 101.5H100.655V100H100.648V101.5ZM100.641 101.5H100.648V100H100.641V101.5ZM100.633 101.5H100.641V100H100.633V101.5ZM100.626 101.5H100.633V100H100.626V101.5ZM100.619 101.5H100.626V100H100.619V101.5ZM100.611 101.5H100.619V100H100.611V101.5ZM100.604 101.5H100.611V100H100.604V101.5ZM100.597 101.5H100.604V100H100.597V101.5ZM100.59 101.5H100.597V100H100.59V101.5ZM100.582 101.5H100.59V100H100.582V101.5ZM100.575 101.5H100.582V100H100.575V101.5ZM100.568 101.5H100.575V100H100.568V101.5ZM100.561 101.5H100.568V100H100.561V101.5ZM100.553 101.5H100.561V100H100.553V101.5ZM100.546 101.5H100.553V100H100.546V101.5ZM100.539 101.5H100.546V100H100.539V101.5ZM100.532 101.5H100.539V100H100.532V101.5ZM100.525 101.5H100.532V100H100.525V101.5ZM100.518 101.5H100.525V100H100.518V101.5ZM100.51 101.5H100.518V100H100.51V101.5ZM100.503 101.5H100.51V100H100.503V101.5ZM100.496 101.5H100.503V100H100.496V101.5ZM100.489 101.5H100.496V100H100.489V101.5ZM100.482 101.5H100.489V100H100.482V101.5ZM100.475 101.5H100.482V100H100.475V101.5ZM100.468 101.5H100.475V100H100.468V101.5ZM100.461 101.5H100.468V100H100.461V101.5ZM100.454 101.5H100.461V100H100.454V101.5ZM100.447 101.5H100.454V100H100.447V101.5ZM100.44 101.5H100.447V100H100.44V101.5ZM100.433 101.5H100.44V100H100.433V101.5ZM100.426 101.5H100.433V100H100.426V101.5ZM100.419 101.5H100.426V100H100.419V101.5ZM100.412 101.5H100.419V100H100.412V101.5ZM100.405 101.5H100.412V100H100.405V101.5ZM100.398 101.5H100.405V100H100.398V101.5ZM100.391 101.5H100.398V100H100.391V101.5ZM100.384 101.5H100.391V100H100.384V101.5ZM100.377 101.5H100.384V100H100.377V101.5ZM100.37 101.5H100.377V100H100.37V101.5ZM100.363 101.5H100.37V100H100.363V101.5ZM100.356 101.5H100.363V100H100.356V101.5ZM100.349 101.5H100.356V100H100.349V101.5ZM100.342 101.5H100.349V100H100.342V101.5ZM100.335 101.5H100.342V100H100.335V101.5ZM100.328 101.5H100.335V100H100.328V101.5ZM100.321 101.5H100.328V100H100.321V101.5ZM100.315 101.5H100.321V100H100.315V101.5ZM100.308 101.5H100.315V100H100.308V101.5ZM100.301 101.5H100.308V100H100.301V101.5ZM100.294 101.5H100.301V100H100.294V101.5ZM100.287 101.5H100.294V100H100.287V101.5ZM100.281 101.5H100.287V100H100.281V101.5ZM100.274 101.5H100.281V100H100.274V101.5ZM100.267 101.5H100.274V100H100.267V101.5ZM100.26 101.5H100.267V100H100.26V101.5ZM100.253 101.5H100.26V100H100.253V101.5ZM100.247 101.5H100.253V100H100.247V101.5ZM100.24 101.5H100.247V100H100.24V101.5ZM100.233 101.5H100.24V100H100.233V101.5ZM100.226 101.5H100.233V100H100.226V101.5ZM100.22 101.5H100.226V100H100.22V101.5ZM100.213 101.5H100.22V100H100.213V101.5ZM100.206 101.5H100.213V100H100.206V101.5ZM100.2 101.5H100.206V100H100.2V101.5ZM100.193 101.5H100.2V100H100.193V101.5ZM100.186 101.5H100.193V100H100.186V101.5ZM100.18 101.5H100.186V100H100.18V101.5ZM100.173 101.5H100.18V100H100.173V101.5ZM100.167 101.5H100.173V100H100.167V101.5ZM100.16 101.5H100.167V100H100.16V101.5ZM100.153 101.5H100.16V100H100.153V101.5ZM100.147 101.5H100.153V100H100.147V101.5ZM100.14 101.5H100.147V100H100.14V101.5ZM100.134 101.5H100.14V100H100.134V101.5ZM100.127 101.5H100.134V100H100.127V101.5ZM100.12 101.5H100.127V100H100.12V101.5ZM100.114 101.5H100.12V100H100.114V101.5ZM100.107 101.5H100.114V100H100.107V101.5ZM100.101 101.5H100.107V100H100.101V101.5ZM100.094 101.5H100.101V100H100.094V101.5ZM100.088 101.5H100.094V100H100.088V101.5ZM100.081 101.5H100.088V100H100.081V101.5ZM100.075 101.5H100.081V100H100.075V101.5ZM100.068 101.5H100.075V100H100.068V101.5ZM100.062 101.5H100.068V100H100.062V101.5ZM100.055 101.5H100.062V100H100.055V101.5ZM100.049 101.5H100.055V100H100.049V101.5ZM100.043 101.5H100.049V100H100.043V101.5ZM100.036 101.5H100.043V100H100.036V101.5ZM100.03 101.5H100.036V100H100.03V101.5ZM100.023 101.5H100.03V100H100.023V101.5ZM100.017 101.5H100.023V100H100.017V101.5ZM100.011 101.5H100.017V100H100.011V101.5ZM100.004 101.5H100.011V100H100.004V101.5ZM99.9979 101.5H100.004V100H99.9979V101.5ZM99.9916 101.5H99.9979V100H99.9916V101.5ZM99.9852 101.5H99.9916V100H99.9852V101.5ZM99.9789 101.5H99.9852V100H99.9789V101.5ZM99.9726 101.5H99.9789V100H99.9726V101.5ZM99.9663 101.5H99.9726V100H99.9663V101.5ZM99.96 101.5H99.9663V100H99.96V101.5ZM99.9537 101.5H99.96V100H99.9537V101.5ZM99.9475 101.5H99.9537V100H99.9475V101.5ZM99.9412 101.5H99.9475V100H99.9412V101.5ZM99.935 101.5H99.9412V100H99.935V101.5ZM99.9287 101.5H99.935V100H99.9287V101.5ZM99.9225 101.5H99.9287V100H99.9225V101.5ZM99.9163 101.5H99.9225V100H99.9163V101.5ZM99.9101 101.5H99.9163V100H99.9101V101.5ZM99.9039 101.5H99.9101V100H99.9039V101.5ZM99.8977 101.5H99.9039V100H99.8977V101.5ZM99.8915 101.5H99.8977V100H99.8915V101.5ZM99.8853 101.5H99.8915V100H99.8853V101.5ZM99.8792 101.5H99.8853V100H99.8792V101.5ZM99.873 101.5H99.8792V100H99.873V101.5ZM99.8669 101.5H99.873V100H99.8669V101.5ZM99.8608 101.5H99.8669V100H99.8608V101.5ZM99.8547 101.5H99.8608V100H99.8547V101.5ZM99.8486 101.5H99.8547V100H99.8486V101.5ZM99.8425 101.5H99.8486V100H99.8425V101.5ZM99.8364 101.5H99.8425V100H99.8364V101.5ZM99.8303 101.5H99.8364V100H99.8303V101.5ZM99.8242 101.5H99.8303V100H99.8242V101.5ZM99.8182 101.5H99.8242V100H99.8182V101.5ZM99.8121 101.5H99.8182V100H99.8121V101.5ZM99.8061 101.5H99.8121V100H99.8061V101.5ZM99.8001 101.5H99.8061V100H99.8001V101.5ZM99.7941 101.5H99.8001V100H99.7941V101.5ZM99.7881 101.5H99.7941V100H99.7881V101.5ZM99.7821 101.5H99.7881V100H99.7821V101.5ZM99.7761 101.5H99.7821V100H99.7761V101.5ZM99.7701 101.5H99.7761V100H99.7701V101.5ZM99.7642 101.5H99.7701V100H99.7642V101.5ZM99.7582 101.5H99.7642V100H99.7582V101.5ZM99.7523 101.5H99.7582V100H99.7523V101.5ZM99.7464 101.5H99.7523V100H99.7464V101.5ZM99.7405 101.5H99.7464V100H99.7405V101.5ZM99.7346 101.5H99.7405V100H99.7346V101.5ZM99.7287 101.5H99.7346V100H99.7287V101.5ZM99.7228 101.5H99.7287V100H99.7228V101.5ZM99.7169 101.5H99.7228V100H99.7169V101.5ZM99.711 101.5H99.7169V100H99.711V101.5ZM99.7052 101.5H99.711V100H99.7052V101.5ZM99.6993 101.5H99.7052V100H99.6993V101.5ZM99.6935 101.5H99.6993V100H99.6935V101.5ZM99.6877 101.5H99.6935V100H99.6877V101.5ZM99.6819 101.5H99.6877V100H99.6819V101.5ZM99.6761 101.5H99.6819V100H99.6761V101.5ZM99.6703 101.5H99.6761V100H99.6703V101.5ZM99.6645 101.5H99.6703V100H99.6645V101.5ZM99.6587 101.5H99.6645V100H99.6587V101.5ZM99.653 101.5H99.6587V100H99.653V101.5ZM99.6472 101.5H99.653V100H99.6472V101.5ZM99.6415 101.5H99.6472V100H99.6415V101.5ZM99.6357 101.5H99.6415V100H99.6357V101.5ZM99.63 101.5H99.6357V100H99.63V101.5ZM99.6243 101.5H99.63V100H99.6243V101.5ZM99.6186 101.5H99.6243V100H99.6186V101.5ZM99.6129 101.5H99.6186V100H99.6129V101.5ZM99.6072 101.5H99.6129V100H99.6072V101.5ZM99.6016 101.5H99.6072V100H99.6016V101.5ZM99.5959 101.5H99.6016V100H99.5959V101.5ZM99.5903 101.5H99.5959V100H99.5903V101.5ZM99.5846 101.5H99.5903V100H99.5846V101.5ZM99.579 101.5H99.5846V100H99.579V101.5ZM99.5734 101.5H99.579V100H99.5734V101.5ZM99.5678 101.5H99.5734V100H99.5678V101.5ZM99.5622 101.5H99.5678V100H99.5622V101.5ZM99.5566 101.5H99.5622V100H99.5566V101.5ZM99.551 101.5H99.5566V100H99.551V101.5ZM99.5455 101.5H99.551V100H99.5455V101.5ZM99.5399 101.5H99.5455V100H99.5399V101.5ZM99.5344 101.5H99.5399V100H99.5344V101.5ZM99.5289 101.5H99.5344V100H99.5289V101.5ZM99.5233 101.5H99.5289V100H99.5233V101.5ZM99.5178 101.5H99.5233V100H99.5178V101.5ZM99.5123 101.5H99.5178V100H99.5123V101.5ZM99.5068 101.5H99.5123V100H99.5068V101.5ZM99.5014 101.5H99.5068V100H99.5014V101.5ZM99.4959 101.5H99.5014V100H99.4959V101.5ZM99.4904 101.5H99.4959V100H99.4904V101.5ZM99.485 101.5H99.4904V100H99.485V101.5ZM99.4795 101.5H99.485V100H99.4795V101.5ZM99.4741 101.5H99.4795V100H99.4741V101.5ZM99.4687 101.5H99.4741V100H99.4687V101.5ZM99.4633 101.5H99.4687V100H99.4633V101.5ZM99.4579 101.5H99.4633V100H99.4579V101.5ZM99.4525 101.5H99.4579V100H99.4525V101.5ZM99.4471 101.5H99.4525V100H99.4471V101.5ZM99.4418 101.5H99.4471V100H99.4418V101.5ZM99.4364 101.5H99.4418V100H99.4364V101.5ZM99.4311 101.5H99.4364V100H99.4311V101.5ZM99.4257 101.5H99.4311V100H99.4257V101.5ZM98.6757 99.2502V100.75H100.176V99.2502H98.6757ZM99.4311 98.5002H99.4257V100H99.4311V98.5002ZM99.4364 98.5002H99.4311V100H99.4364V98.5002ZM99.4418 98.5002H99.4364V100H99.4418V98.5002ZM99.4471 98.5002H99.4418V100H99.4471V98.5002ZM99.4525 98.5002H99.4471V100H99.4525V98.5002ZM99.4579 98.5002H99.4525V100H99.4579V98.5002ZM99.4633 98.5002H99.4579V100H99.4633V98.5002ZM99.4687 98.5002H99.4633V100H99.4687V98.5002ZM99.4741 98.5002H99.4687V100H99.4741V98.5002ZM99.4795 98.5002H99.4741V100H99.4795V98.5002ZM99.485 98.5002H99.4795V100H99.485V98.5002ZM99.4904 98.5002H99.485V100H99.4904V98.5002ZM99.4959 98.5002H99.4904V100H99.4959V98.5002ZM99.5014 98.5002H99.4959V100H99.5014V98.5002ZM99.5068 98.5002H99.5014V100H99.5068V98.5002ZM99.5123 98.5002H99.5068V100H99.5123V98.5002ZM99.5178 98.5002H99.5123V100H99.5178V98.5002ZM99.5233 98.5002H99.5178V100H99.5233V98.5002ZM99.5289 98.5002H99.5233V100H99.5289V98.5002ZM99.5344 98.5002H99.5289V100H99.5344V98.5002ZM99.5399 98.5002H99.5344V100H99.5399V98.5002ZM99.5455 98.5002H99.5399V100H99.5455V98.5002ZM99.551 98.5002H99.5455V100H99.551V98.5002ZM99.5566 98.5002H99.551V100H99.5566V98.5002ZM99.5622 98.5002H99.5566V100H99.5622V98.5002ZM99.5678 98.5002H99.5622V100H99.5678V98.5002ZM99.5734 98.5002H99.5678V100H99.5734V98.5002ZM99.579 98.5002H99.5734V100H99.579V98.5002ZM99.5846 98.5002H99.579V100H99.5846V98.5002ZM99.5903 98.5002H99.5846V100H99.5903V98.5002ZM99.5959 98.5002H99.5903V100H99.5959V98.5002ZM99.6016 98.5002H99.5959V100H99.6016V98.5002ZM99.6072 98.5002H99.6016V100H99.6072V98.5002ZM99.6129 98.5002H99.6072V100H99.6129V98.5002ZM99.6186 98.5002H99.6129V100H99.6186V98.5002ZM99.6243 98.5002H99.6186V100H99.6243V98.5002ZM99.63 98.5002H99.6243V100H99.63V98.5002ZM99.6357 98.5002H99.63V100H99.6357V98.5002ZM99.6415 98.5002H99.6357V100H99.6415V98.5002ZM99.6472 98.5002H99.6415V100H99.6472V98.5002ZM99.653 98.5002H99.6472V100H99.653V98.5002ZM99.6587 98.5002H99.653V100H99.6587V98.5002ZM99.6645 98.5002H99.6587V100H99.6645V98.5002ZM99.6703 98.5002H99.6645V100H99.6703V98.5002ZM99.6761 98.5002H99.6703V100H99.6761V98.5002ZM99.6819 98.5002H99.6761V100H99.6819V98.5002ZM99.6877 98.5002H99.6819V100H99.6877V98.5002ZM99.6935 98.5002H99.6877V100H99.6935V98.5002ZM99.6993 98.5002H99.6935V100H99.6993V98.5002ZM99.7052 98.5002H99.6993V100H99.7052V98.5002ZM99.711 98.5002H99.7052V100H99.711V98.5002ZM99.7169 98.5002H99.711V100H99.7169V98.5002ZM99.7228 98.5002H99.7169V100H99.7228V98.5002ZM99.7287 98.5002H99.7228V100H99.7287V98.5002ZM99.7346 98.5002H99.7287V100H99.7346V98.5002ZM99.7405 98.5002H99.7346V100H99.7405V98.5002ZM99.7464 98.5002H99.7405V100H99.7464V98.5002ZM99.7523 98.5002H99.7464V100H99.7523V98.5002ZM99.7582 98.5002H99.7523V100H99.7582V98.5002ZM99.7642 98.5002H99.7582V100H99.7642V98.5002ZM99.7701 98.5002H99.7642V100H99.7701V98.5002ZM99.7761 98.5002H99.7701V100H99.7761V98.5002ZM99.7821 98.5002H99.7761V100H99.7821V98.5002ZM99.7881 98.5002H99.7821V100H99.7881V98.5002ZM99.7941 98.5002H99.7881V100H99.7941V98.5002ZM99.8001 98.5002H99.7941V100H99.8001V98.5002ZM99.8061 98.5002H99.8001V100H99.8061V98.5002ZM99.8121 98.5002H99.8061V100H99.8121V98.5002ZM99.8182 98.5002H99.8121V100H99.8182V98.5002ZM99.8242 98.5002H99.8182V100H99.8242V98.5002ZM99.8303 98.5002H99.8242V100H99.8303V98.5002ZM99.8364 98.5002H99.8303V100H99.8364V98.5002ZM99.8425 98.5002H99.8364V100H99.8425V98.5002ZM99.8486 98.5002H99.8425V100H99.8486V98.5002ZM99.8547 98.5002H99.8486V100H99.8547V98.5002ZM99.8608 98.5002H99.8547V100H99.8608V98.5002ZM99.8669 98.5002H99.8608V100H99.8669V98.5002ZM99.873 98.5002H99.8669V100H99.873V98.5002ZM99.8792 98.5002H99.873V100H99.8792V98.5002ZM99.8853 98.5002H99.8792V100H99.8853V98.5002ZM99.8915 98.5002H99.8853V100H99.8915V98.5002ZM99.8977 98.5002H99.8915V100H99.8977V98.5002ZM99.9039 98.5002H99.8977V100H99.9039V98.5002ZM99.9101 98.5002H99.9039V100H99.9101V98.5002ZM99.9163 98.5002H99.9101V100H99.9163V98.5002ZM99.9225 98.5002H99.9163V100H99.9225V98.5002ZM99.9287 98.5002H99.9225V100H99.9287V98.5002ZM99.935 98.5002H99.9287V100H99.935V98.5002ZM99.9412 98.5002H99.935V100H99.9412V98.5002ZM99.9475 98.5002H99.9412V100H99.9475V98.5002ZM99.9537 98.5002H99.9475V100H99.9537V98.5002ZM99.96 98.5002H99.9537V100H99.96V98.5002ZM99.9663 98.5002H99.96V100H99.9663V98.5002ZM99.9726 98.5002H99.9663V100H99.9726V98.5002ZM99.9789 98.5002H99.9726V100H99.9789V98.5002ZM99.9852 98.5002H99.9789V100H99.9852V98.5002ZM99.9916 98.5002H99.9852V100H99.9916V98.5002ZM99.9979 98.5002H99.9916V100H99.9979V98.5002ZM100.004 98.5002H99.9979V100H100.004V98.5002ZM100.011 98.5002H100.004V100H100.011V98.5002ZM100.017 98.5002H100.011V100H100.017V98.5002ZM100.023 98.5002H100.017V100H100.023V98.5002ZM100.03 98.5002H100.023V100H100.03V98.5002ZM100.036 98.5002H100.03V100H100.036V98.5002ZM100.043 98.5002H100.036V100H100.043V98.5002ZM100.049 98.5002H100.043V100H100.049V98.5002ZM100.055 98.5002H100.049V100H100.055V98.5002ZM100.062 98.5002H100.055V100H100.062V98.5002ZM100.068 98.5002H100.062V100H100.068V98.5002ZM100.075 98.5002H100.068V100H100.075V98.5002ZM100.081 98.5002H100.075V100H100.081V98.5002ZM100.088 98.5002H100.081V100H100.088V98.5002ZM100.094 98.5002H100.088V100H100.094V98.5002ZM100.101 98.5002H100.094V100H100.101V98.5002ZM100.107 98.5002H100.101V100H100.107V98.5002ZM100.114 98.5002H100.107V100H100.114V98.5002ZM100.12 98.5002H100.114V100H100.12V98.5002ZM100.127 98.5002H100.12V100H100.127V98.5002ZM100.134 98.5002H100.127V100H100.134V98.5002ZM100.14 98.5002H100.134V100H100.14V98.5002ZM100.147 98.5002H100.14V100H100.147V98.5002ZM100.153 98.5002H100.147V100H100.153V98.5002ZM100.16 98.5002H100.153V100H100.16V98.5002ZM100.167 98.5002H100.16V100H100.167V98.5002ZM100.173 98.5002H100.167V100H100.173V98.5002ZM100.18 98.5002H100.173V100H100.18V98.5002ZM100.186 98.5002H100.18V100H100.186V98.5002ZM100.193 98.5002H100.186V100H100.193V98.5002ZM100.2 98.5002H100.193V100H100.2V98.5002ZM100.206 98.5002H100.2V100H100.206V98.5002ZM100.213 98.5002H100.206V100H100.213V98.5002ZM100.22 98.5002H100.213V100H100.22V98.5002ZM100.226 98.5002H100.22V100H100.226V98.5002ZM100.233 98.5002H100.226V100H100.233V98.5002ZM100.24 98.5002H100.233V100H100.24V98.5002ZM100.247 98.5002H100.24V100H100.247V98.5002ZM100.253 98.5002H100.247V100H100.253V98.5002ZM100.26 98.5002H100.253V100H100.26V98.5002ZM100.267 98.5002H100.26V100H100.267V98.5002ZM100.274 98.5002H100.267V100H100.274V98.5002ZM100.281 98.5002H100.274V100H100.281V98.5002ZM100.287 98.5002H100.281V100H100.287V98.5002ZM100.294 98.5002H100.287V100H100.294V98.5002ZM100.301 98.5002H100.294V100H100.301V98.5002ZM100.308 98.5002H100.301V100H100.308V98.5002ZM100.315 98.5002H100.308V100H100.315V98.5002ZM100.321 98.5002H100.315V100H100.321V98.5002ZM100.328 98.5002H100.321V100H100.328V98.5002ZM100.335 98.5002H100.328V100H100.335V98.5002ZM100.342 98.5002H100.335V100H100.342V98.5002ZM100.349 98.5002H100.342V100H100.349V98.5002ZM100.356 98.5002H100.349V100H100.356V98.5002ZM100.363 98.5002H100.356V100H100.363V98.5002ZM100.37 98.5002H100.363V100H100.37V98.5002ZM100.377 98.5002H100.37V100H100.377V98.5002ZM100.384 98.5002H100.377V100H100.384V98.5002ZM100.391 98.5002H100.384V100H100.391V98.5002ZM100.398 98.5002H100.391V100H100.398V98.5002ZM100.405 98.5002H100.398V100H100.405V98.5002ZM100.412 98.5002H100.405V100H100.412V98.5002ZM100.419 98.5002H100.412V100H100.419V98.5002ZM100.426 98.5002H100.419V100H100.426V98.5002ZM100.433 98.5002H100.426V100H100.433V98.5002ZM100.44 98.5002H100.433V100H100.44V98.5002ZM100.447 98.5002H100.44V100H100.447V98.5002ZM100.454 98.5002H100.447V100H100.454V98.5002ZM100.461 98.5002H100.454V100H100.461V98.5002ZM100.468 98.5002H100.461V100H100.468V98.5002ZM100.475 98.5002H100.468V100H100.475V98.5002ZM100.482 98.5002H100.475V100H100.482V98.5002ZM100.489 98.5002H100.482V100H100.489V98.5002ZM100.496 98.5002H100.489V100H100.496V98.5002ZM100.503 98.5002H100.496V100H100.503V98.5002ZM100.51 98.5002H100.503V100H100.51V98.5002ZM100.518 98.5002H100.51V100H100.518V98.5002ZM100.525 98.5002H100.518V100H100.525V98.5002ZM100.532 98.5002H100.525V100H100.532V98.5002ZM100.539 98.5002H100.532V100H100.539V98.5002ZM100.546 98.5002H100.539V100H100.546V98.5002ZM100.553 98.5002H100.546V100H100.553V98.5002ZM100.561 98.5002H100.553V100H100.561V98.5002ZM100.568 98.5002H100.561V100H100.568V98.5002ZM100.575 98.5002H100.568V100H100.575V98.5002ZM100.582 98.5002H100.575V100H100.582V98.5002ZM100.59 98.5002H100.582V100H100.59V98.5002ZM100.597 98.5002H100.59V100H100.597V98.5002ZM100.604 98.5002H100.597V100H100.604V98.5002ZM100.611 98.5002H100.604V100H100.611V98.5002ZM100.619 98.5002H100.611V100H100.619V98.5002ZM100.626 98.5002H100.619V100H100.626V98.5002ZM100.633 98.5002H100.626V100H100.633V98.5002ZM100.641 98.5002H100.633V100H100.641V98.5002ZM100.648 98.5002H100.641V100H100.648V98.5002ZM100.655 98.5002H100.648V100H100.655V98.5002ZM100.663 98.5002H100.655V100H100.663V98.5002ZM100.67 98.5002H100.663V100H100.67V98.5002ZM100.677 98.5002H100.67V100H100.677V98.5002ZM100.685 98.5002H100.677V100H100.685V98.5002ZM100.692 98.5002H100.685V100H100.692V98.5002ZM100.7 98.5002H100.692V100H100.7V98.5002ZM100.707 98.5002H100.7V100H100.707V98.5002ZM100.714 98.5002H100.707V100H100.714V98.5002ZM100.722 98.5002H100.714V100H100.722V98.5002ZM100.729 98.5002H100.722V100H100.729V98.5002ZM100.737 98.5002H100.729V100H100.737V98.5002ZM100.744 98.5002H100.737V100H100.744V98.5002ZM100.752 98.5002H100.744V100H100.752V98.5002ZM100.759 98.5002H100.752V100H100.759V98.5002ZM100.767 98.5002H100.759V100H100.767V98.5002ZM100.774 98.5002H100.767V100H100.774V98.5002ZM100.782 98.5002H100.774V100H100.782V98.5002ZM100.789 98.5002H100.782V100H100.789V98.5002ZM100.797 98.5002H100.789V100H100.797V98.5002ZM100.804 98.5002H100.797V100H100.804V98.5002ZM100.812 98.5002H100.804V100H100.812V98.5002ZM100.82 98.5002H100.812V100H100.82V98.5002ZM100.827 98.5002H100.82V100H100.827V98.5002ZM100.835 98.5002H100.827V100H100.835V98.5002ZM100.842 98.5002H100.835V100H100.842V98.5002ZM100.85 98.5002H100.842V100H100.85V98.5002ZM100.858 98.5002H100.85V100H100.858V98.5002ZM100.865 98.5002H100.858V100H100.865V98.5002ZM100.873 98.5002H100.865V100H100.873V98.5002ZM100.88 98.5002H100.873V100H100.88V98.5002ZM100.888 98.5002H100.88V100H100.888V98.5002ZM100.896 98.5002H100.888V100H100.896V98.5002ZM100.903 98.5002H100.896V100H100.903V98.5002ZM100.911 98.5002H100.903V100H100.911V98.5002ZM100.919 98.5002H100.911V100H100.919V98.5002ZM100.927 98.5002H100.919V100H100.927V98.5002ZM100.934 98.5002H100.927V100H100.934V98.5002ZM100.942 98.5002H100.934V100H100.942V98.5002ZM100.95 98.5002H100.942V100H100.95V98.5002ZM100.958 98.5002H100.95V100H100.958V98.5002ZM100.965 98.5002H100.958V100H100.965V98.5002ZM100.973 98.5002H100.965V100H100.973V98.5002ZM100.981 98.5002H100.973V100H100.981V98.5002ZM100.989 98.5002H100.981V100H100.989V98.5002ZM100.997 98.5002H100.989V100H100.997V98.5002ZM101.004 98.5002H100.997V100H101.004V98.5002ZM101.012 98.5002H101.004V100H101.012V98.5002ZM101.02 98.5002H101.012V100H101.02V98.5002ZM101.028 98.5002H101.02V100H101.028V98.5002ZM101.036 98.5002H101.028V100H101.036V98.5002ZM101.044 98.5002H101.036V100H101.044V98.5002ZM101.052 98.5002H101.044V100H101.052V98.5002ZM101.059 98.5002H101.052V100H101.059V98.5002ZM101.067 98.5002H101.059V100H101.067V98.5002ZM101.075 98.5002H101.067V100H101.075V98.5002ZM101.083 98.5002H101.075V100H101.083V98.5002ZM101.091 98.5002H101.083V100H101.091V98.5002ZM101.099 98.5002H101.091V100H101.099V98.5002ZM101.107 98.5002H101.099V100H101.107V98.5002ZM101.115 98.5002H101.107V100H101.115V98.5002ZM101.123 98.5002H101.115V100H101.123V98.5002ZM101.131 98.5002H101.123V100H101.131V98.5002ZM101.139 98.5002H101.131V100H101.139V98.5002ZM101.147 98.5002H101.139V100H101.147V98.5002ZM101.155 98.5002H101.147V100H101.155V98.5002ZM101.163 98.5002H101.155V100H101.163V98.5002ZM101.171 98.5002H101.163V100H101.171V98.5002ZM101.179 98.5002H101.171V100H101.179V98.5002ZM101.187 98.5002H101.179V100H101.187V98.5002ZM101.195 98.5002H101.187V100H101.195V98.5002ZM101.203 98.5002H101.195V100H101.203V98.5002ZM101.211 98.5002H101.203V100H101.211V98.5002ZM101.219 98.5002H101.211V100H101.219V98.5002ZM101.228 98.5002H101.219V100H101.228V98.5002ZM101.236 98.5002H101.228V100H101.236V98.5002ZM101.244 98.5002H101.236V100H101.244V98.5002ZM101.252 98.5002H101.244V100H101.252V98.5002ZM101.26 98.5002H101.252V100H101.26V98.5002ZM101.268 98.5002H101.26V100H101.268V98.5002ZM101.276 98.5002H101.268V100H101.276V98.5002ZM101.285 98.5002H101.276V100H101.285V98.5002ZM101.293 98.5002H101.285V100H101.293V98.5002ZM101.301 98.5002H101.293V100H101.301V98.5002ZM101.309 98.5002H101.301V100H101.309V98.5002ZM101.318 98.5002H101.309V100H101.318V98.5002ZM101.326 98.5002H101.318V100H101.326V98.5002ZM101.334 98.5002H101.326V100H101.334V98.5002ZM101.342 98.5002H101.334V100H101.342V98.5002ZM101.351 98.5002H101.342V100H101.351V98.5002ZM101.359 98.5002H101.351V100H101.359V98.5002ZM101.367 98.5002H101.359V100H101.367V98.5002ZM101.375 98.5002H101.367V100H101.375V98.5002ZM101.384 98.5002H101.375V100H101.384V98.5002ZM101.392 98.5002H101.384V100H101.392V98.5002ZM101.4 98.5002H101.392V100H101.4V98.5002ZM101.409 98.5002H101.4V100H101.409V98.5002ZM101.417 98.5002H101.409V100H101.417V98.5002ZM101.425 98.5002H101.417V100H101.425V98.5002ZM101.434 98.5002H101.425V100H101.434V98.5002ZM101.442 98.5002H101.434V100H101.442V98.5002ZM101.451 98.5002H101.442V100H101.451V98.5002ZM101.459 98.5002H101.451V100H101.459V98.5002ZM101.467 98.5002H101.459V100H101.467V98.5002ZM101.476 98.5002H101.467V100H101.476V98.5002ZM101.484 98.5002H101.476V100H101.484V98.5002ZM101.493 98.5002H101.484V100H101.493V98.5002ZM101.501 98.5002H101.493V100H101.501V98.5002ZM101.51 98.5002H101.501V100H101.51V98.5002ZM101.518 98.5002H101.51V100H101.518V98.5002ZM101.527 98.5002H101.518V100H101.527V98.5002ZM101.535 98.5002H101.527V100H101.535V98.5002ZM101.544 98.5002H101.535V100H101.544V98.5002ZM101.552 98.5002H101.544V100H101.552V98.5002ZM101.561 98.5002H101.552V100H101.561V98.5002ZM101.569 98.5002H101.561V100H101.569V98.5002ZM101.578 98.5002H101.569V100H101.578V98.5002ZM101.586 98.5002H101.578V100H101.586V98.5002ZM101.595 98.5002H101.586V100H101.595V98.5002ZM101.603 98.5002H101.595V100H101.603V98.5002ZM101.612 98.5002H101.603V100H101.612V98.5002ZM101.621 98.5002H101.612V100H101.621V98.5002ZM101.629 98.5002H101.621V100H101.629V98.5002ZM101.638 98.5002H101.629V100H101.638V98.5002ZM101.646 98.5002H101.638V100H101.646V98.5002ZM101.655 98.5002H101.646V100H101.655V98.5002ZM101.664 98.5002H101.655V100H101.664V98.5002ZM101.672 98.5002H101.664V100H101.672V98.5002ZM101.681 98.5002H101.672V100H101.681V98.5002ZM101.69 98.5002H101.681V100H101.69V98.5002ZM101.698 98.5002H101.69V100H101.698V98.5002ZM101.707 98.5002H101.698V100H101.707V98.5002ZM101.716 98.5002H101.707V100H101.716V98.5002ZM101.725 98.5002H101.716V100H101.725V98.5002ZM101.733 98.5002H101.725V100H101.733V98.5002ZM101.742 98.5002H101.733V100H101.742V98.5002ZM101.751 98.5002H101.742V100H101.751V98.5002ZM101.76 98.5002H101.751V100H101.76V98.5002ZM101.768 98.5002H101.76V100H101.768V98.5002ZM101.777 98.5002H101.768V100H101.777V98.5002ZM101.786 98.5002H101.777V100H101.786V98.5002ZM101.795 98.5002H101.786V100H101.795V98.5002ZM101.804 98.5002H101.795V100H101.804V98.5002ZM101.812 98.5002H101.804V100H101.812V98.5002ZM101.821 98.5002H101.812V100H101.821V98.5002ZM101.83 98.5002H101.821V100H101.83V98.5002ZM101.839 98.5002H101.83V100H101.839V98.5002ZM101.848 98.5002H101.839V100H101.848V98.5002ZM101.857 98.5002H101.848V100H101.857V98.5002ZM101.866 98.5002H101.857V100H101.866V98.5002ZM101.875 98.5002H101.866V100H101.875V98.5002ZM101.884 98.5002H101.875V100H101.884V98.5002ZM101.892 98.5002H101.884V100H101.892V98.5002ZM101.901 98.5002H101.892V100H101.901V98.5002ZM101.91 98.5002H101.901V100H101.91V98.5002ZM101.919 98.5002H101.91V100H101.919V98.5002ZM101.928 98.5002H101.919V100H101.928V98.5002ZM101.937 98.5002H101.928V100H101.937V98.5002ZM101.946 98.5002H101.937V100H101.946V98.5002ZM101.955 98.5002H101.946V100H101.955V98.5002ZM101.964 98.5002H101.955V100H101.964V98.5002ZM101.973 98.5002H101.964V100H101.973V98.5002ZM101.982 98.5002H101.973V100H101.982V98.5002ZM101.991 98.5002H101.982V100H101.991V98.5002ZM102 98.5002H101.991V100H102V98.5002ZM102.009 98.5002H102V100H102.009V98.5002ZM102.018 98.5002H102.009V100H102.018V98.5002ZM102.028 98.5002H102.018V100H102.028V98.5002ZM102.037 98.5002H102.028V100H102.037V98.5002ZM102.046 98.5002H102.037V100H102.046V98.5002ZM102.055 98.5002H102.046V100H102.055V98.5002ZM102.064 98.5002H102.055V100H102.064V98.5002ZM102.073 98.5002H102.064V100H102.073V98.5002ZM102.082 98.5002H102.073V100H102.082V98.5002ZM102.091 98.5002H102.082V100H102.091V98.5002ZM102.101 98.5002H102.091V100H102.101V98.5002ZM102.11 98.5002H102.101V100H102.11V98.5002ZM102.119 98.5002H102.11V100H102.119V98.5002ZM102.128 98.5002H102.119V100H102.128V98.5002ZM102.137 98.5002H102.128V100H102.137V98.5002ZM102.147 98.5002H102.137V100H102.147V98.5002ZM102.156 98.5002H102.147V100H102.156V98.5002ZM102.165 98.5002H102.156V100H102.165V98.5002ZM102.174 98.5002H102.165V100H102.174V98.5002ZM102.184 98.5002H102.174V100H102.184V98.5002ZM102.193 98.5002H102.184V100H102.193V98.5002ZM102.202 98.5002H102.193V100H102.202V98.5002ZM102.211 98.5002H102.202V100H102.211V98.5002ZM102.221 98.5002H102.211V100H102.221V98.5002ZM102.23 98.5002H102.221V100H102.23V98.5002ZM102.239 98.5002H102.23V100H102.239V98.5002ZM102.249 98.5002H102.239V100H102.249V98.5002ZM102.258 98.5002H102.249V100H102.258V98.5002ZM102.267 98.5002H102.258V100H102.267V98.5002ZM102.277 98.5002H102.267V100H102.277V98.5002ZM102.286 98.5002H102.277V100H102.286V98.5002ZM102.295 98.5002H102.286V100H102.295V98.5002ZM102.305 98.5002H102.295V100H102.305V98.5002ZM102.314 98.5002H102.305V100H102.314V98.5002ZM102.324 98.5002H102.314V100H102.324V98.5002ZM102.333 98.5002H102.324V100H102.333V98.5002ZM102.342 98.5002H102.333V100H102.342V98.5002ZM102.352 98.5002H102.342V100H102.352V98.5002ZM102.361 98.5002H102.352V100H102.361V98.5002ZM102.371 98.5002H102.361V100H102.371V98.5002ZM102.38 98.5002H102.371V100H102.38V98.5002ZM102.39 98.5002H102.38V100H102.39V98.5002ZM102.399 98.5002H102.39V100H102.399V98.5002ZM102.409 98.5002H102.399V100H102.409V98.5002ZM102.418 98.5002H102.409V100H102.418V98.5002ZM102.428 98.5002H102.418V100H102.428V98.5002ZM102.437 98.5002H102.428V100H102.437V98.5002ZM102.447 98.5002H102.437V100H102.447V98.5002ZM102.457 98.5002H102.447V100H102.457V98.5002ZM102.466 98.5002H102.457V100H102.466V98.5002ZM102.476 98.5002H102.466V100H102.476V98.5002ZM102.485 98.5002H102.476V100H102.485V98.5002ZM102.495 98.5002H102.485V100H102.495V98.5002ZM102.504 98.5002H102.495V100H102.504V98.5002ZM102.514 98.5002H102.504V100H102.514V98.5002ZM102.524 98.5002H102.514V100H102.524V98.5002ZM102.533 98.5002H102.524V100H102.533V98.5002ZM102.543 98.5002H102.533V100H102.543V98.5002ZM102.553 98.5002H102.543V100H102.553V98.5002ZM102.562 98.5002H102.553V100H102.562V98.5002ZM102.572 98.5002H102.562V100H102.572V98.5002ZM102.582 98.5002H102.572V100H102.582V98.5002ZM102.591 98.5002H102.582V100H102.591V98.5002ZM102.601 98.5002H102.591V100H102.601V98.5002ZM102.611 98.5002H102.601V100H102.611V98.5002ZM102.621 98.5002H102.611V100H102.621V98.5002ZM102.63 98.5002H102.621V100H102.63V98.5002ZM102.64 98.5002H102.63V100H102.64V98.5002ZM102.65 98.5002H102.64V100H102.65V98.5002ZM102.66 98.5002H102.65V100H102.66V98.5002ZM102.669 98.5002H102.66V100H102.669V98.5002ZM102.679 98.5002H102.669V100H102.679V98.5002ZM102.689 98.5002H102.679V100H102.689V98.5002ZM102.699 98.5002H102.689V100H102.699V98.5002ZM102.709 98.5002H102.699V100H102.709V98.5002ZM102.719 98.5002H102.709V100H102.719V98.5002ZM102.728 98.5002H102.719V100H102.728V98.5002ZM102.738 98.5002H102.728V100H102.738V98.5002ZM102.748 98.5002H102.738V100H102.748V98.5002ZM102.758 98.5002H102.748V100H102.758V98.5002ZM102.768 98.5002H102.758V100H102.768V98.5002ZM102.778 98.5002H102.768V100H102.778V98.5002ZM102.788 98.5002H102.778V100H102.788V98.5002ZM102.798 98.5002H102.788V100H102.798V98.5002ZM102.808 98.5002H102.798V100H102.808V98.5002ZM102.818 98.5002H102.808V100H102.818V98.5002ZM102.827 98.5002H102.818V100H102.827V98.5002ZM102.837 98.5002H102.827V100H102.837V98.5002ZM102.847 98.5002H102.837V100H102.847V98.5002ZM102.857 98.5002H102.847V100H102.857V98.5002ZM102.867 98.5002H102.857V100H102.867V98.5002ZM102.877 98.5002H102.867V100H102.877V98.5002ZM102.887 98.5002H102.877V100H102.887V98.5002ZM102.897 98.5002H102.887V100H102.897V98.5002ZM102.907 98.5002H102.897V100H102.907V98.5002ZM102.918 98.5002H102.907V100H102.918V98.5002ZM102.928 98.5002H102.918V100H102.928V98.5002ZM102.938 98.5002H102.928V100H102.938V98.5002ZM102.948 98.5002H102.938V100H102.948V98.5002ZM102.958 98.5002H102.948V100H102.958V98.5002ZM102.968 98.5002H102.958V100H102.968V98.5002ZM102.978 98.5002H102.968V100H102.978V98.5002ZM102.988 98.5002H102.978V100H102.988V98.5002ZM102.998 98.5002H102.988V100H102.998V98.5002ZM103.008 98.5002H102.998V100H103.008V98.5002ZM103.019 98.5002H103.008V100H103.019V98.5002ZM103.029 98.5002H103.019V100H103.029V98.5002ZM103.039 98.5002H103.029V100H103.039V98.5002ZM103.049 98.5002H103.039V100H103.049V98.5002ZM103.059 98.5002H103.049V100H103.059V98.5002ZM103.07 98.5002H103.059V100H103.07V98.5002ZM103.08 98.5002H103.07V100H103.08V98.5002ZM103.09 98.5002H103.08V100H103.09V98.5002ZM103.1 98.5002H103.09V100H103.1V98.5002ZM103.11 98.5002H103.1V100H103.11V98.5002ZM103.121 98.5002H103.11V100H103.121V98.5002ZM103.131 98.5002H103.121V100H103.131V98.5002ZM103.141 98.5002H103.131V100H103.141V98.5002ZM103.152 98.5002H103.141V100H103.152V98.5002ZM103.162 98.5002H103.152V100H103.162V98.5002ZM103.172 98.5002H103.162V100H103.172V98.5002ZM103.182 98.5002H103.172V100H103.182V98.5002ZM103.193 98.5002H103.182V100H103.193V98.5002ZM103.203 98.5002H103.193V100H103.203V98.5002ZM103.213 98.5002H103.203V100H103.213V98.5002ZM103.224 98.5002H103.213V100H103.224V98.5002ZM103.234 98.5002H103.224V100H103.234V98.5002ZM103.245 98.5002H103.234V100H103.245V98.5002ZM103.255 98.5002H103.245V100H103.255V98.5002ZM103.265 98.5002H103.255V100H103.265V98.5002ZM103.276 98.5002H103.265V100H103.276V98.5002ZM103.286 98.5002H103.276V100H103.286V98.5002ZM103.297 98.5002H103.286V100H103.297V98.5002ZM103.307 98.5002H103.297V100H103.307V98.5002ZM103.318 98.5002H103.307V100H103.318V98.5002ZM103.328 98.5002H103.318V100H103.328V98.5002ZM103.338 98.5002H103.328V100H103.338V98.5002ZM103.349 98.5002H103.338V100H103.349V98.5002ZM103.359 98.5002H103.349V100H103.359V98.5002ZM103.37 98.5002H103.359V100H103.37V98.5002ZM103.38 98.5002H103.37V100H103.38V98.5002ZM103.391 98.5002H103.38V100H103.391V98.5002ZM103.402 98.5002H103.391V100H103.402V98.5002ZM103.412 98.5002H103.402V100H103.412V98.5002ZM103.423 98.5002H103.412V100H103.423V98.5002ZM103.433 98.5002H103.423V100H103.433V98.5002ZM103.444 98.5002H103.433V100H103.444V98.5002ZM103.454 98.5002H103.444V100H103.454V98.5002ZM103.465 98.5002H103.454V100H103.465V98.5002ZM103.476 98.5002H103.465V100H103.476V98.5002ZM103.486 98.5002H103.476V100H103.486V98.5002ZM103.497 98.5002H103.486V100H103.497V98.5002ZM103.508 98.5002H103.497V100H103.508V98.5002ZM103.518 98.5002H103.508V100H103.518V98.5002ZM103.77 98.432C103.694 98.4767 103.607 98.5002 103.518 98.5002V100C103.872 100 104.22 99.9061 104.526 99.7277L103.77 98.432ZM103.95 97.7482C104.089 97.9867 104.009 98.2929 103.77 98.432L104.526 99.7277C105.48 99.1712 105.802 97.9465 105.246 96.9924L103.95 97.7482ZM100.954 92.6118L103.95 97.7482L105.246 96.9924L102.249 91.856L100.954 92.6118Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M86.4633 69.2641C88.3828 65.9393 93.1779 65.9286 95.1123 69.2447L114.693 102.811C115.086 103.485 114.858 104.35 114.184 104.744C113.968 104.87 113.722 104.936 113.472 104.936L74.5283 104.936C70.6794 104.936 68.2738 100.769 70.1982 97.4361L86.4633 69.2641Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "71.4062", y: "54.1504", width: "9.18797", height: "29.6842", rx: "4.59399", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "93.3759", r: "5.30075", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" })); const Box = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "60.1538", cy: "44.3911", r: "12.0581", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M26.9545 45.3592C26.4894 44.0567 27.4549 42.6865 28.838 42.6865H57.9239C58.7691 42.6865 59.5231 43.2179 59.8074 44.0139L66.9091 63.8986H33.5758L26.9545 45.3592Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M125.045 45.3592C125.511 44.0567 124.545 42.6865 123.162 42.6865H94.0761C93.2309 42.6865 92.4769 43.2179 92.1926 44.0139L85.0909 63.8986H118.424L125.045 45.3592Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M108.223 36.9365H108.973V36.1865H108.223V36.9365ZM108.223 38.4365V39.1865H108.973V38.4365H108.223ZM100.89 38.4365H100.14V39.1865H100.89V38.4365ZM100.89 36.9365V36.1865H100.14V36.9365H100.89ZM87.0123 40.0889L87.7186 40.3412L87.0123 40.0889ZM97.2764 36.9365H98.0264V36.1865H97.2764V36.9365ZM97.2764 38.4365V39.1865H98.0264V38.4365H97.2764ZM88.4249 40.5934L89.1312 40.8457L88.4249 40.5934ZM87.3325 43.6521L88.0388 43.9043L87.3325 43.6521ZM86.5523 45.8368L86.3 46.5431L87.0063 46.7954L87.2586 46.0891L86.5523 45.8368ZM85.1396 45.3323L84.4333 45.0801L84.1811 45.7864L84.8874 46.0386L85.1396 45.3323ZM85.9199 43.1476L85.2136 42.8953H85.2136L85.9199 43.1476ZM108.223 36.1865H108.203V37.6865H108.223V36.1865ZM108.973 38.4365V36.9365H107.473V38.4365H108.973ZM108.203 39.1865H108.223V37.6865H108.203V39.1865ZM108.184 39.1865H108.203V37.6865H108.184V39.1865ZM108.165 39.1865H108.184V37.6865H108.165V39.1865ZM108.146 39.1865H108.165V37.6865H108.146V39.1865ZM108.127 39.1865H108.146V37.6865H108.127V39.1865ZM108.108 39.1865H108.127V37.6865H108.108V39.1865ZM108.089 39.1865H108.108V37.6865H108.089V39.1865ZM108.07 39.1865H108.089V37.6865H108.07V39.1865ZM108.051 39.1865H108.07V37.6865H108.051V39.1865ZM108.032 39.1865H108.051V37.6865H108.032V39.1865ZM108.013 39.1865H108.032V37.6865H108.013V39.1865ZM107.994 39.1865H108.013V37.6865H107.994V39.1865ZM107.975 39.1865H107.994V37.6865H107.975V39.1865ZM107.956 39.1865H107.975V37.6865H107.956V39.1865ZM107.937 39.1865H107.956V37.6865H107.937V39.1865ZM107.918 39.1865H107.937V37.6865H107.918V39.1865ZM107.899 39.1865H107.918V37.6865H107.899V39.1865ZM107.881 39.1865H107.899V37.6865H107.881V39.1865ZM107.862 39.1865H107.881V37.6865H107.862V39.1865ZM107.843 39.1865H107.862V37.6865H107.843V39.1865ZM107.824 39.1865H107.843V37.6865H107.824V39.1865ZM107.805 39.1865H107.824V37.6865H107.805V39.1865ZM107.787 39.1865H107.805V37.6865H107.787V39.1865ZM107.768 39.1865H107.787V37.6865H107.768V39.1865ZM107.749 39.1865H107.768V37.6865H107.749V39.1865ZM107.731 39.1865H107.749V37.6865H107.731V39.1865ZM107.712 39.1865H107.731V37.6865H107.712V39.1865ZM107.693 39.1865H107.712V37.6865H107.693V39.1865ZM107.675 39.1865H107.693V37.6865H107.675V39.1865ZM107.656 39.1865H107.675V37.6865H107.656V39.1865ZM107.637 39.1865H107.656V37.6865H107.637V39.1865ZM107.619 39.1865H107.637V37.6865H107.619V39.1865ZM107.6 39.1865H107.619V37.6865H107.6V39.1865ZM107.582 39.1865H107.6V37.6865H107.582V39.1865ZM107.563 39.1865H107.582V37.6865H107.563V39.1865ZM107.545 39.1865H107.563V37.6865H107.545V39.1865ZM107.526 39.1865H107.545V37.6865H107.526V39.1865ZM107.508 39.1865H107.526V37.6865H107.508V39.1865ZM107.489 39.1865H107.508V37.6865H107.489V39.1865ZM107.471 39.1865H107.489V37.6865H107.471V39.1865ZM107.452 39.1865H107.471V37.6865H107.452V39.1865ZM107.434 39.1865H107.452V37.6865H107.434V39.1865ZM107.416 39.1865H107.434V37.6865H107.416V39.1865ZM107.397 39.1865H107.416V37.6865H107.397V39.1865ZM107.379 39.1865H107.397V37.6865H107.379V39.1865ZM107.361 39.1865H107.379V37.6865H107.361V39.1865ZM107.342 39.1865H107.361V37.6865H107.342V39.1865ZM107.324 39.1865H107.342V37.6865H107.324V39.1865ZM107.306 39.1865H107.324V37.6865H107.306V39.1865ZM107.288 39.1865H107.306V37.6865H107.288V39.1865ZM107.269 39.1865H107.288V37.6865H107.269V39.1865ZM107.251 39.1865H107.269V37.6865H107.251V39.1865ZM107.233 39.1865H107.251V37.6865H107.233V39.1865ZM107.215 39.1865H107.233V37.6865H107.215V39.1865ZM107.197 39.1865H107.215V37.6865H107.197V39.1865ZM107.179 39.1865H107.197V37.6865H107.179V39.1865ZM107.161 39.1865H107.179V37.6865H107.161V39.1865ZM107.142 39.1865H107.161V37.6865H107.142V39.1865ZM107.124 39.1865H107.142V37.6865H107.124V39.1865ZM107.106 39.1865H107.124V37.6865H107.106V39.1865ZM107.088 39.1865H107.106V37.6865H107.088V39.1865ZM107.07 39.1865H107.088V37.6865H107.07V39.1865ZM107.052 39.1865H107.07V37.6865H107.052V39.1865ZM107.034 39.1865H107.052V37.6865H107.034V39.1865ZM107.016 39.1865H107.034V37.6865H107.016V39.1865ZM106.998 39.1865H107.016V37.6865H106.998V39.1865ZM106.981 39.1865H106.998V37.6865H106.981V39.1865ZM106.963 39.1865H106.981V37.6865H106.963V39.1865ZM106.945 39.1865H106.963V37.6865H106.945V39.1865ZM106.927 39.1865H106.945V37.6865H106.927V39.1865ZM106.909 39.1865H106.927V37.6865H106.909V39.1865ZM106.891 39.1865H106.909V37.6865H106.891V39.1865ZM106.873 39.1865H106.891V37.6865H106.873V39.1865ZM106.856 39.1865H106.873V37.6865H106.856V39.1865ZM106.838 39.1865H106.856V37.6865H106.838V39.1865ZM106.82 39.1865H106.838V37.6865H106.82V39.1865ZM106.802 39.1865H106.82V37.6865H106.802V39.1865ZM106.785 39.1865H106.802V37.6865H106.785V39.1865ZM106.767 39.1865H106.785V37.6865H106.767V39.1865ZM106.749 39.1865H106.767V37.6865H106.749V39.1865ZM106.732 39.1865H106.749V37.6865H106.732V39.1865ZM106.714 39.1865H106.732V37.6865H106.714V39.1865ZM106.697 39.1865H106.714V37.6865H106.697V39.1865ZM106.679 39.1865H106.697V37.6865H106.679V39.1865ZM106.661 39.1865H106.679V37.6865H106.661V39.1865ZM106.644 39.1865H106.661V37.6865H106.644V39.1865ZM106.626 39.1865H106.644V37.6865H106.626V39.1865ZM106.609 39.1865H106.626V37.6865H106.609V39.1865ZM106.591 39.1865H106.609V37.6865H106.591V39.1865ZM106.574 39.1865H106.591V37.6865H106.574V39.1865ZM106.556 39.1865H106.574V37.6865H106.556V39.1865ZM106.539 39.1865H106.556V37.6865H106.539V39.1865ZM106.521 39.1865H106.539V37.6865H106.521V39.1865ZM106.504 39.1865H106.521V37.6865H106.504V39.1865ZM106.487 39.1865H106.504V37.6865H106.487V39.1865ZM106.469 39.1865H106.487V37.6865H106.469V39.1865ZM106.452 39.1865H106.469V37.6865H106.452V39.1865ZM106.435 39.1865H106.452V37.6865H106.435V39.1865ZM106.417 39.1865H106.435V37.6865H106.417V39.1865ZM106.4 39.1865H106.417V37.6865H106.4V39.1865ZM106.383 39.1865H106.4V37.6865H106.383V39.1865ZM106.366 39.1865H106.383V37.6865H106.366V39.1865ZM106.348 39.1865H106.366V37.6865H106.348V39.1865ZM106.331 39.1865H106.348V37.6865H106.331V39.1865ZM106.314 39.1865H106.331V37.6865H106.314V39.1865ZM106.297 39.1865H106.314V37.6865H106.297V39.1865ZM106.28 39.1865H106.297V37.6865H106.28V39.1865ZM106.262 39.1865H106.28V37.6865H106.262V39.1865ZM106.245 39.1865H106.262V37.6865H106.245V39.1865ZM106.228 39.1865H106.245V37.6865H106.228V39.1865ZM106.211 39.1865H106.228V37.6865H106.211V39.1865ZM106.194 39.1865H106.211V37.6865H106.194V39.1865ZM106.177 39.1865H106.194V37.6865H106.177V39.1865ZM106.16 39.1865H106.177V37.6865H106.16V39.1865ZM106.143 39.1865H106.16V37.6865H106.143V39.1865ZM106.126 39.1865H106.143V37.6865H106.126V39.1865ZM106.109 39.1865H106.126V37.6865H106.109V39.1865ZM106.092 39.1865H106.109V37.6865H106.092V39.1865ZM106.075 39.1865H106.092V37.6865H106.075V39.1865ZM106.058 39.1865H106.075V37.6865H106.058V39.1865ZM106.041 39.1865H106.058V37.6865H106.041V39.1865ZM106.025 39.1865H106.041V37.6865H106.025V39.1865ZM106.008 39.1865H106.025V37.6865H106.008V39.1865ZM105.991 39.1865H106.008V37.6865H105.991V39.1865ZM105.974 39.1865H105.991V37.6865H105.974V39.1865ZM105.957 39.1865H105.974V37.6865H105.957V39.1865ZM105.94 39.1865H105.957V37.6865H105.94V39.1865ZM105.924 39.1865H105.94V37.6865H105.924V39.1865ZM105.907 39.1865H105.924V37.6865H105.907V39.1865ZM105.89 39.1865H105.907V37.6865H105.89V39.1865ZM105.874 39.1865H105.89V37.6865H105.874V39.1865ZM105.857 39.1865H105.874V37.6865H105.857V39.1865ZM105.84 39.1865H105.857V37.6865H105.84V39.1865ZM105.824 39.1865H105.84V37.6865H105.824V39.1865ZM105.807 39.1865H105.824V37.6865H105.807V39.1865ZM105.79 39.1865H105.807V37.6865H105.79V39.1865ZM105.774 39.1865H105.79V37.6865H105.774V39.1865ZM105.757 39.1865H105.774V37.6865H105.757V39.1865ZM105.741 39.1865H105.757V37.6865H105.741V39.1865ZM105.724 39.1865H105.741V37.6865H105.724V39.1865ZM105.708 39.1865H105.724V37.6865H105.708V39.1865ZM105.691 39.1865H105.708V37.6865H105.691V39.1865ZM105.675 39.1865H105.691V37.6865H105.675V39.1865ZM105.658 39.1865H105.675V37.6865H105.658V39.1865ZM105.642 39.1865H105.658V37.6865H105.642V39.1865ZM105.625 39.1865H105.642V37.6865H105.625V39.1865ZM105.609 39.1865H105.625V37.6865H105.609V39.1865ZM105.593 39.1865H105.609V37.6865H105.593V39.1865ZM105.576 39.1865H105.593V37.6865H105.576V39.1865ZM105.56 39.1865H105.576V37.6865H105.56V39.1865ZM105.544 39.1865H105.56V37.6865H105.544V39.1865ZM105.527 39.1865H105.544V37.6865H105.527V39.1865ZM105.511 39.1865H105.527V37.6865H105.511V39.1865ZM105.495 39.1865H105.511V37.6865H105.495V39.1865ZM105.478 39.1865H105.495V37.6865H105.478V39.1865ZM105.462 39.1865H105.478V37.6865H105.462V39.1865ZM105.446 39.1865H105.462V37.6865H105.446V39.1865ZM105.43 39.1865H105.446V37.6865H105.43V39.1865ZM105.414 39.1865H105.43V37.6865H105.414V39.1865ZM105.398 39.1865H105.414V37.6865H105.398V39.1865ZM105.381 39.1865H105.398V37.6865H105.381V39.1865ZM105.365 39.1865H105.381V37.6865H105.365V39.1865ZM105.349 39.1865H105.365V37.6865H105.349V39.1865ZM105.333 39.1865H105.349V37.6865H105.333V39.1865ZM105.317 39.1865H105.333V37.6865H105.317V39.1865ZM105.301 39.1865H105.317V37.6865H105.301V39.1865ZM105.285 39.1865H105.301V37.6865H105.285V39.1865ZM105.269 39.1865H105.285V37.6865H105.269V39.1865ZM105.253 39.1865H105.269V37.6865H105.253V39.1865ZM105.237 39.1865H105.253V37.6865H105.237V39.1865ZM105.221 39.1865H105.237V37.6865H105.221V39.1865ZM105.205 39.1865H105.221V37.6865H105.205V39.1865ZM105.189 39.1865H105.205V37.6865H105.189V39.1865ZM105.173 39.1865H105.189V37.6865H105.173V39.1865ZM105.158 39.1865H105.173V37.6865H105.158V39.1865ZM105.142 39.1865H105.158V37.6865H105.142V39.1865ZM105.126 39.1865H105.142V37.6865H105.126V39.1865ZM105.11 39.1865H105.126V37.6865H105.11V39.1865ZM105.094 39.1865H105.11V37.6865H105.094V39.1865ZM105.078 39.1865H105.094V37.6865H105.078V39.1865ZM105.063 39.1865H105.078V37.6865H105.063V39.1865ZM105.047 39.1865H105.063V37.6865H105.047V39.1865ZM105.031 39.1865H105.047V37.6865H105.031V39.1865ZM105.016 39.1865H105.031V37.6865H105.016V39.1865ZM105 39.1865H105.016V37.6865H105V39.1865ZM104.984 39.1865H105V37.6865H104.984V39.1865ZM104.969 39.1865H104.984V37.6865H104.969V39.1865ZM104.953 39.1865H104.969V37.6865H104.953V39.1865ZM104.937 39.1865H104.953V37.6865H104.937V39.1865ZM104.922 39.1865H104.937V37.6865H104.922V39.1865ZM104.906 39.1865H104.922V37.6865H104.906V39.1865ZM104.891 39.1865H104.906V37.6865H104.891V39.1865ZM104.875 39.1865H104.891V37.6865H104.875V39.1865ZM104.86 39.1865H104.875V37.6865H104.86V39.1865ZM104.844 39.1865H104.86V37.6865H104.844V39.1865ZM104.829 39.1865H104.844V37.6865H104.829V39.1865ZM104.813 39.1865H104.829V37.6865H104.813V39.1865ZM104.798 39.1865H104.813V37.6865H104.798V39.1865ZM104.782 39.1865H104.798V37.6865H104.782V39.1865ZM104.767 39.1865H104.782V37.6865H104.767V39.1865ZM104.752 39.1865H104.767V37.6865H104.752V39.1865ZM104.736 39.1865H104.752V37.6865H104.736V39.1865ZM104.721 39.1865H104.736V37.6865H104.721V39.1865ZM104.706 39.1865H104.721V37.6865H104.706V39.1865ZM104.69 39.1865H104.706V37.6865H104.69V39.1865ZM104.675 39.1865H104.69V37.6865H104.675V39.1865ZM104.66 39.1865H104.675V37.6865H104.66V39.1865ZM104.645 39.1865H104.66V37.6865H104.645V39.1865ZM104.629 39.1865H104.645V37.6865H104.629V39.1865ZM104.614 39.1865H104.629V37.6865H104.614V39.1865ZM104.599 39.1865H104.614V37.6865H104.599V39.1865ZM104.584 39.1865H104.599V37.6865H104.584V39.1865ZM104.569 39.1865H104.584V37.6865H104.569V39.1865ZM104.554 39.1865H104.569V37.6865H104.554V39.1865ZM104.538 39.1865H104.554V37.6865H104.538V39.1865ZM104.523 39.1865H104.538V37.6865H104.523V39.1865ZM104.508 39.1865H104.523V37.6865H104.508V39.1865ZM104.493 39.1865H104.508V37.6865H104.493V39.1865ZM104.478 39.1865H104.493V37.6865H104.478V39.1865ZM104.463 39.1865H104.478V37.6865H104.463V39.1865ZM104.448 39.1865H104.463V37.6865H104.448V39.1865ZM104.433 39.1865H104.448V37.6865H104.433V39.1865ZM104.418 39.1865H104.433V37.6865H104.418V39.1865ZM104.403 39.1865H104.418V37.6865H104.403V39.1865ZM104.388 39.1865H104.403V37.6865H104.388V39.1865ZM104.373 39.1865H104.388V37.6865H104.373V39.1865ZM104.359 39.1865H104.373V37.6865H104.359V39.1865ZM104.344 39.1865H104.359V37.6865H104.344V39.1865ZM104.329 39.1865H104.344V37.6865H104.329V39.1865ZM104.314 39.1865H104.329V37.6865H104.314V39.1865ZM104.299 39.1865H104.314V37.6865H104.299V39.1865ZM104.284 39.1865H104.299V37.6865H104.284V39.1865ZM104.27 39.1865H104.284V37.6865H104.27V39.1865ZM104.255 39.1865H104.27V37.6865H104.255V39.1865ZM104.24 39.1865H104.255V37.6865H104.24V39.1865ZM104.226 39.1865H104.24V37.6865H104.226V39.1865ZM104.211 39.1865H104.226V37.6865H104.211V39.1865ZM104.196 39.1865H104.211V37.6865H104.196V39.1865ZM104.182 39.1865H104.196V37.6865H104.182V39.1865ZM104.167 39.1865H104.182V37.6865H104.167V39.1865ZM104.152 39.1865H104.167V37.6865H104.152V39.1865ZM104.138 39.1865H104.152V37.6865H104.138V39.1865ZM104.123 39.1865H104.138V37.6865H104.123V39.1865ZM104.109 39.1865H104.123V37.6865H104.109V39.1865ZM104.094 39.1865H104.109V37.6865H104.094V39.1865ZM104.079 39.1865H104.094V37.6865H104.079V39.1865ZM104.065 39.1865H104.079V37.6865H104.065V39.1865ZM104.05 39.1865H104.065V37.6865H104.05V39.1865ZM104.036 39.1865H104.05V37.6865H104.036V39.1865ZM104.022 39.1865H104.036V37.6865H104.022V39.1865ZM104.007 39.1865H104.022V37.6865H104.007V39.1865ZM103.993 39.1865H104.007V37.6865H103.993V39.1865ZM103.978 39.1865H103.993V37.6865H103.978V39.1865ZM103.964 39.1865H103.978V37.6865H103.964V39.1865ZM103.95 39.1865H103.964V37.6865H103.95V39.1865ZM103.935 39.1865H103.95V37.6865H103.935V39.1865ZM103.921 39.1865H103.935V37.6865H103.921V39.1865ZM103.907 39.1865H103.921V37.6865H103.907V39.1865ZM103.892 39.1865H103.907V37.6865H103.892V39.1865ZM103.878 39.1865H103.892V37.6865H103.878V39.1865ZM103.864 39.1865H103.878V37.6865H103.864V39.1865ZM103.85 39.1865H103.864V37.6865H103.85V39.1865ZM103.836 39.1865H103.85V37.6865H103.836V39.1865ZM103.821 39.1865H103.836V37.6865H103.821V39.1865ZM103.807 39.1865H103.821V37.6865H103.807V39.1865ZM103.793 39.1865H103.807V37.6865H103.793V39.1865ZM103.779 39.1865H103.793V37.6865H103.779V39.1865ZM103.765 39.1865H103.779V37.6865H103.765V39.1865ZM103.751 39.1865H103.765V37.6865H103.751V39.1865ZM103.737 39.1865H103.751V37.6865H103.737V39.1865ZM103.723 39.1865H103.737V37.6865H103.723V39.1865ZM103.709 39.1865H103.723V37.6865H103.709V39.1865ZM103.695 39.1865H103.709V37.6865H103.695V39.1865ZM103.681 39.1865H103.695V37.6865H103.681V39.1865ZM103.667 39.1865H103.681V37.6865H103.667V39.1865ZM103.653 39.1865H103.667V37.6865H103.653V39.1865ZM103.639 39.1865H103.653V37.6865H103.639V39.1865ZM103.625 39.1865H103.639V37.6865H103.625V39.1865ZM103.611 39.1865H103.625V37.6865H103.611V39.1865ZM103.597 39.1865H103.611V37.6865H103.597V39.1865ZM103.583 39.1865H103.597V37.6865H103.583V39.1865ZM103.569 39.1865H103.583V37.6865H103.569V39.1865ZM103.556 39.1865H103.569V37.6865H103.556V39.1865ZM103.542 39.1865H103.556V37.6865H103.542V39.1865ZM103.528 39.1865H103.542V37.6865H103.528V39.1865ZM103.514 39.1865H103.528V37.6865H103.514V39.1865ZM103.5 39.1865H103.514V37.6865H103.5V39.1865ZM103.487 39.1865H103.5V37.6865H103.487V39.1865ZM103.473 39.1865H103.487V37.6865H103.473V39.1865ZM103.459 39.1865H103.473V37.6865H103.459V39.1865ZM103.446 39.1865H103.459V37.6865H103.446V39.1865ZM103.432 39.1865H103.446V37.6865H103.432V39.1865ZM103.418 39.1865H103.432V37.6865H103.418V39.1865ZM103.405 39.1865H103.418V37.6865H103.405V39.1865ZM103.391 39.1865H103.405V37.6865H103.391V39.1865ZM103.378 39.1865H103.391V37.6865H103.378V39.1865ZM103.364 39.1865H103.378V37.6865H103.364V39.1865ZM103.351 39.1865H103.364V37.6865H103.351V39.1865ZM103.337 39.1865H103.351V37.6865H103.337V39.1865ZM103.324 39.1865H103.337V37.6865H103.324V39.1865ZM103.31 39.1865H103.324V37.6865H103.31V39.1865ZM103.297 39.1865H103.31V37.6865H103.297V39.1865ZM103.283 39.1865H103.297V37.6865H103.283V39.1865ZM103.27 39.1865H103.283V37.6865H103.27V39.1865ZM103.256 39.1865H103.27V37.6865H103.256V39.1865ZM103.243 39.1865H103.256V37.6865H103.243V39.1865ZM103.23 39.1865H103.243V37.6865H103.23V39.1865ZM103.216 39.1865H103.23V37.6865H103.216V39.1865ZM103.203 39.1865H103.216V37.6865H103.203V39.1865ZM103.19 39.1865H103.203V37.6865H103.19V39.1865ZM103.176 39.1865H103.19V37.6865H103.176V39.1865ZM103.163 39.1865H103.176V37.6865H103.163V39.1865ZM103.15 39.1865H103.163V37.6865H103.15V39.1865ZM103.137 39.1865H103.15V37.6865H103.137V39.1865ZM103.123 39.1865H103.137V37.6865H103.123V39.1865ZM103.11 39.1865H103.123V37.6865H103.11V39.1865ZM103.097 39.1865H103.11V37.6865H103.097V39.1865ZM103.084 39.1865H103.097V37.6865H103.084V39.1865ZM103.071 39.1865H103.084V37.6865H103.071V39.1865ZM103.058 39.1865H103.071V37.6865H103.058V39.1865ZM103.044 39.1865H103.058V37.6865H103.044V39.1865ZM103.031 39.1865H103.044V37.6865H103.031V39.1865ZM103.018 39.1865H103.031V37.6865H103.018V39.1865ZM103.005 39.1865H103.018V37.6865H103.005V39.1865ZM102.992 39.1865H103.005V37.6865H102.992V39.1865ZM102.979 39.1865H102.992V37.6865H102.979V39.1865ZM102.966 39.1865H102.979V37.6865H102.966V39.1865ZM102.953 39.1865H102.966V37.6865H102.953V39.1865ZM102.94 39.1865H102.953V37.6865H102.94V39.1865ZM102.927 39.1865H102.94V37.6865H102.927V39.1865ZM102.914 39.1865H102.927V37.6865H102.914V39.1865ZM102.902 39.1865H102.914V37.6865H102.902V39.1865ZM102.889 39.1865H102.902V37.6865H102.889V39.1865ZM102.876 39.1865H102.889V37.6865H102.876V39.1865ZM102.863 39.1865H102.876V37.6865H102.863V39.1865ZM102.85 39.1865H102.863V37.6865H102.85V39.1865ZM102.837 39.1865H102.85V37.6865H102.837V39.1865ZM102.825 39.1865H102.837V37.6865H102.825V39.1865ZM102.812 39.1865H102.825V37.6865H102.812V39.1865ZM102.799 39.1865H102.812V37.6865H102.799V39.1865ZM102.786 39.1865H102.799V37.6865H102.786V39.1865ZM102.774 39.1865H102.786V37.6865H102.774V39.1865ZM102.761 39.1865H102.774V37.6865H102.761V39.1865ZM102.748 39.1865H102.761V37.6865H102.748V39.1865ZM102.736 39.1865H102.748V37.6865H102.736V39.1865ZM102.723 39.1865H102.736V37.6865H102.723V39.1865ZM102.711 39.1865H102.723V37.6865H102.711V39.1865ZM102.698 39.1865H102.711V37.6865H102.698V39.1865ZM102.685 39.1865H102.698V37.6865H102.685V39.1865ZM102.673 39.1865H102.685V37.6865H102.673V39.1865ZM102.66 39.1865H102.673V37.6865H102.66V39.1865ZM102.648 39.1865H102.66V37.6865H102.648V39.1865ZM102.635 39.1865H102.648V37.6865H102.635V39.1865ZM102.623 39.1865H102.635V37.6865H102.623V39.1865ZM102.61 39.1865H102.623V37.6865H102.61V39.1865ZM102.598 39.1865H102.61V37.6865H102.598V39.1865ZM102.585 39.1865H102.598V37.6865H102.585V39.1865ZM102.573 39.1865H102.585V37.6865H102.573V39.1865ZM102.561 39.1865H102.573V37.6865H102.561V39.1865ZM102.548 39.1865H102.561V37.6865H102.548V39.1865ZM102.536 39.1865H102.548V37.6865H102.536V39.1865ZM102.524 39.1865H102.536V37.6865H102.524V39.1865ZM102.511 39.1865H102.524V37.6865H102.511V39.1865ZM102.499 39.1865H102.511V37.6865H102.499V39.1865ZM102.487 39.1865H102.499V37.6865H102.487V39.1865ZM102.475 39.1865H102.487V37.6865H102.475V39.1865ZM102.462 39.1865H102.475V37.6865H102.462V39.1865ZM102.45 39.1865H102.462V37.6865H102.45V39.1865ZM102.438 39.1865H102.45V37.6865H102.438V39.1865ZM102.426 39.1865H102.438V37.6865H102.426V39.1865ZM102.414 39.1865H102.426V37.6865H102.414V39.1865ZM102.402 39.1865H102.414V37.6865H102.402V39.1865ZM102.389 39.1865H102.402V37.6865H102.389V39.1865ZM102.377 39.1865H102.389V37.6865H102.377V39.1865ZM102.365 39.1865H102.377V37.6865H102.365V39.1865ZM102.353 39.1865H102.365V37.6865H102.353V39.1865ZM102.341 39.1865H102.353V37.6865H102.341V39.1865ZM102.329 39.1865H102.341V37.6865H102.329V39.1865ZM102.317 39.1865H102.329V37.6865H102.317V39.1865ZM102.305 39.1865H102.317V37.6865H102.305V39.1865ZM102.293 39.1865H102.305V37.6865H102.293V39.1865ZM102.281 39.1865H102.293V37.6865H102.281V39.1865ZM102.269 39.1865H102.281V37.6865H102.269V39.1865ZM102.257 39.1865H102.269V37.6865H102.257V39.1865ZM102.246 39.1865H102.257V37.6865H102.246V39.1865ZM102.234 39.1865H102.246V37.6865H102.234V39.1865ZM102.222 39.1865H102.234V37.6865H102.222V39.1865ZM102.21 39.1865H102.222V37.6865H102.21V39.1865ZM102.198 39.1865H102.21V37.6865H102.198V39.1865ZM102.186 39.1865H102.198V37.6865H102.186V39.1865ZM102.175 39.1865H102.186V37.6865H102.175V39.1865ZM102.163 39.1865H102.175V37.6865H102.163V39.1865ZM102.151 39.1865H102.163V37.6865H102.151V39.1865ZM102.139 39.1865H102.151V37.6865H102.139V39.1865ZM102.128 39.1865H102.139V37.6865H102.128V39.1865ZM102.116 39.1865H102.128V37.6865H102.116V39.1865ZM102.104 39.1865H102.116V37.6865H102.104V39.1865ZM102.093 39.1865H102.104V37.6865H102.093V39.1865ZM102.081 39.1865H102.093V37.6865H102.081V39.1865ZM102.069 39.1865H102.081V37.6865H102.069V39.1865ZM102.058 39.1865H102.069V37.6865H102.058V39.1865ZM102.046 39.1865H102.058V37.6865H102.046V39.1865ZM102.035 39.1865H102.046V37.6865H102.035V39.1865ZM102.023 39.1865H102.035V37.6865H102.023V39.1865ZM102.012 39.1865H102.023V37.6865H102.012V39.1865ZM102 39.1865H102.012V37.6865H102V39.1865ZM101.989 39.1865H102V37.6865H101.989V39.1865ZM101.977 39.1865H101.989V37.6865H101.977V39.1865ZM101.966 39.1865H101.977V37.6865H101.966V39.1865ZM101.955 39.1865H101.966V37.6865H101.955V39.1865ZM101.943 39.1865H101.955V37.6865H101.943V39.1865ZM101.932 39.1865H101.943V37.6865H101.932V39.1865ZM101.92 39.1865H101.932V37.6865H101.92V39.1865ZM101.909 39.1865H101.92V37.6865H101.909V39.1865ZM101.898 39.1865H101.909V37.6865H101.898V39.1865ZM101.886 39.1865H101.898V37.6865H101.886V39.1865ZM101.875 39.1865H101.886V37.6865H101.875V39.1865ZM101.864 39.1865H101.875V37.6865H101.864V39.1865ZM101.853 39.1865H101.864V37.6865H101.853V39.1865ZM101.841 39.1865H101.853V37.6865H101.841V39.1865ZM101.83 39.1865H101.841V37.6865H101.83V39.1865ZM101.819 39.1865H101.83V37.6865H101.819V39.1865ZM101.808 39.1865H101.819V37.6865H101.808V39.1865ZM101.797 39.1865H101.808V37.6865H101.797V39.1865ZM101.786 39.1865H101.797V37.6865H101.786V39.1865ZM101.774 39.1865H101.786V37.6865H101.774V39.1865ZM101.763 39.1865H101.774V37.6865H101.763V39.1865ZM101.752 39.1865H101.763V37.6865H101.752V39.1865ZM101.741 39.1865H101.752V37.6865H101.741V39.1865ZM101.73 39.1865H101.741V37.6865H101.73V39.1865ZM101.719 39.1865H101.73V37.6865H101.719V39.1865ZM101.708 39.1865H101.719V37.6865H101.708V39.1865ZM101.697 39.1865H101.708V37.6865H101.697V39.1865ZM101.686 39.1865H101.697V37.6865H101.686V39.1865ZM101.675 39.1865H101.686V37.6865H101.675V39.1865ZM101.664 39.1865H101.675V37.6865H101.664V39.1865ZM101.654 39.1865H101.664V37.6865H101.654V39.1865ZM101.643 39.1865H101.654V37.6865H101.643V39.1865ZM101.632 39.1865H101.643V37.6865H101.632V39.1865ZM101.621 39.1865H101.632V37.6865H101.621V39.1865ZM101.61 39.1865H101.621V37.6865H101.61V39.1865ZM101.599 39.1865H101.61V37.6865H101.599V39.1865ZM101.589 39.1865H101.599V37.6865H101.589V39.1865ZM101.578 39.1865H101.589V37.6865H101.578V39.1865ZM101.567 39.1865H101.578V37.6865H101.567V39.1865ZM101.556 39.1865H101.567V37.6865H101.556V39.1865ZM101.546 39.1865H101.556V37.6865H101.546V39.1865ZM101.535 39.1865H101.546V37.6865H101.535V39.1865ZM101.524 39.1865H101.535V37.6865H101.524V39.1865ZM101.514 39.1865H101.524V37.6865H101.514V39.1865ZM101.503 39.1865H101.514V37.6865H101.503V39.1865ZM101.492 39.1865H101.503V37.6865H101.492V39.1865ZM101.482 39.1865H101.492V37.6865H101.482V39.1865ZM101.471 39.1865H101.482V37.6865H101.471V39.1865ZM101.461 39.1865H101.471V37.6865H101.461V39.1865ZM101.45 39.1865H101.461V37.6865H101.45V39.1865ZM101.44 39.1865H101.45V37.6865H101.44V39.1865ZM101.429 39.1865H101.44V37.6865H101.429V39.1865ZM101.419 39.1865H101.429V37.6865H101.419V39.1865ZM101.408 39.1865H101.419V37.6865H101.408V39.1865ZM101.398 39.1865H101.408V37.6865H101.398V39.1865ZM101.387 39.1865H101.398V37.6865H101.387V39.1865ZM101.377 39.1865H101.387V37.6865H101.377V39.1865ZM101.366 39.1865H101.377V37.6865H101.366V39.1865ZM101.356 39.1865H101.366V37.6865H101.356V39.1865ZM101.346 39.1865H101.356V37.6865H101.346V39.1865ZM101.335 39.1865H101.346V37.6865H101.335V39.1865ZM101.325 39.1865H101.335V37.6865H101.325V39.1865ZM101.315 39.1865H101.325V37.6865H101.315V39.1865ZM101.304 39.1865H101.315V37.6865H101.304V39.1865ZM101.294 39.1865H101.304V37.6865H101.294V39.1865ZM101.284 39.1865H101.294V37.6865H101.284V39.1865ZM101.274 39.1865H101.284V37.6865H101.274V39.1865ZM101.264 39.1865H101.274V37.6865H101.264V39.1865ZM101.253 39.1865H101.264V37.6865H101.253V39.1865ZM101.243 39.1865H101.253V37.6865H101.243V39.1865ZM101.233 39.1865H101.243V37.6865H101.233V39.1865ZM101.223 39.1865H101.233V37.6865H101.223V39.1865ZM101.213 39.1865H101.223V37.6865H101.213V39.1865ZM101.203 39.1865H101.213V37.6865H101.203V39.1865ZM101.193 39.1865H101.203V37.6865H101.193V39.1865ZM101.183 39.1865H101.193V37.6865H101.183V39.1865ZM101.173 39.1865H101.183V37.6865H101.173V39.1865ZM101.163 39.1865H101.173V37.6865H101.163V39.1865ZM101.153 39.1865H101.163V37.6865H101.153V39.1865ZM101.143 39.1865H101.153V37.6865H101.143V39.1865ZM101.133 39.1865H101.143V37.6865H101.133V39.1865ZM101.123 39.1865H101.133V37.6865H101.123V39.1865ZM101.113 39.1865H101.123V37.6865H101.113V39.1865ZM101.103 39.1865H101.113V37.6865H101.103V39.1865ZM101.093 39.1865H101.103V37.6865H101.093V39.1865ZM101.083 39.1865H101.093V37.6865H101.083V39.1865ZM101.073 39.1865H101.083V37.6865H101.073V39.1865ZM101.064 39.1865H101.073V37.6865H101.064V39.1865ZM101.054 39.1865H101.064V37.6865H101.054V39.1865ZM101.044 39.1865H101.054V37.6865H101.044V39.1865ZM101.034 39.1865H101.044V37.6865H101.034V39.1865ZM101.024 39.1865H101.034V37.6865H101.024V39.1865ZM101.015 39.1865H101.024V37.6865H101.015V39.1865ZM101.005 39.1865H101.015V37.6865H101.005V39.1865ZM100.995 39.1865H101.005V37.6865H100.995V39.1865ZM100.986 39.1865H100.995V37.6865H100.986V39.1865ZM100.976 39.1865H100.986V37.6865H100.976V39.1865ZM100.966 39.1865H100.976V37.6865H100.966V39.1865ZM100.957 39.1865H100.966V37.6865H100.957V39.1865ZM100.947 39.1865H100.957V37.6865H100.947V39.1865ZM100.938 39.1865H100.947V37.6865H100.938V39.1865ZM100.928 39.1865H100.938V37.6865H100.928V39.1865ZM100.918 39.1865H100.928V37.6865H100.918V39.1865ZM100.909 39.1865H100.918V37.6865H100.909V39.1865ZM100.899 39.1865H100.909V37.6865H100.899V39.1865ZM100.89 39.1865H100.899V37.6865H100.89V39.1865ZM100.14 36.9365V38.4365H101.64V36.9365H100.14ZM100.899 36.1865H100.89V37.6865H100.899V36.1865ZM100.909 36.1865H100.899V37.6865H100.909V36.1865ZM100.918 36.1865H100.909V37.6865H100.918V36.1865ZM100.928 36.1865H100.918V37.6865H100.928V36.1865ZM100.938 36.1865H100.928V37.6865H100.938V36.1865ZM100.947 36.1865H100.938V37.6865H100.947V36.1865ZM100.957 36.1865H100.947V37.6865H100.957V36.1865ZM100.966 36.1865H100.957V37.6865H100.966V36.1865ZM100.976 36.1865H100.966V37.6865H100.976V36.1865ZM100.986 36.1865H100.976V37.6865H100.986V36.1865ZM100.995 36.1865H100.986V37.6865H100.995V36.1865ZM101.005 36.1865H100.995V37.6865H101.005V36.1865ZM101.015 36.1865H101.005V37.6865H101.015V36.1865ZM101.024 36.1865H101.015V37.6865H101.024V36.1865ZM101.034 36.1865H101.024V37.6865H101.034V36.1865ZM101.044 36.1865H101.034V37.6865H101.044V36.1865ZM101.054 36.1865H101.044V37.6865H101.054V36.1865ZM101.064 36.1865H101.054V37.6865H101.064V36.1865ZM101.073 36.1865H101.064V37.6865H101.073V36.1865ZM101.083 36.1865H101.073V37.6865H101.083V36.1865ZM101.093 36.1865H101.083V37.6865H101.093V36.1865ZM101.103 36.1865H101.093V37.6865H101.103V36.1865ZM101.113 36.1865H101.103V37.6865H101.113V36.1865ZM101.123 36.1865H101.113V37.6865H101.123V36.1865ZM101.133 36.1865H101.123V37.6865H101.133V36.1865ZM101.143 36.1865H101.133V37.6865H101.143V36.1865ZM101.153 36.1865H101.143V37.6865H101.153V36.1865ZM101.163 36.1865H101.153V37.6865H101.163V36.1865ZM101.173 36.1865H101.163V37.6865H101.173V36.1865ZM101.183 36.1865H101.173V37.6865H101.183V36.1865ZM101.193 36.1865H101.183V37.6865H101.193V36.1865ZM101.203 36.1865H101.193V37.6865H101.203V36.1865ZM101.213 36.1865H101.203V37.6865H101.213V36.1865ZM101.223 36.1865H101.213V37.6865H101.223V36.1865ZM101.233 36.1865H101.223V37.6865H101.233V36.1865ZM101.243 36.1865H101.233V37.6865H101.243V36.1865ZM101.253 36.1865H101.243V37.6865H101.253V36.1865ZM101.264 36.1865H101.253V37.6865H101.264V36.1865ZM101.274 36.1865H101.264V37.6865H101.274V36.1865ZM101.284 36.1865H101.274V37.6865H101.284V36.1865ZM101.294 36.1865H101.284V37.6865H101.294V36.1865ZM101.304 36.1865H101.294V37.6865H101.304V36.1865ZM101.315 36.1865H101.304V37.6865H101.315V36.1865ZM101.325 36.1865H101.315V37.6865H101.325V36.1865ZM101.335 36.1865H101.325V37.6865H101.335V36.1865ZM101.346 36.1865H101.335V37.6865H101.346V36.1865ZM101.356 36.1865H101.346V37.6865H101.356V36.1865ZM101.366 36.1865H101.356V37.6865H101.366V36.1865ZM101.377 36.1865H101.366V37.6865H101.377V36.1865ZM101.387 36.1865H101.377V37.6865H101.387V36.1865ZM101.398 36.1865H101.387V37.6865H101.398V36.1865ZM101.408 36.1865H101.398V37.6865H101.408V36.1865ZM101.419 36.1865H101.408V37.6865H101.419V36.1865ZM101.429 36.1865H101.419V37.6865H101.429V36.1865ZM101.44 36.1865H101.429V37.6865H101.44V36.1865ZM101.45 36.1865H101.44V37.6865H101.45V36.1865ZM101.461 36.1865H101.45V37.6865H101.461V36.1865ZM101.471 36.1865H101.461V37.6865H101.471V36.1865ZM101.482 36.1865H101.471V37.6865H101.482V36.1865ZM101.492 36.1865H101.482V37.6865H101.492V36.1865ZM101.503 36.1865H101.492V37.6865H101.503V36.1865ZM101.514 36.1865H101.503V37.6865H101.514V36.1865ZM101.524 36.1865H101.514V37.6865H101.524V36.1865ZM101.535 36.1865H101.524V37.6865H101.535V36.1865ZM101.546 36.1865H101.535V37.6865H101.546V36.1865ZM101.556 36.1865H101.546V37.6865H101.556V36.1865ZM101.567 36.1865H101.556V37.6865H101.567V36.1865ZM101.578 36.1865H101.567V37.6865H101.578V36.1865ZM101.589 36.1865H101.578V37.6865H101.589V36.1865ZM101.599 36.1865H101.589V37.6865H101.599V36.1865ZM101.61 36.1865H101.599V37.6865H101.61V36.1865ZM101.621 36.1865H101.61V37.6865H101.621V36.1865ZM101.632 36.1865H101.621V37.6865H101.632V36.1865ZM101.643 36.1865H101.632V37.6865H101.643V36.1865ZM101.654 36.1865H101.643V37.6865H101.654V36.1865ZM101.664 36.1865H101.654V37.6865H101.664V36.1865ZM101.675 36.1865H101.664V37.6865H101.675V36.1865ZM101.686 36.1865H101.675V37.6865H101.686V36.1865ZM101.697 36.1865H101.686V37.6865H101.697V36.1865ZM101.708 36.1865H101.697V37.6865H101.708V36.1865ZM101.719 36.1865H101.708V37.6865H101.719V36.1865ZM101.73 36.1865H101.719V37.6865H101.73V36.1865ZM101.741 36.1865H101.73V37.6865H101.741V36.1865ZM101.752 36.1865H101.741V37.6865H101.752V36.1865ZM101.763 36.1865H101.752V37.6865H101.763V36.1865ZM101.774 36.1865H101.763V37.6865H101.774V36.1865ZM101.786 36.1865H101.774V37.6865H101.786V36.1865ZM101.797 36.1865H101.786V37.6865H101.797V36.1865ZM101.808 36.1865H101.797V37.6865H101.808V36.1865ZM101.819 36.1865H101.808V37.6865H101.819V36.1865ZM101.83 36.1865H101.819V37.6865H101.83V36.1865ZM101.841 36.1865H101.83V37.6865H101.841V36.1865ZM101.853 36.1865H101.841V37.6865H101.853V36.1865ZM101.864 36.1865H101.853V37.6865H101.864V36.1865ZM101.875 36.1865H101.864V37.6865H101.875V36.1865ZM101.886 36.1865H101.875V37.6865H101.886V36.1865ZM101.898 36.1865H101.886V37.6865H101.898V36.1865ZM101.909 36.1865H101.898V37.6865H101.909V36.1865ZM101.92 36.1865H101.909V37.6865H101.92V36.1865ZM101.932 36.1865H101.92V37.6865H101.932V36.1865ZM101.943 36.1865H101.932V37.6865H101.943V36.1865ZM101.955 36.1865H101.943V37.6865H101.955V36.1865ZM101.966 36.1865H101.955V37.6865H101.966V36.1865ZM101.977 36.1865H101.966V37.6865H101.977V36.1865ZM101.989 36.1865H101.977V37.6865H101.989V36.1865ZM102 36.1865H101.989V37.6865H102V36.1865ZM102.012 36.1865H102V37.6865H102.012V36.1865ZM102.023 36.1865H102.012V37.6865H102.023V36.1865ZM102.035 36.1865H102.023V37.6865H102.035V36.1865ZM102.046 36.1865H102.035V37.6865H102.046V36.1865ZM102.058 36.1865H102.046V37.6865H102.058V36.1865ZM102.069 36.1865H102.058V37.6865H102.069V36.1865ZM102.081 36.1865H102.069V37.6865H102.081V36.1865ZM102.093 36.1865H102.081V37.6865H102.093V36.1865ZM102.104 36.1865H102.093V37.6865H102.104V36.1865ZM102.116 36.1865H102.104V37.6865H102.116V36.1865ZM102.128 36.1865H102.116V37.6865H102.128V36.1865ZM102.139 36.1865H102.128V37.6865H102.139V36.1865ZM102.151 36.1865H102.139V37.6865H102.151V36.1865ZM102.163 36.1865H102.151V37.6865H102.163V36.1865ZM102.175 36.1865H102.163V37.6865H102.175V36.1865ZM102.186 36.1865H102.175V37.6865H102.186V36.1865ZM102.198 36.1865H102.186V37.6865H102.198V36.1865ZM102.21 36.1865H102.198V37.6865H102.21V36.1865ZM102.222 36.1865H102.21V37.6865H102.222V36.1865ZM102.234 36.1865H102.222V37.6865H102.234V36.1865ZM102.246 36.1865H102.234V37.6865H102.246V36.1865ZM102.257 36.1865H102.246V37.6865H102.257V36.1865ZM102.269 36.1865H102.257V37.6865H102.269V36.1865ZM102.281 36.1865H102.269V37.6865H102.281V36.1865ZM102.293 36.1865H102.281V37.6865H102.293V36.1865ZM102.305 36.1865H102.293V37.6865H102.305V36.1865ZM102.317 36.1865H102.305V37.6865H102.317V36.1865ZM102.329 36.1865H102.317V37.6865H102.329V36.1865ZM102.341 36.1865H102.329V37.6865H102.341V36.1865ZM102.353 36.1865H102.341V37.6865H102.353V36.1865ZM102.365 36.1865H102.353V37.6865H102.365V36.1865ZM102.377 36.1865H102.365V37.6865H102.377V36.1865ZM102.389 36.1865H102.377V37.6865H102.389V36.1865ZM102.402 36.1865H102.389V37.6865H102.402V36.1865ZM102.414 36.1865H102.402V37.6865H102.414V36.1865ZM102.426 36.1865H102.414V37.6865H102.426V36.1865ZM102.438 36.1865H102.426V37.6865H102.438V36.1865ZM102.45 36.1865H102.438V37.6865H102.45V36.1865ZM102.462 36.1865H102.45V37.6865H102.462V36.1865ZM102.475 36.1865H102.462V37.6865H102.475V36.1865ZM102.487 36.1865H102.475V37.6865H102.487V36.1865ZM102.499 36.1865H102.487V37.6865H102.499V36.1865ZM102.511 36.1865H102.499V37.6865H102.511V36.1865ZM102.524 36.1865H102.511V37.6865H102.524V36.1865ZM102.536 36.1865H102.524V37.6865H102.536V36.1865ZM102.548 36.1865H102.536V37.6865H102.548V36.1865ZM102.561 36.1865H102.548V37.6865H102.561V36.1865ZM102.573 36.1865H102.561V37.6865H102.573V36.1865ZM102.585 36.1865H102.573V37.6865H102.585V36.1865ZM102.598 36.1865H102.585V37.6865H102.598V36.1865ZM102.61 36.1865H102.598V37.6865H102.61V36.1865ZM102.623 36.1865H102.61V37.6865H102.623V36.1865ZM102.635 36.1865H102.623V37.6865H102.635V36.1865ZM102.648 36.1865H102.635V37.6865H102.648V36.1865ZM102.66 36.1865H102.648V37.6865H102.66V36.1865ZM102.673 36.1865H102.66V37.6865H102.673V36.1865ZM102.685 36.1865H102.673V37.6865H102.685V36.1865ZM102.698 36.1865H102.685V37.6865H102.698V36.1865ZM102.711 36.1865H102.698V37.6865H102.711V36.1865ZM102.723 36.1865H102.711V37.6865H102.723V36.1865ZM102.736 36.1865H102.723V37.6865H102.736V36.1865ZM102.748 36.1865H102.736V37.6865H102.748V36.1865ZM102.761 36.1865H102.748V37.6865H102.761V36.1865ZM102.774 36.1865H102.761V37.6865H102.774V36.1865ZM102.786 36.1865H102.774V37.6865H102.786V36.1865ZM102.799 36.1865H102.786V37.6865H102.799V36.1865ZM102.812 36.1865H102.799V37.6865H102.812V36.1865ZM102.825 36.1865H102.812V37.6865H102.825V36.1865ZM102.837 36.1865H102.825V37.6865H102.837V36.1865ZM102.85 36.1865H102.837V37.6865H102.85V36.1865ZM102.863 36.1865H102.85V37.6865H102.863V36.1865ZM102.876 36.1865H102.863V37.6865H102.876V36.1865ZM102.889 36.1865H102.876V37.6865H102.889V36.1865ZM102.902 36.1865H102.889V37.6865H102.902V36.1865ZM102.914 36.1865H102.902V37.6865H102.914V36.1865ZM102.927 36.1865H102.914V37.6865H102.927V36.1865ZM102.94 36.1865H102.927V37.6865H102.94V36.1865ZM102.953 36.1865H102.94V37.6865H102.953V36.1865ZM102.966 36.1865H102.953V37.6865H102.966V36.1865ZM102.979 36.1865H102.966V37.6865H102.979V36.1865ZM102.992 36.1865H102.979V37.6865H102.992V36.1865ZM103.005 36.1865H102.992V37.6865H103.005V36.1865ZM103.018 36.1865H103.005V37.6865H103.018V36.1865ZM103.031 36.1865H103.018V37.6865H103.031V36.1865ZM103.044 36.1865H103.031V37.6865H103.044V36.1865ZM103.058 36.1865H103.044V37.6865H103.058V36.1865ZM103.071 36.1865H103.058V37.6865H103.071V36.1865ZM103.084 36.1865H103.071V37.6865H103.084V36.1865ZM103.097 36.1865H103.084V37.6865H103.097V36.1865ZM103.11 36.1865H103.097V37.6865H103.11V36.1865ZM103.123 36.1865H103.11V37.6865H103.123V36.1865ZM103.137 36.1865H103.123V37.6865H103.137V36.1865ZM103.15 36.1865H103.137V37.6865H103.15V36.1865ZM103.163 36.1865H103.15V37.6865H103.163V36.1865ZM103.176 36.1865H103.163V37.6865H103.176V36.1865ZM103.19 36.1865H103.176V37.6865H103.19V36.1865ZM103.203 36.1865H103.19V37.6865H103.203V36.1865ZM103.216 36.1865H103.203V37.6865H103.216V36.1865ZM103.23 36.1865H103.216V37.6865H103.23V36.1865ZM103.243 36.1865H103.23V37.6865H103.243V36.1865ZM103.256 36.1865H103.243V37.6865H103.256V36.1865ZM103.27 36.1865H103.256V37.6865H103.27V36.1865ZM103.283 36.1865H103.27V37.6865H103.283V36.1865ZM103.297 36.1865H103.283V37.6865H103.297V36.1865ZM103.31 36.1865H103.297V37.6865H103.31V36.1865ZM103.324 36.1865H103.31V37.6865H103.324V36.1865ZM103.337 36.1865H103.324V37.6865H103.337V36.1865ZM103.351 36.1865H103.337V37.6865H103.351V36.1865ZM103.364 36.1865H103.351V37.6865H103.364V36.1865ZM103.378 36.1865H103.364V37.6865H103.378V36.1865ZM103.391 36.1865H103.378V37.6865H103.391V36.1865ZM103.405 36.1865H103.391V37.6865H103.405V36.1865ZM103.418 36.1865H103.405V37.6865H103.418V36.1865ZM103.432 36.1865H103.418V37.6865H103.432V36.1865ZM103.446 36.1865H103.432V37.6865H103.446V36.1865ZM103.459 36.1865H103.446V37.6865H103.459V36.1865ZM103.473 36.1865H103.459V37.6865H103.473V36.1865ZM103.487 36.1865H103.473V37.6865H103.487V36.1865ZM103.5 36.1865H103.487V37.6865H103.5V36.1865ZM103.514 36.1865H103.5V37.6865H103.514V36.1865ZM103.528 36.1865H103.514V37.6865H103.528V36.1865ZM103.542 36.1865H103.528V37.6865H103.542V36.1865ZM103.556 36.1865H103.542V37.6865H103.556V36.1865ZM103.569 36.1865H103.556V37.6865H103.569V36.1865ZM103.583 36.1865H103.569V37.6865H103.583V36.1865ZM103.597 36.1865H103.583V37.6865H103.597V36.1865ZM103.611 36.1865H103.597V37.6865H103.611V36.1865ZM103.625 36.1865H103.611V37.6865H103.625V36.1865ZM103.639 36.1865H103.625V37.6865H103.639V36.1865ZM103.653 36.1865H103.639V37.6865H103.653V36.1865ZM103.667 36.1865H103.653V37.6865H103.667V36.1865ZM103.681 36.1865H103.667V37.6865H103.681V36.1865ZM103.695 36.1865H103.681V37.6865H103.695V36.1865ZM103.709 36.1865H103.695V37.6865H103.709V36.1865ZM103.723 36.1865H103.709V37.6865H103.723V36.1865ZM103.737 36.1865H103.723V37.6865H103.737V36.1865ZM103.751 36.1865H103.737V37.6865H103.751V36.1865ZM103.765 36.1865H103.751V37.6865H103.765V36.1865ZM103.779 36.1865H103.765V37.6865H103.779V36.1865ZM103.793 36.1865H103.779V37.6865H103.793V36.1865ZM103.807 36.1865H103.793V37.6865H103.807V36.1865ZM103.821 36.1865H103.807V37.6865H103.821V36.1865ZM103.836 36.1865H103.821V37.6865H103.836V36.1865ZM103.85 36.1865H103.836V37.6865H103.85V36.1865ZM103.864 36.1865H103.85V37.6865H103.864V36.1865ZM103.878 36.1865H103.864V37.6865H103.878V36.1865ZM103.892 36.1865H103.878V37.6865H103.892V36.1865ZM103.907 36.1865H103.892V37.6865H103.907V36.1865ZM103.921 36.1865H103.907V37.6865H103.921V36.1865ZM103.935 36.1865H103.921V37.6865H103.935V36.1865ZM103.95 36.1865H103.935V37.6865H103.95V36.1865ZM103.964 36.1865H103.95V37.6865H103.964V36.1865ZM103.978 36.1865H103.964V37.6865H103.978V36.1865ZM103.993 36.1865H103.978V37.6865H103.993V36.1865ZM104.007 36.1865H103.993V37.6865H104.007V36.1865ZM104.022 36.1865H104.007V37.6865H104.022V36.1865ZM104.036 36.1865H104.022V37.6865H104.036V36.1865ZM104.05 36.1865H104.036V37.6865H104.05V36.1865ZM104.065 36.1865H104.05V37.6865H104.065V36.1865ZM104.079 36.1865H104.065V37.6865H104.079V36.1865ZM104.094 36.1865H104.079V37.6865H104.094V36.1865ZM104.109 36.1865H104.094V37.6865H104.109V36.1865ZM104.123 36.1865H104.109V37.6865H104.123V36.1865ZM104.138 36.1865H104.123V37.6865H104.138V36.1865ZM104.152 36.1865H104.138V37.6865H104.152V36.1865ZM104.167 36.1865H104.152V37.6865H104.167V36.1865ZM104.182 36.1865H104.167V37.6865H104.182V36.1865ZM104.196 36.1865H104.182V37.6865H104.196V36.1865ZM104.211 36.1865H104.196V37.6865H104.211V36.1865ZM104.226 36.1865H104.211V37.6865H104.226V36.1865ZM104.24 36.1865H104.226V37.6865H104.24V36.1865ZM104.255 36.1865H104.24V37.6865H104.255V36.1865ZM104.27 36.1865H104.255V37.6865H104.27V36.1865ZM104.284 36.1865H104.27V37.6865H104.284V36.1865ZM104.299 36.1865H104.284V37.6865H104.299V36.1865ZM104.314 36.1865H104.299V37.6865H104.314V36.1865ZM104.329 36.1865H104.314V37.6865H104.329V36.1865ZM104.344 36.1865H104.329V37.6865H104.344V36.1865ZM104.359 36.1865H104.344V37.6865H104.359V36.1865ZM104.373 36.1865H104.359V37.6865H104.373V36.1865ZM104.388 36.1865H104.373V37.6865H104.388V36.1865ZM104.403 36.1865H104.388V37.6865H104.403V36.1865ZM104.418 36.1865H104.403V37.6865H104.418V36.1865ZM104.433 36.1865H104.418V37.6865H104.433V36.1865ZM104.448 36.1865H104.433V37.6865H104.448V36.1865ZM104.463 36.1865H104.448V37.6865H104.463V36.1865ZM104.478 36.1865H104.463V37.6865H104.478V36.1865ZM104.493 36.1865H104.478V37.6865H104.493V36.1865ZM104.508 36.1865H104.493V37.6865H104.508V36.1865ZM104.523 36.1865H104.508V37.6865H104.523V36.1865ZM104.538 36.1865H104.523V37.6865H104.538V36.1865ZM104.554 36.1865H104.538V37.6865H104.554V36.1865ZM104.569 36.1865H104.554V37.6865H104.569V36.1865ZM104.584 36.1865H104.569V37.6865H104.584V36.1865ZM104.599 36.1865H104.584V37.6865H104.599V36.1865ZM104.614 36.1865H104.599V37.6865H104.614V36.1865ZM104.629 36.1865H104.614V37.6865H104.629V36.1865ZM104.645 36.1865H104.629V37.6865H104.645V36.1865ZM104.66 36.1865H104.645V37.6865H104.66V36.1865ZM104.675 36.1865H104.66V37.6865H104.675V36.1865ZM104.69 36.1865H104.675V37.6865H104.69V36.1865ZM104.706 36.1865H104.69V37.6865H104.706V36.1865ZM104.721 36.1865H104.706V37.6865H104.721V36.1865ZM104.736 36.1865H104.721V37.6865H104.736V36.1865ZM104.752 36.1865H104.736V37.6865H104.752V36.1865ZM104.767 36.1865H104.752V37.6865H104.767V36.1865ZM104.782 36.1865H104.767V37.6865H104.782V36.1865ZM104.798 36.1865H104.782V37.6865H104.798V36.1865ZM104.813 36.1865H104.798V37.6865H104.813V36.1865ZM104.829 36.1865H104.813V37.6865H104.829V36.1865ZM104.844 36.1865H104.829V37.6865H104.844V36.1865ZM104.86 36.1865H104.844V37.6865H104.86V36.1865ZM104.875 36.1865H104.86V37.6865H104.875V36.1865ZM104.891 36.1865H104.875V37.6865H104.891V36.1865ZM104.906 36.1865H104.891V37.6865H104.906V36.1865ZM104.922 36.1865H104.906V37.6865H104.922V36.1865ZM104.937 36.1865H104.922V37.6865H104.937V36.1865ZM104.953 36.1865H104.937V37.6865H104.953V36.1865ZM104.969 36.1865H104.953V37.6865H104.969V36.1865ZM104.984 36.1865H104.969V37.6865H104.984V36.1865ZM105 36.1865H104.984V37.6865H105V36.1865ZM105.016 36.1865H105V37.6865H105.016V36.1865ZM105.031 36.1865H105.016V37.6865H105.031V36.1865ZM105.047 36.1865H105.031V37.6865H105.047V36.1865ZM105.063 36.1865H105.047V37.6865H105.063V36.1865ZM105.078 36.1865H105.063V37.6865H105.078V36.1865ZM105.094 36.1865H105.078V37.6865H105.094V36.1865ZM105.11 36.1865H105.094V37.6865H105.11V36.1865ZM105.126 36.1865H105.11V37.6865H105.126V36.1865ZM105.142 36.1865H105.126V37.6865H105.142V36.1865ZM105.158 36.1865H105.142V37.6865H105.158V36.1865ZM105.173 36.1865H105.158V37.6865H105.173V36.1865ZM105.189 36.1865H105.173V37.6865H105.189V36.1865ZM105.205 36.1865H105.189V37.6865H105.205V36.1865ZM105.221 36.1865H105.205V37.6865H105.221V36.1865ZM105.237 36.1865H105.221V37.6865H105.237V36.1865ZM105.253 36.1865H105.237V37.6865H105.253V36.1865ZM105.269 36.1865H105.253V37.6865H105.269V36.1865ZM105.285 36.1865H105.269V37.6865H105.285V36.1865ZM105.301 36.1865H105.285V37.6865H105.301V36.1865ZM105.317 36.1865H105.301V37.6865H105.317V36.1865ZM105.333 36.1865H105.317V37.6865H105.333V36.1865ZM105.349 36.1865H105.333V37.6865H105.349V36.1865ZM105.365 36.1865H105.349V37.6865H105.365V36.1865ZM105.381 36.1865H105.365V37.6865H105.381V36.1865ZM105.398 36.1865H105.381V37.6865H105.398V36.1865ZM105.414 36.1865H105.398V37.6865H105.414V36.1865ZM105.43 36.1865H105.414V37.6865H105.43V36.1865ZM105.446 36.1865H105.43V37.6865H105.446V36.1865ZM105.462 36.1865H105.446V37.6865H105.462V36.1865ZM105.478 36.1865H105.462V37.6865H105.478V36.1865ZM105.495 36.1865H105.478V37.6865H105.495V36.1865ZM105.511 36.1865H105.495V37.6865H105.511V36.1865ZM105.527 36.1865H105.511V37.6865H105.527V36.1865ZM105.544 36.1865H105.527V37.6865H105.544V36.1865ZM105.56 36.1865H105.544V37.6865H105.56V36.1865ZM105.576 36.1865H105.56V37.6865H105.576V36.1865ZM105.593 36.1865H105.576V37.6865H105.593V36.1865ZM105.609 36.1865H105.593V37.6865H105.609V36.1865ZM105.625 36.1865H105.609V37.6865H105.625V36.1865ZM105.642 36.1865H105.625V37.6865H105.642V36.1865ZM105.658 36.1865H105.642V37.6865H105.658V36.1865ZM105.675 36.1865H105.658V37.6865H105.675V36.1865ZM105.691 36.1865H105.675V37.6865H105.691V36.1865ZM105.708 36.1865H105.691V37.6865H105.708V36.1865ZM105.724 36.1865H105.708V37.6865H105.724V36.1865ZM105.741 36.1865H105.724V37.6865H105.741V36.1865ZM105.757 36.1865H105.741V37.6865H105.757V36.1865ZM105.774 36.1865H105.757V37.6865H105.774V36.1865ZM105.79 36.1865H105.774V37.6865H105.79V36.1865ZM105.807 36.1865H105.79V37.6865H105.807V36.1865ZM105.824 36.1865H105.807V37.6865H105.824V36.1865ZM105.84 36.1865H105.824V37.6865H105.84V36.1865ZM105.857 36.1865H105.84V37.6865H105.857V36.1865ZM105.874 36.1865H105.857V37.6865H105.874V36.1865ZM105.89 36.1865H105.874V37.6865H105.89V36.1865ZM105.907 36.1865H105.89V37.6865H105.907V36.1865ZM105.924 36.1865H105.907V37.6865H105.924V36.1865ZM105.94 36.1865H105.924V37.6865H105.94V36.1865ZM105.957 36.1865H105.94V37.6865H105.957V36.1865ZM105.974 36.1865H105.957V37.6865H105.974V36.1865ZM105.991 36.1865H105.974V37.6865H105.991V36.1865ZM106.008 36.1865H105.991V37.6865H106.008V36.1865ZM106.025 36.1865H106.008V37.6865H106.025V36.1865ZM106.041 36.1865H106.025V37.6865H106.041V36.1865ZM106.058 36.1865H106.041V37.6865H106.058V36.1865ZM106.075 36.1865H106.058V37.6865H106.075V36.1865ZM106.092 36.1865H106.075V37.6865H106.092V36.1865ZM106.109 36.1865H106.092V37.6865H106.109V36.1865ZM106.126 36.1865H106.109V37.6865H106.126V36.1865ZM106.143 36.1865H106.126V37.6865H106.143V36.1865ZM106.16 36.1865H106.143V37.6865H106.16V36.1865ZM106.177 36.1865H106.16V37.6865H106.177V36.1865ZM106.194 36.1865H106.177V37.6865H106.194V36.1865ZM106.211 36.1865H106.194V37.6865H106.211V36.1865ZM106.228 36.1865H106.211V37.6865H106.228V36.1865ZM106.245 36.1865H106.228V37.6865H106.245V36.1865ZM106.262 36.1865H106.245V37.6865H106.262V36.1865ZM106.28 36.1865H106.262V37.6865H106.28V36.1865ZM106.297 36.1865H106.28V37.6865H106.297V36.1865ZM106.314 36.1865H106.297V37.6865H106.314V36.1865ZM106.331 36.1865H106.314V37.6865H106.331V36.1865ZM106.348 36.1865H106.331V37.6865H106.348V36.1865ZM106.366 36.1865H106.348V37.6865H106.366V36.1865ZM106.383 36.1865H106.366V37.6865H106.383V36.1865ZM106.4 36.1865H106.383V37.6865H106.4V36.1865ZM106.417 36.1865H106.4V37.6865H106.417V36.1865ZM106.435 36.1865H106.417V37.6865H106.435V36.1865ZM106.452 36.1865H106.435V37.6865H106.452V36.1865ZM106.469 36.1865H106.452V37.6865H106.469V36.1865ZM106.487 36.1865H106.469V37.6865H106.487V36.1865ZM106.504 36.1865H106.487V37.6865H106.504V36.1865ZM106.521 36.1865H106.504V37.6865H106.521V36.1865ZM106.539 36.1865H106.521V37.6865H106.539V36.1865ZM106.556 36.1865H106.539V37.6865H106.556V36.1865ZM106.574 36.1865H106.556V37.6865H106.574V36.1865ZM106.591 36.1865H106.574V37.6865H106.591V36.1865ZM106.609 36.1865H106.591V37.6865H106.609V36.1865ZM106.626 36.1865H106.609V37.6865H106.626V36.1865ZM106.644 36.1865H106.626V37.6865H106.644V36.1865ZM106.661 36.1865H106.644V37.6865H106.661V36.1865ZM106.679 36.1865H106.661V37.6865H106.679V36.1865ZM106.697 36.1865H106.679V37.6865H106.697V36.1865ZM106.714 36.1865H106.697V37.6865H106.714V36.1865ZM106.732 36.1865H106.714V37.6865H106.732V36.1865ZM106.749 36.1865H106.732V37.6865H106.749V36.1865ZM106.767 36.1865H106.749V37.6865H106.767V36.1865ZM106.785 36.1865H106.767V37.6865H106.785V36.1865ZM106.802 36.1865H106.785V37.6865H106.802V36.1865ZM106.82 36.1865H106.802V37.6865H106.82V36.1865ZM106.838 36.1865H106.82V37.6865H106.838V36.1865ZM106.856 36.1865H106.838V37.6865H106.856V36.1865ZM106.873 36.1865H106.856V37.6865H106.873V36.1865ZM106.891 36.1865H106.873V37.6865H106.891V36.1865ZM106.909 36.1865H106.891V37.6865H106.909V36.1865ZM106.927 36.1865H106.909V37.6865H106.927V36.1865ZM106.945 36.1865H106.927V37.6865H106.945V36.1865ZM106.963 36.1865H106.945V37.6865H106.963V36.1865ZM106.981 36.1865H106.963V37.6865H106.981V36.1865ZM106.998 36.1865H106.981V37.6865H106.998V36.1865ZM107.016 36.1865H106.998V37.6865H107.016V36.1865ZM107.034 36.1865H107.016V37.6865H107.034V36.1865ZM107.052 36.1865H107.034V37.6865H107.052V36.1865ZM107.07 36.1865H107.052V37.6865H107.07V36.1865ZM107.088 36.1865H107.07V37.6865H107.088V36.1865ZM107.106 36.1865H107.088V37.6865H107.106V36.1865ZM107.124 36.1865H107.106V37.6865H107.124V36.1865ZM107.142 36.1865H107.124V37.6865H107.142V36.1865ZM107.161 36.1865H107.142V37.6865H107.161V36.1865ZM107.179 36.1865H107.161V37.6865H107.179V36.1865ZM107.197 36.1865H107.179V37.6865H107.197V36.1865ZM107.215 36.1865H107.197V37.6865H107.215V36.1865ZM107.233 36.1865H107.215V37.6865H107.233V36.1865ZM107.251 36.1865H107.233V37.6865H107.251V36.1865ZM107.269 36.1865H107.251V37.6865H107.269V36.1865ZM107.288 36.1865H107.269V37.6865H107.288V36.1865ZM107.306 36.1865H107.288V37.6865H107.306V36.1865ZM107.324 36.1865H107.306V37.6865H107.324V36.1865ZM107.342 36.1865H107.324V37.6865H107.342V36.1865ZM107.361 36.1865H107.342V37.6865H107.361V36.1865ZM107.379 36.1865H107.361V37.6865H107.379V36.1865ZM107.397 36.1865H107.379V37.6865H107.397V36.1865ZM107.416 36.1865H107.397V37.6865H107.416V36.1865ZM107.434 36.1865H107.416V37.6865H107.434V36.1865ZM107.452 36.1865H107.434V37.6865H107.452V36.1865ZM107.471 36.1865H107.452V37.6865H107.471V36.1865ZM107.489 36.1865H107.471V37.6865H107.489V36.1865ZM107.508 36.1865H107.489V37.6865H107.508V36.1865ZM107.526 36.1865H107.508V37.6865H107.526V36.1865ZM107.545 36.1865H107.526V37.6865H107.545V36.1865ZM107.563 36.1865H107.545V37.6865H107.563V36.1865ZM107.582 36.1865H107.563V37.6865H107.582V36.1865ZM107.6 36.1865H107.582V37.6865H107.6V36.1865ZM107.619 36.1865H107.6V37.6865H107.619V36.1865ZM107.637 36.1865H107.619V37.6865H107.637V36.1865ZM107.656 36.1865H107.637V37.6865H107.656V36.1865ZM107.675 36.1865H107.656V37.6865H107.675V36.1865ZM107.693 36.1865H107.675V37.6865H107.693V36.1865ZM107.712 36.1865H107.693V37.6865H107.712V36.1865ZM107.731 36.1865H107.712V37.6865H107.731V36.1865ZM107.749 36.1865H107.731V37.6865H107.749V36.1865ZM107.768 36.1865H107.749V37.6865H107.768V36.1865ZM107.787 36.1865H107.768V37.6865H107.787V36.1865ZM107.805 36.1865H107.787V37.6865H107.805V36.1865ZM107.824 36.1865H107.805V37.6865H107.824V36.1865ZM107.843 36.1865H107.824V37.6865H107.843V36.1865ZM107.862 36.1865H107.843V37.6865H107.862V36.1865ZM107.881 36.1865H107.862V37.6865H107.881V36.1865ZM107.899 36.1865H107.881V37.6865H107.899V36.1865ZM107.918 36.1865H107.899V37.6865H107.918V36.1865ZM107.937 36.1865H107.918V37.6865H107.937V36.1865ZM107.956 36.1865H107.937V37.6865H107.956V36.1865ZM107.975 36.1865H107.956V37.6865H107.975V36.1865ZM107.994 36.1865H107.975V37.6865H107.994V36.1865ZM108.013 36.1865H107.994V37.6865H108.013V36.1865ZM108.032 36.1865H108.013V37.6865H108.032V36.1865ZM108.051 36.1865H108.032V37.6865H108.051V36.1865ZM108.07 36.1865H108.051V37.6865H108.07V36.1865ZM108.089 36.1865H108.07V37.6865H108.089V36.1865ZM108.108 36.1865H108.089V37.6865H108.108V36.1865ZM108.127 36.1865H108.108V37.6865H108.127V36.1865ZM108.146 36.1865H108.127V37.6865H108.146V36.1865ZM108.165 36.1865H108.146V37.6865H108.165V36.1865ZM108.184 36.1865H108.165V37.6865H108.184V36.1865ZM108.203 36.1865H108.184V37.6865H108.203V36.1865ZM91.4856 36.1865C89.1612 36.1865 87.0878 37.6477 86.306 39.8367L87.7186 40.3412C88.2872 38.7492 89.7951 37.6865 91.4856 37.6865V36.1865ZM91.5006 36.1865H91.4856V37.6865H91.5006V36.1865ZM91.5157 36.1865H91.5006V37.6865H91.5157V36.1865ZM91.5307 36.1865H91.5157V37.6865H91.5307V36.1865ZM91.5458 36.1865H91.5307V37.6865H91.5458V36.1865ZM91.5608 36.1865H91.5458V37.6865H91.5608V36.1865ZM91.5758 36.1865H91.5608V37.6865H91.5758V36.1865ZM91.5908 36.1865H91.5758V37.6865H91.5908V36.1865ZM91.6057 36.1865H91.5908V37.6865H91.6057V36.1865ZM91.6207 36.1865H91.6057V37.6865H91.6207V36.1865ZM91.6356 36.1865H91.6207V37.6865H91.6356V36.1865ZM91.6506 36.1865H91.6356V37.6865H91.6506V36.1865ZM91.6655 36.1865H91.6506V37.6865H91.6655V36.1865ZM91.6804 36.1865H91.6655V37.6865H91.6804V36.1865ZM91.6952 36.1865H91.6804V37.6865H91.6952V36.1865ZM91.7101 36.1865H91.6952V37.6865H91.7101V36.1865ZM91.725 36.1865H91.7101V37.6865H91.725V36.1865ZM91.7398 36.1865H91.725V37.6865H91.7398V36.1865ZM91.7546 36.1865H91.7398V37.6865H91.7546V36.1865ZM91.7694 36.1865H91.7546V37.6865H91.7694V36.1865ZM91.7842 36.1865H91.7694V37.6865H91.7842V36.1865ZM91.799 36.1865H91.7842V37.6865H91.799V36.1865ZM91.8138 36.1865H91.799V37.6865H91.8138V36.1865ZM91.8285 36.1865H91.8138V37.6865H91.8285V36.1865ZM91.8432 36.1865H91.8285V37.6865H91.8432V36.1865ZM91.858 36.1865H91.8432V37.6865H91.858V36.1865ZM91.8727 36.1865H91.858V37.6865H91.8727V36.1865ZM91.8874 36.1865H91.8727V37.6865H91.8874V36.1865ZM91.902 36.1865H91.8874V37.6865H91.902V36.1865ZM91.9167 36.1865H91.902V37.6865H91.9167V36.1865ZM91.9313 36.1865H91.9167V37.6865H91.9313V36.1865ZM91.946 36.1865H91.9313V37.6865H91.946V36.1865ZM91.9606 36.1865H91.946V37.6865H91.9606V36.1865ZM91.9752 36.1865H91.9606V37.6865H91.9752V36.1865ZM91.9898 36.1865H91.9752V37.6865H91.9898V36.1865ZM92.0044 36.1865H91.9898V37.6865H92.0044V36.1865ZM92.0189 36.1865H92.0044V37.6865H92.0189V36.1865ZM92.0335 36.1865H92.0189V37.6865H92.0335V36.1865ZM92.048 36.1865H92.0335V37.6865H92.048V36.1865ZM92.0625 36.1865H92.048V37.6865H92.0625V36.1865ZM92.077 36.1865H92.0625V37.6865H92.077V36.1865ZM92.0915 36.1865H92.077V37.6865H92.0915V36.1865ZM92.1059 36.1865H92.0915V37.6865H92.1059V36.1865ZM92.1204 36.1865H92.1059V37.6865H92.1204V36.1865ZM92.1348 36.1865H92.1204V37.6865H92.1348V36.1865ZM92.1493 36.1865H92.1348V37.6865H92.1493V36.1865ZM92.1637 36.1865H92.1493V37.6865H92.1637V36.1865ZM92.1781 36.1865H92.1637V37.6865H92.1781V36.1865ZM92.1925 36.1865H92.1781V37.6865H92.1925V36.1865ZM92.2068 36.1865H92.1925V37.6865H92.2068V36.1865ZM92.2212 36.1865H92.2068V37.6865H92.2212V36.1865ZM92.2355 36.1865H92.2212V37.6865H92.2355V36.1865ZM92.2498 36.1865H92.2355V37.6865H92.2498V36.1865ZM92.2641 36.1865H92.2498V37.6865H92.2641V36.1865ZM92.2784 36.1865H92.2641V37.6865H92.2784V36.1865ZM92.2927 36.1865H92.2784V37.6865H92.2927V36.1865ZM92.307 36.1865H92.2927V37.6865H92.307V36.1865ZM92.3212 36.1865H92.307V37.6865H92.3212V36.1865ZM92.3355 36.1865H92.3212V37.6865H92.3355V36.1865ZM92.3497 36.1865H92.3355V37.6865H92.3497V36.1865ZM92.3639 36.1865H92.3497V37.6865H92.3639V36.1865ZM92.3781 36.1865H92.3639V37.6865H92.3781V36.1865ZM92.3922 36.1865H92.3781V37.6865H92.3922V36.1865ZM92.4064 36.1865H92.3922V37.6865H92.4064V36.1865ZM92.4205 36.1865H92.4064V37.6865H92.4205V36.1865ZM92.4347 36.1865H92.4205V37.6865H92.4347V36.1865ZM92.4488 36.1865H92.4347V37.6865H92.4488V36.1865ZM92.4629 36.1865H92.4488V37.6865H92.4629V36.1865ZM92.477 36.1865H92.4629V37.6865H92.477V36.1865ZM92.4911 36.1865H92.477V37.6865H92.4911V36.1865ZM92.5051 36.1865H92.4911V37.6865H92.5051V36.1865ZM92.5192 36.1865H92.5051V37.6865H92.5192V36.1865ZM92.5332 36.1865H92.5192V37.6865H92.5332V36.1865ZM92.5472 36.1865H92.5332V37.6865H92.5472V36.1865ZM92.5612 36.1865H92.5472V37.6865H92.5612V36.1865ZM92.5752 36.1865H92.5612V37.6865H92.5752V36.1865ZM92.5891 36.1865H92.5752V37.6865H92.5891V36.1865ZM92.6031 36.1865H92.5891V37.6865H92.6031V36.1865ZM92.617 36.1865H92.6031V37.6865H92.617V36.1865ZM92.631 36.1865H92.617V37.6865H92.631V36.1865ZM92.6449 36.1865H92.631V37.6865H92.6449V36.1865ZM92.6588 36.1865H92.6449V37.6865H92.6588V36.1865ZM92.6726 36.1865H92.6588V37.6865H92.6726V36.1865ZM92.6865 36.1865H92.6726V37.6865H92.6865V36.1865ZM92.7004 36.1865H92.6865V37.6865H92.7004V36.1865ZM92.7142 36.1865H92.7004V37.6865H92.7142V36.1865ZM92.728 36.1865H92.7142V37.6865H92.728V36.1865ZM92.7418 36.1865H92.728V37.6865H92.7418V36.1865ZM92.7556 36.1865H92.7418V37.6865H92.7556V36.1865ZM92.7694 36.1865H92.7556V37.6865H92.7694V36.1865ZM92.7832 36.1865H92.7694V37.6865H92.7832V36.1865ZM92.7969 36.1865H92.7832V37.6865H92.7969V36.1865ZM92.8106 36.1865H92.7969V37.6865H92.8106V36.1865ZM92.8244 36.1865H92.8106V37.6865H92.8244V36.1865ZM92.8381 36.1865H92.8244V37.6865H92.8381V36.1865ZM92.8517 36.1865H92.8381V37.6865H92.8517V36.1865ZM92.8654 36.1865H92.8517V37.6865H92.8654V36.1865ZM92.8791 36.1865H92.8654V37.6865H92.8791V36.1865ZM92.8927 36.1865H92.8791V37.6865H92.8927V36.1865ZM92.9064 36.1865H92.8927V37.6865H92.9064V36.1865ZM92.92 36.1865H92.9064V37.6865H92.92V36.1865ZM92.9336 36.1865H92.92V37.6865H92.9336V36.1865ZM92.9472 36.1865H92.9336V37.6865H92.9472V36.1865ZM92.9607 36.1865H92.9472V37.6865H92.9607V36.1865ZM92.9743 36.1865H92.9607V37.6865H92.9743V36.1865ZM92.9878 36.1865H92.9743V37.6865H92.9878V36.1865ZM93.0013 36.1865H92.9878V37.6865H93.0013V36.1865ZM93.0149 36.1865H93.0013V37.6865H93.0149V36.1865ZM93.0284 36.1865H93.0149V37.6865H93.0284V36.1865ZM93.0418 36.1865H93.0284V37.6865H93.0418V36.1865ZM93.0553 36.1865H93.0418V37.6865H93.0553V36.1865ZM93.0688 36.1865H93.0553V37.6865H93.0688V36.1865ZM93.0822 36.1865H93.0688V37.6865H93.0822V36.1865ZM93.0956 36.1865H93.0822V37.6865H93.0956V36.1865ZM93.109 36.1865H93.0956V37.6865H93.109V36.1865ZM93.1224 36.1865H93.109V37.6865H93.1224V36.1865ZM93.1358 36.1865H93.1224V37.6865H93.1358V36.1865ZM93.1492 36.1865H93.1358V37.6865H93.1492V36.1865ZM93.1625 36.1865H93.1492V37.6865H93.1625V36.1865ZM93.1759 36.1865H93.1625V37.6865H93.1759V36.1865ZM93.1892 36.1865H93.1759V37.6865H93.1892V36.1865ZM93.2025 36.1865H93.1892V37.6865H93.2025V36.1865ZM93.2158 36.1865H93.2025V37.6865H93.2158V36.1865ZM93.229 36.1865H93.2158V37.6865H93.229V36.1865ZM93.2423 36.1865H93.229V37.6865H93.2423V36.1865ZM93.2556 36.1865H93.2423V37.6865H93.2556V36.1865ZM93.2688 36.1865H93.2556V37.6865H93.2688V36.1865ZM93.282 36.1865H93.2688V37.6865H93.282V36.1865ZM93.2952 36.1865H93.282V37.6865H93.2952V36.1865ZM93.3084 36.1865H93.2952V37.6865H93.3084V36.1865ZM93.3216 36.1865H93.3084V37.6865H93.3216V36.1865ZM93.3347 36.1865H93.3216V37.6865H93.3347V36.1865ZM93.3479 36.1865H93.3347V37.6865H93.3479V36.1865ZM93.361 36.1865H93.3479V37.6865H93.361V36.1865ZM93.3741 36.1865H93.361V37.6865H93.3741V36.1865ZM93.3872 36.1865H93.3741V37.6865H93.3872V36.1865ZM93.4003 36.1865H93.3872V37.6865H93.4003V36.1865ZM93.4134 36.1865H93.4003V37.6865H93.4134V36.1865ZM93.4264 36.1865H93.4134V37.6865H93.4264V36.1865ZM93.4395 36.1865H93.4264V37.6865H93.4395V36.1865ZM93.4525 36.1865H93.4395V37.6865H93.4525V36.1865ZM93.4655 36.1865H93.4525V37.6865H93.4655V36.1865ZM93.4785 36.1865H93.4655V37.6865H93.4785V36.1865ZM93.4915 36.1865H93.4785V37.6865H93.4915V36.1865ZM93.5044 36.1865H93.4915V37.6865H93.5044V36.1865ZM93.5174 36.1865H93.5044V37.6865H93.5174V36.1865ZM93.5303 36.1865H93.5174V37.6865H93.5303V36.1865ZM93.5433 36.1865H93.5303V37.6865H93.5433V36.1865ZM93.5562 36.1865H93.5433V37.6865H93.5562V36.1865ZM93.5691 36.1865H93.5562V37.6865H93.5691V36.1865ZM93.5819 36.1865H93.5691V37.6865H93.5819V36.1865ZM93.5948 36.1865H93.5819V37.6865H93.5948V36.1865ZM93.6077 36.1865H93.5948V37.6865H93.6077V36.1865ZM93.6205 36.1865H93.6077V37.6865H93.6205V36.1865ZM93.6333 36.1865H93.6205V37.6865H93.6333V36.1865ZM93.6461 36.1865H93.6333V37.6865H93.6461V36.1865ZM93.6589 36.1865H93.6461V37.6865H93.6589V36.1865ZM93.6717 36.1865H93.6589V37.6865H93.6717V36.1865ZM93.6844 36.1865H93.6717V37.6865H93.6844V36.1865ZM93.6972 36.1865H93.6844V37.6865H93.6972V36.1865ZM93.7099 36.1865H93.6972V37.6865H93.7099V36.1865ZM93.7226 36.1865H93.7099V37.6865H93.7226V36.1865ZM93.7353 36.1865H93.7226V37.6865H93.7353V36.1865ZM93.748 36.1865H93.7353V37.6865H93.748V36.1865ZM93.7607 36.1865H93.748V37.6865H93.7607V36.1865ZM93.7734 36.1865H93.7607V37.6865H93.7734V36.1865ZM93.786 36.1865H93.7734V37.6865H93.786V36.1865ZM93.7986 36.1865H93.786V37.6865H93.7986V36.1865ZM93.8112 36.1865H93.7986V37.6865H93.8112V36.1865ZM93.8238 36.1865H93.8112V37.6865H93.8238V36.1865ZM93.8364 36.1865H93.8238V37.6865H93.8364V36.1865ZM93.849 36.1865H93.8364V37.6865H93.849V36.1865ZM93.8615 36.1865H93.849V37.6865H93.8615V36.1865ZM93.8741 36.1865H93.8615V37.6865H93.8741V36.1865ZM93.8866 36.1865H93.8741V37.6865H93.8866V36.1865ZM93.8991 36.1865H93.8866V37.6865H93.8991V36.1865ZM93.9116 36.1865H93.8991V37.6865H93.9116V36.1865ZM93.9241 36.1865H93.9116V37.6865H93.9241V36.1865ZM93.9366 36.1865H93.9241V37.6865H93.9366V36.1865ZM93.949 36.1865H93.9366V37.6865H93.949V36.1865ZM93.9615 36.1865H93.949V37.6865H93.9615V36.1865ZM93.9739 36.1865H93.9615V37.6865H93.9739V36.1865ZM93.9863 36.1865H93.9739V37.6865H93.9863V36.1865ZM93.9987 36.1865H93.9863V37.6865H93.9987V36.1865ZM94.0111 36.1865H93.9987V37.6865H94.0111V36.1865ZM94.0234 36.1865H94.0111V37.6865H94.0234V36.1865ZM94.0358 36.1865H94.0234V37.6865H94.0358V36.1865ZM94.0481 36.1865H94.0358V37.6865H94.0481V36.1865ZM94.0604 36.1865H94.0481V37.6865H94.0604V36.1865ZM94.0727 36.1865H94.0604V37.6865H94.0727V36.1865ZM94.085 36.1865H94.0727V37.6865H94.085V36.1865ZM94.0973 36.1865H94.085V37.6865H94.0973V36.1865ZM94.1096 36.1865H94.0973V37.6865H94.1096V36.1865ZM94.1218 36.1865H94.1096V37.6865H94.1218V36.1865ZM94.134 36.1865H94.1218V37.6865H94.134V36.1865ZM94.1462 36.1865H94.134V37.6865H94.1462V36.1865ZM94.1584 36.1865H94.1462V37.6865H94.1584V36.1865ZM94.1706 36.1865H94.1584V37.6865H94.1706V36.1865ZM94.1828 36.1865H94.1706V37.6865H94.1828V36.1865ZM94.195 36.1865H94.1828V37.6865H94.195V36.1865ZM94.2071 36.1865H94.195V37.6865H94.2071V36.1865ZM94.2192 36.1865H94.2071V37.6865H94.2192V36.1865ZM94.2313 36.1865H94.2192V37.6865H94.2313V36.1865ZM94.2434 36.1865H94.2313V37.6865H94.2434V36.1865ZM94.2555 36.1865H94.2434V37.6865H94.2555V36.1865ZM94.2676 36.1865H94.2555V37.6865H94.2676V36.1865ZM94.2796 36.1865H94.2676V37.6865H94.2796V36.1865ZM94.2917 36.1865H94.2796V37.6865H94.2917V36.1865ZM94.3037 36.1865H94.2917V37.6865H94.3037V36.1865ZM94.3157 36.1865H94.3037V37.6865H94.3157V36.1865ZM94.3277 36.1865H94.3157V37.6865H94.3277V36.1865ZM94.3397 36.1865H94.3277V37.6865H94.3397V36.1865ZM94.3517 36.1865H94.3397V37.6865H94.3517V36.1865ZM94.3636 36.1865H94.3517V37.6865H94.3636V36.1865ZM94.3756 36.1865H94.3636V37.6865H94.3756V36.1865ZM94.3875 36.1865H94.3756V37.6865H94.3875V36.1865ZM94.3994 36.1865H94.3875V37.6865H94.3994V36.1865ZM94.4113 36.1865H94.3994V37.6865H94.4113V36.1865ZM94.4231 36.1865H94.4113V37.6865H94.4231V36.1865ZM94.435 36.1865H94.4231V37.6865H94.435V36.1865ZM94.4469 36.1865H94.435V37.6865H94.4469V36.1865ZM94.4587 36.1865H94.4469V37.6865H94.4587V36.1865ZM94.4705 36.1865H94.4587V37.6865H94.4705V36.1865ZM94.4823 36.1865H94.4705V37.6865H94.4823V36.1865ZM94.4941 36.1865H94.4823V37.6865H94.4941V36.1865ZM94.5059 36.1865H94.4941V37.6865H94.5059V36.1865ZM94.5176 36.1865H94.5059V37.6865H94.5176V36.1865ZM94.5294 36.1865H94.5176V37.6865H94.5294V36.1865ZM94.5411 36.1865H94.5294V37.6865H94.5411V36.1865ZM94.5528 36.1865H94.5411V37.6865H94.5528V36.1865ZM94.5645 36.1865H94.5528V37.6865H94.5645V36.1865ZM94.5762 36.1865H94.5645V37.6865H94.5762V36.1865ZM94.5879 36.1865H94.5762V37.6865H94.5879V36.1865ZM94.5995 36.1865H94.5879V37.6865H94.5995V36.1865ZM94.6112 36.1865H94.5995V37.6865H94.6112V36.1865ZM94.6228 36.1865H94.6112V37.6865H94.6228V36.1865ZM94.6344 36.1865H94.6228V37.6865H94.6344V36.1865ZM94.646 36.1865H94.6344V37.6865H94.646V36.1865ZM94.6576 36.1865H94.646V37.6865H94.6576V36.1865ZM94.6692 36.1865H94.6576V37.6865H94.6692V36.1865ZM94.6807 36.1865H94.6692V37.6865H94.6807V36.1865ZM94.6923 36.1865H94.6807V37.6865H94.6923V36.1865ZM94.7038 36.1865H94.6923V37.6865H94.7038V36.1865ZM94.7153 36.1865H94.7038V37.6865H94.7153V36.1865ZM94.7268 36.1865H94.7153V37.6865H94.7268V36.1865ZM94.7383 36.1865H94.7268V37.6865H94.7383V36.1865ZM94.7497 36.1865H94.7383V37.6865H94.7497V36.1865ZM94.7612 36.1865H94.7497V37.6865H94.7612V36.1865ZM94.7726 36.1865H94.7612V37.6865H94.7726V36.1865ZM94.784 36.1865H94.7726V37.6865H94.784V36.1865ZM94.7954 36.1865H94.784V37.6865H94.7954V36.1865ZM94.8068 36.1865H94.7954V37.6865H94.8068V36.1865ZM94.8182 36.1865H94.8068V37.6865H94.8182V36.1865ZM94.8296 36.1865H94.8182V37.6865H94.8296V36.1865ZM94.8409 36.1865H94.8296V37.6865H94.8409V36.1865ZM94.8523 36.1865H94.8409V37.6865H94.8523V36.1865ZM94.8636 36.1865H94.8523V37.6865H94.8636V36.1865ZM94.8749 36.1865H94.8636V37.6865H94.8749V36.1865ZM94.8862 36.1865H94.8749V37.6865H94.8862V36.1865ZM94.8974 36.1865H94.8862V37.6865H94.8974V36.1865ZM94.9087 36.1865H94.8974V37.6865H94.9087V36.1865ZM94.9199 36.1865H94.9087V37.6865H94.9199V36.1865ZM94.9312 36.1865H94.9199V37.6865H94.9312V36.1865ZM94.9424 36.1865H94.9312V37.6865H94.9424V36.1865ZM94.9536 36.1865H94.9424V37.6865H94.9536V36.1865ZM94.9648 36.1865H94.9536V37.6865H94.9648V36.1865ZM94.9759 36.1865H94.9648V37.6865H94.9759V36.1865ZM94.9871 36.1865H94.9759V37.6865H94.9871V36.1865ZM94.9982 36.1865H94.9871V37.6865H94.9982V36.1865ZM95.0094 36.1865H94.9982V37.6865H95.0094V36.1865ZM95.0205 36.1865H95.0094V37.6865H95.0205V36.1865ZM95.0316 36.1865H95.0205V37.6865H95.0316V36.1865ZM95.0427 36.1865H95.0316V37.6865H95.0427V36.1865ZM95.0537 36.1865H95.0427V37.6865H95.0537V36.1865ZM95.0648 36.1865H95.0537V37.6865H95.0648V36.1865ZM95.0758 36.1865H95.0648V37.6865H95.0758V36.1865ZM95.0868 36.1865H95.0758V37.6865H95.0868V36.1865ZM95.0978 36.1865H95.0868V37.6865H95.0978V36.1865ZM95.1088 36.1865H95.0978V37.6865H95.1088V36.1865ZM95.1198 36.1865H95.1088V37.6865H95.1198V36.1865ZM95.1308 36.1865H95.1198V37.6865H95.1308V36.1865ZM95.1417 36.1865H95.1308V37.6865H95.1417V36.1865ZM95.1527 36.1865H95.1417V37.6865H95.1527V36.1865ZM95.1636 36.1865H95.1527V37.6865H95.1636V36.1865ZM95.1745 36.1865H95.1636V37.6865H95.1745V36.1865ZM95.1854 36.1865H95.1745V37.6865H95.1854V36.1865ZM95.1963 36.1865H95.1854V37.6865H95.1963V36.1865ZM95.2071 36.1865H95.1963V37.6865H95.2071V36.1865ZM95.218 36.1865H95.2071V37.6865H95.218V36.1865ZM95.2288 36.1865H95.218V37.6865H95.2288V36.1865ZM95.2396 36.1865H95.2288V37.6865H95.2396V36.1865ZM95.2504 36.1865H95.2396V37.6865H95.2504V36.1865ZM95.2612 36.1865H95.2504V37.6865H95.2612V36.1865ZM95.272 36.1865H95.2612V37.6865H95.272V36.1865ZM95.2827 36.1865H95.272V37.6865H95.2827V36.1865ZM95.2935 36.1865H95.2827V37.6865H95.2935V36.1865ZM95.3042 36.1865H95.2935V37.6865H95.3042V36.1865ZM95.3149 36.1865H95.3042V37.6865H95.3149V36.1865ZM95.3256 36.1865H95.3149V37.6865H95.3256V36.1865ZM95.3363 36.1865H95.3256V37.6865H95.3363V36.1865ZM95.347 36.1865H95.3363V37.6865H95.347V36.1865ZM95.3576 36.1865H95.347V37.6865H95.3576V36.1865ZM95.3683 36.1865H95.3576V37.6865H95.3683V36.1865ZM95.3789 36.1865H95.3683V37.6865H95.3789V36.1865ZM95.3895 36.1865H95.3789V37.6865H95.3895V36.1865ZM95.4001 36.1865H95.3895V37.6865H95.4001V36.1865ZM95.4107 36.1865H95.4001V37.6865H95.4107V36.1865ZM95.4212 36.1865H95.4107V37.6865H95.4212V36.1865ZM95.4318 36.1865H95.4212V37.6865H95.4318V36.1865ZM95.4423 36.1865H95.4318V37.6865H95.4423V36.1865ZM95.4529 36.1865H95.4423V37.6865H95.4529V36.1865ZM95.4634 36.1865H95.4529V37.6865H95.4634V36.1865ZM95.4739 36.1865H95.4634V37.6865H95.4739V36.1865ZM95.4843 36.1865H95.4739V37.6865H95.4843V36.1865ZM95.4948 36.1865H95.4843V37.6865H95.4948V36.1865ZM95.5052 36.1865H95.4948V37.6865H95.5052V36.1865ZM95.5157 36.1865H95.5052V37.6865H95.5157V36.1865ZM95.5261 36.1865H95.5157V37.6865H95.5261V36.1865ZM95.5365 36.1865H95.5261V37.6865H95.5365V36.1865ZM95.5469 36.1865H95.5365V37.6865H95.5469V36.1865ZM95.5573 36.1865H95.5469V37.6865H95.5573V36.1865ZM95.5676 36.1865H95.5573V37.6865H95.5676V36.1865ZM95.578 36.1865H95.5676V37.6865H95.578V36.1865ZM95.5883 36.1865H95.578V37.6865H95.5883V36.1865ZM95.5986 36.1865H95.5883V37.6865H95.5986V36.1865ZM95.6089 36.1865H95.5986V37.6865H95.6089V36.1865ZM95.6192 36.1865H95.6089V37.6865H95.6192V36.1865ZM95.6295 36.1865H95.6192V37.6865H95.6295V36.1865ZM95.6397 36.1865H95.6295V37.6865H95.6397V36.1865ZM95.65 36.1865H95.6397V37.6865H95.65V36.1865ZM95.6602 36.1865H95.65V37.6865H95.6602V36.1865ZM95.6704 36.1865H95.6602V37.6865H95.6704V36.1865ZM95.6806 36.1865H95.6704V37.6865H95.6806V36.1865ZM95.6908 36.1865H95.6806V37.6865H95.6908V36.1865ZM95.701 36.1865H95.6908V37.6865H95.701V36.1865ZM95.7111 36.1865H95.701V37.6865H95.7111V36.1865ZM95.7213 36.1865H95.7111V37.6865H95.7213V36.1865ZM95.7314 36.1865H95.7213V37.6865H95.7314V36.1865ZM95.7415 36.1865H95.7314V37.6865H95.7415V36.1865ZM95.7516 36.1865H95.7415V37.6865H95.7516V36.1865ZM95.7617 36.1865H95.7516V37.6865H95.7617V36.1865ZM95.7717 36.1865H95.7617V37.6865H95.7717V36.1865ZM95.7818 36.1865H95.7717V37.6865H95.7818V36.1865ZM95.7918 36.1865H95.7818V37.6865H95.7918V36.1865ZM95.8019 36.1865H95.7918V37.6865H95.8019V36.1865ZM95.8119 36.1865H95.8019V37.6865H95.8119V36.1865ZM95.8219 36.1865H95.8119V37.6865H95.8219V36.1865ZM95.8318 36.1865H95.8219V37.6865H95.8318V36.1865ZM95.8418 36.1865H95.8318V37.6865H95.8418V36.1865ZM95.8517 36.1865H95.8418V37.6865H95.8517V36.1865ZM95.8617 36.1865H95.8517V37.6865H95.8617V36.1865ZM95.8716 36.1865H95.8617V37.6865H95.8716V36.1865ZM95.8815 36.1865H95.8716V37.6865H95.8815V36.1865ZM95.8914 36.1865H95.8815V37.6865H95.8914V36.1865ZM95.9013 36.1865H95.8914V37.6865H95.9013V36.1865ZM95.9111 36.1865H95.9013V37.6865H95.9111V36.1865ZM95.921 36.1865H95.9111V37.6865H95.921V36.1865ZM95.9308 36.1865H95.921V37.6865H95.9308V36.1865ZM95.9406 36.1865H95.9308V37.6865H95.9406V36.1865ZM95.9504 36.1865H95.9406V37.6865H95.9504V36.1865ZM95.9602 36.1865H95.9504V37.6865H95.9602V36.1865ZM95.97 36.1865H95.9602V37.6865H95.97V36.1865ZM95.9797 36.1865H95.97V37.6865H95.9797V36.1865ZM95.9895 36.1865H95.9797V37.6865H95.9895V36.1865ZM95.9992 36.1865H95.9895V37.6865H95.9992V36.1865ZM96.0089 36.1865H95.9992V37.6865H96.0089V36.1865ZM96.0186 36.1865H96.0089V37.6865H96.0186V36.1865ZM96.0283 36.1865H96.0186V37.6865H96.0283V36.1865ZM96.038 36.1865H96.0283V37.6865H96.038V36.1865ZM96.0476 36.1865H96.038V37.6865H96.0476V36.1865ZM96.0573 36.1865H96.0476V37.6865H96.0573V36.1865ZM96.0669 36.1865H96.0573V37.6865H96.0669V36.1865ZM96.0765 36.1865H96.0669V37.6865H96.0765V36.1865ZM96.0861 36.1865H96.0765V37.6865H96.0861V36.1865ZM96.0957 36.1865H96.0861V37.6865H96.0957V36.1865ZM96.1052 36.1865H96.0957V37.6865H96.1052V36.1865ZM96.1148 36.1865H96.1052V37.6865H96.1148V36.1865ZM96.1243 36.1865H96.1148V37.6865H96.1243V36.1865ZM96.1338 36.1865H96.1243V37.6865H96.1338V36.1865ZM96.1433 36.1865H96.1338V37.6865H96.1433V36.1865ZM96.1528 36.1865H96.1433V37.6865H96.1528V36.1865ZM96.1623 36.1865H96.1528V37.6865H96.1623V36.1865ZM96.1718 36.1865H96.1623V37.6865H96.1718V36.1865ZM96.1812 36.1865H96.1718V37.6865H96.1812V36.1865ZM96.1906 36.1865H96.1812V37.6865H96.1906V36.1865ZM96.2001 36.1865H96.1906V37.6865H96.2001V36.1865ZM96.2095 36.1865H96.2001V37.6865H96.2095V36.1865ZM96.2189 36.1865H96.2095V37.6865H96.2189V36.1865ZM96.2282 36.1865H96.2189V37.6865H96.2282V36.1865ZM96.2376 36.1865H96.2282V37.6865H96.2376V36.1865ZM96.2469 36.1865H96.2376V37.6865H96.2469V36.1865ZM96.2563 36.1865H96.2469V37.6865H96.2563V36.1865ZM96.2656 36.1865H96.2563V37.6865H96.2656V36.1865ZM96.2749 36.1865H96.2656V37.6865H96.2749V36.1865ZM96.2842 36.1865H96.2749V37.6865H96.2842V36.1865ZM96.2934 36.1865H96.2842V37.6865H96.2934V36.1865ZM96.3027 36.1865H96.2934V37.6865H96.3027V36.1865ZM96.3119 36.1865H96.3027V37.6865H96.3119V36.1865ZM96.3212 36.1865H96.3119V37.6865H96.3212V36.1865ZM96.3304 36.1865H96.3212V37.6865H96.3304V36.1865ZM96.3396 36.1865H96.3304V37.6865H96.3396V36.1865ZM96.3487 36.1865H96.3396V37.6865H96.3487V36.1865ZM96.3579 36.1865H96.3487V37.6865H96.3579V36.1865ZM96.3671 36.1865H96.3579V37.6865H96.3671V36.1865ZM96.3762 36.1865H96.3671V37.6865H96.3762V36.1865ZM96.3853 36.1865H96.3762V37.6865H96.3853V36.1865ZM96.3944 36.1865H96.3853V37.6865H96.3944V36.1865ZM96.4035 36.1865H96.3944V37.6865H96.4035V36.1865ZM96.4126 36.1865H96.4035V37.6865H96.4126V36.1865ZM96.4217 36.1865H96.4126V37.6865H96.4217V36.1865ZM96.4307 36.1865H96.4217V37.6865H96.4307V36.1865ZM96.4398 36.1865H96.4307V37.6865H96.4398V36.1865ZM96.4488 36.1865H96.4398V37.6865H96.4488V36.1865ZM96.4578 36.1865H96.4488V37.6865H96.4578V36.1865ZM96.4668 36.1865H96.4578V37.6865H96.4668V36.1865ZM96.4758 36.1865H96.4668V37.6865H96.4758V36.1865ZM96.4847 36.1865H96.4758V37.6865H96.4847V36.1865ZM96.4937 36.1865H96.4847V37.6865H96.4937V36.1865ZM96.5026 36.1865H96.4937V37.6865H96.5026V36.1865ZM96.5115 36.1865H96.5026V37.6865H96.5115V36.1865ZM96.5204 36.1865H96.5115V37.6865H96.5204V36.1865ZM96.5293 36.1865H96.5204V37.6865H96.5293V36.1865ZM96.5382 36.1865H96.5293V37.6865H96.5382V36.1865ZM96.547 36.1865H96.5382V37.6865H96.547V36.1865ZM96.5559 36.1865H96.547V37.6865H96.5559V36.1865ZM96.5647 36.1865H96.5559V37.6865H96.5647V36.1865ZM96.5735 36.1865H96.5647V37.6865H96.5735V36.1865ZM96.5823 36.1865H96.5735V37.6865H96.5823V36.1865ZM96.5911 36.1865H96.5823V37.6865H96.5911V36.1865ZM96.5999 36.1865H96.5911V37.6865H96.5999V36.1865ZM96.6086 36.1865H96.5999V37.6865H96.6086V36.1865ZM96.6174 36.1865H96.6086V37.6865H96.6174V36.1865ZM96.6261 36.1865H96.6174V37.6865H96.6261V36.1865ZM96.6348 36.1865H96.6261V37.6865H96.6348V36.1865ZM96.6435 36.1865H96.6348V37.6865H96.6435V36.1865ZM96.6522 36.1865H96.6435V37.6865H96.6522V36.1865ZM96.6608 36.1865H96.6522V37.6865H96.6608V36.1865ZM96.6695 36.1865H96.6608V37.6865H96.6695V36.1865ZM96.6781 36.1865H96.6695V37.6865H96.6781V36.1865ZM96.6868 36.1865H96.6781V37.6865H96.6868V36.1865ZM96.6954 36.1865H96.6868V37.6865H96.6954V36.1865ZM96.704 36.1865H96.6954V37.6865H96.704V36.1865ZM96.7125 36.1865H96.704V37.6865H96.7125V36.1865ZM96.7211 36.1865H96.7125V37.6865H96.7211V36.1865ZM96.7297 36.1865H96.7211V37.6865H96.7297V36.1865ZM96.7382 36.1865H96.7297V37.6865H96.7382V36.1865ZM96.7467 36.1865H96.7382V37.6865H96.7467V36.1865ZM96.7552 36.1865H96.7467V37.6865H96.7552V36.1865ZM96.7637 36.1865H96.7552V37.6865H96.7637V36.1865ZM96.7722 36.1865H96.7637V37.6865H96.7722V36.1865ZM96.7806 36.1865H96.7722V37.6865H96.7806V36.1865ZM96.7891 36.1865H96.7806V37.6865H96.7891V36.1865ZM96.7975 36.1865H96.7891V37.6865H96.7975V36.1865ZM96.8059 36.1865H96.7975V37.6865H96.8059V36.1865ZM96.8143 36.1865H96.8059V37.6865H96.8143V36.1865ZM96.8227 36.1865H96.8143V37.6865H96.8227V36.1865ZM96.8311 36.1865H96.8227V37.6865H96.8311V36.1865ZM96.8395 36.1865H96.8311V37.6865H96.8395V36.1865ZM96.8478 36.1865H96.8395V37.6865H96.8478V36.1865ZM96.8561 36.1865H96.8478V37.6865H96.8561V36.1865ZM96.8644 36.1865H96.8561V37.6865H96.8644V36.1865ZM96.8727 36.1865H96.8644V37.6865H96.8727V36.1865ZM96.881 36.1865H96.8727V37.6865H96.881V36.1865ZM96.8893 36.1865H96.881V37.6865H96.8893V36.1865ZM96.8975 36.1865H96.8893V37.6865H96.8975V36.1865ZM96.9058 36.1865H96.8975V37.6865H96.9058V36.1865ZM96.914 36.1865H96.9058V37.6865H96.914V36.1865ZM96.9222 36.1865H96.914V37.6865H96.9222V36.1865ZM96.9304 36.1865H96.9222V37.6865H96.9304V36.1865ZM96.9386 36.1865H96.9304V37.6865H96.9386V36.1865ZM96.9468 36.1865H96.9386V37.6865H96.9468V36.1865ZM96.9549 36.1865H96.9468V37.6865H96.9549V36.1865ZM96.963 36.1865H96.9549V37.6865H96.963V36.1865ZM96.9712 36.1865H96.963V37.6865H96.9712V36.1865ZM96.9793 36.1865H96.9712V37.6865H96.9793V36.1865ZM96.9874 36.1865H96.9793V37.6865H96.9874V36.1865ZM96.9954 36.1865H96.9874V37.6865H96.9954V36.1865ZM97.0035 36.1865H96.9954V37.6865H97.0035V36.1865ZM97.0116 36.1865H97.0035V37.6865H97.0116V36.1865ZM97.0196 36.1865H97.0116V37.6865H97.0196V36.1865ZM97.0276 36.1865H97.0196V37.6865H97.0276V36.1865ZM97.0356 36.1865H97.0276V37.6865H97.0356V36.1865ZM97.0436 36.1865H97.0356V37.6865H97.0436V36.1865ZM97.0516 36.1865H97.0436V37.6865H97.0516V36.1865ZM97.0595 36.1865H97.0516V37.6865H97.0595V36.1865ZM97.0675 36.1865H97.0595V37.6865H97.0675V36.1865ZM97.0754 36.1865H97.0675V37.6865H97.0754V36.1865ZM97.0833 36.1865H97.0754V37.6865H97.0833V36.1865ZM97.0912 36.1865H97.0833V37.6865H97.0912V36.1865ZM97.0991 36.1865H97.0912V37.6865H97.0991V36.1865ZM97.107 36.1865H97.0991V37.6865H97.107V36.1865ZM97.1148 36.1865H97.107V37.6865H97.1148V36.1865ZM97.1227 36.1865H97.1148V37.6865H97.1227V36.1865ZM97.1305 36.1865H97.1227V37.6865H97.1305V36.1865ZM97.1383 36.1865H97.1305V37.6865H97.1383V36.1865ZM97.1461 36.1865H97.1383V37.6865H97.1461V36.1865ZM97.1539 36.1865H97.1461V37.6865H97.1539V36.1865ZM97.1617 36.1865H97.1539V37.6865H97.1617V36.1865ZM97.1694 36.1865H97.1617V37.6865H97.1694V36.1865ZM97.1772 36.1865H97.1694V37.6865H97.1772V36.1865ZM97.1849 36.1865H97.1772V37.6865H97.1849V36.1865ZM97.1926 36.1865H97.1849V37.6865H97.1926V36.1865ZM97.2003 36.1865H97.1926V37.6865H97.2003V36.1865ZM97.208 36.1865H97.2003V37.6865H97.208V36.1865ZM97.2156 36.1865H97.208V37.6865H97.2156V36.1865ZM97.2233 36.1865H97.2156V37.6865H97.2233V36.1865ZM97.2309 36.1865H97.2233V37.6865H97.2309V36.1865ZM97.2386 36.1865H97.2309V37.6865H97.2386V36.1865ZM97.2462 36.1865H97.2386V37.6865H97.2462V36.1865ZM97.2537 36.1865H97.2462V37.6865H97.2537V36.1865ZM97.2613 36.1865H97.2537V37.6865H97.2613V36.1865ZM97.2689 36.1865H97.2613V37.6865H97.2689V36.1865ZM97.2764 36.1865H97.2689V37.6865H97.2764V36.1865ZM98.0264 38.4365V36.9365H96.5264V38.4365H98.0264ZM97.2689 39.1865H97.2764V37.6865H97.2689V39.1865ZM97.2613 39.1865H97.2689V37.6865H97.2613V39.1865ZM97.2537 39.1865H97.2613V37.6865H97.2537V39.1865ZM97.2462 39.1865H97.2537V37.6865H97.2462V39.1865ZM97.2386 39.1865H97.2462V37.6865H97.2386V39.1865ZM97.2309 39.1865H97.2386V37.6865H97.2309V39.1865ZM97.2233 39.1865H97.2309V37.6865H97.2233V39.1865ZM97.2156 39.1865H97.2233V37.6865H97.2156V39.1865ZM97.208 39.1865H97.2156V37.6865H97.208V39.1865ZM97.2003 39.1865H97.208V37.6865H97.2003V39.1865ZM97.1926 39.1865H97.2003V37.6865H97.1926V39.1865ZM97.1849 39.1865H97.1926V37.6865H97.1849V39.1865ZM97.1772 39.1865H97.1849V37.6865H97.1772V39.1865ZM97.1694 39.1865H97.1772V37.6865H97.1694V39.1865ZM97.1617 39.1865H97.1694V37.6865H97.1617V39.1865ZM97.1539 39.1865H97.1617V37.6865H97.1539V39.1865ZM97.1461 39.1865H97.1539V37.6865H97.1461V39.1865ZM97.1383 39.1865H97.1461V37.6865H97.1383V39.1865ZM97.1305 39.1865H97.1383V37.6865H97.1305V39.1865ZM97.1227 39.1865H97.1305V37.6865H97.1227V39.1865ZM97.1148 39.1865H97.1227V37.6865H97.1148V39.1865ZM97.107 39.1865H97.1148V37.6865H97.107V39.1865ZM97.0991 39.1865H97.107V37.6865H97.0991V39.1865ZM97.0912 39.1865H97.0991V37.6865H97.0912V39.1865ZM97.0833 39.1865H97.0912V37.6865H97.0833V39.1865ZM97.0754 39.1865H97.0833V37.6865H97.0754V39.1865ZM97.0675 39.1865H97.0754V37.6865H97.0675V39.1865ZM97.0595 39.1865H97.0675V37.6865H97.0595V39.1865ZM97.0516 39.1865H97.0595V37.6865H97.0516V39.1865ZM97.0436 39.1865H97.0516V37.6865H97.0436V39.1865ZM97.0356 39.1865H97.0436V37.6865H97.0356V39.1865ZM97.0276 39.1865H97.0356V37.6865H97.0276V39.1865ZM97.0196 39.1865H97.0276V37.6865H97.0196V39.1865ZM97.0116 39.1865H97.0196V37.6865H97.0116V39.1865ZM97.0035 39.1865H97.0116V37.6865H97.0035V39.1865ZM96.9954 39.1865H97.0035V37.6865H96.9954V39.1865ZM96.9874 39.1865H96.9954V37.6865H96.9874V39.1865ZM96.9793 39.1865H96.9874V37.6865H96.9793V39.1865ZM96.9712 39.1865H96.9793V37.6865H96.9712V39.1865ZM96.963 39.1865H96.9712V37.6865H96.963V39.1865ZM96.9549 39.1865H96.963V37.6865H96.9549V39.1865ZM96.9468 39.1865H96.9549V37.6865H96.9468V39.1865ZM96.9386 39.1865H96.9468V37.6865H96.9386V39.1865ZM96.9304 39.1865H96.9386V37.6865H96.9304V39.1865ZM96.9222 39.1865H96.9304V37.6865H96.9222V39.1865ZM96.914 39.1865H96.9222V37.6865H96.914V39.1865ZM96.9058 39.1865H96.914V37.6865H96.9058V39.1865ZM96.8975 39.1865H96.9058V37.6865H96.8975V39.1865ZM96.8893 39.1865H96.8975V37.6865H96.8893V39.1865ZM96.881 39.1865H96.8893V37.6865H96.881V39.1865ZM96.8727 39.1865H96.881V37.6865H96.8727V39.1865ZM96.8644 39.1865H96.8727V37.6865H96.8644V39.1865ZM96.8561 39.1865H96.8644V37.6865H96.8561V39.1865ZM96.8478 39.1865H96.8561V37.6865H96.8478V39.1865ZM96.8395 39.1865H96.8478V37.6865H96.8395V39.1865ZM96.8311 39.1865H96.8395V37.6865H96.8311V39.1865ZM96.8227 39.1865H96.8311V37.6865H96.8227V39.1865ZM96.8143 39.1865H96.8227V37.6865H96.8143V39.1865ZM96.8059 39.1865H96.8143V37.6865H96.8059V39.1865ZM96.7975 39.1865H96.8059V37.6865H96.7975V39.1865ZM96.7891 39.1865H96.7975V37.6865H96.7891V39.1865ZM96.7806 39.1865H96.7891V37.6865H96.7806V39.1865ZM96.7722 39.1865H96.7806V37.6865H96.7722V39.1865ZM96.7637 39.1865H96.7722V37.6865H96.7637V39.1865ZM96.7552 39.1865H96.7637V37.6865H96.7552V39.1865ZM96.7467 39.1865H96.7552V37.6865H96.7467V39.1865ZM96.7382 39.1865H96.7467V37.6865H96.7382V39.1865ZM96.7297 39.1865H96.7382V37.6865H96.7297V39.1865ZM96.7211 39.1865H96.7297V37.6865H96.7211V39.1865ZM96.7125 39.1865H96.7211V37.6865H96.7125V39.1865ZM96.704 39.1865H96.7125V37.6865H96.704V39.1865ZM96.6954 39.1865H96.704V37.6865H96.6954V39.1865ZM96.6868 39.1865H96.6954V37.6865H96.6868V39.1865ZM96.6781 39.1865H96.6868V37.6865H96.6781V39.1865ZM96.6695 39.1865H96.6781V37.6865H96.6695V39.1865ZM96.6608 39.1865H96.6695V37.6865H96.6608V39.1865ZM96.6522 39.1865H96.6608V37.6865H96.6522V39.1865ZM96.6435 39.1865H96.6522V37.6865H96.6435V39.1865ZM96.6348 39.1865H96.6435V37.6865H96.6348V39.1865ZM96.6261 39.1865H96.6348V37.6865H96.6261V39.1865ZM96.6174 39.1865H96.6261V37.6865H96.6174V39.1865ZM96.6086 39.1865H96.6174V37.6865H96.6086V39.1865ZM96.5999 39.1865H96.6086V37.6865H96.5999V39.1865ZM96.5911 39.1865H96.5999V37.6865H96.5911V39.1865ZM96.5823 39.1865H96.5911V37.6865H96.5823V39.1865ZM96.5735 39.1865H96.5823V37.6865H96.5735V39.1865ZM96.5647 39.1865H96.5735V37.6865H96.5647V39.1865ZM96.5559 39.1865H96.5647V37.6865H96.5559V39.1865ZM96.547 39.1865H96.5559V37.6865H96.547V39.1865ZM96.5382 39.1865H96.547V37.6865H96.5382V39.1865ZM96.5293 39.1865H96.5382V37.6865H96.5293V39.1865ZM96.5204 39.1865H96.5293V37.6865H96.5204V39.1865ZM96.5115 39.1865H96.5204V37.6865H96.5115V39.1865ZM96.5026 39.1865H96.5115V37.6865H96.5026V39.1865ZM96.4937 39.1865H96.5026V37.6865H96.4937V39.1865ZM96.4847 39.1865H96.4937V37.6865H96.4847V39.1865ZM96.4758 39.1865H96.4847V37.6865H96.4758V39.1865ZM96.4668 39.1865H96.4758V37.6865H96.4668V39.1865ZM96.4578 39.1865H96.4668V37.6865H96.4578V39.1865ZM96.4488 39.1865H96.4578V37.6865H96.4488V39.1865ZM96.4398 39.1865H96.4488V37.6865H96.4398V39.1865ZM96.4307 39.1865H96.4398V37.6865H96.4307V39.1865ZM96.4217 39.1865H96.4307V37.6865H96.4217V39.1865ZM96.4126 39.1865H96.4217V37.6865H96.4126V39.1865ZM96.4035 39.1865H96.4126V37.6865H96.4035V39.1865ZM96.3944 39.1865H96.4035V37.6865H96.3944V39.1865ZM96.3853 39.1865H96.3944V37.6865H96.3853V39.1865ZM96.3762 39.1865H96.3853V37.6865H96.3762V39.1865ZM96.3671 39.1865H96.3762V37.6865H96.3671V39.1865ZM96.3579 39.1865H96.3671V37.6865H96.3579V39.1865ZM96.3487 39.1865H96.3579V37.6865H96.3487V39.1865ZM96.3396 39.1865H96.3487V37.6865H96.3396V39.1865ZM96.3304 39.1865H96.3396V37.6865H96.3304V39.1865ZM96.3212 39.1865H96.3304V37.6865H96.3212V39.1865ZM96.3119 39.1865H96.3212V37.6865H96.3119V39.1865ZM96.3027 39.1865H96.3119V37.6865H96.3027V39.1865ZM96.2934 39.1865H96.3027V37.6865H96.2934V39.1865ZM96.2842 39.1865H96.2934V37.6865H96.2842V39.1865ZM96.2749 39.1865H96.2842V37.6865H96.2749V39.1865ZM96.2656 39.1865H96.2749V37.6865H96.2656V39.1865ZM96.2563 39.1865H96.2656V37.6865H96.2563V39.1865ZM96.2469 39.1865H96.2563V37.6865H96.2469V39.1865ZM96.2376 39.1865H96.2469V37.6865H96.2376V39.1865ZM96.2282 39.1865H96.2376V37.6865H96.2282V39.1865ZM96.2189 39.1865H96.2282V37.6865H96.2189V39.1865ZM96.2095 39.1865H96.2189V37.6865H96.2095V39.1865ZM96.2001 39.1865H96.2095V37.6865H96.2001V39.1865ZM96.1906 39.1865H96.2001V37.6865H96.1906V39.1865ZM96.1812 39.1865H96.1906V37.6865H96.1812V39.1865ZM96.1718 39.1865H96.1812V37.6865H96.1718V39.1865ZM96.1623 39.1865H96.1718V37.6865H96.1623V39.1865ZM96.1528 39.1865H96.1623V37.6865H96.1528V39.1865ZM96.1433 39.1865H96.1528V37.6865H96.1433V39.1865ZM96.1338 39.1865H96.1433V37.6865H96.1338V39.1865ZM96.1243 39.1865H96.1338V37.6865H96.1243V39.1865ZM96.1148 39.1865H96.1243V37.6865H96.1148V39.1865ZM96.1052 39.1865H96.1148V37.6865H96.1052V39.1865ZM96.0957 39.1865H96.1052V37.6865H96.0957V39.1865ZM96.0861 39.1865H96.0957V37.6865H96.0861V39.1865ZM96.0765 39.1865H96.0861V37.6865H96.0765V39.1865ZM96.0669 39.1865H96.0765V37.6865H96.0669V39.1865ZM96.0573 39.1865H96.0669V37.6865H96.0573V39.1865ZM96.0476 39.1865H96.0573V37.6865H96.0476V39.1865ZM96.038 39.1865H96.0476V37.6865H96.038V39.1865ZM96.0283 39.1865H96.038V37.6865H96.0283V39.1865ZM96.0186 39.1865H96.0283V37.6865H96.0186V39.1865ZM96.0089 39.1865H96.0186V37.6865H96.0089V39.1865ZM95.9992 39.1865H96.0089V37.6865H95.9992V39.1865ZM95.9895 39.1865H95.9992V37.6865H95.9895V39.1865ZM95.9797 39.1865H95.9895V37.6865H95.9797V39.1865ZM95.97 39.1865H95.9797V37.6865H95.97V39.1865ZM95.9602 39.1865H95.97V37.6865H95.9602V39.1865ZM95.9504 39.1865H95.9602V37.6865H95.9504V39.1865ZM95.9406 39.1865H95.9504V37.6865H95.9406V39.1865ZM95.9308 39.1865H95.9406V37.6865H95.9308V39.1865ZM95.921 39.1865H95.9308V37.6865H95.921V39.1865ZM95.9111 39.1865H95.921V37.6865H95.9111V39.1865ZM95.9013 39.1865H95.9111V37.6865H95.9013V39.1865ZM95.8914 39.1865H95.9013V37.6865H95.8914V39.1865ZM95.8815 39.1865H95.8914V37.6865H95.8815V39.1865ZM95.8716 39.1865H95.8815V37.6865H95.8716V39.1865ZM95.8617 39.1865H95.8716V37.6865H95.8617V39.1865ZM95.8517 39.1865H95.8617V37.6865H95.8517V39.1865ZM95.8418 39.1865H95.8517V37.6865H95.8418V39.1865ZM95.8318 39.1865H95.8418V37.6865H95.8318V39.1865ZM95.8219 39.1865H95.8318V37.6865H95.8219V39.1865ZM95.8119 39.1865H95.8219V37.6865H95.8119V39.1865ZM95.8019 39.1865H95.8119V37.6865H95.8019V39.1865ZM95.7918 39.1865H95.8019V37.6865H95.7918V39.1865ZM95.7818 39.1865H95.7918V37.6865H95.7818V39.1865ZM95.7717 39.1865H95.7818V37.6865H95.7717V39.1865ZM95.7617 39.1865H95.7717V37.6865H95.7617V39.1865ZM95.7516 39.1865H95.7617V37.6865H95.7516V39.1865ZM95.7415 39.1865H95.7516V37.6865H95.7415V39.1865ZM95.7314 39.1865H95.7415V37.6865H95.7314V39.1865ZM95.7213 39.1865H95.7314V37.6865H95.7213V39.1865ZM95.7111 39.1865H95.7213V37.6865H95.7111V39.1865ZM95.701 39.1865H95.7111V37.6865H95.701V39.1865ZM95.6908 39.1865H95.701V37.6865H95.6908V39.1865ZM95.6806 39.1865H95.6908V37.6865H95.6806V39.1865ZM95.6704 39.1865H95.6806V37.6865H95.6704V39.1865ZM95.6602 39.1865H95.6704V37.6865H95.6602V39.1865ZM95.65 39.1865H95.6602V37.6865H95.65V39.1865ZM95.6397 39.1865H95.65V37.6865H95.6397V39.1865ZM95.6295 39.1865H95.6397V37.6865H95.6295V39.1865ZM95.6192 39.1865H95.6295V37.6865H95.6192V39.1865ZM95.6089 39.1865H95.6192V37.6865H95.6089V39.1865ZM95.5986 39.1865H95.6089V37.6865H95.5986V39.1865ZM95.5883 39.1865H95.5986V37.6865H95.5883V39.1865ZM95.578 39.1865H95.5883V37.6865H95.578V39.1865ZM95.5676 39.1865H95.578V37.6865H95.5676V39.1865ZM95.5573 39.1865H95.5676V37.6865H95.5573V39.1865ZM95.5469 39.1865H95.5573V37.6865H95.5469V39.1865ZM95.5365 39.1865H95.5469V37.6865H95.5365V39.1865ZM95.5261 39.1865H95.5365V37.6865H95.5261V39.1865ZM95.5157 39.1865H95.5261V37.6865H95.5157V39.1865ZM95.5052 39.1865H95.5157V37.6865H95.5052V39.1865ZM95.4948 39.1865H95.5052V37.6865H95.4948V39.1865ZM95.4843 39.1865H95.4948V37.6865H95.4843V39.1865ZM95.4739 39.1865H95.4843V37.6865H95.4739V39.1865ZM95.4634 39.1865H95.4739V37.6865H95.4634V39.1865ZM95.4529 39.1865H95.4634V37.6865H95.4529V39.1865ZM95.4423 39.1865H95.4529V37.6865H95.4423V39.1865ZM95.4318 39.1865H95.4423V37.6865H95.4318V39.1865ZM95.4212 39.1865H95.4318V37.6865H95.4212V39.1865ZM95.4107 39.1865H95.4212V37.6865H95.4107V39.1865ZM95.4001 39.1865H95.4107V37.6865H95.4001V39.1865ZM95.3895 39.1865H95.4001V37.6865H95.3895V39.1865ZM95.3789 39.1865H95.3895V37.6865H95.3789V39.1865ZM95.3683 39.1865H95.3789V37.6865H95.3683V39.1865ZM95.3576 39.1865H95.3683V37.6865H95.3576V39.1865ZM95.347 39.1865H95.3576V37.6865H95.347V39.1865ZM95.3363 39.1865H95.347V37.6865H95.3363V39.1865ZM95.3256 39.1865H95.3363V37.6865H95.3256V39.1865ZM95.3149 39.1865H95.3256V37.6865H95.3149V39.1865ZM95.3042 39.1865H95.3149V37.6865H95.3042V39.1865ZM95.2935 39.1865H95.3042V37.6865H95.2935V39.1865ZM95.2827 39.1865H95.2935V37.6865H95.2827V39.1865ZM95.272 39.1865H95.2827V37.6865H95.272V39.1865ZM95.2612 39.1865H95.272V37.6865H95.2612V39.1865ZM95.2504 39.1865H95.2612V37.6865H95.2504V39.1865ZM95.2396 39.1865H95.2504V37.6865H95.2396V39.1865ZM95.2288 39.1865H95.2396V37.6865H95.2288V39.1865ZM95.218 39.1865H95.2288V37.6865H95.218V39.1865ZM95.2071 39.1865H95.218V37.6865H95.2071V39.1865ZM95.1963 39.1865H95.2071V37.6865H95.1963V39.1865ZM95.1854 39.1865H95.1963V37.6865H95.1854V39.1865ZM95.1745 39.1865H95.1854V37.6865H95.1745V39.1865ZM95.1636 39.1865H95.1745V37.6865H95.1636V39.1865ZM95.1527 39.1865H95.1636V37.6865H95.1527V39.1865ZM95.1417 39.1865H95.1527V37.6865H95.1417V39.1865ZM95.1308 39.1865H95.1417V37.6865H95.1308V39.1865ZM95.1198 39.1865H95.1308V37.6865H95.1198V39.1865ZM95.1088 39.1865H95.1198V37.6865H95.1088V39.1865ZM95.0978 39.1865H95.1088V37.6865H95.0978V39.1865ZM95.0868 39.1865H95.0978V37.6865H95.0868V39.1865ZM95.0758 39.1865H95.0868V37.6865H95.0758V39.1865ZM95.0648 39.1865H95.0758V37.6865H95.0648V39.1865ZM95.0537 39.1865H95.0648V37.6865H95.0537V39.1865ZM95.0427 39.1865H95.0537V37.6865H95.0427V39.1865ZM95.0316 39.1865H95.0427V37.6865H95.0316V39.1865ZM95.0205 39.1865H95.0316V37.6865H95.0205V39.1865ZM95.0094 39.1865H95.0205V37.6865H95.0094V39.1865ZM94.9982 39.1865H95.0094V37.6865H94.9982V39.1865ZM94.9871 39.1865H94.9982V37.6865H94.9871V39.1865ZM94.9759 39.1865H94.9871V37.6865H94.9759V39.1865ZM94.9648 39.1865H94.9759V37.6865H94.9648V39.1865ZM94.9536 39.1865H94.9648V37.6865H94.9536V39.1865ZM94.9424 39.1865H94.9536V37.6865H94.9424V39.1865ZM94.9312 39.1865H94.9424V37.6865H94.9312V39.1865ZM94.9199 39.1865H94.9312V37.6865H94.9199V39.1865ZM94.9087 39.1865H94.9199V37.6865H94.9087V39.1865ZM94.8974 39.1865H94.9087V37.6865H94.8974V39.1865ZM94.8862 39.1865H94.8974V37.6865H94.8862V39.1865ZM94.8749 39.1865H94.8862V37.6865H94.8749V39.1865ZM94.8636 39.1865H94.8749V37.6865H94.8636V39.1865ZM94.8523 39.1865H94.8636V37.6865H94.8523V39.1865ZM94.8409 39.1865H94.8523V37.6865H94.8409V39.1865ZM94.8296 39.1865H94.8409V37.6865H94.8296V39.1865ZM94.8182 39.1865H94.8296V37.6865H94.8182V39.1865ZM94.8068 39.1865H94.8182V37.6865H94.8068V39.1865ZM94.7954 39.1865H94.8068V37.6865H94.7954V39.1865ZM94.784 39.1865H94.7954V37.6865H94.784V39.1865ZM94.7726 39.1865H94.784V37.6865H94.7726V39.1865ZM94.7612 39.1865H94.7726V37.6865H94.7612V39.1865ZM94.7497 39.1865H94.7612V37.6865H94.7497V39.1865ZM94.7383 39.1865H94.7497V37.6865H94.7383V39.1865ZM94.7268 39.1865H94.7383V37.6865H94.7268V39.1865ZM94.7153 39.1865H94.7268V37.6865H94.7153V39.1865ZM94.7038 39.1865H94.7153V37.6865H94.7038V39.1865ZM94.6923 39.1865H94.7038V37.6865H94.6923V39.1865ZM94.6807 39.1865H94.6923V37.6865H94.6807V39.1865ZM94.6692 39.1865H94.6807V37.6865H94.6692V39.1865ZM94.6576 39.1865H94.6692V37.6865H94.6576V39.1865ZM94.646 39.1865H94.6576V37.6865H94.646V39.1865ZM94.6344 39.1865H94.646V37.6865H94.6344V39.1865ZM94.6228 39.1865H94.6344V37.6865H94.6228V39.1865ZM94.6112 39.1865H94.6228V37.6865H94.6112V39.1865ZM94.5995 39.1865H94.6112V37.6865H94.5995V39.1865ZM94.5879 39.1865H94.5995V37.6865H94.5879V39.1865ZM94.5762 39.1865H94.5879V37.6865H94.5762V39.1865ZM94.5645 39.1865H94.5762V37.6865H94.5645V39.1865ZM94.5528 39.1865H94.5645V37.6865H94.5528V39.1865ZM94.5411 39.1865H94.5528V37.6865H94.5411V39.1865ZM94.5294 39.1865H94.5411V37.6865H94.5294V39.1865ZM94.5176 39.1865H94.5294V37.6865H94.5176V39.1865ZM94.5059 39.1865H94.5176V37.6865H94.5059V39.1865ZM94.4941 39.1865H94.5059V37.6865H94.4941V39.1865ZM94.4823 39.1865H94.4941V37.6865H94.4823V39.1865ZM94.4705 39.1865H94.4823V37.6865H94.4705V39.1865ZM94.4587 39.1865H94.4705V37.6865H94.4587V39.1865ZM94.4469 39.1865H94.4587V37.6865H94.4469V39.1865ZM94.435 39.1865H94.4469V37.6865H94.435V39.1865ZM94.4231 39.1865H94.435V37.6865H94.4231V39.1865ZM94.4113 39.1865H94.4231V37.6865H94.4113V39.1865ZM94.3994 39.1865H94.4113V37.6865H94.3994V39.1865ZM94.3875 39.1865H94.3994V37.6865H94.3875V39.1865ZM94.3756 39.1865H94.3875V37.6865H94.3756V39.1865ZM94.3636 39.1865H94.3756V37.6865H94.3636V39.1865ZM94.3517 39.1865H94.3636V37.6865H94.3517V39.1865ZM94.3397 39.1865H94.3517V37.6865H94.3397V39.1865ZM94.3277 39.1865H94.3397V37.6865H94.3277V39.1865ZM94.3157 39.1865H94.3277V37.6865H94.3157V39.1865ZM94.3037 39.1865H94.3157V37.6865H94.3037V39.1865ZM94.2917 39.1865H94.3037V37.6865H94.2917V39.1865ZM94.2796 39.1865H94.2917V37.6865H94.2796V39.1865ZM94.2676 39.1865H94.2796V37.6865H94.2676V39.1865ZM94.2555 39.1865H94.2676V37.6865H94.2555V39.1865ZM94.2434 39.1865H94.2555V37.6865H94.2434V39.1865ZM94.2313 39.1865H94.2434V37.6865H94.2313V39.1865ZM94.2192 39.1865H94.2313V37.6865H94.2192V39.1865ZM94.2071 39.1865H94.2192V37.6865H94.2071V39.1865ZM94.195 39.1865H94.2071V37.6865H94.195V39.1865ZM94.1828 39.1865H94.195V37.6865H94.1828V39.1865ZM94.1706 39.1865H94.1828V37.6865H94.1706V39.1865ZM94.1584 39.1865H94.1706V37.6865H94.1584V39.1865ZM94.1462 39.1865H94.1584V37.6865H94.1462V39.1865ZM94.134 39.1865H94.1462V37.6865H94.134V39.1865ZM94.1218 39.1865H94.134V37.6865H94.1218V39.1865ZM94.1096 39.1865H94.1218V37.6865H94.1096V39.1865ZM94.0973 39.1865H94.1096V37.6865H94.0973V39.1865ZM94.085 39.1865H94.0973V37.6865H94.085V39.1865ZM94.0727 39.1865H94.085V37.6865H94.0727V39.1865ZM94.0604 39.1865H94.0727V37.6865H94.0604V39.1865ZM94.0481 39.1865H94.0604V37.6865H94.0481V39.1865ZM94.0358 39.1865H94.0481V37.6865H94.0358V39.1865ZM94.0234 39.1865H94.0358V37.6865H94.0234V39.1865ZM94.0111 39.1865H94.0234V37.6865H94.0111V39.1865ZM93.9987 39.1865H94.0111V37.6865H93.9987V39.1865ZM93.9863 39.1865H93.9987V37.6865H93.9863V39.1865ZM93.9739 39.1865H93.9863V37.6865H93.9739V39.1865ZM93.9615 39.1865H93.9739V37.6865H93.9615V39.1865ZM93.949 39.1865H93.9615V37.6865H93.949V39.1865ZM93.9366 39.1865H93.949V37.6865H93.9366V39.1865ZM93.9241 39.1865H93.9366V37.6865H93.9241V39.1865ZM93.9116 39.1865H93.9241V37.6865H93.9116V39.1865ZM93.8991 39.1865H93.9116V37.6865H93.8991V39.1865ZM93.8866 39.1865H93.8991V37.6865H93.8866V39.1865ZM93.8741 39.1865H93.8866V37.6865H93.8741V39.1865ZM93.8615 39.1865H93.8741V37.6865H93.8615V39.1865ZM93.849 39.1865H93.8615V37.6865H93.849V39.1865ZM93.8364 39.1865H93.849V37.6865H93.8364V39.1865ZM93.8238 39.1865H93.8364V37.6865H93.8238V39.1865ZM93.8112 39.1865H93.8238V37.6865H93.8112V39.1865ZM93.7986 39.1865H93.8112V37.6865H93.7986V39.1865ZM93.786 39.1865H93.7986V37.6865H93.786V39.1865ZM93.7734 39.1865H93.786V37.6865H93.7734V39.1865ZM93.7607 39.1865H93.7734V37.6865H93.7607V39.1865ZM93.748 39.1865H93.7607V37.6865H93.748V39.1865ZM93.7353 39.1865H93.748V37.6865H93.7353V39.1865ZM93.7226 39.1865H93.7353V37.6865H93.7226V39.1865ZM93.7099 39.1865H93.7226V37.6865H93.7099V39.1865ZM93.6972 39.1865H93.7099V37.6865H93.6972V39.1865ZM93.6844 39.1865H93.6972V37.6865H93.6844V39.1865ZM93.6717 39.1865H93.6844V37.6865H93.6717V39.1865ZM93.6589 39.1865H93.6717V37.6865H93.6589V39.1865ZM93.6461 39.1865H93.6589V37.6865H93.6461V39.1865ZM93.6333 39.1865H93.6461V37.6865H93.6333V39.1865ZM93.6205 39.1865H93.6333V37.6865H93.6205V39.1865ZM93.6077 39.1865H93.6205V37.6865H93.6077V39.1865ZM93.5948 39.1865H93.6077V37.6865H93.5948V39.1865ZM93.5819 39.1865H93.5948V37.6865H93.5819V39.1865ZM93.5691 39.1865H93.5819V37.6865H93.5691V39.1865ZM93.5562 39.1865H93.5691V37.6865H93.5562V39.1865ZM93.5433 39.1865H93.5562V37.6865H93.5433V39.1865ZM93.5303 39.1865H93.5433V37.6865H93.5303V39.1865ZM93.5174 39.1865H93.5303V37.6865H93.5174V39.1865ZM93.5044 39.1865H93.5174V37.6865H93.5044V39.1865ZM93.4915 39.1865H93.5044V37.6865H93.4915V39.1865ZM93.4785 39.1865H93.4915V37.6865H93.4785V39.1865ZM93.4655 39.1865H93.4785V37.6865H93.4655V39.1865ZM93.4525 39.1865H93.4655V37.6865H93.4525V39.1865ZM93.4395 39.1865H93.4525V37.6865H93.4395V39.1865ZM93.4264 39.1865H93.4395V37.6865H93.4264V39.1865ZM93.4134 39.1865H93.4264V37.6865H93.4134V39.1865ZM93.4003 39.1865H93.4134V37.6865H93.4003V39.1865ZM93.3872 39.1865H93.4003V37.6865H93.3872V39.1865ZM93.3741 39.1865H93.3872V37.6865H93.3741V39.1865ZM93.361 39.1865H93.3741V37.6865H93.361V39.1865ZM93.3479 39.1865H93.361V37.6865H93.3479V39.1865ZM93.3347 39.1865H93.3479V37.6865H93.3347V39.1865ZM93.3216 39.1865H93.3347V37.6865H93.3216V39.1865ZM93.3084 39.1865H93.3216V37.6865H93.3084V39.1865ZM93.2952 39.1865H93.3084V37.6865H93.2952V39.1865ZM93.282 39.1865H93.2952V37.6865H93.282V39.1865ZM93.2688 39.1865H93.282V37.6865H93.2688V39.1865ZM93.2556 39.1865H93.2688V37.6865H93.2556V39.1865ZM93.2423 39.1865H93.2556V37.6865H93.2423V39.1865ZM93.229 39.1865H93.2423V37.6865H93.229V39.1865ZM93.2158 39.1865H93.229V37.6865H93.2158V39.1865ZM93.2025 39.1865H93.2158V37.6865H93.2025V39.1865ZM93.1892 39.1865H93.2025V37.6865H93.1892V39.1865ZM93.1759 39.1865H93.1892V37.6865H93.1759V39.1865ZM93.1625 39.1865H93.1759V37.6865H93.1625V39.1865ZM93.1492 39.1865H93.1625V37.6865H93.1492V39.1865ZM93.1358 39.1865H93.1492V37.6865H93.1358V39.1865ZM93.1224 39.1865H93.1358V37.6865H93.1224V39.1865ZM93.109 39.1865H93.1224V37.6865H93.109V39.1865ZM93.0956 39.1865H93.109V37.6865H93.0956V39.1865ZM93.0822 39.1865H93.0956V37.6865H93.0822V39.1865ZM93.0688 39.1865H93.0822V37.6865H93.0688V39.1865ZM93.0553 39.1865H93.0688V37.6865H93.0553V39.1865ZM93.0418 39.1865H93.0553V37.6865H93.0418V39.1865ZM93.0284 39.1865H93.0418V37.6865H93.0284V39.1865ZM93.0149 39.1865H93.0284V37.6865H93.0149V39.1865ZM93.0013 39.1865H93.0149V37.6865H93.0013V39.1865ZM92.9878 39.1865H93.0013V37.6865H92.9878V39.1865ZM92.9743 39.1865H92.9878V37.6865H92.9743V39.1865ZM92.9607 39.1865H92.9743V37.6865H92.9607V39.1865ZM92.9472 39.1865H92.9607V37.6865H92.9472V39.1865ZM92.9336 39.1865H92.9472V37.6865H92.9336V39.1865ZM92.92 39.1865H92.9336V37.6865H92.92V39.1865ZM92.9064 39.1865H92.92V37.6865H92.9064V39.1865ZM92.8927 39.1865H92.9064V37.6865H92.8927V39.1865ZM92.8791 39.1865H92.8927V37.6865H92.8791V39.1865ZM92.8654 39.1865H92.8791V37.6865H92.8654V39.1865ZM92.8517 39.1865H92.8654V37.6865H92.8517V39.1865ZM92.8381 39.1865H92.8517V37.6865H92.8381V39.1865ZM92.8244 39.1865H92.8381V37.6865H92.8244V39.1865ZM92.8106 39.1865H92.8244V37.6865H92.8106V39.1865ZM92.7969 39.1865H92.8106V37.6865H92.7969V39.1865ZM92.7832 39.1865H92.7969V37.6865H92.7832V39.1865ZM92.7694 39.1865H92.7832V37.6865H92.7694V39.1865ZM92.7556 39.1865H92.7694V37.6865H92.7556V39.1865ZM92.7418 39.1865H92.7556V37.6865H92.7418V39.1865ZM92.728 39.1865H92.7418V37.6865H92.728V39.1865ZM92.7142 39.1865H92.728V37.6865H92.7142V39.1865ZM92.7004 39.1865H92.7142V37.6865H92.7004V39.1865ZM92.6865 39.1865H92.7004V37.6865H92.6865V39.1865ZM92.6726 39.1865H92.6865V37.6865H92.6726V39.1865ZM92.6588 39.1865H92.6726V37.6865H92.6588V39.1865ZM92.6449 39.1865H92.6588V37.6865H92.6449V39.1865ZM92.631 39.1865H92.6449V37.6865H92.631V39.1865ZM92.617 39.1865H92.631V37.6865H92.617V39.1865ZM92.6031 39.1865H92.617V37.6865H92.6031V39.1865ZM92.5891 39.1865H92.6031V37.6865H92.5891V39.1865ZM92.5752 39.1865H92.5891V37.6865H92.5752V39.1865ZM92.5612 39.1865H92.5752V37.6865H92.5612V39.1865ZM92.5472 39.1865H92.5612V37.6865H92.5472V39.1865ZM92.5332 39.1865H92.5472V37.6865H92.5332V39.1865ZM92.5192 39.1865H92.5332V37.6865H92.5192V39.1865ZM92.5051 39.1865H92.5192V37.6865H92.5051V39.1865ZM92.4911 39.1865H92.5051V37.6865H92.4911V39.1865ZM92.477 39.1865H92.4911V37.6865H92.477V39.1865ZM92.4629 39.1865H92.477V37.6865H92.4629V39.1865ZM92.4488 39.1865H92.4629V37.6865H92.4488V39.1865ZM92.4347 39.1865H92.4488V37.6865H92.4347V39.1865ZM92.4205 39.1865H92.4347V37.6865H92.4205V39.1865ZM92.4064 39.1865H92.4205V37.6865H92.4064V39.1865ZM92.3922 39.1865H92.4064V37.6865H92.3922V39.1865ZM92.3781 39.1865H92.3922V37.6865H92.3781V39.1865ZM92.3639 39.1865H92.3781V37.6865H92.3639V39.1865ZM92.3497 39.1865H92.3639V37.6865H92.3497V39.1865ZM92.3355 39.1865H92.3497V37.6865H92.3355V39.1865ZM92.3212 39.1865H92.3355V37.6865H92.3212V39.1865ZM92.307 39.1865H92.3212V37.6865H92.307V39.1865ZM92.2927 39.1865H92.307V37.6865H92.2927V39.1865ZM92.2784 39.1865H92.2927V37.6865H92.2784V39.1865ZM92.2641 39.1865H92.2784V37.6865H92.2641V39.1865ZM92.2498 39.1865H92.2641V37.6865H92.2498V39.1865ZM92.2355 39.1865H92.2498V37.6865H92.2355V39.1865ZM92.2212 39.1865H92.2355V37.6865H92.2212V39.1865ZM92.2068 39.1865H92.2212V37.6865H92.2068V39.1865ZM92.1925 39.1865H92.2068V37.6865H92.1925V39.1865ZM92.1781 39.1865H92.1925V37.6865H92.1781V39.1865ZM92.1637 39.1865H92.1781V37.6865H92.1637V39.1865ZM92.1493 39.1865H92.1637V37.6865H92.1493V39.1865ZM92.1348 39.1865H92.1493V37.6865H92.1348V39.1865ZM92.1204 39.1865H92.1348V37.6865H92.1204V39.1865ZM92.1059 39.1865H92.1204V37.6865H92.1059V39.1865ZM92.0915 39.1865H92.1059V37.6865H92.0915V39.1865ZM92.077 39.1865H92.0915V37.6865H92.077V39.1865ZM92.0625 39.1865H92.077V37.6865H92.0625V39.1865ZM92.048 39.1865H92.0625V37.6865H92.048V39.1865ZM92.0335 39.1865H92.048V37.6865H92.0335V39.1865ZM92.0189 39.1865H92.0335V37.6865H92.0189V39.1865ZM92.0044 39.1865H92.0189V37.6865H92.0044V39.1865ZM91.9898 39.1865H92.0044V37.6865H91.9898V39.1865ZM91.9752 39.1865H91.9898V37.6865H91.9752V39.1865ZM91.9606 39.1865H91.9752V37.6865H91.9606V39.1865ZM91.946 39.1865H91.9606V37.6865H91.946V39.1865ZM91.9313 39.1865H91.946V37.6865H91.9313V39.1865ZM91.9167 39.1865H91.9313V37.6865H91.9167V39.1865ZM91.902 39.1865H91.9167V37.6865H91.902V39.1865ZM91.8874 39.1865H91.902V37.6865H91.8874V39.1865ZM91.8727 39.1865H91.8874V37.6865H91.8727V39.1865ZM91.858 39.1865H91.8727V37.6865H91.858V39.1865ZM91.8432 39.1865H91.858V37.6865H91.8432V39.1865ZM91.8285 39.1865H91.8432V37.6865H91.8285V39.1865ZM91.8138 39.1865H91.8285V37.6865H91.8138V39.1865ZM91.799 39.1865H91.8138V37.6865H91.799V39.1865ZM91.7842 39.1865H91.799V37.6865H91.7842V39.1865ZM91.7694 39.1865H91.7842V37.6865H91.7694V39.1865ZM91.7546 39.1865H91.7694V37.6865H91.7546V39.1865ZM91.7398 39.1865H91.7546V37.6865H91.7398V39.1865ZM91.725 39.1865H91.7398V37.6865H91.725V39.1865ZM91.7101 39.1865H91.725V37.6865H91.7101V39.1865ZM91.6952 39.1865H91.7101V37.6865H91.6952V39.1865ZM91.6804 39.1865H91.6952V37.6865H91.6804V39.1865ZM91.6655 39.1865H91.6804V37.6865H91.6655V39.1865ZM91.6506 39.1865H91.6655V37.6865H91.6506V39.1865ZM91.6356 39.1865H91.6506V37.6865H91.6356V39.1865ZM91.6207 39.1865H91.6356V37.6865H91.6207V39.1865ZM91.6057 39.1865H91.6207V37.6865H91.6057V39.1865ZM91.5908 39.1865H91.6057V37.6865H91.5908V39.1865ZM91.5758 39.1865H91.5908V37.6865H91.5758V39.1865ZM91.5608 39.1865H91.5758V37.6865H91.5608V39.1865ZM91.5458 39.1865H91.5608V37.6865H91.5458V39.1865ZM91.5307 39.1865H91.5458V37.6865H91.5307V39.1865ZM91.5157 39.1865H91.5307V37.6865H91.5157V39.1865ZM91.5006 39.1865H91.5157V37.6865H91.5006V39.1865ZM91.4856 39.1865H91.5006V37.6865H91.4856V39.1865ZM89.1312 40.8457C89.4866 39.8507 90.429 39.1865 91.4856 39.1865V37.6865C89.7951 37.6865 88.2872 38.7492 87.7186 40.3412L89.1312 40.8457ZM88.0388 43.9043L89.1312 40.8457L87.7186 40.3412L86.6262 43.3998L88.0388 43.9043ZM87.2586 46.0891L88.0388 43.9043L86.6262 43.3998L85.846 45.5846L87.2586 46.0891ZM84.8874 46.0386L86.3 46.5431L86.8045 45.1305L85.3919 44.626L84.8874 46.0386ZM85.2136 42.8953L84.4333 45.0801L85.846 45.5846L86.6262 43.3998L85.2136 42.8953ZM86.306 39.8367L85.2136 42.8953L86.6262 43.3998L87.7186 40.3412L86.306 39.8367Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M122.492 46.2953C122.725 45.6441 122.242 44.959 121.551 44.959L94.8585 44.959C94.4359 44.959 94.0589 45.2247 93.9168 45.6226L88.5985 60.5138C88.3659 61.165 88.8487 61.8501 89.5402 61.8501H116.232C116.655 61.8501 117.032 61.5844 117.174 61.1865L122.492 46.2953Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M29.5075 46.2953C29.2749 45.6441 29.7577 44.959 30.4493 44.959L57.1415 44.959C57.5641 44.959 57.9411 45.2247 58.0832 45.6226L63.4015 60.5138C63.6341 61.165 63.1513 61.8501 62.4598 61.8501H35.7675C35.3449 61.8501 34.9679 61.5844 34.8258 61.1865L29.5075 46.2953Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M33.5762 63.8984H118.425V114.444C118.425 116.653 116.634 118.444 114.425 118.444H37.5762C35.367 118.444 33.5762 116.653 33.5762 114.444V63.8984Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "35.8486", y: "66.1719", width: "28.7879", height: "50", rx: "1", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M40.5 71.4997V81.4997", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M40.5 85.4088V89.9542", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "87.3633", y: "66.1719", width: "10.6061", height: "50", rx: "1", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M66.9091 64.2998V118.043", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M54.5 125.5H71.5", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M76.1944 125.5H82.8056", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" })); const Calendar = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "46.5278", y: "32.0166", width: "68.7222", height: "83.6444", rx: "3.25", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "49.2891", y: "34.7773", width: "63.2", height: "78.1222", rx: "2", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "37.75", y: "38.1611", width: "68.7222", height: "83.6444", rx: "3.25", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M69.4775 63.3051H93.1775", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M69.4775 68.5727H82.6442", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "51.0444", y: "60.2334", width: "11.4111", height: "11.4111", rx: "2", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M69.4775 87.0053H93.1775", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M69.4775 92.2719H82.6442", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "51.0444", y: "83.9336", width: "11.4111", height: "11.4111", rx: "2", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M68.1632 31.6679C67.0497 28.3725 63.9325 26 60.2613 26C55.6558 26 51.9224 29.7334 51.9224 34.3389C51.9224 38.9443 55.6558 42.6778 60.2613 42.6778", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M92.7777 31.7796C91.6975 28.4262 88.5515 26 84.8389 26C80.2334 26 76.5 29.7334 76.5 34.3389C76.5 38.9443 80.2334 42.6778 84.8389 42.6778", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M31.5 73V92", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M31.5 97V105", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" })); const Cancel = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "106.552", cy: "54.4483", r: "17.4483", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "75.4483", cy: "76.4483", r: "39.4483", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M94.4566 55.3942C93.9524 52.5876 97.1355 50.5582 99.2233 52.5005C101.189 54.3291 103.108 56.331 104.211 58.0518C107.613 63.3609 109.586 69.674 109.586 76.448C109.586 95.3018 94.3022 110.586 75.4484 110.586C72.1858 110.586 67.9237 109.349 64.2042 107.979C61.4858 106.978 61.9438 103.199 64.7455 102.463C66.6153 101.971 68.4144 101.415 69.7243 100.832C84.7188 94.1566 95.1725 79.1265 95.1725 61.6549C95.1725 59.9403 94.8626 57.6539 94.4566 55.3942Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M89.9817 61.9151C91.845 63.7784 91.845 66.7995 89.9817 68.6628L82.1964 76.4481L89.9817 84.2344C91.845 86.0978 91.845 89.1188 89.9817 90.9821C88.1183 92.8455 85.0973 92.8455 83.2339 90.9821L75.4486 83.1958L67.6623 90.9821C65.799 92.8455 62.7779 92.8455 60.9146 90.9821C59.0513 89.1188 59.0513 86.0978 60.9146 84.2344L68.7009 76.4481L60.9146 68.6628C59.0513 66.7995 59.0513 63.7784 60.9146 61.9151C62.7779 60.0517 65.799 60.0517 67.6623 61.9151L75.4486 69.7004L83.2339 61.9151C85.0973 60.0517 88.1183 60.0517 89.9817 61.9151Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M91.3152 101.937L90.6786 102.333L91.0752 102.97L91.7118 102.573L91.3152 101.937ZM98.7326 95.4212L99.3126 95.8967L99.7881 95.3167L99.2081 94.8412L98.7326 95.4212ZM90.522 100.664L90.1254 100.027L89.4888 100.424L89.8854 101.06L90.522 100.664ZM97.5726 94.4702L98.0481 93.8902L97.4681 93.4147L96.9926 93.9947L97.5726 94.4702ZM104.115 85.5611L104.829 85.7912V85.7912L104.115 85.5611ZM105.566 76.2881H106.316V75.5381H105.566V76.2881ZM101.354 91.6799L100.972 92.3249L101.617 92.7077L101.999 92.0627L101.354 91.6799ZM100.065 90.9143L99.4196 90.5315L99.0368 91.1765L99.6817 91.5593L100.065 90.9143ZM102.688 85.1009L101.974 84.8708L102.688 85.1009ZM104.066 76.2881V75.5381H103.316V76.2881H104.066ZM91.7118 102.573C94.598 100.775 97.1659 98.5151 99.3126 95.8967L98.1526 94.9457C96.1093 97.438 93.6651 99.589 90.9186 101.3L91.7118 102.573ZM89.8854 101.06L90.6786 102.333L91.9517 101.54L91.1585 100.267L89.8854 101.06ZM96.9926 93.9947C95.0527 96.3609 92.7323 98.4029 90.1254 100.027L90.9186 101.3C93.6651 99.589 96.1093 97.438 98.1526 94.9457L96.9926 93.9947ZM99.2081 94.8412L98.0481 93.8902L97.0971 95.0502L98.2571 96.0012L99.2081 94.8412ZM104.829 85.7912C105.795 82.795 106.316 79.6009 106.316 76.2881H104.816C104.816 79.4428 104.32 82.4817 103.402 85.331L104.829 85.7912ZM101.999 92.0627C103.163 90.1018 104.117 88.0009 104.829 85.7912L103.402 85.331C102.724 87.4327 101.817 89.4313 100.709 91.2971L101.999 92.0627ZM99.6817 91.5593L100.972 92.3249L101.737 91.035L100.447 90.2694L99.6817 91.5593ZM101.974 84.8708C101.331 86.8646 100.471 88.7608 99.4196 90.5315L100.709 91.2971C101.817 89.4313 102.724 87.4327 103.402 85.331L101.974 84.8708ZM103.316 76.2881C103.316 79.2847 102.845 82.1684 101.974 84.8708L103.402 85.331C104.32 82.4817 104.816 79.4428 104.816 76.2881H103.316ZM105.566 75.5381H104.066V77.0381H105.566V75.5381Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M58.221 32.3018L58.9197 32.0292L58.6471 31.3305L57.9484 31.603L58.221 32.3018ZM41.4245 43.4932L40.8852 42.972L40.364 43.5113L40.9033 44.0325L41.4245 43.4932ZM58.7661 33.6992L59.0387 34.3979L59.7374 34.1253L59.4648 33.4266L58.7661 33.6992ZM42.5032 44.5356L41.982 45.0749L42.5213 45.5961L43.0425 45.0568L42.5032 44.5356ZM36.7713 49.1159L37.2035 48.5031L36.5906 48.0708L36.1584 48.6837L36.7713 49.1159ZM31.2998 59.3513L30.5998 59.082L30.3306 59.7821L31.0306 60.0513L31.2998 59.3513ZM37.9971 49.9805L38.61 50.4128L39.0422 49.7999L38.4293 49.3676L37.9971 49.9805ZM32.6998 59.8897L32.4306 60.5897L33.1306 60.8589L33.3999 60.1589L32.6998 59.8897ZM57.9484 31.603C51.4516 34.1374 45.6449 38.0467 40.8852 42.972L41.9638 44.0144C46.5759 39.2419 52.2014 35.455 58.4935 33.0005L57.9484 31.603ZM59.4648 33.4266L58.9197 32.0292L57.5222 32.5743L58.0674 33.9718L59.4648 33.4266ZM43.0425 45.0568C47.5068 40.4371 52.9511 36.7726 59.0387 34.3979L58.4935 33.0005C52.2014 35.455 46.5759 39.2419 41.9638 44.0144L43.0425 45.0568ZM40.9033 44.0325L41.982 45.0749L43.0243 43.9963L41.9457 42.9539L40.9033 44.0325ZM36.1584 48.6837C33.9021 51.8828 32.027 55.371 30.5998 59.082L31.9998 59.6205C33.3821 56.0264 35.1982 52.6476 37.3842 49.5482L36.1584 48.6837ZM38.4293 49.3676L37.2035 48.5031L36.339 49.7288L37.5648 50.5934L38.4293 49.3676ZM33.3999 60.1589C34.7371 56.6817 36.4944 53.4123 38.61 50.4128L37.3842 49.5482C35.1982 52.6476 33.3821 56.0264 31.9998 59.6205L33.3999 60.1589ZM31.0306 60.0513L32.4306 60.5897L32.9691 59.1897L31.569 58.6512L31.0306 60.0513Z", fill: "#3B3552" })); const Cards = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M24.3999 67.862C23.9353 66.1282 24.9642 64.3461 26.698 63.8816L102.981 43.4415C104.715 42.9769 106.497 44.0058 106.962 45.7396L121.071 98.3949C121.535 100.129 120.506 101.911 118.773 102.375L42.4892 122.815C40.7555 123.28 38.9734 122.251 38.5088 120.517L24.3999 67.862Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M28.2945 69.2522C28.0086 68.1852 28.6418 67.0886 29.7087 66.8027L98.4793 48.3756C99.5463 48.0898 100.643 48.7229 100.929 49.7899L113.882 98.1321C114.168 99.199 113.535 100.296 112.468 100.582L43.6972 119.009C42.6303 119.294 41.5336 118.661 41.2478 117.594L28.2945 69.2522Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "41.7759", y: "41.75", width: "85.4744", height: "61.0128", rx: "3.25", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M36.7759 43V43.75H37.5259V43H36.7759ZM35.2759 43H34.5259V43.75H35.2759V43ZM60.3461 34.25H61.0961V33.5H60.3461V34.25ZM60.3461 35.75V36.5H61.0961V35.75H60.3461ZM66.3951 35.75H65.6451V36.5H66.3951V35.75ZM66.3951 34.25V33.5H65.6451V34.25H66.3951ZM74.4405 34.25H75.1905V33.5H74.4405V34.25ZM74.4405 35.75V36.5H75.1905V35.75H74.4405ZM37.5259 43C37.5259 39.4101 40.436 36.5 44.0259 36.5V35C39.6076 35 36.0259 38.5817 36.0259 43H37.5259ZM35.2759 43.75H36.7759V42.25H35.2759V43.75ZM44.0259 33.5C38.7792 33.5 34.5259 37.7533 34.5259 43H36.0259C36.0259 38.5817 39.6076 35 44.0259 35V33.5ZM44.0684 33.5H44.0259V35H44.0684V33.5ZM44.1108 33.5H44.0684V35H44.1108V33.5ZM44.1532 33.5H44.1108V35H44.1532V33.5ZM44.1955 33.5H44.1532V35H44.1955V33.5ZM44.2379 33.5H44.1955V35H44.2379V33.5ZM44.2801 33.5H44.2379V35H44.2801V33.5ZM44.3224 33.5H44.2801V35H44.3224V33.5ZM44.3646 33.5H44.3224V35H44.3646V33.5ZM44.4067 33.5H44.3646V35H44.4067V33.5ZM44.4488 33.5H44.4067V35H44.4488V33.5ZM44.4909 33.5H44.4488V35H44.4909V33.5ZM44.5329 33.5H44.4909V35H44.5329V33.5ZM44.5749 33.5H44.5329V35H44.5749V33.5ZM44.6168 33.5H44.5749V35H44.6168V33.5ZM44.6587 33.5H44.6168V35H44.6587V33.5ZM44.7006 33.5H44.6587V35H44.7006V33.5ZM44.7424 33.5H44.7006V35H44.7424V33.5ZM44.7842 33.5H44.7424V35H44.7842V33.5ZM44.8259 33.5H44.7842V35H44.8259V33.5ZM44.8676 33.5H44.8259V35H44.8676V33.5ZM44.9092 33.5H44.8676V35H44.9092V33.5ZM44.9508 33.5H44.9092V35H44.9508V33.5ZM44.9924 33.5H44.9508V35H44.9924V33.5ZM45.0339 33.5H44.9924V35H45.0339V33.5ZM45.0754 33.5H45.0339V35H45.0754V33.5ZM45.1169 33.5H45.0754V35H45.1169V33.5ZM45.1583 33.5H45.1169V35H45.1583V33.5ZM45.1996 33.5H45.1583V35H45.1996V33.5ZM45.2409 33.5H45.1996V35H45.2409V33.5ZM45.2822 33.5H45.2409V35H45.2822V33.5ZM45.3235 33.5H45.2822V35H45.3235V33.5ZM45.3646 33.5H45.3235V35H45.3646V33.5ZM45.4058 33.5H45.3646V35H45.4058V33.5ZM45.4469 33.5H45.4058V35H45.4469V33.5ZM45.488 33.5H45.4469V35H45.488V33.5ZM45.529 33.5H45.488V35H45.529V33.5ZM45.57 33.5H45.529V35H45.57V33.5ZM45.6109 33.5H45.57V35H45.6109V33.5ZM45.6518 33.5H45.6109V35H45.6518V33.5ZM45.6927 33.5H45.6518V35H45.6927V33.5ZM45.7335 33.5H45.6927V35H45.7335V33.5ZM45.7743 33.5H45.7335V35H45.7743V33.5ZM45.815 33.5H45.7743V35H45.815V33.5ZM45.8557 33.5H45.815V35H45.8557V33.5ZM45.8964 33.5H45.8557V35H45.8964V33.5ZM45.937 33.5H45.8964V35H45.937V33.5ZM45.9776 33.5H45.937V35H45.9776V33.5ZM46.0181 33.5H45.9776V35H46.0181V33.5ZM46.0586 33.5H46.0181V35H46.0586V33.5ZM46.099 33.5H46.0586V35H46.099V33.5ZM46.1394 33.5H46.099V35H46.1394V33.5ZM46.1798 33.5H46.1394V35H46.1798V33.5ZM46.2201 33.5H46.1798V35H46.2201V33.5ZM46.2604 33.5H46.2201V35H46.2604V33.5ZM46.3006 33.5H46.2604V35H46.3006V33.5ZM46.3408 33.5H46.3006V35H46.3408V33.5ZM46.381 33.5H46.3408V35H46.381V33.5ZM46.4211 33.5H46.381V35H46.4211V33.5ZM46.4612 33.5H46.4211V35H46.4612V33.5ZM46.5012 33.5H46.4612V35H46.5012V33.5ZM46.5412 33.5H46.5012V35H46.5412V33.5ZM46.5811 33.5H46.5412V35H46.5811V33.5ZM46.621 33.5H46.5811V35H46.621V33.5ZM46.6609 33.5H46.621V35H46.6609V33.5ZM46.7007 33.5H46.6609V35H46.7007V33.5ZM46.7405 33.5H46.7007V35H46.7405V33.5ZM46.7803 33.5H46.7405V35H46.7803V33.5ZM46.82 33.5H46.7803V35H46.82V33.5ZM46.8596 33.5H46.82V35H46.8596V33.5ZM46.8992 33.5H46.8596V35H46.8992V33.5ZM46.9388 33.5H46.8992V35H46.9388V33.5ZM46.9783 33.5H46.9388V35H46.9783V33.5ZM47.0178 33.5H46.9783V35H47.0178V33.5ZM47.0573 33.5H47.0178V35H47.0573V33.5ZM47.0967 33.5H47.0573V35H47.0967V33.5ZM47.1361 33.5H47.0967V35H47.1361V33.5ZM47.1754 33.5H47.1361V35H47.1754V33.5ZM47.2147 33.5H47.1754V35H47.2147V33.5ZM47.2539 33.5H47.2147V35H47.2539V33.5ZM47.2931 33.5H47.2539V35H47.2931V33.5ZM47.3323 33.5H47.2931V35H47.3323V33.5ZM47.3714 33.5H47.3323V35H47.3714V33.5ZM47.4105 33.5H47.3714V35H47.4105V33.5ZM47.4495 33.5H47.4105V35H47.4495V33.5ZM47.4885 33.5H47.4495V35H47.4885V33.5ZM47.5274 33.5H47.4885V35H47.5274V33.5ZM47.5663 33.5H47.5274V35H47.5663V33.5ZM47.6052 33.5H47.5663V35H47.6052V33.5ZM47.644 33.5H47.6052V35H47.644V33.5ZM47.6828 33.5H47.644V35H47.6828V33.5ZM47.7216 33.5H47.6828V35H47.7216V33.5ZM47.7603 33.5H47.7216V35H47.7603V33.5ZM47.7989 33.5H47.7603V35H47.7989V33.5ZM47.8376 33.5H47.7989V35H47.8376V33.5ZM47.8761 33.5H47.8376V35H47.8761V33.5ZM47.9147 33.5H47.8761V35H47.9147V33.5ZM47.9532 33.5H47.9147V35H47.9532V33.5ZM47.9916 33.5H47.9532V35H47.9916V33.5ZM48.03 33.5H47.9916V35H48.03V33.5ZM48.0684 33.5H48.03V35H48.0684V33.5ZM48.1067 33.5H48.0684V35H48.1067V33.5ZM48.145 33.5H48.1067V35H48.145V33.5ZM48.1833 33.5H48.145V35H48.1833V33.5ZM48.2215 33.5H48.1833V35H48.2215V33.5ZM48.2596 33.5H48.2215V35H48.2596V33.5ZM48.2978 33.5H48.2596V35H48.2978V33.5ZM48.3358 33.5H48.2978V35H48.3358V33.5ZM48.3739 33.5H48.3358V35H48.3739V33.5ZM48.4119 33.5H48.3739V35H48.4119V33.5ZM48.4498 33.5H48.4119V35H48.4498V33.5ZM48.4877 33.5H48.4498V35H48.4877V33.5ZM48.5256 33.5H48.4877V35H48.5256V33.5ZM48.5635 33.5H48.5256V35H48.5635V33.5ZM48.6012 33.5H48.5635V35H48.6012V33.5ZM48.639 33.5H48.6012V35H48.639V33.5ZM48.6767 33.5H48.639V35H48.6767V33.5ZM48.7144 33.5H48.6767V35H48.7144V33.5ZM48.752 33.5H48.7144V35H48.752V33.5ZM48.7896 33.5H48.752V35H48.7896V33.5ZM48.8271 33.5H48.7896V35H48.8271V33.5ZM48.8646 33.5H48.8271V35H48.8646V33.5ZM48.9021 33.5H48.8646V35H48.9021V33.5ZM48.9395 33.5H48.9021V35H48.9395V33.5ZM48.9769 33.5H48.9395V35H48.9769V33.5ZM49.0142 33.5H48.9769V35H49.0142V33.5ZM49.0515 33.5H49.0142V35H49.0515V33.5ZM49.0887 33.5H49.0515V35H49.0887V33.5ZM49.1259 33.5H49.0887V35H49.1259V33.5ZM49.1631 33.5H49.1259V35H49.1631V33.5ZM49.2002 33.5H49.1631V35H49.2002V33.5ZM49.2373 33.5H49.2002V35H49.2373V33.5ZM49.2744 33.5H49.2373V35H49.2744V33.5ZM49.3114 33.5H49.2744V35H49.3114V33.5ZM49.3483 33.5H49.3114V35H49.3483V33.5ZM49.3852 33.5H49.3483V35H49.3852V33.5ZM49.4221 33.5H49.3852V35H49.4221V33.5ZM49.459 33.5H49.4221V35H49.459V33.5ZM49.4957 33.5H49.459V35H49.4957V33.5ZM49.5325 33.5H49.4957V35H49.5325V33.5ZM49.5692 33.5H49.5325V35H49.5692V33.5ZM49.6059 33.5H49.5692V35H49.6059V33.5ZM49.6425 33.5H49.6059V35H49.6425V33.5ZM49.6791 33.5H49.6425V35H49.6791V33.5ZM49.7156 33.5H49.6791V35H49.7156V33.5ZM49.7521 33.5H49.7156V35H49.7521V33.5ZM49.7886 33.5H49.7521V35H49.7886V33.5ZM49.825 33.5H49.7886V35H49.825V33.5ZM49.8614 33.5H49.825V35H49.8614V33.5ZM49.8977 33.5H49.8614V35H49.8977V33.5ZM49.934 33.5H49.8977V35H49.934V33.5ZM49.9703 33.5H49.934V35H49.9703V33.5ZM50.0065 33.5H49.9703V35H50.0065V33.5ZM50.0427 33.5H50.0065V35H50.0427V33.5ZM50.0788 33.5H50.0427V35H50.0788V33.5ZM50.1149 33.5H50.0788V35H50.1149V33.5ZM50.1509 33.5H50.1149V35H50.1509V33.5ZM50.1869 33.5H50.1509V35H50.1869V33.5ZM50.2229 33.5H50.1869V35H50.2229V33.5ZM50.2588 33.5H50.2229V35H50.2588V33.5ZM50.2947 33.5H50.2588V35H50.2947V33.5ZM50.3305 33.5H50.2947V35H50.3305V33.5ZM50.3663 33.5H50.3305V35H50.3663V33.5ZM50.4021 33.5H50.3663V35H50.4021V33.5ZM50.4378 33.5H50.4021V35H50.4378V33.5ZM50.4735 33.5H50.4378V35H50.4735V33.5ZM50.5091 33.5H50.4735V35H50.5091V33.5ZM50.5447 33.5H50.5091V35H50.5447V33.5ZM50.5803 33.5H50.5447V35H50.5803V33.5ZM50.6158 33.5H50.5803V35H50.6158V33.5ZM50.6512 33.5H50.6158V35H50.6512V33.5ZM50.6867 33.5H50.6512V35H50.6867V33.5ZM50.722 33.5H50.6867V35H50.722V33.5ZM50.7574 33.5H50.722V35H50.7574V33.5ZM50.7927 33.5H50.7574V35H50.7927V33.5ZM50.8279 33.5H50.7927V35H50.8279V33.5ZM50.8631 33.5H50.8279V35H50.8631V33.5ZM50.8983 33.5H50.8631V35H50.8983V33.5ZM50.9335 33.5H50.8983V35H50.9335V33.5ZM50.9685 33.5H50.9335V35H50.9685V33.5ZM51.0036 33.5H50.9685V35H51.0036V33.5ZM51.0386 33.5H51.0036V35H51.0386V33.5ZM51.0736 33.5H51.0386V35H51.0736V33.5ZM51.1085 33.5H51.0736V35H51.1085V33.5ZM51.1434 33.5H51.1085V35H51.1434V33.5ZM51.1782 33.5H51.1434V35H51.1782V33.5ZM51.213 33.5H51.1782V35H51.213V33.5ZM51.2478 33.5H51.213V35H51.2478V33.5ZM51.2825 33.5H51.2478V35H51.2825V33.5ZM51.3172 33.5H51.2825V35H51.3172V33.5ZM51.3518 33.5H51.3172V35H51.3518V33.5ZM51.3864 33.5H51.3518V35H51.3864V33.5ZM51.421 33.5H51.3864V35H51.421V33.5ZM51.4555 33.5H51.421V35H51.4555V33.5ZM51.4899 33.5H51.4555V35H51.4899V33.5ZM51.5244 33.5H51.4899V35H51.5244V33.5ZM51.5588 33.5H51.5244V35H51.5588V33.5ZM51.5931 33.5H51.5588V35H51.5931V33.5ZM51.6274 33.5H51.5931V35H51.6274V33.5ZM51.6617 33.5H51.6274V35H51.6617V33.5ZM51.6959 33.5H51.6617V35H51.6959V33.5ZM51.7301 33.5H51.6959V35H51.7301V33.5ZM51.7642 33.5H51.7301V35H51.7642V33.5ZM51.7983 33.5H51.7642V35H51.7983V33.5ZM51.8324 33.5H51.7983V35H51.8324V33.5ZM51.8664 33.5H51.8324V35H51.8664V33.5ZM51.9003 33.5H51.8664V35H51.9003V33.5ZM51.9343 33.5H51.9003V35H51.9343V33.5ZM51.9682 33.5H51.9343V35H51.9682V33.5ZM52.002 33.5H51.9682V35H52.002V33.5ZM52.0358 33.5H52.002V35H52.0358V33.5ZM52.0696 33.5H52.0358V35H52.0696V33.5ZM52.1033 33.5H52.0696V35H52.1033V33.5ZM52.137 33.5H52.1033V35H52.137V33.5ZM52.1706 33.5H52.137V35H52.1706V33.5ZM52.2042 33.5H52.1706V35H52.2042V33.5ZM52.2378 33.5H52.2042V35H52.2378V33.5ZM52.2713 33.5H52.2378V35H52.2713V33.5ZM52.3048 33.5H52.2713V35H52.3048V33.5ZM52.3382 33.5H52.3048V35H52.3382V33.5ZM52.3716 33.5H52.3382V35H52.3716V33.5ZM52.4049 33.5H52.3716V35H52.4049V33.5ZM52.4382 33.5H52.4049V35H52.4382V33.5ZM52.4715 33.5H52.4382V35H52.4715V33.5ZM52.5047 33.5H52.4715V35H52.5047V33.5ZM52.5379 33.5H52.5047V35H52.5379V33.5ZM52.5711 33.5H52.5379V35H52.5711V33.5ZM52.6042 33.5H52.5711V35H52.6042V33.5ZM52.6372 33.5H52.6042V35H52.6372V33.5ZM52.6702 33.5H52.6372V35H52.6702V33.5ZM52.7032 33.5H52.6702V35H52.7032V33.5ZM52.7361 33.5H52.7032V35H52.7361V33.5ZM52.769 33.5H52.7361V35H52.769V33.5ZM52.8019 33.5H52.769V35H52.8019V33.5ZM52.8347 33.5H52.8019V35H52.8347V33.5ZM52.8675 33.5H52.8347V35H52.8675V33.5ZM52.9002 33.5H52.8675V35H52.9002V33.5ZM52.9329 33.5H52.9002V35H52.9329V33.5ZM52.9655 33.5H52.9329V35H52.9655V33.5ZM52.9981 33.5H52.9655V35H52.9981V33.5ZM53.0307 33.5H52.9981V35H53.0307V33.5ZM53.0632 33.5H53.0307V35H53.0632V33.5ZM53.0957 33.5H53.0632V35H53.0957V33.5ZM53.1281 33.5H53.0957V35H53.1281V33.5ZM53.1605 33.5H53.1281V35H53.1605V33.5ZM53.1929 33.5H53.1605V35H53.1929V33.5ZM53.2252 33.5H53.1929V35H53.2252V33.5ZM53.2574 33.5H53.2252V35H53.2574V33.5ZM53.2897 33.5H53.2574V35H53.2897V33.5ZM53.3218 33.5H53.2897V35H53.3218V33.5ZM53.354 33.5H53.3218V35H53.354V33.5ZM53.3861 33.5H53.354V35H53.3861V33.5ZM53.4182 33.5H53.3861V35H53.4182V33.5ZM53.4502 33.5H53.4182V35H53.4502V33.5ZM53.4822 33.5H53.4502V35H53.4822V33.5ZM53.5141 33.5H53.4822V35H53.5141V33.5ZM53.546 33.5H53.5141V35H53.546V33.5ZM53.5778 33.5H53.546V35H53.5778V33.5ZM53.6097 33.5H53.5778V35H53.6097V33.5ZM53.6414 33.5H53.6097V35H53.6414V33.5ZM53.6732 33.5H53.6414V35H53.6732V33.5ZM53.7049 33.5H53.6732V35H53.7049V33.5ZM53.7365 33.5H53.7049V35H53.7365V33.5ZM53.7681 33.5H53.7365V35H53.7681V33.5ZM53.7997 33.5H53.7681V35H53.7997V33.5ZM53.8312 33.5H53.7997V35H53.8312V33.5ZM53.8627 33.5H53.8312V35H53.8627V33.5ZM53.8941 33.5H53.8627V35H53.8941V33.5ZM53.9255 33.5H53.8941V35H53.9255V33.5ZM53.9569 33.5H53.9255V35H53.9569V33.5ZM53.9882 33.5H53.9569V35H53.9882V33.5ZM54.0195 33.5H53.9882V35H54.0195V33.5ZM54.0507 33.5H54.0195V35H54.0507V33.5ZM54.0819 33.5H54.0507V35H54.0819V33.5ZM54.113 33.5H54.0819V35H54.113V33.5ZM54.1441 33.5H54.113V35H54.1441V33.5ZM54.1752 33.5H54.1441V35H54.1752V33.5ZM54.2062 33.5H54.1752V35H54.2062V33.5ZM54.2372 33.5H54.2062V35H54.2372V33.5ZM54.2681 33.5H54.2372V35H54.2681V33.5ZM54.299 33.5H54.2681V35H54.299V33.5ZM54.3299 33.5H54.299V35H54.3299V33.5ZM54.3607 33.5H54.3299V35H54.3607V33.5ZM54.3915 33.5H54.3607V35H54.3915V33.5ZM54.4222 33.5H54.3915V35H54.4222V33.5ZM54.4529 33.5H54.4222V35H54.4529V33.5ZM54.4836 33.5H54.4529V35H54.4836V33.5ZM54.5142 33.5H54.4836V35H54.5142V33.5ZM54.5448 33.5H54.5142V35H54.5448V33.5ZM54.5753 33.5H54.5448V35H54.5753V33.5ZM54.6058 33.5H54.5753V35H54.6058V33.5ZM54.6362 33.5H54.6058V35H54.6362V33.5ZM54.6666 33.5H54.6362V35H54.6666V33.5ZM54.697 33.5H54.6666V35H54.697V33.5ZM54.7273 33.5H54.697V35H54.7273V33.5ZM54.7576 33.5H54.7273V35H54.7576V33.5ZM54.7878 33.5H54.7576V35H54.7878V33.5ZM54.818 33.5H54.7878V35H54.818V33.5ZM54.8482 33.5H54.818V35H54.8482V33.5ZM54.8783 33.5H54.8482V35H54.8783V33.5ZM54.9083 33.5H54.8783V35H54.9083V33.5ZM54.9384 33.5H54.9083V35H54.9384V33.5ZM54.9683 33.5H54.9384V35H54.9683V33.5ZM54.9983 33.5H54.9683V35H54.9983V33.5ZM55.0282 33.5H54.9983V35H55.0282V33.5ZM55.0581 33.5H55.0282V35H55.0581V33.5ZM55.0879 33.5H55.0581V35H55.0879V33.5ZM55.1177 33.5H55.0879V35H55.1177V33.5ZM55.1474 33.5H55.1177V35H55.1474V33.5ZM55.1771 33.5H55.1474V35H55.1771V33.5ZM55.2068 33.5H55.1771V35H55.2068V33.5ZM55.2364 33.5H55.2068V35H55.2364V33.5ZM55.2659 33.5H55.2364V35H55.2659V33.5ZM55.2955 33.5H55.2659V35H55.2955V33.5ZM55.325 33.5H55.2955V35H55.325V33.5ZM55.3544 33.5H55.325V35H55.3544V33.5ZM55.3838 33.5H55.3544V35H55.3838V33.5ZM55.4132 33.5H55.3838V35H55.4132V33.5ZM55.4425 33.5H55.4132V35H55.4425V33.5ZM55.4718 33.5H55.4425V35H55.4718V33.5ZM55.501 33.5H55.4718V35H55.501V33.5ZM55.5302 33.5H55.501V35H55.5302V33.5ZM55.5594 33.5H55.5302V35H55.5594V33.5ZM55.5885 33.5H55.5594V35H55.5885V33.5ZM55.6176 33.5H55.5885V35H55.6176V33.5ZM55.6466 33.5H55.6176V35H55.6466V33.5ZM55.6756 33.5H55.6466V35H55.6756V33.5ZM55.7045 33.5H55.6756V35H55.7045V33.5ZM55.7334 33.5H55.7045V35H55.7334V33.5ZM55.7623 33.5H55.7334V35H55.7623V33.5ZM55.7911 33.5H55.7623V35H55.7911V33.5ZM55.8199 33.5H55.7911V35H55.8199V33.5ZM55.8487 33.5H55.8199V35H55.8487V33.5ZM55.8774 33.5H55.8487V35H55.8774V33.5ZM55.906 33.5H55.8774V35H55.906V33.5ZM55.9346 33.5H55.906V35H55.9346V33.5ZM55.9632 33.5H55.9346V35H55.9632V33.5ZM55.9917 33.5H55.9632V35H55.9917V33.5ZM56.0202 33.5H55.9917V35H56.0202V33.5ZM56.0487 33.5H56.0202V35H56.0487V33.5ZM56.0771 33.5H56.0487V35H56.0771V33.5ZM56.1055 33.5H56.0771V35H56.1055V33.5ZM56.1338 33.5H56.1055V35H56.1338V33.5ZM56.1621 33.5H56.1338V35H56.1621V33.5ZM56.1903 33.5H56.1621V35H56.1903V33.5ZM56.2185 33.5H56.1903V35H56.2185V33.5ZM56.2467 33.5H56.2185V35H56.2467V33.5ZM56.2748 33.5H56.2467V35H56.2748V33.5ZM56.3029 33.5H56.2748V35H56.3029V33.5ZM56.3309 33.5H56.3029V35H56.3309V33.5ZM56.3589 33.5H56.3309V35H56.3589V33.5ZM56.3869 33.5H56.3589V35H56.3869V33.5ZM56.4148 33.5H56.3869V35H56.4148V33.5ZM56.4426 33.5H56.4148V35H56.4426V33.5ZM56.4705 33.5H56.4426V35H56.4705V33.5ZM56.4983 33.5H56.4705V35H56.4983V33.5ZM56.526 33.5H56.4983V35H56.526V33.5ZM56.5537 33.5H56.526V35H56.5537V33.5ZM56.5814 33.5H56.5537V35H56.5814V33.5ZM56.609 33.5H56.5814V35H56.609V33.5ZM56.6366 33.5H56.609V35H56.6366V33.5ZM56.6641 33.5H56.6366V35H56.6641V33.5ZM56.6916 33.5H56.6641V35H56.6916V33.5ZM56.7191 33.5H56.6916V35H56.7191V33.5ZM56.7465 33.5H56.7191V35H56.7465V33.5ZM56.7739 33.5H56.7465V35H56.7739V33.5ZM56.8012 33.5H56.7739V35H56.8012V33.5ZM56.8285 33.5H56.8012V35H56.8285V33.5ZM56.8557 33.5H56.8285V35H56.8557V33.5ZM56.8829 33.5H56.8557V35H56.8829V33.5ZM56.9101 33.5H56.8829V35H56.9101V33.5ZM56.9372 33.5H56.9101V35H56.9372V33.5ZM56.9643 33.5H56.9372V35H56.9643V33.5ZM56.9913 33.5H56.9643V35H56.9913V33.5ZM57.0183 33.5H56.9913V35H57.0183V33.5ZM57.0453 33.5H57.0183V35H57.0453V33.5ZM57.0722 33.5H57.0453V35H57.0722V33.5ZM57.0991 33.5H57.0722V35H57.0991V33.5ZM57.1259 33.5H57.0991V35H57.1259V33.5ZM57.1527 33.5H57.1259V35H57.1527V33.5ZM57.1795 33.5H57.1527V35H57.1795V33.5ZM57.2062 33.5H57.1795V35H57.2062V33.5ZM57.2328 33.5H57.2062V35H57.2328V33.5ZM57.2595 33.5H57.2328V35H57.2595V33.5ZM57.286 33.5H57.2595V35H57.286V33.5ZM57.3126 33.5H57.286V35H57.3126V33.5ZM57.3391 33.5H57.3126V35H57.3391V33.5ZM57.3655 33.5H57.3391V35H57.3655V33.5ZM57.392 33.5H57.3655V35H57.392V33.5ZM57.4183 33.5H57.392V35H57.4183V33.5ZM57.4447 33.5H57.4183V35H57.4447V33.5ZM57.471 33.5H57.4447V35H57.471V33.5ZM57.4972 33.5H57.471V35H57.4972V33.5ZM57.5234 33.5H57.4972V35H57.5234V33.5ZM57.5496 33.5H57.5234V35H57.5496V33.5ZM57.5757 33.5H57.5496V35H57.5757V33.5ZM57.6018 33.5H57.5757V35H57.6018V33.5ZM57.6278 33.5H57.6018V35H57.6278V33.5ZM57.6539 33.5H57.6278V35H57.6539V33.5ZM57.6798 33.5H57.6539V35H57.6798V33.5ZM57.7057 33.5H57.6798V35H57.7057V33.5ZM57.7316 33.5H57.7057V35H57.7316V33.5ZM57.7574 33.5H57.7316V35H57.7574V33.5ZM57.7832 33.5H57.7574V35H57.7832V33.5ZM57.809 33.5H57.7832V35H57.809V33.5ZM57.8347 33.5H57.809V35H57.8347V33.5ZM57.8604 33.5H57.8347V35H57.8604V33.5ZM57.886 33.5H57.8604V35H57.886V33.5ZM57.9116 33.5H57.886V35H57.9116V33.5ZM57.9371 33.5H57.9116V35H57.9371V33.5ZM57.9626 33.5H57.9371V35H57.9626V33.5ZM57.9881 33.5H57.9626V35H57.9881V33.5ZM58.0135 33.5H57.9881V35H58.0135V33.5ZM58.0389 33.5H58.0135V35H58.0389V33.5ZM58.0642 33.5H58.0389V35H58.0642V33.5ZM58.0895 33.5H58.0642V35H58.0895V33.5ZM58.1148 33.5H58.0895V35H58.1148V33.5ZM58.14 33.5H58.1148V35H58.14V33.5ZM58.1652 33.5H58.14V35H58.1652V33.5ZM58.1903 33.5H58.1652V35H58.1903V33.5ZM58.2154 33.5H58.1903V35H58.2154V33.5ZM58.2405 33.5H58.2154V35H58.2405V33.5ZM58.2655 33.5H58.2405V35H58.2655V33.5ZM58.2904 33.5H58.2655V35H58.2904V33.5ZM58.3153 33.5H58.2904V35H58.3153V33.5ZM58.3402 33.5H58.3153V35H58.3402V33.5ZM58.3651 33.5H58.3402V35H58.3651V33.5ZM58.3899 33.5H58.3651V35H58.3899V33.5ZM58.4146 33.5H58.3899V35H58.4146V33.5ZM58.4393 33.5H58.4146V35H58.4393V33.5ZM58.464 33.5H58.4393V35H58.464V33.5ZM58.4886 33.5H58.464V35H58.4886V33.5ZM58.5132 33.5H58.4886V35H58.5132V33.5ZM58.5378 33.5H58.5132V35H58.5378V33.5ZM58.5623 33.5H58.5378V35H58.5623V33.5ZM58.5868 33.5H58.5623V35H58.5868V33.5ZM58.6112 33.5H58.5868V35H58.6112V33.5ZM58.6356 33.5H58.6112V35H58.6356V33.5ZM58.6599 33.5H58.6356V35H58.6599V33.5ZM58.6842 33.5H58.6599V35H58.6842V33.5ZM58.7085 33.5H58.6842V35H58.7085V33.5ZM58.7327 33.5H58.7085V35H58.7327V33.5ZM58.7569 33.5H58.7327V35H58.7569V33.5ZM58.781 33.5H58.7569V35H58.781V33.5ZM58.8051 33.5H58.781V35H58.8051V33.5ZM58.8292 33.5H58.8051V35H58.8292V33.5ZM58.8532 33.5H58.8292V35H58.8532V33.5ZM58.8771 33.5H58.8532V35H58.8771V33.5ZM58.9011 33.5H58.8771V35H58.9011V33.5ZM58.9249 33.5H58.9011V35H58.9249V33.5ZM58.9488 33.5H58.9249V35H58.9488V33.5ZM58.9726 33.5H58.9488V35H58.9726V33.5ZM58.9964 33.5H58.9726V35H58.9964V33.5ZM59.0201 33.5H58.9964V35H59.0201V33.5ZM59.0437 33.5H59.0201V35H59.0437V33.5ZM59.0674 33.5H59.0437V35H59.0674V33.5ZM59.091 33.5H59.0674V35H59.091V33.5ZM59.1145 33.5H59.091V35H59.1145V33.5ZM59.138 33.5H59.1145V35H59.138V33.5ZM59.1615 33.5H59.138V35H59.1615V33.5ZM59.1849 33.5H59.1615V35H59.1849V33.5ZM59.2083 33.5H59.1849V35H59.2083V33.5ZM59.2317 33.5H59.2083V35H59.2317V33.5ZM59.255 33.5H59.2317V35H59.255V33.5ZM59.2782 33.5H59.255V35H59.2782V33.5ZM59.3015 33.5H59.2782V35H59.3015V33.5ZM59.3247 33.5H59.3015V35H59.3247V33.5ZM59.3478 33.5H59.3247V35H59.3478V33.5ZM59.3709 33.5H59.3478V35H59.3709V33.5ZM59.3939 33.5H59.3709V35H59.3939V33.5ZM59.417 33.5H59.3939V35H59.417V33.5ZM59.4399 33.5H59.417V35H59.4399V33.5ZM59.4629 33.5H59.4399V35H59.4629V33.5ZM59.4858 33.5H59.4629V35H59.4858V33.5ZM59.5086 33.5H59.4858V35H59.5086V33.5ZM59.5314 33.5H59.5086V35H59.5314V33.5ZM59.5542 33.5H59.5314V35H59.5542V33.5ZM59.5769 33.5H59.5542V35H59.5769V33.5ZM59.5996 33.5H59.5769V35H59.5996V33.5ZM59.6222 33.5H59.5996V35H59.6222V33.5ZM59.6448 33.5H59.6222V35H59.6448V33.5ZM59.6674 33.5H59.6448V35H59.6674V33.5ZM59.6899 33.5H59.6674V35H59.6899V33.5ZM59.7124 33.5H59.6899V35H59.7124V33.5ZM59.7348 33.5H59.7124V35H59.7348V33.5ZM59.7572 33.5H59.7348V35H59.7572V33.5ZM59.7795 33.5H59.7572V35H59.7795V33.5ZM59.8018 33.5H59.7795V35H59.8018V33.5ZM59.8241 33.5H59.8018V35H59.8241V33.5ZM59.8463 33.5H59.8241V35H59.8463V33.5ZM59.8685 33.5H59.8463V35H59.8685V33.5ZM59.8907 33.5H59.8685V35H59.8907V33.5ZM59.9128 33.5H59.8907V35H59.9128V33.5ZM59.9348 33.5H59.9128V35H59.9348V33.5ZM59.9568 33.5H59.9348V35H59.9568V33.5ZM59.9788 33.5H59.9568V35H59.9788V33.5ZM60.0008 33.5H59.9788V35H60.0008V33.5ZM60.0227 33.5H60.0008V35H60.0227V33.5ZM60.0445 33.5H60.0227V35H60.0445V33.5ZM60.0663 33.5H60.0445V35H60.0663V33.5ZM60.0881 33.5H60.0663V35H60.0881V33.5ZM60.1098 33.5H60.0881V35H60.1098V33.5ZM60.1315 33.5H60.1098V35H60.1315V33.5ZM60.1531 33.5H60.1315V35H60.1531V33.5ZM60.1747 33.5H60.1531V35H60.1747V33.5ZM60.1963 33.5H60.1747V35H60.1963V33.5ZM60.2178 33.5H60.1963V35H60.2178V33.5ZM60.2393 33.5H60.2178V35H60.2393V33.5ZM60.2607 33.5H60.2393V35H60.2607V33.5ZM60.2821 33.5H60.2607V35H60.2821V33.5ZM60.3035 33.5H60.2821V35H60.3035V33.5ZM60.3248 33.5H60.3035V35H60.3248V33.5ZM60.3461 33.5H60.3248V35H60.3461V33.5ZM61.0961 35.75V34.25H59.5961V35.75H61.0961ZM60.3248 36.5H60.3461V35H60.3248V36.5ZM60.3035 36.5H60.3248V35H60.3035V36.5ZM60.2821 36.5H60.3035V35H60.2821V36.5ZM60.2607 36.5H60.2821V35H60.2607V36.5ZM60.2393 36.5H60.2607V35H60.2393V36.5ZM60.2178 36.5H60.2393V35H60.2178V36.5ZM60.1963 36.5H60.2178V35H60.1963V36.5ZM60.1747 36.5H60.1963V35H60.1747V36.5ZM60.1531 36.5H60.1747V35H60.1531V36.5ZM60.1315 36.5H60.1531V35H60.1315V36.5ZM60.1098 36.5H60.1315V35H60.1098V36.5ZM60.0881 36.5H60.1098V35H60.0881V36.5ZM60.0663 36.5H60.0881V35H60.0663V36.5ZM60.0445 36.5H60.0663V35H60.0445V36.5ZM60.0227 36.5H60.0445V35H60.0227V36.5ZM60.0008 36.5H60.0227V35H60.0008V36.5ZM59.9788 36.5H60.0008V35H59.9788V36.5ZM59.9568 36.5H59.9788V35H59.9568V36.5ZM59.9348 36.5H59.9568V35H59.9348V36.5ZM59.9128 36.5H59.9348V35H59.9128V36.5ZM59.8907 36.5H59.9128V35H59.8907V36.5ZM59.8685 36.5H59.8907V35H59.8685V36.5ZM59.8463 36.5H59.8685V35H59.8463V36.5ZM59.8241 36.5H59.8463V35H59.8241V36.5ZM59.8018 36.5H59.8241V35H59.8018V36.5ZM59.7795 36.5H59.8018V35H59.7795V36.5ZM59.7572 36.5H59.7795V35H59.7572V36.5ZM59.7348 36.5H59.7572V35H59.7348V36.5ZM59.7124 36.5H59.7348V35H59.7124V36.5ZM59.6899 36.5H59.7124V35H59.6899V36.5ZM59.6674 36.5H59.6899V35H59.6674V36.5ZM59.6448 36.5H59.6674V35H59.6448V36.5ZM59.6222 36.5H59.6448V35H59.6222V36.5ZM59.5996 36.5H59.6222V35H59.5996V36.5ZM59.5769 36.5H59.5996V35H59.5769V36.5ZM59.5542 36.5H59.5769V35H59.5542V36.5ZM59.5314 36.5H59.5542V35H59.5314V36.5ZM59.5086 36.5H59.5314V35H59.5086V36.5ZM59.4858 36.5H59.5086V35H59.4858V36.5ZM59.4629 36.5H59.4858V35H59.4629V36.5ZM59.4399 36.5H59.4629V35H59.4399V36.5ZM59.417 36.5H59.4399V35H59.417V36.5ZM59.3939 36.5H59.417V35H59.3939V36.5ZM59.3709 36.5H59.3939V35H59.3709V36.5ZM59.3478 36.5H59.3709V35H59.3478V36.5ZM59.3247 36.5H59.3478V35H59.3247V36.5ZM59.3015 36.5H59.3247V35H59.3015V36.5ZM59.2782 36.5H59.3015V35H59.2782V36.5ZM59.255 36.5H59.2782V35H59.255V36.5ZM59.2317 36.5H59.255V35H59.2317V36.5ZM59.2083 36.5H59.2317V35H59.2083V36.5ZM59.1849 36.5H59.2083V35H59.1849V36.5ZM59.1615 36.5H59.1849V35H59.1615V36.5ZM59.138 36.5H59.1615V35H59.138V36.5ZM59.1145 36.5H59.138V35H59.1145V36.5ZM59.091 36.5H59.1145V35H59.091V36.5ZM59.0674 36.5H59.091V35H59.0674V36.5ZM59.0437 36.5H59.0674V35H59.0437V36.5ZM59.0201 36.5H59.0437V35H59.0201V36.5ZM58.9964 36.5H59.0201V35H58.9964V36.5ZM58.9726 36.5H58.9964V35H58.9726V36.5ZM58.9488 36.5H58.9726V35H58.9488V36.5ZM58.9249 36.5H58.9488V35H58.9249V36.5ZM58.9011 36.5H58.9249V35H58.9011V36.5ZM58.8771 36.5H58.9011V35H58.8771V36.5ZM58.8532 36.5H58.8771V35H58.8532V36.5ZM58.8292 36.5H58.8532V35H58.8292V36.5ZM58.8051 36.5H58.8292V35H58.8051V36.5ZM58.781 36.5H58.8051V35H58.781V36.5ZM58.7569 36.5H58.781V35H58.7569V36.5ZM58.7327 36.5H58.7569V35H58.7327V36.5ZM58.7085 36.5H58.7327V35H58.7085V36.5ZM58.6842 36.5H58.7085V35H58.6842V36.5ZM58.6599 36.5H58.6842V35H58.6599V36.5ZM58.6356 36.5H58.6599V35H58.6356V36.5ZM58.6112 36.5H58.6356V35H58.6112V36.5ZM58.5868 36.5H58.6112V35H58.5868V36.5ZM58.5623 36.5H58.5868V35H58.5623V36.5ZM58.5378 36.5H58.5623V35H58.5378V36.5ZM58.5132 36.5H58.5378V35H58.5132V36.5ZM58.4886 36.5H58.5132V35H58.4886V36.5ZM58.464 36.5H58.4886V35H58.464V36.5ZM58.4393 36.5H58.464V35H58.4393V36.5ZM58.4146 36.5H58.4393V35H58.4146V36.5ZM58.3899 36.5H58.4146V35H58.3899V36.5ZM58.3651 36.5H58.3899V35H58.3651V36.5ZM58.3402 36.5H58.3651V35H58.3402V36.5ZM58.3153 36.5H58.3402V35H58.3153V36.5ZM58.2904 36.5H58.3153V35H58.2904V36.5ZM58.2655 36.5H58.2904V35H58.2655V36.5ZM58.2405 36.5H58.2655V35H58.2405V36.5ZM58.2154 36.5H58.2405V35H58.2154V36.5ZM58.1903 36.5H58.2154V35H58.1903V36.5ZM58.1652 36.5H58.1903V35H58.1652V36.5ZM58.14 36.5H58.1652V35H58.14V36.5ZM58.1148 36.5H58.14V35H58.1148V36.5ZM58.0895 36.5H58.1148V35H58.0895V36.5ZM58.0642 36.5H58.0895V35H58.0642V36.5ZM58.0389 36.5H58.0642V35H58.0389V36.5ZM58.0135 36.5H58.0389V35H58.0135V36.5ZM57.9881 36.5H58.0135V35H57.9881V36.5ZM57.9626 36.5H57.9881V35H57.9626V36.5ZM57.9371 36.5H57.9626V35H57.9371V36.5ZM57.9116 36.5H57.9371V35H57.9116V36.5ZM57.886 36.5H57.9116V35H57.886V36.5ZM57.8604 36.5H57.886V35H57.8604V36.5ZM57.8347 36.5H57.8604V35H57.8347V36.5ZM57.809 36.5H57.8347V35H57.809V36.5ZM57.7832 36.5H57.809V35H57.7832V36.5ZM57.7574 36.5H57.7832V35H57.7574V36.5ZM57.7316 36.5H57.7574V35H57.7316V36.5ZM57.7057 36.5H57.7316V35H57.7057V36.5ZM57.6798 36.5H57.7057V35H57.6798V36.5ZM57.6539 36.5H57.6798V35H57.6539V36.5ZM57.6278 36.5H57.6539V35H57.6278V36.5ZM57.6018 36.5H57.6278V35H57.6018V36.5ZM57.5757 36.5H57.6018V35H57.5757V36.5ZM57.5496 36.5H57.5757V35H57.5496V36.5ZM57.5234 36.5H57.5496V35H57.5234V36.5ZM57.4972 36.5H57.5234V35H57.4972V36.5ZM57.471 36.5H57.4972V35H57.471V36.5ZM57.4447 36.5H57.471V35H57.4447V36.5ZM57.4183 36.5H57.4447V35H57.4183V36.5ZM57.392 36.5H57.4183V35H57.392V36.5ZM57.3655 36.5H57.392V35H57.3655V36.5ZM57.3391 36.5H57.3655V35H57.3391V36.5ZM57.3126 36.5H57.3391V35H57.3126V36.5ZM57.286 36.5H57.3126V35H57.286V36.5ZM57.2595 36.5H57.286V35H57.2595V36.5ZM57.2328 36.5H57.2595V35H57.2328V36.5ZM57.2062 36.5H57.2328V35H57.2062V36.5ZM57.1795 36.5H57.2062V35H57.1795V36.5ZM57.1527 36.5H57.1795V35H57.1527V36.5ZM57.1259 36.5H57.1527V35H57.1259V36.5ZM57.0991 36.5H57.1259V35H57.0991V36.5ZM57.0722 36.5H57.0991V35H57.0722V36.5ZM57.0453 36.5H57.0722V35H57.0453V36.5ZM57.0183 36.5H57.0453V35H57.0183V36.5ZM56.9913 36.5H57.0183V35H56.9913V36.5ZM56.9643 36.5H56.9913V35H56.9643V36.5ZM56.9372 36.5H56.9643V35H56.9372V36.5ZM56.9101 36.5H56.9372V35H56.9101V36.5ZM56.8829 36.5H56.9101V35H56.8829V36.5ZM56.8557 36.5H56.8829V35H56.8557V36.5ZM56.8285 36.5H56.8557V35H56.8285V36.5ZM56.8012 36.5H56.8285V35H56.8012V36.5ZM56.7739 36.5H56.8012V35H56.7739V36.5ZM56.7465 36.5H56.7739V35H56.7465V36.5ZM56.7191 36.5H56.7465V35H56.7191V36.5ZM56.6916 36.5H56.7191V35H56.6916V36.5ZM56.6641 36.5H56.6916V35H56.6641V36.5ZM56.6366 36.5H56.6641V35H56.6366V36.5ZM56.609 36.5H56.6366V35H56.609V36.5ZM56.5814 36.5H56.609V35H56.5814V36.5ZM56.5537 36.5H56.5814V35H56.5537V36.5ZM56.526 36.5H56.5537V35H56.526V36.5ZM56.4983 36.5H56.526V35H56.4983V36.5ZM56.4705 36.5H56.4983V35H56.4705V36.5ZM56.4426 36.5H56.4705V35H56.4426V36.5ZM56.4148 36.5H56.4426V35H56.4148V36.5ZM56.3869 36.5H56.4148V35H56.3869V36.5ZM56.3589 36.5H56.3869V35H56.3589V36.5ZM56.3309 36.5H56.3589V35H56.3309V36.5ZM56.3029 36.5H56.3309V35H56.3029V36.5ZM56.2748 36.5H56.3029V35H56.2748V36.5ZM56.2467 36.5H56.2748V35H56.2467V36.5ZM56.2185 36.5H56.2467V35H56.2185V36.5ZM56.1903 36.5H56.2185V35H56.1903V36.5ZM56.1621 36.5H56.1903V35H56.1621V36.5ZM56.1338 36.5H56.1621V35H56.1338V36.5ZM56.1055 36.5H56.1338V35H56.1055V36.5ZM56.0771 36.5H56.1055V35H56.0771V36.5ZM56.0487 36.5H56.0771V35H56.0487V36.5ZM56.0202 36.5H56.0487V35H56.0202V36.5ZM55.9917 36.5H56.0202V35H55.9917V36.5ZM55.9632 36.5H55.9917V35H55.9632V36.5ZM55.9346 36.5H55.9632V35H55.9346V36.5ZM55.906 36.5H55.9346V35H55.906V36.5ZM55.8774 36.5H55.906V35H55.8774V36.5ZM55.8487 36.5H55.8774V35H55.8487V36.5ZM55.8199 36.5H55.8487V35H55.8199V36.5ZM55.7911 36.5H55.8199V35H55.7911V36.5ZM55.7623 36.5H55.7911V35H55.7623V36.5ZM55.7334 36.5H55.7623V35H55.7334V36.5ZM55.7045 36.5H55.7334V35H55.7045V36.5ZM55.6756 36.5H55.7045V35H55.6756V36.5ZM55.6466 36.5H55.6756V35H55.6466V36.5ZM55.6176 36.5H55.6466V35H55.6176V36.5ZM55.5885 36.5H55.6176V35H55.5885V36.5ZM55.5594 36.5H55.5885V35H55.5594V36.5ZM55.5302 36.5H55.5594V35H55.5302V36.5ZM55.501 36.5H55.5302V35H55.501V36.5ZM55.4718 36.5H55.501V35H55.4718V36.5ZM55.4425 36.5H55.4718V35H55.4425V36.5ZM55.4132 36.5H55.4425V35H55.4132V36.5ZM55.3838 36.5H55.4132V35H55.3838V36.5ZM55.3544 36.5H55.3838V35H55.3544V36.5ZM55.325 36.5H55.3544V35H55.325V36.5ZM55.2955 36.5H55.325V35H55.2955V36.5ZM55.2659 36.5H55.2955V35H55.2659V36.5ZM55.2364 36.5H55.2659V35H55.2364V36.5ZM55.2068 36.5H55.2364V35H55.2068V36.5ZM55.1771 36.5H55.2068V35H55.1771V36.5ZM55.1474 36.5H55.1771V35H55.1474V36.5ZM55.1177 36.5H55.1474V35H55.1177V36.5ZM55.0879 36.5H55.1177V35H55.0879V36.5ZM55.0581 36.5H55.0879V35H55.0581V36.5ZM55.0282 36.5H55.0581V35H55.0282V36.5ZM54.9983 36.5H55.0282V35H54.9983V36.5ZM54.9683 36.5H54.9983V35H54.9683V36.5ZM54.9384 36.5H54.9683V35H54.9384V36.5ZM54.9083 36.5H54.9384V35H54.9083V36.5ZM54.8783 36.5H54.9083V35H54.8783V36.5ZM54.8482 36.5H54.8783V35H54.8482V36.5ZM54.818 36.5H54.8482V35H54.818V36.5ZM54.7878 36.5H54.818V35H54.7878V36.5ZM54.7576 36.5H54.7878V35H54.7576V36.5ZM54.7273 36.5H54.7576V35H54.7273V36.5ZM54.697 36.5H54.7273V35H54.697V36.5ZM54.6666 36.5H54.697V35H54.6666V36.5ZM54.6362 36.5H54.6666V35H54.6362V36.5ZM54.6058 36.5H54.6362V35H54.6058V36.5ZM54.5753 36.5H54.6058V35H54.5753V36.5ZM54.5448 36.5H54.5753V35H54.5448V36.5ZM54.5142 36.5H54.5448V35H54.5142V36.5ZM54.4836 36.5H54.5142V35H54.4836V36.5ZM54.4529 36.5H54.4836V35H54.4529V36.5ZM54.4222 36.5H54.4529V35H54.4222V36.5ZM54.3915 36.5H54.4222V35H54.3915V36.5ZM54.3607 36.5H54.3915V35H54.3607V36.5ZM54.3299 36.5H54.3607V35H54.3299V36.5ZM54.299 36.5H54.3299V35H54.299V36.5ZM54.2681 36.5H54.299V35H54.2681V36.5ZM54.2372 36.5H54.2681V35H54.2372V36.5ZM54.2062 36.5H54.2372V35H54.2062V36.5ZM54.1752 36.5H54.2062V35H54.1752V36.5ZM54.1441 36.5H54.1752V35H54.1441V36.5ZM54.113 36.5H54.1441V35H54.113V36.5ZM54.0819 36.5H54.113V35H54.0819V36.5ZM54.0507 36.5H54.0819V35H54.0507V36.5ZM54.0195 36.5H54.0507V35H54.0195V36.5ZM53.9882 36.5H54.0195V35H53.9882V36.5ZM53.9569 36.5H53.9882V35H53.9569V36.5ZM53.9255 36.5H53.9569V35H53.9255V36.5ZM53.8941 36.5H53.9255V35H53.8941V36.5ZM53.8627 36.5H53.8941V35H53.8627V36.5ZM53.8312 36.5H53.8627V35H53.8312V36.5ZM53.7997 36.5H53.8312V35H53.7997V36.5ZM53.7681 36.5H53.7997V35H53.7681V36.5ZM53.7365 36.5H53.7681V35H53.7365V36.5ZM53.7049 36.5H53.7365V35H53.7049V36.5ZM53.6732 36.5H53.7049V35H53.6732V36.5ZM53.6414 36.5H53.6732V35H53.6414V36.5ZM53.6097 36.5H53.6414V35H53.6097V36.5ZM53.5778 36.5H53.6097V35H53.5778V36.5ZM53.546 36.5H53.5778V35H53.546V36.5ZM53.5141 36.5H53.546V35H53.5141V36.5ZM53.4822 36.5H53.5141V35H53.4822V36.5ZM53.4502 36.5H53.4822V35H53.4502V36.5ZM53.4182 36.5H53.4502V35H53.4182V36.5ZM53.3861 36.5H53.4182V35H53.3861V36.5ZM53.354 36.5H53.3861V35H53.354V36.5ZM53.3218 36.5H53.354V35H53.3218V36.5ZM53.2897 36.5H53.3218V35H53.2897V36.5ZM53.2574 36.5H53.2897V35H53.2574V36.5ZM53.2252 36.5H53.2574V35H53.2252V36.5ZM53.1929 36.5H53.2252V35H53.1929V36.5ZM53.1605 36.5H53.1929V35H53.1605V36.5ZM53.1281 36.5H53.1605V35H53.1281V36.5ZM53.0957 36.5H53.1281V35H53.0957V36.5ZM53.0632 36.5H53.0957V35H53.0632V36.5ZM53.0307 36.5H53.0632V35H53.0307V36.5ZM52.9981 36.5H53.0307V35H52.9981V36.5ZM52.9655 36.5H52.9981V35H52.9655V36.5ZM52.9329 36.5H52.9655V35H52.9329V36.5ZM52.9002 36.5H52.9329V35H52.9002V36.5ZM52.8675 36.5H52.9002V35H52.8675V36.5ZM52.8347 36.5H52.8675V35H52.8347V36.5ZM52.8019 36.5H52.8347V35H52.8019V36.5ZM52.769 36.5H52.8019V35H52.769V36.5ZM52.7361 36.5H52.769V35H52.7361V36.5ZM52.7032 36.5H52.7361V35H52.7032V36.5ZM52.6702 36.5H52.7032V35H52.6702V36.5ZM52.6372 36.5H52.6702V35H52.6372V36.5ZM52.6042 36.5H52.6372V35H52.6042V36.5ZM52.5711 36.5H52.6042V35H52.5711V36.5ZM52.5379 36.5H52.5711V35H52.5379V36.5ZM52.5047 36.5H52.5379V35H52.5047V36.5ZM52.4715 36.5H52.5047V35H52.4715V36.5ZM52.4382 36.5H52.4715V35H52.4382V36.5ZM52.4049 36.5H52.4382V35H52.4049V36.5ZM52.3716 36.5H52.4049V35H52.3716V36.5ZM52.3382 36.5H52.3716V35H52.3382V36.5ZM52.3048 36.5H52.3382V35H52.3048V36.5ZM52.2713 36.5H52.3048V35H52.2713V36.5ZM52.2378 36.5H52.2713V35H52.2378V36.5ZM52.2042 36.5H52.2378V35H52.2042V36.5ZM52.1706 36.5H52.2042V35H52.1706V36.5ZM52.137 36.5H52.1706V35H52.137V36.5ZM52.1033 36.5H52.137V35H52.1033V36.5ZM52.0696 36.5H52.1033V35H52.0696V36.5ZM52.0358 36.5H52.0696V35H52.0358V36.5ZM52.002 36.5H52.0358V35H52.002V36.5ZM51.9682 36.5H52.002V35H51.9682V36.5ZM51.9343 36.5H51.9682V35H51.9343V36.5ZM51.9003 36.5H51.9343V35H51.9003V36.5ZM51.8664 36.5H51.9003V35H51.8664V36.5ZM51.8324 36.5H51.8664V35H51.8324V36.5ZM51.7983 36.5H51.8324V35H51.7983V36.5ZM51.7642 36.5H51.7983V35H51.7642V36.5ZM51.7301 36.5H51.7642V35H51.7301V36.5ZM51.6959 36.5H51.7301V35H51.6959V36.5ZM51.6617 36.5H51.6959V35H51.6617V36.5ZM51.6274 36.5H51.6617V35H51.6274V36.5ZM51.5931 36.5H51.6274V35H51.5931V36.5ZM51.5588 36.5H51.5931V35H51.5588V36.5ZM51.5244 36.5H51.5588V35H51.5244V36.5ZM51.4899 36.5H51.5244V35H51.4899V36.5ZM51.4555 36.5H51.4899V35H51.4555V36.5ZM51.421 36.5H51.4555V35H51.421V36.5ZM51.3864 36.5H51.421V35H51.3864V36.5ZM51.3518 36.5H51.3864V35H51.3518V36.5ZM51.3172 36.5H51.3518V35H51.3172V36.5ZM51.2825 36.5H51.3172V35H51.2825V36.5ZM51.2478 36.5H51.2825V35H51.2478V36.5ZM51.213 36.5H51.2478V35H51.213V36.5ZM51.1782 36.5H51.213V35H51.1782V36.5ZM51.1434 36.5H51.1782V35H51.1434V36.5ZM51.1085 36.5H51.1434V35H51.1085V36.5ZM51.0736 36.5H51.1085V35H51.0736V36.5ZM51.0386 36.5H51.0736V35H51.0386V36.5ZM51.0036 36.5H51.0386V35H51.0036V36.5ZM50.9685 36.5H51.0036V35H50.9685V36.5ZM50.9335 36.5H50.9685V35H50.9335V36.5ZM50.8983 36.5H50.9335V35H50.8983V36.5ZM50.8631 36.5H50.8983V35H50.8631V36.5ZM50.8279 36.5H50.8631V35H50.8279V36.5ZM50.7927 36.5H50.8279V35H50.7927V36.5ZM50.7574 36.5H50.7927V35H50.7574V36.5ZM50.722 36.5H50.7574V35H50.722V36.5ZM50.6867 36.5H50.722V35H50.6867V36.5ZM50.6512 36.5H50.6867V35H50.6512V36.5ZM50.6158 36.5H50.6512V35H50.6158V36.5ZM50.5803 36.5H50.6158V35H50.5803V36.5ZM50.5447 36.5H50.5803V35H50.5447V36.5ZM50.5091 36.5H50.5447V35H50.5091V36.5ZM50.4735 36.5H50.5091V35H50.4735V36.5ZM50.4378 36.5H50.4735V35H50.4378V36.5ZM50.4021 36.5H50.4378V35H50.4021V36.5ZM50.3663 36.5H50.4021V35H50.3663V36.5ZM50.3305 36.5H50.3663V35H50.3305V36.5ZM50.2947 36.5H50.3305V35H50.2947V36.5ZM50.2588 36.5H50.2947V35H50.2588V36.5ZM50.2229 36.5H50.2588V35H50.2229V36.5ZM50.1869 36.5H50.2229V35H50.1869V36.5ZM50.1509 36.5H50.1869V35H50.1509V36.5ZM50.1149 36.5H50.1509V35H50.1149V36.5ZM50.0788 36.5H50.1149V35H50.0788V36.5ZM50.0427 36.5H50.0788V35H50.0427V36.5ZM50.0065 36.5H50.0427V35H50.0065V36.5ZM49.9703 36.5H50.0065V35H49.9703V36.5ZM49.934 36.5H49.9703V35H49.934V36.5ZM49.8977 36.5H49.934V35H49.8977V36.5ZM49.8614 36.5H49.8977V35H49.8614V36.5ZM49.825 36.5H49.8614V35H49.825V36.5ZM49.7886 36.5H49.825V35H49.7886V36.5ZM49.7521 36.5H49.7886V35H49.7521V36.5ZM49.7156 36.5H49.7521V35H49.7156V36.5ZM49.6791 36.5H49.7156V35H49.6791V36.5ZM49.6425 36.5H49.6791V35H49.6425V36.5ZM49.6059 36.5H49.6425V35H49.6059V36.5ZM49.5692 36.5H49.6059V35H49.5692V36.5ZM49.5325 36.5H49.5692V35H49.5325V36.5ZM49.4957 36.5H49.5325V35H49.4957V36.5ZM49.459 36.5H49.4957V35H49.459V36.5ZM49.4221 36.5H49.459V35H49.4221V36.5ZM49.3852 36.5H49.4221V35H49.3852V36.5ZM49.3483 36.5H49.3852V35H49.3483V36.5ZM49.3114 36.5H49.3483V35H49.3114V36.5ZM49.2744 36.5H49.3114V35H49.2744V36.5ZM49.2373 36.5H49.2744V35H49.2373V36.5ZM49.2002 36.5H49.2373V35H49.2002V36.5ZM49.1631 36.5H49.2002V35H49.1631V36.5ZM49.1259 36.5H49.1631V35H49.1259V36.5ZM49.0887 36.5H49.1259V35H49.0887V36.5ZM49.0515 36.5H49.0887V35H49.0515V36.5ZM49.0142 36.5H49.0515V35H49.0142V36.5ZM48.9769 36.5H49.0142V35H48.9769V36.5ZM48.9395 36.5H48.9769V35H48.9395V36.5ZM48.9021 36.5H48.9395V35H48.9021V36.5ZM48.8646 36.5H48.9021V35H48.8646V36.5ZM48.8271 36.5H48.8646V35H48.8271V36.5ZM48.7896 36.5H48.8271V35H48.7896V36.5ZM48.752 36.5H48.7896V35H48.752V36.5ZM48.7144 36.5H48.752V35H48.7144V36.5ZM48.6767 36.5H48.7144V35H48.6767V36.5ZM48.639 36.5H48.6767V35H48.639V36.5ZM48.6012 36.5H48.639V35H48.6012V36.5ZM48.5635 36.5H48.6012V35H48.5635V36.5ZM48.5256 36.5H48.5635V35H48.5256V36.5ZM48.4877 36.5H48.5256V35H48.4877V36.5ZM48.4498 36.5H48.4877V35H48.4498V36.5ZM48.4119 36.5H48.4498V35H48.4119V36.5ZM48.3739 36.5H48.4119V35H48.3739V36.5ZM48.3358 36.5H48.3739V35H48.3358V36.5ZM48.2978 36.5H48.3358V35H48.2978V36.5ZM48.2596 36.5H48.2978V35H48.2596V36.5ZM48.2215 36.5H48.2596V35H48.2215V36.5ZM48.1833 36.5H48.2215V35H48.1833V36.5ZM48.145 36.5H48.1833V35H48.145V36.5ZM48.1067 36.5H48.145V35H48.1067V36.5ZM48.0684 36.5H48.1067V35H48.0684V36.5ZM48.03 36.5H48.0684V35H48.03V36.5ZM47.9916 36.5H48.03V35H47.9916V36.5ZM47.9532 36.5H47.9916V35H47.9532V36.5ZM47.9147 36.5H47.9532V35H47.9147V36.5ZM47.8761 36.5H47.9147V35H47.8761V36.5ZM47.8376 36.5H47.8761V35H47.8376V36.5ZM47.7989 36.5H47.8376V35H47.7989V36.5ZM47.7603 36.5H47.7989V35H47.7603V36.5ZM47.7216 36.5H47.7603V35H47.7216V36.5ZM47.6828 36.5H47.7216V35H47.6828V36.5ZM47.644 36.5H47.6828V35H47.644V36.5ZM47.6052 36.5H47.644V35H47.6052V36.5ZM47.5663 36.5H47.6052V35H47.5663V36.5ZM47.5274 36.5H47.5663V35H47.5274V36.5ZM47.4885 36.5H47.5274V35H47.4885V36.5ZM47.4495 36.5H47.4885V35H47.4495V36.5ZM47.4105 36.5H47.4495V35H47.4105V36.5ZM47.3714 36.5H47.4105V35H47.3714V36.5ZM47.3323 36.5H47.3714V35H47.3323V36.5ZM47.2931 36.5H47.3323V35H47.2931V36.5ZM47.2539 36.5H47.2931V35H47.2539V36.5ZM47.2147 36.5H47.2539V35H47.2147V36.5ZM47.1754 36.5H47.2147V35H47.1754V36.5ZM47.1361 36.5H47.1754V35H47.1361V36.5ZM47.0967 36.5H47.1361V35H47.0967V36.5ZM47.0573 36.5H47.0967V35H47.0573V36.5ZM47.0178 36.5H47.0573V35H47.0178V36.5ZM46.9783 36.5H47.0178V35H46.9783V36.5ZM46.9388 36.5H46.9783V35H46.9388V36.5ZM46.8992 36.5H46.9388V35H46.8992V36.5ZM46.8596 36.5H46.8992V35H46.8596V36.5ZM46.82 36.5H46.8596V35H46.82V36.5ZM46.7803 36.5H46.82V35H46.7803V36.5ZM46.7405 36.5H46.7803V35H46.7405V36.5ZM46.7007 36.5H46.7405V35H46.7007V36.5ZM46.6609 36.5H46.7007V35H46.6609V36.5ZM46.621 36.5H46.6609V35H46.621V36.5ZM46.5811 36.5H46.621V35H46.5811V36.5ZM46.5412 36.5H46.5811V35H46.5412V36.5ZM46.5012 36.5H46.5412V35H46.5012V36.5ZM46.4612 36.5H46.5012V35H46.4612V36.5ZM46.4211 36.5H46.4612V35H46.4211V36.5ZM46.381 36.5H46.4211V35H46.381V36.5ZM46.3408 36.5H46.381V35H46.3408V36.5ZM46.3006 36.5H46.3408V35H46.3006V36.5ZM46.2604 36.5H46.3006V35H46.2604V36.5ZM46.2201 36.5H46.2604V35H46.2201V36.5ZM46.1798 36.5H46.2201V35H46.1798V36.5ZM46.1394 36.5H46.1798V35H46.1394V36.5ZM46.099 36.5H46.1394V35H46.099V36.5ZM46.0586 36.5H46.099V35H46.0586V36.5ZM46.0181 36.5H46.0586V35H46.0181V36.5ZM45.9776 36.5H46.0181V35H45.9776V36.5ZM45.937 36.5H45.9776V35H45.937V36.5ZM45.8964 36.5H45.937V35H45.8964V36.5ZM45.8557 36.5H45.8964V35H45.8557V36.5ZM45.815 36.5H45.8557V35H45.815V36.5ZM45.7743 36.5H45.815V35H45.7743V36.5ZM45.7335 36.5H45.7743V35H45.7335V36.5ZM45.6927 36.5H45.7335V35H45.6927V36.5ZM45.6518 36.5H45.6927V35H45.6518V36.5ZM45.6109 36.5H45.6518V35H45.6109V36.5ZM45.57 36.5H45.6109V35H45.57V36.5ZM45.529 36.5H45.57V35H45.529V36.5ZM45.488 36.5H45.529V35H45.488V36.5ZM45.4469 36.5H45.488V35H45.4469V36.5ZM45.4058 36.5H45.4469V35H45.4058V36.5ZM45.3646 36.5H45.4058V35H45.3646V36.5ZM45.3235 36.5H45.3646V35H45.3235V36.5ZM45.2822 36.5H45.3235V35H45.2822V36.5ZM45.2409 36.5H45.2822V35H45.2409V36.5ZM45.1996 36.5H45.2409V35H45.1996V36.5ZM45.1583 36.5H45.1996V35H45.1583V36.5ZM45.1169 36.5H45.1583V35H45.1169V36.5ZM45.0754 36.5H45.1169V35H45.0754V36.5ZM45.0339 36.5H45.0754V35H45.0339V36.5ZM44.9924 36.5H45.0339V35H44.9924V36.5ZM44.9508 36.5H44.9924V35H44.9508V36.5ZM44.9092 36.5H44.9508V35H44.9092V36.5ZM44.8676 36.5H44.9092V35H44.8676V36.5ZM44.8259 36.5H44.8676V35H44.8259V36.5ZM44.7842 36.5H44.8259V35H44.7842V36.5ZM44.7424 36.5H44.7842V35H44.7424V36.5ZM44.7006 36.5H44.7424V35H44.7006V36.5ZM44.6587 36.5H44.7006V35H44.6587V36.5ZM44.6168 36.5H44.6587V35H44.6168V36.5ZM44.5749 36.5H44.6168V35H44.5749V36.5ZM44.5329 36.5H44.5749V35H44.5329V36.5ZM44.4909 36.5H44.5329V35H44.4909V36.5ZM44.4488 36.5H44.4909V35H44.4488V36.5ZM44.4067 36.5H44.4488V35H44.4067V36.5ZM44.3646 36.5H44.4067V35H44.3646V36.5ZM44.3224 36.5H44.3646V35H44.3224V36.5ZM44.2801 36.5H44.3224V35H44.2801V36.5ZM44.2379 36.5H44.2801V35H44.2379V36.5ZM44.1955 36.5H44.2379V35H44.1955V36.5ZM44.1532 36.5H44.1955V35H44.1532V36.5ZM44.1108 36.5H44.1532V35H44.1108V36.5ZM44.0684 36.5H44.1108V35H44.0684V36.5ZM44.0259 36.5H44.0684V35H44.0259V36.5ZM66.3951 36.5H66.4073V35H66.3951V36.5ZM65.6451 34.25V35.75H67.1451V34.25H65.6451ZM66.4073 33.5H66.3951V35H66.4073V33.5ZM66.4195 33.5H66.4073V35H66.4195V33.5ZM66.4318 33.5H66.4195V35H66.4318V33.5ZM66.444 33.5H66.4318V35H66.444V33.5ZM66.4563 33.5H66.444V35H66.4563V33.5ZM66.4686 33.5H66.4563V35H66.4686V33.5ZM66.4809 33.5H66.4686V35H66.4809V33.5ZM66.4932 33.5H66.4809V35H66.4932V33.5ZM66.5056 33.5H66.4932V35H66.5056V33.5ZM66.5179 33.5H66.5056V35H66.5179V33.5ZM66.5303 33.5H66.5179V35H66.5303V33.5ZM66.5426 33.5H66.5303V35H66.5426V33.5ZM66.555 33.5H66.5426V35H66.555V33.5ZM66.5674 33.5H66.555V35H66.5674V33.5ZM66.5798 33.5H66.5674V35H66.5798V33.5ZM66.5923 33.5H66.5798V35H66.5923V33.5ZM66.6047 33.5H66.5923V35H66.6047V33.5ZM66.6172 33.5H66.6047V35H66.6172V33.5ZM66.6296 33.5H66.6172V35H66.6296V33.5ZM66.6421 33.5H66.6296V35H66.6421V33.5ZM66.6546 33.5H66.6421V35H66.6546V33.5ZM66.6671 33.5H66.6546V35H66.6671V33.5ZM66.6797 33.5H66.6671V35H66.6797V33.5ZM66.6922 33.5H66.6797V35H66.6922V33.5ZM66.7047 33.5H66.6922V35H66.7047V33.5ZM66.7173 33.5H66.7047V35H66.7173V33.5ZM66.7299 33.5H66.7173V35H66.7299V33.5ZM66.7425 33.5H66.7299V35H66.7425V33.5ZM66.7551 33.5H66.7425V35H66.7551V33.5ZM66.7677 33.5H66.7551V35H66.7677V33.5ZM66.7803 33.5H66.7677V35H66.7803V33.5ZM66.793 33.5H66.7803V35H66.793V33.5ZM66.8057 33.5H66.793V35H66.8057V33.5ZM66.8183 33.5H66.8057V35H66.8183V33.5ZM66.831 33.5H66.8183V35H66.831V33.5ZM66.8437 33.5H66.831V35H66.8437V33.5ZM66.8564 33.5H66.8437V35H66.8564V33.5ZM66.8692 33.5H66.8564V35H66.8692V33.5ZM66.8819 33.5H66.8692V35H66.8819V33.5ZM66.8947 33.5H66.8819V35H66.8947V33.5ZM66.9074 33.5H66.8947V35H66.9074V33.5ZM66.9202 33.5H66.9074V35H66.9202V33.5ZM66.933 33.5H66.9202V35H66.933V33.5ZM66.9458 33.5H66.933V35H66.9458V33.5ZM66.9586 33.5H66.9458V35H66.9586V33.5ZM66.9715 33.5H66.9586V35H66.9715V33.5ZM66.9843 33.5H66.9715V35H66.9843V33.5ZM66.9972 33.5H66.9843V35H66.9972V33.5ZM67.0101 33.5H66.9972V35H67.0101V33.5ZM67.023 33.5H67.0101V35H67.023V33.5ZM67.0359 33.5H67.023V35H67.0359V33.5ZM67.0488 33.5H67.0359V35H67.0488V33.5ZM67.0617 33.5H67.0488V35H67.0617V33.5ZM67.0747 33.5H67.0617V35H67.0747V33.5ZM67.0876 33.5H67.0747V35H67.0876V33.5ZM67.1006 33.5H67.0876V35H67.1006V33.5ZM67.1136 33.5H67.1006V35H67.1136V33.5ZM67.1266 33.5H67.1136V35H67.1266V33.5ZM67.1396 33.5H67.1266V35H67.1396V33.5ZM67.1527 33.5H67.1396V35H67.1527V33.5ZM67.1657 33.5H67.1527V35H67.1657V33.5ZM67.1788 33.5H67.1657V35H67.1788V33.5ZM67.1918 33.5H67.1788V35H67.1918V33.5ZM67.2049 33.5H67.1918V35H67.2049V33.5ZM67.218 33.5H67.2049V35H67.218V33.5ZM67.2311 33.5H67.218V35H67.2311V33.5ZM67.2442 33.5H67.2311V35H67.2442V33.5ZM67.2574 33.5H67.2442V35H67.2574V33.5ZM67.2705 33.5H67.2574V35H67.2705V33.5ZM67.2837 33.5H67.2705V35H67.2837V33.5ZM67.2969 33.5H67.2837V35H67.2969V33.5ZM67.3101 33.5H67.2969V35H67.3101V33.5ZM67.3233 33.5H67.3101V35H67.3233V33.5ZM67.3365 33.5H67.3233V35H67.3365V33.5ZM67.3497 33.5H67.3365V35H67.3497V33.5ZM67.363 33.5H67.3497V35H67.363V33.5ZM67.3763 33.5H67.363V35H67.3763V33.5ZM67.3895 33.5H67.3763V35H67.3895V33.5ZM67.4028 33.5H67.3895V35H67.4028V33.5ZM67.4161 33.5H67.4028V35H67.4161V33.5ZM67.4294 33.5H67.4161V35H67.4294V33.5ZM67.4428 33.5H67.4294V35H67.4428V33.5ZM67.4561 33.5H67.4428V35H67.4561V33.5ZM67.4695 33.5H67.4561V35H67.4695V33.5ZM67.4828 33.5H67.4695V35H67.4828V33.5ZM67.4962 33.5H67.4828V35H67.4962V33.5ZM67.5096 33.5H67.4962V35H67.5096V33.5ZM67.523 33.5H67.5096V35H67.523V33.5ZM67.5365 33.5H67.523V35H67.5365V33.5ZM67.5499 33.5H67.5365V35H67.5499V33.5ZM67.5634 33.5H67.5499V35H67.5634V33.5ZM67.5768 33.5H67.5634V35H67.5768V33.5ZM67.5903 33.5H67.5768V35H67.5903V33.5ZM67.6038 33.5H67.5903V35H67.6038V33.5ZM67.6173 33.5H67.6038V35H67.6173V33.5ZM67.6308 33.5H67.6173V35H67.6308V33.5ZM67.6444 33.5H67.6308V35H67.6444V33.5ZM67.6579 33.5H67.6444V35H67.6579V33.5ZM67.6715 33.5H67.6579V35H67.6715V33.5ZM67.685 33.5H67.6715V35H67.685V33.5ZM67.6986 33.5H67.685V35H67.6986V33.5ZM67.7122 33.5H67.6986V35H67.7122V33.5ZM67.7259 33.5H67.7122V35H67.7259V33.5ZM67.7395 33.5H67.7259V35H67.7395V33.5ZM67.7531 33.5H67.7395V35H67.7531V33.5ZM67.7668 33.5H67.7531V35H67.7668V33.5ZM67.7805 33.5H67.7668V35H67.7805V33.5ZM67.7941 33.5H67.7805V35H67.7941V33.5ZM67.8078 33.5H67.7941V35H67.8078V33.5ZM67.8216 33.5H67.8078V35H67.8216V33.5ZM67.8353 33.5H67.8216V35H67.8353V33.5ZM67.849 33.5H67.8353V35H67.849V33.5ZM67.8628 33.5H67.849V35H67.8628V33.5ZM67.8765 33.5H67.8628V35H67.8765V33.5ZM67.8903 33.5H67.8765V35H67.8903V33.5ZM67.9041 33.5H67.8903V35H67.9041V33.5ZM67.9179 33.5H67.9041V35H67.9179V33.5ZM67.9318 33.5H67.9179V35H67.9318V33.5ZM67.9456 33.5H67.9318V35H67.9456V33.5ZM67.9594 33.5H67.9456V35H67.9594V33.5ZM67.9733 33.5H67.9594V35H67.9733V33.5ZM67.9872 33.5H67.9733V35H67.9872V33.5ZM68.0011 33.5H67.9872V35H68.0011V33.5ZM68.015 33.5H68.0011V35H68.015V33.5ZM68.0289 33.5H68.015V35H68.0289V33.5ZM68.0428 33.5H68.0289V35H68.0428V33.5ZM68.0568 33.5H68.0428V35H68.0568V33.5ZM68.0707 33.5H68.0568V35H68.0707V33.5ZM68.0847 33.5H68.0707V35H68.0847V33.5ZM68.0987 33.5H68.0847V35H68.0987V33.5ZM68.1127 33.5H68.0987V35H68.1127V33.5ZM68.1267 33.5H68.1127V35H68.1267V33.5ZM68.1407 33.5H68.1267V35H68.1407V33.5ZM68.1548 33.5H68.1407V35H68.1548V33.5ZM68.1688 33.5H68.1548V35H68.1688V33.5ZM68.1829 33.5H68.1688V35H68.1829V33.5ZM68.197 33.5H68.1829V35H68.197V33.5ZM68.2111 33.5H68.197V35H68.2111V33.5ZM68.2252 33.5H68.2111V35H68.2252V33.5ZM68.2393 33.5H68.2252V35H68.2393V33.5ZM68.2534 33.5H68.2393V35H68.2534V33.5ZM68.2676 33.5H68.2534V35H68.2676V33.5ZM68.2817 33.5H68.2676V35H68.2817V33.5ZM68.2959 33.5H68.2817V35H68.2959V33.5ZM68.3101 33.5H68.2959V35H68.3101V33.5ZM68.3243 33.5H68.3101V35H68.3243V33.5ZM68.3385 33.5H68.3243V35H68.3385V33.5ZM68.3528 33.5H68.3385V35H68.3528V33.5ZM68.367 33.5H68.3528V35H68.367V33.5ZM68.3813 33.5H68.367V35H68.3813V33.5ZM68.3955 33.5H68.3813V35H68.3955V33.5ZM68.4098 33.5H68.3955V35H68.4098V33.5ZM68.4241 33.5H68.4098V35H68.4241V33.5ZM68.4384 33.5H68.4241V35H68.4384V33.5ZM68.4528 33.5H68.4384V35H68.4528V33.5ZM68.4671 33.5H68.4528V35H68.4671V33.5ZM68.4815 33.5H68.4671V35H68.4815V33.5ZM68.4958 33.5H68.4815V35H68.4958V33.5ZM68.5102 33.5H68.4958V35H68.5102V33.5ZM68.5246 33.5H68.5102V35H68.5246V33.5ZM68.539 33.5H68.5246V35H68.539V33.5ZM68.5534 33.5H68.539V35H68.5534V33.5ZM68.5679 33.5H68.5534V35H68.5679V33.5ZM68.5823 33.5H68.5679V35H68.5823V33.5ZM68.5968 33.5H68.5823V35H68.5968V33.5ZM68.6113 33.5H68.5968V35H68.6113V33.5ZM68.6258 33.5H68.6113V35H68.6258V33.5ZM68.6403 33.5H68.6258V35H68.6403V33.5ZM68.6548 33.5H68.6403V35H68.6548V33.5ZM68.6693 33.5H68.6548V35H68.6693V33.5ZM68.6839 33.5H68.6693V35H68.6839V33.5ZM68.6984 33.5H68.6839V35H68.6984V33.5ZM68.713 33.5H68.6984V35H68.713V33.5ZM68.7276 33.5H68.713V35H68.7276V33.5ZM68.7422 33.5H68.7276V35H68.7422V33.5ZM68.7568 33.5H68.7422V35H68.7568V33.5ZM68.7714 33.5H68.7568V35H68.7714V33.5ZM68.7861 33.5H68.7714V35H68.7861V33.5ZM68.8007 33.5H68.7861V35H68.8007V33.5ZM68.8154 33.5H68.8007V35H68.8154V33.5ZM68.8301 33.5H68.8154V35H68.8301V33.5ZM68.8448 33.5H68.8301V35H68.8448V33.5ZM68.8595 33.5H68.8448V35H68.8595V33.5ZM68.8742 33.5H68.8595V35H68.8742V33.5ZM68.8889 33.5H68.8742V35H68.8889V33.5ZM68.9037 33.5H68.8889V35H68.9037V33.5ZM68.9184 33.5H68.9037V35H68.9184V33.5ZM68.9332 33.5H68.9184V35H68.9332V33.5ZM68.948 33.5H68.9332V35H68.948V33.5ZM68.9628 33.5H68.948V35H68.9628V33.5ZM68.9776 33.5H68.9628V35H68.9776V33.5ZM68.9925 33.5H68.9776V35H68.9925V33.5ZM69.0073 33.5H68.9925V35H69.0073V33.5ZM69.0222 33.5H69.0073V35H69.0222V33.5ZM69.0371 33.5H69.0222V35H69.0371V33.5ZM69.0519 33.5H69.0371V35H69.0519V33.5ZM69.0668 33.5H69.0519V35H69.0668V33.5ZM69.0818 33.5H69.0668V35H69.0818V33.5ZM69.0967 33.5H69.0818V35H69.0967V33.5ZM69.1116 33.5H69.0967V35H69.1116V33.5ZM69.1266 33.5H69.1116V35H69.1266V33.5ZM69.1416 33.5H69.1266V35H69.1416V33.5ZM69.1565 33.5H69.1416V35H69.1565V33.5ZM69.1715 33.5H69.1565V35H69.1715V33.5ZM69.1865 33.5H69.1715V35H69.1865V33.5ZM69.2016 33.5H69.1865V35H69.2016V33.5ZM69.2166 33.5H69.2016V35H69.2166V33.5ZM69.2317 33.5H69.2166V35H69.2317V33.5ZM69.2467 33.5H69.2317V35H69.2467V33.5ZM69.2618 33.5H69.2467V35H69.2618V33.5ZM69.2769 33.5H69.2618V35H69.2769V33.5ZM69.292 33.5H69.2769V35H69.292V33.5ZM69.3071 33.5H69.292V35H69.3071V33.5ZM69.3223 33.5H69.3071V35H69.3223V33.5ZM69.3374 33.5H69.3223V35H69.3374V33.5ZM69.3526 33.5H69.3374V35H69.3526V33.5ZM69.3677 33.5H69.3526V35H69.3677V33.5ZM69.3829 33.5H69.3677V35H69.3829V33.5ZM69.3981 33.5H69.3829V35H69.3981V33.5ZM69.4133 33.5H69.3981V35H69.4133V33.5ZM69.4286 33.5H69.4133V35H69.4286V33.5ZM69.4438 33.5H69.4286V35H69.4438V33.5ZM69.4591 33.5H69.4438V35H69.4591V33.5ZM69.4743 33.5H69.4591V35H69.4743V33.5ZM69.4896 33.5H69.4743V35H69.4896V33.5ZM69.5049 33.5H69.4896V35H69.5049V33.5ZM69.5202 33.5H69.5049V35H69.5202V33.5ZM69.5356 33.5H69.5202V35H69.5356V33.5ZM69.5509 33.5H69.5356V35H69.5509V33.5ZM69.5662 33.5H69.5509V35H69.5662V33.5ZM69.5816 33.5H69.5662V35H69.5816V33.5ZM69.597 33.5H69.5816V35H69.597V33.5ZM69.6124 33.5H69.597V35H69.6124V33.5ZM69.6278 33.5H69.6124V35H69.6278V33.5ZM69.6432 33.5H69.6278V35H69.6432V33.5ZM69.6586 33.5H69.6432V35H69.6586V33.5ZM69.6741 33.5H69.6586V35H69.6741V33.5ZM69.6895 33.5H69.6741V35H69.6895V33.5ZM69.705 33.5H69.6895V35H69.705V33.5ZM69.7205 33.5H69.705V35H69.7205V33.5ZM69.736 33.5H69.7205V35H69.736V33.5ZM69.7515 33.5H69.736V35H69.7515V33.5ZM69.7671 33.5H69.7515V35H69.7671V33.5ZM69.7826 33.5H69.7671V35H69.7826V33.5ZM69.7982 33.5H69.7826V35H69.7982V33.5ZM69.8137 33.5H69.7982V35H69.8137V33.5ZM69.8293 33.5H69.8137V35H69.8293V33.5ZM69.8449 33.5H69.8293V35H69.8449V33.5ZM69.8605 33.5H69.8449V35H69.8605V33.5ZM69.8761 33.5H69.8605V35H69.8761V33.5ZM69.8918 33.5H69.8761V35H69.8918V33.5ZM69.9074 33.5H69.8918V35H69.9074V33.5ZM69.9231 33.5H69.9074V35H69.9231V33.5ZM69.9388 33.5H69.9231V35H69.9388V33.5ZM69.9545 33.5H69.9388V35H69.9545V33.5ZM69.9702 33.5H69.9545V35H69.9702V33.5ZM69.9859 33.5H69.9702V35H69.9859V33.5ZM70.0016 33.5H69.9859V35H70.0016V33.5ZM70.0174 33.5H70.0016V35H70.0174V33.5ZM70.0331 33.5H70.0174V35H70.0331V33.5ZM70.0489 33.5H70.0331V35H70.0489V33.5ZM70.0647 33.5H70.0489V35H70.0647V33.5ZM70.0805 33.5H70.0647V35H70.0805V33.5ZM70.0963 33.5H70.0805V35H70.0963V33.5ZM70.1122 33.5H70.0963V35H70.1122V33.5ZM70.128 33.5H70.1122V35H70.128V33.5ZM70.1439 33.5H70.128V35H70.1439V33.5ZM70.1597 33.5H70.1439V35H70.1597V33.5ZM70.1756 33.5H70.1597V35H70.1756V33.5ZM70.1915 33.5H70.1756V35H70.1915V33.5ZM70.2074 33.5H70.1915V35H70.2074V33.5ZM70.2234 33.5H70.2074V35H70.2234V33.5ZM70.2393 33.5H70.2234V35H70.2393V33.5ZM70.2552 33.5H70.2393V35H70.2552V33.5ZM70.2712 33.5H70.2552V35H70.2712V33.5ZM70.2872 33.5H70.2712V35H70.2872V33.5ZM70.3032 33.5H70.2872V35H70.3032V33.5ZM70.3192 33.5H70.3032V35H70.3192V33.5ZM70.3352 33.5H70.3192V35H70.3352V33.5ZM70.3512 33.5H70.3352V35H70.3512V33.5ZM70.3673 33.5H70.3512V35H70.3673V33.5ZM70.3834 33.5H70.3673V35H70.3834V33.5ZM70.3994 33.5H70.3834V35H70.3994V33.5ZM70.4155 33.5H70.3994V35H70.4155V33.5ZM70.4316 33.5H70.4155V35H70.4316V33.5ZM70.4477 33.5H70.4316V35H70.4477V33.5ZM70.4639 33.5H70.4477V35H70.4639V33.5ZM70.48 33.5H70.4639V35H70.48V33.5ZM70.4962 33.5H70.48V35H70.4962V33.5ZM70.5123 33.5H70.4962V35H70.5123V33.5ZM70.5285 33.5H70.5123V35H70.5285V33.5ZM70.5447 33.5H70.5285V35H70.5447V33.5ZM70.5609 33.5H70.5447V35H70.5609V33.5ZM70.5772 33.5H70.5609V35H70.5772V33.5ZM70.5934 33.5H70.5772V35H70.5934V33.5ZM70.6097 33.5H70.5934V35H70.6097V33.5ZM70.6259 33.5H70.6097V35H70.6259V33.5ZM70.6422 33.5H70.6259V35H70.6422V33.5ZM70.6585 33.5H70.6422V35H70.6585V33.5ZM70.6748 33.5H70.6585V35H70.6748V33.5ZM70.6911 33.5H70.6748V35H70.6911V33.5ZM70.7075 33.5H70.6911V35H70.7075V33.5ZM70.7238 33.5H70.7075V35H70.7238V33.5ZM70.7402 33.5H70.7238V35H70.7402V33.5ZM70.7566 33.5H70.7402V35H70.7566V33.5ZM70.7729 33.5H70.7566V35H70.7729V33.5ZM70.7893 33.5H70.7729V35H70.7893V33.5ZM70.8058 33.5H70.7893V35H70.8058V33.5ZM70.8222 33.5H70.8058V35H70.8222V33.5ZM70.8386 33.5H70.8222V35H70.8386V33.5ZM70.8551 33.5H70.8386V35H70.8551V33.5ZM70.8716 33.5H70.8551V35H70.8716V33.5ZM70.8881 33.5H70.8716V35H70.8881V33.5ZM70.9046 33.5H70.8881V35H70.9046V33.5ZM70.9211 33.5H70.9046V35H70.9211V33.5ZM70.9376 33.5H70.9211V35H70.9376V33.5ZM70.9541 33.5H70.9376V35H70.9541V33.5ZM70.9707 33.5H70.9541V35H70.9707V33.5ZM70.9873 33.5H70.9707V35H70.9873V33.5ZM71.0038 33.5H70.9873V35H71.0038V33.5ZM71.0204 33.5H71.0038V35H71.0204V33.5ZM71.037 33.5H71.0204V35H71.037V33.5ZM71.0537 33.5H71.037V35H71.0537V33.5ZM71.0703 33.5H71.0537V35H71.0703V33.5ZM71.0869 33.5H71.0703V35H71.0869V33.5ZM71.1036 33.5H71.0869V35H71.1036V33.5ZM71.1203 33.5H71.1036V35H71.1203V33.5ZM71.137 33.5H71.1203V35H71.137V33.5ZM71.1537 33.5H71.137V35H71.1537V33.5ZM71.1704 33.5H71.1537V35H71.1704V33.5ZM71.1871 33.5H71.1704V35H71.1871V33.5ZM71.2039 33.5H71.1871V35H71.2039V33.5ZM71.2206 33.5H71.2039V35H71.2206V33.5ZM71.2374 33.5H71.2206V35H71.2374V33.5ZM71.2542 33.5H71.2374V35H71.2542V33.5ZM71.271 33.5H71.2542V35H71.271V33.5ZM71.2878 33.5H71.271V35H71.2878V33.5ZM71.3046 33.5H71.2878V35H71.3046V33.5ZM71.3215 33.5H71.3046V35H71.3215V33.5ZM71.3383 33.5H71.3215V35H71.3383V33.5ZM71.3552 33.5H71.3383V35H71.3552V33.5ZM71.3721 33.5H71.3552V35H71.3721V33.5ZM71.389 33.5H71.3721V35H71.389V33.5ZM71.4059 33.5H71.389V35H71.4059V33.5ZM71.4228 33.5H71.4059V35H71.4228V33.5ZM71.4397 33.5H71.4228V35H71.4397V33.5ZM71.4567 33.5H71.4397V35H71.4567V33.5ZM71.4737 33.5H71.4567V35H71.4737V33.5ZM71.4906 33.5H71.4737V35H71.4906V33.5ZM71.5076 33.5H71.4906V35H71.5076V33.5ZM71.5246 33.5H71.5076V35H71.5246V33.5ZM71.5416 33.5H71.5246V35H71.5416V33.5ZM71.5587 33.5H71.5416V35H71.5587V33.5ZM71.5757 33.5H71.5587V35H71.5757V33.5ZM71.5928 33.5H71.5757V35H71.5928V33.5ZM71.6099 33.5H71.5928V35H71.6099V33.5ZM71.6269 33.5H71.6099V35H71.6269V33.5ZM71.644 33.5H71.6269V35H71.644V33.5ZM71.6612 33.5H71.644V35H71.6612V33.5ZM71.6783 33.5H71.6612V35H71.6783V33.5ZM71.6954 33.5H71.6783V35H71.6954V33.5ZM71.7126 33.5H71.6954V35H71.7126V33.5ZM71.7297 33.5H71.7126V35H71.7297V33.5ZM71.7469 33.5H71.7297V35H71.7469V33.5ZM71.7641 33.5H71.7469V35H71.7641V33.5ZM71.7813 33.5H71.7641V35H71.7813V33.5ZM71.7986 33.5H71.7813V35H71.7986V33.5ZM71.8158 33.5H71.7986V35H71.8158V33.5ZM71.833 33.5H71.8158V35H71.833V33.5ZM71.8503 33.5H71.833V35H71.8503V33.5ZM71.8676 33.5H71.8503V35H71.8676V33.5ZM71.8849 33.5H71.8676V35H71.8849V33.5ZM71.9022 33.5H71.8849V35H71.9022V33.5ZM71.9195 33.5H71.9022V35H71.9195V33.5ZM71.9368 33.5H71.9195V35H71.9368V33.5ZM71.9542 33.5H71.9368V35H71.9542V33.5ZM71.9715 33.5H71.9542V35H71.9715V33.5ZM71.9889 33.5H71.9715V35H71.9889V33.5ZM72.0063 33.5H71.9889V35H72.0063V33.5ZM72.0237 33.5H72.0063V35H72.0237V33.5ZM72.0411 33.5H72.0237V35H72.0411V33.5ZM72.0585 33.5H72.0411V35H72.0585V33.5ZM72.076 33.5H72.0585V35H72.076V33.5ZM72.0934 33.5H72.076V35H72.0934V33.5ZM72.1109 33.5H72.0934V35H72.1109V33.5ZM72.1284 33.5H72.1109V35H72.1284V33.5ZM72.1459 33.5H72.1284V35H72.1459V33.5ZM72.1634 33.5H72.1459V35H72.1634V33.5ZM72.1809 33.5H72.1634V35H72.1809V33.5ZM72.1985 33.5H72.1809V35H72.1985V33.5ZM72.216 33.5H72.1985V35H72.216V33.5ZM72.2336 33.5H72.216V35H72.2336V33.5ZM72.2511 33.5H72.2336V35H72.2511V33.5ZM72.2687 33.5H72.2511V35H72.2687V33.5ZM72.2863 33.5H72.2687V35H72.2863V33.5ZM72.304 33.5H72.2863V35H72.304V33.5ZM72.3216 33.5H72.304V35H72.3216V33.5ZM72.3392 33.5H72.3216V35H72.3392V33.5ZM72.3569 33.5H72.3392V35H72.3569V33.5ZM72.3746 33.5H72.3569V35H72.3746V33.5ZM72.3923 33.5H72.3746V35H72.3923V33.5ZM72.41 33.5H72.3923V35H72.41V33.5ZM72.4277 33.5H72.41V35H72.4277V33.5ZM72.4454 33.5H72.4277V35H72.4454V33.5ZM72.4632 33.5H72.4454V35H72.4632V33.5ZM72.4809 33.5H72.4632V35H72.4809V33.5ZM72.4987 33.5H72.4809V35H72.4987V33.5ZM72.5165 33.5H72.4987V35H72.5165V33.5ZM72.5343 33.5H72.5165V35H72.5343V33.5ZM72.5521 33.5H72.5343V35H72.5521V33.5ZM72.5699 33.5H72.5521V35H72.5699V33.5ZM72.5877 33.5H72.5699V35H72.5877V33.5ZM72.6056 33.5H72.5877V35H72.6056V33.5ZM72.6234 33.5H72.6056V35H72.6234V33.5ZM72.6413 33.5H72.6234V35H72.6413V33.5ZM72.6592 33.5H72.6413V35H72.6592V33.5ZM72.6771 33.5H72.6592V35H72.6771V33.5ZM72.695 33.5H72.6771V35H72.695V33.5ZM72.713 33.5H72.695V35H72.713V33.5ZM72.7309 33.5H72.713V35H72.7309V33.5ZM72.7489 33.5H72.7309V35H72.7489V33.5ZM72.7669 33.5H72.7489V35H72.7669V33.5ZM72.7848 33.5H72.7669V35H72.7848V33.5ZM72.8028 33.5H72.7848V35H72.8028V33.5ZM72.8209 33.5H72.8028V35H72.8209V33.5ZM72.8389 33.5H72.8209V35H72.8389V33.5ZM72.8569 33.5H72.8389V35H72.8569V33.5ZM72.875 33.5H72.8569V35H72.875V33.5ZM72.8931 33.5H72.875V35H72.8931V33.5ZM72.9111 33.5H72.8931V35H72.9111V33.5ZM72.9292 33.5H72.9111V35H72.9292V33.5ZM72.9474 33.5H72.9292V35H72.9474V33.5ZM72.9655 33.5H72.9474V35H72.9655V33.5ZM72.9836 33.5H72.9655V35H72.9836V33.5ZM73.0018 33.5H72.9836V35H73.0018V33.5ZM73.0199 33.5H73.0018V35H73.0199V33.5ZM73.0381 33.5H73.0199V35H73.0381V33.5ZM73.0563 33.5H73.0381V35H73.0563V33.5ZM73.0745 33.5H73.0563V35H73.0745V33.5ZM73.0927 33.5H73.0745V35H73.0927V33.5ZM73.111 33.5H73.0927V35H73.111V33.5ZM73.1292 33.5H73.111V35H73.1292V33.5ZM73.1475 33.5H73.1292V35H73.1475V33.5ZM73.1657 33.5H73.1475V35H73.1657V33.5ZM73.184 33.5H73.1657V35H73.184V33.5ZM73.2023 33.5H73.184V35H73.2023V33.5ZM73.2207 33.5H73.2023V35H73.2207V33.5ZM73.239 33.5H73.2207V35H73.239V33.5ZM73.2573 33.5H73.239V35H73.2573V33.5ZM73.2757 33.5H73.2573V35H73.2757V33.5ZM73.2941 33.5H73.2757V35H73.2941V33.5ZM73.3124 33.5H73.2941V35H73.3124V33.5ZM73.3308 33.5H73.3124V35H73.3308V33.5ZM73.3493 33.5H73.3308V35H73.3493V33.5ZM73.3677 33.5H73.3493V35H73.3677V33.5ZM73.3861 33.5H73.3677V35H73.3861V33.5ZM73.4046 33.5H73.3861V35H73.4046V33.5ZM73.423 33.5H73.4046V35H73.423V33.5ZM73.4415 33.5H73.423V35H73.4415V33.5ZM73.46 33.5H73.4415V35H73.46V33.5ZM73.4785 33.5H73.46V35H73.4785V33.5ZM73.497 33.5H73.4785V35H73.497V33.5ZM73.5156 33.5H73.497V35H73.5156V33.5ZM73.5341 33.5H73.5156V35H73.5341V33.5ZM73.5527 33.5H73.5341V35H73.5527V33.5ZM73.5713 33.5H73.5527V35H73.5713V33.5ZM73.5898 33.5H73.5713V35H73.5898V33.5ZM73.6084 33.5H73.5898V35H73.6084V33.5ZM73.6271 33.5H73.6084V35H73.6271V33.5ZM73.6457 33.5H73.6271V35H73.6457V33.5ZM73.6643 33.5H73.6457V35H73.6643V33.5ZM73.683 33.5H73.6643V35H73.683V33.5ZM73.7017 33.5H73.683V35H73.7017V33.5ZM73.7203 33.5H73.7017V35H73.7203V33.5ZM73.739 33.5H73.7203V35H73.739V33.5ZM73.7578 33.5H73.739V35H73.7578V33.5ZM73.7765 33.5H73.7578V35H73.7765V33.5ZM73.7952 33.5H73.7765V35H73.7952V33.5ZM73.814 33.5H73.7952V35H73.814V33.5ZM73.8327 33.5H73.814V35H73.8327V33.5ZM73.8515 33.5H73.8327V35H73.8515V33.5ZM73.8703 33.5H73.8515V35H73.8703V33.5ZM73.8891 33.5H73.8703V35H73.8891V33.5ZM73.9079 33.5H73.8891V35H73.9079V33.5ZM73.9268 33.5H73.9079V35H73.9268V33.5ZM73.9456 33.5H73.9268V35H73.9456V33.5ZM73.9645 33.5H73.9456V35H73.9645V33.5ZM73.9834 33.5H73.9645V35H73.9834V33.5ZM74.0023 33.5H73.9834V35H74.0023V33.5ZM74.0212 33.5H74.0023V35H74.0212V33.5ZM74.0401 33.5H74.0212V35H74.0401V33.5ZM74.059 33.5H74.0401V35H74.059V33.5ZM74.0779 33.5H74.059V35H74.0779V33.5ZM74.0969 33.5H74.0779V35H74.0969V33.5ZM74.1159 33.5H74.0969V35H74.1159V33.5ZM74.1349 33.5H74.1159V35H74.1349V33.5ZM74.1539 33.5H74.1349V35H74.1539V33.5ZM74.1729 33.5H74.1539V35H74.1729V33.5ZM74.1919 33.5H74.1729V35H74.1919V33.5ZM74.2109 33.5H74.1919V35H74.2109V33.5ZM74.23 33.5H74.2109V35H74.23V33.5ZM74.2491 33.5H74.23V35H74.2491V33.5ZM74.2681 33.5H74.2491V35H74.2681V33.5ZM74.2872 33.5H74.2681V35H74.2872V33.5ZM74.3063 33.5H74.2872V35H74.3063V33.5ZM74.3255 33.5H74.3063V35H74.3255V33.5ZM74.3446 33.5H74.3255V35H74.3446V33.5ZM74.3638 33.5H74.3446V35H74.3638V33.5ZM74.3829 33.5H74.3638V35H74.3829V33.5ZM74.4021 33.5H74.3829V35H74.4021V33.5ZM74.4213 33.5H74.4021V35H74.4213V33.5ZM74.4405 33.5H74.4213V35H74.4405V33.5ZM75.1905 35.75V34.25H73.6905V35.75H75.1905ZM74.4213 36.5H74.4405V35H74.4213V36.5ZM74.4021 36.5H74.4213V35H74.4021V36.5ZM74.3829 36.5H74.4021V35H74.3829V36.5ZM74.3638 36.5H74.3829V35H74.3638V36.5ZM74.3446 36.5H74.3638V35H74.3446V36.5ZM74.3255 36.5H74.3446V35H74.3255V36.5ZM74.3063 36.5H74.3255V35H74.3063V36.5ZM74.2872 36.5H74.3063V35H74.2872V36.5ZM74.2681 36.5H74.2872V35H74.2681V36.5ZM74.2491 36.5H74.2681V35H74.2491V36.5ZM74.23 36.5H74.2491V35H74.23V36.5ZM74.2109 36.5H74.23V35H74.2109V36.5ZM74.1919 36.5H74.2109V35H74.1919V36.5ZM74.1729 36.5H74.1919V35H74.1729V36.5ZM74.1539 36.5H74.1729V35H74.1539V36.5ZM74.1349 36.5H74.1539V35H74.1349V36.5ZM74.1159 36.5H74.1349V35H74.1159V36.5ZM74.0969 36.5H74.1159V35H74.0969V36.5ZM74.0779 36.5H74.0969V35H74.0779V36.5ZM74.059 36.5H74.0779V35H74.059V36.5ZM74.0401 36.5H74.059V35H74.0401V36.5ZM74.0212 36.5H74.0401V35H74.0212V36.5ZM74.0023 36.5H74.0212V35H74.0023V36.5ZM73.9834 36.5H74.0023V35H73.9834V36.5ZM73.9645 36.5H73.9834V35H73.9645V36.5ZM73.9456 36.5H73.9645V35H73.9456V36.5ZM73.9268 36.5H73.9456V35H73.9268V36.5ZM73.9079 36.5H73.9268V35H73.9079V36.5ZM73.8891 36.5H73.9079V35H73.8891V36.5ZM73.8703 36.5H73.8891V35H73.8703V36.5ZM73.8515 36.5H73.8703V35H73.8515V36.5ZM73.8327 36.5H73.8515V35H73.8327V36.5ZM73.814 36.5H73.8327V35H73.814V36.5ZM73.7952 36.5H73.814V35H73.7952V36.5ZM73.7765 36.5H73.7952V35H73.7765V36.5ZM73.7578 36.5H73.7765V35H73.7578V36.5ZM73.739 36.5H73.7578V35H73.739V36.5ZM73.7203 36.5H73.739V35H73.7203V36.5ZM73.7017 36.5H73.7203V35H73.7017V36.5ZM73.683 36.5H73.7017V35H73.683V36.5ZM73.6643 36.5H73.683V35H73.6643V36.5ZM73.6457 36.5H73.6643V35H73.6457V36.5ZM73.6271 36.5H73.6457V35H73.6271V36.5ZM73.6084 36.5H73.6271V35H73.6084V36.5ZM73.5898 36.5H73.6084V35H73.5898V36.5ZM73.5713 36.5H73.5898V35H73.5713V36.5ZM73.5527 36.5H73.5713V35H73.5527V36.5ZM73.5341 36.5H73.5527V35H73.5341V36.5ZM73.5156 36.5H73.5341V35H73.5156V36.5ZM73.497 36.5H73.5156V35H73.497V36.5ZM73.4785 36.5H73.497V35H73.4785V36.5ZM73.46 36.5H73.4785V35H73.46V36.5ZM73.4415 36.5H73.46V35H73.4415V36.5ZM73.423 36.5H73.4415V35H73.423V36.5ZM73.4046 36.5H73.423V35H73.4046V36.5ZM73.3861 36.5H73.4046V35H73.3861V36.5ZM73.3677 36.5H73.3861V35H73.3677V36.5ZM73.3493 36.5H73.3677V35H73.3493V36.5ZM73.3308 36.5H73.3493V35H73.3308V36.5ZM73.3124 36.5H73.3308V35H73.3124V36.5ZM73.2941 36.5H73.3124V35H73.2941V36.5ZM73.2757 36.5H73.2941V35H73.2757V36.5ZM73.2573 36.5H73.2757V35H73.2573V36.5ZM73.239 36.5H73.2573V35H73.239V36.5ZM73.2207 36.5H73.239V35H73.2207V36.5ZM73.2023 36.5H73.2207V35H73.2023V36.5ZM73.184 36.5H73.2023V35H73.184V36.5ZM73.1657 36.5H73.184V35H73.1657V36.5ZM73.1475 36.5H73.1657V35H73.1475V36.5ZM73.1292 36.5H73.1475V35H73.1292V36.5ZM73.111 36.5H73.1292V35H73.111V36.5ZM73.0927 36.5H73.111V35H73.0927V36.5ZM73.0745 36.5H73.0927V35H73.0745V36.5ZM73.0563 36.5H73.0745V35H73.0563V36.5ZM73.0381 36.5H73.0563V35H73.0381V36.5ZM73.0199 36.5H73.0381V35H73.0199V36.5ZM73.0018 36.5H73.0199V35H73.0018V36.5ZM72.9836 36.5H73.0018V35H72.9836V36.5ZM72.9655 36.5H72.9836V35H72.9655V36.5ZM72.9474 36.5H72.9655V35H72.9474V36.5ZM72.9292 36.5H72.9474V35H72.9292V36.5ZM72.9111 36.5H72.9292V35H72.9111V36.5ZM72.8931 36.5H72.9111V35H72.8931V36.5ZM72.875 36.5H72.8931V35H72.875V36.5ZM72.8569 36.5H72.875V35H72.8569V36.5ZM72.8389 36.5H72.8569V35H72.8389V36.5ZM72.8209 36.5H72.8389V35H72.8209V36.5ZM72.8028 36.5H72.8209V35H72.8028V36.5ZM72.7848 36.5H72.8028V35H72.7848V36.5ZM72.7669 36.5H72.7848V35H72.7669V36.5ZM72.7489 36.5H72.7669V35H72.7489V36.5ZM72.7309 36.5H72.7489V35H72.7309V36.5ZM72.713 36.5H72.7309V35H72.713V36.5ZM72.695 36.5H72.713V35H72.695V36.5ZM72.6771 36.5H72.695V35H72.6771V36.5ZM72.6592 36.5H72.6771V35H72.6592V36.5ZM72.6413 36.5H72.6592V35H72.6413V36.5ZM72.6234 36.5H72.6413V35H72.6234V36.5ZM72.6056 36.5H72.6234V35H72.6056V36.5ZM72.5877 36.5H72.6056V35H72.5877V36.5ZM72.5699 36.5H72.5877V35H72.5699V36.5ZM72.5521 36.5H72.5699V35H72.5521V36.5ZM72.5343 36.5H72.5521V35H72.5343V36.5ZM72.5165 36.5H72.5343V35H72.5165V36.5ZM72.4987 36.5H72.5165V35H72.4987V36.5ZM72.4809 36.5H72.4987V35H72.4809V36.5ZM72.4632 36.5H72.4809V35H72.4632V36.5ZM72.4454 36.5H72.4632V35H72.4454V36.5ZM72.4277 36.5H72.4454V35H72.4277V36.5ZM72.41 36.5H72.4277V35H72.41V36.5ZM72.3923 36.5H72.41V35H72.3923V36.5ZM72.3746 36.5H72.3923V35H72.3746V36.5ZM72.3569 36.5H72.3746V35H72.3569V36.5ZM72.3392 36.5H72.3569V35H72.3392V36.5ZM72.3216 36.5H72.3392V35H72.3216V36.5ZM72.304 36.5H72.3216V35H72.304V36.5ZM72.2863 36.5H72.304V35H72.2863V36.5ZM72.2687 36.5H72.2863V35H72.2687V36.5ZM72.2511 36.5H72.2687V35H72.2511V36.5ZM72.2336 36.5H72.2511V35H72.2336V36.5ZM72.216 36.5H72.2336V35H72.216V36.5ZM72.1985 36.5H72.216V35H72.1985V36.5ZM72.1809 36.5H72.1985V35H72.1809V36.5ZM72.1634 36.5H72.1809V35H72.1634V36.5ZM72.1459 36.5H72.1634V35H72.1459V36.5ZM72.1284 36.5H72.1459V35H72.1284V36.5ZM72.1109 36.5H72.1284V35H72.1109V36.5ZM72.0934 36.5H72.1109V35H72.0934V36.5ZM72.076 36.5H72.0934V35H72.076V36.5ZM72.0585 36.5H72.076V35H72.0585V36.5ZM72.0411 36.5H72.0585V35H72.0411V36.5ZM72.0237 36.5H72.0411V35H72.0237V36.5ZM72.0063 36.5H72.0237V35H72.0063V36.5ZM71.9889 36.5H72.0063V35H71.9889V36.5ZM71.9715 36.5H71.9889V35H71.9715V36.5ZM71.9542 36.5H71.9715V35H71.9542V36.5ZM71.9368 36.5H71.9542V35H71.9368V36.5ZM71.9195 36.5H71.9368V35H71.9195V36.5ZM71.9022 36.5H71.9195V35H71.9022V36.5ZM71.8849 36.5H71.9022V35H71.8849V36.5ZM71.8676 36.5H71.8849V35H71.8676V36.5ZM71.8503 36.5H71.8676V35H71.8503V36.5ZM71.833 36.5H71.8503V35H71.833V36.5ZM71.8158 36.5H71.833V35H71.8158V36.5ZM71.7986 36.5H71.8158V35H71.7986V36.5ZM71.7813 36.5H71.7986V35H71.7813V36.5ZM71.7641 36.5H71.7813V35H71.7641V36.5ZM71.7469 36.5H71.7641V35H71.7469V36.5ZM71.7297 36.5H71.7469V35H71.7297V36.5ZM71.7126 36.5H71.7297V35H71.7126V36.5ZM71.6954 36.5H71.7126V35H71.6954V36.5ZM71.6783 36.5H71.6954V35H71.6783V36.5ZM71.6612 36.5H71.6783V35H71.6612V36.5ZM71.644 36.5H71.6612V35H71.644V36.5ZM71.6269 36.5H71.644V35H71.6269V36.5ZM71.6099 36.5H71.6269V35H71.6099V36.5ZM71.5928 36.5H71.6099V35H71.5928V36.5ZM71.5757 36.5H71.5928V35H71.5757V36.5ZM71.5587 36.5H71.5757V35H71.5587V36.5ZM71.5416 36.5H71.5587V35H71.5416V36.5ZM71.5246 36.5H71.5416V35H71.5246V36.5ZM71.5076 36.5H71.5246V35H71.5076V36.5ZM71.4906 36.5H71.5076V35H71.4906V36.5ZM71.4737 36.5H71.4906V35H71.4737V36.5ZM71.4567 36.5H71.4737V35H71.4567V36.5ZM71.4397 36.5H71.4567V35H71.4397V36.5ZM71.4228 36.5H71.4397V35H71.4228V36.5ZM71.4059 36.5H71.4228V35H71.4059V36.5ZM71.389 36.5H71.4059V35H71.389V36.5ZM71.3721 36.5H71.389V35H71.3721V36.5ZM71.3552 36.5H71.3721V35H71.3552V36.5ZM71.3383 36.5H71.3552V35H71.3383V36.5ZM71.3215 36.5H71.3383V35H71.3215V36.5ZM71.3046 36.5H71.3215V35H71.3046V36.5ZM71.2878 36.5H71.3046V35H71.2878V36.5ZM71.271 36.5H71.2878V35H71.271V36.5ZM71.2542 36.5H71.271V35H71.2542V36.5ZM71.2374 36.5H71.2542V35H71.2374V36.5ZM71.2206 36.5H71.2374V35H71.2206V36.5ZM71.2039 36.5H71.2206V35H71.2039V36.5ZM71.1871 36.5H71.2039V35H71.1871V36.5ZM71.1704 36.5H71.1871V35H71.1704V36.5ZM71.1537 36.5H71.1704V35H71.1537V36.5ZM71.137 36.5H71.1537V35H71.137V36.5ZM71.1203 36.5H71.137V35H71.1203V36.5ZM71.1036 36.5H71.1203V35H71.1036V36.5ZM71.0869 36.5H71.1036V35H71.0869V36.5ZM71.0703 36.5H71.0869V35H71.0703V36.5ZM71.0537 36.5H71.0703V35H71.0537V36.5ZM71.037 36.5H71.0537V35H71.037V36.5ZM71.0204 36.5H71.037V35H71.0204V36.5ZM71.0038 36.5H71.0204V35H71.0038V36.5ZM70.9873 36.5H71.0038V35H70.9873V36.5ZM70.9707 36.5H70.9873V35H70.9707V36.5ZM70.9541 36.5H70.9707V35H70.9541V36.5ZM70.9376 36.5H70.9541V35H70.9376V36.5ZM70.9211 36.5H70.9376V35H70.9211V36.5ZM70.9046 36.5H70.9211V35H70.9046V36.5ZM70.8881 36.5H70.9046V35H70.8881V36.5ZM70.8716 36.5H70.8881V35H70.8716V36.5ZM70.8551 36.5H70.8716V35H70.8551V36.5ZM70.8386 36.5H70.8551V35H70.8386V36.5ZM70.8222 36.5H70.8386V35H70.8222V36.5ZM70.8058 36.5H70.8222V35H70.8058V36.5ZM70.7893 36.5H70.8058V35H70.7893V36.5ZM70.7729 36.5H70.7893V35H70.7729V36.5ZM70.7566 36.5H70.7729V35H70.7566V36.5ZM70.7402 36.5H70.7566V35H70.7402V36.5ZM70.7238 36.5H70.7402V35H70.7238V36.5ZM70.7075 36.5H70.7238V35H70.7075V36.5ZM70.6911 36.5H70.7075V35H70.6911V36.5ZM70.6748 36.5H70.6911V35H70.6748V36.5ZM70.6585 36.5H70.6748V35H70.6585V36.5ZM70.6422 36.5H70.6585V35H70.6422V36.5ZM70.6259 36.5H70.6422V35H70.6259V36.5ZM70.6097 36.5H70.6259V35H70.6097V36.5ZM70.5934 36.5H70.6097V35H70.5934V36.5ZM70.5772 36.5H70.5934V35H70.5772V36.5ZM70.5609 36.5H70.5772V35H70.5609V36.5ZM70.5447 36.5H70.5609V35H70.5447V36.5ZM70.5285 36.5H70.5447V35H70.5285V36.5ZM70.5123 36.5H70.5285V35H70.5123V36.5ZM70.4962 36.5H70.5123V35H70.4962V36.5ZM70.48 36.5H70.4962V35H70.48V36.5ZM70.4639 36.5H70.48V35H70.4639V36.5ZM70.4477 36.5H70.4639V35H70.4477V36.5ZM70.4316 36.5H70.4477V35H70.4316V36.5ZM70.4155 36.5H70.4316V35H70.4155V36.5ZM70.3994 36.5H70.4155V35H70.3994V36.5ZM70.3834 36.5H70.3994V35H70.3834V36.5ZM70.3673 36.5H70.3834V35H70.3673V36.5ZM70.3512 36.5H70.3673V35H70.3512V36.5ZM70.3352 36.5H70.3512V35H70.3352V36.5ZM70.3192 36.5H70.3352V35H70.3192V36.5ZM70.3032 36.5H70.3192V35H70.3032V36.5ZM70.2872 36.5H70.3032V35H70.2872V36.5ZM70.2712 36.5H70.2872V35H70.2712V36.5ZM70.2552 36.5H70.2712V35H70.2552V36.5ZM70.2393 36.5H70.2552V35H70.2393V36.5ZM70.2234 36.5H70.2393V35H70.2234V36.5ZM70.2074 36.5H70.2234V35H70.2074V36.5ZM70.1915 36.5H70.2074V35H70.1915V36.5ZM70.1756 36.5H70.1915V35H70.1756V36.5ZM70.1597 36.5H70.1756V35H70.1597V36.5ZM70.1439 36.5H70.1597V35H70.1439V36.5ZM70.128 36.5H70.1439V35H70.128V36.5ZM70.1122 36.5H70.128V35H70.1122V36.5ZM70.0963 36.5H70.1122V35H70.0963V36.5ZM70.0805 36.5H70.0963V35H70.0805V36.5ZM70.0647 36.5H70.0805V35H70.0647V36.5ZM70.0489 36.5H70.0647V35H70.0489V36.5ZM70.0331 36.5H70.0489V35H70.0331V36.5ZM70.0174 36.5H70.0331V35H70.0174V36.5ZM70.0016 36.5H70.0174V35H70.0016V36.5ZM69.9859 36.5H70.0016V35H69.9859V36.5ZM69.9702 36.5H69.9859V35H69.9702V36.5ZM69.9545 36.5H69.9702V35H69.9545V36.5ZM69.9388 36.5H69.9545V35H69.9388V36.5ZM69.9231 36.5H69.9388V35H69.9231V36.5ZM69.9074 36.5H69.9231V35H69.9074V36.5ZM69.8918 36.5H69.9074V35H69.8918V36.5ZM69.8761 36.5H69.8918V35H69.8761V36.5ZM69.8605 36.5H69.8761V35H69.8605V36.5ZM69.8449 36.5H69.8605V35H69.8449V36.5ZM69.8293 36.5H69.8449V35H69.8293V36.5ZM69.8137 36.5H69.8293V35H69.8137V36.5ZM69.7982 36.5H69.8137V35H69.7982V36.5ZM69.7826 36.5H69.7982V35H69.7826V36.5ZM69.7671 36.5H69.7826V35H69.7671V36.5ZM69.7515 36.5H69.7671V35H69.7515V36.5ZM69.736 36.5H69.7515V35H69.736V36.5ZM69.7205 36.5H69.736V35H69.7205V36.5ZM69.705 36.5H69.7205V35H69.705V36.5ZM69.6895 36.5H69.705V35H69.6895V36.5ZM69.6741 36.5H69.6895V35H69.6741V36.5ZM69.6586 36.5H69.6741V35H69.6586V36.5ZM69.6432 36.5H69.6586V35H69.6432V36.5ZM69.6278 36.5H69.6432V35H69.6278V36.5ZM69.6124 36.5H69.6278V35H69.6124V36.5ZM69.597 36.5H69.6124V35H69.597V36.5ZM69.5816 36.5H69.597V35H69.5816V36.5ZM69.5662 36.5H69.5816V35H69.5662V36.5ZM69.5509 36.5H69.5662V35H69.5509V36.5ZM69.5356 36.5H69.5509V35H69.5356V36.5ZM69.5202 36.5H69.5356V35H69.5202V36.5ZM69.5049 36.5H69.5202V35H69.5049V36.5ZM69.4896 36.5H69.5049V35H69.4896V36.5ZM69.4743 36.5H69.4896V35H69.4743V36.5ZM69.4591 36.5H69.4743V35H69.4591V36.5ZM69.4438 36.5H69.4591V35H69.4438V36.5ZM69.4286 36.5H69.4438V35H69.4286V36.5ZM69.4133 36.5H69.4286V35H69.4133V36.5ZM69.3981 36.5H69.4133V35H69.3981V36.5ZM69.3829 36.5H69.3981V35H69.3829V36.5ZM69.3677 36.5H69.3829V35H69.3677V36.5ZM69.3526 36.5H69.3677V35H69.3526V36.5ZM69.3374 36.5H69.3526V35H69.3374V36.5ZM69.3223 36.5H69.3374V35H69.3223V36.5ZM69.3071 36.5H69.3223V35H69.3071V36.5ZM69.292 36.5H69.3071V35H69.292V36.5ZM69.2769 36.5H69.292V35H69.2769V36.5ZM69.2618 36.5H69.2769V35H69.2618V36.5ZM69.2467 36.5H69.2618V35H69.2467V36.5ZM69.2317 36.5H69.2467V35H69.2317V36.5ZM69.2166 36.5H69.2317V35H69.2166V36.5ZM69.2016 36.5H69.2166V35H69.2016V36.5ZM69.1865 36.5H69.2016V35H69.1865V36.5ZM69.1715 36.5H69.1865V35H69.1715V36.5ZM69.1565 36.5H69.1715V35H69.1565V36.5ZM69.1416 36.5H69.1565V35H69.1416V36.5ZM69.1266 36.5H69.1416V35H69.1266V36.5ZM69.1116 36.5H69.1266V35H69.1116V36.5ZM69.0967 36.5H69.1116V35H69.0967V36.5ZM69.0818 36.5H69.0967V35H69.0818V36.5ZM69.0668 36.5H69.0818V35H69.0668V36.5ZM69.0519 36.5H69.0668V35H69.0519V36.5ZM69.0371 36.5H69.0519V35H69.0371V36.5ZM69.0222 36.5H69.0371V35H69.0222V36.5ZM69.0073 36.5H69.0222V35H69.0073V36.5ZM68.9925 36.5H69.0073V35H68.9925V36.5ZM68.9776 36.5H68.9925V35H68.9776V36.5ZM68.9628 36.5H68.9776V35H68.9628V36.5ZM68.948 36.5H68.9628V35H68.948V36.5ZM68.9332 36.5H68.948V35H68.9332V36.5ZM68.9184 36.5H68.9332V35H68.9184V36.5ZM68.9037 36.5H68.9184V35H68.9037V36.5ZM68.8889 36.5H68.9037V35H68.8889V36.5ZM68.8742 36.5H68.8889V35H68.8742V36.5ZM68.8595 36.5H68.8742V35H68.8595V36.5ZM68.8448 36.5H68.8595V35H68.8448V36.5ZM68.8301 36.5H68.8448V35H68.8301V36.5ZM68.8154 36.5H68.8301V35H68.8154V36.5ZM68.8007 36.5H68.8154V35H68.8007V36.5ZM68.7861 36.5H68.8007V35H68.7861V36.5ZM68.7714 36.5H68.7861V35H68.7714V36.5ZM68.7568 36.5H68.7714V35H68.7568V36.5ZM68.7422 36.5H68.7568V35H68.7422V36.5ZM68.7276 36.5H68.7422V35H68.7276V36.5ZM68.713 36.5H68.7276V35H68.713V36.5ZM68.6984 36.5H68.713V35H68.6984V36.5ZM68.6839 36.5H68.6984V35H68.6839V36.5ZM68.6693 36.5H68.6839V35H68.6693V36.5ZM68.6548 36.5H68.6693V35H68.6548V36.5ZM68.6403 36.5H68.6548V35H68.6403V36.5ZM68.6258 36.5H68.6403V35H68.6258V36.5ZM68.6113 36.5H68.6258V35H68.6113V36.5ZM68.5968 36.5H68.6113V35H68.5968V36.5ZM68.5823 36.5H68.5968V35H68.5823V36.5ZM68.5679 36.5H68.5823V35H68.5679V36.5ZM68.5534 36.5H68.5679V35H68.5534V36.5ZM68.539 36.5H68.5534V35H68.539V36.5ZM68.5246 36.5H68.539V35H68.5246V36.5ZM68.5102 36.5H68.5246V35H68.5102V36.5ZM68.4958 36.5H68.5102V35H68.4958V36.5ZM68.4815 36.5H68.4958V35H68.4815V36.5ZM68.4671 36.5H68.4815V35H68.4671V36.5ZM68.4528 36.5H68.4671V35H68.4528V36.5ZM68.4384 36.5H68.4528V35H68.4384V36.5ZM68.4241 36.5H68.4384V35H68.4241V36.5ZM68.4098 36.5H68.4241V35H68.4098V36.5ZM68.3955 36.5H68.4098V35H68.3955V36.5ZM68.3813 36.5H68.3955V35H68.3813V36.5ZM68.367 36.5H68.3813V35H68.367V36.5ZM68.3528 36.5H68.367V35H68.3528V36.5ZM68.3385 36.5H68.3528V35H68.3385V36.5ZM68.3243 36.5H68.3385V35H68.3243V36.5ZM68.3101 36.5H68.3243V35H68.3101V36.5ZM68.2959 36.5H68.3101V35H68.2959V36.5ZM68.2817 36.5H68.2959V35H68.2817V36.5ZM68.2676 36.5H68.2817V35H68.2676V36.5ZM68.2534 36.5H68.2676V35H68.2534V36.5ZM68.2393 36.5H68.2534V35H68.2393V36.5ZM68.2252 36.5H68.2393V35H68.2252V36.5ZM68.2111 36.5H68.2252V35H68.2111V36.5ZM68.197 36.5H68.2111V35H68.197V36.5ZM68.1829 36.5H68.197V35H68.1829V36.5ZM68.1688 36.5H68.1829V35H68.1688V36.5ZM68.1548 36.5H68.1688V35H68.1548V36.5ZM68.1407 36.5H68.1548V35H68.1407V36.5ZM68.1267 36.5H68.1407V35H68.1267V36.5ZM68.1127 36.5H68.1267V35H68.1127V36.5ZM68.0987 36.5H68.1127V35H68.0987V36.5ZM68.0847 36.5H68.0987V35H68.0847V36.5ZM68.0707 36.5H68.0847V35H68.0707V36.5ZM68.0568 36.5H68.0707V35H68.0568V36.5ZM68.0428 36.5H68.0568V35H68.0428V36.5ZM68.0289 36.5H68.0428V35H68.0289V36.5ZM68.015 36.5H68.0289V35H68.015V36.5ZM68.0011 36.5H68.015V35H68.0011V36.5ZM67.9872 36.5H68.0011V35H67.9872V36.5ZM67.9733 36.5H67.9872V35H67.9733V36.5ZM67.9594 36.5H67.9733V35H67.9594V36.5ZM67.9456 36.5H67.9594V35H67.9456V36.5ZM67.9318 36.5H67.9456V35H67.9318V36.5ZM67.9179 36.5H67.9318V35H67.9179V36.5ZM67.9041 36.5H67.9179V35H67.9041V36.5ZM67.8903 36.5H67.9041V35H67.8903V36.5ZM67.8765 36.5H67.8903V35H67.8765V36.5ZM67.8628 36.5H67.8765V35H67.8628V36.5ZM67.849 36.5H67.8628V35H67.849V36.5ZM67.8353 36.5H67.849V35H67.8353V36.5ZM67.8216 36.5H67.8353V35H67.8216V36.5ZM67.8078 36.5H67.8216V35H67.8078V36.5ZM67.7941 36.5H67.8078V35H67.7941V36.5ZM67.7805 36.5H67.7941V35H67.7805V36.5ZM67.7668 36.5H67.7805V35H67.7668V36.5ZM67.7531 36.5H67.7668V35H67.7531V36.5ZM67.7395 36.5H67.7531V35H67.7395V36.5ZM67.7259 36.5H67.7395V35H67.7259V36.5ZM67.7122 36.5H67.7259V35H67.7122V36.5ZM67.6986 36.5H67.7122V35H67.6986V36.5ZM67.685 36.5H67.6986V35H67.685V36.5ZM67.6715 36.5H67.685V35H67.6715V36.5ZM67.6579 36.5H67.6715V35H67.6579V36.5ZM67.6444 36.5H67.6579V35H67.6444V36.5ZM67.6308 36.5H67.6444V35H67.6308V36.5ZM67.6173 36.5H67.6308V35H67.6173V36.5ZM67.6038 36.5H67.6173V35H67.6038V36.5ZM67.5903 36.5H67.6038V35H67.5903V36.5ZM67.5768 36.5H67.5903V35H67.5768V36.5ZM67.5634 36.5H67.5768V35H67.5634V36.5ZM67.5499 36.5H67.5634V35H67.5499V36.5ZM67.5365 36.5H67.5499V35H67.5365V36.5ZM67.523 36.5H67.5365V35H67.523V36.5ZM67.5096 36.5H67.523V35H67.5096V36.5ZM67.4962 36.5H67.5096V35H67.4962V36.5ZM67.4828 36.5H67.4962V35H67.4828V36.5ZM67.4695 36.5H67.4828V35H67.4695V36.5ZM67.4561 36.5H67.4695V35H67.4561V36.5ZM67.4428 36.5H67.4561V35H67.4428V36.5ZM67.4294 36.5H67.4428V35H67.4294V36.5ZM67.4161 36.5H67.4294V35H67.4161V36.5ZM67.4028 36.5H67.4161V35H67.4028V36.5ZM67.3895 36.5H67.4028V35H67.3895V36.5ZM67.3763 36.5H67.3895V35H67.3763V36.5ZM67.363 36.5H67.3763V35H67.363V36.5ZM67.3497 36.5H67.363V35H67.3497V36.5ZM67.3365 36.5H67.3497V35H67.3365V36.5ZM67.3233 36.5H67.3365V35H67.3233V36.5ZM67.3101 36.5H67.3233V35H67.3101V36.5ZM67.2969 36.5H67.3101V35H67.2969V36.5ZM67.2837 36.5H67.2969V35H67.2837V36.5ZM67.2705 36.5H67.2837V35H67.2705V36.5ZM67.2574 36.5H67.2705V35H67.2574V36.5ZM67.2442 36.5H67.2574V35H67.2442V36.5ZM67.2311 36.5H67.2442V35H67.2311V36.5ZM67.218 36.5H67.2311V35H67.218V36.5ZM67.2049 36.5H67.218V35H67.2049V36.5ZM67.1918 36.5H67.2049V35H67.1918V36.5ZM67.1788 36.5H67.1918V35H67.1788V36.5ZM67.1657 36.5H67.1788V35H67.1657V36.5ZM67.1527 36.5H67.1657V35H67.1527V36.5ZM67.1396 36.5H67.1527V35H67.1396V36.5ZM67.1266 36.5H67.1396V35H67.1266V36.5ZM67.1136 36.5H67.1266V35H67.1136V36.5ZM67.1006 36.5H67.1136V35H67.1006V36.5ZM67.0876 36.5H67.1006V35H67.0876V36.5ZM67.0747 36.5H67.0876V35H67.0747V36.5ZM67.0617 36.5H67.0747V35H67.0617V36.5ZM67.0488 36.5H67.0617V35H67.0488V36.5ZM67.0359 36.5H67.0488V35H67.0359V36.5ZM67.023 36.5H67.0359V35H67.023V36.5ZM67.0101 36.5H67.023V35H67.0101V36.5ZM66.9972 36.5H67.0101V35H66.9972V36.5ZM66.9843 36.5H66.9972V35H66.9843V36.5ZM66.9715 36.5H66.9843V35H66.9715V36.5ZM66.9586 36.5H66.9715V35H66.9586V36.5ZM66.9458 36.5H66.9586V35H66.9458V36.5ZM66.933 36.5H66.9458V35H66.933V36.5ZM66.9202 36.5H66.933V35H66.9202V36.5ZM66.9074 36.5H66.9202V35H66.9074V36.5ZM66.8947 36.5H66.9074V35H66.8947V36.5ZM66.8819 36.5H66.8947V35H66.8819V36.5ZM66.8692 36.5H66.8819V35H66.8692V36.5ZM66.8564 36.5H66.8692V35H66.8564V36.5ZM66.8437 36.5H66.8564V35H66.8437V36.5ZM66.831 36.5H66.8437V35H66.831V36.5ZM66.8183 36.5H66.831V35H66.8183V36.5ZM66.8057 36.5H66.8183V35H66.8057V36.5ZM66.793 36.5H66.8057V35H66.793V36.5ZM66.7803 36.5H66.793V35H66.7803V36.5ZM66.7677 36.5H66.7803V35H66.7677V36.5ZM66.7551 36.5H66.7677V35H66.7551V36.5ZM66.7425 36.5H66.7551V35H66.7425V36.5ZM66.7299 36.5H66.7425V35H66.7299V36.5ZM66.7173 36.5H66.7299V35H66.7173V36.5ZM66.7047 36.5H66.7173V35H66.7047V36.5ZM66.6922 36.5H66.7047V35H66.6922V36.5ZM66.6797 36.5H66.6922V35H66.6797V36.5ZM66.6671 36.5H66.6797V35H66.6671V36.5ZM66.6546 36.5H66.6671V35H66.6546V36.5ZM66.6421 36.5H66.6546V35H66.6421V36.5ZM66.6296 36.5H66.6421V35H66.6296V36.5ZM66.6172 36.5H66.6296V35H66.6172V36.5ZM66.6047 36.5H66.6172V35H66.6047V36.5ZM66.5923 36.5H66.6047V35H66.5923V36.5ZM66.5798 36.5H66.5923V35H66.5798V36.5ZM66.5674 36.5H66.5798V35H66.5674V36.5ZM66.555 36.5H66.5674V35H66.555V36.5ZM66.5426 36.5H66.555V35H66.5426V36.5ZM66.5303 36.5H66.5426V35H66.5303V36.5ZM66.5179 36.5H66.5303V35H66.5179V36.5ZM66.5056 36.5H66.5179V35H66.5056V36.5ZM66.4932 36.5H66.5056V35H66.4932V36.5ZM66.4809 36.5H66.4932V35H66.4809V36.5ZM66.4686 36.5H66.4809V35H66.4686V36.5ZM66.4563 36.5H66.4686V35H66.4563V36.5ZM66.444 36.5H66.4563V35H66.444V36.5ZM66.4318 36.5H66.444V35H66.4318V36.5ZM66.4195 36.5H66.4318V35H66.4195V36.5ZM66.4073 36.5H66.4195V35H66.4073V36.5Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M51.8975 80.41H78.171", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M51.8975 89.4706H70.9231", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "41.7759", y: "54.4336", width: "85.4744", height: "13.9017", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "43.7437", y: "56.4014", width: "81.5385", height: "9.96581", rx: "1", fill: "#3040D6" })); const Clip = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "37.75", y: "33.6338", width: "76.5", height: "91.0116", rx: "3.25", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "40.6279", y: "36.5117", width: "70.7442", height: "85.2558", rx: "2", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "44.0986", y: "38.1689", width: "63.8023", height: "79.2209", rx: "1.25", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M63.3022 80.5004H88.6976", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76.0002", cy: "63.7214", r: "8.16279", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M63.3022 89.5697H88.6976", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M63.3022 98.64H88.6976", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("mask", { id: "path-9-inside-1_0_2394", fill: "white" }, /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M81.4419 27.4419H101.93C104.139 27.4419 105.93 29.2327 105.93 31.4419V38.8605C105.93 41.0696 104.139 42.8605 101.93 42.8605H50.0698C47.8607 42.8605 46.0698 41.0696 46.0698 38.8605V31.4419C46.0698 29.2327 47.8607 27.4419 50.0698 27.4419H70.5582C70.5582 24.4364 72.9946 22 76.0001 22C79.0055 22 81.4419 24.4364 81.4419 27.4419Z" })), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M81.4419 27.4419H101.93C104.139 27.4419 105.93 29.2327 105.93 31.4419V38.8605C105.93 41.0696 104.139 42.8605 101.93 42.8605H50.0698C47.8607 42.8605 46.0698 41.0696 46.0698 38.8605V31.4419C46.0698 29.2327 47.8607 27.4419 50.0698 27.4419H70.5582C70.5582 24.4364 72.9946 22 76.0001 22C79.0055 22 81.4419 24.4364 81.4419 27.4419Z", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M81.4419 27.4419H79.9419V28.9419H81.4419V27.4419ZM70.5582 27.4419V28.9419H72.0582V27.4419H70.5582ZM81.4419 28.9419H101.93V25.9419H81.4419V28.9419ZM101.93 28.9419C103.311 28.9419 104.43 30.0611 104.43 31.4419H107.43C107.43 28.4043 104.968 25.9419 101.93 25.9419V28.9419ZM104.43 31.4419V38.8605H107.43V31.4419H104.43ZM104.43 38.8605C104.43 40.2412 103.311 41.3605 101.93 41.3605V44.3605C104.968 44.3605 107.43 41.898 107.43 38.8605H104.43ZM101.93 41.3605H50.0698V44.3605H101.93V41.3605ZM50.0698 41.3605C48.6891 41.3605 47.5698 40.2412 47.5698 38.8605H44.5698C44.5698 41.898 47.0323 44.3605 50.0698 44.3605V41.3605ZM47.5698 38.8605V31.4419H44.5698V38.8605H47.5698ZM47.5698 31.4419C47.5698 30.0611 48.6891 28.9419 50.0698 28.9419V25.9419C47.0323 25.9419 44.5698 28.4043 44.5698 31.4419H47.5698ZM50.0698 28.9419H70.5582V25.9419H50.0698V28.9419ZM72.0582 27.4419C72.0582 25.2648 73.823 23.5 76.0001 23.5V20.5C72.1662 20.5 69.0582 23.608 69.0582 27.4419H72.0582ZM76.0001 23.5C78.1771 23.5 79.9419 25.2648 79.9419 27.4419H82.9419C82.9419 23.608 79.8339 20.5 76.0001 20.5V23.5Z", fill: "#3B3552", mask: "url(#path-9-inside-1_0_2394)" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "48.7905", y: "34.6973", width: "54.4186", height: "5.44186", rx: "1", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M50.3636 31.5H57.6364", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M61.0909 31.5H62.9091", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M121 66V85", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M121 90V98", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" })); const Cloud = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "118.584", cy: "67.7497", r: "15.4167", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("mask", { id: "path-3-inside-1_0_2342", fill: "white" }, /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M113.745 105.738H39.2599V105.729C39.062 105.735 38.8633 105.738 38.664 105.738C27.8039 105.738 19 96.9345 19 86.0744C19 76.6454 25.6365 68.7664 34.4932 66.8536C34.5754 51.4564 47.0826 39 62.4991 39C72.5641 39 81.389 44.3094 86.3259 52.2803C88.7449 51.3986 91.3566 50.9176 94.0806 50.9176C106.586 50.9176 116.724 61.0553 116.724 73.5609C116.724 73.6527 116.723 73.7444 116.722 73.836C124.185 75.2325 129.833 81.7815 129.833 89.6496C129.833 98.3357 122.95 105.414 114.34 105.728V105.738H113.745Z" })), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M113.745 105.738H39.2599V105.729C39.062 105.735 38.8633 105.738 38.664 105.738C27.8039 105.738 19 96.9345 19 86.0744C19 76.6454 25.6365 68.7664 34.4932 66.8536C34.5754 51.4564 47.0826 39 62.4991 39C72.5641 39 81.389 44.3094 86.3259 52.2803C88.7449 51.3986 91.3566 50.9176 94.0806 50.9176C106.586 50.9176 116.724 61.0553 116.724 73.5609C116.724 73.6527 116.723 73.7444 116.722 73.836C124.185 75.2325 129.833 81.7815 129.833 89.6496C129.833 98.3357 122.95 105.414 114.34 105.728V105.738H113.745Z", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M39.2599 105.738H37.7599V107.238H39.2599V105.738ZM39.2599 105.729H40.7599V104.184L39.2152 104.23L39.2599 105.729ZM34.4932 66.8536L34.8099 68.3198L35.9868 68.0656L35.9932 66.8616L34.4932 66.8536ZM86.3259 52.2803L85.0506 53.0701L85.6931 54.1075L86.8395 53.6896L86.3259 52.2803ZM116.722 73.836L115.222 73.8181L115.207 75.0785L116.446 75.3104L116.722 73.836ZM114.34 105.728L114.286 104.229L112.84 104.281V105.728H114.34ZM114.34 105.738V107.238H115.84V105.738H114.34ZM113.745 104.238H39.2599V107.238H113.745V104.238ZM40.7599 105.738V105.729H37.7599V105.738H40.7599ZM39.2152 104.23C39.0322 104.236 38.8484 104.238 38.664 104.238V107.238C38.8782 107.238 39.0917 107.235 39.3045 107.229L39.2152 104.23ZM38.664 104.238C28.6323 104.238 20.5 96.1061 20.5 86.0744H17.5C17.5 97.7629 26.9754 107.238 38.664 107.238V104.238ZM20.5 86.0744C20.5 77.3664 26.6291 70.0866 34.8099 68.3198L34.1766 65.3874C24.6438 67.4462 17.5 75.9243 17.5 86.0744H20.5ZM35.9932 66.8616C36.071 52.2893 47.9083 40.5 62.4991 40.5V37.5C46.2568 37.5 33.0799 50.6235 32.9933 66.8456L35.9932 66.8616ZM62.4991 40.5C72.0233 40.5 80.3758 45.5223 85.0506 53.0701L87.6011 51.4905C82.4023 43.0966 73.1049 37.5 62.4991 37.5V40.5ZM86.8395 53.6896C89.0964 52.867 91.5343 52.4176 94.0806 52.4176V49.4176C91.1788 49.4176 88.3934 49.9302 85.8122 50.871L86.8395 53.6896ZM94.0806 52.4176C105.758 52.4176 115.224 61.8838 115.224 73.5609H118.224C118.224 60.2269 107.415 49.4176 94.0806 49.4176V52.4176ZM115.224 73.5609C115.224 73.6468 115.224 73.7326 115.222 73.8181L118.222 73.8538C118.223 73.7563 118.224 73.6586 118.224 73.5609H115.224ZM116.446 75.3104C123.213 76.5766 128.333 82.5167 128.333 89.6496H131.333C131.333 81.0463 125.158 73.8885 116.998 72.3615L116.446 75.3104ZM128.333 89.6496C128.333 97.5255 122.092 103.944 114.286 104.229L114.395 107.227C123.808 106.884 131.333 99.1458 131.333 89.6496H128.333ZM112.84 105.728V105.738H115.84V105.728H112.84ZM114.34 104.238H113.745V107.238H114.34V104.238Z", fill: "#3B3552", mask: "url(#path-3-inside-1_0_2342)" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M124.739 106.726L125.336 106.271L124.882 105.675L124.285 106.129L124.739 106.726ZM115.615 109.988L115.587 109.238L115.615 109.988ZM125.648 107.919L126.102 108.516L126.699 108.062L126.244 107.465L125.648 107.919ZM116.38 111.447L116.322 110.699L115.642 110.751L115.63 111.434L116.38 111.447ZM116.379 111.499V112.249H117.116L117.129 111.512L116.379 111.499ZM104.829 111.499H104.079V112.249H104.829V111.499ZM104.829 109.999V109.249H104.079V109.999H104.829ZM115.317 109.999V110.749H115.331L115.345 110.748L115.317 109.999ZM99.7899 109.999H100.54V109.249H99.7899V109.999ZM93.4033 109.999V109.249H92.6533V109.999H93.4033ZM99.7899 111.499V112.249H100.54V111.499H99.7899ZM93.4033 111.499H92.6533V112.249H93.4033V111.499ZM124.285 106.129C121.852 107.98 118.851 109.12 115.587 109.238L115.642 110.737C119.225 110.607 122.523 109.355 125.193 107.322L124.285 106.129ZM126.244 107.465L125.336 106.271L124.142 107.18L125.051 108.373L126.244 107.465ZM116.437 112.195C120.054 111.917 123.378 110.589 126.102 108.516L125.193 107.322C122.692 109.226 119.642 110.445 116.322 110.699L116.437 112.195ZM117.129 111.512L117.129 111.46L115.63 111.434L115.629 111.486L117.129 111.512ZM115.642 112.249H116.379V110.749H115.642V112.249ZM104.829 112.249H115.642V110.749H104.829V112.249ZM104.079 109.999V111.499H105.579V109.999H104.079ZM115.317 109.249H104.829V110.749H115.317V109.249ZM115.587 109.238L115.29 109.249L115.345 110.748L115.642 110.737L115.587 109.238ZM99.7899 109.249H93.4033V110.749H99.7899V109.249ZM100.54 111.499V109.999H99.0399V111.499H100.54ZM93.4033 112.249H99.7899V110.749H93.4033V112.249ZM92.6533 109.999V111.499H94.1533V109.999H92.6533Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M52.7914 53.1815C56.0452 76.7133 76.2399 94.8335 100.667 94.8335C106.605 94.8335 112.292 93.7627 117.548 91.8037C118.205 91.5586 119.014 91.2088 119.848 90.8262C122.001 89.8395 124.492 91.513 123.943 93.8165C123.763 94.5703 123.554 95.2336 123.313 95.6647C121.249 99.3701 117.292 101.877 112.75 101.877H39.3226L39.323 101.868C30.8147 101.599 24 94.6169 24 86.0432C24 77.7031 30.4483 70.8691 38.6312 70.2548C38.5194 69.315 38.4624 68.3578 38.4624 67.3873C38.4624 61.4398 40.606 55.993 44.1629 51.7774C45.0618 50.712 46.5645 49.4825 48.0385 48.3941C49.8974 47.0214 52.4241 48.3692 52.5693 50.6755C52.6305 51.6465 52.7044 52.5524 52.7914 53.1815Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M110.17 41.9797L35.089 117.06", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M36.4578 73.6412L35.7277 73.8127V73.8127L36.4578 73.6412ZM35.5562 73.0825L35.7277 73.8127L35.7277 73.8127L35.5562 73.0825ZM39.1052 80.4818L39.7606 80.1173L39.7606 80.1173L39.1052 80.4818ZM38.8142 81.5018L39.1788 82.1572H39.1788L38.8142 81.5018ZM37.7943 81.2108L38.4497 80.8463L37.7943 81.2108ZM34.9976 73.9842L35.7277 73.8127L35.7277 73.8127L34.9976 73.9842ZM40.999 83.4178L41.6014 82.971L40.999 83.4178ZM39.9498 83.2621L39.5031 82.6597H39.5031L39.9498 83.2621ZM43.5079 86.3381L44.0404 85.81L43.5079 86.3381ZM43.5036 87.3988L44.0318 87.9313H44.0318L43.5036 87.3988ZM42.443 87.3945L41.9105 87.9227L42.443 87.3945ZM39.7941 84.3113L39.1917 84.758L39.7941 84.3113ZM37.188 73.4697C36.9985 72.6632 36.1912 72.163 35.3847 72.3524L35.7277 73.8127L35.7277 73.8127L37.188 73.4697ZM39.7606 80.1173C38.6148 78.0568 37.7412 75.8249 37.188 73.4697L35.7277 73.8127C36.3131 76.305 37.2376 78.6666 38.4497 80.8463L39.7606 80.1173ZM39.1788 82.1572C39.9028 81.7546 40.1633 80.8413 39.7606 80.1173L38.4497 80.8463V80.8463L39.1788 82.1572ZM37.1388 81.5753C37.5414 82.2993 38.4548 82.5599 39.1788 82.1572L38.4497 80.8463L37.1388 81.5753ZM34.2674 74.1557C34.8851 76.7851 35.8604 79.2765 37.1388 81.5753L38.4497 80.8463C37.2376 78.6666 36.3131 76.305 35.7277 73.8127L34.2674 74.1557ZM35.3847 72.3524C34.5782 72.5418 34.078 73.3492 34.2674 74.1557L35.7277 73.8127L35.7277 73.8127L35.3847 72.3524ZM41.6014 82.971C41.1079 82.3056 40.1685 82.1662 39.5031 82.6597L40.3966 83.8645L41.6014 82.971ZM44.0404 85.81C43.1616 84.924 42.3461 83.9752 41.6014 82.971L40.3966 83.8645C41.1841 84.9264 42.0463 85.9296 42.9755 86.8663L44.0404 85.81ZM44.0318 87.9313C44.62 87.3478 44.6238 86.3981 44.0404 85.81L42.9755 86.8663L44.0318 87.9313ZM41.9105 87.9227C42.4939 88.5108 43.4437 88.5147 44.0318 87.9313L42.9755 86.8663L41.9105 87.9227ZM39.1917 84.758C40.022 85.8776 40.931 86.9352 41.9105 87.9227L42.9755 86.8663C42.0463 85.9296 41.1841 84.9264 40.3966 83.8645L39.1917 84.758ZM39.5031 82.6597C38.8376 83.1531 38.6982 84.0926 39.1917 84.758L40.3966 83.8645L39.5031 82.6597Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M77.4516 35.2916L77.7551 34.6057L77.4516 35.2916ZM76.4623 35.674L75.7765 35.3705L76.4623 35.674ZM86.9292 41.4393L87.4313 40.8822L86.9292 41.4393ZM86.984 42.4985L87.5411 43.0007H87.5411L86.984 42.4985ZM85.9248 42.5534L85.4226 43.1104V43.1104L85.9248 42.5534ZM76.8447 36.6633L76.5412 37.3492L76.8447 36.6633ZM66.2719 32.3976L66.2041 33.1446L66.2719 32.3976ZM65.4572 33.0768L66.2041 33.1446L65.4572 33.0768ZM72.3341 33.4809L72.1387 34.205L72.3341 33.4809ZM72.8629 34.4004L73.587 34.5957L72.8629 34.4004ZM71.9434 34.9292L72.1388 34.205L71.9434 34.9292ZM66.1364 33.8915L66.2041 33.1446L66.1364 33.8915ZM77.7551 34.6057C76.9976 34.2705 76.1117 34.6129 75.7765 35.3705L77.1482 35.9774V35.9774L77.7551 34.6057ZM87.4313 40.8822C84.5785 38.3104 81.317 36.1818 77.7551 34.6057L77.1482 35.9774C80.5629 37.4884 83.6906 39.5295 86.427 41.9963L87.4313 40.8822ZM87.5411 43.0007C88.0958 42.3854 88.0466 41.4369 87.4313 40.8822L86.427 41.9963L86.427 41.9963L87.5411 43.0007ZM85.4226 43.1104C86.0379 43.6651 86.9864 43.616 87.5411 43.0007L86.427 41.9963H86.427L85.4226 43.1104ZM76.5412 37.3492C79.8087 38.795 82.8027 40.7486 85.4226 43.1104L86.427 41.9963C83.6906 39.5295 80.5629 37.4884 77.1482 35.9774L76.5412 37.3492ZM75.7765 35.3705C75.4412 36.1281 75.7836 37.0139 76.5412 37.3492L77.1482 35.9774L75.7765 35.3705ZM66.3397 31.6507C65.5147 31.5758 64.7852 32.184 64.7103 33.009L66.2041 33.1446L66.3397 31.6507ZM72.5294 32.7568C70.5285 32.217 68.46 31.8432 66.3397 31.6507L66.2041 33.1446C68.2376 33.3291 70.2208 33.6876 72.1387 34.205L72.5294 32.7568ZM73.587 34.5957C73.8027 33.7959 73.3293 32.9726 72.5294 32.7568L72.1387 34.205L72.1388 34.205L73.587 34.5957ZM71.7481 35.6533C72.5479 35.869 73.3712 35.3956 73.587 34.5957L72.1388 34.205L71.7481 35.6533ZM66.0686 34.6384C68.0152 34.8151 69.913 35.1582 71.7481 35.6533L72.1388 34.205C70.2208 33.6876 68.2376 33.3291 66.2041 33.1446L66.0686 34.6384ZM64.7103 33.009C64.6354 33.834 65.2435 34.5636 66.0686 34.6384L66.2041 33.1446L64.7103 33.009Z", fill: "#3B3552" })); const Cup = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M105.853 116.816C105.853 117.662 105.226 118.645 103.65 119.677C102.105 120.69 99.8197 121.63 96.9287 122.431C91.1573 124.03 83.1414 125.029 74.2572 125.029C65.373 125.029 57.3571 124.03 51.5857 122.431C48.6947 121.63 46.4095 120.69 44.8645 119.677C43.2886 118.645 42.6616 117.662 42.6616 116.816C42.6616 115.97 43.2886 114.987 44.8645 113.954C46.4095 112.942 48.6947 112.002 51.5857 111.201C57.3571 109.601 65.373 108.603 74.2572 108.603C83.1414 108.603 91.1573 109.601 96.9287 111.201C99.8197 112.002 102.105 112.942 103.65 113.954C105.226 114.987 105.853 115.97 105.853 116.816Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M31.75 62.6172H116.765V74.7275C116.765 98.2037 97.7335 117.235 74.2574 117.235C50.7812 117.235 31.75 98.2037 31.75 74.7275V62.6172Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M108.28 71.9888C109.791 71.576 111.28 72.7134 111.28 74.2794L111.279 74.5493C111.279 92.0736 99.2304 106.784 82.9649 110.847C82.3502 111.001 81.583 111.141 80.7612 111.266C78.8158 111.562 77.8383 109.126 79.2482 107.753C79.3136 107.689 79.3765 107.627 79.4366 107.567C86.9741 99.9868 91.6697 89.5787 91.7917 78.0739L91.7941 77.6142C91.7946 75.8018 93.1732 74.287 94.9775 74.1161L95.3561 74.0802L96.5004 73.9546L97.6223 73.8227C97.8073 73.8002 97.9914 73.7774 98.1745 73.7544L99.2613 73.6131L100.324 73.4659L101.362 73.3127C101.532 73.2867 101.702 73.2604 101.871 73.2339L102.87 73.0721L103.842 72.9048C104.002 72.8764 104.161 72.8478 104.318 72.819L105.249 72.6435C106.013 72.4951 106.748 72.3412 107.451 72.1821L108.28 71.9888Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M116.765 61.4778C116.765 61.7541 116.62 62.1207 116.127 62.5764C115.635 63.0312 114.867 63.5054 113.809 63.9787C111.698 64.9229 108.596 65.7915 104.706 66.5277C96.9359 67.9976 86.1705 68.9116 74.2574 68.9116C62.3442 68.9116 51.5788 67.9976 43.8092 66.5277C39.9182 65.7915 36.8166 64.9229 34.7056 63.9787C33.6476 63.5054 32.8799 63.0312 32.388 62.5764C31.8951 62.1207 31.75 61.7541 31.75 61.4778C31.75 61.2015 31.8951 60.8349 32.388 60.3791C32.8799 59.9243 33.6476 59.4501 34.7056 58.9769C36.8166 58.0326 39.9182 57.164 43.8092 56.4279C51.5788 54.9579 62.3442 54.0439 74.2574 54.0439C86.1705 54.0439 96.9359 54.9579 104.706 56.4279C108.596 57.164 111.698 58.0326 113.809 58.9769C114.867 59.4501 115.635 59.9243 116.127 60.3791C116.62 60.8349 116.765 61.2015 116.765 61.4778Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M37.2725 75.0268L36.555 74.8084L36.3366 75.5259L37.054 75.7443L37.2725 75.0268ZM62.2577 78.6114L62.217 79.3603L62.9659 79.4009L63.0066 78.652L62.2577 78.6114ZM37.7093 73.5918L37.9277 72.8743L37.2102 72.6559L36.9918 73.3734L37.7093 73.5918ZM62.3391 77.1136L63.088 77.1543L63.1286 76.4054L62.3797 76.3647L62.3391 77.1136ZM67.1576 78.8199L66.408 78.7966L66.3846 79.5462L67.1343 79.5696L67.1576 78.8199ZM74.2575 78.9293V79.6793H75.0075V78.9293H74.2575ZM67.2043 77.3206L67.2276 76.571L66.478 76.5477L66.4546 77.2973L67.2043 77.3206ZM74.2575 77.4293H75.0075V76.6793H74.2575V77.4293ZM37.054 75.7443C42.815 77.498 51.7566 78.7922 62.217 79.3603L62.2984 77.8625C51.886 77.297 43.083 76.0116 37.4909 74.3093L37.054 75.7443ZM36.9918 73.3734L36.555 74.8084L37.99 75.2452L38.4268 73.8102L36.9918 73.3734ZM62.3797 76.3647C52.0153 75.8018 43.3509 74.5252 37.9277 72.8743L37.4909 74.3093C43.083 76.0116 51.886 77.297 62.2984 77.8625L62.3797 76.3647ZM63.0066 78.652L63.088 77.1543L61.5902 77.0729L61.5088 78.5707L63.0066 78.652ZM67.1343 79.5696C69.4526 79.6417 71.8321 79.6793 74.2575 79.6793V78.1793C71.8475 78.1793 69.4836 78.142 67.1809 78.0703L67.1343 79.5696ZM66.4546 77.2973L66.408 78.7966L67.9072 78.8433L67.9539 77.344L66.4546 77.2973ZM74.2575 76.6793C71.863 76.6793 69.5146 76.6422 67.2276 76.571L67.1809 78.0703C69.4836 78.142 71.8475 78.1793 74.2575 78.1793V76.6793ZM75.0075 78.9293V77.4293H73.5075V78.9293H75.0075Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M74.8439 60.3097L76.3503 60.3177L77.84 60.3346L79.3118 60.3601L80.7645 60.3942L82.1967 60.4365L83.1395 60.4693L84.5349 60.5251L85.9064 60.5887L86.8069 60.6354L87.6959 60.6855L89.4378 60.7954L90.7112 60.8862L91.9549 60.984L93.5647 61.125L94.3481 61.1999L95.4951 61.3176L96.9701 61.4843L97.6835 61.5717L98.3803 61.6617L99.3936 61.8015L100.047 61.8978L100.994 62.0469L101.603 62.1492L102.48 62.307L103.04 62.415L103.581 62.5252L104.102 62.6375L104.602 62.7518L105.081 62.8682L105.313 62.9271L105.76 63.0464L106.185 63.1675L106.782 63.3526L106.893 63.3981C107.404 63.6071 107.349 64.3528 106.81 64.4736C106.61 64.5186 106.406 64.5632 106.199 64.6074L105.687 64.7153L104.843 64.8845L103.879 65.0663C103.522 65.1315 103.16 65.1954 102.792 65.2581L102.236 65.3511L101.101 65.5314C99.0563 65.8448 96.8669 66.1208 94.5613 66.3565L93.6913 66.443L92.3666 66.5655L91.0192 66.6794L90.3374 66.733L88.9582 66.8335L88.2611 66.8804L87.5591 66.9251L86.1413 67.0075L84.7058 67.0806L83.9818 67.1137L82.522 67.1728C79.8317 67.2723 77.0665 67.3238 74.2574 67.3238C71.9165 67.3238 69.6061 67.2881 67.3441 67.2185L65.9929 67.1728L64.5331 67.1137L63.8091 67.0806L62.3736 67.0075L60.9558 66.9251L60.2538 66.8804L59.5567 66.8335L58.1775 66.733L57.4956 66.6794L56.1483 66.5655L55.4831 66.5054L54.1701 66.3785C52.0831 66.1681 50.09 65.9248 48.2115 65.6507L47.4135 65.5314L46.2786 65.3511C45.7811 65.2693 45.293 65.1852 44.8146 65.0988L44.1045 64.9675L43.672 64.8845L42.8282 64.7153C42.5369 64.6551 42.251 64.5942 41.9705 64.5326C41.3516 64.3967 41.2871 63.5306 41.8801 63.3074C41.9041 63.2984 41.9211 63.2922 41.9302 63.2893L42.4388 63.1357L43.0949 62.9551L43.6788 62.8079L44.1697 62.6924L44.6813 62.5789L45.4869 62.4126L46.3371 62.2513L46.9281 62.1465L47.8498 61.9937L48.4872 61.8949L49.1426 61.7985L49.8155 61.7045L50.857 61.5685L51.9358 61.4383L52.6752 61.355L53.4303 61.2744L54.2006 61.1966L55.384 61.0853L56.5998 60.9807L57.8465 60.883L59.123 60.7923L60.428 60.7087L61.3132 60.6571L62.2102 60.6089L63.5767 60.5429L64.9675 60.4847L66.3814 60.4345L67.8169 60.3924L69.2728 60.3587L70.2542 60.341L71.7414 60.3216L72.7425 60.3136L73.7507 60.3096L74.8439 60.3097Z", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M116.735 61.8672H117.504C127.762 61.8672 135.612 71.0005 134.071 81.1418V81.1418C132.827 89.3306 125.787 95.3819 117.504 95.3819H111.643", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M66.0734 19L67.9404 21.1159C70.9952 24.578 70.0904 29.9737 66.0734 32.25V32.25C62.0564 34.5263 61.1517 39.922 64.2065 43.3841L66.0734 45.5", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M76.9855 36.9268L78.8525 39.0426C81.9073 42.5047 81.0025 47.9005 76.9855 50.1768V50.1768C72.9685 52.4531 72.0638 57.8488 75.1186 61.3109L76.9855 63.4268", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" })); const Details = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M32.75 113.156V38.2634L40.5118 42.4971L40.871 42.693L41.2301 42.4971L49.7419 37.8543L58.2538 42.4971L58.6129 42.693L58.972 42.4971L67.4839 37.8543L75.9957 42.4971L76.3548 42.693L76.714 42.4971L84.4758 38.2634V113.156L76.714 108.922L76.3548 108.726L75.9957 108.922L67.4839 113.565L58.972 108.922L58.6129 108.726L58.2538 108.922L49.7419 113.565L41.2301 108.922L40.871 108.726L40.5118 108.922L32.75 113.156Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M44.9033 65.6029H66.7885", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M44.9033 75.5687H66.7885", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M44.9033 85.5355H66.7885", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M106.955 54.7867C117.843 65.6741 117.843 83.3261 106.955 94.2136C96.0678 105.101 78.4158 105.101 67.5284 94.2136C56.6409 83.3261 56.6409 65.6741 67.5284 54.7867C78.4158 43.8992 96.0678 43.8992 106.955 54.7867Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M122.591 73.0242L122.622 73.7736L123.371 73.7425L123.34 72.9931L122.591 73.0242ZM120.314 61.9086L121.015 61.6422L120.749 60.9411L120.048 61.2076L120.314 61.9086ZM121.092 73.0864L120.342 73.1175L120.374 73.8668L121.123 73.8357L121.092 73.0864ZM118.912 62.4416L118.645 61.7405L117.944 62.0069L118.211 62.708L118.912 62.4416ZM112.259 49.4829L111.729 50.0133L112.259 49.4829ZM98.6235 40.9932L98.8642 40.2828L98.1538 40.0421L97.9132 40.7525L98.6235 40.9932ZM116.798 55.0422L117.211 55.6682L117.837 55.2552L117.424 54.6292L116.798 55.0422ZM115.546 55.8683L114.92 56.2813L115.333 56.9073L115.959 56.4943L115.546 55.8683ZM111.198 50.5436L111.729 50.0133V50.0133L111.198 50.5436ZM98.1421 42.4138L97.4318 42.1731L97.1911 42.8835L97.9014 43.1241L98.1421 42.4138ZM123.34 72.9931C123.18 69.1365 122.405 65.2997 121.015 61.6422L119.613 62.1751C120.945 65.68 121.688 69.3577 121.841 73.0553L123.34 72.9931ZM121.123 73.8357L122.622 73.7736L122.559 72.2748L121.061 72.337L121.123 73.8357ZM118.211 62.708C119.485 66.0603 120.196 69.5789 120.342 73.1175L121.841 73.0553C121.688 69.3577 120.945 65.68 119.613 62.1751L118.211 62.708ZM120.048 61.2076L118.645 61.7405L119.178 63.1426L120.58 62.6097L120.048 61.2076ZM112.789 48.9526C108.735 44.8988 103.954 42.0076 98.8642 40.2828L98.3828 41.7035C103.26 43.356 107.841 46.1259 111.729 50.0133L112.789 48.9526ZM117.424 54.6292C116.1 52.6215 114.554 50.7178 112.789 48.9526L111.729 50.0133C113.422 51.7065 114.903 53.5315 116.172 55.4552L117.424 54.6292ZM115.959 56.4943L117.211 55.6682L116.385 54.4162L115.133 55.2423L115.959 56.4943ZM110.668 51.0739C112.289 52.6952 113.706 54.4416 114.92 56.2813L116.172 55.4552C114.903 53.5315 113.422 51.7065 111.729 50.0133L110.668 51.0739ZM97.9014 43.1241C102.565 44.7044 106.947 47.353 110.668 51.0739L111.729 50.0133C107.841 46.1259 103.26 43.356 98.3828 41.7035L97.9014 43.1241ZM97.9132 40.7525L97.4318 42.1731L98.8524 42.6545L99.3338 41.2339L97.9132 40.7525Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M110.11 101.359L114.102 97.3677C115.069 96.4009 116.636 96.4009 117.603 97.3677L130.148 109.913C131.115 110.88 131.115 112.448 130.148 113.414L126.157 117.406C125.19 118.373 123.622 118.373 122.655 117.406L110.11 104.861C109.143 103.894 109.143 102.326 110.11 101.359Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M107.227 94.4844L111.919 99.177", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "87.2421", cy: "74.4999", r: "20.621", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "87.2418", cy: "74.4996", r: "18.1452", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "93.2904", cy: "80.5487", r: "4.83871", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M87.2418 60.3867C79.4475 60.3867 73.1289 66.7053 73.1289 74.4996", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M114.411 99.8936C114.801 99.5031 115.434 99.5031 115.825 99.8936L127.526 111.595C127.917 111.986 127.917 112.619 127.526 113.009L124.949 115.587C124.558 115.977 123.925 115.977 123.535 115.587L111.833 103.885C111.443 103.495 111.443 102.862 111.833 102.471L114.411 99.8936Z", fill: "#3040D6", fillOpacity: "0.05" })); const Docs = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M27.497 52.9147C27.0325 51.1809 28.0614 49.3988 29.7951 48.9343L84.4364 34.2932C86.1702 33.8286 87.9523 34.8575 88.4168 36.5913L107.66 108.407C108.124 110.14 107.095 111.922 105.362 112.387L50.7203 127.028C48.9865 127.493 47.2044 126.464 46.7399 124.73L27.497 52.9147Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M30.9342 53.9837C30.6484 52.9168 31.2815 51.8201 32.3485 51.5342L84.5262 37.5532C85.5931 37.2674 86.6898 37.9005 86.9757 38.9675L105.092 106.577C105.377 107.644 104.744 108.74 103.677 109.026L51.4996 123.007C50.4327 123.293 49.336 122.66 49.0501 121.593L30.9342 53.9837Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "112.028", cy: "68.4949", r: "14.9725", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("mask", { id: "path-5-inside-1_0_2393", fill: "white" }, /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M98.6862 32H54.2666C52.0575 32 50.2666 33.7909 50.2666 36V110.349C50.2666 112.558 52.0575 114.349 54.2666 114.349H110.835C113.045 114.349 114.835 112.558 114.835 110.349V48.2213L99.1031 32.489C98.9489 32.3348 98.81 32.1712 98.6862 32Z" })), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M98.6862 32H54.2666C52.0575 32 50.2666 33.7909 50.2666 36V110.349C50.2666 112.558 52.0575 114.349 54.2666 114.349H110.835C113.045 114.349 114.835 112.558 114.835 110.349V48.2213L99.1031 32.489C98.9489 32.3348 98.81 32.1712 98.6862 32Z", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M98.6862 32L99.902 31.1214L99.4529 30.5H98.6862V32ZM114.835 48.2213H116.335V47.6L115.896 47.1606L114.835 48.2213ZM99.1031 32.489L98.0424 33.5496L98.0424 33.5496L99.1031 32.489ZM54.2666 33.5H98.6862V30.5H54.2666V33.5ZM51.7666 36C51.7666 34.6193 52.8859 33.5 54.2666 33.5V30.5C51.229 30.5 48.7666 32.9624 48.7666 36H51.7666ZM51.7666 110.349V36H48.7666V110.349H51.7666ZM54.2666 112.849C52.8859 112.849 51.7666 111.729 51.7666 110.349H48.7666C48.7666 113.386 51.229 115.849 54.2666 115.849V112.849ZM110.835 112.849H54.2666V115.849H110.835V112.849ZM113.335 110.349C113.335 111.729 112.216 112.849 110.835 112.849V115.849C113.873 115.849 116.335 113.386 116.335 110.349H113.335ZM113.335 48.2213V110.349H116.335V48.2213H113.335ZM115.896 47.1606L100.164 31.4283L98.0424 33.5496L113.775 49.282L115.896 47.1606ZM100.164 31.4283C100.066 31.3308 99.9791 31.2281 99.902 31.1214L97.4705 32.8786C97.6409 33.1143 97.8316 33.3388 98.0424 33.5496L100.164 31.4283Z", fill: "#3B3552", mask: "url(#path-5-inside-1_0_2393)" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M46.75 36V36.75H47.5V36H46.75ZM45.25 36H44.5V36.75H45.25V36ZM67.0388 27.25H67.7888V26.5H67.0388V27.25ZM67.0388 28.75V29.5H67.7888V28.75H67.0388ZM71.2749 28.75H70.5249V29.5H71.2749V28.75ZM71.2749 27.25V26.5H70.5249V27.25H71.2749ZM77.9839 27.25H78.7339V26.5H77.9839V27.25ZM77.9839 28.75V29.5H78.7339V28.75H77.9839ZM47.5 36C47.5 32.4101 50.4101 29.5 54 29.5V28C49.5817 28 46 31.5817 46 36H47.5ZM45.25 36.75H46.75V35.25H45.25V36.75ZM54 26.5C48.7533 26.5 44.5 30.7533 44.5 36H46C46 31.5817 49.5817 28 54 28V26.5ZM54.0339 26.5H54V28H54.0339V26.5ZM54.0678 26.5H54.0339V28H54.0678V26.5ZM54.1017 26.5H54.0678V28H54.1017V26.5ZM54.1356 26.5H54.1017V28H54.1356V26.5ZM54.1694 26.5H54.1356V28H54.1694V26.5ZM54.2031 26.5H54.1694V28H54.2031V26.5ZM54.2369 26.5H54.2031V28H54.2369V26.5ZM54.2706 26.5H54.2369V28H54.2706V26.5ZM54.3043 26.5H54.2706V28H54.3043V26.5ZM54.3379 26.5H54.3043V28H54.3379V26.5ZM54.3715 26.5H54.3379V28H54.3715V26.5ZM54.4051 26.5H54.3715V28H54.4051V26.5ZM54.4386 26.5H54.4051V28H54.4386V26.5ZM54.4721 26.5H54.4386V28H54.4721V26.5ZM54.5056 26.5H54.4721V28H54.5056V26.5ZM54.539 26.5H54.5056V28H54.539V26.5ZM54.5724 26.5H54.539V28H54.5724V26.5ZM54.6058 26.5H54.5724V28H54.6058V26.5ZM54.6392 26.5H54.6058V28H54.6392V26.5ZM54.6725 26.5H54.6392V28H54.6725V26.5ZM54.7057 26.5H54.6725V28H54.7057V26.5ZM54.739 26.5H54.7057V28H54.739V26.5ZM54.7722 26.5H54.739V28H54.7722V26.5ZM54.8054 26.5H54.7722V28H54.8054V26.5ZM54.8385 26.5H54.8054V28H54.8385V26.5ZM54.8716 26.5H54.8385V28H54.8716V26.5ZM54.9047 26.5H54.8716V28H54.9047V26.5ZM54.9377 26.5H54.9047V28H54.9377V26.5ZM54.9708 26.5H54.9377V28H54.9708V26.5ZM55.0037 26.5H54.9708V28H55.0037V26.5ZM55.0367 26.5H55.0037V28H55.0367V26.5ZM55.0696 26.5H55.0367V28H55.0696V26.5ZM55.1025 26.5H55.0696V28H55.1025V26.5ZM55.1353 26.5H55.1025V28H55.1353V26.5ZM55.1681 26.5H55.1353V28H55.1681V26.5ZM55.2009 26.5H55.1681V28H55.2009V26.5ZM55.2336 26.5H55.2009V28H55.2336V26.5ZM55.2664 26.5H55.2336V28H55.2664V26.5ZM55.299 26.5H55.2664V28H55.299V26.5ZM55.3317 26.5H55.299V28H55.3317V26.5ZM55.3643 26.5H55.3317V28H55.3643V26.5ZM55.3969 26.5H55.3643V28H55.3969V26.5ZM55.4294 26.5H55.3969V28H55.4294V26.5ZM55.4619 26.5H55.4294V28H55.4619V26.5ZM55.4944 26.5H55.4619V28H55.4944V26.5ZM55.5269 26.5H55.4944V28H55.5269V26.5ZM55.5593 26.5H55.5269V28H55.5593V26.5ZM55.5917 26.5H55.5593V28H55.5917V26.5ZM55.624 26.5H55.5917V28H55.624V26.5ZM55.6563 26.5H55.624V28H55.6563V26.5ZM55.6886 26.5H55.6563V28H55.6886V26.5ZM55.7208 26.5H55.6886V28H55.7208V26.5ZM55.7531 26.5H55.7208V28H55.7531V26.5ZM55.7852 26.5H55.7531V28H55.7852V26.5ZM55.8174 26.5H55.7852V28H55.8174V26.5ZM55.8495 26.5H55.8174V28H55.8495V26.5ZM55.8816 26.5H55.8495V28H55.8816V26.5ZM55.9136 26.5H55.8816V28H55.9136V26.5ZM55.9456 26.5H55.9136V28H55.9456V26.5ZM55.9776 26.5H55.9456V28H55.9776V26.5ZM56.0096 26.5H55.9776V28H56.0096V26.5ZM56.0415 26.5H56.0096V28H56.0415V26.5ZM56.0734 26.5H56.0415V28H56.0734V26.5ZM56.1052 26.5H56.0734V28H56.1052V26.5ZM56.137 26.5H56.1052V28H56.137V26.5ZM56.1688 26.5H56.137V28H56.1688V26.5ZM56.2006 26.5H56.1688V28H56.2006V26.5ZM56.2323 26.5H56.2006V28H56.2323V26.5ZM56.264 26.5H56.2323V28H56.264V26.5ZM56.2956 26.5H56.264V28H56.2956V26.5ZM56.3272 26.5H56.2956V28H56.3272V26.5ZM56.3588 26.5H56.3272V28H56.3588V26.5ZM56.3904 26.5H56.3588V28H56.3904V26.5ZM56.4219 26.5H56.3904V28H56.4219V26.5ZM56.4534 26.5H56.4219V28H56.4534V26.5ZM56.4848 26.5H56.4534V28H56.4848V26.5ZM56.5163 26.5H56.4848V28H56.5163V26.5ZM56.5476 26.5H56.5163V28H56.5476V26.5ZM56.579 26.5H56.5476V28H56.579V26.5ZM56.6103 26.5H56.579V28H56.6103V26.5ZM56.6416 26.5H56.6103V28H56.6416V26.5ZM56.6728 26.5H56.6416V28H56.6728V26.5ZM56.7041 26.5H56.6728V28H56.7041V26.5ZM56.7353 26.5H56.7041V28H56.7353V26.5ZM56.7664 26.5H56.7353V28H56.7664V26.5ZM56.7975 26.5H56.7664V28H56.7975V26.5ZM56.8286 26.5H56.7975V28H56.8286V26.5ZM56.8597 26.5H56.8286V28H56.8597V26.5ZM56.8907 26.5H56.8597V28H56.8907V26.5ZM56.9217 26.5H56.8907V28H56.9217V26.5ZM56.9526 26.5H56.9217V28H56.9526V26.5ZM56.9836 26.5H56.9526V28H56.9836V26.5ZM57.0144 26.5H56.9836V28H57.0144V26.5ZM57.0453 26.5H57.0144V28H57.0453V26.5ZM57.0761 26.5H57.0453V28H57.0761V26.5ZM57.1069 26.5H57.0761V28H57.1069V26.5ZM57.1377 26.5H57.1069V28H57.1377V26.5ZM57.1684 26.5H57.1377V28H57.1684V26.5ZM57.1991 26.5H57.1684V28H57.1991V26.5ZM57.2297 26.5H57.1991V28H57.2297V26.5ZM57.2603 26.5H57.2297V28H57.2603V26.5ZM57.2909 26.5H57.2603V28H57.2909V26.5ZM57.3215 26.5H57.2909V28H57.3215V26.5ZM57.352 26.5H57.3215V28H57.352V26.5ZM57.3825 26.5H57.352V28H57.3825V26.5ZM57.413 26.5H57.3825V28H57.413V26.5ZM57.4434 26.5H57.413V28H57.4434V26.5ZM57.4738 26.5H57.4434V28H57.4738V26.5ZM57.5041 26.5H57.4738V28H57.5041V26.5ZM57.5345 26.5H57.5041V28H57.5345V26.5ZM57.5648 26.5H57.5345V28H57.5648V26.5ZM57.595 26.5H57.5648V28H57.595V26.5ZM57.6252 26.5H57.595V28H57.6252V26.5ZM57.6554 26.5H57.6252V28H57.6554V26.5ZM57.6856 26.5H57.6554V28H57.6856V26.5ZM57.7157 26.5H57.6856V28H57.7157V26.5ZM57.7458 26.5H57.7157V28H57.7458V26.5ZM57.7759 26.5H57.7458V28H57.7759V26.5ZM57.8059 26.5H57.7759V28H57.8059V26.5ZM57.8359 26.5H57.8059V28H57.8359V26.5ZM57.8658 26.5H57.8359V28H57.8658V26.5ZM57.8958 26.5H57.8658V28H57.8958V26.5ZM57.9257 26.5H57.8958V28H57.9257V26.5ZM57.9555 26.5H57.9257V28H57.9555V26.5ZM57.9853 26.5H57.9555V28H57.9853V26.5ZM58.0151 26.5H57.9853V28H58.0151V26.5ZM58.0449 26.5H58.0151V28H58.0449V26.5ZM58.0746 26.5H58.0449V28H58.0746V26.5ZM58.1043 26.5H58.0746V28H58.1043V26.5ZM58.134 26.5H58.1043V28H58.134V26.5ZM58.1636 26.5H58.134V28H58.1636V26.5ZM58.1932 26.5H58.1636V28H58.1932V26.5ZM58.2228 26.5H58.1932V28H58.2228V26.5ZM58.2523 26.5H58.2228V28H58.2523V26.5ZM58.2818 26.5H58.2523V28H58.2818V26.5ZM58.3113 26.5H58.2818V28H58.3113V26.5ZM58.3407 26.5H58.3113V28H58.3407V26.5ZM58.3701 26.5H58.3407V28H58.3701V26.5ZM58.3994 26.5H58.3701V28H58.3994V26.5ZM58.4288 26.5H58.3994V28H58.4288V26.5ZM58.4581 26.5H58.4288V28H58.4581V26.5ZM58.4873 26.5H58.4581V28H58.4873V26.5ZM58.5166 26.5H58.4873V28H58.5166V26.5ZM58.5458 26.5H58.5166V28H58.5458V26.5ZM58.5749 26.5H58.5458V28H58.5749V26.5ZM58.6041 26.5H58.5749V28H58.6041V26.5ZM58.6331 26.5H58.6041V28H58.6331V26.5ZM58.6622 26.5H58.6331V28H58.6622V26.5ZM58.6912 26.5H58.6622V28H58.6912V26.5ZM58.7202 26.5H58.6912V28H58.7202V26.5ZM58.7492 26.5H58.7202V28H58.7492V26.5ZM58.7781 26.5H58.7492V28H58.7781V26.5ZM58.807 26.5H58.7781V28H58.807V26.5ZM58.8359 26.5H58.807V28H58.8359V26.5ZM58.8647 26.5H58.8359V28H58.8647V26.5ZM58.8935 26.5H58.8647V28H58.8935V26.5ZM58.9223 26.5H58.8935V28H58.9223V26.5ZM58.951 26.5H58.9223V28H58.951V26.5ZM58.9797 26.5H58.951V28H58.9797V26.5ZM59.0084 26.5H58.9797V28H59.0084V26.5ZM59.037 26.5H59.0084V28H59.037V26.5ZM59.0656 26.5H59.037V28H59.0656V26.5ZM59.0942 26.5H59.0656V28H59.0942V26.5ZM59.1227 26.5H59.0942V28H59.1227V26.5ZM59.1512 26.5H59.1227V28H59.1512V26.5ZM59.1797 26.5H59.1512V28H59.1797V26.5ZM59.2081 26.5H59.1797V28H59.2081V26.5ZM59.2365 26.5H59.2081V28H59.2365V26.5ZM59.2649 26.5H59.2365V28H59.2649V26.5ZM59.2932 26.5H59.2649V28H59.2932V26.5ZM59.3215 26.5H59.2932V28H59.3215V26.5ZM59.3498 26.5H59.3215V28H59.3498V26.5ZM59.378 26.5H59.3498V28H59.378V26.5ZM59.4062 26.5H59.378V28H59.4062V26.5ZM59.4344 26.5H59.4062V28H59.4344V26.5ZM59.4625 26.5H59.4344V28H59.4625V26.5ZM59.4907 26.5H59.4625V28H59.4907V26.5ZM59.5187 26.5H59.4907V28H59.5187V26.5ZM59.5468 26.5H59.5187V28H59.5468V26.5ZM59.5748 26.5H59.5468V28H59.5748V26.5ZM59.6027 26.5H59.5748V28H59.6027V26.5ZM59.6307 26.5H59.6027V28H59.6307V26.5ZM59.6586 26.5H59.6307V28H59.6586V26.5ZM59.6864 26.5H59.6586V28H59.6864V26.5ZM59.7143 26.5H59.6864V28H59.7143V26.5ZM59.7421 26.5H59.7143V28H59.7421V26.5ZM59.7699 26.5H59.7421V28H59.7699V26.5ZM59.7976 26.5H59.7699V28H59.7976V26.5ZM59.8253 26.5H59.7976V28H59.8253V26.5ZM59.853 26.5H59.8253V28H59.853V26.5ZM59.8806 26.5H59.853V28H59.8806V26.5ZM59.9082 26.5H59.8806V28H59.9082V26.5ZM59.9358 26.5H59.9082V28H59.9358V26.5ZM59.9633 26.5H59.9358V28H59.9633V26.5ZM59.9908 26.5H59.9633V28H59.9908V26.5ZM60.0183 26.5H59.9908V28H60.0183V26.5ZM60.0457 26.5H60.0183V28H60.0457V26.5ZM60.0731 26.5H60.0457V28H60.0731V26.5ZM60.1005 26.5H60.0731V28H60.1005V26.5ZM60.1279 26.5H60.1005V28H60.1279V26.5ZM60.1552 26.5H60.1279V28H60.1552V26.5ZM60.1824 26.5H60.1552V28H60.1824V26.5ZM60.2097 26.5H60.1824V28H60.2097V26.5ZM60.2369 26.5H60.2097V28H60.2369V26.5ZM60.2641 26.5H60.2369V28H60.2641V26.5ZM60.2912 26.5H60.2641V28H60.2912V26.5ZM60.3183 26.5H60.2912V28H60.3183V26.5ZM60.3454 26.5H60.3183V28H60.3454V26.5ZM60.3724 26.5H60.3454V28H60.3724V26.5ZM60.3994 26.5H60.3724V28H60.3994V26.5ZM60.4264 26.5H60.3994V28H60.4264V26.5ZM60.4534 26.5H60.4264V28H60.4534V26.5ZM60.4803 26.5H60.4534V28H60.4803V26.5ZM60.5071 26.5H60.4803V28H60.5071V26.5ZM60.534 26.5H60.5071V28H60.534V26.5ZM60.5608 26.5H60.534V28H60.5608V26.5ZM60.5876 26.5H60.5608V28H60.5876V26.5ZM60.6143 26.5H60.5876V28H60.6143V26.5ZM60.641 26.5H60.6143V28H60.641V26.5ZM60.6677 26.5H60.641V28H60.6677V26.5ZM60.6943 26.5H60.6677V28H60.6943V26.5ZM60.7209 26.5H60.6943V28H60.7209V26.5ZM60.7475 26.5H60.7209V28H60.7475V26.5ZM60.7741 26.5H60.7475V28H60.7741V26.5ZM60.8006 26.5H60.7741V28H60.8006V26.5ZM60.8271 26.5H60.8006V28H60.8271V26.5ZM60.8535 26.5H60.8271V28H60.8535V26.5ZM60.8799 26.5H60.8535V28H60.8799V26.5ZM60.9063 26.5H60.8799V28H60.9063V26.5ZM60.9326 26.5H60.9063V28H60.9326V26.5ZM60.959 26.5H60.9326V28H60.959V26.5ZM60.9852 26.5H60.959V28H60.9852V26.5ZM61.0115 26.5H60.9852V28H61.0115V26.5ZM61.0377 26.5H61.0115V28H61.0377V26.5ZM61.0639 26.5H61.0377V28H61.0639V26.5ZM61.09 26.5H61.0639V28H61.09V26.5ZM61.1161 26.5H61.09V28H61.1161V26.5ZM61.1422 26.5H61.1161V28H61.1422V26.5ZM61.1683 26.5H61.1422V28H61.1683V26.5ZM61.1943 26.5H61.1683V28H61.1943V26.5ZM61.2202 26.5H61.1943V28H61.2202V26.5ZM61.2462 26.5H61.2202V28H61.2462V26.5ZM61.2721 26.5H61.2462V28H61.2721V26.5ZM61.298 26.5H61.2721V28H61.298V26.5ZM61.3238 26.5H61.298V28H61.3238V26.5ZM61.3497 26.5H61.3238V28H61.3497V26.5ZM61.3754 26.5H61.3497V28H61.3754V26.5ZM61.4012 26.5H61.3754V28H61.4012V26.5ZM61.4269 26.5H61.4012V28H61.4269V26.5ZM61.4526 26.5H61.4269V28H61.4526V26.5ZM61.4782 26.5H61.4526V28H61.4782V26.5ZM61.5038 26.5H61.4782V28H61.5038V26.5ZM61.5294 26.5H61.5038V28H61.5294V26.5ZM61.555 26.5H61.5294V28H61.555V26.5ZM61.5805 26.5H61.555V28H61.5805V26.5ZM61.606 26.5H61.5805V28H61.606V26.5ZM61.6314 26.5H61.606V28H61.6314V26.5ZM61.6568 26.5H61.6314V28H61.6568V26.5ZM61.6822 26.5H61.6568V28H61.6822V26.5ZM61.7076 26.5H61.6822V28H61.7076V26.5ZM61.7329 26.5H61.7076V28H61.7329V26.5ZM61.7582 26.5H61.7329V28H61.7582V26.5ZM61.7834 26.5H61.7582V28H61.7834V26.5ZM61.8086 26.5H61.7834V28H61.8086V26.5ZM61.8338 26.5H61.8086V28H61.8338V26.5ZM61.859 26.5H61.8338V28H61.859V26.5ZM61.8841 26.5H61.859V28H61.8841V26.5ZM61.9092 26.5H61.8841V28H61.9092V26.5ZM61.9342 26.5H61.9092V28H61.9342V26.5ZM61.9593 26.5H61.9342V28H61.9593V26.5ZM61.9842 26.5H61.9593V28H61.9842V26.5ZM62.0092 26.5H61.9842V28H62.0092V26.5ZM62.0341 26.5H62.0092V28H62.0341V26.5ZM62.059 26.5H62.0341V28H62.059V26.5ZM62.0839 26.5H62.059V28H62.0839V26.5ZM62.1087 26.5H62.0839V28H62.1087V26.5ZM62.1335 26.5H62.1087V28H62.1335V26.5ZM62.1582 26.5H62.1335V28H62.1582V26.5ZM62.1829 26.5H62.1582V28H62.1829V26.5ZM62.2076 26.5H62.1829V28H62.2076V26.5ZM62.2323 26.5H62.2076V28H62.2323V26.5ZM62.2569 26.5H62.2323V28H62.2569V26.5ZM62.2815 26.5H62.2569V28H62.2815V26.5ZM62.306 26.5H62.2815V28H62.306V26.5ZM62.3306 26.5H62.306V28H62.3306V26.5ZM62.355 26.5H62.3306V28H62.355V26.5ZM62.3795 26.5H62.355V28H62.3795V26.5ZM62.4039 26.5H62.3795V28H62.4039V26.5ZM62.4283 26.5H62.4039V28H62.4283V26.5ZM62.4527 26.5H62.4283V28H62.4527V26.5ZM62.477 26.5H62.4527V28H62.477V26.5ZM62.5013 26.5H62.477V28H62.5013V26.5ZM62.5255 26.5H62.5013V28H62.5255V26.5ZM62.5498 26.5H62.5255V28H62.5498V26.5ZM62.5739 26.5H62.5498V28H62.5739V26.5ZM62.5981 26.5H62.5739V28H62.5981V26.5ZM62.6222 26.5H62.5981V28H62.6222V26.5ZM62.6463 26.5H62.6222V28H62.6463V26.5ZM62.6704 26.5H62.6463V28H62.6704V26.5ZM62.6944 26.5H62.6704V28H62.6944V26.5ZM62.7184 26.5H62.6944V28H62.7184V26.5ZM62.7423 26.5H62.7184V28H62.7423V26.5ZM62.7663 26.5H62.7423V28H62.7663V26.5ZM62.7902 26.5H62.7663V28H62.7902V26.5ZM62.814 26.5H62.7902V28H62.814V26.5ZM62.8378 26.5H62.814V28H62.8378V26.5ZM62.8616 26.5H62.8378V28H62.8616V26.5ZM62.8854 26.5H62.8616V28H62.8854V26.5ZM62.9091 26.5H62.8854V28H62.9091V26.5ZM62.9328 26.5H62.9091V28H62.9328V26.5ZM62.9565 26.5H62.9328V28H62.9565V26.5ZM62.9801 26.5H62.9565V28H62.9801V26.5ZM63.0037 26.5H62.9801V28H63.0037V26.5ZM63.0273 26.5H63.0037V28H63.0273V26.5ZM63.0508 26.5H63.0273V28H63.0508V26.5ZM63.0743 26.5H63.0508V28H63.0743V26.5ZM63.0977 26.5H63.0743V28H63.0977V26.5ZM63.1212 26.5H63.0977V28H63.1212V26.5ZM63.1446 26.5H63.1212V28H63.1446V26.5ZM63.1679 26.5H63.1446V28H63.1679V26.5ZM63.1912 26.5H63.1679V28H63.1912V26.5ZM63.2145 26.5H63.1912V28H63.2145V26.5ZM63.2378 26.5H63.2145V28H63.2378V26.5ZM63.261 26.5H63.2378V28H63.261V26.5ZM63.2842 26.5H63.261V28H63.2842V26.5ZM63.3074 26.5H63.2842V28H63.3074V26.5ZM63.3305 26.5H63.3074V28H63.3305V26.5ZM63.3536 26.5H63.3305V28H63.3536V26.5ZM63.3767 26.5H63.3536V28H63.3767V26.5ZM63.3997 26.5H63.3767V28H63.3997V26.5ZM63.4227 26.5H63.3997V28H63.4227V26.5ZM63.4457 26.5H63.4227V28H63.4457V26.5ZM63.4686 26.5H63.4457V28H63.4686V26.5ZM63.4915 26.5H63.4686V28H63.4915V26.5ZM63.5143 26.5H63.4915V28H63.5143V26.5ZM63.5372 26.5H63.5143V28H63.5372V26.5ZM63.56 26.5H63.5372V28H63.56V26.5ZM63.5827 26.5H63.56V28H63.5827V26.5ZM63.6055 26.5H63.5827V28H63.6055V26.5ZM63.6282 26.5H63.6055V28H63.6282V26.5ZM63.6508 26.5H63.6282V28H63.6508V26.5ZM63.6735 26.5H63.6508V28H63.6735V26.5ZM63.6961 26.5H63.6735V28H63.6961V26.5ZM63.7186 26.5H63.6961V28H63.7186V26.5ZM63.7412 26.5H63.7186V28H63.7412V26.5ZM63.7637 26.5H63.7412V28H63.7637V26.5ZM63.7861 26.5H63.7637V28H63.7861V26.5ZM63.8086 26.5H63.7861V28H63.8086V26.5ZM63.831 26.5H63.8086V28H63.831V26.5ZM63.8533 26.5H63.831V28H63.8533V26.5ZM63.8757 26.5H63.8533V28H63.8757V26.5ZM63.898 26.5H63.8757V28H63.898V26.5ZM63.9202 26.5H63.898V28H63.9202V26.5ZM63.9425 26.5H63.9202V28H63.9425V26.5ZM63.9647 26.5H63.9425V28H63.9647V26.5ZM63.9868 26.5H63.9647V28H63.9868V26.5ZM64.009 26.5H63.9868V28H64.009V26.5ZM64.0311 26.5H64.009V28H64.0311V26.5ZM64.0531 26.5H64.0311V28H64.0531V26.5ZM64.0752 26.5H64.0531V28H64.0752V26.5ZM64.0972 26.5H64.0752V28H64.0972V26.5ZM64.1191 26.5H64.0972V28H64.1191V26.5ZM64.1411 26.5H64.1191V28H64.1411V26.5ZM64.163 26.5H64.1411V28H64.163V26.5ZM64.1848 26.5H64.163V28H64.1848V26.5ZM64.2067 26.5H64.1848V28H64.2067V26.5ZM64.2285 26.5H64.2067V28H64.2285V26.5ZM64.2502 26.5H64.2285V28H64.2502V26.5ZM64.272 26.5H64.2502V28H64.272V26.5ZM64.2937 26.5H64.272V28H64.2937V26.5ZM64.3153 26.5H64.2937V28H64.3153V26.5ZM64.337 26.5H64.3153V28H64.337V26.5ZM64.3586 26.5H64.337V28H64.3586V26.5ZM64.3802 26.5H64.3586V28H64.3802V26.5ZM64.4017 26.5H64.3802V28H64.4017V26.5ZM64.4232 26.5H64.4017V28H64.4232V26.5ZM64.4447 26.5H64.4232V28H64.4447V26.5ZM64.4661 26.5H64.4447V28H64.4661V26.5ZM64.4875 26.5H64.4661V28H64.4875V26.5ZM64.5089 26.5H64.4875V28H64.5089V26.5ZM64.5302 26.5H64.5089V28H64.5302V26.5ZM64.5515 26.5H64.5302V28H64.5515V26.5ZM64.5728 26.5H64.5515V28H64.5728V26.5ZM64.594 26.5H64.5728V28H64.594V26.5ZM64.6152 26.5H64.594V28H64.6152V26.5ZM64.6364 26.5H64.6152V28H64.6364V26.5ZM64.6576 26.5H64.6364V28H64.6576V26.5ZM64.6787 26.5H64.6576V28H64.6787V26.5ZM64.6997 26.5H64.6787V28H64.6997V26.5ZM64.7208 26.5H64.6997V28H64.7208V26.5ZM64.7418 26.5H64.7208V28H64.7418V26.5ZM64.7628 26.5H64.7418V28H64.7628V26.5ZM64.7837 26.5H64.7628V28H64.7837V26.5ZM64.8046 26.5H64.7837V28H64.8046V26.5ZM64.8255 26.5H64.8046V28H64.8255V26.5ZM64.8463 26.5H64.8255V28H64.8463V26.5ZM64.8671 26.5H64.8463V28H64.8671V26.5ZM64.8879 26.5H64.8671V28H64.8879V26.5ZM64.9086 26.5H64.8879V28H64.9086V26.5ZM64.9293 26.5H64.9086V28H64.9293V26.5ZM64.95 26.5H64.9293V28H64.95V26.5ZM64.9707 26.5H64.95V28H64.9707V26.5ZM64.9913 26.5H64.9707V28H64.9913V26.5ZM65.0118 26.5H64.9913V28H65.0118V26.5ZM65.0324 26.5H65.0118V28H65.0324V26.5ZM65.0529 26.5H65.0324V28H65.0529V26.5ZM65.0734 26.5H65.0529V28H65.0734V26.5ZM65.0938 26.5H65.0734V28H65.0938V26.5ZM65.1142 26.5H65.0938V28H65.1142V26.5ZM65.1346 26.5H65.1142V28H65.1346V26.5ZM65.1549 26.5H65.1346V28H65.1549V26.5ZM65.1753 26.5H65.1549V28H65.1753V26.5ZM65.1955 26.5H65.1753V28H65.1955V26.5ZM65.2158 26.5H65.1955V28H65.2158V26.5ZM65.236 26.5H65.2158V28H65.236V26.5ZM65.2562 26.5H65.236V28H65.2562V26.5ZM65.2763 26.5H65.2562V28H65.2763V26.5ZM65.2964 26.5H65.2763V28H65.2964V26.5ZM65.3165 26.5H65.2964V28H65.3165V26.5ZM65.3365 26.5H65.3165V28H65.3365V26.5ZM65.3566 26.5H65.3365V28H65.3566V26.5ZM65.3765 26.5H65.3566V28H65.3765V26.5ZM65.3965 26.5H65.3765V28H65.3965V26.5ZM65.4164 26.5H65.3965V28H65.4164V26.5ZM65.4363 26.5H65.4164V28H65.4363V26.5ZM65.4561 26.5H65.4363V28H65.4561V26.5ZM65.4759 26.5H65.4561V28H65.4759V26.5ZM65.4957 26.5H65.4759V28H65.4957V26.5ZM65.5155 26.5H65.4957V28H65.5155V26.5ZM65.5352 26.5H65.5155V28H65.5352V26.5ZM65.5548 26.5H65.5352V28H65.5548V26.5ZM65.5745 26.5H65.5548V28H65.5745V26.5ZM65.5941 26.5H65.5745V28H65.5941V26.5ZM65.6137 26.5H65.5941V28H65.6137V26.5ZM65.6332 26.5H65.6137V28H65.6332V26.5ZM65.6528 26.5H65.6332V28H65.6528V26.5ZM65.6722 26.5H65.6528V28H65.6722V26.5ZM65.6917 26.5H65.6722V28H65.6917V26.5ZM65.7111 26.5H65.6917V28H65.7111V26.5ZM65.7305 26.5H65.7111V28H65.7305V26.5ZM65.7498 26.5H65.7305V28H65.7498V26.5ZM65.7691 26.5H65.7498V28H65.7691V26.5ZM65.7884 26.5H65.7691V28H65.7884V26.5ZM65.8077 26.5H65.7884V28H65.8077V26.5ZM65.8269 26.5H65.8077V28H65.8269V26.5ZM65.8461 26.5H65.8269V28H65.8461V26.5ZM65.8652 26.5H65.8461V28H65.8652V26.5ZM65.8843 26.5H65.8652V28H65.8843V26.5ZM65.9034 26.5H65.8843V28H65.9034V26.5ZM65.9225 26.5H65.9034V28H65.9225V26.5ZM65.9415 26.5H65.9225V28H65.9415V26.5ZM65.9605 26.5H65.9415V28H65.9605V26.5ZM65.9794 26.5H65.9605V28H65.9794V26.5ZM65.9983 26.5H65.9794V28H65.9983V26.5ZM66.0172 26.5H65.9983V28H66.0172V26.5ZM66.0361 26.5H66.0172V28H66.0361V26.5ZM66.0549 26.5H66.0361V28H66.0549V26.5ZM66.0737 26.5H66.0549V28H66.0737V26.5ZM66.0924 26.5H66.0737V28H66.0924V26.5ZM66.1111 26.5H66.0924V28H66.1111V26.5ZM66.1298 26.5H66.1111V28H66.1298V26.5ZM66.1485 26.5H66.1298V28H66.1485V26.5ZM66.1671 26.5H66.1485V28H66.1671V26.5ZM66.1857 26.5H66.1671V28H66.1857V26.5ZM66.2042 26.5H66.1857V28H66.2042V26.5ZM66.2228 26.5H66.2042V28H66.2228V26.5ZM66.2412 26.5H66.2228V28H66.2412V26.5ZM66.2597 26.5H66.2412V28H66.2597V26.5ZM66.2781 26.5H66.2597V28H66.2781V26.5ZM66.2965 26.5H66.2781V28H66.2965V26.5ZM66.3149 26.5H66.2965V28H66.3149V26.5ZM66.3332 26.5H66.3149V28H66.3332V26.5ZM66.3515 26.5H66.3332V28H66.3515V26.5ZM66.3697 26.5H66.3515V28H66.3697V26.5ZM66.3879 26.5H66.3697V28H66.3879V26.5ZM66.4061 26.5H66.3879V28H66.4061V26.5ZM66.4243 26.5H66.4061V28H66.4243V26.5ZM66.4424 26.5H66.4243V28H66.4424V26.5ZM66.4605 26.5H66.4424V28H66.4605V26.5ZM66.4786 26.5H66.4605V28H66.4786V26.5ZM66.4966 26.5H66.4786V28H66.4966V26.5ZM66.5146 26.5H66.4966V28H66.5146V26.5ZM66.5325 26.5H66.5146V28H66.5325V26.5ZM66.5504 26.5H66.5325V28H66.5504V26.5ZM66.5683 26.5H66.5504V28H66.5683V26.5ZM66.5862 26.5H66.5683V28H66.5862V26.5ZM66.604 26.5H66.5862V28H66.604V26.5ZM66.6218 26.5H66.604V28H66.6218V26.5ZM66.6396 26.5H66.6218V28H66.6396V26.5ZM66.6573 26.5H66.6396V28H66.6573V26.5ZM66.675 26.5H66.6573V28H66.675V26.5ZM66.6926 26.5H66.675V28H66.6926V26.5ZM66.7103 26.5H66.6926V28H66.7103V26.5ZM66.7278 26.5H66.7103V28H66.7278V26.5ZM66.7454 26.5H66.7278V28H66.7454V26.5ZM66.7629 26.5H66.7454V28H66.7629V26.5ZM66.7804 26.5H66.7629V28H66.7804V26.5ZM66.7979 26.5H66.7804V28H66.7979V26.5ZM66.8153 26.5H66.7979V28H66.8153V26.5ZM66.8327 26.5H66.8153V28H66.8327V26.5ZM66.8501 26.5H66.8327V28H66.8501V26.5ZM66.8674 26.5H66.8501V28H66.8674V26.5ZM66.8847 26.5H66.8674V28H66.8847V26.5ZM66.9019 26.5H66.8847V28H66.9019V26.5ZM66.9192 26.5H66.9019V28H66.9192V26.5ZM66.9363 26.5H66.9192V28H66.9363V26.5ZM66.9535 26.5H66.9363V28H66.9535V26.5ZM66.9706 26.5H66.9535V28H66.9706V26.5ZM66.9877 26.5H66.9706V28H66.9877V26.5ZM67.0048 26.5H66.9877V28H67.0048V26.5ZM67.0218 26.5H67.0048V28H67.0218V26.5ZM67.0388 26.5H67.0218V28H67.0388V26.5ZM67.7888 28.75V27.25H66.2888V28.75H67.7888ZM67.0218 29.5H67.0388V28H67.0218V29.5ZM67.0048 29.5H67.0218V28H67.0048V29.5ZM66.9877 29.5H67.0048V28H66.9877V29.5ZM66.9706 29.5H66.9877V28H66.9706V29.5ZM66.9535 29.5H66.9706V28H66.9535V29.5ZM66.9363 29.5H66.9535V28H66.9363V29.5ZM66.9192 29.5H66.9363V28H66.9192V29.5ZM66.9019 29.5H66.9192V28H66.9019V29.5ZM66.8847 29.5H66.9019V28H66.8847V29.5ZM66.8674 29.5H66.8847V28H66.8674V29.5ZM66.8501 29.5H66.8674V28H66.8501V29.5ZM66.8327 29.5H66.8501V28H66.8327V29.5ZM66.8153 29.5H66.8327V28H66.8153V29.5ZM66.7979 29.5H66.8153V28H66.7979V29.5ZM66.7804 29.5H66.7979V28H66.7804V29.5ZM66.7629 29.5H66.7804V28H66.7629V29.5ZM66.7454 29.5H66.7629V28H66.7454V29.5ZM66.7278 29.5H66.7454V28H66.7278V29.5ZM66.7103 29.5H66.7278V28H66.7103V29.5ZM66.6926 29.5H66.7103V28H66.6926V29.5ZM66.675 29.5H66.6926V28H66.675V29.5ZM66.6573 29.5H66.675V28H66.6573V29.5ZM66.6396 29.5H66.6573V28H66.6396V29.5ZM66.6218 29.5H66.6396V28H66.6218V29.5ZM66.604 29.5H66.6218V28H66.604V29.5ZM66.5862 29.5H66.604V28H66.5862V29.5ZM66.5683 29.5H66.5862V28H66.5683V29.5ZM66.5504 29.5H66.5683V28H66.5504V29.5ZM66.5325 29.5H66.5504V28H66.5325V29.5ZM66.5146 29.5H66.5325V28H66.5146V29.5ZM66.4966 29.5H66.5146V28H66.4966V29.5ZM66.4786 29.5H66.4966V28H66.4786V29.5ZM66.4605 29.5H66.4786V28H66.4605V29.5ZM66.4424 29.5H66.4605V28H66.4424V29.5ZM66.4243 29.5H66.4424V28H66.4243V29.5ZM66.4061 29.5H66.4243V28H66.4061V29.5ZM66.3879 29.5H66.4061V28H66.3879V29.5ZM66.3697 29.5H66.3879V28H66.3697V29.5ZM66.3515 29.5H66.3697V28H66.3515V29.5ZM66.3332 29.5H66.3515V28H66.3332V29.5ZM66.3149 29.5H66.3332V28H66.3149V29.5ZM66.2965 29.5H66.3149V28H66.2965V29.5ZM66.2781 29.5H66.2965V28H66.2781V29.5ZM66.2597 29.5H66.2781V28H66.2597V29.5ZM66.2412 29.5H66.2597V28H66.2412V29.5ZM66.2228 29.5H66.2412V28H66.2228V29.5ZM66.2042 29.5H66.2228V28H66.2042V29.5ZM66.1857 29.5H66.2042V28H66.1857V29.5ZM66.1671 29.5H66.1857V28H66.1671V29.5ZM66.1485 29.5H66.1671V28H66.1485V29.5ZM66.1298 29.5H66.1485V28H66.1298V29.5ZM66.1111 29.5H66.1298V28H66.1111V29.5ZM66.0924 29.5H66.1111V28H66.0924V29.5ZM66.0737 29.5H66.0924V28H66.0737V29.5ZM66.0549 29.5H66.0737V28H66.0549V29.5ZM66.0361 29.5H66.0549V28H66.0361V29.5ZM66.0172 29.5H66.0361V28H66.0172V29.5ZM65.9983 29.5H66.0172V28H65.9983V29.5ZM65.9794 29.5H65.9983V28H65.9794V29.5ZM65.9605 29.5H65.9794V28H65.9605V29.5ZM65.9415 29.5H65.9605V28H65.9415V29.5ZM65.9225 29.5H65.9415V28H65.9225V29.5ZM65.9034 29.5H65.9225V28H65.9034V29.5ZM65.8843 29.5H65.9034V28H65.8843V29.5ZM65.8652 29.5H65.8843V28H65.8652V29.5ZM65.8461 29.5H65.8652V28H65.8461V29.5ZM65.8269 29.5H65.8461V28H65.8269V29.5ZM65.8077 29.5H65.8269V28H65.8077V29.5ZM65.7884 29.5H65.8077V28H65.7884V29.5ZM65.7691 29.5H65.7884V28H65.7691V29.5ZM65.7498 29.5H65.7691V28H65.7498V29.5ZM65.7305 29.5H65.7498V28H65.7305V29.5ZM65.7111 29.5H65.7305V28H65.7111V29.5ZM65.6917 29.5H65.7111V28H65.6917V29.5ZM65.6722 29.5H65.6917V28H65.6722V29.5ZM65.6528 29.5H65.6722V28H65.6528V29.5ZM65.6332 29.5H65.6528V28H65.6332V29.5ZM65.6137 29.5H65.6332V28H65.6137V29.5ZM65.5941 29.5H65.6137V28H65.5941V29.5ZM65.5745 29.5H65.5941V28H65.5745V29.5ZM65.5548 29.5H65.5745V28H65.5548V29.5ZM65.5352 29.5H65.5548V28H65.5352V29.5ZM65.5155 29.5H65.5352V28H65.5155V29.5ZM65.4957 29.5H65.5155V28H65.4957V29.5ZM65.4759 29.5H65.4957V28H65.4759V29.5ZM65.4561 29.5H65.4759V28H65.4561V29.5ZM65.4363 29.5H65.4561V28H65.4363V29.5ZM65.4164 29.5H65.4363V28H65.4164V29.5ZM65.3965 29.5H65.4164V28H65.3965V29.5ZM65.3765 29.5H65.3965V28H65.3765V29.5ZM65.3566 29.5H65.3765V28H65.3566V29.5ZM65.3365 29.5H65.3566V28H65.3365V29.5ZM65.3165 29.5H65.3365V28H65.3165V29.5ZM65.2964 29.5H65.3165V28H65.2964V29.5ZM65.2763 29.5H65.2964V28H65.2763V29.5ZM65.2562 29.5H65.2763V28H65.2562V29.5ZM65.236 29.5H65.2562V28H65.236V29.5ZM65.2158 29.5H65.236V28H65.2158V29.5ZM65.1955 29.5H65.2158V28H65.1955V29.5ZM65.1753 29.5H65.1955V28H65.1753V29.5ZM65.1549 29.5H65.1753V28H65.1549V29.5ZM65.1346 29.5H65.1549V28H65.1346V29.5ZM65.1142 29.5H65.1346V28H65.1142V29.5ZM65.0938 29.5H65.1142V28H65.0938V29.5ZM65.0734 29.5H65.0938V28H65.0734V29.5ZM65.0529 29.5H65.0734V28H65.0529V29.5ZM65.0324 29.5H65.0529V28H65.0324V29.5ZM65.0118 29.5H65.0324V28H65.0118V29.5ZM64.9913 29.5H65.0118V28H64.9913V29.5ZM64.9707 29.5H64.9913V28H64.9707V29.5ZM64.95 29.5H64.9707V28H64.95V29.5ZM64.9293 29.5H64.95V28H64.9293V29.5ZM64.9086 29.5H64.9293V28H64.9086V29.5ZM64.8879 29.5H64.9086V28H64.8879V29.5ZM64.8671 29.5H64.8879V28H64.8671V29.5ZM64.8463 29.5H64.8671V28H64.8463V29.5ZM64.8255 29.5H64.8463V28H64.8255V29.5ZM64.8046 29.5H64.8255V28H64.8046V29.5ZM64.7837 29.5H64.8046V28H64.7837V29.5ZM64.7628 29.5H64.7837V28H64.7628V29.5ZM64.7418 29.5H64.7628V28H64.7418V29.5ZM64.7208 29.5H64.7418V28H64.7208V29.5ZM64.6997 29.5H64.7208V28H64.6997V29.5ZM64.6787 29.5H64.6997V28H64.6787V29.5ZM64.6576 29.5H64.6787V28H64.6576V29.5ZM64.6364 29.5H64.6576V28H64.6364V29.5ZM64.6152 29.5H64.6364V28H64.6152V29.5ZM64.594 29.5H64.6152V28H64.594V29.5ZM64.5728 29.5H64.594V28H64.5728V29.5ZM64.5515 29.5H64.5728V28H64.5515V29.5ZM64.5302 29.5H64.5515V28H64.5302V29.5ZM64.5089 29.5H64.5302V28H64.5089V29.5ZM64.4875 29.5H64.5089V28H64.4875V29.5ZM64.4661 29.5H64.4875V28H64.4661V29.5ZM64.4447 29.5H64.4661V28H64.4447V29.5ZM64.4232 29.5H64.4447V28H64.4232V29.5ZM64.4017 29.5H64.4232V28H64.4017V29.5ZM64.3802 29.5H64.4017V28H64.3802V29.5ZM64.3586 29.5H64.3802V28H64.3586V29.5ZM64.337 29.5H64.3586V28H64.337V29.5ZM64.3153 29.5H64.337V28H64.3153V29.5ZM64.2937 29.5H64.3153V28H64.2937V29.5ZM64.272 29.5H64.2937V28H64.272V29.5ZM64.2502 29.5H64.272V28H64.2502V29.5ZM64.2285 29.5H64.2502V28H64.2285V29.5ZM64.2067 29.5H64.2285V28H64.2067V29.5ZM64.1848 29.5H64.2067V28H64.1848V29.5ZM64.163 29.5H64.1848V28H64.163V29.5ZM64.1411 29.5H64.163V28H64.1411V29.5ZM64.1191 29.5H64.1411V28H64.1191V29.5ZM64.0972 29.5H64.1191V28H64.0972V29.5ZM64.0752 29.5H64.0972V28H64.0752V29.5ZM64.0531 29.5H64.0752V28H64.0531V29.5ZM64.0311 29.5H64.0531V28H64.0311V29.5ZM64.009 29.5H64.0311V28H64.009V29.5ZM63.9868 29.5H64.009V28H63.9868V29.5ZM63.9647 29.5H63.9868V28H63.9647V29.5ZM63.9425 29.5H63.9647V28H63.9425V29.5ZM63.9202 29.5H63.9425V28H63.9202V29.5ZM63.898 29.5H63.9202V28H63.898V29.5ZM63.8757 29.5H63.898V28H63.8757V29.5ZM63.8533 29.5H63.8757V28H63.8533V29.5ZM63.831 29.5H63.8533V28H63.831V29.5ZM63.8086 29.5H63.831V28H63.8086V29.5ZM63.7861 29.5H63.8086V28H63.7861V29.5ZM63.7637 29.5H63.7861V28H63.7637V29.5ZM63.7412 29.5H63.7637V28H63.7412V29.5ZM63.7186 29.5H63.7412V28H63.7186V29.5ZM63.6961 29.5H63.7186V28H63.6961V29.5ZM63.6735 29.5H63.6961V28H63.6735V29.5ZM63.6508 29.5H63.6735V28H63.6508V29.5ZM63.6282 29.5H63.6508V28H63.6282V29.5ZM63.6055 29.5H63.6282V28H63.6055V29.5ZM63.5827 29.5H63.6055V28H63.5827V29.5ZM63.56 29.5H63.5827V28H63.56V29.5ZM63.5372 29.5H63.56V28H63.5372V29.5ZM63.5143 29.5H63.5372V28H63.5143V29.5ZM63.4915 29.5H63.5143V28H63.4915V29.5ZM63.4686 29.5H63.4915V28H63.4686V29.5ZM63.4457 29.5H63.4686V28H63.4457V29.5ZM63.4227 29.5H63.4457V28H63.4227V29.5ZM63.3997 29.5H63.4227V28H63.3997V29.5ZM63.3767 29.5H63.3997V28H63.3767V29.5ZM63.3536 29.5H63.3767V28H63.3536V29.5ZM63.3305 29.5H63.3536V28H63.3305V29.5ZM63.3074 29.5H63.3305V28H63.3074V29.5ZM63.2842 29.5H63.3074V28H63.2842V29.5ZM63.261 29.5H63.2842V28H63.261V29.5ZM63.2378 29.5H63.261V28H63.2378V29.5ZM63.2145 29.5H63.2378V28H63.2145V29.5ZM63.1912 29.5H63.2145V28H63.1912V29.5ZM63.1679 29.5H63.1912V28H63.1679V29.5ZM63.1446 29.5H63.1679V28H63.1446V29.5ZM63.1212 29.5H63.1446V28H63.1212V29.5ZM63.0977 29.5H63.1212V28H63.0977V29.5ZM63.0743 29.5H63.0977V28H63.0743V29.5ZM63.0508 29.5H63.0743V28H63.0508V29.5ZM63.0273 29.5H63.0508V28H63.0273V29.5ZM63.0037 29.5H63.0273V28H63.0037V29.5ZM62.9801 29.5H63.0037V28H62.9801V29.5ZM62.9565 29.5H62.9801V28H62.9565V29.5ZM62.9328 29.5H62.9565V28H62.9328V29.5ZM62.9091 29.5H62.9328V28H62.9091V29.5ZM62.8854 29.5H62.9091V28H62.8854V29.5ZM62.8616 29.5H62.8854V28H62.8616V29.5ZM62.8378 29.5H62.8616V28H62.8378V29.5ZM62.814 29.5H62.8378V28H62.814V29.5ZM62.7902 29.5H62.814V28H62.7902V29.5ZM62.7663 29.5H62.7902V28H62.7663V29.5ZM62.7423 29.5H62.7663V28H62.7423V29.5ZM62.7184 29.5H62.7423V28H62.7184V29.5ZM62.6944 29.5H62.7184V28H62.6944V29.5ZM62.6704 29.5H62.6944V28H62.6704V29.5ZM62.6463 29.5H62.6704V28H62.6463V29.5ZM62.6222 29.5H62.6463V28H62.6222V29.5ZM62.5981 29.5H62.6222V28H62.5981V29.5ZM62.5739 29.5H62.5981V28H62.5739V29.5ZM62.5498 29.5H62.5739V28H62.5498V29.5ZM62.5255 29.5H62.5498V28H62.5255V29.5ZM62.5013 29.5H62.5255V28H62.5013V29.5ZM62.477 29.5H62.5013V28H62.477V29.5ZM62.4527 29.5H62.477V28H62.4527V29.5ZM62.4283 29.5H62.4527V28H62.4283V29.5ZM62.4039 29.5H62.4283V28H62.4039V29.5ZM62.3795 29.5H62.4039V28H62.3795V29.5ZM62.355 29.5H62.3795V28H62.355V29.5ZM62.3306 29.5H62.355V28H62.3306V29.5ZM62.306 29.5H62.3306V28H62.306V29.5ZM62.2815 29.5H62.306V28H62.2815V29.5ZM62.2569 29.5H62.2815V28H62.2569V29.5ZM62.2323 29.5H62.2569V28H62.2323V29.5ZM62.2076 29.5H62.2323V28H62.2076V29.5ZM62.1829 29.5H62.2076V28H62.1829V29.5ZM62.1582 29.5H62.1829V28H62.1582V29.5ZM62.1335 29.5H62.1582V28H62.1335V29.5ZM62.1087 29.5H62.1335V28H62.1087V29.5ZM62.0839 29.5H62.1087V28H62.0839V29.5ZM62.059 29.5H62.0839V28H62.059V29.5ZM62.0341 29.5H62.059V28H62.0341V29.5ZM62.0092 29.5H62.0341V28H62.0092V29.5ZM61.9842 29.5H62.0092V28H61.9842V29.5ZM61.9593 29.5H61.9842V28H61.9593V29.5ZM61.9342 29.5H61.9593V28H61.9342V29.5ZM61.9092 29.5H61.9342V28H61.9092V29.5ZM61.8841 29.5H61.9092V28H61.8841V29.5ZM61.859 29.5H61.8841V28H61.859V29.5ZM61.8338 29.5H61.859V28H61.8338V29.5ZM61.8086 29.5H61.8338V28H61.8086V29.5ZM61.7834 29.5H61.8086V28H61.7834V29.5ZM61.7582 29.5H61.7834V28H61.7582V29.5ZM61.7329 29.5H61.7582V28H61.7329V29.5ZM61.7076 29.5H61.7329V28H61.7076V29.5ZM61.6822 29.5H61.7076V28H61.6822V29.5ZM61.6568 29.5H61.6822V28H61.6568V29.5ZM61.6314 29.5H61.6568V28H61.6314V29.5ZM61.606 29.5H61.6314V28H61.606V29.5ZM61.5805 29.5H61.606V28H61.5805V29.5ZM61.555 29.5H61.5805V28H61.555V29.5ZM61.5294 29.5H61.555V28H61.5294V29.5ZM61.5038 29.5H61.5294V28H61.5038V29.5ZM61.4782 29.5H61.5038V28H61.4782V29.5ZM61.4526 29.5H61.4782V28H61.4526V29.5ZM61.4269 29.5H61.4526V28H61.4269V29.5ZM61.4012 29.5H61.4269V28H61.4012V29.5ZM61.3754 29.5H61.4012V28H61.3754V29.5ZM61.3497 29.5H61.3754V28H61.3497V29.5ZM61.3238 29.5H61.3497V28H61.3238V29.5ZM61.298 29.5H61.3238V28H61.298V29.5ZM61.2721 29.5H61.298V28H61.2721V29.5ZM61.2462 29.5H61.2721V28H61.2462V29.5ZM61.2202 29.5H61.2462V28H61.2202V29.5ZM61.1943 29.5H61.2202V28H61.1943V29.5ZM61.1683 29.5H61.1943V28H61.1683V29.5ZM61.1422 29.5H61.1683V28H61.1422V29.5ZM61.1161 29.5H61.1422V28H61.1161V29.5ZM61.09 29.5H61.1161V28H61.09V29.5ZM61.0639 29.5H61.09V28H61.0639V29.5ZM61.0377 29.5H61.0639V28H61.0377V29.5ZM61.0115 29.5H61.0377V28H61.0115V29.5ZM60.9852 29.5H61.0115V28H60.9852V29.5ZM60.959 29.5H60.9852V28H60.959V29.5ZM60.9326 29.5H60.959V28H60.9326V29.5ZM60.9063 29.5H60.9326V28H60.9063V29.5ZM60.8799 29.5H60.9063V28H60.8799V29.5ZM60.8535 29.5H60.8799V28H60.8535V29.5ZM60.8271 29.5H60.8535V28H60.8271V29.5ZM60.8006 29.5H60.8271V28H60.8006V29.5ZM60.7741 29.5H60.8006V28H60.7741V29.5ZM60.7475 29.5H60.7741V28H60.7475V29.5ZM60.7209 29.5H60.7475V28H60.7209V29.5ZM60.6943 29.5H60.7209V28H60.6943V29.5ZM60.6677 29.5H60.6943V28H60.6677V29.5ZM60.641 29.5H60.6677V28H60.641V29.5ZM60.6143 29.5H60.641V28H60.6143V29.5ZM60.5876 29.5H60.6143V28H60.5876V29.5ZM60.5608 29.5H60.5876V28H60.5608V29.5ZM60.534 29.5H60.5608V28H60.534V29.5ZM60.5071 29.5H60.534V28H60.5071V29.5ZM60.4803 29.5H60.5071V28H60.4803V29.5ZM60.4534 29.5H60.4803V28H60.4534V29.5ZM60.4264 29.5H60.4534V28H60.4264V29.5ZM60.3994 29.5H60.4264V28H60.3994V29.5ZM60.3724 29.5H60.3994V28H60.3724V29.5ZM60.3454 29.5H60.3724V28H60.3454V29.5ZM60.3183 29.5H60.3454V28H60.3183V29.5ZM60.2912 29.5H60.3183V28H60.2912V29.5ZM60.2641 29.5H60.2912V28H60.2641V29.5ZM60.2369 29.5H60.2641V28H60.2369V29.5ZM60.2097 29.5H60.2369V28H60.2097V29.5ZM60.1824 29.5H60.2097V28H60.1824V29.5ZM60.1552 29.5H60.1824V28H60.1552V29.5ZM60.1279 29.5H60.1552V28H60.1279V29.5ZM60.1005 29.5H60.1279V28H60.1005V29.5ZM60.0731 29.5H60.1005V28H60.0731V29.5ZM60.0457 29.5H60.0731V28H60.0457V29.5ZM60.0183 29.5H60.0457V28H60.0183V29.5ZM59.9908 29.5H60.0183V28H59.9908V29.5ZM59.9633 29.5H59.9908V28H59.9633V29.5ZM59.9358 29.5H59.9633V28H59.9358V29.5ZM59.9082 29.5H59.9358V28H59.9082V29.5ZM59.8806 29.5H59.9082V28H59.8806V29.5ZM59.853 29.5H59.8806V28H59.853V29.5ZM59.8253 29.5H59.853V28H59.8253V29.5ZM59.7976 29.5H59.8253V28H59.7976V29.5ZM59.7699 29.5H59.7976V28H59.7699V29.5ZM59.7421 29.5H59.7699V28H59.7421V29.5ZM59.7143 29.5H59.7421V28H59.7143V29.5ZM59.6864 29.5H59.7143V28H59.6864V29.5ZM59.6586 29.5H59.6864V28H59.6586V29.5ZM59.6307 29.5H59.6586V28H59.6307V29.5ZM59.6027 29.5H59.6307V28H59.6027V29.5ZM59.5748 29.5H59.6027V28H59.5748V29.5ZM59.5468 29.5H59.5748V28H59.5468V29.5ZM59.5187 29.5H59.5468V28H59.5187V29.5ZM59.4907 29.5H59.5187V28H59.4907V29.5ZM59.4625 29.5H59.4907V28H59.4625V29.5ZM59.4344 29.5H59.4625V28H59.4344V29.5ZM59.4062 29.5H59.4344V28H59.4062V29.5ZM59.378 29.5H59.4062V28H59.378V29.5ZM59.3498 29.5H59.378V28H59.3498V29.5ZM59.3215 29.5H59.3498V28H59.3215V29.5ZM59.2932 29.5H59.3215V28H59.2932V29.5ZM59.2649 29.5H59.2932V28H59.2649V29.5ZM59.2365 29.5H59.2649V28H59.2365V29.5ZM59.2081 29.5H59.2365V28H59.2081V29.5ZM59.1797 29.5H59.2081V28H59.1797V29.5ZM59.1512 29.5H59.1797V28H59.1512V29.5ZM59.1227 29.5H59.1512V28H59.1227V29.5ZM59.0942 29.5H59.1227V28H59.0942V29.5ZM59.0656 29.5H59.0942V28H59.0656V29.5ZM59.037 29.5H59.0656V28H59.037V29.5ZM59.0084 29.5H59.037V28H59.0084V29.5ZM58.9797 29.5H59.0084V28H58.9797V29.5ZM58.951 29.5H58.9797V28H58.951V29.5ZM58.9223 29.5H58.951V28H58.9223V29.5ZM58.8935 29.5H58.9223V28H58.8935V29.5ZM58.8647 29.5H58.8935V28H58.8647V29.5ZM58.8359 29.5H58.8647V28H58.8359V29.5ZM58.807 29.5H58.8359V28H58.807V29.5ZM58.7781 29.5H58.807V28H58.7781V29.5ZM58.7492 29.5H58.7781V28H58.7492V29.5ZM58.7202 29.5H58.7492V28H58.7202V29.5ZM58.6912 29.5H58.7202V28H58.6912V29.5ZM58.6622 29.5H58.6912V28H58.6622V29.5ZM58.6331 29.5H58.6622V28H58.6331V29.5ZM58.6041 29.5H58.6331V28H58.6041V29.5ZM58.5749 29.5H58.6041V28H58.5749V29.5ZM58.5458 29.5H58.5749V28H58.5458V29.5ZM58.5166 29.5H58.5458V28H58.5166V29.5ZM58.4873 29.5H58.5166V28H58.4873V29.5ZM58.4581 29.5H58.4873V28H58.4581V29.5ZM58.4288 29.5H58.4581V28H58.4288V29.5ZM58.3994 29.5H58.4288V28H58.3994V29.5ZM58.3701 29.5H58.3994V28H58.3701V29.5ZM58.3407 29.5H58.3701V28H58.3407V29.5ZM58.3113 29.5H58.3407V28H58.3113V29.5ZM58.2818 29.5H58.3113V28H58.2818V29.5ZM58.2523 29.5H58.2818V28H58.2523V29.5ZM58.2228 29.5H58.2523V28H58.2228V29.5ZM58.1932 29.5H58.2228V28H58.1932V29.5ZM58.1636 29.5H58.1932V28H58.1636V29.5ZM58.134 29.5H58.1636V28H58.134V29.5ZM58.1043 29.5H58.134V28H58.1043V29.5ZM58.0746 29.5H58.1043V28H58.0746V29.5ZM58.0449 29.5H58.0746V28H58.0449V29.5ZM58.0151 29.5H58.0449V28H58.0151V29.5ZM57.9853 29.5H58.0151V28H57.9853V29.5ZM57.9555 29.5H57.9853V28H57.9555V29.5ZM57.9257 29.5H57.9555V28H57.9257V29.5ZM57.8958 29.5H57.9257V28H57.8958V29.5ZM57.8658 29.5H57.8958V28H57.8658V29.5ZM57.8359 29.5H57.8658V28H57.8359V29.5ZM57.8059 29.5H57.8359V28H57.8059V29.5ZM57.7759 29.5H57.8059V28H57.7759V29.5ZM57.7458 29.5H57.7759V28H57.7458V29.5ZM57.7157 29.5H57.7458V28H57.7157V29.5ZM57.6856 29.5H57.7157V28H57.6856V29.5ZM57.6554 29.5H57.6856V28H57.6554V29.5ZM57.6252 29.5H57.6554V28H57.6252V29.5ZM57.595 29.5H57.6252V28H57.595V29.5ZM57.5648 29.5H57.595V28H57.5648V29.5ZM57.5345 29.5H57.5648V28H57.5345V29.5ZM57.5041 29.5H57.5345V28H57.5041V29.5ZM57.4738 29.5H57.5041V28H57.4738V29.5ZM57.4434 29.5H57.4738V28H57.4434V29.5ZM57.413 29.5H57.4434V28H57.413V29.5ZM57.3825 29.5H57.413V28H57.3825V29.5ZM57.352 29.5H57.3825V28H57.352V29.5ZM57.3215 29.5H57.352V28H57.3215V29.5ZM57.2909 29.5H57.3215V28H57.2909V29.5ZM57.2603 29.5H57.2909V28H57.2603V29.5ZM57.2297 29.5H57.2603V28H57.2297V29.5ZM57.1991 29.5H57.2297V28H57.1991V29.5ZM57.1684 29.5H57.1991V28H57.1684V29.5ZM57.1377 29.5H57.1684V28H57.1377V29.5ZM57.1069 29.5H57.1377V28H57.1069V29.5ZM57.0761 29.5H57.1069V28H57.0761V29.5ZM57.0453 29.5H57.0761V28H57.0453V29.5ZM57.0144 29.5H57.0453V28H57.0144V29.5ZM56.9836 29.5H57.0144V28H56.9836V29.5ZM56.9526 29.5H56.9836V28H56.9526V29.5ZM56.9217 29.5H56.9526V28H56.9217V29.5ZM56.8907 29.5H56.9217V28H56.8907V29.5ZM56.8597 29.5H56.8907V28H56.8597V29.5ZM56.8286 29.5H56.8597V28H56.8286V29.5ZM56.7975 29.5H56.8286V28H56.7975V29.5ZM56.7664 29.5H56.7975V28H56.7664V29.5ZM56.7353 29.5H56.7664V28H56.7353V29.5ZM56.7041 29.5H56.7353V28H56.7041V29.5ZM56.6728 29.5H56.7041V28H56.6728V29.5ZM56.6416 29.5H56.6728V28H56.6416V29.5ZM56.6103 29.5H56.6416V28H56.6103V29.5ZM56.579 29.5H56.6103V28H56.579V29.5ZM56.5476 29.5H56.579V28H56.5476V29.5ZM56.5163 29.5H56.5476V28H56.5163V29.5ZM56.4848 29.5H56.5163V28H56.4848V29.5ZM56.4534 29.5H56.4848V28H56.4534V29.5ZM56.4219 29.5H56.4534V28H56.4219V29.5ZM56.3904 29.5H56.4219V28H56.3904V29.5ZM56.3588 29.5H56.3904V28H56.3588V29.5ZM56.3272 29.5H56.3588V28H56.3272V29.5ZM56.2956 29.5H56.3272V28H56.2956V29.5ZM56.264 29.5H56.2956V28H56.264V29.5ZM56.2323 29.5H56.264V28H56.2323V29.5ZM56.2006 29.5H56.2323V28H56.2006V29.5ZM56.1688 29.5H56.2006V28H56.1688V29.5ZM56.137 29.5H56.1688V28H56.137V29.5ZM56.1052 29.5H56.137V28H56.1052V29.5ZM56.0734 29.5H56.1052V28H56.0734V29.5ZM56.0415 29.5H56.0734V28H56.0415V29.5ZM56.0096 29.5H56.0415V28H56.0096V29.5ZM55.9776 29.5H56.0096V28H55.9776V29.5ZM55.9456 29.5H55.9776V28H55.9456V29.5ZM55.9136 29.5H55.9456V28H55.9136V29.5ZM55.8816 29.5H55.9136V28H55.8816V29.5ZM55.8495 29.5H55.8816V28H55.8495V29.5ZM55.8174 29.5H55.8495V28H55.8174V29.5ZM55.7852 29.5H55.8174V28H55.7852V29.5ZM55.7531 29.5H55.7852V28H55.7531V29.5ZM55.7208 29.5H55.7531V28H55.7208V29.5ZM55.6886 29.5H55.7208V28H55.6886V29.5ZM55.6563 29.5H55.6886V28H55.6563V29.5ZM55.624 29.5H55.6563V28H55.624V29.5ZM55.5917 29.5H55.624V28H55.5917V29.5ZM55.5593 29.5H55.5917V28H55.5593V29.5ZM55.5269 29.5H55.5593V28H55.5269V29.5ZM55.4944 29.5H55.5269V28H55.4944V29.5ZM55.4619 29.5H55.4944V28H55.4619V29.5ZM55.4294 29.5H55.4619V28H55.4294V29.5ZM55.3969 29.5H55.4294V28H55.3969V29.5ZM55.3643 29.5H55.3969V28H55.3643V29.5ZM55.3317 29.5H55.3643V28H55.3317V29.5ZM55.299 29.5H55.3317V28H55.299V29.5ZM55.2664 29.5H55.299V28H55.2664V29.5ZM55.2336 29.5H55.2664V28H55.2336V29.5ZM55.2009 29.5H55.2336V28H55.2009V29.5ZM55.1681 29.5H55.2009V28H55.1681V29.5ZM55.1353 29.5H55.1681V28H55.1353V29.5ZM55.1025 29.5H55.1353V28H55.1025V29.5ZM55.0696 29.5H55.1025V28H55.0696V29.5ZM55.0367 29.5H55.0696V28H55.0367V29.5ZM55.0037 29.5H55.0367V28H55.0037V29.5ZM54.9708 29.5H55.0037V28H54.9708V29.5ZM54.9377 29.5H54.9708V28H54.9377V29.5ZM54.9047 29.5H54.9377V28H54.9047V29.5ZM54.8716 29.5H54.9047V28H54.8716V29.5ZM54.8385 29.5H54.8716V28H54.8385V29.5ZM54.8054 29.5H54.8385V28H54.8054V29.5ZM54.7722 29.5H54.8054V28H54.7722V29.5ZM54.739 29.5H54.7722V28H54.739V29.5ZM54.7057 29.5H54.739V28H54.7057V29.5ZM54.6725 29.5H54.7057V28H54.6725V29.5ZM54.6392 29.5H54.6725V28H54.6392V29.5ZM54.6058 29.5H54.6392V28H54.6058V29.5ZM54.5724 29.5H54.6058V28H54.5724V29.5ZM54.539 29.5H54.5724V28H54.539V29.5ZM54.5056 29.5H54.539V28H54.5056V29.5ZM54.4721 29.5H54.5056V28H54.4721V29.5ZM54.4386 29.5H54.4721V28H54.4386V29.5ZM54.4051 29.5H54.4386V28H54.4051V29.5ZM54.3715 29.5H54.4051V28H54.3715V29.5ZM54.3379 29.5H54.3715V28H54.3379V29.5ZM54.3043 29.5H54.3379V28H54.3043V29.5ZM54.2706 29.5H54.3043V28H54.2706V29.5ZM54.2369 29.5H54.2706V28H54.2369V29.5ZM54.2031 29.5H54.2369V28H54.2031V29.5ZM54.1694 29.5H54.2031V28H54.1694V29.5ZM54.1356 29.5H54.1694V28H54.1356V29.5ZM54.1017 29.5H54.1356V28H54.1017V29.5ZM54.0678 29.5H54.1017V28H54.0678V29.5ZM54.0339 29.5H54.0678V28H54.0339V29.5ZM54 29.5H54.0339V28H54V29.5ZM71.2749 29.5H71.2851V28H71.2749V29.5ZM70.5249 27.25V28.75H72.0249V27.25H70.5249ZM71.2851 26.5H71.2749V28H71.2851V26.5ZM71.2953 26.5H71.2851V28H71.2953V26.5ZM71.3055 26.5H71.2953V28H71.3055V26.5ZM71.3157 26.5H71.3055V28H71.3157V26.5ZM71.3259 26.5H71.3157V28H71.3259V26.5ZM71.3362 26.5H71.3259V28H71.3362V26.5ZM71.3464 26.5H71.3362V28H71.3464V26.5ZM71.3567 26.5H71.3464V28H71.3567V26.5ZM71.367 26.5H71.3567V28H71.367V26.5ZM71.3773 26.5H71.367V28H71.3773V26.5ZM71.3876 26.5H71.3773V28H71.3876V26.5ZM71.3979 26.5H71.3876V28H71.3979V26.5ZM71.4082 26.5H71.3979V28H71.4082V26.5ZM71.4185 26.5H71.4082V28H71.4185V26.5ZM71.4289 26.5H71.4185V28H71.4289V26.5ZM71.4392 26.5H71.4289V28H71.4392V26.5ZM71.4496 26.5H71.4392V28H71.4496V26.5ZM71.46 26.5H71.4496V28H71.46V26.5ZM71.4704 26.5H71.46V28H71.4704V26.5ZM71.4808 26.5H71.4704V28H71.4808V26.5ZM71.4912 26.5H71.4808V28H71.4912V26.5ZM71.5016 26.5H71.4912V28H71.5016V26.5ZM71.5121 26.5H71.5016V28H71.5121V26.5ZM71.5225 26.5H71.5121V28H71.5225V26.5ZM71.533 26.5H71.5225V28H71.533V26.5ZM71.5435 26.5H71.533V28H71.5435V26.5ZM71.5539 26.5H71.5435V28H71.5539V26.5ZM71.5644 26.5H71.5539V28H71.5644V26.5ZM71.575 26.5H71.5644V28H71.575V26.5ZM71.5855 26.5H71.575V28H71.5855V26.5ZM71.596 26.5H71.5855V28H71.596V26.5ZM71.6065 26.5H71.596V28H71.6065V26.5ZM71.6171 26.5H71.6065V28H71.6171V26.5ZM71.6277 26.5H71.6171V28H71.6277V26.5ZM71.6382 26.5H71.6277V28H71.6382V26.5ZM71.6488 26.5H71.6382V28H71.6488V26.5ZM71.6594 26.5H71.6488V28H71.6594V26.5ZM71.67 26.5H71.6594V28H71.67V26.5ZM71.6807 26.5H71.67V28H71.6807V26.5ZM71.6913 26.5H71.6807V28H71.6913V26.5ZM71.7019 26.5H71.6913V28H71.7019V26.5ZM71.7126 26.5H71.7019V28H71.7126V26.5ZM71.7233 26.5H71.7126V28H71.7233V26.5ZM71.7339 26.5H71.7233V28H71.7339V26.5ZM71.7446 26.5H71.7339V28H71.7446V26.5ZM71.7553 26.5H71.7446V28H71.7553V26.5ZM71.766 26.5H71.7553V28H71.766V26.5ZM71.7768 26.5H71.766V28H71.7768V26.5ZM71.7875 26.5H71.7768V28H71.7875V26.5ZM71.7982 26.5H71.7875V28H71.7982V26.5ZM71.809 26.5H71.7982V28H71.809V26.5ZM71.8198 26.5H71.809V28H71.8198V26.5ZM71.8305 26.5H71.8198V28H71.8305V26.5ZM71.8413 26.5H71.8305V28H71.8413V26.5ZM71.8521 26.5H71.8413V28H71.8521V26.5ZM71.863 26.5H71.8521V28H71.863V26.5ZM71.8738 26.5H71.863V28H71.8738V26.5ZM71.8846 26.5H71.8738V28H71.8846V26.5ZM71.8955 26.5H71.8846V28H71.8955V26.5ZM71.9063 26.5H71.8955V28H71.9063V26.5ZM71.9172 26.5H71.9063V28H71.9172V26.5ZM71.9281 26.5H71.9172V28H71.9281V26.5ZM71.939 26.5H71.9281V28H71.939V26.5ZM71.9499 26.5H71.939V28H71.9499V26.5ZM71.9608 26.5H71.9499V28H71.9608V26.5ZM71.9717 26.5H71.9608V28H71.9717V26.5ZM71.9827 26.5H71.9717V28H71.9827V26.5ZM71.9936 26.5H71.9827V28H71.9936V26.5ZM72.0046 26.5H71.9936V28H72.0046V26.5ZM72.0156 26.5H72.0046V28H72.0156V26.5ZM72.0266 26.5H72.0156V28H72.0266V26.5ZM72.0376 26.5H72.0266V28H72.0376V26.5ZM72.0486 26.5H72.0376V28H72.0486V26.5ZM72.0596 26.5H72.0486V28H72.0596V26.5ZM72.0706 26.5H72.0596V28H72.0706V26.5ZM72.0817 26.5H72.0706V28H72.0817V26.5ZM72.0927 26.5H72.0817V28H72.0927V26.5ZM72.1038 26.5H72.0927V28H72.1038V26.5ZM72.1149 26.5H72.1038V28H72.1149V26.5ZM72.126 26.5H72.1149V28H72.126V26.5ZM72.1371 26.5H72.126V28H72.1371V26.5ZM72.1482 26.5H72.1371V28H72.1482V26.5ZM72.1593 26.5H72.1482V28H72.1593V26.5ZM72.1704 26.5H72.1593V28H72.1704V26.5ZM72.1816 26.5H72.1704V28H72.1816V26.5ZM72.1927 26.5H72.1816V28H72.1927V26.5ZM72.2039 26.5H72.1927V28H72.2039V26.5ZM72.2151 26.5H72.2039V28H72.2151V26.5ZM72.2263 26.5H72.2151V28H72.2263V26.5ZM72.2375 26.5H72.2263V28H72.2375V26.5ZM72.2487 26.5H72.2375V28H72.2487V26.5ZM72.2599 26.5H72.2487V28H72.2599V26.5ZM72.2712 26.5H72.2599V28H72.2712V26.5ZM72.2824 26.5H72.2712V28H72.2824V26.5ZM72.2937 26.5H72.2824V28H72.2937V26.5ZM72.3049 26.5H72.2937V28H72.3049V26.5ZM72.3162 26.5H72.3049V28H72.3162V26.5ZM72.3275 26.5H72.3162V28H72.3275V26.5ZM72.3388 26.5H72.3275V28H72.3388V26.5ZM72.3501 26.5H72.3388V28H72.3501V26.5ZM72.3615 26.5H72.3501V28H72.3615V26.5ZM72.3728 26.5H72.3615V28H72.3728V26.5ZM72.3842 26.5H72.3728V28H72.3842V26.5ZM72.3955 26.5H72.3842V28H72.3955V26.5ZM72.4069 26.5H72.3955V28H72.4069V26.5ZM72.4183 26.5H72.4069V28H72.4183V26.5ZM72.4297 26.5H72.4183V28H72.4297V26.5ZM72.4411 26.5H72.4297V28H72.4411V26.5ZM72.4525 26.5H72.4411V28H72.4525V26.5ZM72.4639 26.5H72.4525V28H72.4639V26.5ZM72.4754 26.5H72.4639V28H72.4754V26.5ZM72.4868 26.5H72.4754V28H72.4868V26.5ZM72.4983 26.5H72.4868V28H72.4983V26.5ZM72.5098 26.5H72.4983V28H72.5098V26.5ZM72.5213 26.5H72.5098V28H72.5213V26.5ZM72.5328 26.5H72.5213V28H72.5328V26.5ZM72.5443 26.5H72.5328V28H72.5443V26.5ZM72.5558 26.5H72.5443V28H72.5558V26.5ZM72.5673 26.5H72.5558V28H72.5673V26.5ZM72.5789 26.5H72.5673V28H72.5789V26.5ZM72.5904 26.5H72.5789V28H72.5904V26.5ZM72.602 26.5H72.5904V28H72.602V26.5ZM72.6136 26.5H72.602V28H72.6136V26.5ZM72.6252 26.5H72.6136V28H72.6252V26.5ZM72.6368 26.5H72.6252V28H72.6368V26.5ZM72.6484 26.5H72.6368V28H72.6484V26.5ZM72.66 26.5H72.6484V28H72.66V26.5ZM72.6717 26.5H72.66V28H72.6717V26.5ZM72.6833 26.5H72.6717V28H72.6833V26.5ZM72.695 26.5H72.6833V28H72.695V26.5ZM72.7066 26.5H72.695V28H72.7066V26.5ZM72.7183 26.5H72.7066V28H72.7183V26.5ZM72.73 26.5H72.7183V28H72.73V26.5ZM72.7417 26.5H72.73V28H72.7417V26.5ZM72.7534 26.5H72.7417V28H72.7534V26.5ZM72.7652 26.5H72.7534V28H72.7652V26.5ZM72.7769 26.5H72.7652V28H72.7769V26.5ZM72.7887 26.5H72.7769V28H72.7887V26.5ZM72.8004 26.5H72.7887V28H72.8004V26.5ZM72.8122 26.5H72.8004V28H72.8122V26.5ZM72.824 26.5H72.8122V28H72.824V26.5ZM72.8358 26.5H72.824V28H72.8358V26.5ZM72.8476 26.5H72.8358V28H72.8476V26.5ZM72.8594 26.5H72.8476V28H72.8594V26.5ZM72.8712 26.5H72.8594V28H72.8712V26.5ZM72.8831 26.5H72.8712V28H72.8831V26.5ZM72.8949 26.5H72.8831V28H72.8949V26.5ZM72.9068 26.5H72.8949V28H72.9068V26.5ZM72.9187 26.5H72.9068V28H72.9187V26.5ZM72.9306 26.5H72.9187V28H72.9306V26.5ZM72.9425 26.5H72.9306V28H72.9425V26.5ZM72.9544 26.5H72.9425V28H72.9544V26.5ZM72.9663 26.5H72.9544V28H72.9663V26.5ZM72.9782 26.5H72.9663V28H72.9782V26.5ZM72.9902 26.5H72.9782V28H72.9902V26.5ZM73.0021 26.5H72.9902V28H73.0021V26.5ZM73.0141 26.5H73.0021V28H73.0141V26.5ZM73.0261 26.5H73.0141V28H73.0261V26.5ZM73.0381 26.5H73.0261V28H73.0381V26.5ZM73.0501 26.5H73.0381V28H73.0501V26.5ZM73.0621 26.5H73.0501V28H73.0621V26.5ZM73.0741 26.5H73.0621V28H73.0741V26.5ZM73.0861 26.5H73.0741V28H73.0861V26.5ZM73.0982 26.5H73.0861V28H73.0982V26.5ZM73.1103 26.5H73.0982V28H73.1103V26.5ZM73.1223 26.5H73.1103V28H73.1223V26.5ZM73.1344 26.5H73.1223V28H73.1344V26.5ZM73.1465 26.5H73.1344V28H73.1465V26.5ZM73.1586 26.5H73.1465V28H73.1586V26.5ZM73.1707 26.5H73.1586V28H73.1707V26.5ZM73.1829 26.5H73.1707V28H73.1829V26.5ZM73.195 26.5H73.1829V28H73.195V26.5ZM73.2071 26.5H73.195V28H73.2071V26.5ZM73.2193 26.5H73.2071V28H73.2193V26.5ZM73.2315 26.5H73.2193V28H73.2315V26.5ZM73.2437 26.5H73.2315V28H73.2437V26.5ZM73.2559 26.5H73.2437V28H73.2559V26.5ZM73.2681 26.5H73.2559V28H73.2681V26.5ZM73.2803 26.5H73.2681V28H73.2803V26.5ZM73.2925 26.5H73.2803V28H73.2925V26.5ZM73.3048 26.5H73.2925V28H73.3048V26.5ZM73.317 26.5H73.3048V28H73.317V26.5ZM73.3293 26.5H73.317V28H73.3293V26.5ZM73.3416 26.5H73.3293V28H73.3416V26.5ZM73.3538 26.5H73.3416V28H73.3538V26.5ZM73.3661 26.5H73.3538V28H73.3661V26.5ZM73.3784 26.5H73.3661V28H73.3784V26.5ZM73.3908 26.5H73.3784V28H73.3908V26.5ZM73.4031 26.5H73.3908V28H73.4031V26.5ZM73.4154 26.5H73.4031V28H73.4154V26.5ZM73.4278 26.5H73.4154V28H73.4278V26.5ZM73.4402 26.5H73.4278V28H73.4402V26.5ZM73.4526 26.5H73.4402V28H73.4526V26.5ZM73.4649 26.5H73.4526V28H73.4649V26.5ZM73.4773 26.5H73.4649V28H73.4773V26.5ZM73.4898 26.5H73.4773V28H73.4898V26.5ZM73.5022 26.5H73.4898V28H73.5022V26.5ZM73.5146 26.5H73.5022V28H73.5146V26.5ZM73.5271 26.5H73.5146V28H73.5271V26.5ZM73.5395 26.5H73.5271V28H73.5395V26.5ZM73.552 26.5H73.5395V28H73.552V26.5ZM73.5645 26.5H73.552V28H73.5645V26.5ZM73.577 26.5H73.5645V28H73.577V26.5ZM73.5895 26.5H73.577V28H73.5895V26.5ZM73.602 26.5H73.5895V28H73.602V26.5ZM73.6145 26.5H73.602V28H73.6145V26.5ZM73.6271 26.5H73.6145V28H73.6271V26.5ZM73.6396 26.5H73.6271V28H73.6396V26.5ZM73.6522 26.5H73.6396V28H73.6522V26.5ZM73.6647 26.5H73.6522V28H73.6647V26.5ZM73.6773 26.5H73.6647V28H73.6773V26.5ZM73.6899 26.5H73.6773V28H73.6899V26.5ZM73.7025 26.5H73.6899V28H73.7025V26.5ZM73.7151 26.5H73.7025V28H73.7151V26.5ZM73.7278 26.5H73.7151V28H73.7278V26.5ZM73.7404 26.5H73.7278V28H73.7404V26.5ZM73.7531 26.5H73.7404V28H73.7531V26.5ZM73.7657 26.5H73.7531V28H73.7657V26.5ZM73.7784 26.5H73.7657V28H73.7784V26.5ZM73.7911 26.5H73.7784V28H73.7911V26.5ZM73.8038 26.5H73.7911V28H73.8038V26.5ZM73.8165 26.5H73.8038V28H73.8165V26.5ZM73.8292 26.5H73.8165V28H73.8292V26.5ZM73.842 26.5H73.8292V28H73.842V26.5ZM73.8547 26.5H73.842V28H73.8547V26.5ZM73.8675 26.5H73.8547V28H73.8675V26.5ZM73.8802 26.5H73.8675V28H73.8802V26.5ZM73.893 26.5H73.8802V28H73.893V26.5ZM73.9058 26.5H73.893V28H73.9058V26.5ZM73.9186 26.5H73.9058V28H73.9186V26.5ZM73.9314 26.5H73.9186V28H73.9314V26.5ZM73.9442 26.5H73.9314V28H73.9442V26.5ZM73.9571 26.5H73.9442V28H73.9571V26.5ZM73.9699 26.5H73.9571V28H73.9699V26.5ZM73.9828 26.5H73.9699V28H73.9828V26.5ZM73.9956 26.5H73.9828V28H73.9956V26.5ZM74.0085 26.5H73.9956V28H74.0085V26.5ZM74.0214 26.5H74.0085V28H74.0214V26.5ZM74.0343 26.5H74.0214V28H74.0343V26.5ZM74.0472 26.5H74.0343V28H74.0472V26.5ZM74.0602 26.5H74.0472V28H74.0602V26.5ZM74.0731 26.5H74.0602V28H74.0731V26.5ZM74.086 26.5H74.0731V28H74.086V26.5ZM74.099 26.5H74.086V28H74.099V26.5ZM74.112 26.5H74.099V28H74.112V26.5ZM74.125 26.5H74.112V28H74.125V26.5ZM74.138 26.5H74.125V28H74.138V26.5ZM74.151 26.5H74.138V28H74.151V26.5ZM74.164 26.5H74.151V28H74.164V26.5ZM74.177 26.5H74.164V28H74.177V26.5ZM74.1901 26.5H74.177V28H74.1901V26.5ZM74.2031 26.5H74.1901V28H74.2031V26.5ZM74.2162 26.5H74.2031V28H74.2162V26.5ZM74.2292 26.5H74.2162V28H74.2292V26.5ZM74.2423 26.5H74.2292V28H74.2423V26.5ZM74.2554 26.5H74.2423V28H74.2554V26.5ZM74.2685 26.5H74.2554V28H74.2685V26.5ZM74.2817 26.5H74.2685V28H74.2817V26.5ZM74.2948 26.5H74.2817V28H74.2948V26.5ZM74.3079 26.5H74.2948V28H74.3079V26.5ZM74.3211 26.5H74.3079V28H74.3211V26.5ZM74.3343 26.5H74.3211V28H74.3343V26.5ZM74.3474 26.5H74.3343V28H74.3474V26.5ZM74.3606 26.5H74.3474V28H74.3606V26.5ZM74.3738 26.5H74.3606V28H74.3738V26.5ZM74.387 26.5H74.3738V28H74.387V26.5ZM74.4003 26.5H74.387V28H74.4003V26.5ZM74.4135 26.5H74.4003V28H74.4135V26.5ZM74.4267 26.5H74.4135V28H74.4267V26.5ZM74.44 26.5H74.4267V28H74.44V26.5ZM74.4533 26.5H74.44V28H74.4533V26.5ZM74.4665 26.5H74.4533V28H74.4665V26.5ZM74.4798 26.5H74.4665V28H74.4798V26.5ZM74.4931 26.5H74.4798V28H74.4931V26.5ZM74.5065 26.5H74.4931V28H74.5065V26.5ZM74.5198 26.5H74.5065V28H74.5198V26.5ZM74.5331 26.5H74.5198V28H74.5331V26.5ZM74.5465 26.5H74.5331V28H74.5465V26.5ZM74.5598 26.5H74.5465V28H74.5598V26.5ZM74.5732 26.5H74.5598V28H74.5732V26.5ZM74.5866 26.5H74.5732V28H74.5866V26.5ZM74.6 26.5H74.5866V28H74.6V26.5ZM74.6134 26.5H74.6V28H74.6134V26.5ZM74.6268 26.5H74.6134V28H74.6268V26.5ZM74.6402 26.5H74.6268V28H74.6402V26.5ZM74.6537 26.5H74.6402V28H74.6537V26.5ZM74.6671 26.5H74.6537V28H74.6671V26.5ZM74.6806 26.5H74.6671V28H74.6806V26.5ZM74.6941 26.5H74.6806V28H74.6941V26.5ZM74.7075 26.5H74.6941V28H74.7075V26.5ZM74.721 26.5H74.7075V28H74.721V26.5ZM74.7345 26.5H74.721V28H74.7345V26.5ZM74.7481 26.5H74.7345V28H74.7481V26.5ZM74.7616 26.5H74.7481V28H74.7616V26.5ZM74.7751 26.5H74.7616V28H74.7751V26.5ZM74.7887 26.5H74.7751V28H74.7887V26.5ZM74.8023 26.5H74.7887V28H74.8023V26.5ZM74.8158 26.5H74.8023V28H74.8158V26.5ZM74.8294 26.5H74.8158V28H74.8294V26.5ZM74.843 26.5H74.8294V28H74.843V26.5ZM74.8566 26.5H74.843V28H74.8566V26.5ZM74.8703 26.5H74.8566V28H74.8703V26.5ZM74.8839 26.5H74.8703V28H74.8839V26.5ZM74.8975 26.5H74.8839V28H74.8975V26.5ZM74.9112 26.5H74.8975V28H74.9112V26.5ZM74.9249 26.5H74.9112V28H74.9249V26.5ZM74.9385 26.5H74.9249V28H74.9385V26.5ZM74.9522 26.5H74.9385V28H74.9522V26.5ZM74.9659 26.5H74.9522V28H74.9659V26.5ZM74.9797 26.5H74.9659V28H74.9797V26.5ZM74.9934 26.5H74.9797V28H74.9934V26.5ZM75.0071 26.5H74.9934V28H75.0071V26.5ZM75.0209 26.5H75.0071V28H75.0209V26.5ZM75.0346 26.5H75.0209V28H75.0346V26.5ZM75.0484 26.5H75.0346V28H75.0484V26.5ZM75.0622 26.5H75.0484V28H75.0622V26.5ZM75.076 26.5H75.0622V28H75.076V26.5ZM75.0898 26.5H75.076V28H75.0898V26.5ZM75.1036 26.5H75.0898V28H75.1036V26.5ZM75.1174 26.5H75.1036V28H75.1174V26.5ZM75.1313 26.5H75.1174V28H75.1313V26.5ZM75.1451 26.5H75.1313V28H75.1451V26.5ZM75.159 26.5H75.1451V28H75.159V26.5ZM75.1729 26.5H75.159V28H75.1729V26.5ZM75.1867 26.5H75.1729V28H75.1867V26.5ZM75.2006 26.5H75.1867V28H75.2006V26.5ZM75.2145 26.5H75.2006V28H75.2145V26.5ZM75.2285 26.5H75.2145V28H75.2285V26.5ZM75.2424 26.5H75.2285V28H75.2424V26.5ZM75.2563 26.5H75.2424V28H75.2563V26.5ZM75.2703 26.5H75.2563V28H75.2703V26.5ZM75.2843 26.5H75.2703V28H75.2843V26.5ZM75.2982 26.5H75.2843V28H75.2982V26.5ZM75.3122 26.5H75.2982V28H75.3122V26.5ZM75.3262 26.5H75.3122V28H75.3262V26.5ZM75.3402 26.5H75.3262V28H75.3402V26.5ZM75.3542 26.5H75.3402V28H75.3542V26.5ZM75.3683 26.5H75.3542V28H75.3683V26.5ZM75.3823 26.5H75.3683V28H75.3823V26.5ZM75.3964 26.5H75.3823V28H75.3964V26.5ZM75.4105 26.5H75.3964V28H75.4105V26.5ZM75.4245 26.5H75.4105V28H75.4245V26.5ZM75.4386 26.5H75.4245V28H75.4386V26.5ZM75.4527 26.5H75.4386V28H75.4527V26.5ZM75.4668 26.5H75.4527V28H75.4668V26.5ZM75.481 26.5H75.4668V28H75.481V26.5ZM75.4951 26.5H75.481V28H75.4951V26.5ZM75.5092 26.5H75.4951V28H75.5092V26.5ZM75.5234 26.5H75.5092V28H75.5234V26.5ZM75.5376 26.5H75.5234V28H75.5376V26.5ZM75.5518 26.5H75.5376V28H75.5518V26.5ZM75.566 26.5H75.5518V28H75.566V26.5ZM75.5802 26.5H75.566V28H75.5802V26.5ZM75.5944 26.5H75.5802V28H75.5944V26.5ZM75.6086 26.5H75.5944V28H75.6086V26.5ZM75.6228 26.5H75.6086V28H75.6228V26.5ZM75.6371 26.5H75.6228V28H75.6371V26.5ZM75.6514 26.5H75.6371V28H75.6514V26.5ZM75.6656 26.5H75.6514V28H75.6656V26.5ZM75.6799 26.5H75.6656V28H75.6799V26.5ZM75.6942 26.5H75.6799V28H75.6942V26.5ZM75.7085 26.5H75.6942V28H75.7085V26.5ZM75.7228 26.5H75.7085V28H75.7228V26.5ZM75.7372 26.5H75.7228V28H75.7372V26.5ZM75.7515 26.5H75.7372V28H75.7515V26.5ZM75.7659 26.5H75.7515V28H75.7659V26.5ZM75.7802 26.5H75.7659V28H75.7802V26.5ZM75.7946 26.5H75.7802V28H75.7946V26.5ZM75.809 26.5H75.7946V28H75.809V26.5ZM75.8234 26.5H75.809V28H75.8234V26.5ZM75.8378 26.5H75.8234V28H75.8378V26.5ZM75.8522 26.5H75.8378V28H75.8522V26.5ZM75.8666 26.5H75.8522V28H75.8666V26.5ZM75.8811 26.5H75.8666V28H75.8811V26.5ZM75.8955 26.5H75.8811V28H75.8955V26.5ZM75.91 26.5H75.8955V28H75.91V26.5ZM75.9245 26.5H75.91V28H75.9245V26.5ZM75.939 26.5H75.9245V28H75.939V26.5ZM75.9535 26.5H75.939V28H75.9535V26.5ZM75.968 26.5H75.9535V28H75.968V26.5ZM75.9825 26.5H75.968V28H75.9825V26.5ZM75.9971 26.5H75.9825V28H75.9971V26.5ZM76.0116 26.5H75.9971V28H76.0116V26.5ZM76.0262 26.5H76.0116V28H76.0262V26.5ZM76.0407 26.5H76.0262V28H76.0407V26.5ZM76.0553 26.5H76.0407V28H76.0553V26.5ZM76.0699 26.5H76.0553V28H76.0699V26.5ZM76.0845 26.5H76.0699V28H76.0845V26.5ZM76.0991 26.5H76.0845V28H76.0991V26.5ZM76.1138 26.5H76.0991V28H76.1138V26.5ZM76.1284 26.5H76.1138V28H76.1284V26.5ZM76.143 26.5H76.1284V28H76.143V26.5ZM76.1577 26.5H76.143V28H76.1577V26.5ZM76.1724 26.5H76.1577V28H76.1724V26.5ZM76.1871 26.5H76.1724V28H76.1871V26.5ZM76.2018 26.5H76.1871V28H76.2018V26.5ZM76.2165 26.5H76.2018V28H76.2165V26.5ZM76.2312 26.5H76.2165V28H76.2312V26.5ZM76.2459 26.5H76.2312V28H76.2459V26.5ZM76.2607 26.5H76.2459V28H76.2607V26.5ZM76.2754 26.5H76.2607V28H76.2754V26.5ZM76.2902 26.5H76.2754V28H76.2902V26.5ZM76.3049 26.5H76.2902V28H76.3049V26.5ZM76.3197 26.5H76.3049V28H76.3197V26.5ZM76.3345 26.5H76.3197V28H76.3345V26.5ZM76.3493 26.5H76.3345V28H76.3493V26.5ZM76.3642 26.5H76.3493V28H76.3642V26.5ZM76.379 26.5H76.3642V28H76.379V26.5ZM76.3938 26.5H76.379V28H76.3938V26.5ZM76.4087 26.5H76.3938V28H76.4087V26.5ZM76.4236 26.5H76.4087V28H76.4236V26.5ZM76.4384 26.5H76.4236V28H76.4384V26.5ZM76.4533 26.5H76.4384V28H76.4533V26.5ZM76.4682 26.5H76.4533V28H76.4682V26.5ZM76.4831 26.5H76.4682V28H76.4831V26.5ZM76.4981 26.5H76.4831V28H76.4981V26.5ZM76.513 26.5H76.4981V28H76.513V26.5ZM76.5279 26.5H76.513V28H76.5279V26.5ZM76.5429 26.5H76.5279V28H76.5429V26.5ZM76.5579 26.5H76.5429V28H76.5579V26.5ZM76.5729 26.5H76.5579V28H76.5729V26.5ZM76.5878 26.5H76.5729V28H76.5878V26.5ZM76.6029 26.5H76.5878V28H76.6029V26.5ZM76.6179 26.5H76.6029V28H76.6179V26.5ZM76.6329 26.5H76.6179V28H76.6329V26.5ZM76.6479 26.5H76.6329V28H76.6479V26.5ZM76.663 26.5H76.6479V28H76.663V26.5ZM76.678 26.5H76.663V28H76.678V26.5ZM76.6931 26.5H76.678V28H76.6931V26.5ZM76.7082 26.5H76.6931V28H76.7082V26.5ZM76.7233 26.5H76.7082V28H76.7233V26.5ZM76.7384 26.5H76.7233V28H76.7384V26.5ZM76.7535 26.5H76.7384V28H76.7535V26.5ZM76.7686 26.5H76.7535V28H76.7686V26.5ZM76.7838 26.5H76.7686V28H76.7838V26.5ZM76.7989 26.5H76.7838V28H76.7989V26.5ZM76.8141 26.5H76.7989V28H76.8141V26.5ZM76.8293 26.5H76.8141V28H76.8293V26.5ZM76.8445 26.5H76.8293V28H76.8445V26.5ZM76.8597 26.5H76.8445V28H76.8597V26.5ZM76.8749 26.5H76.8597V28H76.8749V26.5ZM76.8901 26.5H76.8749V28H76.8901V26.5ZM76.9053 26.5H76.8901V28H76.9053V26.5ZM76.9206 26.5H76.9053V28H76.9206V26.5ZM76.9358 26.5H76.9206V28H76.9358V26.5ZM76.9511 26.5H76.9358V28H76.9511V26.5ZM76.9664 26.5H76.9511V28H76.9664V26.5ZM76.9817 26.5H76.9664V28H76.9817V26.5ZM76.997 26.5H76.9817V28H76.997V26.5ZM77.0123 26.5H76.997V28H77.0123V26.5ZM77.0276 26.5H77.0123V28H77.0276V26.5ZM77.0429 26.5H77.0276V28H77.0429V26.5ZM77.0583 26.5H77.0429V28H77.0583V26.5ZM77.0736 26.5H77.0583V28H77.0736V26.5ZM77.089 26.5H77.0736V28H77.089V26.5ZM77.1044 26.5H77.089V28H77.1044V26.5ZM77.1198 26.5H77.1044V28H77.1198V26.5ZM77.1352 26.5H77.1198V28H77.1352V26.5ZM77.1506 26.5H77.1352V28H77.1506V26.5ZM77.166 26.5H77.1506V28H77.166V26.5ZM77.1814 26.5H77.166V28H77.1814V26.5ZM77.1969 26.5H77.1814V28H77.1969V26.5ZM77.2124 26.5H77.1969V28H77.2124V26.5ZM77.2278 26.5H77.2124V28H77.2278V26.5ZM77.2433 26.5H77.2278V28H77.2433V26.5ZM77.2588 26.5H77.2433V28H77.2588V26.5ZM77.2743 26.5H77.2588V28H77.2743V26.5ZM77.2898 26.5H77.2743V28H77.2898V26.5ZM77.3054 26.5H77.2898V28H77.3054V26.5ZM77.3209 26.5H77.3054V28H77.3209V26.5ZM77.3364 26.5H77.3209V28H77.3364V26.5ZM77.352 26.5H77.3364V28H77.352V26.5ZM77.3676 26.5H77.352V28H77.3676V26.5ZM77.3832 26.5H77.3676V28H77.3832V26.5ZM77.3988 26.5H77.3832V28H77.3988V26.5ZM77.4144 26.5H77.3988V28H77.4144V26.5ZM77.43 26.5H77.4144V28H77.43V26.5ZM77.4456 26.5H77.43V28H77.4456V26.5ZM77.4613 26.5H77.4456V28H77.4613V26.5ZM77.4769 26.5H77.4613V28H77.4769V26.5ZM77.4926 26.5H77.4769V28H77.4926V26.5ZM77.5083 26.5H77.4926V28H77.5083V26.5ZM77.524 26.5H77.5083V28H77.524V26.5ZM77.5397 26.5H77.524V28H77.5397V26.5ZM77.5554 26.5H77.5397V28H77.5554V26.5ZM77.5711 26.5H77.5554V28H77.5711V26.5ZM77.5868 26.5H77.5711V28H77.5868V26.5ZM77.6026 26.5H77.5868V28H77.6026V26.5ZM77.6183 26.5H77.6026V28H77.6183V26.5ZM77.6341 26.5H77.6183V28H77.6341V26.5ZM77.6499 26.5H77.6341V28H77.6499V26.5ZM77.6657 26.5H77.6499V28H77.6657V26.5ZM77.6815 26.5H77.6657V28H77.6815V26.5ZM77.6973 26.5H77.6815V28H77.6973V26.5ZM77.7131 26.5H77.6973V28H77.7131V26.5ZM77.7289 26.5H77.7131V28H77.7289V26.5ZM77.7448 26.5H77.7289V28H77.7448V26.5ZM77.7607 26.5H77.7448V28H77.7607V26.5ZM77.7765 26.5H77.7607V28H77.7765V26.5ZM77.7924 26.5H77.7765V28H77.7924V26.5ZM77.8083 26.5H77.7924V28H77.8083V26.5ZM77.8242 26.5H77.8083V28H77.8242V26.5ZM77.8401 26.5H77.8242V28H77.8401V26.5ZM77.856 26.5H77.8401V28H77.856V26.5ZM77.872 26.5H77.856V28H77.872V26.5ZM77.8879 26.5H77.872V28H77.8879V26.5ZM77.9039 26.5H77.8879V28H77.9039V26.5ZM77.9199 26.5H77.9039V28H77.9199V26.5ZM77.9359 26.5H77.9199V28H77.9359V26.5ZM77.9519 26.5H77.9359V28H77.9519V26.5ZM77.9679 26.5H77.9519V28H77.9679V26.5ZM77.9839 26.5H77.9679V28H77.9839V26.5ZM78.7339 28.75V27.25H77.2339V28.75H78.7339ZM77.9679 29.5H77.9839V28H77.9679V29.5ZM77.9519 29.5H77.9679V28H77.9519V29.5ZM77.9359 29.5H77.9519V28H77.9359V29.5ZM77.9199 29.5H77.9359V28H77.9199V29.5ZM77.9039 29.5H77.9199V28H77.9039V29.5ZM77.8879 29.5H77.9039V28H77.8879V29.5ZM77.872 29.5H77.8879V28H77.872V29.5ZM77.856 29.5H77.872V28H77.856V29.5ZM77.8401 29.5H77.856V28H77.8401V29.5ZM77.8242 29.5H77.8401V28H77.8242V29.5ZM77.8083 29.5H77.8242V28H77.8083V29.5ZM77.7924 29.5H77.8083V28H77.7924V29.5ZM77.7765 29.5H77.7924V28H77.7765V29.5ZM77.7607 29.5H77.7765V28H77.7607V29.5ZM77.7448 29.5H77.7607V28H77.7448V29.5ZM77.7289 29.5H77.7448V28H77.7289V29.5ZM77.7131 29.5H77.7289V28H77.7131V29.5ZM77.6973 29.5H77.7131V28H77.6973V29.5ZM77.6815 29.5H77.6973V28H77.6815V29.5ZM77.6657 29.5H77.6815V28H77.6657V29.5ZM77.6499 29.5H77.6657V28H77.6499V29.5ZM77.6341 29.5H77.6499V28H77.6341V29.5ZM77.6183 29.5H77.6341V28H77.6183V29.5ZM77.6026 29.5H77.6183V28H77.6026V29.5ZM77.5868 29.5H77.6026V28H77.5868V29.5ZM77.5711 29.5H77.5868V28H77.5711V29.5ZM77.5554 29.5H77.5711V28H77.5554V29.5ZM77.5397 29.5H77.5554V28H77.5397V29.5ZM77.524 29.5H77.5397V28H77.524V29.5ZM77.5083 29.5H77.524V28H77.5083V29.5ZM77.4926 29.5H77.5083V28H77.4926V29.5ZM77.4769 29.5H77.4926V28H77.4769V29.5ZM77.4613 29.5H77.4769V28H77.4613V29.5ZM77.4456 29.5H77.4613V28H77.4456V29.5ZM77.43 29.5H77.4456V28H77.43V29.5ZM77.4144 29.5H77.43V28H77.4144V29.5ZM77.3988 29.5H77.4144V28H77.3988V29.5ZM77.3832 29.5H77.3988V28H77.3832V29.5ZM77.3676 29.5H77.3832V28H77.3676V29.5ZM77.352 29.5H77.3676V28H77.352V29.5ZM77.3364 29.5H77.352V28H77.3364V29.5ZM77.3209 29.5H77.3364V28H77.3209V29.5ZM77.3054 29.5H77.3209V28H77.3054V29.5ZM77.2898 29.5H77.3054V28H77.2898V29.5ZM77.2743 29.5H77.2898V28H77.2743V29.5ZM77.2588 29.5H77.2743V28H77.2588V29.5ZM77.2433 29.5H77.2588V28H77.2433V29.5ZM77.2278 29.5H77.2433V28H77.2278V29.5ZM77.2124 29.5H77.2278V28H77.2124V29.5ZM77.1969 29.5H77.2124V28H77.1969V29.5ZM77.1814 29.5H77.1969V28H77.1814V29.5ZM77.166 29.5H77.1814V28H77.166V29.5ZM77.1506 29.5H77.166V28H77.1506V29.5ZM77.1352 29.5H77.1506V28H77.1352V29.5ZM77.1198 29.5H77.1352V28H77.1198V29.5ZM77.1044 29.5H77.1198V28H77.1044V29.5ZM77.089 29.5H77.1044V28H77.089V29.5ZM77.0736 29.5H77.089V28H77.0736V29.5ZM77.0583 29.5H77.0736V28H77.0583V29.5ZM77.0429 29.5H77.0583V28H77.0429V29.5ZM77.0276 29.5H77.0429V28H77.0276V29.5ZM77.0123 29.5H77.0276V28H77.0123V29.5ZM76.997 29.5H77.0123V28H76.997V29.5ZM76.9817 29.5H76.997V28H76.9817V29.5ZM76.9664 29.5H76.9817V28H76.9664V29.5ZM76.9511 29.5H76.9664V28H76.9511V29.5ZM76.9358 29.5H76.9511V28H76.9358V29.5ZM76.9206 29.5H76.9358V28H76.9206V29.5ZM76.9053 29.5H76.9206V28H76.9053V29.5ZM76.8901 29.5H76.9053V28H76.8901V29.5ZM76.8749 29.5H76.8901V28H76.8749V29.5ZM76.8597 29.5H76.8749V28H76.8597V29.5ZM76.8445 29.5H76.8597V28H76.8445V29.5ZM76.8293 29.5H76.8445V28H76.8293V29.5ZM76.8141 29.5H76.8293V28H76.8141V29.5ZM76.7989 29.5H76.8141V28H76.7989V29.5ZM76.7838 29.5H76.7989V28H76.7838V29.5ZM76.7686 29.5H76.7838V28H76.7686V29.5ZM76.7535 29.5H76.7686V28H76.7535V29.5ZM76.7384 29.5H76.7535V28H76.7384V29.5ZM76.7233 29.5H76.7384V28H76.7233V29.5ZM76.7082 29.5H76.7233V28H76.7082V29.5ZM76.6931 29.5H76.7082V28H76.6931V29.5ZM76.678 29.5H76.6931V28H76.678V29.5ZM76.663 29.5H76.678V28H76.663V29.5ZM76.6479 29.5H76.663V28H76.6479V29.5ZM76.6329 29.5H76.6479V28H76.6329V29.5ZM76.6179 29.5H76.6329V28H76.6179V29.5ZM76.6029 29.5H76.6179V28H76.6029V29.5ZM76.5878 29.5H76.6029V28H76.5878V29.5ZM76.5729 29.5H76.5878V28H76.5729V29.5ZM76.5579 29.5H76.5729V28H76.5579V29.5ZM76.5429 29.5H76.5579V28H76.5429V29.5ZM76.5279 29.5H76.5429V28H76.5279V29.5ZM76.513 29.5H76.5279V28H76.513V29.5ZM76.4981 29.5H76.513V28H76.4981V29.5ZM76.4831 29.5H76.4981V28H76.4831V29.5ZM76.4682 29.5H76.4831V28H76.4682V29.5ZM76.4533 29.5H76.4682V28H76.4533V29.5ZM76.4384 29.5H76.4533V28H76.4384V29.5ZM76.4236 29.5H76.4384V28H76.4236V29.5ZM76.4087 29.5H76.4236V28H76.4087V29.5ZM76.3938 29.5H76.4087V28H76.3938V29.5ZM76.379 29.5H76.3938V28H76.379V29.5ZM76.3642 29.5H76.379V28H76.3642V29.5ZM76.3493 29.5H76.3642V28H76.3493V29.5ZM76.3345 29.5H76.3493V28H76.3345V29.5ZM76.3197 29.5H76.3345V28H76.3197V29.5ZM76.3049 29.5H76.3197V28H76.3049V29.5ZM76.2902 29.5H76.3049V28H76.2902V29.5ZM76.2754 29.5H76.2902V28H76.2754V29.5ZM76.2607 29.5H76.2754V28H76.2607V29.5ZM76.2459 29.5H76.2607V28H76.2459V29.5ZM76.2312 29.5H76.2459V28H76.2312V29.5ZM76.2165 29.5H76.2312V28H76.2165V29.5ZM76.2018 29.5H76.2165V28H76.2018V29.5ZM76.1871 29.5H76.2018V28H76.1871V29.5ZM76.1724 29.5H76.1871V28H76.1724V29.5ZM76.1577 29.5H76.1724V28H76.1577V29.5ZM76.143 29.5H76.1577V28H76.143V29.5ZM76.1284 29.5H76.143V28H76.1284V29.5ZM76.1138 29.5H76.1284V28H76.1138V29.5ZM76.0991 29.5H76.1138V28H76.0991V29.5ZM76.0845 29.5H76.0991V28H76.0845V29.5ZM76.0699 29.5H76.0845V28H76.0699V29.5ZM76.0553 29.5H76.0699V28H76.0553V29.5ZM76.0407 29.5H76.0553V28H76.0407V29.5ZM76.0262 29.5H76.0407V28H76.0262V29.5ZM76.0116 29.5H76.0262V28H76.0116V29.5ZM75.9971 29.5H76.0116V28H75.9971V29.5ZM75.9825 29.5H75.9971V28H75.9825V29.5ZM75.968 29.5H75.9825V28H75.968V29.5ZM75.9535 29.5H75.968V28H75.9535V29.5ZM75.939 29.5H75.9535V28H75.939V29.5ZM75.9245 29.5H75.939V28H75.9245V29.5ZM75.91 29.5H75.9245V28H75.91V29.5ZM75.8955 29.5H75.91V28H75.8955V29.5ZM75.8811 29.5H75.8955V28H75.8811V29.5ZM75.8666 29.5H75.8811V28H75.8666V29.5ZM75.8522 29.5H75.8666V28H75.8522V29.5ZM75.8378 29.5H75.8522V28H75.8378V29.5ZM75.8234 29.5H75.8378V28H75.8234V29.5ZM75.809 29.5H75.8234V28H75.809V29.5ZM75.7946 29.5H75.809V28H75.7946V29.5ZM75.7802 29.5H75.7946V28H75.7802V29.5ZM75.7659 29.5H75.7802V28H75.7659V29.5ZM75.7515 29.5H75.7659V28H75.7515V29.5ZM75.7372 29.5H75.7515V28H75.7372V29.5ZM75.7228 29.5H75.7372V28H75.7228V29.5ZM75.7085 29.5H75.7228V28H75.7085V29.5ZM75.6942 29.5H75.7085V28H75.6942V29.5ZM75.6799 29.5H75.6942V28H75.6799V29.5ZM75.6656 29.5H75.6799V28H75.6656V29.5ZM75.6514 29.5H75.6656V28H75.6514V29.5ZM75.6371 29.5H75.6514V28H75.6371V29.5ZM75.6228 29.5H75.6371V28H75.6228V29.5ZM75.6086 29.5H75.6228V28H75.6086V29.5ZM75.5944 29.5H75.6086V28H75.5944V29.5ZM75.5802 29.5H75.5944V28H75.5802V29.5ZM75.566 29.5H75.5802V28H75.566V29.5ZM75.5518 29.5H75.566V28H75.5518V29.5ZM75.5376 29.5H75.5518V28H75.5376V29.5ZM75.5234 29.5H75.5376V28H75.5234V29.5ZM75.5092 29.5H75.5234V28H75.5092V29.5ZM75.4951 29.5H75.5092V28H75.4951V29.5ZM75.481 29.5H75.4951V28H75.481V29.5ZM75.4668 29.5H75.481V28H75.4668V29.5ZM75.4527 29.5H75.4668V28H75.4527V29.5ZM75.4386 29.5H75.4527V28H75.4386V29.5ZM75.4245 29.5H75.4386V28H75.4245V29.5ZM75.4105 29.5H75.4245V28H75.4105V29.5ZM75.3964 29.5H75.4105V28H75.3964V29.5ZM75.3823 29.5H75.3964V28H75.3823V29.5ZM75.3683 29.5H75.3823V28H75.3683V29.5ZM75.3542 29.5H75.3683V28H75.3542V29.5ZM75.3402 29.5H75.3542V28H75.3402V29.5ZM75.3262 29.5H75.3402V28H75.3262V29.5ZM75.3122 29.5H75.3262V28H75.3122V29.5ZM75.2982 29.5H75.3122V28H75.2982V29.5ZM75.2843 29.5H75.2982V28H75.2843V29.5ZM75.2703 29.5H75.2843V28H75.2703V29.5ZM75.2563 29.5H75.2703V28H75.2563V29.5ZM75.2424 29.5H75.2563V28H75.2424V29.5ZM75.2285 29.5H75.2424V28H75.2285V29.5ZM75.2145 29.5H75.2285V28H75.2145V29.5ZM75.2006 29.5H75.2145V28H75.2006V29.5ZM75.1867 29.5H75.2006V28H75.1867V29.5ZM75.1729 29.5H75.1867V28H75.1729V29.5ZM75.159 29.5H75.1729V28H75.159V29.5ZM75.1451 29.5H75.159V28H75.1451V29.5ZM75.1313 29.5H75.1451V28H75.1313V29.5ZM75.1174 29.5H75.1313V28H75.1174V29.5ZM75.1036 29.5H75.1174V28H75.1036V29.5ZM75.0898 29.5H75.1036V28H75.0898V29.5ZM75.076 29.5H75.0898V28H75.076V29.5ZM75.0622 29.5H75.076V28H75.0622V29.5ZM75.0484 29.5H75.0622V28H75.0484V29.5ZM75.0346 29.5H75.0484V28H75.0346V29.5ZM75.0209 29.5H75.0346V28H75.0209V29.5ZM75.0071 29.5H75.0209V28H75.0071V29.5ZM74.9934 29.5H75.0071V28H74.9934V29.5ZM74.9797 29.5H74.9934V28H74.9797V29.5ZM74.9659 29.5H74.9797V28H74.9659V29.5ZM74.9522 29.5H74.9659V28H74.9522V29.5ZM74.9385 29.5H74.9522V28H74.9385V29.5ZM74.9249 29.5H74.9385V28H74.9249V29.5ZM74.9112 29.5H74.9249V28H74.9112V29.5ZM74.8975 29.5H74.9112V28H74.8975V29.5ZM74.8839 29.5H74.8975V28H74.8839V29.5ZM74.8703 29.5H74.8839V28H74.8703V29.5ZM74.8566 29.5H74.8703V28H74.8566V29.5ZM74.843 29.5H74.8566V28H74.843V29.5ZM74.8294 29.5H74.843V28H74.8294V29.5ZM74.8158 29.5H74.8294V28H74.8158V29.5ZM74.8023 29.5H74.8158V28H74.8023V29.5ZM74.7887 29.5H74.8023V28H74.7887V29.5ZM74.7751 29.5H74.7887V28H74.7751V29.5ZM74.7616 29.5H74.7751V28H74.7616V29.5ZM74.7481 29.5H74.7616V28H74.7481V29.5ZM74.7345 29.5H74.7481V28H74.7345V29.5ZM74.721 29.5H74.7345V28H74.721V29.5ZM74.7075 29.5H74.721V28H74.7075V29.5ZM74.6941 29.5H74.7075V28H74.6941V29.5ZM74.6806 29.5H74.6941V28H74.6806V29.5ZM74.6671 29.5H74.6806V28H74.6671V29.5ZM74.6537 29.5H74.6671V28H74.6537V29.5ZM74.6402 29.5H74.6537V28H74.6402V29.5ZM74.6268 29.5H74.6402V28H74.6268V29.5ZM74.6134 29.5H74.6268V28H74.6134V29.5ZM74.6 29.5H74.6134V28H74.6V29.5ZM74.5866 29.5H74.6V28H74.5866V29.5ZM74.5732 29.5H74.5866V28H74.5732V29.5ZM74.5598 29.5H74.5732V28H74.5598V29.5ZM74.5465 29.5H74.5598V28H74.5465V29.5ZM74.5331 29.5H74.5465V28H74.5331V29.5ZM74.5198 29.5H74.5331V28H74.5198V29.5ZM74.5065 29.5H74.5198V28H74.5065V29.5ZM74.4931 29.5H74.5065V28H74.4931V29.5ZM74.4798 29.5H74.4931V28H74.4798V29.5ZM74.4665 29.5H74.4798V28H74.4665V29.5ZM74.4533 29.5H74.4665V28H74.4533V29.5ZM74.44 29.5H74.4533V28H74.44V29.5ZM74.4267 29.5H74.44V28H74.4267V29.5ZM74.4135 29.5H74.4267V28H74.4135V29.5ZM74.4003 29.5H74.4135V28H74.4003V29.5ZM74.387 29.5H74.4003V28H74.387V29.5ZM74.3738 29.5H74.387V28H74.3738V29.5ZM74.3606 29.5H74.3738V28H74.3606V29.5ZM74.3474 29.5H74.3606V28H74.3474V29.5ZM74.3343 29.5H74.3474V28H74.3343V29.5ZM74.3211 29.5H74.3343V28H74.3211V29.5ZM74.3079 29.5H74.3211V28H74.3079V29.5ZM74.2948 29.5H74.3079V28H74.2948V29.5ZM74.2817 29.5H74.2948V28H74.2817V29.5ZM74.2685 29.5H74.2817V28H74.2685V29.5ZM74.2554 29.5H74.2685V28H74.2554V29.5ZM74.2423 29.5H74.2554V28H74.2423V29.5ZM74.2292 29.5H74.2423V28H74.2292V29.5ZM74.2162 29.5H74.2292V28H74.2162V29.5ZM74.2031 29.5H74.2162V28H74.2031V29.5ZM74.1901 29.5H74.2031V28H74.1901V29.5ZM74.177 29.5H74.1901V28H74.177V29.5ZM74.164 29.5H74.177V28H74.164V29.5ZM74.151 29.5H74.164V28H74.151V29.5ZM74.138 29.5H74.151V28H74.138V29.5ZM74.125 29.5H74.138V28H74.125V29.5ZM74.112 29.5H74.125V28H74.112V29.5ZM74.099 29.5H74.112V28H74.099V29.5ZM74.086 29.5H74.099V28H74.086V29.5ZM74.0731 29.5H74.086V28H74.0731V29.5ZM74.0602 29.5H74.0731V28H74.0602V29.5ZM74.0472 29.5H74.0602V28H74.0472V29.5ZM74.0343 29.5H74.0472V28H74.0343V29.5ZM74.0214 29.5H74.0343V28H74.0214V29.5ZM74.0085 29.5H74.0214V28H74.0085V29.5ZM73.9956 29.5H74.0085V28H73.9956V29.5ZM73.9828 29.5H73.9956V28H73.9828V29.5ZM73.9699 29.5H73.9828V28H73.9699V29.5ZM73.9571 29.5H73.9699V28H73.9571V29.5ZM73.9442 29.5H73.9571V28H73.9442V29.5ZM73.9314 29.5H73.9442V28H73.9314V29.5ZM73.9186 29.5H73.9314V28H73.9186V29.5ZM73.9058 29.5H73.9186V28H73.9058V29.5ZM73.893 29.5H73.9058V28H73.893V29.5ZM73.8802 29.5H73.893V28H73.8802V29.5ZM73.8675 29.5H73.8802V28H73.8675V29.5ZM73.8547 29.5H73.8675V28H73.8547V29.5ZM73.842 29.5H73.8547V28H73.842V29.5ZM73.8292 29.5H73.842V28H73.8292V29.5ZM73.8165 29.5H73.8292V28H73.8165V29.5ZM73.8038 29.5H73.8165V28H73.8038V29.5ZM73.7911 29.5H73.8038V28H73.7911V29.5ZM73.7784 29.5H73.7911V28H73.7784V29.5ZM73.7657 29.5H73.7784V28H73.7657V29.5ZM73.7531 29.5H73.7657V28H73.7531V29.5ZM73.7404 29.5H73.7531V28H73.7404V29.5ZM73.7278 29.5H73.7404V28H73.7278V29.5ZM73.7151 29.5H73.7278V28H73.7151V29.5ZM73.7025 29.5H73.7151V28H73.7025V29.5ZM73.6899 29.5H73.7025V28H73.6899V29.5ZM73.6773 29.5H73.6899V28H73.6773V29.5ZM73.6647 29.5H73.6773V28H73.6647V29.5ZM73.6522 29.5H73.6647V28H73.6522V29.5ZM73.6396 29.5H73.6522V28H73.6396V29.5ZM73.6271 29.5H73.6396V28H73.6271V29.5ZM73.6145 29.5H73.6271V28H73.6145V29.5ZM73.602 29.5H73.6145V28H73.602V29.5ZM73.5895 29.5H73.602V28H73.5895V29.5ZM73.577 29.5H73.5895V28H73.577V29.5ZM73.5645 29.5H73.577V28H73.5645V29.5ZM73.552 29.5H73.5645V28H73.552V29.5ZM73.5395 29.5H73.552V28H73.5395V29.5ZM73.5271 29.5H73.5395V28H73.5271V29.5ZM73.5146 29.5H73.5271V28H73.5146V29.5ZM73.5022 29.5H73.5146V28H73.5022V29.5ZM73.4898 29.5H73.5022V28H73.4898V29.5ZM73.4773 29.5H73.4898V28H73.4773V29.5ZM73.4649 29.5H73.4773V28H73.4649V29.5ZM73.4526 29.5H73.4649V28H73.4526V29.5ZM73.4402 29.5H73.4526V28H73.4402V29.5ZM73.4278 29.5H73.4402V28H73.4278V29.5ZM73.4154 29.5H73.4278V28H73.4154V29.5ZM73.4031 29.5H73.4154V28H73.4031V29.5ZM73.3908 29.5H73.4031V28H73.3908V29.5ZM73.3784 29.5H73.3908V28H73.3784V29.5ZM73.3661 29.5H73.3784V28H73.3661V29.5ZM73.3538 29.5H73.3661V28H73.3538V29.5ZM73.3416 29.5H73.3538V28H73.3416V29.5ZM73.3293 29.5H73.3416V28H73.3293V29.5ZM73.317 29.5H73.3293V28H73.317V29.5ZM73.3048 29.5H73.317V28H73.3048V29.5ZM73.2925 29.5H73.3048V28H73.2925V29.5ZM73.2803 29.5H73.2925V28H73.2803V29.5ZM73.2681 29.5H73.2803V28H73.2681V29.5ZM73.2559 29.5H73.2681V28H73.2559V29.5ZM73.2437 29.5H73.2559V28H73.2437V29.5ZM73.2315 29.5H73.2437V28H73.2315V29.5ZM73.2193 29.5H73.2315V28H73.2193V29.5ZM73.2071 29.5H73.2193V28H73.2071V29.5ZM73.195 29.5H73.2071V28H73.195V29.5ZM73.1829 29.5H73.195V28H73.1829V29.5ZM73.1707 29.5H73.1829V28H73.1707V29.5ZM73.1586 29.5H73.1707V28H73.1586V29.5ZM73.1465 29.5H73.1586V28H73.1465V29.5ZM73.1344 29.5H73.1465V28H73.1344V29.5ZM73.1223 29.5H73.1344V28H73.1223V29.5ZM73.1103 29.5H73.1223V28H73.1103V29.5ZM73.0982 29.5H73.1103V28H73.0982V29.5ZM73.0861 29.5H73.0982V28H73.0861V29.5ZM73.0741 29.5H73.0861V28H73.0741V29.5ZM73.0621 29.5H73.0741V28H73.0621V29.5ZM73.0501 29.5H73.0621V28H73.0501V29.5ZM73.0381 29.5H73.0501V28H73.0381V29.5ZM73.0261 29.5H73.0381V28H73.0261V29.5ZM73.0141 29.5H73.0261V28H73.0141V29.5ZM73.0021 29.5H73.0141V28H73.0021V29.5ZM72.9902 29.5H73.0021V28H72.9902V29.5ZM72.9782 29.5H72.9902V28H72.9782V29.5ZM72.9663 29.5H72.9782V28H72.9663V29.5ZM72.9544 29.5H72.9663V28H72.9544V29.5ZM72.9425 29.5H72.9544V28H72.9425V29.5ZM72.9306 29.5H72.9425V28H72.9306V29.5ZM72.9187 29.5H72.9306V28H72.9187V29.5ZM72.9068 29.5H72.9187V28H72.9068V29.5ZM72.8949 29.5H72.9068V28H72.8949V29.5ZM72.8831 29.5H72.8949V28H72.8831V29.5ZM72.8712 29.5H72.8831V28H72.8712V29.5ZM72.8594 29.5H72.8712V28H72.8594V29.5ZM72.8476 29.5H72.8594V28H72.8476V29.5ZM72.8358 29.5H72.8476V28H72.8358V29.5ZM72.824 29.5H72.8358V28H72.824V29.5ZM72.8122 29.5H72.824V28H72.8122V29.5ZM72.8004 29.5H72.8122V28H72.8004V29.5ZM72.7887 29.5H72.8004V28H72.7887V29.5ZM72.7769 29.5H72.7887V28H72.7769V29.5ZM72.7652 29.5H72.7769V28H72.7652V29.5ZM72.7534 29.5H72.7652V28H72.7534V29.5ZM72.7417 29.5H72.7534V28H72.7417V29.5ZM72.73 29.5H72.7417V28H72.73V29.5ZM72.7183 29.5H72.73V28H72.7183V29.5ZM72.7066 29.5H72.7183V28H72.7066V29.5ZM72.695 29.5H72.7066V28H72.695V29.5ZM72.6833 29.5H72.695V28H72.6833V29.5ZM72.6717 29.5H72.6833V28H72.6717V29.5ZM72.66 29.5H72.6717V28H72.66V29.5ZM72.6484 29.5H72.66V28H72.6484V29.5ZM72.6368 29.5H72.6484V28H72.6368V29.5ZM72.6252 29.5H72.6368V28H72.6252V29.5ZM72.6136 29.5H72.6252V28H72.6136V29.5ZM72.602 29.5H72.6136V28H72.602V29.5ZM72.5904 29.5H72.602V28H72.5904V29.5ZM72.5789 29.5H72.5904V28H72.5789V29.5ZM72.5673 29.5H72.5789V28H72.5673V29.5ZM72.5558 29.5H72.5673V28H72.5558V29.5ZM72.5443 29.5H72.5558V28H72.5443V29.5ZM72.5328 29.5H72.5443V28H72.5328V29.5ZM72.5213 29.5H72.5328V28H72.5213V29.5ZM72.5098 29.5H72.5213V28H72.5098V29.5ZM72.4983 29.5H72.5098V28H72.4983V29.5ZM72.4868 29.5H72.4983V28H72.4868V29.5ZM72.4754 29.5H72.4868V28H72.4754V29.5ZM72.4639 29.5H72.4754V28H72.4639V29.5ZM72.4525 29.5H72.4639V28H72.4525V29.5ZM72.4411 29.5H72.4525V28H72.4411V29.5ZM72.4297 29.5H72.4411V28H72.4297V29.5ZM72.4183 29.5H72.4297V28H72.4183V29.5ZM72.4069 29.5H72.4183V28H72.4069V29.5ZM72.3955 29.5H72.4069V28H72.3955V29.5ZM72.3842 29.5H72.3955V28H72.3842V29.5ZM72.3728 29.5H72.3842V28H72.3728V29.5ZM72.3615 29.5H72.3728V28H72.3615V29.5ZM72.3501 29.5H72.3615V28H72.3501V29.5ZM72.3388 29.5H72.3501V28H72.3388V29.5ZM72.3275 29.5H72.3388V28H72.3275V29.5ZM72.3162 29.5H72.3275V28H72.3162V29.5ZM72.3049 29.5H72.3162V28H72.3049V29.5ZM72.2937 29.5H72.3049V28H72.2937V29.5ZM72.2824 29.5H72.2937V28H72.2824V29.5ZM72.2712 29.5H72.2824V28H72.2712V29.5ZM72.2599 29.5H72.2712V28H72.2599V29.5ZM72.2487 29.5H72.2599V28H72.2487V29.5ZM72.2375 29.5H72.2487V28H72.2375V29.5ZM72.2263 29.5H72.2375V28H72.2263V29.5ZM72.2151 29.5H72.2263V28H72.2151V29.5ZM72.2039 29.5H72.2151V28H72.2039V29.5ZM72.1927 29.5H72.2039V28H72.1927V29.5ZM72.1816 29.5H72.1927V28H72.1816V29.5ZM72.1704 29.5H72.1816V28H72.1704V29.5ZM72.1593 29.5H72.1704V28H72.1593V29.5ZM72.1482 29.5H72.1593V28H72.1482V29.5ZM72.1371 29.5H72.1482V28H72.1371V29.5ZM72.126 29.5H72.1371V28H72.126V29.5ZM72.1149 29.5H72.126V28H72.1149V29.5ZM72.1038 29.5H72.1149V28H72.1038V29.5ZM72.0927 29.5H72.1038V28H72.0927V29.5ZM72.0817 29.5H72.0927V28H72.0817V29.5ZM72.0706 29.5H72.0817V28H72.0706V29.5ZM72.0596 29.5H72.0706V28H72.0596V29.5ZM72.0486 29.5H72.0596V28H72.0486V29.5ZM72.0376 29.5H72.0486V28H72.0376V29.5ZM72.0266 29.5H72.0376V28H72.0266V29.5ZM72.0156 29.5H72.0266V28H72.0156V29.5ZM72.0046 29.5H72.0156V28H72.0046V29.5ZM71.9936 29.5H72.0046V28H71.9936V29.5ZM71.9827 29.5H71.9936V28H71.9827V29.5ZM71.9717 29.5H71.9827V28H71.9717V29.5ZM71.9608 29.5H71.9717V28H71.9608V29.5ZM71.9499 29.5H71.9608V28H71.9499V29.5ZM71.939 29.5H71.9499V28H71.939V29.5ZM71.9281 29.5H71.939V28H71.9281V29.5ZM71.9172 29.5H71.9281V28H71.9172V29.5ZM71.9063 29.5H71.9172V28H71.9063V29.5ZM71.8955 29.5H71.9063V28H71.8955V29.5ZM71.8846 29.5H71.8955V28H71.8846V29.5ZM71.8738 29.5H71.8846V28H71.8738V29.5ZM71.863 29.5H71.8738V28H71.863V29.5ZM71.8521 29.5H71.863V28H71.8521V29.5ZM71.8413 29.5H71.8521V28H71.8413V29.5ZM71.8305 29.5H71.8413V28H71.8305V29.5ZM71.8198 29.5H71.8305V28H71.8198V29.5ZM71.809 29.5H71.8198V28H71.809V29.5ZM71.7982 29.5H71.809V28H71.7982V29.5ZM71.7875 29.5H71.7982V28H71.7875V29.5ZM71.7768 29.5H71.7875V28H71.7768V29.5ZM71.766 29.5H71.7768V28H71.766V29.5ZM71.7553 29.5H71.766V28H71.7553V29.5ZM71.7446 29.5H71.7553V28H71.7446V29.5ZM71.7339 29.5H71.7446V28H71.7339V29.5ZM71.7233 29.5H71.7339V28H71.7233V29.5ZM71.7126 29.5H71.7233V28H71.7126V29.5ZM71.7019 29.5H71.7126V28H71.7019V29.5ZM71.6913 29.5H71.7019V28H71.6913V29.5ZM71.6807 29.5H71.6913V28H71.6807V29.5ZM71.67 29.5H71.6807V28H71.67V29.5ZM71.6594 29.5H71.67V28H71.6594V29.5ZM71.6488 29.5H71.6594V28H71.6488V29.5ZM71.6382 29.5H71.6488V28H71.6382V29.5ZM71.6277 29.5H71.6382V28H71.6277V29.5ZM71.6171 29.5H71.6277V28H71.6171V29.5ZM71.6065 29.5H71.6171V28H71.6065V29.5ZM71.596 29.5H71.6065V28H71.596V29.5ZM71.5855 29.5H71.596V28H71.5855V29.5ZM71.575 29.5H71.5855V28H71.575V29.5ZM71.5644 29.5H71.575V28H71.5644V29.5ZM71.5539 29.5H71.5644V28H71.5539V29.5ZM71.5435 29.5H71.5539V28H71.5435V29.5ZM71.533 29.5H71.5435V28H71.533V29.5ZM71.5225 29.5H71.533V28H71.5225V29.5ZM71.5121 29.5H71.5225V28H71.5121V29.5ZM71.5016 29.5H71.5121V28H71.5016V29.5ZM71.4912 29.5H71.5016V28H71.4912V29.5ZM71.4808 29.5H71.4912V28H71.4808V29.5ZM71.4704 29.5H71.4808V28H71.4704V29.5ZM71.46 29.5H71.4704V28H71.46V29.5ZM71.4496 29.5H71.46V28H71.4496V29.5ZM71.4392 29.5H71.4496V28H71.4392V29.5ZM71.4289 29.5H71.4392V28H71.4289V29.5ZM71.4185 29.5H71.4289V28H71.4185V29.5ZM71.4082 29.5H71.4185V28H71.4082V29.5ZM71.3979 29.5H71.4082V28H71.3979V29.5ZM71.3876 29.5H71.3979V28H71.3876V29.5ZM71.3773 29.5H71.3876V28H71.3773V29.5ZM71.367 29.5H71.3773V28H71.367V29.5ZM71.3567 29.5H71.367V28H71.3567V29.5ZM71.3464 29.5H71.3567V28H71.3464V29.5ZM71.3362 29.5H71.3464V28H71.3362V29.5ZM71.3259 29.5H71.3362V28H71.3259V29.5ZM71.3157 29.5H71.3259V28H71.3157V29.5ZM71.3055 29.5H71.3157V28H71.3055V29.5ZM71.2953 29.5H71.3055V28H71.2953V29.5ZM71.2851 29.5H71.2953V28H71.2851V29.5Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M97.991 35.4002C98.078 35.5281 98.1738 35.6518 98.2784 35.7705L98.442 35.9446L97.991 36.7235L97.9913 46.0363C97.9913 47.5313 99.16 48.7535 100.634 48.8388L100.799 48.8436L110.11 48.8428L111.243 48.8388L111.243 69.4396C111.243 71.2214 109.088 72.1137 107.828 70.8538L75.7884 38.8138C74.5284 37.5538 75.4208 35.3995 77.2027 35.3996L97.991 35.4002Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M114.077 48.8438H101.991C99.7821 48.8438 97.9912 47.0529 97.9912 44.8438V32.7568", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M68.9824 66.6241H96.12", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M68.9824 75.9816H96.12", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M68.9824 85.339H96.12", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" })); const DocumentCheck = ({ width = 152, height = 169 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 169", version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Symbols", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Group", transform: "translate(2.000000, 2.000000)", stroke: "#3B3552", strokeWidth: "3" }, /*#__PURE__*/React__namespace.default.createElement("path", { d: "M74,126.060611 L74,158.723567 C74,162.037275 71.3137085,164.723567 68,164.723567 C66.9452118,164.723567 65.9090627,164.445504 64.995996,163.917406 L6.67495026,130.185774 L6.67495026,130.185774 C2.54398439,127.796512 1.42108547e-14,123.386278 1.42108547e-14,118.614125 L1.42108547e-14,48.436129 C1.42108547e-14,43.6639756 2.54398439,39.2537412 6.67495026,36.8644799 L67.3072083,1.79609278 C71.4477337,-0.598697595 76.5522663,-0.598697595 80.6927917,1.79609278 L141.32505,36.8644799 C145.456016,39.2537412 148,43.6639756 148,48.436129 L148,118.614125 C148,123.386278 145.456016,127.796512 141.32505,130.185774 L92.2812226,158.551663", id: "Path-Copy-5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M105,70.0296545 C105,87.5771932 105,100.077741 105,107.531297 L105,120.263384 C105,121.093743 105,122.339282 105,124 C105,125.104569 104.104569,126 103,126 L73.9676297,126", id: "Path", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M54,42.2162102 L54,54 C54,55.1045695 53.1045695,56 52,56 L40.1644979,56", id: "Path-Copy-9", fill: "#3040D6", fillOpacity: "0.2" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M58.7460443,126 L42,126 C40.8954305,126 40,125.104569 40,124 L40,55.6898628 L53.6898628,42 C63.9564524,42 71.6563946,42 76.7896894,42", id: "Path", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "58.5", y1: "89.5", x2: "86.8715634", y2: "89.5", id: "Line-4", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "58.5", y1: "104.5", x2: "86.8715634", y2: "104.5", id: "Line-4-Copy", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("circle", { id: "Oval", fill: "#3040D6", fillOpacity: "0.2", cx: "92", cy: "55", r: "20" }), /*#__PURE__*/React__namespace.default.createElement("polyline", { id: "Path", strokeLinecap: "round", strokeLinejoin: "round", points: "103.727922 49 91 61.7279221 83.8715634 54.5994855" })))); const DocumentSearch = ({ width = 152, height = 169 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 169", version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Symbols", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Group", transform: "translate(2.000000, 2.000000)", stroke: "#3B3552", strokeWidth: "3" }, /*#__PURE__*/React__namespace.default.createElement("path", { d: "M74,126.060611 L74,158.723567 C74,162.037275 71.3137085,164.723567 68,164.723567 C66.9452118,164.723567 65.9090627,164.445504 64.995996,163.917406 L6.67495026,130.185774 L6.67495026,130.185774 C2.54398439,127.796512 1.42108547e-14,123.386278 1.42108547e-14,118.614125 L1.42108547e-14,48.436129 C1.42108547e-14,43.6639756 2.54398439,39.2537412 6.67495026,36.8644799 L67.3072083,1.79609278 C71.4477337,-0.598697595 76.5522663,-0.598697595 80.6927917,1.79609278 L141.32505,36.8644799 C145.456016,39.2537412 148,43.6639756 148,48.436129 L148,118.614125 C148,123.386278 145.456016,127.796512 141.32505,130.185774 L92.2812226,158.551663", id: "Path-Copy-4", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M106,120.263384 C106,121.093743 106,122.339282 106,124 C106,125.104569 105.104569,126 104,126 L74,126", id: "Path", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M55,42.2162102 L55,54 C55,55.1045695 54.1045695,56 53,56 L41.1644979,56", id: "Path", fill: "#3040D6", fillOpacity: "0.2" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M56.5220968,126 L43,126 C41.8954305,126 41,125.104569 41,124 L41,55.6898628 L54.6898628,42 L104,42 C105.104569,42 106,42.8954305 106,44 C106,75.6283541 106,96.8054529 106,107.531297", id: "Path", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("circle", { id: "Oval", fill: "#3040D6", fillOpacity: "0.2", cx: "76", cy: "84", r: "18" }), /*#__PURE__*/React__namespace.default.createElement("circle", { id: "Oval-Copy-2", fill: "#FFFFFFF", cx: "76", cy: "84", r: "10" }), /*#__PURE__*/React__namespace.default.createElement("rect", { id: "Rectangle", fill: "#3040D6", fillOpacity: "0.2", transform: "translate(105.316743, 113.185977) rotate(-315.000000) translate(-105.316743, -113.185977) ", x: "91.8167434", y: "108.685977", width: "27", height: "9", rx: "2" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "88.5", y1: "96.5", x2: "95.4689509", y2: "103.468951", id: "Line-3" })))); const Drawer$1 = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "109.823", cy: "58.5366", r: "16.1772", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "109.823", cy: "58.5366", r: "16.1772", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M59.9906 97.8126H34.2278C33.9785 97.8126 33.7764 97.6105 33.7764 97.3612C33.7764 97.3314 33.7793 97.3018 33.7851 97.2726L42.1256 55.5703C42.4632 53.8822 43.9455 52.667 45.6671 52.667H107.012C108.734 52.667 110.216 53.8822 110.554 55.5703L118.894 97.2726C118.943 97.5171 118.785 97.755 118.54 97.8039C118.511 97.8097 118.481 97.8126 118.452 97.8126H91.885V111.795H68.3362L59.9906 97.8126Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M62.4183 100.138H40.4811C40.2688 100.138 40.0967 99.966 40.0967 99.7537C40.0967 99.7284 40.0992 99.7031 40.1041 99.6783L47.2061 64.1685C47.4936 62.731 48.7558 61.6963 50.2217 61.6963H102.458C103.924 61.6963 105.186 62.731 105.473 64.1685L112.575 99.6783C112.617 99.8865 112.482 100.089 112.274 100.131C112.249 100.136 112.224 100.138 112.198 100.138H89.5766V110.677H67.3106L62.4183 100.138Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M52.6808 77.6251L53.4206 77.7489L52.6808 77.6251ZM52.0649 76.7616L52.1887 76.0219H52.1887L52.0649 76.7616ZM51.4547 84.9529L50.715 84.8291L51.4547 84.9529ZM50.5912 85.5688L50.4674 86.3085H50.4674L50.5912 85.5688ZM49.9752 84.7053L50.715 84.8291L49.9752 84.7053ZM51.2014 77.3776L51.9411 77.5013L51.2014 77.3776ZM53.9628 69.9639L53.2282 69.8126L53.2254 69.8263L53.2231 69.8401L53.9628 69.9639ZM52.4898 69.6804L51.7543 69.5333L51.7543 69.5333L52.4898 69.6804ZM52.4875 69.692L51.752 69.5449L51.7497 69.5565L51.7477 69.5682L52.4875 69.692ZM52.4855 69.7037L51.7458 69.5799L51.7458 69.5799L52.4855 69.7037ZM52.0093 72.5495L52.749 72.6733L52.0093 72.5495ZM51.6692 74.5822L52.4089 74.706L51.6692 74.5822ZM53.1486 74.8298L52.4089 74.706L53.1486 74.8298ZM53.4887 72.797L54.2284 72.9208L53.4887 72.797ZM53.4206 77.7489C53.5573 76.9318 53.0057 76.1586 52.1887 76.0219L51.9411 77.5013L53.4206 77.7489ZM52.1944 85.0766L53.4206 77.7489L51.9411 77.5013L50.715 84.8291L52.1944 85.0766ZM50.4674 86.3085C51.2845 86.4452 52.0577 85.8937 52.1944 85.0766L50.715 84.8291H50.715L50.4674 86.3085ZM49.2355 84.5815C49.0988 85.3986 49.6503 86.1718 50.4674 86.3085L50.715 84.8291H50.715L49.2355 84.5815ZM50.4617 77.2538L49.2355 84.5815L50.715 84.8291L51.9411 77.5013L50.4617 77.2538ZM52.1887 76.0219C51.3716 75.8852 50.5984 76.4367 50.4617 77.2538L51.9411 77.5013H51.9411L52.1887 76.0219ZM54.6974 70.1151C54.8075 69.5805 55.2783 69.1963 55.8248 69.1963V67.6963C54.5661 67.6963 53.4818 68.5811 53.2282 69.8126L54.6974 70.1151ZM55.8248 69.1963H55.8427V67.6963H55.8248V69.1963ZM55.8427 69.1963H55.8607V67.6963H55.8427V69.1963ZM55.8607 69.1963H55.8786V67.6963H55.8607V69.1963ZM55.8786 69.1963H55.8964V67.6963H55.8786V69.1963ZM55.8964 69.1963H55.9143V67.6963H55.8964V69.1963ZM55.9143 69.1963H55.9322V67.6963H55.9143V69.1963ZM55.9322 69.1963H55.95V67.6963H55.9322V69.1963ZM55.95 69.1963H55.9678V67.6963H55.95V69.1963ZM55.9678 69.1963H55.9856V67.6963H55.9678V69.1963ZM55.9856 69.1963H56.0034V67.6963H55.9856V69.1963ZM56.0034 69.1963H56.0211V67.6963H56.0034V69.1963ZM56.0211 69.1963H56.0389V67.6963H56.0211V69.1963ZM56.0389 69.1963H56.0566V67.6963H56.0389V69.1963ZM56.0566 69.1963H56.0743V67.6963H56.0566V69.1963ZM56.0743 69.1963H56.092V67.6963H56.0743V69.1963ZM56.092 69.1963H56.1097V67.6963H56.092V69.1963ZM56.1097 69.1963H56.1273V67.6963H56.1097V69.1963ZM56.1273 69.1963H56.145V67.6963H56.1273V69.1963ZM56.145 69.1963H56.1626V67.6963H56.145V69.1963ZM56.1626 69.1963H56.1802V67.6963H56.1626V69.1963ZM56.1802 69.1963H56.1978V67.6963H56.1802V69.1963ZM56.1978 69.1963H56.2153V67.6963H56.1978V69.1963ZM56.2153 69.1963H56.2329V67.6963H56.2153V69.1963ZM56.2329 69.1963H56.2504V67.6963H56.2329V69.1963ZM56.2504 69.1963H56.2679V67.6963H56.2504V69.1963ZM56.2679 69.1963H56.2854V67.6963H56.2679V69.1963ZM56.2854 69.1963H56.3029V67.6963H56.2854V69.1963ZM56.3029 69.1963H56.3204V67.6963H56.3029V69.1963ZM56.3204 69.1963H56.3378V67.6963H56.3204V69.1963ZM56.3378 69.1963H56.3552V67.6963H56.3378V69.1963ZM56.3552 69.1963H56.3726V67.6963H56.3552V69.1963ZM56.3726 69.1963H56.39V67.6963H56.3726V69.1963ZM56.39 69.1963H56.4074V67.6963H56.39V69.1963ZM56.4074 69.1963H56.4248V67.6963H56.4074V69.1963ZM56.4248 69.1963H56.4421V67.6963H56.4248V69.1963ZM56.4421 69.1963H56.4594V67.6963H56.4421V69.1963ZM56.4594 69.1963H56.4767V67.6963H56.4594V69.1963ZM56.4767 69.1963H56.494V67.6963H56.4767V69.1963ZM56.494 69.1963H56.5113V67.6963H56.494V69.1963ZM56.5113 69.1963H56.5285V67.6963H56.5113V69.1963ZM56.5285 69.1963H56.5458V67.6963H56.5285V69.1963ZM56.5458 69.1963H56.563V67.6963H56.5458V69.1963ZM56.563 69.1963H56.5802V67.6963H56.563V69.1963ZM56.5802 69.1963H56.5974V67.6963H56.5802V69.1963ZM56.5974 69.1963H56.6145V67.6963H56.5974V69.1963ZM56.6145 69.1963H56.6317V67.6963H56.6145V69.1963ZM56.6317 69.1963H56.6488V67.6963H56.6317V69.1963ZM56.6488 69.1963H56.6659V67.6963H56.6488V69.1963ZM56.6659 69.1963H56.683V67.6963H56.6659V69.1963ZM56.683 69.1963H56.7001V67.6963H56.683V69.1963ZM56.7001 69.1963H56.7171V67.6963H56.7001V69.1963ZM56.7171 69.1963H56.7342V67.6963H56.7171V69.1963ZM56.7342 69.1963H56.7512V67.6963H56.7342V69.1963ZM56.7512 69.1963H56.7682V67.6963H56.7512V69.1963ZM56.7682 69.1963H56.7852V67.6963H56.7682V69.1963ZM56.7852 69.1963H56.8022V67.6963H56.7852V69.1963ZM56.8022 69.1963H56.8191V67.6963H56.8022V69.1963ZM56.8191 69.1963H56.836V67.6963H56.8191V69.1963ZM56.836 69.1963H56.853V67.6963H56.836V69.1963ZM56.853 69.1963H56.8699V67.6963H56.853V69.1963ZM56.8699 69.1963H56.8867V67.6963H56.8699V69.1963ZM56.8867 69.1963H56.9036V67.6963H56.8867V69.1963ZM56.9036 69.1963H56.9205V67.6963H56.9036V69.1963ZM56.9205 69.1963H56.9373V67.6963H56.9205V69.1963ZM56.9373 69.1963H56.9541V67.6963H56.9373V69.1963ZM56.9541 69.1963H56.9709V67.6963H56.9541V69.1963ZM56.9709 69.1963H56.9877V67.6963H56.9709V69.1963ZM56.9877 69.1963H57.0044V67.6963H56.9877V69.1963ZM57.0044 69.1963H57.0212V67.6963H57.0044V69.1963ZM57.0212 69.1963H57.0379V67.6963H57.0212V69.1963ZM57.0379 69.1963H57.0546V67.6963H57.0379V69.1963ZM57.0546 69.1963H57.0713V67.6963H57.0546V69.1963ZM57.0713 69.1963H57.088V67.6963H57.0713V69.1963ZM57.088 69.1963H57.1046V67.6963H57.088V69.1963ZM57.1046 69.1963H57.1213V67.6963H57.1046V69.1963ZM57.1213 69.1963H57.1379V67.6963H57.1213V69.1963ZM57.1379 69.1963H57.1545V67.6963H57.1379V69.1963ZM57.1545 69.1963H57.1711V67.6963H57.1545V69.1963ZM57.1711 69.1963H57.1876V67.6963H57.1711V69.1963ZM57.1876 69.1963H57.2042V67.6963H57.1876V69.1963ZM57.2042 69.1963H57.2207V67.6963H57.2042V69.1963ZM57.2207 69.1963H57.2372V67.6963H57.2207V69.1963ZM57.2372 69.1963H57.2537V67.6963H57.2372V69.1963ZM57.2537 69.1963H57.2702V67.6963H57.2537V69.1963ZM57.2702 69.1963H57.2867V67.6963H57.2702V69.1963ZM57.2867 69.1963H57.3031V67.6963H57.2867V69.1963ZM57.3031 69.1963H57.3196V67.6963H57.3031V69.1963ZM57.3196 69.1963H57.336V67.6963H57.3196V69.1963ZM57.336 69.1963H57.3524V67.6963H57.336V69.1963ZM57.3524 69.1963H57.3687V67.6963H57.3524V69.1963ZM57.3687 69.1963H57.3851V67.6963H57.3687V69.1963ZM57.3851 69.1963H57.4014V67.6963H57.3851V69.1963ZM57.4014 69.1963H57.4178V67.6963H57.4014V69.1963ZM57.4178 69.1963H57.4341V67.6963H57.4178V69.1963ZM57.4341 69.1963H57.4503V67.6963H57.4341V69.1963ZM57.4503 69.1963H57.4666V67.6963H57.4503V69.1963ZM57.4666 69.1963H57.4829V67.6963H57.4666V69.1963ZM57.4829 69.1963H57.4991V67.6963H57.4829V69.1963ZM57.4991 69.1963H57.5153V67.6963H57.4991V69.1963ZM57.5153 69.1963H57.5315V67.6963H57.5153V69.1963ZM57.5315 69.1963H57.5477V67.6963H57.5315V69.1963ZM57.5477 69.1963H57.5639V67.6963H57.5477V69.1963ZM57.5639 69.1963H57.58V67.6963H57.5639V69.1963ZM57.58 69.1963H57.5961V67.6963H57.58V69.1963ZM57.5961 69.1963H57.6123V67.6963H57.5961V69.1963ZM57.6123 69.1963H57.6284V67.6963H57.6123V69.1963ZM57.6284 69.1963H57.6444V67.6963H57.6284V69.1963ZM57.6444 69.1963H57.6605V67.6963H57.6444V69.1963ZM57.6605 69.1963H57.6765V67.6963H57.6605V69.1963ZM57.6765 69.1963H57.6926V67.6963H57.6765V69.1963ZM57.6926 69.1963H57.7086V67.6963H57.6926V69.1963ZM57.7086 69.1963H57.7246V67.6963H57.7086V69.1963ZM57.7246 69.1963H57.7405V67.6963H57.7246V69.1963ZM57.7405 69.1963H57.7565V67.6963H57.7405V69.1963ZM57.7565 69.1963H57.7724V67.6963H57.7565V69.1963ZM57.7724 69.1963H57.7883V67.6963H57.7724V69.1963ZM57.7883 69.1963H57.8042V67.6963H57.7883V69.1963ZM57.8042 69.1963H57.8201V67.6963H57.8042V69.1963ZM57.8201 69.1963H57.836V67.6963H57.8201V69.1963ZM57.836 69.1963H57.8518V67.6963H57.836V69.1963ZM57.8518 69.1963H57.8677V67.6963H57.8518V69.1963ZM57.8677 69.1963H57.8835V67.6963H57.8677V69.1963ZM57.8835 69.1963H57.8993V67.6963H57.8835V69.1963ZM57.8993 69.1963H57.9151V67.6963H57.8993V69.1963ZM57.9151 69.1963H57.9308V67.6963H57.9151V69.1963ZM57.9308 69.1963H57.9466V67.6963H57.9308V69.1963ZM57.9466 69.1963H57.9623V67.6963H57.9466V69.1963ZM57.9623 69.1963H57.978V67.6963H57.9623V69.1963ZM57.978 69.1963H57.9937V67.6963H57.978V69.1963ZM57.9937 69.1963H58.0094V67.6963H57.9937V69.1963ZM58.0094 69.1963H58.025V67.6963H58.0094V69.1963ZM58.025 69.1963H58.0407V67.6963H58.025V69.1963ZM58.0407 69.1963H58.0563V67.6963H58.0407V69.1963ZM58.0563 69.1963H58.0719V67.6963H58.0563V69.1963ZM58.0719 69.1963H58.0875V67.6963H58.0719V69.1963ZM58.0875 69.1963H58.103V67.6963H58.0875V69.1963ZM58.103 69.1963H58.1186V67.6963H58.103V69.1963ZM58.1186 69.1963H58.1341V67.6963H58.1186V69.1963ZM58.1341 69.1963H58.1496V67.6963H58.1341V69.1963ZM58.1496 69.1963H58.1651V67.6963H58.1496V69.1963ZM58.1651 69.1963H58.1806V67.6963H58.1651V69.1963ZM58.1806 69.1963H58.1961V67.6963H58.1806V69.1963ZM58.1961 69.1963H58.2115V67.6963H58.1961V69.1963ZM58.2115 69.1963H58.227V67.6963H58.2115V69.1963ZM58.227 69.1963H58.2424V67.6963H58.227V69.1963ZM58.2424 69.1963H58.2578V67.6963H58.2424V69.1963ZM58.2578 69.1963H58.2731V67.6963H58.2578V69.1963ZM58.2731 69.1963H58.2885V67.6963H58.2731V69.1963ZM58.2885 69.1963H58.3038V67.6963H58.2885V69.1963ZM58.3038 69.1963H58.3192V67.6963H58.3038V69.1963ZM58.3192 69.1963H58.3345V67.6963H58.3192V69.1963ZM58.3345 69.1963H58.3498V67.6963H58.3345V69.1963ZM58.3498 69.1963H58.365V67.6963H58.3498V69.1963ZM58.365 69.1963H58.3803V67.6963H58.365V69.1963ZM58.3803 69.1963H58.3955V67.6963H58.3803V69.1963ZM58.3955 69.1963H58.4107V67.6963H58.3955V69.1963ZM58.4107 69.1963H58.4259V67.6963H58.4107V69.1963ZM58.4259 69.1963H58.4411V67.6963H58.4259V69.1963ZM58.4411 69.1963H58.4563V67.6963H58.4411V69.1963ZM58.4563 69.1963H58.4714V67.6963H58.4563V69.1963ZM58.4714 69.1963H58.4866V67.6963H58.4714V69.1963ZM58.4866 69.1963H58.5017V67.6963H58.4866V69.1963ZM58.5017 69.1963H58.5168V67.6963H58.5017V69.1963ZM58.5168 69.1963H58.5319V67.6963H58.5168V69.1963ZM58.5319 69.1963H58.5469V67.6963H58.5319V69.1963ZM58.5469 69.1963H58.562V67.6963H58.5469V69.1963ZM58.562 69.1963H58.577V67.6963H58.562V69.1963ZM58.577 69.1963H58.592V67.6963H58.577V69.1963ZM58.592 69.1963H58.607V67.6963H58.592V69.1963ZM58.607 69.1963H58.622V67.6963H58.607V69.1963ZM58.622 69.1963H58.6369V67.6963H58.622V69.1963ZM58.6369 69.1963H58.6519V67.6963H58.6369V69.1963ZM58.6519 69.1963H58.6668V67.6963H58.6519V69.1963ZM58.6668 69.1963H58.6817V67.6963H58.6668V69.1963ZM58.6817 69.1963H58.6966V67.6963H58.6817V69.1963ZM58.6966 69.1963H58.7114V67.6963H58.6966V69.1963ZM58.7114 69.1963H58.7263V67.6963H58.7114V69.1963ZM58.7263 69.1963H58.7411V67.6963H58.7263V69.1963ZM58.7411 69.1963H58.7559V67.6963H58.7411V69.1963ZM58.7559 69.1963H58.7707V67.6963H58.7559V69.1963ZM58.7707 69.1963H58.7855V67.6963H58.7707V69.1963ZM58.7855 69.1963H58.8003V67.6963H58.7855V69.1963ZM58.8003 69.1963H58.815V67.6963H58.8003V69.1963ZM58.815 69.1963H58.8297V67.6963H58.815V69.1963ZM58.8297 69.1963H58.8445V67.6963H58.8297V69.1963ZM58.8445 69.1963H58.8591V67.6963H58.8445V69.1963ZM58.8591 69.1963H58.8738V67.6963H58.8591V69.1963ZM58.8738 69.1963H58.8885V67.6963H58.8738V69.1963ZM58.8885 69.1963H58.9031V67.6963H58.8885V69.1963ZM58.9031 69.1963H58.9177V67.6963H58.9031V69.1963ZM58.9177 69.1963H58.9324V67.6963H58.9177V69.1963ZM58.9324 69.1963H58.9469V67.6963H58.9324V69.1963ZM58.9469 69.1963H58.9615V67.6963H58.9469V69.1963ZM58.9615 69.1963H58.9761V67.6963H58.9615V69.1963ZM58.9761 69.1963H58.9906V67.6963H58.9761V69.1963ZM58.9906 69.1963H59.0051V67.6963H58.9906V69.1963ZM59.0051 69.1963H59.0196V67.6963H59.0051V69.1963ZM59.0196 69.1963H59.0341V67.6963H59.0196V69.1963ZM59.0341 69.1963H59.0486V67.6963H59.0341V69.1963ZM59.0486 69.1963H59.063V67.6963H59.0486V69.1963ZM59.063 69.1963H59.0774V67.6963H59.063V69.1963ZM59.0774 69.1963H59.0919V67.6963H59.0774V69.1963ZM59.0919 69.1963H59.1062V67.6963H59.0919V69.1963ZM59.1062 69.1963H59.1206V67.6963H59.1062V69.1963ZM59.1206 69.1963H59.135V67.6963H59.1206V69.1963ZM59.135 69.1963H59.1493V67.6963H59.135V69.1963ZM59.1493 69.1963H59.1637V67.6963H59.1493V69.1963ZM59.1637 69.1963H59.178V67.6963H59.1637V69.1963ZM59.178 69.1963H59.1922V67.6963H59.178V69.1963ZM59.1922 69.1963H59.2065V67.6963H59.1922V69.1963ZM59.2065 69.1963H59.2208V67.6963H59.2065V69.1963ZM59.2208 69.1963H59.235V67.6963H59.2208V69.1963ZM59.235 69.1963H59.2492V67.6963H59.235V69.1963ZM59.2492 69.1963H59.2634V67.6963H59.2492V69.1963ZM59.2634 69.1963H59.2776V67.6963H59.2634V69.1963ZM59.2776 69.1963H59.2918V67.6963H59.2776V69.1963ZM59.2918 69.1963H59.3059V67.6963H59.2918V69.1963ZM59.3059 69.1963H59.3201V67.6963H59.3059V69.1963ZM59.3201 69.1963H59.3342V67.6963H59.3201V69.1963ZM59.3342 69.1963H59.3483V67.6963H59.3342V69.1963ZM59.3483 69.1963H59.3624V67.6963H59.3483V69.1963ZM59.3624 69.1963H59.3764V67.6963H59.3624V69.1963ZM59.3764 69.1963H59.3905V67.6963H59.3764V69.1963ZM59.3905 69.1963H59.4045V67.6963H59.3905V69.1963ZM59.4045 69.1963H59.4185V67.6963H59.4045V69.1963ZM59.4185 69.1963H59.4325V67.6963H59.4185V69.1963ZM59.4325 69.1963H59.4465V67.6963H59.4325V69.1963ZM59.4465 69.1963H59.4604V67.6963H59.4465V69.1963ZM59.4604 69.1963H59.4744V67.6963H59.4604V69.1963ZM59.4744 69.1963H59.4883V67.6963H59.4744V69.1963ZM59.4883 69.1963H59.5022V67.6963H59.4883V69.1963ZM59.5022 69.1963H59.5161V67.6963H59.5022V69.1963ZM59.5161 69.1963H59.5299V67.6963H59.5161V69.1963ZM59.5299 69.1963H59.5438V67.6963H59.5299V69.1963ZM59.5438 69.1963H59.5576V67.6963H59.5438V69.1963ZM59.5576 69.1963H59.5714V67.6963H59.5576V69.1963ZM59.5714 69.1963H59.5852V67.6963H59.5714V69.1963ZM59.5852 69.1963H59.599V67.6963H59.5852V69.1963ZM59.599 69.1963H59.6128V67.6963H59.599V69.1963ZM59.6128 69.1963H59.6265V67.6963H59.6128V69.1963ZM59.6265 69.1963H59.6403V67.6963H59.6265V69.1963ZM59.6403 69.1963H59.654V67.6963H59.6403V69.1963ZM59.654 69.1963H59.6677V67.6963H59.654V69.1963ZM59.6677 69.1963H59.6814V67.6963H59.6677V69.1963ZM59.6814 69.1963H59.695V67.6963H59.6814V69.1963ZM59.695 69.1963H59.7087V67.6963H59.695V69.1963ZM59.7087 69.1963H59.7223V67.6963H59.7087V69.1963ZM59.7223 69.1963H59.7359V67.6963H59.7223V69.1963ZM59.7359 69.1963H59.7495V67.6963H59.7359V69.1963ZM59.7495 69.1963H59.763V67.6963H59.7495V69.1963ZM59.763 69.1963H59.7766V67.6963H59.763V69.1963ZM59.7766 69.1963H59.7901V67.6963H59.7766V69.1963ZM59.7901 69.1963H59.8037V67.6963H59.7901V69.1963ZM59.8037 69.1963H59.8172V67.6963H59.8037V69.1963ZM59.8172 69.1963H59.8306V67.6963H59.8172V69.1963ZM59.8306 69.1963H59.8441V67.6963H59.8306V69.1963ZM59.8441 69.1963H59.8576V67.6963H59.8441V69.1963ZM59.8576 69.1963H59.871V67.6963H59.8576V69.1963ZM59.871 69.1963H59.8844V67.6963H59.871V69.1963ZM59.8844 69.1963H59.8978V67.6963H59.8844V69.1963ZM59.8978 69.1963H59.9112V67.6963H59.8978V69.1963ZM59.9112 69.1963H59.9245V67.6963H59.9112V69.1963ZM59.9245 69.1963H59.9379V67.6963H59.9245V69.1963ZM59.9379 69.1963H59.9512V67.6963H59.9379V69.1963ZM59.9512 69.1963H59.9645V67.6963H59.9512V69.1963ZM59.9645 69.1963H59.9778V67.6963H59.9645V69.1963ZM59.9778 69.1963H59.9911V67.6963H59.9778V69.1963ZM59.9911 69.1963H60.0043V67.6963H59.9911V69.1963ZM60.0043 69.1963H60.0176V67.6963H60.0043V69.1963ZM60.0176 69.1963H60.0308V67.6963H60.0176V69.1963ZM60.0308 69.1963H60.044V67.6963H60.0308V69.1963ZM60.044 69.1963H60.0572V67.6963H60.044V69.1963ZM60.0572 69.1963H60.0703V67.6963H60.0572V69.1963ZM60.0703 69.1963H60.0835V67.6963H60.0703V69.1963ZM60.0835 69.1963H60.0966V67.6963H60.0835V69.1963ZM60.0966 69.1963H60.1097V67.6963H60.0966V69.1963ZM60.1097 69.1963H60.1228V67.6963H60.1097V69.1963ZM60.1228 69.1963H60.1359V67.6963H60.1228V69.1963ZM60.1359 69.1963H60.149V67.6963H60.1359V69.1963ZM60.149 69.1963H60.162V67.6963H60.149V69.1963ZM60.162 69.1963H60.1751V67.6963H60.162V69.1963ZM60.1751 69.1963H60.1881V67.6963H60.1751V69.1963ZM60.1881 69.1963H60.2011V67.6963H60.1881V69.1963ZM60.2011 69.1963H60.214V67.6963H60.2011V69.1963ZM60.214 69.1963H60.227V67.6963H60.214V69.1963ZM60.227 69.1963H60.2399V67.6963H60.227V69.1963ZM60.2399 69.1963H60.2529V67.6963H60.2399V69.1963ZM60.2529 69.1963H60.2658V67.6963H60.2529V69.1963ZM60.2658 69.1963H60.2787V67.6963H60.2658V69.1963ZM60.2787 69.1963H60.2915V67.6963H60.2787V69.1963ZM60.2915 69.1963H60.3044V67.6963H60.2915V69.1963ZM60.3044 69.1963H60.3172V67.6963H60.3044V69.1963ZM60.3172 69.1963H60.33V67.6963H60.3172V69.1963ZM60.33 69.1963H60.3428V67.6963H60.33V69.1963ZM60.3428 69.1963H60.3556V67.6963H60.3428V69.1963ZM60.3556 69.1963H60.3684V67.6963H60.3556V69.1963ZM60.3684 69.1963H60.3811V67.6963H60.3684V69.1963ZM60.3811 69.1963H60.3939V67.6963H60.3811V69.1963ZM60.3939 69.1963H60.4066V67.6963H60.3939V69.1963ZM60.4066 69.1963H60.4193V67.6963H60.4066V69.1963ZM60.4193 69.1963H60.4319V67.6963H60.4193V69.1963ZM60.4319 69.1963H60.4446V67.6963H60.4319V69.1963ZM60.4446 69.1963H60.4572V67.6963H60.4446V69.1963ZM60.4572 69.1963H60.4699V67.6963H60.4572V69.1963ZM60.4699 69.1963H60.4825V67.6963H60.4699V69.1963ZM60.4825 69.1963H60.4951V67.6963H60.4825V69.1963ZM60.4951 69.1963H60.5076V67.6963H60.4951V69.1963ZM60.5076 69.1963H60.5202V67.6963H60.5076V69.1963ZM60.5202 69.1963H60.5327V67.6963H60.5202V69.1963ZM60.5327 69.1963H60.5453V67.6963H60.5327V69.1963ZM60.5453 69.1963H60.5578V67.6963H60.5453V69.1963ZM60.5578 69.1963H60.5702V67.6963H60.5578V69.1963ZM60.5702 69.1963H60.5827V67.6963H60.5702V69.1963ZM60.5827 69.1963H60.5952V67.6963H60.5827V69.1963ZM60.5952 69.1963H60.6076V67.6963H60.5952V69.1963ZM60.6076 69.1963H60.62V67.6963H60.6076V69.1963ZM60.62 69.1963H60.6324V67.6963H60.62V69.1963ZM60.6324 69.1963H60.6448V67.6963H60.6324V69.1963ZM60.6448 69.1963H60.6571V67.6963H60.6448V69.1963ZM60.6571 69.1963H60.6695V67.6963H60.6571V69.1963ZM60.6695 69.1963H60.6818V67.6963H60.6695V69.1963ZM60.6818 69.1963H60.6941V67.6963H60.6818V69.1963ZM60.6941 69.1963H60.7064V67.6963H60.6941V69.1963ZM60.7064 69.1963H60.7187V67.6963H60.7064V69.1963ZM60.7187 69.1963H60.731V67.6963H60.7187V69.1963ZM60.731 69.1963H60.7432V67.6963H60.731V69.1963ZM60.7432 69.1963H60.7554V67.6963H60.7432V69.1963ZM60.7554 69.1963H60.7676V67.6963H60.7554V69.1963ZM60.7676 69.1963H60.7798V67.6963H60.7676V69.1963ZM60.7798 69.1963H60.792V67.6963H60.7798V69.1963ZM60.792 69.1963H60.8041V67.6963H60.792V69.1963ZM60.8041 69.1963H60.8163V67.6963H60.8041V69.1963ZM60.8163 69.1963H60.8284V67.6963H60.8163V69.1963ZM60.8284 69.1963H60.8405V67.6963H60.8284V69.1963ZM60.8405 69.1963H60.8526V67.6963H60.8405V69.1963ZM60.8526 69.1963H60.8646V67.6963H60.8526V69.1963ZM60.8646 69.1963H60.8767V67.6963H60.8646V69.1963ZM60.8767 69.1963H60.8887V67.6963H60.8767V69.1963ZM60.8887 69.1963H60.9007V67.6963H60.8887V69.1963ZM60.9007 69.1963H60.9127V67.6963H60.9007V69.1963ZM60.9127 69.1963H60.9247V67.6963H60.9127V69.1963ZM60.9247 69.1963H60.9366V67.6963H60.9247V69.1963ZM60.9366 69.1963H60.9486V67.6963H60.9366V69.1963ZM60.9486 69.1963H60.9605V67.6963H60.9486V69.1963ZM60.9605 69.1963H60.9724V67.6963H60.9605V69.1963ZM60.9724 69.1963H60.9843V67.6963H60.9724V69.1963ZM60.9843 69.1963H60.9962V67.6963H60.9843V69.1963ZM60.9962 69.1963H61.008V67.6963H60.9962V69.1963ZM61.008 69.1963H61.0199V67.6963H61.008V69.1963ZM61.0199 69.1963H61.0317V67.6963H61.0199V69.1963ZM61.0317 69.1963H61.0435V67.6963H61.0317V69.1963ZM61.0435 69.1963H61.0553V67.6963H61.0435V69.1963ZM61.0553 69.1963H61.067V67.6963H61.0553V69.1963ZM61.067 69.1963H61.0788V67.6963H61.067V69.1963ZM61.0788 69.1963H61.0905V67.6963H61.0788V69.1963ZM61.0905 69.1963H61.1022V67.6963H61.0905V69.1963ZM61.1022 69.1963H61.1139V67.6963H61.1022V69.1963ZM61.1139 69.1963H61.1256V67.6963H61.1139V69.1963ZM61.1256 69.1963H61.1373V67.6963H61.1256V69.1963ZM61.1373 69.1963H61.1489V67.6963H61.1373V69.1963ZM61.1489 69.1963H61.1605V67.6963H61.1489V69.1963ZM61.1605 69.1963H61.1721V67.6963H61.1605V69.1963ZM61.1721 69.1963H61.1837V67.6963H61.1721V69.1963ZM61.1837 69.1963H61.1953V67.6963H61.1837V69.1963ZM61.1953 69.1963H61.2069V67.6963H61.1953V69.1963ZM61.2069 69.1963H61.2184V67.6963H61.2069V69.1963ZM61.2184 69.1963H61.2299V67.6963H61.2184V69.1963ZM61.2299 69.1963H61.2414V67.6963H61.2299V69.1963ZM61.2414 69.1963H61.2529V67.6963H61.2414V69.1963ZM61.2529 69.1963H61.2644V67.6963H61.2529V69.1963ZM61.2644 69.1963H61.2758V67.6963H61.2644V69.1963ZM61.2758 69.1963H61.2873V67.6963H61.2758V69.1963ZM61.2873 69.1963H61.2987V67.6963H61.2873V69.1963ZM61.2987 69.1963H61.3101V67.6963H61.2987V69.1963ZM61.3101 69.1963H61.3215V67.6963H61.3101V69.1963ZM61.3215 69.1963H61.3328V67.6963H61.3215V69.1963ZM61.3328 69.1963H61.3442V67.6963H61.3328V69.1963ZM61.3442 69.1963H61.3555V67.6963H61.3442V69.1963ZM61.3555 69.1963H61.3668V67.6963H61.3555V69.1963ZM61.3668 69.1963H61.3781V67.6963H61.3668V69.1963ZM61.3781 69.1963H61.3894V67.6963H61.3781V69.1963ZM61.3894 69.1963H61.4006V67.6963H61.3894V69.1963ZM61.4006 69.1963H61.4119V67.6963H61.4006V69.1963ZM61.4119 69.1963H61.4231V67.6963H61.4119V69.1963ZM61.4231 69.1963H61.4343V67.6963H61.4231V69.1963ZM61.4343 69.1963H61.4455V67.6963H61.4343V69.1963ZM61.4455 69.1963H61.4567V67.6963H61.4455V69.1963ZM61.4567 69.1963H61.4678V67.6963H61.4567V69.1963ZM61.4678 69.1963H61.479V67.6963H61.4678V69.1963ZM61.479 69.1963H61.4901V67.6963H61.479V69.1963ZM61.4901 69.1963H61.5012V67.6963H61.4901V69.1963ZM61.5012 69.1963H61.5123V67.6963H61.5012V69.1963ZM61.5123 69.1963H61.5233V67.6963H61.5123V69.1963ZM61.5233 69.1963H61.5344V67.6963H61.5233V69.1963ZM61.5344 69.1963H61.5454V67.6963H61.5344V69.1963ZM61.5454 69.1963H61.5564V67.6963H61.5454V69.1963ZM61.5564 69.1963H61.5674V67.6963H61.5564V69.1963ZM61.5674 69.1963H61.5784V67.6963H61.5674V69.1963ZM61.5784 69.1963H61.5894V67.6963H61.5784V69.1963ZM61.5894 69.1963H61.6003V67.6963H61.5894V69.1963ZM61.6003 69.1963H61.6112V67.6963H61.6003V69.1963ZM61.6112 69.1963H61.6221V67.6963H61.6112V69.1963ZM61.6221 69.1963H61.633V67.6963H61.6221V69.1963ZM61.633 69.1963H61.6439V67.6963H61.633V69.1963ZM61.6439 69.1963H61.6548V67.6963H61.6439V69.1963ZM61.6548 69.1963H61.6656V67.6963H61.6548V69.1963ZM61.6656 69.1963H61.6764V67.6963H61.6656V69.1963ZM61.6764 69.1963H61.6872V67.6963H61.6764V69.1963ZM61.6872 69.1963H61.698V67.6963H61.6872V69.1963ZM61.698 69.1963H61.7088V67.6963H61.698V69.1963ZM61.7088 69.1963H61.7195V67.6963H61.7088V69.1963ZM61.7195 69.1963H61.7302V67.6963H61.7195V69.1963ZM61.7302 69.1963H61.741V67.6963H61.7302V69.1963ZM61.741 69.1963H61.7517V67.6963H61.741V69.1963ZM61.7517 69.1963H61.7623V67.6963H61.7517V69.1963ZM61.7623 69.1963H61.773V67.6963H61.7623V69.1963ZM61.773 69.1963H61.7836V67.6963H61.773V69.1963ZM61.7836 69.1963H61.7943V67.6963H61.7836V69.1963ZM61.7943 69.1963H61.8049V67.6963H61.7943V69.1963ZM61.8049 69.1963H61.8155V67.6963H61.8049V69.1963ZM61.8155 69.1963H61.8261V67.6963H61.8155V69.1963ZM61.8261 69.1963H61.8366V67.6963H61.8261V69.1963ZM61.8366 69.1963H61.8471V67.6963H61.8366V69.1963ZM61.8471 69.1963H61.8577V67.6963H61.8471V69.1963ZM61.8577 69.1963H61.8682V67.6963H61.8577V69.1963ZM61.8682 69.1963H61.8787V67.6963H61.8682V69.1963ZM61.8787 69.1963H61.8891V67.6963H61.8787V69.1963ZM61.8891 69.1963H61.8996V67.6963H61.8891V69.1963ZM61.8996 69.1963H61.91V67.6963H61.8996V69.1963ZM61.91 69.1963H61.9204V67.6963H61.91V69.1963ZM61.9204 69.1963H61.9308V67.6963H61.9204V69.1963ZM61.9308 69.1963H61.9412V67.6963H61.9308V69.1963ZM61.9412 69.1963H61.9516V67.6963H61.9412V69.1963ZM61.9516 69.1963H61.9619V67.6963H61.9516V69.1963ZM61.9619 69.1963H61.9723V67.6963H61.9619V69.1963ZM61.9723 69.1963H61.9826V67.6963H61.9723V69.1963ZM61.9826 69.1963H61.9929V67.6963H61.9826V69.1963ZM61.9929 69.1963H62.0031V67.6963H61.9929V69.1963ZM62.0031 69.1963H62.0134V67.6963H62.0031V69.1963ZM62.0134 69.1963H62.0236V67.6963H62.0134V69.1963ZM62.0236 69.1963H62.0339V67.6963H62.0236V69.1963ZM62.0339 69.1963H62.0441V67.6963H62.0339V69.1963ZM62.0441 69.1963H62.0543V67.6963H62.0441V69.1963ZM62.0543 69.1963H62.0644V67.6963H62.0543V69.1963ZM62.0644 69.1963H62.0746V67.6963H62.0644V69.1963ZM62.0746 69.1963H62.0847V67.6963H62.0746V69.1963ZM62.0847 69.1963H62.0949V67.6963H62.0847V69.1963ZM62.0949 69.1963H62.105V67.6963H62.0949V69.1963ZM62.105 69.1963H62.115V67.6963H62.105V69.1963ZM62.115 69.1963H62.1251V67.6963H62.115V69.1963ZM62.1251 69.1963H62.1352V67.6963H62.1251V69.1963ZM62.1352 69.1963H62.1452V67.6963H62.1352V69.1963ZM62.1452 69.1963H62.1552V67.6963H62.1452V69.1963ZM62.1552 69.1963H62.1652V67.6963H62.1552V69.1963ZM62.1652 69.1963H62.1752V67.6963H62.1652V69.1963ZM62.1752 69.1963H62.1851V67.6963H62.1752V69.1963ZM62.1851 69.1963H62.1951V67.6963H62.1851V69.1963ZM62.1951 69.1963H62.205V67.6963H62.1951V69.1963ZM62.205 69.1963H62.2149V67.6963H62.205V69.1963ZM62.2149 69.1963H62.2248V67.6963H62.2149V69.1963ZM62.2248 69.1963H62.2347V67.6963H62.2248V69.1963ZM62.2347 69.1963H62.2445V67.6963H62.2347V69.1963ZM62.2445 69.1963H62.2544V67.6963H62.2445V69.1963ZM62.2544 69.1963H62.2642V67.6963H62.2544V69.1963ZM62.2642 69.1963H62.274V67.6963H62.2642V69.1963ZM62.274 69.1963H62.2838V67.6963H62.274V69.1963ZM62.2838 69.1963H62.2936V67.6963H62.2838V69.1963ZM62.2936 69.1963H62.3033V67.6963H62.2936V69.1963ZM62.3033 69.1963H62.313V67.6963H62.3033V69.1963ZM62.313 69.1963H62.3228V67.6963H62.313V69.1963ZM62.3228 69.1963H62.3325V67.6963H62.3228V69.1963ZM62.3325 69.1963H62.3421V67.6963H62.3325V69.1963ZM62.3421 69.1963H62.3518V67.6963H62.3421V69.1963ZM62.3518 69.1963H62.3615V67.6963H62.3518V69.1963ZM62.3615 69.1963H62.3711V67.6963H62.3615V69.1963ZM62.3711 69.1963H62.3807V67.6963H62.3711V69.1963ZM62.3807 69.1963H62.3903V67.6963H62.3807V69.1963ZM62.3903 69.1963H62.3999V67.6963H62.3903V69.1963ZM62.3999 69.1963H62.4094V67.6963H62.3999V69.1963ZM62.4094 69.1963H62.419V67.6963H62.4094V69.1963ZM62.419 69.1963H62.4285V67.6963H62.419V69.1963ZM62.4285 69.1963H62.438V67.6963H62.4285V69.1963ZM62.438 69.1963H62.4475V67.6963H62.438V69.1963ZM62.4475 69.1963H62.4569V67.6963H62.4475V69.1963ZM62.4569 69.1963H62.4664V67.6963H62.4569V69.1963ZM62.4664 69.1963H62.4758V67.6963H62.4664V69.1963ZM62.4758 69.1963H62.4853V67.6963H62.4758V69.1963ZM62.4853 69.1963H62.4947V67.6963H62.4853V69.1963ZM62.4947 69.1963H62.504V67.6963H62.4947V69.1963ZM62.504 69.1963H62.5134V67.6963H62.504V69.1963ZM62.5134 69.1963H62.5228V67.6963H62.5134V69.1963ZM62.5228 69.1963H62.5321V67.6963H62.5228V69.1963ZM62.5321 69.1963H62.5414V67.6963H62.5321V69.1963ZM62.5414 69.1963H62.5507V67.6963H62.5414V69.1963ZM62.5507 69.1963H62.56V67.6963H62.5507V69.1963ZM62.56 69.1963H62.5692V67.6963H62.56V69.1963ZM62.5692 69.1963H62.5785V67.6963H62.5692V69.1963ZM62.5785 69.1963H62.5877V67.6963H62.5785V69.1963ZM62.5877 69.1963H62.5969V67.6963H62.5877V69.1963ZM62.5969 69.1963H62.6061V67.6963H62.5969V69.1963ZM62.6061 69.1963H62.6153V67.6963H62.6061V69.1963ZM62.6153 69.1963H62.6244V67.6963H62.6153V69.1963ZM62.6244 69.1963H62.6336V67.6963H62.6244V69.1963ZM62.6336 69.1963H62.6427V67.6963H62.6336V69.1963ZM62.6427 69.1963H62.6518V67.6963H62.6427V69.1963ZM62.6518 69.1963H62.6609V67.6963H62.6518V69.1963ZM62.6609 69.1963H62.6699V67.6963H62.6609V69.1963ZM62.6699 69.1963H62.679V67.6963H62.6699V69.1963ZM62.679 69.1963H62.688V67.6963H62.679V69.1963ZM62.688 69.1963H62.697V67.6963H62.688V69.1963ZM62.697 69.1963H62.706V67.6963H62.697V69.1963ZM62.706 69.1963H62.715V67.6963H62.706V69.1963ZM62.715 69.1963C63.5435 69.1963 64.215 68.5247 64.215 67.6963H62.715V69.1963ZM64.215 67.6963C64.215 66.8679 63.5435 66.1963 62.715 66.1963V67.6963H64.215ZM62.715 66.1963H62.706V67.6963H62.715V66.1963ZM62.706 66.1963H62.697V67.6963H62.706V66.1963ZM62.697 66.1963H62.688V67.6963H62.697V66.1963ZM62.688 66.1963H62.679V67.6963H62.688V66.1963ZM62.679 66.1963H62.6699V67.6963H62.679V66.1963ZM62.6699 66.1963H62.6609V67.6963H62.6699V66.1963ZM62.6609 66.1963H62.6518V67.6963H62.6609V66.1963ZM62.6518 66.1963H62.6427V67.6963H62.6518V66.1963ZM62.6427 66.1963H62.6336V67.6963H62.6427V66.1963ZM62.6336 66.1963H62.6244V67.6963H62.6336V66.1963ZM62.6244 66.1963H62.6153V67.6963H62.6244V66.1963ZM62.6153 66.1963H62.6061V67.6963H62.6153V66.1963ZM62.6061 66.1963H62.5969V67.6963H62.6061V66.1963ZM62.5969 66.1963H62.5877V67.6963H62.5969V66.1963ZM62.5877 66.1963H62.5785V67.6963H62.5877V66.1963ZM62.5785 66.1963H62.5692V67.6963H62.5785V66.1963ZM62.5692 66.1963H62.56V67.6963H62.5692V66.1963ZM62.56 66.1963H62.5507V67.6963H62.56V66.1963ZM62.5507 66.1963H62.5414V67.6963H62.5507V66.1963ZM62.5414 66.1963H62.5321V67.6963H62.5414V66.1963ZM62.5321 66.1963H62.5228V67.6963H62.5321V66.1963ZM62.5228 66.1963H62.5134V67.6963H62.5228V66.1963ZM62.5134 66.1963H62.504V67.6963H62.5134V66.1963ZM62.504 66.1963H62.4947V67.6963H62.504V66.1963ZM62.4947 66.1963H62.4853V67.6963H62.4947V66.1963ZM62.4853 66.1963H62.4758V67.6963H62.4853V66.1963ZM62.4758 66.1963H62.4664V67.6963H62.4758V66.1963ZM62.4664 66.1963H62.4569V67.6963H62.4664V66.1963ZM62.4569 66.1963H62.4475V67.6963H62.4569V66.1963ZM62.4475 66.1963H62.438V67.6963H62.4475V66.1963ZM62.438 66.1963H62.4285V67.6963H62.438V66.1963ZM62.4285 66.1963H62.419V67.6963H62.4285V66.1963ZM62.419 66.1963H62.4094V67.6963H62.419V66.1963ZM62.4094 66.1963H62.3999V67.6963H62.4094V66.1963ZM62.3999 66.1963H62.3903V67.6963H62.3999V66.1963ZM62.3903 66.1963H62.3807V67.6963H62.3903V66.1963ZM62.3807 66.1963H62.3711V67.6963H62.3807V66.1963ZM62.3711 66.1963H62.3615V67.6963H62.3711V66.1963ZM62.3615 66.1963H62.3518V67.6963H62.3615V66.1963ZM62.3518 66.1963H62.3421V67.6963H62.3518V66.1963ZM62.3421 66.1963H62.3325V67.6963H62.3421V66.1963ZM62.3325 66.1963H62.3228V67.6963H62.3325V66.1963ZM62.3228 66.1963H62.313V67.6963H62.3228V66.1963ZM62.313 66.1963H62.3033V67.6963H62.313V66.1963ZM62.3033 66.1963H62.2936V67.6963H62.3033V66.1963ZM62.2936 66.1963H62.2838V67.6963H62.2936V66.1963ZM62.2838 66.1963H62.274V67.6963H62.2838V66.1963ZM62.274 66.1963H62.2642V67.6963H62.274V66.1963ZM62.2642 66.1963H62.2544V67.6963H62.2642V66.1963ZM62.2544 66.1963H62.2445V67.6963H62.2544V66.1963ZM62.2445 66.1963H62.2347V67.6963H62.2445V66.1963ZM62.2347 66.1963H62.2248V67.6963H62.2347V66.1963ZM62.2248 66.1963H62.2149V67.6963H62.2248V66.1963ZM62.2149 66.1963H62.205V67.6963H62.2149V66.1963ZM62.205 66.1963H62.1951V67.6963H62.205V66.1963ZM62.1951 66.1963H62.1851V67.6963H62.1951V66.1963ZM62.1851 66.1963H62.1752V67.6963H62.1851V66.1963ZM62.1752 66.1963H62.1652V67.6963H62.1752V66.1963ZM62.1652 66.1963H62.1552V67.6963H62.1652V66.1963ZM62.1552 66.1963H62.1452V67.6963H62.1552V66.1963ZM62.1452 66.1963H62.1352V67.6963H62.1452V66.1963ZM62.1352 66.1963H62.1251V67.6963H62.1352V66.1963ZM62.1251 66.1963H62.115V67.6963H62.1251V66.1963ZM62.115 66.1963H62.105V67.6963H62.115V66.1963ZM62.105 66.1963H62.0949V67.6963H62.105V66.1963ZM62.0949 66.1963H62.0847V67.6963H62.0949V66.1963ZM62.0847 66.1963H62.0746V67.6963H62.0847V66.1963ZM62.0746 66.1963H62.0644V67.6963H62.0746V66.1963ZM62.0644 66.1963H62.0543V67.6963H62.0644V66.1963ZM62.0543 66.1963H62.0441V67.6963H62.0543V66.1963ZM62.0441 66.1963H62.0339V67.6963H62.0441V66.1963ZM62.0339 66.1963H62.0236V67.6963H62.0339V66.1963ZM62.0236 66.1963H62.0134V67.6963H62.0236V66.1963ZM62.0134 66.1963H62.0031V67.6963H62.0134V66.1963ZM62.0031 66.1963H61.9929V67.6963H62.0031V66.1963ZM61.9929 66.1963H61.9826V67.6963H61.9929V66.1963ZM61.9826 66.1963H61.9723V67.6963H61.9826V66.1963ZM61.9723 66.1963H61.9619V67.6963H61.9723V66.1963ZM61.9619 66.1963H61.9516V67.6963H61.9619V66.1963ZM61.9516 66.1963H61.9412V67.6963H61.9516V66.1963ZM61.9412 66.1963H61.9308V67.6963H61.9412V66.1963ZM61.9308 66.1963H61.9204V67.6963H61.9308V66.1963ZM61.9204 66.1963H61.91V67.6963H61.9204V66.1963ZM61.91 66.1963H61.8996V67.6963H61.91V66.1963ZM61.8996 66.1963H61.8891V67.6963H61.8996V66.1963ZM61.8891 66.1963H61.8787V67.6963H61.8891V66.1963ZM61.8787 66.1963H61.8682V67.6963H61.8787V66.1963ZM61.8682 66.1963H61.8577V67.6963H61.8682V66.1963ZM61.8577 66.1963H61.8471V67.6963H61.8577V66.1963ZM61.8471 66.1963H61.8366V67.6963H61.8471V66.1963ZM61.8366 66.1963H61.8261V67.6963H61.8366V66.1963ZM61.8261 66.1963H61.8155V67.6963H61.8261V66.1963ZM61.8155 66.1963H61.8049V67.6963H61.8155V66.1963ZM61.8049 66.1963H61.7943V67.6963H61.8049V66.1963ZM61.7943 66.1963H61.7836V67.6963H61.7943V66.1963ZM61.7836 66.1963H61.773V67.6963H61.7836V66.1963ZM61.773 66.1963H61.7623V67.6963H61.773V66.1963ZM61.7623 66.1963H61.7517V67.6963H61.7623V66.1963ZM61.7517 66.1963H61.741V67.6963H61.7517V66.1963ZM61.741 66.1963H61.7302V67.6963H61.741V66.1963ZM61.7302 66.1963H61.7195V67.6963H61.7302V66.1963ZM61.7195 66.1963H61.7088V67.6963H61.7195V66.1963ZM61.7088 66.1963H61.698V67.6963H61.7088V66.1963ZM61.698 66.1963H61.6872V67.6963H61.698V66.1963ZM61.6872 66.1963H61.6764V67.6963H61.6872V66.1963ZM61.6764 66.1963H61.6656V67.6963H61.6764V66.1963ZM61.6656 66.1963H61.6548V67.6963H61.6656V66.1963ZM61.6548 66.1963H61.6439V67.6963H61.6548V66.1963ZM61.6439 66.1963H61.633V67.6963H61.6439V66.1963ZM61.633 66.1963H61.6221V67.6963H61.633V66.1963ZM61.6221 66.1963H61.6112V67.6963H61.6221V66.1963ZM61.6112 66.1963H61.6003V67.6963H61.6112V66.1963ZM61.6003 66.1963H61.5894V67.6963H61.6003V66.1963ZM61.5894 66.1963H61.5784V67.6963H61.5894V66.1963ZM61.5784 66.1963H61.5674V67.6963H61.5784V66.1963ZM61.5674 66.1963H61.5564V67.6963H61.5674V66.1963ZM61.5564 66.1963H61.5454V67.6963H61.5564V66.1963ZM61.5454 66.1963H61.5344V67.6963H61.5454V66.1963ZM61.5344 66.1963H61.5233V67.6963H61.5344V66.1963ZM61.5233 66.1963H61.5123V67.6963H61.5233V66.1963ZM61.5123 66.1963H61.5012V67.6963H61.5123V66.1963ZM61.5012 66.1963H61.4901V67.6963H61.5012V66.1963ZM61.4901 66.1963H61.479V67.6963H61.4901V66.1963ZM61.479 66.1963H61.4678V67.6963H61.479V66.1963ZM61.4678 66.1963H61.4567V67.6963H61.4678V66.1963ZM61.4567 66.1963H61.4455V67.6963H61.4567V66.1963ZM61.4455 66.1963H61.4343V67.6963H61.4455V66.1963ZM61.4343 66.1963H61.4231V67.6963H61.4343V66.1963ZM61.4231 66.1963H61.4119V67.6963H61.4231V66.1963ZM61.4119 66.1963H61.4006V67.6963H61.4119V66.1963ZM61.4006 66.1963H61.3894V67.6963H61.4006V66.1963ZM61.3894 66.1963H61.3781V67.6963H61.3894V66.1963ZM61.3781 66.1963H61.3668V67.6963H61.3781V66.1963ZM61.3668 66.1963H61.3555V67.6963H61.3668V66.1963ZM61.3555 66.1963H61.3442V67.6963H61.3555V66.1963ZM61.3442 66.1963H61.3328V67.6963H61.3442V66.1963ZM61.3328 66.1963H61.3215V67.6963H61.3328V66.1963ZM61.3215 66.1963H61.3101V67.6963H61.3215V66.1963ZM61.3101 66.1963H61.2987V67.6963H61.3101V66.1963ZM61.2987 66.1963H61.2873V67.6963H61.2987V66.1963ZM61.2873 66.1963H61.2758V67.6963H61.2873V66.1963ZM61.2758 66.1963H61.2644V67.6963H61.2758V66.1963ZM61.2644 66.1963H61.2529V67.6963H61.2644V66.1963ZM61.2529 66.1963H61.2414V67.6963H61.2529V66.1963ZM61.2414 66.1963H61.2299V67.6963H61.2414V66.1963ZM61.2299 66.1963H61.2184V67.6963H61.2299V66.1963ZM61.2184 66.1963H61.2069V67.6963H61.2184V66.1963ZM61.2069 66.1963H61.1953V67.6963H61.2069V66.1963ZM61.1953 66.1963H61.1837V67.6963H61.1953V66.1963ZM61.1837 66.1963H61.1721V67.6963H61.1837V66.1963ZM61.1721 66.1963H61.1605V67.6963H61.1721V66.1963ZM61.1605 66.1963H61.1489V67.6963H61.1605V66.1963ZM61.1489 66.1963H61.1373V67.6963H61.1489V66.1963ZM61.1373 66.1963H61.1256V67.6963H61.1373V66.1963ZM61.1256 66.1963H61.1139V67.6963H61.1256V66.1963ZM61.1139 66.1963H61.1022V67.6963H61.1139V66.1963ZM61.1022 66.1963H61.0905V67.6963H61.1022V66.1963ZM61.0905 66.1963H61.0788V67.6963H61.0905V66.1963ZM61.0788 66.1963H61.067V67.6963H61.0788V66.1963ZM61.067 66.1963H61.0553V67.6963H61.067V66.1963ZM61.0553 66.1963H61.0435V67.6963H61.0553V66.1963ZM61.0435 66.1963H61.0317V67.6963H61.0435V66.1963ZM61.0317 66.1963H61.0199V67.6963H61.0317V66.1963ZM61.0199 66.1963H61.008V67.6963H61.0199V66.1963ZM61.008 66.1963H60.9962V67.6963H61.008V66.1963ZM60.9962 66.1963H60.9843V67.6963H60.9962V66.1963ZM60.9843 66.1963H60.9724V67.6963H60.9843V66.1963ZM60.9724 66.1963H60.9605V67.6963H60.9724V66.1963ZM60.9605 66.1963H60.9486V67.6963H60.9605V66.1963ZM60.9486 66.1963H60.9366V67.6963H60.9486V66.1963ZM60.9366 66.1963H60.9247V67.6963H60.9366V66.1963ZM60.9247 66.1963H60.9127V67.6963H60.9247V66.1963ZM60.9127 66.1963H60.9007V67.6963H60.9127V66.1963ZM60.9007 66.1963H60.8887V67.6963H60.9007V66.1963ZM60.8887 66.1963H60.8767V67.6963H60.8887V66.1963ZM60.8767 66.1963H60.8646V67.6963H60.8767V66.1963ZM60.8646 66.1963H60.8526V67.6963H60.8646V66.1963ZM60.8526 66.1963H60.8405V67.6963H60.8526V66.1963ZM60.8405 66.1963H60.8284V67.6963H60.8405V66.1963ZM60.8284 66.1963H60.8163V67.6963H60.8284V66.1963ZM60.8163 66.1963H60.8041V67.6963H60.8163V66.1963ZM60.8041 66.1963H60.792V67.6963H60.8041V66.1963ZM60.792 66.1963H60.7798V67.6963H60.792V66.1963ZM60.7798 66.1963H60.7676V67.6963H60.7798V66.1963ZM60.7676 66.1963H60.7554V67.6963H60.7676V66.1963ZM60.7554 66.1963H60.7432V67.6963H60.7554V66.1963ZM60.7432 66.1963H60.731V67.6963H60.7432V66.1963ZM60.731 66.1963H60.7187V67.6963H60.731V66.1963ZM60.7187 66.1963H60.7064V67.6963H60.7187V66.1963ZM60.7064 66.1963H60.6941V67.6963H60.7064V66.1963ZM60.6941 66.1963H60.6818V67.6963H60.6941V66.1963ZM60.6818 66.1963H60.6695V67.6963H60.6818V66.1963ZM60.6695 66.1963H60.6571V67.6963H60.6695V66.1963ZM60.6571 66.1963H60.6448V67.6963H60.6571V66.1963ZM60.6448 66.1963H60.6324V67.6963H60.6448V66.1963ZM60.6324 66.1963H60.62V67.6963H60.6324V66.1963ZM60.62 66.1963H60.6076V67.6963H60.62V66.1963ZM60.6076 66.1963H60.5952V67.6963H60.6076V66.1963ZM60.5952 66.1963H60.5827V67.6963H60.5952V66.1963ZM60.5827 66.1963H60.5702V67.6963H60.5827V66.1963ZM60.5702 66.1963H60.5578V67.6963H60.5702V66.1963ZM60.5578 66.1963H60.5453V67.6963H60.5578V66.1963ZM60.5453 66.1963H60.5327V67.6963H60.5453V66.1963ZM60.5327 66.1963H60.5202V67.6963H60.5327V66.1963ZM60.5202 66.1963H60.5076V67.6963H60.5202V66.1963ZM60.5076 66.1963H60.4951V67.6963H60.5076V66.1963ZM60.4951 66.1963H60.4825V67.6963H60.4951V66.1963ZM60.4825 66.1963H60.4699V67.6963H60.4825V66.1963ZM60.4699 66.1963H60.4572V67.6963H60.4699V66.1963ZM60.4572 66.1963H60.4446V67.6963H60.4572V66.1963ZM60.4446 66.1963H60.4319V67.6963H60.4446V66.1963ZM60.4319 66.1963H60.4193V67.6963H60.4319V66.1963ZM60.4193 66.1963H60.4066V67.6963H60.4193V66.1963ZM60.4066 66.1963H60.3939V67.6963H60.4066V66.1963ZM60.3939 66.1963H60.3811V67.6963H60.3939V66.1963ZM60.3811 66.1963H60.3684V67.6963H60.3811V66.1963ZM60.3684 66.1963H60.3556V67.6963H60.3684V66.1963ZM60.3556 66.1963H60.3428V67.6963H60.3556V66.1963ZM60.3428 66.1963H60.33V67.6963H60.3428V66.1963ZM60.33 66.1963H60.3172V67.6963H60.33V66.1963ZM60.3172 66.1963H60.3044V67.6963H60.3172V66.1963ZM60.3044 66.1963H60.2915V67.6963H60.3044V66.1963ZM60.2915 66.1963H60.2787V67.6963H60.2915V66.1963ZM60.2787 66.1963H60.2658V67.6963H60.2787V66.1963ZM60.2658 66.1963H60.2529V67.6963H60.2658V66.1963ZM60.2529 66.1963H60.2399V67.6963H60.2529V66.1963ZM60.2399 66.1963H60.227V67.6963H60.2399V66.1963ZM60.227 66.1963H60.214V67.6963H60.227V66.1963ZM60.214 66.1963H60.2011V67.6963H60.214V66.1963ZM60.2011 66.1963H60.1881V67.6963H60.2011V66.1963ZM60.1881 66.1963H60.1751V67.6963H60.1881V66.1963ZM60.1751 66.1963H60.162V67.6963H60.1751V66.1963ZM60.162 66.1963H60.149V67.6963H60.162V66.1963ZM60.149 66.1963H60.1359V67.6963H60.149V66.1963ZM60.1359 66.1963H60.1228V67.6963H60.1359V66.1963ZM60.1228 66.1963H60.1097V67.6963H60.1228V66.1963ZM60.1097 66.1963H60.0966V67.6963H60.1097V66.1963ZM60.0966 66.1963H60.0835V67.6963H60.0966V66.1963ZM60.0835 66.1963H60.0703V67.6963H60.0835V66.1963ZM60.0703 66.1963H60.0572V67.6963H60.0703V66.1963ZM60.0572 66.1963H60.044V67.6963H60.0572V66.1963ZM60.044 66.1963H60.0308V67.6963H60.044V66.1963ZM60.0308 66.1963H60.0176V67.6963H60.0308V66.1963ZM60.0176 66.1963H60.0043V67.6963H60.0176V66.1963ZM60.0043 66.1963H59.9911V67.6963H60.0043V66.1963ZM59.9911 66.1963H59.9778V67.6963H59.9911V66.1963ZM59.9778 66.1963H59.9645V67.6963H59.9778V66.1963ZM59.9645 66.1963H59.9512V67.6963H59.9645V66.1963ZM59.9512 66.1963H59.9379V67.6963H59.9512V66.1963ZM59.9379 66.1963H59.9245V67.6963H59.9379V66.1963ZM59.9245 66.1963H59.9112V67.6963H59.9245V66.1963ZM59.9112 66.1963H59.8978V67.6963H59.9112V66.1963ZM59.8978 66.1963H59.8844V67.6963H59.8978V66.1963ZM59.8844 66.1963H59.871V67.6963H59.8844V66.1963ZM59.871 66.1963H59.8576V67.6963H59.871V66.1963ZM59.8576 66.1963H59.8441V67.6963H59.8576V66.1963ZM59.8441 66.1963H59.8306V67.6963H59.8441V66.1963ZM59.8306 66.1963H59.8172V67.6963H59.8306V66.1963ZM59.8172 66.1963H59.8037V67.6963H59.8172V66.1963ZM59.8037 66.1963H59.7901V67.6963H59.8037V66.1963ZM59.7901 66.1963H59.7766V67.6963H59.7901V66.1963ZM59.7766 66.1963H59.763V67.6963H59.7766V66.1963ZM59.763 66.1963H59.7495V67.6963H59.763V66.1963ZM59.7495 66.1963H59.7359V67.6963H59.7495V66.1963ZM59.7359 66.1963H59.7223V67.6963H59.7359V66.1963ZM59.7223 66.1963H59.7087V67.6963H59.7223V66.1963ZM59.7087 66.1963H59.695V67.6963H59.7087V66.1963ZM59.695 66.1963H59.6814V67.6963H59.695V66.1963ZM59.6814 66.1963H59.6677V67.6963H59.6814V66.1963ZM59.6677 66.1963H59.654V67.6963H59.6677V66.1963ZM59.654 66.1963H59.6403V67.6963H59.654V66.1963ZM59.6403 66.1963H59.6265V67.6963H59.6403V66.1963ZM59.6265 66.1963H59.6128V67.6963H59.6265V66.1963ZM59.6128 66.1963H59.599V67.6963H59.6128V66.1963ZM59.599 66.1963H59.5852V67.6963H59.599V66.1963ZM59.5852 66.1963H59.5714V67.6963H59.5852V66.1963ZM59.5714 66.1963H59.5576V67.6963H59.5714V66.1963ZM59.5576 66.1963H59.5438V67.6963H59.5576V66.1963ZM59.5438 66.1963H59.5299V67.6963H59.5438V66.1963ZM59.5299 66.1963H59.5161V67.6963H59.5299V66.1963ZM59.5161 66.1963H59.5022V67.6963H59.5161V66.1963ZM59.5022 66.1963H59.4883V67.6963H59.5022V66.1963ZM59.4883 66.1963H59.4744V67.6963H59.4883V66.1963ZM59.4744 66.1963H59.4604V67.6963H59.4744V66.1963ZM59.4604 66.1963H59.4465V67.6963H59.4604V66.1963ZM59.4465 66.1963H59.4325V67.6963H59.4465V66.1963ZM59.4325 66.1963H59.4185V67.6963H59.4325V66.1963ZM59.4185 66.1963H59.4045V67.6963H59.4185V66.1963ZM59.4045 66.1963H59.3905V67.6963H59.4045V66.1963ZM59.3905 66.1963H59.3764V67.6963H59.3905V66.1963ZM59.3764 66.1963H59.3624V67.6963H59.3764V66.1963ZM59.3624 66.1963H59.3483V67.6963H59.3624V66.1963ZM59.3483 66.1963H59.3342V67.6963H59.3483V66.1963ZM59.3342 66.1963H59.3201V67.6963H59.3342V66.1963ZM59.3201 66.1963H59.3059V67.6963H59.3201V66.1963ZM59.3059 66.1963H59.2918V67.6963H59.3059V66.1963ZM59.2918 66.1963H59.2776V67.6963H59.2918V66.1963ZM59.2776 66.1963H59.2634V67.6963H59.2776V66.1963ZM59.2634 66.1963H59.2492V67.6963H59.2634V66.1963ZM59.2492 66.1963H59.235V67.6963H59.2492V66.1963ZM59.235 66.1963H59.2208V67.6963H59.235V66.1963ZM59.2208 66.1963H59.2065V67.6963H59.2208V66.1963ZM59.2065 66.1963H59.1922V67.6963H59.2065V66.1963ZM59.1922 66.1963H59.178V67.6963H59.1922V66.1963ZM59.178 66.1963H59.1637V67.6963H59.178V66.1963ZM59.1637 66.1963H59.1493V67.6963H59.1637V66.1963ZM59.1493 66.1963H59.135V67.6963H59.1493V66.1963ZM59.135 66.1963H59.1206V67.6963H59.135V66.1963ZM59.1206 66.1963H59.1062V67.6963H59.1206V66.1963ZM59.1062 66.1963H59.0919V67.6963H59.1062V66.1963ZM59.0919 66.1963H59.0774V67.6963H59.0919V66.1963ZM59.0774 66.1963H59.063V67.6963H59.0774V66.1963ZM59.063 66.1963H59.0486V67.6963H59.063V66.1963ZM59.0486 66.1963H59.0341V67.6963H59.0486V66.1963ZM59.0341 66.1963H59.0196V67.6963H59.0341V66.1963ZM59.0196 66.1963H59.0051V67.6963H59.0196V66.1963ZM59.0051 66.1963H58.9906V67.6963H59.0051V66.1963ZM58.9906 66.1963H58.9761V67.6963H58.9906V66.1963ZM58.9761 66.1963H58.9615V67.6963H58.9761V66.1963ZM58.9615 66.1963H58.9469V67.6963H58.9615V66.1963ZM58.9469 66.1963H58.9324V67.6963H58.9469V66.1963ZM58.9324 66.1963H58.9177V67.6963H58.9324V66.1963ZM58.9177 66.1963H58.9031V67.6963H58.9177V66.1963ZM58.9031 66.1963H58.8885V67.6963H58.9031V66.1963ZM58.8885 66.1963H58.8738V67.6963H58.8885V66.1963ZM58.8738 66.1963H58.8591V67.6963H58.8738V66.1963ZM58.8591 66.1963H58.8445V67.6963H58.8591V66.1963ZM58.8445 66.1963H58.8297V67.6963H58.8445V66.1963ZM58.8297 66.1963H58.815V67.6963H58.8297V66.1963ZM58.815 66.1963H58.8003V67.6963H58.815V66.1963ZM58.8003 66.1963H58.7855V67.6963H58.8003V66.1963ZM58.7855 66.1963H58.7707V67.6963H58.7855V66.1963ZM58.7707 66.1963H58.7559V67.6963H58.7707V66.1963ZM58.7559 66.1963H58.7411V67.6963H58.7559V66.1963ZM58.7411 66.1963H58.7263V67.6963H58.7411V66.1963ZM58.7263 66.1963H58.7114V67.6963H58.7263V66.1963ZM58.7114 66.1963H58.6966V67.6963H58.7114V66.1963ZM58.6966 66.1963H58.6817V67.6963H58.6966V66.1963ZM58.6817 66.1963H58.6668V67.6963H58.6817V66.1963ZM58.6668 66.1963H58.6519V67.6963H58.6668V66.1963ZM58.6519 66.1963H58.6369V67.6963H58.6519V66.1963ZM58.6369 66.1963H58.622V67.6963H58.6369V66.1963ZM58.622 66.1963H58.607V67.6963H58.622V66.1963ZM58.607 66.1963H58.592V67.6963H58.607V66.1963ZM58.592 66.1963H58.577V67.6963H58.592V66.1963ZM58.577 66.1963H58.562V67.6963H58.577V66.1963ZM58.562 66.1963H58.5469V67.6963H58.562V66.1963ZM58.5469 66.1963H58.5319V67.6963H58.5469V66.1963ZM58.5319 66.1963H58.5168V67.6963H58.5319V66.1963ZM58.5168 66.1963H58.5017V67.6963H58.5168V66.1963ZM58.5017 66.1963H58.4866V67.6963H58.5017V66.1963ZM58.4866 66.1963H58.4714V67.6963H58.4866V66.1963ZM58.4714 66.1963H58.4563V67.6963H58.4714V66.1963ZM58.4563 66.1963H58.4411V67.6963H58.4563V66.1963ZM58.4411 66.1963H58.4259V67.6963H58.4411V66.1963ZM58.4259 66.1963H58.4107V67.6963H58.4259V66.1963ZM58.4107 66.1963H58.3955V67.6963H58.4107V66.1963ZM58.3955 66.1963H58.3803V67.6963H58.3955V66.1963ZM58.3803 66.1963H58.365V67.6963H58.3803V66.1963ZM58.365 66.1963H58.3498V67.6963H58.365V66.1963ZM58.3498 66.1963H58.3345V67.6963H58.3498V66.1963ZM58.3345 66.1963H58.3192V67.6963H58.3345V66.1963ZM58.3192 66.1963H58.3038V67.6963H58.3192V66.1963ZM58.3038 66.1963H58.2885V67.6963H58.3038V66.1963ZM58.2885 66.1963H58.2731V67.6963H58.2885V66.1963ZM58.2731 66.1963H58.2578V67.6963H58.2731V66.1963ZM58.2578 66.1963H58.2424V67.6963H58.2578V66.1963ZM58.2424 66.1963H58.227V67.6963H58.2424V66.1963ZM58.227 66.1963H58.2115V67.6963H58.227V66.1963ZM58.2115 66.1963H58.1961V67.6963H58.2115V66.1963ZM58.1961 66.1963H58.1806V67.6963H58.1961V66.1963ZM58.1806 66.1963H58.1651V67.6963H58.1806V66.1963ZM58.1651 66.1963H58.1496V67.6963H58.1651V66.1963ZM58.1496 66.1963H58.1341V67.6963H58.1496V66.1963ZM58.1341 66.1963H58.1186V67.6963H58.1341V66.1963ZM58.1186 66.1963H58.103V67.6963H58.1186V66.1963ZM58.103 66.1963H58.0875V67.6963H58.103V66.1963ZM58.0875 66.1963H58.0719V67.6963H58.0875V66.1963ZM58.0719 66.1963H58.0563V67.6963H58.0719V66.1963ZM58.0563 66.1963H58.0407V67.6963H58.0563V66.1963ZM58.0407 66.1963H58.025V67.6963H58.0407V66.1963ZM58.025 66.1963H58.0094V67.6963H58.025V66.1963ZM58.0094 66.1963H57.9937V67.6963H58.0094V66.1963ZM57.9937 66.1963H57.978V67.6963H57.9937V66.1963ZM57.978 66.1963H57.9623V67.6963H57.978V66.1963ZM57.9623 66.1963H57.9466V67.6963H57.9623V66.1963ZM57.9466 66.1963H57.9308V67.6963H57.9466V66.1963ZM57.9308 66.1963H57.9151V67.6963H57.9308V66.1963ZM57.9151 66.1963H57.8993V67.6963H57.9151V66.1963ZM57.8993 66.1963H57.8835V67.6963H57.8993V66.1963ZM57.8835 66.1963H57.8677V67.6963H57.8835V66.1963ZM57.8677 66.1963H57.8518V67.6963H57.8677V66.1963ZM57.8518 66.1963H57.836V67.6963H57.8518V66.1963ZM57.836 66.1963H57.8201V67.6963H57.836V66.1963ZM57.8201 66.1963H57.8042V67.6963H57.8201V66.1963ZM57.8042 66.1963H57.7883V67.6963H57.8042V66.1963ZM57.7883 66.1963H57.7724V67.6963H57.7883V66.1963ZM57.7724 66.1963H57.7565V67.6963H57.7724V66.1963ZM57.7565 66.1963H57.7405V67.6963H57.7565V66.1963ZM57.7405 66.1963H57.7246V67.6963H57.7405V66.1963ZM57.7246 66.1963H57.7086V67.6963H57.7246V66.1963ZM57.7086 66.1963H57.6926V67.6963H57.7086V66.1963ZM57.6926 66.1963H57.6765V67.6963H57.6926V66.1963ZM57.6765 66.1963H57.6605V67.6963H57.6765V66.1963ZM57.6605 66.1963H57.6444V67.6963H57.6605V66.1963ZM57.6444 66.1963H57.6284V67.6963H57.6444V66.1963ZM57.6284 66.1963H57.6123V67.6963H57.6284V66.1963ZM57.6123 66.1963H57.5961V67.6963H57.6123V66.1963ZM57.5961 66.1963H57.58V67.6963H57.5961V66.1963ZM57.58 66.1963H57.5639V67.6963H57.58V66.1963ZM57.5639 66.1963H57.5477V67.6963H57.5639V66.1963ZM57.5477 66.1963H57.5315V67.6963H57.5477V66.1963ZM57.5315 66.1963H57.5153V67.6963H57.5315V66.1963ZM57.5153 66.1963H57.4991V67.6963H57.5153V66.1963ZM57.4991 66.1963H57.4829V67.6963H57.4991V66.1963ZM57.4829 66.1963H57.4666V67.6963H57.4829V66.1963ZM57.4666 66.1963H57.4503V67.6963H57.4666V66.1963ZM57.4503 66.1963H57.4341V67.6963H57.4503V66.1963ZM57.4341 66.1963H57.4178V67.6963H57.4341V66.1963ZM57.4178 66.1963H57.4014V67.6963H57.4178V66.1963ZM57.4014 66.1963H57.3851V67.6963H57.4014V66.1963ZM57.3851 66.1963H57.3687V67.6963H57.3851V66.1963ZM57.3687 66.1963H57.3524V67.6963H57.3687V66.1963ZM57.3524 66.1963H57.336V67.6963H57.3524V66.1963ZM57.336 66.1963H57.3196V67.6963H57.336V66.1963ZM57.3196 66.1963H57.3031V67.6963H57.3196V66.1963ZM57.3031 66.1963H57.2867V67.6963H57.3031V66.1963ZM57.2867 66.1963H57.2702V67.6963H57.2867V66.1963ZM57.2702 66.1963H57.2537V67.6963H57.2702V66.1963ZM57.2537 66.1963H57.2372V67.6963H57.2537V66.1963ZM57.2372 66.1963H57.2207V67.6963H57.2372V66.1963ZM57.2207 66.1963H57.2042V67.6963H57.2207V66.1963ZM57.2042 66.1963H57.1876V67.6963H57.2042V66.1963ZM57.1876 66.1963H57.1711V67.6963H57.1876V66.1963ZM57.1711 66.1963H57.1545V67.6963H57.1711V66.1963ZM57.1545 66.1963H57.1379V67.6963H57.1545V66.1963ZM57.1379 66.1963H57.1213V67.6963H57.1379V66.1963ZM57.1213 66.1963H57.1046V67.6963H57.1213V66.1963ZM57.1046 66.1963H57.088V67.6963H57.1046V66.1963ZM57.088 66.1963H57.0713V67.6963H57.088V66.1963ZM57.0713 66.1963H57.0546V67.6963H57.0713V66.1963ZM57.0546 66.1963H57.0379V67.6963H57.0546V66.1963ZM57.0379 66.1963H57.0212V67.6963H57.0379V66.1963ZM57.0212 66.1963H57.0044V67.6963H57.0212V66.1963ZM57.0044 66.1963H56.9877V67.6963H57.0044V66.1963ZM56.9877 66.1963H56.9709V67.6963H56.9877V66.1963ZM56.9709 66.1963H56.9541V67.6963H56.9709V66.1963ZM56.9541 66.1963H56.9373V67.6963H56.9541V66.1963ZM56.9373 66.1963H56.9205V67.6963H56.9373V66.1963ZM56.9205 66.1963H56.9036V67.6963H56.9205V66.1963ZM56.9036 66.1963H56.8867V67.6963H56.9036V66.1963ZM56.8867 66.1963H56.8699V67.6963H56.8867V66.1963ZM56.8699 66.1963H56.853V67.6963H56.8699V66.1963ZM56.853 66.1963H56.836V67.6963H56.853V66.1963ZM56.836 66.1963H56.8191V67.6963H56.836V66.1963ZM56.8191 66.1963H56.8022V67.6963H56.8191V66.1963ZM56.8022 66.1963H56.7852V67.6963H56.8022V66.1963ZM56.7852 66.1963H56.7682V67.6963H56.7852V66.1963ZM56.7682 66.1963H56.7512V67.6963H56.7682V66.1963ZM56.7512 66.1963H56.7342V67.6963H56.7512V66.1963ZM56.7342 66.1963H56.7171V67.6963H56.7342V66.1963ZM56.7171 66.1963H56.7001V67.6963H56.7171V66.1963ZM56.7001 66.1963H56.683V67.6963H56.7001V66.1963ZM56.683 66.1963H56.6659V67.6963H56.683V66.1963ZM56.6659 66.1963H56.6488V67.6963H56.6659V66.1963ZM56.6488 66.1963H56.6317V67.6963H56.6488V66.1963ZM56.6317 66.1963H56.6145V67.6963H56.6317V66.1963ZM56.6145 66.1963H56.5974V67.6963H56.6145V66.1963ZM56.5974 66.1963H56.5802V67.6963H56.5974V66.1963ZM56.5802 66.1963H56.563V67.6963H56.5802V66.1963ZM56.563 66.1963H56.5458V67.6963H56.563V66.1963ZM56.5458 66.1963H56.5285V67.6963H56.5458V66.1963ZM56.5285 66.1963H56.5113V67.6963H56.5285V66.1963ZM56.5113 66.1963H56.494V67.6963H56.5113V66.1963ZM56.494 66.1963H56.4767V67.6963H56.494V66.1963ZM56.4767 66.1963H56.4594V67.6963H56.4767V66.1963ZM56.4594 66.1963H56.4421V67.6963H56.4594V66.1963ZM56.4421 66.1963H56.4248V67.6963H56.4421V66.1963ZM56.4248 66.1963H56.4074V67.6963H56.4248V66.1963ZM56.4074 66.1963H56.39V67.6963H56.4074V66.1963ZM56.39 66.1963H56.3726V67.6963H56.39V66.1963ZM56.3726 66.1963H56.3552V67.6963H56.3726V66.1963ZM56.3552 66.1963H56.3378V67.6963H56.3552V66.1963ZM56.3378 66.1963H56.3204V67.6963H56.3378V66.1963ZM56.3204 66.1963H56.3029V67.6963H56.3204V66.1963ZM56.3029 66.1963H56.2854V67.6963H56.3029V66.1963ZM56.2854 66.1963H56.2679V67.6963H56.2854V66.1963ZM56.2679 66.1963H56.2504V67.6963H56.2679V66.1963ZM56.2504 66.1963H56.2329V67.6963H56.2504V66.1963ZM56.2329 66.1963H56.2153V67.6963H56.2329V66.1963ZM56.2153 66.1963H56.1978V67.6963H56.2153V66.1963ZM56.1978 66.1963H56.1802V67.6963H56.1978V66.1963ZM56.1802 66.1963H56.1626V67.6963H56.1802V66.1963ZM56.1626 66.1963H56.145V67.6963H56.1626V66.1963ZM56.145 66.1963H56.1273V67.6963H56.145V66.1963ZM56.1273 66.1963H56.1097V67.6963H56.1273V66.1963ZM56.1097 66.1963H56.092V67.6963H56.1097V66.1963ZM56.092 66.1963H56.0743V67.6963H56.092V66.1963ZM56.0743 66.1963H56.0566V67.6963H56.0743V66.1963ZM56.0566 66.1963H56.0389V67.6963H56.0566V66.1963ZM56.0389 66.1963H56.0211V67.6963H56.0389V66.1963ZM56.0211 66.1963H56.0034V67.6963H56.0211V66.1963ZM56.0034 66.1963H55.9856V67.6963H56.0034V66.1963ZM55.9856 66.1963H55.9678V67.6963H55.9856V66.1963ZM55.9678 66.1963H55.95V67.6963H55.9678V66.1963ZM55.95 66.1963H55.9322V67.6963H55.95V66.1963ZM55.9322 66.1963H55.9143V67.6963H55.9322V66.1963ZM55.9143 66.1963H55.8964V67.6963H55.9143V66.1963ZM55.8964 66.1963H55.8786V67.6963H55.8964V66.1963ZM55.8786 66.1963H55.8607V67.6963H55.8786V66.1963ZM55.8607 66.1963H55.8427V67.6963H55.8607V66.1963ZM55.8427 66.1963H55.8248V67.6963H55.8427V66.1963ZM55.8248 66.1963C53.8461 66.1963 52.1424 67.593 51.7543 69.5333L53.2252 69.8274C53.4731 68.5883 54.5611 67.6963 55.8248 67.6963V66.1963ZM51.7543 69.5333L51.752 69.5449L53.2229 69.8391L53.2252 69.8274L51.7543 69.5333ZM51.7477 69.5682L51.7458 69.5799L53.2252 69.8274L53.2272 69.8158L51.7477 69.5682ZM51.7458 69.5799L51.2696 72.4257L52.749 72.6733L53.2252 69.8274L51.7458 69.5799ZM51.2696 72.4257L50.9294 74.4584L52.4089 74.706L52.749 72.6733L51.2696 72.4257ZM50.9294 74.4584C50.7927 75.2755 51.3443 76.0487 52.1613 76.1854L52.4089 74.706H52.4089L50.9294 74.4584ZM52.1613 76.1854C52.9784 76.3222 53.7516 75.7706 53.8883 74.9536L52.4089 74.706H52.4089L52.1613 76.1854ZM53.8883 74.9536L54.2284 72.9208L52.749 72.6733L52.4089 74.706L53.8883 74.9536ZM54.2284 72.9208L54.7025 70.0877L53.2231 69.8401L52.749 72.6733L54.2284 72.9208Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("mask", { id: "path-7-inside-1_0_2344", fill: "white" }, /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M76.3398 107.068C81.3265 107.068 85.3689 103.025 85.3689 98.0387C85.3689 97.7339 85.3538 97.4327 85.3244 97.1357H119.18C119.456 97.1357 119.68 97.3596 119.68 97.6357V114.806C119.68 117.015 117.889 118.806 115.68 118.806H37C34.7909 118.806 33 117.015 33 114.806V97.6357C33 97.3596 33.2239 97.1357 33.5 97.1357H67.3553C67.3258 97.4327 67.3107 97.7339 67.3107 98.0387C67.3107 103.025 71.3532 107.068 76.3398 107.068Z" })), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M76.3398 107.068C81.3265 107.068 85.3689 103.025 85.3689 98.0387C85.3689 97.7339 85.3538 97.4327 85.3244 97.1357H119.18C119.456 97.1357 119.68 97.3596 119.68 97.6357V114.806C119.68 117.015 117.889 118.806 115.68 118.806H37C34.7909 118.806 33 117.015 33 114.806V97.6357C33 97.3596 33.2239 97.1357 33.5 97.1357H67.3553C67.3258 97.4327 67.3107 97.7339 67.3107 98.0387C67.3107 103.025 71.3532 107.068 76.3398 107.068Z", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M85.3244 97.1357V95.6357H83.6681L83.8317 97.2839L85.3244 97.1357ZM67.3553 97.1357L68.8479 97.2839L69.0116 95.6357H67.3553V97.1357ZM83.8689 98.0387C83.8689 102.197 80.498 105.568 76.3398 105.568V108.568C82.1549 108.568 86.8689 103.854 86.8689 98.0387H83.8689ZM83.8317 97.2839C83.8563 97.5318 83.8689 97.7835 83.8689 98.0387H86.8689C86.8689 97.6843 86.8514 97.3337 86.817 96.9875L83.8317 97.2839ZM85.3244 98.6357H119.18V95.6357H85.3244V98.6357ZM119.18 98.6357C118.627 98.6357 118.18 98.188 118.18 97.6357H121.18C121.18 96.5312 120.284 95.6357 119.18 95.6357V98.6357ZM118.18 97.6357V114.806H121.18V97.6357H118.18ZM118.18 114.806C118.18 116.186 117.06 117.306 115.68 117.306V120.306C118.717 120.306 121.18 117.843 121.18 114.806H118.18ZM115.68 117.306H37V120.306H115.68V117.306ZM37 117.306C35.6193 117.306 34.5 116.186 34.5 114.806H31.5C31.5 117.843 33.9624 120.306 37 120.306V117.306ZM34.5 114.806V97.6357H31.5V114.806H34.5ZM34.5 97.6357C34.5 98.188 34.0523 98.6357 33.5 98.6357V95.6357C32.3954 95.6357 31.5 96.5312 31.5 97.6357H34.5ZM33.5 98.6357H67.3553V95.6357H33.5V98.6357ZM68.8107 98.0387C68.8107 97.7835 68.8233 97.5318 68.8479 97.2839L65.8626 96.9875C65.8282 97.3337 65.8107 97.6843 65.8107 98.0387H68.8107ZM76.3398 105.568C72.1816 105.568 68.8107 102.197 68.8107 98.0387H65.8107C65.8107 103.854 70.5247 108.568 76.3398 108.568V105.568Z", fill: "#3B3552", mask: "url(#path-7-inside-1_0_2344)" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M76.3396 24V39.3495", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M96.4296 30.4453L88.7549 43.7384", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M56.25 30.4453L63.9248 43.7384", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M70.5 125.5H87.5", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M92.1944 125.5H98.8056", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" })); const FileSearch = ({ width = 152, height = 169 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 169", version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Symbols", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd", strokeLinecap: "round", strokeLinejoin: "round" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Group-10", transform: "translate(2.000000, 2.000000)" }, /*#__PURE__*/React__namespace.default.createElement("path", { d: "M74,124.741589 L74,161.762456 C74,163.553649 72.5479505,165.005699 70.7567568,165.005699 C70.191601,165.005699 69.6362551,164.858017 69.1457523,164.57729 L6.67495026,128.823589 L6.67495026,128.823589 C2.54398439,126.459328 0,122.095239 0,117.373019 L0,47.9293229 C0,43.2071024 2.54398439,38.843014 6.67495026,36.4787525 L67.3072083,1.77729956 C71.4477337,-0.592433188 76.5522663,-0.592433188 80.6927917,1.77729956 L141.32505,36.4787525 C145.456016,38.843014 148,43.2071024 148,47.9293229 L148,117.373019 C148,122.095239 145.456016,126.459328 141.32505,128.823589 L92.2812226,156.892675", id: "Path-Copy-5", stroke: "#3B3552", strokeWidth: "3" }), /*#__PURE__*/React__namespace.default.createElement("g", { id: "Group", transform: "translate(26.000000, 44.000000)", fill: "#3040D6", stroke: "#3B3552", strokeWidth: "0.5" }, /*#__PURE__*/React__namespace.default.createElement("path", { d: "M27.9631397,3.55271368e-15 C33.4624013,3.55271368e-15 38.3808566,2.52087 41.6553672,6.48487465 L81.9472527,6.48596321 C84.0762362,6.48596321 85.8021183,8.23554166 85.8021183,10.3937561 L85.802,28.325 L88.2515308,28.3252823 L88.251,32.429 L93,32.4298161 L93,59.7472937 L85.8455246,67 L58.8980359,67 L58.898,62.186 L54.8490941,62.1863343 L54.849,59.703 L23.5644342,59.7032914 C21.4354508,59.7032914 19.7095687,57.9537129 19.7095687,55.7954985 L19.7093454,34.1452905 C18.6082798,33.562194 17.574686,32.8660733 16.6235455,32.0721158 L14.6182598,34.103252 L14.8620406,34.3506585 C15.8011053,35.3026166 15.8011053,36.8460456 14.8620406,37.7980037 L7.72142069,45.0366643 C6.78235595,45.9886224 5.25983119,45.9886224 4.32076645,45.0366643 L1.70429855,42.3842723 C0.765233815,41.4323142 0.765233815,39.8888852 1.70429855,38.9369271 L8.84491844,31.6982665 C9.78398317,30.7463084 11.3065079,30.7463084 12.2455727,31.6982665 L12.4882598,31.944252 L14.4672092,29.9403992 C11.7540916,26.766322 10.112393,22.6254316 10.112393,18.0958374 C10.112393,8.10178235 18.1044446,3.55271368e-15 27.9631397,3.55271368e-15 Z M91.688386,33.7594385 L60.2096499,33.7594385 L60.2096499,65.6703775 L84.84,65.67 L84.840268,58.7282349 L91.688,58.728 L91.688386,33.7594385 Z M91.538,59.348 L85.4523545,59.3487254 L85.452,65.518 L91.538,59.348 Z M87.6394442,28.9457728 L55.4611807,28.9457728 L55.4611807,61.5658438 L58.898,61.565 L58.8980359,32.4298161 L87.639,32.429 L87.6394442,28.9457728 Z M84.49,15.163 L45.5807319,15.1635935 C45.7341329,16.1179982 45.8138864,17.0974762 45.8138864,18.0958374 C45.8138864,28.0898924 37.8218349,36.1916747 27.9631397,36.1916747 C25.5007911,36.1916747 23.1548876,35.6862683 21.0208682,34.7722046 L21.0211827,55.7954985 C21.0211827,57.2193827 22.1598352,58.3736689 23.5644342,58.3736689 L54.849,58.373 L54.8490941,28.3252823 L84.49,28.325 L84.49,15.163 Z M78.4992495,48.4723056 C78.6682725,48.4723056 78.8052927,48.6112071 78.8052927,48.7825508 C78.8052927,48.9538945 78.6682725,49.0927961 78.4992495,49.0927961 L67.0125174,49.0927961 C66.8434944,49.0927961 66.7064742,48.9538945 66.7064742,48.7825508 C66.7064742,48.6112071 66.8434944,48.4723056 67.0125174,48.4723056 L78.4992495,48.4723056 Z M9.77236959,32.6384516 L2.63174971,39.8771121 C2.2049021,40.3098203 2.2049021,41.011379 2.63174971,41.4440872 L5.24821761,44.0964792 C5.67506522,44.5291874 6.36712193,44.5291874 6.79396954,44.0964792 L13.9345894,36.8578186 C14.361437,36.4251104 14.361437,35.7235518 13.9345894,35.2908435 L11.3181215,32.6384516 C10.8912739,32.2057433 10.1992172,32.2057433 9.77236959,32.6384516 Z M85.5477644,42.7970878 C85.7167874,42.7970878 85.8538076,42.9359893 85.8538076,43.107333 C85.8538076,43.2786767 85.7167874,43.4175783 85.5477644,43.4175783 L67.1689931,43.4175783 C66.9999701,43.4175783 66.8629499,43.2786767 66.8629499,43.107333 C66.8629499,42.9359893 66.9999701,42.7970878 67.1689931,42.7970878 L85.5477644,42.7970878 Z M27.9631397,1.32962246 C18.828829,1.32962246 11.424007,8.83611256 11.424007,18.0958374 C11.424007,27.3555622 18.828829,34.8620523 27.9631397,34.8620523 C37.0974505,34.8620523 44.5022724,27.3555622 44.5022724,18.0958374 C44.5022724,8.83611256 37.0974505,1.32962246 27.9631397,1.32962246 Z M14.8764421,30.4029656 L12.9212598,32.383252 L14.1852598,33.665252 L16.1555297,31.6676037 C15.7087055,31.2678064 15.281777,30.8456865 14.8764421,30.4029656 Z M27.9631397,4.408293 C35.4201767,4.408293 41.4652995,10.5364153 41.4652995,18.0958374 C41.4652995,25.6552594 35.4201767,31.7833817 27.9631397,31.7833817 C20.5061028,31.7833817 14.46098,25.6552594 14.46098,18.0958374 C14.46098,10.5364153 20.5061028,4.408293 27.9631397,4.408293 Z M27.9631397,5.02878348 C20.8441489,5.02878348 15.0730665,10.8791028 15.0730665,18.0958374 C15.0730665,25.312572 20.8441489,31.1628913 27.9631397,31.1628913 C35.0821306,31.1628913 40.853213,25.312572 40.853213,18.0958374 C40.853213,10.8791028 35.0821306,5.02878348 27.9631397,5.02878348 Z M27.9631397,8.46202001 C28.1321628,8.46202001 28.269183,8.60092153 28.269183,8.77226525 C28.269183,8.94360896 28.1321628,9.08251049 27.9631397,9.08251049 C23.0526379,9.08251049 19.0718897,13.1179144 19.0718897,18.0958374 C19.0718897,18.2671811 18.9348694,18.4060826 18.7658464,18.4060826 C18.5968234,18.4060826 18.4598031,18.2671811 18.4598031,18.0958374 C18.4598031,12.775227 22.7145919,8.46202001 27.9631397,8.46202001 Z M42.6549454,7.81468876 C44.0125608,9.8045911 44.9869199,12.0837237 45.4698482,14.5424266 L84.49,14.542 L84.4905043,10.3937561 C84.4905043,8.96987187 83.3518518,7.81558567 81.9472527,7.81558567 L42.6549454,7.81468876 Z", id: "Combined-Shape" }))))); const FlagInCog = ({ width = 152, height = 169 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 169", version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Symbols", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Group", transform: "translate(2.000000, 2.000000)", stroke: "#3B3552", strokeWidth: "3" }, /*#__PURE__*/React__namespace.default.createElement("path", { d: "M74,102.060611 L74,158.723567 C74,162.037275 71.3137085,164.723567 68,164.723567 C66.9452118,164.723567 65.9090627,164.445504 64.995996,163.917406 L6.67495026,130.185774 L6.67495026,130.185774 C2.54398439,127.796512 1.42108547e-14,123.386278 1.42108547e-14,118.614125 L1.42108547e-14,48.436129 C1.42108547e-14,43.6639756 2.54398439,39.2537412 6.67495026,36.8644799 L67.3072083,1.79609278 C71.4477337,-0.598697595 76.5522663,-0.598697595 80.6927917,1.79609278 L141.32505,36.8644799 C145.456016,39.2537412 148,43.6639756 148,48.436129 L148,118.614125 C148,123.386278 145.456016,127.796512 141.32505,130.185774 L92.2812226,158.551663", id: "Path-Copy-3", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M51,49 L119,49 C120.104569,49 121,49.8954305 121,51 L121,92 C121,93.1045695 120.104569,94 119,94 L51,94 L51,94", id: "Path", fill: "#3040D6", fillOpacity: "0.2" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "50.5", y1: "117.664666", x2: "50.5", y2: "46", id: "Line-2", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M90.239435,81.7782712 C90.0631269,82.1676449 89.8758447,82.5512259 89.6779671,82.9286394 L82.2989672,82.9286393 L81.8937728,82.0669236 L78.1172716,83.9875645 L76.5591632,79.8394848 C76.3961623,79.1332341 76.5739129,78.396551 77.0393222,77.8413752 L79.8721037,74.4622162 C79.8249919,73.8746857 79.8009823,73.2808202 79.8009823,72.6814838 C79.8009823,67.7927344 81.3963573,63.2674855 84.107847,59.5756058 C84.5362871,59.0098353 84.997813,58.7370453 85.4095325,58.6086382 C86.0930507,58.3954624 86.7419904,58.5264664 87.2751427,58.9131117 C90.61381,63.2761567 92.1990177,67.7991512 92.1990177,72.6814838 C92.1990177,73.2808202 92.1750081,73.8746857 92.1278963,74.4622162 L94.9606778,77.8413752 C95.3806819,78.3423882 95.5664172,78.9912204 95.4788634,79.6321076 L94.9309945,83.6424664 L90.239435,81.7782712 Z", id: "Path", fill: "#FFFFFF", fillOpacity: 0 }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M18.4450668,124.33815 C20.3880749,122.496562 22.421736,120.749671 24.5386602,119.104867 L22.349674,115.734124 C21.7480823,114.807754 22.0113671,113.569097 22.9377371,112.967505 L31.3244427,107.521115 C32.2508127,106.919523 33.4894703,107.182808 34.0910619,108.109178 L36.2893205,111.494199 C43.9325843,107.429769 52.2997247,104.546693 61.1471982,103.088517", id: "Path", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M74.5,102 C86.2343886,102 97.389559,104.479928 107.469997,108.944271 L109.522759,105.388784 C110.075043,104.432199 111.298224,104.104449 112.254809,104.656733 L125.245191,112.156733 C126.201776,112.709018 126.529526,113.932199 125.977241,114.888784 L123.825459,118.615781 C126.097192,120.345426 128.275354,122.191655 130.351025,124.145546", id: "Path", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "82.5", y1: "19.5", x2: "82.5", y2: "32.5278784", id: "Line-6", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "82.5", y1: "19.5", x2: "82.5", y2: "32.5278784", id: "Line-6-Copy", strokeLinecap: "round", transform: "translate(82.500000, 26.000000) rotate(-270.000000) translate(-82.500000, -26.000000) " }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "30.5", y1: "40.3", x2: "30.5", y2: "48.1167271", id: "Line-6", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "30.4916365", y1: "40.2916365", x2: "30.4916365", y2: "48.1083635", id: "Line-6-Copy", strokeLinecap: "round", transform: "translate(30.491636, 44.200000) rotate(-270.000000) translate(-30.491636, -44.200000) " }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "17.5", y1: "78.4333333", x2: "17.5", y2: "89.7241613", id: "Line-6", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "17.4879193", y1: "78.4212527", x2: "17.4879193", y2: "89.7120807", id: "Line-6-Copy", strokeLinecap: "round", transform: "translate(17.487919, 84.066667) rotate(-270.000000) translate(-17.487919, -84.066667) " })))); const Folder = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("mask", { id: "path-2-inside-1_0_2389", fill: "white" }, /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M47.8095 35C45.6004 35 43.8095 36.7909 43.8095 39V44.9048H37.9048C35.6956 44.9048 33.9048 46.6956 33.9048 48.9048V93.7302C33.9048 95.9393 35.6956 97.7302 37.9048 97.7302H107.492C109.701 97.7302 111.492 95.9393 111.492 93.7302V48.9048C111.492 46.6956 109.701 44.9048 107.492 44.9048H80.127V39C80.127 36.7909 78.3362 35 76.127 35H47.8095Z" })), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M47.8095 35C45.6004 35 43.8095 36.7909 43.8095 39V44.9048H37.9048C35.6956 44.9048 33.9048 46.6956 33.9048 48.9048V93.7302C33.9048 95.9393 35.6956 97.7302 37.9048 97.7302H107.492C109.701 97.7302 111.492 95.9393 111.492 93.7302V48.9048C111.492 46.6956 109.701 44.9048 107.492 44.9048H80.127V39C80.127 36.7909 78.3362 35 76.127 35H47.8095Z", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M43.8095 44.9048V46.4048H45.3095V44.9048H43.8095ZM80.127 44.9048H78.627V46.4048H80.127V44.9048ZM45.3095 39C45.3095 37.6193 46.4288 36.5 47.8095 36.5V33.5C44.772 33.5 42.3095 35.9624 42.3095 39H45.3095ZM45.3095 44.9048V39H42.3095V44.9048H45.3095ZM37.9048 46.4048H43.8095V43.4048H37.9048V46.4048ZM35.4048 48.9048C35.4048 47.524 36.5241 46.4048 37.9048 46.4048V43.4048C34.8672 43.4048 32.4048 45.8672 32.4048 48.9048H35.4048ZM35.4048 93.7302V48.9048H32.4048V93.7302H35.4048ZM37.9048 96.2302C36.5241 96.2302 35.4048 95.1109 35.4048 93.7302H32.4048C32.4048 96.7677 34.8672 99.2302 37.9048 99.2302V96.2302ZM107.492 96.2302H37.9048V99.2302H107.492V96.2302ZM109.992 93.7302C109.992 95.1109 108.873 96.2302 107.492 96.2302V99.2302C110.53 99.2302 112.992 96.7677 112.992 93.7302H109.992ZM109.992 48.9048V93.7302H112.992V48.9048H109.992ZM107.492 46.4048C108.873 46.4048 109.992 47.524 109.992 48.9048H112.992C112.992 45.8672 110.53 43.4048 107.492 43.4048V46.4048ZM80.127 46.4048H107.492V43.4048H80.127V46.4048ZM78.627 39V44.9048H81.627V39H78.627ZM76.127 36.5C77.5077 36.5 78.627 37.6193 78.627 39H81.627C81.627 35.9624 79.1646 33.5 76.127 33.5V36.5ZM47.8095 36.5H76.127V33.5H47.8095V36.5Z", fill: "#3B3552", mask: "url(#path-2-inside-1_0_2389)" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M49.0937 38.3018C47.9892 38.3018 47.0937 39.1972 47.0937 40.3018V48.189H39.2065C38.102 48.189 37.2065 49.0844 37.2065 50.189V94.5186C37.2065 95.6231 38.102 96.5186 39.2065 96.5186H106.191C107.295 96.5186 108.191 95.6231 108.191 94.5186V50.189C108.191 49.0844 107.295 48.189 106.191 48.189H77.0188V40.3018C77.0188 39.1972 76.1233 38.3018 75.0188 38.3018H49.0937Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "104.041", cy: "53.9616", r: "15.6598", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M25.3562 58.4196C25.0926 56.4695 26.609 54.7344 28.5769 54.7344H123.423C125.391 54.7344 126.907 56.4695 126.644 58.4196L119.471 111.499C119.253 113.111 117.877 114.314 116.25 114.314H35.7498C34.1231 114.314 32.7469 113.111 32.5291 111.499L25.3562 58.4196Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M117.401 86.1748C118.612 86.1748 119.546 87.2425 119.383 88.4426L116.66 108.595C116.439 110.232 115.041 111.454 113.389 111.454H38.6113C36.9587 111.454 35.5607 110.232 35.3394 108.595L32.6165 88.4426C32.4543 87.2425 33.3875 86.1748 34.5985 86.1748H117.401Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M60.3174 74.2066H91.6825", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M61.1431 82.4605H90.8574", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M62.7935 90.7145H89.2062", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M21.2434 62.4001L20.5001 62.5001L20.5001 62.5001L21.2434 62.4001ZM20.4001 61.7568L20.5001 62.5001L20.5001 62.5001L20.4001 61.7568ZM24.0693 83.4152L24.8127 83.3152L24.0693 83.4152ZM23.426 84.2585L23.326 83.5152H23.326L23.426 84.2585ZM22.5827 83.6151L23.326 83.5152L22.5827 83.6151ZM19.7568 62.6L20.5001 62.5001V62.5001L19.7568 62.6ZM24.7781 88.6857L24.0348 88.7857L24.7781 88.6857ZM23.9348 88.0424L24.0348 88.7857L23.9348 88.0424ZM25.6568 95.2204L24.9135 95.3203L25.6568 95.2204ZM25.0135 96.0636L25.1134 96.8069L25.0135 96.0636ZM24.1702 95.4203L24.9135 95.3203L24.1702 95.4203ZM23.2915 88.8856L24.0348 88.7857L23.2915 88.8856ZM21.9867 62.3002C21.8763 61.4791 21.1212 60.9031 20.3002 61.0135L20.5001 62.5001L20.5001 62.5001L21.9867 62.3002ZM24.8127 83.3152L21.9867 62.3002L20.5001 62.5001L23.326 83.5152L24.8127 83.3152ZM23.5259 85.0018C24.347 84.8914 24.9231 84.1363 24.8127 83.3152L23.326 83.5152H23.326L23.5259 85.0018ZM21.8394 83.7151C21.9498 84.5361 22.7049 85.1122 23.5259 85.0018L23.326 83.5152H23.326L21.8394 83.7151ZM19.0135 62.7L21.8394 83.7151L23.326 83.5152L20.5001 62.5001L19.0135 62.7ZM20.3002 61.0135C19.4791 61.1239 18.9031 61.879 19.0135 62.7L20.5001 62.5001L20.5001 62.5001L20.3002 61.0135ZM25.5214 88.5858C25.411 87.7647 24.6559 87.1886 23.8349 87.299L24.0348 88.7857L25.5214 88.5858ZM26.4001 95.1204L25.5214 88.5858L24.0348 88.7857L24.9135 95.3203L26.4001 95.1204ZM25.1134 96.8069C25.9345 96.6965 26.5105 95.9414 26.4001 95.1204L24.9135 95.3203L25.1134 96.8069ZM23.4269 95.5202C23.5373 96.3413 24.2924 96.9173 25.1134 96.8069L24.9135 95.3203L23.4269 95.5202ZM22.5482 88.9856L23.4269 95.5202L24.9135 95.3203L24.0348 88.7857L22.5482 88.9856ZM23.8349 87.299C23.0138 87.4094 22.4378 88.1645 22.5482 88.9856L24.0348 88.7857L23.8349 87.299Z", fill: "#3B3552" })); const Folders = ({ width = 152, height = 169 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 169", version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Symbols", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Group", transform: "translate(2.000000, 2.000000)" }, /*#__PURE__*/React__namespace.default.createElement("path", { d: "M74,124.060611 L74,158.723567 C74,162.037275 71.3137085,164.723567 68,164.723567 C66.9452118,164.723567 65.9090627,164.445504 64.995996,163.917406 L6.67495026,130.185774 L6.67495026,130.185774 C2.54398439,127.796512 1.42108547e-14,123.386278 1.42108547e-14,118.614125 L1.42108547e-14,48.436129 C1.42108547e-14,43.6639756 2.54398439,39.2537412 6.67495026,36.8644799 L67.3072083,1.79609278 C71.4477337,-0.598697595 76.5522663,-0.598697595 80.6927917,1.79609278 L141.32505,36.8644799 C145.456016,39.2537412 148,43.6639756 148,48.436129 L148,118.614125 C148,123.386278 145.456016,127.796512 141.32505,130.185774 L92.2812226,158.551663", id: "Path-Copy-6", stroke: "#3B3552", strokeWidth: "3", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M80,75.4190948 C80,70.9185608 80,64.1677599 80,55.166692 L89.166692,46 L122.184615,46 C122.924232,46 123.52381,46.5995776 123.52381,47.3391941 C123.52381,68.5174474 123.52381,82.6975707 123.52381,89.8795641 L123.52381,98.4049324 C123.52381,98.9609384 123.52381,99.7949476 123.52381,100.90696 C123.52381,101.646576 122.924232,102.246154 122.184615,102.246154 C119.775905,102.246154 117.969372,102.246154 116.765016,102.246154 L107.980724,68.9485742 L80,75.4190948 Z", id: "Path", fill: "#3040D6", fillOpacity: "0.2", transform: "translate(101.761905, 74.123077) rotate(-345.000000) translate(-101.761905, -74.123077) " }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M80,75.4190948 C80,70.9185608 80,64.1677599 80,55.166692 L89.166692,46 L122.184615,46 C122.924232,46 123.52381,46.5995776 123.52381,47.3391941 C123.52381,68.5174474 123.52381,82.6975707 123.52381,89.8795641 L123.52381,98.4049324 L123.52381,98.4049324 C123.52381,98.9609384 123.52381,99.7949476 123.52381,100.90696 C123.52381,101.646576 122.924232,102.246154 122.184615,102.246154 C119.775905,102.246154 117.969372,102.246154 116.765016,102.246154", id: "Path-Copy-7", stroke: "#3B3552", strokeWidth: "3", transform: "translate(101.761905, 74.123077) rotate(-345.000000) translate(-101.761905, -74.123077) " }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M96.001211,42.535856 L96.001211,50.4262472 C96.001211,51.1658637 95.4016334,51.7654413 94.6620169,51.7654413 L86.7369994,51.7654413", id: "Path-Copy-10", stroke: "#3B3552", strokeWidth: "3", transform: "translate(91.369105, 47.150649) rotate(-345.000000) translate(-91.369105, -47.150649) " }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M48.907368,38.345876 L48.907368,46.2362671 C48.907368,46.9758836 48.3077904,47.5754613 47.5681739,47.5754613 L39.6431564,47.5754613", id: "Path-Copy-10", stroke: "#3B3552", strokeWidth: "3", fill: "#3040D6", fillOpacity: "0.2", transform: "translate(44.275262, 42.960669) rotate(-15.000000) translate(-44.275262, -42.960669) " }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M40.6569874,54.4287231 C40.6569874,51.8308869 40.6569874,47.9341327 40.6569874,42.7384605 L49.8236794,33.5717685 L82.8416028,33.5717685 C83.5812193,33.5717685 84.1807969,34.1713461 84.1807969,34.9109626 C84.1807969,43.0635825 84.1807969,50.179161 84.1807969,56.257698", id: "Path", stroke: "#3B3552", strokeWidth: "3", transform: "translate(62.418892, 44.914733) rotate(-15.000000) translate(-62.418892, -44.914733) " }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M53.634268,124 L34,124 C32.8954305,124 32,123.104569 32,122 L32,62 C32,60.8954305 32.8954305,60 34,60 L53.5584816,60 C54.4193424,60 55.1836201,60.5508602 55.4558482,61.3675445 L58.3333333,70 L107,70 C108.104569,70 109,70.8954305 109,72 L109,122 C109,123.104569 108.104569,124 107,124 L74,124", id: "Path", stroke: "#3B3552", strokeWidth: "3", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "32", y1: "80.4611735", x2: "96.5731", y2: "80.4611735", id: "Line-7", stroke: "#3B3552", strokeWidth: "3", strokeLinecap: "round" })))); const GithubLogo = ({ width = 72, height = 71 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 72 71", version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Symbols", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Atoms/Logotype/Github", transform: "translate(0.000000, 1.000000)", fill: "#0C1E29", fillRule: "nonzero" }, /*#__PURE__*/React__namespace.default.createElement("path", { d: "M67.1013759,17.4238423 C63.8854852,11.9137922 59.5233349,7.55147781 54.0137768,4.33591517 C48.5033986,1.12018851 42.4877084,-0.487264789 35.9624419,-0.487264789 C29.4379954,-0.487264789 23.4203371,1.12068054 17.9111071,4.33591517 C12.4010569,7.5513138 8.03907062,11.9137922 4.82317995,17.4238423 C1.60778132,22.9337284 -4.26325641e-14,28.9505666 -4.26325641e-14,35.4741931 C-4.26325641e-14,43.3105484 2.28628702,50.3571999 6.86000911,56.6159516 C11.4332392,62.8751953 17.3411754,67.206348 24.5833257,69.6099015 C25.4263326,69.7663662 26.0503872,69.6563161 26.4561458,69.2825393 C26.8620683,68.9082705 27.0647836,68.4395325 27.0647836,67.8782933 C27.0647836,67.7846441 27.0567472,66.9421293 27.0411663,65.3497648 C27.0250934,63.7574004 27.017549,62.3682432 27.017549,61.1829493 L25.9405011,61.3692637 C25.253795,61.4950587 24.3874989,61.5483616 23.3416128,61.5332728 C22.2962187,61.518676 21.2109704,61.4091179 20.087344,61.2054186 C18.9632255,61.0035234 17.9176674,60.5352774 16.9498497,59.8016646 C15.9825239,59.0680518 15.2958178,58.1077785 14.8898952,56.9223206 L14.4216492,55.8447808 C14.1095399,55.1274049 13.6181686,54.3304846 12.9468793,53.4569721 C12.27559,52.5826395 11.5967563,51.9899106 10.9100501,51.6778013 L10.5821959,51.4431042 C10.3637358,51.2871316 10.1610205,51.0990131 9.97355809,50.880717 C9.78625968,50.6624209 9.64603189,50.4439607 9.55238269,50.2251726 C9.45856948,50.0062204 9.53630979,49.8266304 9.78642369,49.6857466 C10.0365376,49.5448628 10.4885467,49.476471 11.1444191,49.476471 L12.0805831,49.6163707 C12.7049658,49.7415097 13.4772847,50.1152865 14.3985239,50.7399972 C15.3192711,51.3642158 16.0761731,52.1757329 16.6693941,53.1742204 C17.387754,54.4544755 18.2532301,55.4300017 19.2682825,56.101291 C20.2825148,56.7725803 21.3051116,57.1076509 22.3350888,57.1076509 C23.3650661,57.1076509 24.2546515,57.0295826 25.0041731,56.874266 C25.7528747,56.7181293 26.4553257,56.4834322 27.1111982,56.1714869 C27.3921458,54.0790587 28.1570843,52.4716054 29.4053576,51.3479789 C27.6261868,51.1610086 26.0266059,50.8794049 24.605795,50.5049721 C23.1858041,50.1300473 21.7184146,49.5215735 20.2046105,48.6779106 C18.6899863,47.8353958 17.4335125,46.7891817 16.434861,45.5410723 C15.4360456,44.292307 14.616328,42.6528719 13.9768565,40.6242432 C13.3370569,38.5947944 13.0170752,36.2537284 13.0170752,33.600389 C13.0170752,29.8224391 14.2504237,26.6075325 16.7166287,23.9538651 C15.5613485,21.1135553 15.6704146,17.9294824 17.0441549,14.4019744 C17.9494852,14.1206988 19.2920638,14.3317785 21.0712346,15.0339015 C22.8507335,15.7363525 24.1536219,16.338102 24.9812118,16.8370177 C25.8088018,17.3357694 26.4718907,17.7584209 26.9714624,18.1011999 C29.8752437,17.2898468 32.8718542,16.8840883 35.9621139,16.8840883 C39.0523736,16.8840883 42.0496401,17.2898468 44.9535854,18.1011999 L46.7329203,16.9779015 C47.9497039,16.2283799 49.3865877,15.5415097 51.0401276,14.917127 C52.6946515,14.2930723 53.9598178,14.1211908 54.8343144,14.4024664 C56.2385604,17.9301384 56.3636993,21.1140473 55.2080911,23.9543571 C57.6741321,26.6080245 58.9079727,29.8237512 58.9079727,33.600881 C58.9079727,36.2542204 58.5868428,38.6026669 57.9480273,40.6476965 C57.3083918,42.6930541 56.4816219,44.3308491 55.4673895,45.5645256 C54.4520091,46.7980382 53.1874989,47.8360518 51.6736948,48.6784026 C50.1595626,49.5214095 48.6916811,50.1298833 47.2716902,50.5048081 C45.8510433,50.8797329 44.2514624,51.1615006 42.4722916,51.348799 C44.0949977,52.753045 44.9065148,54.9696281 44.9065148,57.9975644 L44.9065148,67.8769812 C44.9065148,68.4382204 45.1016856,68.9067944 45.4923554,69.2812272 C45.882533,69.655004 46.4987153,69.7650541 47.3417221,69.6084254 C54.5848565,67.2051999 60.4927927,62.8738833 65.0658588,56.6146395 C69.6384328,50.3558878 71.9255399,43.3092364 71.9255399,35.472881 C71.9238998,28.9500746 70.3152984,22.9337284 67.1013759,17.4238423 Z", id: "Path" })))); const IdentityCard = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M28.4179 58.2438C27.9534 56.51 28.9823 54.7279 30.716 54.2634L85.8189 39.4986C87.5527 39.034 89.3348 40.0629 89.7994 41.7967L108.142 110.251C108.606 111.985 107.577 113.767 105.844 114.231L50.7406 128.996C49.0069 129.461 47.2248 128.432 46.7602 126.698L28.4179 58.2438Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M30.4691 85.2909L30.6632 86.0153L31.3877 85.8212L31.1935 85.0968L30.4691 85.2909ZM28.4416 77.7241L29.166 77.53L28.9719 76.8055L28.2475 76.9996L28.4416 77.7241ZM29.0202 85.6791L28.2958 85.8732L28.4899 86.5977L29.2143 86.4035L29.0202 85.6791ZM26.9927 78.1123L26.7986 77.3879L26.0741 77.582L26.2683 78.3064L26.9927 78.1123ZM23.4533 59.1076L24.1778 58.9135L23.4533 59.1076ZM28.5798 50.2282L28.7739 50.9526L29.4984 50.7585L29.3043 50.0341L28.5798 50.2282ZM25.6806 67.4201L24.9562 67.6142L25.6806 67.4201ZM27.2716 73.3575L27.4657 74.082L28.1901 73.8879L27.996 73.1634L27.2716 73.3575ZM25.8227 73.7458L25.0982 73.9399L25.2924 74.6643L26.0168 74.4702L25.8227 73.7458ZM24.2317 67.8083L24.9562 67.6142L24.2317 67.8083ZM22.0044 59.4958L21.28 59.6899L22.0044 59.4958ZM28.1916 48.7793L28.9161 48.5852L28.7219 47.8607L27.9975 48.0549L28.1916 48.7793ZM31.1935 85.0968L29.166 77.53L27.7171 77.9182L29.7447 85.485L31.1935 85.0968ZM29.2143 86.4035L30.6632 86.0153L30.275 84.5664L28.8261 84.9547L29.2143 86.4035ZM26.2683 78.3064L28.2958 85.8732L29.7447 85.485L27.7171 77.9182L26.2683 78.3064ZM28.2475 76.9996L26.7986 77.3879L27.1868 78.8368L28.6357 78.4485L28.2475 76.9996ZM24.1778 58.9135C23.2486 55.4459 25.3064 51.8818 28.7739 50.9526L28.3857 49.5037C24.118 50.6473 21.5853 55.034 22.7289 59.3017L24.1778 58.9135ZM26.4051 67.2259L24.1778 58.9135L22.7289 59.3017L24.9562 67.6142L26.4051 67.2259ZM27.996 73.1634L26.4051 67.2259L24.9562 67.6142L26.5471 73.5516L27.996 73.1634ZM26.0168 74.4702L27.4657 74.082L27.0775 72.6331L25.6286 73.0213L26.0168 74.4702ZM23.5073 68.0024L25.0982 73.9399L26.5471 73.5516L24.9562 67.6142L23.5073 68.0024ZM21.28 59.6899L23.5073 68.0024L24.9562 67.6142L22.7289 59.3017L21.28 59.6899ZM27.9975 48.0549C22.9296 49.4128 19.922 54.622 21.28 59.6899L22.7289 59.3017C21.5853 55.034 24.118 50.6473 28.3857 49.5037L27.9975 48.0549ZM29.3043 50.0341L28.9161 48.5852L27.4672 48.9734L27.8554 50.4223L29.3043 50.0341Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M31.2413 58.9455C30.9554 57.8786 31.5886 56.7819 32.6555 56.496L86.1244 42.1691C87.1914 41.8832 88.288 42.5164 88.5739 43.5833L106.165 109.235C106.451 110.302 105.818 111.399 104.751 111.685L51.2822 126.012C50.2153 126.298 49.1186 125.665 48.8327 124.598L31.2413 58.9455Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("mask", { id: "path-5-inside-1_0_2335", fill: "white" }, /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M68.2148 32.6172C66.0057 32.6172 64.2148 34.4081 64.2148 36.6172V40.748H51.9531C49.744 40.748 47.9531 42.5389 47.9531 44.748V115.617C47.9531 117.826 49.744 119.617 51.9531 119.617H109C111.209 119.617 113 117.826 113 115.617V44.748C113 42.5389 111.209 40.748 109 40.748H96.7382V36.6172C96.7382 34.408 94.9473 32.6172 92.7382 32.6172H68.2148Z" })), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M68.2148 32.6172C66.0057 32.6172 64.2148 34.4081 64.2148 36.6172V40.748H51.9531C49.744 40.748 47.9531 42.5389 47.9531 44.748V115.617C47.9531 117.826 49.744 119.617 51.9531 119.617H109C111.209 119.617 113 117.826 113 115.617V44.748C113 42.5389 111.209 40.748 109 40.748H96.7382V36.6172C96.7382 34.408 94.9473 32.6172 92.7382 32.6172H68.2148Z", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M64.2148 40.748V42.248H65.7148V40.748H64.2148ZM96.7382 40.748H95.2382V42.248H96.7382V40.748ZM65.7148 36.6172C65.7148 35.2365 66.8341 34.1172 68.2148 34.1172V31.1172C65.1772 31.1172 62.7148 33.5796 62.7148 36.6172H65.7148ZM65.7148 40.748V36.6172H62.7148V40.748H65.7148ZM51.9531 42.248H64.2148V39.248H51.9531V42.248ZM49.4531 44.748C49.4531 43.3673 50.5724 42.248 51.9531 42.248V39.248C48.9156 39.248 46.4531 41.7105 46.4531 44.748H49.4531ZM49.4531 115.617V44.748H46.4531V115.617H49.4531ZM51.9531 118.117C50.5724 118.117 49.4531 116.998 49.4531 115.617H46.4531C46.4531 118.655 48.9156 121.117 51.9531 121.117V118.117ZM109 118.117H51.9531V121.117H109V118.117ZM111.5 115.617C111.5 116.998 110.381 118.117 109 118.117V121.117C112.037 121.117 114.5 118.655 114.5 115.617H111.5ZM111.5 44.748V115.617H114.5V44.748H111.5ZM109 42.248C110.381 42.248 111.5 43.3673 111.5 44.748H114.5C114.5 41.7105 112.037 39.248 109 39.248V42.248ZM96.7382 42.248H109V39.248H96.7382V42.248ZM95.2382 36.6172V40.748H98.2382V36.6172H95.2382ZM92.7382 34.1172C94.1189 34.1172 95.2382 35.2365 95.2382 36.6172H98.2382C98.2382 33.5796 95.7757 31.1172 92.7382 31.1172V34.1172ZM68.2148 34.1172H92.7382V31.1172H68.2148V34.1172Z", fill: "#3B3552", mask: "url(#path-5-inside-1_0_2335)" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M105.906 73.3885C107.826 72.8277 109.747 74.2677 109.747 76.2682V114.454C109.747 115.352 109.057 116.08 108.206 116.08H88.3546C86.6977 116.08 85.3545 114.737 85.3546 113.08L85.3551 95.1785C85.3551 93.8837 86.1866 92.7385 87.3983 92.2821C88.6032 91.8282 90.0603 91.2312 90.9438 90.6994C94.6727 88.4549 97.6224 85.0474 99.2908 80.979C99.7284 79.9121 100.131 78.1259 100.4 76.7646C100.625 75.6277 101.448 74.6906 102.56 74.3657L105.906 73.3885Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M69.0928 97.2571H91.8591", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M69.0928 105.388H91.8591", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "80.4762", cy: "44.0006", r: "4.8785", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "80.4765", cy: "73.2714", r: "16.2617", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M98.9221 61.2555L98.2941 61.6655L98.9221 61.2555ZM101.341 66.2406L100.631 66.48L101.341 66.2406ZM100.87 67.1908L100.631 66.48L100.87 67.1908ZM99.9198 66.7195L99.209 66.9589H99.209L99.9198 66.7195ZM97.666 62.0754L97.038 62.4854L97.666 62.0754ZM88.6873 52.8425L88.4074 53.5383V53.5383L88.6873 52.8425ZM87.7116 53.2584L88.4074 53.5383L88.4074 53.5383L87.7116 53.2584ZM96.5617 58.2454L96.0138 58.7575L96.5617 58.2454ZM96.5259 59.3054L97.038 59.8534H97.038L96.5259 59.3054ZM95.4658 59.2696L96.0138 58.7575L96.0138 58.7575L95.4658 59.2696ZM88.1275 54.2341L88.4074 53.5383H88.4074L88.1275 54.2341ZM99.5502 60.8456C99.0974 60.1519 98.1679 59.9566 97.4742 60.4094L98.2941 61.6655L99.5502 60.8456ZM102.052 66.0012C101.434 64.1664 100.589 62.4367 99.5502 60.8456L98.2941 61.6655C99.2643 63.1519 100.054 64.7672 100.631 66.48L102.052 66.0012ZM101.109 67.9015C101.894 67.6371 102.316 66.7863 102.052 66.0012L100.631 66.48L101.109 67.9015ZM99.209 66.9589C99.4734 67.744 100.324 68.166 101.109 67.9015L100.631 66.48L99.209 66.9589ZM97.038 62.4854C97.9398 63.867 98.6731 65.3679 99.209 66.9589L100.631 66.48C100.054 64.7672 99.2643 63.1519 98.2941 61.6655L97.038 62.4854ZM97.4742 60.4094C96.7805 60.8622 96.5852 61.7916 97.038 62.4854L98.2941 61.6655L97.4742 60.4094ZM88.9672 52.1467C88.1987 51.8375 87.325 52.2099 87.0158 52.9785L88.4074 53.5383L88.4074 53.5383L88.9672 52.1467ZM97.1097 57.7333C94.8562 55.3219 92.0832 53.4001 88.9672 52.1467L88.4074 53.5383C91.3167 54.7086 93.9076 56.5037 96.0138 58.7575L97.1097 57.7333ZM97.038 59.8534C97.6432 59.2877 97.6753 58.3385 97.1097 57.7333L96.0138 58.7575L96.0138 58.7575L97.038 59.8534ZM94.9179 59.7816C95.4835 60.3869 96.4327 60.419 97.038 59.8534L96.0138 58.7575V58.7575L94.9179 59.7816ZM87.8476 54.9299C90.5503 56.0171 92.959 57.6856 94.9179 59.7816L96.0138 58.7575C93.9076 56.5037 91.3167 54.7086 88.4074 53.5383L87.8476 54.9299ZM87.0158 52.9785C86.7066 53.747 87.079 54.6207 87.8476 54.9299L88.4074 53.5383L88.4074 53.5383L87.0158 52.9785Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "80.4763", cy: "70.0193", r: "6.50467", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M70.501 86.0272C71.947 81.9126 75.867 78.9629 80.4758 78.9629C85.0973 78.9629 89.0261 81.9288 90.4625 86.0611", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M69.2607 23.6747L69.9119 23.3026L69.2607 23.6747ZM68.2374 23.3957L67.8653 22.7445H67.8653L68.2374 23.3957ZM79.0094 40.735L78.3582 41.1071H78.3582L79.0094 40.735ZM81.3142 41.3635L81.6863 42.0147H81.6863L81.3142 41.3635ZM81.9427 40.735L82.5939 41.1071L81.9427 40.735ZM82.3159 40.0819L81.6647 39.7098H81.6647L82.3159 40.0819ZM82.5825 39.6154L83.2337 39.9875H83.2337L82.5825 39.6154ZM83.6058 39.3363L83.9779 38.6851L83.6058 39.3363ZM83.8848 40.3596L84.536 40.7317V40.7317L83.8848 40.3596ZM83.6183 40.8261L82.9671 40.454H82.9671L83.6183 40.8261ZM83.2451 41.4792L82.5939 41.1071L83.2451 41.4792ZM82.0584 42.6659L82.4305 43.3171L82.0584 42.6659ZM77.707 41.4792L78.3582 41.1071L77.707 41.4792ZM67.9583 24.419L67.3071 24.7911H67.3071L67.9583 24.419ZM96.5049 18.2746L97.1561 18.6467V18.6467L96.5049 18.2746ZM96.2258 17.2513L96.5979 16.6001V16.6001L96.2258 17.2513ZM87.7652 33.5689L88.4164 33.941L87.7652 33.5689ZM86.742 33.848L87.1141 33.1968H87.1141L86.742 33.848ZM86.4629 32.8247L85.8117 32.4526L86.4629 32.8247ZM95.2025 17.5304L95.8537 17.9025V17.9025L95.2025 17.5304ZM69.9119 23.3026C69.5009 22.5834 68.5846 22.3335 67.8653 22.7445L68.6095 24.0468H68.6095L69.9119 23.3026ZM79.6606 40.3629L69.9119 23.3026L68.6095 24.0468L78.3582 41.1071L79.6606 40.3629ZM80.9421 40.7124C80.4917 40.9697 79.9179 40.8132 79.6606 40.3629L78.3582 41.1071C79.0266 42.2767 80.5166 42.6831 81.6863 42.0147L80.9421 40.7124ZM81.2916 40.3629C81.2084 40.5085 81.0877 40.6291 80.9421 40.7124L81.6863 42.0147C82.0644 41.7986 82.3778 41.4852 82.5939 41.1071L81.2916 40.3629ZM81.6647 39.7098L81.2916 40.3629L82.5939 41.1071L82.9671 40.454L81.6647 39.7098ZM81.9313 39.2433L81.6647 39.7098L82.9671 40.454L83.2337 39.9875L81.9313 39.2433ZM83.9779 38.6851C83.2586 38.2741 82.3423 38.524 81.9313 39.2433L83.2337 39.9875L83.9779 38.6851ZM84.536 40.7317C84.947 40.0124 84.6972 39.0962 83.9779 38.6851L83.2337 39.9875H83.2337L84.536 40.7317ZM84.2695 41.1982L84.536 40.7317L83.2337 39.9875L82.9671 40.454L84.2695 41.1982ZM83.8963 41.8513L84.2695 41.1982L82.9671 40.454L82.5939 41.1071L83.8963 41.8513ZM82.4305 43.3171C83.0412 42.9681 83.5473 42.462 83.8963 41.8513L82.5939 41.1071C82.3778 41.4852 82.0644 41.7986 81.6863 42.0147L82.4305 43.3171ZM77.0558 41.8513C78.1352 43.7402 80.5415 44.3965 82.4305 43.3171L81.6863 42.0147C80.5166 42.6831 79.0266 42.2767 78.3582 41.1071L77.0558 41.8513ZM67.3071 24.7911L77.0558 41.8513L78.3582 41.1071L68.6095 24.0468L67.3071 24.7911ZM67.8653 22.7445C67.146 23.1555 66.8961 24.0718 67.3071 24.7911L68.6095 24.0468L67.8653 22.7445ZM97.1561 18.6467C97.5671 17.9274 97.3172 17.0111 96.5979 16.6001L95.8537 17.9025V17.9025L97.1561 18.6467ZM88.4164 33.941L97.1561 18.6467L95.8537 17.9025L87.1141 33.1968L88.4164 33.941ZM86.3698 34.4992C87.0891 34.9102 88.0054 34.6603 88.4164 33.941L87.1141 33.1968H87.1141L86.3698 34.4992ZM85.8117 32.4526C85.4007 33.1719 85.6506 34.0882 86.3699 34.4992L87.1141 33.1968V33.1968L85.8117 32.4526ZM94.5513 17.1583L85.8117 32.4526L87.1141 33.1968L95.8537 17.9025L94.5513 17.1583ZM96.5979 16.6001C95.8786 16.1891 94.9623 16.439 94.5513 17.1583L95.8537 17.9025L95.8537 17.9025L96.5979 16.6001Z", fill: "#3B3552" })); const Launch = ({ width = 165, height = 184 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 165 184", version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Symbols", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Group", transform: "translate(2.000000, 1.000000)", fillRule: "nonzero" }, /*#__PURE__*/React__namespace.default.createElement("path", { d: "M80.5,163.67556 L80.5,177.071797 C80.5,179.280936 78.709139,181.071797 76.5,181.071797 C75.7978533,181.071797 75.1080768,180.886972 74.5,180.535898 L5.39265015,140.636751 L5.39265015,140.636751 C2.29863938,138.850423 0.39265015,135.549153 0.39265015,131.976497 L0.39265015,51.0235027 C0.39265015,47.4508468 2.29863938,44.1495766 5.39265015,42.3632487 L75.5,1.88675135 C78.5940108,0.100423396 82.4059892,0.100423396 85.5,1.88675135 L155.60735,42.3632487 C158.701361,44.1495766 160.60735,47.4508468 160.60735,51.0235027 L160.60735,131.976497 C160.60735,135.549153 158.701361,138.850423 155.60735,140.636751 L94.0407624,176.182237", id: "Path", stroke: "#3B3552", strokeWidth: "3", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("g", { id: "Group-11", transform: "translate(47.000000, 21.000000)", stroke: "#3B3552", strokeWidth: "2" }, /*#__PURE__*/React__namespace.default.createElement("path", { d: "M53.9942579,39.5219471 L55.8288797,35.8527035 C56.3228582,34.8647465 57.5242043,34.4642978 58.5121613,34.9582763 C58.8992161,35.1518037 59.2130611,35.4656487 59.4065885,35.8527035 L61.2412103,39.5219471 C62.5603369,42.1602003 63.2470936,45.0693486 63.2470936,48.0190054 L63.2470936,122.095329 C63.2470936,122.647613 62.7993784,123.095329 62.2470936,123.095329 L52.9883746,123.095329 C52.4360898,123.095329 51.9883746,122.647613 51.9883746,122.095329 L51.9883746,48.0190054 C51.9883746,45.0693486 52.6751313,42.1602003 53.9942579,39.5219471 Z", id: "Rectangle", fill: "#FFFFFF", strokeLinejoin: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M5.75878973,39.5219471 L7.59341152,35.8527035 C8.08739002,34.8647465 9.2887361,34.4642978 10.2766931,34.9582763 C10.6637479,35.1518037 10.9775929,35.4656487 11.1711203,35.8527035 L13.0057421,39.5219471 C14.3248687,42.1602003 15.0116254,45.0693486 15.0116254,48.0190054 L15.0116254,122.095329 C15.0116254,122.647613 14.5639102,123.095329 14.0116254,123.095329 L4.75290636,123.095329 C4.20062161,123.095329 3.75290636,122.647613 3.75290636,122.095329 L3.75290636,48.0190054 C3.75290636,45.0693486 4.43966311,42.1602003 5.75878973,39.5219471 Z", id: "Rectangle", fill: "#FFFFFF", strokeLinejoin: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M26.5571232,7.82445311 L30.2061982,2.5285507 C31.4596375,0.709434189 33.9504362,0.250862247 35.7695527,1.5043016 C36.1704572,1.78053976 36.5175637,2.12764628 36.7938018,2.5285507 L40.4428768,7.82445311 C44.9645408,14.386744 47.3857535,22.1679451 47.3857535,30.1372052 L47.3857535,93.8226591 L47.3857535,93.8226591 L19.6142465,93.8226591 L19.6142465,30.1372052 C19.6142465,22.1679451 22.0354592,14.386744 26.5571232,7.82445311 Z", id: "Rectangle", fill: "#3040D6", strokeLinejoin: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M40.5745738,117.355362 L41.6399673,64.4923457 L45.0007027,77.8303078 C46.8757338,85.2718617 50.6334929,92.105976 55.9127551,97.6757028 L59.211122,101.155546 C62.0658223,104.167311 63.9962059,107.93508 64.7730365,112.011424 L65.5485066,116.080629 C65.5463599,116.477108 65.4504565,116.810566 65.2566953,117.04474 C65.0889845,117.247429 64.8478844,117.355362 64.582866,117.355362 L40.5745738,117.355362 Z", id: "Path-3", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M1.02035692,117.355362 L2.08575042,64.4923457 L5.44648581,77.8303078 C7.32151692,85.2718617 11.079276,92.105976 16.3585383,97.6757028 L19.6569052,101.155546 C22.5116054,104.167311 24.441989,107.93508 25.2188196,112.011424 L25.9942897,116.080629 C25.992143,116.477108 25.8962396,116.810566 25.7024785,117.04474 C25.5347676,117.247429 25.2936675,117.355362 25.0286491,117.355362 L1.02035692,117.355362 Z", id: "Path-3-Copy", fill: "#3040D6", transform: "translate(13.722892, 87.691223) scale(-1, 1) translate(-13.722892, -87.691223) " }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M26.9474568,46.6158047 L29.0688728,42.5574438 C30.348114,40.1101998 33.3690271,39.1633464 35.816271,40.4425876 C36.7204907,40.9152479 37.4584669,41.6532241 37.9311272,42.5574438 L40.0525432,46.6158047 C41.8462831,50.0473072 42.7831325,53.8618634 42.7831325,57.7339058 L42.7831325,122.875685 L42.7831325,122.875685 L24.2168675,122.875685 L24.2168675,57.7339058 C24.2168675,53.8618634 25.1537169,50.0473072 26.9474568,46.6158047 Z", id: "Rectangle", fill: "#FFFFFF", strokeLinejoin: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M46.626506,125.104601 L20.373494,125.104601 L20.373494,118.032312 C20.373494,116.079353 21.1650869,114.311281 22.4449195,113.031448 C23.7247521,111.751616 25.4928244,110.960023 27.4457831,110.960023 L39.5542169,110.960023 C41.5071756,110.960023 43.2752479,111.751616 44.5550805,113.031448 C45.8349131,114.311281 46.626506,116.079353 46.626506,118.032312 L46.626506,125.104601 Z", id: "Rectangle", fill: "#FFFFFF" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "33.5", y1: "101.484119", x2: "33.5", y2: "129.203332", id: "Line", fill: "#3040D6", fillOpacity: "0.2", strokeLinecap: "round" }))))); const Moon = ({ width = 260, height = 260 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 260 260", version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("defs", null, /*#__PURE__*/React__namespace.default.createElement("circle", { id: "path-1", cx: "106", cy: "106", r: "106" }), /*#__PURE__*/React__namespace.default.createElement("filter", { x: "-17.0%", y: "-17.0%", width: "134.0%", height: "134.0%", filterUnits: "objectBoundingBox", id: "filter-2" }, /*#__PURE__*/React__namespace.default.createElement("feOffset", { dx: "0", dy: "0", in: "SourceAlpha", result: "shadowOffsetOuter1" }), /*#__PURE__*/React__namespace.default.createElement("feGaussianBlur", { stdDeviation: "12", in: "shadowOffsetOuter1", result: "shadowBlurOuter1" }), /*#__PURE__*/React__namespace.default.createElement("feColorMatrix", { values: "0 0 0 0 0.958112299 0 0 0 0 0.910577834 0 0 0 0 0.855913579 0 0 0 1 0", type: "matrix", in: "shadowBlurOuter1" })), /*#__PURE__*/React__namespace.default.createElement("circle", { id: "path-3", cx: "106", cy: "106", r: "106" })), /*#__PURE__*/React__namespace.default.createElement("g", { id: "Main-Templates", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Group-12", transform: "translate(24.000000, 24.000000)" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Oval" }, /*#__PURE__*/React__namespace.default.createElement("use", { fill: "black", fillOpacity: "1", filter: "url(#filter-2)", href: "#path-1" }), /*#__PURE__*/React__namespace.default.createElement("use", { fill: "#F4E8DB", fillRule: "evenodd", href: "#path-1" })), /*#__PURE__*/React__namespace.default.createElement("g", { id: "Path-7" }, /*#__PURE__*/React__namespace.default.createElement("mask", { id: "mask-4", fill: "white" }, /*#__PURE__*/React__namespace.default.createElement("use", { href: "#path-3" })), /*#__PURE__*/React__namespace.default.createElement("use", { id: "Mask", fill: "#F4E8DB", href: "#path-3" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M39.8069626,3.76747066 C45.3021184,115.593145 97.2894125,176.043124 195.768845,185.117407 C294.248278,194.191689 253.575457,215.872553 73.750384,250.16 L-33.92,160.780637 L-25.2907546,24.0909209 L26.5457822,-4.24 L39.8069626,3.76747066 Z", fill: "#C8BBB2", mask: "url(#mask-4)" })), /*#__PURE__*/React__namespace.default.createElement("circle", { id: "Oval", fill: "#C8BBB2", cx: "80.5", cy: "37.5", r: "22.5" }), /*#__PURE__*/React__namespace.default.createElement("circle", { id: "Oval-Copy-3", fill: "#C8BBB2", cx: "158", cy: "66", r: "17" }), /*#__PURE__*/React__namespace.default.createElement("circle", { id: "Oval-Copy-4", stroke: "#F4E8DB", strokeWidth: "3", fill: "#C8BBB2", cx: "124", cy: "166", r: "17" }), /*#__PURE__*/React__namespace.default.createElement("circle", { id: "Oval-Copy-5", stroke: "#F4E8DB", strokeWidth: "1.6875", fill: "#C8BBB2", cx: "58.5", cy: "92.5", r: "9.5" }), /*#__PURE__*/React__namespace.default.createElement("circle", { id: "Oval-Copy", fill: "#C8BBB2", cx: "157.5", cy: "124.5", r: "8.5" }), /*#__PURE__*/React__namespace.default.createElement("circle", { id: "Oval-Copy-6", fill: "#C8BBB2", cx: "190", cy: "96", r: "3" }), /*#__PURE__*/React__namespace.default.createElement("circle", { id: "Oval-Copy-8", fill: "#C8BBB2", cx: "81", cy: "113", r: "3" }), /*#__PURE__*/React__namespace.default.createElement("circle", { id: "Oval-Copy-7", fill: "#C8BBB2", cx: "126", cy: "29", r: "3" }), /*#__PURE__*/React__namespace.default.createElement("circle", { id: "Oval-Copy-2", fill: "#C8BBB2", cx: "97.5", cy: "101.5", r: "8.5" })))); const NotFound = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M45.9805 86.9152C48.9413 103.963 63.8085 116.927 81.7035 116.927C101.729 116.927 117.963 100.693 117.963 80.6675C117.963 60.642 101.729 44.4082 81.7035 44.4082C78.8369 44.4082 76.0481 44.7408 73.3734 45.3696", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M105.906 118.934L105.505 118.3L105.906 118.934ZM106.139 117.9L106.774 117.5L106.774 117.499L106.139 117.9ZM95.4697 123.763L95.2458 123.047L95.4697 123.763ZM94.53 123.271L95.2458 123.047H95.2458L94.53 123.271ZM95.0219 122.331L94.7979 121.616H94.7979L95.0219 122.331ZM105.105 117.666L104.705 117.032L105.105 117.666ZM124.32 95.669L123.61 95.426L123.61 95.426L124.32 95.669ZM110.656 115.479L110.176 114.902H110.176L110.656 115.479ZM109.6 115.383L109.024 115.863L109.024 115.863L109.6 115.383ZM109.696 114.326L110.176 114.902L110.176 114.902L109.696 114.326ZM122.9 95.183L123.61 95.426V95.426L122.9 95.183ZM106.306 119.569C107.007 119.126 107.216 118.2 106.774 117.5L105.505 118.3L106.306 119.569ZM95.6937 124.479C99.4677 123.298 103.029 121.637 106.306 119.569L105.505 118.3C102.337 120.301 98.8938 121.906 95.2458 123.047L95.6937 124.479ZM93.8142 123.495C94.0616 124.286 94.903 124.726 95.6937 124.479L95.2458 123.047H95.2458L93.8142 123.495ZM94.7979 121.616C94.0073 121.863 93.5669 122.704 93.8142 123.495L95.2458 123.047H95.2458L94.7979 121.616ZM104.705 117.032C101.644 118.964 98.3199 120.514 94.7979 121.616L95.2458 123.047C98.8938 121.906 102.337 120.301 105.505 118.3L104.705 117.032ZM106.774 117.499C106.331 116.799 105.405 116.59 104.705 117.032L105.505 118.3L106.774 117.499ZM125.029 95.912C125.298 95.1282 124.88 94.2753 124.096 94.0069L123.61 95.426V95.426L125.029 95.912ZM111.136 116.055C117.448 110.796 122.31 103.853 125.029 95.912L123.61 95.426C120.981 103.102 116.281 109.816 110.176 114.902L111.136 116.055ZM109.024 115.863C109.554 116.499 110.5 116.585 111.136 116.055L110.176 114.902H110.176L109.024 115.863ZM109.216 113.75C108.579 114.28 108.493 115.226 109.024 115.863L110.176 114.902H110.176L109.216 113.75ZM122.191 94.94C119.653 102.351 115.114 108.837 109.216 113.75L110.176 114.902C116.281 109.816 120.981 103.102 123.61 95.426L122.191 94.94ZM124.096 94.0069C123.312 93.7385 122.459 94.1563 122.191 94.94L123.61 95.426V95.426L124.096 94.0069Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M102.531 59.8962C102.06 58.8657 103.349 57.9209 104.122 58.7499C106.278 61.0638 108.662 63.8966 109.789 66.1713C111.892 70.417 113.074 75.2 113.074 80.2592C113.074 97.8096 98.8467 112.037 81.2963 112.037C76.2969 112.037 71.5671 110.882 67.359 108.826C65.1089 107.726 62.3224 105.412 60.0117 103.281C59.1726 102.507 60.137 101.197 61.1738 101.674C63.5052 102.748 66.1159 103.795 68.1113 104.166C70.008 104.519 71.964 104.704 73.963 104.704C91.5134 104.704 105.741 90.4763 105.741 72.9259C105.741 71.209 105.605 69.5238 105.342 67.8807C104.987 65.6535 103.748 62.5573 102.531 59.8962Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M49.7112 97.7701C42.3619 108.603 39.2213 117.118 42.2366 120.134C47.487 125.384 69.4133 111.97 91.2103 90.1732C113.007 68.3762 126.421 46.4499 121.171 41.1995C118.144 38.1731 109.577 41.3481 98.6873 48.7555", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M34.8519 58.2595V69.6669H23C21.8954 69.6669 21 68.7715 21 67.6669V50.1113", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "51.9631", cy: "68.8517", r: "11.4074", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M51.9631 53.4443C49.0216 53.4443 46.2726 54.2686 43.9346 55.6988", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M34.8517 68.8525V80.2599", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M81.2962 58.2595V69.6669H69.4443C68.3398 69.6669 67.4443 68.7715 67.4443 67.6669V50.1113", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M81.2961 68.8525V80.2599", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M71.7411 93.834C70.3091 92.4021 67.9875 92.4021 66.5556 93.834C65.1237 95.266 65.1237 97.5876 66.5556 99.0195", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M105.099 92.8995C103.985 91.7857 102.18 91.7857 101.066 92.8995C99.9522 94.0132 99.9522 95.8189 101.066 96.9326", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M100.557 61.0148C99.3196 58.8714 96.5787 58.137 94.4353 59.3745C92.2918 60.612 91.5574 63.3529 92.7949 65.4963", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" })); const Notebook = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "23.75", y: "39.75", width: "104.5", height: "72.4535", rx: "3.25", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "25.6924", y: "41.1094", width: "100.612", height: "69.6979", rx: "2", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M33.6104 44.2871C33.6104 43.5968 34.17 43.0371 34.8604 43.0371H118.389V107.667C118.389 108.357 117.83 108.917 117.139 108.917H34.8604C34.17 108.917 33.6104 108.357 33.6104 107.667V44.2871Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M38.5 49.5V63.5", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M38.5 68.1667V72.8333", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "50.1162", y: "45.5732", width: "23.0078", height: "60.8062", rx: "2", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M87.0928 64.0622H110.101", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M87.0928 70.6355H110.101", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "106.814", cy: "55.4337", r: "4.10853", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M87.0928 89.5349H110.101", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M87.0928 96.1081H110.101", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "106.814", cy: "80.9074", r: "4.10853", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M118.657 43.0371H123.303C123.993 43.0371 124.553 43.5968 124.553 44.2871V65.76C124.553 66.4503 123.993 67.01 123.303 67.01H118.657V43.0371Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M118.728 55.0232H124.48", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M75.9997 43.5466V108.407", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M80.5192 55.0233C80.5192 52.5273 78.4958 50.5039 75.9998 50.5039C73.5039 50.5039 71.4805 52.5273 71.4805 55.0233", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M80.5192 63.2401C80.5192 60.7441 78.4958 58.7207 75.9998 58.7207C73.5039 58.7207 71.4805 60.7441 71.4805 63.2401", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M80.5192 92.8221C80.5192 90.3261 78.4958 88.3027 75.9998 88.3027C73.5039 88.3027 71.4805 90.3261 71.4805 92.8221", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M80.5192 101.039C80.5192 98.5429 78.4958 96.5195 75.9998 96.5195C73.5039 96.5195 71.4805 98.5429 71.4805 101.039", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M56.5 119.5H73.5", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M78.1944 119.5H84.8056", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" })); const Padlock = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "39.75", y: "62.208", width: "72.5", height: "56.3125", rx: "3.25", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M45.5 89.4V100.6", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M45.5 105.2V110.8", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M54.417 67.3125C54.417 66.2079 55.3124 65.3125 56.417 65.3125H107.146C108.251 65.3125 109.146 66.2079 109.146 67.3125V113.417C109.146 114.521 108.251 115.417 107.146 115.417H56.417C55.3124 115.417 54.417 114.521 54.417 113.417V67.3125Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M54.417 61.9555V47.5833C54.417 35.6632 64.0802 26 76.0003 26C87.9205 26 97.5837 35.6632 97.5837 47.5833V61.9555", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M87.0244 37.9694L86.5295 37.4059L85.966 37.9008L86.4609 38.4643L87.0244 37.9694ZM90.3884 44.4019L89.6602 44.5814L89.8396 45.3096L90.5678 45.1302L90.3884 44.4019ZM88.1514 36.9795L88.7149 36.4845L88.2199 35.921L87.6565 36.416L88.1514 36.9795ZM91.8448 44.043L92.0243 44.7713L92.7525 44.5918L92.573 43.8636L91.8448 44.043ZM90.8331 48.0837V47.3337H90.0831V48.0837H90.8331ZM90.8331 58.7935H90.0831V59.5435H90.8331V58.7935ZM92.3331 48.0837H93.0831V47.3337H92.3331V48.0837ZM92.3331 58.7935V59.5435H93.0831V58.7935H92.3331ZM86.4609 38.4643C87.9787 40.1923 89.0931 42.2801 89.6602 44.5814L91.1166 44.2225C90.4905 41.6818 89.2607 39.3788 87.5879 37.4744L86.4609 38.4643ZM87.6565 36.416L86.5295 37.4059L87.5194 38.5329L88.6464 37.543L87.6565 36.416ZM92.573 43.8636C91.888 41.0835 90.5426 38.5653 88.7149 36.4845L87.5879 37.4744C89.2607 39.3788 90.4905 41.6818 91.1166 44.2225L92.573 43.8636ZM90.5678 45.1302L92.0243 44.7713L91.6654 43.3148L90.2089 43.6737L90.5678 45.1302ZM90.0831 48.0837V58.7935H91.5831V48.0837H90.0831ZM92.3331 47.3337H90.8331V48.8337H92.3331V47.3337ZM93.0831 58.7935V48.0837H91.5831V58.7935H93.0831ZM90.8331 59.5435H92.3331V58.0435H90.8331V59.5435Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M52.6721 32.7474L53.3024 33.154L53.7089 32.5237L53.0786 32.1172L52.6721 32.7474ZM48.167 55.0461V55.7961H48.917V55.0461H48.167ZM46.667 55.0461H45.917V55.7961H46.667V55.0461ZM51.4116 31.9344L51.8181 31.3041L51.1878 30.8976L50.7813 31.5279L51.4116 31.9344ZM56.5699 27.9451L56.0368 28.4727L56.5644 29.0058L57.0974 28.4782L56.5699 27.9451ZM64.8901 22.2303L65.1977 22.9143L65.8817 22.6066L65.5741 21.9226L64.8901 22.2303ZM55.5147 26.879L54.9871 26.3459L54.454 26.8735L54.9816 27.4066L55.5147 26.879ZM64.2748 20.8623L64.9588 20.5546L64.6511 19.8707L63.9671 20.1783L64.2748 20.8623ZM48.917 48.0835C48.917 42.5796 50.5275 37.4564 53.3024 33.154L52.0418 32.3409C49.1153 36.8784 47.417 42.2826 47.417 48.0835H48.917ZM48.917 48.1016V48.0835H47.417V48.1016H48.917ZM48.917 48.1197V48.1016H47.417V48.1197H48.917ZM48.917 48.1378V48.1197H47.417V48.1378H48.917ZM48.917 48.1559V48.1378H47.417V48.1559H48.917ZM48.917 48.1739V48.1559H47.417V48.1739H48.917ZM48.917 48.192V48.1739H47.417V48.192H48.917ZM48.917 48.21V48.192H47.417V48.21H48.917ZM48.917 48.228V48.21H47.417V48.228H48.917ZM48.917 48.2459V48.228H47.417V48.2459H48.917ZM48.917 48.2639V48.2459H47.417V48.2639H48.917ZM48.917 48.2819V48.2639H47.417V48.2819H48.917ZM48.917 48.2998V48.2819H47.417V48.2998H48.917ZM48.917 48.3177V48.2998H47.417V48.3177H48.917ZM48.917 48.3356V48.3177H47.417V48.3356H48.917ZM48.917 48.3535V48.3356H47.417V48.3535H48.917ZM48.917 48.3713V48.3535H47.417V48.3713H48.917ZM48.917 48.3892V48.3713H47.417V48.3892H48.917ZM48.917 48.407V48.3892H47.417V48.407H48.917ZM48.917 48.4248V48.407H47.417V48.4248H48.917ZM48.917 48.4426V48.4248H47.417V48.4426H48.917ZM48.917 48.4603V48.4426H47.417V48.4603H48.917ZM48.917 48.4781V48.4603H47.417V48.4781H48.917ZM48.917 48.4958V48.4781H47.417V48.4958H48.917ZM48.917 48.5135V48.4958H47.417V48.5135H48.917ZM48.917 48.5312V48.5135H47.417V48.5312H48.917ZM48.917 48.5489V48.5312H47.417V48.5489H48.917ZM48.917 48.5666V48.5489H47.417V48.5666H48.917ZM48.917 48.5842V48.5666H47.417V48.5842H48.917ZM48.917 48.6019V48.5842H47.417V48.6019H48.917ZM48.917 48.6195V48.6019H47.417V48.6195H48.917ZM48.917 48.6371V48.6195H47.417V48.6371H48.917ZM48.917 48.6546V48.6371H47.417V48.6546H48.917ZM48.917 48.6722V48.6546H47.417V48.6722H48.917ZM48.917 48.6897V48.6722H47.417V48.6897H48.917ZM48.917 48.7072V48.6897H47.417V48.7072H48.917ZM48.917 48.7248V48.7072H47.417V48.7248H48.917ZM48.917 48.7422V48.7248H47.417V48.7422H48.917ZM48.917 48.7597V48.7422H47.417V48.7597H48.917ZM48.917 48.7772V48.7597H47.417V48.7772H48.917ZM48.917 48.7946V48.7772H47.417V48.7946H48.917ZM48.917 48.812V48.7946H47.417V48.812H48.917ZM48.917 48.8294V48.812H47.417V48.8294H48.917ZM48.917 48.8468V48.8294H47.417V48.8468H48.917ZM48.917 48.8641V48.8468H47.417V48.8641H48.917ZM48.917 48.8815V48.8641H47.417V48.8815H48.917ZM48.917 48.8988V48.8815H47.417V48.8988H48.917ZM48.917 48.9161V48.8988H47.417V48.9161H48.917ZM48.917 48.9334V48.9161H47.417V48.9334H48.917ZM48.917 48.9507V48.9334H47.417V48.9507H48.917ZM48.917 48.9679V48.9507H47.417V48.9679H48.917ZM48.917 48.9852V48.9679H47.417V48.9852H48.917ZM48.917 49.0024V48.9852H47.417V49.0024H48.917ZM48.917 49.0196V49.0024H47.417V49.0196H48.917ZM48.917 49.0368V49.0196H47.417V49.0368H48.917ZM48.917 49.0539V49.0368H47.417V49.0539H48.917ZM48.917 49.0711V49.0539H47.417V49.0711H48.917ZM48.917 49.0882V49.0711H47.417V49.0882H48.917ZM48.917 49.1053V49.0882H47.417V49.1053H48.917ZM48.917 49.1224V49.1053H47.417V49.1224H48.917ZM48.917 49.1395V49.1224H47.417V49.1395H48.917ZM48.917 49.1566V49.1395H47.417V49.1566H48.917ZM48.917 49.1736V49.1566H47.417V49.1736H48.917ZM48.917 49.1906V49.1736H47.417V49.1906H48.917ZM48.917 49.2077V49.1906H47.417V49.2077H48.917ZM48.917 49.2246V49.2077H47.417V49.2246H48.917ZM48.917 49.2416V49.2246H47.417V49.2416H48.917ZM48.917 49.2586V49.2416H47.417V49.2586H48.917ZM48.917 49.2755V49.2586H47.417V49.2755H48.917ZM48.917 49.2924V49.2755H47.417V49.2924H48.917ZM48.917 49.3093V49.2924H47.417V49.3093H48.917ZM48.917 49.3262V49.3093H47.417V49.3262H48.917ZM48.917 49.3431V49.3262H47.417V49.3431H48.917ZM48.917 49.3599V49.3431H47.417V49.3599H48.917ZM48.917 49.3768V49.3599H47.417V49.3768H48.917ZM48.917 49.3936V49.3768H47.417V49.3936H48.917ZM48.917 49.4104V49.3936H47.417V49.4104H48.917ZM48.917 49.4271V49.4104H47.417V49.4271H48.917ZM48.917 49.4439V49.4271H47.417V49.4439H48.917ZM48.917 49.4606V49.4439H47.417V49.4606H48.917ZM48.917 49.4774V49.4606H47.417V49.4774H48.917ZM48.917 49.4941V49.4774H47.417V49.4941H48.917ZM48.917 49.5108V49.4941H47.417V49.5108H48.917ZM48.917 49.5274V49.5108H47.417V49.5274H48.917ZM48.917 49.5441V49.5274H47.417V49.5441H48.917ZM48.917 49.5607V49.5441H47.417V49.5607H48.917ZM48.917 49.5773V49.5607H47.417V49.5773H48.917ZM48.917 49.5939V49.5773H47.417V49.5939H48.917ZM48.917 49.6105V49.5939H47.417V49.6105H48.917ZM48.917 49.6271V49.6105H47.417V49.6271H48.917ZM48.917 49.6436V49.6271H47.417V49.6436H48.917ZM48.917 49.6602V49.6436H47.417V49.6602H48.917ZM48.917 49.6767V49.6602H47.417V49.6767H48.917ZM48.917 49.6932V49.6767H47.417V49.6932H48.917ZM48.917 49.7096V49.6932H47.417V49.7096H48.917ZM48.917 49.7261V49.7096H47.417V49.7261H48.917ZM48.917 49.7425V49.7261H47.417V49.7425H48.917ZM48.917 49.759V49.7425H47.417V49.759H48.917ZM48.917 49.7754V49.759H47.417V49.7754H48.917ZM48.917 49.7918V49.7754H47.417V49.7918H48.917ZM48.917 49.8081V49.7918H47.417V49.8081H48.917ZM48.917 49.8245V49.8081H47.417V49.8245H48.917ZM48.917 49.8408V49.8245H47.417V49.8408H48.917ZM48.917 49.8571V49.8408H47.417V49.8571H48.917ZM48.917 49.8734V49.8571H47.417V49.8734H48.917ZM48.917 49.8897V49.8734H47.417V49.8897H48.917ZM48.917 49.906V49.8897H47.417V49.906H48.917ZM48.917 49.9222V49.906H47.417V49.9222H48.917ZM48.917 49.9384V49.9222H47.417V49.9384H48.917ZM48.917 49.9547V49.9384H47.417V49.9547H48.917ZM48.917 49.9709V49.9547H47.417V49.9709H48.917ZM48.917 49.987V49.9709H47.417V49.987H48.917ZM48.917 50.0032V49.987H47.417V50.0032H48.917ZM48.917 50.0193V50.0032H47.417V50.0193H48.917ZM48.917 50.0354V50.0193H47.417V50.0354H48.917ZM48.917 50.0515V50.0354H47.417V50.0515H48.917ZM48.917 50.0676V50.0515H47.417V50.0676H48.917ZM48.917 50.0837V50.0676H47.417V50.0837H48.917ZM48.917 50.0998V50.0837H47.417V50.0998H48.917ZM48.917 50.1158V50.0998H47.417V50.1158H48.917ZM48.917 50.1318V50.1158H47.417V50.1318H48.917ZM48.917 50.1478V50.1318H47.417V50.1478H48.917ZM48.917 50.1638V50.1478H47.417V50.1638H48.917ZM48.917 50.1797V50.1638H47.417V50.1797H48.917ZM48.917 50.1957V50.1797H47.417V50.1957H48.917ZM48.917 50.2116V50.1957H47.417V50.2116H48.917ZM48.917 50.2275V50.2116H47.417V50.2275H48.917ZM48.917 50.2434V50.2275H47.417V50.2434H48.917ZM48.917 50.2593V50.2434H47.417V50.2593H48.917ZM48.917 50.2752V50.2593H47.417V50.2752H48.917ZM48.917 50.291V50.2752H47.417V50.291H48.917ZM48.917 50.3068V50.291H47.417V50.3068H48.917ZM48.917 50.3226V50.3068H47.417V50.3226H48.917ZM48.917 50.3384V50.3226H47.417V50.3384H48.917ZM48.917 50.3542V50.3384H47.417V50.3542H48.917ZM48.917 50.3699V50.3542H47.417V50.3699H48.917ZM48.917 50.3857V50.3699H47.417V50.3857H48.917ZM48.917 50.4014V50.3857H47.417V50.4014H48.917ZM48.917 50.4171V50.4014H47.417V50.4171H48.917ZM48.917 50.4327V50.4171H47.417V50.4327H48.917ZM48.917 50.4484V50.4327H47.417V50.4484H48.917ZM48.917 50.464V50.4484H47.417V50.464H48.917ZM48.917 50.4797V50.464H47.417V50.4797H48.917ZM48.917 50.4953V50.4797H47.417V50.4953H48.917ZM48.917 50.5109V50.4953H47.417V50.5109H48.917ZM48.917 50.5264V50.5109H47.417V50.5264H48.917ZM48.917 50.542V50.5264H47.417V50.542H48.917ZM48.917 50.5575V50.542H47.417V50.5575H48.917ZM48.917 50.5731V50.5575H47.417V50.5731H48.917ZM48.917 50.5886V50.5731H47.417V50.5886H48.917ZM48.917 50.604V50.5886H47.417V50.604H48.917ZM48.917 50.6195V50.604H47.417V50.6195H48.917ZM48.917 50.635V50.6195H47.417V50.635H48.917ZM48.917 50.6504V50.635H47.417V50.6504H48.917ZM48.917 50.6658V50.6504H47.417V50.6658H48.917ZM48.917 50.6812V50.6658H47.417V50.6812H48.917ZM48.917 50.6966V50.6812H47.417V50.6966H48.917ZM48.917 50.7119V50.6966H47.417V50.7119H48.917ZM48.917 50.7273V50.7119H47.417V50.7273H48.917ZM48.917 50.7426V50.7273H47.417V50.7426H48.917ZM48.917 50.7579V50.7426H47.417V50.7579H48.917ZM48.917 50.7732V50.7579H47.417V50.7732H48.917ZM48.917 50.7885V50.7732H47.417V50.7885H48.917ZM48.917 50.8037V50.7885H47.417V50.8037H48.917ZM48.917 50.819V50.8037H47.417V50.819H48.917ZM48.917 50.8342V50.819H47.417V50.8342H48.917ZM48.917 50.8494V50.8342H47.417V50.8494H48.917ZM48.917 50.8646V50.8494H47.417V50.8646H48.917ZM48.917 50.8797V50.8646H47.417V50.8797H48.917ZM48.917 50.8949V50.8797H47.417V50.8949H48.917ZM48.917 50.91V50.8949H47.417V50.91H48.917ZM48.917 50.9251V50.91H47.417V50.9251H48.917ZM48.917 50.9402V50.9251H47.417V50.9402H48.917ZM48.917 50.9553V50.9402H47.417V50.9553H48.917ZM48.917 50.9704V50.9553H47.417V50.9704H48.917ZM48.917 50.9854V50.9704H47.417V50.9854H48.917ZM48.917 51.0004V50.9854H47.417V51.0004H48.917ZM48.917 51.0154V51.0004H47.417V51.0154H48.917ZM48.917 51.0304V51.0154H47.417V51.0304H48.917ZM48.917 51.0454V51.0304H47.417V51.0454H48.917ZM48.917 51.0604V51.0454H47.417V51.0604H48.917ZM48.917 51.0753V51.0604H47.417V51.0753H48.917ZM48.917 51.0902V51.0753H47.417V51.0902H48.917ZM48.917 51.1051V51.0902H47.417V51.1051H48.917ZM48.917 51.12V51.1051H47.417V51.12H48.917ZM48.917 51.1349V51.12H47.417V51.1349H48.917ZM48.917 51.1497V51.1349H47.417V51.1497H48.917ZM48.917 51.1645V51.1497H47.417V51.1645H48.917ZM48.917 51.1793V51.1645H47.417V51.1793H48.917ZM48.917 51.1941V51.1793H47.417V51.1941H48.917ZM48.917 51.2089V51.1941H47.417V51.2089H48.917ZM48.917 51.2237V51.2089H47.417V51.2237H48.917ZM48.917 51.2384V51.2237H47.417V51.2384H48.917ZM48.917 51.2531V51.2384H47.417V51.2531H48.917ZM48.917 51.2678V51.2531H47.417V51.2678H48.917ZM48.917 51.2825V51.2678H47.417V51.2825H48.917ZM48.917 51.2972V51.2825H47.417V51.2972H48.917ZM48.917 51.3119V51.2972H47.417V51.3119H48.917ZM48.917 51.3265V51.3119H47.417V51.3265H48.917ZM48.917 51.3411V51.3265H47.417V51.3411H48.917ZM48.917 51.3557V51.3411H47.417V51.3557H48.917ZM48.917 51.3703V51.3557H47.417V51.3703H48.917ZM48.917 51.3848V51.3703H47.417V51.3848H48.917ZM48.917 51.3994V51.3848H47.417V51.3994H48.917ZM48.917 51.4139V51.3994H47.417V51.4139H48.917ZM48.917 51.4284V51.4139H47.417V51.4284H48.917ZM48.917 51.4429V51.4284H47.417V51.4429H48.917ZM48.917 51.4574V51.4429H47.417V51.4574H48.917ZM48.917 51.4719V51.4574H47.417V51.4719H48.917ZM48.917 51.4863V51.4719H47.417V51.4863H48.917ZM48.917 51.5007V51.4863H47.417V51.5007H48.917ZM48.917 51.5151V51.5007H47.417V51.5151H48.917ZM48.917 51.5295V51.5151H47.417V51.5295H48.917ZM48.917 51.5439V51.5295H47.417V51.5439H48.917ZM48.917 51.5582V51.5439H47.417V51.5582H48.917ZM48.917 51.5726V51.5582H47.417V51.5726H48.917ZM48.917 51.5869V51.5726H47.417V51.5869H48.917ZM48.917 51.6012V51.5869H47.417V51.6012H48.917ZM48.917 51.6155V51.6012H47.417V51.6155H48.917ZM48.917 51.6297V51.6155H47.417V51.6297H48.917ZM48.917 51.644V51.6297H47.417V51.644H48.917ZM48.917 51.6582V51.644H47.417V51.6582H48.917ZM48.917 51.6724V51.6582H47.417V51.6724H48.917ZM48.917 51.6866V51.6724H47.417V51.6866H48.917ZM48.917 51.7008V51.6866H47.417V51.7008H48.917ZM48.917 51.7149V51.7008H47.417V51.7149H48.917ZM48.917 51.7291V51.7149H47.417V51.7291H48.917ZM48.917 51.7432V51.7291H47.417V51.7432H48.917ZM48.917 51.7573V51.7432H47.417V51.7573H48.917ZM48.917 51.7714V51.7573H47.417V51.7714H48.917ZM48.917 51.7854V51.7714H47.417V51.7854H48.917ZM48.917 51.7995V51.7854H47.417V51.7995H48.917ZM48.917 51.8135V51.7995H47.417V51.8135H48.917ZM48.917 51.8275V51.8135H47.417V51.8275H48.917ZM48.917 51.8415V51.8275H47.417V51.8415H48.917ZM48.917 51.8555V51.8415H47.417V51.8555H48.917ZM48.917 51.8695V51.8555H47.417V51.8695H48.917ZM48.917 51.8834V51.8695H47.417V51.8834H48.917ZM48.917 51.8974V51.8834H47.417V51.8974H48.917ZM48.917 51.9113V51.8974H47.417V51.9113H48.917ZM48.917 51.9252V51.9113H47.417V51.9252H48.917ZM48.917 51.939V51.9252H47.417V51.939H48.917ZM48.917 51.9529V51.939H47.417V51.9529H48.917ZM48.917 51.9667V51.9529H47.417V51.9667H48.917ZM48.917 51.9805V51.9667H47.417V51.9805H48.917ZM48.917 51.9943V51.9805H47.417V51.9943H48.917ZM48.917 52.0081V51.9943H47.417V52.0081H48.917ZM48.917 52.0219V52.0081H47.417V52.0219H48.917ZM48.917 52.0356V52.0219H47.417V52.0356H48.917ZM48.917 52.0494V52.0356H47.417V52.0494H48.917ZM48.917 52.0631V52.0494H47.417V52.0631H48.917ZM48.917 52.0768V52.0631H47.417V52.0768H48.917ZM48.917 52.0905V52.0768H47.417V52.0905H48.917ZM48.917 52.1041V52.0905H47.417V52.1041H48.917ZM48.917 52.1178V52.1041H47.417V52.1178H48.917ZM48.917 52.1314V52.1178H47.417V52.1314H48.917ZM48.917 52.145V52.1314H47.417V52.145H48.917ZM48.917 52.1586V52.145H47.417V52.1586H48.917ZM48.917 52.1722V52.1586H47.417V52.1722H48.917ZM48.917 52.1857V52.1722H47.417V52.1857H48.917ZM48.917 52.1993V52.1857H47.417V52.1993H48.917ZM48.917 52.2128V52.1993H47.417V52.2128H48.917ZM48.917 52.2263V52.2128H47.417V52.2263H48.917ZM48.917 52.2398V52.2263H47.417V52.2398H48.917ZM48.917 52.2532V52.2398H47.417V52.2532H48.917ZM48.917 52.2667V52.2532H47.417V52.2667H48.917ZM48.917 52.2801V52.2667H47.417V52.2801H48.917ZM48.917 52.2935V52.2801H47.417V52.2935H48.917ZM48.917 52.3069V52.2935H47.417V52.3069H48.917ZM48.917 52.3203V52.3069H47.417V52.3203H48.917ZM48.917 52.3337V52.3203H47.417V52.3337H48.917ZM48.917 52.347V52.3337H47.417V52.347H48.917ZM48.917 52.3603V52.347H47.417V52.3603H48.917ZM48.917 52.3736V52.3603H47.417V52.3736H48.917ZM48.917 52.3869V52.3736H47.417V52.3869H48.917ZM48.917 52.4002V52.3869H47.417V52.4002H48.917ZM48.917 52.4134V52.4002H47.417V52.4134H48.917ZM48.917 52.4267V52.4134H47.417V52.4267H48.917ZM48.917 52.4399V52.4267H47.417V52.4399H48.917ZM48.917 52.4531V52.4399H47.417V52.4531H48.917ZM48.917 52.4663V52.4531H47.417V52.4663H48.917ZM48.917 52.4794V52.4663H47.417V52.4794H48.917ZM48.917 52.4926V52.4794H47.417V52.4926H48.917ZM48.917 52.5057V52.4926H47.417V52.5057H48.917ZM48.917 52.5188V52.5057H47.417V52.5188H48.917ZM48.917 52.5319V52.5188H47.417V52.5319H48.917ZM48.917 52.545V52.5319H47.417V52.545H48.917ZM48.917 52.5581V52.545H47.417V52.5581H48.917ZM48.917 52.5711V52.5581H47.417V52.5711H48.917ZM48.917 52.5841V52.5711H47.417V52.5841H48.917ZM48.917 52.5971V52.5841H47.417V52.5971H48.917ZM48.917 52.6101V52.5971H47.417V52.6101H48.917ZM48.917 52.6231V52.6101H47.417V52.6231H48.917ZM48.917 52.636V52.6231H47.417V52.636H48.917ZM48.917 52.649V52.636H47.417V52.649H48.917ZM48.917 52.6619V52.649H47.417V52.6619H48.917ZM48.917 52.6748V52.6619H47.417V52.6748H48.917ZM48.917 52.6877V52.6748H47.417V52.6877H48.917ZM48.917 52.7005V52.6877H47.417V52.7005H48.917ZM48.917 52.7134V52.7005H47.417V52.7134H48.917ZM48.917 52.7262V52.7134H47.417V52.7262H48.917ZM48.917 52.739V52.7262H47.417V52.739H48.917ZM48.917 52.7518V52.739H47.417V52.7518H48.917ZM48.917 52.7646V52.7518H47.417V52.7646H48.917ZM48.917 52.7773V52.7646H47.417V52.7773H48.917ZM48.917 52.7901V52.7773H47.417V52.7901H48.917ZM48.917 52.8028V52.7901H47.417V52.8028H48.917ZM48.917 52.8155V52.8028H47.417V52.8155H48.917ZM48.917 52.8282V52.8155H47.417V52.8282H48.917ZM48.917 52.8409V52.8282H47.417V52.8409H48.917ZM48.917 52.8535V52.8409H47.417V52.8535H48.917ZM48.917 52.8662V52.8535H47.417V52.8662H48.917ZM48.917 52.8788V52.8662H47.417V52.8788H48.917ZM48.917 52.8914V52.8788H47.417V52.8914H48.917ZM48.917 52.904V52.8914H47.417V52.904H48.917ZM48.917 52.9165V52.904H47.417V52.9165H48.917ZM48.917 52.9291V52.9165H47.417V52.9291H48.917ZM48.917 52.9416V52.9291H47.417V52.9416H48.917ZM48.917 52.9541V52.9416H47.417V52.9541H48.917ZM48.917 52.9666V52.9541H47.417V52.9666H48.917ZM48.917 52.9791V52.9666H47.417V52.9791H48.917ZM48.917 52.9915V52.9791H47.417V52.9915H48.917ZM48.917 53.004V52.9915H47.417V53.004H48.917ZM48.917 53.0164V53.004H47.417V53.0164H48.917ZM48.917 53.0288V53.0164H47.417V53.0288H48.917ZM48.917 53.0412V53.0288H47.417V53.0412H48.917ZM48.917 53.0535V53.0412H47.417V53.0535H48.917ZM48.917 53.0659V53.0535H47.417V53.0659H48.917ZM48.917 53.0782V53.0659H47.417V53.0782H48.917ZM48.917 53.0905V53.0782H47.417V53.0905H48.917ZM48.917 53.1028V53.0905H47.417V53.1028H48.917ZM48.917 53.1151V53.1028H47.417V53.1151H48.917ZM48.917 53.1274V53.1151H47.417V53.1274H48.917ZM48.917 53.1396V53.1274H47.417V53.1396H48.917ZM48.917 53.1518V53.1396H47.417V53.1518H48.917ZM48.917 53.1641V53.1518H47.417V53.1641H48.917ZM48.917 53.1762V53.1641H47.417V53.1762H48.917ZM48.917 53.1884V53.1762H47.417V53.1884H48.917ZM48.917 53.2006V53.1884H47.417V53.2006H48.917ZM48.917 53.2127V53.2006H47.417V53.2127H48.917ZM48.917 53.2248V53.2127H47.417V53.2248H48.917ZM48.917 53.2369V53.2248H47.417V53.2369H48.917ZM48.917 53.249V53.2369H47.417V53.249H48.917ZM48.917 53.2611V53.249H47.417V53.2611H48.917ZM48.917 53.2731V53.2611H47.417V53.2731H48.917ZM48.917 53.2852V53.2731H47.417V53.2852H48.917ZM48.917 53.2972V53.2852H47.417V53.2972H48.917ZM48.917 53.3092V53.2972H47.417V53.3092H48.917ZM48.917 53.3212V53.3092H47.417V53.3212H48.917ZM48.917 53.3331V53.3212H47.417V53.3331H48.917ZM48.917 53.3451V53.3331H47.417V53.3451H48.917ZM48.917 53.357V53.3451H47.417V53.357H48.917ZM48.917 53.3689V53.357H47.417V53.3689H48.917ZM48.917 53.3808V53.3689H47.417V53.3808H48.917ZM48.917 53.3927V53.3808H47.417V53.3927H48.917ZM48.917 53.4045V53.3927H47.417V53.4045H48.917ZM48.917 53.4164V53.4045H47.417V53.4164H48.917ZM48.917 53.4282V53.4164H47.417V53.4282H48.917ZM48.917 53.44V53.4282H47.417V53.44H48.917ZM48.917 53.4518V53.44H47.417V53.4518H48.917ZM48.917 53.4635V53.4518H47.417V53.4635H48.917ZM48.917 53.4753V53.4635H47.417V53.4753H48.917ZM48.917 53.487V53.4753H47.417V53.487H48.917ZM48.917 53.4987V53.487H47.417V53.4987H48.917ZM48.917 53.5104V53.4987H47.417V53.5104H48.917ZM48.917 53.5221V53.5104H47.417V53.5221H48.917ZM48.917 53.5337V53.5221H47.417V53.5337H48.917ZM48.917 53.5454V53.5337H47.417V53.5454H48.917ZM48.917 53.557V53.5454H47.417V53.557H48.917ZM48.917 53.5686V53.557H47.417V53.5686H48.917ZM48.917 53.5802V53.5686H47.417V53.5802H48.917ZM48.917 53.5918V53.5802H47.417V53.5918H48.917ZM48.917 53.6033V53.5918H47.417V53.6033H48.917ZM48.917 53.6149V53.6033H47.417V53.6149H48.917ZM48.917 53.6264V53.6149H47.417V53.6264H48.917ZM48.917 53.6379V53.6264H47.417V53.6379H48.917ZM48.917 53.6494V53.6379H47.417V53.6494H48.917ZM48.917 53.6608V53.6494H47.417V53.6608H48.917ZM48.917 53.6723V53.6608H47.417V53.6723H48.917ZM48.917 53.6837V53.6723H47.417V53.6837H48.917ZM48.917 53.6951V53.6837H47.417V53.6951H48.917ZM48.917 53.7065V53.6951H47.417V53.7065H48.917ZM48.917 53.7179V53.7065H47.417V53.7179H48.917ZM48.917 53.7293V53.7179H47.417V53.7293H48.917ZM48.917 53.7406V53.7293H47.417V53.7406H48.917ZM48.917 53.7519V53.7406H47.417V53.7519H48.917ZM48.917 53.7632V53.7519H47.417V53.7632H48.917ZM48.917 53.7745V53.7632H47.417V53.7745H48.917ZM48.917 53.7858V53.7745H47.417V53.7858H48.917ZM48.917 53.797V53.7858H47.417V53.797H48.917ZM48.917 53.8083V53.797H47.417V53.8083H48.917ZM48.917 53.8195V53.8083H47.417V53.8195H48.917ZM48.917 53.8307V53.8195H47.417V53.8307H48.917ZM48.917 53.8419V53.8307H47.417V53.8419H48.917ZM48.917 53.853V53.8419H47.417V53.853H48.917ZM48.917 53.8642V53.853H47.417V53.8642H48.917ZM48.917 53.8753V53.8642H47.417V53.8753H48.917ZM48.917 53.8864V53.8753H47.417V53.8864H48.917ZM48.917 53.8975V53.8864H47.417V53.8975H48.917ZM48.917 53.9086V53.8975H47.417V53.9086H48.917ZM48.917 53.9197V53.9086H47.417V53.9197H48.917ZM48.917 53.9307V53.9197H47.417V53.9307H48.917ZM48.917 53.9417V53.9307H47.417V53.9417H48.917ZM48.917 53.9527V53.9417H47.417V53.9527H48.917ZM48.917 53.9637V53.9527H47.417V53.9637H48.917ZM48.917 53.9747V53.9637H47.417V53.9747H48.917ZM48.917 53.9856V53.9747H47.417V53.9856H48.917ZM48.917 53.9966V53.9856H47.417V53.9966H48.917ZM48.917 54.0075V53.9966H47.417V54.0075H48.917ZM48.917 54.0184V54.0075H47.417V54.0184H48.917ZM48.917 54.0293V54.0184H47.417V54.0293H48.917ZM48.917 54.0401V54.0293H47.417V54.0401H48.917ZM48.917 54.051V54.0401H47.417V54.051H48.917ZM48.917 54.0618V54.051H47.417V54.0618H48.917ZM48.917 54.0726V54.0618H47.417V54.0726H48.917ZM48.917 54.0834V54.0726H47.417V54.0834H48.917ZM48.917 54.0942V54.0834H47.417V54.0942H48.917ZM48.917 54.1049V54.0942H47.417V54.1049H48.917ZM48.917 54.1157V54.1049H47.417V54.1157H48.917ZM48.917 54.1264V54.1157H47.417V54.1264H48.917ZM48.917 54.1371V54.1264H47.417V54.1371H48.917ZM48.917 54.1478V54.1371H47.417V54.1478H48.917ZM48.917 54.1584V54.1478H47.417V54.1584H48.917ZM48.917 54.1691V54.1584H47.417V54.1691H48.917ZM48.917 54.1797V54.1691H47.417V54.1797H48.917ZM48.917 54.1903V54.1797H47.417V54.1903H48.917ZM48.917 54.2009V54.1903H47.417V54.2009H48.917ZM48.917 54.2115V54.2009H47.417V54.2115H48.917ZM48.917 54.2221V54.2115H47.417V54.2221H48.917ZM48.917 54.2326V54.2221H47.417V54.2326H48.917ZM48.917 54.2432V54.2326H47.417V54.2432H48.917ZM48.917 54.2537V54.2432H47.417V54.2537H48.917ZM48.917 54.2642V54.2537H47.417V54.2642H48.917ZM48.917 54.2746V54.2642H47.417V54.2746H48.917ZM48.917 54.2851V54.2746H47.417V54.2851H48.917ZM48.917 54.2955V54.2851H47.417V54.2955H48.917ZM48.917 54.3059V54.2955H47.417V54.3059H48.917ZM48.917 54.3163V54.3059H47.417V54.3163H48.917ZM48.917 54.3267V54.3163H47.417V54.3267H48.917ZM48.917 54.3371V54.3267H47.417V54.3371H48.917ZM48.917 54.3475V54.3371H47.417V54.3475H48.917ZM48.917 54.3578V54.3475H47.417V54.3578H48.917ZM48.917 54.3681V54.3578H47.417V54.3681H48.917ZM48.917 54.3784V54.3681H47.417V54.3784H48.917ZM48.917 54.3887V54.3784H47.417V54.3887H48.917ZM48.917 54.3989V54.3887H47.417V54.3989H48.917ZM48.917 54.4092V54.3989H47.417V54.4092H48.917ZM48.917 54.4194V54.4092H47.417V54.4194H48.917ZM48.917 54.4296V54.4194H47.417V54.4296H48.917ZM48.917 54.4398V54.4296H47.417V54.4398H48.917ZM48.917 54.45V54.4398H47.417V54.45H48.917ZM48.917 54.4601V54.45H47.417V54.4601H48.917ZM48.917 54.4703V54.4601H47.417V54.4703H48.917ZM48.917 54.4804V54.4703H47.417V54.4804H48.917ZM48.917 54.4905V54.4804H47.417V54.4905H48.917ZM48.917 54.5006V54.4905H47.417V54.5006H48.917ZM48.917 54.5106V54.5006H47.417V54.5106H48.917ZM48.917 54.5207V54.5106H47.417V54.5207H48.917ZM48.917 54.5307V54.5207H47.417V54.5307H48.917ZM48.917 54.5407V54.5307H47.417V54.5407H48.917ZM48.917 54.5507V54.5407H47.417V54.5507H48.917ZM48.917 54.5607V54.5507H47.417V54.5607H48.917ZM48.917 54.5707V54.5607H47.417V54.5707H48.917ZM48.917 54.5806V54.5707H47.417V54.5806H48.917ZM48.917 54.5905V54.5806H47.417V54.5905H48.917ZM48.917 54.6004V54.5905H47.417V54.6004H48.917ZM48.917 54.6103V54.6004H47.417V54.6103H48.917ZM48.917 54.6202V54.6103H47.417V54.6202H48.917ZM48.917 54.6301V54.6202H47.417V54.6301H48.917ZM48.917 54.6399V54.6301H47.417V54.6399H48.917ZM48.917 54.6497V54.6399H47.417V54.6497H48.917ZM48.917 54.6595V54.6497H47.417V54.6595H48.917ZM48.917 54.6693V54.6595H47.417V54.6693H48.917ZM48.917 54.6791V54.6693H47.417V54.6791H48.917ZM48.917 54.6888V54.6791H47.417V54.6888H48.917ZM48.917 54.6985V54.6888H47.417V54.6985H48.917ZM48.917 54.7082V54.6985H47.417V54.7082H48.917ZM48.917 54.7179V54.7082H47.417V54.7179H48.917ZM48.917 54.7276V54.7179H47.417V54.7276H48.917ZM48.917 54.7373V54.7276H47.417V54.7373H48.917ZM48.917 54.7469V54.7373H47.417V54.7469H48.917ZM48.917 54.7565V54.7469H47.417V54.7565H48.917ZM48.917 54.7661V54.7565H47.417V54.7661H48.917ZM48.917 54.7757V54.7661H47.417V54.7757H48.917ZM48.917 54.7853V54.7757H47.417V54.7853H48.917ZM48.917 54.7949V54.7853H47.417V54.7949H48.917ZM48.917 54.8044V54.7949H47.417V54.8044H48.917ZM48.917 54.8139V54.8044H47.417V54.8139H48.917ZM48.917 54.8234V54.8139H47.417V54.8234H48.917ZM48.917 54.8329V54.8234H47.417V54.8329H48.917ZM48.917 54.8424V54.8329H47.417V54.8424H48.917ZM48.917 54.8518V54.8424H47.417V54.8518H48.917ZM48.917 54.8612V54.8518H47.417V54.8612H48.917ZM48.917 54.8706V54.8612H47.417V54.8706H48.917ZM48.917 54.88V54.8706H47.417V54.88H48.917ZM48.917 54.8894V54.88H47.417V54.8894H48.917ZM48.917 54.8988V54.8894H47.417V54.8988H48.917ZM48.917 54.9081V54.8988H47.417V54.9081H48.917ZM48.917 54.9174V54.9081H47.417V54.9174H48.917ZM48.917 54.9267V54.9174H47.417V54.9267H48.917ZM48.917 54.936V54.9267H47.417V54.936H48.917ZM48.917 54.9453V54.936H47.417V54.9453H48.917ZM48.917 54.9545V54.9453H47.417V54.9545H48.917ZM48.917 54.9638V54.9545H47.417V54.9638H48.917ZM48.917 54.973V54.9638H47.417V54.973H48.917ZM48.917 54.9822V54.973H47.417V54.9822H48.917ZM48.917 54.9914V54.9822H47.417V54.9914H48.917ZM48.917 55.0005V54.9914H47.417V55.0005H48.917ZM48.917 55.0097V55.0005H47.417V55.0097H48.917ZM48.917 55.0188V55.0097H47.417V55.0188H48.917ZM48.917 55.0279V55.0188H47.417V55.0279H48.917ZM48.917 55.037V55.0279H47.417V55.037H48.917ZM48.917 55.0461V55.037H47.417V55.0461H48.917ZM46.667 55.7961H48.167V54.2961H46.667V55.7961ZM45.917 55.037V55.0461H47.417V55.037H45.917ZM45.917 55.0279V55.037H47.417V55.0279H45.917ZM45.917 55.0188V55.0279H47.417V55.0188H45.917ZM45.917 55.0097V55.0188H47.417V55.0097H45.917ZM45.917 55.0005V55.0097H47.417V55.0005H45.917ZM45.917 54.9914V55.0005H47.417V54.9914H45.917ZM45.917 54.9822V54.9914H47.417V54.9822H45.917ZM45.917 54.973V54.9822H47.417V54.973H45.917ZM45.917 54.9638V54.973H47.417V54.9638H45.917ZM45.917 54.9545V54.9638H47.417V54.9545H45.917ZM45.917 54.9453V54.9545H47.417V54.9453H45.917ZM45.917 54.936V54.9453H47.417V54.936H45.917ZM45.917 54.9267V54.936H47.417V54.9267H45.917ZM45.917 54.9174V54.9267H47.417V54.9174H45.917ZM45.917 54.9081V54.9174H47.417V54.9081H45.917ZM45.917 54.8988V54.9081H47.417V54.8988H45.917ZM45.917 54.8894V54.8988H47.417V54.8894H45.917ZM45.917 54.88V54.8894H47.417V54.88H45.917ZM45.917 54.8706V54.88H47.417V54.8706H45.917ZM45.917 54.8612V54.8706H47.417V54.8612H45.917ZM45.917 54.8518V54.8612H47.417V54.8518H45.917ZM45.917 54.8424V54.8518H47.417V54.8424H45.917ZM45.917 54.8329V54.8424H47.417V54.8329H45.917ZM45.917 54.8234V54.8329H47.417V54.8234H45.917ZM45.917 54.8139V54.8234H47.417V54.8139H45.917ZM45.917 54.8044V54.8139H47.417V54.8044H45.917ZM45.917 54.7949V54.8044H47.417V54.7949H45.917ZM45.917 54.7853V54.7949H47.417V54.7853H45.917ZM45.917 54.7757V54.7853H47.417V54.7757H45.917ZM45.917 54.7661V54.7757H47.417V54.7661H45.917ZM45.917 54.7565V54.7661H47.417V54.7565H45.917ZM45.917 54.7469V54.7565H47.417V54.7469H45.917ZM45.917 54.7373V54.7469H47.417V54.7373H45.917ZM45.917 54.7276V54.7373H47.417V54.7276H45.917ZM45.917 54.7179V54.7276H47.417V54.7179H45.917ZM45.917 54.7082V54.7179H47.417V54.7082H45.917ZM45.917 54.6985V54.7082H47.417V54.6985H45.917ZM45.917 54.6888V54.6985H47.417V54.6888H45.917ZM45.917 54.6791V54.6888H47.417V54.6791H45.917ZM45.917 54.6693V54.6791H47.417V54.6693H45.917ZM45.917 54.6595V54.6693H47.417V54.6595H45.917ZM45.917 54.6497V54.6595H47.417V54.6497H45.917ZM45.917 54.6399V54.6497H47.417V54.6399H45.917ZM45.917 54.6301V54.6399H47.417V54.6301H45.917ZM45.917 54.6202V54.6301H47.417V54.6202H45.917ZM45.917 54.6103V54.6202H47.417V54.6103H45.917ZM45.917 54.6004V54.6103H47.417V54.6004H45.917ZM45.917 54.5905V54.6004H47.417V54.5905H45.917ZM45.917 54.5806V54.5905H47.417V54.5806H45.917ZM45.917 54.5707V54.5806H47.417V54.5707H45.917ZM45.917 54.5607V54.5707H47.417V54.5607H45.917ZM45.917 54.5507V54.5607H47.417V54.5507H45.917ZM45.917 54.5407V54.5507H47.417V54.5407H45.917ZM45.917 54.5307V54.5407H47.417V54.5307H45.917ZM45.917 54.5207V54.5307H47.417V54.5207H45.917ZM45.917 54.5106V54.5207H47.417V54.5106H45.917ZM45.917 54.5006V54.5106H47.417V54.5006H45.917ZM45.917 54.4905V54.5006H47.417V54.4905H45.917ZM45.917 54.4804V54.4905H47.417V54.4804H45.917ZM45.917 54.4703V54.4804H47.417V54.4703H45.917ZM45.917 54.4601V54.4703H47.417V54.4601H45.917ZM45.917 54.45V54.4601H47.417V54.45H45.917ZM45.917 54.4398V54.45H47.417V54.4398H45.917ZM45.917 54.4296V54.4398H47.417V54.4296H45.917ZM45.917 54.4194V54.4296H47.417V54.4194H45.917ZM45.917 54.4092V54.4194H47.417V54.4092H45.917ZM45.917 54.3989V54.4092H47.417V54.3989H45.917ZM45.917 54.3887V54.3989H47.417V54.3887H45.917ZM45.917 54.3784V54.3887H47.417V54.3784H45.917ZM45.917 54.3681V54.3784H47.417V54.3681H45.917ZM45.917 54.3578V54.3681H47.417V54.3578H45.917ZM45.917 54.3475V54.3578H47.417V54.3475H45.917ZM45.917 54.3371V54.3475H47.417V54.3371H45.917ZM45.917 54.3267V54.3371H47.417V54.3267H45.917ZM45.917 54.3163V54.3267H47.417V54.3163H45.917ZM45.917 54.3059V54.3163H47.417V54.3059H45.917ZM45.917 54.2955V54.3059H47.417V54.2955H45.917ZM45.917 54.2851V54.2955H47.417V54.2851H45.917ZM45.917 54.2746V54.2851H47.417V54.2746H45.917ZM45.917 54.2642V54.2746H47.417V54.2642H45.917ZM45.917 54.2537V54.2642H47.417V54.2537H45.917ZM45.917 54.2432V54.2537H47.417V54.2432H45.917ZM45.917 54.2326V54.2432H47.417V54.2326H45.917ZM45.917 54.2221V54.2326H47.417V54.2221H45.917ZM45.917 54.2115V54.2221H47.417V54.2115H45.917ZM45.917 54.2009V54.2115H47.417V54.2009H45.917ZM45.917 54.1903V54.2009H47.417V54.1903H45.917ZM45.917 54.1797V54.1903H47.417V54.1797H45.917ZM45.917 54.1691V54.1797H47.417V54.1691H45.917ZM45.917 54.1584V54.1691H47.417V54.1584H45.917ZM45.917 54.1478V54.1584H47.417V54.1478H45.917ZM45.917 54.1371V54.1478H47.417V54.1371H45.917ZM45.917 54.1264V54.1371H47.417V54.1264H45.917ZM45.917 54.1157V54.1264H47.417V54.1157H45.917ZM45.917 54.1049V54.1157H47.417V54.1049H45.917ZM45.917 54.0942V54.1049H47.417V54.0942H45.917ZM45.917 54.0834V54.0942H47.417V54.0834H45.917ZM45.917 54.0726V54.0834H47.417V54.0726H45.917ZM45.917 54.0618V54.0726H47.417V54.0618H45.917ZM45.917 54.051V54.0618H47.417V54.051H45.917ZM45.917 54.0401V54.051H47.417V54.0401H45.917ZM45.917 54.0293V54.0401H47.417V54.0293H45.917ZM45.917 54.0184V54.0293H47.417V54.0184H45.917ZM45.917 54.0075V54.0184H47.417V54.0075H45.917ZM45.917 53.9966V54.0075H47.417V53.9966H45.917ZM45.917 53.9856V53.9966H47.417V53.9856H45.917ZM45.917 53.9747V53.9856H47.417V53.9747H45.917ZM45.917 53.9637V53.9747H47.417V53.9637H45.917ZM45.917 53.9527V53.9637H47.417V53.9527H45.917ZM45.917 53.9417V53.9527H47.417V53.9417H45.917ZM45.917 53.9307V53.9417H47.417V53.9307H45.917ZM45.917 53.9197V53.9307H47.417V53.9197H45.917ZM45.917 53.9086V53.9197H47.417V53.9086H45.917ZM45.917 53.8975V53.9086H47.417V53.8975H45.917ZM45.917 53.8864V53.8975H47.417V53.8864H45.917ZM45.917 53.8753V53.8864H47.417V53.8753H45.917ZM45.917 53.8642V53.8753H47.417V53.8642H45.917ZM45.917 53.853V53.8642H47.417V53.853H45.917ZM45.917 53.8419V53.853H47.417V53.8419H45.917ZM45.917 53.8307V53.8419H47.417V53.8307H45.917ZM45.917 53.8195V53.8307H47.417V53.8195H45.917ZM45.917 53.8083V53.8195H47.417V53.8083H45.917ZM45.917 53.797V53.8083H47.417V53.797H45.917ZM45.917 53.7858V53.797H47.417V53.7858H45.917ZM45.917 53.7745V53.7858H47.417V53.7745H45.917ZM45.917 53.7632V53.7745H47.417V53.7632H45.917ZM45.917 53.7519V53.7632H47.417V53.7519H45.917ZM45.917 53.7406V53.7519H47.417V53.7406H45.917ZM45.917 53.7293V53.7406H47.417V53.7293H45.917ZM45.917 53.7179V53.7293H47.417V53.7179H45.917ZM45.917 53.7065V53.7179H47.417V53.7065H45.917ZM45.917 53.6951V53.7065H47.417V53.6951H45.917ZM45.917 53.6837V53.6951H47.417V53.6837H45.917ZM45.917 53.6723V53.6837H47.417V53.6723H45.917ZM45.917 53.6608V53.6723H47.417V53.6608H45.917ZM45.917 53.6494V53.6608H47.417V53.6494H45.917ZM45.917 53.6379V53.6494H47.417V53.6379H45.917ZM45.917 53.6264V53.6379H47.417V53.6264H45.917ZM45.917 53.6149V53.6264H47.417V53.6149H45.917ZM45.917 53.6033V53.6149H47.417V53.6033H45.917ZM45.917 53.5918V53.6033H47.417V53.5918H45.917ZM45.917 53.5802V53.5918H47.417V53.5802H45.917ZM45.917 53.5686V53.5802H47.417V53.5686H45.917ZM45.917 53.557V53.5686H47.417V53.557H45.917ZM45.917 53.5454V53.557H47.417V53.5454H45.917ZM45.917 53.5337V53.5454H47.417V53.5337H45.917ZM45.917 53.5221V53.5337H47.417V53.5221H45.917ZM45.917 53.5104V53.5221H47.417V53.5104H45.917ZM45.917 53.4987V53.5104H47.417V53.4987H45.917ZM45.917 53.487V53.4987H47.417V53.487H45.917ZM45.917 53.4753V53.487H47.417V53.4753H45.917ZM45.917 53.4635V53.4753H47.417V53.4635H45.917ZM45.917 53.4518V53.4635H47.417V53.4518H45.917ZM45.917 53.44V53.4518H47.417V53.44H45.917ZM45.917 53.4282V53.44H47.417V53.4282H45.917ZM45.917 53.4164V53.4282H47.417V53.4164H45.917ZM45.917 53.4045V53.4164H47.417V53.4045H45.917ZM45.917 53.3927V53.4045H47.417V53.3927H45.917ZM45.917 53.3808V53.3927H47.417V53.3808H45.917ZM45.917 53.3689V53.3808H47.417V53.3689H45.917ZM45.917 53.357V53.3689H47.417V53.357H45.917ZM45.917 53.3451V53.357H47.417V53.3451H45.917ZM45.917 53.3331V53.3451H47.417V53.3331H45.917ZM45.917 53.3212V53.3331H47.417V53.3212H45.917ZM45.917 53.3092V53.3212H47.417V53.3092H45.917ZM45.917 53.2972V53.3092H47.417V53.2972H45.917ZM45.917 53.2852V53.2972H47.417V53.2852H45.917ZM45.917 53.2731V53.2852H47.417V53.2731H45.917ZM45.917 53.2611V53.2731H47.417V53.2611H45.917ZM45.917 53.249V53.2611H47.417V53.249H45.917ZM45.917 53.2369V53.249H47.417V53.2369H45.917ZM45.917 53.2248V53.2369H47.417V53.2248H45.917ZM45.917 53.2127V53.2248H47.417V53.2127H45.917ZM45.917 53.2006V53.2127H47.417V53.2006H45.917ZM45.917 53.1884V53.2006H47.417V53.1884H45.917ZM45.917 53.1762V53.1884H47.417V53.1762H45.917ZM45.917 53.1641V53.1762H47.417V53.1641H45.917ZM45.917 53.1518V53.1641H47.417V53.1518H45.917ZM45.917 53.1396V53.1518H47.417V53.1396H45.917ZM45.917 53.1274V53.1396H47.417V53.1274H45.917ZM45.917 53.1151V53.1274H47.417V53.1151H45.917ZM45.917 53.1028V53.1151H47.417V53.1028H45.917ZM45.917 53.0905V53.1028H47.417V53.0905H45.917ZM45.917 53.0782V53.0905H47.417V53.0782H45.917ZM45.917 53.0659V53.0782H47.417V53.0659H45.917ZM45.917 53.0535V53.0659H47.417V53.0535H45.917ZM45.917 53.0412V53.0535H47.417V53.0412H45.917ZM45.917 53.0288V53.0412H47.417V53.0288H45.917ZM45.917 53.0164V53.0288H47.417V53.0164H45.917ZM45.917 53.004V53.0164H47.417V53.004H45.917ZM45.917 52.9915V53.004H47.417V52.9915H45.917ZM45.917 52.9791V52.9915H47.417V52.9791H45.917ZM45.917 52.9666V52.9791H47.417V52.9666H45.917ZM45.917 52.9541V52.9666H47.417V52.9541H45.917ZM45.917 52.9416V52.9541H47.417V52.9416H45.917ZM45.917 52.9291V52.9416H47.417V52.9291H45.917ZM45.917 52.9165V52.9291H47.417V52.9165H45.917ZM45.917 52.904V52.9165H47.417V52.904H45.917ZM45.917 52.8914V52.904H47.417V52.8914H45.917ZM45.917 52.8788V52.8914H47.417V52.8788H45.917ZM45.917 52.8662V52.8788H47.417V52.8662H45.917ZM45.917 52.8535V52.8662H47.417V52.8535H45.917ZM45.917 52.8409V52.8535H47.417V52.8409H45.917ZM45.917 52.8282V52.8409H47.417V52.8282H45.917ZM45.917 52.8155V52.8282H47.417V52.8155H45.917ZM45.917 52.8028V52.8155H47.417V52.8028H45.917ZM45.917 52.7901V52.8028H47.417V52.7901H45.917ZM45.917 52.7773V52.7901H47.417V52.7773H45.917ZM45.917 52.7646V52.7773H47.417V52.7646H45.917ZM45.917 52.7518V52.7646H47.417V52.7518H45.917ZM45.917 52.739V52.7518H47.417V52.739H45.917ZM45.917 52.7262V52.739H47.417V52.7262H45.917ZM45.917 52.7134V52.7262H47.417V52.7134H45.917ZM45.917 52.7005V52.7134H47.417V52.7005H45.917ZM45.917 52.6877V52.7005H47.417V52.6877H45.917ZM45.917 52.6748V52.6877H47.417V52.6748H45.917ZM45.917 52.6619V52.6748H47.417V52.6619H45.917ZM45.917 52.649V52.6619H47.417V52.649H45.917ZM45.917 52.636V52.649H47.417V52.636H45.917ZM45.917 52.6231V52.636H47.417V52.6231H45.917ZM45.917 52.6101V52.6231H47.417V52.6101H45.917ZM45.917 52.5971V52.6101H47.417V52.5971H45.917ZM45.917 52.5841V52.5971H47.417V52.5841H45.917ZM45.917 52.5711V52.5841H47.417V52.5711H45.917ZM45.917 52.5581V52.5711H47.417V52.5581H45.917ZM45.917 52.545V52.5581H47.417V52.545H45.917ZM45.917 52.5319V52.545H47.417V52.5319H45.917ZM45.917 52.5188V52.5319H47.417V52.5188H45.917ZM45.917 52.5057V52.5188H47.417V52.5057H45.917ZM45.917 52.4926V52.5057H47.417V52.4926H45.917ZM45.917 52.4794V52.4926H47.417V52.4794H45.917ZM45.917 52.4663V52.4794H47.417V52.4663H45.917ZM45.917 52.4531V52.4663H47.417V52.4531H45.917ZM45.917 52.4399V52.4531H47.417V52.4399H45.917ZM45.917 52.4267V52.4399H47.417V52.4267H45.917ZM45.917 52.4134V52.4267H47.417V52.4134H45.917ZM45.917 52.4002V52.4134H47.417V52.4002H45.917ZM45.917 52.3869V52.4002H47.417V52.3869H45.917ZM45.917 52.3736V52.3869H47.417V52.3736H45.917ZM45.917 52.3603V52.3736H47.417V52.3603H45.917ZM45.917 52.347V52.3603H47.417V52.347H45.917ZM45.917 52.3337V52.347H47.417V52.3337H45.917ZM45.917 52.3203V52.3337H47.417V52.3203H45.917ZM45.917 52.3069V52.3203H47.417V52.3069H45.917ZM45.917 52.2935V52.3069H47.417V52.2935H45.917ZM45.917 52.2801V52.2935H47.417V52.2801H45.917ZM45.917 52.2667V52.2801H47.417V52.2667H45.917ZM45.917 52.2532V52.2667H47.417V52.2532H45.917ZM45.917 52.2398V52.2532H47.417V52.2398H45.917ZM45.917 52.2263V52.2398H47.417V52.2263H45.917ZM45.917 52.2128V52.2263H47.417V52.2128H45.917ZM45.917 52.1993V52.2128H47.417V52.1993H45.917ZM45.917 52.1857V52.1993H47.417V52.1857H45.917ZM45.917 52.1722V52.1857H47.417V52.1722H45.917ZM45.917 52.1586V52.1722H47.417V52.1586H45.917ZM45.917 52.145V52.1586H47.417V52.145H45.917ZM45.917 52.1314V52.145H47.417V52.1314H45.917ZM45.917 52.1178V52.1314H47.417V52.1178H45.917ZM45.917 52.1041V52.1178H47.417V52.1041H45.917ZM45.917 52.0905V52.1041H47.417V52.0905H45.917ZM45.917 52.0768V52.0905H47.417V52.0768H45.917ZM45.917 52.0631V52.0768H47.417V52.0631H45.917ZM45.917 52.0494V52.0631H47.417V52.0494H45.917ZM45.917 52.0356V52.0494H47.417V52.0356H45.917ZM45.917 52.0219V52.0356H47.417V52.0219H45.917ZM45.917 52.0081V52.0219H47.417V52.0081H45.917ZM45.917 51.9943V52.0081H47.417V51.9943H45.917ZM45.917 51.9805V51.9943H47.417V51.9805H45.917ZM45.917 51.9667V51.9805H47.417V51.9667H45.917ZM45.917 51.9529V51.9667H47.417V51.9529H45.917ZM45.917 51.939V51.9529H47.417V51.939H45.917ZM45.917 51.9252V51.939H47.417V51.9252H45.917ZM45.917 51.9113V51.9252H47.417V51.9113H45.917ZM45.917 51.8974V51.9113H47.417V51.8974H45.917ZM45.917 51.8834V51.8974H47.417V51.8834H45.917ZM45.917 51.8695V51.8834H47.417V51.8695H45.917ZM45.917 51.8555V51.8695H47.417V51.8555H45.917ZM45.917 51.8415V51.8555H47.417V51.8415H45.917ZM45.917 51.8275V51.8415H47.417V51.8275H45.917ZM45.917 51.8135V51.8275H47.417V51.8135H45.917ZM45.917 51.7995V51.8135H47.417V51.7995H45.917ZM45.917 51.7854V51.7995H47.417V51.7854H45.917ZM45.917 51.7714V51.7854H47.417V51.7714H45.917ZM45.917 51.7573V51.7714H47.417V51.7573H45.917ZM45.917 51.7432V51.7573H47.417V51.7432H45.917ZM45.917 51.7291V51.7432H47.417V51.7291H45.917ZM45.917 51.7149V51.7291H47.417V51.7149H45.917ZM45.917 51.7008V51.7149H47.417V51.7008H45.917ZM45.917 51.6866V51.7008H47.417V51.6866H45.917ZM45.917 51.6724V51.6866H47.417V51.6724H45.917ZM45.917 51.6582V51.6724H47.417V51.6582H45.917ZM45.917 51.644V51.6582H47.417V51.644H45.917ZM45.917 51.6297V51.644H47.417V51.6297H45.917ZM45.917 51.6155V51.6297H47.417V51.6155H45.917ZM45.917 51.6012V51.6155H47.417V51.6012H45.917ZM45.917 51.5869V51.6012H47.417V51.5869H45.917ZM45.917 51.5726V51.5869H47.417V51.5726H45.917ZM45.917 51.5582V51.5726H47.417V51.5582H45.917ZM45.917 51.5439V51.5582H47.417V51.5439H45.917ZM45.917 51.5295V51.5439H47.417V51.5295H45.917ZM45.917 51.5151V51.5295H47.417V51.5151H45.917ZM45.917 51.5007V51.5151H47.417V51.5007H45.917ZM45.917 51.4863V51.5007H47.417V51.4863H45.917ZM45.917 51.4719V51.4863H47.417V51.4719H45.917ZM45.917 51.4574V51.4719H47.417V51.4574H45.917ZM45.917 51.4429V51.4574H47.417V51.4429H45.917ZM45.917 51.4284V51.4429H47.417V51.4284H45.917ZM45.917 51.4139V51.4284H47.417V51.4139H45.917ZM45.917 51.3994V51.4139H47.417V51.3994H45.917ZM45.917 51.3848V51.3994H47.417V51.3848H45.917ZM45.917 51.3703V51.3848H47.417V51.3703H45.917ZM45.917 51.3557V51.3703H47.417V51.3557H45.917ZM45.917 51.3411V51.3557H47.417V51.3411H45.917ZM45.917 51.3265V51.3411H47.417V51.3265H45.917ZM45.917 51.3119V51.3265H47.417V51.3119H45.917ZM45.917 51.2972V51.3119H47.417V51.2972H45.917ZM45.917 51.2825V51.2972H47.417V51.2825H45.917ZM45.917 51.2678V51.2825H47.417V51.2678H45.917ZM45.917 51.2531V51.2678H47.417V51.2531H45.917ZM45.917 51.2384V51.2531H47.417V51.2384H45.917ZM45.917 51.2237V51.2384H47.417V51.2237H45.917ZM45.917 51.2089V51.2237H47.417V51.2089H45.917ZM45.917 51.1941V51.2089H47.417V51.1941H45.917ZM45.917 51.1793V51.1941H47.417V51.1793H45.917ZM45.917 51.1645V51.1793H47.417V51.1645H45.917ZM45.917 51.1497V51.1645H47.417V51.1497H45.917ZM45.917 51.1349V51.1497H47.417V51.1349H45.917ZM45.917 51.12V51.1349H47.417V51.12H45.917ZM45.917 51.1051V51.12H47.417V51.1051H45.917ZM45.917 51.0902V51.1051H47.417V51.0902H45.917ZM45.917 51.0753V51.0902H47.417V51.0753H45.917ZM45.917 51.0604V51.0753H47.417V51.0604H45.917ZM45.917 51.0454V51.0604H47.417V51.0454H45.917ZM45.917 51.0304V51.0454H47.417V51.0304H45.917ZM45.917 51.0154V51.0304H47.417V51.0154H45.917ZM45.917 51.0004V51.0154H47.417V51.0004H45.917ZM45.917 50.9854V51.0004H47.417V50.9854H45.917ZM45.917 50.9704V50.9854H47.417V50.9704H45.917ZM45.917 50.9553V50.9704H47.417V50.9553H45.917ZM45.917 50.9402V50.9553H47.417V50.9402H45.917ZM45.917 50.9251V50.9402H47.417V50.9251H45.917ZM45.917 50.91V50.9251H47.417V50.91H45.917ZM45.917 50.8949V50.91H47.417V50.8949H45.917ZM45.917 50.8797V50.8949H47.417V50.8797H45.917ZM45.917 50.8646V50.8797H47.417V50.8646H45.917ZM45.917 50.8494V50.8646H47.417V50.8494H45.917ZM45.917 50.8342V50.8494H47.417V50.8342H45.917ZM45.917 50.819V50.8342H47.417V50.819H45.917ZM45.917 50.8037V50.819H47.417V50.8037H45.917ZM45.917 50.7885V50.8037H47.417V50.7885H45.917ZM45.917 50.7732V50.7885H47.417V50.7732H45.917ZM45.917 50.7579V50.7732H47.417V50.7579H45.917ZM45.917 50.7426V50.7579H47.417V50.7426H45.917ZM45.917 50.7273V50.7426H47.417V50.7273H45.917ZM45.917 50.7119V50.7273H47.417V50.7119H45.917ZM45.917 50.6966V50.7119H47.417V50.6966H45.917ZM45.917 50.6812V50.6966H47.417V50.6812H45.917ZM45.917 50.6658V50.6812H47.417V50.6658H45.917ZM45.917 50.6504V50.6658H47.417V50.6504H45.917ZM45.917 50.635V50.6504H47.417V50.635H45.917ZM45.917 50.6195V50.635H47.417V50.6195H45.917ZM45.917 50.604V50.6195H47.417V50.604H45.917ZM45.917 50.5886V50.604H47.417V50.5886H45.917ZM45.917 50.5731V50.5886H47.417V50.5731H45.917ZM45.917 50.5575V50.5731H47.417V50.5575H45.917ZM45.917 50.542V50.5575H47.417V50.542H45.917ZM45.917 50.5264V50.542H47.417V50.5264H45.917ZM45.917 50.5109V50.5264H47.417V50.5109H45.917ZM45.917 50.4953V50.5109H47.417V50.4953H45.917ZM45.917 50.4797V50.4953H47.417V50.4797H45.917ZM45.917 50.464V50.4797H47.417V50.464H45.917ZM45.917 50.4484V50.464H47.417V50.4484H45.917ZM45.917 50.4327V50.4484H47.417V50.4327H45.917ZM45.917 50.4171V50.4327H47.417V50.4171H45.917ZM45.917 50.4014V50.4171H47.417V50.4014H45.917ZM45.917 50.3857V50.4014H47.417V50.3857H45.917ZM45.917 50.3699V50.3857H47.417V50.3699H45.917ZM45.917 50.3542V50.3699H47.417V50.3542H45.917ZM45.917 50.3384V50.3542H47.417V50.3384H45.917ZM45.917 50.3226V50.3384H47.417V50.3226H45.917ZM45.917 50.3068V50.3226H47.417V50.3068H45.917ZM45.917 50.291V50.3068H47.417V50.291H45.917ZM45.917 50.2752V50.291H47.417V50.2752H45.917ZM45.917 50.2593V50.2752H47.417V50.2593H45.917ZM45.917 50.2434V50.2593H47.417V50.2434H45.917ZM45.917 50.2275V50.2434H47.417V50.2275H45.917ZM45.917 50.2116V50.2275H47.417V50.2116H45.917ZM45.917 50.1957V50.2116H47.417V50.1957H45.917ZM45.917 50.1797V50.1957H47.417V50.1797H45.917ZM45.917 50.1638V50.1797H47.417V50.1638H45.917ZM45.917 50.1478V50.1638H47.417V50.1478H45.917ZM45.917 50.1318V50.1478H47.417V50.1318H45.917ZM45.917 50.1158V50.1318H47.417V50.1158H45.917ZM45.917 50.0998V50.1158H47.417V50.0998H45.917ZM45.917 50.0837V50.0998H47.417V50.0837H45.917ZM45.917 50.0676V50.0837H47.417V50.0676H45.917ZM45.917 50.0515V50.0676H47.417V50.0515H45.917ZM45.917 50.0354V50.0515H47.417V50.0354H45.917ZM45.917 50.0193V50.0354H47.417V50.0193H45.917ZM45.917 50.0032V50.0193H47.417V50.0032H45.917ZM45.917 49.987V50.0032H47.417V49.987H45.917ZM45.917 49.9709V49.987H47.417V49.9709H45.917ZM45.917 49.9547V49.9709H47.417V49.9547H45.917ZM45.917 49.9384V49.9547H47.417V49.9384H45.917ZM45.917 49.9222V49.9384H47.417V49.9222H45.917ZM45.917 49.906V49.9222H47.417V49.906H45.917ZM45.917 49.8897V49.906H47.417V49.8897H45.917ZM45.917 49.8734V49.8897H47.417V49.8734H45.917ZM45.917 49.8571V49.8734H47.417V49.8571H45.917ZM45.917 49.8408V49.8571H47.417V49.8408H45.917ZM45.917 49.8245V49.8408H47.417V49.8245H45.917ZM45.917 49.8081V49.8245H47.417V49.8081H45.917ZM45.917 49.7918V49.8081H47.417V49.7918H45.917ZM45.917 49.7754V49.7918H47.417V49.7754H45.917ZM45.917 49.759V49.7754H47.417V49.759H45.917ZM45.917 49.7425V49.759H47.417V49.7425H45.917ZM45.917 49.7261V49.7425H47.417V49.7261H45.917ZM45.917 49.7096V49.7261H47.417V49.7096H45.917ZM45.917 49.6932V49.7096H47.417V49.6932H45.917ZM45.917 49.6767V49.6932H47.417V49.6767H45.917ZM45.917 49.6602V49.6767H47.417V49.6602H45.917ZM45.917 49.6436V49.6602H47.417V49.6436H45.917ZM45.917 49.6271V49.6436H47.417V49.6271H45.917ZM45.917 49.6105V49.6271H47.417V49.6105H45.917ZM45.917 49.5939V49.6105H47.417V49.5939H45.917ZM45.917 49.5773V49.5939H47.417V49.5773H45.917ZM45.917 49.5607V49.5773H47.417V49.5607H45.917ZM45.917 49.5441V49.5607H47.417V49.5441H45.917ZM45.917 49.5274V49.5441H47.417V49.5274H45.917ZM45.917 49.5108V49.5274H47.417V49.5108H45.917ZM45.917 49.4941V49.5108H47.417V49.4941H45.917ZM45.917 49.4774V49.4941H47.417V49.4774H45.917ZM45.917 49.4606V49.4774H47.417V49.4606H45.917ZM45.917 49.4439V49.4606H47.417V49.4439H45.917ZM45.917 49.4271V49.4439H47.417V49.4271H45.917ZM45.917 49.4104V49.4271H47.417V49.4104H45.917ZM45.917 49.3936V49.4104H47.417V49.3936H45.917ZM45.917 49.3768V49.3936H47.417V49.3768H45.917ZM45.917 49.3599V49.3768H47.417V49.3599H45.917ZM45.917 49.3431V49.3599H47.417V49.3431H45.917ZM45.917 49.3262V49.3431H47.417V49.3262H45.917ZM45.917 49.3093V49.3262H47.417V49.3093H45.917ZM45.917 49.2924V49.3093H47.417V49.2924H45.917ZM45.917 49.2755V49.2924H47.417V49.2755H45.917ZM45.917 49.2586V49.2755H47.417V49.2586H45.917ZM45.917 49.2416V49.2586H47.417V49.2416H45.917ZM45.917 49.2246V49.2416H47.417V49.2246H45.917ZM45.917 49.2077V49.2246H47.417V49.2077H45.917ZM45.917 49.1906V49.2077H47.417V49.1906H45.917ZM45.917 49.1736V49.1906H47.417V49.1736H45.917ZM45.917 49.1566V49.1736H47.417V49.1566H45.917ZM45.917 49.1395V49.1566H47.417V49.1395H45.917ZM45.917 49.1224V49.1395H47.417V49.1224H45.917ZM45.917 49.1053V49.1224H47.417V49.1053H45.917ZM45.917 49.0882V49.1053H47.417V49.0882H45.917ZM45.917 49.0711V49.0882H47.417V49.0711H45.917ZM45.917 49.0539V49.0711H47.417V49.0539H45.917ZM45.917 49.0368V49.0539H47.417V49.0368H45.917ZM45.917 49.0196V49.0368H47.417V49.0196H45.917ZM45.917 49.0024V49.0196H47.417V49.0024H45.917ZM45.917 48.9852V49.0024H47.417V48.9852H45.917ZM45.917 48.9679V48.9852H47.417V48.9679H45.917ZM45.917 48.9507V48.9679H47.417V48.9507H45.917ZM45.917 48.9334V48.9507H47.417V48.9334H45.917ZM45.917 48.9161V48.9334H47.417V48.9161H45.917ZM45.917 48.8988V48.9161H47.417V48.8988H45.917ZM45.917 48.8815V48.8988H47.417V48.8815H45.917ZM45.917 48.8641V48.8815H47.417V48.8641H45.917ZM45.917 48.8468V48.8641H47.417V48.8468H45.917ZM45.917 48.8294V48.8468H47.417V48.8294H45.917ZM45.917 48.812V48.8294H47.417V48.812H45.917ZM45.917 48.7946V48.812H47.417V48.7946H45.917ZM45.917 48.7772V48.7946H47.417V48.7772H45.917ZM45.917 48.7597V48.7772H47.417V48.7597H45.917ZM45.917 48.7422V48.7597H47.417V48.7422H45.917ZM45.917 48.7248V48.7422H47.417V48.7248H45.917ZM45.917 48.7072V48.7248H47.417V48.7072H45.917ZM45.917 48.6897V48.7072H47.417V48.6897H45.917ZM45.917 48.6722V48.6897H47.417V48.6722H45.917ZM45.917 48.6546V48.6722H47.417V48.6546H45.917ZM45.917 48.6371V48.6546H47.417V48.6371H45.917ZM45.917 48.6195V48.6371H47.417V48.6195H45.917ZM45.917 48.6019V48.6195H47.417V48.6019H45.917ZM45.917 48.5842V48.6019H47.417V48.5842H45.917ZM45.917 48.5666V48.5842H47.417V48.5666H45.917ZM45.917 48.5489V48.5666H47.417V48.5489H45.917ZM45.917 48.5312V48.5489H47.417V48.5312H45.917ZM45.917 48.5135V48.5312H47.417V48.5135H45.917ZM45.917 48.4958V48.5135H47.417V48.4958H45.917ZM45.917 48.4781V48.4958H47.417V48.4781H45.917ZM45.917 48.4603V48.4781H47.417V48.4603H45.917ZM45.917 48.4426V48.4603H47.417V48.4426H45.917ZM45.917 48.4248V48.4426H47.417V48.4248H45.917ZM45.917 48.407V48.4248H47.417V48.407H45.917ZM45.917 48.3892V48.407H47.417V48.3892H45.917ZM45.917 48.3713V48.3892H47.417V48.3713H45.917ZM45.917 48.3535V48.3713H47.417V48.3535H45.917ZM45.917 48.3356V48.3535H47.417V48.3356H45.917ZM45.917 48.3177V48.3356H47.417V48.3177H45.917ZM45.917 48.2998V48.3177H47.417V48.2998H45.917ZM45.917 48.2819V48.2998H47.417V48.2819H45.917ZM45.917 48.2639V48.2819H47.417V48.2639H45.917ZM45.917 48.2459V48.2639H47.417V48.2459H45.917ZM45.917 48.228V48.2459H47.417V48.228H45.917ZM45.917 48.21V48.228H47.417V48.21H45.917ZM45.917 48.192V48.21H47.417V48.192H45.917ZM45.917 48.1739V48.192H47.417V48.1739H45.917ZM45.917 48.1559V48.1739H47.417V48.1559H45.917ZM45.917 48.1378V48.1559H47.417V48.1378H45.917ZM45.917 48.1197V48.1378H47.417V48.1197H45.917ZM45.917 48.1016V48.1197H47.417V48.1016H45.917ZM45.917 48.0835V48.1016H47.417V48.0835H45.917ZM50.7813 31.5279C47.7032 36.3004 45.917 41.9856 45.917 48.0835H47.417C47.417 42.2826 49.1153 36.8784 52.0418 32.3409L50.7813 31.5279ZM53.0786 32.1172L51.8181 31.3041L51.0051 32.5647L52.2656 33.3777L53.0786 32.1172ZM57.0974 28.4782C59.4288 26.1707 62.1686 24.2768 65.1977 22.9143L64.5824 21.5463C61.3877 22.9833 58.4993 24.9802 56.0423 27.412L57.0974 28.4782ZM54.9816 27.4066L56.0368 28.4727L57.1029 27.4175L56.0477 26.3514L54.9816 27.4066ZM63.9671 20.1783C60.6068 21.6898 57.5699 23.7896 54.9871 26.3459L56.0423 27.412C58.4993 24.9802 61.3877 22.9833 64.5824 21.5463L63.9671 20.1783ZM65.5741 21.9226L64.9588 20.5546L63.5908 21.17L64.2061 22.5379L65.5741 21.9226Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("mask", { id: "path-9-outside-1_0_2341", maskUnits: "userSpaceOnUse", x: "63.75", y: "73.1045", width: "25", height: "35", fill: "black" }, /*#__PURE__*/React__namespace.default.createElement("rect", { fill: "white", x: "63.75", y: "73.1045", width: "25", height: "35" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M80.625 93.367C83.3898 91.7676 85.25 88.7783 85.25 85.3545C85.25 80.2459 81.1086 76.1045 76 76.1045C70.8914 76.1045 66.75 80.2459 66.75 85.3545C66.75 88.7783 68.6102 91.7676 71.375 93.367V100C71.375 102.555 73.4457 104.625 76 104.625C78.5543 104.625 80.625 102.555 80.625 100V93.367Z" })), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M80.625 93.367C83.3898 91.7676 85.25 88.7783 85.25 85.3545C85.25 80.2459 81.1086 76.1045 76 76.1045C70.8914 76.1045 66.75 80.2459 66.75 85.3545C66.75 88.7783 68.6102 91.7676 71.375 93.367V100C71.375 102.555 73.4457 104.625 76 104.625C78.5543 104.625 80.625 102.555 80.625 100V93.367Z", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M80.625 93.367L79.1228 90.7702L77.625 91.6366V93.367H80.625ZM71.375 93.367H74.375V91.6366L72.8772 90.7702L71.375 93.367ZM82.25 85.3545C82.25 87.6641 80.9988 89.685 79.1228 90.7702L82.1272 95.9638C85.7809 93.8503 88.25 89.8925 88.25 85.3545H82.25ZM76 79.1045C79.4518 79.1045 82.25 81.9027 82.25 85.3545H88.25C88.25 78.589 82.7655 73.1045 76 73.1045V79.1045ZM69.75 85.3545C69.75 81.9027 72.5482 79.1045 76 79.1045V73.1045C69.2345 73.1045 63.75 78.589 63.75 85.3545H69.75ZM72.8772 90.7702C71.0012 89.685 69.75 87.6641 69.75 85.3545H63.75C63.75 89.8925 66.2191 93.8503 69.8728 95.9638L72.8772 90.7702ZM74.375 100V93.367H68.375V100H74.375ZM76 101.625C75.1025 101.625 74.375 100.898 74.375 100H68.375C68.375 104.211 71.7888 107.625 76 107.625V101.625ZM77.625 100C77.625 100.898 76.8975 101.625 76 101.625V107.625C80.2112 107.625 83.625 104.211 83.625 100H77.625ZM77.625 93.367V100H83.625V93.367H77.625Z", fill: "white", mask: "url(#path-9-outside-1_0_2341)" })); const Photos = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M25.5449 60.3356C25.0803 58.6018 26.1092 56.8197 27.843 56.3552L84.765 41.103C86.4987 40.6384 88.2808 41.6673 88.7454 43.4011L106.257 108.756C106.722 110.489 105.693 112.271 103.959 112.736L47.037 127.988C45.3032 128.453 43.5211 127.424 43.0566 125.69L25.5449 60.3356Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M29.5254 61.6008C29.2396 60.5339 29.8727 59.4372 30.9397 59.1513L84.2298 44.8723C85.2967 44.5864 86.3934 45.2195 86.6793 46.2865L102.956 107.031C103.242 108.098 102.609 109.195 101.542 109.481L48.2515 123.76C47.1846 124.046 46.0879 123.413 45.802 122.346L29.5254 61.6008Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "47.0508", y: "32.75", width: "72.22", height: "83.86", rx: "3.25", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M42.0508 35V35.75H42.8008V35H42.0508ZM40.5508 35H39.8008V35.75H40.5508V35ZM62.3396 26.25H63.0896V25.5H62.3396V26.25ZM62.3396 27.75V28.5H63.0896V27.75H62.3396ZM66.5757 27.75H65.8257V28.5H66.5757V27.75ZM66.5757 26.25V25.5H65.8257V26.25H66.5757ZM73.2847 26.25H74.0347V25.5H73.2847V26.25ZM73.2847 27.75V28.5H74.0347V27.75H73.2847ZM42.8008 35C42.8008 31.4101 45.7109 28.5 49.3008 28.5V27C44.8825 27 41.3008 30.5817 41.3008 35H42.8008ZM40.5508 35.75H42.0508V34.25H40.5508V35.75ZM49.3008 25.5C44.0541 25.5 39.8008 29.7533 39.8008 35H41.3008C41.3008 30.5817 44.8825 27 49.3008 27V25.5ZM49.3347 25.5H49.3008V27H49.3347V25.5ZM49.3686 25.5H49.3347V27H49.3686V25.5ZM49.4025 25.5H49.3686V27H49.4025V25.5ZM49.4363 25.5H49.4025V27H49.4363V25.5ZM49.4701 25.5H49.4363V27H49.4701V25.5ZM49.5039 25.5H49.4701V27H49.5039V25.5ZM49.5377 25.5H49.5039V27H49.5377V25.5ZM49.5714 25.5H49.5377V27H49.5714V25.5ZM49.605 25.5H49.5714V27H49.605V25.5ZM49.6387 25.5H49.605V27H49.6387V25.5ZM49.6723 25.5H49.6387V27H49.6723V25.5ZM49.7059 25.5H49.6723V27H49.7059V25.5ZM49.7394 25.5H49.7059V27H49.7394V25.5ZM49.7729 25.5H49.7394V27H49.7729V25.5ZM49.8064 25.5H49.7729V27H49.8064V25.5ZM49.8398 25.5H49.8064V27H49.8398V25.5ZM49.8732 25.5H49.8398V27H49.8732V25.5ZM49.9066 25.5H49.8732V27H49.9066V25.5ZM49.9399 25.5H49.9066V27H49.9399V25.5ZM49.9733 25.5H49.9399V27H49.9733V25.5ZM50.0065 25.5H49.9733V27H50.0065V25.5ZM50.0398 25.5H50.0065V27H50.0398V25.5ZM50.073 25.5H50.0398V27H50.073V25.5ZM50.1062 25.5H50.073V27H50.1062V25.5ZM50.1393 25.5H50.1062V27H50.1393V25.5ZM50.1724 25.5H50.1393V27H50.1724V25.5ZM50.2055 25.5H50.1724V27H50.2055V25.5ZM50.2385 25.5H50.2055V27H50.2385V25.5ZM50.2715 25.5H50.2385V27H50.2715V25.5ZM50.3045 25.5H50.2715V27H50.3045V25.5ZM50.3375 25.5H50.3045V27H50.3375V25.5ZM50.3704 25.5H50.3375V27H50.3704V25.5ZM50.4032 25.5H50.3704V27H50.4032V25.5ZM50.4361 25.5H50.4032V27H50.4361V25.5ZM50.4689 25.5H50.4361V27H50.4689V25.5ZM50.5017 25.5H50.4689V27H50.5017V25.5ZM50.5344 25.5H50.5017V27H50.5344V25.5ZM50.5671 25.5H50.5344V27H50.5671V25.5ZM50.5998 25.5H50.5671V27H50.5998V25.5ZM50.6325 25.5H50.5998V27H50.6325V25.5ZM50.6651 25.5H50.6325V27H50.6651V25.5ZM50.6977 25.5H50.6651V27H50.6977V25.5ZM50.7302 25.5H50.6977V27H50.7302V25.5ZM50.7627 25.5H50.7302V27H50.7627V25.5ZM50.7952 25.5H50.7627V27H50.7952V25.5ZM50.8276 25.5H50.7952V27H50.8276V25.5ZM50.8601 25.5H50.8276V27H50.8601V25.5ZM50.8924 25.5H50.8601V27H50.8924V25.5ZM50.9248 25.5H50.8924V27H50.9248V25.5ZM50.9571 25.5H50.9248V27H50.9571V25.5ZM50.9894 25.5H50.9571V27H50.9894V25.5ZM51.0216 25.5H50.9894V27H51.0216V25.5ZM51.0538 25.5H51.0216V27H51.0538V25.5ZM51.086 25.5H51.0538V27H51.086V25.5ZM51.1182 25.5H51.086V27H51.1182V25.5ZM51.1503 25.5H51.1182V27H51.1503V25.5ZM51.1824 25.5H51.1503V27H51.1824V25.5ZM51.2144 25.5H51.1824V27H51.2144V25.5ZM51.2464 25.5H51.2144V27H51.2464V25.5ZM51.2784 25.5H51.2464V27H51.2784V25.5ZM51.3104 25.5H51.2784V27H51.3104V25.5ZM51.3423 25.5H51.3104V27H51.3423V25.5ZM51.3742 25.5H51.3423V27H51.3742V25.5ZM51.406 25.5H51.3742V27H51.406V25.5ZM51.4378 25.5H51.406V27H51.4378V25.5ZM51.4696 25.5H51.4378V27H51.4696V25.5ZM51.5014 25.5H51.4696V27H51.5014V25.5ZM51.5331 25.5H51.5014V27H51.5331V25.5ZM51.5648 25.5H51.5331V27H51.5648V25.5ZM51.5964 25.5H51.5648V27H51.5964V25.5ZM51.628 25.5H51.5964V27H51.628V25.5ZM51.6596 25.5H51.628V27H51.6596V25.5ZM51.6912 25.5H51.6596V27H51.6912V25.5ZM51.7227 25.5H51.6912V27H51.7227V25.5ZM51.7542 25.5H51.7227V27H51.7542V25.5ZM51.7856 25.5H51.7542V27H51.7856V25.5ZM51.817 25.5H51.7856V27H51.817V25.5ZM51.8484 25.5H51.817V27H51.8484V25.5ZM51.8798 25.5H51.8484V27H51.8798V25.5ZM51.9111 25.5H51.8798V27H51.9111V25.5ZM51.9424 25.5H51.9111V27H51.9424V25.5ZM51.9736 25.5H51.9424V27H51.9736V25.5ZM52.0048 25.5H51.9736V27H52.0048V25.5ZM52.036 25.5H52.0048V27H52.036V25.5ZM52.0672 25.5H52.036V27H52.0672V25.5ZM52.0983 25.5H52.0672V27H52.0983V25.5ZM52.1294 25.5H52.0983V27H52.1294V25.5ZM52.1604 25.5H52.1294V27H52.1604V25.5ZM52.1915 25.5H52.1604V27H52.1915V25.5ZM52.2225 25.5H52.1915V27H52.2225V25.5ZM52.2534 25.5H52.2225V27H52.2534V25.5ZM52.2843 25.5H52.2534V27H52.2843V25.5ZM52.3152 25.5H52.2843V27H52.3152V25.5ZM52.3461 25.5H52.3152V27H52.3461V25.5ZM52.3769 25.5H52.3461V27H52.3769V25.5ZM52.4077 25.5H52.3769V27H52.4077V25.5ZM52.4384 25.5H52.4077V27H52.4384V25.5ZM52.4692 25.5H52.4384V27H52.4692V25.5ZM52.4999 25.5H52.4692V27H52.4999V25.5ZM52.5305 25.5H52.4999V27H52.5305V25.5ZM52.5611 25.5H52.5305V27H52.5611V25.5ZM52.5917 25.5H52.5611V27H52.5917V25.5ZM52.6223 25.5H52.5917V27H52.6223V25.5ZM52.6528 25.5H52.6223V27H52.6528V25.5ZM52.6833 25.5H52.6528V27H52.6833V25.5ZM52.7137 25.5H52.6833V27H52.7137V25.5ZM52.7442 25.5H52.7137V27H52.7442V25.5ZM52.7746 25.5H52.7442V27H52.7746V25.5ZM52.8049 25.5H52.7746V27H52.8049V25.5ZM52.8352 25.5H52.8049V27H52.8352V25.5ZM52.8655 25.5H52.8352V27H52.8655V25.5ZM52.8958 25.5H52.8655V27H52.8958V25.5ZM52.926 25.5H52.8958V27H52.926V25.5ZM52.9562 25.5H52.926V27H52.9562V25.5ZM52.9864 25.5H52.9562V27H52.9864V25.5ZM53.0165 25.5H52.9864V27H53.0165V25.5ZM53.0466 25.5H53.0165V27H53.0466V25.5ZM53.0766 25.5H53.0466V27H53.0766V25.5ZM53.1067 25.5H53.0766V27H53.1067V25.5ZM53.1367 25.5H53.1067V27H53.1367V25.5ZM53.1666 25.5H53.1367V27H53.1666V25.5ZM53.1965 25.5H53.1666V27H53.1965V25.5ZM53.2264 25.5H53.1965V27H53.2264V25.5ZM53.2563 25.5H53.2264V27H53.2563V25.5ZM53.2861 25.5H53.2563V27H53.2861V25.5ZM53.3159 25.5H53.2861V27H53.3159V25.5ZM53.3457 25.5H53.3159V27H53.3457V25.5ZM53.3754 25.5H53.3457V27H53.3754V25.5ZM53.4051 25.5H53.3754V27H53.4051V25.5ZM53.4348 25.5H53.4051V27H53.4348V25.5ZM53.4644 25.5H53.4348V27H53.4644V25.5ZM53.494 25.5H53.4644V27H53.494V25.5ZM53.5236 25.5H53.494V27H53.5236V25.5ZM53.5531 25.5H53.5236V27H53.5531V25.5ZM53.5826 25.5H53.5531V27H53.5826V25.5ZM53.612 25.5H53.5826V27H53.612V25.5ZM53.6415 25.5H53.612V27H53.6415V25.5ZM53.6709 25.5H53.6415V27H53.6709V25.5ZM53.7002 25.5H53.6709V27H53.7002V25.5ZM53.7296 25.5H53.7002V27H53.7296V25.5ZM53.7588 25.5H53.7296V27H53.7588V25.5ZM53.7881 25.5H53.7588V27H53.7881V25.5ZM53.8173 25.5H53.7881V27H53.8173V25.5ZM53.8465 25.5H53.8173V27H53.8465V25.5ZM53.8757 25.5H53.8465V27H53.8757V25.5ZM53.9048 25.5H53.8757V27H53.9048V25.5ZM53.9339 25.5H53.9048V27H53.9339V25.5ZM53.963 25.5H53.9339V27H53.963V25.5ZM53.992 25.5H53.963V27H53.992V25.5ZM54.021 25.5H53.992V27H54.021V25.5ZM54.05 25.5H54.021V27H54.05V25.5ZM54.0789 25.5H54.05V27H54.0789V25.5ZM54.1078 25.5H54.0789V27H54.1078V25.5ZM54.1367 25.5H54.1078V27H54.1367V25.5ZM54.1655 25.5H54.1367V27H54.1655V25.5ZM54.1943 25.5H54.1655V27H54.1943V25.5ZM54.2231 25.5H54.1943V27H54.2231V25.5ZM54.2518 25.5H54.2231V27H54.2518V25.5ZM54.2805 25.5H54.2518V27H54.2805V25.5ZM54.3092 25.5H54.2805V27H54.3092V25.5ZM54.3378 25.5H54.3092V27H54.3378V25.5ZM54.3664 25.5H54.3378V27H54.3664V25.5ZM54.395 25.5H54.3664V27H54.395V25.5ZM54.4235 25.5H54.395V27H54.4235V25.5ZM54.452 25.5H54.4235V27H54.452V25.5ZM54.4805 25.5H54.452V27H54.4805V25.5ZM54.5089 25.5H54.4805V27H54.5089V25.5ZM54.5373 25.5H54.5089V27H54.5373V25.5ZM54.5657 25.5H54.5373V27H54.5657V25.5ZM54.594 25.5H54.5657V27H54.594V25.5ZM54.6223 25.5H54.594V27H54.6223V25.5ZM54.6506 25.5H54.6223V27H54.6506V25.5ZM54.6788 25.5H54.6506V27H54.6788V25.5ZM54.707 25.5H54.6788V27H54.707V25.5ZM54.7352 25.5H54.707V27H54.7352V25.5ZM54.7633 25.5H54.7352V27H54.7633V25.5ZM54.7914 25.5H54.7633V27H54.7914V25.5ZM54.8195 25.5H54.7914V27H54.8195V25.5ZM54.8475 25.5H54.8195V27H54.8475V25.5ZM54.8755 25.5H54.8475V27H54.8755V25.5ZM54.9035 25.5H54.8755V27H54.9035V25.5ZM54.9314 25.5H54.9035V27H54.9314V25.5ZM54.9594 25.5H54.9314V27H54.9594V25.5ZM54.9872 25.5H54.9594V27H54.9872V25.5ZM55.0151 25.5H54.9872V27H55.0151V25.5ZM55.0429 25.5H55.0151V27H55.0429V25.5ZM55.0706 25.5H55.0429V27H55.0706V25.5ZM55.0984 25.5H55.0706V27H55.0984V25.5ZM55.1261 25.5H55.0984V27H55.1261V25.5ZM55.1537 25.5H55.1261V27H55.1537V25.5ZM55.1814 25.5H55.1537V27H55.1814V25.5ZM55.209 25.5H55.1814V27H55.209V25.5ZM55.2366 25.5H55.209V27H55.2366V25.5ZM55.2641 25.5H55.2366V27H55.2641V25.5ZM55.2916 25.5H55.2641V27H55.2916V25.5ZM55.3191 25.5H55.2916V27H55.3191V25.5ZM55.3465 25.5H55.3191V27H55.3465V25.5ZM55.3739 25.5H55.3465V27H55.3739V25.5ZM55.4013 25.5H55.3739V27H55.4013V25.5ZM55.4286 25.5H55.4013V27H55.4286V25.5ZM55.4559 25.5H55.4286V27H55.4559V25.5ZM55.4832 25.5H55.4559V27H55.4832V25.5ZM55.5105 25.5H55.4832V27H55.5105V25.5ZM55.5377 25.5H55.5105V27H55.5377V25.5ZM55.5648 25.5H55.5377V27H55.5648V25.5ZM55.592 25.5H55.5648V27H55.592V25.5ZM55.6191 25.5H55.592V27H55.6191V25.5ZM55.6462 25.5H55.6191V27H55.6462V25.5ZM55.6732 25.5H55.6462V27H55.6732V25.5ZM55.7002 25.5H55.6732V27H55.7002V25.5ZM55.7272 25.5H55.7002V27H55.7272V25.5ZM55.7541 25.5H55.7272V27H55.7541V25.5ZM55.781 25.5H55.7541V27H55.781V25.5ZM55.8079 25.5H55.781V27H55.8079V25.5ZM55.8348 25.5H55.8079V27H55.8348V25.5ZM55.8616 25.5H55.8348V27H55.8616V25.5ZM55.8883 25.5H55.8616V27H55.8883V25.5ZM55.9151 25.5H55.8883V27H55.9151V25.5ZM55.9418 25.5H55.9151V27H55.9418V25.5ZM55.9685 25.5H55.9418V27H55.9685V25.5ZM55.9951 25.5H55.9685V27H55.9951V25.5ZM56.0217 25.5H55.9951V27H56.0217V25.5ZM56.0483 25.5H56.0217V27H56.0483V25.5ZM56.0749 25.5H56.0483V27H56.0749V25.5ZM56.1014 25.5H56.0749V27H56.1014V25.5ZM56.1278 25.5H56.1014V27H56.1278V25.5ZM56.1543 25.5H56.1278V27H56.1543V25.5ZM56.1807 25.5H56.1543V27H56.1807V25.5ZM56.2071 25.5H56.1807V27H56.2071V25.5ZM56.2334 25.5H56.2071V27H56.2334V25.5ZM56.2597 25.5H56.2334V27H56.2597V25.5ZM56.286 25.5H56.2597V27H56.286V25.5ZM56.3123 25.5H56.286V27H56.3123V25.5ZM56.3385 25.5H56.3123V27H56.3385V25.5ZM56.3646 25.5H56.3385V27H56.3646V25.5ZM56.3908 25.5H56.3646V27H56.3908V25.5ZM56.4169 25.5H56.3908V27H56.4169V25.5ZM56.443 25.5H56.4169V27H56.443V25.5ZM56.469 25.5H56.443V27H56.469V25.5ZM56.495 25.5H56.469V27H56.495V25.5ZM56.521 25.5H56.495V27H56.521V25.5ZM56.547 25.5H56.521V27H56.547V25.5ZM56.5729 25.5H56.547V27H56.5729V25.5ZM56.5988 25.5H56.5729V27H56.5988V25.5ZM56.6246 25.5H56.5988V27H56.6246V25.5ZM56.6504 25.5H56.6246V27H56.6504V25.5ZM56.6762 25.5H56.6504V27H56.6762V25.5ZM56.702 25.5H56.6762V27H56.702V25.5ZM56.7277 25.5H56.702V27H56.7277V25.5ZM56.7534 25.5H56.7277V27H56.7534V25.5ZM56.779 25.5H56.7534V27H56.779V25.5ZM56.8046 25.5H56.779V27H56.8046V25.5ZM56.8302 25.5H56.8046V27H56.8302V25.5ZM56.8558 25.5H56.8302V27H56.8558V25.5ZM56.8813 25.5H56.8558V27H56.8813V25.5ZM56.9068 25.5H56.8813V27H56.9068V25.5ZM56.9322 25.5H56.9068V27H56.9322V25.5ZM56.9576 25.5H56.9322V27H56.9576V25.5ZM56.983 25.5H56.9576V27H56.983V25.5ZM57.0084 25.5H56.983V27H57.0084V25.5ZM57.0337 25.5H57.0084V27H57.0337V25.5ZM57.059 25.5H57.0337V27H57.059V25.5ZM57.0842 25.5H57.059V27H57.0842V25.5ZM57.1094 25.5H57.0842V27H57.1094V25.5ZM57.1346 25.5H57.1094V27H57.1346V25.5ZM57.1598 25.5H57.1346V27H57.1598V25.5ZM57.1849 25.5H57.1598V27H57.1849V25.5ZM57.21 25.5H57.1849V27H57.21V25.5ZM57.235 25.5H57.21V27H57.235V25.5ZM57.26 25.5H57.235V27H57.26V25.5ZM57.285 25.5H57.26V27H57.285V25.5ZM57.31 25.5H57.285V27H57.31V25.5ZM57.3349 25.5H57.31V27H57.3349V25.5ZM57.3598 25.5H57.3349V27H57.3598V25.5ZM57.3846 25.5H57.3598V27H57.3846V25.5ZM57.4095 25.5H57.3846V27H57.4095V25.5ZM57.4342 25.5H57.4095V27H57.4342V25.5ZM57.459 25.5H57.4342V27H57.459V25.5ZM57.4837 25.5H57.459V27H57.4837V25.5ZM57.5084 25.5H57.4837V27H57.5084V25.5ZM57.5331 25.5H57.5084V27H57.5331V25.5ZM57.5577 25.5H57.5331V27H57.5577V25.5ZM57.5823 25.5H57.5577V27H57.5823V25.5ZM57.6068 25.5H57.5823V27H57.6068V25.5ZM57.6313 25.5H57.6068V27H57.6313V25.5ZM57.6558 25.5H57.6313V27H57.6558V25.5ZM57.6803 25.5H57.6558V27H57.6803V25.5ZM57.7047 25.5H57.6803V27H57.7047V25.5ZM57.7291 25.5H57.7047V27H57.7291V25.5ZM57.7534 25.5H57.7291V27H57.7534V25.5ZM57.7778 25.5H57.7534V27H57.7778V25.5ZM57.8021 25.5H57.7778V27H57.8021V25.5ZM57.8263 25.5H57.8021V27H57.8263V25.5ZM57.8505 25.5H57.8263V27H57.8505V25.5ZM57.8747 25.5H57.8505V27H57.8747V25.5ZM57.8989 25.5H57.8747V27H57.8989V25.5ZM57.923 25.5H57.8989V27H57.923V25.5ZM57.9471 25.5H57.923V27H57.9471V25.5ZM57.9712 25.5H57.9471V27H57.9712V25.5ZM57.9952 25.5H57.9712V27H57.9952V25.5ZM58.0192 25.5H57.9952V27H58.0192V25.5ZM58.0431 25.5H58.0192V27H58.0431V25.5ZM58.0671 25.5H58.0431V27H58.0671V25.5ZM58.0909 25.5H58.0671V27H58.0909V25.5ZM58.1148 25.5H58.0909V27H58.1148V25.5ZM58.1386 25.5H58.1148V27H58.1386V25.5ZM58.1624 25.5H58.1386V27H58.1624V25.5ZM58.1862 25.5H58.1624V27H58.1862V25.5ZM58.2099 25.5H58.1862V27H58.2099V25.5ZM58.2336 25.5H58.2099V27H58.2336V25.5ZM58.2573 25.5H58.2336V27H58.2573V25.5ZM58.2809 25.5H58.2573V27H58.2809V25.5ZM58.3045 25.5H58.2809V27H58.3045V25.5ZM58.328 25.5H58.3045V27H58.328V25.5ZM58.3516 25.5H58.328V27H58.3516V25.5ZM58.3751 25.5H58.3516V27H58.3751V25.5ZM58.3985 25.5H58.3751V27H58.3985V25.5ZM58.4219 25.5H58.3985V27H58.4219V25.5ZM58.4453 25.5H58.4219V27H58.4453V25.5ZM58.4687 25.5H58.4453V27H58.4687V25.5ZM58.492 25.5H58.4687V27H58.492V25.5ZM58.5153 25.5H58.492V27H58.5153V25.5ZM58.5386 25.5H58.5153V27H58.5386V25.5ZM58.5618 25.5H58.5386V27H58.5618V25.5ZM58.585 25.5H58.5618V27H58.585V25.5ZM58.6082 25.5H58.585V27H58.6082V25.5ZM58.6313 25.5H58.6082V27H58.6313V25.5ZM58.6544 25.5H58.6313V27H58.6544V25.5ZM58.6775 25.5H58.6544V27H58.6775V25.5ZM58.7005 25.5H58.6775V27H58.7005V25.5ZM58.7235 25.5H58.7005V27H58.7235V25.5ZM58.7464 25.5H58.7235V27H58.7464V25.5ZM58.7694 25.5H58.7464V27H58.7694V25.5ZM58.7923 25.5H58.7694V27H58.7923V25.5ZM58.8151 25.5H58.7923V27H58.8151V25.5ZM58.838 25.5H58.8151V27H58.838V25.5ZM58.8608 25.5H58.838V27H58.8608V25.5ZM58.8835 25.5H58.8608V27H58.8835V25.5ZM58.9063 25.5H58.8835V27H58.9063V25.5ZM58.9289 25.5H58.9063V27H58.9289V25.5ZM58.9516 25.5H58.9289V27H58.9516V25.5ZM58.9742 25.5H58.9516V27H58.9742V25.5ZM58.9968 25.5H58.9742V27H58.9968V25.5ZM59.0194 25.5H58.9968V27H59.0194V25.5ZM59.0419 25.5H59.0194V27H59.0419V25.5ZM59.0644 25.5H59.0419V27H59.0644V25.5ZM59.0869 25.5H59.0644V27H59.0869V25.5ZM59.1093 25.5H59.0869V27H59.1093V25.5ZM59.1317 25.5H59.1093V27H59.1317V25.5ZM59.1541 25.5H59.1317V27H59.1541V25.5ZM59.1764 25.5H59.1541V27H59.1764V25.5ZM59.1987 25.5H59.1764V27H59.1987V25.5ZM59.221 25.5H59.1987V27H59.221V25.5ZM59.2432 25.5H59.221V27H59.2432V25.5ZM59.2654 25.5H59.2432V27H59.2654V25.5ZM59.2876 25.5H59.2654V27H59.2876V25.5ZM59.3097 25.5H59.2876V27H59.3097V25.5ZM59.3318 25.5H59.3097V27H59.3318V25.5ZM59.3539 25.5H59.3318V27H59.3539V25.5ZM59.3759 25.5H59.3539V27H59.3759V25.5ZM59.3979 25.5H59.3759V27H59.3979V25.5ZM59.4199 25.5H59.3979V27H59.4199V25.5ZM59.4418 25.5H59.4199V27H59.4418V25.5ZM59.4637 25.5H59.4418V27H59.4637V25.5ZM59.4856 25.5H59.4637V27H59.4856V25.5ZM59.5074 25.5H59.4856V27H59.5074V25.5ZM59.5293 25.5H59.5074V27H59.5293V25.5ZM59.551 25.5H59.5293V27H59.551V25.5ZM59.5728 25.5H59.551V27H59.5728V25.5ZM59.5945 25.5H59.5728V27H59.5945V25.5ZM59.6161 25.5H59.5945V27H59.6161V25.5ZM59.6378 25.5H59.6161V27H59.6378V25.5ZM59.6594 25.5H59.6378V27H59.6594V25.5ZM59.6809 25.5H59.6594V27H59.6809V25.5ZM59.7025 25.5H59.6809V27H59.7025V25.5ZM59.724 25.5H59.7025V27H59.724V25.5ZM59.7454 25.5H59.724V27H59.7454V25.5ZM59.7669 25.5H59.7454V27H59.7669V25.5ZM59.7883 25.5H59.7669V27H59.7883V25.5ZM59.8097 25.5H59.7883V27H59.8097V25.5ZM59.831 25.5H59.8097V27H59.831V25.5ZM59.8523 25.5H59.831V27H59.8523V25.5ZM59.8736 25.5H59.8523V27H59.8736V25.5ZM59.8948 25.5H59.8736V27H59.8948V25.5ZM59.916 25.5H59.8948V27H59.916V25.5ZM59.9372 25.5H59.916V27H59.9372V25.5ZM59.9583 25.5H59.9372V27H59.9583V25.5ZM59.9794 25.5H59.9583V27H59.9794V25.5ZM60.0005 25.5H59.9794V27H60.0005V25.5ZM60.0216 25.5H60.0005V27H60.0216V25.5ZM60.0426 25.5H60.0216V27H60.0426V25.5ZM60.0635 25.5H60.0426V27H60.0635V25.5ZM60.0845 25.5H60.0635V27H60.0845V25.5ZM60.1054 25.5H60.0845V27H60.1054V25.5ZM60.1263 25.5H60.1054V27H60.1263V25.5ZM60.1471 25.5H60.1263V27H60.1471V25.5ZM60.1679 25.5H60.1471V27H60.1679V25.5ZM60.1887 25.5H60.1679V27H60.1887V25.5ZM60.2094 25.5H60.1887V27H60.2094V25.5ZM60.2301 25.5H60.2094V27H60.2301V25.5ZM60.2508 25.5H60.2301V27H60.2508V25.5ZM60.2714 25.5H60.2508V27H60.2714V25.5ZM60.292 25.5H60.2714V27H60.292V25.5ZM60.3126 25.5H60.292V27H60.3126V25.5ZM60.3332 25.5H60.3126V27H60.3332V25.5ZM60.3537 25.5H60.3332V27H60.3537V25.5ZM60.3742 25.5H60.3537V27H60.3742V25.5ZM60.3946 25.5H60.3742V27H60.3946V25.5ZM60.415 25.5H60.3946V27H60.415V25.5ZM60.4354 25.5H60.415V27H60.4354V25.5ZM60.4557 25.5H60.4354V27H60.4557V25.5ZM60.476 25.5H60.4557V27H60.476V25.5ZM60.4963 25.5H60.476V27H60.4963V25.5ZM60.5166 25.5H60.4963V27H60.5166V25.5ZM60.5368 25.5H60.5166V27H60.5368V25.5ZM60.5569 25.5H60.5368V27H60.5569V25.5ZM60.5771 25.5H60.5569V27H60.5771V25.5ZM60.5972 25.5H60.5771V27H60.5972V25.5ZM60.6173 25.5H60.5972V27H60.6173V25.5ZM60.6373 25.5H60.6173V27H60.6373V25.5ZM60.6573 25.5H60.6373V27H60.6573V25.5ZM60.6773 25.5H60.6573V27H60.6773V25.5ZM60.6973 25.5H60.6773V27H60.6973V25.5ZM60.7172 25.5H60.6973V27H60.7172V25.5ZM60.737 25.5H60.7172V27H60.737V25.5ZM60.7569 25.5H60.737V27H60.7569V25.5ZM60.7767 25.5H60.7569V27H60.7767V25.5ZM60.7965 25.5H60.7767V27H60.7965V25.5ZM60.8162 25.5H60.7965V27H60.8162V25.5ZM60.8359 25.5H60.8162V27H60.8359V25.5ZM60.8556 25.5H60.8359V27H60.8556V25.5ZM60.8753 25.5H60.8556V27H60.8753V25.5ZM60.8949 25.5H60.8753V27H60.8949V25.5ZM60.9145 25.5H60.8949V27H60.9145V25.5ZM60.934 25.5H60.9145V27H60.934V25.5ZM60.9535 25.5H60.934V27H60.9535V25.5ZM60.973 25.5H60.9535V27H60.973V25.5ZM60.9925 25.5H60.973V27H60.9925V25.5ZM61.0119 25.5H60.9925V27H61.0119V25.5ZM61.0313 25.5H61.0119V27H61.0313V25.5ZM61.0506 25.5H61.0313V27H61.0506V25.5ZM61.0699 25.5H61.0506V27H61.0699V25.5ZM61.0892 25.5H61.0699V27H61.0892V25.5ZM61.1085 25.5H61.0892V27H61.1085V25.5ZM61.1277 25.5H61.1085V27H61.1277V25.5ZM61.1469 25.5H61.1277V27H61.1469V25.5ZM61.166 25.5H61.1469V27H61.166V25.5ZM61.1851 25.5H61.166V27H61.1851V25.5ZM61.2042 25.5H61.1851V27H61.2042V25.5ZM61.2232 25.5H61.2042V27H61.2232V25.5ZM61.2423 25.5H61.2232V27H61.2423V25.5ZM61.2612 25.5H61.2423V27H61.2612V25.5ZM61.2802 25.5H61.2612V27H61.2802V25.5ZM61.2991 25.5H61.2802V27H61.2991V25.5ZM61.318 25.5H61.2991V27H61.318V25.5ZM61.3369 25.5H61.318V27H61.3369V25.5ZM61.3557 25.5H61.3369V27H61.3557V25.5ZM61.3745 25.5H61.3557V27H61.3745V25.5ZM61.3932 25.5H61.3745V27H61.3932V25.5ZM61.4119 25.5H61.3932V27H61.4119V25.5ZM61.4306 25.5H61.4119V27H61.4306V25.5ZM61.4493 25.5H61.4306V27H61.4493V25.5ZM61.4679 25.5H61.4493V27H61.4679V25.5ZM61.4865 25.5H61.4679V27H61.4865V25.5ZM61.505 25.5H61.4865V27H61.505V25.5ZM61.5235 25.5H61.505V27H61.5235V25.5ZM61.542 25.5H61.5235V27H61.542V25.5ZM61.5605 25.5H61.542V27H61.5605V25.5ZM61.5789 25.5H61.5605V27H61.5789V25.5ZM61.5973 25.5H61.5789V27H61.5973V25.5ZM61.6156 25.5H61.5973V27H61.6156V25.5ZM61.634 25.5H61.6156V27H61.634V25.5ZM61.6522 25.5H61.634V27H61.6522V25.5ZM61.6705 25.5H61.6522V27H61.6705V25.5ZM61.6887 25.5H61.6705V27H61.6887V25.5ZM61.7069 25.5H61.6887V27H61.7069V25.5ZM61.7251 25.5H61.7069V27H61.7251V25.5ZM61.7432 25.5H61.7251V27H61.7432V25.5ZM61.7613 25.5H61.7432V27H61.7613V25.5ZM61.7793 25.5H61.7613V27H61.7793V25.5ZM61.7974 25.5H61.7793V27H61.7974V25.5ZM61.8153 25.5H61.7974V27H61.8153V25.5ZM61.8333 25.5H61.8153V27H61.8333V25.5ZM61.8512 25.5H61.8333V27H61.8512V25.5ZM61.8691 25.5H61.8512V27H61.8691V25.5ZM61.887 25.5H61.8691V27H61.887V25.5ZM61.9048 25.5H61.887V27H61.9048V25.5ZM61.9226 25.5H61.9048V27H61.9226V25.5ZM61.9403 25.5H61.9226V27H61.9403V25.5ZM61.9581 25.5H61.9403V27H61.9581V25.5ZM61.9758 25.5H61.9581V27H61.9758V25.5ZM61.9934 25.5H61.9758V27H61.9934V25.5ZM62.011 25.5H61.9934V27H62.011V25.5ZM62.0286 25.5H62.011V27H62.0286V25.5ZM62.0462 25.5H62.0286V27H62.0462V25.5ZM62.0637 25.5H62.0462V27H62.0637V25.5ZM62.0812 25.5H62.0637V27H62.0812V25.5ZM62.0987 25.5H62.0812V27H62.0987V25.5ZM62.1161 25.5H62.0987V27H62.1161V25.5ZM62.1335 25.5H62.1161V27H62.1335V25.5ZM62.1508 25.5H62.1335V27H62.1508V25.5ZM62.1682 25.5H62.1508V27H62.1682V25.5ZM62.1855 25.5H62.1682V27H62.1855V25.5ZM62.2027 25.5H62.1855V27H62.2027V25.5ZM62.2199 25.5H62.2027V27H62.2199V25.5ZM62.2371 25.5H62.2199V27H62.2371V25.5ZM62.2543 25.5H62.2371V27H62.2543V25.5ZM62.2714 25.5H62.2543V27H62.2714V25.5ZM62.2885 25.5H62.2714V27H62.2885V25.5ZM62.3056 25.5H62.2885V27H62.3056V25.5ZM62.3226 25.5H62.3056V27H62.3226V25.5ZM62.3396 25.5H62.3226V27H62.3396V25.5ZM63.0896 27.75V26.25H61.5896V27.75H63.0896ZM62.3226 28.5H62.3396V27H62.3226V28.5ZM62.3056 28.5H62.3226V27H62.3056V28.5ZM62.2885 28.5H62.3056V27H62.2885V28.5ZM62.2714 28.5H62.2885V27H62.2714V28.5ZM62.2543 28.5H62.2714V27H62.2543V28.5ZM62.2371 28.5H62.2543V27H62.2371V28.5ZM62.2199 28.5H62.2371V27H62.2199V28.5ZM62.2027 28.5H62.2199V27H62.2027V28.5ZM62.1855 28.5H62.2027V27H62.1855V28.5ZM62.1682 28.5H62.1855V27H62.1682V28.5ZM62.1508 28.5H62.1682V27H62.1508V28.5ZM62.1335 28.5H62.1508V27H62.1335V28.5ZM62.1161 28.5H62.1335V27H62.1161V28.5ZM62.0987 28.5H62.1161V27H62.0987V28.5ZM62.0812 28.5H62.0987V27H62.0812V28.5ZM62.0637 28.5H62.0812V27H62.0637V28.5ZM62.0462 28.5H62.0637V27H62.0462V28.5ZM62.0286 28.5H62.0462V27H62.0286V28.5ZM62.011 28.5H62.0286V27H62.011V28.5ZM61.9934 28.5H62.011V27H61.9934V28.5ZM61.9758 28.5H61.9934V27H61.9758V28.5ZM61.9581 28.5H61.9758V27H61.9581V28.5ZM61.9403 28.5H61.9581V27H61.9403V28.5ZM61.9226 28.5H61.9403V27H61.9226V28.5ZM61.9048 28.5H61.9226V27H61.9048V28.5ZM61.887 28.5H61.9048V27H61.887V28.5ZM61.8691 28.5H61.887V27H61.8691V28.5ZM61.8512 28.5H61.8691V27H61.8512V28.5ZM61.8333 28.5H61.8512V27H61.8333V28.5ZM61.8153 28.5H61.8333V27H61.8153V28.5ZM61.7974 28.5H61.8153V27H61.7974V28.5ZM61.7793 28.5H61.7974V27H61.7793V28.5ZM61.7613 28.5H61.7793V27H61.7613V28.5ZM61.7432 28.5H61.7613V27H61.7432V28.5ZM61.7251 28.5H61.7432V27H61.7251V28.5ZM61.7069 28.5H61.7251V27H61.7069V28.5ZM61.6887 28.5H61.7069V27H61.6887V28.5ZM61.6705 28.5H61.6887V27H61.6705V28.5ZM61.6522 28.5H61.6705V27H61.6522V28.5ZM61.634 28.5H61.6522V27H61.634V28.5ZM61.6156 28.5H61.634V27H61.6156V28.5ZM61.5973 28.5H61.6156V27H61.5973V28.5ZM61.5789 28.5H61.5973V27H61.5789V28.5ZM61.5605 28.5H61.5789V27H61.5605V28.5ZM61.542 28.5H61.5605V27H61.542V28.5ZM61.5235 28.5H61.542V27H61.5235V28.5ZM61.505 28.5H61.5235V27H61.505V28.5ZM61.4865 28.5H61.505V27H61.4865V28.5ZM61.4679 28.5H61.4865V27H61.4679V28.5ZM61.4493 28.5H61.4679V27H61.4493V28.5ZM61.4306 28.5H61.4493V27H61.4306V28.5ZM61.4119 28.5H61.4306V27H61.4119V28.5ZM61.3932 28.5H61.4119V27H61.3932V28.5ZM61.3745 28.5H61.3932V27H61.3745V28.5ZM61.3557 28.5H61.3745V27H61.3557V28.5ZM61.3369 28.5H61.3557V27H61.3369V28.5ZM61.318 28.5H61.3369V27H61.318V28.5ZM61.2991 28.5H61.318V27H61.2991V28.5ZM61.2802 28.5H61.2991V27H61.2802V28.5ZM61.2612 28.5H61.2802V27H61.2612V28.5ZM61.2423 28.5H61.2612V27H61.2423V28.5ZM61.2232 28.5H61.2423V27H61.2232V28.5ZM61.2042 28.5H61.2232V27H61.2042V28.5ZM61.1851 28.5H61.2042V27H61.1851V28.5ZM61.166 28.5H61.1851V27H61.166V28.5ZM61.1469 28.5H61.166V27H61.1469V28.5ZM61.1277 28.5H61.1469V27H61.1277V28.5ZM61.1085 28.5H61.1277V27H61.1085V28.5ZM61.0892 28.5H61.1085V27H61.0892V28.5ZM61.0699 28.5H61.0892V27H61.0699V28.5ZM61.0506 28.5H61.0699V27H61.0506V28.5ZM61.0313 28.5H61.0506V27H61.0313V28.5ZM61.0119 28.5H61.0313V27H61.0119V28.5ZM60.9925 28.5H61.0119V27H60.9925V28.5ZM60.973 28.5H60.9925V27H60.973V28.5ZM60.9535 28.5H60.973V27H60.9535V28.5ZM60.934 28.5H60.9535V27H60.934V28.5ZM60.9145 28.5H60.934V27H60.9145V28.5ZM60.8949 28.5H60.9145V27H60.8949V28.5ZM60.8753 28.5H60.8949V27H60.8753V28.5ZM60.8556 28.5H60.8753V27H60.8556V28.5ZM60.8359 28.5H60.8556V27H60.8359V28.5ZM60.8162 28.5H60.8359V27H60.8162V28.5ZM60.7965 28.5H60.8162V27H60.7965V28.5ZM60.7767 28.5H60.7965V27H60.7767V28.5ZM60.7569 28.5H60.7767V27H60.7569V28.5ZM60.737 28.5H60.7569V27H60.737V28.5ZM60.7172 28.5H60.737V27H60.7172V28.5ZM60.6973 28.5H60.7172V27H60.6973V28.5ZM60.6773 28.5H60.6973V27H60.6773V28.5ZM60.6573 28.5H60.6773V27H60.6573V28.5ZM60.6373 28.5H60.6573V27H60.6373V28.5ZM60.6173 28.5H60.6373V27H60.6173V28.5ZM60.5972 28.5H60.6173V27H60.5972V28.5ZM60.5771 28.5H60.5972V27H60.5771V28.5ZM60.5569 28.5H60.5771V27H60.5569V28.5ZM60.5368 28.5H60.5569V27H60.5368V28.5ZM60.5166 28.5H60.5368V27H60.5166V28.5ZM60.4963 28.5H60.5166V27H60.4963V28.5ZM60.476 28.5H60.4963V27H60.476V28.5ZM60.4557 28.5H60.476V27H60.4557V28.5ZM60.4354 28.5H60.4557V27H60.4354V28.5ZM60.415 28.5H60.4354V27H60.415V28.5ZM60.3946 28.5H60.415V27H60.3946V28.5ZM60.3742 28.5H60.3946V27H60.3742V28.5ZM60.3537 28.5H60.3742V27H60.3537V28.5ZM60.3332 28.5H60.3537V27H60.3332V28.5ZM60.3126 28.5H60.3332V27H60.3126V28.5ZM60.292 28.5H60.3126V27H60.292V28.5ZM60.2714 28.5H60.292V27H60.2714V28.5ZM60.2508 28.5H60.2714V27H60.2508V28.5ZM60.2301 28.5H60.2508V27H60.2301V28.5ZM60.2094 28.5H60.2301V27H60.2094V28.5ZM60.1887 28.5H60.2094V27H60.1887V28.5ZM60.1679 28.5H60.1887V27H60.1679V28.5ZM60.1471 28.5H60.1679V27H60.1471V28.5ZM60.1263 28.5H60.1471V27H60.1263V28.5ZM60.1054 28.5H60.1263V27H60.1054V28.5ZM60.0845 28.5H60.1054V27H60.0845V28.5ZM60.0635 28.5H60.0845V27H60.0635V28.5ZM60.0426 28.5H60.0635V27H60.0426V28.5ZM60.0216 28.5H60.0426V27H60.0216V28.5ZM60.0005 28.5H60.0216V27H60.0005V28.5ZM59.9794 28.5H60.0005V27H59.9794V28.5ZM59.9583 28.5H59.9794V27H59.9583V28.5ZM59.9372 28.5H59.9583V27H59.9372V28.5ZM59.916 28.5H59.9372V27H59.916V28.5ZM59.8948 28.5H59.916V27H59.8948V28.5ZM59.8736 28.5H59.8948V27H59.8736V28.5ZM59.8523 28.5H59.8736V27H59.8523V28.5ZM59.831 28.5H59.8523V27H59.831V28.5ZM59.8097 28.5H59.831V27H59.8097V28.5ZM59.7883 28.5H59.8097V27H59.7883V28.5ZM59.7669 28.5H59.7883V27H59.7669V28.5ZM59.7454 28.5H59.7669V27H59.7454V28.5ZM59.724 28.5H59.7454V27H59.724V28.5ZM59.7025 28.5H59.724V27H59.7025V28.5ZM59.6809 28.5H59.7025V27H59.6809V28.5ZM59.6594 28.5H59.6809V27H59.6594V28.5ZM59.6378 28.5H59.6594V27H59.6378V28.5ZM59.6161 28.5H59.6378V27H59.6161V28.5ZM59.5945 28.5H59.6161V27H59.5945V28.5ZM59.5728 28.5H59.5945V27H59.5728V28.5ZM59.551 28.5H59.5728V27H59.551V28.5ZM59.5293 28.5H59.551V27H59.5293V28.5ZM59.5074 28.5H59.5293V27H59.5074V28.5ZM59.4856 28.5H59.5074V27H59.4856V28.5ZM59.4637 28.5H59.4856V27H59.4637V28.5ZM59.4418 28.5H59.4637V27H59.4418V28.5ZM59.4199 28.5H59.4418V27H59.4199V28.5ZM59.3979 28.5H59.4199V27H59.3979V28.5ZM59.3759 28.5H59.3979V27H59.3759V28.5ZM59.3539 28.5H59.3759V27H59.3539V28.5ZM59.3318 28.5H59.3539V27H59.3318V28.5ZM59.3097 28.5H59.3318V27H59.3097V28.5ZM59.2876 28.5H59.3097V27H59.2876V28.5ZM59.2654 28.5H59.2876V27H59.2654V28.5ZM59.2432 28.5H59.2654V27H59.2432V28.5ZM59.221 28.5H59.2432V27H59.221V28.5ZM59.1987 28.5H59.221V27H59.1987V28.5ZM59.1764 28.5H59.1987V27H59.1764V28.5ZM59.1541 28.5H59.1764V27H59.1541V28.5ZM59.1317 28.5H59.1541V27H59.1317V28.5ZM59.1093 28.5H59.1317V27H59.1093V28.5ZM59.0869 28.5H59.1093V27H59.0869V28.5ZM59.0644 28.5H59.0869V27H59.0644V28.5ZM59.0419 28.5H59.0644V27H59.0419V28.5ZM59.0194 28.5H59.0419V27H59.0194V28.5ZM58.9968 28.5H59.0194V27H58.9968V28.5ZM58.9742 28.5H58.9968V27H58.9742V28.5ZM58.9516 28.5H58.9742V27H58.9516V28.5ZM58.9289 28.5H58.9516V27H58.9289V28.5ZM58.9063 28.5H58.9289V27H58.9063V28.5ZM58.8835 28.5H58.9063V27H58.8835V28.5ZM58.8608 28.5H58.8835V27H58.8608V28.5ZM58.838 28.5H58.8608V27H58.838V28.5ZM58.8151 28.5H58.838V27H58.8151V28.5ZM58.7923 28.5H58.8151V27H58.7923V28.5ZM58.7694 28.5H58.7923V27H58.7694V28.5ZM58.7464 28.5H58.7694V27H58.7464V28.5ZM58.7235 28.5H58.7464V27H58.7235V28.5ZM58.7005 28.5H58.7235V27H58.7005V28.5ZM58.6775 28.5H58.7005V27H58.6775V28.5ZM58.6544 28.5H58.6775V27H58.6544V28.5ZM58.6313 28.5H58.6544V27H58.6313V28.5ZM58.6082 28.5H58.6313V27H58.6082V28.5ZM58.585 28.5H58.6082V27H58.585V28.5ZM58.5618 28.5H58.585V27H58.5618V28.5ZM58.5386 28.5H58.5618V27H58.5386V28.5ZM58.5153 28.5H58.5386V27H58.5153V28.5ZM58.492 28.5H58.5153V27H58.492V28.5ZM58.4687 28.5H58.492V27H58.4687V28.5ZM58.4453 28.5H58.4687V27H58.4453V28.5ZM58.4219 28.5H58.4453V27H58.4219V28.5ZM58.3985 28.5H58.4219V27H58.3985V28.5ZM58.3751 28.5H58.3985V27H58.3751V28.5ZM58.3516 28.5H58.3751V27H58.3516V28.5ZM58.328 28.5H58.3516V27H58.328V28.5ZM58.3045 28.5H58.328V27H58.3045V28.5ZM58.2809 28.5H58.3045V27H58.2809V28.5ZM58.2573 28.5H58.2809V27H58.2573V28.5ZM58.2336 28.5H58.2573V27H58.2336V28.5ZM58.2099 28.5H58.2336V27H58.2099V28.5ZM58.1862 28.5H58.2099V27H58.1862V28.5ZM58.1624 28.5H58.1862V27H58.1624V28.5ZM58.1386 28.5H58.1624V27H58.1386V28.5ZM58.1148 28.5H58.1386V27H58.1148V28.5ZM58.0909 28.5H58.1148V27H58.0909V28.5ZM58.0671 28.5H58.0909V27H58.0671V28.5ZM58.0431 28.5H58.0671V27H58.0431V28.5ZM58.0192 28.5H58.0431V27H58.0192V28.5ZM57.9952 28.5H58.0192V27H57.9952V28.5ZM57.9712 28.5H57.9952V27H57.9712V28.5ZM57.9471 28.5H57.9712V27H57.9471V28.5ZM57.923 28.5H57.9471V27H57.923V28.5ZM57.8989 28.5H57.923V27H57.8989V28.5ZM57.8747 28.5H57.8989V27H57.8747V28.5ZM57.8505 28.5H57.8747V27H57.8505V28.5ZM57.8263 28.5H57.8505V27H57.8263V28.5ZM57.8021 28.5H57.8263V27H57.8021V28.5ZM57.7778 28.5H57.8021V27H57.7778V28.5ZM57.7534 28.5H57.7778V27H57.7534V28.5ZM57.7291 28.5H57.7534V27H57.7291V28.5ZM57.7047 28.5H57.7291V27H57.7047V28.5ZM57.6803 28.5H57.7047V27H57.6803V28.5ZM57.6558 28.5H57.6803V27H57.6558V28.5ZM57.6313 28.5H57.6558V27H57.6313V28.5ZM57.6068 28.5H57.6313V27H57.6068V28.5ZM57.5823 28.5H57.6068V27H57.5823V28.5ZM57.5577 28.5H57.5823V27H57.5577V28.5ZM57.5331 28.5H57.5577V27H57.5331V28.5ZM57.5084 28.5H57.5331V27H57.5084V28.5ZM57.4837 28.5H57.5084V27H57.4837V28.5ZM57.459 28.5H57.4837V27H57.459V28.5ZM57.4342 28.5H57.459V27H57.4342V28.5ZM57.4095 28.5H57.4342V27H57.4095V28.5ZM57.3846 28.5H57.4095V27H57.3846V28.5ZM57.3598 28.5H57.3846V27H57.3598V28.5ZM57.3349 28.5H57.3598V27H57.3349V28.5ZM57.31 28.5H57.3349V27H57.31V28.5ZM57.285 28.5H57.31V27H57.285V28.5ZM57.26 28.5H57.285V27H57.26V28.5ZM57.235 28.5H57.26V27H57.235V28.5ZM57.21 28.5H57.235V27H57.21V28.5ZM57.1849 28.5H57.21V27H57.1849V28.5ZM57.1598 28.5H57.1849V27H57.1598V28.5ZM57.1346 28.5H57.1598V27H57.1346V28.5ZM57.1094 28.5H57.1346V27H57.1094V28.5ZM57.0842 28.5H57.1094V27H57.0842V28.5ZM57.059 28.5H57.0842V27H57.059V28.5ZM57.0337 28.5H57.059V27H57.0337V28.5ZM57.0084 28.5H57.0337V27H57.0084V28.5ZM56.983 28.5H57.0084V27H56.983V28.5ZM56.9576 28.5H56.983V27H56.9576V28.5ZM56.9322 28.5H56.9576V27H56.9322V28.5ZM56.9068 28.5H56.9322V27H56.9068V28.5ZM56.8813 28.5H56.9068V27H56.8813V28.5ZM56.8558 28.5H56.8813V27H56.8558V28.5ZM56.8302 28.5H56.8558V27H56.8302V28.5ZM56.8046 28.5H56.8302V27H56.8046V28.5ZM56.779 28.5H56.8046V27H56.779V28.5ZM56.7534 28.5H56.779V27H56.7534V28.5ZM56.7277 28.5H56.7534V27H56.7277V28.5ZM56.702 28.5H56.7277V27H56.702V28.5ZM56.6762 28.5H56.702V27H56.6762V28.5ZM56.6504 28.5H56.6762V27H56.6504V28.5ZM56.6246 28.5H56.6504V27H56.6246V28.5ZM56.5988 28.5H56.6246V27H56.5988V28.5ZM56.5729 28.5H56.5988V27H56.5729V28.5ZM56.547 28.5H56.5729V27H56.547V28.5ZM56.521 28.5H56.547V27H56.521V28.5ZM56.495 28.5H56.521V27H56.495V28.5ZM56.469 28.5H56.495V27H56.469V28.5ZM56.443 28.5H56.469V27H56.443V28.5ZM56.4169 28.5H56.443V27H56.4169V28.5ZM56.3908 28.5H56.4169V27H56.3908V28.5ZM56.3646 28.5H56.3908V27H56.3646V28.5ZM56.3385 28.5H56.3646V27H56.3385V28.5ZM56.3123 28.5H56.3385V27H56.3123V28.5ZM56.286 28.5H56.3123V27H56.286V28.5ZM56.2597 28.5H56.286V27H56.2597V28.5ZM56.2334 28.5H56.2597V27H56.2334V28.5ZM56.2071 28.5H56.2334V27H56.2071V28.5ZM56.1807 28.5H56.2071V27H56.1807V28.5ZM56.1543 28.5H56.1807V27H56.1543V28.5ZM56.1278 28.5H56.1543V27H56.1278V28.5ZM56.1014 28.5H56.1278V27H56.1014V28.5ZM56.0749 28.5H56.1014V27H56.0749V28.5ZM56.0483 28.5H56.0749V27H56.0483V28.5ZM56.0217 28.5H56.0483V27H56.0217V28.5ZM55.9951 28.5H56.0217V27H55.9951V28.5ZM55.9685 28.5H55.9951V27H55.9685V28.5ZM55.9418 28.5H55.9685V27H55.9418V28.5ZM55.9151 28.5H55.9418V27H55.9151V28.5ZM55.8883 28.5H55.9151V27H55.8883V28.5ZM55.8616 28.5H55.8883V27H55.8616V28.5ZM55.8348 28.5H55.8616V27H55.8348V28.5ZM55.8079 28.5H55.8348V27H55.8079V28.5ZM55.781 28.5H55.8079V27H55.781V28.5ZM55.7541 28.5H55.781V27H55.7541V28.5ZM55.7272 28.5H55.7541V27H55.7272V28.5ZM55.7002 28.5H55.7272V27H55.7002V28.5ZM55.6732 28.5H55.7002V27H55.6732V28.5ZM55.6462 28.5H55.6732V27H55.6462V28.5ZM55.6191 28.5H55.6462V27H55.6191V28.5ZM55.592 28.5H55.6191V27H55.592V28.5ZM55.5648 28.5H55.592V27H55.5648V28.5ZM55.5377 28.5H55.5648V27H55.5377V28.5ZM55.5105 28.5H55.5377V27H55.5105V28.5ZM55.4832 28.5H55.5105V27H55.4832V28.5ZM55.4559 28.5H55.4832V27H55.4559V28.5ZM55.4286 28.5H55.4559V27H55.4286V28.5ZM55.4013 28.5H55.4286V27H55.4013V28.5ZM55.3739 28.5H55.4013V27H55.3739V28.5ZM55.3465 28.5H55.3739V27H55.3465V28.5ZM55.3191 28.5H55.3465V27H55.3191V28.5ZM55.2916 28.5H55.3191V27H55.2916V28.5ZM55.2641 28.5H55.2916V27H55.2641V28.5ZM55.2366 28.5H55.2641V27H55.2366V28.5ZM55.209 28.5H55.2366V27H55.209V28.5ZM55.1814 28.5H55.209V27H55.1814V28.5ZM55.1537 28.5H55.1814V27H55.1537V28.5ZM55.1261 28.5H55.1537V27H55.1261V28.5ZM55.0984 28.5H55.1261V27H55.0984V28.5ZM55.0706 28.5H55.0984V27H55.0706V28.5ZM55.0429 28.5H55.0706V27H55.0429V28.5ZM55.0151 28.5H55.0429V27H55.0151V28.5ZM54.9872 28.5H55.0151V27H54.9872V28.5ZM54.9594 28.5H54.9872V27H54.9594V28.5ZM54.9314 28.5H54.9594V27H54.9314V28.5ZM54.9035 28.5H54.9314V27H54.9035V28.5ZM54.8755 28.5H54.9035V27H54.8755V28.5ZM54.8475 28.5H54.8755V27H54.8475V28.5ZM54.8195 28.5H54.8475V27H54.8195V28.5ZM54.7914 28.5H54.8195V27H54.7914V28.5ZM54.7633 28.5H54.7914V27H54.7633V28.5ZM54.7352 28.5H54.7633V27H54.7352V28.5ZM54.707 28.5H54.7352V27H54.707V28.5ZM54.6788 28.5H54.707V27H54.6788V28.5ZM54.6506 28.5H54.6788V27H54.6506V28.5ZM54.6223 28.5H54.6506V27H54.6223V28.5ZM54.594 28.5H54.6223V27H54.594V28.5ZM54.5657 28.5H54.594V27H54.5657V28.5ZM54.5373 28.5H54.5657V27H54.5373V28.5ZM54.5089 28.5H54.5373V27H54.5089V28.5ZM54.4805 28.5H54.5089V27H54.4805V28.5ZM54.452 28.5H54.4805V27H54.452V28.5ZM54.4235 28.5H54.452V27H54.4235V28.5ZM54.395 28.5H54.4235V27H54.395V28.5ZM54.3664 28.5H54.395V27H54.3664V28.5ZM54.3378 28.5H54.3664V27H54.3378V28.5ZM54.3092 28.5H54.3378V27H54.3092V28.5ZM54.2805 28.5H54.3092V27H54.2805V28.5ZM54.2518 28.5H54.2805V27H54.2518V28.5ZM54.2231 28.5H54.2518V27H54.2231V28.5ZM54.1943 28.5H54.2231V27H54.1943V28.5ZM54.1655 28.5H54.1943V27H54.1655V28.5ZM54.1367 28.5H54.1655V27H54.1367V28.5ZM54.1078 28.5H54.1367V27H54.1078V28.5ZM54.0789 28.5H54.1078V27H54.0789V28.5ZM54.05 28.5H54.0789V27H54.05V28.5ZM54.021 28.5H54.05V27H54.021V28.5ZM53.992 28.5H54.021V27H53.992V28.5ZM53.963 28.5H53.992V27H53.963V28.5ZM53.9339 28.5H53.963V27H53.9339V28.5ZM53.9048 28.5H53.9339V27H53.9048V28.5ZM53.8757 28.5H53.9048V27H53.8757V28.5ZM53.8465 28.5H53.8757V27H53.8465V28.5ZM53.8173 28.5H53.8465V27H53.8173V28.5ZM53.7881 28.5H53.8173V27H53.7881V28.5ZM53.7588 28.5H53.7881V27H53.7588V28.5ZM53.7296 28.5H53.7588V27H53.7296V28.5ZM53.7002 28.5H53.7296V27H53.7002V28.5ZM53.6709 28.5H53.7002V27H53.6709V28.5ZM53.6415 28.5H53.6709V27H53.6415V28.5ZM53.612 28.5H53.6415V27H53.612V28.5ZM53.5826 28.5H53.612V27H53.5826V28.5ZM53.5531 28.5H53.5826V27H53.5531V28.5ZM53.5236 28.5H53.5531V27H53.5236V28.5ZM53.494 28.5H53.5236V27H53.494V28.5ZM53.4644 28.5H53.494V27H53.4644V28.5ZM53.4348 28.5H53.4644V27H53.4348V28.5ZM53.4051 28.5H53.4348V27H53.4051V28.5ZM53.3754 28.5H53.4051V27H53.3754V28.5ZM53.3457 28.5H53.3754V27H53.3457V28.5ZM53.3159 28.5H53.3457V27H53.3159V28.5ZM53.2861 28.5H53.3159V27H53.2861V28.5ZM53.2563 28.5H53.2861V27H53.2563V28.5ZM53.2264 28.5H53.2563V27H53.2264V28.5ZM53.1965 28.5H53.2264V27H53.1965V28.5ZM53.1666 28.5H53.1965V27H53.1666V28.5ZM53.1367 28.5H53.1666V27H53.1367V28.5ZM53.1067 28.5H53.1367V27H53.1067V28.5ZM53.0766 28.5H53.1067V27H53.0766V28.5ZM53.0466 28.5H53.0766V27H53.0466V28.5ZM53.0165 28.5H53.0466V27H53.0165V28.5ZM52.9864 28.5H53.0165V27H52.9864V28.5ZM52.9562 28.5H52.9864V27H52.9562V28.5ZM52.926 28.5H52.9562V27H52.926V28.5ZM52.8958 28.5H52.926V27H52.8958V28.5ZM52.8655 28.5H52.8958V27H52.8655V28.5ZM52.8352 28.5H52.8655V27H52.8352V28.5ZM52.8049 28.5H52.8352V27H52.8049V28.5ZM52.7746 28.5H52.8049V27H52.7746V28.5ZM52.7442 28.5H52.7746V27H52.7442V28.5ZM52.7137 28.5H52.7442V27H52.7137V28.5ZM52.6833 28.5H52.7137V27H52.6833V28.5ZM52.6528 28.5H52.6833V27H52.6528V28.5ZM52.6223 28.5H52.6528V27H52.6223V28.5ZM52.5917 28.5H52.6223V27H52.5917V28.5ZM52.5611 28.5H52.5917V27H52.5611V28.5ZM52.5305 28.5H52.5611V27H52.5305V28.5ZM52.4999 28.5H52.5305V27H52.4999V28.5ZM52.4692 28.5H52.4999V27H52.4692V28.5ZM52.4384 28.5H52.4692V27H52.4384V28.5ZM52.4077 28.5H52.4384V27H52.4077V28.5ZM52.3769 28.5H52.4077V27H52.3769V28.5ZM52.3461 28.5H52.3769V27H52.3461V28.5ZM52.3152 28.5H52.3461V27H52.3152V28.5ZM52.2843 28.5H52.3152V27H52.2843V28.5ZM52.2534 28.5H52.2843V27H52.2534V28.5ZM52.2225 28.5H52.2534V27H52.2225V28.5ZM52.1915 28.5H52.2225V27H52.1915V28.5ZM52.1604 28.5H52.1915V27H52.1604V28.5ZM52.1294 28.5H52.1604V27H52.1294V28.5ZM52.0983 28.5H52.1294V27H52.0983V28.5ZM52.0672 28.5H52.0983V27H52.0672V28.5ZM52.036 28.5H52.0672V27H52.036V28.5ZM52.0048 28.5H52.036V27H52.0048V28.5ZM51.9736 28.5H52.0048V27H51.9736V28.5ZM51.9424 28.5H51.9736V27H51.9424V28.5ZM51.9111 28.5H51.9424V27H51.9111V28.5ZM51.8798 28.5H51.9111V27H51.8798V28.5ZM51.8484 28.5H51.8798V27H51.8484V28.5ZM51.817 28.5H51.8484V27H51.817V28.5ZM51.7856 28.5H51.817V27H51.7856V28.5ZM51.7542 28.5H51.7856V27H51.7542V28.5ZM51.7227 28.5H51.7542V27H51.7227V28.5ZM51.6912 28.5H51.7227V27H51.6912V28.5ZM51.6596 28.5H51.6912V27H51.6596V28.5ZM51.628 28.5H51.6596V27H51.628V28.5ZM51.5964 28.5H51.628V27H51.5964V28.5ZM51.5648 28.5H51.5964V27H51.5648V28.5ZM51.5331 28.5H51.5648V27H51.5331V28.5ZM51.5014 28.5H51.5331V27H51.5014V28.5ZM51.4696 28.5H51.5014V27H51.4696V28.5ZM51.4378 28.5H51.4696V27H51.4378V28.5ZM51.406 28.5H51.4378V27H51.406V28.5ZM51.3742 28.5H51.406V27H51.3742V28.5ZM51.3423 28.5H51.3742V27H51.3423V28.5ZM51.3104 28.5H51.3423V27H51.3104V28.5ZM51.2784 28.5H51.3104V27H51.2784V28.5ZM51.2464 28.5H51.2784V27H51.2464V28.5ZM51.2144 28.5H51.2464V27H51.2144V28.5ZM51.1824 28.5H51.2144V27H51.1824V28.5ZM51.1503 28.5H51.1824V27H51.1503V28.5ZM51.1182 28.5H51.1503V27H51.1182V28.5ZM51.086 28.5H51.1182V27H51.086V28.5ZM51.0538 28.5H51.086V27H51.0538V28.5ZM51.0216 28.5H51.0538V27H51.0216V28.5ZM50.9894 28.5H51.0216V27H50.9894V28.5ZM50.9571 28.5H50.9894V27H50.9571V28.5ZM50.9248 28.5H50.9571V27H50.9248V28.5ZM50.8924 28.5H50.9248V27H50.8924V28.5ZM50.8601 28.5H50.8924V27H50.8601V28.5ZM50.8276 28.5H50.8601V27H50.8276V28.5ZM50.7952 28.5H50.8276V27H50.7952V28.5ZM50.7627 28.5H50.7952V27H50.7627V28.5ZM50.7302 28.5H50.7627V27H50.7302V28.5ZM50.6977 28.5H50.7302V27H50.6977V28.5ZM50.6651 28.5H50.6977V27H50.6651V28.5ZM50.6325 28.5H50.6651V27H50.6325V28.5ZM50.5998 28.5H50.6325V27H50.5998V28.5ZM50.5671 28.5H50.5998V27H50.5671V28.5ZM50.5344 28.5H50.5671V27H50.5344V28.5ZM50.5017 28.5H50.5344V27H50.5017V28.5ZM50.4689 28.5H50.5017V27H50.4689V28.5ZM50.4361 28.5H50.4689V27H50.4361V28.5ZM50.4032 28.5H50.4361V27H50.4032V28.5ZM50.3704 28.5H50.4032V27H50.3704V28.5ZM50.3375 28.5H50.3704V27H50.3375V28.5ZM50.3045 28.5H50.3375V27H50.3045V28.5ZM50.2715 28.5H50.3045V27H50.2715V28.5ZM50.2385 28.5H50.2715V27H50.2385V28.5ZM50.2055 28.5H50.2385V27H50.2055V28.5ZM50.1724 28.5H50.2055V27H50.1724V28.5ZM50.1393 28.5H50.1724V27H50.1393V28.5ZM50.1062 28.5H50.1393V27H50.1062V28.5ZM50.073 28.5H50.1062V27H50.073V28.5ZM50.0398 28.5H50.073V27H50.0398V28.5ZM50.0065 28.5H50.0398V27H50.0065V28.5ZM49.9733 28.5H50.0065V27H49.9733V28.5ZM49.9399 28.5H49.9733V27H49.9399V28.5ZM49.9066 28.5H49.9399V27H49.9066V28.5ZM49.8732 28.5H49.9066V27H49.8732V28.5ZM49.8398 28.5H49.8732V27H49.8398V28.5ZM49.8064 28.5H49.8398V27H49.8064V28.5ZM49.7729 28.5H49.8064V27H49.7729V28.5ZM49.7394 28.5H49.7729V27H49.7394V28.5ZM49.7059 28.5H49.7394V27H49.7059V28.5ZM49.6723 28.5H49.7059V27H49.6723V28.5ZM49.6387 28.5H49.6723V27H49.6387V28.5ZM49.605 28.5H49.6387V27H49.605V28.5ZM49.5714 28.5H49.605V27H49.5714V28.5ZM49.5377 28.5H49.5714V27H49.5377V28.5ZM49.5039 28.5H49.5377V27H49.5039V28.5ZM49.4701 28.5H49.5039V27H49.4701V28.5ZM49.4363 28.5H49.4701V27H49.4363V28.5ZM49.4025 28.5H49.4363V27H49.4025V28.5ZM49.3686 28.5H49.4025V27H49.3686V28.5ZM49.3347 28.5H49.3686V27H49.3347V28.5ZM49.3008 28.5H49.3347V27H49.3008V28.5ZM66.5757 28.5H66.5858V27H66.5757V28.5ZM65.8257 26.25V27.75H67.3257V26.25H65.8257ZM66.5858 25.5H66.5757V27H66.5858V25.5ZM66.596 25.5H66.5858V27H66.596V25.5ZM66.6063 25.5H66.596V27H66.6063V25.5ZM66.6165 25.5H66.6063V27H66.6165V25.5ZM66.6267 25.5H66.6165V27H66.6267V25.5ZM66.637 25.5H66.6267V27H66.637V25.5ZM66.6472 25.5H66.637V27H66.6472V25.5ZM66.6575 25.5H66.6472V27H66.6575V25.5ZM66.6678 25.5H66.6575V27H66.6678V25.5ZM66.678 25.5H66.6678V27H66.678V25.5ZM66.6883 25.5H66.678V27H66.6883V25.5ZM66.6987 25.5H66.6883V27H66.6987V25.5ZM66.709 25.5H66.6987V27H66.709V25.5ZM66.7193 25.5H66.709V27H66.7193V25.5ZM66.7297 25.5H66.7193V27H66.7297V25.5ZM66.74 25.5H66.7297V27H66.74V25.5ZM66.7504 25.5H66.74V27H66.7504V25.5ZM66.7608 25.5H66.7504V27H66.7608V25.5ZM66.7712 25.5H66.7608V27H66.7712V25.5ZM66.7816 25.5H66.7712V27H66.7816V25.5ZM66.792 25.5H66.7816V27H66.792V25.5ZM66.8024 25.5H66.792V27H66.8024V25.5ZM66.8129 25.5H66.8024V27H66.8129V25.5ZM66.8233 25.5H66.8129V27H66.8233V25.5ZM66.8338 25.5H66.8233V27H66.8338V25.5ZM66.8442 25.5H66.8338V27H66.8442V25.5ZM66.8547 25.5H66.8442V27H66.8547V25.5ZM66.8652 25.5H66.8547V27H66.8652V25.5ZM66.8757 25.5H66.8652V27H66.8757V25.5ZM66.8863 25.5H66.8757V27H66.8863V25.5ZM66.8968 25.5H66.8863V27H66.8968V25.5ZM66.9073 25.5H66.8968V27H66.9073V25.5ZM66.9179 25.5H66.9073V27H66.9179V25.5ZM66.9284 25.5H66.9179V27H66.9284V25.5ZM66.939 25.5H66.9284V27H66.939V25.5ZM66.9496 25.5H66.939V27H66.9496V25.5ZM66.9602 25.5H66.9496V27H66.9602V25.5ZM66.9708 25.5H66.9602V27H66.9708V25.5ZM66.9814 25.5H66.9708V27H66.9814V25.5ZM66.9921 25.5H66.9814V27H66.9921V25.5ZM67.0027 25.5H66.9921V27H67.0027V25.5ZM67.0134 25.5H67.0027V27H67.0134V25.5ZM67.024 25.5H67.0134V27H67.024V25.5ZM67.0347 25.5H67.024V27H67.0347V25.5ZM67.0454 25.5H67.0347V27H67.0454V25.5ZM67.0561 25.5H67.0454V27H67.0561V25.5ZM67.0668 25.5H67.0561V27H67.0668V25.5ZM67.0775 25.5H67.0668V27H67.0775V25.5ZM67.0883 25.5H67.0775V27H67.0883V25.5ZM67.099 25.5H67.0883V27H67.099V25.5ZM67.1098 25.5H67.099V27H67.1098V25.5ZM67.1206 25.5H67.1098V27H67.1206V25.5ZM67.1313 25.5H67.1206V27H67.1313V25.5ZM67.1421 25.5H67.1313V27H67.1421V25.5ZM67.1529 25.5H67.1421V27H67.1529V25.5ZM67.1637 25.5H67.1529V27H67.1637V25.5ZM67.1746 25.5H67.1637V27H67.1746V25.5ZM67.1854 25.5H67.1746V27H67.1854V25.5ZM67.1963 25.5H67.1854V27H67.1963V25.5ZM67.2071 25.5H67.1963V27H67.2071V25.5ZM67.218 25.5H67.2071V27H67.218V25.5ZM67.2289 25.5H67.218V27H67.2289V25.5ZM67.2398 25.5H67.2289V27H67.2398V25.5ZM67.2507 25.5H67.2398V27H67.2507V25.5ZM67.2616 25.5H67.2507V27H67.2616V25.5ZM67.2725 25.5H67.2616V27H67.2725V25.5ZM67.2835 25.5H67.2725V27H67.2835V25.5ZM67.2944 25.5H67.2835V27H67.2944V25.5ZM67.3054 25.5H67.2944V27H67.3054V25.5ZM67.3164 25.5H67.3054V27H67.3164V25.5ZM67.3273 25.5H67.3164V27H67.3273V25.5ZM67.3383 25.5H67.3273V27H67.3383V25.5ZM67.3494 25.5H67.3383V27H67.3494V25.5ZM67.3604 25.5H67.3494V27H67.3604V25.5ZM67.3714 25.5H67.3604V27H67.3714V25.5ZM67.3824 25.5H67.3714V27H67.3824V25.5ZM67.3935 25.5H67.3824V27H67.3935V25.5ZM67.4046 25.5H67.3935V27H67.4046V25.5ZM67.4156 25.5H67.4046V27H67.4156V25.5ZM67.4267 25.5H67.4156V27H67.4267V25.5ZM67.4378 25.5H67.4267V27H67.4378V25.5ZM67.4489 25.5H67.4378V27H67.4489V25.5ZM67.4601 25.5H67.4489V27H67.4601V25.5ZM67.4712 25.5H67.4601V27H67.4712V25.5ZM67.4824 25.5H67.4712V27H67.4824V25.5ZM67.4935 25.5H67.4824V27H67.4935V25.5ZM67.5047 25.5H67.4935V27H67.5047V25.5ZM67.5159 25.5H67.5047V27H67.5159V25.5ZM67.5271 25.5H67.5159V27H67.5271V25.5ZM67.5383 25.5H67.5271V27H67.5383V25.5ZM67.5495 25.5H67.5383V27H67.5495V25.5ZM67.5607 25.5H67.5495V27H67.5607V25.5ZM67.5719 25.5H67.5607V27H67.5719V25.5ZM67.5832 25.5H67.5719V27H67.5832V25.5ZM67.5944 25.5H67.5832V27H67.5944V25.5ZM67.6057 25.5H67.5944V27H67.6057V25.5ZM67.617 25.5H67.6057V27H67.617V25.5ZM67.6283 25.5H67.617V27H67.6283V25.5ZM67.6396 25.5H67.6283V27H67.6396V25.5ZM67.6509 25.5H67.6396V27H67.6509V25.5ZM67.6622 25.5H67.6509V27H67.6622V25.5ZM67.6736 25.5H67.6622V27H67.6736V25.5ZM67.6849 25.5H67.6736V27H67.6849V25.5ZM67.6963 25.5H67.6849V27H67.6963V25.5ZM67.7077 25.5H67.6963V27H67.7077V25.5ZM67.7191 25.5H67.7077V27H67.7191V25.5ZM67.7305 25.5H67.7191V27H67.7305V25.5ZM67.7419 25.5H67.7305V27H67.7419V25.5ZM67.7533 25.5H67.7419V27H67.7533V25.5ZM67.7647 25.5H67.7533V27H67.7647V25.5ZM67.7762 25.5H67.7647V27H67.7762V25.5ZM67.7876 25.5H67.7762V27H67.7876V25.5ZM67.7991 25.5H67.7876V27H67.7991V25.5ZM67.8106 25.5H67.7991V27H67.8106V25.5ZM67.8221 25.5H67.8106V27H67.8221V25.5ZM67.8336 25.5H67.8221V27H67.8336V25.5ZM67.8451 25.5H67.8336V27H67.8451V25.5ZM67.8566 25.5H67.8451V27H67.8566V25.5ZM67.8681 25.5H67.8566V27H67.8681V25.5ZM67.8797 25.5H67.8681V27H67.8797V25.5ZM67.8912 25.5H67.8797V27H67.8912V25.5ZM67.9028 25.5H67.8912V27H67.9028V25.5ZM67.9144 25.5H67.9028V27H67.9144V25.5ZM67.926 25.5H67.9144V27H67.926V25.5ZM67.9376 25.5H67.926V27H67.9376V25.5ZM67.9492 25.5H67.9376V27H67.9492V25.5ZM67.9608 25.5H67.9492V27H67.9608V25.5ZM67.9724 25.5H67.9608V27H67.9724V25.5ZM67.9841 25.5H67.9724V27H67.9841V25.5ZM67.9958 25.5H67.9841V27H67.9958V25.5ZM68.0074 25.5H67.9958V27H68.0074V25.5ZM68.0191 25.5H68.0074V27H68.0191V25.5ZM68.0308 25.5H68.0191V27H68.0308V25.5ZM68.0425 25.5H68.0308V27H68.0425V25.5ZM68.0542 25.5H68.0425V27H68.0542V25.5ZM68.066 25.5H68.0542V27H68.066V25.5ZM68.0777 25.5H68.066V27H68.0777V25.5ZM68.0894 25.5H68.0777V27H68.0894V25.5ZM68.1012 25.5H68.0894V27H68.1012V25.5ZM68.113 25.5H68.1012V27H68.113V25.5ZM68.1248 25.5H68.113V27H68.1248V25.5ZM68.1366 25.5H68.1248V27H68.1366V25.5ZM68.1484 25.5H68.1366V27H68.1484V25.5ZM68.1602 25.5H68.1484V27H68.1602V25.5ZM68.172 25.5H68.1602V27H68.172V25.5ZM68.1839 25.5H68.172V27H68.1839V25.5ZM68.1957 25.5H68.1839V27H68.1957V25.5ZM68.2076 25.5H68.1957V27H68.2076V25.5ZM68.2195 25.5H68.2076V27H68.2195V25.5ZM68.2313 25.5H68.2195V27H68.2313V25.5ZM68.2432 25.5H68.2313V27H68.2432V25.5ZM68.2552 25.5H68.2432V27H68.2552V25.5ZM68.2671 25.5H68.2552V27H68.2671V25.5ZM68.279 25.5H68.2671V27H68.279V25.5ZM68.291 25.5H68.279V27H68.291V25.5ZM68.3029 25.5H68.291V27H68.3029V25.5ZM68.3149 25.5H68.3029V27H68.3149V25.5ZM68.3269 25.5H68.3149V27H68.3269V25.5ZM68.3389 25.5H68.3269V27H68.3389V25.5ZM68.3509 25.5H68.3389V27H68.3509V25.5ZM68.3629 25.5H68.3509V27H68.3629V25.5ZM68.3749 25.5H68.3629V27H68.3749V25.5ZM68.3869 25.5H68.3749V27H68.3869V25.5ZM68.399 25.5H68.3869V27H68.399V25.5ZM68.411 25.5H68.399V27H68.411V25.5ZM68.4231 25.5H68.411V27H68.4231V25.5ZM68.4352 25.5H68.4231V27H68.4352V25.5ZM68.4473 25.5H68.4352V27H68.4473V25.5ZM68.4594 25.5H68.4473V27H68.4594V25.5ZM68.4715 25.5H68.4594V27H68.4715V25.5ZM68.4836 25.5H68.4715V27H68.4836V25.5ZM68.4958 25.5H68.4836V27H68.4958V25.5ZM68.5079 25.5H68.4958V27H68.5079V25.5ZM68.5201 25.5H68.5079V27H68.5201V25.5ZM68.5323 25.5H68.5201V27H68.5323V25.5ZM68.5444 25.5H68.5323V27H68.5444V25.5ZM68.5566 25.5H68.5444V27H68.5566V25.5ZM68.5688 25.5H68.5566V27H68.5688V25.5ZM68.5811 25.5H68.5688V27H68.5811V25.5ZM68.5933 25.5H68.5811V27H68.5933V25.5ZM68.6055 25.5H68.5933V27H68.6055V25.5ZM68.6178 25.5H68.6055V27H68.6178V25.5ZM68.6301 25.5H68.6178V27H68.6301V25.5ZM68.6423 25.5H68.6301V27H68.6423V25.5ZM68.6546 25.5H68.6423V27H68.6546V25.5ZM68.6669 25.5H68.6546V27H68.6669V25.5ZM68.6792 25.5H68.6669V27H68.6792V25.5ZM68.6916 25.5H68.6792V27H68.6916V25.5ZM68.7039 25.5H68.6916V27H68.7039V25.5ZM68.7162 25.5H68.7039V27H68.7162V25.5ZM68.7286 25.5H68.7162V27H68.7286V25.5ZM68.741 25.5H68.7286V27H68.741V25.5ZM68.7533 25.5H68.741V27H68.7533V25.5ZM68.7657 25.5H68.7533V27H68.7657V25.5ZM68.7781 25.5H68.7657V27H68.7781V25.5ZM68.7905 25.5H68.7781V27H68.7905V25.5ZM68.803 25.5H68.7905V27H68.803V25.5ZM68.8154 25.5H68.803V27H68.8154V25.5ZM68.8278 25.5H68.8154V27H68.8278V25.5ZM68.8403 25.5H68.8278V27H68.8403V25.5ZM68.8528 25.5H68.8403V27H68.8528V25.5ZM68.8653 25.5H68.8528V27H68.8653V25.5ZM68.8777 25.5H68.8653V27H68.8777V25.5ZM68.8903 25.5H68.8777V27H68.8903V25.5ZM68.9028 25.5H68.8903V27H68.9028V25.5ZM68.9153 25.5H68.9028V27H68.9153V25.5ZM68.9278 25.5H68.9153V27H68.9278V25.5ZM68.9404 25.5H68.9278V27H68.9404V25.5ZM68.9529 25.5H68.9404V27H68.9529V25.5ZM68.9655 25.5H68.9529V27H68.9655V25.5ZM68.9781 25.5H68.9655V27H68.9781V25.5ZM68.9907 25.5H68.9781V27H68.9907V25.5ZM69.0033 25.5H68.9907V27H69.0033V25.5ZM69.0159 25.5H69.0033V27H69.0159V25.5ZM69.0286 25.5H69.0159V27H69.0286V25.5ZM69.0412 25.5H69.0286V27H69.0412V25.5ZM69.0538 25.5H69.0412V27H69.0538V25.5ZM69.0665 25.5H69.0538V27H69.0665V25.5ZM69.0792 25.5H69.0665V27H69.0792V25.5ZM69.0919 25.5H69.0792V27H69.0919V25.5ZM69.1046 25.5H69.0919V27H69.1046V25.5ZM69.1173 25.5H69.1046V27H69.1173V25.5ZM69.13 25.5H69.1173V27H69.13V25.5ZM69.1427 25.5H69.13V27H69.1427V25.5ZM69.1555 25.5H69.1427V27H69.1555V25.5ZM69.1682 25.5H69.1555V27H69.1682V25.5ZM69.181 25.5H69.1682V27H69.181V25.5ZM69.1938 25.5H69.181V27H69.1938V25.5ZM69.2066 25.5H69.1938V27H69.2066V25.5ZM69.2194 25.5H69.2066V27H69.2194V25.5ZM69.2322 25.5H69.2194V27H69.2322V25.5ZM69.245 25.5H69.2322V27H69.245V25.5ZM69.2578 25.5H69.245V27H69.2578V25.5ZM69.2707 25.5H69.2578V27H69.2707V25.5ZM69.2836 25.5H69.2707V27H69.2836V25.5ZM69.2964 25.5H69.2836V27H69.2964V25.5ZM69.3093 25.5H69.2964V27H69.3093V25.5ZM69.3222 25.5H69.3093V27H69.3222V25.5ZM69.3351 25.5H69.3222V27H69.3351V25.5ZM69.348 25.5H69.3351V27H69.348V25.5ZM69.3609 25.5H69.348V27H69.3609V25.5ZM69.3739 25.5H69.3609V27H69.3739V25.5ZM69.3868 25.5H69.3739V27H69.3868V25.5ZM69.3998 25.5H69.3868V27H69.3998V25.5ZM69.4128 25.5H69.3998V27H69.4128V25.5ZM69.4257 25.5H69.4128V27H69.4257V25.5ZM69.4387 25.5H69.4257V27H69.4387V25.5ZM69.4517 25.5H69.4387V27H69.4517V25.5ZM69.4648 25.5H69.4517V27H69.4648V25.5ZM69.4778 25.5H69.4648V27H69.4778V25.5ZM69.4908 25.5H69.4778V27H69.4908V25.5ZM69.5039 25.5H69.4908V27H69.5039V25.5ZM69.5169 25.5H69.5039V27H69.5169V25.5ZM69.53 25.5H69.5169V27H69.53V25.5ZM69.5431 25.5H69.53V27H69.5431V25.5ZM69.5562 25.5H69.5431V27H69.5562V25.5ZM69.5693 25.5H69.5562V27H69.5693V25.5ZM69.5824 25.5H69.5693V27H69.5824V25.5ZM69.5956 25.5H69.5824V27H69.5956V25.5ZM69.6087 25.5H69.5956V27H69.6087V25.5ZM69.6219 25.5H69.6087V27H69.6219V25.5ZM69.635 25.5H69.6219V27H69.635V25.5ZM69.6482 25.5H69.635V27H69.6482V25.5ZM69.6614 25.5H69.6482V27H69.6614V25.5ZM69.6746 25.5H69.6614V27H69.6746V25.5ZM69.6878 25.5H69.6746V27H69.6878V25.5ZM69.701 25.5H69.6878V27H69.701V25.5ZM69.7143 25.5H69.701V27H69.7143V25.5ZM69.7275 25.5H69.7143V27H69.7275V25.5ZM69.7408 25.5H69.7275V27H69.7408V25.5ZM69.754 25.5H69.7408V27H69.754V25.5ZM69.7673 25.5H69.754V27H69.7673V25.5ZM69.7806 25.5H69.7673V27H69.7806V25.5ZM69.7939 25.5H69.7806V27H69.7939V25.5ZM69.8072 25.5H69.7939V27H69.8072V25.5ZM69.8206 25.5H69.8072V27H69.8206V25.5ZM69.8339 25.5H69.8206V27H69.8339V25.5ZM69.8472 25.5H69.8339V27H69.8472V25.5ZM69.8606 25.5H69.8472V27H69.8606V25.5ZM69.874 25.5H69.8606V27H69.874V25.5ZM69.8874 25.5H69.874V27H69.8874V25.5ZM69.9008 25.5H69.8874V27H69.9008V25.5ZM69.9142 25.5H69.9008V27H69.9142V25.5ZM69.9276 25.5H69.9142V27H69.9276V25.5ZM69.941 25.5H69.9276V27H69.941V25.5ZM69.9544 25.5H69.941V27H69.9544V25.5ZM69.9679 25.5H69.9544V27H69.9679V25.5ZM69.9814 25.5H69.9679V27H69.9814V25.5ZM69.9948 25.5H69.9814V27H69.9948V25.5ZM70.0083 25.5H69.9948V27H70.0083V25.5ZM70.0218 25.5H70.0083V27H70.0218V25.5ZM70.0353 25.5H70.0218V27H70.0353V25.5ZM70.0488 25.5H70.0353V27H70.0488V25.5ZM70.0624 25.5H70.0488V27H70.0624V25.5ZM70.0759 25.5H70.0624V27H70.0759V25.5ZM70.0895 25.5H70.0759V27H70.0895V25.5ZM70.103 25.5H70.0895V27H70.103V25.5ZM70.1166 25.5H70.103V27H70.1166V25.5ZM70.1302 25.5H70.1166V27H70.1302V25.5ZM70.1438 25.5H70.1302V27H70.1438V25.5ZM70.1574 25.5H70.1438V27H70.1574V25.5ZM70.171 25.5H70.1574V27H70.171V25.5ZM70.1847 25.5H70.171V27H70.1847V25.5ZM70.1983 25.5H70.1847V27H70.1983V25.5ZM70.212 25.5H70.1983V27H70.212V25.5ZM70.2256 25.5H70.212V27H70.2256V25.5ZM70.2393 25.5H70.2256V27H70.2393V25.5ZM70.253 25.5H70.2393V27H70.253V25.5ZM70.2667 25.5H70.253V27H70.2667V25.5ZM70.2804 25.5H70.2667V27H70.2804V25.5ZM70.2942 25.5H70.2804V27H70.2942V25.5ZM70.3079 25.5H70.2942V27H70.3079V25.5ZM70.3216 25.5H70.3079V27H70.3216V25.5ZM70.3354 25.5H70.3216V27H70.3354V25.5ZM70.3492 25.5H70.3354V27H70.3492V25.5ZM70.363 25.5H70.3492V27H70.363V25.5ZM70.3768 25.5H70.363V27H70.3768V25.5ZM70.3906 25.5H70.3768V27H70.3906V25.5ZM70.4044 25.5H70.3906V27H70.4044V25.5ZM70.4182 25.5H70.4044V27H70.4182V25.5ZM70.432 25.5H70.4182V27H70.432V25.5ZM70.4459 25.5H70.432V27H70.4459V25.5ZM70.4598 25.5H70.4459V27H70.4598V25.5ZM70.4736 25.5H70.4598V27H70.4736V25.5ZM70.4875 25.5H70.4736V27H70.4875V25.5ZM70.5014 25.5H70.4875V27H70.5014V25.5ZM70.5153 25.5H70.5014V27H70.5153V25.5ZM70.5292 25.5H70.5153V27H70.5292V25.5ZM70.5432 25.5H70.5292V27H70.5432V25.5ZM70.5571 25.5H70.5432V27H70.5571V25.5ZM70.5711 25.5H70.5571V27H70.5711V25.5ZM70.585 25.5H70.5711V27H70.585V25.5ZM70.599 25.5H70.585V27H70.599V25.5ZM70.613 25.5H70.599V27H70.613V25.5ZM70.627 25.5H70.613V27H70.627V25.5ZM70.641 25.5H70.627V27H70.641V25.5ZM70.655 25.5H70.641V27H70.655V25.5ZM70.6691 25.5H70.655V27H70.6691V25.5ZM70.6831 25.5H70.6691V27H70.6831V25.5ZM70.6972 25.5H70.6831V27H70.6972V25.5ZM70.7112 25.5H70.6972V27H70.7112V25.5ZM70.7253 25.5H70.7112V27H70.7253V25.5ZM70.7394 25.5H70.7253V27H70.7394V25.5ZM70.7535 25.5H70.7394V27H70.7535V25.5ZM70.7676 25.5H70.7535V27H70.7676V25.5ZM70.7817 25.5H70.7676V27H70.7817V25.5ZM70.7959 25.5H70.7817V27H70.7959V25.5ZM70.81 25.5H70.7959V27H70.81V25.5ZM70.8242 25.5H70.81V27H70.8242V25.5ZM70.8384 25.5H70.8242V27H70.8384V25.5ZM70.8525 25.5H70.8384V27H70.8525V25.5ZM70.8667 25.5H70.8525V27H70.8667V25.5ZM70.8809 25.5H70.8667V27H70.8809V25.5ZM70.8952 25.5H70.8809V27H70.8952V25.5ZM70.9094 25.5H70.8952V27H70.9094V25.5ZM70.9236 25.5H70.9094V27H70.9236V25.5ZM70.9379 25.5H70.9236V27H70.9379V25.5ZM70.9521 25.5H70.9379V27H70.9521V25.5ZM70.9664 25.5H70.9521V27H70.9664V25.5ZM70.9807 25.5H70.9664V27H70.9807V25.5ZM70.995 25.5H70.9807V27H70.995V25.5ZM71.0093 25.5H70.995V27H71.0093V25.5ZM71.0236 25.5H71.0093V27H71.0236V25.5ZM71.0379 25.5H71.0236V27H71.0379V25.5ZM71.0523 25.5H71.0379V27H71.0523V25.5ZM71.0666 25.5H71.0523V27H71.0666V25.5ZM71.081 25.5H71.0666V27H71.081V25.5ZM71.0954 25.5H71.081V27H71.0954V25.5ZM71.1098 25.5H71.0954V27H71.1098V25.5ZM71.1242 25.5H71.1098V27H71.1242V25.5ZM71.1386 25.5H71.1242V27H71.1386V25.5ZM71.153 25.5H71.1386V27H71.153V25.5ZM71.1674 25.5H71.153V27H71.1674V25.5ZM71.1819 25.5H71.1674V27H71.1819V25.5ZM71.1963 25.5H71.1819V27H71.1963V25.5ZM71.2108 25.5H71.1963V27H71.2108V25.5ZM71.2253 25.5H71.2108V27H71.2253V25.5ZM71.2398 25.5H71.2253V27H71.2398V25.5ZM71.2543 25.5H71.2398V27H71.2543V25.5ZM71.2688 25.5H71.2543V27H71.2688V25.5ZM71.2833 25.5H71.2688V27H71.2833V25.5ZM71.2978 25.5H71.2833V27H71.2978V25.5ZM71.3124 25.5H71.2978V27H71.3124V25.5ZM71.3269 25.5H71.3124V27H71.3269V25.5ZM71.3415 25.5H71.3269V27H71.3415V25.5ZM71.3561 25.5H71.3415V27H71.3561V25.5ZM71.3707 25.5H71.3561V27H71.3707V25.5ZM71.3853 25.5H71.3707V27H71.3853V25.5ZM71.3999 25.5H71.3853V27H71.3999V25.5ZM71.4145 25.5H71.3999V27H71.4145V25.5ZM71.4292 25.5H71.4145V27H71.4292V25.5ZM71.4438 25.5H71.4292V27H71.4438V25.5ZM71.4585 25.5H71.4438V27H71.4585V25.5ZM71.4732 25.5H71.4585V27H71.4732V25.5ZM71.4878 25.5H71.4732V27H71.4878V25.5ZM71.5025 25.5H71.4878V27H71.5025V25.5ZM71.5172 25.5H71.5025V27H71.5172V25.5ZM71.532 25.5H71.5172V27H71.532V25.5ZM71.5467 25.5H71.532V27H71.5467V25.5ZM71.5614 25.5H71.5467V27H71.5614V25.5ZM71.5762 25.5H71.5614V27H71.5762V25.5ZM71.591 25.5H71.5762V27H71.591V25.5ZM71.6057 25.5H71.591V27H71.6057V25.5ZM71.6205 25.5H71.6057V27H71.6205V25.5ZM71.6353 25.5H71.6205V27H71.6353V25.5ZM71.6501 25.5H71.6353V27H71.6501V25.5ZM71.6649 25.5H71.6501V27H71.6649V25.5ZM71.6798 25.5H71.6649V27H71.6798V25.5ZM71.6946 25.5H71.6798V27H71.6946V25.5ZM71.7095 25.5H71.6946V27H71.7095V25.5ZM71.7243 25.5H71.7095V27H71.7243V25.5ZM71.7392 25.5H71.7243V27H71.7392V25.5ZM71.7541 25.5H71.7392V27H71.7541V25.5ZM71.769 25.5H71.7541V27H71.769V25.5ZM71.7839 25.5H71.769V27H71.7839V25.5ZM71.7988 25.5H71.7839V27H71.7988V25.5ZM71.8138 25.5H71.7988V27H71.8138V25.5ZM71.8287 25.5H71.8138V27H71.8287V25.5ZM71.8437 25.5H71.8287V27H71.8437V25.5ZM71.8587 25.5H71.8437V27H71.8587V25.5ZM71.8736 25.5H71.8587V27H71.8736V25.5ZM71.8886 25.5H71.8736V27H71.8886V25.5ZM71.9036 25.5H71.8886V27H71.9036V25.5ZM71.9186 25.5H71.9036V27H71.9186V25.5ZM71.9337 25.5H71.9186V27H71.9337V25.5ZM71.9487 25.5H71.9337V27H71.9487V25.5ZM71.9638 25.5H71.9487V27H71.9638V25.5ZM71.9788 25.5H71.9638V27H71.9788V25.5ZM71.9939 25.5H71.9788V27H71.9939V25.5ZM72.009 25.5H71.9939V27H72.009V25.5ZM72.0241 25.5H72.009V27H72.0241V25.5ZM72.0392 25.5H72.0241V27H72.0392V25.5ZM72.0543 25.5H72.0392V27H72.0543V25.5ZM72.0694 25.5H72.0543V27H72.0694V25.5ZM72.0846 25.5H72.0694V27H72.0846V25.5ZM72.0997 25.5H72.0846V27H72.0997V25.5ZM72.1149 25.5H72.0997V27H72.1149V25.5ZM72.1301 25.5H72.1149V27H72.1301V25.5ZM72.1452 25.5H72.1301V27H72.1452V25.5ZM72.1604 25.5H72.1452V27H72.1604V25.5ZM72.1756 25.5H72.1604V27H72.1756V25.5ZM72.1909 25.5H72.1756V27H72.1909V25.5ZM72.2061 25.5H72.1909V27H72.2061V25.5ZM72.2213 25.5H72.2061V27H72.2213V25.5ZM72.2366 25.5H72.2213V27H72.2366V25.5ZM72.2519 25.5H72.2366V27H72.2519V25.5ZM72.2671 25.5H72.2519V27H72.2671V25.5ZM72.2824 25.5H72.2671V27H72.2824V25.5ZM72.2977 25.5H72.2824V27H72.2977V25.5ZM72.313 25.5H72.2977V27H72.313V25.5ZM72.3284 25.5H72.313V27H72.3284V25.5ZM72.3437 25.5H72.3284V27H72.3437V25.5ZM72.359 25.5H72.3437V27H72.359V25.5ZM72.3744 25.5H72.359V27H72.3744V25.5ZM72.3898 25.5H72.3744V27H72.3898V25.5ZM72.4052 25.5H72.3898V27H72.4052V25.5ZM72.4205 25.5H72.4052V27H72.4205V25.5ZM72.4359 25.5H72.4205V27H72.4359V25.5ZM72.4514 25.5H72.4359V27H72.4514V25.5ZM72.4668 25.5H72.4514V27H72.4668V25.5ZM72.4822 25.5H72.4668V27H72.4822V25.5ZM72.4977 25.5H72.4822V27H72.4977V25.5ZM72.5131 25.5H72.4977V27H72.5131V25.5ZM72.5286 25.5H72.5131V27H72.5286V25.5ZM72.5441 25.5H72.5286V27H72.5441V25.5ZM72.5596 25.5H72.5441V27H72.5596V25.5ZM72.5751 25.5H72.5596V27H72.5751V25.5ZM72.5906 25.5H72.5751V27H72.5906V25.5ZM72.6061 25.5H72.5906V27H72.6061V25.5ZM72.6217 25.5H72.6061V27H72.6217V25.5ZM72.6372 25.5H72.6217V27H72.6372V25.5ZM72.6528 25.5H72.6372V27H72.6528V25.5ZM72.6684 25.5H72.6528V27H72.6684V25.5ZM72.684 25.5H72.6684V27H72.684V25.5ZM72.6995 25.5H72.684V27H72.6995V25.5ZM72.7152 25.5H72.6995V27H72.7152V25.5ZM72.7308 25.5H72.7152V27H72.7308V25.5ZM72.7464 25.5H72.7308V27H72.7464V25.5ZM72.7621 25.5H72.7464V27H72.7621V25.5ZM72.7777 25.5H72.7621V27H72.7777V25.5ZM72.7934 25.5H72.7777V27H72.7934V25.5ZM72.809 25.5H72.7934V27H72.809V25.5ZM72.8247 25.5H72.809V27H72.8247V25.5ZM72.8404 25.5H72.8247V27H72.8404V25.5ZM72.8561 25.5H72.8404V27H72.8561V25.5ZM72.8719 25.5H72.8561V27H72.8719V25.5ZM72.8876 25.5H72.8719V27H72.8876V25.5ZM72.9033 25.5H72.8876V27H72.9033V25.5ZM72.9191 25.5H72.9033V27H72.9191V25.5ZM72.9349 25.5H72.9191V27H72.9349V25.5ZM72.9507 25.5H72.9349V27H72.9507V25.5ZM72.9664 25.5H72.9507V27H72.9664V25.5ZM72.9822 25.5H72.9664V27H72.9822V25.5ZM72.9981 25.5H72.9822V27H72.9981V25.5ZM73.0139 25.5H72.9981V27H73.0139V25.5ZM73.0297 25.5H73.0139V27H73.0297V25.5ZM73.0456 25.5H73.0297V27H73.0456V25.5ZM73.0614 25.5H73.0456V27H73.0614V25.5ZM73.0773 25.5H73.0614V27H73.0773V25.5ZM73.0932 25.5H73.0773V27H73.0932V25.5ZM73.1091 25.5H73.0932V27H73.1091V25.5ZM73.125 25.5H73.1091V27H73.125V25.5ZM73.1409 25.5H73.125V27H73.1409V25.5ZM73.1568 25.5H73.1409V27H73.1568V25.5ZM73.1728 25.5H73.1568V27H73.1728V25.5ZM73.1887 25.5H73.1728V27H73.1887V25.5ZM73.2047 25.5H73.1887V27H73.2047V25.5ZM73.2207 25.5H73.2047V27H73.2207V25.5ZM73.2366 25.5H73.2207V27H73.2366V25.5ZM73.2526 25.5H73.2366V27H73.2526V25.5ZM73.2686 25.5H73.2526V27H73.2686V25.5ZM73.2847 25.5H73.2686V27H73.2847V25.5ZM74.0347 27.75V26.25H72.5347V27.75H74.0347ZM73.2686 28.5H73.2847V27H73.2686V28.5ZM73.2526 28.5H73.2686V27H73.2526V28.5ZM73.2366 28.5H73.2526V27H73.2366V28.5ZM73.2207 28.5H73.2366V27H73.2207V28.5ZM73.2047 28.5H73.2207V27H73.2047V28.5ZM73.1887 28.5H73.2047V27H73.1887V28.5ZM73.1728 28.5H73.1887V27H73.1728V28.5ZM73.1568 28.5H73.1728V27H73.1568V28.5ZM73.1409 28.5H73.1568V27H73.1409V28.5ZM73.125 28.5H73.1409V27H73.125V28.5ZM73.1091 28.5H73.125V27H73.1091V28.5ZM73.0932 28.5H73.1091V27H73.0932V28.5ZM73.0773 28.5H73.0932V27H73.0773V28.5ZM73.0614 28.5H73.0773V27H73.0614V28.5ZM73.0456 28.5H73.0614V27H73.0456V28.5ZM73.0297 28.5H73.0456V27H73.0297V28.5ZM73.0139 28.5H73.0297V27H73.0139V28.5ZM72.9981 28.5H73.0139V27H72.9981V28.5ZM72.9822 28.5H72.9981V27H72.9822V28.5ZM72.9664 28.5H72.9822V27H72.9664V28.5ZM72.9507 28.5H72.9664V27H72.9507V28.5ZM72.9349 28.5H72.9507V27H72.9349V28.5ZM72.9191 28.5H72.9349V27H72.9191V28.5ZM72.9033 28.5H72.9191V27H72.9033V28.5ZM72.8876 28.5H72.9033V27H72.8876V28.5ZM72.8719 28.5H72.8876V27H72.8719V28.5ZM72.8561 28.5H72.8719V27H72.8561V28.5ZM72.8404 28.5H72.8561V27H72.8404V28.5ZM72.8247 28.5H72.8404V27H72.8247V28.5ZM72.809 28.5H72.8247V27H72.809V28.5ZM72.7934 28.5H72.809V27H72.7934V28.5ZM72.7777 28.5H72.7934V27H72.7777V28.5ZM72.7621 28.5H72.7777V27H72.7621V28.5ZM72.7464 28.5H72.7621V27H72.7464V28.5ZM72.7308 28.5H72.7464V27H72.7308V28.5ZM72.7152 28.5H72.7308V27H72.7152V28.5ZM72.6995 28.5H72.7152V27H72.6995V28.5ZM72.684 28.5H72.6995V27H72.684V28.5ZM72.6684 28.5H72.684V27H72.6684V28.5ZM72.6528 28.5H72.6684V27H72.6528V28.5ZM72.6372 28.5H72.6528V27H72.6372V28.5ZM72.6217 28.5H72.6372V27H72.6217V28.5ZM72.6061 28.5H72.6217V27H72.6061V28.5ZM72.5906 28.5H72.6061V27H72.5906V28.5ZM72.5751 28.5H72.5906V27H72.5751V28.5ZM72.5596 28.5H72.5751V27H72.5596V28.5ZM72.5441 28.5H72.5596V27H72.5441V28.5ZM72.5286 28.5H72.5441V27H72.5286V28.5ZM72.5131 28.5H72.5286V27H72.5131V28.5ZM72.4977 28.5H72.5131V27H72.4977V28.5ZM72.4822 28.5H72.4977V27H72.4822V28.5ZM72.4668 28.5H72.4822V27H72.4668V28.5ZM72.4514 28.5H72.4668V27H72.4514V28.5ZM72.4359 28.5H72.4514V27H72.4359V28.5ZM72.4205 28.5H72.4359V27H72.4205V28.5ZM72.4052 28.5H72.4205V27H72.4052V28.5ZM72.3898 28.5H72.4052V27H72.3898V28.5ZM72.3744 28.5H72.3898V27H72.3744V28.5ZM72.359 28.5H72.3744V27H72.359V28.5ZM72.3437 28.5H72.359V27H72.3437V28.5ZM72.3284 28.5H72.3437V27H72.3284V28.5ZM72.313 28.5H72.3284V27H72.313V28.5ZM72.2977 28.5H72.313V27H72.2977V28.5ZM72.2824 28.5H72.2977V27H72.2824V28.5ZM72.2671 28.5H72.2824V27H72.2671V28.5ZM72.2519 28.5H72.2671V27H72.2519V28.5ZM72.2366 28.5H72.2519V27H72.2366V28.5ZM72.2213 28.5H72.2366V27H72.2213V28.5ZM72.2061 28.5H72.2213V27H72.2061V28.5ZM72.1909 28.5H72.2061V27H72.1909V28.5ZM72.1756 28.5H72.1909V27H72.1756V28.5ZM72.1604 28.5H72.1756V27H72.1604V28.5ZM72.1452 28.5H72.1604V27H72.1452V28.5ZM72.1301 28.5H72.1452V27H72.1301V28.5ZM72.1149 28.5H72.1301V27H72.1149V28.5ZM72.0997 28.5H72.1149V27H72.0997V28.5ZM72.0846 28.5H72.0997V27H72.0846V28.5ZM72.0694 28.5H72.0846V27H72.0694V28.5ZM72.0543 28.5H72.0694V27H72.0543V28.5ZM72.0392 28.5H72.0543V27H72.0392V28.5ZM72.0241 28.5H72.0392V27H72.0241V28.5ZM72.009 28.5H72.0241V27H72.009V28.5ZM71.9939 28.5H72.009V27H71.9939V28.5ZM71.9788 28.5H71.9939V27H71.9788V28.5ZM71.9638 28.5H71.9788V27H71.9638V28.5ZM71.9487 28.5H71.9638V27H71.9487V28.5ZM71.9337 28.5H71.9487V27H71.9337V28.5ZM71.9186 28.5H71.9337V27H71.9186V28.5ZM71.9036 28.5H71.9186V27H71.9036V28.5ZM71.8886 28.5H71.9036V27H71.8886V28.5ZM71.8736 28.5H71.8886V27H71.8736V28.5ZM71.8587 28.5H71.8736V27H71.8587V28.5ZM71.8437 28.5H71.8587V27H71.8437V28.5ZM71.8287 28.5H71.8437V27H71.8287V28.5ZM71.8138 28.5H71.8287V27H71.8138V28.5ZM71.7988 28.5H71.8138V27H71.7988V28.5ZM71.7839 28.5H71.7988V27H71.7839V28.5ZM71.769 28.5H71.7839V27H71.769V28.5ZM71.7541 28.5H71.769V27H71.7541V28.5ZM71.7392 28.5H71.7541V27H71.7392V28.5ZM71.7243 28.5H71.7392V27H71.7243V28.5ZM71.7095 28.5H71.7243V27H71.7095V28.5ZM71.6946 28.5H71.7095V27H71.6946V28.5ZM71.6798 28.5H71.6946V27H71.6798V28.5ZM71.6649 28.5H71.6798V27H71.6649V28.5ZM71.6501 28.5H71.6649V27H71.6501V28.5ZM71.6353 28.5H71.6501V27H71.6353V28.5ZM71.6205 28.5H71.6353V27H71.6205V28.5ZM71.6057 28.5H71.6205V27H71.6057V28.5ZM71.591 28.5H71.6057V27H71.591V28.5ZM71.5762 28.5H71.591V27H71.5762V28.5ZM71.5614 28.5H71.5762V27H71.5614V28.5ZM71.5467 28.5H71.5614V27H71.5467V28.5ZM71.532 28.5H71.5467V27H71.532V28.5ZM71.5172 28.5H71.532V27H71.5172V28.5ZM71.5025 28.5H71.5172V27H71.5025V28.5ZM71.4878 28.5H71.5025V27H71.4878V28.5ZM71.4732 28.5H71.4878V27H71.4732V28.5ZM71.4585 28.5H71.4732V27H71.4585V28.5ZM71.4438 28.5H71.4585V27H71.4438V28.5ZM71.4292 28.5H71.4438V27H71.4292V28.5ZM71.4145 28.5H71.4292V27H71.4145V28.5ZM71.3999 28.5H71.4145V27H71.3999V28.5ZM71.3853 28.5H71.3999V27H71.3853V28.5ZM71.3707 28.5H71.3853V27H71.3707V28.5ZM71.3561 28.5H71.3707V27H71.3561V28.5ZM71.3415 28.5H71.3561V27H71.3415V28.5ZM71.3269 28.5H71.3415V27H71.3269V28.5ZM71.3124 28.5H71.3269V27H71.3124V28.5ZM71.2978 28.5H71.3124V27H71.2978V28.5ZM71.2833 28.5H71.2978V27H71.2833V28.5ZM71.2688 28.5H71.2833V27H71.2688V28.5ZM71.2543 28.5H71.2688V27H71.2543V28.5ZM71.2398 28.5H71.2543V27H71.2398V28.5ZM71.2253 28.5H71.2398V27H71.2253V28.5ZM71.2108 28.5H71.2253V27H71.2108V28.5ZM71.1963 28.5H71.2108V27H71.1963V28.5ZM71.1819 28.5H71.1963V27H71.1819V28.5ZM71.1674 28.5H71.1819V27H71.1674V28.5ZM71.153 28.5H71.1674V27H71.153V28.5ZM71.1386 28.5H71.153V27H71.1386V28.5ZM71.1242 28.5H71.1386V27H71.1242V28.5ZM71.1098 28.5H71.1242V27H71.1098V28.5ZM71.0954 28.5H71.1098V27H71.0954V28.5ZM71.081 28.5H71.0954V27H71.081V28.5ZM71.0666 28.5H71.081V27H71.0666V28.5ZM71.0523 28.5H71.0666V27H71.0523V28.5ZM71.0379 28.5H71.0523V27H71.0379V28.5ZM71.0236 28.5H71.0379V27H71.0236V28.5ZM71.0093 28.5H71.0236V27H71.0093V28.5ZM70.995 28.5H71.0093V27H70.995V28.5ZM70.9807 28.5H70.995V27H70.9807V28.5ZM70.9664 28.5H70.9807V27H70.9664V28.5ZM70.9521 28.5H70.9664V27H70.9521V28.5ZM70.9379 28.5H70.9521V27H70.9379V28.5ZM70.9236 28.5H70.9379V27H70.9236V28.5ZM70.9094 28.5H70.9236V27H70.9094V28.5ZM70.8952 28.5H70.9094V27H70.8952V28.5ZM70.8809 28.5H70.8952V27H70.8809V28.5ZM70.8667 28.5H70.8809V27H70.8667V28.5ZM70.8525 28.5H70.8667V27H70.8525V28.5ZM70.8384 28.5H70.8525V27H70.8384V28.5ZM70.8242 28.5H70.8384V27H70.8242V28.5ZM70.81 28.5H70.8242V27H70.81V28.5ZM70.7959 28.5H70.81V27H70.7959V28.5ZM70.7817 28.5H70.7959V27H70.7817V28.5ZM70.7676 28.5H70.7817V27H70.7676V28.5ZM70.7535 28.5H70.7676V27H70.7535V28.5ZM70.7394 28.5H70.7535V27H70.7394V28.5ZM70.7253 28.5H70.7394V27H70.7253V28.5ZM70.7112 28.5H70.7253V27H70.7112V28.5ZM70.6972 28.5H70.7112V27H70.6972V28.5ZM70.6831 28.5H70.6972V27H70.6831V28.5ZM70.6691 28.5H70.6831V27H70.6691V28.5ZM70.655 28.5H70.6691V27H70.655V28.5ZM70.641 28.5H70.655V27H70.641V28.5ZM70.627 28.5H70.641V27H70.627V28.5ZM70.613 28.5H70.627V27H70.613V28.5ZM70.599 28.5H70.613V27H70.599V28.5ZM70.585 28.5H70.599V27H70.585V28.5ZM70.5711 28.5H70.585V27H70.5711V28.5ZM70.5571 28.5H70.5711V27H70.5571V28.5ZM70.5432 28.5H70.5571V27H70.5432V28.5ZM70.5292 28.5H70.5432V27H70.5292V28.5ZM70.5153 28.5H70.5292V27H70.5153V28.5ZM70.5014 28.5H70.5153V27H70.5014V28.5ZM70.4875 28.5H70.5014V27H70.4875V28.5ZM70.4736 28.5H70.4875V27H70.4736V28.5ZM70.4598 28.5H70.4736V27H70.4598V28.5ZM70.4459 28.5H70.4598V27H70.4459V28.5ZM70.432 28.5H70.4459V27H70.432V28.5ZM70.4182 28.5H70.432V27H70.4182V28.5ZM70.4044 28.5H70.4182V27H70.4044V28.5ZM70.3906 28.5H70.4044V27H70.3906V28.5ZM70.3768 28.5H70.3906V27H70.3768V28.5ZM70.363 28.5H70.3768V27H70.363V28.5ZM70.3492 28.5H70.363V27H70.3492V28.5ZM70.3354 28.5H70.3492V27H70.3354V28.5ZM70.3216 28.5H70.3354V27H70.3216V28.5ZM70.3079 28.5H70.3216V27H70.3079V28.5ZM70.2942 28.5H70.3079V27H70.2942V28.5ZM70.2804 28.5H70.2942V27H70.2804V28.5ZM70.2667 28.5H70.2804V27H70.2667V28.5ZM70.253 28.5H70.2667V27H70.253V28.5ZM70.2393 28.5H70.253V27H70.2393V28.5ZM70.2256 28.5H70.2393V27H70.2256V28.5ZM70.212 28.5H70.2256V27H70.212V28.5ZM70.1983 28.5H70.212V27H70.1983V28.5ZM70.1847 28.5H70.1983V27H70.1847V28.5ZM70.171 28.5H70.1847V27H70.171V28.5ZM70.1574 28.5H70.171V27H70.1574V28.5ZM70.1438 28.5H70.1574V27H70.1438V28.5ZM70.1302 28.5H70.1438V27H70.1302V28.5ZM70.1166 28.5H70.1302V27H70.1166V28.5ZM70.103 28.5H70.1166V27H70.103V28.5ZM70.0895 28.5H70.103V27H70.0895V28.5ZM70.0759 28.5H70.0895V27H70.0759V28.5ZM70.0624 28.5H70.0759V27H70.0624V28.5ZM70.0488 28.5H70.0624V27H70.0488V28.5ZM70.0353 28.5H70.0488V27H70.0353V28.5ZM70.0218 28.5H70.0353V27H70.0218V28.5ZM70.0083 28.5H70.0218V27H70.0083V28.5ZM69.9948 28.5H70.0083V27H69.9948V28.5ZM69.9814 28.5H69.9948V27H69.9814V28.5ZM69.9679 28.5H69.9814V27H69.9679V28.5ZM69.9544 28.5H69.9679V27H69.9544V28.5ZM69.941 28.5H69.9544V27H69.941V28.5ZM69.9276 28.5H69.941V27H69.9276V28.5ZM69.9142 28.5H69.9276V27H69.9142V28.5ZM69.9008 28.5H69.9142V27H69.9008V28.5ZM69.8874 28.5H69.9008V27H69.8874V28.5ZM69.874 28.5H69.8874V27H69.874V28.5ZM69.8606 28.5H69.874V27H69.8606V28.5ZM69.8472 28.5H69.8606V27H69.8472V28.5ZM69.8339 28.5H69.8472V27H69.8339V28.5ZM69.8206 28.5H69.8339V27H69.8206V28.5ZM69.8072 28.5H69.8206V27H69.8072V28.5ZM69.7939 28.5H69.8072V27H69.7939V28.5ZM69.7806 28.5H69.7939V27H69.7806V28.5ZM69.7673 28.5H69.7806V27H69.7673V28.5ZM69.754 28.5H69.7673V27H69.754V28.5ZM69.7408 28.5H69.754V27H69.7408V28.5ZM69.7275 28.5H69.7408V27H69.7275V28.5ZM69.7143 28.5H69.7275V27H69.7143V28.5ZM69.701 28.5H69.7143V27H69.701V28.5ZM69.6878 28.5H69.701V27H69.6878V28.5ZM69.6746 28.5H69.6878V27H69.6746V28.5ZM69.6614 28.5H69.6746V27H69.6614V28.5ZM69.6482 28.5H69.6614V27H69.6482V28.5ZM69.635 28.5H69.6482V27H69.635V28.5ZM69.6219 28.5H69.635V27H69.6219V28.5ZM69.6087 28.5H69.6219V27H69.6087V28.5ZM69.5956 28.5H69.6087V27H69.5956V28.5ZM69.5824 28.5H69.5956V27H69.5824V28.5ZM69.5693 28.5H69.5824V27H69.5693V28.5ZM69.5562 28.5H69.5693V27H69.5562V28.5ZM69.5431 28.5H69.5562V27H69.5431V28.5ZM69.53 28.5H69.5431V27H69.53V28.5ZM69.5169 28.5H69.53V27H69.5169V28.5ZM69.5039 28.5H69.5169V27H69.5039V28.5ZM69.4908 28.5H69.5039V27H69.4908V28.5ZM69.4778 28.5H69.4908V27H69.4778V28.5ZM69.4648 28.5H69.4778V27H69.4648V28.5ZM69.4517 28.5H69.4648V27H69.4517V28.5ZM69.4387 28.5H69.4517V27H69.4387V28.5ZM69.4257 28.5H69.4387V27H69.4257V28.5ZM69.4128 28.5H69.4257V27H69.4128V28.5ZM69.3998 28.5H69.4128V27H69.3998V28.5ZM69.3868 28.5H69.3998V27H69.3868V28.5ZM69.3739 28.5H69.3868V27H69.3739V28.5ZM69.3609 28.5H69.3739V27H69.3609V28.5ZM69.348 28.5H69.3609V27H69.348V28.5ZM69.3351 28.5H69.348V27H69.3351V28.5ZM69.3222 28.5H69.3351V27H69.3222V28.5ZM69.3093 28.5H69.3222V27H69.3093V28.5ZM69.2964 28.5H69.3093V27H69.2964V28.5ZM69.2836 28.5H69.2964V27H69.2836V28.5ZM69.2707 28.5H69.2836V27H69.2707V28.5ZM69.2578 28.5H69.2707V27H69.2578V28.5ZM69.245 28.5H69.2578V27H69.245V28.5ZM69.2322 28.5H69.245V27H69.2322V28.5ZM69.2194 28.5H69.2322V27H69.2194V28.5ZM69.2066 28.5H69.2194V27H69.2066V28.5ZM69.1938 28.5H69.2066V27H69.1938V28.5ZM69.181 28.5H69.1938V27H69.181V28.5ZM69.1682 28.5H69.181V27H69.1682V28.5ZM69.1555 28.5H69.1682V27H69.1555V28.5ZM69.1427 28.5H69.1555V27H69.1427V28.5ZM69.13 28.5H69.1427V27H69.13V28.5ZM69.1173 28.5H69.13V27H69.1173V28.5ZM69.1046 28.5H69.1173V27H69.1046V28.5ZM69.0919 28.5H69.1046V27H69.0919V28.5ZM69.0792 28.5H69.0919V27H69.0792V28.5ZM69.0665 28.5H69.0792V27H69.0665V28.5ZM69.0538 28.5H69.0665V27H69.0538V28.5ZM69.0412 28.5H69.0538V27H69.0412V28.5ZM69.0286 28.5H69.0412V27H69.0286V28.5ZM69.0159 28.5H69.0286V27H69.0159V28.5ZM69.0033 28.5H69.0159V27H69.0033V28.5ZM68.9907 28.5H69.0033V27H68.9907V28.5ZM68.9781 28.5H68.9907V27H68.9781V28.5ZM68.9655 28.5H68.9781V27H68.9655V28.5ZM68.9529 28.5H68.9655V27H68.9529V28.5ZM68.9404 28.5H68.9529V27H68.9404V28.5ZM68.9278 28.5H68.9404V27H68.9278V28.5ZM68.9153 28.5H68.9278V27H68.9153V28.5ZM68.9028 28.5H68.9153V27H68.9028V28.5ZM68.8903 28.5H68.9028V27H68.8903V28.5ZM68.8777 28.5H68.8903V27H68.8777V28.5ZM68.8653 28.5H68.8777V27H68.8653V28.5ZM68.8528 28.5H68.8653V27H68.8528V28.5ZM68.8403 28.5H68.8528V27H68.8403V28.5ZM68.8278 28.5H68.8403V27H68.8278V28.5ZM68.8154 28.5H68.8278V27H68.8154V28.5ZM68.803 28.5H68.8154V27H68.803V28.5ZM68.7905 28.5H68.803V27H68.7905V28.5ZM68.7781 28.5H68.7905V27H68.7781V28.5ZM68.7657 28.5H68.7781V27H68.7657V28.5ZM68.7533 28.5H68.7657V27H68.7533V28.5ZM68.741 28.5H68.7533V27H68.741V28.5ZM68.7286 28.5H68.741V27H68.7286V28.5ZM68.7162 28.5H68.7286V27H68.7162V28.5ZM68.7039 28.5H68.7162V27H68.7039V28.5ZM68.6916 28.5H68.7039V27H68.6916V28.5ZM68.6792 28.5H68.6916V27H68.6792V28.5ZM68.6669 28.5H68.6792V27H68.6669V28.5ZM68.6546 28.5H68.6669V27H68.6546V28.5ZM68.6423 28.5H68.6546V27H68.6423V28.5ZM68.6301 28.5H68.6423V27H68.6301V28.5ZM68.6178 28.5H68.6301V27H68.6178V28.5ZM68.6055 28.5H68.6178V27H68.6055V28.5ZM68.5933 28.5H68.6055V27H68.5933V28.5ZM68.5811 28.5H68.5933V27H68.5811V28.5ZM68.5688 28.5H68.5811V27H68.5688V28.5ZM68.5566 28.5H68.5688V27H68.5566V28.5ZM68.5444 28.5H68.5566V27H68.5444V28.5ZM68.5323 28.5H68.5444V27H68.5323V28.5ZM68.5201 28.5H68.5323V27H68.5201V28.5ZM68.5079 28.5H68.5201V27H68.5079V28.5ZM68.4958 28.5H68.5079V27H68.4958V28.5ZM68.4836 28.5H68.4958V27H68.4836V28.5ZM68.4715 28.5H68.4836V27H68.4715V28.5ZM68.4594 28.5H68.4715V27H68.4594V28.5ZM68.4473 28.5H68.4594V27H68.4473V28.5ZM68.4352 28.5H68.4473V27H68.4352V28.5ZM68.4231 28.5H68.4352V27H68.4231V28.5ZM68.411 28.5H68.4231V27H68.411V28.5ZM68.399 28.5H68.411V27H68.399V28.5ZM68.3869 28.5H68.399V27H68.3869V28.5ZM68.3749 28.5H68.3869V27H68.3749V28.5ZM68.3629 28.5H68.3749V27H68.3629V28.5ZM68.3509 28.5H68.3629V27H68.3509V28.5ZM68.3389 28.5H68.3509V27H68.3389V28.5ZM68.3269 28.5H68.3389V27H68.3269V28.5ZM68.3149 28.5H68.3269V27H68.3149V28.5ZM68.3029 28.5H68.3149V27H68.3029V28.5ZM68.291 28.5H68.3029V27H68.291V28.5ZM68.279 28.5H68.291V27H68.279V28.5ZM68.2671 28.5H68.279V27H68.2671V28.5ZM68.2552 28.5H68.2671V27H68.2552V28.5ZM68.2432 28.5H68.2552V27H68.2432V28.5ZM68.2313 28.5H68.2432V27H68.2313V28.5ZM68.2195 28.5H68.2313V27H68.2195V28.5ZM68.2076 28.5H68.2195V27H68.2076V28.5ZM68.1957 28.5H68.2076V27H68.1957V28.5ZM68.1839 28.5H68.1957V27H68.1839V28.5ZM68.172 28.5H68.1839V27H68.172V28.5ZM68.1602 28.5H68.172V27H68.1602V28.5ZM68.1484 28.5H68.1602V27H68.1484V28.5ZM68.1366 28.5H68.1484V27H68.1366V28.5ZM68.1248 28.5H68.1366V27H68.1248V28.5ZM68.113 28.5H68.1248V27H68.113V28.5ZM68.1012 28.5H68.113V27H68.1012V28.5ZM68.0894 28.5H68.1012V27H68.0894V28.5ZM68.0777 28.5H68.0894V27H68.0777V28.5ZM68.066 28.5H68.0777V27H68.066V28.5ZM68.0542 28.5H68.066V27H68.0542V28.5ZM68.0425 28.5H68.0542V27H68.0425V28.5ZM68.0308 28.5H68.0425V27H68.0308V28.5ZM68.0191 28.5H68.0308V27H68.0191V28.5ZM68.0074 28.5H68.0191V27H68.0074V28.5ZM67.9958 28.5H68.0074V27H67.9958V28.5ZM67.9841 28.5H67.9958V27H67.9841V28.5ZM67.9724 28.5H67.9841V27H67.9724V28.5ZM67.9608 28.5H67.9724V27H67.9608V28.5ZM67.9492 28.5H67.9608V27H67.9492V28.5ZM67.9376 28.5H67.9492V27H67.9376V28.5ZM67.926 28.5H67.9376V27H67.926V28.5ZM67.9144 28.5H67.926V27H67.9144V28.5ZM67.9028 28.5H67.9144V27H67.9028V28.5ZM67.8912 28.5H67.9028V27H67.8912V28.5ZM67.8797 28.5H67.8912V27H67.8797V28.5ZM67.8681 28.5H67.8797V27H67.8681V28.5ZM67.8566 28.5H67.8681V27H67.8566V28.5ZM67.8451 28.5H67.8566V27H67.8451V28.5ZM67.8336 28.5H67.8451V27H67.8336V28.5ZM67.8221 28.5H67.8336V27H67.8221V28.5ZM67.8106 28.5H67.8221V27H67.8106V28.5ZM67.7991 28.5H67.8106V27H67.7991V28.5ZM67.7876 28.5H67.7991V27H67.7876V28.5ZM67.7762 28.5H67.7876V27H67.7762V28.5ZM67.7647 28.5H67.7762V27H67.7647V28.5ZM67.7533 28.5H67.7647V27H67.7533V28.5ZM67.7419 28.5H67.7533V27H67.7419V28.5ZM67.7305 28.5H67.7419V27H67.7305V28.5ZM67.7191 28.5H67.7305V27H67.7191V28.5ZM67.7077 28.5H67.7191V27H67.7077V28.5ZM67.6963 28.5H67.7077V27H67.6963V28.5ZM67.6849 28.5H67.6963V27H67.6849V28.5ZM67.6736 28.5H67.6849V27H67.6736V28.5ZM67.6622 28.5H67.6736V27H67.6622V28.5ZM67.6509 28.5H67.6622V27H67.6509V28.5ZM67.6396 28.5H67.6509V27H67.6396V28.5ZM67.6283 28.5H67.6396V27H67.6283V28.5ZM67.617 28.5H67.6283V27H67.617V28.5ZM67.6057 28.5H67.617V27H67.6057V28.5ZM67.5944 28.5H67.6057V27H67.5944V28.5ZM67.5832 28.5H67.5944V27H67.5832V28.5ZM67.5719 28.5H67.5832V27H67.5719V28.5ZM67.5607 28.5H67.5719V27H67.5607V28.5ZM67.5495 28.5H67.5607V27H67.5495V28.5ZM67.5383 28.5H67.5495V27H67.5383V28.5ZM67.5271 28.5H67.5383V27H67.5271V28.5ZM67.5159 28.5H67.5271V27H67.5159V28.5ZM67.5047 28.5H67.5159V27H67.5047V28.5ZM67.4935 28.5H67.5047V27H67.4935V28.5ZM67.4824 28.5H67.4935V27H67.4824V28.5ZM67.4712 28.5H67.4824V27H67.4712V28.5ZM67.4601 28.5H67.4712V27H67.4601V28.5ZM67.4489 28.5H67.4601V27H67.4489V28.5ZM67.4378 28.5H67.4489V27H67.4378V28.5ZM67.4267 28.5H67.4378V27H67.4267V28.5ZM67.4156 28.5H67.4267V27H67.4156V28.5ZM67.4046 28.5H67.4156V27H67.4046V28.5ZM67.3935 28.5H67.4046V27H67.3935V28.5ZM67.3824 28.5H67.3935V27H67.3824V28.5ZM67.3714 28.5H67.3824V27H67.3714V28.5ZM67.3604 28.5H67.3714V27H67.3604V28.5ZM67.3494 28.5H67.3604V27H67.3494V28.5ZM67.3383 28.5H67.3494V27H67.3383V28.5ZM67.3273 28.5H67.3383V27H67.3273V28.5ZM67.3164 28.5H67.3273V27H67.3164V28.5ZM67.3054 28.5H67.3164V27H67.3054V28.5ZM67.2944 28.5H67.3054V27H67.2944V28.5ZM67.2835 28.5H67.2944V27H67.2835V28.5ZM67.2725 28.5H67.2835V27H67.2725V28.5ZM67.2616 28.5H67.2725V27H67.2616V28.5ZM67.2507 28.5H67.2616V27H67.2507V28.5ZM67.2398 28.5H67.2507V27H67.2398V28.5ZM67.2289 28.5H67.2398V27H67.2289V28.5ZM67.218 28.5H67.2289V27H67.218V28.5ZM67.2071 28.5H67.218V27H67.2071V28.5ZM67.1963 28.5H67.2071V27H67.1963V28.5ZM67.1854 28.5H67.1963V27H67.1854V28.5ZM67.1746 28.5H67.1854V27H67.1746V28.5ZM67.1637 28.5H67.1746V27H67.1637V28.5ZM67.1529 28.5H67.1637V27H67.1529V28.5ZM67.1421 28.5H67.1529V27H67.1421V28.5ZM67.1313 28.5H67.1421V27H67.1313V28.5ZM67.1206 28.5H67.1313V27H67.1206V28.5ZM67.1098 28.5H67.1206V27H67.1098V28.5ZM67.099 28.5H67.1098V27H67.099V28.5ZM67.0883 28.5H67.099V27H67.0883V28.5ZM67.0775 28.5H67.0883V27H67.0775V28.5ZM67.0668 28.5H67.0775V27H67.0668V28.5ZM67.0561 28.5H67.0668V27H67.0561V28.5ZM67.0454 28.5H67.0561V27H67.0454V28.5ZM67.0347 28.5H67.0454V27H67.0347V28.5ZM67.024 28.5H67.0347V27H67.024V28.5ZM67.0134 28.5H67.024V27H67.0134V28.5ZM67.0027 28.5H67.0134V27H67.0027V28.5ZM66.9921 28.5H67.0027V27H66.9921V28.5ZM66.9814 28.5H66.9921V27H66.9814V28.5ZM66.9708 28.5H66.9814V27H66.9708V28.5ZM66.9602 28.5H66.9708V27H66.9602V28.5ZM66.9496 28.5H66.9602V27H66.9496V28.5ZM66.939 28.5H66.9496V27H66.939V28.5ZM66.9284 28.5H66.939V27H66.9284V28.5ZM66.9179 28.5H66.9284V27H66.9179V28.5ZM66.9073 28.5H66.9179V27H66.9073V28.5ZM66.8968 28.5H66.9073V27H66.8968V28.5ZM66.8863 28.5H66.8968V27H66.8863V28.5ZM66.8757 28.5H66.8863V27H66.8757V28.5ZM66.8652 28.5H66.8757V27H66.8652V28.5ZM66.8547 28.5H66.8652V27H66.8547V28.5ZM66.8442 28.5H66.8547V27H66.8442V28.5ZM66.8338 28.5H66.8442V27H66.8338V28.5ZM66.8233 28.5H66.8338V27H66.8233V28.5ZM66.8129 28.5H66.8233V27H66.8129V28.5ZM66.8024 28.5H66.8129V27H66.8024V28.5ZM66.792 28.5H66.8024V27H66.792V28.5ZM66.7816 28.5H66.792V27H66.7816V28.5ZM66.7712 28.5H66.7816V27H66.7712V28.5ZM66.7608 28.5H66.7712V27H66.7608V28.5ZM66.7504 28.5H66.7608V27H66.7504V28.5ZM66.74 28.5H66.7504V27H66.74V28.5ZM66.7297 28.5H66.74V27H66.7297V28.5ZM66.7193 28.5H66.7297V27H66.7193V28.5ZM66.709 28.5H66.7193V27H66.709V28.5ZM66.6987 28.5H66.709V27H66.6987V28.5ZM66.6883 28.5H66.6987V27H66.6883V28.5ZM66.678 28.5H66.6883V27H66.678V28.5ZM66.6678 28.5H66.678V27H66.6678V28.5ZM66.6575 28.5H66.6678V27H66.6575V28.5ZM66.6472 28.5H66.6575V27H66.6472V28.5ZM66.637 28.5H66.6472V27H66.637V28.5ZM66.6267 28.5H66.637V27H66.6267V28.5ZM66.6165 28.5H66.6267V27H66.6165V28.5ZM66.6063 28.5H66.6165V27H66.6063V28.5ZM66.596 28.5H66.6063V27H66.596V28.5ZM66.5858 28.5H66.596V27H66.5858V28.5Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "52.8711", y: "38.5703", width: "60.58", height: "60.58", rx: "1.25", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M90.7256 42.7002C90.7256 42.1479 91.1733 41.7002 91.7256 41.7002H109.321C109.874 41.7002 110.321 42.1479 110.321 42.7002V95.0202C110.321 95.5725 109.874 96.0202 109.321 96.0202H91.7256C91.1733 96.0202 90.7256 95.5725 90.7256 95.0202V42.7002Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M67.6409 54.3096C68.6964 54.3096 69.7027 54.5203 70.6201 54.902C70.8824 55.0112 71.2321 55.2065 71.5477 55.395C71.9995 55.665 72.1356 56.2476 71.8738 56.7041L65.1497 68.4273C64.8863 68.8865 64.3102 69.0618 63.848 68.8036C63.4887 68.6029 63.0946 68.367 62.8457 68.1711C61.0402 66.7503 59.8809 64.5453 59.8809 62.0696C59.8809 57.7838 63.3551 54.3096 67.6409 54.3096Z", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M61.3941 83.6304C60.4334 83.6304 59.8318 82.5918 60.3097 81.7585L75.7721 54.7985C76.2524 53.961 77.4604 53.961 77.9407 54.7985L86.148 69.1084C86.6111 69.9159 87.7628 69.952 88.2755 69.1751L92.3031 63.0726C92.7972 62.324 93.8956 62.3241 94.3897 63.0726L106.678 81.6918C107.227 82.5229 106.631 83.6304 105.635 83.6304H61.3941Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" })); const Planet = ({ width = 152, height = 169 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 169", version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Symbols", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Group", transform: "translate(2.000000, 2.000000)", stroke: "#3B3552", strokeWidth: "3" }, /*#__PURE__*/React__namespace.default.createElement("path", { d: "M74,117.371134 L74,158.723567 C74,162.037275 71.3137085,164.723567 68,164.723567 C66.9452118,164.723567 65.9090627,164.445504 64.995996,163.917406 L6.67495026,130.185774 L6.67495026,130.185774 C2.54398439,127.796512 1.42108547e-14,123.386278 1.42108547e-14,118.614125 L1.42108547e-14,48.436129 C1.42108547e-14,43.6639756 2.54398439,39.2537412 6.67495026,36.8644799 L67.3072083,1.79609278 C71.4477337,-0.598697595 76.5522663,-0.598697595 80.6927917,1.79609278 L141.32505,36.8644799 C145.456016,39.2537412 148,43.6639756 148,48.436129 L148,118.614125 C148,123.386278 145.456016,127.796512 141.32505,130.185774 L92.2812226,158.551663", id: "Path", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M108.882866,90.7418658 C109.714261,87.6976379 110.158112,84.4934359 110.158112,81.185567 C110.158112,61.2008302 93.9572813,45 73.9725445,45 C53.9878077,45 37.7869775,61.2008302 37.7869775,81.185567 C37.7869775,97.3610095 48.4003337,111.05757 63.0430857,115.691287", id: "Path", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M73.9725445,117.371134 C77.5908988,117.371134 81.0852119,116.840051 84.3817866,115.851582 C89.8928309,114.19911 94.8512468,111.268362 98.9127122,107.40366", id: "Path", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("circle", { id: "Oval-Copy", fillOpacity: "0.196268575", fill: "#3040D6", cx: "104.127184", cy: "99.2783505", r: "9.64948454" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M120.255984,85.4659665 C128.43855,89.8418956 133.002057,93.9015871 132.226834,96.7947568 C131.38817,99.9246931 124.455699,101.112837 113.853361,100.515516", id: "Path", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M94.0573111,98.0477535 C86.8513781,96.7649447 79.0016836,95.0204726 70.8507066,92.8364249 C38.6777508,84.2157074 13.9941115,72.0109683 15.718255,65.5763772 C16.4982546,62.6653791 22.5493576,61.4340187 31.9215354,61.7565326", id: "Path", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "96.5", y1: "22.5", x2: "96.5", y2: "35.5278784", id: "Line-6", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "96.5", y1: "22.5", x2: "96.5", y2: "35.5278784", id: "Line-6-Copy", strokeLinecap: "round", transform: "translate(96.500000, 29.000000) rotate(-270.000000) translate(-96.500000, -29.000000) " }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "38.5", y1: "38.3", x2: "38.5", y2: "46.1167271", id: "Line-6", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "38.4916365", y1: "38.2916365", x2: "38.4916365", y2: "46.1083635", id: "Line-6-Copy", strokeLinecap: "round", transform: "translate(38.491636, 42.200000) rotate(-270.000000) translate(-38.491636, -42.200000) " }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "98", y1: "122.266667", x2: "98", y2: "129.214868", id: "Line-6", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "97.9925658", y1: "122.259232", x2: "97.9925658", y2: "129.207434", id: "Line-6-Copy", strokeLinecap: "round", transform: "translate(97.992566, 125.733333) rotate(-270.000000) translate(-97.992566, -125.733333) " }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "40.5", y1: "122.433333", x2: "40.5", y2: "133.724161", id: "Line-6", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "40.4879193", y1: "122.421253", x2: "40.4879193", y2: "133.712081", id: "Line-6-Copy", strokeLinecap: "round", transform: "translate(40.487919, 128.066667) rotate(-270.000000) translate(-40.487919, -128.066667) " })))); const Plug = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "60.1705", cy: "51.3659", r: "14.3659", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M58.7803 76.854H51.3656", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M30.0488 76.854H18", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M40.2441 43.4883L34.6916 71.8064C34.207 74.2774 36.0988 76.5761 38.6168 76.5761H41.8715C44.3895 76.5761 46.2812 78.8748 45.7967 81.3457L40.2441 109.664", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "85.4819", y: "37.75", width: "22.5976", height: "78.2073", rx: "3.25", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M91.5 85.2917V98.7083", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M91.5 103.083V106.917", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M105.527 32.75H104.777V33.5H105.527V32.75ZM105.527 31.25V30.5H104.777V31.25H105.527ZM114.277 44.787V45.537H115.027V44.787H114.277ZM112.777 44.787H112.027V45.537H112.777V44.787ZM112.777 49.1606V48.4106H112.027V49.1606H112.777ZM114.277 49.1606H115.027V48.4106H114.277V49.1606ZM114.277 54.4693V55.2193H115.027V54.4693H114.277ZM112.777 54.4693H112.027V55.2193H112.777V54.4693ZM105.527 33.5C109.117 33.5 112.027 36.4101 112.027 40H113.527C113.527 35.5817 109.945 32 105.527 32V33.5ZM104.777 31.25V32.75H106.277V31.25H104.777ZM115.027 40C115.027 34.7533 110.774 30.5 105.527 30.5V32C109.945 32 113.527 35.5817 113.527 40H115.027ZM115.027 40.0125V40H113.527V40.0125H115.027ZM115.027 40.0249V40.0125H113.527V40.0249H115.027ZM115.027 40.0373V40.0249H113.527V40.0373H115.027ZM115.027 40.0498V40.0373H113.527V40.0498H115.027ZM115.027 40.0622V40.0498H113.527V40.0622H115.027ZM115.027 40.0746V40.0622H113.527V40.0746H115.027ZM115.027 40.087V40.0746H113.527V40.087H115.027ZM115.027 40.0993V40.087H113.527V40.0993H115.027ZM115.027 40.1117V40.0993H113.527V40.1117H115.027ZM115.027 40.1241V40.1117H113.527V40.1241H115.027ZM115.027 40.1364V40.1241H113.527V40.1364H115.027ZM115.027 40.1487V40.1364H113.527V40.1487H115.027ZM115.027 40.161V40.1487H113.527V40.161H115.027ZM115.027 40.1733V40.161H113.527V40.1733H115.027ZM115.027 40.1856V40.1733H113.527V40.1856H115.027ZM115.027 40.1979V40.1856H113.527V40.1979H115.027ZM115.027 40.2102V40.1979H113.527V40.2102H115.027ZM115.027 40.2224V40.2102H113.527V40.2224H115.027ZM115.027 40.2347V40.2224H113.527V40.2347H115.027ZM115.027 40.2469V40.2347H113.527V40.2469H115.027ZM115.027 40.2591V40.2469H113.527V40.2591H115.027ZM115.027 40.2713V40.2591H113.527V40.2713H115.027ZM115.027 40.2835V40.2713H113.527V40.2835H115.027ZM115.027 40.2957V40.2835H113.527V40.2957H115.027ZM115.027 40.3078V40.2957H113.527V40.3078H115.027ZM115.027 40.32V40.3078H113.527V40.32H115.027ZM115.027 40.3321V40.32H113.527V40.3321H115.027ZM115.027 40.3443V40.3321H113.527V40.3443H115.027ZM115.027 40.3564V40.3443H113.527V40.3564H115.027ZM115.027 40.3685V40.3564H113.527V40.3685H115.027ZM115.027 40.3806V40.3685H113.527V40.3806H115.027ZM115.027 40.3927V40.3806H113.527V40.3927H115.027ZM115.027 40.4048V40.3927H113.527V40.4048H115.027ZM115.027 40.4168V40.4048H113.527V40.4168H115.027ZM115.027 40.4289V40.4168H113.527V40.4289H115.027ZM115.027 40.4409V40.4289H113.527V40.4409H115.027ZM115.027 40.4529V40.4409H113.527V40.4529H115.027ZM115.027 40.4649V40.4529H113.527V40.4649H115.027ZM115.027 40.4769V40.4649H113.527V40.4769H115.027ZM115.027 40.4889V40.4769H113.527V40.4889H115.027ZM115.027 40.5009V40.4889H113.527V40.5009H115.027ZM115.027 40.5128V40.5009H113.527V40.5128H115.027ZM115.027 40.5248V40.5128H113.527V40.5248H115.027ZM115.027 40.5367V40.5248H113.527V40.5367H115.027ZM115.027 40.5486V40.5367H113.527V40.5486H115.027ZM115.027 40.5606V40.5486H113.527V40.5606H115.027ZM115.027 40.5725V40.5606H113.527V40.5725H115.027ZM115.027 40.5843V40.5725H113.527V40.5843H115.027ZM115.027 40.5962V40.5843H113.527V40.5962H115.027ZM115.027 40.6081V40.5962H113.527V40.6081H115.027ZM115.027 40.6199V40.6081H113.527V40.6199H115.027ZM115.027 40.6318V40.6199H113.527V40.6318H115.027ZM115.027 40.6436V40.6318H113.527V40.6436H115.027ZM115.027 40.6554V40.6436H113.527V40.6554H115.027ZM115.027 40.6672V40.6554H113.527V40.6672H115.027ZM115.027 40.679V40.6672H113.527V40.679H115.027ZM115.027 40.6908V40.679H113.527V40.6908H115.027ZM115.027 40.7026V40.6908H113.527V40.7026H115.027ZM115.027 40.7143V40.7026H113.527V40.7143H115.027ZM115.027 40.7261V40.7143H113.527V40.7261H115.027ZM115.027 40.7378V40.7261H113.527V40.7378H115.027ZM115.027 40.7495V40.7378H113.527V40.7495H115.027ZM115.027 40.7612V40.7495H113.527V40.7612H115.027ZM115.027 40.7729V40.7612H113.527V40.7729H115.027ZM115.027 40.7846V40.7729H113.527V40.7846H115.027ZM115.027 40.7962V40.7846H113.527V40.7962H115.027ZM115.027 40.8079V40.7962H113.527V40.8079H115.027ZM115.027 40.8195V40.8079H113.527V40.8195H115.027ZM115.027 40.8312V40.8195H113.527V40.8312H115.027ZM115.027 40.8428V40.8312H113.527V40.8428H115.027ZM115.027 40.8544V40.8428H113.527V40.8544H115.027ZM115.027 40.866V40.8544H113.527V40.866H115.027ZM115.027 40.8776V40.866H113.527V40.8776H115.027ZM115.027 40.8892V40.8776H113.527V40.8892H115.027ZM115.027 40.9007V40.8892H113.527V40.9007H115.027ZM115.027 40.9123V40.9007H113.527V40.9123H115.027ZM115.027 40.9238V40.9123H113.527V40.9238H115.027ZM115.027 40.9353V40.9238H113.527V40.9353H115.027ZM115.027 40.9468V40.9353H113.527V40.9468H115.027ZM115.027 40.9583V40.9468H113.527V40.9583H115.027ZM115.027 40.9698V40.9583H113.527V40.9698H115.027ZM115.027 40.9813V40.9698H113.527V40.9813H115.027ZM115.027 40.9928V40.9813H113.527V40.9928H115.027ZM115.027 41.0042V40.9928H113.527V41.0042H115.027ZM115.027 41.0156V41.0042H113.527V41.0156H115.027ZM115.027 41.0271V41.0156H113.527V41.0271H115.027ZM115.027 41.0385V41.0271H113.527V41.0385H115.027ZM115.027 41.0499V41.0385H113.527V41.0499H115.027ZM115.027 41.0613V41.0499H113.527V41.0613H115.027ZM115.027 41.0726V41.0613H113.527V41.0726H115.027ZM115.027 41.084V41.0726H113.527V41.084H115.027ZM115.027 41.0954V41.084H113.527V41.0954H115.027ZM115.027 41.1067V41.0954H113.527V41.1067H115.027ZM115.027 41.118V41.1067H113.527V41.118H115.027ZM115.027 41.1293V41.118H113.527V41.1293H115.027ZM115.027 41.1406V41.1293H113.527V41.1406H115.027ZM115.027 41.1519V41.1406H113.527V41.1519H115.027ZM115.027 41.1632V41.1519H113.527V41.1632H115.027ZM115.027 41.1745V41.1632H113.527V41.1745H115.027ZM115.027 41.1857V41.1745H113.527V41.1857H115.027ZM115.027 41.197V41.1857H113.527V41.197H115.027ZM115.027 41.2082V41.197H113.527V41.2082H115.027ZM115.027 41.2194V41.2082H113.527V41.2194H115.027ZM115.027 41.2306V41.2194H113.527V41.2306H115.027ZM115.027 41.2418V41.2306H113.527V41.2418H115.027ZM115.027 41.253V41.2418H113.527V41.253H115.027ZM115.027 41.2642V41.253H113.527V41.2642H115.027ZM115.027 41.2753V41.2642H113.527V41.2753H115.027ZM115.027 41.2865V41.2753H113.527V41.2865H115.027ZM115.027 41.2976V41.2865H113.527V41.2976H115.027ZM115.027 41.3087V41.2976H113.527V41.3087H115.027ZM115.027 41.3198V41.3087H113.527V41.3198H115.027ZM115.027 41.3309V41.3198H113.527V41.3309H115.027ZM115.027 41.342V41.3309H113.527V41.342H115.027ZM115.027 41.3531V41.342H113.527V41.3531H115.027ZM115.027 41.3642V41.3531H113.527V41.3642H115.027ZM115.027 41.3752V41.3642H113.527V41.3752H115.027ZM115.027 41.3862V41.3752H113.527V41.3862H115.027ZM115.027 41.3973V41.3862H113.527V41.3973H115.027ZM115.027 41.4083V41.3973H113.527V41.4083H115.027ZM115.027 41.4193V41.4083H113.527V41.4193H115.027ZM115.027 41.4303V41.4193H113.527V41.4303H115.027ZM115.027 41.4412V41.4303H113.527V41.4412H115.027ZM115.027 41.4522V41.4412H113.527V41.4522H115.027ZM115.027 41.4632V41.4522H113.527V41.4632H115.027ZM115.027 41.4741V41.4632H113.527V41.4741H115.027ZM115.027 41.485V41.4741H113.527V41.485H115.027ZM115.027 41.4959V41.485H113.527V41.4959H115.027ZM115.027 41.5068V41.4959H113.527V41.5068H115.027ZM115.027 41.5177V41.5068H113.527V41.5177H115.027ZM115.027 41.5286V41.5177H113.527V41.5286H115.027ZM115.027 41.5395V41.5286H113.527V41.5395H115.027ZM115.027 41.5503V41.5395H113.527V41.5503H115.027ZM115.027 41.5612V41.5503H113.527V41.5612H115.027ZM115.027 41.572V41.5612H113.527V41.572H115.027ZM115.027 41.5828V41.572H113.527V41.5828H115.027ZM115.027 41.5936V41.5828H113.527V41.5936H115.027ZM115.027 41.6044V41.5936H113.527V41.6044H115.027ZM115.027 41.6152V41.6044H113.527V41.6152H115.027ZM115.027 41.6259V41.6152H113.527V41.6259H115.027ZM115.027 41.6367V41.6259H113.527V41.6367H115.027ZM115.027 41.6474V41.6367H113.527V41.6474H115.027ZM115.027 41.6582V41.6474H113.527V41.6582H115.027ZM115.027 41.6689V41.6582H113.527V41.6689H115.027ZM115.027 41.6796V41.6689H113.527V41.6796H115.027ZM115.027 41.6903V41.6796H113.527V41.6903H115.027ZM115.027 41.701V41.6903H113.527V41.701H115.027ZM115.027 41.7117V41.701H113.527V41.7117H115.027ZM115.027 41.7223V41.7117H113.527V41.7223H115.027ZM115.027 41.733V41.7223H113.527V41.733H115.027ZM115.027 41.7436V41.733H113.527V41.7436H115.027ZM115.027 41.7542V41.7436H113.527V41.7542H115.027ZM115.027 41.7648V41.7542H113.527V41.7648H115.027ZM115.027 41.7754V41.7648H113.527V41.7754H115.027ZM115.027 41.786V41.7754H113.527V41.786H115.027ZM115.027 41.7966V41.786H113.527V41.7966H115.027ZM115.027 41.8071V41.7966H113.527V41.8071H115.027ZM115.027 41.8177V41.8071H113.527V41.8177H115.027ZM115.027 41.8282V41.8177H113.527V41.8282H115.027ZM115.027 41.8387V41.8282H113.527V41.8387H115.027ZM115.027 41.8493V41.8387H113.527V41.8493H115.027ZM115.027 41.8598V41.8493H113.527V41.8598H115.027ZM115.027 41.8702V41.8598H113.527V41.8702H115.027ZM115.027 41.8807V41.8702H113.527V41.8807H115.027ZM115.027 41.8912V41.8807H113.527V41.8912H115.027ZM115.027 41.9016V41.8912H113.527V41.9016H115.027ZM115.027 41.9121V41.9016H113.527V41.9121H115.027ZM115.027 41.9225V41.9121H113.527V41.9225H115.027ZM115.027 41.9329V41.9225H113.527V41.9329H115.027ZM115.027 41.9433V41.9329H113.527V41.9433H115.027ZM115.027 41.9537V41.9433H113.527V41.9537H115.027ZM115.027 41.9641V41.9537H113.527V41.9641H115.027ZM115.027 41.9745V41.9641H113.527V41.9745H115.027ZM115.027 41.9848V41.9745H113.527V41.9848H115.027ZM115.027 41.9952V41.9848H113.527V41.9952H115.027ZM115.027 42.0055V41.9952H113.527V42.0055H115.027ZM115.027 42.0158V42.0055H113.527V42.0158H115.027ZM115.027 42.0261V42.0158H113.527V42.0261H115.027ZM115.027 42.0364V42.0261H113.527V42.0364H115.027ZM115.027 42.0467V42.0364H113.527V42.0467H115.027ZM115.027 42.0569V42.0467H113.527V42.0569H115.027ZM115.027 42.0672V42.0569H113.527V42.0672H115.027ZM115.027 42.0774V42.0672H113.527V42.0774H115.027ZM115.027 42.0877V42.0774H113.527V42.0877H115.027ZM115.027 42.0979V42.0877H113.527V42.0979H115.027ZM115.027 42.1081V42.0979H113.527V42.1081H115.027ZM115.027 42.1183V42.1081H113.527V42.1183H115.027ZM115.027 42.1285V42.1183H113.527V42.1285H115.027ZM115.027 42.1387V42.1285H113.527V42.1387H115.027ZM115.027 42.1488V42.1387H113.527V42.1488H115.027ZM115.027 42.159V42.1488H113.527V42.159H115.027ZM115.027 42.1691V42.159H113.527V42.1691H115.027ZM115.027 42.1792V42.1691H113.527V42.1792H115.027ZM115.027 42.1893V42.1792H113.527V42.1893H115.027ZM115.027 42.1994V42.1893H113.527V42.1994H115.027ZM115.027 42.2095V42.1994H113.527V42.2095H115.027ZM115.027 42.2196V42.2095H113.527V42.2196H115.027ZM115.027 42.2297V42.2196H113.527V42.2297H115.027ZM115.027 42.2397V42.2297H113.527V42.2397H115.027ZM115.027 42.2497V42.2397H113.527V42.2497H115.027ZM115.027 42.2598V42.2497H113.527V42.2598H115.027ZM115.027 42.2698V42.2598H113.527V42.2698H115.027ZM115.027 42.2798V42.2698H113.527V42.2798H115.027ZM115.027 42.2898V42.2798H113.527V42.2898H115.027ZM115.027 42.2997V42.2898H113.527V42.2997H115.027ZM115.027 42.3097V42.2997H113.527V42.3097H115.027ZM115.027 42.3197V42.3097H113.527V42.3197H115.027ZM115.027 42.3296V42.3197H113.527V42.3296H115.027ZM115.027 42.3395V42.3296H113.527V42.3395H115.027ZM115.027 42.3494V42.3395H113.527V42.3494H115.027ZM115.027 42.3593V42.3494H113.527V42.3593H115.027ZM115.027 42.3692V42.3593H113.527V42.3692H115.027ZM115.027 42.3791V42.3692H113.527V42.3791H115.027ZM115.027 42.389V42.3791H113.527V42.389H115.027ZM115.027 42.3988V42.389H113.527V42.3988H115.027ZM115.027 42.4087V42.3988H113.527V42.4087H115.027ZM115.027 42.4185V42.4087H113.527V42.4185H115.027ZM115.027 42.4283V42.4185H113.527V42.4283H115.027ZM115.027 42.4381V42.4283H113.527V42.4381H115.027ZM115.027 42.4479V42.4381H113.527V42.4479H115.027ZM115.027 42.4577V42.4479H113.527V42.4577H115.027ZM115.027 42.4675V42.4577H113.527V42.4675H115.027ZM115.027 42.4772V42.4675H113.527V42.4772H115.027ZM115.027 42.487V42.4772H113.527V42.487H115.027ZM115.027 42.4967V42.487H113.527V42.4967H115.027ZM115.027 42.5064V42.4967H113.527V42.5064H115.027ZM115.027 42.5161V42.5064H113.527V42.5161H115.027ZM115.027 42.5258V42.5161H113.527V42.5258H115.027ZM115.027 42.5355V42.5258H113.527V42.5355H115.027ZM115.027 42.5452V42.5355H113.527V42.5452H115.027ZM115.027 42.5549V42.5452H113.527V42.5549H115.027ZM115.027 42.5645V42.5549H113.527V42.5645H115.027ZM115.027 42.5741V42.5645H113.527V42.5741H115.027ZM115.027 42.5838V42.5741H113.527V42.5838H115.027ZM115.027 42.5934V42.5838H113.527V42.5934H115.027ZM115.027 42.603V42.5934H113.527V42.603H115.027ZM115.027 42.6126V42.603H113.527V42.6126H115.027ZM115.027 42.6221V42.6126H113.527V42.6221H115.027ZM115.027 42.6317V42.6221H113.527V42.6317H115.027ZM115.027 42.6413V42.6317H113.527V42.6413H115.027ZM115.027 42.6508V42.6413H113.527V42.6508H115.027ZM115.027 42.6603V42.6508H113.527V42.6603H115.027ZM115.027 42.6698V42.6603H113.527V42.6698H115.027ZM115.027 42.6793V42.6698H113.527V42.6793H115.027ZM115.027 42.6888V42.6793H113.527V42.6888H115.027ZM115.027 42.6983V42.6888H113.527V42.6983H115.027ZM115.027 42.7078V42.6983H113.527V42.7078H115.027ZM115.027 42.7172V42.7078H113.527V42.7172H115.027ZM115.027 42.7267V42.7172H113.527V42.7267H115.027ZM115.027 42.7361V42.7267H113.527V42.7361H115.027ZM115.027 42.7455V42.7361H113.527V42.7455H115.027ZM115.027 42.7549V42.7455H113.527V42.7549H115.027ZM115.027 42.7643V42.7549H113.527V42.7643H115.027ZM115.027 42.7737V42.7643H113.527V42.7737H115.027ZM115.027 42.783V42.7737H113.527V42.783H115.027ZM115.027 42.7924V42.783H113.527V42.7924H115.027ZM115.027 42.8017V42.7924H113.527V42.8017H115.027ZM115.027 42.8111V42.8017H113.527V42.8111H115.027ZM115.027 42.8204V42.8111H113.527V42.8204H115.027ZM115.027 42.8297V42.8204H113.527V42.8297H115.027ZM115.027 42.839V42.8297H113.527V42.839H115.027ZM115.027 42.8483V42.839H113.527V42.8483H115.027ZM115.027 42.8576V42.8483H113.527V42.8576H115.027ZM115.027 42.8668V42.8576H113.527V42.8668H115.027ZM115.027 42.8761V42.8668H113.527V42.8761H115.027ZM115.027 42.8853V42.8761H113.527V42.8853H115.027ZM115.027 42.8945V42.8853H113.527V42.8945H115.027ZM115.027 42.9037V42.8945H113.527V42.9037H115.027ZM115.027 42.9129V42.9037H113.527V42.9129H115.027ZM115.027 42.9221V42.9129H113.527V42.9221H115.027ZM115.027 42.9313V42.9221H113.527V42.9313H115.027ZM115.027 42.9404V42.9313H113.527V42.9404H115.027ZM115.027 42.9496V42.9404H113.527V42.9496H115.027ZM115.027 42.9587V42.9496H113.527V42.9587H115.027ZM115.027 42.9678V42.9587H113.527V42.9678H115.027ZM115.027 42.977V42.9678H113.527V42.977H115.027ZM115.027 42.9861V42.977H113.527V42.9861H115.027ZM115.027 42.9951V42.9861H113.527V42.9951H115.027ZM115.027 43.0042V42.9951H113.527V43.0042H115.027ZM115.027 43.0133V43.0042H113.527V43.0133H115.027ZM115.027 43.0223V43.0133H113.527V43.0223H115.027ZM115.027 43.0314V43.0223H113.527V43.0314H115.027ZM115.027 43.0404V43.0314H113.527V43.0404H115.027ZM115.027 43.0494V43.0404H113.527V43.0494H115.027ZM115.027 43.0584V43.0494H113.527V43.0584H115.027ZM115.027 43.0674V43.0584H113.527V43.0674H115.027ZM115.027 43.0764V43.0674H113.527V43.0764H115.027ZM115.027 43.0854V43.0764H113.527V43.0854H115.027ZM115.027 43.0943V43.0854H113.527V43.0943H115.027ZM115.027 43.1033V43.0943H113.527V43.1033H115.027ZM115.027 43.1122V43.1033H113.527V43.1122H115.027ZM115.027 43.1211V43.1122H113.527V43.1211H115.027ZM115.027 43.13V43.1211H113.527V43.13H115.027ZM115.027 43.1389V43.13H113.527V43.1389H115.027ZM115.027 43.1478V43.1389H113.527V43.1478H115.027ZM115.027 43.1566V43.1478H113.527V43.1566H115.027ZM115.027 43.1655V43.1566H113.527V43.1655H115.027ZM115.027 43.1743V43.1655H113.527V43.1743H115.027ZM115.027 43.1832V43.1743H113.527V43.1832H115.027ZM115.027 43.192V43.1832H113.527V43.192H115.027ZM115.027 43.2008V43.192H113.527V43.2008H115.027ZM115.027 43.2096V43.2008H113.527V43.2096H115.027ZM115.027 43.2184V43.2096H113.527V43.2184H115.027ZM115.027 43.2272V43.2184H113.527V43.2272H115.027ZM115.027 43.2359V43.2272H113.527V43.2359H115.027ZM115.027 43.2447V43.2359H113.527V43.2447H115.027ZM115.027 43.2534V43.2447H113.527V43.2534H115.027ZM115.027 43.2621V43.2534H113.527V43.2621H115.027ZM115.027 43.2708V43.2621H113.527V43.2708H115.027ZM115.027 43.2795V43.2708H113.527V43.2795H115.027ZM115.027 43.2882V43.2795H113.527V43.2882H115.027ZM115.027 43.2969V43.2882H113.527V43.2969H115.027ZM115.027 43.3056V43.2969H113.527V43.3056H115.027ZM115.027 43.3142V43.3056H113.527V43.3142H115.027ZM115.027 43.3228V43.3142H113.527V43.3228H115.027ZM115.027 43.3315V43.3228H113.527V43.3315H115.027ZM115.027 43.3401V43.3315H113.527V43.3401H115.027ZM115.027 43.3487V43.3401H113.527V43.3487H115.027ZM115.027 43.3573V43.3487H113.527V43.3573H115.027ZM115.027 43.3658V43.3573H113.527V43.3658H115.027ZM115.027 43.3744V43.3658H113.527V43.3744H115.027ZM115.027 43.383V43.3744H113.527V43.383H115.027ZM115.027 43.3915V43.383H113.527V43.3915H115.027ZM115.027 43.4V43.3915H113.527V43.4H115.027ZM115.027 43.4085V43.4H113.527V43.4085H115.027ZM115.027 43.417V43.4085H113.527V43.417H115.027ZM115.027 43.4255V43.417H113.527V43.4255H115.027ZM115.027 43.434V43.4255H113.527V43.434H115.027ZM115.027 43.4425V43.434H113.527V43.4425H115.027ZM115.027 43.4509V43.4425H113.527V43.4509H115.027ZM115.027 43.4594V43.4509H113.527V43.4594H115.027ZM115.027 43.4678V43.4594H113.527V43.4678H115.027ZM115.027 43.4762V43.4678H113.527V43.4762H115.027ZM115.027 43.4846V43.4762H113.527V43.4846H115.027ZM115.027 43.493V43.4846H113.527V43.493H115.027ZM115.027 43.5014V43.493H113.527V43.5014H115.027ZM115.027 43.5098V43.5014H113.527V43.5098H115.027ZM115.027 43.5181V43.5098H113.527V43.5181H115.027ZM115.027 43.5265V43.5181H113.527V43.5265H115.027ZM115.027 43.5348V43.5265H113.527V43.5348H115.027ZM115.027 43.5431V43.5348H113.527V43.5431H115.027ZM115.027 43.5514V43.5431H113.527V43.5514H115.027ZM115.027 43.5597V43.5514H113.527V43.5597H115.027ZM115.027 43.568V43.5597H113.527V43.568H115.027ZM115.027 43.5763V43.568H113.527V43.5763H115.027ZM115.027 43.5846V43.5763H113.527V43.5846H115.027ZM115.027 43.5928V43.5846H113.527V43.5928H115.027ZM115.027 43.601V43.5928H113.527V43.601H115.027ZM115.027 43.6093V43.601H113.527V43.6093H115.027ZM115.027 43.6175V43.6093H113.527V43.6175H115.027ZM115.027 43.6257V43.6175H113.527V43.6257H115.027ZM115.027 43.6339V43.6257H113.527V43.6339H115.027ZM115.027 43.642V43.6339H113.527V43.642H115.027ZM115.027 43.6502V43.642H113.527V43.6502H115.027ZM115.027 43.6584V43.6502H113.527V43.6584H115.027ZM115.027 43.6665V43.6584H113.527V43.6665H115.027ZM115.027 43.6746V43.6665H113.527V43.6746H115.027ZM115.027 43.6827V43.6746H113.527V43.6827H115.027ZM115.027 43.6908V43.6827H113.527V43.6908H115.027ZM115.027 43.6989V43.6908H113.527V43.6989H115.027ZM115.027 43.707V43.6989H113.527V43.707H115.027ZM115.027 43.7151V43.707H113.527V43.7151H115.027ZM115.027 43.7231V43.7151H113.527V43.7231H115.027ZM115.027 43.7312V43.7231H113.527V43.7312H115.027ZM115.027 43.7392V43.7312H113.527V43.7392H115.027ZM115.027 43.7472V43.7392H113.527V43.7472H115.027ZM115.027 43.7552V43.7472H113.527V43.7552H115.027ZM115.027 43.7632V43.7552H113.527V43.7632H115.027ZM115.027 43.7712V43.7632H113.527V43.7712H115.027ZM115.027 43.7791V43.7712H113.527V43.7791H115.027ZM115.027 43.7871V43.7791H113.527V43.7871H115.027ZM115.027 43.795V43.7871H113.527V43.795H115.027ZM115.027 43.803V43.795H113.527V43.803H115.027ZM115.027 43.8109V43.803H113.527V43.8109H115.027ZM115.027 43.8188V43.8109H113.527V43.8188H115.027ZM115.027 43.8267V43.8188H113.527V43.8267H115.027ZM115.027 43.8346V43.8267H113.527V43.8346H115.027ZM115.027 43.8425V43.8346H113.527V43.8425H115.027ZM115.027 43.8503V43.8425H113.527V43.8503H115.027ZM115.027 43.8582V43.8503H113.527V43.8582H115.027ZM115.027 43.866V43.8582H113.527V43.866H115.027ZM115.027 43.8738V43.866H113.527V43.8738H115.027ZM115.027 43.8816V43.8738H113.527V43.8816H115.027ZM115.027 43.8894V43.8816H113.527V43.8894H115.027ZM115.027 43.8972V43.8894H113.527V43.8972H115.027ZM115.027 43.905V43.8972H113.527V43.905H115.027ZM115.027 43.9127V43.905H113.527V43.9127H115.027ZM115.027 43.9205V43.9127H113.527V43.9205H115.027ZM115.027 43.9282V43.9205H113.527V43.9282H115.027ZM115.027 43.9359V43.9282H113.527V43.9359H115.027ZM115.027 43.9437V43.9359H113.527V43.9437H115.027ZM115.027 43.9514V43.9437H113.527V43.9514H115.027ZM115.027 43.959V43.9514H113.527V43.959H115.027ZM115.027 43.9667V43.959H113.527V43.9667H115.027ZM115.027 43.9744V43.9667H113.527V43.9744H115.027ZM115.027 43.982V43.9744H113.527V43.982H115.027ZM115.027 43.9897V43.982H113.527V43.9897H115.027ZM115.027 43.9973V43.9897H113.527V43.9973H115.027ZM115.027 44.0049V43.9973H113.527V44.0049H115.027ZM115.027 44.0125V44.0049H113.527V44.0125H115.027ZM115.027 44.0201V44.0125H113.527V44.0201H115.027ZM115.027 44.0277V44.0201H113.527V44.0277H115.027ZM115.027 44.0353V44.0277H113.527V44.0353H115.027ZM115.027 44.0428V44.0353H113.527V44.0428H115.027ZM115.027 44.0504V44.0428H113.527V44.0504H115.027ZM115.027 44.0579V44.0504H113.527V44.0579H115.027ZM115.027 44.0654V44.0579H113.527V44.0654H115.027ZM115.027 44.0729V44.0654H113.527V44.0729H115.027ZM115.027 44.0804V44.0729H113.527V44.0804H115.027ZM115.027 44.0879V44.0804H113.527V44.0879H115.027ZM115.027 44.0953V44.0879H113.527V44.0953H115.027ZM115.027 44.1028V44.0953H113.527V44.1028H115.027ZM115.027 44.1102V44.1028H113.527V44.1102H115.027ZM115.027 44.1177V44.1102H113.527V44.1177H115.027ZM115.027 44.1251V44.1177H113.527V44.1251H115.027ZM115.027 44.1325V44.1251H113.527V44.1325H115.027ZM115.027 44.1399V44.1325H113.527V44.1399H115.027ZM115.027 44.1473V44.1399H113.527V44.1473H115.027ZM115.027 44.1547V44.1473H113.527V44.1547H115.027ZM115.027 44.162V44.1547H113.527V44.162H115.027ZM115.027 44.1694V44.162H113.527V44.1694H115.027ZM115.027 44.1767V44.1694H113.527V44.1767H115.027ZM115.027 44.184V44.1767H113.527V44.184H115.027ZM115.027 44.1913V44.184H113.527V44.1913H115.027ZM115.027 44.1986V44.1913H113.527V44.1986H115.027ZM115.027 44.2059V44.1986H113.527V44.2059H115.027ZM115.027 44.2132V44.2059H113.527V44.2132H115.027ZM115.027 44.2205V44.2132H113.527V44.2205H115.027ZM115.027 44.2277V44.2205H113.527V44.2277H115.027ZM115.027 44.2349V44.2277H113.527V44.2349H115.027ZM115.027 44.2422V44.2349H113.527V44.2422H115.027ZM115.027 44.2494V44.2422H113.527V44.2494H115.027ZM115.027 44.2566V44.2494H113.527V44.2566H115.027ZM115.027 44.2638V44.2566H113.527V44.2638H115.027ZM115.027 44.2709V44.2638H113.527V44.2709H115.027ZM115.027 44.2781V44.2709H113.527V44.2781H115.027ZM115.027 44.2853V44.2781H113.527V44.2853H115.027ZM115.027 44.2924V44.2853H113.527V44.2924H115.027ZM115.027 44.2995V44.2924H113.527V44.2995H115.027ZM115.027 44.3066V44.2995H113.527V44.3066H115.027ZM115.027 44.3137V44.3066H113.527V44.3137H115.027ZM115.027 44.3208V44.3137H113.527V44.3208H115.027ZM115.027 44.3279V44.3208H113.527V44.3279H115.027ZM115.027 44.335V44.3279H113.527V44.335H115.027ZM115.027 44.342V44.335H113.527V44.342H115.027ZM115.027 44.3491V44.342H113.527V44.3491H115.027ZM115.027 44.3561V44.3491H113.527V44.3561H115.027ZM115.027 44.3631V44.3561H113.527V44.3631H115.027ZM115.027 44.3701V44.3631H113.527V44.3701H115.027ZM115.027 44.3771V44.3701H113.527V44.3771H115.027ZM115.027 44.3841V44.3771H113.527V44.3841H115.027ZM115.027 44.3911V44.3841H113.527V44.3911H115.027ZM115.027 44.398V44.3911H113.527V44.398H115.027ZM115.027 44.405V44.398H113.527V44.405H115.027ZM115.027 44.4119V44.405H113.527V44.4119H115.027ZM115.027 44.4188V44.4119H113.527V44.4188H115.027ZM115.027 44.4257V44.4188H113.527V44.4257H115.027ZM115.027 44.4326V44.4257H113.527V44.4326H115.027ZM115.027 44.4395V44.4326H113.527V44.4395H115.027ZM115.027 44.4464V44.4395H113.527V44.4464H115.027ZM115.027 44.4533V44.4464H113.527V44.4533H115.027ZM115.027 44.4601V44.4533H113.527V44.4601H115.027ZM115.027 44.4669V44.4601H113.527V44.4669H115.027ZM115.027 44.4738V44.4669H113.527V44.4738H115.027ZM115.027 44.4806V44.4738H113.527V44.4806H115.027ZM115.027 44.4874V44.4806H113.527V44.4874H115.027ZM115.027 44.4942V44.4874H113.527V44.4942H115.027ZM115.027 44.5009V44.4942H113.527V44.5009H115.027ZM115.027 44.5077V44.5009H113.527V44.5077H115.027ZM115.027 44.5145V44.5077H113.527V44.5145H115.027ZM115.027 44.5212V44.5145H113.527V44.5212H115.027ZM115.027 44.5279V44.5212H113.527V44.5279H115.027ZM115.027 44.5346V44.5279H113.527V44.5346H115.027ZM115.027 44.5413V44.5346H113.527V44.5413H115.027ZM115.027 44.548V44.5413H113.527V44.548H115.027ZM115.027 44.5547V44.548H113.527V44.5547H115.027ZM115.027 44.5614V44.5547H113.527V44.5614H115.027ZM115.027 44.568V44.5614H113.527V44.568H115.027ZM115.027 44.5747V44.568H113.527V44.5747H115.027ZM115.027 44.5813V44.5747H113.527V44.5813H115.027ZM115.027 44.5879V44.5813H113.527V44.5879H115.027ZM115.027 44.5945V44.5879H113.527V44.5945H115.027ZM115.027 44.6011V44.5945H113.527V44.6011H115.027ZM115.027 44.6077V44.6011H113.527V44.6077H115.027ZM115.027 44.6142V44.6077H113.527V44.6142H115.027ZM115.027 44.6208V44.6142H113.527V44.6208H115.027ZM115.027 44.6273V44.6208H113.527V44.6273H115.027ZM115.027 44.6339V44.6273H113.527V44.6339H115.027ZM115.027 44.6404V44.6339H113.527V44.6404H115.027ZM115.027 44.6469V44.6404H113.527V44.6469H115.027ZM115.027 44.6534V44.6469H113.527V44.6534H115.027ZM115.027 44.6599V44.6534H113.527V44.6599H115.027ZM115.027 44.6664V44.6599H113.527V44.6664H115.027ZM115.027 44.6728V44.6664H113.527V44.6728H115.027ZM115.027 44.6793V44.6728H113.527V44.6793H115.027ZM115.027 44.6857V44.6793H113.527V44.6857H115.027ZM115.027 44.6921V44.6857H113.527V44.6921H115.027ZM115.027 44.6985V44.6921H113.527V44.6985H115.027ZM115.027 44.7049V44.6985H113.527V44.7049H115.027ZM115.027 44.7113V44.7049H113.527V44.7113H115.027ZM115.027 44.7177V44.7113H113.527V44.7177H115.027ZM115.027 44.724V44.7177H113.527V44.724H115.027ZM115.027 44.7304V44.724H113.527V44.7304H115.027ZM115.027 44.7367V44.7304H113.527V44.7367H115.027ZM115.027 44.743V44.7367H113.527V44.743H115.027ZM115.027 44.7494V44.743H113.527V44.7494H115.027ZM115.027 44.7557V44.7494H113.527V44.7557H115.027ZM115.027 44.7619V44.7557H113.527V44.7619H115.027ZM115.027 44.7682V44.7619H113.527V44.7682H115.027ZM115.027 44.7745V44.7682H113.527V44.7745H115.027ZM115.027 44.7807V44.7745H113.527V44.7807H115.027ZM115.027 44.787V44.7807H113.527V44.787H115.027ZM112.777 45.537H114.277V44.037H112.777V45.537ZM112.027 44.7807V44.787H113.527V44.7807H112.027ZM112.027 44.7745V44.7807H113.527V44.7745H112.027ZM112.027 44.7682V44.7745H113.527V44.7682H112.027ZM112.027 44.7619V44.7682H113.527V44.7619H112.027ZM112.027 44.7557V44.7619H113.527V44.7557H112.027ZM112.027 44.7494V44.7557H113.527V44.7494H112.027ZM112.027 44.743V44.7494H113.527V44.743H112.027ZM112.027 44.7367V44.743H113.527V44.7367H112.027ZM112.027 44.7304V44.7367H113.527V44.7304H112.027ZM112.027 44.724V44.7304H113.527V44.724H112.027ZM112.027 44.7177V44.724H113.527V44.7177H112.027ZM112.027 44.7113V44.7177H113.527V44.7113H112.027ZM112.027 44.7049V44.7113H113.527V44.7049H112.027ZM112.027 44.6985V44.7049H113.527V44.6985H112.027ZM112.027 44.6921V44.6985H113.527V44.6921H112.027ZM112.027 44.6857V44.6921H113.527V44.6857H112.027ZM112.027 44.6793V44.6857H113.527V44.6793H112.027ZM112.027 44.6728V44.6793H113.527V44.6728H112.027ZM112.027 44.6664V44.6728H113.527V44.6664H112.027ZM112.027 44.6599V44.6664H113.527V44.6599H112.027ZM112.027 44.6534V44.6599H113.527V44.6534H112.027ZM112.027 44.6469V44.6534H113.527V44.6469H112.027ZM112.027 44.6404V44.6469H113.527V44.6404H112.027ZM112.027 44.6339V44.6404H113.527V44.6339H112.027ZM112.027 44.6273V44.6339H113.527V44.6273H112.027ZM112.027 44.6208V44.6273H113.527V44.6208H112.027ZM112.027 44.6142V44.6208H113.527V44.6142H112.027ZM112.027 44.6077V44.6142H113.527V44.6077H112.027ZM112.027 44.6011V44.6077H113.527V44.6011H112.027ZM112.027 44.5945V44.6011H113.527V44.5945H112.027ZM112.027 44.5879V44.5945H113.527V44.5879H112.027ZM112.027 44.5813V44.5879H113.527V44.5813H112.027ZM112.027 44.5747V44.5813H113.527V44.5747H112.027ZM112.027 44.568V44.5747H113.527V44.568H112.027ZM112.027 44.5614V44.568H113.527V44.5614H112.027ZM112.027 44.5547V44.5614H113.527V44.5547H112.027ZM112.027 44.548V44.5547H113.527V44.548H112.027ZM112.027 44.5413V44.548H113.527V44.5413H112.027ZM112.027 44.5346V44.5413H113.527V44.5346H112.027ZM112.027 44.5279V44.5346H113.527V44.5279H112.027ZM112.027 44.5212V44.5279H113.527V44.5212H112.027ZM112.027 44.5145V44.5212H113.527V44.5145H112.027ZM112.027 44.5077V44.5145H113.527V44.5077H112.027ZM112.027 44.5009V44.5077H113.527V44.5009H112.027ZM112.027 44.4942V44.5009H113.527V44.4942H112.027ZM112.027 44.4874V44.4942H113.527V44.4874H112.027ZM112.027 44.4806V44.4874H113.527V44.4806H112.027ZM112.027 44.4738V44.4806H113.527V44.4738H112.027ZM112.027 44.4669V44.4738H113.527V44.4669H112.027ZM112.027 44.4601V44.4669H113.527V44.4601H112.027ZM112.027 44.4533V44.4601H113.527V44.4533H112.027ZM112.027 44.4464V44.4533H113.527V44.4464H112.027ZM112.027 44.4395V44.4464H113.527V44.4395H112.027ZM112.027 44.4326V44.4395H113.527V44.4326H112.027ZM112.027 44.4257V44.4326H113.527V44.4257H112.027ZM112.027 44.4188V44.4257H113.527V44.4188H112.027ZM112.027 44.4119V44.4188H113.527V44.4119H112.027ZM112.027 44.405V44.4119H113.527V44.405H112.027ZM112.027 44.398V44.405H113.527V44.398H112.027ZM112.027 44.3911V44.398H113.527V44.3911H112.027ZM112.027 44.3841V44.3911H113.527V44.3841H112.027ZM112.027 44.3771V44.3841H113.527V44.3771H112.027ZM112.027 44.3701V44.3771H113.527V44.3701H112.027ZM112.027 44.3631V44.3701H113.527V44.3631H112.027ZM112.027 44.3561V44.3631H113.527V44.3561H112.027ZM112.027 44.3491V44.3561H113.527V44.3491H112.027ZM112.027 44.342V44.3491H113.527V44.342H112.027ZM112.027 44.335V44.342H113.527V44.335H112.027ZM112.027 44.3279V44.335H113.527V44.3279H112.027ZM112.027 44.3208V44.3279H113.527V44.3208H112.027ZM112.027 44.3137V44.3208H113.527V44.3137H112.027ZM112.027 44.3066V44.3137H113.527V44.3066H112.027ZM112.027 44.2995V44.3066H113.527V44.2995H112.027ZM112.027 44.2924V44.2995H113.527V44.2924H112.027ZM112.027 44.2853V44.2924H113.527V44.2853H112.027ZM112.027 44.2781V44.2853H113.527V44.2781H112.027ZM112.027 44.2709V44.2781H113.527V44.2709H112.027ZM112.027 44.2638V44.2709H113.527V44.2638H112.027ZM112.027 44.2566V44.2638H113.527V44.2566H112.027ZM112.027 44.2494V44.2566H113.527V44.2494H112.027ZM112.027 44.2422V44.2494H113.527V44.2422H112.027ZM112.027 44.2349V44.2422H113.527V44.2349H112.027ZM112.027 44.2277V44.2349H113.527V44.2277H112.027ZM112.027 44.2205V44.2277H113.527V44.2205H112.027ZM112.027 44.2132V44.2205H113.527V44.2132H112.027ZM112.027 44.2059V44.2132H113.527V44.2059H112.027ZM112.027 44.1986V44.2059H113.527V44.1986H112.027ZM112.027 44.1913V44.1986H113.527V44.1913H112.027ZM112.027 44.184V44.1913H113.527V44.184H112.027ZM112.027 44.1767V44.184H113.527V44.1767H112.027ZM112.027 44.1694V44.1767H113.527V44.1694H112.027ZM112.027 44.162V44.1694H113.527V44.162H112.027ZM112.027 44.1547V44.162H113.527V44.1547H112.027ZM112.027 44.1473V44.1547H113.527V44.1473H112.027ZM112.027 44.1399V44.1473H113.527V44.1399H112.027ZM112.027 44.1325V44.1399H113.527V44.1325H112.027ZM112.027 44.1251V44.1325H113.527V44.1251H112.027ZM112.027 44.1177V44.1251H113.527V44.1177H112.027ZM112.027 44.1102V44.1177H113.527V44.1102H112.027ZM112.027 44.1028V44.1102H113.527V44.1028H112.027ZM112.027 44.0953V44.1028H113.527V44.0953H112.027ZM112.027 44.0879V44.0953H113.527V44.0879H112.027ZM112.027 44.0804V44.0879H113.527V44.0804H112.027ZM112.027 44.0729V44.0804H113.527V44.0729H112.027ZM112.027 44.0654V44.0729H113.527V44.0654H112.027ZM112.027 44.0579V44.0654H113.527V44.0579H112.027ZM112.027 44.0504V44.0579H113.527V44.0504H112.027ZM112.027 44.0428V44.0504H113.527V44.0428H112.027ZM112.027 44.0353V44.0428H113.527V44.0353H112.027ZM112.027 44.0277V44.0353H113.527V44.0277H112.027ZM112.027 44.0201V44.0277H113.527V44.0201H112.027ZM112.027 44.0125V44.0201H113.527V44.0125H112.027ZM112.027 44.0049V44.0125H113.527V44.0049H112.027ZM112.027 43.9973V44.0049H113.527V43.9973H112.027ZM112.027 43.9897V43.9973H113.527V43.9897H112.027ZM112.027 43.982V43.9897H113.527V43.982H112.027ZM112.027 43.9744V43.982H113.527V43.9744H112.027ZM112.027 43.9667V43.9744H113.527V43.9667H112.027ZM112.027 43.959V43.9667H113.527V43.959H112.027ZM112.027 43.9514V43.959H113.527V43.9514H112.027ZM112.027 43.9437V43.9514H113.527V43.9437H112.027ZM112.027 43.9359V43.9437H113.527V43.9359H112.027ZM112.027 43.9282V43.9359H113.527V43.9282H112.027ZM112.027 43.9205V43.9282H113.527V43.9205H112.027ZM112.027 43.9127V43.9205H113.527V43.9127H112.027ZM112.027 43.905V43.9127H113.527V43.905H112.027ZM112.027 43.8972V43.905H113.527V43.8972H112.027ZM112.027 43.8894V43.8972H113.527V43.8894H112.027ZM112.027 43.8816V43.8894H113.527V43.8816H112.027ZM112.027 43.8738V43.8816H113.527V43.8738H112.027ZM112.027 43.866V43.8738H113.527V43.866H112.027ZM112.027 43.8582V43.866H113.527V43.8582H112.027ZM112.027 43.8503V43.8582H113.527V43.8503H112.027ZM112.027 43.8425V43.8503H113.527V43.8425H112.027ZM112.027 43.8346V43.8425H113.527V43.8346H112.027ZM112.027 43.8267V43.8346H113.527V43.8267H112.027ZM112.027 43.8188V43.8267H113.527V43.8188H112.027ZM112.027 43.8109V43.8188H113.527V43.8109H112.027ZM112.027 43.803V43.8109H113.527V43.803H112.027ZM112.027 43.795V43.803H113.527V43.795H112.027ZM112.027 43.7871V43.795H113.527V43.7871H112.027ZM112.027 43.7791V43.7871H113.527V43.7791H112.027ZM112.027 43.7712V43.7791H113.527V43.7712H112.027ZM112.027 43.7632V43.7712H113.527V43.7632H112.027ZM112.027 43.7552V43.7632H113.527V43.7552H112.027ZM112.027 43.7472V43.7552H113.527V43.7472H112.027ZM112.027 43.7392V43.7472H113.527V43.7392H112.027ZM112.027 43.7312V43.7392H113.527V43.7312H112.027ZM112.027 43.7231V43.7312H113.527V43.7231H112.027ZM112.027 43.7151V43.7231H113.527V43.7151H112.027ZM112.027 43.707V43.7151H113.527V43.707H112.027ZM112.027 43.6989V43.707H113.527V43.6989H112.027ZM112.027 43.6908V43.6989H113.527V43.6908H112.027ZM112.027 43.6827V43.6908H113.527V43.6827H112.027ZM112.027 43.6746V43.6827H113.527V43.6746H112.027ZM112.027 43.6665V43.6746H113.527V43.6665H112.027ZM112.027 43.6584V43.6665H113.527V43.6584H112.027ZM112.027 43.6502V43.6584H113.527V43.6502H112.027ZM112.027 43.642V43.6502H113.527V43.642H112.027ZM112.027 43.6339V43.642H113.527V43.6339H112.027ZM112.027 43.6257V43.6339H113.527V43.6257H112.027ZM112.027 43.6175V43.6257H113.527V43.6175H112.027ZM112.027 43.6093V43.6175H113.527V43.6093H112.027ZM112.027 43.601V43.6093H113.527V43.601H112.027ZM112.027 43.5928V43.601H113.527V43.5928H112.027ZM112.027 43.5846V43.5928H113.527V43.5846H112.027ZM112.027 43.5763V43.5846H113.527V43.5763H112.027ZM112.027 43.568V43.5763H113.527V43.568H112.027ZM112.027 43.5597V43.568H113.527V43.5597H112.027ZM112.027 43.5514V43.5597H113.527V43.5514H112.027ZM112.027 43.5431V43.5514H113.527V43.5431H112.027ZM112.027 43.5348V43.5431H113.527V43.5348H112.027ZM112.027 43.5265V43.5348H113.527V43.5265H112.027ZM112.027 43.5181V43.5265H113.527V43.5181H112.027ZM112.027 43.5098V43.5181H113.527V43.5098H112.027ZM112.027 43.5014V43.5098H113.527V43.5014H112.027ZM112.027 43.493V43.5014H113.527V43.493H112.027ZM112.027 43.4846V43.493H113.527V43.4846H112.027ZM112.027 43.4762V43.4846H113.527V43.4762H112.027ZM112.027 43.4678V43.4762H113.527V43.4678H112.027ZM112.027 43.4594V43.4678H113.527V43.4594H112.027ZM112.027 43.4509V43.4594H113.527V43.4509H112.027ZM112.027 43.4425V43.4509H113.527V43.4425H112.027ZM112.027 43.434V43.4425H113.527V43.434H112.027ZM112.027 43.4255V43.434H113.527V43.4255H112.027ZM112.027 43.417V43.4255H113.527V43.417H112.027ZM112.027 43.4085V43.417H113.527V43.4085H112.027ZM112.027 43.4V43.4085H113.527V43.4H112.027ZM112.027 43.3915V43.4H113.527V43.3915H112.027ZM112.027 43.383V43.3915H113.527V43.383H112.027ZM112.027 43.3744V43.383H113.527V43.3744H112.027ZM112.027 43.3658V43.3744H113.527V43.3658H112.027ZM112.027 43.3573V43.3658H113.527V43.3573H112.027ZM112.027 43.3487V43.3573H113.527V43.3487H112.027ZM112.027 43.3401V43.3487H113.527V43.3401H112.027ZM112.027 43.3315V43.3401H113.527V43.3315H112.027ZM112.027 43.3228V43.3315H113.527V43.3228H112.027ZM112.027 43.3142V43.3228H113.527V43.3142H112.027ZM112.027 43.3056V43.3142H113.527V43.3056H112.027ZM112.027 43.2969V43.3056H113.527V43.2969H112.027ZM112.027 43.2882V43.2969H113.527V43.2882H112.027ZM112.027 43.2795V43.2882H113.527V43.2795H112.027ZM112.027 43.2708V43.2795H113.527V43.2708H112.027ZM112.027 43.2621V43.2708H113.527V43.2621H112.027ZM112.027 43.2534V43.2621H113.527V43.2534H112.027ZM112.027 43.2447V43.2534H113.527V43.2447H112.027ZM112.027 43.2359V43.2447H113.527V43.2359H112.027ZM112.027 43.2272V43.2359H113.527V43.2272H112.027ZM112.027 43.2184V43.2272H113.527V43.2184H112.027ZM112.027 43.2096V43.2184H113.527V43.2096H112.027ZM112.027 43.2008V43.2096H113.527V43.2008H112.027ZM112.027 43.192V43.2008H113.527V43.192H112.027ZM112.027 43.1832V43.192H113.527V43.1832H112.027ZM112.027 43.1743V43.1832H113.527V43.1743H112.027ZM112.027 43.1655V43.1743H113.527V43.1655H112.027ZM112.027 43.1566V43.1655H113.527V43.1566H112.027ZM112.027 43.1478V43.1566H113.527V43.1478H112.027ZM112.027 43.1389V43.1478H113.527V43.1389H112.027ZM112.027 43.13V43.1389H113.527V43.13H112.027ZM112.027 43.1211V43.13H113.527V43.1211H112.027ZM112.027 43.1122V43.1211H113.527V43.1122H112.027ZM112.027 43.1033V43.1122H113.527V43.1033H112.027ZM112.027 43.0943V43.1033H113.527V43.0943H112.027ZM112.027 43.0854V43.0943H113.527V43.0854H112.027ZM112.027 43.0764V43.0854H113.527V43.0764H112.027ZM112.027 43.0674V43.0764H113.527V43.0674H112.027ZM112.027 43.0584V43.0674H113.527V43.0584H112.027ZM112.027 43.0494V43.0584H113.527V43.0494H112.027ZM112.027 43.0404V43.0494H113.527V43.0404H112.027ZM112.027 43.0314V43.0404H113.527V43.0314H112.027ZM112.027 43.0223V43.0314H113.527V43.0223H112.027ZM112.027 43.0133V43.0223H113.527V43.0133H112.027ZM112.027 43.0042V43.0133H113.527V43.0042H112.027ZM112.027 42.9951V43.0042H113.527V42.9951H112.027ZM112.027 42.9861V42.9951H113.527V42.9861H112.027ZM112.027 42.977V42.9861H113.527V42.977H112.027ZM112.027 42.9678V42.977H113.527V42.9678H112.027ZM112.027 42.9587V42.9678H113.527V42.9587H112.027ZM112.027 42.9496V42.9587H113.527V42.9496H112.027ZM112.027 42.9404V42.9496H113.527V42.9404H112.027ZM112.027 42.9313V42.9404H113.527V42.9313H112.027ZM112.027 42.9221V42.9313H113.527V42.9221H112.027ZM112.027 42.9129V42.9221H113.527V42.9129H112.027ZM112.027 42.9037V42.9129H113.527V42.9037H112.027ZM112.027 42.8945V42.9037H113.527V42.8945H112.027ZM112.027 42.8853V42.8945H113.527V42.8853H112.027ZM112.027 42.8761V42.8853H113.527V42.8761H112.027ZM112.027 42.8668V42.8761H113.527V42.8668H112.027ZM112.027 42.8576V42.8668H113.527V42.8576H112.027ZM112.027 42.8483V42.8576H113.527V42.8483H112.027ZM112.027 42.839V42.8483H113.527V42.839H112.027ZM112.027 42.8297V42.839H113.527V42.8297H112.027ZM112.027 42.8204V42.8297H113.527V42.8204H112.027ZM112.027 42.8111V42.8204H113.527V42.8111H112.027ZM112.027 42.8017V42.8111H113.527V42.8017H112.027ZM112.027 42.7924V42.8017H113.527V42.7924H112.027ZM112.027 42.783V42.7924H113.527V42.783H112.027ZM112.027 42.7737V42.783H113.527V42.7737H112.027ZM112.027 42.7643V42.7737H113.527V42.7643H112.027ZM112.027 42.7549V42.7643H113.527V42.7549H112.027ZM112.027 42.7455V42.7549H113.527V42.7455H112.027ZM112.027 42.7361V42.7455H113.527V42.7361H112.027ZM112.027 42.7267V42.7361H113.527V42.7267H112.027ZM112.027 42.7172V42.7267H113.527V42.7172H112.027ZM112.027 42.7078V42.7172H113.527V42.7078H112.027ZM112.027 42.6983V42.7078H113.527V42.6983H112.027ZM112.027 42.6888V42.6983H113.527V42.6888H112.027ZM112.027 42.6793V42.6888H113.527V42.6793H112.027ZM112.027 42.6698V42.6793H113.527V42.6698H112.027ZM112.027 42.6603V42.6698H113.527V42.6603H112.027ZM112.027 42.6508V42.6603H113.527V42.6508H112.027ZM112.027 42.6413V42.6508H113.527V42.6413H112.027ZM112.027 42.6317V42.6413H113.527V42.6317H112.027ZM112.027 42.6221V42.6317H113.527V42.6221H112.027ZM112.027 42.6126V42.6221H113.527V42.6126H112.027ZM112.027 42.603V42.6126H113.527V42.603H112.027ZM112.027 42.5934V42.603H113.527V42.5934H112.027ZM112.027 42.5838V42.5934H113.527V42.5838H112.027ZM112.027 42.5741V42.5838H113.527V42.5741H112.027ZM112.027 42.5645V42.5741H113.527V42.5645H112.027ZM112.027 42.5549V42.5645H113.527V42.5549H112.027ZM112.027 42.5452V42.5549H113.527V42.5452H112.027ZM112.027 42.5355V42.5452H113.527V42.5355H112.027ZM112.027 42.5258V42.5355H113.527V42.5258H112.027ZM112.027 42.5161V42.5258H113.527V42.5161H112.027ZM112.027 42.5064V42.5161H113.527V42.5064H112.027ZM112.027 42.4967V42.5064H113.527V42.4967H112.027ZM112.027 42.487V42.4967H113.527V42.487H112.027ZM112.027 42.4772V42.487H113.527V42.4772H112.027ZM112.027 42.4675V42.4772H113.527V42.4675H112.027ZM112.027 42.4577V42.4675H113.527V42.4577H112.027ZM112.027 42.4479V42.4577H113.527V42.4479H112.027ZM112.027 42.4381V42.4479H113.527V42.4381H112.027ZM112.027 42.4283V42.4381H113.527V42.4283H112.027ZM112.027 42.4185V42.4283H113.527V42.4185H112.027ZM112.027 42.4087V42.4185H113.527V42.4087H112.027ZM112.027 42.3988V42.4087H113.527V42.3988H112.027ZM112.027 42.389V42.3988H113.527V42.389H112.027ZM112.027 42.3791V42.389H113.527V42.3791H112.027ZM112.027 42.3692V42.3791H113.527V42.3692H112.027ZM112.027 42.3593V42.3692H113.527V42.3593H112.027ZM112.027 42.3494V42.3593H113.527V42.3494H112.027ZM112.027 42.3395V42.3494H113.527V42.3395H112.027ZM112.027 42.3296V42.3395H113.527V42.3296H112.027ZM112.027 42.3197V42.3296H113.527V42.3197H112.027ZM112.027 42.3097V42.3197H113.527V42.3097H112.027ZM112.027 42.2997V42.3097H113.527V42.2997H112.027ZM112.027 42.2898V42.2997H113.527V42.2898H112.027ZM112.027 42.2798V42.2898H113.527V42.2798H112.027ZM112.027 42.2698V42.2798H113.527V42.2698H112.027ZM112.027 42.2598V42.2698H113.527V42.2598H112.027ZM112.027 42.2497V42.2598H113.527V42.2497H112.027ZM112.027 42.2397V42.2497H113.527V42.2397H112.027ZM112.027 42.2297V42.2397H113.527V42.2297H112.027ZM112.027 42.2196V42.2297H113.527V42.2196H112.027ZM112.027 42.2095V42.2196H113.527V42.2095H112.027ZM112.027 42.1994V42.2095H113.527V42.1994H112.027ZM112.027 42.1893V42.1994H113.527V42.1893H112.027ZM112.027 42.1792V42.1893H113.527V42.1792H112.027ZM112.027 42.1691V42.1792H113.527V42.1691H112.027ZM112.027 42.159V42.1691H113.527V42.159H112.027ZM112.027 42.1488V42.159H113.527V42.1488H112.027ZM112.027 42.1387V42.1488H113.527V42.1387H112.027ZM112.027 42.1285V42.1387H113.527V42.1285H112.027ZM112.027 42.1183V42.1285H113.527V42.1183H112.027ZM112.027 42.1081V42.1183H113.527V42.1081H112.027ZM112.027 42.0979V42.1081H113.527V42.0979H112.027ZM112.027 42.0877V42.0979H113.527V42.0877H112.027ZM112.027 42.0774V42.0877H113.527V42.0774H112.027ZM112.027 42.0672V42.0774H113.527V42.0672H112.027ZM112.027 42.0569V42.0672H113.527V42.0569H112.027ZM112.027 42.0467V42.0569H113.527V42.0467H112.027ZM112.027 42.0364V42.0467H113.527V42.0364H112.027ZM112.027 42.0261V42.0364H113.527V42.0261H112.027ZM112.027 42.0158V42.0261H113.527V42.0158H112.027ZM112.027 42.0055V42.0158H113.527V42.0055H112.027ZM112.027 41.9952V42.0055H113.527V41.9952H112.027ZM112.027 41.9848V41.9952H113.527V41.9848H112.027ZM112.027 41.9745V41.9848H113.527V41.9745H112.027ZM112.027 41.9641V41.9745H113.527V41.9641H112.027ZM112.027 41.9537V41.9641H113.527V41.9537H112.027ZM112.027 41.9433V41.9537H113.527V41.9433H112.027ZM112.027 41.9329V41.9433H113.527V41.9329H112.027ZM112.027 41.9225V41.9329H113.527V41.9225H112.027ZM112.027 41.9121V41.9225H113.527V41.9121H112.027ZM112.027 41.9016V41.9121H113.527V41.9016H112.027ZM112.027 41.8912V41.9016H113.527V41.8912H112.027ZM112.027 41.8807V41.8912H113.527V41.8807H112.027ZM112.027 41.8702V41.8807H113.527V41.8702H112.027ZM112.027 41.8598V41.8702H113.527V41.8598H112.027ZM112.027 41.8493V41.8598H113.527V41.8493H112.027ZM112.027 41.8387V41.8493H113.527V41.8387H112.027ZM112.027 41.8282V41.8387H113.527V41.8282H112.027ZM112.027 41.8177V41.8282H113.527V41.8177H112.027ZM112.027 41.8071V41.8177H113.527V41.8071H112.027ZM112.027 41.7966V41.8071H113.527V41.7966H112.027ZM112.027 41.786V41.7966H113.527V41.786H112.027ZM112.027 41.7754V41.786H113.527V41.7754H112.027ZM112.027 41.7648V41.7754H113.527V41.7648H112.027ZM112.027 41.7542V41.7648H113.527V41.7542H112.027ZM112.027 41.7436V41.7542H113.527V41.7436H112.027ZM112.027 41.733V41.7436H113.527V41.733H112.027ZM112.027 41.7223V41.733H113.527V41.7223H112.027ZM112.027 41.7117V41.7223H113.527V41.7117H112.027ZM112.027 41.701V41.7117H113.527V41.701H112.027ZM112.027 41.6903V41.701H113.527V41.6903H112.027ZM112.027 41.6796V41.6903H113.527V41.6796H112.027ZM112.027 41.6689V41.6796H113.527V41.6689H112.027ZM112.027 41.6582V41.6689H113.527V41.6582H112.027ZM112.027 41.6474V41.6582H113.527V41.6474H112.027ZM112.027 41.6367V41.6474H113.527V41.6367H112.027ZM112.027 41.6259V41.6367H113.527V41.6259H112.027ZM112.027 41.6152V41.6259H113.527V41.6152H112.027ZM112.027 41.6044V41.6152H113.527V41.6044H112.027ZM112.027 41.5936V41.6044H113.527V41.5936H112.027ZM112.027 41.5828V41.5936H113.527V41.5828H112.027ZM112.027 41.572V41.5828H113.527V41.572H112.027ZM112.027 41.5612V41.572H113.527V41.5612H112.027ZM112.027 41.5503V41.5612H113.527V41.5503H112.027ZM112.027 41.5395V41.5503H113.527V41.5395H112.027ZM112.027 41.5286V41.5395H113.527V41.5286H112.027ZM112.027 41.5177V41.5286H113.527V41.5177H112.027ZM112.027 41.5068V41.5177H113.527V41.5068H112.027ZM112.027 41.4959V41.5068H113.527V41.4959H112.027ZM112.027 41.485V41.4959H113.527V41.485H112.027ZM112.027 41.4741V41.485H113.527V41.4741H112.027ZM112.027 41.4632V41.4741H113.527V41.4632H112.027ZM112.027 41.4522V41.4632H113.527V41.4522H112.027ZM112.027 41.4412V41.4522H113.527V41.4412H112.027ZM112.027 41.4303V41.4412H113.527V41.4303H112.027ZM112.027 41.4193V41.4303H113.527V41.4193H112.027ZM112.027 41.4083V41.4193H113.527V41.4083H112.027ZM112.027 41.3973V41.4083H113.527V41.3973H112.027ZM112.027 41.3862V41.3973H113.527V41.3862H112.027ZM112.027 41.3752V41.3862H113.527V41.3752H112.027ZM112.027 41.3642V41.3752H113.527V41.3642H112.027ZM112.027 41.3531V41.3642H113.527V41.3531H112.027ZM112.027 41.342V41.3531H113.527V41.342H112.027ZM112.027 41.3309V41.342H113.527V41.3309H112.027ZM112.027 41.3198V41.3309H113.527V41.3198H112.027ZM112.027 41.3087V41.3198H113.527V41.3087H112.027ZM112.027 41.2976V41.3087H113.527V41.2976H112.027ZM112.027 41.2865V41.2976H113.527V41.2865H112.027ZM112.027 41.2753V41.2865H113.527V41.2753H112.027ZM112.027 41.2642V41.2753H113.527V41.2642H112.027ZM112.027 41.253V41.2642H113.527V41.253H112.027ZM112.027 41.2418V41.253H113.527V41.2418H112.027ZM112.027 41.2306V41.2418H113.527V41.2306H112.027ZM112.027 41.2194V41.2306H113.527V41.2194H112.027ZM112.027 41.2082V41.2194H113.527V41.2082H112.027ZM112.027 41.197V41.2082H113.527V41.197H112.027ZM112.027 41.1857V41.197H113.527V41.1857H112.027ZM112.027 41.1745V41.1857H113.527V41.1745H112.027ZM112.027 41.1632V41.1745H113.527V41.1632H112.027ZM112.027 41.1519V41.1632H113.527V41.1519H112.027ZM112.027 41.1406V41.1519H113.527V41.1406H112.027ZM112.027 41.1293V41.1406H113.527V41.1293H112.027ZM112.027 41.118V41.1293H113.527V41.118H112.027ZM112.027 41.1067V41.118H113.527V41.1067H112.027ZM112.027 41.0954V41.1067H113.527V41.0954H112.027ZM112.027 41.084V41.0954H113.527V41.084H112.027ZM112.027 41.0726V41.084H113.527V41.0726H112.027ZM112.027 41.0613V41.0726H113.527V41.0613H112.027ZM112.027 41.0499V41.0613H113.527V41.0499H112.027ZM112.027 41.0385V41.0499H113.527V41.0385H112.027ZM112.027 41.0271V41.0385H113.527V41.0271H112.027ZM112.027 41.0156V41.0271H113.527V41.0156H112.027ZM112.027 41.0042V41.0156H113.527V41.0042H112.027ZM112.027 40.9928V41.0042H113.527V40.9928H112.027ZM112.027 40.9813V40.9928H113.527V40.9813H112.027ZM112.027 40.9698V40.9813H113.527V40.9698H112.027ZM112.027 40.9583V40.9698H113.527V40.9583H112.027ZM112.027 40.9468V40.9583H113.527V40.9468H112.027ZM112.027 40.9353V40.9468H113.527V40.9353H112.027ZM112.027 40.9238V40.9353H113.527V40.9238H112.027ZM112.027 40.9123V40.9238H113.527V40.9123H112.027ZM112.027 40.9007V40.9123H113.527V40.9007H112.027ZM112.027 40.8892V40.9007H113.527V40.8892H112.027ZM112.027 40.8776V40.8892H113.527V40.8776H112.027ZM112.027 40.866V40.8776H113.527V40.866H112.027ZM112.027 40.8544V40.866H113.527V40.8544H112.027ZM112.027 40.8428V40.8544H113.527V40.8428H112.027ZM112.027 40.8312V40.8428H113.527V40.8312H112.027ZM112.027 40.8195V40.8312H113.527V40.8195H112.027ZM112.027 40.8079V40.8195H113.527V40.8079H112.027ZM112.027 40.7962V40.8079H113.527V40.7962H112.027ZM112.027 40.7846V40.7962H113.527V40.7846H112.027ZM112.027 40.7729V40.7846H113.527V40.7729H112.027ZM112.027 40.7612V40.7729H113.527V40.7612H112.027ZM112.027 40.7495V40.7612H113.527V40.7495H112.027ZM112.027 40.7378V40.7495H113.527V40.7378H112.027ZM112.027 40.7261V40.7378H113.527V40.7261H112.027ZM112.027 40.7143V40.7261H113.527V40.7143H112.027ZM112.027 40.7026V40.7143H113.527V40.7026H112.027ZM112.027 40.6908V40.7026H113.527V40.6908H112.027ZM112.027 40.679V40.6908H113.527V40.679H112.027ZM112.027 40.6672V40.679H113.527V40.6672H112.027ZM112.027 40.6554V40.6672H113.527V40.6554H112.027ZM112.027 40.6436V40.6554H113.527V40.6436H112.027ZM112.027 40.6318V40.6436H113.527V40.6318H112.027ZM112.027 40.6199V40.6318H113.527V40.6199H112.027ZM112.027 40.6081V40.6199H113.527V40.6081H112.027ZM112.027 40.5962V40.6081H113.527V40.5962H112.027ZM112.027 40.5843V40.5962H113.527V40.5843H112.027ZM112.027 40.5725V40.5843H113.527V40.5725H112.027ZM112.027 40.5606V40.5725H113.527V40.5606H112.027ZM112.027 40.5486V40.5606H113.527V40.5486H112.027ZM112.027 40.5367V40.5486H113.527V40.5367H112.027ZM112.027 40.5248V40.5367H113.527V40.5248H112.027ZM112.027 40.5128V40.5248H113.527V40.5128H112.027ZM112.027 40.5009V40.5128H113.527V40.5009H112.027ZM112.027 40.4889V40.5009H113.527V40.4889H112.027ZM112.027 40.4769V40.4889H113.527V40.4769H112.027ZM112.027 40.4649V40.4769H113.527V40.4649H112.027ZM112.027 40.4529V40.4649H113.527V40.4529H112.027ZM112.027 40.4409V40.4529H113.527V40.4409H112.027ZM112.027 40.4289V40.4409H113.527V40.4289H112.027ZM112.027 40.4168V40.4289H113.527V40.4168H112.027ZM112.027 40.4048V40.4168H113.527V40.4048H112.027ZM112.027 40.3927V40.4048H113.527V40.3927H112.027ZM112.027 40.3806V40.3927H113.527V40.3806H112.027ZM112.027 40.3685V40.3806H113.527V40.3685H112.027ZM112.027 40.3564V40.3685H113.527V40.3564H112.027ZM112.027 40.3443V40.3564H113.527V40.3443H112.027ZM112.027 40.3321V40.3443H113.527V40.3321H112.027ZM112.027 40.32V40.3321H113.527V40.32H112.027ZM112.027 40.3078V40.32H113.527V40.3078H112.027ZM112.027 40.2957V40.3078H113.527V40.2957H112.027ZM112.027 40.2835V40.2957H113.527V40.2835H112.027ZM112.027 40.2713V40.2835H113.527V40.2713H112.027ZM112.027 40.2591V40.2713H113.527V40.2591H112.027ZM112.027 40.2469V40.2591H113.527V40.2469H112.027ZM112.027 40.2347V40.2469H113.527V40.2347H112.027ZM112.027 40.2224V40.2347H113.527V40.2224H112.027ZM112.027 40.2102V40.2224H113.527V40.2102H112.027ZM112.027 40.1979V40.2102H113.527V40.1979H112.027ZM112.027 40.1856V40.1979H113.527V40.1856H112.027ZM112.027 40.1733V40.1856H113.527V40.1733H112.027ZM112.027 40.161V40.1733H113.527V40.161H112.027ZM112.027 40.1487V40.161H113.527V40.1487H112.027ZM112.027 40.1364V40.1487H113.527V40.1364H112.027ZM112.027 40.1241V40.1364H113.527V40.1241H112.027ZM112.027 40.1117V40.1241H113.527V40.1117H112.027ZM112.027 40.0993V40.1117H113.527V40.0993H112.027ZM112.027 40.087V40.0993H113.527V40.087H112.027ZM112.027 40.0746V40.087H113.527V40.0746H112.027ZM112.027 40.0622V40.0746H113.527V40.0622H112.027ZM112.027 40.0498V40.0622H113.527V40.0498H112.027ZM112.027 40.0373V40.0498H113.527V40.0373H112.027ZM112.027 40.0249V40.0373H113.527V40.0249H112.027ZM112.027 40.0125V40.0249H113.527V40.0125H112.027ZM112.027 40V40.0125H113.527V40H112.027ZM112.027 49.1606V49.1694H113.527V49.1606H112.027ZM114.277 48.4106H112.777V49.9106H114.277V48.4106ZM115.027 49.1694V49.1606H113.527V49.1694H115.027ZM115.027 49.1783V49.1694H113.527V49.1783H115.027ZM115.027 49.1872V49.1783H113.527V49.1872H115.027ZM115.027 49.1961V49.1872H113.527V49.1961H115.027ZM115.027 49.205V49.1961H113.527V49.205H115.027ZM115.027 49.2138V49.205H113.527V49.2138H115.027ZM115.027 49.2227V49.2138H113.527V49.2227H115.027ZM115.027 49.2316V49.2227H113.527V49.2316H115.027ZM115.027 49.2406V49.2316H113.527V49.2406H115.027ZM115.027 49.2495V49.2406H113.527V49.2495H115.027ZM115.027 49.2584V49.2495H113.527V49.2584H115.027ZM115.027 49.2673V49.2584H113.527V49.2673H115.027ZM115.027 49.2762V49.2673H113.527V49.2762H115.027ZM115.027 49.2852V49.2762H113.527V49.2852H115.027ZM115.027 49.2941V49.2852H113.527V49.2941H115.027ZM115.027 49.3031V49.2941H113.527V49.3031H115.027ZM115.027 49.312V49.3031H113.527V49.312H115.027ZM115.027 49.321V49.312H113.527V49.321H115.027ZM115.027 49.33V49.321H113.527V49.33H115.027ZM115.027 49.3389V49.33H113.527V49.3389H115.027ZM115.027 49.3479V49.3389H113.527V49.3479H115.027ZM115.027 49.3569V49.3479H113.527V49.3569H115.027ZM115.027 49.3659V49.3569H113.527V49.3659H115.027ZM115.027 49.3749V49.3659H113.527V49.3749H115.027ZM115.027 49.3839V49.3749H113.527V49.3839H115.027ZM115.027 49.3929V49.3839H113.527V49.3929H115.027ZM115.027 49.4019V49.3929H113.527V49.4019H115.027ZM115.027 49.4109V49.4019H113.527V49.4109H115.027ZM115.027 49.42V49.4109H113.527V49.42H115.027ZM115.027 49.429V49.42H113.527V49.429H115.027ZM115.027 49.438V49.429H113.527V49.438H115.027ZM115.027 49.4471V49.438H113.527V49.4471H115.027ZM115.027 49.4561V49.4471H113.527V49.4561H115.027ZM115.027 49.4652V49.4561H113.527V49.4652H115.027ZM115.027 49.4743V49.4652H113.527V49.4743H115.027ZM115.027 49.4833V49.4743H113.527V49.4833H115.027ZM115.027 49.4924V49.4833H113.527V49.4924H115.027ZM115.027 49.5015V49.4924H113.527V49.5015H115.027ZM115.027 49.5106V49.5015H113.527V49.5106H115.027ZM115.027 49.5197V49.5106H113.527V49.5197H115.027ZM115.027 49.5288V49.5197H113.527V49.5288H115.027ZM115.027 49.5379V49.5288H113.527V49.5379H115.027ZM115.027 49.547V49.5379H113.527V49.547H115.027ZM115.027 49.5561V49.547H113.527V49.5561H115.027ZM115.027 49.5652V49.5561H113.527V49.5652H115.027ZM115.027 49.5743V49.5652H113.527V49.5743H115.027ZM115.027 49.5835V49.5743H113.527V49.5835H115.027ZM115.027 49.5926V49.5835H113.527V49.5926H115.027ZM115.027 49.6018V49.5926H113.527V49.6018H115.027ZM115.027 49.6109V49.6018H113.527V49.6109H115.027ZM115.027 49.6201V49.6109H113.527V49.6201H115.027ZM115.027 49.6292V49.6201H113.527V49.6292H115.027ZM115.027 49.6384V49.6292H113.527V49.6384H115.027ZM115.027 49.6476V49.6384H113.527V49.6476H115.027ZM115.027 49.6567V49.6476H113.527V49.6567H115.027ZM115.027 49.6659V49.6567H113.527V49.6659H115.027ZM115.027 49.6751V49.6659H113.527V49.6751H115.027ZM115.027 49.6843V49.6751H113.527V49.6843H115.027ZM115.027 49.6935V49.6843H113.527V49.6935H115.027ZM115.027 49.7027V49.6935H113.527V49.7027H115.027ZM115.027 49.712V49.7027H113.527V49.712H115.027ZM115.027 49.7212V49.712H113.527V49.7212H115.027ZM115.027 49.7304V49.7212H113.527V49.7304H115.027ZM115.027 49.7396V49.7304H113.527V49.7396H115.027ZM115.027 49.7489V49.7396H113.527V49.7489H115.027ZM115.027 49.7581V49.7489H113.527V49.7581H115.027ZM115.027 49.7674V49.7581H113.527V49.7674H115.027ZM115.027 49.7766V49.7674H113.527V49.7766H115.027ZM115.027 49.7859V49.7766H113.527V49.7859H115.027ZM115.027 49.7952V49.7859H113.527V49.7952H115.027ZM115.027 49.8044V49.7952H113.527V49.8044H115.027ZM115.027 49.8137V49.8044H113.527V49.8137H115.027ZM115.027 49.823V49.8137H113.527V49.823H115.027ZM115.027 49.8323V49.823H113.527V49.8323H115.027ZM115.027 49.8416V49.8323H113.527V49.8416H115.027ZM115.027 49.8509V49.8416H113.527V49.8509H115.027ZM115.027 49.8602V49.8509H113.527V49.8602H115.027ZM115.027 49.8695V49.8602H113.527V49.8695H115.027ZM115.027 49.8788V49.8695H113.527V49.8788H115.027ZM115.027 49.8882V49.8788H113.527V49.8882H115.027ZM115.027 49.8975V49.8882H113.527V49.8975H115.027ZM115.027 49.9068V49.8975H113.527V49.9068H115.027ZM115.027 49.9162V49.9068H113.527V49.9162H115.027ZM115.027 49.9255V49.9162H113.527V49.9255H115.027ZM115.027 49.9349V49.9255H113.527V49.9349H115.027ZM115.027 49.9443V49.9349H113.527V49.9443H115.027ZM115.027 49.9536V49.9443H113.527V49.9536H115.027ZM115.027 49.963V49.9536H113.527V49.963H115.027ZM115.027 49.9724V49.963H113.527V49.9724H115.027ZM115.027 49.9818V49.9724H113.527V49.9818H115.027ZM115.027 49.9912V49.9818H113.527V49.9912H115.027ZM115.027 50.0006V49.9912H113.527V50.0006H115.027ZM115.027 50.01V50.0006H113.527V50.01H115.027ZM115.027 50.0194V50.01H113.527V50.0194H115.027ZM115.027 50.0288V50.0194H113.527V50.0288H115.027ZM115.027 50.0382V50.0288H113.527V50.0382H115.027ZM115.027 50.0476V50.0382H113.527V50.0476H115.027ZM115.027 50.0571V50.0476H113.527V50.0571H115.027ZM115.027 50.0665V50.0571H113.527V50.0665H115.027ZM115.027 50.076V50.0665H113.527V50.076H115.027ZM115.027 50.0854V50.076H113.527V50.0854H115.027ZM115.027 50.0949V50.0854H113.527V50.0949H115.027ZM115.027 50.1043V50.0949H113.527V50.1043H115.027ZM115.027 50.1138V50.1043H113.527V50.1138H115.027ZM115.027 50.1233V50.1138H113.527V50.1233H115.027ZM115.027 50.1328V50.1233H113.527V50.1328H115.027ZM115.027 50.1423V50.1328H113.527V50.1423H115.027ZM115.027 50.1517V50.1423H113.527V50.1517H115.027ZM115.027 50.1612V50.1517H113.527V50.1612H115.027ZM115.027 50.1707V50.1612H113.527V50.1707H115.027ZM115.027 50.1803V50.1707H113.527V50.1803H115.027ZM115.027 50.1898V50.1803H113.527V50.1898H115.027ZM115.027 50.1993V50.1898H113.527V50.1993H115.027ZM115.027 50.2088V50.1993H113.527V50.2088H115.027ZM115.027 50.2184V50.2088H113.527V50.2184H115.027ZM115.027 50.2279V50.2184H113.527V50.2279H115.027ZM115.027 50.2374V50.2279H113.527V50.2374H115.027ZM115.027 50.247V50.2374H113.527V50.247H115.027ZM115.027 50.2566V50.247H113.527V50.2566H115.027ZM115.027 50.2661V50.2566H113.527V50.2661H115.027ZM115.027 50.2757V50.2661H113.527V50.2757H115.027ZM115.027 50.2853V50.2757H113.527V50.2853H115.027ZM115.027 50.2948V50.2853H113.527V50.2948H115.027ZM115.027 50.3044V50.2948H113.527V50.3044H115.027ZM115.027 50.314V50.3044H113.527V50.314H115.027ZM115.027 50.3236V50.314H113.527V50.3236H115.027ZM115.027 50.3332V50.3236H113.527V50.3332H115.027ZM115.027 50.3428V50.3332H113.527V50.3428H115.027ZM115.027 50.3525V50.3428H113.527V50.3525H115.027ZM115.027 50.3621V50.3525H113.527V50.3621H115.027ZM115.027 50.3717V50.3621H113.527V50.3717H115.027ZM115.027 50.3813V50.3717H113.527V50.3813H115.027ZM115.027 50.391V50.3813H113.527V50.391H115.027ZM115.027 50.4006V50.391H113.527V50.4006H115.027ZM115.027 50.4103V50.4006H113.527V50.4103H115.027ZM115.027 50.4199V50.4103H113.527V50.4199H115.027ZM115.027 50.4296V50.4199H113.527V50.4296H115.027ZM115.027 50.4393V50.4296H113.527V50.4393H115.027ZM115.027 50.4489V50.4393H113.527V50.4489H115.027ZM115.027 50.4586V50.4489H113.527V50.4586H115.027ZM115.027 50.4683V50.4586H113.527V50.4683H115.027ZM115.027 50.478V50.4683H113.527V50.478H115.027ZM115.027 50.4877V50.478H113.527V50.4877H115.027ZM115.027 50.4974V50.4877H113.527V50.4974H115.027ZM115.027 50.5071V50.4974H113.527V50.5071H115.027ZM115.027 50.5168V50.5071H113.527V50.5168H115.027ZM115.027 50.5266V50.5168H113.527V50.5266H115.027ZM115.027 50.5363V50.5266H113.527V50.5363H115.027ZM115.027 50.546V50.5363H113.527V50.546H115.027ZM115.027 50.5558V50.546H113.527V50.5558H115.027ZM115.027 50.5655V50.5558H113.527V50.5655H115.027ZM115.027 50.5753V50.5655H113.527V50.5753H115.027ZM115.027 50.585V50.5753H113.527V50.585H115.027ZM115.027 50.5948V50.585H113.527V50.5948H115.027ZM115.027 50.6046V50.5948H113.527V50.6046H115.027ZM115.027 50.6143V50.6046H113.527V50.6143H115.027ZM115.027 50.6241V50.6143H113.527V50.6241H115.027ZM115.027 50.6339V50.6241H113.527V50.6339H115.027ZM115.027 50.6437V50.6339H113.527V50.6437H115.027ZM115.027 50.6535V50.6437H113.527V50.6535H115.027ZM115.027 50.6633V50.6535H113.527V50.6633H115.027ZM115.027 50.6731V50.6633H113.527V50.6731H115.027ZM115.027 50.6829V50.6731H113.527V50.6829H115.027ZM115.027 50.6928V50.6829H113.527V50.6928H115.027ZM115.027 50.7026V50.6928H113.527V50.7026H115.027ZM115.027 50.7124V50.7026H113.527V50.7124H115.027ZM115.027 50.7223V50.7124H113.527V50.7223H115.027ZM115.027 50.7321V50.7223H113.527V50.7321H115.027ZM115.027 50.742V50.7321H113.527V50.742H115.027ZM115.027 50.7518V50.742H113.527V50.7518H115.027ZM115.027 50.7617V50.7518H113.527V50.7617H115.027ZM115.027 50.7716V50.7617H113.527V50.7716H115.027ZM115.027 50.7814V50.7716H113.527V50.7814H115.027ZM115.027 50.7913V50.7814H113.527V50.7913H115.027ZM115.027 50.8012V50.7913H113.527V50.8012H115.027ZM115.027 50.8111V50.8012H113.527V50.8111H115.027ZM115.027 50.821V50.8111H113.527V50.821H115.027ZM115.027 50.8309V50.821H113.527V50.8309H115.027ZM115.027 50.8408V50.8309H113.527V50.8408H115.027ZM115.027 50.8507V50.8408H113.527V50.8507H115.027ZM115.027 50.8607V50.8507H113.527V50.8607H115.027ZM115.027 50.8706V50.8607H113.527V50.8706H115.027ZM115.027 50.8805V50.8706H113.527V50.8805H115.027ZM115.027 50.8905V50.8805H113.527V50.8905H115.027ZM115.027 50.9004V50.8905H113.527V50.9004H115.027ZM115.027 50.9104V50.9004H113.527V50.9104H115.027ZM115.027 50.9203V50.9104H113.527V50.9203H115.027ZM115.027 50.9303V50.9203H113.527V50.9303H115.027ZM115.027 50.9403V50.9303H113.527V50.9403H115.027ZM115.027 50.9502V50.9403H113.527V50.9502H115.027ZM115.027 50.9602V50.9502H113.527V50.9602H115.027ZM115.027 50.9702V50.9602H113.527V50.9702H115.027ZM115.027 50.9802V50.9702H113.527V50.9802H115.027ZM115.027 50.9902V50.9802H113.527V50.9902H115.027ZM115.027 51.0002V50.9902H113.527V51.0002H115.027ZM115.027 51.0102V51.0002H113.527V51.0102H115.027ZM115.027 51.0202V51.0102H113.527V51.0202H115.027ZM115.027 51.0303V51.0202H113.527V51.0303H115.027ZM115.027 51.0403V51.0303H113.527V51.0403H115.027ZM115.027 51.0503V51.0403H113.527V51.0503H115.027ZM115.027 51.0604V51.0503H113.527V51.0604H115.027ZM115.027 51.0704V51.0604H113.527V51.0704H115.027ZM115.027 51.0805V51.0704H113.527V51.0805H115.027ZM115.027 51.0905V51.0805H113.527V51.0905H115.027ZM115.027 51.1006V51.0905H113.527V51.1006H115.027ZM115.027 51.1107V51.1006H113.527V51.1107H115.027ZM115.027 51.1207V51.1107H113.527V51.1207H115.027ZM115.027 51.1308V51.1207H113.527V51.1308H115.027ZM115.027 51.1409V51.1308H113.527V51.1409H115.027ZM115.027 51.151V51.1409H113.527V51.151H115.027ZM115.027 51.1611V51.151H113.527V51.1611H115.027ZM115.027 51.1712V51.1611H113.527V51.1712H115.027ZM115.027 51.1813V51.1712H113.527V51.1813H115.027ZM115.027 51.1914V51.1813H113.527V51.1914H115.027ZM115.027 51.2016V51.1914H113.527V51.2016H115.027ZM115.027 51.2117V51.2016H113.527V51.2117H115.027ZM115.027 51.2218V51.2117H113.527V51.2218H115.027ZM115.027 51.232V51.2218H113.527V51.232H115.027ZM115.027 51.2421V51.232H113.527V51.2421H115.027ZM115.027 51.2523V51.2421H113.527V51.2523H115.027ZM115.027 51.2624V51.2523H113.527V51.2624H115.027ZM115.027 51.2726V51.2624H113.527V51.2726H115.027ZM115.027 51.2828V51.2726H113.527V51.2828H115.027ZM115.027 51.2929V51.2828H113.527V51.2929H115.027ZM115.027 51.3031V51.2929H113.527V51.3031H115.027ZM115.027 51.3133V51.3031H113.527V51.3133H115.027ZM115.027 51.3235V51.3133H113.527V51.3235H115.027ZM115.027 51.3337V51.3235H113.527V51.3337H115.027ZM115.027 51.3439V51.3337H113.527V51.3439H115.027ZM115.027 51.3541V51.3439H113.527V51.3541H115.027ZM115.027 51.3643V51.3541H113.527V51.3643H115.027ZM115.027 51.3746V51.3643H113.527V51.3746H115.027ZM115.027 51.3848V51.3746H113.527V51.3848H115.027ZM115.027 51.395V51.3848H113.527V51.395H115.027ZM115.027 51.4053V51.395H113.527V51.4053H115.027ZM115.027 51.4155V51.4053H113.527V51.4155H115.027ZM115.027 51.4258V51.4155H113.527V51.4258H115.027ZM115.027 51.436V51.4258H113.527V51.436H115.027ZM115.027 51.4463V51.436H113.527V51.4463H115.027ZM115.027 51.4566V51.4463H113.527V51.4566H115.027ZM115.027 51.4668V51.4566H113.527V51.4668H115.027ZM115.027 51.4771V51.4668H113.527V51.4771H115.027ZM115.027 51.4874V51.4771H113.527V51.4874H115.027ZM115.027 51.4977V51.4874H113.527V51.4977H115.027ZM115.027 51.508V51.4977H113.527V51.508H115.027ZM115.027 51.5183V51.508H113.527V51.5183H115.027ZM115.027 51.5286V51.5183H113.527V51.5286H115.027ZM115.027 51.5389V51.5286H113.527V51.5389H115.027ZM115.027 51.5493V51.5389H113.527V51.5493H115.027ZM115.027 51.5596V51.5493H113.527V51.5596H115.027ZM115.027 51.5699V51.5596H113.527V51.5699H115.027ZM115.027 51.5803V51.5699H113.527V51.5803H115.027ZM115.027 51.5906V51.5803H113.527V51.5906H115.027ZM115.027 51.601V51.5906H113.527V51.601H115.027ZM115.027 51.6113V51.601H113.527V51.6113H115.027ZM115.027 51.6217V51.6113H113.527V51.6217H115.027ZM115.027 51.6321V51.6217H113.527V51.6321H115.027ZM115.027 51.6425V51.6321H113.527V51.6425H115.027ZM115.027 51.6528V51.6425H113.527V51.6528H115.027ZM115.027 51.6632V51.6528H113.527V51.6632H115.027ZM115.027 51.6736V51.6632H113.527V51.6736H115.027ZM115.027 51.684V51.6736H113.527V51.684H115.027ZM115.027 51.6944V51.684H113.527V51.6944H115.027ZM115.027 51.7048V51.6944H113.527V51.7048H115.027ZM115.027 51.7153V51.7048H113.527V51.7153H115.027ZM115.027 51.7257V51.7153H113.527V51.7257H115.027ZM115.027 51.7361V51.7257H113.527V51.7361H115.027ZM115.027 51.7466V51.7361H113.527V51.7466H115.027ZM115.027 51.757V51.7466H113.527V51.757H115.027ZM115.027 51.7674V51.757H113.527V51.7674H115.027ZM115.027 51.7779V51.7674H113.527V51.7779H115.027ZM115.027 51.7884V51.7779H113.527V51.7884H115.027ZM115.027 51.7988V51.7884H113.527V51.7988H115.027ZM115.027 51.8093V51.7988H113.527V51.8093H115.027ZM115.027 51.8198V51.8093H113.527V51.8198H115.027ZM115.027 51.8303V51.8198H113.527V51.8303H115.027ZM115.027 51.8407V51.8303H113.527V51.8407H115.027ZM115.027 51.8512V51.8407H113.527V51.8512H115.027ZM115.027 51.8617V51.8512H113.527V51.8617H115.027ZM115.027 51.8723V51.8617H113.527V51.8723H115.027ZM115.027 51.8828V51.8723H113.527V51.8828H115.027ZM115.027 51.8933V51.8828H113.527V51.8933H115.027ZM115.027 51.9038V51.8933H113.527V51.9038H115.027ZM115.027 51.9143V51.9038H113.527V51.9143H115.027ZM115.027 51.9249V51.9143H113.527V51.9249H115.027ZM115.027 51.9354V51.9249H113.527V51.9354H115.027ZM115.027 51.946V51.9354H113.527V51.946H115.027ZM115.027 51.9565V51.946H113.527V51.9565H115.027ZM115.027 51.9671V51.9565H113.527V51.9671H115.027ZM115.027 51.9776V51.9671H113.527V51.9776H115.027ZM115.027 51.9882V51.9776H113.527V51.9882H115.027ZM115.027 51.9988V51.9882H113.527V51.9988H115.027ZM115.027 52.0094V51.9988H113.527V52.0094H115.027ZM115.027 52.02V52.0094H113.527V52.02H115.027ZM115.027 52.0306V52.02H113.527V52.0306H115.027ZM115.027 52.0412V52.0306H113.527V52.0412H115.027ZM115.027 52.0518V52.0412H113.527V52.0518H115.027ZM115.027 52.0624V52.0518H113.527V52.0624H115.027ZM115.027 52.073V52.0624H113.527V52.073H115.027ZM115.027 52.0836V52.073H113.527V52.0836H115.027ZM115.027 52.0943V52.0836H113.527V52.0943H115.027ZM115.027 52.1049V52.0943H113.527V52.1049H115.027ZM115.027 52.1155V52.1049H113.527V52.1155H115.027ZM115.027 52.1262V52.1155H113.527V52.1262H115.027ZM115.027 52.1368V52.1262H113.527V52.1368H115.027ZM115.027 52.1475V52.1368H113.527V52.1475H115.027ZM115.027 52.1582V52.1475H113.527V52.1582H115.027ZM115.027 52.1688V52.1582H113.527V52.1688H115.027ZM115.027 52.1795V52.1688H113.527V52.1795H115.027ZM115.027 52.1902V52.1795H113.527V52.1902H115.027ZM115.027 52.2009V52.1902H113.527V52.2009H115.027ZM115.027 52.2116V52.2009H113.527V52.2116H115.027ZM115.027 52.2223V52.2116H113.527V52.2223H115.027ZM115.027 52.233V52.2223H113.527V52.233H115.027ZM115.027 52.2437V52.233H113.527V52.2437H115.027ZM115.027 52.2544V52.2437H113.527V52.2544H115.027ZM115.027 52.2652V52.2544H113.527V52.2652H115.027ZM115.027 52.2759V52.2652H113.527V52.2759H115.027ZM115.027 52.2866V52.2759H113.527V52.2866H115.027ZM115.027 52.2974V52.2866H113.527V52.2974H115.027ZM115.027 52.3081V52.2974H113.527V52.3081H115.027ZM115.027 52.3189V52.3081H113.527V52.3189H115.027ZM115.027 52.3296V52.3189H113.527V52.3296H115.027ZM115.027 52.3404V52.3296H113.527V52.3404H115.027ZM115.027 52.3512V52.3404H113.527V52.3512H115.027ZM115.027 52.362V52.3512H113.527V52.362H115.027ZM115.027 52.3727V52.362H113.527V52.3727H115.027ZM115.027 52.3835V52.3727H113.527V52.3835H115.027ZM115.027 52.3943V52.3835H113.527V52.3943H115.027ZM115.027 52.4051V52.3943H113.527V52.4051H115.027ZM115.027 52.4159V52.4051H113.527V52.4159H115.027ZM115.027 52.4268V52.4159H113.527V52.4268H115.027ZM115.027 52.4376V52.4268H113.527V52.4376H115.027ZM115.027 52.4484V52.4376H113.527V52.4484H115.027ZM115.027 52.4592V52.4484H113.527V52.4592H115.027ZM115.027 52.4701V52.4592H113.527V52.4701H115.027ZM115.027 52.4809V52.4701H113.527V52.4809H115.027ZM115.027 52.4918V52.4809H113.527V52.4918H115.027ZM115.027 52.5026V52.4918H113.527V52.5026H115.027ZM115.027 52.5135V52.5026H113.527V52.5135H115.027ZM115.027 52.5243V52.5135H113.527V52.5243H115.027ZM115.027 52.5352V52.5243H113.527V52.5352H115.027ZM115.027 52.5461V52.5352H113.527V52.5461H115.027ZM115.027 52.557V52.5461H113.527V52.557H115.027ZM115.027 52.5679V52.557H113.527V52.5679H115.027ZM115.027 52.5788V52.5679H113.527V52.5788H115.027ZM115.027 52.5897V52.5788H113.527V52.5897H115.027ZM115.027 52.6006V52.5897H113.527V52.6006H115.027ZM115.027 52.6115V52.6006H113.527V52.6115H115.027ZM115.027 52.6224V52.6115H113.527V52.6224H115.027ZM115.027 52.6333V52.6224H113.527V52.6333H115.027ZM115.027 52.6443V52.6333H113.527V52.6443H115.027ZM115.027 52.6552V52.6443H113.527V52.6552H115.027ZM115.027 52.6661V52.6552H113.527V52.6661H115.027ZM115.027 52.6771V52.6661H113.527V52.6771H115.027ZM115.027 52.688V52.6771H113.527V52.688H115.027ZM115.027 52.699V52.688H113.527V52.699H115.027ZM115.027 52.71V52.699H113.527V52.71H115.027ZM115.027 52.721V52.71H113.527V52.721H115.027ZM115.027 52.7319V52.721H113.527V52.7319H115.027ZM115.027 52.7429V52.7319H113.527V52.7429H115.027ZM115.027 52.7539V52.7429H113.527V52.7539H115.027ZM115.027 52.7649V52.7539H113.527V52.7649H115.027ZM115.027 52.7759V52.7649H113.527V52.7759H115.027ZM115.027 52.7869V52.7759H113.527V52.7869H115.027ZM115.027 52.7979V52.7869H113.527V52.7979H115.027ZM115.027 52.8089V52.7979H113.527V52.8089H115.027ZM115.027 52.82V52.8089H113.527V52.82H115.027ZM115.027 52.831V52.82H113.527V52.831H115.027ZM115.027 52.842V52.831H113.527V52.842H115.027ZM115.027 52.8531V52.842H113.527V52.8531H115.027ZM115.027 52.8641V52.8531H113.527V52.8641H115.027ZM115.027 52.8752V52.8641H113.527V52.8752H115.027ZM115.027 52.8863V52.8752H113.527V52.8863H115.027ZM115.027 52.8973V52.8863H113.527V52.8973H115.027ZM115.027 52.9084V52.8973H113.527V52.9084H115.027ZM115.027 52.9195V52.9084H113.527V52.9195H115.027ZM115.027 52.9306V52.9195H113.527V52.9306H115.027ZM115.027 52.9416V52.9306H113.527V52.9416H115.027ZM115.027 52.9527V52.9416H113.527V52.9527H115.027ZM115.027 52.9638V52.9527H113.527V52.9638H115.027ZM115.027 52.975V52.9638H113.527V52.975H115.027ZM115.027 52.9861V52.975H113.527V52.9861H115.027ZM115.027 52.9972V52.9861H113.527V52.9972H115.027ZM115.027 53.0083V52.9972H113.527V53.0083H115.027ZM115.027 53.0194V53.0083H113.527V53.0194H115.027ZM115.027 53.0306V53.0194H113.527V53.0306H115.027ZM115.027 53.0417V53.0306H113.527V53.0417H115.027ZM115.027 53.0529V53.0417H113.527V53.0529H115.027ZM115.027 53.064V53.0529H113.527V53.064H115.027ZM115.027 53.0752V53.064H113.527V53.0752H115.027ZM115.027 53.0864V53.0752H113.527V53.0864H115.027ZM115.027 53.0975V53.0864H113.527V53.0975H115.027ZM115.027 53.1087V53.0975H113.527V53.1087H115.027ZM115.027 53.1199V53.1087H113.527V53.1199H115.027ZM115.027 53.1311V53.1199H113.527V53.1311H115.027ZM115.027 53.1423V53.1311H113.527V53.1423H115.027ZM115.027 53.1535V53.1423H113.527V53.1535H115.027ZM115.027 53.1647V53.1535H113.527V53.1647H115.027ZM115.027 53.1759V53.1647H113.527V53.1759H115.027ZM115.027 53.1871V53.1759H113.527V53.1871H115.027ZM115.027 53.1984V53.1871H113.527V53.1984H115.027ZM115.027 53.2096V53.1984H113.527V53.2096H115.027ZM115.027 53.2208V53.2096H113.527V53.2208H115.027ZM115.027 53.2321V53.2208H113.527V53.2321H115.027ZM115.027 53.2433V53.2321H113.527V53.2433H115.027ZM115.027 53.2546V53.2433H113.527V53.2546H115.027ZM115.027 53.2659V53.2546H113.527V53.2659H115.027ZM115.027 53.2771V53.2659H113.527V53.2771H115.027ZM115.027 53.2884V53.2771H113.527V53.2884H115.027ZM115.027 53.2997V53.2884H113.527V53.2997H115.027ZM115.027 53.311V53.2997H113.527V53.311H115.027ZM115.027 53.3222V53.311H113.527V53.3222H115.027ZM115.027 53.3335V53.3222H113.527V53.3335H115.027ZM115.027 53.3448V53.3335H113.527V53.3448H115.027ZM115.027 53.3562V53.3448H113.527V53.3562H115.027ZM115.027 53.3675V53.3562H113.527V53.3675H115.027ZM115.027 53.3788V53.3675H113.527V53.3788H115.027ZM115.027 53.3901V53.3788H113.527V53.3901H115.027ZM115.027 53.4015V53.3901H113.527V53.4015H115.027ZM115.027 53.4128V53.4015H113.527V53.4128H115.027ZM115.027 53.4241V53.4128H113.527V53.4241H115.027ZM115.027 53.4355V53.4241H113.527V53.4355H115.027ZM115.027 53.4468V53.4355H113.527V53.4468H115.027ZM115.027 53.4582V53.4468H113.527V53.4582H115.027ZM115.027 53.4696V53.4582H113.527V53.4696H115.027ZM115.027 53.4809V53.4696H113.527V53.4809H115.027ZM115.027 53.4923V53.4809H113.527V53.4923H115.027ZM115.027 53.5037V53.4923H113.527V53.5037H115.027ZM115.027 53.5151V53.5037H113.527V53.5151H115.027ZM115.027 53.5265V53.5151H113.527V53.5265H115.027ZM115.027 53.5379V53.5265H113.527V53.5379H115.027ZM115.027 53.5493V53.5379H113.527V53.5493H115.027ZM115.027 53.5607V53.5493H113.527V53.5607H115.027ZM115.027 53.5722V53.5607H113.527V53.5722H115.027ZM115.027 53.5836V53.5722H113.527V53.5836H115.027ZM115.027 53.595V53.5836H113.527V53.595H115.027ZM115.027 53.6064V53.595H113.527V53.6064H115.027ZM115.027 53.6179V53.6064H113.527V53.6179H115.027ZM115.027 53.6293V53.6179H113.527V53.6293H115.027ZM115.027 53.6408V53.6293H113.527V53.6408H115.027ZM115.027 53.6523V53.6408H113.527V53.6523H115.027ZM115.027 53.6637V53.6523H113.527V53.6637H115.027ZM115.027 53.6752V53.6637H113.527V53.6752H115.027ZM115.027 53.6867V53.6752H113.527V53.6867H115.027ZM115.027 53.6982V53.6867H113.527V53.6982H115.027ZM115.027 53.7097V53.6982H113.527V53.7097H115.027ZM115.027 53.7212V53.7097H113.527V53.7212H115.027ZM115.027 53.7327V53.7212H113.527V53.7327H115.027ZM115.027 53.7442V53.7327H113.527V53.7442H115.027ZM115.027 53.7557V53.7442H113.527V53.7557H115.027ZM115.027 53.7672V53.7557H113.527V53.7672H115.027ZM115.027 53.7787V53.7672H113.527V53.7787H115.027ZM115.027 53.7903V53.7787H113.527V53.7903H115.027ZM115.027 53.8018V53.7903H113.527V53.8018H115.027ZM115.027 53.8134V53.8018H113.527V53.8134H115.027ZM115.027 53.8249V53.8134H113.527V53.8249H115.027ZM115.027 53.8365V53.8249H113.527V53.8365H115.027ZM115.027 53.848V53.8365H113.527V53.848H115.027ZM115.027 53.8596V53.848H113.527V53.8596H115.027ZM115.027 53.8712V53.8596H113.527V53.8712H115.027ZM115.027 53.8827V53.8712H113.527V53.8827H115.027ZM115.027 53.8943V53.8827H113.527V53.8943H115.027ZM115.027 53.9059V53.8943H113.527V53.9059H115.027ZM115.027 53.9175V53.9059H113.527V53.9175H115.027ZM115.027 53.9291V53.9175H113.527V53.9291H115.027ZM115.027 53.9407V53.9291H113.527V53.9407H115.027ZM115.027 53.9524V53.9407H113.527V53.9524H115.027ZM115.027 53.964V53.9524H113.527V53.964H115.027ZM115.027 53.9756V53.964H113.527V53.9756H115.027ZM115.027 53.9872V53.9756H113.527V53.9872H115.027ZM115.027 53.9989V53.9872H113.527V53.9989H115.027ZM115.027 54.0105V53.9989H113.527V54.0105H115.027ZM115.027 54.0222V54.0105H113.527V54.0222H115.027ZM115.027 54.0338V54.0222H113.527V54.0338H115.027ZM115.027 54.0455V54.0338H113.527V54.0455H115.027ZM115.027 54.0572V54.0455H113.527V54.0572H115.027ZM115.027 54.0688V54.0572H113.527V54.0688H115.027ZM115.027 54.0805V54.0688H113.527V54.0805H115.027ZM115.027 54.0922V54.0805H113.527V54.0922H115.027ZM115.027 54.1039V54.0922H113.527V54.1039H115.027ZM115.027 54.1156V54.1039H113.527V54.1156H115.027ZM115.027 54.1273V54.1156H113.527V54.1273H115.027ZM115.027 54.139V54.1273H113.527V54.139H115.027ZM115.027 54.1507V54.139H113.527V54.1507H115.027ZM115.027 54.1624V54.1507H113.527V54.1624H115.027ZM115.027 54.1742V54.1624H113.527V54.1742H115.027ZM115.027 54.1859V54.1742H113.527V54.1859H115.027ZM115.027 54.1976V54.1859H113.527V54.1976H115.027ZM115.027 54.2094V54.1976H113.527V54.2094H115.027ZM115.027 54.2211V54.2094H113.527V54.2211H115.027ZM115.027 54.2329V54.2211H113.527V54.2329H115.027ZM115.027 54.2447V54.2329H113.527V54.2447H115.027ZM115.027 54.2564V54.2447H113.527V54.2564H115.027ZM115.027 54.2682V54.2564H113.527V54.2682H115.027ZM115.027 54.28V54.2682H113.527V54.28H115.027ZM115.027 54.2918V54.28H113.527V54.2918H115.027ZM115.027 54.3036V54.2918H113.527V54.3036H115.027ZM115.027 54.3154V54.3036H113.527V54.3154H115.027ZM115.027 54.3272V54.3154H113.527V54.3272H115.027ZM115.027 54.339V54.3272H113.527V54.339H115.027ZM115.027 54.3508V54.339H113.527V54.3508H115.027ZM115.027 54.3626V54.3508H113.527V54.3626H115.027ZM115.027 54.3744V54.3626H113.527V54.3744H115.027ZM115.027 54.3863V54.3744H113.527V54.3863H115.027ZM115.027 54.3981V54.3863H113.527V54.3981H115.027ZM115.027 54.41V54.3981H113.527V54.41H115.027ZM115.027 54.4218V54.41H113.527V54.4218H115.027ZM115.027 54.4337V54.4218H113.527V54.4337H115.027ZM115.027 54.4455V54.4337H113.527V54.4455H115.027ZM115.027 54.4574V54.4455H113.527V54.4574H115.027ZM115.027 54.4693V54.4574H113.527V54.4693H115.027ZM112.777 55.2193H114.277V53.7193H112.777V55.2193ZM112.027 54.4574V54.4693H113.527V54.4574H112.027ZM112.027 54.4455V54.4574H113.527V54.4455H112.027ZM112.027 54.4337V54.4455H113.527V54.4337H112.027ZM112.027 54.4218V54.4337H113.527V54.4218H112.027ZM112.027 54.41V54.4218H113.527V54.41H112.027ZM112.027 54.3981V54.41H113.527V54.3981H112.027ZM112.027 54.3863V54.3981H113.527V54.3863H112.027ZM112.027 54.3744V54.3863H113.527V54.3744H112.027ZM112.027 54.3626V54.3744H113.527V54.3626H112.027ZM112.027 54.3508V54.3626H113.527V54.3508H112.027ZM112.027 54.339V54.3508H113.527V54.339H112.027ZM112.027 54.3272V54.339H113.527V54.3272H112.027ZM112.027 54.3154V54.3272H113.527V54.3154H112.027ZM112.027 54.3036V54.3154H113.527V54.3036H112.027ZM112.027 54.2918V54.3036H113.527V54.2918H112.027ZM112.027 54.28V54.2918H113.527V54.28H112.027ZM112.027 54.2682V54.28H113.527V54.2682H112.027ZM112.027 54.2564V54.2682H113.527V54.2564H112.027ZM112.027 54.2447V54.2564H113.527V54.2447H112.027ZM112.027 54.2329V54.2447H113.527V54.2329H112.027ZM112.027 54.2211V54.2329H113.527V54.2211H112.027ZM112.027 54.2094V54.2211H113.527V54.2094H112.027ZM112.027 54.1976V54.2094H113.527V54.1976H112.027ZM112.027 54.1859V54.1976H113.527V54.1859H112.027ZM112.027 54.1742V54.1859H113.527V54.1742H112.027ZM112.027 54.1624V54.1742H113.527V54.1624H112.027ZM112.027 54.1507V54.1624H113.527V54.1507H112.027ZM112.027 54.139V54.1507H113.527V54.139H112.027ZM112.027 54.1273V54.139H113.527V54.1273H112.027ZM112.027 54.1156V54.1273H113.527V54.1156H112.027ZM112.027 54.1039V54.1156H113.527V54.1039H112.027ZM112.027 54.0922V54.1039H113.527V54.0922H112.027ZM112.027 54.0805V54.0922H113.527V54.0805H112.027ZM112.027 54.0688V54.0805H113.527V54.0688H112.027ZM112.027 54.0572V54.0688H113.527V54.0572H112.027ZM112.027 54.0455V54.0572H113.527V54.0455H112.027ZM112.027 54.0338V54.0455H113.527V54.0338H112.027ZM112.027 54.0222V54.0338H113.527V54.0222H112.027ZM112.027 54.0105V54.0222H113.527V54.0105H112.027ZM112.027 53.9989V54.0105H113.527V53.9989H112.027ZM112.027 53.9872V53.9989H113.527V53.9872H112.027ZM112.027 53.9756V53.9872H113.527V53.9756H112.027ZM112.027 53.964V53.9756H113.527V53.964H112.027ZM112.027 53.9524V53.964H113.527V53.9524H112.027ZM112.027 53.9407V53.9524H113.527V53.9407H112.027ZM112.027 53.9291V53.9407H113.527V53.9291H112.027ZM112.027 53.9175V53.9291H113.527V53.9175H112.027ZM112.027 53.9059V53.9175H113.527V53.9059H112.027ZM112.027 53.8943V53.9059H113.527V53.8943H112.027ZM112.027 53.8827V53.8943H113.527V53.8827H112.027ZM112.027 53.8712V53.8827H113.527V53.8712H112.027ZM112.027 53.8596V53.8712H113.527V53.8596H112.027ZM112.027 53.848V53.8596H113.527V53.848H112.027ZM112.027 53.8365V53.848H113.527V53.8365H112.027ZM112.027 53.8249V53.8365H113.527V53.8249H112.027ZM112.027 53.8134V53.8249H113.527V53.8134H112.027ZM112.027 53.8018V53.8134H113.527V53.8018H112.027ZM112.027 53.7903V53.8018H113.527V53.7903H112.027ZM112.027 53.7787V53.7903H113.527V53.7787H112.027ZM112.027 53.7672V53.7787H113.527V53.7672H112.027ZM112.027 53.7557V53.7672H113.527V53.7557H112.027ZM112.027 53.7442V53.7557H113.527V53.7442H112.027ZM112.027 53.7327V53.7442H113.527V53.7327H112.027ZM112.027 53.7212V53.7327H113.527V53.7212H112.027ZM112.027 53.7097V53.7212H113.527V53.7097H112.027ZM112.027 53.6982V53.7097H113.527V53.6982H112.027ZM112.027 53.6867V53.6982H113.527V53.6867H112.027ZM112.027 53.6752V53.6867H113.527V53.6752H112.027ZM112.027 53.6637V53.6752H113.527V53.6637H112.027ZM112.027 53.6523V53.6637H113.527V53.6523H112.027ZM112.027 53.6408V53.6523H113.527V53.6408H112.027ZM112.027 53.6293V53.6408H113.527V53.6293H112.027ZM112.027 53.6179V53.6293H113.527V53.6179H112.027ZM112.027 53.6064V53.6179H113.527V53.6064H112.027ZM112.027 53.595V53.6064H113.527V53.595H112.027ZM112.027 53.5836V53.595H113.527V53.5836H112.027ZM112.027 53.5722V53.5836H113.527V53.5722H112.027ZM112.027 53.5607V53.5722H113.527V53.5607H112.027ZM112.027 53.5493V53.5607H113.527V53.5493H112.027ZM112.027 53.5379V53.5493H113.527V53.5379H112.027ZM112.027 53.5265V53.5379H113.527V53.5265H112.027ZM112.027 53.5151V53.5265H113.527V53.5151H112.027ZM112.027 53.5037V53.5151H113.527V53.5037H112.027ZM112.027 53.4923V53.5037H113.527V53.4923H112.027ZM112.027 53.4809V53.4923H113.527V53.4809H112.027ZM112.027 53.4696V53.4809H113.527V53.4696H112.027ZM112.027 53.4582V53.4696H113.527V53.4582H112.027ZM112.027 53.4468V53.4582H113.527V53.4468H112.027ZM112.027 53.4355V53.4468H113.527V53.4355H112.027ZM112.027 53.4241V53.4355H113.527V53.4241H112.027ZM112.027 53.4128V53.4241H113.527V53.4128H112.027ZM112.027 53.4015V53.4128H113.527V53.4015H112.027ZM112.027 53.3901V53.4015H113.527V53.3901H112.027ZM112.027 53.3788V53.3901H113.527V53.3788H112.027ZM112.027 53.3675V53.3788H113.527V53.3675H112.027ZM112.027 53.3562V53.3675H113.527V53.3562H112.027ZM112.027 53.3448V53.3562H113.527V53.3448H112.027ZM112.027 53.3335V53.3448H113.527V53.3335H112.027ZM112.027 53.3222V53.3335H113.527V53.3222H112.027ZM112.027 53.311V53.3222H113.527V53.311H112.027ZM112.027 53.2997V53.311H113.527V53.2997H112.027ZM112.027 53.2884V53.2997H113.527V53.2884H112.027ZM112.027 53.2771V53.2884H113.527V53.2771H112.027ZM112.027 53.2659V53.2771H113.527V53.2659H112.027ZM112.027 53.2546V53.2659H113.527V53.2546H112.027ZM112.027 53.2433V53.2546H113.527V53.2433H112.027ZM112.027 53.2321V53.2433H113.527V53.2321H112.027ZM112.027 53.2208V53.2321H113.527V53.2208H112.027ZM112.027 53.2096V53.2208H113.527V53.2096H112.027ZM112.027 53.1984V53.2096H113.527V53.1984H112.027ZM112.027 53.1871V53.1984H113.527V53.1871H112.027ZM112.027 53.1759V53.1871H113.527V53.1759H112.027ZM112.027 53.1647V53.1759H113.527V53.1647H112.027ZM112.027 53.1535V53.1647H113.527V53.1535H112.027ZM112.027 53.1423V53.1535H113.527V53.1423H112.027ZM112.027 53.1311V53.1423H113.527V53.1311H112.027ZM112.027 53.1199V53.1311H113.527V53.1199H112.027ZM112.027 53.1087V53.1199H113.527V53.1087H112.027ZM112.027 53.0975V53.1087H113.527V53.0975H112.027ZM112.027 53.0864V53.0975H113.527V53.0864H112.027ZM112.027 53.0752V53.0864H113.527V53.0752H112.027ZM112.027 53.064V53.0752H113.527V53.064H112.027ZM112.027 53.0529V53.064H113.527V53.0529H112.027ZM112.027 53.0417V53.0529H113.527V53.0417H112.027ZM112.027 53.0306V53.0417H113.527V53.0306H112.027ZM112.027 53.0194V53.0306H113.527V53.0194H112.027ZM112.027 53.0083V53.0194H113.527V53.0083H112.027ZM112.027 52.9972V53.0083H113.527V52.9972H112.027ZM112.027 52.9861V52.9972H113.527V52.9861H112.027ZM112.027 52.975V52.9861H113.527V52.975H112.027ZM112.027 52.9638V52.975H113.527V52.9638H112.027ZM112.027 52.9527V52.9638H113.527V52.9527H112.027ZM112.027 52.9416V52.9527H113.527V52.9416H112.027ZM112.027 52.9306V52.9416H113.527V52.9306H112.027ZM112.027 52.9195V52.9306H113.527V52.9195H112.027ZM112.027 52.9084V52.9195H113.527V52.9084H112.027ZM112.027 52.8973V52.9084H113.527V52.8973H112.027ZM112.027 52.8863V52.8973H113.527V52.8863H112.027ZM112.027 52.8752V52.8863H113.527V52.8752H112.027ZM112.027 52.8641V52.8752H113.527V52.8641H112.027ZM112.027 52.8531V52.8641H113.527V52.8531H112.027ZM112.027 52.842V52.8531H113.527V52.842H112.027ZM112.027 52.831V52.842H113.527V52.831H112.027ZM112.027 52.82V52.831H113.527V52.82H112.027ZM112.027 52.8089V52.82H113.527V52.8089H112.027ZM112.027 52.7979V52.8089H113.527V52.7979H112.027ZM112.027 52.7869V52.7979H113.527V52.7869H112.027ZM112.027 52.7759V52.7869H113.527V52.7759H112.027ZM112.027 52.7649V52.7759H113.527V52.7649H112.027ZM112.027 52.7539V52.7649H113.527V52.7539H112.027ZM112.027 52.7429V52.7539H113.527V52.7429H112.027ZM112.027 52.7319V52.7429H113.527V52.7319H112.027ZM112.027 52.721V52.7319H113.527V52.721H112.027ZM112.027 52.71V52.721H113.527V52.71H112.027ZM112.027 52.699V52.71H113.527V52.699H112.027ZM112.027 52.688V52.699H113.527V52.688H112.027ZM112.027 52.6771V52.688H113.527V52.6771H112.027ZM112.027 52.6661V52.6771H113.527V52.6661H112.027ZM112.027 52.6552V52.6661H113.527V52.6552H112.027ZM112.027 52.6443V52.6552H113.527V52.6443H112.027ZM112.027 52.6333V52.6443H113.527V52.6333H112.027ZM112.027 52.6224V52.6333H113.527V52.6224H112.027ZM112.027 52.6115V52.6224H113.527V52.6115H112.027ZM112.027 52.6006V52.6115H113.527V52.6006H112.027ZM112.027 52.5897V52.6006H113.527V52.5897H112.027ZM112.027 52.5788V52.5897H113.527V52.5788H112.027ZM112.027 52.5679V52.5788H113.527V52.5679H112.027ZM112.027 52.557V52.5679H113.527V52.557H112.027ZM112.027 52.5461V52.557H113.527V52.5461H112.027ZM112.027 52.5352V52.5461H113.527V52.5352H112.027ZM112.027 52.5243V52.5352H113.527V52.5243H112.027ZM112.027 52.5135V52.5243H113.527V52.5135H112.027ZM112.027 52.5026V52.5135H113.527V52.5026H112.027ZM112.027 52.4918V52.5026H113.527V52.4918H112.027ZM112.027 52.4809V52.4918H113.527V52.4809H112.027ZM112.027 52.4701V52.4809H113.527V52.4701H112.027ZM112.027 52.4592V52.4701H113.527V52.4592H112.027ZM112.027 52.4484V52.4592H113.527V52.4484H112.027ZM112.027 52.4376V52.4484H113.527V52.4376H112.027ZM112.027 52.4268V52.4376H113.527V52.4268H112.027ZM112.027 52.4159V52.4268H113.527V52.4159H112.027ZM112.027 52.4051V52.4159H113.527V52.4051H112.027ZM112.027 52.3943V52.4051H113.527V52.3943H112.027ZM112.027 52.3835V52.3943H113.527V52.3835H112.027ZM112.027 52.3727V52.3835H113.527V52.3727H112.027ZM112.027 52.362V52.3727H113.527V52.362H112.027ZM112.027 52.3512V52.362H113.527V52.3512H112.027ZM112.027 52.3404V52.3512H113.527V52.3404H112.027ZM112.027 52.3296V52.3404H113.527V52.3296H112.027ZM112.027 52.3189V52.3296H113.527V52.3189H112.027ZM112.027 52.3081V52.3189H113.527V52.3081H112.027ZM112.027 52.2974V52.3081H113.527V52.2974H112.027ZM112.027 52.2866V52.2974H113.527V52.2866H112.027ZM112.027 52.2759V52.2866H113.527V52.2759H112.027ZM112.027 52.2652V52.2759H113.527V52.2652H112.027ZM112.027 52.2544V52.2652H113.527V52.2544H112.027ZM112.027 52.2437V52.2544H113.527V52.2437H112.027ZM112.027 52.233V52.2437H113.527V52.233H112.027ZM112.027 52.2223V52.233H113.527V52.2223H112.027ZM112.027 52.2116V52.2223H113.527V52.2116H112.027ZM112.027 52.2009V52.2116H113.527V52.2009H112.027ZM112.027 52.1902V52.2009H113.527V52.1902H112.027ZM112.027 52.1795V52.1902H113.527V52.1795H112.027ZM112.027 52.1688V52.1795H113.527V52.1688H112.027ZM112.027 52.1582V52.1688H113.527V52.1582H112.027ZM112.027 52.1475V52.1582H113.527V52.1475H112.027ZM112.027 52.1368V52.1475H113.527V52.1368H112.027ZM112.027 52.1262V52.1368H113.527V52.1262H112.027ZM112.027 52.1155V52.1262H113.527V52.1155H112.027ZM112.027 52.1049V52.1155H113.527V52.1049H112.027ZM112.027 52.0943V52.1049H113.527V52.0943H112.027ZM112.027 52.0836V52.0943H113.527V52.0836H112.027ZM112.027 52.073V52.0836H113.527V52.073H112.027ZM112.027 52.0624V52.073H113.527V52.0624H112.027ZM112.027 52.0518V52.0624H113.527V52.0518H112.027ZM112.027 52.0412V52.0518H113.527V52.0412H112.027ZM112.027 52.0306V52.0412H113.527V52.0306H112.027ZM112.027 52.02V52.0306H113.527V52.02H112.027ZM112.027 52.0094V52.02H113.527V52.0094H112.027ZM112.027 51.9988V52.0094H113.527V51.9988H112.027ZM112.027 51.9882V51.9988H113.527V51.9882H112.027ZM112.027 51.9776V51.9882H113.527V51.9776H112.027ZM112.027 51.9671V51.9776H113.527V51.9671H112.027ZM112.027 51.9565V51.9671H113.527V51.9565H112.027ZM112.027 51.946V51.9565H113.527V51.946H112.027ZM112.027 51.9354V51.946H113.527V51.9354H112.027ZM112.027 51.9249V51.9354H113.527V51.9249H112.027ZM112.027 51.9143V51.9249H113.527V51.9143H112.027ZM112.027 51.9038V51.9143H113.527V51.9038H112.027ZM112.027 51.8933V51.9038H113.527V51.8933H112.027ZM112.027 51.8828V51.8933H113.527V51.8828H112.027ZM112.027 51.8723V51.8828H113.527V51.8723H112.027ZM112.027 51.8617V51.8723H113.527V51.8617H112.027ZM112.027 51.8512V51.8617H113.527V51.8512H112.027ZM112.027 51.8407V51.8512H113.527V51.8407H112.027ZM112.027 51.8303V51.8407H113.527V51.8303H112.027ZM112.027 51.8198V51.8303H113.527V51.8198H112.027ZM112.027 51.8093V51.8198H113.527V51.8093H112.027ZM112.027 51.7988V51.8093H113.527V51.7988H112.027ZM112.027 51.7884V51.7988H113.527V51.7884H112.027ZM112.027 51.7779V51.7884H113.527V51.7779H112.027ZM112.027 51.7674V51.7779H113.527V51.7674H112.027ZM112.027 51.757V51.7674H113.527V51.757H112.027ZM112.027 51.7466V51.757H113.527V51.7466H112.027ZM112.027 51.7361V51.7466H113.527V51.7361H112.027ZM112.027 51.7257V51.7361H113.527V51.7257H112.027ZM112.027 51.7153V51.7257H113.527V51.7153H112.027ZM112.027 51.7048V51.7153H113.527V51.7048H112.027ZM112.027 51.6944V51.7048H113.527V51.6944H112.027ZM112.027 51.684V51.6944H113.527V51.684H112.027ZM112.027 51.6736V51.684H113.527V51.6736H112.027ZM112.027 51.6632V51.6736H113.527V51.6632H112.027ZM112.027 51.6528V51.6632H113.527V51.6528H112.027ZM112.027 51.6425V51.6528H113.527V51.6425H112.027ZM112.027 51.6321V51.6425H113.527V51.6321H112.027ZM112.027 51.6217V51.6321H113.527V51.6217H112.027ZM112.027 51.6113V51.6217H113.527V51.6113H112.027ZM112.027 51.601V51.6113H113.527V51.601H112.027ZM112.027 51.5906V51.601H113.527V51.5906H112.027ZM112.027 51.5803V51.5906H113.527V51.5803H112.027ZM112.027 51.5699V51.5803H113.527V51.5699H112.027ZM112.027 51.5596V51.5699H113.527V51.5596H112.027ZM112.027 51.5493V51.5596H113.527V51.5493H112.027ZM112.027 51.5389V51.5493H113.527V51.5389H112.027ZM112.027 51.5286V51.5389H113.527V51.5286H112.027ZM112.027 51.5183V51.5286H113.527V51.5183H112.027ZM112.027 51.508V51.5183H113.527V51.508H112.027ZM112.027 51.4977V51.508H113.527V51.4977H112.027ZM112.027 51.4874V51.4977H113.527V51.4874H112.027ZM112.027 51.4771V51.4874H113.527V51.4771H112.027ZM112.027 51.4668V51.4771H113.527V51.4668H112.027ZM112.027 51.4566V51.4668H113.527V51.4566H112.027ZM112.027 51.4463V51.4566H113.527V51.4463H112.027ZM112.027 51.436V51.4463H113.527V51.436H112.027ZM112.027 51.4258V51.436H113.527V51.4258H112.027ZM112.027 51.4155V51.4258H113.527V51.4155H112.027ZM112.027 51.4053V51.4155H113.527V51.4053H112.027ZM112.027 51.395V51.4053H113.527V51.395H112.027ZM112.027 51.3848V51.395H113.527V51.3848H112.027ZM112.027 51.3746V51.3848H113.527V51.3746H112.027ZM112.027 51.3643V51.3746H113.527V51.3643H112.027ZM112.027 51.3541V51.3643H113.527V51.3541H112.027ZM112.027 51.3439V51.3541H113.527V51.3439H112.027ZM112.027 51.3337V51.3439H113.527V51.3337H112.027ZM112.027 51.3235V51.3337H113.527V51.3235H112.027ZM112.027 51.3133V51.3235H113.527V51.3133H112.027ZM112.027 51.3031V51.3133H113.527V51.3031H112.027ZM112.027 51.2929V51.3031H113.527V51.2929H112.027ZM112.027 51.2828V51.2929H113.527V51.2828H112.027ZM112.027 51.2726V51.2828H113.527V51.2726H112.027ZM112.027 51.2624V51.2726H113.527V51.2624H112.027ZM112.027 51.2523V51.2624H113.527V51.2523H112.027ZM112.027 51.2421V51.2523H113.527V51.2421H112.027ZM112.027 51.232V51.2421H113.527V51.232H112.027ZM112.027 51.2218V51.232H113.527V51.2218H112.027ZM112.027 51.2117V51.2218H113.527V51.2117H112.027ZM112.027 51.2016V51.2117H113.527V51.2016H112.027ZM112.027 51.1914V51.2016H113.527V51.1914H112.027ZM112.027 51.1813V51.1914H113.527V51.1813H112.027ZM112.027 51.1712V51.1813H113.527V51.1712H112.027ZM112.027 51.1611V51.1712H113.527V51.1611H112.027ZM112.027 51.151V51.1611H113.527V51.151H112.027ZM112.027 51.1409V51.151H113.527V51.1409H112.027ZM112.027 51.1308V51.1409H113.527V51.1308H112.027ZM112.027 51.1207V51.1308H113.527V51.1207H112.027ZM112.027 51.1107V51.1207H113.527V51.1107H112.027ZM112.027 51.1006V51.1107H113.527V51.1006H112.027ZM112.027 51.0905V51.1006H113.527V51.0905H112.027ZM112.027 51.0805V51.0905H113.527V51.0805H112.027ZM112.027 51.0704V51.0805H113.527V51.0704H112.027ZM112.027 51.0604V51.0704H113.527V51.0604H112.027ZM112.027 51.0503V51.0604H113.527V51.0503H112.027ZM112.027 51.0403V51.0503H113.527V51.0403H112.027ZM112.027 51.0303V51.0403H113.527V51.0303H112.027ZM112.027 51.0202V51.0303H113.527V51.0202H112.027ZM112.027 51.0102V51.0202H113.527V51.0102H112.027ZM112.027 51.0002V51.0102H113.527V51.0002H112.027ZM112.027 50.9902V51.0002H113.527V50.9902H112.027ZM112.027 50.9802V50.9902H113.527V50.9802H112.027ZM112.027 50.9702V50.9802H113.527V50.9702H112.027ZM112.027 50.9602V50.9702H113.527V50.9602H112.027ZM112.027 50.9502V50.9602H113.527V50.9502H112.027ZM112.027 50.9403V50.9502H113.527V50.9403H112.027ZM112.027 50.9303V50.9403H113.527V50.9303H112.027ZM112.027 50.9203V50.9303H113.527V50.9203H112.027ZM112.027 50.9104V50.9203H113.527V50.9104H112.027ZM112.027 50.9004V50.9104H113.527V50.9004H112.027ZM112.027 50.8905V50.9004H113.527V50.8905H112.027ZM112.027 50.8805V50.8905H113.527V50.8805H112.027ZM112.027 50.8706V50.8805H113.527V50.8706H112.027ZM112.027 50.8607V50.8706H113.527V50.8607H112.027ZM112.027 50.8507V50.8607H113.527V50.8507H112.027ZM112.027 50.8408V50.8507H113.527V50.8408H112.027ZM112.027 50.8309V50.8408H113.527V50.8309H112.027ZM112.027 50.821V50.8309H113.527V50.821H112.027ZM112.027 50.8111V50.821H113.527V50.8111H112.027ZM112.027 50.8012V50.8111H113.527V50.8012H112.027ZM112.027 50.7913V50.8012H113.527V50.7913H112.027ZM112.027 50.7814V50.7913H113.527V50.7814H112.027ZM112.027 50.7716V50.7814H113.527V50.7716H112.027ZM112.027 50.7617V50.7716H113.527V50.7617H112.027ZM112.027 50.7518V50.7617H113.527V50.7518H112.027ZM112.027 50.742V50.7518H113.527V50.742H112.027ZM112.027 50.7321V50.742H113.527V50.7321H112.027ZM112.027 50.7223V50.7321H113.527V50.7223H112.027ZM112.027 50.7124V50.7223H113.527V50.7124H112.027ZM112.027 50.7026V50.7124H113.527V50.7026H112.027ZM112.027 50.6928V50.7026H113.527V50.6928H112.027ZM112.027 50.6829V50.6928H113.527V50.6829H112.027ZM112.027 50.6731V50.6829H113.527V50.6731H112.027ZM112.027 50.6633V50.6731H113.527V50.6633H112.027ZM112.027 50.6535V50.6633H113.527V50.6535H112.027ZM112.027 50.6437V50.6535H113.527V50.6437H112.027ZM112.027 50.6339V50.6437H113.527V50.6339H112.027ZM112.027 50.6241V50.6339H113.527V50.6241H112.027ZM112.027 50.6143V50.6241H113.527V50.6143H112.027ZM112.027 50.6046V50.6143H113.527V50.6046H112.027ZM112.027 50.5948V50.6046H113.527V50.5948H112.027ZM112.027 50.585V50.5948H113.527V50.585H112.027ZM112.027 50.5753V50.585H113.527V50.5753H112.027ZM112.027 50.5655V50.5753H113.527V50.5655H112.027ZM112.027 50.5558V50.5655H113.527V50.5558H112.027ZM112.027 50.546V50.5558H113.527V50.546H112.027ZM112.027 50.5363V50.546H113.527V50.5363H112.027ZM112.027 50.5266V50.5363H113.527V50.5266H112.027ZM112.027 50.5168V50.5266H113.527V50.5168H112.027ZM112.027 50.5071V50.5168H113.527V50.5071H112.027ZM112.027 50.4974V50.5071H113.527V50.4974H112.027ZM112.027 50.4877V50.4974H113.527V50.4877H112.027ZM112.027 50.478V50.4877H113.527V50.478H112.027ZM112.027 50.4683V50.478H113.527V50.4683H112.027ZM112.027 50.4586V50.4683H113.527V50.4586H112.027ZM112.027 50.4489V50.4586H113.527V50.4489H112.027ZM112.027 50.4393V50.4489H113.527V50.4393H112.027ZM112.027 50.4296V50.4393H113.527V50.4296H112.027ZM112.027 50.4199V50.4296H113.527V50.4199H112.027ZM112.027 50.4103V50.4199H113.527V50.4103H112.027ZM112.027 50.4006V50.4103H113.527V50.4006H112.027ZM112.027 50.391V50.4006H113.527V50.391H112.027ZM112.027 50.3813V50.391H113.527V50.3813H112.027ZM112.027 50.3717V50.3813H113.527V50.3717H112.027ZM112.027 50.3621V50.3717H113.527V50.3621H112.027ZM112.027 50.3525V50.3621H113.527V50.3525H112.027ZM112.027 50.3428V50.3525H113.527V50.3428H112.027ZM112.027 50.3332V50.3428H113.527V50.3332H112.027ZM112.027 50.3236V50.3332H113.527V50.3236H112.027ZM112.027 50.314V50.3236H113.527V50.314H112.027ZM112.027 50.3044V50.314H113.527V50.3044H112.027ZM112.027 50.2948V50.3044H113.527V50.2948H112.027ZM112.027 50.2853V50.2948H113.527V50.2853H112.027ZM112.027 50.2757V50.2853H113.527V50.2757H112.027ZM112.027 50.2661V50.2757H113.527V50.2661H112.027ZM112.027 50.2566V50.2661H113.527V50.2566H112.027ZM112.027 50.247V50.2566H113.527V50.247H112.027ZM112.027 50.2374V50.247H113.527V50.2374H112.027ZM112.027 50.2279V50.2374H113.527V50.2279H112.027ZM112.027 50.2184V50.2279H113.527V50.2184H112.027ZM112.027 50.2088V50.2184H113.527V50.2088H112.027ZM112.027 50.1993V50.2088H113.527V50.1993H112.027ZM112.027 50.1898V50.1993H113.527V50.1898H112.027ZM112.027 50.1803V50.1898H113.527V50.1803H112.027ZM112.027 50.1707V50.1803H113.527V50.1707H112.027ZM112.027 50.1612V50.1707H113.527V50.1612H112.027ZM112.027 50.1517V50.1612H113.527V50.1517H112.027ZM112.027 50.1423V50.1517H113.527V50.1423H112.027ZM112.027 50.1328V50.1423H113.527V50.1328H112.027ZM112.027 50.1233V50.1328H113.527V50.1233H112.027ZM112.027 50.1138V50.1233H113.527V50.1138H112.027ZM112.027 50.1043V50.1138H113.527V50.1043H112.027ZM112.027 50.0949V50.1043H113.527V50.0949H112.027ZM112.027 50.0854V50.0949H113.527V50.0854H112.027ZM112.027 50.076V50.0854H113.527V50.076H112.027ZM112.027 50.0665V50.076H113.527V50.0665H112.027ZM112.027 50.0571V50.0665H113.527V50.0571H112.027ZM112.027 50.0476V50.0571H113.527V50.0476H112.027ZM112.027 50.0382V50.0476H113.527V50.0382H112.027ZM112.027 50.0288V50.0382H113.527V50.0288H112.027ZM112.027 50.0194V50.0288H113.527V50.0194H112.027ZM112.027 50.01V50.0194H113.527V50.01H112.027ZM112.027 50.0006V50.01H113.527V50.0006H112.027ZM112.027 49.9912V50.0006H113.527V49.9912H112.027ZM112.027 49.9818V49.9912H113.527V49.9818H112.027ZM112.027 49.9724V49.9818H113.527V49.9724H112.027ZM112.027 49.963V49.9724H113.527V49.963H112.027ZM112.027 49.9536V49.963H113.527V49.9536H112.027ZM112.027 49.9443V49.9536H113.527V49.9443H112.027ZM112.027 49.9349V49.9443H113.527V49.9349H112.027ZM112.027 49.9255V49.9349H113.527V49.9255H112.027ZM112.027 49.9162V49.9255H113.527V49.9162H112.027ZM112.027 49.9068V49.9162H113.527V49.9068H112.027ZM112.027 49.8975V49.9068H113.527V49.8975H112.027ZM112.027 49.8882V49.8975H113.527V49.8882H112.027ZM112.027 49.8788V49.8882H113.527V49.8788H112.027ZM112.027 49.8695V49.8788H113.527V49.8695H112.027ZM112.027 49.8602V49.8695H113.527V49.8602H112.027ZM112.027 49.8509V49.8602H113.527V49.8509H112.027ZM112.027 49.8416V49.8509H113.527V49.8416H112.027ZM112.027 49.8323V49.8416H113.527V49.8323H112.027ZM112.027 49.823V49.8323H113.527V49.823H112.027ZM112.027 49.8137V49.823H113.527V49.8137H112.027ZM112.027 49.8044V49.8137H113.527V49.8044H112.027ZM112.027 49.7952V49.8044H113.527V49.7952H112.027ZM112.027 49.7859V49.7952H113.527V49.7859H112.027ZM112.027 49.7766V49.7859H113.527V49.7766H112.027ZM112.027 49.7674V49.7766H113.527V49.7674H112.027ZM112.027 49.7581V49.7674H113.527V49.7581H112.027ZM112.027 49.7489V49.7581H113.527V49.7489H112.027ZM112.027 49.7396V49.7489H113.527V49.7396H112.027ZM112.027 49.7304V49.7396H113.527V49.7304H112.027ZM112.027 49.7212V49.7304H113.527V49.7212H112.027ZM112.027 49.712V49.7212H113.527V49.712H112.027ZM112.027 49.7027V49.712H113.527V49.7027H112.027ZM112.027 49.6935V49.7027H113.527V49.6935H112.027ZM112.027 49.6843V49.6935H113.527V49.6843H112.027ZM112.027 49.6751V49.6843H113.527V49.6751H112.027ZM112.027 49.6659V49.6751H113.527V49.6659H112.027ZM112.027 49.6567V49.6659H113.527V49.6567H112.027ZM112.027 49.6476V49.6567H113.527V49.6476H112.027ZM112.027 49.6384V49.6476H113.527V49.6384H112.027ZM112.027 49.6292V49.6384H113.527V49.6292H112.027ZM112.027 49.6201V49.6292H113.527V49.6201H112.027ZM112.027 49.6109V49.6201H113.527V49.6109H112.027ZM112.027 49.6018V49.6109H113.527V49.6018H112.027ZM112.027 49.5926V49.6018H113.527V49.5926H112.027ZM112.027 49.5835V49.5926H113.527V49.5835H112.027ZM112.027 49.5743V49.5835H113.527V49.5743H112.027ZM112.027 49.5652V49.5743H113.527V49.5652H112.027ZM112.027 49.5561V49.5652H113.527V49.5561H112.027ZM112.027 49.547V49.5561H113.527V49.547H112.027ZM112.027 49.5379V49.547H113.527V49.5379H112.027ZM112.027 49.5288V49.5379H113.527V49.5288H112.027ZM112.027 49.5197V49.5288H113.527V49.5197H112.027ZM112.027 49.5106V49.5197H113.527V49.5106H112.027ZM112.027 49.5015V49.5106H113.527V49.5015H112.027ZM112.027 49.4924V49.5015H113.527V49.4924H112.027ZM112.027 49.4833V49.4924H113.527V49.4833H112.027ZM112.027 49.4743V49.4833H113.527V49.4743H112.027ZM112.027 49.4652V49.4743H113.527V49.4652H112.027ZM112.027 49.4561V49.4652H113.527V49.4561H112.027ZM112.027 49.4471V49.4561H113.527V49.4471H112.027ZM112.027 49.438V49.4471H113.527V49.438H112.027ZM112.027 49.429V49.438H113.527V49.429H112.027ZM112.027 49.42V49.429H113.527V49.42H112.027ZM112.027 49.4109V49.42H113.527V49.4109H112.027ZM112.027 49.4019V49.4109H113.527V49.4019H112.027ZM112.027 49.3929V49.4019H113.527V49.3929H112.027ZM112.027 49.3839V49.3929H113.527V49.3839H112.027ZM112.027 49.3749V49.3839H113.527V49.3749H112.027ZM112.027 49.3659V49.3749H113.527V49.3659H112.027ZM112.027 49.3569V49.3659H113.527V49.3569H112.027ZM112.027 49.3479V49.3569H113.527V49.3479H112.027ZM112.027 49.3389V49.3479H113.527V49.3389H112.027ZM112.027 49.33V49.3389H113.527V49.33H112.027ZM112.027 49.321V49.33H113.527V49.321H112.027ZM112.027 49.312V49.321H113.527V49.312H112.027ZM112.027 49.3031V49.312H113.527V49.3031H112.027ZM112.027 49.2941V49.3031H113.527V49.2941H112.027ZM112.027 49.2852V49.2941H113.527V49.2852H112.027ZM112.027 49.2762V49.2852H113.527V49.2762H112.027ZM112.027 49.2673V49.2762H113.527V49.2673H112.027ZM112.027 49.2584V49.2673H113.527V49.2584H112.027ZM112.027 49.2495V49.2584H113.527V49.2495H112.027ZM112.027 49.2406V49.2495H113.527V49.2406H112.027ZM112.027 49.2316V49.2406H113.527V49.2316H112.027ZM112.027 49.2227V49.2316H113.527V49.2227H112.027ZM112.027 49.2138V49.2227H113.527V49.2138H112.027ZM112.027 49.205V49.2138H113.527V49.205H112.027ZM112.027 49.1961V49.205H113.527V49.1961H112.027ZM112.027 49.1872V49.1961H113.527V49.1872H112.027ZM112.027 49.1783V49.1872H113.527V49.1783H112.027ZM112.027 49.1694V49.1783H113.527V49.1694H112.027Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M108.189 61.8477H127.537C129.331 61.8477 130.787 63.3027 130.787 65.0977V65.4391C130.787 67.234 129.331 68.6891 127.537 68.6891H108.189V61.8477Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M108.189 85.0186H127.537C129.331 85.0186 130.787 86.4736 130.787 88.2686V88.61C130.787 90.4049 129.331 91.86 127.537 91.86H108.189V85.0186Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M58.1401 50.2686C58.1401 48.4736 59.5952 47.0186 61.3901 47.0186H85.3718V106.689H61.3901C59.5952 106.689 58.1401 105.234 58.1401 103.439V50.2686Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M61.0977 51.9756C61.0977 50.871 61.9931 49.9756 63.0977 49.9756L82.4147 49.9756V103.732H63.0977C61.9931 103.732 61.0977 102.836 61.0977 101.732V51.9756Z", fill: "#3040D6", fillOpacity: "0.05" })); const Rocket = ({ width = 249, height = 179 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 249 179", version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("defs", null, /*#__PURE__*/React__namespace.default.createElement("linearGradient", { x1: "50%", y1: "0%", x2: "50%", y2: "100%", id: "linearGradient-1" }, /*#__PURE__*/React__namespace.default.createElement("stop", { stopColor: "#FFAB86", offset: "0%" }), /*#__PURE__*/React__namespace.default.createElement("stop", { stopColor: "#FFB44E", offset: "100%" })), /*#__PURE__*/React__namespace.default.createElement("linearGradient", { x1: "50%", y1: "0%", x2: "50%", y2: "100%", id: "linearGradient-2" }, /*#__PURE__*/React__namespace.default.createElement("stop", { stopColor: "#FFAB86", offset: "0%" }), /*#__PURE__*/React__namespace.default.createElement("stop", { stopColor: "#FFB44E", offset: "100%" })), /*#__PURE__*/React__namespace.default.createElement("linearGradient", { x1: "50%", y1: "0%", x2: "50%", y2: "100%", id: "linearGradient-3" }, /*#__PURE__*/React__namespace.default.createElement("stop", { stopColor: "#FFF2B1", offset: "0%" }), /*#__PURE__*/React__namespace.default.createElement("stop", { stopColor: "#FFEA7E", offset: "100%" })), /*#__PURE__*/React__namespace.default.createElement("linearGradient", { x1: "50%", y1: "0%", x2: "50%", y2: "100%", id: "linearGradient-4" }, /*#__PURE__*/React__namespace.default.createElement("stop", { stopColor: "#FFF2B1", offset: "0%" }), /*#__PURE__*/React__namespace.default.createElement("stop", { stopColor: "#FFCD7E", offset: "100%" })), /*#__PURE__*/React__namespace.default.createElement("linearGradient", { x1: "50%", y1: "0%", x2: "50%", y2: "100%", id: "linearGradient-5" }, /*#__PURE__*/React__namespace.default.createElement("stop", { stopColor: "#FFAB86", offset: "0%" }), /*#__PURE__*/React__namespace.default.createElement("stop", { stopColor: "#FFB44E", offset: "100%" })), /*#__PURE__*/React__namespace.default.createElement("linearGradient", { x1: "50%", y1: "0%", x2: "50%", y2: "100%", id: "linearGradient-6" }, /*#__PURE__*/React__namespace.default.createElement("stop", { stopColor: "#FFF2B1", offset: "0%" }), /*#__PURE__*/React__namespace.default.createElement("stop", { stopColor: "#FFEA7E", offset: "100%" })), /*#__PURE__*/React__namespace.default.createElement("linearGradient", { x1: "50%", y1: "0%", x2: "50%", y2: "100%", id: "linearGradient-7" }, /*#__PURE__*/React__namespace.default.createElement("stop", { stopColor: "#FFF2B1", offset: "0%" }), /*#__PURE__*/React__namespace.default.createElement("stop", { stopColor: "#FFCD7E", offset: "100%" }))), /*#__PURE__*/React__namespace.default.createElement("g", { id: "Main-Templates", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Rocket-with-motion", transform: "translate(140.500000, 74.000000) rotate(17.000000) translate(-140.500000, -74.000000) translate(19.000000, -40.000000)" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Rocket", transform: "translate(137.662345, 112.855740) rotate(7.000000) translate(-137.662345, -112.855740) translate(44.162345, 11.355740)" }, /*#__PURE__*/React__namespace.default.createElement("g", { id: "Group-15" }, /*#__PURE__*/React__namespace.default.createElement("ellipse", { id: "Oval-Copy-29", fill: "#F4E8DB", cx: "116.379625", cy: "57.5932962", rx: "2.01348833", ry: "2.01375162" }), /*#__PURE__*/React__namespace.default.createElement("ellipse", { id: "Oval-Copy-31", fill: "#F4E8DB", cx: "34.2293016", cy: "155.058874", rx: "2.01348833", ry: "2.01375162" }), /*#__PURE__*/React__namespace.default.createElement("ellipse", { id: "Oval-Copy-19", fill: "#F4E8DB", cx: "160.273671", cy: "140.157112", rx: "4.02697665", ry: "4.02750323" }), /*#__PURE__*/React__namespace.default.createElement("ellipse", { id: "Oval-Copy-23", fill: "#F4E8DB", cx: "74.0963704", cy: "51.5520414", rx: "4.02697665", ry: "4.02750323" }), /*#__PURE__*/React__namespace.default.createElement("g", { id: "Group-13", transform: "translate(7.404023, 136.898722)" }, /*#__PURE__*/React__namespace.default.createElement("path", { d: "M29.2933675,62.4051811 C35.8296538,62.4051811 41.1280139,56.981389 41.127586,50.2898688 C41.1271581,43.5983485 33.1286817,0.598536152 29.2894151,0.598536152 C25.4501486,0.598536152 17.4571716,43.5968348 17.4575995,50.2883551 C17.4580274,56.9798753 22.7570812,62.4051811 29.2933675,62.4051811 Z", id: "Oval-Copy-38", fill: "url(#linearGradient-2)", transform: "translate(29.292593, 31.501859) rotate(-141.000000) translate(-29.292593, -31.501859) " }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M31.7199672,52.9593428 C36.0774914,52.9593428 39.6097439,49.5375303 39.6094739,45.3158883 C39.609204,41.0942463 36.2259176,5.20641018 31.9585807,5.20641018 C27.6912437,5.20641018 23.829213,41.0932372 23.8294829,45.3148792 C23.8297529,49.5365212 27.362443,52.9593428 31.7199672,52.9593428 Z", id: "Oval-Copy-39", fill: "url(#linearGradient-3)", transform: "translate(31.719478, 29.082876) rotate(-141.000000) translate(-31.719478, -29.082876) " }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M34.9968773,41.9727682 C38.5555221,41.9727682 41.440206,39.3509657 41.4399991,36.1163003 C41.4397923,32.8816348 39.1523789,8.14353111 35.5937342,8.14353111 C32.0350894,8.14353111 28.5527996,32.8808107 28.5530065,36.1154762 C28.5532133,39.3501416 31.4382326,41.9727682 34.9968773,41.9727682 Z", id: "Oval-Copy-39", fill: "url(#linearGradient-4)", transform: "translate(34.996503, 25.058150) rotate(-141.000000) translate(-34.996503, -25.058150) " })), /*#__PURE__*/React__namespace.default.createElement("g", { id: "Group-11", transform: "translate(102.175136, 89.252917) rotate(40.000000) translate(-102.175136, -89.252917) translate(59.675136, 8.752917)", fillRule: "nonzero", stroke: "#C9D1F6", strokeWidth: "1.97424893" }, /*#__PURE__*/React__namespace.default.createElement("path", { d: "M67.7777024,49.7502517 L70.9362925,43.3067657 C71.4162191,42.3277211 72.598949,41.9231061 73.5779935,42.4030327 C73.9711105,42.5957382 74.289021,42.9136487 74.4817265,43.3067657 L77.6403166,49.7502517 C78.8999695,52.3199286 79.5548698,55.1437885 79.5548698,58.0055999 L79.5548698,151.358137 C79.5548698,151.903311 79.1129192,152.345261 78.5677454,152.345261 L66.8502737,152.345261 C66.3050999,152.345261 65.8631492,151.903311 65.8631492,151.358137 L65.8631492,58.0055999 C65.8631492,55.1437885 66.5180495,52.3199286 67.7777024,49.7502517 Z", id: "Rectangle", fill: "#FFFFFF", strokeLinejoin: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M7.91445895,50.2479489 L11.0730491,43.8044629 C11.5529757,42.8254183 12.7357055,42.4208033 13.7147501,42.9007299 C14.107867,43.0934354 14.4257776,43.4113459 14.6184831,43.8044629 L17.7770732,50.2479489 C19.0367261,52.8176258 19.6916264,55.6414857 19.6916264,58.5032971 L19.6916264,151.855834 C19.6916264,152.401008 19.2496757,152.842959 18.7045019,152.842959 L6.98703021,152.842959 C6.44185643,152.842959 5.99990575,152.401008 5.99990575,151.855834 L5.99990575,58.5032971 C5.99990575,55.6414857 6.65480605,52.8176258 7.91445895,50.2479489 Z", id: "Rectangle-Copy-11", fill: "#FFFFFF", strokeLinejoin: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M33.0906011,11.354303 L39.4002623,2.2723825 C40.6444904,0.481481126 43.104949,0.0383148853 44.8958504,1.282543 C45.2821175,1.55090196 45.6173309,1.88611536 45.8856899,2.2723825 L52.195351,11.354303 C57.249981,18.6297726 59.9589757,27.2769281 59.9589757,36.1359202 L59.9589757,116.427862 L59.9589757,116.427862 L25.3269765,116.427862 L25.3269765,36.1359202 C25.3269765,27.2769281 28.0359712,18.6297726 33.0906011,11.354303 Z", id: "Rectangle", fill: "#F0F1F9", strokeLinejoin: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M51.0709343,145.945436 L52.4616111,78.430609 L57.2782797,97.1345431 C59.5841699,106.088702 64.1795587,114.289067 70.6130652,120.930158 L75.1292812,125.592095 C78.7263886,129.305267 81.1674641,133.983364 82.155819,139.057808 L83.2511862,144.681678 C83.2493456,145.075537 83.1550246,145.406318 82.9636792,145.638528 C82.7984747,145.839014 82.5607084,145.945436 82.2993925,145.945436 L51.0709343,145.945436 Z", id: "Path-3", fill: "#F0F1F9" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M1.47150229,145.425806 L2.86217912,77.9109797 L7.67884773,96.6149137 C9.98473789,105.569073 14.5801267,113.769438 21.0136332,120.410529 L25.5298492,125.072466 C29.1269566,128.785638 31.5680321,133.463734 32.556387,138.538179 L33.6517543,144.162049 C33.6499136,144.555907 33.5555926,144.886689 33.3642472,145.118899 C33.1990427,145.319385 32.9612764,145.425806 32.6999605,145.425806 L1.47150229,145.425806 Z", id: "Path-3-Copy", fill: "#F0F1F9", transform: "translate(17.779835, 108.554400) scale(-1, 1) translate(-17.779835, -108.554400) " }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M34.132116,58.9706471 L38.6749518,50.4371325 C39.9558754,48.0309746 42.9448456,47.1187919 45.3510036,48.3997155 C46.2176737,48.8610893 46.9270468,49.5704624 47.3884206,50.4371325 L51.9312564,58.9706471 C53.7557124,62.3978065 54.7099185,66.2208379 54.7099185,70.1033707 L54.7099185,151.938396 L54.7099185,151.938396 L31.3534539,151.938396 L31.3534539,70.1033707 C31.3534539,66.2208379 32.3076599,62.3978065 34.132116,58.9706471 Z", id: "Rectangle-2", fill: "#FFFFFF", strokeLinejoin: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M59.4280489,155.429317 L25.9649033,155.429317 L25.9649033,146.347684 C25.9649033,143.83986 26.9813998,141.569451 28.6248522,139.925999 C30.2683047,138.282547 32.5387131,137.26605 35.0465369,137.26605 L50.3464153,137.26605 C52.8542392,137.26605 55.1246476,138.282547 56.7681,139.925999 C58.4115525,141.569451 59.4280489,143.83986 59.4280489,146.347684 L59.4280489,155.429317 Z", id: "Rectangle", fill: "#FFFFFF" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M42.9716921,126.282389 L42.9716921,160.264511", id: "Line-2", fill: "#F0F1F9", strokeLinecap: "round" })), /*#__PURE__*/React__namespace.default.createElement("g", { id: "Group-14", transform: "translate(45.907534, 162.711131)" }, /*#__PURE__*/React__namespace.default.createElement("path", { d: "M17.7186,38.6625878 C21.7220753,38.6625878 24.9673209,35.3405151 24.9670588,31.241959 C24.9667967,27.1434028 19.3527647,0.806017733 17.7161791,0.806017733 C16.0795936,0.806017733 10.46893,27.1424757 10.469192,31.2410318 C10.4694541,35.339588 13.7151246,38.6625878 17.7186,38.6625878 Z", id: "Oval", fill: "url(#linearGradient-5)", transform: "translate(17.718125, 19.734303) rotate(-141.000000) translate(-17.718125, -19.734303) " }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M19.8990176,30.9168623 C22.5680012,30.9168623 24.7315058,28.8210022 24.7313405,26.2352465 C24.7311751,23.6494907 23.015537,3.87414324 20.3465534,3.87414324 C17.6775699,3.87414324 15.0659306,23.6488726 15.066096,26.2346284 C15.0662613,28.8203841 17.2300341,30.9168623 19.8990176,30.9168623 Z", id: "Oval-Copy-35", fill: "url(#linearGradient-6)", transform: "translate(19.898718, 17.395503) rotate(-141.000000) translate(-19.898718, -17.395503) " }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M21.5173735,25.4314166 C23.5191112,25.4314166 25.1417404,23.8708065 25.1416173,21.9454104 C25.1414942,20.0200143 23.8547724,5.29496477 21.8530347,5.29496477 C19.851297,5.29496477 17.8925608,20.0195507 17.8926839,21.9449468 C17.8928071,23.8703429 19.5156359,25.4314166 21.5173735,25.4314166 Z", id: "Oval-Copy-40", fill: "url(#linearGradient-7)", transform: "translate(21.517151, 15.363191) rotate(-141.000000) translate(-21.517151, -15.363191) " })), /*#__PURE__*/React__namespace.default.createElement("g", { id: "Group-14-Copy", transform: "translate(0.000000, 124.047100)" }, /*#__PURE__*/React__namespace.default.createElement("path", { d: "M17.7186,38.6625878 C21.7220753,38.6625878 24.9673209,35.3405151 24.9670588,31.241959 C24.9667967,27.1434028 19.3527647,0.806017733 17.7161791,0.806017733 C16.0795936,0.806017733 10.46893,27.1424757 10.469192,31.2410318 C10.4694541,35.339588 13.7151246,38.6625878 17.7186,38.6625878 Z", id: "Oval", fill: "url(#linearGradient-5)", transform: "translate(17.718125, 19.734303) rotate(-141.000000) translate(-17.718125, -19.734303) " }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M19.8990176,30.9168623 C22.5680012,30.9168623 24.7315058,28.8210022 24.7313405,26.2352465 C24.7311751,23.6494907 23.015537,3.87414324 20.3465534,3.87414324 C17.6775699,3.87414324 15.0659306,23.6488726 15.066096,26.2346284 C15.0662613,28.8203841 17.2300341,30.9168623 19.8990176,30.9168623 Z", id: "Oval-Copy-35", fill: "url(#linearGradient-6)", transform: "translate(19.898718, 17.395503) rotate(-141.000000) translate(-19.898718, -17.395503) " }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M21.5173735,25.4314166 C23.5191112,25.4314166 25.1417404,23.8708065 25.1416173,21.9454104 C25.1414942,20.0200143 23.8547724,5.29496477 21.8530347,5.29496477 C19.851297,5.29496477 17.8925608,20.0195507 17.8926839,21.9449468 C17.8928071,23.8703429 19.5156359,25.4314166 21.5173735,25.4314166 Z", id: "Oval-Copy-40", fill: "url(#linearGradient-7)", transform: "translate(21.517151, 15.363191) rotate(-141.000000) translate(-21.517151, -15.363191) " }))), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M80.0494403,116.335122 C88.8076699,101.144407 113.894541,71.6934295 155.310052,27.9821891 L155.310052,13.433931 L76.2854597,24.2179367 L9.01739077,110.071572 L67.1069868,158.925202 L90.4566162,178.55709 C74.7602694,152.266493 71.2912108,131.525837 80.0494403,116.335122 Z", id: "Path-8", fillOpacity: "0.16", fill: "#192035" }), /*#__PURE__*/React__namespace.default.createElement("ellipse", { id: "Oval", stroke: "#ACB3D7", strokeWidth: "0.987124464", fill: "#CBD5FD", cx: "134.150589", cy: "51.1969656", rx: "6.09273175", ry: "6.08892935" }), /*#__PURE__*/React__namespace.default.createElement("ellipse", { id: "Oval-Copy-36", fill: "#ACB3D7", cx: "134.13899", cy: "51.1391751", rx: "3.80795734", ry: "3.80558084" }), /*#__PURE__*/React__namespace.default.createElement("ellipse", { id: "Oval-Copy-37", fill: "#CBD4FF", cx: "131.474713", cy: "49.3326297", rx: "2.28477441", ry: "2.28334851" }), /*#__PURE__*/React__namespace.default.createElement("ellipse", { id: "Oval-Copy-41", fill: "#CBD4FF", cx: "135.128283", cy: "51.6142094", rx: "1", ry: "1" })), /*#__PURE__*/React__namespace.default.createElement("circle", { id: "Oval-Copy-31", fill: "#F4E8DB", cx: "38.1284868", cy: "108.303169", r: "1" }), /*#__PURE__*/React__namespace.default.createElement("circle", { id: "Oval-Copy-22", fill: "#F4E8DB", cx: "4.32112887", cy: "163.723438", r: "3.94849785" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "153.739825", y1: "166.762478", x2: "133.010212", y2: "186.504967", id: "Path-9-Copy", stroke: "#F4E8DA", strokeWidth: "2.96137339", strokeLinecap: "round", strokeLinejoin: "round" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "71.0180476", y1: "196.046139", x2: "54.2369317", y2: "210.853006", id: "Path-9-Copy-2", stroke: "#F4E8DA", strokeWidth: "2.96137339", strokeLinecap: "round", strokeLinejoin: "round" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "39.4304561", y1: "139.905466", x2: "27.5849626", y2: "150.763835", id: "Path-9-Copy-5", stroke: "#F4E8DA", strokeWidth: "2.96137339", strokeLinecap: "round", strokeLinejoin: "round" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "27.0808447", y1: "220.357763", x2: "18.1967246", y2: "226.28051", id: "Path-9-Copy-6", stroke: "#F4E8DA", strokeWidth: "2.96137339", strokeLinecap: "round", strokeLinejoin: "round" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "42.5501636", y1: "169.913846", x2: "4.05230955", y2: "203.476077", id: "Path-9-Copy-3", stroke: "#F4E8DA", strokeWidth: "2.96137339", strokeLinecap: "round", strokeLinejoin: "round" }), /*#__PURE__*/React__namespace.default.createElement("line", { x1: "143.094269", y1: "193.740995", x2: "104.596415", y2: "227.303226", id: "Path-9-Copy-4", stroke: "#F4E8DA", strokeWidth: "2.96137339", strokeLinecap: "round", strokeLinejoin: "round" })))); const RocketNew = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M59.8604 39.8925C59.8604 36.3622 61.0179 32.9292 63.1556 30.1197C69.6145 21.6308 82.3852 21.6308 88.8442 30.1197C90.9819 32.9292 92.1394 36.3622 92.1394 39.8925V109.692H59.8604V39.8925Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M80.3591 25.5337C80.9896 26.0135 81.5525 26.5763 82.0323 27.2069C86.5715 33.1727 89.0294 40.4622 89.0294 47.9585V99.5768L78.4131 99.5763L78.4134 26.6599C78.4134 25.6234 79.5342 24.9061 80.3591 25.5337Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M92.1914 54.2785C92.1914 52.6956 92.7301 51.1598 93.719 49.9238C96.5096 46.4355 101.815 46.4355 104.606 49.9238C105.595 51.1598 106.133 52.6956 106.133 54.2785V109.692H92.1914V54.2785Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M100.804 48.5662C101 48.723 101.178 48.901 101.335 49.097C103.053 51.2446 103.989 53.913 103.989 56.6632V92.8892L98.6807 92.8884L98.6807 50.0896C98.6807 48.9005 99.8754 47.8234 100.804 48.5662Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M62.7559 53.832C62.7559 50.6816 63.8789 47.6343 65.9234 45.2373C71.211 39.0381 80.7891 39.0381 86.0767 45.2373C88.1212 47.6343 89.2442 50.6816 89.2442 53.832V114.518H62.7559V53.832Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76.0003", cy: "64.5989", r: "6.34302", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M71.541 134.989L68.7117 120.843H83.289L80.4597 134.989C80.0346 137.115 78.1681 138.645 76.0004 138.645C73.8326 138.645 71.9662 137.115 71.541 134.989Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M97.2843 127.363L95.6827 116.018H102.642L101.04 127.363C100.908 128.299 100.107 128.994 99.1624 128.994C98.2173 128.994 97.4164 128.299 97.2843 127.363Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M65.2854 119.237L66.4523 114.569H85.5486L86.7156 119.237C86.9128 120.026 86.3161 120.79 85.5029 120.79H66.4981C65.6849 120.79 65.0882 120.026 65.2854 119.237Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M94.2385 114.412L95.4055 109.744H102.92L104.087 114.412C104.285 115.201 103.688 115.965 102.875 115.965H95.4512C94.638 115.965 94.0413 115.201 94.2385 114.412Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M45.8662 54.2785C45.8662 52.6956 46.4049 51.1598 47.3938 49.9238C50.1844 46.4355 55.4899 46.4355 58.2805 49.9238C59.2694 51.1598 59.8081 52.6956 59.8081 54.2785V109.692H45.8662V54.2785Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M40.8662 72.2192V72.9692H41.6162V72.2192H40.8662ZM39.3662 72.2192H38.6162V72.9692H39.3662V72.2192ZM39.3662 66.2907V65.5407H38.6162V66.2907H39.3662ZM40.8662 66.2907H41.6162V65.5407H40.8662V66.2907ZM47.0623 41.3374L47.648 41.806L48.1165 41.2203L47.5308 40.7518L47.0623 41.3374ZM40.8662 62.1457V62.8957H41.6162V62.1457H40.8662ZM39.3662 62.1457H38.6162V62.8957H39.3662V62.1457ZM45.891 40.4004L46.3595 39.8147L45.7739 39.3462L45.3054 39.9319L45.891 40.4004ZM41.6162 72.2192V72.206H40.1162V72.2192H41.6162ZM39.3662 72.9692H40.8662V71.4692H39.3662V72.9692ZM38.6162 72.206V72.2192H40.1162V72.206H38.6162ZM38.6162 72.1928V72.206H40.1162V72.1928H38.6162ZM38.6162 72.1797V72.1928H40.1162V72.1797H38.6162ZM38.6162 72.1665V72.1797H40.1162V72.1665H38.6162ZM38.6162 72.1534V72.1665H40.1162V72.1534H38.6162ZM38.6162 72.1403V72.1534H40.1162V72.1403H38.6162ZM38.6162 72.1271V72.1403H40.1162V72.1271H38.6162ZM38.6162 72.114V72.1271H40.1162V72.114H38.6162ZM38.6162 72.1009V72.114H40.1162V72.1009H38.6162ZM38.6162 72.0878V72.1009H40.1162V72.0878H38.6162ZM38.6162 72.0747V72.0878H40.1162V72.0747H38.6162ZM38.6162 72.0616V72.0747H40.1162V72.0616H38.6162ZM38.6162 72.0485V72.0616H40.1162V72.0485H38.6162ZM38.6162 72.0354V72.0485H40.1162V72.0354H38.6162ZM38.6162 72.0224V72.0354H40.1162V72.0224H38.6162ZM38.6162 72.0093V72.0224H40.1162V72.0093H38.6162ZM38.6162 71.9962V72.0093H40.1162V71.9962H38.6162ZM38.6162 71.9832V71.9962H40.1162V71.9832H38.6162ZM38.6162 71.9701V71.9832H40.1162V71.9701H38.6162ZM38.6162 71.9571V71.9701H40.1162V71.9571H38.6162ZM38.6162 71.944V71.9571H40.1162V71.944H38.6162ZM38.6162 71.931V71.944H40.1162V71.931H38.6162ZM38.6162 71.918V71.931H40.1162V71.918H38.6162ZM38.6162 71.9049V71.918H40.1162V71.9049H38.6162ZM38.6162 71.8919V71.9049H40.1162V71.8919H38.6162ZM38.6162 71.8789V71.8919H40.1162V71.8789H38.6162ZM38.6162 71.8659V71.8789H40.1162V71.8659H38.6162ZM38.6162 71.8529V71.8659H40.1162V71.8529H38.6162ZM38.6162 71.8399V71.8529H40.1162V71.8399H38.6162ZM38.6162 71.8269V71.8399H40.1162V71.8269H38.6162ZM38.6162 71.814V71.8269H40.1162V71.814H38.6162ZM38.6162 71.801V71.814H40.1162V71.801H38.6162ZM38.6162 71.788V71.801H40.1162V71.788H38.6162ZM38.6162 71.7751V71.788H40.1162V71.7751H38.6162ZM38.6162 71.7621V71.7751H40.1162V71.7621H38.6162ZM38.6162 71.7492V71.7621H40.1162V71.7492H38.6162ZM38.6162 71.7362V71.7492H40.1162V71.7362H38.6162ZM38.6162 71.7233V71.7362H40.1162V71.7233H38.6162ZM38.6162 71.7104V71.7233H40.1162V71.7104H38.6162ZM38.6162 71.6974V71.7104H40.1162V71.6974H38.6162ZM38.6162 71.6845V71.6974H40.1162V71.6845H38.6162ZM38.6162 71.6716V71.6845H40.1162V71.6716H38.6162ZM38.6162 71.6587V71.6716H40.1162V71.6587H38.6162ZM38.6162 71.6458V71.6587H40.1162V71.6458H38.6162ZM38.6162 71.6329V71.6458H40.1162V71.6329H38.6162ZM38.6162 71.62V71.6329H40.1162V71.62H38.6162ZM38.6162 71.6072V71.62H40.1162V71.6072H38.6162ZM38.6162 71.5943V71.6072H40.1162V71.5943H38.6162ZM38.6162 71.5814V71.5943H40.1162V71.5814H38.6162ZM38.6162 71.5686V71.5814H40.1162V71.5686H38.6162ZM38.6162 71.5557V71.5686H40.1162V71.5557H38.6162ZM38.6162 71.5429V71.5557H40.1162V71.5429H38.6162ZM38.6162 71.53V71.5429H40.1162V71.53H38.6162ZM38.6162 71.5172V71.53H40.1162V71.5172H38.6162ZM38.6162 71.5044V71.5172H40.1162V71.5044H38.6162ZM38.6162 71.4915V71.5044H40.1162V71.4915H38.6162ZM38.6162 71.4787V71.4915H40.1162V71.4787H38.6162ZM38.6162 71.4659V71.4787H40.1162V71.4659H38.6162ZM38.6162 71.4531V71.4659H40.1162V71.4531H38.6162ZM38.6162 71.4403V71.4531H40.1162V71.4403H38.6162ZM38.6162 71.4275V71.4403H40.1162V71.4275H38.6162ZM38.6162 71.4147V71.4275H40.1162V71.4147H38.6162ZM38.6162 71.402V71.4147H40.1162V71.402H38.6162ZM38.6162 71.3892V71.402H40.1162V71.3892H38.6162ZM38.6162 71.3764V71.3892H40.1162V71.3764H38.6162ZM38.6162 71.3636V71.3764H40.1162V71.3636H38.6162ZM38.6162 71.3509V71.3636H40.1162V71.3509H38.6162ZM38.6162 71.3381V71.3509H40.1162V71.3381H38.6162ZM38.6162 71.3254V71.3381H40.1162V71.3254H38.6162ZM38.6162 71.3127V71.3254H40.1162V71.3127H38.6162ZM38.6162 71.2999V71.3127H40.1162V71.2999H38.6162ZM38.6162 71.2872V71.2999H40.1162V71.2872H38.6162ZM38.6162 71.2745V71.2872H40.1162V71.2745H38.6162ZM38.6162 71.2618V71.2745H40.1162V71.2618H38.6162ZM38.6162 71.2491V71.2618H40.1162V71.2491H38.6162ZM38.6162 71.2364V71.2491H40.1162V71.2364H38.6162ZM38.6162 71.2237V71.2364H40.1162V71.2237H38.6162ZM38.6162 71.211V71.2237H40.1162V71.211H38.6162ZM38.6162 71.1983V71.211H40.1162V71.1983H38.6162ZM38.6162 71.1857V71.1983H40.1162V71.1857H38.6162ZM38.6162 71.173V71.1857H40.1162V71.173H38.6162ZM38.6162 71.1603V71.173H40.1162V71.1603H38.6162ZM38.6162 71.1477V71.1603H40.1162V71.1477H38.6162ZM38.6162 71.135V71.1477H40.1162V71.135H38.6162ZM38.6162 71.1224V71.135H40.1162V71.1224H38.6162ZM38.6162 71.1097V71.1224H40.1162V71.1097H38.6162ZM38.6162 71.0971V71.1097H40.1162V71.0971H38.6162ZM38.6162 71.0845V71.0971H40.1162V71.0845H38.6162ZM38.6162 71.0719V71.0845H40.1162V71.0719H38.6162ZM38.6162 71.0593V71.0719H40.1162V71.0593H38.6162ZM38.6162 71.0466V71.0593H40.1162V71.0466H38.6162ZM38.6162 71.034V71.0466H40.1162V71.034H38.6162ZM38.6162 71.0215V71.034H40.1162V71.0215H38.6162ZM38.6162 71.0089V71.0215H40.1162V71.0089H38.6162ZM38.6162 70.9963V71.0089H40.1162V70.9963H38.6162ZM38.6162 70.9837V70.9963H40.1162V70.9837H38.6162ZM38.6162 70.9711V70.9837H40.1162V70.9711H38.6162ZM38.6162 70.9586V70.9711H40.1162V70.9586H38.6162ZM38.6162 70.946V70.9586H40.1162V70.946H38.6162ZM38.6162 70.9335V70.946H40.1162V70.9335H38.6162ZM38.6162 70.9209V70.9335H40.1162V70.9209H38.6162ZM38.6162 70.9084V70.9209H40.1162V70.9084H38.6162ZM38.6162 70.8959V70.9084H40.1162V70.8959H38.6162ZM38.6162 70.8833V70.8959H40.1162V70.8833H38.6162ZM38.6162 70.8708V70.8833H40.1162V70.8708H38.6162ZM38.6162 70.8583V70.8708H40.1162V70.8583H38.6162ZM38.6162 70.8458V70.8583H40.1162V70.8458H38.6162ZM38.6162 70.8333V70.8458H40.1162V70.8333H38.6162ZM38.6162 70.8208V70.8333H40.1162V70.8208H38.6162ZM38.6162 70.8083V70.8208H40.1162V70.8083H38.6162ZM38.6162 70.7958V70.8083H40.1162V70.7958H38.6162ZM38.6162 70.7834V70.7958H40.1162V70.7834H38.6162ZM38.6162 70.7709V70.7834H40.1162V70.7709H38.6162ZM38.6162 70.7584V70.7709H40.1162V70.7584H38.6162ZM38.6162 70.746V70.7584H40.1162V70.746H38.6162ZM38.6162 70.7335V70.746H40.1162V70.7335H38.6162ZM38.6162 70.7211V70.7335H40.1162V70.7211H38.6162ZM38.6162 70.7086V70.7211H40.1162V70.7086H38.6162ZM38.6162 70.6962V70.7086H40.1162V70.6962H38.6162ZM38.6162 70.6838V70.6962H40.1162V70.6838H38.6162ZM38.6162 70.6714V70.6838H40.1162V70.6714H38.6162ZM38.6162 70.659V70.6714H40.1162V70.659H38.6162ZM38.6162 70.6465V70.659H40.1162V70.6465H38.6162ZM38.6162 70.6341V70.6465H40.1162V70.6341H38.6162ZM38.6162 70.6217V70.6341H40.1162V70.6217H38.6162ZM38.6162 70.6094V70.6217H40.1162V70.6094H38.6162ZM38.6162 70.597V70.6094H40.1162V70.597H38.6162ZM38.6162 70.5846V70.597H40.1162V70.5846H38.6162ZM38.6162 70.5722V70.5846H40.1162V70.5722H38.6162ZM38.6162 70.5599V70.5722H40.1162V70.5599H38.6162ZM38.6162 70.5475V70.5599H40.1162V70.5475H38.6162ZM38.6162 70.5352V70.5475H40.1162V70.5352H38.6162ZM38.6162 70.5228V70.5352H40.1162V70.5228H38.6162ZM38.6162 70.5105V70.5228H40.1162V70.5105H38.6162ZM38.6162 70.4981V70.5105H40.1162V70.4981H38.6162ZM38.6162 70.4858V70.4981H40.1162V70.4858H38.6162ZM38.6162 70.4735V70.4858H40.1162V70.4735H38.6162ZM38.6162 70.4612V70.4735H40.1162V70.4612H38.6162ZM38.6162 70.4489V70.4612H40.1162V70.4489H38.6162ZM38.6162 70.4366V70.4489H40.1162V70.4366H38.6162ZM38.6162 70.4243V70.4366H40.1162V70.4243H38.6162ZM38.6162 70.412V70.4243H40.1162V70.412H38.6162ZM38.6162 70.3997V70.412H40.1162V70.3997H38.6162ZM38.6162 70.3874V70.3997H40.1162V70.3874H38.6162ZM38.6162 70.3752V70.3874H40.1162V70.3752H38.6162ZM38.6162 70.3629V70.3752H40.1162V70.3629H38.6162ZM38.6162 70.3506V70.3629H40.1162V70.3506H38.6162ZM38.6162 70.3384V70.3506H40.1162V70.3384H38.6162ZM38.6162 70.3261V70.3384H40.1162V70.3261H38.6162ZM38.6162 70.3139V70.3261H40.1162V70.3139H38.6162ZM38.6162 70.3017V70.3139H40.1162V70.3017H38.6162ZM38.6162 70.2894V70.3017H40.1162V70.2894H38.6162ZM38.6162 70.2772V70.2894H40.1162V70.2772H38.6162ZM38.6162 70.265V70.2772H40.1162V70.265H38.6162ZM38.6162 70.2528V70.265H40.1162V70.2528H38.6162ZM38.6162 70.2406V70.2528H40.1162V70.2406H38.6162ZM38.6162 70.2284V70.2406H40.1162V70.2284H38.6162ZM38.6162 70.2162V70.2284H40.1162V70.2162H38.6162ZM38.6162 70.204V70.2162H40.1162V70.204H38.6162ZM38.6162 70.1918V70.204H40.1162V70.1918H38.6162ZM38.6162 70.1797V70.1918H40.1162V70.1797H38.6162ZM38.6162 70.1675V70.1797H40.1162V70.1675H38.6162ZM38.6162 70.1553V70.1675H40.1162V70.1553H38.6162ZM38.6162 70.1432V70.1553H40.1162V70.1432H38.6162ZM38.6162 70.131V70.1432H40.1162V70.131H38.6162ZM38.6162 70.1189V70.131H40.1162V70.1189H38.6162ZM38.6162 70.1068V70.1189H40.1162V70.1068H38.6162ZM38.6162 70.0946V70.1068H40.1162V70.0946H38.6162ZM38.6162 70.0825V70.0946H40.1162V70.0825H38.6162ZM38.6162 70.0704V70.0825H40.1162V70.0704H38.6162ZM38.6162 70.0583V70.0704H40.1162V70.0583H38.6162ZM38.6162 70.0462V70.0583H40.1162V70.0462H38.6162ZM38.6162 70.0341V70.0462H40.1162V70.0341H38.6162ZM38.6162 70.022V70.0341H40.1162V70.022H38.6162ZM38.6162 70.0099V70.022H40.1162V70.0099H38.6162ZM38.6162 69.9978V70.0099H40.1162V69.9978H38.6162ZM38.6162 69.9858V69.9978H40.1162V69.9858H38.6162ZM38.6162 69.9737V69.9858H40.1162V69.9737H38.6162ZM38.6162 69.9616V69.9737H40.1162V69.9616H38.6162ZM38.6162 69.9496V69.9616H40.1162V69.9496H38.6162ZM38.6162 69.9375V69.9496H40.1162V69.9375H38.6162ZM38.6162 69.9255V69.9375H40.1162V69.9255H38.6162ZM38.6162 69.9135V69.9255H40.1162V69.9135H38.6162ZM38.6162 69.9014V69.9135H40.1162V69.9014H38.6162ZM38.6162 69.8894V69.9014H40.1162V69.8894H38.6162ZM38.6162 69.8774V69.8894H40.1162V69.8774H38.6162ZM38.6162 69.8654V69.8774H40.1162V69.8654H38.6162ZM38.6162 69.8534V69.8654H40.1162V69.8534H38.6162ZM38.6162 69.8414V69.8534H40.1162V69.8414H38.6162ZM38.6162 69.8294V69.8414H40.1162V69.8294H38.6162ZM38.6162 69.8174V69.8294H40.1162V69.8174H38.6162ZM38.6162 69.8054V69.8174H40.1162V69.8054H38.6162ZM38.6162 69.7935V69.8054H40.1162V69.7935H38.6162ZM38.6162 69.7815V69.7935H40.1162V69.7815H38.6162ZM38.6162 69.7695V69.7815H40.1162V69.7695H38.6162ZM38.6162 69.7576V69.7695H40.1162V69.7576H38.6162ZM38.6162 69.7456V69.7576H40.1162V69.7456H38.6162ZM38.6162 69.7337V69.7456H40.1162V69.7337H38.6162ZM38.6162 69.7218V69.7337H40.1162V69.7218H38.6162ZM38.6162 69.7098V69.7218H40.1162V69.7098H38.6162ZM38.6162 69.6979V69.7098H40.1162V69.6979H38.6162ZM38.6162 69.686V69.6979H40.1162V69.686H38.6162ZM38.6162 69.6741V69.686H40.1162V69.6741H38.6162ZM38.6162 69.6622V69.6741H40.1162V69.6622H38.6162ZM38.6162 69.6503V69.6622H40.1162V69.6503H38.6162ZM38.6162 69.6384V69.6503H40.1162V69.6384H38.6162ZM38.6162 69.6265V69.6384H40.1162V69.6265H38.6162ZM38.6162 69.6146V69.6265H40.1162V69.6146H38.6162ZM38.6162 69.6027V69.6146H40.1162V69.6027H38.6162ZM38.6162 69.5909V69.6027H40.1162V69.5909H38.6162ZM38.6162 69.579V69.5909H40.1162V69.579H38.6162ZM38.6162 69.5672V69.579H40.1162V69.5672H38.6162ZM38.6162 69.5553V69.5672H40.1162V69.5553H38.6162ZM38.6162 69.5435V69.5553H40.1162V69.5435H38.6162ZM38.6162 69.5316V69.5435H40.1162V69.5316H38.6162ZM38.6162 69.5198V69.5316H40.1162V69.5198H38.6162ZM38.6162 69.508V69.5198H40.1162V69.508H38.6162ZM38.6162 69.4962V69.508H40.1162V69.4962H38.6162ZM38.6162 69.4843V69.4962H40.1162V69.4843H38.6162ZM38.6162 69.4725V69.4843H40.1162V69.4725H38.6162ZM38.6162 69.4607V69.4725H40.1162V69.4607H38.6162ZM38.6162 69.4489V69.4607H40.1162V69.4489H38.6162ZM38.6162 69.4372V69.4489H40.1162V69.4372H38.6162ZM38.6162 69.4254V69.4372H40.1162V69.4254H38.6162ZM38.6162 69.4136V69.4254H40.1162V69.4136H38.6162ZM38.6162 69.4018V69.4136H40.1162V69.4018H38.6162ZM38.6162 69.3901V69.4018H40.1162V69.3901H38.6162ZM38.6162 69.3783V69.3901H40.1162V69.3783H38.6162ZM38.6162 69.3666V69.3783H40.1162V69.3666H38.6162ZM38.6162 69.3548V69.3666H40.1162V69.3548H38.6162ZM38.6162 69.3431V69.3548H40.1162V69.3431H38.6162ZM38.6162 69.3314V69.3431H40.1162V69.3314H38.6162ZM38.6162 69.3196V69.3314H40.1162V69.3196H38.6162ZM38.6162 69.3079V69.3196H40.1162V69.3079H38.6162ZM38.6162 69.2962V69.3079H40.1162V69.2962H38.6162ZM38.6162 69.2845V69.2962H40.1162V69.2845H38.6162ZM38.6162 69.2728V69.2845H40.1162V69.2728H38.6162ZM38.6162 69.2611V69.2728H40.1162V69.2611H38.6162ZM38.6162 69.2494V69.2611H40.1162V69.2494H38.6162ZM38.6162 69.2377V69.2494H40.1162V69.2377H38.6162ZM38.6162 69.2261V69.2377H40.1162V69.2261H38.6162ZM38.6162 69.2144V69.2261H40.1162V69.2144H38.6162ZM38.6162 69.2027V69.2144H40.1162V69.2027H38.6162ZM38.6162 69.1911V69.2027H40.1162V69.1911H38.6162ZM38.6162 69.1794V69.1911H40.1162V69.1794H38.6162ZM38.6162 69.1678V69.1794H40.1162V69.1678H38.6162ZM38.6162 69.1561V69.1678H40.1162V69.1561H38.6162ZM38.6162 69.1445V69.1561H40.1162V69.1445H38.6162ZM38.6162 69.1329V69.1445H40.1162V69.1329H38.6162ZM38.6162 69.1213V69.1329H40.1162V69.1213H38.6162ZM38.6162 69.1096V69.1213H40.1162V69.1096H38.6162ZM38.6162 69.098V69.1096H40.1162V69.098H38.6162ZM38.6162 69.0864V69.098H40.1162V69.0864H38.6162ZM38.6162 69.0748V69.0864H40.1162V69.0748H38.6162ZM38.6162 69.0633V69.0748H40.1162V69.0633H38.6162ZM38.6162 69.0517V69.0633H40.1162V69.0517H38.6162ZM38.6162 69.0401V69.0517H40.1162V69.0401H38.6162ZM38.6162 69.0285V69.0401H40.1162V69.0285H38.6162ZM38.6162 69.017V69.0285H40.1162V69.017H38.6162ZM38.6162 69.0054V69.017H40.1162V69.0054H38.6162ZM38.6162 68.9939V69.0054H40.1162V68.9939H38.6162ZM38.6162 68.9823V68.9939H40.1162V68.9823H38.6162ZM38.6162 68.9708V68.9823H40.1162V68.9708H38.6162ZM38.6162 68.9592V68.9708H40.1162V68.9592H38.6162ZM38.6162 68.9477V68.9592H40.1162V68.9477H38.6162ZM38.6162 68.9362V68.9477H40.1162V68.9362H38.6162ZM38.6162 68.9247V68.9362H40.1162V68.9247H38.6162ZM38.6162 68.9132V68.9247H40.1162V68.9132H38.6162ZM38.6162 68.9017V68.9132H40.1162V68.9017H38.6162ZM38.6162 68.8902V68.9017H40.1162V68.8902H38.6162ZM38.6162 68.8787V68.8902H40.1162V68.8787H38.6162ZM38.6162 68.8672V68.8787H40.1162V68.8672H38.6162ZM38.6162 68.8557V68.8672H40.1162V68.8557H38.6162ZM38.6162 68.8443V68.8557H40.1162V68.8443H38.6162ZM38.6162 68.8328V68.8443H40.1162V68.8328H38.6162ZM38.6162 68.8213V68.8328H40.1162V68.8213H38.6162ZM38.6162 68.8099V68.8213H40.1162V68.8099H38.6162ZM38.6162 68.7984V68.8099H40.1162V68.7984H38.6162ZM38.6162 68.787V68.7984H40.1162V68.787H38.6162ZM38.6162 68.7756V68.787H40.1162V68.7756H38.6162ZM38.6162 68.7641V68.7756H40.1162V68.7641H38.6162ZM38.6162 68.7527V68.7641H40.1162V68.7527H38.6162ZM38.6162 68.7413V68.7527H40.1162V68.7413H38.6162ZM38.6162 68.7299V68.7413H40.1162V68.7299H38.6162ZM38.6162 68.7185V68.7299H40.1162V68.7185H38.6162ZM38.6162 68.7071V68.7185H40.1162V68.7071H38.6162ZM38.6162 68.6957V68.7071H40.1162V68.6957H38.6162ZM38.6162 68.6843V68.6957H40.1162V68.6843H38.6162ZM38.6162 68.6729V68.6843H40.1162V68.6729H38.6162ZM38.6162 68.6616V68.6729H40.1162V68.6616H38.6162ZM38.6162 68.6502V68.6616H40.1162V68.6502H38.6162ZM38.6162 68.6389V68.6502H40.1162V68.6389H38.6162ZM38.6162 68.6275V68.6389H40.1162V68.6275H38.6162ZM38.6162 68.6162V68.6275H40.1162V68.6162H38.6162ZM38.6162 68.6048V68.6162H40.1162V68.6048H38.6162ZM38.6162 68.5935V68.6048H40.1162V68.5935H38.6162ZM38.6162 68.5822V68.5935H40.1162V68.5822H38.6162ZM38.6162 68.5708V68.5822H40.1162V68.5708H38.6162ZM38.6162 68.5595V68.5708H40.1162V68.5595H38.6162ZM38.6162 68.5482V68.5595H40.1162V68.5482H38.6162ZM38.6162 68.5369V68.5482H40.1162V68.5369H38.6162ZM38.6162 68.5256V68.5369H40.1162V68.5256H38.6162ZM38.6162 68.5143V68.5256H40.1162V68.5143H38.6162ZM38.6162 68.503V68.5143H40.1162V68.503H38.6162ZM38.6162 68.4918V68.503H40.1162V68.4918H38.6162ZM38.6162 68.4805V68.4918H40.1162V68.4805H38.6162ZM38.6162 68.4692V68.4805H40.1162V68.4692H38.6162ZM38.6162 68.458V68.4692H40.1162V68.458H38.6162ZM38.6162 68.4467V68.458H40.1162V68.4467H38.6162ZM38.6162 68.4355V68.4467H40.1162V68.4355H38.6162ZM38.6162 68.4242V68.4355H40.1162V68.4242H38.6162ZM38.6162 68.413V68.4242H40.1162V68.413H38.6162ZM38.6162 68.4018V68.413H40.1162V68.4018H38.6162ZM38.6162 68.3905V68.4018H40.1162V68.3905H38.6162ZM38.6162 68.3793V68.3905H40.1162V68.3793H38.6162ZM38.6162 68.3681V68.3793H40.1162V68.3681H38.6162ZM38.6162 68.3569V68.3681H40.1162V68.3569H38.6162ZM38.6162 68.3457V68.3569H40.1162V68.3457H38.6162ZM38.6162 68.3345V68.3457H40.1162V68.3345H38.6162ZM38.6162 68.3233V68.3345H40.1162V68.3233H38.6162ZM38.6162 68.3121V68.3233H40.1162V68.3121H38.6162ZM38.6162 68.301V68.3121H40.1162V68.301H38.6162ZM38.6162 68.2898V68.301H40.1162V68.2898H38.6162ZM38.6162 68.2786V68.2898H40.1162V68.2786H38.6162ZM38.6162 68.2675V68.2786H40.1162V68.2675H38.6162ZM38.6162 68.2563V68.2675H40.1162V68.2563H38.6162ZM38.6162 68.2452V68.2563H40.1162V68.2452H38.6162ZM38.6162 68.2341V68.2452H40.1162V68.2341H38.6162ZM38.6162 68.2229V68.2341H40.1162V68.2229H38.6162ZM38.6162 68.2118V68.2229H40.1162V68.2118H38.6162ZM38.6162 68.2007V68.2118H40.1162V68.2007H38.6162ZM38.6162 68.1896V68.2007H40.1162V68.1896H38.6162ZM38.6162 68.1785V68.1896H40.1162V68.1785H38.6162ZM38.6162 68.1674V68.1785H40.1162V68.1674H38.6162ZM38.6162 68.1563V68.1674H40.1162V68.1563H38.6162ZM38.6162 68.1452V68.1563H40.1162V68.1452H38.6162ZM38.6162 68.1341V68.1452H40.1162V68.1341H38.6162ZM38.6162 68.1231V68.1341H40.1162V68.1231H38.6162ZM38.6162 68.112V68.1231H40.1162V68.112H38.6162ZM38.6162 68.1009V68.112H40.1162V68.1009H38.6162ZM38.6162 68.0899V68.1009H40.1162V68.0899H38.6162ZM38.6162 68.0788V68.0899H40.1162V68.0788H38.6162ZM38.6162 68.0678V68.0788H40.1162V68.0678H38.6162ZM38.6162 68.0567V68.0678H40.1162V68.0567H38.6162ZM38.6162 68.0457V68.0567H40.1162V68.0457H38.6162ZM38.6162 68.0347V68.0457H40.1162V68.0347H38.6162ZM38.6162 68.0237V68.0347H40.1162V68.0237H38.6162ZM38.6162 68.0127V68.0237H40.1162V68.0127H38.6162ZM38.6162 68.0017V68.0127H40.1162V68.0017H38.6162ZM38.6162 67.9907V68.0017H40.1162V67.9907H38.6162ZM38.6162 67.9797V67.9907H40.1162V67.9797H38.6162ZM38.6162 67.9687V67.9797H40.1162V67.9687H38.6162ZM38.6162 67.9577V67.9687H40.1162V67.9577H38.6162ZM38.6162 67.9467V67.9577H40.1162V67.9467H38.6162ZM38.6162 67.9358V67.9467H40.1162V67.9358H38.6162ZM38.6162 67.9248V67.9358H40.1162V67.9248H38.6162ZM38.6162 67.9138V67.9248H40.1162V67.9138H38.6162ZM38.6162 67.9029V67.9138H40.1162V67.9029H38.6162ZM38.6162 67.8919V67.9029H40.1162V67.8919H38.6162ZM38.6162 67.881V67.8919H40.1162V67.881H38.6162ZM38.6162 67.8701V67.881H40.1162V67.8701H38.6162ZM38.6162 67.8592V67.8701H40.1162V67.8592H38.6162ZM38.6162 67.8482V67.8592H40.1162V67.8482H38.6162ZM38.6162 67.8373V67.8482H40.1162V67.8373H38.6162ZM38.6162 67.8264V67.8373H40.1162V67.8264H38.6162ZM38.6162 67.8155V67.8264H40.1162V67.8155H38.6162ZM38.6162 67.8046V67.8155H40.1162V67.8046H38.6162ZM38.6162 67.7937V67.8046H40.1162V67.7937H38.6162ZM38.6162 67.7829V67.7937H40.1162V67.7829H38.6162ZM38.6162 67.772V67.7829H40.1162V67.772H38.6162ZM38.6162 67.7611V67.772H40.1162V67.7611H38.6162ZM38.6162 67.7503V67.7611H40.1162V67.7503H38.6162ZM38.6162 67.7394V67.7503H40.1162V67.7394H38.6162ZM38.6162 67.7285V67.7394H40.1162V67.7285H38.6162ZM38.6162 67.7177V67.7285H40.1162V67.7177H38.6162ZM38.6162 67.7069V67.7177H40.1162V67.7069H38.6162ZM38.6162 67.696V67.7069H40.1162V67.696H38.6162ZM38.6162 67.6852V67.696H40.1162V67.6852H38.6162ZM38.6162 67.6744V67.6852H40.1162V67.6744H38.6162ZM38.6162 67.6636V67.6744H40.1162V67.6636H38.6162ZM38.6162 67.6528V67.6636H40.1162V67.6528H38.6162ZM38.6162 67.642V67.6528H40.1162V67.642H38.6162ZM38.6162 67.6312V67.642H40.1162V67.6312H38.6162ZM38.6162 67.6204V67.6312H40.1162V67.6204H38.6162ZM38.6162 67.6096V67.6204H40.1162V67.6096H38.6162ZM38.6162 67.5988V67.6096H40.1162V67.5988H38.6162ZM38.6162 67.5881V67.5988H40.1162V67.5881H38.6162ZM38.6162 67.5773V67.5881H40.1162V67.5773H38.6162ZM38.6162 67.5665V67.5773H40.1162V67.5665H38.6162ZM38.6162 67.5558V67.5665H40.1162V67.5558H38.6162ZM38.6162 67.545V67.5558H40.1162V67.545H38.6162ZM38.6162 67.5343V67.545H40.1162V67.5343H38.6162ZM38.6162 67.5236V67.5343H40.1162V67.5236H38.6162ZM38.6162 67.5128V67.5236H40.1162V67.5128H38.6162ZM38.6162 67.5021V67.5128H40.1162V67.5021H38.6162ZM38.6162 67.4914V67.5021H40.1162V67.4914H38.6162ZM38.6162 67.4807V67.4914H40.1162V67.4807H38.6162ZM38.6162 67.47V67.4807H40.1162V67.47H38.6162ZM38.6162 67.4593V67.47H40.1162V67.4593H38.6162ZM38.6162 67.4486V67.4593H40.1162V67.4486H38.6162ZM38.6162 67.4379V67.4486H40.1162V67.4379H38.6162ZM38.6162 67.4273V67.4379H40.1162V67.4273H38.6162ZM38.6162 67.4166V67.4273H40.1162V67.4166H38.6162ZM38.6162 67.4059V67.4166H40.1162V67.4059H38.6162ZM38.6162 67.3953V67.4059H40.1162V67.3953H38.6162ZM38.6162 67.3846V67.3953H40.1162V67.3846H38.6162ZM38.6162 67.374V67.3846H40.1162V67.374H38.6162ZM38.6162 67.3633V67.374H40.1162V67.3633H38.6162ZM38.6162 67.3527V67.3633H40.1162V67.3527H38.6162ZM38.6162 67.3421V67.3527H40.1162V67.3421H38.6162ZM38.6162 67.3315V67.3421H40.1162V67.3315H38.6162ZM38.6162 67.3208V67.3315H40.1162V67.3208H38.6162ZM38.6162 67.3102V67.3208H40.1162V67.3102H38.6162ZM38.6162 67.2996V67.3102H40.1162V67.2996H38.6162ZM38.6162 67.289V67.2996H40.1162V67.289H38.6162ZM38.6162 67.2784V67.289H40.1162V67.2784H38.6162ZM38.6162 67.2679V67.2784H40.1162V67.2679H38.6162ZM38.6162 67.2573V67.2679H40.1162V67.2573H38.6162ZM38.6162 67.2467V67.2573H40.1162V67.2467H38.6162ZM38.6162 67.2361V67.2467H40.1162V67.2361H38.6162ZM38.6162 67.2256V67.2361H40.1162V67.2256H38.6162ZM38.6162 67.215V67.2256H40.1162V67.215H38.6162ZM38.6162 67.2045V67.215H40.1162V67.2045H38.6162ZM38.6162 67.194V67.2045H40.1162V67.194H38.6162ZM38.6162 67.1834V67.194H40.1162V67.1834H38.6162ZM38.6162 67.1729V67.1834H40.1162V67.1729H38.6162ZM38.6162 67.1624V67.1729H40.1162V67.1624H38.6162ZM38.6162 67.1519V67.1624H40.1162V67.1519H38.6162ZM38.6162 67.1413V67.1519H40.1162V67.1413H38.6162ZM38.6162 67.1308V67.1413H40.1162V67.1308H38.6162ZM38.6162 67.1203V67.1308H40.1162V67.1203H38.6162ZM38.6162 67.1099V67.1203H40.1162V67.1099H38.6162ZM38.6162 67.0994V67.1099H40.1162V67.0994H38.6162ZM38.6162 67.0889V67.0994H40.1162V67.0889H38.6162ZM38.6162 67.0784V67.0889H40.1162V67.0784H38.6162ZM38.6162 67.068V67.0784H40.1162V67.068H38.6162ZM38.6162 67.0575V67.068H40.1162V67.0575H38.6162ZM38.6162 67.047V67.0575H40.1162V67.047H38.6162ZM38.6162 67.0366V67.047H40.1162V67.0366H38.6162ZM38.6162 67.0262V67.0366H40.1162V67.0262H38.6162ZM38.6162 67.0157V67.0262H40.1162V67.0157H38.6162ZM38.6162 67.0053V67.0157H40.1162V67.0053H38.6162ZM38.6162 66.9949V67.0053H40.1162V66.9949H38.6162ZM38.6162 66.9845V66.9949H40.1162V66.9845H38.6162ZM38.6162 66.974V66.9845H40.1162V66.974H38.6162ZM38.6162 66.9636V66.974H40.1162V66.9636H38.6162ZM38.6162 66.9532V66.9636H40.1162V66.9532H38.6162ZM38.6162 66.9429V66.9532H40.1162V66.9429H38.6162ZM38.6162 66.9325V66.9429H40.1162V66.9325H38.6162ZM38.6162 66.9221V66.9325H40.1162V66.9221H38.6162ZM38.6162 66.9117V66.9221H40.1162V66.9117H38.6162ZM38.6162 66.9014V66.9117H40.1162V66.9014H38.6162ZM38.6162 66.891V66.9014H40.1162V66.891H38.6162ZM38.6162 66.8806V66.891H40.1162V66.8806H38.6162ZM38.6162 66.8703V66.8806H40.1162V66.8703H38.6162ZM38.6162 66.86V66.8703H40.1162V66.86H38.6162ZM38.6162 66.8496V66.86H40.1162V66.8496H38.6162ZM38.6162 66.8393V66.8496H40.1162V66.8393H38.6162ZM38.6162 66.829V66.8393H40.1162V66.829H38.6162ZM38.6162 66.8186V66.829H40.1162V66.8186H38.6162ZM38.6162 66.8083V66.8186H40.1162V66.8083H38.6162ZM38.6162 66.798V66.8083H40.1162V66.798H38.6162ZM38.6162 66.7877V66.798H40.1162V66.7877H38.6162ZM38.6162 66.7774V66.7877H40.1162V66.7774H38.6162ZM38.6162 66.7672V66.7774H40.1162V66.7672H38.6162ZM38.6162 66.7569V66.7672H40.1162V66.7569H38.6162ZM38.6162 66.7466V66.7569H40.1162V66.7466H38.6162ZM38.6162 66.7363V66.7466H40.1162V66.7363H38.6162ZM38.6162 66.7261V66.7363H40.1162V66.7261H38.6162ZM38.6162 66.7158V66.7261H40.1162V66.7158H38.6162ZM38.6162 66.7056V66.7158H40.1162V66.7056H38.6162ZM38.6162 66.6953V66.7056H40.1162V66.6953H38.6162ZM38.6162 66.6851V66.6953H40.1162V66.6851H38.6162ZM38.6162 66.6749V66.6851H40.1162V66.6749H38.6162ZM38.6162 66.6646V66.6749H40.1162V66.6646H38.6162ZM38.6162 66.6544V66.6646H40.1162V66.6544H38.6162ZM38.6162 66.6442V66.6544H40.1162V66.6442H38.6162ZM38.6162 66.634V66.6442H40.1162V66.634H38.6162ZM38.6162 66.6238V66.634H40.1162V66.6238H38.6162ZM38.6162 66.6136V66.6238H40.1162V66.6136H38.6162ZM38.6162 66.6034V66.6136H40.1162V66.6034H38.6162ZM38.6162 66.5933V66.6034H40.1162V66.5933H38.6162ZM38.6162 66.5831V66.5933H40.1162V66.5831H38.6162ZM38.6162 66.5729V66.5831H40.1162V66.5729H38.6162ZM38.6162 66.5627V66.5729H40.1162V66.5627H38.6162ZM38.6162 66.5526V66.5627H40.1162V66.5526H38.6162ZM38.6162 66.5424V66.5526H40.1162V66.5424H38.6162ZM38.6162 66.5323V66.5424H40.1162V66.5323H38.6162ZM38.6162 66.5222V66.5323H40.1162V66.5222H38.6162ZM38.6162 66.512V66.5222H40.1162V66.512H38.6162ZM38.6162 66.5019V66.512H40.1162V66.5019H38.6162ZM38.6162 66.4918V66.5019H40.1162V66.4918H38.6162ZM38.6162 66.4817V66.4918H40.1162V66.4817H38.6162ZM38.6162 66.4716V66.4817H40.1162V66.4716H38.6162ZM38.6162 66.4615V66.4716H40.1162V66.4615H38.6162ZM38.6162 66.4514V66.4615H40.1162V66.4514H38.6162ZM38.6162 66.4413V66.4514H40.1162V66.4413H38.6162ZM38.6162 66.4312V66.4413H40.1162V66.4312H38.6162ZM38.6162 66.4211V66.4312H40.1162V66.4211H38.6162ZM38.6162 66.4111V66.4211H40.1162V66.4111H38.6162ZM38.6162 66.401V66.4111H40.1162V66.401H38.6162ZM38.6162 66.391V66.401H40.1162V66.391H38.6162ZM38.6162 66.3809V66.391H40.1162V66.3809H38.6162ZM38.6162 66.3709V66.3809H40.1162V66.3709H38.6162ZM38.6162 66.3608V66.3709H40.1162V66.3608H38.6162ZM38.6162 66.3508V66.3608H40.1162V66.3508H38.6162ZM38.6162 66.3408V66.3508H40.1162V66.3408H38.6162ZM38.6162 66.3307V66.3408H40.1162V66.3307H38.6162ZM38.6162 66.3207V66.3307H40.1162V66.3207H38.6162ZM38.6162 66.3107V66.3207H40.1162V66.3107H38.6162ZM38.6162 66.3007V66.3107H40.1162V66.3007H38.6162ZM38.6162 66.2907V66.3007H40.1162V66.2907H38.6162ZM40.8662 65.5407H39.3662V67.0407H40.8662V65.5407ZM41.6162 66.3007V66.2907H40.1162V66.3007H41.6162ZM41.6162 66.3107V66.3007H40.1162V66.3107H41.6162ZM41.6162 66.3207V66.3107H40.1162V66.3207H41.6162ZM41.6162 66.3307V66.3207H40.1162V66.3307H41.6162ZM41.6162 66.3408V66.3307H40.1162V66.3408H41.6162ZM41.6162 66.3508V66.3408H40.1162V66.3508H41.6162ZM41.6162 66.3608V66.3508H40.1162V66.3608H41.6162ZM41.6162 66.3709V66.3608H40.1162V66.3709H41.6162ZM41.6162 66.3809V66.3709H40.1162V66.3809H41.6162ZM41.6162 66.391V66.3809H40.1162V66.391H41.6162ZM41.6162 66.401V66.391H40.1162V66.401H41.6162ZM41.6162 66.4111V66.401H40.1162V66.4111H41.6162ZM41.6162 66.4211V66.4111H40.1162V66.4211H41.6162ZM41.6162 66.4312V66.4211H40.1162V66.4312H41.6162ZM41.6162 66.4413V66.4312H40.1162V66.4413H41.6162ZM41.6162 66.4514V66.4413H40.1162V66.4514H41.6162ZM41.6162 66.4615V66.4514H40.1162V66.4615H41.6162ZM41.6162 66.4716V66.4615H40.1162V66.4716H41.6162ZM41.6162 66.4817V66.4716H40.1162V66.4817H41.6162ZM41.6162 66.4918V66.4817H40.1162V66.4918H41.6162ZM41.6162 66.5019V66.4918H40.1162V66.5019H41.6162ZM41.6162 66.512V66.5019H40.1162V66.512H41.6162ZM41.6162 66.5222V66.512H40.1162V66.5222H41.6162ZM41.6162 66.5323V66.5222H40.1162V66.5323H41.6162ZM41.6162 66.5424V66.5323H40.1162V66.5424H41.6162ZM41.6162 66.5526V66.5424H40.1162V66.5526H41.6162ZM41.6162 66.5627V66.5526H40.1162V66.5627H41.6162ZM41.6162 66.5729V66.5627H40.1162V66.5729H41.6162ZM41.6162 66.5831V66.5729H40.1162V66.5831H41.6162ZM41.6162 66.5933V66.5831H40.1162V66.5933H41.6162ZM41.6162 66.6034V66.5933H40.1162V66.6034H41.6162ZM41.6162 66.6136V66.6034H40.1162V66.6136H41.6162ZM41.6162 66.6238V66.6136H40.1162V66.6238H41.6162ZM41.6162 66.634V66.6238H40.1162V66.634H41.6162ZM41.6162 66.6442V66.634H40.1162V66.6442H41.6162ZM41.6162 66.6544V66.6442H40.1162V66.6544H41.6162ZM41.6162 66.6646V66.6544H40.1162V66.6646H41.6162ZM41.6162 66.6749V66.6646H40.1162V66.6749H41.6162ZM41.6162 66.6851V66.6749H40.1162V66.6851H41.6162ZM41.6162 66.6953V66.6851H40.1162V66.6953H41.6162ZM41.6162 66.7056V66.6953H40.1162V66.7056H41.6162ZM41.6162 66.7158V66.7056H40.1162V66.7158H41.6162ZM41.6162 66.7261V66.7158H40.1162V66.7261H41.6162ZM41.6162 66.7363V66.7261H40.1162V66.7363H41.6162ZM41.6162 66.7466V66.7363H40.1162V66.7466H41.6162ZM41.6162 66.7569V66.7466H40.1162V66.7569H41.6162ZM41.6162 66.7672V66.7569H40.1162V66.7672H41.6162ZM41.6162 66.7774V66.7672H40.1162V66.7774H41.6162ZM41.6162 66.7877V66.7774H40.1162V66.7877H41.6162ZM41.6162 66.798V66.7877H40.1162V66.798H41.6162ZM41.6162 66.8083V66.798H40.1162V66.8083H41.6162ZM41.6162 66.8186V66.8083H40.1162V66.8186H41.6162ZM41.6162 66.829V66.8186H40.1162V66.829H41.6162ZM41.6162 66.8393V66.829H40.1162V66.8393H41.6162ZM41.6162 66.8496V66.8393H40.1162V66.8496H41.6162ZM41.6162 66.86V66.8496H40.1162V66.86H41.6162ZM41.6162 66.8703V66.86H40.1162V66.8703H41.6162ZM41.6162 66.8806V66.8703H40.1162V66.8806H41.6162ZM41.6162 66.891V66.8806H40.1162V66.891H41.6162ZM41.6162 66.9014V66.891H40.1162V66.9014H41.6162ZM41.6162 66.9117V66.9014H40.1162V66.9117H41.6162ZM41.6162 66.9221V66.9117H40.1162V66.9221H41.6162ZM41.6162 66.9325V66.9221H40.1162V66.9325H41.6162ZM41.6162 66.9429V66.9325H40.1162V66.9429H41.6162ZM41.6162 66.9532V66.9429H40.1162V66.9532H41.6162ZM41.6162 66.9636V66.9532H40.1162V66.9636H41.6162ZM41.6162 66.974V66.9636H40.1162V66.974H41.6162ZM41.6162 66.9845V66.974H40.1162V66.9845H41.6162ZM41.6162 66.9949V66.9845H40.1162V66.9949H41.6162ZM41.6162 67.0053V66.9949H40.1162V67.0053H41.6162ZM41.6162 67.0157V67.0053H40.1162V67.0157H41.6162ZM41.6162 67.0262V67.0157H40.1162V67.0262H41.6162ZM41.6162 67.0366V67.0262H40.1162V67.0366H41.6162ZM41.6162 67.047V67.0366H40.1162V67.047H41.6162ZM41.6162 67.0575V67.047H40.1162V67.0575H41.6162ZM41.6162 67.068V67.0575H40.1162V67.068H41.6162ZM41.6162 67.0784V67.068H40.1162V67.0784H41.6162ZM41.6162 67.0889V67.0784H40.1162V67.0889H41.6162ZM41.6162 67.0994V67.0889H40.1162V67.0994H41.6162ZM41.6162 67.1099V67.0994H40.1162V67.1099H41.6162ZM41.6162 67.1203V67.1099H40.1162V67.1203H41.6162ZM41.6162 67.1308V67.1203H40.1162V67.1308H41.6162ZM41.6162 67.1413V67.1308H40.1162V67.1413H41.6162ZM41.6162 67.1519V67.1413H40.1162V67.1519H41.6162ZM41.6162 67.1624V67.1519H40.1162V67.1624H41.6162ZM41.6162 67.1729V67.1624H40.1162V67.1729H41.6162ZM41.6162 67.1834V67.1729H40.1162V67.1834H41.6162ZM41.6162 67.194V67.1834H40.1162V67.194H41.6162ZM41.6162 67.2045V67.194H40.1162V67.2045H41.6162ZM41.6162 67.215V67.2045H40.1162V67.215H41.6162ZM41.6162 67.2256V67.215H40.1162V67.2256H41.6162ZM41.6162 67.2361V67.2256H40.1162V67.2361H41.6162ZM41.6162 67.2467V67.2361H40.1162V67.2467H41.6162ZM41.6162 67.2573V67.2467H40.1162V67.2573H41.6162ZM41.6162 67.2679V67.2573H40.1162V67.2679H41.6162ZM41.6162 67.2784V67.2679H40.1162V67.2784H41.6162ZM41.6162 67.289V67.2784H40.1162V67.289H41.6162ZM41.6162 67.2996V67.289H40.1162V67.2996H41.6162ZM41.6162 67.3102V67.2996H40.1162V67.3102H41.6162ZM41.6162 67.3208V67.3102H40.1162V67.3208H41.6162ZM41.6162 67.3315V67.3208H40.1162V67.3315H41.6162ZM41.6162 67.3421V67.3315H40.1162V67.3421H41.6162ZM41.6162 67.3527V67.3421H40.1162V67.3527H41.6162ZM41.6162 67.3633V67.3527H40.1162V67.3633H41.6162ZM41.6162 67.374V67.3633H40.1162V67.374H41.6162ZM41.6162 67.3846V67.374H40.1162V67.3846H41.6162ZM41.6162 67.3953V67.3846H40.1162V67.3953H41.6162ZM41.6162 67.4059V67.3953H40.1162V67.4059H41.6162ZM41.6162 67.4166V67.4059H40.1162V67.4166H41.6162ZM41.6162 67.4273V67.4166H40.1162V67.4273H41.6162ZM41.6162 67.4379V67.4273H40.1162V67.4379H41.6162ZM41.6162 67.4486V67.4379H40.1162V67.4486H41.6162ZM41.6162 67.4593V67.4486H40.1162V67.4593H41.6162ZM41.6162 67.47V67.4593H40.1162V67.47H41.6162ZM41.6162 67.4807V67.47H40.1162V67.4807H41.6162ZM41.6162 67.4914V67.4807H40.1162V67.4914H41.6162ZM41.6162 67.5021V67.4914H40.1162V67.5021H41.6162ZM41.6162 67.5128V67.5021H40.1162V67.5128H41.6162ZM41.6162 67.5236V67.5128H40.1162V67.5236H41.6162ZM41.6162 67.5343V67.5236H40.1162V67.5343H41.6162ZM41.6162 67.545V67.5343H40.1162V67.545H41.6162ZM41.6162 67.5558V67.545H40.1162V67.5558H41.6162ZM41.6162 67.5665V67.5558H40.1162V67.5665H41.6162ZM41.6162 67.5773V67.5665H40.1162V67.5773H41.6162ZM41.6162 67.5881V67.5773H40.1162V67.5881H41.6162ZM41.6162 67.5988V67.5881H40.1162V67.5988H41.6162ZM41.6162 67.6096V67.5988H40.1162V67.6096H41.6162ZM41.6162 67.6204V67.6096H40.1162V67.6204H41.6162ZM41.6162 67.6312V67.6204H40.1162V67.6312H41.6162ZM41.6162 67.642V67.6312H40.1162V67.642H41.6162ZM41.6162 67.6528V67.642H40.1162V67.6528H41.6162ZM41.6162 67.6636V67.6528H40.1162V67.6636H41.6162ZM41.6162 67.6744V67.6636H40.1162V67.6744H41.6162ZM41.6162 67.6852V67.6744H40.1162V67.6852H41.6162ZM41.6162 67.696V67.6852H40.1162V67.696H41.6162ZM41.6162 67.7069V67.696H40.1162V67.7069H41.6162ZM41.6162 67.7177V67.7069H40.1162V67.7177H41.6162ZM41.6162 67.7285V67.7177H40.1162V67.7285H41.6162ZM41.6162 67.7394V67.7285H40.1162V67.7394H41.6162ZM41.6162 67.7503V67.7394H40.1162V67.7503H41.6162ZM41.6162 67.7611V67.7503H40.1162V67.7611H41.6162ZM41.6162 67.772V67.7611H40.1162V67.772H41.6162ZM41.6162 67.7829V67.772H40.1162V67.7829H41.6162ZM41.6162 67.7937V67.7829H40.1162V67.7937H41.6162ZM41.6162 67.8046V67.7937H40.1162V67.8046H41.6162ZM41.6162 67.8155V67.8046H40.1162V67.8155H41.6162ZM41.6162 67.8264V67.8155H40.1162V67.8264H41.6162ZM41.6162 67.8373V67.8264H40.1162V67.8373H41.6162ZM41.6162 67.8482V67.8373H40.1162V67.8482H41.6162ZM41.6162 67.8592V67.8482H40.1162V67.8592H41.6162ZM41.6162 67.8701V67.8592H40.1162V67.8701H41.6162ZM41.6162 67.881V67.8701H40.1162V67.881H41.6162ZM41.6162 67.8919V67.881H40.1162V67.8919H41.6162ZM41.6162 67.9029V67.8919H40.1162V67.9029H41.6162ZM41.6162 67.9138V67.9029H40.1162V67.9138H41.6162ZM41.6162 67.9248V67.9138H40.1162V67.9248H41.6162ZM41.6162 67.9358V67.9248H40.1162V67.9358H41.6162ZM41.6162 67.9467V67.9358H40.1162V67.9467H41.6162ZM41.6162 67.9577V67.9467H40.1162V67.9577H41.6162ZM41.6162 67.9687V67.9577H40.1162V67.9687H41.6162ZM41.6162 67.9797V67.9687H40.1162V67.9797H41.6162ZM41.6162 67.9907V67.9797H40.1162V67.9907H41.6162ZM41.6162 68.0017V67.9907H40.1162V68.0017H41.6162ZM41.6162 68.0127V68.0017H40.1162V68.0127H41.6162ZM41.6162 68.0237V68.0127H40.1162V68.0237H41.6162ZM41.6162 68.0347V68.0237H40.1162V68.0347H41.6162ZM41.6162 68.0457V68.0347H40.1162V68.0457H41.6162ZM41.6162 68.0567V68.0457H40.1162V68.0567H41.6162ZM41.6162 68.0678V68.0567H40.1162V68.0678H41.6162ZM41.6162 68.0788V68.0678H40.1162V68.0788H41.6162ZM41.6162 68.0899V68.0788H40.1162V68.0899H41.6162ZM41.6162 68.1009V68.0899H40.1162V68.1009H41.6162ZM41.6162 68.112V68.1009H40.1162V68.112H41.6162ZM41.6162 68.1231V68.112H40.1162V68.1231H41.6162ZM41.6162 68.1341V68.1231H40.1162V68.1341H41.6162ZM41.6162 68.1452V68.1341H40.1162V68.1452H41.6162ZM41.6162 68.1563V68.1452H40.1162V68.1563H41.6162ZM41.6162 68.1674V68.1563H40.1162V68.1674H41.6162ZM41.6162 68.1785V68.1674H40.1162V68.1785H41.6162ZM41.6162 68.1896V68.1785H40.1162V68.1896H41.6162ZM41.6162 68.2007V68.1896H40.1162V68.2007H41.6162ZM41.6162 68.2118V68.2007H40.1162V68.2118H41.6162ZM41.6162 68.2229V68.2118H40.1162V68.2229H41.6162ZM41.6162 68.2341V68.2229H40.1162V68.2341H41.6162ZM41.6162 68.2452V68.2341H40.1162V68.2452H41.6162ZM41.6162 68.2563V68.2452H40.1162V68.2563H41.6162ZM41.6162 68.2675V68.2563H40.1162V68.2675H41.6162ZM41.6162 68.2786V68.2675H40.1162V68.2786H41.6162ZM41.6162 68.2898V68.2786H40.1162V68.2898H41.6162ZM41.6162 68.301V68.2898H40.1162V68.301H41.6162ZM41.6162 68.3121V68.301H40.1162V68.3121H41.6162ZM41.6162 68.3233V68.3121H40.1162V68.3233H41.6162ZM41.6162 68.3345V68.3233H40.1162V68.3345H41.6162ZM41.6162 68.3457V68.3345H40.1162V68.3457H41.6162ZM41.6162 68.3569V68.3457H40.1162V68.3569H41.6162ZM41.6162 68.3681V68.3569H40.1162V68.3681H41.6162ZM41.6162 68.3793V68.3681H40.1162V68.3793H41.6162ZM41.6162 68.3905V68.3793H40.1162V68.3905H41.6162ZM41.6162 68.4018V68.3905H40.1162V68.4018H41.6162ZM41.6162 68.413V68.4018H40.1162V68.413H41.6162ZM41.6162 68.4242V68.413H40.1162V68.4242H41.6162ZM41.6162 68.4355V68.4242H40.1162V68.4355H41.6162ZM41.6162 68.4467V68.4355H40.1162V68.4467H41.6162ZM41.6162 68.458V68.4467H40.1162V68.458H41.6162ZM41.6162 68.4692V68.458H40.1162V68.4692H41.6162ZM41.6162 68.4805V68.4692H40.1162V68.4805H41.6162ZM41.6162 68.4918V68.4805H40.1162V68.4918H41.6162ZM41.6162 68.503V68.4918H40.1162V68.503H41.6162ZM41.6162 68.5143V68.503H40.1162V68.5143H41.6162ZM41.6162 68.5256V68.5143H40.1162V68.5256H41.6162ZM41.6162 68.5369V68.5256H40.1162V68.5369H41.6162ZM41.6162 68.5482V68.5369H40.1162V68.5482H41.6162ZM41.6162 68.5595V68.5482H40.1162V68.5595H41.6162ZM41.6162 68.5708V68.5595H40.1162V68.5708H41.6162ZM41.6162 68.5822V68.5708H40.1162V68.5822H41.6162ZM41.6162 68.5935V68.5822H40.1162V68.5935H41.6162ZM41.6162 68.6048V68.5935H40.1162V68.6048H41.6162ZM41.6162 68.6162V68.6048H40.1162V68.6162H41.6162ZM41.6162 68.6275V68.6162H40.1162V68.6275H41.6162ZM41.6162 68.6389V68.6275H40.1162V68.6389H41.6162ZM41.6162 68.6502V68.6389H40.1162V68.6502H41.6162ZM41.6162 68.6616V68.6502H40.1162V68.6616H41.6162ZM41.6162 68.6729V68.6616H40.1162V68.6729H41.6162ZM41.6162 68.6843V68.6729H40.1162V68.6843H41.6162ZM41.6162 68.6957V68.6843H40.1162V68.6957H41.6162ZM41.6162 68.7071V68.6957H40.1162V68.7071H41.6162ZM41.6162 68.7185V68.7071H40.1162V68.7185H41.6162ZM41.6162 68.7299V68.7185H40.1162V68.7299H41.6162ZM41.6162 68.7413V68.7299H40.1162V68.7413H41.6162ZM41.6162 68.7527V68.7413H40.1162V68.7527H41.6162ZM41.6162 68.7641V68.7527H40.1162V68.7641H41.6162ZM41.6162 68.7756V68.7641H40.1162V68.7756H41.6162ZM41.6162 68.787V68.7756H40.1162V68.787H41.6162ZM41.6162 68.7984V68.787H40.1162V68.7984H41.6162ZM41.6162 68.8099V68.7984H40.1162V68.8099H41.6162ZM41.6162 68.8213V68.8099H40.1162V68.8213H41.6162ZM41.6162 68.8328V68.8213H40.1162V68.8328H41.6162ZM41.6162 68.8443V68.8328H40.1162V68.8443H41.6162ZM41.6162 68.8557V68.8443H40.1162V68.8557H41.6162ZM41.6162 68.8672V68.8557H40.1162V68.8672H41.6162ZM41.6162 68.8787V68.8672H40.1162V68.8787H41.6162ZM41.6162 68.8902V68.8787H40.1162V68.8902H41.6162ZM41.6162 68.9017V68.8902H40.1162V68.9017H41.6162ZM41.6162 68.9132V68.9017H40.1162V68.9132H41.6162ZM41.6162 68.9247V68.9132H40.1162V68.9247H41.6162ZM41.6162 68.9362V68.9247H40.1162V68.9362H41.6162ZM41.6162 68.9477V68.9362H40.1162V68.9477H41.6162ZM41.6162 68.9592V68.9477H40.1162V68.9592H41.6162ZM41.6162 68.9708V68.9592H40.1162V68.9708H41.6162ZM41.6162 68.9823V68.9708H40.1162V68.9823H41.6162ZM41.6162 68.9939V68.9823H40.1162V68.9939H41.6162ZM41.6162 69.0054V68.9939H40.1162V69.0054H41.6162ZM41.6162 69.017V69.0054H40.1162V69.017H41.6162ZM41.6162 69.0285V69.017H40.1162V69.0285H41.6162ZM41.6162 69.0401V69.0285H40.1162V69.0401H41.6162ZM41.6162 69.0517V69.0401H40.1162V69.0517H41.6162ZM41.6162 69.0633V69.0517H40.1162V69.0633H41.6162ZM41.6162 69.0748V69.0633H40.1162V69.0748H41.6162ZM41.6162 69.0864V69.0748H40.1162V69.0864H41.6162ZM41.6162 69.098V69.0864H40.1162V69.098H41.6162ZM41.6162 69.1096V69.098H40.1162V69.1096H41.6162ZM41.6162 69.1213V69.1096H40.1162V69.1213H41.6162ZM41.6162 69.1329V69.1213H40.1162V69.1329H41.6162ZM41.6162 69.1445V69.1329H40.1162V69.1445H41.6162ZM41.6162 69.1561V69.1445H40.1162V69.1561H41.6162ZM41.6162 69.1678V69.1561H40.1162V69.1678H41.6162ZM41.6162 69.1794V69.1678H40.1162V69.1794H41.6162ZM41.6162 69.1911V69.1794H40.1162V69.1911H41.6162ZM41.6162 69.2027V69.1911H40.1162V69.2027H41.6162ZM41.6162 69.2144V69.2027H40.1162V69.2144H41.6162ZM41.6162 69.2261V69.2144H40.1162V69.2261H41.6162ZM41.6162 69.2377V69.2261H40.1162V69.2377H41.6162ZM41.6162 69.2494V69.2377H40.1162V69.2494H41.6162ZM41.6162 69.2611V69.2494H40.1162V69.2611H41.6162ZM41.6162 69.2728V69.2611H40.1162V69.2728H41.6162ZM41.6162 69.2845V69.2728H40.1162V69.2845H41.6162ZM41.6162 69.2962V69.2845H40.1162V69.2962H41.6162ZM41.6162 69.3079V69.2962H40.1162V69.3079H41.6162ZM41.6162 69.3196V69.3079H40.1162V69.3196H41.6162ZM41.6162 69.3314V69.3196H40.1162V69.3314H41.6162ZM41.6162 69.3431V69.3314H40.1162V69.3431H41.6162ZM41.6162 69.3548V69.3431H40.1162V69.3548H41.6162ZM41.6162 69.3666V69.3548H40.1162V69.3666H41.6162ZM41.6162 69.3783V69.3666H40.1162V69.3783H41.6162ZM41.6162 69.3901V69.3783H40.1162V69.3901H41.6162ZM41.6162 69.4018V69.3901H40.1162V69.4018H41.6162ZM41.6162 69.4136V69.4018H40.1162V69.4136H41.6162ZM41.6162 69.4254V69.4136H40.1162V69.4254H41.6162ZM41.6162 69.4372V69.4254H40.1162V69.4372H41.6162ZM41.6162 69.4489V69.4372H40.1162V69.4489H41.6162ZM41.6162 69.4607V69.4489H40.1162V69.4607H41.6162ZM41.6162 69.4725V69.4607H40.1162V69.4725H41.6162ZM41.6162 69.4843V69.4725H40.1162V69.4843H41.6162ZM41.6162 69.4962V69.4843H40.1162V69.4962H41.6162ZM41.6162 69.508V69.4962H40.1162V69.508H41.6162ZM41.6162 69.5198V69.508H40.1162V69.5198H41.6162ZM41.6162 69.5316V69.5198H40.1162V69.5316H41.6162ZM41.6162 69.5435V69.5316H40.1162V69.5435H41.6162ZM41.6162 69.5553V69.5435H40.1162V69.5553H41.6162ZM41.6162 69.5672V69.5553H40.1162V69.5672H41.6162ZM41.6162 69.579V69.5672H40.1162V69.579H41.6162ZM41.6162 69.5909V69.579H40.1162V69.5909H41.6162ZM41.6162 69.6027V69.5909H40.1162V69.6027H41.6162ZM41.6162 69.6146V69.6027H40.1162V69.6146H41.6162ZM41.6162 69.6265V69.6146H40.1162V69.6265H41.6162ZM41.6162 69.6384V69.6265H40.1162V69.6384H41.6162ZM41.6162 69.6503V69.6384H40.1162V69.6503H41.6162ZM41.6162 69.6622V69.6503H40.1162V69.6622H41.6162ZM41.6162 69.6741V69.6622H40.1162V69.6741H41.6162ZM41.6162 69.686V69.6741H40.1162V69.686H41.6162ZM41.6162 69.6979V69.686H40.1162V69.6979H41.6162ZM41.6162 69.7098V69.6979H40.1162V69.7098H41.6162ZM41.6162 69.7218V69.7098H40.1162V69.7218H41.6162ZM41.6162 69.7337V69.7218H40.1162V69.7337H41.6162ZM41.6162 69.7456V69.7337H40.1162V69.7456H41.6162ZM41.6162 69.7576V69.7456H40.1162V69.7576H41.6162ZM41.6162 69.7695V69.7576H40.1162V69.7695H41.6162ZM41.6162 69.7815V69.7695H40.1162V69.7815H41.6162ZM41.6162 69.7935V69.7815H40.1162V69.7935H41.6162ZM41.6162 69.8054V69.7935H40.1162V69.8054H41.6162ZM41.6162 69.8174V69.8054H40.1162V69.8174H41.6162ZM41.6162 69.8294V69.8174H40.1162V69.8294H41.6162ZM41.6162 69.8414V69.8294H40.1162V69.8414H41.6162ZM41.6162 69.8534V69.8414H40.1162V69.8534H41.6162ZM41.6162 69.8654V69.8534H40.1162V69.8654H41.6162ZM41.6162 69.8774V69.8654H40.1162V69.8774H41.6162ZM41.6162 69.8894V69.8774H40.1162V69.8894H41.6162ZM41.6162 69.9014V69.8894H40.1162V69.9014H41.6162ZM41.6162 69.9135V69.9014H40.1162V69.9135H41.6162ZM41.6162 69.9255V69.9135H40.1162V69.9255H41.6162ZM41.6162 69.9375V69.9255H40.1162V69.9375H41.6162ZM41.6162 69.9496V69.9375H40.1162V69.9496H41.6162ZM41.6162 69.9616V69.9496H40.1162V69.9616H41.6162ZM41.6162 69.9737V69.9616H40.1162V69.9737H41.6162ZM41.6162 69.9858V69.9737H40.1162V69.9858H41.6162ZM41.6162 69.9978V69.9858H40.1162V69.9978H41.6162ZM41.6162 70.0099V69.9978H40.1162V70.0099H41.6162ZM41.6162 70.022V70.0099H40.1162V70.022H41.6162ZM41.6162 70.0341V70.022H40.1162V70.0341H41.6162ZM41.6162 70.0462V70.0341H40.1162V70.0462H41.6162ZM41.6162 70.0583V70.0462H40.1162V70.0583H41.6162ZM41.6162 70.0704V70.0583H40.1162V70.0704H41.6162ZM41.6162 70.0825V70.0704H40.1162V70.0825H41.6162ZM41.6162 70.0946V70.0825H40.1162V70.0946H41.6162ZM41.6162 70.1068V70.0946H40.1162V70.1068H41.6162ZM41.6162 70.1189V70.1068H40.1162V70.1189H41.6162ZM41.6162 70.131V70.1189H40.1162V70.131H41.6162ZM41.6162 70.1432V70.131H40.1162V70.1432H41.6162ZM41.6162 70.1553V70.1432H40.1162V70.1553H41.6162ZM41.6162 70.1675V70.1553H40.1162V70.1675H41.6162ZM41.6162 70.1797V70.1675H40.1162V70.1797H41.6162ZM41.6162 70.1918V70.1797H40.1162V70.1918H41.6162ZM41.6162 70.204V70.1918H40.1162V70.204H41.6162ZM41.6162 70.2162V70.204H40.1162V70.2162H41.6162ZM41.6162 70.2284V70.2162H40.1162V70.2284H41.6162ZM41.6162 70.2406V70.2284H40.1162V70.2406H41.6162ZM41.6162 70.2528V70.2406H40.1162V70.2528H41.6162ZM41.6162 70.265V70.2528H40.1162V70.265H41.6162ZM41.6162 70.2772V70.265H40.1162V70.2772H41.6162ZM41.6162 70.2894V70.2772H40.1162V70.2894H41.6162ZM41.6162 70.3017V70.2894H40.1162V70.3017H41.6162ZM41.6162 70.3139V70.3017H40.1162V70.3139H41.6162ZM41.6162 70.3261V70.3139H40.1162V70.3261H41.6162ZM41.6162 70.3384V70.3261H40.1162V70.3384H41.6162ZM41.6162 70.3506V70.3384H40.1162V70.3506H41.6162ZM41.6162 70.3629V70.3506H40.1162V70.3629H41.6162ZM41.6162 70.3752V70.3629H40.1162V70.3752H41.6162ZM41.6162 70.3874V70.3752H40.1162V70.3874H41.6162ZM41.6162 70.3997V70.3874H40.1162V70.3997H41.6162ZM41.6162 70.412V70.3997H40.1162V70.412H41.6162ZM41.6162 70.4243V70.412H40.1162V70.4243H41.6162ZM41.6162 70.4366V70.4243H40.1162V70.4366H41.6162ZM41.6162 70.4489V70.4366H40.1162V70.4489H41.6162ZM41.6162 70.4612V70.4489H40.1162V70.4612H41.6162ZM41.6162 70.4735V70.4612H40.1162V70.4735H41.6162ZM41.6162 70.4858V70.4735H40.1162V70.4858H41.6162ZM41.6162 70.4981V70.4858H40.1162V70.4981H41.6162ZM41.6162 70.5105V70.4981H40.1162V70.5105H41.6162ZM41.6162 70.5228V70.5105H40.1162V70.5228H41.6162ZM41.6162 70.5352V70.5228H40.1162V70.5352H41.6162ZM41.6162 70.5475V70.5352H40.1162V70.5475H41.6162ZM41.6162 70.5599V70.5475H40.1162V70.5599H41.6162ZM41.6162 70.5722V70.5599H40.1162V70.5722H41.6162ZM41.6162 70.5846V70.5722H40.1162V70.5846H41.6162ZM41.6162 70.597V70.5846H40.1162V70.597H41.6162ZM41.6162 70.6094V70.597H40.1162V70.6094H41.6162ZM41.6162 70.6217V70.6094H40.1162V70.6217H41.6162ZM41.6162 70.6341V70.6217H40.1162V70.6341H41.6162ZM41.6162 70.6465V70.6341H40.1162V70.6465H41.6162ZM41.6162 70.659V70.6465H40.1162V70.659H41.6162ZM41.6162 70.6714V70.659H40.1162V70.6714H41.6162ZM41.6162 70.6838V70.6714H40.1162V70.6838H41.6162ZM41.6162 70.6962V70.6838H40.1162V70.6962H41.6162ZM41.6162 70.7086V70.6962H40.1162V70.7086H41.6162ZM41.6162 70.7211V70.7086H40.1162V70.7211H41.6162ZM41.6162 70.7335V70.7211H40.1162V70.7335H41.6162ZM41.6162 70.746V70.7335H40.1162V70.746H41.6162ZM41.6162 70.7584V70.746H40.1162V70.7584H41.6162ZM41.6162 70.7709V70.7584H40.1162V70.7709H41.6162ZM41.6162 70.7834V70.7709H40.1162V70.7834H41.6162ZM41.6162 70.7958V70.7834H40.1162V70.7958H41.6162ZM41.6162 70.8083V70.7958H40.1162V70.8083H41.6162ZM41.6162 70.8208V70.8083H40.1162V70.8208H41.6162ZM41.6162 70.8333V70.8208H40.1162V70.8333H41.6162ZM41.6162 70.8458V70.8333H40.1162V70.8458H41.6162ZM41.6162 70.8583V70.8458H40.1162V70.8583H41.6162ZM41.6162 70.8708V70.8583H40.1162V70.8708H41.6162ZM41.6162 70.8833V70.8708H40.1162V70.8833H41.6162ZM41.6162 70.8959V70.8833H40.1162V70.8959H41.6162ZM41.6162 70.9084V70.8959H40.1162V70.9084H41.6162ZM41.6162 70.9209V70.9084H40.1162V70.9209H41.6162ZM41.6162 70.9335V70.9209H40.1162V70.9335H41.6162ZM41.6162 70.946V70.9335H40.1162V70.946H41.6162ZM41.6162 70.9586V70.946H40.1162V70.9586H41.6162ZM41.6162 70.9711V70.9586H40.1162V70.9711H41.6162ZM41.6162 70.9837V70.9711H40.1162V70.9837H41.6162ZM41.6162 70.9963V70.9837H40.1162V70.9963H41.6162ZM41.6162 71.0089V70.9963H40.1162V71.0089H41.6162ZM41.6162 71.0215V71.0089H40.1162V71.0215H41.6162ZM41.6162 71.034V71.0215H40.1162V71.034H41.6162ZM41.6162 71.0466V71.034H40.1162V71.0466H41.6162ZM41.6162 71.0593V71.0466H40.1162V71.0593H41.6162ZM41.6162 71.0719V71.0593H40.1162V71.0719H41.6162ZM41.6162 71.0845V71.0719H40.1162V71.0845H41.6162ZM41.6162 71.0971V71.0845H40.1162V71.0971H41.6162ZM41.6162 71.1097V71.0971H40.1162V71.1097H41.6162ZM41.6162 71.1224V71.1097H40.1162V71.1224H41.6162ZM41.6162 71.135V71.1224H40.1162V71.135H41.6162ZM41.6162 71.1477V71.135H40.1162V71.1477H41.6162ZM41.6162 71.1603V71.1477H40.1162V71.1603H41.6162ZM41.6162 71.173V71.1603H40.1162V71.173H41.6162ZM41.6162 71.1857V71.173H40.1162V71.1857H41.6162ZM41.6162 71.1983V71.1857H40.1162V71.1983H41.6162ZM41.6162 71.211V71.1983H40.1162V71.211H41.6162ZM41.6162 71.2237V71.211H40.1162V71.2237H41.6162ZM41.6162 71.2364V71.2237H40.1162V71.2364H41.6162ZM41.6162 71.2491V71.2364H40.1162V71.2491H41.6162ZM41.6162 71.2618V71.2491H40.1162V71.2618H41.6162ZM41.6162 71.2745V71.2618H40.1162V71.2745H41.6162ZM41.6162 71.2872V71.2745H40.1162V71.2872H41.6162ZM41.6162 71.2999V71.2872H40.1162V71.2999H41.6162ZM41.6162 71.3127V71.2999H40.1162V71.3127H41.6162ZM41.6162 71.3254V71.3127H40.1162V71.3254H41.6162ZM41.6162 71.3381V71.3254H40.1162V71.3381H41.6162ZM41.6162 71.3509V71.3381H40.1162V71.3509H41.6162ZM41.6162 71.3636V71.3509H40.1162V71.3636H41.6162ZM41.6162 71.3764V71.3636H40.1162V71.3764H41.6162ZM41.6162 71.3892V71.3764H40.1162V71.3892H41.6162ZM41.6162 71.402V71.3892H40.1162V71.402H41.6162ZM41.6162 71.4147V71.402H40.1162V71.4147H41.6162ZM41.6162 71.4275V71.4147H40.1162V71.4275H41.6162ZM41.6162 71.4403V71.4275H40.1162V71.4403H41.6162ZM41.6162 71.4531V71.4403H40.1162V71.4531H41.6162ZM41.6162 71.4659V71.4531H40.1162V71.4659H41.6162ZM41.6162 71.4787V71.4659H40.1162V71.4787H41.6162ZM41.6162 71.4915V71.4787H40.1162V71.4915H41.6162ZM41.6162 71.5044V71.4915H40.1162V71.5044H41.6162ZM41.6162 71.5172V71.5044H40.1162V71.5172H41.6162ZM41.6162 71.53V71.5172H40.1162V71.53H41.6162ZM41.6162 71.5429V71.53H40.1162V71.5429H41.6162ZM41.6162 71.5557V71.5429H40.1162V71.5557H41.6162ZM41.6162 71.5686V71.5557H40.1162V71.5686H41.6162ZM41.6162 71.5814V71.5686H40.1162V71.5814H41.6162ZM41.6162 71.5943V71.5814H40.1162V71.5943H41.6162ZM41.6162 71.6072V71.5943H40.1162V71.6072H41.6162ZM41.6162 71.62V71.6072H40.1162V71.62H41.6162ZM41.6162 71.6329V71.62H40.1162V71.6329H41.6162ZM41.6162 71.6458V71.6329H40.1162V71.6458H41.6162ZM41.6162 71.6587V71.6458H40.1162V71.6587H41.6162ZM41.6162 71.6716V71.6587H40.1162V71.6716H41.6162ZM41.6162 71.6845V71.6716H40.1162V71.6845H41.6162ZM41.6162 71.6974V71.6845H40.1162V71.6974H41.6162ZM41.6162 71.7104V71.6974H40.1162V71.7104H41.6162ZM41.6162 71.7233V71.7104H40.1162V71.7233H41.6162ZM41.6162 71.7362V71.7233H40.1162V71.7362H41.6162ZM41.6162 71.7492V71.7362H40.1162V71.7492H41.6162ZM41.6162 71.7621V71.7492H40.1162V71.7621H41.6162ZM41.6162 71.7751V71.7621H40.1162V71.7751H41.6162ZM41.6162 71.788V71.7751H40.1162V71.788H41.6162ZM41.6162 71.801V71.788H40.1162V71.801H41.6162ZM41.6162 71.814V71.801H40.1162V71.814H41.6162ZM41.6162 71.8269V71.814H40.1162V71.8269H41.6162ZM41.6162 71.8399V71.8269H40.1162V71.8399H41.6162ZM41.6162 71.8529V71.8399H40.1162V71.8529H41.6162ZM41.6162 71.8659V71.8529H40.1162V71.8659H41.6162ZM41.6162 71.8789V71.8659H40.1162V71.8789H41.6162ZM41.6162 71.8919V71.8789H40.1162V71.8919H41.6162ZM41.6162 71.9049V71.8919H40.1162V71.9049H41.6162ZM41.6162 71.918V71.9049H40.1162V71.918H41.6162ZM41.6162 71.931V71.918H40.1162V71.931H41.6162ZM41.6162 71.944V71.931H40.1162V71.944H41.6162ZM41.6162 71.9571V71.944H40.1162V71.9571H41.6162ZM41.6162 71.9701V71.9571H40.1162V71.9701H41.6162ZM41.6162 71.9832V71.9701H40.1162V71.9832H41.6162ZM41.6162 71.9962V71.9832H40.1162V71.9962H41.6162ZM41.6162 72.0093V71.9962H40.1162V72.0093H41.6162ZM41.6162 72.0224V72.0093H40.1162V72.0224H41.6162ZM41.6162 72.0354V72.0224H40.1162V72.0354H41.6162ZM41.6162 72.0485V72.0354H40.1162V72.0485H41.6162ZM41.6162 72.0616V72.0485H40.1162V72.0616H41.6162ZM41.6162 72.0747V72.0616H40.1162V72.0747H41.6162ZM41.6162 72.0878V72.0747H40.1162V72.0878H41.6162ZM41.6162 72.1009V72.0878H40.1162V72.1009H41.6162ZM41.6162 72.114V72.1009H40.1162V72.114H41.6162ZM41.6162 72.1271V72.114H40.1162V72.1271H41.6162ZM41.6162 72.1403V72.1271H40.1162V72.1403H41.6162ZM41.6162 72.1534V72.1403H40.1162V72.1534H41.6162ZM41.6162 72.1665V72.1534H40.1162V72.1665H41.6162ZM41.6162 72.1797V72.1665H40.1162V72.1797H41.6162ZM41.6162 72.1928V72.1797H40.1162V72.1928H41.6162ZM41.6162 72.206V72.1928H40.1162V72.206H41.6162ZM41.6162 59.0012C41.6162 52.7509 43.7434 46.6866 47.648 41.806L46.4767 40.8689C42.3593 46.0156 40.1162 52.4103 40.1162 59.0012H41.6162ZM41.6162 59.0094V59.0012H40.1162V59.0094H41.6162ZM41.6162 59.0176V59.0094H40.1162V59.0176H41.6162ZM41.6162 59.0257V59.0176H40.1162V59.0257H41.6162ZM41.6162 59.0339V59.0257H40.1162V59.0339H41.6162ZM41.6162 59.042V59.0339H40.1162V59.042H41.6162ZM41.6162 59.0502V59.042H40.1162V59.0502H41.6162ZM41.6162 59.0583V59.0502H40.1162V59.0583H41.6162ZM41.6162 59.0665V59.0583H40.1162V59.0665H41.6162ZM41.6162 59.0746V59.0665H40.1162V59.0746H41.6162ZM41.6162 59.0827V59.0746H40.1162V59.0827H41.6162ZM41.6162 59.0908V59.0827H40.1162V59.0908H41.6162ZM41.6162 59.0989V59.0908H40.1162V59.0989H41.6162ZM41.6162 59.107V59.0989H40.1162V59.107H41.6162ZM41.6162 59.1151V59.107H40.1162V59.1151H41.6162ZM41.6162 59.1231V59.1151H40.1162V59.1231H41.6162ZM41.6162 59.1312V59.1231H40.1162V59.1312H41.6162ZM41.6162 59.1393V59.1312H40.1162V59.1393H41.6162ZM41.6162 59.1473V59.1393H40.1162V59.1473H41.6162ZM41.6162 59.1553V59.1473H40.1162V59.1553H41.6162ZM41.6162 59.1634V59.1553H40.1162V59.1634H41.6162ZM41.6162 59.1714V59.1634H40.1162V59.1714H41.6162ZM41.6162 59.1794V59.1714H40.1162V59.1794H41.6162ZM41.6162 59.1874V59.1794H40.1162V59.1874H41.6162ZM41.6162 59.1954V59.1874H40.1162V59.1954H41.6162ZM41.6162 59.2034V59.1954H40.1162V59.2034H41.6162ZM41.6162 59.2114V59.2034H40.1162V59.2114H41.6162ZM41.6162 59.2194V59.2114H40.1162V59.2194H41.6162ZM41.6162 59.2274V59.2194H40.1162V59.2274H41.6162ZM41.6162 59.2353V59.2274H40.1162V59.2353H41.6162ZM41.6162 59.2433V59.2353H40.1162V59.2433H41.6162ZM41.6162 59.2512V59.2433H40.1162V59.2512H41.6162ZM41.6162 59.2591V59.2512H40.1162V59.2591H41.6162ZM41.6162 59.2671V59.2591H40.1162V59.2671H41.6162ZM41.6162 59.275V59.2671H40.1162V59.275H41.6162ZM41.6162 59.2829V59.275H40.1162V59.2829H41.6162ZM41.6162 59.2908V59.2829H40.1162V59.2908H41.6162ZM41.6162 59.2987V59.2908H40.1162V59.2987H41.6162ZM41.6162 59.3066V59.2987H40.1162V59.3066H41.6162ZM41.6162 59.3145V59.3066H40.1162V59.3145H41.6162ZM41.6162 59.3224V59.3145H40.1162V59.3224H41.6162ZM41.6162 59.3302V59.3224H40.1162V59.3302H41.6162ZM41.6162 59.3381V59.3302H40.1162V59.3381H41.6162ZM41.6162 59.3459V59.3381H40.1162V59.3459H41.6162ZM41.6162 59.3538V59.3459H40.1162V59.3538H41.6162ZM41.6162 59.3616V59.3538H40.1162V59.3616H41.6162ZM41.6162 59.3694V59.3616H40.1162V59.3694H41.6162ZM41.6162 59.3772V59.3694H40.1162V59.3772H41.6162ZM41.6162 59.3851V59.3772H40.1162V59.3851H41.6162ZM41.6162 59.3929V59.3851H40.1162V59.3929H41.6162ZM41.6162 59.4006V59.3929H40.1162V59.4006H41.6162ZM41.6162 59.4084V59.4006H40.1162V59.4084H41.6162ZM41.6162 59.4162V59.4084H40.1162V59.4162H41.6162ZM41.6162 59.424V59.4162H40.1162V59.424H41.6162ZM41.6162 59.4317V59.424H40.1162V59.4317H41.6162ZM41.6162 59.4395V59.4317H40.1162V59.4395H41.6162ZM41.6162 59.4472V59.4395H40.1162V59.4472H41.6162ZM41.6162 59.455V59.4472H40.1162V59.455H41.6162ZM41.6162 59.4627V59.455H40.1162V59.4627H41.6162ZM41.6162 59.4704V59.4627H40.1162V59.4704H41.6162ZM41.6162 59.4781V59.4704H40.1162V59.4781H41.6162ZM41.6162 59.4858V59.4781H40.1162V59.4858H41.6162ZM41.6162 59.4935V59.4858H40.1162V59.4935H41.6162ZM41.6162 59.5012V59.4935H40.1162V59.5012H41.6162ZM41.6162 59.5089V59.5012H40.1162V59.5089H41.6162ZM41.6162 59.5166V59.5089H40.1162V59.5166H41.6162ZM41.6162 59.5242V59.5166H40.1162V59.5242H41.6162ZM41.6162 59.5319V59.5242H40.1162V59.5319H41.6162ZM41.6162 59.5396V59.5319H40.1162V59.5396H41.6162ZM41.6162 59.5472V59.5396H40.1162V59.5472H41.6162ZM41.6162 59.5548V59.5472H40.1162V59.5548H41.6162ZM41.6162 59.5624V59.5548H40.1162V59.5624H41.6162ZM41.6162 59.5701V59.5624H40.1162V59.5701H41.6162ZM41.6162 59.5777V59.5701H40.1162V59.5777H41.6162ZM41.6162 59.5853V59.5777H40.1162V59.5853H41.6162ZM41.6162 59.5929V59.5853H40.1162V59.5929H41.6162ZM41.6162 59.6005V59.5929H40.1162V59.6005H41.6162ZM41.6162 59.608V59.6005H40.1162V59.608H41.6162ZM41.6162 59.6156V59.608H40.1162V59.6156H41.6162ZM41.6162 59.6232V59.6156H40.1162V59.6232H41.6162ZM41.6162 59.6307V59.6232H40.1162V59.6307H41.6162ZM41.6162 59.6383V59.6307H40.1162V59.6383H41.6162ZM41.6162 59.6458V59.6383H40.1162V59.6458H41.6162ZM41.6162 59.6533V59.6458H40.1162V59.6533H41.6162ZM41.6162 59.6608V59.6533H40.1162V59.6608H41.6162ZM41.6162 59.6684V59.6608H40.1162V59.6684H41.6162ZM41.6162 59.6759V59.6684H40.1162V59.6759H41.6162ZM41.6162 59.6834V59.6759H40.1162V59.6834H41.6162ZM41.6162 59.6908V59.6834H40.1162V59.6908H41.6162ZM41.6162 59.6983V59.6908H40.1162V59.6983H41.6162ZM41.6162 59.7058V59.6983H40.1162V59.7058H41.6162ZM41.6162 59.7133V59.7058H40.1162V59.7133H41.6162ZM41.6162 59.7207V59.7133H40.1162V59.7207H41.6162ZM41.6162 59.7282V59.7207H40.1162V59.7282H41.6162ZM41.6162 59.7356V59.7282H40.1162V59.7356H41.6162ZM41.6162 59.743V59.7356H40.1162V59.743H41.6162ZM41.6162 59.7505V59.743H40.1162V59.7505H41.6162ZM41.6162 59.7579V59.7505H40.1162V59.7579H41.6162ZM41.6162 59.7653V59.7579H40.1162V59.7653H41.6162ZM41.6162 59.7727V59.7653H40.1162V59.7727H41.6162ZM41.6162 59.7801V59.7727H40.1162V59.7801H41.6162ZM41.6162 59.7875V59.7801H40.1162V59.7875H41.6162ZM41.6162 59.7949V59.7875H40.1162V59.7949H41.6162ZM41.6162 59.8022V59.7949H40.1162V59.8022H41.6162ZM41.6162 59.8096V59.8022H40.1162V59.8096H41.6162ZM41.6162 59.8169V59.8096H40.1162V59.8169H41.6162ZM41.6162 59.8243V59.8169H40.1162V59.8243H41.6162ZM41.6162 59.8316V59.8243H40.1162V59.8316H41.6162ZM41.6162 59.839V59.8316H40.1162V59.839H41.6162ZM41.6162 59.8463V59.839H40.1162V59.8463H41.6162ZM41.6162 59.8536V59.8463H40.1162V59.8536H41.6162ZM41.6162 59.8609V59.8536H40.1162V59.8609H41.6162ZM41.6162 59.8682V59.8609H40.1162V59.8682H41.6162ZM41.6162 59.8755V59.8682H40.1162V59.8755H41.6162ZM41.6162 59.8828V59.8755H40.1162V59.8828H41.6162ZM41.6162 59.89V59.8828H40.1162V59.89H41.6162ZM41.6162 59.8973V59.89H40.1162V59.8973H41.6162ZM41.6162 59.9046V59.8973H40.1162V59.9046H41.6162ZM41.6162 59.9118V59.9046H40.1162V59.9118H41.6162ZM41.6162 59.919V59.9118H40.1162V59.919H41.6162ZM41.6162 59.9263V59.919H40.1162V59.9263H41.6162ZM41.6162 59.9335V59.9263H40.1162V59.9335H41.6162ZM41.6162 59.9407V59.9335H40.1162V59.9407H41.6162ZM41.6162 59.9479V59.9407H40.1162V59.9479H41.6162ZM41.6162 59.9551V59.9479H40.1162V59.9551H41.6162ZM41.6162 59.9623V59.9551H40.1162V59.9623H41.6162ZM41.6162 59.9695V59.9623H40.1162V59.9695H41.6162ZM41.6162 59.9767V59.9695H40.1162V59.9767H41.6162ZM41.6162 59.9839V59.9767H40.1162V59.9839H41.6162ZM41.6162 59.991V59.9839H40.1162V59.991H41.6162ZM41.6162 59.9982V59.991H40.1162V59.9982H41.6162ZM41.6162 60.0053V59.9982H40.1162V60.0053H41.6162ZM41.6162 60.0124V60.0053H40.1162V60.0124H41.6162ZM41.6162 60.0196V60.0124H40.1162V60.0196H41.6162ZM41.6162 60.0267V60.0196H40.1162V60.0267H41.6162ZM41.6162 60.0338V60.0267H40.1162V60.0338H41.6162ZM41.6162 60.0409V60.0338H40.1162V60.0409H41.6162ZM41.6162 60.048V60.0409H40.1162V60.048H41.6162ZM41.6162 60.0551V60.048H40.1162V60.0551H41.6162ZM41.6162 60.0622V60.0551H40.1162V60.0622H41.6162ZM41.6162 60.0693V60.0622H40.1162V60.0693H41.6162ZM41.6162 60.0763V60.0693H40.1162V60.0763H41.6162ZM41.6162 60.0834V60.0763H40.1162V60.0834H41.6162ZM41.6162 60.0904V60.0834H40.1162V60.0904H41.6162ZM41.6162 60.0975V60.0904H40.1162V60.0975H41.6162ZM41.6162 60.1045V60.0975H40.1162V60.1045H41.6162ZM41.6162 60.1115V60.1045H40.1162V60.1115H41.6162ZM41.6162 60.1185V60.1115H40.1162V60.1185H41.6162ZM41.6162 60.1256V60.1185H40.1162V60.1256H41.6162ZM41.6162 60.1326V60.1256H40.1162V60.1326H41.6162ZM41.6162 60.1396V60.1326H40.1162V60.1396H41.6162ZM41.6162 60.1465V60.1396H40.1162V60.1465H41.6162ZM41.6162 60.1535V60.1465H40.1162V60.1535H41.6162ZM41.6162 60.1605V60.1535H40.1162V60.1605H41.6162ZM41.6162 60.1674V60.1605H40.1162V60.1674H41.6162ZM41.6162 60.1744V60.1674H40.1162V60.1744H41.6162ZM41.6162 60.1813V60.1744H40.1162V60.1813H41.6162ZM41.6162 60.1883V60.1813H40.1162V60.1883H41.6162ZM41.6162 60.1952V60.1883H40.1162V60.1952H41.6162ZM41.6162 60.2021V60.1952H40.1162V60.2021H41.6162ZM41.6162 60.209V60.2021H40.1162V60.209H41.6162ZM41.6162 60.2159V60.209H40.1162V60.2159H41.6162ZM41.6162 60.2228V60.2159H40.1162V60.2228H41.6162ZM41.6162 60.2297V60.2228H40.1162V60.2297H41.6162ZM41.6162 60.2366V60.2297H40.1162V60.2366H41.6162ZM41.6162 60.2435V60.2366H40.1162V60.2435H41.6162ZM41.6162 60.2504V60.2435H40.1162V60.2504H41.6162ZM41.6162 60.2572V60.2504H40.1162V60.2572H41.6162ZM41.6162 60.2641V60.2572H40.1162V60.2641H41.6162ZM41.6162 60.2709V60.2641H40.1162V60.2709H41.6162ZM41.6162 60.2777V60.2709H40.1162V60.2777H41.6162ZM41.6162 60.2846V60.2777H40.1162V60.2846H41.6162ZM41.6162 60.2914V60.2846H40.1162V60.2914H41.6162ZM41.6162 60.2982V60.2914H40.1162V60.2982H41.6162ZM41.6162 60.305V60.2982H40.1162V60.305H41.6162ZM41.6162 60.3118V60.305H40.1162V60.3118H41.6162ZM41.6162 60.3186V60.3118H40.1162V60.3186H41.6162ZM41.6162 60.3253V60.3186H40.1162V60.3253H41.6162ZM41.6162 60.3321V60.3253H40.1162V60.3321H41.6162ZM41.6162 60.3389V60.3321H40.1162V60.3389H41.6162ZM41.6162 60.3456V60.3389H40.1162V60.3456H41.6162ZM41.6162 60.3524V60.3456H40.1162V60.3524H41.6162ZM41.6162 60.3591V60.3524H40.1162V60.3591H41.6162ZM41.6162 60.3658V60.3591H40.1162V60.3658H41.6162ZM41.6162 60.3726V60.3658H40.1162V60.3726H41.6162ZM41.6162 60.3793V60.3726H40.1162V60.3793H41.6162ZM41.6162 60.386V60.3793H40.1162V60.386H41.6162ZM41.6162 60.3927V60.386H40.1162V60.3927H41.6162ZM41.6162 60.3994V60.3927H40.1162V60.3994H41.6162ZM41.6162 60.406V60.3994H40.1162V60.406H41.6162ZM41.6162 60.4127V60.406H40.1162V60.4127H41.6162ZM41.6162 60.4194V60.4127H40.1162V60.4194H41.6162ZM41.6162 60.426V60.4194H40.1162V60.426H41.6162ZM41.6162 60.4327V60.426H40.1162V60.4327H41.6162ZM41.6162 60.4393V60.4327H40.1162V60.4393H41.6162ZM41.6162 60.446V60.4393H40.1162V60.446H41.6162ZM41.6162 60.4526V60.446H40.1162V60.4526H41.6162ZM41.6162 60.4592V60.4526H40.1162V60.4592H41.6162ZM41.6162 60.4658V60.4592H40.1162V60.4658H41.6162ZM41.6162 60.4724V60.4658H40.1162V60.4724H41.6162ZM41.6162 60.479V60.4724H40.1162V60.479H41.6162ZM41.6162 60.4856V60.479H40.1162V60.4856H41.6162ZM41.6162 60.4922V60.4856H40.1162V60.4922H41.6162ZM41.6162 60.4987V60.4922H40.1162V60.4987H41.6162ZM41.6162 60.5053V60.4987H40.1162V60.5053H41.6162ZM41.6162 60.5119V60.5053H40.1162V60.5119H41.6162ZM41.6162 60.5184V60.5119H40.1162V60.5184H41.6162ZM41.6162 60.5249V60.5184H40.1162V60.5249H41.6162ZM41.6162 60.5315V60.5249H40.1162V60.5315H41.6162ZM41.6162 60.538V60.5315H40.1162V60.538H41.6162ZM41.6162 60.5445V60.538H40.1162V60.5445H41.6162ZM41.6162 60.551V60.5445H40.1162V60.551H41.6162ZM41.6162 60.5575V60.551H40.1162V60.5575H41.6162ZM41.6162 60.564V60.5575H40.1162V60.564H41.6162ZM41.6162 60.5705V60.564H40.1162V60.5705H41.6162ZM41.6162 60.577V60.5705H40.1162V60.577H41.6162ZM41.6162 60.5834V60.577H40.1162V60.5834H41.6162ZM41.6162 60.5899V60.5834H40.1162V60.5899H41.6162ZM41.6162 60.5963V60.5899H40.1162V60.5963H41.6162ZM41.6162 60.6028V60.5963H40.1162V60.6028H41.6162ZM41.6162 60.6092V60.6028H40.1162V60.6092H41.6162ZM41.6162 60.6156V60.6092H40.1162V60.6156H41.6162ZM41.6162 60.622V60.6156H40.1162V60.622H41.6162ZM41.6162 60.6285V60.622H40.1162V60.6285H41.6162ZM41.6162 60.6349V60.6285H40.1162V60.6349H41.6162ZM41.6162 60.6413V60.6349H40.1162V60.6413H41.6162ZM41.6162 60.6476V60.6413H40.1162V60.6476H41.6162ZM41.6162 60.654V60.6476H40.1162V60.654H41.6162ZM41.6162 60.6604V60.654H40.1162V60.6604H41.6162ZM41.6162 60.6667V60.6604H40.1162V60.6667H41.6162ZM41.6162 60.6731V60.6667H40.1162V60.6731H41.6162ZM41.6162 60.6794V60.6731H40.1162V60.6794H41.6162ZM41.6162 60.6858V60.6794H40.1162V60.6858H41.6162ZM41.6162 60.6921V60.6858H40.1162V60.6921H41.6162ZM41.6162 60.6984V60.6921H40.1162V60.6984H41.6162ZM41.6162 60.7047V60.6984H40.1162V60.7047H41.6162ZM41.6162 60.7111V60.7047H40.1162V60.7111H41.6162ZM41.6162 60.7173V60.7111H40.1162V60.7173H41.6162ZM41.6162 60.7236V60.7173H40.1162V60.7236H41.6162ZM41.6162 60.7299V60.7236H40.1162V60.7299H41.6162ZM41.6162 60.7362V60.7299H40.1162V60.7362H41.6162ZM41.6162 60.7425V60.7362H40.1162V60.7425H41.6162ZM41.6162 60.7487V60.7425H40.1162V60.7487H41.6162ZM41.6162 60.755V60.7487H40.1162V60.755H41.6162ZM41.6162 60.7612V60.755H40.1162V60.7612H41.6162ZM41.6162 60.7674V60.7612H40.1162V60.7674H41.6162ZM41.6162 60.7737V60.7674H40.1162V60.7737H41.6162ZM41.6162 60.7799V60.7737H40.1162V60.7799H41.6162ZM41.6162 60.7861V60.7799H40.1162V60.7861H41.6162ZM41.6162 60.7923V60.7861H40.1162V60.7923H41.6162ZM41.6162 60.7985V60.7923H40.1162V60.7985H41.6162ZM41.6162 60.8047V60.7985H40.1162V60.8047H41.6162ZM41.6162 60.8109V60.8047H40.1162V60.8109H41.6162ZM41.6162 60.817V60.8109H40.1162V60.817H41.6162ZM41.6162 60.8232V60.817H40.1162V60.8232H41.6162ZM41.6162 60.8293V60.8232H40.1162V60.8293H41.6162ZM41.6162 60.8355V60.8293H40.1162V60.8355H41.6162ZM41.6162 60.8416V60.8355H40.1162V60.8416H41.6162ZM41.6162 60.8477V60.8416H40.1162V60.8477H41.6162ZM41.6162 60.8539V60.8477H40.1162V60.8539H41.6162ZM41.6162 60.86V60.8539H40.1162V60.86H41.6162ZM41.6162 60.8661V60.86H40.1162V60.8661H41.6162ZM41.6162 60.8722V60.8661H40.1162V60.8722H41.6162ZM41.6162 60.8783V60.8722H40.1162V60.8783H41.6162ZM41.6162 60.8844V60.8783H40.1162V60.8844H41.6162ZM41.6162 60.8904V60.8844H40.1162V60.8904H41.6162ZM41.6162 60.8965V60.8904H40.1162V60.8965H41.6162ZM41.6162 60.9026V60.8965H40.1162V60.9026H41.6162ZM41.6162 60.9086V60.9026H40.1162V60.9086H41.6162ZM41.6162 60.9146V60.9086H40.1162V60.9146H41.6162ZM41.6162 60.9207V60.9146H40.1162V60.9207H41.6162ZM41.6162 60.9267V60.9207H40.1162V60.9267H41.6162ZM41.6162 60.9327V60.9267H40.1162V60.9327H41.6162ZM41.6162 60.9387V60.9327H40.1162V60.9387H41.6162ZM41.6162 60.9447V60.9387H40.1162V60.9447H41.6162ZM41.6162 60.9507V60.9447H40.1162V60.9507H41.6162ZM41.6162 60.9567V60.9507H40.1162V60.9567H41.6162ZM41.6162 60.9627V60.9567H40.1162V60.9627H41.6162ZM41.6162 60.9687V60.9627H40.1162V60.9687H41.6162ZM41.6162 60.9746V60.9687H40.1162V60.9746H41.6162ZM41.6162 60.9806V60.9746H40.1162V60.9806H41.6162ZM41.6162 60.9865V60.9806H40.1162V60.9865H41.6162ZM41.6162 60.9925V60.9865H40.1162V60.9925H41.6162ZM41.6162 60.9984V60.9925H40.1162V60.9984H41.6162ZM41.6162 61.0043V60.9984H40.1162V61.0043H41.6162ZM41.6162 61.0102V61.0043H40.1162V61.0102H41.6162ZM41.6162 61.0161V61.0102H40.1162V61.0161H41.6162ZM41.6162 61.022V61.0161H40.1162V61.022H41.6162ZM41.6162 61.0279V61.022H40.1162V61.0279H41.6162ZM41.6162 61.0338V61.0279H40.1162V61.0338H41.6162ZM41.6162 61.0397V61.0338H40.1162V61.0397H41.6162ZM41.6162 61.0455V61.0397H40.1162V61.0455H41.6162ZM41.6162 61.0514V61.0455H40.1162V61.0514H41.6162ZM41.6162 61.0572V61.0514H40.1162V61.0572H41.6162ZM41.6162 61.0631V61.0572H40.1162V61.0631H41.6162ZM41.6162 61.0689V61.0631H40.1162V61.0689H41.6162ZM41.6162 61.0747V61.0689H40.1162V61.0747H41.6162ZM41.6162 61.0806V61.0747H40.1162V61.0806H41.6162ZM41.6162 61.0864V61.0806H40.1162V61.0864H41.6162ZM41.6162 61.0922V61.0864H40.1162V61.0922H41.6162ZM41.6162 61.098V61.0922H40.1162V61.098H41.6162ZM41.6162 61.1038V61.098H40.1162V61.1038H41.6162ZM41.6162 61.1095V61.1038H40.1162V61.1095H41.6162ZM41.6162 61.1153V61.1095H40.1162V61.1153H41.6162ZM41.6162 61.1211V61.1153H40.1162V61.1211H41.6162ZM41.6162 61.1268V61.1211H40.1162V61.1268H41.6162ZM41.6162 61.1326V61.1268H40.1162V61.1326H41.6162ZM41.6162 61.1383V61.1326H40.1162V61.1383H41.6162ZM41.6162 61.144V61.1383H40.1162V61.144H41.6162ZM41.6162 61.1498V61.144H40.1162V61.1498H41.6162ZM41.6162 61.1555V61.1498H40.1162V61.1555H41.6162ZM41.6162 61.1612V61.1555H40.1162V61.1612H41.6162ZM41.6162 61.1669V61.1612H40.1162V61.1669H41.6162ZM41.6162 61.1726V61.1669H40.1162V61.1726H41.6162ZM41.6162 61.1782V61.1726H40.1162V61.1782H41.6162ZM41.6162 61.1839V61.1782H40.1162V61.1839H41.6162ZM41.6162 61.1896V61.1839H40.1162V61.1896H41.6162ZM41.6162 61.1952V61.1896H40.1162V61.1952H41.6162ZM41.6162 61.2009V61.1952H40.1162V61.2009H41.6162ZM41.6162 61.2065V61.2009H40.1162V61.2065H41.6162ZM41.6162 61.2122V61.2065H40.1162V61.2122H41.6162ZM41.6162 61.2178V61.2122H40.1162V61.2178H41.6162ZM41.6162 61.2234V61.2178H40.1162V61.2234H41.6162ZM41.6162 61.229V61.2234H40.1162V61.229H41.6162ZM41.6162 61.2346V61.229H40.1162V61.2346H41.6162ZM41.6162 61.2402V61.2346H40.1162V61.2402H41.6162ZM41.6162 61.2458V61.2402H40.1162V61.2458H41.6162ZM41.6162 61.2514V61.2458H40.1162V61.2514H41.6162ZM41.6162 61.2569V61.2514H40.1162V61.2569H41.6162ZM41.6162 61.2625V61.2569H40.1162V61.2625H41.6162ZM41.6162 61.2681V61.2625H40.1162V61.2681H41.6162ZM41.6162 61.2736V61.2681H40.1162V61.2736H41.6162ZM41.6162 61.2791V61.2736H40.1162V61.2791H41.6162ZM41.6162 61.2847V61.2791H40.1162V61.2847H41.6162ZM41.6162 61.2902V61.2847H40.1162V61.2902H41.6162ZM41.6162 61.2957V61.2902H40.1162V61.2957H41.6162ZM41.6162 61.3012V61.2957H40.1162V61.3012H41.6162ZM41.6162 61.3067V61.3012H40.1162V61.3067H41.6162ZM41.6162 61.3122V61.3067H40.1162V61.3122H41.6162ZM41.6162 61.3177V61.3122H40.1162V61.3177H41.6162ZM41.6162 61.3232V61.3177H40.1162V61.3232H41.6162ZM41.6162 61.3286V61.3232H40.1162V61.3286H41.6162ZM41.6162 61.3341V61.3286H40.1162V61.3341H41.6162ZM41.6162 61.3395V61.3341H40.1162V61.3395H41.6162ZM41.6162 61.345V61.3395H40.1162V61.345H41.6162ZM41.6162 61.3504V61.345H40.1162V61.3504H41.6162ZM41.6162 61.3558V61.3504H40.1162V61.3558H41.6162ZM41.6162 61.3612V61.3558H40.1162V61.3612H41.6162ZM41.6162 61.3667V61.3612H40.1162V61.3667H41.6162ZM41.6162 61.3721V61.3667H40.1162V61.3721H41.6162ZM41.6162 61.3775V61.3721H40.1162V61.3775H41.6162ZM41.6162 61.3828V61.3775H40.1162V61.3828H41.6162ZM41.6162 61.3882V61.3828H40.1162V61.3882H41.6162ZM41.6162 61.3936V61.3882H40.1162V61.3936H41.6162ZM41.6162 61.399V61.3936H40.1162V61.399H41.6162ZM41.6162 61.4043V61.399H40.1162V61.4043H41.6162ZM41.6162 61.4097V61.4043H40.1162V61.4097H41.6162ZM41.6162 61.415V61.4097H40.1162V61.415H41.6162ZM41.6162 61.4203V61.415H40.1162V61.4203H41.6162ZM41.6162 61.4256V61.4203H40.1162V61.4256H41.6162ZM41.6162 61.431V61.4256H40.1162V61.431H41.6162ZM41.6162 61.4363V61.431H40.1162V61.4363H41.6162ZM41.6162 61.4416V61.4363H40.1162V61.4416H41.6162ZM41.6162 61.4468V61.4416H40.1162V61.4468H41.6162ZM41.6162 61.4521V61.4468H40.1162V61.4521H41.6162ZM41.6162 61.4574V61.4521H40.1162V61.4574H41.6162ZM41.6162 61.4627V61.4574H40.1162V61.4627H41.6162ZM41.6162 61.4679V61.4627H40.1162V61.4679H41.6162ZM41.6162 61.4732V61.4679H40.1162V61.4732H41.6162ZM41.6162 61.4784V61.4732H40.1162V61.4784H41.6162ZM41.6162 61.4837V61.4784H40.1162V61.4837H41.6162ZM41.6162 61.4889V61.4837H40.1162V61.4889H41.6162ZM41.6162 61.4941V61.4889H40.1162V61.4941H41.6162ZM41.6162 61.4993V61.4941H40.1162V61.4993H41.6162ZM41.6162 61.5045V61.4993H40.1162V61.5045H41.6162ZM41.6162 61.5097V61.5045H40.1162V61.5097H41.6162ZM41.6162 61.5149V61.5097H40.1162V61.5149H41.6162ZM41.6162 61.5201V61.5149H40.1162V61.5201H41.6162ZM41.6162 61.5252V61.5201H40.1162V61.5252H41.6162ZM41.6162 61.5304V61.5252H40.1162V61.5304H41.6162ZM41.6162 61.5356V61.5304H40.1162V61.5356H41.6162ZM41.6162 61.5407V61.5356H40.1162V61.5407H41.6162ZM41.6162 61.5458V61.5407H40.1162V61.5458H41.6162ZM41.6162 61.551V61.5458H40.1162V61.551H41.6162ZM41.6162 61.5561V61.551H40.1162V61.5561H41.6162ZM41.6162 61.5612V61.5561H40.1162V61.5612H41.6162ZM41.6162 61.5663V61.5612H40.1162V61.5663H41.6162ZM41.6162 61.5714V61.5663H40.1162V61.5714H41.6162ZM41.6162 61.5765V61.5714H40.1162V61.5765H41.6162ZM41.6162 61.5816V61.5765H40.1162V61.5816H41.6162ZM41.6162 61.5867V61.5816H40.1162V61.5867H41.6162ZM41.6162 61.5917V61.5867H40.1162V61.5917H41.6162ZM41.6162 61.5968V61.5917H40.1162V61.5968H41.6162ZM41.6162 61.6018V61.5968H40.1162V61.6018H41.6162ZM41.6162 61.6069V61.6018H40.1162V61.6069H41.6162ZM41.6162 61.6119V61.6069H40.1162V61.6119H41.6162ZM41.6162 61.6169V61.6119H40.1162V61.6169H41.6162ZM41.6162 61.6219V61.6169H40.1162V61.6219H41.6162ZM41.6162 61.627V61.6219H40.1162V61.627H41.6162ZM41.6162 61.632V61.627H40.1162V61.632H41.6162ZM41.6162 61.637V61.632H40.1162V61.637H41.6162ZM41.6162 61.6419V61.637H40.1162V61.6419H41.6162ZM41.6162 61.6469V61.6419H40.1162V61.6469H41.6162ZM41.6162 61.6519V61.6469H40.1162V61.6519H41.6162ZM41.6162 61.6568V61.6519H40.1162V61.6568H41.6162ZM41.6162 61.6618V61.6568H40.1162V61.6618H41.6162ZM41.6162 61.6667V61.6618H40.1162V61.6667H41.6162ZM41.6162 61.6717V61.6667H40.1162V61.6717H41.6162ZM41.6162 61.6766V61.6717H40.1162V61.6766H41.6162ZM41.6162 61.6815V61.6766H40.1162V61.6815H41.6162ZM41.6162 61.6865V61.6815H40.1162V61.6865H41.6162ZM41.6162 61.6914V61.6865H40.1162V61.6914H41.6162ZM41.6162 61.6963V61.6914H40.1162V61.6963H41.6162ZM41.6162 61.7011V61.6963H40.1162V61.7011H41.6162ZM41.6162 61.706V61.7011H40.1162V61.706H41.6162ZM41.6162 61.7109V61.706H40.1162V61.7109H41.6162ZM41.6162 61.7158V61.7109H40.1162V61.7158H41.6162ZM41.6162 61.7206V61.7158H40.1162V61.7206H41.6162ZM41.6162 61.7255V61.7206H40.1162V61.7255H41.6162ZM41.6162 61.7303V61.7255H40.1162V61.7303H41.6162ZM41.6162 61.7352V61.7303H40.1162V61.7352H41.6162ZM41.6162 61.74V61.7352H40.1162V61.74H41.6162ZM41.6162 61.7448V61.74H40.1162V61.7448H41.6162ZM41.6162 61.7496V61.7448H40.1162V61.7496H41.6162ZM41.6162 61.7544V61.7496H40.1162V61.7544H41.6162ZM41.6162 61.7592V61.7544H40.1162V61.7592H41.6162ZM41.6162 61.764V61.7592H40.1162V61.764H41.6162ZM41.6162 61.7688V61.764H40.1162V61.7688H41.6162ZM41.6162 61.7735V61.7688H40.1162V61.7735H41.6162ZM41.6162 61.7783V61.7735H40.1162V61.7783H41.6162ZM41.6162 61.7831V61.7783H40.1162V61.7831H41.6162ZM41.6162 61.7878V61.7831H40.1162V61.7878H41.6162ZM41.6162 61.7925V61.7878H40.1162V61.7925H41.6162ZM41.6162 61.7973V61.7925H40.1162V61.7973H41.6162ZM41.6162 61.802V61.7973H40.1162V61.802H41.6162ZM41.6162 61.8067V61.802H40.1162V61.8067H41.6162ZM41.6162 61.8114V61.8067H40.1162V61.8114H41.6162ZM41.6162 61.8161V61.8114H40.1162V61.8161H41.6162ZM41.6162 61.8208V61.8161H40.1162V61.8208H41.6162ZM41.6162 61.8255V61.8208H40.1162V61.8255H41.6162ZM41.6162 61.8302V61.8255H40.1162V61.8302H41.6162ZM41.6162 61.8348V61.8302H40.1162V61.8348H41.6162ZM41.6162 61.8395V61.8348H40.1162V61.8395H41.6162ZM41.6162 61.8441V61.8395H40.1162V61.8441H41.6162ZM41.6162 61.8488V61.8441H40.1162V61.8488H41.6162ZM41.6162 61.8534V61.8488H40.1162V61.8534H41.6162ZM41.6162 61.858V61.8534H40.1162V61.858H41.6162ZM41.6162 61.8626V61.858H40.1162V61.8626H41.6162ZM41.6162 61.8673V61.8626H40.1162V61.8673H41.6162ZM41.6162 61.8719V61.8673H40.1162V61.8719H41.6162ZM41.6162 61.8765V61.8719H40.1162V61.8765H41.6162ZM41.6162 61.881V61.8765H40.1162V61.881H41.6162ZM41.6162 61.8856V61.881H40.1162V61.8856H41.6162ZM41.6162 61.8902V61.8856H40.1162V61.8902H41.6162ZM41.6162 61.8948V61.8902H40.1162V61.8948H41.6162ZM41.6162 61.8993V61.8948H40.1162V61.8993H41.6162ZM41.6162 61.9039V61.8993H40.1162V61.9039H41.6162ZM41.6162 61.9084V61.9039H40.1162V61.9084H41.6162ZM41.6162 61.9129V61.9084H40.1162V61.9129H41.6162ZM41.6162 61.9174V61.9129H40.1162V61.9174H41.6162ZM41.6162 61.922V61.9174H40.1162V61.922H41.6162ZM41.6162 61.9265V61.922H40.1162V61.9265H41.6162ZM41.6162 61.931V61.9265H40.1162V61.931H41.6162ZM41.6162 61.9355V61.931H40.1162V61.9355H41.6162ZM41.6162 61.9399V61.9355H40.1162V61.9399H41.6162ZM41.6162 61.9444V61.9399H40.1162V61.9444H41.6162ZM41.6162 61.9489V61.9444H40.1162V61.9489H41.6162ZM41.6162 61.9533V61.9489H40.1162V61.9533H41.6162ZM41.6162 61.9578V61.9533H40.1162V61.9578H41.6162ZM41.6162 61.9622V61.9578H40.1162V61.9622H41.6162ZM41.6162 61.9667V61.9622H40.1162V61.9667H41.6162ZM41.6162 61.9711V61.9667H40.1162V61.9711H41.6162ZM41.6162 61.9755V61.9711H40.1162V61.9755H41.6162ZM41.6162 61.9799V61.9755H40.1162V61.9799H41.6162ZM41.6162 61.9843V61.9799H40.1162V61.9843H41.6162ZM41.6162 61.9887V61.9843H40.1162V61.9887H41.6162ZM41.6162 61.9931V61.9887H40.1162V61.9931H41.6162ZM41.6162 61.9975V61.9931H40.1162V61.9975H41.6162ZM41.6162 62.0018V61.9975H40.1162V62.0018H41.6162ZM41.6162 62.0062V62.0018H40.1162V62.0062H41.6162ZM41.6162 62.0106V62.0062H40.1162V62.0106H41.6162ZM41.6162 62.0149V62.0106H40.1162V62.0149H41.6162ZM41.6162 62.0192V62.0149H40.1162V62.0192H41.6162ZM41.6162 62.0236V62.0192H40.1162V62.0236H41.6162ZM41.6162 62.0279V62.0236H40.1162V62.0279H41.6162ZM41.6162 62.0322V62.0279H40.1162V62.0322H41.6162ZM41.6162 62.0365V62.0322H40.1162V62.0365H41.6162ZM41.6162 62.0408V62.0365H40.1162V62.0408H41.6162ZM41.6162 62.0451V62.0408H40.1162V62.0451H41.6162ZM41.6162 62.0494V62.0451H40.1162V62.0494H41.6162ZM41.6162 62.0537V62.0494H40.1162V62.0537H41.6162ZM41.6162 62.0579V62.0537H40.1162V62.0579H41.6162ZM41.6162 62.0622V62.0579H40.1162V62.0622H41.6162ZM41.6162 62.0664V62.0622H40.1162V62.0664H41.6162ZM41.6162 62.0707V62.0664H40.1162V62.0707H41.6162ZM41.6162 62.0749V62.0707H40.1162V62.0749H41.6162ZM41.6162 62.0791V62.0749H40.1162V62.0791H41.6162ZM41.6162 62.0834V62.0791H40.1162V62.0834H41.6162ZM41.6162 62.0876V62.0834H40.1162V62.0876H41.6162ZM41.6162 62.0918V62.0876H40.1162V62.0918H41.6162ZM41.6162 62.096V62.0918H40.1162V62.096H41.6162ZM41.6162 62.1002V62.096H40.1162V62.1002H41.6162ZM41.6162 62.1043V62.1002H40.1162V62.1043H41.6162ZM41.6162 62.1085V62.1043H40.1162V62.1085H41.6162ZM41.6162 62.1127V62.1085H40.1162V62.1127H41.6162ZM41.6162 62.1168V62.1127H40.1162V62.1168H41.6162ZM41.6162 62.121V62.1168H40.1162V62.121H41.6162ZM41.6162 62.1251V62.121H40.1162V62.1251H41.6162ZM41.6162 62.1292V62.1251H40.1162V62.1292H41.6162ZM41.6162 62.1334V62.1292H40.1162V62.1334H41.6162ZM41.6162 62.1375V62.1334H40.1162V62.1375H41.6162ZM41.6162 62.1416V62.1375H40.1162V62.1416H41.6162ZM41.6162 62.1457V62.1416H40.1162V62.1457H41.6162ZM39.3662 62.8957H40.8662V61.3957H39.3662V62.8957ZM38.6162 62.1416V62.1457H40.1162V62.1416H38.6162ZM38.6162 62.1375V62.1416H40.1162V62.1375H38.6162ZM38.6162 62.1334V62.1375H40.1162V62.1334H38.6162ZM38.6162 62.1292V62.1334H40.1162V62.1292H38.6162ZM38.6162 62.1251V62.1292H40.1162V62.1251H38.6162ZM38.6162 62.121V62.1251H40.1162V62.121H38.6162ZM38.6162 62.1168V62.121H40.1162V62.1168H38.6162ZM38.6162 62.1127V62.1168H40.1162V62.1127H38.6162ZM38.6162 62.1085V62.1127H40.1162V62.1085H38.6162ZM38.6162 62.1043V62.1085H40.1162V62.1043H38.6162ZM38.6162 62.1002V62.1043H40.1162V62.1002H38.6162ZM38.6162 62.096V62.1002H40.1162V62.096H38.6162ZM38.6162 62.0918V62.096H40.1162V62.0918H38.6162ZM38.6162 62.0876V62.0918H40.1162V62.0876H38.6162ZM38.6162 62.0834V62.0876H40.1162V62.0834H38.6162ZM38.6162 62.0791V62.0834H40.1162V62.0791H38.6162ZM38.6162 62.0749V62.0791H40.1162V62.0749H38.6162ZM38.6162 62.0707V62.0749H40.1162V62.0707H38.6162ZM38.6162 62.0664V62.0707H40.1162V62.0664H38.6162ZM38.6162 62.0622V62.0664H40.1162V62.0622H38.6162ZM38.6162 62.0579V62.0622H40.1162V62.0579H38.6162ZM38.6162 62.0537V62.0579H40.1162V62.0537H38.6162ZM38.6162 62.0494V62.0537H40.1162V62.0494H38.6162ZM38.6162 62.0451V62.0494H40.1162V62.0451H38.6162ZM38.6162 62.0408V62.0451H40.1162V62.0408H38.6162ZM38.6162 62.0365V62.0408H40.1162V62.0365H38.6162ZM38.6162 62.0322V62.0365H40.1162V62.0322H38.6162ZM38.6162 62.0279V62.0322H40.1162V62.0279H38.6162ZM38.6162 62.0236V62.0279H40.1162V62.0236H38.6162ZM38.6162 62.0192V62.0236H40.1162V62.0192H38.6162ZM38.6162 62.0149V62.0192H40.1162V62.0149H38.6162ZM38.6162 62.0106V62.0149H40.1162V62.0106H38.6162ZM38.6162 62.0062V62.0106H40.1162V62.0062H38.6162ZM38.6162 62.0018V62.0062H40.1162V62.0018H38.6162ZM38.6162 61.9975V62.0018H40.1162V61.9975H38.6162ZM38.6162 61.9931V61.9975H40.1162V61.9931H38.6162ZM38.6162 61.9887V61.9931H40.1162V61.9887H38.6162ZM38.6162 61.9843V61.9887H40.1162V61.9843H38.6162ZM38.6162 61.9799V61.9843H40.1162V61.9799H38.6162ZM38.6162 61.9755V61.9799H40.1162V61.9755H38.6162ZM38.6162 61.9711V61.9755H40.1162V61.9711H38.6162ZM38.6162 61.9667V61.9711H40.1162V61.9667H38.6162ZM38.6162 61.9622V61.9667H40.1162V61.9622H38.6162ZM38.6162 61.9578V61.9622H40.1162V61.9578H38.6162ZM38.6162 61.9533V61.9578H40.1162V61.9533H38.6162ZM38.6162 61.9489V61.9533H40.1162V61.9489H38.6162ZM38.6162 61.9444V61.9489H40.1162V61.9444H38.6162ZM38.6162 61.9399V61.9444H40.1162V61.9399H38.6162ZM38.6162 61.9355V61.9399H40.1162V61.9355H38.6162ZM38.6162 61.931V61.9355H40.1162V61.931H38.6162ZM38.6162 61.9265V61.931H40.1162V61.9265H38.6162ZM38.6162 61.922V61.9265H40.1162V61.922H38.6162ZM38.6162 61.9174V61.922H40.1162V61.9174H38.6162ZM38.6162 61.9129V61.9174H40.1162V61.9129H38.6162ZM38.6162 61.9084V61.9129H40.1162V61.9084H38.6162ZM38.6162 61.9039V61.9084H40.1162V61.9039H38.6162ZM38.6162 61.8993V61.9039H40.1162V61.8993H38.6162ZM38.6162 61.8948V61.8993H40.1162V61.8948H38.6162ZM38.6162 61.8902V61.8948H40.1162V61.8902H38.6162ZM38.6162 61.8856V61.8902H40.1162V61.8856H38.6162ZM38.6162 61.881V61.8856H40.1162V61.881H38.6162ZM38.6162 61.8765V61.881H40.1162V61.8765H38.6162ZM38.6162 61.8719V61.8765H40.1162V61.8719H38.6162ZM38.6162 61.8673V61.8719H40.1162V61.8673H38.6162ZM38.6162 61.8626V61.8673H40.1162V61.8626H38.6162ZM38.6162 61.858V61.8626H40.1162V61.858H38.6162ZM38.6162 61.8534V61.858H40.1162V61.8534H38.6162ZM38.6162 61.8488V61.8534H40.1162V61.8488H38.6162ZM38.6162 61.8441V61.8488H40.1162V61.8441H38.6162ZM38.6162 61.8395V61.8441H40.1162V61.8395H38.6162ZM38.6162 61.8348V61.8395H40.1162V61.8348H38.6162ZM38.6162 61.8302V61.8348H40.1162V61.8302H38.6162ZM38.6162 61.8255V61.8302H40.1162V61.8255H38.6162ZM38.6162 61.8208V61.8255H40.1162V61.8208H38.6162ZM38.6162 61.8161V61.8208H40.1162V61.8161H38.6162ZM38.6162 61.8114V61.8161H40.1162V61.8114H38.6162ZM38.6162 61.8067V61.8114H40.1162V61.8067H38.6162ZM38.6162 61.802V61.8067H40.1162V61.802H38.6162ZM38.6162 61.7973V61.802H40.1162V61.7973H38.6162ZM38.6162 61.7925V61.7973H40.1162V61.7925H38.6162ZM38.6162 61.7878V61.7925H40.1162V61.7878H38.6162ZM38.6162 61.7831V61.7878H40.1162V61.7831H38.6162ZM38.6162 61.7783V61.7831H40.1162V61.7783H38.6162ZM38.6162 61.7735V61.7783H40.1162V61.7735H38.6162ZM38.6162 61.7688V61.7735H40.1162V61.7688H38.6162ZM38.6162 61.764V61.7688H40.1162V61.764H38.6162ZM38.6162 61.7592V61.764H40.1162V61.7592H38.6162ZM38.6162 61.7544V61.7592H40.1162V61.7544H38.6162ZM38.6162 61.7496V61.7544H40.1162V61.7496H38.6162ZM38.6162 61.7448V61.7496H40.1162V61.7448H38.6162ZM38.6162 61.74V61.7448H40.1162V61.74H38.6162ZM38.6162 61.7352V61.74H40.1162V61.7352H38.6162ZM38.6162 61.7303V61.7352H40.1162V61.7303H38.6162ZM38.6162 61.7255V61.7303H40.1162V61.7255H38.6162ZM38.6162 61.7206V61.7255H40.1162V61.7206H38.6162ZM38.6162 61.7158V61.7206H40.1162V61.7158H38.6162ZM38.6162 61.7109V61.7158H40.1162V61.7109H38.6162ZM38.6162 61.706V61.7109H40.1162V61.706H38.6162ZM38.6162 61.7011V61.706H40.1162V61.7011H38.6162ZM38.6162 61.6963V61.7011H40.1162V61.6963H38.6162ZM38.6162 61.6914V61.6963H40.1162V61.6914H38.6162ZM38.6162 61.6865V61.6914H40.1162V61.6865H38.6162ZM38.6162 61.6815V61.6865H40.1162V61.6815H38.6162ZM38.6162 61.6766V61.6815H40.1162V61.6766H38.6162ZM38.6162 61.6717V61.6766H40.1162V61.6717H38.6162ZM38.6162 61.6667V61.6717H40.1162V61.6667H38.6162ZM38.6162 61.6618V61.6667H40.1162V61.6618H38.6162ZM38.6162 61.6568V61.6618H40.1162V61.6568H38.6162ZM38.6162 61.6519V61.6568H40.1162V61.6519H38.6162ZM38.6162 61.6469V61.6519H40.1162V61.6469H38.6162ZM38.6162 61.6419V61.6469H40.1162V61.6419H38.6162ZM38.6162 61.637V61.6419H40.1162V61.637H38.6162ZM38.6162 61.632V61.637H40.1162V61.632H38.6162ZM38.6162 61.627V61.632H40.1162V61.627H38.6162ZM38.6162 61.6219V61.627H40.1162V61.6219H38.6162ZM38.6162 61.6169V61.6219H40.1162V61.6169H38.6162ZM38.6162 61.6119V61.6169H40.1162V61.6119H38.6162ZM38.6162 61.6069V61.6119H40.1162V61.6069H38.6162ZM38.6162 61.6018V61.6069H40.1162V61.6018H38.6162ZM38.6162 61.5968V61.6018H40.1162V61.5968H38.6162ZM38.6162 61.5917V61.5968H40.1162V61.5917H38.6162ZM38.6162 61.5867V61.5917H40.1162V61.5867H38.6162ZM38.6162 61.5816V61.5867H40.1162V61.5816H38.6162ZM38.6162 61.5765V61.5816H40.1162V61.5765H38.6162ZM38.6162 61.5714V61.5765H40.1162V61.5714H38.6162ZM38.6162 61.5663V61.5714H40.1162V61.5663H38.6162ZM38.6162 61.5612V61.5663H40.1162V61.5612H38.6162ZM38.6162 61.5561V61.5612H40.1162V61.5561H38.6162ZM38.6162 61.551V61.5561H40.1162V61.551H38.6162ZM38.6162 61.5458V61.551H40.1162V61.5458H38.6162ZM38.6162 61.5407V61.5458H40.1162V61.5407H38.6162ZM38.6162 61.5356V61.5407H40.1162V61.5356H38.6162ZM38.6162 61.5304V61.5356H40.1162V61.5304H38.6162ZM38.6162 61.5252V61.5304H40.1162V61.5252H38.6162ZM38.6162 61.5201V61.5252H40.1162V61.5201H38.6162ZM38.6162 61.5149V61.5201H40.1162V61.5149H38.6162ZM38.6162 61.5097V61.5149H40.1162V61.5097H38.6162ZM38.6162 61.5045V61.5097H40.1162V61.5045H38.6162ZM38.6162 61.4993V61.5045H40.1162V61.4993H38.6162ZM38.6162 61.4941V61.4993H40.1162V61.4941H38.6162ZM38.6162 61.4889V61.4941H40.1162V61.4889H38.6162ZM38.6162 61.4837V61.4889H40.1162V61.4837H38.6162ZM38.6162 61.4784V61.4837H40.1162V61.4784H38.6162ZM38.6162 61.4732V61.4784H40.1162V61.4732H38.6162ZM38.6162 61.4679V61.4732H40.1162V61.4679H38.6162ZM38.6162 61.4627V61.4679H40.1162V61.4627H38.6162ZM38.6162 61.4574V61.4627H40.1162V61.4574H38.6162ZM38.6162 61.4521V61.4574H40.1162V61.4521H38.6162ZM38.6162 61.4468V61.4521H40.1162V61.4468H38.6162ZM38.6162 61.4416V61.4468H40.1162V61.4416H38.6162ZM38.6162 61.4363V61.4416H40.1162V61.4363H38.6162ZM38.6162 61.431V61.4363H40.1162V61.431H38.6162ZM38.6162 61.4256V61.431H40.1162V61.4256H38.6162ZM38.6162 61.4203V61.4256H40.1162V61.4203H38.6162ZM38.6162 61.415V61.4203H40.1162V61.415H38.6162ZM38.6162 61.4097V61.415H40.1162V61.4097H38.6162ZM38.6162 61.4043V61.4097H40.1162V61.4043H38.6162ZM38.6162 61.399V61.4043H40.1162V61.399H38.6162ZM38.6162 61.3936V61.399H40.1162V61.3936H38.6162ZM38.6162 61.3882V61.3936H40.1162V61.3882H38.6162ZM38.6162 61.3828V61.3882H40.1162V61.3828H38.6162ZM38.6162 61.3775V61.3828H40.1162V61.3775H38.6162ZM38.6162 61.3721V61.3775H40.1162V61.3721H38.6162ZM38.6162 61.3667V61.3721H40.1162V61.3667H38.6162ZM38.6162 61.3612V61.3667H40.1162V61.3612H38.6162ZM38.6162 61.3558V61.3612H40.1162V61.3558H38.6162ZM38.6162 61.3504V61.3558H40.1162V61.3504H38.6162ZM38.6162 61.345V61.3504H40.1162V61.345H38.6162ZM38.6162 61.3395V61.345H40.1162V61.3395H38.6162ZM38.6162 61.3341V61.3395H40.1162V61.3341H38.6162ZM38.6162 61.3286V61.3341H40.1162V61.3286H38.6162ZM38.6162 61.3232V61.3286H40.1162V61.3232H38.6162ZM38.6162 61.3177V61.3232H40.1162V61.3177H38.6162ZM38.6162 61.3122V61.3177H40.1162V61.3122H38.6162ZM38.6162 61.3067V61.3122H40.1162V61.3067H38.6162ZM38.6162 61.3012V61.3067H40.1162V61.3012H38.6162ZM38.6162 61.2957V61.3012H40.1162V61.2957H38.6162ZM38.6162 61.2902V61.2957H40.1162V61.2902H38.6162ZM38.6162 61.2847V61.2902H40.1162V61.2847H38.6162ZM38.6162 61.2791V61.2847H40.1162V61.2791H38.6162ZM38.6162 61.2736V61.2791H40.1162V61.2736H38.6162ZM38.6162 61.2681V61.2736H40.1162V61.2681H38.6162ZM38.6162 61.2625V61.2681H40.1162V61.2625H38.6162ZM38.6162 61.2569V61.2625H40.1162V61.2569H38.6162ZM38.6162 61.2514V61.2569H40.1162V61.2514H38.6162ZM38.6162 61.2458V61.2514H40.1162V61.2458H38.6162ZM38.6162 61.2402V61.2458H40.1162V61.2402H38.6162ZM38.6162 61.2346V61.2402H40.1162V61.2346H38.6162ZM38.6162 61.229V61.2346H40.1162V61.229H38.6162ZM38.6162 61.2234V61.229H40.1162V61.2234H38.6162ZM38.6162 61.2178V61.2234H40.1162V61.2178H38.6162ZM38.6162 61.2122V61.2178H40.1162V61.2122H38.6162ZM38.6162 61.2065V61.2122H40.1162V61.2065H38.6162ZM38.6162 61.2009V61.2065H40.1162V61.2009H38.6162ZM38.6162 61.1952V61.2009H40.1162V61.1952H38.6162ZM38.6162 61.1896V61.1952H40.1162V61.1896H38.6162ZM38.6162 61.1839V61.1896H40.1162V61.1839H38.6162ZM38.6162 61.1782V61.1839H40.1162V61.1782H38.6162ZM38.6162 61.1726V61.1782H40.1162V61.1726H38.6162ZM38.6162 61.1669V61.1726H40.1162V61.1669H38.6162ZM38.6162 61.1612V61.1669H40.1162V61.1612H38.6162ZM38.6162 61.1555V61.1612H40.1162V61.1555H38.6162ZM38.6162 61.1498V61.1555H40.1162V61.1498H38.6162ZM38.6162 61.144V61.1498H40.1162V61.144H38.6162ZM38.6162 61.1383V61.144H40.1162V61.1383H38.6162ZM38.6162 61.1326V61.1383H40.1162V61.1326H38.6162ZM38.6162 61.1268V61.1326H40.1162V61.1268H38.6162ZM38.6162 61.1211V61.1268H40.1162V61.1211H38.6162ZM38.6162 61.1153V61.1211H40.1162V61.1153H38.6162ZM38.6162 61.1095V61.1153H40.1162V61.1095H38.6162ZM38.6162 61.1038V61.1095H40.1162V61.1038H38.6162ZM38.6162 61.098V61.1038H40.1162V61.098H38.6162ZM38.6162 61.0922V61.098H40.1162V61.0922H38.6162ZM38.6162 61.0864V61.0922H40.1162V61.0864H38.6162ZM38.6162 61.0806V61.0864H40.1162V61.0806H38.6162ZM38.6162 61.0747V61.0806H40.1162V61.0747H38.6162ZM38.6162 61.0689V61.0747H40.1162V61.0689H38.6162ZM38.6162 61.0631V61.0689H40.1162V61.0631H38.6162ZM38.6162 61.0572V61.0631H40.1162V61.0572H38.6162ZM38.6162 61.0514V61.0572H40.1162V61.0514H38.6162ZM38.6162 61.0455V61.0514H40.1162V61.0455H38.6162ZM38.6162 61.0397V61.0455H40.1162V61.0397H38.6162ZM38.6162 61.0338V61.0397H40.1162V61.0338H38.6162ZM38.6162 61.0279V61.0338H40.1162V61.0279H38.6162ZM38.6162 61.022V61.0279H40.1162V61.022H38.6162ZM38.6162 61.0161V61.022H40.1162V61.0161H38.6162ZM38.6162 61.0102V61.0161H40.1162V61.0102H38.6162ZM38.6162 61.0043V61.0102H40.1162V61.0043H38.6162ZM38.6162 60.9984V61.0043H40.1162V60.9984H38.6162ZM38.6162 60.9925V60.9984H40.1162V60.9925H38.6162ZM38.6162 60.9865V60.9925H40.1162V60.9865H38.6162ZM38.6162 60.9806V60.9865H40.1162V60.9806H38.6162ZM38.6162 60.9746V60.9806H40.1162V60.9746H38.6162ZM38.6162 60.9687V60.9746H40.1162V60.9687H38.6162ZM38.6162 60.9627V60.9687H40.1162V60.9627H38.6162ZM38.6162 60.9567V60.9627H40.1162V60.9567H38.6162ZM38.6162 60.9507V60.9567H40.1162V60.9507H38.6162ZM38.6162 60.9447V60.9507H40.1162V60.9447H38.6162ZM38.6162 60.9387V60.9447H40.1162V60.9387H38.6162ZM38.6162 60.9327V60.9387H40.1162V60.9327H38.6162ZM38.6162 60.9267V60.9327H40.1162V60.9267H38.6162ZM38.6162 60.9207V60.9267H40.1162V60.9207H38.6162ZM38.6162 60.9146V60.9207H40.1162V60.9146H38.6162ZM38.6162 60.9086V60.9146H40.1162V60.9086H38.6162ZM38.6162 60.9026V60.9086H40.1162V60.9026H38.6162ZM38.6162 60.8965V60.9026H40.1162V60.8965H38.6162ZM38.6162 60.8904V60.8965H40.1162V60.8904H38.6162ZM38.6162 60.8844V60.8904H40.1162V60.8844H38.6162ZM38.6162 60.8783V60.8844H40.1162V60.8783H38.6162ZM38.6162 60.8722V60.8783H40.1162V60.8722H38.6162ZM38.6162 60.8661V60.8722H40.1162V60.8661H38.6162ZM38.6162 60.86V60.8661H40.1162V60.86H38.6162ZM38.6162 60.8539V60.86H40.1162V60.8539H38.6162ZM38.6162 60.8477V60.8539H40.1162V60.8477H38.6162ZM38.6162 60.8416V60.8477H40.1162V60.8416H38.6162ZM38.6162 60.8355V60.8416H40.1162V60.8355H38.6162ZM38.6162 60.8293V60.8355H40.1162V60.8293H38.6162ZM38.6162 60.8232V60.8293H40.1162V60.8232H38.6162ZM38.6162 60.817V60.8232H40.1162V60.817H38.6162ZM38.6162 60.8109V60.817H40.1162V60.8109H38.6162ZM38.6162 60.8047V60.8109H40.1162V60.8047H38.6162ZM38.6162 60.7985V60.8047H40.1162V60.7985H38.6162ZM38.6162 60.7923V60.7985H40.1162V60.7923H38.6162ZM38.6162 60.7861V60.7923H40.1162V60.7861H38.6162ZM38.6162 60.7799V60.7861H40.1162V60.7799H38.6162ZM38.6162 60.7737V60.7799H40.1162V60.7737H38.6162ZM38.6162 60.7674V60.7737H40.1162V60.7674H38.6162ZM38.6162 60.7612V60.7674H40.1162V60.7612H38.6162ZM38.6162 60.755V60.7612H40.1162V60.755H38.6162ZM38.6162 60.7487V60.755H40.1162V60.7487H38.6162ZM38.6162 60.7425V60.7487H40.1162V60.7425H38.6162ZM38.6162 60.7362V60.7425H40.1162V60.7362H38.6162ZM38.6162 60.7299V60.7362H40.1162V60.7299H38.6162ZM38.6162 60.7236V60.7299H40.1162V60.7236H38.6162ZM38.6162 60.7173V60.7236H40.1162V60.7173H38.6162ZM38.6162 60.7111V60.7173H40.1162V60.7111H38.6162ZM38.6162 60.7047V60.7111H40.1162V60.7047H38.6162ZM38.6162 60.6984V60.7047H40.1162V60.6984H38.6162ZM38.6162 60.6921V60.6984H40.1162V60.6921H38.6162ZM38.6162 60.6858V60.6921H40.1162V60.6858H38.6162ZM38.6162 60.6794V60.6858H40.1162V60.6794H38.6162ZM38.6162 60.6731V60.6794H40.1162V60.6731H38.6162ZM38.6162 60.6667V60.6731H40.1162V60.6667H38.6162ZM38.6162 60.6604V60.6667H40.1162V60.6604H38.6162ZM38.6162 60.654V60.6604H40.1162V60.654H38.6162ZM38.6162 60.6476V60.654H40.1162V60.6476H38.6162ZM38.6162 60.6413V60.6476H40.1162V60.6413H38.6162ZM38.6162 60.6349V60.6413H40.1162V60.6349H38.6162ZM38.6162 60.6285V60.6349H40.1162V60.6285H38.6162ZM38.6162 60.622V60.6285H40.1162V60.622H38.6162ZM38.6162 60.6156V60.622H40.1162V60.6156H38.6162ZM38.6162 60.6092V60.6156H40.1162V60.6092H38.6162ZM38.6162 60.6028V60.6092H40.1162V60.6028H38.6162ZM38.6162 60.5963V60.6028H40.1162V60.5963H38.6162ZM38.6162 60.5899V60.5963H40.1162V60.5899H38.6162ZM38.6162 60.5834V60.5899H40.1162V60.5834H38.6162ZM38.6162 60.577V60.5834H40.1162V60.577H38.6162ZM38.6162 60.5705V60.577H40.1162V60.5705H38.6162ZM38.6162 60.564V60.5705H40.1162V60.564H38.6162ZM38.6162 60.5575V60.564H40.1162V60.5575H38.6162ZM38.6162 60.551V60.5575H40.1162V60.551H38.6162ZM38.6162 60.5445V60.551H40.1162V60.5445H38.6162ZM38.6162 60.538V60.5445H40.1162V60.538H38.6162ZM38.6162 60.5315V60.538H40.1162V60.5315H38.6162ZM38.6162 60.5249V60.5315H40.1162V60.5249H38.6162ZM38.6162 60.5184V60.5249H40.1162V60.5184H38.6162ZM38.6162 60.5119V60.5184H40.1162V60.5119H38.6162ZM38.6162 60.5053V60.5119H40.1162V60.5053H38.6162ZM38.6162 60.4987V60.5053H40.1162V60.4987H38.6162ZM38.6162 60.4922V60.4987H40.1162V60.4922H38.6162ZM38.6162 60.4856V60.4922H40.1162V60.4856H38.6162ZM38.6162 60.479V60.4856H40.1162V60.479H38.6162ZM38.6162 60.4724V60.479H40.1162V60.4724H38.6162ZM38.6162 60.4658V60.4724H40.1162V60.4658H38.6162ZM38.6162 60.4592V60.4658H40.1162V60.4592H38.6162ZM38.6162 60.4526V60.4592H40.1162V60.4526H38.6162ZM38.6162 60.446V60.4526H40.1162V60.446H38.6162ZM38.6162 60.4393V60.446H40.1162V60.4393H38.6162ZM38.6162 60.4327V60.4393H40.1162V60.4327H38.6162ZM38.6162 60.426V60.4327H40.1162V60.426H38.6162ZM38.6162 60.4194V60.426H40.1162V60.4194H38.6162ZM38.6162 60.4127V60.4194H40.1162V60.4127H38.6162ZM38.6162 60.406V60.4127H40.1162V60.406H38.6162ZM38.6162 60.3994V60.406H40.1162V60.3994H38.6162ZM38.6162 60.3927V60.3994H40.1162V60.3927H38.6162ZM38.6162 60.386V60.3927H40.1162V60.386H38.6162ZM38.6162 60.3793V60.386H40.1162V60.3793H38.6162ZM38.6162 60.3726V60.3793H40.1162V60.3726H38.6162ZM38.6162 60.3658V60.3726H40.1162V60.3658H38.6162ZM38.6162 60.3591V60.3658H40.1162V60.3591H38.6162ZM38.6162 60.3524V60.3591H40.1162V60.3524H38.6162ZM38.6162 60.3456V60.3524H40.1162V60.3456H38.6162ZM38.6162 60.3389V60.3456H40.1162V60.3389H38.6162ZM38.6162 60.3321V60.3389H40.1162V60.3321H38.6162ZM38.6162 60.3253V60.3321H40.1162V60.3253H38.6162ZM38.6162 60.3186V60.3253H40.1162V60.3186H38.6162ZM38.6162 60.3118V60.3186H40.1162V60.3118H38.6162ZM38.6162 60.305V60.3118H40.1162V60.305H38.6162ZM38.6162 60.2982V60.305H40.1162V60.2982H38.6162ZM38.6162 60.2914V60.2982H40.1162V60.2914H38.6162ZM38.6162 60.2846V60.2914H40.1162V60.2846H38.6162ZM38.6162 60.2777V60.2846H40.1162V60.2777H38.6162ZM38.6162 60.2709V60.2777H40.1162V60.2709H38.6162ZM38.6162 60.2641V60.2709H40.1162V60.2641H38.6162ZM38.6162 60.2572V60.2641H40.1162V60.2572H38.6162ZM38.6162 60.2504V60.2572H40.1162V60.2504H38.6162ZM38.6162 60.2435V60.2504H40.1162V60.2435H38.6162ZM38.6162 60.2366V60.2435H40.1162V60.2366H38.6162ZM38.6162 60.2297V60.2366H40.1162V60.2297H38.6162ZM38.6162 60.2228V60.2297H40.1162V60.2228H38.6162ZM38.6162 60.2159V60.2228H40.1162V60.2159H38.6162ZM38.6162 60.209V60.2159H40.1162V60.209H38.6162ZM38.6162 60.2021V60.209H40.1162V60.2021H38.6162ZM38.6162 60.1952V60.2021H40.1162V60.1952H38.6162ZM38.6162 60.1883V60.1952H40.1162V60.1883H38.6162ZM38.6162 60.1813V60.1883H40.1162V60.1813H38.6162ZM38.6162 60.1744V60.1813H40.1162V60.1744H38.6162ZM38.6162 60.1674V60.1744H40.1162V60.1674H38.6162ZM38.6162 60.1605V60.1674H40.1162V60.1605H38.6162ZM38.6162 60.1535V60.1605H40.1162V60.1535H38.6162ZM38.6162 60.1465V60.1535H40.1162V60.1465H38.6162ZM38.6162 60.1396V60.1465H40.1162V60.1396H38.6162ZM38.6162 60.1326V60.1396H40.1162V60.1326H38.6162ZM38.6162 60.1256V60.1326H40.1162V60.1256H38.6162ZM38.6162 60.1185V60.1256H40.1162V60.1185H38.6162ZM38.6162 60.1115V60.1185H40.1162V60.1115H38.6162ZM38.6162 60.1045V60.1115H40.1162V60.1045H38.6162ZM38.6162 60.0975V60.1045H40.1162V60.0975H38.6162ZM38.6162 60.0904V60.0975H40.1162V60.0904H38.6162ZM38.6162 60.0834V60.0904H40.1162V60.0834H38.6162ZM38.6162 60.0763V60.0834H40.1162V60.0763H38.6162ZM38.6162 60.0693V60.0763H40.1162V60.0693H38.6162ZM38.6162 60.0622V60.0693H40.1162V60.0622H38.6162ZM38.6162 60.0551V60.0622H40.1162V60.0551H38.6162ZM38.6162 60.048V60.0551H40.1162V60.048H38.6162ZM38.6162 60.0409V60.048H40.1162V60.0409H38.6162ZM38.6162 60.0338V60.0409H40.1162V60.0338H38.6162ZM38.6162 60.0267V60.0338H40.1162V60.0267H38.6162ZM38.6162 60.0196V60.0267H40.1162V60.0196H38.6162ZM38.6162 60.0124V60.0196H40.1162V60.0124H38.6162ZM38.6162 60.0053V60.0124H40.1162V60.0053H38.6162ZM38.6162 59.9982V60.0053H40.1162V59.9982H38.6162ZM38.6162 59.991V59.9982H40.1162V59.991H38.6162ZM38.6162 59.9839V59.991H40.1162V59.9839H38.6162ZM38.6162 59.9767V59.9839H40.1162V59.9767H38.6162ZM38.6162 59.9695V59.9767H40.1162V59.9695H38.6162ZM38.6162 59.9623V59.9695H40.1162V59.9623H38.6162ZM38.6162 59.9551V59.9623H40.1162V59.9551H38.6162ZM38.6162 59.9479V59.9551H40.1162V59.9479H38.6162ZM38.6162 59.9407V59.9479H40.1162V59.9407H38.6162ZM38.6162 59.9335V59.9407H40.1162V59.9335H38.6162ZM38.6162 59.9263V59.9335H40.1162V59.9263H38.6162ZM38.6162 59.919V59.9263H40.1162V59.919H38.6162ZM38.6162 59.9118V59.919H40.1162V59.9118H38.6162ZM38.6162 59.9046V59.9118H40.1162V59.9046H38.6162ZM38.6162 59.8973V59.9046H40.1162V59.8973H38.6162ZM38.6162 59.89V59.8973H40.1162V59.89H38.6162ZM38.6162 59.8828V59.89H40.1162V59.8828H38.6162ZM38.6162 59.8755V59.8828H40.1162V59.8755H38.6162ZM38.6162 59.8682V59.8755H40.1162V59.8682H38.6162ZM38.6162 59.8609V59.8682H40.1162V59.8609H38.6162ZM38.6162 59.8536V59.8609H40.1162V59.8536H38.6162ZM38.6162 59.8463V59.8536H40.1162V59.8463H38.6162ZM38.6162 59.839V59.8463H40.1162V59.839H38.6162ZM38.6162 59.8316V59.839H40.1162V59.8316H38.6162ZM38.6162 59.8243V59.8316H40.1162V59.8243H38.6162ZM38.6162 59.8169V59.8243H40.1162V59.8169H38.6162ZM38.6162 59.8096V59.8169H40.1162V59.8096H38.6162ZM38.6162 59.8022V59.8096H40.1162V59.8022H38.6162ZM38.6162 59.7949V59.8022H40.1162V59.7949H38.6162ZM38.6162 59.7875V59.7949H40.1162V59.7875H38.6162ZM38.6162 59.7801V59.7875H40.1162V59.7801H38.6162ZM38.6162 59.7727V59.7801H40.1162V59.7727H38.6162ZM38.6162 59.7653V59.7727H40.1162V59.7653H38.6162ZM38.6162 59.7579V59.7653H40.1162V59.7579H38.6162ZM38.6162 59.7505V59.7579H40.1162V59.7505H38.6162ZM38.6162 59.743V59.7505H40.1162V59.743H38.6162ZM38.6162 59.7356V59.743H40.1162V59.7356H38.6162ZM38.6162 59.7282V59.7356H40.1162V59.7282H38.6162ZM38.6162 59.7207V59.7282H40.1162V59.7207H38.6162ZM38.6162 59.7133V59.7207H40.1162V59.7133H38.6162ZM38.6162 59.7058V59.7133H40.1162V59.7058H38.6162ZM38.6162 59.6983V59.7058H40.1162V59.6983H38.6162ZM38.6162 59.6908V59.6983H40.1162V59.6908H38.6162ZM38.6162 59.6834V59.6908H40.1162V59.6834H38.6162ZM38.6162 59.6759V59.6834H40.1162V59.6759H38.6162ZM38.6162 59.6684V59.6759H40.1162V59.6684H38.6162ZM38.6162 59.6608V59.6684H40.1162V59.6608H38.6162ZM38.6162 59.6533V59.6608H40.1162V59.6533H38.6162ZM38.6162 59.6458V59.6533H40.1162V59.6458H38.6162ZM38.6162 59.6383V59.6458H40.1162V59.6383H38.6162ZM38.6162 59.6307V59.6383H40.1162V59.6307H38.6162ZM38.6162 59.6232V59.6307H40.1162V59.6232H38.6162ZM38.6162 59.6156V59.6232H40.1162V59.6156H38.6162ZM38.6162 59.608V59.6156H40.1162V59.608H38.6162ZM38.6162 59.6005V59.608H40.1162V59.6005H38.6162ZM38.6162 59.5929V59.6005H40.1162V59.5929H38.6162ZM38.6162 59.5853V59.5929H40.1162V59.5853H38.6162ZM38.6162 59.5777V59.5853H40.1162V59.5777H38.6162ZM38.6162 59.5701V59.5777H40.1162V59.5701H38.6162ZM38.6162 59.5624V59.5701H40.1162V59.5624H38.6162ZM38.6162 59.5548V59.5624H40.1162V59.5548H38.6162ZM38.6162 59.5472V59.5548H40.1162V59.5472H38.6162ZM38.6162 59.5396V59.5472H40.1162V59.5396H38.6162ZM38.6162 59.5319V59.5396H40.1162V59.5319H38.6162ZM38.6162 59.5242V59.5319H40.1162V59.5242H38.6162ZM38.6162 59.5166V59.5242H40.1162V59.5166H38.6162ZM38.6162 59.5089V59.5166H40.1162V59.5089H38.6162ZM38.6162 59.5012V59.5089H40.1162V59.5012H38.6162ZM38.6162 59.4935V59.5012H40.1162V59.4935H38.6162ZM38.6162 59.4858V59.4935H40.1162V59.4858H38.6162ZM38.6162 59.4781V59.4858H40.1162V59.4781H38.6162ZM38.6162 59.4704V59.4781H40.1162V59.4704H38.6162ZM38.6162 59.4627V59.4704H40.1162V59.4627H38.6162ZM38.6162 59.455V59.4627H40.1162V59.455H38.6162ZM38.6162 59.4472V59.455H40.1162V59.4472H38.6162ZM38.6162 59.4395V59.4472H40.1162V59.4395H38.6162ZM38.6162 59.4317V59.4395H40.1162V59.4317H38.6162ZM38.6162 59.424V59.4317H40.1162V59.424H38.6162ZM38.6162 59.4162V59.424H40.1162V59.4162H38.6162ZM38.6162 59.4084V59.4162H40.1162V59.4084H38.6162ZM38.6162 59.4006V59.4084H40.1162V59.4006H38.6162ZM38.6162 59.3929V59.4006H40.1162V59.3929H38.6162ZM38.6162 59.3851V59.3929H40.1162V59.3851H38.6162ZM38.6162 59.3772V59.3851H40.1162V59.3772H38.6162ZM38.6162 59.3694V59.3772H40.1162V59.3694H38.6162ZM38.6162 59.3616V59.3694H40.1162V59.3616H38.6162ZM38.6162 59.3538V59.3616H40.1162V59.3538H38.6162ZM38.6162 59.3459V59.3538H40.1162V59.3459H38.6162ZM38.6162 59.3381V59.3459H40.1162V59.3381H38.6162ZM38.6162 59.3302V59.3381H40.1162V59.3302H38.6162ZM38.6162 59.3224V59.3302H40.1162V59.3224H38.6162ZM38.6162 59.3145V59.3224H40.1162V59.3145H38.6162ZM38.6162 59.3066V59.3145H40.1162V59.3066H38.6162ZM38.6162 59.2987V59.3066H40.1162V59.2987H38.6162ZM38.6162 59.2908V59.2987H40.1162V59.2908H38.6162ZM38.6162 59.2829V59.2908H40.1162V59.2829H38.6162ZM38.6162 59.275V59.2829H40.1162V59.275H38.6162ZM38.6162 59.2671V59.275H40.1162V59.2671H38.6162ZM38.6162 59.2591V59.2671H40.1162V59.2591H38.6162ZM38.6162 59.2512V59.2591H40.1162V59.2512H38.6162ZM38.6162 59.2433V59.2512H40.1162V59.2433H38.6162ZM38.6162 59.2353V59.2433H40.1162V59.2353H38.6162ZM38.6162 59.2274V59.2353H40.1162V59.2274H38.6162ZM38.6162 59.2194V59.2274H40.1162V59.2194H38.6162ZM38.6162 59.2114V59.2194H40.1162V59.2114H38.6162ZM38.6162 59.2034V59.2114H40.1162V59.2034H38.6162ZM38.6162 59.1954V59.2034H40.1162V59.1954H38.6162ZM38.6162 59.1874V59.1954H40.1162V59.1874H38.6162ZM38.6162 59.1794V59.1874H40.1162V59.1794H38.6162ZM38.6162 59.1714V59.1794H40.1162V59.1714H38.6162ZM38.6162 59.1634V59.1714H40.1162V59.1634H38.6162ZM38.6162 59.1553V59.1634H40.1162V59.1553H38.6162ZM38.6162 59.1473V59.1553H40.1162V59.1473H38.6162ZM38.6162 59.1393V59.1473H40.1162V59.1393H38.6162ZM38.6162 59.1312V59.1393H40.1162V59.1312H38.6162ZM38.6162 59.1231V59.1312H40.1162V59.1231H38.6162ZM38.6162 59.1151V59.1231H40.1162V59.1151H38.6162ZM38.6162 59.107V59.1151H40.1162V59.107H38.6162ZM38.6162 59.0989V59.107H40.1162V59.0989H38.6162ZM38.6162 59.0908V59.0989H40.1162V59.0908H38.6162ZM38.6162 59.0827V59.0908H40.1162V59.0827H38.6162ZM38.6162 59.0746V59.0827H40.1162V59.0746H38.6162ZM38.6162 59.0665V59.0746H40.1162V59.0665H38.6162ZM38.6162 59.0583V59.0665H40.1162V59.0583H38.6162ZM38.6162 59.0502V59.0583H40.1162V59.0502H38.6162ZM38.6162 59.042V59.0502H40.1162V59.042H38.6162ZM38.6162 59.0339V59.042H40.1162V59.0339H38.6162ZM38.6162 59.0257V59.0339H40.1162V59.0257H38.6162ZM38.6162 59.0176V59.0257H40.1162V59.0176H38.6162ZM38.6162 59.0094V59.0176H40.1162V59.0094H38.6162ZM38.6162 59.0012V59.0094H40.1162V59.0012H38.6162ZM45.3054 39.9319C40.9753 45.3445 38.6162 52.0697 38.6162 59.0012H40.1162C40.1162 52.4103 42.3593 46.0156 46.4767 40.8689L45.3054 39.9319ZM47.5308 40.7518L46.3595 39.8147L45.4225 40.986L46.5938 41.9231L47.5308 40.7518Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M50.9591 127.363L49.3575 116.018H56.3169L54.7152 127.363C54.5831 128.299 53.7822 128.994 52.8372 128.994C51.8921 128.994 51.0912 128.299 50.9591 127.363Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M47.9124 114.412L49.0793 109.744H56.5942L57.7611 114.412C57.9583 115.201 57.3616 115.965 56.5484 115.965H49.125C48.3118 115.965 47.7151 115.201 47.9124 114.412Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M37.1599 105.719C41.0928 95.7023 46.7762 86.4647 53.9446 78.4383L59.8081 71.8729V109.692H39.8681C37.8177 109.692 36.4106 107.628 37.1599 105.719Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M114.84 105.719C110.907 95.7023 105.224 86.4647 98.0554 78.4383L92.1919 71.8729V109.692H112.132C114.182 109.692 115.589 107.628 114.84 105.719Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M95.3623 85.6832C95.3623 83.8465 97.6305 82.9811 98.854 84.351L100.021 85.6573C103.419 89.4624 106.144 93.8168 108.08 98.5331L108.34 99.1785L110.252 104.049C110.34 104.274 110.385 104.513 110.385 104.755C110.385 105.772 109.598 106.606 108.599 106.68L108.455 106.685L97.3623 106.685C96.2577 106.685 95.3623 105.789 95.3623 104.685V85.6832Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M70.5 78.5V90.5", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M70.5 95.1538V98.8462", stroke: "#3B3552", strokeWidth: "1.5", strokeLinecap: "round" })); const Slack = ({ width = 72, height = 72 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "70 70 140 140", version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("g", null, /*#__PURE__*/React__namespace.default.createElement("g", null, /*#__PURE__*/React__namespace.default.createElement("path", { style: { fill: '#E01E5A' }, d: "M99.4,151.2c0,7.1-5.8,12.9-12.9,12.9c-7.1,0-12.9-5.8-12.9-12.9c0-7.1,5.8-12.9,12.9-12.9h12.9V151.2z" }), /*#__PURE__*/React__namespace.default.createElement("path", { style: { fill: '#E01E5A' }, d: "M105.9,151.2c0-7.1,5.8-12.9,12.9-12.9s12.9,5.8,12.9,12.9v32.3c0,7.1-5.8,12.9-12.9,12.9s-12.9-5.8-12.9-12.9V151.2z" })), /*#__PURE__*/React__namespace.default.createElement("g", null, /*#__PURE__*/React__namespace.default.createElement("path", { style: { fill: '#36C5F0' }, d: "M118.8,99.4c-7.1,0-12.9-5.8-12.9-12.9c0-7.1,5.8-12.9,12.9-12.9s12.9,5.8,12.9,12.9v12.9H118.8z" }), /*#__PURE__*/React__namespace.default.createElement("path", { style: { fill: '#36C5F0' }, d: "M118.8,105.9c7.1,0,12.9,5.8,12.9,12.9s-5.8,12.9-12.9,12.9H86.5c-7.1,0-12.9-5.8-12.9-12.9s5.8-12.9,12.9-12.9H118.8z" })), /*#__PURE__*/React__namespace.default.createElement("g", null, /*#__PURE__*/React__namespace.default.createElement("path", { style: { fill: '#2EB67D' }, d: "M170.6,118.8c0-7.1,5.8-12.9,12.9-12.9c7.1,0,12.9,5.8,12.9,12.9s-5.8,12.9-12.9,12.9h-12.9V118.8z" }), /*#__PURE__*/React__namespace.default.createElement("path", { style: { fill: '#2EB67D' }, d: "M164.1,118.8c0,7.1-5.8,12.9-12.9,12.9c-7.1,0-12.9-5.8-12.9-12.9V86.5c0-7.1,5.8-12.9,12.9-12.9c7.1,0,12.9,5.8,12.9,12.9V118.8z" })), /*#__PURE__*/React__namespace.default.createElement("g", null, /*#__PURE__*/React__namespace.default.createElement("path", { style: { fill: '#ECB22E' }, d: "M151.2,170.6c7.1,0,12.9,5.8,12.9,12.9c0,7.1-5.8,12.9-12.9,12.9c-7.1,0-12.9-5.8-12.9-12.9v-12.9H151.2z" }), /*#__PURE__*/React__namespace.default.createElement("path", { style: { fill: '#ECB22E' }, d: "M151.2,164.1c-7.1,0-12.9-5.8-12.9-12.9c0-7.1,5.8-12.9,12.9-12.9h32.3c7.1,0,12.9,5.8,12.9,12.9c0,7.1-5.8,12.9-12.9,12.9H151.2z" })))); const Tags = ({ width = 152, height = 152 }) => /*#__PURE__*/React__namespace.default.createElement("svg", { width: width, height: height, viewBox: "0 0 152 152", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "76", cy: "76", r: "76", fill: "white" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M33.0451 48.0857L82.8096 34.7513C84.5434 34.2867 86.3255 35.3156 86.79 37.0494L101.832 93.188C102.103 94.1986 101.871 95.2777 101.208 96.0874L81.1181 120.639C80.2342 121.719 78.7593 122.114 77.4537 121.621L47.7794 110.404C46.8008 110.034 46.0601 109.215 45.7893 108.205L30.747 52.0661C30.2825 50.3323 31.3114 48.5502 33.0451 48.0857Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M34.1553 53.1184C33.8695 52.0514 34.5026 50.9548 35.5695 50.6689L82.9096 37.9842C83.9765 37.6983 85.0732 38.3314 85.3591 39.3984L99.3679 91.68C99.5345 92.3019 99.3916 92.9659 98.9838 93.4642L79.8724 116.819C79.3285 117.484 78.4208 117.727 77.6174 117.424L49.3888 106.753C48.7866 106.525 48.3308 106.022 48.1641 105.4L34.1553 53.1184Z", fill: "#3040D6", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "106.791", cy: "102.425", r: "14.5636", fill: "#3040D6" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M54.5225 39.21H106.042C107.837 39.21 109.292 40.665 109.292 42.46V100.579C109.292 101.625 108.789 102.607 107.939 103.218L82.1793 121.733C81.0459 122.548 79.519 122.548 78.3856 121.733L52.6256 103.218C51.7761 102.607 51.2725 101.625 51.2725 100.579V42.46C51.2725 40.665 52.7275 39.21 54.5225 39.21Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M107.043 34.21H106.293V34.96H107.043V34.21ZM107.043 32.71V31.96H106.293V32.71H107.043ZM115.793 50.6347V51.3847H116.543V50.6347H115.793ZM114.293 50.6347H113.543V51.3847H114.293V50.6347ZM114.293 55.2031V54.4531H113.543V55.2031H114.293ZM115.793 55.2031H116.543V54.4531H115.793V55.2031ZM115.793 62.0033V62.7533H116.543V62.0033H115.793ZM114.293 62.0033H113.543V62.7533H114.293V62.0033ZM107.043 34.96C110.633 34.96 113.543 37.8701 113.543 41.46H115.043C115.043 37.0417 111.461 33.46 107.043 33.46V34.96ZM106.293 32.71V34.21H107.793V32.71H106.293ZM116.543 41.46C116.543 36.2133 112.29 31.96 107.043 31.96V33.46C111.461 33.46 115.043 37.0417 115.043 41.46H116.543ZM116.543 41.4838V41.46H115.043V41.4838H116.543ZM116.543 41.5077V41.4838H115.043V41.5077H116.543ZM116.543 41.5315V41.5077H115.043V41.5315H116.543ZM116.543 41.5553V41.5315H115.043V41.5553H116.543ZM116.543 41.5791V41.5553H115.043V41.5791H116.543ZM116.543 41.6029V41.5791H115.043V41.6029H116.543ZM116.543 41.6266V41.6029H115.043V41.6266H116.543ZM116.543 41.6504V41.6266H115.043V41.6504H116.543ZM116.543 41.674V41.6504H115.043V41.674H116.543ZM116.543 41.6977V41.674H115.043V41.6977H116.543ZM116.543 41.7214V41.6977H115.043V41.7214H116.543ZM116.543 41.745V41.7214H115.043V41.745H116.543ZM116.543 41.7686V41.745H115.043V41.7686H116.543ZM116.543 41.7922V41.7686H115.043V41.7922H116.543ZM116.543 41.8157V41.7922H115.043V41.8157H116.543ZM116.543 41.8393V41.8157H115.043V41.8393H116.543ZM116.543 41.8628V41.8393H115.043V41.8628H116.543ZM116.543 41.8862V41.8628H115.043V41.8862H116.543ZM116.543 41.9097V41.8862H115.043V41.9097H116.543ZM116.543 41.9331V41.9097H115.043V41.9331H116.543ZM116.543 41.9566V41.9331H115.043V41.9566H116.543ZM116.543 41.98V41.9566H115.043V41.98H116.543ZM116.543 42.0033V41.98H115.043V42.0033H116.543ZM116.543 42.0267V42.0033H115.043V42.0267H116.543ZM116.543 42.05V42.0267H115.043V42.05H116.543ZM116.543 42.0733V42.05H115.043V42.0733H116.543ZM116.543 42.0966V42.0733H115.043V42.0966H116.543ZM116.543 42.1198V42.0966H115.043V42.1198H116.543ZM116.543 42.143V42.1198H115.043V42.143H116.543ZM116.543 42.1662V42.143H115.043V42.1662H116.543ZM116.543 42.1894V42.1662H115.043V42.1894H116.543ZM116.543 42.2126V42.1894H115.043V42.2126H116.543ZM116.543 42.2357V42.2126H115.043V42.2357H116.543ZM116.543 42.2588V42.2357H115.043V42.2588H116.543ZM116.543 42.2819V42.2588H115.043V42.2819H116.543ZM116.543 42.305V42.2819H115.043V42.305H116.543ZM116.543 42.328V42.305H115.043V42.328H116.543ZM116.543 42.351V42.328H115.043V42.351H116.543ZM116.543 42.374V42.351H115.043V42.374H116.543ZM116.543 42.397V42.374H115.043V42.397H116.543ZM116.543 42.4199V42.397H115.043V42.4199H116.543ZM116.543 42.4429V42.4199H115.043V42.4429H116.543ZM116.543 42.4658V42.4429H115.043V42.4658H116.543ZM116.543 42.4887V42.4658H115.043V42.4887H116.543ZM116.543 42.5115V42.4887H115.043V42.5115H116.543ZM116.543 42.5343V42.5115H115.043V42.5343H116.543ZM116.543 42.5571V42.5343H115.043V42.5571H116.543ZM116.543 42.5799V42.5571H115.043V42.5799H116.543ZM116.543 42.6027V42.5799H115.043V42.6027H116.543ZM116.543 42.6254V42.6027H115.043V42.6254H116.543ZM116.543 42.6481V42.6254H115.043V42.6481H116.543ZM116.543 42.6708V42.6481H115.043V42.6708H116.543ZM116.543 42.6935V42.6708H115.043V42.6935H116.543ZM116.543 42.7161V42.6935H115.043V42.7161H116.543ZM116.543 42.7388V42.7161H115.043V42.7388H116.543ZM116.543 42.7614V42.7388H115.043V42.7614H116.543ZM116.543 42.7839V42.7614H115.043V42.7839H116.543ZM116.543 42.8065V42.7839H115.043V42.8065H116.543ZM116.543 42.829V42.8065H115.043V42.829H116.543ZM116.543 42.8515V42.829H115.043V42.8515H116.543ZM116.543 42.874V42.8515H115.043V42.874H116.543ZM116.543 42.8965V42.874H115.043V42.8965H116.543ZM116.543 42.9189V42.8965H115.043V42.9189H116.543ZM116.543 42.9413V42.9189H115.043V42.9413H116.543ZM116.543 42.9637V42.9413H115.043V42.9637H116.543ZM116.543 42.9861V42.9637H115.043V42.9861H116.543ZM116.543 43.0084V42.9861H115.043V43.0084H116.543ZM116.543 43.0307V43.0084H115.043V43.0307H116.543ZM116.543 43.053V43.0307H115.043V43.053H116.543ZM116.543 43.0753V43.053H115.043V43.0753H116.543ZM116.543 43.0975V43.0753H115.043V43.0975H116.543ZM116.543 43.1198V43.0975H115.043V43.1198H116.543ZM116.543 43.142V43.1198H115.043V43.142H116.543ZM116.543 43.1641V43.142H115.043V43.1641H116.543ZM116.543 43.1863V43.1641H115.043V43.1863H116.543ZM116.543 43.2084V43.1863H115.043V43.2084H116.543ZM116.543 43.2305V43.2084H115.043V43.2305H116.543ZM116.543 43.2526V43.2305H115.043V43.2526H116.543ZM116.543 43.2747V43.2526H115.043V43.2747H116.543ZM116.543 43.2967V43.2747H115.043V43.2967H116.543ZM116.543 43.3187V43.2967H115.043V43.3187H116.543ZM116.543 43.3407V43.3187H115.043V43.3407H116.543ZM116.543 43.3627V43.3407H115.043V43.3627H116.543ZM116.543 43.3846V43.3627H115.043V43.3846H116.543ZM116.543 43.4065V43.3846H115.043V43.4065H116.543ZM116.543 43.4284V43.4065H115.043V43.4284H116.543ZM116.543 43.4503V43.4284H115.043V43.4503H116.543ZM116.543 43.4722V43.4503H115.043V43.4722H116.543ZM116.543 43.494V43.4722H115.043V43.494H116.543ZM116.543 43.5158V43.494H115.043V43.5158H116.543ZM116.543 43.5376V43.5158H115.043V43.5376H116.543ZM116.543 43.5593V43.5376H115.043V43.5593H116.543ZM116.543 43.5811V43.5593H115.043V43.5811H116.543ZM116.543 43.6028V43.5811H115.043V43.6028H116.543ZM116.543 43.6245V43.6028H115.043V43.6245H116.543ZM116.543 43.6461V43.6245H115.043V43.6461H116.543ZM116.543 43.6678V43.6461H115.043V43.6678H116.543ZM116.543 43.6894V43.6678H115.043V43.6894H116.543ZM116.543 43.711V43.6894H115.043V43.711H116.543ZM116.543 43.7326V43.711H115.043V43.7326H116.543ZM116.543 43.7541V43.7326H115.043V43.7541H116.543ZM116.543 43.7756V43.7541H115.043V43.7756H116.543ZM116.543 43.7971V43.7756H115.043V43.7971H116.543ZM116.543 43.8186V43.7971H115.043V43.8186H116.543ZM116.543 43.8401V43.8186H115.043V43.8401H116.543ZM116.543 43.8615V43.8401H115.043V43.8615H116.543ZM116.543 43.8829V43.8615H115.043V43.8829H116.543ZM116.543 43.9043V43.8829H115.043V43.9043H116.543ZM116.543 43.9257V43.9043H115.043V43.9257H116.543ZM116.543 43.947V43.9257H115.043V43.947H116.543ZM116.543 43.9683V43.947H115.043V43.9683H116.543ZM116.543 43.9896V43.9683H115.043V43.9896H116.543ZM116.543 44.0109V43.9896H115.043V44.0109H116.543ZM116.543 44.0321V44.0109H115.043V44.0321H116.543ZM116.543 44.0533V44.0321H115.043V44.0533H116.543ZM116.543 44.0745V44.0533H115.043V44.0745H116.543ZM116.543 44.0957V44.0745H115.043V44.0957H116.543ZM116.543 44.1169V44.0957H115.043V44.1169H116.543ZM116.543 44.138V44.1169H115.043V44.138H116.543ZM116.543 44.1591V44.138H115.043V44.1591H116.543ZM116.543 44.1802V44.1591H115.043V44.1802H116.543ZM116.543 44.2012V44.1802H115.043V44.2012H116.543ZM116.543 44.2223V44.2012H115.043V44.2223H116.543ZM116.543 44.2433V44.2223H115.043V44.2433H116.543ZM116.543 44.2643V44.2433H115.043V44.2643H116.543ZM116.543 44.2852V44.2643H115.043V44.2852H116.543ZM116.543 44.3062V44.2852H115.043V44.3062H116.543ZM116.543 44.3271V44.3062H115.043V44.3271H116.543ZM116.543 44.348V44.3271H115.043V44.348H116.543ZM116.543 44.3688V44.348H115.043V44.3688H116.543ZM116.543 44.3897V44.3688H115.043V44.3897H116.543ZM116.543 44.4105V44.3897H115.043V44.4105H116.543ZM116.543 44.4313V44.4105H115.043V44.4313H116.543ZM116.543 44.4521V44.4313H115.043V44.4521H116.543ZM116.543 44.4728V44.4521H115.043V44.4728H116.543ZM116.543 44.4936V44.4728H115.043V44.4936H116.543ZM116.543 44.5143V44.4936H115.043V44.5143H116.543ZM116.543 44.535V44.5143H115.043V44.535H116.543ZM116.543 44.5556V44.535H115.043V44.5556H116.543ZM116.543 44.5763V44.5556H115.043V44.5763H116.543ZM116.543 44.5969V44.5763H115.043V44.5969H116.543ZM116.543 44.6175V44.5969H115.043V44.6175H116.543ZM116.543 44.638V44.6175H115.043V44.638H116.543ZM116.543 44.6586V44.638H115.043V44.6586H116.543ZM116.543 44.6791V44.6586H115.043V44.6791H116.543ZM116.543 44.6996V44.6791H115.043V44.6996H116.543ZM116.543 44.7201V44.6996H115.043V44.7201H116.543ZM116.543 44.7405V44.7201H115.043V44.7405H116.543ZM116.543 44.761V44.7405H115.043V44.761H116.543ZM116.543 44.7814V44.761H115.043V44.7814H116.543ZM116.543 44.8017V44.7814H115.043V44.8017H116.543ZM116.543 44.8221V44.8017H115.043V44.8221H116.543ZM116.543 44.8424V44.8221H115.043V44.8424H116.543ZM116.543 44.8628V44.8424H115.043V44.8628H116.543ZM116.543 44.883V44.8628H115.043V44.883H116.543ZM116.543 44.9033V44.883H115.043V44.9033H116.543ZM116.543 44.9235V44.9033H115.043V44.9235H116.543ZM116.543 44.9438V44.9235H115.043V44.9438H116.543ZM116.543 44.964V44.9438H115.043V44.964H116.543ZM116.543 44.9841V44.964H115.043V44.9841H116.543ZM116.543 45.0043V44.9841H115.043V45.0043H116.543ZM116.543 45.0244V45.0043H115.043V45.0244H116.543ZM116.543 45.0445V45.0244H115.043V45.0445H116.543ZM116.543 45.0646V45.0445H115.043V45.0646H116.543ZM116.543 45.0846V45.0646H115.043V45.0846H116.543ZM116.543 45.1047V45.0846H115.043V45.1047H116.543ZM116.543 45.1247V45.1047H115.043V45.1247H116.543ZM116.543 45.1447V45.1247H115.043V45.1447H116.543ZM116.543 45.1646V45.1447H115.043V45.1646H116.543ZM116.543 45.1846V45.1646H115.043V45.1846H116.543ZM116.543 45.2045V45.1846H115.043V45.2045H116.543ZM116.543 45.2244V45.2045H115.043V45.2244H116.543ZM116.543 45.2442V45.2244H115.043V45.2442H116.543ZM116.543 45.2641V45.2442H115.043V45.2641H116.543ZM116.543 45.2839V45.2641H115.043V45.2839H116.543ZM116.543 45.3037V45.2839H115.043V45.3037H116.543ZM116.543 45.3235V45.3037H115.043V45.3235H116.543ZM116.543 45.3432V45.3235H115.043V45.3432H116.543ZM116.543 45.3629V45.3432H115.043V45.3629H116.543ZM116.543 45.3826V45.3629H115.043V45.3826H116.543ZM116.543 45.4023V45.3826H115.043V45.4023H116.543ZM116.543 45.422V45.4023H115.043V45.422H116.543ZM116.543 45.4416V45.422H115.043V45.4416H116.543ZM116.543 45.4612V45.4416H115.043V45.4612H116.543ZM116.543 45.4808V45.4612H115.043V45.4808H116.543ZM116.543 45.5004V45.4808H115.043V45.5004H116.543ZM116.543 45.5199V45.5004H115.043V45.5199H116.543ZM116.543 45.5394V45.5199H115.043V45.5394H116.543ZM116.543 45.5589V45.5394H115.043V45.5589H116.543ZM116.543 45.5784V45.5589H115.043V45.5784H116.543ZM116.543 45.5979V45.5784H115.043V45.5979H116.543ZM116.543 45.6173V45.5979H115.043V45.6173H116.543ZM116.543 45.6367V45.6173H115.043V45.6367H116.543ZM116.543 45.6561V45.6367H115.043V45.6561H116.543ZM116.543 45.6754V45.6561H115.043V45.6754H116.543ZM116.543 45.6947V45.6754H115.043V45.6947H116.543ZM116.543 45.7141V45.6947H115.043V45.7141H116.543ZM116.543 45.7333V45.7141H115.043V45.7333H116.543ZM116.543 45.7526V45.7333H115.043V45.7526H116.543ZM116.543 45.7718V45.7526H115.043V45.7718H116.543ZM116.543 45.7911V45.7718H115.043V45.7911H116.543ZM116.543 45.8102V45.7911H115.043V45.8102H116.543ZM116.543 45.8294V45.8102H115.043V45.8294H116.543ZM116.543 45.8486V45.8294H115.043V45.8486H116.543ZM116.543 45.8677V45.8486H115.043V45.8677H116.543ZM116.543 45.8868V45.8677H115.043V45.8868H116.543ZM116.543 45.9058V45.8868H115.043V45.9058H116.543ZM116.543 45.9249V45.9058H115.043V45.9249H116.543ZM116.543 45.9439V45.9249H115.043V45.9439H116.543ZM116.543 45.9629V45.9439H115.043V45.9629H116.543ZM116.543 45.9819V45.9629H115.043V45.9819H116.543ZM116.543 46.0009V45.9819H115.043V46.0009H116.543ZM116.543 46.0198V46.0009H115.043V46.0198H116.543ZM116.543 46.0387V46.0198H115.043V46.0387H116.543ZM116.543 46.0576V46.0387H115.043V46.0576H116.543ZM116.543 46.0765V46.0576H115.043V46.0765H116.543ZM116.543 46.0953V46.0765H115.043V46.0953H116.543ZM116.543 46.1141V46.0953H115.043V46.1141H116.543ZM116.543 46.1329V46.1141H115.043V46.1329H116.543ZM116.543 46.1517V46.1329H115.043V46.1517H116.543ZM116.543 46.1704V46.1517H115.043V46.1704H116.543ZM116.543 46.1892V46.1704H115.043V46.1892H116.543ZM116.543 46.2079V46.1892H115.043V46.2079H116.543ZM116.543 46.2265V46.2079H115.043V46.2265H116.543ZM116.543 46.2452V46.2265H115.043V46.2452H116.543ZM116.543 46.2638V46.2452H115.043V46.2638H116.543ZM116.543 46.2824V46.2638H115.043V46.2824H116.543ZM116.543 46.301V46.2824H115.043V46.301H116.543ZM116.543 46.3196V46.301H115.043V46.3196H116.543ZM116.543 46.3381V46.3196H115.043V46.3381H116.543ZM116.543 46.3566V46.3381H115.043V46.3566H116.543ZM116.543 46.3751V46.3566H115.043V46.3751H116.543ZM116.543 46.3936V46.3751H115.043V46.3936H116.543ZM116.543 46.412V46.3936H115.043V46.412H116.543ZM116.543 46.4305V46.412H115.043V46.4305H116.543ZM116.543 46.4489V46.4305H115.043V46.4489H116.543ZM116.543 46.4672V46.4489H115.043V46.4672H116.543ZM116.543 46.4856V46.4672H115.043V46.4856H116.543ZM116.543 46.5039V46.4856H115.043V46.5039H116.543ZM116.543 46.5222V46.5039H115.043V46.5222H116.543ZM116.543 46.5405V46.5222H115.043V46.5405H116.543ZM116.543 46.5588V46.5405H115.043V46.5588H116.543ZM116.543 46.577V46.5588H115.043V46.577H116.543ZM116.543 46.5952V46.577H115.043V46.5952H116.543ZM116.543 46.6134V46.5952H115.043V46.6134H116.543ZM116.543 46.6316V46.6134H115.043V46.6316H116.543ZM116.543 46.6497V46.6316H115.043V46.6497H116.543ZM116.543 46.6678V46.6497H115.043V46.6678H116.543ZM116.543 46.6859V46.6678H115.043V46.6859H116.543ZM116.543 46.704V46.6859H115.043V46.704H116.543ZM116.543 46.722V46.704H115.043V46.722H116.543ZM116.543 46.7401V46.722H115.043V46.7401H116.543ZM116.543 46.7581V46.7401H115.043V46.7581H116.543ZM116.543 46.776V46.7581H115.043V46.776H116.543ZM116.543 46.794V46.776H115.043V46.794H116.543ZM116.543 46.8119V46.794H115.043V46.8119H116.543ZM116.543 46.8298V46.8119H115.043V46.8298H116.543ZM116.543 46.8477V46.8298H115.043V46.8477H116.543ZM116.543 46.8656V46.8477H115.043V46.8656H116.543ZM116.543 46.8834V46.8656H115.043V46.8834H116.543ZM116.543 46.9012V46.8834H115.043V46.9012H116.543ZM116.543 46.919V46.9012H115.043V46.919H116.543ZM116.543 46.9368V46.919H115.043V46.9368H116.543ZM116.543 46.9545V46.9368H115.043V46.9545H116.543ZM116.543 46.9722V46.9545H115.043V46.9722H116.543ZM116.543 46.9899V46.9722H115.043V46.9899H116.543ZM116.543 47.0076V46.9899H115.043V47.0076H116.543ZM116.543 47.0253V47.0076H115.043V47.0253H116.543ZM116.543 47.0429V47.0253H115.043V47.0429H116.543ZM116.543 47.0605V47.0429H115.043V47.0605H116.543ZM116.543 47.0781V47.0605H115.043V47.0781H116.543ZM116.543 47.0956V47.0781H115.043V47.0956H116.543ZM116.543 47.1132V47.0956H115.043V47.1132H116.543ZM116.543 47.1307V47.1132H115.043V47.1307H116.543ZM116.543 47.1482V47.1307H115.043V47.1482H116.543ZM116.543 47.1656V47.1482H115.043V47.1656H116.543ZM116.543 47.1831V47.1656H115.043V47.1831H116.543ZM116.543 47.2005V47.1831H115.043V47.2005H116.543ZM116.543 47.2179V47.2005H115.043V47.2179H116.543ZM116.543 47.2353V47.2179H115.043V47.2353H116.543ZM116.543 47.2526V47.2353H115.043V47.2526H116.543ZM116.543 47.2699V47.2526H115.043V47.2699H116.543ZM116.543 47.2872V47.2699H115.043V47.2872H116.543ZM116.543 47.3045V47.2872H115.043V47.3045H116.543ZM116.543 47.3218V47.3045H115.043V47.3218H116.543ZM116.543 47.339V47.3218H115.043V47.339H116.543ZM116.543 47.3562V47.339H115.043V47.3562H116.543ZM116.543 47.3734V47.3562H115.043V47.3734H116.543ZM116.543 47.3906V47.3734H115.043V47.3906H116.543ZM116.543 47.4077V47.3906H115.043V47.4077H116.543ZM116.543 47.4248V47.4077H115.043V47.4248H116.543ZM116.543 47.4419V47.4248H115.043V47.4419H116.543ZM116.543 47.459V47.4419H115.043V47.459H116.543ZM116.543 47.476V47.459H115.043V47.476H116.543ZM116.543 47.493V47.476H115.043V47.493H116.543ZM116.543 47.51V47.493H115.043V47.51H116.543ZM116.543 47.527V47.51H115.043V47.527H116.543ZM116.543 47.544V47.527H115.043V47.544H116.543ZM116.543 47.5609V47.544H115.043V47.5609H116.543ZM116.543 47.5778V47.5609H115.043V47.5778H116.543ZM116.543 47.5947V47.5778H115.043V47.5947H116.543ZM116.543 47.6115V47.5947H115.043V47.6115H116.543ZM116.543 47.6284V47.6115H115.043V47.6284H116.543ZM116.543 47.6452V47.6284H115.043V47.6452H116.543ZM116.543 47.662V47.6452H115.043V47.662H116.543ZM116.543 47.6787V47.662H115.043V47.6787H116.543ZM116.543 47.6955V47.6787H115.043V47.6955H116.543ZM116.543 47.7122V47.6955H115.043V47.7122H116.543ZM116.543 47.7289V47.7122H115.043V47.7289H116.543ZM116.543 47.7455V47.7289H115.043V47.7455H116.543ZM116.543 47.7622V47.7455H115.043V47.7622H116.543ZM116.543 47.7788V47.7622H115.043V47.7788H116.543ZM116.543 47.7954V47.7788H115.043V47.7954H116.543ZM116.543 47.812V47.7954H115.043V47.812H116.543ZM116.543 47.8286V47.812H115.043V47.8286H116.543ZM116.543 47.8451V47.8286H115.043V47.8451H116.543ZM116.543 47.8616V47.8451H115.043V47.8616H116.543ZM116.543 47.8781V47.8616H115.043V47.8781H116.543ZM116.543 47.8945V47.8781H115.043V47.8945H116.543ZM116.543 47.911V47.8945H115.043V47.911H116.543ZM116.543 47.9274V47.911H115.043V47.9274H116.543ZM116.543 47.9438V47.9274H115.043V47.9438H116.543ZM116.543 47.9602V47.9438H115.043V47.9602H116.543ZM116.543 47.9765V47.9602H115.043V47.9765H116.543ZM116.543 47.9928V47.9765H115.043V47.9928H116.543ZM116.543 48.0091V47.9928H115.043V48.0091H116.543ZM116.543 48.0254V48.0091H115.043V48.0254H116.543ZM116.543 48.0416V48.0254H115.043V48.0416H116.543ZM116.543 48.0579V48.0416H115.043V48.0579H116.543ZM116.543 48.0741V48.0579H115.043V48.0741H116.543ZM116.543 48.0903V48.0741H115.043V48.0903H116.543ZM116.543 48.1064V48.0903H115.043V48.1064H116.543ZM116.543 48.1225V48.1064H115.043V48.1225H116.543ZM116.543 48.1387V48.1225H115.043V48.1387H116.543ZM116.543 48.1547V48.1387H115.043V48.1547H116.543ZM116.543 48.1708V48.1547H115.043V48.1708H116.543ZM116.543 48.1869V48.1708H115.043V48.1869H116.543ZM116.543 48.2029V48.1869H115.043V48.2029H116.543ZM116.543 48.2189V48.2029H115.043V48.2189H116.543ZM116.543 48.2348V48.2189H115.043V48.2348H116.543ZM116.543 48.2508V48.2348H115.043V48.2508H116.543ZM116.543 48.2667V48.2508H115.043V48.2667H116.543ZM116.543 48.2826V48.2667H115.043V48.2826H116.543ZM116.543 48.2985V48.2826H115.043V48.2985H116.543ZM116.543 48.3143V48.2985H115.043V48.3143H116.543ZM116.543 48.3302V48.3143H115.043V48.3302H116.543ZM116.543 48.346V48.3302H115.043V48.346H116.543ZM116.543 48.3618V48.346H115.043V48.3618H116.543ZM116.543 48.3775V48.3618H115.043V48.3775H116.543ZM116.543 48.3933V48.3775H115.043V48.3933H116.543ZM116.543 48.409V48.3933H115.043V48.409H116.543ZM116.543 48.4247V48.409H115.043V48.4247H116.543ZM116.543 48.4403V48.4247H115.043V48.4403H116.543ZM116.543 48.456V48.4403H115.043V48.456H116.543ZM116.543 48.4716V48.456H115.043V48.4716H116.543ZM116.543 48.4872V48.4716H115.043V48.4872H116.543ZM116.543 48.5028V48.4872H115.043V48.5028H116.543ZM116.543 48.5183V48.5028H115.043V48.5183H116.543ZM116.543 48.5339V48.5183H115.043V48.5339H116.543ZM116.543 48.5494V48.5339H115.043V48.5494H116.543ZM116.543 48.5648V48.5494H115.043V48.5648H116.543ZM116.543 48.5803V48.5648H115.043V48.5803H116.543ZM116.543 48.5957V48.5803H115.043V48.5957H116.543ZM116.543 48.6111V48.5957H115.043V48.6111H116.543ZM116.543 48.6265V48.6111H115.043V48.6265H116.543ZM116.543 48.6419V48.6265H115.043V48.6419H116.543ZM116.543 48.6572V48.6419H115.043V48.6572H116.543ZM116.543 48.6726V48.6572H115.043V48.6726H116.543ZM116.543 48.6878V48.6726H115.043V48.6878H116.543ZM116.543 48.7031V48.6878H115.043V48.7031H116.543ZM116.543 48.7184V48.7031H115.043V48.7184H116.543ZM116.543 48.7336V48.7184H115.043V48.7336H116.543ZM116.543 48.7488V48.7336H115.043V48.7488H116.543ZM116.543 48.764V48.7488H115.043V48.764H116.543ZM116.543 48.7791V48.764H115.043V48.7791H116.543ZM116.543 48.7943V48.7791H115.043V48.7943H116.543ZM116.543 48.8094V48.7943H115.043V48.8094H116.543ZM116.543 48.8245V48.8094H115.043V48.8245H116.543ZM116.543 48.8395V48.8245H115.043V48.8395H116.543ZM116.543 48.8545V48.8395H115.043V48.8545H116.543ZM116.543 48.8696V48.8545H115.043V48.8696H116.543ZM116.543 48.8846V48.8696H115.043V48.8846H116.543ZM116.543 48.8995V48.8846H115.043V48.8995H116.543ZM116.543 48.9145V48.8995H115.043V48.9145H116.543ZM116.543 48.9294V48.9145H115.043V48.9294H116.543ZM116.543 48.9443V48.9294H115.043V48.9443H116.543ZM116.543 48.9592V48.9443H115.043V48.9592H116.543ZM116.543 48.974V48.9592H115.043V48.974H116.543ZM116.543 48.9888V48.974H115.043V48.9888H116.543ZM116.543 49.0036V48.9888H115.043V49.0036H116.543ZM116.543 49.0184V49.0036H115.043V49.0184H116.543ZM116.543 49.0332V49.0184H115.043V49.0332H116.543ZM116.543 49.0479V49.0332H115.043V49.0479H116.543ZM116.543 49.0626V49.0479H115.043V49.0626H116.543ZM116.543 49.0773V49.0626H115.043V49.0773H116.543ZM116.543 49.092V49.0773H115.043V49.092H116.543ZM116.543 49.1066V49.092H115.043V49.1066H116.543ZM116.543 49.1212V49.1066H115.043V49.1212H116.543ZM116.543 49.1358V49.1212H115.043V49.1358H116.543ZM116.543 49.1504V49.1358H115.043V49.1504H116.543ZM116.543 49.165V49.1504H115.043V49.165H116.543ZM116.543 49.1795V49.165H115.043V49.1795H116.543ZM116.543 49.194V49.1795H115.043V49.194H116.543ZM116.543 49.2085V49.194H115.043V49.2085H116.543ZM116.543 49.2229V49.2085H115.043V49.2229H116.543ZM116.543 49.2373V49.2229H115.043V49.2373H116.543ZM116.543 49.2518V49.2373H115.043V49.2518H116.543ZM116.543 49.2661V49.2518H115.043V49.2661H116.543ZM116.543 49.2805V49.2661H115.043V49.2805H116.543ZM116.543 49.2948V49.2805H115.043V49.2948H116.543ZM116.543 49.3092V49.2948H115.043V49.3092H116.543ZM116.543 49.3234V49.3092H115.043V49.3234H116.543ZM116.543 49.3377V49.3234H115.043V49.3377H116.543ZM116.543 49.352V49.3377H115.043V49.352H116.543ZM116.543 49.3662V49.352H115.043V49.3662H116.543ZM116.543 49.3804V49.3662H115.043V49.3804H116.543ZM116.543 49.3946V49.3804H115.043V49.3946H116.543ZM116.543 49.4087V49.3946H115.043V49.4087H116.543ZM116.543 49.4228V49.4087H115.043V49.4228H116.543ZM116.543 49.4369V49.4228H115.043V49.4369H116.543ZM116.543 49.451V49.4369H115.043V49.451H116.543ZM116.543 49.4651V49.451H115.043V49.4651H116.543ZM116.543 49.4791V49.4651H115.043V49.4791H116.543ZM116.543 49.4931V49.4791H115.043V49.4931H116.543ZM116.543 49.5071V49.4931H115.043V49.5071H116.543ZM116.543 49.5211V49.5071H115.043V49.5211H116.543ZM116.543 49.535V49.5211H115.043V49.535H116.543ZM116.543 49.5489V49.535H115.043V49.5489H116.543ZM116.543 49.5628V49.5489H115.043V49.5628H116.543ZM116.543 49.5767V49.5628H115.043V49.5767H116.543ZM116.543 49.5905V49.5767H115.043V49.5905H116.543ZM116.543 49.6044V49.5905H115.043V49.6044H116.543ZM116.543 49.6182V49.6044H115.043V49.6182H116.543ZM116.543 49.6319V49.6182H115.043V49.6319H116.543ZM116.543 49.6457V49.6319H115.043V49.6457H116.543ZM116.543 49.6594V49.6457H115.043V49.6594H116.543ZM116.543 49.6731V49.6594H115.043V49.6731H116.543ZM116.543 49.6868V49.6731H115.043V49.6868H116.543ZM116.543 49.7005V49.6868H115.043V49.7005H116.543ZM116.543 49.7141V49.7005H115.043V49.7141H116.543ZM116.543 49.7277V49.7141H115.043V49.7277H116.543ZM116.543 49.7413V49.7277H115.043V49.7413H116.543ZM116.543 49.7549V49.7413H115.043V49.7549H116.543ZM116.543 49.7684V49.7549H115.043V49.7684H116.543ZM116.543 49.782V49.7684H115.043V49.782H116.543ZM116.543 49.7955V49.782H115.043V49.7955H116.543ZM116.543 49.8089V49.7955H115.043V49.8089H116.543ZM116.543 49.8224V49.8089H115.043V49.8224H116.543ZM116.543 49.8358V49.8224H115.043V49.8358H116.543ZM116.543 49.8492V49.8358H115.043V49.8492H116.543ZM116.543 49.8626V49.8492H115.043V49.8626H116.543ZM116.543 49.876V49.8626H115.043V49.876H116.543ZM116.543 49.8893V49.876H115.043V49.8893H116.543ZM116.543 49.9026V49.8893H115.043V49.9026H116.543ZM116.543 49.9159V49.9026H115.043V49.9159H116.543ZM116.543 49.9292V49.9159H115.043V49.9292H116.543ZM116.543 49.9424V49.9292H115.043V49.9424H116.543ZM116.543 49.9556V49.9424H115.043V49.9556H116.543ZM116.543 49.9688V49.9556H115.043V49.9688H116.543ZM116.543 49.982V49.9688H115.043V49.982H116.543ZM116.543 49.9951V49.982H115.043V49.9951H116.543ZM116.543 50.0083V49.9951H115.043V50.0083H116.543ZM116.543 50.0214V50.0083H115.043V50.0214H116.543ZM116.543 50.0344V50.0214H115.043V50.0344H116.543ZM116.543 50.0475V50.0344H115.043V50.0475H116.543ZM116.543 50.0605V50.0475H115.043V50.0605H116.543ZM116.543 50.0735V50.0605H115.043V50.0735H116.543ZM116.543 50.0865V50.0735H115.043V50.0865H116.543ZM116.543 50.0995V50.0865H115.043V50.0995H116.543ZM116.543 50.1124V50.0995H115.043V50.1124H116.543ZM116.543 50.1253V50.1124H115.043V50.1253H116.543ZM116.543 50.1382V50.1253H115.043V50.1382H116.543ZM116.543 50.1511V50.1382H115.043V50.1511H116.543ZM116.543 50.1639V50.1511H115.043V50.1639H116.543ZM116.543 50.1768V50.1639H115.043V50.1768H116.543ZM116.543 50.1896V50.1768H115.043V50.1896H116.543ZM116.543 50.2023V50.1896H115.043V50.2023H116.543ZM116.543 50.2151V50.2023H115.043V50.2151H116.543ZM116.543 50.2278V50.2151H115.043V50.2278H116.543ZM116.543 50.2405V50.2278H115.043V50.2405H116.543ZM116.543 50.2532V50.2405H115.043V50.2532H116.543ZM116.543 50.2659V50.2532H115.043V50.2659H116.543ZM116.543 50.2785V50.2659H115.043V50.2785H116.543ZM116.543 50.2911V50.2785H115.043V50.2911H116.543ZM116.543 50.3037V50.2911H115.043V50.3037H116.543ZM116.543 50.3162V50.3037H115.043V50.3162H116.543ZM116.543 50.3288V50.3162H115.043V50.3288H116.543ZM116.543 50.3413V50.3288H115.043V50.3413H116.543ZM116.543 50.3538V50.3413H115.043V50.3538H116.543ZM116.543 50.3663V50.3538H115.043V50.3663H116.543ZM116.543 50.3787V50.3663H115.043V50.3787H116.543ZM116.543 50.3911V50.3787H115.043V50.3911H116.543ZM116.543 50.4035V50.3911H115.043V50.4035H116.543ZM116.543 50.4159V50.4035H115.043V50.4159H116.543ZM116.543 50.4283V50.4159H115.043V50.4283H116.543ZM116.543 50.4406V50.4283H115.043V50.4406H116.543ZM116.543 50.4529V50.4406H115.043V50.4529H116.543ZM116.543 50.4652V50.4529H115.043V50.4652H116.543ZM116.543 50.4775V50.4652H115.043V50.4775H116.543ZM116.543 50.4897V50.4775H115.043V50.4897H116.543ZM116.543 50.5019V50.4897H115.043V50.5019H116.543ZM116.543 50.5141V50.5019H115.043V50.5141H116.543ZM116.543 50.5263V50.5141H115.043V50.5263H116.543ZM116.543 50.5384V50.5263H115.043V50.5384H116.543ZM116.543 50.5505V50.5384H115.043V50.5505H116.543ZM116.543 50.5626V50.5505H115.043V50.5626H116.543ZM116.543 50.5747V50.5626H115.043V50.5747H116.543ZM116.543 50.5868V50.5747H115.043V50.5868H116.543ZM116.543 50.5988V50.5868H115.043V50.5988H116.543ZM116.543 50.6108V50.5988H115.043V50.6108H116.543ZM116.543 50.6228V50.6108H115.043V50.6228H116.543ZM116.543 50.6347V50.6228H115.043V50.6347H116.543ZM114.293 51.3847H115.793V49.8847H114.293V51.3847ZM113.543 50.6228V50.6347H115.043V50.6228H113.543ZM113.543 50.6108V50.6228H115.043V50.6108H113.543ZM113.543 50.5988V50.6108H115.043V50.5988H113.543ZM113.543 50.5868V50.5988H115.043V50.5868H113.543ZM113.543 50.5747V50.5868H115.043V50.5747H113.543ZM113.543 50.5626V50.5747H115.043V50.5626H113.543ZM113.543 50.5505V50.5626H115.043V50.5505H113.543ZM113.543 50.5384V50.5505H115.043V50.5384H113.543ZM113.543 50.5263V50.5384H115.043V50.5263H113.543ZM113.543 50.5141V50.5263H115.043V50.5141H113.543ZM113.543 50.5019V50.5141H115.043V50.5019H113.543ZM113.543 50.4897V50.5019H115.043V50.4897H113.543ZM113.543 50.4775V50.4897H115.043V50.4775H113.543ZM113.543 50.4652V50.4775H115.043V50.4652H113.543ZM113.543 50.4529V50.4652H115.043V50.4529H113.543ZM113.543 50.4406V50.4529H115.043V50.4406H113.543ZM113.543 50.4283V50.4406H115.043V50.4283H113.543ZM113.543 50.4159V50.4283H115.043V50.4159H113.543ZM113.543 50.4035V50.4159H115.043V50.4035H113.543ZM113.543 50.3911V50.4035H115.043V50.3911H113.543ZM113.543 50.3787V50.3911H115.043V50.3787H113.543ZM113.543 50.3663V50.3787H115.043V50.3663H113.543ZM113.543 50.3538V50.3663H115.043V50.3538H113.543ZM113.543 50.3413V50.3538H115.043V50.3413H113.543ZM113.543 50.3288V50.3413H115.043V50.3288H113.543ZM113.543 50.3162V50.3288H115.043V50.3162H113.543ZM113.543 50.3037V50.3162H115.043V50.3037H113.543ZM113.543 50.2911V50.3037H115.043V50.2911H113.543ZM113.543 50.2785V50.2911H115.043V50.2785H113.543ZM113.543 50.2659V50.2785H115.043V50.2659H113.543ZM113.543 50.2532V50.2659H115.043V50.2532H113.543ZM113.543 50.2405V50.2532H115.043V50.2405H113.543ZM113.543 50.2278V50.2405H115.043V50.2278H113.543ZM113.543 50.2151V50.2278H115.043V50.2151H113.543ZM113.543 50.2023V50.2151H115.043V50.2023H113.543ZM113.543 50.1896V50.2023H115.043V50.1896H113.543ZM113.543 50.1768V50.1896H115.043V50.1768H113.543ZM113.543 50.1639V50.1768H115.043V50.1639H113.543ZM113.543 50.1511V50.1639H115.043V50.1511H113.543ZM113.543 50.1382V50.1511H115.043V50.1382H113.543ZM113.543 50.1253V50.1382H115.043V50.1253H113.543ZM113.543 50.1124V50.1253H115.043V50.1124H113.543ZM113.543 50.0995V50.1124H115.043V50.0995H113.543ZM113.543 50.0865V50.0995H115.043V50.0865H113.543ZM113.543 50.0735V50.0865H115.043V50.0735H113.543ZM113.543 50.0605V50.0735H115.043V50.0605H113.543ZM113.543 50.0475V50.0605H115.043V50.0475H113.543ZM113.543 50.0344V50.0475H115.043V50.0344H113.543ZM113.543 50.0214V50.0344H115.043V50.0214H113.543ZM113.543 50.0083V50.0214H115.043V50.0083H113.543ZM113.543 49.9951V50.0083H115.043V49.9951H113.543ZM113.543 49.982V49.9951H115.043V49.982H113.543ZM113.543 49.9688V49.982H115.043V49.9688H113.543ZM113.543 49.9556V49.9688H115.043V49.9556H113.543ZM113.543 49.9424V49.9556H115.043V49.9424H113.543ZM113.543 49.9292V49.9424H115.043V49.9292H113.543ZM113.543 49.9159V49.9292H115.043V49.9159H113.543ZM113.543 49.9026V49.9159H115.043V49.9026H113.543ZM113.543 49.8893V49.9026H115.043V49.8893H113.543ZM113.543 49.876V49.8893H115.043V49.876H113.543ZM113.543 49.8626V49.876H115.043V49.8626H113.543ZM113.543 49.8492V49.8626H115.043V49.8492H113.543ZM113.543 49.8358V49.8492H115.043V49.8358H113.543ZM113.543 49.8224V49.8358H115.043V49.8224H113.543ZM113.543 49.8089V49.8224H115.043V49.8089H113.543ZM113.543 49.7955V49.8089H115.043V49.7955H113.543ZM113.543 49.782V49.7955H115.043V49.782H113.543ZM113.543 49.7684V49.782H115.043V49.7684H113.543ZM113.543 49.7549V49.7684H115.043V49.7549H113.543ZM113.543 49.7413V49.7549H115.043V49.7413H113.543ZM113.543 49.7277V49.7413H115.043V49.7277H113.543ZM113.543 49.7141V49.7277H115.043V49.7141H113.543ZM113.543 49.7005V49.7141H115.043V49.7005H113.543ZM113.543 49.6868V49.7005H115.043V49.6868H113.543ZM113.543 49.6731V49.6868H115.043V49.6731H113.543ZM113.543 49.6594V49.6731H115.043V49.6594H113.543ZM113.543 49.6457V49.6594H115.043V49.6457H113.543ZM113.543 49.6319V49.6457H115.043V49.6319H113.543ZM113.543 49.6182V49.6319H115.043V49.6182H113.543ZM113.543 49.6044V49.6182H115.043V49.6044H113.543ZM113.543 49.5905V49.6044H115.043V49.5905H113.543ZM113.543 49.5767V49.5905H115.043V49.5767H113.543ZM113.543 49.5628V49.5767H115.043V49.5628H113.543ZM113.543 49.5489V49.5628H115.043V49.5489H113.543ZM113.543 49.535V49.5489H115.043V49.535H113.543ZM113.543 49.5211V49.535H115.043V49.5211H113.543ZM113.543 49.5071V49.5211H115.043V49.5071H113.543ZM113.543 49.4931V49.5071H115.043V49.4931H113.543ZM113.543 49.4791V49.4931H115.043V49.4791H113.543ZM113.543 49.4651V49.4791H115.043V49.4651H113.543ZM113.543 49.451V49.4651H115.043V49.451H113.543ZM113.543 49.4369V49.451H115.043V49.4369H113.543ZM113.543 49.4228V49.4369H115.043V49.4228H113.543ZM113.543 49.4087V49.4228H115.043V49.4087H113.543ZM113.543 49.3946V49.4087H115.043V49.3946H113.543ZM113.543 49.3804V49.3946H115.043V49.3804H113.543ZM113.543 49.3662V49.3804H115.043V49.3662H113.543ZM113.543 49.352V49.3662H115.043V49.352H113.543ZM113.543 49.3377V49.352H115.043V49.3377H113.543ZM113.543 49.3234V49.3377H115.043V49.3234H113.543ZM113.543 49.3092V49.3234H115.043V49.3092H113.543ZM113.543 49.2948V49.3092H115.043V49.2948H113.543ZM113.543 49.2805V49.2948H115.043V49.2805H113.543ZM113.543 49.2661V49.2805H115.043V49.2661H113.543ZM113.543 49.2518V49.2661H115.043V49.2518H113.543ZM113.543 49.2373V49.2518H115.043V49.2373H113.543ZM113.543 49.2229V49.2373H115.043V49.2229H113.543ZM113.543 49.2085V49.2229H115.043V49.2085H113.543ZM113.543 49.194V49.2085H115.043V49.194H113.543ZM113.543 49.1795V49.194H115.043V49.1795H113.543ZM113.543 49.165V49.1795H115.043V49.165H113.543ZM113.543 49.1504V49.165H115.043V49.1504H113.543ZM113.543 49.1358V49.1504H115.043V49.1358H113.543ZM113.543 49.1212V49.1358H115.043V49.1212H113.543ZM113.543 49.1066V49.1212H115.043V49.1066H113.543ZM113.543 49.092V49.1066H115.043V49.092H113.543ZM113.543 49.0773V49.092H115.043V49.0773H113.543ZM113.543 49.0626V49.0773H115.043V49.0626H113.543ZM113.543 49.0479V49.0626H115.043V49.0479H113.543ZM113.543 49.0332V49.0479H115.043V49.0332H113.543ZM113.543 49.0184V49.0332H115.043V49.0184H113.543ZM113.543 49.0036V49.0184H115.043V49.0036H113.543ZM113.543 48.9888V49.0036H115.043V48.9888H113.543ZM113.543 48.974V48.9888H115.043V48.974H113.543ZM113.543 48.9592V48.974H115.043V48.9592H113.543ZM113.543 48.9443V48.9592H115.043V48.9443H113.543ZM113.543 48.9294V48.9443H115.043V48.9294H113.543ZM113.543 48.9145V48.9294H115.043V48.9145H113.543ZM113.543 48.8995V48.9145H115.043V48.8995H113.543ZM113.543 48.8846V48.8995H115.043V48.8846H113.543ZM113.543 48.8696V48.8846H115.043V48.8696H113.543ZM113.543 48.8545V48.8696H115.043V48.8545H113.543ZM113.543 48.8395V48.8545H115.043V48.8395H113.543ZM113.543 48.8245V48.8395H115.043V48.8245H113.543ZM113.543 48.8094V48.8245H115.043V48.8094H113.543ZM113.543 48.7943V48.8094H115.043V48.7943H113.543ZM113.543 48.7791V48.7943H115.043V48.7791H113.543ZM113.543 48.764V48.7791H115.043V48.764H113.543ZM113.543 48.7488V48.764H115.043V48.7488H113.543ZM113.543 48.7336V48.7488H115.043V48.7336H113.543ZM113.543 48.7184V48.7336H115.043V48.7184H113.543ZM113.543 48.7031V48.7184H115.043V48.7031H113.543ZM113.543 48.6878V48.7031H115.043V48.6878H113.543ZM113.543 48.6726V48.6878H115.043V48.6726H113.543ZM113.543 48.6572V48.6726H115.043V48.6572H113.543ZM113.543 48.6419V48.6572H115.043V48.6419H113.543ZM113.543 48.6265V48.6419H115.043V48.6265H113.543ZM113.543 48.6111V48.6265H115.043V48.6111H113.543ZM113.543 48.5957V48.6111H115.043V48.5957H113.543ZM113.543 48.5803V48.5957H115.043V48.5803H113.543ZM113.543 48.5648V48.5803H115.043V48.5648H113.543ZM113.543 48.5494V48.5648H115.043V48.5494H113.543ZM113.543 48.5339V48.5494H115.043V48.5339H113.543ZM113.543 48.5183V48.5339H115.043V48.5183H113.543ZM113.543 48.5028V48.5183H115.043V48.5028H113.543ZM113.543 48.4872V48.5028H115.043V48.4872H113.543ZM113.543 48.4716V48.4872H115.043V48.4716H113.543ZM113.543 48.456V48.4716H115.043V48.456H113.543ZM113.543 48.4403V48.456H115.043V48.4403H113.543ZM113.543 48.4247V48.4403H115.043V48.4247H113.543ZM113.543 48.409V48.4247H115.043V48.409H113.543ZM113.543 48.3933V48.409H115.043V48.3933H113.543ZM113.543 48.3775V48.3933H115.043V48.3775H113.543ZM113.543 48.3618V48.3775H115.043V48.3618H113.543ZM113.543 48.346V48.3618H115.043V48.346H113.543ZM113.543 48.3302V48.346H115.043V48.3302H113.543ZM113.543 48.3143V48.3302H115.043V48.3143H113.543ZM113.543 48.2985V48.3143H115.043V48.2985H113.543ZM113.543 48.2826V48.2985H115.043V48.2826H113.543ZM113.543 48.2667V48.2826H115.043V48.2667H113.543ZM113.543 48.2508V48.2667H115.043V48.2508H113.543ZM113.543 48.2348V48.2508H115.043V48.2348H113.543ZM113.543 48.2189V48.2348H115.043V48.2189H113.543ZM113.543 48.2029V48.2189H115.043V48.2029H113.543ZM113.543 48.1869V48.2029H115.043V48.1869H113.543ZM113.543 48.1708V48.1869H115.043V48.1708H113.543ZM113.543 48.1547V48.1708H115.043V48.1547H113.543ZM113.543 48.1387V48.1547H115.043V48.1387H113.543ZM113.543 48.1225V48.1387H115.043V48.1225H113.543ZM113.543 48.1064V48.1225H115.043V48.1064H113.543ZM113.543 48.0903V48.1064H115.043V48.0903H113.543ZM113.543 48.0741V48.0903H115.043V48.0741H113.543ZM113.543 48.0579V48.0741H115.043V48.0579H113.543ZM113.543 48.0416V48.0579H115.043V48.0416H113.543ZM113.543 48.0254V48.0416H115.043V48.0254H113.543ZM113.543 48.0091V48.0254H115.043V48.0091H113.543ZM113.543 47.9928V48.0091H115.043V47.9928H113.543ZM113.543 47.9765V47.9928H115.043V47.9765H113.543ZM113.543 47.9602V47.9765H115.043V47.9602H113.543ZM113.543 47.9438V47.9602H115.043V47.9438H113.543ZM113.543 47.9274V47.9438H115.043V47.9274H113.543ZM113.543 47.911V47.9274H115.043V47.911H113.543ZM113.543 47.8945V47.911H115.043V47.8945H113.543ZM113.543 47.8781V47.8945H115.043V47.8781H113.543ZM113.543 47.8616V47.8781H115.043V47.8616H113.543ZM113.543 47.8451V47.8616H115.043V47.8451H113.543ZM113.543 47.8286V47.8451H115.043V47.8286H113.543ZM113.543 47.812V47.8286H115.043V47.812H113.543ZM113.543 47.7954V47.812H115.043V47.7954H113.543ZM113.543 47.7788V47.7954H115.043V47.7788H113.543ZM113.543 47.7622V47.7788H115.043V47.7622H113.543ZM113.543 47.7455V47.7622H115.043V47.7455H113.543ZM113.543 47.7289V47.7455H115.043V47.7289H113.543ZM113.543 47.7122V47.7289H115.043V47.7122H113.543ZM113.543 47.6955V47.7122H115.043V47.6955H113.543ZM113.543 47.6787V47.6955H115.043V47.6787H113.543ZM113.543 47.662V47.6787H115.043V47.662H113.543ZM113.543 47.6452V47.662H115.043V47.6452H113.543ZM113.543 47.6284V47.6452H115.043V47.6284H113.543ZM113.543 47.6115V47.6284H115.043V47.6115H113.543ZM113.543 47.5947V47.6115H115.043V47.5947H113.543ZM113.543 47.5778V47.5947H115.043V47.5778H113.543ZM113.543 47.5609V47.5778H115.043V47.5609H113.543ZM113.543 47.544V47.5609H115.043V47.544H113.543ZM113.543 47.527V47.544H115.043V47.527H113.543ZM113.543 47.51V47.527H115.043V47.51H113.543ZM113.543 47.493V47.51H115.043V47.493H113.543ZM113.543 47.476V47.493H115.043V47.476H113.543ZM113.543 47.459V47.476H115.043V47.459H113.543ZM113.543 47.4419V47.459H115.043V47.4419H113.543ZM113.543 47.4248V47.4419H115.043V47.4248H113.543ZM113.543 47.4077V47.4248H115.043V47.4077H113.543ZM113.543 47.3906V47.4077H115.043V47.3906H113.543ZM113.543 47.3734V47.3906H115.043V47.3734H113.543ZM113.543 47.3562V47.3734H115.043V47.3562H113.543ZM113.543 47.339V47.3562H115.043V47.339H113.543ZM113.543 47.3218V47.339H115.043V47.3218H113.543ZM113.543 47.3045V47.3218H115.043V47.3045H113.543ZM113.543 47.2872V47.3045H115.043V47.2872H113.543ZM113.543 47.2699V47.2872H115.043V47.2699H113.543ZM113.543 47.2526V47.2699H115.043V47.2526H113.543ZM113.543 47.2353V47.2526H115.043V47.2353H113.543ZM113.543 47.2179V47.2353H115.043V47.2179H113.543ZM113.543 47.2005V47.2179H115.043V47.2005H113.543ZM113.543 47.1831V47.2005H115.043V47.1831H113.543ZM113.543 47.1656V47.1831H115.043V47.1656H113.543ZM113.543 47.1482V47.1656H115.043V47.1482H113.543ZM113.543 47.1307V47.1482H115.043V47.1307H113.543ZM113.543 47.1132V47.1307H115.043V47.1132H113.543ZM113.543 47.0956V47.1132H115.043V47.0956H113.543ZM113.543 47.0781V47.0956H115.043V47.0781H113.543ZM113.543 47.0605V47.0781H115.043V47.0605H113.543ZM113.543 47.0429V47.0605H115.043V47.0429H113.543ZM113.543 47.0253V47.0429H115.043V47.0253H113.543ZM113.543 47.0076V47.0253H115.043V47.0076H113.543ZM113.543 46.9899V47.0076H115.043V46.9899H113.543ZM113.543 46.9722V46.9899H115.043V46.9722H113.543ZM113.543 46.9545V46.9722H115.043V46.9545H113.543ZM113.543 46.9368V46.9545H115.043V46.9368H113.543ZM113.543 46.919V46.9368H115.043V46.919H113.543ZM113.543 46.9012V46.919H115.043V46.9012H113.543ZM113.543 46.8834V46.9012H115.043V46.8834H113.543ZM113.543 46.8656V46.8834H115.043V46.8656H113.543ZM113.543 46.8477V46.8656H115.043V46.8477H113.543ZM113.543 46.8298V46.8477H115.043V46.8298H113.543ZM113.543 46.8119V46.8298H115.043V46.8119H113.543ZM113.543 46.794V46.8119H115.043V46.794H113.543ZM113.543 46.776V46.794H115.043V46.776H113.543ZM113.543 46.7581V46.776H115.043V46.7581H113.543ZM113.543 46.7401V46.7581H115.043V46.7401H113.543ZM113.543 46.722V46.7401H115.043V46.722H113.543ZM113.543 46.704V46.722H115.043V46.704H113.543ZM113.543 46.6859V46.704H115.043V46.6859H113.543ZM113.543 46.6678V46.6859H115.043V46.6678H113.543ZM113.543 46.6497V46.6678H115.043V46.6497H113.543ZM113.543 46.6316V46.6497H115.043V46.6316H113.543ZM113.543 46.6134V46.6316H115.043V46.6134H113.543ZM113.543 46.5952V46.6134H115.043V46.5952H113.543ZM113.543 46.577V46.5952H115.043V46.577H113.543ZM113.543 46.5588V46.577H115.043V46.5588H113.543ZM113.543 46.5405V46.5588H115.043V46.5405H113.543ZM113.543 46.5222V46.5405H115.043V46.5222H113.543ZM113.543 46.5039V46.5222H115.043V46.5039H113.543ZM113.543 46.4856V46.5039H115.043V46.4856H113.543ZM113.543 46.4672V46.4856H115.043V46.4672H113.543ZM113.543 46.4489V46.4672H115.043V46.4489H113.543ZM113.543 46.4305V46.4489H115.043V46.4305H113.543ZM113.543 46.412V46.4305H115.043V46.412H113.543ZM113.543 46.3936V46.412H115.043V46.3936H113.543ZM113.543 46.3751V46.3936H115.043V46.3751H113.543ZM113.543 46.3566V46.3751H115.043V46.3566H113.543ZM113.543 46.3381V46.3566H115.043V46.3381H113.543ZM113.543 46.3196V46.3381H115.043V46.3196H113.543ZM113.543 46.301V46.3196H115.043V46.301H113.543ZM113.543 46.2824V46.301H115.043V46.2824H113.543ZM113.543 46.2638V46.2824H115.043V46.2638H113.543ZM113.543 46.2452V46.2638H115.043V46.2452H113.543ZM113.543 46.2265V46.2452H115.043V46.2265H113.543ZM113.543 46.2079V46.2265H115.043V46.2079H113.543ZM113.543 46.1892V46.2079H115.043V46.1892H113.543ZM113.543 46.1704V46.1892H115.043V46.1704H113.543ZM113.543 46.1517V46.1704H115.043V46.1517H113.543ZM113.543 46.1329V46.1517H115.043V46.1329H113.543ZM113.543 46.1141V46.1329H115.043V46.1141H113.543ZM113.543 46.0953V46.1141H115.043V46.0953H113.543ZM113.543 46.0765V46.0953H115.043V46.0765H113.543ZM113.543 46.0576V46.0765H115.043V46.0576H113.543ZM113.543 46.0387V46.0576H115.043V46.0387H113.543ZM113.543 46.0198V46.0387H115.043V46.0198H113.543ZM113.543 46.0009V46.0198H115.043V46.0009H113.543ZM113.543 45.9819V46.0009H115.043V45.9819H113.543ZM113.543 45.9629V45.9819H115.043V45.9629H113.543ZM113.543 45.9439V45.9629H115.043V45.9439H113.543ZM113.543 45.9249V45.9439H115.043V45.9249H113.543ZM113.543 45.9058V45.9249H115.043V45.9058H113.543ZM113.543 45.8868V45.9058H115.043V45.8868H113.543ZM113.543 45.8677V45.8868H115.043V45.8677H113.543ZM113.543 45.8486V45.8677H115.043V45.8486H113.543ZM113.543 45.8294V45.8486H115.043V45.8294H113.543ZM113.543 45.8102V45.8294H115.043V45.8102H113.543ZM113.543 45.7911V45.8102H115.043V45.7911H113.543ZM113.543 45.7718V45.7911H115.043V45.7718H113.543ZM113.543 45.7526V45.7718H115.043V45.7526H113.543ZM113.543 45.7333V45.7526H115.043V45.7333H113.543ZM113.543 45.7141V45.7333H115.043V45.7141H113.543ZM113.543 45.6947V45.7141H115.043V45.6947H113.543ZM113.543 45.6754V45.6947H115.043V45.6754H113.543ZM113.543 45.6561V45.6754H115.043V45.6561H113.543ZM113.543 45.6367V45.6561H115.043V45.6367H113.543ZM113.543 45.6173V45.6367H115.043V45.6173H113.543ZM113.543 45.5979V45.6173H115.043V45.5979H113.543ZM113.543 45.5784V45.5979H115.043V45.5784H113.543ZM113.543 45.5589V45.5784H115.043V45.5589H113.543ZM113.543 45.5394V45.5589H115.043V45.5394H113.543ZM113.543 45.5199V45.5394H115.043V45.5199H113.543ZM113.543 45.5004V45.5199H115.043V45.5004H113.543ZM113.543 45.4808V45.5004H115.043V45.4808H113.543ZM113.543 45.4612V45.4808H115.043V45.4612H113.543ZM113.543 45.4416V45.4612H115.043V45.4416H113.543ZM113.543 45.422V45.4416H115.043V45.422H113.543ZM113.543 45.4023V45.422H115.043V45.4023H113.543ZM113.543 45.3826V45.4023H115.043V45.3826H113.543ZM113.543 45.3629V45.3826H115.043V45.3629H113.543ZM113.543 45.3432V45.3629H115.043V45.3432H113.543ZM113.543 45.3235V45.3432H115.043V45.3235H113.543ZM113.543 45.3037V45.3235H115.043V45.3037H113.543ZM113.543 45.2839V45.3037H115.043V45.2839H113.543ZM113.543 45.2641V45.2839H115.043V45.2641H113.543ZM113.543 45.2442V45.2641H115.043V45.2442H113.543ZM113.543 45.2244V45.2442H115.043V45.2244H113.543ZM113.543 45.2045V45.2244H115.043V45.2045H113.543ZM113.543 45.1846V45.2045H115.043V45.1846H113.543ZM113.543 45.1646V45.1846H115.043V45.1646H113.543ZM113.543 45.1447V45.1646H115.043V45.1447H113.543ZM113.543 45.1247V45.1447H115.043V45.1247H113.543ZM113.543 45.1047V45.1247H115.043V45.1047H113.543ZM113.543 45.0846V45.1047H115.043V45.0846H113.543ZM113.543 45.0646V45.0846H115.043V45.0646H113.543ZM113.543 45.0445V45.0646H115.043V45.0445H113.543ZM113.543 45.0244V45.0445H115.043V45.0244H113.543ZM113.543 45.0043V45.0244H115.043V45.0043H113.543ZM113.543 44.9841V45.0043H115.043V44.9841H113.543ZM113.543 44.964V44.9841H115.043V44.964H113.543ZM113.543 44.9438V44.964H115.043V44.9438H113.543ZM113.543 44.9235V44.9438H115.043V44.9235H113.543ZM113.543 44.9033V44.9235H115.043V44.9033H113.543ZM113.543 44.883V44.9033H115.043V44.883H113.543ZM113.543 44.8628V44.883H115.043V44.8628H113.543ZM113.543 44.8424V44.8628H115.043V44.8424H113.543ZM113.543 44.8221V44.8424H115.043V44.8221H113.543ZM113.543 44.8017V44.8221H115.043V44.8017H113.543ZM113.543 44.7814V44.8017H115.043V44.7814H113.543ZM113.543 44.761V44.7814H115.043V44.761H113.543ZM113.543 44.7405V44.761H115.043V44.7405H113.543ZM113.543 44.7201V44.7405H115.043V44.7201H113.543ZM113.543 44.6996V44.7201H115.043V44.6996H113.543ZM113.543 44.6791V44.6996H115.043V44.6791H113.543ZM113.543 44.6586V44.6791H115.043V44.6586H113.543ZM113.543 44.638V44.6586H115.043V44.638H113.543ZM113.543 44.6175V44.638H115.043V44.6175H113.543ZM113.543 44.5969V44.6175H115.043V44.5969H113.543ZM113.543 44.5763V44.5969H115.043V44.5763H113.543ZM113.543 44.5556V44.5763H115.043V44.5556H113.543ZM113.543 44.535V44.5556H115.043V44.535H113.543ZM113.543 44.5143V44.535H115.043V44.5143H113.543ZM113.543 44.4936V44.5143H115.043V44.4936H113.543ZM113.543 44.4728V44.4936H115.043V44.4728H113.543ZM113.543 44.4521V44.4728H115.043V44.4521H113.543ZM113.543 44.4313V44.4521H115.043V44.4313H113.543ZM113.543 44.4105V44.4313H115.043V44.4105H113.543ZM113.543 44.3897V44.4105H115.043V44.3897H113.543ZM113.543 44.3688V44.3897H115.043V44.3688H113.543ZM113.543 44.348V44.3688H115.043V44.348H113.543ZM113.543 44.3271V44.348H115.043V44.3271H113.543ZM113.543 44.3062V44.3271H115.043V44.3062H113.543ZM113.543 44.2852V44.3062H115.043V44.2852H113.543ZM113.543 44.2643V44.2852H115.043V44.2643H113.543ZM113.543 44.2433V44.2643H115.043V44.2433H113.543ZM113.543 44.2223V44.2433H115.043V44.2223H113.543ZM113.543 44.2012V44.2223H115.043V44.2012H113.543ZM113.543 44.1802V44.2012H115.043V44.1802H113.543ZM113.543 44.1591V44.1802H115.043V44.1591H113.543ZM113.543 44.138V44.1591H115.043V44.138H113.543ZM113.543 44.1169V44.138H115.043V44.1169H113.543ZM113.543 44.0957V44.1169H115.043V44.0957H113.543ZM113.543 44.0745V44.0957H115.043V44.0745H113.543ZM113.543 44.0533V44.0745H115.043V44.0533H113.543ZM113.543 44.0321V44.0533H115.043V44.0321H113.543ZM113.543 44.0109V44.0321H115.043V44.0109H113.543ZM113.543 43.9896V44.0109H115.043V43.9896H113.543ZM113.543 43.9683V43.9896H115.043V43.9683H113.543ZM113.543 43.947V43.9683H115.043V43.947H113.543ZM113.543 43.9257V43.947H115.043V43.9257H113.543ZM113.543 43.9043V43.9257H115.043V43.9043H113.543ZM113.543 43.8829V43.9043H115.043V43.8829H113.543ZM113.543 43.8615V43.8829H115.043V43.8615H113.543ZM113.543 43.8401V43.8615H115.043V43.8401H113.543ZM113.543 43.8186V43.8401H115.043V43.8186H113.543ZM113.543 43.7971V43.8186H115.043V43.7971H113.543ZM113.543 43.7756V43.7971H115.043V43.7756H113.543ZM113.543 43.7541V43.7756H115.043V43.7541H113.543ZM113.543 43.7326V43.7541H115.043V43.7326H113.543ZM113.543 43.711V43.7326H115.043V43.711H113.543ZM113.543 43.6894V43.711H115.043V43.6894H113.543ZM113.543 43.6678V43.6894H115.043V43.6678H113.543ZM113.543 43.6461V43.6678H115.043V43.6461H113.543ZM113.543 43.6245V43.6461H115.043V43.6245H113.543ZM113.543 43.6028V43.6245H115.043V43.6028H113.543ZM113.543 43.5811V43.6028H115.043V43.5811H113.543ZM113.543 43.5593V43.5811H115.043V43.5593H113.543ZM113.543 43.5376V43.5593H115.043V43.5376H113.543ZM113.543 43.5158V43.5376H115.043V43.5158H113.543ZM113.543 43.494V43.5158H115.043V43.494H113.543ZM113.543 43.4722V43.494H115.043V43.4722H113.543ZM113.543 43.4503V43.4722H115.043V43.4503H113.543ZM113.543 43.4284V43.4503H115.043V43.4284H113.543ZM113.543 43.4065V43.4284H115.043V43.4065H113.543ZM113.543 43.3846V43.4065H115.043V43.3846H113.543ZM113.543 43.3627V43.3846H115.043V43.3627H113.543ZM113.543 43.3407V43.3627H115.043V43.3407H113.543ZM113.543 43.3187V43.3407H115.043V43.3187H113.543ZM113.543 43.2967V43.3187H115.043V43.2967H113.543ZM113.543 43.2747V43.2967H115.043V43.2747H113.543ZM113.543 43.2526V43.2747H115.043V43.2526H113.543ZM113.543 43.2305V43.2526H115.043V43.2305H113.543ZM113.543 43.2084V43.2305H115.043V43.2084H113.543ZM113.543 43.1863V43.2084H115.043V43.1863H113.543ZM113.543 43.1641V43.1863H115.043V43.1641H113.543ZM113.543 43.142V43.1641H115.043V43.142H113.543ZM113.543 43.1198V43.142H115.043V43.1198H113.543ZM113.543 43.0975V43.1198H115.043V43.0975H113.543ZM113.543 43.0753V43.0975H115.043V43.0753H113.543ZM113.543 43.053V43.0753H115.043V43.053H113.543ZM113.543 43.0307V43.053H115.043V43.0307H113.543ZM113.543 43.0084V43.0307H115.043V43.0084H113.543ZM113.543 42.9861V43.0084H115.043V42.9861H113.543ZM113.543 42.9637V42.9861H115.043V42.9637H113.543ZM113.543 42.9413V42.9637H115.043V42.9413H113.543ZM113.543 42.9189V42.9413H115.043V42.9189H113.543ZM113.543 42.8965V42.9189H115.043V42.8965H113.543ZM113.543 42.874V42.8965H115.043V42.874H113.543ZM113.543 42.8515V42.874H115.043V42.8515H113.543ZM113.543 42.829V42.8515H115.043V42.829H113.543ZM113.543 42.8065V42.829H115.043V42.8065H113.543ZM113.543 42.7839V42.8065H115.043V42.7839H113.543ZM113.543 42.7614V42.7839H115.043V42.7614H113.543ZM113.543 42.7388V42.7614H115.043V42.7388H113.543ZM113.543 42.7161V42.7388H115.043V42.7161H113.543ZM113.543 42.6935V42.7161H115.043V42.6935H113.543ZM113.543 42.6708V42.6935H115.043V42.6708H113.543ZM113.543 42.6481V42.6708H115.043V42.6481H113.543ZM113.543 42.6254V42.6481H115.043V42.6254H113.543ZM113.543 42.6027V42.6254H115.043V42.6027H113.543ZM113.543 42.5799V42.6027H115.043V42.5799H113.543ZM113.543 42.5571V42.5799H115.043V42.5571H113.543ZM113.543 42.5343V42.5571H115.043V42.5343H113.543ZM113.543 42.5115V42.5343H115.043V42.5115H113.543ZM113.543 42.4887V42.5115H115.043V42.4887H113.543ZM113.543 42.4658V42.4887H115.043V42.4658H113.543ZM113.543 42.4429V42.4658H115.043V42.4429H113.543ZM113.543 42.4199V42.4429H115.043V42.4199H113.543ZM113.543 42.397V42.4199H115.043V42.397H113.543ZM113.543 42.374V42.397H115.043V42.374H113.543ZM113.543 42.351V42.374H115.043V42.351H113.543ZM113.543 42.328V42.351H115.043V42.328H113.543ZM113.543 42.305V42.328H115.043V42.305H113.543ZM113.543 42.2819V42.305H115.043V42.2819H113.543ZM113.543 42.2588V42.2819H115.043V42.2588H113.543ZM113.543 42.2357V42.2588H115.043V42.2357H113.543ZM113.543 42.2126V42.2357H115.043V42.2126H113.543ZM113.543 42.1894V42.2126H115.043V42.1894H113.543ZM113.543 42.1662V42.1894H115.043V42.1662H113.543ZM113.543 42.143V42.1662H115.043V42.143H113.543ZM113.543 42.1198V42.143H115.043V42.1198H113.543ZM113.543 42.0966V42.1198H115.043V42.0966H113.543ZM113.543 42.0733V42.0966H115.043V42.0733H113.543ZM113.543 42.05V42.0733H115.043V42.05H113.543ZM113.543 42.0267V42.05H115.043V42.0267H113.543ZM113.543 42.0033V42.0267H115.043V42.0033H113.543ZM113.543 41.98V42.0033H115.043V41.98H113.543ZM113.543 41.9566V41.98H115.043V41.9566H113.543ZM113.543 41.9331V41.9566H115.043V41.9331H113.543ZM113.543 41.9097V41.9331H115.043V41.9097H113.543ZM113.543 41.8862V41.9097H115.043V41.8862H113.543ZM113.543 41.8628V41.8862H115.043V41.8628H113.543ZM113.543 41.8393V41.8628H115.043V41.8393H113.543ZM113.543 41.8157V41.8393H115.043V41.8157H113.543ZM113.543 41.7922V41.8157H115.043V41.7922H113.543ZM113.543 41.7686V41.7922H115.043V41.7686H113.543ZM113.543 41.745V41.7686H115.043V41.745H113.543ZM113.543 41.7214V41.745H115.043V41.7214H113.543ZM113.543 41.6977V41.7214H115.043V41.6977H113.543ZM113.543 41.674V41.6977H115.043V41.674H113.543ZM113.543 41.6504V41.674H115.043V41.6504H113.543ZM113.543 41.6266V41.6504H115.043V41.6266H113.543ZM113.543 41.6029V41.6266H115.043V41.6029H113.543ZM113.543 41.5791V41.6029H115.043V41.5791H113.543ZM113.543 41.5553V41.5791H115.043V41.5553H113.543ZM113.543 41.5315V41.5553H115.043V41.5315H113.543ZM113.543 41.5077V41.5315H115.043V41.5077H113.543ZM113.543 41.4838V41.5077H115.043V41.4838H113.543ZM113.543 41.46V41.4838H115.043V41.46H113.543ZM113.543 55.2031V55.2135H115.043V55.2031H113.543ZM115.793 54.4531H114.293V55.9531H115.793V54.4531ZM116.543 55.2135V55.2031H115.043V55.2135H116.543ZM116.543 55.2239V55.2135H115.043V55.2239H116.543ZM116.543 55.2343V55.2239H115.043V55.2343H116.543ZM116.543 55.2448V55.2343H115.043V55.2448H116.543ZM116.543 55.2552V55.2448H115.043V55.2552H116.543ZM116.543 55.2657V55.2552H115.043V55.2657H116.543ZM116.543 55.2762V55.2657H115.043V55.2762H116.543ZM116.543 55.2867V55.2762H115.043V55.2867H116.543ZM116.543 55.2972V55.2867H115.043V55.2972H116.543ZM116.543 55.3077V55.2972H115.043V55.3077H116.543ZM116.543 55.3182V55.3077H115.043V55.3182H116.543ZM116.543 55.3287V55.3182H115.043V55.3287H116.543ZM116.543 55.3393V55.3287H115.043V55.3393H116.543ZM116.543 55.3498V55.3393H115.043V55.3498H116.543ZM116.543 55.3604V55.3498H115.043V55.3604H116.543ZM116.543 55.371V55.3604H115.043V55.371H116.543ZM116.543 55.3815V55.371H115.043V55.3815H116.543ZM116.543 55.3921V55.3815H115.043V55.3921H116.543ZM116.543 55.4028V55.3921H115.043V55.4028H116.543ZM116.543 55.4134V55.4028H115.043V55.4134H116.543ZM116.543 55.424V55.4134H115.043V55.424H116.543ZM116.543 55.4347V55.424H115.043V55.4347H116.543ZM116.543 55.4453V55.4347H115.043V55.4453H116.543ZM116.543 55.456V55.4453H115.043V55.456H116.543ZM116.543 55.4667V55.456H115.043V55.4667H116.543ZM116.543 55.4773V55.4667H115.043V55.4773H116.543ZM116.543 55.488V55.4773H115.043V55.488H116.543ZM116.543 55.4988V55.488H115.043V55.4988H116.543ZM116.543 55.5095V55.4988H115.043V55.5095H116.543ZM116.543 55.5202V55.5095H115.043V55.5202H116.543ZM116.543 55.531V55.5202H115.043V55.531H116.543ZM116.543 55.5417V55.531H115.043V55.5417H116.543ZM116.543 55.5525V55.5417H115.043V55.5525H116.543ZM116.543 55.5633V55.5525H115.043V55.5633H116.543ZM116.543 55.574V55.5633H115.043V55.574H116.543ZM116.543 55.5848V55.574H115.043V55.5848H116.543ZM116.543 55.5957V55.5848H115.043V55.5957H116.543ZM116.543 55.6065V55.5957H115.043V55.6065H116.543ZM116.543 55.6173V55.6065H115.043V55.6173H116.543ZM116.543 55.6282V55.6173H115.043V55.6282H116.543ZM116.543 55.639V55.6282H115.043V55.639H116.543ZM116.543 55.6499V55.639H115.043V55.6499H116.543ZM116.543 55.6608V55.6499H115.043V55.6608H116.543ZM116.543 55.6717V55.6608H115.043V55.6717H116.543ZM116.543 55.6826V55.6717H115.043V55.6826H116.543ZM116.543 55.6935V55.6826H115.043V55.6935H116.543ZM116.543 55.7044V55.6935H115.043V55.7044H116.543ZM116.543 55.7153V55.7044H115.043V55.7153H116.543ZM116.543 55.7263V55.7153H115.043V55.7263H116.543ZM116.543 55.7372V55.7263H115.043V55.7372H116.543ZM116.543 55.7482V55.7372H115.043V55.7482H116.543ZM116.543 55.7592V55.7482H115.043V55.7592H116.543ZM116.543 55.7702V55.7592H115.043V55.7702H116.543ZM116.543 55.7812V55.7702H115.043V55.7812H116.543ZM116.543 55.7922V55.7812H115.043V55.7922H116.543ZM116.543 55.8032V55.7922H115.043V55.8032H116.543ZM116.543 55.8143V55.8032H115.043V55.8143H116.543ZM116.543 55.8253V55.8143H115.043V55.8253H116.543ZM116.543 55.8364V55.8253H115.043V55.8364H116.543ZM116.543 55.8474V55.8364H115.043V55.8474H116.543ZM116.543 55.8585V55.8474H115.043V55.8585H116.543ZM116.543 55.8696V55.8585H115.043V55.8696H116.543ZM116.543 55.8807V55.8696H115.043V55.8807H116.543ZM116.543 55.8918V55.8807H115.043V55.8918H116.543ZM116.543 55.903V55.8918H115.043V55.903H116.543ZM116.543 55.9141V55.903H115.043V55.9141H116.543ZM116.543 55.9253V55.9141H115.043V55.9253H116.543ZM116.543 55.9364V55.9253H115.043V55.9364H116.543ZM116.543 55.9476V55.9364H115.043V55.9476H116.543ZM116.543 55.9588V55.9476H115.043V55.9588H116.543ZM116.543 55.97V55.9588H115.043V55.97H116.543ZM116.543 55.9812V55.97H115.043V55.9812H116.543ZM116.543 55.9924V55.9812H115.043V55.9924H116.543ZM116.543 56.0036V55.9924H115.043V56.0036H116.543ZM116.543 56.0149V56.0036H115.043V56.0149H116.543ZM116.543 56.0261V56.0149H115.043V56.0261H116.543ZM116.543 56.0374V56.0261H115.043V56.0374H116.543ZM116.543 56.0487V56.0374H115.043V56.0487H116.543ZM116.543 56.0599V56.0487H115.043V56.0599H116.543ZM116.543 56.0712V56.0599H115.043V56.0712H116.543ZM116.543 56.0825V56.0712H115.043V56.0825H116.543ZM116.543 56.0939V56.0825H115.043V56.0939H116.543ZM116.543 56.1052V56.0939H115.043V56.1052H116.543ZM116.543 56.1165V56.1052H115.043V56.1165H116.543ZM116.543 56.1279V56.1165H115.043V56.1279H116.543ZM116.543 56.1392V56.1279H115.043V56.1392H116.543ZM116.543 56.1506V56.1392H115.043V56.1506H116.543ZM116.543 56.162V56.1506H115.043V56.162H116.543ZM116.543 56.1734V56.162H115.043V56.1734H116.543ZM116.543 56.1848V56.1734H115.043V56.1848H116.543ZM116.543 56.1962V56.1848H115.043V56.1962H116.543ZM116.543 56.2077V56.1962H115.043V56.2077H116.543ZM116.543 56.2191V56.2077H115.043V56.2191H116.543ZM116.543 56.2306V56.2191H115.043V56.2306H116.543ZM116.543 56.242V56.2306H115.043V56.242H116.543ZM116.543 56.2535V56.242H115.043V56.2535H116.543ZM116.543 56.265V56.2535H115.043V56.265H116.543ZM116.543 56.2765V56.265H115.043V56.2765H116.543ZM116.543 56.288V56.2765H115.043V56.288H116.543ZM116.543 56.2995V56.288H115.043V56.2995H116.543ZM116.543 56.311V56.2995H115.043V56.311H116.543ZM116.543 56.3226V56.311H115.043V56.3226H116.543ZM116.543 56.3341V56.3226H115.043V56.3341H116.543ZM116.543 56.3457V56.3341H115.043V56.3457H116.543ZM116.543 56.3573V56.3457H115.043V56.3573H116.543ZM116.543 56.3689V56.3573H115.043V56.3689H116.543ZM116.543 56.3805V56.3689H115.043V56.3805H116.543ZM116.543 56.3921V56.3805H115.043V56.3921H116.543ZM116.543 56.4037V56.3921H115.043V56.4037H116.543ZM116.543 56.4153V56.4037H115.043V56.4153H116.543ZM116.543 56.427V56.4153H115.043V56.427H116.543ZM116.543 56.4386V56.427H115.043V56.4386H116.543ZM116.543 56.4503V56.4386H115.043V56.4503H116.543ZM116.543 56.462V56.4503H115.043V56.462H116.543ZM116.543 56.4737V56.462H115.043V56.4737H116.543ZM116.543 56.4854V56.4737H115.043V56.4854H116.543ZM116.543 56.4971V56.4854H115.043V56.4971H116.543ZM116.543 56.5088V56.4971H115.043V56.5088H116.543ZM116.543 56.5206V56.5088H115.043V56.5206H116.543ZM116.543 56.5323V56.5206H115.043V56.5323H116.543ZM116.543 56.5441V56.5323H115.043V56.5441H116.543ZM116.543 56.5558V56.5441H115.043V56.5558H116.543ZM116.543 56.5676V56.5558H115.043V56.5676H116.543ZM116.543 56.5794V56.5676H115.043V56.5794H116.543ZM116.543 56.5912V56.5794H115.043V56.5912H116.543ZM116.543 56.603V56.5912H115.043V56.603H116.543ZM116.543 56.6148V56.603H115.043V56.6148H116.543ZM116.543 56.6267V56.6148H115.043V56.6267H116.543ZM116.543 56.6385V56.6267H115.043V56.6385H116.543ZM116.543 56.6504V56.6385H115.043V56.6504H116.543ZM116.543 56.6623V56.6504H115.043V56.6623H116.543ZM116.543 56.6741V56.6623H115.043V56.6741H116.543ZM116.543 56.686V56.6741H115.043V56.686H116.543ZM116.543 56.6979V56.686H115.043V56.6979H116.543ZM116.543 56.7098V56.6979H115.043V56.7098H116.543ZM116.543 56.7218V56.7098H115.043V56.7218H116.543ZM116.543 56.7337V56.7218H115.043V56.7337H116.543ZM116.543 56.7457V56.7337H115.043V56.7457H116.543ZM116.543 56.7576V56.7457H115.043V56.7576H116.543ZM116.543 56.7696V56.7576H115.043V56.7696H116.543ZM116.543 56.7816V56.7696H115.043V56.7816H116.543ZM116.543 56.7936V56.7816H115.043V56.7936H116.543ZM116.543 56.8056V56.7936H115.043V56.8056H116.543ZM116.543 56.8176V56.8056H115.043V56.8176H116.543ZM116.543 56.8296V56.8176H115.043V56.8296H116.543ZM116.543 56.8416V56.8296H115.043V56.8416H116.543ZM116.543 56.8537V56.8416H115.043V56.8537H116.543ZM116.543 56.8658V56.8537H115.043V56.8658H116.543ZM116.543 56.8778V56.8658H115.043V56.8778H116.543ZM116.543 56.8899V56.8778H115.043V56.8899H116.543ZM116.543 56.902V56.8899H115.043V56.902H116.543ZM116.543 56.9141V56.902H115.043V56.9141H116.543ZM116.543 56.9262V56.9141H115.043V56.9262H116.543ZM116.543 56.9384V56.9262H115.043V56.9384H116.543ZM116.543 56.9505V56.9384H115.043V56.9505H116.543ZM116.543 56.9627V56.9505H115.043V56.9627H116.543ZM116.543 56.9748V56.9627H115.043V56.9748H116.543ZM116.543 56.987V56.9748H115.043V56.987H116.543ZM116.543 56.9992V56.987H115.043V56.9992H116.543ZM116.543 57.0114V56.9992H115.043V57.0114H116.543ZM116.543 57.0236V57.0114H115.043V57.0236H116.543ZM116.543 57.0358V57.0236H115.043V57.0358H116.543ZM116.543 57.048V57.0358H115.043V57.048H116.543ZM116.543 57.0603V57.048H115.043V57.0603H116.543ZM116.543 57.0725V57.0603H115.043V57.0725H116.543ZM116.543 57.0848V57.0725H115.043V57.0848H116.543ZM116.543 57.0971V57.0848H115.043V57.0971H116.543ZM116.543 57.1093V57.0971H115.043V57.1093H116.543ZM116.543 57.1216V57.1093H115.043V57.1216H116.543ZM116.543 57.1339V57.1216H115.043V57.1339H116.543ZM116.543 57.1463V57.1339H115.043V57.1463H116.543ZM116.543 57.1586V57.1463H115.043V57.1586H116.543ZM116.543 57.1709V57.1586H115.043V57.1709H116.543ZM116.543 57.1833V57.1709H115.043V57.1833H116.543ZM116.543 57.1957V57.1833H115.043V57.1957H116.543ZM116.543 57.208V57.1957H115.043V57.208H116.543ZM116.543 57.2204V57.208H115.043V57.2204H116.543ZM116.543 57.2328V57.2204H115.043V57.2328H116.543ZM116.543 57.2452V57.2328H115.043V57.2452H116.543ZM116.543 57.2577V57.2452H115.043V57.2577H116.543ZM116.543 57.2701V57.2577H115.043V57.2701H116.543ZM116.543 57.2825V57.2701H115.043V57.2825H116.543ZM116.543 57.295V57.2825H115.043V57.295H116.543ZM116.543 57.3074V57.295H115.043V57.3074H116.543ZM116.543 57.3199V57.3074H115.043V57.3199H116.543ZM116.543 57.3324V57.3199H115.043V57.3324H116.543ZM116.543 57.3449V57.3324H115.043V57.3449H116.543ZM116.543 57.3574V57.3449H115.043V57.3574H116.543ZM116.543 57.3699V57.3574H115.043V57.3699H116.543ZM116.543 57.3825V57.3699H115.043V57.3825H116.543ZM116.543 57.395V57.3825H115.043V57.395H116.543ZM116.543 57.4076V57.395H115.043V57.4076H116.543ZM116.543 57.4201V57.4076H115.043V57.4201H116.543ZM116.543 57.4327V57.4201H115.043V57.4327H116.543ZM116.543 57.4453V57.4327H115.043V57.4453H116.543ZM116.543 57.4579V57.4453H115.043V57.4579H116.543ZM116.543 57.4705V57.4579H115.043V57.4705H116.543ZM116.543 57.4832V57.4705H115.043V57.4832H116.543ZM116.543 57.4958V57.4832H115.043V57.4958H116.543ZM116.543 57.5084V57.4958H115.043V57.5084H116.543ZM116.543 57.5211V57.5084H115.043V57.5211H116.543ZM116.543 57.5338V57.5211H115.043V57.5338H116.543ZM116.543 57.5464V57.5338H115.043V57.5464H116.543ZM116.543 57.5591V57.5464H115.043V57.5591H116.543ZM116.543 57.5718V57.5591H115.043V57.5718H116.543ZM116.543 57.5845V57.5718H115.043V57.5845H116.543ZM116.543 57.5973V57.5845H115.043V57.5973H116.543ZM116.543 57.61V57.5973H115.043V57.61H116.543ZM116.543 57.6228V57.61H115.043V57.6228H116.543ZM116.543 57.6355V57.6228H115.043V57.6355H116.543ZM116.543 57.6483V57.6355H115.043V57.6483H116.543ZM116.543 57.6611V57.6483H115.043V57.6611H116.543ZM116.543 57.6739V57.6611H115.043V57.6739H116.543ZM116.543 57.6867V57.6739H115.043V57.6867H116.543ZM116.543 57.6995V57.6867H115.043V57.6995H116.543ZM116.543 57.7123V57.6995H115.043V57.7123H116.543ZM116.543 57.7251V57.7123H115.043V57.7251H116.543ZM116.543 57.738V57.7251H115.043V57.738H116.543ZM116.543 57.7508V57.738H115.043V57.7508H116.543ZM116.543 57.7637V57.7508H115.043V57.7637H116.543ZM116.543 57.7766V57.7637H115.043V57.7766H116.543ZM116.543 57.7895V57.7766H115.043V57.7895H116.543ZM116.543 57.8024V57.7895H115.043V57.8024H116.543ZM116.543 57.8153V57.8024H115.043V57.8153H116.543ZM116.543 57.8282V57.8153H115.043V57.8282H116.543ZM116.543 57.8412V57.8282H115.043V57.8412H116.543ZM116.543 57.8541V57.8412H115.043V57.8541H116.543ZM116.543 57.8671V57.8541H115.043V57.8671H116.543ZM116.543 57.8801V57.8671H115.043V57.8801H116.543ZM116.543 57.893V57.8801H115.043V57.893H116.543ZM116.543 57.906V57.893H115.043V57.906H116.543ZM116.543 57.919V57.906H115.043V57.919H116.543ZM116.543 57.9321V57.919H115.043V57.9321H116.543ZM116.543 57.9451V57.9321H115.043V57.9451H116.543ZM116.543 57.9581V57.9451H115.043V57.9581H116.543ZM116.543 57.9712V57.9581H115.043V57.9712H116.543ZM116.543 57.9842V57.9712H115.043V57.9842H116.543ZM116.543 57.9973V57.9842H115.043V57.9973H116.543ZM116.543 58.0104V57.9973H115.043V58.0104H116.543ZM116.543 58.0235V58.0104H115.043V58.0235H116.543ZM116.543 58.0366V58.0235H115.043V58.0366H116.543ZM116.543 58.0497V58.0366H115.043V58.0497H116.543ZM116.543 58.0629V58.0497H115.043V58.0629H116.543ZM116.543 58.076V58.0629H115.043V58.076H116.543ZM116.543 58.0891V58.076H115.043V58.0891H116.543ZM116.543 58.1023V58.0891H115.043V58.1023H116.543ZM116.543 58.1155V58.1023H115.043V58.1155H116.543ZM116.543 58.1287V58.1155H115.043V58.1287H116.543ZM116.543 58.1419V58.1287H115.043V58.1419H116.543ZM116.543 58.1551V58.1419H115.043V58.1551H116.543ZM116.543 58.1683V58.1551H115.043V58.1683H116.543ZM116.543 58.1815V58.1683H115.043V58.1815H116.543ZM116.543 58.1948V58.1815H115.043V58.1948H116.543ZM116.543 58.208V58.1948H115.043V58.208H116.543ZM116.543 58.2213V58.208H115.043V58.2213H116.543ZM116.543 58.2346V58.2213H115.043V58.2346H116.543ZM116.543 58.2479V58.2346H115.043V58.2479H116.543ZM116.543 58.2612V58.2479H115.043V58.2612H116.543ZM116.543 58.2745V58.2612H115.043V58.2745H116.543ZM116.543 58.2878V58.2745H115.043V58.2878H116.543ZM116.543 58.3011V58.2878H115.043V58.3011H116.543ZM116.543 58.3145V58.3011H115.043V58.3145H116.543ZM116.543 58.3278V58.3145H115.043V58.3278H116.543ZM116.543 58.3412V58.3278H115.043V58.3412H116.543ZM116.543 58.3546V58.3412H115.043V58.3546H116.543ZM116.543 58.3679V58.3546H115.043V58.3679H116.543ZM116.543 58.3813V58.3679H115.043V58.3813H116.543ZM116.543 58.3948V58.3813H115.043V58.3948H116.543ZM116.543 58.4082V58.3948H115.043V58.4082H116.543ZM116.543 58.4216V58.4082H115.043V58.4216H116.543ZM116.543 58.4351V58.4216H115.043V58.4351H116.543ZM116.543 58.4485V58.4351H115.043V58.4485H116.543ZM116.543 58.462V58.4485H115.043V58.462H116.543ZM116.543 58.4755V58.462H115.043V58.4755H116.543ZM116.543 58.4889V58.4755H115.043V58.4889H116.543ZM116.543 58.5024V58.4889H115.043V58.5024H116.543ZM116.543 58.516V58.5024H115.043V58.516H116.543ZM116.543 58.5295V58.516H115.043V58.5295H116.543ZM116.543 58.543V58.5295H115.043V58.543H116.543ZM116.543 58.5566V58.543H115.043V58.5566H116.543ZM116.543 58.5701V58.5566H115.043V58.5701H116.543ZM116.543 58.5837V58.5701H115.043V58.5837H116.543ZM116.543 58.5973V58.5837H115.043V58.5973H116.543ZM116.543 58.6109V58.5973H115.043V58.6109H116.543ZM116.543 58.6245V58.6109H115.043V58.6245H116.543ZM116.543 58.6381V58.6245H115.043V58.6381H116.543ZM116.543 58.6517V58.6381H115.043V58.6517H116.543ZM116.543 58.6653V58.6517H115.043V58.6653H116.543ZM116.543 58.679V58.6653H115.043V58.679H116.543ZM116.543 58.6926V58.679H115.043V58.6926H116.543ZM116.543 58.7063V58.6926H115.043V58.7063H116.543ZM116.543 58.72V58.7063H115.043V58.72H116.543ZM116.543 58.7337V58.72H115.043V58.7337H116.543ZM116.543 58.7474V58.7337H115.043V58.7474H116.543ZM116.543 58.7611V58.7474H115.043V58.7611H116.543ZM116.543 58.7748V58.7611H115.043V58.7748H116.543ZM116.543 58.7886V58.7748H115.043V58.7886H116.543ZM116.543 58.8023V58.7886H115.043V58.8023H116.543ZM116.543 58.8161V58.8023H115.043V58.8161H116.543ZM116.543 58.8298V58.8161H115.043V58.8298H116.543ZM116.543 58.8436V58.8298H115.043V58.8436H116.543ZM116.543 58.8574V58.8436H115.043V58.8574H116.543ZM116.543 58.8712V58.8574H115.043V58.8712H116.543ZM116.543 58.885V58.8712H115.043V58.885H116.543ZM116.543 58.8989V58.885H115.043V58.8989H116.543ZM116.543 58.9127V58.8989H115.043V58.9127H116.543ZM116.543 58.9266V58.9127H115.043V58.9266H116.543ZM116.543 58.9404V58.9266H115.043V58.9404H116.543ZM116.543 58.9543V58.9404H115.043V58.9543H116.543ZM116.543 58.9682V58.9543H115.043V58.9682H116.543ZM116.543 58.9821V58.9682H115.043V58.9821H116.543ZM116.543 58.996V58.9821H115.043V58.996H116.543ZM116.543 59.0099V58.996H115.043V59.0099H116.543ZM116.543 59.0238V59.0099H115.043V59.0238H116.543ZM116.543 59.0378V59.0238H115.043V59.0378H116.543ZM116.543 59.0517V59.0378H115.043V59.0517H116.543ZM116.543 59.0657V59.0517H115.043V59.0657H116.543ZM116.543 59.0796V59.0657H115.043V59.0796H116.543ZM116.543 59.0936V59.0796H115.043V59.0936H116.543ZM116.543 59.1076V59.0936H115.043V59.1076H116.543ZM116.543 59.1216V59.1076H115.043V59.1216H116.543ZM116.543 59.1357V59.1216H115.043V59.1357H116.543ZM116.543 59.1497V59.1357H115.043V59.1497H116.543ZM116.543 59.1637V59.1497H115.043V59.1637H116.543ZM116.543 59.1778V59.1637H115.043V59.1778H116.543ZM116.543 59.1918V59.1778H115.043V59.1918H116.543ZM116.543 59.2059V59.1918H115.043V59.2059H116.543ZM116.543 59.22V59.2059H115.043V59.22H116.543ZM116.543 59.2341V59.22H115.043V59.2341H116.543ZM116.543 59.2482V59.2341H115.043V59.2482H116.543ZM116.543 59.2623V59.2482H115.043V59.2623H116.543ZM116.543 59.2765V59.2623H115.043V59.2765H116.543ZM116.543 59.2906V59.2765H115.043V59.2906H116.543ZM116.543 59.3048V59.2906H115.043V59.3048H116.543ZM116.543 59.3189V59.3048H115.043V59.3189H116.543ZM116.543 59.3331V59.3189H115.043V59.3331H116.543ZM116.543 59.3473V59.3331H115.043V59.3473H116.543ZM116.543 59.3615V59.3473H115.043V59.3615H116.543ZM116.543 59.3757V59.3615H115.043V59.3757H116.543ZM116.543 59.3899V59.3757H115.043V59.3899H116.543ZM116.543 59.4041V59.3899H115.043V59.4041H116.543ZM116.543 59.4184V59.4041H115.043V59.4184H116.543ZM116.543 59.4326V59.4184H115.043V59.4326H116.543ZM116.543 59.4469V59.4326H115.043V59.4469H116.543ZM116.543 59.4612V59.4469H115.043V59.4612H116.543ZM116.543 59.4755V59.4612H115.043V59.4755H116.543ZM116.543 59.4898V59.4755H115.043V59.4898H116.543ZM116.543 59.5041V59.4898H115.043V59.5041H116.543ZM116.543 59.5184V59.5041H115.043V59.5184H116.543ZM116.543 59.5327V59.5184H115.043V59.5327H116.543ZM116.543 59.5471V59.5327H115.043V59.5471H116.543ZM116.543 59.5614V59.5471H115.043V59.5614H116.543ZM116.543 59.5758V59.5614H115.043V59.5758H116.543ZM116.543 59.5902V59.5758H115.043V59.5902H116.543ZM116.543 59.6046V59.5902H115.043V59.6046H116.543ZM116.543 59.619V59.6046H115.043V59.619H116.543ZM116.543 59.6334V59.619H115.043V59.6334H116.543ZM116.543 59.6478V59.6334H115.043V59.6478H116.543ZM116.543 59.6622V59.6478H115.043V59.6622H116.543ZM116.543 59.6767V59.6622H115.043V59.6767H116.543ZM116.543 59.6911V59.6767H115.043V59.6911H116.543ZM116.543 59.7056V59.6911H115.043V59.7056H116.543ZM116.543 59.7201V59.7056H115.043V59.7201H116.543ZM116.543 59.7346V59.7201H115.043V59.7346H116.543ZM116.543 59.7491V59.7346H115.043V59.7491H116.543ZM116.543 59.7636V59.7491H115.043V59.7636H116.543ZM116.543 59.7781V59.7636H115.043V59.7781H116.543ZM116.543 59.7927V59.7781H115.043V59.7927H116.543ZM116.543 59.8072V59.7927H115.043V59.8072H116.543ZM116.543 59.8218V59.8072H115.043V59.8218H116.543ZM116.543 59.8363V59.8218H115.043V59.8363H116.543ZM116.543 59.8509V59.8363H115.043V59.8509H116.543ZM116.543 59.8655V59.8509H115.043V59.8655H116.543ZM116.543 59.8801V59.8655H115.043V59.8801H116.543ZM116.543 59.8947V59.8801H115.043V59.8947H116.543ZM116.543 59.9094V59.8947H115.043V59.9094H116.543ZM116.543 59.924V59.9094H115.043V59.924H116.543ZM116.543 59.9386V59.924H115.043V59.9386H116.543ZM116.543 59.9533V59.9386H115.043V59.9533H116.543ZM116.543 59.968V59.9533H115.043V59.968H116.543ZM116.543 59.9827V59.968H115.043V59.9827H116.543ZM116.543 59.9973V59.9827H115.043V59.9973H116.543ZM116.543 60.0121V59.9973H115.043V60.0121H116.543ZM116.543 60.0268V60.0121H115.043V60.0268H116.543ZM116.543 60.0415V60.0268H115.043V60.0415H116.543ZM116.543 60.0562V60.0415H115.043V60.0562H116.543ZM116.543 60.071V60.0562H115.043V60.071H116.543ZM116.543 60.0857V60.071H115.043V60.0857H116.543ZM116.543 60.1005V60.0857H115.043V60.1005H116.543ZM116.543 60.1153V60.1005H115.043V60.1153H116.543ZM116.543 60.1301V60.1153H115.043V60.1301H116.543ZM116.543 60.1449V60.1301H115.043V60.1449H116.543ZM116.543 60.1597V60.1449H115.043V60.1597H116.543ZM116.543 60.1745V60.1597H115.043V60.1745H116.543ZM116.543 60.1894V60.1745H115.043V60.1894H116.543ZM116.543 60.2042V60.1894H115.043V60.2042H116.543ZM116.543 60.2191V60.2042H115.043V60.2191H116.543ZM116.543 60.234V60.2191H115.043V60.234H116.543ZM116.543 60.2489V60.234H115.043V60.2489H116.543ZM116.543 60.2638V60.2489H115.043V60.2638H116.543ZM116.543 60.2787V60.2638H115.043V60.2787H116.543ZM116.543 60.2936V60.2787H115.043V60.2936H116.543ZM116.543 60.3085V60.2936H115.043V60.3085H116.543ZM116.543 60.3234V60.3085H115.043V60.3234H116.543ZM116.543 60.3384V60.3234H115.043V60.3384H116.543ZM116.543 60.3534V60.3384H115.043V60.3534H116.543ZM116.543 60.3683V60.3534H115.043V60.3683H116.543ZM116.543 60.3833V60.3683H115.043V60.3833H116.543ZM116.543 60.3983V60.3833H115.043V60.3983H116.543ZM116.543 60.4133V60.3983H115.043V60.4133H116.543ZM116.543 60.4283V60.4133H115.043V60.4283H116.543ZM116.543 60.4434V60.4283H115.043V60.4434H116.543ZM116.543 60.4584V60.4434H115.043V60.4584H116.543ZM116.543 60.4735V60.4584H115.043V60.4735H116.543ZM116.543 60.4885V60.4735H115.043V60.4885H116.543ZM116.543 60.5036V60.4885H115.043V60.5036H116.543ZM116.543 60.5187V60.5036H115.043V60.5187H116.543ZM116.543 60.5338V60.5187H115.043V60.5338H116.543ZM116.543 60.5489V60.5338H115.043V60.5489H116.543ZM116.543 60.564V60.5489H115.043V60.564H116.543ZM116.543 60.5792V60.564H115.043V60.5792H116.543ZM116.543 60.5943V60.5792H115.043V60.5943H116.543ZM116.543 60.6095V60.5943H115.043V60.6095H116.543ZM116.543 60.6246V60.6095H115.043V60.6246H116.543ZM116.543 60.6398V60.6246H115.043V60.6398H116.543ZM116.543 60.655V60.6398H115.043V60.655H116.543ZM116.543 60.6702V60.655H115.043V60.6702H116.543ZM116.543 60.6854V60.6702H115.043V60.6854H116.543ZM116.543 60.7006V60.6854H115.043V60.7006H116.543ZM116.543 60.7159V60.7006H115.043V60.7159H116.543ZM116.543 60.7311V60.7159H115.043V60.7311H116.543ZM116.543 60.7464V60.7311H115.043V60.7464H116.543ZM116.543 60.7616V60.7464H115.043V60.7616H116.543ZM116.543 60.7769V60.7616H115.043V60.7769H116.543ZM116.543 60.7922V60.7769H115.043V60.7922H116.543ZM116.543 60.8075V60.7922H115.043V60.8075H116.543ZM116.543 60.8228V60.8075H115.043V60.8228H116.543ZM116.543 60.8381V60.8228H115.043V60.8381H116.543ZM116.543 60.8535V60.8381H115.043V60.8535H116.543ZM116.543 60.8688V60.8535H115.043V60.8688H116.543ZM116.543 60.8842V60.8688H115.043V60.8842H116.543ZM116.543 60.8995V60.8842H115.043V60.8995H116.543ZM116.543 60.9149V60.8995H115.043V60.9149H116.543ZM116.543 60.9303V60.9149H115.043V60.9303H116.543ZM116.543 60.9457V60.9303H115.043V60.9457H116.543ZM116.543 60.9611V60.9457H115.043V60.9611H116.543ZM116.543 60.9765V60.9611H115.043V60.9765H116.543ZM116.543 60.992V60.9765H115.043V60.992H116.543ZM116.543 61.0074V60.992H115.043V61.0074H116.543ZM116.543 61.0229V61.0074H115.043V61.0229H116.543ZM116.543 61.0384V61.0229H115.043V61.0384H116.543ZM116.543 61.0538V61.0384H115.043V61.0538H116.543ZM116.543 61.0693V61.0538H115.043V61.0693H116.543ZM116.543 61.0848V61.0693H115.043V61.0848H116.543ZM116.543 61.1003V61.0848H115.043V61.1003H116.543ZM116.543 61.1159V61.1003H115.043V61.1159H116.543ZM116.543 61.1314V61.1159H115.043V61.1314H116.543ZM116.543 61.147V61.1314H115.043V61.147H116.543ZM116.543 61.1625V61.147H115.043V61.1625H116.543ZM116.543 61.1781V61.1625H115.043V61.1781H116.543ZM116.543 61.1937V61.1781H115.043V61.1937H116.543ZM116.543 61.2093V61.1937H115.043V61.2093H116.543ZM116.543 61.2249V61.2093H115.043V61.2249H116.543ZM116.543 61.2405V61.2249H115.043V61.2405H116.543ZM116.543 61.2561V61.2405H115.043V61.2561H116.543ZM116.543 61.2718V61.2561H115.043V61.2718H116.543ZM116.543 61.2874V61.2718H115.043V61.2874H116.543ZM116.543 61.3031V61.2874H115.043V61.3031H116.543ZM116.543 61.3187V61.3031H115.043V61.3187H116.543ZM116.543 61.3344V61.3187H115.043V61.3344H116.543ZM116.543 61.3501V61.3344H115.043V61.3501H116.543ZM116.543 61.3658V61.3501H115.043V61.3658H116.543ZM116.543 61.3815V61.3658H115.043V61.3815H116.543ZM116.543 61.3973V61.3815H115.043V61.3973H116.543ZM116.543 61.413V61.3973H115.043V61.413H116.543ZM116.543 61.4288V61.413H115.043V61.4288H116.543ZM116.543 61.4445V61.4288H115.043V61.4445H116.543ZM116.543 61.4603V61.4445H115.043V61.4603H116.543ZM116.543 61.4761V61.4603H115.043V61.4761H116.543ZM116.543 61.4919V61.4761H115.043V61.4919H116.543ZM116.543 61.5077V61.4919H115.043V61.5077H116.543ZM116.543 61.5235V61.5077H115.043V61.5235H116.543ZM116.543 61.5393V61.5235H115.043V61.5393H116.543ZM116.543 61.5552V61.5393H115.043V61.5552H116.543ZM116.543 61.571V61.5552H115.043V61.571H116.543ZM116.543 61.5869V61.571H115.043V61.5869H116.543ZM116.543 61.6028V61.5869H115.043V61.6028H116.543ZM116.543 61.6186V61.6028H115.043V61.6186H116.543ZM116.543 61.6345V61.6186H115.043V61.6345H116.543ZM116.543 61.6504V61.6345H115.043V61.6504H116.543ZM116.543 61.6664V61.6504H115.043V61.6664H116.543ZM116.543 61.6823V61.6664H115.043V61.6823H116.543ZM116.543 61.6982V61.6823H115.043V61.6982H116.543ZM116.543 61.7142V61.6982H115.043V61.7142H116.543ZM116.543 61.7302V61.7142H115.043V61.7302H116.543ZM116.543 61.7461V61.7302H115.043V61.7461H116.543ZM116.543 61.7621V61.7461H115.043V61.7621H116.543ZM116.543 61.7781V61.7621H115.043V61.7781H116.543ZM116.543 61.7941V61.7781H115.043V61.7941H116.543ZM116.543 61.8101V61.7941H115.043V61.8101H116.543ZM116.543 61.8262V61.8101H115.043V61.8262H116.543ZM116.543 61.8422V61.8262H115.043V61.8422H116.543ZM116.543 61.8583V61.8422H115.043V61.8583H116.543ZM116.543 61.8743V61.8583H115.043V61.8743H116.543ZM116.543 61.8904V61.8743H115.043V61.8904H116.543ZM116.543 61.9065V61.8904H115.043V61.9065H116.543ZM116.543 61.9226V61.9065H115.043V61.9226H116.543ZM116.543 61.9387V61.9226H115.043V61.9387H116.543ZM116.543 61.9548V61.9387H115.043V61.9548H116.543ZM116.543 61.971V61.9548H115.043V61.971H116.543ZM116.543 61.9871V61.971H115.043V61.9871H116.543ZM116.543 62.0033V61.9871H115.043V62.0033H116.543ZM114.293 62.7533H115.793V61.2533H114.293V62.7533ZM113.543 61.9871V62.0033H115.043V61.9871H113.543ZM113.543 61.971V61.9871H115.043V61.971H113.543ZM113.543 61.9548V61.971H115.043V61.9548H113.543ZM113.543 61.9387V61.9548H115.043V61.9387H113.543ZM113.543 61.9226V61.9387H115.043V61.9226H113.543ZM113.543 61.9065V61.9226H115.043V61.9065H113.543ZM113.543 61.8904V61.9065H115.043V61.8904H113.543ZM113.543 61.8743V61.8904H115.043V61.8743H113.543ZM113.543 61.8583V61.8743H115.043V61.8583H113.543ZM113.543 61.8422V61.8583H115.043V61.8422H113.543ZM113.543 61.8262V61.8422H115.043V61.8262H113.543ZM113.543 61.8101V61.8262H115.043V61.8101H113.543ZM113.543 61.7941V61.8101H115.043V61.7941H113.543ZM113.543 61.7781V61.7941H115.043V61.7781H113.543ZM113.543 61.7621V61.7781H115.043V61.7621H113.543ZM113.543 61.7461V61.7621H115.043V61.7461H113.543ZM113.543 61.7302V61.7461H115.043V61.7302H113.543ZM113.543 61.7142V61.7302H115.043V61.7142H113.543ZM113.543 61.6982V61.7142H115.043V61.6982H113.543ZM113.543 61.6823V61.6982H115.043V61.6823H113.543ZM113.543 61.6664V61.6823H115.043V61.6664H113.543ZM113.543 61.6504V61.6664H115.043V61.6504H113.543ZM113.543 61.6345V61.6504H115.043V61.6345H113.543ZM113.543 61.6186V61.6345H115.043V61.6186H113.543ZM113.543 61.6028V61.6186H115.043V61.6028H113.543ZM113.543 61.5869V61.6028H115.043V61.5869H113.543ZM113.543 61.571V61.5869H115.043V61.571H113.543ZM113.543 61.5552V61.571H115.043V61.5552H113.543ZM113.543 61.5393V61.5552H115.043V61.5393H113.543ZM113.543 61.5235V61.5393H115.043V61.5235H113.543ZM113.543 61.5077V61.5235H115.043V61.5077H113.543ZM113.543 61.4919V61.5077H115.043V61.4919H113.543ZM113.543 61.4761V61.4919H115.043V61.4761H113.543ZM113.543 61.4603V61.4761H115.043V61.4603H113.543ZM113.543 61.4445V61.4603H115.043V61.4445H113.543ZM113.543 61.4288V61.4445H115.043V61.4288H113.543ZM113.543 61.413V61.4288H115.043V61.413H113.543ZM113.543 61.3973V61.413H115.043V61.3973H113.543ZM113.543 61.3815V61.3973H115.043V61.3815H113.543ZM113.543 61.3658V61.3815H115.043V61.3658H113.543ZM113.543 61.3501V61.3658H115.043V61.3501H113.543ZM113.543 61.3344V61.3501H115.043V61.3344H113.543ZM113.543 61.3187V61.3344H115.043V61.3187H113.543ZM113.543 61.3031V61.3187H115.043V61.3031H113.543ZM113.543 61.2874V61.3031H115.043V61.2874H113.543ZM113.543 61.2718V61.2874H115.043V61.2718H113.543ZM113.543 61.2561V61.2718H115.043V61.2561H113.543ZM113.543 61.2405V61.2561H115.043V61.2405H113.543ZM113.543 61.2249V61.2405H115.043V61.2249H113.543ZM113.543 61.2093V61.2249H115.043V61.2093H113.543ZM113.543 61.1937V61.2093H115.043V61.1937H113.543ZM113.543 61.1781V61.1937H115.043V61.1781H113.543ZM113.543 61.1625V61.1781H115.043V61.1625H113.543ZM113.543 61.147V61.1625H115.043V61.147H113.543ZM113.543 61.1314V61.147H115.043V61.1314H113.543ZM113.543 61.1159V61.1314H115.043V61.1159H113.543ZM113.543 61.1003V61.1159H115.043V61.1003H113.543ZM113.543 61.0848V61.1003H115.043V61.0848H113.543ZM113.543 61.0693V61.0848H115.043V61.0693H113.543ZM113.543 61.0538V61.0693H115.043V61.0538H113.543ZM113.543 61.0384V61.0538H115.043V61.0384H113.543ZM113.543 61.0229V61.0384H115.043V61.0229H113.543ZM113.543 61.0074V61.0229H115.043V61.0074H113.543ZM113.543 60.992V61.0074H115.043V60.992H113.543ZM113.543 60.9765V60.992H115.043V60.9765H113.543ZM113.543 60.9611V60.9765H115.043V60.9611H113.543ZM113.543 60.9457V60.9611H115.043V60.9457H113.543ZM113.543 60.9303V60.9457H115.043V60.9303H113.543ZM113.543 60.9149V60.9303H115.043V60.9149H113.543ZM113.543 60.8995V60.9149H115.043V60.8995H113.543ZM113.543 60.8842V60.8995H115.043V60.8842H113.543ZM113.543 60.8688V60.8842H115.043V60.8688H113.543ZM113.543 60.8535V60.8688H115.043V60.8535H113.543ZM113.543 60.8381V60.8535H115.043V60.8381H113.543ZM113.543 60.8228V60.8381H115.043V60.8228H113.543ZM113.543 60.8075V60.8228H115.043V60.8075H113.543ZM113.543 60.7922V60.8075H115.043V60.7922H113.543ZM113.543 60.7769V60.7922H115.043V60.7769H113.543ZM113.543 60.7616V60.7769H115.043V60.7616H113.543ZM113.543 60.7464V60.7616H115.043V60.7464H113.543ZM113.543 60.7311V60.7464H115.043V60.7311H113.543ZM113.543 60.7159V60.7311H115.043V60.7159H113.543ZM113.543 60.7006V60.7159H115.043V60.7006H113.543ZM113.543 60.6854V60.7006H115.043V60.6854H113.543ZM113.543 60.6702V60.6854H115.043V60.6702H113.543ZM113.543 60.655V60.6702H115.043V60.655H113.543ZM113.543 60.6398V60.655H115.043V60.6398H113.543ZM113.543 60.6246V60.6398H115.043V60.6246H113.543ZM113.543 60.6095V60.6246H115.043V60.6095H113.543ZM113.543 60.5943V60.6095H115.043V60.5943H113.543ZM113.543 60.5792V60.5943H115.043V60.5792H113.543ZM113.543 60.564V60.5792H115.043V60.564H113.543ZM113.543 60.5489V60.564H115.043V60.5489H113.543ZM113.543 60.5338V60.5489H115.043V60.5338H113.543ZM113.543 60.5187V60.5338H115.043V60.5187H113.543ZM113.543 60.5036V60.5187H115.043V60.5036H113.543ZM113.543 60.4885V60.5036H115.043V60.4885H113.543ZM113.543 60.4735V60.4885H115.043V60.4735H113.543ZM113.543 60.4584V60.4735H115.043V60.4584H113.543ZM113.543 60.4434V60.4584H115.043V60.4434H113.543ZM113.543 60.4283V60.4434H115.043V60.4283H113.543ZM113.543 60.4133V60.4283H115.043V60.4133H113.543ZM113.543 60.3983V60.4133H115.043V60.3983H113.543ZM113.543 60.3833V60.3983H115.043V60.3833H113.543ZM113.543 60.3683V60.3833H115.043V60.3683H113.543ZM113.543 60.3534V60.3683H115.043V60.3534H113.543ZM113.543 60.3384V60.3534H115.043V60.3384H113.543ZM113.543 60.3234V60.3384H115.043V60.3234H113.543ZM113.543 60.3085V60.3234H115.043V60.3085H113.543ZM113.543 60.2936V60.3085H115.043V60.2936H113.543ZM113.543 60.2787V60.2936H115.043V60.2787H113.543ZM113.543 60.2638V60.2787H115.043V60.2638H113.543ZM113.543 60.2489V60.2638H115.043V60.2489H113.543ZM113.543 60.234V60.2489H115.043V60.234H113.543ZM113.543 60.2191V60.234H115.043V60.2191H113.543ZM113.543 60.2042V60.2191H115.043V60.2042H113.543ZM113.543 60.1894V60.2042H115.043V60.1894H113.543ZM113.543 60.1745V60.1894H115.043V60.1745H113.543ZM113.543 60.1597V60.1745H115.043V60.1597H113.543ZM113.543 60.1449V60.1597H115.043V60.1449H113.543ZM113.543 60.1301V60.1449H115.043V60.1301H113.543ZM113.543 60.1153V60.1301H115.043V60.1153H113.543ZM113.543 60.1005V60.1153H115.043V60.1005H113.543ZM113.543 60.0857V60.1005H115.043V60.0857H113.543ZM113.543 60.071V60.0857H115.043V60.071H113.543ZM113.543 60.0562V60.071H115.043V60.0562H113.543ZM113.543 60.0415V60.0562H115.043V60.0415H113.543ZM113.543 60.0268V60.0415H115.043V60.0268H113.543ZM113.543 60.0121V60.0268H115.043V60.0121H113.543ZM113.543 59.9973V60.0121H115.043V59.9973H113.543ZM113.543 59.9827V59.9973H115.043V59.9827H113.543ZM113.543 59.968V59.9827H115.043V59.968H113.543ZM113.543 59.9533V59.968H115.043V59.9533H113.543ZM113.543 59.9386V59.9533H115.043V59.9386H113.543ZM113.543 59.924V59.9386H115.043V59.924H113.543ZM113.543 59.9094V59.924H115.043V59.9094H113.543ZM113.543 59.8947V59.9094H115.043V59.8947H113.543ZM113.543 59.8801V59.8947H115.043V59.8801H113.543ZM113.543 59.8655V59.8801H115.043V59.8655H113.543ZM113.543 59.8509V59.8655H115.043V59.8509H113.543ZM113.543 59.8363V59.8509H115.043V59.8363H113.543ZM113.543 59.8218V59.8363H115.043V59.8218H113.543ZM113.543 59.8072V59.8218H115.043V59.8072H113.543ZM113.543 59.7927V59.8072H115.043V59.7927H113.543ZM113.543 59.7781V59.7927H115.043V59.7781H113.543ZM113.543 59.7636V59.7781H115.043V59.7636H113.543ZM113.543 59.7491V59.7636H115.043V59.7491H113.543ZM113.543 59.7346V59.7491H115.043V59.7346H113.543ZM113.543 59.7201V59.7346H115.043V59.7201H113.543ZM113.543 59.7056V59.7201H115.043V59.7056H113.543ZM113.543 59.6911V59.7056H115.043V59.6911H113.543ZM113.543 59.6767V59.6911H115.043V59.6767H113.543ZM113.543 59.6622V59.6767H115.043V59.6622H113.543ZM113.543 59.6478V59.6622H115.043V59.6478H113.543ZM113.543 59.6334V59.6478H115.043V59.6334H113.543ZM113.543 59.619V59.6334H115.043V59.619H113.543ZM113.543 59.6046V59.619H115.043V59.6046H113.543ZM113.543 59.5902V59.6046H115.043V59.5902H113.543ZM113.543 59.5758V59.5902H115.043V59.5758H113.543ZM113.543 59.5614V59.5758H115.043V59.5614H113.543ZM113.543 59.5471V59.5614H115.043V59.5471H113.543ZM113.543 59.5327V59.5471H115.043V59.5327H113.543ZM113.543 59.5184V59.5327H115.043V59.5184H113.543ZM113.543 59.5041V59.5184H115.043V59.5041H113.543ZM113.543 59.4898V59.5041H115.043V59.4898H113.543ZM113.543 59.4755V59.4898H115.043V59.4755H113.543ZM113.543 59.4612V59.4755H115.043V59.4612H113.543ZM113.543 59.4469V59.4612H115.043V59.4469H113.543ZM113.543 59.4326V59.4469H115.043V59.4326H113.543ZM113.543 59.4184V59.4326H115.043V59.4184H113.543ZM113.543 59.4041V59.4184H115.043V59.4041H113.543ZM113.543 59.3899V59.4041H115.043V59.3899H113.543ZM113.543 59.3757V59.3899H115.043V59.3757H113.543ZM113.543 59.3615V59.3757H115.043V59.3615H113.543ZM113.543 59.3473V59.3615H115.043V59.3473H113.543ZM113.543 59.3331V59.3473H115.043V59.3331H113.543ZM113.543 59.3189V59.3331H115.043V59.3189H113.543ZM113.543 59.3048V59.3189H115.043V59.3048H113.543ZM113.543 59.2906V59.3048H115.043V59.2906H113.543ZM113.543 59.2765V59.2906H115.043V59.2765H113.543ZM113.543 59.2623V59.2765H115.043V59.2623H113.543ZM113.543 59.2482V59.2623H115.043V59.2482H113.543ZM113.543 59.2341V59.2482H115.043V59.2341H113.543ZM113.543 59.22V59.2341H115.043V59.22H113.543ZM113.543 59.2059V59.22H115.043V59.2059H113.543ZM113.543 59.1918V59.2059H115.043V59.1918H113.543ZM113.543 59.1778V59.1918H115.043V59.1778H113.543ZM113.543 59.1637V59.1778H115.043V59.1637H113.543ZM113.543 59.1497V59.1637H115.043V59.1497H113.543ZM113.543 59.1357V59.1497H115.043V59.1357H113.543ZM113.543 59.1216V59.1357H115.043V59.1216H113.543ZM113.543 59.1076V59.1216H115.043V59.1076H113.543ZM113.543 59.0936V59.1076H115.043V59.0936H113.543ZM113.543 59.0796V59.0936H115.043V59.0796H113.543ZM113.543 59.0657V59.0796H115.043V59.0657H113.543ZM113.543 59.0517V59.0657H115.043V59.0517H113.543ZM113.543 59.0378V59.0517H115.043V59.0378H113.543ZM113.543 59.0238V59.0378H115.043V59.0238H113.543ZM113.543 59.0099V59.0238H115.043V59.0099H113.543ZM113.543 58.996V59.0099H115.043V58.996H113.543ZM113.543 58.9821V58.996H115.043V58.9821H113.543ZM113.543 58.9682V58.9821H115.043V58.9682H113.543ZM113.543 58.9543V58.9682H115.043V58.9543H113.543ZM113.543 58.9404V58.9543H115.043V58.9404H113.543ZM113.543 58.9266V58.9404H115.043V58.9266H113.543ZM113.543 58.9127V58.9266H115.043V58.9127H113.543ZM113.543 58.8989V58.9127H115.043V58.8989H113.543ZM113.543 58.885V58.8989H115.043V58.885H113.543ZM113.543 58.8712V58.885H115.043V58.8712H113.543ZM113.543 58.8574V58.8712H115.043V58.8574H113.543ZM113.543 58.8436V58.8574H115.043V58.8436H113.543ZM113.543 58.8298V58.8436H115.043V58.8298H113.543ZM113.543 58.8161V58.8298H115.043V58.8161H113.543ZM113.543 58.8023V58.8161H115.043V58.8023H113.543ZM113.543 58.7886V58.8023H115.043V58.7886H113.543ZM113.543 58.7748V58.7886H115.043V58.7748H113.543ZM113.543 58.7611V58.7748H115.043V58.7611H113.543ZM113.543 58.7474V58.7611H115.043V58.7474H113.543ZM113.543 58.7337V58.7474H115.043V58.7337H113.543ZM113.543 58.72V58.7337H115.043V58.72H113.543ZM113.543 58.7063V58.72H115.043V58.7063H113.543ZM113.543 58.6926V58.7063H115.043V58.6926H113.543ZM113.543 58.679V58.6926H115.043V58.679H113.543ZM113.543 58.6653V58.679H115.043V58.6653H113.543ZM113.543 58.6517V58.6653H115.043V58.6517H113.543ZM113.543 58.6381V58.6517H115.043V58.6381H113.543ZM113.543 58.6245V58.6381H115.043V58.6245H113.543ZM113.543 58.6109V58.6245H115.043V58.6109H113.543ZM113.543 58.5973V58.6109H115.043V58.5973H113.543ZM113.543 58.5837V58.5973H115.043V58.5837H113.543ZM113.543 58.5701V58.5837H115.043V58.5701H113.543ZM113.543 58.5566V58.5701H115.043V58.5566H113.543ZM113.543 58.543V58.5566H115.043V58.543H113.543ZM113.543 58.5295V58.543H115.043V58.5295H113.543ZM113.543 58.516V58.5295H115.043V58.516H113.543ZM113.543 58.5024V58.516H115.043V58.5024H113.543ZM113.543 58.4889V58.5024H115.043V58.4889H113.543ZM113.543 58.4755V58.4889H115.043V58.4755H113.543ZM113.543 58.462V58.4755H115.043V58.462H113.543ZM113.543 58.4485V58.462H115.043V58.4485H113.543ZM113.543 58.4351V58.4485H115.043V58.4351H113.543ZM113.543 58.4216V58.4351H115.043V58.4216H113.543ZM113.543 58.4082V58.4216H115.043V58.4082H113.543ZM113.543 58.3948V58.4082H115.043V58.3948H113.543ZM113.543 58.3813V58.3948H115.043V58.3813H113.543ZM113.543 58.3679V58.3813H115.043V58.3679H113.543ZM113.543 58.3546V58.3679H115.043V58.3546H113.543ZM113.543 58.3412V58.3546H115.043V58.3412H113.543ZM113.543 58.3278V58.3412H115.043V58.3278H113.543ZM113.543 58.3145V58.3278H115.043V58.3145H113.543ZM113.543 58.3011V58.3145H115.043V58.3011H113.543ZM113.543 58.2878V58.3011H115.043V58.2878H113.543ZM113.543 58.2745V58.2878H115.043V58.2745H113.543ZM113.543 58.2612V58.2745H115.043V58.2612H113.543ZM113.543 58.2479V58.2612H115.043V58.2479H113.543ZM113.543 58.2346V58.2479H115.043V58.2346H113.543ZM113.543 58.2213V58.2346H115.043V58.2213H113.543ZM113.543 58.208V58.2213H115.043V58.208H113.543ZM113.543 58.1948V58.208H115.043V58.1948H113.543ZM113.543 58.1815V58.1948H115.043V58.1815H113.543ZM113.543 58.1683V58.1815H115.043V58.1683H113.543ZM113.543 58.1551V58.1683H115.043V58.1551H113.543ZM113.543 58.1419V58.1551H115.043V58.1419H113.543ZM113.543 58.1287V58.1419H115.043V58.1287H113.543ZM113.543 58.1155V58.1287H115.043V58.1155H113.543ZM113.543 58.1023V58.1155H115.043V58.1023H113.543ZM113.543 58.0891V58.1023H115.043V58.0891H113.543ZM113.543 58.076V58.0891H115.043V58.076H113.543ZM113.543 58.0629V58.076H115.043V58.0629H113.543ZM113.543 58.0497V58.0629H115.043V58.0497H113.543ZM113.543 58.0366V58.0497H115.043V58.0366H113.543ZM113.543 58.0235V58.0366H115.043V58.0235H113.543ZM113.543 58.0104V58.0235H115.043V58.0104H113.543ZM113.543 57.9973V58.0104H115.043V57.9973H113.543ZM113.543 57.9842V57.9973H115.043V57.9842H113.543ZM113.543 57.9712V57.9842H115.043V57.9712H113.543ZM113.543 57.9581V57.9712H115.043V57.9581H113.543ZM113.543 57.9451V57.9581H115.043V57.9451H113.543ZM113.543 57.9321V57.9451H115.043V57.9321H113.543ZM113.543 57.919V57.9321H115.043V57.919H113.543ZM113.543 57.906V57.919H115.043V57.906H113.543ZM113.543 57.893V57.906H115.043V57.893H113.543ZM113.543 57.8801V57.893H115.043V57.8801H113.543ZM113.543 57.8671V57.8801H115.043V57.8671H113.543ZM113.543 57.8541V57.8671H115.043V57.8541H113.543ZM113.543 57.8412V57.8541H115.043V57.8412H113.543ZM113.543 57.8282V57.8412H115.043V57.8282H113.543ZM113.543 57.8153V57.8282H115.043V57.8153H113.543ZM113.543 57.8024V57.8153H115.043V57.8024H113.543ZM113.543 57.7895V57.8024H115.043V57.7895H113.543ZM113.543 57.7766V57.7895H115.043V57.7766H113.543ZM113.543 57.7637V57.7766H115.043V57.7637H113.543ZM113.543 57.7508V57.7637H115.043V57.7508H113.543ZM113.543 57.738V57.7508H115.043V57.738H113.543ZM113.543 57.7251V57.738H115.043V57.7251H113.543ZM113.543 57.7123V57.7251H115.043V57.7123H113.543ZM113.543 57.6995V57.7123H115.043V57.6995H113.543ZM113.543 57.6867V57.6995H115.043V57.6867H113.543ZM113.543 57.6739V57.6867H115.043V57.6739H113.543ZM113.543 57.6611V57.6739H115.043V57.6611H113.543ZM113.543 57.6483V57.6611H115.043V57.6483H113.543ZM113.543 57.6355V57.6483H115.043V57.6355H113.543ZM113.543 57.6228V57.6355H115.043V57.6228H113.543ZM113.543 57.61V57.6228H115.043V57.61H113.543ZM113.543 57.5973V57.61H115.043V57.5973H113.543ZM113.543 57.5845V57.5973H115.043V57.5845H113.543ZM113.543 57.5718V57.5845H115.043V57.5718H113.543ZM113.543 57.5591V57.5718H115.043V57.5591H113.543ZM113.543 57.5464V57.5591H115.043V57.5464H113.543ZM113.543 57.5338V57.5464H115.043V57.5338H113.543ZM113.543 57.5211V57.5338H115.043V57.5211H113.543ZM113.543 57.5084V57.5211H115.043V57.5084H113.543ZM113.543 57.4958V57.5084H115.043V57.4958H113.543ZM113.543 57.4832V57.4958H115.043V57.4832H113.543ZM113.543 57.4705V57.4832H115.043V57.4705H113.543ZM113.543 57.4579V57.4705H115.043V57.4579H113.543ZM113.543 57.4453V57.4579H115.043V57.4453H113.543ZM113.543 57.4327V57.4453H115.043V57.4327H113.543ZM113.543 57.4201V57.4327H115.043V57.4201H113.543ZM113.543 57.4076V57.4201H115.043V57.4076H113.543ZM113.543 57.395V57.4076H115.043V57.395H113.543ZM113.543 57.3825V57.395H115.043V57.3825H113.543ZM113.543 57.3699V57.3825H115.043V57.3699H113.543ZM113.543 57.3574V57.3699H115.043V57.3574H113.543ZM113.543 57.3449V57.3574H115.043V57.3449H113.543ZM113.543 57.3324V57.3449H115.043V57.3324H113.543ZM113.543 57.3199V57.3324H115.043V57.3199H113.543ZM113.543 57.3074V57.3199H115.043V57.3074H113.543ZM113.543 57.295V57.3074H115.043V57.295H113.543ZM113.543 57.2825V57.295H115.043V57.2825H113.543ZM113.543 57.2701V57.2825H115.043V57.2701H113.543ZM113.543 57.2577V57.2701H115.043V57.2577H113.543ZM113.543 57.2452V57.2577H115.043V57.2452H113.543ZM113.543 57.2328V57.2452H115.043V57.2328H113.543ZM113.543 57.2204V57.2328H115.043V57.2204H113.543ZM113.543 57.208V57.2204H115.043V57.208H113.543ZM113.543 57.1957V57.208H115.043V57.1957H113.543ZM113.543 57.1833V57.1957H115.043V57.1833H113.543ZM113.543 57.1709V57.1833H115.043V57.1709H113.543ZM113.543 57.1586V57.1709H115.043V57.1586H113.543ZM113.543 57.1463V57.1586H115.043V57.1463H113.543ZM113.543 57.1339V57.1463H115.043V57.1339H113.543ZM113.543 57.1216V57.1339H115.043V57.1216H113.543ZM113.543 57.1093V57.1216H115.043V57.1093H113.543ZM113.543 57.0971V57.1093H115.043V57.0971H113.543ZM113.543 57.0848V57.0971H115.043V57.0848H113.543ZM113.543 57.0725V57.0848H115.043V57.0725H113.543ZM113.543 57.0603V57.0725H115.043V57.0603H113.543ZM113.543 57.048V57.0603H115.043V57.048H113.543ZM113.543 57.0358V57.048H115.043V57.0358H113.543ZM113.543 57.0236V57.0358H115.043V57.0236H113.543ZM113.543 57.0114V57.0236H115.043V57.0114H113.543ZM113.543 56.9992V57.0114H115.043V56.9992H113.543ZM113.543 56.987V56.9992H115.043V56.987H113.543ZM113.543 56.9748V56.987H115.043V56.9748H113.543ZM113.543 56.9627V56.9748H115.043V56.9627H113.543ZM113.543 56.9505V56.9627H115.043V56.9505H113.543ZM113.543 56.9384V56.9505H115.043V56.9384H113.543ZM113.543 56.9262V56.9384H115.043V56.9262H113.543ZM113.543 56.9141V56.9262H115.043V56.9141H113.543ZM113.543 56.902V56.9141H115.043V56.902H113.543ZM113.543 56.8899V56.902H115.043V56.8899H113.543ZM113.543 56.8778V56.8899H115.043V56.8778H113.543ZM113.543 56.8658V56.8778H115.043V56.8658H113.543ZM113.543 56.8537V56.8658H115.043V56.8537H113.543ZM113.543 56.8416V56.8537H115.043V56.8416H113.543ZM113.543 56.8296V56.8416H115.043V56.8296H113.543ZM113.543 56.8176V56.8296H115.043V56.8176H113.543ZM113.543 56.8056V56.8176H115.043V56.8056H113.543ZM113.543 56.7936V56.8056H115.043V56.7936H113.543ZM113.543 56.7816V56.7936H115.043V56.7816H113.543ZM113.543 56.7696V56.7816H115.043V56.7696H113.543ZM113.543 56.7576V56.7696H115.043V56.7576H113.543ZM113.543 56.7457V56.7576H115.043V56.7457H113.543ZM113.543 56.7337V56.7457H115.043V56.7337H113.543ZM113.543 56.7218V56.7337H115.043V56.7218H113.543ZM113.543 56.7098V56.7218H115.043V56.7098H113.543ZM113.543 56.6979V56.7098H115.043V56.6979H113.543ZM113.543 56.686V56.6979H115.043V56.686H113.543ZM113.543 56.6741V56.686H115.043V56.6741H113.543ZM113.543 56.6623V56.6741H115.043V56.6623H113.543ZM113.543 56.6504V56.6623H115.043V56.6504H113.543ZM113.543 56.6385V56.6504H115.043V56.6385H113.543ZM113.543 56.6267V56.6385H115.043V56.6267H113.543ZM113.543 56.6148V56.6267H115.043V56.6148H113.543ZM113.543 56.603V56.6148H115.043V56.603H113.543ZM113.543 56.5912V56.603H115.043V56.5912H113.543ZM113.543 56.5794V56.5912H115.043V56.5794H113.543ZM113.543 56.5676V56.5794H115.043V56.5676H113.543ZM113.543 56.5558V56.5676H115.043V56.5558H113.543ZM113.543 56.5441V56.5558H115.043V56.5441H113.543ZM113.543 56.5323V56.5441H115.043V56.5323H113.543ZM113.543 56.5206V56.5323H115.043V56.5206H113.543ZM113.543 56.5088V56.5206H115.043V56.5088H113.543ZM113.543 56.4971V56.5088H115.043V56.4971H113.543ZM113.543 56.4854V56.4971H115.043V56.4854H113.543ZM113.543 56.4737V56.4854H115.043V56.4737H113.543ZM113.543 56.462V56.4737H115.043V56.462H113.543ZM113.543 56.4503V56.462H115.043V56.4503H113.543ZM113.543 56.4386V56.4503H115.043V56.4386H113.543ZM113.543 56.427V56.4386H115.043V56.427H113.543ZM113.543 56.4153V56.427H115.043V56.4153H113.543ZM113.543 56.4037V56.4153H115.043V56.4037H113.543ZM113.543 56.3921V56.4037H115.043V56.3921H113.543ZM113.543 56.3805V56.3921H115.043V56.3805H113.543ZM113.543 56.3689V56.3805H115.043V56.3689H113.543ZM113.543 56.3573V56.3689H115.043V56.3573H113.543ZM113.543 56.3457V56.3573H115.043V56.3457H113.543ZM113.543 56.3341V56.3457H115.043V56.3341H113.543ZM113.543 56.3226V56.3341H115.043V56.3226H113.543ZM113.543 56.311V56.3226H115.043V56.311H113.543ZM113.543 56.2995V56.311H115.043V56.2995H113.543ZM113.543 56.288V56.2995H115.043V56.288H113.543ZM113.543 56.2765V56.288H115.043V56.2765H113.543ZM113.543 56.265V56.2765H115.043V56.265H113.543ZM113.543 56.2535V56.265H115.043V56.2535H113.543ZM113.543 56.242V56.2535H115.043V56.242H113.543ZM113.543 56.2306V56.242H115.043V56.2306H113.543ZM113.543 56.2191V56.2306H115.043V56.2191H113.543ZM113.543 56.2077V56.2191H115.043V56.2077H113.543ZM113.543 56.1962V56.2077H115.043V56.1962H113.543ZM113.543 56.1848V56.1962H115.043V56.1848H113.543ZM113.543 56.1734V56.1848H115.043V56.1734H113.543ZM113.543 56.162V56.1734H115.043V56.162H113.543ZM113.543 56.1506V56.162H115.043V56.1506H113.543ZM113.543 56.1392V56.1506H115.043V56.1392H113.543ZM113.543 56.1279V56.1392H115.043V56.1279H113.543ZM113.543 56.1165V56.1279H115.043V56.1165H113.543ZM113.543 56.1052V56.1165H115.043V56.1052H113.543ZM113.543 56.0939V56.1052H115.043V56.0939H113.543ZM113.543 56.0825V56.0939H115.043V56.0825H113.543ZM113.543 56.0712V56.0825H115.043V56.0712H113.543ZM113.543 56.0599V56.0712H115.043V56.0599H113.543ZM113.543 56.0487V56.0599H115.043V56.0487H113.543ZM113.543 56.0374V56.0487H115.043V56.0374H113.543ZM113.543 56.0261V56.0374H115.043V56.0261H113.543ZM113.543 56.0149V56.0261H115.043V56.0149H113.543ZM113.543 56.0036V56.0149H115.043V56.0036H113.543ZM113.543 55.9924V56.0036H115.043V55.9924H113.543ZM113.543 55.9812V55.9924H115.043V55.9812H113.543ZM113.543 55.97V55.9812H115.043V55.97H113.543ZM113.543 55.9588V55.97H115.043V55.9588H113.543ZM113.543 55.9476V55.9588H115.043V55.9476H113.543ZM113.543 55.9364V55.9476H115.043V55.9364H113.543ZM113.543 55.9253V55.9364H115.043V55.9253H113.543ZM113.543 55.9141V55.9253H115.043V55.9141H113.543ZM113.543 55.903V55.9141H115.043V55.903H113.543ZM113.543 55.8918V55.903H115.043V55.8918H113.543ZM113.543 55.8807V55.8918H115.043V55.8807H113.543ZM113.543 55.8696V55.8807H115.043V55.8696H113.543ZM113.543 55.8585V55.8696H115.043V55.8585H113.543ZM113.543 55.8474V55.8585H115.043V55.8474H113.543ZM113.543 55.8364V55.8474H115.043V55.8364H113.543ZM113.543 55.8253V55.8364H115.043V55.8253H113.543ZM113.543 55.8143V55.8253H115.043V55.8143H113.543ZM113.543 55.8032V55.8143H115.043V55.8032H113.543ZM113.543 55.7922V55.8032H115.043V55.7922H113.543ZM113.543 55.7812V55.7922H115.043V55.7812H113.543ZM113.543 55.7702V55.7812H115.043V55.7702H113.543ZM113.543 55.7592V55.7702H115.043V55.7592H113.543ZM113.543 55.7482V55.7592H115.043V55.7482H113.543ZM113.543 55.7372V55.7482H115.043V55.7372H113.543ZM113.543 55.7263V55.7372H115.043V55.7263H113.543ZM113.543 55.7153V55.7263H115.043V55.7153H113.543ZM113.543 55.7044V55.7153H115.043V55.7044H113.543ZM113.543 55.6935V55.7044H115.043V55.6935H113.543ZM113.543 55.6826V55.6935H115.043V55.6826H113.543ZM113.543 55.6717V55.6826H115.043V55.6717H113.543ZM113.543 55.6608V55.6717H115.043V55.6608H113.543ZM113.543 55.6499V55.6608H115.043V55.6499H113.543ZM113.543 55.639V55.6499H115.043V55.639H113.543ZM113.543 55.6282V55.639H115.043V55.6282H113.543ZM113.543 55.6173V55.6282H115.043V55.6173H113.543ZM113.543 55.6065V55.6173H115.043V55.6065H113.543ZM113.543 55.5957V55.6065H115.043V55.5957H113.543ZM113.543 55.5848V55.5957H115.043V55.5848H113.543ZM113.543 55.574V55.5848H115.043V55.574H113.543ZM113.543 55.5633V55.574H115.043V55.5633H113.543ZM113.543 55.5525V55.5633H115.043V55.5525H113.543ZM113.543 55.5417V55.5525H115.043V55.5417H113.543ZM113.543 55.531V55.5417H115.043V55.531H113.543ZM113.543 55.5202V55.531H115.043V55.5202H113.543ZM113.543 55.5095V55.5202H115.043V55.5095H113.543ZM113.543 55.4988V55.5095H115.043V55.4988H113.543ZM113.543 55.488V55.4988H115.043V55.488H113.543ZM113.543 55.4773V55.488H115.043V55.4773H113.543ZM113.543 55.4667V55.4773H115.043V55.4667H113.543ZM113.543 55.456V55.4667H115.043V55.456H113.543ZM113.543 55.4453V55.456H115.043V55.4453H113.543ZM113.543 55.4347V55.4453H115.043V55.4347H113.543ZM113.543 55.424V55.4347H115.043V55.424H113.543ZM113.543 55.4134V55.424H115.043V55.4134H113.543ZM113.543 55.4028V55.4134H115.043V55.4028H113.543ZM113.543 55.3921V55.4028H115.043V55.3921H113.543ZM113.543 55.3815V55.3921H115.043V55.3815H113.543ZM113.543 55.371V55.3815H115.043V55.371H113.543ZM113.543 55.3604V55.371H115.043V55.3604H113.543ZM113.543 55.3498V55.3604H115.043V55.3498H113.543ZM113.543 55.3393V55.3498H115.043V55.3393H113.543ZM113.543 55.3287V55.3393H115.043V55.3287H113.543ZM113.543 55.3182V55.3287H115.043V55.3182H113.543ZM113.543 55.3077V55.3182H115.043V55.3077H113.543ZM113.543 55.2972V55.3077H115.043V55.2972H113.543ZM113.543 55.2867V55.2972H115.043V55.2867H113.543ZM113.543 55.2762V55.2867H115.043V55.2762H113.543ZM113.543 55.2657V55.2762H115.043V55.2657H113.543ZM113.543 55.2552V55.2657H115.043V55.2552H113.543ZM113.543 55.2448V55.2552H115.043V55.2448H113.543ZM113.543 55.2343V55.2448H115.043V55.2343H113.543ZM113.543 55.2239V55.2343H115.043V55.2239H113.543ZM113.543 55.2135V55.2239H115.043V55.2135H113.543Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "80.2831", cy: "104.49", r: "4.83", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M80.6339 78.2196L80.2855 78.0369L79.9372 78.2196L72.0279 82.3675C71.1107 82.8485 70.0399 82.0694 70.2154 81.0487L71.7247 72.2706L71.7916 71.8813L71.5084 71.6058L65.1196 65.3936C64.3761 64.6707 64.7854 63.4091 65.8117 63.2603L74.6454 61.9799L75.0353 61.9233L75.2101 61.5702L79.1652 53.576C79.6241 52.6484 80.947 52.6484 81.4059 53.576L85.361 61.5702L85.5357 61.9233L85.9257 61.9799L94.7594 63.2603C95.7857 63.4091 96.195 64.6707 95.4515 65.3936L89.0627 71.6058L88.7794 71.8813L88.8464 72.2706L90.3557 81.0487C90.5312 82.0694 89.4604 82.8485 88.5432 82.3675L80.6339 78.2196Z", fill: "white", stroke: "#3B3552", strokeWidth: "1.5" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M84.2988 49.38L83.9662 48.7078L83.294 49.0404L83.6266 49.7126L84.2988 49.38ZM86.0173 52.8535L85.3451 53.1861L85.6777 53.8583L86.3499 53.5257L86.0173 52.8535ZM85.6433 48.7148L86.3155 48.3823L85.9829 47.71L85.3107 48.0426L85.6433 48.7148ZM87.3618 52.1883L87.6944 52.8605L88.3666 52.528L88.034 51.8557L87.3618 52.1883ZM87.1897 55.2232L86.8571 54.5509L86.1849 54.8835L86.5175 55.5558L87.1897 55.2232ZM88.4406 57.7515L89.1128 57.4189V57.4189L88.4406 57.7515ZM88.5342 54.558L89.2064 54.2254L88.8738 53.5532L88.2016 53.8858L88.5342 54.558ZM89.785 57.0863L89.1128 57.4189L89.785 57.0863ZM90.7261 57.7691L90.8337 57.0268H90.8337L90.7261 57.7691ZM96.1337 58.5529L96.876 58.6605L96.9836 57.9183L96.2413 57.8107L96.1337 58.5529ZM95.9186 60.0374L95.811 60.7797L96.5532 60.8872L96.6608 60.145L95.9186 60.0374ZM90.5109 59.2536L90.6185 58.5113L90.5109 59.2536ZM83.6266 49.7126L85.3451 53.1861L86.6895 52.5209L84.9711 49.0474L83.6266 49.7126ZM85.3107 48.0426L83.9662 48.7078L84.6314 50.0522L85.9759 49.3871L85.3107 48.0426ZM88.034 51.8557L86.3155 48.3823L84.9711 49.0474L86.6895 52.5209L88.034 51.8557ZM86.3499 53.5257L87.6944 52.8605L87.0292 51.5161L85.6847 52.1813L86.3499 53.5257ZM86.5175 55.5558L87.7683 58.0841L89.1128 57.4189L87.8619 54.8906L86.5175 55.5558ZM88.2016 53.8858L86.8571 54.5509L87.5223 55.8954L88.8667 55.2302L88.2016 53.8858ZM90.4573 56.7537L89.2064 54.2254L87.8619 54.8906L89.1128 57.4189L90.4573 56.7537ZM90.8337 57.0268C90.6709 57.0032 90.5302 56.9011 90.4573 56.7537L89.1128 57.4189C89.4045 58.0085 89.9675 58.417 90.6185 58.5113L90.8337 57.0268ZM96.2413 57.8107L90.8337 57.0268L90.6185 58.5113L96.0262 59.2952L96.2413 57.8107ZM96.6608 60.145L96.876 58.6605L95.3915 58.4453L95.1763 59.9298L96.6608 60.145ZM90.4033 59.9958L95.811 60.7797L96.0262 59.2952L90.6185 58.5113L90.4033 59.9958ZM87.7683 58.0841C88.2788 59.1159 89.2641 59.8307 90.4033 59.9958L90.6185 58.5113C89.9675 58.417 89.4045 58.0085 89.1128 57.4189L87.7683 58.0841Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M85.8658 65.5861C86.4769 64.4728 87.699 63.824 88.9559 64.0061V64.0061C89.7831 64.126 91.4375 64.3657 91.4375 64.3657C91.9458 64.4393 92.2981 64.9111 92.2245 65.4194C92.1951 65.6224 92.0994 65.8099 91.9524 65.9528L86.7961 70.9666L88.0138 78.0491C88.1009 78.5553 87.7611 79.0362 87.2549 79.1232C87.0535 79.1578 86.8463 79.1252 86.6654 79.0303L80.2861 75.6848L73.9069 79.0303C73.452 79.2688 72.8899 79.0935 72.6513 78.6386C72.5564 78.4576 72.5237 78.2505 72.5584 78.0491V78.0491C72.6353 77.6036 72.9303 77.2269 73.342 77.0402C73.6292 76.9099 73.949 76.7624 74.1667 76.6545C78.8744 74.322 82.8168 70.6778 85.5161 66.1997C85.62 66.0272 85.7405 65.8143 85.8658 65.5861Z", fill: "#3040D6", fillOpacity: "0.05" })); var Illustrations = /*#__PURE__*/Object.freeze({ __proto__: null, Accept: Accept, AdminJSLogo: AdminJSLogo, Astronaut: Astronaut, Bag: Bag, Beware: Beware, Box: Box, Calendar: Calendar, Cancel: Cancel, Cards: Cards, Clip: Clip, Cloud: Cloud, Cup: Cup, Details: Details, Docs: Docs, DocumentCheck: DocumentCheck, DocumentSearch: DocumentSearch, Drawer: Drawer$1, FileSearch: FileSearch, FlagInCog: FlagInCog, Folder: Folder, Folders: Folders, GithubLogo: GithubLogo, IdentityCard: IdentityCard, Launch: Launch, Moon: Moon, NotFound: NotFound, Notebook: Notebook, Padlock: Padlock, Photos: Photos, Planet: Planet, Plug: Plug, Rocket: Rocket, RocketNew: RocketNew, SlackLogo: Slack, Tags: Tags }); /** * @memberof Illustration * @alias IllustrationProps */ const Wrapper$2 = styled.div.attrs(props => ({ className: cssClass('Illustration', props.className) }))` [fill='#3040D6'] { fill: ${({ theme }) => theme.colors.primary100}; } [stroke='#3B3552'] { stroke: ${({ theme }) => theme.colors.accent}; } `; const RawIllustration = props => { const { variant, ...other } = props; const IllustrationComponent = Illustrations[variant]; return /*#__PURE__*/React__namespace.default.createElement(Wrapper$2, null, /*#__PURE__*/React__namespace.default.createElement(IllustrationComponent, other)); }; /** * @classdesc * * <img src="components/illustration.png" /> * * Awesome database with all the illustrations provided with AdminJS. * * * ### Usage * * ```javascript * import { Illustration, IllustrationProps } from '@adminjs/design-system' * ``` * * @component * @subcategory Atoms * @see IllustrationProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-illustration--default Storybook} * @hideconstructor * * @example <caption>Folders</caption> * return ( * <Illustration variant="Folders" /> * ) * @example <caption>DocumentSearch</caption> * return ( * <Illustration variant="DocumentSearch" /> * ) * @example <caption>Rocket</caption> * return ( * <Box bg="grey100" p="xxl"><Illustration variant="Rocket" /></Box> * ) * @section design-system */ const Illustration = RawIllustration; Illustration.displayName = 'Illustration'; const sizeVariants$1 = variant({ prop: 'size', variants: { sm: { fontSize: 'xs', py: 'sm' }, lg: { fontSize: 'default' } } }); const variants$3 = variant({ variants: { primary: { color: 'primary100' }, danger: { color: 'error' }, success: { color: 'success' }, info: { color: 'primary60' }, secondary: { color: 'accent' } } }); /** * Prop Types of a Link component. * Apart from those explicitly specified below it extends all {@link ColorProps}, * and {@link SpaceProps} * * @memberof Link * @alias LinkProps * @property {string} [...] All props default to _a_ html component like `href`, * `onClick` etc. * @property {string} [...] Other props from {@link ColorProps} and {@link SpaceProps} */ /** * @classdesc * * <img src="components/link.png" /> * * Styled form of Link element. * * ### Usage * * ```javascript * import { Link, LinkProps } from '@adminjs/design-system' * ``` * * @component * @subcategory Atoms * @see LinkProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-link--default Storybook} * @hideconstructor * @example <caption>All color variants</caption> * const variants = ['primary', 'danger', 'success', 'info', 'secondary'] * return ( * <Box py="xl"> * {variants.map(variant => ( * <Link href="#" variant={variant} mr="xl">{variant}</Link> * ))} * </Box> * ) * @example <caption>With icons</caption> * return ( * <Box py="xl"> * <Link href="#" mr="xl"> * <Icon icon="Plus" /> * With an icon * </Link> * </Box> * ) * @section design-system */ const Link$1 = styled.a` font-family: ${({ theme }) => theme.font}; vertical-align: middle; cursor: pointer; text-decoration: none; &:hover { text-decoration: underline; } & svg { padding-right: ${({ theme }) => theme.space.default}; vertical-align: text-top; } ${({ uppercase }) => uppercase ? 'text-transform: uppercase;' : ''} ${color}; ${space}; ${sizeVariants$1}; ${variants$3}; `; Link$1.defaultProps = { variant: 'primary', color: 'grey60', className: cssClass('Link') }; Link$1.displayName = 'Link'; /* eslint-disable import/prefer-default-export */ const Spinner = styled.div.attrs({ className: 'lds-facebook' })` & { display: inline-block; position: relative; width: 64px; height: 64px; } & div { display: inline-block; position: absolute; left: 6px; width: 13px; background: ${({ theme }) => theme.colors.primary100}; animation: lds-facebook 1s cubic-bezier(0, 0.5, 0.5, 1) infinite; } & div:nth-child(1) { left: 6px; animation-delay: -0.24s; } & div:nth-child(2) { left: 26px; animation-delay: -0.12s; } & div:nth-child(3) { left: 45px; animation-delay: 0; } @keyframes lds-facebook { 0%, 80%, 100% { top: 6px; height: 51px; } 40% { top: 19px; height: 26px; } } `; /** * @classdesc * * <img src="components/loader.png" /> * * Simple loader * * ### Usage * * ```javascript * import { Loader } from '@adminjs/design-system' * ``` * * @component * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-loader--default Storybook} * @hideconstructor * @subcategory Atoms * @example * return ( * <Loader/> * ) * @section design-system */ const Loader = () => /*#__PURE__*/React__namespace.default.createElement(Box$1, { p: "x3", style: { textAlign: 'center' }, "data-testid": "Loader", className: cssClass('Loader') }, /*#__PURE__*/React__namespace.default.createElement(Spinner, null, /*#__PURE__*/React__namespace.default.createElement("div", null), /*#__PURE__*/React__namespace.default.createElement("div", null), /*#__PURE__*/React__namespace.default.createElement("div", null))); Loader.displayName = 'Loader'; const Overlay = styled.div` width: 100%; height: 100%; background: rgba(0, 0, 0, 0.2); position: fixed; top: 0; left: 0; z-index: 999; ${zIndex} `; Overlay.defaultProps = { className: cssClass('Overlay') }; Overlay.displayName = 'Overlay'; var lib = function (e) { var t = {}; function r(n) { if (t[n]) return t[n].exports; var a = t[n] = { i: n, l: !1, exports: {} }; return e[n].call(a.exports, a, a.exports, r), a.l = !0, a.exports; } return r.m = e, r.c = t, r.d = function (e, t, n) { r.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: n }); }, r.r = function (e) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }); }, r.t = function (e, t) { if (1 & t && (e = r(e)), 8 & t) return e; if (4 & t && "object" == typeof e && e && e.__esModule) return e; var n = Object.create(null); if (r.r(n), Object.defineProperty(n, "default", { enumerable: !0, value: e }), 2 & t && "string" != typeof e) for (var a in e) r.d(n, a, function (t) { return e[t]; }.bind(null, a)); return n; }, r.n = function (e) { var t = e && e.__esModule ? function () { return e.default; } : function () { return e; }; return r.d(t, "a", t), t; }, r.o = function (e, t) { return Object.prototype.hasOwnProperty.call(e, t); }, r.p = "", r(r.s = 9); }([function (e, t) { e.exports = React__namespace.default; }, function (e, t, r) { var n; /*! Copyright (c) 2017 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames */ !function () { var r = {}.hasOwnProperty; function a() { for (var e = [], t = 0; t < arguments.length; t++) { var n = arguments[t]; if (n) { var o = typeof n; if ("string" === o || "number" === o) e.push(n);else if (Array.isArray(n) && n.length) { var i = a.apply(null, n); i && e.push(i); } else if ("object" === o) for (var u in n) r.call(n, u) && n[u] && e.push(u); } } return e.join(" "); } e.exports ? (a.default = a, e.exports = a) : void 0 === (n = function () { return a; }.apply(t, [])) || (e.exports = n); }(); }, function (e, t, r) { (function (t) { var r = /^\s+|\s+$/g, n = /^[-+]0x[0-9a-f]+$/i, a = /^0b[01]+$/i, o = /^0o[0-7]+$/i, i = parseInt, u = "object" == typeof t && t && t.Object === Object && t, c = "object" == typeof self && self && self.Object === Object && self, s = u || c || Function("return this")(), l = Object.prototype.toString, f = s.Symbol, d = f ? f.prototype : void 0, p = d ? d.toString : void 0; function h(e) { if ("string" == typeof e) return e; if (y(e)) return p ? p.call(e) : ""; var t = e + ""; return "0" == t && 1 / e == -1 / 0 ? "-0" : t; } function m(e) { var t = typeof e; return !!e && ("object" == t || "function" == t); } function y(e) { return "symbol" == typeof e || function (e) { return !!e && "object" == typeof e; }(e) && "[object Symbol]" == l.call(e); } function b(e) { return e ? (e = function (e) { if ("number" == typeof e) return e; if (y(e)) return NaN; if (m(e)) { var t = "function" == typeof e.valueOf ? e.valueOf() : e; e = m(t) ? t + "" : t; } if ("string" != typeof e) return 0 === e ? e : +e; e = e.replace(r, ""); var u = a.test(e); return u || o.test(e) ? i(e.slice(2), u ? 2 : 8) : n.test(e) ? NaN : +e; }(e)) === 1 / 0 || e === -1 / 0 ? 17976931348623157e292 * (e < 0 ? -1 : 1) : e == e ? e : 0 : 0 === e ? e : 0; } e.exports = function (e, t, r) { var n, a, o, i; return e = null == (n = e) ? "" : h(n), a = function (e) { var t = b(e), r = t % 1; return t == t ? r ? t - r : t : 0; }(r), o = 0, i = e.length, a == a && (void 0 !== i && (a = a <= i ? a : i), void 0 !== o && (a = a >= o ? a : o)), r = a, t = h(t), e.slice(r, r + t.length) == t; }; }).call(this, r(3)); }, function (e, t) { var r; r = function () { return this; }(); try { r = r || new Function("return this")(); } catch (e) { "object" == typeof window && (r = window); } e.exports = r; }, function (e, t, r) { (function (t) { var r = /^\[object .+?Constructor\]$/, n = "object" == typeof t && t && t.Object === Object && t, a = "object" == typeof self && self && self.Object === Object && self, o = n || a || Function("return this")(); var i, u = Array.prototype, c = Function.prototype, s = Object.prototype, l = o["__core-js_shared__"], f = (i = /[^.]+$/.exec(l && l.keys && l.keys.IE_PROTO || "")) ? "Symbol(src)_1." + i : "", d = c.toString, p = s.hasOwnProperty, h = s.toString, m = RegExp("^" + d.call(p).replace(/[\\^$.*+?()[\]{}|]/g, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"), y = u.splice, b = x(o, "Map"), g = x(Object, "create"); function v(e) { var t = -1, r = e ? e.length : 0; for (this.clear(); ++t < r;) { var n = e[t]; this.set(n[0], n[1]); } } function C(e) { var t = -1, r = e ? e.length : 0; for (this.clear(); ++t < r;) { var n = e[t]; this.set(n[0], n[1]); } } function _(e) { var t = -1, r = e ? e.length : 0; for (this.clear(); ++t < r;) { var n = e[t]; this.set(n[0], n[1]); } } function w(e, t) { for (var r, n, a = e.length; a--;) if ((r = e[a][0]) === (n = t) || r != r && n != n) return a; return -1; } function S(e) { return !(!O(e) || (t = e, f && f in t)) && (function (e) { var t = O(e) ? h.call(e) : ""; return "[object Function]" == t || "[object GeneratorFunction]" == t; }(e) || function (e) { var t = !1; if (null != e && "function" != typeof e.toString) try { t = !!(e + ""); } catch (e) {} return t; }(e) ? m : r).test(function (e) { if (null != e) { try { return d.call(e); } catch (e) {} try { return e + ""; } catch (e) {} } return ""; }(e)); var t; } function j(e, t) { var r, n, a = e.__data__; return ("string" == (n = typeof (r = t)) || "number" == n || "symbol" == n || "boolean" == n ? "__proto__" !== r : null === r) ? a["string" == typeof t ? "string" : "hash"] : a.map; } function x(e, t) { var r = function (e, t) { return null == e ? void 0 : e[t]; }(e, t); return S(r) ? r : void 0; } function N(e, t) { if ("function" != typeof e || t && "function" != typeof t) throw new TypeError("Expected a function"); var r = function () { var n = arguments, a = t ? t.apply(this, n) : n[0], o = r.cache; if (o.has(a)) return o.get(a); var i = e.apply(this, n); return r.cache = o.set(a, i), i; }; return r.cache = new (N.Cache || _)(), r; } function O(e) { var t = typeof e; return !!e && ("object" == t || "function" == t); } v.prototype.clear = function () { this.__data__ = g ? g(null) : {}; }, v.prototype.delete = function (e) { return this.has(e) && delete this.__data__[e]; }, v.prototype.get = function (e) { var t = this.__data__; if (g) { var r = t[e]; return "__lodash_hash_undefined__" === r ? void 0 : r; } return p.call(t, e) ? t[e] : void 0; }, v.prototype.has = function (e) { var t = this.__data__; return g ? void 0 !== t[e] : p.call(t, e); }, v.prototype.set = function (e, t) { return this.__data__[e] = g && void 0 === t ? "__lodash_hash_undefined__" : t, this; }, C.prototype.clear = function () { this.__data__ = []; }, C.prototype.delete = function (e) { var t = this.__data__, r = w(t, e); return !(r < 0) && (r == t.length - 1 ? t.pop() : y.call(t, r, 1), !0); }, C.prototype.get = function (e) { var t = this.__data__, r = w(t, e); return r < 0 ? void 0 : t[r][1]; }, C.prototype.has = function (e) { return w(this.__data__, e) > -1; }, C.prototype.set = function (e, t) { var r = this.__data__, n = w(r, e); return n < 0 ? r.push([e, t]) : r[n][1] = t, this; }, _.prototype.clear = function () { this.__data__ = { hash: new v(), map: new (b || C)(), string: new v() }; }, _.prototype.delete = function (e) { return j(this, e).delete(e); }, _.prototype.get = function (e) { return j(this, e).get(e); }, _.prototype.has = function (e) { return j(this, e).has(e); }, _.prototype.set = function (e, t) { return j(this, e).set(e, t), this; }, N.Cache = _, e.exports = N; }).call(this, r(3)); }, function (e, t, r) { (function (t) { var r = /^\s+|\s+$/g, n = /^[-+]0x[0-9a-f]+$/i, a = /^0b[01]+$/i, o = /^0o[0-7]+$/i, i = parseInt, u = "object" == typeof t && t && t.Object === Object && t, c = "object" == typeof self && self && self.Object === Object && self, s = u || c || Function("return this")(), l = Object.prototype.toString, f = Math.max, d = Math.min, p = function () { return s.Date.now(); }; function h(e) { var t = typeof e; return !!e && ("object" == t || "function" == t); } function m(e) { if ("number" == typeof e) return e; if (function (e) { return "symbol" == typeof e || function (e) { return !!e && "object" == typeof e; }(e) && "[object Symbol]" == l.call(e); }(e)) return NaN; if (h(e)) { var t = "function" == typeof e.valueOf ? e.valueOf() : e; e = h(t) ? t + "" : t; } if ("string" != typeof e) return 0 === e ? e : +e; e = e.replace(r, ""); var u = a.test(e); return u || o.test(e) ? i(e.slice(2), u ? 2 : 8) : n.test(e) ? NaN : +e; } e.exports = function (e, t, r) { var n, a, o, i, u, c, s = 0, l = !1, y = !1, b = !0; if ("function" != typeof e) throw new TypeError("Expected a function"); function g(t) { var r = n, o = a; return n = a = void 0, s = t, i = e.apply(o, r); } function v(e) { return s = e, u = setTimeout(_, t), l ? g(e) : i; } function C(e) { var r = e - c; return void 0 === c || r >= t || r < 0 || y && e - s >= o; } function _() { var e = p(); if (C(e)) return w(e); u = setTimeout(_, function (e) { var r = t - (e - c); return y ? d(r, o - (e - s)) : r; }(e)); } function w(e) { return u = void 0, b && n ? g(e) : (n = a = void 0, i); } function S() { var e = p(), r = C(e); if (n = arguments, a = this, c = e, r) { if (void 0 === u) return v(c); if (y) return u = setTimeout(_, t), g(c); } return void 0 === u && (u = setTimeout(_, t)), i; } return t = m(t) || 0, h(r) && (l = !!r.leading, o = (y = "maxWait" in r) ? f(m(r.maxWait) || 0, t) : o, b = "trailing" in r ? !!r.trailing : b), S.cancel = function () { void 0 !== u && clearTimeout(u), s = 0, n = c = a = u = void 0; }, S.flush = function () { return void 0 === u ? i : w(p()); }, S; }; }).call(this, r(3)); }, function (e, t, r) { (function (e, r) { var n = "[object Arguments]", a = "[object Map]", o = "[object Object]", i = "[object Set]", u = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, c = /^\w*$/, s = /^\./, l = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, f = /\\(\\)?/g, d = /^\[object .+?Constructor\]$/, p = /^(?:0|[1-9]\d*)$/, h = {}; h["[object Float32Array]"] = h["[object Float64Array]"] = h["[object Int8Array]"] = h["[object Int16Array]"] = h["[object Int32Array]"] = h["[object Uint8Array]"] = h["[object Uint8ClampedArray]"] = h["[object Uint16Array]"] = h["[object Uint32Array]"] = !0, h[n] = h["[object Array]"] = h["[object ArrayBuffer]"] = h["[object Boolean]"] = h["[object DataView]"] = h["[object Date]"] = h["[object Error]"] = h["[object Function]"] = h[a] = h["[object Number]"] = h[o] = h["[object RegExp]"] = h[i] = h["[object String]"] = h["[object WeakMap]"] = !1; var m = "object" == typeof e && e && e.Object === Object && e, y = "object" == typeof self && self && self.Object === Object && self, b = m || y || Function("return this")(), g = t && !t.nodeType && t, v = g && "object" == typeof r && r && !r.nodeType && r, C = v && v.exports === g && m.process, _ = function () { try { return C && C.binding("util"); } catch (e) {} }(), w = _ && _.isTypedArray; function S(e, t, r, n) { var a = -1, o = e ? e.length : 0; for (n && o && (r = e[++a]); ++a < o;) r = t(r, e[a], a, e); return r; } function j(e, t) { for (var r = -1, n = e ? e.length : 0; ++r < n;) if (t(e[r], r, e)) return !0; return !1; } function x(e, t, r, n, a) { return a(e, function (e, a, o) { r = n ? (n = !1, e) : t(r, e, a, o); }), r; } function N(e) { var t = !1; if (null != e && "function" != typeof e.toString) try { t = !!(e + ""); } catch (e) {} return t; } function O(e) { var t = -1, r = Array(e.size); return e.forEach(function (e, n) { r[++t] = [n, e]; }), r; } function k(e) { var t = -1, r = Array(e.size); return e.forEach(function (e) { r[++t] = e; }), r; } var E, T, I, A = Array.prototype, D = Function.prototype, P = Object.prototype, F = b["__core-js_shared__"], M = (E = /[^.]+$/.exec(F && F.keys && F.keys.IE_PROTO || "")) ? "Symbol(src)_1." + E : "", R = D.toString, L = P.hasOwnProperty, z = P.toString, B = RegExp("^" + R.call(L).replace(/[\\^$.*+?()[\]{}|]/g, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"), G = b.Symbol, $ = b.Uint8Array, V = P.propertyIsEnumerable, K = A.splice, U = (T = Object.keys, I = Object, function (e) { return T(I(e)); }), q = Ne(b, "DataView"), H = Ne(b, "Map"), W = Ne(b, "Promise"), J = Ne(b, "Set"), Z = Ne(b, "WeakMap"), Q = Ne(Object, "create"), Y = Pe(q), X = Pe(H), ee = Pe(W), te = Pe(J), re = Pe(Z), ne = G ? G.prototype : void 0, ae = ne ? ne.valueOf : void 0, oe = ne ? ne.toString : void 0; function ie(e) { var t = -1, r = e ? e.length : 0; for (this.clear(); ++t < r;) { var n = e[t]; this.set(n[0], n[1]); } } function ue(e) { var t = -1, r = e ? e.length : 0; for (this.clear(); ++t < r;) { var n = e[t]; this.set(n[0], n[1]); } } function ce(e) { var t = -1, r = e ? e.length : 0; for (this.clear(); ++t < r;) { var n = e[t]; this.set(n[0], n[1]); } } function se(e) { var t = -1, r = e ? e.length : 0; for (this.__data__ = new ce(); ++t < r;) this.add(e[t]); } function le(e) { this.__data__ = new ue(e); } function fe(e, t) { var r = Le(e) || Re(e) ? function (e, t) { for (var r = -1, n = Array(e); ++r < e;) n[r] = t(r); return n; }(e.length, String) : [], n = r.length, a = !!n; for (var o in e) !t && !L.call(e, o) || a && ("length" == o || ke(o, n)) || r.push(o); return r; } function de(e, t) { for (var r = e.length; r--;) if (Me(e[r][0], t)) return r; return -1; } ie.prototype.clear = function () { this.__data__ = Q ? Q(null) : {}; }, ie.prototype.delete = function (e) { return this.has(e) && delete this.__data__[e]; }, ie.prototype.get = function (e) { var t = this.__data__; if (Q) { var r = t[e]; return "__lodash_hash_undefined__" === r ? void 0 : r; } return L.call(t, e) ? t[e] : void 0; }, ie.prototype.has = function (e) { var t = this.__data__; return Q ? void 0 !== t[e] : L.call(t, e); }, ie.prototype.set = function (e, t) { return this.__data__[e] = Q && void 0 === t ? "__lodash_hash_undefined__" : t, this; }, ue.prototype.clear = function () { this.__data__ = []; }, ue.prototype.delete = function (e) { var t = this.__data__, r = de(t, e); return !(r < 0) && (r == t.length - 1 ? t.pop() : K.call(t, r, 1), !0); }, ue.prototype.get = function (e) { var t = this.__data__, r = de(t, e); return r < 0 ? void 0 : t[r][1]; }, ue.prototype.has = function (e) { return de(this.__data__, e) > -1; }, ue.prototype.set = function (e, t) { var r = this.__data__, n = de(r, e); return n < 0 ? r.push([e, t]) : r[n][1] = t, this; }, ce.prototype.clear = function () { this.__data__ = { hash: new ie(), map: new (H || ue)(), string: new ie() }; }, ce.prototype.delete = function (e) { return xe(this, e).delete(e); }, ce.prototype.get = function (e) { return xe(this, e).get(e); }, ce.prototype.has = function (e) { return xe(this, e).has(e); }, ce.prototype.set = function (e, t) { return xe(this, e).set(e, t), this; }, se.prototype.add = se.prototype.push = function (e) { return this.__data__.set(e, "__lodash_hash_undefined__"), this; }, se.prototype.has = function (e) { return this.__data__.has(e); }, le.prototype.clear = function () { this.__data__ = new ue(); }, le.prototype.delete = function (e) { return this.__data__.delete(e); }, le.prototype.get = function (e) { return this.__data__.get(e); }, le.prototype.has = function (e) { return this.__data__.has(e); }, le.prototype.set = function (e, t) { var r = this.__data__; if (r instanceof ue) { var n = r.__data__; if (!H || n.length < 199) return n.push([e, t]), this; r = this.__data__ = new ce(n); } return r.set(e, t), this; }; var pe, me = (pe = function (e, t) { return e && ye(e, t, qe); }, function (e, t) { if (null == e) return e; if (!ze(e)) return pe(e, t); for (var r = e.length, n = -1, a = Object(e); (++n < r) && !1 !== t(a[n], n, a);); return e; }), ye = function (e) { return function (t, r, n) { for (var a = -1, o = Object(t), i = n(t), u = i.length; u--;) { var c = i[e ? u : ++a]; if (!1 === r(o[c], c, o)) break; } return t; }; }(); function be(e, t) { for (var r = 0, n = (t = Ee(t, e) ? [t] : Se(t)).length; null != e && r < n;) e = e[De(t[r++])]; return r && r == n ? e : void 0; } function ge(e, t) { return null != e && t in Object(e); } function ve(e, t, r, u, c) { return e === t || (null == e || null == t || !$e(e) && !Ve(t) ? e != e && t != t : function (e, t, r, u, c, s) { var l = Le(e), f = Le(t), d = "[object Array]", p = "[object Array]"; l || (d = (d = Oe(e)) == n ? o : d); f || (p = (p = Oe(t)) == n ? o : p); var h = d == o && !N(e), m = p == o && !N(t), y = d == p; if (y && !h) return s || (s = new le()), l || Ue(e) ? je(e, t, r, u, c, s) : function (e, t, r, n, o, u, c) { switch (r) { case "[object DataView]": if (e.byteLength != t.byteLength || e.byteOffset != t.byteOffset) return !1; e = e.buffer, t = t.buffer; case "[object ArrayBuffer]": return !(e.byteLength != t.byteLength || !n(new $(e), new $(t))); case "[object Boolean]": case "[object Date]": case "[object Number]": return Me(+e, +t); case "[object Error]": return e.name == t.name && e.message == t.message; case "[object RegExp]": case "[object String]": return e == t + ""; case a: var s = O; case i: var l = 2 & u; if (s || (s = k), e.size != t.size && !l) return !1; var f = c.get(e); if (f) return f == t; u |= 1, c.set(e, t); var d = je(s(e), s(t), n, o, u, c); return c.delete(e), d; case "[object Symbol]": if (ae) return ae.call(e) == ae.call(t); } return !1; }(e, t, d, r, u, c, s); if (!(2 & c)) { var b = h && L.call(e, "__wrapped__"), g = m && L.call(t, "__wrapped__"); if (b || g) { var v = b ? e.value() : e, C = g ? t.value() : t; return s || (s = new le()), r(v, C, u, c, s); } } if (!y) return !1; return s || (s = new le()), function (e, t, r, n, a, o) { var i = 2 & a, u = qe(e), c = u.length, s = qe(t).length; if (c != s && !i) return !1; var l = c; for (; l--;) { var f = u[l]; if (!(i ? f in t : L.call(t, f))) return !1; } var d = o.get(e); if (d && o.get(t)) return d == t; var p = !0; o.set(e, t), o.set(t, e); var h = i; for (; ++l < c;) { f = u[l]; var m = e[f], y = t[f]; if (n) var b = i ? n(y, m, f, t, e, o) : n(m, y, f, e, t, o); if (!(void 0 === b ? m === y || r(m, y, n, a, o) : b)) { p = !1; break; } h || (h = "constructor" == f); } if (p && !h) { var g = e.constructor, v = t.constructor; g == v || !("constructor" in e) || !("constructor" in t) || "function" == typeof g && g instanceof g && "function" == typeof v && v instanceof v || (p = !1); } return o.delete(e), o.delete(t), p; }(e, t, r, u, c, s); }(e, t, ve, r, u, c)); } function Ce(e) { return !(!$e(e) || function (e) { return !!M && M in e; }(e)) && (Be(e) || N(e) ? B : d).test(Pe(e)); } function _e(e) { return "function" == typeof e ? e : null == e ? He : "object" == typeof e ? Le(e) ? function (e, t) { if (Ee(e) && Te(t)) return Ie(De(e), t); return function (r) { var n = function (e, t, r) { var n = null == e ? void 0 : be(e, t); return void 0 === n ? r : n; }(r, e); return void 0 === n && n === t ? function (e, t) { return null != e && function (e, t, r) { t = Ee(t, e) ? [t] : Se(t); var n, a = -1, o = t.length; for (; ++a < o;) { var i = De(t[a]); if (!(n = null != e && r(e, i))) break; e = e[i]; } if (n) return n; return !!(o = e ? e.length : 0) && Ge(o) && ke(i, o) && (Le(e) || Re(e)); }(e, t, ge); }(r, e) : ve(t, n, void 0, 3); }; }(e[0], e[1]) : function (e) { var t = function (e) { var t = qe(e), r = t.length; for (; r--;) { var n = t[r], a = e[n]; t[r] = [n, a, Te(a)]; } return t; }(e); if (1 == t.length && t[0][2]) return Ie(t[0][0], t[0][1]); return function (r) { return r === e || function (e, t, r, n) { var a = r.length, o = a, i = !n; if (null == e) return !o; for (e = Object(e); a--;) { var u = r[a]; if (i && u[2] ? u[1] !== e[u[0]] : !(u[0] in e)) return !1; } for (; ++a < o;) { var c = (u = r[a])[0], s = e[c], l = u[1]; if (i && u[2]) { if (void 0 === s && !(c in e)) return !1; } else { var f = new le(); if (n) var d = n(s, l, c, e, t, f); if (!(void 0 === d ? ve(l, s, n, 3, f) : d)) return !1; } } return !0; }(r, e, t); }; }(e) : Ee(t = e) ? (r = De(t), function (e) { return null == e ? void 0 : e[r]; }) : function (e) { return function (t) { return be(t, e); }; }(t); var t, r; } function we(e) { if (r = (t = e) && t.constructor, n = "function" == typeof r && r.prototype || P, t !== n) return U(e); var t, r, n, a = []; for (var o in Object(e)) L.call(e, o) && "constructor" != o && a.push(o); return a; } function Se(e) { return Le(e) ? e : Ae(e); } function je(e, t, r, n, a, o) { var i = 2 & a, u = e.length, c = t.length; if (u != c && !(i && c > u)) return !1; var s = o.get(e); if (s && o.get(t)) return s == t; var l = -1, f = !0, d = 1 & a ? new se() : void 0; for (o.set(e, t), o.set(t, e); ++l < u;) { var p = e[l], h = t[l]; if (n) var m = i ? n(h, p, l, t, e, o) : n(p, h, l, e, t, o); if (void 0 !== m) { if (m) continue; f = !1; break; } if (d) { if (!j(t, function (e, t) { if (!d.has(t) && (p === e || r(p, e, n, a, o))) return d.add(t); })) { f = !1; break; } } else if (p !== h && !r(p, h, n, a, o)) { f = !1; break; } } return o.delete(e), o.delete(t), f; } function xe(e, t) { var r, n, a = e.__data__; return ("string" == (n = typeof (r = t)) || "number" == n || "symbol" == n || "boolean" == n ? "__proto__" !== r : null === r) ? a["string" == typeof t ? "string" : "hash"] : a.map; } function Ne(e, t) { var r = function (e, t) { return null == e ? void 0 : e[t]; }(e, t); return Ce(r) ? r : void 0; } var Oe = function (e) { return z.call(e); }; function ke(e, t) { return !!(t = null == t ? 9007199254740991 : t) && ("number" == typeof e || p.test(e)) && e > -1 && e % 1 == 0 && e < t; } function Ee(e, t) { if (Le(e)) return !1; var r = typeof e; return !("number" != r && "symbol" != r && "boolean" != r && null != e && !Ke(e)) || c.test(e) || !u.test(e) || null != t && e in Object(t); } function Te(e) { return e == e && !$e(e); } function Ie(e, t) { return function (r) { return null != r && r[e] === t && (void 0 !== t || e in Object(r)); }; } (q && "[object DataView]" != Oe(new q(new ArrayBuffer(1))) || H && Oe(new H()) != a || W && "[object Promise]" != Oe(W.resolve()) || J && Oe(new J()) != i || Z && "[object WeakMap]" != Oe(new Z())) && (Oe = function (e) { var t = z.call(e), r = t == o ? e.constructor : void 0, n = r ? Pe(r) : void 0; if (n) switch (n) { case Y: return "[object DataView]"; case X: return a; case ee: return "[object Promise]"; case te: return i; case re: return "[object WeakMap]"; } return t; }); var Ae = Fe(function (e) { var t; e = null == (t = e) ? "" : function (e) { if ("string" == typeof e) return e; if (Ke(e)) return oe ? oe.call(e) : ""; var t = e + ""; return "0" == t && 1 / e == -1 / 0 ? "-0" : t; }(t); var r = []; return s.test(e) && r.push(""), e.replace(l, function (e, t, n, a) { r.push(n ? a.replace(f, "$1") : t || e); }), r; }); function De(e) { if ("string" == typeof e || Ke(e)) return e; var t = e + ""; return "0" == t && 1 / e == -1 / 0 ? "-0" : t; } function Pe(e) { if (null != e) { try { return R.call(e); } catch (e) {} try { return e + ""; } catch (e) {} } return ""; } function Fe(e, t) { if ("function" != typeof e || t && "function" != typeof t) throw new TypeError("Expected a function"); var r = function () { var n = arguments, a = t ? t.apply(this, n) : n[0], o = r.cache; if (o.has(a)) return o.get(a); var i = e.apply(this, n); return r.cache = o.set(a, i), i; }; return r.cache = new (Fe.Cache || ce)(), r; } function Me(e, t) { return e === t || e != e && t != t; } function Re(e) { return function (e) { return Ve(e) && ze(e); }(e) && L.call(e, "callee") && (!V.call(e, "callee") || z.call(e) == n); } Fe.Cache = ce; var Le = Array.isArray; function ze(e) { return null != e && Ge(e.length) && !Be(e); } function Be(e) { var t = $e(e) ? z.call(e) : ""; return "[object Function]" == t || "[object GeneratorFunction]" == t; } function Ge(e) { return "number" == typeof e && e > -1 && e % 1 == 0 && e <= 9007199254740991; } function $e(e) { var t = typeof e; return !!e && ("object" == t || "function" == t); } function Ve(e) { return !!e && "object" == typeof e; } function Ke(e) { return "symbol" == typeof e || Ve(e) && "[object Symbol]" == z.call(e); } var Ue = w ? function (e) { return function (t) { return e(t); }; }(w) : function (e) { return Ve(e) && Ge(e.length) && !!h[z.call(e)]; }; function qe(e) { return ze(e) ? fe(e) : we(e); } function He(e) { return e; } r.exports = function (e, t, r) { var n = Le(e) ? S : x, a = arguments.length < 3; return n(e, _e(t), r, a, me); }; }).call(this, r(3), r(7)(e)); }, function (e, t) { e.exports = function (e) { return e.webpackPolyfill || (e.deprecate = function () {}, e.paths = [], e.children || (e.children = []), Object.defineProperty(e, "loaded", { enumerable: !0, get: function () { return e.l; } }), Object.defineProperty(e, "id", { enumerable: !0, get: function () { return e.i; } }), e.webpackPolyfill = 1), e; }; }, function (e, t) { String.prototype.padEnd || (String.prototype.padEnd = function (e, t) { return e >>= 0, t = String(void 0 !== t ? t : " "), this.length > e ? String(this) : ((e -= this.length) > t.length && (t += t.repeat(e / t.length)), String(this) + t.slice(0, e)); }); }, function (e, t, r) { function n(e, t, r) { return t in e ? Object.defineProperty(e, t, { value: r, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = r, e; } function a(e) { if (Symbol.iterator in Object(e) || "[object Arguments]" === Object.prototype.toString.call(e)) return Array.from(e); } function o(e) { return function (e) { if (Array.isArray(e)) { for (var t = 0, r = new Array(e.length); t < e.length; t++) r[t] = e[t]; return r; } }(e) || a(e) || function () { throw new TypeError("Invalid attempt to spread non-iterable instance"); }(); } function i(e) { if (Array.isArray(e)) return e; } function u() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function c(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); } function s(e, t) { for (var r = 0; r < t.length; r++) { var n = t[r]; n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, n.key, n); } } function l(e) { return (l = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) { return typeof e; } : function (e) { return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; })(e); } function f(e) { return (f = "function" == typeof Symbol && "symbol" === l(Symbol.iterator) ? function (e) { return l(e); } : function (e) { return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : l(e); })(e); } function d(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } function p(e) { return (p = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) { return e.__proto__ || Object.getPrototypeOf(e); })(e); } function h(e, t) { return (h = Object.setPrototypeOf || function (e, t) { return e.__proto__ = t, e; })(e, t); } r.r(t); var m = r(0), y = r.n(m), b = r(5), g = r.n(b), v = r(4), C = r.n(v), _ = r(6), w = r.n(_), S = r(2), j = r.n(S), x = r(1), N = r.n(x); r(8); function O(e, t) { return i(e) || function (e, t) { var r = [], n = !0, a = !1, o = void 0; try { for (var i, u = e[Symbol.iterator](); !(n = (i = u.next()).done) && (r.push(i.value), !t || r.length !== t); n = !0); } catch (e) { a = !0, o = e; } finally { try { n || null == u.return || u.return(); } finally { if (a) throw o; } } return r; }(e, t) || u(); } var k = [["Afghanistan", ["asia"], "af", "93"], ["Albania", ["europe"], "al", "355"], ["Algeria", ["africa", "north-africa"], "dz", "213"], ["Andorra", ["europe"], "ad", "376"], ["Angola", ["africa"], "ao", "244"], ["Antigua and Barbuda", ["america", "carribean"], "ag", "1268"], ["Argentina", ["america", "south-america"], "ar", "54", "(..) ........", 0, ["11", "221", "223", "261", "264", "2652", "280", "2905", "291", "2920", "2966", "299", "341", "342", "343", "351", "376", "379", "381", "3833", "385", "387", "388"]], ["Armenia", ["asia", "ex-ussr"], "am", "374", ".. ......"], ["Aruba", ["america", "carribean"], "aw", "297"], ["Australia", ["oceania"], "au", "61", "(..) .... ....", 0, ["2", "3", "4", "7", "8", "02", "03", "04", "07", "08"]], ["Austria", ["europe", "eu-union"], "at", "43"], ["Azerbaijan", ["asia", "ex-ussr"], "az", "994", "(..) ... .. .."], ["Bahamas", ["america", "carribean"], "bs", "1242"], ["Bahrain", ["middle-east"], "bh", "973"], ["Bangladesh", ["asia"], "bd", "880"], ["Barbados", ["america", "carribean"], "bb", "1246"], ["Belarus", ["europe", "ex-ussr"], "by", "375", "(..) ... .. .."], ["Belgium", ["europe", "eu-union"], "be", "32", "... .. .. .."], ["Belize", ["america", "central-america"], "bz", "501"], ["Benin", ["africa"], "bj", "229"], ["Bhutan", ["asia"], "bt", "975"], ["Bolivia", ["america", "south-america"], "bo", "591"], ["Bosnia and Herzegovina", ["europe", "ex-yugos"], "ba", "387"], ["Botswana", ["africa"], "bw", "267"], ["Brazil", ["america", "south-america"], "br", "55", "(..) ........."], ["British Indian Ocean Territory", ["asia"], "io", "246"], ["Brunei", ["asia"], "bn", "673"], ["Bulgaria", ["europe", "eu-union"], "bg", "359"], ["Burkina Faso", ["africa"], "bf", "226"], ["Burundi", ["africa"], "bi", "257"], ["Cambodia", ["asia"], "kh", "855"], ["Cameroon", ["africa"], "cm", "237"], ["Canada", ["america", "north-america"], "ca", "1", "(...) ...-....", 1, ["204", "226", "236", "249", "250", "289", "306", "343", "365", "387", "403", "416", "418", "431", "437", "438", "450", "506", "514", "519", "548", "579", "581", "587", "604", "613", "639", "647", "672", "705", "709", "742", "778", "780", "782", "807", "819", "825", "867", "873", "902", "905"]], ["Cape Verde", ["africa"], "cv", "238"], ["Caribbean Netherlands", ["america", "carribean"], "bq", "599", "", 1], ["Central African Republic", ["africa"], "cf", "236"], ["Chad", ["africa"], "td", "235"], ["Chile", ["america", "south-america"], "cl", "56"], ["China", ["asia"], "cn", "86", "..-........."], ["Colombia", ["america", "south-america"], "co", "57", "... ... ...."], ["Comoros", ["africa"], "km", "269"], ["Congo", ["africa"], "cd", "243"], ["Congo", ["africa"], "cg", "242"], ["Costa Rica", ["america", "central-america"], "cr", "506", "....-...."], ["Côte d’Ivoire", ["africa"], "ci", "225", ".. .. .. .."], ["Croatia", ["europe", "eu-union", "ex-yugos"], "hr", "385"], ["Cuba", ["america", "carribean"], "cu", "53"], ["Curaçao", ["america", "carribean"], "cw", "599", "", 0], ["Cyprus", ["europe", "eu-union"], "cy", "357", ".. ......"], ["Czech Republic", ["europe", "eu-union"], "cz", "420", "... ... ..."], ["Denmark", ["europe", "eu-union", "baltic"], "dk", "45", ".. .. .. .."], ["Djibouti", ["africa"], "dj", "253"], ["Dominica", ["america", "carribean"], "dm", "1767"], ["Dominican Republic", ["america", "carribean"], "do", "1", "", 2, ["809", "829", "849"]], ["Ecuador", ["america", "south-america"], "ec", "593"], ["Egypt", ["africa", "north-africa"], "eg", "20"], ["El Salvador", ["america", "central-america"], "sv", "503", "....-...."], ["Equatorial Guinea", ["africa"], "gq", "240"], ["Eritrea", ["africa"], "er", "291"], ["Estonia", ["europe", "eu-union", "ex-ussr", "baltic"], "ee", "372", ".... ......"], ["Ethiopia", ["africa"], "et", "251"], ["Fiji", ["oceania"], "fj", "679"], ["Finland", ["europe", "eu-union", "baltic"], "fi", "358", ".. ... .. .."], ["France", ["europe", "eu-union"], "fr", "33", ". .. .. .. .."], ["French Guiana", ["america", "south-america"], "gf", "594"], ["French Polynesia", ["oceania"], "pf", "689"], ["Gabon", ["africa"], "ga", "241"], ["Gambia", ["africa"], "gm", "220"], ["Georgia", ["asia", "ex-ussr"], "ge", "995"], ["Germany", ["europe", "eu-union", "baltic"], "de", "49", ".... ........"], ["Ghana", ["africa"], "gh", "233"], ["Greece", ["europe", "eu-union"], "gr", "30"], ["Grenada", ["america", "carribean"], "gd", "1473"], ["Guadeloupe", ["america", "carribean"], "gp", "590", "", 0], ["Guam", ["oceania"], "gu", "1671"], ["Guatemala", ["america", "central-america"], "gt", "502", "....-...."], ["Guinea", ["africa"], "gn", "224"], ["Guinea-Bissau", ["africa"], "gw", "245"], ["Guyana", ["america", "south-america"], "gy", "592"], ["Haiti", ["america", "carribean"], "ht", "509", "....-...."], ["Honduras", ["america", "central-america"], "hn", "504"], ["Hong Kong", ["asia"], "hk", "852", ".... ...."], ["Hungary", ["europe", "eu-union"], "hu", "36"], ["Iceland", ["europe"], "is", "354", "... ...."], ["India", ["asia"], "in", "91", ".....-....."], ["Indonesia", ["asia"], "id", "62"], ["Iran", ["middle-east"], "ir", "98", "... ... ...."], ["Iraq", ["middle-east"], "iq", "964"], ["Ireland", ["europe", "eu-union"], "ie", "353", ".. ......."], ["Israel", ["middle-east"], "il", "972", "... ... ...."], ["Italy", ["europe", "eu-union"], "it", "39", "... .......", 0], ["Jamaica", ["america", "carribean"], "jm", "1876"], ["Japan", ["asia"], "jp", "81", ".. .... ...."], ["Jordan", ["middle-east"], "jo", "962"], ["Kazakhstan", ["asia", "ex-ussr"], "kz", "7", "... ...-..-..", 1, ["310", "311", "312", "313", "315", "318", "321", "324", "325", "326", "327", "336", "7172", "73622"]], ["Kenya", ["africa"], "ke", "254"], ["Kiribati", ["oceania"], "ki", "686"], ["Kosovo", ["europe", "ex-yugos"], "xk", "383"], ["Kuwait", ["middle-east"], "kw", "965"], ["Kyrgyzstan", ["asia", "ex-ussr"], "kg", "996", "... ... ..."], ["Laos", ["asia"], "la", "856"], ["Latvia", ["europe", "eu-union", "ex-ussr", "baltic"], "lv", "371", ".. ... ..."], ["Lebanon", ["middle-east"], "lb", "961"], ["Lesotho", ["africa"], "ls", "266"], ["Liberia", ["africa"], "lr", "231"], ["Libya", ["africa", "north-africa"], "ly", "218"], ["Liechtenstein", ["europe"], "li", "423"], ["Lithuania", ["europe", "eu-union", "ex-ussr", "baltic"], "lt", "370"], ["Luxembourg", ["europe", "eu-union"], "lu", "352"], ["Macau", ["asia"], "mo", "853"], ["Macedonia", ["europe", "ex-yugos"], "mk", "389"], ["Madagascar", ["africa"], "mg", "261"], ["Malawi", ["africa"], "mw", "265"], ["Malaysia", ["asia"], "my", "60", "..-....-...."], ["Maldives", ["asia"], "mv", "960"], ["Mali", ["africa"], "ml", "223"], ["Malta", ["europe", "eu-union"], "mt", "356"], ["Marshall Islands", ["oceania"], "mh", "692"], ["Martinique", ["america", "carribean"], "mq", "596"], ["Mauritania", ["africa"], "mr", "222"], ["Mauritius", ["africa"], "mu", "230"], ["Mexico", ["america", "central-america"], "mx", "52", "... ... ....", 0, ["55", "81", "33", "656", "664", "998", "774", "229"]], ["Micronesia", ["oceania"], "fm", "691"], ["Moldova", ["europe"], "md", "373", "(..) ..-..-.."], ["Monaco", ["europe"], "mc", "377"], ["Mongolia", ["asia"], "mn", "976"], ["Montenegro", ["europe", "ex-yugos"], "me", "382"], ["Morocco", ["africa", "north-africa"], "ma", "212"], ["Mozambique", ["africa"], "mz", "258"], ["Myanmar", ["asia"], "mm", "95"], ["Namibia", ["africa"], "na", "264"], ["Nauru", ["africa"], "nr", "674"], ["Nepal", ["asia"], "np", "977"], ["Netherlands", ["europe", "eu-union"], "nl", "31", ".. ........"], ["New Caledonia", ["oceania"], "nc", "687"], ["New Zealand", ["oceania"], "nz", "64", "...-...-...."], ["Nicaragua", ["america", "central-america"], "ni", "505"], ["Niger", ["africa"], "ne", "227"], ["Nigeria", ["africa"], "ng", "234"], ["North Korea", ["asia"], "kp", "850"], ["Norway", ["europe", "baltic"], "no", "47", "... .. ..."], ["Oman", ["middle-east"], "om", "968"], ["Pakistan", ["asia"], "pk", "92", "...-......."], ["Palau", ["oceania"], "pw", "680"], ["Palestine", ["middle-east"], "ps", "970"], ["Panama", ["america", "central-america"], "pa", "507"], ["Papua New Guinea", ["oceania"], "pg", "675"], ["Paraguay", ["america", "south-america"], "py", "595"], ["Peru", ["america", "south-america"], "pe", "51"], ["Philippines", ["asia"], "ph", "63", ".... ......."], ["Poland", ["europe", "eu-union", "baltic"], "pl", "48", "...-...-..."], ["Portugal", ["europe", "eu-union"], "pt", "351"], ["Puerto Rico", ["america", "carribean"], "pr", "1", "", 3, ["787", "939"]], ["Qatar", ["middle-east"], "qa", "974"], ["Réunion", ["africa"], "re", "262"], ["Romania", ["europe", "eu-union"], "ro", "40"], ["Russia", ["europe", "asia", "ex-ussr", "baltic"], "ru", "7", "(...) ...-..-..", 0], ["Rwanda", ["africa"], "rw", "250"], ["Saint Kitts and Nevis", ["america", "carribean"], "kn", "1869"], ["Saint Lucia", ["america", "carribean"], "lc", "1758"], ["Saint Vincent and the Grenadines", ["america", "carribean"], "vc", "1784"], ["Samoa", ["oceania"], "ws", "685"], ["San Marino", ["europe"], "sm", "378"], ["São Tomé and Príncipe", ["africa"], "st", "239"], ["Saudi Arabia", ["middle-east"], "sa", "966"], ["Senegal", ["africa"], "sn", "221"], ["Serbia", ["europe", "ex-yugos"], "rs", "381"], ["Seychelles", ["africa"], "sc", "248"], ["Sierra Leone", ["africa"], "sl", "232"], ["Singapore", ["asia"], "sg", "65", "....-...."], ["Slovakia", ["europe", "eu-union"], "sk", "421"], ["Slovenia", ["europe", "eu-union", "ex-yugos"], "si", "386"], ["Solomon Islands", ["oceania"], "sb", "677"], ["Somalia", ["africa"], "so", "252"], ["South Africa", ["africa"], "za", "27"], ["South Korea", ["asia"], "kr", "82", "... .... ...."], ["South Sudan", ["africa", "north-africa"], "ss", "211"], ["Spain", ["europe", "eu-union"], "es", "34", "... ... ..."], ["Sri Lanka", ["asia"], "lk", "94"], ["Sudan", ["africa"], "sd", "249"], ["Suriname", ["america", "south-america"], "sr", "597"], ["Swaziland", ["africa"], "sz", "268"], ["Sweden", ["europe", "eu-union", "baltic"], "se", "46", "(...) ...-..."], ["Switzerland", ["europe"], "ch", "41", ".. ... .. .."], ["Syria", ["middle-east"], "sy", "963"], ["Taiwan", ["asia"], "tw", "886"], ["Tajikistan", ["asia", "ex-ussr"], "tj", "992"], ["Tanzania", ["africa"], "tz", "255"], ["Thailand", ["asia"], "th", "66"], ["Timor-Leste", ["asia"], "tl", "670"], ["Togo", ["africa"], "tg", "228"], ["Tonga", ["oceania"], "to", "676"], ["Trinidad and Tobago", ["america", "carribean"], "tt", "1868"], ["Tunisia", ["africa", "north-africa"], "tn", "216"], ["Turkey", ["europe"], "tr", "90", "... ... .. .."], ["Turkmenistan", ["asia", "ex-ussr"], "tm", "993"], ["Tuvalu", ["asia"], "tv", "688"], ["Uganda", ["africa"], "ug", "256"], ["Ukraine", ["europe", "ex-ussr"], "ua", "380", "(..) ... .. .."], ["United Arab Emirates", ["middle-east"], "ae", "971"], ["United Kingdom", ["europe", "eu-union"], "gb", "44", ".... ......"], ["United States", ["america", "north-america"], "us", "1", "(...) ...-....", 0, ["907", "205", "251", "256", "334", "479", "501", "870", "480", "520", "602", "623", "928", "209", "213", "310", "323", "408", "415", "510", "530", "559", "562", "619", "626", "650", "661", "707", "714", "760", "805", "818", "831", "858", "909", "916", "925", "949", "951", "303", "719", "970", "203", "860", "202", "302", "239", "305", "321", "352", "386", "407", "561", "727", "772", "813", "850", "863", "904", "941", "954", "229", "404", "478", "706", "770", "912", "808", "319", "515", "563", "641", "712", "208", "217", "309", "312", "618", "630", "708", "773", "815", "847", "219", "260", "317", "574", "765", "812", "316", "620", "785", "913", "270", "502", "606", "859", "225", "318", "337", "504", "985", "413", "508", "617", "781", "978", "301", "410", "207", "231", "248", "269", "313", "517", "586", "616", "734", "810", "906", "989", "218", "320", "507", "612", "651", "763", "952", "314", "417", "573", "636", "660", "816", "228", "601", "662", "406", "252", "336", "704", "828", "910", "919", "701", "308", "402", "603", "201", "609", "732", "856", "908", "973", "505", "575", "702", "775", "212", "315", "516", "518", "585", "607", "631", "716", "718", "845", "914", "216", "330", "419", "440", "513", "614", "740", "937", "405", "580", "918", "503", "541", "215", "412", "570", "610", "717", "724", "814", "401", "803", "843", "864", "605", "423", "615", "731", "865", "901", "931", "210", "214", "254", "281", "325", "361", "409", "432", "512", "713", "806", "817", "830", "903", "915", "936", "940", "956", "972", "979", "435", "801", "276", "434", "540", "703", "757", "804", "802", "206", "253", "360", "425", "509", "262", "414", "608", "715", "920", "304", "307"]], ["Uruguay", ["america", "south-america"], "uy", "598"], ["Uzbekistan", ["asia", "ex-ussr"], "uz", "998", ".. ... .. .."], ["Vanuatu", ["oceania"], "vu", "678"], ["Vatican City", ["europe"], "va", "39", ".. .... ....", 1], ["Venezuela", ["america", "south-america"], "ve", "58"], ["Vietnam", ["asia"], "vn", "84"], ["Yemen", ["middle-east"], "ye", "967"], ["Zambia", ["africa"], "zm", "260"], ["Zimbabwe", ["africa"], "zw", "263"]], E = [["American Samoa", ["oceania"], "as", "1684"], ["Anguilla", ["america", "carribean"], "ai", "1264"], ["Bermuda", ["america", "north-america"], "bm", "1441"], ["British Virgin Islands", ["america", "carribean"], "vg", "1284"], ["Cayman Islands", ["america", "carribean"], "ky", "1345"], ["Cook Islands", ["oceania"], "ck", "682"], ["Falkland Islands", ["america", "south-america"], "fk", "500"], ["Faroe Islands", ["europe"], "fo", "298"], ["Gibraltar", ["europe"], "gi", "350"], ["Greenland", ["america"], "gl", "299"], ["Jersey", ["europe", "eu-union"], "je", "44", ".... ......"], ["Montserrat", ["america", "carribean"], "ms", "1664"], ["Niue", ["asia"], "nu", "683"], ["Norfolk Island", ["oceania"], "nf", "672"], ["Northern Mariana Islands", ["oceania"], "mp", "1670"], ["Saint Barthélemy", ["america", "carribean"], "bl", "590", "", 1], ["Saint Helena", ["africa"], "sh", "290"], ["Saint Martin", ["america", "carribean"], "mf", "590", "", 2], ["Saint Pierre and Miquelon", ["america", "north-america"], "pm", "508"], ["Sint Maarten", ["america", "carribean"], "sx", "1721"], ["Tokelau", ["oceania"], "tk", "690"], ["Turks and Caicos Islands", ["america", "carribean"], "tc", "1649"], ["U.S. Virgin Islands", ["america", "carribean"], "vi", "1340"], ["Wallis and Futuna", ["oceania"], "wf", "681"]]; function T(e, t, r, n, a) { return !r || a ? e + "".padEnd(t.length, ".") + " " + n : e + "".padEnd(t.length, ".") + " " + r; } function I(e, t, r, a, i) { var u, c, s = []; return c = !0 === t, [(u = []).concat.apply(u, o(e.map(function (e) { var o = { name: e[0], regions: e[1], iso2: e[2], countryCode: e[3], dialCode: e[3], format: T(r, e[3], e[4], a, i), priority: e[5] || 0 }, u = []; return e[6] && e[6].map(function (t) { var r = function (e) { for (var t = 1; t < arguments.length; t++) { var r = null != arguments[t] ? arguments[t] : {}, a = Object.keys(r); "function" == typeof Object.getOwnPropertySymbols && (a = a.concat(Object.getOwnPropertySymbols(r).filter(function (e) { return Object.getOwnPropertyDescriptor(r, e).enumerable; }))), a.forEach(function (t) { n(e, t, r[t]); }); } return e; }({}, o); r.dialCode = e[3] + t, r.isAreaCode = !0, r.areaCodeLength = t.length, u.push(r); }), u.length > 0 ? (o.mainCode = !0, c || "Array" === t.constructor.name && t.includes(e[2]) ? (o.hasAreaCodes = !0, [o].concat(u)) : (s = s.concat(u), [o])) : [o]; }))), s]; } function A(e, t, r, n) { if (null !== r) { var a = Object.keys(r), o = Object.values(r); a.forEach(function (r, a) { if (n) return e.push([r, o[a]]); var i = e.findIndex(function (e) { return e[0] === r; }); if (-1 === i) { var u = [r]; u[t] = o[a], e.push(u); } else e[i][t] = o[a]; }); } } function D(e, t) { return 0 === t.length ? e : e.map(function (e) { var r = t.findIndex(function (t) { return t[0] === e[2]; }); if (-1 === r) return e; var n = t[r]; return n[1] && (e[4] = n[1]), n[3] && (e[5] = n[3]), n[2] && (e[6] = n[2]), e; }); } var P = function e(t, r, n, a, i, u, s, l, f, d, p, h, m, y) { c(this, e), this.filterRegions = function (e, t) { if ("string" == typeof e) { var r = e; return t.filter(function (e) { return e.regions.some(function (e) { return e === r; }); }); } return t.filter(function (t) { return e.map(function (e) { return t.regions.some(function (t) { return t === e; }); }).some(function (e) { return e; }); }); }, this.sortTerritories = function (e, t) { var r = [].concat(o(e), o(t)); return r.sort(function (e, t) { return e.name < t.name ? -1 : e.name > t.name ? 1 : 0; }), r; }, this.getFilteredCountryList = function (e, t, r) { return 0 === e.length ? t : r ? e.map(function (e) { var r = t.find(function (t) { return t.iso2 === e; }); if (r) return r; }).filter(function (e) { return e; }) : t.filter(function (t) { return e.some(function (e) { return e === t.iso2; }); }); }, this.localizeCountries = function (e, t, r) { for (var n = 0; n < e.length; n++) void 0 !== t[e[n].iso2] ? e[n].localName = t[e[n].iso2] : void 0 !== t[e[n].name] && (e[n].localName = t[e[n].name]); return r || e.sort(function (e, t) { return e.localName < t.localName ? -1 : e.localName > t.localName ? 1 : 0; }), e; }, this.getCustomAreas = function (e, t) { for (var r = [], n = 0; n < t.length; n++) { var a = JSON.parse(JSON.stringify(e)); a.dialCode += t[n], r.push(a); } return r; }, this.excludeCountries = function (e, t) { return 0 === t.length ? e : e.filter(function (e) { return !t.includes(e.iso2); }); }; var b = function (e, t, r) { var n = []; return A(n, 1, e, !0), A(n, 3, t), A(n, 2, r), n; }(l, f, d), g = D(JSON.parse(JSON.stringify(k)), b), v = D(JSON.parse(JSON.stringify(E)), b), C = O(I(g, t, h, m, y), 2), _ = C[0], w = C[1]; if (r) { var S = O(I(v, t, h, m, y), 2), j = S[0]; S[1]; _ = this.sortTerritories(j, _); } n && (_ = this.filterRegions(n, _)), this.onlyCountries = this.localizeCountries(this.excludeCountries(this.getFilteredCountryList(a, _, s.includes("onlyCountries")), u), p, s.includes("onlyCountries")), this.preferredCountries = 0 === i.length ? [] : this.localizeCountries(this.getFilteredCountryList(i, _, s.includes("preferredCountries")), p, s.includes("preferredCountries")), this.hiddenAreaCodes = this.excludeCountries(this.getFilteredCountryList(a, w), u); }, F = function (e) { function t(e) { var r; c(this, t), (r = function (e, t) { return !t || "object" !== f(t) && "function" != typeof t ? d(e) : t; }(this, p(t).call(this, e))).getProbableCandidate = C()(function (e) { return e && 0 !== e.length ? r.state.onlyCountries.filter(function (t) { return j()(t.name.toLowerCase(), e.toLowerCase()); }, d(d(r)))[0] : null; }), r.guessSelectedCountry = C()(function (e, t, n, a) { var o; if (!1 === r.props.enableAreaCodes && (a.some(function (t) { if (j()(e, t.dialCode)) return n.some(function (e) { if (t.iso2 === e.iso2 && e.mainCode) return o = e, !0; }), !0; }), o)) return o; var i = n.find(function (e) { return e.iso2 == t; }); if ("" === e.trim()) return i; var u = n.reduce(function (t, r) { if (j()(e, r.dialCode)) { if (r.dialCode.length > t.dialCode.length) return r; if (r.dialCode.length === t.dialCode.length && r.priority < t.priority) return r; } return t; }, { dialCode: "", priority: 10001 }, d(d(r))); return u.name ? u : i; }), r.updateCountry = function (e) { var t, n = r.state.onlyCountries; (t = e.indexOf(0) >= "0" && e.indexOf(0) <= "9" ? n.find(function (t) { return t.dialCode == +e; }) : n.find(function (t) { return t.iso2 == e; })) && t.dialCode && r.setState({ selectedCountry: t, formattedNumber: r.props.disableCountryCode ? "" : r.formatNumber(t.dialCode, t) }); }, r.scrollTo = function (e, t) { if (e) { var n = r.dropdownRef; if (n && document.body) { var a = n.offsetHeight, o = n.getBoundingClientRect().top + document.body.scrollTop, i = o + a, u = e, c = u.getBoundingClientRect(), s = u.offsetHeight, l = c.top + document.body.scrollTop, f = l + s, d = l - o + n.scrollTop, p = a / 2 - s / 2; if (r.props.enableSearch ? l < o + 32 : l < o) t && (d -= p), n.scrollTop = d;else if (f > i) { t && (d += p); var h = a - s; n.scrollTop = d - h; } } } }, r.scrollToTop = function () { var e = r.dropdownRef; e && document.body && (e.scrollTop = 0); }, r.formatNumber = function (e, t) { if (!t) return e; var n, o = t.format, c = r.props, s = c.disableCountryCode, l = c.enableAreaCodeStretch, f = c.enableLongNumbers, d = c.autoFormat; if (s ? ((n = o.split(" ")).shift(), n = n.join(" ")) : l && t.isAreaCode ? ((n = o.split(" "))[1] = n[1].replace(/\.+/, "".padEnd(t.areaCodeLength, ".")), n = n.join(" ")) : n = o, !e || 0 === e.length) return s ? "" : r.props.prefix; if (e && e.length < 2 || !n || !d) return s ? e : r.props.prefix + e; var p, h = w()(n, function (e, t) { if (0 === e.remainingText.length) return e; if ("." !== t) return { formattedText: e.formattedText + t, remainingText: e.remainingText }; var r, n = i(r = e.remainingText) || a(r) || u(), o = n[0], c = n.slice(1); return { formattedText: e.formattedText + o, remainingText: c }; }, { formattedText: "", remainingText: e.split("") }); return (p = f ? h.formattedText + h.remainingText.join("") : h.formattedText).includes("(") && !p.includes(")") && (p += ")"), p; }, r.cursorToEnd = function () { var e = r.numberInputRef; if (document.activeElement === e) { e.focus(); var t = e.value.length; ")" === e.value.charAt(t - 1) && (t -= 1), e.setSelectionRange(t, t); } }, r.getElement = function (e) { return r["flag_no_".concat(e)]; }, r.getCountryData = function () { return r.state.selectedCountry ? { name: r.state.selectedCountry.name || "", dialCode: r.state.selectedCountry.dialCode || "", countryCode: r.state.selectedCountry.iso2 || "", format: r.state.selectedCountry.format || "" } : {}; }, r.handleFlagDropdownClick = function (e) { if (e.preventDefault(), r.state.showDropdown || !r.props.disabled) { var t = r.state, n = t.preferredCountries, a = t.onlyCountries, o = t.selectedCountry, i = r.concatPreferredCountries(n, a).findIndex(function (e) { return e.dialCode === o.dialCode && e.iso2 === o.iso2; }); r.setState({ showDropdown: !r.state.showDropdown, highlightCountryIndex: i }, function () { r.state.showDropdown && r.scrollTo(r.getElement(r.state.highlightCountryIndex)); }); } }, r.handleInput = function (e) { var t = e.target.value, n = r.props, a = n.prefix, o = n.onChange, i = r.props.disableCountryCode ? "" : a, u = r.state.selectedCountry, c = r.state.freezeSelection; if (!r.props.countryCodeEditable) { var s = a + (u.hasAreaCodes ? r.state.onlyCountries.find(function (e) { return e.iso2 === u.iso2 && e.mainCode; }).dialCode : u.dialCode); if (t.slice(0, s.length) !== s) return; } if (t === a) return o && o("", r.getCountryData(), e, ""), r.setState({ formattedNumber: "" }); if (t.replace(/\D/g, "").length > 15) { if (!1 === r.props.enableLongNumbers) return; if ("number" == typeof r.props.enableLongNumbers && t.replace(/\D/g, "").length > r.props.enableLongNumbers) return; } if (t !== r.state.formattedNumber) { e.preventDefault ? e.preventDefault() : e.returnValue = !1; var l = r.props.country, f = r.state, d = f.onlyCountries, p = f.selectedCountry, h = f.hiddenAreaCodes; if (o && e.persist(), t.length > 0) { var m = t.replace(/\D/g, ""); (!r.state.freezeSelection || p && p.dialCode.length > m.length) && (u = r.props.disableCountryGuess ? p : r.guessSelectedCountry(m.substring(0, 6), l, d, h) || p, c = !1), i = r.formatNumber(m, u), u = u.dialCode ? u : p; } var y = e.target.selectionStart, b = e.target.selectionStart, g = r.state.formattedNumber, v = i.length - g.length; r.setState({ formattedNumber: i, freezeSelection: c, selectedCountry: u }, function () { v > 0 && (b -= v), ")" == i.charAt(i.length - 1) ? r.numberInputRef.setSelectionRange(i.length - 1, i.length - 1) : b > 0 && g.length >= i.length ? r.numberInputRef.setSelectionRange(b, b) : y < g.length && r.numberInputRef.setSelectionRange(y, y), o && o(i.replace(/[^0-9]+/g, ""), r.getCountryData(), e, i); }); } }, r.handleInputClick = function (e) { r.setState({ showDropdown: !1 }), r.props.onClick && r.props.onClick(e, r.getCountryData()); }, r.handleDoubleClick = function (e) { var t = e.target.value.length; e.target.setSelectionRange(0, t); }, r.handleFlagItemClick = function (e, t) { var n = r.state.selectedCountry, a = r.state.onlyCountries.find(function (t) { return t == e; }); if (a) { var o = r.state.formattedNumber.replace(" ", "").replace("(", "").replace(")", "").replace("-", ""), i = o.length > 1 ? o.replace(n.dialCode, a.dialCode) : a.dialCode, u = r.formatNumber(i.replace(/\D/g, ""), a); r.setState({ showDropdown: !1, selectedCountry: a, freezeSelection: !0, formattedNumber: u, searchValue: "" }, function () { r.cursorToEnd(), r.props.onChange && r.props.onChange(u.replace(/[^0-9]+/g, ""), r.getCountryData(), t, u); }); } }, r.handleInputFocus = function (e) { r.numberInputRef && r.numberInputRef.value === r.props.prefix && r.state.selectedCountry && !r.props.disableCountryCode && r.setState({ formattedNumber: r.props.prefix + r.state.selectedCountry.dialCode }, function () { r.props.jumpCursorToEnd && setTimeout(r.cursorToEnd, 0); }), r.setState({ placeholder: "" }), r.props.onFocus && r.props.onFocus(e, r.getCountryData()), r.props.jumpCursorToEnd && setTimeout(r.cursorToEnd, 0); }, r.handleInputBlur = function (e) { e.target.value || r.setState({ placeholder: r.props.placeholder }), r.props.onBlur && r.props.onBlur(e, r.getCountryData()); }, r.handleInputCopy = function (e) { if (r.props.copyNumbersOnly) { var t = window.getSelection().toString().replace(/[^0-9]+/g, ""); e.clipboardData.setData("text/plain", t), e.preventDefault(); } }, r.getHighlightCountryIndex = function (e) { var t = r.state.highlightCountryIndex + e; return t < 0 || t >= r.state.onlyCountries.length + r.state.preferredCountries.length ? t - e : r.props.enableSearch && t > r.getSearchFilteredCountries().length ? 0 : t; }, r.searchCountry = function () { var e = r.getProbableCandidate(r.state.queryString) || r.state.onlyCountries[0], t = r.state.onlyCountries.findIndex(function (t) { return t == e; }) + r.state.preferredCountries.length; r.scrollTo(r.getElement(t), !0), r.setState({ queryString: "", highlightCountryIndex: t }); }, r.handleKeydown = function (e) { var t = r.props.keys, n = e.target.className; if (n.includes("selected-flag") && e.which === t.ENTER && !r.state.showDropdown) return r.handleFlagDropdownClick(e); if (n.includes("form-control") && (e.which === t.ENTER || e.which === t.ESC)) return e.target.blur(); if (r.state.showDropdown && !r.props.disabled && (!n.includes("search-box") || e.which === t.UP || e.which === t.DOWN || e.which === t.ENTER || e.which === t.ESC && "" === e.target.value)) { e.preventDefault ? e.preventDefault() : e.returnValue = !1; var a = function (e) { r.setState({ highlightCountryIndex: r.getHighlightCountryIndex(e) }, function () { r.scrollTo(r.getElement(r.state.highlightCountryIndex), !0); }); }; switch (e.which) { case t.DOWN: a(1); break; case t.UP: a(-1); break; case t.ENTER: r.props.enableSearch ? r.handleFlagItemClick(r.getSearchFilteredCountries()[r.state.highlightCountryIndex] || r.getSearchFilteredCountries()[0], e) : r.handleFlagItemClick([].concat(o(r.state.preferredCountries), o(r.state.onlyCountries))[r.state.highlightCountryIndex], e); break; case t.ESC: case t.TAB: r.setState({ showDropdown: !1 }, r.cursorToEnd); break; default: (e.which >= t.A && e.which <= t.Z || e.which === t.SPACE) && r.setState({ queryString: r.state.queryString + String.fromCharCode(e.which) }, r.state.debouncedQueryStingSearcher); } } }, r.handleInputKeyDown = function (e) { var t = r.props, n = t.keys, a = t.onEnterKeyPress, o = t.onKeyDown; e.which === n.ENTER && a && a(e), o && o(e); }, r.handleClickOutside = function (e) { r.dropdownRef && !r.dropdownContainerRef.contains(e.target) && r.state.showDropdown && r.setState({ showDropdown: !1 }); }, r.handleSearchChange = function (e) { var t = e.currentTarget.value, n = r.state, a = n.preferredCountries, o = n.selectedCountry, i = 0; if ("" === t && o) { var u = r.state.onlyCountries; i = r.concatPreferredCountries(a, u).findIndex(function (e) { return e == o; }), setTimeout(function () { return r.scrollTo(r.getElement(i)); }, 100); } r.setState({ searchValue: t, highlightCountryIndex: i }); }, r.concatPreferredCountries = function (e, t) { return e.length > 0 ? o(new Set(e.concat(t))) : t; }, r.getDropdownCountryName = function (e) { return e.localName || e.name; }, r.getSearchFilteredCountries = function () { var e = r.state, t = e.preferredCountries, n = e.onlyCountries, a = e.searchValue, i = r.props.enableSearch, u = r.concatPreferredCountries(t, n), c = a.trim().toLowerCase().replace("+", ""); if (i && c) { if (/^\d+$/.test(c)) return u.filter(function (e) { var t = e.dialCode; return ["".concat(t)].some(function (e) { return e.toLowerCase().includes(c); }); }); var s = u.filter(function (e) { var t = e.iso2; return ["".concat(t)].some(function (e) { return e.toLowerCase().includes(c); }); }), l = u.filter(function (e) { var t = e.name, r = e.localName; e.iso2; return ["".concat(t), "".concat(r || "")].some(function (e) { return e.toLowerCase().includes(c); }); }); return r.scrollToTop(), o(new Set([].concat(s, l))); } return u; }, r.getCountryDropdownList = function () { var e = r.state, t = e.preferredCountries, a = e.highlightCountryIndex, o = e.showDropdown, i = e.searchValue, u = r.props, c = u.disableDropdown, s = u.prefix, l = r.props, f = l.enableSearch, d = l.searchNotFound, p = l.disableSearchIcon, h = l.searchClass, m = l.searchStyle, b = l.searchPlaceholder, g = l.autocompleteSearch, v = r.getSearchFilteredCountries().map(function (e, t) { var n = a === t, o = N()({ country: !0, preferred: "us" === e.iso2 || "gb" === e.iso2, active: "us" === e.iso2, highlight: n }), i = "flag ".concat(e.iso2); return y.a.createElement("li", Object.assign({ ref: function (e) { return r["flag_no_".concat(t)] = e; }, key: "flag_no_".concat(t), "data-flag-key": "flag_no_".concat(t), className: o, "data-dial-code": "1", tabIndex: c ? "-1" : "0", "data-country-code": e.iso2, onClick: function (t) { return r.handleFlagItemClick(e, t); }, role: "option" }, n ? { "aria-selected": !0 } : {}), y.a.createElement("div", { className: i }), y.a.createElement("span", { className: "country-name" }, r.getDropdownCountryName(e)), y.a.createElement("span", { className: "dial-code" }, e.format ? r.formatNumber(e.dialCode, e) : s + e.dialCode)); }), C = y.a.createElement("li", { key: "dashes", className: "divider" }); t.length > 0 && (!f || f && !i.trim()) && v.splice(t.length, 0, C); var _ = N()(n({ "country-list": !0, hide: !o }, r.props.dropdownClass, !0)); return y.a.createElement("ul", { ref: function (e) { return !f && e && e.focus(), r.dropdownRef = e; }, className: _, style: r.props.dropdownStyle, role: "listbox", tabIndex: "0" }, f && y.a.createElement("li", { className: N()(n({ search: !0 }, h, h)) }, !p && y.a.createElement("span", { className: N()(n({ "search-emoji": !0 }, "".concat(h, "-emoji"), h)), role: "img", "aria-label": "Magnifying glass" }, "🔎"), y.a.createElement("input", { className: N()(n({ "search-box": !0 }, "".concat(h, "-box"), h)), style: m, type: "search", placeholder: b, autoFocus: !0, autoComplete: g ? "on" : "off", value: i, onChange: r.handleSearchChange })), v.length > 0 ? v : y.a.createElement("li", { className: "no-entries-message" }, y.a.createElement("span", null, d))); }; var s, l = new P(e.enableAreaCodes, e.enableTerritories, e.regions, e.onlyCountries, e.preferredCountries, e.excludeCountries, e.preserveOrder, e.masks, e.priority, e.areaCodes, e.localization, e.prefix, e.defaultMask, e.alwaysDefaultMask), h = l.onlyCountries, m = l.preferredCountries, b = l.hiddenAreaCodes, v = e.value ? e.value.replace(/\D/g, "") : ""; s = e.disableInitialCountryGuess ? 0 : v.length > 1 ? r.guessSelectedCountry(v.substring(0, 6), e.country, h, b) || 0 : e.country && h.find(function (t) { return t.iso2 == e.country; }) || 0; var _, S = v.length < 2 && s && !j()(v, s.dialCode) ? s.dialCode : ""; _ = "" === v && 0 === s ? "" : r.formatNumber((e.disableCountryCode ? "" : S) + v, s.name ? s : void 0); var x = h.findIndex(function (e) { return e == s; }); return r.state = { showDropdown: e.showDropdown, formattedNumber: _, onlyCountries: h, preferredCountries: m, hiddenAreaCodes: b, selectedCountry: s, highlightCountryIndex: x, queryString: "", freezeSelection: !1, debouncedQueryStingSearcher: g()(r.searchCountry, 250), searchValue: "" }, r; } var r, l; return function (e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, writable: !0, configurable: !0 } }), t && h(e, t); }(t, e), r = t, (l = [{ key: "componentDidMount", value: function () { document.addEventListener && this.props.enableClickOutside && document.addEventListener("mousedown", this.handleClickOutside), this.props.onMount && this.props.onMount(this.state.formattedNumber.replace(/[^0-9]+/g, ""), this.getCountryData(), this.state.formattedNumber); } }, { key: "componentWillUnmount", value: function () { document.removeEventListener && this.props.enableClickOutside && document.removeEventListener("mousedown", this.handleClickOutside); } }, { key: "componentDidUpdate", value: function (e, t, r) { e.country !== this.props.country ? this.updateCountry(this.props.country) : e.value !== this.props.value && this.updateFormattedNumber(this.props.value); } }, { key: "updateFormattedNumber", value: function (e) { if (null === e) return this.setState({ selectedCountry: 0, formattedNumber: "" }); var t = this.state, r = t.onlyCountries, n = t.selectedCountry, a = t.hiddenAreaCodes, o = this.props, i = o.country, u = o.prefix; if ("" === e) return this.setState({ selectedCountry: n, formattedNumber: "" }); var c, s, l = e.replace(/\D/g, ""); if (n && j()(e, u + n.dialCode)) s = this.formatNumber(l, n), this.setState({ formattedNumber: s });else { var f = (c = this.props.disableCountryGuess ? n : this.guessSelectedCountry(l.substring(0, 6), i, r, a) || n) && j()(l, u + c.dialCode) ? c.dialCode : ""; s = this.formatNumber((this.props.disableCountryCode ? "" : f) + l, c || void 0), this.setState({ selectedCountry: c, formattedNumber: s }); } } }, { key: "render", value: function () { var e, t, r, a = this, o = this.state, i = o.onlyCountries, u = o.selectedCountry, c = o.showDropdown, s = o.formattedNumber, l = o.hiddenAreaCodes, f = this.props, d = f.disableDropdown, p = f.renderStringAsFlag, h = f.isValid, m = f.defaultErrorMessage, b = f.specialLabel; if ("boolean" == typeof h) t = h;else { var g = h(s.replace(/\D/g, ""), u, i, l); "boolean" == typeof g ? !1 === (t = g) && (r = m) : (t = !1, r = g); } var v = N()((n(e = {}, this.props.containerClass, !0), n(e, "react-tel-input", !0), e)), C = N()({ arrow: !0, up: c }), _ = N()(n({ "form-control": !0, "invalid-number": !t, open: c }, this.props.inputClass, !0)), w = N()({ "selected-flag": !0, open: c }), S = N()(n({ "flag-dropdown": !0, "invalid-number": !t, open: c }, this.props.buttonClass, !0)), j = "flag ".concat(u && u.iso2); return y.a.createElement("div", { className: "".concat(v, " ").concat(this.props.className), style: this.props.style || this.props.containerStyle, onKeyDown: this.handleKeydown }, b && y.a.createElement("div", { className: "special-label" }, b), r && y.a.createElement("div", { className: "invalid-number-message" }, r), y.a.createElement("input", Object.assign({ className: _, style: this.props.inputStyle, onChange: this.handleInput, onClick: this.handleInputClick, onDoubleClick: this.handleDoubleClick, onFocus: this.handleInputFocus, onBlur: this.handleInputBlur, onCopy: this.handleInputCopy, value: s, onKeyDown: this.handleInputKeyDown, placeholder: this.props.placeholder, disabled: this.props.disabled, type: "tel" }, this.props.inputProps, { ref: function (e) { a.numberInputRef = e, "function" == typeof a.props.inputProps.ref ? a.props.inputProps.ref(e) : "object" == typeof a.props.inputProps.ref && (a.props.inputProps.ref.current = e); } })), y.a.createElement("div", { className: S, style: this.props.buttonStyle, ref: function (e) { return a.dropdownContainerRef = e; } }, p ? y.a.createElement("div", { className: w }, p) : y.a.createElement("div", { onClick: d ? void 0 : this.handleFlagDropdownClick, className: w, title: u ? "".concat(u.localName || u.name, ": + ").concat(u.dialCode) : "", tabIndex: d ? "-1" : "0", role: "button", "aria-haspopup": "listbox", "aria-expanded": !!c || void 0 }, y.a.createElement("div", { className: j }, !d && y.a.createElement("div", { className: C }))), c && this.getCountryDropdownList())); } }]) && s(r.prototype, l), t; }(y.a.Component); F.defaultProps = { country: "", value: "", onlyCountries: [], preferredCountries: [], excludeCountries: [], placeholder: "1 (702) 123-4567", searchPlaceholder: "search", searchNotFound: "No entries to show", flagsImagePath: "./flags.png", disabled: !1, containerStyle: {}, inputStyle: {}, buttonStyle: {}, dropdownStyle: {}, searchStyle: {}, containerClass: "", inputClass: "", buttonClass: "", dropdownClass: "", searchClass: "", className: "", autoFormat: !0, enableAreaCodes: !1, enableTerritories: !1, disableCountryCode: !1, disableDropdown: !1, enableLongNumbers: !1, countryCodeEditable: !0, enableSearch: !1, disableSearchIcon: !1, disableInitialCountryGuess: !1, disableCountryGuess: !1, regions: "", inputProps: {}, localization: {}, masks: null, priority: null, areaCodes: null, preserveOrder: [], defaultMask: "... ... ... ... ..", alwaysDefaultMask: !1, prefix: "+", copyNumbersOnly: !0, renderStringAsFlag: "", autocompleteSearch: !1, jumpCursorToEnd: !0, enableAreaCodeStretch: !1, enableClickOutside: !0, showDropdown: !1, isValid: !0, defaultErrorMessage: "", specialLabel: "Phone", onEnterKeyPress: null, keys: { UP: 38, DOWN: 40, RIGHT: 39, LEFT: 37, ENTER: 13, ESC: 27, PLUS: 43, A: 65, Z: 90, SPACE: 32, TAB: 9 } }; t.default = F; }]); var ReactPhoneInputLib = /*@__PURE__*/getDefaultExportFromCjs(lib); const phoneInputStyles = Ae` { font-family: 'Roboto', sans-serif; font-size: 15px; position: relative; width: 100%; border-radius: 2px; } :disabled { cursor: not-allowed } .flag { width: 16px; height: 11px; background-image: url(data:image/png;base64,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) } .ad { background-position: -16px 0 } .ae { background-position: -32px 0 } .af { background-position: -48px 0 } .ag { background-position: -64px 0 } .ai { background-position: -80px 0 } .al { background-position: -96px 0 } .am { background-position: -112px 0 } .ao { background-position: -128px 0 } .ar { background-position: -144px 0 } .as { background-position: -160px 0 } .at { background-position: -176px 0 } .au { background-position: -192px 0 } .aw { background-position: -208px 0 } .az { background-position: -224px 0 } .ba { background-position: -240px 0 } .bb { background-position: 0 -11px } .bd { background-position: -16px -11px } .be { background-position: -32px -11px } .bf { background-position: -48px -11px } .bg { background-position: -64px -11px } .bh { background-position: -80px -11px } .bi { background-position: -96px -11px } .bj { background-position: -112px -11px } .bm { background-position: -128px -11px } .bn { background-position: -144px -11px } .bo { background-position: -160px -11px } .br { background-position: -176px -11px } .bs { background-position: -192px -11px } .bt { background-position: -208px -11px } .bw { background-position: -224px -11px } .by { background-position: -240px -11px } .bz { background-position: 0 -22px } .ca { background-position: -16px -22px } .cd { background-position: -32px -22px } .cf { background-position: -48px -22px } .cg { background-position: -64px -22px } .ch { background-position: -80px -22px } .ci { background-position: -96px -22px } .ck { background-position: -112px -22px } .cl { background-position: -128px -22px } .cm { background-position: -144px -22px } .cn { background-position: -160px -22px } .co { background-position: -176px -22px } .cr { background-position: -192px -22px } .cu { background-position: -208px -22px } .cv { background-position: -224px -22px } .cw { background-position: -240px -22px } .cy { background-position: 0 -33px } .cz { background-position: -16px -33px } .de { background-position: -32px -33px } .dj { background-position: -48px -33px } .dk { background-position: -64px -33px } .dm { background-position: -80px -33px } .do { background-position: -96px -33px } .dz { background-position: -112px -33px } .ec { background-position: -128px -33px } .ee { background-position: -144px -33px } .eg { background-position: -160px -33px } .er { background-position: -176px -33px } .es { background-position: -192px -33px } .et { background-position: -208px -33px } .fi { background-position: -224px -33px } .fj { background-position: -240px -33px } .fk { background-position: 0 -44px } .fm { background-position: -16px -44px } .fo { background-position: -32px -44px } .fr, .bl, .mf { background-position: -48px -44px } .ga { background-position: -64px -44px } .gb { background-position: -80px -44px } .gd { background-position: -96px -44px } .ge { background-position: -112px -44px } .gf { background-position: -128px -44px } .gh { background-position: -144px -44px } .gi { background-position: -160px -44px } .gl { background-position: -176px -44px } .gm { background-position: -192px -44px } .gn { background-position: -208px -44px } .gp { background-position: -224px -44px } .gq { background-position: -240px -44px } .gr { background-position: 0 -55px } .gt { background-position: -16px -55px } .gu { background-position: -32px -55px } .gw { background-position: -48px -55px } .gy { background-position: -64px -55px } .hk { background-position: -80px -55px } .hn { background-position: -96px -55px } .hr { background-position: -112px -55px } .ht { background-position: -128px -55px } .hu { background-position: -144px -55px } .id { background-position: -160px -55px } .ie { background-position: -176px -55px } .il { background-position: -192px -55px } .in { background-position: -208px -55px } .io { background-position: -224px -55px } .iq { background-position: -240px -55px } .ir { background-position: 0 -66px } .is { background-position: -16px -66px } .it { background-position: -32px -66px } .je { background-position: -144px -154px } .jm { background-position: -48px -66px } .jo { background-position: -64px -66px } .jp { background-position: -80px -66px } .ke { background-position: -96px -66px } .kg { background-position: -112px -66px } .kh { background-position: -128px -66px } .ki { background-position: -144px -66px } .xk { background-position: -128px -154px } .km { background-position: -160px -66px } .kn { background-position: -176px -66px } .kp { background-position: -192px -66px } .kr { background-position: -208px -66px } .kw { background-position: -224px -66px } .ky { background-position: -240px -66px } .kz { background-position: 0 -77px } .la { background-position: -16px -77px } .lb { background-position: -32px -77px } .lc { background-position: -48px -77px } .li { background-position: -64px -77px } .lk { background-position: -80px -77px } .lr { background-position: -96px -77px } .ls { background-position: -112px -77px } .lt { background-position: -128px -77px } .lu { background-position: -144px -77px } .lv { background-position: -160px -77px } .ly { background-position: -176px -77px } .ma { background-position: -192px -77px } .mc { background-position: -208px -77px } .md { background-position: -224px -77px } .me { background-position: -112px -154px; height: 12px } .mg { background-position: 0 -88px } .mh { background-position: -16px -88px } .mk { background-position: -32px -88px } .ml { background-position: -48px -88px } .mm { background-position: -64px -88px } .mn { background-position: -80px -88px } .mo { background-position: -96px -88px } .mp { background-position: -112px -88px } .mq { background-position: -128px -88px } .mr { background-position: -144px -88px } .ms { background-position: -160px -88px } .mt { background-position: -176px -88px } .mu { background-position: -192px -88px } .mv { background-position: -208px -88px } .mw { background-position: -224px -88px } .mx { background-position: -240px -88px } .my { background-position: 0 -99px } .mz { background-position: -16px -99px } .na { background-position: -32px -99px } .nc { background-position: -48px -99px } .ne { background-position: -64px -99px } .nf { background-position: -80px -99px } .ng { background-position: -96px -99px } .ni { background-position: -112px -99px } .nl, .bq { background-position: -128px -99px } .no { background-position: -144px -99px } .np { background-position: -160px -99px } .nr { background-position: -176px -99px } .nu { background-position: -192px -99px } .nz { background-position: -208px -99px } .om { background-position: -224px -99px } .pa { background-position: -240px -99px } .pe { background-position: 0 -110px } .pf { background-position: -16px -110px } .pg { background-position: -32px -110px } .ph { background-position: -48px -110px } .pk { background-position: -64px -110px } .pl { background-position: -80px -110px } .pm { background-position: -96px -110px } .pr { background-position: -112px -110px } .ps { background-position: -128px -110px } .pt { background-position: -144px -110px } .pw { background-position: -160px -110px } .py { background-position: -176px -110px } .qa { background-position: -192px -110px } .re { background-position: -208px -110px } .ro { background-position: -224px -110px } .rs { background-position: -240px -110px } .ru { background-position: 0 -121px } .rw { background-position: -16px -121px } .sa { background-position: -32px -121px } .sb { background-position: -48px -121px } .sc { background-position: -64px -121px } .sd { background-position: -80px -121px } .se { background-position: -96px -121px } .sg { background-position: -112px -121px } .sh { background-position: -128px -121px } .si { background-position: -144px -121px } .sk { background-position: -160px -121px } .sl { background-position: -176px -121px } .sm { background-position: -192px -121px } .sn { background-position: -208px -121px } .so { background-position: -224px -121px } .sr { background-position: -240px -121px } .ss { background-position: 0 -132px } .st { background-position: -16px -132px } .sv { background-position: -32px -132px } .sx { background-position: -48px -132px } .sy { background-position: -64px -132px } .sz { background-position: -80px -132px } .tc { background-position: -96px -132px } .td { background-position: -112px -132px } .tg { background-position: -128px -132px } .th { background-position: -144px -132px } .tj { background-position: -160px -132px } .tk { background-position: -176px -132px } .tl { background-position: -192px -132px } .tm { background-position: -208px -132px } .tn { background-position: -224px -132px } .to { background-position: -240px -132px } .tr { background-position: 0 -143px } .tt { background-position: -16px -143px } .tv { background-position: -32px -143px } .tw { background-position: -48px -143px } .tz { background-position: -64px -143px } .ua { background-position: -80px -143px } .ug { background-position: -96px -143px } .us { background-position: -112px -143px } .uy { background-position: -128px -143px } .uz { background-position: -144px -143px } .va { background-position: -160px -143px } .vc { background-position: -176px -143px } .ve { background-position: -192px -143px } .vg { background-position: -208px -143px } .vi { background-position: -224px -143px } .vn { background-position: -240px -143px } .vu { background-position: 0 -154px } .wf { background-position: -16px -154px } .ws { background-position: -32px -154px } .ye { background-position: -48px -154px } .za { background-position: -64px -154px } .zm { background-position: -80px -154px } .zw { background-position: -96px -154px } * { box-sizing: border-box; -moz-box-sizing: border-box } .hide { display: none } .v-hide { visibility: hidden } .form-control { position: relative; font-size: 14px; letter-spacing: .01rem; margin-top: 0 !important; margin-bottom: 0 !important; padding-left: 48px; margin-left: 0; background: #FFFFFF; border: 1px solid #CACACA; border-radius: 2px; line-height: 25px; height: 35px; width: 300px; outline: none } .form-control.invalid-number { border: 1px solid #d79f9f; background-color: #FAF0F0; border-left-color: #cacaca } .form-control.invalid-number:focus { border: 1px solid #d79f9f; border-left-color: #cacaca; background-color: #FAF0F0 } .flag-dropdown { position: absolute; top: 0; bottom: 0; padding: 0; background-color: #f5f5f5; border: 1px solid #cacaca; border-radius: 3px 0 0 3px } .flag-dropdown:hover, .flag-dropdown:focus { cursor: pointer } .flag-dropdown.invalid-number { border-color: #d79f9f } .flag-dropdown.open { z-index: 2; background: #fff; border-radius: 3px 0 0 0 } .flag-dropdown.open .selected-flag { background: #fff; border-radius: 3px 0 0 0 } input[disabled]+.flag-dropdown:hover { cursor: default } input[disabled]+.flag-dropdown:hover .selected-flag { background-color: transparent } .selected-flag { outline: none; position: relative; width: 38px; height: 100%; padding: 0 0 0 8px; border-radius: 3px 0 0 3px } .selected-flag:hover, .selected-flag:focus { background-color: #fff } .selected-flag .flag { position: absolute; top: 50%; margin-top: -5px } .selected-flag .arrow { position: relative; top: 50%; margin-top: -2px; left: 20px; width: 0; height: 0; border-left: 3px solid transparent; border-right: 3px solid transparent; border-top: 4px solid #555 } .selected-flag .arrow.up { border-top: none; border-bottom: 4px solid #555 } .country-list { outline: none; z-index: 1; list-style: none; position: absolute; padding: 0; margin: 10px 0 10px -1px; box-shadow: 1px 2px 10px rgba(0, 0, 0, 0.35); background-color: white; width: 300px; max-height: 200px; overflow-y: scroll; border-radius: 0 0 3px 3px } .country-list .flag { display: inline-block } .country-list .divider { padding-bottom: 5px; margin-bottom: 5px; border-bottom: 1px solid #ccc } .country-list .country { padding: 7px 9px } .country-list .country .dial-code { color: #6b6b6b } .country-list .country:hover { background-color: #f1f1f1 } .country-list .country.highlight { background-color: #f1f1f1 } .country-list .flag { margin-right: 7px; margin-top: 2px } .country-list .country-name { margin-right: 6px } .country-list .search { position: sticky; top: 0; background-color: #fff; padding: 10px 0 6px 10px } .country-list .search-emoji { font-size: 15px } .country-list .search-box { border: 1px solid #cacaca; border-radius: 3px; font-size: 15px; line-height: 15px; margin-left: 6px; padding: 3px 8px 5px; outline: none } .country-list .no-entries-message { padding: 7px 10px 11px; opacity: .7 } .invalid-number-message { position: absolute; z-index: 1; font-size: 13px; left: 46px; top: -8px; background: #fff; padding: 0 2px; color: #de0000 } .special-label { display: none; position: absolute; z-index: 1; font-size: 13px; left: 46px; top: -8px; background: #fff; padding: 0 2px; white-space: nowrap }`; const ReactPhoneInput = ReactPhoneInputLib.default ?? ReactPhoneInputLib; const ReactPhoneInputComponent = ReactPhoneInput.default ?? ReactPhoneInput; /** * Prop Types of a PhoneInput component. * CurrencyInput is based on `react-currency-input-field` @see {@link https://github.com/bl00mber/react-phone-input-2 React Phone Input Field Component} * It extends all {@link SpaceProps}, {@link TypographyProps} and {@link LayoutProps} and {@link https://github.com/bl00mber/react-phone-input-2#options React Phone Input Field Component Props} * @memberof PhoneInput * @alias PhoneInputProps * @property {string} [...] All props default to _phoneinput_ html component like `onChange`, * `value` etc. * @property {string} [...] Props from {@link SpaceProps}, {@link TypographyProps} * and {@link LayoutProps} + they extend {@link InputProps} */ /** * @classdesc * * Wrapped `phoneinput` html element. * * ### Usage * * ```ts * import { PhoneInput, PhoneInputProps } from '@adminjs/design-system' * ``` * * @component * @subcategory Atoms * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-phoneinput--default Storybook} * @see PhoneInputProps * @hideconstructor * @example * return ( * <Box p="xl"> * <Label htmlFor="phoneinput1">Some example label</Label> * <PhoneInput id="phoneinput1" onChange={...} />; * </Box> * ) * @section design-system */ const PhoneInput = styled(ReactPhoneInputComponent)` ${phoneInputStyles} width: 100%; position: relative; & > input { ${InputCSS} ${space} ${typography} ${layout} } .form-control, .flag-dropdown { border-radius: 2px; } `; PhoneInput.defaultProps = { px: 'default', py: 'sm', className: cssClass('PhoneInput') }; PhoneInput.displayName = 'PhoneInput'; function _extends$h() { _extends$h = Object.assign ? Object.assign.bind() : 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; }; return _extends$h.apply(this, arguments); } const waveKeyframe = We` 0% { transform: translateX(-100%); } 50% { transform: translateX(100%); } 100% { transform: translateX(100%); } `; const StyledPlaceholder = styled.div` position: relative; overflow: hidden; -webkit-mask-image: -webkit-radial-gradient(white, black); &::after { animation: ${waveKeyframe} 1.6s linear 0.5s infinite; background: linear-gradient( 90deg, transparent, ${({ theme }) => curriedDarken$1(0.03, theme.colors.border)}, transparent ); content: ''; position: absolute; transform: translateX(-100%); bottom: 0; left: 0; right: 0; top: 0; } background: ${({ theme }) => theme.colors.border}; background-size: 1000px 104px; height: 338px; border-radius: ${({ theme }) => theme.space.sm}; ${layout}; `; /** * Prop Types of a Placeholder component. * Apart from standard html props it extends {@link LayoutProps} * @typedef {object} PlaceholderProps * @memberof Placeholder * @alias PlaceholderProps * @property {string} [...] All props default to _div_ html component like `style`, * `id` etc. * @property {string} [...] Props from {@link LayoutProps} */ /** * @classdesc * * <img src="components/placeholder.png" /> * * Renders placeholder * * ### Usage * * ```javascript * import { Placeholder, PlaceholderProps } from '@adminjs/design-system' * ``` * * @component * @subcategory Atoms * @see PlaceholderProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-placeholder--default Storybook} * @hideconstructor * @example <caption>Image placeholder</caption> * return ( * <Box> * <Placeholder width={100} height={200} /> * </Box> * ) * * @example <caption>Text placeholder</caption> * return ( * <Box> * <Label>Some name</Label> * <Placeholder width={400} height={14} /> * </Box> * ) * @section design-system */ const Placeholder$2 = ({ as: htmlAs, ref, ...other }) => /*#__PURE__*/React__namespace.default.createElement(StyledPlaceholder, _extends$h({ as: htmlAs }, other, { className: cssClass('Placeholder') })); Placeholder$2.displayName = 'Placeholder'; function _extends$g() { _extends$g = Object.assign ? Object.assign.bind() : 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; }; return _extends$g.apply(this, arguments); } const Circle$1 = styled.span` display: block; width: 8px; height: 8px; margin-left: -4px; margin-top: -4px; border-radius: 9999px; background: ${({ theme }) => theme.colors.white}; position: absolute; top: 50%; left: 50%; `; // Hide checkbox visually but remain accessible to screen readers. // Source: https://polished.js.org/docs/#hidevisually const HiddenRadio = styled.input.attrs({ type: 'radio' })` border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; white-space: nowrap; width: 1px; `; const radioBackground = (theme, checked, disabled) => { if (checked) { return disabled ? theme.colors.grey40 : theme.colors.primary100; } return theme.colors.white; }; const StyledRadio = styled.span` display: inline-block; width: 16px; cursor: pointer; border: 1px solid ${({ theme, checked, disabled }) => checked && !disabled ? theme.colors.primary100 : theme.colors.grey40}; border-radius: 1000px; height: 16px; transition: all 150ms; position: relative; ${HiddenRadio}:focus + & { ${({ theme }) => `box-shadow: ${focusShadowStyle(theme)}`}; } ${HiddenRadio}:hover + & { border-color: ${({ theme }) => theme.colors.grey60}; } ${Circle$1} { visibility: ${({ checked }) => checked ? 'visible' : 'hidden'}; } background: ${({ checked, theme, disabled }) => radioBackground(theme, checked, disabled)}; `; /** * @typedef {object} RadioProps * @alias RadioProps * @memberof Radio * @property {string} [...] All props default to _radio_ html input like `onChange`, * `checked` etc. */ /** /** * @classdesc * * <img src="components/radio.png" /> * * HTML Radio * * ### Usage * * ```javascript * import { Radio, RadioProps } from '@adminjs/design-system' * ``` * * @component * @see RadioProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-radio--default StoryBook} * @hideconstructor * @subcategory Atoms * @example * return ( * <Box p="xl"> * <Radio id="radio1"/> * <Label inline htmlFor="radio1" ml="default">Some example label</Label> * </Box> * ) * @section design-system */ const Radio = props => { const { className, checked, onChange, disabled, ...restProps } = props; const [isChecked, setChecked] = React.useState(checked ?? false); const actuallyChecked = checked ?? isChecked; const handleChange = event => { setChecked(!event.target.checked); if (onChange) { onChange(event); } }; return /*#__PURE__*/React__namespace.default.createElement(CheckboxRadioContainer, { className: className }, /*#__PURE__*/React__namespace.default.createElement(HiddenRadio, _extends$g({ checked: actuallyChecked, onChange: handleChange // eslint-disable-next-line @typescript-eslint/ban-types }, restProps, { disabled: disabled })), /*#__PURE__*/React__namespace.default.createElement(StyledRadio, { checked: actuallyChecked, onClick: event => handleChange && handleChange(event), disabled: disabled }, /*#__PURE__*/React__namespace.default.createElement(Circle$1, null))); }; Radio.displayName = 'Radio'; /* eslint-disable import/prefer-default-export */ /** * @classdesc * * <img src="components/section.png" /> * * Marks group of fields as a section. Has the same props as [Box]{@link BoxProps} * * ### Usage * * ```javascript * import { Section } from '@adminjs/design-system' * ``` * * @component * @subcategory Atoms * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-section--default Storybook} * @hideconstructor * @example * return ( * <Section> * <Text>Some text within a section</Text> * <Section> * <Text>Section can be nested</Text> * </Section> * </Section> * ) * @section design-system */ const Section = styled(Box$1)` border: 1px dashed ${({ theme }) => theme.colors.inputBorder}; padding: ${themeGet('space', 'lg')}; `; Section.defaultProps = { className: cssClass('Section') }; Section.displayName = 'Section'; /** * @classdesc * * <img src="components/table.png" /> * * Main Table wrapper. Along with _TableRow_, _TableCell_, _TableCaption_, * _TableHead_ and _TableBody_ gives you the powerful tool for building tables. * * ### Related Components * * - _Table_: {@link LayoutProps} & standard table html props * - _TableBody_: standard tbody html props * - _TableCell_: {@link SpaceProps} & {@link ColorProps} & standard td html props * - _TableHead_: standard thead html props * - _TableRow_: standard tr html props * * ### Usage * * ```javascript * import { * Table, * TableRow, * TableCell, * TableCaption, * TableHead, * TableBody, * } from '@adminjs/design-system' * ``` * * @component * @hideconstructor * @subcategory Atoms * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-table--default Storybook} * @example * return ( * <Box pt="x4"> * <Table> * <TableCaption> * <Text as="span">Monthly savings</Text> * <Button variant="text" size="sm"> * <Icon icon="Trash" /> * Remove * </Button> * </TableCaption> * <TableHead> * <TableRow> * <TableCell><CheckBox /></TableCell> * <TableCell> * <Link href="#"> * Name * <Icon icon="ChevronUp" /> * </Link> * </TableCell> * <TableCell> * <Link href="#"> * Last * <Icon icon="ChevronDown" /> * </Link> * </TableCell> * <TableCell>Surname</TableCell> * <TableCell>Gender</TableCell> * <TableCell>Age</TableCell> * </TableRow> * </TableHead> * <TableBody> * <TableRow> * <TableCell><CheckBox /></TableCell> * <TableCell>Value 1</TableCell> * <TableCell>Value 2</TableCell> * <TableCell>Value 2</TableCell> * <TableCell>Value 2</TableCell> * <TableCell>Value 2</TableCell> * </TableRow> * <TableRow> * <TableCell><CheckBox /></TableCell> * <TableCell>Value 1</TableCell> * <TableCell>Value 2</TableCell> * <TableCell>Value 2</TableCell> * <TableCell>Value 2</TableCell> * <TableCell>Value 2</TableCell> * </TableRow> * </TableBody> * </Table> * </Box> * ) * @section design-system */ const Table$1 = styled.table` position: relative; font-family: ${({ theme }) => theme.font}; color: ${({ theme }) => theme.colors.text}; border-left: 1px solid ${({ theme }) => theme.colors.border}; border-right: 1px solid ${({ theme }) => theme.colors.border}; ${layout}; `; Table$1.displayName = 'Table'; Table$1.defaultProps = { width: 1, className: cssClass('Table') }; /** * @component * @private */ const TableHead = styled.thead` background: rgba(0, 0, 0, 0.01); & td, & a { color: ${({ theme }) => theme.colors.text}; font-size: ${({ theme }) => theme.fontSizes.sm}; font-weight: ${({ theme }) => theme.fontWeights.bold}; text-decoration: none; white-space: nowrap; &:hover { text-decoration: none; } } `; TableHead.defaultProps = { className: cssClass('TableHead') }; TableHead.displayName = 'TableHead'; /** * @component * @private */ const TableBody = styled.tbody` `; TableBody.defaultProps = { className: cssClass('TableBody') }; TableBody.displayName = 'TableBody'; /** * @component * @private */ const TableCell$1 = styled.td` border-top: 1px solid ${({ theme }) => theme.colors.border}; border-bottom: 1px solid ${({ theme }) => theme.colors.border}; font-size: ${({ theme }) => theme.fontSizes.default}; line-height: ${({ theme }) => theme.lineHeights.default}; word-break: break-word; vertical-align: middle; ${color}; ${space}; ${layout}; &.options { text-align: right; } `; TableCell$1.defaultProps = { p: 'lg', color: 'text', className: cssClass('TableCell') }; TableCell$1.displayName = 'TableCell'; /** * @component * @private */ const TableRow$1 = styled.tr` &.selected { background: ${({ theme }) => rgba(theme.colors.primary100, 0.03)}; } &:not(.selected):hover { background: rgba(0, 0, 0, 0.01); } `; TableRow$1.defaultProps = { className: cssClass('TableRow') }; TableRow$1.displayName = 'TableRow'; /** * @component * @private */ const TableCaption = styled.caption` font-family: ${themeGet('font')}; padding: ${themeGet('space', 'sm')} ${themeGet('space', 'lg')}; text-align: left; color: ${themeGet('colors', 'white')}; font-size: ${themeGet('fontSizes', 'default')}; line-height: ${themeGet('lineHeights', 'default')}; position: absolute; left: 0; right: 0; top: -4px; transform: translateY(-100%); background: ${themeGet('colors', 'primary100')}; border-radius: 4px; box-sizing: border-box; vertical-align: middle; &:first-child { flex-grow: 1; } & ${Button} { color: ${themeGet('colors', 'white')}; border-color: ${themeGet('colors', 'white')}; } `; TableCaption.defaultProps = { className: cssClass('TableCaption') }; TableCaption.displayName = 'TableCaption'; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types function assert(condition, msg) { if (!condition) { throw new Error(msg); } } const StyledButton = styled.button` background: none; border: none; padding: ${({ theme }) => `${theme.space.lg} ${theme.space.xl}`}; cursor: pointer; border-bottom: 2px solid ${({ theme }) => theme.colors.border}; color: ${({ theme }) => theme.colors.grey60}; user-select: none; ${({ theme }) => ({ fontFamily: theme.font, fontSize: theme.fontSizes.md, lineHeight: theme.lineHeights.lg })}; ${({ active, theme }) => active && Ae` border-color: ${theme.colors.primary100}; color: ${theme.colors.primary100}; `} `; const StyledContent = styled.div` display: flex; flex-direction: column; `; const StyledHeader = styled.div` display: flex; `; const StyledSpacer = styled.div` flex-grow: 1; border-bottom: 2px solid ${({ theme }) => theme.colors.border}; `; /** * Tabs component renders a tab navigation bar that lets the user select a Tab * to display below. Children of the selected Tab are then rendered below the * navigation bar. */ const Tabs = ({ currentTab, // eslint-disable-next-line @typescript-eslint/no-empty-function onChange = () => {}, children, fullWidth = true, headerComponent: Header = StyledHeader, buttonComponent: Button = StyledButton, contentComponent: Content = StyledContent }) => { const [tabs, setTabs] = React.useState([]); const registerTab = React.useCallback((id, title) => { setTabs(currentTabs => { if (currentTabs.find(t => t.id === id)) { // eslint-disable-next-line no-console console.error(`There are multiple Tab components with ID '${id}'`); } return [...currentTabs, { id, title }]; }); }, []); const unregisterTab = React.useCallback(id => setTabs(newTabs => newTabs.filter(t => t.id !== id)), []); const memoizedContext = React.useMemo(() => ({ currentTab, registerTab, unregisterTab }), [currentTab, registerTab, unregisterTab]); return /*#__PURE__*/( // eslint-disable-next-line no-use-before-define React__namespace.default.createElement(TabContext.Provider, { value: memoizedContext }, /*#__PURE__*/React__namespace.default.createElement(StyledContent, { role: "tablist" }, /*#__PURE__*/React__namespace.default.createElement(Header, null, tabs.map(({ id, title }) => /*#__PURE__*/React__namespace.default.createElement(Button, { role: "tab", active: id === currentTab, key: id, onClick: () => onChange(id), tabId: id }, title)), fullWidth && /*#__PURE__*/React__namespace.default.createElement(StyledSpacer, null)), /*#__PURE__*/React__namespace.default.createElement(Content, { role: "tabpanel" }, children))) ); }; const TabContext = /*#__PURE__*/React.createContext({ registerTab: () => { // eslint-disable-next-line no-console console.error('Tab used outside of Tabs component. Tab needs to be a child of Tabs.'); }, // eslint-disable-next-line @typescript-eslint/no-empty-function unregisterTab: () => {}, currentTab: '' }); const useTabs = () => { const ctx = React.useContext(TabContext); assert(TabContext, 'useTabs is used outside TabContext'); return ctx; }; Tabs.displayName = 'Tabs'; /** * Renders children inside Tabs component. Each Tab will add a single tab in * the navigation bar. */ const Tab = ({ id, label, children }) => { const { currentTab, registerTab, unregisterTab } = useTabs(); React.useLayoutEffect(() => { registerTab(id, label); return () => unregisterTab(id); }); if (id !== currentTab) { return null; } // eslint-disable-next-line react/jsx-no-useless-fragment return /*#__PURE__*/React__namespace.default.createElement(React__namespace.default.Fragment, null, children); }; Tab.displayName = 'Tab'; /** * * Gives you the default styles for all "content" elements like: * ul, li, h1-h5 etc. * * ### Example * * ```typescript * import { styled } from '@styled-components' * import { contentCSS } from '@adminjs/design-system' * * const myComponent = styled` * ${contentCSS}; * ` * ``` * * @memberof module:@adminjs/design-system */ const contentCSS = Ae` font-family: ${({ theme }) => theme.font}; font-size: ${themeGet('fontSizes', 'md')}; line-height: ${themeGet('lineHeights', 'lg')}; font-weight: ${themeGet('fontWeights', 'light')}; div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, main, menu, nav, output, ruby, section, summary, time, mark, audio, video { &:not([class*="adminjs_"]) { margin: 0; padding: 0; } } img { max-width: 100%; } p, div { margin-bottom: ${themeGet('space', 'xl')}; font-size: ${themeGet('fontSizes', 'md')}; font-weight: ${themeGet('fontWeights', 'light')}; } strong, b { font-weight: ${themeGet('fontWeights', 'bolder')} } li + li { margin-top: ${themeGet('space', 'md')}; } p:not(:last-child), dl:not(:last-child), ol:not(:last-child), ul:not(:last-child), blockquote:not(:last-child), pre:not(:last-child), table:not(:last-child) { margin-bottom: ${themeGet('space', 'xl')}; } pre { background-color: ${themeGet('colors', 'grey20')}; border: 1px solid ${themeGet('colors', 'grey40')}; padding: ${themeGet('space', 'xl')}; margin: ${themeGet('space', 'xl')} 0 ${themeGet('space', 'xxl')}; white-space: pre; font-family: 'Courier New', Courier, monospace; } h1, h2, h3, h4, h5, h6 { font-weight: ${themeGet('fontWeights', 'light')}; line-height: ${themeGet('lineHeights', 'xl')}; font-size: ${themeGet('fontSizes', 'h3')}; margin-top: ${themeGet('space', 'xxl')}; margin-bottom: ${themeGet('space', 'xl')}; } h1:first-child, h2:first-child, h3:first-child, h4:first-child, h5:first-child, h6:first-child { margin-top: ${themeGet('space', 'sm')}; } h1 { font-size: ${themeGet('fontSizes', 'h1')}; line-height: ${themeGet('lineHeights', 'xxl')}; margin-top: ${themeGet('space', 'x4')}; margin-bottom: ${themeGet('space', 'x3')}; } h2 { font-size: ${themeGet('fontSizes', 'h2')}; line-height: ${themeGet('lineHeights', 'xxl')}; margin-top: ${themeGet('space', 'x3')}; margin-bottom: ${themeGet('space', 'xxl')}; } h3 { } h4 { font-size: ${themeGet('fontSizes', 'h4')}; line-height: ${themeGet('lineHeights', 'xl')}; margin-top: ${themeGet('space', 'xxl')}; margin-bottom: ${themeGet('space', 'xl')}; } h5 { font-size: ${themeGet('fontSizes', 'xl')}; line-height: ${themeGet('lineHeights', 'lg')}; margin-top: ${themeGet('space', 'xl')}; margin-bottom: ${themeGet('space', 'lg')}; font-weight: ${themeGet('fontWeights', 'normal')}; } h6 { font-size: ${themeGet('fontSizes', 'lg')}; line-height: ${themeGet('lineHeights', 'lg')}; margin-top: ${themeGet('space', 'lg')}; margin-bottom: ${themeGet('space', 'default')}; font-weight: ${themeGet('fontWeights', 'normal')}; } blockquote { background-color: ${themeGet('colors', 'grey20')}; border-left: ${themeGet('space', 'sm')} solid ${themeGet('colors', 'primary20')}; padding: ${themeGet('space', 'xl')}; margin: ${themeGet('space', 'xxl')} 0; } ol { list-style-position: outside; margin-top: ${themeGet('space', 'lg')}; margin-left: ${themeGet('space', 'xl')}; } ol:not([type]) { list-style-type: decimal; } ol:not([type]).is-lower-alpha { list-style-type: lower-alpha; } ol:not([type]).is-lower-roman { list-style-type: lower-roman; } ol:not([type]).is-upper-alpha { list-style-type: upper-alpha; } ol:not([type]).is-upper-roman { list-style-type: upper-roman; } ul { list-style: disc outside; margin-left: ${themeGet('space', 'xl')}; margin-top: ${themeGet('space', 'lg')}; } ul ul { list-style-type: circle; margin-top: ${themeGet('space', 'sm')}; } ul ul ul { list-style-type: square; } em { font-style: italic; } dd { margin-left: ${themeGet('space', 'xl')}; } figure { margin-left: ${themeGet('space', 'md')}; margin-right: ${themeGet('space', 'md')}; text-align: center; } figure:not(:first-child) { margin-top: ${themeGet('space', 'md')}; } figure:not(:last-child) { margin-bottom: ${themeGet('space', 'md')}; } figure img { display: inline-block; } figure figcaption { font-style: italic; } sup, sub { font-size: 75%; } table { width: 100%; margin: ${themeGet('space', 'xl')} 0; } table td, table th { padding: ${themeGet('space', 'lg')}; vertical-align: top; } table th { color: ${themeGet('colors', 'grey60')}; border-bottom: 1px solid ${themeGet('colors', 'grey40')}; } table td { border-bottom: 1px solid ${themeGet('colors', 'grey20')}; } table th:not([align]) { text-align: inherit; } table thead td, table thead th { border-bottom: 1px solid ${themeGet('colors', 'grey40')}; color: ${themeGet('colors', 'grey60')}; } table tfoot td, table tfoot th { border-bottom: 1px solid ${themeGet('colors', 'grey40')}; color: ${themeGet('colors', 'grey60')}; } table tbody tr:last-child td, table tbody tr:last-child th { border-bottom-width: 0; } .tabs li + li { margin-top: 0; } *:not(pre) > code { color: red !important; padding: 0.2em 0.4em !important; margin: 0; font-size: 85%; background-color: #afb8c133; border-radius: 6px; } `; const variants$2 = variant({ variants: { xs: { fontSize: 'xs' }, sm: { fontSize: 'sm' }, lg: { fontSize: 'lg' } } }); /** * Prop Types of a Text component. * Apart from variant it extends all {@link ColorProps}, {@link SpaceProps} and * {@link TypographyProps} * * @memberof Text * @alias TextProps * @property {string} [...] Other props from {@link ColorProps}, {@link SpaceProps} * and {@link TypographyProps} */ /** * @classdesc * * <img src="components/text.png" /> * * Use the Text component to control font size, weight, alignment, and color. * By default it is rendered as a `div` but you can change this to other (like `span`) * by using `as` prop, * * ### Usage * * ```javascript * import { Text, TextProps } from '@adminjs/design-system' * ``` * * @component * @subcategory Atoms * @see TextProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-text--default Storybook} * @hideconstructor * @example <caption>Lorem ipsum</caption> * return ( * <Box> * <Text> * In publishing and graphic design, * Lorem ipsum is a <b>placeholder</b> text commonly used to demonstrate the * visual form of a document or a typeface without relying on meaningful * content. * </Text> * <Text mt="default" variant="sm">This text was from Wikipedia</Text> * </Box> * ) * @section design-system */ const Text$2 = styled.div` ${contentCSS}; ${typography}; ${space}; ${layout}; ${color}; ${variants$2}; `; Text$2.defaultProps = { className: cssClass('Text') }; Text$2.displayName = 'Text'; /** * Prop Types of a TextArea component. * It extends all {@link SpaceProps}, {@link TypographyProps} and {@link LayoutProps} * @memberof TextArea * @alias TextAreaProps * @property {string} [...] All props default to _textarea_ html component like `onChange`, * `value` etc. * @property {string} [...] Props from {@link SpaceProps}, {@link TypographyProps} * and {@link LayoutProps} + they extend {@link InputProps} */ /** * @classdesc * * <img src="components/textarea.png" /> * * Wrapped `textarea` html element. * * ### Usage * * ```javascript * import { TextArea, TextAreaProps } from '@adminjs/design-system' * ``` * * @component * @subcategory Atoms * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-textarea--default Storybook} * @see TextAreaProps * @hideconstructor * @example * return ( * <Box p="xl"> * <Label htmlFor="textarea1">Some example label</Label> * <TextArea id="textarea1" width={1/2} /> * </Box> * ) * @section design-system */ const TextArea = styled.textarea` ${InputCSS} ${space}; ${layout}; ${typography}; `; TextArea.defaultProps = { px: 'default', py: 'default', fontSize: 'default', className: cssClass('TextArea') }; TextArea.displayName = 'TextArea'; const useWindowSize = () => { // Initialize state with undefined width/height so server and client renders match // Learn more here: https://joshwcomeau.com/react/the-perils-of-rehydration/ const [windowSize, setWindowSize] = React.useState(); React.useEffect(() => { // Handler to call on window resize const handleResize = () => { // Set window width/height to state setWindowSize({ width: window.innerWidth, height: window.innerHeight }); }; // Add event listener window.addEventListener('resize', handleResize); // Call handler right away so state gets updated with initial window size handleResize(); // Remove event listener on cleanup return () => window.removeEventListener('resize', handleResize); }, []); // Empty array ensures that effect is only run on mount return windowSize || null; }; const ARROW_WIDTH = 7; const topCSS = Ae` margin-top: -${props => props.isVisible ? themeGet('space', 'lg')(props) : '0px'}; &::after, &::before { top: 100%; left: 50%; } &::after { margin-left: -${ARROW_WIDTH}px; border-color: ${themeGet('colors', 'grey20')} transparent transparent transparent; } &::before { margin-left: -${ARROW_WIDTH - 1}px; border-color: ${themeGet('colors', 'highlight')} transparent transparent transparent; } `; const bottomCSS = Ae` margin-top: ${props => props.isVisible ? themeGet('space', 'lg')(props) : '0px'}; &::after, &::before { bottom: 100%; left: 50%; } &::after { margin-left: -${ARROW_WIDTH}px; border-color: transparent transparent ${themeGet('colors', 'grey20')} transparent; } &::before { margin-left: -${ARROW_WIDTH - 1}px; border-color: transparent transparent ${themeGet('colors', 'highlight')} transparent; } `; const leftCSS = Ae` margin-left: -${props => props.isVisible ? themeGet('space', 'lg')(props) : '0px'}; &::after, &::before { left: 100%; top: 50%; } &::after { margin-right: -${ARROW_WIDTH}px; margin-top: -${ARROW_WIDTH}px; border-color: transparent transparent transparent ${themeGet('colors', 'grey20')}; } &::before { margin-right: -${ARROW_WIDTH - 1}px; margin-top: -${ARROW_WIDTH - 1}px; border-color: transparent transparent transparent ${themeGet('colors', 'highlight')}; } `; const rightCSS = Ae` margin-left: ${props => props.isVisible ? themeGet('space', 'lg')(props) : '0px'}; &::after, &::before { right: 100%; top: 50%; } &::after { margin-left: -${ARROW_WIDTH}px; margin-top: -${ARROW_WIDTH}px; border-color: transparent ${themeGet('colors', 'grey20')} transparent transparent; } &::before { margin-left: -${ARROW_WIDTH - 1}px; margin-top: -${ARROW_WIDTH - 1}px; border-color: transparent ${themeGet('colors', 'highlight')} transparent transparent; } `; const getPadding = props => { const px = props.size === 'lg' ? 'xl' : 'md'; const py = props.size === 'lg' ? 'lg' : 'sm'; return `${themeGet('space', py)(props)} ${themeGet('space', px)(props)}`; }; const StyledTooltip = styled(Box$1)` transition: opacity 0.2s, margin 0.2s; position: absolute; opacity: ${({ isVisible }) => isVisible ? '1' : '0'}; padding: ${props => getPadding(props)}; pointer-events: none; &::after { content: " "; position: absolute; border-style: solid; border-width: 7px; z-index: 1; } &::before { content: " "; position: absolute; border-style: solid; border-width: 6px; z-index: 2; } ${props => ({ top: topCSS, bottom: bottomCSS, left: leftCSS, right: rightCSS })[props.direction]} `; StyledTooltip.defaultProps = { borderColor: 'grey20', borderStyle: 'solid', borderWidth: '1px', bg: 'highlight', borderRadius: '3px' }; /** * @component * @private * @memberof Tooltip */ const TooltipControl = props => { const { title, childRef, direction = 'bottom', ContentElement, size } = props; const tooltipRef = React.useRef(null); const [dimension, setDimension] = React.useState(null); const [position, setPosition] = React.useState(null); const [elementPosition, setElementPosition] = React.useState(null); const windowSize = useWindowSize(); React.useEffect(() => { if (childRef.current) { const { width: clientWidth, top: offsetTop, left: offsetLeft, height: clientHeight } = childRef.current.getBoundingClientRect(); setElementPosition({ width: clientWidth, top: offsetTop, left: offsetLeft, height: clientHeight }); } }, [childRef, windowSize?.width, windowSize?.height]); React.useEffect(() => { if (tooltipRef.current) { const { clientWidth, clientHeight } = tooltipRef.current; setDimension({ width: clientWidth, height: clientHeight }); } }, [tooltipRef?.current?.clientWidth, tooltipRef?.current?.clientHeight, title]); React.useEffect(() => { if (!elementPosition || !dimension) { return; } // eslint-disable-next-line default-case switch (direction) { case 'bottom': { setPosition({ top: elementPosition.top + elementPosition.height, left: elementPosition.left + elementPosition.width / 2 - dimension.width / 2 }); break; } case 'top': { setPosition({ top: elementPosition.top - dimension.height, left: elementPosition.left + elementPosition.width / 2 - dimension.width / 2 }); break; } case 'left': { setPosition({ top: elementPosition.top + elementPosition.height / 2 - dimension.height / 2, left: elementPosition.left - dimension.width }); break; } case 'right': { setPosition({ top: elementPosition.top + elementPosition.height / 2 - dimension.height / 2, left: elementPosition.left + elementPosition.width }); break; } } }, [elementPosition, dimension, direction]); const isVisible = !!(dimension && position); return /*#__PURE__*/React__namespace.default.createElement(StyledTooltip, { ref: tooltipRef, left: position?.left || '-1110px', top: position?.top || '-1110px', size: size, direction: direction, isVisible: isVisible }, ContentElement || title); }; TooltipControl.displayName = 'TooltipControl'; /* eslint-disable max-len */ const TooltipPortal = PortalUtils.createPortalForKey('TOOLTIP', TooltipControl); /** * @load ./tooltip.doc.md * @component * @subcategory Atoms * @hideconstructor * @new In version 3.3 * @section design-system */ const Tooltip = props => { const { direction, title, children, size } = props; const childRef = React.useRef(null); const [isVisible, setIsVisible] = React.useState(false); let TriggerElement; let ContentElement; const childrenCount = React__namespace.default.Children.count(children); if (childrenCount === 1) { TriggerElement = children; } else if (childrenCount === 2) { React__namespace.default.Children.forEach(children, child => { const type = child.type?.displayName; if (type === 'TooltipContent') { ContentElement = child; } else { TriggerElement = child; } }); } const onEnter = () => { setIsVisible(true); }; const onLeave = () => { setIsVisible(false); }; // eslint-disable-next-line react/no-unstable-nested-components const ChildWithRef = /*#__PURE__*/React.forwardRef((triggerProps, ref) => /*#__PURE__*/React__namespace.default.cloneElement(TriggerElement, { ...triggerProps, displayName: 'TooltipTrigger', ref })); return /*#__PURE__*/React__namespace.default.createElement(React__namespace.default.Fragment, null, /*#__PURE__*/React__namespace.default.createElement(ChildWithRef, { ref: childRef, onMouseEnter: onEnter, onMouseLeave: onLeave }), isVisible && /*#__PURE__*/React__namespace.default.createElement(TooltipPortal, { title: title, childRef: childRef, size: size, direction: direction, ContentElement: ContentElement })); }; Tooltip.displayName = 'Tooltip'; /** * @component * @private */ const TooltipContent = styled(Box$1)``; TooltipContent.displayName = 'TooltipContent'; function _extends$f() { _extends$f = Object.assign ? Object.assign.bind() : 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; }; return _extends$f.apply(this, arguments); } /** * Prop Types of an Header components. * Apart from all props for a standard hx elements it extends * {@link TypographyProps} and {@link SpaceProps} * * @memberof Header * @alias HeaderProps * @property {string} [...] Other props from {@link TypographyProps}, {@link SpaceProps} */ const Base = styled.h3` font-family: ${themeGet('font')}; vertical-align: middle; padding: 0; * { vertical-align: middle; } & ${Button}, a { vertical-align: bottom; } * > &:first-child { margin-top: ${themeGet('space', 'sm')}; } ${Badge} { vertical-align: middle; } ${typography}; ${space}; `; Base.defaultProps = { fontWeight: 'normal', fontSize: 'h3', lineHeight: 'xl', className: cssClass(['Header', 'H3']), marginTop: 'xxl', marginBottom: 'xl' }; const H1 = styled(props => /*#__PURE__*/React__namespace.default.createElement(Base, _extends$f({ as: "h1" }, props)))``; H1.defaultProps = { fontSize: 'h1', lineHeight: 'xxl', className: cssClass(['Header', 'H1']), marginTop: 'x4', marginBottom: 'x3' }; H1.displayName = 'H1'; const H2 = styled(props => /*#__PURE__*/React__namespace.default.createElement(Base, _extends$f({ as: "h2" }, props)))` & ${Button}, a { margin-bottom: 4px; } `; H2.defaultProps = { fontSize: 'h2', lineHeight: 'xxl', className: cssClass(['Header', 'H2']), marginTop: 'x3', marginBottom: 'xxl' }; H2.displayName = 'H2'; const H3 = Base; H3.displayName = 'H3'; const H4 = styled(props => /*#__PURE__*/React__namespace.default.createElement(Base, _extends$f({ as: "h4" }, props)))``; H4.defaultProps = { fontSize: 'h4', lineHeight: 'xl', className: cssClass(['Header', 'H4']), marginTop: 'xxl', marginBottom: 'xl' }; H4.displayName = 'H4'; const H5 = styled(props => /*#__PURE__*/React__namespace.default.createElement(Base, _extends$f({ as: "h5" }, props)))``; H5.defaultProps = { fontSize: 'xl', lineHeight: 'lg', className: cssClass(['Header', 'H5']), marginTop: 'xl', marginBottom: 'default', fontWeight: 'normal' }; H5.displayName = 'H5'; const H6 = styled(props => /*#__PURE__*/React__namespace.default.createElement(Base, _extends$f({ as: "h6" }, props)))``; H6.defaultProps = { fontSize: 'lg', lineHeight: 'lg', className: cssClass(['Header', 'H6']), marginTop: 'lg', marginBottom: 'default', fontWeight: 'normal' }; H6.displayName = 'H6'; /** * @load ./header.doc.md * @component * @subcategory Atoms * @see HeaderProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-atoms-header--default Storybook} * @hideconstructor * @section design-system */ const Header = H3; Header.H1 = H1; Header.H2 = H2; Header.H3 = H3; Header.H4 = H4; Header.H5 = H5; Header.H6 = H6; const CaptionShared = Ae` font-family: ${themeGet('font')}; font-weight: ${themeGet('fontWeights', 'normal')}; ${typography}; ${space}; `; const Caption = styled('div')` ${CaptionShared}; font-size: ${themeGet('fontSizes', 'sm')}; line-height: ${themeGet('lineHeights', 'md')}; `; Caption.displayName = 'Caption'; const CardTitle = styled('div')` ${CaptionShared}; font-size: ${themeGet('fontSizes', 'md')}; line-height: ${themeGet('lineHeights', 'lg')}; margin: ${themeGet('space', 'lg')} 0; * > &:first-child { margin-top: 0; } `; CardTitle.displayName = 'CardTitle'; const SmallText = styled('div')` ${CaptionShared}; font-size: ${themeGet('fontSizes', 'xs')}; line-height: ${themeGet('lineHeights', 'sm')}; `; SmallText.displayName = 'SmallText'; const Title = styled('div')` ${CaptionShared}; font-size: ${themeGet('fontSizes', 'md')}; line-height: ${themeGet('lineHeights', 'lg')}; `; Title.displayName = 'Title'; var reactTextMask = {exports: {}}; (function (module, exports) { !function (e, t) { module.exports = t(React__namespace.default) ; }(commonjsGlobal, function (e) { return function (e) { function t(n) { if (r[n]) return r[n].exports; var o = r[n] = { exports: {}, id: n, loaded: !1 }; return e[n].call(o.exports, o, o.exports, t), o.loaded = !0, o.exports; } var r = {}; return t.m = e, t.c = r, t.p = "", t(0); }([function (e, t, r) { function n(e) { return e && e.__esModule ? e : { default: e }; } function o(e, t) { var r = {}; for (var n in e) t.indexOf(n) >= 0 || Object.prototype.hasOwnProperty.call(e, n) && (r[n] = e[n]); return r; } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); } function a(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || "object" != typeof t && "function" != typeof t ? e : t; } function u(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t); } Object.defineProperty(t, "__esModule", { value: !0 }), t.conformToMask = void 0; var s = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var r = arguments[t]; for (var n in r) Object.prototype.hasOwnProperty.call(r, n) && (e[n] = r[n]); } return e; }, l = function () { function e(e, t) { for (var r = 0; r < t.length; r++) { var n = t[r]; n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, n.key, n); } } return function (t, r, n) { return r && e(t.prototype, r), n && e(t, n), t; }; }(), f = r(3); Object.defineProperty(t, "conformToMask", { enumerable: !0, get: function () { return n(f).default; } }); var c = r(11), p = n(c), d = r(9), h = n(d), v = r(5), y = n(v), m = r(2), b = function (e) { function t() { var e; i(this, t); for (var r = arguments.length, n = Array(r), o = 0; o < r; o++) n[o] = arguments[o]; var u = a(this, (e = t.__proto__ || Object.getPrototypeOf(t)).call.apply(e, [this].concat(n))); return u.setRef = u.setRef.bind(u), u.onBlur = u.onBlur.bind(u), u.onChange = u.onChange.bind(u), u; } return u(t, e), l(t, [{ key: "setRef", value: function (e) { this.inputElement = e; } }, { key: "initTextMask", value: function () { var e = this.props, t = this.props.value; this.textMaskInputElement = (0, y.default)(s({ inputElement: this.inputElement }, e)), this.textMaskInputElement.update(t); } }, { key: "componentDidMount", value: function () { this.initTextMask(); } }, { key: "componentDidUpdate", value: function (e) { var t = this.props, r = t.value, n = t.pipe, o = t.mask, i = t.guide, a = t.placeholderChar, u = t.showMask, s = { guide: i, placeholderChar: a, showMask: u }, l = "function" == typeof n && "function" == typeof e.pipe ? n.toString() !== e.pipe.toString() : (0, m.isNil)(n) && !(0, m.isNil)(e.pipe) || !(0, m.isNil)(n) && (0, m.isNil)(e.pipe), f = o.toString() !== e.mask.toString(), c = Object.keys(s).some(function (t) { return s[t] !== e[t]; }) || f || l, p = r !== this.inputElement.value; (p || c) && this.initTextMask(); } }, { key: "render", value: function e() { var t = this.props, e = t.render, r = o(t, ["render"]); return delete r.mask, delete r.guide, delete r.pipe, delete r.placeholderChar, delete r.keepCharPositions, delete r.value, delete r.onBlur, delete r.onChange, delete r.showMask, e(this.setRef, s({ onBlur: this.onBlur, onChange: this.onChange, defaultValue: this.props.value }, r)); } }, { key: "onChange", value: function (e) { this.textMaskInputElement.update(), "function" == typeof this.props.onChange && this.props.onChange(e); } }, { key: "onBlur", value: function (e) { "function" == typeof this.props.onBlur && this.props.onBlur(e); } }]), t; }(p.default.PureComponent); t.default = b, b.propTypes = { mask: h.default.oneOfType([h.default.array, h.default.func, h.default.bool, h.default.shape({ mask: h.default.oneOfType([h.default.array, h.default.func]), pipe: h.default.func })]).isRequired, guide: h.default.bool, value: h.default.oneOfType([h.default.string, h.default.number]), pipe: h.default.func, placeholderChar: h.default.string, keepCharPositions: h.default.bool, showMask: h.default.bool }, b.defaultProps = { render: function (e, t) { return p.default.createElement("input", s({ ref: e }, t)); } }; }, function (e, t) { Object.defineProperty(t, "__esModule", { value: !0 }), t.placeholderChar = "_", t.strFunction = "function"; }, function (e, t, r) { function n() { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : f, t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : l.placeholderChar; if (!o(e)) throw new Error("Text-mask:convertMaskToPlaceholder; The mask property must be an array."); if (e.indexOf(t) !== -1) throw new Error("Placeholder character must not be used as part of the mask. Please specify a character that is not present in your mask as your placeholder character.\n\n" + ("The placeholder character that was received is: " + JSON.stringify(t) + "\n\n") + ("The mask that was received is: " + JSON.stringify(e))); return e.map(function (e) { return e instanceof RegExp ? t : e; }).join(""); } function o(e) { return Array.isArray && Array.isArray(e) || e instanceof Array; } function i(e) { return "string" == typeof e || e instanceof String; } function a(e) { return "number" == typeof e && void 0 === e.length && !isNaN(e); } function u(e) { return "undefined" == typeof e || null === e; } function s(e) { for (var t = [], r = void 0; r = e.indexOf(c), r !== -1;) t.push(r), e.splice(r, 1); return { maskWithoutCaretTraps: e, indexes: t }; } Object.defineProperty(t, "__esModule", { value: !0 }), t.convertMaskToPlaceholder = n, t.isArray = o, t.isString = i, t.isNumber = a, t.isNil = u, t.processCaretTraps = s; var l = r(1), f = [], c = "[]"; }, function (e, t, r) { function n() { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : s, t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : u, r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; if (!(0, i.isArray)(t)) { if (("undefined" == typeof t ? "undefined" : o(t)) !== a.strFunction) throw new Error("Text-mask:conformToMask; The mask property must be an array."); t = t(e, r), t = (0, i.processCaretTraps)(t).maskWithoutCaretTraps; } var n = r.guide, l = void 0 === n || n, f = r.previousConformedValue, c = void 0 === f ? s : f, p = r.placeholderChar, d = void 0 === p ? a.placeholderChar : p, h = r.placeholder, v = void 0 === h ? (0, i.convertMaskToPlaceholder)(t, d) : h, y = r.currentCaretPosition, m = r.keepCharPositions, b = l === !1 && void 0 !== c, g = e.length, k = c.length, C = v.length, O = t.length, T = g - k, P = T > 0, x = y + (P ? -T : 0), w = x + Math.abs(T); if (m === !0 && !P) { for (var S = s, _ = x; _ < w; _++) v[_] === d && (S += d); e = e.slice(0, x) + S + e.slice(x, g); } for (var M = e.split(s).map(function (e, t) { return { char: e, isNew: t >= x && t < w }; }), j = g - 1; j >= 0; j--) { var E = M[j].char; if (E !== d) { var R = j >= x && k === O; E === v[R ? j - T : j] && M.splice(j, 1); } } var V = s, N = !1; e: for (var A = 0; A < C; A++) { var B = v[A]; if (B === d) { if (M.length > 0) for (; M.length > 0;) { var I = M.shift(), F = I.char, q = I.isNew; if (F === d && b !== !0) { V += d; continue e; } if (t[A].test(F)) { if (m === !0 && q !== !1 && c !== s && l !== !1 && P) { for (var D = M.length, L = null, W = 0; W < D; W++) { var J = M[W]; if (J.char !== d && J.isNew === !1) break; if (J.char === d) { L = W; break; } } null !== L ? (V += F, M.splice(L, 1)) : A--; } else V += F; continue e; } N = !0; } b === !1 && (V += v.substr(A, C)); break; } V += B; } if (b && P === !1) { for (var U = null, H = 0; H < V.length; H++) v[H] === d && (U = H); V = null !== U ? V.substr(0, U + 1) : s; } return { conformedValue: V, meta: { someCharsRejected: N } }; } Object.defineProperty(t, "__esModule", { value: !0 }); var o = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) { return typeof e; } : function (e) { return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; }; t.default = n; var i = r(2), a = r(1), u = [], s = ""; }, function (e, t) { function r(e) { var t = e.previousConformedValue, r = void 0 === t ? o : t, i = e.previousPlaceholder, a = void 0 === i ? o : i, u = e.currentCaretPosition, s = void 0 === u ? 0 : u, l = e.conformedValue, f = e.rawValue, c = e.placeholderChar, p = e.placeholder, d = e.indexesOfPipedChars, h = void 0 === d ? n : d, v = e.caretTrapIndexes, y = void 0 === v ? n : v; if (0 === s || !f.length) return 0; var m = f.length, b = r.length, g = p.length, k = l.length, C = m - b, O = C > 0, T = 0 === b, P = C > 1 && !O && !T; if (P) return s; var x = O && (r === l || l === p), w = 0, S = void 0, _ = void 0; if (x) w = s - C;else { var M = l.toLowerCase(), j = f.toLowerCase(), E = j.substr(0, s).split(o), R = E.filter(function (e) { return M.indexOf(e) !== -1; }); _ = R[R.length - 1]; var V = a.substr(0, R.length).split(o).filter(function (e) { return e !== c; }).length, N = p.substr(0, R.length).split(o).filter(function (e) { return e !== c; }).length, A = N !== V, B = void 0 !== a[R.length - 1] && void 0 !== p[R.length - 2] && a[R.length - 1] !== c && a[R.length - 1] !== p[R.length - 1] && a[R.length - 1] === p[R.length - 2]; !O && (A || B) && V > 0 && p.indexOf(_) > -1 && void 0 !== f[s] && (S = !0, _ = f[s]); for (var I = h.map(function (e) { return M[e]; }), F = I.filter(function (e) { return e === _; }).length, q = R.filter(function (e) { return e === _; }).length, D = p.substr(0, p.indexOf(c)).split(o).filter(function (e, t) { return e === _ && f[t] !== e; }).length, L = D + q + F + (S ? 1 : 0), W = 0, J = 0; J < k; J++) { var U = M[J]; if (w = J + 1, U === _ && W++, W >= L) break; } } if (O) { for (var H = w, Y = w; Y <= g; Y++) if (p[Y] === c && (H = Y), p[Y] === c || y.indexOf(Y) !== -1 || Y === g) return H; } else if (S) { for (var z = w - 1; z >= 0; z--) if (l[z] === _ || y.indexOf(z) !== -1 || 0 === z) return z; } else for (var G = w; G >= 0; G--) if (p[G - 1] === c || y.indexOf(G) !== -1 || 0 === G) return G; } Object.defineProperty(t, "__esModule", { value: !0 }), t.default = r; var n = [], o = ""; }, function (e, t, r) { function n(e) { return e && e.__esModule ? e : { default: e }; } function o(e) { var t = { previousConformedValue: void 0, previousPlaceholder: void 0 }; return { state: t, update: function (r) { var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : e, o = n.inputElement, l = n.mask, c = n.guide, y = n.pipe, b = n.placeholderChar, g = void 0 === b ? h.placeholderChar : b, k = n.keepCharPositions, C = void 0 !== k && k, O = n.showMask, T = void 0 !== O && O; if ("undefined" == typeof r && (r = o.value), r !== t.previousConformedValue) { ("undefined" == typeof l ? "undefined" : s(l)) === m && void 0 !== l.pipe && void 0 !== l.mask && (y = l.pipe, l = l.mask); var P = void 0, x = void 0; if (l instanceof Array && (P = (0, d.convertMaskToPlaceholder)(l, g)), l !== !1) { var w = a(r), S = o.selectionEnd, _ = t.previousConformedValue, M = t.previousPlaceholder, j = void 0; if (("undefined" == typeof l ? "undefined" : s(l)) === h.strFunction) { if (x = l(w, { currentCaretPosition: S, previousConformedValue: _, placeholderChar: g }), x === !1) return; var E = (0, d.processCaretTraps)(x), R = E.maskWithoutCaretTraps, V = E.indexes; x = R, j = V, P = (0, d.convertMaskToPlaceholder)(x, g); } else x = l; var N = { previousConformedValue: _, guide: c, placeholderChar: g, pipe: y, placeholder: P, currentCaretPosition: S, keepCharPositions: C }, A = (0, p.default)(w, x, N), B = A.conformedValue, I = ("undefined" == typeof y ? "undefined" : s(y)) === h.strFunction, F = {}; I && (F = y(B, u({ rawValue: w }, N)), F === !1 ? F = { value: _, rejected: !0 } : (0, d.isString)(F) && (F = { value: F })); var q = I ? F.value : B, D = (0, f.default)({ previousConformedValue: _, previousPlaceholder: M, conformedValue: q, placeholder: P, rawValue: w, currentCaretPosition: S, placeholderChar: g, indexesOfPipedChars: F.indexesOfPipedChars, caretTrapIndexes: j }), L = q === P && 0 === D, W = T ? P : v, J = L ? W : q; t.previousConformedValue = J, t.previousPlaceholder = P, o.value !== J && (o.value = J, i(o, D)); } } } }; } function i(e, t) { document.activeElement === e && (b ? g(function () { return e.setSelectionRange(t, t, y); }, 0) : e.setSelectionRange(t, t, y)); } function a(e) { if ((0, d.isString)(e)) return e; if ((0, d.isNumber)(e)) return String(e); if (void 0 === e || null === e) return v; throw new Error("The 'value' provided to Text Mask needs to be a string or a number. The value received was:\n\n " + JSON.stringify(e)); } Object.defineProperty(t, "__esModule", { value: !0 }); var u = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var r = arguments[t]; for (var n in r) Object.prototype.hasOwnProperty.call(r, n) && (e[n] = r[n]); } return e; }, s = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) { return typeof e; } : function (e) { return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; }; t.default = o; var l = r(4), f = n(l), c = r(3), p = n(c), d = r(2), h = r(1), v = "", y = "none", m = "object", b = "undefined" != typeof navigator && /Android/i.test(navigator.userAgent), g = "undefined" != typeof requestAnimationFrame ? requestAnimationFrame : setTimeout; }, function (e, t) { function r(e) { return function () { return e; }; } var n = function () {}; n.thatReturns = r, n.thatReturnsFalse = r(!1), n.thatReturnsTrue = r(!0), n.thatReturnsNull = r(null), n.thatReturnsThis = function () { return this; }, n.thatReturnsArgument = function (e) { return e; }, e.exports = n; }, function (e, t, r) { function n(e, t, r, n, i, a, u, s) { if (!e) { var l; if (void 0 === t) l = new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else { var f = [r, n, i, a, u, s], c = 0; l = new Error(t.replace(/%s/g, function () { return f[c++]; })), l.name = "Invariant Violation"; } throw l.framesToPop = 1, l; } } e.exports = n; }, function (e, t, r) { var n = r(6), o = r(7), i = r(10); e.exports = function () { function e(e, t, r, n, a, u) { u !== i && o(!1, "Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types"); } function t() { return e; } e.isRequired = e; var r = { array: e, bool: e, func: e, number: e, object: e, string: e, symbol: e, any: e, arrayOf: t, element: e, instanceOf: t, node: e, objectOf: t, oneOf: t, oneOfType: t, shape: t, exact: t }; return r.checkPropTypes = n, r.PropTypes = r, r; }; }, function (e, t, r) { e.exports = r(8)(); }, function (e, t) { var r = "SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"; e.exports = r; }, function (t, r) { t.exports = e; }]); }); })(reactTextMask); var reactTextMaskExports = reactTextMask.exports; var MaskedInput = /*@__PURE__*/getDefaultExportFromCjs(reactTextMaskExports); var createAutoCorrectedDatePipe$1 = {exports: {}}; (function (module, exports) { !function (e, t) { module.exports = t() ; }(commonjsGlobal, function () { return function (e) { function t(n) { if (r[n]) return r[n].exports; var o = r[n] = { exports: {}, id: n, loaded: !1 }; return e[n].call(o.exports, o, o.exports, t), o.loaded = !0, o.exports; } var r = {}; return t.m = e, t.c = r, t.p = "", t(0); }([function (e, t, r) { e.exports = r(1); }, function (e, t) { function r() { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "mm dd yyyy", t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, r = t.minYear, i = void 0 === r ? 1 : r, d = t.maxYear, u = void 0 === d ? 9999 : d, s = e.split(/[^dmyHMS]+/).sort(function (e, t) { return o.indexOf(e) - o.indexOf(t); }); return function (t) { var r = [], o = { dd: 31, mm: 12, yy: 99, yyyy: u, HH: 23, MM: 59, SS: 59 }, d = { dd: 1, mm: 1, yy: 0, yyyy: i, HH: 0, MM: 0, SS: 0 }, a = t.split(""); s.forEach(function (t) { var n = e.indexOf(t), i = parseInt(o[t].toString().substr(0, 1), 10); parseInt(a[n], 10) > i && (a[n + 1] = a[n], a[n] = 0, r.push(n)); }); var y = 0, f = s.some(function (r) { var s = e.indexOf(r), a = r.length, f = t.substr(s, a).replace(/\D/g, ""), p = parseInt(f, 10); "mm" === r && (y = p || 0); var c = "dd" === r ? n[y] : o[r]; if ("yyyy" === r && (1 !== i || 9999 !== u)) { var l = parseInt(o[r].toString().substring(0, f.length), 10), m = parseInt(d[r].toString().substring(0, f.length), 10); return p < m || p > l; } return p > c || f.length === a && p < d[r]; }); return !f && { value: a.join(""), indexesOfPipedChars: r }; }; } Object.defineProperty(t, "__esModule", { value: !0 }), t.default = r; var n = [31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], o = ["yyyy", "yy", "mm", "dd", "HH", "MM", "SS"]; }]); }); })(createAutoCorrectedDatePipe$1); var createAutoCorrectedDatePipeExports = createAutoCorrectedDatePipe$1.exports; var createAutoCorrectedDatePipe = /*@__PURE__*/getDefaultExportFromCjs(createAutoCorrectedDatePipeExports); function _extends$e() { _extends$e = Object.assign ? Object.assign.bind() : 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; }; return _extends$e.apply(this, arguments); } const Mask = MaskedInput.default ?? MaskedInput; const autocorrectedDatePipe = createAutoCorrectedDatePipe.default ?? createAutoCorrectedDatePipe; const DatePickerIcon = styled(Icon)` position: absolute; color: ${({ theme }) => theme.colors.primary100}; right: 0; top: 0; display: flex; justify-content: center; align-items: center; overflow: hidden; height: 100%; min-width: 34px; width: auto; `; const StyledDatePicker = styled(Box$1)` ${datepickerStyles}; position: relative; & .react-datepicker-wrapper { width: 100%; box-sizing: border-box; border: ${({ theme }) => `1px solid ${theme.colors.grey40}`}; padding: 4px 8px; font-size: 14px; line-height: 24px; border-radius: 2px; } & .react-datepicker-wrapper input { border: none; width: 100%; height: 100%; background: transparent; color: ${({ theme }) => theme.colors.grey100}; &:focus-visible { outline: none; } } & .react-datepicker { border-radius: 0; padding: ${({ theme }) => theme.space.default}; font-family: ${({ theme }) => theme.font}; z-index: 101; &:focus-visible { outline: none; } } & .react-datepicker__navigation--next { border-left-color: ${({ theme }) => theme.colors.primary60}; top: 16px; } & .react-datepicker__navigation--next:hover { border-left-color: ${({ theme }) => theme.colors.primary100}; } & .react-datepicker__navigation--previous { border-right-color: ${({ theme }) => theme.colors.primary60}; top: 16px; } & .react-datepicker__navigation--previous:hover { border-right-color: ${({ theme }) => theme.colors.primary100}; } & .react-datepicker__navigation { outline: none; } & .react-datepicker__year-read-view--down-arrow { top: 5px; } & .react-datepicker__header { background: ${({ theme }) => theme.colors.white}; font-size: ${({ theme }) => theme.fontSizes.default}; border: none; } & .react-datepicker__current-month { font-weight: normal; padding-bottom: ${({ theme }) => theme.space.lg}; } & .react-datepicker__month { margin-top: 0; } & .react-datepicker__day-name { color: ${({ theme }) => theme.colors.primary60}; } & .react-datepicker__day--outside-month { color: ${({ theme }) => theme.colors.grey40}; } & .react-datepicker__day--today.react-datepicker__day--keyboard-selected { color: ${({ theme }) => theme.colors.white}; } & .react-datepicker__day--selected { color: ${({ theme }) => theme.colors.white}; } & .react-datepicker__day--keyboard-selected:not(.react-datepicker__day--today) { background: none; color: ${({ theme }) => theme.colors.grey100}; } & .react-datepicker__day:hover, & .react-datepicker__day { border-radius: 15px; } & .react-datepicker__day--selected { background: ${({ theme }) => theme.colors.primary100}; border-radius: 15px; color: ${({ theme }) => theme.colors.white}; } `; const parseDateSafely = newDate => { const timestamp = Date.parse(newDate); if (!Number.isNaN(timestamp)) { return new Date(timestamp); } return null; }; // https://github.com/text-mask/text-mask/issues/951 const convertDateFnsFormatToDatePipeFormat = format => { const tokens = format.split(''); return tokens.map(char => { if (char === 'M') return 'm'; if (char === 'm') return 'M'; return char; }).join(''); }; const defaultDateProps = { date: { format: 'yyyy/MM/dd', placeholder: 'YYYY/MM/DD', inputMask: [/\d/, /\d/, /\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/] }, datetime: { format: 'yyyy/MM/dd HH:mm', placeholder: 'YYYY/MM/DD HH:mm', inputMask: [/\d/, /\d/, /\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, ' ', /\d/, /\d/, ':', /\d/, /\d/] } }; /** * Props for DatePicker * * @memberof DatePicker * @alias DatePickerProps * @property {any} {...} Any custom props to pass down to the ReactDatePicker * @see https://reactdatepicker.com/ */ const parseCustomMask = mask => mask.map(el => { if (typeof el === 'string') return el; if (el.raw) return el.raw; if (!el.regex) throw new Error('Invalid input mask'); return new RegExp(el.regex); }); const getDateInputProps = ( // eslint-disable-next-line default-param-last propertyType = 'datetime', props) => { const { dateFormat, placeholderText, inputMask } = props; const defaultProps = defaultDateProps[propertyType]; const format = dateFormat ?? defaultProps.format; const placeholder = placeholderText ?? defaultProps.placeholder; const mask = inputMask?.mask ? parseCustomMask(inputMask.mask) : defaultProps.inputMask; // eslint-disable-next-line max-len const dateFormatPipe = autocorrectedDatePipe(convertDateFnsFormatToDatePipeFormat(format)); return { format, dateFormatPipe, placeholder, parsedMask: mask }; }; /** * @classdesc * * <img src="components/date-picker.png" /> * * * Component responsible for showing dates. It is a wrapper to * [react datepicker]{@link https://reactdatepicker.com/}. * * ### Usage * * ```javascript * import { DatePicker, DatePickerProps } from '@adminjs/design-system' * ``` * * @component * @subcategory Molecules * @see https://reactdatepicker.com/ * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-molecules-datepicker--default Storybook} * @see DatePickerProps * @hideconstructor * * @example * return ( * <Box width={1/2} height="300px"> * <DatePicker onChange={(date) => console.log(date)}/> * </Box> * ) * @section design-system */ const DatePicker = props => { const { value, onChange, disabled, propertyType, inputMask = {}, placeholderText, dateFormat, ...other } = props; // eslint-disable-next-line @typescript-eslint/no-unused-vars const { mask: _mask, ...otherInputMaskProps } = inputMask; const handleChange = newDate => { onChange(parseDateSafely(newDate)?.toISOString?.() || ''); }; const dateValue = React.useMemo(() => parseDateSafely(value), [value]); const { dateFormatPipe, format, parsedMask, placeholder } = getDateInputProps(propertyType, { dateFormat, inputMask, placeholderText }); return /*#__PURE__*/React__namespace.default.createElement(StyledDatePicker, { className: cssClass('DatePicker') }, /*#__PURE__*/React__namespace.default.createElement(zt, _extends$e({ customInput: /*#__PURE__*/React__namespace.default.createElement(Mask, _extends$e({ pipe: dateFormatPipe, mask: parsedMask, keepCharPositions: true, guide: true, placeholder: placeholder, disabled: disabled }, otherInputMaskProps)), selected: dateValue, onChange: handleChange, showTimeInput: propertyType === 'datetime', dateFormat: format, disabled: disabled }, other)), /*#__PURE__*/React__namespace.default.createElement(DatePickerIcon, { icon: "Calendar", color: "primary100" })); }; DatePicker.displayName = 'DatePicker'; var parseISO$1 = {exports: {}}; var constants = {}; Object.defineProperty(constants, "__esModule", { value: true }); constants.secondsInYear = constants.secondsInWeek = constants.secondsInQuarter = constants.secondsInMonth = constants.secondsInMinute = constants.secondsInHour = constants.secondsInDay = constants.quartersInYear = constants.monthsInYear = constants.monthsInQuarter = constants.minutesInHour = constants.minTime = constants.millisecondsInSecond = constants.millisecondsInMinute = constants.millisecondsInHour = constants.maxTime = constants.daysInYear = constants.daysInWeek = void 0; /** * Days in 1 week. * * @name daysInWeek * @constant * @type {number} * @default */ var daysInWeek = 7; /** * Days in 1 year * One years equals 365.2425 days according to the formula: * * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400. * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days * * @name daysInYear * @constant * @type {number} * @default */ constants.daysInWeek = daysInWeek; var daysInYear = 365.2425; /** * Maximum allowed time. * * @name maxTime * @constant * @type {number} * @default */ constants.daysInYear = daysInYear; var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000; /** * Milliseconds in 1 minute * * @name millisecondsInMinute * @constant * @type {number} * @default */ constants.maxTime = maxTime; var millisecondsInMinute = 60000; /** * Milliseconds in 1 hour * * @name millisecondsInHour * @constant * @type {number} * @default */ constants.millisecondsInMinute = millisecondsInMinute; var millisecondsInHour = 3600000; /** * Milliseconds in 1 second * * @name millisecondsInSecond * @constant * @type {number} * @default */ constants.millisecondsInHour = millisecondsInHour; var millisecondsInSecond = 1000; /** * Minimum allowed time. * * @name minTime * @constant * @type {number} * @default */ constants.millisecondsInSecond = millisecondsInSecond; var minTime = -maxTime; /** * Minutes in 1 hour * * @name minutesInHour * @constant * @type {number} * @default */ constants.minTime = minTime; var minutesInHour = 60; /** * Months in 1 quarter * * @name monthsInQuarter * @constant * @type {number} * @default */ constants.minutesInHour = minutesInHour; var monthsInQuarter = 3; /** * Months in 1 year * * @name monthsInYear * @constant * @type {number} * @default */ constants.monthsInQuarter = monthsInQuarter; var monthsInYear = 12; /** * Quarters in 1 year * * @name quartersInYear * @constant * @type {number} * @default */ constants.monthsInYear = monthsInYear; var quartersInYear = 4; /** * Seconds in 1 hour * * @name secondsInHour * @constant * @type {number} * @default */ constants.quartersInYear = quartersInYear; var secondsInHour = 3600; /** * Seconds in 1 minute * * @name secondsInMinute * @constant * @type {number} * @default */ constants.secondsInHour = secondsInHour; var secondsInMinute = 60; /** * Seconds in 1 day * * @name secondsInDay * @constant * @type {number} * @default */ constants.secondsInMinute = secondsInMinute; var secondsInDay = secondsInHour * 24; /** * Seconds in 1 week * * @name secondsInWeek * @constant * @type {number} * @default */ constants.secondsInDay = secondsInDay; var secondsInWeek = secondsInDay * 7; /** * Seconds in 1 year * * @name secondsInYear * @constant * @type {number} * @default */ constants.secondsInWeek = secondsInWeek; var secondsInYear = secondsInDay * daysInYear; /** * Seconds in 1 month * * @name secondsInMonth * @constant * @type {number} * @default */ constants.secondsInYear = secondsInYear; var secondsInMonth = secondsInYear / 12; /** * Seconds in 1 quarter * * @name secondsInQuarter * @constant * @type {number} * @default */ constants.secondsInMonth = secondsInMonth; var secondsInQuarter = secondsInMonth * 3; constants.secondsInQuarter = secondsInQuarter; var requiredArgs = {exports: {}}; (function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.default = requiredArgs; function requiredArgs(required, args) { if (args.length < required) { throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present'); } } module.exports = exports.default; })(requiredArgs, requiredArgs.exports); var requiredArgsExports = requiredArgs.exports; var toInteger = {exports: {}}; (function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.default = toInteger; function toInteger(dirtyNumber) { if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) { return NaN; } var number = Number(dirtyNumber); if (isNaN(number)) { return number; } return number < 0 ? Math.ceil(number) : Math.floor(number); } module.exports = exports.default; })(toInteger, toInteger.exports); var toIntegerExports = toInteger.exports; (function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.default = parseISO; var _index = constants; var _index2 = _interopRequireDefault(requiredArgsExports); var _index3 = _interopRequireDefault(toIntegerExports); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * @name parseISO * @category Common Helpers * @summary Parse ISO string * * @description * Parse the given string in ISO 8601 format and return an instance of Date. * * Function accepts complete ISO 8601 formats as well as partial implementations. * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601 * * If the argument isn't a string, the function cannot parse the string or * the values are invalid, it returns Invalid Date. * * @param {String} argument - the value to convert * @param {Object} [options] - an object with options. * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format * @returns {Date} the parsed date in the local time zone * @throws {TypeError} 1 argument required * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2 * * @example * // Convert string '2014-02-11T11:30:30' to date: * const result = parseISO('2014-02-11T11:30:30') * //=> Tue Feb 11 2014 11:30:30 * * @example * // Convert string '+02014101' to date, * // if the additional number of digits in the extended year format is 1: * const result = parseISO('+02014101', { additionalDigits: 1 }) * //=> Fri Apr 11 2014 00:00:00 */ function parseISO(argument, options) { var _options$additionalDi; (0, _index2.default)(1, arguments); var additionalDigits = (0, _index3.default)((_options$additionalDi = options === null || options === void 0 ? void 0 : options.additionalDigits) !== null && _options$additionalDi !== void 0 ? _options$additionalDi : 2); if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) { throw new RangeError('additionalDigits must be 0, 1 or 2'); } if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) { return new Date(NaN); } var dateStrings = splitDateString(argument); var date; if (dateStrings.date) { var parseYearResult = parseYear(dateStrings.date, additionalDigits); date = parseDate(parseYearResult.restDateString, parseYearResult.year); } if (!date || isNaN(date.getTime())) { return new Date(NaN); } var timestamp = date.getTime(); var time = 0; var offset; if (dateStrings.time) { time = parseTime(dateStrings.time); if (isNaN(time)) { return new Date(NaN); } } if (dateStrings.timezone) { offset = parseTimezone(dateStrings.timezone); if (isNaN(offset)) { return new Date(NaN); } } else { var dirtyDate = new Date(timestamp + time); // js parsed string assuming it's in UTC timezone // but we need it to be parsed in our timezone // so we use utc values to build date in our timezone. // Year values from 0 to 99 map to the years 1900 to 1999 // so set year explicitly with setFullYear. var result = new Date(0); result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate()); result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds()); return result; } return new Date(timestamp + time + offset); } var patterns = { dateTimeDelimiter: /[T ]/, timeZoneDelimiter: /[Z ]/i, timezone: /([Z+-].*)$/ }; var dateRegex = /^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/; var timeRegex = /^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/; var timezoneRegex = /^([+-])(\d{2})(?::?(\d{2}))?$/; function splitDateString(dateString) { var dateStrings = {}; var array = dateString.split(patterns.dateTimeDelimiter); var timeString; // The regex match should only return at maximum two array elements. // [date], [time], or [date, time]. if (array.length > 2) { return dateStrings; } if (/:/.test(array[0])) { timeString = array[0]; } else { dateStrings.date = array[0]; timeString = array[1]; if (patterns.timeZoneDelimiter.test(dateStrings.date)) { dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0]; timeString = dateString.substr(dateStrings.date.length, dateString.length); } } if (timeString) { var token = patterns.timezone.exec(timeString); if (token) { dateStrings.time = timeString.replace(token[1], ''); dateStrings.timezone = token[1]; } else { dateStrings.time = timeString; } } return dateStrings; } function parseYear(dateString, additionalDigits) { var regex = new RegExp('^(?:(\\d{4}|[+-]\\d{' + (4 + additionalDigits) + '})|(\\d{2}|[+-]\\d{' + (2 + additionalDigits) + '})$)'); var captures = dateString.match(regex); // Invalid ISO-formatted year if (!captures) return { year: NaN, restDateString: '' }; var year = captures[1] ? parseInt(captures[1]) : null; var century = captures[2] ? parseInt(captures[2]) : null; // either year or century is null, not both return { year: century === null ? year : century * 100, restDateString: dateString.slice((captures[1] || captures[2]).length) }; } function parseDate(dateString, year) { // Invalid ISO-formatted year if (year === null) return new Date(NaN); var captures = dateString.match(dateRegex); // Invalid ISO-formatted string if (!captures) return new Date(NaN); var isWeekDate = !!captures[4]; var dayOfYear = parseDateUnit(captures[1]); var month = parseDateUnit(captures[2]) - 1; var day = parseDateUnit(captures[3]); var week = parseDateUnit(captures[4]); var dayOfWeek = parseDateUnit(captures[5]) - 1; if (isWeekDate) { if (!validateWeekDate(year, week, dayOfWeek)) { return new Date(NaN); } return dayOfISOWeekYear(year, week, dayOfWeek); } else { var date = new Date(0); if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) { return new Date(NaN); } date.setUTCFullYear(year, month, Math.max(dayOfYear, day)); return date; } } function parseDateUnit(value) { return value ? parseInt(value) : 1; } function parseTime(timeString) { var captures = timeString.match(timeRegex); if (!captures) return NaN; // Invalid ISO-formatted time var hours = parseTimeUnit(captures[1]); var minutes = parseTimeUnit(captures[2]); var seconds = parseTimeUnit(captures[3]); if (!validateTime(hours, minutes, seconds)) { return NaN; } return hours * _index.millisecondsInHour + minutes * _index.millisecondsInMinute + seconds * 1000; } function parseTimeUnit(value) { return value && parseFloat(value.replace(',', '.')) || 0; } function parseTimezone(timezoneString) { if (timezoneString === 'Z') return 0; var captures = timezoneString.match(timezoneRegex); if (!captures) return 0; var sign = captures[1] === '+' ? -1 : 1; var hours = parseInt(captures[2]); var minutes = captures[3] && parseInt(captures[3]) || 0; if (!validateTimezone(hours, minutes)) { return NaN; } return sign * (hours * _index.millisecondsInHour + minutes * _index.millisecondsInMinute); } function dayOfISOWeekYear(isoWeekYear, week, day) { var date = new Date(0); date.setUTCFullYear(isoWeekYear, 0, 4); var fourthOfJanuaryDay = date.getUTCDay() || 7; var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay; date.setUTCDate(date.getUTCDate() + diff); return date; } // Validation functions // February is null to handle the leap year (using ||) var daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; function isLeapYearIndex(year) { return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0; } function validateDate(year, month, date) { return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28)); } function validateDayOfYearDate(year, dayOfYear) { return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365); } function validateWeekDate(_year, week, day) { return week >= 1 && week <= 53 && day >= 0 && day <= 6; } function validateTime(hours, minutes, seconds) { if (hours === 24) { return minutes === 0 && seconds === 0; } return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25; } function validateTimezone(_hours, minutes) { return minutes >= 0 && minutes <= 59; } module.exports = exports.default; })(parseISO$1, parseISO$1.exports); var parseISOExports = parseISO$1.exports; var parseISO = /*@__PURE__*/getDefaultExportFromCjs(parseISOExports); const useDatePicker = ({ value, propertyType, disabled, onChange }) => { const [isCalendarVisible, setCalendarVisible] = React.useState(false); let date; let dateString; if (value && value.constructor.name !== 'Date') { const dateStringValue = value; let dateNum = parseISO(dateStringValue); if (dateNum.toString() === 'Invalid Date') dateNum = undefined; if (dateNum) { date = new Date(dateNum); dateString = formatDateProperty(date, propertyType); } } else if (value && value.constructor.name === 'Date') { dateString = formatDateProperty(value, propertyType); } const onDateChange = newDate => { if (!disabled) { onChange(newDate); } }; return { dateString, date, isCalendarVisible, setCalendarVisible, onDateChange }; }; /* eslint-disable import/prefer-default-export */ const DEFAULT_DRAWER_WIDTH = '500px'; /* eslint-disable no-shadow */ /** * Props for Drawer component. Apart from those described below it also extends all * {@link SpaceProps}. * * @alias DrawerProps * @extends SpaceProps * @extends LayoutProps * @extends ColorProps * @memberof Drawer */ const variants$1 = variant({ variants: { filter: { bg: 'filterBg', width: '400px', className: cssClass(['Drawer', 'Drawer_Filter']) } } }); /** * @classdesc * * <img src="components/drawer.png" /> * * Drawer component renders a huge side area where {@link BaseActionComponent} renders * all actions where {@link Action.showInDrawer} is set to true. * * You probably don't want to use it directly in your actions, but if you decide to set * `showInDrawer` to true you will probably want to use `DrawerContent` or `DrawerFooter` * components. * * All these components: Drawer, DrawerContent and Drawer Footer extends {@link SpaceProps}. * * ### Usage * * ```javascript * import { Drawer, DrawerProps, DrawerContent, DrawerFooter } from '@adminjs/design-system' * ``` * * @component * @subcategory Molecules * @hideconstructor * @see DrawerProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-molecules-drawer--default Storybook} * @example * return ( * <Box height="500px"> * <Drawer> * <DrawerContent> * <Header.H3> * <Button size="icon" rounded mr="lg"> * <Icon icon="ChevronRight" /> * </Button> * Edit * </Header.H3> * <Box my="x3" p={0}> * <Button size="sm"> * <Icon icon="Info" /> * Info * </Button> * <Button size="sm" ml="lg"> * <Icon icon="Trash" /> * Delete * </Button> * </Box> * * </DrawerContent> * <DrawerFooter> * <Button variant="contained"> * Save * </Button> * </DrawerFooter> * </Drawer> * </Box> * ) * * @section design-system */ const Drawer = styled.section` position: fixed; top: 0; right: 0; display: flex; flex-direction: column; height: 100%; max-width: 100%; z-index: 100; transform: translateX(${({ isHidden }) => isHidden ? '100%' : '0%'}); transition: transform 0.25s ease-in-out; box-shadow: -1px 0px 0px #EEEEEF, -4px 0px 16px rgba(107, 119, 129, 0.1); background-color: ${({ theme }) => theme.colors.container}; overflow-y: auto; overflow-x: hidden; ${space}; ${color}; ${layout}; ${variants$1}; `; Drawer.defaultProps = { width: DEFAULT_DRAWER_WIDTH, className: cssClass('Drawer') }; Drawer.displayName = 'Drawer'; /** * @component * @private */ const DrawerContent = styled.section` flex-grow: 1; overflow: auto; padding: ${({ theme }) => theme.space.x3} ${({ theme }) => theme.space.xxl} ${({ theme }) => theme.space.xl}; box-sizing: border-box; ${space}; `; DrawerContent.displayName = 'DrawerContent'; /** * @component * @private */ const DrawerFooter = styled.section` display: flex; justify-content: space-around; padding: ${({ theme }) => theme.space.xxl} ${({ theme }) => theme.space.lg}; text-align: center; flex-shrink: 0; ${space}; `; DrawerFooter.displayName = 'DrawerFooter'; function _extends$d() { _extends$d = Object.assign ? Object.assign.bind() : 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; }; return _extends$d.apply(this, arguments); } const StyledDropDown = styled.div` position: relative; display: inline-block; `; const DEFAULT_STICK = 'left'; /** * Available values for {@link DropDown}.stick prop * @memberof DropDown */ /** * Props passed to DropDown element. * @property {string} [...] Other props from {@link BoxProps} * @memberof DropDown * @extends BoxProps */ /** * @load ./drop-down.doc.md * @hideconstructor * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-molecules-dropdown--default Storybook} * @component * @subcategory Molecules * @section design-system */ const DropDown = props => { const { children, stick = DEFAULT_STICK, ...boxProps } = props; const [isVisible, setIsVisible] = React.useState(false); const [initialHeight, setInitialHeight] = React.useState(null); const ref = React.useRef(null); const [menuPosition, setMenuPosition] = React.useState(); React.useLayoutEffect(() => { if (ref.current && !initialHeight) { const { offsetHeight } = ref.current; setInitialHeight(offsetHeight); switch (stick) { case 'left': setMenuPosition({ left: 0, top: offsetHeight }); break; case 'right': setMenuPosition({ right: 0, top: offsetHeight }); } } }, [ref.current]); const elements = React__namespace.default.Children.map(children, child => { const type = child && child.type && child.type.displayName; if (type === 'DropDownTrigger') { // getting rid of DropDownTrigger and render just what was inside return /*#__PURE__*/React__namespace.default.cloneElement(child.props.children); } if (type === 'DropDownMenu') { return /*#__PURE__*/React__namespace.default.cloneElement(child, { isVisible, stick, ...menuPosition }); } return child; }); return /*#__PURE__*/React__namespace.default.createElement(StyledDropDown, _extends$d({}, boxProps, { onMouseEnter: () => setIsVisible(true), onMouseLeave: () => setIsVisible(false), ref: ref }), elements); }; DropDown.displayName = 'DropDown'; /** * Props passed to DropDownMenu element. * Extends {@link BoxProps} * * @memberof DropDown */ /** * @component * @private */ const DropDownMenu = styled(Box$1).attrs(props => ({ className: cssClass([`DropDown-Stick-${props.stick || DEFAULT_STICK}`, 'DropDownMenu'], props.className) }))` background: ${({ theme }) => theme.colors.container}; display: inline-block; position: absolute; z-index: 40; flex-direction: column; box-shadow: ${({ theme }) => theme.shadows.card}; border-radius: ${({ theme }) => theme.space.sm}; ${({ isVisible }) => isVisible !== false ? '' : 'display: none;'}; &.${cssClass('DropDown-Stick-left')} .${cssClass('DropDownMenu')} { left: 100%; } &.${cssClass('DropDown-Stick-right')} .${cssClass('DropDownMenu')} { right: 100%; } `; DropDownMenu.displayName = 'DropDownMenu'; const variantsShared = (theme, color) => ({ color, [`& .${cssClass('DropDownItemAction')}`]: { color }, '&:hover': { bg: rgba(theme.colors[color], 0.03) } }); const colorVariants = variant({ prop: 'colorVariant', variants: { primary: theme => variantsShared(theme, 'primary100'), danger: theme => variantsShared(theme, 'error'), success: theme => variantsShared(theme, 'success'), info: theme => variantsShared(theme, 'info'), secondary: theme => variantsShared(theme, 'accent'), light: theme => variantsShared(theme, 'grey80'), default: theme => variantsShared(theme, 'text') } }); /** * Props passed to DropDownItem * Extends {@link BoxProps} * * @memberof DropDown * @extends BoxProps */ /** * @component * @private */ const DropDownItem = styled(Box$1)` color: ${({ theme }) => theme.colors.text}; font-family: ${({ theme }) => theme.font}; ${({ onClick }) => onClick ? 'cursor: pointer;' : ''}; text-decoration: none; display: flex; flex-direction: row; align-items: center; white-space: nowrap; text-align: left; &:hover { background: ${({ theme }) => rgba(theme.colors.text, 0.03)}; } & .${cssClass('Icon')} { padding-right: ${({ theme }) => theme.space.default}; flex-grow: 0; flex-shrink: 0; } & > ${DropDownMenu} { position: absolute; top: 0; display: none; } &:hover > ${DropDownMenu} { display: flex; } & a { color: inherit; text-decoration: none; } padding: ${({ theme }) => `${theme.space.lg} ${theme.space.xxl}`}; ${space}; ${colorVariants}; `; DropDownItem.displayName = 'DropDownItem'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment const DropDownItemAction = styled(Box$1).attrs(props => ({ className: cssClass('DropDownItemAction', props.className) }))` ${({ onClick }) => onClick ? 'cursor: pointer;' : ''}; `; DropDownItemAction.defaultProps = { width: 1, px: 'xxl', py: 'lg' }; DropDownItemAction.displayName = 'DropDownItemAction'; /** * @component * @private */ const DropDownTrigger = styled.span` display: inline-block; `; DropDownTrigger.displayName = 'DropDownTrigger'; var copyObject = _copyObject, createAssigner = _createAssigner, keysIn = keysIn_1; /** * This method is like `_.assignIn` except that it accepts `customizer` * which is invoked to produce the assigned values. If `customizer` returns * `undefined`, assignment is handled by the method instead. The `customizer` * is invoked with five arguments: (objValue, srcValue, key, object, source). * * **Note:** This method mutates `object`. * * @static * @memberOf _ * @since 4.0.0 * @alias extendWith * @category Object * @param {Object} object The destination object. * @param {...Object} sources The source objects. * @param {Function} [customizer] The function to customize assigned values. * @returns {Object} Returns `object`. * @see _.assignWith * @example * * function customizer(objValue, srcValue) { * return _.isUndefined(objValue) ? srcValue : objValue; * } * * var defaults = _.partialRight(_.assignInWith, customizer); * * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); * // => { 'a': 1, 'b': 2 } */ var assignInWith$1 = createAssigner(function (object, source, srcIndex, customizer) { copyObject(source, keysIn(source), object, customizer); }); var assignInWith_1 = assignInWith$1; var baseGetTag$1 = _baseGetTag, isObjectLike$1 = isObjectLike_1, isPlainObject$1 = isPlainObject_1; /** `Object#toString` result references. */ var domExcTag = '[object DOMException]', errorTag = '[object Error]'; /** * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, * `SyntaxError`, `TypeError`, or `URIError` object. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an error object, else `false`. * @example * * _.isError(new Error); * // => true * * _.isError(Error); * // => false */ function isError$2(value) { if (!isObjectLike$1(value)) { return false; } var tag = baseGetTag$1(value); return tag == errorTag || tag == domExcTag || typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject$1(value); } var isError_1 = isError$2; var apply$1 = _apply, baseRest = _baseRest, isError$1 = isError_1; /** * Attempts to invoke `func`, returning either the result or the caught error * object. Any additional arguments are provided to `func` when it's invoked. * * @static * @memberOf _ * @since 3.0.0 * @category Util * @param {Function} func The function to attempt. * @param {...*} [args] The arguments to invoke `func` with. * @returns {*} Returns the `func` result or error object. * @example * * // Avoid throwing errors for invalid selectors. * var elements = _.attempt(function(selector) { * return document.querySelectorAll(selector); * }, '>_>'); * * if (_.isError(elements)) { * elements = []; * } */ var attempt$1 = baseRest(function (func, args) { try { return apply$1(func, undefined, args); } catch (e) { return isError$1(e) ? e : new Error(e); } }); var attempt_1 = attempt$1; /** * A specialized version of `_.map` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ function arrayMap$2(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } var _arrayMap = arrayMap$2; var arrayMap$1 = _arrayMap; /** * The base implementation of `_.values` and `_.valuesIn` which creates an * array of `object` property values corresponding to the property names * of `props`. * * @private * @param {Object} object The object to query. * @param {Array} props The property names to get values for. * @returns {Object} Returns the array of property values. */ function baseValues$1(object, props) { return arrayMap$1(props, function (key) { return object[key]; }); } var _baseValues = baseValues$1; var eq = eq_1; /** Used for built-in method references. */ var objectProto$2 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$3 = objectProto$2.hasOwnProperty; /** * Used by `_.defaults` to customize its `_.assignIn` use to assign properties * of source objects to the destination object for all destination properties * that resolve to `undefined`. * * @private * @param {*} objValue The destination value. * @param {*} srcValue The source value. * @param {string} key The key of the property to assign. * @param {Object} object The parent object of `objValue`. * @returns {*} Returns the value to assign. */ function customDefaultsAssignIn$1(objValue, srcValue, key, object) { if (objValue === undefined || eq(objValue, objectProto$2[key]) && !hasOwnProperty$3.call(object, key)) { return srcValue; } return objValue; } var _customDefaultsAssignIn = customDefaultsAssignIn$1; /** Used to escape characters for inclusion in compiled string literals. */ var stringEscapes = { '\\': '\\', "'": "'", '\n': 'n', '\r': 'r', '\u2028': 'u2028', '\u2029': 'u2029' }; /** * Used by `_.template` to escape characters for inclusion in compiled string literals. * * @private * @param {string} chr The matched character to escape. * @returns {string} Returns the escaped character. */ function escapeStringChar$1(chr) { return '\\' + stringEscapes[chr]; } var _escapeStringChar = escapeStringChar$1; var overArg = _overArg; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeKeys$1 = overArg(Object.keys, Object); var _nativeKeys = nativeKeys$1; var isPrototype = _isPrototype, nativeKeys = _nativeKeys; /** Used for built-in method references. */ var objectProto$1 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$2 = objectProto$1.hasOwnProperty; /** * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeys$1(object) { if (!isPrototype(object)) { return nativeKeys(object); } var result = []; for (var key in Object(object)) { if (hasOwnProperty$2.call(object, key) && key != 'constructor') { result.push(key); } } return result; } var _baseKeys = baseKeys$1; var arrayLikeKeys = _arrayLikeKeys, baseKeys = _baseKeys, isArrayLike = isArrayLike_1; /** * Creates an array of the own enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. See the * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * for more details. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keys(new Foo); * // => ['a', 'b'] (iteration order is not guaranteed) * * _.keys('hi'); * // => ['0', '1'] */ function keys$2(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } var keys_1 = keys$2; /** Used to match template delimiters. */ var reInterpolate$2 = /<%=([\s\S]+?)%>/g; var _reInterpolate = reInterpolate$2; /** * The base implementation of `_.propertyOf` without support for deep paths. * * @private * @param {Object} object The object to query. * @returns {Function} Returns the new accessor function. */ function basePropertyOf$1(object) { return function (key) { return object == null ? undefined : object[key]; }; } var _basePropertyOf = basePropertyOf$1; var basePropertyOf = _basePropertyOf; /** Used to map characters to HTML entities. */ var htmlEscapes = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }; /** * Used by `_.escape` to convert characters to HTML entities. * * @private * @param {string} chr The matched character to escape. * @returns {string} Returns the escaped character. */ var escapeHtmlChar$1 = basePropertyOf(htmlEscapes); var _escapeHtmlChar = escapeHtmlChar$1; var baseGetTag = _baseGetTag, isObjectLike = isObjectLike_1; /** `Object#toString` result references. */ var symbolTag = '[object Symbol]'; /** * Checks if `value` is classified as a `Symbol` primitive or object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. * @example * * _.isSymbol(Symbol.iterator); * // => true * * _.isSymbol('abc'); * // => false */ function isSymbol$1(value) { return typeof value == 'symbol' || isObjectLike(value) && baseGetTag(value) == symbolTag; } var isSymbol_1 = isSymbol$1; var Symbol$1 = _Symbol, arrayMap = _arrayMap, isArray$1 = isArray_1, isSymbol = isSymbol_1; /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined; /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. * * @private * @param {*} value The value to process. * @returns {string} Returns the string. */ function baseToString$1(value) { // Exit early for strings to avoid a performance hit in some environments. if (typeof value == 'string') { return value; } if (isArray$1(value)) { // Recursively convert values (susceptible to call stack limits). return arrayMap(value, baseToString$1) + ''; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = value + ''; return result == '0' && 1 / value == -INFINITY ? '-0' : result; } var _baseToString = baseToString$1; var baseToString = _baseToString; /** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {string} Returns the converted string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */ function toString$2(value) { return value == null ? '' : baseToString(value); } var toString_1 = toString$2; var escapeHtmlChar = _escapeHtmlChar, toString$1 = toString_1; /** Used to match HTML entities and HTML characters. */ var reUnescapedHtml = /[&<>"']/g, reHasUnescapedHtml = RegExp(reUnescapedHtml.source); /** * Converts the characters "&", "<", ">", '"', and "'" in `string` to their * corresponding HTML entities. * * **Note:** No other characters are escaped. To escape additional * characters use a third-party library like [_he_](https://mths.be/he). * * Though the ">" character is escaped for symmetry, characters like * ">" and "/" don't need escaping in HTML and have no special meaning * unless they're part of a tag or unquoted attribute value. See * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) * (under "semi-related fun fact") for more details. * * When working with HTML you should always * [quote attribute values](http://wonko.com/post/html-escaping) to reduce * XSS vectors. * * @static * @since 0.1.0 * @memberOf _ * @category String * @param {string} [string=''] The string to escape. * @returns {string} Returns the escaped string. * @example * * _.escape('fred, barney, & pebbles'); * // => 'fred, barney, & pebbles' */ function escape$1(string) { string = toString$1(string); return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string; } var _escape = escape$1; /** Used to match template delimiters. */ var reEscape$1 = /<%-([\s\S]+?)%>/g; var _reEscape = reEscape$1; /** Used to match template delimiters. */ var reEvaluate$1 = /<%([\s\S]+?)%>/g; var _reEvaluate = reEvaluate$1; var escape = _escape, reEscape = _reEscape, reEvaluate = _reEvaluate, reInterpolate$1 = _reInterpolate; /** * By default, the template delimiters used by lodash are like those in * embedded Ruby (ERB) as well as ES2015 template strings. Change the * following template settings to use alternative delimiters. * * @static * @memberOf _ * @type {Object} */ var templateSettings$1 = { /** * Used to detect `data` property values to be HTML-escaped. * * @memberOf _.templateSettings * @type {RegExp} */ 'escape': reEscape, /** * Used to detect code to be evaluated. * * @memberOf _.templateSettings * @type {RegExp} */ 'evaluate': reEvaluate, /** * Used to detect `data` property values to inject. * * @memberOf _.templateSettings * @type {RegExp} */ 'interpolate': reInterpolate$1, /** * Used to reference the data object in the template text. * * @memberOf _.templateSettings * @type {string} */ 'variable': '', /** * Used to import variables into the compiled template. * * @memberOf _.templateSettings * @type {Object} */ 'imports': { /** * A reference to the `lodash` function. * * @memberOf _.templateSettings.imports * @type {Function} */ '_': { 'escape': escape } } }; var templateSettings_1 = templateSettings$1; var assignInWith = assignInWith_1, attempt = attempt_1, baseValues = _baseValues, customDefaultsAssignIn = _customDefaultsAssignIn, escapeStringChar = _escapeStringChar, isError = isError_1, isIterateeCall = _isIterateeCall, keys$1 = keys_1, reInterpolate = _reInterpolate, templateSettings = templateSettings_1, toString = toString_1; /** Error message constants. */ var INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`'; /** Used to match empty string literals in compiled template source. */ var reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; /** * Used to validate the `validate` option in `_.template` variable. * * Forbids characters which could potentially change the meaning of the function argument definition: * - "()," (modification of function parameters) * - "=" (default value) * - "[]{}" (destructuring of function parameters) * - "/" (beginning of a comment) * - whitespace */ var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; /** * Used to match * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). */ var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; /** Used to ensure capturing order of template delimiters. */ var reNoMatch = /($^)/; /** Used to match unescaped characters in compiled string literals. */ var reUnescapedString = /['\n\r\u2028\u2029\\]/g; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$1 = objectProto.hasOwnProperty; /** * Creates a compiled template function that can interpolate data properties * in "interpolate" delimiters, HTML-escape interpolated data properties in * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data * properties may be accessed as free variables in the template. If a setting * object is given, it takes precedence over `_.templateSettings` values. * * **Note:** In the development build `_.template` utilizes * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) * for easier debugging. * * For more information on precompiling templates see * [lodash's custom builds documentation](https://lodash.com/custom-builds). * * For more information on Chrome extension sandboxes see * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). * * @static * @since 0.1.0 * @memberOf _ * @category String * @param {string} [string=''] The template string. * @param {Object} [options={}] The options object. * @param {RegExp} [options.escape=_.templateSettings.escape] * The HTML "escape" delimiter. * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] * The "evaluate" delimiter. * @param {Object} [options.imports=_.templateSettings.imports] * An object to import into the template as free variables. * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] * The "interpolate" delimiter. * @param {string} [options.sourceURL='templateSources[n]'] * The sourceURL of the compiled template. * @param {string} [options.variable='obj'] * The data object variable name. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {Function} Returns the compiled template function. * @example * * // Use the "interpolate" delimiter to create a compiled template. * var compiled = _.template('hello <%= user %>!'); * compiled({ 'user': 'fred' }); * // => 'hello fred!' * * // Use the HTML "escape" delimiter to escape data property values. * var compiled = _.template('<b><%- value %></b>'); * compiled({ 'value': '<script>' }); * // => '<b><script></b>' * * // Use the "evaluate" delimiter to execute JavaScript and generate HTML. * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>'); * compiled({ 'users': ['fred', 'barney'] }); * // => '<li>fred</li><li>barney</li>' * * // Use the internal `print` function in "evaluate" delimiters. * var compiled = _.template('<% print("hello " + user); %>!'); * compiled({ 'user': 'barney' }); * // => 'hello barney!' * * // Use the ES template literal delimiter as an "interpolate" delimiter. * // Disable support by replacing the "interpolate" delimiter. * var compiled = _.template('hello ${ user }!'); * compiled({ 'user': 'pebbles' }); * // => 'hello pebbles!' * * // Use backslashes to treat delimiters as plain text. * var compiled = _.template('<%= "\\<%- value %\\>" %>'); * compiled({ 'value': 'ignored' }); * // => '<%- value %>' * * // Use the `imports` option to import `jQuery` as `jq`. * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>'; * var compiled = _.template(text, { 'imports': { 'jq': jQuery } }); * compiled({ 'users': ['fred', 'barney'] }); * // => '<li>fred</li><li>barney</li>' * * // Use the `sourceURL` option to specify a custom sourceURL for the template. * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' }); * compiled(data); * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector. * * // Use the `variable` option to ensure a with-statement isn't used in the compiled template. * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' }); * compiled.source; * // => function(data) { * // var __t, __p = ''; * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!'; * // return __p; * // } * * // Use custom template delimiters. * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g; * var compiled = _.template('hello {{ user }}!'); * compiled({ 'user': 'mustache' }); * // => 'hello mustache!' * * // Use the `source` property to inline compiled templates for meaningful * // line numbers in error messages and stack traces. * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\ * var JST = {\ * "main": ' + _.template(mainText).source + '\ * };\ * '); */ function template(string, options, guard) { // Based on John Resig's `tmpl` implementation // (http://ejohn.org/blog/javascript-micro-templating/) // and Laura Doktorova's doT.js (https://github.com/olado/doT). var settings = templateSettings.imports._.templateSettings || templateSettings; if (guard && isIterateeCall(string, options, guard)) { options = undefined; } string = toString(string); options = assignInWith({}, options, settings, customDefaultsAssignIn); var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), importsKeys = keys$1(imports), importsValues = baseValues(imports, importsKeys); var isEscaping, isEvaluating, index = 0, interpolate = options.interpolate || reNoMatch, source = "__p += '"; // Compile the regexp to match each delimiter. var reDelimiters = RegExp((options.escape || reNoMatch).source + '|' + interpolate.source + '|' + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + (options.evaluate || reNoMatch).source + '|$', 'g'); // Use a sourceURL for easier debugging. // The sourceURL gets injected into the source that's eval-ed, so be careful // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in // and escape the comment, thus injecting code that gets evaled. var sourceURL = hasOwnProperty$1.call(options, 'sourceURL') ? '//# sourceURL=' + (options.sourceURL + '').replace(/\s/g, ' ') + '\n' : ''; string.replace(reDelimiters, function (match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { interpolateValue || (interpolateValue = esTemplateValue); // Escape characters that can't be included in string literals. source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); // Replace delimiters with snippets. if (escapeValue) { isEscaping = true; source += "' +\n__e(" + escapeValue + ") +\n'"; } if (evaluateValue) { isEvaluating = true; source += "';\n" + evaluateValue + ";\n__p += '"; } if (interpolateValue) { source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; } index = offset + match.length; // The JS engine embedded in Adobe products needs `match` returned in // order to produce the correct `offset` value. return match; }); source += "';\n"; // If `variable` is not specified wrap a with-statement around the generated // code to add the data object to the top of the scope chain. var variable = hasOwnProperty$1.call(options, 'variable') && options.variable; if (!variable) { source = 'with (obj) {\n' + source + '\n}\n'; } // Throw an error if a forbidden character was found in `variable`, to prevent // potential command injection attacks. else if (reForbiddenIdentifierChars.test(variable)) { throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT); } // Cleanup code by stripping empty strings. source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source).replace(reEmptyStringMiddle, '$1').replace(reEmptyStringTrailing, '$1;'); // Frame code as the function body. source = 'function(' + (variable || 'obj') + ') {\n' + (variable ? '' : 'obj || (obj = {});\n') + "var __t, __p = ''" + (isEscaping ? ', __e = _.escape' : '') + (isEvaluating ? ', __j = Array.prototype.join;\n' + "function print() { __p += __j.call(arguments, '') }\n" : ';\n') + source + 'return __p\n}'; var result = attempt(function () { return Function(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues); }); // Provide the compiled function's source by its `toString` method or // the `source` property as a convenience for inlining compiled templates. result.source = source; if (isError(result)) { throw result; } return result; } var template_1 = template; var template$1 = /*@__PURE__*/getDefaultExportFromCjs(template_1); function _extends$c() { _extends$c = Object.assign ? Object.assign.bind() : 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; }; return _extends$c.apply(this, arguments); } /** * Prop Types of a MessageBox component. * Apart from those defined below it extends all {@link SpaceProps} * * @memberof MessageBox * @alias MessageBoxProps */ const sizeVariants = variant({ prop: 'size', variants: { sm: { boxShadow: 'none', [`& > ${cssClass('Button')}`]: { margin: '0px' } } } }); const StyledMessageBox = styled(Box$1)` line-height: ${({ theme }) => theme.lineHeights.default}; border-radius: 4px; color: ${({ theme }) => theme.colors.text}; padding: 12px 22px; white-space: pre-wrap; & .${cssClass('Icon')} { display: flex; } ${sizeVariants}; `; /** * @classdesc * * <img src="components/message-box.png" /> * * Component responsible for rendering standard danger/info/success * messages. * * It has 2 size versions: default and small. Also it can either contain or * don't contain children, which causes different look. * * ### Usage * * ```javascript * import { MessageBox, MessageBoxProps } from '@adminjs/design-system' * ``` * * @component * @subcategory Molecules * @hideconstructor * @see MessageBoxProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-molecules-messagebox--default Storybook} * @example <caption>Different variants</caption> * return ( * <Box py="lg"> * <MessageBox message="Some default message" onCloseClick={() => alert('close clicked')} /> * <MessageBox message="Error message" mt="default" variant="danger" onCloseClick={() => alert('close clicked')} /> * <MessageBox message="Info message" mt="default" variant="info" onCloseClick={() => alert('close clicked')} /> * </Box> * ) * @example <caption>Different variants with children</caption> * return ( * <Box py="lg"> * <MessageBox message="Some default message" onCloseClick={() => alert('close clicked')}> * With inside text * </MessageBox> * <MessageBox message="Error message" mt="default" variant="danger" onCloseClick={() => alert('close clicked')}> * With inside text * </MessageBox> * <MessageBox message="Info message" mt="default" variant="info" onCloseClick={() => alert('close clicked')}> * With inside text * </MessageBox> * </Box> * ) * @example <caption>Small with an icon and inside text</caption> * return ( * <Box py="lg"> * <MessageBox * size="sm" * message="Info message" * mt="default" * variant="info" * icon="MessageCircle" * onCloseClick={() => alert('close clicked')} * > * With inside text * </MessageBox> * </Box> * ) * @section design-system */ const MessageBox = props => { const { onCloseClick, message, icon, children, variant = 'info', size, ...other } = props; const variantIcon = { success: 'Check', danger: 'XCircle', info: 'Info', warning: 'AlertCircle' }; const variantBg = { success: 'successLight', danger: 'errorLight', info: 'infoLight', warning: 'warningLight' }; const variantIconBg = { success: 'success', danger: 'error', info: 'info', warning: 'warning' }; return /*#__PURE__*/React__namespace.default.createElement(Box$1, _extends$c({ className: cssClass('MessageBox') }, other), /*#__PURE__*/React__namespace.default.createElement(StyledMessageBox, { as: "div", bg: variantBg[variant], size: size }, /*#__PURE__*/React__namespace.default.createElement(Box$1, { flex: true, alignItems: "center" }, variantIcon && /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: icon || variantIcon[variant], bg: variantIconBg[variant], color: "white", p: "sm", marginRight: "xl", borderRadius: "50%" }), /*#__PURE__*/React__namespace.default.createElement(Box$1, { as: "div", flexGrow: 1 }, /*#__PURE__*/React__namespace.default.createElement(Text$2, { fontWeight: children ? 500 : 400 }, message)), onCloseClick && /*#__PURE__*/React__namespace.default.createElement(Button, { variant: "text", size: "icon", onClick: onCloseClick, rounded: true, color: variant, ml: "xl" }, /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: "X" }))), /*#__PURE__*/React__namespace.default.createElement(Box$1, { marginLeft: "x3" }, /*#__PURE__*/React__namespace.default.createElement(Text$2, null, children)))); }; MessageBox.displayName = 'MessageBox'; const DropZoneImg = styled.div` width: 100%; height: 100%; background-image: url('${({ src }) => src}'); background-size: cover; background-repeat: no-repeat; background-position: 50% 50%; border-radius: ${({ theme }) => theme.space.sm}; `; const Wrapper$1 = styled.div` padding: ${({ theme }) => theme.space.md}; display: flex; align-items: center; margin-top: ${({ theme }) => theme.space.lg}; gap: ${({ theme }) => theme.space.lg}; border: ${({ theme }) => theme.borders.default}; border-color: ${({ theme }) => theme.colors.grey40}; border-radius: ${({ theme }) => theme.space.sm}; `; /** * @memberof DropZoneItem * @alias DropZoneItemProps */ /** * @classdesc * * <img src="components/drop-zone-item.png" /> * * Single uploaded file. Usually it is used within {@link DropZone}, but it can also be * reused anywhere * * ### Usage * * ```javascript * import { DropZoneItem, DropZoneItemProps } from '@adminjs/design-system' * ``` * * @see DropZoneItem * @hideconstructor * @see DropZoneItemProps * @example * return ( * <DropZoneItem * src="https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.npr.org%2F2019%2F05%2F17%2F724262019%2Fgrumpy-cat-dies-her-spirit-will-live-on-family-says&psig=AOvVaw2ZKtTEZr8N43fx9x-lTITa&ust=1581083274368000&source=images&cd=vfe&ved=0CAIQjRxqFwoTCKidqqyIvecCFQAAAAAdAAAAABAD" * filename="shut-up-it-works.png" * /> * ) * @component * @subcategory Molecules * @section design-system */ const DropZoneItem = props => { const { file, onRemove, filename } = props; let { src } = props; if (file && ['image/png', 'image/jpeg', 'image/gif'].includes(file.type)) { src = URL.createObjectURL(file); } return /*#__PURE__*/React__namespace.default.createElement(Wrapper$1, null, /*#__PURE__*/React__namespace.default.createElement(Box$1, { flex: true, alignItems: "center", justifyContent: "center", width: 40, height: 40 }, src ? /*#__PURE__*/React__namespace.default.createElement(DropZoneImg, { src: src }) : /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: "Paperclip" })), /*#__PURE__*/React__namespace.default.createElement(Box$1, { flex: true, flexDirection: "column", style: { gap: 4 } }, /*#__PURE__*/React__namespace.default.createElement(Text$2, { variant: "sm", fontWeight: 500, lineHeight: "default" }, file?.name || filename), file && /*#__PURE__*/React__namespace.default.createElement(Text$2, { variant: "sm", color: "grey80", lineHeight: "default" }, new Date(file.lastModified).toLocaleString(), " ", humanFileSize(file.size, 'MB'))), onRemove && /*#__PURE__*/React__namespace.default.createElement(Button, { ml: "auto", mr: "md", variant: "light", size: "icon", type: "button", rounded: true, onClick: onRemove }, /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: "X" }))); }; DropZoneItem.displayName = 'DropZoneItem'; const DropZoneImage = () => /*#__PURE__*/React__namespace.default.createElement("svg", { width: "80", height: "72", viewBox: "0 0 80 72", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__namespace.default.createElement("rect", { x: "5.85", y: "9.35", width: "68.3", height: "55.3", rx: "1.65", fill: "white", stroke: "#3B3552", strokeWidth: "0.7" }), /*#__PURE__*/React__namespace.default.createElement("rect", { x: "8.5", y: "12", width: "63", height: "38", rx: "1", fill: "currentColor", fillOpacity: "0.05" }), /*#__PURE__*/React__namespace.default.createElement("circle", { cx: "23.5", cy: "27", r: "8", fill: "currentColor" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M30 16L49.5 50H10.5L30 16Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M53 25L69.5 50H36.5L53 25Z", fill: "#3B3552" }), /*#__PURE__*/React__namespace.default.createElement("path", { d: "M2.5 52V10C2.5 7.79086 4.29086 6 6.5 6H61.5", stroke: "#3B3552", strokeWidth: "0.7", strokeLinecap: "round" })); function _extends$b() { _extends$b = Object.assign ? Object.assign.bind() : 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; }; return _extends$b.apply(this, arguments); } /** * @memberof DropZone * @alias FileSizeUnit */ const validateContentType = (mimeTypes, mimeType) => { if (!mimeTypes || !mimeTypes.length) { return true; } return mimeTypes.includes(mimeType); }; const validateSize = (maxSize, size) => { if (!maxSize) { return true; } if (!size) { return true; } return +maxSize >= +size; }; const inUnit = (size, unit) => { if (!size) { return ''; } return humanFileSize(size, unit); }; const DROPZONE_DEFAULT_TRANSLATIONS = { placeholder: 'Drop your file here, or click to browse', acceptedSize: 'Max size: {{maxSize}}', acceptedType: 'Supports: {{mimeTypes}}', unsupportedSize: 'File {{fileName}} is too big', unsupportedType: 'File {{fileName}} has unsupported type: {{fileType}}' }; const translate = (str, params) => { try { return template$1(str, { interpolate: /\{\{(\w+)\}\}/g })(params); } catch (e) { return str; } }; /** * @returns {void} * @memberof DropZone * @alias OnDropDownChange */ /** * @memberof DropZone * @alias DropZoneProps */ const UploadInput = styled.input` font-size: 100px; position: absolute; left: 0; top: 0; opacity: 0; bottom: 0; cursor: pointer; width: 100%; `; const StyledDropZone = styled(Box$1)` border: 1px dashed ${({ theme }) => theme.colors.inputBorder}; border-radius: ${({ theme }) => theme.space.sm}; position: relative; text-align: center; &:hover { border-color: ${({ theme }) => theme.colors.primary100}; } ${({ isDragging }) => isDragging && Ae` background-color: ${({ theme }) => rgba(theme.colors.primary100, 0.05)}; `} & ${Label} { color: ${({ theme }) => theme.colors.grey60}; font-size: ${({ theme }) => theme.fontSizes.xs}; padding-right: 4px; letter-spacing: 1px; } `; /** * @classdesc * * <img src="components/drop-zone.png" /> * * DropZone which can be used for uploading files. * * ### usage * * ```javascript * import { DropZone, DropZoneProps } from '@adminjs/design-system' * ``` * * how to use it in your custom component.tsx (TypesScript): * ``` * import React, { useState } from 'react' * import { DropZone, Label, BasePropertyProps } from '@adminjs/design-system' * import { unflatten } from 'flat' * * const UploadPhoto: React.FC<BasePropertyProps> = (props) => { * const { property, record, onChange } = props * * const onUpload = (files: FileList) => { * const newRecord = {...record} * const file = files.length && files[0] * * onChange({ * ...newRecord, * params: { * ...newRecord.params, * [property.name]: file, * } * }) * event.preventDefault() * } * * return ( * <Box> * <Label>{property.label}</Label> * <DropZone onChange={onUpload} /> * </Box> * ) * } * ``` * @hideconstructor * @component * @subcategory Molecules * @see FileSizeUnit * @see OnDropDownChange * @see DropZoneProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-molecules-dropzone--default Storybook} * @example <caption>Single file with validation</caption> * const maxSize = 1024 * 100 * const mimeTypes = ['application/pdf'] * const onUpload = (files) => { alert(files,length ? files[0].name : 'no files' ) } * return ( * <Box> * <DropZone * onChange={onUpload} * validate= { { maxSize, mimeTypes } } * /> * </Box> * ) * * @example <caption>Multi file of photos</caption> * const mimeTypes = ['image/png'] * const onUpload = (files) => { alert(files.length ? files.length : 'no files' ) } * return ( * <Box> * <DropZone * multiple * onChange={onUpload} * validate= { { mimeTypes } } * /> * </Box> * ) * @section design-system */ const DropZone = props => { const { validate, onChange, multiple, files: filesFromProps, uploadLimitIn, translations, ...other } = props; const [isDragging, setIsDragging] = React.useState(false); const [error, setError] = React.useState(null); const [filesToUpload, setFilesToUpload] = React.useState(filesFromProps ?? []); const t = { ...DROPZONE_DEFAULT_TRANSLATIONS, ...translations }; React.useEffect(() => { if (filesFromProps) { setFilesToUpload(filesFromProps); } }, [filesFromProps]); const onDragEnter = () => setIsDragging(true); const onDragLeave = () => setIsDragging(false); const onDragOver = () => setIsDragging(true); const removeItem = React.useCallback(index => { const newItems = [...filesToUpload]; newItems.splice(index, 1); if (onChange) { onChange(newItems); } setFilesToUpload(newItems); }, [filesToUpload, setFilesToUpload, onChange]); const onDrop = React.useCallback(event => { event.preventDefault(); setIsDragging(false); const { files } = event.dataTransfer || event.target; const validatedFiles = []; for (let i = 0; i < files.length; i += 1) { const file = files.item(i); if (!file) { return; } if (validate && !validateContentType(validate.mimeTypes, file.type)) { setError(translate(t.unsupportedType, { fileName: file.name, fileType: file.type })); return; } if (validate && !validateSize(validate.maxSize, file && file.size)) { setError(translate(t.unsupportedSize, { fileName: file.name })); return; } validatedFiles.push(file); setError(null); } let newFiles; if (!multiple && validatedFiles.length) { newFiles = [validatedFiles[0]]; } else { newFiles = [...filesToUpload, ...validatedFiles]; } if (onChange) { onChange(newFiles); } setFilesToUpload(newFiles); }, [onChange, setFilesToUpload, setIsDragging]); const displayUploadLimit = React.useCallback(() => { if (validate && validate.maxSize) { return inUnit(validate.maxSize, uploadLimitIn); } return ''; }, [validate]); return /*#__PURE__*/React__namespace.default.createElement(Box$1, null, /*#__PURE__*/React__namespace.default.createElement(StyledDropZone, _extends$b({ onDragEnter: onDragEnter, onDragOver: onDragOver, onDragLeave: onDragLeave, onDrop: onDrop, isDragging: isDragging }, other, { p: "xl" }), /*#__PURE__*/React__namespace.default.createElement(UploadInput, { type: "file", onChange: event => onDrop(event), multiple: multiple }), /*#__PURE__*/React__namespace.default.createElement(Box$1, null, /*#__PURE__*/React__namespace.default.createElement(Box$1, { color: "primary100" }, /*#__PURE__*/React__namespace.default.createElement(DropZoneImage, null)), /*#__PURE__*/React__namespace.default.createElement(Text$2, { fontSize: "sm" }, t.placeholder), /*#__PURE__*/React__namespace.default.createElement(Box$1, null, validate && validate.maxSize ? /*#__PURE__*/React__namespace.default.createElement(Text$2, { variant: "xs", color: "grey60", lineHeight: "default", mt: "sm" }, translate(t.acceptedSize, { maxSize: displayUploadLimit() })) : '', validate && validate.mimeTypes && validate.mimeTypes.length ? /*#__PURE__*/React__namespace.default.createElement(Text$2, { variant: "xs", color: "grey60", lineHeight: "default", mt: "sm" }, translate(t.acceptedType, { mimeTypes: validate.mimeTypes.join(', ') })) : ''))), error && /*#__PURE__*/React__namespace.default.createElement(MessageBox, { mt: "default", variant: "danger", size: "sm", icon: "AlertCircle", message: error, onCloseClick: () => setError(null) }), filesToUpload.map((file, index) => /*#__PURE__*/ // eslint-disable-next-line react/no-array-index-key React__namespace.default.createElement(DropZoneItem, { file: file, key: index, onRemove: () => removeItem(index) }))); }; DropZone.displayName = 'DropZone'; /** * @component * @private */ const InputGroup = styled.div` position: relative; display: flex; width: 100%; ${Input$2} { flex-grow: 1; } ${Input$2}:not(:last-child) { border-right: none; } ${Label}, & > ${Button}, & > ${Link$1}:last-child { padding: ${({ theme }) => theme.space.sm}; border: solid ${({ theme }) => theme.colors.inputBorder}; border-width: 1px 1px 1px 0; border-top-left-radius: 0; border-bottom-left-radius: 0; margin: 0; color: ${({ theme }) => theme.colors.grey40}; } ${Label}, ${Button}, ${Link$1} { flex-shrink: 0; flex-grow: 0; } ${Label}, ${Link$1} { line-height: ${({ theme }) => theme.lineHeights.lg}; } ${Button}:first-child, ${Link$1}:first-child { border-right: 0; } ${Input$2}:hover { & + ${Label}, & + ${Button}, & + ${Link$1} { border-color: ${({ theme }) => theme.colors.grey60}; } } ${Input$2}:focus { & + ${Label}, & + ${Button}, & + ${Link$1} { border-color: ${({ theme }) => theme.colors.primary100}; } } `; InputGroup.displayName = 'InputGroup'; const formGroupDisabledCSS = Ae` color: ${({ theme }) => theme.colors.grey40}; `; const formGroupWithErrorCSS = Ae` color: ${({ theme }) => theme.colors.error}; ${Input$2}, ${CurrencyInput} { color: ${({ theme }) => theme.colors.error}; border-color: ${({ theme }) => theme.colors.error}; } &&& ${Label} { color: ${({ theme }) => theme.colors.error}; &:before { color: ${({ theme }) => theme.colors.error}; } } &&& ${Label}, &&& ${Button}, &&& ${Link$1} { border-color: ${({ theme }) => theme.colors.error}; } `; /** * Props for FormGroup. Apart from props defined here FormGroup supports also all {@link SpaceProps} * @alias FormGroupProps * @memberof FormGroup */ /** * @classdesc * * <img src="components/form-group.png" /> * * FormGroup comes with other, from-related components like: FormMessage and InputGroup. * Together they allow you to build form elements. * * ### Usage * * ```javascript * import { FormGroup, FormGroupProps, InputGroup, FormMessage } from '@adminjs/design-system' * ``` * * @hideconstructor * @component * @see FormGroupProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-molecules-formgroup--default Storybook} * @subcategory Molecules * @example <caption>Example 1: input with all sorts of buttons</caption> * return ( * <Box py="xl"> * <FormGroup> * <Label required>Name</Label> * <InputGroup> * <Button variant="contained" size="icon"> * <Icon icon="ChevronRight" /> * </Button> * <Input /> * <Label>100 KM</Label> * <Button variant="contained" size="icon"> * <Icon icon="ChevronRight" /> * </Button> * </InputGroup> * <FormMessage>And the optional message</FormMessage> * </FormGroup> * </Box> * ) * @example <caption>Example 2: the same input with errors</caption> * return ( * <Box py="xl"> * <FormGroup error> * <Label required>Name</Label> * <InputGroup> * <Button variant="contained" size="icon"> * <Icon icon="ChevronRight" /> * </Button> * <Input /> * <Label>100 KM</Label> * <Button variant="contained" size="icon"> * <Icon icon="ChevronRight" /> * </Button> * </InputGroup> * <FormMessage>And the optional message</FormMessage> * </FormGroup> * </Box> * ) * @example <caption>Example 3: disabled field</caption> * return ( * <Box py="xl"> * <FormGroup disabled> * <Label>Disabled field</Label> * <InputGroup> * <Input disabled /> * </InputGroup> * <FormMessage /> * </FormGroup> * </Box> * ) * @example <caption>Example 4: with a link</caption> * return ( * <Box py="xl"> * <FormGroup> * <Label>Some form data with button link</Label> * <InputGroup> * <Input /> * <Link href="#someHref">This is link</Link> * </InputGroup> * <FormMessage /> * </FormGroup> * </Box> * ) * @section design-system */ const FormGroup = styled.div` width: 100%; ${({ error }) => error ? formGroupWithErrorCSS : ''}; ${({ disabled }) => disabled ? formGroupDisabledCSS : ''}; ${space}; & > ${Input$2}, & > ${CurrencyInput} { width: 100%; } & ${Input$2}, & ${CurrencyInput} { ${({ variant, theme }) => variant === 'filter' ? `border-color: ${theme.colors.inputBorder}` : ''}; ${({ variant, theme }) => variant === 'filter' ? `color: ${theme.colors.text}` : ''}; } & ${InputGroup} { ${Label}, ${Button}:last-child, ${Link$1}:last-child { ${({ variant, theme }) => variant === 'filter' ? `border-color: ${theme.colors.inputBorder}` : ''}; } } & [class*="DatePicker"] > .react-datepicker-wrapper { ${({ variant, theme }) => variant === 'filter' ? `border-color: ${theme.colors.inputBorder}` : ''}; } & [class*="DatePicker"] > .react-datepicker-wrapper input { ${({ variant, theme }) => variant === 'filter' ? `color: ${theme.colors.text}` : ''}; } `; FormGroup.defaultProps = { mb: 'lg' }; FormGroup.displayName = 'FormGroup'; /** * @component * @private */ const FormMessage = styled(Text$2)` box-sizing: border-box; vertical-align: middle; height: ${({ theme }) => theme.space.xl}; margin: ${({ theme }) => theme.space.sm} 0 0; font-weight: normal; font-size: ${({ theme }) => theme.fontSizes.sm}; `; FormMessage.displayName = 'FormMessage'; const StyledInfoBox = styled(Box$1)` display: flex; height: 100%; align-items: center; justify-content: center; flex-direction: column; text-align: center; `; /** * @memberof InfoBox * @alias InfoBoxProps */ /** * @classdesc * * <img src="components/info-box.png" /> * * Used for all type of information like: * * > you don't have x - please add first one" * * in the system. * * ### Usage * * ```javascript * import { InfoBox, InfoBoxProps } from '@adminjs/design-system' * ``` * * @component * @subcategory Molecules * @hideconstructor * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-molecules-infobox--default Storybook} * @see InfoBoxProps * @example * return ( * <InfoBox title="There are no cars in the system"> * <Text>Currently there are no cars in the system</Text> * <Text>To create first click</Text> * <Button mt="lg"><Icon icon="Plus" />Create</Button> * </InfoBox> * ) * @section design-system */ const InfoBox = ({ children, title, illustration, variant = 'transparent', testId }) => /*#__PURE__*/React__namespace.default.createElement(StyledInfoBox, { "data-testid": testId, variant: variant, className: cssClass('InfoBox') }, illustration && typeof illustration === 'string' ? /*#__PURE__*/React__namespace.default.createElement(Illustration, { variant: illustration }) : illustration, title && /*#__PURE__*/React__namespace.default.createElement(H4, { mb: "lg" }, title), children); InfoBox.displayName = 'InfoBox'; const DEFAULT_WIDTH = 540; const VARIANT_BORDER_WIDTH = 8; const variantStyle = (color, props) => { const newPadding = getValueAndUnit(themeGet('space', 'xxl')(props))[0] - VARIANT_BORDER_WIDTH; return { borderLeftWidth: VARIANT_BORDER_WIDTH, borderLeftStyle: 'solid', borderLeftColor: color, paddingLeft: newPadding }; }; const variants = props => variant({ prop: 'variant', variants: { primary: variantStyle('primary100', props), danger: variantStyle('error', props), success: variantStyle('success', props), info: variantStyle('info', props), secondary: variantStyle('accent', props), light: variantStyle('grey60', props), default: {} } }); const ModalStyled = styled(Box$1)` position: relative; & > .close-button { position: absolute; top: ${themeGet('space', 'md')}; right: ${themeGet('space', 'md')}; } & > .modal-label { margin-bottom: 0; margin-top: -${themeGet('space', 'xxl')}; padding-top: ${themeGet('space', 'sm')}; } ${props => variants(props)}; `; ModalStyled.defaultProps = { pl: 'xxl', pr: 'xl', pt: 'x3', pb: 'xxl', bg: 'filterBg', color: 'text', width: [1, DEFAULT_WIDTH] }; function _extends$a() { _extends$a = Object.assign ? Object.assign.bind() : 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; }; return _extends$a.apply(this, arguments); } /** * Modal which can be rendered inline instead of a "modal" * * @memberof Modal * @component * @hideconstructor * @private * @section design-system */ const ModalInline = props => { const { title, subTitle, variant, onClose, children, buttons, label, icon, ...boxProps } = props; return /*#__PURE__*/React__namespace.default.createElement(ModalStyled, _extends$a({ variant: variant }, boxProps), label && /*#__PURE__*/React__namespace.default.createElement(Label, { size: "lg", variant: variant, className: "modal-label" }, icon && /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: icon }), label), title && /*#__PURE__*/React__namespace.default.createElement(H5, null, title), onClose && /*#__PURE__*/React__namespace.default.createElement(Button, { className: "close-button", size: "icon", variant: "text", onClick: onClose, rounded: true }, /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: "X" })), subTitle && /*#__PURE__*/React__namespace.default.createElement(Text$2, null, subTitle), children, buttons && buttons.length && /*#__PURE__*/React__namespace.default.createElement(Box$1, { flex: true, flexDirection: "row", justifyContent: "flex-end", mt: "xl" }, buttons.map((buttonProps, key) => /*#__PURE__*/ // eslint-disable-next-line react/no-array-index-key React__namespace.default.createElement(Button, _extends$a({ key: key, mr: "md", mt: "sm" }, buttonProps))))); }; ModalInline.displayName = 'ModalInline'; const Wrapper = styled(Box$1)` position: fixed; top: 0; left: 0; bottom: 0; right: 0; & > ${ModalStyled} { z-index: 1001; } `; const ModalWrapper = props => { const { onOverlayClick, ...otherProps } = props; const handleOverlayClick = onOverlayClick || (() => true); return /*#__PURE__*/React__namespace.default.createElement(Wrapper, { flex: true, justifyContent: "center", alignItems: "center" }, /*#__PURE__*/React__namespace.default.createElement(Overlay, { onClick: handleOverlayClick }), /*#__PURE__*/React__namespace.default.createElement(ModalInline, otherProps)); }; ModalWrapper.displayName = 'ModalWrapper'; /* eslint-disable max-len */ const ModalPortal = PortalUtils.createPortalForKey('MODAL', ModalWrapper); /** * @load ./modal.doc.md * @component * @subcategory Molecules * @section design-system * @hideconstructor * @new In version 3.3 */ const Modal = props => /*#__PURE__*/React__namespace.default.createElement(ModalPortal, props); Modal.displayName = 'Modal'; const StyledNavigationElement = styled(Box$1)` padding: ${themeGet('space', 'md', '-1px')} ${themeGet('space', 'lg')}; text-decoration: none; color: ${({ theme }) => theme.colors.text}; background-color: transparent; cursor: pointer; border-radius: 4px; transition: all 0.1s ease-in; user-select: none; & > * { align-self: center; } & > .icon-box, & > .arrow-box { flex-shrink: 0; color: ${({ theme }) => theme.colors.grey60}; } & > .icon-box { padding-right: ${themeGet('space', 'lg')}; } & > ${Title} { flex-grow: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; ${({ isSelected }) => isSelected && { fontWeight: 500 }} } ${({ theme, isSelected }) => isSelected && { backgroundColor: rgba(theme.colors.primary100, 0.2), color: theme.colors.primary100, '& > .icon-box': { color: 'inherit' } }} ${({ theme, isSelected }) => !isSelected && { '&:hover': { backgroundColor: rgba(theme.colors.text, 0.2) } }}; `; // The longest part of the label which makes it no-wrap: ellipsis // example: `MongooseWithLongNameAnd with space` should be truncated because 15 lines doesn't fit // the width of the navbar. But "Postgres with long name and spaces" shouldn't be truncated because // its "parts" doesn't exceed 15 chars each. const PART_LENGTH_TO_ELLIPSIS = 15; /** * @load ./navigation-element.doc.md * @component * @subcategory Molecules * @hideconstructor * @see NavigationElementProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-molecules-navigation-element--default Storybook} * @section design-system * @new In version 3.3 */ const NavigationElement = props => { const { isOpen, icon, onClick, label, isSelected, href } = props; const expandable = typeof isOpen !== 'undefined'; const chevron = isOpen ? 'ChevronUp' : 'ChevronDown'; const hasLongName = label.split(' ').reduce((memo, part) => memo.length > part.length ? memo : part, '').length > PART_LENGTH_TO_ELLIPSIS; const handleNavigationClick = event => onClick ? onClick(event, props) : undefined; return /*#__PURE__*/React__namespace.default.createElement(StyledNavigationElement, { flex: true, flexDirection: "row", as: "a", isSelected: isSelected, isOpen: isOpen, href: href, onClick: handleNavigationClick }, icon && /*#__PURE__*/React__namespace.default.createElement(Box$1, { className: "icon-box", as: "span" }, /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: icon })), /*#__PURE__*/React__namespace.default.createElement(Title, { style: { whiteSpace: hasLongName ? 'nowrap' : 'normal' } }, label), expandable && /*#__PURE__*/React__namespace.default.createElement(Box$1, { className: "arrow-box", as: "span" }, /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: chevron }))); }; NavigationElement.displayName = 'NavigationElement'; function paginate(totalItems, currentPage, pageSize, maxPages) { if (currentPage === void 0) { currentPage = 1; } if (pageSize === void 0) { pageSize = 10; } if (maxPages === void 0) { maxPages = 10; } // calculate total pages var totalPages = Math.ceil(totalItems / pageSize); // ensure current page isn't out of range if (currentPage < 1) { currentPage = 1; } else if (currentPage > totalPages) { currentPage = totalPages; } var startPage, endPage; if (totalPages <= maxPages) { // total pages less than max so show all pages startPage = 1; endPage = totalPages; } else { // total pages more than max so calculate start and end pages var maxPagesBeforeCurrentPage = Math.floor(maxPages / 2); var maxPagesAfterCurrentPage = Math.ceil(maxPages / 2) - 1; if (currentPage <= maxPagesBeforeCurrentPage) { // current page near the start startPage = 1; endPage = maxPages; } else if (currentPage + maxPagesAfterCurrentPage >= totalPages) { // current page near the end startPage = totalPages - maxPages + 1; endPage = totalPages; } else { // current page somewhere in the middle startPage = currentPage - maxPagesBeforeCurrentPage; endPage = currentPage + maxPagesAfterCurrentPage; } } // calculate start and end item indexes var startIndex = (currentPage - 1) * pageSize; var endIndex = Math.min(startIndex + pageSize - 1, totalItems - 1); // create an array of pages to ng-repeat in the pager control var pages = Array.from(Array(endPage + 1 - startPage).keys()).map(function (i) { return startPage + i; }); // return object with all pager properties required by the view return { totalItems: totalItems, currentPage: currentPage, pageSize: pageSize, totalPages: totalPages, startPage: startPage, endPage: endPage, startIndex: startIndex, endIndex: endIndex, pages: pages }; } var jwPaginate = paginate; var JWPaginate = /*@__PURE__*/getDefaultExportFromCjs(jwPaginate); function _extends$9() { _extends$9 = Object.assign ? Object.assign.bind() : 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; }; return _extends$9.apply(this, arguments); } const MIN_PAGES_FOR_FIRST_PAGE_BUTTON = 3; const FIRST_PAGE = 1; /** * @alias PaginationProps * @memberof Pagination */ const PaginationButton = props => ({ size: 'icon', variant: props.variant || 'text' }); // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore const PaginationLink = styled(Button).attrs(PaginationButton)` min-width: 28px; height: 28px; line-height: 12px; padding: 3px 6px; text-align: center; `; PaginationLink.defaultProps = { className: cssClass('PaginationLink') }; const PaginationWrapper = styled(Box$1)` display: inline-block; padding: 2px; border: 1px solid ${({ theme }) => theme.colors.border}; & > :hover { text-decoration: none; } & > :first-child { border-right: 1px solid ${({ theme }) => theme.colors.border}; } & > :last-child { border-left: 1px solid ${({ theme }) => theme.colors.border}; } `; /** * @classdesc * * <img src="components/pagination.png" /> * * Pagination component * * ### Usage * * ```javascript * import { Pagination, PaginationProps } from '@adminjs/design-system' * ``` * * @component * @subcategory Molecules * @hideconstructor * @see PaginationProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-molecules-pagination--default Storybook} * @example * const location = { search: ''} * return ( * <Text py="xl" textAlign="center"> * <Pagination * total={100} * page={4} * perPage={10} * location={location} * onChange={(item) => alert(`clicked ${item}`)} * /> * </Text> * ) * @section design-system */ const Pagination = props => { const { total, page, perPage, onChange, ...rest } = props; const currentPage = page || FIRST_PAGE; const paginate = JWPaginate(total, currentPage, perPage); const isFirstPage = currentPage === paginate.startPage; const isLastPage = currentPage === paginate.endPage; const prevPage = isFirstPage ? currentPage : currentPage - 1; const nextPage = isLastPage ? currentPage : currentPage + 1; if (paginate.totalPages === FIRST_PAGE || total === 0) { return null; } return /*#__PURE__*/React__namespace.default.createElement(PaginationWrapper, _extends$9({ className: cssClass('Pagination') }, rest), total >= MIN_PAGES_FOR_FIRST_PAGE_BUTTON ? /*#__PURE__*/React__namespace.default.createElement(PaginationLink, { "data-testid": "first", variant: "text", onClick: () => !isFirstPage ? onChange(FIRST_PAGE) : undefined }, /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: "SkipBack" })) : null, /*#__PURE__*/React__namespace.default.createElement(PaginationLink, { "data-testid": "previous", variant: "text", onClick: () => !isFirstPage ? onChange(prevPage) : undefined }, /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: "ChevronLeft" })), paginate.pages.map(p => /*#__PURE__*/React__namespace.default.createElement(PaginationLink, { key: p, onClick: () => onChange(p), variant: p === currentPage ? 'contained' : 'text', className: cssClass('PaginationLink', p === currentPage ? 'current' : ''), "data-testid": `page-${p}` }, p)), /*#__PURE__*/React__namespace.default.createElement(PaginationLink, { "data-testid": "next", variant: "text", onClick: () => !isLastPage ? onChange(nextPage) : undefined }, /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: "ChevronRight" })), total >= MIN_PAGES_FOR_FIRST_PAGE_BUTTON ? /*#__PURE__*/React__namespace.default.createElement(PaginationLink, { "data-testid": "last", variant: "text", onClick: () => !isLastPage ? onChange(paginate.totalPages) : undefined }, /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: "SkipForward" })) : null); }; Pagination.displayName = 'Pagination'; // ::- Persistent data structure representing an ordered mapping from // strings to values, with some convenient update methods. function OrderedMap(content) { this.content = content; } OrderedMap.prototype = { constructor: OrderedMap, find: function (key) { for (var i = 0; i < this.content.length; i += 2) if (this.content[i] === key) return i; return -1; }, // :: (string) → ?any // Retrieve the value stored under `key`, or return undefined when // no such key exists. get: function (key) { var found = this.find(key); return found == -1 ? undefined : this.content[found + 1]; }, // :: (string, any, ?string) → OrderedMap // Create a new map by replacing the value of `key` with a new // value, or adding a binding to the end of the map. If `newKey` is // given, the key of the binding will be replaced with that key. update: function (key, value, newKey) { var self = newKey && newKey != key ? this.remove(newKey) : this; var found = self.find(key), content = self.content.slice(); if (found == -1) { content.push(newKey || key, value); } else { content[found + 1] = value; if (newKey) content[found] = newKey; } return new OrderedMap(content); }, // :: (string) → OrderedMap // Return a map with the given key removed, if it existed. remove: function (key) { var found = this.find(key); if (found == -1) return this; var content = this.content.slice(); content.splice(found, 2); return new OrderedMap(content); }, // :: (string, any) → OrderedMap // Add a new key to the start of the map. addToStart: function (key, value) { return new OrderedMap([key, value].concat(this.remove(key).content)); }, // :: (string, any) → OrderedMap // Add a new key to the end of the map. addToEnd: function (key, value) { var content = this.remove(key).content.slice(); content.push(key, value); return new OrderedMap(content); }, // :: (string, string, any) → OrderedMap // Add a key after the given key. If `place` is not found, the new // key is added to the end. addBefore: function (place, key, value) { var without = this.remove(key), content = without.content.slice(); var found = without.find(place); content.splice(found == -1 ? content.length : found, 0, key, value); return new OrderedMap(content); }, // :: ((key: string, value: any)) // Call the given function for each key/value pair in the map, in // order. forEach: function (f) { for (var i = 0; i < this.content.length; i += 2) f(this.content[i], this.content[i + 1]); }, // :: (union<Object, OrderedMap>) → OrderedMap // Create a new map by prepending the keys in this map that don't // appear in `map` before the keys in `map`. prepend: function (map) { map = OrderedMap.from(map); if (!map.size) return this; return new OrderedMap(map.content.concat(this.subtract(map).content)); }, // :: (union<Object, OrderedMap>) → OrderedMap // Create a new map by appending the keys in this map that don't // appear in `map` after the keys in `map`. append: function (map) { map = OrderedMap.from(map); if (!map.size) return this; return new OrderedMap(this.subtract(map).content.concat(map.content)); }, // :: (union<Object, OrderedMap>) → OrderedMap // Create a map containing all the keys in this map that don't // appear in `map`. subtract: function (map) { var result = this; map = OrderedMap.from(map); for (var i = 0; i < map.content.length; i += 2) result = result.remove(map.content[i]); return result; }, // :: () → Object // Turn ordered map into a plain object. toObject: function () { var result = {}; this.forEach(function (key, value) { result[key] = value; }); return result; }, // :: number // The amount of keys in this map. get size() { return this.content.length >> 1; } }; // :: (?union<Object, OrderedMap>) → OrderedMap // Return a map with the given content. If null, create an empty // map. If given an ordered map, return that map itself. If given an // object, create a map from the object's properties. OrderedMap.from = function (value) { if (value instanceof OrderedMap) return value; var content = []; if (value) for (var prop in value) content.push(prop, value[prop]); return new OrderedMap(content); }; function findDiffStart(a, b, pos) { for (let i = 0;; i++) { if (i == a.childCount || i == b.childCount) return a.childCount == b.childCount ? null : pos; let childA = a.child(i), childB = b.child(i); if (childA == childB) { pos += childA.nodeSize; continue; } if (!childA.sameMarkup(childB)) return pos; if (childA.isText && childA.text != childB.text) { for (let j = 0; childA.text[j] == childB.text[j]; j++) pos++; return pos; } if (childA.content.size || childB.content.size) { let inner = findDiffStart(childA.content, childB.content, pos + 1); if (inner != null) return inner; } pos += childA.nodeSize; } } function findDiffEnd(a, b, posA, posB) { for (let iA = a.childCount, iB = b.childCount;;) { if (iA == 0 || iB == 0) return iA == iB ? null : { a: posA, b: posB }; let childA = a.child(--iA), childB = b.child(--iB), size = childA.nodeSize; if (childA == childB) { posA -= size; posB -= size; continue; } if (!childA.sameMarkup(childB)) return { a: posA, b: posB }; if (childA.isText && childA.text != childB.text) { let same = 0, minSize = Math.min(childA.text.length, childB.text.length); while (same < minSize && childA.text[childA.text.length - same - 1] == childB.text[childB.text.length - same - 1]) { same++; posA--; posB--; } return { a: posA, b: posB }; } if (childA.content.size || childB.content.size) { let inner = findDiffEnd(childA.content, childB.content, posA - 1, posB - 1); if (inner) return inner; } posA -= size; posB -= size; } } /** A fragment represents a node's collection of child nodes. Like nodes, fragments are persistent data structures, and you should not mutate them or their content. Rather, you create new instances whenever needed. The API tries to make this easy. */ class Fragment { /** @internal */ constructor( /** @internal */ content, size) { this.content = content; this.size = size || 0; if (size == null) for (let i = 0; i < content.length; i++) this.size += content[i].nodeSize; } /** Invoke a callback for all descendant nodes between the given two positions (relative to start of this fragment). Doesn't descend into a node when the callback returns `false`. */ nodesBetween(from, to, f, nodeStart = 0, parent) { for (let i = 0, pos = 0; pos < to; i++) { let child = this.content[i], end = pos + child.nodeSize; if (end > from && f(child, nodeStart + pos, parent || null, i) !== false && child.content.size) { let start = pos + 1; child.nodesBetween(Math.max(0, from - start), Math.min(child.content.size, to - start), f, nodeStart + start); } pos = end; } } /** Call the given callback for every descendant node. `pos` will be relative to the start of the fragment. The callback may return `false` to prevent traversal of a given node's children. */ descendants(f) { this.nodesBetween(0, this.size, f); } /** Extract the text between `from` and `to`. See the same method on [`Node`](https://prosemirror.net/docs/ref/#model.Node.textBetween). */ textBetween(from, to, blockSeparator, leafText) { let text = "", separated = true; this.nodesBetween(from, to, (node, pos) => { if (node.isText) { text += node.text.slice(Math.max(from, pos) - pos, to - pos); separated = !blockSeparator; } else if (node.isLeaf) { if (leafText) { text += typeof leafText === "function" ? leafText(node) : leafText; } else if (node.type.spec.leafText) { text += node.type.spec.leafText(node); } separated = !blockSeparator; } else if (!separated && node.isBlock) { text += blockSeparator; separated = true; } }, 0); return text; } /** Create a new fragment containing the combined content of this fragment and the other. */ append(other) { if (!other.size) return this; if (!this.size) return other; let last = this.lastChild, first = other.firstChild, content = this.content.slice(), i = 0; if (last.isText && last.sameMarkup(first)) { content[content.length - 1] = last.withText(last.text + first.text); i = 1; } for (; i < other.content.length; i++) content.push(other.content[i]); return new Fragment(content, this.size + other.size); } /** Cut out the sub-fragment between the two given positions. */ cut(from, to = this.size) { if (from == 0 && to == this.size) return this; let result = [], size = 0; if (to > from) for (let i = 0, pos = 0; pos < to; i++) { let child = this.content[i], end = pos + child.nodeSize; if (end > from) { if (pos < from || end > to) { if (child.isText) child = child.cut(Math.max(0, from - pos), Math.min(child.text.length, to - pos));else child = child.cut(Math.max(0, from - pos - 1), Math.min(child.content.size, to - pos - 1)); } result.push(child); size += child.nodeSize; } pos = end; } return new Fragment(result, size); } /** @internal */ cutByIndex(from, to) { if (from == to) return Fragment.empty; if (from == 0 && to == this.content.length) return this; return new Fragment(this.content.slice(from, to)); } /** Create a new fragment in which the node at the given index is replaced by the given node. */ replaceChild(index, node) { let current = this.content[index]; if (current == node) return this; let copy = this.content.slice(); let size = this.size + node.nodeSize - current.nodeSize; copy[index] = node; return new Fragment(copy, size); } /** Create a new fragment by prepending the given node to this fragment. */ addToStart(node) { return new Fragment([node].concat(this.content), this.size + node.nodeSize); } /** Create a new fragment by appending the given node to this fragment. */ addToEnd(node) { return new Fragment(this.content.concat(node), this.size + node.nodeSize); } /** Compare this fragment to another one. */ eq(other) { if (this.content.length != other.content.length) return false; for (let i = 0; i < this.content.length; i++) if (!this.content[i].eq(other.content[i])) return false; return true; } /** The first child of the fragment, or `null` if it is empty. */ get firstChild() { return this.content.length ? this.content[0] : null; } /** The last child of the fragment, or `null` if it is empty. */ get lastChild() { return this.content.length ? this.content[this.content.length - 1] : null; } /** The number of child nodes in this fragment. */ get childCount() { return this.content.length; } /** Get the child node at the given index. Raise an error when the index is out of range. */ child(index) { let found = this.content[index]; if (!found) throw new RangeError("Index " + index + " out of range for " + this); return found; } /** Get the child node at the given index, if it exists. */ maybeChild(index) { return this.content[index] || null; } /** Call `f` for every child node, passing the node, its offset into this parent node, and its index. */ forEach(f) { for (let i = 0, p = 0; i < this.content.length; i++) { let child = this.content[i]; f(child, p, i); p += child.nodeSize; } } /** Find the first position at which this fragment and another fragment differ, or `null` if they are the same. */ findDiffStart(other, pos = 0) { return findDiffStart(this, other, pos); } /** Find the first position, searching from the end, at which this fragment and the given fragment differ, or `null` if they are the same. Since this position will not be the same in both nodes, an object with two separate positions is returned. */ findDiffEnd(other, pos = this.size, otherPos = other.size) { return findDiffEnd(this, other, pos, otherPos); } /** Find the index and inner offset corresponding to a given relative position in this fragment. The result object will be reused (overwritten) the next time the function is called. (Not public.) */ findIndex(pos, round = -1) { if (pos == 0) return retIndex(0, pos); if (pos == this.size) return retIndex(this.content.length, pos); if (pos > this.size || pos < 0) throw new RangeError(`Position ${pos} outside of fragment (${this})`); for (let i = 0, curPos = 0;; i++) { let cur = this.child(i), end = curPos + cur.nodeSize; if (end >= pos) { if (end == pos || round > 0) return retIndex(i + 1, end); return retIndex(i, curPos); } curPos = end; } } /** Return a debugging string that describes this fragment. */ toString() { return "<" + this.toStringInner() + ">"; } /** @internal */ toStringInner() { return this.content.join(", "); } /** Create a JSON-serializeable representation of this fragment. */ toJSON() { return this.content.length ? this.content.map(n => n.toJSON()) : null; } /** Deserialize a fragment from its JSON representation. */ static fromJSON(schema, value) { if (!value) return Fragment.empty; if (!Array.isArray(value)) throw new RangeError("Invalid input for Fragment.fromJSON"); return new Fragment(value.map(schema.nodeFromJSON)); } /** Build a fragment from an array of nodes. Ensures that adjacent text nodes with the same marks are joined together. */ static fromArray(array) { if (!array.length) return Fragment.empty; let joined, size = 0; for (let i = 0; i < array.length; i++) { let node = array[i]; size += node.nodeSize; if (i && node.isText && array[i - 1].sameMarkup(node)) { if (!joined) joined = array.slice(0, i); joined[joined.length - 1] = node.withText(joined[joined.length - 1].text + node.text); } else if (joined) { joined.push(node); } } return new Fragment(joined || array, size); } /** Create a fragment from something that can be interpreted as a set of nodes. For `null`, it returns the empty fragment. For a fragment, the fragment itself. For a node or array of nodes, a fragment containing those nodes. */ static from(nodes) { if (!nodes) return Fragment.empty; if (nodes instanceof Fragment) return nodes; if (Array.isArray(nodes)) return this.fromArray(nodes); if (nodes.attrs) return new Fragment([nodes], nodes.nodeSize); throw new RangeError("Can not convert " + nodes + " to a Fragment" + (nodes.nodesBetween ? " (looks like multiple versions of prosemirror-model were loaded)" : "")); } } /** An empty fragment. Intended to be reused whenever a node doesn't contain anything (rather than allocating a new empty fragment for each leaf node). */ Fragment.empty = new Fragment([], 0); const found = { index: 0, offset: 0 }; function retIndex(index, offset) { found.index = index; found.offset = offset; return found; } function compareDeep(a, b) { if (a === b) return true; if (!(a && typeof a == "object") || !(b && typeof b == "object")) return false; let array = Array.isArray(a); if (Array.isArray(b) != array) return false; if (array) { if (a.length != b.length) return false; for (let i = 0; i < a.length; i++) if (!compareDeep(a[i], b[i])) return false; } else { for (let p in a) if (!(p in b) || !compareDeep(a[p], b[p])) return false; for (let p in b) if (!(p in a)) return false; } return true; } /** A mark is a piece of information that can be attached to a node, such as it being emphasized, in code font, or a link. It has a type and optionally a set of attributes that provide further information (such as the target of the link). Marks are created through a `Schema`, which controls which types exist and which attributes they have. */ let Mark$1 = class Mark { /** @internal */ constructor( /** The type of this mark. */ type, /** The attributes associated with this mark. */ attrs) { this.type = type; this.attrs = attrs; } /** Given a set of marks, create a new set which contains this one as well, in the right position. If this mark is already in the set, the set itself is returned. If any marks that are set to be [exclusive](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) with this mark are present, those are replaced by this one. */ addToSet(set) { let copy, placed = false; for (let i = 0; i < set.length; i++) { let other = set[i]; if (this.eq(other)) return set; if (this.type.excludes(other.type)) { if (!copy) copy = set.slice(0, i); } else if (other.type.excludes(this.type)) { return set; } else { if (!placed && other.type.rank > this.type.rank) { if (!copy) copy = set.slice(0, i); copy.push(this); placed = true; } if (copy) copy.push(other); } } if (!copy) copy = set.slice(); if (!placed) copy.push(this); return copy; } /** Remove this mark from the given set, returning a new set. If this mark is not in the set, the set itself is returned. */ removeFromSet(set) { for (let i = 0; i < set.length; i++) if (this.eq(set[i])) return set.slice(0, i).concat(set.slice(i + 1)); return set; } /** Test whether this mark is in the given set of marks. */ isInSet(set) { for (let i = 0; i < set.length; i++) if (this.eq(set[i])) return true; return false; } /** Test whether this mark has the same type and attributes as another mark. */ eq(other) { return this == other || this.type == other.type && compareDeep(this.attrs, other.attrs); } /** Convert this mark to a JSON-serializeable representation. */ toJSON() { let obj = { type: this.type.name }; for (let _ in this.attrs) { obj.attrs = this.attrs; break; } return obj; } /** Deserialize a mark from JSON. */ static fromJSON(schema, json) { if (!json) throw new RangeError("Invalid input for Mark.fromJSON"); let type = schema.marks[json.type]; if (!type) throw new RangeError(`There is no mark type ${json.type} in this schema`); return type.create(json.attrs); } /** Test whether two sets of marks are identical. */ static sameSet(a, b) { if (a == b) return true; if (a.length != b.length) return false; for (let i = 0; i < a.length; i++) if (!a[i].eq(b[i])) return false; return true; } /** Create a properly sorted mark set from null, a single mark, or an unsorted array of marks. */ static setFrom(marks) { if (!marks || Array.isArray(marks) && marks.length == 0) return Mark.none; if (marks instanceof Mark) return [marks]; let copy = marks.slice(); copy.sort((a, b) => a.type.rank - b.type.rank); return copy; } }; /** The empty set of marks. */ Mark$1.none = []; /** Error type raised by [`Node.replace`](https://prosemirror.net/docs/ref/#model.Node.replace) when given an invalid replacement. */ class ReplaceError extends Error {} /* ReplaceError = function(this: any, message: string) { let err = Error.call(this, message) ;(err as any).__proto__ = ReplaceError.prototype return err } as any ReplaceError.prototype = Object.create(Error.prototype) ReplaceError.prototype.constructor = ReplaceError ReplaceError.prototype.name = "ReplaceError" */ /** A slice represents a piece cut out of a larger document. It stores not only a fragment, but also the depth up to which nodes on both side are ‘open’ (cut through). */ class Slice { /** Create a slice. When specifying a non-zero open depth, you must make sure that there are nodes of at least that depth at the appropriate side of the fragment—i.e. if the fragment is an empty paragraph node, `openStart` and `openEnd` can't be greater than 1. It is not necessary for the content of open nodes to conform to the schema's content constraints, though it should be a valid start/end/middle for such a node, depending on which sides are open. */ constructor( /** The slice's content. */ content, /** The open depth at the start of the fragment. */ openStart, /** The open depth at the end. */ openEnd) { this.content = content; this.openStart = openStart; this.openEnd = openEnd; } /** The size this slice would add when inserted into a document. */ get size() { return this.content.size - this.openStart - this.openEnd; } /** @internal */ insertAt(pos, fragment) { let content = insertInto(this.content, pos + this.openStart, fragment); return content && new Slice(content, this.openStart, this.openEnd); } /** @internal */ removeBetween(from, to) { return new Slice(removeRange(this.content, from + this.openStart, to + this.openStart), this.openStart, this.openEnd); } /** Tests whether this slice is equal to another slice. */ eq(other) { return this.content.eq(other.content) && this.openStart == other.openStart && this.openEnd == other.openEnd; } /** @internal */ toString() { return this.content + "(" + this.openStart + "," + this.openEnd + ")"; } /** Convert a slice to a JSON-serializable representation. */ toJSON() { if (!this.content.size) return null; let json = { content: this.content.toJSON() }; if (this.openStart > 0) json.openStart = this.openStart; if (this.openEnd > 0) json.openEnd = this.openEnd; return json; } /** Deserialize a slice from its JSON representation. */ static fromJSON(schema, json) { if (!json) return Slice.empty; let openStart = json.openStart || 0, openEnd = json.openEnd || 0; if (typeof openStart != "number" || typeof openEnd != "number") throw new RangeError("Invalid input for Slice.fromJSON"); return new Slice(Fragment.fromJSON(schema, json.content), openStart, openEnd); } /** Create a slice from a fragment by taking the maximum possible open value on both side of the fragment. */ static maxOpen(fragment, openIsolating = true) { let openStart = 0, openEnd = 0; for (let n = fragment.firstChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.firstChild) openStart++; for (let n = fragment.lastChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.lastChild) openEnd++; return new Slice(fragment, openStart, openEnd); } } /** The empty slice. */ Slice.empty = new Slice(Fragment.empty, 0, 0); function removeRange(content, from, to) { let { index, offset } = content.findIndex(from), child = content.maybeChild(index); let { index: indexTo, offset: offsetTo } = content.findIndex(to); if (offset == from || child.isText) { if (offsetTo != to && !content.child(indexTo).isText) throw new RangeError("Removing non-flat range"); return content.cut(0, from).append(content.cut(to)); } if (index != indexTo) throw new RangeError("Removing non-flat range"); return content.replaceChild(index, child.copy(removeRange(child.content, from - offset - 1, to - offset - 1))); } function insertInto(content, dist, insert, parent) { let { index, offset } = content.findIndex(dist), child = content.maybeChild(index); if (offset == dist || child.isText) { if (parent && !parent.canReplace(index, index, insert)) return null; return content.cut(0, dist).append(insert).append(content.cut(dist)); } let inner = insertInto(child.content, dist - offset - 1, insert); return inner && content.replaceChild(index, child.copy(inner)); } function replace$1($from, $to, slice) { if (slice.openStart > $from.depth) throw new ReplaceError("Inserted content deeper than insertion position"); if ($from.depth - slice.openStart != $to.depth - slice.openEnd) throw new ReplaceError("Inconsistent open depths"); return replaceOuter($from, $to, slice, 0); } function replaceOuter($from, $to, slice, depth) { let index = $from.index(depth), node = $from.node(depth); if (index == $to.index(depth) && depth < $from.depth - slice.openStart) { let inner = replaceOuter($from, $to, slice, depth + 1); return node.copy(node.content.replaceChild(index, inner)); } else if (!slice.content.size) { return close(node, replaceTwoWay($from, $to, depth)); } else if (!slice.openStart && !slice.openEnd && $from.depth == depth && $to.depth == depth) { // Simple, flat case let parent = $from.parent, content = parent.content; return close(parent, content.cut(0, $from.parentOffset).append(slice.content).append(content.cut($to.parentOffset))); } else { let { start, end } = prepareSliceForReplace(slice, $from); return close(node, replaceThreeWay($from, start, end, $to, depth)); } } function checkJoin(main, sub) { if (!sub.type.compatibleContent(main.type)) throw new ReplaceError("Cannot join " + sub.type.name + " onto " + main.type.name); } function joinable$1($before, $after, depth) { let node = $before.node(depth); checkJoin(node, $after.node(depth)); return node; } function addNode(child, target) { let last = target.length - 1; if (last >= 0 && child.isText && child.sameMarkup(target[last])) target[last] = child.withText(target[last].text + child.text);else target.push(child); } function addRange($start, $end, depth, target) { let node = ($end || $start).node(depth); let startIndex = 0, endIndex = $end ? $end.index(depth) : node.childCount; if ($start) { startIndex = $start.index(depth); if ($start.depth > depth) { startIndex++; } else if ($start.textOffset) { addNode($start.nodeAfter, target); startIndex++; } } for (let i = startIndex; i < endIndex; i++) addNode(node.child(i), target); if ($end && $end.depth == depth && $end.textOffset) addNode($end.nodeBefore, target); } function close(node, content) { node.type.checkContent(content); return node.copy(content); } function replaceThreeWay($from, $start, $end, $to, depth) { let openStart = $from.depth > depth && joinable$1($from, $start, depth + 1); let openEnd = $to.depth > depth && joinable$1($end, $to, depth + 1); let content = []; addRange(null, $from, depth, content); if (openStart && openEnd && $start.index(depth) == $end.index(depth)) { checkJoin(openStart, openEnd); addNode(close(openStart, replaceThreeWay($from, $start, $end, $to, depth + 1)), content); } else { if (openStart) addNode(close(openStart, replaceTwoWay($from, $start, depth + 1)), content); addRange($start, $end, depth, content); if (openEnd) addNode(close(openEnd, replaceTwoWay($end, $to, depth + 1)), content); } addRange($to, null, depth, content); return new Fragment(content); } function replaceTwoWay($from, $to, depth) { let content = []; addRange(null, $from, depth, content); if ($from.depth > depth) { let type = joinable$1($from, $to, depth + 1); addNode(close(type, replaceTwoWay($from, $to, depth + 1)), content); } addRange($to, null, depth, content); return new Fragment(content); } function prepareSliceForReplace(slice, $along) { let extra = $along.depth - slice.openStart, parent = $along.node(extra); let node = parent.copy(slice.content); for (let i = extra - 1; i >= 0; i--) node = $along.node(i).copy(Fragment.from(node)); return { start: node.resolveNoCache(slice.openStart + extra), end: node.resolveNoCache(node.content.size - slice.openEnd - extra) }; } /** You can [_resolve_](https://prosemirror.net/docs/ref/#model.Node.resolve) a position to get more information about it. Objects of this class represent such a resolved position, providing various pieces of context information, and some helper methods. Throughout this interface, methods that take an optional `depth` parameter will interpret undefined as `this.depth` and negative numbers as `this.depth + value`. */ class ResolvedPos { /** @internal */ constructor( /** The position that was resolved. */ pos, /** @internal */ path, /** The offset this position has into its parent node. */ parentOffset) { this.pos = pos; this.path = path; this.parentOffset = parentOffset; this.depth = path.length / 3 - 1; } /** @internal */ resolveDepth(val) { if (val == null) return this.depth; if (val < 0) return this.depth + val; return val; } /** The parent node that the position points into. Note that even if a position points into a text node, that node is not considered the parent—text nodes are ‘flat’ in this model, and have no content. */ get parent() { return this.node(this.depth); } /** The root node in which the position was resolved. */ get doc() { return this.node(0); } /** The ancestor node at the given level. `p.node(p.depth)` is the same as `p.parent`. */ node(depth) { return this.path[this.resolveDepth(depth) * 3]; } /** The index into the ancestor at the given level. If this points at the 3rd node in the 2nd paragraph on the top level, for example, `p.index(0)` is 1 and `p.index(1)` is 2. */ index(depth) { return this.path[this.resolveDepth(depth) * 3 + 1]; } /** The index pointing after this position into the ancestor at the given level. */ indexAfter(depth) { depth = this.resolveDepth(depth); return this.index(depth) + (depth == this.depth && !this.textOffset ? 0 : 1); } /** The (absolute) position at the start of the node at the given level. */ start(depth) { depth = this.resolveDepth(depth); return depth == 0 ? 0 : this.path[depth * 3 - 1] + 1; } /** The (absolute) position at the end of the node at the given level. */ end(depth) { depth = this.resolveDepth(depth); return this.start(depth) + this.node(depth).content.size; } /** The (absolute) position directly before the wrapping node at the given level, or, when `depth` is `this.depth + 1`, the original position. */ before(depth) { depth = this.resolveDepth(depth); if (!depth) throw new RangeError("There is no position before the top-level node"); return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1]; } /** The (absolute) position directly after the wrapping node at the given level, or the original position when `depth` is `this.depth + 1`. */ after(depth) { depth = this.resolveDepth(depth); if (!depth) throw new RangeError("There is no position after the top-level node"); return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1] + this.path[depth * 3].nodeSize; } /** When this position points into a text node, this returns the distance between the position and the start of the text node. Will be zero for positions that point between nodes. */ get textOffset() { return this.pos - this.path[this.path.length - 1]; } /** Get the node directly after the position, if any. If the position points into a text node, only the part of that node after the position is returned. */ get nodeAfter() { let parent = this.parent, index = this.index(this.depth); if (index == parent.childCount) return null; let dOff = this.pos - this.path[this.path.length - 1], child = parent.child(index); return dOff ? parent.child(index).cut(dOff) : child; } /** Get the node directly before the position, if any. If the position points into a text node, only the part of that node before the position is returned. */ get nodeBefore() { let index = this.index(this.depth); let dOff = this.pos - this.path[this.path.length - 1]; if (dOff) return this.parent.child(index).cut(0, dOff); return index == 0 ? null : this.parent.child(index - 1); } /** Get the position at the given index in the parent node at the given depth (which defaults to `this.depth`). */ posAtIndex(index, depth) { depth = this.resolveDepth(depth); let node = this.path[depth * 3], pos = depth == 0 ? 0 : this.path[depth * 3 - 1] + 1; for (let i = 0; i < index; i++) pos += node.child(i).nodeSize; return pos; } /** Get the marks at this position, factoring in the surrounding marks' [`inclusive`](https://prosemirror.net/docs/ref/#model.MarkSpec.inclusive) property. If the position is at the start of a non-empty node, the marks of the node after it (if any) are returned. */ marks() { let parent = this.parent, index = this.index(); // In an empty parent, return the empty array if (parent.content.size == 0) return Mark$1.none; // When inside a text node, just return the text node's marks if (this.textOffset) return parent.child(index).marks; let main = parent.maybeChild(index - 1), other = parent.maybeChild(index); // If the `after` flag is true of there is no node before, make // the node after this position the main reference. if (!main) { let tmp = main; main = other; other = tmp; } // Use all marks in the main node, except those that have // `inclusive` set to false and are not present in the other node. let marks = main.marks; for (var i = 0; i < marks.length; i++) if (marks[i].type.spec.inclusive === false && (!other || !marks[i].isInSet(other.marks))) marks = marks[i--].removeFromSet(marks); return marks; } /** Get the marks after the current position, if any, except those that are non-inclusive and not present at position `$end`. This is mostly useful for getting the set of marks to preserve after a deletion. Will return `null` if this position is at the end of its parent node or its parent node isn't a textblock (in which case no marks should be preserved). */ marksAcross($end) { let after = this.parent.maybeChild(this.index()); if (!after || !after.isInline) return null; let marks = after.marks, next = $end.parent.maybeChild($end.index()); for (var i = 0; i < marks.length; i++) if (marks[i].type.spec.inclusive === false && (!next || !marks[i].isInSet(next.marks))) marks = marks[i--].removeFromSet(marks); return marks; } /** The depth up to which this position and the given (non-resolved) position share the same parent nodes. */ sharedDepth(pos) { for (let depth = this.depth; depth > 0; depth--) if (this.start(depth) <= pos && this.end(depth) >= pos) return depth; return 0; } /** Returns a range based on the place where this position and the given position diverge around block content. If both point into the same textblock, for example, a range around that textblock will be returned. If they point into different blocks, the range around those blocks in their shared ancestor is returned. You can pass in an optional predicate that will be called with a parent node to see if a range into that parent is acceptable. */ blockRange(other = this, pred) { if (other.pos < this.pos) return other.blockRange(this); for (let d = this.depth - (this.parent.inlineContent || this.pos == other.pos ? 1 : 0); d >= 0; d--) if (other.pos <= this.end(d) && (!pred || pred(this.node(d)))) return new NodeRange(this, other, d); return null; } /** Query whether the given position shares the same parent node. */ sameParent(other) { return this.pos - this.parentOffset == other.pos - other.parentOffset; } /** Return the greater of this and the given position. */ max(other) { return other.pos > this.pos ? other : this; } /** Return the smaller of this and the given position. */ min(other) { return other.pos < this.pos ? other : this; } /** @internal */ toString() { let str = ""; for (let i = 1; i <= this.depth; i++) str += (str ? "/" : "") + this.node(i).type.name + "_" + this.index(i - 1); return str + ":" + this.parentOffset; } /** @internal */ static resolve(doc, pos) { if (!(pos >= 0 && pos <= doc.content.size)) throw new RangeError("Position " + pos + " out of range"); let path = []; let start = 0, parentOffset = pos; for (let node = doc;;) { let { index, offset } = node.content.findIndex(parentOffset); let rem = parentOffset - offset; path.push(node, index, start + offset); if (!rem) break; node = node.child(index); if (node.isText) break; parentOffset = rem - 1; start += offset + 1; } return new ResolvedPos(pos, path, parentOffset); } /** @internal */ static resolveCached(doc, pos) { for (let i = 0; i < resolveCache.length; i++) { let cached = resolveCache[i]; if (cached.pos == pos && cached.doc == doc) return cached; } let result = resolveCache[resolveCachePos] = ResolvedPos.resolve(doc, pos); resolveCachePos = (resolveCachePos + 1) % resolveCacheSize; return result; } } let resolveCache = [], resolveCachePos = 0, resolveCacheSize = 12; /** Represents a flat range of content, i.e. one that starts and ends in the same node. */ class NodeRange { /** Construct a node range. `$from` and `$to` should point into the same node until at least the given `depth`, since a node range denotes an adjacent set of nodes in a single parent node. */ constructor( /** A resolved position along the start of the content. May have a `depth` greater than this object's `depth` property, since these are the positions that were used to compute the range, not re-resolved positions directly at its boundaries. */ $from, /** A position along the end of the content. See caveat for [`$from`](https://prosemirror.net/docs/ref/#model.NodeRange.$from). */ $to, /** The depth of the node that this range points into. */ depth) { this.$from = $from; this.$to = $to; this.depth = depth; } /** The position at the start of the range. */ get start() { return this.$from.before(this.depth + 1); } /** The position at the end of the range. */ get end() { return this.$to.after(this.depth + 1); } /** The parent node that the range points into. */ get parent() { return this.$from.node(this.depth); } /** The start index of the range in the parent node. */ get startIndex() { return this.$from.index(this.depth); } /** The end index of the range in the parent node. */ get endIndex() { return this.$to.indexAfter(this.depth); } } const emptyAttrs = Object.create(null); /** This class represents a node in the tree that makes up a ProseMirror document. So a document is an instance of `Node`, with children that are also instances of `Node`. Nodes are persistent data structures. Instead of changing them, you create new ones with the content you want. Old ones keep pointing at the old document shape. This is made cheaper by sharing structure between the old and new data as much as possible, which a tree shape like this (without back pointers) makes easy. **Do not** directly mutate the properties of a `Node` object. See [the guide](/docs/guide/#doc) for more information. */ let Node$2 = class Node { /** @internal */ constructor( /** The type of node that this is. */ type, /** An object mapping attribute names to values. The kind of attributes allowed and required are [determined](https://prosemirror.net/docs/ref/#model.NodeSpec.attrs) by the node type. */ attrs, // A fragment holding the node's children. content, /** The marks (things like whether it is emphasized or part of a link) applied to this node. */ marks = Mark$1.none) { this.type = type; this.attrs = attrs; this.marks = marks; this.content = content || Fragment.empty; } /** The size of this node, as defined by the integer-based [indexing scheme](/docs/guide/#doc.indexing). For text nodes, this is the amount of characters. For other leaf nodes, it is one. For non-leaf nodes, it is the size of the content plus two (the start and end token). */ get nodeSize() { return this.isLeaf ? 1 : 2 + this.content.size; } /** The number of children that the node has. */ get childCount() { return this.content.childCount; } /** Get the child node at the given index. Raises an error when the index is out of range. */ child(index) { return this.content.child(index); } /** Get the child node at the given index, if it exists. */ maybeChild(index) { return this.content.maybeChild(index); } /** Call `f` for every child node, passing the node, its offset into this parent node, and its index. */ forEach(f) { this.content.forEach(f); } /** Invoke a callback for all descendant nodes recursively between the given two positions that are relative to start of this node's content. The callback is invoked with the node, its parent-relative position, its parent node, and its child index. When the callback returns false for a given node, that node's children will not be recursed over. The last parameter can be used to specify a starting position to count from. */ nodesBetween(from, to, f, startPos = 0) { this.content.nodesBetween(from, to, f, startPos, this); } /** Call the given callback for every descendant node. Doesn't descend into a node when the callback returns `false`. */ descendants(f) { this.nodesBetween(0, this.content.size, f); } /** Concatenates all the text nodes found in this fragment and its children. */ get textContent() { return this.isLeaf && this.type.spec.leafText ? this.type.spec.leafText(this) : this.textBetween(0, this.content.size, ""); } /** Get all text between positions `from` and `to`. When `blockSeparator` is given, it will be inserted to separate text from different block nodes. If `leafText` is given, it'll be inserted for every non-text leaf node encountered, otherwise [`leafText`](https://prosemirror.net/docs/ref/#model.NodeSpec^leafText) will be used. */ textBetween(from, to, blockSeparator, leafText) { return this.content.textBetween(from, to, blockSeparator, leafText); } /** Returns this node's first child, or `null` if there are no children. */ get firstChild() { return this.content.firstChild; } /** Returns this node's last child, or `null` if there are no children. */ get lastChild() { return this.content.lastChild; } /** Test whether two nodes represent the same piece of document. */ eq(other) { return this == other || this.sameMarkup(other) && this.content.eq(other.content); } /** Compare the markup (type, attributes, and marks) of this node to those of another. Returns `true` if both have the same markup. */ sameMarkup(other) { return this.hasMarkup(other.type, other.attrs, other.marks); } /** Check whether this node's markup correspond to the given type, attributes, and marks. */ hasMarkup(type, attrs, marks) { return this.type == type && compareDeep(this.attrs, attrs || type.defaultAttrs || emptyAttrs) && Mark$1.sameSet(this.marks, marks || Mark$1.none); } /** Create a new node with the same markup as this node, containing the given content (or empty, if no content is given). */ copy(content = null) { if (content == this.content) return this; return new Node(this.type, this.attrs, content, this.marks); } /** Create a copy of this node, with the given set of marks instead of the node's own marks. */ mark(marks) { return marks == this.marks ? this : new Node(this.type, this.attrs, this.content, marks); } /** Create a copy of this node with only the content between the given positions. If `to` is not given, it defaults to the end of the node. */ cut(from, to = this.content.size) { if (from == 0 && to == this.content.size) return this; return this.copy(this.content.cut(from, to)); } /** Cut out the part of the document between the given positions, and return it as a `Slice` object. */ slice(from, to = this.content.size, includeParents = false) { if (from == to) return Slice.empty; let $from = this.resolve(from), $to = this.resolve(to); let depth = includeParents ? 0 : $from.sharedDepth(to); let start = $from.start(depth), node = $from.node(depth); let content = node.content.cut($from.pos - start, $to.pos - start); return new Slice(content, $from.depth - depth, $to.depth - depth); } /** Replace the part of the document between the given positions with the given slice. The slice must 'fit', meaning its open sides must be able to connect to the surrounding content, and its content nodes must be valid children for the node they are placed into. If any of this is violated, an error of type [`ReplaceError`](https://prosemirror.net/docs/ref/#model.ReplaceError) is thrown. */ replace(from, to, slice) { return replace$1(this.resolve(from), this.resolve(to), slice); } /** Find the node directly after the given position. */ nodeAt(pos) { for (let node = this;;) { let { index, offset } = node.content.findIndex(pos); node = node.maybeChild(index); if (!node) return null; if (offset == pos || node.isText) return node; pos -= offset + 1; } } /** Find the (direct) child node after the given offset, if any, and return it along with its index and offset relative to this node. */ childAfter(pos) { let { index, offset } = this.content.findIndex(pos); return { node: this.content.maybeChild(index), index, offset }; } /** Find the (direct) child node before the given offset, if any, and return it along with its index and offset relative to this node. */ childBefore(pos) { if (pos == 0) return { node: null, index: 0, offset: 0 }; let { index, offset } = this.content.findIndex(pos); if (offset < pos) return { node: this.content.child(index), index, offset }; let node = this.content.child(index - 1); return { node, index: index - 1, offset: offset - node.nodeSize }; } /** Resolve the given position in the document, returning an [object](https://prosemirror.net/docs/ref/#model.ResolvedPos) with information about its context. */ resolve(pos) { return ResolvedPos.resolveCached(this, pos); } /** @internal */ resolveNoCache(pos) { return ResolvedPos.resolve(this, pos); } /** Test whether a given mark or mark type occurs in this document between the two given positions. */ rangeHasMark(from, to, type) { let found = false; if (to > from) this.nodesBetween(from, to, node => { if (type.isInSet(node.marks)) found = true; return !found; }); return found; } /** True when this is a block (non-inline node) */ get isBlock() { return this.type.isBlock; } /** True when this is a textblock node, a block node with inline content. */ get isTextblock() { return this.type.isTextblock; } /** True when this node allows inline content. */ get inlineContent() { return this.type.inlineContent; } /** True when this is an inline node (a text node or a node that can appear among text). */ get isInline() { return this.type.isInline; } /** True when this is a text node. */ get isText() { return this.type.isText; } /** True when this is a leaf node. */ get isLeaf() { return this.type.isLeaf; } /** True when this is an atom, i.e. when it does not have directly editable content. This is usually the same as `isLeaf`, but can be configured with the [`atom` property](https://prosemirror.net/docs/ref/#model.NodeSpec.atom) on a node's spec (typically used when the node is displayed as an uneditable [node view](https://prosemirror.net/docs/ref/#view.NodeView)). */ get isAtom() { return this.type.isAtom; } /** Return a string representation of this node for debugging purposes. */ toString() { if (this.type.spec.toDebugString) return this.type.spec.toDebugString(this); let name = this.type.name; if (this.content.size) name += "(" + this.content.toStringInner() + ")"; return wrapMarks(this.marks, name); } /** Get the content match in this node at the given index. */ contentMatchAt(index) { let match = this.type.contentMatch.matchFragment(this.content, 0, index); if (!match) throw new Error("Called contentMatchAt on a node with invalid content"); return match; } /** Test whether replacing the range between `from` and `to` (by child index) with the given replacement fragment (which defaults to the empty fragment) would leave the node's content valid. You can optionally pass `start` and `end` indices into the replacement fragment. */ canReplace(from, to, replacement = Fragment.empty, start = 0, end = replacement.childCount) { let one = this.contentMatchAt(from).matchFragment(replacement, start, end); let two = one && one.matchFragment(this.content, to); if (!two || !two.validEnd) return false; for (let i = start; i < end; i++) if (!this.type.allowsMarks(replacement.child(i).marks)) return false; return true; } /** Test whether replacing the range `from` to `to` (by index) with a node of the given type would leave the node's content valid. */ canReplaceWith(from, to, type, marks) { if (marks && !this.type.allowsMarks(marks)) return false; let start = this.contentMatchAt(from).matchType(type); let end = start && start.matchFragment(this.content, to); return end ? end.validEnd : false; } /** Test whether the given node's content could be appended to this node. If that node is empty, this will only return true if there is at least one node type that can appear in both nodes (to avoid merging completely incompatible nodes). */ canAppend(other) { if (other.content.size) return this.canReplace(this.childCount, this.childCount, other.content);else return this.type.compatibleContent(other.type); } /** Check whether this node and its descendants conform to the schema, and raise error when they do not. */ check() { this.type.checkContent(this.content); let copy = Mark$1.none; for (let i = 0; i < this.marks.length; i++) copy = this.marks[i].addToSet(copy); if (!Mark$1.sameSet(copy, this.marks)) throw new RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map(m => m.type.name)}`); this.content.forEach(node => node.check()); } /** Return a JSON-serializeable representation of this node. */ toJSON() { let obj = { type: this.type.name }; for (let _ in this.attrs) { obj.attrs = this.attrs; break; } if (this.content.size) obj.content = this.content.toJSON(); if (this.marks.length) obj.marks = this.marks.map(n => n.toJSON()); return obj; } /** Deserialize a node from its JSON representation. */ static fromJSON(schema, json) { if (!json) throw new RangeError("Invalid input for Node.fromJSON"); let marks = null; if (json.marks) { if (!Array.isArray(json.marks)) throw new RangeError("Invalid mark data for Node.fromJSON"); marks = json.marks.map(schema.markFromJSON); } if (json.type == "text") { if (typeof json.text != "string") throw new RangeError("Invalid text node in JSON"); return schema.text(json.text, marks); } let content = Fragment.fromJSON(schema, json.content); return schema.nodeType(json.type).create(json.attrs, content, marks); } }; Node$2.prototype.text = undefined; class TextNode extends Node$2 { /** @internal */ constructor(type, attrs, content, marks) { super(type, attrs, null, marks); if (!content) throw new RangeError("Empty text nodes are not allowed"); this.text = content; } toString() { if (this.type.spec.toDebugString) return this.type.spec.toDebugString(this); return wrapMarks(this.marks, JSON.stringify(this.text)); } get textContent() { return this.text; } textBetween(from, to) { return this.text.slice(from, to); } get nodeSize() { return this.text.length; } mark(marks) { return marks == this.marks ? this : new TextNode(this.type, this.attrs, this.text, marks); } withText(text) { if (text == this.text) return this; return new TextNode(this.type, this.attrs, text, this.marks); } cut(from = 0, to = this.text.length) { if (from == 0 && to == this.text.length) return this; return this.withText(this.text.slice(from, to)); } eq(other) { return this.sameMarkup(other) && this.text == other.text; } toJSON() { let base = super.toJSON(); base.text = this.text; return base; } } function wrapMarks(marks, str) { for (let i = marks.length - 1; i >= 0; i--) str = marks[i].type.name + "(" + str + ")"; return str; } /** Instances of this class represent a match state of a node type's [content expression](https://prosemirror.net/docs/ref/#model.NodeSpec.content), and can be used to find out whether further content matches here, and whether a given position is a valid end of the node. */ class ContentMatch { /** @internal */ constructor( /** True when this match state represents a valid end of the node. */ validEnd) { this.validEnd = validEnd; /** @internal */ this.next = []; /** @internal */ this.wrapCache = []; } /** @internal */ static parse(string, nodeTypes) { let stream = new TokenStream(string, nodeTypes); if (stream.next == null) return ContentMatch.empty; let expr = parseExpr(stream); if (stream.next) stream.err("Unexpected trailing text"); let match = dfa(nfa(expr)); checkForDeadEnds(match, stream); return match; } /** Match a node type, returning a match after that node if successful. */ matchType(type) { for (let i = 0; i < this.next.length; i++) if (this.next[i].type == type) return this.next[i].next; return null; } /** Try to match a fragment. Returns the resulting match when successful. */ matchFragment(frag, start = 0, end = frag.childCount) { let cur = this; for (let i = start; cur && i < end; i++) cur = cur.matchType(frag.child(i).type); return cur; } /** @internal */ get inlineContent() { return this.next.length != 0 && this.next[0].type.isInline; } /** Get the first matching node type at this match position that can be generated. */ get defaultType() { for (let i = 0; i < this.next.length; i++) { let { type } = this.next[i]; if (!(type.isText || type.hasRequiredAttrs())) return type; } return null; } /** @internal */ compatible(other) { for (let i = 0; i < this.next.length; i++) for (let j = 0; j < other.next.length; j++) if (this.next[i].type == other.next[j].type) return true; return false; } /** Try to match the given fragment, and if that fails, see if it can be made to match by inserting nodes in front of it. When successful, return a fragment of inserted nodes (which may be empty if nothing had to be inserted). When `toEnd` is true, only return a fragment if the resulting match goes to the end of the content expression. */ fillBefore(after, toEnd = false, startIndex = 0) { let seen = [this]; function search(match, types) { let finished = match.matchFragment(after, startIndex); if (finished && (!toEnd || finished.validEnd)) return Fragment.from(types.map(tp => tp.createAndFill())); for (let i = 0; i < match.next.length; i++) { let { type, next } = match.next[i]; if (!(type.isText || type.hasRequiredAttrs()) && seen.indexOf(next) == -1) { seen.push(next); let found = search(next, types.concat(type)); if (found) return found; } } return null; } return search(this, []); } /** Find a set of wrapping node types that would allow a node of the given type to appear at this position. The result may be empty (when it fits directly) and will be null when no such wrapping exists. */ findWrapping(target) { for (let i = 0; i < this.wrapCache.length; i += 2) if (this.wrapCache[i] == target) return this.wrapCache[i + 1]; let computed = this.computeWrapping(target); this.wrapCache.push(target, computed); return computed; } /** @internal */ computeWrapping(target) { let seen = Object.create(null), active = [{ match: this, type: null, via: null }]; while (active.length) { let current = active.shift(), match = current.match; if (match.matchType(target)) { let result = []; for (let obj = current; obj.type; obj = obj.via) result.push(obj.type); return result.reverse(); } for (let i = 0; i < match.next.length; i++) { let { type, next } = match.next[i]; if (!type.isLeaf && !type.hasRequiredAttrs() && !(type.name in seen) && (!current.type || next.validEnd)) { active.push({ match: type.contentMatch, type, via: current }); seen[type.name] = true; } } } return null; } /** The number of outgoing edges this node has in the finite automaton that describes the content expression. */ get edgeCount() { return this.next.length; } /** Get the _n_th outgoing edge from this node in the finite automaton that describes the content expression. */ edge(n) { if (n >= this.next.length) throw new RangeError(`There's no ${n}th edge in this content match`); return this.next[n]; } /** @internal */ toString() { let seen = []; function scan(m) { seen.push(m); for (let i = 0; i < m.next.length; i++) if (seen.indexOf(m.next[i].next) == -1) scan(m.next[i].next); } scan(this); return seen.map((m, i) => { let out = i + (m.validEnd ? "*" : " ") + " "; for (let i = 0; i < m.next.length; i++) out += (i ? ", " : "") + m.next[i].type.name + "->" + seen.indexOf(m.next[i].next); return out; }).join("\n"); } } /** @internal */ ContentMatch.empty = new ContentMatch(true); class TokenStream { constructor(string, nodeTypes) { this.string = string; this.nodeTypes = nodeTypes; this.inline = null; this.pos = 0; this.tokens = string.split(/\s*(?=\b|\W|$)/); if (this.tokens[this.tokens.length - 1] == "") this.tokens.pop(); if (this.tokens[0] == "") this.tokens.shift(); } get next() { return this.tokens[this.pos]; } eat(tok) { return this.next == tok && (this.pos++ || true); } err(str) { throw new SyntaxError(str + " (in content expression '" + this.string + "')"); } } function parseExpr(stream) { let exprs = []; do { exprs.push(parseExprSeq(stream)); } while (stream.eat("|")); return exprs.length == 1 ? exprs[0] : { type: "choice", exprs }; } function parseExprSeq(stream) { let exprs = []; do { exprs.push(parseExprSubscript(stream)); } while (stream.next && stream.next != ")" && stream.next != "|"); return exprs.length == 1 ? exprs[0] : { type: "seq", exprs }; } function parseExprSubscript(stream) { let expr = parseExprAtom(stream); for (;;) { if (stream.eat("+")) expr = { type: "plus", expr };else if (stream.eat("*")) expr = { type: "star", expr };else if (stream.eat("?")) expr = { type: "opt", expr };else if (stream.eat("{")) expr = parseExprRange(stream, expr);else break; } return expr; } function parseNum(stream) { if (/\D/.test(stream.next)) stream.err("Expected number, got '" + stream.next + "'"); let result = Number(stream.next); stream.pos++; return result; } function parseExprRange(stream, expr) { let min = parseNum(stream), max = min; if (stream.eat(",")) { if (stream.next != "}") max = parseNum(stream);else max = -1; } if (!stream.eat("}")) stream.err("Unclosed braced range"); return { type: "range", min, max, expr }; } function resolveName(stream, name) { let types = stream.nodeTypes, type = types[name]; if (type) return [type]; let result = []; for (let typeName in types) { let type = types[typeName]; if (type.groups.indexOf(name) > -1) result.push(type); } if (result.length == 0) stream.err("No node type or group '" + name + "' found"); return result; } function parseExprAtom(stream) { if (stream.eat("(")) { let expr = parseExpr(stream); if (!stream.eat(")")) stream.err("Missing closing paren"); return expr; } else if (!/\W/.test(stream.next)) { let exprs = resolveName(stream, stream.next).map(type => { if (stream.inline == null) stream.inline = type.isInline;else if (stream.inline != type.isInline) stream.err("Mixing inline and block content"); return { type: "name", value: type }; }); stream.pos++; return exprs.length == 1 ? exprs[0] : { type: "choice", exprs }; } else { stream.err("Unexpected token '" + stream.next + "'"); } } /** Construct an NFA from an expression as returned by the parser. The NFA is represented as an array of states, which are themselves arrays of edges, which are `{term, to}` objects. The first state is the entry state and the last node is the success state. Note that unlike typical NFAs, the edge ordering in this one is significant, in that it is used to contruct filler content when necessary. */ function nfa(expr) { let nfa = [[]]; connect(compile(expr, 0), node()); return nfa; function node() { return nfa.push([]) - 1; } function edge(from, to, term) { let edge = { term, to }; nfa[from].push(edge); return edge; } function connect(edges, to) { edges.forEach(edge => edge.to = to); } function compile(expr, from) { if (expr.type == "choice") { return expr.exprs.reduce((out, expr) => out.concat(compile(expr, from)), []); } else if (expr.type == "seq") { for (let i = 0;; i++) { let next = compile(expr.exprs[i], from); if (i == expr.exprs.length - 1) return next; connect(next, from = node()); } } else if (expr.type == "star") { let loop = node(); edge(from, loop); connect(compile(expr.expr, loop), loop); return [edge(loop)]; } else if (expr.type == "plus") { let loop = node(); connect(compile(expr.expr, from), loop); connect(compile(expr.expr, loop), loop); return [edge(loop)]; } else if (expr.type == "opt") { return [edge(from)].concat(compile(expr.expr, from)); } else if (expr.type == "range") { let cur = from; for (let i = 0; i < expr.min; i++) { let next = node(); connect(compile(expr.expr, cur), next); cur = next; } if (expr.max == -1) { connect(compile(expr.expr, cur), cur); } else { for (let i = expr.min; i < expr.max; i++) { let next = node(); edge(cur, next); connect(compile(expr.expr, cur), next); cur = next; } } return [edge(cur)]; } else if (expr.type == "name") { return [edge(from, undefined, expr.value)]; } else { throw new Error("Unknown expr type"); } } } function cmp(a, b) { return b - a; } // Get the set of nodes reachable by null edges from `node`. Omit // nodes with only a single null-out-edge, since they may lead to // needless duplicated nodes. function nullFrom(nfa, node) { let result = []; scan(node); return result.sort(cmp); function scan(node) { let edges = nfa[node]; if (edges.length == 1 && !edges[0].term) return scan(edges[0].to); result.push(node); for (let i = 0; i < edges.length; i++) { let { term, to } = edges[i]; if (!term && result.indexOf(to) == -1) scan(to); } } } // Compiles an NFA as produced by `nfa` into a DFA, modeled as a set // of state objects (`ContentMatch` instances) with transitions // between them. function dfa(nfa) { let labeled = Object.create(null); return explore(nullFrom(nfa, 0)); function explore(states) { let out = []; states.forEach(node => { nfa[node].forEach(({ term, to }) => { if (!term) return; let set; for (let i = 0; i < out.length; i++) if (out[i][0] == term) set = out[i][1]; nullFrom(nfa, to).forEach(node => { if (!set) out.push([term, set = []]); if (set.indexOf(node) == -1) set.push(node); }); }); }); let state = labeled[states.join(",")] = new ContentMatch(states.indexOf(nfa.length - 1) > -1); for (let i = 0; i < out.length; i++) { let states = out[i][1].sort(cmp); state.next.push({ type: out[i][0], next: labeled[states.join(",")] || explore(states) }); } return state; } } function checkForDeadEnds(match, stream) { for (let i = 0, work = [match]; i < work.length; i++) { let state = work[i], dead = !state.validEnd, nodes = []; for (let j = 0; j < state.next.length; j++) { let { type, next } = state.next[j]; nodes.push(type.name); if (dead && !(type.isText || type.hasRequiredAttrs())) dead = false; if (work.indexOf(next) == -1) work.push(next); } if (dead) stream.err("Only non-generatable nodes (" + nodes.join(", ") + ") in a required position (see https://prosemirror.net/docs/guide/#generatable)"); } } // For node types where all attrs have a default value (or which don't // have any attributes), build up a single reusable default attribute // object, and use it for all nodes that don't specify specific // attributes. function defaultAttrs(attrs) { let defaults = Object.create(null); for (let attrName in attrs) { let attr = attrs[attrName]; if (!attr.hasDefault) return null; defaults[attrName] = attr.default; } return defaults; } function computeAttrs(attrs, value) { let built = Object.create(null); for (let name in attrs) { let given = value && value[name]; if (given === undefined) { let attr = attrs[name]; if (attr.hasDefault) given = attr.default;else throw new RangeError("No value supplied for attribute " + name); } built[name] = given; } return built; } function initAttrs(attrs) { let result = Object.create(null); if (attrs) for (let name in attrs) result[name] = new Attribute(attrs[name]); return result; } /** Node types are objects allocated once per `Schema` and used to [tag](https://prosemirror.net/docs/ref/#model.Node.type) `Node` instances. They contain information about the node type, such as its name and what kind of node it represents. */ let NodeType$1 = class NodeType { /** @internal */ constructor( /** The name the node type has in this schema. */ name, /** A link back to the `Schema` the node type belongs to. */ schema, /** The spec that this type is based on */ spec) { this.name = name; this.schema = schema; this.spec = spec; /** The set of marks allowed in this node. `null` means all marks are allowed. */ this.markSet = null; this.groups = spec.group ? spec.group.split(" ") : []; this.attrs = initAttrs(spec.attrs); this.defaultAttrs = defaultAttrs(this.attrs); this.contentMatch = null; this.inlineContent = null; this.isBlock = !(spec.inline || name == "text"); this.isText = name == "text"; } /** True if this is an inline type. */ get isInline() { return !this.isBlock; } /** True if this is a textblock type, a block that contains inline content. */ get isTextblock() { return this.isBlock && this.inlineContent; } /** True for node types that allow no content. */ get isLeaf() { return this.contentMatch == ContentMatch.empty; } /** True when this node is an atom, i.e. when it does not have directly editable content. */ get isAtom() { return this.isLeaf || !!this.spec.atom; } /** The node type's [whitespace](https://prosemirror.net/docs/ref/#model.NodeSpec.whitespace) option. */ get whitespace() { return this.spec.whitespace || (this.spec.code ? "pre" : "normal"); } /** Tells you whether this node type has any required attributes. */ hasRequiredAttrs() { for (let n in this.attrs) if (this.attrs[n].isRequired) return true; return false; } /** Indicates whether this node allows some of the same content as the given node type. */ compatibleContent(other) { return this == other || this.contentMatch.compatible(other.contentMatch); } /** @internal */ computeAttrs(attrs) { if (!attrs && this.defaultAttrs) return this.defaultAttrs;else return computeAttrs(this.attrs, attrs); } /** Create a `Node` of this type. The given attributes are checked and defaulted (you can pass `null` to use the type's defaults entirely, if no required attributes exist). `content` may be a `Fragment`, a node, an array of nodes, or `null`. Similarly `marks` may be `null` to default to the empty set of marks. */ create(attrs = null, content, marks) { if (this.isText) throw new Error("NodeType.create can't construct text nodes"); return new Node$2(this, this.computeAttrs(attrs), Fragment.from(content), Mark$1.setFrom(marks)); } /** Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but check the given content against the node type's content restrictions, and throw an error if it doesn't match. */ createChecked(attrs = null, content, marks) { content = Fragment.from(content); this.checkContent(content); return new Node$2(this, this.computeAttrs(attrs), content, Mark$1.setFrom(marks)); } /** Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but see if it is necessary to add nodes to the start or end of the given fragment to make it fit the node. If no fitting wrapping can be found, return null. Note that, due to the fact that required nodes can always be created, this will always succeed if you pass null or `Fragment.empty` as content. */ createAndFill(attrs = null, content, marks) { attrs = this.computeAttrs(attrs); content = Fragment.from(content); if (content.size) { let before = this.contentMatch.fillBefore(content); if (!before) return null; content = before.append(content); } let matched = this.contentMatch.matchFragment(content); let after = matched && matched.fillBefore(Fragment.empty, true); if (!after) return null; return new Node$2(this, attrs, content.append(after), Mark$1.setFrom(marks)); } /** Returns true if the given fragment is valid content for this node type with the given attributes. */ validContent(content) { let result = this.contentMatch.matchFragment(content); if (!result || !result.validEnd) return false; for (let i = 0; i < content.childCount; i++) if (!this.allowsMarks(content.child(i).marks)) return false; return true; } /** Throws a RangeError if the given fragment is not valid content for this node type. @internal */ checkContent(content) { if (!this.validContent(content)) throw new RangeError(`Invalid content for node ${this.name}: ${content.toString().slice(0, 50)}`); } /** Check whether the given mark type is allowed in this node. */ allowsMarkType(markType) { return this.markSet == null || this.markSet.indexOf(markType) > -1; } /** Test whether the given set of marks are allowed in this node. */ allowsMarks(marks) { if (this.markSet == null) return true; for (let i = 0; i < marks.length; i++) if (!this.allowsMarkType(marks[i].type)) return false; return true; } /** Removes the marks that are not allowed in this node from the given set. */ allowedMarks(marks) { if (this.markSet == null) return marks; let copy; for (let i = 0; i < marks.length; i++) { if (!this.allowsMarkType(marks[i].type)) { if (!copy) copy = marks.slice(0, i); } else if (copy) { copy.push(marks[i]); } } return !copy ? marks : copy.length ? copy : Mark$1.none; } /** @internal */ static compile(nodes, schema) { let result = Object.create(null); nodes.forEach((name, spec) => result[name] = new NodeType(name, schema, spec)); let topType = schema.spec.topNode || "doc"; if (!result[topType]) throw new RangeError("Schema is missing its top node type ('" + topType + "')"); if (!result.text) throw new RangeError("Every schema needs a 'text' type"); for (let _ in result.text.attrs) throw new RangeError("The text node type should not have attributes"); return result; } }; // Attribute descriptors class Attribute { constructor(options) { this.hasDefault = Object.prototype.hasOwnProperty.call(options, "default"); this.default = options.default; } get isRequired() { return !this.hasDefault; } } // Marks /** Like nodes, marks (which are associated with nodes to signify things like emphasis or being part of a link) are [tagged](https://prosemirror.net/docs/ref/#model.Mark.type) with type objects, which are instantiated once per `Schema`. */ class MarkType { /** @internal */ constructor( /** The name of the mark type. */ name, /** @internal */ rank, /** The schema that this mark type instance is part of. */ schema, /** The spec on which the type is based. */ spec) { this.name = name; this.rank = rank; this.schema = schema; this.spec = spec; this.attrs = initAttrs(spec.attrs); this.excluded = null; let defaults = defaultAttrs(this.attrs); this.instance = defaults ? new Mark$1(this, defaults) : null; } /** Create a mark of this type. `attrs` may be `null` or an object containing only some of the mark's attributes. The others, if they have defaults, will be added. */ create(attrs = null) { if (!attrs && this.instance) return this.instance; return new Mark$1(this, computeAttrs(this.attrs, attrs)); } /** @internal */ static compile(marks, schema) { let result = Object.create(null), rank = 0; marks.forEach((name, spec) => result[name] = new MarkType(name, rank++, schema, spec)); return result; } /** When there is a mark of this type in the given set, a new set without it is returned. Otherwise, the input set is returned. */ removeFromSet(set) { for (var i = 0; i < set.length; i++) if (set[i].type == this) { set = set.slice(0, i).concat(set.slice(i + 1)); i--; } return set; } /** Tests whether there is a mark of this type in the given set. */ isInSet(set) { for (let i = 0; i < set.length; i++) if (set[i].type == this) return set[i]; } /** Queries whether a given mark type is [excluded](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) by this one. */ excludes(other) { return this.excluded.indexOf(other) > -1; } } /** A document schema. Holds [node](https://prosemirror.net/docs/ref/#model.NodeType) and [mark type](https://prosemirror.net/docs/ref/#model.MarkType) objects for the nodes and marks that may occur in conforming documents, and provides functionality for creating and deserializing such documents. When given, the type parameters provide the names of the nodes and marks in this schema. */ class Schema { /** Construct a schema from a schema [specification](https://prosemirror.net/docs/ref/#model.SchemaSpec). */ constructor(spec) { /** An object for storing whatever values modules may want to compute and cache per schema. (If you want to store something in it, try to use property names unlikely to clash.) */ this.cached = Object.create(null); let instanceSpec = this.spec = {}; for (let prop in spec) instanceSpec[prop] = spec[prop]; instanceSpec.nodes = OrderedMap.from(spec.nodes), instanceSpec.marks = OrderedMap.from(spec.marks || {}), this.nodes = NodeType$1.compile(this.spec.nodes, this); this.marks = MarkType.compile(this.spec.marks, this); let contentExprCache = Object.create(null); for (let prop in this.nodes) { if (prop in this.marks) throw new RangeError(prop + " can not be both a node and a mark"); let type = this.nodes[prop], contentExpr = type.spec.content || "", markExpr = type.spec.marks; type.contentMatch = contentExprCache[contentExpr] || (contentExprCache[contentExpr] = ContentMatch.parse(contentExpr, this.nodes)); type.inlineContent = type.contentMatch.inlineContent; type.markSet = markExpr == "_" ? null : markExpr ? gatherMarks(this, markExpr.split(" ")) : markExpr == "" || !type.inlineContent ? [] : null; } for (let prop in this.marks) { let type = this.marks[prop], excl = type.spec.excludes; type.excluded = excl == null ? [type] : excl == "" ? [] : gatherMarks(this, excl.split(" ")); } this.nodeFromJSON = this.nodeFromJSON.bind(this); this.markFromJSON = this.markFromJSON.bind(this); this.topNodeType = this.nodes[this.spec.topNode || "doc"]; this.cached.wrappings = Object.create(null); } /** Create a node in this schema. The `type` may be a string or a `NodeType` instance. Attributes will be extended with defaults, `content` may be a `Fragment`, `null`, a `Node`, or an array of nodes. */ node(type, attrs = null, content, marks) { if (typeof type == "string") type = this.nodeType(type);else if (!(type instanceof NodeType$1)) throw new RangeError("Invalid node type: " + type);else if (type.schema != this) throw new RangeError("Node type from different schema used (" + type.name + ")"); return type.createChecked(attrs, content, marks); } /** Create a text node in the schema. Empty text nodes are not allowed. */ text(text, marks) { let type = this.nodes.text; return new TextNode(type, type.defaultAttrs, text, Mark$1.setFrom(marks)); } /** Create a mark with the given type and attributes. */ mark(type, attrs) { if (typeof type == "string") type = this.marks[type]; return type.create(attrs); } /** Deserialize a node from its JSON representation. This method is bound. */ nodeFromJSON(json) { return Node$2.fromJSON(this, json); } /** Deserialize a mark from its JSON representation. This method is bound. */ markFromJSON(json) { return Mark$1.fromJSON(this, json); } /** @internal */ nodeType(name) { let found = this.nodes[name]; if (!found) throw new RangeError("Unknown node type: " + name); return found; } } function gatherMarks(schema, marks) { let found = []; for (let i = 0; i < marks.length; i++) { let name = marks[i], mark = schema.marks[name], ok = mark; if (mark) { found.push(mark); } else { for (let prop in schema.marks) { let mark = schema.marks[prop]; if (name == "_" || mark.spec.group && mark.spec.group.split(" ").indexOf(name) > -1) found.push(ok = mark); } } if (!ok) throw new SyntaxError("Unknown mark type: '" + marks[i] + "'"); } return found; } /** A DOM parser represents a strategy for parsing DOM content into a ProseMirror document conforming to a given schema. Its behavior is defined by an array of [rules](https://prosemirror.net/docs/ref/#model.ParseRule). */ class DOMParser { /** Create a parser that targets the given schema, using the given parsing rules. */ constructor( /** The schema into which the parser parses. */ schema, /** The set of [parse rules](https://prosemirror.net/docs/ref/#model.ParseRule) that the parser uses, in order of precedence. */ rules) { this.schema = schema; this.rules = rules; /** @internal */ this.tags = []; /** @internal */ this.styles = []; rules.forEach(rule => { if (rule.tag) this.tags.push(rule);else if (rule.style) this.styles.push(rule); }); // Only normalize list elements when lists in the schema can't directly contain themselves this.normalizeLists = !this.tags.some(r => { if (!/^(ul|ol)\b/.test(r.tag) || !r.node) return false; let node = schema.nodes[r.node]; return node.contentMatch.matchType(node); }); } /** Parse a document from the content of a DOM node. */ parse(dom, options = {}) { let context = new ParseContext(this, options, false); context.addAll(dom, options.from, options.to); return context.finish(); } /** Parses the content of the given DOM node, like [`parse`](https://prosemirror.net/docs/ref/#model.DOMParser.parse), and takes the same set of options. But unlike that method, which produces a whole node, this one returns a slice that is open at the sides, meaning that the schema constraints aren't applied to the start of nodes to the left of the input and the end of nodes at the end. */ parseSlice(dom, options = {}) { let context = new ParseContext(this, options, true); context.addAll(dom, options.from, options.to); return Slice.maxOpen(context.finish()); } /** @internal */ matchTag(dom, context, after) { for (let i = after ? this.tags.indexOf(after) + 1 : 0; i < this.tags.length; i++) { let rule = this.tags[i]; if (matches(dom, rule.tag) && (rule.namespace === undefined || dom.namespaceURI == rule.namespace) && (!rule.context || context.matchesContext(rule.context))) { if (rule.getAttrs) { let result = rule.getAttrs(dom); if (result === false) continue; rule.attrs = result || undefined; } return rule; } } } /** @internal */ matchStyle(prop, value, context, after) { for (let i = after ? this.styles.indexOf(after) + 1 : 0; i < this.styles.length; i++) { let rule = this.styles[i], style = rule.style; if (style.indexOf(prop) != 0 || rule.context && !context.matchesContext(rule.context) || // Test that the style string either precisely matches the prop, // or has an '=' sign after the prop, followed by the given // value. style.length > prop.length && (style.charCodeAt(prop.length) != 61 || style.slice(prop.length + 1) != value)) continue; if (rule.getAttrs) { let result = rule.getAttrs(value); if (result === false) continue; rule.attrs = result || undefined; } return rule; } } /** @internal */ static schemaRules(schema) { let result = []; function insert(rule) { let priority = rule.priority == null ? 50 : rule.priority, i = 0; for (; i < result.length; i++) { let next = result[i], nextPriority = next.priority == null ? 50 : next.priority; if (nextPriority < priority) break; } result.splice(i, 0, rule); } for (let name in schema.marks) { let rules = schema.marks[name].spec.parseDOM; if (rules) rules.forEach(rule => { insert(rule = copy$1(rule)); if (!(rule.mark || rule.ignore || rule.clearMark)) rule.mark = name; }); } for (let name in schema.nodes) { let rules = schema.nodes[name].spec.parseDOM; if (rules) rules.forEach(rule => { insert(rule = copy$1(rule)); if (!(rule.node || rule.ignore || rule.mark)) rule.node = name; }); } return result; } /** Construct a DOM parser using the parsing rules listed in a schema's [node specs](https://prosemirror.net/docs/ref/#model.NodeSpec.parseDOM), reordered by [priority](https://prosemirror.net/docs/ref/#model.ParseRule.priority). */ static fromSchema(schema) { return schema.cached.domParser || (schema.cached.domParser = new DOMParser(schema, DOMParser.schemaRules(schema))); } } const blockTags = { address: true, article: true, aside: true, blockquote: true, canvas: true, dd: true, div: true, dl: true, fieldset: true, figcaption: true, figure: true, footer: true, form: true, h1: true, h2: true, h3: true, h4: true, h5: true, h6: true, header: true, hgroup: true, hr: true, li: true, noscript: true, ol: true, output: true, p: true, pre: true, section: true, table: true, tfoot: true, ul: true }; const ignoreTags = { head: true, noscript: true, object: true, script: true, style: true, title: true }; const listTags = { ol: true, ul: true }; // Using a bitfield for node context options const OPT_PRESERVE_WS = 1, OPT_PRESERVE_WS_FULL = 2, OPT_OPEN_LEFT = 4; function wsOptionsFor(type, preserveWhitespace, base) { if (preserveWhitespace != null) return (preserveWhitespace ? OPT_PRESERVE_WS : 0) | (preserveWhitespace === "full" ? OPT_PRESERVE_WS_FULL : 0); return type && type.whitespace == "pre" ? OPT_PRESERVE_WS | OPT_PRESERVE_WS_FULL : base & ~OPT_OPEN_LEFT; } class NodeContext { constructor(type, attrs, // Marks applied to this node itself marks, // Marks that can't apply here, but will be used in children if possible pendingMarks, solid, match, options) { this.type = type; this.attrs = attrs; this.marks = marks; this.pendingMarks = pendingMarks; this.solid = solid; this.options = options; this.content = []; // Marks applied to the node's children this.activeMarks = Mark$1.none; // Nested Marks with same type this.stashMarks = []; this.match = match || (options & OPT_OPEN_LEFT ? null : type.contentMatch); } findWrapping(node) { if (!this.match) { if (!this.type) return []; let fill = this.type.contentMatch.fillBefore(Fragment.from(node)); if (fill) { this.match = this.type.contentMatch.matchFragment(fill); } else { let start = this.type.contentMatch, wrap; if (wrap = start.findWrapping(node.type)) { this.match = start; return wrap; } else { return null; } } } return this.match.findWrapping(node.type); } finish(openEnd) { if (!(this.options & OPT_PRESERVE_WS)) { // Strip trailing whitespace let last = this.content[this.content.length - 1], m; if (last && last.isText && (m = /[ \t\r\n\u000c]+$/.exec(last.text))) { let text = last; if (last.text.length == m[0].length) this.content.pop();else this.content[this.content.length - 1] = text.withText(text.text.slice(0, text.text.length - m[0].length)); } } let content = Fragment.from(this.content); if (!openEnd && this.match) content = content.append(this.match.fillBefore(Fragment.empty, true)); return this.type ? this.type.create(this.attrs, content, this.marks) : content; } popFromStashMark(mark) { for (let i = this.stashMarks.length - 1; i >= 0; i--) if (mark.eq(this.stashMarks[i])) return this.stashMarks.splice(i, 1)[0]; } applyPending(nextType) { for (let i = 0, pending = this.pendingMarks; i < pending.length; i++) { let mark = pending[i]; if ((this.type ? this.type.allowsMarkType(mark.type) : markMayApply(mark.type, nextType)) && !mark.isInSet(this.activeMarks)) { this.activeMarks = mark.addToSet(this.activeMarks); this.pendingMarks = mark.removeFromSet(this.pendingMarks); } } } inlineContext(node) { if (this.type) return this.type.inlineContent; if (this.content.length) return this.content[0].isInline; return node.parentNode && !blockTags.hasOwnProperty(node.parentNode.nodeName.toLowerCase()); } } class ParseContext { constructor( // The parser we are using. parser, // The options passed to this parse. options, isOpen) { this.parser = parser; this.options = options; this.isOpen = isOpen; this.open = 0; let topNode = options.topNode, topContext; let topOptions = wsOptionsFor(null, options.preserveWhitespace, 0) | (isOpen ? OPT_OPEN_LEFT : 0); if (topNode) topContext = new NodeContext(topNode.type, topNode.attrs, Mark$1.none, Mark$1.none, true, options.topMatch || topNode.type.contentMatch, topOptions);else if (isOpen) topContext = new NodeContext(null, null, Mark$1.none, Mark$1.none, true, null, topOptions);else topContext = new NodeContext(parser.schema.topNodeType, null, Mark$1.none, Mark$1.none, true, null, topOptions); this.nodes = [topContext]; this.find = options.findPositions; this.needsBlock = false; } get top() { return this.nodes[this.open]; } // Add a DOM node to the content. Text is inserted as text node, // otherwise, the node is passed to `addElement` or, if it has a // `style` attribute, `addElementWithStyles`. addDOM(dom) { if (dom.nodeType == 3) { this.addTextNode(dom); } else if (dom.nodeType == 1) { let style = dom.getAttribute("style"); if (!style) { this.addElement(dom); } else { let marks = this.readStyles(parseStyles(style)); if (!marks) return; // A style with ignore: true let [addMarks, removeMarks] = marks, top = this.top; for (let i = 0; i < removeMarks.length; i++) this.removePendingMark(removeMarks[i], top); for (let i = 0; i < addMarks.length; i++) this.addPendingMark(addMarks[i]); this.addElement(dom); for (let i = 0; i < addMarks.length; i++) this.removePendingMark(addMarks[i], top); for (let i = 0; i < removeMarks.length; i++) this.addPendingMark(removeMarks[i]); } } } addTextNode(dom) { let value = dom.nodeValue; let top = this.top; if (top.options & OPT_PRESERVE_WS_FULL || top.inlineContext(dom) || /[^ \t\r\n\u000c]/.test(value)) { if (!(top.options & OPT_PRESERVE_WS)) { value = value.replace(/[ \t\r\n\u000c]+/g, " "); // If this starts with whitespace, and there is no node before it, or // a hard break, or a text node that ends with whitespace, strip the // leading space. if (/^[ \t\r\n\u000c]/.test(value) && this.open == this.nodes.length - 1) { let nodeBefore = top.content[top.content.length - 1]; let domNodeBefore = dom.previousSibling; if (!nodeBefore || domNodeBefore && domNodeBefore.nodeName == 'BR' || nodeBefore.isText && /[ \t\r\n\u000c]$/.test(nodeBefore.text)) value = value.slice(1); } } else if (!(top.options & OPT_PRESERVE_WS_FULL)) { value = value.replace(/\r?\n|\r/g, " "); } else { value = value.replace(/\r\n?/g, "\n"); } if (value) this.insertNode(this.parser.schema.text(value)); this.findInText(dom); } else { this.findInside(dom); } } // Try to find a handler for the given tag and use that to parse. If // none is found, the element's content nodes are added directly. addElement(dom, matchAfter) { let name = dom.nodeName.toLowerCase(), ruleID; if (listTags.hasOwnProperty(name) && this.parser.normalizeLists) normalizeList(dom); let rule = this.options.ruleFromNode && this.options.ruleFromNode(dom) || (ruleID = this.parser.matchTag(dom, this, matchAfter)); if (rule ? rule.ignore : ignoreTags.hasOwnProperty(name)) { this.findInside(dom); this.ignoreFallback(dom); } else if (!rule || rule.skip || rule.closeParent) { if (rule && rule.closeParent) this.open = Math.max(0, this.open - 1);else if (rule && rule.skip.nodeType) dom = rule.skip; let sync, top = this.top, oldNeedsBlock = this.needsBlock; if (blockTags.hasOwnProperty(name)) { if (top.content.length && top.content[0].isInline && this.open) { this.open--; top = this.top; } sync = true; if (!top.type) this.needsBlock = true; } else if (!dom.firstChild) { this.leafFallback(dom); return; } this.addAll(dom); if (sync) this.sync(top); this.needsBlock = oldNeedsBlock; } else { this.addElementByRule(dom, rule, rule.consuming === false ? ruleID : undefined); } } // Called for leaf DOM nodes that would otherwise be ignored leafFallback(dom) { if (dom.nodeName == "BR" && this.top.type && this.top.type.inlineContent) this.addTextNode(dom.ownerDocument.createTextNode("\n")); } // Called for ignored nodes ignoreFallback(dom) { // Ignored BR nodes should at least create an inline context if (dom.nodeName == "BR" && (!this.top.type || !this.top.type.inlineContent)) this.findPlace(this.parser.schema.text("-")); } // Run any style parser associated with the node's styles. Either // return an array of marks, or null to indicate some of the styles // had a rule with `ignore` set. readStyles(styles) { let add = Mark$1.none, remove = Mark$1.none; style: for (let i = 0; i < styles.length; i += 2) { for (let after = undefined;;) { let rule = this.parser.matchStyle(styles[i], styles[i + 1], this, after); if (!rule) continue style; if (rule.ignore) return null; if (rule.clearMark) { this.top.pendingMarks.forEach(m => { if (rule.clearMark(m)) remove = m.addToSet(remove); }); } else { add = this.parser.schema.marks[rule.mark].create(rule.attrs).addToSet(add); } if (rule.consuming === false) after = rule;else break; } } return [add, remove]; } // Look up a handler for the given node. If none are found, return // false. Otherwise, apply it, use its return value to drive the way // the node's content is wrapped, and return true. addElementByRule(dom, rule, continueAfter) { let sync, nodeType, mark; if (rule.node) { nodeType = this.parser.schema.nodes[rule.node]; if (!nodeType.isLeaf) { sync = this.enter(nodeType, rule.attrs || null, rule.preserveWhitespace); } else if (!this.insertNode(nodeType.create(rule.attrs))) { this.leafFallback(dom); } } else { let markType = this.parser.schema.marks[rule.mark]; mark = markType.create(rule.attrs); this.addPendingMark(mark); } let startIn = this.top; if (nodeType && nodeType.isLeaf) { this.findInside(dom); } else if (continueAfter) { this.addElement(dom, continueAfter); } else if (rule.getContent) { this.findInside(dom); rule.getContent(dom, this.parser.schema).forEach(node => this.insertNode(node)); } else { let contentDOM = dom; if (typeof rule.contentElement == "string") contentDOM = dom.querySelector(rule.contentElement);else if (typeof rule.contentElement == "function") contentDOM = rule.contentElement(dom);else if (rule.contentElement) contentDOM = rule.contentElement; this.findAround(dom, contentDOM, true); this.addAll(contentDOM); } if (sync && this.sync(startIn)) this.open--; if (mark) this.removePendingMark(mark, startIn); } // Add all child nodes between `startIndex` and `endIndex` (or the // whole node, if not given). If `sync` is passed, use it to // synchronize after every block element. addAll(parent, startIndex, endIndex) { let index = startIndex || 0; for (let dom = startIndex ? parent.childNodes[startIndex] : parent.firstChild, end = endIndex == null ? null : parent.childNodes[endIndex]; dom != end; dom = dom.nextSibling, ++index) { this.findAtPoint(parent, index); this.addDOM(dom); } this.findAtPoint(parent, index); } // Try to find a way to fit the given node type into the current // context. May add intermediate wrappers and/or leave non-solid // nodes that we're in. findPlace(node) { let route, sync; for (let depth = this.open; depth >= 0; depth--) { let cx = this.nodes[depth]; let found = cx.findWrapping(node); if (found && (!route || route.length > found.length)) { route = found; sync = cx; if (!found.length) break; } if (cx.solid) break; } if (!route) return false; this.sync(sync); for (let i = 0; i < route.length; i++) this.enterInner(route[i], null, false); return true; } // Try to insert the given node, adjusting the context when needed. insertNode(node) { if (node.isInline && this.needsBlock && !this.top.type) { let block = this.textblockFromContext(); if (block) this.enterInner(block); } if (this.findPlace(node)) { this.closeExtra(); let top = this.top; top.applyPending(node.type); if (top.match) top.match = top.match.matchType(node.type); let marks = top.activeMarks; for (let i = 0; i < node.marks.length; i++) if (!top.type || top.type.allowsMarkType(node.marks[i].type)) marks = node.marks[i].addToSet(marks); top.content.push(node.mark(marks)); return true; } return false; } // Try to start a node of the given type, adjusting the context when // necessary. enter(type, attrs, preserveWS) { let ok = this.findPlace(type.create(attrs)); if (ok) this.enterInner(type, attrs, true, preserveWS); return ok; } // Open a node of the given type enterInner(type, attrs = null, solid = false, preserveWS) { this.closeExtra(); let top = this.top; top.applyPending(type); top.match = top.match && top.match.matchType(type); let options = wsOptionsFor(type, preserveWS, top.options); if (top.options & OPT_OPEN_LEFT && top.content.length == 0) options |= OPT_OPEN_LEFT; this.nodes.push(new NodeContext(type, attrs, top.activeMarks, top.pendingMarks, solid, null, options)); this.open++; } // Make sure all nodes above this.open are finished and added to // their parents closeExtra(openEnd = false) { let i = this.nodes.length - 1; if (i > this.open) { for (; i > this.open; i--) this.nodes[i - 1].content.push(this.nodes[i].finish(openEnd)); this.nodes.length = this.open + 1; } } finish() { this.open = 0; this.closeExtra(this.isOpen); return this.nodes[0].finish(this.isOpen || this.options.topOpen); } sync(to) { for (let i = this.open; i >= 0; i--) if (this.nodes[i] == to) { this.open = i; return true; } return false; } get currentPos() { this.closeExtra(); let pos = 0; for (let i = this.open; i >= 0; i--) { let content = this.nodes[i].content; for (let j = content.length - 1; j >= 0; j--) pos += content[j].nodeSize; if (i) pos++; } return pos; } findAtPoint(parent, offset) { if (this.find) for (let i = 0; i < this.find.length; i++) { if (this.find[i].node == parent && this.find[i].offset == offset) this.find[i].pos = this.currentPos; } } findInside(parent) { if (this.find) for (let i = 0; i < this.find.length; i++) { if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node)) this.find[i].pos = this.currentPos; } } findAround(parent, content, before) { if (parent != content && this.find) for (let i = 0; i < this.find.length; i++) { if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node)) { let pos = content.compareDocumentPosition(this.find[i].node); if (pos & (before ? 2 : 4)) this.find[i].pos = this.currentPos; } } } findInText(textNode) { if (this.find) for (let i = 0; i < this.find.length; i++) { if (this.find[i].node == textNode) this.find[i].pos = this.currentPos - (textNode.nodeValue.length - this.find[i].offset); } } // Determines whether the given context string matches this context. matchesContext(context) { if (context.indexOf("|") > -1) return context.split(/\s*\|\s*/).some(this.matchesContext, this); let parts = context.split("/"); let option = this.options.context; let useRoot = !this.isOpen && (!option || option.parent.type == this.nodes[0].type); let minDepth = -(option ? option.depth + 1 : 0) + (useRoot ? 0 : 1); let match = (i, depth) => { for (; i >= 0; i--) { let part = parts[i]; if (part == "") { if (i == parts.length - 1 || i == 0) continue; for (; depth >= minDepth; depth--) if (match(i - 1, depth)) return true; return false; } else { let next = depth > 0 || depth == 0 && useRoot ? this.nodes[depth].type : option && depth >= minDepth ? option.node(depth - minDepth).type : null; if (!next || next.name != part && next.groups.indexOf(part) == -1) return false; depth--; } } return true; }; return match(parts.length - 1, this.open); } textblockFromContext() { let $context = this.options.context; if ($context) for (let d = $context.depth; d >= 0; d--) { let deflt = $context.node(d).contentMatchAt($context.indexAfter(d)).defaultType; if (deflt && deflt.isTextblock && deflt.defaultAttrs) return deflt; } for (let name in this.parser.schema.nodes) { let type = this.parser.schema.nodes[name]; if (type.isTextblock && type.defaultAttrs) return type; } } addPendingMark(mark) { let found = findSameMarkInSet(mark, this.top.pendingMarks); if (found) this.top.stashMarks.push(found); this.top.pendingMarks = mark.addToSet(this.top.pendingMarks); } removePendingMark(mark, upto) { for (let depth = this.open; depth >= 0; depth--) { let level = this.nodes[depth]; let found = level.pendingMarks.lastIndexOf(mark); if (found > -1) { level.pendingMarks = mark.removeFromSet(level.pendingMarks); } else { level.activeMarks = mark.removeFromSet(level.activeMarks); let stashMark = level.popFromStashMark(mark); if (stashMark && level.type && level.type.allowsMarkType(stashMark.type)) level.activeMarks = stashMark.addToSet(level.activeMarks); } if (level == upto) break; } } } // Kludge to work around directly nested list nodes produced by some // tools and allowed by browsers to mean that the nested list is // actually part of the list item above it. function normalizeList(dom) { for (let child = dom.firstChild, prevItem = null; child; child = child.nextSibling) { let name = child.nodeType == 1 ? child.nodeName.toLowerCase() : null; if (name && listTags.hasOwnProperty(name) && prevItem) { prevItem.appendChild(child); child = prevItem; } else if (name == "li") { prevItem = child; } else if (name) { prevItem = null; } } } // Apply a CSS selector. function matches(dom, selector) { return (dom.matches || dom.msMatchesSelector || dom.webkitMatchesSelector || dom.mozMatchesSelector).call(dom, selector); } // Tokenize a style attribute into property/value pairs. function parseStyles(style) { let re = /\s*([\w-]+)\s*:\s*([^;]+)/g, m, result = []; while (m = re.exec(style)) result.push(m[1], m[2].trim()); return result; } function copy$1(obj) { let copy = {}; for (let prop in obj) copy[prop] = obj[prop]; return copy; } // Used when finding a mark at the top level of a fragment parse. // Checks whether it would be reasonable to apply a given mark type to // a given node, by looking at the way the mark occurs in the schema. function markMayApply(markType, nodeType) { let nodes = nodeType.schema.nodes; for (let name in nodes) { let parent = nodes[name]; if (!parent.allowsMarkType(markType)) continue; let seen = [], scan = match => { seen.push(match); for (let i = 0; i < match.edgeCount; i++) { let { type, next } = match.edge(i); if (type == nodeType) return true; if (seen.indexOf(next) < 0 && scan(next)) return true; } }; if (scan(parent.contentMatch)) return true; } } function findSameMarkInSet(mark, set) { for (let i = 0; i < set.length; i++) { if (mark.eq(set[i])) return set[i]; } } /** A DOM serializer knows how to convert ProseMirror nodes and marks of various types to DOM nodes. */ class DOMSerializer { /** Create a serializer. `nodes` should map node names to functions that take a node and return a description of the corresponding DOM. `marks` does the same for mark names, but also gets an argument that tells it whether the mark's content is block or inline content (for typical use, it'll always be inline). A mark serializer may be `null` to indicate that marks of that type should not be serialized. */ constructor( /** The node serialization functions. */ nodes, /** The mark serialization functions. */ marks) { this.nodes = nodes; this.marks = marks; } /** Serialize the content of this fragment to a DOM fragment. When not in the browser, the `document` option, containing a DOM document, should be passed so that the serializer can create nodes. */ serializeFragment(fragment, options = {}, target) { if (!target) target = doc$1(options).createDocumentFragment(); let top = target, active = []; fragment.forEach(node => { if (active.length || node.marks.length) { let keep = 0, rendered = 0; while (keep < active.length && rendered < node.marks.length) { let next = node.marks[rendered]; if (!this.marks[next.type.name]) { rendered++; continue; } if (!next.eq(active[keep][0]) || next.type.spec.spanning === false) break; keep++; rendered++; } while (keep < active.length) top = active.pop()[1]; while (rendered < node.marks.length) { let add = node.marks[rendered++]; let markDOM = this.serializeMark(add, node.isInline, options); if (markDOM) { active.push([add, top]); top.appendChild(markDOM.dom); top = markDOM.contentDOM || markDOM.dom; } } } top.appendChild(this.serializeNodeInner(node, options)); }); return target; } /** @internal */ serializeNodeInner(node, options) { let { dom, contentDOM } = DOMSerializer.renderSpec(doc$1(options), this.nodes[node.type.name](node)); if (contentDOM) { if (node.isLeaf) throw new RangeError("Content hole not allowed in a leaf node spec"); this.serializeFragment(node.content, options, contentDOM); } return dom; } /** Serialize this node to a DOM node. This can be useful when you need to serialize a part of a document, as opposed to the whole document. To serialize a whole document, use [`serializeFragment`](https://prosemirror.net/docs/ref/#model.DOMSerializer.serializeFragment) on its [content](https://prosemirror.net/docs/ref/#model.Node.content). */ serializeNode(node, options = {}) { let dom = this.serializeNodeInner(node, options); for (let i = node.marks.length - 1; i >= 0; i--) { let wrap = this.serializeMark(node.marks[i], node.isInline, options); if (wrap) { (wrap.contentDOM || wrap.dom).appendChild(dom); dom = wrap.dom; } } return dom; } /** @internal */ serializeMark(mark, inline, options = {}) { let toDOM = this.marks[mark.type.name]; return toDOM && DOMSerializer.renderSpec(doc$1(options), toDOM(mark, inline)); } /** Render an [output spec](https://prosemirror.net/docs/ref/#model.DOMOutputSpec) to a DOM node. If the spec has a hole (zero) in it, `contentDOM` will point at the node with the hole. */ static renderSpec(doc, structure, xmlNS = null) { if (typeof structure == "string") return { dom: doc.createTextNode(structure) }; if (structure.nodeType != null) return { dom: structure }; if (structure.dom && structure.dom.nodeType != null) return structure; let tagName = structure[0], space = tagName.indexOf(" "); if (space > 0) { xmlNS = tagName.slice(0, space); tagName = tagName.slice(space + 1); } let contentDOM; let dom = xmlNS ? doc.createElementNS(xmlNS, tagName) : doc.createElement(tagName); let attrs = structure[1], start = 1; if (attrs && typeof attrs == "object" && attrs.nodeType == null && !Array.isArray(attrs)) { start = 2; for (let name in attrs) if (attrs[name] != null) { let space = name.indexOf(" "); if (space > 0) dom.setAttributeNS(name.slice(0, space), name.slice(space + 1), attrs[name]);else dom.setAttribute(name, attrs[name]); } } for (let i = start; i < structure.length; i++) { let child = structure[i]; if (child === 0) { if (i < structure.length - 1 || i > start) throw new RangeError("Content hole must be the only child of its parent node"); return { dom, contentDOM: dom }; } else { let { dom: inner, contentDOM: innerContent } = DOMSerializer.renderSpec(doc, child, xmlNS); dom.appendChild(inner); if (innerContent) { if (contentDOM) throw new RangeError("Multiple content holes"); contentDOM = innerContent; } } } return { dom, contentDOM }; } /** Build a serializer using the [`toDOM`](https://prosemirror.net/docs/ref/#model.NodeSpec.toDOM) properties in a schema's node and mark specs. */ static fromSchema(schema) { return schema.cached.domSerializer || (schema.cached.domSerializer = new DOMSerializer(this.nodesFromSchema(schema), this.marksFromSchema(schema))); } /** Gather the serializers in a schema's node specs into an object. This can be useful as a base to build a custom serializer from. */ static nodesFromSchema(schema) { let result = gatherToDOM(schema.nodes); if (!result.text) result.text = node => node.text; return result; } /** Gather the serializers in a schema's mark specs into an object. */ static marksFromSchema(schema) { return gatherToDOM(schema.marks); } } function gatherToDOM(obj) { let result = {}; for (let name in obj) { let toDOM = obj[name].spec.toDOM; if (toDOM) result[name] = toDOM; } return result; } function doc$1(options) { return options.document || window.document; } // Recovery values encode a range index and an offset. They are // represented as numbers, because tons of them will be created when // mapping, for example, a large number of decorations. The number's // lower 16 bits provide the index, the remaining bits the offset. // // Note: We intentionally don't use bit shift operators to en- and // decode these, since those clip to 32 bits, which we might in rare // cases want to overflow. A 64-bit float can represent 48-bit // integers precisely. const lower16 = 0xffff; const factor16 = Math.pow(2, 16); function makeRecover(index, offset) { return index + offset * factor16; } function recoverIndex(value) { return value & lower16; } function recoverOffset(value) { return (value - (value & lower16)) / factor16; } const DEL_BEFORE = 1, DEL_AFTER = 2, DEL_ACROSS = 4, DEL_SIDE = 8; /** An object representing a mapped position with extra information. */ class MapResult { /** @internal */ constructor( /** The mapped version of the position. */ pos, /** @internal */ delInfo, /** @internal */ recover) { this.pos = pos; this.delInfo = delInfo; this.recover = recover; } /** Tells you whether the position was deleted, that is, whether the step removed the token on the side queried (via the `assoc`) argument from the document. */ get deleted() { return (this.delInfo & DEL_SIDE) > 0; } /** Tells you whether the token before the mapped position was deleted. */ get deletedBefore() { return (this.delInfo & (DEL_BEFORE | DEL_ACROSS)) > 0; } /** True when the token after the mapped position was deleted. */ get deletedAfter() { return (this.delInfo & (DEL_AFTER | DEL_ACROSS)) > 0; } /** Tells whether any of the steps mapped through deletes across the position (including both the token before and after the position). */ get deletedAcross() { return (this.delInfo & DEL_ACROSS) > 0; } } /** A map describing the deletions and insertions made by a step, which can be used to find the correspondence between positions in the pre-step version of a document and the same position in the post-step version. */ class StepMap { /** Create a position map. The modifications to the document are represented as an array of numbers, in which each group of three represents a modified chunk as `[start, oldSize, newSize]`. */ constructor( /** @internal */ ranges, /** @internal */ inverted = false) { this.ranges = ranges; this.inverted = inverted; if (!ranges.length && StepMap.empty) return StepMap.empty; } /** @internal */ recover(value) { let diff = 0, index = recoverIndex(value); if (!this.inverted) for (let i = 0; i < index; i++) diff += this.ranges[i * 3 + 2] - this.ranges[i * 3 + 1]; return this.ranges[index * 3] + diff + recoverOffset(value); } mapResult(pos, assoc = 1) { return this._map(pos, assoc, false); } map(pos, assoc = 1) { return this._map(pos, assoc, true); } /** @internal */ _map(pos, assoc, simple) { let diff = 0, oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2; for (let i = 0; i < this.ranges.length; i += 3) { let start = this.ranges[i] - (this.inverted ? diff : 0); if (start > pos) break; let oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex], end = start + oldSize; if (pos <= end) { let side = !oldSize ? assoc : pos == start ? -1 : pos == end ? 1 : assoc; let result = start + diff + (side < 0 ? 0 : newSize); if (simple) return result; let recover = pos == (assoc < 0 ? start : end) ? null : makeRecover(i / 3, pos - start); let del = pos == start ? DEL_AFTER : pos == end ? DEL_BEFORE : DEL_ACROSS; if (assoc < 0 ? pos != start : pos != end) del |= DEL_SIDE; return new MapResult(result, del, recover); } diff += newSize - oldSize; } return simple ? pos + diff : new MapResult(pos + diff, 0, null); } /** @internal */ touches(pos, recover) { let diff = 0, index = recoverIndex(recover); let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2; for (let i = 0; i < this.ranges.length; i += 3) { let start = this.ranges[i] - (this.inverted ? diff : 0); if (start > pos) break; let oldSize = this.ranges[i + oldIndex], end = start + oldSize; if (pos <= end && i == index * 3) return true; diff += this.ranges[i + newIndex] - oldSize; } return false; } /** Calls the given function on each of the changed ranges included in this map. */ forEach(f) { let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2; for (let i = 0, diff = 0; i < this.ranges.length; i += 3) { let start = this.ranges[i], oldStart = start - (this.inverted ? diff : 0), newStart = start + (this.inverted ? 0 : diff); let oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex]; f(oldStart, oldStart + oldSize, newStart, newStart + newSize); diff += newSize - oldSize; } } /** Create an inverted version of this map. The result can be used to map positions in the post-step document to the pre-step document. */ invert() { return new StepMap(this.ranges, !this.inverted); } /** @internal */ toString() { return (this.inverted ? "-" : "") + JSON.stringify(this.ranges); } /** Create a map that moves all positions by offset `n` (which may be negative). This can be useful when applying steps meant for a sub-document to a larger document, or vice-versa. */ static offset(n) { return n == 0 ? StepMap.empty : new StepMap(n < 0 ? [0, -n, 0] : [0, 0, n]); } } /** A StepMap that contains no changed ranges. */ StepMap.empty = new StepMap([]); /** A mapping represents a pipeline of zero or more [step maps](https://prosemirror.net/docs/ref/#transform.StepMap). It has special provisions for losslessly handling mapping positions through a series of steps in which some steps are inverted versions of earlier steps. (This comes up when ‘[rebasing](/docs/guide/#transform.rebasing)’ steps for collaboration or history management.) */ class Mapping { /** Create a new mapping with the given position maps. */ constructor( /** The step maps in this mapping. */ maps = [], /** @internal */ mirror, /** The starting position in the `maps` array, used when `map` or `mapResult` is called. */ from = 0, /** The end position in the `maps` array. */ to = maps.length) { this.maps = maps; this.mirror = mirror; this.from = from; this.to = to; } /** Create a mapping that maps only through a part of this one. */ slice(from = 0, to = this.maps.length) { return new Mapping(this.maps, this.mirror, from, to); } /** @internal */ copy() { return new Mapping(this.maps.slice(), this.mirror && this.mirror.slice(), this.from, this.to); } /** Add a step map to the end of this mapping. If `mirrors` is given, it should be the index of the step map that is the mirror image of this one. */ appendMap(map, mirrors) { this.to = this.maps.push(map); if (mirrors != null) this.setMirror(this.maps.length - 1, mirrors); } /** Add all the step maps in a given mapping to this one (preserving mirroring information). */ appendMapping(mapping) { for (let i = 0, startSize = this.maps.length; i < mapping.maps.length; i++) { let mirr = mapping.getMirror(i); this.appendMap(mapping.maps[i], mirr != null && mirr < i ? startSize + mirr : undefined); } } /** Finds the offset of the step map that mirrors the map at the given offset, in this mapping (as per the second argument to `appendMap`). */ getMirror(n) { if (this.mirror) for (let i = 0; i < this.mirror.length; i++) if (this.mirror[i] == n) return this.mirror[i + (i % 2 ? -1 : 1)]; } /** @internal */ setMirror(n, m) { if (!this.mirror) this.mirror = []; this.mirror.push(n, m); } /** Append the inverse of the given mapping to this one. */ appendMappingInverted(mapping) { for (let i = mapping.maps.length - 1, totalSize = this.maps.length + mapping.maps.length; i >= 0; i--) { let mirr = mapping.getMirror(i); this.appendMap(mapping.maps[i].invert(), mirr != null && mirr > i ? totalSize - mirr - 1 : undefined); } } /** Create an inverted version of this mapping. */ invert() { let inverse = new Mapping(); inverse.appendMappingInverted(this); return inverse; } /** Map a position through this mapping. */ map(pos, assoc = 1) { if (this.mirror) return this._map(pos, assoc, true); for (let i = this.from; i < this.to; i++) pos = this.maps[i].map(pos, assoc); return pos; } /** Map a position through this mapping, returning a mapping result. */ mapResult(pos, assoc = 1) { return this._map(pos, assoc, false); } /** @internal */ _map(pos, assoc, simple) { let delInfo = 0; for (let i = this.from; i < this.to; i++) { let map = this.maps[i], result = map.mapResult(pos, assoc); if (result.recover != null) { let corr = this.getMirror(i); if (corr != null && corr > i && corr < this.to) { i = corr; pos = this.maps[corr].recover(result.recover); continue; } } delInfo |= result.delInfo; pos = result.pos; } return simple ? pos : new MapResult(pos, delInfo, null); } } const stepsByID = Object.create(null); /** A step object represents an atomic change. It generally applies only to the document it was created for, since the positions stored in it will only make sense for that document. New steps are defined by creating classes that extend `Step`, overriding the `apply`, `invert`, `map`, `getMap` and `fromJSON` methods, and registering your class with a unique JSON-serialization identifier using [`Step.jsonID`](https://prosemirror.net/docs/ref/#transform.Step^jsonID). */ let Step$1 = class Step { /** Get the step map that represents the changes made by this step, and which can be used to transform between positions in the old and the new document. */ getMap() { return StepMap.empty; } /** Try to merge this step with another one, to be applied directly after it. Returns the merged step when possible, null if the steps can't be merged. */ merge(other) { return null; } /** Deserialize a step from its JSON representation. Will call through to the step class' own implementation of this method. */ static fromJSON(schema, json) { if (!json || !json.stepType) throw new RangeError("Invalid input for Step.fromJSON"); let type = stepsByID[json.stepType]; if (!type) throw new RangeError(`No step type ${json.stepType} defined`); return type.fromJSON(schema, json); } /** To be able to serialize steps to JSON, each step needs a string ID to attach to its JSON representation. Use this method to register an ID for your step classes. Try to pick something that's unlikely to clash with steps from other modules. */ static jsonID(id, stepClass) { if (id in stepsByID) throw new RangeError("Duplicate use of step JSON ID " + id); stepsByID[id] = stepClass; stepClass.prototype.jsonID = id; return stepClass; } }; /** The result of [applying](https://prosemirror.net/docs/ref/#transform.Step.apply) a step. Contains either a new document or a failure value. */ class StepResult { /** @internal */ constructor( /** The transformed document, if successful. */ doc, /** The failure message, if unsuccessful. */ failed) { this.doc = doc; this.failed = failed; } /** Create a successful step result. */ static ok(doc) { return new StepResult(doc, null); } /** Create a failed step result. */ static fail(message) { return new StepResult(null, message); } /** Call [`Node.replace`](https://prosemirror.net/docs/ref/#model.Node.replace) with the given arguments. Create a successful result if it succeeds, and a failed one if it throws a `ReplaceError`. */ static fromReplace(doc, from, to, slice) { try { return StepResult.ok(doc.replace(from, to, slice)); } catch (e) { if (e instanceof ReplaceError) return StepResult.fail(e.message); throw e; } } } function mapFragment(fragment, f, parent) { let mapped = []; for (let i = 0; i < fragment.childCount; i++) { let child = fragment.child(i); if (child.content.size) child = child.copy(mapFragment(child.content, f, child)); if (child.isInline) child = f(child, parent, i); mapped.push(child); } return Fragment.fromArray(mapped); } /** Add a mark to all inline content between two positions. */ class AddMarkStep extends Step$1 { /** Create a mark step. */ constructor( /** The start of the marked range. */ from, /** The end of the marked range. */ to, /** The mark to add. */ mark) { super(); this.from = from; this.to = to; this.mark = mark; } apply(doc) { let oldSlice = doc.slice(this.from, this.to), $from = doc.resolve(this.from); let parent = $from.node($from.sharedDepth(this.to)); let slice = new Slice(mapFragment(oldSlice.content, (node, parent) => { if (!node.isAtom || !parent.type.allowsMarkType(this.mark.type)) return node; return node.mark(this.mark.addToSet(node.marks)); }, parent), oldSlice.openStart, oldSlice.openEnd); return StepResult.fromReplace(doc, this.from, this.to, slice); } invert() { return new RemoveMarkStep(this.from, this.to, this.mark); } map(mapping) { let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1); if (from.deleted && to.deleted || from.pos >= to.pos) return null; return new AddMarkStep(from.pos, to.pos, this.mark); } merge(other) { if (other instanceof AddMarkStep && other.mark.eq(this.mark) && this.from <= other.to && this.to >= other.from) return new AddMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark); return null; } toJSON() { return { stepType: "addMark", mark: this.mark.toJSON(), from: this.from, to: this.to }; } /** @internal */ static fromJSON(schema, json) { if (typeof json.from != "number" || typeof json.to != "number") throw new RangeError("Invalid input for AddMarkStep.fromJSON"); return new AddMarkStep(json.from, json.to, schema.markFromJSON(json.mark)); } } Step$1.jsonID("addMark", AddMarkStep); /** Remove a mark from all inline content between two positions. */ class RemoveMarkStep extends Step$1 { /** Create a mark-removing step. */ constructor( /** The start of the unmarked range. */ from, /** The end of the unmarked range. */ to, /** The mark to remove. */ mark) { super(); this.from = from; this.to = to; this.mark = mark; } apply(doc) { let oldSlice = doc.slice(this.from, this.to); let slice = new Slice(mapFragment(oldSlice.content, node => { return node.mark(this.mark.removeFromSet(node.marks)); }, doc), oldSlice.openStart, oldSlice.openEnd); return StepResult.fromReplace(doc, this.from, this.to, slice); } invert() { return new AddMarkStep(this.from, this.to, this.mark); } map(mapping) { let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1); if (from.deleted && to.deleted || from.pos >= to.pos) return null; return new RemoveMarkStep(from.pos, to.pos, this.mark); } merge(other) { if (other instanceof RemoveMarkStep && other.mark.eq(this.mark) && this.from <= other.to && this.to >= other.from) return new RemoveMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark); return null; } toJSON() { return { stepType: "removeMark", mark: this.mark.toJSON(), from: this.from, to: this.to }; } /** @internal */ static fromJSON(schema, json) { if (typeof json.from != "number" || typeof json.to != "number") throw new RangeError("Invalid input for RemoveMarkStep.fromJSON"); return new RemoveMarkStep(json.from, json.to, schema.markFromJSON(json.mark)); } } Step$1.jsonID("removeMark", RemoveMarkStep); /** Add a mark to a specific node. */ class AddNodeMarkStep extends Step$1 { /** Create a node mark step. */ constructor( /** The position of the target node. */ pos, /** The mark to add. */ mark) { super(); this.pos = pos; this.mark = mark; } apply(doc) { let node = doc.nodeAt(this.pos); if (!node) return StepResult.fail("No node at mark step's position"); let updated = node.type.create(node.attrs, null, this.mark.addToSet(node.marks)); return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1)); } invert(doc) { let node = doc.nodeAt(this.pos); if (node) { let newSet = this.mark.addToSet(node.marks); if (newSet.length == node.marks.length) { for (let i = 0; i < node.marks.length; i++) if (!node.marks[i].isInSet(newSet)) return new AddNodeMarkStep(this.pos, node.marks[i]); return new AddNodeMarkStep(this.pos, this.mark); } } return new RemoveNodeMarkStep(this.pos, this.mark); } map(mapping) { let pos = mapping.mapResult(this.pos, 1); return pos.deletedAfter ? null : new AddNodeMarkStep(pos.pos, this.mark); } toJSON() { return { stepType: "addNodeMark", pos: this.pos, mark: this.mark.toJSON() }; } /** @internal */ static fromJSON(schema, json) { if (typeof json.pos != "number") throw new RangeError("Invalid input for AddNodeMarkStep.fromJSON"); return new AddNodeMarkStep(json.pos, schema.markFromJSON(json.mark)); } } Step$1.jsonID("addNodeMark", AddNodeMarkStep); /** Remove a mark from a specific node. */ class RemoveNodeMarkStep extends Step$1 { /** Create a mark-removing step. */ constructor( /** The position of the target node. */ pos, /** The mark to remove. */ mark) { super(); this.pos = pos; this.mark = mark; } apply(doc) { let node = doc.nodeAt(this.pos); if (!node) return StepResult.fail("No node at mark step's position"); let updated = node.type.create(node.attrs, null, this.mark.removeFromSet(node.marks)); return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1)); } invert(doc) { let node = doc.nodeAt(this.pos); if (!node || !this.mark.isInSet(node.marks)) return this; return new AddNodeMarkStep(this.pos, this.mark); } map(mapping) { let pos = mapping.mapResult(this.pos, 1); return pos.deletedAfter ? null : new RemoveNodeMarkStep(pos.pos, this.mark); } toJSON() { return { stepType: "removeNodeMark", pos: this.pos, mark: this.mark.toJSON() }; } /** @internal */ static fromJSON(schema, json) { if (typeof json.pos != "number") throw new RangeError("Invalid input for RemoveNodeMarkStep.fromJSON"); return new RemoveNodeMarkStep(json.pos, schema.markFromJSON(json.mark)); } } Step$1.jsonID("removeNodeMark", RemoveNodeMarkStep); /** Replace a part of the document with a slice of new content. */ class ReplaceStep extends Step$1 { /** The given `slice` should fit the 'gap' between `from` and `to`—the depths must line up, and the surrounding nodes must be able to be joined with the open sides of the slice. When `structure` is true, the step will fail if the content between from and to is not just a sequence of closing and then opening tokens (this is to guard against rebased replace steps overwriting something they weren't supposed to). */ constructor( /** The start position of the replaced range. */ from, /** The end position of the replaced range. */ to, /** The slice to insert. */ slice, /** @internal */ structure = false) { super(); this.from = from; this.to = to; this.slice = slice; this.structure = structure; } apply(doc) { if (this.structure && contentBetween(doc, this.from, this.to)) return StepResult.fail("Structure replace would overwrite content"); return StepResult.fromReplace(doc, this.from, this.to, this.slice); } getMap() { return new StepMap([this.from, this.to - this.from, this.slice.size]); } invert(doc) { return new ReplaceStep(this.from, this.from + this.slice.size, doc.slice(this.from, this.to)); } map(mapping) { let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1); if (from.deletedAcross && to.deletedAcross) return null; return new ReplaceStep(from.pos, Math.max(from.pos, to.pos), this.slice); } merge(other) { if (!(other instanceof ReplaceStep) || other.structure || this.structure) return null; if (this.from + this.slice.size == other.from && !this.slice.openEnd && !other.slice.openStart) { let slice = this.slice.size + other.slice.size == 0 ? Slice.empty : new Slice(this.slice.content.append(other.slice.content), this.slice.openStart, other.slice.openEnd); return new ReplaceStep(this.from, this.to + (other.to - other.from), slice, this.structure); } else if (other.to == this.from && !this.slice.openStart && !other.slice.openEnd) { let slice = this.slice.size + other.slice.size == 0 ? Slice.empty : new Slice(other.slice.content.append(this.slice.content), other.slice.openStart, this.slice.openEnd); return new ReplaceStep(other.from, this.to, slice, this.structure); } else { return null; } } toJSON() { let json = { stepType: "replace", from: this.from, to: this.to }; if (this.slice.size) json.slice = this.slice.toJSON(); if (this.structure) json.structure = true; return json; } /** @internal */ static fromJSON(schema, json) { if (typeof json.from != "number" || typeof json.to != "number") throw new RangeError("Invalid input for ReplaceStep.fromJSON"); return new ReplaceStep(json.from, json.to, Slice.fromJSON(schema, json.slice), !!json.structure); } } Step$1.jsonID("replace", ReplaceStep); /** Replace a part of the document with a slice of content, but preserve a range of the replaced content by moving it into the slice. */ class ReplaceAroundStep extends Step$1 { /** Create a replace-around step with the given range and gap. `insert` should be the point in the slice into which the content of the gap should be moved. `structure` has the same meaning as it has in the [`ReplaceStep`](https://prosemirror.net/docs/ref/#transform.ReplaceStep) class. */ constructor( /** The start position of the replaced range. */ from, /** The end position of the replaced range. */ to, /** The start of preserved range. */ gapFrom, /** The end of preserved range. */ gapTo, /** The slice to insert. */ slice, /** The position in the slice where the preserved range should be inserted. */ insert, /** @internal */ structure = false) { super(); this.from = from; this.to = to; this.gapFrom = gapFrom; this.gapTo = gapTo; this.slice = slice; this.insert = insert; this.structure = structure; } apply(doc) { if (this.structure && (contentBetween(doc, this.from, this.gapFrom) || contentBetween(doc, this.gapTo, this.to))) return StepResult.fail("Structure gap-replace would overwrite content"); let gap = doc.slice(this.gapFrom, this.gapTo); if (gap.openStart || gap.openEnd) return StepResult.fail("Gap is not a flat range"); let inserted = this.slice.insertAt(this.insert, gap.content); if (!inserted) return StepResult.fail("Content does not fit in gap"); return StepResult.fromReplace(doc, this.from, this.to, inserted); } getMap() { return new StepMap([this.from, this.gapFrom - this.from, this.insert, this.gapTo, this.to - this.gapTo, this.slice.size - this.insert]); } invert(doc) { let gap = this.gapTo - this.gapFrom; return new ReplaceAroundStep(this.from, this.from + this.slice.size + gap, this.from + this.insert, this.from + this.insert + gap, doc.slice(this.from, this.to).removeBetween(this.gapFrom - this.from, this.gapTo - this.from), this.gapFrom - this.from, this.structure); } map(mapping) { let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1); let gapFrom = mapping.map(this.gapFrom, -1), gapTo = mapping.map(this.gapTo, 1); if (from.deletedAcross && to.deletedAcross || gapFrom < from.pos || gapTo > to.pos) return null; return new ReplaceAroundStep(from.pos, to.pos, gapFrom, gapTo, this.slice, this.insert, this.structure); } toJSON() { let json = { stepType: "replaceAround", from: this.from, to: this.to, gapFrom: this.gapFrom, gapTo: this.gapTo, insert: this.insert }; if (this.slice.size) json.slice = this.slice.toJSON(); if (this.structure) json.structure = true; return json; } /** @internal */ static fromJSON(schema, json) { if (typeof json.from != "number" || typeof json.to != "number" || typeof json.gapFrom != "number" || typeof json.gapTo != "number" || typeof json.insert != "number") throw new RangeError("Invalid input for ReplaceAroundStep.fromJSON"); return new ReplaceAroundStep(json.from, json.to, json.gapFrom, json.gapTo, Slice.fromJSON(schema, json.slice), json.insert, !!json.structure); } } Step$1.jsonID("replaceAround", ReplaceAroundStep); function contentBetween(doc, from, to) { let $from = doc.resolve(from), dist = to - from, depth = $from.depth; while (dist > 0 && depth > 0 && $from.indexAfter(depth) == $from.node(depth).childCount) { depth--; dist--; } if (dist > 0) { let next = $from.node(depth).maybeChild($from.indexAfter(depth)); while (dist > 0) { if (!next || next.isLeaf) return true; next = next.firstChild; dist--; } } return false; } function addMark(tr, from, to, mark) { let removed = [], added = []; let removing, adding; tr.doc.nodesBetween(from, to, (node, pos, parent) => { if (!node.isInline) return; let marks = node.marks; if (!mark.isInSet(marks) && parent.type.allowsMarkType(mark.type)) { let start = Math.max(pos, from), end = Math.min(pos + node.nodeSize, to); let newSet = mark.addToSet(marks); for (let i = 0; i < marks.length; i++) { if (!marks[i].isInSet(newSet)) { if (removing && removing.to == start && removing.mark.eq(marks[i])) removing.to = end;else removed.push(removing = new RemoveMarkStep(start, end, marks[i])); } } if (adding && adding.to == start) adding.to = end;else added.push(adding = new AddMarkStep(start, end, mark)); } }); removed.forEach(s => tr.step(s)); added.forEach(s => tr.step(s)); } function removeMark(tr, from, to, mark) { let matched = [], step = 0; tr.doc.nodesBetween(from, to, (node, pos) => { if (!node.isInline) return; step++; let toRemove = null; if (mark instanceof MarkType) { let set = node.marks, found; while (found = mark.isInSet(set)) { (toRemove || (toRemove = [])).push(found); set = found.removeFromSet(set); } } else if (mark) { if (mark.isInSet(node.marks)) toRemove = [mark]; } else { toRemove = node.marks; } if (toRemove && toRemove.length) { let end = Math.min(pos + node.nodeSize, to); for (let i = 0; i < toRemove.length; i++) { let style = toRemove[i], found; for (let j = 0; j < matched.length; j++) { let m = matched[j]; if (m.step == step - 1 && style.eq(matched[j].style)) found = m; } if (found) { found.to = end; found.step = step; } else { matched.push({ style, from: Math.max(pos, from), to: end, step }); } } } }); matched.forEach(m => tr.step(new RemoveMarkStep(m.from, m.to, m.style))); } function clearIncompatible(tr, pos, parentType, match = parentType.contentMatch) { let node = tr.doc.nodeAt(pos); let delSteps = [], cur = pos + 1; for (let i = 0; i < node.childCount; i++) { let child = node.child(i), end = cur + child.nodeSize; let allowed = match.matchType(child.type); if (!allowed) { delSteps.push(new ReplaceStep(cur, end, Slice.empty)); } else { match = allowed; for (let j = 0; j < child.marks.length; j++) if (!parentType.allowsMarkType(child.marks[j].type)) tr.step(new RemoveMarkStep(cur, end, child.marks[j])); } cur = end; } if (!match.validEnd) { let fill = match.fillBefore(Fragment.empty, true); tr.replace(cur, cur, new Slice(fill, 0, 0)); } for (let i = delSteps.length - 1; i >= 0; i--) tr.step(delSteps[i]); } function canCut(node, start, end) { return (start == 0 || node.canReplace(start, node.childCount)) && (end == node.childCount || node.canReplace(0, end)); } /** Try to find a target depth to which the content in the given range can be lifted. Will not go across [isolating](https://prosemirror.net/docs/ref/#model.NodeSpec.isolating) parent nodes. */ function liftTarget(range) { let parent = range.parent; let content = parent.content.cutByIndex(range.startIndex, range.endIndex); for (let depth = range.depth;; --depth) { let node = range.$from.node(depth); let index = range.$from.index(depth), endIndex = range.$to.indexAfter(depth); if (depth < range.depth && node.canReplace(index, endIndex, content)) return depth; if (depth == 0 || node.type.spec.isolating || !canCut(node, index, endIndex)) break; } return null; } function lift$2(tr, range, target) { let { $from, $to, depth } = range; let gapStart = $from.before(depth + 1), gapEnd = $to.after(depth + 1); let start = gapStart, end = gapEnd; let before = Fragment.empty, openStart = 0; for (let d = depth, splitting = false; d > target; d--) if (splitting || $from.index(d) > 0) { splitting = true; before = Fragment.from($from.node(d).copy(before)); openStart++; } else { start--; } let after = Fragment.empty, openEnd = 0; for (let d = depth, splitting = false; d > target; d--) if (splitting || $to.after(d + 1) < $to.end(d)) { splitting = true; after = Fragment.from($to.node(d).copy(after)); openEnd++; } else { end++; } tr.step(new ReplaceAroundStep(start, end, gapStart, gapEnd, new Slice(before.append(after), openStart, openEnd), before.size - openStart, true)); } /** Try to find a valid way to wrap the content in the given range in a node of the given type. May introduce extra nodes around and inside the wrapper node, if necessary. Returns null if no valid wrapping could be found. When `innerRange` is given, that range's content is used as the content to fit into the wrapping, instead of the content of `range`. */ function findWrapping(range, nodeType, attrs = null, innerRange = range) { let around = findWrappingOutside(range, nodeType); let inner = around && findWrappingInside(innerRange, nodeType); if (!inner) return null; return around.map(withAttrs).concat({ type: nodeType, attrs }).concat(inner.map(withAttrs)); } function withAttrs(type) { return { type, attrs: null }; } function findWrappingOutside(range, type) { let { parent, startIndex, endIndex } = range; let around = parent.contentMatchAt(startIndex).findWrapping(type); if (!around) return null; let outer = around.length ? around[0] : type; return parent.canReplaceWith(startIndex, endIndex, outer) ? around : null; } function findWrappingInside(range, type) { let { parent, startIndex, endIndex } = range; let inner = parent.child(startIndex); let inside = type.contentMatch.findWrapping(inner.type); if (!inside) return null; let lastType = inside.length ? inside[inside.length - 1] : type; let innerMatch = lastType.contentMatch; for (let i = startIndex; innerMatch && i < endIndex; i++) innerMatch = innerMatch.matchType(parent.child(i).type); if (!innerMatch || !innerMatch.validEnd) return null; return inside; } function wrap(tr, range, wrappers) { let content = Fragment.empty; for (let i = wrappers.length - 1; i >= 0; i--) { if (content.size) { let match = wrappers[i].type.contentMatch.matchFragment(content); if (!match || !match.validEnd) throw new RangeError("Wrapper type given to Transform.wrap does not form valid content of its parent wrapper"); } content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content)); } let start = range.start, end = range.end; tr.step(new ReplaceAroundStep(start, end, start, end, new Slice(content, 0, 0), wrappers.length, true)); } function setBlockType$1(tr, from, to, type, attrs) { if (!type.isTextblock) throw new RangeError("Type given to setBlockType should be a textblock"); let mapFrom = tr.steps.length; tr.doc.nodesBetween(from, to, (node, pos) => { if (node.isTextblock && !node.hasMarkup(type, attrs) && canChangeType(tr.doc, tr.mapping.slice(mapFrom).map(pos), type)) { // Ensure all markup that isn't allowed in the new node type is cleared tr.clearIncompatible(tr.mapping.slice(mapFrom).map(pos, 1), type); let mapping = tr.mapping.slice(mapFrom); let startM = mapping.map(pos, 1), endM = mapping.map(pos + node.nodeSize, 1); tr.step(new ReplaceAroundStep(startM, endM, startM + 1, endM - 1, new Slice(Fragment.from(type.create(attrs, null, node.marks)), 0, 0), 1, true)); return false; } }); } function canChangeType(doc, pos, type) { let $pos = doc.resolve(pos), index = $pos.index(); return $pos.parent.canReplaceWith(index, index + 1, type); } /** Change the type, attributes, and/or marks of the node at `pos`. When `type` isn't given, the existing node type is preserved, */ function setNodeMarkup(tr, pos, type, attrs, marks) { let node = tr.doc.nodeAt(pos); if (!node) throw new RangeError("No node at given position"); if (!type) type = node.type; let newNode = type.create(attrs, null, marks || node.marks); if (node.isLeaf) return tr.replaceWith(pos, pos + node.nodeSize, newNode); if (!type.validContent(node.content)) throw new RangeError("Invalid content for node type " + type.name); tr.step(new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1, pos + node.nodeSize - 1, new Slice(Fragment.from(newNode), 0, 0), 1, true)); } /** Check whether splitting at the given position is allowed. */ function canSplit(doc, pos, depth = 1, typesAfter) { let $pos = doc.resolve(pos), base = $pos.depth - depth; let innerType = typesAfter && typesAfter[typesAfter.length - 1] || $pos.parent; if (base < 0 || $pos.parent.type.spec.isolating || !$pos.parent.canReplace($pos.index(), $pos.parent.childCount) || !innerType.type.validContent($pos.parent.content.cutByIndex($pos.index(), $pos.parent.childCount))) return false; for (let d = $pos.depth - 1, i = depth - 2; d > base; d--, i--) { let node = $pos.node(d), index = $pos.index(d); if (node.type.spec.isolating) return false; let rest = node.content.cutByIndex(index, node.childCount); let after = typesAfter && typesAfter[i] || node; if (after != node) rest = rest.replaceChild(0, after.type.create(after.attrs)); if (!node.canReplace(index + 1, node.childCount) || !after.type.validContent(rest)) return false; } let index = $pos.indexAfter(base); let baseType = typesAfter && typesAfter[0]; return $pos.node(base).canReplaceWith(index, index, baseType ? baseType.type : $pos.node(base + 1).type); } function split(tr, pos, depth = 1, typesAfter) { let $pos = tr.doc.resolve(pos), before = Fragment.empty, after = Fragment.empty; for (let d = $pos.depth, e = $pos.depth - depth, i = depth - 1; d > e; d--, i--) { before = Fragment.from($pos.node(d).copy(before)); let typeAfter = typesAfter && typesAfter[i]; after = Fragment.from(typeAfter ? typeAfter.type.create(typeAfter.attrs, after) : $pos.node(d).copy(after)); } tr.step(new ReplaceStep(pos, pos, new Slice(before.append(after), depth, depth), true)); } /** Test whether the blocks before and after a given position can be joined. */ function canJoin(doc, pos) { let $pos = doc.resolve(pos), index = $pos.index(); return joinable($pos.nodeBefore, $pos.nodeAfter) && $pos.parent.canReplace(index, index + 1); } function joinable(a, b) { return !!(a && b && !a.isLeaf && a.canAppend(b)); } /** Find an ancestor of the given position that can be joined to the block before (or after if `dir` is positive). Returns the joinable point, if any. */ function joinPoint(doc, pos, dir = -1) { let $pos = doc.resolve(pos); for (let d = $pos.depth;; d--) { let before, after, index = $pos.index(d); if (d == $pos.depth) { before = $pos.nodeBefore; after = $pos.nodeAfter; } else if (dir > 0) { before = $pos.node(d + 1); index++; after = $pos.node(d).maybeChild(index); } else { before = $pos.node(d).maybeChild(index - 1); after = $pos.node(d + 1); } if (before && !before.isTextblock && joinable(before, after) && $pos.node(d).canReplace(index, index + 1)) return pos; if (d == 0) break; pos = dir < 0 ? $pos.before(d) : $pos.after(d); } } function join(tr, pos, depth) { let step = new ReplaceStep(pos - depth, pos + depth, Slice.empty, true); tr.step(step); } /** Try to find a point where a node of the given type can be inserted near `pos`, by searching up the node hierarchy when `pos` itself isn't a valid place but is at the start or end of a node. Return null if no position was found. */ function insertPoint(doc, pos, nodeType) { let $pos = doc.resolve(pos); if ($pos.parent.canReplaceWith($pos.index(), $pos.index(), nodeType)) return pos; if ($pos.parentOffset == 0) for (let d = $pos.depth - 1; d >= 0; d--) { let index = $pos.index(d); if ($pos.node(d).canReplaceWith(index, index, nodeType)) return $pos.before(d + 1); if (index > 0) return null; } if ($pos.parentOffset == $pos.parent.content.size) for (let d = $pos.depth - 1; d >= 0; d--) { let index = $pos.indexAfter(d); if ($pos.node(d).canReplaceWith(index, index, nodeType)) return $pos.after(d + 1); if (index < $pos.node(d).childCount) return null; } return null; } /** Finds a position at or around the given position where the given slice can be inserted. Will look at parent nodes' nearest boundary and try there, even if the original position wasn't directly at the start or end of that node. Returns null when no position was found. */ function dropPoint(doc, pos, slice) { let $pos = doc.resolve(pos); if (!slice.content.size) return pos; let content = slice.content; for (let i = 0; i < slice.openStart; i++) content = content.firstChild.content; for (let pass = 1; pass <= (slice.openStart == 0 && slice.size ? 2 : 1); pass++) { for (let d = $pos.depth; d >= 0; d--) { let bias = d == $pos.depth ? 0 : $pos.pos <= ($pos.start(d + 1) + $pos.end(d + 1)) / 2 ? -1 : 1; let insertPos = $pos.index(d) + (bias > 0 ? 1 : 0); let parent = $pos.node(d), fits = false; if (pass == 1) { fits = parent.canReplace(insertPos, insertPos, content); } else { let wrapping = parent.contentMatchAt(insertPos).findWrapping(content.firstChild.type); fits = wrapping && parent.canReplaceWith(insertPos, insertPos, wrapping[0]); } if (fits) return bias == 0 ? $pos.pos : bias < 0 ? $pos.before(d + 1) : $pos.after(d + 1); } } return null; } /** ‘Fit’ a slice into a given position in the document, producing a [step](https://prosemirror.net/docs/ref/#transform.Step) that inserts it. Will return null if there's no meaningful way to insert the slice here, or inserting it would be a no-op (an empty slice over an empty range). */ function replaceStep(doc, from, to = from, slice = Slice.empty) { if (from == to && !slice.size) return null; let $from = doc.resolve(from), $to = doc.resolve(to); // Optimization -- avoid work if it's obvious that it's not needed. if (fitsTrivially($from, $to, slice)) return new ReplaceStep(from, to, slice); return new Fitter($from, $to, slice).fit(); } function fitsTrivially($from, $to, slice) { return !slice.openStart && !slice.openEnd && $from.start() == $to.start() && $from.parent.canReplace($from.index(), $to.index(), slice.content); } // Algorithm for 'placing' the elements of a slice into a gap: // // We consider the content of each node that is open to the left to be // independently placeable. I.e. in <p("foo"), p("bar")>, when the // paragraph on the left is open, "foo" can be placed (somewhere on // the left side of the replacement gap) independently from p("bar"). // // This class tracks the state of the placement progress in the // following properties: // // - `frontier` holds a stack of `{type, match}` objects that // represent the open side of the replacement. It starts at // `$from`, then moves forward as content is placed, and is finally // reconciled with `$to`. // // - `unplaced` is a slice that represents the content that hasn't // been placed yet. // // - `placed` is a fragment of placed content. Its open-start value // is implicit in `$from`, and its open-end value in `frontier`. class Fitter { constructor($from, $to, unplaced) { this.$from = $from; this.$to = $to; this.unplaced = unplaced; this.frontier = []; this.placed = Fragment.empty; for (let i = 0; i <= $from.depth; i++) { let node = $from.node(i); this.frontier.push({ type: node.type, match: node.contentMatchAt($from.indexAfter(i)) }); } for (let i = $from.depth; i > 0; i--) this.placed = Fragment.from($from.node(i).copy(this.placed)); } get depth() { return this.frontier.length - 1; } fit() { // As long as there's unplaced content, try to place some of it. // If that fails, either increase the open score of the unplaced // slice, or drop nodes from it, and then try again. while (this.unplaced.size) { let fit = this.findFittable(); if (fit) this.placeNodes(fit);else this.openMore() || this.dropNode(); } // When there's inline content directly after the frontier _and_ // directly after `this.$to`, we must generate a `ReplaceAround` // step that pulls that content into the node after the frontier. // That means the fitting must be done to the end of the textblock // node after `this.$to`, not `this.$to` itself. let moveInline = this.mustMoveInline(), placedSize = this.placed.size - this.depth - this.$from.depth; let $from = this.$from, $to = this.close(moveInline < 0 ? this.$to : $from.doc.resolve(moveInline)); if (!$to) return null; // If closing to `$to` succeeded, create a step let content = this.placed, openStart = $from.depth, openEnd = $to.depth; while (openStart && openEnd && content.childCount == 1) { // Normalize by dropping open parent nodes content = content.firstChild.content; openStart--; openEnd--; } let slice = new Slice(content, openStart, openEnd); if (moveInline > -1) return new ReplaceAroundStep($from.pos, moveInline, this.$to.pos, this.$to.end(), slice, placedSize); if (slice.size || $from.pos != this.$to.pos) // Don't generate no-op steps return new ReplaceStep($from.pos, $to.pos, slice); return null; } // Find a position on the start spine of `this.unplaced` that has // content that can be moved somewhere on the frontier. Returns two // depths, one for the slice and one for the frontier. findFittable() { let startDepth = this.unplaced.openStart; for (let cur = this.unplaced.content, d = 0, openEnd = this.unplaced.openEnd; d < startDepth; d++) { let node = cur.firstChild; if (cur.childCount > 1) openEnd = 0; if (node.type.spec.isolating && openEnd <= d) { startDepth = d; break; } cur = node.content; } // Only try wrapping nodes (pass 2) after finding a place without // wrapping failed. for (let pass = 1; pass <= 2; pass++) { for (let sliceDepth = pass == 1 ? startDepth : this.unplaced.openStart; sliceDepth >= 0; sliceDepth--) { let fragment, parent = null; if (sliceDepth) { parent = contentAt(this.unplaced.content, sliceDepth - 1).firstChild; fragment = parent.content; } else { fragment = this.unplaced.content; } let first = fragment.firstChild; for (let frontierDepth = this.depth; frontierDepth >= 0; frontierDepth--) { let { type, match } = this.frontier[frontierDepth], wrap, inject = null; // In pass 1, if the next node matches, or there is no next // node but the parents look compatible, we've found a // place. if (pass == 1 && (first ? match.matchType(first.type) || (inject = match.fillBefore(Fragment.from(first), false)) : parent && type.compatibleContent(parent.type))) return { sliceDepth, frontierDepth, parent, inject }; // In pass 2, look for a set of wrapping nodes that make // `first` fit here. else if (pass == 2 && first && (wrap = match.findWrapping(first.type))) return { sliceDepth, frontierDepth, parent, wrap }; // Don't continue looking further up if the parent node // would fit here. if (parent && match.matchType(parent.type)) break; } } } } openMore() { let { content, openStart, openEnd } = this.unplaced; let inner = contentAt(content, openStart); if (!inner.childCount || inner.firstChild.isLeaf) return false; this.unplaced = new Slice(content, openStart + 1, Math.max(openEnd, inner.size + openStart >= content.size - openEnd ? openStart + 1 : 0)); return true; } dropNode() { let { content, openStart, openEnd } = this.unplaced; let inner = contentAt(content, openStart); if (inner.childCount <= 1 && openStart > 0) { let openAtEnd = content.size - openStart <= openStart + inner.size; this.unplaced = new Slice(dropFromFragment(content, openStart - 1, 1), openStart - 1, openAtEnd ? openStart - 1 : openEnd); } else { this.unplaced = new Slice(dropFromFragment(content, openStart, 1), openStart, openEnd); } } // Move content from the unplaced slice at `sliceDepth` to the // frontier node at `frontierDepth`. Close that frontier node when // applicable. placeNodes({ sliceDepth, frontierDepth, parent, inject, wrap }) { while (this.depth > frontierDepth) this.closeFrontierNode(); if (wrap) for (let i = 0; i < wrap.length; i++) this.openFrontierNode(wrap[i]); let slice = this.unplaced, fragment = parent ? parent.content : slice.content; let openStart = slice.openStart - sliceDepth; let taken = 0, add = []; let { match, type } = this.frontier[frontierDepth]; if (inject) { for (let i = 0; i < inject.childCount; i++) add.push(inject.child(i)); match = match.matchFragment(inject); } // Computes the amount of (end) open nodes at the end of the // fragment. When 0, the parent is open, but no more. When // negative, nothing is open. let openEndCount = fragment.size + sliceDepth - (slice.content.size - slice.openEnd); // Scan over the fragment, fitting as many child nodes as // possible. while (taken < fragment.childCount) { let next = fragment.child(taken), matches = match.matchType(next.type); if (!matches) break; taken++; if (taken > 1 || openStart == 0 || next.content.size) { // Drop empty open nodes match = matches; add.push(closeNodeStart(next.mark(type.allowedMarks(next.marks)), taken == 1 ? openStart : 0, taken == fragment.childCount ? openEndCount : -1)); } } let toEnd = taken == fragment.childCount; if (!toEnd) openEndCount = -1; this.placed = addToFragment(this.placed, frontierDepth, Fragment.from(add)); this.frontier[frontierDepth].match = match; // If the parent types match, and the entire node was moved, and // it's not open, close this frontier node right away. if (toEnd && openEndCount < 0 && parent && parent.type == this.frontier[this.depth].type && this.frontier.length > 1) this.closeFrontierNode(); // Add new frontier nodes for any open nodes at the end. for (let i = 0, cur = fragment; i < openEndCount; i++) { let node = cur.lastChild; this.frontier.push({ type: node.type, match: node.contentMatchAt(node.childCount) }); cur = node.content; } // Update `this.unplaced`. Drop the entire node from which we // placed it we got to its end, otherwise just drop the placed // nodes. this.unplaced = !toEnd ? new Slice(dropFromFragment(slice.content, sliceDepth, taken), slice.openStart, slice.openEnd) : sliceDepth == 0 ? Slice.empty : new Slice(dropFromFragment(slice.content, sliceDepth - 1, 1), sliceDepth - 1, openEndCount < 0 ? slice.openEnd : sliceDepth - 1); } mustMoveInline() { if (!this.$to.parent.isTextblock) return -1; let top = this.frontier[this.depth], level; if (!top.type.isTextblock || !contentAfterFits(this.$to, this.$to.depth, top.type, top.match, false) || this.$to.depth == this.depth && (level = this.findCloseLevel(this.$to)) && level.depth == this.depth) return -1; let { depth } = this.$to, after = this.$to.after(depth); while (depth > 1 && after == this.$to.end(--depth)) ++after; return after; } findCloseLevel($to) { scan: for (let i = Math.min(this.depth, $to.depth); i >= 0; i--) { let { match, type } = this.frontier[i]; let dropInner = i < $to.depth && $to.end(i + 1) == $to.pos + ($to.depth - (i + 1)); let fit = contentAfterFits($to, i, type, match, dropInner); if (!fit) continue; for (let d = i - 1; d >= 0; d--) { let { match, type } = this.frontier[d]; let matches = contentAfterFits($to, d, type, match, true); if (!matches || matches.childCount) continue scan; } return { depth: i, fit, move: dropInner ? $to.doc.resolve($to.after(i + 1)) : $to }; } } close($to) { let close = this.findCloseLevel($to); if (!close) return null; while (this.depth > close.depth) this.closeFrontierNode(); if (close.fit.childCount) this.placed = addToFragment(this.placed, close.depth, close.fit); $to = close.move; for (let d = close.depth + 1; d <= $to.depth; d++) { let node = $to.node(d), add = node.type.contentMatch.fillBefore(node.content, true, $to.index(d)); this.openFrontierNode(node.type, node.attrs, add); } return $to; } openFrontierNode(type, attrs = null, content) { let top = this.frontier[this.depth]; top.match = top.match.matchType(type); this.placed = addToFragment(this.placed, this.depth, Fragment.from(type.create(attrs, content))); this.frontier.push({ type, match: type.contentMatch }); } closeFrontierNode() { let open = this.frontier.pop(); let add = open.match.fillBefore(Fragment.empty, true); if (add.childCount) this.placed = addToFragment(this.placed, this.frontier.length, add); } } function dropFromFragment(fragment, depth, count) { if (depth == 0) return fragment.cutByIndex(count, fragment.childCount); return fragment.replaceChild(0, fragment.firstChild.copy(dropFromFragment(fragment.firstChild.content, depth - 1, count))); } function addToFragment(fragment, depth, content) { if (depth == 0) return fragment.append(content); return fragment.replaceChild(fragment.childCount - 1, fragment.lastChild.copy(addToFragment(fragment.lastChild.content, depth - 1, content))); } function contentAt(fragment, depth) { for (let i = 0; i < depth; i++) fragment = fragment.firstChild.content; return fragment; } function closeNodeStart(node, openStart, openEnd) { if (openStart <= 0) return node; let frag = node.content; if (openStart > 1) frag = frag.replaceChild(0, closeNodeStart(frag.firstChild, openStart - 1, frag.childCount == 1 ? openEnd - 1 : 0)); if (openStart > 0) { frag = node.type.contentMatch.fillBefore(frag).append(frag); if (openEnd <= 0) frag = frag.append(node.type.contentMatch.matchFragment(frag).fillBefore(Fragment.empty, true)); } return node.copy(frag); } function contentAfterFits($to, depth, type, match, open) { let node = $to.node(depth), index = open ? $to.indexAfter(depth) : $to.index(depth); if (index == node.childCount && !type.compatibleContent(node.type)) return null; let fit = match.fillBefore(node.content, true, index); return fit && !invalidMarks(type, node.content, index) ? fit : null; } function invalidMarks(type, fragment, start) { for (let i = start; i < fragment.childCount; i++) if (!type.allowsMarks(fragment.child(i).marks)) return true; return false; } function definesContent(type) { return type.spec.defining || type.spec.definingForContent; } function replaceRange(tr, from, to, slice) { if (!slice.size) return tr.deleteRange(from, to); let $from = tr.doc.resolve(from), $to = tr.doc.resolve(to); if (fitsTrivially($from, $to, slice)) return tr.step(new ReplaceStep(from, to, slice)); let targetDepths = coveredDepths($from, tr.doc.resolve(to)); // Can't replace the whole document, so remove 0 if it's present if (targetDepths[targetDepths.length - 1] == 0) targetDepths.pop(); // Negative numbers represent not expansion over the whole node at // that depth, but replacing from $from.before(-D) to $to.pos. let preferredTarget = -($from.depth + 1); targetDepths.unshift(preferredTarget); // This loop picks a preferred target depth, if one of the covering // depths is not outside of a defining node, and adds negative // depths for any depth that has $from at its start and does not // cross a defining node. for (let d = $from.depth, pos = $from.pos - 1; d > 0; d--, pos--) { let spec = $from.node(d).type.spec; if (spec.defining || spec.definingAsContext || spec.isolating) break; if (targetDepths.indexOf(d) > -1) preferredTarget = d;else if ($from.before(d) == pos) targetDepths.splice(1, 0, -d); } // Try to fit each possible depth of the slice into each possible // target depth, starting with the preferred depths. let preferredTargetIndex = targetDepths.indexOf(preferredTarget); let leftNodes = [], preferredDepth = slice.openStart; for (let content = slice.content, i = 0;; i++) { let node = content.firstChild; leftNodes.push(node); if (i == slice.openStart) break; content = node.content; } // Back up preferredDepth to cover defining textblocks directly // above it, possibly skipping a non-defining textblock. for (let d = preferredDepth - 1; d >= 0; d--) { let type = leftNodes[d].type, def = definesContent(type); if (def && $from.node(preferredTargetIndex).type != type) preferredDepth = d;else if (def || !type.isTextblock) break; } for (let j = slice.openStart; j >= 0; j--) { let openDepth = (j + preferredDepth + 1) % (slice.openStart + 1); let insert = leftNodes[openDepth]; if (!insert) continue; for (let i = 0; i < targetDepths.length; i++) { // Loop over possible expansion levels, starting with the // preferred one let targetDepth = targetDepths[(i + preferredTargetIndex) % targetDepths.length], expand = true; if (targetDepth < 0) { expand = false; targetDepth = -targetDepth; } let parent = $from.node(targetDepth - 1), index = $from.index(targetDepth - 1); if (parent.canReplaceWith(index, index, insert.type, insert.marks)) return tr.replace($from.before(targetDepth), expand ? $to.after(targetDepth) : to, new Slice(closeFragment(slice.content, 0, slice.openStart, openDepth), openDepth, slice.openEnd)); } } let startSteps = tr.steps.length; for (let i = targetDepths.length - 1; i >= 0; i--) { tr.replace(from, to, slice); if (tr.steps.length > startSteps) break; let depth = targetDepths[i]; if (depth < 0) continue; from = $from.before(depth); to = $to.after(depth); } } function closeFragment(fragment, depth, oldOpen, newOpen, parent) { if (depth < oldOpen) { let first = fragment.firstChild; fragment = fragment.replaceChild(0, first.copy(closeFragment(first.content, depth + 1, oldOpen, newOpen, first))); } if (depth > newOpen) { let match = parent.contentMatchAt(0); let start = match.fillBefore(fragment).append(fragment); fragment = start.append(match.matchFragment(start).fillBefore(Fragment.empty, true)); } return fragment; } function replaceRangeWith(tr, from, to, node) { if (!node.isInline && from == to && tr.doc.resolve(from).parent.content.size) { let point = insertPoint(tr.doc, from, node.type); if (point != null) from = to = point; } tr.replaceRange(from, to, new Slice(Fragment.from(node), 0, 0)); } function deleteRange$1(tr, from, to) { let $from = tr.doc.resolve(from), $to = tr.doc.resolve(to); let covered = coveredDepths($from, $to); for (let i = 0; i < covered.length; i++) { let depth = covered[i], last = i == covered.length - 1; if (last && depth == 0 || $from.node(depth).type.contentMatch.validEnd) return tr.delete($from.start(depth), $to.end(depth)); if (depth > 0 && (last || $from.node(depth - 1).canReplace($from.index(depth - 1), $to.indexAfter(depth - 1)))) return tr.delete($from.before(depth), $to.after(depth)); } for (let d = 1; d <= $from.depth && d <= $to.depth; d++) { if (from - $from.start(d) == $from.depth - d && to > $from.end(d) && $to.end(d) - to != $to.depth - d) return tr.delete($from.before(d), to); } tr.delete(from, to); } // Returns an array of all depths for which $from - $to spans the // whole content of the nodes at that depth. function coveredDepths($from, $to) { let result = [], minDepth = Math.min($from.depth, $to.depth); for (let d = minDepth; d >= 0; d--) { let start = $from.start(d); if (start < $from.pos - ($from.depth - d) || $to.end(d) > $to.pos + ($to.depth - d) || $from.node(d).type.spec.isolating || $to.node(d).type.spec.isolating) break; if (start == $to.start(d) || d == $from.depth && d == $to.depth && $from.parent.inlineContent && $to.parent.inlineContent && d && $to.start(d - 1) == start - 1) result.push(d); } return result; } /** Update an attribute in a specific node. */ class AttrStep extends Step$1 { /** Construct an attribute step. */ constructor( /** The position of the target node. */ pos, /** The attribute to set. */ attr, // The attribute's new value. value) { super(); this.pos = pos; this.attr = attr; this.value = value; } apply(doc) { let node = doc.nodeAt(this.pos); if (!node) return StepResult.fail("No node at attribute step's position"); let attrs = Object.create(null); for (let name in node.attrs) attrs[name] = node.attrs[name]; attrs[this.attr] = this.value; let updated = node.type.create(attrs, null, node.marks); return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1)); } getMap() { return StepMap.empty; } invert(doc) { return new AttrStep(this.pos, this.attr, doc.nodeAt(this.pos).attrs[this.attr]); } map(mapping) { let pos = mapping.mapResult(this.pos, 1); return pos.deletedAfter ? null : new AttrStep(pos.pos, this.attr, this.value); } toJSON() { return { stepType: "attr", pos: this.pos, attr: this.attr, value: this.value }; } static fromJSON(schema, json) { if (typeof json.pos != "number" || typeof json.attr != "string") throw new RangeError("Invalid input for AttrStep.fromJSON"); return new AttrStep(json.pos, json.attr, json.value); } } Step$1.jsonID("attr", AttrStep); /** @internal */ let TransformError = class extends Error {}; TransformError = function TransformError(message) { let err = Error.call(this, message); err.__proto__ = TransformError.prototype; return err; }; TransformError.prototype = Object.create(Error.prototype); TransformError.prototype.constructor = TransformError; TransformError.prototype.name = "TransformError"; /** Abstraction to build up and track an array of [steps](https://prosemirror.net/docs/ref/#transform.Step) representing a document transformation. Most transforming methods return the `Transform` object itself, so that they can be chained. */ class Transform { /** Create a transform that starts with the given document. */ constructor( /** The current document (the result of applying the steps in the transform). */ doc) { this.doc = doc; /** The steps in this transform. */ this.steps = []; /** The documents before each of the steps. */ this.docs = []; /** A mapping with the maps for each of the steps in this transform. */ this.mapping = new Mapping(); } /** The starting document. */ get before() { return this.docs.length ? this.docs[0] : this.doc; } /** Apply a new step in this transform, saving the result. Throws an error when the step fails. */ step(step) { let result = this.maybeStep(step); if (result.failed) throw new TransformError(result.failed); return this; } /** Try to apply a step in this transformation, ignoring it if it fails. Returns the step result. */ maybeStep(step) { let result = step.apply(this.doc); if (!result.failed) this.addStep(step, result.doc); return result; } /** True when the document has been changed (when there are any steps). */ get docChanged() { return this.steps.length > 0; } /** @internal */ addStep(step, doc) { this.docs.push(this.doc); this.steps.push(step); this.mapping.appendMap(step.getMap()); this.doc = doc; } /** Replace the part of the document between `from` and `to` with the given `slice`. */ replace(from, to = from, slice = Slice.empty) { let step = replaceStep(this.doc, from, to, slice); if (step) this.step(step); return this; } /** Replace the given range with the given content, which may be a fragment, node, or array of nodes. */ replaceWith(from, to, content) { return this.replace(from, to, new Slice(Fragment.from(content), 0, 0)); } /** Delete the content between the given positions. */ delete(from, to) { return this.replace(from, to, Slice.empty); } /** Insert the given content at the given position. */ insert(pos, content) { return this.replaceWith(pos, pos, content); } /** Replace a range of the document with a given slice, using `from`, `to`, and the slice's [`openStart`](https://prosemirror.net/docs/ref/#model.Slice.openStart) property as hints, rather than fixed start and end points. This method may grow the replaced area or close open nodes in the slice in order to get a fit that is more in line with WYSIWYG expectations, by dropping fully covered parent nodes of the replaced region when they are marked [non-defining as context](https://prosemirror.net/docs/ref/#model.NodeSpec.definingAsContext), or including an open parent node from the slice that _is_ marked as [defining its content](https://prosemirror.net/docs/ref/#model.NodeSpec.definingForContent). This is the method, for example, to handle paste. The similar [`replace`](https://prosemirror.net/docs/ref/#transform.Transform.replace) method is a more primitive tool which will _not_ move the start and end of its given range, and is useful in situations where you need more precise control over what happens. */ replaceRange(from, to, slice) { replaceRange(this, from, to, slice); return this; } /** Replace the given range with a node, but use `from` and `to` as hints, rather than precise positions. When from and to are the same and are at the start or end of a parent node in which the given node doesn't fit, this method may _move_ them out towards a parent that does allow the given node to be placed. When the given range completely covers a parent node, this method may completely replace that parent node. */ replaceRangeWith(from, to, node) { replaceRangeWith(this, from, to, node); return this; } /** Delete the given range, expanding it to cover fully covered parent nodes until a valid replace is found. */ deleteRange(from, to) { deleteRange$1(this, from, to); return this; } /** Split the content in the given range off from its parent, if there is sibling content before or after it, and move it up the tree to the depth specified by `target`. You'll probably want to use [`liftTarget`](https://prosemirror.net/docs/ref/#transform.liftTarget) to compute `target`, to make sure the lift is valid. */ lift(range, target) { lift$2(this, range, target); return this; } /** Join the blocks around the given position. If depth is 2, their last and first siblings are also joined, and so on. */ join(pos, depth = 1) { join(this, pos, depth); return this; } /** Wrap the given [range](https://prosemirror.net/docs/ref/#model.NodeRange) in the given set of wrappers. The wrappers are assumed to be valid in this position, and should probably be computed with [`findWrapping`](https://prosemirror.net/docs/ref/#transform.findWrapping). */ wrap(range, wrappers) { wrap(this, range, wrappers); return this; } /** Set the type of all textblocks (partly) between `from` and `to` to the given node type with the given attributes. */ setBlockType(from, to = from, type, attrs = null) { setBlockType$1(this, from, to, type, attrs); return this; } /** Change the type, attributes, and/or marks of the node at `pos`. When `type` isn't given, the existing node type is preserved, */ setNodeMarkup(pos, type, attrs = null, marks) { setNodeMarkup(this, pos, type, attrs, marks); return this; } /** Set a single attribute on a given node to a new value. */ setNodeAttribute(pos, attr, value) { this.step(new AttrStep(pos, attr, value)); return this; } /** Add a mark to the node at position `pos`. */ addNodeMark(pos, mark) { this.step(new AddNodeMarkStep(pos, mark)); return this; } /** Remove a mark (or a mark of the given type) from the node at position `pos`. */ removeNodeMark(pos, mark) { if (!(mark instanceof Mark$1)) { let node = this.doc.nodeAt(pos); if (!node) throw new RangeError("No node at position " + pos); mark = mark.isInSet(node.marks); if (!mark) return this; } this.step(new RemoveNodeMarkStep(pos, mark)); return this; } /** Split the node at the given position, and optionally, if `depth` is greater than one, any number of nodes above that. By default, the parts split off will inherit the node type of the original node. This can be changed by passing an array of types and attributes to use after the split. */ split(pos, depth = 1, typesAfter) { split(this, pos, depth, typesAfter); return this; } /** Add the given mark to the inline content between `from` and `to`. */ addMark(from, to, mark) { addMark(this, from, to, mark); return this; } /** Remove marks from inline nodes between `from` and `to`. When `mark` is a single mark, remove precisely that mark. When it is a mark type, remove all marks of that type. When it is null, remove all marks of any type. */ removeMark(from, to, mark) { removeMark(this, from, to, mark); return this; } /** Removes all marks and nodes from the content of the node at `pos` that don't match the given new parent node type. Accepts an optional starting [content match](https://prosemirror.net/docs/ref/#model.ContentMatch) as third argument. */ clearIncompatible(pos, parentType, match) { clearIncompatible(this, pos, parentType, match); return this; } } const classesById = Object.create(null); /** Superclass for editor selections. Every selection type should extend this. Should not be instantiated directly. */ class Selection { /** Initialize a selection with the head and anchor and ranges. If no ranges are given, constructs a single range across `$anchor` and `$head`. */ constructor( /** The resolved anchor of the selection (the side that stays in place when the selection is modified). */ $anchor, /** The resolved head of the selection (the side that moves when the selection is modified). */ $head, ranges) { this.$anchor = $anchor; this.$head = $head; this.ranges = ranges || [new SelectionRange($anchor.min($head), $anchor.max($head))]; } /** The selection's anchor, as an unresolved position. */ get anchor() { return this.$anchor.pos; } /** The selection's head. */ get head() { return this.$head.pos; } /** The lower bound of the selection's main range. */ get from() { return this.$from.pos; } /** The upper bound of the selection's main range. */ get to() { return this.$to.pos; } /** The resolved lower bound of the selection's main range. */ get $from() { return this.ranges[0].$from; } /** The resolved upper bound of the selection's main range. */ get $to() { return this.ranges[0].$to; } /** Indicates whether the selection contains any content. */ get empty() { let ranges = this.ranges; for (let i = 0; i < ranges.length; i++) if (ranges[i].$from.pos != ranges[i].$to.pos) return false; return true; } /** Get the content of this selection as a slice. */ content() { return this.$from.doc.slice(this.from, this.to, true); } /** Replace the selection with a slice or, if no slice is given, delete the selection. Will append to the given transaction. */ replace(tr, content = Slice.empty) { // Put the new selection at the position after the inserted // content. When that ended in an inline node, search backwards, // to get the position after that node. If not, search forward. let lastNode = content.content.lastChild, lastParent = null; for (let i = 0; i < content.openEnd; i++) { lastParent = lastNode; lastNode = lastNode.lastChild; } let mapFrom = tr.steps.length, ranges = this.ranges; for (let i = 0; i < ranges.length; i++) { let { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom); tr.replaceRange(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content); if (i == 0) selectionToInsertionEnd$1(tr, mapFrom, (lastNode ? lastNode.isInline : lastParent && lastParent.isTextblock) ? -1 : 1); } } /** Replace the selection with the given node, appending the changes to the given transaction. */ replaceWith(tr, node) { let mapFrom = tr.steps.length, ranges = this.ranges; for (let i = 0; i < ranges.length; i++) { let { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom); let from = mapping.map($from.pos), to = mapping.map($to.pos); if (i) { tr.deleteRange(from, to); } else { tr.replaceRangeWith(from, to, node); selectionToInsertionEnd$1(tr, mapFrom, node.isInline ? -1 : 1); } } } /** Find a valid cursor or leaf node selection starting at the given position and searching back if `dir` is negative, and forward if positive. When `textOnly` is true, only consider cursor selections. Will return null when no valid selection position is found. */ static findFrom($pos, dir, textOnly = false) { let inner = $pos.parent.inlineContent ? new TextSelection($pos) : findSelectionIn($pos.node(0), $pos.parent, $pos.pos, $pos.index(), dir, textOnly); if (inner) return inner; for (let depth = $pos.depth - 1; depth >= 0; depth--) { let found = dir < 0 ? findSelectionIn($pos.node(0), $pos.node(depth), $pos.before(depth + 1), $pos.index(depth), dir, textOnly) : findSelectionIn($pos.node(0), $pos.node(depth), $pos.after(depth + 1), $pos.index(depth) + 1, dir, textOnly); if (found) return found; } return null; } /** Find a valid cursor or leaf node selection near the given position. Searches forward first by default, but if `bias` is negative, it will search backwards first. */ static near($pos, bias = 1) { return this.findFrom($pos, bias) || this.findFrom($pos, -bias) || new AllSelection($pos.node(0)); } /** Find the cursor or leaf node selection closest to the start of the given document. Will return an [`AllSelection`](https://prosemirror.net/docs/ref/#state.AllSelection) if no valid position exists. */ static atStart(doc) { return findSelectionIn(doc, doc, 0, 0, 1) || new AllSelection(doc); } /** Find the cursor or leaf node selection closest to the end of the given document. */ static atEnd(doc) { return findSelectionIn(doc, doc, doc.content.size, doc.childCount, -1) || new AllSelection(doc); } /** Deserialize the JSON representation of a selection. Must be implemented for custom classes (as a static class method). */ static fromJSON(doc, json) { if (!json || !json.type) throw new RangeError("Invalid input for Selection.fromJSON"); let cls = classesById[json.type]; if (!cls) throw new RangeError(`No selection type ${json.type} defined`); return cls.fromJSON(doc, json); } /** To be able to deserialize selections from JSON, custom selection classes must register themselves with an ID string, so that they can be disambiguated. Try to pick something that's unlikely to clash with classes from other modules. */ static jsonID(id, selectionClass) { if (id in classesById) throw new RangeError("Duplicate use of selection JSON ID " + id); classesById[id] = selectionClass; selectionClass.prototype.jsonID = id; return selectionClass; } /** Get a [bookmark](https://prosemirror.net/docs/ref/#state.SelectionBookmark) for this selection, which is a value that can be mapped without having access to a current document, and later resolved to a real selection for a given document again. (This is used mostly by the history to track and restore old selections.) The default implementation of this method just converts the selection to a text selection and returns the bookmark for that. */ getBookmark() { return TextSelection.between(this.$anchor, this.$head).getBookmark(); } } Selection.prototype.visible = true; /** Represents a selected range in a document. */ class SelectionRange { /** Create a range. */ constructor( /** The lower bound of the range. */ $from, /** The upper bound of the range. */ $to) { this.$from = $from; this.$to = $to; } } let warnedAboutTextSelection = false; function checkTextSelection($pos) { if (!warnedAboutTextSelection && !$pos.parent.inlineContent) { warnedAboutTextSelection = true; console["warn"]("TextSelection endpoint not pointing into a node with inline content (" + $pos.parent.type.name + ")"); } } /** A text selection represents a classical editor selection, with a head (the moving side) and anchor (immobile side), both of which point into textblock nodes. It can be empty (a regular cursor position). */ class TextSelection extends Selection { /** Construct a text selection between the given points. */ constructor($anchor, $head = $anchor) { checkTextSelection($anchor); checkTextSelection($head); super($anchor, $head); } /** Returns a resolved position if this is a cursor selection (an empty text selection), and null otherwise. */ get $cursor() { return this.$anchor.pos == this.$head.pos ? this.$head : null; } map(doc, mapping) { let $head = doc.resolve(mapping.map(this.head)); if (!$head.parent.inlineContent) return Selection.near($head); let $anchor = doc.resolve(mapping.map(this.anchor)); return new TextSelection($anchor.parent.inlineContent ? $anchor : $head, $head); } replace(tr, content = Slice.empty) { super.replace(tr, content); if (content == Slice.empty) { let marks = this.$from.marksAcross(this.$to); if (marks) tr.ensureMarks(marks); } } eq(other) { return other instanceof TextSelection && other.anchor == this.anchor && other.head == this.head; } getBookmark() { return new TextBookmark(this.anchor, this.head); } toJSON() { return { type: "text", anchor: this.anchor, head: this.head }; } /** @internal */ static fromJSON(doc, json) { if (typeof json.anchor != "number" || typeof json.head != "number") throw new RangeError("Invalid input for TextSelection.fromJSON"); return new TextSelection(doc.resolve(json.anchor), doc.resolve(json.head)); } /** Create a text selection from non-resolved positions. */ static create(doc, anchor, head = anchor) { let $anchor = doc.resolve(anchor); return new this($anchor, head == anchor ? $anchor : doc.resolve(head)); } /** Return a text selection that spans the given positions or, if they aren't text positions, find a text selection near them. `bias` determines whether the method searches forward (default) or backwards (negative number) first. Will fall back to calling [`Selection.near`](https://prosemirror.net/docs/ref/#state.Selection^near) when the document doesn't contain a valid text position. */ static between($anchor, $head, bias) { let dPos = $anchor.pos - $head.pos; if (!bias || dPos) bias = dPos >= 0 ? 1 : -1; if (!$head.parent.inlineContent) { let found = Selection.findFrom($head, bias, true) || Selection.findFrom($head, -bias, true); if (found) $head = found.$head;else return Selection.near($head, bias); } if (!$anchor.parent.inlineContent) { if (dPos == 0) { $anchor = $head; } else { $anchor = (Selection.findFrom($anchor, -bias, true) || Selection.findFrom($anchor, bias, true)).$anchor; if ($anchor.pos < $head.pos != dPos < 0) $anchor = $head; } } return new TextSelection($anchor, $head); } } Selection.jsonID("text", TextSelection); class TextBookmark { constructor(anchor, head) { this.anchor = anchor; this.head = head; } map(mapping) { return new TextBookmark(mapping.map(this.anchor), mapping.map(this.head)); } resolve(doc) { return TextSelection.between(doc.resolve(this.anchor), doc.resolve(this.head)); } } /** A node selection is a selection that points at a single node. All nodes marked [selectable](https://prosemirror.net/docs/ref/#model.NodeSpec.selectable) can be the target of a node selection. In such a selection, `from` and `to` point directly before and after the selected node, `anchor` equals `from`, and `head` equals `to`.. */ class NodeSelection extends Selection { /** Create a node selection. Does not verify the validity of its argument. */ constructor($pos) { let node = $pos.nodeAfter; let $end = $pos.node(0).resolve($pos.pos + node.nodeSize); super($pos, $end); this.node = node; } map(doc, mapping) { let { deleted, pos } = mapping.mapResult(this.anchor); let $pos = doc.resolve(pos); if (deleted) return Selection.near($pos); return new NodeSelection($pos); } content() { return new Slice(Fragment.from(this.node), 0, 0); } eq(other) { return other instanceof NodeSelection && other.anchor == this.anchor; } toJSON() { return { type: "node", anchor: this.anchor }; } getBookmark() { return new NodeBookmark(this.anchor); } /** @internal */ static fromJSON(doc, json) { if (typeof json.anchor != "number") throw new RangeError("Invalid input for NodeSelection.fromJSON"); return new NodeSelection(doc.resolve(json.anchor)); } /** Create a node selection from non-resolved positions. */ static create(doc, from) { return new NodeSelection(doc.resolve(from)); } /** Determines whether the given node may be selected as a node selection. */ static isSelectable(node) { return !node.isText && node.type.spec.selectable !== false; } } NodeSelection.prototype.visible = false; Selection.jsonID("node", NodeSelection); class NodeBookmark { constructor(anchor) { this.anchor = anchor; } map(mapping) { let { deleted, pos } = mapping.mapResult(this.anchor); return deleted ? new TextBookmark(pos, pos) : new NodeBookmark(pos); } resolve(doc) { let $pos = doc.resolve(this.anchor), node = $pos.nodeAfter; if (node && NodeSelection.isSelectable(node)) return new NodeSelection($pos); return Selection.near($pos); } } /** A selection type that represents selecting the whole document (which can not necessarily be expressed with a text selection, when there are for example leaf block nodes at the start or end of the document). */ class AllSelection extends Selection { /** Create an all-selection over the given document. */ constructor(doc) { super(doc.resolve(0), doc.resolve(doc.content.size)); } replace(tr, content = Slice.empty) { if (content == Slice.empty) { tr.delete(0, tr.doc.content.size); let sel = Selection.atStart(tr.doc); if (!sel.eq(tr.selection)) tr.setSelection(sel); } else { super.replace(tr, content); } } toJSON() { return { type: "all" }; } /** @internal */ static fromJSON(doc) { return new AllSelection(doc); } map(doc) { return new AllSelection(doc); } eq(other) { return other instanceof AllSelection; } getBookmark() { return AllBookmark; } } Selection.jsonID("all", AllSelection); const AllBookmark = { map() { return this; }, resolve(doc) { return new AllSelection(doc); } }; // FIXME we'll need some awareness of text direction when scanning for selections // Try to find a selection inside the given node. `pos` points at the // position where the search starts. When `text` is true, only return // text selections. function findSelectionIn(doc, node, pos, index, dir, text = false) { if (node.inlineContent) return TextSelection.create(doc, pos); for (let i = index - (dir > 0 ? 0 : 1); dir > 0 ? i < node.childCount : i >= 0; i += dir) { let child = node.child(i); if (!child.isAtom) { let inner = findSelectionIn(doc, child, pos + dir, dir < 0 ? child.childCount : 0, dir, text); if (inner) return inner; } else if (!text && NodeSelection.isSelectable(child)) { return NodeSelection.create(doc, pos - (dir < 0 ? child.nodeSize : 0)); } pos += child.nodeSize * dir; } return null; } function selectionToInsertionEnd$1(tr, startLen, bias) { let last = tr.steps.length - 1; if (last < startLen) return; let step = tr.steps[last]; if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep)) return; let map = tr.mapping.maps[last], end; map.forEach((_from, _to, _newFrom, newTo) => { if (end == null) end = newTo; }); tr.setSelection(Selection.near(tr.doc.resolve(end), bias)); } const UPDATED_SEL = 1, UPDATED_MARKS = 2, UPDATED_SCROLL = 4; /** An editor state transaction, which can be applied to a state to create an updated state. Use [`EditorState.tr`](https://prosemirror.net/docs/ref/#state.EditorState.tr) to create an instance. Transactions track changes to the document (they are a subclass of [`Transform`](https://prosemirror.net/docs/ref/#transform.Transform)), but also other state changes, like selection updates and adjustments of the set of [stored marks](https://prosemirror.net/docs/ref/#state.EditorState.storedMarks). In addition, you can store metadata properties in a transaction, which are extra pieces of information that client code or plugins can use to describe what a transaction represents, so that they can update their [own state](https://prosemirror.net/docs/ref/#state.StateField) accordingly. The [editor view](https://prosemirror.net/docs/ref/#view.EditorView) uses a few metadata properties: it will attach a property `"pointer"` with the value `true` to selection transactions directly caused by mouse or touch input, and a `"uiEvent"` property of that may be `"paste"`, `"cut"`, or `"drop"`. */ class Transaction extends Transform { /** @internal */ constructor(state) { super(state.doc); // The step count for which the current selection is valid. this.curSelectionFor = 0; // Bitfield to track which aspects of the state were updated by // this transaction. this.updated = 0; // Object used to store metadata properties for the transaction. this.meta = Object.create(null); this.time = Date.now(); this.curSelection = state.selection; this.storedMarks = state.storedMarks; } /** The transaction's current selection. This defaults to the editor selection [mapped](https://prosemirror.net/docs/ref/#state.Selection.map) through the steps in the transaction, but can be overwritten with [`setSelection`](https://prosemirror.net/docs/ref/#state.Transaction.setSelection). */ get selection() { if (this.curSelectionFor < this.steps.length) { this.curSelection = this.curSelection.map(this.doc, this.mapping.slice(this.curSelectionFor)); this.curSelectionFor = this.steps.length; } return this.curSelection; } /** Update the transaction's current selection. Will determine the selection that the editor gets when the transaction is applied. */ setSelection(selection) { if (selection.$from.doc != this.doc) throw new RangeError("Selection passed to setSelection must point at the current document"); this.curSelection = selection; this.curSelectionFor = this.steps.length; this.updated = (this.updated | UPDATED_SEL) & ~UPDATED_MARKS; this.storedMarks = null; return this; } /** Whether the selection was explicitly updated by this transaction. */ get selectionSet() { return (this.updated & UPDATED_SEL) > 0; } /** Set the current stored marks. */ setStoredMarks(marks) { this.storedMarks = marks; this.updated |= UPDATED_MARKS; return this; } /** Make sure the current stored marks or, if that is null, the marks at the selection, match the given set of marks. Does nothing if this is already the case. */ ensureMarks(marks) { if (!Mark$1.sameSet(this.storedMarks || this.selection.$from.marks(), marks)) this.setStoredMarks(marks); return this; } /** Add a mark to the set of stored marks. */ addStoredMark(mark) { return this.ensureMarks(mark.addToSet(this.storedMarks || this.selection.$head.marks())); } /** Remove a mark or mark type from the set of stored marks. */ removeStoredMark(mark) { return this.ensureMarks(mark.removeFromSet(this.storedMarks || this.selection.$head.marks())); } /** Whether the stored marks were explicitly set for this transaction. */ get storedMarksSet() { return (this.updated & UPDATED_MARKS) > 0; } /** @internal */ addStep(step, doc) { super.addStep(step, doc); this.updated = this.updated & ~UPDATED_MARKS; this.storedMarks = null; } /** Update the timestamp for the transaction. */ setTime(time) { this.time = time; return this; } /** Replace the current selection with the given slice. */ replaceSelection(slice) { this.selection.replace(this, slice); return this; } /** Replace the selection with the given node. When `inheritMarks` is true and the content is inline, it inherits the marks from the place where it is inserted. */ replaceSelectionWith(node, inheritMarks = true) { let selection = this.selection; if (inheritMarks) node = node.mark(this.storedMarks || (selection.empty ? selection.$from.marks() : selection.$from.marksAcross(selection.$to) || Mark$1.none)); selection.replaceWith(this, node); return this; } /** Delete the selection. */ deleteSelection() { this.selection.replace(this); return this; } /** Replace the given range, or the selection if no range is given, with a text node containing the given string. */ insertText(text, from, to) { let schema = this.doc.type.schema; if (from == null) { if (!text) return this.deleteSelection(); return this.replaceSelectionWith(schema.text(text), true); } else { if (to == null) to = from; to = to == null ? from : to; if (!text) return this.deleteRange(from, to); let marks = this.storedMarks; if (!marks) { let $from = this.doc.resolve(from); marks = to == from ? $from.marks() : $from.marksAcross(this.doc.resolve(to)); } this.replaceRangeWith(from, to, schema.text(text, marks)); if (!this.selection.empty) this.setSelection(Selection.near(this.selection.$to)); return this; } } /** Store a metadata property in this transaction, keyed either by name or by plugin. */ setMeta(key, value) { this.meta[typeof key == "string" ? key : key.key] = value; return this; } /** Retrieve a metadata property for a given name or plugin. */ getMeta(key) { return this.meta[typeof key == "string" ? key : key.key]; } /** Returns true if this transaction doesn't contain any metadata, and can thus safely be extended. */ get isGeneric() { for (let _ in this.meta) return false; return true; } /** Indicate that the editor should scroll the selection into view when updated to the state produced by this transaction. */ scrollIntoView() { this.updated |= UPDATED_SCROLL; return this; } /** True when this transaction has had `scrollIntoView` called on it. */ get scrolledIntoView() { return (this.updated & UPDATED_SCROLL) > 0; } } function bind(f, self) { return !self || !f ? f : f.bind(self); } class FieldDesc { constructor(name, desc, self) { this.name = name; this.init = bind(desc.init, self); this.apply = bind(desc.apply, self); } } const baseFields = [new FieldDesc("doc", { init(config) { return config.doc || config.schema.topNodeType.createAndFill(); }, apply(tr) { return tr.doc; } }), new FieldDesc("selection", { init(config, instance) { return config.selection || Selection.atStart(instance.doc); }, apply(tr) { return tr.selection; } }), new FieldDesc("storedMarks", { init(config) { return config.storedMarks || null; }, apply(tr, _marks, _old, state) { return state.selection.$cursor ? tr.storedMarks : null; } }), new FieldDesc("scrollToSelection", { init() { return 0; }, apply(tr, prev) { return tr.scrolledIntoView ? prev + 1 : prev; } })]; // Object wrapping the part of a state object that stays the same // across transactions. Stored in the state's `config` property. class Configuration { constructor(schema, plugins) { this.schema = schema; this.plugins = []; this.pluginsByKey = Object.create(null); this.fields = baseFields.slice(); if (plugins) plugins.forEach(plugin => { if (this.pluginsByKey[plugin.key]) throw new RangeError("Adding different instances of a keyed plugin (" + plugin.key + ")"); this.plugins.push(plugin); this.pluginsByKey[plugin.key] = plugin; if (plugin.spec.state) this.fields.push(new FieldDesc(plugin.key, plugin.spec.state, plugin)); }); } } /** The state of a ProseMirror editor is represented by an object of this type. A state is a persistent data structure—it isn't updated, but rather a new state value is computed from an old one using the [`apply`](https://prosemirror.net/docs/ref/#state.EditorState.apply) method. A state holds a number of built-in fields, and plugins can [define](https://prosemirror.net/docs/ref/#state.PluginSpec.state) additional fields. */ class EditorState { /** @internal */ constructor( /** @internal */ config) { this.config = config; } /** The schema of the state's document. */ get schema() { return this.config.schema; } /** The plugins that are active in this state. */ get plugins() { return this.config.plugins; } /** Apply the given transaction to produce a new state. */ apply(tr) { return this.applyTransaction(tr).state; } /** @internal */ filterTransaction(tr, ignore = -1) { for (let i = 0; i < this.config.plugins.length; i++) if (i != ignore) { let plugin = this.config.plugins[i]; if (plugin.spec.filterTransaction && !plugin.spec.filterTransaction.call(plugin, tr, this)) return false; } return true; } /** Verbose variant of [`apply`](https://prosemirror.net/docs/ref/#state.EditorState.apply) that returns the precise transactions that were applied (which might be influenced by the [transaction hooks](https://prosemirror.net/docs/ref/#state.PluginSpec.filterTransaction) of plugins) along with the new state. */ applyTransaction(rootTr) { if (!this.filterTransaction(rootTr)) return { state: this, transactions: [] }; let trs = [rootTr], newState = this.applyInner(rootTr), seen = null; // This loop repeatedly gives plugins a chance to respond to // transactions as new transactions are added, making sure to only // pass the transactions the plugin did not see before. for (;;) { let haveNew = false; for (let i = 0; i < this.config.plugins.length; i++) { let plugin = this.config.plugins[i]; if (plugin.spec.appendTransaction) { let n = seen ? seen[i].n : 0, oldState = seen ? seen[i].state : this; let tr = n < trs.length && plugin.spec.appendTransaction.call(plugin, n ? trs.slice(n) : trs, oldState, newState); if (tr && newState.filterTransaction(tr, i)) { tr.setMeta("appendedTransaction", rootTr); if (!seen) { seen = []; for (let j = 0; j < this.config.plugins.length; j++) seen.push(j < i ? { state: newState, n: trs.length } : { state: this, n: 0 }); } trs.push(tr); newState = newState.applyInner(tr); haveNew = true; } if (seen) seen[i] = { state: newState, n: trs.length }; } } if (!haveNew) return { state: newState, transactions: trs }; } } /** @internal */ applyInner(tr) { if (!tr.before.eq(this.doc)) throw new RangeError("Applying a mismatched transaction"); let newInstance = new EditorState(this.config), fields = this.config.fields; for (let i = 0; i < fields.length; i++) { let field = fields[i]; newInstance[field.name] = field.apply(tr, this[field.name], this, newInstance); } return newInstance; } /** Start a [transaction](https://prosemirror.net/docs/ref/#state.Transaction) from this state. */ get tr() { return new Transaction(this); } /** Create a new state. */ static create(config) { let $config = new Configuration(config.doc ? config.doc.type.schema : config.schema, config.plugins); let instance = new EditorState($config); for (let i = 0; i < $config.fields.length; i++) instance[$config.fields[i].name] = $config.fields[i].init(config, instance); return instance; } /** Create a new state based on this one, but with an adjusted set of active plugins. State fields that exist in both sets of plugins are kept unchanged. Those that no longer exist are dropped, and those that are new are initialized using their [`init`](https://prosemirror.net/docs/ref/#state.StateField.init) method, passing in the new configuration object.. */ reconfigure(config) { let $config = new Configuration(this.schema, config.plugins); let fields = $config.fields, instance = new EditorState($config); for (let i = 0; i < fields.length; i++) { let name = fields[i].name; instance[name] = this.hasOwnProperty(name) ? this[name] : fields[i].init(config, instance); } return instance; } /** Serialize this state to JSON. If you want to serialize the state of plugins, pass an object mapping property names to use in the resulting JSON object to plugin objects. The argument may also be a string or number, in which case it is ignored, to support the way `JSON.stringify` calls `toString` methods. */ toJSON(pluginFields) { let result = { doc: this.doc.toJSON(), selection: this.selection.toJSON() }; if (this.storedMarks) result.storedMarks = this.storedMarks.map(m => m.toJSON()); if (pluginFields && typeof pluginFields == 'object') for (let prop in pluginFields) { if (prop == "doc" || prop == "selection") throw new RangeError("The JSON fields `doc` and `selection` are reserved"); let plugin = pluginFields[prop], state = plugin.spec.state; if (state && state.toJSON) result[prop] = state.toJSON.call(plugin, this[plugin.key]); } return result; } /** Deserialize a JSON representation of a state. `config` should have at least a `schema` field, and should contain array of plugins to initialize the state with. `pluginFields` can be used to deserialize the state of plugins, by associating plugin instances with the property names they use in the JSON object. */ static fromJSON(config, json, pluginFields) { if (!json) throw new RangeError("Invalid input for EditorState.fromJSON"); if (!config.schema) throw new RangeError("Required config field 'schema' missing"); let $config = new Configuration(config.schema, config.plugins); let instance = new EditorState($config); $config.fields.forEach(field => { if (field.name == "doc") { instance.doc = Node$2.fromJSON(config.schema, json.doc); } else if (field.name == "selection") { instance.selection = Selection.fromJSON(instance.doc, json.selection); } else if (field.name == "storedMarks") { if (json.storedMarks) instance.storedMarks = json.storedMarks.map(config.schema.markFromJSON); } else { if (pluginFields) for (let prop in pluginFields) { let plugin = pluginFields[prop], state = plugin.spec.state; if (plugin.key == field.name && state && state.fromJSON && Object.prototype.hasOwnProperty.call(json, prop)) { instance[field.name] = state.fromJSON.call(plugin, config, json[prop], instance); return; } } instance[field.name] = field.init(config, instance); } }); return instance; } } function bindProps(obj, self, target) { for (let prop in obj) { let val = obj[prop]; if (val instanceof Function) val = val.bind(self);else if (prop == "handleDOMEvents") val = bindProps(val, self, {}); target[prop] = val; } return target; } /** Plugins bundle functionality that can be added to an editor. They are part of the [editor state](https://prosemirror.net/docs/ref/#state.EditorState) and may influence that state and the view that contains it. */ class Plugin { /** Create a plugin. */ constructor( /** The plugin's [spec object](https://prosemirror.net/docs/ref/#state.PluginSpec). */ spec) { this.spec = spec; /** The [props](https://prosemirror.net/docs/ref/#view.EditorProps) exported by this plugin. */ this.props = {}; if (spec.props) bindProps(spec.props, this, this.props); this.key = spec.key ? spec.key.key : createKey("plugin"); } /** Extract the plugin's state field from an editor state. */ getState(state) { return state[this.key]; } } const keys = Object.create(null); function createKey(name) { if (name in keys) return name + "$" + ++keys[name]; keys[name] = 0; return name + "$"; } /** A key is used to [tag](https://prosemirror.net/docs/ref/#state.PluginSpec.key) plugins in a way that makes it possible to find them, given an editor state. Assigning a key does mean only one plugin of that type can be active in a state. */ class PluginKey { /** Create a plugin key. */ constructor(name = "key") { this.key = createKey(name); } /** Get the active plugin with this key, if any, from an editor state. */ get(state) { return state.config.pluginsByKey[this.key]; } /** Get the plugin's state from an editor state. */ getState(state) { return state[this.key]; } } const domIndex = function (node) { for (var index = 0;; index++) { node = node.previousSibling; if (!node) return index; } }; const parentNode = function (node) { let parent = node.assignedSlot || node.parentNode; return parent && parent.nodeType == 11 ? parent.host : parent; }; let reusedRange = null; // Note that this will always return the same range, because DOM range // objects are every expensive, and keep slowing down subsequent DOM // updates, for some reason. const textRange = function (node, from, to) { let range = reusedRange || (reusedRange = document.createRange()); range.setEnd(node, to == null ? node.nodeValue.length : to); range.setStart(node, from || 0); return range; }; // Scans forward and backward through DOM positions equivalent to the // given one to see if the two are in the same place (i.e. after a // text node vs at the end of that text node) const isEquivalentPosition = function (node, off, targetNode, targetOff) { return targetNode && (scanFor(node, off, targetNode, targetOff, -1) || scanFor(node, off, targetNode, targetOff, 1)); }; const atomElements = /^(img|br|input|textarea|hr)$/i; function scanFor(node, off, targetNode, targetOff, dir) { for (;;) { if (node == targetNode && off == targetOff) return true; if (off == (dir < 0 ? 0 : nodeSize(node))) { let parent = node.parentNode; if (!parent || parent.nodeType != 1 || hasBlockDesc(node) || atomElements.test(node.nodeName) || node.contentEditable == "false") return false; off = domIndex(node) + (dir < 0 ? 0 : 1); node = parent; } else if (node.nodeType == 1) { node = node.childNodes[off + (dir < 0 ? -1 : 0)]; if (node.contentEditable == "false") return false; off = dir < 0 ? nodeSize(node) : 0; } else { return false; } } } function nodeSize(node) { return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length; } function isOnEdge(node, offset, parent) { for (let atStart = offset == 0, atEnd = offset == nodeSize(node); atStart || atEnd;) { if (node == parent) return true; let index = domIndex(node); node = node.parentNode; if (!node) return false; atStart = atStart && index == 0; atEnd = atEnd && index == nodeSize(node); } } function hasBlockDesc(dom) { let desc; for (let cur = dom; cur; cur = cur.parentNode) if (desc = cur.pmViewDesc) break; return desc && desc.node && desc.node.isBlock && (desc.dom == dom || desc.contentDOM == dom); } // Work around Chrome issue https://bugs.chromium.org/p/chromium/issues/detail?id=447523 // (isCollapsed inappropriately returns true in shadow dom) const selectionCollapsed = function (domSel) { return domSel.focusNode && isEquivalentPosition(domSel.focusNode, domSel.focusOffset, domSel.anchorNode, domSel.anchorOffset); }; function keyEvent(keyCode, key) { let event = document.createEvent("Event"); event.initEvent("keydown", true, true); event.keyCode = keyCode; event.key = event.code = key; return event; } function deepActiveElement(doc) { let elt = doc.activeElement; while (elt && elt.shadowRoot) elt = elt.shadowRoot.activeElement; return elt; } const nav = typeof navigator != "undefined" ? navigator : null; const doc = typeof document != "undefined" ? document : null; const agent = nav && nav.userAgent || ""; const ie_edge = /Edge\/(\d+)/.exec(agent); const ie_upto10 = /MSIE \d/.exec(agent); const ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(agent); const ie$1 = !!(ie_upto10 || ie_11up || ie_edge); const ie_version = ie_upto10 ? document.documentMode : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0; const gecko = !ie$1 && /gecko\/(\d+)/i.test(agent); gecko && +(/Firefox\/(\d+)/.exec(agent) || [0, 0])[1]; const _chrome = !ie$1 && /Chrome\/(\d+)/.exec(agent); const chrome$1 = !!_chrome; const chrome_version = _chrome ? +_chrome[1] : 0; const safari = !ie$1 && !!nav && /Apple Computer/.test(nav.vendor); // Is true for both iOS and iPadOS for convenience const ios = safari && (/Mobile\/\w+/.test(agent) || !!nav && nav.maxTouchPoints > 2); const mac$2 = ios || (nav ? /Mac/.test(nav.platform) : false); const android = /Android \d/.test(agent); const webkit = !!doc && "webkitFontSmoothing" in doc.documentElement.style; const webkit_version = webkit ? +(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0; function windowRect(doc) { return { left: 0, right: doc.documentElement.clientWidth, top: 0, bottom: doc.documentElement.clientHeight }; } function getSide(value, side) { return typeof value == "number" ? value : value[side]; } function clientRect(node) { let rect = node.getBoundingClientRect(); // Adjust for elements with style "transform: scale()" let scaleX = rect.width / node.offsetWidth || 1; let scaleY = rect.height / node.offsetHeight || 1; // Make sure scrollbar width isn't included in the rectangle return { left: rect.left, right: rect.left + node.clientWidth * scaleX, top: rect.top, bottom: rect.top + node.clientHeight * scaleY }; } function scrollRectIntoView(view, rect, startDOM) { let scrollThreshold = view.someProp("scrollThreshold") || 0, scrollMargin = view.someProp("scrollMargin") || 5; let doc = view.dom.ownerDocument; for (let parent = startDOM || view.dom;; parent = parentNode(parent)) { if (!parent) break; if (parent.nodeType != 1) continue; let elt = parent; let atTop = elt == doc.body; let bounding = atTop ? windowRect(doc) : clientRect(elt); let moveX = 0, moveY = 0; if (rect.top < bounding.top + getSide(scrollThreshold, "top")) moveY = -(bounding.top - rect.top + getSide(scrollMargin, "top"));else if (rect.bottom > bounding.bottom - getSide(scrollThreshold, "bottom")) moveY = rect.bottom - bounding.bottom + getSide(scrollMargin, "bottom"); if (rect.left < bounding.left + getSide(scrollThreshold, "left")) moveX = -(bounding.left - rect.left + getSide(scrollMargin, "left"));else if (rect.right > bounding.right - getSide(scrollThreshold, "right")) moveX = rect.right - bounding.right + getSide(scrollMargin, "right"); if (moveX || moveY) { if (atTop) { doc.defaultView.scrollBy(moveX, moveY); } else { let startX = elt.scrollLeft, startY = elt.scrollTop; if (moveY) elt.scrollTop += moveY; if (moveX) elt.scrollLeft += moveX; let dX = elt.scrollLeft - startX, dY = elt.scrollTop - startY; rect = { left: rect.left - dX, top: rect.top - dY, right: rect.right - dX, bottom: rect.bottom - dY }; } } if (atTop) break; } } // Store the scroll position of the editor's parent nodes, along with // the top position of an element near the top of the editor, which // will be used to make sure the visible viewport remains stable even // when the size of the content above changes. function storeScrollPos(view) { let rect = view.dom.getBoundingClientRect(), startY = Math.max(0, rect.top); let refDOM, refTop; for (let x = (rect.left + rect.right) / 2, y = startY + 1; y < Math.min(innerHeight, rect.bottom); y += 5) { let dom = view.root.elementFromPoint(x, y); if (!dom || dom == view.dom || !view.dom.contains(dom)) continue; let localRect = dom.getBoundingClientRect(); if (localRect.top >= startY - 20) { refDOM = dom; refTop = localRect.top; break; } } return { refDOM: refDOM, refTop: refTop, stack: scrollStack(view.dom) }; } function scrollStack(dom) { let stack = [], doc = dom.ownerDocument; for (let cur = dom; cur; cur = parentNode(cur)) { stack.push({ dom: cur, top: cur.scrollTop, left: cur.scrollLeft }); if (dom == doc) break; } return stack; } // Reset the scroll position of the editor's parent nodes to that what // it was before, when storeScrollPos was called. function resetScrollPos({ refDOM, refTop, stack }) { let newRefTop = refDOM ? refDOM.getBoundingClientRect().top : 0; restoreScrollStack(stack, newRefTop == 0 ? 0 : newRefTop - refTop); } function restoreScrollStack(stack, dTop) { for (let i = 0; i < stack.length; i++) { let { dom, top, left } = stack[i]; if (dom.scrollTop != top + dTop) dom.scrollTop = top + dTop; if (dom.scrollLeft != left) dom.scrollLeft = left; } } let preventScrollSupported = null; // Feature-detects support for .focus({preventScroll: true}), and uses // a fallback kludge when not supported. function focusPreventScroll(dom) { if (dom.setActive) return dom.setActive(); // in IE if (preventScrollSupported) return dom.focus(preventScrollSupported); let stored = scrollStack(dom); dom.focus(preventScrollSupported == null ? { get preventScroll() { preventScrollSupported = { preventScroll: true }; return true; } } : undefined); if (!preventScrollSupported) { preventScrollSupported = false; restoreScrollStack(stored, 0); } } function findOffsetInNode(node, coords) { let closest, dxClosest = 2e8, coordsClosest, offset = 0; let rowBot = coords.top, rowTop = coords.top; for (let child = node.firstChild, childIndex = 0; child; child = child.nextSibling, childIndex++) { let rects; if (child.nodeType == 1) rects = child.getClientRects();else if (child.nodeType == 3) rects = textRange(child).getClientRects();else continue; for (let i = 0; i < rects.length; i++) { let rect = rects[i]; if (rect.top <= rowBot && rect.bottom >= rowTop) { rowBot = Math.max(rect.bottom, rowBot); rowTop = Math.min(rect.top, rowTop); let dx = rect.left > coords.left ? rect.left - coords.left : rect.right < coords.left ? coords.left - rect.right : 0; if (dx < dxClosest) { closest = child; dxClosest = dx; coordsClosest = dx && closest.nodeType == 3 ? { left: rect.right < coords.left ? rect.right : rect.left, top: coords.top } : coords; if (child.nodeType == 1 && dx) offset = childIndex + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0); continue; } } if (!closest && (coords.left >= rect.right && coords.top >= rect.top || coords.left >= rect.left && coords.top >= rect.bottom)) offset = childIndex + 1; } } if (closest && closest.nodeType == 3) return findOffsetInText(closest, coordsClosest); if (!closest || dxClosest && closest.nodeType == 1) return { node, offset }; return findOffsetInNode(closest, coordsClosest); } function findOffsetInText(node, coords) { let len = node.nodeValue.length; let range = document.createRange(); for (let i = 0; i < len; i++) { range.setEnd(node, i + 1); range.setStart(node, i); let rect = singleRect(range, 1); if (rect.top == rect.bottom) continue; if (inRect(coords, rect)) return { node, offset: i + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0) }; } return { node, offset: 0 }; } function inRect(coords, rect) { return coords.left >= rect.left - 1 && coords.left <= rect.right + 1 && coords.top >= rect.top - 1 && coords.top <= rect.bottom + 1; } function targetKludge(dom, coords) { let parent = dom.parentNode; if (parent && /^li$/i.test(parent.nodeName) && coords.left < dom.getBoundingClientRect().left) return parent; return dom; } function posFromElement(view, elt, coords) { let { node, offset } = findOffsetInNode(elt, coords), bias = -1; if (node.nodeType == 1 && !node.firstChild) { let rect = node.getBoundingClientRect(); bias = rect.left != rect.right && coords.left > (rect.left + rect.right) / 2 ? 1 : -1; } return view.docView.posFromDOM(node, offset, bias); } function posFromCaret(view, node, offset, coords) { // Browser (in caretPosition/RangeFromPoint) will agressively // normalize towards nearby inline nodes. Since we are interested in // positions between block nodes too, we first walk up the hierarchy // of nodes to see if there are block nodes that the coordinates // fall outside of. If so, we take the position before/after that // block. If not, we call `posFromDOM` on the raw node/offset. let outsideBlock = -1; for (let cur = node, sawBlock = false;;) { if (cur == view.dom) break; let desc = view.docView.nearestDesc(cur, true); if (!desc) return null; if (desc.dom.nodeType == 1 && (desc.node.isBlock && desc.parent && !sawBlock || !desc.contentDOM)) { let rect = desc.dom.getBoundingClientRect(); if (desc.node.isBlock && desc.parent && !sawBlock) { sawBlock = true; if (rect.left > coords.left || rect.top > coords.top) outsideBlock = desc.posBefore;else if (rect.right < coords.left || rect.bottom < coords.top) outsideBlock = desc.posAfter; } if (!desc.contentDOM && outsideBlock < 0) { // If we are inside a leaf, return the side of the leaf closer to the coords let before = desc.node.isBlock ? coords.top < (rect.top + rect.bottom) / 2 : coords.left < (rect.left + rect.right) / 2; return before ? desc.posBefore : desc.posAfter; } } cur = desc.dom.parentNode; } return outsideBlock > -1 ? outsideBlock : view.docView.posFromDOM(node, offset, -1); } function elementFromPoint(element, coords, box) { let len = element.childNodes.length; if (len && box.top < box.bottom) { for (let startI = Math.max(0, Math.min(len - 1, Math.floor(len * (coords.top - box.top) / (box.bottom - box.top)) - 2)), i = startI;;) { let child = element.childNodes[i]; if (child.nodeType == 1) { let rects = child.getClientRects(); for (let j = 0; j < rects.length; j++) { let rect = rects[j]; if (inRect(coords, rect)) return elementFromPoint(child, coords, rect); } } if ((i = (i + 1) % len) == startI) break; } } return element; } // Given an x,y position on the editor, get the position in the document. function posAtCoords(view, coords) { let doc = view.dom.ownerDocument, node, offset = 0; if (doc.caretPositionFromPoint) { try { // Firefox throws for this call in hard-to-predict circumstances (#994) let pos = doc.caretPositionFromPoint(coords.left, coords.top); if (pos) ({ offsetNode: node, offset } = pos); } catch (_) {} } if (!node && doc.caretRangeFromPoint) { let range = doc.caretRangeFromPoint(coords.left, coords.top); if (range) ({ startContainer: node, startOffset: offset } = range); } let elt = (view.root.elementFromPoint ? view.root : doc).elementFromPoint(coords.left, coords.top); let pos; if (!elt || !view.dom.contains(elt.nodeType != 1 ? elt.parentNode : elt)) { let box = view.dom.getBoundingClientRect(); if (!inRect(coords, box)) return null; elt = elementFromPoint(view.dom, coords, box); if (!elt) return null; } // Safari's caretRangeFromPoint returns nonsense when on a draggable element if (safari) { for (let p = elt; node && p; p = parentNode(p)) if (p.draggable) node = undefined; } elt = targetKludge(elt, coords); if (node) { if (gecko && node.nodeType == 1) { // Firefox will sometimes return offsets into <input> nodes, which // have no actual children, from caretPositionFromPoint (#953) offset = Math.min(offset, node.childNodes.length); // It'll also move the returned position before image nodes, // even if those are behind it. if (offset < node.childNodes.length) { let next = node.childNodes[offset], box; if (next.nodeName == "IMG" && (box = next.getBoundingClientRect()).right <= coords.left && box.bottom > coords.top) offset++; } } // Suspiciously specific kludge to work around caret*FromPoint // never returning a position at the end of the document if (node == view.dom && offset == node.childNodes.length - 1 && node.lastChild.nodeType == 1 && coords.top > node.lastChild.getBoundingClientRect().bottom) pos = view.state.doc.content.size; // Ignore positions directly after a BR, since caret*FromPoint // 'round up' positions that would be more accurately placed // before the BR node. else if (offset == 0 || node.nodeType != 1 || node.childNodes[offset - 1].nodeName != "BR") pos = posFromCaret(view, node, offset, coords); } if (pos == null) pos = posFromElement(view, elt, coords); let desc = view.docView.nearestDesc(elt, true); return { pos, inside: desc ? desc.posAtStart - desc.border : -1 }; } function singleRect(target, bias) { let rects = target.getClientRects(); return !rects.length ? target.getBoundingClientRect() : rects[bias < 0 ? 0 : rects.length - 1]; } const BIDI = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; // Given a position in the document model, get a bounding box of the // character at that position, relative to the window. function coordsAtPos(view, pos, side) { let { node, offset, atom } = view.docView.domFromPos(pos, side < 0 ? -1 : 1); let supportEmptyRange = webkit || gecko; if (node.nodeType == 3) { // These browsers support querying empty text ranges. Prefer that in // bidi context or when at the end of a node. if (supportEmptyRange && (BIDI.test(node.nodeValue) || (side < 0 ? !offset : offset == node.nodeValue.length))) { let rect = singleRect(textRange(node, offset, offset), side); // Firefox returns bad results (the position before the space) // when querying a position directly after line-broken // whitespace. Detect this situation and and kludge around it if (gecko && offset && /\s/.test(node.nodeValue[offset - 1]) && offset < node.nodeValue.length) { let rectBefore = singleRect(textRange(node, offset - 1, offset - 1), -1); if (rectBefore.top == rect.top) { let rectAfter = singleRect(textRange(node, offset, offset + 1), -1); if (rectAfter.top != rect.top) return flattenV(rectAfter, rectAfter.left < rectBefore.left); } } return rect; } else { let from = offset, to = offset, takeSide = side < 0 ? 1 : -1; if (side < 0 && !offset) { to++; takeSide = -1; } else if (side >= 0 && offset == node.nodeValue.length) { from--; takeSide = 1; } else if (side < 0) { from--; } else { to++; } return flattenV(singleRect(textRange(node, from, to), 1), takeSide < 0); } } let $dom = view.state.doc.resolve(pos - (atom || 0)); // Return a horizontal line in block context if (!$dom.parent.inlineContent) { if (atom == null && offset && (side < 0 || offset == nodeSize(node))) { let before = node.childNodes[offset - 1]; if (before.nodeType == 1) return flattenH(before.getBoundingClientRect(), false); } if (atom == null && offset < nodeSize(node)) { let after = node.childNodes[offset]; if (after.nodeType == 1) return flattenH(after.getBoundingClientRect(), true); } return flattenH(node.getBoundingClientRect(), side >= 0); } // Inline, not in text node (this is not Bidi-safe) if (atom == null && offset && (side < 0 || offset == nodeSize(node))) { let before = node.childNodes[offset - 1]; let target = before.nodeType == 3 ? textRange(before, nodeSize(before) - (supportEmptyRange ? 0 : 1)) // BR nodes tend to only return the rectangle before them. // Only use them if they are the last element in their parent : before.nodeType == 1 && (before.nodeName != "BR" || !before.nextSibling) ? before : null; if (target) return flattenV(singleRect(target, 1), false); } if (atom == null && offset < nodeSize(node)) { let after = node.childNodes[offset]; while (after.pmViewDesc && after.pmViewDesc.ignoreForCoords) after = after.nextSibling; let target = !after ? null : after.nodeType == 3 ? textRange(after, 0, supportEmptyRange ? 0 : 1) : after.nodeType == 1 ? after : null; if (target) return flattenV(singleRect(target, -1), true); } // All else failed, just try to get a rectangle for the target node return flattenV(singleRect(node.nodeType == 3 ? textRange(node) : node, -side), side >= 0); } function flattenV(rect, left) { if (rect.width == 0) return rect; let x = left ? rect.left : rect.right; return { top: rect.top, bottom: rect.bottom, left: x, right: x }; } function flattenH(rect, top) { if (rect.height == 0) return rect; let y = top ? rect.top : rect.bottom; return { top: y, bottom: y, left: rect.left, right: rect.right }; } function withFlushedState(view, state, f) { let viewState = view.state, active = view.root.activeElement; if (viewState != state) view.updateState(state); if (active != view.dom) view.focus(); try { return f(); } finally { if (viewState != state) view.updateState(viewState); if (active != view.dom && active) active.focus(); } } // Whether vertical position motion in a given direction // from a position would leave a text block. function endOfTextblockVertical(view, state, dir) { let sel = state.selection; let $pos = dir == "up" ? sel.$from : sel.$to; return withFlushedState(view, state, () => { let { node: dom } = view.docView.domFromPos($pos.pos, dir == "up" ? -1 : 1); for (;;) { let nearest = view.docView.nearestDesc(dom, true); if (!nearest) break; if (nearest.node.isBlock) { dom = nearest.contentDOM || nearest.dom; break; } dom = nearest.dom.parentNode; } let coords = coordsAtPos(view, $pos.pos, 1); for (let child = dom.firstChild; child; child = child.nextSibling) { let boxes; if (child.nodeType == 1) boxes = child.getClientRects();else if (child.nodeType == 3) boxes = textRange(child, 0, child.nodeValue.length).getClientRects();else continue; for (let i = 0; i < boxes.length; i++) { let box = boxes[i]; if (box.bottom > box.top + 1 && (dir == "up" ? coords.top - box.top > (box.bottom - coords.top) * 2 : box.bottom - coords.bottom > (coords.bottom - box.top) * 2)) return false; } } return true; }); } const maybeRTL = /[\u0590-\u08ac]/; function endOfTextblockHorizontal(view, state, dir) { let { $head } = state.selection; if (!$head.parent.isTextblock) return false; let offset = $head.parentOffset, atStart = !offset, atEnd = offset == $head.parent.content.size; let sel = view.domSelection(); // If the textblock is all LTR, or the browser doesn't support // Selection.modify (Edge), fall back to a primitive approach if (!maybeRTL.test($head.parent.textContent) || !sel.modify) return dir == "left" || dir == "backward" ? atStart : atEnd; return withFlushedState(view, state, () => { // This is a huge hack, but appears to be the best we can // currently do: use `Selection.modify` to move the selection by // one character, and see if that moves the cursor out of the // textblock (or doesn't move it at all, when at the start/end of // the document). let { focusNode: oldNode, focusOffset: oldOff, anchorNode, anchorOffset } = view.domSelectionRange(); let oldBidiLevel = sel.caretBidiLevel // Only for Firefox ; sel.modify("move", dir, "character"); let parentDOM = $head.depth ? view.docView.domAfterPos($head.before()) : view.dom; let { focusNode: newNode, focusOffset: newOff } = view.domSelectionRange(); let result = newNode && !parentDOM.contains(newNode.nodeType == 1 ? newNode : newNode.parentNode) || oldNode == newNode && oldOff == newOff; // Restore the previous selection try { sel.collapse(anchorNode, anchorOffset); if (oldNode && (oldNode != anchorNode || oldOff != anchorOffset) && sel.extend) sel.extend(oldNode, oldOff); } catch (_) {} if (oldBidiLevel != null) sel.caretBidiLevel = oldBidiLevel; return result; }); } let cachedState = null; let cachedDir = null; let cachedResult = false; function endOfTextblock(view, state, dir) { if (cachedState == state && cachedDir == dir) return cachedResult; cachedState = state; cachedDir = dir; return cachedResult = dir == "up" || dir == "down" ? endOfTextblockVertical(view, state, dir) : endOfTextblockHorizontal(view, state, dir); } // View descriptions are data structures that describe the DOM that is // used to represent the editor's content. They are used for: // // - Incremental redrawing when the document changes // // - Figuring out what part of the document a given DOM position // corresponds to // // - Wiring in custom implementations of the editing interface for a // given node // // They form a doubly-linked mutable tree, starting at `view.docView`. const NOT_DIRTY = 0, CHILD_DIRTY = 1, CONTENT_DIRTY = 2, NODE_DIRTY = 3; // Superclass for the various kinds of descriptions. Defines their // basic structure and shared methods. class ViewDesc { constructor(parent, children, dom, // This is the node that holds the child views. It may be null for // descs that don't have children. contentDOM) { this.parent = parent; this.children = children; this.dom = dom; this.contentDOM = contentDOM; this.dirty = NOT_DIRTY; // An expando property on the DOM node provides a link back to its // description. dom.pmViewDesc = this; } // Used to check whether a given description corresponds to a // widget/mark/node. matchesWidget(widget) { return false; } matchesMark(mark) { return false; } matchesNode(node, outerDeco, innerDeco) { return false; } matchesHack(nodeName) { return false; } // When parsing in-editor content (in domchange.js), we allow // descriptions to determine the parse rules that should be used to // parse them. parseRule() { return null; } // Used by the editor's event handler to ignore events that come // from certain descs. stopEvent(event) { return false; } // The size of the content represented by this desc. get size() { let size = 0; for (let i = 0; i < this.children.length; i++) size += this.children[i].size; return size; } // For block nodes, this represents the space taken up by their // start/end tokens. get border() { return 0; } destroy() { this.parent = undefined; if (this.dom.pmViewDesc == this) this.dom.pmViewDesc = undefined; for (let i = 0; i < this.children.length; i++) this.children[i].destroy(); } posBeforeChild(child) { for (let i = 0, pos = this.posAtStart;; i++) { let cur = this.children[i]; if (cur == child) return pos; pos += cur.size; } } get posBefore() { return this.parent.posBeforeChild(this); } get posAtStart() { return this.parent ? this.parent.posBeforeChild(this) + this.border : 0; } get posAfter() { return this.posBefore + this.size; } get posAtEnd() { return this.posAtStart + this.size - 2 * this.border; } localPosFromDOM(dom, offset, bias) { // If the DOM position is in the content, use the child desc after // it to figure out a position. if (this.contentDOM && this.contentDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode)) { if (bias < 0) { let domBefore, desc; if (dom == this.contentDOM) { domBefore = dom.childNodes[offset - 1]; } else { while (dom.parentNode != this.contentDOM) dom = dom.parentNode; domBefore = dom.previousSibling; } while (domBefore && !((desc = domBefore.pmViewDesc) && desc.parent == this)) domBefore = domBefore.previousSibling; return domBefore ? this.posBeforeChild(desc) + desc.size : this.posAtStart; } else { let domAfter, desc; if (dom == this.contentDOM) { domAfter = dom.childNodes[offset]; } else { while (dom.parentNode != this.contentDOM) dom = dom.parentNode; domAfter = dom.nextSibling; } while (domAfter && !((desc = domAfter.pmViewDesc) && desc.parent == this)) domAfter = domAfter.nextSibling; return domAfter ? this.posBeforeChild(desc) : this.posAtEnd; } } // Otherwise, use various heuristics, falling back on the bias // parameter, to determine whether to return the position at the // start or at the end of this view desc. let atEnd; if (dom == this.dom && this.contentDOM) { atEnd = offset > domIndex(this.contentDOM); } else if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) { atEnd = dom.compareDocumentPosition(this.contentDOM) & 2; } else if (this.dom.firstChild) { if (offset == 0) for (let search = dom;; search = search.parentNode) { if (search == this.dom) { atEnd = false; break; } if (search.previousSibling) break; } if (atEnd == null && offset == dom.childNodes.length) for (let search = dom;; search = search.parentNode) { if (search == this.dom) { atEnd = true; break; } if (search.nextSibling) break; } } return (atEnd == null ? bias > 0 : atEnd) ? this.posAtEnd : this.posAtStart; } nearestDesc(dom, onlyNodes = false) { for (let first = true, cur = dom; cur; cur = cur.parentNode) { let desc = this.getDesc(cur), nodeDOM; if (desc && (!onlyNodes || desc.node)) { // If dom is outside of this desc's nodeDOM, don't count it. if (first && (nodeDOM = desc.nodeDOM) && !(nodeDOM.nodeType == 1 ? nodeDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode) : nodeDOM == dom)) first = false;else return desc; } } } getDesc(dom) { let desc = dom.pmViewDesc; for (let cur = desc; cur; cur = cur.parent) if (cur == this) return desc; } posFromDOM(dom, offset, bias) { for (let scan = dom; scan; scan = scan.parentNode) { let desc = this.getDesc(scan); if (desc) return desc.localPosFromDOM(dom, offset, bias); } return -1; } // Find the desc for the node after the given pos, if any. (When a // parent node overrode rendering, there might not be one.) descAt(pos) { for (let i = 0, offset = 0; i < this.children.length; i++) { let child = this.children[i], end = offset + child.size; if (offset == pos && end != offset) { while (!child.border && child.children.length) child = child.children[0]; return child; } if (pos < end) return child.descAt(pos - offset - child.border); offset = end; } } domFromPos(pos, side) { if (!this.contentDOM) return { node: this.dom, offset: 0, atom: pos + 1 }; // First find the position in the child array let i = 0, offset = 0; for (let curPos = 0; i < this.children.length; i++) { let child = this.children[i], end = curPos + child.size; if (end > pos || child instanceof TrailingHackViewDesc) { offset = pos - curPos; break; } curPos = end; } // If this points into the middle of a child, call through if (offset) return this.children[i].domFromPos(offset - this.children[i].border, side); // Go back if there were any zero-length widgets with side >= 0 before this point for (let prev; i && !(prev = this.children[i - 1]).size && prev instanceof WidgetViewDesc && prev.side >= 0; i--) {} // Scan towards the first useable node if (side <= 0) { let prev, enter = true; for (;; i--, enter = false) { prev = i ? this.children[i - 1] : null; if (!prev || prev.dom.parentNode == this.contentDOM) break; } if (prev && side && enter && !prev.border && !prev.domAtom) return prev.domFromPos(prev.size, side); return { node: this.contentDOM, offset: prev ? domIndex(prev.dom) + 1 : 0 }; } else { let next, enter = true; for (;; i++, enter = false) { next = i < this.children.length ? this.children[i] : null; if (!next || next.dom.parentNode == this.contentDOM) break; } if (next && enter && !next.border && !next.domAtom) return next.domFromPos(0, side); return { node: this.contentDOM, offset: next ? domIndex(next.dom) : this.contentDOM.childNodes.length }; } } // Used to find a DOM range in a single parent for a given changed // range. parseRange(from, to, base = 0) { if (this.children.length == 0) return { node: this.contentDOM, from, to, fromOffset: 0, toOffset: this.contentDOM.childNodes.length }; let fromOffset = -1, toOffset = -1; for (let offset = base, i = 0;; i++) { let child = this.children[i], end = offset + child.size; if (fromOffset == -1 && from <= end) { let childBase = offset + child.border; // FIXME maybe descend mark views to parse a narrower range? if (from >= childBase && to <= end - child.border && child.node && child.contentDOM && this.contentDOM.contains(child.contentDOM)) return child.parseRange(from, to, childBase); from = offset; for (let j = i; j > 0; j--) { let prev = this.children[j - 1]; if (prev.size && prev.dom.parentNode == this.contentDOM && !prev.emptyChildAt(1)) { fromOffset = domIndex(prev.dom) + 1; break; } from -= prev.size; } if (fromOffset == -1) fromOffset = 0; } if (fromOffset > -1 && (end > to || i == this.children.length - 1)) { to = end; for (let j = i + 1; j < this.children.length; j++) { let next = this.children[j]; if (next.size && next.dom.parentNode == this.contentDOM && !next.emptyChildAt(-1)) { toOffset = domIndex(next.dom); break; } to += next.size; } if (toOffset == -1) toOffset = this.contentDOM.childNodes.length; break; } offset = end; } return { node: this.contentDOM, from, to, fromOffset, toOffset }; } emptyChildAt(side) { if (this.border || !this.contentDOM || !this.children.length) return false; let child = this.children[side < 0 ? 0 : this.children.length - 1]; return child.size == 0 || child.emptyChildAt(side); } domAfterPos(pos) { let { node, offset } = this.domFromPos(pos, 0); if (node.nodeType != 1 || offset == node.childNodes.length) throw new RangeError("No node after pos " + pos); return node.childNodes[offset]; } // View descs are responsible for setting any selection that falls // entirely inside of them, so that custom implementations can do // custom things with the selection. Note that this falls apart when // a selection starts in such a node and ends in another, in which // case we just use whatever domFromPos produces as a best effort. setSelection(anchor, head, root, force = false) { // If the selection falls entirely in a child, give it to that child let from = Math.min(anchor, head), to = Math.max(anchor, head); for (let i = 0, offset = 0; i < this.children.length; i++) { let child = this.children[i], end = offset + child.size; if (from > offset && to < end) return child.setSelection(anchor - offset - child.border, head - offset - child.border, root, force); offset = end; } let anchorDOM = this.domFromPos(anchor, anchor ? -1 : 1); let headDOM = head == anchor ? anchorDOM : this.domFromPos(head, head ? -1 : 1); let domSel = root.getSelection(); let brKludge = false; // On Firefox, using Selection.collapse to put the cursor after a // BR node for some reason doesn't always work (#1073). On Safari, // the cursor sometimes inexplicable visually lags behind its // reported position in such situations (#1092). if ((gecko || safari) && anchor == head) { let { node, offset } = anchorDOM; if (node.nodeType == 3) { brKludge = !!(offset && node.nodeValue[offset - 1] == "\n"); // Issue #1128 if (brKludge && offset == node.nodeValue.length) { for (let scan = node, after; scan; scan = scan.parentNode) { if (after = scan.nextSibling) { if (after.nodeName == "BR") anchorDOM = headDOM = { node: after.parentNode, offset: domIndex(after) + 1 }; break; } let desc = scan.pmViewDesc; if (desc && desc.node && desc.node.isBlock) break; } } } else { let prev = node.childNodes[offset - 1]; brKludge = prev && (prev.nodeName == "BR" || prev.contentEditable == "false"); } } // Firefox can act strangely when the selection is in front of an // uneditable node. See #1163 and https://bugzilla.mozilla.org/show_bug.cgi?id=1709536 if (gecko && domSel.focusNode && domSel.focusNode != headDOM.node && domSel.focusNode.nodeType == 1) { let after = domSel.focusNode.childNodes[domSel.focusOffset]; if (after && after.contentEditable == "false") force = true; } if (!(force || brKludge && safari) && isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset) && isEquivalentPosition(headDOM.node, headDOM.offset, domSel.focusNode, domSel.focusOffset)) return; // Selection.extend can be used to create an 'inverted' selection // (one where the focus is before the anchor), but not all // browsers support it yet. let domSelExtended = false; if ((domSel.extend || anchor == head) && !brKludge) { domSel.collapse(anchorDOM.node, anchorDOM.offset); try { if (anchor != head) domSel.extend(headDOM.node, headDOM.offset); domSelExtended = true; } catch (_) { // In some cases with Chrome the selection is empty after calling // collapse, even when it should be valid. This appears to be a bug, but // it is difficult to isolate. If this happens fallback to the old path // without using extend. // Similarly, this could crash on Safari if the editor is hidden, and // there was no selection. } } if (!domSelExtended) { if (anchor > head) { let tmp = anchorDOM; anchorDOM = headDOM; headDOM = tmp; } let range = document.createRange(); range.setEnd(headDOM.node, headDOM.offset); range.setStart(anchorDOM.node, anchorDOM.offset); domSel.removeAllRanges(); domSel.addRange(range); } } ignoreMutation(mutation) { return !this.contentDOM && mutation.type != "selection"; } get contentLost() { return this.contentDOM && this.contentDOM != this.dom && !this.dom.contains(this.contentDOM); } // Remove a subtree of the element tree that has been touched // by a DOM change, so that the next update will redraw it. markDirty(from, to) { for (let offset = 0, i = 0; i < this.children.length; i++) { let child = this.children[i], end = offset + child.size; if (offset == end ? from <= end && to >= offset : from < end && to > offset) { let startInside = offset + child.border, endInside = end - child.border; if (from >= startInside && to <= endInside) { this.dirty = from == offset || to == end ? CONTENT_DIRTY : CHILD_DIRTY; if (from == startInside && to == endInside && (child.contentLost || child.dom.parentNode != this.contentDOM)) child.dirty = NODE_DIRTY;else child.markDirty(from - startInside, to - startInside); return; } else { child.dirty = child.dom == child.contentDOM && child.dom.parentNode == this.contentDOM && !child.children.length ? CONTENT_DIRTY : NODE_DIRTY; } } offset = end; } this.dirty = CONTENT_DIRTY; } markParentsDirty() { let level = 1; for (let node = this.parent; node; node = node.parent, level++) { let dirty = level == 1 ? CONTENT_DIRTY : CHILD_DIRTY; if (node.dirty < dirty) node.dirty = dirty; } } get domAtom() { return false; } get ignoreForCoords() { return false; } } // A widget desc represents a widget decoration, which is a DOM node // drawn between the document nodes. class WidgetViewDesc extends ViewDesc { constructor(parent, widget, view, pos) { let self, dom = widget.type.toDOM; if (typeof dom == "function") dom = dom(view, () => { if (!self) return pos; if (self.parent) return self.parent.posBeforeChild(self); }); if (!widget.type.spec.raw) { if (dom.nodeType != 1) { let wrap = document.createElement("span"); wrap.appendChild(dom); dom = wrap; } dom.contentEditable = "false"; dom.classList.add("ProseMirror-widget"); } super(parent, [], dom, null); this.widget = widget; this.widget = widget; self = this; } matchesWidget(widget) { return this.dirty == NOT_DIRTY && widget.type.eq(this.widget.type); } parseRule() { return { ignore: true }; } stopEvent(event) { let stop = this.widget.spec.stopEvent; return stop ? stop(event) : false; } ignoreMutation(mutation) { return mutation.type != "selection" || this.widget.spec.ignoreSelection; } destroy() { this.widget.type.destroy(this.dom); super.destroy(); } get domAtom() { return true; } get side() { return this.widget.type.side; } } class CompositionViewDesc extends ViewDesc { constructor(parent, dom, textDOM, text) { super(parent, [], dom, null); this.textDOM = textDOM; this.text = text; } get size() { return this.text.length; } localPosFromDOM(dom, offset) { if (dom != this.textDOM) return this.posAtStart + (offset ? this.size : 0); return this.posAtStart + offset; } domFromPos(pos) { return { node: this.textDOM, offset: pos }; } ignoreMutation(mut) { return mut.type === 'characterData' && mut.target.nodeValue == mut.oldValue; } } // A mark desc represents a mark. May have multiple children, // depending on how the mark is split. Note that marks are drawn using // a fixed nesting order, for simplicity and predictability, so in // some cases they will be split more often than would appear // necessary. class MarkViewDesc extends ViewDesc { constructor(parent, mark, dom, contentDOM) { super(parent, [], dom, contentDOM); this.mark = mark; } static create(parent, mark, inline, view) { let custom = view.nodeViews[mark.type.name]; let spec = custom && custom(mark, view, inline); if (!spec || !spec.dom) spec = DOMSerializer.renderSpec(document, mark.type.spec.toDOM(mark, inline)); return new MarkViewDesc(parent, mark, spec.dom, spec.contentDOM || spec.dom); } parseRule() { if (this.dirty & NODE_DIRTY || this.mark.type.spec.reparseInView) return null; return { mark: this.mark.type.name, attrs: this.mark.attrs, contentElement: this.contentDOM || undefined }; } matchesMark(mark) { return this.dirty != NODE_DIRTY && this.mark.eq(mark); } markDirty(from, to) { super.markDirty(from, to); // Move dirty info to nearest node view if (this.dirty != NOT_DIRTY) { let parent = this.parent; while (!parent.node) parent = parent.parent; if (parent.dirty < this.dirty) parent.dirty = this.dirty; this.dirty = NOT_DIRTY; } } slice(from, to, view) { let copy = MarkViewDesc.create(this.parent, this.mark, true, view); let nodes = this.children, size = this.size; if (to < size) nodes = replaceNodes(nodes, to, size, view); if (from > 0) nodes = replaceNodes(nodes, 0, from, view); for (let i = 0; i < nodes.length; i++) nodes[i].parent = copy; copy.children = nodes; return copy; } } // Node view descs are the main, most common type of view desc, and // correspond to an actual node in the document. Unlike mark descs, // they populate their child array themselves. class NodeViewDesc extends ViewDesc { constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos) { super(parent, [], dom, contentDOM); this.node = node; this.outerDeco = outerDeco; this.innerDeco = innerDeco; this.nodeDOM = nodeDOM; if (contentDOM) this.updateChildren(view, pos); } // By default, a node is rendered using the `toDOM` method from the // node type spec. But client code can use the `nodeViews` spec to // supply a custom node view, which can influence various aspects of // the way the node works. // // (Using subclassing for this was intentionally decided against, // since it'd require exposing a whole slew of finicky // implementation details to the user code that they probably will // never need.) static create(parent, node, outerDeco, innerDeco, view, pos) { let custom = view.nodeViews[node.type.name], descObj; let spec = custom && custom(node, view, () => { // (This is a function that allows the custom view to find its // own position) if (!descObj) return pos; if (descObj.parent) return descObj.parent.posBeforeChild(descObj); }, outerDeco, innerDeco); let dom = spec && spec.dom, contentDOM = spec && spec.contentDOM; if (node.isText) { if (!dom) dom = document.createTextNode(node.text);else if (dom.nodeType != 3) throw new RangeError("Text must be rendered as a DOM text node"); } else if (!dom) { ({ dom, contentDOM } = DOMSerializer.renderSpec(document, node.type.spec.toDOM(node))); } if (!contentDOM && !node.isText && dom.nodeName != "BR") { // Chrome gets confused by <br contenteditable=false> if (!dom.hasAttribute("contenteditable")) dom.contentEditable = "false"; if (node.type.spec.draggable) dom.draggable = true; } let nodeDOM = dom; dom = applyOuterDeco(dom, outerDeco, node); if (spec) return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, spec, view, pos + 1);else if (node.isText) return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM, view);else return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, view, pos + 1); } parseRule() { // Experimental kludge to allow opt-in re-parsing of nodes if (this.node.type.spec.reparseInView) return null; // FIXME the assumption that this can always return the current // attrs means that if the user somehow manages to change the // attrs in the dom, that won't be picked up. Not entirely sure // whether this is a problem let rule = { node: this.node.type.name, attrs: this.node.attrs }; if (this.node.type.whitespace == "pre") rule.preserveWhitespace = "full"; if (!this.contentDOM) { rule.getContent = () => this.node.content; } else if (!this.contentLost) { rule.contentElement = this.contentDOM; } else { // Chrome likes to randomly recreate parent nodes when // backspacing things. When that happens, this tries to find the // new parent. for (let i = this.children.length - 1; i >= 0; i--) { let child = this.children[i]; if (this.dom.contains(child.dom.parentNode)) { rule.contentElement = child.dom.parentNode; break; } } if (!rule.contentElement) rule.getContent = () => Fragment.empty; } return rule; } matchesNode(node, outerDeco, innerDeco) { return this.dirty == NOT_DIRTY && node.eq(this.node) && sameOuterDeco(outerDeco, this.outerDeco) && innerDeco.eq(this.innerDeco); } get size() { return this.node.nodeSize; } get border() { return this.node.isLeaf ? 0 : 1; } // Syncs `this.children` to match `this.node.content` and the local // decorations, possibly introducing nesting for marks. Then, in a // separate step, syncs the DOM inside `this.contentDOM` to // `this.children`. updateChildren(view, pos) { let inline = this.node.inlineContent, off = pos; let composition = view.composing ? this.localCompositionInfo(view, pos) : null; let localComposition = composition && composition.pos > -1 ? composition : null; let compositionInChild = composition && composition.pos < 0; let updater = new ViewTreeUpdater(this, localComposition && localComposition.node, view); iterDeco(this.node, this.innerDeco, (widget, i, insideNode) => { if (widget.spec.marks) updater.syncToMarks(widget.spec.marks, inline, view);else if (widget.type.side >= 0 && !insideNode) updater.syncToMarks(i == this.node.childCount ? Mark$1.none : this.node.child(i).marks, inline, view); // If the next node is a desc matching this widget, reuse it, // otherwise insert the widget as a new view desc. updater.placeWidget(widget, view, off); }, (child, outerDeco, innerDeco, i) => { // Make sure the wrapping mark descs match the node's marks. updater.syncToMarks(child.marks, inline, view); // Try several strategies for drawing this node let compIndex; if (updater.findNodeMatch(child, outerDeco, innerDeco, i)) ;else if (compositionInChild && view.state.selection.from > off && view.state.selection.to < off + child.nodeSize && (compIndex = updater.findIndexWithChild(composition.node)) > -1 && updater.updateNodeAt(child, outerDeco, innerDeco, compIndex, view)) ;else if (updater.updateNextNode(child, outerDeco, innerDeco, view, i)) ;else { // Add it as a new view updater.addNode(child, outerDeco, innerDeco, view, off); } off += child.nodeSize; }); // Drop all remaining descs after the current position. updater.syncToMarks([], inline, view); if (this.node.isTextblock) updater.addTextblockHacks(); updater.destroyRest(); // Sync the DOM if anything changed if (updater.changed || this.dirty == CONTENT_DIRTY) { // May have to protect focused DOM from being changed if a composition is active if (localComposition) this.protectLocalComposition(view, localComposition); renderDescs(this.contentDOM, this.children, view); if (ios) iosHacks(this.dom); } } localCompositionInfo(view, pos) { // Only do something if both the selection and a focused text node // are inside of this node let { from, to } = view.state.selection; if (!(view.state.selection instanceof TextSelection) || from < pos || to > pos + this.node.content.size) return null; let sel = view.domSelectionRange(); let textNode = nearbyTextNode(sel.focusNode, sel.focusOffset); if (!textNode || !this.dom.contains(textNode.parentNode)) return null; if (this.node.inlineContent) { // Find the text in the focused node in the node, stop if it's not // there (may have been modified through other means, in which // case it should overwritten) let text = textNode.nodeValue; let textPos = findTextInFragment(this.node.content, text, from - pos, to - pos); return textPos < 0 ? null : { node: textNode, pos: textPos, text }; } else { return { node: textNode, pos: -1, text: "" }; } } protectLocalComposition(view, { node, pos, text }) { // The node is already part of a local view desc, leave it there if (this.getDesc(node)) return; // Create a composition view for the orphaned nodes let topNode = node; for (;; topNode = topNode.parentNode) { if (topNode.parentNode == this.contentDOM) break; while (topNode.previousSibling) topNode.parentNode.removeChild(topNode.previousSibling); while (topNode.nextSibling) topNode.parentNode.removeChild(topNode.nextSibling); if (topNode.pmViewDesc) topNode.pmViewDesc = undefined; } let desc = new CompositionViewDesc(this, topNode, node, text); view.input.compositionNodes.push(desc); // Patch up this.children to contain the composition view this.children = replaceNodes(this.children, pos, pos + text.length, view, desc); } // If this desc must be updated to match the given node decoration, // do so and return true. update(node, outerDeco, innerDeco, view) { if (this.dirty == NODE_DIRTY || !node.sameMarkup(this.node)) return false; this.updateInner(node, outerDeco, innerDeco, view); return true; } updateInner(node, outerDeco, innerDeco, view) { this.updateOuterDeco(outerDeco); this.node = node; this.innerDeco = innerDeco; if (this.contentDOM) this.updateChildren(view, this.posAtStart); this.dirty = NOT_DIRTY; } updateOuterDeco(outerDeco) { if (sameOuterDeco(outerDeco, this.outerDeco)) return; let needsWrap = this.nodeDOM.nodeType != 1; let oldDOM = this.dom; this.dom = patchOuterDeco(this.dom, this.nodeDOM, computeOuterDeco(this.outerDeco, this.node, needsWrap), computeOuterDeco(outerDeco, this.node, needsWrap)); if (this.dom != oldDOM) { oldDOM.pmViewDesc = undefined; this.dom.pmViewDesc = this; } this.outerDeco = outerDeco; } // Mark this node as being the selected node. selectNode() { if (this.nodeDOM.nodeType == 1) this.nodeDOM.classList.add("ProseMirror-selectednode"); if (this.contentDOM || !this.node.type.spec.draggable) this.dom.draggable = true; } // Remove selected node marking from this node. deselectNode() { if (this.nodeDOM.nodeType == 1) this.nodeDOM.classList.remove("ProseMirror-selectednode"); if (this.contentDOM || !this.node.type.spec.draggable) this.dom.removeAttribute("draggable"); } get domAtom() { return this.node.isAtom; } } // Create a view desc for the top-level document node, to be exported // and used by the view class. function docViewDesc(doc, outerDeco, innerDeco, dom, view) { applyOuterDeco(dom, outerDeco, doc); return new NodeViewDesc(undefined, doc, outerDeco, innerDeco, dom, dom, dom, view, 0); } class TextViewDesc extends NodeViewDesc { constructor(parent, node, outerDeco, innerDeco, dom, nodeDOM, view) { super(parent, node, outerDeco, innerDeco, dom, null, nodeDOM, view, 0); } parseRule() { let skip = this.nodeDOM.parentNode; while (skip && skip != this.dom && !skip.pmIsDeco) skip = skip.parentNode; return { skip: skip || true }; } update(node, outerDeco, innerDeco, view) { if (this.dirty == NODE_DIRTY || this.dirty != NOT_DIRTY && !this.inParent() || !node.sameMarkup(this.node)) return false; this.updateOuterDeco(outerDeco); if ((this.dirty != NOT_DIRTY || node.text != this.node.text) && node.text != this.nodeDOM.nodeValue) { this.nodeDOM.nodeValue = node.text; if (view.trackWrites == this.nodeDOM) view.trackWrites = null; } this.node = node; this.dirty = NOT_DIRTY; return true; } inParent() { let parentDOM = this.parent.contentDOM; for (let n = this.nodeDOM; n; n = n.parentNode) if (n == parentDOM) return true; return false; } domFromPos(pos) { return { node: this.nodeDOM, offset: pos }; } localPosFromDOM(dom, offset, bias) { if (dom == this.nodeDOM) return this.posAtStart + Math.min(offset, this.node.text.length); return super.localPosFromDOM(dom, offset, bias); } ignoreMutation(mutation) { return mutation.type != "characterData" && mutation.type != "selection"; } slice(from, to, view) { let node = this.node.cut(from, to), dom = document.createTextNode(node.text); return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom, view); } markDirty(from, to) { super.markDirty(from, to); if (this.dom != this.nodeDOM && (from == 0 || to == this.nodeDOM.nodeValue.length)) this.dirty = NODE_DIRTY; } get domAtom() { return false; } } // A dummy desc used to tag trailing BR or IMG nodes created to work // around contentEditable terribleness. class TrailingHackViewDesc extends ViewDesc { parseRule() { return { ignore: true }; } matchesHack(nodeName) { return this.dirty == NOT_DIRTY && this.dom.nodeName == nodeName; } get domAtom() { return true; } get ignoreForCoords() { return this.dom.nodeName == "IMG"; } } // A separate subclass is used for customized node views, so that the // extra checks only have to be made for nodes that are actually // customized. class CustomNodeViewDesc extends NodeViewDesc { constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec, view, pos) { super(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos); this.spec = spec; } // A custom `update` method gets to decide whether the update goes // through. If it does, and there's a `contentDOM` node, our logic // updates the children. update(node, outerDeco, innerDeco, view) { if (this.dirty == NODE_DIRTY) return false; if (this.spec.update) { let result = this.spec.update(node, outerDeco, innerDeco); if (result) this.updateInner(node, outerDeco, innerDeco, view); return result; } else if (!this.contentDOM && !node.isLeaf) { return false; } else { return super.update(node, outerDeco, innerDeco, view); } } selectNode() { this.spec.selectNode ? this.spec.selectNode() : super.selectNode(); } deselectNode() { this.spec.deselectNode ? this.spec.deselectNode() : super.deselectNode(); } setSelection(anchor, head, root, force) { this.spec.setSelection ? this.spec.setSelection(anchor, head, root) : super.setSelection(anchor, head, root, force); } destroy() { if (this.spec.destroy) this.spec.destroy(); super.destroy(); } stopEvent(event) { return this.spec.stopEvent ? this.spec.stopEvent(event) : false; } ignoreMutation(mutation) { return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : super.ignoreMutation(mutation); } } // Sync the content of the given DOM node with the nodes associated // with the given array of view descs, recursing into mark descs // because this should sync the subtree for a whole node at a time. function renderDescs(parentDOM, descs, view) { let dom = parentDOM.firstChild, written = false; for (let i = 0; i < descs.length; i++) { let desc = descs[i], childDOM = desc.dom; if (childDOM.parentNode == parentDOM) { while (childDOM != dom) { dom = rm(dom); written = true; } dom = dom.nextSibling; } else { written = true; parentDOM.insertBefore(childDOM, dom); } if (desc instanceof MarkViewDesc) { let pos = dom ? dom.previousSibling : parentDOM.lastChild; renderDescs(desc.contentDOM, desc.children, view); dom = pos ? pos.nextSibling : parentDOM.firstChild; } } while (dom) { dom = rm(dom); written = true; } if (written && view.trackWrites == parentDOM) view.trackWrites = null; } const OuterDecoLevel = function (nodeName) { if (nodeName) this.nodeName = nodeName; }; OuterDecoLevel.prototype = Object.create(null); const noDeco = [new OuterDecoLevel()]; function computeOuterDeco(outerDeco, node, needsWrap) { if (outerDeco.length == 0) return noDeco; let top = needsWrap ? noDeco[0] : new OuterDecoLevel(), result = [top]; for (let i = 0; i < outerDeco.length; i++) { let attrs = outerDeco[i].type.attrs; if (!attrs) continue; if (attrs.nodeName) result.push(top = new OuterDecoLevel(attrs.nodeName)); for (let name in attrs) { let val = attrs[name]; if (val == null) continue; if (needsWrap && result.length == 1) result.push(top = new OuterDecoLevel(node.isInline ? "span" : "div")); if (name == "class") top.class = (top.class ? top.class + " " : "") + val;else if (name == "style") top.style = (top.style ? top.style + ";" : "") + val;else if (name != "nodeName") top[name] = val; } } return result; } function patchOuterDeco(outerDOM, nodeDOM, prevComputed, curComputed) { // Shortcut for trivial case if (prevComputed == noDeco && curComputed == noDeco) return nodeDOM; let curDOM = nodeDOM; for (let i = 0; i < curComputed.length; i++) { let deco = curComputed[i], prev = prevComputed[i]; if (i) { let parent; if (prev && prev.nodeName == deco.nodeName && curDOM != outerDOM && (parent = curDOM.parentNode) && parent.nodeName.toLowerCase() == deco.nodeName) { curDOM = parent; } else { parent = document.createElement(deco.nodeName); parent.pmIsDeco = true; parent.appendChild(curDOM); prev = noDeco[0]; curDOM = parent; } } patchAttributes(curDOM, prev || noDeco[0], deco); } return curDOM; } function patchAttributes(dom, prev, cur) { for (let name in prev) if (name != "class" && name != "style" && name != "nodeName" && !(name in cur)) dom.removeAttribute(name); for (let name in cur) if (name != "class" && name != "style" && name != "nodeName" && cur[name] != prev[name]) dom.setAttribute(name, cur[name]); if (prev.class != cur.class) { let prevList = prev.class ? prev.class.split(" ").filter(Boolean) : []; let curList = cur.class ? cur.class.split(" ").filter(Boolean) : []; for (let i = 0; i < prevList.length; i++) if (curList.indexOf(prevList[i]) == -1) dom.classList.remove(prevList[i]); for (let i = 0; i < curList.length; i++) if (prevList.indexOf(curList[i]) == -1) dom.classList.add(curList[i]); if (dom.classList.length == 0) dom.removeAttribute("class"); } if (prev.style != cur.style) { if (prev.style) { let prop = /\s*([\w\-\xa1-\uffff]+)\s*:(?:"(?:\\.|[^"])*"|'(?:\\.|[^'])*'|\(.*?\)|[^;])*/g, m; while (m = prop.exec(prev.style)) dom.style.removeProperty(m[1]); } if (cur.style) dom.style.cssText += cur.style; } } function applyOuterDeco(dom, deco, node) { return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, dom.nodeType != 1)); } function sameOuterDeco(a, b) { if (a.length != b.length) return false; for (let i = 0; i < a.length; i++) if (!a[i].type.eq(b[i].type)) return false; return true; } // Remove a DOM node and return its next sibling. function rm(dom) { let next = dom.nextSibling; dom.parentNode.removeChild(dom); return next; } // Helper class for incrementally updating a tree of mark descs and // the widget and node descs inside of them. class ViewTreeUpdater { constructor(top, lock, view) { this.lock = lock; this.view = view; // Index into `this.top`'s child array, represents the current // update position. this.index = 0; // When entering a mark, the current top and index are pushed // onto this. this.stack = []; // Tracks whether anything was changed this.changed = false; this.top = top; this.preMatch = preMatch(top.node.content, top); } // Destroy and remove the children between the given indices in // `this.top`. destroyBetween(start, end) { if (start == end) return; for (let i = start; i < end; i++) this.top.children[i].destroy(); this.top.children.splice(start, end - start); this.changed = true; } // Destroy all remaining children in `this.top`. destroyRest() { this.destroyBetween(this.index, this.top.children.length); } // Sync the current stack of mark descs with the given array of // marks, reusing existing mark descs when possible. syncToMarks(marks, inline, view) { let keep = 0, depth = this.stack.length >> 1; let maxKeep = Math.min(depth, marks.length); while (keep < maxKeep && (keep == depth - 1 ? this.top : this.stack[keep + 1 << 1]).matchesMark(marks[keep]) && marks[keep].type.spec.spanning !== false) keep++; while (keep < depth) { this.destroyRest(); this.top.dirty = NOT_DIRTY; this.index = this.stack.pop(); this.top = this.stack.pop(); depth--; } while (depth < marks.length) { this.stack.push(this.top, this.index + 1); let found = -1; for (let i = this.index; i < Math.min(this.index + 3, this.top.children.length); i++) { let next = this.top.children[i]; if (next.matchesMark(marks[depth]) && !this.isLocked(next.dom)) { found = i; break; } } if (found > -1) { if (found > this.index) { this.changed = true; this.destroyBetween(this.index, found); } this.top = this.top.children[this.index]; } else { let markDesc = MarkViewDesc.create(this.top, marks[depth], inline, view); this.top.children.splice(this.index, 0, markDesc); this.top = markDesc; this.changed = true; } this.index = 0; depth++; } } // Try to find a node desc matching the given data. Skip over it and // return true when successful. findNodeMatch(node, outerDeco, innerDeco, index) { let found = -1, targetDesc; if (index >= this.preMatch.index && (targetDesc = this.preMatch.matches[index - this.preMatch.index]).parent == this.top && targetDesc.matchesNode(node, outerDeco, innerDeco)) { found = this.top.children.indexOf(targetDesc, this.index); } else { for (let i = this.index, e = Math.min(this.top.children.length, i + 5); i < e; i++) { let child = this.top.children[i]; if (child.matchesNode(node, outerDeco, innerDeco) && !this.preMatch.matched.has(child)) { found = i; break; } } } if (found < 0) return false; this.destroyBetween(this.index, found); this.index++; return true; } updateNodeAt(node, outerDeco, innerDeco, index, view) { let child = this.top.children[index]; if (child.dirty == NODE_DIRTY && child.dom == child.contentDOM) child.dirty = CONTENT_DIRTY; if (!child.update(node, outerDeco, innerDeco, view)) return false; this.destroyBetween(this.index, index); this.index++; return true; } findIndexWithChild(domNode) { for (;;) { let parent = domNode.parentNode; if (!parent) return -1; if (parent == this.top.contentDOM) { let desc = domNode.pmViewDesc; if (desc) for (let i = this.index; i < this.top.children.length; i++) { if (this.top.children[i] == desc) return i; } return -1; } domNode = parent; } } // Try to update the next node, if any, to the given data. Checks // pre-matches to avoid overwriting nodes that could still be used. updateNextNode(node, outerDeco, innerDeco, view, index) { for (let i = this.index; i < this.top.children.length; i++) { let next = this.top.children[i]; if (next instanceof NodeViewDesc) { let preMatch = this.preMatch.matched.get(next); if (preMatch != null && preMatch != index) return false; let nextDOM = next.dom; // Can't update if nextDOM is or contains this.lock, except if // it's a text node whose content already matches the new text // and whose decorations match the new ones. let locked = this.isLocked(nextDOM) && !(node.isText && next.node && next.node.isText && next.nodeDOM.nodeValue == node.text && next.dirty != NODE_DIRTY && sameOuterDeco(outerDeco, next.outerDeco)); if (!locked && next.update(node, outerDeco, innerDeco, view)) { this.destroyBetween(this.index, i); if (next.dom != nextDOM) this.changed = true; this.index++; return true; } break; } } return false; } // Insert the node as a newly created node desc. addNode(node, outerDeco, innerDeco, view, pos) { this.top.children.splice(this.index++, 0, NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos)); this.changed = true; } placeWidget(widget, view, pos) { let next = this.index < this.top.children.length ? this.top.children[this.index] : null; if (next && next.matchesWidget(widget) && (widget == next.widget || !next.widget.type.toDOM.parentNode)) { this.index++; } else { let desc = new WidgetViewDesc(this.top, widget, view, pos); this.top.children.splice(this.index++, 0, desc); this.changed = true; } } // Make sure a textblock looks and behaves correctly in // contentEditable. addTextblockHacks() { let lastChild = this.top.children[this.index - 1], parent = this.top; while (lastChild instanceof MarkViewDesc) { parent = lastChild; lastChild = parent.children[parent.children.length - 1]; } if (!lastChild || // Empty textblock !(lastChild instanceof TextViewDesc) || /\n$/.test(lastChild.node.text) || this.view.requiresGeckoHackNode && /\s$/.test(lastChild.node.text)) { // Avoid bugs in Safari's cursor drawing (#1165) and Chrome's mouse selection (#1152) if ((safari || chrome$1) && lastChild && lastChild.dom.contentEditable == "false") this.addHackNode("IMG", parent); this.addHackNode("BR", this.top); } } addHackNode(nodeName, parent) { if (parent == this.top && this.index < parent.children.length && parent.children[this.index].matchesHack(nodeName)) { this.index++; } else { let dom = document.createElement(nodeName); if (nodeName == "IMG") { dom.className = "ProseMirror-separator"; dom.alt = ""; } if (nodeName == "BR") dom.className = "ProseMirror-trailingBreak"; let hack = new TrailingHackViewDesc(this.top, [], dom, null); if (parent != this.top) parent.children.push(hack);else parent.children.splice(this.index++, 0, hack); this.changed = true; } } isLocked(node) { return this.lock && (node == this.lock || node.nodeType == 1 && node.contains(this.lock.parentNode)); } } // Iterate from the end of the fragment and array of descs to find // directly matching ones, in order to avoid overeagerly reusing those // for other nodes. Returns the fragment index of the first node that // is part of the sequence of matched nodes at the end of the // fragment. function preMatch(frag, parentDesc) { let curDesc = parentDesc, descI = curDesc.children.length; let fI = frag.childCount, matched = new Map(), matches = []; outer: while (fI > 0) { let desc; for (;;) { if (descI) { let next = curDesc.children[descI - 1]; if (next instanceof MarkViewDesc) { curDesc = next; descI = next.children.length; } else { desc = next; descI--; break; } } else if (curDesc == parentDesc) { break outer; } else { // FIXME descI = curDesc.parent.children.indexOf(curDesc); curDesc = curDesc.parent; } } let node = desc.node; if (!node) continue; if (node != frag.child(fI - 1)) break; --fI; matched.set(desc, fI); matches.push(desc); } return { index: fI, matched, matches: matches.reverse() }; } function compareSide(a, b) { return a.type.side - b.type.side; } // This function abstracts iterating over the nodes and decorations in // a fragment. Calls `onNode` for each node, with its local and child // decorations. Splits text nodes when there is a decoration starting // or ending inside of them. Calls `onWidget` for each widget. function iterDeco(parent, deco, onWidget, onNode) { let locals = deco.locals(parent), offset = 0; // Simple, cheap variant for when there are no local decorations if (locals.length == 0) { for (let i = 0; i < parent.childCount; i++) { let child = parent.child(i); onNode(child, locals, deco.forChild(offset, child), i); offset += child.nodeSize; } return; } let decoIndex = 0, active = [], restNode = null; for (let parentIndex = 0;;) { if (decoIndex < locals.length && locals[decoIndex].to == offset) { let widget = locals[decoIndex++], widgets; while (decoIndex < locals.length && locals[decoIndex].to == offset) (widgets || (widgets = [widget])).push(locals[decoIndex++]); if (widgets) { widgets.sort(compareSide); for (let i = 0; i < widgets.length; i++) onWidget(widgets[i], parentIndex, !!restNode); } else { onWidget(widget, parentIndex, !!restNode); } } let child, index; if (restNode) { index = -1; child = restNode; restNode = null; } else if (parentIndex < parent.childCount) { index = parentIndex; child = parent.child(parentIndex++); } else { break; } for (let i = 0; i < active.length; i++) if (active[i].to <= offset) active.splice(i--, 1); while (decoIndex < locals.length && locals[decoIndex].from <= offset && locals[decoIndex].to > offset) active.push(locals[decoIndex++]); let end = offset + child.nodeSize; if (child.isText) { let cutAt = end; if (decoIndex < locals.length && locals[decoIndex].from < cutAt) cutAt = locals[decoIndex].from; for (let i = 0; i < active.length; i++) if (active[i].to < cutAt) cutAt = active[i].to; if (cutAt < end) { restNode = child.cut(cutAt - offset); child = child.cut(0, cutAt - offset); end = cutAt; index = -1; } } let outerDeco = child.isInline && !child.isLeaf ? active.filter(d => !d.inline) : active.slice(); onNode(child, outerDeco, deco.forChild(offset, child), index); offset = end; } } // List markers in Mobile Safari will mysteriously disappear // sometimes. This works around that. function iosHacks(dom) { if (dom.nodeName == "UL" || dom.nodeName == "OL") { let oldCSS = dom.style.cssText; dom.style.cssText = oldCSS + "; list-style: square !important"; window.getComputedStyle(dom).listStyle; dom.style.cssText = oldCSS; } } function nearbyTextNode(node, offset) { for (;;) { if (node.nodeType == 3) return node; if (node.nodeType == 1 && offset > 0) { if (node.childNodes.length > offset && node.childNodes[offset].nodeType == 3) return node.childNodes[offset]; node = node.childNodes[offset - 1]; offset = nodeSize(node); } else if (node.nodeType == 1 && offset < node.childNodes.length) { node = node.childNodes[offset]; offset = 0; } else { return null; } } } // Find a piece of text in an inline fragment, overlapping from-to function findTextInFragment(frag, text, from, to) { for (let i = 0, pos = 0; i < frag.childCount && pos <= to;) { let child = frag.child(i++), childStart = pos; pos += child.nodeSize; if (!child.isText) continue; let str = child.text; while (i < frag.childCount) { let next = frag.child(i++); pos += next.nodeSize; if (!next.isText) break; str += next.text; } if (pos >= from) { let found = childStart < to ? str.lastIndexOf(text, to - childStart - 1) : -1; if (found >= 0 && found + text.length + childStart >= from) return childStart + found; if (from == to && str.length >= to + text.length - childStart && str.slice(to - childStart, to - childStart + text.length) == text) return to; } } return -1; } // Replace range from-to in an array of view descs with replacement // (may be null to just delete). This goes very much against the grain // of the rest of this code, which tends to create nodes with the // right shape in one go, rather than messing with them after // creation, but is necessary in the composition hack. function replaceNodes(nodes, from, to, view, replacement) { let result = []; for (let i = 0, off = 0; i < nodes.length; i++) { let child = nodes[i], start = off, end = off += child.size; if (start >= to || end <= from) { result.push(child); } else { if (start < from) result.push(child.slice(0, from - start, view)); if (replacement) { result.push(replacement); replacement = undefined; } if (end > to) result.push(child.slice(to - start, child.size, view)); } } return result; } function selectionFromDOM(view, origin = null) { let domSel = view.domSelectionRange(), doc = view.state.doc; if (!domSel.focusNode) return null; let nearestDesc = view.docView.nearestDesc(domSel.focusNode), inWidget = nearestDesc && nearestDesc.size == 0; let head = view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset, 1); if (head < 0) return null; let $head = doc.resolve(head), $anchor, selection; if (selectionCollapsed(domSel)) { $anchor = $head; while (nearestDesc && !nearestDesc.node) nearestDesc = nearestDesc.parent; let nearestDescNode = nearestDesc.node; if (nearestDesc && nearestDescNode.isAtom && NodeSelection.isSelectable(nearestDescNode) && nearestDesc.parent && !(nearestDescNode.isInline && isOnEdge(domSel.focusNode, domSel.focusOffset, nearestDesc.dom))) { let pos = nearestDesc.posBefore; selection = new NodeSelection(head == pos ? $head : doc.resolve(pos)); } } else { let anchor = view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset, 1); if (anchor < 0) return null; $anchor = doc.resolve(anchor); } if (!selection) { let bias = origin == "pointer" || view.state.selection.head < $head.pos && !inWidget ? 1 : -1; selection = selectionBetween(view, $anchor, $head, bias); } return selection; } function editorOwnsSelection(view) { return view.editable ? view.hasFocus() : hasSelection(view) && document.activeElement && document.activeElement.contains(view.dom); } function selectionToDOM(view, force = false) { let sel = view.state.selection; syncNodeSelection(view, sel); if (!editorOwnsSelection(view)) return; // The delayed drag selection causes issues with Cell Selections // in Safari. And the drag selection delay is to workarond issues // which only present in Chrome. if (!force && view.input.mouseDown && view.input.mouseDown.allowDefault && chrome$1) { let domSel = view.domSelectionRange(), curSel = view.domObserver.currentSelection; if (domSel.anchorNode && curSel.anchorNode && isEquivalentPosition(domSel.anchorNode, domSel.anchorOffset, curSel.anchorNode, curSel.anchorOffset)) { view.input.mouseDown.delayedSelectionSync = true; view.domObserver.setCurSelection(); return; } } view.domObserver.disconnectSelection(); if (view.cursorWrapper) { selectCursorWrapper(view); } else { let { anchor, head } = sel, resetEditableFrom, resetEditableTo; if (brokenSelectBetweenUneditable && !(sel instanceof TextSelection)) { if (!sel.$from.parent.inlineContent) resetEditableFrom = temporarilyEditableNear(view, sel.from); if (!sel.empty && !sel.$from.parent.inlineContent) resetEditableTo = temporarilyEditableNear(view, sel.to); } view.docView.setSelection(anchor, head, view.root, force); if (brokenSelectBetweenUneditable) { if (resetEditableFrom) resetEditable(resetEditableFrom); if (resetEditableTo) resetEditable(resetEditableTo); } if (sel.visible) { view.dom.classList.remove("ProseMirror-hideselection"); } else { view.dom.classList.add("ProseMirror-hideselection"); if ("onselectionchange" in document) removeClassOnSelectionChange(view); } } view.domObserver.setCurSelection(); view.domObserver.connectSelection(); } // Kludge to work around Webkit not allowing a selection to start/end // between non-editable block nodes. We briefly make something // editable, set the selection, then set it uneditable again. const brokenSelectBetweenUneditable = safari || chrome$1 && chrome_version < 63; function temporarilyEditableNear(view, pos) { let { node, offset } = view.docView.domFromPos(pos, 0); let after = offset < node.childNodes.length ? node.childNodes[offset] : null; let before = offset ? node.childNodes[offset - 1] : null; if (safari && after && after.contentEditable == "false") return setEditable(after); if ((!after || after.contentEditable == "false") && (!before || before.contentEditable == "false")) { if (after) return setEditable(after);else if (before) return setEditable(before); } } function setEditable(element) { element.contentEditable = "true"; if (safari && element.draggable) { element.draggable = false; element.wasDraggable = true; } return element; } function resetEditable(element) { element.contentEditable = "false"; if (element.wasDraggable) { element.draggable = true; element.wasDraggable = null; } } function removeClassOnSelectionChange(view) { let doc = view.dom.ownerDocument; doc.removeEventListener("selectionchange", view.input.hideSelectionGuard); let domSel = view.domSelectionRange(); let node = domSel.anchorNode, offset = domSel.anchorOffset; doc.addEventListener("selectionchange", view.input.hideSelectionGuard = () => { if (domSel.anchorNode != node || domSel.anchorOffset != offset) { doc.removeEventListener("selectionchange", view.input.hideSelectionGuard); setTimeout(() => { if (!editorOwnsSelection(view) || view.state.selection.visible) view.dom.classList.remove("ProseMirror-hideselection"); }, 20); } }); } function selectCursorWrapper(view) { let domSel = view.domSelection(), range = document.createRange(); let node = view.cursorWrapper.dom, img = node.nodeName == "IMG"; if (img) range.setEnd(node.parentNode, domIndex(node) + 1);else range.setEnd(node, 0); range.collapse(false); domSel.removeAllRanges(); domSel.addRange(range); // Kludge to kill 'control selection' in IE11 when selecting an // invisible cursor wrapper, since that would result in those weird // resize handles and a selection that considers the absolutely // positioned wrapper, rather than the root editable node, the // focused element. if (!img && !view.state.selection.visible && ie$1 && ie_version <= 11) { node.disabled = true; node.disabled = false; } } function syncNodeSelection(view, sel) { if (sel instanceof NodeSelection) { let desc = view.docView.descAt(sel.from); if (desc != view.lastSelectedViewDesc) { clearNodeSelection(view); if (desc) desc.selectNode(); view.lastSelectedViewDesc = desc; } } else { clearNodeSelection(view); } } // Clear all DOM statefulness of the last node selection. function clearNodeSelection(view) { if (view.lastSelectedViewDesc) { if (view.lastSelectedViewDesc.parent) view.lastSelectedViewDesc.deselectNode(); view.lastSelectedViewDesc = undefined; } } function selectionBetween(view, $anchor, $head, bias) { return view.someProp("createSelectionBetween", f => f(view, $anchor, $head)) || TextSelection.between($anchor, $head, bias); } function hasFocusAndSelection(view) { if (view.editable && !view.hasFocus()) return false; return hasSelection(view); } function hasSelection(view) { let sel = view.domSelectionRange(); if (!sel.anchorNode) return false; try { // Firefox will raise 'permission denied' errors when accessing // properties of `sel.anchorNode` when it's in a generated CSS // element. return view.dom.contains(sel.anchorNode.nodeType == 3 ? sel.anchorNode.parentNode : sel.anchorNode) && (view.editable || view.dom.contains(sel.focusNode.nodeType == 3 ? sel.focusNode.parentNode : sel.focusNode)); } catch (_) { return false; } } function anchorInRightPlace(view) { let anchorDOM = view.docView.domFromPos(view.state.selection.anchor, 0); let domSel = view.domSelectionRange(); return isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset); } function moveSelectionBlock(state, dir) { let { $anchor, $head } = state.selection; let $side = dir > 0 ? $anchor.max($head) : $anchor.min($head); let $start = !$side.parent.inlineContent ? $side : $side.depth ? state.doc.resolve(dir > 0 ? $side.after() : $side.before()) : null; return $start && Selection.findFrom($start, dir); } function apply(view, sel) { view.dispatch(view.state.tr.setSelection(sel).scrollIntoView()); return true; } function selectHorizontally(view, dir, mods) { let sel = view.state.selection; if (sel instanceof TextSelection) { if (!sel.empty || mods.indexOf("s") > -1) { return false; } else if (view.endOfTextblock(dir > 0 ? "right" : "left")) { let next = moveSelectionBlock(view.state, dir); if (next && next instanceof NodeSelection) return apply(view, next); return false; } else if (!(mac$2 && mods.indexOf("m") > -1)) { let $head = sel.$head, node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter, desc; if (!node || node.isText) return false; let nodePos = dir < 0 ? $head.pos - node.nodeSize : $head.pos; if (!(node.isAtom || (desc = view.docView.descAt(nodePos)) && !desc.contentDOM)) return false; if (NodeSelection.isSelectable(node)) { return apply(view, new NodeSelection(dir < 0 ? view.state.doc.resolve($head.pos - node.nodeSize) : $head)); } else if (webkit) { // Chrome and Safari will introduce extra pointless cursor // positions around inline uneditable nodes, so we have to // take over and move the cursor past them (#937) return apply(view, new TextSelection(view.state.doc.resolve(dir < 0 ? nodePos : nodePos + node.nodeSize))); } else { return false; } } } else if (sel instanceof NodeSelection && sel.node.isInline) { return apply(view, new TextSelection(dir > 0 ? sel.$to : sel.$from)); } else { let next = moveSelectionBlock(view.state, dir); if (next) return apply(view, next); return false; } } function nodeLen(node) { return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length; } function isIgnorable(dom) { let desc = dom.pmViewDesc; return desc && desc.size == 0 && (dom.nextSibling || dom.nodeName != "BR"); } // Make sure the cursor isn't directly after one or more ignored // nodes, which will confuse the browser's cursor motion logic. function skipIgnoredNodesLeft(view) { let sel = view.domSelectionRange(); let node = sel.focusNode, offset = sel.focusOffset; if (!node) return; let moveNode, moveOffset, force = false; // Gecko will do odd things when the selection is directly in front // of a non-editable node, so in that case, move it into the next // node if possible. Issue prosemirror/prosemirror#832. if (gecko && node.nodeType == 1 && offset < nodeLen(node) && isIgnorable(node.childNodes[offset])) force = true; for (;;) { if (offset > 0) { if (node.nodeType != 1) { break; } else { let before = node.childNodes[offset - 1]; if (isIgnorable(before)) { moveNode = node; moveOffset = --offset; } else if (before.nodeType == 3) { node = before; offset = node.nodeValue.length; } else break; } } else if (isBlockNode(node)) { break; } else { let prev = node.previousSibling; while (prev && isIgnorable(prev)) { moveNode = node.parentNode; moveOffset = domIndex(prev); prev = prev.previousSibling; } if (!prev) { node = node.parentNode; if (node == view.dom) break; offset = 0; } else { node = prev; offset = nodeLen(node); } } } if (force) setSelFocus(view, node, offset);else if (moveNode) setSelFocus(view, moveNode, moveOffset); } // Make sure the cursor isn't directly before one or more ignored // nodes. function skipIgnoredNodesRight(view) { let sel = view.domSelectionRange(); let node = sel.focusNode, offset = sel.focusOffset; if (!node) return; let len = nodeLen(node); let moveNode, moveOffset; for (;;) { if (offset < len) { if (node.nodeType != 1) break; let after = node.childNodes[offset]; if (isIgnorable(after)) { moveNode = node; moveOffset = ++offset; } else break; } else if (isBlockNode(node)) { break; } else { let next = node.nextSibling; while (next && isIgnorable(next)) { moveNode = next.parentNode; moveOffset = domIndex(next) + 1; next = next.nextSibling; } if (!next) { node = node.parentNode; if (node == view.dom) break; offset = len = 0; } else { node = next; offset = 0; len = nodeLen(node); } } } if (moveNode) setSelFocus(view, moveNode, moveOffset); } function isBlockNode(dom) { let desc = dom.pmViewDesc; return desc && desc.node && desc.node.isBlock; } function setSelFocus(view, node, offset) { let sel = view.domSelection(); if (selectionCollapsed(sel)) { let range = document.createRange(); range.setEnd(node, offset); range.setStart(node, offset); sel.removeAllRanges(); sel.addRange(range); } else if (sel.extend) { sel.extend(node, offset); } view.domObserver.setCurSelection(); let { state } = view; // If no state update ends up happening, reset the selection. setTimeout(() => { if (view.state == state) selectionToDOM(view); }, 50); } // Check whether vertical selection motion would involve node // selections. If so, apply it (if not, the result is left to the // browser) function selectVertically(view, dir, mods) { let sel = view.state.selection; if (sel instanceof TextSelection && !sel.empty || mods.indexOf("s") > -1) return false; if (mac$2 && mods.indexOf("m") > -1) return false; let { $from, $to } = sel; if (!$from.parent.inlineContent || view.endOfTextblock(dir < 0 ? "up" : "down")) { let next = moveSelectionBlock(view.state, dir); if (next && next instanceof NodeSelection) return apply(view, next); } if (!$from.parent.inlineContent) { let side = dir < 0 ? $from : $to; let beyond = sel instanceof AllSelection ? Selection.near(side, dir) : Selection.findFrom(side, dir); return beyond ? apply(view, beyond) : false; } return false; } function stopNativeHorizontalDelete(view, dir) { if (!(view.state.selection instanceof TextSelection)) return true; let { $head, $anchor, empty } = view.state.selection; if (!$head.sameParent($anchor)) return true; if (!empty) return false; if (view.endOfTextblock(dir > 0 ? "forward" : "backward")) return true; let nextNode = !$head.textOffset && (dir < 0 ? $head.nodeBefore : $head.nodeAfter); if (nextNode && !nextNode.isText) { let tr = view.state.tr; if (dir < 0) tr.delete($head.pos - nextNode.nodeSize, $head.pos);else tr.delete($head.pos, $head.pos + nextNode.nodeSize); view.dispatch(tr); return true; } return false; } function switchEditable(view, node, state) { view.domObserver.stop(); node.contentEditable = state; view.domObserver.start(); } // Issue #867 / #1090 / https://bugs.chromium.org/p/chromium/issues/detail?id=903821 // In which Safari (and at some point in the past, Chrome) does really // wrong things when the down arrow is pressed when the cursor is // directly at the start of a textblock and has an uneditable node // after it function safariDownArrowBug(view) { if (!safari || view.state.selection.$head.parentOffset > 0) return false; let { focusNode, focusOffset } = view.domSelectionRange(); if (focusNode && focusNode.nodeType == 1 && focusOffset == 0 && focusNode.firstChild && focusNode.firstChild.contentEditable == "false") { let child = focusNode.firstChild; switchEditable(view, child, "true"); setTimeout(() => switchEditable(view, child, "false"), 20); } return false; } // A backdrop key mapping used to make sure we always suppress keys // that have a dangerous default effect, even if the commands they are // bound to return false, and to make sure that cursor-motion keys // find a cursor (as opposed to a node selection) when pressed. For // cursor-motion keys, the code in the handlers also takes care of // block selections. function getMods(event) { let result = ""; if (event.ctrlKey) result += "c"; if (event.metaKey) result += "m"; if (event.altKey) result += "a"; if (event.shiftKey) result += "s"; return result; } function captureKeyDown(view, event) { let code = event.keyCode, mods = getMods(event); if (code == 8 || mac$2 && code == 72 && mods == "c") { // Backspace, Ctrl-h on Mac return stopNativeHorizontalDelete(view, -1) || skipIgnoredNodesLeft(view); } else if (code == 46 || mac$2 && code == 68 && mods == "c") { // Delete, Ctrl-d on Mac return stopNativeHorizontalDelete(view, 1) || skipIgnoredNodesRight(view); } else if (code == 13 || code == 27) { // Enter, Esc return true; } else if (code == 37 || mac$2 && code == 66 && mods == "c") { // Left arrow, Ctrl-b on Mac return selectHorizontally(view, -1, mods) || skipIgnoredNodesLeft(view); } else if (code == 39 || mac$2 && code == 70 && mods == "c") { // Right arrow, Ctrl-f on Mac return selectHorizontally(view, 1, mods) || skipIgnoredNodesRight(view); } else if (code == 38 || mac$2 && code == 80 && mods == "c") { // Up arrow, Ctrl-p on Mac return selectVertically(view, -1, mods) || skipIgnoredNodesLeft(view); } else if (code == 40 || mac$2 && code == 78 && mods == "c") { // Down arrow, Ctrl-n on Mac return safariDownArrowBug(view) || selectVertically(view, 1, mods) || skipIgnoredNodesRight(view); } else if (mods == (mac$2 ? "m" : "c") && (code == 66 || code == 73 || code == 89 || code == 90)) { // Mod-[biyz] return true; } return false; } function serializeForClipboard(view, slice) { view.someProp("transformCopied", f => { slice = f(slice, view); }); let context = [], { content, openStart, openEnd } = slice; while (openStart > 1 && openEnd > 1 && content.childCount == 1 && content.firstChild.childCount == 1) { openStart--; openEnd--; let node = content.firstChild; context.push(node.type.name, node.attrs != node.type.defaultAttrs ? node.attrs : null); content = node.content; } let serializer = view.someProp("clipboardSerializer") || DOMSerializer.fromSchema(view.state.schema); let doc = detachedDoc(), wrap = doc.createElement("div"); wrap.appendChild(serializer.serializeFragment(content, { document: doc })); let firstChild = wrap.firstChild, needsWrap, wrappers = 0; while (firstChild && firstChild.nodeType == 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) { for (let i = needsWrap.length - 1; i >= 0; i--) { let wrapper = doc.createElement(needsWrap[i]); while (wrap.firstChild) wrapper.appendChild(wrap.firstChild); wrap.appendChild(wrapper); wrappers++; } firstChild = wrap.firstChild; } if (firstChild && firstChild.nodeType == 1) firstChild.setAttribute("data-pm-slice", `${openStart} ${openEnd}${wrappers ? ` -${wrappers}` : ""} ${JSON.stringify(context)}`); let text = view.someProp("clipboardTextSerializer", f => f(slice, view)) || slice.content.textBetween(0, slice.content.size, "\n\n"); return { dom: wrap, text }; } // Read a slice of content from the clipboard (or drop data). function parseFromClipboard(view, text, html, plainText, $context) { let inCode = $context.parent.type.spec.code; let dom, slice; if (!html && !text) return null; let asText = text && (plainText || inCode || !html); if (asText) { view.someProp("transformPastedText", f => { text = f(text, inCode || plainText, view); }); if (inCode) return text ? new Slice(Fragment.from(view.state.schema.text(text.replace(/\r\n?/g, "\n"))), 0, 0) : Slice.empty; let parsed = view.someProp("clipboardTextParser", f => f(text, $context, plainText, view)); if (parsed) { slice = parsed; } else { let marks = $context.marks(); let { schema } = view.state, serializer = DOMSerializer.fromSchema(schema); dom = document.createElement("div"); text.split(/(?:\r\n?|\n)+/).forEach(block => { let p = dom.appendChild(document.createElement("p")); if (block) p.appendChild(serializer.serializeNode(schema.text(block, marks))); }); } } else { view.someProp("transformPastedHTML", f => { html = f(html, view); }); dom = readHTML(html); if (webkit) restoreReplacedSpaces(dom); } let contextNode = dom && dom.querySelector("[data-pm-slice]"); let sliceData = contextNode && /^(\d+) (\d+)(?: -(\d+))? (.*)/.exec(contextNode.getAttribute("data-pm-slice") || ""); if (sliceData && sliceData[3]) for (let i = +sliceData[3]; i > 0; i--) { let child = dom.firstChild; while (child && child.nodeType != 1) child = child.nextSibling; if (!child) break; dom = child; } if (!slice) { let parser = view.someProp("clipboardParser") || view.someProp("domParser") || DOMParser.fromSchema(view.state.schema); slice = parser.parseSlice(dom, { preserveWhitespace: !!(asText || sliceData), context: $context, ruleFromNode(dom) { if (dom.nodeName == "BR" && !dom.nextSibling && dom.parentNode && !inlineParents.test(dom.parentNode.nodeName)) return { ignore: true }; return null; } }); } if (sliceData) { slice = addContext(closeSlice(slice, +sliceData[1], +sliceData[2]), sliceData[4]); } else { // HTML wasn't created by ProseMirror. Make sure top-level siblings are coherent slice = Slice.maxOpen(normalizeSiblings(slice.content, $context), true); if (slice.openStart || slice.openEnd) { let openStart = 0, openEnd = 0; for (let node = slice.content.firstChild; openStart < slice.openStart && !node.type.spec.isolating; openStart++, node = node.firstChild) {} for (let node = slice.content.lastChild; openEnd < slice.openEnd && !node.type.spec.isolating; openEnd++, node = node.lastChild) {} slice = closeSlice(slice, openStart, openEnd); } } view.someProp("transformPasted", f => { slice = f(slice, view); }); return slice; } const inlineParents = /^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var)$/i; // Takes a slice parsed with parseSlice, which means there hasn't been // any content-expression checking done on the top nodes, tries to // find a parent node in the current context that might fit the nodes, // and if successful, rebuilds the slice so that it fits into that parent. // // This addresses the problem that Transform.replace expects a // coherent slice, and will fail to place a set of siblings that don't // fit anywhere in the schema. function normalizeSiblings(fragment, $context) { if (fragment.childCount < 2) return fragment; for (let d = $context.depth; d >= 0; d--) { let parent = $context.node(d); let match = parent.contentMatchAt($context.index(d)); let lastWrap, result = []; fragment.forEach(node => { if (!result) return; let wrap = match.findWrapping(node.type), inLast; if (!wrap) return result = null; if (inLast = result.length && lastWrap.length && addToSibling(wrap, lastWrap, node, result[result.length - 1], 0)) { result[result.length - 1] = inLast; } else { if (result.length) result[result.length - 1] = closeRight(result[result.length - 1], lastWrap.length); let wrapped = withWrappers(node, wrap); result.push(wrapped); match = match.matchType(wrapped.type); lastWrap = wrap; } }); if (result) return Fragment.from(result); } return fragment; } function withWrappers(node, wrap, from = 0) { for (let i = wrap.length - 1; i >= from; i--) node = wrap[i].create(null, Fragment.from(node)); return node; } // Used to group adjacent nodes wrapped in similar parents by // normalizeSiblings into the same parent node function addToSibling(wrap, lastWrap, node, sibling, depth) { if (depth < wrap.length && depth < lastWrap.length && wrap[depth] == lastWrap[depth]) { let inner = addToSibling(wrap, lastWrap, node, sibling.lastChild, depth + 1); if (inner) return sibling.copy(sibling.content.replaceChild(sibling.childCount - 1, inner)); let match = sibling.contentMatchAt(sibling.childCount); if (match.matchType(depth == wrap.length - 1 ? node.type : wrap[depth + 1])) return sibling.copy(sibling.content.append(Fragment.from(withWrappers(node, wrap, depth + 1)))); } } function closeRight(node, depth) { if (depth == 0) return node; let fragment = node.content.replaceChild(node.childCount - 1, closeRight(node.lastChild, depth - 1)); let fill = node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true); return node.copy(fragment.append(fill)); } function closeRange(fragment, side, from, to, depth, openEnd) { let node = side < 0 ? fragment.firstChild : fragment.lastChild, inner = node.content; if (depth < to - 1) inner = closeRange(inner, side, from, to, depth + 1, openEnd); if (depth >= from) inner = side < 0 ? node.contentMatchAt(0).fillBefore(inner, fragment.childCount > 1 || openEnd <= depth).append(inner) : inner.append(node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true)); return fragment.replaceChild(side < 0 ? 0 : fragment.childCount - 1, node.copy(inner)); } function closeSlice(slice, openStart, openEnd) { if (openStart < slice.openStart) slice = new Slice(closeRange(slice.content, -1, openStart, slice.openStart, 0, slice.openEnd), openStart, slice.openEnd); if (openEnd < slice.openEnd) slice = new Slice(closeRange(slice.content, 1, openEnd, slice.openEnd, 0, 0), slice.openStart, openEnd); return slice; } // Trick from jQuery -- some elements must be wrapped in other // elements for innerHTML to work. I.e. if you do `div.innerHTML = // "<td>..</td>"` the table cells are ignored. const wrapMap = { thead: ["table"], tbody: ["table"], tfoot: ["table"], caption: ["table"], colgroup: ["table"], col: ["table", "colgroup"], tr: ["table", "tbody"], td: ["table", "tbody", "tr"], th: ["table", "tbody", "tr"] }; let _detachedDoc = null; function detachedDoc() { return _detachedDoc || (_detachedDoc = document.implementation.createHTMLDocument("title")); } function readHTML(html) { let metas = /^(\s*<meta [^>]*>)*/.exec(html); if (metas) html = html.slice(metas[0].length); let elt = detachedDoc().createElement("div"); let firstTag = /<([a-z][^>\s]+)/i.exec(html), wrap; if (wrap = firstTag && wrapMap[firstTag[1].toLowerCase()]) html = wrap.map(n => "<" + n + ">").join("") + html + wrap.map(n => "</" + n + ">").reverse().join(""); elt.innerHTML = html; if (wrap) for (let i = 0; i < wrap.length; i++) elt = elt.querySelector(wrap[i]) || elt; return elt; } // Webkit browsers do some hard-to-predict replacement of regular // spaces with non-breaking spaces when putting content on the // clipboard. This tries to convert such non-breaking spaces (which // will be wrapped in a plain span on Chrome, a span with class // Apple-converted-space on Safari) back to regular spaces. function restoreReplacedSpaces(dom) { let nodes = dom.querySelectorAll(chrome$1 ? "span:not([class]):not([style])" : "span.Apple-converted-space"); for (let i = 0; i < nodes.length; i++) { let node = nodes[i]; if (node.childNodes.length == 1 && node.textContent == "\u00a0" && node.parentNode) node.parentNode.replaceChild(dom.ownerDocument.createTextNode(" "), node); } } function addContext(slice, context) { if (!slice.size) return slice; let schema = slice.content.firstChild.type.schema, array; try { array = JSON.parse(context); } catch (e) { return slice; } let { content, openStart, openEnd } = slice; for (let i = array.length - 2; i >= 0; i -= 2) { let type = schema.nodes[array[i]]; if (!type || type.hasRequiredAttrs()) break; content = Fragment.from(type.create(array[i + 1], content)); openStart++; openEnd++; } return new Slice(content, openStart, openEnd); } // A collection of DOM events that occur within the editor, and callback functions // to invoke when the event fires. const handlers = {}; const editHandlers = {}; const passiveHandlers = { touchstart: true, touchmove: true }; class InputState { constructor() { this.shiftKey = false; this.mouseDown = null; this.lastKeyCode = null; this.lastKeyCodeTime = 0; this.lastClick = { time: 0, x: 0, y: 0, type: "" }; this.lastSelectionOrigin = null; this.lastSelectionTime = 0; this.lastIOSEnter = 0; this.lastIOSEnterFallbackTimeout = -1; this.lastFocus = 0; this.lastTouch = 0; this.lastAndroidDelete = 0; this.composing = false; this.composingTimeout = -1; this.compositionNodes = []; this.compositionEndedAt = -2e8; this.domChangeCount = 0; this.eventHandlers = Object.create(null); this.hideSelectionGuard = null; } } function initInput(view) { for (let event in handlers) { let handler = handlers[event]; view.dom.addEventListener(event, view.input.eventHandlers[event] = event => { if (eventBelongsToView(view, event) && !runCustomHandler(view, event) && (view.editable || !(event.type in editHandlers))) handler(view, event); }, passiveHandlers[event] ? { passive: true } : undefined); } // On Safari, for reasons beyond my understanding, adding an input // event handler makes an issue where the composition vanishes when // you press enter go away. if (safari) view.dom.addEventListener("input", () => null); ensureListeners(view); } function setSelectionOrigin(view, origin) { view.input.lastSelectionOrigin = origin; view.input.lastSelectionTime = Date.now(); } function destroyInput(view) { view.domObserver.stop(); for (let type in view.input.eventHandlers) view.dom.removeEventListener(type, view.input.eventHandlers[type]); clearTimeout(view.input.composingTimeout); clearTimeout(view.input.lastIOSEnterFallbackTimeout); } function ensureListeners(view) { view.someProp("handleDOMEvents", currentHandlers => { for (let type in currentHandlers) if (!view.input.eventHandlers[type]) view.dom.addEventListener(type, view.input.eventHandlers[type] = event => runCustomHandler(view, event)); }); } function runCustomHandler(view, event) { return view.someProp("handleDOMEvents", handlers => { let handler = handlers[event.type]; return handler ? handler(view, event) || event.defaultPrevented : false; }); } function eventBelongsToView(view, event) { if (!event.bubbles) return true; if (event.defaultPrevented) return false; for (let node = event.target; node != view.dom; node = node.parentNode) if (!node || node.nodeType == 11 || node.pmViewDesc && node.pmViewDesc.stopEvent(event)) return false; return true; } function dispatchEvent(view, event) { if (!runCustomHandler(view, event) && handlers[event.type] && (view.editable || !(event.type in editHandlers))) handlers[event.type](view, event); } editHandlers.keydown = (view, _event) => { let event = _event; view.input.shiftKey = event.keyCode == 16 || event.shiftKey; if (inOrNearComposition(view, event)) return; view.input.lastKeyCode = event.keyCode; view.input.lastKeyCodeTime = Date.now(); // Suppress enter key events on Chrome Android, because those tend // to be part of a confused sequence of composition events fired, // and handling them eagerly tends to corrupt the input. if (android && chrome$1 && event.keyCode == 13) return; if (event.keyCode != 229) view.domObserver.forceFlush(); // On iOS, if we preventDefault enter key presses, the virtual // keyboard gets confused. So the hack here is to set a flag that // makes the DOM change code recognize that what just happens should // be replaced by whatever the Enter key handlers do. if (ios && event.keyCode == 13 && !event.ctrlKey && !event.altKey && !event.metaKey) { let now = Date.now(); view.input.lastIOSEnter = now; view.input.lastIOSEnterFallbackTimeout = setTimeout(() => { if (view.input.lastIOSEnter == now) { view.someProp("handleKeyDown", f => f(view, keyEvent(13, "Enter"))); view.input.lastIOSEnter = 0; } }, 200); } else if (view.someProp("handleKeyDown", f => f(view, event)) || captureKeyDown(view, event)) { event.preventDefault(); } else { setSelectionOrigin(view, "key"); } }; editHandlers.keyup = (view, event) => { if (event.keyCode == 16) view.input.shiftKey = false; }; editHandlers.keypress = (view, _event) => { let event = _event; if (inOrNearComposition(view, event) || !event.charCode || event.ctrlKey && !event.altKey || mac$2 && event.metaKey) return; if (view.someProp("handleKeyPress", f => f(view, event))) { event.preventDefault(); return; } let sel = view.state.selection; if (!(sel instanceof TextSelection) || !sel.$from.sameParent(sel.$to)) { let text = String.fromCharCode(event.charCode); if (!/[\r\n]/.test(text) && !view.someProp("handleTextInput", f => f(view, sel.$from.pos, sel.$to.pos, text))) view.dispatch(view.state.tr.insertText(text).scrollIntoView()); event.preventDefault(); } }; function eventCoords(event) { return { left: event.clientX, top: event.clientY }; } function isNear(event, click) { let dx = click.x - event.clientX, dy = click.y - event.clientY; return dx * dx + dy * dy < 100; } function runHandlerOnContext(view, propName, pos, inside, event) { if (inside == -1) return false; let $pos = view.state.doc.resolve(inside); for (let i = $pos.depth + 1; i > 0; i--) { if (view.someProp(propName, f => i > $pos.depth ? f(view, pos, $pos.nodeAfter, $pos.before(i), event, true) : f(view, pos, $pos.node(i), $pos.before(i), event, false))) return true; } return false; } function updateSelection(view, selection, origin) { if (!view.focused) view.focus(); let tr = view.state.tr.setSelection(selection); if (origin == "pointer") tr.setMeta("pointer", true); view.dispatch(tr); } function selectClickedLeaf(view, inside) { if (inside == -1) return false; let $pos = view.state.doc.resolve(inside), node = $pos.nodeAfter; if (node && node.isAtom && NodeSelection.isSelectable(node)) { updateSelection(view, new NodeSelection($pos), "pointer"); return true; } return false; } function selectClickedNode(view, inside) { if (inside == -1) return false; let sel = view.state.selection, selectedNode, selectAt; if (sel instanceof NodeSelection) selectedNode = sel.node; let $pos = view.state.doc.resolve(inside); for (let i = $pos.depth + 1; i > 0; i--) { let node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i); if (NodeSelection.isSelectable(node)) { if (selectedNode && sel.$from.depth > 0 && i >= sel.$from.depth && $pos.before(sel.$from.depth + 1) == sel.$from.pos) selectAt = $pos.before(sel.$from.depth);else selectAt = $pos.before(i); break; } } if (selectAt != null) { updateSelection(view, NodeSelection.create(view.state.doc, selectAt), "pointer"); return true; } else { return false; } } function handleSingleClick(view, pos, inside, event, selectNode) { return runHandlerOnContext(view, "handleClickOn", pos, inside, event) || view.someProp("handleClick", f => f(view, pos, event)) || (selectNode ? selectClickedNode(view, inside) : selectClickedLeaf(view, inside)); } function handleDoubleClick(view, pos, inside, event) { return runHandlerOnContext(view, "handleDoubleClickOn", pos, inside, event) || view.someProp("handleDoubleClick", f => f(view, pos, event)); } function handleTripleClick$1(view, pos, inside, event) { return runHandlerOnContext(view, "handleTripleClickOn", pos, inside, event) || view.someProp("handleTripleClick", f => f(view, pos, event)) || defaultTripleClick(view, inside, event); } function defaultTripleClick(view, inside, event) { if (event.button != 0) return false; let doc = view.state.doc; if (inside == -1) { if (doc.inlineContent) { updateSelection(view, TextSelection.create(doc, 0, doc.content.size), "pointer"); return true; } return false; } let $pos = doc.resolve(inside); for (let i = $pos.depth + 1; i > 0; i--) { let node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i); let nodePos = $pos.before(i); if (node.inlineContent) updateSelection(view, TextSelection.create(doc, nodePos + 1, nodePos + 1 + node.content.size), "pointer");else if (NodeSelection.isSelectable(node)) updateSelection(view, NodeSelection.create(doc, nodePos), "pointer");else continue; return true; } } function forceDOMFlush(view) { return endComposition(view); } const selectNodeModifier = mac$2 ? "metaKey" : "ctrlKey"; handlers.mousedown = (view, _event) => { let event = _event; view.input.shiftKey = event.shiftKey; let flushed = forceDOMFlush(view); let now = Date.now(), type = "singleClick"; if (now - view.input.lastClick.time < 500 && isNear(event, view.input.lastClick) && !event[selectNodeModifier]) { if (view.input.lastClick.type == "singleClick") type = "doubleClick";else if (view.input.lastClick.type == "doubleClick") type = "tripleClick"; } view.input.lastClick = { time: now, x: event.clientX, y: event.clientY, type }; let pos = view.posAtCoords(eventCoords(event)); if (!pos) return; if (type == "singleClick") { if (view.input.mouseDown) view.input.mouseDown.done(); view.input.mouseDown = new MouseDown(view, pos, event, !!flushed); } else if ((type == "doubleClick" ? handleDoubleClick : handleTripleClick$1)(view, pos.pos, pos.inside, event)) { event.preventDefault(); } else { setSelectionOrigin(view, "pointer"); } }; class MouseDown { constructor(view, pos, event, flushed) { this.view = view; this.pos = pos; this.event = event; this.flushed = flushed; this.delayedSelectionSync = false; this.mightDrag = null; this.startDoc = view.state.doc; this.selectNode = !!event[selectNodeModifier]; this.allowDefault = event.shiftKey; let targetNode, targetPos; if (pos.inside > -1) { targetNode = view.state.doc.nodeAt(pos.inside); targetPos = pos.inside; } else { let $pos = view.state.doc.resolve(pos.pos); targetNode = $pos.parent; targetPos = $pos.depth ? $pos.before() : 0; } const target = flushed ? null : event.target; const targetDesc = target ? view.docView.nearestDesc(target, true) : null; this.target = targetDesc ? targetDesc.dom : null; let { selection } = view.state; if (event.button == 0 && targetNode.type.spec.draggable && targetNode.type.spec.selectable !== false || selection instanceof NodeSelection && selection.from <= targetPos && selection.to > targetPos) this.mightDrag = { node: targetNode, pos: targetPos, addAttr: !!(this.target && !this.target.draggable), setUneditable: !!(this.target && gecko && !this.target.hasAttribute("contentEditable")) }; if (this.target && this.mightDrag && (this.mightDrag.addAttr || this.mightDrag.setUneditable)) { this.view.domObserver.stop(); if (this.mightDrag.addAttr) this.target.draggable = true; if (this.mightDrag.setUneditable) setTimeout(() => { if (this.view.input.mouseDown == this) this.target.setAttribute("contentEditable", "false"); }, 20); this.view.domObserver.start(); } view.root.addEventListener("mouseup", this.up = this.up.bind(this)); view.root.addEventListener("mousemove", this.move = this.move.bind(this)); setSelectionOrigin(view, "pointer"); } done() { this.view.root.removeEventListener("mouseup", this.up); this.view.root.removeEventListener("mousemove", this.move); if (this.mightDrag && this.target) { this.view.domObserver.stop(); if (this.mightDrag.addAttr) this.target.removeAttribute("draggable"); if (this.mightDrag.setUneditable) this.target.removeAttribute("contentEditable"); this.view.domObserver.start(); } if (this.delayedSelectionSync) setTimeout(() => selectionToDOM(this.view)); this.view.input.mouseDown = null; } up(event) { this.done(); if (!this.view.dom.contains(event.target)) return; let pos = this.pos; if (this.view.state.doc != this.startDoc) pos = this.view.posAtCoords(eventCoords(event)); this.updateAllowDefault(event); if (this.allowDefault || !pos) { setSelectionOrigin(this.view, "pointer"); } else if (handleSingleClick(this.view, pos.pos, pos.inside, event, this.selectNode)) { event.preventDefault(); } else if (event.button == 0 && (this.flushed || // Safari ignores clicks on draggable elements safari && this.mightDrag && !this.mightDrag.node.isAtom || // Chrome will sometimes treat a node selection as a // cursor, but still report that the node is selected // when asked through getSelection. You'll then get a // situation where clicking at the point where that // (hidden) cursor is doesn't change the selection, and // thus doesn't get a reaction from ProseMirror. This // works around that. chrome$1 && !this.view.state.selection.visible && Math.min(Math.abs(pos.pos - this.view.state.selection.from), Math.abs(pos.pos - this.view.state.selection.to)) <= 2)) { updateSelection(this.view, Selection.near(this.view.state.doc.resolve(pos.pos)), "pointer"); event.preventDefault(); } else { setSelectionOrigin(this.view, "pointer"); } } move(event) { this.updateAllowDefault(event); setSelectionOrigin(this.view, "pointer"); if (event.buttons == 0) this.done(); } updateAllowDefault(event) { if (!this.allowDefault && (Math.abs(this.event.x - event.clientX) > 4 || Math.abs(this.event.y - event.clientY) > 4)) this.allowDefault = true; } } handlers.touchstart = view => { view.input.lastTouch = Date.now(); forceDOMFlush(view); setSelectionOrigin(view, "pointer"); }; handlers.touchmove = view => { view.input.lastTouch = Date.now(); setSelectionOrigin(view, "pointer"); }; handlers.contextmenu = view => forceDOMFlush(view); function inOrNearComposition(view, event) { if (view.composing) return true; // See https://www.stum.de/2016/06/24/handling-ime-events-in-javascript/. // On Japanese input method editors (IMEs), the Enter key is used to confirm character // selection. On Safari, when Enter is pressed, compositionend and keydown events are // emitted. The keydown event triggers newline insertion, which we don't want. // This method returns true if the keydown event should be ignored. // We only ignore it once, as pressing Enter a second time *should* insert a newline. // Furthermore, the keydown event timestamp must be close to the compositionEndedAt timestamp. // This guards against the case where compositionend is triggered without the keyboard // (e.g. character confirmation may be done with the mouse), and keydown is triggered // afterwards- we wouldn't want to ignore the keydown event in this case. if (safari && Math.abs(event.timeStamp - view.input.compositionEndedAt) < 500) { view.input.compositionEndedAt = -2e8; return true; } return false; } // Drop active composition after 5 seconds of inactivity on Android const timeoutComposition = android ? 5000 : -1; editHandlers.compositionstart = editHandlers.compositionupdate = view => { if (!view.composing) { view.domObserver.flush(); let { state } = view, $pos = state.selection.$from; if (state.selection.empty && (state.storedMarks || !$pos.textOffset && $pos.parentOffset && $pos.nodeBefore.marks.some(m => m.type.spec.inclusive === false))) { // Need to wrap the cursor in mark nodes different from the ones in the DOM context view.markCursor = view.state.storedMarks || $pos.marks(); endComposition(view, true); view.markCursor = null; } else { endComposition(view); // In firefox, if the cursor is after but outside a marked node, // the inserted text won't inherit the marks. So this moves it // inside if necessary. if (gecko && state.selection.empty && $pos.parentOffset && !$pos.textOffset && $pos.nodeBefore.marks.length) { let sel = view.domSelectionRange(); for (let node = sel.focusNode, offset = sel.focusOffset; node && node.nodeType == 1 && offset != 0;) { let before = offset < 0 ? node.lastChild : node.childNodes[offset - 1]; if (!before) break; if (before.nodeType == 3) { view.domSelection().collapse(before, before.nodeValue.length); break; } else { node = before; offset = -1; } } } } view.input.composing = true; } scheduleComposeEnd(view, timeoutComposition); }; editHandlers.compositionend = (view, event) => { if (view.composing) { view.input.composing = false; view.input.compositionEndedAt = event.timeStamp; scheduleComposeEnd(view, 20); } }; function scheduleComposeEnd(view, delay) { clearTimeout(view.input.composingTimeout); if (delay > -1) view.input.composingTimeout = setTimeout(() => endComposition(view), delay); } function clearComposition(view) { if (view.composing) { view.input.composing = false; view.input.compositionEndedAt = timestampFromCustomEvent(); } while (view.input.compositionNodes.length > 0) view.input.compositionNodes.pop().markParentsDirty(); } function timestampFromCustomEvent() { let event = document.createEvent("Event"); event.initEvent("event", true, true); return event.timeStamp; } /** @internal */ function endComposition(view, forceUpdate = false) { if (android && view.domObserver.flushingSoon >= 0) return; view.domObserver.forceFlush(); clearComposition(view); if (forceUpdate || view.docView && view.docView.dirty) { let sel = selectionFromDOM(view); if (sel && !sel.eq(view.state.selection)) view.dispatch(view.state.tr.setSelection(sel));else view.updateState(view.state); return true; } return false; } function captureCopy(view, dom) { // The extra wrapper is somehow necessary on IE/Edge to prevent the // content from being mangled when it is put onto the clipboard if (!view.dom.parentNode) return; let wrap = view.dom.parentNode.appendChild(document.createElement("div")); wrap.appendChild(dom); wrap.style.cssText = "position: fixed; left: -10000px; top: 10px"; let sel = getSelection(), range = document.createRange(); range.selectNodeContents(dom); // Done because IE will fire a selectionchange moving the selection // to its start when removeAllRanges is called and the editor still // has focus (which will mess up the editor's selection state). view.dom.blur(); sel.removeAllRanges(); sel.addRange(range); setTimeout(() => { if (wrap.parentNode) wrap.parentNode.removeChild(wrap); view.focus(); }, 50); } // This is very crude, but unfortunately both these browsers _pretend_ // that they have a clipboard API—all the objects and methods are // there, they just don't work, and they are hard to test. const brokenClipboardAPI = ie$1 && ie_version < 15 || ios && webkit_version < 604; handlers.copy = editHandlers.cut = (view, _event) => { let event = _event; let sel = view.state.selection, cut = event.type == "cut"; if (sel.empty) return; // IE and Edge's clipboard interface is completely broken let data = brokenClipboardAPI ? null : event.clipboardData; let slice = sel.content(), { dom, text } = serializeForClipboard(view, slice); if (data) { event.preventDefault(); data.clearData(); data.setData("text/html", dom.innerHTML); data.setData("text/plain", text); } else { captureCopy(view, dom); } if (cut) view.dispatch(view.state.tr.deleteSelection().scrollIntoView().setMeta("uiEvent", "cut")); }; function sliceSingleNode(slice) { return slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1 ? slice.content.firstChild : null; } function capturePaste(view, event) { if (!view.dom.parentNode) return; let plainText = view.input.shiftKey || view.state.selection.$from.parent.type.spec.code; let target = view.dom.parentNode.appendChild(document.createElement(plainText ? "textarea" : "div")); if (!plainText) target.contentEditable = "true"; target.style.cssText = "position: fixed; left: -10000px; top: 10px"; target.focus(); setTimeout(() => { view.focus(); if (target.parentNode) target.parentNode.removeChild(target); if (plainText) doPaste(view, target.value, null, view.input.shiftKey, event);else doPaste(view, target.textContent, target.innerHTML, view.input.shiftKey, event); }, 50); } function doPaste(view, text, html, preferPlain, event) { let slice = parseFromClipboard(view, text, html, preferPlain, view.state.selection.$from); if (view.someProp("handlePaste", f => f(view, event, slice || Slice.empty))) return true; if (!slice) return false; let singleNode = sliceSingleNode(slice); let tr = singleNode ? view.state.tr.replaceSelectionWith(singleNode, view.input.shiftKey) : view.state.tr.replaceSelection(slice); view.dispatch(tr.scrollIntoView().setMeta("paste", true).setMeta("uiEvent", "paste")); return true; } editHandlers.paste = (view, _event) => { let event = _event; // Handling paste from JavaScript during composition is very poorly // handled by browsers, so as a dodgy but preferable kludge, we just // let the browser do its native thing there, except on Android, // where the editor is almost always composing. if (view.composing && !android) return; let data = brokenClipboardAPI ? null : event.clipboardData; if (data && doPaste(view, data.getData("text/plain"), data.getData("text/html"), view.input.shiftKey, event)) event.preventDefault();else capturePaste(view, event); }; class Dragging { constructor(slice, move) { this.slice = slice; this.move = move; } } const dragCopyModifier = mac$2 ? "altKey" : "ctrlKey"; handlers.dragstart = (view, _event) => { let event = _event; let mouseDown = view.input.mouseDown; if (mouseDown) mouseDown.done(); if (!event.dataTransfer) return; let sel = view.state.selection; let pos = sel.empty ? null : view.posAtCoords(eventCoords(event)); if (pos && pos.pos >= sel.from && pos.pos <= (sel instanceof NodeSelection ? sel.to - 1 : sel.to)) ;else if (mouseDown && mouseDown.mightDrag) { view.dispatch(view.state.tr.setSelection(NodeSelection.create(view.state.doc, mouseDown.mightDrag.pos))); } else if (event.target && event.target.nodeType == 1) { let desc = view.docView.nearestDesc(event.target, true); if (desc && desc.node.type.spec.draggable && desc != view.docView) view.dispatch(view.state.tr.setSelection(NodeSelection.create(view.state.doc, desc.posBefore))); } let slice = view.state.selection.content(), { dom, text } = serializeForClipboard(view, slice); event.dataTransfer.clearData(); event.dataTransfer.setData(brokenClipboardAPI ? "Text" : "text/html", dom.innerHTML); // See https://github.com/ProseMirror/prosemirror/issues/1156 event.dataTransfer.effectAllowed = "copyMove"; if (!brokenClipboardAPI) event.dataTransfer.setData("text/plain", text); view.dragging = new Dragging(slice, !event[dragCopyModifier]); }; handlers.dragend = view => { let dragging = view.dragging; window.setTimeout(() => { if (view.dragging == dragging) view.dragging = null; }, 50); }; editHandlers.dragover = editHandlers.dragenter = (_, e) => e.preventDefault(); editHandlers.drop = (view, _event) => { let event = _event; let dragging = view.dragging; view.dragging = null; if (!event.dataTransfer) return; let eventPos = view.posAtCoords(eventCoords(event)); if (!eventPos) return; let $mouse = view.state.doc.resolve(eventPos.pos); let slice = dragging && dragging.slice; if (slice) { view.someProp("transformPasted", f => { slice = f(slice, view); }); } else { slice = parseFromClipboard(view, event.dataTransfer.getData(brokenClipboardAPI ? "Text" : "text/plain"), brokenClipboardAPI ? null : event.dataTransfer.getData("text/html"), false, $mouse); } let move = !!(dragging && !event[dragCopyModifier]); if (view.someProp("handleDrop", f => f(view, event, slice || Slice.empty, move))) { event.preventDefault(); return; } if (!slice) return; event.preventDefault(); let insertPos = slice ? dropPoint(view.state.doc, $mouse.pos, slice) : $mouse.pos; if (insertPos == null) insertPos = $mouse.pos; let tr = view.state.tr; if (move) tr.deleteSelection(); let pos = tr.mapping.map(insertPos); let isNode = slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1; let beforeInsert = tr.doc; if (isNode) tr.replaceRangeWith(pos, pos, slice.content.firstChild);else tr.replaceRange(pos, pos, slice); if (tr.doc.eq(beforeInsert)) return; let $pos = tr.doc.resolve(pos); if (isNode && NodeSelection.isSelectable(slice.content.firstChild) && $pos.nodeAfter && $pos.nodeAfter.sameMarkup(slice.content.firstChild)) { tr.setSelection(new NodeSelection($pos)); } else { let end = tr.mapping.map(insertPos); tr.mapping.maps[tr.mapping.maps.length - 1].forEach((_from, _to, _newFrom, newTo) => end = newTo); tr.setSelection(selectionBetween(view, $pos, tr.doc.resolve(end))); } view.focus(); view.dispatch(tr.setMeta("uiEvent", "drop")); }; handlers.focus = view => { view.input.lastFocus = Date.now(); if (!view.focused) { view.domObserver.stop(); view.dom.classList.add("ProseMirror-focused"); view.domObserver.start(); view.focused = true; setTimeout(() => { if (view.docView && view.hasFocus() && !view.domObserver.currentSelection.eq(view.domSelectionRange())) selectionToDOM(view); }, 20); } }; handlers.blur = (view, _event) => { let event = _event; if (view.focused) { view.domObserver.stop(); view.dom.classList.remove("ProseMirror-focused"); view.domObserver.start(); if (event.relatedTarget && view.dom.contains(event.relatedTarget)) view.domObserver.currentSelection.clear(); view.focused = false; } }; handlers.beforeinput = (view, _event) => { let event = _event; // We should probably do more with beforeinput events, but support // is so spotty that I'm still waiting to see where they are going. // Very specific hack to deal with backspace sometimes failing on // Chrome Android when after an uneditable node. if (chrome$1 && android && event.inputType == "deleteContentBackward") { view.domObserver.flushSoon(); let { domChangeCount } = view.input; setTimeout(() => { if (view.input.domChangeCount != domChangeCount) return; // Event already had some effect // This bug tends to close the virtual keyboard, so we refocus view.dom.blur(); view.focus(); if (view.someProp("handleKeyDown", f => f(view, keyEvent(8, "Backspace")))) return; let { $cursor } = view.state.selection; // Crude approximation of backspace behavior when no command handled it if ($cursor && $cursor.pos > 0) view.dispatch(view.state.tr.delete($cursor.pos - 1, $cursor.pos).scrollIntoView()); }, 50); } }; // Make sure all handlers get registered for (let prop in editHandlers) handlers[prop] = editHandlers[prop]; function compareObjs(a, b) { if (a == b) return true; for (let p in a) if (a[p] !== b[p]) return false; for (let p in b) if (!(p in a)) return false; return true; } class WidgetType { constructor(toDOM, spec) { this.toDOM = toDOM; this.spec = spec || noSpec; this.side = this.spec.side || 0; } map(mapping, span, offset, oldOffset) { let { pos, deleted } = mapping.mapResult(span.from + oldOffset, this.side < 0 ? -1 : 1); return deleted ? null : new Decoration(pos - offset, pos - offset, this); } valid() { return true; } eq(other) { return this == other || other instanceof WidgetType && (this.spec.key && this.spec.key == other.spec.key || this.toDOM == other.toDOM && compareObjs(this.spec, other.spec)); } destroy(node) { if (this.spec.destroy) this.spec.destroy(node); } } class InlineType { constructor(attrs, spec) { this.attrs = attrs; this.spec = spec || noSpec; } map(mapping, span, offset, oldOffset) { let from = mapping.map(span.from + oldOffset, this.spec.inclusiveStart ? -1 : 1) - offset; let to = mapping.map(span.to + oldOffset, this.spec.inclusiveEnd ? 1 : -1) - offset; return from >= to ? null : new Decoration(from, to, this); } valid(_, span) { return span.from < span.to; } eq(other) { return this == other || other instanceof InlineType && compareObjs(this.attrs, other.attrs) && compareObjs(this.spec, other.spec); } static is(span) { return span.type instanceof InlineType; } destroy() {} } class NodeType { constructor(attrs, spec) { this.attrs = attrs; this.spec = spec || noSpec; } map(mapping, span, offset, oldOffset) { let from = mapping.mapResult(span.from + oldOffset, 1); if (from.deleted) return null; let to = mapping.mapResult(span.to + oldOffset, -1); if (to.deleted || to.pos <= from.pos) return null; return new Decoration(from.pos - offset, to.pos - offset, this); } valid(node, span) { let { index, offset } = node.content.findIndex(span.from), child; return offset == span.from && !(child = node.child(index)).isText && offset + child.nodeSize == span.to; } eq(other) { return this == other || other instanceof NodeType && compareObjs(this.attrs, other.attrs) && compareObjs(this.spec, other.spec); } destroy() {} } /** Decoration objects can be provided to the view through the [`decorations` prop](https://prosemirror.net/docs/ref/#view.EditorProps.decorations). They come in several variants—see the static members of this class for details. */ class Decoration { /** @internal */ constructor( /** The start position of the decoration. */ from, /** The end position. Will be the same as `from` for [widget decorations](https://prosemirror.net/docs/ref/#view.Decoration^widget). */ to, /** @internal */ type) { this.from = from; this.to = to; this.type = type; } /** @internal */ copy(from, to) { return new Decoration(from, to, this.type); } /** @internal */ eq(other, offset = 0) { return this.type.eq(other.type) && this.from + offset == other.from && this.to + offset == other.to; } /** @internal */ map(mapping, offset, oldOffset) { return this.type.map(mapping, this, offset, oldOffset); } /** Creates a widget decoration, which is a DOM node that's shown in the document at the given position. It is recommended that you delay rendering the widget by passing a function that will be called when the widget is actually drawn in a view, but you can also directly pass a DOM node. `getPos` can be used to find the widget's current document position. */ static widget(pos, toDOM, spec) { return new Decoration(pos, pos, new WidgetType(toDOM, spec)); } /** Creates an inline decoration, which adds the given attributes to each inline node between `from` and `to`. */ static inline(from, to, attrs, spec) { return new Decoration(from, to, new InlineType(attrs, spec)); } /** Creates a node decoration. `from` and `to` should point precisely before and after a node in the document. That node, and only that node, will receive the given attributes. */ static node(from, to, attrs, spec) { return new Decoration(from, to, new NodeType(attrs, spec)); } /** The spec provided when creating this decoration. Can be useful if you've stored extra information in that object. */ get spec() { return this.type.spec; } /** @internal */ get inline() { return this.type instanceof InlineType; } } const none = [], noSpec = {}; /** A collection of [decorations](https://prosemirror.net/docs/ref/#view.Decoration), organized in such a way that the drawing algorithm can efficiently use and compare them. This is a persistent data structure—it is not modified, updates create a new value. */ class DecorationSet { /** @internal */ constructor(local, children) { this.local = local.length ? local : none; this.children = children.length ? children : none; } /** Create a set of decorations, using the structure of the given document. */ static create(doc, decorations) { return decorations.length ? buildTree(decorations, doc, 0, noSpec) : empty; } /** Find all decorations in this set which touch the given range (including decorations that start or end directly at the boundaries) and match the given predicate on their spec. When `start` and `end` are omitted, all decorations in the set are considered. When `predicate` isn't given, all decorations are assumed to match. */ find(start, end, predicate) { let result = []; this.findInner(start == null ? 0 : start, end == null ? 1e9 : end, result, 0, predicate); return result; } findInner(start, end, result, offset, predicate) { for (let i = 0; i < this.local.length; i++) { let span = this.local[i]; if (span.from <= end && span.to >= start && (!predicate || predicate(span.spec))) result.push(span.copy(span.from + offset, span.to + offset)); } for (let i = 0; i < this.children.length; i += 3) { if (this.children[i] < end && this.children[i + 1] > start) { let childOff = this.children[i] + 1; this.children[i + 2].findInner(start - childOff, end - childOff, result, offset + childOff, predicate); } } } /** Map the set of decorations in response to a change in the document. */ map(mapping, doc, options) { if (this == empty || mapping.maps.length == 0) return this; return this.mapInner(mapping, doc, 0, 0, options || noSpec); } /** @internal */ mapInner(mapping, node, offset, oldOffset, options) { let newLocal; for (let i = 0; i < this.local.length; i++) { let mapped = this.local[i].map(mapping, offset, oldOffset); if (mapped && mapped.type.valid(node, mapped)) (newLocal || (newLocal = [])).push(mapped);else if (options.onRemove) options.onRemove(this.local[i].spec); } if (this.children.length) return mapChildren(this.children, newLocal || [], mapping, node, offset, oldOffset, options);else return newLocal ? new DecorationSet(newLocal.sort(byPos), none) : empty; } /** Add the given array of decorations to the ones in the set, producing a new set. Needs access to the current document to create the appropriate tree structure. */ add(doc, decorations) { if (!decorations.length) return this; if (this == empty) return DecorationSet.create(doc, decorations); return this.addInner(doc, decorations, 0); } addInner(doc, decorations, offset) { let children, childIndex = 0; doc.forEach((childNode, childOffset) => { let baseOffset = childOffset + offset, found; if (!(found = takeSpansForNode(decorations, childNode, baseOffset))) return; if (!children) children = this.children.slice(); while (childIndex < children.length && children[childIndex] < childOffset) childIndex += 3; if (children[childIndex] == childOffset) children[childIndex + 2] = children[childIndex + 2].addInner(childNode, found, baseOffset + 1);else children.splice(childIndex, 0, childOffset, childOffset + childNode.nodeSize, buildTree(found, childNode, baseOffset + 1, noSpec)); childIndex += 3; }); let local = moveSpans(childIndex ? withoutNulls(decorations) : decorations, -offset); for (let i = 0; i < local.length; i++) if (!local[i].type.valid(doc, local[i])) local.splice(i--, 1); return new DecorationSet(local.length ? this.local.concat(local).sort(byPos) : this.local, children || this.children); } /** Create a new set that contains the decorations in this set, minus the ones in the given array. */ remove(decorations) { if (decorations.length == 0 || this == empty) return this; return this.removeInner(decorations, 0); } removeInner(decorations, offset) { let children = this.children, local = this.local; for (let i = 0; i < children.length; i += 3) { let found; let from = children[i] + offset, to = children[i + 1] + offset; for (let j = 0, span; j < decorations.length; j++) if (span = decorations[j]) { if (span.from > from && span.to < to) { decorations[j] = null; (found || (found = [])).push(span); } } if (!found) continue; if (children == this.children) children = this.children.slice(); let removed = children[i + 2].removeInner(found, from + 1); if (removed != empty) { children[i + 2] = removed; } else { children.splice(i, 3); i -= 3; } } if (local.length) for (let i = 0, span; i < decorations.length; i++) if (span = decorations[i]) { for (let j = 0; j < local.length; j++) if (local[j].eq(span, offset)) { if (local == this.local) local = this.local.slice(); local.splice(j--, 1); } } if (children == this.children && local == this.local) return this; return local.length || children.length ? new DecorationSet(local, children) : empty; } /** @internal */ forChild(offset, node) { if (this == empty) return this; if (node.isLeaf) return DecorationSet.empty; let child, local; for (let i = 0; i < this.children.length; i += 3) if (this.children[i] >= offset) { if (this.children[i] == offset) child = this.children[i + 2]; break; } let start = offset + 1, end = start + node.content.size; for (let i = 0; i < this.local.length; i++) { let dec = this.local[i]; if (dec.from < end && dec.to > start && dec.type instanceof InlineType) { let from = Math.max(start, dec.from) - start, to = Math.min(end, dec.to) - start; if (from < to) (local || (local = [])).push(dec.copy(from, to)); } } if (local) { let localSet = new DecorationSet(local.sort(byPos), none); return child ? new DecorationGroup([localSet, child]) : localSet; } return child || empty; } /** @internal */ eq(other) { if (this == other) return true; if (!(other instanceof DecorationSet) || this.local.length != other.local.length || this.children.length != other.children.length) return false; for (let i = 0; i < this.local.length; i++) if (!this.local[i].eq(other.local[i])) return false; for (let i = 0; i < this.children.length; i += 3) if (this.children[i] != other.children[i] || this.children[i + 1] != other.children[i + 1] || !this.children[i + 2].eq(other.children[i + 2])) return false; return true; } /** @internal */ locals(node) { return removeOverlap(this.localsInner(node)); } /** @internal */ localsInner(node) { if (this == empty) return none; if (node.inlineContent || !this.local.some(InlineType.is)) return this.local; let result = []; for (let i = 0; i < this.local.length; i++) { if (!(this.local[i].type instanceof InlineType)) result.push(this.local[i]); } return result; } } /** The empty set of decorations. */ DecorationSet.empty = new DecorationSet([], []); /** @internal */ DecorationSet.removeOverlap = removeOverlap; const empty = DecorationSet.empty; // An abstraction that allows the code dealing with decorations to // treat multiple DecorationSet objects as if it were a single object // with (a subset of) the same interface. class DecorationGroup { constructor(members) { this.members = members; } map(mapping, doc) { const mappedDecos = this.members.map(member => member.map(mapping, doc, noSpec)); return DecorationGroup.from(mappedDecos); } forChild(offset, child) { if (child.isLeaf) return DecorationSet.empty; let found = []; for (let i = 0; i < this.members.length; i++) { let result = this.members[i].forChild(offset, child); if (result == empty) continue; if (result instanceof DecorationGroup) found = found.concat(result.members);else found.push(result); } return DecorationGroup.from(found); } eq(other) { if (!(other instanceof DecorationGroup) || other.members.length != this.members.length) return false; for (let i = 0; i < this.members.length; i++) if (!this.members[i].eq(other.members[i])) return false; return true; } locals(node) { let result, sorted = true; for (let i = 0; i < this.members.length; i++) { let locals = this.members[i].localsInner(node); if (!locals.length) continue; if (!result) { result = locals; } else { if (sorted) { result = result.slice(); sorted = false; } for (let j = 0; j < locals.length; j++) result.push(locals[j]); } } return result ? removeOverlap(sorted ? result : result.sort(byPos)) : none; } // Create a group for the given array of decoration sets, or return // a single set when possible. static from(members) { switch (members.length) { case 0: return empty; case 1: return members[0]; default: return new DecorationGroup(members.every(m => m instanceof DecorationSet) ? members : members.reduce((r, m) => r.concat(m instanceof DecorationSet ? m : m.members), [])); } } } function mapChildren(oldChildren, newLocal, mapping, node, offset, oldOffset, options) { let children = oldChildren.slice(); // Mark the children that are directly touched by changes, and // move those that are after the changes. for (let i = 0, baseOffset = oldOffset; i < mapping.maps.length; i++) { let moved = 0; mapping.maps[i].forEach((oldStart, oldEnd, newStart, newEnd) => { let dSize = newEnd - newStart - (oldEnd - oldStart); for (let i = 0; i < children.length; i += 3) { let end = children[i + 1]; if (end < 0 || oldStart > end + baseOffset - moved) continue; let start = children[i] + baseOffset - moved; if (oldEnd >= start) { children[i + 1] = oldStart <= start ? -2 : -1; } else if (newStart >= offset && dSize) { children[i] += dSize; children[i + 1] += dSize; } } moved += dSize; }); baseOffset = mapping.maps[i].map(baseOffset, -1); } // Find the child nodes that still correspond to a single node, // recursively call mapInner on them and update their positions. let mustRebuild = false; for (let i = 0; i < children.length; i += 3) if (children[i + 1] < 0) { // Touched nodes if (children[i + 1] == -2) { mustRebuild = true; children[i + 1] = -1; continue; } let from = mapping.map(oldChildren[i] + oldOffset), fromLocal = from - offset; if (fromLocal < 0 || fromLocal >= node.content.size) { mustRebuild = true; continue; } // Must read oldChildren because children was tagged with -1 let to = mapping.map(oldChildren[i + 1] + oldOffset, -1), toLocal = to - offset; let { index, offset: childOffset } = node.content.findIndex(fromLocal); let childNode = node.maybeChild(index); if (childNode && childOffset == fromLocal && childOffset + childNode.nodeSize == toLocal) { let mapped = children[i + 2].mapInner(mapping, childNode, from + 1, oldChildren[i] + oldOffset + 1, options); if (mapped != empty) { children[i] = fromLocal; children[i + 1] = toLocal; children[i + 2] = mapped; } else { children[i + 1] = -2; mustRebuild = true; } } else { mustRebuild = true; } } // Remaining children must be collected and rebuilt into the appropriate structure if (mustRebuild) { let decorations = mapAndGatherRemainingDecorations(children, oldChildren, newLocal, mapping, offset, oldOffset, options); let built = buildTree(decorations, node, 0, options); newLocal = built.local; for (let i = 0; i < children.length; i += 3) if (children[i + 1] < 0) { children.splice(i, 3); i -= 3; } for (let i = 0, j = 0; i < built.children.length; i += 3) { let from = built.children[i]; while (j < children.length && children[j] < from) j += 3; children.splice(j, 0, built.children[i], built.children[i + 1], built.children[i + 2]); } } return new DecorationSet(newLocal.sort(byPos), children); } function moveSpans(spans, offset) { if (!offset || !spans.length) return spans; let result = []; for (let i = 0; i < spans.length; i++) { let span = spans[i]; result.push(new Decoration(span.from + offset, span.to + offset, span.type)); } return result; } function mapAndGatherRemainingDecorations(children, oldChildren, decorations, mapping, offset, oldOffset, options) { // Gather all decorations from the remaining marked children function gather(set, oldOffset) { for (let i = 0; i < set.local.length; i++) { let mapped = set.local[i].map(mapping, offset, oldOffset); if (mapped) decorations.push(mapped);else if (options.onRemove) options.onRemove(set.local[i].spec); } for (let i = 0; i < set.children.length; i += 3) gather(set.children[i + 2], set.children[i] + oldOffset + 1); } for (let i = 0; i < children.length; i += 3) if (children[i + 1] == -1) gather(children[i + 2], oldChildren[i] + oldOffset + 1); return decorations; } function takeSpansForNode(spans, node, offset) { if (node.isLeaf) return null; let end = offset + node.nodeSize, found = null; for (let i = 0, span; i < spans.length; i++) { if ((span = spans[i]) && span.from > offset && span.to < end) { (found || (found = [])).push(span); spans[i] = null; } } return found; } function withoutNulls(array) { let result = []; for (let i = 0; i < array.length; i++) if (array[i] != null) result.push(array[i]); return result; } // Build up a tree that corresponds to a set of decorations. `offset` // is a base offset that should be subtracted from the `from` and `to` // positions in the spans (so that we don't have to allocate new spans // for recursive calls). function buildTree(spans, node, offset, options) { let children = [], hasNulls = false; node.forEach((childNode, localStart) => { let found = takeSpansForNode(spans, childNode, localStart + offset); if (found) { hasNulls = true; let subtree = buildTree(found, childNode, offset + localStart + 1, options); if (subtree != empty) children.push(localStart, localStart + childNode.nodeSize, subtree); } }); let locals = moveSpans(hasNulls ? withoutNulls(spans) : spans, -offset).sort(byPos); for (let i = 0; i < locals.length; i++) if (!locals[i].type.valid(node, locals[i])) { if (options.onRemove) options.onRemove(locals[i].spec); locals.splice(i--, 1); } return locals.length || children.length ? new DecorationSet(locals, children) : empty; } // Used to sort decorations so that ones with a low start position // come first, and within a set with the same start position, those // with an smaller end position come first. function byPos(a, b) { return a.from - b.from || a.to - b.to; } // Scan a sorted array of decorations for partially overlapping spans, // and split those so that only fully overlapping spans are left (to // make subsequent rendering easier). Will return the input array if // no partially overlapping spans are found (the common case). function removeOverlap(spans) { let working = spans; for (let i = 0; i < working.length - 1; i++) { let span = working[i]; if (span.from != span.to) for (let j = i + 1; j < working.length; j++) { let next = working[j]; if (next.from == span.from) { if (next.to != span.to) { if (working == spans) working = spans.slice(); // Followed by a partially overlapping larger span. Split that // span. working[j] = next.copy(next.from, span.to); insertAhead(working, j + 1, next.copy(span.to, next.to)); } continue; } else { if (next.from < span.to) { if (working == spans) working = spans.slice(); // The end of this one overlaps with a subsequent span. Split // this one. working[i] = span.copy(span.from, next.from); insertAhead(working, j, span.copy(next.from, span.to)); } break; } } } return working; } function insertAhead(array, i, deco) { while (i < array.length && byPos(deco, array[i]) > 0) i++; array.splice(i, 0, deco); } // Get the decorations associated with the current props of a view. function viewDecorations(view) { let found = []; view.someProp("decorations", f => { let result = f(view.state); if (result && result != empty) found.push(result); }); if (view.cursorWrapper) found.push(DecorationSet.create(view.state.doc, [view.cursorWrapper.deco])); return DecorationGroup.from(found); } const observeOptions = { childList: true, characterData: true, characterDataOldValue: true, attributes: true, attributeOldValue: true, subtree: true }; // IE11 has very broken mutation observers, so we also listen to DOMCharacterDataModified const useCharData = ie$1 && ie_version <= 11; class SelectionState { constructor() { this.anchorNode = null; this.anchorOffset = 0; this.focusNode = null; this.focusOffset = 0; } set(sel) { this.anchorNode = sel.anchorNode; this.anchorOffset = sel.anchorOffset; this.focusNode = sel.focusNode; this.focusOffset = sel.focusOffset; } clear() { this.anchorNode = this.focusNode = null; } eq(sel) { return sel.anchorNode == this.anchorNode && sel.anchorOffset == this.anchorOffset && sel.focusNode == this.focusNode && sel.focusOffset == this.focusOffset; } } class DOMObserver { constructor(view, handleDOMChange) { this.view = view; this.handleDOMChange = handleDOMChange; this.queue = []; this.flushingSoon = -1; this.observer = null; this.currentSelection = new SelectionState(); this.onCharData = null; this.suppressingSelectionUpdates = false; this.observer = window.MutationObserver && new window.MutationObserver(mutations => { for (let i = 0; i < mutations.length; i++) this.queue.push(mutations[i]); // IE11 will sometimes (on backspacing out a single character // text node after a BR node) call the observer callback // before actually updating the DOM, which will cause // ProseMirror to miss the change (see #930) if (ie$1 && ie_version <= 11 && mutations.some(m => m.type == "childList" && m.removedNodes.length || m.type == "characterData" && m.oldValue.length > m.target.nodeValue.length)) this.flushSoon();else this.flush(); }); if (useCharData) { this.onCharData = e => { this.queue.push({ target: e.target, type: "characterData", oldValue: e.prevValue }); this.flushSoon(); }; } this.onSelectionChange = this.onSelectionChange.bind(this); } flushSoon() { if (this.flushingSoon < 0) this.flushingSoon = window.setTimeout(() => { this.flushingSoon = -1; this.flush(); }, 20); } forceFlush() { if (this.flushingSoon > -1) { window.clearTimeout(this.flushingSoon); this.flushingSoon = -1; this.flush(); } } start() { if (this.observer) { this.observer.takeRecords(); this.observer.observe(this.view.dom, observeOptions); } if (this.onCharData) this.view.dom.addEventListener("DOMCharacterDataModified", this.onCharData); this.connectSelection(); } stop() { if (this.observer) { let take = this.observer.takeRecords(); if (take.length) { for (let i = 0; i < take.length; i++) this.queue.push(take[i]); window.setTimeout(() => this.flush(), 20); } this.observer.disconnect(); } if (this.onCharData) this.view.dom.removeEventListener("DOMCharacterDataModified", this.onCharData); this.disconnectSelection(); } connectSelection() { this.view.dom.ownerDocument.addEventListener("selectionchange", this.onSelectionChange); } disconnectSelection() { this.view.dom.ownerDocument.removeEventListener("selectionchange", this.onSelectionChange); } suppressSelectionUpdates() { this.suppressingSelectionUpdates = true; setTimeout(() => this.suppressingSelectionUpdates = false, 50); } onSelectionChange() { if (!hasFocusAndSelection(this.view)) return; if (this.suppressingSelectionUpdates) return selectionToDOM(this.view); // Deletions on IE11 fire their events in the wrong order, giving // us a selection change event before the DOM changes are // reported. if (ie$1 && ie_version <= 11 && !this.view.state.selection.empty) { let sel = this.view.domSelectionRange(); // Selection.isCollapsed isn't reliable on IE if (sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset)) return this.flushSoon(); } this.flush(); } setCurSelection() { this.currentSelection.set(this.view.domSelectionRange()); } ignoreSelectionChange(sel) { if (!sel.focusNode) return true; let ancestors = new Set(), container; for (let scan = sel.focusNode; scan; scan = parentNode(scan)) ancestors.add(scan); for (let scan = sel.anchorNode; scan; scan = parentNode(scan)) if (ancestors.has(scan)) { container = scan; break; } let desc = container && this.view.docView.nearestDesc(container); if (desc && desc.ignoreMutation({ type: "selection", target: container.nodeType == 3 ? container.parentNode : container })) { this.setCurSelection(); return true; } } flush() { let { view } = this; if (!view.docView || this.flushingSoon > -1) return; let mutations = this.observer ? this.observer.takeRecords() : []; if (this.queue.length) { mutations = this.queue.concat(mutations); this.queue.length = 0; } let sel = view.domSelectionRange(); let newSel = !this.suppressingSelectionUpdates && !this.currentSelection.eq(sel) && hasFocusAndSelection(view) && !this.ignoreSelectionChange(sel); let from = -1, to = -1, typeOver = false, added = []; if (view.editable) { for (let i = 0; i < mutations.length; i++) { let result = this.registerMutation(mutations[i], added); if (result) { from = from < 0 ? result.from : Math.min(result.from, from); to = to < 0 ? result.to : Math.max(result.to, to); if (result.typeOver) typeOver = true; } } } if (gecko && added.length > 1) { let brs = added.filter(n => n.nodeName == "BR"); if (brs.length == 2) { let a = brs[0], b = brs[1]; if (a.parentNode && a.parentNode.parentNode == b.parentNode) b.remove();else a.remove(); } } let readSel = null; // If it looks like the browser has reset the selection to the // start of the document after focus, restore the selection from // the state if (from < 0 && newSel && view.input.lastFocus > Date.now() - 200 && Math.max(view.input.lastTouch, view.input.lastClick.time) < Date.now() - 300 && selectionCollapsed(sel) && (readSel = selectionFromDOM(view)) && readSel.eq(Selection.near(view.state.doc.resolve(0), 1))) { view.input.lastFocus = 0; selectionToDOM(view); this.currentSelection.set(sel); view.scrollToSelection(); } else if (from > -1 || newSel) { if (from > -1) { view.docView.markDirty(from, to); checkCSS(view); } this.handleDOMChange(from, to, typeOver, added); if (view.docView && view.docView.dirty) view.updateState(view.state);else if (!this.currentSelection.eq(sel)) selectionToDOM(view); this.currentSelection.set(sel); } } registerMutation(mut, added) { // Ignore mutations inside nodes that were already noted as inserted if (added.indexOf(mut.target) > -1) return null; let desc = this.view.docView.nearestDesc(mut.target); if (mut.type == "attributes" && (desc == this.view.docView || mut.attributeName == "contenteditable" || // Firefox sometimes fires spurious events for null/empty styles mut.attributeName == "style" && !mut.oldValue && !mut.target.getAttribute("style"))) return null; if (!desc || desc.ignoreMutation(mut)) return null; if (mut.type == "childList") { for (let i = 0; i < mut.addedNodes.length; i++) added.push(mut.addedNodes[i]); if (desc.contentDOM && desc.contentDOM != desc.dom && !desc.contentDOM.contains(mut.target)) return { from: desc.posBefore, to: desc.posAfter }; let prev = mut.previousSibling, next = mut.nextSibling; if (ie$1 && ie_version <= 11 && mut.addedNodes.length) { // IE11 gives us incorrect next/prev siblings for some // insertions, so if there are added nodes, recompute those for (let i = 0; i < mut.addedNodes.length; i++) { let { previousSibling, nextSibling } = mut.addedNodes[i]; if (!previousSibling || Array.prototype.indexOf.call(mut.addedNodes, previousSibling) < 0) prev = previousSibling; if (!nextSibling || Array.prototype.indexOf.call(mut.addedNodes, nextSibling) < 0) next = nextSibling; } } let fromOffset = prev && prev.parentNode == mut.target ? domIndex(prev) + 1 : 0; let from = desc.localPosFromDOM(mut.target, fromOffset, -1); let toOffset = next && next.parentNode == mut.target ? domIndex(next) : mut.target.childNodes.length; let to = desc.localPosFromDOM(mut.target, toOffset, 1); return { from, to }; } else if (mut.type == "attributes") { return { from: desc.posAtStart - desc.border, to: desc.posAtEnd + desc.border }; } else { // "characterData" return { from: desc.posAtStart, to: desc.posAtEnd, // An event was generated for a text change that didn't change // any text. Mark the dom change to fall back to assuming the // selection was typed over with an identical value if it can't // find another change. typeOver: mut.target.nodeValue == mut.oldValue }; } } } let cssChecked = new WeakMap(); let cssCheckWarned = false; function checkCSS(view) { if (cssChecked.has(view)) return; cssChecked.set(view, null); if (['normal', 'nowrap', 'pre-line'].indexOf(getComputedStyle(view.dom).whiteSpace) !== -1) { view.requiresGeckoHackNode = gecko; if (cssCheckWarned) return; console["warn"]("ProseMirror expects the CSS white-space property to be set, preferably to 'pre-wrap'. It is recommended to load style/prosemirror.css from the prosemirror-view package."); cssCheckWarned = true; } } // Used to work around a Safari Selection/shadow DOM bug // Based on https://github.com/codemirror/dev/issues/414 fix function safariShadowSelectionRange(view) { let found; function read(event) { event.preventDefault(); event.stopImmediatePropagation(); found = event.getTargetRanges()[0]; } // Because Safari (at least in 2018-2022) doesn't provide regular // access to the selection inside a shadowRoot, we have to perform a // ridiculous hack to get at it—using `execCommand` to trigger a // `beforeInput` event so that we can read the target range from the // event. view.dom.addEventListener("beforeinput", read, true); document.execCommand("indent"); view.dom.removeEventListener("beforeinput", read, true); let anchorNode = found.startContainer, anchorOffset = found.startOffset; let focusNode = found.endContainer, focusOffset = found.endOffset; let currentAnchor = view.domAtPos(view.state.selection.anchor); // Since such a range doesn't distinguish between anchor and head, // use a heuristic that flips it around if its end matches the // current anchor. if (isEquivalentPosition(currentAnchor.node, currentAnchor.offset, focusNode, focusOffset)) [anchorNode, anchorOffset, focusNode, focusOffset] = [focusNode, focusOffset, anchorNode, anchorOffset]; return { anchorNode, anchorOffset, focusNode, focusOffset }; } // Note that all referencing and parsing is done with the // start-of-operation selection and document, since that's the one // that the DOM represents. If any changes came in in the meantime, // the modification is mapped over those before it is applied, in // readDOMChange. function parseBetween(view, from_, to_) { let { node: parent, fromOffset, toOffset, from, to } = view.docView.parseRange(from_, to_); let domSel = view.domSelectionRange(); let find; let anchor = domSel.anchorNode; if (anchor && view.dom.contains(anchor.nodeType == 1 ? anchor : anchor.parentNode)) { find = [{ node: anchor, offset: domSel.anchorOffset }]; if (!selectionCollapsed(domSel)) find.push({ node: domSel.focusNode, offset: domSel.focusOffset }); } // Work around issue in Chrome where backspacing sometimes replaces // the deleted content with a random BR node (issues #799, #831) if (chrome$1 && view.input.lastKeyCode === 8) { for (let off = toOffset; off > fromOffset; off--) { let node = parent.childNodes[off - 1], desc = node.pmViewDesc; if (node.nodeName == "BR" && !desc) { toOffset = off; break; } if (!desc || desc.size) break; } } let startDoc = view.state.doc; let parser = view.someProp("domParser") || DOMParser.fromSchema(view.state.schema); let $from = startDoc.resolve(from); let sel = null, doc = parser.parse(parent, { topNode: $from.parent, topMatch: $from.parent.contentMatchAt($from.index()), topOpen: true, from: fromOffset, to: toOffset, preserveWhitespace: $from.parent.type.whitespace == "pre" ? "full" : true, findPositions: find, ruleFromNode, context: $from }); if (find && find[0].pos != null) { let anchor = find[0].pos, head = find[1] && find[1].pos; if (head == null) head = anchor; sel = { anchor: anchor + from, head: head + from }; } return { doc, sel, from, to }; } function ruleFromNode(dom) { let desc = dom.pmViewDesc; if (desc) { return desc.parseRule(); } else if (dom.nodeName == "BR" && dom.parentNode) { // Safari replaces the list item or table cell with a BR // directly in the list node (?!) if you delete the last // character in a list item or table cell (#708, #862) if (safari && /^(ul|ol)$/i.test(dom.parentNode.nodeName)) { let skip = document.createElement("div"); skip.appendChild(document.createElement("li")); return { skip }; } else if (dom.parentNode.lastChild == dom || safari && /^(tr|table)$/i.test(dom.parentNode.nodeName)) { return { ignore: true }; } } else if (dom.nodeName == "IMG" && dom.getAttribute("mark-placeholder")) { return { ignore: true }; } return null; } const isInline = /^(a|abbr|acronym|b|bd[io]|big|br|button|cite|code|data(list)?|del|dfn|em|i|ins|kbd|label|map|mark|meter|output|q|ruby|s|samp|small|span|strong|su[bp]|time|u|tt|var)$/i; function readDOMChange(view, from, to, typeOver, addedNodes) { if (from < 0) { let origin = view.input.lastSelectionTime > Date.now() - 50 ? view.input.lastSelectionOrigin : null; let newSel = selectionFromDOM(view, origin); if (newSel && !view.state.selection.eq(newSel)) { if (chrome$1 && android && view.input.lastKeyCode === 13 && Date.now() - 100 < view.input.lastKeyCodeTime && view.someProp("handleKeyDown", f => f(view, keyEvent(13, "Enter")))) return; let tr = view.state.tr.setSelection(newSel); if (origin == "pointer") tr.setMeta("pointer", true);else if (origin == "key") tr.scrollIntoView(); view.dispatch(tr); } return; } let $before = view.state.doc.resolve(from); let shared = $before.sharedDepth(to); from = $before.before(shared + 1); to = view.state.doc.resolve(to).after(shared + 1); let sel = view.state.selection; let parse = parseBetween(view, from, to); let doc = view.state.doc, compare = doc.slice(parse.from, parse.to); let preferredPos, preferredSide; // Prefer anchoring to end when Backspace is pressed if (view.input.lastKeyCode === 8 && Date.now() - 100 < view.input.lastKeyCodeTime) { preferredPos = view.state.selection.to; preferredSide = "end"; } else { preferredPos = view.state.selection.from; preferredSide = "start"; } view.input.lastKeyCode = null; let change = findDiff(compare.content, parse.doc.content, parse.from, preferredPos, preferredSide); if ((ios && view.input.lastIOSEnter > Date.now() - 225 || android) && addedNodes.some(n => n.nodeType == 1 && !isInline.test(n.nodeName)) && (!change || change.endA >= change.endB) && view.someProp("handleKeyDown", f => f(view, keyEvent(13, "Enter")))) { view.input.lastIOSEnter = 0; return; } if (!change) { if (typeOver && sel instanceof TextSelection && !sel.empty && sel.$head.sameParent(sel.$anchor) && !view.composing && !(parse.sel && parse.sel.anchor != parse.sel.head)) { change = { start: sel.from, endA: sel.to, endB: sel.to }; } else { if (parse.sel) { let sel = resolveSelection(view, view.state.doc, parse.sel); if (sel && !sel.eq(view.state.selection)) view.dispatch(view.state.tr.setSelection(sel)); } return; } } // Chrome sometimes leaves the cursor before the inserted text when // composing after a cursor wrapper. This moves it forward. if (chrome$1 && view.cursorWrapper && parse.sel && parse.sel.anchor == view.cursorWrapper.deco.from && parse.sel.head == parse.sel.anchor) { let size = change.endB - change.start; parse.sel = { anchor: parse.sel.anchor + size, head: parse.sel.anchor + size }; } view.input.domChangeCount++; // Handle the case where overwriting a selection by typing matches // the start or end of the selected content, creating a change // that's smaller than what was actually overwritten. if (view.state.selection.from < view.state.selection.to && change.start == change.endB && view.state.selection instanceof TextSelection) { if (change.start > view.state.selection.from && change.start <= view.state.selection.from + 2 && view.state.selection.from >= parse.from) { change.start = view.state.selection.from; } else if (change.endA < view.state.selection.to && change.endA >= view.state.selection.to - 2 && view.state.selection.to <= parse.to) { change.endB += view.state.selection.to - change.endA; change.endA = view.state.selection.to; } } // IE11 will insert a non-breaking space _ahead_ of the space after // the cursor space when adding a space before another space. When // that happened, adjust the change to cover the space instead. if (ie$1 && ie_version <= 11 && change.endB == change.start + 1 && change.endA == change.start && change.start > parse.from && parse.doc.textBetween(change.start - parse.from - 1, change.start - parse.from + 1) == " \u00a0") { change.start--; change.endA--; change.endB--; } let $from = parse.doc.resolveNoCache(change.start - parse.from); let $to = parse.doc.resolveNoCache(change.endB - parse.from); let $fromA = doc.resolve(change.start); let inlineChange = $from.sameParent($to) && $from.parent.inlineContent && $fromA.end() >= change.endA; let nextSel; // If this looks like the effect of pressing Enter (or was recorded // as being an iOS enter press), just dispatch an Enter key instead. if ((ios && view.input.lastIOSEnter > Date.now() - 225 && (!inlineChange || addedNodes.some(n => n.nodeName == "DIV" || n.nodeName == "P")) || !inlineChange && $from.pos < parse.doc.content.size && (nextSel = Selection.findFrom(parse.doc.resolve($from.pos + 1), 1, true)) && nextSel.head == $to.pos) && view.someProp("handleKeyDown", f => f(view, keyEvent(13, "Enter")))) { view.input.lastIOSEnter = 0; return; } // Same for backspace if (view.state.selection.anchor > change.start && looksLikeJoin(doc, change.start, change.endA, $from, $to) && view.someProp("handleKeyDown", f => f(view, keyEvent(8, "Backspace")))) { if (android && chrome$1) view.domObserver.suppressSelectionUpdates(); // #820 return; } // Chrome Android will occasionally, during composition, delete the // entire composition and then immediately insert it again. This is // used to detect that situation. if (chrome$1 && android && change.endB == change.start) view.input.lastAndroidDelete = Date.now(); // This tries to detect Android virtual keyboard // enter-and-pick-suggestion action. That sometimes (see issue // #1059) first fires a DOM mutation, before moving the selection to // the newly created block. And then, because ProseMirror cleans up // the DOM selection, it gives up moving the selection entirely, // leaving the cursor in the wrong place. When that happens, we drop // the new paragraph from the initial change, and fire a simulated // enter key afterwards. if (android && !inlineChange && $from.start() != $to.start() && $to.parentOffset == 0 && $from.depth == $to.depth && parse.sel && parse.sel.anchor == parse.sel.head && parse.sel.head == change.endA) { change.endB -= 2; $to = parse.doc.resolveNoCache(change.endB - parse.from); setTimeout(() => { view.someProp("handleKeyDown", function (f) { return f(view, keyEvent(13, "Enter")); }); }, 20); } let chFrom = change.start, chTo = change.endA; let tr, storedMarks, markChange; if (inlineChange) { if ($from.pos == $to.pos) { // Deletion // IE11 sometimes weirdly moves the DOM selection around after // backspacing out the first element in a textblock if (ie$1 && ie_version <= 11 && $from.parentOffset == 0) { view.domObserver.suppressSelectionUpdates(); setTimeout(() => selectionToDOM(view), 20); } tr = view.state.tr.delete(chFrom, chTo); storedMarks = doc.resolve(change.start).marksAcross(doc.resolve(change.endA)); } else if ( // Adding or removing a mark change.endA == change.endB && (markChange = isMarkChange($from.parent.content.cut($from.parentOffset, $to.parentOffset), $fromA.parent.content.cut($fromA.parentOffset, change.endA - $fromA.start())))) { tr = view.state.tr; if (markChange.type == "add") tr.addMark(chFrom, chTo, markChange.mark);else tr.removeMark(chFrom, chTo, markChange.mark); } else if ($from.parent.child($from.index()).isText && $from.index() == $to.index() - ($to.textOffset ? 0 : 1)) { // Both positions in the same text node -- simply insert text let text = $from.parent.textBetween($from.parentOffset, $to.parentOffset); if (view.someProp("handleTextInput", f => f(view, chFrom, chTo, text))) return; tr = view.state.tr.insertText(text, chFrom, chTo); } } if (!tr) tr = view.state.tr.replace(chFrom, chTo, parse.doc.slice(change.start - parse.from, change.endB - parse.from)); if (parse.sel) { let sel = resolveSelection(view, tr.doc, parse.sel); // Chrome Android will sometimes, during composition, report the // selection in the wrong place. If it looks like that is // happening, don't update the selection. // Edge just doesn't move the cursor forward when you start typing // in an empty block or between br nodes. if (sel && !(chrome$1 && android && view.composing && sel.empty && (change.start != change.endB || view.input.lastAndroidDelete < Date.now() - 100) && (sel.head == chFrom || sel.head == tr.mapping.map(chTo) - 1) || ie$1 && sel.empty && sel.head == chFrom)) tr.setSelection(sel); } if (storedMarks) tr.ensureMarks(storedMarks); view.dispatch(tr.scrollIntoView()); } function resolveSelection(view, doc, parsedSel) { if (Math.max(parsedSel.anchor, parsedSel.head) > doc.content.size) return null; return selectionBetween(view, doc.resolve(parsedSel.anchor), doc.resolve(parsedSel.head)); } // Given two same-length, non-empty fragments of inline content, // determine whether the first could be created from the second by // removing or adding a single mark type. function isMarkChange(cur, prev) { let curMarks = cur.firstChild.marks, prevMarks = prev.firstChild.marks; let added = curMarks, removed = prevMarks, type, mark, update; for (let i = 0; i < prevMarks.length; i++) added = prevMarks[i].removeFromSet(added); for (let i = 0; i < curMarks.length; i++) removed = curMarks[i].removeFromSet(removed); if (added.length == 1 && removed.length == 0) { mark = added[0]; type = "add"; update = node => node.mark(mark.addToSet(node.marks)); } else if (added.length == 0 && removed.length == 1) { mark = removed[0]; type = "remove"; update = node => node.mark(mark.removeFromSet(node.marks)); } else { return null; } let updated = []; for (let i = 0; i < prev.childCount; i++) updated.push(update(prev.child(i))); if (Fragment.from(updated).eq(cur)) return { mark, type }; } function looksLikeJoin(old, start, end, $newStart, $newEnd) { if (!$newStart.parent.isTextblock || // The content must have shrunk end - start <= $newEnd.pos - $newStart.pos || // newEnd must point directly at or after the end of the block that newStart points into skipClosingAndOpening($newStart, true, false) < $newEnd.pos) return false; let $start = old.resolve(start); // Start must be at the end of a block if ($start.parentOffset < $start.parent.content.size || !$start.parent.isTextblock) return false; let $next = old.resolve(skipClosingAndOpening($start, true, true)); // The next textblock must start before end and end near it if (!$next.parent.isTextblock || $next.pos > end || skipClosingAndOpening($next, true, false) < end) return false; // The fragments after the join point must match return $newStart.parent.content.cut($newStart.parentOffset).eq($next.parent.content); } function skipClosingAndOpening($pos, fromEnd, mayOpen) { let depth = $pos.depth, end = fromEnd ? $pos.end() : $pos.pos; while (depth > 0 && (fromEnd || $pos.indexAfter(depth) == $pos.node(depth).childCount)) { depth--; end++; fromEnd = false; } if (mayOpen) { let next = $pos.node(depth).maybeChild($pos.indexAfter(depth)); while (next && !next.isLeaf) { next = next.firstChild; end++; } } return end; } function findDiff(a, b, pos, preferredPos, preferredSide) { let start = a.findDiffStart(b, pos); if (start == null) return null; let { a: endA, b: endB } = a.findDiffEnd(b, pos + a.size, pos + b.size); if (preferredSide == "end") { let adjust = Math.max(0, start - Math.min(endA, endB)); preferredPos -= endA + adjust - start; } if (endA < start && a.size < b.size) { let move = preferredPos <= start && preferredPos >= endA ? start - preferredPos : 0; start -= move; endB = start + (endB - endA); endA = start; } else if (endB < start) { let move = preferredPos <= start && preferredPos >= endB ? start - preferredPos : 0; start -= move; endA = start + (endA - endB); endB = start; } return { start, endA, endB }; } /** An editor view manages the DOM structure that represents an editable document. Its state and behavior are determined by its [props](https://prosemirror.net/docs/ref/#view.DirectEditorProps). */ class EditorView { /** Create a view. `place` may be a DOM node that the editor should be appended to, a function that will place it into the document, or an object whose `mount` property holds the node to use as the document container. If it is `null`, the editor will not be added to the document. */ constructor(place, props) { this._root = null; /** @internal */ this.focused = false; /** Kludge used to work around a Chrome bug @internal */ this.trackWrites = null; this.mounted = false; /** @internal */ this.markCursor = null; /** @internal */ this.cursorWrapper = null; /** @internal */ this.lastSelectedViewDesc = undefined; /** @internal */ this.input = new InputState(); this.prevDirectPlugins = []; this.pluginViews = []; /** Holds `true` when a hack node is needed in Firefox to prevent the [space is eaten issue](https://github.com/ProseMirror/prosemirror/issues/651) @internal */ this.requiresGeckoHackNode = false; /** When editor content is being dragged, this object contains information about the dragged slice and whether it is being copied or moved. At any other time, it is null. */ this.dragging = null; this._props = props; this.state = props.state; this.directPlugins = props.plugins || []; this.directPlugins.forEach(checkStateComponent); this.dispatch = this.dispatch.bind(this); this.dom = place && place.mount || document.createElement("div"); if (place) { if (place.appendChild) place.appendChild(this.dom);else if (typeof place == "function") place(this.dom);else if (place.mount) this.mounted = true; } this.editable = getEditable(this); updateCursorWrapper(this); this.nodeViews = buildNodeViews(this); this.docView = docViewDesc(this.state.doc, computeDocDeco(this), viewDecorations(this), this.dom, this); this.domObserver = new DOMObserver(this, (from, to, typeOver, added) => readDOMChange(this, from, to, typeOver, added)); this.domObserver.start(); initInput(this); this.updatePluginViews(); } /** Holds `true` when a [composition](https://w3c.github.io/uievents/#events-compositionevents) is active. */ get composing() { return this.input.composing; } /** The view's current [props](https://prosemirror.net/docs/ref/#view.EditorProps). */ get props() { if (this._props.state != this.state) { let prev = this._props; this._props = {}; for (let name in prev) this._props[name] = prev[name]; this._props.state = this.state; } return this._props; } /** Update the view's props. Will immediately cause an update to the DOM. */ update(props) { if (props.handleDOMEvents != this._props.handleDOMEvents) ensureListeners(this); let prevProps = this._props; this._props = props; if (props.plugins) { props.plugins.forEach(checkStateComponent); this.directPlugins = props.plugins; } this.updateStateInner(props.state, prevProps); } /** Update the view by updating existing props object with the object given as argument. Equivalent to `view.update(Object.assign({}, view.props, props))`. */ setProps(props) { let updated = {}; for (let name in this._props) updated[name] = this._props[name]; updated.state = this.state; for (let name in props) updated[name] = props[name]; this.update(updated); } /** Update the editor's `state` prop, without touching any of the other props. */ updateState(state) { this.updateStateInner(state, this._props); } updateStateInner(state, prevProps) { let prev = this.state, redraw = false, updateSel = false; // When stored marks are added, stop composition, so that they can // be displayed. if (state.storedMarks && this.composing) { clearComposition(this); updateSel = true; } this.state = state; let pluginsChanged = prev.plugins != state.plugins || this._props.plugins != prevProps.plugins; if (pluginsChanged || this._props.plugins != prevProps.plugins || this._props.nodeViews != prevProps.nodeViews) { let nodeViews = buildNodeViews(this); if (changedNodeViews(nodeViews, this.nodeViews)) { this.nodeViews = nodeViews; redraw = true; } } if (pluginsChanged || prevProps.handleDOMEvents != this._props.handleDOMEvents) { ensureListeners(this); } this.editable = getEditable(this); updateCursorWrapper(this); let innerDeco = viewDecorations(this), outerDeco = computeDocDeco(this); let scroll = prev.plugins != state.plugins && !prev.doc.eq(state.doc) ? "reset" : state.scrollToSelection > prev.scrollToSelection ? "to selection" : "preserve"; let updateDoc = redraw || !this.docView.matchesNode(state.doc, outerDeco, innerDeco); if (updateDoc || !state.selection.eq(prev.selection)) updateSel = true; let oldScrollPos = scroll == "preserve" && updateSel && this.dom.style.overflowAnchor == null && storeScrollPos(this); if (updateSel) { this.domObserver.stop(); // Work around an issue in Chrome, IE, and Edge where changing // the DOM around an active selection puts it into a broken // state where the thing the user sees differs from the // selection reported by the Selection object (#710, #973, // #1011, #1013, #1035). let forceSelUpdate = updateDoc && (ie$1 || chrome$1) && !this.composing && !prev.selection.empty && !state.selection.empty && selectionContextChanged(prev.selection, state.selection); if (updateDoc) { // If the node that the selection points into is written to, // Chrome sometimes starts misreporting the selection, so this // tracks that and forces a selection reset when our update // did write to the node. let chromeKludge = chrome$1 ? this.trackWrites = this.domSelectionRange().focusNode : null; if (redraw || !this.docView.update(state.doc, outerDeco, innerDeco, this)) { this.docView.updateOuterDeco([]); this.docView.destroy(); this.docView = docViewDesc(state.doc, outerDeco, innerDeco, this.dom, this); } if (chromeKludge && !this.trackWrites) forceSelUpdate = true; } // Work around for an issue where an update arriving right between // a DOM selection change and the "selectionchange" event for it // can cause a spurious DOM selection update, disrupting mouse // drag selection. if (forceSelUpdate || !(this.input.mouseDown && this.domObserver.currentSelection.eq(this.domSelectionRange()) && anchorInRightPlace(this))) { selectionToDOM(this, forceSelUpdate); } else { syncNodeSelection(this, state.selection); this.domObserver.setCurSelection(); } this.domObserver.start(); } this.updatePluginViews(prev); if (scroll == "reset") { this.dom.scrollTop = 0; } else if (scroll == "to selection") { this.scrollToSelection(); } else if (oldScrollPos) { resetScrollPos(oldScrollPos); } } /** @internal */ scrollToSelection() { let startDOM = this.domSelectionRange().focusNode; if (this.someProp("handleScrollToSelection", f => f(this))) ;else if (this.state.selection instanceof NodeSelection) { let target = this.docView.domAfterPos(this.state.selection.from); if (target.nodeType == 1) scrollRectIntoView(this, target.getBoundingClientRect(), startDOM); } else { scrollRectIntoView(this, this.coordsAtPos(this.state.selection.head, 1), startDOM); } } destroyPluginViews() { let view; while (view = this.pluginViews.pop()) if (view.destroy) view.destroy(); } updatePluginViews(prevState) { if (!prevState || prevState.plugins != this.state.plugins || this.directPlugins != this.prevDirectPlugins) { this.prevDirectPlugins = this.directPlugins; this.destroyPluginViews(); for (let i = 0; i < this.directPlugins.length; i++) { let plugin = this.directPlugins[i]; if (plugin.spec.view) this.pluginViews.push(plugin.spec.view(this)); } for (let i = 0; i < this.state.plugins.length; i++) { let plugin = this.state.plugins[i]; if (plugin.spec.view) this.pluginViews.push(plugin.spec.view(this)); } } else { for (let i = 0; i < this.pluginViews.length; i++) { let pluginView = this.pluginViews[i]; if (pluginView.update) pluginView.update(this, prevState); } } } someProp(propName, f) { let prop = this._props && this._props[propName], value; if (prop != null && (value = f ? f(prop) : prop)) return value; for (let i = 0; i < this.directPlugins.length; i++) { let prop = this.directPlugins[i].props[propName]; if (prop != null && (value = f ? f(prop) : prop)) return value; } let plugins = this.state.plugins; if (plugins) for (let i = 0; i < plugins.length; i++) { let prop = plugins[i].props[propName]; if (prop != null && (value = f ? f(prop) : prop)) return value; } } /** Query whether the view has focus. */ hasFocus() { // Work around IE not handling focus correctly if resize handles are shown. // If the cursor is inside an element with resize handles, activeElement // will be that element instead of this.dom. if (ie$1) { // If activeElement is within this.dom, and there are no other elements // setting `contenteditable` to false in between, treat it as focused. let node = this.root.activeElement; if (node == this.dom) return true; if (!node || !this.dom.contains(node)) return false; while (node && this.dom != node && this.dom.contains(node)) { if (node.contentEditable == 'false') return false; node = node.parentElement; } return true; } return this.root.activeElement == this.dom; } /** Focus the editor. */ focus() { this.domObserver.stop(); if (this.editable) focusPreventScroll(this.dom); selectionToDOM(this); this.domObserver.start(); } /** Get the document root in which the editor exists. This will usually be the top-level `document`, but might be a [shadow DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Shadow_DOM) root if the editor is inside one. */ get root() { let cached = this._root; if (cached == null) for (let search = this.dom.parentNode; search; search = search.parentNode) { if (search.nodeType == 9 || search.nodeType == 11 && search.host) { if (!search.getSelection) Object.getPrototypeOf(search).getSelection = () => search.ownerDocument.getSelection(); return this._root = search; } } return cached || document; } /** Given a pair of viewport coordinates, return the document position that corresponds to them. May return null if the given coordinates aren't inside of the editor. When an object is returned, its `pos` property is the position nearest to the coordinates, and its `inside` property holds the position of the inner node that the position falls inside of, or -1 if it is at the top level, not in any node. */ posAtCoords(coords) { return posAtCoords(this, coords); } /** Returns the viewport rectangle at a given document position. `left` and `right` will be the same number, as this returns a flat cursor-ish rectangle. If the position is between two things that aren't directly adjacent, `side` determines which element is used. When < 0, the element before the position is used, otherwise the element after. */ coordsAtPos(pos, side = 1) { return coordsAtPos(this, pos, side); } /** Find the DOM position that corresponds to the given document position. When `side` is negative, find the position as close as possible to the content before the position. When positive, prefer positions close to the content after the position. When zero, prefer as shallow a position as possible. Note that you should **not** mutate the editor's internal DOM, only inspect it (and even that is usually not necessary). */ domAtPos(pos, side = 0) { return this.docView.domFromPos(pos, side); } /** Find the DOM node that represents the document node after the given position. May return `null` when the position doesn't point in front of a node or if the node is inside an opaque node view. This is intended to be able to call things like `getBoundingClientRect` on that DOM node. Do **not** mutate the editor DOM directly, or add styling this way, since that will be immediately overriden by the editor as it redraws the node. */ nodeDOM(pos) { let desc = this.docView.descAt(pos); return desc ? desc.nodeDOM : null; } /** Find the document position that corresponds to a given DOM position. (Whenever possible, it is preferable to inspect the document structure directly, rather than poking around in the DOM, but sometimes—for example when interpreting an event target—you don't have a choice.) The `bias` parameter can be used to influence which side of a DOM node to use when the position is inside a leaf node. */ posAtDOM(node, offset, bias = -1) { let pos = this.docView.posFromDOM(node, offset, bias); if (pos == null) throw new RangeError("DOM position not inside the editor"); return pos; } /** Find out whether the selection is at the end of a textblock when moving in a given direction. When, for example, given `"left"`, it will return true if moving left from the current cursor position would leave that position's parent textblock. Will apply to the view's current state by default, but it is possible to pass a different state. */ endOfTextblock(dir, state) { return endOfTextblock(this, state || this.state, dir); } /** Run the editor's paste logic with the given HTML string. The `event`, if given, will be passed to the [`handlePaste`](https://prosemirror.net/docs/ref/#view.EditorProps.handlePaste) hook. */ pasteHTML(html, event) { return doPaste(this, "", html, false, event || new ClipboardEvent("paste")); } /** Run the editor's paste logic with the given plain-text input. */ pasteText(text, event) { return doPaste(this, text, null, true, event || new ClipboardEvent("paste")); } /** Removes the editor from the DOM and destroys all [node views](https://prosemirror.net/docs/ref/#view.NodeView). */ destroy() { if (!this.docView) return; destroyInput(this); this.destroyPluginViews(); if (this.mounted) { this.docView.update(this.state.doc, [], viewDecorations(this), this); this.dom.textContent = ""; } else if (this.dom.parentNode) { this.dom.parentNode.removeChild(this.dom); } this.docView.destroy(); this.docView = null; } /** This is true when the view has been [destroyed](https://prosemirror.net/docs/ref/#view.EditorView.destroy) (and thus should not be used anymore). */ get isDestroyed() { return this.docView == null; } /** Used for testing. */ dispatchEvent(event) { return dispatchEvent(this, event); } /** Dispatch a transaction. Will call [`dispatchTransaction`](https://prosemirror.net/docs/ref/#view.DirectEditorProps.dispatchTransaction) when given, and otherwise defaults to applying the transaction to the current state and calling [`updateState`](https://prosemirror.net/docs/ref/#view.EditorView.updateState) with the result. This method is bound to the view instance, so that it can be easily passed around. */ dispatch(tr) { let dispatchTransaction = this._props.dispatchTransaction; if (dispatchTransaction) dispatchTransaction.call(this, tr);else this.updateState(this.state.apply(tr)); } /** @internal */ domSelectionRange() { return safari && this.root.nodeType === 11 && deepActiveElement(this.dom.ownerDocument) == this.dom ? safariShadowSelectionRange(this) : this.domSelection(); } /** @internal */ domSelection() { return this.root.getSelection(); } } function computeDocDeco(view) { let attrs = Object.create(null); attrs.class = "ProseMirror"; attrs.contenteditable = String(view.editable); attrs.translate = "no"; view.someProp("attributes", value => { if (typeof value == "function") value = value(view.state); if (value) for (let attr in value) { if (attr == "class") attrs.class += " " + value[attr]; if (attr == "style") { attrs.style = (attrs.style ? attrs.style + ";" : "") + value[attr]; } else if (!attrs[attr] && attr != "contenteditable" && attr != "nodeName") attrs[attr] = String(value[attr]); } }); return [Decoration.node(0, view.state.doc.content.size, attrs)]; } function updateCursorWrapper(view) { if (view.markCursor) { let dom = document.createElement("img"); dom.className = "ProseMirror-separator"; dom.setAttribute("mark-placeholder", "true"); dom.setAttribute("alt", ""); view.cursorWrapper = { dom, deco: Decoration.widget(view.state.selection.head, dom, { raw: true, marks: view.markCursor }) }; } else { view.cursorWrapper = null; } } function getEditable(view) { return !view.someProp("editable", value => value(view.state) === false); } function selectionContextChanged(sel1, sel2) { let depth = Math.min(sel1.$anchor.sharedDepth(sel1.head), sel2.$anchor.sharedDepth(sel2.head)); return sel1.$anchor.start(depth) != sel2.$anchor.start(depth); } function buildNodeViews(view) { let result = Object.create(null); function add(obj) { for (let prop in obj) if (!Object.prototype.hasOwnProperty.call(result, prop)) result[prop] = obj[prop]; } view.someProp("nodeViews", add); view.someProp("markViews", add); return result; } function changedNodeViews(a, b) { let nA = 0, nB = 0; for (let prop in a) { if (a[prop] != b[prop]) return true; nA++; } for (let _ in b) nB++; return nA != nB; } function checkStateComponent(plugin) { if (plugin.spec.state || plugin.spec.filterTransaction || plugin.spec.appendTransaction) throw new RangeError("Plugins passed directly to the view must not have a state component"); } var base = { 8: "Backspace", 9: "Tab", 10: "Enter", 12: "NumLock", 13: "Enter", 16: "Shift", 17: "Control", 18: "Alt", 20: "CapsLock", 27: "Escape", 32: " ", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home", 37: "ArrowLeft", 38: "ArrowUp", 39: "ArrowRight", 40: "ArrowDown", 44: "PrintScreen", 45: "Insert", 46: "Delete", 59: ";", 61: "=", 91: "Meta", 92: "Meta", 106: "*", 107: "+", 108: ",", 109: "-", 110: ".", 111: "/", 144: "NumLock", 145: "ScrollLock", 160: "Shift", 161: "Shift", 162: "Control", 163: "Control", 164: "Alt", 165: "Alt", 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'" }; var shift = { 48: ")", 49: "!", 50: "@", 51: "#", 52: "$", 53: "%", 54: "^", 55: "&", 56: "*", 57: "(", 59: ":", 61: "+", 173: "_", 186: ":", 187: "+", 188: "<", 189: "_", 190: ">", 191: "?", 192: "~", 219: "{", 220: "|", 221: "}", 222: "\"" }; var chrome = typeof navigator != "undefined" && /Chrome\/(\d+)/.exec(navigator.userAgent); var mac$1 = typeof navigator != "undefined" && /Mac/.test(navigator.platform); var ie = typeof navigator != "undefined" && /MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent); var brokenModifierNames = mac$1 || chrome && +chrome[1] < 57; // Fill in the digit keys for (var i$1 = 0; i$1 < 10; i$1++) base[48 + i$1] = base[96 + i$1] = String(i$1); // The function keys for (var i$1 = 1; i$1 <= 24; i$1++) base[i$1 + 111] = "F" + i$1; // And the alphabetic keys for (var i$1 = 65; i$1 <= 90; i$1++) { base[i$1] = String.fromCharCode(i$1 + 32); shift[i$1] = String.fromCharCode(i$1); } // For each code that doesn't have a shift-equivalent, copy the base name for (var code$1 in base) if (!shift.hasOwnProperty(code$1)) shift[code$1] = base[code$1]; function keyName(event) { var ignoreKey = brokenModifierNames && (event.ctrlKey || event.altKey || event.metaKey) || ie && event.shiftKey && event.key && event.key.length == 1 || event.key == "Unidentified"; var name = !ignoreKey && event.key || (event.shiftKey ? shift : base)[event.keyCode] || event.key || "Unidentified"; // Edge sometimes produces wrong names (Issue #3) if (name == "Esc") name = "Escape"; if (name == "Del") name = "Delete"; // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/ if (name == "Left") name = "ArrowLeft"; if (name == "Up") name = "ArrowUp"; if (name == "Right") name = "ArrowRight"; if (name == "Down") name = "ArrowDown"; return name; } const mac = typeof navigator != "undefined" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform) : false; function normalizeKeyName$1(name) { let parts = name.split(/-(?!$)/), result = parts[parts.length - 1]; if (result == "Space") result = " "; let alt, ctrl, shift, meta; for (let i = 0; i < parts.length - 1; i++) { let mod = parts[i]; if (/^(cmd|meta|m)$/i.test(mod)) meta = true;else if (/^a(lt)?$/i.test(mod)) alt = true;else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true;else if (/^s(hift)?$/i.test(mod)) shift = true;else if (/^mod$/i.test(mod)) { if (mac) meta = true;else ctrl = true; } else throw new Error("Unrecognized modifier name: " + mod); } if (alt) result = "Alt-" + result; if (ctrl) result = "Ctrl-" + result; if (meta) result = "Meta-" + result; if (shift) result = "Shift-" + result; return result; } function normalize(map) { let copy = Object.create(null); for (let prop in map) copy[normalizeKeyName$1(prop)] = map[prop]; return copy; } function modifiers(name, event, shift = true) { if (event.altKey) name = "Alt-" + name; if (event.ctrlKey) name = "Ctrl-" + name; if (event.metaKey) name = "Meta-" + name; if (shift && event.shiftKey) name = "Shift-" + name; return name; } /** Create a keymap plugin for the given set of bindings. Bindings should map key names to [command](https://prosemirror.net/docs/ref/#commands)-style functions, which will be called with `(EditorState, dispatch, EditorView)` arguments, and should return true when they've handled the key. Note that the view argument isn't part of the command protocol, but can be used as an escape hatch if a binding needs to directly interact with the UI. Key names may be strings like `"Shift-Ctrl-Enter"`—a key identifier prefixed with zero or more modifiers. Key identifiers are based on the strings that can appear in [`KeyEvent.key`](https:developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key). Use lowercase letters to refer to letter keys (or uppercase letters if you want shift to be held). You may use `"Space"` as an alias for the `" "` name. Modifiers can be given in any order. `Shift-` (or `s-`), `Alt-` (or `a-`), `Ctrl-` (or `c-` or `Control-`) and `Cmd-` (or `m-` or `Meta-`) are recognized. For characters that are created by holding shift, the `Shift-` prefix is implied, and should not be added explicitly. You can use `Mod-` as a shorthand for `Cmd-` on Mac and `Ctrl-` on other platforms. You can add multiple keymap plugins to an editor. The order in which they appear determines their precedence (the ones early in the array get to dispatch first). */ function keymap(bindings) { return new Plugin({ props: { handleKeyDown: keydownHandler(bindings) } }); } /** Given a set of bindings (using the same format as [`keymap`](https://prosemirror.net/docs/ref/#keymap.keymap)), return a [keydown handler](https://prosemirror.net/docs/ref/#view.EditorProps.handleKeyDown) that handles them. */ function keydownHandler(bindings) { let map = normalize(bindings); return function (view, event) { let name = keyName(event), baseName, direct = map[modifiers(name, event)]; if (direct && direct(view.state, view.dispatch, view)) return true; // A character key if (name.length == 1 && name != " ") { if (event.shiftKey) { // In case the name was already modified by shift, try looking // it up without its shift modifier let noShift = map[modifiers(name, event, false)]; if (noShift && noShift(view.state, view.dispatch, view)) return true; } if ((event.shiftKey || event.altKey || event.metaKey || name.charCodeAt(0) > 127) && (baseName = base[event.keyCode]) && baseName != name) { // Try falling back to the keyCode when there's a modifier // active or the character produced isn't ASCII, and our table // produces a different name from the the keyCode. See #668, // #1060 let fromCode = map[modifiers(baseName, event)]; if (fromCode && fromCode(view.state, view.dispatch, view)) return true; } } return false; }; } /** Delete the selection, if there is one. */ const deleteSelection$1 = (state, dispatch) => { if (state.selection.empty) return false; if (dispatch) dispatch(state.tr.deleteSelection().scrollIntoView()); return true; }; function atBlockStart(state, view) { let { $cursor } = state.selection; if (!$cursor || (view ? !view.endOfTextblock("backward", state) : $cursor.parentOffset > 0)) return null; return $cursor; } /** If the selection is empty and at the start of a textblock, try to reduce the distance between that block and the one before it—if there's a block directly before it that can be joined, join them. If not, try to move the selected block closer to the next one in the document structure by lifting it out of its parent or moving it into a parent of the previous block. Will use the view for accurate (bidi-aware) start-of-textblock detection if given. */ const joinBackward$1 = (state, dispatch, view) => { let $cursor = atBlockStart(state, view); if (!$cursor) return false; let $cut = findCutBefore($cursor); // If there is no node before this, try to lift if (!$cut) { let range = $cursor.blockRange(), target = range && liftTarget(range); if (target == null) return false; if (dispatch) dispatch(state.tr.lift(range, target).scrollIntoView()); return true; } let before = $cut.nodeBefore; // Apply the joining algorithm if (!before.type.spec.isolating && deleteBarrier(state, $cut, dispatch)) return true; // If the node below has no content and the node above is // selectable, delete the node below and select the one above. if ($cursor.parent.content.size == 0 && (textblockAt(before, "end") || NodeSelection.isSelectable(before))) { let delStep = replaceStep(state.doc, $cursor.before(), $cursor.after(), Slice.empty); if (delStep && delStep.slice.size < delStep.to - delStep.from) { if (dispatch) { let tr = state.tr.step(delStep); tr.setSelection(textblockAt(before, "end") ? Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos, -1)), -1) : NodeSelection.create(tr.doc, $cut.pos - before.nodeSize)); dispatch(tr.scrollIntoView()); } return true; } } // If the node before is an atom, delete it if (before.isAtom && $cut.depth == $cursor.depth - 1) { if (dispatch) dispatch(state.tr.delete($cut.pos - before.nodeSize, $cut.pos).scrollIntoView()); return true; } return false; }; function textblockAt(node, side, only = false) { for (let scan = node; scan; scan = side == "start" ? scan.firstChild : scan.lastChild) { if (scan.isTextblock) return true; if (only && scan.childCount != 1) return false; } return false; } /** When the selection is empty and at the start of a textblock, select the node before that textblock, if possible. This is intended to be bound to keys like backspace, after [`joinBackward`](https://prosemirror.net/docs/ref/#commands.joinBackward) or other deleting commands, as a fall-back behavior when the schema doesn't allow deletion at the selected point. */ const selectNodeBackward$1 = (state, dispatch, view) => { let { $head, empty } = state.selection, $cut = $head; if (!empty) return false; if ($head.parent.isTextblock) { if (view ? !view.endOfTextblock("backward", state) : $head.parentOffset > 0) return false; $cut = findCutBefore($head); } let node = $cut && $cut.nodeBefore; if (!node || !NodeSelection.isSelectable(node)) return false; if (dispatch) dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos - node.nodeSize)).scrollIntoView()); return true; }; function findCutBefore($pos) { if (!$pos.parent.type.spec.isolating) for (let i = $pos.depth - 1; i >= 0; i--) { if ($pos.index(i) > 0) return $pos.doc.resolve($pos.before(i + 1)); if ($pos.node(i).type.spec.isolating) break; } return null; } function atBlockEnd(state, view) { let { $cursor } = state.selection; if (!$cursor || (view ? !view.endOfTextblock("forward", state) : $cursor.parentOffset < $cursor.parent.content.size)) return null; return $cursor; } /** If the selection is empty and the cursor is at the end of a textblock, try to reduce or remove the boundary between that block and the one after it, either by joining them or by moving the other block closer to this one in the tree structure. Will use the view for accurate start-of-textblock detection if given. */ const joinForward$1 = (state, dispatch, view) => { let $cursor = atBlockEnd(state, view); if (!$cursor) return false; let $cut = findCutAfter($cursor); // If there is no node after this, there's nothing to do if (!$cut) return false; let after = $cut.nodeAfter; // Try the joining algorithm if (deleteBarrier(state, $cut, dispatch)) return true; // If the node above has no content and the node below is // selectable, delete the node above and select the one below. if ($cursor.parent.content.size == 0 && (textblockAt(after, "start") || NodeSelection.isSelectable(after))) { let delStep = replaceStep(state.doc, $cursor.before(), $cursor.after(), Slice.empty); if (delStep && delStep.slice.size < delStep.to - delStep.from) { if (dispatch) { let tr = state.tr.step(delStep); tr.setSelection(textblockAt(after, "start") ? Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos)), 1) : NodeSelection.create(tr.doc, tr.mapping.map($cut.pos))); dispatch(tr.scrollIntoView()); } return true; } } // If the next node is an atom, delete it if (after.isAtom && $cut.depth == $cursor.depth - 1) { if (dispatch) dispatch(state.tr.delete($cut.pos, $cut.pos + after.nodeSize).scrollIntoView()); return true; } return false; }; /** When the selection is empty and at the end of a textblock, select the node coming after that textblock, if possible. This is intended to be bound to keys like delete, after [`joinForward`](https://prosemirror.net/docs/ref/#commands.joinForward) and similar deleting commands, to provide a fall-back behavior when the schema doesn't allow deletion at the selected point. */ const selectNodeForward$1 = (state, dispatch, view) => { let { $head, empty } = state.selection, $cut = $head; if (!empty) return false; if ($head.parent.isTextblock) { if (view ? !view.endOfTextblock("forward", state) : $head.parentOffset < $head.parent.content.size) return false; $cut = findCutAfter($head); } let node = $cut && $cut.nodeAfter; if (!node || !NodeSelection.isSelectable(node)) return false; if (dispatch) dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos)).scrollIntoView()); return true; }; function findCutAfter($pos) { if (!$pos.parent.type.spec.isolating) for (let i = $pos.depth - 1; i >= 0; i--) { let parent = $pos.node(i); if ($pos.index(i) + 1 < parent.childCount) return $pos.doc.resolve($pos.after(i + 1)); if (parent.type.spec.isolating) break; } return null; } /** Join the selected block or, if there is a text selection, the closest ancestor block of the selection that can be joined, with the sibling above it. */ const joinUp$1 = (state, dispatch) => { let sel = state.selection, nodeSel = sel instanceof NodeSelection, point; if (nodeSel) { if (sel.node.isTextblock || !canJoin(state.doc, sel.from)) return false; point = sel.from; } else { point = joinPoint(state.doc, sel.from, -1); if (point == null) return false; } if (dispatch) { let tr = state.tr.join(point); if (nodeSel) tr.setSelection(NodeSelection.create(tr.doc, point - state.doc.resolve(point).nodeBefore.nodeSize)); dispatch(tr.scrollIntoView()); } return true; }; /** Join the selected block, or the closest ancestor of the selection that can be joined, with the sibling after it. */ const joinDown$1 = (state, dispatch) => { let sel = state.selection, point; if (sel instanceof NodeSelection) { if (sel.node.isTextblock || !canJoin(state.doc, sel.to)) return false; point = sel.to; } else { point = joinPoint(state.doc, sel.to, 1); if (point == null) return false; } if (dispatch) dispatch(state.tr.join(point).scrollIntoView()); return true; }; /** Lift the selected block, or the closest ancestor block of the selection that can be lifted, out of its parent node. */ const lift$1 = (state, dispatch) => { let { $from, $to } = state.selection; let range = $from.blockRange($to), target = range && liftTarget(range); if (target == null) return false; if (dispatch) dispatch(state.tr.lift(range, target).scrollIntoView()); return true; }; /** If the selection is in a node whose type has a truthy [`code`](https://prosemirror.net/docs/ref/#model.NodeSpec.code) property in its spec, replace the selection with a newline character. */ const newlineInCode$1 = (state, dispatch) => { let { $head, $anchor } = state.selection; if (!$head.parent.type.spec.code || !$head.sameParent($anchor)) return false; if (dispatch) dispatch(state.tr.insertText("\n").scrollIntoView()); return true; }; function defaultBlockAt$1(match) { for (let i = 0; i < match.edgeCount; i++) { let { type } = match.edge(i); if (type.isTextblock && !type.hasRequiredAttrs()) return type; } return null; } /** When the selection is in a node with a truthy [`code`](https://prosemirror.net/docs/ref/#model.NodeSpec.code) property in its spec, create a default block after the code block, and move the cursor there. */ const exitCode$1 = (state, dispatch) => { let { $head, $anchor } = state.selection; if (!$head.parent.type.spec.code || !$head.sameParent($anchor)) return false; let above = $head.node(-1), after = $head.indexAfter(-1), type = defaultBlockAt$1(above.contentMatchAt(after)); if (!type || !above.canReplaceWith(after, after, type)) return false; if (dispatch) { let pos = $head.after(), tr = state.tr.replaceWith(pos, pos, type.createAndFill()); tr.setSelection(Selection.near(tr.doc.resolve(pos), 1)); dispatch(tr.scrollIntoView()); } return true; }; /** If a block node is selected, create an empty paragraph before (if it is its parent's first child) or after it. */ const createParagraphNear$1 = (state, dispatch) => { let sel = state.selection, { $from, $to } = sel; if (sel instanceof AllSelection || $from.parent.inlineContent || $to.parent.inlineContent) return false; let type = defaultBlockAt$1($to.parent.contentMatchAt($to.indexAfter())); if (!type || !type.isTextblock) return false; if (dispatch) { let side = (!$from.parentOffset && $to.index() < $to.parent.childCount ? $from : $to).pos; let tr = state.tr.insert(side, type.createAndFill()); tr.setSelection(TextSelection.create(tr.doc, side + 1)); dispatch(tr.scrollIntoView()); } return true; }; /** If the cursor is in an empty textblock that can be lifted, lift the block. */ const liftEmptyBlock$1 = (state, dispatch) => { let { $cursor } = state.selection; if (!$cursor || $cursor.parent.content.size) return false; if ($cursor.depth > 1 && $cursor.after() != $cursor.end(-1)) { let before = $cursor.before(); if (canSplit(state.doc, before)) { if (dispatch) dispatch(state.tr.split(before).scrollIntoView()); return true; } } let range = $cursor.blockRange(), target = range && liftTarget(range); if (target == null) return false; if (dispatch) dispatch(state.tr.lift(range, target).scrollIntoView()); return true; }; /** Move the selection to the node wrapping the current selection, if any. (Will not select the document node.) */ const selectParentNode$1 = (state, dispatch) => { let { $from, to } = state.selection, pos; let same = $from.sharedDepth(to); if (same == 0) return false; pos = $from.before(same); if (dispatch) dispatch(state.tr.setSelection(NodeSelection.create(state.doc, pos))); return true; }; function joinMaybeClear(state, $pos, dispatch) { let before = $pos.nodeBefore, after = $pos.nodeAfter, index = $pos.index(); if (!before || !after || !before.type.compatibleContent(after.type)) return false; if (!before.content.size && $pos.parent.canReplace(index - 1, index)) { if (dispatch) dispatch(state.tr.delete($pos.pos - before.nodeSize, $pos.pos).scrollIntoView()); return true; } if (!$pos.parent.canReplace(index, index + 1) || !(after.isTextblock || canJoin(state.doc, $pos.pos))) return false; if (dispatch) dispatch(state.tr.clearIncompatible($pos.pos, before.type, before.contentMatchAt(before.childCount)).join($pos.pos).scrollIntoView()); return true; } function deleteBarrier(state, $cut, dispatch) { let before = $cut.nodeBefore, after = $cut.nodeAfter, conn, match; if (before.type.spec.isolating || after.type.spec.isolating) return false; if (joinMaybeClear(state, $cut, dispatch)) return true; let canDelAfter = $cut.parent.canReplace($cut.index(), $cut.index() + 1); if (canDelAfter && (conn = (match = before.contentMatchAt(before.childCount)).findWrapping(after.type)) && match.matchType(conn[0] || after.type).validEnd) { if (dispatch) { let end = $cut.pos + after.nodeSize, wrap = Fragment.empty; for (let i = conn.length - 1; i >= 0; i--) wrap = Fragment.from(conn[i].create(null, wrap)); wrap = Fragment.from(before.copy(wrap)); let tr = state.tr.step(new ReplaceAroundStep($cut.pos - 1, end, $cut.pos, end, new Slice(wrap, 1, 0), conn.length, true)); let joinAt = end + 2 * conn.length; if (canJoin(tr.doc, joinAt)) tr.join(joinAt); dispatch(tr.scrollIntoView()); } return true; } let selAfter = Selection.findFrom($cut, 1); let range = selAfter && selAfter.$from.blockRange(selAfter.$to), target = range && liftTarget(range); if (target != null && target >= $cut.depth) { if (dispatch) dispatch(state.tr.lift(range, target).scrollIntoView()); return true; } if (canDelAfter && textblockAt(after, "start", true) && textblockAt(before, "end")) { let at = before, wrap = []; for (;;) { wrap.push(at); if (at.isTextblock) break; at = at.lastChild; } let afterText = after, afterDepth = 1; for (; !afterText.isTextblock; afterText = afterText.firstChild) afterDepth++; if (at.canReplace(at.childCount, at.childCount, afterText.content)) { if (dispatch) { let end = Fragment.empty; for (let i = wrap.length - 1; i >= 0; i--) end = Fragment.from(wrap[i].copy(end)); let tr = state.tr.step(new ReplaceAroundStep($cut.pos - wrap.length, $cut.pos + after.nodeSize, $cut.pos + afterDepth, $cut.pos + after.nodeSize - afterDepth, new Slice(end, wrap.length, 0), 0, true)); dispatch(tr.scrollIntoView()); } return true; } } return false; } function selectTextblockSide(side) { return function (state, dispatch) { let sel = state.selection, $pos = side < 0 ? sel.$from : sel.$to; let depth = $pos.depth; while ($pos.node(depth).isInline) { if (!depth) return false; depth--; } if (!$pos.node(depth).isTextblock) return false; if (dispatch) dispatch(state.tr.setSelection(TextSelection.create(state.doc, side < 0 ? $pos.start(depth) : $pos.end(depth)))); return true; }; } /** Moves the cursor to the start of current text block. */ const selectTextblockStart$1 = selectTextblockSide(-1); /** Moves the cursor to the end of current text block. */ const selectTextblockEnd$1 = selectTextblockSide(1); // Parameterized commands /** Wrap the selection in a node of the given type with the given attributes. */ function wrapIn$1(nodeType, attrs = null) { return function (state, dispatch) { let { $from, $to } = state.selection; let range = $from.blockRange($to), wrapping = range && findWrapping(range, nodeType, attrs); if (!wrapping) return false; if (dispatch) dispatch(state.tr.wrap(range, wrapping).scrollIntoView()); return true; }; } /** Returns a command that tries to set the selected textblocks to the given node type with the given attributes. */ function setBlockType(nodeType, attrs = null) { return function (state, dispatch) { let applicable = false; for (let i = 0; i < state.selection.ranges.length && !applicable; i++) { let { $from: { pos: from }, $to: { pos: to } } = state.selection.ranges[i]; state.doc.nodesBetween(from, to, (node, pos) => { if (applicable) return false; if (!node.isTextblock || node.hasMarkup(nodeType, attrs)) return; if (node.type == nodeType) { applicable = true; } else { let $pos = state.doc.resolve(pos), index = $pos.index(); applicable = $pos.parent.canReplaceWith(index, index + 1, nodeType); } }); } if (!applicable) return false; if (dispatch) { let tr = state.tr; for (let i = 0; i < state.selection.ranges.length; i++) { let { $from: { pos: from }, $to: { pos: to } } = state.selection.ranges[i]; tr.setBlockType(from, to, nodeType, attrs); } dispatch(tr.scrollIntoView()); } return true; }; } typeof navigator != "undefined" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform) // @ts-ignore : typeof os != "undefined" && os.platform ? os.platform() == "darwin" : false; /** Returns a command function that wraps the selection in a list with the given type an attributes. If `dispatch` is null, only return a value to indicate whether this is possible, but don't actually perform the change. */ function wrapInList$1(listType, attrs = null) { return function (state, dispatch) { let { $from, $to } = state.selection; let range = $from.blockRange($to), doJoin = false, outerRange = range; if (!range) return false; // This is at the top of an existing list item if (range.depth >= 2 && $from.node(range.depth - 1).type.compatibleContent(listType) && range.startIndex == 0) { // Don't do anything if this is the top of the list if ($from.index(range.depth - 1) == 0) return false; let $insert = state.doc.resolve(range.start - 2); outerRange = new NodeRange($insert, $insert, range.depth); if (range.endIndex < range.parent.childCount) range = new NodeRange($from, state.doc.resolve($to.end(range.depth)), range.depth); doJoin = true; } let wrap = findWrapping(outerRange, listType, attrs, range); if (!wrap) return false; if (dispatch) dispatch(doWrapInList(state.tr, range, wrap, doJoin, listType).scrollIntoView()); return true; }; } function doWrapInList(tr, range, wrappers, joinBefore, listType) { let content = Fragment.empty; for (let i = wrappers.length - 1; i >= 0; i--) content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content)); tr.step(new ReplaceAroundStep(range.start - (joinBefore ? 2 : 0), range.end, range.start, range.end, new Slice(content, 0, 0), wrappers.length, true)); let found = 0; for (let i = 0; i < wrappers.length; i++) if (wrappers[i].type == listType) found = i + 1; let splitDepth = wrappers.length - found; let splitPos = range.start + wrappers.length - (joinBefore ? 2 : 0), parent = range.parent; for (let i = range.startIndex, e = range.endIndex, first = true; i < e; i++, first = false) { if (!first && canSplit(tr.doc, splitPos, splitDepth)) { tr.split(splitPos, splitDepth); splitPos += 2 * splitDepth; } splitPos += parent.child(i).nodeSize; } return tr; } /** Create a command to lift the list item around the selection up into a wrapping list. */ function liftListItem$1(itemType) { return function (state, dispatch) { let { $from, $to } = state.selection; let range = $from.blockRange($to, node => node.childCount > 0 && node.firstChild.type == itemType); if (!range) return false; if (!dispatch) return true; if ($from.node(range.depth - 1).type == itemType) // Inside a parent list return liftToOuterList(state, dispatch, itemType, range);else // Outer list node return liftOutOfList(state, dispatch, range); }; } function liftToOuterList(state, dispatch, itemType, range) { let tr = state.tr, end = range.end, endOfList = range.$to.end(range.depth); if (end < endOfList) { // There are siblings after the lifted items, which must become // children of the last item tr.step(new ReplaceAroundStep(end - 1, endOfList, end, endOfList, new Slice(Fragment.from(itemType.create(null, range.parent.copy())), 1, 0), 1, true)); range = new NodeRange(tr.doc.resolve(range.$from.pos), tr.doc.resolve(endOfList), range.depth); } const target = liftTarget(range); if (target == null) return false; tr.lift(range, target); let after = tr.mapping.map(end, -1) - 1; if (canJoin(tr.doc, after)) tr.join(after); dispatch(tr.scrollIntoView()); return true; } function liftOutOfList(state, dispatch, range) { let tr = state.tr, list = range.parent; // Merge the list items into a single big item for (let pos = range.end, i = range.endIndex - 1, e = range.startIndex; i > e; i--) { pos -= list.child(i).nodeSize; tr.delete(pos - 1, pos + 1); } let $start = tr.doc.resolve(range.start), item = $start.nodeAfter; if (tr.mapping.map(range.end) != range.start + $start.nodeAfter.nodeSize) return false; let atStart = range.startIndex == 0, atEnd = range.endIndex == list.childCount; let parent = $start.node(-1), indexBefore = $start.index(-1); if (!parent.canReplace(indexBefore + (atStart ? 0 : 1), indexBefore + 1, item.content.append(atEnd ? Fragment.empty : Fragment.from(list)))) return false; let start = $start.pos, end = start + item.nodeSize; // Strip off the surrounding list. At the sides where we're not at // the end of the list, the existing list is closed. At sides where // this is the end, it is overwritten to its end. tr.step(new ReplaceAroundStep(start - (atStart ? 1 : 0), end + (atEnd ? 1 : 0), start + 1, end - 1, new Slice((atStart ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))).append(atEnd ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))), atStart ? 0 : 1, atEnd ? 0 : 1), atStart ? 0 : 1)); dispatch(tr.scrollIntoView()); return true; } /** Create a command to sink the list item around the selection down into an inner list. */ function sinkListItem$1(itemType) { return function (state, dispatch) { let { $from, $to } = state.selection; let range = $from.blockRange($to, node => node.childCount > 0 && node.firstChild.type == itemType); if (!range) return false; let startIndex = range.startIndex; if (startIndex == 0) return false; let parent = range.parent, nodeBefore = parent.child(startIndex - 1); if (nodeBefore.type != itemType) return false; if (dispatch) { let nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type == parent.type; let inner = Fragment.from(nestedBefore ? itemType.create() : null); let slice = new Slice(Fragment.from(itemType.create(null, Fragment.from(parent.type.create(null, inner)))), nestedBefore ? 3 : 1, 0); let before = range.start, after = range.end; dispatch(state.tr.step(new ReplaceAroundStep(before - (nestedBefore ? 3 : 1), after, before, after, slice, 1, true)).scrollIntoView()); } return true; }; } function createChainableState(config) { const { state, transaction } = config; let { selection } = transaction; let { doc } = transaction; let { storedMarks } = transaction; return { ...state, apply: state.apply.bind(state), applyTransaction: state.applyTransaction.bind(state), filterTransaction: state.filterTransaction, plugins: state.plugins, schema: state.schema, reconfigure: state.reconfigure.bind(state), toJSON: state.toJSON.bind(state), get storedMarks() { return storedMarks; }, get selection() { return selection; }, get doc() { return doc; }, get tr() { selection = transaction.selection; doc = transaction.doc; storedMarks = transaction.storedMarks; return transaction; } }; } class CommandManager { constructor(props) { this.editor = props.editor; this.rawCommands = this.editor.extensionManager.commands; this.customState = props.state; } get hasCustomState() { return !!this.customState; } get state() { return this.customState || this.editor.state; } get commands() { const { rawCommands, editor, state } = this; const { view } = editor; const { tr } = state; const props = this.buildProps(tr); return Object.fromEntries(Object.entries(rawCommands).map(([name, command]) => { const method = (...args) => { const callback = command(...args)(props); if (!tr.getMeta('preventDispatch') && !this.hasCustomState) { view.dispatch(tr); } return callback; }; return [name, method]; })); } get chain() { return () => this.createChain(); } get can() { return () => this.createCan(); } createChain(startTr, shouldDispatch = true) { const { rawCommands, editor, state } = this; const { view } = editor; const callbacks = []; const hasStartTransaction = !!startTr; const tr = startTr || state.tr; const run = () => { if (!hasStartTransaction && shouldDispatch && !tr.getMeta('preventDispatch') && !this.hasCustomState) { view.dispatch(tr); } return callbacks.every(callback => callback === true); }; const chain = { ...Object.fromEntries(Object.entries(rawCommands).map(([name, command]) => { const chainedCommand = (...args) => { const props = this.buildProps(tr, shouldDispatch); const callback = command(...args)(props); callbacks.push(callback); return chain; }; return [name, chainedCommand]; })), run }; return chain; } createCan(startTr) { const { rawCommands, state } = this; const dispatch = false; const tr = startTr || state.tr; const props = this.buildProps(tr, dispatch); const formattedCommands = Object.fromEntries(Object.entries(rawCommands).map(([name, command]) => { return [name, (...args) => command(...args)({ ...props, dispatch: undefined })]; })); return { ...formattedCommands, chain: () => this.createChain(tr, dispatch) }; } buildProps(tr, shouldDispatch = true) { const { rawCommands, editor, state } = this; const { view } = editor; const props = { tr, editor, view, state: createChainableState({ state, transaction: tr }), dispatch: shouldDispatch ? () => undefined : undefined, chain: () => this.createChain(tr, shouldDispatch), can: () => this.createCan(tr), get commands() { return Object.fromEntries(Object.entries(rawCommands).map(([name, command]) => { return [name, (...args) => command(...args)(props)]; })); } }; return props; } } class EventEmitter { constructor() { this.callbacks = {}; } on(event, fn) { if (!this.callbacks[event]) { this.callbacks[event] = []; } this.callbacks[event].push(fn); return this; } emit(event, ...args) { const callbacks = this.callbacks[event]; if (callbacks) { callbacks.forEach(callback => callback.apply(this, args)); } return this; } off(event, fn) { const callbacks = this.callbacks[event]; if (callbacks) { if (fn) { this.callbacks[event] = callbacks.filter(callback => callback !== fn); } else { delete this.callbacks[event]; } } return this; } removeAllListeners() { this.callbacks = {}; } } function getExtensionField(extension, field, context) { if (extension.config[field] === undefined && extension.parent) { return getExtensionField(extension.parent, field, context); } if (typeof extension.config[field] === 'function') { const value = extension.config[field].bind({ ...context, parent: extension.parent ? getExtensionField(extension.parent, field, context) : null }); return value; } return extension.config[field]; } function splitExtensions(extensions) { const baseExtensions = extensions.filter(extension => extension.type === 'extension'); const nodeExtensions = extensions.filter(extension => extension.type === 'node'); const markExtensions = extensions.filter(extension => extension.type === 'mark'); return { baseExtensions, nodeExtensions, markExtensions }; } /** * Get a list of all extension attributes defined in `addAttribute` and `addGlobalAttribute`. * @param extensions List of extensions */ function getAttributesFromExtensions(extensions) { const extensionAttributes = []; const { nodeExtensions, markExtensions } = splitExtensions(extensions); const nodeAndMarkExtensions = [...nodeExtensions, ...markExtensions]; const defaultAttribute = { default: null, rendered: true, renderHTML: null, parseHTML: null, keepOnSplit: true, isRequired: false }; extensions.forEach(extension => { const context = { name: extension.name, options: extension.options, storage: extension.storage }; const addGlobalAttributes = getExtensionField(extension, 'addGlobalAttributes', context); if (!addGlobalAttributes) { return; } // TODO: remove `as GlobalAttributes` const globalAttributes = addGlobalAttributes(); globalAttributes.forEach(globalAttribute => { globalAttribute.types.forEach(type => { Object.entries(globalAttribute.attributes).forEach(([name, attribute]) => { extensionAttributes.push({ type, name, attribute: { ...defaultAttribute, ...attribute } }); }); }); }); }); nodeAndMarkExtensions.forEach(extension => { const context = { name: extension.name, options: extension.options, storage: extension.storage }; const addAttributes = getExtensionField(extension, 'addAttributes', context); if (!addAttributes) { return; } // TODO: remove `as Attributes` const attributes = addAttributes(); Object.entries(attributes).forEach(([name, attribute]) => { const mergedAttr = { ...defaultAttribute, ...attribute }; if (typeof (mergedAttr === null || mergedAttr === void 0 ? void 0 : mergedAttr.default) === 'function') { mergedAttr.default = mergedAttr.default(); } if ((mergedAttr === null || mergedAttr === void 0 ? void 0 : mergedAttr.isRequired) && (mergedAttr === null || mergedAttr === void 0 ? void 0 : mergedAttr.default) === undefined) { delete mergedAttr.default; } extensionAttributes.push({ type: extension.name, name, attribute: mergedAttr }); }); }); return extensionAttributes; } function getNodeType(nameOrType, schema) { if (typeof nameOrType === 'string') { if (!schema.nodes[nameOrType]) { throw Error(`There is no node type named '${nameOrType}'. Maybe you forgot to add the extension?`); } return schema.nodes[nameOrType]; } return nameOrType; } function mergeAttributes(...objects) { return objects.filter(item => !!item).reduce((items, item) => { const mergedAttributes = { ...items }; Object.entries(item).forEach(([key, value]) => { const exists = mergedAttributes[key]; if (!exists) { mergedAttributes[key] = value; return; } if (key === 'class') { const valueClasses = value ? value.split(' ') : []; const existingClasses = mergedAttributes[key] ? mergedAttributes[key].split(' ') : []; const insertClasses = valueClasses.filter(valueClass => !existingClasses.includes(valueClass)); mergedAttributes[key] = [...existingClasses, ...insertClasses].join(' '); } else if (key === 'style') { mergedAttributes[key] = [mergedAttributes[key], value].join('; '); } else { mergedAttributes[key] = value; } }); return mergedAttributes; }, {}); } function getRenderedAttributes(nodeOrMark, extensionAttributes) { return extensionAttributes.filter(item => item.attribute.rendered).map(item => { if (!item.attribute.renderHTML) { return { [item.name]: nodeOrMark.attrs[item.name] }; } return item.attribute.renderHTML(nodeOrMark.attrs) || {}; }).reduce((attributes, attribute) => mergeAttributes(attributes, attribute), {}); } function isFunction$1(value) { return typeof value === 'function'; } /** * Optionally calls `value` as a function. * Otherwise it is returned directly. * @param value Function or any value. * @param context Optional context to bind to function. * @param props Optional props to pass to function. */ function callOrReturn(value, context = undefined, ...props) { if (isFunction$1(value)) { if (context) { return value.bind(context)(...props); } return value(...props); } return value; } function isEmptyObject(value = {}) { return Object.keys(value).length === 0 && value.constructor === Object; } function fromString(value) { if (typeof value !== 'string') { return value; } if (value.match(/^[+-]?(?:\d*\.)?\d+$/)) { return Number(value); } if (value === 'true') { return true; } if (value === 'false') { return false; } return value; } /** * This function merges extension attributes into parserule attributes (`attrs` or `getAttrs`). * Cancels when `getAttrs` returned `false`. * @param parseRule ProseMirror ParseRule * @param extensionAttributes List of attributes to inject */ function injectExtensionAttributesToParseRule(parseRule, extensionAttributes) { if (parseRule.style) { return parseRule; } return { ...parseRule, getAttrs: node => { const oldAttributes = parseRule.getAttrs ? parseRule.getAttrs(node) : parseRule.attrs; if (oldAttributes === false) { return false; } const newAttributes = extensionAttributes.reduce((items, item) => { const value = item.attribute.parseHTML ? item.attribute.parseHTML(node) : fromString(node.getAttribute(item.name)); if (value === null || value === undefined) { return items; } return { ...items, [item.name]: value }; }, {}); return { ...oldAttributes, ...newAttributes }; } }; } function cleanUpSchemaItem(data) { return Object.fromEntries( // @ts-ignore Object.entries(data).filter(([key, value]) => { if (key === 'attrs' && isEmptyObject(value)) { return false; } return value !== null && value !== undefined; })); } function getSchemaByResolvedExtensions(extensions, editor) { var _a; const allAttributes = getAttributesFromExtensions(extensions); const { nodeExtensions, markExtensions } = splitExtensions(extensions); const topNode = (_a = nodeExtensions.find(extension => getExtensionField(extension, 'topNode'))) === null || _a === void 0 ? void 0 : _a.name; const nodes = Object.fromEntries(nodeExtensions.map(extension => { const extensionAttributes = allAttributes.filter(attribute => attribute.type === extension.name); const context = { name: extension.name, options: extension.options, storage: extension.storage, editor }; const extraNodeFields = extensions.reduce((fields, e) => { const extendNodeSchema = getExtensionField(e, 'extendNodeSchema', context); return { ...fields, ...(extendNodeSchema ? extendNodeSchema(extension) : {}) }; }, {}); const schema = cleanUpSchemaItem({ ...extraNodeFields, content: callOrReturn(getExtensionField(extension, 'content', context)), marks: callOrReturn(getExtensionField(extension, 'marks', context)), group: callOrReturn(getExtensionField(extension, 'group', context)), inline: callOrReturn(getExtensionField(extension, 'inline', context)), atom: callOrReturn(getExtensionField(extension, 'atom', context)), selectable: callOrReturn(getExtensionField(extension, 'selectable', context)), draggable: callOrReturn(getExtensionField(extension, 'draggable', context)), code: callOrReturn(getExtensionField(extension, 'code', context)), defining: callOrReturn(getExtensionField(extension, 'defining', context)), isolating: callOrReturn(getExtensionField(extension, 'isolating', context)), attrs: Object.fromEntries(extensionAttributes.map(extensionAttribute => { var _a; return [extensionAttribute.name, { default: (_a = extensionAttribute === null || extensionAttribute === void 0 ? void 0 : extensionAttribute.attribute) === null || _a === void 0 ? void 0 : _a.default }]; })) }); const parseHTML = callOrReturn(getExtensionField(extension, 'parseHTML', context)); if (parseHTML) { schema.parseDOM = parseHTML.map(parseRule => injectExtensionAttributesToParseRule(parseRule, extensionAttributes)); } const renderHTML = getExtensionField(extension, 'renderHTML', context); if (renderHTML) { schema.toDOM = node => renderHTML({ node, HTMLAttributes: getRenderedAttributes(node, extensionAttributes) }); } const renderText = getExtensionField(extension, 'renderText', context); if (renderText) { schema.toText = renderText; } return [extension.name, schema]; })); const marks = Object.fromEntries(markExtensions.map(extension => { const extensionAttributes = allAttributes.filter(attribute => attribute.type === extension.name); const context = { name: extension.name, options: extension.options, storage: extension.storage, editor }; const extraMarkFields = extensions.reduce((fields, e) => { const extendMarkSchema = getExtensionField(e, 'extendMarkSchema', context); return { ...fields, ...(extendMarkSchema ? extendMarkSchema(extension) : {}) }; }, {}); const schema = cleanUpSchemaItem({ ...extraMarkFields, inclusive: callOrReturn(getExtensionField(extension, 'inclusive', context)), excludes: callOrReturn(getExtensionField(extension, 'excludes', context)), group: callOrReturn(getExtensionField(extension, 'group', context)), spanning: callOrReturn(getExtensionField(extension, 'spanning', context)), code: callOrReturn(getExtensionField(extension, 'code', context)), attrs: Object.fromEntries(extensionAttributes.map(extensionAttribute => { var _a; return [extensionAttribute.name, { default: (_a = extensionAttribute === null || extensionAttribute === void 0 ? void 0 : extensionAttribute.attribute) === null || _a === void 0 ? void 0 : _a.default }]; })) }); const parseHTML = callOrReturn(getExtensionField(extension, 'parseHTML', context)); if (parseHTML) { schema.parseDOM = parseHTML.map(parseRule => injectExtensionAttributesToParseRule(parseRule, extensionAttributes)); } const renderHTML = getExtensionField(extension, 'renderHTML', context); if (renderHTML) { schema.toDOM = mark => renderHTML({ mark, HTMLAttributes: getRenderedAttributes(mark, extensionAttributes) }); } return [extension.name, schema]; })); return new Schema({ topNode, nodes, marks }); } function getSchemaTypeByName(name, schema) { return schema.nodes[name] || schema.marks[name] || null; } function isExtensionRulesEnabled(extension, enabled) { if (Array.isArray(enabled)) { return enabled.some(enabledExtension => { const name = typeof enabledExtension === 'string' ? enabledExtension : enabledExtension.name; return name === extension.name; }); } return enabled; } const getTextContentFromNodes = ($from, maxMatch = 500) => { let textBefore = ''; const sliceEndPos = $from.parentOffset; $from.parent.nodesBetween(Math.max(0, sliceEndPos - maxMatch), sliceEndPos, (node, pos, parent, index) => { var _a, _b; const chunk = ((_b = (_a = node.type.spec).toText) === null || _b === void 0 ? void 0 : _b.call(_a, { node, pos, parent, index })) || node.textContent || '%leaf%'; textBefore += chunk.slice(0, Math.max(0, sliceEndPos - pos)); }); return textBefore; }; function isRegExp(value) { return Object.prototype.toString.call(value) === '[object RegExp]'; } class InputRule { constructor(config) { this.find = config.find; this.handler = config.handler; } } const inputRuleMatcherHandler = (text, find) => { if (isRegExp(find)) { return find.exec(text); } const inputRuleMatch = find(text); if (!inputRuleMatch) { return null; } const result = [inputRuleMatch.text]; result.index = inputRuleMatch.index; result.input = text; result.data = inputRuleMatch.data; if (inputRuleMatch.replaceWith) { if (!inputRuleMatch.text.includes(inputRuleMatch.replaceWith)) { console.warn('[tiptap warn]: "inputRuleMatch.replaceWith" must be part of "inputRuleMatch.text".'); } result.push(inputRuleMatch.replaceWith); } return result; }; function run$1$1(config) { var _a; const { editor, from, to, text, rules, plugin } = config; const { view } = editor; if (view.composing) { return false; } const $from = view.state.doc.resolve(from); if ( // check for code node $from.parent.type.spec.code // check for code mark || !!((_a = $from.nodeBefore || $from.nodeAfter) === null || _a === void 0 ? void 0 : _a.marks.find(mark => mark.type.spec.code))) { return false; } let matched = false; const textBefore = getTextContentFromNodes($from) + text; rules.forEach(rule => { if (matched) { return; } const match = inputRuleMatcherHandler(textBefore, rule.find); if (!match) { return; } const tr = view.state.tr; const state = createChainableState({ state: view.state, transaction: tr }); const range = { from: from - (match[0].length - text.length), to }; const { commands, chain, can } = new CommandManager({ editor, state }); const handler = rule.handler({ state, range, match, commands, chain, can }); // stop if there are no changes if (handler === null || !tr.steps.length) { return; } // store transform as meta data // so we can undo input rules within the `undoInputRules` command tr.setMeta(plugin, { transform: tr, from, to, text }); view.dispatch(tr); matched = true; }); return matched; } /** * Create an input rules plugin. When enabled, it will cause text * input that matches any of the given rules to trigger the rule’s * action. */ function inputRulesPlugin(props) { const { editor, rules } = props; const plugin = new Plugin({ state: { init() { return null; }, apply(tr, prev) { const stored = tr.getMeta(plugin); if (stored) { return stored; } return tr.selectionSet || tr.docChanged ? null : prev; } }, props: { handleTextInput(view, from, to, text) { return run$1$1({ editor, from, to, text, rules, plugin }); }, handleDOMEvents: { compositionend: view => { setTimeout(() => { const { $cursor } = view.state.selection; if ($cursor) { run$1$1({ editor, from: $cursor.pos, to: $cursor.pos, text: '', rules, plugin }); } }); return false; } }, // add support for input rules to trigger on enter // this is useful for example for code blocks handleKeyDown(view, event) { if (event.key !== 'Enter') { return false; } const { $cursor } = view.state.selection; if ($cursor) { return run$1$1({ editor, from: $cursor.pos, to: $cursor.pos, text: '\n', rules, plugin }); } return false; } }, // @ts-ignore isInputRules: true }); return plugin; } function isNumber(value) { return typeof value === 'number'; } class PasteRule { constructor(config) { this.find = config.find; this.handler = config.handler; } } const pasteRuleMatcherHandler = (text, find) => { if (isRegExp(find)) { return [...text.matchAll(find)]; } const matches = find(text); if (!matches) { return []; } return matches.map(pasteRuleMatch => { const result = [pasteRuleMatch.text]; result.index = pasteRuleMatch.index; result.input = text; result.data = pasteRuleMatch.data; if (pasteRuleMatch.replaceWith) { if (!pasteRuleMatch.text.includes(pasteRuleMatch.replaceWith)) { console.warn('[tiptap warn]: "pasteRuleMatch.replaceWith" must be part of "pasteRuleMatch.text".'); } result.push(pasteRuleMatch.replaceWith); } return result; }); }; function run$2(config) { const { editor, state, from, to, rule, pasteEvent, dropEvent } = config; const { commands, chain, can } = new CommandManager({ editor, state }); const handlers = []; state.doc.nodesBetween(from, to, (node, pos) => { if (!node.isTextblock || node.type.spec.code) { return; } const resolvedFrom = Math.max(from, pos); const resolvedTo = Math.min(to, pos + node.content.size); const textToMatch = node.textBetween(resolvedFrom - pos, resolvedTo - pos, undefined, '\ufffc'); const matches = pasteRuleMatcherHandler(textToMatch, rule.find); matches.forEach(match => { if (match.index === undefined) { return; } const start = resolvedFrom + match.index + 1; const end = start + match[0].length; const range = { from: state.tr.mapping.map(start), to: state.tr.mapping.map(end) }; const handler = rule.handler({ state, range, match, commands, chain, can, pasteEvent, dropEvent }); handlers.push(handler); }); }); const success = handlers.every(handler => handler !== null); return success; } /** * Create an paste rules plugin. When enabled, it will cause pasted * text that matches any of the given rules to trigger the rule’s * action. */ function pasteRulesPlugin(props) { const { editor, rules } = props; let dragSourceElement = null; let isPastedFromProseMirror = false; let isDroppedFromProseMirror = false; let pasteEvent = new ClipboardEvent('paste'); let dropEvent = new DragEvent('drop'); const plugins = rules.map(rule => { return new Plugin({ // we register a global drag handler to track the current drag source element view(view) { const handleDragstart = event => { var _a; dragSourceElement = ((_a = view.dom.parentElement) === null || _a === void 0 ? void 0 : _a.contains(event.target)) ? view.dom.parentElement : null; }; window.addEventListener('dragstart', handleDragstart); return { destroy() { window.removeEventListener('dragstart', handleDragstart); } }; }, props: { handleDOMEvents: { drop: (view, event) => { isDroppedFromProseMirror = dragSourceElement === view.dom.parentElement; dropEvent = event; return false; }, paste: (_view, event) => { var _a; const html = (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.getData('text/html'); pasteEvent = event; isPastedFromProseMirror = !!(html === null || html === void 0 ? void 0 : html.includes('data-pm-slice')); return false; } } }, appendTransaction: (transactions, oldState, state) => { const transaction = transactions[0]; const isPaste = transaction.getMeta('uiEvent') === 'paste' && !isPastedFromProseMirror; const isDrop = transaction.getMeta('uiEvent') === 'drop' && !isDroppedFromProseMirror; if (!isPaste && !isDrop) { return; } // stop if there is no changed range const from = oldState.doc.content.findDiffStart(state.doc.content); const to = oldState.doc.content.findDiffEnd(state.doc.content); if (!isNumber(from) || !to || from === to.b) { return; } // build a chainable state // so we can use a single transaction for all paste rules const tr = state.tr; const chainableState = createChainableState({ state, transaction: tr }); const handler = run$2({ editor, state: chainableState, from: Math.max(from - 1, 0), to: to.b - 1, rule, pasteEvent, dropEvent }); // stop if there are no changes if (!handler || !tr.steps.length) { return; } dropEvent = new DragEvent('drop'); pasteEvent = new ClipboardEvent('paste'); return tr; } }); }); return plugins; } function findDuplicates(items) { const filtered = items.filter((el, index) => items.indexOf(el) !== index); return [...new Set(filtered)]; } class ExtensionManager { constructor(extensions, editor) { this.splittableMarks = []; this.editor = editor; this.extensions = ExtensionManager.resolve(extensions); this.schema = getSchemaByResolvedExtensions(this.extensions, editor); this.extensions.forEach(extension => { var _a; // store extension storage in editor this.editor.extensionStorage[extension.name] = extension.storage; const context = { name: extension.name, options: extension.options, storage: extension.storage, editor: this.editor, type: getSchemaTypeByName(extension.name, this.schema) }; if (extension.type === 'mark') { const keepOnSplit = (_a = callOrReturn(getExtensionField(extension, 'keepOnSplit', context))) !== null && _a !== void 0 ? _a : true; if (keepOnSplit) { this.splittableMarks.push(extension.name); } } const onBeforeCreate = getExtensionField(extension, 'onBeforeCreate', context); if (onBeforeCreate) { this.editor.on('beforeCreate', onBeforeCreate); } const onCreate = getExtensionField(extension, 'onCreate', context); if (onCreate) { this.editor.on('create', onCreate); } const onUpdate = getExtensionField(extension, 'onUpdate', context); if (onUpdate) { this.editor.on('update', onUpdate); } const onSelectionUpdate = getExtensionField(extension, 'onSelectionUpdate', context); if (onSelectionUpdate) { this.editor.on('selectionUpdate', onSelectionUpdate); } const onTransaction = getExtensionField(extension, 'onTransaction', context); if (onTransaction) { this.editor.on('transaction', onTransaction); } const onFocus = getExtensionField(extension, 'onFocus', context); if (onFocus) { this.editor.on('focus', onFocus); } const onBlur = getExtensionField(extension, 'onBlur', context); if (onBlur) { this.editor.on('blur', onBlur); } const onDestroy = getExtensionField(extension, 'onDestroy', context); if (onDestroy) { this.editor.on('destroy', onDestroy); } }); } static resolve(extensions) { const resolvedExtensions = ExtensionManager.sort(ExtensionManager.flatten(extensions)); const duplicatedNames = findDuplicates(resolvedExtensions.map(extension => extension.name)); if (duplicatedNames.length) { console.warn(`[tiptap warn]: Duplicate extension names found: [${duplicatedNames.map(item => `'${item}'`).join(', ')}]. This can lead to issues.`); } return resolvedExtensions; } static flatten(extensions) { return extensions.map(extension => { const context = { name: extension.name, options: extension.options, storage: extension.storage }; const addExtensions = getExtensionField(extension, 'addExtensions', context); if (addExtensions) { return [extension, ...this.flatten(addExtensions())]; } return extension; }) // `Infinity` will break TypeScript so we set a number that is probably high enough .flat(10); } static sort(extensions) { const defaultPriority = 100; return extensions.sort((a, b) => { const priorityA = getExtensionField(a, 'priority') || defaultPriority; const priorityB = getExtensionField(b, 'priority') || defaultPriority; if (priorityA > priorityB) { return -1; } if (priorityA < priorityB) { return 1; } return 0; }); } get commands() { return this.extensions.reduce((commands, extension) => { const context = { name: extension.name, options: extension.options, storage: extension.storage, editor: this.editor, type: getSchemaTypeByName(extension.name, this.schema) }; const addCommands = getExtensionField(extension, 'addCommands', context); if (!addCommands) { return commands; } return { ...commands, ...addCommands() }; }, {}); } get plugins() { const { editor } = this; // With ProseMirror, first plugins within an array are executed first. // In Tiptap, we provide the ability to override plugins, // so it feels more natural to run plugins at the end of an array first. // That’s why we have to reverse the `extensions` array and sort again // based on the `priority` option. const extensions = ExtensionManager.sort([...this.extensions].reverse()); const inputRules = []; const pasteRules = []; const allPlugins = extensions.map(extension => { const context = { name: extension.name, options: extension.options, storage: extension.storage, editor, type: getSchemaTypeByName(extension.name, this.schema) }; const plugins = []; const addKeyboardShortcuts = getExtensionField(extension, 'addKeyboardShortcuts', context); let defaultBindings = {}; // bind exit handling if (extension.type === 'mark' && extension.config.exitable) { defaultBindings.ArrowRight = () => Mark.handleExit({ editor, mark: extension }); } if (addKeyboardShortcuts) { const bindings = Object.fromEntries(Object.entries(addKeyboardShortcuts()).map(([shortcut, method]) => { return [shortcut, () => method({ editor })]; })); defaultBindings = { ...defaultBindings, ...bindings }; } const keyMapPlugin = keymap(defaultBindings); plugins.push(keyMapPlugin); const addInputRules = getExtensionField(extension, 'addInputRules', context); if (isExtensionRulesEnabled(extension, editor.options.enableInputRules) && addInputRules) { inputRules.push(...addInputRules()); } const addPasteRules = getExtensionField(extension, 'addPasteRules', context); if (isExtensionRulesEnabled(extension, editor.options.enablePasteRules) && addPasteRules) { pasteRules.push(...addPasteRules()); } const addProseMirrorPlugins = getExtensionField(extension, 'addProseMirrorPlugins', context); if (addProseMirrorPlugins) { const proseMirrorPlugins = addProseMirrorPlugins(); plugins.push(...proseMirrorPlugins); } return plugins; }).flat(); return [inputRulesPlugin({ editor, rules: inputRules }), ...pasteRulesPlugin({ editor, rules: pasteRules }), ...allPlugins]; } get attributes() { return getAttributesFromExtensions(this.extensions); } get nodeViews() { const { editor } = this; const { nodeExtensions } = splitExtensions(this.extensions); return Object.fromEntries(nodeExtensions.filter(extension => !!getExtensionField(extension, 'addNodeView')).map(extension => { const extensionAttributes = this.attributes.filter(attribute => attribute.type === extension.name); const context = { name: extension.name, options: extension.options, storage: extension.storage, editor, type: getNodeType(extension.name, this.schema) }; const addNodeView = getExtensionField(extension, 'addNodeView', context); if (!addNodeView) { return []; } const nodeview = (node, view, getPos, decorations) => { const HTMLAttributes = getRenderedAttributes(node, extensionAttributes); return addNodeView()({ editor, node, getPos, decorations, HTMLAttributes, extension }); }; return [extension.name, nodeview]; })); } } // see: https://github.com/mesqueeb/is-what/blob/88d6e4ca92fb2baab6003c54e02eedf4e729e5ab/src/index.ts function getType(value) { return Object.prototype.toString.call(value).slice(8, -1); } function isPlainObject(value) { if (getType(value) !== 'Object') { return false; } return value.constructor === Object && Object.getPrototypeOf(value) === Object.prototype; } function mergeDeep(target, source) { const output = { ...target }; if (isPlainObject(target) && isPlainObject(source)) { Object.keys(source).forEach(key => { if (isPlainObject(source[key])) { if (!(key in target)) { Object.assign(output, { [key]: source[key] }); } else { output[key] = mergeDeep(target[key], source[key]); } } else { Object.assign(output, { [key]: source[key] }); } }); } return output; } class Extension { constructor(config = {}) { this.type = 'extension'; this.name = 'extension'; this.parent = null; this.child = null; this.config = { name: this.name, defaultOptions: {} }; this.config = { ...this.config, ...config }; this.name = this.config.name; if (config.defaultOptions) { console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${this.name}".`); } // TODO: remove `addOptions` fallback this.options = this.config.defaultOptions; if (this.config.addOptions) { this.options = callOrReturn(getExtensionField(this, 'addOptions', { name: this.name })); } this.storage = callOrReturn(getExtensionField(this, 'addStorage', { name: this.name, options: this.options })) || {}; } static create(config = {}) { return new Extension(config); } configure(options = {}) { // return a new instance so we can use the same extension // with different calls of `configure` const extension = this.extend(); extension.options = mergeDeep(this.options, options); extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', { name: extension.name, options: extension.options })); return extension; } extend(extendedConfig = {}) { const extension = new Extension(extendedConfig); extension.parent = this; this.child = extension; extension.name = extendedConfig.name ? extendedConfig.name : extension.parent.name; if (extendedConfig.defaultOptions) { console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${extension.name}".`); } extension.options = callOrReturn(getExtensionField(extension, 'addOptions', { name: extension.name })); extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', { name: extension.name, options: extension.options })); return extension; } } function getTextBetween(startNode, range, options) { const { from, to } = range; const { blockSeparator = '\n\n', textSerializers = {} } = options || {}; let text = ''; let separated = true; startNode.nodesBetween(from, to, (node, pos, parent, index) => { var _a; const textSerializer = textSerializers === null || textSerializers === void 0 ? void 0 : textSerializers[node.type.name]; if (textSerializer) { if (node.isBlock && !separated) { text += blockSeparator; separated = true; } if (parent) { text += textSerializer({ node, pos, parent, index, range }); } } else if (node.isText) { text += (_a = node === null || node === void 0 ? void 0 : node.text) === null || _a === void 0 ? void 0 : _a.slice(Math.max(from, pos) - pos, to - pos); // eslint-disable-line separated = false; } else if (node.isBlock && !separated) { text += blockSeparator; separated = true; } }); return text; } function getTextSerializersFromSchema(schema) { return Object.fromEntries(Object.entries(schema.nodes).filter(([, node]) => node.spec.toText).map(([name, node]) => [name, node.spec.toText])); } const ClipboardTextSerializer = Extension.create({ name: 'clipboardTextSerializer', addProseMirrorPlugins() { return [new Plugin({ key: new PluginKey('clipboardTextSerializer'), props: { clipboardTextSerializer: () => { const { editor } = this; const { state, schema } = editor; const { doc, selection } = state; const { ranges } = selection; const from = Math.min(...ranges.map(range => range.$from.pos)); const to = Math.max(...ranges.map(range => range.$to.pos)); const textSerializers = getTextSerializersFromSchema(schema); const range = { from, to }; return getTextBetween(doc, range, { textSerializers }); } } })]; } }); const blur = () => ({ editor, view }) => { requestAnimationFrame(() => { var _a; if (!editor.isDestroyed) { view.dom.blur(); // Browsers should remove the caret on blur but safari does not. // See: https://github.com/ueberdosis/tiptap/issues/2405 (_a = window === null || window === void 0 ? void 0 : window.getSelection()) === null || _a === void 0 ? void 0 : _a.removeAllRanges(); } }); return true; }; const clearContent = (emitUpdate = false) => ({ commands }) => { return commands.setContent('', emitUpdate); }; const clearNodes = () => ({ state, tr, dispatch }) => { const { selection } = tr; const { ranges } = selection; if (!dispatch) { return true; } ranges.forEach(({ $from, $to }) => { state.doc.nodesBetween($from.pos, $to.pos, (node, pos) => { if (node.type.isText) { return; } const { doc, mapping } = tr; const $mappedFrom = doc.resolve(mapping.map(pos)); const $mappedTo = doc.resolve(mapping.map(pos + node.nodeSize)); const nodeRange = $mappedFrom.blockRange($mappedTo); if (!nodeRange) { return; } const targetLiftDepth = liftTarget(nodeRange); if (node.type.isTextblock) { const { defaultType } = $mappedFrom.parent.contentMatchAt($mappedFrom.index()); tr.setNodeMarkup(nodeRange.start, defaultType); } if (targetLiftDepth || targetLiftDepth === 0) { tr.lift(nodeRange, targetLiftDepth); } }); }); return true; }; const command = fn => props => { return fn(props); }; const createParagraphNear = () => ({ state, dispatch }) => { return createParagraphNear$1(state, dispatch); }; const cut = (originRange, targetPos) => ({ editor, tr }) => { const { state } = editor; const contentSlice = state.doc.slice(originRange.from, originRange.to); tr.deleteRange(originRange.from, originRange.to); const newPos = tr.mapping.map(targetPos); tr.insert(newPos, contentSlice.content); tr.setSelection(new TextSelection(tr.doc.resolve(newPos - 1))); return true; }; const deleteCurrentNode = () => ({ tr, dispatch }) => { const { selection } = tr; const currentNode = selection.$anchor.node(); // if there is content inside the current node, break out of this command if (currentNode.content.size > 0) { return false; } const $pos = tr.selection.$anchor; for (let depth = $pos.depth; depth > 0; depth -= 1) { const node = $pos.node(depth); if (node.type === currentNode.type) { if (dispatch) { const from = $pos.before(depth); const to = $pos.after(depth); tr.delete(from, to).scrollIntoView(); } return true; } } return false; }; const deleteNode = typeOrName => ({ tr, state, dispatch }) => { const type = getNodeType(typeOrName, state.schema); const $pos = tr.selection.$anchor; for (let depth = $pos.depth; depth > 0; depth -= 1) { const node = $pos.node(depth); if (node.type === type) { if (dispatch) { const from = $pos.before(depth); const to = $pos.after(depth); tr.delete(from, to).scrollIntoView(); } return true; } } return false; }; const deleteRange = range => ({ tr, dispatch }) => { const { from, to } = range; if (dispatch) { tr.delete(from, to); } return true; }; const deleteSelection = () => ({ state, dispatch }) => { return deleteSelection$1(state, dispatch); }; const enter = () => ({ commands }) => { return commands.keyboardShortcut('Enter'); }; const exitCode = () => ({ state, dispatch }) => { return exitCode$1(state, dispatch); }; /** * Check if object1 includes object2 * @param object1 Object * @param object2 Object */ function objectIncludes(object1, object2, options = { strict: true }) { const keys = Object.keys(object2); if (!keys.length) { return true; } return keys.every(key => { if (options.strict) { return object2[key] === object1[key]; } if (isRegExp(object2[key])) { return object2[key].test(object1[key]); } return object2[key] === object1[key]; }); } function findMarkInSet(marks, type, attributes = {}) { return marks.find(item => { return item.type === type && objectIncludes(item.attrs, attributes); }); } function isMarkInSet(marks, type, attributes = {}) { return !!findMarkInSet(marks, type, attributes); } function getMarkRange($pos, type, attributes = {}) { if (!$pos || !type) { return; } let start = $pos.parent.childAfter($pos.parentOffset); if ($pos.parentOffset === start.offset && start.offset !== 0) { start = $pos.parent.childBefore($pos.parentOffset); } if (!start.node) { return; } const mark = findMarkInSet([...start.node.marks], type, attributes); if (!mark) { return; } let startIndex = start.index; let startPos = $pos.start() + start.offset; let endIndex = startIndex + 1; let endPos = startPos + start.node.nodeSize; findMarkInSet([...start.node.marks], type, attributes); while (startIndex > 0 && mark.isInSet($pos.parent.child(startIndex - 1).marks)) { startIndex -= 1; startPos -= $pos.parent.child(startIndex).nodeSize; } while (endIndex < $pos.parent.childCount && isMarkInSet([...$pos.parent.child(endIndex).marks], type, attributes)) { endPos += $pos.parent.child(endIndex).nodeSize; endIndex += 1; } return { from: startPos, to: endPos }; } function getMarkType(nameOrType, schema) { if (typeof nameOrType === 'string') { if (!schema.marks[nameOrType]) { throw Error(`There is no mark type named '${nameOrType}'. Maybe you forgot to add the extension?`); } return schema.marks[nameOrType]; } return nameOrType; } const extendMarkRange = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => { const type = getMarkType(typeOrName, state.schema); const { doc, selection } = tr; const { $from, from, to } = selection; if (dispatch) { const range = getMarkRange($from, type, attributes); if (range && range.from <= from && range.to >= to) { const newSelection = TextSelection.create(doc, range.from, range.to); tr.setSelection(newSelection); } } return true; }; const first = commands => props => { const items = typeof commands === 'function' ? commands(props) : commands; for (let i = 0; i < items.length; i += 1) { if (items[i](props)) { return true; } } return false; }; function isTextSelection(value) { return value instanceof TextSelection; } function minMax(value = 0, min = 0, max = 0) { return Math.min(Math.max(value, min), max); } function resolveFocusPosition(doc, position = null) { if (!position) { return null; } const selectionAtStart = Selection.atStart(doc); const selectionAtEnd = Selection.atEnd(doc); if (position === 'start' || position === true) { return selectionAtStart; } if (position === 'end') { return selectionAtEnd; } const minPos = selectionAtStart.from; const maxPos = selectionAtEnd.to; if (position === 'all') { return TextSelection.create(doc, minMax(0, minPos, maxPos), minMax(doc.content.size, minPos, maxPos)); } return TextSelection.create(doc, minMax(position, minPos, maxPos), minMax(position, minPos, maxPos)); } function isiOS() { return ['iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod'].includes(navigator.platform) // iPad on iOS 13 detection || navigator.userAgent.includes('Mac') && 'ontouchend' in document; } const focus = (position = null, options = {}) => ({ editor, view, tr, dispatch }) => { options = { scrollIntoView: true, ...options }; const delayedFocus = () => { // focus within `requestAnimationFrame` breaks focus on iOS // so we have to call this if (isiOS()) { view.dom.focus(); } // For React we have to focus asynchronously. Otherwise wild things happen. // see: https://github.com/ueberdosis/tiptap/issues/1520 requestAnimationFrame(() => { if (!editor.isDestroyed) { view.focus(); if (options === null || options === void 0 ? void 0 : options.scrollIntoView) { editor.commands.scrollIntoView(); } } }); }; if (view.hasFocus() && position === null || position === false) { return true; } // we don’t try to resolve a NodeSelection or CellSelection if (dispatch && position === null && !isTextSelection(editor.state.selection)) { delayedFocus(); return true; } // pass through tr.doc instead of editor.state.doc // since transactions could change the editors state before this command has been run const selection = resolveFocusPosition(tr.doc, position) || editor.state.selection; const isSameSelection = editor.state.selection.eq(selection); if (dispatch) { if (!isSameSelection) { tr.setSelection(selection); } // `tr.setSelection` resets the stored marks // so we’ll restore them if the selection is the same as before if (isSameSelection && tr.storedMarks) { tr.setStoredMarks(tr.storedMarks); } delayedFocus(); } return true; }; const forEach = (items, fn) => props => { return items.every((item, index) => fn(item, { ...props, index })); }; const insertContent = (value, options) => ({ tr, commands }) => { return commands.insertContentAt({ from: tr.selection.from, to: tr.selection.to }, value, options); }; function elementFromString(value) { // add a wrapper to preserve leading and trailing whitespace const wrappedValue = `<body>${value}</body>`; return new window.DOMParser().parseFromString(wrappedValue, 'text/html').body; } function createNodeFromContent(content, schema, options) { options = { slice: true, parseOptions: {}, ...options }; if (typeof content === 'object' && content !== null) { try { if (Array.isArray(content) && content.length > 0) { return Fragment.fromArray(content.map(item => schema.nodeFromJSON(item))); } return schema.nodeFromJSON(content); } catch (error) { console.warn('[tiptap warn]: Invalid content.', 'Passed value:', content, 'Error:', error); return createNodeFromContent('', schema, options); } } if (typeof content === 'string') { const parser = DOMParser.fromSchema(schema); return options.slice ? parser.parseSlice(elementFromString(content), options.parseOptions).content : parser.parse(elementFromString(content), options.parseOptions); } return createNodeFromContent('', schema, options); } // source: https://github.com/ProseMirror/prosemirror-state/blob/master/src/selection.js#L466 function selectionToInsertionEnd(tr, startLen, bias) { const last = tr.steps.length - 1; if (last < startLen) { return; } const step = tr.steps[last]; if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep)) { return; } const map = tr.mapping.maps[last]; let end = 0; map.forEach((_from, _to, _newFrom, newTo) => { if (end === 0) { end = newTo; } }); tr.setSelection(Selection.near(tr.doc.resolve(end), bias)); } const isFragment = nodeOrFragment => { return nodeOrFragment.toString().startsWith('<'); }; const insertContentAt = (position, value, options) => ({ tr, dispatch, editor }) => { if (dispatch) { options = { parseOptions: {}, updateSelection: true, ...options }; const content = createNodeFromContent(value, editor.schema, { parseOptions: { preserveWhitespace: 'full', ...options.parseOptions } }); // don’t dispatch an empty fragment because this can lead to strange errors if (content.toString() === '<>') { return true; } let { from, to } = typeof position === 'number' ? { from: position, to: position } : { from: position.from, to: position.to }; let isOnlyTextContent = true; let isOnlyBlockContent = true; const nodes = isFragment(content) ? content : [content]; nodes.forEach(node => { // check if added node is valid node.check(); isOnlyTextContent = isOnlyTextContent ? node.isText && node.marks.length === 0 : false; isOnlyBlockContent = isOnlyBlockContent ? node.isBlock : false; }); // check if we can replace the wrapping node by // the newly inserted content // example: // replace an empty paragraph by an inserted image // instead of inserting the image below the paragraph if (from === to && isOnlyBlockContent) { const { parent } = tr.doc.resolve(from); const isEmptyTextBlock = parent.isTextblock && !parent.type.spec.code && !parent.childCount; if (isEmptyTextBlock) { from -= 1; to += 1; } } // if there is only plain text we have to use `insertText` // because this will keep the current marks if (isOnlyTextContent) { // if value is string, we can use it directly // otherwise if it is an array, we have to join it if (Array.isArray(value)) { tr.insertText(value.map(v => v.text || '').join(''), from, to); } else if (typeof value === 'object' && !!value && !!value.text) { tr.insertText(value.text, from, to); } else { tr.insertText(value, from, to); } } else { tr.replaceWith(from, to, content); } // set cursor at end of inserted content if (options.updateSelection) { selectionToInsertionEnd(tr, tr.steps.length - 1, -1); } } return true; }; const joinUp = () => ({ state, dispatch }) => { return joinUp$1(state, dispatch); }; const joinDown = () => ({ state, dispatch }) => { return joinDown$1(state, dispatch); }; const joinBackward = () => ({ state, dispatch }) => { return joinBackward$1(state, dispatch); }; const joinForward = () => ({ state, dispatch }) => { return joinForward$1(state, dispatch); }; const joinItemBackward = () => ({ tr, state, dispatch }) => { try { const point = joinPoint(state.doc, state.selection.$from.pos, -1); if (point === null || point === undefined) { return false; } tr.join(point, 2); if (dispatch) { dispatch(tr); } return true; } catch { return false; } }; const joinItemForward = () => ({ state, dispatch, tr }) => { try { const point = joinPoint(state.doc, state.selection.$from.pos, +1); if (point === null || point === undefined) { return false; } tr.join(point, 2); if (dispatch) { dispatch(tr); } return true; } catch (e) { return false; } }; function isMacOS() { return typeof navigator !== 'undefined' ? /Mac/.test(navigator.platform) : false; } function normalizeKeyName(name) { const parts = name.split(/-(?!$)/); let result = parts[parts.length - 1]; if (result === 'Space') { result = ' '; } let alt; let ctrl; let shift; let meta; for (let i = 0; i < parts.length - 1; i += 1) { const mod = parts[i]; if (/^(cmd|meta|m)$/i.test(mod)) { meta = true; } else if (/^a(lt)?$/i.test(mod)) { alt = true; } else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; } else if (/^s(hift)?$/i.test(mod)) { shift = true; } else if (/^mod$/i.test(mod)) { if (isiOS() || isMacOS()) { meta = true; } else { ctrl = true; } } else { throw new Error(`Unrecognized modifier name: ${mod}`); } } if (alt) { result = `Alt-${result}`; } if (ctrl) { result = `Ctrl-${result}`; } if (meta) { result = `Meta-${result}`; } if (shift) { result = `Shift-${result}`; } return result; } const keyboardShortcut = name => ({ editor, view, tr, dispatch }) => { const keys = normalizeKeyName(name).split(/-(?!$)/); const key = keys.find(item => !['Alt', 'Ctrl', 'Meta', 'Shift'].includes(item)); const event = new KeyboardEvent('keydown', { key: key === 'Space' ? ' ' : key, altKey: keys.includes('Alt'), ctrlKey: keys.includes('Ctrl'), metaKey: keys.includes('Meta'), shiftKey: keys.includes('Shift'), bubbles: true, cancelable: true }); const capturedTransaction = editor.captureTransaction(() => { view.someProp('handleKeyDown', f => f(view, event)); }); capturedTransaction === null || capturedTransaction === void 0 ? void 0 : capturedTransaction.steps.forEach(step => { const newStep = step.map(tr.mapping); if (newStep && dispatch) { tr.maybeStep(newStep); } }); return true; }; function isNodeActive(state, typeOrName, attributes = {}) { const { from, to, empty } = state.selection; const type = typeOrName ? getNodeType(typeOrName, state.schema) : null; const nodeRanges = []; state.doc.nodesBetween(from, to, (node, pos) => { if (node.isText) { return; } const relativeFrom = Math.max(from, pos); const relativeTo = Math.min(to, pos + node.nodeSize); nodeRanges.push({ node, from: relativeFrom, to: relativeTo }); }); const selectionRange = to - from; const matchedNodeRanges = nodeRanges.filter(nodeRange => { if (!type) { return true; } return type.name === nodeRange.node.type.name; }).filter(nodeRange => objectIncludes(nodeRange.node.attrs, attributes, { strict: false })); if (empty) { return !!matchedNodeRanges.length; } const range = matchedNodeRanges.reduce((sum, nodeRange) => sum + nodeRange.to - nodeRange.from, 0); return range >= selectionRange; } const lift = (typeOrName, attributes = {}) => ({ state, dispatch }) => { const type = getNodeType(typeOrName, state.schema); const isActive = isNodeActive(state, type, attributes); if (!isActive) { return false; } return lift$1(state, dispatch); }; const liftEmptyBlock = () => ({ state, dispatch }) => { return liftEmptyBlock$1(state, dispatch); }; const liftListItem = typeOrName => ({ state, dispatch }) => { const type = getNodeType(typeOrName, state.schema); return liftListItem$1(type)(state, dispatch); }; const newlineInCode = () => ({ state, dispatch }) => { return newlineInCode$1(state, dispatch); }; function getSchemaTypeNameByName(name, schema) { if (schema.nodes[name]) { return 'node'; } if (schema.marks[name]) { return 'mark'; } return null; } /** * Remove a property or an array of properties from an object * @param obj Object * @param key Key to remove */ function deleteProps(obj, propOrProps) { const props = typeof propOrProps === 'string' ? [propOrProps] : propOrProps; return Object.keys(obj).reduce((newObj, prop) => { if (!props.includes(prop)) { newObj[prop] = obj[prop]; } return newObj; }, {}); } const resetAttributes = (typeOrName, attributes) => ({ tr, state, dispatch }) => { let nodeType = null; let markType = null; const schemaType = getSchemaTypeNameByName(typeof typeOrName === 'string' ? typeOrName : typeOrName.name, state.schema); if (!schemaType) { return false; } if (schemaType === 'node') { nodeType = getNodeType(typeOrName, state.schema); } if (schemaType === 'mark') { markType = getMarkType(typeOrName, state.schema); } if (dispatch) { tr.selection.ranges.forEach(range => { state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node, pos) => { if (nodeType && nodeType === node.type) { tr.setNodeMarkup(pos, undefined, deleteProps(node.attrs, attributes)); } if (markType && node.marks.length) { node.marks.forEach(mark => { if (markType === mark.type) { tr.addMark(pos, pos + node.nodeSize, markType.create(deleteProps(mark.attrs, attributes))); } }); } }); }); } return true; }; const scrollIntoView$1 = () => ({ tr, dispatch }) => { if (dispatch) { tr.scrollIntoView(); } return true; }; const selectAll = () => ({ tr, commands }) => { return commands.setTextSelection({ from: 0, to: tr.doc.content.size }); }; const selectNodeBackward = () => ({ state, dispatch }) => { return selectNodeBackward$1(state, dispatch); }; const selectNodeForward = () => ({ state, dispatch }) => { return selectNodeForward$1(state, dispatch); }; const selectParentNode = () => ({ state, dispatch }) => { return selectParentNode$1(state, dispatch); }; // @ts-ignore const selectTextblockEnd = () => ({ state, dispatch }) => { return selectTextblockEnd$1(state, dispatch); }; // @ts-ignore const selectTextblockStart = () => ({ state, dispatch }) => { return selectTextblockStart$1(state, dispatch); }; function createDocument(content, schema, parseOptions = {}) { return createNodeFromContent(content, schema, { slice: false, parseOptions }); } const setContent = (content, emitUpdate = false, parseOptions = {}) => ({ tr, editor, dispatch }) => { const { doc } = tr; const document = createDocument(content, editor.schema, parseOptions); if (dispatch) { tr.replaceWith(0, doc.content.size, document).setMeta('preventUpdate', !emitUpdate); } return true; }; function getMarkAttributes(state, typeOrName) { const type = getMarkType(typeOrName, state.schema); const { from, to, empty } = state.selection; const marks = []; if (empty) { if (state.storedMarks) { marks.push(...state.storedMarks); } marks.push(...state.selection.$head.marks()); } else { state.doc.nodesBetween(from, to, node => { marks.push(...node.marks); }); } const mark = marks.find(markItem => markItem.type.name === type.name); if (!mark) { return {}; } return { ...mark.attrs }; } /** * Returns a new `Transform` based on all steps of the passed transactions. */ function combineTransactionSteps(oldDoc, transactions) { const transform = new Transform(oldDoc); transactions.forEach(transaction => { transaction.steps.forEach(step => { transform.step(step); }); }); return transform; } function defaultBlockAt(match) { for (let i = 0; i < match.edgeCount; i += 1) { const { type } = match.edge(i); if (type.isTextblock && !type.hasRequiredAttrs()) { return type; } } return null; } /** * Same as `findChildren` but searches only within a `range`. */ function findChildrenInRange(node, range, predicate) { const nodesWithPos = []; // if (range.from === range.to) { // const nodeAt = node.nodeAt(range.from) // if (nodeAt) { // nodesWithPos.push({ // node: nodeAt, // pos: range.from, // }) // } // } node.nodesBetween(range.from, range.to, (child, pos) => { if (predicate(child)) { nodesWithPos.push({ node: child, pos }); } }); return nodesWithPos; } function findParentNodeClosestToPos($pos, predicate) { for (let i = $pos.depth; i > 0; i -= 1) { const node = $pos.node(i); if (predicate(node)) { return { pos: i > 0 ? $pos.before(i) : 0, start: $pos.start(i), depth: i, node }; } } } function findParentNode(predicate) { return selection => findParentNodeClosestToPos(selection.$from, predicate); } function getHTMLFromFragment(fragment, schema) { const documentFragment = DOMSerializer.fromSchema(schema).serializeFragment(fragment); const temporaryDocument = document.implementation.createHTMLDocument(); const container = temporaryDocument.createElement('div'); container.appendChild(documentFragment); return container.innerHTML; } function getText(node, options) { const range = { from: 0, to: node.content.size }; return getTextBetween(node, range, options); } function getNodeAttributes(state, typeOrName) { const type = getNodeType(typeOrName, state.schema); const { from, to } = state.selection; const nodes = []; state.doc.nodesBetween(from, to, node => { nodes.push(node); }); const node = nodes.reverse().find(nodeItem => nodeItem.type.name === type.name); if (!node) { return {}; } return { ...node.attrs }; } function getAttributes(state, typeOrName) { const schemaType = getSchemaTypeNameByName(typeof typeOrName === 'string' ? typeOrName : typeOrName.name, state.schema); if (schemaType === 'node') { return getNodeAttributes(state, typeOrName); } if (schemaType === 'mark') { return getMarkAttributes(state, typeOrName); } return {}; } /** * Removes duplicated values within an array. * Supports numbers, strings and objects. */ function removeDuplicates(array, by = JSON.stringify) { const seen = {}; return array.filter(item => { const key = by(item); return Object.prototype.hasOwnProperty.call(seen, key) ? false : seen[key] = true; }); } /** * Removes duplicated ranges and ranges that are * fully captured by other ranges. */ function simplifyChangedRanges(changes) { const uniqueChanges = removeDuplicates(changes); return uniqueChanges.length === 1 ? uniqueChanges : uniqueChanges.filter((change, index) => { const rest = uniqueChanges.filter((_, i) => i !== index); return !rest.some(otherChange => { return change.oldRange.from >= otherChange.oldRange.from && change.oldRange.to <= otherChange.oldRange.to && change.newRange.from >= otherChange.newRange.from && change.newRange.to <= otherChange.newRange.to; }); }); } /** * Returns a list of changed ranges * based on the first and last state of all steps. */ function getChangedRanges(transform) { const { mapping, steps } = transform; const changes = []; mapping.maps.forEach((stepMap, index) => { const ranges = []; // This accounts for step changes where no range was actually altered // e.g. when setting a mark, node attribute, etc. // @ts-ignore if (!stepMap.ranges.length) { const { from, to } = steps[index]; if (from === undefined || to === undefined) { return; } ranges.push({ from, to }); } else { stepMap.forEach((from, to) => { ranges.push({ from, to }); }); } ranges.forEach(({ from, to }) => { const newStart = mapping.slice(index).map(from, -1); const newEnd = mapping.slice(index).map(to); const oldStart = mapping.invert().map(newStart, -1); const oldEnd = mapping.invert().map(newEnd); changes.push({ oldRange: { from: oldStart, to: oldEnd }, newRange: { from: newStart, to: newEnd } }); }); }); return simplifyChangedRanges(changes); } function getMarksBetween(from, to, doc) { const marks = []; // get all inclusive marks on empty selection if (from === to) { doc.resolve(from).marks().forEach(mark => { const $pos = doc.resolve(from - 1); const range = getMarkRange($pos, mark.type); if (!range) { return; } marks.push({ mark, ...range }); }); } else { doc.nodesBetween(from, to, (node, pos) => { marks.push(...node.marks.map(mark => ({ from: pos, to: pos + node.nodeSize, mark }))); }); } return marks; } function getSplittedAttributes(extensionAttributes, typeName, attributes) { return Object.fromEntries(Object.entries(attributes).filter(([name]) => { const extensionAttribute = extensionAttributes.find(item => { return item.type === typeName && item.name === name; }); if (!extensionAttribute) { return false; } return extensionAttribute.attribute.keepOnSplit; })); } function isMarkActive(state, typeOrName, attributes = {}) { const { empty, ranges } = state.selection; const type = typeOrName ? getMarkType(typeOrName, state.schema) : null; if (empty) { return !!(state.storedMarks || state.selection.$from.marks()).filter(mark => { if (!type) { return true; } return type.name === mark.type.name; }).find(mark => objectIncludes(mark.attrs, attributes, { strict: false })); } let selectionRange = 0; const markRanges = []; ranges.forEach(({ $from, $to }) => { const from = $from.pos; const to = $to.pos; state.doc.nodesBetween(from, to, (node, pos) => { if (!node.isText && !node.marks.length) { return; } const relativeFrom = Math.max(from, pos); const relativeTo = Math.min(to, pos + node.nodeSize); const range = relativeTo - relativeFrom; selectionRange += range; markRanges.push(...node.marks.map(mark => ({ mark, from: relativeFrom, to: relativeTo }))); }); }); if (selectionRange === 0) { return false; } // calculate range of matched mark const matchedRange = markRanges.filter(markRange => { if (!type) { return true; } return type.name === markRange.mark.type.name; }).filter(markRange => objectIncludes(markRange.mark.attrs, attributes, { strict: false })).reduce((sum, markRange) => sum + markRange.to - markRange.from, 0); // calculate range of marks that excludes the searched mark // for example `code` doesn’t allow any other marks const excludedRange = markRanges.filter(markRange => { if (!type) { return true; } return markRange.mark.type !== type && markRange.mark.type.excludes(type); }).reduce((sum, markRange) => sum + markRange.to - markRange.from, 0); // we only include the result of `excludedRange` // if there is a match at all const range = matchedRange > 0 ? matchedRange + excludedRange : matchedRange; return range >= selectionRange; } function isActive(state, name, attributes = {}) { if (!name) { return isNodeActive(state, null, attributes) || isMarkActive(state, null, attributes); } const schemaType = getSchemaTypeNameByName(name, state.schema); if (schemaType === 'node') { return isNodeActive(state, name, attributes); } if (schemaType === 'mark') { return isMarkActive(state, name, attributes); } return false; } function isList(name, extensions) { const { nodeExtensions } = splitExtensions(extensions); const extension = nodeExtensions.find(item => item.name === name); if (!extension) { return false; } const context = { name: extension.name, options: extension.options, storage: extension.storage }; const group = callOrReturn(getExtensionField(extension, 'group', context)); if (typeof group !== 'string') { return false; } return group.split(' ').includes('list'); } function isNodeEmpty(node) { var _a; const defaultContent = (_a = node.type.createAndFill()) === null || _a === void 0 ? void 0 : _a.toJSON(); const content = node.toJSON(); return JSON.stringify(defaultContent) === JSON.stringify(content); } function canSetMark(state, tr, newMarkType) { var _a; const { selection } = tr; let cursor = null; if (isTextSelection(selection)) { cursor = selection.$cursor; } if (cursor) { const currentMarks = (_a = state.storedMarks) !== null && _a !== void 0 ? _a : cursor.marks(); // There can be no current marks that exclude the new mark return !!newMarkType.isInSet(currentMarks) || !currentMarks.some(mark => mark.type.excludes(newMarkType)); } const { ranges } = selection; return ranges.some(({ $from, $to }) => { let someNodeSupportsMark = $from.depth === 0 ? state.doc.inlineContent && state.doc.type.allowsMarkType(newMarkType) : false; state.doc.nodesBetween($from.pos, $to.pos, (node, _pos, parent) => { // If we already found a mark that we can enable, return false to bypass the remaining search if (someNodeSupportsMark) { return false; } if (node.isInline) { const parentAllowsMarkType = !parent || parent.type.allowsMarkType(newMarkType); const currentMarksAllowMarkType = !!newMarkType.isInSet(node.marks) || !node.marks.some(otherMark => otherMark.type.excludes(newMarkType)); someNodeSupportsMark = parentAllowsMarkType && currentMarksAllowMarkType; } return !someNodeSupportsMark; }); return someNodeSupportsMark; }); } const setMark = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => { const { selection } = tr; const { empty, ranges } = selection; const type = getMarkType(typeOrName, state.schema); if (dispatch) { if (empty) { const oldAttributes = getMarkAttributes(state, type); tr.addStoredMark(type.create({ ...oldAttributes, ...attributes })); } else { ranges.forEach(range => { const from = range.$from.pos; const to = range.$to.pos; state.doc.nodesBetween(from, to, (node, pos) => { const trimmedFrom = Math.max(pos, from); const trimmedTo = Math.min(pos + node.nodeSize, to); const someHasMark = node.marks.find(mark => mark.type === type); // if there is already a mark of this type // we know that we have to merge its attributes // otherwise we add a fresh new mark if (someHasMark) { node.marks.forEach(mark => { if (type === mark.type) { tr.addMark(trimmedFrom, trimmedTo, type.create({ ...mark.attrs, ...attributes })); } }); } else { tr.addMark(trimmedFrom, trimmedTo, type.create(attributes)); } }); }); } } return canSetMark(state, tr, type); }; const setMeta = (key, value) => ({ tr }) => { tr.setMeta(key, value); return true; }; const setNode = (typeOrName, attributes = {}) => ({ state, dispatch, chain }) => { const type = getNodeType(typeOrName, state.schema); // TODO: use a fallback like insertContent? if (!type.isTextblock) { console.warn('[tiptap warn]: Currently "setNode()" only supports text block nodes.'); return false; } return chain() // try to convert node to default node if needed .command(({ commands }) => { const canSetBlock = setBlockType(type, attributes)(state); if (canSetBlock) { return true; } return commands.clearNodes(); }).command(({ state: updatedState }) => { return setBlockType(type, attributes)(updatedState, dispatch); }).run(); }; const setNodeSelection = position => ({ tr, dispatch }) => { if (dispatch) { const { doc } = tr; const from = minMax(position, 0, doc.content.size); const selection = NodeSelection.create(doc, from); tr.setSelection(selection); } return true; }; const setTextSelection = position => ({ tr, dispatch }) => { if (dispatch) { const { doc } = tr; const { from, to } = typeof position === 'number' ? { from: position, to: position } : position; const minPos = TextSelection.atStart(doc).from; const maxPos = TextSelection.atEnd(doc).to; const resolvedFrom = minMax(from, minPos, maxPos); const resolvedEnd = minMax(to, minPos, maxPos); const selection = TextSelection.create(doc, resolvedFrom, resolvedEnd); tr.setSelection(selection); } return true; }; const sinkListItem = typeOrName => ({ state, dispatch }) => { const type = getNodeType(typeOrName, state.schema); return sinkListItem$1(type)(state, dispatch); }; function ensureMarks(state, splittableMarks) { const marks = state.storedMarks || state.selection.$to.parentOffset && state.selection.$from.marks(); if (marks) { const filteredMarks = marks.filter(mark => splittableMarks === null || splittableMarks === void 0 ? void 0 : splittableMarks.includes(mark.type.name)); state.tr.ensureMarks(filteredMarks); } } const splitBlock = ({ keepMarks = true } = {}) => ({ tr, state, dispatch, editor }) => { const { selection, doc } = tr; const { $from, $to } = selection; const extensionAttributes = editor.extensionManager.attributes; const newAttributes = getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs); if (selection instanceof NodeSelection && selection.node.isBlock) { if (!$from.parentOffset || !canSplit(doc, $from.pos)) { return false; } if (dispatch) { if (keepMarks) { ensureMarks(state, editor.extensionManager.splittableMarks); } tr.split($from.pos).scrollIntoView(); } return true; } if (!$from.parent.isBlock) { return false; } if (dispatch) { const atEnd = $to.parentOffset === $to.parent.content.size; if (selection instanceof TextSelection) { tr.deleteSelection(); } const deflt = $from.depth === 0 ? undefined : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1))); let types = atEnd && deflt ? [{ type: deflt, attrs: newAttributes }] : undefined; let can = canSplit(tr.doc, tr.mapping.map($from.pos), 1, types); if (!types && !can && canSplit(tr.doc, tr.mapping.map($from.pos), 1, deflt ? [{ type: deflt }] : undefined)) { can = true; types = deflt ? [{ type: deflt, attrs: newAttributes }] : undefined; } if (can) { tr.split(tr.mapping.map($from.pos), 1, types); if (deflt && !atEnd && !$from.parentOffset && $from.parent.type !== deflt) { const first = tr.mapping.map($from.before()); const $first = tr.doc.resolve(first); if ($from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt)) { tr.setNodeMarkup(tr.mapping.map($from.before()), deflt); } } } if (keepMarks) { ensureMarks(state, editor.extensionManager.splittableMarks); } tr.scrollIntoView(); } return true; }; const splitListItem = typeOrName => ({ tr, state, dispatch, editor }) => { var _a; const type = getNodeType(typeOrName, state.schema); const { $from, $to } = state.selection; // @ts-ignore // eslint-disable-next-line const node = state.selection.node; if (node && node.isBlock || $from.depth < 2 || !$from.sameParent($to)) { return false; } const grandParent = $from.node(-1); if (grandParent.type !== type) { return false; } const extensionAttributes = editor.extensionManager.attributes; if ($from.parent.content.size === 0 && $from.node(-1).childCount === $from.indexAfter(-1)) { // In an empty block. If this is a nested list, the wrapping // list item should be split. Otherwise, bail out and let next // command handle lifting. if ($from.depth === 2 || $from.node(-3).type !== type || $from.index(-2) !== $from.node(-2).childCount - 1) { return false; } if (dispatch) { let wrap = Fragment.empty; // eslint-disable-next-line const depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3; // Build a fragment containing empty versions of the structure // from the outer list item to the parent node of the cursor for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d -= 1) { wrap = Fragment.from($from.node(d).copy(wrap)); } // eslint-disable-next-line const depthAfter = $from.indexAfter(-1) < $from.node(-2).childCount ? 1 : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3; // Add a second list item with an empty default start node const newNextTypeAttributes = getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs); const nextType = ((_a = type.contentMatch.defaultType) === null || _a === void 0 ? void 0 : _a.createAndFill(newNextTypeAttributes)) || undefined; wrap = wrap.append(Fragment.from(type.createAndFill(null, nextType) || undefined)); const start = $from.before($from.depth - (depthBefore - 1)); tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0)); let sel = -1; tr.doc.nodesBetween(start, tr.doc.content.size, (n, pos) => { if (sel > -1) { return false; } if (n.isTextblock && n.content.size === 0) { sel = pos + 1; } }); if (sel > -1) { tr.setSelection(TextSelection.near(tr.doc.resolve(sel))); } tr.scrollIntoView(); } return true; } const nextType = $to.pos === $from.end() ? grandParent.contentMatchAt(0).defaultType : null; const newTypeAttributes = getSplittedAttributes(extensionAttributes, grandParent.type.name, grandParent.attrs); const newNextTypeAttributes = getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs); tr.delete($from.pos, $to.pos); const types = nextType ? [{ type, attrs: newTypeAttributes }, { type: nextType, attrs: newNextTypeAttributes }] : [{ type, attrs: newTypeAttributes }]; if (!canSplit(tr.doc, $from.pos, 2)) { return false; } if (dispatch) { const { selection, storedMarks } = state; const { splittableMarks } = editor.extensionManager; const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks(); tr.split($from.pos, 2, types).scrollIntoView(); if (!marks || !dispatch) { return true; } const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name)); tr.ensureMarks(filteredMarks); } return true; }; const joinListBackwards = (tr, listType) => { const list = findParentNode(node => node.type === listType)(tr.selection); if (!list) { return true; } const before = tr.doc.resolve(Math.max(0, list.pos - 1)).before(list.depth); if (before === undefined) { return true; } const nodeBefore = tr.doc.nodeAt(before); const canJoinBackwards = list.node.type === (nodeBefore === null || nodeBefore === void 0 ? void 0 : nodeBefore.type) && canJoin(tr.doc, list.pos); if (!canJoinBackwards) { return true; } tr.join(list.pos); return true; }; const joinListForwards = (tr, listType) => { const list = findParentNode(node => node.type === listType)(tr.selection); if (!list) { return true; } const after = tr.doc.resolve(list.start).after(list.depth); if (after === undefined) { return true; } const nodeAfter = tr.doc.nodeAt(after); const canJoinForwards = list.node.type === (nodeAfter === null || nodeAfter === void 0 ? void 0 : nodeAfter.type) && canJoin(tr.doc, after); if (!canJoinForwards) { return true; } tr.join(after); return true; }; const toggleList = (listTypeOrName, itemTypeOrName, keepMarks, attributes = {}) => ({ editor, tr, state, dispatch, chain, commands, can }) => { const { extensions, splittableMarks } = editor.extensionManager; const listType = getNodeType(listTypeOrName, state.schema); const itemType = getNodeType(itemTypeOrName, state.schema); const { selection, storedMarks } = state; const { $from, $to } = selection; const range = $from.blockRange($to); const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks(); if (!range) { return false; } const parentList = findParentNode(node => isList(node.type.name, extensions))(selection); if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) { // remove list if (parentList.node.type === listType) { return commands.liftListItem(itemType); } // change list type if (isList(parentList.node.type.name, extensions) && listType.validContent(parentList.node.content) && dispatch) { return chain().command(() => { tr.setNodeMarkup(parentList.pos, listType); return true; }).command(() => joinListBackwards(tr, listType)).command(() => joinListForwards(tr, listType)).run(); } } if (!keepMarks || !marks || !dispatch) { return chain() // try to convert node to default node if needed .command(() => { const canWrapInList = can().wrapInList(listType, attributes); if (canWrapInList) { return true; } return commands.clearNodes(); }).wrapInList(listType, attributes).command(() => joinListBackwards(tr, listType)).command(() => joinListForwards(tr, listType)).run(); } return chain() // try to convert node to default node if needed .command(() => { const canWrapInList = can().wrapInList(listType, attributes); const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name)); tr.ensureMarks(filteredMarks); if (canWrapInList) { return true; } return commands.clearNodes(); }).wrapInList(listType, attributes).command(() => joinListBackwards(tr, listType)).command(() => joinListForwards(tr, listType)).run(); }; const toggleMark = (typeOrName, attributes = {}, options = {}) => ({ state, commands }) => { const { extendEmptyMarkRange = false } = options; const type = getMarkType(typeOrName, state.schema); const isActive = isMarkActive(state, type, attributes); if (isActive) { return commands.unsetMark(type, { extendEmptyMarkRange }); } return commands.setMark(type, attributes); }; const toggleNode = (typeOrName, toggleTypeOrName, attributes = {}) => ({ state, commands }) => { const type = getNodeType(typeOrName, state.schema); const toggleType = getNodeType(toggleTypeOrName, state.schema); const isActive = isNodeActive(state, type, attributes); if (isActive) { return commands.setNode(toggleType); } return commands.setNode(type, attributes); }; const toggleWrap = (typeOrName, attributes = {}) => ({ state, commands }) => { const type = getNodeType(typeOrName, state.schema); const isActive = isNodeActive(state, type, attributes); if (isActive) { return commands.lift(type); } return commands.wrapIn(type, attributes); }; const undoInputRule = () => ({ state, dispatch }) => { const plugins = state.plugins; for (let i = 0; i < plugins.length; i += 1) { const plugin = plugins[i]; let undoable; // @ts-ignore // eslint-disable-next-line if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) { if (dispatch) { const tr = state.tr; const toUndo = undoable.transform; for (let j = toUndo.steps.length - 1; j >= 0; j -= 1) { tr.step(toUndo.steps[j].invert(toUndo.docs[j])); } if (undoable.text) { const marks = tr.doc.resolve(undoable.from).marks(); tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks)); } else { tr.delete(undoable.from, undoable.to); } } return true; } } return false; }; const unsetAllMarks = () => ({ tr, dispatch }) => { const { selection } = tr; const { empty, ranges } = selection; if (empty) { return true; } if (dispatch) { ranges.forEach(range => { tr.removeMark(range.$from.pos, range.$to.pos); }); } return true; }; const unsetMark = (typeOrName, options = {}) => ({ tr, state, dispatch }) => { var _a; const { extendEmptyMarkRange = false } = options; const { selection } = tr; const type = getMarkType(typeOrName, state.schema); const { $from, empty, ranges } = selection; if (!dispatch) { return true; } if (empty && extendEmptyMarkRange) { let { from, to } = selection; const attrs = (_a = $from.marks().find(mark => mark.type === type)) === null || _a === void 0 ? void 0 : _a.attrs; const range = getMarkRange($from, type, attrs); if (range) { from = range.from; to = range.to; } tr.removeMark(from, to, type); } else { ranges.forEach(range => { tr.removeMark(range.$from.pos, range.$to.pos, type); }); } tr.removeStoredMark(type); return true; }; const updateAttributes = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => { let nodeType = null; let markType = null; const schemaType = getSchemaTypeNameByName(typeof typeOrName === 'string' ? typeOrName : typeOrName.name, state.schema); if (!schemaType) { return false; } if (schemaType === 'node') { nodeType = getNodeType(typeOrName, state.schema); } if (schemaType === 'mark') { markType = getMarkType(typeOrName, state.schema); } if (dispatch) { tr.selection.ranges.forEach(range => { const from = range.$from.pos; const to = range.$to.pos; state.doc.nodesBetween(from, to, (node, pos) => { if (nodeType && nodeType === node.type) { tr.setNodeMarkup(pos, undefined, { ...node.attrs, ...attributes }); } if (markType && node.marks.length) { node.marks.forEach(mark => { if (markType === mark.type) { const trimmedFrom = Math.max(pos, from); const trimmedTo = Math.min(pos + node.nodeSize, to); tr.addMark(trimmedFrom, trimmedTo, markType.create({ ...mark.attrs, ...attributes })); } }); } }); }); } return true; }; const wrapIn = (typeOrName, attributes = {}) => ({ state, dispatch }) => { const type = getNodeType(typeOrName, state.schema); return wrapIn$1(type, attributes)(state, dispatch); }; const wrapInList = (typeOrName, attributes = {}) => ({ state, dispatch }) => { const type = getNodeType(typeOrName, state.schema); return wrapInList$1(type, attributes)(state, dispatch); }; var commands = /*#__PURE__*/Object.freeze({ __proto__: null, blur: blur, clearContent: clearContent, clearNodes: clearNodes, command: command, createParagraphNear: createParagraphNear, cut: cut, deleteCurrentNode: deleteCurrentNode, deleteNode: deleteNode, deleteRange: deleteRange, deleteSelection: deleteSelection, enter: enter, exitCode: exitCode, extendMarkRange: extendMarkRange, first: first, focus: focus, forEach: forEach, insertContent: insertContent, insertContentAt: insertContentAt, joinUp: joinUp, joinDown: joinDown, joinBackward: joinBackward, joinForward: joinForward, joinItemBackward: joinItemBackward, joinItemForward: joinItemForward, keyboardShortcut: keyboardShortcut, lift: lift, liftEmptyBlock: liftEmptyBlock, liftListItem: liftListItem, newlineInCode: newlineInCode, resetAttributes: resetAttributes, scrollIntoView: scrollIntoView$1, selectAll: selectAll, selectNodeBackward: selectNodeBackward, selectNodeForward: selectNodeForward, selectParentNode: selectParentNode, selectTextblockEnd: selectTextblockEnd, selectTextblockStart: selectTextblockStart, setContent: setContent, setMark: setMark, setMeta: setMeta, setNode: setNode, setNodeSelection: setNodeSelection, setTextSelection: setTextSelection, sinkListItem: sinkListItem, splitBlock: splitBlock, splitListItem: splitListItem, toggleList: toggleList, toggleMark: toggleMark, toggleNode: toggleNode, toggleWrap: toggleWrap, undoInputRule: undoInputRule, unsetAllMarks: unsetAllMarks, unsetMark: unsetMark, updateAttributes: updateAttributes, wrapIn: wrapIn, wrapInList: wrapInList }); const Commands = Extension.create({ name: 'commands', addCommands() { return { ...commands }; } }); const Editable = Extension.create({ name: 'editable', addProseMirrorPlugins() { return [new Plugin({ key: new PluginKey('editable'), props: { editable: () => this.editor.options.editable } })]; } }); const FocusEvents = Extension.create({ name: 'focusEvents', addProseMirrorPlugins() { const { editor } = this; return [new Plugin({ key: new PluginKey('focusEvents'), props: { handleDOMEvents: { focus: (view, event) => { editor.isFocused = true; const transaction = editor.state.tr.setMeta('focus', { event }).setMeta('addToHistory', false); view.dispatch(transaction); return false; }, blur: (view, event) => { editor.isFocused = false; const transaction = editor.state.tr.setMeta('blur', { event }).setMeta('addToHistory', false); view.dispatch(transaction); return false; } } } })]; } }); const Keymap = Extension.create({ name: 'keymap', addKeyboardShortcuts() { const handleBackspace = () => this.editor.commands.first(({ commands }) => [() => commands.undoInputRule(), // maybe convert first text block node to default node () => commands.command(({ tr }) => { const { selection, doc } = tr; const { empty, $anchor } = selection; const { pos, parent } = $anchor; const $parentPos = $anchor.parent.isTextblock ? tr.doc.resolve(pos - 1) : $anchor; const parentIsIsolating = $parentPos.parent.type.spec.isolating; const parentPos = $anchor.pos - $anchor.parentOffset; const isAtStart = parentIsIsolating && $parentPos.parent.childCount === 1 ? parentPos === $anchor.pos : Selection.atStart(doc).from === pos; if (!empty || !isAtStart || !parent.type.isTextblock || parent.textContent.length) { return false; } return commands.clearNodes(); }), () => commands.deleteSelection(), () => commands.joinBackward(), () => commands.selectNodeBackward()]); const handleDelete = () => this.editor.commands.first(({ commands }) => [() => commands.deleteSelection(), () => commands.deleteCurrentNode(), () => commands.joinForward(), () => commands.selectNodeForward()]); const handleEnter = () => this.editor.commands.first(({ commands }) => [() => commands.newlineInCode(), () => commands.createParagraphNear(), () => commands.liftEmptyBlock(), () => commands.splitBlock()]); const baseKeymap = { Enter: handleEnter, 'Mod-Enter': () => this.editor.commands.exitCode(), Backspace: handleBackspace, 'Mod-Backspace': handleBackspace, 'Shift-Backspace': handleBackspace, Delete: handleDelete, 'Mod-Delete': handleDelete, 'Mod-a': () => this.editor.commands.selectAll() }; const pcKeymap = { ...baseKeymap }; const macKeymap = { ...baseKeymap, 'Ctrl-h': handleBackspace, 'Alt-Backspace': handleBackspace, 'Ctrl-d': handleDelete, 'Ctrl-Alt-Backspace': handleDelete, 'Alt-Delete': handleDelete, 'Alt-d': handleDelete, 'Ctrl-a': () => this.editor.commands.selectTextblockStart(), 'Ctrl-e': () => this.editor.commands.selectTextblockEnd() }; if (isiOS() || isMacOS()) { return macKeymap; } return pcKeymap; }, addProseMirrorPlugins() { return [ // With this plugin we check if the whole document was selected and deleted. // In this case we will additionally call `clearNodes()` to convert e.g. a heading // to a paragraph if necessary. // This is an alternative to ProseMirror's `AllSelection`, which doesn’t work well // with many other commands. new Plugin({ key: new PluginKey('clearDocument'), appendTransaction: (transactions, oldState, newState) => { const docChanges = transactions.some(transaction => transaction.docChanged) && !oldState.doc.eq(newState.doc); if (!docChanges) { return; } const { empty, from, to } = oldState.selection; const allFrom = Selection.atStart(oldState.doc).from; const allEnd = Selection.atEnd(oldState.doc).to; const allWasSelected = from === allFrom && to === allEnd; if (empty || !allWasSelected) { return; } const isEmpty = newState.doc.textBetween(0, newState.doc.content.size, ' ', ' ').length === 0; if (!isEmpty) { return; } const tr = newState.tr; const state = createChainableState({ state: newState, transaction: tr }); const { commands } = new CommandManager({ editor: this.editor, state }); commands.clearNodes(); if (!tr.steps.length) { return; } return tr; } })]; } }); const Tabindex = Extension.create({ name: 'tabindex', addProseMirrorPlugins() { return [new Plugin({ key: new PluginKey('tabindex'), props: { attributes: this.editor.isEditable ? { tabindex: '0' } : {} } })]; } }); var extensions = /*#__PURE__*/Object.freeze({ __proto__: null, ClipboardTextSerializer: ClipboardTextSerializer, Commands: Commands, Editable: Editable, FocusEvents: FocusEvents, Keymap: Keymap, Tabindex: Tabindex }); const style = `.ProseMirror { position: relative; } .ProseMirror { word-wrap: break-word; white-space: pre-wrap; white-space: break-spaces; -webkit-font-variant-ligatures: none; font-variant-ligatures: none; font-feature-settings: "liga" 0; /* the above doesn't seem to work in Edge */ } .ProseMirror [contenteditable="false"] { white-space: normal; } .ProseMirror [contenteditable="false"] [contenteditable="true"] { white-space: pre-wrap; } .ProseMirror pre { white-space: pre-wrap; } img.ProseMirror-separator { display: inline !important; border: none !important; margin: 0 !important; width: 1px !important; height: 1px !important; } .ProseMirror-gapcursor { display: none; pointer-events: none; position: absolute; margin: 0; } .ProseMirror-gapcursor:after { content: ""; display: block; position: absolute; top: -2px; width: 20px; border-top: 1px solid black; animation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite; } @keyframes ProseMirror-cursor-blink { to { visibility: hidden; } } .ProseMirror-hideselection *::selection { background: transparent; } .ProseMirror-hideselection *::-moz-selection { background: transparent; } .ProseMirror-hideselection * { caret-color: transparent; } .ProseMirror-focused .ProseMirror-gapcursor { display: block; } .tippy-box[data-animation=fade][data-state=hidden] { opacity: 0 }`; function createStyleTag(style, nonce, suffix) { const tiptapStyleTag = document.querySelector(`style[data-tiptap-style${suffix ? `-${suffix}` : ''}]`); if (tiptapStyleTag !== null) { return tiptapStyleTag; } const styleNode = document.createElement('style'); if (nonce) { styleNode.setAttribute('nonce', nonce); } styleNode.setAttribute(`data-tiptap-style${suffix ? `-${suffix}` : ''}`, ''); styleNode.innerHTML = style; document.getElementsByTagName('head')[0].appendChild(styleNode); return styleNode; } let Editor$2 = class Editor extends EventEmitter { constructor(options = {}) { super(); this.isFocused = false; this.extensionStorage = {}; this.options = { element: document.createElement('div'), content: '', injectCSS: true, injectNonce: undefined, extensions: [], autofocus: false, editable: true, editorProps: {}, parseOptions: {}, enableInputRules: true, enablePasteRules: true, enableCoreExtensions: true, onBeforeCreate: () => null, onCreate: () => null, onUpdate: () => null, onSelectionUpdate: () => null, onTransaction: () => null, onFocus: () => null, onBlur: () => null, onDestroy: () => null }; this.isCapturingTransaction = false; this.capturedTransaction = null; this.setOptions(options); this.createExtensionManager(); this.createCommandManager(); this.createSchema(); this.on('beforeCreate', this.options.onBeforeCreate); this.emit('beforeCreate', { editor: this }); this.createView(); this.injectCSS(); this.on('create', this.options.onCreate); this.on('update', this.options.onUpdate); this.on('selectionUpdate', this.options.onSelectionUpdate); this.on('transaction', this.options.onTransaction); this.on('focus', this.options.onFocus); this.on('blur', this.options.onBlur); this.on('destroy', this.options.onDestroy); window.setTimeout(() => { if (this.isDestroyed) { return; } this.commands.focus(this.options.autofocus); this.emit('create', { editor: this }); }, 0); } /** * Returns the editor storage. */ get storage() { return this.extensionStorage; } /** * An object of all registered commands. */ get commands() { return this.commandManager.commands; } /** * Create a command chain to call multiple commands at once. */ chain() { return this.commandManager.chain(); } /** * Check if a command or a command chain can be executed. Without executing it. */ can() { return this.commandManager.can(); } /** * Inject CSS styles. */ injectCSS() { if (this.options.injectCSS && document) { this.css = createStyleTag(style, this.options.injectNonce); } } /** * Update editor options. * * @param options A list of options */ setOptions(options = {}) { this.options = { ...this.options, ...options }; if (!this.view || !this.state || this.isDestroyed) { return; } if (this.options.editorProps) { this.view.setProps(this.options.editorProps); } this.view.updateState(this.state); } /** * Update editable state of the editor. */ setEditable(editable, emitUpdate = true) { this.setOptions({ editable }); if (emitUpdate) { this.emit('update', { editor: this, transaction: this.state.tr }); } } /** * Returns whether the editor is editable. */ get isEditable() { // since plugins are applied after creating the view // `editable` is always `true` for one tick. // that’s why we also have to check for `options.editable` return this.options.editable && this.view && this.view.editable; } /** * Returns the editor state. */ get state() { return this.view.state; } /** * Register a ProseMirror plugin. * * @param plugin A ProseMirror plugin * @param handlePlugins Control how to merge the plugin into the existing plugins. */ registerPlugin(plugin, handlePlugins) { const plugins = isFunction$1(handlePlugins) ? handlePlugins(plugin, [...this.state.plugins]) : [...this.state.plugins, plugin]; const state = this.state.reconfigure({ plugins }); this.view.updateState(state); } /** * Unregister a ProseMirror plugin. * * @param nameOrPluginKey The plugins name */ unregisterPlugin(nameOrPluginKey) { if (this.isDestroyed) { return; } // @ts-ignore const name = typeof nameOrPluginKey === 'string' ? `${nameOrPluginKey}$` : nameOrPluginKey.key; const state = this.state.reconfigure({ // @ts-ignore plugins: this.state.plugins.filter(plugin => !plugin.key.startsWith(name)) }); this.view.updateState(state); } /** * Creates an extension manager. */ createExtensionManager() { const coreExtensions = this.options.enableCoreExtensions ? Object.values(extensions) : []; const allExtensions = [...coreExtensions, ...this.options.extensions].filter(extension => { return ['extension', 'node', 'mark'].includes(extension === null || extension === void 0 ? void 0 : extension.type); }); this.extensionManager = new ExtensionManager(allExtensions, this); } /** * Creates an command manager. */ createCommandManager() { this.commandManager = new CommandManager({ editor: this }); } /** * Creates a ProseMirror schema. */ createSchema() { this.schema = this.extensionManager.schema; } /** * Creates a ProseMirror view. */ createView() { const doc = createDocument(this.options.content, this.schema, this.options.parseOptions); const selection = resolveFocusPosition(doc, this.options.autofocus); this.view = new EditorView(this.options.element, { ...this.options.editorProps, dispatchTransaction: this.dispatchTransaction.bind(this), state: EditorState.create({ doc, selection: selection || undefined }) }); // `editor.view` is not yet available at this time. // Therefore we will add all plugins and node views directly afterwards. const newState = this.state.reconfigure({ plugins: this.extensionManager.plugins }); this.view.updateState(newState); this.createNodeViews(); this.prependClass(); // Let’s store the editor instance in the DOM element. // So we’ll have access to it for tests. const dom = this.view.dom; dom.editor = this; } /** * Creates all node views. */ createNodeViews() { this.view.setProps({ nodeViews: this.extensionManager.nodeViews }); } /** * Prepend class name to element. */ prependClass() { this.view.dom.className = `tiptap ${this.view.dom.className}`; } captureTransaction(fn) { this.isCapturingTransaction = true; fn(); this.isCapturingTransaction = false; const tr = this.capturedTransaction; this.capturedTransaction = null; return tr; } /** * The callback over which to send transactions (state updates) produced by the view. * * @param transaction An editor state transaction */ dispatchTransaction(transaction) { // if the editor / the view of the editor was destroyed // the transaction should not be dispatched as there is no view anymore. if (this.view.isDestroyed) { return; } if (this.isCapturingTransaction) { if (!this.capturedTransaction) { this.capturedTransaction = transaction; return; } transaction.steps.forEach(step => { var _a; return (_a = this.capturedTransaction) === null || _a === void 0 ? void 0 : _a.step(step); }); return; } const state = this.state.apply(transaction); const selectionHasChanged = !this.state.selection.eq(state.selection); this.view.updateState(state); this.emit('transaction', { editor: this, transaction }); if (selectionHasChanged) { this.emit('selectionUpdate', { editor: this, transaction }); } const focus = transaction.getMeta('focus'); const blur = transaction.getMeta('blur'); if (focus) { this.emit('focus', { editor: this, event: focus.event, transaction }); } if (blur) { this.emit('blur', { editor: this, event: blur.event, transaction }); } if (!transaction.docChanged || transaction.getMeta('preventUpdate')) { return; } this.emit('update', { editor: this, transaction }); } /** * Get attributes of the currently selected node or mark. */ getAttributes(nameOrType) { return getAttributes(this.state, nameOrType); } isActive(nameOrAttributes, attributesOrUndefined) { const name = typeof nameOrAttributes === 'string' ? nameOrAttributes : null; const attributes = typeof nameOrAttributes === 'string' ? attributesOrUndefined : nameOrAttributes; return isActive(this.state, name, attributes); } /** * Get the document as JSON. */ getJSON() { return this.state.doc.toJSON(); } /** * Get the document as HTML. */ getHTML() { return getHTMLFromFragment(this.state.doc.content, this.schema); } /** * Get the document as text. */ getText(options) { const { blockSeparator = '\n\n', textSerializers = {} } = options || {}; return getText(this.state.doc, { blockSeparator, textSerializers: { ...getTextSerializersFromSchema(this.schema), ...textSerializers } }); } /** * Check if there is no content. */ get isEmpty() { return isNodeEmpty(this.state.doc); } /** * Get the number of characters for the current document. * * @deprecated */ getCharacterCount() { console.warn('[tiptap warn]: "editor.getCharacterCount()" is deprecated. Please use "editor.storage.characterCount.characters()" instead.'); return this.state.doc.content.size - 2; } /** * Destroy the editor. */ destroy() { this.emit('destroy'); if (this.view) { this.view.destroy(); } this.removeAllListeners(); } /** * Check if the editor is already destroyed. */ get isDestroyed() { var _a; // @ts-ignore return !((_a = this.view) === null || _a === void 0 ? void 0 : _a.docView); } }; /** * Build an input rule that adds a mark when the * matched text is typed into it. */ function markInputRule(config) { return new InputRule({ find: config.find, handler: ({ state, range, match }) => { const attributes = callOrReturn(config.getAttributes, undefined, match); if (attributes === false || attributes === null) { return null; } const { tr } = state; const captureGroup = match[match.length - 1]; const fullMatch = match[0]; if (captureGroup) { const startSpaces = fullMatch.search(/\S/); const textStart = range.from + fullMatch.indexOf(captureGroup); const textEnd = textStart + captureGroup.length; const excludedMarks = getMarksBetween(range.from, range.to, state.doc).filter(item => { // @ts-ignore const excluded = item.mark.type.excluded; return excluded.find(type => type === config.type && type !== item.mark.type); }).filter(item => item.to > textStart); if (excludedMarks.length) { return null; } if (textEnd < range.to) { tr.delete(textEnd, range.to); } if (textStart > range.from) { tr.delete(range.from + startSpaces, textStart); } const markEnd = range.from + startSpaces + captureGroup.length; tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {})); tr.removeStoredMark(config.type); } } }); } /** * Build an input rule that adds a node when the * matched text is typed into it. */ function nodeInputRule(config) { return new InputRule({ find: config.find, handler: ({ state, range, match }) => { const attributes = callOrReturn(config.getAttributes, undefined, match) || {}; const { tr } = state; const start = range.from; let end = range.to; const newNode = config.type.create(attributes); if (match[1]) { const offset = match[0].lastIndexOf(match[1]); let matchStart = start + offset; if (matchStart > end) { matchStart = end; } else { end = matchStart + match[1].length; } // insert last typed character const lastChar = match[0][match[0].length - 1]; tr.insertText(lastChar, start + match[0].length - 1); // insert node from input rule tr.replaceWith(matchStart, end, newNode); } else if (match[0]) { tr.insert(start - 1, config.type.create(attributes)).delete(tr.mapping.map(start), tr.mapping.map(end)); } tr.scrollIntoView(); } }); } /** * Build an input rule that changes the type of a textblock when the * matched text is typed into it. When using a regular expresion you’ll * probably want the regexp to start with `^`, so that the pattern can * only occur at the start of a textblock. */ function textblockTypeInputRule(config) { return new InputRule({ find: config.find, handler: ({ state, range, match }) => { const $start = state.doc.resolve(range.from); const attributes = callOrReturn(config.getAttributes, undefined, match) || {}; if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), config.type)) { return null; } state.tr.delete(range.from, range.to).setBlockType(range.from, range.from, config.type, attributes); } }); } /** * Build an input rule that replaces text when the * matched text is typed into it. */ function textInputRule(config) { return new InputRule({ find: config.find, handler: ({ state, range, match }) => { let insert = config.replace; let start = range.from; const end = range.to; if (match[1]) { const offset = match[0].lastIndexOf(match[1]); insert += match[0].slice(offset + match[1].length); start += offset; const cutOff = start - end; if (cutOff > 0) { insert = match[0].slice(offset - cutOff, offset) + insert; start = end; } } state.tr.insertText(insert, start, end); } }); } /** * Build an input rule for automatically wrapping a textblock when a * given string is typed. When using a regular expresion you’ll * probably want the regexp to start with `^`, so that the pattern can * only occur at the start of a textblock. * * `type` is the type of node to wrap in. * * By default, if there’s a node with the same type above the newly * wrapped node, the rule will try to join those * two nodes. You can pass a join predicate, which takes a regular * expression match and the node before the wrapped node, and can * return a boolean to indicate whether a join should happen. */ function wrappingInputRule(config) { return new InputRule({ find: config.find, handler: ({ state, range, match, chain }) => { const attributes = callOrReturn(config.getAttributes, undefined, match) || {}; const tr = state.tr.delete(range.from, range.to); const $start = tr.doc.resolve(range.from); const blockRange = $start.blockRange(); const wrapping = blockRange && findWrapping(blockRange, config.type, attributes); if (!wrapping) { return null; } tr.wrap(blockRange, wrapping); if (config.keepMarks && config.editor) { const { selection, storedMarks } = state; const { splittableMarks } = config.editor.extensionManager; const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks(); if (marks) { const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name)); tr.ensureMarks(filteredMarks); } } if (config.keepAttributes) { /** If the nodeType is `bulletList` or `orderedList` set the `nodeType` as `listItem` */ const nodeType = config.type.name === 'bulletList' || config.type.name === 'orderedList' ? 'listItem' : 'taskList'; chain().updateAttributes(nodeType, attributes).run(); } const before = tr.doc.resolve(range.from - 1).nodeBefore; if (before && before.type === config.type && canJoin(tr.doc, range.from - 1) && (!config.joinPredicate || config.joinPredicate(match, before))) { tr.join(range.from - 1); } } }); } class Mark { constructor(config = {}) { this.type = 'mark'; this.name = 'mark'; this.parent = null; this.child = null; this.config = { name: this.name, defaultOptions: {} }; this.config = { ...this.config, ...config }; this.name = this.config.name; if (config.defaultOptions) { console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${this.name}".`); } // TODO: remove `addOptions` fallback this.options = this.config.defaultOptions; if (this.config.addOptions) { this.options = callOrReturn(getExtensionField(this, 'addOptions', { name: this.name })); } this.storage = callOrReturn(getExtensionField(this, 'addStorage', { name: this.name, options: this.options })) || {}; } static create(config = {}) { return new Mark(config); } configure(options = {}) { // return a new instance so we can use the same extension // with different calls of `configure` const extension = this.extend(); extension.options = mergeDeep(this.options, options); extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', { name: extension.name, options: extension.options })); return extension; } extend(extendedConfig = {}) { const extension = new Mark(extendedConfig); extension.parent = this; this.child = extension; extension.name = extendedConfig.name ? extendedConfig.name : extension.parent.name; if (extendedConfig.defaultOptions) { console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${extension.name}".`); } extension.options = callOrReturn(getExtensionField(extension, 'addOptions', { name: extension.name })); extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', { name: extension.name, options: extension.options })); return extension; } static handleExit({ editor, mark }) { const { tr } = editor.state; const currentPos = editor.state.selection.$from; const isAtEnd = currentPos.pos === currentPos.end(); if (isAtEnd) { const currentMarks = currentPos.marks(); const isInMark = !!currentMarks.find(m => (m === null || m === void 0 ? void 0 : m.type.name) === mark.name); if (!isInMark) { return false; } const removeMark = currentMarks.find(m => (m === null || m === void 0 ? void 0 : m.type.name) === mark.name); if (removeMark) { tr.removeStoredMark(removeMark); } tr.insertText(' ', currentPos.pos); editor.view.dispatch(tr); return true; } return false; } } let Node$1 = class Node { constructor(config = {}) { this.type = 'node'; this.name = 'node'; this.parent = null; this.child = null; this.config = { name: this.name, defaultOptions: {} }; this.config = { ...this.config, ...config }; this.name = this.config.name; if (config.defaultOptions) { console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${this.name}".`); } // TODO: remove `addOptions` fallback this.options = this.config.defaultOptions; if (this.config.addOptions) { this.options = callOrReturn(getExtensionField(this, 'addOptions', { name: this.name })); } this.storage = callOrReturn(getExtensionField(this, 'addStorage', { name: this.name, options: this.options })) || {}; } static create(config = {}) { return new Node(config); } configure(options = {}) { // return a new instance so we can use the same extension // with different calls of `configure` const extension = this.extend(); extension.options = mergeDeep(this.options, options); extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', { name: extension.name, options: extension.options })); return extension; } extend(extendedConfig = {}) { const extension = new Node(extendedConfig); extension.parent = this; this.child = extension; extension.name = extendedConfig.name ? extendedConfig.name : extension.parent.name; if (extendedConfig.defaultOptions) { console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${extension.name}".`); } extension.options = callOrReturn(getExtensionField(extension, 'addOptions', { name: extension.name })); extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', { name: extension.name, options: extension.options })); return extension; } }; /** * Build an paste rule that adds a mark when the * matched text is pasted into it. */ function markPasteRule(config) { return new PasteRule({ find: config.find, handler: ({ state, range, match, pasteEvent }) => { const attributes = callOrReturn(config.getAttributes, undefined, match, pasteEvent); if (attributes === false || attributes === null) { return null; } const { tr } = state; const captureGroup = match[match.length - 1]; const fullMatch = match[0]; let markEnd = range.to; if (captureGroup) { const startSpaces = fullMatch.search(/\S/); const textStart = range.from + fullMatch.indexOf(captureGroup); const textEnd = textStart + captureGroup.length; const excludedMarks = getMarksBetween(range.from, range.to, state.doc).filter(item => { // @ts-ignore const excluded = item.mark.type.excluded; return excluded.find(type => type === config.type && type !== item.mark.type); }).filter(item => item.to > textStart); if (excludedMarks.length) { return null; } if (textEnd < range.to) { tr.delete(textEnd, range.to); } if (textStart > range.from) { tr.delete(range.from + startSpaces, textStart); } markEnd = range.from + startSpaces + captureGroup.length; tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {})); tr.removeStoredMark(config.type); } } }); } const CharacterCount = Extension.create({ name: 'characterCount', addOptions() { return { limit: null, mode: 'textSize' }; }, addStorage() { return { characters: () => 0, words: () => 0 }; }, onBeforeCreate() { this.storage.characters = options => { const node = (options === null || options === void 0 ? void 0 : options.node) || this.editor.state.doc; const mode = (options === null || options === void 0 ? void 0 : options.mode) || this.options.mode; if (mode === 'textSize') { const text = node.textBetween(0, node.content.size, undefined, ' '); return text.length; } return node.nodeSize; }; this.storage.words = options => { const node = (options === null || options === void 0 ? void 0 : options.node) || this.editor.state.doc; const text = node.textBetween(0, node.content.size, ' ', ' '); const words = text.split(' ').filter(word => word !== ''); return words.length; }; }, addProseMirrorPlugins() { return [new Plugin({ key: new PluginKey('characterCount'), filterTransaction: (transaction, state) => { const limit = this.options.limit; // Nothing has changed or no limit is defined. Ignore it. if (!transaction.docChanged || limit === 0 || limit === null || limit === undefined) { return true; } const oldSize = this.storage.characters({ node: state.doc }); const newSize = this.storage.characters({ node: transaction.doc }); // Everything is in the limit. Good. if (newSize <= limit) { return true; } // The limit has already been exceeded but will be reduced. if (oldSize > limit && newSize > limit && newSize <= oldSize) { return true; } // The limit has already been exceeded and will be increased further. if (oldSize > limit && newSize > limit && newSize > oldSize) { return false; } const isPaste = transaction.getMeta('paste'); // Block all exceeding transactions that were not pasted. if (!isPaste) { return false; } // For pasted content, we try to remove the exceeding content. const pos = transaction.selection.$head.pos; const over = newSize - limit; const from = pos - over; const to = pos; // It’s probably a bad idea to mutate transactions within `filterTransaction` // but for now this is working fine. transaction.deleteRange(from, to); // In some situations, the limit will continue to be exceeded after trimming. // This happens e.g. when truncating within a complex node (e.g. table) // and ProseMirror has to close this node again. // If this is the case, we prevent the transaction completely. const updatedSize = this.storage.characters({ node: transaction.doc }); if (updatedSize > limit) { return false; } return true; } })]; } }); const inputRegex$5 = /(?:^|\s)(!\[(.+|:?)]\((\S+)(?:(?:\s+)["'](\S+)["'])?\))$/; const Image = Node$1.create({ name: 'image', addOptions() { return { inline: false, allowBase64: false, HTMLAttributes: {} }; }, inline() { return this.options.inline; }, group() { return this.options.inline ? 'inline' : 'block'; }, draggable: true, addAttributes() { return { src: { default: null }, alt: { default: null }, title: { default: null } }; }, parseHTML() { return [{ tag: this.options.allowBase64 ? 'img[src]' : 'img[src]:not([src^="data:"])' }]; }, renderHTML({ HTMLAttributes }) { return ['img', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)]; }, addCommands() { return { setImage: options => ({ commands }) => { return commands.insertContent({ type: this.name, attrs: options }); } }; }, addInputRules() { return [nodeInputRule({ find: inputRegex$5, type: this.type, getAttributes: match => { const [,, alt, src, title] = match; return { src, alt, title }; } })]; } }); // THIS FILE IS AUTOMATICALLY GENERATED DO NOT EDIT DIRECTLY // See update-tlds.js for encoding/decoding format // https://data.iana.org/TLD/tlds-alpha-by-domain.txt const encodedTlds = 'aaa1rp3barth4b0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0faromeo7ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4vianca6w0s2x0a2z0ure5ba0by2idu3namex3narepublic11d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2ntley5rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re2s2c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y0eats7k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0cast4mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking0channel11l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dabur3d1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t0isalat7u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0at2delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d0network8tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntdoor4ier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0ardian6cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5gtv3iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0eles2s3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6logistics9properties14fh2g1h1i0a1ds2m1nder2le4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3ncaster5ia3d0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4de2k2psy3ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0cys3drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7serati6ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic3tual5v1w1x1y1z2na0b1goya4me2tura4vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rthwesternmutual14on4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9dnavy5lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3ssagens7y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0america6xi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cher3ks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0a1b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp2w2ell3ia1ksha5oes2p0ping5uji3w0time7i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ffany5ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0channel7ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lkswagen7vo3te1ing3o2yage5u0elos6wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4finity6ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2'; // Internationalized domain names containing non-ASCII const encodedUtlds = 'ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5تصالات6رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2'; /** * @template A * @template B * @param {A} target * @param {B} properties * @return {A & B} */ const assign$1 = (target, properties) => { for (const key in properties) { target[key] = properties[key]; } return target; }; /** * Finite State Machine generation utilities */ /** * @template T * @typedef {{ [group: string]: T[] }} Collections */ /** * @typedef {{ [group: string]: true }} Flags */ // Keys in scanner Collections instances const numeric = 'numeric'; const ascii = 'ascii'; const alpha = 'alpha'; const asciinumeric = 'asciinumeric'; const alphanumeric = 'alphanumeric'; const domain = 'domain'; const emoji = 'emoji'; const scheme = 'scheme'; const slashscheme = 'slashscheme'; const whitespace$1 = 'whitespace'; /** * @template T * @param {string} name * @param {Collections<T>} groups to register in * @returns {T[]} Current list of tokens in the given collection */ function registerGroup(name, groups) { if (!(name in groups)) { groups[name] = []; } return groups[name]; } /** * @template T * @param {T} t token to add * @param {Collections<T>} groups * @param {Flags} flags */ function addToGroups(t, flags, groups) { if (flags[numeric]) { flags[asciinumeric] = true; flags[alphanumeric] = true; } if (flags[ascii]) { flags[asciinumeric] = true; flags[alpha] = true; } if (flags[asciinumeric]) { flags[alphanumeric] = true; } if (flags[alpha]) { flags[alphanumeric] = true; } if (flags[alphanumeric]) { flags[domain] = true; } if (flags[emoji]) { flags[domain] = true; } for (const k in flags) { const group = registerGroup(k, groups); if (group.indexOf(t) < 0) { group.push(t); } } } /** * @template T * @param {T} t token to check * @param {Collections<T>} groups * @returns {Flags} group flags that contain this token */ function flagsForToken(t, groups) { const result = {}; for (const c in groups) { if (groups[c].indexOf(t) >= 0) { result[c] = true; } } return result; } /** * @template T * @typedef {null | T } Transition */ /** * Define a basic state machine state. j is the list of character transitions, * jr is the list of regex-match transitions, jd is the default state to * transition to t is the accepting token type, if any. If this is the terminal * state, then it does not emit a token. * * The template type T represents the type of the token this state accepts. This * should be a string (such as of the token exports in `text.js`) or a * MultiToken subclass (from `multi.js`) * * @template T * @param {T} [token] Token that this state emits */ function State(token) { if (token === void 0) { token = null; } // this.n = null; // DEBUG: State name /** @type {{ [input: string]: State<T> }} j */ this.j = {}; // IMPLEMENTATION 1 // this.j = []; // IMPLEMENTATION 2 /** @type {[RegExp, State<T>][]} jr */ this.jr = []; /** @type {?State<T>} jd */ this.jd = null; /** @type {?T} t */ this.t = token; } /** * Scanner token groups * @type Collections<string> */ State.groups = {}; State.prototype = { accepts() { return !!this.t; }, /** * Follow an existing transition from the given input to the next state. * Does not mutate. * @param {string} input character or token type to transition on * @returns {?State<T>} the next state, if any */ go(input) { const state = this; const nextState = state.j[input]; if (nextState) { return nextState; } for (let i = 0; i < state.jr.length; i++) { const regex = state.jr[i][0]; const nextState = state.jr[i][1]; // note: might be empty to prevent default jump if (nextState && regex.test(input)) { return nextState; } } // Nowhere left to jump! Return default, if any return state.jd; }, /** * Whether the state has a transition for the given input. Set the second * argument to true to only look for an exact match (and not a default or * regular-expression-based transition) * @param {string} input * @param {boolean} exactOnly */ has(input, exactOnly) { if (exactOnly === void 0) { exactOnly = false; } return exactOnly ? input in this.j : !!this.go(input); }, /** * Short for "transition all"; create a transition from the array of items * in the given list to the same final resulting state. * @param {string | string[]} inputs Group of inputs to transition on * @param {Transition<T> | State<T>} [next] Transition options * @param {Flags} [flags] Collections flags to add token to * @param {Collections<T>} [groups] Master list of token groups */ ta(inputs, next, flags, groups) { for (let i = 0; i < inputs.length; i++) { this.tt(inputs[i], next, flags, groups); } }, /** * Short for "take regexp transition"; defines a transition for this state * when it encounters a token which matches the given regular expression * @param {RegExp} regexp Regular expression transition (populate first) * @param {T | State<T>} [next] Transition options * @param {Flags} [flags] Collections flags to add token to * @param {Collections<T>} [groups] Master list of token groups * @returns {State<T>} taken after the given input */ tr(regexp, next, flags, groups) { groups = groups || State.groups; let nextState; if (next && next.j) { nextState = next; } else { // Token with maybe token groups nextState = new State(next); if (flags && groups) { addToGroups(next, flags, groups); } } this.jr.push([regexp, nextState]); return nextState; }, /** * Short for "take transitions", will take as many sequential transitions as * the length of the given input and returns the * resulting final state. * @param {string | string[]} input * @param {T | State<T>} [next] Transition options * @param {Flags} [flags] Collections flags to add token to * @param {Collections<T>} [groups] Master list of token groups * @returns {State<T>} taken after the given input */ ts(input, next, flags, groups) { let state = this; const len = input.length; if (!len) { return state; } for (let i = 0; i < len - 1; i++) { state = state.tt(input[i]); } return state.tt(input[len - 1], next, flags, groups); }, /** * Short for "take transition", this is a method for building/working with * state machines. * * If a state already exists for the given input, returns it. * * If a token is specified, that state will emit that token when reached by * the linkify engine. * * If no state exists, it will be initialized with some default transitions * that resemble existing default transitions. * * If a state is given for the second argument, that state will be * transitioned to on the given input regardless of what that input * previously did. * * Specify a token group flags to define groups that this token belongs to. * The token will be added to corresponding entires in the given groups * object. * * @param {string} input character, token type to transition on * @param {T | State<T>} [next] Transition options * @param {Flags} [flags] Collections flags to add token to * @param {Collections<T>} [groups] Master list of groups * @returns {State<T>} taken after the given input */ tt(input, next, flags, groups) { groups = groups || State.groups; const state = this; // Check if existing state given, just a basic transition if (next && next.j) { state.j[input] = next; return next; } const t = next; // Take the transition with the usual default mechanisms and use that as // a template for creating the next state let nextState, templateState = state.go(input); if (templateState) { nextState = new State(); assign$1(nextState.j, templateState.j); nextState.jr.push.apply(nextState.jr, templateState.jr); nextState.jd = templateState.jd; nextState.t = templateState.t; } else { nextState = new State(); } if (t) { // Ensure newly token is in the same groups as the old token if (groups) { if (nextState.t && typeof nextState.t === 'string') { const allFlags = assign$1(flagsForToken(nextState.t, groups), flags); addToGroups(t, allFlags, groups); } else if (flags) { addToGroups(t, flags, groups); } } nextState.t = t; // overwrite anything that was previously there } state.j[input] = nextState; return nextState; } }; // Helper functions to improve minification (not exported outside linkifyjs module) /** * @template T * @param {State<T>} state * @param {string | string[]} input * @param {Flags} [flags] * @param {Collections<T>} [groups] */ const ta = (state, input, next, flags, groups) => state.ta(input, next, flags, groups); /** * @template T * @param {State<T>} state * @param {RegExp} regexp * @param {T | State<T>} [next] * @param {Flags} [flags] * @param {Collections<T>} [groups] */ const tr = (state, regexp, next, flags, groups) => state.tr(regexp, next, flags, groups); /** * @template T * @param {State<T>} state * @param {string | string[]} input * @param {T | State<T>} [next] * @param {Flags} [flags] * @param {Collections<T>} [groups] */ const ts = (state, input, next, flags, groups) => state.ts(input, next, flags, groups); /** * @template T * @param {State<T>} state * @param {string} input * @param {T | State<T>} [next] * @param {Collections<T>} [groups] * @param {Flags} [flags] */ const tt = (state, input, next, flags, groups) => state.tt(input, next, flags, groups); /****************************************************************************** Text Tokens Identifiers for token outputs from the regexp scanner ******************************************************************************/ // A valid web domain token const WORD = 'WORD'; // only contains a-z const UWORD = 'UWORD'; // contains letters other than a-z, used for IDN // Special case of word const LOCALHOST = 'LOCALHOST'; // Valid top-level domain, special case of WORD (see tlds.js) const TLD = 'TLD'; // Valid IDN TLD, special case of UWORD (see tlds.js) const UTLD = 'UTLD'; // The scheme portion of a web URI protocol. Supported types include: `mailto`, // `file`, and user-defined custom protocols. Limited to schemes that contain // only letters const SCHEME = 'SCHEME'; // Similar to SCHEME, except makes distinction for schemes that must always be // followed by `://`, not just `:`. Supported types include `http`, `https`, // `ftp`, `ftps` const SLASH_SCHEME = 'SLASH_SCHEME'; // Any sequence of digits 0-9 const NUM = 'NUM'; // Any number of consecutive whitespace characters that are not newline const WS = 'WS'; // New line (unix style) const NL$1 = 'NL'; // \n // Opening/closing bracket classes const OPENBRACE = 'OPENBRACE'; // { const OPENBRACKET = 'OPENBRACKET'; // [ const OPENANGLEBRACKET = 'OPENANGLEBRACKET'; // < const OPENPAREN = 'OPENPAREN'; // ( const CLOSEBRACE = 'CLOSEBRACE'; // } const CLOSEBRACKET = 'CLOSEBRACKET'; // ] const CLOSEANGLEBRACKET = 'CLOSEANGLEBRACKET'; // > const CLOSEPAREN = 'CLOSEPAREN'; // ) // Various symbols const AMPERSAND = 'AMPERSAND'; // & const APOSTROPHE = 'APOSTROPHE'; // ' const ASTERISK = 'ASTERISK'; // * const AT = 'AT'; // @ const BACKSLASH = 'BACKSLASH'; // \ const BACKTICK = 'BACKTICK'; // ` const CARET = 'CARET'; // ^ const COLON = 'COLON'; // : const COMMA = 'COMMA'; // , const DOLLAR = 'DOLLAR'; // $ const DOT = 'DOT'; // . const EQUALS = 'EQUALS'; // = const EXCLAMATION = 'EXCLAMATION'; // ! const HYPHEN = 'HYPHEN'; // - const PERCENT = 'PERCENT'; // % const PIPE = 'PIPE'; // | const PLUS = 'PLUS'; // + const POUND = 'POUND'; // # const QUERY = 'QUERY'; // ? const QUOTE = 'QUOTE'; // " const SEMI = 'SEMI'; // ; const SLASH = 'SLASH'; // / const TILDE = 'TILDE'; // ~ const UNDERSCORE = 'UNDERSCORE'; // _ // Emoji symbol const EMOJI$1 = 'EMOJI'; // Default token - anything that is not one of the above const SYM = 'SYM'; var tk = /*#__PURE__*/Object.freeze({ __proto__: null, WORD: WORD, UWORD: UWORD, LOCALHOST: LOCALHOST, TLD: TLD, UTLD: UTLD, SCHEME: SCHEME, SLASH_SCHEME: SLASH_SCHEME, NUM: NUM, WS: WS, NL: NL$1, OPENBRACE: OPENBRACE, OPENBRACKET: OPENBRACKET, OPENANGLEBRACKET: OPENANGLEBRACKET, OPENPAREN: OPENPAREN, CLOSEBRACE: CLOSEBRACE, CLOSEBRACKET: CLOSEBRACKET, CLOSEANGLEBRACKET: CLOSEANGLEBRACKET, CLOSEPAREN: CLOSEPAREN, AMPERSAND: AMPERSAND, APOSTROPHE: APOSTROPHE, ASTERISK: ASTERISK, AT: AT, BACKSLASH: BACKSLASH, BACKTICK: BACKTICK, CARET: CARET, COLON: COLON, COMMA: COMMA, DOLLAR: DOLLAR, DOT: DOT, EQUALS: EQUALS, EXCLAMATION: EXCLAMATION, HYPHEN: HYPHEN, PERCENT: PERCENT, PIPE: PIPE, PLUS: PLUS, POUND: POUND, QUERY: QUERY, QUOTE: QUOTE, SEMI: SEMI, SLASH: SLASH, TILDE: TILDE, UNDERSCORE: UNDERSCORE, EMOJI: EMOJI$1, SYM: SYM }); // Note that these two Unicode ones expand into a really big one with Babel const ASCII_LETTER = /[a-z]/; const LETTER = /\p{L}/u; // Any Unicode character with letter data type const EMOJI = /\p{Emoji}/u; // Any Unicode emoji character const DIGIT = /\d/; const SPACE = /\s/; /** The scanner provides an interface that takes a string of text as input, and outputs an array of tokens instances that can be used for easy URL parsing. */ const NL = '\n'; // New line character const EMOJI_VARIATION = '\ufe0f'; // Variation selector, follows heart and others const EMOJI_JOINER = '\u200d'; // zero-width joiner let tlds = null, utlds = null; // don't change so only have to be computed once /** * Scanner output token: * - `t` is the token name (e.g., 'NUM', 'EMOJI', 'TLD') * - `v` is the value of the token (e.g., '123', '❤️', 'com') * - `s` is the start index of the token in the original string * - `e` is the end index of the token in the original string * @typedef {{t: string, v: string, s: number, e: number}} Token */ /** * @template T * @typedef {{ [collection: string]: T[] }} Collections */ /** * Initialize the scanner character-based state machine for the given start * state * @param {[string, boolean][]} customSchemes List of custom schemes, where each * item is a length-2 tuple with the first element set to the string scheme, and * the second element set to `true` if the `://` after the scheme is optional */ function init$2(customSchemes) { if (customSchemes === void 0) { customSchemes = []; } // Frequently used states (name argument removed during minification) /** @type Collections<string> */ const groups = {}; // of tokens State.groups = groups; /** @type State<string> */ const Start = new State(); if (tlds == null) { tlds = decodeTlds(encodedTlds); } if (utlds == null) { utlds = decodeTlds(encodedUtlds); } // States for special URL symbols that accept immediately after start tt(Start, "'", APOSTROPHE); tt(Start, '{', OPENBRACE); tt(Start, '[', OPENBRACKET); tt(Start, '<', OPENANGLEBRACKET); tt(Start, '(', OPENPAREN); tt(Start, '}', CLOSEBRACE); tt(Start, ']', CLOSEBRACKET); tt(Start, '>', CLOSEANGLEBRACKET); tt(Start, ')', CLOSEPAREN); tt(Start, '&', AMPERSAND); tt(Start, '*', ASTERISK); tt(Start, '@', AT); tt(Start, '`', BACKTICK); tt(Start, '^', CARET); tt(Start, ':', COLON); tt(Start, ',', COMMA); tt(Start, '$', DOLLAR); tt(Start, '.', DOT); tt(Start, '=', EQUALS); tt(Start, '!', EXCLAMATION); tt(Start, '-', HYPHEN); tt(Start, '%', PERCENT); tt(Start, '|', PIPE); tt(Start, '+', PLUS); tt(Start, '#', POUND); tt(Start, '?', QUERY); tt(Start, '"', QUOTE); tt(Start, '/', SLASH); tt(Start, ';', SEMI); tt(Start, '~', TILDE); tt(Start, '_', UNDERSCORE); tt(Start, '\\', BACKSLASH); const Num = tr(Start, DIGIT, NUM, { [numeric]: true }); tr(Num, DIGIT, Num); // State which emits a word token const Word = tr(Start, ASCII_LETTER, WORD, { [ascii]: true }); tr(Word, ASCII_LETTER, Word); // Same as previous, but specific to non-fsm.ascii alphabet words const UWord = tr(Start, LETTER, UWORD, { [alpha]: true }); tr(UWord, ASCII_LETTER); // Non-accepting tr(UWord, LETTER, UWord); // Whitespace jumps // Tokens of only non-newline whitespace are arbitrarily long // If any whitespace except newline, more whitespace! const Ws = tr(Start, SPACE, WS, { [whitespace$1]: true }); tt(Start, NL, NL$1, { [whitespace$1]: true }); tt(Ws, NL); // non-accepting state to avoid mixing whitespaces tr(Ws, SPACE, Ws); // Emoji tokens. They are not grouped by the scanner except in cases where a // zero-width joiner is present const Emoji = tr(Start, EMOJI, EMOJI$1, { [emoji]: true }); tr(Emoji, EMOJI, Emoji); tt(Emoji, EMOJI_VARIATION, Emoji); // tt(Start, EMOJI_VARIATION, Emoji); // This one is sketchy const EmojiJoiner = tt(Emoji, EMOJI_JOINER); tr(EmojiJoiner, EMOJI, Emoji); // tt(EmojiJoiner, EMOJI_VARIATION, Emoji); // also sketchy // Generates states for top-level domains // Note that this is most accurate when tlds are in alphabetical order const wordjr = [[ASCII_LETTER, Word]]; const uwordjr = [[ASCII_LETTER, null], [LETTER, UWord]]; for (let i = 0; i < tlds.length; i++) { fastts(Start, tlds[i], TLD, WORD, wordjr); } for (let i = 0; i < utlds.length; i++) { fastts(Start, utlds[i], UTLD, UWORD, uwordjr); } addToGroups(TLD, { tld: true, ascii: true }, groups); addToGroups(UTLD, { utld: true, alpha: true }, groups); // Collect the states generated by different protocols. NOTE: If any new TLDs // get added that are also protocols, set the token to be the same as the // protocol to ensure parsing works as expected. fastts(Start, 'file', SCHEME, WORD, wordjr); fastts(Start, 'mailto', SCHEME, WORD, wordjr); fastts(Start, 'http', SLASH_SCHEME, WORD, wordjr); fastts(Start, 'https', SLASH_SCHEME, WORD, wordjr); fastts(Start, 'ftp', SLASH_SCHEME, WORD, wordjr); fastts(Start, 'ftps', SLASH_SCHEME, WORD, wordjr); addToGroups(SCHEME, { scheme: true, ascii: true }, groups); addToGroups(SLASH_SCHEME, { slashscheme: true, ascii: true }, groups); // Register custom schemes. Assumes each scheme is asciinumeric with hyphens customSchemes = customSchemes.sort((a, b) => a[0] > b[0] ? 1 : -1); for (let i = 0; i < customSchemes.length; i++) { const sch = customSchemes[i][0]; const optionalSlashSlash = customSchemes[i][1]; const flags = optionalSlashSlash ? { [scheme]: true } : { [slashscheme]: true }; if (sch.indexOf('-') >= 0) { flags[domain] = true; } else if (!ASCII_LETTER.test(sch)) { flags[numeric] = true; // numbers only } else if (DIGIT.test(sch)) { flags[asciinumeric] = true; } else { flags[ascii] = true; } ts(Start, sch, sch, flags); } // Localhost token ts(Start, 'localhost', LOCALHOST, { ascii: true }); // Set default transition for start state (some symbol) Start.jd = new State(SYM); return { start: Start, tokens: assign$1({ groups }, tk) }; } /** Given a string, returns an array of TOKEN instances representing the composition of that string. @method run @param {State<string>} start scanner starting state @param {string} str input string to scan @return {Token[]} list of tokens, each with a type and value */ function run$1(start, str) { // State machine is not case sensitive, so input is tokenized in lowercased // form (still returns regular case). Uses selective `toLowerCase` because // lowercasing the entire string causes the length and character position to // vary in some non-English strings with V8-based runtimes. const iterable = stringToArray(str.replace(/[A-Z]/g, c => c.toLowerCase())); const charCount = iterable.length; // <= len if there are emojis, etc const tokens = []; // return value // cursor through the string itself, accounting for characters that have // width with length 2 such as emojis let cursor = 0; // Cursor through the array-representation of the string let charCursor = 0; // Tokenize the string while (charCursor < charCount) { let state = start; let nextState = null; let tokenLength = 0; let latestAccepting = null; let sinceAccepts = -1; let charsSinceAccepts = -1; while (charCursor < charCount && (nextState = state.go(iterable[charCursor]))) { state = nextState; // Keep track of the latest accepting state if (state.accepts()) { sinceAccepts = 0; charsSinceAccepts = 0; latestAccepting = state; } else if (sinceAccepts >= 0) { sinceAccepts += iterable[charCursor].length; charsSinceAccepts++; } tokenLength += iterable[charCursor].length; cursor += iterable[charCursor].length; charCursor++; } // Roll back to the latest accepting state cursor -= sinceAccepts; charCursor -= charsSinceAccepts; tokenLength -= sinceAccepts; // No more jumps, just make a new token from the last accepting one tokens.push({ t: latestAccepting.t, // token type/name v: str.slice(cursor - tokenLength, cursor), // string value s: cursor - tokenLength, // start index e: cursor // end index (excluding) }); } return tokens; } /** * Convert a String to an Array of characters, taking into account that some * characters like emojis take up two string indexes. * * Adapted from core-js (MIT license) * https://github.com/zloirock/core-js/blob/2d69cf5f99ab3ea3463c395df81e5a15b68f49d9/packages/core-js/internals/string-multibyte.js * * @function stringToArray * @param {string} str * @returns {string[]} */ function stringToArray(str) { const result = []; const len = str.length; let index = 0; while (index < len) { let first = str.charCodeAt(index); let second; let char = first < 0xd800 || first > 0xdbff || index + 1 === len || (second = str.charCodeAt(index + 1)) < 0xdc00 || second > 0xdfff ? str[index] // single character : str.slice(index, index + 2); // two-index characters result.push(char); index += char.length; } return result; } /** * Fast version of ts function for when transition defaults are well known * @param {State<string>} state * @param {string} input * @param {string} t * @param {string} defaultt * @param {[RegExp, State<string>][]} jr * @returns {State<string>} */ function fastts(state, input, t, defaultt, jr) { let next; const len = input.length; for (let i = 0; i < len - 1; i++) { const char = input[i]; if (state.j[char]) { next = state.j[char]; } else { next = new State(defaultt); next.jr = jr.slice(); state.j[char] = next; } state = next; } next = new State(t); next.jr = jr.slice(); state.j[input[len - 1]] = next; return next; } /** * Converts a string of Top-Level Domain names encoded in update-tlds.js back * into a list of strings. * @param {str} encoded encoded TLDs string * @returns {str[]} original TLDs list */ function decodeTlds(encoded) { const words = []; const stack = []; let i = 0; let digits = '0123456789'; while (i < encoded.length) { let popDigitCount = 0; while (digits.indexOf(encoded[i + popDigitCount]) >= 0) { popDigitCount++; // encountered some digits, have to pop to go one level up trie } if (popDigitCount > 0) { words.push(stack.join('')); // whatever preceded the pop digits must be a word for (let popCount = parseInt(encoded.substring(i, i + popDigitCount), 10); popCount > 0; popCount--) { stack.pop(); } i += popDigitCount; } else { stack.push(encoded[i]); // drop down a level into the trie i++; } } return words; } /** * An object where each key is a valid DOM Event Name such as `click` or `focus` * and each value is an event handler function. * * https://developer.mozilla.org/en-US/docs/Web/API/Element#events * @typedef {?{ [event: string]: Function }} EventListeners */ /** * All formatted properties required to render a link, including `tagName`, * `attributes`, `content` and `eventListeners`. * @typedef {{ tagName: any, attributes: {[attr: string]: any}, content: string, * eventListeners: EventListeners }} IntermediateRepresentation */ /** * Specify either an object described by the template type `O` or a function. * * The function takes a string value (usually the link's href attribute), the * link type (`'url'`, `'hashtag`', etc.) and an internal token representation * of the link. It should return an object of the template type `O` * @template O * @typedef {O | ((value: string, type: string, token: MultiToken) => O)} OptObj */ /** * Specify either a function described by template type `F` or an object. * * Each key in the object should be a link type (`'url'`, `'hashtag`', etc.). Each * value should be a function with template type `F` that is called when the * corresponding link type is encountered. * @template F * @typedef {F | { [type: string]: F}} OptFn */ /** * Specify either a value with template type `V`, a function that returns `V` or * an object where each value resolves to `V`. * * The function takes a string value (usually the link's href attribute), the * link type (`'url'`, `'hashtag`', etc.) and an internal token representation * of the link. It should return an object of the template type `V` * * For the object, each key should be a link type (`'url'`, `'hashtag`', etc.). * Each value should either have type `V` or a function that returns V. This * function similarly takes a string value and a token. * * Example valid types for `Opt<string>`: * * ```js * 'hello' * (value, type, token) => 'world' * { url: 'hello', email: (value, token) => 'world'} * ``` * @template V * @typedef {V | ((value: string, type: string, token: MultiToken) => V) | { [type: string]: V | ((value: string, token: MultiToken) => V) }} Opt */ /** * See available options: https://linkify.js.org/docs/options.html * @typedef {{ * defaultProtocol?: string, * events?: OptObj<EventListeners>, * format?: Opt<string>, * formatHref?: Opt<string>, * nl2br?: boolean, * tagName?: Opt<any>, * target?: Opt<string>, * rel?: Opt<string>, * validate?: Opt<boolean>, * truncate?: Opt<number>, * className?: Opt<string>, * attributes?: OptObj<({ [attr: string]: any })>, * ignoreTags?: string[], * render?: OptFn<((ir: IntermediateRepresentation) => any)> * }} Opts */ /** * @type Required<Opts> */ const defaults = { defaultProtocol: 'http', events: null, format: noop$3, formatHref: noop$3, nl2br: false, tagName: 'a', target: null, rel: null, validate: true, truncate: Infinity, className: null, attributes: null, ignoreTags: [], render: null }; /** * Utility class for linkify interfaces to apply specified * {@link Opts formatting and rendering options}. * * @param {Opts | Options} [opts] Option value overrides. * @param {(ir: IntermediateRepresentation) => any} [defaultRender] (For * internal use) default render function that determines how to generate an * HTML element based on a link token's derived tagName, attributes and HTML. * Similar to render option */ function Options(opts, defaultRender) { if (defaultRender === void 0) { defaultRender = null; } let o = assign$1({}, defaults); if (opts) { o = assign$1(o, opts instanceof Options ? opts.o : opts); } // Ensure all ignored tags are uppercase const ignoredTags = o.ignoreTags; const uppercaseIgnoredTags = []; for (let i = 0; i < ignoredTags.length; i++) { uppercaseIgnoredTags.push(ignoredTags[i].toUpperCase()); } /** @protected */ this.o = o; if (defaultRender) { this.defaultRender = defaultRender; } this.ignoreTags = uppercaseIgnoredTags; } Options.prototype = { o: defaults, /** * @type string[] */ ignoreTags: [], /** * @param {IntermediateRepresentation} ir * @returns {any} */ defaultRender(ir) { return ir; }, /** * Returns true or false based on whether a token should be displayed as a * link based on the user options. * @param {MultiToken} token * @returns {boolean} */ check(token) { return this.get('validate', token.toString(), token); }, // Private methods /** * Resolve an option's value based on the value of the option and the given * params. If operator and token are specified and the target option is * callable, automatically calls the function with the given argument. * @template {keyof Opts} K * @param {K} key Name of option to use * @param {string} [operator] will be passed to the target option if it's a * function. If not specified, RAW function value gets returned * @param {MultiToken} [token] The token from linkify.tokenize * @returns {Opts[K] | any} */ get(key, operator, token) { const isCallable = operator != null; let option = this.o[key]; if (!option) { return option; } if (typeof option === 'object') { option = token.t in option ? option[token.t] : defaults[key]; if (typeof option === 'function' && isCallable) { option = option(operator, token); } } else if (typeof option === 'function' && isCallable) { option = option(operator, token.t, token); } return option; }, /** * @template {keyof Opts} L * @param {L} key Name of options object to use * @param {string} [operator] * @param {MultiToken} [token] * @returns {Opts[L] | any} */ getObj(key, operator, token) { let obj = this.o[key]; if (typeof obj === 'function' && operator != null) { obj = obj(operator, token.t, token); } return obj; }, /** * Convert the given token to a rendered element that may be added to the * calling-interface's DOM * @param {MultiToken} token Token to render to an HTML element * @returns {any} Render result; e.g., HTML string, DOM element, React * Component, etc. */ render(token) { const ir = token.render(this); // intermediate representation const renderFn = this.get('render', null, token) || this.defaultRender; return renderFn(ir, token.t, token); } }; function noop$3(val) { return val; } /****************************************************************************** Multi-Tokens Tokens composed of arrays of TextTokens ******************************************************************************/ /** * @param {string} value * @param {Token[]} tokens */ function MultiToken(value, tokens) { this.t = 'token'; this.v = value; this.tk = tokens; } /** * Abstract class used for manufacturing tokens of text tokens. That is rather * than the value for a token being a small string of text, it's value an array * of text tokens. * * Used for grouping together URLs, emails, hashtags, and other potential * creations. * @class MultiToken * @property {string} t * @property {string} v * @property {Token[]} tk * @abstract */ MultiToken.prototype = { isLink: false, /** * Return the string this token represents. * @return {string} */ toString() { return this.v; }, /** * What should the value for this token be in the `href` HTML attribute? * Returns the `.toString` value by default. * @param {string} [scheme] * @return {string} */ toHref(scheme) { return this.toString(); }, /** * @param {Options} options Formatting options * @returns {string} */ toFormattedString(options) { const val = this.toString(); const truncate = options.get('truncate', val, this); const formatted = options.get('format', val, this); return truncate && formatted.length > truncate ? formatted.substring(0, truncate) + '…' : formatted; }, /** * * @param {Options} options * @returns {string} */ toFormattedHref(options) { return options.get('formatHref', this.toHref(options.get('defaultProtocol')), this); }, /** * The start index of this token in the original input string * @returns {number} */ startIndex() { return this.tk[0].s; }, /** * The end index of this token in the original input string (up to this * index but not including it) * @returns {number} */ endIndex() { return this.tk[this.tk.length - 1].e; }, /** Returns an object of relevant values for this token, which includes keys * type - Kind of token ('url', 'email', etc.) * value - Original text * href - The value that should be added to the anchor tag's href attribute @method toObject @param {string} [protocol] `'http'` by default */ toObject(protocol) { if (protocol === void 0) { protocol = defaults.defaultProtocol; } return { type: this.t, value: this.toString(), isLink: this.isLink, href: this.toHref(protocol), start: this.startIndex(), end: this.endIndex() }; }, /** * * @param {Options} options Formatting option */ toFormattedObject(options) { return { type: this.t, value: this.toFormattedString(options), isLink: this.isLink, href: this.toFormattedHref(options), start: this.startIndex(), end: this.endIndex() }; }, /** * Whether this token should be rendered as a link according to the given options * @param {Options} options * @returns {boolean} */ validate(options) { return options.get('validate', this.toString(), this); }, /** * Return an object that represents how this link should be rendered. * @param {Options} options Formattinng options */ render(options) { const token = this; const href = this.toHref(options.get('defaultProtocol')); const formattedHref = options.get('formatHref', href, this); const tagName = options.get('tagName', href, token); const content = this.toFormattedString(options); const attributes = {}; const className = options.get('className', href, token); const target = options.get('target', href, token); const rel = options.get('rel', href, token); const attrs = options.getObj('attributes', href, token); const eventListeners = options.getObj('events', href, token); attributes.href = formattedHref; if (className) { attributes.class = className; } if (target) { attributes.target = target; } if (rel) { attributes.rel = rel; } if (attrs) { assign$1(attributes, attrs); } return { tagName, attributes, content, eventListeners }; } }; /** * Create a new token that can be emitted by the parser state machine * @param {string} type readable type of the token * @param {object} props properties to assign or override, including isLink = true or false * @returns {new (value: string, tokens: Token[]) => MultiToken} new token class */ function createTokenClass(type, props) { class Token extends MultiToken { constructor(value, tokens) { super(value, tokens); this.t = type; } } for (const p in props) { Token.prototype[p] = props[p]; } Token.t = type; return Token; } /** Represents a list of tokens making up a valid email address */ const Email = createTokenClass('email', { isLink: true, toHref() { return 'mailto:' + this.toString(); } }); /** Represents some plain text */ const Text$1 = createTokenClass('text'); /** Multi-linebreak token - represents a line break @class Nl */ const Nl = createTokenClass('nl'); /** Represents a list of text tokens making up a valid URL @class Url */ const Url = createTokenClass('url', { isLink: true, /** Lowercases relevant parts of the domain and adds the protocol if required. Note that this will not escape unsafe HTML characters in the URL. @param {string} [scheme] default scheme (e.g., 'https') @return {string} the full href */ toHref(scheme) { if (scheme === void 0) { scheme = defaults.defaultProtocol; } // Check if already has a prefix scheme return this.hasProtocol() ? this.v : `${scheme}://${this.v}`; }, /** * Check whether this URL token has a protocol * @return {boolean} */ hasProtocol() { const tokens = this.tk; return tokens.length >= 2 && tokens[0].t !== LOCALHOST && tokens[1].t === COLON; } }); /** Not exactly parser, more like the second-stage scanner (although we can theoretically hotswap the code here with a real parser in the future... but for a little URL-finding utility abstract syntax trees may be a little overkill). URL format: http://en.wikipedia.org/wiki/URI_scheme Email format: http://en.wikipedia.org/wiki/EmailAddress (links to RFC in reference) @module linkify @submodule parser @main run */ const makeState = arg => new State(arg); /** * Generate the parser multi token-based state machine * @param {{ groups: Collections<string> }} tokens */ function init$1(_ref) { let { groups } = _ref; // Types of characters the URL can definitely end in const qsAccepting = groups.domain.concat([AMPERSAND, ASTERISK, AT, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, NUM, PERCENT, PIPE, PLUS, POUND, SLASH, SYM, TILDE, UNDERSCORE]); // Types of tokens that can follow a URL and be part of the query string // but cannot be the very last characters // Characters that cannot appear in the URL at all should be excluded const qsNonAccepting = [APOSTROPHE, CLOSEANGLEBRACKET, CLOSEBRACE, CLOSEBRACKET, CLOSEPAREN, COLON, COMMA, DOT, EXCLAMATION, OPENANGLEBRACKET, OPENBRACE, OPENBRACKET, OPENPAREN, QUERY, QUOTE, SEMI]; // For addresses without the mailto prefix // Tokens allowed in the localpart of the email const localpartAccepting = [AMPERSAND, APOSTROPHE, ASTERISK, BACKSLASH, BACKTICK, CARET, CLOSEBRACE, DOLLAR, EQUALS, HYPHEN, OPENBRACE, PERCENT, PIPE, PLUS, POUND, QUERY, SLASH, SYM, TILDE, UNDERSCORE]; // The universal starting state. /** * @type State<Token> */ const Start = makeState(); const Localpart = tt(Start, TILDE); // Local part of the email address ta(Localpart, localpartAccepting, Localpart); ta(Localpart, groups.domain, Localpart); const Domain = makeState(), Scheme = makeState(), SlashScheme = makeState(); ta(Start, groups.domain, Domain); // parsed string ends with a potential domain name (A) ta(Start, groups.scheme, Scheme); // e.g., 'mailto' ta(Start, groups.slashscheme, SlashScheme); // e.g., 'http' ta(Domain, localpartAccepting, Localpart); ta(Domain, groups.domain, Domain); const LocalpartAt = tt(Domain, AT); // Local part of the email address plus @ tt(Localpart, AT, LocalpartAt); // close to an email address now // Local part of an email address can be e.g. 'http' or 'mailto' tt(Scheme, AT, LocalpartAt); tt(SlashScheme, AT, LocalpartAt); const LocalpartDot = tt(Localpart, DOT); // Local part of the email address plus '.' (localpart cannot end in .) ta(LocalpartDot, localpartAccepting, Localpart); ta(LocalpartDot, groups.domain, Localpart); const EmailDomain = makeState(); ta(LocalpartAt, groups.domain, EmailDomain); // parsed string starts with local email info + @ with a potential domain name ta(EmailDomain, groups.domain, EmailDomain); const EmailDomainDot = tt(EmailDomain, DOT); // domain followed by DOT ta(EmailDomainDot, groups.domain, EmailDomain); const Email$1 = makeState(Email); // Possible email address (could have more tlds) ta(EmailDomainDot, groups.tld, Email$1); ta(EmailDomainDot, groups.utld, Email$1); tt(LocalpartAt, LOCALHOST, Email$1); // Hyphen can jump back to a domain name const EmailDomainHyphen = tt(EmailDomain, HYPHEN); // parsed string starts with local email info + @ with a potential domain name ta(EmailDomainHyphen, groups.domain, EmailDomain); ta(Email$1, groups.domain, EmailDomain); tt(Email$1, DOT, EmailDomainDot); tt(Email$1, HYPHEN, EmailDomainHyphen); // Final possible email states const EmailColon = tt(Email$1, COLON); // URL followed by colon (potential port number here) /*const EmailColonPort = */ ta(EmailColon, groups.numeric, Email); // URL followed by colon and port numner // Account for dots and hyphens. Hyphens are usually parts of domain names // (but not TLDs) const DomainHyphen = tt(Domain, HYPHEN); // domain followed by hyphen const DomainDot = tt(Domain, DOT); // domain followed by DOT ta(DomainHyphen, groups.domain, Domain); ta(DomainDot, localpartAccepting, Localpart); ta(DomainDot, groups.domain, Domain); const DomainDotTld = makeState(Url); // Simplest possible URL with no query string ta(DomainDot, groups.tld, DomainDotTld); ta(DomainDot, groups.utld, DomainDotTld); ta(DomainDotTld, groups.domain, Domain); ta(DomainDotTld, localpartAccepting, Localpart); tt(DomainDotTld, DOT, DomainDot); tt(DomainDotTld, HYPHEN, DomainHyphen); tt(DomainDotTld, AT, LocalpartAt); const DomainDotTldColon = tt(DomainDotTld, COLON); // URL followed by colon (potential port number here) const DomainDotTldColonPort = makeState(Url); // TLD followed by a port number ta(DomainDotTldColon, groups.numeric, DomainDotTldColonPort); // Long URL with optional port and maybe query string const Url$1 = makeState(Url); // URL with extra symbols at the end, followed by an opening bracket const UrlNonaccept = makeState(); // URL followed by some symbols (will not be part of the final URL) // Query strings ta(Url$1, qsAccepting, Url$1); ta(Url$1, qsNonAccepting, UrlNonaccept); ta(UrlNonaccept, qsAccepting, Url$1); ta(UrlNonaccept, qsNonAccepting, UrlNonaccept); // Become real URLs after `SLASH` or `COLON NUM SLASH` // Here works with or without scheme:// prefix tt(DomainDotTld, SLASH, Url$1); tt(DomainDotTldColonPort, SLASH, Url$1); // Note that domains that begin with schemes are treated slighly differently const SchemeColon = tt(Scheme, COLON); // e.g., 'mailto:' const SlashSchemeColon = tt(SlashScheme, COLON); // e.g., 'http:' const SlashSchemeColonSlash = tt(SlashSchemeColon, SLASH); // e.g., 'http:/' const UriPrefix = tt(SlashSchemeColonSlash, SLASH); // e.g., 'http://' // Scheme states can transition to domain states ta(Scheme, groups.domain, Domain); tt(Scheme, DOT, DomainDot); tt(Scheme, HYPHEN, DomainHyphen); ta(SlashScheme, groups.domain, Domain); tt(SlashScheme, DOT, DomainDot); tt(SlashScheme, HYPHEN, DomainHyphen); // Force URL with scheme prefix followed by anything sane ta(SchemeColon, groups.domain, Url$1); tt(SchemeColon, SLASH, Url$1); ta(UriPrefix, groups.domain, Url$1); ta(UriPrefix, qsAccepting, Url$1); tt(UriPrefix, SLASH, Url$1); // URL, followed by an opening bracket const UrlOpenbrace = tt(Url$1, OPENBRACE); // URL followed by { const UrlOpenbracket = tt(Url$1, OPENBRACKET); // URL followed by [ const UrlOpenanglebracket = tt(Url$1, OPENANGLEBRACKET); // URL followed by < const UrlOpenparen = tt(Url$1, OPENPAREN); // URL followed by ( tt(UrlNonaccept, OPENBRACE, UrlOpenbrace); tt(UrlNonaccept, OPENBRACKET, UrlOpenbracket); tt(UrlNonaccept, OPENANGLEBRACKET, UrlOpenanglebracket); tt(UrlNonaccept, OPENPAREN, UrlOpenparen); // Closing bracket component. This character WILL be included in the URL tt(UrlOpenbrace, CLOSEBRACE, Url$1); tt(UrlOpenbracket, CLOSEBRACKET, Url$1); tt(UrlOpenanglebracket, CLOSEANGLEBRACKET, Url$1); tt(UrlOpenparen, CLOSEPAREN, Url$1); tt(UrlOpenbrace, CLOSEBRACE, Url$1); // URL that beings with an opening bracket, followed by a symbols. // Note that the final state can still be `UrlOpenbrace` (if the URL only // has a single opening bracket for some reason). const UrlOpenbraceQ = makeState(Url); // URL followed by { and some symbols that the URL can end it const UrlOpenbracketQ = makeState(Url); // URL followed by [ and some symbols that the URL can end it const UrlOpenanglebracketQ = makeState(Url); // URL followed by < and some symbols that the URL can end it const UrlOpenparenQ = makeState(Url); // URL followed by ( and some symbols that the URL can end it ta(UrlOpenbrace, qsAccepting, UrlOpenbraceQ); ta(UrlOpenbracket, qsAccepting, UrlOpenbracketQ); ta(UrlOpenanglebracket, qsAccepting, UrlOpenanglebracketQ); ta(UrlOpenparen, qsAccepting, UrlOpenparenQ); const UrlOpenbraceSyms = makeState(); // UrlOpenbrace followed by some symbols it cannot end it const UrlOpenbracketSyms = makeState(); // UrlOpenbracketQ followed by some symbols it cannot end it const UrlOpenanglebracketSyms = makeState(); // UrlOpenanglebracketQ followed by some symbols it cannot end it const UrlOpenparenSyms = makeState(); // UrlOpenparenQ followed by some symbols it cannot end it ta(UrlOpenbrace, qsNonAccepting); ta(UrlOpenbracket, qsNonAccepting); ta(UrlOpenanglebracket, qsNonAccepting); ta(UrlOpenparen, qsNonAccepting); // URL that begins with an opening bracket, followed by some symbols ta(UrlOpenbraceQ, qsAccepting, UrlOpenbraceQ); ta(UrlOpenbracketQ, qsAccepting, UrlOpenbracketQ); ta(UrlOpenanglebracketQ, qsAccepting, UrlOpenanglebracketQ); ta(UrlOpenparenQ, qsAccepting, UrlOpenparenQ); ta(UrlOpenbraceQ, qsNonAccepting, UrlOpenbraceQ); ta(UrlOpenbracketQ, qsNonAccepting, UrlOpenbracketQ); ta(UrlOpenanglebracketQ, qsNonAccepting, UrlOpenanglebracketQ); ta(UrlOpenparenQ, qsNonAccepting, UrlOpenparenQ); ta(UrlOpenbraceSyms, qsAccepting, UrlOpenbraceSyms); ta(UrlOpenbracketSyms, qsAccepting, UrlOpenbracketQ); ta(UrlOpenanglebracketSyms, qsAccepting, UrlOpenanglebracketQ); ta(UrlOpenparenSyms, qsAccepting, UrlOpenparenQ); ta(UrlOpenbraceSyms, qsNonAccepting, UrlOpenbraceSyms); ta(UrlOpenbracketSyms, qsNonAccepting, UrlOpenbracketSyms); ta(UrlOpenanglebracketSyms, qsNonAccepting, UrlOpenanglebracketSyms); ta(UrlOpenparenSyms, qsNonAccepting, UrlOpenparenSyms); // Close brace/bracket to become regular URL tt(UrlOpenbracketQ, CLOSEBRACKET, Url$1); tt(UrlOpenanglebracketQ, CLOSEANGLEBRACKET, Url$1); tt(UrlOpenparenQ, CLOSEPAREN, Url$1); tt(UrlOpenbraceQ, CLOSEBRACE, Url$1); tt(UrlOpenbracketSyms, CLOSEBRACKET, Url$1); tt(UrlOpenanglebracketSyms, CLOSEANGLEBRACKET, Url$1); tt(UrlOpenparenSyms, CLOSEPAREN, Url$1); tt(UrlOpenbraceSyms, CLOSEPAREN, Url$1); tt(Start, LOCALHOST, DomainDotTld); // localhost is a valid URL state tt(Start, NL$1, Nl); // single new line return { start: Start, tokens: tk }; } /** * Run the parser state machine on a list of scanned string-based tokens to * create a list of multi tokens, each of which represents a URL, email address, * plain text, etc. * * @param {State<MultiToken>} start parser start state * @param {string} input the original input used to generate the given tokens * @param {Token[]} tokens list of scanned tokens * @returns {MultiToken[]} */ function run(start, input, tokens) { let len = tokens.length; let cursor = 0; let multis = []; let textTokens = []; while (cursor < len) { let state = start; let secondState = null; let nextState = null; let multiLength = 0; let latestAccepting = null; let sinceAccepts = -1; while (cursor < len && !(secondState = state.go(tokens[cursor].t))) { // Starting tokens with nowhere to jump to. // Consider these to be just plain text textTokens.push(tokens[cursor++]); } while (cursor < len && (nextState = secondState || state.go(tokens[cursor].t))) { // Get the next state secondState = null; state = nextState; // Keep track of the latest accepting state if (state.accepts()) { sinceAccepts = 0; latestAccepting = state; } else if (sinceAccepts >= 0) { sinceAccepts++; } cursor++; multiLength++; } if (sinceAccepts < 0) { // No accepting state was found, part of a regular text token add // the first text token to the text tokens array and try again from // the next cursor -= multiLength; if (cursor < len) { textTokens.push(tokens[cursor]); cursor++; } } else { // Accepting state! // First close off the textTokens (if available) if (textTokens.length > 0) { multis.push(initMultiToken(Text$1, input, textTokens)); textTokens = []; } // Roll back to the latest accepting state cursor -= sinceAccepts; multiLength -= sinceAccepts; // Create a new multitoken const Multi = latestAccepting.t; const subtokens = tokens.slice(cursor - multiLength, cursor); multis.push(initMultiToken(Multi, input, subtokens)); } } // Finally close off the textTokens (if available) if (textTokens.length > 0) { multis.push(initMultiToken(Text$1, input, textTokens)); } return multis; } /** * Utility function for instantiating a new multitoken with all the relevant * fields during parsing. * @param {new (value: string, tokens: Token[]) => MultiToken} Multi class to instantiate * @param {string} input original input string * @param {Token[]} tokens consecutive tokens scanned from input string * @returns {MultiToken} */ function initMultiToken(Multi, input, tokens) { const startIdx = tokens[0].s; const endIdx = tokens[tokens.length - 1].e; const value = input.slice(startIdx, endIdx); return new Multi(value, tokens); } const warn = typeof console !== 'undefined' && console && console.warn || (() => {}); const warnAdvice = 'until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.'; // Side-effect initialization state const INIT = { scanner: null, parser: null, tokenQueue: [], pluginQueue: [], customSchemes: [], initialized: false }; /** * @typedef {{ * start: State<string>, * tokens: { groups: Collections<string> } & typeof tk * }} ScannerInit */ /** * @typedef {{ * start: State<MultiToken>, * tokens: typeof multi * }} ParserInit */ /** * @typedef {(arg: { scanner: ScannerInit }) => void} TokenPlugin */ /** * @typedef {(arg: { scanner: ScannerInit, parser: ParserInit }) => void} Plugin */ /** * De-register all plugins and reset the internal state-machine. Used for * testing; not required in practice. * @private */ function reset() { State.groups = {}; INIT.scanner = null; INIT.parser = null; INIT.tokenQueue = []; INIT.pluginQueue = []; INIT.customSchemes = []; INIT.initialized = false; } /** * Detect URLs with the following additional protocol. Anything with format * "protocol://..." will be considered a link. If `optionalSlashSlash` is set to * `true`, anything with format "protocol:..." will be considered a link. * @param {string} protocol * @param {boolean} [optionalSlashSlash] */ function registerCustomProtocol(scheme, optionalSlashSlash) { if (optionalSlashSlash === void 0) { optionalSlashSlash = false; } if (INIT.initialized) { warn(`linkifyjs: already initialized - will not register custom scheme "${scheme}" ${warnAdvice}`); } if (!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(scheme)) { throw new Error('linkifyjs: incorrect scheme format.\n 1. Must only contain digits, lowercase ASCII letters or "-"\n 2. Cannot start or end with "-"\n 3. "-" cannot repeat'); } INIT.customSchemes.push([scheme, optionalSlashSlash]); } /** * Initialize the linkify state machine. Called automatically the first time * linkify is called on a string, but may be called manually as well. */ function init() { // Initialize scanner state machine and plugins INIT.scanner = init$2(INIT.customSchemes); for (let i = 0; i < INIT.tokenQueue.length; i++) { INIT.tokenQueue[i][1]({ scanner: INIT.scanner }); } // Initialize parser state machine and plugins INIT.parser = init$1(INIT.scanner.tokens); for (let i = 0; i < INIT.pluginQueue.length; i++) { INIT.pluginQueue[i][1]({ scanner: INIT.scanner, parser: INIT.parser }); } INIT.initialized = true; } /** * Parse a string into tokens that represent linkable and non-linkable sub-components * @param {string} str * @return {MultiToken[]} tokens */ function tokenize(str) { if (!INIT.initialized) { init(); } return run(INIT.parser.start, str, run$1(INIT.scanner.start, str)); } /** * Find a list of linkable items in the given string. * @param {string} str string to find links in * @param {string | Opts} [type] either formatting options or specific type of * links to find, e.g., 'url' or 'email' * @param {Opts} [opts] formatting options for final output. Cannot be specified * if opts already provided in `type` argument */ function find(str, type, opts) { if (type === void 0) { type = null; } if (opts === void 0) { opts = null; } if (type && typeof type === 'object') { if (opts) { throw Error(`linkifyjs: Invalid link type ${type}; must be a string`); } opts = type; type = null; } const options = new Options(opts); const tokens = tokenize(str); const filtered = []; for (let i = 0; i < tokens.length; i++) { const token = tokens[i]; if (token.isLink && (!type || token.t === type)) { filtered.push(token.toFormattedObject(options)); } } return filtered; } function autolink(options) { return new Plugin({ key: new PluginKey('autolink'), appendTransaction: (transactions, oldState, newState) => { const docChanges = transactions.some(transaction => transaction.docChanged) && !oldState.doc.eq(newState.doc); const preventAutolink = transactions.some(transaction => transaction.getMeta('preventAutolink')); if (!docChanges || preventAutolink) { return; } const { tr } = newState; const transform = combineTransactionSteps(oldState.doc, [...transactions]); const changes = getChangedRanges(transform); changes.forEach(({ newRange }) => { // Now let’s see if we can add new links. const nodesInChangedRanges = findChildrenInRange(newState.doc, newRange, node => node.isTextblock); let textBlock; let textBeforeWhitespace; if (nodesInChangedRanges.length > 1) { // Grab the first node within the changed ranges (ex. the first of two paragraphs when hitting enter). textBlock = nodesInChangedRanges[0]; textBeforeWhitespace = newState.doc.textBetween(textBlock.pos, textBlock.pos + textBlock.node.nodeSize, undefined, ' '); } else if (nodesInChangedRanges.length // We want to make sure to include the block seperator argument to treat hard breaks like spaces. && newState.doc.textBetween(newRange.from, newRange.to, ' ', ' ').endsWith(' ')) { textBlock = nodesInChangedRanges[0]; textBeforeWhitespace = newState.doc.textBetween(textBlock.pos, newRange.to, undefined, ' '); } if (textBlock && textBeforeWhitespace) { const wordsBeforeWhitespace = textBeforeWhitespace.split(' ').filter(s => s !== ''); if (wordsBeforeWhitespace.length <= 0) { return false; } const lastWordBeforeSpace = wordsBeforeWhitespace[wordsBeforeWhitespace.length - 1]; const lastWordAndBlockOffset = textBlock.pos + textBeforeWhitespace.lastIndexOf(lastWordBeforeSpace); if (!lastWordBeforeSpace) { return false; } find(lastWordBeforeSpace).filter(link => link.isLink) // Calculate link position. .map(link => ({ ...link, from: lastWordAndBlockOffset + link.start + 1, to: lastWordAndBlockOffset + link.end + 1 })) // ignore link inside code mark .filter(link => { if (!newState.schema.marks.code) { return true; } return !newState.doc.rangeHasMark(link.from, link.to, newState.schema.marks.code); }) // validate link .filter(link => { if (options.validate) { return options.validate(link.value); } return true; }) // Add link mark. .forEach(link => { if (getMarksBetween(link.from, link.to, newState.doc).some(item => item.mark.type === options.type)) { return; } tr.addMark(link.from, link.to, options.type.create({ href: link.href })); }); } }); if (!tr.steps.length) { return; } return tr; } }); } function clickHandler(options) { return new Plugin({ key: new PluginKey('handleClickLink'), props: { handleClick: (view, pos, event) => { var _a, _b; if (event.button !== 0) { return false; } const eventTarget = event.target; if (eventTarget.nodeName !== 'A') { return false; } const attrs = getAttributes(view.state, options.type.name); const link = event.target; const href = (_a = link === null || link === void 0 ? void 0 : link.href) !== null && _a !== void 0 ? _a : attrs.href; const target = (_b = link === null || link === void 0 ? void 0 : link.target) !== null && _b !== void 0 ? _b : attrs.target; if (link && href) { if (view.editable) { window.open(href, target); } return true; } return false; } } }); } function pasteHandler(options) { return new Plugin({ key: new PluginKey('handlePasteLink'), props: { handlePaste: (view, event, slice) => { var _a; const { state } = view; const { selection } = state; const { empty } = selection; if (empty) { return false; } let textContent = ''; slice.content.forEach(node => { textContent += node.textContent; }); const link = find(textContent).find(item => item.isLink && item.value === textContent); if (!textContent || !link) { return false; } const html = (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.getData('text/html'); const hrefRegex = /href="([^"]*)"/; const existingLink = html === null || html === void 0 ? void 0 : html.match(hrefRegex); const url = existingLink ? existingLink[1] : link.href; options.editor.commands.setMark(options.type, { href: url }); return true; } } }); } const Link = Mark.create({ name: 'link', priority: 1000, keepOnSplit: false, onCreate() { this.options.protocols.forEach(protocol => { if (typeof protocol === 'string') { registerCustomProtocol(protocol); return; } registerCustomProtocol(protocol.scheme, protocol.optionalSlashes); }); }, onDestroy() { reset(); }, inclusive() { return this.options.autolink; }, addOptions() { return { openOnClick: true, linkOnPaste: true, autolink: true, protocols: [], HTMLAttributes: { target: '_blank', rel: 'noopener noreferrer nofollow', class: null }, validate: undefined }; }, addAttributes() { return { href: { default: null }, target: { default: this.options.HTMLAttributes.target }, rel: { default: this.options.HTMLAttributes.rel }, class: { default: this.options.HTMLAttributes.class } }; }, parseHTML() { return [{ tag: 'a[href]:not([href *= "javascript:" i])' }]; }, renderHTML({ HTMLAttributes }) { var _a; // False positive; we're explicitly checking for javascript: links to ignore them // eslint-disable-next-line no-script-url if ((_a = HTMLAttributes.href) === null || _a === void 0 ? void 0 : _a.startsWith('javascript:')) { // strip out the href return ['a', mergeAttributes(this.options.HTMLAttributes, { ...HTMLAttributes, href: '' }), 0]; } return ['a', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; }, addCommands() { return { setLink: attributes => ({ chain }) => { return chain().setMark(this.name, attributes).setMeta('preventAutolink', true).run(); }, toggleLink: attributes => ({ chain }) => { return chain().toggleMark(this.name, attributes, { extendEmptyMarkRange: true }).setMeta('preventAutolink', true).run(); }, unsetLink: () => ({ chain }) => { return chain().unsetMark(this.name, { extendEmptyMarkRange: true }).setMeta('preventAutolink', true).run(); } }; }, addPasteRules() { return [markPasteRule({ find: text => find(text).filter(link => { if (this.options.validate) { return this.options.validate(link.value); } return true; }).filter(link => link.isLink).map(link => ({ text: link.value, index: link.start, data: link })), type: this.type, getAttributes: (match, pasteEvent) => { var _a, _b; const html = (_a = pasteEvent === null || pasteEvent === void 0 ? void 0 : pasteEvent.clipboardData) === null || _a === void 0 ? void 0 : _a.getData('text/html'); const hrefRegex = /href="([^"]*)"/; const existingLink = html === null || html === void 0 ? void 0 : html.match(hrefRegex); if (existingLink) { return { href: existingLink[1] }; } return { href: (_b = match.data) === null || _b === void 0 ? void 0 : _b.href }; } })]; }, addProseMirrorPlugins() { const plugins = []; if (this.options.autolink) { plugins.push(autolink({ type: this.type, validate: this.options.validate })); } if (this.options.openOnClick) { plugins.push(clickHandler({ type: this.type })); } if (this.options.linkOnPaste) { plugins.push(pasteHandler({ editor: this.editor, type: this.type })); } return plugins; } }); // src/index.ts // src/tablemap.ts var readFromCache; var addToCache; if (typeof WeakMap != "undefined") { let cache = /* @__PURE__ */new WeakMap(); readFromCache = key => cache.get(key); addToCache = (key, value) => { cache.set(key, value); return value; }; } else { const cache = []; const cacheSize = 10; let cachePos = 0; readFromCache = key => { for (let i = 0; i < cache.length; i += 2) if (cache[i] == key) return cache[i + 1]; }; addToCache = (key, value) => { if (cachePos == cacheSize) cachePos = 0; cache[cachePos++] = key; return cache[cachePos++] = value; }; } var TableMap = class { constructor(width, height, map, problems) { this.width = width; this.height = height; this.map = map; this.problems = problems; } findCell(pos) { for (let i = 0; i < this.map.length; i++) { const curPos = this.map[i]; if (curPos != pos) continue; const left = i % this.width; const top = i / this.width | 0; let right = left + 1; let bottom = top + 1; for (let j = 1; right < this.width && this.map[i + j] == curPos; j++) { right++; } for (let j = 1; bottom < this.height && this.map[i + this.width * j] == curPos; j++) { bottom++; } return { left, top, right, bottom }; } throw new RangeError(`No cell with offset ${pos} found`); } colCount(pos) { for (let i = 0; i < this.map.length; i++) { if (this.map[i] == pos) { return i % this.width; } } throw new RangeError(`No cell with offset ${pos} found`); } nextCell(pos, axis, dir) { const { left, right, top, bottom } = this.findCell(pos); if (axis == "horiz") { if (dir < 0 ? left == 0 : right == this.width) return null; return this.map[top * this.width + (dir < 0 ? left - 1 : right)]; } else { if (dir < 0 ? top == 0 : bottom == this.height) return null; return this.map[left + this.width * (dir < 0 ? top - 1 : bottom)]; } } rectBetween(a, b) { const { left: leftA, right: rightA, top: topA, bottom: bottomA } = this.findCell(a); const { left: leftB, right: rightB, top: topB, bottom: bottomB } = this.findCell(b); return { left: Math.min(leftA, leftB), top: Math.min(topA, topB), right: Math.max(rightA, rightB), bottom: Math.max(bottomA, bottomB) }; } cellsInRect(rect) { const result = []; const seen = {}; for (let row = rect.top; row < rect.bottom; row++) { for (let col = rect.left; col < rect.right; col++) { const index = row * this.width + col; const pos = this.map[index]; if (seen[pos]) continue; seen[pos] = true; if (col == rect.left && col && this.map[index - 1] == pos || row == rect.top && row && this.map[index - this.width] == pos) { continue; } result.push(pos); } } return result; } positionAt(row, col, table) { for (let i = 0, rowStart = 0;; i++) { const rowEnd = rowStart + table.child(i).nodeSize; if (i == row) { let index = col + row * this.width; const rowEndIndex = (row + 1) * this.width; while (index < rowEndIndex && this.map[index] < rowStart) index++; return index == rowEndIndex ? rowEnd - 1 : this.map[index]; } rowStart = rowEnd; } } static get(table) { return readFromCache(table) || addToCache(table, computeMap(table)); } }; function computeMap(table) { if (table.type.spec.tableRole != "table") throw new RangeError("Not a table node: " + table.type.name); const width = findWidth(table), height = table.childCount; const map = []; let mapPos = 0; let problems = null; const colWidths = []; for (let i = 0, e = width * height; i < e; i++) map[i] = 0; for (let row = 0, pos = 0; row < height; row++) { const rowNode = table.child(row); pos++; for (let i = 0;; i++) { while (mapPos < map.length && map[mapPos] != 0) mapPos++; if (i == rowNode.childCount) break; const cellNode = rowNode.child(i); const { colspan, rowspan, colwidth } = cellNode.attrs; for (let h = 0; h < rowspan; h++) { if (h + row >= height) { (problems || (problems = [])).push({ type: "overlong_rowspan", pos, n: rowspan - h }); break; } const start = mapPos + h * width; for (let w = 0; w < colspan; w++) { if (map[start + w] == 0) map[start + w] = pos;else (problems || (problems = [])).push({ type: "collision", row, pos, n: colspan - w }); const colW = colwidth && colwidth[w]; if (colW) { const widthIndex = (start + w) % width * 2, prev = colWidths[widthIndex]; if (prev == null || prev != colW && colWidths[widthIndex + 1] == 1) { colWidths[widthIndex] = colW; colWidths[widthIndex + 1] = 1; } else if (prev == colW) { colWidths[widthIndex + 1]++; } } } } mapPos += colspan; pos += cellNode.nodeSize; } const expectedPos = (row + 1) * width; let missing = 0; while (mapPos < expectedPos) if (map[mapPos++] == 0) missing++; if (missing) (problems || (problems = [])).push({ type: "missing", row, n: missing }); pos++; } const tableMap = new TableMap(width, height, map, problems); let badWidths = false; for (let i = 0; !badWidths && i < colWidths.length; i += 2) if (colWidths[i] != null && colWidths[i + 1] < height) badWidths = true; if (badWidths) findBadColWidths(tableMap, colWidths, table); return tableMap; } function findWidth(table) { let width = -1; let hasRowSpan = false; for (let row = 0; row < table.childCount; row++) { const rowNode = table.child(row); let rowWidth = 0; if (hasRowSpan) for (let j = 0; j < row; j++) { const prevRow = table.child(j); for (let i = 0; i < prevRow.childCount; i++) { const cell = prevRow.child(i); if (j + cell.attrs.rowspan > row) rowWidth += cell.attrs.colspan; } } for (let i = 0; i < rowNode.childCount; i++) { const cell = rowNode.child(i); rowWidth += cell.attrs.colspan; if (cell.attrs.rowspan > 1) hasRowSpan = true; } if (width == -1) width = rowWidth;else if (width != rowWidth) width = Math.max(width, rowWidth); } return width; } function findBadColWidths(map, colWidths, table) { if (!map.problems) map.problems = []; const seen = {}; for (let i = 0; i < map.map.length; i++) { const pos = map.map[i]; if (seen[pos]) continue; seen[pos] = true; const node = table.nodeAt(pos); if (!node) { throw new RangeError(`No cell with offset ${pos} found`); } let updated = null; const attrs = node.attrs; for (let j = 0; j < attrs.colspan; j++) { const col = (i + j) % map.width; const colWidth = colWidths[col * 2]; if (colWidth != null && (!attrs.colwidth || attrs.colwidth[j] != colWidth)) (updated || (updated = freshColWidth(attrs)))[j] = colWidth; } if (updated) map.problems.unshift({ type: "colwidth mismatch", pos, colwidth: updated }); } } function freshColWidth(attrs) { if (attrs.colwidth) return attrs.colwidth.slice(); const result = []; for (let i = 0; i < attrs.colspan; i++) result.push(0); return result; } function tableNodeTypes(schema) { let result = schema.cached.tableNodeTypes; if (!result) { result = schema.cached.tableNodeTypes = {}; for (const name in schema.nodes) { const type = schema.nodes[name], role = type.spec.tableRole; if (role) result[role] = type; } } return result; } // src/util.ts var tableEditingKey = new PluginKey("selectingCells"); function cellAround($pos) { for (let d = $pos.depth - 1; d > 0; d--) if ($pos.node(d).type.spec.tableRole == "row") return $pos.node(0).resolve($pos.before(d + 1)); return null; } function cellWrapping($pos) { for (let d = $pos.depth; d > 0; d--) { const role = $pos.node(d).type.spec.tableRole; if (role === "cell" || role === "header_cell") return $pos.node(d); } return null; } function isInTable(state) { const $head = state.selection.$head; for (let d = $head.depth; d > 0; d--) if ($head.node(d).type.spec.tableRole == "row") return true; return false; } function selectionCell(state) { const sel = state.selection; if ("$anchorCell" in sel && sel.$anchorCell) { return sel.$anchorCell.pos > sel.$headCell.pos ? sel.$anchorCell : sel.$headCell; } else if ("node" in sel && sel.node && sel.node.type.spec.tableRole == "cell") { return sel.$anchor; } const $cell = cellAround(sel.$head) || cellNear(sel.$head); if ($cell) { return $cell; } throw new RangeError(`No cell found around position ${sel.head}`); } function cellNear($pos) { for (let after = $pos.nodeAfter, pos = $pos.pos; after; after = after.firstChild, pos++) { const role = after.type.spec.tableRole; if (role == "cell" || role == "header_cell") return $pos.doc.resolve(pos); } for (let before = $pos.nodeBefore, pos = $pos.pos; before; before = before.lastChild, pos--) { const role = before.type.spec.tableRole; if (role == "cell" || role == "header_cell") return $pos.doc.resolve(pos - before.nodeSize); } } function pointsAtCell($pos) { return $pos.parent.type.spec.tableRole == "row" && !!$pos.nodeAfter; } function moveCellForward($pos) { return $pos.node(0).resolve($pos.pos + $pos.nodeAfter.nodeSize); } function inSameTable($cellA, $cellB) { return $cellA.depth == $cellB.depth && $cellA.pos >= $cellB.start(-1) && $cellA.pos <= $cellB.end(-1); } function nextCell($pos, axis, dir) { const table = $pos.node(-1); const map = TableMap.get(table); const tableStart = $pos.start(-1); const moved = map.nextCell($pos.pos - tableStart, axis, dir); return moved == null ? null : $pos.node(0).resolve(tableStart + moved); } function removeColSpan(attrs, pos, n = 1) { const result = { ...attrs, colspan: attrs.colspan - n }; if (result.colwidth) { result.colwidth = result.colwidth.slice(); result.colwidth.splice(pos, n); if (!result.colwidth.some(w => w > 0)) result.colwidth = null; } return result; } function addColSpan(attrs, pos, n = 1) { const result = { ...attrs, colspan: attrs.colspan + n }; if (result.colwidth) { result.colwidth = result.colwidth.slice(); for (let i = 0; i < n; i++) result.colwidth.splice(pos, 0, 0); } return result; } function columnIsHeader(map, table, col) { const headerCell = tableNodeTypes(table.type.schema).header_cell; for (let row = 0; row < map.height; row++) if (table.nodeAt(map.map[col + row * map.width]).type != headerCell) return false; return true; } // src/cellselection.ts var CellSelection = class extends Selection { constructor($anchorCell, $headCell = $anchorCell) { const table = $anchorCell.node(-1); const map = TableMap.get(table); const tableStart = $anchorCell.start(-1); const rect = map.rectBetween($anchorCell.pos - tableStart, $headCell.pos - tableStart); const doc = $anchorCell.node(0); const cells = map.cellsInRect(rect).filter(p => p != $headCell.pos - tableStart); cells.unshift($headCell.pos - tableStart); const ranges = cells.map(pos => { const cell = table.nodeAt(pos); if (!cell) { throw RangeError(`No cell with offset ${pos} found`); } const from = tableStart + pos + 1; return new SelectionRange(doc.resolve(from), doc.resolve(from + cell.content.size)); }); super(ranges[0].$from, ranges[0].$to, ranges); this.$anchorCell = $anchorCell; this.$headCell = $headCell; } map(doc, mapping) { const $anchorCell = doc.resolve(mapping.map(this.$anchorCell.pos)); const $headCell = doc.resolve(mapping.map(this.$headCell.pos)); if (pointsAtCell($anchorCell) && pointsAtCell($headCell) && inSameTable($anchorCell, $headCell)) { const tableChanged = this.$anchorCell.node(-1) != $anchorCell.node(-1); if (tableChanged && this.isRowSelection()) return CellSelection.rowSelection($anchorCell, $headCell);else if (tableChanged && this.isColSelection()) return CellSelection.colSelection($anchorCell, $headCell);else return new CellSelection($anchorCell, $headCell); } return TextSelection.between($anchorCell, $headCell); } content() { const table = this.$anchorCell.node(-1); const map = TableMap.get(table); const tableStart = this.$anchorCell.start(-1); const rect = map.rectBetween(this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart); const seen = {}; const rows = []; for (let row = rect.top; row < rect.bottom; row++) { const rowContent = []; for (let index = row * map.width + rect.left, col = rect.left; col < rect.right; col++, index++) { const pos = map.map[index]; if (seen[pos]) continue; seen[pos] = true; const cellRect = map.findCell(pos); let cell = table.nodeAt(pos); if (!cell) { throw RangeError(`No cell with offset ${pos} found`); } const extraLeft = rect.left - cellRect.left; const extraRight = cellRect.right - rect.right; if (extraLeft > 0 || extraRight > 0) { let attrs = cell.attrs; if (extraLeft > 0) { attrs = removeColSpan(attrs, 0, extraLeft); } if (extraRight > 0) { attrs = removeColSpan(attrs, attrs.colspan - extraRight, extraRight); } if (cellRect.left < rect.left) { cell = cell.type.createAndFill(attrs); if (!cell) { throw RangeError(`Could not create cell with attrs ${JSON.stringify(attrs)}`); } } else { cell = cell.type.create(attrs, cell.content); } } if (cellRect.top < rect.top || cellRect.bottom > rect.bottom) { const attrs = { ...cell.attrs, rowspan: Math.min(cellRect.bottom, rect.bottom) - Math.max(cellRect.top, rect.top) }; if (cellRect.top < rect.top) { cell = cell.type.createAndFill(attrs); } else { cell = cell.type.create(attrs, cell.content); } } rowContent.push(cell); } rows.push(table.child(row).copy(Fragment.from(rowContent))); } const fragment = this.isColSelection() && this.isRowSelection() ? table : rows; return new Slice(Fragment.from(fragment), 1, 1); } replace(tr, content = Slice.empty) { const mapFrom = tr.steps.length, ranges = this.ranges; for (let i = 0; i < ranges.length; i++) { const { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom); tr.replace(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content); } const sel = Selection.findFrom(tr.doc.resolve(tr.mapping.slice(mapFrom).map(this.to)), -1); if (sel) tr.setSelection(sel); } replaceWith(tr, node) { this.replace(tr, new Slice(Fragment.from(node), 0, 0)); } forEachCell(f) { const table = this.$anchorCell.node(-1); const map = TableMap.get(table); const tableStart = this.$anchorCell.start(-1); const cells = map.cellsInRect(map.rectBetween(this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart)); for (let i = 0; i < cells.length; i++) { f(table.nodeAt(cells[i]), tableStart + cells[i]); } } isColSelection() { const anchorTop = this.$anchorCell.index(-1); const headTop = this.$headCell.index(-1); if (Math.min(anchorTop, headTop) > 0) return false; const anchorBottom = anchorTop + this.$anchorCell.nodeAfter.attrs.rowspan; const headBottom = headTop + this.$headCell.nodeAfter.attrs.rowspan; return Math.max(anchorBottom, headBottom) == this.$headCell.node(-1).childCount; } static colSelection($anchorCell, $headCell = $anchorCell) { const table = $anchorCell.node(-1); const map = TableMap.get(table); const tableStart = $anchorCell.start(-1); const anchorRect = map.findCell($anchorCell.pos - tableStart); const headRect = map.findCell($headCell.pos - tableStart); const doc = $anchorCell.node(0); if (anchorRect.top <= headRect.top) { if (anchorRect.top > 0) $anchorCell = doc.resolve(tableStart + map.map[anchorRect.left]); if (headRect.bottom < map.height) $headCell = doc.resolve(tableStart + map.map[map.width * (map.height - 1) + headRect.right - 1]); } else { if (headRect.top > 0) $headCell = doc.resolve(tableStart + map.map[headRect.left]); if (anchorRect.bottom < map.height) $anchorCell = doc.resolve(tableStart + map.map[map.width * (map.height - 1) + anchorRect.right - 1]); } return new CellSelection($anchorCell, $headCell); } isRowSelection() { const table = this.$anchorCell.node(-1); const map = TableMap.get(table); const tableStart = this.$anchorCell.start(-1); const anchorLeft = map.colCount(this.$anchorCell.pos - tableStart); const headLeft = map.colCount(this.$headCell.pos - tableStart); if (Math.min(anchorLeft, headLeft) > 0) return false; const anchorRight = anchorLeft + this.$anchorCell.nodeAfter.attrs.colspan; const headRight = headLeft + this.$headCell.nodeAfter.attrs.colspan; return Math.max(anchorRight, headRight) == map.width; } eq(other) { return other instanceof CellSelection && other.$anchorCell.pos == this.$anchorCell.pos && other.$headCell.pos == this.$headCell.pos; } static rowSelection($anchorCell, $headCell = $anchorCell) { const table = $anchorCell.node(-1); const map = TableMap.get(table); const tableStart = $anchorCell.start(-1); const anchorRect = map.findCell($anchorCell.pos - tableStart); const headRect = map.findCell($headCell.pos - tableStart); const doc = $anchorCell.node(0); if (anchorRect.left <= headRect.left) { if (anchorRect.left > 0) $anchorCell = doc.resolve(tableStart + map.map[anchorRect.top * map.width]); if (headRect.right < map.width) $headCell = doc.resolve(tableStart + map.map[map.width * (headRect.top + 1) - 1]); } else { if (headRect.left > 0) $headCell = doc.resolve(tableStart + map.map[headRect.top * map.width]); if (anchorRect.right < map.width) $anchorCell = doc.resolve(tableStart + map.map[map.width * (anchorRect.top + 1) - 1]); } return new CellSelection($anchorCell, $headCell); } toJSON() { return { type: "cell", anchor: this.$anchorCell.pos, head: this.$headCell.pos }; } static fromJSON(doc, json) { return new CellSelection(doc.resolve(json.anchor), doc.resolve(json.head)); } static create(doc, anchorCell, headCell = anchorCell) { return new CellSelection(doc.resolve(anchorCell), doc.resolve(headCell)); } getBookmark() { return new CellBookmark(this.$anchorCell.pos, this.$headCell.pos); } }; CellSelection.prototype.visible = false; Selection.jsonID("cell", CellSelection); var CellBookmark = class { constructor(anchor, head) { this.anchor = anchor; this.head = head; } map(mapping) { return new CellBookmark(mapping.map(this.anchor), mapping.map(this.head)); } resolve(doc) { const $anchorCell = doc.resolve(this.anchor), $headCell = doc.resolve(this.head); if ($anchorCell.parent.type.spec.tableRole == "row" && $headCell.parent.type.spec.tableRole == "row" && $anchorCell.index() < $anchorCell.parent.childCount && $headCell.index() < $headCell.parent.childCount && inSameTable($anchorCell, $headCell)) return new CellSelection($anchorCell, $headCell);else return Selection.near($headCell, 1); } }; function drawCellSelection(state) { if (!(state.selection instanceof CellSelection)) return null; const cells = []; state.selection.forEachCell((node, pos) => { cells.push(Decoration.node(pos, pos + node.nodeSize, { class: "selectedCell" })); }); return DecorationSet.create(state.doc, cells); } function isCellBoundarySelection({ $from, $to }) { if ($from.pos == $to.pos || $from.pos < $from.pos - 6) return false; let afterFrom = $from.pos; let beforeTo = $to.pos; let depth = $from.depth; for (; depth >= 0; depth--, afterFrom++) if ($from.after(depth + 1) < $from.end(depth)) break; for (let d = $to.depth; d >= 0; d--, beforeTo--) if ($to.before(d + 1) > $to.start(d)) break; return afterFrom == beforeTo && /row|table/.test($from.node(depth).type.spec.tableRole); } function isTextSelectionAcrossCells({ $from, $to }) { let fromCellBoundaryNode; let toCellBoundaryNode; for (let i = $from.depth; i > 0; i--) { const node = $from.node(i); if (node.type.spec.tableRole === "cell" || node.type.spec.tableRole === "header_cell") { fromCellBoundaryNode = node; break; } } for (let i = $to.depth; i > 0; i--) { const node = $to.node(i); if (node.type.spec.tableRole === "cell" || node.type.spec.tableRole === "header_cell") { toCellBoundaryNode = node; break; } } return fromCellBoundaryNode !== toCellBoundaryNode && $to.parentOffset === 0; } function normalizeSelection(state, tr, allowTableNodeSelection) { const sel = (tr || state).selection; const doc = (tr || state).doc; let normalize; let role; if (sel instanceof NodeSelection && (role = sel.node.type.spec.tableRole)) { if (role == "cell" || role == "header_cell") { normalize = CellSelection.create(doc, sel.from); } else if (role == "row") { const $cell = doc.resolve(sel.from + 1); normalize = CellSelection.rowSelection($cell, $cell); } else if (!allowTableNodeSelection) { const map = TableMap.get(sel.node); const start = sel.from + 1; const lastCell = start + map.map[map.width * map.height - 1]; normalize = CellSelection.create(doc, start + 1, lastCell); } } else if (sel instanceof TextSelection && isCellBoundarySelection(sel)) { normalize = TextSelection.create(doc, sel.from); } else if (sel instanceof TextSelection && isTextSelectionAcrossCells(sel)) { normalize = TextSelection.create(doc, sel.$from.start(), sel.$from.end()); } if (normalize) (tr || (tr = state.tr)).setSelection(normalize); return tr; } var fixTablesKey = new PluginKey("fix-tables"); function changedDescendants(old, cur, offset, f) { const oldSize = old.childCount, curSize = cur.childCount; outer: for (let i = 0, j = 0; i < curSize; i++) { const child = cur.child(i); for (let scan = j, e = Math.min(oldSize, i + 3); scan < e; scan++) { if (old.child(scan) == child) { j = scan + 1; offset += child.nodeSize; continue outer; } } f(child, offset); if (j < oldSize && old.child(j).sameMarkup(child)) changedDescendants(old.child(j), child, offset + 1, f);else child.nodesBetween(0, child.content.size, f, offset + 1); offset += child.nodeSize; } } function fixTables(state, oldState) { let tr; const check = (node, pos) => { if (node.type.spec.tableRole == "table") tr = fixTable(state, node, pos, tr); }; if (!oldState) state.doc.descendants(check);else if (oldState.doc != state.doc) changedDescendants(oldState.doc, state.doc, 0, check); return tr; } function fixTable(state, table, tablePos, tr) { const map = TableMap.get(table); if (!map.problems) return tr; if (!tr) tr = state.tr; const mustAdd = []; for (let i = 0; i < map.height; i++) mustAdd.push(0); for (let i = 0; i < map.problems.length; i++) { const prob = map.problems[i]; if (prob.type == "collision") { const cell = table.nodeAt(prob.pos); if (!cell) continue; const attrs = cell.attrs; for (let j = 0; j < attrs.rowspan; j++) mustAdd[prob.row + j] += prob.n; tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, removeColSpan(attrs, attrs.colspan - prob.n, prob.n)); } else if (prob.type == "missing") { mustAdd[prob.row] += prob.n; } else if (prob.type == "overlong_rowspan") { const cell = table.nodeAt(prob.pos); if (!cell) continue; tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, { ...cell.attrs, rowspan: cell.attrs.rowspan - prob.n }); } else if (prob.type == "colwidth mismatch") { const cell = table.nodeAt(prob.pos); if (!cell) continue; tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, { ...cell.attrs, colwidth: prob.colwidth }); } } let first, last; for (let i = 0; i < mustAdd.length; i++) if (mustAdd[i]) { if (first == null) first = i; last = i; } for (let i = 0, pos = tablePos + 1; i < map.height; i++) { const row = table.child(i); const end = pos + row.nodeSize; const add = mustAdd[i]; if (add > 0) { let role = "cell"; if (row.firstChild) { role = row.firstChild.type.spec.tableRole; } const nodes = []; for (let j = 0; j < add; j++) { const node = tableNodeTypes(state.schema)[role].createAndFill(); if (node) nodes.push(node); } const side = (i == 0 || first == i - 1) && last == i ? pos + 1 : end - 1; tr.insert(tr.mapping.map(side), nodes); } pos = end; } return tr.setMeta(fixTablesKey, { fixTables: true }); } function pastedCells(slice) { if (!slice.size) return null; let { content, openStart, openEnd } = slice; while (content.childCount == 1 && (openStart > 0 && openEnd > 0 || content.child(0).type.spec.tableRole == "table")) { openStart--; openEnd--; content = content.child(0).content; } const first = content.child(0); const role = first.type.spec.tableRole; const schema = first.type.schema, rows = []; if (role == "row") { for (let i = 0; i < content.childCount; i++) { let cells = content.child(i).content; const left = i ? 0 : Math.max(0, openStart - 1); const right = i < content.childCount - 1 ? 0 : Math.max(0, openEnd - 1); if (left || right) cells = fitSlice(tableNodeTypes(schema).row, new Slice(cells, left, right)).content; rows.push(cells); } } else if (role == "cell" || role == "header_cell") { rows.push(openStart || openEnd ? fitSlice(tableNodeTypes(schema).row, new Slice(content, openStart, openEnd)).content : content); } else { return null; } return ensureRectangular(schema, rows); } function ensureRectangular(schema, rows) { const widths = []; for (let i = 0; i < rows.length; i++) { const row = rows[i]; for (let j = row.childCount - 1; j >= 0; j--) { const { rowspan, colspan } = row.child(j).attrs; for (let r = i; r < i + rowspan; r++) widths[r] = (widths[r] || 0) + colspan; } } let width = 0; for (let r = 0; r < widths.length; r++) width = Math.max(width, widths[r]); for (let r = 0; r < widths.length; r++) { if (r >= rows.length) rows.push(Fragment.empty); if (widths[r] < width) { const empty = tableNodeTypes(schema).cell.createAndFill(); const cells = []; for (let i = widths[r]; i < width; i++) { cells.push(empty); } rows[r] = rows[r].append(Fragment.from(cells)); } } return { height: rows.length, width, rows }; } function fitSlice(nodeType, slice) { const node = nodeType.createAndFill(); const tr = new Transform(node).replace(0, node.content.size, slice); return tr.doc; } function clipCells({ width, height, rows }, newWidth, newHeight) { if (width != newWidth) { const added = []; const newRows = []; for (let row = 0; row < rows.length; row++) { const frag = rows[row], cells = []; for (let col = added[row] || 0, i = 0; col < newWidth; i++) { let cell = frag.child(i % frag.childCount); if (col + cell.attrs.colspan > newWidth) cell = cell.type.createChecked(removeColSpan(cell.attrs, cell.attrs.colspan, col + cell.attrs.colspan - newWidth), cell.content); cells.push(cell); col += cell.attrs.colspan; for (let j = 1; j < cell.attrs.rowspan; j++) added[row + j] = (added[row + j] || 0) + cell.attrs.colspan; } newRows.push(Fragment.from(cells)); } rows = newRows; width = newWidth; } if (height != newHeight) { const newRows = []; for (let row = 0, i = 0; row < newHeight; row++, i++) { const cells = [], source = rows[i % height]; for (let j = 0; j < source.childCount; j++) { let cell = source.child(j); if (row + cell.attrs.rowspan > newHeight) cell = cell.type.create({ ...cell.attrs, rowspan: Math.max(1, newHeight - cell.attrs.rowspan) }, cell.content); cells.push(cell); } newRows.push(Fragment.from(cells)); } rows = newRows; height = newHeight; } return { width, height, rows }; } function growTable(tr, map, table, start, width, height, mapFrom) { const schema = tr.doc.type.schema; const types = tableNodeTypes(schema); let empty; let emptyHead; if (width > map.width) { for (let row = 0, rowEnd = 0; row < map.height; row++) { const rowNode = table.child(row); rowEnd += rowNode.nodeSize; const cells = []; let add; if (rowNode.lastChild == null || rowNode.lastChild.type == types.cell) add = empty || (empty = types.cell.createAndFill());else add = emptyHead || (emptyHead = types.header_cell.createAndFill()); for (let i = map.width; i < width; i++) cells.push(add); tr.insert(tr.mapping.slice(mapFrom).map(rowEnd - 1 + start), cells); } } if (height > map.height) { const cells = []; for (let i = 0, start2 = (map.height - 1) * map.width; i < Math.max(map.width, width); i++) { const header = i >= map.width ? false : table.nodeAt(map.map[start2 + i]).type == types.header_cell; cells.push(header ? emptyHead || (emptyHead = types.header_cell.createAndFill()) : empty || (empty = types.cell.createAndFill())); } const emptyRow = types.row.create(null, Fragment.from(cells)), rows = []; for (let i = map.height; i < height; i++) rows.push(emptyRow); tr.insert(tr.mapping.slice(mapFrom).map(start + table.nodeSize - 2), rows); } return !!(empty || emptyHead); } function isolateHorizontal(tr, map, table, start, left, right, top, mapFrom) { if (top == 0 || top == map.height) return false; let found = false; for (let col = left; col < right; col++) { const index = top * map.width + col, pos = map.map[index]; if (map.map[index - map.width] == pos) { found = true; const cell = table.nodeAt(pos); const { top: cellTop, left: cellLeft } = map.findCell(pos); tr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + start), null, { ...cell.attrs, rowspan: top - cellTop }); tr.insert(tr.mapping.slice(mapFrom).map(map.positionAt(top, cellLeft, table)), cell.type.createAndFill({ ...cell.attrs, rowspan: cellTop + cell.attrs.rowspan - top })); col += cell.attrs.colspan - 1; } } return found; } function isolateVertical(tr, map, table, start, top, bottom, left, mapFrom) { if (left == 0 || left == map.width) return false; let found = false; for (let row = top; row < bottom; row++) { const index = row * map.width + left, pos = map.map[index]; if (map.map[index - 1] == pos) { found = true; const cell = table.nodeAt(pos); const cellLeft = map.colCount(pos); const updatePos = tr.mapping.slice(mapFrom).map(pos + start); tr.setNodeMarkup(updatePos, null, removeColSpan(cell.attrs, left - cellLeft, cell.attrs.colspan - (left - cellLeft))); tr.insert(updatePos + cell.nodeSize, cell.type.createAndFill(removeColSpan(cell.attrs, 0, left - cellLeft))); row += cell.attrs.rowspan - 1; } } return found; } function insertCells(state, dispatch, tableStart, rect, cells) { let table = tableStart ? state.doc.nodeAt(tableStart - 1) : state.doc; if (!table) { throw new Error("No table found"); } let map = TableMap.get(table); const { top, left } = rect; const right = left + cells.width, bottom = top + cells.height; const tr = state.tr; let mapFrom = 0; function recomp() { table = tableStart ? tr.doc.nodeAt(tableStart - 1) : tr.doc; if (!table) { throw new Error("No table found"); } map = TableMap.get(table); mapFrom = tr.mapping.maps.length; } if (growTable(tr, map, table, tableStart, right, bottom, mapFrom)) recomp(); if (isolateHorizontal(tr, map, table, tableStart, left, right, top, mapFrom)) recomp(); if (isolateHorizontal(tr, map, table, tableStart, left, right, bottom, mapFrom)) recomp(); if (isolateVertical(tr, map, table, tableStart, top, bottom, left, mapFrom)) recomp(); if (isolateVertical(tr, map, table, tableStart, top, bottom, right, mapFrom)) recomp(); for (let row = top; row < bottom; row++) { const from = map.positionAt(row, left, table), to = map.positionAt(row, right, table); tr.replace(tr.mapping.slice(mapFrom).map(from + tableStart), tr.mapping.slice(mapFrom).map(to + tableStart), new Slice(cells.rows[row - top], 0, 0)); } recomp(); tr.setSelection(new CellSelection(tr.doc.resolve(tableStart + map.positionAt(top, left, table)), tr.doc.resolve(tableStart + map.positionAt(bottom - 1, right - 1, table)))); dispatch(tr); } // src/input.ts var handleKeyDown$1 = keydownHandler({ ArrowLeft: arrow$1("horiz", -1), ArrowRight: arrow$1("horiz", 1), ArrowUp: arrow$1("vert", -1), ArrowDown: arrow$1("vert", 1), "Shift-ArrowLeft": shiftArrow("horiz", -1), "Shift-ArrowRight": shiftArrow("horiz", 1), "Shift-ArrowUp": shiftArrow("vert", -1), "Shift-ArrowDown": shiftArrow("vert", 1), Backspace: deleteCellSelection, "Mod-Backspace": deleteCellSelection, Delete: deleteCellSelection, "Mod-Delete": deleteCellSelection }); function maybeSetSelection(state, dispatch, selection) { if (selection.eq(state.selection)) return false; if (dispatch) dispatch(state.tr.setSelection(selection).scrollIntoView()); return true; } function arrow$1(axis, dir) { return (state, dispatch, view) => { if (!view) return false; const sel = state.selection; if (sel instanceof CellSelection) { return maybeSetSelection(state, dispatch, Selection.near(sel.$headCell, dir)); } if (axis != "horiz" && !sel.empty) return false; const end = atEndOfCell(view, axis, dir); if (end == null) return false; if (axis == "horiz") { return maybeSetSelection(state, dispatch, Selection.near(state.doc.resolve(sel.head + dir), dir)); } else { const $cell = state.doc.resolve(end); const $next = nextCell($cell, axis, dir); let newSel; if ($next) newSel = Selection.near($next, 1);else if (dir < 0) newSel = Selection.near(state.doc.resolve($cell.before(-1)), -1);else newSel = Selection.near(state.doc.resolve($cell.after(-1)), 1); return maybeSetSelection(state, dispatch, newSel); } }; } function shiftArrow(axis, dir) { return (state, dispatch, view) => { if (!view) return false; const sel = state.selection; let cellSel; if (sel instanceof CellSelection) { cellSel = sel; } else { const end = atEndOfCell(view, axis, dir); if (end == null) return false; cellSel = new CellSelection(state.doc.resolve(end)); } const $head = nextCell(cellSel.$headCell, axis, dir); if (!$head) return false; return maybeSetSelection(state, dispatch, new CellSelection(cellSel.$anchorCell, $head)); }; } function deleteCellSelection(state, dispatch) { const sel = state.selection; if (!(sel instanceof CellSelection)) return false; if (dispatch) { const tr = state.tr; const baseContent = tableNodeTypes(state.schema).cell.createAndFill().content; sel.forEachCell((cell, pos) => { if (!cell.content.eq(baseContent)) tr.replace(tr.mapping.map(pos + 1), tr.mapping.map(pos + cell.nodeSize - 1), new Slice(baseContent, 0, 0)); }); if (tr.docChanged) dispatch(tr); } return true; } function handleTripleClick(view, pos) { const doc = view.state.doc, $cell = cellAround(doc.resolve(pos)); if (!$cell) return false; view.dispatch(view.state.tr.setSelection(new CellSelection($cell))); return true; } function handlePaste(view, _, slice) { if (!isInTable(view.state)) return false; let cells = pastedCells(slice); const sel = view.state.selection; if (sel instanceof CellSelection) { if (!cells) cells = { width: 1, height: 1, rows: [Fragment.from(fitSlice(tableNodeTypes(view.state.schema).cell, slice))] }; const table = sel.$anchorCell.node(-1); const start = sel.$anchorCell.start(-1); const rect = TableMap.get(table).rectBetween(sel.$anchorCell.pos - start, sel.$headCell.pos - start); cells = clipCells(cells, rect.right - rect.left, rect.bottom - rect.top); insertCells(view.state, view.dispatch, start, rect, cells); return true; } else if (cells) { const $cell = selectionCell(view.state); const start = $cell.start(-1); insertCells(view.state, view.dispatch, start, TableMap.get($cell.node(-1)).findCell($cell.pos - start), cells); return true; } else { return false; } } function handleMouseDown(view, startEvent) { var _a; if (startEvent.ctrlKey || startEvent.metaKey) return; const startDOMCell = domInCell(view, startEvent.target); let $anchor; if (startEvent.shiftKey && view.state.selection instanceof CellSelection) { setCellSelection(view.state.selection.$anchorCell, startEvent); startEvent.preventDefault(); } else if (startEvent.shiftKey && startDOMCell && ($anchor = cellAround(view.state.selection.$anchor)) != null && ((_a = cellUnderMouse(view, startEvent)) == null ? void 0 : _a.pos) != $anchor.pos) { setCellSelection($anchor, startEvent); startEvent.preventDefault(); } else if (!startDOMCell) { return; } function setCellSelection($anchor2, event) { let $head = cellUnderMouse(view, event); const starting = tableEditingKey.getState(view.state) == null; if (!$head || !inSameTable($anchor2, $head)) { if (starting) $head = $anchor2;else return; } const selection = new CellSelection($anchor2, $head); if (starting || !view.state.selection.eq(selection)) { const tr = view.state.tr.setSelection(selection); if (starting) tr.setMeta(tableEditingKey, $anchor2.pos); view.dispatch(tr); } } function stop() { view.root.removeEventListener("mouseup", stop); view.root.removeEventListener("dragstart", stop); view.root.removeEventListener("mousemove", move); if (tableEditingKey.getState(view.state) != null) view.dispatch(view.state.tr.setMeta(tableEditingKey, -1)); } function move(_event) { const event = _event; const anchor = tableEditingKey.getState(view.state); let $anchor2; if (anchor != null) { $anchor2 = view.state.doc.resolve(anchor); } else if (domInCell(view, event.target) != startDOMCell) { $anchor2 = cellUnderMouse(view, startEvent); if (!$anchor2) return stop(); } if ($anchor2) setCellSelection($anchor2, event); } view.root.addEventListener("mouseup", stop); view.root.addEventListener("dragstart", stop); view.root.addEventListener("mousemove", move); } function atEndOfCell(view, axis, dir) { if (!(view.state.selection instanceof TextSelection)) return null; const { $head } = view.state.selection; for (let d = $head.depth - 1; d >= 0; d--) { const parent = $head.node(d), index = dir < 0 ? $head.index(d) : $head.indexAfter(d); if (index != (dir < 0 ? 0 : parent.childCount)) return null; if (parent.type.spec.tableRole == "cell" || parent.type.spec.tableRole == "header_cell") { const cellPos = $head.before(d); const dirStr = axis == "vert" ? dir > 0 ? "down" : "up" : dir > 0 ? "right" : "left"; return view.endOfTextblock(dirStr) ? cellPos : null; } } return null; } function domInCell(view, dom) { for (; dom && dom != view.dom; dom = dom.parentNode) { if (dom.nodeName == "TD" || dom.nodeName == "TH") { return dom; } } return null; } function cellUnderMouse(view, event) { const mousePos = view.posAtCoords({ left: event.clientX, top: event.clientY }); if (!mousePos) return null; return mousePos ? cellAround(view.state.doc.resolve(mousePos.pos)) : null; } // src/tableview.ts var TableView$1 = class TableView { constructor(node, cellMinWidth) { this.node = node; this.cellMinWidth = cellMinWidth; this.dom = document.createElement("div"); this.dom.className = "tableWrapper"; this.table = this.dom.appendChild(document.createElement("table")); this.colgroup = this.table.appendChild(document.createElement("colgroup")); updateColumnsOnResize(node, this.colgroup, this.table, cellMinWidth); this.contentDOM = this.table.appendChild(document.createElement("tbody")); } update(node) { if (node.type != this.node.type) return false; this.node = node; updateColumnsOnResize(node, this.colgroup, this.table, this.cellMinWidth); return true; } ignoreMutation(record) { return record.type == "attributes" && (record.target == this.table || this.colgroup.contains(record.target)); } }; function updateColumnsOnResize(node, colgroup, table, cellMinWidth, overrideCol, overrideValue) { var _a; let totalWidth = 0; let fixedWidth = true; let nextDOM = colgroup.firstChild; const row = node.firstChild; if (!row) return; for (let i = 0, col = 0; i < row.childCount; i++) { const { colspan, colwidth } = row.child(i).attrs; for (let j = 0; j < colspan; j++, col++) { const hasWidth = overrideCol == col ? overrideValue : colwidth && colwidth[j]; const cssWidth = hasWidth ? hasWidth + "px" : ""; totalWidth += hasWidth || cellMinWidth; if (!hasWidth) fixedWidth = false; if (!nextDOM) { colgroup.appendChild(document.createElement("col")).style.width = cssWidth; } else { if (nextDOM.style.width != cssWidth) nextDOM.style.width = cssWidth; nextDOM = nextDOM.nextSibling; } } } while (nextDOM) { const after = nextDOM.nextSibling; (_a = nextDOM.parentNode) == null ? void 0 : _a.removeChild(nextDOM); nextDOM = after; } if (fixedWidth) { table.style.width = totalWidth + "px"; table.style.minWidth = ""; } else { table.style.width = ""; table.style.minWidth = totalWidth + "px"; } } // src/columnresizing.ts var columnResizingPluginKey = new PluginKey("tableColumnResizing"); function columnResizing({ handleWidth = 5, cellMinWidth = 25, View = TableView$1, lastColumnResizable = true } = {}) { const plugin = new Plugin({ key: columnResizingPluginKey, state: { init(_, state) { plugin.spec.props.nodeViews[tableNodeTypes(state.schema).table.name] = (node, view) => new View(node, cellMinWidth, view); return new ResizeState(-1, false); }, apply(tr, prev) { return prev.apply(tr); } }, props: { attributes: state => { const pluginState = columnResizingPluginKey.getState(state); return pluginState && pluginState.activeHandle > -1 ? { class: "resize-cursor" } : {}; }, handleDOMEvents: { mousemove: (view, event) => { handleMouseMove(view, event, handleWidth, cellMinWidth, lastColumnResizable); }, mouseleave: view => { handleMouseLeave(view); }, mousedown: (view, event) => { handleMouseDown2(view, event, cellMinWidth); } }, decorations: state => { const pluginState = columnResizingPluginKey.getState(state); if (pluginState && pluginState.activeHandle > -1) { return handleDecorations(state, pluginState.activeHandle); } }, nodeViews: {} } }); return plugin; } var ResizeState = class { constructor(activeHandle, dragging) { this.activeHandle = activeHandle; this.dragging = dragging; } apply(tr) { const state = this; const action = tr.getMeta(columnResizingPluginKey); if (action && action.setHandle != null) return new ResizeState(action.setHandle, false); if (action && action.setDragging !== void 0) return new ResizeState(state.activeHandle, action.setDragging); if (state.activeHandle > -1 && tr.docChanged) { let handle = tr.mapping.map(state.activeHandle, -1); if (!pointsAtCell(tr.doc.resolve(handle))) { handle = -1; } return new ResizeState(handle, state.dragging); } return state; } }; function handleMouseMove(view, event, handleWidth, cellMinWidth, lastColumnResizable) { const pluginState = columnResizingPluginKey.getState(view.state); if (!pluginState) return; if (!pluginState.dragging) { const target = domCellAround(event.target); let cell = -1; if (target) { const { left, right } = target.getBoundingClientRect(); if (event.clientX - left <= handleWidth) cell = edgeCell(view, event, "left");else if (right - event.clientX <= handleWidth) cell = edgeCell(view, event, "right"); } if (cell != pluginState.activeHandle) { if (!lastColumnResizable && cell !== -1) { const $cell = view.state.doc.resolve(cell); const table = $cell.node(-1); const map = TableMap.get(table); const tableStart = $cell.start(-1); const col = map.colCount($cell.pos - tableStart) + $cell.nodeAfter.attrs.colspan - 1; if (col == map.width - 1) { return; } } updateHandle(view, cell); } } } function handleMouseLeave(view) { const pluginState = columnResizingPluginKey.getState(view.state); if (pluginState && pluginState.activeHandle > -1 && !pluginState.dragging) updateHandle(view, -1); } function handleMouseDown2(view, event, cellMinWidth) { const pluginState = columnResizingPluginKey.getState(view.state); if (!pluginState || pluginState.activeHandle == -1 || pluginState.dragging) return false; const cell = view.state.doc.nodeAt(pluginState.activeHandle); const width = currentColWidth(view, pluginState.activeHandle, cell.attrs); view.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setDragging: { startX: event.clientX, startWidth: width } })); function finish(event2) { window.removeEventListener("mouseup", finish); window.removeEventListener("mousemove", move); const pluginState2 = columnResizingPluginKey.getState(view.state); if (pluginState2 == null ? void 0 : pluginState2.dragging) { updateColumnWidth(view, pluginState2.activeHandle, draggedWidth(pluginState2.dragging, event2, cellMinWidth)); view.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setDragging: null })); } } function move(event2) { if (!event2.which) return finish(event2); const pluginState2 = columnResizingPluginKey.getState(view.state); if (!pluginState2) return; if (pluginState2.dragging) { const dragged = draggedWidth(pluginState2.dragging, event2, cellMinWidth); displayColumnWidth(view, pluginState2.activeHandle, dragged, cellMinWidth); } } window.addEventListener("mouseup", finish); window.addEventListener("mousemove", move); event.preventDefault(); return true; } function currentColWidth(view, cellPos, { colspan, colwidth }) { const width = colwidth && colwidth[colwidth.length - 1]; if (width) return width; const dom = view.domAtPos(cellPos); const node = dom.node.childNodes[dom.offset]; let domWidth = node.offsetWidth, parts = colspan; if (colwidth) { for (let i = 0; i < colspan; i++) if (colwidth[i]) { domWidth -= colwidth[i]; parts--; } } return domWidth / parts; } function domCellAround(target) { while (target && target.nodeName != "TD" && target.nodeName != "TH") target = target.classList && target.classList.contains("ProseMirror") ? null : target.parentNode; return target; } function edgeCell(view, event, side) { const found = view.posAtCoords({ left: event.clientX, top: event.clientY }); if (!found) return -1; const { pos } = found; const $cell = cellAround(view.state.doc.resolve(pos)); if (!$cell) return -1; if (side == "right") return $cell.pos; const map = TableMap.get($cell.node(-1)), start = $cell.start(-1); const index = map.map.indexOf($cell.pos - start); return index % map.width == 0 ? -1 : start + map.map[index - 1]; } function draggedWidth(dragging, event, cellMinWidth) { const offset = event.clientX - dragging.startX; return Math.max(cellMinWidth, dragging.startWidth + offset); } function updateHandle(view, value) { view.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setHandle: value })); } function updateColumnWidth(view, cell, width) { const $cell = view.state.doc.resolve(cell); const table = $cell.node(-1), map = TableMap.get(table), start = $cell.start(-1); const col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1; const tr = view.state.tr; for (let row = 0; row < map.height; row++) { const mapIndex = row * map.width + col; if (row && map.map[mapIndex] == map.map[mapIndex - map.width]) continue; const pos = map.map[mapIndex]; const attrs = table.nodeAt(pos).attrs; const index = attrs.colspan == 1 ? 0 : col - map.colCount(pos); if (attrs.colwidth && attrs.colwidth[index] == width) continue; const colwidth = attrs.colwidth ? attrs.colwidth.slice() : zeroes(attrs.colspan); colwidth[index] = width; tr.setNodeMarkup(start + pos, null, { ...attrs, colwidth }); } if (tr.docChanged) view.dispatch(tr); } function displayColumnWidth(view, cell, width, cellMinWidth) { const $cell = view.state.doc.resolve(cell); const table = $cell.node(-1), start = $cell.start(-1); const col = TableMap.get(table).colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1; let dom = view.domAtPos($cell.start(-1)).node; while (dom && dom.nodeName != "TABLE") { dom = dom.parentNode; } if (!dom) return; updateColumnsOnResize(table, dom.firstChild, dom, cellMinWidth, col, width); } function zeroes(n) { return Array(n).fill(0); } function handleDecorations(state, cell) { const decorations = []; const $cell = state.doc.resolve(cell); const table = $cell.node(-1); if (!table) { return DecorationSet.empty; } const map = TableMap.get(table); const start = $cell.start(-1); const col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan; for (let row = 0; row < map.height; row++) { const index = col + row * map.width - 1; if ((col == map.width || map.map[index] != map.map[index + 1]) && (row == 0 || map.map[index - 1] != map.map[index - 1 - map.width])) { const cellPos = map.map[index]; const pos = start + cellPos + table.nodeAt(cellPos).nodeSize - 1; const dom = document.createElement("div"); dom.className = "column-resize-handle"; decorations.push(Decoration.widget(pos, dom)); } } return DecorationSet.create(state.doc, decorations); } function selectedRect(state) { const sel = state.selection; const $pos = selectionCell(state); const table = $pos.node(-1); const tableStart = $pos.start(-1); const map = TableMap.get(table); const rect = sel instanceof CellSelection ? map.rectBetween(sel.$anchorCell.pos - tableStart, sel.$headCell.pos - tableStart) : map.findCell($pos.pos - tableStart); return { ...rect, tableStart, map, table }; } function addColumn(tr, { map, tableStart, table }, col) { let refColumn = col > 0 ? -1 : 0; if (columnIsHeader(map, table, col + refColumn)) { refColumn = col == 0 || col == map.width ? null : 0; } for (let row = 0; row < map.height; row++) { const index = row * map.width + col; if (col > 0 && col < map.width && map.map[index - 1] == map.map[index]) { const pos = map.map[index]; const cell = table.nodeAt(pos); tr.setNodeMarkup(tr.mapping.map(tableStart + pos), null, addColSpan(cell.attrs, col - map.colCount(pos))); row += cell.attrs.rowspan - 1; } else { const type = refColumn == null ? tableNodeTypes(table.type.schema).cell : table.nodeAt(map.map[index + refColumn]).type; const pos = map.positionAt(row, col, table); tr.insert(tr.mapping.map(tableStart + pos), type.createAndFill()); } } return tr; } function addColumnBefore(state, dispatch) { if (!isInTable(state)) return false; if (dispatch) { const rect = selectedRect(state); dispatch(addColumn(state.tr, rect, rect.left)); } return true; } function addColumnAfter(state, dispatch) { if (!isInTable(state)) return false; if (dispatch) { const rect = selectedRect(state); dispatch(addColumn(state.tr, rect, rect.right)); } return true; } function removeColumn(tr, { map, table, tableStart }, col) { const mapStart = tr.mapping.maps.length; for (let row = 0; row < map.height;) { const index = row * map.width + col; const pos = map.map[index]; const cell = table.nodeAt(pos); const attrs = cell.attrs; if (col > 0 && map.map[index - 1] == pos || col < map.width - 1 && map.map[index + 1] == pos) { tr.setNodeMarkup(tr.mapping.slice(mapStart).map(tableStart + pos), null, removeColSpan(attrs, col - map.colCount(pos))); } else { const start = tr.mapping.slice(mapStart).map(tableStart + pos); tr.delete(start, start + cell.nodeSize); } row += attrs.rowspan; } } function deleteColumn(state, dispatch) { if (!isInTable(state)) return false; if (dispatch) { const rect = selectedRect(state); const tr = state.tr; if (rect.left == 0 && rect.right == rect.map.width) return false; for (let i = rect.right - 1;; i--) { removeColumn(tr, rect, i); if (i == rect.left) break; const table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc; if (!table) { throw RangeError("No table found"); } rect.table = table; rect.map = TableMap.get(table); } dispatch(tr); } return true; } function rowIsHeader(map, table, row) { var _a; const headerCell = tableNodeTypes(table.type.schema).header_cell; for (let col = 0; col < map.width; col++) if (((_a = table.nodeAt(map.map[col + row * map.width])) == null ? void 0 : _a.type) != headerCell) return false; return true; } function addRow(tr, { map, tableStart, table }, row) { var _a; let rowPos = tableStart; for (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize; const cells = []; let refRow = row > 0 ? -1 : 0; if (rowIsHeader(map, table, row + refRow)) refRow = row == 0 || row == map.height ? null : 0; for (let col = 0, index = map.width * row; col < map.width; col++, index++) { if (row > 0 && row < map.height && map.map[index] == map.map[index - map.width]) { const pos = map.map[index]; const attrs = table.nodeAt(pos).attrs; tr.setNodeMarkup(tableStart + pos, null, { ...attrs, rowspan: attrs.rowspan + 1 }); col += attrs.colspan - 1; } else { const type = refRow == null ? tableNodeTypes(table.type.schema).cell : (_a = table.nodeAt(map.map[index + refRow * map.width])) == null ? void 0 : _a.type; const node = type == null ? void 0 : type.createAndFill(); if (node) cells.push(node); } } tr.insert(rowPos, tableNodeTypes(table.type.schema).row.create(null, cells)); return tr; } function addRowBefore(state, dispatch) { if (!isInTable(state)) return false; if (dispatch) { const rect = selectedRect(state); dispatch(addRow(state.tr, rect, rect.top)); } return true; } function addRowAfter(state, dispatch) { if (!isInTable(state)) return false; if (dispatch) { const rect = selectedRect(state); dispatch(addRow(state.tr, rect, rect.bottom)); } return true; } function removeRow(tr, { map, table, tableStart }, row) { let rowPos = 0; for (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize; const nextRow = rowPos + table.child(row).nodeSize; const mapFrom = tr.mapping.maps.length; tr.delete(rowPos + tableStart, nextRow + tableStart); for (let col = 0, index = row * map.width; col < map.width; col++, index++) { const pos = map.map[index]; if (row > 0 && pos == map.map[index - map.width]) { const attrs = table.nodeAt(pos).attrs; tr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + tableStart), null, { ...attrs, rowspan: attrs.rowspan - 1 }); col += attrs.colspan - 1; } else if (row < map.width && pos == map.map[index + map.width]) { const cell = table.nodeAt(pos); const attrs = cell.attrs; const copy = cell.type.create({ ...attrs, rowspan: cell.attrs.rowspan - 1 }, cell.content); const newPos = map.positionAt(row + 1, col, table); tr.insert(tr.mapping.slice(mapFrom).map(tableStart + newPos), copy); col += attrs.colspan - 1; } } } function deleteRow(state, dispatch) { if (!isInTable(state)) return false; if (dispatch) { const rect = selectedRect(state), tr = state.tr; if (rect.top == 0 && rect.bottom == rect.map.height) return false; for (let i = rect.bottom - 1;; i--) { removeRow(tr, rect, i); if (i == rect.top) break; const table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc; if (!table) { throw RangeError("No table found"); } rect.table = table; rect.map = TableMap.get(rect.table); } dispatch(tr); } return true; } function isEmpty(cell) { const c = cell.content; return c.childCount == 1 && c.child(0).isTextblock && c.child(0).childCount == 0; } function cellsOverlapRectangle({ width, height, map }, rect) { let indexTop = rect.top * width + rect.left, indexLeft = indexTop; let indexBottom = (rect.bottom - 1) * width + rect.left, indexRight = indexTop + (rect.right - rect.left - 1); for (let i = rect.top; i < rect.bottom; i++) { if (rect.left > 0 && map[indexLeft] == map[indexLeft - 1] || rect.right < width && map[indexRight] == map[indexRight + 1]) return true; indexLeft += width; indexRight += width; } for (let i = rect.left; i < rect.right; i++) { if (rect.top > 0 && map[indexTop] == map[indexTop - width] || rect.bottom < height && map[indexBottom] == map[indexBottom + width]) return true; indexTop++; indexBottom++; } return false; } function mergeCells(state, dispatch) { const sel = state.selection; if (!(sel instanceof CellSelection) || sel.$anchorCell.pos == sel.$headCell.pos) return false; const rect = selectedRect(state), { map } = rect; if (cellsOverlapRectangle(map, rect)) return false; if (dispatch) { const tr = state.tr; const seen = {}; let content = Fragment.empty; let mergedPos; let mergedCell; for (let row = rect.top; row < rect.bottom; row++) { for (let col = rect.left; col < rect.right; col++) { const cellPos = map.map[row * map.width + col]; const cell = rect.table.nodeAt(cellPos); if (seen[cellPos] || !cell) continue; seen[cellPos] = true; if (mergedPos == null) { mergedPos = cellPos; mergedCell = cell; } else { if (!isEmpty(cell)) content = content.append(cell.content); const mapped = tr.mapping.map(cellPos + rect.tableStart); tr.delete(mapped, mapped + cell.nodeSize); } } } if (mergedPos == null || mergedCell == null) { return true; } tr.setNodeMarkup(mergedPos + rect.tableStart, null, { ...addColSpan(mergedCell.attrs, mergedCell.attrs.colspan, rect.right - rect.left - mergedCell.attrs.colspan), rowspan: rect.bottom - rect.top }); if (content.size) { const end = mergedPos + 1 + mergedCell.content.size; const start = isEmpty(mergedCell) ? mergedPos + 1 : end; tr.replaceWith(start + rect.tableStart, end + rect.tableStart, content); } tr.setSelection(new CellSelection(tr.doc.resolve(mergedPos + rect.tableStart))); dispatch(tr); } return true; } function splitCell(state, dispatch) { const nodeTypes = tableNodeTypes(state.schema); return splitCellWithType(({ node }) => { return nodeTypes[node.type.spec.tableRole]; })(state, dispatch); } function splitCellWithType(getCellType) { return (state, dispatch) => { var _a; const sel = state.selection; let cellNode; let cellPos; if (!(sel instanceof CellSelection)) { cellNode = cellWrapping(sel.$from); if (!cellNode) return false; cellPos = (_a = cellAround(sel.$from)) == null ? void 0 : _a.pos; } else { if (sel.$anchorCell.pos != sel.$headCell.pos) return false; cellNode = sel.$anchorCell.nodeAfter; cellPos = sel.$anchorCell.pos; } if (cellNode == null || cellPos == null) { return false; } if (cellNode.attrs.colspan == 1 && cellNode.attrs.rowspan == 1) { return false; } if (dispatch) { let baseAttrs = cellNode.attrs; const attrs = []; const colwidth = baseAttrs.colwidth; if (baseAttrs.rowspan > 1) baseAttrs = { ...baseAttrs, rowspan: 1 }; if (baseAttrs.colspan > 1) baseAttrs = { ...baseAttrs, colspan: 1 }; const rect = selectedRect(state), tr = state.tr; for (let i = 0; i < rect.right - rect.left; i++) attrs.push(colwidth ? { ...baseAttrs, colwidth: colwidth && colwidth[i] ? [colwidth[i]] : null } : baseAttrs); let lastCell; for (let row = rect.top; row < rect.bottom; row++) { let pos = rect.map.positionAt(row, rect.left, rect.table); if (row == rect.top) pos += cellNode.nodeSize; for (let col = rect.left, i = 0; col < rect.right; col++, i++) { if (col == rect.left && row == rect.top) continue; tr.insert(lastCell = tr.mapping.map(pos + rect.tableStart, 1), getCellType({ node: cellNode, row, col }).createAndFill(attrs[i])); } } tr.setNodeMarkup(cellPos, getCellType({ node: cellNode, row: rect.top, col: rect.left }), attrs[0]); if (sel instanceof CellSelection) tr.setSelection(new CellSelection(tr.doc.resolve(sel.$anchorCell.pos), lastCell ? tr.doc.resolve(lastCell) : void 0)); dispatch(tr); } return true; }; } function setCellAttr(name, value) { return function (state, dispatch) { if (!isInTable(state)) return false; const $cell = selectionCell(state); if ($cell.nodeAfter.attrs[name] === value) return false; if (dispatch) { const tr = state.tr; if (state.selection instanceof CellSelection) state.selection.forEachCell((node, pos) => { if (node.attrs[name] !== value) tr.setNodeMarkup(pos, null, { ...node.attrs, [name]: value }); });else tr.setNodeMarkup($cell.pos, null, { ...$cell.nodeAfter.attrs, [name]: value }); dispatch(tr); } return true; }; } function deprecated_toggleHeader(type) { return function (state, dispatch) { if (!isInTable(state)) return false; if (dispatch) { const types = tableNodeTypes(state.schema); const rect = selectedRect(state), tr = state.tr; const cells = rect.map.cellsInRect(type == "column" ? { left: rect.left, top: 0, right: rect.right, bottom: rect.map.height } : type == "row" ? { left: 0, top: rect.top, right: rect.map.width, bottom: rect.bottom } : rect); const nodes = cells.map(pos => rect.table.nodeAt(pos)); for (let i = 0; i < cells.length; i++) if (nodes[i].type == types.header_cell) tr.setNodeMarkup(rect.tableStart + cells[i], types.cell, nodes[i].attrs); if (tr.steps.length == 0) for (let i = 0; i < cells.length; i++) tr.setNodeMarkup(rect.tableStart + cells[i], types.header_cell, nodes[i].attrs); dispatch(tr); } return true; }; } function isHeaderEnabledByType(type, rect, types) { const cellPositions = rect.map.cellsInRect({ left: 0, top: 0, right: type == "row" ? rect.map.width : 1, bottom: type == "column" ? rect.map.height : 1 }); for (let i = 0; i < cellPositions.length; i++) { const cell = rect.table.nodeAt(cellPositions[i]); if (cell && cell.type !== types.header_cell) { return false; } } return true; } function toggleHeader(type, options) { options = options || { useDeprecatedLogic: false }; if (options.useDeprecatedLogic) return deprecated_toggleHeader(type); return function (state, dispatch) { if (!isInTable(state)) return false; if (dispatch) { const types = tableNodeTypes(state.schema); const rect = selectedRect(state), tr = state.tr; const isHeaderRowEnabled = isHeaderEnabledByType("row", rect, types); const isHeaderColumnEnabled = isHeaderEnabledByType("column", rect, types); const isHeaderEnabled = type === "column" ? isHeaderRowEnabled : type === "row" ? isHeaderColumnEnabled : false; const selectionStartsAt = isHeaderEnabled ? 1 : 0; const cellsRect = type == "column" ? { left: 0, top: selectionStartsAt, right: 1, bottom: rect.map.height } : type == "row" ? { left: selectionStartsAt, top: 0, right: rect.map.width, bottom: 1 } : rect; const newType = type == "column" ? isHeaderColumnEnabled ? types.cell : types.header_cell : type == "row" ? isHeaderRowEnabled ? types.cell : types.header_cell : types.cell; rect.map.cellsInRect(cellsRect).forEach(relativeCellPos => { const cellPos = relativeCellPos + rect.tableStart; const cell = tr.doc.nodeAt(cellPos); if (cell) { tr.setNodeMarkup(cellPos, newType, cell.attrs); } }); dispatch(tr); } return true; }; } toggleHeader("row", { useDeprecatedLogic: true }); toggleHeader("column", { useDeprecatedLogic: true }); var toggleHeaderCell = toggleHeader("cell", { useDeprecatedLogic: true }); function findNextCell($cell, dir) { if (dir < 0) { const before = $cell.nodeBefore; if (before) return $cell.pos - before.nodeSize; for (let row = $cell.index(-1) - 1, rowEnd = $cell.before(); row >= 0; row--) { const rowNode = $cell.node(-1).child(row); const lastChild = rowNode.lastChild; if (lastChild) { return rowEnd - 1 - lastChild.nodeSize; } rowEnd -= rowNode.nodeSize; } } else { if ($cell.index() < $cell.parent.childCount - 1) { return $cell.pos + $cell.nodeAfter.nodeSize; } const table = $cell.node(-1); for (let row = $cell.indexAfter(-1), rowStart = $cell.after(); row < table.childCount; row++) { const rowNode = table.child(row); if (rowNode.childCount) return rowStart + 1; rowStart += rowNode.nodeSize; } } return null; } function goToNextCell(direction) { return function (state, dispatch) { if (!isInTable(state)) return false; const cell = findNextCell(selectionCell(state), direction); if (cell == null) return false; if (dispatch) { const $cell = state.doc.resolve(cell); dispatch(state.tr.setSelection(TextSelection.between($cell, moveCellForward($cell))).scrollIntoView()); } return true; }; } function deleteTable(state, dispatch) { const $pos = state.selection.$anchor; for (let d = $pos.depth; d > 0; d--) { const node = $pos.node(d); if (node.type.spec.tableRole == "table") { if (dispatch) dispatch(state.tr.delete($pos.before(d), $pos.after(d)).scrollIntoView()); return true; } } return false; } // src/index.ts function tableEditing({ allowTableNodeSelection = false } = {}) { return new Plugin({ key: tableEditingKey, state: { init() { return null; }, apply(tr, cur) { const set = tr.getMeta(tableEditingKey); if (set != null) return set == -1 ? null : set; if (cur == null || !tr.docChanged) return cur; const { deleted, pos } = tr.mapping.mapResult(cur); return deleted ? null : pos; } }, props: { decorations: drawCellSelection, handleDOMEvents: { mousedown: handleMouseDown }, createSelectionBetween(view) { return tableEditingKey.getState(view.state) != null ? view.state.selection : null; }, handleTripleClick, handleKeyDown: handleKeyDown$1, handlePaste }, appendTransaction(_, oldState, state) { return normalizeSelection(state, fixTables(state, oldState), allowTableNodeSelection); } }); } function updateColumns(node, colgroup, table, cellMinWidth, overrideCol, overrideValue) { let totalWidth = 0; let fixedWidth = true; let nextDOM = colgroup.firstChild; const row = node.firstChild; for (let i = 0, col = 0; i < row.childCount; i += 1) { const { colspan, colwidth } = row.child(i).attrs; for (let j = 0; j < colspan; j += 1, col += 1) { const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j]; const cssWidth = hasWidth ? `${hasWidth}px` : ''; totalWidth += hasWidth || cellMinWidth; if (!hasWidth) { fixedWidth = false; } if (!nextDOM) { colgroup.appendChild(document.createElement('col')).style.width = cssWidth; } else { if (nextDOM.style.width !== cssWidth) { nextDOM.style.width = cssWidth; } nextDOM = nextDOM.nextSibling; } } } while (nextDOM) { const after = nextDOM.nextSibling; nextDOM.parentNode.removeChild(nextDOM); nextDOM = after; } if (fixedWidth) { table.style.width = `${totalWidth}px`; table.style.minWidth = ''; } else { table.style.width = ''; table.style.minWidth = `${totalWidth}px`; } } class TableView { constructor(node, cellMinWidth) { this.node = node; this.cellMinWidth = cellMinWidth; this.dom = document.createElement('div'); this.dom.className = 'tableWrapper'; this.table = this.dom.appendChild(document.createElement('table')); this.colgroup = this.table.appendChild(document.createElement('colgroup')); updateColumns(node, this.colgroup, this.table, cellMinWidth); this.contentDOM = this.table.appendChild(document.createElement('tbody')); } update(node) { if (node.type !== this.node.type) { return false; } this.node = node; updateColumns(node, this.colgroup, this.table, this.cellMinWidth); return true; } ignoreMutation(mutation) { return mutation.type === 'attributes' && (mutation.target === this.table || this.colgroup.contains(mutation.target)); } } function createCell(cellType, cellContent) { if (cellContent) { return cellType.createChecked(null, cellContent); } return cellType.createAndFill(); } function getTableNodeTypes(schema) { if (schema.cached.tableNodeTypes) { return schema.cached.tableNodeTypes; } const roles = {}; Object.keys(schema.nodes).forEach(type => { const nodeType = schema.nodes[type]; if (nodeType.spec.tableRole) { roles[nodeType.spec.tableRole] = nodeType; } }); schema.cached.tableNodeTypes = roles; return roles; } function createTable(schema, rowsCount, colsCount, withHeaderRow, cellContent) { const types = getTableNodeTypes(schema); const headerCells = []; const cells = []; for (let index = 0; index < colsCount; index += 1) { const cell = createCell(types.cell, cellContent); if (cell) { cells.push(cell); } if (withHeaderRow) { const headerCell = createCell(types.header_cell, cellContent); if (headerCell) { headerCells.push(headerCell); } } } const rows = []; for (let index = 0; index < rowsCount; index += 1) { rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells)); } return types.table.createChecked(null, rows); } function isCellSelection(value) { return value instanceof CellSelection; } const deleteTableWhenAllCellsSelected = ({ editor }) => { const { selection } = editor.state; if (!isCellSelection(selection)) { return false; } let cellCount = 0; const table = findParentNodeClosestToPos(selection.ranges[0].$from, node => { return node.type.name === 'table'; }); table === null || table === void 0 ? void 0 : table.node.descendants(node => { if (node.type.name === 'table') { return false; } if (['tableCell', 'tableHeader'].includes(node.type.name)) { cellCount += 1; } }); const allCellsSelected = cellCount === selection.ranges.length; if (!allCellsSelected) { return false; } editor.commands.deleteTable(); return true; }; const Table = Node$1.create({ name: 'table', // @ts-ignore addOptions() { return { HTMLAttributes: {}, resizable: false, handleWidth: 5, cellMinWidth: 25, // TODO: fix View: TableView, lastColumnResizable: true, allowTableNodeSelection: false }; }, content: 'tableRow+', tableRole: 'table', isolating: true, group: 'block', parseHTML() { return [{ tag: 'table' }]; }, renderHTML({ HTMLAttributes }) { return ['table', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), ['tbody', 0]]; }, addCommands() { return { insertTable: ({ rows = 3, cols = 3, withHeaderRow = true } = {}) => ({ tr, dispatch, editor }) => { const node = createTable(editor.schema, rows, cols, withHeaderRow); if (dispatch) { const offset = tr.selection.anchor + 1; tr.replaceSelectionWith(node).scrollIntoView().setSelection(TextSelection.near(tr.doc.resolve(offset))); } return true; }, addColumnBefore: () => ({ state, dispatch }) => { return addColumnBefore(state, dispatch); }, addColumnAfter: () => ({ state, dispatch }) => { return addColumnAfter(state, dispatch); }, deleteColumn: () => ({ state, dispatch }) => { return deleteColumn(state, dispatch); }, addRowBefore: () => ({ state, dispatch }) => { return addRowBefore(state, dispatch); }, addRowAfter: () => ({ state, dispatch }) => { return addRowAfter(state, dispatch); }, deleteRow: () => ({ state, dispatch }) => { return deleteRow(state, dispatch); }, deleteTable: () => ({ state, dispatch }) => { return deleteTable(state, dispatch); }, mergeCells: () => ({ state, dispatch }) => { return mergeCells(state, dispatch); }, splitCell: () => ({ state, dispatch }) => { return splitCell(state, dispatch); }, toggleHeaderColumn: () => ({ state, dispatch }) => { return toggleHeader('column')(state, dispatch); }, toggleHeaderRow: () => ({ state, dispatch }) => { return toggleHeader('row')(state, dispatch); }, toggleHeaderCell: () => ({ state, dispatch }) => { return toggleHeaderCell(state, dispatch); }, mergeOrSplit: () => ({ state, dispatch }) => { if (mergeCells(state, dispatch)) { return true; } return splitCell(state, dispatch); }, setCellAttribute: (name, value) => ({ state, dispatch }) => { return setCellAttr(name, value)(state, dispatch); }, goToNextCell: () => ({ state, dispatch }) => { return goToNextCell(1)(state, dispatch); }, goToPreviousCell: () => ({ state, dispatch }) => { return goToNextCell(-1)(state, dispatch); }, fixTables: () => ({ state, dispatch }) => { if (dispatch) { fixTables(state); } return true; }, setCellSelection: position => ({ tr, dispatch }) => { if (dispatch) { const selection = CellSelection.create(tr.doc, position.anchorCell, position.headCell); // @ts-ignore tr.setSelection(selection); } return true; } }; }, addKeyboardShortcuts() { return { Tab: () => { if (this.editor.commands.goToNextCell()) { return true; } if (!this.editor.can().addRowAfter()) { return false; } return this.editor.chain().addRowAfter().goToNextCell().run(); }, 'Shift-Tab': () => this.editor.commands.goToPreviousCell(), Backspace: deleteTableWhenAllCellsSelected, 'Mod-Backspace': deleteTableWhenAllCellsSelected, Delete: deleteTableWhenAllCellsSelected, 'Mod-Delete': deleteTableWhenAllCellsSelected }; }, addProseMirrorPlugins() { const isResizable = this.options.resizable && this.editor.isEditable; return [...(isResizable ? [columnResizing({ handleWidth: this.options.handleWidth, cellMinWidth: this.options.cellMinWidth, // @ts-ignore (incorrect type) View: this.options.View, // TODO: PR for @types/prosemirror-tables // @ts-ignore (incorrect type) lastColumnResizable: this.options.lastColumnResizable })] : []), tableEditing({ allowTableNodeSelection: this.options.allowTableNodeSelection })]; }, extendNodeSchema(extension) { const context = { name: extension.name, options: extension.options, storage: extension.storage }; return { tableRole: callOrReturn(getExtensionField(extension, 'tableRole', context)) }; } }); const TableCell = Node$1.create({ name: 'tableCell', addOptions() { return { HTMLAttributes: {} }; }, content: 'block+', addAttributes() { return { colspan: { default: 1 }, rowspan: { default: 1 }, colwidth: { default: null, parseHTML: element => { const colwidth = element.getAttribute('colwidth'); const value = colwidth ? [parseInt(colwidth, 10)] : null; return value; } } }; }, tableRole: 'cell', isolating: true, parseHTML() { return [{ tag: 'td' }]; }, renderHTML({ HTMLAttributes }) { return ['td', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; } }); const TableHeader = Node$1.create({ name: 'tableHeader', addOptions() { return { HTMLAttributes: {} }; }, content: 'block+', addAttributes() { return { colspan: { default: 1 }, rowspan: { default: 1 }, colwidth: { default: null, parseHTML: element => { const colwidth = element.getAttribute('colwidth'); const value = colwidth ? [parseInt(colwidth, 10)] : null; return value; } } }; }, tableRole: 'header_cell', isolating: true, parseHTML() { return [{ tag: 'th' }]; }, renderHTML({ HTMLAttributes }) { return ['th', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; } }); const TableRow = Node$1.create({ name: 'tableRow', addOptions() { return { HTMLAttributes: {} }; }, content: '(tableCell | tableHeader)*', tableRole: 'row', parseHTML() { return [{ tag: 'tr' }]; }, renderHTML({ HTMLAttributes }) { return ['tr', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; } }); const TextAlign = Extension.create({ name: 'textAlign', addOptions() { return { types: [], alignments: ['left', 'center', 'right', 'justify'], defaultAlignment: 'left' }; }, addGlobalAttributes() { return [{ types: this.options.types, attributes: { textAlign: { default: this.options.defaultAlignment, parseHTML: element => element.style.textAlign || this.options.defaultAlignment, renderHTML: attributes => { if (attributes.textAlign === this.options.defaultAlignment) { return {}; } return { style: `text-align: ${attributes.textAlign}` }; } } } }]; }, addCommands() { return { setTextAlign: alignment => ({ commands }) => { if (!this.options.alignments.includes(alignment)) { return false; } return this.options.types.every(type => commands.updateAttributes(type, { textAlign: alignment })); }, unsetTextAlign: () => ({ commands }) => { return this.options.types.every(type => commands.resetAttributes(type, 'textAlign')); } }; }, addKeyboardShortcuts() { return { 'Mod-Shift-l': () => this.editor.commands.setTextAlign('left'), 'Mod-Shift-e': () => this.editor.commands.setTextAlign('center'), 'Mod-Shift-r': () => this.editor.commands.setTextAlign('right'), 'Mod-Shift-j': () => this.editor.commands.setTextAlign('justify') }; } }); const emDash = override => textInputRule({ find: /--$/, replace: override !== null && override !== void 0 ? override : '—' }); const ellipsis = override => textInputRule({ find: /\.\.\.$/, replace: override !== null && override !== void 0 ? override : '…' }); const openDoubleQuote = override => textInputRule({ find: /(?:^|[\s{[(<'"\u2018\u201C])(")$/, replace: override !== null && override !== void 0 ? override : '“' }); const closeDoubleQuote = override => textInputRule({ find: /"$/, replace: override !== null && override !== void 0 ? override : '”' }); const openSingleQuote = override => textInputRule({ find: /(?:^|[\s{[(<'"\u2018\u201C])(')$/, replace: override !== null && override !== void 0 ? override : '‘' }); const closeSingleQuote = override => textInputRule({ find: /'$/, replace: override !== null && override !== void 0 ? override : '’' }); const leftArrow = override => textInputRule({ find: /<-$/, replace: override !== null && override !== void 0 ? override : '←' }); const rightArrow = override => textInputRule({ find: /->$/, replace: override !== null && override !== void 0 ? override : '→' }); const copyright = override => textInputRule({ find: /\(c\)$/, replace: override !== null && override !== void 0 ? override : '©' }); const trademark = override => textInputRule({ find: /\(tm\)$/, replace: override !== null && override !== void 0 ? override : '™' }); const servicemark = override => textInputRule({ find: /\(sm\)$/, replace: override !== null && override !== void 0 ? override : '℠' }); const registeredTrademark = override => textInputRule({ find: /\(r\)$/, replace: override !== null && override !== void 0 ? override : '®' }); const oneHalf = override => textInputRule({ find: /(?:^|\s)(1\/2)$/, replace: override !== null && override !== void 0 ? override : '½' }); const plusMinus = override => textInputRule({ find: /\+\/-$/, replace: override !== null && override !== void 0 ? override : '±' }); const notEqual = override => textInputRule({ find: /!=$/, replace: override !== null && override !== void 0 ? override : '≠' }); const laquo = override => textInputRule({ find: /<<$/, replace: override !== null && override !== void 0 ? override : '«' }); const raquo = override => textInputRule({ find: />>$/, replace: override !== null && override !== void 0 ? override : '»' }); const multiplication = override => textInputRule({ find: /\d+\s?([*x])\s?\d+$/, replace: override !== null && override !== void 0 ? override : '×' }); const superscriptTwo = override => textInputRule({ find: /\^2$/, replace: override !== null && override !== void 0 ? override : '²' }); const superscriptThree = override => textInputRule({ find: /\^3$/, replace: override !== null && override !== void 0 ? override : '³' }); const oneQuarter = override => textInputRule({ find: /(?:^|\s)(1\/4)$/, replace: override !== null && override !== void 0 ? override : '¼' }); const threeQuarters = override => textInputRule({ find: /(?:^|\s)(3\/4)$/, replace: override !== null && override !== void 0 ? override : '¾' }); const Typography = Extension.create({ name: 'typography', addInputRules() { const rules = []; if (this.options.emDash !== false) { rules.push(emDash(this.options.emDash)); } if (this.options.ellipsis !== false) { rules.push(ellipsis(this.options.ellipsis)); } if (this.options.openDoubleQuote !== false) { rules.push(openDoubleQuote(this.options.openDoubleQuote)); } if (this.options.closeDoubleQuote !== false) { rules.push(closeDoubleQuote(this.options.closeDoubleQuote)); } if (this.options.openSingleQuote !== false) { rules.push(openSingleQuote(this.options.openSingleQuote)); } if (this.options.closeSingleQuote !== false) { rules.push(closeSingleQuote(this.options.closeSingleQuote)); } if (this.options.leftArrow !== false) { rules.push(leftArrow(this.options.leftArrow)); } if (this.options.rightArrow !== false) { rules.push(rightArrow(this.options.rightArrow)); } if (this.options.copyright !== false) { rules.push(copyright(this.options.copyright)); } if (this.options.trademark !== false) { rules.push(trademark(this.options.trademark)); } if (this.options.servicemark !== false) { rules.push(servicemark(this.options.servicemark)); } if (this.options.registeredTrademark !== false) { rules.push(registeredTrademark(this.options.registeredTrademark)); } if (this.options.oneHalf !== false) { rules.push(oneHalf(this.options.oneHalf)); } if (this.options.plusMinus !== false) { rules.push(plusMinus(this.options.plusMinus)); } if (this.options.notEqual !== false) { rules.push(notEqual(this.options.notEqual)); } if (this.options.laquo !== false) { rules.push(laquo(this.options.laquo)); } if (this.options.raquo !== false) { rules.push(raquo(this.options.raquo)); } if (this.options.multiplication !== false) { rules.push(multiplication(this.options.multiplication)); } if (this.options.superscriptTwo !== false) { rules.push(superscriptTwo(this.options.superscriptTwo)); } if (this.options.superscriptThree !== false) { rules.push(superscriptThree(this.options.superscriptThree)); } if (this.options.oneQuarter !== false) { rules.push(oneQuarter(this.options.oneQuarter)); } if (this.options.threeQuarters !== false) { rules.push(threeQuarters(this.options.threeQuarters)); } return rules; } }); const Portals = ({ renderers }) => { return /*#__PURE__*/React__namespace.default.createElement(React__namespace.default.Fragment, null, Object.entries(renderers).map(([key, renderer]) => { return /*#__PURE__*/ReactDOM__namespace.default.createPortal(renderer.reactElement, renderer.element, key); })); }; class PureEditorContent extends React__namespace.default.Component { constructor(props) { super(props); this.editorContentRef = /*#__PURE__*/React__namespace.default.createRef(); this.initialized = false; this.state = { renderers: {} }; } componentDidMount() { this.init(); } componentDidUpdate() { this.init(); } init() { const { editor } = this.props; if (editor && editor.options.element) { if (editor.contentComponent) { return; } const element = this.editorContentRef.current; element.append(...editor.options.element.childNodes); editor.setOptions({ element }); editor.contentComponent = this; editor.createNodeViews(); this.initialized = true; } } maybeFlushSync(fn) { // Avoid calling flushSync until the editor is initialized. // Initialization happens during the componentDidMount or componentDidUpdate // lifecycle methods, and React doesn't allow calling flushSync from inside // a lifecycle method. if (this.initialized) { ReactDOM.flushSync(fn); } else { fn(); } } setRenderer(id, renderer) { this.maybeFlushSync(() => { this.setState(({ renderers }) => ({ renderers: { ...renderers, [id]: renderer } })); }); } removeRenderer(id) { this.maybeFlushSync(() => { this.setState(({ renderers }) => { const nextRenderers = { ...renderers }; delete nextRenderers[id]; return { renderers: nextRenderers }; }); }); } componentWillUnmount() { const { editor } = this.props; if (!editor) { return; } this.initialized = false; if (!editor.isDestroyed) { editor.view.setProps({ nodeViews: {} }); } editor.contentComponent = null; if (!editor.options.element.firstChild) { return; } const newElement = document.createElement('div'); newElement.append(...editor.options.element.childNodes); editor.setOptions({ element: newElement }); } render() { const { editor, ...rest } = this.props; return /*#__PURE__*/React__namespace.default.createElement(React__namespace.default.Fragment, null, /*#__PURE__*/React__namespace.default.createElement("div", { ref: this.editorContentRef, ...rest }), /*#__PURE__*/React__namespace.default.createElement(Portals, { renderers: this.state.renderers })); } } // EditorContent should be re-created whenever the Editor instance changes const EditorContentWithKey = props => { const key = React__namespace.default.useMemo(() => { return Math.floor(Math.random() * 0xFFFFFFFF).toString(); }, [props.editor]); // Can't use JSX here because it conflicts with the type definition of Vue's JSX, so use createElement return /*#__PURE__*/React__namespace.default.createElement(PureEditorContent, { key, ...props }); }; const EditorContent = /*#__PURE__*/React__namespace.default.memo(EditorContentWithKey); let Editor$1 = class Editor extends Editor$2 { constructor() { super(...arguments); this.contentComponent = null; } }; function useForceUpdate() { const [, setValue] = React.useState(0); return () => setValue(value => value + 1); } const useEditor = (options = {}, deps = []) => { const [editor, setEditor] = React.useState(null); const forceUpdate = useForceUpdate(); const { onBeforeCreate, onBlur, onCreate, onDestroy, onFocus, onSelectionUpdate, onTransaction, onUpdate } = options; const onBeforeCreateRef = React.useRef(onBeforeCreate); const onBlurRef = React.useRef(onBlur); const onCreateRef = React.useRef(onCreate); const onDestroyRef = React.useRef(onDestroy); const onFocusRef = React.useRef(onFocus); const onSelectionUpdateRef = React.useRef(onSelectionUpdate); const onTransactionRef = React.useRef(onTransaction); const onUpdateRef = React.useRef(onUpdate); // This effect will handle updating the editor instance // when the event handlers change. React.useEffect(() => { if (!editor) { return; } if (onBeforeCreate) { editor.off('beforeCreate', onBeforeCreateRef.current); editor.on('beforeCreate', onBeforeCreate); onBeforeCreateRef.current = onBeforeCreate; } if (onBlur) { editor.off('blur', onBlurRef.current); editor.on('blur', onBlur); onBlurRef.current = onBlur; } if (onCreate) { editor.off('create', onCreateRef.current); editor.on('create', onCreate); onCreateRef.current = onCreate; } if (onDestroy) { editor.off('destroy', onDestroyRef.current); editor.on('destroy', onDestroy); onDestroyRef.current = onDestroy; } if (onFocus) { editor.off('focus', onFocusRef.current); editor.on('focus', onFocus); onFocusRef.current = onFocus; } if (onSelectionUpdate) { editor.off('selectionUpdate', onSelectionUpdateRef.current); editor.on('selectionUpdate', onSelectionUpdate); onSelectionUpdateRef.current = onSelectionUpdate; } if (onTransaction) { editor.off('transaction', onTransactionRef.current); editor.on('transaction', onTransaction); onTransactionRef.current = onTransaction; } if (onUpdate) { editor.off('update', onUpdateRef.current); editor.on('update', onUpdate); onUpdateRef.current = onUpdate; } }, [onBeforeCreate, onBlur, onCreate, onDestroy, onFocus, onSelectionUpdate, onTransaction, onUpdate, editor]); React.useEffect(() => { let isMounted = true; const instance = new Editor$1(options); setEditor(instance); instance.on('transaction', () => { requestAnimationFrame(() => { requestAnimationFrame(() => { if (isMounted) { forceUpdate(); } }); }); }); return () => { isMounted = false; }; }, deps); React.useEffect(() => { return () => { editor === null || editor === void 0 ? void 0 : editor.destroy(); }; }, [editor]); return editor; }; const EditorContext = /*#__PURE__*/React.createContext({ editor: null }); EditorContext.Consumer; const inputRegex$4 = /^\s*>\s$/; const Blockquote = Node$1.create({ name: 'blockquote', addOptions() { return { HTMLAttributes: {} }; }, content: 'block+', group: 'block', defining: true, parseHTML() { return [{ tag: 'blockquote' }]; }, renderHTML({ HTMLAttributes }) { return ['blockquote', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; }, addCommands() { return { setBlockquote: () => ({ commands }) => { return commands.wrapIn(this.name); }, toggleBlockquote: () => ({ commands }) => { return commands.toggleWrap(this.name); }, unsetBlockquote: () => ({ commands }) => { return commands.lift(this.name); } }; }, addKeyboardShortcuts() { return { 'Mod-Shift-b': () => this.editor.commands.toggleBlockquote() }; }, addInputRules() { return [wrappingInputRule({ find: inputRegex$4, type: this.type })]; } }); const starInputRegex$1 = /(?:^|\s)((?:\*\*)((?:[^*]+))(?:\*\*))$/; const starPasteRegex$1 = /(?:^|\s)((?:\*\*)((?:[^*]+))(?:\*\*))/g; const underscoreInputRegex$1 = /(?:^|\s)((?:__)((?:[^__]+))(?:__))$/; const underscorePasteRegex$1 = /(?:^|\s)((?:__)((?:[^__]+))(?:__))/g; const Bold = Mark.create({ name: 'bold', addOptions() { return { HTMLAttributes: {} }; }, parseHTML() { return [{ tag: 'strong' }, { tag: 'b', getAttrs: node => node.style.fontWeight !== 'normal' && null }, { style: 'font-weight', getAttrs: value => /^(bold(er)?|[5-9]\d{2,})$/.test(value) && null }]; }, renderHTML({ HTMLAttributes }) { return ['strong', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; }, addCommands() { return { setBold: () => ({ commands }) => { return commands.setMark(this.name); }, toggleBold: () => ({ commands }) => { return commands.toggleMark(this.name); }, unsetBold: () => ({ commands }) => { return commands.unsetMark(this.name); } }; }, addKeyboardShortcuts() { return { 'Mod-b': () => this.editor.commands.toggleBold(), 'Mod-B': () => this.editor.commands.toggleBold() }; }, addInputRules() { return [markInputRule({ find: starInputRegex$1, type: this.type }), markInputRule({ find: underscoreInputRegex$1, type: this.type })]; }, addPasteRules() { return [markPasteRule({ find: starPasteRegex$1, type: this.type }), markPasteRule({ find: underscorePasteRegex$1, type: this.type })]; } }); const ListItem$2 = Node$1.create({ name: 'listItem', addOptions() { return { HTMLAttributes: {}, bulletListTypeName: 'bulletList', orderedListTypeName: 'orderedList' }; }, content: 'paragraph block*', defining: true, parseHTML() { return [{ tag: 'li' }]; }, renderHTML({ HTMLAttributes }) { return ['li', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; }, addKeyboardShortcuts() { return { Enter: () => this.editor.commands.splitListItem(this.name), Tab: () => this.editor.commands.sinkListItem(this.name), 'Shift-Tab': () => this.editor.commands.liftListItem(this.name) }; } }); const TextStyle$1 = Mark.create({ name: 'textStyle', addOptions() { return { HTMLAttributes: {} }; }, parseHTML() { return [{ tag: 'span', getAttrs: element => { const hasStyles = element.hasAttribute('style'); if (!hasStyles) { return false; } return {}; } }]; }, renderHTML({ HTMLAttributes }) { return ['span', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; }, addCommands() { return { removeEmptyTextStyle: () => ({ state, commands }) => { const attributes = getMarkAttributes(state, this.type); const hasStyles = Object.entries(attributes).some(([, value]) => !!value); if (hasStyles) { return true; } return commands.unsetMark(this.name); } }; } }); const inputRegex$3 = /^\s*([-+*])\s$/; const BulletList = Node$1.create({ name: 'bulletList', addOptions() { return { itemTypeName: 'listItem', HTMLAttributes: {}, keepMarks: false, keepAttributes: false }; }, group: 'block list', content() { return `${this.options.itemTypeName}+`; }, parseHTML() { return [{ tag: 'ul' }]; }, renderHTML({ HTMLAttributes }) { return ['ul', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; }, addCommands() { return { toggleBulletList: () => ({ commands, chain }) => { if (this.options.keepAttributes) { return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItem$2.name, this.editor.getAttributes(TextStyle$1.name)).run(); } return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks); } }; }, addKeyboardShortcuts() { return { 'Mod-Shift-8': () => this.editor.commands.toggleBulletList() }; }, addInputRules() { let inputRule = wrappingInputRule({ find: inputRegex$3, type: this.type }); if (this.options.keepMarks || this.options.keepAttributes) { inputRule = wrappingInputRule({ find: inputRegex$3, type: this.type, keepMarks: this.options.keepMarks, keepAttributes: this.options.keepAttributes, getAttributes: () => { return this.editor.getAttributes(TextStyle$1.name); }, editor: this.editor }); } return [inputRule]; } }); const inputRegex$2 = /(?:^|\s)((?:`)((?:[^`]+))(?:`))$/; const pasteRegex$1 = /(?:^|\s)((?:`)((?:[^`]+))(?:`))/g; const Code = Mark.create({ name: 'code', addOptions() { return { HTMLAttributes: {} }; }, excludes: '_', code: true, exitable: true, parseHTML() { return [{ tag: 'code' }]; }, renderHTML({ HTMLAttributes }) { return ['code', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; }, addCommands() { return { setCode: () => ({ commands }) => { return commands.setMark(this.name); }, toggleCode: () => ({ commands }) => { return commands.toggleMark(this.name); }, unsetCode: () => ({ commands }) => { return commands.unsetMark(this.name); } }; }, addKeyboardShortcuts() { return { 'Mod-e': () => this.editor.commands.toggleCode() }; }, addInputRules() { return [markInputRule({ find: inputRegex$2, type: this.type })]; }, addPasteRules() { return [markPasteRule({ find: pasteRegex$1, type: this.type })]; } }); const backtickInputRegex = /^```([a-z]+)?[\s\n]$/; const tildeInputRegex = /^~~~([a-z]+)?[\s\n]$/; const CodeBlock = Node$1.create({ name: 'codeBlock', addOptions() { return { languageClassPrefix: 'language-', exitOnTripleEnter: true, exitOnArrowDown: true, HTMLAttributes: {} }; }, content: 'text*', marks: '', group: 'block', code: true, defining: true, addAttributes() { return { language: { default: null, parseHTML: element => { var _a; const { languageClassPrefix } = this.options; const classNames = [...(((_a = element.firstElementChild) === null || _a === void 0 ? void 0 : _a.classList) || [])]; const languages = classNames.filter(className => className.startsWith(languageClassPrefix)).map(className => className.replace(languageClassPrefix, '')); const language = languages[0]; if (!language) { return null; } return language; }, rendered: false } }; }, parseHTML() { return [{ tag: 'pre', preserveWhitespace: 'full' }]; }, renderHTML({ node, HTMLAttributes }) { return ['pre', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), ['code', { class: node.attrs.language ? this.options.languageClassPrefix + node.attrs.language : null }, 0]]; }, addCommands() { return { setCodeBlock: attributes => ({ commands }) => { return commands.setNode(this.name, attributes); }, toggleCodeBlock: attributes => ({ commands }) => { return commands.toggleNode(this.name, 'paragraph', attributes); } }; }, addKeyboardShortcuts() { return { 'Mod-Alt-c': () => this.editor.commands.toggleCodeBlock(), // remove code block when at start of document or code block is empty Backspace: () => { const { empty, $anchor } = this.editor.state.selection; const isAtStart = $anchor.pos === 1; if (!empty || $anchor.parent.type.name !== this.name) { return false; } if (isAtStart || !$anchor.parent.textContent.length) { return this.editor.commands.clearNodes(); } return false; }, // exit node on triple enter Enter: ({ editor }) => { if (!this.options.exitOnTripleEnter) { return false; } const { state } = editor; const { selection } = state; const { $from, empty } = selection; if (!empty || $from.parent.type !== this.type) { return false; } const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2; const endsWithDoubleNewline = $from.parent.textContent.endsWith('\n\n'); if (!isAtEnd || !endsWithDoubleNewline) { return false; } return editor.chain().command(({ tr }) => { tr.delete($from.pos - 2, $from.pos); return true; }).exitCode().run(); }, // exit node on arrow down ArrowDown: ({ editor }) => { if (!this.options.exitOnArrowDown) { return false; } const { state } = editor; const { selection, doc } = state; const { $from, empty } = selection; if (!empty || $from.parent.type !== this.type) { return false; } const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2; if (!isAtEnd) { return false; } const after = $from.after(); if (after === undefined) { return false; } const nodeAfter = doc.nodeAt(after); if (nodeAfter) { return false; } return editor.commands.exitCode(); } }; }, addInputRules() { return [textblockTypeInputRule({ find: backtickInputRegex, type: this.type, getAttributes: match => ({ language: match[1] }) }), textblockTypeInputRule({ find: tildeInputRegex, type: this.type, getAttributes: match => ({ language: match[1] }) })]; }, addProseMirrorPlugins() { return [ // this plugin creates a code block for pasted content from VS Code // we can also detect the copied code language new Plugin({ key: new PluginKey('codeBlockVSCodeHandler'), props: { handlePaste: (view, event) => { if (!event.clipboardData) { return false; } // don’t create a new code block within code blocks if (this.editor.isActive(this.type.name)) { return false; } const text = event.clipboardData.getData('text/plain'); const vscode = event.clipboardData.getData('vscode-editor-data'); const vscodeData = vscode ? JSON.parse(vscode) : undefined; const language = vscodeData === null || vscodeData === void 0 ? void 0 : vscodeData.mode; if (!text || !language) { return false; } const { tr } = view.state; // create an empty code block tr.replaceSelectionWith(this.type.create({ language })); // put cursor inside the newly created code block tr.setSelection(TextSelection.near(tr.doc.resolve(Math.max(0, tr.selection.from - 2)))); // add text to code block // strip carriage return chars from text pasted as code // see: https://github.com/ProseMirror/prosemirror-view/commit/a50a6bcceb4ce52ac8fcc6162488d8875613aacd tr.insertText(text.replace(/\r\n?/g, '\n')); // store meta information // this is useful for other plugins that depends on the paste event // like the paste rule plugin tr.setMeta('paste', true); view.dispatch(tr); return true; } } })]; } }); const Document = Node$1.create({ name: 'doc', topNode: true, content: 'block+' }); /** Create a plugin that, when added to a ProseMirror instance, causes a decoration to show up at the drop position when something is dragged over the editor. Nodes may add a `disableDropCursor` property to their spec to control the showing of a drop cursor inside them. This may be a boolean or a function, which will be called with a view and a position, and should return a boolean. */ function dropCursor(options = {}) { return new Plugin({ view(editorView) { return new DropCursorView(editorView, options); } }); } class DropCursorView { constructor(editorView, options) { var _a; this.editorView = editorView; this.cursorPos = null; this.element = null; this.timeout = -1; this.width = (_a = options.width) !== null && _a !== void 0 ? _a : 1; this.color = options.color === false ? undefined : options.color || "black"; this.class = options.class; this.handlers = ["dragover", "dragend", "drop", "dragleave"].map(name => { let handler = e => { this[name](e); }; editorView.dom.addEventListener(name, handler); return { name, handler }; }); } destroy() { this.handlers.forEach(({ name, handler }) => this.editorView.dom.removeEventListener(name, handler)); } update(editorView, prevState) { if (this.cursorPos != null && prevState.doc != editorView.state.doc) { if (this.cursorPos > editorView.state.doc.content.size) this.setCursor(null);else this.updateOverlay(); } } setCursor(pos) { if (pos == this.cursorPos) return; this.cursorPos = pos; if (pos == null) { this.element.parentNode.removeChild(this.element); this.element = null; } else { this.updateOverlay(); } } updateOverlay() { let $pos = this.editorView.state.doc.resolve(this.cursorPos); let isBlock = !$pos.parent.inlineContent, rect; if (isBlock) { let before = $pos.nodeBefore, after = $pos.nodeAfter; if (before || after) { let node = this.editorView.nodeDOM(this.cursorPos - (before ? before.nodeSize : 0)); if (node) { let nodeRect = node.getBoundingClientRect(); let top = before ? nodeRect.bottom : nodeRect.top; if (before && after) top = (top + this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top) / 2; rect = { left: nodeRect.left, right: nodeRect.right, top: top - this.width / 2, bottom: top + this.width / 2 }; } } } if (!rect) { let coords = this.editorView.coordsAtPos(this.cursorPos); rect = { left: coords.left - this.width / 2, right: coords.left + this.width / 2, top: coords.top, bottom: coords.bottom }; } let parent = this.editorView.dom.offsetParent; if (!this.element) { this.element = parent.appendChild(document.createElement("div")); if (this.class) this.element.className = this.class; this.element.style.cssText = "position: absolute; z-index: 50; pointer-events: none;"; if (this.color) { this.element.style.backgroundColor = this.color; } } this.element.classList.toggle("prosemirror-dropcursor-block", isBlock); this.element.classList.toggle("prosemirror-dropcursor-inline", !isBlock); let parentLeft, parentTop; if (!parent || parent == document.body && getComputedStyle(parent).position == "static") { parentLeft = -pageXOffset; parentTop = -pageYOffset; } else { let rect = parent.getBoundingClientRect(); parentLeft = rect.left - parent.scrollLeft; parentTop = rect.top - parent.scrollTop; } this.element.style.left = rect.left - parentLeft + "px"; this.element.style.top = rect.top - parentTop + "px"; this.element.style.width = rect.right - rect.left + "px"; this.element.style.height = rect.bottom - rect.top + "px"; } scheduleRemoval(timeout) { clearTimeout(this.timeout); this.timeout = setTimeout(() => this.setCursor(null), timeout); } dragover(event) { if (!this.editorView.editable) return; let pos = this.editorView.posAtCoords({ left: event.clientX, top: event.clientY }); let node = pos && pos.inside >= 0 && this.editorView.state.doc.nodeAt(pos.inside); let disableDropCursor = node && node.type.spec.disableDropCursor; let disabled = typeof disableDropCursor == "function" ? disableDropCursor(this.editorView, pos, event) : disableDropCursor; if (pos && !disabled) { let target = pos.pos; if (this.editorView.dragging && this.editorView.dragging.slice) { let point = dropPoint(this.editorView.state.doc, target, this.editorView.dragging.slice); if (point != null) target = point; } this.setCursor(target); this.scheduleRemoval(5000); } } dragend() { this.scheduleRemoval(20); } drop() { this.scheduleRemoval(20); } dragleave(event) { if (event.target == this.editorView.dom || !this.editorView.dom.contains(event.relatedTarget)) this.setCursor(null); } } const Dropcursor = Extension.create({ name: 'dropCursor', addOptions() { return { color: 'currentColor', width: 1, class: undefined }; }, addProseMirrorPlugins() { return [dropCursor(this.options)]; } }); /** Gap cursor selections are represented using this class. Its `$anchor` and `$head` properties both point at the cursor position. */ class GapCursor extends Selection { /** Create a gap cursor. */ constructor($pos) { super($pos, $pos); } map(doc, mapping) { let $pos = doc.resolve(mapping.map(this.head)); return GapCursor.valid($pos) ? new GapCursor($pos) : Selection.near($pos); } content() { return Slice.empty; } eq(other) { return other instanceof GapCursor && other.head == this.head; } toJSON() { return { type: "gapcursor", pos: this.head }; } /** @internal */ static fromJSON(doc, json) { if (typeof json.pos != "number") throw new RangeError("Invalid input for GapCursor.fromJSON"); return new GapCursor(doc.resolve(json.pos)); } /** @internal */ getBookmark() { return new GapBookmark(this.anchor); } /** @internal */ static valid($pos) { let parent = $pos.parent; if (parent.isTextblock || !closedBefore($pos) || !closedAfter($pos)) return false; let override = parent.type.spec.allowGapCursor; if (override != null) return override; let deflt = parent.contentMatchAt($pos.index()).defaultType; return deflt && deflt.isTextblock; } /** @internal */ static findGapCursorFrom($pos, dir, mustMove = false) { search: for (;;) { if (!mustMove && GapCursor.valid($pos)) return $pos; let pos = $pos.pos, next = null; // Scan up from this position for (let d = $pos.depth;; d--) { let parent = $pos.node(d); if (dir > 0 ? $pos.indexAfter(d) < parent.childCount : $pos.index(d) > 0) { next = parent.child(dir > 0 ? $pos.indexAfter(d) : $pos.index(d) - 1); break; } else if (d == 0) { return null; } pos += dir; let $cur = $pos.doc.resolve(pos); if (GapCursor.valid($cur)) return $cur; } // And then down into the next node for (;;) { let inside = dir > 0 ? next.firstChild : next.lastChild; if (!inside) { if (next.isAtom && !next.isText && !NodeSelection.isSelectable(next)) { $pos = $pos.doc.resolve(pos + next.nodeSize * dir); mustMove = false; continue search; } break; } next = inside; pos += dir; let $cur = $pos.doc.resolve(pos); if (GapCursor.valid($cur)) return $cur; } return null; } } } GapCursor.prototype.visible = false; GapCursor.findFrom = GapCursor.findGapCursorFrom; Selection.jsonID("gapcursor", GapCursor); class GapBookmark { constructor(pos) { this.pos = pos; } map(mapping) { return new GapBookmark(mapping.map(this.pos)); } resolve(doc) { let $pos = doc.resolve(this.pos); return GapCursor.valid($pos) ? new GapCursor($pos) : Selection.near($pos); } } function closedBefore($pos) { for (let d = $pos.depth; d >= 0; d--) { let index = $pos.index(d), parent = $pos.node(d); // At the start of this parent, look at next one if (index == 0) { if (parent.type.spec.isolating) return true; continue; } // See if the node before (or its first ancestor) is closed for (let before = parent.child(index - 1);; before = before.lastChild) { if (before.childCount == 0 && !before.inlineContent || before.isAtom || before.type.spec.isolating) return true; if (before.inlineContent) return false; } } // Hit start of document return true; } function closedAfter($pos) { for (let d = $pos.depth; d >= 0; d--) { let index = $pos.indexAfter(d), parent = $pos.node(d); if (index == parent.childCount) { if (parent.type.spec.isolating) return true; continue; } for (let after = parent.child(index);; after = after.firstChild) { if (after.childCount == 0 && !after.inlineContent || after.isAtom || after.type.spec.isolating) return true; if (after.inlineContent) return false; } } return true; } /** Create a gap cursor plugin. When enabled, this will capture clicks near and arrow-key-motion past places that don't have a normally selectable position nearby, and create a gap cursor selection for them. The cursor is drawn as an element with class `ProseMirror-gapcursor`. You can either include `style/gapcursor.css` from the package's directory or add your own styles to make it visible. */ function gapCursor() { return new Plugin({ props: { decorations: drawGapCursor, createSelectionBetween(_view, $anchor, $head) { return $anchor.pos == $head.pos && GapCursor.valid($head) ? new GapCursor($head) : null; }, handleClick, handleKeyDown, handleDOMEvents: { beforeinput: beforeinput } } }); } const handleKeyDown = keydownHandler({ "ArrowLeft": arrow("horiz", -1), "ArrowRight": arrow("horiz", 1), "ArrowUp": arrow("vert", -1), "ArrowDown": arrow("vert", 1) }); function arrow(axis, dir) { const dirStr = axis == "vert" ? dir > 0 ? "down" : "up" : dir > 0 ? "right" : "left"; return function (state, dispatch, view) { let sel = state.selection; let $start = dir > 0 ? sel.$to : sel.$from, mustMove = sel.empty; if (sel instanceof TextSelection) { if (!view.endOfTextblock(dirStr) || $start.depth == 0) return false; mustMove = false; $start = state.doc.resolve(dir > 0 ? $start.after() : $start.before()); } let $found = GapCursor.findGapCursorFrom($start, dir, mustMove); if (!$found) return false; if (dispatch) dispatch(state.tr.setSelection(new GapCursor($found))); return true; }; } function handleClick(view, pos, event) { if (!view || !view.editable) return false; let $pos = view.state.doc.resolve(pos); if (!GapCursor.valid($pos)) return false; let clickPos = view.posAtCoords({ left: event.clientX, top: event.clientY }); if (clickPos && clickPos.inside > -1 && NodeSelection.isSelectable(view.state.doc.nodeAt(clickPos.inside))) return false; view.dispatch(view.state.tr.setSelection(new GapCursor($pos))); return true; } // This is a hack that, when a composition starts while a gap cursor // is active, quickly creates an inline context for the composition to // happen in, to avoid it being aborted by the DOM selection being // moved into a valid position. function beforeinput(view, event) { if (event.inputType != "insertCompositionText" || !(view.state.selection instanceof GapCursor)) return false; let { $from } = view.state.selection; let insert = $from.parent.contentMatchAt($from.index()).findWrapping(view.state.schema.nodes.text); if (!insert) return false; let frag = Fragment.empty; for (let i = insert.length - 1; i >= 0; i--) frag = Fragment.from(insert[i].createAndFill(null, frag)); let tr = view.state.tr.replace($from.pos, $from.pos, new Slice(frag, 0, 0)); tr.setSelection(TextSelection.near(tr.doc.resolve($from.pos + 1))); view.dispatch(tr); return false; } function drawGapCursor(state) { if (!(state.selection instanceof GapCursor)) return null; let node = document.createElement("div"); node.className = "ProseMirror-gapcursor"; return DecorationSet.create(state.doc, [Decoration.widget(state.selection.head, node, { key: "gapcursor" })]); } const Gapcursor = Extension.create({ name: 'gapCursor', addProseMirrorPlugins() { return [gapCursor()]; }, extendNodeSchema(extension) { var _a; const context = { name: extension.name, options: extension.options, storage: extension.storage }; return { allowGapCursor: (_a = callOrReturn(getExtensionField(extension, 'allowGapCursor', context))) !== null && _a !== void 0 ? _a : null }; } }); const HardBreak = Node$1.create({ name: 'hardBreak', addOptions() { return { keepMarks: true, HTMLAttributes: {} }; }, inline: true, group: 'inline', selectable: false, parseHTML() { return [{ tag: 'br' }]; }, renderHTML({ HTMLAttributes }) { return ['br', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)]; }, renderText() { return '\n'; }, addCommands() { return { setHardBreak: () => ({ commands, chain, state, editor }) => { return commands.first([() => commands.exitCode(), () => commands.command(() => { const { selection, storedMarks } = state; if (selection.$from.parent.type.spec.isolating) { return false; } const { keepMarks } = this.options; const { splittableMarks } = editor.extensionManager; const marks = storedMarks || selection.$to.parentOffset && selection.$from.marks(); return chain().insertContent({ type: this.name }).command(({ tr, dispatch }) => { if (dispatch && marks && keepMarks) { const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name)); tr.ensureMarks(filteredMarks); } return true; }).run(); })]); } }; }, addKeyboardShortcuts() { return { 'Mod-Enter': () => this.editor.commands.setHardBreak(), 'Shift-Enter': () => this.editor.commands.setHardBreak() }; } }); const Heading = Node$1.create({ name: 'heading', addOptions() { return { levels: [1, 2, 3, 4, 5, 6], HTMLAttributes: {} }; }, content: 'inline*', group: 'block', defining: true, addAttributes() { return { level: { default: 1, rendered: false } }; }, parseHTML() { return this.options.levels.map(level => ({ tag: `h${level}`, attrs: { level } })); }, renderHTML({ node, HTMLAttributes }) { const hasLevel = this.options.levels.includes(node.attrs.level); const level = hasLevel ? node.attrs.level : this.options.levels[0]; return [`h${level}`, mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; }, addCommands() { return { setHeading: attributes => ({ commands }) => { if (!this.options.levels.includes(attributes.level)) { return false; } return commands.setNode(this.name, attributes); }, toggleHeading: attributes => ({ commands }) => { if (!this.options.levels.includes(attributes.level)) { return false; } return commands.toggleNode(this.name, 'paragraph', attributes); } }; }, addKeyboardShortcuts() { return this.options.levels.reduce((items, level) => ({ ...items, ...{ [`Mod-Alt-${level}`]: () => this.editor.commands.toggleHeading({ level }) } }), {}); }, addInputRules() { return this.options.levels.map(level => { return textblockTypeInputRule({ find: new RegExp(`^(#{1,${level}})\\s$`), type: this.type, getAttributes: { level } }); }); } }); var GOOD_LEAF_SIZE = 200; // :: class<T> A rope sequence is a persistent sequence data structure // that supports appending, prepending, and slicing without doing a // full copy. It is represented as a mostly-balanced tree. var RopeSequence = function RopeSequence() {}; RopeSequence.prototype.append = function append(other) { if (!other.length) { return this; } other = RopeSequence.from(other); return !this.length && other || other.length < GOOD_LEAF_SIZE && this.leafAppend(other) || this.length < GOOD_LEAF_SIZE && other.leafPrepend(this) || this.appendInner(other); }; // :: (union<[T], RopeSequence<T>>) → RopeSequence<T> // Prepend an array or other rope to this one, returning a new rope. RopeSequence.prototype.prepend = function prepend(other) { if (!other.length) { return this; } return RopeSequence.from(other).append(this); }; RopeSequence.prototype.appendInner = function appendInner(other) { return new Append(this, other); }; // :: (?number, ?number) → RopeSequence<T> // Create a rope repesenting a sub-sequence of this rope. RopeSequence.prototype.slice = function slice(from, to) { if (from === void 0) from = 0; if (to === void 0) to = this.length; if (from >= to) { return RopeSequence.empty; } return this.sliceInner(Math.max(0, from), Math.min(this.length, to)); }; // :: (number) → T // Retrieve the element at the given position from this rope. RopeSequence.prototype.get = function get(i) { if (i < 0 || i >= this.length) { return undefined; } return this.getInner(i); }; // :: ((element: T, index: number) → ?bool, ?number, ?number) // Call the given function for each element between the given // indices. This tends to be more efficient than looping over the // indices and calling `get`, because it doesn't have to descend the // tree for every element. RopeSequence.prototype.forEach = function forEach(f, from, to) { if (from === void 0) from = 0; if (to === void 0) to = this.length; if (from <= to) { this.forEachInner(f, from, to, 0); } else { this.forEachInvertedInner(f, from, to, 0); } }; // :: ((element: T, index: number) → U, ?number, ?number) → [U] // Map the given functions over the elements of the rope, producing // a flat array. RopeSequence.prototype.map = function map(f, from, to) { if (from === void 0) from = 0; if (to === void 0) to = this.length; var result = []; this.forEach(function (elt, i) { return result.push(f(elt, i)); }, from, to); return result; }; // :: (?union<[T], RopeSequence<T>>) → RopeSequence<T> // Create a rope representing the given array, or return the rope // itself if a rope was given. RopeSequence.from = function from(values) { if (values instanceof RopeSequence) { return values; } return values && values.length ? new Leaf(values) : RopeSequence.empty; }; var Leaf = /*@__PURE__*/function (RopeSequence) { function Leaf(values) { RopeSequence.call(this); this.values = values; } if (RopeSequence) Leaf.__proto__ = RopeSequence; Leaf.prototype = Object.create(RopeSequence && RopeSequence.prototype); Leaf.prototype.constructor = Leaf; var prototypeAccessors = { length: { configurable: true }, depth: { configurable: true } }; Leaf.prototype.flatten = function flatten() { return this.values; }; Leaf.prototype.sliceInner = function sliceInner(from, to) { if (from == 0 && to == this.length) { return this; } return new Leaf(this.values.slice(from, to)); }; Leaf.prototype.getInner = function getInner(i) { return this.values[i]; }; Leaf.prototype.forEachInner = function forEachInner(f, from, to, start) { for (var i = from; i < to; i++) { if (f(this.values[i], start + i) === false) { return false; } } }; Leaf.prototype.forEachInvertedInner = function forEachInvertedInner(f, from, to, start) { for (var i = from - 1; i >= to; i--) { if (f(this.values[i], start + i) === false) { return false; } } }; Leaf.prototype.leafAppend = function leafAppend(other) { if (this.length + other.length <= GOOD_LEAF_SIZE) { return new Leaf(this.values.concat(other.flatten())); } }; Leaf.prototype.leafPrepend = function leafPrepend(other) { if (this.length + other.length <= GOOD_LEAF_SIZE) { return new Leaf(other.flatten().concat(this.values)); } }; prototypeAccessors.length.get = function () { return this.values.length; }; prototypeAccessors.depth.get = function () { return 0; }; Object.defineProperties(Leaf.prototype, prototypeAccessors); return Leaf; }(RopeSequence); // :: RopeSequence // The empty rope sequence. RopeSequence.empty = new Leaf([]); var Append = /*@__PURE__*/function (RopeSequence) { function Append(left, right) { RopeSequence.call(this); this.left = left; this.right = right; this.length = left.length + right.length; this.depth = Math.max(left.depth, right.depth) + 1; } if (RopeSequence) Append.__proto__ = RopeSequence; Append.prototype = Object.create(RopeSequence && RopeSequence.prototype); Append.prototype.constructor = Append; Append.prototype.flatten = function flatten() { return this.left.flatten().concat(this.right.flatten()); }; Append.prototype.getInner = function getInner(i) { return i < this.left.length ? this.left.get(i) : this.right.get(i - this.left.length); }; Append.prototype.forEachInner = function forEachInner(f, from, to, start) { var leftLen = this.left.length; if (from < leftLen && this.left.forEachInner(f, from, Math.min(to, leftLen), start) === false) { return false; } if (to > leftLen && this.right.forEachInner(f, Math.max(from - leftLen, 0), Math.min(this.length, to) - leftLen, start + leftLen) === false) { return false; } }; Append.prototype.forEachInvertedInner = function forEachInvertedInner(f, from, to, start) { var leftLen = this.left.length; if (from > leftLen && this.right.forEachInvertedInner(f, from - leftLen, Math.max(to, leftLen) - leftLen, start + leftLen) === false) { return false; } if (to < leftLen && this.left.forEachInvertedInner(f, Math.min(from, leftLen), to, start) === false) { return false; } }; Append.prototype.sliceInner = function sliceInner(from, to) { if (from == 0 && to == this.length) { return this; } var leftLen = this.left.length; if (to <= leftLen) { return this.left.slice(from, to); } if (from >= leftLen) { return this.right.slice(from - leftLen, to - leftLen); } return this.left.slice(from, leftLen).append(this.right.slice(0, to - leftLen)); }; Append.prototype.leafAppend = function leafAppend(other) { var inner = this.right.leafAppend(other); if (inner) { return new Append(this.left, inner); } }; Append.prototype.leafPrepend = function leafPrepend(other) { var inner = this.left.leafPrepend(other); if (inner) { return new Append(inner, this.right); } }; Append.prototype.appendInner = function appendInner(other) { if (this.left.depth >= Math.max(this.right.depth, other.depth) + 1) { return new Append(this.left, new Append(this.right, other)); } return new Append(this, other); }; return Append; }(RopeSequence); var ropeSequence = RopeSequence; // ProseMirror's history isn't simply a way to roll back to a previous // state, because ProseMirror supports applying changes without adding // them to the history (for example during collaboration). // // To this end, each 'Branch' (one for the undo history and one for // the redo history) keeps an array of 'Items', which can optionally // hold a step (an actual undoable change), and always hold a position // map (which is needed to move changes below them to apply to the // current document). // // An item that has both a step and a selection bookmark is the start // of an 'event' — a group of changes that will be undone or redone at // once. (It stores only the bookmark, since that way we don't have to // provide a document until the selection is actually applied, which // is useful when compressing.) // Used to schedule history compression const max_empty_items = 500; class Branch { constructor(items, eventCount) { this.items = items; this.eventCount = eventCount; } // Pop the latest event off the branch's history and apply it // to a document transform. popEvent(state, preserveItems) { if (this.eventCount == 0) return null; let end = this.items.length; for (;; end--) { let next = this.items.get(end - 1); if (next.selection) { --end; break; } } let remap, mapFrom; if (preserveItems) { remap = this.remapping(end, this.items.length); mapFrom = remap.maps.length; } let transform = state.tr; let selection, remaining; let addAfter = [], addBefore = []; this.items.forEach((item, i) => { if (!item.step) { if (!remap) { remap = this.remapping(end, i + 1); mapFrom = remap.maps.length; } mapFrom--; addBefore.push(item); return; } if (remap) { addBefore.push(new Item(item.map)); let step = item.step.map(remap.slice(mapFrom)), map; if (step && transform.maybeStep(step).doc) { map = transform.mapping.maps[transform.mapping.maps.length - 1]; addAfter.push(new Item(map, undefined, undefined, addAfter.length + addBefore.length)); } mapFrom--; if (map) remap.appendMap(map, mapFrom); } else { transform.maybeStep(item.step); } if (item.selection) { selection = remap ? item.selection.map(remap.slice(mapFrom)) : item.selection; remaining = new Branch(this.items.slice(0, end).append(addBefore.reverse().concat(addAfter)), this.eventCount - 1); return false; } }, this.items.length, 0); return { remaining: remaining, transform, selection: selection }; } // Create a new branch with the given transform added. addTransform(transform, selection, histOptions, preserveItems) { let newItems = [], eventCount = this.eventCount; let oldItems = this.items, lastItem = !preserveItems && oldItems.length ? oldItems.get(oldItems.length - 1) : null; for (let i = 0; i < transform.steps.length; i++) { let step = transform.steps[i].invert(transform.docs[i]); let item = new Item(transform.mapping.maps[i], step, selection), merged; if (merged = lastItem && lastItem.merge(item)) { item = merged; if (i) newItems.pop();else oldItems = oldItems.slice(0, oldItems.length - 1); } newItems.push(item); if (selection) { eventCount++; selection = undefined; } if (!preserveItems) lastItem = item; } let overflow = eventCount - histOptions.depth; if (overflow > DEPTH_OVERFLOW) { oldItems = cutOffEvents(oldItems, overflow); eventCount -= overflow; } return new Branch(oldItems.append(newItems), eventCount); } remapping(from, to) { let maps = new Mapping(); this.items.forEach((item, i) => { let mirrorPos = item.mirrorOffset != null && i - item.mirrorOffset >= from ? maps.maps.length - item.mirrorOffset : undefined; maps.appendMap(item.map, mirrorPos); }, from, to); return maps; } addMaps(array) { if (this.eventCount == 0) return this; return new Branch(this.items.append(array.map(map => new Item(map))), this.eventCount); } // When the collab module receives remote changes, the history has // to know about those, so that it can adjust the steps that were // rebased on top of the remote changes, and include the position // maps for the remote changes in its array of items. rebased(rebasedTransform, rebasedCount) { if (!this.eventCount) return this; let rebasedItems = [], start = Math.max(0, this.items.length - rebasedCount); let mapping = rebasedTransform.mapping; let newUntil = rebasedTransform.steps.length; let eventCount = this.eventCount; this.items.forEach(item => { if (item.selection) eventCount--; }, start); let iRebased = rebasedCount; this.items.forEach(item => { let pos = mapping.getMirror(--iRebased); if (pos == null) return; newUntil = Math.min(newUntil, pos); let map = mapping.maps[pos]; if (item.step) { let step = rebasedTransform.steps[pos].invert(rebasedTransform.docs[pos]); let selection = item.selection && item.selection.map(mapping.slice(iRebased + 1, pos)); if (selection) eventCount++; rebasedItems.push(new Item(map, step, selection)); } else { rebasedItems.push(new Item(map)); } }, start); let newMaps = []; for (let i = rebasedCount; i < newUntil; i++) newMaps.push(new Item(mapping.maps[i])); let items = this.items.slice(0, start).append(newMaps).append(rebasedItems); let branch = new Branch(items, eventCount); if (branch.emptyItemCount() > max_empty_items) branch = branch.compress(this.items.length - rebasedItems.length); return branch; } emptyItemCount() { let count = 0; this.items.forEach(item => { if (!item.step) count++; }); return count; } // Compressing a branch means rewriting it to push the air (map-only // items) out. During collaboration, these naturally accumulate // because each remote change adds one. The `upto` argument is used // to ensure that only the items below a given level are compressed, // because `rebased` relies on a clean, untouched set of items in // order to associate old items with rebased steps. compress(upto = this.items.length) { let remap = this.remapping(0, upto), mapFrom = remap.maps.length; let items = [], events = 0; this.items.forEach((item, i) => { if (i >= upto) { items.push(item); if (item.selection) events++; } else if (item.step) { let step = item.step.map(remap.slice(mapFrom)), map = step && step.getMap(); mapFrom--; if (map) remap.appendMap(map, mapFrom); if (step) { let selection = item.selection && item.selection.map(remap.slice(mapFrom)); if (selection) events++; let newItem = new Item(map.invert(), step, selection), merged, last = items.length - 1; if (merged = items.length && items[last].merge(newItem)) items[last] = merged;else items.push(newItem); } } else if (item.map) { mapFrom--; } }, this.items.length, 0); return new Branch(ropeSequence.from(items.reverse()), events); } } Branch.empty = new Branch(ropeSequence.empty, 0); function cutOffEvents(items, n) { let cutPoint; items.forEach((item, i) => { if (item.selection && n-- == 0) { cutPoint = i; return false; } }); return items.slice(cutPoint); } class Item { constructor( // The (forward) step map for this item. map, // The inverted step step, // If this is non-null, this item is the start of a group, and // this selection is the starting selection for the group (the one // that was active before the first step was applied) selection, // If this item is the inverse of a previous mapping on the stack, // this points at the inverse's offset mirrorOffset) { this.map = map; this.step = step; this.selection = selection; this.mirrorOffset = mirrorOffset; } merge(other) { if (this.step && other.step && !other.selection) { let step = other.step.merge(this.step); if (step) return new Item(step.getMap().invert(), step, this.selection); } } } // The value of the state field that tracks undo/redo history for that // state. Will be stored in the plugin state when the history plugin // is active. class HistoryState { constructor(done, undone, prevRanges, prevTime) { this.done = done; this.undone = undone; this.prevRanges = prevRanges; this.prevTime = prevTime; } } const DEPTH_OVERFLOW = 20; // Record a transformation in undo history. function applyTransaction(history, state, tr, options) { let historyTr = tr.getMeta(historyKey), rebased; if (historyTr) return historyTr.historyState; if (tr.getMeta(closeHistoryKey)) history = new HistoryState(history.done, history.undone, null, 0); let appended = tr.getMeta("appendedTransaction"); if (tr.steps.length == 0) { return history; } else if (appended && appended.getMeta(historyKey)) { if (appended.getMeta(historyKey).redo) return new HistoryState(history.done.addTransform(tr, undefined, options, mustPreserveItems(state)), history.undone, rangesFor(tr.mapping.maps[tr.steps.length - 1]), history.prevTime);else return new HistoryState(history.done, history.undone.addTransform(tr, undefined, options, mustPreserveItems(state)), null, history.prevTime); } else if (tr.getMeta("addToHistory") !== false && !(appended && appended.getMeta("addToHistory") === false)) { // Group transforms that occur in quick succession into one event. let newGroup = history.prevTime == 0 || !appended && (history.prevTime < (tr.time || 0) - options.newGroupDelay || !isAdjacentTo(tr, history.prevRanges)); let prevRanges = appended ? mapRanges(history.prevRanges, tr.mapping) : rangesFor(tr.mapping.maps[tr.steps.length - 1]); return new HistoryState(history.done.addTransform(tr, newGroup ? state.selection.getBookmark() : undefined, options, mustPreserveItems(state)), Branch.empty, prevRanges, tr.time); } else if (rebased = tr.getMeta("rebased")) { // Used by the collab module to tell the history that some of its // content has been rebased. return new HistoryState(history.done.rebased(tr, rebased), history.undone.rebased(tr, rebased), mapRanges(history.prevRanges, tr.mapping), history.prevTime); } else { return new HistoryState(history.done.addMaps(tr.mapping.maps), history.undone.addMaps(tr.mapping.maps), mapRanges(history.prevRanges, tr.mapping), history.prevTime); } } function isAdjacentTo(transform, prevRanges) { if (!prevRanges) return false; if (!transform.docChanged) return true; let adjacent = false; transform.mapping.maps[0].forEach((start, end) => { for (let i = 0; i < prevRanges.length; i += 2) if (start <= prevRanges[i + 1] && end >= prevRanges[i]) adjacent = true; }); return adjacent; } function rangesFor(map) { let result = []; map.forEach((_from, _to, from, to) => result.push(from, to)); return result; } function mapRanges(ranges, mapping) { if (!ranges) return null; let result = []; for (let i = 0; i < ranges.length; i += 2) { let from = mapping.map(ranges[i], 1), to = mapping.map(ranges[i + 1], -1); if (from <= to) result.push(from, to); } return result; } // Apply the latest event from one branch to the document and shift the event // onto the other branch. function histTransaction(history, state, dispatch, redo) { let preserveItems = mustPreserveItems(state); let histOptions = historyKey.get(state).spec.config; let pop = (redo ? history.undone : history.done).popEvent(state, preserveItems); if (!pop) return; let selection = pop.selection.resolve(pop.transform.doc); let added = (redo ? history.done : history.undone).addTransform(pop.transform, state.selection.getBookmark(), histOptions, preserveItems); let newHist = new HistoryState(redo ? added : pop.remaining, redo ? pop.remaining : added, null, 0); dispatch(pop.transform.setSelection(selection).setMeta(historyKey, { redo, historyState: newHist }).scrollIntoView()); } let cachedPreserveItems = false, cachedPreserveItemsPlugins = null; // Check whether any plugin in the given state has a // `historyPreserveItems` property in its spec, in which case we must // preserve steps exactly as they came in, so that they can be // rebased. function mustPreserveItems(state) { let plugins = state.plugins; if (cachedPreserveItemsPlugins != plugins) { cachedPreserveItems = false; cachedPreserveItemsPlugins = plugins; for (let i = 0; i < plugins.length; i++) if (plugins[i].spec.historyPreserveItems) { cachedPreserveItems = true; break; } } return cachedPreserveItems; } const historyKey = new PluginKey("history"); const closeHistoryKey = new PluginKey("closeHistory"); /** Returns a plugin that enables the undo history for an editor. The plugin will track undo and redo stacks, which can be used with the [`undo`](https://prosemirror.net/docs/ref/#history.undo) and [`redo`](https://prosemirror.net/docs/ref/#history.redo) commands. You can set an `"addToHistory"` [metadata property](https://prosemirror.net/docs/ref/#state.Transaction.setMeta) of `false` on a transaction to prevent it from being rolled back by undo. */ function history(config = {}) { config = { depth: config.depth || 100, newGroupDelay: config.newGroupDelay || 500 }; return new Plugin({ key: historyKey, state: { init() { return new HistoryState(Branch.empty, Branch.empty, null, 0); }, apply(tr, hist, state) { return applyTransaction(hist, state, tr, config); } }, config, props: { handleDOMEvents: { beforeinput(view, e) { let inputType = e.inputType; let command = inputType == "historyUndo" ? undo$1 : inputType == "historyRedo" ? redo$1 : null; if (!command) return false; e.preventDefault(); return command(view.state, view.dispatch); } } } }); } /** A command function that undoes the last change, if any. */ const undo$1 = (state, dispatch) => { let hist = historyKey.getState(state); if (!hist || hist.done.eventCount == 0) return false; if (dispatch) histTransaction(hist, state, dispatch, false); return true; }; /** A command function that redoes the last undone change, if any. */ const redo$1 = (state, dispatch) => { let hist = historyKey.getState(state); if (!hist || hist.undone.eventCount == 0) return false; if (dispatch) histTransaction(hist, state, dispatch, true); return true; }; const History = Extension.create({ name: 'history', addOptions() { return { depth: 100, newGroupDelay: 500 }; }, addCommands() { return { undo: () => ({ state, dispatch }) => { return undo$1(state, dispatch); }, redo: () => ({ state, dispatch }) => { return redo$1(state, dispatch); } }; }, addProseMirrorPlugins() { return [history(this.options)]; }, addKeyboardShortcuts() { return { 'Mod-z': () => this.editor.commands.undo(), 'Mod-Z': () => this.editor.commands.undo(), 'Mod-y': () => this.editor.commands.redo(), 'Mod-Y': () => this.editor.commands.redo(), 'Shift-Mod-z': () => this.editor.commands.redo(), 'Shift-Mod-Z': () => this.editor.commands.redo(), // Russian keyboard layouts 'Mod-я': () => this.editor.commands.undo(), 'Shift-Mod-я': () => this.editor.commands.redo() }; } }); const HorizontalRule = Node$1.create({ name: 'horizontalRule', addOptions() { return { HTMLAttributes: {} }; }, group: 'block', parseHTML() { return [{ tag: 'hr' }]; }, renderHTML({ HTMLAttributes }) { return ['hr', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)]; }, addCommands() { return { setHorizontalRule: () => ({ chain, state }) => { const { $to: $originTo } = state.selection; const currentChain = chain(); if ($originTo.parentOffset === 0) { currentChain.insertContentAt(Math.max($originTo.pos - 2, 0), { type: this.name }); } else { currentChain.insertContent({ type: this.name }); } return currentChain // set cursor after horizontal rule .command(({ tr, dispatch }) => { var _a; if (dispatch) { const { $to } = tr.selection; const posAfter = $to.end(); if ($to.nodeAfter) { if ($to.nodeAfter.isTextblock) { tr.setSelection(TextSelection.create(tr.doc, $to.pos + 1)); } else if ($to.nodeAfter.isBlock) { tr.setSelection(NodeSelection.create(tr.doc, $to.pos)); } else { tr.setSelection(TextSelection.create(tr.doc, $to.pos)); } } else { // add node after horizontal rule if it’s the end of the document const node = (_a = $to.parent.type.contentMatch.defaultType) === null || _a === void 0 ? void 0 : _a.create(); if (node) { tr.insert(posAfter, node); tr.setSelection(TextSelection.create(tr.doc, posAfter + 1)); } } tr.scrollIntoView(); } return true; }).run(); } }; }, addInputRules() { return [nodeInputRule({ find: /^(?:---|—-|___\s|\*\*\*\s)$/, type: this.type })]; } }); const starInputRegex = /(?:^|\s)((?:\*)((?:[^*]+))(?:\*))$/; const starPasteRegex = /(?:^|\s)((?:\*)((?:[^*]+))(?:\*))/g; const underscoreInputRegex = /(?:^|\s)((?:_)((?:[^_]+))(?:_))$/; const underscorePasteRegex = /(?:^|\s)((?:_)((?:[^_]+))(?:_))/g; const Italic = Mark.create({ name: 'italic', addOptions() { return { HTMLAttributes: {} }; }, parseHTML() { return [{ tag: 'em' }, { tag: 'i', getAttrs: node => node.style.fontStyle !== 'normal' && null }, { style: 'font-style=italic' }]; }, renderHTML({ HTMLAttributes }) { return ['em', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; }, addCommands() { return { setItalic: () => ({ commands }) => { return commands.setMark(this.name); }, toggleItalic: () => ({ commands }) => { return commands.toggleMark(this.name); }, unsetItalic: () => ({ commands }) => { return commands.unsetMark(this.name); } }; }, addKeyboardShortcuts() { return { 'Mod-i': () => this.editor.commands.toggleItalic(), 'Mod-I': () => this.editor.commands.toggleItalic() }; }, addInputRules() { return [markInputRule({ find: starInputRegex, type: this.type }), markInputRule({ find: underscoreInputRegex, type: this.type })]; }, addPasteRules() { return [markPasteRule({ find: starPasteRegex, type: this.type }), markPasteRule({ find: underscorePasteRegex, type: this.type })]; } }); const ListItem$1 = Node$1.create({ name: 'listItem', addOptions() { return { HTMLAttributes: {}, bulletListTypeName: 'bulletList', orderedListTypeName: 'orderedList' }; }, content: 'paragraph block*', defining: true, parseHTML() { return [{ tag: 'li' }]; }, renderHTML({ HTMLAttributes }) { return ['li', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; }, addKeyboardShortcuts() { return { Enter: () => this.editor.commands.splitListItem(this.name), Tab: () => this.editor.commands.sinkListItem(this.name), 'Shift-Tab': () => this.editor.commands.liftListItem(this.name) }; } }); const ListItem = Node$1.create({ name: 'listItem', addOptions() { return { HTMLAttributes: {}, bulletListTypeName: 'bulletList', orderedListTypeName: 'orderedList' }; }, content: 'paragraph block*', defining: true, parseHTML() { return [{ tag: 'li' }]; }, renderHTML({ HTMLAttributes }) { return ['li', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; }, addKeyboardShortcuts() { return { Enter: () => this.editor.commands.splitListItem(this.name), Tab: () => this.editor.commands.sinkListItem(this.name), 'Shift-Tab': () => this.editor.commands.liftListItem(this.name) }; } }); const TextStyle = Mark.create({ name: 'textStyle', addOptions() { return { HTMLAttributes: {} }; }, parseHTML() { return [{ tag: 'span', getAttrs: element => { const hasStyles = element.hasAttribute('style'); if (!hasStyles) { return false; } return {}; } }]; }, renderHTML({ HTMLAttributes }) { return ['span', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; }, addCommands() { return { removeEmptyTextStyle: () => ({ state, commands }) => { const attributes = getMarkAttributes(state, this.type); const hasStyles = Object.entries(attributes).some(([, value]) => !!value); if (hasStyles) { return true; } return commands.unsetMark(this.name); } }; } }); const inputRegex$1 = /^(\d+)\.\s$/; const OrderedList = Node$1.create({ name: 'orderedList', addOptions() { return { itemTypeName: 'listItem', HTMLAttributes: {}, keepMarks: false, keepAttributes: false }; }, group: 'block list', content() { return `${this.options.itemTypeName}+`; }, addAttributes() { return { start: { default: 1, parseHTML: element => { return element.hasAttribute('start') ? parseInt(element.getAttribute('start') || '', 10) : 1; } } }; }, parseHTML() { return [{ tag: 'ol' }]; }, renderHTML({ HTMLAttributes }) { const { start, ...attributesWithoutStart } = HTMLAttributes; return start === 1 ? ['ol', mergeAttributes(this.options.HTMLAttributes, attributesWithoutStart), 0] : ['ol', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; }, addCommands() { return { toggleOrderedList: () => ({ commands, chain }) => { if (this.options.keepAttributes) { return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItem.name, this.editor.getAttributes(TextStyle.name)).run(); } return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks); } }; }, addKeyboardShortcuts() { return { 'Mod-Shift-7': () => this.editor.commands.toggleOrderedList() }; }, addInputRules() { let inputRule = wrappingInputRule({ find: inputRegex$1, type: this.type, getAttributes: match => ({ start: +match[1] }), joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1] }); if (this.options.keepMarks || this.options.keepAttributes) { inputRule = wrappingInputRule({ find: inputRegex$1, type: this.type, keepMarks: this.options.keepMarks, keepAttributes: this.options.keepAttributes, getAttributes: match => ({ start: +match[1], ...this.editor.getAttributes(TextStyle.name) }), joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1], editor: this.editor }); } return [inputRule]; } }); const Paragraph = Node$1.create({ name: 'paragraph', priority: 1000, addOptions() { return { HTMLAttributes: {} }; }, group: 'block', content: 'inline*', parseHTML() { return [{ tag: 'p' }]; }, renderHTML({ HTMLAttributes }) { return ['p', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; }, addCommands() { return { setParagraph: () => ({ commands }) => { return commands.setNode(this.name); } }; }, addKeyboardShortcuts() { return { 'Mod-Alt-0': () => this.editor.commands.setParagraph() }; } }); const inputRegex = /(?:^|\s)((?:~~)((?:[^~]+))(?:~~))$/; const pasteRegex = /(?:^|\s)((?:~~)((?:[^~]+))(?:~~))/g; const Strike = Mark.create({ name: 'strike', addOptions() { return { HTMLAttributes: {} }; }, parseHTML() { return [{ tag: 's' }, { tag: 'del' }, { tag: 'strike' }, { style: 'text-decoration', consuming: false, getAttrs: style => style.includes('line-through') ? {} : false }]; }, renderHTML({ HTMLAttributes }) { return ['s', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]; }, addCommands() { return { setStrike: () => ({ commands }) => { return commands.setMark(this.name); }, toggleStrike: () => ({ commands }) => { return commands.toggleMark(this.name); }, unsetStrike: () => ({ commands }) => { return commands.unsetMark(this.name); } }; }, addKeyboardShortcuts() { const shortcuts = {}; if (isMacOS()) { shortcuts['Mod-Shift-s'] = () => this.editor.commands.toggleStrike(); } else { shortcuts['Ctrl-Shift-s'] = () => this.editor.commands.toggleStrike(); } return shortcuts; }, addInputRules() { return [markInputRule({ find: inputRegex, type: this.type })]; }, addPasteRules() { return [markPasteRule({ find: pasteRegex, type: this.type })]; } }); const Text = Node$1.create({ name: 'text', group: 'inline' }); const StarterKit = Extension.create({ name: 'starterKit', addExtensions() { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t; const extensions = []; if (this.options.blockquote !== false) { extensions.push(Blockquote.configure((_a = this.options) === null || _a === void 0 ? void 0 : _a.blockquote)); } if (this.options.bold !== false) { extensions.push(Bold.configure((_b = this.options) === null || _b === void 0 ? void 0 : _b.bold)); } if (this.options.bulletList !== false) { extensions.push(BulletList.configure((_c = this.options) === null || _c === void 0 ? void 0 : _c.bulletList)); } if (this.options.code !== false) { extensions.push(Code.configure((_d = this.options) === null || _d === void 0 ? void 0 : _d.code)); } if (this.options.codeBlock !== false) { extensions.push(CodeBlock.configure((_e = this.options) === null || _e === void 0 ? void 0 : _e.codeBlock)); } if (this.options.document !== false) { extensions.push(Document.configure((_f = this.options) === null || _f === void 0 ? void 0 : _f.document)); } if (this.options.dropcursor !== false) { extensions.push(Dropcursor.configure((_g = this.options) === null || _g === void 0 ? void 0 : _g.dropcursor)); } if (this.options.gapcursor !== false) { extensions.push(Gapcursor.configure((_h = this.options) === null || _h === void 0 ? void 0 : _h.gapcursor)); } if (this.options.hardBreak !== false) { extensions.push(HardBreak.configure((_j = this.options) === null || _j === void 0 ? void 0 : _j.hardBreak)); } if (this.options.heading !== false) { extensions.push(Heading.configure((_k = this.options) === null || _k === void 0 ? void 0 : _k.heading)); } if (this.options.history !== false) { extensions.push(History.configure((_l = this.options) === null || _l === void 0 ? void 0 : _l.history)); } if (this.options.horizontalRule !== false) { extensions.push(HorizontalRule.configure((_m = this.options) === null || _m === void 0 ? void 0 : _m.horizontalRule)); } if (this.options.italic !== false) { extensions.push(Italic.configure((_o = this.options) === null || _o === void 0 ? void 0 : _o.italic)); } if (this.options.listItem !== false) { extensions.push(ListItem$1.configure((_p = this.options) === null || _p === void 0 ? void 0 : _p.listItem)); } if (this.options.orderedList !== false) { extensions.push(OrderedList.configure((_q = this.options) === null || _q === void 0 ? void 0 : _q.orderedList)); } if (this.options.paragraph !== false) { extensions.push(Paragraph.configure((_r = this.options) === null || _r === void 0 ? void 0 : _r.paragraph)); } if (this.options.strike !== false) { extensions.push(Strike.configure((_s = this.options) === null || _s === void 0 ? void 0 : _s.strike)); } if (this.options.text !== false) { extensions.push(Text.configure((_t = this.options) === null || _t === void 0 ? void 0 : _t.text)); } return extensions; } }); const EditorWrapper$1 = styled(Text$2)` position: relative; ${InputCSS} .ProseMirror-focused { outline: none; } .characterCount { position: absolute; bottom: ${themeGet('space', 'md')}; right: ${themeGet('space', 'lg')}; color: ${themeGet('colors', 'grey40')}; } `; EditorWrapper$1.defaultProps = { px: 'xl', py: 'xl', className: cssClass('EditorWrapper') }; const MenuBarWrapper = styled(Box$1)` border: 1px solid ${themeGet('colors', 'inputBorder')}; border-bottom: none; & .${cssClass('Icon')}:hover { cursor: pointer; } & .${cssClass('Icon')} { stroke: ${themeGet('colors', 'grey100')}; } & .active .${cssClass('Icon')} { stroke: ${themeGet('colors', 'primary100')}; } `; MenuBarWrapper.defaultProps = { px: 'md', py: 'md', className: cssClass('MenuBarWrapper') }; const useTiptapCommands = props => { const { editor } = props; if (!editor) return []; function command(name, callback, icon) { return { name, onClick: callback, icon }; } return [command('bold', () => editor.chain().focus().toggleBold().run(), 'Bold'), command('italic', () => editor.chain().focus().toggleItalic().run(), 'Italic'), command('strike', () => editor.chain().focus().toggleStrike().run(), 'Strikethrough'), command('code', () => editor.chain().focus().toggleCode().run(), 'Code'), command('textAlign.left', () => editor.chain().focus().setTextAlign('left').run(), 'AlignLeft'), command('textAlign.center', () => editor.chain().focus().setTextAlign('center').run(), 'AlignCenter'), command('textAlign.right', () => editor.chain().focus().setTextAlign('right').run(), 'AlignRight'), command('textAlign.justify', () => editor.chain().focus().setTextAlign('justify').run(), 'AlignJustify'), command('bulletList', () => editor.chain().focus().toggleBulletList().run(), 'BulletList'), command('orderedList', () => editor.chain().focus().toggleOrderedList().run(), 'OrderedList'), command('blockquote', () => editor.chain().focus().toggleBlockquote().run(), 'Quote'), command('link', () => editor.chain().focus().unsetLink().run(), 'Link'), command('hard break', () => editor.chain().focus().setHardBreak().run(), 'Pagebreak'), command('undo', () => editor.chain().focus().undo().run(), 'Undo'), command('redo', () => editor.chain().focus().redo().run(), 'Redo'), command('clear marks', () => editor.chain().focus().unsetAllMarks().run(), 'Clear')]; }; var alignCenter = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M0 1h16v2h-16zM3 4h10v2h-10zM3 10h10v2h-10zM0 7h16v2h-16zM0 13h16v2h-16z" }))); var alignJustify = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M0 1h16v2h-16zM0 4h16v2h-16zM0 7h16v2h-16zM0 10h16v2h-16zM0 13h16v2h-16z" }))); var alignLeft = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M0 1h16v2h-16zM0 4h10v2h-10zM0 10h10v2h-10zM0 7h16v2h-16zM0 13h16v2h-16z" }))); var alignRight = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M0 1h16v2h-16zM6 4h10v2h-10zM6 10h10v2h-10zM0 7h16v2h-16zM0 13h16v2h-16z" }))); var bold = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M11.061 7.573c0.586-0.696 0.939-1.594 0.939-2.573 0-2.206-1.794-4-4-4h-5v14h6c2.206 0 4-1.794 4-4 0-1.452-0.778-2.726-1.939-3.427zM6 3h1.586c0.874 0 1.586 0.897 1.586 2s-0.711 2-1.586 2h-1.586v-4zM8.484 13h-2.484v-4h2.484c0.913 0 1.656 0.897 1.656 2s-0.743 2-1.656 2z" }))); var bulletList = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M0 0h4v4h-4zM6 1h10v2h-10zM0 6h4v4h-4zM6 7h10v2h-10zM0 12h4v4h-4zM6 13h10v2h-10z" }))); var clear = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M0 14h9v2h-9zM14 2h-4.727l-2.871 11h-2.067l2.871-11h-4.205v-2h11zM14.528 16l-2.028-2.028-2.028 2.028-0.972-0.972 2.028-2.028-2.028-2.028 0.972-0.972 2.028 2.028 2.028-2.028 0.972 0.972-2.028 2.028 2.028 2.028z" }))); var code = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "20", height: "16", viewBox: "0 0 20 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M13 11.5l1.5 1.5 5-5-5-5-1.5 1.5 3.5 3.5z" }), /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M7 4.5l-1.5-1.5-5 5 5 5 1.5-1.5-3.5-3.5z" }), /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M10.958 2.352l1.085 0.296-3 11-1.085-0.296 3-11z" }))); var fontSize = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M1 8h6v2h-2v6h-2v-6h-2zM15 4h-3.934v12h-2.133v-12h-3.934v-2h10z" }))); var image = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M14.998 2c0.001 0.001 0.001 0.001 0.002 0.002v11.996c-0.001 0.001-0.001 0.001-0.002 0.002h-13.996c-0.001-0.001-0.001-0.001-0.002-0.002v-11.996c0.001-0.001 0.001-0.001 0.002-0.002h13.996zM15 1h-14c-0.55 0-1 0.45-1 1v12c0 0.55 0.45 1 1 1h14c0.55 0 1-0.45 1-1v-12c0-0.55-0.45-1-1-1v0z" }), /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M13 4.5c0 0.828-0.672 1.5-1.5 1.5s-1.5-0.672-1.5-1.5 0.672-1.5 1.5-1.5 1.5 0.672 1.5 1.5z" }), /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M14 13h-12v-2l3.5-6 4 5h1l3.5-3z" }))); var italic = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M14 1v1h-2l-5 12h2v1h-7v-1h2l5-12h-2v-1z" }))); var link = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M6.879 9.934c-0.208 0-0.416-0.079-0.575-0.238-1.486-1.486-1.486-3.905 0-5.392l3-3c0.72-0.72 1.678-1.117 2.696-1.117s1.976 0.397 2.696 1.117c1.486 1.487 1.486 3.905 0 5.392l-1.371 1.371c-0.317 0.317-0.832 0.317-1.149 0s-0.317-0.832 0-1.149l1.371-1.371c0.853-0.853 0.853-2.241 0-3.094-0.413-0.413-0.963-0.641-1.547-0.641s-1.134 0.228-1.547 0.641l-3 3c-0.853 0.853-0.853 2.241 0 3.094 0.317 0.317 0.317 0.832 0 1.149-0.159 0.159-0.367 0.238-0.575 0.238z" }), /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M4 15.813c-1.018 0-1.976-0.397-2.696-1.117-1.486-1.486-1.486-3.905 0-5.392l1.371-1.371c0.317-0.317 0.832-0.317 1.149 0s0.317 0.832 0 1.149l-1.371 1.371c-0.853 0.853-0.853 2.241 0 3.094 0.413 0.413 0.962 0.641 1.547 0.641s1.134-0.228 1.547-0.641l3-3c0.853-0.853 0.853-2.241 0-3.094-0.317-0.317-0.317-0.832 0-1.149s0.832-0.317 1.149 0c1.486 1.486 1.486 3.905 0 5.392l-3 3c-0.72 0.72-1.678 1.117-2.696 1.117z" }))); var orderedList = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M6 13h10v2h-10zM6 7h10v2h-10zM6 1h10v2h-10zM3 0v4h-1v-3h-1v-1zM2 8.219v0.781h2v1h-3v-2.281l2-0.938v-0.781h-2v-1h3v2.281zM4 11v5h-3v-1h2v-1h-2v-1h2v-1h-2v-1z" }))); var pagebreak = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M4 6v-6h12v6h-1v-5h-10v5zM16 9v7h-12v-7h1v6h10v-6zM8 7h2v1h-2zM5 7h2v1h-2zM11 7h2v1h-2zM14 7h2v1h-2zM0 4.5l3 3-3 3z" }))); var paragraph = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M6 0h8v2h-2v14h-2v-14h-2v14h-2v-8c-2.209 0-4-1.791-4-4s1.791-4 4-4z" }))); var quote = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M3.516 7c1.933 0 3.5 1.567 3.5 3.5s-1.567 3.5-3.5 3.5-3.5-1.567-3.5-3.5l-0.016-0.5c0-3.866 3.134-7 7-7v2c-1.336 0-2.591 0.52-3.536 1.464-0.182 0.182-0.348 0.375-0.497 0.578 0.179-0.028 0.362-0.043 0.548-0.043zM12.516 7c1.933 0 3.5 1.567 3.5 3.5s-1.567 3.5-3.5 3.5-3.5-1.567-3.5-3.5l-0.016-0.5c0-3.866 3.134-7 7-7v2c-1.336 0-2.591 0.52-3.536 1.464-0.182 0.182-0.348 0.375-0.497 0.578 0.179-0.028 0.362-0.043 0.549-0.043z" }))); var redo = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M9 3.881v-3.881l6 6-6 6v-3.966c-6.98-0.164-6.681 4.747-4.904 7.966-4.386-4.741-3.455-12.337 4.904-12.119z" }))); var strikethrough = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M16 8v1h-3.664c0.43 0.602 0.664 1.292 0.664 2 0 1.107-0.573 2.172-1.572 2.921-0.927 0.696-2.145 1.079-3.428 1.079s-2.501-0.383-3.428-1.079c-0.999-0.749-1.572-1.814-1.572-2.921h2c0 1.084 1.374 2 3 2s3-0.916 3-2c0-1.084-1.374-2-3-2h-8v-1h4.68c-0.037-0.026-0.073-0.052-0.108-0.079-0.999-0.749-1.572-1.814-1.572-2.921s0.573-2.172 1.572-2.921c0.927-0.696 2.145-1.079 3.428-1.079s2.501 0.383 3.428 1.079c0.999 0.749 1.572 1.814 1.572 2.921h-2c0-1.084-1.374-2-3-2s-3 0.916-3 2c0 1.084 1.374 2 3 2 1.234 0 2.407 0.354 3.32 1h4.68z" }))); var undo = (() => /*#__PURE__*/React__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", version: "1.1", width: "16", height: "16", viewBox: "0 0 16 16" }, /*#__PURE__*/React__namespace.default.createElement("path", { fill: "#000000", d: "M11.904 16c1.777-3.219 2.076-8.13-4.904-7.966v3.966l-6-6 6-6v3.881c8.359-0.218 9.29 7.378 4.904 12.119z" }))); /* eslint-disable import/prefer-default-export */ var EditorIcons = /*#__PURE__*/Object.freeze({ __proto__: null, AlignCenter: alignCenter, AlignJustify: alignJustify, AlignLeft: alignLeft, AlignRight: alignRight, Bold: bold, BulletList: bulletList, Clear: clear, Code: code, FontSize: fontSize, Image: image, Italic: italic, Link: link, OrderedList: orderedList, Pagebreak: pagebreak, Paragraph: paragraph, Quote: quote, Redo: redo, Strikethrough: strikethrough, Undo: undo }); const StyledText = styled(Text$2)` cursor: pointer; color: ${({ theme }) => theme.colors.grey80}; & svg path { fill: ${({ theme }) => theme.colors.grey80}; } `; const MenuButton = props => { const { name, editor, onClick, icon, attributes, children } = props; const isActive = React.useMemo(() => editor.isActive(attributes || name) ? 'active' : '', [name, attributes]); // Using icons from: https://github.com/Keyamoon/IcoMoon-Free const Icon = icon ? EditorIcons[icon] : null; return /*#__PURE__*/React__namespace.default.createElement(StyledText, { as: "span", onClick: onClick, className: isActive, size: "icon", mx: "md" }, Icon ? /*#__PURE__*/React__namespace.default.createElement(Icon, null) : name, children); }; const HeadingSelect = props => { const { editor } = props; const headingLevels = [1, 2, 3, 4, 5, 6]; return /*#__PURE__*/React__namespace.default.createElement(React__namespace.default.Fragment, null, headingLevels.map(level => { const name = `heading.${level}`; return /*#__PURE__*/React__namespace.default.createElement(MenuButton, { editor: editor, key: name, name: name, onClick: () => editor.chain().focus().toggleHeading({ level }).run(), icon: "FontSize", attributes: { level } }, ` ${level}`); }), /*#__PURE__*/React__namespace.default.createElement(MenuButton, { editor: editor, name: "paragraph", onClick: () => editor.chain().focus().setParagraph().run(), icon: "Paragraph" })); }; const ImageButton = props => { const { editor } = props; const [image, setImage] = React.useState(); const fileInput = React.useRef(null); const handleInputChange = event => { const { files } = event.target; if (!files.length) return; const reader = new FileReader(); reader.readAsDataURL(files[0]); reader.onload = e => { setImage(e.target?.result); }; }; const handleButtonClick = () => { if (fileInput.current) fileInput.current.click(); }; React.useEffect(() => { if (image && typeof image === 'string') { editor.chain().focus().setImage({ src: image }).run(); } }, [image]); return /*#__PURE__*/React__namespace.default.createElement(React__namespace.default.Fragment, null, /*#__PURE__*/React__namespace.default.createElement(MenuButton, { editor: editor, key: "image", name: "image", onClick: handleButtonClick, icon: "Image" }), /*#__PURE__*/React__namespace.default.createElement("input", { type: "file", ref: fileInput, onChange: handleInputChange, style: { display: 'none' } })); }; /* eslint-disable react/require-default-props */ const MenuBar = ({ editor }) => { const commands = useTiptapCommands({ editor }); if (!editor) return null; return /*#__PURE__*/React__namespace.default.createElement(MenuBarWrapper, null, /*#__PURE__*/React__namespace.default.createElement(HeadingSelect, { editor: editor }), commands.map(({ name, onClick, icon }) => /*#__PURE__*/React__namespace.default.createElement(MenuButton, { editor: editor, key: name, name: name, onClick: onClick, icon: icon })), /*#__PURE__*/React__namespace.default.createElement(ImageButton, { editor: editor })); }; /* eslint-disable react/require-default-props */ const RichTextEditor = props => { const { value, onChange, options = {} } = props; const handleUpdate = React.useCallback(({ editor }) => { onChange(editor.getHTML()); }, []); const { limit, extensions = [], ...restOptions } = options; const editor = useEditor({ extensions: [StarterKit, CharacterCount.configure({ limit, mode: 'nodeSize' }), Image, Link.configure({ openOnClick: false }), Table, TableCell, TableHeader, TableRow, TextAlign.configure({ types: ['heading', 'paragraph', 'image'] }), Typography, ...extensions], content: value, onUpdate: handleUpdate, injectCSS: true, ...restOptions }); return /*#__PURE__*/React__namespace.default.createElement(React__namespace.default.Fragment, null, /*#__PURE__*/React__namespace.default.createElement(MenuBar, { editor: editor }), /*#__PURE__*/React__namespace.default.createElement(EditorWrapper$1, null, /*#__PURE__*/React__namespace.default.createElement(EditorContent, { editor: editor }), options.limit && /*#__PURE__*/React__namespace.default.createElement("span", { className: "characterCount" }, value?.length, "/", limit))); }; RichTextEditor.displayName = 'RichTextEditor'; var __assign$2 = undefined && undefined.__assign || function () { __assign$2 = Object.assign || function (t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign$2.apply(this, arguments); }; var eventPropTypes = { onActivate: propTypesExports.func, onAddUndo: propTypesExports.func, onBeforeAddUndo: propTypesExports.func, onBeforeExecCommand: propTypesExports.func, onBeforeGetContent: propTypesExports.func, onBeforeRenderUI: propTypesExports.func, onBeforeSetContent: propTypesExports.func, onBeforePaste: propTypesExports.func, onBlur: propTypesExports.func, onChange: propTypesExports.func, onClearUndos: propTypesExports.func, onClick: propTypesExports.func, onContextMenu: propTypesExports.func, onCommentChange: propTypesExports.func, onCopy: propTypesExports.func, onCut: propTypesExports.func, onDblclick: propTypesExports.func, onDeactivate: propTypesExports.func, onDirty: propTypesExports.func, onDrag: propTypesExports.func, onDragDrop: propTypesExports.func, onDragEnd: propTypesExports.func, onDragGesture: propTypesExports.func, onDragOver: propTypesExports.func, onDrop: propTypesExports.func, onExecCommand: propTypesExports.func, onFocus: propTypesExports.func, onFocusIn: propTypesExports.func, onFocusOut: propTypesExports.func, onGetContent: propTypesExports.func, onHide: propTypesExports.func, onInit: propTypesExports.func, onKeyDown: propTypesExports.func, onKeyPress: propTypesExports.func, onKeyUp: propTypesExports.func, onLoadContent: propTypesExports.func, onMouseDown: propTypesExports.func, onMouseEnter: propTypesExports.func, onMouseLeave: propTypesExports.func, onMouseMove: propTypesExports.func, onMouseOut: propTypesExports.func, onMouseOver: propTypesExports.func, onMouseUp: propTypesExports.func, onNodeChange: propTypesExports.func, onObjectResizeStart: propTypesExports.func, onObjectResized: propTypesExports.func, onObjectSelected: propTypesExports.func, onPaste: propTypesExports.func, onPostProcess: propTypesExports.func, onPostRender: propTypesExports.func, onPreProcess: propTypesExports.func, onProgressState: propTypesExports.func, onRedo: propTypesExports.func, onRemove: propTypesExports.func, onReset: propTypesExports.func, onSaveContent: propTypesExports.func, onSelectionChange: propTypesExports.func, onSetAttrib: propTypesExports.func, onSetContent: propTypesExports.func, onShow: propTypesExports.func, onSubmit: propTypesExports.func, onUndo: propTypesExports.func, onVisualAid: propTypesExports.func, onSkinLoadError: propTypesExports.func, onThemeLoadError: propTypesExports.func, onModelLoadError: propTypesExports.func, onPluginLoadError: propTypesExports.func, onIconsLoadError: propTypesExports.func, onLanguageLoadError: propTypesExports.func, onScriptsLoad: propTypesExports.func, onScriptsLoadError: propTypesExports.func }; var EditorPropTypes = __assign$2({ apiKey: propTypesExports.string, id: propTypesExports.string, inline: propTypesExports.bool, init: propTypesExports.object, initialValue: propTypesExports.string, onEditorChange: propTypesExports.func, value: propTypesExports.string, tagName: propTypesExports.string, cloudChannel: propTypesExports.string, plugins: propTypesExports.oneOfType([propTypesExports.string, propTypesExports.array]), toolbar: propTypesExports.oneOfType([propTypesExports.string, propTypesExports.array]), disabled: propTypesExports.bool, textareaName: propTypesExports.string, tinymceScriptSrc: propTypesExports.oneOfType([propTypesExports.string, propTypesExports.arrayOf(propTypesExports.string), propTypesExports.arrayOf(propTypesExports.shape({ src: propTypesExports.string, async: propTypesExports.bool, defer: propTypesExports.bool }))]), rollback: propTypesExports.oneOfType([propTypesExports.number, propTypesExports.oneOf([false])]), scriptLoading: propTypesExports.shape({ async: propTypesExports.bool, defer: propTypesExports.bool, delay: propTypesExports.number }) }, eventPropTypes); var isFunction = function (x) { return typeof x === 'function'; }; var isEventProp = function (name) { return name in eventPropTypes; }; var eventAttrToEventName = function (attrName) { return attrName.substr(2); }; var configHandlers2 = function (handlerLookup, on, off, adapter, prevProps, props, boundHandlers) { var prevEventKeys = Object.keys(prevProps).filter(isEventProp); var currEventKeys = Object.keys(props).filter(isEventProp); var removedKeys = prevEventKeys.filter(function (key) { return props[key] === undefined; }); var addedKeys = currEventKeys.filter(function (key) { return prevProps[key] === undefined; }); removedKeys.forEach(function (key) { // remove event handler var eventName = eventAttrToEventName(key); var wrappedHandler = boundHandlers[eventName]; off(eventName, wrappedHandler); delete boundHandlers[eventName]; }); addedKeys.forEach(function (key) { var wrappedHandler = adapter(handlerLookup, key); var eventName = eventAttrToEventName(key); boundHandlers[eventName] = wrappedHandler; on(eventName, wrappedHandler); }); }; var configHandlers = function (editor, prevProps, props, boundHandlers, lookup) { return configHandlers2(lookup, editor.on.bind(editor), editor.off.bind(editor), // eslint-disable-next-line @typescript-eslint/no-unsafe-argument function (handlerLookup, key) { return function (e) { var _a; return (_a = handlerLookup(key)) === null || _a === void 0 ? void 0 : _a(e, editor); }; }, prevProps, props, boundHandlers); }; var unique = 0; var uuid = function (prefix) { var time = Date.now(); var random = Math.floor(Math.random() * 1000000000); unique++; return prefix + '_' + random + unique + String(time); }; var isTextareaOrInput = function (element) { return element !== null && (element.tagName.toLowerCase() === 'textarea' || element.tagName.toLowerCase() === 'input'); }; var normalizePluginArray = function (plugins) { if (typeof plugins === 'undefined' || plugins === '') { return []; } return Array.isArray(plugins) ? plugins : plugins.split(' '); }; // eslint-disable-next-line max-len var mergePlugins = function (initPlugins, inputPlugins) { return normalizePluginArray(initPlugins).concat(normalizePluginArray(inputPlugins)); }; var isBeforeInputEventAvailable = function () { return window.InputEvent && typeof InputEvent.prototype.getTargetRanges === 'function'; }; var isInDoc = function (elem) { if (!('isConnected' in Node.prototype)) { // Fallback for IE and old Edge var current = elem; var parent_1 = elem.parentNode; while (parent_1 != null) { current = parent_1; parent_1 = current.parentNode; } return current === elem.ownerDocument; } return elem.isConnected; }; var setMode = function (editor, mode) { if (editor !== undefined) { if (editor.mode != null && typeof editor.mode === 'object' && typeof editor.mode.set === 'function') { editor.mode.set(mode); } else { // support TinyMCE 4 editor.setMode(mode); } } }; var __assign$1 = undefined && undefined.__assign || function () { __assign$1 = Object.assign || function (t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign$1.apply(this, arguments); }; var injectScriptTag = function (doc, item, handler) { var _a, _b; var scriptTag = doc.createElement('script'); scriptTag.referrerPolicy = 'origin'; scriptTag.type = 'application/javascript'; scriptTag.id = item.id; scriptTag.src = item.src; scriptTag.async = (_a = item.async) !== null && _a !== void 0 ? _a : false; scriptTag.defer = (_b = item.defer) !== null && _b !== void 0 ? _b : false; var loadHandler = function () { scriptTag.removeEventListener('load', loadHandler); scriptTag.removeEventListener('error', errorHandler); handler(item.src); }; var errorHandler = function (err) { scriptTag.removeEventListener('load', loadHandler); scriptTag.removeEventListener('error', errorHandler); handler(item.src, err); }; scriptTag.addEventListener('load', loadHandler); scriptTag.addEventListener('error', errorHandler); if (doc.head) { doc.head.appendChild(scriptTag); } }; var createDocumentScriptLoader = function (doc) { var lookup = {}; var scriptLoadOrErrorHandler = function (src, err) { var item = lookup[src]; item.done = true; item.error = err; for (var _i = 0, _a = item.handlers; _i < _a.length; _i++) { var h = _a[_i]; h(src, err); } item.handlers = []; }; var loadScripts = function (items, success, failure) { // eslint-disable-next-line no-console var failureOrLog = function (err) { return failure !== undefined ? failure(err) : console.error(err); }; if (items.length === 0) { failureOrLog(new Error('At least one script must be provided')); return; } var successCount = 0; var failed = false; var loaded = function (_src, err) { if (failed) { return; } if (err) { failed = true; failureOrLog(err); } else if (++successCount === items.length) { success(); } }; for (var _i = 0, items_1 = items; _i < items_1.length; _i++) { var item = items_1[_i]; var existing = lookup[item.src]; if (existing) { if (existing.done) { loaded(item.src, existing.error); } else { existing.handlers.push(loaded); } } else { // create a new entry var id = uuid('tiny-'); lookup[item.src] = { id: id, src: item.src, done: false, error: null, handlers: [loaded] }; injectScriptTag(doc, __assign$1({ id: id }, item), scriptLoadOrErrorHandler); } } }; var deleteScripts = function () { var _a; for (var _i = 0, _b = Object.values(lookup); _i < _b.length; _i++) { var item = _b[_i]; var scriptTag = doc.getElementById(item.id); if (scriptTag != null && scriptTag.tagName === 'SCRIPT') { (_a = scriptTag.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(scriptTag); } } lookup = {}; }; var getDocument = function () { return doc; }; return { loadScripts: loadScripts, deleteScripts: deleteScripts, getDocument: getDocument }; }; var createScriptLoader = function () { var cache = []; var getDocumentScriptLoader = function (doc) { var loader = cache.find(function (l) { return l.getDocument() === doc; }); if (loader === undefined) { loader = createDocumentScriptLoader(doc); cache.push(loader); } return loader; }; var loadList = function (doc, items, delay, success, failure) { var doLoad = function () { return getDocumentScriptLoader(doc).loadScripts(items, success, failure); }; if (delay > 0) { setTimeout(doLoad, delay); } else { doLoad(); } }; var reinitialize = function () { for (var loader = cache.pop(); loader != null; loader = cache.pop()) { loader.deleteScripts(); } }; return { loadList: loadList, reinitialize: reinitialize }; }; var ScriptLoader = createScriptLoader(); var getTinymce = function (view) { var global = view; return global && global.tinymce ? global.tinymce : null; }; var __extends = undefined && undefined.__extends || function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; } || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); var __assign = undefined && undefined.__assign || function () { __assign = Object.assign || function (t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var Editor = /** @class */function (_super) { __extends(Editor, _super); function Editor(props) { var _a, _b, _c; var _this = _super.call(this, props) || this; _this.rollbackTimer = undefined; _this.valueCursor = undefined; _this.rollbackChange = function () { var editor = _this.editor; var value = _this.props.value; if (editor && value && value !== _this.currentContent) { editor.undoManager.ignore(function () { editor.setContent(value); // only restore cursor on inline editors when they are focused // as otherwise it will cause a focus grab if (_this.valueCursor && (!_this.inline || editor.hasFocus())) { try { editor.selection.moveToBookmark(_this.valueCursor); } catch (e) {/* ignore */} } }); } _this.rollbackTimer = undefined; }; _this.handleBeforeInput = function (_evt) { if (_this.props.value !== undefined && _this.props.value === _this.currentContent && _this.editor) { if (!_this.inline || _this.editor.hasFocus()) { try { // getBookmark throws exceptions when the editor has not been focused // possibly only in inline mode but I'm not taking chances _this.valueCursor = _this.editor.selection.getBookmark(3); } catch (e) {/* ignore */} } } }; _this.handleBeforeInputSpecial = function (evt) { if (evt.key === 'Enter' || evt.key === 'Backspace' || evt.key === 'Delete') { _this.handleBeforeInput(evt); } }; _this.handleEditorChange = function (_evt) { var editor = _this.editor; if (editor && editor.initialized) { var newContent = editor.getContent(); if (_this.props.value !== undefined && _this.props.value !== newContent && _this.props.rollback !== false) { // start a timer and revert to the value if not applied in time if (!_this.rollbackTimer) { _this.rollbackTimer = window.setTimeout(_this.rollbackChange, typeof _this.props.rollback === 'number' ? _this.props.rollback : 200); } } if (newContent !== _this.currentContent) { _this.currentContent = newContent; if (isFunction(_this.props.onEditorChange)) { _this.props.onEditorChange(newContent, editor); } } } }; _this.handleEditorChangeSpecial = function (evt) { if (evt.key === 'Backspace' || evt.key === 'Delete') { _this.handleEditorChange(evt); } }; _this.initialise = function (attempts) { var _a, _b, _c; if (attempts === void 0) { attempts = 0; } var target = _this.elementRef.current; if (!target) { return; // Editor has been unmounted } if (!isInDoc(target)) { // this is probably someone trying to help by rendering us offscreen // but we can't do that because the editor iframe must be in the document // in order to have state if (attempts === 0) { // we probably just need to wait for the current events to be processed setTimeout(function () { return _this.initialise(1); }, 1); } else if (attempts < 100) { // wait for ten seconds, polling every tenth of a second setTimeout(function () { return _this.initialise(attempts + 1); }, 100); } else { // give up, at this point it seems that more polling is unlikely to help throw new Error('tinymce can only be initialised when in a document'); } return; } var tinymce = getTinymce(_this.view); if (!tinymce) { throw new Error('tinymce should have been loaded into global scope'); } var finalInit = __assign(__assign({}, _this.props.init), { selector: undefined, target: target, readonly: _this.props.disabled, inline: _this.inline, plugins: mergePlugins((_a = _this.props.init) === null || _a === void 0 ? void 0 : _a.plugins, _this.props.plugins), toolbar: (_b = _this.props.toolbar) !== null && _b !== void 0 ? _b : (_c = _this.props.init) === null || _c === void 0 ? void 0 : _c.toolbar, setup: function (editor) { _this.editor = editor; _this.bindHandlers({}); // When running in inline mode the editor gets the initial value // from the innerHTML of the element it is initialized on. // However we don't want to take on the responsibility of sanitizing // to remove XSS in the react integration so we have a chicken and egg // problem... We avoid it by sneaking in a set content before the first // "official" setContent and using TinyMCE to do the sanitization. if (_this.inline && !isTextareaOrInput(target)) { editor.once('PostRender', function (_evt) { editor.setContent(_this.getInitialValue(), { no_events: true }); }); } if (_this.props.init && isFunction(_this.props.init.setup)) { _this.props.init.setup(editor); } }, init_instance_callback: function (editor) { var _a, _b; // check for changes that happened since tinymce.init() was called var initialValue = _this.getInitialValue(); _this.currentContent = (_a = _this.currentContent) !== null && _a !== void 0 ? _a : editor.getContent(); if (_this.currentContent !== initialValue) { _this.currentContent = initialValue; // same as resetContent in TinyMCE 5 editor.setContent(initialValue); editor.undoManager.clear(); editor.undoManager.add(); editor.setDirty(false); } var disabled = (_b = _this.props.disabled) !== null && _b !== void 0 ? _b : false; setMode(_this.editor, disabled ? 'readonly' : 'design'); // ensure existing init_instance_callback is called if (_this.props.init && isFunction(_this.props.init.init_instance_callback)) { _this.props.init.init_instance_callback(editor); } } }); if (!_this.inline) { target.style.visibility = ''; } if (isTextareaOrInput(target)) { target.value = _this.getInitialValue(); } tinymce.init(finalInit); }; _this.id = _this.props.id || uuid('tiny-react'); _this.elementRef = /*#__PURE__*/React__namespace.createRef(); _this.inline = (_c = (_a = _this.props.inline) !== null && _a !== void 0 ? _a : (_b = _this.props.init) === null || _b === void 0 ? void 0 : _b.inline) !== null && _c !== void 0 ? _c : false; _this.boundHandlers = {}; return _this; } Object.defineProperty(Editor.prototype, "view", { get: function () { var _a, _b; return (_b = (_a = this.elementRef.current) === null || _a === void 0 ? void 0 : _a.ownerDocument.defaultView) !== null && _b !== void 0 ? _b : window; }, enumerable: false, configurable: true }); Editor.prototype.componentDidUpdate = function (prevProps) { var _this = this; var _a, _b; if (this.rollbackTimer) { clearTimeout(this.rollbackTimer); this.rollbackTimer = undefined; } if (this.editor) { this.bindHandlers(prevProps); if (this.editor.initialized) { this.currentContent = (_a = this.currentContent) !== null && _a !== void 0 ? _a : this.editor.getContent(); if (typeof this.props.initialValue === 'string' && this.props.initialValue !== prevProps.initialValue) { // same as resetContent in TinyMCE 5 this.editor.setContent(this.props.initialValue); this.editor.undoManager.clear(); this.editor.undoManager.add(); this.editor.setDirty(false); } else if (typeof this.props.value === 'string' && this.props.value !== this.currentContent) { var localEditor_1 = this.editor; localEditor_1.undoManager.transact(function () { // inline editors grab focus when restoring selection // so we don't try to keep their selection unless they are currently focused var cursor; if (!_this.inline || localEditor_1.hasFocus()) { try { // getBookmark throws exceptions when the editor has not been focused // possibly only in inline mode but I'm not taking chances cursor = localEditor_1.selection.getBookmark(3); } catch (e) {/* ignore */} } var valueCursor = _this.valueCursor; localEditor_1.setContent(_this.props.value); if (!_this.inline || localEditor_1.hasFocus()) { for (var _i = 0, _a = [cursor, valueCursor]; _i < _a.length; _i++) { var bookmark = _a[_i]; if (bookmark) { try { localEditor_1.selection.moveToBookmark(bookmark); _this.valueCursor = bookmark; break; } catch (e) {/* ignore */} } } } }); } if (this.props.disabled !== prevProps.disabled) { var disabled = (_b = this.props.disabled) !== null && _b !== void 0 ? _b : false; setMode(this.editor, disabled ? 'readonly' : 'design'); } } } }; Editor.prototype.componentDidMount = function () { var _this = this; var _a, _b, _c, _d, _e; if (getTinymce(this.view) !== null) { this.initialise(); } else if (Array.isArray(this.props.tinymceScriptSrc) && this.props.tinymceScriptSrc.length === 0) { (_b = (_a = this.props).onScriptsLoadError) === null || _b === void 0 ? void 0 : _b.call(_a, new Error('No `tinymce` global is present but the `tinymceScriptSrc` prop was an empty array.')); } else if ((_c = this.elementRef.current) === null || _c === void 0 ? void 0 : _c.ownerDocument) { var successHandler = function () { var _a, _b; (_b = (_a = _this.props).onScriptsLoad) === null || _b === void 0 ? void 0 : _b.call(_a); _this.initialise(); }; var errorHandler = function (err) { var _a, _b; (_b = (_a = _this.props).onScriptsLoadError) === null || _b === void 0 ? void 0 : _b.call(_a, err); }; ScriptLoader.loadList(this.elementRef.current.ownerDocument, this.getScriptSources(), (_e = (_d = this.props.scriptLoading) === null || _d === void 0 ? void 0 : _d.delay) !== null && _e !== void 0 ? _e : 0, successHandler, errorHandler); } }; Editor.prototype.componentWillUnmount = function () { var _this = this; var editor = this.editor; if (editor) { editor.off(this.changeEvents(), this.handleEditorChange); editor.off(this.beforeInputEvent(), this.handleBeforeInput); editor.off('keypress', this.handleEditorChangeSpecial); editor.off('keydown', this.handleBeforeInputSpecial); editor.off('NewBlock', this.handleEditorChange); Object.keys(this.boundHandlers).forEach(function (eventName) { editor.off(eventName, _this.boundHandlers[eventName]); }); this.boundHandlers = {}; editor.remove(); this.editor = undefined; } }; Editor.prototype.render = function () { return this.inline ? this.renderInline() : this.renderIframe(); }; Editor.prototype.changeEvents = function () { var _a, _b, _c; var isIE = (_c = (_b = (_a = getTinymce(this.view)) === null || _a === void 0 ? void 0 : _a.Env) === null || _b === void 0 ? void 0 : _b.browser) === null || _c === void 0 ? void 0 : _c.isIE(); return isIE ? 'change keyup compositionend setcontent CommentChange' : 'change input compositionend setcontent CommentChange'; }; Editor.prototype.beforeInputEvent = function () { return isBeforeInputEventAvailable() ? 'beforeinput SelectionChange' : 'SelectionChange'; }; Editor.prototype.renderInline = function () { var _a = this.props.tagName, tagName = _a === void 0 ? 'div' : _a; return /*#__PURE__*/React__namespace.createElement(tagName, { ref: this.elementRef, id: this.id }); }; Editor.prototype.renderIframe = function () { return /*#__PURE__*/React__namespace.createElement('textarea', { ref: this.elementRef, style: { visibility: 'hidden' }, name: this.props.textareaName, id: this.id }); }; Editor.prototype.getScriptSources = function () { var _a, _b; var async = (_a = this.props.scriptLoading) === null || _a === void 0 ? void 0 : _a.async; var defer = (_b = this.props.scriptLoading) === null || _b === void 0 ? void 0 : _b.defer; if (this.props.tinymceScriptSrc !== undefined) { if (typeof this.props.tinymceScriptSrc === 'string') { return [{ src: this.props.tinymceScriptSrc, async: async, defer: defer }]; } // multiple scripts can be specified which allows for hybrid mode return this.props.tinymceScriptSrc.map(function (item) { if (typeof item === 'string') { // async does not make sense for multiple items unless // they are not dependent (which will be unlikely) return { src: item, async: async, defer: defer }; } else { return item; } }); } // fallback to the cloud when the tinymceScriptSrc is not specified var channel = this.props.cloudChannel; var apiKey = this.props.apiKey ? this.props.apiKey : 'no-api-key'; var cloudTinyJs = "https://cdn.tiny.cloud/1/".concat(apiKey, "/tinymce/").concat(channel, "/tinymce.min.js"); return [{ src: cloudTinyJs, async: async, defer: defer }]; }; Editor.prototype.getInitialValue = function () { if (typeof this.props.initialValue === 'string') { return this.props.initialValue; } else if (typeof this.props.value === 'string') { return this.props.value; } else { return ''; } }; Editor.prototype.bindHandlers = function (prevProps) { var _this = this; if (this.editor !== undefined) { // typescript chokes trying to understand the type of the lookup function configHandlers(this.editor, prevProps, this.props, this.boundHandlers, function (key) { return _this.props[key]; }); // check if we should monitor editor changes var isValueControlled = function (p) { return p.onEditorChange !== undefined || p.value !== undefined; }; var wasControlled = isValueControlled(prevProps); var nowControlled = isValueControlled(this.props); if (!wasControlled && nowControlled) { this.editor.on(this.changeEvents(), this.handleEditorChange); this.editor.on(this.beforeInputEvent(), this.handleBeforeInput); this.editor.on('keydown', this.handleBeforeInputSpecial); this.editor.on('keyup', this.handleEditorChangeSpecial); this.editor.on('NewBlock', this.handleEditorChange); } else if (wasControlled && !nowControlled) { this.editor.off(this.changeEvents(), this.handleEditorChange); this.editor.off(this.beforeInputEvent(), this.handleBeforeInput); this.editor.off('keydown', this.handleBeforeInputSpecial); this.editor.off('keyup', this.handleEditorChangeSpecial); this.editor.off('NewBlock', this.handleEditorChange); } } }; Editor.propTypes = EditorPropTypes; Editor.defaultProps = { cloudChannel: '6' }; return Editor; }(React__namespace.Component); const EditorWrapper = styled(Text$2)` position: relative; z-index: 1; & .tox-tinymce { padding: 8px 4px; border-width: 1.5px; } `; EditorWrapper.defaultProps = { className: cssClass('EditorWrapper') }; function _extends$8() { _extends$8 = Object.assign ? Object.assign.bind() : 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; }; return _extends$8.apply(this, arguments); } // eslint-disable-next-line @typescript-eslint/no-empty-interface const TinyMCE = props => { const editorRef = React.useRef(null); const { onChange, value, options = {} } = props; const { plugins = null, toolbar = null, init = null, contentStyle = null, height = null, ...otherProps } = options; const handleUpdate = React.useCallback(newValue => { onChange(newValue); }, []); const handleInit = (evt, editor) => { editorRef.current = editor; }; const defaultPlugins = ['image', 'code', 'table', 'link', 'media', 'codesample']; const defaultToolbar = ['undo redo formatselect bold italic backolor alignleft aligncenter alignright alignjustify bullist numlist outdent indent removeformat link image']; const defaultInit = { height: height !== null ? height : 500, menubar: true, plugins: plugins !== null ? plugins : defaultPlugins, toolbar: toolbar !== null ? toolbar : defaultToolbar, file_picker_types: 'file image media', file_picker_callback(cb, value, meta) { const input = document.createElement('input'); input.setAttribute('type', 'file'); input.setAttribute('accept', 'image/*'); /* Note: In modern browsers input[type="file"] is functional without even adding it to the DOM, but that might not be the case in some older or quirky browsers like IE, so you might want to add it to the DOM just in case, and visually hide it. And do not forget do remove it once you do not need it anymore. */ input.onchange = function fpOnChange(e) { // eslint-disable-next-line react/no-this-in-sfc const file = e.target?.files?.[0]; const reader = new FileReader(); reader.onload = function fpOnLoad() { /* Note: Now we need to register the blob in TinyMCEs image blob registry. In the next release this part hopefully won't be necessary, as we are looking to handle it internally. */ const id = `blobid${new Date().getTime()}`; const { blobCache } = window.tinymce?.activeEditor?.editorUpload ?? {}; const base64 = reader.result?.split?.(',')?.[1]; const blobInfo = blobCache.create(id, file, base64); blobCache.add(blobInfo); /* call the callback and populate the Title field with the file name */ cb(blobInfo.blobUri(), { title: file.name }); }; reader.readAsDataURL(file); }; input.click(); }, content_style: contentStyle !== null ? contentStyle : 'body { font-family:Helvetica,Arial,sans-serif; font-size:14px }' }; return /*#__PURE__*/React__namespace.default.createElement(EditorWrapper, null, /*#__PURE__*/React__namespace.default.createElement(Editor, _extends$8({ tinymceScriptSrc: "https://cdn.jsdelivr.net/npm/tinymce@6.8.2/tinymce.min.js", onInit: handleInit, onEditorChange: handleUpdate, value: value, init: init !== null ? init : defaultInit }, otherProps))); }; /** * This method returns `undefined`. * * @static * @memberOf _ * @since 2.3.0 * @category Util * @example * * _.times(2, _.noop); * // => [undefined, undefined] */ function noop$1() { // No operation performed. } var noop_1 = noop$1; var noop$2 = /*@__PURE__*/getDefaultExportFromCjs(noop_1); function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } var _excluded$6 = ["defaultInputValue", "defaultMenuIsOpen", "defaultValue", "inputValue", "menuIsOpen", "onChange", "onInputChange", "onMenuClose", "onMenuOpen", "value"]; function useStateManager(_ref) { var _ref$defaultInputValu = _ref.defaultInputValue, defaultInputValue = _ref$defaultInputValu === void 0 ? '' : _ref$defaultInputValu, _ref$defaultMenuIsOpe = _ref.defaultMenuIsOpen, defaultMenuIsOpen = _ref$defaultMenuIsOpe === void 0 ? false : _ref$defaultMenuIsOpe, _ref$defaultValue = _ref.defaultValue, defaultValue = _ref$defaultValue === void 0 ? null : _ref$defaultValue, propsInputValue = _ref.inputValue, propsMenuIsOpen = _ref.menuIsOpen, propsOnChange = _ref.onChange, propsOnInputChange = _ref.onInputChange, propsOnMenuClose = _ref.onMenuClose, propsOnMenuOpen = _ref.onMenuOpen, propsValue = _ref.value, restSelectProps = _objectWithoutProperties(_ref, _excluded$6); var _useState = React.useState(propsInputValue !== undefined ? propsInputValue : defaultInputValue), _useState2 = _slicedToArray(_useState, 2), stateInputValue = _useState2[0], setStateInputValue = _useState2[1]; var _useState3 = React.useState(propsMenuIsOpen !== undefined ? propsMenuIsOpen : defaultMenuIsOpen), _useState4 = _slicedToArray(_useState3, 2), stateMenuIsOpen = _useState4[0], setStateMenuIsOpen = _useState4[1]; var _useState5 = React.useState(propsValue !== undefined ? propsValue : defaultValue), _useState6 = _slicedToArray(_useState5, 2), stateValue = _useState6[0], setStateValue = _useState6[1]; var onChange = React.useCallback(function (value, actionMeta) { if (typeof propsOnChange === 'function') { propsOnChange(value, actionMeta); } setStateValue(value); }, [propsOnChange]); var onInputChange = React.useCallback(function (value, actionMeta) { var newValue; if (typeof propsOnInputChange === 'function') { newValue = propsOnInputChange(value, actionMeta); } setStateInputValue(newValue !== undefined ? newValue : value); }, [propsOnInputChange]); var onMenuOpen = React.useCallback(function () { if (typeof propsOnMenuOpen === 'function') { propsOnMenuOpen(); } setStateMenuIsOpen(true); }, [propsOnMenuOpen]); var onMenuClose = React.useCallback(function () { if (typeof propsOnMenuClose === 'function') { propsOnMenuClose(); } setStateMenuIsOpen(false); }, [propsOnMenuClose]); var inputValue = propsInputValue !== undefined ? propsInputValue : stateInputValue; var menuIsOpen = propsMenuIsOpen !== undefined ? propsMenuIsOpen : stateMenuIsOpen; var value = propsValue !== undefined ? propsValue : stateValue; return _objectSpread2(_objectSpread2({}, restSelectProps), {}, { inputValue: inputValue, menuIsOpen: menuIsOpen, onChange: onChange, onInputChange: onInputChange, onMenuClose: onMenuClose, onMenuOpen: onMenuOpen, value: value }); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } /* Based off glamor's StyleSheet, thanks Sunil ❤️ high performance StyleSheet for css-in-js systems - uses multiple style tags behind the scenes for millions of rules - uses `insertRule` for appending in production for *much* faster performance // usage import { StyleSheet } from '@emotion/sheet' let styleSheet = new StyleSheet({ key: '', container: document.head }) styleSheet.insert('#box { border: 1px solid red; }') - appends a css rule into the stylesheet styleSheet.flush() - empties the stylesheet of all its contents */ // $FlowFixMe function sheetForTag(tag) { if (tag.sheet) { // $FlowFixMe return tag.sheet; } // this weirdness brought to you by firefox /* istanbul ignore next */ for (var i = 0; i < document.styleSheets.length; i++) { if (document.styleSheets[i].ownerNode === tag) { // $FlowFixMe return document.styleSheets[i]; } } } function createStyleElement(options) { var tag = document.createElement('style'); tag.setAttribute('data-emotion', options.key); if (options.nonce !== undefined) { tag.setAttribute('nonce', options.nonce); } tag.appendChild(document.createTextNode('')); tag.setAttribute('data-s', ''); return tag; } var StyleSheet = /*#__PURE__*/function () { // Using Node instead of HTMLElement since container may be a ShadowRoot function StyleSheet(options) { var _this = this; this._insertTag = function (tag) { var before; if (_this.tags.length === 0) { if (_this.insertionPoint) { before = _this.insertionPoint.nextSibling; } else if (_this.prepend) { before = _this.container.firstChild; } else { before = _this.before; } } else { before = _this.tags[_this.tags.length - 1].nextSibling; } _this.container.insertBefore(tag, before); _this.tags.push(tag); }; this.isSpeedy = options.speedy === undefined ? "development" === 'production' : options.speedy; this.tags = []; this.ctr = 0; this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets this.key = options.key; this.container = options.container; this.prepend = options.prepend; this.insertionPoint = options.insertionPoint; this.before = null; } var _proto = StyleSheet.prototype; _proto.hydrate = function hydrate(nodes) { nodes.forEach(this._insertTag); }; _proto.insert = function insert(rule) { // the max length is how many rules we have per style tag, it's 65000 in speedy mode // it's 1 in dev because we insert source maps that map a single rule to a location // and you can only have one source map per style tag if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) { this._insertTag(createStyleElement(this)); } var tag = this.tags[this.tags.length - 1]; { var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105; if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) { // this would only cause problem in speedy mode // but we don't want enabling speedy to affect the observable behavior // so we report this error at all times console.error("You're attempting to insert the following rule:\n" + rule + '\n\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.'); } this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule; } if (this.isSpeedy) { var sheet = sheetForTag(tag); try { // this is the ultrafast version, works across browsers // the big drawback is that the css won't be editable in devtools sheet.insertRule(rule, sheet.cssRules.length); } catch (e) { if (!/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear|-ms-expand|-ms-reveal){/.test(rule)) { console.error("There was a problem inserting the following rule: \"" + rule + "\"", e); } } } else { tag.appendChild(document.createTextNode(rule)); } this.ctr++; }; _proto.flush = function flush() { // $FlowFixMe this.tags.forEach(function (tag) { return tag.parentNode && tag.parentNode.removeChild(tag); }); this.tags = []; this.ctr = 0; { this._alreadyInsertedOrderInsensitiveRule = false; } }; return StyleSheet; }(); var MS = '-ms-'; var MOZ = '-moz-'; var WEBKIT = '-webkit-'; var COMMENT = 'comm'; var RULESET = 'rule'; var DECLARATION = 'decl'; var IMPORT = '@import'; var KEYFRAMES = '@keyframes'; var LAYER = '@layer'; /** * @param {number} * @return {number} */ var abs = Math.abs; /** * @param {number} * @return {string} */ var from = String.fromCharCode; /** * @param {object} * @return {object} */ var assign = Object.assign; /** * @param {string} value * @param {number} length * @return {number} */ function hash(value, length) { return charat(value, 0) ^ 45 ? (((length << 2 ^ charat(value, 0)) << 2 ^ charat(value, 1)) << 2 ^ charat(value, 2)) << 2 ^ charat(value, 3) : 0; } /** * @param {string} value * @return {string} */ function trim(value) { return value.trim(); } /** * @param {string} value * @param {RegExp} pattern * @return {string?} */ function match(value, pattern) { return (value = pattern.exec(value)) ? value[0] : value; } /** * @param {string} value * @param {(string|RegExp)} pattern * @param {string} replacement * @return {string} */ function replace(value, pattern, replacement) { return value.replace(pattern, replacement); } /** * @param {string} value * @param {string} search * @return {number} */ function indexof(value, search) { return value.indexOf(search); } /** * @param {string} value * @param {number} index * @return {number} */ function charat(value, index) { return value.charCodeAt(index) | 0; } /** * @param {string} value * @param {number} begin * @param {number} end * @return {string} */ function substr(value, begin, end) { return value.slice(begin, end); } /** * @param {string} value * @return {number} */ function strlen(value) { return value.length; } /** * @param {any[]} value * @return {number} */ function sizeof(value) { return value.length; } /** * @param {any} value * @param {any[]} array * @return {any} */ function append(value, array) { return array.push(value), value; } /** * @param {string[]} array * @param {function} callback * @return {string} */ function combine(array, callback) { return array.map(callback).join(''); } var line = 1; var column = 1; var length = 0; var position = 0; var character = 0; var characters = ''; /** * @param {string} value * @param {object | null} root * @param {object | null} parent * @param {string} type * @param {string[] | string} props * @param {object[] | string} children * @param {number} length */ function node(value, root, parent, type, props, children, length) { return { value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: '' }; } /** * @param {object} root * @param {object} props * @return {object} */ function copy(root, props) { return assign(node('', null, null, '', null, null, 0), root, { length: -root.length }, props); } /** * @return {number} */ function char() { return character; } /** * @return {number} */ function prev() { character = position > 0 ? charat(characters, --position) : 0; if (column--, character === 10) column = 1, line--; return character; } /** * @return {number} */ function next() { character = position < length ? charat(characters, position++) : 0; if (column++, character === 10) column = 1, line++; return character; } /** * @return {number} */ function peek() { return charat(characters, position); } /** * @return {number} */ function caret() { return position; } /** * @param {number} begin * @param {number} end * @return {string} */ function slice(begin, end) { return substr(characters, begin, end); } /** * @param {number} type * @return {number} */ function token(type) { switch (type) { // \0 \t \n \r \s whitespace token case 0: case 9: case 10: case 13: case 32: return 5; // ! + , / > @ ~ isolate token case 33: case 43: case 44: case 47: case 62: case 64: case 126: // ; { } breakpoint token case 59: case 123: case 125: return 4; // : accompanied token case 58: return 3; // " ' ( [ opening delimit token case 34: case 39: case 40: case 91: return 2; // ) ] closing delimit token case 41: case 93: return 1; } return 0; } /** * @param {string} value * @return {any[]} */ function alloc(value) { return line = column = 1, length = strlen(characters = value), position = 0, []; } /** * @param {any} value * @return {any} */ function dealloc(value) { return characters = '', value; } /** * @param {number} type * @return {string} */ function delimit(type) { return trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type))); } /** * @param {number} type * @return {string} */ function whitespace(type) { while (character = peek()) if (character < 33) next();else break; return token(type) > 2 || token(character) > 3 ? '' : ' '; } /** * @param {number} index * @param {number} count * @return {string} */ function escaping(index, count) { while (--count && next()) // not 0-9 A-F a-f if (character < 48 || character > 102 || character > 57 && character < 65 || character > 70 && character < 97) break; return slice(index, caret() + (count < 6 && peek() == 32 && next() == 32)); } /** * @param {number} type * @return {number} */ function delimiter(type) { while (next()) switch (character) { // ] ) " ' case type: return position; // " ' case 34: case 39: if (type !== 34 && type !== 39) delimiter(character); break; // ( case 40: if (type === 41) delimiter(type); break; // \ case 92: next(); break; } return position; } /** * @param {number} type * @param {number} index * @return {number} */ function commenter(type, index) { while (next()) // // if (type + character === 47 + 10) break; // /* else if (type + character === 42 + 42 && peek() === 47) break; return '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next()); } /** * @param {number} index * @return {string} */ function identifier(index) { while (!token(peek())) next(); return slice(index, position); } /** * @param {string} value * @return {object[]} */ function compile(value) { return dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value)); } /** * @param {string} value * @param {object} root * @param {object?} parent * @param {string[]} rule * @param {string[]} rules * @param {string[]} rulesets * @param {number[]} pseudo * @param {number[]} points * @param {string[]} declarations * @return {object} */ function parse(value, root, parent, rule, rules, rulesets, pseudo, points, declarations) { var index = 0; var offset = 0; var length = pseudo; var atrule = 0; var property = 0; var previous = 0; var variable = 1; var scanning = 1; var ampersand = 1; var character = 0; var type = ''; var props = rules; var children = rulesets; var reference = rule; var characters = type; while (scanning) switch (previous = character, character = next()) { // ( case 40: if (previous != 108 && charat(characters, length - 1) == 58) { if (indexof(characters += replace(delimit(character), '&', '&\f'), '&\f') != -1) ampersand = -1; break; } // " ' [ case 34: case 39: case 91: characters += delimit(character); break; // \t \n \r \s case 9: case 10: case 13: case 32: characters += whitespace(previous); break; // \ case 92: characters += escaping(caret() - 1, 7); continue; // / case 47: switch (peek()) { case 42: case 47: append(comment(commenter(next(), caret()), root, parent), declarations); break; default: characters += '/'; } break; // { case 123 * variable: points[index++] = strlen(characters) * ampersand; // } ; \0 case 125 * variable: case 59: case 0: switch (character) { // \0 } case 0: case 125: scanning = 0; // ; case 59 + offset: if (ampersand == -1) characters = replace(characters, /\f/g, ''); if (property > 0 && strlen(characters) - length) append(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations); break; // @ ; case 59: characters += ';'; // { rule/at-rule default: append(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets); if (character === 123) if (offset === 0) parse(characters, root, reference, reference, props, rulesets, length, points, children);else switch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) { // d l m s case 100: case 108: case 109: case 115: parse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children); break; default: parse(characters, reference, reference, reference, [''], children, 0, points, children); } } index = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo; break; // : case 58: length = 1 + strlen(characters), property = previous; default: if (variable < 1) if (character == 123) --variable;else if (character == 125 && variable++ == 0 && prev() == 125) continue; switch (characters += from(character), character * variable) { // & case 38: ampersand = offset > 0 ? 1 : (characters += '\f', -1); break; // , case 44: points[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1; break; // @ case 64: // - if (peek() === 45) characters += delimit(next()); atrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++; break; // - case 45: if (previous === 45 && strlen(characters) == 2) variable = 0; } } return rulesets; } /** * @param {string} value * @param {object} root * @param {object?} parent * @param {number} index * @param {number} offset * @param {string[]} rules * @param {number[]} points * @param {string} type * @param {string[]} props * @param {string[]} children * @param {number} length * @return {object} */ function ruleset(value, root, parent, index, offset, rules, points, type, props, children, length) { var post = offset - 1; var rule = offset === 0 ? rules : ['']; var size = sizeof(rule); for (var i = 0, j = 0, k = 0; i < index; ++i) for (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x) if (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\f/g, rule[x]))) props[k++] = z; return node(value, root, parent, offset === 0 ? RULESET : type, props, children, length); } /** * @param {number} value * @param {object} root * @param {object?} parent * @return {object} */ function comment(value, root, parent) { return node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0); } /** * @param {string} value * @param {object} root * @param {object?} parent * @param {number} length * @return {object} */ function declaration(value, root, parent, length) { return node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length); } /** * @param {object[]} children * @param {function} callback * @return {string} */ function serialize(children, callback) { var output = ''; var length = sizeof(children); for (var i = 0; i < length; i++) output += callback(children[i], i, children, callback) || ''; return output; } /** * @param {object} element * @param {number} index * @param {object[]} children * @param {function} callback * @return {string} */ function stringify(element, index, children, callback) { switch (element.type) { case LAYER: if (element.children.length) break; case IMPORT: case DECLARATION: return element.return = element.return || element.value; case COMMENT: return ''; case KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'; case RULESET: element.value = element.props.join(','); } return strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''; } /** * @param {function[]} collection * @return {function} */ function middleware(collection) { var length = sizeof(collection); return function (element, index, children, callback) { var output = ''; for (var i = 0; i < length; i++) output += collection[i](element, index, children, callback) || ''; return output; }; } var weakMemoize = function weakMemoize(func) { // $FlowFixMe flow doesn't include all non-primitive types as allowed for weakmaps var cache = new WeakMap(); return function (arg) { if (cache.has(arg)) { // $FlowFixMe return cache.get(arg); } var ret = func(arg); cache.set(arg, ret); return ret; }; }; function memoize(fn) { var cache = Object.create(null); return function (arg) { if (cache[arg] === undefined) cache[arg] = fn(arg); return cache[arg]; }; } var identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) { var previous = 0; var character = 0; while (true) { previous = character; character = peek(); // &\f if (previous === 38 && character === 12) { points[index] = 1; } if (token(character)) { break; } next(); } return slice(begin, position); }; var toRules = function toRules(parsed, points) { // pretend we've started with a comma var index = -1; var character = 44; do { switch (token(character)) { case 0: // &\f if (character === 38 && peek() === 12) { // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings // stylis inserts \f after & to know when & where it should replace this sequence with the context selector // and when it should just concatenate the outer and inner selectors // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here points[index] = 1; } parsed[index] += identifierWithPointTracking(position - 1, points, index); break; case 2: parsed[index] += delimit(character); break; case 4: // comma if (character === 44) { // colon parsed[++index] = peek() === 58 ? '&\f' : ''; points[index] = parsed[index].length; break; } // fallthrough default: parsed[index] += from(character); } } while (character = next()); return parsed; }; var getRules = function getRules(value, points) { return dealloc(toRules(alloc(value), points)); }; // WeakSet would be more appropriate, but only WeakMap is supported in IE11 var fixedElements = /* #__PURE__ */new WeakMap(); var compat = function compat(element) { if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo // negative .length indicates that this rule has been already prefixed element.length < 1) { return; } var value = element.value, parent = element.parent; var isImplicitRule = element.column === parent.column && element.line === parent.line; while (parent.type !== 'rule') { parent = parent.parent; if (!parent) return; } // short-circuit for the simplest case if (element.props.length === 1 && value.charCodeAt(0) !== 58 /* colon */ && !fixedElements.get(parent)) { return; } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level) // then the props has already been manipulated beforehand as they that array is shared between it and its "rule parent" if (isImplicitRule) { return; } fixedElements.set(element, true); var points = []; var rules = getRules(value, points); var parentRules = parent.props; for (var i = 0, k = 0; i < rules.length; i++) { for (var j = 0; j < parentRules.length; j++, k++) { element.props[k] = points[i] ? rules[i].replace(/&\f/g, parentRules[j]) : parentRules[j] + " " + rules[i]; } } }; var removeLabel = function removeLabel(element) { if (element.type === 'decl') { var value = element.value; if ( // charcode for l value.charCodeAt(0) === 108 && // charcode for b value.charCodeAt(2) === 98) { // this ignores label element["return"] = ''; element.value = ''; } } }; var ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason'; var isIgnoringComment = function isIgnoringComment(element) { return element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1; }; var createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) { return function (element, index, children) { if (element.type !== 'rule' || cache.compat) return; var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g); if (unsafePseudoClasses) { var isNested = !!element.parent; // in nested rules comments become children of the "auto-inserted" rule and that's always the `element.parent` // // considering this input: // .a { // .b /* comm */ {} // color: hotpink; // } // we get output corresponding to this: // .a { // & { // /* comm */ // color: hotpink; // } // .b {} // } var commentContainer = isNested ? element.parent.children : // global rule at the root level children; for (var i = commentContainer.length - 1; i >= 0; i--) { var node = commentContainer[i]; if (node.line < element.line) { break; } // it is quite weird but comments are *usually* put at `column: element.column - 1` // so we seek *from the end* for the node that is earlier than the rule's `element` and check that // this will also match inputs like this: // .a { // /* comm */ // .b {} // } // // but that is fine // // it would be the easiest to change the placement of the comment to be the first child of the rule: // .a { // .b { /* comm */ } // } // with such inputs we wouldn't have to search for the comment at all // TODO: consider changing this comment placement in the next major version if (node.column < element.column) { if (isIgnoringComment(node)) { return; } break; } } unsafePseudoClasses.forEach(function (unsafePseudoClass) { console.error("The pseudo class \"" + unsafePseudoClass + "\" is potentially unsafe when doing server-side rendering. Try changing it to \"" + unsafePseudoClass.split('-child')[0] + "-of-type\"."); }); } }; }; var isImportRule = function isImportRule(element) { return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64; }; var isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) { for (var i = index - 1; i >= 0; i--) { if (!isImportRule(children[i])) { return true; } } return false; }; // use this to remove incorrect elements from further processing // so they don't get handed to the `sheet` (or anything else) // as that could potentially lead to additional logs which in turn could be overhelming to the user var nullifyElement = function nullifyElement(element) { element.type = ''; element.value = ''; element["return"] = ''; element.children = ''; element.props = ''; }; var incorrectImportAlarm = function incorrectImportAlarm(element, index, children) { if (!isImportRule(element)) { return; } if (element.parent) { console.error("`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles."); nullifyElement(element); } else if (isPrependedWithRegularRules(index, children)) { console.error("`@import` rules can't be after other rules. Please put your `@import` rules before your other rules."); nullifyElement(element); } }; /* eslint-disable no-fallthrough */ function prefix(value, length) { switch (hash(value, length)) { // color-adjust case 5103: return WEBKIT + 'print-' + value + value; // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function) case 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break case 5572: case 6356: case 5844: case 3191: case 6645: case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite, case 6391: case 5879: case 5623: case 6135: case 4599: case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width) case 4215: case 6389: case 5109: case 5365: case 5621: case 3829: return WEBKIT + value + value; // appearance, user-select, transform, hyphens, text-size-adjust case 5349: case 4246: case 4810: case 6968: case 2756: return WEBKIT + value + MOZ + value + MS + value + value; // flex, flex-direction case 6828: case 4268: return WEBKIT + value + MS + value + value; // order case 6165: return WEBKIT + value + MS + 'flex-' + value + value; // align-items case 5187: return WEBKIT + value + replace(value, /(\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value; // align-self case 5443: return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value; // align-content case 4675: return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value; // flex-shrink case 5548: return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value; // flex-basis case 5292: return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value; // flex-grow case 6060: return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value; // transition case 4554: return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value; // cursor case 6187: return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value; // background, background-image case 5495: case 3959: return replace(value, /(image-set\([^]*)/, WEBKIT + '$1' + '$`$1'); // justify-content case 4968: return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value; // (margin|padding)-inline-(start|end) case 4095: case 3583: case 4068: case 2532: return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value; // (min|max)?(width|height|inline-size|block-size) case 8116: case 7059: case 5753: case 5535: case 5445: case 5701: case 4933: case 4677: case 5533: case 5789: case 5021: case 4765: // stretch, max-content, min-content, fill-available if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) { // (m)ax-content, (m)in-content case 109: // - if (charat(value, length + 4) !== 45) break; // (f)ill-available, (f)it-content case 102: return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value; // (s)tretch case 115: return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value; } break; // position: sticky case 4949: // (s)ticky? if (charat(value, length + 1) !== 115) break; // display: (flex|inline-flex) case 6444: switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) { // stic(k)y case 107: return replace(value, ':', ':' + WEBKIT) + value; // (inline-)?fl(e)x case 101: return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value; } break; // writing-mode case 5936: switch (charat(value, length + 11)) { // vertical-l(r) case 114: return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, 'tb') + value; // vertical-r(l) case 108: return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, 'tb-rl') + value; // horizontal(-)tb case 45: return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, 'lr') + value; } return WEBKIT + value + MS + value + value; } return value; } var prefixer = function prefixer(element, index, children, callback) { if (element.length > -1) if (!element["return"]) switch (element.type) { case DECLARATION: element["return"] = prefix(element.value, element.length); break; case KEYFRAMES: return serialize([copy(element, { value: replace(element.value, '@', '@' + WEBKIT) })], callback); case RULESET: if (element.length) return combine(element.props, function (value) { switch (match(value, /(::plac\w+|:read-\w+)/)) { // :read-(only|write) case ':read-only': case ':read-write': return serialize([copy(element, { props: [replace(value, /:(read-\w+)/, ':' + MOZ + '$1')] })], callback); // :placeholder case '::placeholder': return serialize([copy(element, { props: [replace(value, /:(plac\w+)/, ':' + WEBKIT + 'input-$1')] }), copy(element, { props: [replace(value, /:(plac\w+)/, ':' + MOZ + '$1')] }), copy(element, { props: [replace(value, /:(plac\w+)/, MS + 'input-$1')] })], callback); } return ''; }); } }; var isBrowser$4 = typeof document !== 'undefined'; var getServerStylisCache = isBrowser$4 ? undefined : weakMemoize(function () { return memoize(function () { var cache = {}; return function (name) { return cache[name]; }; }); }); var defaultStylisPlugins = [prefixer]; var createCache = function createCache(options) { var key = options.key; if (!key) { throw new Error("You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\n" + "If multiple caches share the same key they might \"fight\" for each other's style elements."); } if (isBrowser$4 && key === 'css') { var ssrStyles = document.querySelectorAll("style[data-emotion]:not([data-s])"); // get SSRed styles out of the way of React's hydration // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be) // note this very very intentionally targets all style elements regardless of the key to ensure // that creating a cache works inside of render of a React component Array.prototype.forEach.call(ssrStyles, function (node) { // we want to only move elements which have a space in the data-emotion attribute value // because that indicates that it is an Emotion 11 server-side rendered style elements // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes) // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles // will not result in the Emotion 10 styles being destroyed var dataEmotionAttribute = node.getAttribute('data-emotion'); if (dataEmotionAttribute.indexOf(' ') === -1) { return; } document.head.appendChild(node); node.setAttribute('data-s', ''); }); } var stylisPlugins = options.stylisPlugins || defaultStylisPlugins; { // $FlowFixMe if (/[^a-z-]/.test(key)) { throw new Error("Emotion key must only contain lower case alphabetical characters and - but \"" + key + "\" was passed"); } } var inserted = {}; var container; var nodesToHydrate = []; if (isBrowser$4) { container = options.container || document.head; Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which // means that the style elements we're looking at are only Emotion 11 server-rendered style elements document.querySelectorAll("style[data-emotion^=\"" + key + " \"]"), function (node) { var attrib = node.getAttribute("data-emotion").split(' '); // $FlowFixMe for (var i = 1; i < attrib.length; i++) { inserted[attrib[i]] = true; } nodesToHydrate.push(node); }); } var _insert; var omnipresentPlugins = [compat, removeLabel]; { omnipresentPlugins.push(createUnsafeSelectorsAlarm({ get compat() { return cache.compat; } }), incorrectImportAlarm); } if (isBrowser$4) { var currentSheet; var finalizingPlugins = [stringify, function (element) { if (!element.root) { if (element["return"]) { currentSheet.insert(element["return"]); } else if (element.value && element.type !== COMMENT) { // insert empty rule in non-production environments // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet currentSheet.insert(element.value + "{}"); } } } ]; var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins)); var stylis = function stylis(styles) { return serialize(compile(styles), serializer); }; _insert = function insert(selector, serialized, sheet, shouldCache) { currentSheet = sheet; if (serialized.map !== undefined) { currentSheet = { insert: function insert(rule) { sheet.insert(rule + serialized.map); } }; } stylis(selector ? selector + "{" + serialized.styles + "}" : serialized.styles); if (shouldCache) { cache.inserted[serialized.name] = true; } }; } else { var _finalizingPlugins = [stringify]; var _serializer = middleware(omnipresentPlugins.concat(stylisPlugins, _finalizingPlugins)); var _stylis = function _stylis(styles) { return serialize(compile(styles), _serializer); }; // $FlowFixMe var serverStylisCache = getServerStylisCache(stylisPlugins)(key); var getRules = function getRules(selector, serialized) { var name = serialized.name; if (serverStylisCache[name] === undefined) { serverStylisCache[name] = _stylis(selector ? selector + "{" + serialized.styles + "}" : serialized.styles); } return serverStylisCache[name]; }; _insert = function _insert(selector, serialized, sheet, shouldCache) { var name = serialized.name; var rules = getRules(selector, serialized); if (cache.compat === undefined) { // in regular mode, we don't set the styles on the inserted cache // since we don't need to and that would be wasting memory // we return them so that they are rendered in a style tag if (shouldCache) { cache.inserted[name] = true; } if ( // using === development instead of !== production // because if people do ssr in tests, the source maps showing up would be annoying serialized.map !== undefined) { return rules + serialized.map; } return rules; } else { // in compat mode, we put the styles on the inserted cache so // that emotion-server can pull out the styles // except when we don't want to cache it which was in Global but now // is nowhere but we don't want to do a major right now // and just in case we're going to leave the case here // it's also not affecting client side bundle size // so it's really not a big deal if (shouldCache) { cache.inserted[name] = rules; } else { return rules; } } }; } var cache = { key: key, sheet: new StyleSheet({ key: key, container: container, nonce: options.nonce, speedy: options.speedy, prepend: options.prepend, insertionPoint: options.insertionPoint }), nonce: options.nonce, inserted: inserted, registered: {}, insert: _insert }; cache.sheet.hydrate(nodesToHydrate); return cache; }; var isBrowser$3 = typeof document !== 'undefined'; function getRegisteredStyles(registered, registeredStyles, classNames) { var rawClassName = ''; classNames.split(' ').forEach(function (className) { if (registered[className] !== undefined) { registeredStyles.push(registered[className] + ";"); } else { rawClassName += className + " "; } }); return rawClassName; } var registerStyles = function registerStyles(cache, serialized, isStringTag) { var className = cache.key + "-" + serialized.name; if ( // we only need to add the styles to the registered cache if the // class name could be used further down // the tree but if it's a string tag, we know it won't // so we don't have to add it to registered cache. // this improves memory usage since we can avoid storing the whole style string (isStringTag === false || // we need to always store it if we're in compat mode and // in node since emotion-server relies on whether a style is in // the registered cache to know whether a style is global or not // also, note that this check will be dead code eliminated in the browser isBrowser$3 === false && cache.compat !== undefined) && cache.registered[className] === undefined) { cache.registered[className] = serialized.styles; } }; var insertStyles = function insertStyles(cache, serialized, isStringTag) { registerStyles(cache, serialized, isStringTag); var className = cache.key + "-" + serialized.name; if (cache.inserted[serialized.name] === undefined) { var stylesForSSR = ''; var current = serialized; do { var maybeStyles = cache.insert(serialized === current ? "." + className : '', current, cache.sheet, true); if (!isBrowser$3 && maybeStyles !== undefined) { stylesForSSR += maybeStyles; } current = current.next; } while (current !== undefined); if (!isBrowser$3 && stylesForSSR.length !== 0) { return stylesForSSR; } } }; /* eslint-disable */ // Inspired by https://github.com/garycourt/murmurhash-js // Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86 function murmur2(str) { // 'm' and 'r' are mixing constants generated offline. // They're not really 'magic', they just happen to work well. // const m = 0x5bd1e995; // const r = 24; // Initialize the hash var h = 0; // Mix 4 bytes at a time into the hash var k, i = 0, len = str.length; for (; len >= 4; ++i, len -= 4) { k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24; k = /* Math.imul(k, m): */ (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16); k ^= /* k >>> r: */ k >>> 24; h = /* Math.imul(k, m): */ (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^ /* Math.imul(h, m): */ (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16); } // Handle the last few bytes of the input array switch (len) { case 3: h ^= (str.charCodeAt(i + 2) & 0xff) << 16; case 2: h ^= (str.charCodeAt(i + 1) & 0xff) << 8; case 1: h ^= str.charCodeAt(i) & 0xff; h = /* Math.imul(h, m): */ (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16); } // Do a few final mixes of the hash to ensure the last few // bytes are well-incorporated. h ^= h >>> 13; h = /* Math.imul(h, m): */ (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16); return ((h ^ h >>> 15) >>> 0).toString(36); } var unitlessKeys = { animationIterationCount: 1, aspectRatio: 1, borderImageOutset: 1, borderImageSlice: 1, borderImageWidth: 1, boxFlex: 1, boxFlexGroup: 1, boxOrdinalGroup: 1, columnCount: 1, columns: 1, flex: 1, flexGrow: 1, flexPositive: 1, flexShrink: 1, flexNegative: 1, flexOrder: 1, gridRow: 1, gridRowEnd: 1, gridRowSpan: 1, gridRowStart: 1, gridColumn: 1, gridColumnEnd: 1, gridColumnSpan: 1, gridColumnStart: 1, msGridRow: 1, msGridRowSpan: 1, msGridColumn: 1, msGridColumnSpan: 1, fontWeight: 1, lineHeight: 1, opacity: 1, order: 1, orphans: 1, tabSize: 1, widows: 1, zIndex: 1, zoom: 1, WebkitLineClamp: 1, // SVG-related properties fillOpacity: 1, floodOpacity: 1, stopOpacity: 1, strokeDasharray: 1, strokeDashoffset: 1, strokeMiterlimit: 1, strokeOpacity: 1, strokeWidth: 1 }; var ILLEGAL_ESCAPE_SEQUENCE_ERROR = "You have illegal escape sequence in your template literal, most likely inside content's property value.\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \"content: '\\00d7';\" should become \"content: '\\\\00d7';\".\nYou can read more about this here:\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences"; var UNDEFINED_AS_OBJECT_KEY_ERROR = "You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key)."; var hyphenateRegex = /[A-Z]|^ms/g; var animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g; var isCustomProperty = function isCustomProperty(property) { return property.charCodeAt(1) === 45; }; var isProcessableValue = function isProcessableValue(value) { return value != null && typeof value !== 'boolean'; }; var processStyleName = /* #__PURE__ */memoize(function (styleName) { return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase(); }); var processStyleValue = function processStyleValue(key, value) { switch (key) { case 'animation': case 'animationName': { if (typeof value === 'string') { return value.replace(animationRegex, function (match, p1, p2) { cursor = { name: p1, styles: p2, next: cursor }; return p1; }); } } } if (unitlessKeys[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) { return value + 'px'; } return value; }; { var contentValuePattern = /(var|attr|counters?|url|element|(((repeating-)?(linear|radial))|conic)-gradient)\(|(no-)?(open|close)-quote/; var contentValues = ['normal', 'none', 'initial', 'inherit', 'unset']; var oldProcessStyleValue = processStyleValue; var msPattern = /^-ms-/; var hyphenPattern = /-(.)/g; var hyphenatedCache = {}; processStyleValue = function processStyleValue(key, value) { if (key === 'content') { if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '"' && value.charAt(0) !== "'")) { throw new Error("You seem to be using a value for 'content' without quotes, try replacing it with `content: '\"" + value + "\"'`"); } } var processed = oldProcessStyleValue(key, value); if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) { hyphenatedCache[key] = true; console.error("Using kebab-case for css properties in objects is not supported. Did you mean " + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) { return _char.toUpperCase(); }) + "?"); } return processed; }; } var noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.'; function handleInterpolation(mergedProps, registered, interpolation) { if (interpolation == null) { return ''; } if (interpolation.__emotion_styles !== undefined) { if (interpolation.toString() === 'NO_COMPONENT_SELECTOR') { throw new Error(noComponentSelectorMessage); } return interpolation; } switch (typeof interpolation) { case 'boolean': { return ''; } case 'object': { if (interpolation.anim === 1) { cursor = { name: interpolation.name, styles: interpolation.styles, next: cursor }; return interpolation.name; } if (interpolation.styles !== undefined) { var next = interpolation.next; if (next !== undefined) { // not the most efficient thing ever but this is a pretty rare case // and there will be very few iterations of this generally while (next !== undefined) { cursor = { name: next.name, styles: next.styles, next: cursor }; next = next.next; } } var styles = interpolation.styles + ";"; if (interpolation.map !== undefined) { styles += interpolation.map; } return styles; } return createStringFromObject(mergedProps, registered, interpolation); } case 'function': { if (mergedProps !== undefined) { var previousCursor = cursor; var result = interpolation(mergedProps); cursor = previousCursor; return handleInterpolation(mergedProps, registered, result); } else { console.error('Functions that are interpolated in css calls will be stringified.\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\n' + 'It can be called directly with props or interpolated in a styled call like this\n' + "let SomeComponent = styled('div')`${dynamicStyle}`"); } break; } case 'string': { var matched = []; var replaced = interpolation.replace(animationRegex, function (match, p1, p2) { var fakeVarName = "animation" + matched.length; matched.push("const " + fakeVarName + " = keyframes`" + p2.replace(/^@keyframes animation-\w+/, '') + "`"); return "${" + fakeVarName + "}"; }); if (matched.length) { console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\n\n' + 'Instead of doing this:\n\n' + [].concat(matched, ["`" + replaced + "`"]).join('\n') + '\n\nYou should wrap it with `css` like this:\n\n' + ("css`" + replaced + "`")); } } break; } // finalize string values (regular strings and functions interpolated into css calls) if (registered == null) { return interpolation; } var cached = registered[interpolation]; return cached !== undefined ? cached : interpolation; } function createStringFromObject(mergedProps, registered, obj) { var string = ''; if (Array.isArray(obj)) { for (var i = 0; i < obj.length; i++) { string += handleInterpolation(mergedProps, registered, obj[i]) + ";"; } } else { for (var _key in obj) { var value = obj[_key]; if (typeof value !== 'object') { if (registered != null && registered[value] !== undefined) { string += _key + "{" + registered[value] + "}"; } else if (isProcessableValue(value)) { string += processStyleName(_key) + ":" + processStyleValue(_key, value) + ";"; } } else { if (_key === 'NO_COMPONENT_SELECTOR' && "development" !== 'production') { throw new Error(noComponentSelectorMessage); } if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) { for (var _i = 0; _i < value.length; _i++) { if (isProcessableValue(value[_i])) { string += processStyleName(_key) + ":" + processStyleValue(_key, value[_i]) + ";"; } } } else { var interpolated = handleInterpolation(mergedProps, registered, value); switch (_key) { case 'animation': case 'animationName': { string += processStyleName(_key) + ":" + interpolated + ";"; break; } default: { if (_key === 'undefined') { console.error(UNDEFINED_AS_OBJECT_KEY_ERROR); } string += _key + "{" + interpolated + "}"; } } } } } } return string; } var labelPattern = /label:\s*([^\s;\n{]+)\s*(;|$)/g; var sourceMapPattern; { sourceMapPattern = /\/\*#\ssourceMappingURL=data:application\/json;\S+\s+\*\//g; } // this is the cursor for keyframes // keyframes are stored on the SerializedStyles object as a linked list var cursor; var serializeStyles = function serializeStyles(args, registered, mergedProps) { if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) { return args[0]; } var stringMode = true; var styles = ''; cursor = undefined; var strings = args[0]; if (strings == null || strings.raw === undefined) { stringMode = false; styles += handleInterpolation(mergedProps, registered, strings); } else { if (strings[0] === undefined) { console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR); } styles += strings[0]; } // we start at 1 since we've already handled the first arg for (var i = 1; i < args.length; i++) { styles += handleInterpolation(mergedProps, registered, args[i]); if (stringMode) { if (strings[i] === undefined) { console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR); } styles += strings[i]; } } var sourceMap; { styles = styles.replace(sourceMapPattern, function (match) { sourceMap = match; return ''; }); } // using a global regex with .exec is stateful so lastIndex has to be reset each time labelPattern.lastIndex = 0; var identifierName = ''; var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5 while ((match = labelPattern.exec(styles)) !== null) { identifierName += '-' + // $FlowFixMe we know it's not null match[1]; } var name = murmur2(styles) + identifierName; { // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it) return { name: name, styles: styles, map: sourceMap, next: cursor, toString: function toString() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } }; } }; var isBrowser$2 = typeof document !== 'undefined'; var syncFallback = function syncFallback(create) { return create(); }; var useInsertionEffect = React__namespace['useInsertion' + 'Effect'] ? React__namespace['useInsertion' + 'Effect'] : false; var useInsertionEffectAlwaysWithSyncFallback = !isBrowser$2 ? syncFallback : useInsertionEffect || syncFallback; var useInsertionEffectWithLayoutFallback = useInsertionEffect || React.useLayoutEffect; var isBrowser$1 = typeof document !== 'undefined'; var hasOwnProperty = {}.hasOwnProperty; var EmotionCacheContext = /* #__PURE__ */React.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case // because this module is primarily intended for the browser and node // but it's also required in react native and similar environments sometimes // and we could have a special build just for that // but this is much easier and the native packages // might use a different theme context in the future anyway typeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({ key: 'css' }) : null); { EmotionCacheContext.displayName = 'EmotionCacheContext'; } EmotionCacheContext.Provider; var withEmotionCache = function withEmotionCache(func) { // $FlowFixMe return /*#__PURE__*/React.forwardRef(function (props, ref) { // the cache will never be null in the browser var cache = React.useContext(EmotionCacheContext); return func(props, cache, ref); }); }; if (!isBrowser$1) { withEmotionCache = function withEmotionCache(func) { return function (props) { var cache = React.useContext(EmotionCacheContext); if (cache === null) { // yes, we're potentially creating this on every render // it doesn't actually matter though since it's only on the server // so there will only every be a single render // that could change in the future because of suspense and etc. but for now, // this works and i don't want to optimise for a future thing that we aren't sure about cache = createCache({ key: 'css' }); return /*#__PURE__*/React.createElement(EmotionCacheContext.Provider, { value: cache }, func(props, cache)); } else { return func(props, cache); } }; }; } var ThemeContext = /* #__PURE__ */React.createContext({}); { ThemeContext.displayName = 'EmotionThemeContext'; } var getLastPart = function getLastPart(functionName) { // The match may be something like 'Object.createEmotionProps' or // 'Loader.prototype.render' var parts = functionName.split('.'); return parts[parts.length - 1]; }; var getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine(line) { // V8 var match = /^\s+at\s+([A-Za-z0-9$.]+)\s/.exec(line); if (match) return getLastPart(match[1]); // Safari / Firefox match = /^([A-Za-z0-9$.]+)@/.exec(line); if (match) return getLastPart(match[1]); return undefined; }; var internalReactFunctionNames = /* #__PURE__ */new Set(['renderWithHooks', 'processChild', 'finishClassComponent', 'renderToString']); // These identifiers come from error stacks, so they have to be valid JS // identifiers, thus we only need to replace what is a valid character for JS, // but not for CSS. var sanitizeIdentifier = function sanitizeIdentifier(identifier) { return identifier.replace(/\$/g, '-'); }; var getLabelFromStackTrace = function getLabelFromStackTrace(stackTrace) { if (!stackTrace) return undefined; var lines = stackTrace.split('\n'); for (var i = 0; i < lines.length; i++) { var functionName = getFunctionNameFromStackTraceLine(lines[i]); // The first line of V8 stack traces is just "Error" if (!functionName) continue; // If we reach one of these, we have gone too far and should quit if (internalReactFunctionNames.has(functionName)) break; // The component name is the first function in the stack that starts with an // uppercase letter if (/^[A-Z]/.test(functionName)) return sanitizeIdentifier(functionName); } return undefined; }; var typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__'; var labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__'; var createEmotionProps = function createEmotionProps(type, props) { if (typeof props.css === 'string' && // check if there is a css declaration props.css.indexOf(':') !== -1) { throw new Error("Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`" + props.css + "`"); } var newProps = {}; for (var key in props) { if (hasOwnProperty.call(props, key)) { newProps[key] = props[key]; } } newProps[typePropName] = type; // For performance, only call getLabelFromStackTrace in development and when // the label hasn't already been computed if (!!props.css && (typeof props.css !== 'object' || typeof props.css.name !== 'string' || props.css.name.indexOf('-') === -1)) { var label = getLabelFromStackTrace(new Error().stack); if (label) newProps[labelPropName] = label; } return newProps; }; var Insertion$1 = function Insertion(_ref) { var cache = _ref.cache, serialized = _ref.serialized, isStringTag = _ref.isStringTag; registerStyles(cache, serialized, isStringTag); var rules = useInsertionEffectAlwaysWithSyncFallback(function () { return insertStyles(cache, serialized, isStringTag); }); if (!isBrowser$1 && rules !== undefined) { var _ref2; var serializedNames = serialized.name; var next = serialized.next; while (next !== undefined) { serializedNames += ' ' + next.name; next = next.next; } return /*#__PURE__*/React.createElement("style", (_ref2 = {}, _ref2["data-emotion"] = cache.key + " " + serializedNames, _ref2.dangerouslySetInnerHTML = { __html: rules }, _ref2.nonce = cache.sheet.nonce, _ref2)); } return null; }; var Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) { var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works // not passing the registered cache to serializeStyles because it would // make certain babel optimisations not possible if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) { cssProp = cache.registered[cssProp]; } var WrappedComponent = props[typePropName]; var registeredStyles = [cssProp]; var className = ''; if (typeof props.className === 'string') { className = getRegisteredStyles(cache.registered, registeredStyles, props.className); } else if (props.className != null) { className = props.className + " "; } var serialized = serializeStyles(registeredStyles, undefined, React.useContext(ThemeContext)); if (serialized.name.indexOf('-') === -1) { var labelFromStack = props[labelPropName]; if (labelFromStack) { serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']); } } className += cache.key + "-" + serialized.name; var newProps = {}; for (var key in props) { if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (key !== labelPropName)) { newProps[key] = props[key]; } } newProps.ref = ref; newProps.className = className; return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion$1, { cache: cache, serialized: serialized, isStringTag: typeof WrappedComponent === 'string' }), /*#__PURE__*/React.createElement(WrappedComponent, newProps)); }); { Emotion.displayName = 'EmotionCssPropInternal'; } var pkg = { name: "@emotion/react", version: "11.10.6", main: "dist/emotion-react.cjs.js", module: "dist/emotion-react.esm.js", browser: { "./dist/emotion-react.esm.js": "./dist/emotion-react.browser.esm.js" }, exports: { ".": { module: { worker: "./dist/emotion-react.worker.esm.js", browser: "./dist/emotion-react.browser.esm.js", "default": "./dist/emotion-react.esm.js" }, "default": "./dist/emotion-react.cjs.js" }, "./jsx-runtime": { module: { worker: "./jsx-runtime/dist/emotion-react-jsx-runtime.worker.esm.js", browser: "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js", "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.esm.js" }, "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.js" }, "./_isolated-hnrs": { module: { worker: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.worker.esm.js", browser: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js", "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.esm.js" }, "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.js" }, "./jsx-dev-runtime": { module: { worker: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.worker.esm.js", browser: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.esm.js", "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.esm.js" }, "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.js" }, "./package.json": "./package.json", "./types/css-prop": "./types/css-prop.d.ts", "./macro": "./macro.js" }, types: "types/index.d.ts", files: ["src", "dist", "jsx-runtime", "jsx-dev-runtime", "_isolated-hnrs", "types/*.d.ts", "macro.js", "macro.d.ts", "macro.js.flow"], sideEffects: false, author: "Emotion Contributors", license: "MIT", scripts: { "test:typescript": "dtslint types" }, dependencies: { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.10.6", "@emotion/cache": "^11.10.5", "@emotion/serialize": "^1.1.1", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", "@emotion/utils": "^1.2.0", "@emotion/weak-memoize": "^0.3.0", "hoist-non-react-statics": "^3.3.1" }, peerDependencies: { react: ">=16.8.0" }, peerDependenciesMeta: { "@types/react": { optional: true } }, devDependencies: { "@definitelytyped/dtslint": "0.0.112", "@emotion/css": "11.10.6", "@emotion/css-prettifier": "1.1.1", "@emotion/server": "11.10.0", "@emotion/styled": "11.10.6", "html-tag-names": "^1.1.2", react: "16.14.0", "svg-tag-names": "^1.1.1", typescript: "^4.5.5" }, repository: "https://github.com/emotion-js/emotion/tree/main/packages/react", publishConfig: { access: "public" }, "umd:main": "dist/emotion-react.umd.min.js", preconstruct: { entrypoints: ["./index.js", "./jsx-runtime.js", "./jsx-dev-runtime.js", "./_isolated-hnrs.js"], umdName: "emotionReact", exports: { envConditions: ["browser", "worker"], extra: { "./types/css-prop": "./types/css-prop.d.ts", "./macro": "./macro.js" } } } }; var jsx = function jsx(type, props) { var args = arguments; if (props == null || !hasOwnProperty.call(props, 'css')) { // $FlowFixMe return React.createElement.apply(undefined, args); } var argsLength = args.length; var createElementArgArray = new Array(argsLength); createElementArgArray[0] = Emotion; createElementArgArray[1] = createEmotionProps(type, props); for (var i = 2; i < argsLength; i++) { createElementArgArray[i] = args[i]; } // $FlowFixMe return React.createElement.apply(null, createElementArgArray); }; var warnedAboutCssPropForGlobal = false; // maintain place over rerenders. // initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild // initial client-side render from SSR, use place of hydrating tag var Global = /* #__PURE__ */withEmotionCache(function (props, cache) { if (!warnedAboutCssPropForGlobal && ( // check for className as well since the user is // probably using the custom createElement which // means it will be turned into a className prop // $FlowFixMe I don't really want to add it to the type since it shouldn't be used props.className || props.css)) { console.error("It looks like you're using the css prop on Global, did you mean to use the styles prop instead?"); warnedAboutCssPropForGlobal = true; } var styles = props.styles; var serialized = serializeStyles([styles], undefined, React.useContext(ThemeContext)); if (!isBrowser$1) { var _ref; var serializedNames = serialized.name; var serializedStyles = serialized.styles; var next = serialized.next; while (next !== undefined) { serializedNames += ' ' + next.name; serializedStyles += next.styles; next = next.next; } var shouldCache = cache.compat === true; var rules = cache.insert("", { name: serializedNames, styles: serializedStyles }, cache.sheet, shouldCache); if (shouldCache) { return null; } return /*#__PURE__*/React.createElement("style", (_ref = {}, _ref["data-emotion"] = cache.key + "-global " + serializedNames, _ref.dangerouslySetInnerHTML = { __html: rules }, _ref.nonce = cache.sheet.nonce, _ref)); } // yes, i know these hooks are used conditionally // but it is based on a constant that will never change at runtime // it's effectively like having two implementations and switching them out // so it's not actually breaking anything var sheetRef = React.useRef(); useInsertionEffectWithLayoutFallback(function () { var key = cache.key + "-global"; // use case of https://github.com/emotion-js/emotion/issues/2675 var sheet = new cache.sheet.constructor({ key: key, nonce: cache.sheet.nonce, container: cache.sheet.container, speedy: cache.sheet.isSpeedy }); var rehydrating = false; // $FlowFixMe var node = document.querySelector("style[data-emotion=\"" + key + " " + serialized.name + "\"]"); if (cache.sheet.tags.length) { sheet.before = cache.sheet.tags[0]; } if (node !== null) { rehydrating = true; // clear the hash so this node won't be recognizable as rehydratable by other <Global/>s node.setAttribute('data-emotion', key); sheet.hydrate([node]); } sheetRef.current = [sheet, rehydrating]; return function () { sheet.flush(); }; }, [cache]); useInsertionEffectWithLayoutFallback(function () { var sheetRefCurrent = sheetRef.current; var sheet = sheetRefCurrent[0], rehydrating = sheetRefCurrent[1]; if (rehydrating) { sheetRefCurrent[1] = false; return; } if (serialized.next !== undefined) { // insert keyframes insertStyles(cache, serialized.next, true); } if (sheet.tags.length) { // if this doesn't exist then it will be null so the style element will be appended var element = sheet.tags[sheet.tags.length - 1].nextElementSibling; sheet.before = element; sheet.flush(); } cache.insert("", serialized, sheet, false); }, [cache, serialized.name]); return null; }); { Global.displayName = 'EmotionGlobal'; } function css$2() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return serializeStyles(args); } var keyframes = function keyframes() { var insertable = css$2.apply(void 0, arguments); var name = "animation-" + insertable.name; // $FlowFixMe return { name: name, styles: "@keyframes " + name + "{" + insertable.styles + "}", anim: 1, toString: function toString() { return "_EMO_" + this.name + "_" + this.styles + "_EMO_"; } }; }; var classnames = function classnames(args) { var len = args.length; var i = 0; var cls = ''; for (; i < len; i++) { var arg = args[i]; if (arg == null) continue; var toAdd = void 0; switch (typeof arg) { case 'boolean': break; case 'object': { if (Array.isArray(arg)) { toAdd = classnames(arg); } else { if (arg.styles !== undefined && arg.name !== undefined) { console.error('You have passed styles created with `css` from `@emotion/react` package to the `cx`.\n' + '`cx` is meant to compose class names (strings) so you should convert those styles to a class name by passing them to the `css` received from <ClassNames/> component.'); } toAdd = ''; for (var k in arg) { if (arg[k] && k) { toAdd && (toAdd += ' '); toAdd += k; } } } break; } default: { toAdd = arg; } } if (toAdd) { cls && (cls += ' '); cls += toAdd; } } return cls; }; function merge(registered, css, className) { var registeredStyles = []; var rawClassName = getRegisteredStyles(registered, registeredStyles, className); if (registeredStyles.length < 2) { return className; } return rawClassName + css(registeredStyles); } var Insertion = function Insertion(_ref) { var cache = _ref.cache, serializedArr = _ref.serializedArr; var rules = useInsertionEffectAlwaysWithSyncFallback(function () { var rules = ''; for (var i = 0; i < serializedArr.length; i++) { var res = insertStyles(cache, serializedArr[i], false); if (!isBrowser$1 && res !== undefined) { rules += res; } } if (!isBrowser$1) { return rules; } }); if (!isBrowser$1 && rules.length !== 0) { var _ref2; return /*#__PURE__*/React.createElement("style", (_ref2 = {}, _ref2["data-emotion"] = cache.key + " " + serializedArr.map(function (serialized) { return serialized.name; }).join(' '), _ref2.dangerouslySetInnerHTML = { __html: rules }, _ref2.nonce = cache.sheet.nonce, _ref2)); } return null; }; var ClassNames = /* #__PURE__ */withEmotionCache(function (props, cache) { var hasRendered = false; var serializedArr = []; var css = function css() { if (hasRendered && "development" !== 'production') { throw new Error('css can only be used during render'); } for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var serialized = serializeStyles(args, cache.registered); serializedArr.push(serialized); // registration has to happen here as the result of this might get consumed by `cx` registerStyles(cache, serialized, false); return cache.key + "-" + serialized.name; }; var cx = function cx() { if (hasRendered && "development" !== 'production') { throw new Error('cx can only be used during render'); } for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } return merge(cache.registered, css, classnames(args)); }; var content = { css: css, cx: cx, theme: React.useContext(ThemeContext) }; var ele = props.children(content); hasRendered = true; return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, { cache: cache, serializedArr: serializedArr }), ele); }); { ClassNames.displayName = 'EmotionClassNames'; } { var isBrowser = typeof document !== 'undefined'; // #1727, #2905 for some reason Jest and Vitest evaluate modules twice if some consuming module gets mocked var isTestEnv = typeof jest !== 'undefined' || typeof vi !== 'undefined'; if (isBrowser && !isTestEnv) { // globalThis has wide browser support - https://caniuse.com/?search=globalThis, Node.js 12 and later var globalContext = // $FlowIgnore typeof globalThis !== 'undefined' ? globalThis // eslint-disable-line no-undef : isBrowser ? window : global; var globalKey = "__EMOTION_REACT_" + pkg.version.split('.')[0] + "__"; if (globalContext[globalKey]) { console.warn('You are loading @emotion/react when it is already loaded. Running ' + 'multiple instances may cause problems. This can happen if multiple ' + 'versions are used, or if multiple builds of the same version are ' + 'used.'); } globalContext[globalKey] = true; } } function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } function rectToClientRect(rect) { return { ...rect, top: rect.y, left: rect.x, right: rect.x + rect.width, bottom: rect.y + rect.height }; } function getWindow(node) { var _node$ownerDocument; return ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window; } function getComputedStyle$1(element) { return getWindow(element).getComputedStyle(element); } function isNode(value) { return value instanceof getWindow(value).Node; } function getNodeName(node) { return isNode(node) ? (node.nodeName || '').toLowerCase() : ''; } let uaString; function getUAString() { if (uaString) { return uaString; } const uaData = navigator.userAgentData; if (uaData && Array.isArray(uaData.brands)) { uaString = uaData.brands.map(item => item.brand + "/" + item.version).join(' '); return uaString; } return navigator.userAgent; } function isHTMLElement(value) { return value instanceof getWindow(value).HTMLElement; } function isElement(value) { return value instanceof getWindow(value).Element; } function isShadowRoot(node) { // Browsers without `ShadowRoot` support. if (typeof ShadowRoot === 'undefined') { return false; } const OwnElement = getWindow(node).ShadowRoot; return node instanceof OwnElement || node instanceof ShadowRoot; } function isOverflowElement(element) { const { overflow, overflowX, overflowY, display } = getComputedStyle$1(element); return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display); } /** * Determines whether or not `.getBoundingClientRect()` is affected by visual * viewport offsets. In Safari, the `x`/`y` offsets are values relative to the * visual viewport, while in other engines, they are values relative to the * layout viewport. */ function isClientRectVisualViewportBased() { // TODO: Try to use feature detection here instead. Feature detection for // this can fail in various ways, making the userAgent check the most // reliable: // • Always-visible scrollbar or not // • Width of <html> // Is Safari. return /^((?!chrome|android).)*safari/i.test(getUAString()); } function isLastTraversableNode(node) { return ['html', 'body', '#document'].includes(getNodeName(node)); } const round = Math.round; function getCssDimensions(element) { const css = getComputedStyle$1(element); let width = parseFloat(css.width); let height = parseFloat(css.height); const hasOffset = isHTMLElement(element); const offsetWidth = hasOffset ? element.offsetWidth : width; const offsetHeight = hasOffset ? element.offsetHeight : height; const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight; if (shouldFallback) { width = offsetWidth; height = offsetHeight; } return { width, height, fallback: shouldFallback }; } function unwrapElement(element) { return !isElement(element) ? element.contextElement : element; } const FALLBACK_SCALE = { x: 1, y: 1 }; function getScale(element) { const domElement = unwrapElement(element); if (!isHTMLElement(domElement)) { return FALLBACK_SCALE; } const rect = domElement.getBoundingClientRect(); const { width, height, fallback } = getCssDimensions(domElement); let x = (fallback ? round(rect.width) : rect.width) / width; let y = (fallback ? round(rect.height) : rect.height) / height; // 0, NaN, or Infinity should always fallback to 1. if (!x || !Number.isFinite(x)) { x = 1; } if (!y || !Number.isFinite(y)) { y = 1; } return { x, y }; } function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) { var _win$visualViewport, _win$visualViewport2; if (includeScale === void 0) { includeScale = false; } if (isFixedStrategy === void 0) { isFixedStrategy = false; } const clientRect = element.getBoundingClientRect(); const domElement = unwrapElement(element); let scale = FALLBACK_SCALE; if (includeScale) { if (offsetParent) { if (isElement(offsetParent)) { scale = getScale(offsetParent); } } else { scale = getScale(element); } } const win = domElement ? getWindow(domElement) : window; const addVisualOffsets = isClientRectVisualViewportBased() && isFixedStrategy; let x = (clientRect.left + (addVisualOffsets ? ((_win$visualViewport = win.visualViewport) == null ? void 0 : _win$visualViewport.offsetLeft) || 0 : 0)) / scale.x; let y = (clientRect.top + (addVisualOffsets ? ((_win$visualViewport2 = win.visualViewport) == null ? void 0 : _win$visualViewport2.offsetTop) || 0 : 0)) / scale.y; let width = clientRect.width / scale.x; let height = clientRect.height / scale.y; if (domElement) { const win = getWindow(domElement); const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent; let currentIFrame = win.frameElement; while (currentIFrame && offsetParent && offsetWin !== win) { const iframeScale = getScale(currentIFrame); const iframeRect = currentIFrame.getBoundingClientRect(); const css = getComputedStyle(currentIFrame); iframeRect.x += (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x; iframeRect.y += (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y; x *= iframeScale.x; y *= iframeScale.y; width *= iframeScale.x; height *= iframeScale.y; x += iframeRect.x; y += iframeRect.y; currentIFrame = getWindow(currentIFrame).frameElement; } } return rectToClientRect({ width, height, x, y }); } function getDocumentElement(node) { return ((isNode(node) ? node.ownerDocument : node.document) || window.document).documentElement; } function getParentNode(node) { if (getNodeName(node) === 'html') { return node; } const result = // Step into the shadow DOM of the parent of a slotted node. node.assignedSlot || // DOM Element detected. node.parentNode || // ShadowRoot detected. isShadowRoot(node) && node.host || // Fallback. getDocumentElement(node); return isShadowRoot(result) ? result.host : result; } function getNearestOverflowAncestor(node) { const parentNode = getParentNode(node); if (isLastTraversableNode(parentNode)) { // `getParentNode` will never return a `Document` due to the fallback // check, so it's either the <html> or <body> element. return parentNode.ownerDocument.body; } if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) { return parentNode; } return getNearestOverflowAncestor(parentNode); } function getOverflowAncestors(node, list) { var _node$ownerDocument; if (list === void 0) { list = []; } const scrollableAncestor = getNearestOverflowAncestor(node); const isBody = scrollableAncestor === ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.body); const win = getWindow(scrollableAncestor); if (isBody) { return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : []); } return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor)); } /** * Automatically updates the position of the floating element when necessary. * Should only be called when the floating element is mounted on the DOM or * visible on the screen. * @returns cleanup function that should be invoked when the floating element is * removed from the DOM or hidden from the screen. * @see https://floating-ui.com/docs/autoUpdate */ function autoUpdate(reference, floating, update, options) { if (options === void 0) { options = {}; } const { ancestorScroll: _ancestorScroll = true, ancestorResize = true, elementResize = true, animationFrame = false } = options; const ancestorScroll = _ancestorScroll && !animationFrame; const ancestors = ancestorScroll || ancestorResize ? [...(isElement(reference) ? getOverflowAncestors(reference) : reference.contextElement ? getOverflowAncestors(reference.contextElement) : []), ...getOverflowAncestors(floating)] : []; ancestors.forEach(ancestor => { ancestorScroll && ancestor.addEventListener('scroll', update, { passive: true }); ancestorResize && ancestor.addEventListener('resize', update); }); let observer = null; if (elementResize) { observer = new ResizeObserver(() => { update(); }); isElement(reference) && !animationFrame && observer.observe(reference); if (!isElement(reference) && reference.contextElement && !animationFrame) { observer.observe(reference.contextElement); } observer.observe(floating); } let frameId; let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null; if (animationFrame) { frameLoop(); } function frameLoop() { const nextRefRect = getBoundingClientRect(reference); if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) { update(); } prevRefRect = nextRefRect; frameId = requestAnimationFrame(frameLoop); } update(); return () => { var _observer; ancestors.forEach(ancestor => { ancestorScroll && ancestor.removeEventListener('scroll', update); ancestorResize && ancestor.removeEventListener('resize', update); }); (_observer = observer) == null ? void 0 : _observer.disconnect(); observer = null; if (animationFrame) { cancelAnimationFrame(frameId); } }; } var index = typeof document !== 'undefined' ? React.useLayoutEffect : React.useEffect; var _excluded$4 = ["className", "clearValue", "cx", "getStyles", "getClassNames", "getValue", "hasValue", "isMulti", "isRtl", "options", "selectOption", "selectProps", "setValue", "theme"]; // ============================== // NO OP // ============================== var noop = function noop() {}; // ============================== // Class Name Prefixer // ============================== /** String representation of component state for styling with class names. Expects an array of strings OR a string/object pair: - className(['comp', 'comp-arg', 'comp-arg-2']) @returns 'react-select__comp react-select__comp-arg react-select__comp-arg-2' - className('comp', { some: true, state: false }) @returns 'react-select__comp react-select__comp--some' */ function applyPrefixToName(prefix, name) { if (!name) { return prefix; } else if (name[0] === '-') { return prefix + name; } else { return prefix + '__' + name; } } function classNames(prefix, state) { for (var _len = arguments.length, classNameList = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { classNameList[_key - 2] = arguments[_key]; } var arr = [].concat(classNameList); if (state && prefix) { for (var key in state) { if (state.hasOwnProperty(key) && state[key]) { arr.push("".concat(applyPrefixToName(prefix, key))); } } } return arr.filter(function (i) { return i; }).map(function (i) { return String(i).trim(); }).join(' '); } // ============================== // Clean Value // ============================== var cleanValue = function cleanValue(value) { if (isArray(value)) return value.filter(Boolean); if (_typeof(value) === 'object' && value !== null) return [value]; return []; }; // ============================== // Clean Common Props // ============================== var cleanCommonProps = function cleanCommonProps(props) { //className props.className; props.clearValue; props.cx; props.getStyles; props.getClassNames; props.getValue; props.hasValue; props.isMulti; props.isRtl; props.options; props.selectOption; props.selectProps; props.setValue; props.theme; var innerProps = _objectWithoutProperties(props, _excluded$4); return _objectSpread2({}, innerProps); }; // ============================== // Get Style Props // ============================== var getStyleProps = function getStyleProps(props, name, classNamesState) { var cx = props.cx, getStyles = props.getStyles, getClassNames = props.getClassNames, className = props.className; return { css: getStyles(name, props), className: cx(classNamesState !== null && classNamesState !== void 0 ? classNamesState : {}, getClassNames(name, props), className) }; }; // ============================== // Handle Input Change // ============================== function handleInputChange(inputValue, actionMeta, onInputChange) { if (onInputChange) { var _newValue = onInputChange(inputValue, actionMeta); if (typeof _newValue === 'string') return _newValue; } return inputValue; } // ============================== // Scroll Helpers // ============================== function isDocumentElement(el) { return [document.documentElement, document.body, window].indexOf(el) > -1; } // Normalized Scroll Top // ------------------------------ function normalizedHeight(el) { if (isDocumentElement(el)) { return window.innerHeight; } return el.clientHeight; } // Normalized scrollTo & scrollTop // ------------------------------ function getScrollTop(el) { if (isDocumentElement(el)) { return window.pageYOffset; } return el.scrollTop; } function scrollTo(el, top) { // with a scroll distance, we perform scroll on the element if (isDocumentElement(el)) { window.scrollTo(0, top); return; } el.scrollTop = top; } // Get Scroll Parent // ------------------------------ function getScrollParent(element) { var style = getComputedStyle(element); var excludeStaticParent = style.position === 'absolute'; var overflowRx = /(auto|scroll)/; if (style.position === 'fixed') return document.documentElement; for (var parent = element; parent = parent.parentElement;) { style = getComputedStyle(parent); if (excludeStaticParent && style.position === 'static') { continue; } if (overflowRx.test(style.overflow + style.overflowY + style.overflowX)) { return parent; } } return document.documentElement; } // Animated Scroll To // ------------------------------ /** @param t: time (elapsed) @param b: initial value @param c: amount of change @param d: duration */ function easeOutCubic(t, b, c, d) { return c * ((t = t / d - 1) * t * t + 1) + b; } function animatedScrollTo(element, to) { var duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 200; var callback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : noop; var start = getScrollTop(element); var change = to - start; var increment = 10; var currentTime = 0; function animateScroll() { currentTime += increment; var val = easeOutCubic(currentTime, start, change, duration); scrollTo(element, val); if (currentTime < duration) { window.requestAnimationFrame(animateScroll); } else { callback(element); } } animateScroll(); } // Scroll Into View // ------------------------------ function scrollIntoView(menuEl, focusedEl) { var menuRect = menuEl.getBoundingClientRect(); var focusedRect = focusedEl.getBoundingClientRect(); var overScroll = focusedEl.offsetHeight / 3; if (focusedRect.bottom + overScroll > menuRect.bottom) { scrollTo(menuEl, Math.min(focusedEl.offsetTop + focusedEl.clientHeight - menuEl.offsetHeight + overScroll, menuEl.scrollHeight)); } else if (focusedRect.top - overScroll < menuRect.top) { scrollTo(menuEl, Math.max(focusedEl.offsetTop - overScroll, 0)); } } // ============================== // Get bounding client object // ============================== // cannot get keys using array notation with DOMRect function getBoundingClientObj(element) { var rect = element.getBoundingClientRect(); return { bottom: rect.bottom, height: rect.height, left: rect.left, right: rect.right, top: rect.top, width: rect.width }; } // ============================== // Touch Capability Detector // ============================== function isTouchCapable() { try { document.createEvent('TouchEvent'); return true; } catch (e) { return false; } } // ============================== // Mobile Device Detector // ============================== function isMobileDevice() { try { return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); } catch (e) { return false; } } // ============================== // Passive Event Detector // ============================== // https://github.com/rafgraph/detect-it/blob/main/src/index.ts#L19-L36 var passiveOptionAccessed = false; var options = { get passive() { return passiveOptionAccessed = true; } }; // check for SSR var w = typeof window !== 'undefined' ? window : {}; if (w.addEventListener && w.removeEventListener) { w.addEventListener('p', noop, options); w.removeEventListener('p', noop, false); } var supportsPassiveEvents = passiveOptionAccessed; function notNullish(item) { return item != null; } function isArray(arg) { return Array.isArray(arg); } function valueTernary(isMulti, multiValue, singleValue) { return isMulti ? multiValue : singleValue; } function singleValueAsValue(singleValue) { return singleValue; } function multiValueAsValue(multiValue) { return multiValue; } var removeProps = function removeProps(propsObj) { for (var _len2 = arguments.length, properties = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { properties[_key2 - 1] = arguments[_key2]; } var propsMap = Object.entries(propsObj).filter(function (_ref) { var _ref2 = _slicedToArray(_ref, 1), key = _ref2[0]; return !properties.includes(key); }); return propsMap.reduce(function (newProps, _ref3) { var _ref4 = _slicedToArray(_ref3, 2), key = _ref4[0], val = _ref4[1]; newProps[key] = val; return newProps; }, {}); }; var _excluded$3 = ["children", "innerProps"], _excluded2$1 = ["children", "innerProps"]; function getMenuPlacement(_ref) { var preferredMaxHeight = _ref.maxHeight, menuEl = _ref.menuEl, minHeight = _ref.minHeight, preferredPlacement = _ref.placement, shouldScroll = _ref.shouldScroll, isFixedPosition = _ref.isFixedPosition, controlHeight = _ref.controlHeight; var scrollParent = getScrollParent(menuEl); var defaultState = { placement: 'bottom', maxHeight: preferredMaxHeight }; // something went wrong, return default state if (!menuEl || !menuEl.offsetParent) return defaultState; // we can't trust `scrollParent.scrollHeight` --> it may increase when // the menu is rendered var _scrollParent$getBoun = scrollParent.getBoundingClientRect(), scrollHeight = _scrollParent$getBoun.height; var _menuEl$getBoundingCl = menuEl.getBoundingClientRect(), menuBottom = _menuEl$getBoundingCl.bottom, menuHeight = _menuEl$getBoundingCl.height, menuTop = _menuEl$getBoundingCl.top; var _menuEl$offsetParent$ = menuEl.offsetParent.getBoundingClientRect(), containerTop = _menuEl$offsetParent$.top; var viewHeight = isFixedPosition ? window.innerHeight : normalizedHeight(scrollParent); var scrollTop = getScrollTop(scrollParent); var marginBottom = parseInt(getComputedStyle(menuEl).marginBottom, 10); var marginTop = parseInt(getComputedStyle(menuEl).marginTop, 10); var viewSpaceAbove = containerTop - marginTop; var viewSpaceBelow = viewHeight - menuTop; var scrollSpaceAbove = viewSpaceAbove + scrollTop; var scrollSpaceBelow = scrollHeight - scrollTop - menuTop; var scrollDown = menuBottom - viewHeight + scrollTop + marginBottom; var scrollUp = scrollTop + menuTop - marginTop; var scrollDuration = 160; switch (preferredPlacement) { case 'auto': case 'bottom': // 1: the menu will fit, do nothing if (viewSpaceBelow >= menuHeight) { return { placement: 'bottom', maxHeight: preferredMaxHeight }; } // 2: the menu will fit, if scrolled if (scrollSpaceBelow >= menuHeight && !isFixedPosition) { if (shouldScroll) { animatedScrollTo(scrollParent, scrollDown, scrollDuration); } return { placement: 'bottom', maxHeight: preferredMaxHeight }; } // 3: the menu will fit, if constrained if (!isFixedPosition && scrollSpaceBelow >= minHeight || isFixedPosition && viewSpaceBelow >= minHeight) { if (shouldScroll) { animatedScrollTo(scrollParent, scrollDown, scrollDuration); } // we want to provide as much of the menu as possible to the user, // so give them whatever is available below rather than the minHeight. var constrainedHeight = isFixedPosition ? viewSpaceBelow - marginBottom : scrollSpaceBelow - marginBottom; return { placement: 'bottom', maxHeight: constrainedHeight }; } // 4. Forked beviour when there isn't enough space below // AUTO: flip the menu, render above if (preferredPlacement === 'auto' || isFixedPosition) { // may need to be constrained after flipping var _constrainedHeight = preferredMaxHeight; var spaceAbove = isFixedPosition ? viewSpaceAbove : scrollSpaceAbove; if (spaceAbove >= minHeight) { _constrainedHeight = Math.min(spaceAbove - marginBottom - controlHeight, preferredMaxHeight); } return { placement: 'top', maxHeight: _constrainedHeight }; } // BOTTOM: allow browser to increase scrollable area and immediately set scroll if (preferredPlacement === 'bottom') { if (shouldScroll) { scrollTo(scrollParent, scrollDown); } return { placement: 'bottom', maxHeight: preferredMaxHeight }; } break; case 'top': // 1: the menu will fit, do nothing if (viewSpaceAbove >= menuHeight) { return { placement: 'top', maxHeight: preferredMaxHeight }; } // 2: the menu will fit, if scrolled if (scrollSpaceAbove >= menuHeight && !isFixedPosition) { if (shouldScroll) { animatedScrollTo(scrollParent, scrollUp, scrollDuration); } return { placement: 'top', maxHeight: preferredMaxHeight }; } // 3: the menu will fit, if constrained if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) { var _constrainedHeight2 = preferredMaxHeight; // we want to provide as much of the menu as possible to the user, // so give them whatever is available below rather than the minHeight. if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) { _constrainedHeight2 = isFixedPosition ? viewSpaceAbove - marginTop : scrollSpaceAbove - marginTop; } if (shouldScroll) { animatedScrollTo(scrollParent, scrollUp, scrollDuration); } return { placement: 'top', maxHeight: _constrainedHeight2 }; } // 4. not enough space, the browser WILL NOT increase scrollable area when // absolutely positioned element rendered above the viewport (only below). // Flip the menu, render below return { placement: 'bottom', maxHeight: preferredMaxHeight }; default: throw new Error("Invalid placement provided \"".concat(preferredPlacement, "\".")); } return defaultState; } // Menu Component // ------------------------------ function alignToControl(placement) { var placementToCSSProp = { bottom: 'top', top: 'bottom' }; return placement ? placementToCSSProp[placement] : 'bottom'; } var coercePlacement = function coercePlacement(p) { return p === 'auto' ? 'bottom' : p; }; var menuCSS = function menuCSS(_ref2, unstyled) { var _objectSpread2$1; var placement = _ref2.placement, _ref2$theme = _ref2.theme, borderRadius = _ref2$theme.borderRadius, spacing = _ref2$theme.spacing, colors = _ref2$theme.colors; return _objectSpread2((_objectSpread2$1 = { label: 'menu' }, _defineProperty(_objectSpread2$1, alignToControl(placement), '100%'), _defineProperty(_objectSpread2$1, "position", 'absolute'), _defineProperty(_objectSpread2$1, "width", '100%'), _defineProperty(_objectSpread2$1, "zIndex", 1), _objectSpread2$1), unstyled ? {} : { backgroundColor: colors.neutral0, borderRadius: borderRadius, boxShadow: '0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)', marginBottom: spacing.menuGutter, marginTop: spacing.menuGutter }); }; var PortalPlacementContext = /*#__PURE__*/React.createContext(null); // NOTE: internal only var MenuPlacer = function MenuPlacer(props) { var children = props.children, minMenuHeight = props.minMenuHeight, maxMenuHeight = props.maxMenuHeight, menuPlacement = props.menuPlacement, menuPosition = props.menuPosition, menuShouldScrollIntoView = props.menuShouldScrollIntoView, theme = props.theme; var _ref3 = React.useContext(PortalPlacementContext) || {}, setPortalPlacement = _ref3.setPortalPlacement; var ref = React.useRef(null); var _useState = React.useState(maxMenuHeight), _useState2 = _slicedToArray(_useState, 2), maxHeight = _useState2[0], setMaxHeight = _useState2[1]; var _useState3 = React.useState(null), _useState4 = _slicedToArray(_useState3, 2), placement = _useState4[0], setPlacement = _useState4[1]; var controlHeight = theme.spacing.controlHeight; index(function () { var menuEl = ref.current; if (!menuEl) return; // DO NOT scroll if position is fixed var isFixedPosition = menuPosition === 'fixed'; var shouldScroll = menuShouldScrollIntoView && !isFixedPosition; var state = getMenuPlacement({ maxHeight: maxMenuHeight, menuEl: menuEl, minHeight: minMenuHeight, placement: menuPlacement, shouldScroll: shouldScroll, isFixedPosition: isFixedPosition, controlHeight: controlHeight }); setMaxHeight(state.maxHeight); setPlacement(state.placement); setPortalPlacement === null || setPortalPlacement === void 0 ? void 0 : setPortalPlacement(state.placement); }, [maxMenuHeight, menuPlacement, menuPosition, menuShouldScrollIntoView, minMenuHeight, setPortalPlacement, controlHeight]); return children({ ref: ref, placerProps: _objectSpread2(_objectSpread2({}, props), {}, { placement: placement || coercePlacement(menuPlacement), maxHeight: maxHeight }) }); }; var Menu = function Menu(props) { var children = props.children, innerRef = props.innerRef, innerProps = props.innerProps; return jsx("div", _extends$k({}, getStyleProps(props, 'menu', { menu: true }), { ref: innerRef }, innerProps), children); }; var Menu$1 = Menu; // ============================== // Menu List // ============================== var menuListCSS = function menuListCSS(_ref4, unstyled) { var maxHeight = _ref4.maxHeight, baseUnit = _ref4.theme.spacing.baseUnit; return _objectSpread2({ maxHeight: maxHeight, overflowY: 'auto', position: 'relative', // required for offset[Height, Top] > keyboard scroll WebkitOverflowScrolling: 'touch' }, unstyled ? {} : { paddingBottom: baseUnit, paddingTop: baseUnit }); }; var MenuList = function MenuList(props) { var children = props.children, innerProps = props.innerProps, innerRef = props.innerRef, isMulti = props.isMulti; return jsx("div", _extends$k({}, getStyleProps(props, 'menuList', { 'menu-list': true, 'menu-list--is-multi': isMulti }), { ref: innerRef }, innerProps), children); }; // ============================== // Menu Notices // ============================== var noticeCSS = function noticeCSS(_ref5, unstyled) { var _ref5$theme = _ref5.theme, baseUnit = _ref5$theme.spacing.baseUnit, colors = _ref5$theme.colors; return _objectSpread2({ textAlign: 'center' }, unstyled ? {} : { color: colors.neutral40, padding: "".concat(baseUnit * 2, "px ").concat(baseUnit * 3, "px") }); }; var noOptionsMessageCSS = noticeCSS; var loadingMessageCSS = noticeCSS; var NoOptionsMessage = function NoOptionsMessage(_ref6) { var _ref6$children = _ref6.children, children = _ref6$children === void 0 ? 'No options' : _ref6$children, innerProps = _ref6.innerProps, restProps = _objectWithoutProperties(_ref6, _excluded$3); return jsx("div", _extends$k({}, getStyleProps(_objectSpread2(_objectSpread2({}, restProps), {}, { children: children, innerProps: innerProps }), 'noOptionsMessage', { 'menu-notice': true, 'menu-notice--no-options': true }), innerProps), children); }; var LoadingMessage = function LoadingMessage(_ref7) { var _ref7$children = _ref7.children, children = _ref7$children === void 0 ? 'Loading...' : _ref7$children, innerProps = _ref7.innerProps, restProps = _objectWithoutProperties(_ref7, _excluded2$1); return jsx("div", _extends$k({}, getStyleProps(_objectSpread2(_objectSpread2({}, restProps), {}, { children: children, innerProps: innerProps }), 'loadingMessage', { 'menu-notice': true, 'menu-notice--loading': true }), innerProps), children); }; // ============================== // Menu Portal // ============================== var menuPortalCSS = function menuPortalCSS(_ref8) { var rect = _ref8.rect, offset = _ref8.offset, position = _ref8.position; return { left: rect.left, position: position, top: offset, width: rect.width, zIndex: 1 }; }; var MenuPortal = function MenuPortal(props) { var appendTo = props.appendTo, children = props.children, controlElement = props.controlElement, innerProps = props.innerProps, menuPlacement = props.menuPlacement, menuPosition = props.menuPosition; var menuPortalRef = React.useRef(null); var cleanupRef = React.useRef(null); var _useState5 = React.useState(coercePlacement(menuPlacement)), _useState6 = _slicedToArray(_useState5, 2), placement = _useState6[0], setPortalPlacement = _useState6[1]; var portalPlacementContext = React.useMemo(function () { return { setPortalPlacement: setPortalPlacement }; }, []); var _useState7 = React.useState(null), _useState8 = _slicedToArray(_useState7, 2), computedPosition = _useState8[0], setComputedPosition = _useState8[1]; var updateComputedPosition = React.useCallback(function () { if (!controlElement) return; var rect = getBoundingClientObj(controlElement); var scrollDistance = menuPosition === 'fixed' ? 0 : window.pageYOffset; var offset = rect[placement] + scrollDistance; if (offset !== (computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.offset) || rect.left !== (computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.left) || rect.width !== (computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.width)) { setComputedPosition({ offset: offset, rect: rect }); } }, [controlElement, menuPosition, placement, computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.offset, computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.left, computedPosition === null || computedPosition === void 0 ? void 0 : computedPosition.rect.width]); index(function () { updateComputedPosition(); }, [updateComputedPosition]); var runAutoUpdate = React.useCallback(function () { if (typeof cleanupRef.current === 'function') { cleanupRef.current(); cleanupRef.current = null; } if (controlElement && menuPortalRef.current) { cleanupRef.current = autoUpdate(controlElement, menuPortalRef.current, updateComputedPosition, { elementResize: 'ResizeObserver' in window }); } }, [controlElement, updateComputedPosition]); index(function () { runAutoUpdate(); }, [runAutoUpdate]); var setMenuPortalElement = React.useCallback(function (menuPortalElement) { menuPortalRef.current = menuPortalElement; runAutoUpdate(); }, [runAutoUpdate]); // bail early if required elements aren't present if (!appendTo && menuPosition !== 'fixed' || !computedPosition) return null; // same wrapper element whether fixed or portalled var menuWrapper = jsx("div", _extends$k({ ref: setMenuPortalElement }, getStyleProps(_objectSpread2(_objectSpread2({}, props), {}, { offset: computedPosition.offset, position: menuPosition, rect: computedPosition.rect }), 'menuPortal', { 'menu-portal': true }), innerProps), children); return jsx(PortalPlacementContext.Provider, { value: portalPlacementContext }, appendTo ? /*#__PURE__*/ReactDOM.createPortal(menuWrapper, appendTo) : menuWrapper); }; // ============================== // Root Container // ============================== var containerCSS = function containerCSS(_ref) { var isDisabled = _ref.isDisabled, isRtl = _ref.isRtl; return { label: 'container', direction: isRtl ? 'rtl' : undefined, pointerEvents: isDisabled ? 'none' : undefined, // cancel mouse events when disabled position: 'relative' }; }; var SelectContainer = function SelectContainer(props) { var children = props.children, innerProps = props.innerProps, isDisabled = props.isDisabled, isRtl = props.isRtl; return jsx("div", _extends$k({}, getStyleProps(props, 'container', { '--is-disabled': isDisabled, '--is-rtl': isRtl }), innerProps), children); }; // ============================== // Value Container // ============================== var valueContainerCSS = function valueContainerCSS(_ref2, unstyled) { var spacing = _ref2.theme.spacing, isMulti = _ref2.isMulti, hasValue = _ref2.hasValue, controlShouldRenderValue = _ref2.selectProps.controlShouldRenderValue; return _objectSpread2({ alignItems: 'center', display: isMulti && hasValue && controlShouldRenderValue ? 'flex' : 'grid', flex: 1, flexWrap: 'wrap', WebkitOverflowScrolling: 'touch', position: 'relative', overflow: 'hidden' }, unstyled ? {} : { padding: "".concat(spacing.baseUnit / 2, "px ").concat(spacing.baseUnit * 2, "px") }); }; var ValueContainer = function ValueContainer(props) { var children = props.children, innerProps = props.innerProps, isMulti = props.isMulti, hasValue = props.hasValue; return jsx("div", _extends$k({}, getStyleProps(props, 'valueContainer', { 'value-container': true, 'value-container--is-multi': isMulti, 'value-container--has-value': hasValue }), innerProps), children); }; // ============================== // Indicator Container // ============================== var indicatorsContainerCSS = function indicatorsContainerCSS() { return { alignItems: 'center', alignSelf: 'stretch', display: 'flex', flexShrink: 0 }; }; var IndicatorsContainer = function IndicatorsContainer(props) { var children = props.children, innerProps = props.innerProps; return jsx("div", _extends$k({}, getStyleProps(props, 'indicatorsContainer', { indicators: true }), innerProps), children); }; var _templateObject; var _excluded$2 = ["size"], _excluded2 = ["innerProps", "isRtl", "size"]; function _EMOTION_STRINGIFIED_CSS_ERROR__$3() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } // ============================== // Dropdown & Clear Icons // ============================== var _ref2$2 = { name: "tj5bde-Svg", styles: "display:inline-block;fill:currentColor;line-height:1;stroke:currentColor;stroke-width:0;label:Svg;", map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGljYXRvcnMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlCSSIsImZpbGUiOiJpbmRpY2F0b3JzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4LCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbmltcG9ydCB7XG4gIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lLFxuICBDU1NPYmplY3RXaXRoTGFiZWwsXG4gIEdyb3VwQmFzZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0U3R5bGVQcm9wcyB9IGZyb20gJy4uL3V0aWxzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEljb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgU3ZnID0gKHtcbiAgc2l6ZSxcbiAgLi4ucHJvcHNcbn06IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3ZnJ10gJiB7IHNpemU6IG51bWJlciB9KSA9PiAoXG4gIDxzdmdcbiAgICBoZWlnaHQ9e3NpemV9XG4gICAgd2lkdGg9e3NpemV9XG4gICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICBmb2N1c2FibGU9XCJmYWxzZVwiXG4gICAgY3NzPXt7XG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIGZpbGw6ICdjdXJyZW50Q29sb3InLFxuICAgICAgbGluZUhlaWdodDogMSxcbiAgICAgIHN0cm9rZTogJ2N1cnJlbnRDb2xvcicsXG4gICAgICBzdHJva2VXaWR0aDogMCxcbiAgICB9fVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbik7XG5cbmV4cG9ydCB0eXBlIENyb3NzSWNvblByb3BzID0gSlNYLkludHJpbnNpY0VsZW1lbnRzWydzdmcnXSAmIHsgc2l6ZT86IG51bWJlciB9O1xuZXhwb3J0IGNvbnN0IENyb3NzSWNvbiA9IChwcm9wczogQ3Jvc3NJY29uUHJvcHMpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTE0LjM0OCAxNC44NDljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDBsLTIuNjUxLTMuMDMwLTIuNjUxIDMuMDI5Yy0wLjQ2OSAwLjQ2OS0xLjIyOSAwLjQ2OS0xLjY5NyAwLTAuNDY5LTAuNDY5LTAuNDY5LTEuMjI5IDAtMS42OTdsMi43NTgtMy4xNS0yLjc1OS0zLjE1MmMtMC40NjktMC40NjktMC40NjktMS4yMjggMC0xLjY5N3MxLjIyOC0wLjQ2OSAxLjY5NyAwbDIuNjUyIDMuMDMxIDIuNjUxLTMuMDMxYzAuNDY5LTAuNDY5IDEuMjI4LTAuNDY5IDEuNjk3IDBzMC40NjkgMS4yMjkgMCAxLjY5N2wtMi43NTggMy4xNTIgMi43NTggMy4xNWMwLjQ2OSAwLjQ2OSAwLjQ2OSAxLjIyOSAwIDEuNjk4elwiIC8+XG4gIDwvU3ZnPlxuKTtcbmV4cG9ydCB0eXBlIERvd25DaGV2cm9uUHJvcHMgPSBKU1guSW50cmluc2ljRWxlbWVudHNbJ3N2ZyddICYgeyBzaXplPzogbnVtYmVyIH07XG5leHBvcnQgY29uc3QgRG93bkNoZXZyb24gPSAocHJvcHM6IERvd25DaGV2cm9uUHJvcHMpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTQuNTE2IDcuNTQ4YzAuNDM2LTAuNDQ2IDEuMDQzLTAuNDgxIDEuNTc2IDBsMy45MDggMy43NDcgMy45MDgtMy43NDdjMC41MzMtMC40ODEgMS4xNDEtMC40NDYgMS41NzQgMCAwLjQzNiAwLjQ0NSAwLjQwOCAxLjE5NyAwIDEuNjE1LTAuNDA2IDAuNDE4LTQuNjk1IDQuNTAyLTQuNjk1IDQuNTAyLTAuMjE3IDAuMjIzLTAuNTAyIDAuMzM1LTAuNzg3IDAuMzM1cy0wLjU3LTAuMTEyLTAuNzg5LTAuMzM1YzAgMC00LjI4Ny00LjA4NC00LjY5NS00LjUwMnMtMC40MzYtMS4xNyAwLTEuNjE1elwiIC8+XG4gIDwvU3ZnPlxuKTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEJ1dHRvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8XG4gIE9wdGlvbiA9IHVua25vd24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuID0gYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPiA9IEdyb3VwQmFzZTxPcHRpb24+XG4+IGV4dGVuZHMgQ29tbW9uUHJvcHNBbmRDbGFzc05hbWU8T3B0aW9uLCBJc011bHRpLCBHcm91cD4ge1xuICAvKiogVGhlIGNoaWxkcmVuIHRvIGJlIHJlbmRlcmVkIGluc2lkZSB0aGUgaW5kaWNhdG9yLiAqL1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgLyoqIFByb3BzIHRoYXQgd2lsbCBiZSBwYXNzZWQgb24gdG8gdGhlIGNoaWxkcmVuLiAqL1xuICBpbm5lclByb3BzOiBKU1guSW50cmluc2ljRWxlbWVudHNbJ2RpdiddO1xuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpc0Rpc2FibGVkOiBib29sZWFuO1xufVxuXG5jb25zdCBiYXNlQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNGb2N1c2VkLFxuICAgIHRoZW1lOiB7XG4gICAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gICAgICBjb2xvcnMsXG4gICAgfSxcbiAgfTpcbiAgICB8IERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbiAgICB8IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4sXG4gIHVuc3R5bGVkOiBib29sZWFuXG4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdpbmRpY2F0b3JDb250YWluZXInLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIHRyYW5zaXRpb246ICdjb2xvciAxNTBtcycsXG4gIC4uLih1bnN0eWxlZFxuICAgID8ge31cbiAgICA6IHtcbiAgICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgICAgICBwYWRkaW5nOiBiYXNlVW5pdCAqIDIsXG4gICAgICAgICc6aG92ZXInOiB7XG4gICAgICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsODAgOiBjb2xvcnMubmV1dHJhbDQwLFxuICAgICAgICB9LFxuICAgICAgfSksXG59KTtcblxuZXhwb3J0IGNvbnN0IGRyb3Bkb3duSW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBEcm9wZG93bkluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2Ryb3Bkb3duSW5kaWNhdG9yJywge1xuICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICdkcm9wZG93bi1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgfSl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPERvd25DaGV2cm9uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDbGVhckluZGljYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgLyoqIFRoZSBjaGlsZHJlbiB0byBiZSByZW5kZXJlZCBpbnNpZGUgdGhlIGluZGljYXRvci4gKi9cbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNsZWFySW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBDbGVhckluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2NsZWFySW5kaWNhdG9yJywge1xuICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICdjbGVhci1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgfSl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPENyb3NzSWNvbiAvPn1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VwYXJhdG9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBJbmRpY2F0b3JTZXBhcmF0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgaW5uZXJQcm9wcz86IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3BhbiddO1xufVxuXG5leHBvcnQgY29uc3QgaW5kaWNhdG9yU2VwYXJhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNEaXNhYmxlZCxcbiAgICB0aGVtZToge1xuICAgICAgc3BhY2luZzogeyBiYXNlVW5pdCB9LFxuICAgICAgY29sb3JzLFxuICAgIH0sXG4gIH06IEluZGljYXRvclNlcGFyYXRvclByb3BzPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+LFxuICB1bnN0eWxlZDogYm9vbGVhblxuKTogQ1NTT2JqZWN0V2l0aExhYmVsID0+ICh7XG4gIGxhYmVsOiAnaW5kaWNhdG9yU2VwYXJhdG9yJyxcbiAgYWxpZ25TZWxmOiAnc3RyZXRjaCcsXG4gIHdpZHRoOiAxLFxuICAuLi4odW5zdHlsZWRcbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsMTAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgICAgICBtYXJnaW5Cb3R0b206IGJhc2VVbml0ICogMixcbiAgICAgICAgbWFyZ2luVG9wOiBiYXNlVW5pdCAqIDIsXG4gICAgICB9KSxcbn0pO1xuXG5leHBvcnQgY29uc3QgSW5kaWNhdG9yU2VwYXJhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICBwcm9wczogSW5kaWNhdG9yU2VwYXJhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICAgIHsuLi5nZXRTdHlsZVByb3BzKHByb3BzLCAnaW5kaWNhdG9yU2VwYXJhdG9yJywge1xuICAgICAgICAnaW5kaWNhdG9yLXNlcGFyYXRvcic6IHRydWUsXG4gICAgICB9KX1cbiAgICAvPlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXNgXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cbmA7XG5cbmV4cG9ydCBjb25zdCBsb2FkaW5nSW5kaWNhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNGb2N1c2VkLFxuICAgIHNpemUsXG4gICAgdGhlbWU6IHtcbiAgICAgIGNvbG9ycyxcbiAgICAgIHNwYWNpbmc6IHsgYmFzZVVuaXQgfSxcbiAgICB9LFxuICB9OiBMb2FkaW5nSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4sXG4gIHVuc3R5bGVkOiBib29sZWFuXG4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdsb2FkaW5nSW5kaWNhdG9yJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnLFxuICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICBmb250U2l6ZTogc2l6ZSxcbiAgbGluZUhlaWdodDogMSxcbiAgbWFyZ2luUmlnaHQ6IHNpemUsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAuLi4odW5zdHlsZWRcbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDYwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICAgICAgcGFkZGluZzogYmFzZVVuaXQgKiAyLFxuICAgICAgfSksXG59KTtcblxuaW50ZXJmYWNlIExvYWRpbmdEb3RQcm9wcyB7XG4gIGRlbGF5OiBudW1iZXI7XG4gIG9mZnNldDogYm9vbGVhbjtcbn1cbmNvbnN0IExvYWRpbmdEb3QgPSAoeyBkZWxheSwgb2Zmc2V0IH06IExvYWRpbmdEb3RQcm9wcykgPT4gKFxuICA8c3BhblxuICAgIGNzcz17e1xuICAgICAgYW5pbWF0aW9uOiBgJHtsb2FkaW5nRG90QW5pbWF0aW9uc30gMXMgZWFzZS1pbi1vdXQgJHtkZWxheX1tcyBpbmZpbml0ZTtgLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnY3VycmVudENvbG9yJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzFlbScsXG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIG1hcmdpbkxlZnQ6IG9mZnNldCA/ICcxZW0nIDogdW5kZWZpbmVkLFxuICAgICAgaGVpZ2h0OiAnMWVtJyxcbiAgICAgIHZlcnRpY2FsQWxpZ246ICd0b3AnLFxuICAgICAgd2lkdGg6ICcxZW0nLFxuICAgIH19XG4gIC8+XG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRpbmdJbmRpY2F0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgLyoqIFNldCBzaXplIG9mIHRoZSBjb250YWluZXIuICovXG4gIHNpemU6IG51bWJlcjtcbn1cbmV4cG9ydCBjb25zdCBMb2FkaW5nSW5kaWNhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KHtcbiAgaW5uZXJQcm9wcyxcbiAgaXNSdGwsXG4gIHNpemUgPSA0LFxuICAuLi5yZXN0UHJvcHNcbn06IExvYWRpbmdJbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5nZXRTdHlsZVByb3BzKFxuICAgICAgICB7IC4uLnJlc3RQcm9wcywgaW5uZXJQcm9wcywgaXNSdGwsIHNpemUgfSxcbiAgICAgICAgJ2xvYWRpbmdJbmRpY2F0b3InLFxuICAgICAgICB7XG4gICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICAgICAgICdsb2FkaW5nLWluZGljYXRvcic6IHRydWUsXG4gICAgICAgIH1cbiAgICAgICl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICA8TG9hZGluZ0RvdCBkZWxheT17MH0gb2Zmc2V0PXtpc1J0bH0gLz5cbiAgICAgIDxMb2FkaW5nRG90IGRlbGF5PXsxNjB9IG9mZnNldCAvPlxuICAgICAgPExvYWRpbmdEb3QgZGVsYXk9ezMyMH0gb2Zmc2V0PXshaXNSdGx9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl19 */", toString: _EMOTION_STRINGIFIED_CSS_ERROR__$3 }; var Svg = function Svg(_ref) { var size = _ref.size, props = _objectWithoutProperties(_ref, _excluded$2); return jsx("svg", _extends$k({ height: size, width: size, viewBox: "0 0 20 20", "aria-hidden": "true", focusable: "false", css: _ref2$2 }, props)); }; var CrossIcon = function CrossIcon(props) { return jsx(Svg, _extends$k({ size: 20 }, props), jsx("path", { d: "M14.348 14.849c-0.469 0.469-1.229 0.469-1.697 0l-2.651-3.030-2.651 3.029c-0.469 0.469-1.229 0.469-1.697 0-0.469-0.469-0.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-0.469-0.469-0.469-1.228 0-1.697s1.228-0.469 1.697 0l2.652 3.031 2.651-3.031c0.469-0.469 1.228-0.469 1.697 0s0.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c0.469 0.469 0.469 1.229 0 1.698z" })); }; var DownChevron = function DownChevron(props) { return jsx(Svg, _extends$k({ size: 20 }, props), jsx("path", { d: "M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z" })); }; // ============================== // Dropdown & Clear Buttons // ============================== var baseCSS = function baseCSS(_ref3, unstyled) { var isFocused = _ref3.isFocused, _ref3$theme = _ref3.theme, baseUnit = _ref3$theme.spacing.baseUnit, colors = _ref3$theme.colors; return _objectSpread2({ label: 'indicatorContainer', display: 'flex', transition: 'color 150ms' }, unstyled ? {} : { color: isFocused ? colors.neutral60 : colors.neutral20, padding: baseUnit * 2, ':hover': { color: isFocused ? colors.neutral80 : colors.neutral40 } }); }; var dropdownIndicatorCSS = baseCSS; var DropdownIndicator = function DropdownIndicator(props) { var children = props.children, innerProps = props.innerProps; return jsx("div", _extends$k({}, getStyleProps(props, 'dropdownIndicator', { indicator: true, 'dropdown-indicator': true }), innerProps), children || jsx(DownChevron, null)); }; var clearIndicatorCSS = baseCSS; var ClearIndicator = function ClearIndicator(props) { var children = props.children, innerProps = props.innerProps; return jsx("div", _extends$k({}, getStyleProps(props, 'clearIndicator', { indicator: true, 'clear-indicator': true }), innerProps), children || jsx(CrossIcon, null)); }; // ============================== // Separator // ============================== var indicatorSeparatorCSS = function indicatorSeparatorCSS(_ref4, unstyled) { var isDisabled = _ref4.isDisabled, _ref4$theme = _ref4.theme, baseUnit = _ref4$theme.spacing.baseUnit, colors = _ref4$theme.colors; return _objectSpread2({ label: 'indicatorSeparator', alignSelf: 'stretch', width: 1 }, unstyled ? {} : { backgroundColor: isDisabled ? colors.neutral10 : colors.neutral20, marginBottom: baseUnit * 2, marginTop: baseUnit * 2 }); }; var IndicatorSeparator = function IndicatorSeparator(props) { var innerProps = props.innerProps; return jsx("span", _extends$k({}, innerProps, getStyleProps(props, 'indicatorSeparator', { 'indicator-separator': true }))); }; // ============================== // Loading // ============================== var loadingDotAnimations = keyframes(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n 0%, 80%, 100% { opacity: 0; }\n 40% { opacity: 1; }\n"]))); var loadingIndicatorCSS = function loadingIndicatorCSS(_ref5, unstyled) { var isFocused = _ref5.isFocused, size = _ref5.size, _ref5$theme = _ref5.theme, colors = _ref5$theme.colors, baseUnit = _ref5$theme.spacing.baseUnit; return _objectSpread2({ label: 'loadingIndicator', display: 'flex', transition: 'color 150ms', alignSelf: 'center', fontSize: size, lineHeight: 1, marginRight: size, textAlign: 'center', verticalAlign: 'middle' }, unstyled ? {} : { color: isFocused ? colors.neutral60 : colors.neutral20, padding: baseUnit * 2 }); }; var LoadingDot = function LoadingDot(_ref6) { var delay = _ref6.delay, offset = _ref6.offset; return jsx("span", { css: /*#__PURE__*/css$2({ animation: "".concat(loadingDotAnimations, " 1s ease-in-out ").concat(delay, "ms infinite;"), backgroundColor: 'currentColor', borderRadius: '1em', display: 'inline-block', marginLeft: offset ? '1em' : undefined, height: '1em', verticalAlign: 'top', width: '1em' }, ";label:LoadingDot;", "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGljYXRvcnMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1RSSIsImZpbGUiOiJpbmRpY2F0b3JzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4LCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbmltcG9ydCB7XG4gIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lLFxuICBDU1NPYmplY3RXaXRoTGFiZWwsXG4gIEdyb3VwQmFzZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0U3R5bGVQcm9wcyB9IGZyb20gJy4uL3V0aWxzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEljb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgU3ZnID0gKHtcbiAgc2l6ZSxcbiAgLi4ucHJvcHNcbn06IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3ZnJ10gJiB7IHNpemU6IG51bWJlciB9KSA9PiAoXG4gIDxzdmdcbiAgICBoZWlnaHQ9e3NpemV9XG4gICAgd2lkdGg9e3NpemV9XG4gICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICBmb2N1c2FibGU9XCJmYWxzZVwiXG4gICAgY3NzPXt7XG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIGZpbGw6ICdjdXJyZW50Q29sb3InLFxuICAgICAgbGluZUhlaWdodDogMSxcbiAgICAgIHN0cm9rZTogJ2N1cnJlbnRDb2xvcicsXG4gICAgICBzdHJva2VXaWR0aDogMCxcbiAgICB9fVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbik7XG5cbmV4cG9ydCB0eXBlIENyb3NzSWNvblByb3BzID0gSlNYLkludHJpbnNpY0VsZW1lbnRzWydzdmcnXSAmIHsgc2l6ZT86IG51bWJlciB9O1xuZXhwb3J0IGNvbnN0IENyb3NzSWNvbiA9IChwcm9wczogQ3Jvc3NJY29uUHJvcHMpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTE0LjM0OCAxNC44NDljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDBsLTIuNjUxLTMuMDMwLTIuNjUxIDMuMDI5Yy0wLjQ2OSAwLjQ2OS0xLjIyOSAwLjQ2OS0xLjY5NyAwLTAuNDY5LTAuNDY5LTAuNDY5LTEuMjI5IDAtMS42OTdsMi43NTgtMy4xNS0yLjc1OS0zLjE1MmMtMC40NjktMC40NjktMC40NjktMS4yMjggMC0xLjY5N3MxLjIyOC0wLjQ2OSAxLjY5NyAwbDIuNjUyIDMuMDMxIDIuNjUxLTMuMDMxYzAuNDY5LTAuNDY5IDEuMjI4LTAuNDY5IDEuNjk3IDBzMC40NjkgMS4yMjkgMCAxLjY5N2wtMi43NTggMy4xNTIgMi43NTggMy4xNWMwLjQ2OSAwLjQ2OSAwLjQ2OSAxLjIyOSAwIDEuNjk4elwiIC8+XG4gIDwvU3ZnPlxuKTtcbmV4cG9ydCB0eXBlIERvd25DaGV2cm9uUHJvcHMgPSBKU1guSW50cmluc2ljRWxlbWVudHNbJ3N2ZyddICYgeyBzaXplPzogbnVtYmVyIH07XG5leHBvcnQgY29uc3QgRG93bkNoZXZyb24gPSAocHJvcHM6IERvd25DaGV2cm9uUHJvcHMpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTQuNTE2IDcuNTQ4YzAuNDM2LTAuNDQ2IDEuMDQzLTAuNDgxIDEuNTc2IDBsMy45MDggMy43NDcgMy45MDgtMy43NDdjMC41MzMtMC40ODEgMS4xNDEtMC40NDYgMS41NzQgMCAwLjQzNiAwLjQ0NSAwLjQwOCAxLjE5NyAwIDEuNjE1LTAuNDA2IDAuNDE4LTQuNjk1IDQuNTAyLTQuNjk1IDQuNTAyLTAuMjE3IDAuMjIzLTAuNTAyIDAuMzM1LTAuNzg3IDAuMzM1cy0wLjU3LTAuMTEyLTAuNzg5LTAuMzM1YzAgMC00LjI4Ny00LjA4NC00LjY5NS00LjUwMnMtMC40MzYtMS4xNyAwLTEuNjE1elwiIC8+XG4gIDwvU3ZnPlxuKTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEJ1dHRvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8XG4gIE9wdGlvbiA9IHVua25vd24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuID0gYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPiA9IEdyb3VwQmFzZTxPcHRpb24+XG4+IGV4dGVuZHMgQ29tbW9uUHJvcHNBbmRDbGFzc05hbWU8T3B0aW9uLCBJc011bHRpLCBHcm91cD4ge1xuICAvKiogVGhlIGNoaWxkcmVuIHRvIGJlIHJlbmRlcmVkIGluc2lkZSB0aGUgaW5kaWNhdG9yLiAqL1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgLyoqIFByb3BzIHRoYXQgd2lsbCBiZSBwYXNzZWQgb24gdG8gdGhlIGNoaWxkcmVuLiAqL1xuICBpbm5lclByb3BzOiBKU1guSW50cmluc2ljRWxlbWVudHNbJ2RpdiddO1xuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpc0Rpc2FibGVkOiBib29sZWFuO1xufVxuXG5jb25zdCBiYXNlQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNGb2N1c2VkLFxuICAgIHRoZW1lOiB7XG4gICAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gICAgICBjb2xvcnMsXG4gICAgfSxcbiAgfTpcbiAgICB8IERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbiAgICB8IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4sXG4gIHVuc3R5bGVkOiBib29sZWFuXG4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdpbmRpY2F0b3JDb250YWluZXInLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIHRyYW5zaXRpb246ICdjb2xvciAxNTBtcycsXG4gIC4uLih1bnN0eWxlZFxuICAgID8ge31cbiAgICA6IHtcbiAgICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgICAgICBwYWRkaW5nOiBiYXNlVW5pdCAqIDIsXG4gICAgICAgICc6aG92ZXInOiB7XG4gICAgICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsODAgOiBjb2xvcnMubmV1dHJhbDQwLFxuICAgICAgICB9LFxuICAgICAgfSksXG59KTtcblxuZXhwb3J0IGNvbnN0IGRyb3Bkb3duSW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBEcm9wZG93bkluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IERyb3Bkb3duSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2Ryb3Bkb3duSW5kaWNhdG9yJywge1xuICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICdkcm9wZG93bi1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgfSl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPERvd25DaGV2cm9uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDbGVhckluZGljYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgLyoqIFRoZSBjaGlsZHJlbiB0byBiZSByZW5kZXJlZCBpbnNpZGUgdGhlIGluZGljYXRvci4gKi9cbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNsZWFySW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBDbGVhckluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2NsZWFySW5kaWNhdG9yJywge1xuICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICdjbGVhci1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgfSl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPENyb3NzSWNvbiAvPn1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VwYXJhdG9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBJbmRpY2F0b3JTZXBhcmF0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgaW5uZXJQcm9wcz86IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3BhbiddO1xufVxuXG5leHBvcnQgY29uc3QgaW5kaWNhdG9yU2VwYXJhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNEaXNhYmxlZCxcbiAgICB0aGVtZToge1xuICAgICAgc3BhY2luZzogeyBiYXNlVW5pdCB9LFxuICAgICAgY29sb3JzLFxuICAgIH0sXG4gIH06IEluZGljYXRvclNlcGFyYXRvclByb3BzPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+LFxuICB1bnN0eWxlZDogYm9vbGVhblxuKTogQ1NTT2JqZWN0V2l0aExhYmVsID0+ICh7XG4gIGxhYmVsOiAnaW5kaWNhdG9yU2VwYXJhdG9yJyxcbiAgYWxpZ25TZWxmOiAnc3RyZXRjaCcsXG4gIHdpZHRoOiAxLFxuICAuLi4odW5zdHlsZWRcbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsMTAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgICAgICBtYXJnaW5Cb3R0b206IGJhc2VVbml0ICogMixcbiAgICAgICAgbWFyZ2luVG9wOiBiYXNlVW5pdCAqIDIsXG4gICAgICB9KSxcbn0pO1xuXG5leHBvcnQgY29uc3QgSW5kaWNhdG9yU2VwYXJhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICBwcm9wczogSW5kaWNhdG9yU2VwYXJhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICAgIHsuLi5nZXRTdHlsZVByb3BzKHByb3BzLCAnaW5kaWNhdG9yU2VwYXJhdG9yJywge1xuICAgICAgICAnaW5kaWNhdG9yLXNlcGFyYXRvcic6IHRydWUsXG4gICAgICB9KX1cbiAgICAvPlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXNgXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cbmA7XG5cbmV4cG9ydCBjb25zdCBsb2FkaW5nSW5kaWNhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICB7XG4gICAgaXNGb2N1c2VkLFxuICAgIHNpemUsXG4gICAgdGhlbWU6IHtcbiAgICAgIGNvbG9ycyxcbiAgICAgIHNwYWNpbmc6IHsgYmFzZVVuaXQgfSxcbiAgICB9LFxuICB9OiBMb2FkaW5nSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4sXG4gIHVuc3R5bGVkOiBib29sZWFuXG4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdsb2FkaW5nSW5kaWNhdG9yJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnLFxuICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICBmb250U2l6ZTogc2l6ZSxcbiAgbGluZUhlaWdodDogMSxcbiAgbWFyZ2luUmlnaHQ6IHNpemUsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAuLi4odW5zdHlsZWRcbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDYwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICAgICAgcGFkZGluZzogYmFzZVVuaXQgKiAyLFxuICAgICAgfSksXG59KTtcblxuaW50ZXJmYWNlIExvYWRpbmdEb3RQcm9wcyB7XG4gIGRlbGF5OiBudW1iZXI7XG4gIG9mZnNldDogYm9vbGVhbjtcbn1cbmNvbnN0IExvYWRpbmdEb3QgPSAoeyBkZWxheSwgb2Zmc2V0IH06IExvYWRpbmdEb3RQcm9wcykgPT4gKFxuICA8c3BhblxuICAgIGNzcz17e1xuICAgICAgYW5pbWF0aW9uOiBgJHtsb2FkaW5nRG90QW5pbWF0aW9uc30gMXMgZWFzZS1pbi1vdXQgJHtkZWxheX1tcyBpbmZpbml0ZTtgLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnY3VycmVudENvbG9yJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzFlbScsXG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIG1hcmdpbkxlZnQ6IG9mZnNldCA/ICcxZW0nIDogdW5kZWZpbmVkLFxuICAgICAgaGVpZ2h0OiAnMWVtJyxcbiAgICAgIHZlcnRpY2FsQWxpZ246ICd0b3AnLFxuICAgICAgd2lkdGg6ICcxZW0nLFxuICAgIH19XG4gIC8+XG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRpbmdJbmRpY2F0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgLyoqIFNldCBzaXplIG9mIHRoZSBjb250YWluZXIuICovXG4gIHNpemU6IG51bWJlcjtcbn1cbmV4cG9ydCBjb25zdCBMb2FkaW5nSW5kaWNhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KHtcbiAgaW5uZXJQcm9wcyxcbiAgaXNSdGwsXG4gIHNpemUgPSA0LFxuICAuLi5yZXN0UHJvcHNcbn06IExvYWRpbmdJbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5nZXRTdHlsZVByb3BzKFxuICAgICAgICB7IC4uLnJlc3RQcm9wcywgaW5uZXJQcm9wcywgaXNSdGwsIHNpemUgfSxcbiAgICAgICAgJ2xvYWRpbmdJbmRpY2F0b3InLFxuICAgICAgICB7XG4gICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICAgICAgICdsb2FkaW5nLWluZGljYXRvcic6IHRydWUsXG4gICAgICAgIH1cbiAgICAgICl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICA8TG9hZGluZ0RvdCBkZWxheT17MH0gb2Zmc2V0PXtpc1J0bH0gLz5cbiAgICAgIDxMb2FkaW5nRG90IGRlbGF5PXsxNjB9IG9mZnNldCAvPlxuICAgICAgPExvYWRpbmdEb3QgZGVsYXk9ezMyMH0gb2Zmc2V0PXshaXNSdGx9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl19 */") }); }; var LoadingIndicator = function LoadingIndicator(_ref7) { var innerProps = _ref7.innerProps, isRtl = _ref7.isRtl, _ref7$size = _ref7.size, size = _ref7$size === void 0 ? 4 : _ref7$size, restProps = _objectWithoutProperties(_ref7, _excluded2); return jsx("div", _extends$k({}, getStyleProps(_objectSpread2(_objectSpread2({}, restProps), {}, { innerProps: innerProps, isRtl: isRtl, size: size }), 'loadingIndicator', { indicator: true, 'loading-indicator': true }), innerProps), jsx(LoadingDot, { delay: 0, offset: isRtl }), jsx(LoadingDot, { delay: 160, offset: true }), jsx(LoadingDot, { delay: 320, offset: !isRtl })); }; var css$1 = function css(_ref, unstyled) { var isDisabled = _ref.isDisabled, isFocused = _ref.isFocused, _ref$theme = _ref.theme, colors = _ref$theme.colors, borderRadius = _ref$theme.borderRadius, spacing = _ref$theme.spacing; return _objectSpread2({ label: 'control', alignItems: 'center', cursor: 'default', display: 'flex', flexWrap: 'wrap', justifyContent: 'space-between', minHeight: spacing.controlHeight, outline: '0 !important', position: 'relative', transition: 'all 100ms' }, unstyled ? {} : { backgroundColor: isDisabled ? colors.neutral5 : colors.neutral0, borderColor: isDisabled ? colors.neutral10 : isFocused ? colors.primary : colors.neutral20, borderRadius: borderRadius, borderStyle: 'solid', borderWidth: 1, boxShadow: isFocused ? "0 0 0 1px ".concat(colors.primary) : undefined, '&:hover': { borderColor: isFocused ? colors.primary : colors.neutral30 } }); }; var Control = function Control(props) { var children = props.children, isDisabled = props.isDisabled, isFocused = props.isFocused, innerRef = props.innerRef, innerProps = props.innerProps, menuIsOpen = props.menuIsOpen; return jsx("div", _extends$k({ ref: innerRef }, getStyleProps(props, 'control', { control: true, 'control--is-disabled': isDisabled, 'control--is-focused': isFocused, 'control--menu-is-open': menuIsOpen }), innerProps, { "aria-disabled": isDisabled || undefined }), children); }; var Control$1 = Control; var _excluded$1$1 = ["data"]; var groupCSS = function groupCSS(_ref, unstyled) { var spacing = _ref.theme.spacing; return unstyled ? {} : { paddingBottom: spacing.baseUnit * 2, paddingTop: spacing.baseUnit * 2 }; }; var Group = function Group(props) { var children = props.children, cx = props.cx, getStyles = props.getStyles, getClassNames = props.getClassNames, Heading = props.Heading, headingProps = props.headingProps, innerProps = props.innerProps, label = props.label, theme = props.theme, selectProps = props.selectProps; return jsx("div", _extends$k({}, getStyleProps(props, 'group', { group: true }), innerProps), jsx(Heading, _extends$k({}, headingProps, { selectProps: selectProps, theme: theme, getStyles: getStyles, getClassNames: getClassNames, cx: cx }), label), jsx("div", null, children)); }; var groupHeadingCSS = function groupHeadingCSS(_ref2, unstyled) { var _ref2$theme = _ref2.theme, colors = _ref2$theme.colors, spacing = _ref2$theme.spacing; return _objectSpread2({ label: 'group', cursor: 'default', display: 'block' }, unstyled ? {} : { color: colors.neutral40, fontSize: '75%', fontWeight: 500, marginBottom: '0.25em', paddingLeft: spacing.baseUnit * 3, paddingRight: spacing.baseUnit * 3, textTransform: 'uppercase' }); }; var GroupHeading = function GroupHeading(props) { var _cleanCommonProps = cleanCommonProps(props); _cleanCommonProps.data; var innerProps = _objectWithoutProperties(_cleanCommonProps, _excluded$1$1); return jsx("div", _extends$k({}, getStyleProps(props, 'groupHeading', { 'group-heading': true }), innerProps)); }; var Group$1 = Group; var _excluded$5 = ["innerRef", "isDisabled", "isHidden", "inputClassName"]; var inputCSS = function inputCSS(_ref, unstyled) { var isDisabled = _ref.isDisabled, value = _ref.value, _ref$theme = _ref.theme, spacing = _ref$theme.spacing, colors = _ref$theme.colors; return _objectSpread2(_objectSpread2({ visibility: isDisabled ? 'hidden' : 'visible', // force css to recompute when value change due to @emotion bug. // We can remove it whenever the bug is fixed. transform: value ? 'translateZ(0)' : '' }, containerStyle), unstyled ? {} : { margin: spacing.baseUnit / 2, paddingBottom: spacing.baseUnit / 2, paddingTop: spacing.baseUnit / 2, color: colors.neutral80 }); }; var spacingStyle = { gridArea: '1 / 2', font: 'inherit', minWidth: '2px', border: 0, margin: 0, outline: 0, padding: 0 }; var containerStyle = { flex: '1 1 auto', display: 'inline-grid', gridArea: '1 / 1 / 2 / 3', gridTemplateColumns: '0 min-content', '&:after': _objectSpread2({ content: 'attr(data-value) " "', visibility: 'hidden', whiteSpace: 'pre' }, spacingStyle) }; var inputStyle = function inputStyle(isHidden) { return _objectSpread2({ label: 'input', color: 'inherit', background: 0, opacity: isHidden ? 0 : 1, width: '100%' }, spacingStyle); }; var Input = function Input(props) { var cx = props.cx, value = props.value; var _cleanCommonProps = cleanCommonProps(props), innerRef = _cleanCommonProps.innerRef, isDisabled = _cleanCommonProps.isDisabled, isHidden = _cleanCommonProps.isHidden, inputClassName = _cleanCommonProps.inputClassName, innerProps = _objectWithoutProperties(_cleanCommonProps, _excluded$5); return jsx("div", _extends$k({}, getStyleProps(props, 'input', { 'input-container': true }), { "data-value": value || '' }), jsx("input", _extends$k({ className: cx({ input: true }, inputClassName), ref: innerRef, style: inputStyle(isHidden), disabled: isDisabled }, innerProps))); }; var Input$1 = Input; var multiValueCSS = function multiValueCSS(_ref, unstyled) { var _ref$theme = _ref.theme, spacing = _ref$theme.spacing, borderRadius = _ref$theme.borderRadius, colors = _ref$theme.colors; return _objectSpread2({ label: 'multiValue', display: 'flex', minWidth: 0 }, unstyled ? {} : { backgroundColor: colors.neutral10, borderRadius: borderRadius / 2, margin: spacing.baseUnit / 2 }); }; var multiValueLabelCSS = function multiValueLabelCSS(_ref2, unstyled) { var _ref2$theme = _ref2.theme, borderRadius = _ref2$theme.borderRadius, colors = _ref2$theme.colors, cropWithEllipsis = _ref2.cropWithEllipsis; return _objectSpread2({ overflow: 'hidden', textOverflow: cropWithEllipsis || cropWithEllipsis === undefined ? 'ellipsis' : undefined, whiteSpace: 'nowrap' }, unstyled ? {} : { borderRadius: borderRadius / 2, color: colors.neutral80, fontSize: '85%', padding: 3, paddingLeft: 6 }); }; var multiValueRemoveCSS = function multiValueRemoveCSS(_ref3, unstyled) { var _ref3$theme = _ref3.theme, spacing = _ref3$theme.spacing, borderRadius = _ref3$theme.borderRadius, colors = _ref3$theme.colors, isFocused = _ref3.isFocused; return _objectSpread2({ alignItems: 'center', display: 'flex' }, unstyled ? {} : { borderRadius: borderRadius / 2, backgroundColor: isFocused ? colors.dangerLight : undefined, paddingLeft: spacing.baseUnit, paddingRight: spacing.baseUnit, ':hover': { backgroundColor: colors.dangerLight, color: colors.danger } }); }; var MultiValueGeneric = function MultiValueGeneric(_ref4) { var children = _ref4.children, innerProps = _ref4.innerProps; return jsx("div", innerProps, children); }; var MultiValueContainer = MultiValueGeneric; var MultiValueLabel = MultiValueGeneric; function MultiValueRemove(_ref5) { var children = _ref5.children, innerProps = _ref5.innerProps; return jsx("div", _extends$k({ role: "button" }, innerProps), children || jsx(CrossIcon, { size: 14 })); } var MultiValue = function MultiValue(props) { var children = props.children, components = props.components, data = props.data, innerProps = props.innerProps, isDisabled = props.isDisabled, removeProps = props.removeProps, selectProps = props.selectProps; var Container = components.Container, Label = components.Label, Remove = components.Remove; return jsx(Container, { data: data, innerProps: _objectSpread2(_objectSpread2({}, getStyleProps(props, 'multiValue', { 'multi-value': true, 'multi-value--is-disabled': isDisabled })), innerProps), selectProps: selectProps }, jsx(Label, { data: data, innerProps: _objectSpread2({}, getStyleProps(props, 'multiValueLabel', { 'multi-value__label': true })), selectProps: selectProps }, children), jsx(Remove, { data: data, innerProps: _objectSpread2(_objectSpread2({}, getStyleProps(props, 'multiValueRemove', { 'multi-value__remove': true })), {}, { 'aria-label': "Remove ".concat(children || 'option') }, removeProps), selectProps: selectProps })); }; var MultiValue$1 = MultiValue; var optionCSS = function optionCSS(_ref, unstyled) { var isDisabled = _ref.isDisabled, isFocused = _ref.isFocused, isSelected = _ref.isSelected, _ref$theme = _ref.theme, spacing = _ref$theme.spacing, colors = _ref$theme.colors; return _objectSpread2({ label: 'option', cursor: 'default', display: 'block', fontSize: 'inherit', width: '100%', userSelect: 'none', WebkitTapHighlightColor: 'rgba(0, 0, 0, 0)' }, unstyled ? {} : { backgroundColor: isSelected ? colors.primary : isFocused ? colors.primary25 : 'transparent', color: isDisabled ? colors.neutral20 : isSelected ? colors.neutral0 : 'inherit', padding: "".concat(spacing.baseUnit * 2, "px ").concat(spacing.baseUnit * 3, "px"), // provide some affordance on touch devices ':active': { backgroundColor: !isDisabled ? isSelected ? colors.primary : colors.primary50 : undefined } }); }; var Option = function Option(props) { var children = props.children, isDisabled = props.isDisabled, isFocused = props.isFocused, isSelected = props.isSelected, innerRef = props.innerRef, innerProps = props.innerProps; return jsx("div", _extends$k({}, getStyleProps(props, 'option', { option: true, 'option--is-disabled': isDisabled, 'option--is-focused': isFocused, 'option--is-selected': isSelected }), { ref: innerRef, "aria-disabled": isDisabled }, innerProps), children); }; var Option$1 = Option; var placeholderCSS = function placeholderCSS(_ref, unstyled) { var _ref$theme = _ref.theme, spacing = _ref$theme.spacing, colors = _ref$theme.colors; return _objectSpread2({ label: 'placeholder', gridArea: '1 / 1 / 2 / 3' }, unstyled ? {} : { color: colors.neutral50, marginLeft: spacing.baseUnit / 2, marginRight: spacing.baseUnit / 2 }); }; var Placeholder = function Placeholder(props) { var children = props.children, innerProps = props.innerProps; return jsx("div", _extends$k({}, getStyleProps(props, 'placeholder', { placeholder: true }), innerProps), children); }; var Placeholder$1 = Placeholder; var css = function css(_ref, unstyled) { var isDisabled = _ref.isDisabled, _ref$theme = _ref.theme, spacing = _ref$theme.spacing, colors = _ref$theme.colors; return _objectSpread2({ label: 'singleValue', gridArea: '1 / 1 / 2 / 3', maxWidth: '100%', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }, unstyled ? {} : { color: isDisabled ? colors.neutral40 : colors.neutral80, marginLeft: spacing.baseUnit / 2, marginRight: spacing.baseUnit / 2 }); }; var SingleValue = function SingleValue(props) { var children = props.children, isDisabled = props.isDisabled, innerProps = props.innerProps; return jsx("div", _extends$k({}, getStyleProps(props, 'singleValue', { 'single-value': true, 'single-value--is-disabled': isDisabled }), innerProps), children); }; var SingleValue$1 = SingleValue; var components = { ClearIndicator: ClearIndicator, Control: Control$1, DropdownIndicator: DropdownIndicator, DownChevron: DownChevron, CrossIcon: CrossIcon, Group: Group$1, GroupHeading: GroupHeading, IndicatorsContainer: IndicatorsContainer, IndicatorSeparator: IndicatorSeparator, Input: Input$1, LoadingIndicator: LoadingIndicator, Menu: Menu$1, MenuList: MenuList, MenuPortal: MenuPortal, LoadingMessage: LoadingMessage, NoOptionsMessage: NoOptionsMessage, MultiValue: MultiValue$1, MultiValueContainer: MultiValueContainer, MultiValueLabel: MultiValueLabel, MultiValueRemove: MultiValueRemove, Option: Option$1, Placeholder: Placeholder$1, SelectContainer: SelectContainer, SingleValue: SingleValue$1, ValueContainer: ValueContainer }; var defaultComponents = function defaultComponents(props) { return _objectSpread2(_objectSpread2({}, components), props.components); }; var safeIsNaN = Number.isNaN || function ponyfill(value) { return typeof value === 'number' && value !== value; }; function isEqual(first, second) { if (first === second) { return true; } if (safeIsNaN(first) && safeIsNaN(second)) { return true; } return false; } function areInputsEqual(newInputs, lastInputs) { if (newInputs.length !== lastInputs.length) { return false; } for (var i = 0; i < newInputs.length; i++) { if (!isEqual(newInputs[i], lastInputs[i])) { return false; } } return true; } function memoizeOne(resultFn, isEqual) { if (isEqual === void 0) { isEqual = areInputsEqual; } var cache = null; function memoized() { var newArgs = []; for (var _i = 0; _i < arguments.length; _i++) { newArgs[_i] = arguments[_i]; } if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) { return cache.lastResult; } var lastResult = resultFn.apply(this, newArgs); cache = { lastResult: lastResult, lastArgs: newArgs, lastThis: this }; return lastResult; } memoized.clear = function clear() { cache = null; }; return memoized; } function _EMOTION_STRINGIFIED_CSS_ERROR__$2() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } // Assistive text to describe visual elements. Hidden for sighted users. var _ref = { name: "1f43avz-a11yText-A11yText", styles: "label:a11yText;z-index:9999;border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;width:1px;position:absolute;overflow:hidden;padding:0;white-space:nowrap;label:A11yText;", map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkExMXlUZXh0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNSSIsImZpbGUiOiJBMTF5VGV4dC50c3giLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGpzeCBqc3ggKi9cbmltcG9ydCB7IGpzeCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcblxuLy8gQXNzaXN0aXZlIHRleHQgdG8gZGVzY3JpYmUgdmlzdWFsIGVsZW1lbnRzLiBIaWRkZW4gZm9yIHNpZ2h0ZWQgdXNlcnMuXG5jb25zdCBBMTF5VGV4dCA9IChwcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydzcGFuJ10pID0+IChcbiAgPHNwYW5cbiAgICBjc3M9e3tcbiAgICAgIGxhYmVsOiAnYTExeVRleHQnLFxuICAgICAgekluZGV4OiA5OTk5LFxuICAgICAgYm9yZGVyOiAwLFxuICAgICAgY2xpcDogJ3JlY3QoMXB4LCAxcHgsIDFweCwgMXB4KScsXG4gICAgICBoZWlnaHQ6IDEsXG4gICAgICB3aWR0aDogMSxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgcGFkZGluZzogMCxcbiAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIH19XG4gICAgey4uLnByb3BzfVxuICAvPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQTExeVRleHQ7XG4iXX0= */", toString: _EMOTION_STRINGIFIED_CSS_ERROR__$2 }; var A11yText = function A11yText(props) { return jsx("span", _extends$k({ css: _ref }, props)); }; var A11yText$1 = A11yText; var defaultAriaLiveMessages = { guidance: function guidance(props) { var isSearchable = props.isSearchable, isMulti = props.isMulti, tabSelectsValue = props.tabSelectsValue, context = props.context, isInitialFocus = props.isInitialFocus; switch (context) { case 'menu': return "Use Up and Down to choose options, press Enter to select the currently focused option, press Escape to exit the menu".concat(tabSelectsValue ? ', press Tab to select the option and exit the menu' : '', "."); case 'input': return isInitialFocus ? "".concat(props['aria-label'] || 'Select', " is focused ").concat(isSearchable ? ',type to refine list' : '', ", press Down to open the menu, ").concat(isMulti ? ' press left to focus selected values' : '') : ''; case 'value': return 'Use left and right to toggle between focused values, press Backspace to remove the currently focused value'; default: return ''; } }, onChange: function onChange(props) { var action = props.action, _props$label = props.label, label = _props$label === void 0 ? '' : _props$label, labels = props.labels, isDisabled = props.isDisabled; switch (action) { case 'deselect-option': case 'pop-value': case 'remove-value': return "option ".concat(label, ", deselected."); case 'clear': return 'All selected options have been cleared.'; case 'initial-input-focus': return "option".concat(labels.length > 1 ? 's' : '', " ").concat(labels.join(','), ", selected."); case 'select-option': return isDisabled ? "option ".concat(label, " is disabled. Select another option.") : "option ".concat(label, ", selected."); default: return ''; } }, onFocus: function onFocus(props) { var context = props.context, focused = props.focused, options = props.options, _props$label2 = props.label, label = _props$label2 === void 0 ? '' : _props$label2, selectValue = props.selectValue, isDisabled = props.isDisabled, isSelected = props.isSelected, isAppleDevice = props.isAppleDevice; var getArrayIndex = function getArrayIndex(arr, item) { return arr && arr.length ? "".concat(arr.indexOf(item) + 1, " of ").concat(arr.length) : ''; }; if (context === 'value' && selectValue) { return "value ".concat(label, " focused, ").concat(getArrayIndex(selectValue, focused), "."); } if (context === 'menu' && isAppleDevice) { var disabled = isDisabled ? ' disabled' : ''; var status = "".concat(isSelected ? ' selected' : '').concat(disabled); return "".concat(label).concat(status, ", ").concat(getArrayIndex(options, focused), "."); } return ''; }, onFilter: function onFilter(props) { var inputValue = props.inputValue, resultsMessage = props.resultsMessage; return "".concat(resultsMessage).concat(inputValue ? ' for search term ' + inputValue : '', "."); } }; var LiveRegion = function LiveRegion(props) { var ariaSelection = props.ariaSelection, focusedOption = props.focusedOption, focusedValue = props.focusedValue, focusableOptions = props.focusableOptions, isFocused = props.isFocused, selectValue = props.selectValue, selectProps = props.selectProps, id = props.id, isAppleDevice = props.isAppleDevice; var ariaLiveMessages = selectProps.ariaLiveMessages, getOptionLabel = selectProps.getOptionLabel, inputValue = selectProps.inputValue, isMulti = selectProps.isMulti, isOptionDisabled = selectProps.isOptionDisabled, isSearchable = selectProps.isSearchable, menuIsOpen = selectProps.menuIsOpen, options = selectProps.options, screenReaderStatus = selectProps.screenReaderStatus, tabSelectsValue = selectProps.tabSelectsValue, isLoading = selectProps.isLoading; var ariaLabel = selectProps['aria-label']; var ariaLive = selectProps['aria-live']; // Update aria live message configuration when prop changes var messages = React.useMemo(function () { return _objectSpread2(_objectSpread2({}, defaultAriaLiveMessages), ariaLiveMessages || {}); }, [ariaLiveMessages]); // Update aria live selected option when prop changes var ariaSelected = React.useMemo(function () { var message = ''; if (ariaSelection && messages.onChange) { var option = ariaSelection.option, selectedOptions = ariaSelection.options, removedValue = ariaSelection.removedValue, removedValues = ariaSelection.removedValues, value = ariaSelection.value; // select-option when !isMulti does not return option so we assume selected option is value var asOption = function asOption(val) { return !Array.isArray(val) ? val : null; }; // If there is just one item from the action then get its label var selected = removedValue || option || asOption(value); var label = selected ? getOptionLabel(selected) : ''; // If there are multiple items from the action then return an array of labels var multiSelected = selectedOptions || removedValues || undefined; var labels = multiSelected ? multiSelected.map(getOptionLabel) : []; var onChangeProps = _objectSpread2({ // multiSelected items are usually items that have already been selected // or set by the user as a default value so we assume they are not disabled isDisabled: selected && isOptionDisabled(selected, selectValue), label: label, labels: labels }, ariaSelection); message = messages.onChange(onChangeProps); } return message; }, [ariaSelection, messages, isOptionDisabled, selectValue, getOptionLabel]); var ariaFocused = React.useMemo(function () { var focusMsg = ''; var focused = focusedOption || focusedValue; var isSelected = !!(focusedOption && selectValue && selectValue.includes(focusedOption)); if (focused && messages.onFocus) { var onFocusProps = { focused: focused, label: getOptionLabel(focused), isDisabled: isOptionDisabled(focused, selectValue), isSelected: isSelected, options: focusableOptions, context: focused === focusedOption ? 'menu' : 'value', selectValue: selectValue, isAppleDevice: isAppleDevice }; focusMsg = messages.onFocus(onFocusProps); } return focusMsg; }, [focusedOption, focusedValue, getOptionLabel, isOptionDisabled, messages, focusableOptions, selectValue, isAppleDevice]); var ariaResults = React.useMemo(function () { var resultsMsg = ''; if (menuIsOpen && options.length && !isLoading && messages.onFilter) { var resultsMessage = screenReaderStatus({ count: focusableOptions.length }); resultsMsg = messages.onFilter({ inputValue: inputValue, resultsMessage: resultsMessage }); } return resultsMsg; }, [focusableOptions, inputValue, menuIsOpen, messages, options, screenReaderStatus, isLoading]); var isInitialFocus = (ariaSelection === null || ariaSelection === void 0 ? void 0 : ariaSelection.action) === 'initial-input-focus'; var ariaGuidance = React.useMemo(function () { var guidanceMsg = ''; if (messages.guidance) { var context = focusedValue ? 'value' : menuIsOpen ? 'menu' : 'input'; guidanceMsg = messages.guidance({ 'aria-label': ariaLabel, context: context, isDisabled: focusedOption && isOptionDisabled(focusedOption, selectValue), isMulti: isMulti, isSearchable: isSearchable, tabSelectsValue: tabSelectsValue, isInitialFocus: isInitialFocus }); } return guidanceMsg; }, [ariaLabel, focusedOption, focusedValue, isMulti, isOptionDisabled, isSearchable, menuIsOpen, messages, selectValue, tabSelectsValue, isInitialFocus]); var ScreenReaderText = jsx(React.Fragment, null, jsx("span", { id: "aria-selection" }, ariaSelected), jsx("span", { id: "aria-focused" }, ariaFocused), jsx("span", { id: "aria-results" }, ariaResults), jsx("span", { id: "aria-guidance" }, ariaGuidance)); return jsx(React.Fragment, null, jsx(A11yText$1, { id: id }, isInitialFocus && ScreenReaderText), jsx(A11yText$1, { "aria-live": ariaLive, "aria-atomic": "false", "aria-relevant": "additions text", role: "log" }, isFocused && !isInitialFocus && ScreenReaderText)); }; var LiveRegion$1 = LiveRegion; var diacritics = [{ base: 'A', letters: "A\u24B6\uFF21\xC0\xC1\xC2\u1EA6\u1EA4\u1EAA\u1EA8\xC3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\xC4\u01DE\u1EA2\xC5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F" }, { base: 'AA', letters: "\uA732" }, { base: 'AE', letters: "\xC6\u01FC\u01E2" }, { base: 'AO', letters: "\uA734" }, { base: 'AU', letters: "\uA736" }, { base: 'AV', letters: "\uA738\uA73A" }, { base: 'AY', letters: "\uA73C" }, { base: 'B', letters: "B\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181" }, { base: 'C', letters: "C\u24B8\uFF23\u0106\u0108\u010A\u010C\xC7\u1E08\u0187\u023B\uA73E" }, { base: 'D', letters: "D\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779" }, { base: 'DZ', letters: "\u01F1\u01C4" }, { base: 'Dz', letters: "\u01F2\u01C5" }, { base: 'E', letters: "E\u24BA\uFF25\xC8\xC9\xCA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\xCB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E" }, { base: 'F', letters: "F\u24BB\uFF26\u1E1E\u0191\uA77B" }, { base: 'G', letters: "G\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E" }, { base: 'H', letters: "H\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D" }, { base: 'I', letters: "I\u24BE\uFF29\xCC\xCD\xCE\u0128\u012A\u012C\u0130\xCF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197" }, { base: 'J', letters: "J\u24BF\uFF2A\u0134\u0248" }, { base: 'K', letters: "K\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2" }, { base: 'L', letters: "L\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780" }, { base: 'LJ', letters: "\u01C7" }, { base: 'Lj', letters: "\u01C8" }, { base: 'M', letters: "M\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C" }, { base: 'N', letters: "N\u24C3\uFF2E\u01F8\u0143\xD1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4" }, { base: 'NJ', letters: "\u01CA" }, { base: 'Nj', letters: "\u01CB" }, { base: 'O', letters: "O\u24C4\uFF2F\xD2\xD3\xD4\u1ED2\u1ED0\u1ED6\u1ED4\xD5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\xD6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\xD8\u01FE\u0186\u019F\uA74A\uA74C" }, { base: 'OI', letters: "\u01A2" }, { base: 'OO', letters: "\uA74E" }, { base: 'OU', letters: "\u0222" }, { base: 'P', letters: "P\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754" }, { base: 'Q', letters: "Q\u24C6\uFF31\uA756\uA758\u024A" }, { base: 'R', letters: "R\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782" }, { base: 'S', letters: "S\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784" }, { base: 'T', letters: "T\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786" }, { base: 'TZ', letters: "\uA728" }, { base: 'U', letters: "U\u24CA\uFF35\xD9\xDA\xDB\u0168\u1E78\u016A\u1E7A\u016C\xDC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244" }, { base: 'V', letters: "V\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245" }, { base: 'VY', letters: "\uA760" }, { base: 'W', letters: "W\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72" }, { base: 'X', letters: "X\u24CD\uFF38\u1E8A\u1E8C" }, { base: 'Y', letters: "Y\u24CE\uFF39\u1EF2\xDD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE" }, { base: 'Z', letters: "Z\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762" }, { base: 'a', letters: "a\u24D0\uFF41\u1E9A\xE0\xE1\xE2\u1EA7\u1EA5\u1EAB\u1EA9\xE3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\xE4\u01DF\u1EA3\xE5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250" }, { base: 'aa', letters: "\uA733" }, { base: 'ae', letters: "\xE6\u01FD\u01E3" }, { base: 'ao', letters: "\uA735" }, { base: 'au', letters: "\uA737" }, { base: 'av', letters: "\uA739\uA73B" }, { base: 'ay', letters: "\uA73D" }, { base: 'b', letters: "b\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253" }, { base: 'c', letters: "c\u24D2\uFF43\u0107\u0109\u010B\u010D\xE7\u1E09\u0188\u023C\uA73F\u2184" }, { base: 'd', letters: "d\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A" }, { base: 'dz', letters: "\u01F3\u01C6" }, { base: 'e', letters: "e\u24D4\uFF45\xE8\xE9\xEA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\xEB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD" }, { base: 'f', letters: "f\u24D5\uFF46\u1E1F\u0192\uA77C" }, { base: 'g', letters: "g\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F" }, { base: 'h', letters: "h\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265" }, { base: 'hv', letters: "\u0195" }, { base: 'i', letters: "i\u24D8\uFF49\xEC\xED\xEE\u0129\u012B\u012D\xEF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131" }, { base: 'j', letters: "j\u24D9\uFF4A\u0135\u01F0\u0249" }, { base: 'k', letters: "k\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3" }, { base: 'l', letters: "l\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747" }, { base: 'lj', letters: "\u01C9" }, { base: 'm', letters: "m\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F" }, { base: 'n', letters: "n\u24DD\uFF4E\u01F9\u0144\xF1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5" }, { base: 'nj', letters: "\u01CC" }, { base: 'o', letters: "o\u24DE\uFF4F\xF2\xF3\xF4\u1ED3\u1ED1\u1ED7\u1ED5\xF5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\xF6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\xF8\u01FF\u0254\uA74B\uA74D\u0275" }, { base: 'oi', letters: "\u01A3" }, { base: 'ou', letters: "\u0223" }, { base: 'oo', letters: "\uA74F" }, { base: 'p', letters: "p\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755" }, { base: 'q', letters: "q\u24E0\uFF51\u024B\uA757\uA759" }, { base: 'r', letters: "r\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783" }, { base: 's', letters: "s\u24E2\uFF53\xDF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B" }, { base: 't', letters: "t\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787" }, { base: 'tz', letters: "\uA729" }, { base: 'u', letters: "u\u24E4\uFF55\xF9\xFA\xFB\u0169\u1E79\u016B\u1E7B\u016D\xFC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289" }, { base: 'v', letters: "v\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C" }, { base: 'vy', letters: "\uA761" }, { base: 'w', letters: "w\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73" }, { base: 'x', letters: "x\u24E7\uFF58\u1E8B\u1E8D" }, { base: 'y', letters: "y\u24E8\uFF59\u1EF3\xFD\u0177\u1EF9\u0233\u1E8F\xFF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF" }, { base: 'z', letters: "z\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763" }]; var anyDiacritic = new RegExp('[' + diacritics.map(function (d) { return d.letters; }).join('') + ']', 'g'); var diacriticToBase = {}; for (var i = 0; i < diacritics.length; i++) { var diacritic = diacritics[i]; for (var j = 0; j < diacritic.letters.length; j++) { diacriticToBase[diacritic.letters[j]] = diacritic.base; } } var stripDiacritics = function stripDiacritics(str) { return str.replace(anyDiacritic, function (match) { return diacriticToBase[match]; }); }; var memoizedStripDiacriticsForInput = memoizeOne(stripDiacritics); var trimString = function trimString(str) { return str.replace(/^\s+|\s+$/g, ''); }; var defaultStringify = function defaultStringify(option) { return "".concat(option.label, " ").concat(option.value); }; var createFilter = function createFilter(config) { return function (option, rawInput) { // eslint-disable-next-line no-underscore-dangle if (option.data.__isNew__) return true; var _ignoreCase$ignoreAcc = _objectSpread2({ ignoreCase: true, ignoreAccents: true, stringify: defaultStringify, trim: true, matchFrom: 'any' }, config), ignoreCase = _ignoreCase$ignoreAcc.ignoreCase, ignoreAccents = _ignoreCase$ignoreAcc.ignoreAccents, stringify = _ignoreCase$ignoreAcc.stringify, trim = _ignoreCase$ignoreAcc.trim, matchFrom = _ignoreCase$ignoreAcc.matchFrom; var input = trim ? trimString(rawInput) : rawInput; var candidate = trim ? trimString(stringify(option)) : stringify(option); if (ignoreCase) { input = input.toLowerCase(); candidate = candidate.toLowerCase(); } if (ignoreAccents) { input = memoizedStripDiacriticsForInput(input); candidate = stripDiacritics(candidate); } return matchFrom === 'start' ? candidate.substr(0, input.length) === input : candidate.indexOf(input) > -1; }; }; var _excluded$1 = ["innerRef"]; function DummyInput(_ref) { var innerRef = _ref.innerRef, props = _objectWithoutProperties(_ref, _excluded$1); // Remove animation props not meant for HTML elements var filteredProps = removeProps(props, 'onExited', 'in', 'enter', 'exit', 'appear'); return jsx("input", _extends$k({ ref: innerRef }, filteredProps, { css: /*#__PURE__*/css$2({ label: 'dummyInput', // get rid of any default styles background: 0, border: 0, // important! this hides the flashing cursor caretColor: 'transparent', fontSize: 'inherit', gridArea: '1 / 1 / 2 / 3', outline: 0, padding: 0, // important! without `width` browsers won't allow focus width: 1, // remove cursor on desktop color: 'transparent', // remove cursor on mobile whilst maintaining "scroll into view" behaviour left: -100, opacity: 0, position: 'relative', transform: 'scale(.01)' }, ";label:DummyInput;", "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkR1bW15SW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlCTSIsImZpbGUiOiJEdW1teUlucHV0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgcmVtb3ZlUHJvcHMgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIER1bW15SW5wdXQoe1xuICBpbm5lclJlZixcbiAgLi4ucHJvcHNcbn06IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snaW5wdXQnXSAmIHtcbiAgcmVhZG9ubHkgaW5uZXJSZWY6IFJlZjxIVE1MSW5wdXRFbGVtZW50Pjtcbn0pIHtcbiAgLy8gUmVtb3ZlIGFuaW1hdGlvbiBwcm9wcyBub3QgbWVhbnQgZm9yIEhUTUwgZWxlbWVudHNcbiAgY29uc3QgZmlsdGVyZWRQcm9wcyA9IHJlbW92ZVByb3BzKFxuICAgIHByb3BzLFxuICAgICdvbkV4aXRlZCcsXG4gICAgJ2luJyxcbiAgICAnZW50ZXInLFxuICAgICdleGl0JyxcbiAgICAnYXBwZWFyJ1xuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICByZWY9e2lubmVyUmVmfVxuICAgICAgey4uLmZpbHRlcmVkUHJvcHN9XG4gICAgICBjc3M9e3tcbiAgICAgICAgbGFiZWw6ICdkdW1teUlucHV0JyxcbiAgICAgICAgLy8gZ2V0IHJpZCBvZiBhbnkgZGVmYXVsdCBzdHlsZXNcbiAgICAgICAgYmFja2dyb3VuZDogMCxcbiAgICAgICAgYm9yZGVyOiAwLFxuICAgICAgICAvLyBpbXBvcnRhbnQhIHRoaXMgaGlkZXMgdGhlIGZsYXNoaW5nIGN1cnNvclxuICAgICAgICBjYXJldENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICAgICBncmlkQXJlYTogJzEgLyAxIC8gMiAvIDMnLFxuICAgICAgICBvdXRsaW5lOiAwLFxuICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAvLyBpbXBvcnRhbnQhIHdpdGhvdXQgYHdpZHRoYCBicm93c2VycyB3b24ndCBhbGxvdyBmb2N1c1xuICAgICAgICB3aWR0aDogMSxcblxuICAgICAgICAvLyByZW1vdmUgY3Vyc29yIG9uIGRlc2t0b3BcbiAgICAgICAgY29sb3I6ICd0cmFuc3BhcmVudCcsXG5cbiAgICAgICAgLy8gcmVtb3ZlIGN1cnNvciBvbiBtb2JpbGUgd2hpbHN0IG1haW50YWluaW5nIFwic2Nyb2xsIGludG8gdmlld1wiIGJlaGF2aW91clxuICAgICAgICBsZWZ0OiAtMTAwLFxuICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoLjAxKScsXG4gICAgICB9fVxuICAgIC8+XG4gICk7XG59XG4iXX0= */") })); } var cancelScroll = function cancelScroll(event) { if (event.cancelable) event.preventDefault(); event.stopPropagation(); }; function useScrollCapture(_ref) { var isEnabled = _ref.isEnabled, onBottomArrive = _ref.onBottomArrive, onBottomLeave = _ref.onBottomLeave, onTopArrive = _ref.onTopArrive, onTopLeave = _ref.onTopLeave; var isBottom = React.useRef(false); var isTop = React.useRef(false); var touchStart = React.useRef(0); var scrollTarget = React.useRef(null); var handleEventDelta = React.useCallback(function (event, delta) { if (scrollTarget.current === null) return; var _scrollTarget$current = scrollTarget.current, scrollTop = _scrollTarget$current.scrollTop, scrollHeight = _scrollTarget$current.scrollHeight, clientHeight = _scrollTarget$current.clientHeight; var target = scrollTarget.current; var isDeltaPositive = delta > 0; var availableScroll = scrollHeight - clientHeight - scrollTop; var shouldCancelScroll = false; // reset bottom/top flags if (availableScroll > delta && isBottom.current) { if (onBottomLeave) onBottomLeave(event); isBottom.current = false; } if (isDeltaPositive && isTop.current) { if (onTopLeave) onTopLeave(event); isTop.current = false; } // bottom limit if (isDeltaPositive && delta > availableScroll) { if (onBottomArrive && !isBottom.current) { onBottomArrive(event); } target.scrollTop = scrollHeight; shouldCancelScroll = true; isBottom.current = true; // top limit } else if (!isDeltaPositive && -delta > scrollTop) { if (onTopArrive && !isTop.current) { onTopArrive(event); } target.scrollTop = 0; shouldCancelScroll = true; isTop.current = true; } // cancel scroll if (shouldCancelScroll) { cancelScroll(event); } }, [onBottomArrive, onBottomLeave, onTopArrive, onTopLeave]); var onWheel = React.useCallback(function (event) { handleEventDelta(event, event.deltaY); }, [handleEventDelta]); var onTouchStart = React.useCallback(function (event) { // set touch start so we can calculate touchmove delta touchStart.current = event.changedTouches[0].clientY; }, []); var onTouchMove = React.useCallback(function (event) { var deltaY = touchStart.current - event.changedTouches[0].clientY; handleEventDelta(event, deltaY); }, [handleEventDelta]); var startListening = React.useCallback(function (el) { // bail early if no element is available to attach to if (!el) return; var notPassive = supportsPassiveEvents ? { passive: false } : false; el.addEventListener('wheel', onWheel, notPassive); el.addEventListener('touchstart', onTouchStart, notPassive); el.addEventListener('touchmove', onTouchMove, notPassive); }, [onTouchMove, onTouchStart, onWheel]); var stopListening = React.useCallback(function (el) { // bail early if no element is available to detach from if (!el) return; el.removeEventListener('wheel', onWheel, false); el.removeEventListener('touchstart', onTouchStart, false); el.removeEventListener('touchmove', onTouchMove, false); }, [onTouchMove, onTouchStart, onWheel]); React.useEffect(function () { if (!isEnabled) return; var element = scrollTarget.current; startListening(element); return function () { stopListening(element); }; }, [isEnabled, startListening, stopListening]); return function (element) { scrollTarget.current = element; }; } var STYLE_KEYS = ['boxSizing', 'height', 'overflow', 'paddingRight', 'position']; var LOCK_STYLES = { boxSizing: 'border-box', // account for possible declaration `width: 100%;` on body overflow: 'hidden', position: 'relative', height: '100%' }; function preventTouchMove(e) { e.preventDefault(); } function allowTouchMove(e) { e.stopPropagation(); } function preventInertiaScroll() { var top = this.scrollTop; var totalScroll = this.scrollHeight; var currentScroll = top + this.offsetHeight; if (top === 0) { this.scrollTop = 1; } else if (currentScroll === totalScroll) { this.scrollTop = top - 1; } } // `ontouchstart` check works on most browsers // `maxTouchPoints` works on IE10/11 and Surface function isTouchDevice() { return 'ontouchstart' in window || navigator.maxTouchPoints; } var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); var activeScrollLocks = 0; var listenerOptions = { capture: false, passive: false }; function useScrollLock(_ref) { var isEnabled = _ref.isEnabled, _ref$accountForScroll = _ref.accountForScrollbars, accountForScrollbars = _ref$accountForScroll === void 0 ? true : _ref$accountForScroll; var originalStyles = React.useRef({}); var scrollTarget = React.useRef(null); var addScrollLock = React.useCallback(function (touchScrollTarget) { if (!canUseDOM) return; var target = document.body; var targetStyle = target && target.style; if (accountForScrollbars) { // store any styles already applied to the body STYLE_KEYS.forEach(function (key) { var val = targetStyle && targetStyle[key]; originalStyles.current[key] = val; }); } // apply the lock styles and padding if this is the first scroll lock if (accountForScrollbars && activeScrollLocks < 1) { var currentPadding = parseInt(originalStyles.current.paddingRight, 10) || 0; var clientWidth = document.body ? document.body.clientWidth : 0; var adjustedPadding = window.innerWidth - clientWidth + currentPadding || 0; Object.keys(LOCK_STYLES).forEach(function (key) { var val = LOCK_STYLES[key]; if (targetStyle) { targetStyle[key] = val; } }); if (targetStyle) { targetStyle.paddingRight = "".concat(adjustedPadding, "px"); } } // account for touch devices if (target && isTouchDevice()) { // Mobile Safari ignores { overflow: hidden } declaration on the body. target.addEventListener('touchmove', preventTouchMove, listenerOptions); // Allow scroll on provided target if (touchScrollTarget) { touchScrollTarget.addEventListener('touchstart', preventInertiaScroll, listenerOptions); touchScrollTarget.addEventListener('touchmove', allowTouchMove, listenerOptions); } } // increment active scroll locks activeScrollLocks += 1; }, [accountForScrollbars]); var removeScrollLock = React.useCallback(function (touchScrollTarget) { if (!canUseDOM) return; var target = document.body; var targetStyle = target && target.style; // safely decrement active scroll locks activeScrollLocks = Math.max(activeScrollLocks - 1, 0); // reapply original body styles, if any if (accountForScrollbars && activeScrollLocks < 1) { STYLE_KEYS.forEach(function (key) { var val = originalStyles.current[key]; if (targetStyle) { targetStyle[key] = val; } }); } // remove touch listeners if (target && isTouchDevice()) { target.removeEventListener('touchmove', preventTouchMove, listenerOptions); if (touchScrollTarget) { touchScrollTarget.removeEventListener('touchstart', preventInertiaScroll, listenerOptions); touchScrollTarget.removeEventListener('touchmove', allowTouchMove, listenerOptions); } } }, [accountForScrollbars]); React.useEffect(function () { if (!isEnabled) return; var element = scrollTarget.current; addScrollLock(element); return function () { removeScrollLock(element); }; }, [isEnabled, addScrollLock, removeScrollLock]); return function (element) { scrollTarget.current = element; }; } function _EMOTION_STRINGIFIED_CSS_ERROR__$1() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } var blurSelectInput = function blurSelectInput(event) { var element = event.target; return element.ownerDocument.activeElement && element.ownerDocument.activeElement.blur(); }; var _ref2$1 = { name: "bp8cua-ScrollManager", styles: "position:fixed;left:0;bottom:0;right:0;top:0;label:ScrollManager;", map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNjcm9sbE1hbmFnZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9EVSIsImZpbGUiOiJTY3JvbGxNYW5hZ2VyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgRnJhZ21lbnQsIFJlYWN0RWxlbWVudCwgUmVmQ2FsbGJhY2ssIE1vdXNlRXZlbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlU2Nyb2xsQ2FwdHVyZSBmcm9tICcuL3VzZVNjcm9sbENhcHR1cmUnO1xuaW1wb3J0IHVzZVNjcm9sbExvY2sgZnJvbSAnLi91c2VTY3JvbGxMb2NrJztcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgcmVhZG9ubHkgY2hpbGRyZW46IChyZWY6IFJlZkNhbGxiYWNrPEhUTUxFbGVtZW50PikgPT4gUmVhY3RFbGVtZW50O1xuICByZWFkb25seSBsb2NrRW5hYmxlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2FwdHVyZUVuYWJsZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IG9uQm90dG9tQXJyaXZlPzogKGV2ZW50OiBXaGVlbEV2ZW50IHwgVG91Y2hFdmVudCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgb25Cb3R0b21MZWF2ZT86IChldmVudDogV2hlZWxFdmVudCB8IFRvdWNoRXZlbnQpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IG9uVG9wQXJyaXZlPzogKGV2ZW50OiBXaGVlbEV2ZW50IHwgVG91Y2hFdmVudCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgb25Ub3BMZWF2ZT86IChldmVudDogV2hlZWxFdmVudCB8IFRvdWNoRXZlbnQpID0+IHZvaWQ7XG59XG5cbmNvbnN0IGJsdXJTZWxlY3RJbnB1dCA9IChldmVudDogTW91c2VFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRGl2RWxlbWVudDtcbiAgcmV0dXJuIChcbiAgICBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJlxuICAgIChlbGVtZW50Lm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuYmx1cigpXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTY3JvbGxNYW5hZ2VyKHtcbiAgY2hpbGRyZW4sXG4gIGxvY2tFbmFibGVkLFxuICBjYXB0dXJlRW5hYmxlZCA9IHRydWUsXG4gIG9uQm90dG9tQXJyaXZlLFxuICBvbkJvdHRvbUxlYXZlLFxuICBvblRvcEFycml2ZSxcbiAgb25Ub3BMZWF2ZSxcbn06IFByb3BzKSB7XG4gIGNvbnN0IHNldFNjcm9sbENhcHR1cmVUYXJnZXQgPSB1c2VTY3JvbGxDYXB0dXJlKHtcbiAgICBpc0VuYWJsZWQ6IGNhcHR1cmVFbmFibGVkLFxuICAgIG9uQm90dG9tQXJyaXZlLFxuICAgIG9uQm90dG9tTGVhdmUsXG4gICAgb25Ub3BBcnJpdmUsXG4gICAgb25Ub3BMZWF2ZSxcbiAgfSk7XG4gIGNvbnN0IHNldFNjcm9sbExvY2tUYXJnZXQgPSB1c2VTY3JvbGxMb2NrKHsgaXNFbmFibGVkOiBsb2NrRW5hYmxlZCB9KTtcblxuICBjb25zdCB0YXJnZXRSZWY6IFJlZkNhbGxiYWNrPEhUTUxFbGVtZW50PiA9IChlbGVtZW50KSA9PiB7XG4gICAgc2V0U2Nyb2xsQ2FwdHVyZVRhcmdldChlbGVtZW50KTtcbiAgICBzZXRTY3JvbGxMb2NrVGFyZ2V0KGVsZW1lbnQpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPEZyYWdtZW50PlxuICAgICAge2xvY2tFbmFibGVkICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIG9uQ2xpY2s9e2JsdXJTZWxlY3RJbnB1dH1cbiAgICAgICAgICBjc3M9e3sgcG9zaXRpb246ICdmaXhlZCcsIGxlZnQ6IDAsIGJvdHRvbTogMCwgcmlnaHQ6IDAsIHRvcDogMCB9fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtjaGlsZHJlbih0YXJnZXRSZWYpfVxuICAgIDwvRnJhZ21lbnQ+XG4gICk7XG59XG4iXX0= */", toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1 }; function ScrollManager(_ref) { var children = _ref.children, lockEnabled = _ref.lockEnabled, _ref$captureEnabled = _ref.captureEnabled, captureEnabled = _ref$captureEnabled === void 0 ? true : _ref$captureEnabled, onBottomArrive = _ref.onBottomArrive, onBottomLeave = _ref.onBottomLeave, onTopArrive = _ref.onTopArrive, onTopLeave = _ref.onTopLeave; var setScrollCaptureTarget = useScrollCapture({ isEnabled: captureEnabled, onBottomArrive: onBottomArrive, onBottomLeave: onBottomLeave, onTopArrive: onTopArrive, onTopLeave: onTopLeave }); var setScrollLockTarget = useScrollLock({ isEnabled: lockEnabled }); var targetRef = function targetRef(element) { setScrollCaptureTarget(element); setScrollLockTarget(element); }; return jsx(React.Fragment, null, lockEnabled && jsx("div", { onClick: blurSelectInput, css: _ref2$1 }), children(targetRef)); } function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } var _ref2 = { name: "5kkxb2-requiredInput-RequiredInput", styles: "label:requiredInput;opacity:0;pointer-events:none;position:absolute;bottom:0;left:0;right:0;width:100%;label:RequiredInput;", map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlJlcXVpcmVkSW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWNJIiwiZmlsZSI6IlJlcXVpcmVkSW5wdXQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBqc3gganN4ICovXG5pbXBvcnQgeyBGb2N1c0V2ZW50SGFuZGxlciwgRnVuY3Rpb25Db21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbmNvbnN0IFJlcXVpcmVkSW5wdXQ6IEZ1bmN0aW9uQ29tcG9uZW50PHtcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgb25Gb2N1czogRm9jdXNFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD47XG59PiA9ICh7IG5hbWUsIG9uRm9jdXMgfSkgPT4gKFxuICA8aW5wdXRcbiAgICByZXF1aXJlZFxuICAgIG5hbWU9e25hbWV9XG4gICAgdGFiSW5kZXg9ey0xfVxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgb25Gb2N1cz17b25Gb2N1c31cbiAgICBjc3M9e3tcbiAgICAgIGxhYmVsOiAncmVxdWlyZWRJbnB1dCcsXG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBib3R0b206IDAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgIH19XG4gICAgLy8gUHJldmVudCBgU3dpdGNoaW5nIGZyb20gdW5jb250cm9sbGVkIHRvIGNvbnRyb2xsZWRgIGVycm9yXG4gICAgdmFsdWU9XCJcIlxuICAgIG9uQ2hhbmdlPXsoKSA9PiB7fX1cbiAgLz5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVpcmVkSW5wdXQ7XG4iXX0= */", toString: _EMOTION_STRINGIFIED_CSS_ERROR__ }; var RequiredInput = function RequiredInput(_ref) { var name = _ref.name, onFocus = _ref.onFocus; return jsx("input", { required: true, name: name, tabIndex: -1, "aria-hidden": "true", onFocus: onFocus, css: _ref2 // Prevent `Switching from uncontrolled to controlled` error , value: "", onChange: function onChange() {} }); }; var RequiredInput$1 = RequiredInput; /// <reference types="user-agent-data-types" /> function testPlatform(re) { var _window$navigator$use; return typeof window !== 'undefined' && window.navigator != null ? re.test(((_window$navigator$use = window.navigator['userAgentData']) === null || _window$navigator$use === void 0 ? void 0 : _window$navigator$use.platform) || window.navigator.platform) : false; } function isIPhone() { return testPlatform(/^iPhone/i); } function isMac() { return testPlatform(/^Mac/i); } function isIPad() { return testPlatform(/^iPad/i) || // iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support. isMac() && navigator.maxTouchPoints > 1; } function isIOS() { return isIPhone() || isIPad(); } function isAppleDevice() { return isMac() || isIOS(); } var formatGroupLabel = function formatGroupLabel(group) { return group.label; }; var getOptionLabel$1 = function getOptionLabel(option) { return option.label; }; var getOptionValue$1 = function getOptionValue(option) { return option.value; }; var isOptionDisabled = function isOptionDisabled(option) { return !!option.isDisabled; }; var defaultStyles = { clearIndicator: clearIndicatorCSS, container: containerCSS, control: css$1, dropdownIndicator: dropdownIndicatorCSS, group: groupCSS, groupHeading: groupHeadingCSS, indicatorsContainer: indicatorsContainerCSS, indicatorSeparator: indicatorSeparatorCSS, input: inputCSS, loadingIndicator: loadingIndicatorCSS, loadingMessage: loadingMessageCSS, menu: menuCSS, menuList: menuListCSS, menuPortal: menuPortalCSS, multiValue: multiValueCSS, multiValueLabel: multiValueLabelCSS, multiValueRemove: multiValueRemoveCSS, noOptionsMessage: noOptionsMessageCSS, option: optionCSS, placeholder: placeholderCSS, singleValue: css, valueContainer: valueContainerCSS }; var colors = { primary: '#2684FF', primary75: '#4C9AFF', primary50: '#B2D4FF', primary25: '#DEEBFF', danger: '#DE350B', dangerLight: '#FFBDAD', neutral0: 'hsl(0, 0%, 100%)', neutral5: 'hsl(0, 0%, 95%)', neutral10: 'hsl(0, 0%, 90%)', neutral20: 'hsl(0, 0%, 80%)', neutral30: 'hsl(0, 0%, 70%)', neutral40: 'hsl(0, 0%, 60%)', neutral50: 'hsl(0, 0%, 50%)', neutral60: 'hsl(0, 0%, 40%)', neutral70: 'hsl(0, 0%, 30%)', neutral80: 'hsl(0, 0%, 20%)', neutral90: 'hsl(0, 0%, 10%)' }; var borderRadius = 4; // Used to calculate consistent margin/padding on elements var baseUnit = 4; // The minimum height of the control var controlHeight = 38; // The amount of space between the control and menu */ var menuGutter = baseUnit * 2; var spacing = { baseUnit: baseUnit, controlHeight: controlHeight, menuGutter: menuGutter }; var defaultTheme = { borderRadius: borderRadius, colors: colors, spacing: spacing }; var defaultProps = { 'aria-live': 'polite', backspaceRemovesValue: true, blurInputOnSelect: isTouchCapable(), captureMenuScroll: !isTouchCapable(), classNames: {}, closeMenuOnSelect: true, closeMenuOnScroll: false, components: {}, controlShouldRenderValue: true, escapeClearsValue: false, filterOption: createFilter(), formatGroupLabel: formatGroupLabel, getOptionLabel: getOptionLabel$1, getOptionValue: getOptionValue$1, isDisabled: false, isLoading: false, isMulti: false, isRtl: false, isSearchable: true, isOptionDisabled: isOptionDisabled, loadingMessage: function loadingMessage() { return 'Loading...'; }, maxMenuHeight: 300, minMenuHeight: 140, menuIsOpen: false, menuPlacement: 'bottom', menuPosition: 'absolute', menuShouldBlockScroll: false, menuShouldScrollIntoView: !isMobileDevice(), noOptionsMessage: function noOptionsMessage() { return 'No options'; }, openMenuOnFocus: false, openMenuOnClick: true, options: [], pageSize: 5, placeholder: 'Select...', screenReaderStatus: function screenReaderStatus(_ref) { var count = _ref.count; return "".concat(count, " result").concat(count !== 1 ? 's' : '', " available"); }, styles: {}, tabIndex: 0, tabSelectsValue: true, unstyled: false }; function toCategorizedOption(props, option, selectValue, index) { var isDisabled = _isOptionDisabled(props, option, selectValue); var isSelected = _isOptionSelected(props, option, selectValue); var label = getOptionLabel(props, option); var value = getOptionValue(props, option); return { type: 'option', data: option, isDisabled: isDisabled, isSelected: isSelected, label: label, value: value, index: index }; } function buildCategorizedOptions(props, selectValue) { return props.options.map(function (groupOrOption, groupOrOptionIndex) { if ('options' in groupOrOption) { var categorizedOptions = groupOrOption.options.map(function (option, optionIndex) { return toCategorizedOption(props, option, selectValue, optionIndex); }).filter(function (categorizedOption) { return isFocusable(props, categorizedOption); }); return categorizedOptions.length > 0 ? { type: 'group', data: groupOrOption, options: categorizedOptions, index: groupOrOptionIndex } : undefined; } var categorizedOption = toCategorizedOption(props, groupOrOption, selectValue, groupOrOptionIndex); return isFocusable(props, categorizedOption) ? categorizedOption : undefined; }).filter(notNullish); } function buildFocusableOptionsFromCategorizedOptions(categorizedOptions) { return categorizedOptions.reduce(function (optionsAccumulator, categorizedOption) { if (categorizedOption.type === 'group') { optionsAccumulator.push.apply(optionsAccumulator, _toConsumableArray(categorizedOption.options.map(function (option) { return option.data; }))); } else { optionsAccumulator.push(categorizedOption.data); } return optionsAccumulator; }, []); } function buildFocusableOptionsWithIds(categorizedOptions, optionId) { return categorizedOptions.reduce(function (optionsAccumulator, categorizedOption) { if (categorizedOption.type === 'group') { optionsAccumulator.push.apply(optionsAccumulator, _toConsumableArray(categorizedOption.options.map(function (option) { return { data: option.data, id: "".concat(optionId, "-").concat(categorizedOption.index, "-").concat(option.index) }; }))); } else { optionsAccumulator.push({ data: categorizedOption.data, id: "".concat(optionId, "-").concat(categorizedOption.index) }); } return optionsAccumulator; }, []); } function buildFocusableOptions(props, selectValue) { return buildFocusableOptionsFromCategorizedOptions(buildCategorizedOptions(props, selectValue)); } function isFocusable(props, categorizedOption) { var _props$inputValue = props.inputValue, inputValue = _props$inputValue === void 0 ? '' : _props$inputValue; var data = categorizedOption.data, isSelected = categorizedOption.isSelected, label = categorizedOption.label, value = categorizedOption.value; return (!shouldHideSelectedOptions(props) || !isSelected) && _filterOption(props, { label: label, value: value, data: data }, inputValue); } function getNextFocusedValue(state, nextSelectValue) { var focusedValue = state.focusedValue, lastSelectValue = state.selectValue; var lastFocusedIndex = lastSelectValue.indexOf(focusedValue); if (lastFocusedIndex > -1) { var nextFocusedIndex = nextSelectValue.indexOf(focusedValue); if (nextFocusedIndex > -1) { // the focused value is still in the selectValue, return it return focusedValue; } else if (lastFocusedIndex < nextSelectValue.length) { // the focusedValue is not present in the next selectValue array by // reference, so return the new value at the same index return nextSelectValue[lastFocusedIndex]; } } return null; } function getNextFocusedOption(state, options) { var lastFocusedOption = state.focusedOption; return lastFocusedOption && options.indexOf(lastFocusedOption) > -1 ? lastFocusedOption : options[0]; } var getFocusedOptionId = function getFocusedOptionId(focusableOptionsWithIds, focusedOption) { var _focusableOptionsWith; var focusedOptionId = (_focusableOptionsWith = focusableOptionsWithIds.find(function (option) { return option.data === focusedOption; })) === null || _focusableOptionsWith === void 0 ? void 0 : _focusableOptionsWith.id; return focusedOptionId || null; }; var getOptionLabel = function getOptionLabel(props, data) { return props.getOptionLabel(data); }; var getOptionValue = function getOptionValue(props, data) { return props.getOptionValue(data); }; function _isOptionDisabled(props, option, selectValue) { return typeof props.isOptionDisabled === 'function' ? props.isOptionDisabled(option, selectValue) : false; } function _isOptionSelected(props, option, selectValue) { if (selectValue.indexOf(option) > -1) return true; if (typeof props.isOptionSelected === 'function') { return props.isOptionSelected(option, selectValue); } var candidate = getOptionValue(props, option); return selectValue.some(function (i) { return getOptionValue(props, i) === candidate; }); } function _filterOption(props, option, inputValue) { return props.filterOption ? props.filterOption(option, inputValue) : true; } var shouldHideSelectedOptions = function shouldHideSelectedOptions(props) { var hideSelectedOptions = props.hideSelectedOptions, isMulti = props.isMulti; if (hideSelectedOptions === undefined) return isMulti; return hideSelectedOptions; }; var instanceId = 1; var Select$1 = /*#__PURE__*/function (_Component) { _inherits(Select, _Component); var _super = _createSuper(Select); // Misc. Instance Properties // ------------------------------ // TODO // Refs // ------------------------------ // Lifecycle // ------------------------------ function Select(_props) { var _this; _classCallCheck(this, Select); _this = _super.call(this, _props); _this.state = { ariaSelection: null, focusedOption: null, focusedOptionId: null, focusableOptionsWithIds: [], focusedValue: null, inputIsHidden: false, isFocused: false, selectValue: [], clearFocusValueOnUpdate: false, prevWasFocused: false, inputIsHiddenAfterUpdate: undefined, prevProps: undefined, instancePrefix: '' }; _this.blockOptionHover = false; _this.isComposing = false; _this.commonProps = void 0; _this.initialTouchX = 0; _this.initialTouchY = 0; _this.openAfterFocus = false; _this.scrollToFocusedOptionOnUpdate = false; _this.userIsDragging = void 0; _this.isAppleDevice = isAppleDevice(); _this.controlRef = null; _this.getControlRef = function (ref) { _this.controlRef = ref; }; _this.focusedOptionRef = null; _this.getFocusedOptionRef = function (ref) { _this.focusedOptionRef = ref; }; _this.menuListRef = null; _this.getMenuListRef = function (ref) { _this.menuListRef = ref; }; _this.inputRef = null; _this.getInputRef = function (ref) { _this.inputRef = ref; }; _this.focus = _this.focusInput; _this.blur = _this.blurInput; _this.onChange = function (newValue, actionMeta) { var _this$props = _this.props, onChange = _this$props.onChange, name = _this$props.name; actionMeta.name = name; _this.ariaOnChange(newValue, actionMeta); onChange(newValue, actionMeta); }; _this.setValue = function (newValue, action, option) { var _this$props2 = _this.props, closeMenuOnSelect = _this$props2.closeMenuOnSelect, isMulti = _this$props2.isMulti, inputValue = _this$props2.inputValue; _this.onInputChange('', { action: 'set-value', prevInputValue: inputValue }); if (closeMenuOnSelect) { _this.setState({ inputIsHiddenAfterUpdate: !isMulti }); _this.onMenuClose(); } // when the select value should change, we should reset focusedValue _this.setState({ clearFocusValueOnUpdate: true }); _this.onChange(newValue, { action: action, option: option }); }; _this.selectOption = function (newValue) { var _this$props3 = _this.props, blurInputOnSelect = _this$props3.blurInputOnSelect, isMulti = _this$props3.isMulti, name = _this$props3.name; var selectValue = _this.state.selectValue; var deselected = isMulti && _this.isOptionSelected(newValue, selectValue); var isDisabled = _this.isOptionDisabled(newValue, selectValue); if (deselected) { var candidate = _this.getOptionValue(newValue); _this.setValue(multiValueAsValue(selectValue.filter(function (i) { return _this.getOptionValue(i) !== candidate; })), 'deselect-option', newValue); } else if (!isDisabled) { // Select option if option is not disabled if (isMulti) { _this.setValue(multiValueAsValue([].concat(_toConsumableArray(selectValue), [newValue])), 'select-option', newValue); } else { _this.setValue(singleValueAsValue(newValue), 'select-option'); } } else { _this.ariaOnChange(singleValueAsValue(newValue), { action: 'select-option', option: newValue, name: name }); return; } if (blurInputOnSelect) { _this.blurInput(); } }; _this.removeValue = function (removedValue) { var isMulti = _this.props.isMulti; var selectValue = _this.state.selectValue; var candidate = _this.getOptionValue(removedValue); var newValueArray = selectValue.filter(function (i) { return _this.getOptionValue(i) !== candidate; }); var newValue = valueTernary(isMulti, newValueArray, newValueArray[0] || null); _this.onChange(newValue, { action: 'remove-value', removedValue: removedValue }); _this.focusInput(); }; _this.clearValue = function () { var selectValue = _this.state.selectValue; _this.onChange(valueTernary(_this.props.isMulti, [], null), { action: 'clear', removedValues: selectValue }); }; _this.popValue = function () { var isMulti = _this.props.isMulti; var selectValue = _this.state.selectValue; var lastSelectedValue = selectValue[selectValue.length - 1]; var newValueArray = selectValue.slice(0, selectValue.length - 1); var newValue = valueTernary(isMulti, newValueArray, newValueArray[0] || null); _this.onChange(newValue, { action: 'pop-value', removedValue: lastSelectedValue }); }; _this.getFocusedOptionId = function (focusedOption) { return getFocusedOptionId(_this.state.focusableOptionsWithIds, focusedOption); }; _this.getFocusableOptionsWithIds = function () { return buildFocusableOptionsWithIds(buildCategorizedOptions(_this.props, _this.state.selectValue), _this.getElementId('option')); }; _this.getValue = function () { return _this.state.selectValue; }; _this.cx = function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return classNames.apply(void 0, [_this.props.classNamePrefix].concat(args)); }; _this.getOptionLabel = function (data) { return getOptionLabel(_this.props, data); }; _this.getOptionValue = function (data) { return getOptionValue(_this.props, data); }; _this.getStyles = function (key, props) { var unstyled = _this.props.unstyled; var base = defaultStyles[key](props, unstyled); base.boxSizing = 'border-box'; var custom = _this.props.styles[key]; return custom ? custom(base, props) : base; }; _this.getClassNames = function (key, props) { var _this$props$className, _this$props$className2; return (_this$props$className = (_this$props$className2 = _this.props.classNames)[key]) === null || _this$props$className === void 0 ? void 0 : _this$props$className.call(_this$props$className2, props); }; _this.getElementId = function (element) { return "".concat(_this.state.instancePrefix, "-").concat(element); }; _this.getComponents = function () { return defaultComponents(_this.props); }; _this.buildCategorizedOptions = function () { return buildCategorizedOptions(_this.props, _this.state.selectValue); }; _this.getCategorizedOptions = function () { return _this.props.menuIsOpen ? _this.buildCategorizedOptions() : []; }; _this.buildFocusableOptions = function () { return buildFocusableOptionsFromCategorizedOptions(_this.buildCategorizedOptions()); }; _this.getFocusableOptions = function () { return _this.props.menuIsOpen ? _this.buildFocusableOptions() : []; }; _this.ariaOnChange = function (value, actionMeta) { _this.setState({ ariaSelection: _objectSpread2({ value: value }, actionMeta) }); }; _this.onMenuMouseDown = function (event) { if (event.button !== 0) { return; } event.stopPropagation(); event.preventDefault(); _this.focusInput(); }; _this.onMenuMouseMove = function (event) { _this.blockOptionHover = false; }; _this.onControlMouseDown = function (event) { // Event captured by dropdown indicator if (event.defaultPrevented) { return; } var openMenuOnClick = _this.props.openMenuOnClick; if (!_this.state.isFocused) { if (openMenuOnClick) { _this.openAfterFocus = true; } _this.focusInput(); } else if (!_this.props.menuIsOpen) { if (openMenuOnClick) { _this.openMenu('first'); } } else { if (event.target.tagName !== 'INPUT' && event.target.tagName !== 'TEXTAREA') { _this.onMenuClose(); } } if (event.target.tagName !== 'INPUT' && event.target.tagName !== 'TEXTAREA') { event.preventDefault(); } }; _this.onDropdownIndicatorMouseDown = function (event) { // ignore mouse events that weren't triggered by the primary button if (event && event.type === 'mousedown' && event.button !== 0) { return; } if (_this.props.isDisabled) return; var _this$props4 = _this.props, isMulti = _this$props4.isMulti, menuIsOpen = _this$props4.menuIsOpen; _this.focusInput(); if (menuIsOpen) { _this.setState({ inputIsHiddenAfterUpdate: !isMulti }); _this.onMenuClose(); } else { _this.openMenu('first'); } event.preventDefault(); }; _this.onClearIndicatorMouseDown = function (event) { // ignore mouse events that weren't triggered by the primary button if (event && event.type === 'mousedown' && event.button !== 0) { return; } _this.clearValue(); event.preventDefault(); _this.openAfterFocus = false; if (event.type === 'touchend') { _this.focusInput(); } else { setTimeout(function () { return _this.focusInput(); }); } }; _this.onScroll = function (event) { if (typeof _this.props.closeMenuOnScroll === 'boolean') { if (event.target instanceof HTMLElement && isDocumentElement(event.target)) { _this.props.onMenuClose(); } } else if (typeof _this.props.closeMenuOnScroll === 'function') { if (_this.props.closeMenuOnScroll(event)) { _this.props.onMenuClose(); } } }; _this.onCompositionStart = function () { _this.isComposing = true; }; _this.onCompositionEnd = function () { _this.isComposing = false; }; _this.onTouchStart = function (_ref2) { var touches = _ref2.touches; var touch = touches && touches.item(0); if (!touch) { return; } _this.initialTouchX = touch.clientX; _this.initialTouchY = touch.clientY; _this.userIsDragging = false; }; _this.onTouchMove = function (_ref3) { var touches = _ref3.touches; var touch = touches && touches.item(0); if (!touch) { return; } var deltaX = Math.abs(touch.clientX - _this.initialTouchX); var deltaY = Math.abs(touch.clientY - _this.initialTouchY); var moveThreshold = 5; _this.userIsDragging = deltaX > moveThreshold || deltaY > moveThreshold; }; _this.onTouchEnd = function (event) { if (_this.userIsDragging) return; // close the menu if the user taps outside // we're checking on event.target here instead of event.currentTarget, because we want to assert information // on events on child elements, not the document (which we've attached this handler to). if (_this.controlRef && !_this.controlRef.contains(event.target) && _this.menuListRef && !_this.menuListRef.contains(event.target)) { _this.blurInput(); } // reset move vars _this.initialTouchX = 0; _this.initialTouchY = 0; }; _this.onControlTouchEnd = function (event) { if (_this.userIsDragging) return; _this.onControlMouseDown(event); }; _this.onClearIndicatorTouchEnd = function (event) { if (_this.userIsDragging) return; _this.onClearIndicatorMouseDown(event); }; _this.onDropdownIndicatorTouchEnd = function (event) { if (_this.userIsDragging) return; _this.onDropdownIndicatorMouseDown(event); }; _this.handleInputChange = function (event) { var prevInputValue = _this.props.inputValue; var inputValue = event.currentTarget.value; _this.setState({ inputIsHiddenAfterUpdate: false }); _this.onInputChange(inputValue, { action: 'input-change', prevInputValue: prevInputValue }); if (!_this.props.menuIsOpen) { _this.onMenuOpen(); } }; _this.onInputFocus = function (event) { if (_this.props.onFocus) { _this.props.onFocus(event); } _this.setState({ inputIsHiddenAfterUpdate: false, isFocused: true }); if (_this.openAfterFocus || _this.props.openMenuOnFocus) { _this.openMenu('first'); } _this.openAfterFocus = false; }; _this.onInputBlur = function (event) { var prevInputValue = _this.props.inputValue; if (_this.menuListRef && _this.menuListRef.contains(document.activeElement)) { _this.inputRef.focus(); return; } if (_this.props.onBlur) { _this.props.onBlur(event); } _this.onInputChange('', { action: 'input-blur', prevInputValue: prevInputValue }); _this.onMenuClose(); _this.setState({ focusedValue: null, isFocused: false }); }; _this.onOptionHover = function (focusedOption) { if (_this.blockOptionHover || _this.state.focusedOption === focusedOption) { return; } var options = _this.getFocusableOptions(); var focusedOptionIndex = options.indexOf(focusedOption); _this.setState({ focusedOption: focusedOption, focusedOptionId: focusedOptionIndex > -1 ? _this.getFocusedOptionId(focusedOption) : null }); }; _this.shouldHideSelectedOptions = function () { return shouldHideSelectedOptions(_this.props); }; _this.onValueInputFocus = function (e) { e.preventDefault(); e.stopPropagation(); _this.focus(); }; _this.onKeyDown = function (event) { var _this$props5 = _this.props, isMulti = _this$props5.isMulti, backspaceRemovesValue = _this$props5.backspaceRemovesValue, escapeClearsValue = _this$props5.escapeClearsValue, inputValue = _this$props5.inputValue, isClearable = _this$props5.isClearable, isDisabled = _this$props5.isDisabled, menuIsOpen = _this$props5.menuIsOpen, onKeyDown = _this$props5.onKeyDown, tabSelectsValue = _this$props5.tabSelectsValue, openMenuOnFocus = _this$props5.openMenuOnFocus; var _this$state = _this.state, focusedOption = _this$state.focusedOption, focusedValue = _this$state.focusedValue, selectValue = _this$state.selectValue; if (isDisabled) return; if (typeof onKeyDown === 'function') { onKeyDown(event); if (event.defaultPrevented) { return; } } // Block option hover events when the user has just pressed a key _this.blockOptionHover = true; switch (event.key) { case 'ArrowLeft': if (!isMulti || inputValue) return; _this.focusValue('previous'); break; case 'ArrowRight': if (!isMulti || inputValue) return; _this.focusValue('next'); break; case 'Delete': case 'Backspace': if (inputValue) return; if (focusedValue) { _this.removeValue(focusedValue); } else { if (!backspaceRemovesValue) return; if (isMulti) { _this.popValue(); } else if (isClearable) { _this.clearValue(); } } break; case 'Tab': if (_this.isComposing) return; if (event.shiftKey || !menuIsOpen || !tabSelectsValue || !focusedOption || // don't capture the event if the menu opens on focus and the focused // option is already selected; it breaks the flow of navigation openMenuOnFocus && _this.isOptionSelected(focusedOption, selectValue)) { return; } _this.selectOption(focusedOption); break; case 'Enter': if (event.keyCode === 229) { // ignore the keydown event from an Input Method Editor(IME) // ref. https://www.w3.org/TR/uievents/#determine-keydown-keyup-keyCode break; } if (menuIsOpen) { if (!focusedOption) return; if (_this.isComposing) return; _this.selectOption(focusedOption); break; } return; case 'Escape': if (menuIsOpen) { _this.setState({ inputIsHiddenAfterUpdate: false }); _this.onInputChange('', { action: 'menu-close', prevInputValue: inputValue }); _this.onMenuClose(); } else if (isClearable && escapeClearsValue) { _this.clearValue(); } break; case ' ': // space if (inputValue) { return; } if (!menuIsOpen) { _this.openMenu('first'); break; } if (!focusedOption) return; _this.selectOption(focusedOption); break; case 'ArrowUp': if (menuIsOpen) { _this.focusOption('up'); } else { _this.openMenu('last'); } break; case 'ArrowDown': if (menuIsOpen) { _this.focusOption('down'); } else { _this.openMenu('first'); } break; case 'PageUp': if (!menuIsOpen) return; _this.focusOption('pageup'); break; case 'PageDown': if (!menuIsOpen) return; _this.focusOption('pagedown'); break; case 'Home': if (!menuIsOpen) return; _this.focusOption('first'); break; case 'End': if (!menuIsOpen) return; _this.focusOption('last'); break; default: return; } event.preventDefault(); }; _this.state.instancePrefix = 'react-select-' + (_this.props.instanceId || ++instanceId); _this.state.selectValue = cleanValue(_props.value); // Set focusedOption if menuIsOpen is set on init (e.g. defaultMenuIsOpen) if (_props.menuIsOpen && _this.state.selectValue.length) { var focusableOptionsWithIds = _this.getFocusableOptionsWithIds(); var focusableOptions = _this.buildFocusableOptions(); var optionIndex = focusableOptions.indexOf(_this.state.selectValue[0]); _this.state.focusableOptionsWithIds = focusableOptionsWithIds; _this.state.focusedOption = focusableOptions[optionIndex]; _this.state.focusedOptionId = getFocusedOptionId(focusableOptionsWithIds, focusableOptions[optionIndex]); } return _this; } _createClass(Select, [{ key: "componentDidMount", value: function componentDidMount() { this.startListeningComposition(); this.startListeningToTouch(); if (this.props.closeMenuOnScroll && document && document.addEventListener) { // Listen to all scroll events, and filter them out inside of 'onScroll' document.addEventListener('scroll', this.onScroll, true); } if (this.props.autoFocus) { this.focusInput(); } // Scroll focusedOption into view if menuIsOpen is set on mount (e.g. defaultMenuIsOpen) if (this.props.menuIsOpen && this.state.focusedOption && this.menuListRef && this.focusedOptionRef) { scrollIntoView(this.menuListRef, this.focusedOptionRef); } } }, { key: "componentDidUpdate", value: function componentDidUpdate(prevProps) { var _this$props6 = this.props, isDisabled = _this$props6.isDisabled, menuIsOpen = _this$props6.menuIsOpen; var isFocused = this.state.isFocused; if ( // ensure focus is restored correctly when the control becomes enabled isFocused && !isDisabled && prevProps.isDisabled || // ensure focus is on the Input when the menu opens isFocused && menuIsOpen && !prevProps.menuIsOpen) { this.focusInput(); } if (isFocused && isDisabled && !prevProps.isDisabled) { // ensure select state gets blurred in case Select is programmatically disabled while focused // eslint-disable-next-line react/no-did-update-set-state this.setState({ isFocused: false }, this.onMenuClose); } else if (!isFocused && !isDisabled && prevProps.isDisabled && this.inputRef === document.activeElement) { // ensure select state gets focused in case Select is programatically re-enabled while focused (Firefox) // eslint-disable-next-line react/no-did-update-set-state this.setState({ isFocused: true }); } // scroll the focused option into view if necessary if (this.menuListRef && this.focusedOptionRef && this.scrollToFocusedOptionOnUpdate) { scrollIntoView(this.menuListRef, this.focusedOptionRef); this.scrollToFocusedOptionOnUpdate = false; } } }, { key: "componentWillUnmount", value: function componentWillUnmount() { this.stopListeningComposition(); this.stopListeningToTouch(); document.removeEventListener('scroll', this.onScroll, true); } // ============================== // Consumer Handlers // ============================== }, { key: "onMenuOpen", value: function onMenuOpen() { this.props.onMenuOpen(); } }, { key: "onMenuClose", value: function onMenuClose() { this.onInputChange('', { action: 'menu-close', prevInputValue: this.props.inputValue }); this.props.onMenuClose(); } }, { key: "onInputChange", value: function onInputChange(newValue, actionMeta) { this.props.onInputChange(newValue, actionMeta); } // ============================== // Methods // ============================== }, { key: "focusInput", value: function focusInput() { if (!this.inputRef) return; this.inputRef.focus(); } }, { key: "blurInput", value: function blurInput() { if (!this.inputRef) return; this.inputRef.blur(); } // aliased for consumers }, { key: "openMenu", value: function openMenu(focusOption) { var _this2 = this; var _this$state2 = this.state, selectValue = _this$state2.selectValue, isFocused = _this$state2.isFocused; var focusableOptions = this.buildFocusableOptions(); var openAtIndex = focusOption === 'first' ? 0 : focusableOptions.length - 1; if (!this.props.isMulti) { var selectedIndex = focusableOptions.indexOf(selectValue[0]); if (selectedIndex > -1) { openAtIndex = selectedIndex; } } // only scroll if the menu isn't already open this.scrollToFocusedOptionOnUpdate = !(isFocused && this.menuListRef); this.setState({ inputIsHiddenAfterUpdate: false, focusedValue: null, focusedOption: focusableOptions[openAtIndex], focusedOptionId: this.getFocusedOptionId(focusableOptions[openAtIndex]) }, function () { return _this2.onMenuOpen(); }); } }, { key: "focusValue", value: function focusValue(direction) { var _this$state3 = this.state, selectValue = _this$state3.selectValue, focusedValue = _this$state3.focusedValue; // Only multiselects support value focusing if (!this.props.isMulti) return; this.setState({ focusedOption: null }); var focusedIndex = selectValue.indexOf(focusedValue); if (!focusedValue) { focusedIndex = -1; } var lastIndex = selectValue.length - 1; var nextFocus = -1; if (!selectValue.length) return; switch (direction) { case 'previous': if (focusedIndex === 0) { // don't cycle from the start to the end nextFocus = 0; } else if (focusedIndex === -1) { // if nothing is focused, focus the last value first nextFocus = lastIndex; } else { nextFocus = focusedIndex - 1; } break; case 'next': if (focusedIndex > -1 && focusedIndex < lastIndex) { nextFocus = focusedIndex + 1; } break; } this.setState({ inputIsHidden: nextFocus !== -1, focusedValue: selectValue[nextFocus] }); } }, { key: "focusOption", value: function focusOption() { var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'first'; var pageSize = this.props.pageSize; var focusedOption = this.state.focusedOption; var options = this.getFocusableOptions(); if (!options.length) return; var nextFocus = 0; // handles 'first' var focusedIndex = options.indexOf(focusedOption); if (!focusedOption) { focusedIndex = -1; } if (direction === 'up') { nextFocus = focusedIndex > 0 ? focusedIndex - 1 : options.length - 1; } else if (direction === 'down') { nextFocus = (focusedIndex + 1) % options.length; } else if (direction === 'pageup') { nextFocus = focusedIndex - pageSize; if (nextFocus < 0) nextFocus = 0; } else if (direction === 'pagedown') { nextFocus = focusedIndex + pageSize; if (nextFocus > options.length - 1) nextFocus = options.length - 1; } else if (direction === 'last') { nextFocus = options.length - 1; } this.scrollToFocusedOptionOnUpdate = true; this.setState({ focusedOption: options[nextFocus], focusedValue: null, focusedOptionId: this.getFocusedOptionId(options[nextFocus]) }); } }, { key: "getTheme", value: // ============================== // Getters // ============================== function getTheme() { // Use the default theme if there are no customisations. if (!this.props.theme) { return defaultTheme; } // If the theme prop is a function, assume the function // knows how to merge the passed-in default theme with // its own modifications. if (typeof this.props.theme === 'function') { return this.props.theme(defaultTheme); } // Otherwise, if a plain theme object was passed in, // overlay it with the default theme. return _objectSpread2(_objectSpread2({}, defaultTheme), this.props.theme); } }, { key: "getCommonProps", value: function getCommonProps() { var clearValue = this.clearValue, cx = this.cx, getStyles = this.getStyles, getClassNames = this.getClassNames, getValue = this.getValue, selectOption = this.selectOption, setValue = this.setValue, props = this.props; var isMulti = props.isMulti, isRtl = props.isRtl, options = props.options; var hasValue = this.hasValue(); return { clearValue: clearValue, cx: cx, getStyles: getStyles, getClassNames: getClassNames, getValue: getValue, hasValue: hasValue, isMulti: isMulti, isRtl: isRtl, options: options, selectOption: selectOption, selectProps: props, setValue: setValue, theme: this.getTheme() }; } }, { key: "hasValue", value: function hasValue() { var selectValue = this.state.selectValue; return selectValue.length > 0; } }, { key: "hasOptions", value: function hasOptions() { return !!this.getFocusableOptions().length; } }, { key: "isClearable", value: function isClearable() { var _this$props7 = this.props, isClearable = _this$props7.isClearable, isMulti = _this$props7.isMulti; // single select, by default, IS NOT clearable // multi select, by default, IS clearable if (isClearable === undefined) return isMulti; return isClearable; } }, { key: "isOptionDisabled", value: function isOptionDisabled(option, selectValue) { return _isOptionDisabled(this.props, option, selectValue); } }, { key: "isOptionSelected", value: function isOptionSelected(option, selectValue) { return _isOptionSelected(this.props, option, selectValue); } }, { key: "filterOption", value: function filterOption(option, inputValue) { return _filterOption(this.props, option, inputValue); } }, { key: "formatOptionLabel", value: function formatOptionLabel(data, context) { if (typeof this.props.formatOptionLabel === 'function') { var _inputValue = this.props.inputValue; var _selectValue = this.state.selectValue; return this.props.formatOptionLabel(data, { context: context, inputValue: _inputValue, selectValue: _selectValue }); } else { return this.getOptionLabel(data); } } }, { key: "formatGroupLabel", value: function formatGroupLabel(data) { return this.props.formatGroupLabel(data); } // ============================== // Mouse Handlers // ============================== }, { key: "startListeningComposition", value: // ============================== // Composition Handlers // ============================== function startListeningComposition() { if (document && document.addEventListener) { document.addEventListener('compositionstart', this.onCompositionStart, false); document.addEventListener('compositionend', this.onCompositionEnd, false); } } }, { key: "stopListeningComposition", value: function stopListeningComposition() { if (document && document.removeEventListener) { document.removeEventListener('compositionstart', this.onCompositionStart); document.removeEventListener('compositionend', this.onCompositionEnd); } } }, { key: "startListeningToTouch", value: // ============================== // Touch Handlers // ============================== function startListeningToTouch() { if (document && document.addEventListener) { document.addEventListener('touchstart', this.onTouchStart, false); document.addEventListener('touchmove', this.onTouchMove, false); document.addEventListener('touchend', this.onTouchEnd, false); } } }, { key: "stopListeningToTouch", value: function stopListeningToTouch() { if (document && document.removeEventListener) { document.removeEventListener('touchstart', this.onTouchStart); document.removeEventListener('touchmove', this.onTouchMove); document.removeEventListener('touchend', this.onTouchEnd); } } }, { key: "renderInput", value: // ============================== // Renderers // ============================== function renderInput() { var _this$props8 = this.props, isDisabled = _this$props8.isDisabled, isSearchable = _this$props8.isSearchable, inputId = _this$props8.inputId, inputValue = _this$props8.inputValue, tabIndex = _this$props8.tabIndex, form = _this$props8.form, menuIsOpen = _this$props8.menuIsOpen, required = _this$props8.required; var _this$getComponents = this.getComponents(), Input = _this$getComponents.Input; var _this$state4 = this.state, inputIsHidden = _this$state4.inputIsHidden, ariaSelection = _this$state4.ariaSelection; var commonProps = this.commonProps; var id = inputId || this.getElementId('input'); // aria attributes makes the JSX "noisy", separated for clarity var ariaAttributes = _objectSpread2(_objectSpread2(_objectSpread2({ 'aria-autocomplete': 'list', 'aria-expanded': menuIsOpen, 'aria-haspopup': true, 'aria-errormessage': this.props['aria-errormessage'], 'aria-invalid': this.props['aria-invalid'], 'aria-label': this.props['aria-label'], 'aria-labelledby': this.props['aria-labelledby'], 'aria-required': required, role: 'combobox', 'aria-activedescendant': this.isAppleDevice ? undefined : this.state.focusedOptionId || '' }, menuIsOpen && { 'aria-controls': this.getElementId('listbox') }), !isSearchable && { 'aria-readonly': true }), this.hasValue() ? (ariaSelection === null || ariaSelection === void 0 ? void 0 : ariaSelection.action) === 'initial-input-focus' && { 'aria-describedby': this.getElementId('live-region') } : { 'aria-describedby': this.getElementId('placeholder') }); if (!isSearchable) { // use a dummy input to maintain focus/blur functionality return /*#__PURE__*/React__namespace.createElement(DummyInput, _extends$k({ id: id, innerRef: this.getInputRef, onBlur: this.onInputBlur, onChange: noop, onFocus: this.onInputFocus, disabled: isDisabled, tabIndex: tabIndex, inputMode: "none", form: form, value: "" }, ariaAttributes)); } return /*#__PURE__*/React__namespace.createElement(Input, _extends$k({}, commonProps, { autoCapitalize: "none", autoComplete: "off", autoCorrect: "off", id: id, innerRef: this.getInputRef, isDisabled: isDisabled, isHidden: inputIsHidden, onBlur: this.onInputBlur, onChange: this.handleInputChange, onFocus: this.onInputFocus, spellCheck: "false", tabIndex: tabIndex, form: form, type: "text", value: inputValue }, ariaAttributes)); } }, { key: "renderPlaceholderOrValue", value: function renderPlaceholderOrValue() { var _this3 = this; var _this$getComponents2 = this.getComponents(), MultiValue = _this$getComponents2.MultiValue, MultiValueContainer = _this$getComponents2.MultiValueContainer, MultiValueLabel = _this$getComponents2.MultiValueLabel, MultiValueRemove = _this$getComponents2.MultiValueRemove, SingleValue = _this$getComponents2.SingleValue, Placeholder = _this$getComponents2.Placeholder; var commonProps = this.commonProps; var _this$props9 = this.props, controlShouldRenderValue = _this$props9.controlShouldRenderValue, isDisabled = _this$props9.isDisabled, isMulti = _this$props9.isMulti, inputValue = _this$props9.inputValue, placeholder = _this$props9.placeholder; var _this$state5 = this.state, selectValue = _this$state5.selectValue, focusedValue = _this$state5.focusedValue, isFocused = _this$state5.isFocused; if (!this.hasValue() || !controlShouldRenderValue) { return inputValue ? null : /*#__PURE__*/React__namespace.createElement(Placeholder, _extends$k({}, commonProps, { key: "placeholder", isDisabled: isDisabled, isFocused: isFocused, innerProps: { id: this.getElementId('placeholder') } }), placeholder); } if (isMulti) { return selectValue.map(function (opt, index) { var isOptionFocused = opt === focusedValue; var key = "".concat(_this3.getOptionLabel(opt), "-").concat(_this3.getOptionValue(opt)); return /*#__PURE__*/React__namespace.createElement(MultiValue, _extends$k({}, commonProps, { components: { Container: MultiValueContainer, Label: MultiValueLabel, Remove: MultiValueRemove }, isFocused: isOptionFocused, isDisabled: isDisabled, key: key, index: index, removeProps: { onClick: function onClick() { return _this3.removeValue(opt); }, onTouchEnd: function onTouchEnd() { return _this3.removeValue(opt); }, onMouseDown: function onMouseDown(e) { e.preventDefault(); } }, data: opt }), _this3.formatOptionLabel(opt, 'value')); }); } if (inputValue) { return null; } var singleValue = selectValue[0]; return /*#__PURE__*/React__namespace.createElement(SingleValue, _extends$k({}, commonProps, { data: singleValue, isDisabled: isDisabled }), this.formatOptionLabel(singleValue, 'value')); } }, { key: "renderClearIndicator", value: function renderClearIndicator() { var _this$getComponents3 = this.getComponents(), ClearIndicator = _this$getComponents3.ClearIndicator; var commonProps = this.commonProps; var _this$props10 = this.props, isDisabled = _this$props10.isDisabled, isLoading = _this$props10.isLoading; var isFocused = this.state.isFocused; if (!this.isClearable() || !ClearIndicator || isDisabled || !this.hasValue() || isLoading) { return null; } var innerProps = { onMouseDown: this.onClearIndicatorMouseDown, onTouchEnd: this.onClearIndicatorTouchEnd, 'aria-hidden': 'true' }; return /*#__PURE__*/React__namespace.createElement(ClearIndicator, _extends$k({}, commonProps, { innerProps: innerProps, isFocused: isFocused })); } }, { key: "renderLoadingIndicator", value: function renderLoadingIndicator() { var _this$getComponents4 = this.getComponents(), LoadingIndicator = _this$getComponents4.LoadingIndicator; var commonProps = this.commonProps; var _this$props11 = this.props, isDisabled = _this$props11.isDisabled, isLoading = _this$props11.isLoading; var isFocused = this.state.isFocused; if (!LoadingIndicator || !isLoading) return null; var innerProps = { 'aria-hidden': 'true' }; return /*#__PURE__*/React__namespace.createElement(LoadingIndicator, _extends$k({}, commonProps, { innerProps: innerProps, isDisabled: isDisabled, isFocused: isFocused })); } }, { key: "renderIndicatorSeparator", value: function renderIndicatorSeparator() { var _this$getComponents5 = this.getComponents(), DropdownIndicator = _this$getComponents5.DropdownIndicator, IndicatorSeparator = _this$getComponents5.IndicatorSeparator; // separator doesn't make sense without the dropdown indicator if (!DropdownIndicator || !IndicatorSeparator) return null; var commonProps = this.commonProps; var isDisabled = this.props.isDisabled; var isFocused = this.state.isFocused; return /*#__PURE__*/React__namespace.createElement(IndicatorSeparator, _extends$k({}, commonProps, { isDisabled: isDisabled, isFocused: isFocused })); } }, { key: "renderDropdownIndicator", value: function renderDropdownIndicator() { var _this$getComponents6 = this.getComponents(), DropdownIndicator = _this$getComponents6.DropdownIndicator; if (!DropdownIndicator) return null; var commonProps = this.commonProps; var isDisabled = this.props.isDisabled; var isFocused = this.state.isFocused; var innerProps = { onMouseDown: this.onDropdownIndicatorMouseDown, onTouchEnd: this.onDropdownIndicatorTouchEnd, 'aria-hidden': 'true' }; return /*#__PURE__*/React__namespace.createElement(DropdownIndicator, _extends$k({}, commonProps, { innerProps: innerProps, isDisabled: isDisabled, isFocused: isFocused })); } }, { key: "renderMenu", value: function renderMenu() { var _this4 = this; var _this$getComponents7 = this.getComponents(), Group = _this$getComponents7.Group, GroupHeading = _this$getComponents7.GroupHeading, Menu = _this$getComponents7.Menu, MenuList = _this$getComponents7.MenuList, MenuPortal = _this$getComponents7.MenuPortal, LoadingMessage = _this$getComponents7.LoadingMessage, NoOptionsMessage = _this$getComponents7.NoOptionsMessage, Option = _this$getComponents7.Option; var commonProps = this.commonProps; var focusedOption = this.state.focusedOption; var _this$props12 = this.props, captureMenuScroll = _this$props12.captureMenuScroll, inputValue = _this$props12.inputValue, isLoading = _this$props12.isLoading, loadingMessage = _this$props12.loadingMessage, minMenuHeight = _this$props12.minMenuHeight, maxMenuHeight = _this$props12.maxMenuHeight, menuIsOpen = _this$props12.menuIsOpen, menuPlacement = _this$props12.menuPlacement, menuPosition = _this$props12.menuPosition, menuPortalTarget = _this$props12.menuPortalTarget, menuShouldBlockScroll = _this$props12.menuShouldBlockScroll, menuShouldScrollIntoView = _this$props12.menuShouldScrollIntoView, noOptionsMessage = _this$props12.noOptionsMessage, onMenuScrollToTop = _this$props12.onMenuScrollToTop, onMenuScrollToBottom = _this$props12.onMenuScrollToBottom; if (!menuIsOpen) return null; // TODO: Internal Option Type here var render = function render(props, id) { var type = props.type, data = props.data, isDisabled = props.isDisabled, isSelected = props.isSelected, label = props.label, value = props.value; var isFocused = focusedOption === data; var onHover = isDisabled ? undefined : function () { return _this4.onOptionHover(data); }; var onSelect = isDisabled ? undefined : function () { return _this4.selectOption(data); }; var optionId = "".concat(_this4.getElementId('option'), "-").concat(id); var innerProps = { id: optionId, onClick: onSelect, onMouseMove: onHover, onMouseOver: onHover, tabIndex: -1, role: 'option', 'aria-selected': _this4.isAppleDevice ? undefined : isSelected // is not supported on Apple devices }; return /*#__PURE__*/React__namespace.createElement(Option, _extends$k({}, commonProps, { innerProps: innerProps, data: data, isDisabled: isDisabled, isSelected: isSelected, key: optionId, label: label, type: type, value: value, isFocused: isFocused, innerRef: isFocused ? _this4.getFocusedOptionRef : undefined }), _this4.formatOptionLabel(props.data, 'menu')); }; var menuUI; if (this.hasOptions()) { menuUI = this.getCategorizedOptions().map(function (item) { if (item.type === 'group') { var _data = item.data, options = item.options, groupIndex = item.index; var groupId = "".concat(_this4.getElementId('group'), "-").concat(groupIndex); var headingId = "".concat(groupId, "-heading"); return /*#__PURE__*/React__namespace.createElement(Group, _extends$k({}, commonProps, { key: groupId, data: _data, options: options, Heading: GroupHeading, headingProps: { id: headingId, data: item.data }, label: _this4.formatGroupLabel(item.data) }), item.options.map(function (option) { return render(option, "".concat(groupIndex, "-").concat(option.index)); })); } else if (item.type === 'option') { return render(item, "".concat(item.index)); } }); } else if (isLoading) { var message = loadingMessage({ inputValue: inputValue }); if (message === null) return null; menuUI = /*#__PURE__*/React__namespace.createElement(LoadingMessage, commonProps, message); } else { var _message = noOptionsMessage({ inputValue: inputValue }); if (_message === null) return null; menuUI = /*#__PURE__*/React__namespace.createElement(NoOptionsMessage, commonProps, _message); } var menuPlacementProps = { minMenuHeight: minMenuHeight, maxMenuHeight: maxMenuHeight, menuPlacement: menuPlacement, menuPosition: menuPosition, menuShouldScrollIntoView: menuShouldScrollIntoView }; var menuElement = /*#__PURE__*/React__namespace.createElement(MenuPlacer, _extends$k({}, commonProps, menuPlacementProps), function (_ref4) { var ref = _ref4.ref, _ref4$placerProps = _ref4.placerProps, placement = _ref4$placerProps.placement, maxHeight = _ref4$placerProps.maxHeight; return /*#__PURE__*/React__namespace.createElement(Menu, _extends$k({}, commonProps, menuPlacementProps, { innerRef: ref, innerProps: { onMouseDown: _this4.onMenuMouseDown, onMouseMove: _this4.onMenuMouseMove }, isLoading: isLoading, placement: placement }), /*#__PURE__*/React__namespace.createElement(ScrollManager, { captureEnabled: captureMenuScroll, onTopArrive: onMenuScrollToTop, onBottomArrive: onMenuScrollToBottom, lockEnabled: menuShouldBlockScroll }, function (scrollTargetRef) { return /*#__PURE__*/React__namespace.createElement(MenuList, _extends$k({}, commonProps, { innerRef: function innerRef(instance) { _this4.getMenuListRef(instance); scrollTargetRef(instance); }, innerProps: { role: 'listbox', 'aria-multiselectable': commonProps.isMulti, id: _this4.getElementId('listbox') }, isLoading: isLoading, maxHeight: maxHeight, focusedOption: focusedOption }), menuUI); })); }); // positioning behaviour is almost identical for portalled and fixed, // so we use the same component. the actual portalling logic is forked // within the component based on `menuPosition` return menuPortalTarget || menuPosition === 'fixed' ? /*#__PURE__*/React__namespace.createElement(MenuPortal, _extends$k({}, commonProps, { appendTo: menuPortalTarget, controlElement: this.controlRef, menuPlacement: menuPlacement, menuPosition: menuPosition }), menuElement) : menuElement; } }, { key: "renderFormField", value: function renderFormField() { var _this5 = this; var _this$props13 = this.props, delimiter = _this$props13.delimiter, isDisabled = _this$props13.isDisabled, isMulti = _this$props13.isMulti, name = _this$props13.name, required = _this$props13.required; var selectValue = this.state.selectValue; if (required && !this.hasValue() && !isDisabled) { return /*#__PURE__*/React__namespace.createElement(RequiredInput$1, { name: name, onFocus: this.onValueInputFocus }); } if (!name || isDisabled) return; if (isMulti) { if (delimiter) { var value = selectValue.map(function (opt) { return _this5.getOptionValue(opt); }).join(delimiter); return /*#__PURE__*/React__namespace.createElement("input", { name: name, type: "hidden", value: value }); } else { var input = selectValue.length > 0 ? selectValue.map(function (opt, i) { return /*#__PURE__*/React__namespace.createElement("input", { key: "i-".concat(i), name: name, type: "hidden", value: _this5.getOptionValue(opt) }); }) : /*#__PURE__*/React__namespace.createElement("input", { name: name, type: "hidden", value: "" }); return /*#__PURE__*/React__namespace.createElement("div", null, input); } } else { var _value = selectValue[0] ? this.getOptionValue(selectValue[0]) : ''; return /*#__PURE__*/React__namespace.createElement("input", { name: name, type: "hidden", value: _value }); } } }, { key: "renderLiveRegion", value: function renderLiveRegion() { var commonProps = this.commonProps; var _this$state6 = this.state, ariaSelection = _this$state6.ariaSelection, focusedOption = _this$state6.focusedOption, focusedValue = _this$state6.focusedValue, isFocused = _this$state6.isFocused, selectValue = _this$state6.selectValue; var focusableOptions = this.getFocusableOptions(); return /*#__PURE__*/React__namespace.createElement(LiveRegion$1, _extends$k({}, commonProps, { id: this.getElementId('live-region'), ariaSelection: ariaSelection, focusedOption: focusedOption, focusedValue: focusedValue, isFocused: isFocused, selectValue: selectValue, focusableOptions: focusableOptions, isAppleDevice: this.isAppleDevice })); } }, { key: "render", value: function render() { var _this$getComponents8 = this.getComponents(), Control = _this$getComponents8.Control, IndicatorsContainer = _this$getComponents8.IndicatorsContainer, SelectContainer = _this$getComponents8.SelectContainer, ValueContainer = _this$getComponents8.ValueContainer; var _this$props14 = this.props, className = _this$props14.className, id = _this$props14.id, isDisabled = _this$props14.isDisabled, menuIsOpen = _this$props14.menuIsOpen; var isFocused = this.state.isFocused; var commonProps = this.commonProps = this.getCommonProps(); return /*#__PURE__*/React__namespace.createElement(SelectContainer, _extends$k({}, commonProps, { className: className, innerProps: { id: id, onKeyDown: this.onKeyDown }, isDisabled: isDisabled, isFocused: isFocused }), this.renderLiveRegion(), /*#__PURE__*/React__namespace.createElement(Control, _extends$k({}, commonProps, { innerRef: this.getControlRef, innerProps: { onMouseDown: this.onControlMouseDown, onTouchEnd: this.onControlTouchEnd }, isDisabled: isDisabled, isFocused: isFocused, menuIsOpen: menuIsOpen }), /*#__PURE__*/React__namespace.createElement(ValueContainer, _extends$k({}, commonProps, { isDisabled: isDisabled }), this.renderPlaceholderOrValue(), this.renderInput()), /*#__PURE__*/React__namespace.createElement(IndicatorsContainer, _extends$k({}, commonProps, { isDisabled: isDisabled }), this.renderClearIndicator(), this.renderLoadingIndicator(), this.renderIndicatorSeparator(), this.renderDropdownIndicator())), this.renderMenu(), this.renderFormField()); } }], [{ key: "getDerivedStateFromProps", value: function getDerivedStateFromProps(props, state) { var prevProps = state.prevProps, clearFocusValueOnUpdate = state.clearFocusValueOnUpdate, inputIsHiddenAfterUpdate = state.inputIsHiddenAfterUpdate, ariaSelection = state.ariaSelection, isFocused = state.isFocused, prevWasFocused = state.prevWasFocused, instancePrefix = state.instancePrefix; var options = props.options, value = props.value, menuIsOpen = props.menuIsOpen, inputValue = props.inputValue, isMulti = props.isMulti; var selectValue = cleanValue(value); var newMenuOptionsState = {}; if (prevProps && (value !== prevProps.value || options !== prevProps.options || menuIsOpen !== prevProps.menuIsOpen || inputValue !== prevProps.inputValue)) { var focusableOptions = menuIsOpen ? buildFocusableOptions(props, selectValue) : []; var focusableOptionsWithIds = menuIsOpen ? buildFocusableOptionsWithIds(buildCategorizedOptions(props, selectValue), "".concat(instancePrefix, "-option")) : []; var focusedValue = clearFocusValueOnUpdate ? getNextFocusedValue(state, selectValue) : null; var focusedOption = getNextFocusedOption(state, focusableOptions); var focusedOptionId = getFocusedOptionId(focusableOptionsWithIds, focusedOption); newMenuOptionsState = { selectValue: selectValue, focusedOption: focusedOption, focusedOptionId: focusedOptionId, focusableOptionsWithIds: focusableOptionsWithIds, focusedValue: focusedValue, clearFocusValueOnUpdate: false }; } // some updates should toggle the state of the input visibility var newInputIsHiddenState = inputIsHiddenAfterUpdate != null && props !== prevProps ? { inputIsHidden: inputIsHiddenAfterUpdate, inputIsHiddenAfterUpdate: undefined } : {}; var newAriaSelection = ariaSelection; var hasKeptFocus = isFocused && prevWasFocused; if (isFocused && !hasKeptFocus) { // If `value` or `defaultValue` props are not empty then announce them // when the Select is initially focused newAriaSelection = { value: valueTernary(isMulti, selectValue, selectValue[0] || null), options: selectValue, action: 'initial-input-focus' }; hasKeptFocus = !prevWasFocused; } // If the 'initial-input-focus' action has been set already // then reset the ariaSelection to null if ((ariaSelection === null || ariaSelection === void 0 ? void 0 : ariaSelection.action) === 'initial-input-focus') { newAriaSelection = null; } return _objectSpread2(_objectSpread2(_objectSpread2({}, newMenuOptionsState), newInputIsHiddenState), {}, { prevProps: props, ariaSelection: newAriaSelection, prevWasFocused: hasKeptFocus }); } }]); return Select; }(React.Component); Select$1.defaultProps = defaultProps; var StateManagedSelect = /*#__PURE__*/React.forwardRef(function (props, ref) { var baseSelectProps = useStateManager(props); return /*#__PURE__*/React__namespace.createElement(Select$1, _extends$k({ ref: ref }, baseSelectProps)); }); var StateManagedSelect$1 = StateManagedSelect; const useSelectTheme = () => { const theme = Ze(); const [currentTheme, setCurrentTheme] = React.useState(defautTheme); React.useEffect(() => { if (theme) { setCurrentTheme(theme); } }, [theme]); const selectTheme = config => ({ ...config, borderRadius: 2, spacing: { ...config.spacing, controlHeight: 32, baseUnit: 3 }, colors: { ...config.colors, primary: currentTheme.colors.primary100, danger: currentTheme.colors.error, dangerLight: currentTheme.colors.errorLight, primary25: rgba(currentTheme.colors.black, 0.06), primary50: rgba(currentTheme.colors.black, 0.125), primary75: rgba(currentTheme.colors.black, 0.25) } }); return { theme: currentTheme, selectTheme }; }; function _extends$7() { _extends$7 = Object.assign ? Object.assign.bind() : 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; }; return _extends$7.apply(this, arguments); } let SelectComponent$1; if (StateManagedSelect$1.default) { SelectComponent$1 = StateManagedSelect$1.default; } else { SelectComponent$1 = StateManagedSelect$1; } const Select = props => { const { value, onChange, variant, isMulti, ...selectProps } = props; const { theme, selectTheme } = useSelectTheme(); const styles = variant === 'filter' ? filterStyles(theme) : selectStyles(theme); const handleChange = selected => { if (typeof onChange === 'function') onChange(selected); }; return /*#__PURE__*/React__namespace.default.createElement(SelectComponent$1, _extends$7({ className: cssClass('Select'), value: value, theme: selectTheme, styles: styles, onChange: handleChange, isClearable: true, isMulti: isMulti }, selectProps)); }; Select.defaultProps = { variant: 'default', onChange: noop$2 }; Select.displayName = 'Select'; var _excluded = ["defaultOptions", "cacheOptions", "loadOptions", "options", "isLoading", "onInputChange", "filterOption"]; function useAsync(_ref) { var _ref$defaultOptions = _ref.defaultOptions, propsDefaultOptions = _ref$defaultOptions === void 0 ? false : _ref$defaultOptions, _ref$cacheOptions = _ref.cacheOptions, cacheOptions = _ref$cacheOptions === void 0 ? false : _ref$cacheOptions, propsLoadOptions = _ref.loadOptions; _ref.options; var _ref$isLoading = _ref.isLoading, propsIsLoading = _ref$isLoading === void 0 ? false : _ref$isLoading, propsOnInputChange = _ref.onInputChange, _ref$filterOption = _ref.filterOption, filterOption = _ref$filterOption === void 0 ? null : _ref$filterOption, restSelectProps = _objectWithoutProperties(_ref, _excluded); var propsInputValue = restSelectProps.inputValue; var lastRequest = React.useRef(undefined); var mounted = React.useRef(false); var _useState = React.useState(Array.isArray(propsDefaultOptions) ? propsDefaultOptions : undefined), _useState2 = _slicedToArray(_useState, 2), defaultOptions = _useState2[0], setDefaultOptions = _useState2[1]; var _useState3 = React.useState(typeof propsInputValue !== 'undefined' ? propsInputValue : ''), _useState4 = _slicedToArray(_useState3, 2), stateInputValue = _useState4[0], setStateInputValue = _useState4[1]; var _useState5 = React.useState(propsDefaultOptions === true), _useState6 = _slicedToArray(_useState5, 2), isLoading = _useState6[0], setIsLoading = _useState6[1]; var _useState7 = React.useState(undefined), _useState8 = _slicedToArray(_useState7, 2), loadedInputValue = _useState8[0], setLoadedInputValue = _useState8[1]; var _useState9 = React.useState([]), _useState10 = _slicedToArray(_useState9, 2), loadedOptions = _useState10[0], setLoadedOptions = _useState10[1]; var _useState11 = React.useState(false), _useState12 = _slicedToArray(_useState11, 2), passEmptyOptions = _useState12[0], setPassEmptyOptions = _useState12[1]; var _useState13 = React.useState({}), _useState14 = _slicedToArray(_useState13, 2), optionsCache = _useState14[0], setOptionsCache = _useState14[1]; var _useState15 = React.useState(undefined), _useState16 = _slicedToArray(_useState15, 2), prevDefaultOptions = _useState16[0], setPrevDefaultOptions = _useState16[1]; var _useState17 = React.useState(undefined), _useState18 = _slicedToArray(_useState17, 2), prevCacheOptions = _useState18[0], setPrevCacheOptions = _useState18[1]; if (cacheOptions !== prevCacheOptions) { setOptionsCache({}); setPrevCacheOptions(cacheOptions); } if (propsDefaultOptions !== prevDefaultOptions) { setDefaultOptions(Array.isArray(propsDefaultOptions) ? propsDefaultOptions : undefined); setPrevDefaultOptions(propsDefaultOptions); } React.useEffect(function () { mounted.current = true; return function () { mounted.current = false; }; }, []); var loadOptions = React.useCallback(function (inputValue, callback) { if (!propsLoadOptions) return callback(); var loader = propsLoadOptions(inputValue, callback); if (loader && typeof loader.then === 'function') { loader.then(callback, function () { return callback(); }); } }, [propsLoadOptions]); React.useEffect(function () { if (propsDefaultOptions === true) { loadOptions(stateInputValue, function (options) { if (!mounted.current) return; setDefaultOptions(options || []); setIsLoading(!!lastRequest.current); }); } // NOTE: this effect is designed to only run when the component mounts, // so we don't want to include any hook dependencies // eslint-disable-next-line react-hooks/exhaustive-deps }, []); var onInputChange = React.useCallback(function (newValue, actionMeta) { var inputValue = handleInputChange(newValue, actionMeta, propsOnInputChange); if (!inputValue) { lastRequest.current = undefined; setStateInputValue(''); setLoadedInputValue(''); setLoadedOptions([]); setIsLoading(false); setPassEmptyOptions(false); return; } if (cacheOptions && optionsCache[inputValue]) { setStateInputValue(inputValue); setLoadedInputValue(inputValue); setLoadedOptions(optionsCache[inputValue]); setIsLoading(false); setPassEmptyOptions(false); } else { var request = lastRequest.current = {}; setStateInputValue(inputValue); setIsLoading(true); setPassEmptyOptions(!loadedInputValue); loadOptions(inputValue, function (options) { if (!mounted) return; if (request !== lastRequest.current) return; lastRequest.current = undefined; setIsLoading(false); setLoadedInputValue(inputValue); setLoadedOptions(options || []); setPassEmptyOptions(false); setOptionsCache(options ? _objectSpread2(_objectSpread2({}, optionsCache), {}, _defineProperty({}, inputValue, options)) : optionsCache); }); } }, [cacheOptions, loadOptions, loadedInputValue, optionsCache, propsOnInputChange]); var options = passEmptyOptions ? [] : stateInputValue && loadedInputValue ? loadedOptions : defaultOptions || []; return _objectSpread2(_objectSpread2({}, restSelectProps), {}, { options: options, isLoading: isLoading || propsIsLoading, onInputChange: onInputChange, filterOption: filterOption }); } var AsyncSelect = /*#__PURE__*/React.forwardRef(function (props, ref) { var stateManagedProps = useAsync(props); var selectProps = useStateManager(stateManagedProps); return /*#__PURE__*/React__namespace.createElement(Select$1, _extends$k({ ref: ref }, selectProps)); }); var AsyncSelect$1 = AsyncSelect; function _extends$6() { _extends$6 = Object.assign ? Object.assign.bind() : 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; }; return _extends$6.apply(this, arguments); } let SelectComponent; if (AsyncSelect$1.default) { SelectComponent = AsyncSelect$1.default; } else { SelectComponent = AsyncSelect$1; } const SelectAsync = props => { const { value, onChange, variant, ...selectProps } = props; const { theme, selectTheme } = useSelectTheme(); const styles = variant === 'filter' ? filterStyles(theme) : selectStyles(theme); const handleChange = selected => { if (typeof onChange === 'function') onChange(selected); }; return /*#__PURE__*/React__namespace.default.createElement(SelectComponent, _extends$6({ className: cssClass('Select'), theme: selectTheme, value: value, styles: styles, onChange: handleChange, isClearable: true }, selectProps)); }; SelectAsync.defaultProps = { variant: 'default', onChange: noop$2 }; SelectAsync.displayName = 'SelectAsync'; /** * Handler which is invoked when user clicks given step * * @alias OnStepClickHandler * @memberof Step */ /** * @alias StepProps * @memberof Step */ const Circle = styled(Box$1)` border-width: 1px; border-style: solid; border-radius: 9999px; text-align: center; `; Circle.defaultProps = { py: 'default', px: 'default', minWidth: '34px', height: '34px' }; const StyledStep = styled.div` flex: 1 1 0px; display: flex; flex-direction: row; & > ${Box$1} { ${({ disabled }) => !disabled ? 'cursor: pointer' : ''}; border-bottom: 2px solid ${({ active, theme }) => active ? theme.colors.primary100 : 'transparent'}; } ${space}; `; /** * @classdesc * * <img src="components/step.png" /> * * Step represents one of the tab in placed inside {@link Stepper} component. * You can use it alone or with before-mentioned {@link Stepper}. * * ### Usage * * ```javascript * import { Step, StepProps } from '@adminjs/design-system' * ``` * * * @hideconstructor * @see Stepper * @see StepProps * @see OnStepClickHandler * @subcategory Molecules * @component * @example <caption>Regular step</caption> * return ( * <Box p="default"> * <Step number="1">Normal Step</Step> * </Box> * ) * * @example <caption>Active steps</caption> * return ( * <Box p="default"> * <Step number="1" active>I am active</Step> * </Box> * ) * * @example <caption>Active steps</caption> * return ( * <Box p="default"> * <Step number="1" completed>This was done !!!</Step> * </Box> * ) * * @example <caption>Clickable step</caption> * const onClick = () => alert('Why did you click me?') * * return ( * <Box p="default"> * <Step number="1" onClick={onClick}>Click me if you dare</Step> * </Box> * ) * @section design-system */ const Step = props => { const { number, completed, children, active, disabled, onClick, className } = props; return /*#__PURE__*/React__namespace.default.createElement(StyledStep, { active: active, disabled: disabled || !onClick, className: cssClass('Step', className) }, /*#__PURE__*/React__namespace.default.createElement(Box$1, { flexShrink: 1, flexGrow: 0, flex: true, flexDirection: "row", pt: "lg", pb: "default", onClick: () => !disabled && onClick && onClick(number) }, /*#__PURE__*/React__namespace.default.createElement(Circle, { bg: completed ? 'grey40' : 'transparent', borderColor: active ? 'primary100' : 'grey40', color: active ? 'primary100' : 'grey40' }, completed ? /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: "Check", color: "white" }) : number), /*#__PURE__*/React__namespace.default.createElement(Text$2, { my: "sm", pl: "default", py: "sm", color: active || completed ? 'grey100' : 'grey40' }, children))); }; Step.displayName = 'Step'; /** * @classdesc * * <img src="components/stepper.png" /> * * It provides wizard workflow where user can go through a couple of steps. * Stepper makes sense when you use it along with {@link Step} component. * * It receives all the same props as {@link Box} - {@link BoxProps}. * * ### Usage * * ```javascript * import { Stepper, StepperProps } from '@adminjs/design-system' * ``` * * @component * @subcategory Molecules * @hideconstructor * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-molecules-stepper--clickable-steps Storybook} * @example <caption>Clickable steps</caption> * const { useState } = React * const steps = [{ * number: 1, label: "Do this first", * }, { * number: 2, label: "Don't forget this", * }, { * number: 3, label: "And finally this", * }] * const ComponentWithStepper = () => { * const [currentStep, setCurrentStep] = useState(1) * return ( * <Box> * <Stepper> * {steps.map(step => ( * <Step * active={currentStep === step.number} * completed={currentStep > step.number} * onClick={setCurrentStep} * number={step.number} * > * {step.label} * </Step> * ))} * </Stepper> * </Box> * ) * } * * return (<ComponentWithStepper />) * * @example <caption>Steps with bottom navigation</caption> * const { useState } = React * const steps = [{ * number: 1, label: "Do this first", * }, { * number: 2, label: "Don't forget this", * }, { * number: 3, label: "And finally this", * }] * const ComponentWithStepper = () => { * const [currentStep, setCurrentStep] = useState(1) * return ( * <Box> * <Stepper> * {steps.map(step => ( * <Step * active={currentStep === step.number} * completed={currentStep > step.number} * number={step.number} * > * {step.label} * </Step> * ))} * </Stepper> * <Box mt="xl"> * <Button * disabled={currentStep === 1} * mr="default" * onClick={() => setCurrentStep(currentStep - 1)} * > * Previous Step * </Button> * <Button * disabled={currentStep === 3} * variant="primary" * onClick={() => setCurrentStep(currentStep + 1)} * > * Next Step * </Button> * </Box> * </Box> * ) * } * * return (<ComponentWithStepper />) * * @section design-system */ const Stepper = styled(Box$1)` `; Stepper.defaultProps = { flex: true, flexDirection: ['column', 'row'], borderBottom: '1px solid', borderBottomColor: 'separator', className: cssClass('Stepper') }; Stepper.displayName = 'Stepper'; /** * @load ./value-group.doc.md * @component * @subcategory Molecules * @hideconstructor * @see ValueGroupProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-molecules-value-group--default Storybook} * @new In version 3.3 * @section design-system */ const ValueGroup = props => { const { label, value, children } = props; return /*#__PURE__*/React__namespace.default.createElement(Box$1, { mb: "xl" }, /*#__PURE__*/React__namespace.default.createElement(Label, { variant: "light" }, label), value ? /*#__PURE__*/React__namespace.default.createElement(Text$2, null, value) : '', children); }; ValueGroup.displayName = 'ValueGroup'; /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ const BUTTON_IN_GROUP_CLASS_NAME = cssClass('ButtonGroupItem'); const buttonMargin = props => { const { size } = props; const margin = size === 'sm' ? 'md' : 'lg'; return Ae` & > .${BUTTON_IN_GROUP_CLASS_NAME} { margin-right: ${themeGet('space', margin)}; &:last-child { margin-right: 0; } } `; }; const hasHandler = props => { if (!props.onClick && !props.href) { return Ae` &&& { cursor: default; } `; } return ''; }; const hasLabel = props => { if (!props.hasLabel) { return Ae` border: none; padding-left: ${themeGet('space', 'md')}; padding-right: ${themeGet('space', 'md')}; & > .${cssClass('Icon')} { margin-right: 0; } `; } return ''; }; const StyledSingleButton = styled(Button)` ${hasLabel}; ${hasHandler}; `; const StyledDropDownItemAction = styled(DropDownItemAction)` ${hasLabel}; `; const StyledButtonGroup = styled(Box$1)` ${buttonMargin}; `; function _extends$5() { _extends$5 = Object.assign ? Object.assign.bind() : 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; }; return _extends$5.apply(this, arguments); } const SingleButtonInGroup = props => { const { icon, label, buttons, source, onClick, ...buttonProps } = props; const [loading, setLoading] = React.useState(false); const onClickHandler = onClick ? async event => { setLoading(true); await onClick(event, source); setLoading(false); } : undefined; const iconName = React.useMemo(() => loading ? 'Loader' : icon, [loading]); return /*#__PURE__*/React__namespace.default.createElement(StyledSingleButton, _extends$5({ as: "a", hasLabel: !!label, onClick: onClickHandler }, buttonProps), !loading && !icon ? '' : /*#__PURE__*/React__namespace.default.createElement(Icon, { key: iconName?.toString(), icon: iconName, spin: loading }), label, buttons && buttons.length && label ? /*#__PURE__*/React__namespace.default.createElement(Box$1, { as: "span", mr: "-8px", ml: "md" }, /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: "ChevronDown" })) : ''); }; SingleButtonInGroup.displayName = 'SingleButtonInGroup'; function _extends$4() { _extends$4 = Object.assign ? Object.assign.bind() : 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; }; return _extends$4.apply(this, arguments); } const DropDownItemWithButtons = props => { const { variant, onClick, href, icon, label, buttons, source, ...rest } = props; const [loading, setLoading] = React.useState(false); const onClickHandler = onClick ? async event => { setLoading(true); await onClick(event, source); setLoading(false); } : undefined; const iconName = React.useMemo(() => loading ? 'Loader' : icon, [loading]); return /*#__PURE__*/React__namespace.default.createElement(DropDownItem, { colorVariant: variant, p: 0 }, /*#__PURE__*/React__namespace.default.createElement(StyledDropDownItemAction, _extends$4({ onClick: onClickHandler, href: href, as: "a", hasLabel: !!label }, rest), buttons && buttons.length ? /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: "ChevronLeft", ml: "-24px", mr: "0" }) : '', !loading && !icon ? '' : /*#__PURE__*/React__namespace.default.createElement(Icon, { key: iconName?.toString(), icon: iconName, spin: loading }), label), buttons && buttons.length ? /*#__PURE__*/React__namespace.default.createElement(DropDownMenu, null, buttons.map(button => /*#__PURE__*/React__namespace.default.createElement(DropDownItemWithButtons, _extends$4({}, button, { key: button.label })))) : ''); }; DropDownItemWithButtons.displayName = 'DropDownItemWithButtons'; function _extends$3() { _extends$3 = Object.assign ? Object.assign.bind() : 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; }; return _extends$3.apply(this, arguments); } const ButtonInGroup = props => { const { buttons, className, ...buttonProps } = props; if (buttons && buttons.length) { return /*#__PURE__*/React__namespace.default.createElement(DropDown, { stick: "right", className: className }, /*#__PURE__*/React__namespace.default.createElement(DropDownTrigger, null, /*#__PURE__*/React__namespace.default.createElement(SingleButtonInGroup, props)), /*#__PURE__*/React__namespace.default.createElement(DropDownMenu, null, buttons.map(button => /*#__PURE__*/React__namespace.default.createElement(DropDownItemWithButtons, _extends$3({}, button, { key: `${button.label}-${button.icon}` }))))); } return /*#__PURE__*/React__namespace.default.createElement(SingleButtonInGroup, _extends$3({}, buttonProps, { className: className })); }; ButtonInGroup.displayName = 'ButtonInGroup'; function _extends$2() { _extends$2 = Object.assign ? Object.assign.bind() : 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; }; return _extends$2.apply(this, arguments); } /** * @load ./button-group.doc.md * @hideconstructor * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-molecules-button-group--default Storybook} * @component * @subcategory Organisms * @section design-system * @new in version 3.3 */ const ButtonGroup = props => { const { buttons, size, rounded } = props; if (!buttons || !buttons.length) { return null; } return /*#__PURE__*/React__namespace.default.createElement(StyledButtonGroup, props, buttons.map((button, i) => /*#__PURE__*/React__namespace.default.createElement(ButtonInGroup, _extends$2({ key: `${button.label || ''}-${i}`, size: size, rounded: rounded }, button, { className: BUTTON_IN_GROUP_CLASS_NAME })))); }; ButtonGroup.displayName = 'ButtonGroup'; const StyledCurrentUserNav = styled(Box$1)` text-align: right; & .line-action { .${cssClass('Icon')} svg { stroke: ${themeGet('colors', 'grey80')}; } &:hover .${cssClass('Icon')} svg { stroke: ${themeGet('colors', 'primary100')}; } } & img { width: 36px; height: 36px; border-radius: 40px; margin: -1px ${themeGet('space', 'md')} 0; } `; StyledCurrentUserNav.defaultProps = { flex: true, flexDirection: 'row' }; /** * @load ./current-user-nav.doc.md * @component * @subcategory Organisms * @hideconstructor * @see CurrentUserNavProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-organisms-current-user-nav--default Storybook} * @new In version 3.3 * @section design-system */ const CurrentUserNav = props => { const { name = '', title = '', avatarUrl, dropActions, lineActions } = props; return /*#__PURE__*/React__namespace.default.createElement(StyledCurrentUserNav, null, lineActions && lineActions.length && /*#__PURE__*/React__namespace.default.createElement(Box$1, { flex: true, flexDirection: "row", alignItems: "center" }, lineActions.map(action => /*#__PURE__*/React__namespace.default.createElement(Button, { size: "icon", variant: "text", title: action.label, key: action.label, href: action.href, as: "a", className: "line-action", onClick: action.onClick }, action.icon && /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: action.icon })))), /*#__PURE__*/React__namespace.default.createElement(DropDown, { stick: "right", display: "flex" }, /*#__PURE__*/React__namespace.default.createElement(DropDownTrigger, null, /*#__PURE__*/React__namespace.default.createElement(Box$1, { flex: true, flexDirection: "row", px: "xl", alignItems: "center", height: "navbarHeight" }, /*#__PURE__*/React__namespace.default.createElement(Box$1, null, /*#__PURE__*/React__namespace.default.createElement(Title, null, name), title && /*#__PURE__*/React__namespace.default.createElement(SmallText, null, title)), /*#__PURE__*/React__namespace.default.createElement(Avatar, { src: avatarUrl, alt: name, marginLeft: "lg" }, name.slice(0, 1).toUpperCase()))), dropActions && dropActions.length && /*#__PURE__*/React__namespace.default.createElement(DropDownMenu, { minWidth: "100%" }, dropActions.map(action => /*#__PURE__*/React__namespace.default.createElement(DropDownItem, { key: action.label, as: "a", onClick: action.onClick, href: action.href }, action.icon && /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: action.icon }), action.label))))); }; CurrentUserNav.displayName = 'CurrentUserNav'; const StyledWrapper = styled(Box$1)` user-select: none; & > * { padding: 0 ${themeGet('space', 'xs')}; } `; StyledWrapper.defaultProps = { color: 'grey60', display: 'flex', justifyContent: 'center', alignItems: 'center' }; const StyledLink = styled(Link$1)` font-size: ${themeGet('fontSizes', 'sm')}; font-weight: 300; &:hover { color: ${themeGet('colors', 'love')}; text-decoration: none; } `; const MadeWithLove = () => /*#__PURE__*/React__namespace.default.createElement(StyledWrapper, null, /*#__PURE__*/React__namespace.default.createElement(Text$2, { as: "span", variant: "sm" }, "Made with"), /*#__PURE__*/React__namespace.default.createElement(Icon, { icon: "Heart", color: "love" }), /*#__PURE__*/React__namespace.default.createElement(Text$2, { as: "span", variant: "sm" }, "by"), /*#__PURE__*/React__namespace.default.createElement(StyledLink, { href: "https://adminjs.co/", target: "_blank", rel: "noopener noreferrer" }, "AdminJS Team")); MadeWithLove.displayName = 'MadeWithLove'; const StyledNavigation = styled(Box$1)` ul ul > li { a { padding-left: ${themeGet('space', 'x3')}; } &:last-child { margin-bottom: ${themeGet('space', 'lg')}; } } `; function _extends$1() { _extends$1 = Object.assign ? Object.assign.bind() : 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; }; return _extends$1.apply(this, arguments); } const NavigationElementWrapper = props => { const { elements, isOpen } = props; return /*#__PURE__*/React__namespace.default.createElement("li", null, /*#__PURE__*/React__namespace.default.createElement(NavigationElement, props), elements?.length && isOpen ? /*#__PURE__*/React__namespace.default.createElement("ul", null, elements.map((element, id) => /*#__PURE__*/React__namespace.default.createElement(NavigationElementWrapper, _extends$1({}, element, { key: [id, element.href].join('-') })))) : ''); }; NavigationElementWrapper.displayName = 'NavigationElementWrapper'; function _extends() { _extends = Object.assign ? Object.assign.bind() : 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; }; return _extends.apply(this, arguments); } /** * @load ./navigation.doc.md * @component * @subcategory Organisms * @hideconstructor * @see NavigationProps * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-organisms-navigation--default Storybook} * @new In version 3.3 * @section design-system */ const Navigation = props => { const { label, elements } = props; return /*#__PURE__*/React__namespace.default.createElement(StyledNavigation, { px: "xl", py: "lg" }, !!label?.length && /*#__PURE__*/React__namespace.default.createElement(Label, { pl: "lg", mb: "md", uppercase: true }, label), /*#__PURE__*/React__namespace.default.createElement("ul", null, elements.map((element, id) => /*#__PURE__*/React__namespace.default.createElement(NavigationElementWrapper, _extends({ key: [id, element.href].join('-') }, element))))); }; Navigation.displayName = 'Navigation'; // eslint-disable-next-line import/prefer-default-export const GlobalStyle = $e` /* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: none (public domain) */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } table { border-collapse: collapse; border-spacing: 0; } `; /** * @module @adminjs/design-system * @section design-system * * @load .index.doc.md */ var AdminJSDesignSystem = /*#__PURE__*/Object.freeze({ __proto__: null, Avatar: Avatar, BUTTON_IN_GROUP_CLASS_NAME: BUTTON_IN_GROUP_CLASS_NAME, Badge: Badge, Box: Box$1, Button: Button, ButtonCSS: ButtonCSS, ButtonGroup: ButtonGroup, ButtonInGroup: ButtonInGroup, Caption: Caption, CardTitle: CardTitle, CheckBox: CheckBox, CheckboxRadioContainer: CheckboxRadioContainer, ColorVariants: ColorVariants, CurrencyInput: CurrencyInput, CurrentUserNav: CurrentUserNav, DEFAULT_DRAWER_WIDTH: DEFAULT_DRAWER_WIDTH, DEFAULT_STICK: DEFAULT_STICK, DROPZONE_DEFAULT_TRANSLATIONS: DROPZONE_DEFAULT_TRANSLATIONS, DatePicker: DatePicker, Drawer: Drawer, DrawerContent: DrawerContent, DrawerFooter: DrawerFooter, DropDown: DropDown, DropDownItem: DropDownItem, DropDownItemAction: DropDownItemAction, DropDownItemWithButtons: DropDownItemWithButtons, DropDownMenu: DropDownMenu, DropDownTrigger: DropDownTrigger, DropZone: DropZone, DropZoneItem: DropZoneItem, FormGroup: FormGroup, FormMessage: FormMessage, GlobalStyle: GlobalStyle, H1: H1, H2: H2, H3: H3, H4: H4, H5: H5, H6: H6, Header: Header, Icon: Icon, Illustration: Illustration, InfoBox: InfoBox, Input: Input$2, InputCSS: InputCSS, InputGroup: InputGroup, Label: Label, Link: Link$1, Loader: Loader, MadeWithLove: MadeWithLove, MessageBox: MessageBox, Modal: Modal, ModalInline: ModalInline, ModalStyled: ModalStyled, Navigation: Navigation, NavigationElement: NavigationElement, NavigationElementWrapper: NavigationElementWrapper, Overlay: Overlay, Pagination: Pagination, PhoneInput: PhoneInput, Placeholder: Placeholder$2, PortalUtils: PortalUtils, Radio: Radio, Reset: Reset, RichTextEditor: RichTextEditor, Section: Section, Select: Select, SelectAsync: SelectAsync, SingleButtonInGroup: SingleButtonInGroup, SmallText: SmallText, Step: Step, Stepper: Stepper, StyledButtonGroup: StyledButtonGroup, StyledCurrentUserNav: StyledCurrentUserNav, StyledDropDownItemAction: StyledDropDownItemAction, StyledNavigation: StyledNavigation, StyledNavigationElement: StyledNavigationElement, StyledSingleButton: StyledSingleButton, StyledTooltip: StyledTooltip, Tab: Tab, TabContext: TabContext, Table: Table$1, TableBody: TableBody, TableCaption: TableCaption, TableCell: TableCell$1, TableHead: TableHead, TableRow: TableRow$1, Tabs: Tabs, Text: Text$2, TextArea: TextArea, TinyMCE: TinyMCE, Title: Title, Tooltip: Tooltip, TooltipContent: TooltipContent, TooltipControl: TooltipControl, ValueGroup: ValueGroup, borderWidths: borderWidths, borders: borders, breakpoints: breakpoints, buttonMargin: buttonMargin, colors: colors$1, combineStyles: combineStyles, cssClass: cssClass, datepickerStyle: datepickerStyles, defaultProps: defaultProps$1, filterStyles: filterStyles, focusShadowStyle: focusShadowStyle, font: font, fontSizes: fontSizes, fontWeights: fontWeights, formatCurrencyProperty: formatValue, formatDate: formatDate, formatDateProperty: formatDateProperty, formatDateTime: formatDateTime, hasHandler: hasHandler, hasLabel: hasLabel, humanFileSize: humanFileSize, lineHeights: lineHeights, pad: pad, reset: reset$1, selectStyles: selectStyles, shadows: shadows, sizes: sizes, space: space$1, theme: defautTheme, themeGet: themeGet, useDatePicker: useDatePicker, useTabs: useTabs }); window.styled = window.styled || styled$1; window.ReactDatepicker = window.ReactDatepicker || zt.default || zt; window.FeatherIcons = window.FeatherIcons || FeatherIcons__namespace; return AdminJSDesignSystem; })(React, ReactDOM, FeatherIcons); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLmRldmVsb3BtZW50LmpzIiwic291cmNlcyI6WyJub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvaGFzLmpzIiwibm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvY2hlY2tQcm9wVHlwZXMuanMiLCJub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qcyIsIm5vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9pc0RhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaXNWYWxpZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi90b0ludGVnZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vc3ViTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFVUQ0RheU9mWWVhci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENJU09XZWVrWWVhci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDV2Vlay9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDV2Vla1llYXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VVRDV2Vlay9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZm9ybWF0L2xpZ2h0Rm9ybWF0dGVycy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvZm9ybWF0dGVycy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9wcm90ZWN0ZWRUb2tlbnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZEZvcm1hdExvbmdGbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0TG9uZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvbG9jYWxpemUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvbWF0Y2gvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vZm9ybWF0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9hZGRNaW51dGVzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9hZGRIb3Vycy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vYWRkRGF5cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vYWRkV2Vla3MvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZE1vbnRocy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vYWRkUXVhcnRlcnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2FkZFllYXJzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9zdWJEYXlzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9zdWJXZWVrcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vc3ViTW9udGhzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9zdWJRdWFydGVycy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vc3ViWWVhcnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2dldFNlY29uZHMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2dldE1pbnV0ZXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2dldEhvdXJzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9nZXREYXkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2dldERhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N0YXJ0T2ZXZWVrL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9zdGFydE9mSVNPV2Vlay9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vZ2V0SVNPV2Vla1llYXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N0YXJ0T2ZJU09XZWVrWWVhci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vZ2V0SVNPV2Vlay9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vZ2V0TW9udGgvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2dldFF1YXJ0ZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2dldFllYXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2dldFRpbWUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3NldFNlY29uZHMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3NldE1pbnV0ZXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3NldEhvdXJzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9nZXREYXlzSW5Nb250aC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vc2V0TW9udGgvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3NldFF1YXJ0ZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3NldFllYXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL21pbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbWF4L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9zdGFydE9mRGF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2RpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9zdGFydE9mTW9udGgvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N0YXJ0T2ZRdWFydGVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9zdGFydE9mWWVhci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vZW5kT2ZEYXkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2VuZE9mTW9udGgvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2VuZE9mWWVhci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaXNFcXVhbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaXNTYW1lRGF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9pc1NhbWVNb250aC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaXNTYW1lWWVhci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaXNTYW1lUXVhcnRlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaXNBZnRlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaXNCZWZvcmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2lzV2l0aGluSW50ZXJ2YWwvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvYXNzaWduL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9wYXJzZS9fbGliL1NldHRlci5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vcGFyc2UvX2xpYi9QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3BhcnNlL19saWIvcGFyc2Vycy9FcmFQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2NvbnN0YW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vcGFyc2UvX2xpYi9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3BhcnNlL19saWIvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3BhcnNlL19saWIvcGFyc2Vycy9ZZWFyUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9wYXJzZS9fbGliL3BhcnNlcnMvTG9jYWxXZWVrWWVhclBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtZZWFyUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9wYXJzZS9fbGliL3BhcnNlcnMvRXh0ZW5kZWRZZWFyUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9wYXJzZS9fbGliL3BhcnNlcnMvUXVhcnRlclBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vcGFyc2UvX2xpYi9wYXJzZXJzL1N0YW5kQWxvbmVRdWFydGVyUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9wYXJzZS9fbGliL3BhcnNlcnMvTW9udGhQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3BhcnNlL19saWIvcGFyc2Vycy9TdGFuZEFsb25lTW9udGhQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc2V0VVRDV2Vlay9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsV2Vla1BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zZXRVVENJU09XZWVrL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9wYXJzZS9fbGliL3BhcnNlcnMvSVNPV2Vla1BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vcGFyc2UvX2xpYi9wYXJzZXJzL0RhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3BhcnNlL19saWIvcGFyc2Vycy9EYXlPZlllYXJQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc2V0VVRDRGF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9wYXJzZS9fbGliL3BhcnNlcnMvRGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9wYXJzZS9fbGliL3BhcnNlcnMvTG9jYWxEYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3BhcnNlL19saWIvcGFyc2Vycy9TdGFuZEFsb25lTG9jYWxEYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc2V0VVRDSVNPRGF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9wYXJzZS9fbGliL3BhcnNlcnMvSVNPRGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9wYXJzZS9fbGliL3BhcnNlcnMvQU1QTVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vcGFyc2UvX2xpYi9wYXJzZXJzL0FNUE1NaWRuaWdodFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vcGFyc2UvX2xpYi9wYXJzZXJzL0RheVBlcmlvZFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vcGFyc2UvX2xpYi9wYXJzZXJzL0hvdXIxdG8xMlBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vcGFyc2UvX2xpYi9wYXJzZXJzL0hvdXIwdG8yM1BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vcGFyc2UvX2xpYi9wYXJzZXJzL0hvdXIwVG8xMVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vcGFyc2UvX2xpYi9wYXJzZXJzL0hvdXIxVG8yNFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vcGFyc2UvX2xpYi9wYXJzZXJzL01pbnV0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vcGFyc2UvX2xpYi9wYXJzZXJzL1NlY29uZFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vcGFyc2UvX2xpYi9wYXJzZXJzL0ZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3BhcnNlL19saWIvcGFyc2Vycy9JU09UaW1lem9uZVdpdGhaUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9wYXJzZS9fbGliL3BhcnNlcnMvSVNPVGltZXpvbmVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3BhcnNlL19saWIvcGFyc2Vycy9UaW1lc3RhbXBTZWNvbmRzUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9wYXJzZS9fbGliL3BhcnNlcnMvVGltZXN0YW1wTWlsbGlzZWNvbmRzUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9wYXJzZS9fbGliL3BhcnNlcnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3BhcnNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9wYXJzZUlTTy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC1vbmNsaWNrb3V0c2lkZS9kaXN0L3JlYWN0LW9uY2xpY2tvdXRzaWRlLmVzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0LXBvcHBlci9saWIvZXNtL01hbmFnZXIuanMiLCJub2RlX21vZHVsZXMvcmVhY3QtcG9wcGVyL2xpYi9lc20vdXRpbHMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3cuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3VzZXJBZ2VudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzTGF5b3V0Vmlld3BvcnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvY29udGFpbnMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNUYWJsZUVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2Fycm93LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRWYXJpYXRpb24uanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbEJhclguanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudFJlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1Njcm9sbFBhcmVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlT2Zmc2V0cy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZmxpcC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2hpZGUuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRBbHRBeGlzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlU2Nyb2xsLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvb3JkZXJNb2RpZmllcnMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RlYm91bmNlLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9mb3JtYXQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3ZhbGlkYXRlTW9kaWZpZXJzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy91bmlxdWVCeS5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0LWZhc3QtY29tcGFyZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC1wb3BwZXIvbGliL2VzbS91c2VQb3BwZXIuanMiLCJub2RlX21vZHVsZXMvcmVhY3QtcG9wcGVyL2xpYi9lc20vUG9wcGVyLmpzIiwibm9kZV9tb2R1bGVzL3dhcm5pbmcvd2FybmluZy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC1wb3BwZXIvbGliL2VzbS9SZWZlcmVuY2UuanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3NldC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC1kYXRlcGlja2VyL2Rpc3QvZXMvaW5kZXguanMiLCJidWlsZC90aGVtZS5qcyIsIm5vZGVfbW9kdWxlcy9Ac3R5bGVkLXN5c3RlbS9jb3JlL2Rpc3QvaW5kZXguZXNtLmpzIiwibm9kZV9tb2R1bGVzL0BzdHlsZWQtc3lzdGVtL2xheW91dC9kaXN0L2luZGV4LmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9Ac3R5bGVkLXN5c3RlbS9jb2xvci9kaXN0L2luZGV4LmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9Ac3R5bGVkLXN5c3RlbS90eXBvZ3JhcGh5L2Rpc3QvaW5kZXguZXNtLmpzIiwibm9kZV9tb2R1bGVzL0BzdHlsZWQtc3lzdGVtL2ZsZXhib3gvZGlzdC9pbmRleC5lc20uanMiLCJub2RlX21vZHVsZXMvQHN0eWxlZC1zeXN0ZW0vZ3JpZC9kaXN0L2luZGV4LmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9Ac3R5bGVkLXN5c3RlbS9ib3JkZXIvZGlzdC9pbmRleC5lc20uanMiLCJub2RlX21vZHVsZXMvQHN0eWxlZC1zeXN0ZW0vYmFja2dyb3VuZC9kaXN0L2luZGV4LmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9Ac3R5bGVkLXN5c3RlbS9wb3NpdGlvbi9kaXN0L2luZGV4LmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9Ac3R5bGVkLXN5c3RlbS9zcGFjZS9kaXN0L2luZGV4LmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9Ac3R5bGVkLXN5c3RlbS9zaGFkb3cvZGlzdC9pbmRleC5lc20uanMiLCJub2RlX21vZHVsZXMvQHN0eWxlZC1zeXN0ZW0vY3NzL2Rpc3QvaW5kZXguZXNtLmpzIiwibm9kZV9tb2R1bGVzL0BzdHlsZWQtc3lzdGVtL3ZhcmlhbnQvZGlzdC9pbmRleC5lc20uanMiLCJub2RlX21vZHVsZXMvc3R5bGVkLXN5c3RlbS9kaXN0L2luZGV4LmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9zaGFsbG93ZXF1YWwvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQGVtb3Rpb24vc3R5bGlzL2Rpc3Qvc3R5bGlzLmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9AZW1vdGlvbi91bml0bGVzcy9kaXN0L3VuaXRsZXNzLmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9AZW1vdGlvbi9pcy1wcm9wLXZhbGlkL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvZW1vdGlvbi1tZW1vaXplLmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9AZW1vdGlvbi9pcy1wcm9wLXZhbGlkL2Rpc3QvZW1vdGlvbi1pcy1wcm9wLXZhbGlkLmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcyIsImJ1aWxkL3V0aWxzL3N0eWxlZC5qcyIsImJ1aWxkL2F0b21zL2F2YXRhci9hdmF0YXIuanMiLCJidWlsZC91dGlscy9jc3MtY2xhc3MuanMiLCJidWlsZC9hdG9tcy9iYWRnZS9iYWRnZS5qcyIsImJ1aWxkL2F0b21zL2JveC9ib3guanMiLCJidWlsZC91dGlscy9kYXRlcGlja2VyLnN0eWxlcy5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2lzTmF0aXZlRnVuY3Rpb24uanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NvbnN0cnVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS93cmFwTmF0aXZlU3VwZXIuanMiLCJub2RlX21vZHVsZXMvcG9saXNoZWQvZGlzdC9wb2xpc2hlZC5lc20uanMiLCJidWlsZC91dGlscy9mb2N1cy1zaGFkb3cuc3R5bGUuanMiLCJub2RlX21vZHVsZXMvZmxhdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUdldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUhhcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldFRhZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jb3JlSnNEYXRhLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaENsZWFyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaERlbGV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaFNldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUNsZWFyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX1N0YWNrLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZGVmaW5lUHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hc3NpZ25NZXJnZVZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUZvci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3IuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX1VpbnQ4QXJyYXkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZU9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzQXJndW1lbnRzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pc0J1ZmZlci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNQbGFpbk9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5hcnkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fc2FmZUdldC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnblZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlS2V5c0luLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXNJbi5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC90b1BsYWluT2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1lcmdlRGVlcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNZXJnZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJSZXN0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9jb25zdGFudC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmVzdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSXRlcmF0ZWVDYWxsLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQXNzaWduZXIuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL21lcmdlLmpzIiwiYnVpbGQvdXRpbHMvY29tYmluZS1zdHlsZXMuanMiLCJidWlsZC91dGlscy9kYXRlLXV0aWxzLmpzIiwiYnVpbGQvdXRpbHMvZ2VuZXJhdGUtaWQuanMiLCJidWlsZC91dGlscy9odW1hbi1maWxlLXNpemUuanMiLCJidWlsZC91dGlscy9wb3J0YWwtdXRpbHMuanMiLCJidWlsZC91dGlscy9yZXNldC5zdHlsZXMuanMiLCJidWlsZC91dGlscy9zZWxlY3Qtc3R5bGVzLmpzIiwiYnVpbGQvdXRpbHMvdGhlbWUtZ2V0LmpzIiwiYnVpbGQvYXRvbXMvYnV0dG9uL2J1dHRvbi1jc3MuanMiLCJidWlsZC9hdG9tcy9idXR0b24vYnV0dG9uLmpzIiwiYnVpbGQvYXRvbXMvbGFiZWwvbGFiZWwuanMiLCJidWlsZC9hdG9tcy9jaGVjay1ib3gvY2hlY2stYm94LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0LWN1cnJlbmN5LWlucHV0LWZpZWxkL2Rpc3QvaW5kZXguZXNtLmpzIiwiYnVpbGQvYXRvbXMvaW5wdXQvaW5wdXQuanMiLCJidWlsZC9hdG9tcy9jdXJyZW5jeS1pbnB1dC9jdXJyZW5jeS1pbnB1dC5qcyIsImJ1aWxkL2F0b21zL2ljb24vaWNvbi5qcyIsImJ1aWxkL2F0b21zL2lsbHVzdHJhdGlvbnMvYWNjZXB0LmpzIiwiYnVpbGQvYXRvbXMvaWxsdXN0cmF0aW9ucy9hZG1pbmpzLWxvZ28uanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL2FzdHJvbmF1dC5qcyIsImJ1aWxkL2F0b21zL2lsbHVzdHJhdGlvbnMvYmFnLmpzIiwiYnVpbGQvYXRvbXMvaWxsdXN0cmF0aW9ucy9iZXdhcmUuanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL2JveC5qcyIsImJ1aWxkL2F0b21zL2lsbHVzdHJhdGlvbnMvY2FsZW5kYXIuanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL2NhbmNlbC5qcyIsImJ1aWxkL2F0b21zL2lsbHVzdHJhdGlvbnMvY2FyZHMuanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL2NsaXAuanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL2Nsb3VkLmpzIiwiYnVpbGQvYXRvbXMvaWxsdXN0cmF0aW9ucy9jdXAuanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL2RldGFpbHMuanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL2RvY3MuanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL2RvY3VtZW50LWNoZWNrLmpzIiwiYnVpbGQvYXRvbXMvaWxsdXN0cmF0aW9ucy9kb2N1bWVudC1zZWFyY2guanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL2RyYXdlci5qcyIsImJ1aWxkL2F0b21zL2lsbHVzdHJhdGlvbnMvZmlsZS1zZWFyY2guanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL2ZsYWctaW4tY29nLmpzIiwiYnVpbGQvYXRvbXMvaWxsdXN0cmF0aW9ucy9mb2xkZXIuanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL2ZvbGRlcnMuanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL2dpdGh1Yi1sb2dvLmpzIiwiYnVpbGQvYXRvbXMvaWxsdXN0cmF0aW9ucy9pZGVudGl0eS1jYXJkLmpzIiwiYnVpbGQvYXRvbXMvaWxsdXN0cmF0aW9ucy9sYXVuY2guanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL21vb24uanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL25vdC1mb3VuZC5qcyIsImJ1aWxkL2F0b21zL2lsbHVzdHJhdGlvbnMvbm90ZWJvb2suanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL3BhZGxvY2suanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL3Bob3Rvcy5qcyIsImJ1aWxkL2F0b21zL2lsbHVzdHJhdGlvbnMvcGxhbmV0LmpzIiwiYnVpbGQvYXRvbXMvaWxsdXN0cmF0aW9ucy9wbHVnLmpzIiwiYnVpbGQvYXRvbXMvaWxsdXN0cmF0aW9ucy9yb2NrZXQuanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL3JvY2tldC1uZXcuanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL3NsYWNrLWxvZ28uanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb25zL3RhZ3MuanMiLCJidWlsZC9hdG9tcy9pbGx1c3RyYXRpb24vaWxsdXN0cmF0aW9uLmpzIiwiYnVpbGQvYXRvbXMvbGluay9saW5rLmpzIiwiYnVpbGQvYXRvbXMvbG9hZGVyL2xvYWRlci5qcyIsImJ1aWxkL2F0b21zL292ZXJsYXkvb3ZlcmxheS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC1waG9uZS1pbnB1dC0yL2xpYi9saWIuanMiLCJidWlsZC91dGlscy9waG9uZS1pbnB1dC5zdHlsZXMuanMiLCJidWlsZC9hdG9tcy9waG9uZS1pbnB1dC9waG9uZS1pbnB1dC5qcyIsImJ1aWxkL2F0b21zL3BsYWNlaG9sZGVyL3BsYWNlaG9sZGVyLmpzIiwiYnVpbGQvYXRvbXMvcmFkaW8vcmFkaW8uanMiLCJidWlsZC9hdG9tcy9zZWN0aW9uL3NlY3Rpb24uanMiLCJidWlsZC9hdG9tcy90YWJsZS90YWJsZS5qcyIsImJ1aWxkL2F0b21zL3RhYmxlL3RhYmxlLWhlYWQuanMiLCJidWlsZC9hdG9tcy90YWJsZS90YWJsZS1ib2R5LmpzIiwiYnVpbGQvYXRvbXMvdGFibGUvdGFibGUtY2VsbC5qcyIsImJ1aWxkL2F0b21zL3RhYmxlL3RhYmxlLXJvdy5qcyIsImJ1aWxkL2F0b21zL3RhYmxlL3RhYmxlLWNhcHRpb24uanMiLCJidWlsZC91dGlscy9hc3NlcnQuanMiLCJidWlsZC9hdG9tcy90YWJzL3RhYnMuanMiLCJidWlsZC9hdG9tcy90YWJzL3RhYi5qcyIsImJ1aWxkL3V0aWxzL2NvbnRlbnQtc3R5bGVzLmpzIiwiYnVpbGQvYXRvbXMvdGV4dC90ZXh0LmpzIiwiYnVpbGQvYXRvbXMvdGV4dC1hcmVhL3RleHQtYXJlYS5qcyIsImJ1aWxkL2hvb2tzL3VzZS13aW5kb3ctc2l6ZS5qcyIsImJ1aWxkL2F0b21zL3Rvb2x0aXAvdG9vbHRpcC1zdHlsZWQuanMiLCJidWlsZC9hdG9tcy90b29sdGlwL3Rvb2x0aXAtY29udHJvbC5qcyIsImJ1aWxkL2F0b21zL3Rvb2x0aXAvdG9vbHRpcC5qcyIsImJ1aWxkL2F0b21zL3Rvb2x0aXAvdG9vbHRpcC1jb250ZW50LmpzIiwiYnVpbGQvYXRvbXMvdHlwb2dyYXBoeS9oZWFkZXIuanMiLCJidWlsZC9hdG9tcy90eXBvZ3JhcGh5L2NhcHRpb24tc2hhcmVkLmpzIiwiYnVpbGQvYXRvbXMvdHlwb2dyYXBoeS9jYXB0aW9uLmpzIiwiYnVpbGQvYXRvbXMvdHlwb2dyYXBoeS9jYXJkLXRpdGxlLmpzIiwiYnVpbGQvYXRvbXMvdHlwb2dyYXBoeS9zbWFsbC10ZXh0LmpzIiwiYnVpbGQvYXRvbXMvdHlwb2dyYXBoeS90aXRsZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC10ZXh0LW1hc2svZGlzdC9yZWFjdFRleHRNYXNrLmpzIiwibm9kZV9tb2R1bGVzL3RleHQtbWFzay1hZGRvbnMvZGlzdC9jcmVhdGVBdXRvQ29ycmVjdGVkRGF0ZVBpcGUuanMiLCJidWlsZC9tb2xlY3VsZXMvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuanMiLCJub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29uc3RhbnRzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlSVNPL2luZGV4LmpzIiwiYnVpbGQvbW9sZWN1bGVzL2RhdGUtcGlja2VyL3VzZURhdGVQaWNrZXIuanMiLCJidWlsZC9jb25zdGFudHMuanMiLCJidWlsZC9tb2xlY3VsZXMvZHJhd2VyL2RyYXdlci5qcyIsImJ1aWxkL21vbGVjdWxlcy9kcmF3ZXIvZHJhd2VyLWNvbnRlbnQuanMiLCJidWlsZC9tb2xlY3VsZXMvZHJhd2VyL2RyYXdlci1mb290ZXIuanMiLCJidWlsZC9tb2xlY3VsZXMvZHJvcC1kb3duL2Ryb3AtZG93bi5qcyIsImJ1aWxkL21vbGVjdWxlcy9kcm9wLWRvd24vZHJvcC1kb3duLW1lbnUuanMiLCJidWlsZC9tb2xlY3VsZXMvZHJvcC1kb3duL2Ryb3AtZG93bi1pdGVtLmpzIiwiYnVpbGQvbW9sZWN1bGVzL2Ryb3AtZG93bi9kcm9wLWRvd24taXRlbS1hY3Rpb24uanMiLCJidWlsZC9tb2xlY3VsZXMvZHJvcC1kb3duL2Ryb3AtZG93bi10cmlnZ2VyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9hc3NpZ25JbldpdGguanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzRXJyb3IuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2F0dGVtcHQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VWYWx1ZXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19jdXN0b21EZWZhdWx0c0Fzc2lnbkluLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZXNjYXBlU3RyaW5nQ2hhci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXMuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gva2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3JlSW50ZXJwb2xhdGUuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHlPZi5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2VzY2FwZUh0bWxDaGFyLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUb1N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvdG9TdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2VzY2FwZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX3JlRXNjYXBlLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVFdmFsdWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvdGVtcGxhdGVTZXR0aW5ncy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvdGVtcGxhdGUuanMiLCJidWlsZC9tb2xlY3VsZXMvbWVzc2FnZS1ib3gvbWVzc2FnZS1ib3guanMiLCJidWlsZC9tb2xlY3VsZXMvZHJvcC16b25lL2Ryb3Atem9uZS1pdGVtLmpzIiwiYnVpbGQvbW9sZWN1bGVzL2Ryb3Atem9uZS9kcm9wLXpvbmUtaW1hZ2UuanMiLCJidWlsZC9tb2xlY3VsZXMvZHJvcC16b25lL2Ryb3Atem9uZS5qcyIsImJ1aWxkL21vbGVjdWxlcy9mb3JtLWdyb3VwL2lucHV0LWdyb3VwLmpzIiwiYnVpbGQvbW9sZWN1bGVzL2Zvcm0tZ3JvdXAvZm9ybS1ncm91cC5qcyIsImJ1aWxkL21vbGVjdWxlcy9mb3JtLWdyb3VwL2Zvcm0tbWVzc2FnZS5qcyIsImJ1aWxkL21vbGVjdWxlcy9pbmZvLWJveC9pbmZvLWJveC5qcyIsImJ1aWxkL21vbGVjdWxlcy9tb2RhbC9tb2RhbC1zdHlsZWQuanMiLCJidWlsZC9tb2xlY3VsZXMvbW9kYWwvbW9kYWwtaW5saW5lLmpzIiwiYnVpbGQvbW9sZWN1bGVzL21vZGFsL21vZGFsLXdyYXBwZXIuanMiLCJidWlsZC9tb2xlY3VsZXMvbW9kYWwvbW9kYWwuanMiLCJidWlsZC9tb2xlY3VsZXMvbmF2aWdhdGlvbi1lbGVtZW50L25hdmlnYXRpb24tZWxlbWVudC1zdHlsZWQuanMiLCJidWlsZC9tb2xlY3VsZXMvbmF2aWdhdGlvbi1lbGVtZW50L25hdmlnYXRpb24tZWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qdy1wYWdpbmF0ZS9saWIvanctcGFnaW5hdGUuanMiLCJidWlsZC9tb2xlY3VsZXMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL29yZGVyZWRtYXAvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wcm9zZW1pcnJvci1tb2RlbC9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Byb3NlbWlycm9yLXRyYW5zZm9ybS9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Byb3NlbWlycm9yLXN0YXRlL2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcHJvc2VtaXJyb3Itdmlldy9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3czYy1rZXluYW1lL2luZGV4LmVzLmpzIiwibm9kZV9tb2R1bGVzL3Byb3NlbWlycm9yLWtleW1hcC9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Byb3NlbWlycm9yLWNvbW1hbmRzL2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcHJvc2VtaXJyb3Itc2NoZW1hLWxpc3QvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AdGlwdGFwL2NvcmUvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AdGlwdGFwL2V4dGVuc2lvbi1jaGFyYWN0ZXItY291bnQvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AdGlwdGFwL2V4dGVuc2lvbi1pbWFnZS9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2xpbmtpZnlqcy9kaXN0L2xpbmtpZnkuZXMuanMiLCJub2RlX21vZHVsZXMvQHRpcHRhcC9leHRlbnNpb24tbGluay9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Byb3NlbWlycm9yLXRhYmxlcy9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlL2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQHRpcHRhcC9leHRlbnNpb24tdGFibGUtY2VsbC9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLWhlYWRlci9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLXJvdy9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQtYWxpZ24vZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AdGlwdGFwL2V4dGVuc2lvbi10eXBvZ3JhcGh5L2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQHRpcHRhcC9yZWFjdC9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0B0aXB0YXAvZXh0ZW5zaW9uLWJsb2NrcXVvdGUvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AdGlwdGFwL2V4dGVuc2lvbi1ib2xkL2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQHRpcHRhcC9leHRlbnNpb24tYnVsbGV0LWxpc3QvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AdGlwdGFwL2V4dGVuc2lvbi1jb2RlL2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQHRpcHRhcC9leHRlbnNpb24tY29kZS1ibG9jay9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0B0aXB0YXAvZXh0ZW5zaW9uLWRvY3VtZW50L2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcHJvc2VtaXJyb3ItZHJvcGN1cnNvci9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0B0aXB0YXAvZXh0ZW5zaW9uLWRyb3BjdXJzb3IvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wcm9zZW1pcnJvci1nYXBjdXJzb3IvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AdGlwdGFwL2V4dGVuc2lvbi1nYXBjdXJzb3IvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AdGlwdGFwL2V4dGVuc2lvbi1oYXJkLWJyZWFrL2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQHRpcHRhcC9leHRlbnNpb24taGVhZGluZy9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JvcGUtc2VxdWVuY2UvZGlzdC9pbmRleC5lcy5qcyIsIm5vZGVfbW9kdWxlcy9wcm9zZW1pcnJvci1oaXN0b3J5L2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQHRpcHRhcC9leHRlbnNpb24taGlzdG9yeS9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0B0aXB0YXAvZXh0ZW5zaW9uLWhvcml6b250YWwtcnVsZS9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0B0aXB0YXAvZXh0ZW5zaW9uLWl0YWxpYy9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0B0aXB0YXAvZXh0ZW5zaW9uLWxpc3QtaXRlbS9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0B0aXB0YXAvZXh0ZW5zaW9uLW9yZGVyZWQtbGlzdC9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0B0aXB0YXAvZXh0ZW5zaW9uLXBhcmFncmFwaC9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0B0aXB0YXAvZXh0ZW5zaW9uLXN0cmlrZS9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AdGlwdGFwL3N0YXJ0ZXIta2l0L2Rpc3QvaW5kZXguanMiLCJidWlsZC9tb2xlY3VsZXMvcmljaC10ZXh0LWVkaXRvci9yaWNoLXRleHQtZWRpdG9yLnN0eWxlZC5qcyIsImJ1aWxkL21vbGVjdWxlcy9yaWNoLXRleHQtZWRpdG9yL3VzZVRpcHRhcENvbW1hbmRzLmpzIiwiYnVpbGQvbW9sZWN1bGVzL3JpY2gtdGV4dC1lZGl0b3IvaWNvbnMvYWxpZ24tY2VudGVyLmpzIiwiYnVpbGQvbW9sZWN1bGVzL3JpY2gtdGV4dC1lZGl0b3IvaWNvbnMvYWxpZ24tanVzdGlmeS5qcyIsImJ1aWxkL21vbGVjdWxlcy9yaWNoLXRleHQtZWRpdG9yL2ljb25zL2FsaWduLWxlZnQuanMiLCJidWlsZC9tb2xlY3VsZXMvcmljaC10ZXh0LWVkaXRvci9pY29ucy9hbGlnbi1yaWdodC5qcyIsImJ1aWxkL21vbGVjdWxlcy9yaWNoLXRleHQtZWRpdG9yL2ljb25zL2JvbGQuanMiLCJidWlsZC9tb2xlY3VsZXMvcmljaC10ZXh0LWVkaXRvci9pY29ucy9idWxsZXQtbGlzdC5qcyIsImJ1aWxkL21vbGVjdWxlcy9yaWNoLXRleHQtZWRpdG9yL2ljb25zL2NsZWFyLmpzIiwiYnVpbGQvbW9sZWN1bGVzL3JpY2gtdGV4dC1lZGl0b3IvaWNvbnMvY29kZS5qcyIsImJ1aWxkL21vbGVjdWxlcy9yaWNoLXRleHQtZWRpdG9yL2ljb25zL2ZvbnQtc2l6ZS5qcyIsImJ1aWxkL21vbGVjdWxlcy9yaWNoLXRleHQtZWRpdG9yL2ljb25zL2ltYWdlLmpzIiwiYnVpbGQvbW9sZWN1bGVzL3JpY2gtdGV4dC1lZGl0b3IvaWNvbnMvaXRhbGljLmpzIiwiYnVpbGQvbW9sZWN1bGVzL3JpY2gtdGV4dC1lZGl0b3IvaWNvbnMvbGluay5qcyIsImJ1aWxkL21vbGVjdWxlcy9yaWNoLXRleHQtZWRpdG9yL2ljb25zL29yZGVyZWQtbGlzdC5qcyIsImJ1aWxkL21vbGVjdWxlcy9yaWNoLXRleHQtZWRpdG9yL2ljb25zL3BhZ2VicmVhay5qcyIsImJ1aWxkL21vbGVjdWxlcy9yaWNoLXRleHQtZWRpdG9yL2ljb25zL3BhcmFncmFwaC5qcyIsImJ1aWxkL21vbGVjdWxlcy9yaWNoLXRleHQtZWRpdG9yL2ljb25zL3F1b3RlLmpzIiwiYnVpbGQvbW9sZWN1bGVzL3JpY2gtdGV4dC1lZGl0b3IvaWNvbnMvcmVkby5qcyIsImJ1aWxkL21vbGVjdWxlcy9yaWNoLXRleHQtZWRpdG9yL2ljb25zL3N0cmlrZXRocm91Z2guanMiLCJidWlsZC9tb2xlY3VsZXMvcmljaC10ZXh0LWVkaXRvci9pY29ucy91bmRvLmpzIiwiYnVpbGQvbW9sZWN1bGVzL3JpY2gtdGV4dC1lZGl0b3IvaWNvbnMvaW5kZXguanMiLCJidWlsZC9tb2xlY3VsZXMvcmljaC10ZXh0LWVkaXRvci9jb21wb25lbnRzL21lbnUtYnV0dG9uLmpzIiwiYnVpbGQvbW9sZWN1bGVzL3JpY2gtdGV4dC1lZGl0b3IvY29tcG9uZW50cy9oZWFkaW5nLXNlbGVjdC5qcyIsImJ1aWxkL21vbGVjdWxlcy9yaWNoLXRleHQtZWRpdG9yL2NvbXBvbmVudHMvaW1hZ2UtYnV0dG9uLmpzIiwiYnVpbGQvbW9sZWN1bGVzL3JpY2gtdGV4dC1lZGl0b3IvY29tcG9uZW50cy9tZW51LWJhci5qcyIsImJ1aWxkL21vbGVjdWxlcy9yaWNoLXRleHQtZWRpdG9yL3JpY2gtdGV4dC1lZGl0b3IuanMiLCJub2RlX21vZHVsZXMvQHRpbnltY2UvdGlueW1jZS1yZWFjdC9saWIvZXMyMDE1L21haW4vdHMvY29tcG9uZW50cy9FZGl0b3JQcm9wVHlwZXMuanMiLCJub2RlX21vZHVsZXMvQHRpbnltY2UvdGlueW1jZS1yZWFjdC9saWIvZXMyMDE1L21haW4vdHMvVXRpbHMuanMiLCJub2RlX21vZHVsZXMvQHRpbnltY2UvdGlueW1jZS1yZWFjdC9saWIvZXMyMDE1L21haW4vdHMvU2NyaXB0TG9hZGVyMi5qcyIsIm5vZGVfbW9kdWxlcy9AdGlueW1jZS90aW55bWNlLXJlYWN0L2xpYi9lczIwMTUvbWFpbi90cy9UaW55TUNFLmpzIiwibm9kZV9tb2R1bGVzL0B0aW55bWNlL3RpbnltY2UtcmVhY3QvbGliL2VzMjAxNS9tYWluL3RzL2NvbXBvbmVudHMvRWRpdG9yLmpzIiwiYnVpbGQvbW9sZWN1bGVzL3RpbnltY2UtZWRpdG9yL3RpbnltY2UtZWRpdG9yLnN0eWxlZC5qcyIsImJ1aWxkL21vbGVjdWxlcy90aW55bWNlLWVkaXRvci90aW55bWNlLWVkaXRvci5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvbm9vcC5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC91c2VTdGF0ZU1hbmFnZXItN2UxZTg0ODkuZXNtLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlU3VwZXIuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlU3ByZWFkLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwibm9kZV9tb2R1bGVzL0BlbW90aW9uL3JlYWN0L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zaGVldC9kaXN0L2Vtb3Rpb24tc2hlZXQuZXNtLmpzIiwibm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsIm5vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1V0aWxpdHkuanMiLCJub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9Ub2tlbml6ZXIuanMiLCJub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9TZXJpYWxpemVyLmpzIiwibm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvTWlkZGxld2FyZS5qcyIsIm5vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3dlYWstbWVtb2l6ZS9kaXN0L2Vtb3Rpb24td2Vhay1tZW1vaXplLmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvZW1vdGlvbi1tZW1vaXplLmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9lbW90aW9uLWNhY2hlLmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9AZW1vdGlvbi91dGlscy9kaXN0L2Vtb3Rpb24tdXRpbHMuZXNtLmpzIiwibm9kZV9tb2R1bGVzL0BlbW90aW9uL2hhc2gvZGlzdC9lbW90aW9uLWhhc2guZXNtLmpzIiwibm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdW5pdGxlc3MvZGlzdC9lbW90aW9uLXVuaXRsZXNzLmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvZGlzdC9lbW90aW9uLXNlcmlhbGl6ZS5lc20uanMiLCJub2RlX21vZHVsZXMvQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MvZGlzdC9lbW90aW9uLXVzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzLmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tZWxlbWVudC0zODM4YmE5ZS5lc20uanMiLCJub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLXJlYWN0LmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90YWdnZWRUZW1wbGF0ZUxpdGVyYWwuanMiLCJub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsIm5vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvZG9tL2Rpc3QvZmxvYXRpbmctdWkuZG9tLm1qcyIsIm5vZGVfbW9kdWxlcy91c2UtaXNvbW9ycGhpYy1sYXlvdXQtZWZmZWN0L2Rpc3QvdXNlLWlzb21vcnBoaWMtbGF5b3V0LWVmZmVjdC5lc20uanMiLCJub2RlX21vZHVsZXMvcmVhY3Qtc2VsZWN0L2Rpc3QvaW5kZXgtYTMwMWY1MjYuZXNtLmpzIiwibm9kZV9tb2R1bGVzL21lbW9pemUtb25lL2Rpc3QvbWVtb2l6ZS1vbmUuZXNtLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0LXNlbGVjdC9kaXN0L1NlbGVjdC00OWE2MjgzMC5lc20uanMiLCJub2RlX21vZHVsZXMvcmVhY3Qtc2VsZWN0L2Rpc3QvcmVhY3Qtc2VsZWN0LmVzbS5qcyIsImJ1aWxkL21vbGVjdWxlcy9zZWxlY3Qvc2VsZWN0LXRoZW1lLmpzIiwiYnVpbGQvbW9sZWN1bGVzL3NlbGVjdC9zZWxlY3QuanMiLCJub2RlX21vZHVsZXMvcmVhY3Qtc2VsZWN0L2Rpc3QvdXNlQXN5bmMtYmE3YzZiNzcuZXNtLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0LXNlbGVjdC9hc3luYy9kaXN0L3JlYWN0LXNlbGVjdC1hc3luYy5lc20uanMiLCJidWlsZC9tb2xlY3VsZXMvc2VsZWN0L3NlbGVjdC1hc3luYy5qcyIsImJ1aWxkL21vbGVjdWxlcy9zdGVwcGVyL3N0ZXAuanMiLCJidWlsZC9tb2xlY3VsZXMvc3RlcHBlci9zdGVwcGVyLmpzIiwiYnVpbGQvbW9sZWN1bGVzL3ZhbHVlLWdyb3VwL3ZhbHVlLWdyb3VwLmpzIiwiYnVpbGQvb3JnYW5pc21zL2J1dHRvbi1ncm91cC9idXR0b24tZ3JvdXAuc3R5bGVkLmpzIiwiYnVpbGQvb3JnYW5pc21zL2J1dHRvbi1ncm91cC9zaW5nbGUtYnV0dG9uLWluLWdyb3VwLmpzIiwiYnVpbGQvb3JnYW5pc21zL2J1dHRvbi1ncm91cC9kcm9wLWRvd24taXRlbS13aXRoLWJ1dHRvbnMuanMiLCJidWlsZC9vcmdhbmlzbXMvYnV0dG9uLWdyb3VwL2J1dHRvbi1pbi1ncm91cC5qcyIsImJ1aWxkL29yZ2FuaXNtcy9idXR0b24tZ3JvdXAvYnV0dG9uLWdyb3VwLmpzIiwiYnVpbGQvb3JnYW5pc21zL2N1cnJlbnQtdXNlci1uYXYvY3VycmVudC11c2VyLW5hdi1zdHlsZWQuanMiLCJidWlsZC9vcmdhbmlzbXMvY3VycmVudC11c2VyLW5hdi9jdXJyZW50LXVzZXItbmF2LmpzIiwiYnVpbGQvb3JnYW5pc21zL21hZGUtd2l0aC1sb3ZlL21hZGUtd2l0aC1sb3ZlLmpzIiwiYnVpbGQvb3JnYW5pc21zL25hdmlnYXRpb24vbmF2aWdhdGlvbi1zdHlsZWQuanMiLCJidWlsZC9vcmdhbmlzbXMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLWVsZW1lbnQtd3JhcHBlci5qcyIsImJ1aWxkL29yZ2FuaXNtcy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uanMiLCJidWlsZC9nbG9iYWwuanMiLCJidWlsZC9pbmRleC5qcyIsImVudHJ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJykgOiAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50JykgOiAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJykgOiAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJykgOiAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJykgOiAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpIDogMHhlYWNlOyAvLyBUT0RPOiBXZSBkb24ndCB1c2UgQXN5bmNNb2RlIG9yIENvbmN1cnJlbnRNb2RlIGFueW1vcmUuIFRoZXkgd2VyZSB0ZW1wb3Jhcnlcbi8vICh1bnN0YWJsZSkgQVBJcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLiBDYW4gd2UgcmVtb3ZlIHRoZSBzeW1ib2xzP1xuXG52YXIgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYXN5bmNfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpIDogMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKSA6IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JykgOiAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmJsb2NrJykgOiAweGVhZDk7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJykgOiAweGVhZDU7XG52YXIgUkVBQ1RfUkVTUE9OREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5yZXNwb25kZXInKSA6IDB4ZWFkNjtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc2NvcGUnKSA6IDB4ZWFkNztcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUkVTUE9OREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfU0NPUEVfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59IC8vIEFzeW5jTW9kZSBpcyBkZXByZWNhdGVkIGFsb25nIHdpdGggaXNBc3luY01vZGVcblxudmFyIEFzeW5jTW9kZSA9IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbnZhciBDb25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7IC8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHx8IHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbiAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG5cbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHsgLyoqLyB9XG4gIH07XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxuICAgICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgICAgICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICtcbiAgICAgICAgICAgICAgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJyArXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICcgKyB0eXBlb2YgZXJyb3IgKyAnLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xuICAgICAgICAgICAgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xuXG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ZhaWxlZCAnICsgbG9jYXRpb24gKyAnIHR5cGU6ICcgKyBlcnJvci5tZXNzYWdlICsgKHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldHMgd2FybmluZyBjYWNoZSB3aGVuIHRlc3RpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBiaWdpbnQ6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdiaWdpbnQnKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBlbGVtZW50VHlwZTogY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSwgZGF0YSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5kYXRhID0gZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhOiB7fTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZVxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5cGVzXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gJiZcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBwcm9wIG9uIGAnICsgY29tcG9uZW50TmFtZSArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSA9IHRydWU7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xuXG4gICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSxcbiAgICAgICAgICB7ZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGV9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghUmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQgdHlwZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLiAnICtcbiAgICAgICAgICAgICdBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHdyaXRlIG9uZU9mKHgsIHksIHopIGluc3RlYWQgb2Ygb25lT2YoW3gsIHksIHpdKS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcywgZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgU3RyaW5nKHByb3BWYWx1ZSkgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKGhhcyhwcm9wVmFsdWUsIGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIGV4cGVjdGVkVHlwZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIHZhciBjaGVja2VyUmVzdWx0ID0gY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja2VyUmVzdWx0LmRhdGEgJiYgaGFzKGNoZWNrZXJSZXN1bHQuZGF0YSwgJ2V4cGVjdGVkVHlwZScpKSB7XG4gICAgICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGNoZWNrZXJSZXN1bHQuZGF0YS5leHBlY3RlZFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgPSAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPiAwKSA/ICcsIGV4cGVjdGVkIG9uZSBvZiB0eXBlIFsnICsgZXhwZWN0ZWRUeXBlcy5qb2luKCcsICcpICsgJ10nOiAnJztcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AnICsgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIHR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHByb3BGdWxsTmFtZSArICcuJyArIGtleSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZSArICdgLidcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb20gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoaGFzKHNoYXBlVHlwZXMsIGtleSkgJiYgdHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgZ2V0UHJlY2lzZVR5cGUoY2hlY2tlcikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAgICdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBrZXkgYCcgKyBrZXkgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nICtcbiAgICAgICAgICAgICdcXG5CYWQgb2JqZWN0OiAnICsgSlNPTi5zdHJpbmdpZnkocHJvcHNbcHJvcE5hbWVdLCBudWxsLCAnICAnKSArXG4gICAgICAgICAgICAnXFxuVmFsaWQga2V5czogJyArIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZhbHN5IHZhbHVlIGNhbid0IGJlIGEgU3ltYm9sXG4gICAgaWYgKCFwcm9wVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbiAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7XG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhblxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cbiAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJyArIHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXG4gIC8vIEZvciBleGFtcGxlLCBcInVuZGVmaW5lZFwiIG9yIFwib2YgdHlwZSBhcnJheVwiXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxuICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7XG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xuICBSZWFjdFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwiLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXHR2YXIgbmF0aXZlQ29kZVN0cmluZyA9ICdbbmF0aXZlIGNvZGVdJztcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzKCkge1xuXHRcdHZhciBjbGFzc2VzID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmICghYXJnKSBjb250aW51ZTtcblxuXHRcdFx0dmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnO1xuXG5cdFx0XHRpZiAoYXJnVHlwZSA9PT0gJ3N0cmluZycgfHwgYXJnVHlwZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0XHRpZiAoYXJnLmxlbmd0aCkge1xuXHRcdFx0XHRcdHZhciBpbm5lciA9IGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHRcdFx0XHRpZiAoaW5uZXIpIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChpbm5lcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChrZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNEYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiB2YWx1ZSBhIGRhdGU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIERhdGUuIFRoZSBmdW5jdGlvbiB3b3JrcyBmb3IgZGF0ZXMgdHJhbnNmZXJyZWQgYWNyb3NzIGlmcmFtZXMuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGEgZGF0ZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKCkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZShOYU4pKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBzb21lIHZhbHVlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKCcyMDE0LTAyLTMxJylcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIG9iamVjdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSh7fSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpOyAvLyBDbG9uZSB0aGUgZGF0ZVxuXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXG4gICAgICBjb25zb2xlLndhcm4obmV3IEVycm9yKCkuc3RhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwiaW1wb3J0IGlzRGF0ZSBmcm9tIFwiLi4vaXNEYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzVmFsaWRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgdmFsaWQ/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGZhbHNlIGlmIGFyZ3VtZW50IGlzIEludmFsaWQgRGF0ZSBhbmQgdHJ1ZSBvdGhlcndpc2UuXG4gKiBBcmd1bWVudCBpcyBjb252ZXJ0ZWQgdG8gRGF0ZSB1c2luZyBgdG9EYXRlYC4gU2VlIFt0b0RhdGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvdG9EYXRlfVxuICogSW52YWxpZCBEYXRlIGlzIGEgRGF0ZSwgd2hvc2UgdGltZSB2YWx1ZSBpcyBOYU4uXG4gKlxuICogVGltZSB2YWx1ZSBvZiBEYXRlOiBodHRwOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjkuMS4xXG4gKlxuICogQHBhcmFtIHsqfSBkYXRlIC0gdGhlIGRhdGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0aGUgZGF0ZSBpcyB2YWxpZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgdmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoMjAxNCwgMSwgMzEpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgdmFsdWUsIGNvbnZlcnRhYmxlIGludG8gYSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZCgxMzkzODA0ODAwMDAwKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgnJykpXG4gKiAvLz0+IGZhbHNlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNWYWxpZChkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG5cbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHJldHVybiAhaXNOYU4oTnVtYmVyKGRhdGUpKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0ludGVnZXIoZGlydHlOdW1iZXIpIHtcbiAgaWYgKGRpcnR5TnVtYmVyID09PSBudWxsIHx8IGRpcnR5TnVtYmVyID09PSB0cnVlIHx8IGRpcnR5TnVtYmVyID09PSBmYWxzZSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcblxuICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgIHJldHVybiBudW1iZXI7XG4gIH1cblxuICByZXR1cm4gbnVtYmVyIDwgMCA/IE1hdGguY2VpbChudW1iZXIpIDogTWF0aC5mbG9vcihudW1iZXIpO1xufSIsImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIHRpbWVzdGFtcCA9IHRvRGF0ZShkaXJ0eURhdGUpLmdldFRpbWUoKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyBhbW91bnQpO1xufSIsImltcG9ydCBhZGRNaWxsaXNlY29uZHMgZnJvbSBcIi4uL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHN1Yk1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBzdWJ0cmFjdGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBzdWJ0cmFjdGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDc1MCBtaWxsaXNlY29uZHMgZnJvbSAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gc3ViTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MjkuMjUwXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fREFZID0gODY0MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENEYXlPZlllYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mWWVhclRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICB2YXIgZGlmZmVyZW5jZSA9IHRpbWVzdGFtcCAtIHN0YXJ0T2ZZZWFyVGltZXN0YW1wO1xuICByZXR1cm4gTWF0aC5mbG9vcihkaWZmZXJlbmNlIC8gTUlMTElTRUNPTkRTX0lOX0RBWSkgKyAxO1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSAxO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcblxuICBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59IiwiaW1wb3J0IGdldFVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgeWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSk7XG4gIHZhciBmb3VydGhPZkphbnVhcnkgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBkYXRlID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5KTtcbiAgcmV0dXJuIGRhdGU7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTsgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcblxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCJ2YXIgZGVmYXVsdE9wdGlvbnMgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgcmV0dXJuIGRlZmF1bHRPcHRpb25zO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG5ld09wdGlvbnMpIHtcbiAgZGVmYXVsdE9wdGlvbnMgPSBuZXdPcHRpb25zO1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2VlayhkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuXG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApOyAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuXG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcblxuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7IC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMSBhbmQgNyBfYW5kXyBpcyBub3QgTmFOXG5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG5cbiAgdmFyIGZpcnN0V2Vla09mTmV4dFllYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRVVENGdWxsWWVhcih5ZWFyICsgMSwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vla09mTmV4dFllYXIsIG9wdGlvbnMpO1xuICB2YXIgZmlyc3RXZWVrT2ZUaGlzWWVhciA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZlRoaXNZZWFyLCBvcHRpb25zKTtcblxuICBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59IiwiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcblxuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyRmaXJzdFdlZWtDb24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRmaXJzdFdlZWtDb24gIT09IHZvaWQgMCA/IF9vcHRpb25zJGZpcnN0V2Vla0NvbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8uZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAxKTtcbiAgdmFyIHllYXIgPSBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpO1xuICB2YXIgZmlyc3RXZWVrID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vlay5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWsuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBkYXRlID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrLCBvcHRpb25zKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDV2VlayhkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ1dlZWsoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpLmdldFRpbWUoKTsgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcblxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG5cbiAgd2hpbGUgKG91dHB1dC5sZW5ndGggPCB0YXJnZXRMZW5ndGgpIHtcbiAgICBvdXRwdXQgPSAnMCcgKyBvdXRwdXQ7XG4gIH1cblxuICByZXR1cm4gc2lnbiArIG91dHB1dDtcbn0iLCJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG5cbnZhciBmb3JtYXR0ZXJzID0ge1xuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4pIHtcbiAgICAvLyBGcm9tIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtMzEvdHIzNS1kYXRlcy5odG1sI0RhdGVfRm9ybWF0X3Rva2Vuc1xuICAgIC8vIHwgWWVhciAgICAgfCAgICAgeSB8IHl5IHwgICB5eXkgfCAgeXl5eSB8IHl5eXl5IHxcbiAgICAvLyB8LS0tLS0tLS0tLXwtLS0tLS0tfC0tLS18LS0tLS0tLXwtLS0tLS0tfC0tLS0tLS18XG4gICAgLy8gfCBBRCAxICAgICB8ICAgICAxIHwgMDEgfCAgIDAwMSB8ICAwMDAxIHwgMDAwMDEgfFxuICAgIC8vIHwgQUQgMTIgICAgfCAgICAxMiB8IDEyIHwgICAwMTIgfCAgMDAxMiB8IDAwMDEyIHxcbiAgICAvLyB8IEFEIDEyMyAgIHwgICAxMjMgfCAyMyB8ICAgMTIzIHwgIDAxMjMgfCAwMDEyMyB8XG4gICAgLy8gfCBBRCAxMjM0ICB8ICAxMjM0IHwgMzQgfCAgMTIzNCB8ICAxMjM0IHwgMDEyMzQgfFxuICAgIC8vIHwgQUQgMTIzNDUgfCAxMjM0NSB8IDQ1IHwgMTIzNDUgfCAxMjM0NSB8IDEyMzQ1IHxcbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTsgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcblxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlO1xuXG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG5cbiAgICAgIGNhc2UgJ2FhYWEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZSA9PT0gJ2FtJyA/ICdhLm0uJyA6ICdwLm0uJztcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyIHx8IDEyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBIb3VyIFswLTIzXVxuICBIOiBmdW5jdGlvbiBIKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ01pbnV0ZXMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uIHMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUzogZnVuY3Rpb24gUyhkYXRlLCB0b2tlbikge1xuICAgIHZhciBudW1iZXJPZkRpZ2l0cyA9IHRva2VuLmxlbmd0aDtcbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgICB2YXIgZnJhY3Rpb25hbFNlY29uZHMgPSBNYXRoLmZsb29yKG1pbGxpc2Vjb25kcyAqIE1hdGgucG93KDEwLCBudW1iZXJPZkRpZ2l0cyAtIDMpKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGZyYWN0aW9uYWxTZWNvbmRzLCB0b2tlbi5sZW5ndGgpO1xuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0dGVyczsiLCJpbXBvcnQgZ2V0VVRDRGF5T2ZZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0RheU9mWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ0lTT1dlZWsgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBhZGRMZWFkaW5nWmVyb3MgZnJvbSBcIi4uLy4uL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qc1wiO1xuaW1wb3J0IGxpZ2h0Rm9ybWF0dGVycyBmcm9tIFwiLi4vbGlnaHRGb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG52YXIgZGF5UGVyaW9kRW51bSA9IHtcbiAgYW06ICdhbScsXG4gIHBtOiAncG0nLFxuICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgbm9vbjogJ25vb24nLFxuICBtb3JuaW5nOiAnbW9ybmluZycsXG4gIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgbmlnaHQ6ICduaWdodCdcbn07XG5cbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xudmFyIGZvcm1hdHRlcnMgPSB7XG4gIC8vIEVyYVxuICBHOiBmdW5jdGlvbiBHKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBlcmEgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgPiAwID8gMSA6IDA7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcblxuICAgICAgY2FzZSAnR0dHR0cnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93J1xuICAgICAgICB9KTtcbiAgICAgIC8vIEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0XG5cbiAgICAgIGNhc2UgJ0dHR0cnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSAneW8nKSB7XG4gICAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTsgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcblxuICAgICAgdmFyIHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHllYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnkoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFk6IGZ1bmN0aW9uIFkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHNpZ25lZFdlZWtZZWFyID0gZ2V0VVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7IC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG5cbiAgICB2YXIgd2Vla1llYXIgPSBzaWduZWRXZWVrWWVhciA+IDAgPyBzaWduZWRXZWVrWWVhciA6IDEgLSBzaWduZWRXZWVrWWVhcjsgLy8gVHdvIGRpZ2l0IHllYXJcblxuICAgIGlmICh0b2tlbiA9PT0gJ1lZJykge1xuICAgICAgdmFyIHR3b0RpZ2l0WWVhciA9IHdlZWtZZWFyICUgMTAwO1xuICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0d29EaWdpdFllYXIsIDIpO1xuICAgIH0gLy8gT3JkaW5hbCBudW1iZXJcblxuXG4gICAgaWYgKHRva2VuID09PSAnWW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrWWVhciwge1xuICAgICAgICB1bml0OiAneWVhcidcbiAgICAgIH0pO1xuICAgIH0gLy8gUGFkZGluZ1xuXG5cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICBSOiBmdW5jdGlvbiBSKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIGlzb1dlZWtZZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGF0ZSk7IC8vIFBhZGRpbmdcblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ1EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcblxuICAgICAgY2FzZSAnUVEnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG5cbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG5cbiAgICAgIGNhc2UgJ1FRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcblxuICAgICAgY2FzZSAnUVFRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSAncSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuXG4gICAgICBjYXNlICdxcSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcblxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcblxuICAgICAgY2FzZSAncXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuXG4gICAgICBjYXNlICdxcXFxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cblxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ00nOlxuICAgICAgY2FzZSAnTU0nOlxuICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLk0oZGF0ZSwgdG9rZW4pO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuXG4gICAgICBjYXNlICdNbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwge1xuICAgICAgICAgIHVuaXQ6ICdtb250aCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcblxuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG5cbiAgICAgIGNhc2UgJ01NTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG5cbiAgICAgIGNhc2UgJ01NTU0nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBtb250aFxuICBMOiBmdW5jdGlvbiBMKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcblxuICAgICAgY2FzZSAnTEwnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG5cbiAgICAgIGNhc2UgJ0xvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcblxuICAgICAgY2FzZSAnTExMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcblxuICAgICAgY2FzZSAnTExMTCc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIExvY2FsIHdlZWsgb2YgeWVhclxuICB3OiBmdW5jdGlvbiB3KGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciB3ZWVrID0gZ2V0VVRDV2VlayhkYXRlLCBvcHRpb25zKTtcblxuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWsgb2YgeWVhclxuICBJOiBmdW5jdGlvbiBJKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBpc29XZWVrID0gZ2V0VVRDSVNPV2VlayhkYXRlKTtcblxuICAgIGlmICh0b2tlbiA9PT0gJ0lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvV2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmQoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBEYXkgb2YgeWVhclxuICBEOiBmdW5jdGlvbiBEKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZlllYXIgPSBnZXRVVENEYXlPZlllYXIoZGF0ZSk7XG5cbiAgICBpZiAodG9rZW4gPT09ICdEbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRheU9mWWVhciwge1xuICAgICAgICB1bml0OiAnZGF5T2ZZZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgJ0UnOlxuICAgICAgY2FzZSAnRUUnOlxuICAgICAgY2FzZSAnRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG5cbiAgICAgIGNhc2UgJ0VFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcblxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG5cbiAgICAgIGNhc2UgJ0VFRUUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIExvY2FsIGRheSBvZiB3ZWVrXG4gIGU6IGZ1bmN0aW9uIGUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKE50aCBkYXkgb2Ygd2VlayB3aXRoIGN1cnJlbnQgbG9jYWxlIG9yIHdlZWtTdGFydHNPbilcbiAgICAgIGNhc2UgJ2UnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcblxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuXG4gICAgICBjYXNlICdlbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2VlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG5cbiAgICAgIGNhc2UgJ2VlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuXG4gICAgICBjYXNlICdlZWVlJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2Vla1xuICBjOiBmdW5jdGlvbiBjKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcblxuICAgICAgY2FzZSAnY2MnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoXG5cbiAgICAgIGNhc2UgJ2NvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG5cbiAgICAgIGNhc2UgJ2NjY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcblxuICAgICAgY2FzZSAnY2NjY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG5cbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMlxuICAgICAgY2FzZSAnaSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcoaXNvRGF5T2ZXZWVrKTtcbiAgICAgIC8vIDAyXG5cbiAgICAgIGNhc2UgJ2lpJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29EYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAybmRcblxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuXG4gICAgICBjYXNlICdpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcblxuICAgICAgY2FzZSAnaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuXG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcblxuICAgICAgY2FzZSAnaWlpaSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnYWFhYSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gQU0sIFBNLCBtaWRuaWdodCwgbm9vblxuICBiOiBmdW5jdGlvbiBiKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuXG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2InOlxuICAgICAgY2FzZSAnYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnYmJiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2JiYmInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIGluIHRoZSBtb3JuaW5nLCBpbiB0aGUgYWZ0ZXJub29uLCBpbiB0aGUgZXZlbmluZywgYXQgbmlnaHRcbiAgQjogZnVuY3Rpb24gQihkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gICAgdmFyIGRheVBlcmlvZEVudW1WYWx1ZTtcblxuICAgIGlmIChob3VycyA+PSAxNykge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ldmVuaW5nO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uYWZ0ZXJub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gNCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5tb3JuaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5pZ2h0O1xuICAgIH1cblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ0JCQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdCQkJCJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2hvJykge1xuICAgICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG4gICAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMTI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLkgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBIb3VyIFswLTExXVxuICBLOiBmdW5jdGlvbiBLKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKSAlIDEyO1xuXG4gICAgaWYgKHRva2VuID09PSAnS28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcblxuICAgIGlmICh0b2tlbiA9PT0gJ2tvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdtbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDTWludXRlcygpLCB7XG4gICAgICAgIHVuaXQ6ICdtaW51dGUnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUzogZnVuY3Rpb24gUyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuUyhkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBhbHdheXMgYCdaJ2ApXG4gIFg6IGZ1bmN0aW9uIFgoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblxuICAgIGlmICh0aW1lem9uZU9mZnNldCA9PT0gMCkge1xuICAgICAgcmV0dXJuICdaJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhgXG5cbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYWGBcblxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBgJyswMDowMCdgIG9yIGVxdWl2YWxlbnQpXG4gIHg6IGZ1bmN0aW9uIHgoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlICd4JzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eGBcblxuICAgICAgY2FzZSAneHh4eCc6XG4gICAgICBjYXNlICd4eCc6XG4gICAgICAgIC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHh4YFxuXG4gICAgICBjYXNlICd4eHh4eCc6XG4gICAgICBjYXNlICd4eHgnOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gU2hvcnRcbiAgICAgIGNhc2UgJ08nOlxuICAgICAgY2FzZSAnT08nOlxuICAgICAgY2FzZSAnT09PJzpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICAgIC8vIExvbmdcblxuICAgICAgY2FzZSAnT09PTyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXRpb24pXG4gIHo6IGZ1bmN0aW9uIHooZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG5cbiAgICAgIGNhc2UgJ3p6enonOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBTZWNvbmRzIHRpbWVzdGFtcFxuICB0OiBmdW5jdGlvbiB0KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IE1hdGguZmxvb3Iob3JpZ2luYWxEYXRlLmdldFRpbWUoKSAvIDEwMDApO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaWxsaXNlY29uZHMgdGltZXN0YW1wXG4gIFQ6IGZ1bmN0aW9uIFQoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXN0YW1wID0gb3JpZ2luYWxEYXRlLmdldFRpbWUoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVTaG9ydChvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IE1hdGguZmxvb3IoYWJzT2Zmc2V0IC8gNjApO1xuICB2YXIgbWludXRlcyA9IGFic09mZnNldCAlIDYwO1xuXG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG5cbiAgdmFyIGRlbGltaXRlciA9IGRpcnR5RGVsaW1pdGVyIHx8ICcnO1xuICByZXR1cm4gc2lnbiArIFN0cmluZyhob3VycykgKyBkZWxpbWl0ZXIgKyBhZGRMZWFkaW5nWmVyb3MobWludXRlcywgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyhvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIGlmIChvZmZzZXQgJSA2MCA9PT0gMCkge1xuICAgIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgICByZXR1cm4gc2lnbiArIGFkZExlYWRpbmdaZXJvcyhNYXRoLmFicyhvZmZzZXQpIC8gNjAsIDIpO1xuICB9XG5cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gYWRkTGVhZGluZ1plcm9zKE1hdGguZmxvb3IoYWJzT2Zmc2V0IC8gNjApLCAyKTtcbiAgdmFyIG1pbnV0ZXMgPSBhZGRMZWFkaW5nWmVyb3MoYWJzT2Zmc2V0ICUgNjAsIDIpO1xuICByZXR1cm4gc2lnbiArIGhvdXJzICsgZGVsaW1pdGVyICsgbWludXRlcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0dGVyczsiLCJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ1BQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG5cbnZhciB0aW1lTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIHRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSAncCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdzaG9ydCdcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAncHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAncHBwcCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ2Z1bGwnXG4gICAgICB9KTtcbiAgfVxufTtcblxudmFyIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHZhciBtYXRjaFJlc3VsdCA9IHBhdHRlcm4ubWF0Y2goLyhQKykocCspPy8pIHx8IFtdO1xuICB2YXIgZGF0ZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsxXTtcbiAgdmFyIHRpbWVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMl07XG5cbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuXG4gIHZhciBkYXRlVGltZUZvcm1hdDtcblxuICBzd2l0Y2ggKGRhdGVQYXR0ZXJuKSB7XG4gICAgY2FzZSAnUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ1BQUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnUFBQUCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG5cbnZhciBsb25nRm9ybWF0dGVycyA9IHtcbiAgcDogdGltZUxvbmdGb3JtYXR0ZXIsXG4gIFA6IGRhdGVUaW1lTG9uZ0Zvcm1hdHRlclxufTtcbmV4cG9ydCBkZWZhdWx0IGxvbmdGb3JtYXR0ZXJzOyIsIi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkYXRlKSB7XG4gIHZhciB1dGNEYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLCBkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSwgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkpO1xuICB1dGNEYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gIHJldHVybiBkYXRlLmdldFRpbWUoKSAtIHV0Y0RhdGUuZ2V0VGltZSgpO1xufSIsInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCJ2YXIgZm9ybWF0RGlzdGFuY2VMb2NhbGUgPSB7XG4gIGxlc3NUaGFuWFNlY29uZHM6IHtcbiAgICBvbmU6ICdsZXNzIHRoYW4gYSBzZWNvbmQnLFxuICAgIG90aGVyOiAnbGVzcyB0aGFuIHt7Y291bnR9fSBzZWNvbmRzJ1xuICB9LFxuICB4U2Vjb25kczoge1xuICAgIG9uZTogJzEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBzZWNvbmRzJ1xuICB9LFxuICBoYWxmQU1pbnV0ZTogJ2hhbGYgYSBtaW51dGUnLFxuICBsZXNzVGhhblhNaW51dGVzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgbWludXRlJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gbWludXRlcydcbiAgfSxcbiAgeE1pbnV0ZXM6IHtcbiAgICBvbmU6ICcxIG1pbnV0ZScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gbWludXRlcydcbiAgfSxcbiAgYWJvdXRYSG91cnM6IHtcbiAgICBvbmU6ICdhYm91dCAxIGhvdXInLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IGhvdXJzJ1xuICB9LFxuICB4SG91cnM6IHtcbiAgICBvbmU6ICcxIGhvdXInLFxuICAgIG90aGVyOiAne3tjb3VudH19IGhvdXJzJ1xuICB9LFxuICB4RGF5czoge1xuICAgIG9uZTogJzEgZGF5JyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBkYXlzJ1xuICB9LFxuICBhYm91dFhXZWVrczoge1xuICAgIG9uZTogJ2Fib3V0IDEgd2VlaycsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gd2Vla3MnXG4gIH0sXG4gIHhXZWVrczoge1xuICAgIG9uZTogJzEgd2VlaycsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gd2Vla3MnXG4gIH0sXG4gIGFib3V0WE1vbnRoczoge1xuICAgIG9uZTogJ2Fib3V0IDEgbW9udGgnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IG1vbnRocydcbiAgfSxcbiAgeE1vbnRoczoge1xuICAgIG9uZTogJzEgbW9udGgnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1vbnRocydcbiAgfSxcbiAgYWJvdXRYWWVhcnM6IHtcbiAgICBvbmU6ICdhYm91dCAxIHllYXInLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICB4WWVhcnM6IHtcbiAgICBvbmU6ICcxIHllYXInLFxuICAgIG90aGVyOiAne3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBvdmVyWFllYXJzOiB7XG4gICAgb25lOiAnb3ZlciAxIHllYXInLFxuICAgIG90aGVyOiAnb3ZlciB7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIGFsbW9zdFhZZWFyczoge1xuICAgIG9uZTogJ2FsbW9zdCAxIHllYXInLFxuICAgIG90aGVyOiAnYWxtb3N0IHt7Y291bnR9fSB5ZWFycydcbiAgfVxufTtcblxudmFyIGZvcm1hdERpc3RhbmNlID0gZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2UodG9rZW4sIGNvdW50LCBvcHRpb25zKSB7XG4gIHZhciByZXN1bHQ7XG4gIHZhciB0b2tlblZhbHVlID0gZm9ybWF0RGlzdGFuY2VMb2NhbGVbdG9rZW5dO1xuXG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLmFkZFN1ZmZpeCkge1xuICAgIGlmIChvcHRpb25zLmNvbXBhcmlzb24gJiYgb3B0aW9ucy5jb21wYXJpc29uID4gMCkge1xuICAgICAgcmV0dXJuICdpbiAnICsgcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgJyBhZ28nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEZvcm1hdExvbmdGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIC8vIFRPRE86IFJlbW92ZSBTdHJpbmcoKVxuICAgIHZhciB3aWR0aCA9IG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICB2YXIgZm9ybWF0ID0gYXJncy5mb3JtYXRzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHNbYXJncy5kZWZhdWx0V2lkdGhdO1xuICAgIHJldHVybiBmb3JtYXQ7XG4gIH07XG59IiwiaW1wb3J0IGJ1aWxkRm9ybWF0TG9uZ0ZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkRm9ybWF0TG9uZ0ZuL2luZGV4LmpzXCI7XG52YXIgZGF0ZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdFRUVFLCBNTU1NIGRvLCB5JyxcbiAgbG9uZzogJ01NTU0gZG8sIHknLFxuICBtZWRpdW06ICdNTU0gZCwgeScsXG4gIHNob3J0OiAnTU0vZGQveXl5eSdcbn07XG52YXIgdGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdoOm1tOnNzIGEgenp6eicsXG4gIGxvbmc6ICdoOm1tOnNzIGEgeicsXG4gIG1lZGl1bTogJ2g6bW06c3MgYScsXG4gIHNob3J0OiAnaDptbSBhJ1xufTtcbnZhciBkYXRlVGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBsb25nOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbWVkaXVtOiAne3tkYXRlfX0sIHt7dGltZX19JyxcbiAgc2hvcnQ6ICd7e2RhdGV9fSwge3t0aW1lfX0nXG59O1xudmFyIGZvcm1hdExvbmcgPSB7XG4gIGRhdGU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KSxcbiAgdGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IHRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICBkYXRlVGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdExvbmc7IiwidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xuXG52YXIgZm9ybWF0UmVsYXRpdmUgPSBmdW5jdGlvbiBmb3JtYXRSZWxhdGl2ZSh0b2tlbiwgX2RhdGUsIF9iYXNlRGF0ZSwgX29wdGlvbnMpIHtcbiAgcmV0dXJuIGZvcm1hdFJlbGF0aXZlTG9jYWxlW3Rva2VuXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdFJlbGF0aXZlOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuXG4gICAgaWYgKGNvbnRleHQgPT09ICdmb3JtYXR0aW5nJyAmJiBhcmdzLmZvcm1hdHRpbmdWYWx1ZXMpIHtcbiAgICAgIHZhciBkZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRGb3JtYXR0aW5nV2lkdGggfHwgYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YXIgd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogZGVmYXVsdFdpZHRoO1xuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1tkZWZhdWx0V2lkdGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2RlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdFdpZHRoO1xuXG4gICAgICB2YXIgX3dpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuXG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gYXJncy5hcmd1bWVudENhbGxiYWNrID8gYXJncy5hcmd1bWVudENhbGxiYWNrKGRpcnR5SW5kZXgpIDogZGlydHlJbmRleDsgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcblxuICAgIHJldHVybiB2YWx1ZXNBcnJheVtpbmRleF07XG4gIH07XG59IiwiaW1wb3J0IGJ1aWxkTG9jYWxpemVGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanNcIjtcbnZhciBlcmFWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydCJywgJ0EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnQkMnLCAnQUQnXSxcbiAgd2lkZTogWydCZWZvcmUgQ2hyaXN0JywgJ0Fubm8gRG9taW5pJ11cbn07XG52YXIgcXVhcnRlclZhbHVlcyA9IHtcbiAgbmFycm93OiBbJzEnLCAnMicsICczJywgJzQnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnUTEnLCAnUTInLCAnUTMnLCAnUTQnXSxcbiAgd2lkZTogWycxc3QgcXVhcnRlcicsICcybmQgcXVhcnRlcicsICczcmQgcXVhcnRlcicsICc0dGggcXVhcnRlciddXG59OyAvLyBOb3RlOiBpbiBFbmdsaXNoLCB0aGUgbmFtZXMgb2YgZGF5cyBvZiB0aGUgd2VlayBhbmQgbW9udGhzIGFyZSBjYXBpdGFsaXplZC5cbi8vIElmIHlvdSBhcmUgbWFraW5nIGEgbmV3IGxvY2FsZSBiYXNlZCBvbiB0aGlzIG9uZSwgY2hlY2sgaWYgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhlIGxhbmd1YWdlIHlvdSdyZSB3b3JraW5nIG9uLlxuLy8gR2VuZXJhbGx5LCBmb3JtYXR0ZWQgZGF0ZXMgc2hvdWxkIGxvb2sgbGlrZSB0aGV5IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgc2VudGVuY2UsXG4vLyBlLmcuIGluIFNwYW5pc2ggbGFuZ3VhZ2UgdGhlIHdlZWtkYXlzIGFuZCBtb250aHMgc2hvdWxkIGJlIGluIHRoZSBsb3dlcmNhc2UuXG5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG5cbnZhciBvcmRpbmFsTnVtYmVyID0gZnVuY3Rpb24gb3JkaW5hbE51bWJlcihkaXJ0eU51bWJlciwgX29wdGlvbnMpIHtcbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7IC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcblxuICBpZiAocmVtMTAwID4gMjAgfHwgcmVtMTAwIDwgMTApIHtcbiAgICBzd2l0Y2ggKHJlbTEwMCAlIDEwKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnc3QnO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnbmQnO1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudW1iZXIgKyAndGgnO1xufTtcblxudmFyIGxvY2FsaXplID0ge1xuICBvcmRpbmFsTnVtYmVyOiBvcmRpbmFsTnVtYmVyLFxuICBlcmE6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBlcmFWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBxdWFydGVyVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnLFxuICAgIGFyZ3VtZW50Q2FsbGJhY2s6IGZ1bmN0aW9uIGFyZ3VtZW50Q2FsbGJhY2socXVhcnRlcikge1xuICAgICAgcmV0dXJuIHF1YXJ0ZXIgLSAxO1xuICAgIH1cbiAgfSksXG4gIG1vbnRoOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogbW9udGhWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIGRheTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5UGVyaW9kOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnLFxuICAgIGZvcm1hdHRpbmdWYWx1ZXM6IGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdEZvcm1hdHRpbmdXaWR0aDogJ3dpZGUnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgbG9jYWxpemU7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG5cbiAgICBpZiAoIW1hdGNoUmVzdWx0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVBhdHRlcm5zID0gd2lkdGggJiYgYXJncy5wYXJzZVBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07XG4gICAgdmFyIGtleSA9IEFycmF5LmlzQXJyYXkocGFyc2VQYXR0ZXJucykgPyBmaW5kSW5kZXgocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSkgOiBmaW5kS2V5KHBhcnNlUGF0dGVybnMsIGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpO1xuICAgIH0pO1xuICAgIHZhciB2YWx1ZTtcbiAgICB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhrZXkpIDoga2V5O1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhciByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVzdDogcmVzdFxuICAgIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSA9IDA7IGtleSA8IGFycmF5Lmxlbmd0aDsga2V5KyspIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaFBhdHRlcm5GbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLm1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcbiAgICB2YXIgcGFyc2VSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5wYXJzZVBhdHRlcm4pO1xuICAgIGlmICghcGFyc2VSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhwYXJzZVJlc3VsdFswXSkgOiBwYXJzZVJlc3VsdFswXTtcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/IG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZSkgOiB2YWx1ZTtcbiAgICB2YXIgcmVzdCA9IHN0cmluZy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHJlc3Q6IHJlc3RcbiAgICB9O1xuICB9O1xufSIsImltcG9ydCBidWlsZE1hdGNoRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRNYXRjaEZuL2luZGV4LmpzXCI7XG5pbXBvcnQgYnVpbGRNYXRjaFBhdHRlcm5GbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoUGF0dGVybkZuL2luZGV4LmpzXCI7XG52YXIgbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9eKFxcZCspKHRofHN0fG5kfHJkKT8vaTtcbnZhciBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL1xcZCsvaTtcbnZhciBtYXRjaEVyYVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGJ8YSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGJcXC4/XFxzP2NcXC4/fGJcXC4/XFxzP2NcXC4/XFxzP2VcXC4/fGFcXC4/XFxzP2RcXC4/fGNcXC4/XFxzP2VcXC4/KS9pLFxuICB3aWRlOiAvXihiZWZvcmUgY2hyaXN0fGJlZm9yZSBjb21tb24gZXJhfGFubm8gZG9taW5pfGNvbW1vbiBlcmEpL2lcbn07XG52YXIgcGFyc2VFcmFQYXR0ZXJucyA9IHtcbiAgYW55OiBbL15iL2ksIC9eKGF8YykvaV1cbn07XG52YXIgbWF0Y2hRdWFydGVyUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bMTIzNF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9ecVsxMjM0XS9pLFxuICB3aWRlOiAvXlsxMjM0XSh0aHxzdHxuZHxyZCk/IHF1YXJ0ZXIvaVxufTtcbnZhciBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgYW55OiBbLzEvaSwgLzIvaSwgLzMvaSwgLzQvaV1cbn07XG52YXIgbWF0Y2hNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW2pmbWFzb25kXS9pLFxuICBhYmJyZXZpYXRlZDogL14oamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpL2ksXG4gIHdpZGU6IC9eKGphbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2lcbn07XG52YXIgcGFyc2VNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXmovaSwgL15mL2ksIC9ebS9pLCAvXmEvaSwgL15tL2ksIC9eai9pLCAvXmovaSwgL15hL2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXSxcbiAgYW55OiBbL15qYS9pLCAvXmYvaSwgL15tYXIvaSwgL15hcC9pLCAvXm1heS9pLCAvXmp1bi9pLCAvXmp1bC9pLCAvXmF1L2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXVxufTtcbnZhciBtYXRjaERheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW3NtdHdmXS9pLFxuICBzaG9ydDogL14oc3V8bW98dHV8d2V8dGh8ZnJ8c2EpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihzdW58bW9ufHR1ZXx3ZWR8dGh1fGZyaXxzYXQpL2ksXG4gIHdpZGU6IC9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pXG59O1xudmFyIHBhcnNlRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9ecy9pLCAvXm0vaSwgL150L2ksIC9edy9pLCAvXnQvaSwgL15mL2ksIC9ecy9pXSxcbiAgYW55OiBbL15zdS9pLCAvXm0vaSwgL150dS9pLCAvXncvaSwgL150aC9pLCAvXmYvaSwgL15zYS9pXVxufTtcbnZhciBtYXRjaERheVBlcmlvZFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGF8cHxtaXxufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaSxcbiAgYW55OiAvXihbYXBdXFwuP1xccz9tXFwuP3xtaWRuaWdodHxub29ufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaVxufTtcbnZhciBwYXJzZURheVBlcmlvZFBhdHRlcm5zID0ge1xuICBhbnk6IHtcbiAgICBhbTogL15hL2ksXG4gICAgcG06IC9ecC9pLFxuICAgIG1pZG5pZ2h0OiAvXm1pL2ksXG4gICAgbm9vbjogL15uby9pLFxuICAgIG1vcm5pbmc6IC9tb3JuaW5nL2ksXG4gICAgYWZ0ZXJub29uOiAvYWZ0ZXJub29uL2ksXG4gICAgZXZlbmluZzogL2V2ZW5pbmcvaSxcbiAgICBuaWdodDogL25pZ2h0L2lcbiAgfVxufTtcbnZhciBtYXRjaCA9IHtcbiAgb3JkaW5hbE51bWJlcjogYnVpbGRNYXRjaFBhdHRlcm5Gbih7XG4gICAgbWF0Y2hQYXR0ZXJuOiBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHBhcnNlUGF0dGVybjogcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbiB2YWx1ZUNhbGxiYWNrKHZhbHVlKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG4gIH0pLFxuICBlcmE6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBxdWFydGVyOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2soaW5kZXgpIHtcbiAgICAgIHJldHVybiBpbmRleCArIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgZGF5OiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgZGF5UGVyaW9kOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICdhbnknLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgbWF0Y2g7IiwiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuXG4vKipcbiAqIEB0eXBlIHtMb2NhbGV9XG4gKiBAY2F0ZWdvcnkgTG9jYWxlc1xuICogQHN1bW1hcnkgRW5nbGlzaCBsb2NhbGUgKFVuaXRlZCBTdGF0ZXMpLlxuICogQGxhbmd1YWdlIEVuZ2xpc2hcbiAqIEBpc28tNjM5LTIgZW5nXG4gKiBAYXV0aG9yIFNhc2hhIEtvc3MgW0Brb3Nzbm9jb3JwXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20va29zc25vY29ycH1cbiAqIEBhdXRob3IgTGVzaGEgS29zcyBbQGxlc2hha29zc117QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2xlc2hha29zc31cbiAqL1xudmFyIGxvY2FsZSA9IHtcbiAgY29kZTogJ2VuLVVTJyxcbiAgZm9ybWF0RGlzdGFuY2U6IGZvcm1hdERpc3RhbmNlLFxuICBmb3JtYXRMb25nOiBmb3JtYXRMb25nLFxuICBmb3JtYXRSZWxhdGl2ZTogZm9ybWF0UmVsYXRpdmUsXG4gIGxvY2FsaXplOiBsb2NhbGl6ZSxcbiAgbWF0Y2g6IG1hdGNoLFxuICBvcHRpb25zOiB7XG4gICAgd2Vla1N0YXJ0c09uOiAwXG4gICAgLyogU3VuZGF5ICovXG4gICAgLFxuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogMVxuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgbG9jYWxlOyIsImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xuXG52YXIgZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9beVlRcU1Md0lkRGVjaWhIS2ttc11vfChcXHcpXFwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZzsgLy8gVGhpcyBSZWdFeHAgY2F0Y2hlcyBzeW1ib2xzIGVzY2FwZWQgYnkgcXVvdGVzLCBhbmQgYWxzb1xuLy8gc2VxdWVuY2VzIG9mIHN5bWJvbHMgUCwgcCwgYW5kIHRoZSBjb21iaW5hdGlvbnMgbGlrZSBgUFBQUFBQUHBwcHBwYFxuXG52YXIgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcbnZhciBlc2NhcGVkU3RyaW5nUmVnRXhwID0gL14nKFteXSo/KSc/JC87XG52YXIgZG91YmxlUXVvdGVSZWdFeHAgPSAvJycvZztcbnZhciB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCA9IC9bYS16QS1aXS87XG4vKipcbiAqIEBuYW1lIGZvcm1hdFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBGb3JtYXQgdGhlIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZyBpbiB0aGUgZ2l2ZW4gZm9ybWF0LiBUaGUgcmVzdWx0IG1heSB2YXJ5IGJ5IGxvY2FsZS5cbiAqXG4gKiA+IOKaoO+4jyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBgZm9ybWF0YCB0b2tlbnMgZGlmZmVyIGZyb20gTW9tZW50LmpzIGFuZCBvdGhlciBsaWJyYXJpZXMuXG4gKiA+IFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIFRoZSBjaGFyYWN0ZXJzIHdyYXBwZWQgYmV0d2VlbiB0d28gc2luZ2xlIHF1b3RlcyBjaGFyYWN0ZXJzICgnKSBhcmUgZXNjYXBlZC5cbiAqIFR3byBzaW5nbGUgcXVvdGVzIGluIGEgcm93LCB3aGV0aGVyIGluc2lkZSBvciBvdXRzaWRlIGEgcXVvdGVkIHNlcXVlbmNlLCByZXByZXNlbnQgYSAncmVhbCcgc2luZ2xlIHF1b3RlLlxuICogKHNlZSB0aGUgbGFzdCBleGFtcGxlKVxuICpcbiAqIEZvcm1hdCBvZiB0aGUgc3RyaW5nIGlzIGJhc2VkIG9uIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9GaWVsZF9TeW1ib2xfVGFibGVcbiAqIHdpdGggYSBmZXcgYWRkaXRpb25zIChzZWUgbm90ZSA3IGJlbG93IHRoZSB0YWJsZSkuXG4gKlxuICogQWNjZXB0ZWQgcGF0dGVybnM6XG4gKiB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYXR0ZXJuIHwgUmVzdWx0IGV4YW1wbGVzICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLXxcbiAqIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEcuLkdHRyAgfCBBRCwgQkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHICAgIHwgQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3QgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHR0cgICB8IEEsIEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQ2FsZW5kYXIgeWVhciAgICAgICAgICAgICAgICAgICB8IHkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5byAgICAgIHwgNDR0aCwgMXN0LCAwdGgsIDE3dGggICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eSAgICAgfCAwNDQsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5ICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eXkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICB8IFkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZbyAgICAgIHwgNDR0aCwgMXN0LCAxOTAwdGgsIDIwMTd0aCAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWSAgICAgfCAwNDQsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWVkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgICB8IFIgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUiAgICAgIHwgLTQzLCAwMCwgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSICAgICB8IC0wNDMsIDAwMCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlIgICAgfCAtMDA0MywgMDAwMCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSUiAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1LDcgfFxuICogfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgIHwgdSAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1ICAgICAgfCAtNDMsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXUgICAgIHwgLTA0MywgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dSAgICB8IC0wMDQzLCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXV1ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IFF1YXJ0ZXIgKGZvcm1hdHRpbmcpICAgICAgICAgICAgfCBRICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVFRICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IFF1YXJ0ZXIgKHN0YW5kLWFsb25lKSAgICAgICAgICAgfCBxICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXFxICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IE1vbnRoIChmb3JtYXR0aW5nKSAgICAgICAgICAgICAgfCBNICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU0gICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTSAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU1NICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1vbnRoIChzdGFuZC1hbG9uZSkgICAgICAgICAgICAgfCBMICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTEwgICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTCAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTExMICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgfCB3ICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHd3ICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICAgfCBJICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElJICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICAgfCBkICAgICAgIHwgMSwgMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDMxc3QgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRkICAgICAgfCAwMSwgMDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICAgfCBEICAgICAgIHwgMSwgMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDM2NXRoLCAzNjZ0aCAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREICAgICAgfCAwMSwgMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREQgICAgIHwgMDAxLCAwMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRERERCAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgRGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgICAgICB8IEUuLkVFRSAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFRSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgfCBpICAgICAgIHwgMSwgMiwgMywgLi4uLCA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDd0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpICAgICAgfCAwMSwgMDIsIC4uLiwgMDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWkgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaWkgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgNyAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgIHwgZSAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZSAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWVlICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKHN0YW5kLWFsb25lKSB8IGMgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2MgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjYyAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2MgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjYyAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhLi5hYSAgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhICAgICB8IGFtLCBwbSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWEgICAgfCBhLm0uLCBwLm0uICAgICAgICAgICAgICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhYSAgIHwgYSwgcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgIHwgYi4uYmIgICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYiAgICAgfCBhbSwgcG0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiICAgIHwgYS5tLiwgcC5tLiwgbm9vbiwgbWlkbmlnaHQgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYmIgICB8IGEsIHAsIG4sIG1pICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgICB8IEIuLkJCQiAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCICAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQkIgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgICB8IGggICAgICAgfCAxLCAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBobyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMTJ0aCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGggICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgICB8IEggICAgICAgfCAwLCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIbyAgICAgIHwgMHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSEggICAgICB8IDAwLCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgICB8IEsgICAgICAgfCAxLCAyLCAuLi4sIDExLCAwICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMHRoICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS0sgICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgICB8IGsgICAgICAgfCAyNCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrbyAgICAgIHwgMjR0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2sgICAgICB8IDI0LCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgICB8IG0gICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW0gICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgICB8IHMgICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3MgICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgICB8IFMgICAgICAgfCAwLCAxLCAuLi4sIDkgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTUyAgICAgIHwgMDAsIDAxLCAuLi4sIDk5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTICAgICB8IDAwMCwgMDAxLCAuLi4sIDk5OSAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTU1MgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3LyBaKSAgICAgICAgfCBYICAgICAgIHwgLTA4LCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFggICAgICB8IC0wODAwLCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWCAgICAgfCAtMDg6MDAsICswNTozMCwgWiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYICAgIHwgLTA4MDAsICswNTMwLCBaLCArMTIzNDU2ICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWFggICB8IC0wODowMCwgKzA1OjMwLCBaLCArMTI6MzQ6NTYgICAgICB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgICB8IHggICAgICAgfCAtMDgsICswNTMwLCArMDAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eCAgICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4ICAgICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHggICAgfCAtMDgwMCwgKzA1MzAsICswMDAwLCArMTIzNDU2ICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4eCAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCwgKzEyOjM0OjU2IHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgIHwgTy4uLk9PTyB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9PT08gICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyICAgICB8XG4gKiB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSAgfCB6Li4uenp6IHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgNiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgenp6eiAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIsNiAgIHxcbiAqIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgICB8IHQgICAgICAgfCA1MTI5Njk1MjAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0dCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgIHwgVCAgICAgICB8IDUxMjk2OTUyMDkwMCAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRUICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICAgfCBQICAgICAgIHwgMDQvMjkvMTQ1MyAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFAgICAgICB8IEFwciAyOSwgMTQ1MyAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUCAgICAgfCBBcHJpbCAyOXRoLCAxNDUzICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQICAgIHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgIHwgcCAgICAgICB8IDEyOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwICAgICAgfCAxMjowMDowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHAgICAgIHwgMTI6MDA6MDAgQU0gR01UKzIgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwcCAgICB8IDEyOjAwOjAwIEFNIEdNVCswMjowMCAgICAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgQ29tYmluYXRpb24gb2YgZGF0ZSBhbmQgdGltZSAgICB8IFBwICAgICAgfCAwNC8yOS8xNDUzLCAxMjowMCBBTSAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUHBwICAgIHwgQXByIDI5LCAxNDUzLCAxMjowMDowMCBBTSAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQcHBwICB8IEFwcmlsIDI5dGgsIDE0NTMgYXQgLi4uICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFBwcHBwfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgYXQgLi4uICAgfCAyLDcgICB8XG4gKiBOb3RlczpcbiAqIDEuIFwiRm9ybWF0dGluZ1wiIHVuaXRzIChlLmcuIGZvcm1hdHRpbmcgcXVhcnRlcikgaW4gdGhlIGRlZmF1bHQgZW4tVVMgbG9jYWxlXG4gKiAgICBhcmUgdGhlIHNhbWUgYXMgXCJzdGFuZC1hbG9uZVwiIHVuaXRzLCBidXQgYXJlIGRpZmZlcmVudCBpbiBzb21lIGxhbmd1YWdlcy5cbiAqICAgIFwiRm9ybWF0dGluZ1wiIHVuaXRzIGFyZSBkZWNsaW5lZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIHRoZSBsYW5ndWFnZVxuICogICAgaW4gdGhlIGNvbnRleHQgb2YgYSBkYXRlLiBcIlN0YW5kLWFsb25lXCIgdW5pdHMgYXJlIGFsd2F5cyBub21pbmF0aXZlIHNpbmd1bGFyOlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTExMTCcsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWQnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTU1NTScsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWR1J2BcbiAqXG4gKiAyLiBBbnkgc2VxdWVuY2Ugb2YgdGhlIGlkZW50aWNhbCBsZXR0ZXJzIGlzIGEgcGF0dGVybiwgdW5sZXNzIGl0IGlzIGVzY2FwZWQgYnlcbiAqICAgIHRoZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyAoc2VlIGJlbG93KS5cbiAqICAgIElmIHRoZSBzZXF1ZW5jZSBpcyBsb25nZXIgdGhhbiBsaXN0ZWQgaW4gdGFibGUgKGUuZy4gYEVFRUVFRUVFRUVFYClcbiAqICAgIHRoZSBvdXRwdXQgd2lsbCBiZSB0aGUgc2FtZSBhcyBkZWZhdWx0IHBhdHRlcm4gZm9yIHRoaXMgdW5pdCwgdXN1YWxseVxuICogICAgdGhlIGxvbmdlc3Qgb25lIChpbiBjYXNlIG9mIElTTyB3ZWVrZGF5cywgYEVFRUVgKS4gRGVmYXVsdCBwYXR0ZXJucyBmb3IgdW5pdHNcbiAqICAgIGFyZSBtYXJrZWQgd2l0aCBcIjJcIiBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIHRhYmxlLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NJykgLy89PiAnTm92J2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTScpIC8vPT4gJ04nYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAzLiBTb21lIHBhdHRlcm5zIGNvdWxkIGJlIHVubGltaXRlZCBsZW5ndGggKHN1Y2ggYXMgYHl5eXl5eXl5YCkuXG4gKiAgICBUaGUgb3V0cHV0IHdpbGwgYmUgcGFkZGVkIHdpdGggemVyb3MgdG8gbWF0Y2ggdGhlIGxlbmd0aCBvZiB0aGUgcGF0dGVybi5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ3l5eXl5eXl5JykgLy89PiAnMDAwMDIwMTcnYFxuICpcbiAqIDQuIGBRUVFRUWAgYW5kIGBxcXFxcWAgY291bGQgYmUgbm90IHN0cmljdGx5IG51bWVyaWNhbCBpbiBzb21lIGxvY2FsZXMuXG4gKiAgICBUaGVzZSB0b2tlbnMgcmVwcmVzZW50IHRoZSBzaG9ydGVzdCBmb3JtIG9mIHRoZSBxdWFydGVyLlxuICpcbiAqIDUuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBwYXR0ZXJucyBhcmUgQi5DLiB5ZWFyczpcbiAqXG4gKiAgICB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICogICAgfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAqICAgIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gKiAgICB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICogICAgfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAqXG4gKiAgICBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gKiAgICB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQ6XG4gKlxuICogICAgfCBZZWFyIHwgYHl5YCB8IGB1dWAgfFxuICogICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfFxuICogICAgfCAxICAgIHwgICAwMSB8ICAgMDEgfFxuICogICAgfCAxNCAgIHwgICAxNCB8ICAgMTQgfFxuICogICAgfCAzNzYgIHwgICA3NiB8ICAzNzYgfFxuICogICAgfCAxNDUzIHwgICA1MyB8IDE0NTMgfFxuICpcbiAqICAgIFRoZSBzYW1lIGRpZmZlcmVuY2UgaXMgdHJ1ZSBmb3IgbG9jYWwgYW5kIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFycyAoYFlgIGFuZCBgUmApLFxuICogICAgZXhjZXB0IGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJzIGFyZSBkZXBlbmRlbnQgb24gYG9wdGlvbnMud2Vla1N0YXJ0c09uYFxuICogICAgYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKGNvbXBhcmUgW2dldElTT1dlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldElTT1dlZWtZZWFyfVxuICogICAgYW5kIFtnZXRXZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRXZWVrWWVhcn0pLlxuICpcbiAqIDYuIFNwZWNpZmljIG5vbi1sb2NhdGlvbiB0aW1lem9uZXMgYXJlIGN1cnJlbnRseSB1bmF2YWlsYWJsZSBpbiBgZGF0ZS1mbnNgLFxuICogICAgc28gcmlnaHQgbm93IHRoZXNlIHRva2VucyBmYWxsIGJhY2sgdG8gR01UIHRpbWV6b25lcy5cbiAqXG4gKiA3LiBUaGVzZSBwYXR0ZXJucyBhcmUgbm90IGluIHRoZSBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiAgICAtIGBpYDogSVNPIGRheSBvZiB3ZWVrXG4gKiAgICAtIGBJYDogSVNPIHdlZWsgb2YgeWVhclxuICogICAgLSBgUmA6IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKiAgICAtIGB0YDogc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYFRgOiBtaWxsaXNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBvYDogb3JkaW5hbCBudW1iZXIgbW9kaWZpZXJcbiAqICAgIC0gYFBgOiBsb25nIGxvY2FsaXplZCBkYXRlXG4gKiAgICAtIGBwYDogbG9uZyBsb2NhbGl6ZWQgdGltZVxuICpcbiAqIDguIGBZWWAgYW5kIGBZWVlZYCB0b2tlbnMgcmVwcmVzZW50IHdlZWstbnVtYmVyaW5nIHllYXJzIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIHllYXJzLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogOS4gYERgIGFuZCBgRERgIHRva2VucyByZXByZXNlbnQgZGF5cyBvZiB0aGUgeWVhciBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCBkYXlzIG9mIHRoZSBtb250aC5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQgLSB0aGUgc3RyaW5nIG9mIHRva2Vuc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKiBAcGFyYW0ge0xvY2FsZX0gW29wdGlvbnMubG9jYWxlPWRlZmF1bHRMb2NhbGVdIC0gdGhlIGxvY2FsZSBvYmplY3QuIFNlZSBbTG9jYWxlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL0xvY2FsZX1cbiAqIEBwYXJhbSB7MHwxfDJ8M3w0fDV8Nn0gW29wdGlvbnMud2Vla1N0YXJ0c09uPTBdIC0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgLSBTdW5kYXkpXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlPTFdIC0gdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpc1xuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIHRoZSB3ZWVrLW51bWJlcmluZyB5ZWFyIHRva2VucyBgWVlgIGFuZCBgWVlZWWA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgZGF5IG9mIHllYXIgdG9rZW5zIGBEYCBhbmQgYEREYDtcbiAqICAgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAcmV0dXJucyB7U3RyaW5nfSB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgZGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgbG9jYWxpemVgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgZm9ybWF0TG9uZ2AgcHJvcGVydHlcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLndlZWtTdGFydHNPbmAgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDZcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDdcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGB5eWAgaW5zdGVhZCBvZiBgWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMTEgRmVicnVhcnkgMjAxNCBpbiBtaWRkbGUtZW5kaWFuIGZvcm1hdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCAxLCAxMSksICdNTS9kZC95eXl5JylcbiAqIC8vPT4gJzAyLzExLzIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAyIEp1bHkgMjAxNCBpbiBFc3BlcmFudG86XG4gKiBpbXBvcnQgeyBlb0xvY2FsZSB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZS9lbydcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCA2LCAyKSwgXCJkbyAnZGUnIE1NTU0geXl5eVwiLCB7XG4gKiAgIGxvY2FsZTogZW9Mb2NhbGVcbiAqIH0pXG4gKiAvLz0+ICcyLWEgZGUganVsaW8gMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXNjYXBlIHN0cmluZyBieSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyczpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxNSksIFwiaCAnbycnY2xvY2snXCIpXG4gKiAvLz0+IFwiMyBvJ2Nsb2NrXCJcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXQoZGlydHlEYXRlLCBkaXJ0eUZvcm1hdFN0ciwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX29wdGlvbnMkbG9jYWxlLCBfcmVmMiwgX3JlZjMsIF9yZWY0LCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZTIsIF9vcHRpb25zJGxvY2FsZTIkb3B0aSwgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLCBfcmVmNSwgX3JlZjYsIF9yZWY3LCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZTMsIF9vcHRpb25zJGxvY2FsZTMkb3B0aSwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMywgX2RlZmF1bHRPcHRpb25zJGxvY2FsNDtcblxuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGZvcm1hdFN0ciA9IFN0cmluZyhkaXJ0eUZvcm1hdFN0cik7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBsb2NhbGUgPSAoX3JlZiA9IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRsb2NhbGUgIT09IHZvaWQgMCA/IF9vcHRpb25zJGxvY2FsZSA6IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IGRlZmF1bHRMb2NhbGU7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYyID0gKF9yZWYzID0gKF9yZWY0ID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiRvcHRpID0gX29wdGlvbnMkbG9jYWxlMi5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZTIkb3B0aS5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWY0ICE9PSB2b2lkIDAgPyBfcmVmNCA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogMSk7IC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMSBhbmQgNyBfYW5kXyBpcyBub3QgTmFOXG5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG5cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTsgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAwIGFuZCA2IF9hbmRfIGlzIG5vdCBOYU5cblxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cblxuICBpZiAoIWxvY2FsZS5sb2NhbGl6ZSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdsb2NhbGUgbXVzdCBjb250YWluIGxvY2FsaXplIHByb3BlcnR5Jyk7XG4gIH1cblxuICBpZiAoIWxvY2FsZS5mb3JtYXRMb25nKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gZm9ybWF0TG9uZyBwcm9wZXJ0eScpO1xuICB9XG5cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuXG4gIGlmICghaXNWYWxpZChvcmlnaW5hbERhdGUpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB9IC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcblxuXG4gIHZhciB0aW1lem9uZU9mZnNldCA9IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMob3JpZ2luYWxEYXRlKTtcbiAgdmFyIHV0Y0RhdGUgPSBzdWJNaWxsaXNlY29uZHMob3JpZ2luYWxEYXRlLCB0aW1lem9uZU9mZnNldCk7XG4gIHZhciBmb3JtYXR0ZXJPcHRpb25zID0ge1xuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogZmlyc3RXZWVrQ29udGFpbnNEYXRlLFxuICAgIHdlZWtTdGFydHNPbjogd2Vla1N0YXJ0c09uLFxuICAgIGxvY2FsZTogbG9jYWxlLFxuICAgIF9vcmlnaW5hbERhdGU6IG9yaWdpbmFsRGF0ZVxuICB9O1xuICB2YXIgcmVzdWx0ID0gZm9ybWF0U3RyLm1hdGNoKGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIHZhciBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcblxuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJykubWF0Y2goZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCkubWFwKGZ1bmN0aW9uIChzdWJzdHJpbmcpIHtcbiAgICAvLyBSZXBsYWNlIHR3byBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyB3aXRoIG9uZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyXG4gICAgaWYgKHN1YnN0cmluZyA9PT0gXCInJ1wiKSB7XG4gICAgICByZXR1cm4gXCInXCI7XG4gICAgfVxuXG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuXG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXR0ZXIgPSBmb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTtcblxuICAgIGlmIChmb3JtYXR0ZXIpIHtcbiAgICAgIGlmICghKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4oc3Vic3RyaW5nKSkge1xuICAgICAgICB0aHJvd1Byb3RlY3RlZEVycm9yKHN1YnN0cmluZywgZGlydHlGb3JtYXRTdHIsIFN0cmluZyhkaXJ0eURhdGUpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3JtYXR0ZXIodXRjRGF0ZSwgc3Vic3RyaW5nLCBsb2NhbGUubG9jYWxpemUsIGZvcm1hdHRlck9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChmaXJzdENoYXJhY3Rlci5tYXRjaCh1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCkpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdGb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXIgYCcgKyBmaXJzdENoYXJhY3RlciArICdgJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGNsZWFuRXNjYXBlZFN0cmluZyhpbnB1dCkge1xuICB2YXIgbWF0Y2hlZCA9IGlucHV0Lm1hdGNoKGVzY2FwZWRTdHJpbmdSZWdFeHApO1xuXG4gIGlmICghbWF0Y2hlZCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMDtcbi8qKlxuICogQG5hbWUgYWRkTWludXRlc1xuICogQGNhdGVnb3J5IE1pbnV0ZSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWludXRlcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaW51dGVzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaW51dGVzIHRvIGJlIGFkZGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbnV0ZXMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDMwIG1pbnV0ZXMgdG8gMTAgSnVseSAyMDE0IDEyOjAwOjAwOlxuICogY29uc3QgcmVzdWx0ID0gYWRkTWludXRlcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDApLCAzMClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjMwOjAwXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWludXRlcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGFtb3VudCAqIE1JTExJU0VDT05EU19JTl9NSU5VVEUpO1xufSIsImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgYWRkTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9hZGRNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0hPVVIgPSAzNjAwMDAwO1xuLyoqXG4gKiBAbmFtZSBhZGRIb3Vyc1xuICogQGNhdGVnb3J5IEhvdXIgSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGhvdXJzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGhvdXJzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBob3VycyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBob3VycyBhZGRlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgMiBob3VycyB0byAxMCBKdWx5IDIwMTQgMjM6MDA6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRIb3VycyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMjMsIDApLCAyKVxuICogLy89PiBGcmkgSnVsIDExIDIwMTQgMDE6MDA6MDBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRIb3VycyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGFtb3VudCAqIE1JTExJU0VDT05EU19JTl9IT1VSKTtcbn0iLCJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBhZGREYXlzXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkYXlzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRheXMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIGRheXMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSAtIHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBkYXlzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IC0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDEwIGRheXMgdG8gMSBTZXB0ZW1iZXIgMjAxNDpcbiAqIGNvbnN0IHJlc3VsdCA9IGFkZERheXMobmV3IERhdGUoMjAxNCwgOCwgMSksIDEwKVxuICogLy89PiBUaHUgU2VwIDExIDIwMTQgMDA6MDA6MDBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGREYXlzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuXG4gIGlmIChpc05hTihhbW91bnQpKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cblxuICBpZiAoIWFtb3VudCkge1xuICAgIC8vIElmIDAgZGF5cywgbm8tb3AgdG8gYXZvaWQgY2hhbmdpbmcgdGltZXMgaW4gdGhlIGhvdXIgYmVmb3JlIGVuZCBvZiBEU1RcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGFtb3VudCk7XG4gIHJldHVybiBkYXRlO1xufSIsImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgYWRkRGF5cyBmcm9tIFwiLi4vYWRkRGF5cy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgYWRkV2Vla3NcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB3ZWVrcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB3ZWVrIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiB3ZWVrcyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSB3ZWVrcyBhZGRlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNCB3ZWVrcyB0byAxIFNlcHRlbWJlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gYWRkV2Vla3MobmV3IERhdGUoMjAxNCwgOCwgMSksIDQpXG4gKiAvLz0+IE1vbiBTZXAgMjkgMjAxNCAwMDowMDowMFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZFdlZWtzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICB2YXIgZGF5cyA9IGFtb3VudCAqIDc7XG4gIHJldHVybiBhZGREYXlzKGRpcnR5RGF0ZSwgZGF5cyk7XG59IiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgYWRkTW9udGhzXG4gKiBAY2F0ZWdvcnkgTW9udGggSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1vbnRocyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtb250aHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1vbnRocyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtb250aHMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDUgbW9udGhzIHRvIDEgU2VwdGVtYmVyIDIwMTQ6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNb250aHMobmV3IERhdGUoMjAxNCwgOCwgMSksIDUpXG4gKiAvLz0+IFN1biBGZWIgMDEgMjAxNSAwMDowMDowMFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZE1vbnRocyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcblxuICBpZiAoaXNOYU4oYW1vdW50KSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG5cbiAgaWYgKCFhbW91bnQpIHtcbiAgICAvLyBJZiAwIG1vbnRocywgbm8tb3AgdG8gYXZvaWQgY2hhbmdpbmcgdGltZXMgaW4gdGhlIGhvdXIgYmVmb3JlIGVuZCBvZiBEU1RcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIHZhciBkYXlPZk1vbnRoID0gZGF0ZS5nZXREYXRlKCk7IC8vIFRoZSBKUyBEYXRlIG9iamVjdCBzdXBwb3J0cyBkYXRlIG1hdGggYnkgYWNjZXB0aW5nIG91dC1vZi1ib3VuZHMgdmFsdWVzIGZvclxuICAvLyBtb250aCwgZGF5LCBldGMuIEZvciBleGFtcGxlLCBuZXcgRGF0ZSgyMDIwLCAwLCAwKSByZXR1cm5zIDMxIERlYyAyMDE5IGFuZFxuICAvLyBuZXcgRGF0ZSgyMDIwLCAxMywgMSkgcmV0dXJucyAxIEZlYiAyMDIxLiAgVGhpcyBpcyAqYWxtb3N0KiB0aGUgYmVoYXZpb3Igd2VcbiAgLy8gd2FudCBleGNlcHQgdGhhdCBkYXRlcyB3aWxsIHdyYXAgYXJvdW5kIHRoZSBlbmQgb2YgYSBtb250aCwgbWVhbmluZyB0aGF0XG4gIC8vIG5ldyBEYXRlKDIwMjAsIDEzLCAzMSkgd2lsbCByZXR1cm4gMyBNYXIgMjAyMSBub3QgMjggRmViIDIwMjEgYXMgZGVzaXJlZC4gU29cbiAgLy8gd2UnbGwgZGVmYXVsdCB0byB0aGUgZW5kIG9mIHRoZSBkZXNpcmVkIG1vbnRoIGJ5IGFkZGluZyAxIHRvIHRoZSBkZXNpcmVkXG4gIC8vIG1vbnRoIGFuZCB1c2luZyBhIGRhdGUgb2YgMCB0byBiYWNrIHVwIG9uZSBkYXkgdG8gdGhlIGVuZCBvZiB0aGUgZGVzaXJlZFxuICAvLyBtb250aC5cblxuICB2YXIgZW5kT2ZEZXNpcmVkTW9udGggPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gIGVuZE9mRGVzaXJlZE1vbnRoLnNldE1vbnRoKGRhdGUuZ2V0TW9udGgoKSArIGFtb3VudCArIDEsIDApO1xuICB2YXIgZGF5c0luTW9udGggPSBlbmRPZkRlc2lyZWRNb250aC5nZXREYXRlKCk7XG5cbiAgaWYgKGRheU9mTW9udGggPj0gZGF5c0luTW9udGgpIHtcbiAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IGF0IHRoZSBlbmQgb2YgdGhlIG1vbnRoLCB0aGVuIHRoaXMgaXMgdGhlIGNvcnJlY3QgZGF0ZVxuICAgIC8vIGFuZCB3ZSdyZSBkb25lLlxuICAgIHJldHVybiBlbmRPZkRlc2lyZWRNb250aDtcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UsIHdlIG5vdyBrbm93IHRoYXQgc2V0dGluZyB0aGUgb3JpZ2luYWwgZGF5LW9mLW1vbnRoIHZhbHVlIHdvbid0XG4gICAgLy8gY2F1c2UgYW4gb3ZlcmZsb3csIHNvIHNldCB0aGUgZGVzaXJlZCBkYXktb2YtbW9udGguIE5vdGUgdGhhdCB3ZSBjYW4ndFxuICAgIC8vIGp1c3Qgc2V0IHRoZSBkYXRlIG9mIGBlbmRPZkRlc2lyZWRNb250aGAgYmVjYXVzZSB0aGF0IG9iamVjdCBtYXkgaGF2ZSBoYWRcbiAgICAvLyBpdHMgdGltZSBjaGFuZ2VkIGluIHRoZSB1bnVzdWFsIGNhc2Ugd2hlcmUgd2hlcmUgYSBEU1QgdHJhbnNpdGlvbiB3YXMgb25cbiAgICAvLyB0aGUgbGFzdCBkYXkgb2YgdGhlIG1vbnRoIGFuZCBpdHMgbG9jYWwgdGltZSB3YXMgaW4gdGhlIGhvdXIgc2tpcHBlZCBvclxuICAgIC8vIHJlcGVhdGVkIG5leHQgdG8gYSBEU1QgdHJhbnNpdGlvbi4gIFNvIHdlIHVzZSBgZGF0ZWAgaW5zdGVhZCB3aGljaCBpc1xuICAgIC8vIGd1YXJhbnRlZWQgdG8gc3RpbGwgaGF2ZSB0aGUgb3JpZ2luYWwgdGltZS5cbiAgICBkYXRlLnNldEZ1bGxZZWFyKGVuZE9mRGVzaXJlZE1vbnRoLmdldEZ1bGxZZWFyKCksIGVuZE9mRGVzaXJlZE1vbnRoLmdldE1vbnRoKCksIGRheU9mTW9udGgpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG59IiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCBhZGRNb250aHMgZnJvbSBcIi4uL2FkZE1vbnRocy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgYWRkUXVhcnRlcnNcbiAqIEBjYXRlZ29yeSBRdWFydGVyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB5ZWFyIHF1YXJ0ZXJzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHllYXIgcXVhcnRlcnMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIHF1YXJ0ZXJzIHRvIGJlIGFkZGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIHF1YXJ0ZXJzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCAxIHF1YXJ0ZXIgdG8gMSBTZXB0ZW1iZXIgMjAxNDpcbiAqIGNvbnN0IHJlc3VsdCA9IGFkZFF1YXJ0ZXJzKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCAxKVxuICogLy89PiBNb24gRGVjIDAxIDIwMTQgMDA6MDA6MDBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRRdWFydGVycyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgdmFyIG1vbnRocyA9IGFtb3VudCAqIDM7XG4gIHJldHVybiBhZGRNb250aHMoZGlydHlEYXRlLCBtb250aHMpO1xufSIsImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgYWRkTW9udGhzIGZyb20gXCIuLi9hZGRNb250aHMvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZFllYXJzXG4gKiBAY2F0ZWdvcnkgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgeWVhcnMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgeWVhcnMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIHllYXJzIHRvIGJlIGFkZGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIHllYXJzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA1IHllYXJzIHRvIDEgU2VwdGVtYmVyIDIwMTQ6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRZZWFycyhuZXcgRGF0ZSgyMDE0LCA4LCAxKSwgNSlcbiAqIC8vPT4gU3VuIFNlcCAwMSAyMDE5IDAwOjAwOjAwXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkWWVhcnMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBhZGRNb250aHMoZGlydHlEYXRlLCBhbW91bnQgKiAxMik7XG59IiwiaW1wb3J0IGFkZERheXMgZnJvbSBcIi4uL2FkZERheXMvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBzdWJEYXlzXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRheXMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRheXMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgZGF5cyB0byBiZSBzdWJ0cmFjdGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIGRheXMgc3VidHJhY3RlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCAxMCBkYXlzIGZyb20gMSBTZXB0ZW1iZXIgMjAxNDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN1YkRheXMobmV3IERhdGUoMjAxNCwgOCwgMSksIDEwKVxuICogLy89PiBGcmkgQXVnIDIyIDIwMTQgMDA6MDA6MDBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdWJEYXlzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkRGF5cyhkaXJ0eURhdGUsIC1hbW91bnQpO1xufSIsImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgYWRkV2Vla3MgZnJvbSBcIi4uL2FkZFdlZWtzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBzdWJXZWVrc1xuICogQGNhdGVnb3J5IFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygd2Vla3MgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHdlZWtzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIHdlZWtzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgd2Vla3Mgc3VidHJhY3RlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCA0IHdlZWtzIGZyb20gMSBTZXB0ZW1iZXIgMjAxNDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN1YldlZWtzKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCA0KVxuICogLy89PiBNb24gQXVnIDA0IDIwMTQgMDA6MDA6MDBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdWJXZWVrcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIGFkZFdlZWtzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCBhZGRNb250aHMgZnJvbSBcIi4uL2FkZE1vbnRocy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTW9udGhzXG4gKiBAY2F0ZWdvcnkgTW9udGggSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbW9udGhzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtb250aHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbW9udGhzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbW9udGhzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNSBtb250aHMgZnJvbSAxIEZlYnJ1YXJ5IDIwMTU6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNb250aHMobmV3IERhdGUoMjAxNSwgMSwgMSksIDUpXG4gKiAvLz0+IE1vbiBTZXAgMDEgMjAxNCAwMDowMDowMFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN1Yk1vbnRocyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIGFkZE1vbnRocyhkaXJ0eURhdGUsIC1hbW91bnQpO1xufSIsImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgYWRkUXVhcnRlcnMgZnJvbSBcIi4uL2FkZFF1YXJ0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBzdWJRdWFydGVyc1xuICogQGNhdGVnb3J5IFF1YXJ0ZXIgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgeWVhciBxdWFydGVycyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgeWVhciBxdWFydGVycyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBxdWFydGVycyB0byBiZSBzdWJ0cmFjdGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIHF1YXJ0ZXJzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgMyBxdWFydGVycyBmcm9tIDEgU2VwdGVtYmVyIDIwMTQ6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJRdWFydGVycyhuZXcgRGF0ZSgyMDE0LCA4LCAxKSwgMylcbiAqIC8vPT4gU3VuIERlYyAwMSAyMDEzIDAwOjAwOjAwXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViUXVhcnRlcnMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBhZGRRdWFydGVycyhkaXJ0eURhdGUsIC1hbW91bnQpO1xufSIsImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgYWRkWWVhcnMgZnJvbSBcIi4uL2FkZFllYXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBzdWJZZWFyc1xuICogQGNhdGVnb3J5IFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgeWVhcnMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHllYXJzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIHllYXJzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgeWVhcnMgc3VidHJhY3RlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCA1IHllYXJzIGZyb20gMSBTZXB0ZW1iZXIgMjAxNDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN1YlllYXJzKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCA1KVxuICogLy89PiBUdWUgU2VwIDAxIDIwMDkgMDA6MDA6MDBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdWJZZWFycyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIGFkZFllYXJzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBnZXRTZWNvbmRzXG4gKiBAY2F0ZWdvcnkgU2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgc2Vjb25kcyBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgc2Vjb25kcyBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGdpdmVuIGRhdGVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBzZWNvbmRzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gR2V0IHRoZSBzZWNvbmRzIG9mIDI5IEZlYnJ1YXJ5IDIwMTIgMTE6NDU6MDUuMTIzOlxuICogY29uc3QgcmVzdWx0ID0gZ2V0U2Vjb25kcyhuZXcgRGF0ZSgyMDEyLCAxLCAyOSwgMTEsIDQ1LCA1LCAxMjMpKVxuICogLy89PiA1XG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U2Vjb25kcyhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBzZWNvbmRzID0gZGF0ZS5nZXRTZWNvbmRzKCk7XG4gIHJldHVybiBzZWNvbmRzO1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgZ2V0TWludXRlc1xuICogQGNhdGVnb3J5IE1pbnV0ZSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG1pbnV0ZXMgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG1pbnV0ZXMgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBnaXZlbiBkYXRlXG4gKiBAcmV0dXJucyB7TnVtYmVyfSB0aGUgbWludXRlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB0aGUgbWludXRlcyBvZiAyOSBGZWJydWFyeSAyMDEyIDExOjQ1OjA1OlxuICogY29uc3QgcmVzdWx0ID0gZ2V0TWludXRlcyhuZXcgRGF0ZSgyMDEyLCAxLCAyOSwgMTEsIDQ1LCA1KSlcbiAqIC8vPT4gNDVcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRNaW51dGVzKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKTtcbiAgcmV0dXJuIG1pbnV0ZXM7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBnZXRIb3Vyc1xuICogQGNhdGVnb3J5IEhvdXIgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBob3VycyBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgaG91cnMgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBnaXZlbiBkYXRlXG4gKiBAcmV0dXJucyB7TnVtYmVyfSB0aGUgaG91cnNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgdGhlIGhvdXJzIG9mIDI5IEZlYnJ1YXJ5IDIwMTIgMTE6NDU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBnZXRIb3VycyhuZXcgRGF0ZSgyMDEyLCAxLCAyOSwgMTEsIDQ1KSlcbiAqIC8vPT4gMTFcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRIb3VycyhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgcmV0dXJuIGhvdXJzO1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgZ2V0RGF5XG4gKiBAY2F0ZWdvcnkgV2Vla2RheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIGRheSBvZiB0aGUgd2VlayBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgZGF5IG9mIHRoZSB3ZWVrIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZ2l2ZW4gZGF0ZVxuICogQHJldHVybnMgezB8MXwyfDN8NHw1fDZ9IHRoZSBkYXkgb2Ygd2VlaywgMCByZXByZXNlbnRzIFN1bmRheVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIGRheSBvZiB0aGUgd2VlayBpcyAyOSBGZWJydWFyeSAyMDEyP1xuICogY29uc3QgcmVzdWx0ID0gZ2V0RGF5KG5ldyBEYXRlKDIwMTIsIDEsIDI5KSlcbiAqIC8vPT4gM1xuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERheShkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldERheSgpO1xuICByZXR1cm4gZGF5O1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgZ2V0RGF0ZVxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIGRheSBvZiB0aGUgbW9udGggb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIGRheSBvZiB0aGUgbW9udGggb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBnaXZlbiBkYXRlXG4gKiBAcmV0dXJucyB7TnVtYmVyfSB0aGUgZGF5IG9mIG1vbnRoXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggZGF5IG9mIHRoZSBtb250aCBpcyAyOSBGZWJydWFyeSAyMDEyP1xuICogY29uc3QgcmVzdWx0ID0gZ2V0RGF0ZShuZXcgRGF0ZSgyMDEyLCAxLCAyOSkpXG4gKiAvLz0+IDI5XG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RGF0ZShkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXlPZk1vbnRoID0gZGF0ZS5nZXREYXRlKCk7XG4gIHJldHVybiBkYXlPZk1vbnRoO1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZXZWVrXG4gKiBAY2F0ZWdvcnkgV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgd2VlayBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgd2VlayBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKiBAcGFyYW0ge0xvY2FsZX0gW29wdGlvbnMubG9jYWxlPWRlZmF1bHRMb2NhbGVdIC0gdGhlIGxvY2FsZSBvYmplY3QuIFNlZSBbTG9jYWxlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL0xvY2FsZX1cbiAqIEBwYXJhbSB7MHwxfDJ8M3w0fDV8Nn0gW29wdGlvbnMud2Vla1N0YXJ0c09uPTBdIC0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgLSBTdW5kYXkpXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHN0YXJ0IG9mIGEgd2Vla1xuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIHdlZWsgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mV2VlayhuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApKVxuICogLy89PiBTdW4gQXVnIDMxIDIwMTQgMDA6MDA6MDBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdGhlIHdlZWsgc3RhcnRzIG9uIE1vbmRheSwgdGhlIHN0YXJ0IG9mIHRoZSB3ZWVrIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZldlZWsobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSwgeyB3ZWVrU3RhcnRzT246IDEgfSlcbiAqIC8vPT4gTW9uIFNlcCAwMSAyMDE0IDAwOjAwOjAwXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZldlZWsoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJHdlZWtTdGFydHNPbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcblxuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyR3ZWVrU3RhcnRzT24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gIT09IHZvaWQgMCA/IF9vcHRpb25zJHdlZWtTdGFydHNPbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8ud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAwKTsgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAwIGFuZCA2IF9hbmRfIGlzIG5vdCBOYU5cblxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cblxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXREYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwiaW1wb3J0IHN0YXJ0T2ZXZWVrIGZyb20gXCIuLi9zdGFydE9mV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3RhcnRPZklTT1dlZWtcbiAqIEBjYXRlZ29yeSBJU08gV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYW4gSVNPIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZklTT1dlZWsobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gTW9uIFNlcCAwMSAyMDE0IDAwOjAwOjAwXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZklTT1dlZWsoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICByZXR1cm4gc3RhcnRPZldlZWsoZGlydHlEYXRlLCB7XG4gICAgd2Vla1N0YXJ0c09uOiAxXG4gIH0pO1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgZ2V0SVNPV2Vla1llYXJcbiAqIEBjYXRlZ29yeSBJU08gV2Vlay1OdW1iZXJpbmcgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBJU08gd2Vlay1udW1iZXJpbmcgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZSxcbiAqIHdoaWNoIGFsd2F5cyBzdGFydHMgMyBkYXlzIGJlZm9yZSB0aGUgeWVhcidzIGZpcnN0IFRodXJzZGF5LlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGdpdmVuIGRhdGVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIElTTy13ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDIgSmFudWFyeSAyMDA1P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0SVNPV2Vla1llYXIobmV3IERhdGUoMjAwNSwgMCwgMikpXG4gKiAvLz0+IDIwMDRcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldEZ1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldEZ1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZklTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhcik7XG5cbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsImltcG9ydCBnZXRJU09XZWVrWWVhciBmcm9tIFwiLi4vZ2V0SVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZklTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZJU09XZWVrWWVhclxuICogQGNhdGVnb3J5IElTTyBXZWVrLU51bWJlcmluZyBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYW4gSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhbiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcixcbiAqIHdoaWNoIGFsd2F5cyBzdGFydHMgMyBkYXlzIGJlZm9yZSB0aGUgeWVhcidzIGZpcnN0IFRodXJzZGF5LlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyIGZvciAyIEp1bHkgMjAwNTpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZJU09XZWVrWWVhcihuZXcgRGF0ZSgyMDA1LCA2LCAyKSlcbiAqIC8vPT4gTW9uIEphbiAwMyAyMDA1IDAwOjAwOjAwXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZklTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHllYXIgPSBnZXRJU09XZWVrWWVhcihkaXJ0eURhdGUpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5ID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRGdWxsWWVhcih5ZWFyLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZJU09XZWVrKGZvdXJ0aE9mSmFudWFyeSk7XG4gIHJldHVybiBkYXRlO1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZJU09XZWVrWWVhciBmcm9tIFwiLi4vc3RhcnRPZklTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuLyoqXG4gKiBAbmFtZSBnZXRJU09XZWVrXG4gKiBAY2F0ZWdvcnkgSVNPIFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBJU08gd2VlayBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgSVNPIHdlZWsgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogSVNPIHdlZWstbnVtYmVyaW5nIHllYXI6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZ2l2ZW4gZGF0ZVxuICogQHJldHVybnMge051bWJlcn0gdGhlIElTTyB3ZWVrXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggd2VlayBvZiB0aGUgSVNPLXdlZWsgbnVtYmVyaW5nIHllYXIgaXMgMiBKYW51YXJ5IDIwMDU/XG4gKiBjb25zdCByZXN1bHQgPSBnZXRJU09XZWVrKG5ldyBEYXRlKDIwMDUsIDAsIDIpKVxuICogLy89PiA1M1xuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldElTT1dlZWsoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZJU09XZWVrKGRhdGUpLmdldFRpbWUoKSAtIHN0YXJ0T2ZJU09XZWVrWWVhcihkYXRlKS5nZXRUaW1lKCk7IC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG5cbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLKSArIDE7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBnZXRNb250aFxuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbW9udGggb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG1vbnRoIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZ2l2ZW4gZGF0ZVxuICogQHJldHVybnMge051bWJlcn0gdGhlIG1vbnRoXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggbW9udGggaXMgMjkgRmVicnVhcnkgMjAxMj9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldE1vbnRoKG5ldyBEYXRlKDIwMTIsIDEsIDI5KSlcbiAqIC8vPT4gMVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE1vbnRoKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICByZXR1cm4gbW9udGg7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBnZXRRdWFydGVyXG4gKiBAY2F0ZWdvcnkgUXVhcnRlciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIHllYXIgcXVhcnRlciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgeWVhciBxdWFydGVyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZ2l2ZW4gZGF0ZVxuICogQHJldHVybnMge051bWJlcn0gdGhlIHF1YXJ0ZXJcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCBxdWFydGVyIGlzIDIgSnVseSAyMDE0P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0UXVhcnRlcihuZXcgRGF0ZSgyMDE0LCA2LCAyKSlcbiAqIC8vPT4gM1xuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFF1YXJ0ZXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgcXVhcnRlciA9IE1hdGguZmxvb3IoZGF0ZS5nZXRNb250aCgpIC8gMykgKyAxO1xuICByZXR1cm4gcXVhcnRlcjtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGdldFllYXJcbiAqIEBjYXRlZ29yeSBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGdpdmVuIGRhdGVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSB5ZWFyXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggeWVhciBpcyAyIEp1bHkgMjAxND9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldFllYXIobmV3IERhdGUoMjAxNCwgNiwgMikpXG4gKiAvLz0+IDIwMTRcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHRvRGF0ZShkaXJ0eURhdGUpLmdldEZ1bGxZZWFyKCk7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBnZXRUaW1lXG4gKiBAY2F0ZWdvcnkgVGltZXN0YW1wIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbWlsbGlzZWNvbmRzIHRpbWVzdGFtcCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbWlsbGlzZWNvbmRzIHRpbWVzdGFtcCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGdpdmVuIGRhdGVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSB0aW1lc3RhbXBcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgdGhlIHRpbWVzdGFtcCBvZiAyOSBGZWJydWFyeSAyMDEyIDExOjQ1OjA1LjEyMzpcbiAqIGNvbnN0IHJlc3VsdCA9IGdldFRpbWUobmV3IERhdGUoMjAxMiwgMSwgMjksIDExLCA0NSwgNSwgMTIzKSlcbiAqIC8vPT4gMTMzMDUxNTkwNTEyM1xuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFRpbWUoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIHJldHVybiB0aW1lc3RhbXA7XG59IiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc2V0U2Vjb25kc1xuICogQGNhdGVnb3J5IFNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTZXQgdGhlIHNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTZXQgdGhlIHNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBzZWNvbmRzIC0gdGhlIHNlY29uZHMgb2YgdGhlIG5ldyBkYXRlXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIHNlY29uZHMgc2V0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNldCA0NSBzZWNvbmRzIHRvIDEgU2VwdGVtYmVyIDIwMTQgMTE6MzA6NDA6XG4gKiBjb25zdCByZXN1bHQgPSBzZXRTZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDgsIDEsIDExLCAzMCwgNDApLCA0NSlcbiAqIC8vPT4gTW9uIFNlcCAwMSAyMDE0IDExOjMwOjQ1XG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0U2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5U2Vjb25kcykge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHNlY29uZHMgPSB0b0ludGVnZXIoZGlydHlTZWNvbmRzKTtcbiAgZGF0ZS5zZXRTZWNvbmRzKHNlY29uZHMpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBzZXRNaW51dGVzXG4gKiBAY2F0ZWdvcnkgTWludXRlIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFNldCB0aGUgbWludXRlcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNldCB0aGUgbWludXRlcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IG1pbnV0ZXMgLSB0aGUgbWludXRlcyBvZiB0aGUgbmV3IGRhdGVcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWludXRlcyBzZXRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2V0IDQ1IG1pbnV0ZXMgdG8gMSBTZXB0ZW1iZXIgMjAxNCAxMTozMDo0MDpcbiAqIGNvbnN0IHJlc3VsdCA9IHNldE1pbnV0ZXMobmV3IERhdGUoMjAxNCwgOCwgMSwgMTEsIDMwLCA0MCksIDQ1KVxuICogLy89PiBNb24gU2VwIDAxIDIwMTQgMTE6NDU6NDBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXRNaW51dGVzKGRpcnR5RGF0ZSwgZGlydHlNaW51dGVzKSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgbWludXRlcyA9IHRvSW50ZWdlcihkaXJ0eU1pbnV0ZXMpO1xuICBkYXRlLnNldE1pbnV0ZXMobWludXRlcyk7XG4gIHJldHVybiBkYXRlO1xufSIsImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHNldEhvdXJzXG4gKiBAY2F0ZWdvcnkgSG91ciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTZXQgdGhlIGhvdXJzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU2V0IHRoZSBob3VycyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGhvdXJzIC0gdGhlIGhvdXJzIG9mIHRoZSBuZXcgZGF0ZVxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBob3VycyBzZXRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2V0IDQgaG91cnMgdG8gMSBTZXB0ZW1iZXIgMjAxNCAxMTozMDowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHNldEhvdXJzKG5ldyBEYXRlKDIwMTQsIDgsIDEsIDExLCAzMCksIDQpXG4gKiAvLz0+IE1vbiBTZXAgMDEgMjAxNCAwNDozMDowMFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldEhvdXJzKGRpcnR5RGF0ZSwgZGlydHlIb3Vycykge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGhvdXJzID0gdG9JbnRlZ2VyKGRpcnR5SG91cnMpO1xuICBkYXRlLnNldEhvdXJzKGhvdXJzKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBnZXREYXlzSW5Nb250aFxuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBtb250aCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBtb250aCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGdpdmVuIGRhdGVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBudW1iZXIgb2YgZGF5cyBpbiBhIG1vbnRoXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgZGF5cyBhcmUgaW4gRmVicnVhcnkgMjAwMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldERheXNJbk1vbnRoKG5ldyBEYXRlKDIwMDAsIDEpKVxuICogLy89PiAyOVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERheXNJbk1vbnRoKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIHZhciBtb250aEluZGV4ID0gZGF0ZS5nZXRNb250aCgpO1xuICB2YXIgbGFzdERheU9mTW9udGggPSBuZXcgRGF0ZSgwKTtcbiAgbGFzdERheU9mTW9udGguc2V0RnVsbFllYXIoeWVhciwgbW9udGhJbmRleCArIDEsIDApO1xuICBsYXN0RGF5T2ZNb250aC5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGxhc3REYXlPZk1vbnRoLmdldERhdGUoKTtcbn0iLCJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0RGF5c0luTW9udGggZnJvbSBcIi4uL2dldERheXNJbk1vbnRoL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBzZXRNb250aFxuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFNldCB0aGUgbW9udGggdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTZXQgdGhlIG1vbnRoIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gbW9udGggLSB0aGUgbW9udGggb2YgdGhlIG5ldyBkYXRlXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1vbnRoIHNldFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXQgRmVicnVhcnkgdG8gMSBTZXB0ZW1iZXIgMjAxNDpcbiAqIGNvbnN0IHJlc3VsdCA9IHNldE1vbnRoKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCAxKVxuICogLy89PiBTYXQgRmViIDAxIDIwMTQgMDA6MDA6MDBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXRNb250aChkaXJ0eURhdGUsIGRpcnR5TW9udGgpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBtb250aCA9IHRvSW50ZWdlcihkaXJ0eU1vbnRoKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIHZhciBkYXkgPSBkYXRlLmdldERhdGUoKTtcbiAgdmFyIGRhdGVXaXRoRGVzaXJlZE1vbnRoID0gbmV3IERhdGUoMCk7XG4gIGRhdGVXaXRoRGVzaXJlZE1vbnRoLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCAxNSk7XG4gIGRhdGVXaXRoRGVzaXJlZE1vbnRoLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aChkYXRlV2l0aERlc2lyZWRNb250aCk7IC8vIFNldCB0aGUgbGFzdCBkYXkgb2YgdGhlIG5ldyBtb250aFxuICAvLyBpZiB0aGUgb3JpZ2luYWwgZGF0ZSB3YXMgdGhlIGxhc3QgZGF5IG9mIHRoZSBsb25nZXIgbW9udGhcblxuICBkYXRlLnNldE1vbnRoKG1vbnRoLCBNYXRoLm1pbihkYXksIGRheXNJbk1vbnRoKSk7XG4gIHJldHVybiBkYXRlO1xufSIsImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzZXRNb250aCBmcm9tIFwiLi4vc2V0TW9udGgvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHNldFF1YXJ0ZXJcbiAqIEBjYXRlZ29yeSBRdWFydGVyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFNldCB0aGUgeWVhciBxdWFydGVyIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU2V0IHRoZSB5ZWFyIHF1YXJ0ZXIgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBxdWFydGVyIC0gdGhlIHF1YXJ0ZXIgb2YgdGhlIG5ldyBkYXRlXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIHF1YXJ0ZXIgc2V0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNldCB0aGUgMm5kIHF1YXJ0ZXIgdG8gMiBKdWx5IDIwMTQ6XG4gKiBjb25zdCByZXN1bHQgPSBzZXRRdWFydGVyKG5ldyBEYXRlKDIwMTQsIDYsIDIpLCAyKVxuICogLy89PiBXZWQgQXByIDAyIDIwMTQgMDA6MDA6MDBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXRRdWFydGVyKGRpcnR5RGF0ZSwgZGlydHlRdWFydGVyKSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgcXVhcnRlciA9IHRvSW50ZWdlcihkaXJ0eVF1YXJ0ZXIpO1xuICB2YXIgb2xkUXVhcnRlciA9IE1hdGguZmxvb3IoZGF0ZS5nZXRNb250aCgpIC8gMykgKyAxO1xuICB2YXIgZGlmZiA9IHF1YXJ0ZXIgLSBvbGRRdWFydGVyO1xuICByZXR1cm4gc2V0TW9udGgoZGF0ZSwgZGF0ZS5nZXRNb250aCgpICsgZGlmZiAqIDMpO1xufSIsImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHNldFllYXJcbiAqIEBjYXRlZ29yeSBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFNldCB0aGUgeWVhciB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNldCB0aGUgeWVhciB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IHllYXIgLSB0aGUgeWVhciBvZiB0aGUgbmV3IGRhdGVcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgeWVhciBzZXRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2V0IHllYXIgMjAxMyB0byAxIFNlcHRlbWJlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gc2V0WWVhcihuZXcgRGF0ZSgyMDE0LCA4LCAxKSwgMjAxMylcbiAqIC8vPT4gU3VuIFNlcCAwMSAyMDEzIDAwOjAwOjAwXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0WWVhcihkaXJ0eURhdGUsIGRpcnR5WWVhcikge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSB0b0ludGVnZXIoZGlydHlZZWFyKTsgLy8gQ2hlY2sgaWYgZGF0ZSBpcyBJbnZhbGlkIERhdGUgYmVjYXVzZSBEYXRlLnByb3RvdHlwZS5zZXRGdWxsWWVhciBpZ25vcmVzIHRoZSB2YWx1ZSBvZiBJbnZhbGlkIERhdGVcblxuICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cblxuICBkYXRlLnNldEZ1bGxZZWFyKHllYXIpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgbWluXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIGVhcmxpZXN0IG9mIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdGhlIGVhcmxpZXN0IG9mIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAcGFyYW0ge0RhdGVbXXxOdW1iZXJbXX0gZGF0ZXNBcnJheSAtIHRoZSBkYXRlcyB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7RGF0ZX0gLSB0aGUgZWFybGllc3Qgb2YgdGhlIGRhdGVzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggb2YgdGhlc2UgZGF0ZXMgaXMgdGhlIGVhcmxpZXN0P1xuICogY29uc3QgcmVzdWx0ID0gbWluKFtcbiAqICAgbmV3IERhdGUoMTk4OSwgNiwgMTApLFxuICogICBuZXcgRGF0ZSgxOTg3LCAxLCAxMSksXG4gKiAgIG5ldyBEYXRlKDE5OTUsIDYsIDIpLFxuICogICBuZXcgRGF0ZSgxOTkwLCAwLCAxKVxuICogXSlcbiAqIC8vPT4gV2VkIEZlYiAxMSAxOTg3IDAwOjAwOjAwXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWluKGRpcnR5RGF0ZXNBcnJheSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGVzQXJyYXk7IC8vIGBkaXJ0eURhdGVzQXJyYXlgIGlzIEFycmF5LCBTZXQgb3IgTWFwLCBvciBvYmplY3Qgd2l0aCBjdXN0b20gYGZvckVhY2hgIG1ldGhvZFxuXG4gIGlmIChkaXJ0eURhdGVzQXJyYXkgJiYgdHlwZW9mIGRpcnR5RGF0ZXNBcnJheS5mb3JFYWNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZGF0ZXNBcnJheSA9IGRpcnR5RGF0ZXNBcnJheTsgLy8gSWYgYGRpcnR5RGF0ZXNBcnJheWAgaXMgQXJyYXktbGlrZSBPYmplY3QsIGNvbnZlcnQgdG8gQXJyYXkuXG4gIH0gZWxzZSBpZiAoX3R5cGVvZihkaXJ0eURhdGVzQXJyYXkpID09PSAnb2JqZWN0JyAmJiBkaXJ0eURhdGVzQXJyYXkgIT09IG51bGwpIHtcbiAgICBkYXRlc0FycmF5ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZGlydHlEYXRlc0FycmF5KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBgZGlydHlEYXRlc0FycmF5YCBpcyBub24taXRlcmFibGUsIHJldHVybiBJbnZhbGlkIERhdGVcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxuXG4gIHZhciByZXN1bHQ7XG4gIGRhdGVzQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoZGlydHlEYXRlKSB7XG4gICAgdmFyIGN1cnJlbnREYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG5cbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQgfHwgcmVzdWx0ID4gY3VycmVudERhdGUgfHwgaXNOYU4oY3VycmVudERhdGUuZ2V0RGF0ZSgpKSkge1xuICAgICAgcmVzdWx0ID0gY3VycmVudERhdGU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdCB8fCBuZXcgRGF0ZShOYU4pO1xufSIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBtYXhcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBsYXRlc3Qgb2YgdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBsYXRlc3Qgb2YgdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBwYXJhbSB7RGF0ZVtdfE51bWJlcltdfSBkYXRlc0FycmF5IC0gdGhlIGRhdGVzIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbGF0ZXN0IG9mIHRoZSBkYXRlc1xuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIG9mIHRoZXNlIGRhdGVzIGlzIHRoZSBsYXRlc3Q/XG4gKiBjb25zdCByZXN1bHQgPSBtYXgoW1xuICogICBuZXcgRGF0ZSgxOTg5LCA2LCAxMCksXG4gKiAgIG5ldyBEYXRlKDE5ODcsIDEsIDExKSxcbiAqICAgbmV3IERhdGUoMTk5NSwgNiwgMiksXG4gKiAgIG5ldyBEYXRlKDE5OTAsIDAsIDEpXG4gKiBdKVxuICogLy89PiBTdW4gSnVsIDAyIDE5OTUgMDA6MDA6MDBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXgoZGlydHlEYXRlc0FycmF5KSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZXNBcnJheTsgLy8gYGRpcnR5RGF0ZXNBcnJheWAgaXMgQXJyYXksIFNldCBvciBNYXAsIG9yIG9iamVjdCB3aXRoIGN1c3RvbSBgZm9yRWFjaGAgbWV0aG9kXG5cbiAgaWYgKGRpcnR5RGF0ZXNBcnJheSAmJiB0eXBlb2YgZGlydHlEYXRlc0FycmF5LmZvckVhY2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICBkYXRlc0FycmF5ID0gZGlydHlEYXRlc0FycmF5OyAvLyBJZiBgZGlydHlEYXRlc0FycmF5YCBpcyBBcnJheS1saWtlIE9iamVjdCwgY29udmVydCB0byBBcnJheS5cbiAgfSBlbHNlIGlmIChfdHlwZW9mKGRpcnR5RGF0ZXNBcnJheSkgPT09ICdvYmplY3QnICYmIGRpcnR5RGF0ZXNBcnJheSAhPT0gbnVsbCkge1xuICAgIGRhdGVzQXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkaXJ0eURhdGVzQXJyYXkpO1xuICB9IGVsc2Uge1xuICAgIC8vIGBkaXJ0eURhdGVzQXJyYXlgIGlzIG5vbi1pdGVyYWJsZSwgcmV0dXJuIEludmFsaWQgRGF0ZVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG5cbiAgdmFyIHJlc3VsdDtcbiAgZGF0ZXNBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChkaXJ0eURhdGUpIHtcbiAgICB2YXIgY3VycmVudERhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcblxuICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCB8fCByZXN1bHQgPCBjdXJyZW50RGF0ZSB8fCBpc05hTihOdW1iZXIoY3VycmVudERhdGUpKSkge1xuICAgICAgcmVzdWx0ID0gY3VycmVudERhdGU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdCB8fCBuZXcgRGF0ZShOYU4pO1xufSIsImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3RhcnRPZkRheVxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgZGF5IGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYSBkYXkgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIG9yaWdpbmFsIGRhdGVcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgc3RhcnQgb2YgYSBkYXlcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSBkYXkgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mRGF5KG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCkpXG4gKiAvLz0+IFR1ZSBTZXAgMDIgMjAxNCAwMDowMDowMFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZEYXkoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCJpbXBvcnQgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZkRheSBmcm9tIFwiLi4vc3RhcnRPZkRheS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fREFZID0gODY0MDAwMDA7XG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5c1xuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciBkYXlzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgZGF5cyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy4gVGhpcyBtZWFucyB0aGF0IHRoZSB0aW1lcyBhcmUgcmVtb3ZlZFxuICogZnJvbSB0aGUgZGF0ZXMgYW5kIHRoZW4gdGhlIGRpZmZlcmVuY2UgaW4gZGF5cyBpcyBjYWxjdWxhdGVkLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVMZWZ0IC0gdGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVSaWdodCAtIHRoZSBlYXJsaWVyIGRhdGVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgZGF5c1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBjYWxlbmRhciBkYXlzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxMSAyMzowMDowMCBhbmQgMiBKdWx5IDIwMTIgMDA6MDA6MDA/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoXG4gKiAgIG5ldyBEYXRlKDIwMTIsIDYsIDIsIDAsIDApLFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAyLCAyMywgMClcbiAqIClcbiAqIC8vPT4gMzY2XG4gKiAvLyBIb3cgbWFueSBjYWxlbmRhciBkYXlzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxMSAyMzo1OTowMCBhbmQgMyBKdWx5IDIwMTEgMDA6MDE6MDA/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDMsIDAsIDEpLFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAyLCAyMywgNTkpXG4gKiApXG4gKiAvLz0+IDFcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZGlydHlEYXRlTGVmdCwgZGlydHlEYXRlUmlnaHQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBzdGFydE9mRGF5TGVmdCA9IHN0YXJ0T2ZEYXkoZGlydHlEYXRlTGVmdCk7XG4gIHZhciBzdGFydE9mRGF5UmlnaHQgPSBzdGFydE9mRGF5KGRpcnR5RGF0ZVJpZ2h0KTtcbiAgdmFyIHRpbWVzdGFtcExlZnQgPSBzdGFydE9mRGF5TGVmdC5nZXRUaW1lKCkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKHN0YXJ0T2ZEYXlMZWZ0KTtcbiAgdmFyIHRpbWVzdGFtcFJpZ2h0ID0gc3RhcnRPZkRheVJpZ2h0LmdldFRpbWUoKSAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoc3RhcnRPZkRheVJpZ2h0KTsgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIGRheSBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIGRheSBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG5cbiAgcmV0dXJuIE1hdGgucm91bmQoKHRpbWVzdGFtcExlZnQgLSB0aW1lc3RhbXBSaWdodCkgLyBNSUxMSVNFQ09ORFNfSU5fREFZKTtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzXG4gKiBAY2F0ZWdvcnkgTW9udGggSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgbW9udGhzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgbW9udGhzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVMZWZ0IC0gdGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVSaWdodCAtIHRoZSBlYXJsaWVyIGRhdGVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgbW9udGhzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIG1vbnRocyBhcmUgYmV0d2VlbiAzMSBKYW51YXJ5IDIwMTQgYW5kIDEgU2VwdGVtYmVyIDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhcbiAqICAgbmV3IERhdGUoMjAxNCwgOCwgMSksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDAsIDMxKVxuICogKVxuICogLy89PiA4XG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMoZGlydHlEYXRlTGVmdCwgZGlydHlEYXRlUmlnaHQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlTGVmdCA9IHRvRGF0ZShkaXJ0eURhdGVMZWZ0KTtcbiAgdmFyIGRhdGVSaWdodCA9IHRvRGF0ZShkaXJ0eURhdGVSaWdodCk7XG4gIHZhciB5ZWFyRGlmZiA9IGRhdGVMZWZ0LmdldEZ1bGxZZWFyKCkgLSBkYXRlUmlnaHQuZ2V0RnVsbFllYXIoKTtcbiAgdmFyIG1vbnRoRGlmZiA9IGRhdGVMZWZ0LmdldE1vbnRoKCkgLSBkYXRlUmlnaHQuZ2V0TW9udGgoKTtcbiAgcmV0dXJuIHllYXJEaWZmICogMTIgKyBtb250aERpZmY7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzXG4gKiBAY2F0ZWdvcnkgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciB5ZWFycyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIHllYXJzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVMZWZ0IC0gdGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVSaWdodCAtIHRoZSBlYXJsaWVyIGRhdGVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgeWVhcnNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgY2FsZW5kYXIgeWVhcnMgYXJlIGJldHdlZW4gMzEgRGVjZW1iZXIgMjAxMyBhbmQgMTEgRmVicnVhcnkgMjAxNT9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMoXG4gKiAgIG5ldyBEYXRlKDIwMTUsIDEsIDExKSxcbiAqICAgbmV3IERhdGUoMjAxMywgMTEsIDMxKVxuICogKVxuICogLy89PiAyXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhkaXJ0eURhdGVMZWZ0LCBkaXJ0eURhdGVSaWdodCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGVMZWZ0ID0gdG9EYXRlKGRpcnR5RGF0ZUxlZnQpO1xuICB2YXIgZGF0ZVJpZ2h0ID0gdG9EYXRlKGRpcnR5RGF0ZVJpZ2h0KTtcbiAgcmV0dXJuIGRhdGVMZWZ0LmdldEZ1bGxZZWFyKCkgLSBkYXRlUmlnaHQuZ2V0RnVsbFllYXIoKTtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZNb250aFxuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSBtb250aCBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgbW9udGggZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIG9yaWdpbmFsIGRhdGVcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgc3RhcnQgb2YgYSBtb250aFxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIG1vbnRoIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZk1vbnRoKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCkpXG4gKiAvLz0+IE1vbiBTZXAgMDEgMjAxNCAwMDowMDowMFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZNb250aChkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIGRhdGUuc2V0RGF0ZSgxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBzdGFydE9mUXVhcnRlclxuICogQGNhdGVnb3J5IFF1YXJ0ZXIgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhIHllYXIgcXVhcnRlciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgeWVhciBxdWFydGVyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHN0YXJ0IG9mIGEgcXVhcnRlclxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIHF1YXJ0ZXIgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mUXVhcnRlcihuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApKVxuICogLy89PiBUdWUgSnVsIDAxIDIwMTQgMDA6MDA6MDBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mUXVhcnRlcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBjdXJyZW50TW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG4gIHZhciBtb250aCA9IGN1cnJlbnRNb250aCAtIGN1cnJlbnRNb250aCAlIDM7XG4gIGRhdGUuc2V0TW9udGgobW9udGgsIDEpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZZZWFyXG4gKiBAY2F0ZWdvcnkgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgb3JpZ2luYWwgZGF0ZVxuICogQHJldHVybnMge0RhdGV9IHRoZSBzdGFydCBvZiBhIHllYXJcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSB5ZWFyIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZlllYXIobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwMCkpXG4gKiAvLz0+IFdlZCBKYW4gMDEgMjAxNCAwMDowMDowMFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGNsZWFuRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKDApO1xuICBkYXRlLnNldEZ1bGxZZWFyKGNsZWFuRGF0ZS5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBlbmRPZkRheVxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGVuZCBvZiBhIGRheSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGVuZCBvZiBhIGRheSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgb3JpZ2luYWwgZGF0ZVxuICogQHJldHVybnMge0RhdGV9IHRoZSBlbmQgb2YgYSBkYXlcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgZW5kIG9mIGEgZGF5IGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gZW5kT2ZEYXkobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gVHVlIFNlcCAwMiAyMDE0IDIzOjU5OjU5Ljk5OVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGVuZE9mRGF5KGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgZGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGVuZE9mTW9udGhcbiAqIEBjYXRlZ29yeSBNb250aCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGVuZCBvZiBhIG1vbnRoIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZW5kIG9mIGEgbW9udGggZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIG9yaWdpbmFsIGRhdGVcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgZW5kIG9mIGEgbW9udGhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgZW5kIG9mIGEgbW9udGggZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBlbmRPZk1vbnRoKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCkpXG4gKiAvLz0+IFR1ZSBTZXAgMzAgMjAxNCAyMzo1OTo1OS45OTlcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbmRPZk1vbnRoKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSwgbW9udGggKyAxLCAwKTtcbiAgZGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGVuZE9mWWVhclxuICogQGNhdGVnb3J5IFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBlbmQgb2YgYSB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZW5kIG9mIGEgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgb3JpZ2luYWwgZGF0ZVxuICogQHJldHVybnMge0RhdGV9IHRoZSBlbmQgb2YgYSB5ZWFyXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIGVuZCBvZiBhIHllYXIgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBlbmRPZlllYXIobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwMCkpXG4gKiAvLz0+IFdlZCBEZWMgMzEgMjAxNCAyMzo1OTo1OS45OTlcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbmRPZlllYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyICsgMSwgMCwgMCk7XG4gIGRhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcbiAgcmV0dXJuIGRhdGU7XG59IiwiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0VxdWFsXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgZXF1YWw/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBcmUgdGhlIGdpdmVuIGRhdGVzIGVxdWFsP1xuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVMZWZ0IC0gdGhlIGZpcnN0IGRhdGUgdG8gY29tcGFyZVxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVJpZ2h0IC0gdGhlIHNlY29uZCBkYXRlIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0aGUgZGF0ZXMgYXJlIGVxdWFsXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSAyIEp1bHkgMjAxNCAwNjozMDo0NS4wMDAgYW5kIDIgSnVseSAyMDE0IDA2OjMwOjQ1LjUwMCBlcXVhbD9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzRXF1YWwoXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDYsIDMwLCA0NSwgMCksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDYsIDMwLCA0NSwgNTAwKVxuICogKVxuICogLy89PiBmYWxzZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRXF1YWwoZGlydHlMZWZ0RGF0ZSwgZGlydHlSaWdodERhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlTGVmdCA9IHRvRGF0ZShkaXJ0eUxlZnREYXRlKTtcbiAgdmFyIGRhdGVSaWdodCA9IHRvRGF0ZShkaXJ0eVJpZ2h0RGF0ZSk7XG4gIHJldHVybiBkYXRlTGVmdC5nZXRUaW1lKCkgPT09IGRhdGVSaWdodC5nZXRUaW1lKCk7XG59IiwiaW1wb3J0IHN0YXJ0T2ZEYXkgZnJvbSBcIi4uL3N0YXJ0T2ZEYXkvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzU2FtZURheVxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBcmUgdGhlIGdpdmVuIGRhdGVzIGluIHRoZSBzYW1lIGRheSAoYW5kIHllYXIgYW5kIG1vbnRoKT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgZGF5IChhbmQgeWVhciBhbmQgbW9udGgpP1xuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVMZWZ0IC0gdGhlIGZpcnN0IGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVSaWdodCAtIHRoZSBzZWNvbmQgZGF0ZSB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlcyBhcmUgaW4gdGhlIHNhbWUgZGF5IChhbmQgeWVhciBhbmQgbW9udGgpXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSA0IFNlcHRlbWJlciAwNjowMDowMCBhbmQgNCBTZXB0ZW1iZXIgMTg6MDA6MDAgaW4gdGhlIHNhbWUgZGF5P1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lRGF5KG5ldyBEYXRlKDIwMTQsIDgsIDQsIDYsIDApLCBuZXcgRGF0ZSgyMDE0LCA4LCA0LCAxOCwgMCkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDQgU2VwdGVtYmVyIGFuZCA0IE9jdG9iZXIgaW4gdGhlIHNhbWUgZGF5P1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lRGF5KG5ldyBEYXRlKDIwMTQsIDgsIDQpLCBuZXcgRGF0ZSgyMDE0LCA5LCA0KSlcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDQgU2VwdGVtYmVyLCAyMDE0IGFuZCA0IFNlcHRlbWJlciwgMjAxNSBpbiB0aGUgc2FtZSBkYXk/XG4gKiBjb25zdCByZXN1bHQgPSBpc1NhbWVEYXkobmV3IERhdGUoMjAxNCwgOCwgNCksIG5ldyBEYXRlKDIwMTUsIDgsIDQpKVxuICogLy89PiBmYWxzZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzU2FtZURheShkaXJ0eURhdGVMZWZ0LCBkaXJ0eURhdGVSaWdodCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGVMZWZ0U3RhcnRPZkRheSA9IHN0YXJ0T2ZEYXkoZGlydHlEYXRlTGVmdCk7XG4gIHZhciBkYXRlUmlnaHRTdGFydE9mRGF5ID0gc3RhcnRPZkRheShkaXJ0eURhdGVSaWdodCk7XG4gIHJldHVybiBkYXRlTGVmdFN0YXJ0T2ZEYXkuZ2V0VGltZSgpID09PSBkYXRlUmlnaHRTdGFydE9mRGF5LmdldFRpbWUoKTtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzU2FtZU1vbnRoXG4gKiBAY2F0ZWdvcnkgTW9udGggSGVscGVyc1xuICogQHN1bW1hcnkgQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSBtb250aCAoYW5kIHllYXIpP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSBtb250aCAoYW5kIHllYXIpP1xuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVMZWZ0IC0gdGhlIGZpcnN0IGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVSaWdodCAtIHRoZSBzZWNvbmQgZGF0ZSB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlcyBhcmUgaW4gdGhlIHNhbWUgbW9udGggKGFuZCB5ZWFyKVxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBcmUgMiBTZXB0ZW1iZXIgMjAxNCBhbmQgMjUgU2VwdGVtYmVyIDIwMTQgaW4gdGhlIHNhbWUgbW9udGg/XG4gKiBjb25zdCByZXN1bHQgPSBpc1NhbWVNb250aChuZXcgRGF0ZSgyMDE0LCA4LCAyKSwgbmV3IERhdGUoMjAxNCwgOCwgMjUpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSAyIFNlcHRlbWJlciAyMDE0IGFuZCAyNSBTZXB0ZW1iZXIgMjAxNSBpbiB0aGUgc2FtZSBtb250aD9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2FtZU1vbnRoKG5ldyBEYXRlKDIwMTQsIDgsIDIpLCBuZXcgRGF0ZSgyMDE1LCA4LCAyNSkpXG4gKiAvLz0+IGZhbHNlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTYW1lTW9udGgoZGlydHlEYXRlTGVmdCwgZGlydHlEYXRlUmlnaHQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlTGVmdCA9IHRvRGF0ZShkaXJ0eURhdGVMZWZ0KTtcbiAgdmFyIGRhdGVSaWdodCA9IHRvRGF0ZShkaXJ0eURhdGVSaWdodCk7XG4gIHJldHVybiBkYXRlTGVmdC5nZXRGdWxsWWVhcigpID09PSBkYXRlUmlnaHQuZ2V0RnVsbFllYXIoKSAmJiBkYXRlTGVmdC5nZXRNb250aCgpID09PSBkYXRlUmlnaHQuZ2V0TW9udGgoKTtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzU2FtZVllYXJcbiAqIEBjYXRlZ29yeSBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgeWVhcj9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFyZSB0aGUgZ2l2ZW4gZGF0ZXMgaW4gdGhlIHNhbWUgeWVhcj9cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlTGVmdCAtIHRoZSBmaXJzdCBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlUmlnaHQgLSB0aGUgc2Vjb25kIGRhdGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0aGUgZGF0ZXMgYXJlIGluIHRoZSBzYW1lIHllYXJcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDIgU2VwdGVtYmVyIDIwMTQgYW5kIDI1IFNlcHRlbWJlciAyMDE0IGluIHRoZSBzYW1lIHllYXI/XG4gKiBjb25zdCByZXN1bHQgPSBpc1NhbWVZZWFyKG5ldyBEYXRlKDIwMTQsIDgsIDIpLCBuZXcgRGF0ZSgyMDE0LCA4LCAyNSkpXG4gKiAvLz0+IHRydWVcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1NhbWVZZWFyKGRpcnR5RGF0ZUxlZnQsIGRpcnR5RGF0ZVJpZ2h0KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZUxlZnQgPSB0b0RhdGUoZGlydHlEYXRlTGVmdCk7XG4gIHZhciBkYXRlUmlnaHQgPSB0b0RhdGUoZGlydHlEYXRlUmlnaHQpO1xuICByZXR1cm4gZGF0ZUxlZnQuZ2V0RnVsbFllYXIoKSA9PT0gZGF0ZVJpZ2h0LmdldEZ1bGxZZWFyKCk7XG59IiwiaW1wb3J0IHN0YXJ0T2ZRdWFydGVyIGZyb20gXCIuLi9zdGFydE9mUXVhcnRlci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNTYW1lUXVhcnRlclxuICogQGNhdGVnb3J5IFF1YXJ0ZXIgSGVscGVyc1xuICogQHN1bW1hcnkgQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSBxdWFydGVyIChhbmQgeWVhcik/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBcmUgdGhlIGdpdmVuIGRhdGVzIGluIHRoZSBzYW1lIHF1YXJ0ZXIgKGFuZCB5ZWFyKT9cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlTGVmdCAtIHRoZSBmaXJzdCBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlUmlnaHQgLSB0aGUgc2Vjb25kIGRhdGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0aGUgZGF0ZXMgYXJlIGluIHRoZSBzYW1lIHF1YXJ0ZXIgKGFuZCB5ZWFyKVxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBcmUgMSBKYW51YXJ5IDIwMTQgYW5kIDggTWFyY2ggMjAxNCBpbiB0aGUgc2FtZSBxdWFydGVyP1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lUXVhcnRlcihuZXcgRGF0ZSgyMDE0LCAwLCAxKSwgbmV3IERhdGUoMjAxNCwgMiwgOCkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDEgSmFudWFyeSAyMDE0IGFuZCAxIEphbnVhcnkgMjAxNSBpbiB0aGUgc2FtZSBxdWFydGVyP1xuICogY29uc3QgcmVzdWx0ID0gaXNTYW1lUXVhcnRlcihuZXcgRGF0ZSgyMDE0LCAwLCAxKSwgbmV3IERhdGUoMjAxNSwgMCwgMSkpXG4gKiAvLz0+IGZhbHNlXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTYW1lUXVhcnRlcihkaXJ0eURhdGVMZWZ0LCBkaXJ0eURhdGVSaWdodCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGVMZWZ0U3RhcnRPZlF1YXJ0ZXIgPSBzdGFydE9mUXVhcnRlcihkaXJ0eURhdGVMZWZ0KTtcbiAgdmFyIGRhdGVSaWdodFN0YXJ0T2ZRdWFydGVyID0gc3RhcnRPZlF1YXJ0ZXIoZGlydHlEYXRlUmlnaHQpO1xuICByZXR1cm4gZGF0ZUxlZnRTdGFydE9mUXVhcnRlci5nZXRUaW1lKCkgPT09IGRhdGVSaWdodFN0YXJ0T2ZRdWFydGVyLmdldFRpbWUoKTtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzQWZ0ZXJcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGZpcnN0IGRhdGUgYWZ0ZXIgdGhlIHNlY29uZCBvbmU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZmlyc3QgZGF0ZSBhZnRlciB0aGUgc2Vjb25kIG9uZT9cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdGhhdCBzaG91bGQgYmUgYWZ0ZXIgdGhlIG90aGVyIG9uZSB0byByZXR1cm4gdHJ1ZVxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZVRvQ29tcGFyZSAtIHRoZSBkYXRlIHRvIGNvbXBhcmUgd2l0aFxuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBmaXJzdCBkYXRlIGlzIGFmdGVyIHRoZSBzZWNvbmQgZGF0ZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJcyAxMCBKdWx5IDE5ODkgYWZ0ZXIgMTEgRmVicnVhcnkgMTk4Nz9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzQWZ0ZXIobmV3IERhdGUoMTk4OSwgNiwgMTApLCBuZXcgRGF0ZSgxOTg3LCAxLCAxMSkpXG4gKiAvLz0+IHRydWVcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0FmdGVyKGRpcnR5RGF0ZSwgZGlydHlEYXRlVG9Db21wYXJlKSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF0ZVRvQ29tcGFyZSA9IHRvRGF0ZShkaXJ0eURhdGVUb0NvbXBhcmUpO1xuICByZXR1cm4gZGF0ZS5nZXRUaW1lKCkgPiBkYXRlVG9Db21wYXJlLmdldFRpbWUoKTtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGlzQmVmb3JlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBmaXJzdCBkYXRlIGJlZm9yZSB0aGUgc2Vjb25kIG9uZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIElzIHRoZSBmaXJzdCBkYXRlIGJlZm9yZSB0aGUgc2Vjb25kIG9uZT9cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdGhhdCBzaG91bGQgYmUgYmVmb3JlIHRoZSBvdGhlciBvbmUgdG8gcmV0dXJuIHRydWVcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGVUb0NvbXBhcmUgLSB0aGUgZGF0ZSB0byBjb21wYXJlIHdpdGhcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0aGUgZmlyc3QgZGF0ZSBpcyBiZWZvcmUgdGhlIHNlY29uZCBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElzIDEwIEp1bHkgMTk4OSBiZWZvcmUgMTEgRmVicnVhcnkgMTk4Nz9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzQmVmb3JlKG5ldyBEYXRlKDE5ODksIDYsIDEwKSwgbmV3IERhdGUoMTk4NywgMSwgMTEpKVxuICogLy89PiBmYWxzZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQmVmb3JlKGRpcnR5RGF0ZSwgZGlydHlEYXRlVG9Db21wYXJlKSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF0ZVRvQ29tcGFyZSA9IHRvRGF0ZShkaXJ0eURhdGVUb0NvbXBhcmUpO1xuICByZXR1cm4gZGF0ZS5nZXRUaW1lKCkgPCBkYXRlVG9Db21wYXJlLmdldFRpbWUoKTtcbn0iLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5cbi8qKlxuICogQG5hbWUgaXNXaXRoaW5JbnRlcnZhbFxuICogQGNhdGVnb3J5IEludGVydmFsIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHdpdGhpbiB0aGUgaW50ZXJ2YWw/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0ZSB3aXRoaW4gdGhlIGludGVydmFsPyAoSW5jbHVkaW5nIHN0YXJ0IGFuZCBlbmQuKVxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIHtJbnRlcnZhbH0gaW50ZXJ2YWwgLSB0aGUgaW50ZXJ2YWwgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0aGUgZGF0ZSBpcyB3aXRoaW4gdGhlIGludGVydmFsXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBUaGUgc3RhcnQgb2YgYW4gaW50ZXJ2YWwgY2Fubm90IGJlIGFmdGVyIGl0cyBlbmRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IERhdGUgaW4gaW50ZXJ2YWwgY2Fubm90IGJlIGBJbnZhbGlkIERhdGVgXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgZGF0ZSB3aXRoaW4gdGhlIGludGVydmFsOlxuICogaXNXaXRoaW5JbnRlcnZhbChuZXcgRGF0ZSgyMDE0LCAwLCAzKSwge1xuICogICBzdGFydDogbmV3IERhdGUoMjAxNCwgMCwgMSksXG4gKiAgIGVuZDogbmV3IERhdGUoMjAxNCwgMCwgNylcbiAqIH0pXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSBkYXRlIG91dHNpZGUgb2YgdGhlIGludGVydmFsOlxuICogaXNXaXRoaW5JbnRlcnZhbChuZXcgRGF0ZSgyMDE0LCAwLCAxMCksIHtcbiAqICAgc3RhcnQ6IG5ldyBEYXRlKDIwMTQsIDAsIDEpLFxuICogICBlbmQ6IG5ldyBEYXRlKDIwMTQsIDAsIDcpXG4gKiB9KVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgZGF0ZSBlcXVhbCB0byBpbnRlcnZhbCBzdGFydDpcbiAqIGlzV2l0aGluSW50ZXJ2YWwoZGF0ZSwgeyBzdGFydCwgZW5kOiBkYXRlIH0pIC8vID0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGRhdGUgZXF1YWwgdG8gaW50ZXJ2YWwgZW5kOlxuICogaXNXaXRoaW5JbnRlcnZhbChkYXRlLCB7IHN0YXJ0OiBkYXRlLCBlbmQgfSkgLy8gPT4gdHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1dpdGhpbkludGVydmFsKGRpcnR5RGF0ZSwgaW50ZXJ2YWwpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lID0gdG9EYXRlKGRpcnR5RGF0ZSkuZ2V0VGltZSgpO1xuICB2YXIgc3RhcnRUaW1lID0gdG9EYXRlKGludGVydmFsLnN0YXJ0KS5nZXRUaW1lKCk7XG4gIHZhciBlbmRUaW1lID0gdG9EYXRlKGludGVydmFsLmVuZCkuZ2V0VGltZSgpOyAvLyBUaHJvdyBhbiBleGNlcHRpb24gaWYgc3RhcnQgZGF0ZSBpcyBhZnRlciBlbmQgZGF0ZSBvciBpZiBhbnkgZGF0ZSBpcyBgSW52YWxpZCBEYXRlYFxuXG4gIGlmICghKHN0YXJ0VGltZSA8PSBlbmRUaW1lKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIGludGVydmFsJyk7XG4gIH1cblxuICByZXR1cm4gdGltZSA+PSBzdGFydFRpbWUgJiYgdGltZSA8PSBlbmRUaW1lO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIG9iamVjdCkge1xuICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhc3NpZ24gcmVxdWlyZXMgdGhhdCBpbnB1dCBwYXJhbWV0ZXIgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gIH1cblxuICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBvYmplY3QpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7XG4gICAgICA7XG4gICAgICB0YXJnZXRbcHJvcGVydHldID0gb2JqZWN0W3Byb3BlcnR5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufSIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG52YXIgVElNRVpPTkVfVU5JVF9QUklPUklUWSA9IDEwO1xuZXhwb3J0IHZhciBTZXR0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTZXR0ZXIoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNldHRlcik7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzdWJQcmlvcml0eVwiLCAwKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTZXR0ZXIsIFt7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbGlkYXRlKF91dGNEYXRlLCBfb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFNldHRlcjtcbn0oKTtcbmV4cG9ydCB2YXIgVmFsdWVTZXR0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TZXR0ZXIpIHtcbiAgX2luaGVyaXRzKFZhbHVlU2V0dGVyLCBfU2V0dGVyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFZhbHVlU2V0dGVyKTtcblxuICBmdW5jdGlvbiBWYWx1ZVNldHRlcih2YWx1ZSwgdmFsaWRhdGVWYWx1ZSwgc2V0VmFsdWUsIHByaW9yaXR5LCBzdWJQcmlvcml0eSkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBWYWx1ZVNldHRlcik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuICAgIF90aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgX3RoaXMudmFsaWRhdGVWYWx1ZSA9IHZhbGlkYXRlVmFsdWU7XG4gICAgX3RoaXMuc2V0VmFsdWUgPSBzZXRWYWx1ZTtcbiAgICBfdGhpcy5wcmlvcml0eSA9IHByaW9yaXR5O1xuXG4gICAgaWYgKHN1YlByaW9yaXR5KSB7XG4gICAgICBfdGhpcy5zdWJQcmlvcml0eSA9IHN1YlByaW9yaXR5O1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhWYWx1ZVNldHRlciwgW3tcbiAgICBrZXk6IFwidmFsaWRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsaWRhdGUodXRjRGF0ZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVWYWx1ZSh1dGNEYXRlLCB0aGlzLnZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldCh1dGNEYXRlLCBmbGFncywgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0VmFsdWUodXRjRGF0ZSwgZmxhZ3MsIHRoaXMudmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBWYWx1ZVNldHRlcjtcbn0oU2V0dGVyKTtcbmV4cG9ydCB2YXIgRGF0ZVRvU3lzdGVtVGltZXpvbmVTZXR0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TZXR0ZXIyKSB7XG4gIF9pbmhlcml0cyhEYXRlVG9TeXN0ZW1UaW1lem9uZVNldHRlciwgX1NldHRlcjIpO1xuXG4gIHZhciBfc3VwZXIyID0gX2NyZWF0ZVN1cGVyKERhdGVUb1N5c3RlbVRpbWV6b25lU2V0dGVyKTtcblxuICBmdW5jdGlvbiBEYXRlVG9TeXN0ZW1UaW1lem9uZVNldHRlcigpIHtcbiAgICB2YXIgX3RoaXMyO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERhdGVUb1N5c3RlbVRpbWV6b25lU2V0dGVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpczIgPSBfc3VwZXIyLmNhbGwuYXBwbHkoX3N1cGVyMiwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpczIpLCBcInByaW9yaXR5XCIsIFRJTUVaT05FX1VOSVRfUFJJT1JJVFkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMyKSwgXCJzdWJQcmlvcml0eVwiLCAtMSk7XG5cbiAgICByZXR1cm4gX3RoaXMyO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKERhdGVUb1N5c3RlbVRpbWV6b25lU2V0dGVyLCBbe1xuICAgIGtleTogXCJzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0KGRhdGUsIGZsYWdzKSB7XG4gICAgICBpZiAoZmxhZ3MudGltZXN0YW1wSXNTZXQpIHtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb252ZXJ0ZWREYXRlID0gbmV3IERhdGUoMCk7XG4gICAgICBjb252ZXJ0ZWREYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSwgZGF0ZS5nZXRVVENNb250aCgpLCBkYXRlLmdldFVUQ0RhdGUoKSk7XG4gICAgICBjb252ZXJ0ZWREYXRlLnNldEhvdXJzKGRhdGUuZ2V0VVRDSG91cnMoKSwgZGF0ZS5nZXRVVENNaW51dGVzKCksIGRhdGUuZ2V0VVRDU2Vjb25kcygpLCBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpKTtcbiAgICAgIHJldHVybiBjb252ZXJ0ZWREYXRlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBEYXRlVG9TeXN0ZW1UaW1lem9uZVNldHRlcjtcbn0oU2V0dGVyKTsiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmltcG9ydCB7IFZhbHVlU2V0dGVyIH0gZnJvbSBcIi4vU2V0dGVyLmpzXCI7XG5leHBvcnQgdmFyIFBhcnNlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUGFyc2VyKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhQYXJzZXIsIFt7XG4gICAga2V5OiBcInJ1blwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBydW4oZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoLCBvcHRpb25zKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdGhpcy5wYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0dGVyOiBuZXcgVmFsdWVTZXR0ZXIocmVzdWx0LnZhbHVlLCB0aGlzLnZhbGlkYXRlLCB0aGlzLnNldCwgdGhpcy5wcmlvcml0eSwgdGhpcy5zdWJQcmlvcml0eSksXG4gICAgICAgIHJlc3Q6IHJlc3VsdC5yZXN0XG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZShfdXRjRGF0ZSwgX3ZhbHVlLCBfb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBhcnNlcjtcbn0oKTsiLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuZXhwb3J0IHZhciBFcmFQYXJzZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QYXJzZXIpIHtcbiAgX2luaGVyaXRzKEVyYVBhcnNlciwgX1BhcnNlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFcmFQYXJzZXIpO1xuXG4gIGZ1bmN0aW9uIEVyYVBhcnNlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXJhUGFyc2VyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicHJpb3JpdHlcIiwgMTQwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbmNvbXBhdGlibGVUb2tlbnNcIiwgWydSJywgJ3UnLCAndCcsICdUJ10pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEVyYVBhcnNlciwgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIC8vIEFELCBCQ1xuICAgICAgICBjYXNlICdHJzpcbiAgICAgICAgY2FzZSAnR0cnOlxuICAgICAgICBjYXNlICdHR0cnOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5lcmEoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCdcbiAgICAgICAgICB9KSB8fCBtYXRjaC5lcmEoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIEEsIEJcblxuICAgICAgICBjYXNlICdHR0dHRyc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLmVyYShkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3RcblxuICAgICAgICBjYXNlICdHR0dHJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZXJhKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgICB9KSB8fCBtYXRjaC5lcmEoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCdcbiAgICAgICAgICB9KSB8fCBtYXRjaC5lcmEoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXQoZGF0ZSwgZmxhZ3MsIHZhbHVlKSB7XG4gICAgICBmbGFncy5lcmEgPSB2YWx1ZTtcbiAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIodmFsdWUsIDAsIDEpO1xuICAgICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFcmFQYXJzZXI7XG59KFBhcnNlcik7IiwiLyoqXG4gKiBEYXlzIGluIDEgd2Vlay5cbiAqXG4gKiBAbmFtZSBkYXlzSW5XZWVrXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5leHBvcnQgdmFyIGRheXNJbldlZWsgPSA3O1xuLyoqXG4gKiBEYXlzIGluIDEgeWVhclxuICogT25lIHllYXJzIGVxdWFscyAzNjUuMjQyNSBkYXlzIGFjY29yZGluZyB0byB0aGUgZm9ybXVsYTpcbiAqXG4gKiA+IExlYXAgeWVhciBvY2N1cmVzIGV2ZXJ5IDQgeWVhcnMsIGV4Y2VwdCBmb3IgeWVhcnMgdGhhdCBhcmUgZGl2aXNhYmxlIGJ5IDEwMCBhbmQgbm90IGRpdmlzYWJsZSBieSA0MDAuXG4gKiA+IDEgbWVhbiB5ZWFyID0gKDM2NSsxLzQtMS8xMDArMS80MDApIGRheXMgPSAzNjUuMjQyNSBkYXlzXG4gKlxuICogQG5hbWUgZGF5c0luWWVhclxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIGRheXNJblllYXIgPSAzNjUuMjQyNTtcbi8qKlxuICogTWF4aW11bSBhbGxvd2VkIHRpbWUuXG4gKlxuICogQG5hbWUgbWF4VGltZVxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIG1heFRpbWUgPSBNYXRoLnBvdygxMCwgOCkgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xuLyoqXG4gKiBNaWxsaXNlY29uZHMgaW4gMSBtaW51dGVcbiAqXG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJbk1pbnV0ZVxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIG1pbGxpc2Vjb25kc0luTWludXRlID0gNjAwMDA7XG4vKipcbiAqIE1pbGxpc2Vjb25kcyBpbiAxIGhvdXJcbiAqXG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJbkhvdXJcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0IHZhciBtaWxsaXNlY29uZHNJbkhvdXIgPSAzNjAwMDAwO1xuLyoqXG4gKiBNaWxsaXNlY29uZHMgaW4gMSBzZWNvbmRcbiAqXG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJblNlY29uZFxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIG1pbGxpc2Vjb25kc0luU2Vjb25kID0gMTAwMDtcbi8qKlxuICogTWluaW11bSBhbGxvd2VkIHRpbWUuXG4gKlxuICogQG5hbWUgbWluVGltZVxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIG1pblRpbWUgPSAtbWF4VGltZTtcbi8qKlxuICogTWludXRlcyBpbiAxIGhvdXJcbiAqXG4gKiBAbmFtZSBtaW51dGVzSW5Ib3VyXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5cbmV4cG9ydCB2YXIgbWludXRlc0luSG91ciA9IDYwO1xuLyoqXG4gKiBNb250aHMgaW4gMSBxdWFydGVyXG4gKlxuICogQG5hbWUgbW9udGhzSW5RdWFydGVyXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5cbmV4cG9ydCB2YXIgbW9udGhzSW5RdWFydGVyID0gMztcbi8qKlxuICogTW9udGhzIGluIDEgeWVhclxuICpcbiAqIEBuYW1lIG1vbnRoc0luWWVhclxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIG1vbnRoc0luWWVhciA9IDEyO1xuLyoqXG4gKiBRdWFydGVycyBpbiAxIHllYXJcbiAqXG4gKiBAbmFtZSBxdWFydGVyc0luWWVhclxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIHF1YXJ0ZXJzSW5ZZWFyID0gNDtcbi8qKlxuICogU2Vjb25kcyBpbiAxIGhvdXJcbiAqXG4gKiBAbmFtZSBzZWNvbmRzSW5Ib3VyXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5cbmV4cG9ydCB2YXIgc2Vjb25kc0luSG91ciA9IDM2MDA7XG4vKipcbiAqIFNlY29uZHMgaW4gMSBtaW51dGVcbiAqXG4gKiBAbmFtZSBzZWNvbmRzSW5NaW51dGVcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0IHZhciBzZWNvbmRzSW5NaW51dGUgPSA2MDtcbi8qKlxuICogU2Vjb25kcyBpbiAxIGRheVxuICpcbiAqIEBuYW1lIHNlY29uZHNJbkRheVxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIHNlY29uZHNJbkRheSA9IHNlY29uZHNJbkhvdXIgKiAyNDtcbi8qKlxuICogU2Vjb25kcyBpbiAxIHdlZWtcbiAqXG4gKiBAbmFtZSBzZWNvbmRzSW5XZWVrXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5cbmV4cG9ydCB2YXIgc2Vjb25kc0luV2VlayA9IHNlY29uZHNJbkRheSAqIDc7XG4vKipcbiAqIFNlY29uZHMgaW4gMSB5ZWFyXG4gKlxuICogQG5hbWUgc2Vjb25kc0luWWVhclxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIHNlY29uZHNJblllYXIgPSBzZWNvbmRzSW5EYXkgKiBkYXlzSW5ZZWFyO1xuLyoqXG4gKiBTZWNvbmRzIGluIDEgbW9udGhcbiAqXG4gKiBAbmFtZSBzZWNvbmRzSW5Nb250aFxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnQgdmFyIHNlY29uZHNJbk1vbnRoID0gc2Vjb25kc0luWWVhciAvIDEyO1xuLyoqXG4gKiBTZWNvbmRzIGluIDEgcXVhcnRlclxuICpcbiAqIEBuYW1lIHNlY29uZHNJblF1YXJ0ZXJcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0IHZhciBzZWNvbmRzSW5RdWFydGVyID0gc2Vjb25kc0luTW9udGggKiAzOyIsImV4cG9ydCB2YXIgbnVtZXJpY1BhdHRlcm5zID0ge1xuICBtb250aDogL14oMVswLTJdfDA/XFxkKS8sXG4gIC8vIDAgdG8gMTJcbiAgZGF0ZTogL14oM1swLTFdfFswLTJdP1xcZCkvLFxuICAvLyAwIHRvIDMxXG4gIGRheU9mWWVhcjogL14oMzZbMC02XXwzWzAtNV1cXGR8WzAtMl0/XFxkP1xcZCkvLFxuICAvLyAwIHRvIDM2NlxuICB3ZWVrOiAvXig1WzAtM118WzAtNF0/XFxkKS8sXG4gIC8vIDAgdG8gNTNcbiAgaG91cjIzaDogL14oMlswLTNdfFswLTFdP1xcZCkvLFxuICAvLyAwIHRvIDIzXG4gIGhvdXIyNGg6IC9eKDJbMC00XXxbMC0xXT9cXGQpLyxcbiAgLy8gMCB0byAyNFxuICBob3VyMTFoOiAvXigxWzAtMV18MD9cXGQpLyxcbiAgLy8gMCB0byAxMVxuICBob3VyMTJoOiAvXigxWzAtMl18MD9cXGQpLyxcbiAgLy8gMCB0byAxMlxuICBtaW51dGU6IC9eWzAtNV0/XFxkLyxcbiAgLy8gMCB0byA1OVxuICBzZWNvbmQ6IC9eWzAtNV0/XFxkLyxcbiAgLy8gMCB0byA1OVxuICBzaW5nbGVEaWdpdDogL15cXGQvLFxuICAvLyAwIHRvIDlcbiAgdHdvRGlnaXRzOiAvXlxcZHsxLDJ9LyxcbiAgLy8gMCB0byA5OVxuICB0aHJlZURpZ2l0czogL15cXGR7MSwzfS8sXG4gIC8vIDAgdG8gOTk5XG4gIGZvdXJEaWdpdHM6IC9eXFxkezEsNH0vLFxuICAvLyAwIHRvIDk5OTlcbiAgYW55RGlnaXRzU2lnbmVkOiAvXi0/XFxkKy8sXG4gIHNpbmdsZURpZ2l0U2lnbmVkOiAvXi0/XFxkLyxcbiAgLy8gMCB0byA5LCAtMCB0byAtOVxuICB0d29EaWdpdHNTaWduZWQ6IC9eLT9cXGR7MSwyfS8sXG4gIC8vIDAgdG8gOTksIC0wIHRvIC05OVxuICB0aHJlZURpZ2l0c1NpZ25lZDogL14tP1xcZHsxLDN9LyxcbiAgLy8gMCB0byA5OTksIC0wIHRvIC05OTlcbiAgZm91ckRpZ2l0c1NpZ25lZDogL14tP1xcZHsxLDR9LyAvLyAwIHRvIDk5OTksIC0wIHRvIC05OTk5XG5cbn07XG5leHBvcnQgdmFyIHRpbWV6b25lUGF0dGVybnMgPSB7XG4gIGJhc2ljT3B0aW9uYWxNaW51dGVzOiAvXihbKy1dKShcXGR7Mn0pKFxcZHsyfSk/fFovLFxuICBiYXNpYzogL14oWystXSkoXFxkezJ9KShcXGR7Mn0pfFovLFxuICBiYXNpY09wdGlvbmFsU2Vjb25kczogL14oWystXSkoXFxkezJ9KShcXGR7Mn0pKChcXGR7Mn0pKT98Wi8sXG4gIGV4dGVuZGVkOiAvXihbKy1dKShcXGR7Mn0pOihcXGR7Mn0pfFovLFxuICBleHRlbmRlZE9wdGlvbmFsU2Vjb25kczogL14oWystXSkoXFxkezJ9KTooXFxkezJ9KSg6KFxcZHsyfSkpP3xaL1xufTsiLCJpbXBvcnQgeyBtaWxsaXNlY29uZHNJbkhvdXIsIG1pbGxpc2Vjb25kc0luTWludXRlLCBtaWxsaXNlY29uZHNJblNlY29uZCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvaW5kZXguanNcIjtcbmltcG9ydCB7IG51bWVyaWNQYXR0ZXJucyB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFZhbHVlKHBhcnNlRm5SZXN1bHQsIG1hcEZuKSB7XG4gIGlmICghcGFyc2VGblJlc3VsdCkge1xuICAgIHJldHVybiBwYXJzZUZuUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogbWFwRm4ocGFyc2VGblJlc3VsdC52YWx1ZSksXG4gICAgcmVzdDogcGFyc2VGblJlc3VsdC5yZXN0XG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1lcmljUGF0dGVybihwYXR0ZXJuLCBkYXRlU3RyaW5nKSB7XG4gIHZhciBtYXRjaFJlc3VsdCA9IGRhdGVTdHJpbmcubWF0Y2gocGF0dGVybik7XG5cbiAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogcGFyc2VJbnQobWF0Y2hSZXN1bHRbMF0sIDEwKSxcbiAgICByZXN0OiBkYXRlU3RyaW5nLnNsaWNlKG1hdGNoUmVzdWx0WzBdLmxlbmd0aClcbiAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRpbWV6b25lUGF0dGVybihwYXR0ZXJuLCBkYXRlU3RyaW5nKSB7XG4gIHZhciBtYXRjaFJlc3VsdCA9IGRhdGVTdHJpbmcubWF0Y2gocGF0dGVybik7XG5cbiAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIElucHV0IGlzICdaJ1xuXG5cbiAgaWYgKG1hdGNoUmVzdWx0WzBdID09PSAnWicpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IDAsXG4gICAgICByZXN0OiBkYXRlU3RyaW5nLnNsaWNlKDEpXG4gICAgfTtcbiAgfVxuXG4gIHZhciBzaWduID0gbWF0Y2hSZXN1bHRbMV0gPT09ICcrJyA/IDEgOiAtMTtcbiAgdmFyIGhvdXJzID0gbWF0Y2hSZXN1bHRbMl0gPyBwYXJzZUludChtYXRjaFJlc3VsdFsyXSwgMTApIDogMDtcbiAgdmFyIG1pbnV0ZXMgPSBtYXRjaFJlc3VsdFszXSA/IHBhcnNlSW50KG1hdGNoUmVzdWx0WzNdLCAxMCkgOiAwO1xuICB2YXIgc2Vjb25kcyA9IG1hdGNoUmVzdWx0WzVdID8gcGFyc2VJbnQobWF0Y2hSZXN1bHRbNV0sIDEwKSA6IDA7XG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHNpZ24gKiAoaG91cnMgKiBtaWxsaXNlY29uZHNJbkhvdXIgKyBtaW51dGVzICogbWlsbGlzZWNvbmRzSW5NaW51dGUgKyBzZWNvbmRzICogbWlsbGlzZWNvbmRzSW5TZWNvbmQpLFxuICAgIHJlc3Q6IGRhdGVTdHJpbmcuc2xpY2UobWF0Y2hSZXN1bHRbMF0ubGVuZ3RoKVxuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQW55RGlnaXRzU2lnbmVkKGRhdGVTdHJpbmcpIHtcbiAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLmFueURpZ2l0c1NpZ25lZCwgZGF0ZVN0cmluZyk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VORGlnaXRzKG4sIGRhdGVTdHJpbmcpIHtcbiAgc3dpdGNoIChuKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLnNpbmdsZURpZ2l0LCBkYXRlU3RyaW5nKTtcblxuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy50d29EaWdpdHMsIGRhdGVTdHJpbmcpO1xuXG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLnRocmVlRGlnaXRzLCBkYXRlU3RyaW5nKTtcblxuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5mb3VyRGlnaXRzLCBkYXRlU3RyaW5nKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihuZXcgUmVnRXhwKCdeXFxcXGR7MSwnICsgbiArICd9JyksIGRhdGVTdHJpbmcpO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VORGlnaXRzU2lnbmVkKG4sIGRhdGVTdHJpbmcpIHtcbiAgc3dpdGNoIChuKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLnNpbmdsZURpZ2l0U2lnbmVkLCBkYXRlU3RyaW5nKTtcblxuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy50d29EaWdpdHNTaWduZWQsIGRhdGVTdHJpbmcpO1xuXG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLnRocmVlRGlnaXRzU2lnbmVkLCBkYXRlU3RyaW5nKTtcblxuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5mb3VyRGlnaXRzU2lnbmVkLCBkYXRlU3RyaW5nKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihuZXcgUmVnRXhwKCdeLT9cXFxcZHsxLCcgKyBuICsgJ30nKSwgZGF0ZVN0cmluZyk7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBkYXlQZXJpb2RFbnVtVG9Ib3VycyhkYXlQZXJpb2QpIHtcbiAgc3dpdGNoIChkYXlQZXJpb2QpIHtcbiAgICBjYXNlICdtb3JuaW5nJzpcbiAgICAgIHJldHVybiA0O1xuXG4gICAgY2FzZSAnZXZlbmluZyc6XG4gICAgICByZXR1cm4gMTc7XG5cbiAgICBjYXNlICdwbSc6XG4gICAgY2FzZSAnbm9vbic6XG4gICAgY2FzZSAnYWZ0ZXJub29uJzpcbiAgICAgIHJldHVybiAxMjtcblxuICAgIGNhc2UgJ2FtJzpcbiAgICBjYXNlICdtaWRuaWdodCc6XG4gICAgY2FzZSAnbmlnaHQnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gMDtcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVR3b0RpZ2l0WWVhcih0d29EaWdpdFllYXIsIGN1cnJlbnRZZWFyKSB7XG4gIHZhciBpc0NvbW1vbkVyYSA9IGN1cnJlbnRZZWFyID4gMDsgLy8gQWJzb2x1dGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50IHllYXI6XG4gIC8vIDEgLT4gMSBBQ1xuICAvLyAwIC0+IDEgQkNcbiAgLy8gLTEgLT4gMiBCQ1xuXG4gIHZhciBhYnNDdXJyZW50WWVhciA9IGlzQ29tbW9uRXJhID8gY3VycmVudFllYXIgOiAxIC0gY3VycmVudFllYXI7XG4gIHZhciByZXN1bHQ7XG5cbiAgaWYgKGFic0N1cnJlbnRZZWFyIDw9IDUwKSB7XG4gICAgcmVzdWx0ID0gdHdvRGlnaXRZZWFyIHx8IDEwMDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgcmFuZ2VFbmQgPSBhYnNDdXJyZW50WWVhciArIDUwO1xuICAgIHZhciByYW5nZUVuZENlbnR1cnkgPSBNYXRoLmZsb29yKHJhbmdlRW5kIC8gMTAwKSAqIDEwMDtcbiAgICB2YXIgaXNQcmV2aW91c0NlbnR1cnkgPSB0d29EaWdpdFllYXIgPj0gcmFuZ2VFbmQgJSAxMDA7XG4gICAgcmVzdWx0ID0gdHdvRGlnaXRZZWFyICsgcmFuZ2VFbmRDZW50dXJ5IC0gKGlzUHJldmlvdXNDZW50dXJ5ID8gMTAwIDogMCk7XG4gIH1cblxuICByZXR1cm4gaXNDb21tb25FcmEgPyByZXN1bHQgOiAxIC0gcmVzdWx0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTGVhcFllYXJJbmRleCh5ZWFyKSB7XG4gIHJldHVybiB5ZWFyICUgNDAwID09PSAwIHx8IHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDA7XG59IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcbmltcG9ydCB7IG1hcFZhbHVlLCBub3JtYWxpemVUd29EaWdpdFllYXIsIHBhcnNlTkRpZ2l0cyB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF9QYXR0ZXJuc1xuLy8gfCBZZWFyICAgICB8ICAgICB5IHwgeXkgfCAgIHl5eSB8ICB5eXl5IHwgeXl5eXkgfFxuLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuLy8gfCBBRCAxICAgICB8ICAgICAxIHwgMDEgfCAgIDAwMSB8ICAwMDAxIHwgMDAwMDEgfFxuLy8gfCBBRCAxMiAgICB8ICAgIDEyIHwgMTIgfCAgIDAxMiB8ICAwMDEyIHwgMDAwMTIgfFxuLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuLy8gfCBBRCAxMjM0ICB8ICAxMjM0IHwgMzQgfCAgMTIzNCB8ICAxMjM0IHwgMDEyMzQgfFxuLy8gfCBBRCAxMjM0NSB8IDEyMzQ1IHwgNDUgfCAxMjM0NSB8IDEyMzQ1IHwgMTIzNDUgfFxuZXhwb3J0IHZhciBZZWFyUGFyc2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUGFyc2VyKSB7XG4gIF9pbmhlcml0cyhZZWFyUGFyc2VyLCBfUGFyc2VyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFllYXJQYXJzZXIpO1xuXG4gIGZ1bmN0aW9uIFllYXJQYXJzZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFllYXJQYXJzZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmlvcml0eVwiLCAxMzApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbJ1knLCAnUicsICd1JywgJ3cnLCAnSScsICdpJywgJ2UnLCAnYycsICd0JywgJ1QnXSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoWWVhclBhcnNlciwgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgICB2YXIgdmFsdWVDYWxsYmFjayA9IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2soeWVhcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHllYXI6IHllYXIsXG4gICAgICAgICAgaXNUd29EaWdpdFllYXI6IHRva2VuID09PSAneXknXG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHMoNCwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ3lvJzpcbiAgICAgICAgICByZXR1cm4gbWFwVmFsdWUobWF0Y2gub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB1bml0OiAneWVhcidcbiAgICAgICAgICB9KSwgdmFsdWVDYWxsYmFjayk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbWFwVmFsdWUocGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5pc1R3b0RpZ2l0WWVhciB8fCB2YWx1ZS55ZWFyID4gMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChkYXRlLCBmbGFncywgdmFsdWUpIHtcbiAgICAgIHZhciBjdXJyZW50WWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcblxuICAgICAgaWYgKHZhbHVlLmlzVHdvRGlnaXRZZWFyKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkVHdvRGlnaXRZZWFyID0gbm9ybWFsaXplVHdvRGlnaXRZZWFyKHZhbHVlLnllYXIsIGN1cnJlbnRZZWFyKTtcbiAgICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcihub3JtYWxpemVkVHdvRGlnaXRZZWFyLCAwLCAxKTtcbiAgICAgICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICB9XG5cbiAgICAgIHZhciB5ZWFyID0gISgnZXJhJyBpbiBmbGFncykgfHwgZmxhZ3MuZXJhID09PSAxID8gdmFsdWUueWVhciA6IDEgLSB2YWx1ZS55ZWFyO1xuICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCAxKTtcbiAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gWWVhclBhcnNlcjtcbn0oUGFyc2VyKTsiLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuaW1wb3J0IHsgcGFyc2VORGlnaXRzLCBub3JtYWxpemVUd29EaWdpdFllYXIsIG1hcFZhbHVlIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgZ2V0VVRDV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuLy8gTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhclxuZXhwb3J0IHZhciBMb2NhbFdlZWtZZWFyUGFyc2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUGFyc2VyKSB7XG4gIF9pbmhlcml0cyhMb2NhbFdlZWtZZWFyUGFyc2VyLCBfUGFyc2VyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKExvY2FsV2Vla1llYXJQYXJzZXIpO1xuXG4gIGZ1bmN0aW9uIExvY2FsV2Vla1llYXJQYXJzZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExvY2FsV2Vla1llYXJQYXJzZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmlvcml0eVwiLCAxMzApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbJ3knLCAnUicsICd1JywgJ1EnLCAncScsICdNJywgJ0wnLCAnSScsICdkJywgJ0QnLCAnaScsICd0JywgJ1QnXSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTG9jYWxXZWVrWWVhclBhcnNlciwgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgICB2YXIgdmFsdWVDYWxsYmFjayA9IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2soeWVhcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHllYXI6IHllYXIsXG4gICAgICAgICAgaXNUd29EaWdpdFllYXI6IHRva2VuID09PSAnWVknXG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIGNhc2UgJ1knOlxuICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHMoNCwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ1lvJzpcbiAgICAgICAgICByZXR1cm4gbWFwVmFsdWUobWF0Y2gub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB1bml0OiAneWVhcidcbiAgICAgICAgICB9KSwgdmFsdWVDYWxsYmFjayk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbWFwVmFsdWUocGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5pc1R3b0RpZ2l0WWVhciB8fCB2YWx1ZS55ZWFyID4gMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChkYXRlLCBmbGFncywgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBjdXJyZW50WWVhciA9IGdldFVUQ1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAodmFsdWUuaXNUd29EaWdpdFllYXIpIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRUd29EaWdpdFllYXIgPSBub3JtYWxpemVUd29EaWdpdFllYXIodmFsdWUueWVhciwgY3VycmVudFllYXIpO1xuICAgICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKG5vcm1hbGl6ZWRUd29EaWdpdFllYXIsIDAsIG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgICAgICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0T2ZVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICB2YXIgeWVhciA9ICEoJ2VyYScgaW4gZmxhZ3MpIHx8IGZsYWdzLmVyYSA9PT0gMSA/IHZhbHVlLnllYXIgOiAxIC0gdmFsdWUueWVhcjtcbiAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpO1xuICAgICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgIHJldHVybiBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTG9jYWxXZWVrWWVhclBhcnNlcjtcbn0oUGFyc2VyKTsiLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuaW1wb3J0IHsgcGFyc2VORGlnaXRzU2lnbmVkIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uLy4uLy4uL19saWIvc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjsgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcblxuZXhwb3J0IHZhciBJU09XZWVrWWVhclBhcnNlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1BhcnNlcikge1xuICBfaW5oZXJpdHMoSVNPV2Vla1llYXJQYXJzZXIsIF9QYXJzZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoSVNPV2Vla1llYXJQYXJzZXIpO1xuXG4gIGZ1bmN0aW9uIElTT1dlZWtZZWFyUGFyc2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJU09XZWVrWWVhclBhcnNlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInByaW9yaXR5XCIsIDEzMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFsnRycsICd5JywgJ1knLCAndScsICdRJywgJ3EnLCAnTScsICdMJywgJ3cnLCAnZCcsICdEJywgJ2UnLCAnYycsICd0JywgJ1QnXSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoSVNPV2Vla1llYXJQYXJzZXIsIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuKSB7XG4gICAgICBpZiAodG9rZW4gPT09ICdSJykge1xuICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzU2lnbmVkKDQsIGRhdGVTdHJpbmcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VORGlnaXRzU2lnbmVkKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXQoX2RhdGUsIF9mbGFncywgdmFsdWUpIHtcbiAgICAgIHZhciBmaXJzdFdlZWtPZlllYXIgPSBuZXcgRGF0ZSgwKTtcbiAgICAgIGZpcnN0V2Vla09mWWVhci5zZXRVVENGdWxsWWVhcih2YWx1ZSwgMCwgNCk7XG4gICAgICBmaXJzdFdlZWtPZlllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gc3RhcnRPZlVUQ0lTT1dlZWsoZmlyc3RXZWVrT2ZZZWFyKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gSVNPV2Vla1llYXJQYXJzZXI7XG59KFBhcnNlcik7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcbmltcG9ydCB7IHBhcnNlTkRpZ2l0c1NpZ25lZCB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuZXhwb3J0IHZhciBFeHRlbmRlZFllYXJQYXJzZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QYXJzZXIpIHtcbiAgX2luaGVyaXRzKEV4dGVuZGVkWWVhclBhcnNlciwgX1BhcnNlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFeHRlbmRlZFllYXJQYXJzZXIpO1xuXG4gIGZ1bmN0aW9uIEV4dGVuZGVkWWVhclBhcnNlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXh0ZW5kZWRZZWFyUGFyc2VyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicHJpb3JpdHlcIiwgMTMwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbmNvbXBhdGlibGVUb2tlbnNcIiwgWydHJywgJ3knLCAnWScsICdSJywgJ3cnLCAnSScsICdpJywgJ2UnLCAnYycsICd0JywgJ1QnXSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXh0ZW5kZWRZZWFyUGFyc2VyLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbikge1xuICAgICAgaWYgKHRva2VuID09PSAndScpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0c1NpZ25lZCg0LCBkYXRlU3RyaW5nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0c1NpZ25lZCh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0KGRhdGUsIF9mbGFncywgdmFsdWUpIHtcbiAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIodmFsdWUsIDAsIDEpO1xuICAgICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFeHRlbmRlZFllYXJQYXJzZXI7XG59KFBhcnNlcik7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcbmltcG9ydCB7IHBhcnNlTkRpZ2l0cyB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuZXhwb3J0IHZhciBRdWFydGVyUGFyc2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUGFyc2VyKSB7XG4gIF9pbmhlcml0cyhRdWFydGVyUGFyc2VyLCBfUGFyc2VyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFF1YXJ0ZXJQYXJzZXIpO1xuXG4gIGZ1bmN0aW9uIFF1YXJ0ZXJQYXJzZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFF1YXJ0ZXJQYXJzZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmlvcml0eVwiLCAxMjApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbJ1knLCAnUicsICdxJywgJ00nLCAnTCcsICd3JywgJ0knLCAnZCcsICdEJywgJ2knLCAnZScsICdjJywgJ3QnLCAnVCddKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhRdWFydGVyUGFyc2VyLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gpIHtcbiAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgICBjYXNlICdRJzpcbiAgICAgICAgY2FzZSAnUVEnOlxuICAgICAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpO1xuICAgICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcblxuICAgICAgICBjYXNlICdRbyc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG5cbiAgICAgICAgY2FzZSAnUVFRJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gucXVhcnRlcihkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLnF1YXJ0ZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuXG4gICAgICAgIGNhc2UgJ1FRUVFRJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gucXVhcnRlcihkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cblxuICAgICAgICBjYXNlICdRUVFRJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gucXVhcnRlcihkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2gucXVhcnRlcihkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLnF1YXJ0ZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID49IDEgJiYgdmFsdWUgPD0gNDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlKSB7XG4gICAgICBkYXRlLnNldFVUQ01vbnRoKCh2YWx1ZSAtIDEpICogMywgMSk7XG4gICAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFF1YXJ0ZXJQYXJzZXI7XG59KFBhcnNlcik7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcbmltcG9ydCB7IHBhcnNlTkRpZ2l0cyB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuZXhwb3J0IHZhciBTdGFuZEFsb25lUXVhcnRlclBhcnNlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1BhcnNlcikge1xuICBfaW5oZXJpdHMoU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIsIF9QYXJzZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIpO1xuXG4gIGZ1bmN0aW9uIFN0YW5kQWxvbmVRdWFydGVyUGFyc2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdGFuZEFsb25lUXVhcnRlclBhcnNlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInByaW9yaXR5XCIsIDEyMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFsnWScsICdSJywgJ1EnLCAnTScsICdMJywgJ3cnLCAnSScsICdkJywgJ0QnLCAnaScsICdlJywgJ2MnLCAndCcsICdUJ10pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN0YW5kQWxvbmVRdWFydGVyUGFyc2VyLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gpIHtcbiAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgICBjYXNlICdxJzpcbiAgICAgICAgY2FzZSAncXEnOlxuICAgICAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpO1xuICAgICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcblxuICAgICAgICBjYXNlICdxbyc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG5cbiAgICAgICAgY2FzZSAncXFxJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gucXVhcnRlcihkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLnF1YXJ0ZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuXG4gICAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gucXVhcnRlcihkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cblxuICAgICAgICBjYXNlICdxcXFxJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gucXVhcnRlcihkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSkgfHwgbWF0Y2gucXVhcnRlcihkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLnF1YXJ0ZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID49IDEgJiYgdmFsdWUgPD0gNDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlKSB7XG4gICAgICBkYXRlLnNldFVUQ01vbnRoKCh2YWx1ZSAtIDEpICogMywgMSk7XG4gICAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN0YW5kQWxvbmVRdWFydGVyUGFyc2VyO1xufShQYXJzZXIpOyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgeyBtYXBWYWx1ZSwgcGFyc2VORGlnaXRzLCBwYXJzZU51bWVyaWNQYXR0ZXJuIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBudW1lcmljUGF0dGVybnMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5leHBvcnQgdmFyIE1vbnRoUGFyc2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUGFyc2VyKSB7XG4gIF9pbmhlcml0cyhNb250aFBhcnNlciwgX1BhcnNlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihNb250aFBhcnNlcik7XG5cbiAgZnVuY3Rpb24gTW9udGhQYXJzZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1vbnRoUGFyc2VyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFsnWScsICdSJywgJ3EnLCAnUScsICdMJywgJ3cnLCAnSScsICdEJywgJ2knLCAnZScsICdjJywgJ3QnLCAnVCddKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmlvcml0eVwiLCAxMTApO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE1vbnRoUGFyc2VyLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gpIHtcbiAgICAgIHZhciB2YWx1ZUNhbGxiYWNrID0gZnVuY3Rpb24gdmFsdWVDYWxsYmFjayh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgLSAxO1xuICAgICAgfTtcblxuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICAvLyAxLCAyLCAuLi4sIDEyXG4gICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5tb250aCwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spO1xuICAgICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcblxuICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cygyLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7XG4gICAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcblxuICAgICAgICBjYXNlICdNbyc6XG4gICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICAgIH0pLCB2YWx1ZUNhbGxiYWNrKTtcbiAgICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG5cbiAgICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gubW9udGgoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5tb250aChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gSiwgRiwgLi4uLCBEXG5cbiAgICAgICAgY2FzZSAnTU1NTU0nOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5tb250aChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcblxuICAgICAgICBjYXNlICdNTU1NJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gubW9udGgoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLm1vbnRoKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2gubW9udGgoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID49IDAgJiYgdmFsdWUgPD0gMTE7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSkge1xuICAgICAgZGF0ZS5zZXRVVENNb250aCh2YWx1ZSwgMSk7XG4gICAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE1vbnRoUGFyc2VyO1xufShQYXJzZXIpOyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBudW1lcmljUGF0dGVybnMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZU51bWVyaWNQYXR0ZXJuLCBwYXJzZU5EaWdpdHMsIG1hcFZhbHVlIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5leHBvcnQgdmFyIFN0YW5kQWxvbmVNb250aFBhcnNlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1BhcnNlcikge1xuICBfaW5oZXJpdHMoU3RhbmRBbG9uZU1vbnRoUGFyc2VyLCBfUGFyc2VyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN0YW5kQWxvbmVNb250aFBhcnNlcik7XG5cbiAgZnVuY3Rpb24gU3RhbmRBbG9uZU1vbnRoUGFyc2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdGFuZEFsb25lTW9udGhQYXJzZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmlvcml0eVwiLCAxMTApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbJ1knLCAnUicsICdxJywgJ1EnLCAnTScsICd3JywgJ0knLCAnRCcsICdpJywgJ2UnLCAnYycsICd0JywgJ1QnXSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3RhbmRBbG9uZU1vbnRoUGFyc2VyLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gpIHtcbiAgICAgIHZhciB2YWx1ZUNhbGxiYWNrID0gZnVuY3Rpb24gdmFsdWVDYWxsYmFjayh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgLSAxO1xuICAgICAgfTtcblxuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICAvLyAxLCAyLCAuLi4sIDEyXG4gICAgICAgIGNhc2UgJ0wnOlxuICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5tb250aCwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spO1xuICAgICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcblxuICAgICAgICBjYXNlICdMTCc6XG4gICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cygyLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7XG4gICAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcblxuICAgICAgICBjYXNlICdMbyc6XG4gICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICAgIH0pLCB2YWx1ZUNhbGxiYWNrKTtcbiAgICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG5cbiAgICAgICAgY2FzZSAnTExMJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gubW9udGgoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICB9KSB8fCBtYXRjaC5tb250aChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gSiwgRiwgLi4uLCBEXG5cbiAgICAgICAgY2FzZSAnTExMTEwnOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5tb250aChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcblxuICAgICAgICBjYXNlICdMTExMJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gubW9udGgoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLm1vbnRoKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSkgfHwgbWF0Y2gubW9udGgoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID49IDAgJiYgdmFsdWUgPD0gMTE7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSkge1xuICAgICAgZGF0ZS5zZXRVVENNb250aCh2YWx1ZSwgMSk7XG4gICAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN0YW5kQWxvbmVNb250aFBhcnNlcjtcbn0oUGFyc2VyKTsiLCJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ1dlZWsgZnJvbSBcIi4uL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0VVRDV2VlayhkaXJ0eURhdGUsIGRpcnR5V2Vlaywgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHdlZWsgPSB0b0ludGVnZXIoZGlydHlXZWVrKTtcbiAgdmFyIGRpZmYgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpIC0gd2VlaztcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZiAqIDcpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuaW1wb3J0IHsgbnVtZXJpY1BhdHRlcm5zIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcGFyc2VOdW1lcmljUGF0dGVybiwgcGFyc2VORGlnaXRzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgc2V0VVRDV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9zZXRVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uLy4uLy4uL19saWIvc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjsgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG5cbmV4cG9ydCB2YXIgTG9jYWxXZWVrUGFyc2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUGFyc2VyKSB7XG4gIF9pbmhlcml0cyhMb2NhbFdlZWtQYXJzZXIsIF9QYXJzZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoTG9jYWxXZWVrUGFyc2VyKTtcblxuICBmdW5jdGlvbiBMb2NhbFdlZWtQYXJzZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExvY2FsV2Vla1BhcnNlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInByaW9yaXR5XCIsIDEwMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFsneScsICdSJywgJ3UnLCAncScsICdRJywgJ00nLCAnTCcsICdJJywgJ2QnLCAnRCcsICdpJywgJ3QnLCAnVCddKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhMb2NhbFdlZWtQYXJzZXIsIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaCkge1xuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMud2VlaywgZGF0ZVN0cmluZyk7XG5cbiAgICAgICAgY2FzZSAnd28nOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+PSAxICYmIHZhbHVlIDw9IDUzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0KGRhdGUsIF9mbGFncywgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBzdGFydE9mVVRDV2VlayhzZXRVVENXZWVrKGRhdGUsIHZhbHVlLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIExvY2FsV2Vla1BhcnNlcjtcbn0oUGFyc2VyKTsiLCJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ0lTT1dlZWsgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0VVRDSVNPV2VlayhkaXJ0eURhdGUsIGRpcnR5SVNPV2Vlaykge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGlzb1dlZWsgPSB0b0ludGVnZXIoZGlydHlJU09XZWVrKTtcbiAgdmFyIGRpZmYgPSBnZXRVVENJU09XZWVrKGRhdGUpIC0gaXNvV2VlaztcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZiAqIDcpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuaW1wb3J0IHsgbnVtZXJpY1BhdHRlcm5zIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcGFyc2VOdW1lcmljUGF0dGVybiwgcGFyc2VORGlnaXRzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgc2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9zZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uLy4uLy4uL19saWIvc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjsgLy8gSVNPIHdlZWsgb2YgeWVhclxuXG5leHBvcnQgdmFyIElTT1dlZWtQYXJzZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QYXJzZXIpIHtcbiAgX2luaGVyaXRzKElTT1dlZWtQYXJzZXIsIF9QYXJzZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoSVNPV2Vla1BhcnNlcik7XG5cbiAgZnVuY3Rpb24gSVNPV2Vla1BhcnNlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSVNPV2Vla1BhcnNlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInByaW9yaXR5XCIsIDEwMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFsneScsICdZJywgJ3UnLCAncScsICdRJywgJ00nLCAnTCcsICd3JywgJ2QnLCAnRCcsICdlJywgJ2MnLCAndCcsICdUJ10pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKElTT1dlZWtQYXJzZXIsIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaCkge1xuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICBjYXNlICdJJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMud2VlaywgZGF0ZVN0cmluZyk7XG5cbiAgICAgICAgY2FzZSAnSW8nOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+PSAxICYmIHZhbHVlIDw9IDUzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0KGRhdGUsIF9mbGFncywgdmFsdWUpIHtcbiAgICAgIHJldHVybiBzdGFydE9mVVRDSVNPV2VlayhzZXRVVENJU09XZWVrKGRhdGUsIHZhbHVlKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIElTT1dlZWtQYXJzZXI7XG59KFBhcnNlcik7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmltcG9ydCB7IGlzTGVhcFllYXJJbmRleCwgcGFyc2VORGlnaXRzLCBwYXJzZU51bWVyaWNQYXR0ZXJuIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBudW1lcmljUGF0dGVybnMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG52YXIgREFZU19JTl9NT05USCA9IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTtcbnZhciBEQVlTX0lOX01PTlRIX0xFQVBfWUVBUiA9IFszMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTsgLy8gRGF5IG9mIHRoZSBtb250aFxuXG5leHBvcnQgdmFyIERhdGVQYXJzZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QYXJzZXIpIHtcbiAgX2luaGVyaXRzKERhdGVQYXJzZXIsIF9QYXJzZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRGF0ZVBhcnNlcik7XG5cbiAgZnVuY3Rpb24gRGF0ZVBhcnNlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGF0ZVBhcnNlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInByaW9yaXR5XCIsIDkwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdWJQcmlvcml0eVwiLCAxKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbmNvbXBhdGlibGVUb2tlbnNcIiwgWydZJywgJ1InLCAncScsICdRJywgJ3cnLCAnSScsICdEJywgJ2knLCAnZScsICdjJywgJ3QnLCAnVCddKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhEYXRlUGFyc2VyLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gpIHtcbiAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLmRhdGUsIGRhdGVTdHJpbmcpO1xuXG4gICAgICAgIGNhc2UgJ2RvJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB1bml0OiAnZGF0ZSdcbiAgICAgICAgICB9KTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidmFsaWRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsaWRhdGUoZGF0ZSwgdmFsdWUpIHtcbiAgICAgIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgdmFyIGlzTGVhcFllYXIgPSBpc0xlYXBZZWFySW5kZXgoeWVhcik7XG4gICAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG5cbiAgICAgIGlmIChpc0xlYXBZZWFyKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA+PSAxICYmIHZhbHVlIDw9IERBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSW21vbnRoXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA+PSAxICYmIHZhbHVlIDw9IERBWVNfSU5fTU9OVEhbbW9udGhdO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0KGRhdGUsIF9mbGFncywgdmFsdWUpIHtcbiAgICAgIGRhdGUuc2V0VVRDRGF0ZSh2YWx1ZSk7XG4gICAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIERhdGVQYXJzZXI7XG59KFBhcnNlcik7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcbmltcG9ydCB7IG51bWVyaWNQYXR0ZXJucyB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHBhcnNlTnVtZXJpY1BhdHRlcm4sIHBhcnNlTkRpZ2l0cywgaXNMZWFwWWVhckluZGV4IH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5leHBvcnQgdmFyIERheU9mWWVhclBhcnNlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1BhcnNlcikge1xuICBfaW5oZXJpdHMoRGF5T2ZZZWFyUGFyc2VyLCBfUGFyc2VyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKERheU9mWWVhclBhcnNlcik7XG5cbiAgZnVuY3Rpb24gRGF5T2ZZZWFyUGFyc2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEYXlPZlllYXJQYXJzZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmlvcml0eVwiLCA5MCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3VicHJpb3JpdHlcIiwgMSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFsnWScsICdSJywgJ3EnLCAnUScsICdNJywgJ0wnLCAndycsICdJJywgJ2QnLCAnRScsICdpJywgJ2UnLCAnYycsICd0JywgJ1QnXSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRGF5T2ZZZWFyUGFyc2VyLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gpIHtcbiAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgIGNhc2UgJ0REJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuZGF5T2ZZZWFyLCBkYXRlU3RyaW5nKTtcblxuICAgICAgICBjYXNlICdEbyc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbGlkYXRlKGRhdGUsIHZhbHVlKSB7XG4gICAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgIHZhciBpc0xlYXBZZWFyID0gaXNMZWFwWWVhckluZGV4KHllYXIpO1xuXG4gICAgICBpZiAoaXNMZWFwWWVhcikge1xuICAgICAgICByZXR1cm4gdmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSAzNjY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSAzNjU7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSkge1xuICAgICAgZGF0ZS5zZXRVVENNb250aCgwLCB2YWx1ZSk7XG4gICAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIERheU9mWWVhclBhcnNlcjtcbn0oUGFyc2VyKTsiLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0VVRDRGF5KGRpcnR5RGF0ZSwgZGlydHlEYXksIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuXG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApOyAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuXG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSB0b0ludGVnZXIoZGlydHlEYXkpO1xuICB2YXIgY3VycmVudERheSA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIHZhciByZW1haW5kZXIgPSBkYXkgJSA3O1xuICB2YXIgZGF5SW5kZXggPSAocmVtYWluZGVyICsgNykgJSA3O1xuICB2YXIgZGlmZiA9IChkYXlJbmRleCA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIGN1cnJlbnREYXk7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIGRpZmYpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuaW1wb3J0IHNldFVUQ0RheSBmcm9tIFwiLi4vLi4vLi4vX2xpYi9zZXRVVENEYXkvaW5kZXguanNcIjsgLy8gRGF5IG9mIHdlZWtcblxuZXhwb3J0IHZhciBEYXlQYXJzZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QYXJzZXIpIHtcbiAgX2luaGVyaXRzKERheVBhcnNlciwgX1BhcnNlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihEYXlQYXJzZXIpO1xuXG4gIGZ1bmN0aW9uIERheVBhcnNlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGF5UGFyc2VyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicHJpb3JpdHlcIiwgOTApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbJ0QnLCAnaScsICdlJywgJ2MnLCAndCcsICdUJ10pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKERheVBhcnNlciwgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIC8vIFR1ZVxuICAgICAgICBjYXNlICdFJzpcbiAgICAgICAgY2FzZSAnRUUnOlxuICAgICAgICBjYXNlICdFRUUnOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIFRcblxuICAgICAgICBjYXNlICdFRUVFRSc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLmRheShkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gVHVcblxuICAgICAgICBjYXNlICdFRUVFRUUnOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIFR1ZXNkYXlcblxuICAgICAgICBjYXNlICdFRUVFJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID49IDAgJiYgdmFsdWUgPD0gNjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICBkYXRlID0gc2V0VVRDRGF5KGRhdGUsIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRGF5UGFyc2VyO1xufShQYXJzZXIpOyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBtYXBWYWx1ZSwgcGFyc2VORGlnaXRzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgc2V0VVRDRGF5IGZyb20gXCIuLi8uLi8uLi9fbGliL3NldFVUQ0RheS9pbmRleC5qc1wiOyAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuXG5leHBvcnQgdmFyIExvY2FsRGF5UGFyc2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUGFyc2VyKSB7XG4gIF9pbmhlcml0cyhMb2NhbERheVBhcnNlciwgX1BhcnNlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihMb2NhbERheVBhcnNlcik7XG5cbiAgZnVuY3Rpb24gTG9jYWxEYXlQYXJzZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExvY2FsRGF5UGFyc2VyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicHJpb3JpdHlcIiwgOTApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbJ3knLCAnUicsICd1JywgJ3EnLCAnUScsICdNJywgJ0wnLCAnSScsICdkJywgJ0QnLCAnRScsICdpJywgJ2MnLCAndCcsICdUJ10pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKExvY2FsRGF5UGFyc2VyLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gsIG9wdGlvbnMpIHtcbiAgICAgIHZhciB2YWx1ZUNhbGxiYWNrID0gZnVuY3Rpb24gdmFsdWVDYWxsYmFjayh2YWx1ZSkge1xuICAgICAgICB2YXIgd2hvbGVXZWVrRGF5cyA9IE1hdGguZmxvb3IoKHZhbHVlIC0gMSkgLyA3KSAqIDc7XG4gICAgICAgIHJldHVybiAodmFsdWUgKyBvcHRpb25zLndlZWtTdGFydHNPbiArIDYpICUgNyArIHdob2xlV2Vla0RheXM7XG4gICAgICB9O1xuXG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIC8vIDNcbiAgICAgICAgY2FzZSAnZSc6XG4gICAgICAgIGNhc2UgJ2VlJzpcbiAgICAgICAgICAvLyAwM1xuICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7XG4gICAgICAgIC8vIDNyZFxuXG4gICAgICAgIGNhc2UgJ2VvJzpcbiAgICAgICAgICByZXR1cm4gbWFwVmFsdWUobWF0Y2gub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICAgIH0pLCB2YWx1ZUNhbGxiYWNrKTtcbiAgICAgICAgLy8gVHVlXG5cbiAgICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBUXG5cbiAgICAgICAgY2FzZSAnZWVlZWUnOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIFR1XG5cbiAgICAgICAgY2FzZSAnZWVlZWVlJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBUdWVzZGF5XG5cbiAgICAgICAgY2FzZSAnZWVlZSc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLmRheShkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDY7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgZGF0ZSA9IHNldFVUQ0RheShkYXRlLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIExvY2FsRGF5UGFyc2VyO1xufShQYXJzZXIpOyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBtYXBWYWx1ZSwgcGFyc2VORGlnaXRzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgc2V0VVRDRGF5IGZyb20gXCIuLi8uLi8uLi9fbGliL3NldFVUQ0RheS9pbmRleC5qc1wiOyAvLyBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2Vla1xuXG5leHBvcnQgdmFyIFN0YW5kQWxvbmVMb2NhbERheVBhcnNlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1BhcnNlcikge1xuICBfaW5oZXJpdHMoU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyLCBfUGFyc2VyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN0YW5kQWxvbmVMb2NhbERheVBhcnNlcik7XG5cbiAgZnVuY3Rpb24gU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdGFuZEFsb25lTG9jYWxEYXlQYXJzZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmlvcml0eVwiLCA5MCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFsneScsICdSJywgJ3UnLCAncScsICdRJywgJ00nLCAnTCcsICdJJywgJ2QnLCAnRCcsICdFJywgJ2knLCAnZScsICd0JywgJ1QnXSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gsIG9wdGlvbnMpIHtcbiAgICAgIHZhciB2YWx1ZUNhbGxiYWNrID0gZnVuY3Rpb24gdmFsdWVDYWxsYmFjayh2YWx1ZSkge1xuICAgICAgICB2YXIgd2hvbGVXZWVrRGF5cyA9IE1hdGguZmxvb3IoKHZhbHVlIC0gMSkgLyA3KSAqIDc7XG4gICAgICAgIHJldHVybiAodmFsdWUgKyBvcHRpb25zLndlZWtTdGFydHNPbiArIDYpICUgNyArIHdob2xlV2Vla0RheXM7XG4gICAgICB9O1xuXG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIC8vIDNcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgICAvLyAwM1xuICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7XG4gICAgICAgIC8vIDNyZFxuXG4gICAgICAgIGNhc2UgJ2NvJzpcbiAgICAgICAgICByZXR1cm4gbWFwVmFsdWUobWF0Y2gub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICAgIH0pLCB2YWx1ZUNhbGxiYWNrKTtcbiAgICAgICAgLy8gVHVlXG5cbiAgICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBUXG5cbiAgICAgICAgY2FzZSAnY2NjY2MnOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIFR1XG5cbiAgICAgICAgY2FzZSAnY2NjY2NjJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBUdWVzZGF5XG5cbiAgICAgICAgY2FzZSAnY2NjYyc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLmRheShkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDY7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgZGF0ZSA9IHNldFVUQ0RheShkYXRlLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFN0YW5kQWxvbmVMb2NhbERheVBhcnNlcjtcbn0oUGFyc2VyKTsiLCJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXRVVENJU09EYXkoZGlydHlEYXRlLCBkaXJ0eURheSkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGRheSA9IHRvSW50ZWdlcihkaXJ0eURheSk7XG5cbiAgaWYgKGRheSAlIDcgPT09IDApIHtcbiAgICBkYXkgPSBkYXkgLSA3O1xuICB9XG5cbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBjdXJyZW50RGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIHJlbWFpbmRlciA9IGRheSAlIDc7XG4gIHZhciBkYXlJbmRleCA9IChyZW1haW5kZXIgKyA3KSAlIDc7XG4gIHZhciBkaWZmID0gKGRheUluZGV4IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gY3VycmVudERheTtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgZGlmZik7XG4gIHJldHVybiBkYXRlO1xufSIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBtYXBWYWx1ZSwgcGFyc2VORGlnaXRzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgc2V0VVRDSVNPRGF5IGZyb20gXCIuLi8uLi8uLi9fbGliL3NldFVUQ0lTT0RheS9pbmRleC5qc1wiOyAvLyBJU08gZGF5IG9mIHdlZWtcblxuZXhwb3J0IHZhciBJU09EYXlQYXJzZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QYXJzZXIpIHtcbiAgX2luaGVyaXRzKElTT0RheVBhcnNlciwgX1BhcnNlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihJU09EYXlQYXJzZXIpO1xuXG4gIGZ1bmN0aW9uIElTT0RheVBhcnNlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSVNPRGF5UGFyc2VyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicHJpb3JpdHlcIiwgOTApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbJ3knLCAnWScsICd1JywgJ3EnLCAnUScsICdNJywgJ0wnLCAndycsICdkJywgJ0QnLCAnRScsICdlJywgJ2MnLCAndCcsICdUJ10pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKElTT0RheVBhcnNlciwgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgICB2YXIgdmFsdWVDYWxsYmFjayA9IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIDc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuXG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIC8vIDJcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJ2lpJzpcbiAgICAgICAgICAvLyAwMlxuICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTtcbiAgICAgICAgLy8gMm5kXG5cbiAgICAgICAgY2FzZSAnaW8nOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIFR1ZVxuXG4gICAgICAgIGNhc2UgJ2lpaSc6XG4gICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKG1hdGNoLmRheShkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheShkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheShkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSwgdmFsdWVDYWxsYmFjayk7XG4gICAgICAgIC8vIFRcblxuICAgICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKG1hdGNoLmRheShkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSwgdmFsdWVDYWxsYmFjayk7XG4gICAgICAgIC8vIFR1XG5cbiAgICAgICAgY2FzZSAnaWlpaWlpJzpcbiAgICAgICAgICByZXR1cm4gbWFwVmFsdWUobWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5KGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pLCB2YWx1ZUNhbGxiYWNrKTtcbiAgICAgICAgLy8gVHVlc2RheVxuXG4gICAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShtYXRjaC5kYXkoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheShkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheShkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheShkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSwgdmFsdWVDYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID49IDEgJiYgdmFsdWUgPD0gNztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlKSB7XG4gICAgICBkYXRlID0gc2V0VVRDSVNPRGF5KGRhdGUsIHZhbHVlKTtcbiAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gSVNPRGF5UGFyc2VyO1xufShQYXJzZXIpOyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBkYXlQZXJpb2RFbnVtVG9Ib3VycyB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuZXhwb3J0IHZhciBBTVBNUGFyc2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUGFyc2VyKSB7XG4gIF9pbmhlcml0cyhBTVBNUGFyc2VyLCBfUGFyc2VyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEFNUE1QYXJzZXIpO1xuXG4gIGZ1bmN0aW9uIEFNUE1QYXJzZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFNUE1QYXJzZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmlvcml0eVwiLCA4MCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFsnYicsICdCJywgJ0gnLCAnaycsICd0JywgJ1QnXSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQU1QTVBhcnNlciwgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIGNhc2UgJ2EnOlxuICAgICAgICBjYXNlICdhYSc6XG4gICAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdhYWFhJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXlQZXJpb2QoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXlQZXJpb2QoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSkge1xuICAgICAgZGF0ZS5zZXRVVENIb3VycyhkYXlQZXJpb2RFbnVtVG9Ib3Vycyh2YWx1ZSksIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEFNUE1QYXJzZXI7XG59KFBhcnNlcik7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcbmltcG9ydCB7IGRheVBlcmlvZEVudW1Ub0hvdXJzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5leHBvcnQgdmFyIEFNUE1NaWRuaWdodFBhcnNlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1BhcnNlcikge1xuICBfaW5oZXJpdHMoQU1QTU1pZG5pZ2h0UGFyc2VyLCBfUGFyc2VyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEFNUE1NaWRuaWdodFBhcnNlcik7XG5cbiAgZnVuY3Rpb24gQU1QTU1pZG5pZ2h0UGFyc2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBBTVBNTWlkbmlnaHRQYXJzZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmlvcml0eVwiLCA4MCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFsnYScsICdCJywgJ0gnLCAnaycsICd0JywgJ1QnXSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQU1QTU1pZG5pZ2h0UGFyc2VyLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gpIHtcbiAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgY2FzZSAnYic6XG4gICAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgY2FzZSAnYmJiJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSkgfHwgbWF0Y2guZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ2JiYmJiJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ2JiYmInOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBtYXRjaC5kYXlQZXJpb2QoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlKSB7XG4gICAgICBkYXRlLnNldFVUQ0hvdXJzKGRheVBlcmlvZEVudW1Ub0hvdXJzKHZhbHVlKSwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQU1QTU1pZG5pZ2h0UGFyc2VyO1xufShQYXJzZXIpOyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBkYXlQZXJpb2RFbnVtVG9Ib3VycyB9IGZyb20gXCIuLi91dGlscy5qc1wiOyAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG5cbmV4cG9ydCB2YXIgRGF5UGVyaW9kUGFyc2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUGFyc2VyKSB7XG4gIF9pbmhlcml0cyhEYXlQZXJpb2RQYXJzZXIsIF9QYXJzZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRGF5UGVyaW9kUGFyc2VyKTtcblxuICBmdW5jdGlvbiBEYXlQZXJpb2RQYXJzZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERheVBlcmlvZFBhcnNlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInByaW9yaXR5XCIsIDgwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbmNvbXBhdGlibGVUb2tlbnNcIiwgWydhJywgJ2InLCAndCcsICdUJ10pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKERheVBlcmlvZFBhcnNlciwgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIGNhc2UgJ0InOlxuICAgICAgICBjYXNlICdCQic6XG4gICAgICAgIGNhc2UgJ0JCQic6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICAgIH0pIHx8IG1hdGNoLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdCQkJCJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbWF0Y2guZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXlQZXJpb2QoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgICB9KSB8fCBtYXRjaC5kYXlQZXJpb2QoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSkge1xuICAgICAgZGF0ZS5zZXRVVENIb3VycyhkYXlQZXJpb2RFbnVtVG9Ib3Vycyh2YWx1ZSksIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIERheVBlcmlvZFBhcnNlcjtcbn0oUGFyc2VyKTsiLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuaW1wb3J0IHsgbnVtZXJpY1BhdHRlcm5zIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcGFyc2VOdW1lcmljUGF0dGVybiwgcGFyc2VORGlnaXRzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5leHBvcnQgdmFyIEhvdXIxdG8xMlBhcnNlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1BhcnNlcikge1xuICBfaW5oZXJpdHMoSG91cjF0bzEyUGFyc2VyLCBfUGFyc2VyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEhvdXIxdG8xMlBhcnNlcik7XG5cbiAgZnVuY3Rpb24gSG91cjF0bzEyUGFyc2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBIb3VyMXRvMTJQYXJzZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmlvcml0eVwiLCA3MCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFsnSCcsICdLJywgJ2snLCAndCcsICdUJ10pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEhvdXIxdG8xMlBhcnNlciwgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5ob3VyMTJoLCBkYXRlU3RyaW5nKTtcblxuICAgICAgICBjYXNlICdobyc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID49IDEgJiYgdmFsdWUgPD0gMTI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSkge1xuICAgICAgdmFyIGlzUE0gPSBkYXRlLmdldFVUQ0hvdXJzKCkgPj0gMTI7XG5cbiAgICAgIGlmIChpc1BNICYmIHZhbHVlIDwgMTIpIHtcbiAgICAgICAgZGF0ZS5zZXRVVENIb3Vycyh2YWx1ZSArIDEyLCAwLCAwLCAwKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzUE0gJiYgdmFsdWUgPT09IDEyKSB7XG4gICAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRlLnNldFVUQ0hvdXJzKHZhbHVlLCAwLCAwLCAwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEhvdXIxdG8xMlBhcnNlcjtcbn0oUGFyc2VyKTsiLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuaW1wb3J0IHsgbnVtZXJpY1BhdHRlcm5zIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcGFyc2VOdW1lcmljUGF0dGVybiwgcGFyc2VORGlnaXRzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5leHBvcnQgdmFyIEhvdXIwdG8yM1BhcnNlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1BhcnNlcikge1xuICBfaW5oZXJpdHMoSG91cjB0bzIzUGFyc2VyLCBfUGFyc2VyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEhvdXIwdG8yM1BhcnNlcik7XG5cbiAgZnVuY3Rpb24gSG91cjB0bzIzUGFyc2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBIb3VyMHRvMjNQYXJzZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmlvcml0eVwiLCA3MCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFsnYScsICdiJywgJ2gnLCAnSycsICdrJywgJ3QnLCAnVCddKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhIb3VyMHRvMjNQYXJzZXIsIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaCkge1xuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICBjYXNlICdIJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuaG91cjIzaCwgZGF0ZVN0cmluZyk7XG5cbiAgICAgICAgY2FzZSAnSG8nOlxuICAgICAgICAgIHJldHVybiBtYXRjaC5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHtcbiAgICAgICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDIzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0KGRhdGUsIF9mbGFncywgdmFsdWUpIHtcbiAgICAgIGRhdGUuc2V0VVRDSG91cnModmFsdWUsIDAsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEhvdXIwdG8yM1BhcnNlcjtcbn0oUGFyc2VyKTsiLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuaW1wb3J0IHsgbnVtZXJpY1BhdHRlcm5zIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcGFyc2VOdW1lcmljUGF0dGVybiwgcGFyc2VORGlnaXRzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5leHBvcnQgdmFyIEhvdXIwVG8xMVBhcnNlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1BhcnNlcikge1xuICBfaW5oZXJpdHMoSG91cjBUbzExUGFyc2VyLCBfUGFyc2VyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEhvdXIwVG8xMVBhcnNlcik7XG5cbiAgZnVuY3Rpb24gSG91cjBUbzExUGFyc2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBIb3VyMFRvMTFQYXJzZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmlvcml0eVwiLCA3MCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFsnaCcsICdIJywgJ2snLCAndCcsICdUJ10pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEhvdXIwVG8xMVBhcnNlciwgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIGNhc2UgJ0snOlxuICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5ob3VyMTFoLCBkYXRlU3RyaW5nKTtcblxuICAgICAgICBjYXNlICdLbyc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID49IDAgJiYgdmFsdWUgPD0gMTE7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSkge1xuICAgICAgdmFyIGlzUE0gPSBkYXRlLmdldFVUQ0hvdXJzKCkgPj0gMTI7XG5cbiAgICAgIGlmIChpc1BNICYmIHZhbHVlIDwgMTIpIHtcbiAgICAgICAgZGF0ZS5zZXRVVENIb3Vycyh2YWx1ZSArIDEyLCAwLCAwLCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGUuc2V0VVRDSG91cnModmFsdWUsIDAsIDAsIDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gSG91cjBUbzExUGFyc2VyO1xufShQYXJzZXIpOyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBudW1lcmljUGF0dGVybnMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZU51bWVyaWNQYXR0ZXJuLCBwYXJzZU5EaWdpdHMgfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbmV4cG9ydCB2YXIgSG91cjFUbzI0UGFyc2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUGFyc2VyKSB7XG4gIF9pbmhlcml0cyhIb3VyMVRvMjRQYXJzZXIsIF9QYXJzZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoSG91cjFUbzI0UGFyc2VyKTtcblxuICBmdW5jdGlvbiBIb3VyMVRvMjRQYXJzZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEhvdXIxVG8yNFBhcnNlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInByaW9yaXR5XCIsIDcwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbmNvbXBhdGlibGVUb2tlbnNcIiwgWydhJywgJ2InLCAnaCcsICdIJywgJ0snLCAndCcsICdUJ10pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEhvdXIxVG8yNFBhcnNlciwgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIGNhc2UgJ2snOlxuICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5ob3VyMjRoLCBkYXRlU3RyaW5nKTtcblxuICAgICAgICBjYXNlICdrbyc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID49IDEgJiYgdmFsdWUgPD0gMjQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZSkge1xuICAgICAgdmFyIGhvdXJzID0gdmFsdWUgPD0gMjQgPyB2YWx1ZSAlIDI0IDogdmFsdWU7XG4gICAgICBkYXRlLnNldFVUQ0hvdXJzKGhvdXJzLCAwLCAwLCAwKTtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBIb3VyMVRvMjRQYXJzZXI7XG59KFBhcnNlcik7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmltcG9ydCB7IFBhcnNlciB9IGZyb20gXCIuLi9QYXJzZXIuanNcIjtcbmltcG9ydCB7IG51bWVyaWNQYXR0ZXJucyB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHBhcnNlTnVtZXJpY1BhdHRlcm4sIHBhcnNlTkRpZ2l0cyB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuZXhwb3J0IHZhciBNaW51dGVQYXJzZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QYXJzZXIpIHtcbiAgX2luaGVyaXRzKE1pbnV0ZVBhcnNlciwgX1BhcnNlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihNaW51dGVQYXJzZXIpO1xuXG4gIGZ1bmN0aW9uIE1pbnV0ZVBhcnNlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTWludXRlUGFyc2VyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicHJpb3JpdHlcIiwgNjApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbJ3QnLCAnVCddKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhNaW51dGVQYXJzZXIsIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaCkge1xuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMubWludXRlLCBkYXRlU3RyaW5nKTtcblxuICAgICAgICBjYXNlICdtbyc6XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywge1xuICAgICAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgICAgICB9KTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidmFsaWRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsaWRhdGUoX2RhdGUsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSA1OTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlKSB7XG4gICAgICBkYXRlLnNldFVUQ01pbnV0ZXModmFsdWUsIDAsIDApO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE1pbnV0ZVBhcnNlcjtcbn0oUGFyc2VyKTsiLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuaW1wb3J0IHsgbnVtZXJpY1BhdHRlcm5zIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcGFyc2VOdW1lcmljUGF0dGVybiwgcGFyc2VORGlnaXRzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5leHBvcnQgdmFyIFNlY29uZFBhcnNlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1BhcnNlcikge1xuICBfaW5oZXJpdHMoU2Vjb25kUGFyc2VyLCBfUGFyc2VyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFNlY29uZFBhcnNlcik7XG5cbiAgZnVuY3Rpb24gU2Vjb25kUGFyc2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTZWNvbmRQYXJzZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmlvcml0eVwiLCA1MCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFsndCcsICdUJ10pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFNlY29uZFBhcnNlciwgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoKSB7XG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5zZWNvbmQsIGRhdGVTdHJpbmcpO1xuXG4gICAgICAgIGNhc2UgJ3NvJzpcbiAgICAgICAgICByZXR1cm4gbWF0Y2gub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7XG4gICAgICAgICAgICB1bml0OiAnc2Vjb25kJ1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDU5O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0KGRhdGUsIF9mbGFncywgdmFsdWUpIHtcbiAgICAgIGRhdGUuc2V0VVRDU2Vjb25kcyh2YWx1ZSwgMCk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU2Vjb25kUGFyc2VyO1xufShQYXJzZXIpOyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBtYXBWYWx1ZSwgcGFyc2VORGlnaXRzIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5leHBvcnQgdmFyIEZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QYXJzZXIpIHtcbiAgX2luaGVyaXRzKEZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIsIF9QYXJzZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRnJhY3Rpb25PZlNlY29uZFBhcnNlcik7XG5cbiAgZnVuY3Rpb24gRnJhY3Rpb25PZlNlY29uZFBhcnNlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRnJhY3Rpb25PZlNlY29uZFBhcnNlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInByaW9yaXR5XCIsIDMwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbmNvbXBhdGlibGVUb2tlbnNcIiwgWyd0JywgJ1QnXSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRnJhY3Rpb25PZlNlY29uZFBhcnNlciwgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4pIHtcbiAgICAgIHZhciB2YWx1ZUNhbGxiYWNrID0gZnVuY3Rpb24gdmFsdWVDYWxsYmFjayh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih2YWx1ZSAqIE1hdGgucG93KDEwLCAtdG9rZW4ubGVuZ3RoICsgMykpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpLCB2YWx1ZUNhbGxiYWNrKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlKSB7XG4gICAgICBkYXRlLnNldFVUQ01pbGxpc2Vjb25kcyh2YWx1ZSk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRnJhY3Rpb25PZlNlY29uZFBhcnNlcjtcbn0oUGFyc2VyKTsiLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuaW1wb3J0IHsgdGltZXpvbmVQYXR0ZXJucyB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHBhcnNlVGltZXpvbmVQYXR0ZXJuIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7IC8vIFRpbWV6b25lIChJU08tODYwMS4gKzAwOjAwIGlzIGAnWidgKVxuXG5leHBvcnQgdmFyIElTT1RpbWV6b25lV2l0aFpQYXJzZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QYXJzZXIpIHtcbiAgX2luaGVyaXRzKElTT1RpbWV6b25lV2l0aFpQYXJzZXIsIF9QYXJzZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoSVNPVGltZXpvbmVXaXRoWlBhcnNlcik7XG5cbiAgZnVuY3Rpb24gSVNPVGltZXpvbmVXaXRoWlBhcnNlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSVNPVGltZXpvbmVXaXRoWlBhcnNlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInByaW9yaXR5XCIsIDEwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbmNvbXBhdGlibGVUb2tlbnNcIiwgWyd0JywgJ1QnLCAneCddKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhJU09UaW1lem9uZVdpdGhaUGFyc2VyLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbikge1xuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICBjYXNlICdYJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4odGltZXpvbmVQYXR0ZXJucy5iYXNpY09wdGlvbmFsTWludXRlcywgZGF0ZVN0cmluZyk7XG5cbiAgICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmJhc2ljLCBkYXRlU3RyaW5nKTtcblxuICAgICAgICBjYXNlICdYWFhYJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4odGltZXpvbmVQYXR0ZXJucy5iYXNpY09wdGlvbmFsU2Vjb25kcywgZGF0ZVN0cmluZyk7XG5cbiAgICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmV4dGVuZGVkT3B0aW9uYWxTZWNvbmRzLCBkYXRlU3RyaW5nKTtcblxuICAgICAgICBjYXNlICdYWFgnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmV4dGVuZGVkLCBkYXRlU3RyaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChkYXRlLCBmbGFncywgdmFsdWUpIHtcbiAgICAgIGlmIChmbGFncy50aW1lc3RhbXBJc1NldCkge1xuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpIC0gdmFsdWUpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBJU09UaW1lem9uZVdpdGhaUGFyc2VyO1xufShQYXJzZXIpOyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi4vUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyB0aW1lem9uZVBhdHRlcm5zIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcGFyc2VUaW1lem9uZVBhdHRlcm4gfSBmcm9tIFwiLi4vdXRpbHMuanNcIjsgLy8gVGltZXpvbmUgKElTTy04NjAxKVxuXG5leHBvcnQgdmFyIElTT1RpbWV6b25lUGFyc2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUGFyc2VyKSB7XG4gIF9pbmhlcml0cyhJU09UaW1lem9uZVBhcnNlciwgX1BhcnNlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihJU09UaW1lem9uZVBhcnNlcik7XG5cbiAgZnVuY3Rpb24gSVNPVGltZXpvbmVQYXJzZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIElTT1RpbWV6b25lUGFyc2VyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicHJpb3JpdHlcIiwgMTApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbJ3QnLCAnVCcsICdYJ10pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKElTT1RpbWV6b25lUGFyc2VyLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbikge1xuICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICBjYXNlICd4JzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4odGltZXpvbmVQYXR0ZXJucy5iYXNpY09wdGlvbmFsTWludXRlcywgZGF0ZVN0cmluZyk7XG5cbiAgICAgICAgY2FzZSAneHgnOlxuICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmJhc2ljLCBkYXRlU3RyaW5nKTtcblxuICAgICAgICBjYXNlICd4eHh4JzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4odGltZXpvbmVQYXR0ZXJucy5iYXNpY09wdGlvbmFsU2Vjb25kcywgZGF0ZVN0cmluZyk7XG5cbiAgICAgICAgY2FzZSAneHh4eHgnOlxuICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmV4dGVuZGVkT3B0aW9uYWxTZWNvbmRzLCBkYXRlU3RyaW5nKTtcblxuICAgICAgICBjYXNlICd4eHgnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmV4dGVuZGVkLCBkYXRlU3RyaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChkYXRlLCBmbGFncywgdmFsdWUpIHtcbiAgICAgIGlmIChmbGFncy50aW1lc3RhbXBJc1NldCkge1xuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpIC0gdmFsdWUpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBJU09UaW1lem9uZVBhcnNlcjtcbn0oUGFyc2VyKTsiLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuaW1wb3J0IHsgcGFyc2VBbnlEaWdpdHNTaWduZWQgfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbmV4cG9ydCB2YXIgVGltZXN0YW1wU2Vjb25kc1BhcnNlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1BhcnNlcikge1xuICBfaW5oZXJpdHMoVGltZXN0YW1wU2Vjb25kc1BhcnNlciwgX1BhcnNlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihUaW1lc3RhbXBTZWNvbmRzUGFyc2VyKTtcblxuICBmdW5jdGlvbiBUaW1lc3RhbXBTZWNvbmRzUGFyc2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUaW1lc3RhbXBTZWNvbmRzUGFyc2VyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicHJpb3JpdHlcIiwgNDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCAnKicpO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFRpbWVzdGFtcFNlY29uZHNQYXJzZXIsIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKGRhdGVTdHJpbmcpIHtcbiAgICAgIHJldHVybiBwYXJzZUFueURpZ2l0c1NpZ25lZChkYXRlU3RyaW5nKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChfZGF0ZSwgX2ZsYWdzLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIFtuZXcgRGF0ZSh2YWx1ZSAqIDEwMDApLCB7XG4gICAgICAgIHRpbWVzdGFtcElzU2V0OiB0cnVlXG4gICAgICB9XTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVGltZXN0YW1wU2Vjb25kc1BhcnNlcjtcbn0oUGFyc2VyKTsiLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSBcIi4uL1BhcnNlci5qc1wiO1xuaW1wb3J0IHsgcGFyc2VBbnlEaWdpdHNTaWduZWQgfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbmV4cG9ydCB2YXIgVGltZXN0YW1wTWlsbGlzZWNvbmRzUGFyc2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUGFyc2VyKSB7XG4gIF9pbmhlcml0cyhUaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIsIF9QYXJzZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoVGltZXN0YW1wTWlsbGlzZWNvbmRzUGFyc2VyKTtcblxuICBmdW5jdGlvbiBUaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInByaW9yaXR5XCIsIDIwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbmNvbXBhdGlibGVUb2tlbnNcIiwgJyonKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIsIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKGRhdGVTdHJpbmcpIHtcbiAgICAgIHJldHVybiBwYXJzZUFueURpZ2l0c1NpZ25lZChkYXRlU3RyaW5nKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChfZGF0ZSwgX2ZsYWdzLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIFtuZXcgRGF0ZSh2YWx1ZSksIHtcbiAgICAgICAgdGltZXN0YW1wSXNTZXQ6IHRydWVcbiAgICAgIH1dO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXI7XG59KFBhcnNlcik7IiwiaW1wb3J0IHsgRXJhUGFyc2VyIH0gZnJvbSBcIi4vRXJhUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBZZWFyUGFyc2VyIH0gZnJvbSBcIi4vWWVhclBhcnNlci5qc1wiO1xuaW1wb3J0IHsgTG9jYWxXZWVrWWVhclBhcnNlciB9IGZyb20gXCIuL0xvY2FsV2Vla1llYXJQYXJzZXIuanNcIjtcbmltcG9ydCB7IElTT1dlZWtZZWFyUGFyc2VyIH0gZnJvbSBcIi4vSVNPV2Vla1llYXJQYXJzZXIuanNcIjtcbmltcG9ydCB7IEV4dGVuZGVkWWVhclBhcnNlciB9IGZyb20gXCIuL0V4dGVuZGVkWWVhclBhcnNlci5qc1wiO1xuaW1wb3J0IHsgUXVhcnRlclBhcnNlciB9IGZyb20gXCIuL1F1YXJ0ZXJQYXJzZXIuanNcIjtcbmltcG9ydCB7IFN0YW5kQWxvbmVRdWFydGVyUGFyc2VyIH0gZnJvbSBcIi4vU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIuanNcIjtcbmltcG9ydCB7IE1vbnRoUGFyc2VyIH0gZnJvbSBcIi4vTW9udGhQYXJzZXIuanNcIjtcbmltcG9ydCB7IFN0YW5kQWxvbmVNb250aFBhcnNlciB9IGZyb20gXCIuL1N0YW5kQWxvbmVNb250aFBhcnNlci5qc1wiO1xuaW1wb3J0IHsgTG9jYWxXZWVrUGFyc2VyIH0gZnJvbSBcIi4vTG9jYWxXZWVrUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBJU09XZWVrUGFyc2VyIH0gZnJvbSBcIi4vSVNPV2Vla1BhcnNlci5qc1wiO1xuaW1wb3J0IHsgRGF0ZVBhcnNlciB9IGZyb20gXCIuL0RhdGVQYXJzZXIuanNcIjtcbmltcG9ydCB7IERheU9mWWVhclBhcnNlciB9IGZyb20gXCIuL0RheU9mWWVhclBhcnNlci5qc1wiO1xuaW1wb3J0IHsgRGF5UGFyc2VyIH0gZnJvbSBcIi4vRGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBMb2NhbERheVBhcnNlciB9IGZyb20gXCIuL0xvY2FsRGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBTdGFuZEFsb25lTG9jYWxEYXlQYXJzZXIgfSBmcm9tIFwiLi9TdGFuZEFsb25lTG9jYWxEYXlQYXJzZXIuanNcIjtcbmltcG9ydCB7IElTT0RheVBhcnNlciB9IGZyb20gXCIuL0lTT0RheVBhcnNlci5qc1wiO1xuaW1wb3J0IHsgQU1QTVBhcnNlciB9IGZyb20gXCIuL0FNUE1QYXJzZXIuanNcIjtcbmltcG9ydCB7IEFNUE1NaWRuaWdodFBhcnNlciB9IGZyb20gXCIuL0FNUE1NaWRuaWdodFBhcnNlci5qc1wiO1xuaW1wb3J0IHsgRGF5UGVyaW9kUGFyc2VyIH0gZnJvbSBcIi4vRGF5UGVyaW9kUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBIb3VyMXRvMTJQYXJzZXIgfSBmcm9tIFwiLi9Ib3VyMXRvMTJQYXJzZXIuanNcIjtcbmltcG9ydCB7IEhvdXIwdG8yM1BhcnNlciB9IGZyb20gXCIuL0hvdXIwdG8yM1BhcnNlci5qc1wiO1xuaW1wb3J0IHsgSG91cjBUbzExUGFyc2VyIH0gZnJvbSBcIi4vSG91cjBUbzExUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBIb3VyMVRvMjRQYXJzZXIgfSBmcm9tIFwiLi9Ib3VyMVRvMjRQYXJzZXIuanNcIjtcbmltcG9ydCB7IE1pbnV0ZVBhcnNlciB9IGZyb20gXCIuL01pbnV0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IHsgU2Vjb25kUGFyc2VyIH0gZnJvbSBcIi4vU2Vjb25kUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBGcmFjdGlvbk9mU2Vjb25kUGFyc2VyIH0gZnJvbSBcIi4vRnJhY3Rpb25PZlNlY29uZFBhcnNlci5qc1wiO1xuaW1wb3J0IHsgSVNPVGltZXpvbmVXaXRoWlBhcnNlciB9IGZyb20gXCIuL0lTT1RpbWV6b25lV2l0aFpQYXJzZXIuanNcIjtcbmltcG9ydCB7IElTT1RpbWV6b25lUGFyc2VyIH0gZnJvbSBcIi4vSVNPVGltZXpvbmVQYXJzZXIuanNcIjtcbmltcG9ydCB7IFRpbWVzdGFtcFNlY29uZHNQYXJzZXIgfSBmcm9tIFwiLi9UaW1lc3RhbXBTZWNvbmRzUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBUaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIgfSBmcm9tIFwiLi9UaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIuanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPKiB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBQICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6KiB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYHBhcnNlYCBkb2NzKVxuICogLSBgaWAgaXMgSVNPIGRheSBvZiB3ZWVrLiBGb3IgYGlgIGFuZCBgaWlgIGlzIHJldHVybnMgbnVtZXJpYyBJU08gd2VlayBkYXlzLFxuICogICBpLmUuIDcgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gKiAtIGBJYCBpcyBJU08gd2VlayBvZiB5ZWFyLCBhcyBvcHBvc2VkIHRvIGB3YCB3aGljaCBpcyBsb2NhbCB3ZWVrIG9mIHllYXIuXG4gKiAtIGBSYCBpcyBJU08gd2Vlay1udW1iZXJpbmcgeWVhciwgYXMgb3Bwb3NlZCB0byBgWWAgd2hpY2ggaXMgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhci5cbiAqICAgYFJgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgSWAgYW5kIGBpYFxuICogICBmb3IgdW5pdmVyc2FsIElTTyB3ZWVrLW51bWJlcmluZyBkYXRlLCB3aGVyZWFzXG4gKiAgIGBZYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHdgIGFuZCBgZWBcbiAqICAgZm9yIHdlZWstbnVtYmVyaW5nIGRhdGUgc3BlY2lmaWMgdG8gdGhlIGxvY2FsZS5cbiAqL1xuXG5leHBvcnQgdmFyIHBhcnNlcnMgPSB7XG4gIEc6IG5ldyBFcmFQYXJzZXIoKSxcbiAgeTogbmV3IFllYXJQYXJzZXIoKSxcbiAgWTogbmV3IExvY2FsV2Vla1llYXJQYXJzZXIoKSxcbiAgUjogbmV3IElTT1dlZWtZZWFyUGFyc2VyKCksXG4gIHU6IG5ldyBFeHRlbmRlZFllYXJQYXJzZXIoKSxcbiAgUTogbmV3IFF1YXJ0ZXJQYXJzZXIoKSxcbiAgcTogbmV3IFN0YW5kQWxvbmVRdWFydGVyUGFyc2VyKCksXG4gIE06IG5ldyBNb250aFBhcnNlcigpLFxuICBMOiBuZXcgU3RhbmRBbG9uZU1vbnRoUGFyc2VyKCksXG4gIHc6IG5ldyBMb2NhbFdlZWtQYXJzZXIoKSxcbiAgSTogbmV3IElTT1dlZWtQYXJzZXIoKSxcbiAgZDogbmV3IERhdGVQYXJzZXIoKSxcbiAgRDogbmV3IERheU9mWWVhclBhcnNlcigpLFxuICBFOiBuZXcgRGF5UGFyc2VyKCksXG4gIGU6IG5ldyBMb2NhbERheVBhcnNlcigpLFxuICBjOiBuZXcgU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyKCksXG4gIGk6IG5ldyBJU09EYXlQYXJzZXIoKSxcbiAgYTogbmV3IEFNUE1QYXJzZXIoKSxcbiAgYjogbmV3IEFNUE1NaWRuaWdodFBhcnNlcigpLFxuICBCOiBuZXcgRGF5UGVyaW9kUGFyc2VyKCksXG4gIGg6IG5ldyBIb3VyMXRvMTJQYXJzZXIoKSxcbiAgSDogbmV3IEhvdXIwdG8yM1BhcnNlcigpLFxuICBLOiBuZXcgSG91cjBUbzExUGFyc2VyKCksXG4gIGs6IG5ldyBIb3VyMVRvMjRQYXJzZXIoKSxcbiAgbTogbmV3IE1pbnV0ZVBhcnNlcigpLFxuICBzOiBuZXcgU2Vjb25kUGFyc2VyKCksXG4gIFM6IG5ldyBGcmFjdGlvbk9mU2Vjb25kUGFyc2VyKCksXG4gIFg6IG5ldyBJU09UaW1lem9uZVdpdGhaUGFyc2VyKCksXG4gIHg6IG5ldyBJU09UaW1lem9uZVBhcnNlcigpLFxuICB0OiBuZXcgVGltZXN0YW1wU2Vjb25kc1BhcnNlcigpLFxuICBUOiBuZXcgVGltZXN0YW1wTWlsbGlzZWNvbmRzUGFyc2VyKClcbn07IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihvLCBhbGxvd0FycmF5TGlrZSkgeyB2YXIgaXQ7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8IG9bU3ltYm9sLml0ZXJhdG9yXSA9PSBudWxsKSB7IGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvKSkgfHwgYWxsb3dBcnJheUxpa2UgJiYgbyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHsgaWYgKGl0KSBvID0gaXQ7IHZhciBpID0gMDsgdmFyIEYgPSBmdW5jdGlvbiBGKCkge307IHJldHVybiB7IHM6IEYsIG46IGZ1bmN0aW9uIG4oKSB7IGlmIChpID49IG8ubGVuZ3RoKSByZXR1cm4geyBkb25lOiB0cnVlIH07IHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogb1tpKytdIH07IH0sIGU6IGZ1bmN0aW9uIGUoX2UpIHsgdGhyb3cgX2U7IH0sIGY6IEYgfTsgfSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH0gdmFyIG5vcm1hbENvbXBsZXRpb24gPSB0cnVlLCBkaWRFcnIgPSBmYWxzZSwgZXJyOyByZXR1cm4geyBzOiBmdW5jdGlvbiBzKCkgeyBpdCA9IG9bU3ltYm9sLml0ZXJhdG9yXSgpOyB9LCBuOiBmdW5jdGlvbiBuKCkgeyB2YXIgc3RlcCA9IGl0Lm5leHQoKTsgbm9ybWFsQ29tcGxldGlvbiA9IHN0ZXAuZG9uZTsgcmV0dXJuIHN0ZXA7IH0sIGU6IGZ1bmN0aW9uIGUoX2UyKSB7IGRpZEVyciA9IHRydWU7IGVyciA9IF9lMjsgfSwgZjogZnVuY3Rpb24gZigpIHsgdHJ5IHsgaWYgKCFub3JtYWxDb21wbGV0aW9uICYmIGl0LnJldHVybiAhPSBudWxsKSBpdC5yZXR1cm4oKTsgfSBmaW5hbGx5IHsgaWYgKGRpZEVycikgdGhyb3cgZXJyOyB9IH0gfTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi9fbGliL2RlZmF1bHRMb2NhbGUvaW5kZXguanNcIjtcbmltcG9ydCBzdWJNaWxsaXNlY29uZHMgZnJvbSBcIi4uL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgYXNzaWduIGZyb20gXCIuLi9fbGliL2Fzc2lnbi9pbmRleC5qc1wiO1xuaW1wb3J0IGxvbmdGb3JtYXR0ZXJzIGZyb20gXCIuLi9fbGliL2Zvcm1hdC9sb25nRm9ybWF0dGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMgZnJvbSBcIi4uL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbiwgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuLCB0aHJvd1Byb3RlY3RlZEVycm9yIH0gZnJvbSBcIi4uL19saWIvcHJvdGVjdGVkVG9rZW5zL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB7IERhdGVUb1N5c3RlbVRpbWV6b25lU2V0dGVyIH0gZnJvbSBcIi4vX2xpYi9TZXR0ZXIuanNcIjtcbmltcG9ydCB7IHBhcnNlcnMgfSBmcm9tIFwiLi9fbGliL3BhcnNlcnMvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL19saWIvZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjsgLy8gVGhpcyBSZWdFeHAgY29uc2lzdHMgb2YgdGhyZWUgcGFydHMgc2VwYXJhdGVkIGJ5IGB8YDpcbi8vIC0gW3lZUXFNTHdJZERlY2loSEtrbXNdbyBtYXRjaGVzIGFueSBhdmFpbGFibGUgb3JkaW5hbCBudW1iZXIgdG9rZW5cbi8vICAgKG9uZSBvZiB0aGUgY2VydGFpbiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IGBvYClcbi8vIC0gKFxcdylcXDEqIG1hdGNoZXMgYW55IHNlcXVlbmNlcyBvZiB0aGUgc2FtZSBsZXR0ZXJcbi8vIC0gJycgbWF0Y2hlcyB0d28gcXVvdGUgY2hhcmFjdGVycyBpbiBhIHJvd1xuLy8gLSAnKCcnfFteJ10pKygnfCQpIG1hdGNoZXMgYW55dGhpbmcgc3Vycm91bmRlZCBieSB0d28gcXVvdGUgY2hhcmFjdGVycyAoJyksXG4vLyAgIGV4Y2VwdCBhIHNpbmdsZSBxdW90ZSBzeW1ib2wsIHdoaWNoIGVuZHMgdGhlIHNlcXVlbmNlLlxuLy8gICBUd28gcXVvdGUgY2hhcmFjdGVycyBkbyBub3QgZW5kIHRoZSBzZXF1ZW5jZS5cbi8vICAgSWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc2luZ2xlIHF1b3RlXG4vLyAgIHRoZW4gdGhlIHNlcXVlbmNlIHdpbGwgY29udGludWUgdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuLy8gLSAuIG1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgdW5tYXRjaGVkIGJ5IHByZXZpb3VzIHBhcnRzIG9mIHRoZSBSZWdFeHBzXG5cbnZhciBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFxcdylcXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nOyAvLyBUaGlzIFJlZ0V4cCBjYXRjaGVzIHN5bWJvbHMgZXNjYXBlZCBieSBxdW90ZXMsIGFuZCBhbHNvXG4vLyBzZXF1ZW5jZXMgb2Ygc3ltYm9scyBQLCBwLCBhbmQgdGhlIGNvbWJpbmF0aW9ucyBsaWtlIGBQUFBQUFBQcHBwcHBgXG5cbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIG5vdFdoaXRlc3BhY2VSZWdFeHAgPSAvXFxTLztcbnZhciB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCA9IC9bYS16QS1aXS87XG4vKipcbiAqIEBuYW1lIHBhcnNlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFBhcnNlIHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBkYXRlIHBhcnNlZCBmcm9tIHN0cmluZyB1c2luZyB0aGUgZ2l2ZW4gZm9ybWF0IHN0cmluZy5cbiAqXG4gKiA+IOKaoO+4jyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBgZm9ybWF0YCB0b2tlbnMgZGlmZmVyIGZyb20gTW9tZW50LmpzIGFuZCBvdGhlciBsaWJyYXJpZXMuXG4gKiA+IFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIFRoZSBjaGFyYWN0ZXJzIGluIHRoZSBmb3JtYXQgc3RyaW5nIHdyYXBwZWQgYmV0d2VlbiB0d28gc2luZ2xlIHF1b3RlcyBjaGFyYWN0ZXJzICgnKSBhcmUgZXNjYXBlZC5cbiAqIFR3byBzaW5nbGUgcXVvdGVzIGluIGEgcm93LCB3aGV0aGVyIGluc2lkZSBvciBvdXRzaWRlIGEgcXVvdGVkIHNlcXVlbmNlLCByZXByZXNlbnQgYSAncmVhbCcgc2luZ2xlIHF1b3RlLlxuICpcbiAqIEZvcm1hdCBvZiB0aGUgZm9ybWF0IHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNSBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIE5vdCBhbGwgdG9rZW5zIGFyZSBjb21wYXRpYmxlLiBDb21iaW5hdGlvbnMgdGhhdCBkb24ndCBtYWtlIHNlbnNlIG9yIGNvdWxkIGxlYWQgdG8gYnVncyBhcmUgcHJvaGliaXRlZFxuICogYW5kIHdpbGwgdGhyb3cgYFJhbmdlRXJyb3JgLiBGb3IgZXhhbXBsZSB1c2FnZSBvZiAyNC1ob3VyIGZvcm1hdCB0b2tlbiB3aXRoIEFNL1BNIHRva2VuIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIHBhcnNlKCcyMyBBTScsICdISCBhJywgbmV3IERhdGUoKSlcbiAqIC8vPT4gUmFuZ2VFcnJvcjogVGhlIGZvcm1hdCBzdHJpbmcgbXVzdG4ndCBjb250YWluIGBISGAgYW5kIGBhYCBhdCB0aGUgc2FtZSB0aW1lXG4gKiBgYGBcbiAqXG4gKiBTZWUgdGhlIGNvbXBhdGliaWxpdHkgdGFibGU6IGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kL2UvMlBBQ1gtMXZRT1BVM3hVaHBsbGw2ZHlvTW1WVVhIS2xfOENSRHM2X3VlTG1leDNTb3F3aHVvbGt1TjNPMDVsNHJxeDVoMWRLWDhlYjQ2VWwtQ0NTcnEvcHViaHRtbD9naWQ9MCZzaW5nbGU9dHJ1ZVxuICpcbiAqIEFjY2VwdGVkIGZvcm1hdCBzdHJpbmcgcGF0dGVybnM6XG4gKiB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFByaW9yfCBQYXR0ZXJuIHwgUmVzdWx0IGV4YW1wbGVzICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLXxcbiAqIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0MCB8IEcuLkdHRyAgfCBBRCwgQkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBHR0dHICAgIHwgQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3QgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgR0dHR0cgICB8IEEsIEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQ2FsZW5kYXIgeWVhciAgICAgICAgICAgICAgICAgICB8IDEzMCB8IHkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNywgOTk5OSAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB5byAgICAgIHwgNDR0aCwgMXN0LCAxOTAwdGgsIDk5OTk5OTl0aCAgICAgIHwgNCw1ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgeXkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHl5eSAgICAgfCAwNDQsIDAwMSwgMTIzLCA5OTkgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB5eXl5ICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgeXl5eXkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIsNCAgIHxcbiAqIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICB8IDEzMCB8IFkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNywgOTAwMCAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBZbyAgICAgIHwgNDR0aCwgMXN0LCAxOTAwdGgsIDk5OTk5OTl0aCAgICAgIHwgNCw1ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgWVkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDQsNiAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFlZWSAgICAgfCAwNDQsIDAwMSwgMTIzLCA5OTkgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBZWVlZICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNCw2ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgWVlZWVkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIsNCAgIHxcbiAqIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgICB8IDEzMCB8IFIgICAgICAgfCAtNDMsIDEsIDE5MDAsIDIwMTcsIDk5OTksIC05OTk5ICAgfCA0LDUgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBSUiAgICAgIHwgLTQzLCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgIHwgNCw1ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUlJSICAgICB8IC0wNDMsIDAwMSwgMTIzLCA5OTksIC05OTkgICAgICAgICB8IDQsNSAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFJSUlIgICAgfCAtMDA0MywgMDAwMSwgMjAxNywgOTk5OSwgLTk5OTkgICAgfCA0LDUgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBSUlJSUiAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiw0LDUgfFxuICogfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgIHwgMTMwIHwgdSAgICAgICB8IC00MywgMSwgMTkwMCwgMjAxNywgOTk5OSwgLTk5OSAgICB8IDQgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHV1ICAgICAgfCAtNDMsIDAxLCA5OSwgLTk5ICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB1dXUgICAgIHwgLTA0MywgMDAxLCAxMjMsIDk5OSwgLTk5OSAgICAgICAgIHwgNCAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgdXV1dSAgICB8IC0wMDQzLCAwMDAxLCAyMDE3LCA5OTk5LCAtOTk5OSAgICB8IDQgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHV1dXV1ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLDQgICB8XG4gKiB8IFF1YXJ0ZXIgKGZvcm1hdHRpbmcpICAgICAgICAgICAgfCAxMjAgfCBRICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFFRICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBRUVEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUVFRUSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFFRUVFRICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IFF1YXJ0ZXIgKHN0YW5kLWFsb25lKSAgICAgICAgICAgfCAxMjAgfCBxICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgcW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHFxICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBxcXEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgcXFxcSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHFxcXFxICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IE1vbnRoIChmb3JtYXR0aW5nKSAgICAgICAgICAgICAgfCAxMTAgfCBNICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgTW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IE1NICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBNTU0gICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgTU1NTSAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IE1NTU1NICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1vbnRoIChzdGFuZC1hbG9uZSkgICAgICAgICAgICAgfCAxMTAgfCBMICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgTG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IExMICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBMTEwgICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgTExMTCAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IExMTExMICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgfCAxMDAgfCB3ICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgd28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHd3ICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICAgfCAxMDAgfCBJICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgSW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IElJICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICAgfCAgOTAgfCBkICAgICAgIHwgMSwgMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgZG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDMxc3QgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGRkICAgICAgfCAwMSwgMDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICAgfCAgOTAgfCBEICAgICAgIHwgMSwgMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgRG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDM2NXRoLCAzNjZ0aCAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IEREICAgICAgfCAwMSwgMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBEREQgICAgIHwgMDAxLCAwMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgRERERCAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgRGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgICAgICB8ICA5MCB8IEUuLkVFRSAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBFRUVFICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgRUVFRUUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IEVFRUVFRSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgfCAgOTAgfCBpICAgICAgIHwgMSwgMiwgMywgLi4uLCA3ICAgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgaW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDd0aCAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGlpICAgICAgfCAwMSwgMDIsIC4uLiwgMDcgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBpaWkgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgaWlpaSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIsNSAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGlpaWlpICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBpaWlpaWkgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgNSAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgIHwgIDkwIHwgZSAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGVvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBlZSAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgZWVlICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGVlZWUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBlZWVlZSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgZWVlZWVlICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKHN0YW5kLWFsb25lKSB8ICA5MCB8IGMgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBjbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgY2MgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGNjYyAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBjY2NjICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgY2NjY2MgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGNjY2NjYyAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgODAgfCBhLi5hYWEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgYWFhYSAgICB8IGEubS4sIHAubS4gICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGFhYWFhICAgfCBhLCBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgfCAgODAgfCBiLi5iYmIgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCAgODAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCAgNzAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCAgNzAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCAgNzAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCAgNzAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNTAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCAgNDAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgICB8ICAzMCB8IFMgICAgICAgfCAwLCAxLCAuLi4sIDkgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBTUyAgICAgIHwgMDAsIDAxLCAuLi4sIDk5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgU1NTICAgICB8IDAwMCwgMDAxLCAuLi4sIDk5OSAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFNTU1MgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgfCAgMjAgfCBUICAgICAgIHwgNTEyOTY5NTIwOTAwICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVFQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvIFopICAgICAgICB8ICAxMCB8IFggICAgICAgfCAtMDgsICswNTMwLCBaICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBYWCAgICAgIHwgLTA4MDAsICswNTMwLCBaICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgWFhYICAgICB8IC0wODowMCwgKzA1OjMwLCBaICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFhYWFggICAgfCAtMDgwMCwgKzA1MzAsIFosICsxMjM0NTYgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBYWFhYWCAgIHwgLTA4OjAwLCArMDU6MzAsIFosICsxMjozNDo1NiAgICAgIHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgIHwgIDEwIHwgeCAgICAgICB8IC0wOCwgKzA1MzAsICswMCAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHh4ICAgICAgfCAtMDgwMCwgKzA1MzAsICswMDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB4eHggICAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgeHh4eCAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAsICsxMjM0NTYgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHh4eHh4ICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwLCArMTI6MzQ6NTYgfCAgICAgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICAgfCAgTkEgfCBQICAgICAgIHwgMDUvMjkvMTQ1MyAgICAgICAgICAgICAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUFAgICAgICB8IE1heSAyOSwgMTQ1MyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFBQUCAgICAgfCBNYXkgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBQUFBQICAgIHwgU3VuZGF5LCBNYXkgMjl0aCwgMTQ1MyAgICAgICAgICAgIHwgMiw1LDggfFxuICogfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgIHwgIE5BIHwgcCAgICAgICB8IDEyOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHBwICAgICAgfCAxMjowMDowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCAgTkEgfCBQcCAgICAgIHwgMDUvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgUFBwcCAgICB8IE1heSAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFBQUHBwICAgfCBNYXkgMjl0aCwgMTQ1MyBhdCAuLi4gICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBQUFBQcHAgIHwgU3VuZGF5LCBNYXkgMjl0aCwgMTQ1MyBhdCAuLi4gICAgIHwgMiw1LDggfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhci5cbiAqICAgIEluIGBmb3JtYXRgIGZ1bmN0aW9uLCB0aGV5IHdpbGwgcHJvZHVjZSBkaWZmZXJlbnQgcmVzdWx0OlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTExMTCcsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWQnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTU1NTScsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWR1J2BcbiAqXG4gKiAgICBgcGFyc2VgIHdpbGwgdHJ5IHRvIG1hdGNoIGJvdGggZm9ybWF0dGluZyBhbmQgc3RhbmQtYWxvbmUgdW5pdHMgaW50ZXJjaGFuZ2FibHkuXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlOlxuICogICAgLSBmb3IgbnVtZXJpY2FsIHVuaXRzIChgeXl5eXl5eXlgKSBgcGFyc2VgIHdpbGwgdHJ5IHRvIG1hdGNoIGEgbnVtYmVyXG4gKiAgICAgIGFzIHdpZGUgYXMgdGhlIHNlcXVlbmNlXG4gKiAgICAtIGZvciB0ZXh0IHVuaXRzIChgTU1NTU1NTU1gKSBgcGFyc2VgIHdpbGwgdHJ5IHRvIG1hdGNoIHRoZSB3aWRlc3QgdmFyaWF0aW9uIG9mIHRoZSB1bml0LlxuICogICAgICBUaGVzZSB2YXJpYXRpb25zIGFyZSBtYXJrZWQgd2l0aCBcIjJcIiBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIHRhYmxlLlxuICpcbiAqIDMuIGBRUVFRUWAgYW5kIGBxcXFxcWAgY291bGQgYmUgbm90IHN0cmljdGx5IG51bWVyaWNhbCBpbiBzb21lIGxvY2FsZXMuXG4gKiAgICBUaGVzZSB0b2tlbnMgcmVwcmVzZW50IHRoZSBzaG9ydGVzdCBmb3JtIG9mIHRoZSBxdWFydGVyLlxuICpcbiAqIDQuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBwYXR0ZXJucyBhcmUgQi5DLiB5ZWFyczpcbiAqXG4gKiAgICB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICogICAgfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAqICAgIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gKiAgICB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICogICAgfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAqXG4gKiAgICBBbHNvIGB5eWAgd2lsbCB0cnkgdG8gZ3Vlc3MgdGhlIGNlbnR1cnkgb2YgdHdvIGRpZ2l0IHllYXIgYnkgcHJveGltaXR5IHdpdGggYHJlZmVyZW5jZURhdGVgOlxuICpcbiAqICAgIGBwYXJzZSgnNTAnLCAneXknLCBuZXcgRGF0ZSgyMDE4LCAwLCAxKSkgLy89PiBTYXQgSmFuIDAxIDIwNTAgMDA6MDA6MDBgXG4gKlxuICogICAgYHBhcnNlKCc3NScsICd5eScsIG5ldyBEYXRlKDIwMTgsIDAsIDEpKSAvLz0+IFdlZCBKYW4gMDEgMTk3NSAwMDowMDowMGBcbiAqXG4gKiAgICB3aGlsZSBgdXVgIHdpbGwganVzdCBhc3NpZ24gdGhlIHllYXIgYXMgaXM6XG4gKlxuICogICAgYHBhcnNlKCc1MCcsICd1dScsIG5ldyBEYXRlKDIwMTgsIDAsIDEpKSAvLz0+IFNhdCBKYW4gMDEgMDA1MCAwMDowMDowMGBcbiAqXG4gKiAgICBgcGFyc2UoJzc1JywgJ3V1JywgbmV3IERhdGUoMjAxOCwgMCwgMSkpIC8vPT4gVHVlIEphbiAwMSAwMDc1IDAwOjAwOjAwYFxuICpcbiAqICAgIFRoZSBzYW1lIGRpZmZlcmVuY2UgaXMgdHJ1ZSBmb3IgbG9jYWwgYW5kIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFycyAoYFlgIGFuZCBgUmApLFxuICogICAgZXhjZXB0IGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJzIGFyZSBkZXBlbmRlbnQgb24gYG9wdGlvbnMud2Vla1N0YXJ0c09uYFxuICogICAgYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKGNvbXBhcmUgW3NldElTT1dlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3NldElTT1dlZWtZZWFyfVxuICogICAgYW5kIFtzZXRXZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9zZXRXZWVrWWVhcn0pLlxuICpcbiAqIDUuIFRoZXNlIHBhdHRlcm5zIGFyZSBub3QgaW4gdGhlIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqICAgIC0gYGlgOiBJU08gZGF5IG9mIHdlZWtcbiAqICAgIC0gYElgOiBJU08gd2VlayBvZiB5ZWFyXG4gKiAgICAtIGBSYDogSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqICAgIC0gYG9gOiBvcmRpbmFsIG51bWJlciBtb2RpZmllclxuICogICAgLSBgUGA6IGxvbmcgbG9jYWxpemVkIGRhdGVcbiAqICAgIC0gYHBgOiBsb25nIGxvY2FsaXplZCB0aW1lXG4gKlxuICogNi4gYFlZYCBhbmQgYFlZWVlgIHRva2VucyByZXByZXNlbnQgd2Vlay1udW1iZXJpbmcgeWVhcnMgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggeWVhcnMuXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiA3LiBgRGAgYW5kIGBERGAgdG9rZW5zIHJlcHJlc2VudCBkYXlzIG9mIHRoZSB5ZWFyIGJ1dCB0aGV5IGFyZSBvZnRoZW4gY29uZnVzZWQgd2l0aCBkYXlzIG9mIHRoZSBtb250aC5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiA4LiBgUCtgIHRva2VucyBkbyBub3QgaGF2ZSBhIGRlZmluZWQgcHJpb3JpdHkgc2luY2UgdGhleSBhcmUgbWVyZWx5IGFsaWFzZXMgdG8gb3RoZXIgdG9rZW5zIGJhc2VkXG4gKiAgICBvbiB0aGUgZ2l2ZW4gbG9jYWxlLlxuICpcbiAqICAgIHVzaW5nIGBlbi1VU2AgbG9jYWxlOiBgUGAgPT4gYE1NL2RkL3l5eXlgXG4gKiAgICB1c2luZyBgZW4tVVNgIGxvY2FsZTogYHBgID0+IGBoaDptbSBhYFxuICogICAgdXNpbmcgYHB0LUJSYCBsb2NhbGU6IGBQYCA9PiBgZGQvTU0veXl5eWBcbiAqICAgIHVzaW5nIGBwdC1CUmAgbG9jYWxlOiBgcGAgPT4gYEhIOm1tYFxuICpcbiAqIFZhbHVlcyB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoZSBkYXRlIGluIHRoZSBkZXNjZW5kaW5nIG9yZGVyIG9mIGl0cyB1bml0J3MgcHJpb3JpdHkuXG4gKiBVbml0cyBvZiBhbiBlcXVhbCBwcmlvcml0eSBvdmVyd3JpdGUgZWFjaCBvdGhlciBpbiB0aGUgb3JkZXIgb2YgYXBwZWFyYW5jZS5cbiAqXG4gKiBJZiBubyB2YWx1ZXMgb2YgaGlnaGVyIHByaW9yaXR5IGFyZSBwYXJzZWQgKGUuZy4gd2hlbiBwYXJzaW5nIHN0cmluZyAnSmFudWFyeSAxc3QnIHdpdGhvdXQgYSB5ZWFyKSxcbiAqIHRoZSB2YWx1ZXMgd2lsbCBiZSB0YWtlbiBmcm9tIDNyZCBhcmd1bWVudCBgcmVmZXJlbmNlRGF0ZWAgd2hpY2ggd29ya3MgYXMgYSBjb250ZXh0IG9mIHBhcnNpbmcuXG4gKlxuICogYHJlZmVyZW5jZURhdGVgIG11c3QgYmUgcGFzc2VkIGZvciBjb3JyZWN0IHdvcmsgb2YgdGhlIGZ1bmN0aW9uLlxuICogSWYgeW91J3JlIG5vdCBzdXJlIHdoaWNoIGByZWZlcmVuY2VEYXRlYCB0byBzdXBwbHksIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBEYXRlOlxuICogYHBhcnNlKCcwMi8xMS8yMDE0JywgJ01NL2RkL3l5eXknLCBuZXcgRGF0ZSgpKWBcbiAqIEluIHRoaXMgY2FzZSBwYXJzaW5nIHdpbGwgYmUgZG9uZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBkYXRlLlxuICogSWYgYHJlZmVyZW5jZURhdGVgIGlzIGBJbnZhbGlkIERhdGVgIG9yIGEgdmFsdWUgbm90IGNvbnZlcnRpYmxlIHRvIHZhbGlkIGBEYXRlYCxcbiAqIHRoZW4gYEludmFsaWQgRGF0ZWAgd2lsbCBiZSByZXR1cm5lZC5cbiAqXG4gKiBUaGUgcmVzdWx0IG1heSB2YXJ5IGJ5IGxvY2FsZS5cbiAqXG4gKiBJZiBgZm9ybWF0U3RyaW5nYCBtYXRjaGVzIHdpdGggYGRhdGVTdHJpbmdgIGJ1dCBkb2VzIG5vdCBwcm92aWRlcyB0b2tlbnMsIGByZWZlcmVuY2VEYXRlYCB3aWxsIGJlIHJldHVybmVkLlxuICpcbiAqIElmIHBhcnNpbmcgZmFpbGVkLCBgSW52YWxpZCBEYXRlYCB3aWxsIGJlIHJldHVybmVkLlxuICogSW52YWxpZCBEYXRlIGlzIGEgRGF0ZSwgd2hvc2UgdGltZSB2YWx1ZSBpcyBOYU4uXG4gKiBUaW1lIHZhbHVlIG9mIERhdGU6IGh0dHA6Ly9lczUuZ2l0aHViLmlvLyN4MTUuOS4xLjFcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZGF0ZVN0cmluZyAtIHRoZSBzdHJpbmcgdG8gcGFyc2VcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXRTdHJpbmcgLSB0aGUgc3RyaW5nIG9mIHRva2Vuc1xuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gcmVmZXJlbmNlRGF0ZSAtIGRlZmluZXMgdmFsdWVzIG1pc3NpbmcgZnJvbSB0aGUgcGFyc2VkIGRhdGVTdHJpbmdcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHsxfDJ8M3w0fDV8Nnw3fSBbb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGU9MV0gLSB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhclxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIHRoZSB3ZWVrLW51bWJlcmluZyB5ZWFyIHRva2VucyBgWVlgIGFuZCBgWVlZWWA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgZGF5IG9mIHllYXIgdG9rZW5zIGBEYCBhbmQgYEREYDtcbiAqICAgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDMgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgbWF0Y2hgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUGFyc2UgMTEgRmVicnVhcnkgMjAxNCBmcm9tIG1pZGRsZS1lbmRpYW4gZm9ybWF0OlxuICogdmFyIHJlc3VsdCA9IHBhcnNlKCcwMi8xMS8yMDE0JywgJ01NL2RkL3l5eXknLCBuZXcgRGF0ZSgpKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMDA6MDA6MDBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUGFyc2UgMjh0aCBvZiBGZWJydWFyeSBpbiBFc3BlcmFudG8gbG9jYWxlIGluIHRoZSBjb250ZXh0IG9mIDIwMTAgeWVhcjpcbiAqIGltcG9ydCBlbyBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiB2YXIgcmVzdWx0ID0gcGFyc2UoJzI4LWEgZGUgZmVicnVhcm8nLCBcImRvICdkZScgTU1NTVwiLCBuZXcgRGF0ZSgyMDEwLCAwLCAxKSwge1xuICogICBsb2NhbGU6IGVvXG4gKiB9KVxuICogLy89PiBTdW4gRmViIDI4IDIwMTAgMDA6MDA6MDBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYXJzZShkaXJ0eURhdGVTdHJpbmcsIGRpcnR5Rm9ybWF0U3RyaW5nLCBkaXJ0eVJlZmVyZW5jZURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG5cbiAgcmVxdWlyZWRBcmdzKDMsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlU3RyaW5nID0gU3RyaW5nKGRpcnR5RGF0ZVN0cmluZyk7XG4gIHZhciBmb3JtYXRTdHJpbmcgPSBTdHJpbmcoZGlydHlGb3JtYXRTdHJpbmcpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgbG9jYWxlID0gKF9yZWYgPSAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxvY2FsZSkgIT09IG51bGwgJiYgX29wdGlvbnMkbG9jYWxlICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRsb2NhbGUgOiBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiBkZWZhdWx0TG9jYWxlO1xuXG4gIGlmICghbG9jYWxlLm1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gbWF0Y2ggcHJvcGVydHknKTtcbiAgfVxuXG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYyID0gKF9yZWYzID0gKF9yZWY0ID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiRvcHRpID0gX29wdGlvbnMkbG9jYWxlMi5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZTIkb3B0aS5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWY0ICE9PSB2b2lkIDAgPyBfcmVmNCA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogMSk7IC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMSBhbmQgNyBfYW5kXyBpcyBub3QgTmFOXG5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG5cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTsgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAwIGFuZCA2IF9hbmRfIGlzIG5vdCBOYU5cblxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cblxuICBpZiAoZm9ybWF0U3RyaW5nID09PSAnJykge1xuICAgIGlmIChkYXRlU3RyaW5nID09PSAnJykge1xuICAgICAgcmV0dXJuIHRvRGF0ZShkaXJ0eVJlZmVyZW5jZURhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3ViRm5PcHRpb25zID0ge1xuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogZmlyc3RXZWVrQ29udGFpbnNEYXRlLFxuICAgIHdlZWtTdGFydHNPbjogd2Vla1N0YXJ0c09uLFxuICAgIGxvY2FsZTogbG9jYWxlXG4gIH07IC8vIElmIHRpbWV6b25lIGlzbid0IHNwZWNpZmllZCwgaXQgd2lsbCBiZSBzZXQgdG8gdGhlIHN5c3RlbSB0aW1lem9uZVxuXG4gIHZhciBzZXR0ZXJzID0gW25ldyBEYXRlVG9TeXN0ZW1UaW1lem9uZVNldHRlcigpXTtcbiAgdmFyIHRva2VucyA9IGZvcm1hdFN0cmluZy5tYXRjaChsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCkubWFwKGZ1bmN0aW9uIChzdWJzdHJpbmcpIHtcbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG5cbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgaW4gbG9uZ0Zvcm1hdHRlcnMpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJykubWF0Y2goZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCk7XG4gIHZhciB1c2VkVG9rZW5zID0gW107XG5cbiAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRva2VucyksXG4gICAgICBfc3RlcDtcblxuICB0cnkge1xuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgICAgdmFyIHRva2VuID0gX3N0ZXAudmFsdWU7XG5cbiAgICAgIGlmICghKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdFN0cmluZywgZGlydHlEYXRlU3RyaW5nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSkge1xuICAgICAgICB0aHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXRTdHJpbmcsIGRpcnR5RGF0ZVN0cmluZyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBmaXJzdENoYXJhY3RlciA9IHRva2VuWzBdO1xuICAgICAgdmFyIHBhcnNlciA9IHBhcnNlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuXG4gICAgICBpZiAocGFyc2VyKSB7XG4gICAgICAgIHZhciBpbmNvbXBhdGlibGVUb2tlbnMgPSBwYXJzZXIuaW5jb21wYXRpYmxlVG9rZW5zO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGluY29tcGF0aWJsZVRva2VucykpIHtcbiAgICAgICAgICB2YXIgaW5jb21wYXRpYmxlVG9rZW4gPSB1c2VkVG9rZW5zLmZpbmQoZnVuY3Rpb24gKHVzZWRUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIGluY29tcGF0aWJsZVRva2Vucy5pbmNsdWRlcyh1c2VkVG9rZW4udG9rZW4pIHx8IHVzZWRUb2tlbi50b2tlbiA9PT0gZmlyc3RDaGFyYWN0ZXI7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoaW5jb21wYXRpYmxlVG9rZW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIGZvcm1hdCBzdHJpbmcgbXVzdG4ndCBjb250YWluIGBcIi5jb25jYXQoaW5jb21wYXRpYmxlVG9rZW4uZnVsbFRva2VuLCBcImAgYW5kIGBcIikuY29uY2F0KHRva2VuLCBcImAgYXQgdGhlIHNhbWUgdGltZVwiKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnNlci5pbmNvbXBhdGlibGVUb2tlbnMgPT09ICcqJyAmJiB1c2VkVG9rZW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBmb3JtYXQgc3RyaW5nIG11c3RuJ3QgY29udGFpbiBgXCIuY29uY2F0KHRva2VuLCBcImAgYW5kIGFueSBvdGhlciB0b2tlbiBhdCB0aGUgc2FtZSB0aW1lXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVzZWRUb2tlbnMucHVzaCh7XG4gICAgICAgICAgdG9rZW46IGZpcnN0Q2hhcmFjdGVyLFxuICAgICAgICAgIGZ1bGxUb2tlbjogdG9rZW5cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBwYXJzZVJlc3VsdCA9IHBhcnNlci5ydW4oZGF0ZVN0cmluZywgdG9rZW4sIGxvY2FsZS5tYXRjaCwgc3ViRm5PcHRpb25zKTtcblxuICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHY6IG5ldyBEYXRlKE5hTilcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0dGVycy5wdXNoKHBhcnNlUmVzdWx0LnNldHRlcik7XG4gICAgICAgIGRhdGVTdHJpbmcgPSBwYXJzZVJlc3VsdC5yZXN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdGb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXIgYCcgKyBmaXJzdENoYXJhY3RlciArICdgJyk7XG4gICAgICAgIH0gLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuXG5cbiAgICAgICAgaWYgKHRva2VuID09PSBcIicnXCIpIHtcbiAgICAgICAgICB0b2tlbiA9IFwiJ1wiO1xuICAgICAgICB9IGVsc2UgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgICAgIHRva2VuID0gY2xlYW5Fc2NhcGVkU3RyaW5nKHRva2VuKTtcbiAgICAgICAgfSAvLyBDdXQgdG9rZW4gZnJvbSBzdHJpbmcsIG9yLCBpZiBzdHJpbmcgZG9lc24ndCBtYXRjaCB0aGUgdG9rZW4sIHJldHVybiBJbnZhbGlkIERhdGVcblxuXG4gICAgICAgIGlmIChkYXRlU3RyaW5nLmluZGV4T2YodG9rZW4pID09PSAwKSB7XG4gICAgICAgICAgZGF0ZVN0cmluZyA9IGRhdGVTdHJpbmcuc2xpY2UodG9rZW4ubGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdjogbmV3IERhdGUoTmFOKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHtcbiAgICAgIHZhciBfcmV0ID0gX2xvb3AoKTtcblxuICAgICAgaWYgKF90eXBlb2YoX3JldCkgPT09IFwib2JqZWN0XCIpIHJldHVybiBfcmV0LnY7XG4gICAgfSAvLyBDaGVjayBpZiB0aGUgcmVtYWluaW5nIGlucHV0IGNvbnRhaW5zIHNvbWV0aGluZyBvdGhlciB0aGFuIHdoaXRlc3BhY2VcblxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfaXRlcmF0b3IuZShlcnIpO1xuICB9IGZpbmFsbHkge1xuICAgIF9pdGVyYXRvci5mKCk7XG4gIH1cblxuICBpZiAoZGF0ZVN0cmluZy5sZW5ndGggPiAwICYmIG5vdFdoaXRlc3BhY2VSZWdFeHAudGVzdChkYXRlU3RyaW5nKSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG5cbiAgdmFyIHVuaXF1ZVByaW9yaXR5U2V0dGVycyA9IHNldHRlcnMubWFwKGZ1bmN0aW9uIChzZXR0ZXIpIHtcbiAgICByZXR1cm4gc2V0dGVyLnByaW9yaXR5O1xuICB9KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGIgLSBhO1xuICB9KS5maWx0ZXIoZnVuY3Rpb24gKHByaW9yaXR5LCBpbmRleCwgYXJyYXkpIHtcbiAgICByZXR1cm4gYXJyYXkuaW5kZXhPZihwcmlvcml0eSkgPT09IGluZGV4O1xuICB9KS5tYXAoZnVuY3Rpb24gKHByaW9yaXR5KSB7XG4gICAgcmV0dXJuIHNldHRlcnMuZmlsdGVyKGZ1bmN0aW9uIChzZXR0ZXIpIHtcbiAgICAgIHJldHVybiBzZXR0ZXIucHJpb3JpdHkgPT09IHByaW9yaXR5O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBiLnN1YlByaW9yaXR5IC0gYS5zdWJQcmlvcml0eTtcbiAgICB9KTtcbiAgfSkubWFwKGZ1bmN0aW9uIChzZXR0ZXJBcnJheSkge1xuICAgIHJldHVybiBzZXR0ZXJBcnJheVswXTtcbiAgfSk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5UmVmZXJlbmNlRGF0ZSk7XG5cbiAgaWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9IC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuXG5cbiAgdmFyIHV0Y0RhdGUgPSBzdWJNaWxsaXNlY29uZHMoZGF0ZSwgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkYXRlKSk7XG4gIHZhciBmbGFncyA9IHt9O1xuXG4gIHZhciBfaXRlcmF0b3IyID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodW5pcXVlUHJpb3JpdHlTZXR0ZXJzKSxcbiAgICAgIF9zdGVwMjtcblxuICB0cnkge1xuICAgIGZvciAoX2l0ZXJhdG9yMi5zKCk7ICEoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uKCkpLmRvbmU7KSB7XG4gICAgICB2YXIgc2V0dGVyID0gX3N0ZXAyLnZhbHVlO1xuXG4gICAgICBpZiAoIXNldHRlci52YWxpZGF0ZSh1dGNEYXRlLCBzdWJGbk9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzdWx0ID0gc2V0dGVyLnNldCh1dGNEYXRlLCBmbGFncywgc3ViRm5PcHRpb25zKTsgLy8gUmVzdWx0IGlzIHR1cGxlIChkYXRlLCBmbGFncylcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICB1dGNEYXRlID0gcmVzdWx0WzBdO1xuICAgICAgICBhc3NpZ24oZmxhZ3MsIHJlc3VsdFsxXSk7IC8vIFJlc3VsdCBpcyBkYXRlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1dGNEYXRlID0gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2l0ZXJhdG9yMi5lKGVycik7XG4gIH0gZmluYWxseSB7XG4gICAgX2l0ZXJhdG9yMi5mKCk7XG4gIH1cblxuICByZXR1cm4gdXRjRGF0ZTtcbn1cblxuZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nKGlucHV0KSB7XG4gIHJldHVybiBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKVsxXS5yZXBsYWNlKGRvdWJsZVF1b3RlUmVnRXhwLCBcIidcIik7XG59IiwiaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5Ib3VyLCBtaWxsaXNlY29uZHNJbk1pbnV0ZSB9IGZyb20gXCIuLi9jb25zdGFudHMvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBwYXJzZUlTT1xuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBQYXJzZSBJU08gc3RyaW5nXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gc3RyaW5nIGluIElTTyA4NjAxIGZvcm1hdCBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogRnVuY3Rpb24gYWNjZXB0cyBjb21wbGV0ZSBJU08gODYwMSBmb3JtYXRzIGFzIHdlbGwgYXMgcGFydGlhbCBpbXBsZW1lbnRhdGlvbnMuXG4gKiBJU08gODYwMTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMVxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpc24ndCBhIHN0cmluZywgdGhlIGZ1bmN0aW9uIGNhbm5vdCBwYXJzZSB0aGUgc3RyaW5nIG9yXG4gKiB0aGUgdmFsdWVzIGFyZSBpbnZhbGlkLCBpdCByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYXJndW1lbnQgLSB0aGUgdmFsdWUgdG8gY29udmVydFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIGFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKiBAcGFyYW0gezB8MXwyfSBbb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzPTJdIC0gdGhlIGFkZGl0aW9uYWwgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgZXh0ZW5kZWQgeWVhciBmb3JtYXRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBtdXN0IGJlIDAsIDEgb3IgMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHN0cmluZyAnMjAxNC0wMi0xMVQxMTozMDozMCcgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHBhcnNlSVNPKCcyMDE0LTAyLTExVDExOjMwOjMwJylcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgc3RyaW5nICcrMDIwMTQxMDEnIHRvIGRhdGUsXG4gKiAvLyBpZiB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBleHRlbmRlZCB5ZWFyIGZvcm1hdCBpcyAxOlxuICogY29uc3QgcmVzdWx0ID0gcGFyc2VJU08oJyswMjAxNDEwMScsIHsgYWRkaXRpb25hbERpZ2l0czogMSB9KVxuICogLy89PiBGcmkgQXByIDExIDIwMTQgMDA6MDA6MDBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYXJzZUlTTyhhcmd1bWVudCwgb3B0aW9ucykge1xuICB2YXIgX29wdGlvbnMkYWRkaXRpb25hbERpO1xuXG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgYWRkaXRpb25hbERpZ2l0cyA9IHRvSW50ZWdlcigoX29wdGlvbnMkYWRkaXRpb25hbERpID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHMpICE9PSBudWxsICYmIF9vcHRpb25zJGFkZGl0aW9uYWxEaSAhPT0gdm9pZCAwID8gX29wdGlvbnMkYWRkaXRpb25hbERpIDogMik7XG5cbiAgaWYgKGFkZGl0aW9uYWxEaWdpdHMgIT09IDIgJiYgYWRkaXRpb25hbERpZ2l0cyAhPT0gMSAmJiBhZGRpdGlvbmFsRGlnaXRzICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2FkZGl0aW9uYWxEaWdpdHMgbXVzdCBiZSAwLCAxIG9yIDInKTtcbiAgfVxuXG4gIGlmICghKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KSA9PT0gJ1tvYmplY3QgU3RyaW5nXScpKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cblxuICB2YXIgZGF0ZVN0cmluZ3MgPSBzcGxpdERhdGVTdHJpbmcoYXJndW1lbnQpO1xuICB2YXIgZGF0ZTtcblxuICBpZiAoZGF0ZVN0cmluZ3MuZGF0ZSkge1xuICAgIHZhciBwYXJzZVllYXJSZXN1bHQgPSBwYXJzZVllYXIoZGF0ZVN0cmluZ3MuZGF0ZSwgYWRkaXRpb25hbERpZ2l0cyk7XG4gICAgZGF0ZSA9IHBhcnNlRGF0ZShwYXJzZVllYXJSZXN1bHQucmVzdERhdGVTdHJpbmcsIHBhcnNlWWVhclJlc3VsdC55ZWFyKTtcbiAgfVxuXG4gIGlmICghZGF0ZSB8fCBpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxuXG4gIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIHRpbWUgPSAwO1xuICB2YXIgb2Zmc2V0O1xuXG4gIGlmIChkYXRlU3RyaW5ncy50aW1lKSB7XG4gICAgdGltZSA9IHBhcnNlVGltZShkYXRlU3RyaW5ncy50aW1lKTtcblxuICAgIGlmIChpc05hTih0aW1lKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRhdGVTdHJpbmdzLnRpbWV6b25lKSB7XG4gICAgb2Zmc2V0ID0gcGFyc2VUaW1lem9uZShkYXRlU3RyaW5ncy50aW1lem9uZSk7XG5cbiAgICBpZiAoaXNOYU4ob2Zmc2V0KSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBkaXJ0eURhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lKTsgLy8ganMgcGFyc2VkIHN0cmluZyBhc3N1bWluZyBpdCdzIGluIFVUQyB0aW1lem9uZVxuICAgIC8vIGJ1dCB3ZSBuZWVkIGl0IHRvIGJlIHBhcnNlZCBpbiBvdXIgdGltZXpvbmVcbiAgICAvLyBzbyB3ZSB1c2UgdXRjIHZhbHVlcyB0byBidWlsZCBkYXRlIGluIG91ciB0aW1lem9uZS5cbiAgICAvLyBZZWFyIHZhbHVlcyBmcm9tIDAgdG8gOTkgbWFwIHRvIHRoZSB5ZWFycyAxOTAwIHRvIDE5OTlcbiAgICAvLyBzbyBzZXQgeWVhciBleHBsaWNpdGx5IHdpdGggc2V0RnVsbFllYXIuXG5cbiAgICB2YXIgcmVzdWx0ID0gbmV3IERhdGUoMCk7XG4gICAgcmVzdWx0LnNldEZ1bGxZZWFyKGRpcnR5RGF0ZS5nZXRVVENGdWxsWWVhcigpLCBkaXJ0eURhdGUuZ2V0VVRDTW9udGgoKSwgZGlydHlEYXRlLmdldFVUQ0RhdGUoKSk7XG4gICAgcmVzdWx0LnNldEhvdXJzKGRpcnR5RGF0ZS5nZXRVVENIb3VycygpLCBkaXJ0eURhdGUuZ2V0VVRDTWludXRlcygpLCBkaXJ0eURhdGUuZ2V0VVRDU2Vjb25kcygpLCBkaXJ0eURhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgdGltZSArIG9mZnNldCk7XG59XG52YXIgcGF0dGVybnMgPSB7XG4gIGRhdGVUaW1lRGVsaW1pdGVyOiAvW1QgXS8sXG4gIHRpbWVab25lRGVsaW1pdGVyOiAvW1ogXS9pLFxuICB0aW1lem9uZTogLyhbWistXS4qKSQvXG59O1xudmFyIGRhdGVSZWdleCA9IC9eLT8oPzooXFxkezN9KXwoXFxkezJ9KSg/Oi0/KFxcZHsyfSkpP3xXKFxcZHsyfSkoPzotPyhcXGR7MX0pKT98KSQvO1xudmFyIHRpbWVSZWdleCA9IC9eKFxcZHsyfSg/OlsuLF1cXGQqKT8pKD86Oj8oXFxkezJ9KD86Wy4sXVxcZCopPykpPyg/Ojo/KFxcZHsyfSg/OlsuLF1cXGQqKT8pKT8kLztcbnZhciB0aW1lem9uZVJlZ2V4ID0gL14oWystXSkoXFxkezJ9KSg/Ojo/KFxcZHsyfSkpPyQvO1xuXG5mdW5jdGlvbiBzcGxpdERhdGVTdHJpbmcoZGF0ZVN0cmluZykge1xuICB2YXIgZGF0ZVN0cmluZ3MgPSB7fTtcbiAgdmFyIGFycmF5ID0gZGF0ZVN0cmluZy5zcGxpdChwYXR0ZXJucy5kYXRlVGltZURlbGltaXRlcik7XG4gIHZhciB0aW1lU3RyaW5nOyAvLyBUaGUgcmVnZXggbWF0Y2ggc2hvdWxkIG9ubHkgcmV0dXJuIGF0IG1heGltdW0gdHdvIGFycmF5IGVsZW1lbnRzLlxuICAvLyBbZGF0ZV0sIFt0aW1lXSwgb3IgW2RhdGUsIHRpbWVdLlxuXG4gIGlmIChhcnJheS5sZW5ndGggPiAyKSB7XG4gICAgcmV0dXJuIGRhdGVTdHJpbmdzO1xuICB9XG5cbiAgaWYgKC86Ly50ZXN0KGFycmF5WzBdKSkge1xuICAgIHRpbWVTdHJpbmcgPSBhcnJheVswXTtcbiAgfSBlbHNlIHtcbiAgICBkYXRlU3RyaW5ncy5kYXRlID0gYXJyYXlbMF07XG4gICAgdGltZVN0cmluZyA9IGFycmF5WzFdO1xuXG4gICAgaWYgKHBhdHRlcm5zLnRpbWVab25lRGVsaW1pdGVyLnRlc3QoZGF0ZVN0cmluZ3MuZGF0ZSkpIHtcbiAgICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLnRpbWVab25lRGVsaW1pdGVyKVswXTtcbiAgICAgIHRpbWVTdHJpbmcgPSBkYXRlU3RyaW5nLnN1YnN0cihkYXRlU3RyaW5ncy5kYXRlLmxlbmd0aCwgZGF0ZVN0cmluZy5sZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aW1lU3RyaW5nKSB7XG4gICAgdmFyIHRva2VuID0gcGF0dGVybnMudGltZXpvbmUuZXhlYyh0aW1lU3RyaW5nKTtcblxuICAgIGlmICh0b2tlbikge1xuICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmcucmVwbGFjZSh0b2tlblsxXSwgJycpO1xuICAgICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgPSB0b2tlblsxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGVTdHJpbmdzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVllYXIoZGF0ZVN0cmluZywgYWRkaXRpb25hbERpZ2l0cykge1xuICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKCdeKD86KFxcXFxkezR9fFsrLV1cXFxcZHsnICsgKDQgKyBhZGRpdGlvbmFsRGlnaXRzKSArICd9KXwoXFxcXGR7Mn18WystXVxcXFxkeycgKyAoMiArIGFkZGl0aW9uYWxEaWdpdHMpICsgJ30pJCknKTtcbiAgdmFyIGNhcHR1cmVzID0gZGF0ZVN0cmluZy5tYXRjaChyZWdleCk7IC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB5ZWFyXG5cbiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIHtcbiAgICB5ZWFyOiBOYU4sXG4gICAgcmVzdERhdGVTdHJpbmc6ICcnXG4gIH07XG4gIHZhciB5ZWFyID0gY2FwdHVyZXNbMV0gPyBwYXJzZUludChjYXB0dXJlc1sxXSkgOiBudWxsO1xuICB2YXIgY2VudHVyeSA9IGNhcHR1cmVzWzJdID8gcGFyc2VJbnQoY2FwdHVyZXNbMl0pIDogbnVsbDsgLy8gZWl0aGVyIHllYXIgb3IgY2VudHVyeSBpcyBudWxsLCBub3QgYm90aFxuXG4gIHJldHVybiB7XG4gICAgeWVhcjogY2VudHVyeSA9PT0gbnVsbCA/IHllYXIgOiBjZW50dXJ5ICogMTAwLFxuICAgIHJlc3REYXRlU3RyaW5nOiBkYXRlU3RyaW5nLnNsaWNlKChjYXB0dXJlc1sxXSB8fCBjYXB0dXJlc1syXSkubGVuZ3RoKVxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZURhdGUoZGF0ZVN0cmluZywgeWVhcikge1xuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgeWVhclxuICBpZiAoeWVhciA9PT0gbnVsbCkgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIHZhciBjYXB0dXJlcyA9IGRhdGVTdHJpbmcubWF0Y2goZGF0ZVJlZ2V4KTsgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHN0cmluZ1xuXG4gIGlmICghY2FwdHVyZXMpIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB2YXIgaXNXZWVrRGF0ZSA9ICEhY2FwdHVyZXNbNF07XG4gIHZhciBkYXlPZlllYXIgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzFdKTtcbiAgdmFyIG1vbnRoID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1syXSkgLSAxO1xuICB2YXIgZGF5ID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1szXSk7XG4gIHZhciB3ZWVrID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1s0XSk7XG4gIHZhciBkYXlPZldlZWsgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzVdKSAtIDE7XG5cbiAgaWYgKGlzV2Vla0RhdGUpIHtcbiAgICBpZiAoIXZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaywgZGF5T2ZXZWVrKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRheU9mSVNPV2Vla1llYXIoeWVhciwgd2VlaywgZGF5T2ZXZWVrKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKDApO1xuXG4gICAgaWYgKCF2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRheSkgfHwgIXZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG5cbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoLCBNYXRoLm1heChkYXlPZlllYXIsIGRheSkpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF0ZVVuaXQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID8gcGFyc2VJbnQodmFsdWUpIDogMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUaW1lKHRpbWVTdHJpbmcpIHtcbiAgdmFyIGNhcHR1cmVzID0gdGltZVN0cmluZy5tYXRjaCh0aW1lUmVnZXgpO1xuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4gTmFOOyAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgdGltZVxuXG4gIHZhciBob3VycyA9IHBhcnNlVGltZVVuaXQoY2FwdHVyZXNbMV0pO1xuICB2YXIgbWludXRlcyA9IHBhcnNlVGltZVVuaXQoY2FwdHVyZXNbMl0pO1xuICB2YXIgc2Vjb25kcyA9IHBhcnNlVGltZVVuaXQoY2FwdHVyZXNbM10pO1xuXG4gIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICByZXR1cm4gaG91cnMgKiBtaWxsaXNlY29uZHNJbkhvdXIgKyBtaW51dGVzICogbWlsbGlzZWNvbmRzSW5NaW51dGUgKyBzZWNvbmRzICogMTAwMDtcbn1cblxuZnVuY3Rpb24gcGFyc2VUaW1lVW5pdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgcGFyc2VGbG9hdCh2YWx1ZS5yZXBsYWNlKCcsJywgJy4nKSkgfHwgMDtcbn1cblxuZnVuY3Rpb24gcGFyc2VUaW1lem9uZSh0aW1lem9uZVN0cmluZykge1xuICBpZiAodGltZXpvbmVTdHJpbmcgPT09ICdaJykgcmV0dXJuIDA7XG4gIHZhciBjYXB0dXJlcyA9IHRpbWV6b25lU3RyaW5nLm1hdGNoKHRpbWV6b25lUmVnZXgpO1xuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4gMDtcbiAgdmFyIHNpZ24gPSBjYXB0dXJlc1sxXSA9PT0gJysnID8gLTEgOiAxO1xuICB2YXIgaG91cnMgPSBwYXJzZUludChjYXB0dXJlc1syXSk7XG4gIHZhciBtaW51dGVzID0gY2FwdHVyZXNbM10gJiYgcGFyc2VJbnQoY2FwdHVyZXNbM10pIHx8IDA7XG5cbiAgaWYgKCF2YWxpZGF0ZVRpbWV6b25lKGhvdXJzLCBtaW51dGVzKSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICByZXR1cm4gc2lnbiAqIChob3VycyAqIG1pbGxpc2Vjb25kc0luSG91ciArIG1pbnV0ZXMgKiBtaWxsaXNlY29uZHNJbk1pbnV0ZSk7XG59XG5cbmZ1bmN0aW9uIGRheU9mSVNPV2Vla1llYXIoaXNvV2Vla1llYXIsIHdlZWssIGRheSkge1xuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKDApO1xuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGlzb1dlZWtZZWFyLCAwLCA0KTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeURheSA9IGRhdGUuZ2V0VVRDRGF5KCkgfHwgNztcbiAgdmFyIGRpZmYgPSAod2VlayAtIDEpICogNyArIGRheSArIDEgLSBmb3VydGhPZkphbnVhcnlEYXk7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIGRpZmYpO1xuICByZXR1cm4gZGF0ZTtcbn0gLy8gVmFsaWRhdGlvbiBmdW5jdGlvbnNcbi8vIEZlYnJ1YXJ5IGlzIG51bGwgdG8gaGFuZGxlIHRoZSBsZWFwIHllYXIgKHVzaW5nIHx8KVxuXG5cbnZhciBkYXlzSW5Nb250aHMgPSBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTtcblxuZnVuY3Rpb24gaXNMZWFwWWVhckluZGV4KHllYXIpIHtcbiAgcmV0dXJuIHllYXIgJSA0MDAgPT09IDAgfHwgeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXRlKSB7XG4gIHJldHVybiBtb250aCA+PSAwICYmIG1vbnRoIDw9IDExICYmIGRhdGUgPj0gMSAmJiBkYXRlIDw9IChkYXlzSW5Nb250aHNbbW9udGhdIHx8IChpc0xlYXBZZWFySW5kZXgoeWVhcikgPyAyOSA6IDI4KSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpIHtcbiAgcmV0dXJuIGRheU9mWWVhciA+PSAxICYmIGRheU9mWWVhciA8PSAoaXNMZWFwWWVhckluZGV4KHllYXIpID8gMzY2IDogMzY1KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXZWVrRGF0ZShfeWVhciwgd2VlaywgZGF5KSB7XG4gIHJldHVybiB3ZWVrID49IDEgJiYgd2VlayA8PSA1MyAmJiBkYXkgPj0gMCAmJiBkYXkgPD0gNjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XG4gIGlmIChob3VycyA9PT0gMjQpIHtcbiAgICByZXR1cm4gbWludXRlcyA9PT0gMCAmJiBzZWNvbmRzID09PSAwO1xuICB9XG5cbiAgcmV0dXJuIHNlY29uZHMgPj0gMCAmJiBzZWNvbmRzIDwgNjAgJiYgbWludXRlcyA+PSAwICYmIG1pbnV0ZXMgPCA2MCAmJiBob3VycyA+PSAwICYmIGhvdXJzIDwgMjU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGltZXpvbmUoX2hvdXJzLCBtaW51dGVzKSB7XG4gIHJldHVybiBtaW51dGVzID49IDAgJiYgbWludXRlcyA8PSA1OTtcbn0iLCJpbXBvcnQge2NyZWF0ZUVsZW1lbnQsQ29tcG9uZW50fWZyb20ncmVhY3QnO2ltcG9ydCB7ZmluZERPTU5vZGV9ZnJvbSdyZWFjdC1kb20nO2Z1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcblxuICBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59LyoqXG4gKiBDaGVjayB3aGV0aGVyIHNvbWUgRE9NIG5vZGUgaXMgb3VyIENvbXBvbmVudCdzIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGlzTm9kZUZvdW5kKGN1cnJlbnQsIGNvbXBvbmVudE5vZGUsIGlnbm9yZUNsYXNzKSB7XG4gIGlmIChjdXJyZW50ID09PSBjb21wb25lbnROb2RlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gU1ZHIDx1c2UvPiBlbGVtZW50cyBkbyBub3QgdGVjaG5pY2FsbHkgcmVzaWRlIGluIHRoZSByZW5kZXJlZCBET00sIHNvXG4gIC8vIHRoZXkgZG8gbm90IGhhdmUgY2xhc3NMaXN0IGRpcmVjdGx5LCBidXQgdGhleSBvZmZlciBhIGxpbmsgdG8gdGhlaXJcbiAgLy8gY29ycmVzcG9uZGluZyBlbGVtZW50LCB3aGljaCBjYW4gaGF2ZSBjbGFzc0xpc3QuIFRoaXMgZXh0cmEgY2hlY2sgaXMgZm9yXG4gIC8vIHRoYXQgY2FzZS5cbiAgLy8gU2VlOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9zdHJ1Y3QuaHRtbCNJbnRlcmZhY2VTVkdVc2VFbGVtZW50XG4gIC8vIERpc2N1c3Npb246IGh0dHBzOi8vZ2l0aHViLmNvbS9Qb21heC9yZWFjdC1vbmNsaWNrb3V0c2lkZS9wdWxsLzE3XG5cblxuICBpZiAoY3VycmVudC5jb3JyZXNwb25kaW5nRWxlbWVudCkge1xuICAgIHJldHVybiBjdXJyZW50LmNvcnJlc3BvbmRpbmdFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhpZ25vcmVDbGFzcyk7XG4gIH1cblxuICByZXR1cm4gY3VycmVudC5jbGFzc0xpc3QuY29udGFpbnMoaWdub3JlQ2xhc3MpO1xufVxuLyoqXG4gKiBUcnkgdG8gZmluZCBvdXIgbm9kZSBpbiBhIGhpZXJhcmNoeSBvZiBub2RlcywgcmV0dXJuaW5nIHRoZSBkb2N1bWVudFxuICogbm9kZSBhcyBoaWdoZXN0IG5vZGUgaWYgb3VyIG5vZGUgaXMgbm90IGZvdW5kIGluIHRoZSBwYXRoIHVwLlxuICovXG5cbmZ1bmN0aW9uIGZpbmRIaWdoZXN0KGN1cnJlbnQsIGNvbXBvbmVudE5vZGUsIGlnbm9yZUNsYXNzKSB7XG4gIGlmIChjdXJyZW50ID09PSBjb21wb25lbnROb2RlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gSWYgc291cmNlPWxvY2FsIHRoZW4gdGhpcyBldmVudCBjYW1lIGZyb20gJ3NvbWV3aGVyZSdcbiAgLy8gaW5zaWRlIGFuZCBzaG91bGQgYmUgaWdub3JlZC4gV2UgY291bGQgaGFuZGxlIHRoaXMgd2l0aFxuICAvLyBhIGxheWVyZWQgYXBwcm9hY2gsIHRvbywgYnV0IHRoYXQgcmVxdWlyZXMgZ29pbmcgYmFjayB0b1xuICAvLyB0aGlua2luZyBpbiB0ZXJtcyBvZiBEb20gbm9kZSBuZXN0aW5nLCBydW5uaW5nIGNvdW50ZXJcbiAgLy8gdG8gUmVhY3QncyAneW91IHNob3VsZG4ndCBjYXJlIGFib3V0IHRoZSBET00nIHBoaWxvc29waHkuXG4gIC8vIEFsc28gY292ZXIgc2hhZG93Um9vdCBub2RlIGJ5IGNoZWNraW5nIGN1cnJlbnQuaG9zdFxuXG5cbiAgd2hpbGUgKGN1cnJlbnQucGFyZW50Tm9kZSB8fCBjdXJyZW50Lmhvc3QpIHtcbiAgICAvLyBPbmx5IGNoZWNrIG5vcm1hbCBub2RlIHdpdGhvdXQgc2hhZG93Um9vdFxuICAgIGlmIChjdXJyZW50LnBhcmVudE5vZGUgJiYgaXNOb2RlRm91bmQoY3VycmVudCwgY29tcG9uZW50Tm9kZSwgaWdub3JlQ2xhc3MpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnROb2RlIHx8IGN1cnJlbnQuaG9zdDtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50O1xufVxuLyoqXG4gKiBDaGVjayBpZiB0aGUgYnJvd3NlciBzY3JvbGxiYXIgd2FzIGNsaWNrZWRcbiAqL1xuXG5mdW5jdGlvbiBjbGlja2VkU2Nyb2xsYmFyKGV2dCkge1xuICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIDw9IGV2dC5jbGllbnRYIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgPD0gZXZ0LmNsaWVudFk7XG59Ly8gaWRlYWxseSB3aWxsIGdldCByZXBsYWNlZCB3aXRoIGV4dGVybmFsIGRlcFxuLy8gd2hlbiByYWZyZXgvZGV0ZWN0LXBhc3NpdmUtZXZlbnRzIzQgYW5kIHJhZnJleC9kZXRlY3QtcGFzc2l2ZS1ldmVudHMjNSBnZXQgbWVyZ2VkIGluXG52YXIgdGVzdFBhc3NpdmVFdmVudFN1cHBvcnQgPSBmdW5jdGlvbiB0ZXN0UGFzc2l2ZUV2ZW50U3VwcG9ydCgpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwYXNzaXZlID0gZmFsc2U7XG4gIHZhciBvcHRpb25zID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAncGFzc2l2ZScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHBhc3NpdmUgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgdmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG5cbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3RQYXNzaXZlRXZlbnRTdXBwb3J0Jywgbm9vcCwgb3B0aW9ucyk7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0UGFzc2l2ZUV2ZW50U3VwcG9ydCcsIG5vb3AsIG9wdGlvbnMpO1xuICByZXR1cm4gcGFzc2l2ZTtcbn07ZnVuY3Rpb24gYXV0b0luYyhzZWVkKSB7XG4gIGlmIChzZWVkID09PSB2b2lkIDApIHtcbiAgICBzZWVkID0gMDtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICsrc2VlZDtcbiAgfTtcbn1cblxudmFyIHVpZCA9IGF1dG9JbmMoKTt2YXIgcGFzc2l2ZUV2ZW50U3VwcG9ydDtcbnZhciBoYW5kbGVyc01hcCA9IHt9O1xudmFyIGVuYWJsZWRJbnN0YW5jZXMgPSB7fTtcbnZhciB0b3VjaEV2ZW50cyA9IFsndG91Y2hzdGFydCcsICd0b3VjaG1vdmUnXTtcbnZhciBJR05PUkVfQ0xBU1NfTkFNRSA9ICdpZ25vcmUtcmVhY3Qtb25jbGlja291dHNpZGUnO1xuLyoqXG4gKiBPcHRpb25zIGZvciBhZGRFdmVudEhhbmRsZXIgYW5kIHJlbW92ZUV2ZW50SGFuZGxlclxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50SGFuZGxlck9wdGlvbnMoaW5zdGFuY2UsIGV2ZW50TmFtZSkge1xuICB2YXIgaGFuZGxlck9wdGlvbnMgPSB7fTtcbiAgdmFyIGlzVG91Y2hFdmVudCA9IHRvdWNoRXZlbnRzLmluZGV4T2YoZXZlbnROYW1lKSAhPT0gLTE7XG5cbiAgaWYgKGlzVG91Y2hFdmVudCAmJiBwYXNzaXZlRXZlbnRTdXBwb3J0KSB7XG4gICAgaGFuZGxlck9wdGlvbnMucGFzc2l2ZSA9ICFpbnN0YW5jZS5wcm9wcy5wcmV2ZW50RGVmYXVsdDtcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVyT3B0aW9ucztcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgdGhlIEhPQyBmdW5jdGlvbiB0aGF0IHlvdSdsbCB1c2VcbiAqIGluIG9yZGVyIHRvIGltcGFydCBvbk91dHNpZGVDbGljayBsaXN0ZW5pbmcgdG8gYW5cbiAqIGFyYml0cmFyeSBjb21wb25lbnQuIEl0IGdldHMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlXG4gKiBib290c3RyYXBwaW5nIGNvZGUgdG8geWllbGQgYW4gaW5zdGFuY2Ugb2YgdGhlXG4gKiBvbkNsaWNrT3V0c2lkZUhPQyBmdW5jdGlvbiBkZWZpbmVkIGluc2lkZSBzZXR1cEhPQygpLlxuICovXG5cblxuZnVuY3Rpb24gb25DbGlja091dHNpZGVIT0MoV3JhcHBlZENvbXBvbmVudCwgY29uZmlnKSB7XG4gIHZhciBfY2xhc3MsIF90ZW1wO1xuXG4gIHZhciBjb21wb25lbnROYW1lID0gV3JhcHBlZENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBXcmFwcGVkQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG4gIHJldHVybiBfdGVtcCA9IF9jbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICAgIF9pbmhlcml0c0xvb3NlKG9uQ2xpY2tPdXRzaWRlLCBfQ29tcG9uZW50KTtcblxuICAgIGZ1bmN0aW9uIG9uQ2xpY2tPdXRzaWRlKHByb3BzKSB7XG4gICAgICB2YXIgX3RoaXM7XG5cbiAgICAgIF90aGlzID0gX0NvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuXG4gICAgICBfdGhpcy5fX291dHNpZGVDbGlja0hhbmRsZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBfdGhpcy5fX2NsaWNrT3V0c2lkZUhhbmRsZXJQcm9wID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgX3RoaXMuX19jbGlja091dHNpZGVIYW5kbGVyUHJvcChldmVudCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaW5zdGFuY2UgPSBfdGhpcy5nZXRJbnN0YW5jZSgpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UucHJvcHMuaGFuZGxlQ2xpY2tPdXRzaWRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaW5zdGFuY2UucHJvcHMuaGFuZGxlQ2xpY2tPdXRzaWRlKGV2ZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmhhbmRsZUNsaWNrT3V0c2lkZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGluc3RhbmNlLmhhbmRsZUNsaWNrT3V0c2lkZShldmVudCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JhcHBlZENvbXBvbmVudDogXCIgKyBjb21wb25lbnROYW1lICsgXCIgbGFja3MgYSBoYW5kbGVDbGlja091dHNpZGUoZXZlbnQpIGZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIG91dHNpZGUgY2xpY2sgZXZlbnRzLlwiKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9fZ2V0Q29tcG9uZW50Tm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gX3RoaXMuZ2V0SW5zdGFuY2UoKTtcblxuICAgICAgICBpZiAoY29uZmlnICYmIHR5cGVvZiBjb25maWcuc2V0Q2xpY2tPdXRzaWRlUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5zZXRDbGlja091dHNpZGVSZWYoKShpbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLnNldENsaWNrT3V0c2lkZVJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5zZXRDbGlja091dHNpZGVSZWYoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaW5kRE9NTm9kZShpbnN0YW5jZSk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5lbmFibGVPbkNsaWNrT3V0c2lkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgZW5hYmxlZEluc3RhbmNlc1tfdGhpcy5fdWlkXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGFzc2l2ZUV2ZW50U3VwcG9ydCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBwYXNzaXZlRXZlbnRTdXBwb3J0ID0gdGVzdFBhc3NpdmVFdmVudFN1cHBvcnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVuYWJsZWRJbnN0YW5jZXNbX3RoaXMuX3VpZF0gPSB0cnVlO1xuICAgICAgICB2YXIgZXZlbnRzID0gX3RoaXMucHJvcHMuZXZlbnRUeXBlcztcblxuICAgICAgICBpZiAoIWV2ZW50cy5mb3JFYWNoKSB7XG4gICAgICAgICAgZXZlbnRzID0gW2V2ZW50c107XG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVyc01hcFtfdGhpcy5fdWlkXSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGlmIChfdGhpcy5jb21wb25lbnROb2RlID09PSBudWxsKSByZXR1cm47XG5cbiAgICAgICAgICBpZiAoX3RoaXMucHJvcHMucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF90aGlzLnByb3BzLnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF90aGlzLnByb3BzLmV4Y2x1ZGVTY3JvbGxiYXIgJiYgY2xpY2tlZFNjcm9sbGJhcihldmVudCkpIHJldHVybjtcbiAgICAgICAgICB2YXIgY3VycmVudCA9IGV2ZW50LmNvbXBvc2VkICYmIGV2ZW50LmNvbXBvc2VkUGF0aCAmJiBldmVudC5jb21wb3NlZFBhdGgoKS5zaGlmdCgpIHx8IGV2ZW50LnRhcmdldDtcblxuICAgICAgICAgIGlmIChmaW5kSGlnaGVzdChjdXJyZW50LCBfdGhpcy5jb21wb25lbnROb2RlLCBfdGhpcy5wcm9wcy5vdXRzaWRlQ2xpY2tJZ25vcmVDbGFzcykgIT09IGRvY3VtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMuX19vdXRzaWRlQ2xpY2tIYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgfTtcblxuICAgICAgICBldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnROYW1lKSB7XG4gICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGhhbmRsZXJzTWFwW190aGlzLl91aWRdLCBnZXRFdmVudEhhbmRsZXJPcHRpb25zKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBldmVudE5hbWUpKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5kaXNhYmxlT25DbGlja091dHNpZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlbGV0ZSBlbmFibGVkSW5zdGFuY2VzW190aGlzLl91aWRdO1xuICAgICAgICB2YXIgZm4gPSBoYW5kbGVyc01hcFtfdGhpcy5fdWlkXTtcblxuICAgICAgICBpZiAoZm4gJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHZhciBldmVudHMgPSBfdGhpcy5wcm9wcy5ldmVudFR5cGVzO1xuXG4gICAgICAgICAgaWYgKCFldmVudHMuZm9yRWFjaCkge1xuICAgICAgICAgICAgZXZlbnRzID0gW2V2ZW50c107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmbiwgZ2V0RXZlbnRIYW5kbGVyT3B0aW9ucyhfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgZXZlbnROYW1lKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGVsZXRlIGhhbmRsZXJzTWFwW190aGlzLl91aWRdO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5nZXRSZWYgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5pbnN0YW5jZVJlZiA9IHJlZjtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl91aWQgPSB1aWQoKTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWNjZXNzIHRoZSBXcmFwcGVkQ29tcG9uZW50J3MgaW5zdGFuY2UuXG4gICAgICovXG5cblxuICAgIHZhciBfcHJvdG8gPSBvbkNsaWNrT3V0c2lkZS5wcm90b3R5cGU7XG5cbiAgICBfcHJvdG8uZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiBnZXRJbnN0YW5jZSgpIHtcbiAgICAgIGlmIChXcmFwcGVkQ29tcG9uZW50LnByb3RvdHlwZSAmJiAhV3JhcHBlZENvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiA9IHRoaXMuaW5zdGFuY2VSZWY7XG4gICAgICByZXR1cm4gcmVmLmdldEluc3RhbmNlID8gcmVmLmdldEluc3RhbmNlKCkgOiByZWY7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEFkZCBjbGljayBsaXN0ZW5lcnMgdG8gdGhlIGN1cnJlbnQgZG9jdW1lbnQsXG4gICAgICogbGlua2VkIHRvIHRoaXMgY29tcG9uZW50J3Mgc3RhdGUuXG4gICAgICovXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAvLyBJZiB3ZSBhcmUgaW4gYW4gZW52aXJvbm1lbnQgd2l0aG91dCBhIERPTSBzdWNoXG4gICAgICAvLyBhcyBzaGFsbG93IHJlbmRlcmluZyBvciBzbmFwc2hvdHMgdGhlbiB3ZSBleGl0XG4gICAgICAvLyBlYXJseSB0byBwcmV2ZW50IGFueSB1bmhhbmRsZWQgZXJyb3JzIGJlaW5nIHRocm93bi5cbiAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnIHx8ICFkb2N1bWVudC5jcmVhdGVFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGluc3RhbmNlID0gdGhpcy5nZXRJbnN0YW5jZSgpO1xuXG4gICAgICBpZiAoY29uZmlnICYmIHR5cGVvZiBjb25maWcuaGFuZGxlQ2xpY2tPdXRzaWRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuX19jbGlja091dHNpZGVIYW5kbGVyUHJvcCA9IGNvbmZpZy5oYW5kbGVDbGlja091dHNpZGUoaW5zdGFuY2UpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fX2NsaWNrT3V0c2lkZUhhbmRsZXJQcm9wICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JhcHBlZENvbXBvbmVudDogXCIgKyBjb21wb25lbnROYW1lICsgXCIgbGFja3MgYSBmdW5jdGlvbiBmb3IgcHJvY2Vzc2luZyBvdXRzaWRlIGNsaWNrIGV2ZW50cyBzcGVjaWZpZWQgYnkgdGhlIGhhbmRsZUNsaWNrT3V0c2lkZSBjb25maWcgb3B0aW9uLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbXBvbmVudE5vZGUgPSB0aGlzLl9fZ2V0Q29tcG9uZW50Tm9kZSgpOyAvLyByZXR1cm4gZWFybHkgc28gd2UgZG9udCBpbml0aWF0ZSBvbkNsaWNrT3V0c2lkZVxuXG4gICAgICBpZiAodGhpcy5wcm9wcy5kaXNhYmxlT25DbGlja091dHNpZGUpIHJldHVybjtcbiAgICAgIHRoaXMuZW5hYmxlT25DbGlja091dHNpZGUoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50Tm9kZSA9IHRoaXMuX19nZXRDb21wb25lbnROb2RlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbGwgZG9jdW1lbnQncyBldmVudCBsaXN0ZW5lcnMgZm9yIHRoaXMgY29tcG9uZW50XG4gICAgICovXG4gICAgO1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLmRpc2FibGVPbkNsaWNrT3V0c2lkZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYW4gYmUgY2FsbGVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGV2ZW50IGxpc3RlbmluZ1xuICAgICAqIGZvciBjbGlja3MgYW5kIHRvdWNoZXMgb3V0c2lkZSBvZiB0aGlzIGVsZW1lbnQuXG4gICAgICovXG4gICAgO1xuXG4gICAgLyoqXG4gICAgICogUGFzcy10aHJvdWdoIHJlbmRlclxuICAgICAqL1xuICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgICAgICAgX3RoaXMkcHJvcHMuZXhjbHVkZVNjcm9sbGJhcjtcbiAgICAgICAgICB2YXIgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiZXhjbHVkZVNjcm9sbGJhclwiXSk7XG5cbiAgICAgIGlmIChXcmFwcGVkQ29tcG9uZW50LnByb3RvdHlwZSAmJiBXcmFwcGVkQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KSB7XG4gICAgICAgIHByb3BzLnJlZiA9IHRoaXMuZ2V0UmVmO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcHMud3JhcHBlZFJlZiA9IHRoaXMuZ2V0UmVmO1xuICAgICAgfVxuXG4gICAgICBwcm9wcy5kaXNhYmxlT25DbGlja091dHNpZGUgPSB0aGlzLmRpc2FibGVPbkNsaWNrT3V0c2lkZTtcbiAgICAgIHByb3BzLmVuYWJsZU9uQ2xpY2tPdXRzaWRlID0gdGhpcy5lbmFibGVPbkNsaWNrT3V0c2lkZTtcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIHByb3BzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG9uQ2xpY2tPdXRzaWRlO1xuICB9KENvbXBvbmVudCksIF9jbGFzcy5kaXNwbGF5TmFtZSA9IFwiT25DbGlja091dHNpZGUoXCIgKyBjb21wb25lbnROYW1lICsgXCIpXCIsIF9jbGFzcy5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZXZlbnRUeXBlczogWydtb3VzZWRvd24nLCAndG91Y2hzdGFydCddLFxuICAgIGV4Y2x1ZGVTY3JvbGxiYXI6IGNvbmZpZyAmJiBjb25maWcuZXhjbHVkZVNjcm9sbGJhciB8fCBmYWxzZSxcbiAgICBvdXRzaWRlQ2xpY2tJZ25vcmVDbGFzczogSUdOT1JFX0NMQVNTX05BTUUsXG4gICAgcHJldmVudERlZmF1bHQ6IGZhbHNlLFxuICAgIHN0b3BQcm9wYWdhdGlvbjogZmFsc2VcbiAgfSwgX2NsYXNzLmdldENsYXNzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBXcmFwcGVkQ29tcG9uZW50LmdldENsYXNzID8gV3JhcHBlZENvbXBvbmVudC5nZXRDbGFzcygpIDogV3JhcHBlZENvbXBvbmVudDtcbiAgfSwgX3RlbXA7XG59ZXhwb3J0IGRlZmF1bHQgb25DbGlja091dHNpZGVIT0M7ZXhwb3J0e0lHTk9SRV9DTEFTU19OQU1FfTsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgdmFyIE1hbmFnZXJSZWZlcmVuY2VOb2RlQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoKTtcbmV4cG9ydCB2YXIgTWFuYWdlclJlZmVyZW5jZU5vZGVTZXR0ZXJDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCgpO1xuZXhwb3J0IGZ1bmN0aW9uIE1hbmFnZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuXG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZShudWxsKSxcbiAgICAgIHJlZmVyZW5jZU5vZGUgPSBfUmVhY3QkdXNlU3RhdGVbMF0sXG4gICAgICBzZXRSZWZlcmVuY2VOb2RlID0gX1JlYWN0JHVzZVN0YXRlWzFdO1xuXG4gIHZhciBoYXNVbm1vdW50ZWQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBoYXNVbm1vdW50ZWQuY3VycmVudCA9IHRydWU7XG4gICAgfTtcbiAgfSwgW10pO1xuICB2YXIgaGFuZGxlU2V0UmVmZXJlbmNlTm9kZSA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgaWYgKCFoYXNVbm1vdW50ZWQuY3VycmVudCkge1xuICAgICAgc2V0UmVmZXJlbmNlTm9kZShub2RlKTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1hbmFnZXJSZWZlcmVuY2VOb2RlQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiByZWZlcmVuY2VOb2RlXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1hbmFnZXJSZWZlcmVuY2VOb2RlU2V0dGVyQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBoYW5kbGVTZXRSZWZlcmVuY2VOb2RlXG4gIH0sIGNoaWxkcmVuKSk7XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIFRha2VzIGFuIGFyZ3VtZW50IGFuZCBpZiBpdCdzIGFuIGFycmF5LCByZXR1cm5zIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcnJheSxcbiAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBhcmd1bWVudC4gVXNlZCBmb3IgUHJlYWN0IGNvbXBhdGliaWxpdHkuXG4gKi9cbmV4cG9ydCB2YXIgdW53cmFwQXJyYXkgPSBmdW5jdGlvbiB1bndyYXBBcnJheShhcmcpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJnKSA/IGFyZ1swXSA6IGFyZztcbn07XG4vKipcbiAqIFRha2VzIGEgbWF5YmUtdW5kZWZpbmVkIGZ1bmN0aW9uIGFuZCBhcmJpdHJhcnkgYXJncyBhbmQgaW52b2tlcyB0aGUgZnVuY3Rpb25cbiAqIG9ubHkgaWYgaXQgaXMgZGVmaW5lZC5cbiAqL1xuXG5leHBvcnQgdmFyIHNhZmVJbnZva2UgPSBmdW5jdGlvbiBzYWZlSW52b2tlKGZuKSB7XG4gIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4uYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgfVxufTtcbi8qKlxuICogU2V0cyBhIHJlZiB1c2luZyBlaXRoZXIgYSByZWYgY2FsbGJhY2sgb3IgYSByZWYgb2JqZWN0XG4gKi9cblxuZXhwb3J0IHZhciBzZXRSZWYgPSBmdW5jdGlvbiBzZXRSZWYocmVmLCBub2RlKSB7XG4gIC8vIGlmIGl0cyBhIGZ1bmN0aW9uIGNhbGwgaXRcbiAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc2FmZUludm9rZShyZWYsIG5vZGUpO1xuICB9IC8vIG90aGVyd2lzZSB3ZSBzaG91bGQgdHJlYXQgaXQgYXMgYSByZWYgb2JqZWN0XG4gIGVsc2UgaWYgKHJlZiAhPSBudWxsKSB7XG4gICAgICByZWYuY3VycmVudCA9IG5vZGU7XG4gICAgfVxufTtcbi8qKlxuICogU2ltcGxlIHBvbnlmaWxsIGZvciBPYmplY3QuZnJvbUVudHJpZXNcbiAqL1xuXG5leHBvcnQgdmFyIGZyb21FbnRyaWVzID0gZnVuY3Rpb24gZnJvbUVudHJpZXMoZW50cmllcykge1xuICByZXR1cm4gZW50cmllcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgX3JlZikge1xuICAgIHZhciBrZXkgPSBfcmVmWzBdLFxuICAgICAgICB2YWx1ZSA9IF9yZWZbMV07XG4gICAgYWNjW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59O1xuLyoqXG4gKiBTbWFsbCB3cmFwcGVyIGFyb3VuZCBgdXNlTGF5b3V0RWZmZWN0YCB0byBnZXQgcmlkIG9mIHRoZSB3YXJuaW5nIG9uIFNTUiBlbnZzXG4gKi9cblxuZXhwb3J0IHZhciB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50ID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0OyIsImV4cG9ydCB2YXIgdG9wID0gJ3RvcCc7XG5leHBvcnQgdmFyIGJvdHRvbSA9ICdib3R0b20nO1xuZXhwb3J0IHZhciByaWdodCA9ICdyaWdodCc7XG5leHBvcnQgdmFyIGxlZnQgPSAnbGVmdCc7XG5leHBvcnQgdmFyIGF1dG8gPSAnYXV0byc7XG5leHBvcnQgdmFyIGJhc2VQbGFjZW1lbnRzID0gW3RvcCwgYm90dG9tLCByaWdodCwgbGVmdF07XG5leHBvcnQgdmFyIHN0YXJ0ID0gJ3N0YXJ0JztcbmV4cG9ydCB2YXIgZW5kID0gJ2VuZCc7XG5leHBvcnQgdmFyIGNsaXBwaW5nUGFyZW50cyA9ICdjbGlwcGluZ1BhcmVudHMnO1xuZXhwb3J0IHZhciB2aWV3cG9ydCA9ICd2aWV3cG9ydCc7XG5leHBvcnQgdmFyIHBvcHBlciA9ICdwb3BwZXInO1xuZXhwb3J0IHZhciByZWZlcmVuY2UgPSAncmVmZXJlbmNlJztcbmV4cG9ydCB2YXIgdmFyaWF0aW9uUGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9iYXNlUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pO1xuZXhwb3J0IHZhciBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL1tdLmNvbmNhdChiYXNlUGxhY2VtZW50cywgW2F1dG9dKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQsIHBsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7IC8vIG1vZGlmaWVycyB0aGF0IG5lZWQgdG8gcmVhZCB0aGUgRE9NXG5cbmV4cG9ydCB2YXIgYmVmb3JlUmVhZCA9ICdiZWZvcmVSZWFkJztcbmV4cG9ydCB2YXIgcmVhZCA9ICdyZWFkJztcbmV4cG9ydCB2YXIgYWZ0ZXJSZWFkID0gJ2FmdGVyUmVhZCc7IC8vIHB1cmUtbG9naWMgbW9kaWZpZXJzXG5cbmV4cG9ydCB2YXIgYmVmb3JlTWFpbiA9ICdiZWZvcmVNYWluJztcbmV4cG9ydCB2YXIgbWFpbiA9ICdtYWluJztcbmV4cG9ydCB2YXIgYWZ0ZXJNYWluID0gJ2FmdGVyTWFpbic7IC8vIG1vZGlmaWVyIHdpdGggdGhlIHB1cnBvc2UgdG8gd3JpdGUgdG8gdGhlIERPTSAob3Igd3JpdGUgaW50byBhIGZyYW1ld29yayBzdGF0ZSlcblxuZXhwb3J0IHZhciBiZWZvcmVXcml0ZSA9ICdiZWZvcmVXcml0ZSc7XG5leHBvcnQgdmFyIHdyaXRlID0gJ3dyaXRlJztcbmV4cG9ydCB2YXIgYWZ0ZXJXcml0ZSA9ICdhZnRlcldyaXRlJztcbmV4cG9ydCB2YXIgbW9kaWZpZXJQaGFzZXMgPSBbYmVmb3JlUmVhZCwgcmVhZCwgYWZ0ZXJSZWFkLCBiZWZvcmVNYWluLCBtYWluLCBhZnRlck1haW4sIGJlZm9yZVdyaXRlLCB3cml0ZSwgYWZ0ZXJXcml0ZV07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZU5hbWUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IChlbGVtZW50Lm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGlmIChub2RlLnRvU3RyaW5nKCkgIT09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdyA6IHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkhUTUxFbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3Qobm9kZSkge1xuICAvLyBJRSAxMSBoYXMgbm8gU2hhZG93Um9vdFxuICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuU2hhZG93Um9vdDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290O1xufVxuXG5leHBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9OyIsImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7IC8vIFRoaXMgbW9kaWZpZXIgdGFrZXMgdGhlIHN0eWxlcyBwcmVwYXJlZCBieSB0aGUgYGNvbXB1dGVTdHlsZXNgIG1vZGlmaWVyXG4vLyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBIVE1MRWxlbWVudHMgc3VjaCBhcyBwb3BwZXIgYW5kIGFycm93XG5cbmZ1bmN0aW9uIGFwcGx5U3R5bGVzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS5zdHlsZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRmxvdyBkb2Vzbid0IHN1cHBvcnQgdG8gZXh0ZW5kIHRoaXMgcHJvcGVydHksIGJ1dCBpdCdzIHRoZSBtb3N0XG4gICAgLy8gZWZmZWN0aXZlIHdheSB0byBhcHBseSBzdHlsZXMgdG8gYW4gSFRNTEVsZW1lbnRcbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cblxuXG4gICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlID09PSB0cnVlID8gJycgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGU7XG4gIHZhciBpbml0aWFsU3R5bGVzID0ge1xuICAgIHBvcHBlcjoge1xuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIG1hcmdpbjogJzAnXG4gICAgfSxcbiAgICBhcnJvdzoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9LFxuICAgIHJlZmVyZW5jZToge31cbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5wb3BwZXIuc3R5bGUsIGluaXRpYWxTdHlsZXMucG9wcGVyKTtcbiAgc3RhdGUuc3R5bGVzID0gaW5pdGlhbFN0eWxlcztcblxuICBpZiAoc3RhdGUuZWxlbWVudHMuYXJyb3cpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLmFycm93LnN0eWxlLCBpbml0aWFsU3R5bGVzLmFycm93KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgICB2YXIgc3R5bGVQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc3RhdGUuc3R5bGVzLmhhc093blByb3BlcnR5KG5hbWUpID8gc3RhdGUuc3R5bGVzW25hbWVdIDogaW5pdGlhbFN0eWxlc1tuYW1lXSk7IC8vIFNldCBhbGwgdmFsdWVzIHRvIGFuIGVtcHR5IHN0cmluZyB0byB1bnNldCB0aGVtXG5cbiAgICAgIHZhciBzdHlsZSA9IHN0eWxlUHJvcGVydGllcy5yZWR1Y2UoZnVuY3Rpb24gKHN0eWxlLCBwcm9wZXJ0eSkge1xuICAgICAgICBzdHlsZVtwcm9wZXJ0eV0gPSAnJztcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSwge30pOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBhcHBseVN0eWxlcyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ2NvbXB1dGVTdHlsZXMnXVxufTsiLCJpbXBvcnQgeyBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59IiwiZXhwb3J0IHZhciBtYXggPSBNYXRoLm1heDtcbmV4cG9ydCB2YXIgbWluID0gTWF0aC5taW47XG5leHBvcnQgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVQVN0cmluZygpIHtcbiAgdmFyIHVhRGF0YSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuXG4gIGlmICh1YURhdGEgIT0gbnVsbCAmJiB1YURhdGEuYnJhbmRzICYmIEFycmF5LmlzQXJyYXkodWFEYXRhLmJyYW5kcykpIHtcbiAgICByZXR1cm4gdWFEYXRhLmJyYW5kcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmJyYW5kICsgXCIvXCIgKyBpdGVtLnZlcnNpb247XG4gICAgfSkuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG59IiwiaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTGF5b3V0Vmlld3BvcnQoKSB7XG4gIHJldHVybiAhL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChnZXRVQVN0cmluZygpKTtcbn0iLCJpbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cblxuICB2YXIgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSAxO1xuICB2YXIgc2NhbGVZID0gMTtcblxuICBpZiAoaW5jbHVkZVNjYWxlICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBzY2FsZVggPSBlbGVtZW50Lm9mZnNldFdpZHRoID4gMCA/IHJvdW5kKGNsaWVudFJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxIDogMTtcbiAgICBzY2FsZVkgPSBlbGVtZW50Lm9mZnNldEhlaWdodCA+IDAgPyByb3VuZChjbGllbnRSZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxIDogMTtcbiAgfVxuXG4gIHZhciBfcmVmID0gaXNFbGVtZW50KGVsZW1lbnQpID8gZ2V0V2luZG93KGVsZW1lbnQpIDogd2luZG93LFxuICAgICAgdmlzdWFsVmlld3BvcnQgPSBfcmVmLnZpc3VhbFZpZXdwb3J0O1xuXG4gIHZhciBhZGRWaXN1YWxPZmZzZXRzID0gIWlzTGF5b3V0Vmlld3BvcnQoKSAmJiBpc0ZpeGVkU3RyYXRlZ3k7XG4gIHZhciB4ID0gKGNsaWVudFJlY3QubGVmdCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCA6IDApKSAvIHNjYWxlWDtcbiAgdmFyIHkgPSAoY2xpZW50UmVjdC50b3AgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcCA6IDApKSAvIHNjYWxlWTtcbiAgdmFyIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlWDtcbiAgdmFyIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0IC8gc2NhbGVZO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB0b3A6IHksXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgbGVmdDogeCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiOyAvLyBSZXR1cm5zIHRoZSBsYXlvdXQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuIExheW91dFxuLy8gbWVhbnMgaXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYXlvdXRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7IC8vIFVzZSB0aGUgY2xpZW50UmVjdCBzaXplcyBpZiBpdCdzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLlxuICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEyMjNcblxuICB2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3Qud2lkdGggLSB3aWR0aCkgPD0gMSkge1xuICAgIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LmhlaWdodCAtIGhlaWdodCkgPD0gMSkge1xuICAgIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgeTogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59IiwiaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGFpbnMocGFyZW50LCBjaGlsZCkge1xuICB2YXIgcm9vdE5vZGUgPSBjaGlsZC5nZXRSb290Tm9kZSAmJiBjaGlsZC5nZXRSb290Tm9kZSgpOyAvLyBGaXJzdCwgYXR0ZW1wdCB3aXRoIGZhc3RlciBuYXRpdmUgbWV0aG9kXG5cbiAgaWYgKHBhcmVudC5jb250YWlucyhjaGlsZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyB0aGVuIGZhbGxiYWNrIHRvIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiB3aXRoIFNoYWRvdyBET00gc3VwcG9ydFxuICBlbHNlIGlmIChyb290Tm9kZSAmJiBpc1NoYWRvd1Jvb3Qocm9vdE5vZGUpKSB7XG4gICAgICB2YXIgbmV4dCA9IGNoaWxkO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChuZXh0ICYmIHBhcmVudC5pc1NhbWVOb2RlKG5leHQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddOiBuZWVkIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgdGhpcy4uLlxuXG5cbiAgICAgICAgbmV4dCA9IG5leHQucGFyZW50Tm9kZSB8fCBuZXh0Lmhvc3Q7XG4gICAgICB9IHdoaWxlIChuZXh0KTtcbiAgICB9IC8vIEdpdmUgdXAsIHRoZSByZXN1bHQgaXMgZmFsc2VcblxuXG4gIHJldHVybiBmYWxzZTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn0iLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufSIsImltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSB7XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgcmV0dXJuICgoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5vd25lckRvY3VtZW50IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIGVsZW1lbnQuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkuZG9jdW1lbnRFbGVtZW50O1xufSIsImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFBhcmVudE5vZGUoZWxlbWVudCkge1xuICBpZiAoZ2V0Tm9kZU5hbWUoZWxlbWVudCkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuICgvLyB0aGlzIGlzIGEgcXVpY2tlciAoYnV0IGxlc3MgdHlwZSBzYWZlKSB3YXkgdG8gc2F2ZSBxdWl0ZSBzb21lIGJ5dGVzIGZyb20gdGhlIGJ1bmRsZVxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICBlbGVtZW50LmFzc2lnbmVkU2xvdCB8fCAvLyBzdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZVxuICAgIGVsZW1lbnQucGFyZW50Tm9kZSB8fCAoIC8vIERPTSBFbGVtZW50IGRldGVjdGVkXG4gICAgaXNTaGFkb3dSb290KGVsZW1lbnQpID8gZWxlbWVudC5ob3N0IDogbnVsbCkgfHwgLy8gU2hhZG93Um9vdCBkZXRlY3RlZFxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBIVE1MRWxlbWVudCBpcyBhIE5vZGVcbiAgICBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkgLy8gZmFsbGJhY2tcblxuICApO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59IC8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuXG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuICB2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdChnZXRVQVN0cmluZygpKTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIGlmIChpc1NoYWRvd1Jvb3QoY3VycmVudE5vZGUpKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5ob3N0O1xuICB9XG5cbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmIFsnaHRtbCcsICdib2R5J10uaW5kZXhPZihnZXROb2RlTmFtZShjdXJyZW50Tm9kZSkpIDwgMCkge1xuICAgIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTsgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuXG4gICAgaWYgKGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCBjc3MuY29udGFpbiA9PT0gJ3BhaW50JyB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiBjc3MuZmlsdGVyICYmIGNzcy5maWx0ZXIgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbmRvdztcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgPj0gMCA/ICd4JyA6ICd5Jztcbn0iLCJpbXBvcnQgeyBtYXggYXMgbWF0aE1heCwgbWluIGFzIG1hdGhNaW4gfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluKG1pbiwgdmFsdWUsIG1heCkge1xuICByZXR1cm4gbWF0aE1heChtaW4sIG1hdGhNaW4odmFsdWUsIG1heCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbk1heENsYW1wKG1pbiwgdmFsdWUsIG1heCkge1xuICB2YXIgdiA9IHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpO1xuICByZXR1cm4gdiA+IG1heCA/IG1heCA6IHY7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnJlc2hTaWRlT2JqZWN0KCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMFxuICB9O1xufSIsImltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4vZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZVBhZGRpbmdPYmplY3QocGFkZGluZ09iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ2V0RnJlc2hTaWRlT2JqZWN0KCksIHBhZGRpbmdPYmplY3QpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4cGFuZFRvSGFzaE1hcCh2YWx1ZSwga2V5cykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoZnVuY3Rpb24gKGhhc2hNYXAsIGtleSkge1xuICAgIGhhc2hNYXBba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiBoYXNoTWFwO1xuICB9LCB7fSk7XG59IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoYXJyb3dFbGVtZW50KSkge1xuICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhcnJvd1wiIGVsZW1lbnQgbXVzdCBiZSBhbiBIVE1MRWxlbWVudCAobm90IGFuIFNWR0VsZW1lbnQpLicsICdUbyB1c2UgYW4gU1ZHIGFycm93LCB3cmFwIGl0IGluIGFuIEhUTUxFbGVtZW50IHRoYXQgd2lsbCBiZSB1c2VkIGFzJywgJ3RoZSBhcnJvdy4nXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhcnJvd1wiIG1vZGlmaWVyXFwncyBgZWxlbWVudGAgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBwb3BwZXInLCAnZWxlbWVudC4nXS5qb2luKCcgJykpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLmVsZW1lbnRzLmFycm93ID0gYXJyb3dFbGVtZW50O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXJyb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogYXJyb3csXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J11cbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59IiwiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB1bnNldFNpZGVzID0ge1xuICB0b3A6ICdhdXRvJyxcbiAgcmlnaHQ6ICdhdXRvJyxcbiAgYm90dG9tOiAnYXV0bycsXG4gIGxlZnQ6ICdhdXRvJ1xufTsgLy8gUm91bmQgdGhlIG9mZnNldHMgdG8gdGhlIG5lYXJlc3Qgc3VpdGFibGUgc3VicGl4ZWwgYmFzZWQgb24gdGhlIERQUi5cbi8vIFpvb21pbmcgY2FuIGNoYW5nZSB0aGUgRFBSLCBidXQgaXQgc2VlbXMgdG8gcmVwb3J0IGEgdmFsdWUgdGhhdCB3aWxsXG4vLyBjbGVhbmx5IGRpdmlkZSB0aGUgdmFsdWVzIGludG8gdGhlIGFwcHJvcHJpYXRlIHN1YnBpeGVscy5cblxuZnVuY3Rpb24gcm91bmRPZmZzZXRzQnlEUFIoX3JlZiwgd2luKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAqIGRwcikgLyBkcHIgfHwgMCxcbiAgICB5OiByb3VuZCh5ICogZHByKSAvIGRwciB8fCAwXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1N0eWxlcyhfcmVmMikge1xuICB2YXIgX09iamVjdCRhc3NpZ24yO1xuXG4gIHZhciBwb3BwZXIgPSBfcmVmMi5wb3BwZXIsXG4gICAgICBwb3BwZXJSZWN0ID0gX3JlZjIucG9wcGVyUmVjdCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICAgIHZhcmlhdGlvbiA9IF9yZWYyLnZhcmlhdGlvbixcbiAgICAgIG9mZnNldHMgPSBfcmVmMi5vZmZzZXRzLFxuICAgICAgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9yZWYyLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGFkYXB0aXZlID0gX3JlZjIuYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHMgPSBfcmVmMi5yb3VuZE9mZnNldHMsXG4gICAgICBpc0ZpeGVkID0gX3JlZjIuaXNGaXhlZDtcbiAgdmFyIF9vZmZzZXRzJHggPSBvZmZzZXRzLngsXG4gICAgICB4ID0gX29mZnNldHMkeCA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHgsXG4gICAgICBfb2Zmc2V0cyR5ID0gb2Zmc2V0cy55LFxuICAgICAgeSA9IF9vZmZzZXRzJHkgPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR5O1xuXG4gIHZhciBfcmVmMyA9IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9KSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjMueDtcbiAgeSA9IF9yZWYzLnk7XG4gIHZhciBoYXNYID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneCcpO1xuICB2YXIgaGFzWSA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3knKTtcbiAgdmFyIHNpZGVYID0gbGVmdDtcbiAgdmFyIHNpZGVZID0gdG9wO1xuICB2YXIgd2luID0gd2luZG93O1xuXG4gIGlmIChhZGFwdGl2ZSkge1xuICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKTtcbiAgICB2YXIgaGVpZ2h0UHJvcCA9ICdjbGllbnRIZWlnaHQnO1xuICAgIHZhciB3aWR0aFByb3AgPSAnY2xpZW50V2lkdGgnO1xuXG4gICAgaWYgKG9mZnNldFBhcmVudCA9PT0gZ2V0V2luZG93KHBvcHBlcikpIHtcbiAgICAgIG9mZnNldFBhcmVudCA9IGdldERvY3VtZW50RWxlbWVudChwb3BwZXIpO1xuXG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uICE9PSAnc3RhdGljJyAmJiBwb3NpdGlvbiA9PT0gJ2Fic29sdXRlJykge1xuICAgICAgICBoZWlnaHRQcm9wID0gJ3Njcm9sbEhlaWdodCc7XG4gICAgICAgIHdpZHRoUHJvcCA9ICdzY3JvbGxXaWR0aCc7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYXN0XTogZm9yY2UgdHlwZSByZWZpbmVtZW50LCB3ZSBjb21wYXJlIG9mZnNldFBhcmVudCB3aXRoIHdpbmRvdyBhYm92ZSwgYnV0IEZsb3cgZG9lc24ndCBkZXRlY3QgaXRcblxuXG4gICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50O1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gdG9wIHx8IChwbGFjZW1lbnQgPT09IGxlZnQgfHwgcGxhY2VtZW50ID09PSByaWdodCkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVZID0gYm90dG9tO1xuICAgICAgdmFyIG9mZnNldFkgPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC5oZWlnaHQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFtoZWlnaHRQcm9wXTtcbiAgICAgIHkgLT0gb2Zmc2V0WSAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgeSAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCAocGxhY2VtZW50ID09PSB0b3AgfHwgcGxhY2VtZW50ID09PSBib3R0b20pICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWCA9IHJpZ2h0O1xuICAgICAgdmFyIG9mZnNldFggPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC53aWR0aCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W3dpZHRoUHJvcF07XG4gICAgICB4IC09IG9mZnNldFggLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgeCAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9LCBhZGFwdGl2ZSAmJiB1bnNldFNpZGVzKTtcblxuICB2YXIgX3JlZjQgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUih7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0sIGdldFdpbmRvdyhwb3BwZXIpKSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjQueDtcbiAgeSA9IF9yZWY0Lnk7XG5cbiAgaWYgKGdwdUFjY2VsZXJhdGlvbikge1xuICAgIHZhciBfT2JqZWN0JGFzc2lnbjtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbiA9IHt9LCBfT2JqZWN0JGFzc2lnbltzaWRlWV0gPSBoYXNZID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduW3NpZGVYXSA9IGhhc1ggPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ24udHJhbnNmb3JtID0gKHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIDw9IDEgPyBcInRyYW5zbGF0ZShcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4KVwiIDogXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4LCAwKVwiLCBfT2JqZWN0JGFzc2lnbikpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduMiA9IHt9LCBfT2JqZWN0JGFzc2lnbjJbc2lkZVldID0gaGFzWSA/IHkgKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yW3NpZGVYXSA9IGhhc1ggPyB4ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMi50cmFuc2Zvcm0gPSAnJywgX09iamVjdCRhc3NpZ24yKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZXMoX3JlZjUpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjUuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjUub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZ3B1QWNjZWxlcmF0LFxuICAgICAgX29wdGlvbnMkYWRhcHRpdmUgPSBvcHRpb25zLmFkYXB0aXZlLFxuICAgICAgYWRhcHRpdmUgPSBfb3B0aW9ucyRhZGFwdGl2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFkYXB0aXZlLFxuICAgICAgX29wdGlvbnMkcm91bmRPZmZzZXRzID0gb3B0aW9ucy5yb3VuZE9mZnNldHMsXG4gICAgICByb3VuZE9mZnNldHMgPSBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyb3VuZE9mZnNldHM7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIHZhciB0cmFuc2l0aW9uUHJvcGVydHkgPSBnZXRDb21wdXRlZFN0eWxlKHN0YXRlLmVsZW1lbnRzLnBvcHBlcikudHJhbnNpdGlvblByb3BlcnR5IHx8ICcnO1xuXG4gICAgaWYgKGFkYXB0aXZlICYmIFsndHJhbnNmb3JtJywgJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddLnNvbWUoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gdHJhbnNpdGlvblByb3BlcnR5LmluZGV4T2YocHJvcGVydHkpID49IDA7XG4gICAgfSkpIHtcbiAgICAgIGNvbnNvbGUud2FybihbJ1BvcHBlcjogRGV0ZWN0ZWQgQ1NTIHRyYW5zaXRpb25zIG9uIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nJywgJ0NTUyBwcm9wZXJ0aWVzOiBcInRyYW5zZm9ybVwiLCBcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiLicsICdcXG5cXG4nLCAnRGlzYWJsZSB0aGUgXCJjb21wdXRlU3R5bGVzXCIgbW9kaWZpZXJcXCdzIGBhZGFwdGl2ZWAgb3B0aW9uIHRvIGFsbG93JywgJ2ZvciBzbW9vdGggdHJhbnNpdGlvbnMsIG9yIHJlbW92ZSB0aGVzZSBwcm9wZXJ0aWVzIGZyb20gdGhlIENTUycsICd0cmFuc2l0aW9uIGRlY2xhcmF0aW9uIG9uIHRoZSBwb3BwZXIgZWxlbWVudCBpZiBvbmx5IHRyYW5zaXRpb25pbmcnLCAnb3BhY2l0eSBvciBiYWNrZ3JvdW5kLWNvbG9yIGZvciBleGFtcGxlLicsICdcXG5cXG4nLCAnV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBwb3BwZXIgZWxlbWVudCBhcyBhIHdyYXBwZXIgYXJvdW5kIGFuIGlubmVyJywgJ2VsZW1lbnQgdGhhdCBjYW4gaGF2ZSBhbnkgQ1NTIHByb3BlcnR5IHRyYW5zaXRpb25lZCBmb3IgYW5pbWF0aW9ucy4nXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb21tb25TdHlsZXMgPSB7XG4gICAgcGxhY2VtZW50OiBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCksXG4gICAgdmFyaWF0aW9uOiBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KSxcbiAgICBwb3BwZXI6IHN0YXRlLmVsZW1lbnRzLnBvcHBlcixcbiAgICBwb3BwZXJSZWN0OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgZ3B1QWNjZWxlcmF0aW9uOiBncHVBY2NlbGVyYXRpb24sXG4gICAgaXNGaXhlZDogc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJ1xuICB9O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMucG9wcGVyLCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgYWRhcHRpdmU6IGFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3cgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5hcnJvdyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5hcnJvdywgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93LFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBhZGFwdGl2ZTogZmFsc2UsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCc6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2NvbXB1dGVTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ2JlZm9yZVdyaXRlJyxcbiAgZm46IGNvbXB1dGVTdHlsZXMsXG4gIGRhdGE6IHt9XG59OyIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyIsInZhciBoYXNoID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsInZhciBoYXNoID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsKG5vZGUpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhub2RlKTtcbiAgdmFyIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQ7XG4gIHZhciBzY3JvbGxUb3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcFxuICB9O1xufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICAvLyBQb3BwZXIgMSBpcyBicm9rZW4gaW4gdGhpcyBjYXNlIGFuZCBuZXZlciBoYWQgYSBidWcgcmVwb3J0IHNvIGxldCdzIGFzc3VtZVxuICAvLyBpdCdzIG5vdCBhbiBpc3N1ZS4gSSBkb24ndCB0aGluayBhbnlvbmUgZXZlciBzcGVjaWZpZXMgd2lkdGggb24gPGh0bWw+XG4gIC8vIGFueXdheS5cbiAgLy8gQnJvd3NlcnMgd2hlcmUgdGhlIGxlZnQgc2Nyb2xsYmFyIGRvZXNuJ3QgY2F1c2UgYW4gaXNzdWUgcmVwb3J0IGAwYCBmb3JcbiAgLy8gdGhpcyAoZS5nLiBFZGdlIDIwMTksIElFMTEsIFNhZmFyaSlcbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICB2YXIgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuXG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIHZhciBsYXlvdXRWaWV3cG9ydCA9IGlzTGF5b3V0Vmlld3BvcnQoKTtcblxuICAgIGlmIChsYXlvdXRWaWV3cG9ydCB8fCAhbGF5b3V0Vmlld3BvcnQgJiYgc3RyYXRlZ3kgPT09ICdmaXhlZCcpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSxcbiAgICB5OiB5XG4gIH07XG59IiwiaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgeyBtYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB3aW5TY3JvbGwgPSBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCk7XG4gIHZhciBib2R5ID0gKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5O1xuICB2YXIgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuc2Nyb2xsV2lkdGggOiAwLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApO1xuICB2YXIgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keSA/IGJvZHkuc2Nyb2xsSGVpZ2h0IDogMCwgYm9keSA/IGJvZHkuY2xpZW50SGVpZ2h0IDogMCk7XG4gIHZhciB4ID0gLXdpblNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgdmFyIHkgPSAtd2luU2Nyb2xsLnNjcm9sbFRvcDtcblxuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5IHx8IGh0bWwpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApIC0gd2lkdGg7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1Njcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIEZpcmVmb3ggd2FudHMgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcbiAgdmFyIF9nZXRDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSxcbiAgICAgIG92ZXJmbG93ID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1gsXG4gICAgICBvdmVyZmxvd1kgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1k7XG5cbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbi8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCk7XG59IiwiaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQobm9kZSkge1xuICBpZiAoWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5kZXhPZihnZXROb2RlTmFtZShub2RlKSkgPj0gMCkge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cblxuICBpZiAoaXNIVE1MRWxlbWVudChub2RlKSAmJiBpc1Njcm9sbFBhcmVudChub2RlKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIGdldFNjcm9sbFBhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKTtcbn0iLCJpbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gXCIuL2dldFNjcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGxpc3QpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudCA9PT0gKChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keSk7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsUGFyZW50KTtcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IFt3aW5dLmNvbmNhdCh3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXSkgOiBzY3JvbGxQYXJlbnQ7XG4gIHZhciB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBpc0JvZHkgPyB1cGRhdGVkTGlzdCA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICB1cGRhdGVkTGlzdC5jb25jYXQobGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZSh0YXJnZXQpKSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZWN0LCB7XG4gICAgbGVmdDogcmVjdC54LFxuICAgIHRvcDogcmVjdC55LFxuICAgIHJpZ2h0OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgfSk7XG59IiwiaW1wb3J0IHsgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWaWV3cG9ydFJlY3QgZnJvbSBcIi4vZ2V0Vmlld3BvcnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRSZWN0IGZyb20gXCIuL2dldERvY3VtZW50UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4uL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgZmFsc2UsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgcmVjdC50b3AgPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICByZWN0LmxlZnQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3Qud2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LmhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnggPSByZWN0LmxlZnQ7XG4gIHJlY3QueSA9IHJlY3QudG9wO1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIHJldHVybiBjbGlwcGluZ1BhcmVudCA9PT0gdmlld3BvcnQgPyByZWN0VG9DbGllbnRSZWN0KGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkpIDogaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSA/IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkgOiByZWN0VG9DbGllbnRSZWN0KGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpKTtcbn0gLy8gQSBcImNsaXBwaW5nIHBhcmVudFwiIGlzIGFuIG92ZXJmbG93YWJsZSBjb250YWluZXIgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpdGggYSBwb3NpdGlvbiBkaWZmZXJlbnQgZnJvbVxuLy8gYGluaXRpYWxgXG5cblxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIHtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xuICB2YXIgY2FuRXNjYXBlQ2xpcHBpbmcgPSBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uKSA+PSAwO1xuICB2YXIgY2xpcHBlckVsZW1lbnQgPSBjYW5Fc2NhcGVDbGlwcGluZyAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIDogZWxlbWVudDtcblxuICBpZiAoIWlzRWxlbWVudChjbGlwcGVyRWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE0MTRcblxuXG4gIHJldHVybiBjbGlwcGluZ1BhcmVudHMuZmlsdGVyKGZ1bmN0aW9uIChjbGlwcGluZ1BhcmVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpICYmIGNvbnRhaW5zKGNsaXBwaW5nUGFyZW50LCBjbGlwcGVyRWxlbWVudCkgJiYgZ2V0Tm9kZU5hbWUoY2xpcHBpbmdQYXJlbnQpICE9PSAnYm9keSc7XG4gIH0pO1xufSAvLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBwYXJlbnRzXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KGVsZW1lbnQsIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KSB7XG4gIHZhciBtYWluQ2xpcHBpbmdQYXJlbnRzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ1BhcmVudHMnID8gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IFtdLmNvbmNhdChtYWluQ2xpcHBpbmdQYXJlbnRzLCBbcm9vdEJvdW5kYXJ5XSk7XG4gIHZhciBmaXJzdENsaXBwaW5nUGFyZW50ID0gY2xpcHBpbmdQYXJlbnRzWzBdO1xuICB2YXIgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdQYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjUmVjdCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgZmlyc3RDbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpKTtcbiAgY2xpcHBpbmdSZWN0LndpZHRoID0gY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC5oZWlnaHQgPSBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgY2xpcHBpbmdSZWN0LnggPSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LnkgPSBjbGlwcGluZ1JlY3QudG9wO1xuICByZXR1cm4gY2xpcHBpbmdSZWN0O1xufSIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzdGFydCwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciByZWZlcmVuY2UgPSBfcmVmLnJlZmVyZW5jZSxcbiAgICAgIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPyBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50ID8gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGVsZW1lbnQud2lkdGggLyAyO1xuICB2YXIgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBlbGVtZW50LmhlaWdodCAvIDI7XG4gIHZhciBvZmZzZXRzO1xuXG4gIHN3aXRjaCAoYmFzZVBsYWNlbWVudCkge1xuICAgIGNhc2UgdG9wOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBlbGVtZW50LmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBib3R0b206XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgcmlnaHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBsZWZ0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBlbGVtZW50LndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG5cbiAgdmFyIG1haW5BeGlzID0gYmFzZVBsYWNlbWVudCA/IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KSA6IG51bGw7XG5cbiAgaWYgKG1haW5BeGlzICE9IG51bGwpIHtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHN3aXRjaCAodmFyaWF0aW9uKSB7XG4gICAgICBjYXNlIHN0YXJ0OlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdIC0gKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBlbmQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gKyAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvZmZzZXRzO1xufSIsImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJHN0cmF0ZWd5ID0gX29wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9vcHRpb25zJHN0cmF0ZWd5ID09PSB2b2lkIDAgPyBzdGF0ZS5zdHJhdGVneSA6IF9vcHRpb25zJHN0cmF0ZWd5LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCJpbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgdmFyaWF0aW9uUGxhY2VtZW50cywgYmFzZVBsYWNlbWVudHMsIHBsYWNlbWVudHMgYXMgYWxsUGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPSBfb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPT09IHZvaWQgMCA/IGFsbFBsYWNlbWVudHMgOiBfb3B0aW9ucyRhbGxvd2VkQXV0b1A7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KTtcbiAgdmFyIHBsYWNlbWVudHMgPSB2YXJpYXRpb24gPyBmbGlwVmFyaWF0aW9ucyA/IHZhcmlhdGlvblBsYWNlbWVudHMgOiB2YXJpYXRpb25QbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSB2YXJpYXRpb247XG4gIH0pIDogYmFzZVBsYWNlbWVudHM7XG4gIHZhciBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWxsb3dlZEF1dG9QbGFjZW1lbnRzLmluZGV4T2YocGxhY2VtZW50KSA+PSAwO1xuICB9KTtcblxuICBpZiAoYWxsb3dlZFBsYWNlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogVGhlIGBhbGxvd2VkQXV0b1BsYWNlbWVudHNgIG9wdGlvbiBkaWQgbm90IGFsbG93IGFueScsICdwbGFjZW1lbnRzLiBFbnN1cmUgdGhlIGBwbGFjZW1lbnRgIG9wdGlvbiBtYXRjaGVzIHRoZSB2YXJpYXRpb24nLCAnb2YgdGhlIGFsbG93ZWQgcGxhY2VtZW50cy4nLCAnRm9yIGV4YW1wbGUsIFwiYXV0b1wiIGNhbm5vdCBiZSB1c2VkIHRvIGFsbG93IFwiYm90dG9tLXN0YXJ0XCIuJywgJ1VzZSBcImF1dG8tc3RhcnRcIiBpbnN0ZWFkLiddLmpvaW4oJyAnKSk7XG4gICAgfVxuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdOiBGbG93IHNlZW1zIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCB0d28gYXJyYXkgdW5pb25zLi4uXG5cblxuICB2YXIgb3ZlcmZsb3dzID0gYWxsb3dlZFBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSlbZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpXTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvdmVyZmxvd3MpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dzW2FdIC0gb3ZlcmZsb3dzW2JdO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMg4oCTIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07IiwiaW1wb3J0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKSB7XG4gIGlmIChwcmV2ZW50ZWRPZmZzZXRzID09PSB2b2lkIDApIHtcbiAgICBwcmV2ZW50ZWRPZmZzZXRzID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0IC0gcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGggKyBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCArIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aCAtIHByZXZlbnRlZE9mZnNldHMueFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdLnNvbWUoZnVuY3Rpb24gKHNpZGUpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dbc2lkZV0gPj0gMDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhpZGUoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgcHJldmVudGVkT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucHJldmVudE92ZXJmbG93O1xuICB2YXIgcmVmZXJlbmNlT3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICB9KTtcbiAgdmFyIHBvcHBlckFsdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICB9KTtcbiAgdmFyIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHJlZmVyZW5jZU92ZXJmbG93LCByZWZlcmVuY2VSZWN0KTtcbiAgdmFyIHBvcHBlckVzY2FwZU9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhwb3BwZXJBbHRPdmVyZmxvdywgcG9wcGVyUmVjdCwgcHJldmVudGVkT2Zmc2V0cyk7XG4gIHZhciBpc1JlZmVyZW5jZUhpZGRlbiA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMpO1xuICB2YXIgaGFzUG9wcGVyRXNjYXBlZCA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChwb3BwZXJFc2NhcGVPZmZzZXRzKTtcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IHtcbiAgICByZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6IHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyxcbiAgICBwb3BwZXJFc2NhcGVPZmZzZXRzOiBwb3BwZXJFc2NhcGVPZmZzZXRzLFxuICAgIGlzUmVmZXJlbmNlSGlkZGVuOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICBoYXNQb3BwZXJFc2NhcGVkOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH07XG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbic6IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgICdkYXRhLXBvcHBlci1lc2NhcGVkJzogaGFzUG9wcGVyRXNjYXBlZFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2hpZGUnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddLFxuICBmbjogaGlkZVxufTsiLCJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgcGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHJlY3RzLCBvZmZzZXQpIHtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciBpbnZlcnREaXN0YW5jZSA9IFtsZWZ0LCB0b3BdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IC0xIDogMTtcblxuICB2YXIgX3JlZiA9IHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicgPyBvZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgcmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KSkgOiBvZmZzZXQsXG4gICAgICBza2lkZGluZyA9IF9yZWZbMF0sXG4gICAgICBkaXN0YW5jZSA9IF9yZWZbMV07XG5cbiAgc2tpZGRpbmcgPSBza2lkZGluZyB8fCAwO1xuICBkaXN0YW5jZSA9IChkaXN0YW5jZSB8fCAwKSAqIGludmVydERpc3RhbmNlO1xuICByZXR1cm4gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyB7XG4gICAgeDogZGlzdGFuY2UsXG4gICAgeTogc2tpZGRpbmdcbiAgfSA6IHtcbiAgICB4OiBza2lkZGluZyxcbiAgICB5OiBkaXN0YW5jZVxuICB9O1xufVxuXG5mdW5jdGlvbiBvZmZzZXQoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmMi5uYW1lO1xuICB2YXIgX29wdGlvbnMkb2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfb3B0aW9ucyRvZmZzZXQgPT09IHZvaWQgMCA/IFswLCAwXSA6IF9vcHRpb25zJG9mZnNldDtcbiAgdmFyIGRhdGEgPSBwbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgc3RhdGUucmVjdHMsIG9mZnNldCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICB2YXIgX2RhdGEkc3RhdGUkcGxhY2VtZW50ID0gZGF0YVtzdGF0ZS5wbGFjZW1lbnRdLFxuICAgICAgeCA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC54LFxuICAgICAgeSA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC55O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy54ICs9IHg7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnkgKz0geTtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnb2Zmc2V0JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICBmbjogb2Zmc2V0XG59OyIsImltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZU9mZnNldHMuanNcIjtcblxuZnVuY3Rpb24gcG9wcGVyT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICAvLyBPZmZzZXRzIGFyZSB0aGUgYWN0dWFsIHBvc2l0aW9uIHRoZSBwb3BwZXIgbmVlZHMgdG8gaGF2ZSB0byBiZVxuICAvLyBwcm9wZXJseSBwb3NpdGlvbmVkIG5lYXIgaXRzIHJlZmVyZW5jZSBlbGVtZW50XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgcGxhY2VtZW50LCBhbmQgd2lsbCBiZSBhZGp1c3RlZCBieVxuICAvLyB0aGUgbW9kaWZpZXJzIGluIHRoZSBuZXh0IHN0ZXBcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHN0YXRlLnJlY3RzLnJlZmVyZW5jZSxcbiAgICBlbGVtZW50OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwb3BwZXJPZmZzZXRzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdyZWFkJyxcbiAgZm46IHBvcHBlck9mZnNldHMsXG4gIGRhdGE6IHt9XG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFsdEF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufSIsImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4sIHdpdGhpbk1heENsYW1wIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4uL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgbWluIGFzIG1hdGhNaW4sIG1heCBhcyBtYXRoTWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgX29wdGlvbnMkdGV0aGVyID0gb3B0aW9ucy50ZXRoZXIsXG4gICAgICB0ZXRoZXIgPSBfb3B0aW9ucyR0ZXRoZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyR0ZXRoZXIsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPSBvcHRpb25zLnRldGhlck9mZnNldCxcbiAgICAgIHRldGhlck9mZnNldCA9IF9vcHRpb25zJHRldGhlck9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHRldGhlck9mZnNldDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgcGFkZGluZzogcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnlcbiAgfSk7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICB2YXIgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBhbHRBeGlzID0gZ2V0QWx0QXhpcyhtYWluQXhpcyk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciB0ZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbicgPyB0ZXRoZXJPZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiB0ZXRoZXJPZmZzZXQ7XG4gIHZhciBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZSxcbiAgICBhbHRBeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZVxuICB9IDogT2JqZWN0LmFzc2lnbih7XG4gICAgbWFpbkF4aXM6IDAsXG4gICAgYWx0QXhpczogMFxuICB9LCB0ZXRoZXJPZmZzZXRWYWx1ZSk7XG4gIHZhciBvZmZzZXRNb2RpZmllclN0YXRlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdIDogbnVsbDtcbiAgdmFyIGRhdGEgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKCFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkO1xuXG4gICAgdmFyIG1haW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gICAgdmFyIGFsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgdmFyIG9mZnNldCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdO1xuICAgIHZhciBtaW4gPSBvZmZzZXQgKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgdmFyIG1heCA9IG9mZnNldCAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWluTGVuIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICsgYWRkaXRpdmUgKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBhcnJvd09mZnNldFBhcmVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93ICYmIGdldE9mZnNldFBhcmVudChzdGF0ZS5lbGVtZW50cy5hcnJvdyk7XG4gICAgdmFyIGNsaWVudE9mZnNldCA9IGFycm93T2Zmc2V0UGFyZW50ID8gbWFpbkF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFRvcCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50TGVmdCB8fCAwIDogMDtcbiAgICB2YXIgb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW21haW5BeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJCA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IG9mZnNldCArIG1pbk9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWUgLSBjbGllbnRPZmZzZXQ7XG4gICAgdmFyIHRldGhlck1heCA9IG9mZnNldCArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG4gICAgdmFyIHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbih0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbiwgb2Zmc2V0LCB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heCk7XG4gICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQgLSBvZmZzZXQ7XG4gIH1cblxuICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDI7XG5cbiAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICB2YXIgX2FsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gYm90dG9tIDogcmlnaHQ7XG5cbiAgICB2YXIgX29mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICB2YXIgX2xlbiA9IGFsdEF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHZhciBfbWluID0gX29mZnNldCArIG92ZXJmbG93W19tYWluU2lkZV07XG5cbiAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICB2YXIgaXNPcmlnaW5TaWRlID0gW3RvcCwgbGVmdF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICB2YXIgX29mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkMiA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbYWx0QXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIDogMDtcblxuICAgIHZhciBfdGV0aGVyTWluID0gaXNPcmlnaW5TaWRlID8gX21pbiA6IF9vZmZzZXQgLSByZWZlcmVuY2VSZWN0W19sZW5dIC0gcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXM7XG5cbiAgICB2YXIgX3RldGhlck1heCA9IGlzT3JpZ2luU2lkZSA/IF9vZmZzZXQgKyByZWZlcmVuY2VSZWN0W19sZW5dICsgcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXMgOiBfbWF4O1xuXG4gICAgdmFyIF9wcmV2ZW50ZWRPZmZzZXQgPSB0ZXRoZXIgJiYgaXNPcmlnaW5TaWRlID8gd2l0aGluTWF4Q2xhbXAoX3RldGhlck1pbiwgX29mZnNldCwgX3RldGhlck1heCkgOiB3aXRoaW4odGV0aGVyID8gX3RldGhlck1pbiA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IF90ZXRoZXJNYXggOiBfbWF4KTtcblxuICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXVxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRIVE1MRWxlbWVudFNjcm9sbChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSBcIi4vZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVTY3JvbGwobm9kZSkge1xuICBpZiAobm9kZSA9PT0gZ2V0V2luZG93KG5vZGUpIHx8ICFpc0hUTUxFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRTY3JvbGwobm9kZSk7XG4gIH1cbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldE5vZGVTY3JvbGwgZnJvbSBcIi4vZ2V0Tm9kZVNjcm9sbC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTY2FsZWQoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSByb3VuZChyZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgdmFyIHNjYWxlWSA9IHJvdW5kKHJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDE7XG4gIHJldHVybiBzY2FsZVggIT09IDEgfHwgc2NhbGVZICE9PSAxO1xufSAvLyBSZXR1cm5zIHRoZSBjb21wb3NpdGUgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuXG4vLyBDb21wb3NpdGUgbWVhbnMgaXQgdGFrZXMgaW50byBhY2NvdW50IHRyYW5zZm9ybXMgYXMgd2VsbCBhcyBsYXlvdXQuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcG9zaXRlUmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50LCBpc0ZpeGVkKSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cblxuICB2YXIgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnRJc1NjYWxlZCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc0VsZW1lbnRTY2FsZWQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50SXNTY2FsZWQsIGlzRml4ZWQpO1xuICB2YXIgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIHZhciBvZmZzZXRzID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTA3OFxuICAgIGlzU2Nyb2xsUGFyZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBvZmZzZXRzID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSk7XG4gICAgICBvZmZzZXRzLnggKz0gb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgKz0gb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBvZmZzZXRzLngsXG4gICAgeTogcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgfTtcbn0iLCJpbXBvcnQgeyBtb2RpZmllclBoYXNlcyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBzb3VyY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5ODc1MjU1XG5cbmZ1bmN0aW9uIG9yZGVyKG1vZGlmaWVycykge1xuICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBtYXAuc2V0KG1vZGlmaWVyLm5hbWUsIG1vZGlmaWVyKTtcbiAgfSk7IC8vIE9uIHZpc2l0aW5nIG9iamVjdCwgY2hlY2sgZm9yIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHZpc2l0IHRoZW0gcmVjdXJzaXZlbHlcblxuICBmdW5jdGlvbiBzb3J0KG1vZGlmaWVyKSB7XG4gICAgdmlzaXRlZC5hZGQobW9kaWZpZXIubmFtZSk7XG4gICAgdmFyIHJlcXVpcmVzID0gW10uY29uY2F0KG1vZGlmaWVyLnJlcXVpcmVzIHx8IFtdLCBtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzIHx8IFtdKTtcbiAgICByZXF1aXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwKSkge1xuICAgICAgICB2YXIgZGVwTW9kaWZpZXIgPSBtYXAuZ2V0KGRlcCk7XG5cbiAgICAgICAgaWYgKGRlcE1vZGlmaWVyKSB7XG4gICAgICAgICAgc29ydChkZXBNb2RpZmllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXN1bHQucHVzaChtb2RpZmllcik7XG4gIH1cblxuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAoIXZpc2l0ZWQuaGFzKG1vZGlmaWVyLm5hbWUpKSB7XG4gICAgICAvLyBjaGVjayBmb3IgdmlzaXRlZCBvYmplY3RcbiAgICAgIHNvcnQobW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGVyTW9kaWZpZXJzKG1vZGlmaWVycykge1xuICAvLyBvcmRlciBiYXNlZCBvbiBkZXBlbmRlbmNpZXNcbiAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcihtb2RpZmllcnMpOyAvLyBvcmRlciBiYXNlZCBvbiBwaGFzZVxuXG4gIHJldHVybiBtb2RpZmllclBoYXNlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGhhc2UpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgIHJldHVybiBtb2RpZmllci5waGFzZSA9PT0gcGhhc2U7XG4gICAgfSkpO1xuICB9LCBbXSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVib3VuY2UoZm4pIHtcbiAgdmFyIHBlbmRpbmc7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFwZW5kaW5nKSB7XG4gICAgICBwZW5kaW5nID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcGVuZGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXNvbHZlKGZuKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwZW5kaW5nO1xuICB9O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdChzdHIpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIFtdLmNvbmNhdChhcmdzKS5yZWR1Y2UoZnVuY3Rpb24gKHAsIGMpIHtcbiAgICByZXR1cm4gcC5yZXBsYWNlKC8lcy8sIGMpO1xuICB9LCBzdHIpO1xufSIsImltcG9ydCBmb3JtYXQgZnJvbSBcIi4vZm9ybWF0LmpzXCI7XG5pbXBvcnQgeyBtb2RpZmllclBoYXNlcyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xudmFyIElOVkFMSURfTU9ESUZJRVJfRVJST1IgPSAnUG9wcGVyOiBtb2RpZmllciBcIiVzXCIgcHJvdmlkZWQgYW4gaW52YWxpZCAlcyBwcm9wZXJ0eSwgZXhwZWN0ZWQgJXMgYnV0IGdvdCAlcyc7XG52YXIgTUlTU0lOR19ERVBFTkRFTkNZX0VSUk9SID0gJ1BvcHBlcjogbW9kaWZpZXIgXCIlc1wiIHJlcXVpcmVzIFwiJXNcIiwgYnV0IFwiJXNcIiBtb2RpZmllciBpcyBub3QgYXZhaWxhYmxlJztcbnZhciBWQUxJRF9QUk9QRVJUSUVTID0gWyduYW1lJywgJ2VuYWJsZWQnLCAncGhhc2UnLCAnZm4nLCAnZWZmZWN0JywgJ3JlcXVpcmVzJywgJ29wdGlvbnMnXTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlTW9kaWZpZXJzKG1vZGlmaWVycykge1xuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBbXS5jb25jYXQoT2JqZWN0LmtleXMobW9kaWZpZXIpLCBWQUxJRF9QUk9QRVJUSUVTKSAvLyBJRTExLWNvbXBhdGlibGUgcmVwbGFjZW1lbnQgZm9yIGBuZXcgU2V0KGl0ZXJhYmxlKWBcbiAgICAuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIHNlbGYpIHtcbiAgICAgIHJldHVybiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleDtcbiAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICAgIGlmICh0eXBlb2YgbW9kaWZpZXIubmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIFN0cmluZyhtb2RpZmllci5uYW1lKSwgJ1wibmFtZVwiJywgJ1wic3RyaW5nXCInLCBcIlxcXCJcIiArIFN0cmluZyhtb2RpZmllci5uYW1lKSArIFwiXFxcIlwiKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZW5hYmxlZCc6XG4gICAgICAgICAgaWYgKHR5cGVvZiBtb2RpZmllci5lbmFibGVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIG1vZGlmaWVyLm5hbWUsICdcImVuYWJsZWRcIicsICdcImJvb2xlYW5cIicsIFwiXFxcIlwiICsgU3RyaW5nKG1vZGlmaWVyLmVuYWJsZWQpICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdwaGFzZSc6XG4gICAgICAgICAgaWYgKG1vZGlmaWVyUGhhc2VzLmluZGV4T2YobW9kaWZpZXIucGhhc2UpIDwgMCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoSU5WQUxJRF9NT0RJRklFUl9FUlJPUiwgbW9kaWZpZXIubmFtZSwgJ1wicGhhc2VcIicsIFwiZWl0aGVyIFwiICsgbW9kaWZpZXJQaGFzZXMuam9pbignLCAnKSwgXCJcXFwiXCIgKyBTdHJpbmcobW9kaWZpZXIucGhhc2UpICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdmbic6XG4gICAgICAgICAgaWYgKHR5cGVvZiBtb2RpZmllci5mbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoSU5WQUxJRF9NT0RJRklFUl9FUlJPUiwgbW9kaWZpZXIubmFtZSwgJ1wiZm5cIicsICdcImZ1bmN0aW9uXCInLCBcIlxcXCJcIiArIFN0cmluZyhtb2RpZmllci5mbikgKyBcIlxcXCJcIikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2VmZmVjdCc6XG4gICAgICAgICAgaWYgKG1vZGlmaWVyLmVmZmVjdCAhPSBudWxsICYmIHR5cGVvZiBtb2RpZmllci5lZmZlY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIG1vZGlmaWVyLm5hbWUsICdcImVmZmVjdFwiJywgJ1wiZnVuY3Rpb25cIicsIFwiXFxcIlwiICsgU3RyaW5nKG1vZGlmaWVyLmZuKSArIFwiXFxcIlwiKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAncmVxdWlyZXMnOlxuICAgICAgICAgIGlmIChtb2RpZmllci5yZXF1aXJlcyAhPSBudWxsICYmICFBcnJheS5pc0FycmF5KG1vZGlmaWVyLnJlcXVpcmVzKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoSU5WQUxJRF9NT0RJRklFUl9FUlJPUiwgbW9kaWZpZXIubmFtZSwgJ1wicmVxdWlyZXNcIicsICdcImFycmF5XCInLCBcIlxcXCJcIiArIFN0cmluZyhtb2RpZmllci5yZXF1aXJlcykgKyBcIlxcXCJcIikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3JlcXVpcmVzSWZFeGlzdHMnOlxuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoSU5WQUxJRF9NT0RJRklFUl9FUlJPUiwgbW9kaWZpZXIubmFtZSwgJ1wicmVxdWlyZXNJZkV4aXN0c1wiJywgJ1wiYXJyYXlcIicsIFwiXFxcIlwiICsgU3RyaW5nKG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMpICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdvcHRpb25zJzpcbiAgICAgICAgY2FzZSAnZGF0YSc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiUG9wcGVySlM6IGFuIGludmFsaWQgcHJvcGVydHkgaGFzIGJlZW4gcHJvdmlkZWQgdG8gdGhlIFxcXCJcIiArIG1vZGlmaWVyLm5hbWUgKyBcIlxcXCIgbW9kaWZpZXIsIHZhbGlkIHByb3BlcnRpZXMgYXJlIFwiICsgVkFMSURfUFJPUEVSVElFUy5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlxcXCJcIiArIHMgKyBcIlxcXCJcIjtcbiAgICAgICAgICB9KS5qb2luKCcsICcpICsgXCI7IGJ1dCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgd2FzIHByb3ZpZGVkLlwiKTtcbiAgICAgIH1cblxuICAgICAgbW9kaWZpZXIucmVxdWlyZXMgJiYgbW9kaWZpZXIucmVxdWlyZXMuZm9yRWFjaChmdW5jdGlvbiAocmVxdWlyZW1lbnQpIHtcbiAgICAgICAgaWYgKG1vZGlmaWVycy5maW5kKGZ1bmN0aW9uIChtb2QpIHtcbiAgICAgICAgICByZXR1cm4gbW9kLm5hbWUgPT09IHJlcXVpcmVtZW50O1xuICAgICAgICB9KSA9PSBudWxsKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoTUlTU0lOR19ERVBFTkRFTkNZX0VSUk9SLCBTdHJpbmcobW9kaWZpZXIubmFtZSksIHJlcXVpcmVtZW50LCByZXF1aXJlbWVudCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcXVlQnkoYXJyLCBmbikge1xuICB2YXIgaWRlbnRpZmllcnMgPSBuZXcgU2V0KCk7XG4gIHJldHVybiBhcnIuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgdmFyIGlkZW50aWZpZXIgPSBmbihpdGVtKTtcblxuICAgIGlmICghaWRlbnRpZmllcnMuaGFzKGlkZW50aWZpZXIpKSB7XG4gICAgICBpZGVudGlmaWVycy5hZGQoaWRlbnRpZmllcik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQnlOYW1lKG1vZGlmaWVycykge1xuICB2YXIgbWVyZ2VkID0gbW9kaWZpZXJzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBjdXJyZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nID0gbWVyZ2VkW2N1cnJlbnQubmFtZV07XG4gICAgbWVyZ2VkW2N1cnJlbnQubmFtZV0gPSBleGlzdGluZyA/IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLCBjdXJyZW50LCB7XG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5vcHRpb25zLCBjdXJyZW50Lm9wdGlvbnMpLFxuICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcuZGF0YSwgY3VycmVudC5kYXRhKVxuICAgIH0pIDogY3VycmVudDtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9LCB7fSk7IC8vIElFMTEgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QudmFsdWVzXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1lcmdlZCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gbWVyZ2VkW2tleV07XG4gIH0pO1xufSIsImltcG9ydCBnZXRDb21wb3NpdGVSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IG9yZGVyTW9kaWZpZXJzIGZyb20gXCIuL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzXCI7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcIi4vdXRpbHMvZGVib3VuY2UuanNcIjtcbmltcG9ydCB2YWxpZGF0ZU1vZGlmaWVycyBmcm9tIFwiLi91dGlscy92YWxpZGF0ZU1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IHVuaXF1ZUJ5IGZyb20gXCIuL3V0aWxzL3VuaXF1ZUJ5LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCB7IGF1dG8gfSBmcm9tIFwiLi9lbnVtcy5qc1wiO1xudmFyIElOVkFMSURfRUxFTUVOVF9FUlJPUiA9ICdQb3BwZXI6IEludmFsaWQgcmVmZXJlbmNlIG9yIHBvcHBlciBhcmd1bWVudCBwcm92aWRlZC4gVGhleSBtdXN0IGJlIGVpdGhlciBhIERPTSBlbGVtZW50IG9yIHZpcnR1YWwgZWxlbWVudC4nO1xudmFyIElORklOSVRFX0xPT1BfRVJST1IgPSAnUG9wcGVyOiBBbiBpbmZpbml0ZSBsb29wIGluIHRoZSBtb2RpZmllcnMgY3ljbGUgaGFzIGJlZW4gZGV0ZWN0ZWQhIFRoZSBjeWNsZSBoYXMgYmVlbiBpbnRlcnJ1cHRlZCB0byBwcmV2ZW50IGEgYnJvd3NlciBjcmFzaC4nO1xudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgbW9kaWZpZXJzOiBbXSxcbiAgc3RyYXRlZ3k6ICdhYnNvbHV0ZSdcbn07XG5cbmZ1bmN0aW9uIGFyZVZhbGlkRWxlbWVudHMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gIWFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHJldHVybiAhKGVsZW1lbnQgJiYgdHlwZW9mIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3BwZXJHZW5lcmF0b3IoZ2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoZ2VuZXJhdG9yT3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgZ2VuZXJhdG9yT3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9nZW5lcmF0b3JPcHRpb25zID0gZ2VuZXJhdG9yT3B0aW9ucyxcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRNb2RpZmllcnMsXG4gICAgICBkZWZhdWx0TW9kaWZpZXJzID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmID09PSB2b2lkIDAgPyBbXSA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZixcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcbiAgICAgIGRlZmF1bHRPcHRpb25zID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9PT0gdm9pZCAwID8gREVGQVVMVF9PUFRJT05TIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmMjtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVBvcHBlcihyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgb3JkZXJlZE1vZGlmaWVyczogW10sXG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMsIGRlZmF1bHRPcHRpb25zKSxcbiAgICAgIG1vZGlmaWVyc0RhdGE6IHt9LFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2UsXG4gICAgICAgIHBvcHBlcjogcG9wcGVyXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICBzdHlsZXM6IHt9XG4gICAgfTtcbiAgICB2YXIgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIHZhciBpc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHZhciBpbnN0YW5jZSA9IHtcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHNldE9wdGlvbnM6IGZ1bmN0aW9uIHNldE9wdGlvbnMoc2V0T3B0aW9uc0FjdGlvbikge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzZXRPcHRpb25zQWN0aW9uID09PSAnZnVuY3Rpb24nID8gc2V0T3B0aW9uc0FjdGlvbihzdGF0ZS5vcHRpb25zKSA6IHNldE9wdGlvbnNBY3Rpb247XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgc3RhdGUub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBzdGF0ZS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGlzRWxlbWVudChyZWZlcmVuY2UpID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlKSA6IHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCkgOiBbXSxcbiAgICAgICAgICBwb3BwZXI6IGxpc3RTY3JvbGxQYXJlbnRzKHBvcHBlcilcbiAgICAgICAgfTsgLy8gT3JkZXJzIHRoZSBtb2RpZmllcnMgYmFzZWQgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBgcGhhc2VgXG4gICAgICAgIC8vIHByb3BlcnRpZXNcblxuICAgICAgICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyTW9kaWZpZXJzKG1lcmdlQnlOYW1lKFtdLmNvbmNhdChkZWZhdWx0TW9kaWZpZXJzLCBzdGF0ZS5vcHRpb25zLm1vZGlmaWVycykpKTsgLy8gU3RyaXAgb3V0IGRpc2FibGVkIG1vZGlmaWVyc1xuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobSkge1xuICAgICAgICAgIHJldHVybiBtLmVuYWJsZWQ7XG4gICAgICAgIH0pOyAvLyBWYWxpZGF0ZSB0aGUgcHJvdmlkZWQgbW9kaWZpZXJzIHNvIHRoYXQgdGhlIGNvbnN1bWVyIHdpbGwgZ2V0IHdhcm5lZFxuICAgICAgICAvLyBpZiBvbmUgb2YgdGhlIG1vZGlmaWVycyBpcyBpbnZhbGlkIGZvciBhbnkgcmVhc29uXG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgIHZhciBtb2RpZmllcnMgPSB1bmlxdWVCeShbXS5jb25jYXQob3JkZXJlZE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpLCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWU7XG4gICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YWxpZGF0ZU1vZGlmaWVycyhtb2RpZmllcnMpO1xuXG4gICAgICAgICAgaWYgKGdldEJhc2VQbGFjZW1lbnQoc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQpID09PSBhdXRvKSB7XG4gICAgICAgICAgICB2YXIgZmxpcE1vZGlmaWVyID0gc3RhdGUub3JkZXJlZE1vZGlmaWVycy5maW5kKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICAgICAgICB2YXIgbmFtZSA9IF9yZWYyLm5hbWU7XG4gICAgICAgICAgICAgIHJldHVybiBuYW1lID09PSAnZmxpcCc7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCFmbGlwTW9kaWZpZXIpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhdXRvXCIgcGxhY2VtZW50cyByZXF1aXJlIHRoZSBcImZsaXBcIiBtb2RpZmllciBiZScsICdwcmVzZW50IGFuZCBlbmFibGVkIHRvIHdvcmsuJ10uam9pbignICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2dldENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHBvcHBlciksXG4gICAgICAgICAgICAgIG1hcmdpblRvcCA9IF9nZXRDb21wdXRlZFN0eWxlLm1hcmdpblRvcCxcbiAgICAgICAgICAgICAgbWFyZ2luUmlnaHQgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5tYXJnaW5SaWdodCxcbiAgICAgICAgICAgICAgbWFyZ2luQm90dG9tID0gX2dldENvbXB1dGVkU3R5bGUubWFyZ2luQm90dG9tLFxuICAgICAgICAgICAgICBtYXJnaW5MZWZ0ID0gX2dldENvbXB1dGVkU3R5bGUubWFyZ2luTGVmdDsgLy8gV2Ugbm8gbG9uZ2VyIHRha2UgaW50byBhY2NvdW50IGBtYXJnaW5zYCBvbiB0aGUgcG9wcGVyLCBhbmQgaXQgY2FuXG4gICAgICAgICAgLy8gY2F1c2UgYnVncyB3aXRoIHBvc2l0aW9uaW5nLCBzbyB3ZSdsbCB3YXJuIHRoZSBjb25zdW1lclxuXG5cbiAgICAgICAgICBpZiAoW21hcmdpblRvcCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdF0uc29tZShmdW5jdGlvbiAobWFyZ2luKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChtYXJnaW4pO1xuICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oWydQb3BwZXI6IENTUyBcIm1hcmdpblwiIHN0eWxlcyBjYW5ub3QgYmUgdXNlZCB0byBhcHBseSBwYWRkaW5nJywgJ2JldHdlZW4gdGhlIHBvcHBlciBhbmQgaXRzIHJlZmVyZW5jZSBlbGVtZW50IG9yIGJvdW5kYXJ5LicsICdUbyByZXBsaWNhdGUgbWFyZ2luLCB1c2UgdGhlIGBvZmZzZXRgIG1vZGlmaWVyLCBhcyB3ZWxsIGFzJywgJ3RoZSBgcGFkZGluZ2Agb3B0aW9uIGluIHRoZSBgcHJldmVudE92ZXJmbG93YCBhbmQgYGZsaXBgJywgJ21vZGlmaWVycy4nXS5qb2luKCcgJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJ1bk1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgLy8gU3luYyB1cGRhdGUg4oCTIGl0IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkLCBldmVuIGlmIG5vdCBuZWNlc3NhcnkuIFRoaXNcbiAgICAgIC8vIGlzIHVzZWZ1bCBmb3IgbG93IGZyZXF1ZW5jeSB1cGRhdGVzIHdoZXJlIHN5bmMgYmVoYXZpb3Igc2ltcGxpZmllcyB0aGVcbiAgICAgIC8vIGxvZ2ljLlxuICAgICAgLy8gRm9yIGhpZ2ggZnJlcXVlbmN5IHVwZGF0ZXMgKGUuZy4gYHJlc2l6ZWAgYW5kIGBzY3JvbGxgIGV2ZW50cyksIGFsd2F5c1xuICAgICAgLy8gcHJlZmVyIHRoZSBhc3luYyBQb3BwZXIjdXBkYXRlIG1ldGhvZFxuICAgICAgZm9yY2VVcGRhdGU6IGZ1bmN0aW9uIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICBpZiAoaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3N0YXRlJGVsZW1lbnRzID0gc3RhdGUuZWxlbWVudHMsXG4gICAgICAgICAgICByZWZlcmVuY2UgPSBfc3RhdGUkZWxlbWVudHMucmVmZXJlbmNlLFxuICAgICAgICAgICAgcG9wcGVyID0gX3N0YXRlJGVsZW1lbnRzLnBvcHBlcjsgLy8gRG9uJ3QgcHJvY2VlZCBpZiBgcmVmZXJlbmNlYCBvciBgcG9wcGVyYCBhcmUgbm90IHZhbGlkIGVsZW1lbnRzXG4gICAgICAgIC8vIGFueW1vcmVcblxuICAgICAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihJTlZBTElEX0VMRU1FTlRfRVJST1IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBTdG9yZSB0aGUgcmVmZXJlbmNlIGFuZCBwb3BwZXIgcmVjdHMgdG8gYmUgcmVhZCBieSBtb2RpZmllcnNcblxuXG4gICAgICAgIHN0YXRlLnJlY3RzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogZ2V0Q29tcG9zaXRlUmVjdChyZWZlcmVuY2UsIGdldE9mZnNldFBhcmVudChwb3BwZXIpLCBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnKSxcbiAgICAgICAgICBwb3BwZXI6IGdldExheW91dFJlY3QocG9wcGVyKVxuICAgICAgICB9OyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byByZXNldCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUuIFRoZVxuICAgICAgICAvLyBtb3N0IGNvbW1vbiB1c2UgY2FzZSBmb3IgdGhpcyBpcyB0aGUgYGZsaXBgIG1vZGlmaWVyIGNoYW5naW5nIHRoZVxuICAgICAgICAvLyBwbGFjZW1lbnQsIHdoaWNoIHRoZW4gbmVlZHMgdG8gcmUtcnVuIGFsbCB0aGUgbW9kaWZpZXJzLCBiZWNhdXNlIHRoZVxuICAgICAgICAvLyBsb2dpYyB3YXMgcHJldmlvdXNseSByYW4gZm9yIHRoZSBwcmV2aW91cyBwbGFjZW1lbnQgYW5kIGlzIHRoZXJlZm9yZVxuICAgICAgICAvLyBzdGFsZS9pbmNvcnJlY3RcblxuICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5wbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDsgLy8gT24gZWFjaCB1cGRhdGUgY3ljbGUsIHRoZSBgbW9kaWZpZXJzRGF0YWAgcHJvcGVydHkgZm9yIGVhY2ggbW9kaWZpZXJcbiAgICAgICAgLy8gaXMgZmlsbGVkIHdpdGggdGhlIGluaXRpYWwgZGF0YSBzcGVjaWZpZWQgYnkgdGhlIG1vZGlmaWVyLiBUaGlzIG1lYW5zXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgcGVyc2lzdCBhbmQgaXMgZnJlc2ggb24gZWFjaCB1cGRhdGUuXG4gICAgICAgIC8vIFRvIGVuc3VyZSBwZXJzaXN0ZW50IGRhdGEsIHVzZSBgJHtuYW1lfSNwZXJzaXN0ZW50YFxuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGUubW9kaWZpZXJzRGF0YVttb2RpZmllci5uYW1lXSA9IE9iamVjdC5hc3NpZ24oe30sIG1vZGlmaWVyLmRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIF9fZGVidWdfbG9vcHNfXyA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgX19kZWJ1Z19sb29wc19fICs9IDE7XG5cbiAgICAgICAgICAgIGlmIChfX2RlYnVnX2xvb3BzX18gPiAxMDApIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihJTkZJTklURV9MT09QX0VSUk9SKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIOKAkyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoSU5WQUxJRF9FTEVNRU5UX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIGluc3RhbmNlLnNldE9wdGlvbnMob3B0aW9ucykudGhlbihmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIGlmICghaXNEZXN0cm95ZWQgJiYgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKSB7XG4gICAgICAgIG9wdGlvbnMub25GaXJzdFVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgYmVmb3JlIHRoZSBmaXJzdFxuICAgIC8vIHVwZGF0ZSBjeWNsZSBydW5zLiBUaGV5IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHVwZGF0ZVxuICAgIC8vIGN5Y2xlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgbW9kaWZpZXIgYWRkcyBzb21lIHBlcnNpc3RlbnQgZGF0YSB0aGF0XG4gICAgLy8gb3RoZXIgbW9kaWZpZXJzIG5lZWQgdG8gdXNlLCBidXQgdGhlIG1vZGlmaWVyIGlzIHJ1biBhZnRlciB0aGUgZGVwZW5kZW50XG4gICAgLy8gb25lLlxuXG4gICAgZnVuY3Rpb24gcnVuTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgICB2YXIgbmFtZSA9IF9yZWYzLm5hbWUsXG4gICAgICAgICAgICBfcmVmMyRvcHRpb25zID0gX3JlZjMub3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnMgPSBfcmVmMyRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYzJG9wdGlvbnMsXG4gICAgICAgICAgICBlZmZlY3QgPSBfcmVmMy5lZmZlY3Q7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBlZmZlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2xlYW51cEZuID0gZWZmZWN0KHtcbiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB2YXIgbm9vcEZuID0gZnVuY3Rpb24gbm9vcEZuKCkge307XG5cbiAgICAgICAgICBlZmZlY3RDbGVhbnVwRm5zLnB1c2goY2xlYW51cEZuIHx8IG5vb3BGbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSk7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xufVxuZXhwb3J0IHZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgZGV0ZWN0T3ZlcmZsb3cgfTsiLCJpbXBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93IH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7XG5pbXBvcnQgZXZlbnRMaXN0ZW5lcnMgZnJvbSBcIi4vbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5pbXBvcnQgcG9wcGVyT2Zmc2V0cyBmcm9tIFwiLi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanNcIjtcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanNcIjtcbmltcG9ydCBvZmZzZXQgZnJvbSBcIi4vbW9kaWZpZXJzL29mZnNldC5qc1wiO1xuaW1wb3J0IGZsaXAgZnJvbSBcIi4vbW9kaWZpZXJzL2ZsaXAuanNcIjtcbmltcG9ydCBwcmV2ZW50T3ZlcmZsb3cgZnJvbSBcIi4vbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGFycm93IGZyb20gXCIuL21vZGlmaWVycy9hcnJvdy5qc1wiO1xuaW1wb3J0IGhpZGUgZnJvbSBcIi4vbW9kaWZpZXJzL2hpZGUuanNcIjtcbnZhciBkZWZhdWx0TW9kaWZpZXJzID0gW2V2ZW50TGlzdGVuZXJzLCBwb3BwZXJPZmZzZXRzLCBjb21wdXRlU3R5bGVzLCBhcHBseVN0eWxlcywgb2Zmc2V0LCBmbGlwLCBwcmV2ZW50T3ZlcmZsb3csIGFycm93LCBoaWRlXTtcbnZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKHtcbiAgZGVmYXVsdE1vZGlmaWVyczogZGVmYXVsdE1vZGlmaWVyc1xufSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyLCBwb3BwZXJHZW5lcmF0b3IsIGRlZmF1bHRNb2RpZmllcnMsIGRldGVjdE92ZXJmbG93IH07IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tIFwiLi9wb3BwZXItbGl0ZS5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCAqIGZyb20gXCIuL21vZGlmaWVycy9pbmRleC5qc1wiOyIsIi8qIGdsb2JhbCBNYXA6cmVhZG9ubHksIFNldDpyZWFkb25seSwgQXJyYXlCdWZmZXI6cmVhZG9ubHkgKi9cblxudmFyIGhhc0VsZW1lbnRUeXBlID0gdHlwZW9mIEVsZW1lbnQgIT09ICd1bmRlZmluZWQnO1xudmFyIGhhc01hcCA9IHR5cGVvZiBNYXAgPT09ICdmdW5jdGlvbic7XG52YXIgaGFzU2V0ID0gdHlwZW9mIFNldCA9PT0gJ2Z1bmN0aW9uJztcbnZhciBoYXNBcnJheUJ1ZmZlciA9IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiAhIUFycmF5QnVmZmVyLmlzVmlldztcblxuLy8gTm90ZTogV2UgKipkb24ndCoqIG5lZWQgYGVudkhhc0JpZ0ludDY0QXJyYXlgIGluIGZkZSBlczYvaW5kZXguanNcblxuZnVuY3Rpb24gZXF1YWwoYSwgYikge1xuICAvLyBTVEFSVDogZmFzdC1kZWVwLWVxdWFsIGVzNi9pbmRleC5qcyAzLjEuM1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG5cbiAgaWYgKGEgJiYgYiAmJiB0eXBlb2YgYSA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiA9PSAnb2JqZWN0Jykge1xuICAgIGlmIChhLmNvbnN0cnVjdG9yICE9PSBiLmNvbnN0cnVjdG9yKSByZXR1cm4gZmFsc2U7XG5cbiAgICB2YXIgbGVuZ3RoLCBpLCBrZXlzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tICE9PSAwOylcbiAgICAgICAgaWYgKCFlcXVhbChhW2ldLCBiW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gU1RBUlQ6IE1vZGlmaWNhdGlvbnM6XG4gICAgLy8gMS4gRXh0cmEgYGhhczxUeXBlPiAmJmAgaGVscGVycyBpbiBpbml0aWFsIGNvbmRpdGlvbiBhbGxvdyBlczYgY29kZVxuICAgIC8vICAgIHRvIGNvLWV4aXN0IHdpdGggZXM1LlxuICAgIC8vIDIuIFJlcGxhY2UgYGZvciBvZmAgd2l0aCBlczUgY29tcGxpYW50IGl0ZXJhdGlvbiB1c2luZyBgZm9yYC5cbiAgICAvLyAgICBCYXNpY2FsbHksIHRha2U6XG4gICAgLy9cbiAgICAvLyAgICBgYGBqc1xuICAgIC8vICAgIGZvciAoaSBvZiBhLmVudHJpZXMoKSlcbiAgICAvLyAgICAgIGlmICghYi5oYXMoaVswXSkpIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICBgYGBcbiAgICAvL1xuICAgIC8vICAgIC4uLiBhbmQgY29udmVydCB0bzpcbiAgICAvL1xuICAgIC8vICAgIGBgYGpzXG4gICAgLy8gICAgaXQgPSBhLmVudHJpZXMoKTtcbiAgICAvLyAgICB3aGlsZSAoIShpID0gaXQubmV4dCgpKS5kb25lKVxuICAgIC8vICAgICAgaWYgKCFiLmhhcyhpLnZhbHVlWzBdKSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgIGBgYFxuICAgIC8vXG4gICAgLy8gICAgKipOb3RlKio6IGBpYCBhY2Nlc3Mgc3dpdGNoZXMgdG8gYGkudmFsdWVgLlxuICAgIHZhciBpdDtcbiAgICBpZiAoaGFzTWFwICYmIChhIGluc3RhbmNlb2YgTWFwKSAmJiAoYiBpbnN0YW5jZW9mIE1hcCkpIHtcbiAgICAgIGlmIChhLnNpemUgIT09IGIuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaXQgPSBhLmVudHJpZXMoKTtcbiAgICAgIHdoaWxlICghKGkgPSBpdC5uZXh0KCkpLmRvbmUpXG4gICAgICAgIGlmICghYi5oYXMoaS52YWx1ZVswXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIGl0ID0gYS5lbnRyaWVzKCk7XG4gICAgICB3aGlsZSAoIShpID0gaXQubmV4dCgpKS5kb25lKVxuICAgICAgICBpZiAoIWVxdWFsKGkudmFsdWVbMV0sIGIuZ2V0KGkudmFsdWVbMF0pKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGhhc1NldCAmJiAoYSBpbnN0YW5jZW9mIFNldCkgJiYgKGIgaW5zdGFuY2VvZiBTZXQpKSB7XG4gICAgICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHJldHVybiBmYWxzZTtcbiAgICAgIGl0ID0gYS5lbnRyaWVzKCk7XG4gICAgICB3aGlsZSAoIShpID0gaXQubmV4dCgpKS5kb25lKVxuICAgICAgICBpZiAoIWIuaGFzKGkudmFsdWVbMF0pKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gRU5EOiBNb2RpZmljYXRpb25zXG5cbiAgICBpZiAoaGFzQXJyYXlCdWZmZXIgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KGEpICYmIEFycmF5QnVmZmVyLmlzVmlldyhiKSkge1xuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICAgIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoYS5jb25zdHJ1Y3RvciA9PT0gUmVnRXhwKSByZXR1cm4gYS5zb3VyY2UgPT09IGIuc291cmNlICYmIGEuZmxhZ3MgPT09IGIuZmxhZ3M7XG4gICAgLy8gU1RBUlQ6IE1vZGlmaWNhdGlvbnM6XG4gICAgLy8gQXBwbHkgZ3VhcmRzIGZvciBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaGFuZGxpbmcuIFNlZTpcbiAgICAvLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9Gb3JtaWRhYmxlTGFicy9yZWFjdC1mYXN0LWNvbXBhcmUvaXNzdWVzLzY0XG4gICAgLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZXBvYmVyZXpraW4vZmFzdC1kZWVwLWVxdWFsL2lzc3Vlcy80OVxuICAgIGlmIChhLnZhbHVlT2YgIT09IE9iamVjdC5wcm90b3R5cGUudmFsdWVPZiAmJiB0eXBlb2YgYS52YWx1ZU9mID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBiLnZhbHVlT2YgPT09ICdmdW5jdGlvbicpIHJldHVybiBhLnZhbHVlT2YoKSA9PT0gYi52YWx1ZU9mKCk7XG4gICAgaWYgKGEudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgdHlwZW9mIGEudG9TdHJpbmcgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGIudG9TdHJpbmcgPT09ICdmdW5jdGlvbicpIHJldHVybiBhLnRvU3RyaW5nKCkgPT09IGIudG9TdHJpbmcoKTtcbiAgICAvLyBFTkQ6IE1vZGlmaWNhdGlvbnNcblxuICAgIGtleXMgPSBPYmplY3Qua2V5cyhhKTtcbiAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoICE9PSBPYmplY3Qua2V5cyhiKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tICE9PSAwOylcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIGtleXNbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gRU5EOiBmYXN0LWRlZXAtZXF1YWxcblxuICAgIC8vIFNUQVJUOiByZWFjdC1mYXN0LWNvbXBhcmVcbiAgICAvLyBjdXN0b20gaGFuZGxpbmcgZm9yIERPTSBlbGVtZW50c1xuICAgIGlmIChoYXNFbGVtZW50VHlwZSAmJiBhIGluc3RhbmNlb2YgRWxlbWVudCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gY3VzdG9tIGhhbmRsaW5nIGZvciBSZWFjdC9QcmVhY3RcbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspIHtcbiAgICAgIGlmICgoa2V5c1tpXSA9PT0gJ19vd25lcicgfHwga2V5c1tpXSA9PT0gJ19fdicgfHwga2V5c1tpXSA9PT0gJ19fbycpICYmIGEuJCR0eXBlb2YpIHtcbiAgICAgICAgLy8gUmVhY3Qtc3BlY2lmaWM6IGF2b2lkIHRyYXZlcnNpbmcgUmVhY3QgZWxlbWVudHMnIF9vd25lclxuICAgICAgICAvLyBQcmVhY3Qtc3BlY2lmaWM6IGF2b2lkIHRyYXZlcnNpbmcgUHJlYWN0IGVsZW1lbnRzJyBfX3YgYW5kIF9fb1xuICAgICAgICAvLyAgICBfX3YgPSAkX29yaWdpbmFsIC8gJF92bm9kZVxuICAgICAgICAvLyAgICBfX28gPSAkX293bmVyXG4gICAgICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgY29udGFpbiBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCBhcmUgbm90IG5lZWRlZCB3aGVuXG4gICAgICAgIC8vIGNvbXBhcmluZyB0aGUgYWN0dWFsIGVsZW1lbnRzIChhbmQgbm90IHRoZWlyIG93bmVycylcbiAgICAgICAgLy8gLiQkdHlwZW9mIGFuZCAuX3N0b3JlIG9uIGp1c3QgcmVhc29uYWJsZSBtYXJrZXJzIG9mIGVsZW1lbnRzXG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGFsbCBvdGhlciBwcm9wZXJ0aWVzIHNob3VsZCBiZSB0cmF2ZXJzZWQgYXMgdXN1YWxcbiAgICAgIGlmICghZXF1YWwoYVtrZXlzW2ldXSwgYltrZXlzW2ldXSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gRU5EOiByZWFjdC1mYXN0LWNvbXBhcmVcblxuICAgIC8vIFNUQVJUOiBmYXN0LWRlZXAtZXF1YWxcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBhICE9PSBhICYmIGIgIT09IGI7XG59XG4vLyBlbmQgZmFzdC1kZWVwLWVxdWFsXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNFcXVhbChhLCBiKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVxdWFsKGEsIGIpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICgoKGVycm9yLm1lc3NhZ2UgfHwgJycpLm1hdGNoKC9zdGFja3xyZWN1cnNpb24vaSkpKSB7XG4gICAgICAvLyB3YXJuIG9uIGNpcmN1bGFyIHJlZmVyZW5jZXMsIGRvbid0IGNyYXNoXG4gICAgICAvLyBicm93c2VycyBnaXZlIHRoaXMgZGlmZmVyZW50IGVycm9ycyBuYW1lIGFuZCBtZXNzYWdlczpcbiAgICAgIC8vIGNocm9tZS9zYWZhcmk6IFwiUmFuZ2VFcnJvclwiLCBcIk1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCJcbiAgICAgIC8vIGZpcmVmb3g6IFwiSW50ZXJuYWxFcnJvclwiLCB0b28gbXVjaCByZWN1cnNpb25cIlxuICAgICAgLy8gZWRnZTogXCJFcnJvclwiLCBcIk91dCBvZiBzdGFjayBzcGFjZVwiXG4gICAgICBjb25zb2xlLndhcm4oJ3JlYWN0LWZhc3QtY29tcGFyZSBjYW5ub3QgaGFuZGxlIGNpcmN1bGFyIHJlZnMnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gc29tZSBvdGhlciBlcnJvci4gd2Ugc2hvdWxkIGRlZmluaXRlbHkga25vdyBhYm91dCB0aGVzZVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IGNyZWF0ZVBvcHBlciBhcyBkZWZhdWx0Q3JlYXRlUG9wcGVyIH0gZnJvbSAnQHBvcHBlcmpzL2NvcmUnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAncmVhY3QtZmFzdC1jb21wYXJlJztcbmltcG9ydCB7IGZyb21FbnRyaWVzLCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IH0gZnJvbSAnLi91dGlscyc7XG52YXIgRU1QVFlfTU9ESUZJRVJTID0gW107XG5leHBvcnQgdmFyIHVzZVBvcHBlciA9IGZ1bmN0aW9uIHVzZVBvcHBlcihyZWZlcmVuY2VFbGVtZW50LCBwb3BwZXJFbGVtZW50LCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgcHJldk9wdGlvbnMgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHZhciBvcHRpb25zV2l0aERlZmF1bHRzID0ge1xuICAgIG9uRmlyc3RVcGRhdGU6IG9wdGlvbnMub25GaXJzdFVwZGF0ZSxcbiAgICBwbGFjZW1lbnQ6IG9wdGlvbnMucGxhY2VtZW50IHx8ICdib3R0b20nLFxuICAgIHN0cmF0ZWd5OiBvcHRpb25zLnN0cmF0ZWd5IHx8ICdhYnNvbHV0ZScsXG4gICAgbW9kaWZpZXJzOiBvcHRpb25zLm1vZGlmaWVycyB8fCBFTVBUWV9NT0RJRklFUlNcbiAgfTtcblxuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIHN0eWxlczoge1xuICAgICAgcG9wcGVyOiB7XG4gICAgICAgIHBvc2l0aW9uOiBvcHRpb25zV2l0aERlZmF1bHRzLnN0cmF0ZWd5LFxuICAgICAgICBsZWZ0OiAnMCcsXG4gICAgICAgIHRvcDogJzAnXG4gICAgICB9LFxuICAgICAgYXJyb3c6IHtcbiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICAgIH1cbiAgICB9LFxuICAgIGF0dHJpYnV0ZXM6IHt9XG4gIH0pLFxuICAgICAgc3RhdGUgPSBfUmVhY3QkdXNlU3RhdGVbMF0sXG4gICAgICBzZXRTdGF0ZSA9IF9SZWFjdCR1c2VTdGF0ZVsxXTtcblxuICB2YXIgdXBkYXRlU3RhdGVNb2RpZmllciA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAndXBkYXRlU3RhdGUnLFxuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIHBoYXNlOiAnd3JpdGUnLFxuICAgICAgZm46IGZ1bmN0aW9uIGZuKF9yZWYpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgICAgICAgdmFyIGVsZW1lbnRzID0gT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpO1xuICAgICAgICBSZWFjdERPTS5mbHVzaFN5bmMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgIHN0eWxlczogZnJvbUVudHJpZXMoZWxlbWVudHMubWFwKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiBbZWxlbWVudCwgc3RhdGUuc3R5bGVzW2VsZW1lbnRdIHx8IHt9XTtcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGZyb21FbnRyaWVzKGVsZW1lbnRzLm1hcChmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gW2VsZW1lbnQsIHN0YXRlLmF0dHJpYnV0ZXNbZWxlbWVudF1dO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJlcXVpcmVzOiBbJ2NvbXB1dGVTdHlsZXMnXVxuICAgIH07XG4gIH0sIFtdKTtcbiAgdmFyIHBvcHBlck9wdGlvbnMgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmV3T3B0aW9ucyA9IHtcbiAgICAgIG9uRmlyc3RVcGRhdGU6IG9wdGlvbnNXaXRoRGVmYXVsdHMub25GaXJzdFVwZGF0ZSxcbiAgICAgIHBsYWNlbWVudDogb3B0aW9uc1dpdGhEZWZhdWx0cy5wbGFjZW1lbnQsXG4gICAgICBzdHJhdGVneTogb3B0aW9uc1dpdGhEZWZhdWx0cy5zdHJhdGVneSxcbiAgICAgIG1vZGlmaWVyczogW10uY29uY2F0KG9wdGlvbnNXaXRoRGVmYXVsdHMubW9kaWZpZXJzLCBbdXBkYXRlU3RhdGVNb2RpZmllciwge1xuICAgICAgICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgfV0pXG4gICAgfTtcblxuICAgIGlmIChpc0VxdWFsKHByZXZPcHRpb25zLmN1cnJlbnQsIG5ld09wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gcHJldk9wdGlvbnMuY3VycmVudCB8fCBuZXdPcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmV2T3B0aW9ucy5jdXJyZW50ID0gbmV3T3B0aW9ucztcbiAgICAgIHJldHVybiBuZXdPcHRpb25zO1xuICAgIH1cbiAgfSwgW29wdGlvbnNXaXRoRGVmYXVsdHMub25GaXJzdFVwZGF0ZSwgb3B0aW9uc1dpdGhEZWZhdWx0cy5wbGFjZW1lbnQsIG9wdGlvbnNXaXRoRGVmYXVsdHMuc3RyYXRlZ3ksIG9wdGlvbnNXaXRoRGVmYXVsdHMubW9kaWZpZXJzLCB1cGRhdGVTdGF0ZU1vZGlmaWVyXSk7XG4gIHZhciBwb3BwZXJJbnN0YW5jZVJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocG9wcGVySW5zdGFuY2VSZWYuY3VycmVudCkge1xuICAgICAgcG9wcGVySW5zdGFuY2VSZWYuY3VycmVudC5zZXRPcHRpb25zKHBvcHBlck9wdGlvbnMpO1xuICAgIH1cbiAgfSwgW3BvcHBlck9wdGlvbnNdKTtcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHJlZmVyZW5jZUVsZW1lbnQgPT0gbnVsbCB8fCBwb3BwZXJFbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY3JlYXRlUG9wcGVyID0gb3B0aW9ucy5jcmVhdGVQb3BwZXIgfHwgZGVmYXVsdENyZWF0ZVBvcHBlcjtcbiAgICB2YXIgcG9wcGVySW5zdGFuY2UgPSBjcmVhdGVQb3BwZXIocmVmZXJlbmNlRWxlbWVudCwgcG9wcGVyRWxlbWVudCwgcG9wcGVyT3B0aW9ucyk7XG4gICAgcG9wcGVySW5zdGFuY2VSZWYuY3VycmVudCA9IHBvcHBlckluc3RhbmNlO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBwb3BwZXJJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICBwb3BwZXJJbnN0YW5jZVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9O1xuICB9LCBbcmVmZXJlbmNlRWxlbWVudCwgcG9wcGVyRWxlbWVudCwgb3B0aW9ucy5jcmVhdGVQb3BwZXJdKTtcbiAgcmV0dXJuIHtcbiAgICBzdGF0ZTogcG9wcGVySW5zdGFuY2VSZWYuY3VycmVudCA/IHBvcHBlckluc3RhbmNlUmVmLmN1cnJlbnQuc3RhdGUgOiBudWxsLFxuICAgIHN0eWxlczogc3RhdGUuc3R5bGVzLFxuICAgIGF0dHJpYnV0ZXM6IHN0YXRlLmF0dHJpYnV0ZXMsXG4gICAgdXBkYXRlOiBwb3BwZXJJbnN0YW5jZVJlZi5jdXJyZW50ID8gcG9wcGVySW5zdGFuY2VSZWYuY3VycmVudC51cGRhdGUgOiBudWxsLFxuICAgIGZvcmNlVXBkYXRlOiBwb3BwZXJJbnN0YW5jZVJlZi5jdXJyZW50ID8gcG9wcGVySW5zdGFuY2VSZWYuY3VycmVudC5mb3JjZVVwZGF0ZSA6IG51bGxcbiAgfTtcbn07IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTWFuYWdlclJlZmVyZW5jZU5vZGVDb250ZXh0IH0gZnJvbSAnLi9NYW5hZ2VyJztcbmltcG9ydCB7IHVud3JhcEFycmF5LCBzZXRSZWYgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IHVzZVBvcHBlciB9IGZyb20gJy4vdXNlUG9wcGVyJztcblxudmFyIE5PT1AgPSBmdW5jdGlvbiBOT09QKCkge1xuICByZXR1cm4gdm9pZCAwO1xufTtcblxudmFyIE5PT1BfUFJPTUlTRSA9IGZ1bmN0aW9uIE5PT1BfUFJPTUlTRSgpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbn07XG5cbnZhciBFTVBUWV9NT0RJRklFUlMgPSBbXTtcbmV4cG9ydCBmdW5jdGlvbiBQb3BwZXIoX3JlZikge1xuICB2YXIgX3JlZiRwbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYkcGxhY2VtZW50ID09PSB2b2lkIDAgPyAnYm90dG9tJyA6IF9yZWYkcGxhY2VtZW50LFxuICAgICAgX3JlZiRzdHJhdGVneSA9IF9yZWYuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9yZWYkc3RyYXRlZ3kgPT09IHZvaWQgMCA/ICdhYnNvbHV0ZScgOiBfcmVmJHN0cmF0ZWd5LFxuICAgICAgX3JlZiRtb2RpZmllcnMgPSBfcmVmLm1vZGlmaWVycyxcbiAgICAgIG1vZGlmaWVycyA9IF9yZWYkbW9kaWZpZXJzID09PSB2b2lkIDAgPyBFTVBUWV9NT0RJRklFUlMgOiBfcmVmJG1vZGlmaWVycyxcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSBfcmVmLnJlZmVyZW5jZUVsZW1lbnQsXG4gICAgICBvbkZpcnN0VXBkYXRlID0gX3JlZi5vbkZpcnN0VXBkYXRlLFxuICAgICAgaW5uZXJSZWYgPSBfcmVmLmlubmVyUmVmLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgcmVmZXJlbmNlTm9kZSA9IFJlYWN0LnVzZUNvbnRleHQoTWFuYWdlclJlZmVyZW5jZU5vZGVDb250ZXh0KTtcblxuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUobnVsbCksXG4gICAgICBwb3BwZXJFbGVtZW50ID0gX1JlYWN0JHVzZVN0YXRlWzBdLFxuICAgICAgc2V0UG9wcGVyRWxlbWVudCA9IF9SZWFjdCR1c2VTdGF0ZVsxXTtcblxuICB2YXIgX1JlYWN0JHVzZVN0YXRlMiA9IFJlYWN0LnVzZVN0YXRlKG51bGwpLFxuICAgICAgYXJyb3dFbGVtZW50ID0gX1JlYWN0JHVzZVN0YXRlMlswXSxcbiAgICAgIHNldEFycm93RWxlbWVudCA9IF9SZWFjdCR1c2VTdGF0ZTJbMV07XG5cbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBzZXRSZWYoaW5uZXJSZWYsIHBvcHBlckVsZW1lbnQpO1xuICB9LCBbaW5uZXJSZWYsIHBvcHBlckVsZW1lbnRdKTtcbiAgdmFyIG9wdGlvbnMgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBzdHJhdGVneTogc3RyYXRlZ3ksXG4gICAgICBvbkZpcnN0VXBkYXRlOiBvbkZpcnN0VXBkYXRlLFxuICAgICAgbW9kaWZpZXJzOiBbXS5jb25jYXQobW9kaWZpZXJzLCBbe1xuICAgICAgICBuYW1lOiAnYXJyb3cnLFxuICAgICAgICBlbmFibGVkOiBhcnJvd0VsZW1lbnQgIT0gbnVsbCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGVsZW1lbnQ6IGFycm93RWxlbWVudFxuICAgICAgICB9XG4gICAgICB9XSlcbiAgICB9O1xuICB9LCBbcGxhY2VtZW50LCBzdHJhdGVneSwgb25GaXJzdFVwZGF0ZSwgbW9kaWZpZXJzLCBhcnJvd0VsZW1lbnRdKTtcblxuICB2YXIgX3VzZVBvcHBlciA9IHVzZVBvcHBlcihyZWZlcmVuY2VFbGVtZW50IHx8IHJlZmVyZW5jZU5vZGUsIHBvcHBlckVsZW1lbnQsIG9wdGlvbnMpLFxuICAgICAgc3RhdGUgPSBfdXNlUG9wcGVyLnN0YXRlLFxuICAgICAgc3R5bGVzID0gX3VzZVBvcHBlci5zdHlsZXMsXG4gICAgICBmb3JjZVVwZGF0ZSA9IF91c2VQb3BwZXIuZm9yY2VVcGRhdGUsXG4gICAgICB1cGRhdGUgPSBfdXNlUG9wcGVyLnVwZGF0ZTtcblxuICB2YXIgY2hpbGRyZW5Qcm9wcyA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZWY6IHNldFBvcHBlckVsZW1lbnQsXG4gICAgICBzdHlsZTogc3R5bGVzLnBvcHBlcixcbiAgICAgIHBsYWNlbWVudDogc3RhdGUgPyBzdGF0ZS5wbGFjZW1lbnQgOiBwbGFjZW1lbnQsXG4gICAgICBoYXNQb3BwZXJFc2NhcGVkOiBzdGF0ZSAmJiBzdGF0ZS5tb2RpZmllcnNEYXRhLmhpZGUgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLmhpZGUuaGFzUG9wcGVyRXNjYXBlZCA6IG51bGwsXG4gICAgICBpc1JlZmVyZW5jZUhpZGRlbjogc3RhdGUgJiYgc3RhdGUubW9kaWZpZXJzRGF0YS5oaWRlID8gc3RhdGUubW9kaWZpZXJzRGF0YS5oaWRlLmlzUmVmZXJlbmNlSGlkZGVuIDogbnVsbCxcbiAgICAgIGFycm93UHJvcHM6IHtcbiAgICAgICAgc3R5bGU6IHN0eWxlcy5hcnJvdyxcbiAgICAgICAgcmVmOiBzZXRBcnJvd0VsZW1lbnRcbiAgICAgIH0sXG4gICAgICBmb3JjZVVwZGF0ZTogZm9yY2VVcGRhdGUgfHwgTk9PUCxcbiAgICAgIHVwZGF0ZTogdXBkYXRlIHx8IE5PT1BfUFJPTUlTRVxuICAgIH07XG4gIH0sIFtzZXRQb3BwZXJFbGVtZW50LCBzZXRBcnJvd0VsZW1lbnQsIHBsYWNlbWVudCwgc3RhdGUsIHN0eWxlcywgdXBkYXRlLCBmb3JjZVVwZGF0ZV0pO1xuICByZXR1cm4gdW53cmFwQXJyYXkoY2hpbGRyZW4pKGNoaWxkcmVuUHJvcHMpO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgX19ERVZfXyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbic7XG5cbnZhciB3YXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKF9fREVWX18pIHtcbiAgdmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uIHByaW50V2FybmluZyhmb3JtYXQsIGFyZ3MpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBhcmdzID0gbmV3IEFycmF5KGxlbiA+IDEgPyBsZW4gLSAxIDogMCk7XG4gICAgZm9yICh2YXIga2V5ID0gMTsga2V5IDwgbGVuOyBrZXkrKykge1xuICAgICAgYXJnc1trZXkgLSAxXSA9IGFyZ3VtZW50c1trZXldO1xuICAgIH1cbiAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgK1xuICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICAgIH0pO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH1cblxuICB3YXJuaW5nID0gZnVuY3Rpb24oY29uZGl0aW9uLCBmb3JtYXQsIGFyZ3MpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBhcmdzID0gbmV3IEFycmF5KGxlbiA+IDIgPyBsZW4gLSAyIDogMCk7XG4gICAgZm9yICh2YXIga2V5ID0gMjsga2V5IDwgbGVuOyBrZXkrKykge1xuICAgICAgYXJnc1trZXkgLSAyXSA9IGFyZ3VtZW50c1trZXldO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnYHdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArXG4gICAgICAgICAgJ21lc3NhZ2UgYXJndW1lbnQnXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KG51bGwsIFtmb3JtYXRdLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdhcm5pbmc7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgd2FybmluZyBmcm9tICd3YXJuaW5nJztcbmltcG9ydCB7IE1hbmFnZXJSZWZlcmVuY2VOb2RlU2V0dGVyQ29udGV4dCB9IGZyb20gJy4vTWFuYWdlcic7XG5pbXBvcnQgeyBzYWZlSW52b2tlLCB1bndyYXBBcnJheSwgc2V0UmVmIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgZnVuY3Rpb24gUmVmZXJlbmNlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGlubmVyUmVmID0gX3JlZi5pbm5lclJlZjtcbiAgdmFyIHNldFJlZmVyZW5jZU5vZGUgPSBSZWFjdC51c2VDb250ZXh0KE1hbmFnZXJSZWZlcmVuY2VOb2RlU2V0dGVyQ29udGV4dCk7XG4gIHZhciByZWZIYW5kbGVyID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBzZXRSZWYoaW5uZXJSZWYsIG5vZGUpO1xuICAgIHNhZmVJbnZva2Uoc2V0UmVmZXJlbmNlTm9kZSwgbm9kZSk7XG4gIH0sIFtpbm5lclJlZiwgc2V0UmVmZXJlbmNlTm9kZV0pOyAvLyByYW4gb24gdW5tb3VudFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG5cbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHNldFJlZihpbm5lclJlZiwgbnVsbCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHdhcm5pbmcoQm9vbGVhbihzZXRSZWZlcmVuY2VOb2RlKSwgJ2BSZWZlcmVuY2VgIHNob3VsZCBub3QgYmUgdXNlZCBvdXRzaWRlIG9mIGEgYE1hbmFnZXJgIGNvbXBvbmVudC4nKTtcbiAgfSwgW3NldFJlZmVyZW5jZU5vZGVdKTtcbiAgcmV0dXJuIHVud3JhcEFycmF5KGNoaWxkcmVuKSh7XG4gICAgcmVmOiByZWZIYW5kbGVyXG4gIH0pO1xufSIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc2V0TW9udGggZnJvbSBcIi4uL3NldE1vbnRoL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcblxuLyoqXG4gKiBAbmFtZSBzZXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgU2V0IGRhdGUgdmFsdWVzIHRvIGEgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNldCBkYXRlIHZhbHVlcyB0byBhIGdpdmVuIGRhdGUuXG4gKlxuICogU2V0cyB0aW1lIHZhbHVlcyB0byBkYXRlIGZyb20gb2JqZWN0IGB2YWx1ZXNgLlxuICogQSB2YWx1ZSBpcyBub3Qgc2V0IGlmIGl0IGlzIHVuZGVmaW5lZCBvciBudWxsIG9yIGRvZXNuJ3QgZXhpc3QgaW4gYHZhbHVlc2AuXG4gKlxuICogTm90ZSBhYm91dCBidW5kbGUgc2l6ZTogYHNldGAgZG9lcyBub3QgaW50ZXJuYWxseSB1c2UgYHNldFhgIGZ1bmN0aW9ucyBmcm9tIGRhdGUtZm5zIGJ1dCBpbnN0ZWFkIG9wdHNcbiAqIHRvIHVzZSBuYXRpdmUgYERhdGUjc2V0WGAgbWV0aG9kcy4gSWYgeW91IHVzZSB0aGlzIGZ1bmN0aW9uLCB5b3UgbWF5IG5vdCB3YW50IHRvIGluY2x1ZGUgdGhlXG4gKiBvdGhlciBgc2V0WGAgZnVuY3Rpb25zIHRoYXQgZGF0ZS1mbnMgcHJvdmlkZXMgaWYgeW91IGFyZSBjb25jZXJuZWQgYWJvdXQgdGhlIGJ1bmRsZSBzaXplLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICogQHBhcmFtIHtOdW1iZXJ9IFt2YWx1ZXMueWVhcl0gLSB0aGUgbnVtYmVyIG9mIHllYXJzIHRvIGJlIHNldFxuICogQHBhcmFtIHtOdW1iZXJ9IFt2YWx1ZXMubW9udGhdIC0gdGhlIG51bWJlciBvZiBtb250aHMgdG8gYmUgc2V0XG4gKiBAcGFyYW0ge051bWJlcn0gW3ZhbHVlcy5kYXRlXSAtIHRoZSBudW1iZXIgb2YgZGF5cyB0byBiZSBzZXRcbiAqIEBwYXJhbSB7TnVtYmVyfSBbdmFsdWVzLmhvdXJzXSAtIHRoZSBudW1iZXIgb2YgaG91cnMgdG8gYmUgc2V0XG4gKiBAcGFyYW0ge051bWJlcn0gW3ZhbHVlcy5taW51dGVzXSAtIHRoZSBudW1iZXIgb2YgbWludXRlcyB0byBiZSBzZXRcbiAqIEBwYXJhbSB7TnVtYmVyfSBbdmFsdWVzLnNlY29uZHNdIC0gdGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIGJlIHNldFxuICogQHBhcmFtIHtOdW1iZXJ9IFt2YWx1ZXMubWlsbGlzZWNvbmRzXSAtIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHNldFxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIG9wdGlvbnMgc2V0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgdmFsdWVzYCBtdXN0IGJlIGFuIG9iamVjdFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUcmFuc2Zvcm0gMSBTZXB0ZW1iZXIgMjAxNCBpbnRvIDIwIE9jdG9iZXIgMjAxNSBpbiBhIHNpbmdsZSBsaW5lOlxuICogY29uc3QgcmVzdWx0ID0gc2V0KG5ldyBEYXRlKDIwMTQsIDgsIDIwKSwgeyB5ZWFyOiAyMDE1LCBtb250aDogOSwgZGF0ZTogMjAgfSlcbiAqIC8vPT4gVHVlIE9jdCAyMCAyMDE1IDAwOjAwOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNldCAxMiBQTSB0byAxIFNlcHRlbWJlciAyMDE0IDAxOjIzOjQ1IHRvIDEgU2VwdGVtYmVyIDIwMTQgMTI6MDA6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzZXQobmV3IERhdGUoMjAxNCwgOCwgMSwgMSwgMjMsIDQ1KSwgeyBob3VyczogMTIgfSlcbiAqIC8vPT4gTW9uIFNlcCAwMSAyMDE0IDEyOjIzOjQ1XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldChkaXJ0eURhdGUsIHZhbHVlcykge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcblxuICBpZiAoX3R5cGVvZih2YWx1ZXMpICE9PSAnb2JqZWN0JyB8fCB2YWx1ZXMgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndmFsdWVzIHBhcmFtZXRlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTsgLy8gQ2hlY2sgaWYgZGF0ZSBpcyBJbnZhbGlkIERhdGUgYmVjYXVzZSBEYXRlLnByb3RvdHlwZS5zZXRGdWxsWWVhciBpZ25vcmVzIHRoZSB2YWx1ZSBvZiBJbnZhbGlkIERhdGVcblxuICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cblxuICBpZiAodmFsdWVzLnllYXIgIT0gbnVsbCkge1xuICAgIGRhdGUuc2V0RnVsbFllYXIodmFsdWVzLnllYXIpO1xuICB9XG5cbiAgaWYgKHZhbHVlcy5tb250aCAhPSBudWxsKSB7XG4gICAgZGF0ZSA9IHNldE1vbnRoKGRhdGUsIHZhbHVlcy5tb250aCk7XG4gIH1cblxuICBpZiAodmFsdWVzLmRhdGUgIT0gbnVsbCkge1xuICAgIGRhdGUuc2V0RGF0ZSh0b0ludGVnZXIodmFsdWVzLmRhdGUpKTtcbiAgfVxuXG4gIGlmICh2YWx1ZXMuaG91cnMgIT0gbnVsbCkge1xuICAgIGRhdGUuc2V0SG91cnModG9JbnRlZ2VyKHZhbHVlcy5ob3VycykpO1xuICB9XG5cbiAgaWYgKHZhbHVlcy5taW51dGVzICE9IG51bGwpIHtcbiAgICBkYXRlLnNldE1pbnV0ZXModG9JbnRlZ2VyKHZhbHVlcy5taW51dGVzKSk7XG4gIH1cblxuICBpZiAodmFsdWVzLnNlY29uZHMgIT0gbnVsbCkge1xuICAgIGRhdGUuc2V0U2Vjb25kcyh0b0ludGVnZXIodmFsdWVzLnNlY29uZHMpKTtcbiAgfVxuXG4gIGlmICh2YWx1ZXMubWlsbGlzZWNvbmRzICE9IG51bGwpIHtcbiAgICBkYXRlLnNldE1pbGxpc2Vjb25kcyh0b0ludGVnZXIodmFsdWVzLm1pbGxpc2Vjb25kcykpO1xuICB9XG5cbiAgcmV0dXJuIGRhdGU7XG59IiwiaW1wb3J0IGUse2NyZWF0ZVJlZiBhcyB0fWZyb21cInJlYWN0XCI7aW1wb3J0XCJwcm9wLXR5cGVzXCI7aW1wb3J0IHIgZnJvbVwiY2xhc3NuYW1lc1wiO2ltcG9ydCBuIGZyb21cImRhdGUtZm5zL2lzRGF0ZVwiO2ltcG9ydCBvIGZyb21cImRhdGUtZm5zL2lzVmFsaWRcIjtpbXBvcnQgYSBmcm9tXCJkYXRlLWZucy9mb3JtYXRcIjtpbXBvcnQgcyBmcm9tXCJkYXRlLWZucy9hZGRNaW51dGVzXCI7aW1wb3J0IGkgZnJvbVwiZGF0ZS1mbnMvYWRkSG91cnNcIjtpbXBvcnQgcCBmcm9tXCJkYXRlLWZucy9hZGREYXlzXCI7aW1wb3J0IGMgZnJvbVwiZGF0ZS1mbnMvYWRkV2Vla3NcIjtpbXBvcnQgbCBmcm9tXCJkYXRlLWZucy9hZGRNb250aHNcIjtpbXBvcnQgZCBmcm9tXCJkYXRlLWZucy9hZGRRdWFydGVyc1wiO2ltcG9ydCB1IGZyb21cImRhdGUtZm5zL2FkZFllYXJzXCI7aW1wb3J0XCJkYXRlLWZucy9zdWJNaW51dGVzXCI7aW1wb3J0XCJkYXRlLWZucy9zdWJIb3Vyc1wiO2ltcG9ydCBoIGZyb21cImRhdGUtZm5zL3N1YkRheXNcIjtpbXBvcnQgbSBmcm9tXCJkYXRlLWZucy9zdWJXZWVrc1wiO2ltcG9ydCBmIGZyb21cImRhdGUtZm5zL3N1Yk1vbnRoc1wiO2ltcG9ydCB5IGZyb21cImRhdGUtZm5zL3N1YlF1YXJ0ZXJzXCI7aW1wb3J0IHYgZnJvbVwiZGF0ZS1mbnMvc3ViWWVhcnNcIjtpbXBvcnQgRCBmcm9tXCJkYXRlLWZucy9nZXRTZWNvbmRzXCI7aW1wb3J0IHcgZnJvbVwiZGF0ZS1mbnMvZ2V0TWludXRlc1wiO2ltcG9ydCBnIGZyb21cImRhdGUtZm5zL2dldEhvdXJzXCI7aW1wb3J0IGsgZnJvbVwiZGF0ZS1mbnMvZ2V0RGF5XCI7aW1wb3J0IGIgZnJvbVwiZGF0ZS1mbnMvZ2V0RGF0ZVwiO2ltcG9ydCBTIGZyb21cImRhdGUtZm5zL2dldElTT1dlZWtcIjtpbXBvcnQgQyBmcm9tXCJkYXRlLWZucy9nZXRNb250aFwiO2ltcG9ydCBfIGZyb21cImRhdGUtZm5zL2dldFF1YXJ0ZXJcIjtpbXBvcnQgTSBmcm9tXCJkYXRlLWZucy9nZXRZZWFyXCI7aW1wb3J0IFAgZnJvbVwiZGF0ZS1mbnMvZ2V0VGltZVwiO2ltcG9ydCBFIGZyb21cImRhdGUtZm5zL3NldFNlY29uZHNcIjtpbXBvcnQgTiBmcm9tXCJkYXRlLWZucy9zZXRNaW51dGVzXCI7aW1wb3J0IHggZnJvbVwiZGF0ZS1mbnMvc2V0SG91cnNcIjtpbXBvcnQgWSBmcm9tXCJkYXRlLWZucy9zZXRNb250aFwiO2ltcG9ydCBPIGZyb21cImRhdGUtZm5zL3NldFF1YXJ0ZXJcIjtpbXBvcnQgVCBmcm9tXCJkYXRlLWZucy9zZXRZZWFyXCI7aW1wb3J0IEkgZnJvbVwiZGF0ZS1mbnMvbWluXCI7aW1wb3J0IEwgZnJvbVwiZGF0ZS1mbnMvbWF4XCI7aW1wb3J0IFIgZnJvbVwiZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzXCI7aW1wb3J0IEYgZnJvbVwiZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHNcIjtpbXBvcnRcImRhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3NcIjtpbXBvcnQgQSBmcm9tXCJkYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzXCI7aW1wb3J0IEsgZnJvbVwiZGF0ZS1mbnMvc3RhcnRPZkRheVwiO2ltcG9ydCBCIGZyb21cImRhdGUtZm5zL3N0YXJ0T2ZXZWVrXCI7aW1wb3J0IFcgZnJvbVwiZGF0ZS1mbnMvc3RhcnRPZk1vbnRoXCI7aW1wb3J0IEggZnJvbVwiZGF0ZS1mbnMvc3RhcnRPZlF1YXJ0ZXJcIjtpbXBvcnQgaiBmcm9tXCJkYXRlLWZucy9zdGFydE9mWWVhclwiO2ltcG9ydCBRIGZyb21cImRhdGUtZm5zL2VuZE9mRGF5XCI7aW1wb3J0XCJkYXRlLWZucy9lbmRPZldlZWtcIjtpbXBvcnQgViBmcm9tXCJkYXRlLWZucy9lbmRPZk1vbnRoXCI7aW1wb3J0IHEgZnJvbVwiZGF0ZS1mbnMvZW5kT2ZZZWFyXCI7aW1wb3J0IFUgZnJvbVwiZGF0ZS1mbnMvaXNFcXVhbFwiO2ltcG9ydCB6IGZyb21cImRhdGUtZm5zL2lzU2FtZURheVwiO2ltcG9ydCAkIGZyb21cImRhdGUtZm5zL2lzU2FtZU1vbnRoXCI7aW1wb3J0IEcgZnJvbVwiZGF0ZS1mbnMvaXNTYW1lWWVhclwiO2ltcG9ydCBKIGZyb21cImRhdGUtZm5zL2lzU2FtZVF1YXJ0ZXJcIjtpbXBvcnQgWCBmcm9tXCJkYXRlLWZucy9pc0FmdGVyXCI7aW1wb3J0IFogZnJvbVwiZGF0ZS1mbnMvaXNCZWZvcmVcIjtpbXBvcnQgZWUgZnJvbVwiZGF0ZS1mbnMvaXNXaXRoaW5JbnRlcnZhbFwiO2ltcG9ydCB0ZSBmcm9tXCJkYXRlLWZucy90b0RhdGVcIjtpbXBvcnQgcmUgZnJvbVwiZGF0ZS1mbnMvcGFyc2VcIjtpbXBvcnQgbmUgZnJvbVwiZGF0ZS1mbnMvcGFyc2VJU09cIjtpbXBvcnQgb2UgZnJvbVwicmVhY3Qtb25jbGlja291dHNpZGVcIjtpbXBvcnQgYWUgZnJvbVwicmVhY3QtZG9tXCI7aW1wb3J0e1BvcHBlciBhcyBzZSxNYW5hZ2VyIGFzIGllLFJlZmVyZW5jZSBhcyBwZX1mcm9tXCJyZWFjdC1wb3BwZXJcIjtpbXBvcnQgY2UgZnJvbVwiZGF0ZS1mbnMvc2V0XCI7ZnVuY3Rpb24gbGUoZSx0KXt2YXIgcj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihuPW4uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIGRlKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP2xlKE9iamVjdChyKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7eWUoZSx0LHJbdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOmxlKE9iamVjdChyKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIHVlKGUpe3JldHVybih1ZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gaGUoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIG1lKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLE1lKG4ua2V5KSxuKX19ZnVuY3Rpb24gZmUoZSx0LHIpe3JldHVybiB0JiZtZShlLnByb3RvdHlwZSx0KSxyJiZtZShlLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB5ZShlLHQscil7cmV0dXJuKHQ9TWUodCkpaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gdmUoKXtyZXR1cm4odmU9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIERlKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLHQmJmdlKGUsdCl9ZnVuY3Rpb24gd2UoZSl7cmV0dXJuKHdlPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gZ2UoZSx0KXtyZXR1cm4oZ2U9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBrZShlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4gZX1mdW5jdGlvbiBiZShlLHQpe2lmKHQmJihcIm9iamVjdFwiPT10eXBlb2YgdHx8XCJmdW5jdGlvblwiPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7cmV0dXJuIGtlKGUpfWZ1bmN0aW9uIFNlKGUpe3ZhciB0PWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbj13ZShlKTtpZih0KXt2YXIgbz13ZSh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLG8pfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYmUodGhpcyxyKX19ZnVuY3Rpb24gQ2UoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIF9lKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fGZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBfZShlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtcIk9iamVjdFwiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKTtpZihcIk1hcFwiPT09cnx8XCJTZXRcIj09PXIpcmV0dXJuIEFycmF5LmZyb20oZSk7aWYoXCJBcmd1bWVudHNcIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpKXJldHVybiBfZShlLHQpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBfZShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLG49bmV3IEFycmF5KHQpO3I8dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIE1lKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGV8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSx0fHxcImRlZmF1bHRcIik7aWYoXCJvYmplY3RcIiE9dHlwZW9mIG4pcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpfXJldHVybihcInN0cmluZ1wiPT09dD9TdHJpbmc6TnVtYmVyKShlKX0oZSxcInN0cmluZ1wiKTtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdD90OlN0cmluZyh0KX1mdW5jdGlvbiBQZShlLHQpe3N3aXRjaChlKXtjYXNlXCJQXCI6cmV0dXJuIHQuZGF0ZSh7d2lkdGg6XCJzaG9ydFwifSk7Y2FzZVwiUFBcIjpyZXR1cm4gdC5kYXRlKHt3aWR0aDpcIm1lZGl1bVwifSk7Y2FzZVwiUFBQXCI6cmV0dXJuIHQuZGF0ZSh7d2lkdGg6XCJsb25nXCJ9KTtjYXNlXCJQUFBQXCI6ZGVmYXVsdDpyZXR1cm4gdC5kYXRlKHt3aWR0aDpcImZ1bGxcIn0pfX1mdW5jdGlvbiBFZShlLHQpe3N3aXRjaChlKXtjYXNlXCJwXCI6cmV0dXJuIHQudGltZSh7d2lkdGg6XCJzaG9ydFwifSk7Y2FzZVwicHBcIjpyZXR1cm4gdC50aW1lKHt3aWR0aDpcIm1lZGl1bVwifSk7Y2FzZVwicHBwXCI6cmV0dXJuIHQudGltZSh7d2lkdGg6XCJsb25nXCJ9KTtjYXNlXCJwcHBwXCI6ZGVmYXVsdDpyZXR1cm4gdC50aW1lKHt3aWR0aDpcImZ1bGxcIn0pfX12YXIgTmU9e3A6RWUsUDpmdW5jdGlvbihlLHQpe3ZhciByLG49ZS5tYXRjaCgvKFArKShwKyk/Lyl8fFtdLG89blsxXSxhPW5bMl07aWYoIWEpcmV0dXJuIFBlKGUsdCk7c3dpdGNoKG8pe2Nhc2VcIlBcIjpyPXQuZGF0ZVRpbWUoe3dpZHRoOlwic2hvcnRcIn0pO2JyZWFrO2Nhc2VcIlBQXCI6cj10LmRhdGVUaW1lKHt3aWR0aDpcIm1lZGl1bVwifSk7YnJlYWs7Y2FzZVwiUFBQXCI6cj10LmRhdGVUaW1lKHt3aWR0aDpcImxvbmdcIn0pO2JyZWFrO2Nhc2VcIlBQUFBcIjpkZWZhdWx0OnI9dC5kYXRlVGltZSh7d2lkdGg6XCJmdWxsXCJ9KX1yZXR1cm4gci5yZXBsYWNlKFwie3tkYXRlfX1cIixQZShvLHQpKS5yZXBsYWNlKFwie3t0aW1lfX1cIixFZShhLHQpKX19LHhlPS9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO2Z1bmN0aW9uIFllKGUpe3ZhciB0PWU/XCJzdHJpbmdcIj09dHlwZW9mIGV8fGUgaW5zdGFuY2VvZiBTdHJpbmc/bmUoZSk6dGUoZSk6bmV3IERhdGU7cmV0dXJuIFRlKHQpP3Q6bnVsbH1mdW5jdGlvbiBPZShlLHQscixuLG8pe3ZhciBhPW51bGwscz1ldChyKXx8ZXQoWmUoKSksaT0hMDtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8odC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgcD1yZShlLHQsbmV3IERhdGUse2xvY2FsZTpzfSk7biYmKGk9VGUocCxvKSYmZT09PUllKHAsdCxyKSksVGUocCxvKSYmaSYmKGE9cCl9KSksYSk6KGE9cmUoZSx0LG5ldyBEYXRlLHtsb2NhbGU6c30pLG4/aT1UZShhKSYmZT09PUllKGEsdCxyKTpUZShhKXx8KHQ9dC5tYXRjaCh4ZSkubWFwKChmdW5jdGlvbihlKXt2YXIgdD1lWzBdO3JldHVyblwicFwiPT09dHx8XCJQXCI9PT10P3M/KDAsTmVbdF0pKGUscy5mb3JtYXRMb25nKTp0OmV9KSkuam9pbihcIlwiKSxlLmxlbmd0aD4wJiYoYT1yZShlLHQuc2xpY2UoMCxlLmxlbmd0aCksbmV3IERhdGUpKSxUZShhKXx8KGE9bmV3IERhdGUoZSkpKSxUZShhKSYmaT9hOm51bGwpfWZ1bmN0aW9uIFRlKGUsdCl7cmV0dXJuIHQ9dHx8bmV3IERhdGUoXCIxLzEvMTAwMFwiKSxvKGUpJiYhWihlLHQpfWZ1bmN0aW9uIEllKGUsdCxyKXtpZihcImVuXCI9PT1yKXJldHVybiBhKGUsdCx7YXdhcmVPZlVuaWNvZGVUb2tlbnM6ITB9KTt2YXIgbj1ldChyKTtyZXR1cm4gciYmIW4mJmNvbnNvbGUud2FybignQSBsb2NhbGUgb2JqZWN0IHdhcyBub3QgZm91bmQgZm9yIHRoZSBwcm92aWRlZCBzdHJpbmcgW1wiJy5jb25jYXQociwnXCJdLicpKSwhbiYmWmUoKSYmZXQoWmUoKSkmJihuPWV0KFplKCkpKSxhKGUsdCx7bG9jYWxlOm58fG51bGwsYXdhcmVPZlVuaWNvZGVUb2tlbnM6ITB9KX1mdW5jdGlvbiBMZShlLHQpe3ZhciByPXQuZGF0ZUZvcm1hdCxuPXQubG9jYWxlO3JldHVybiBlJiZJZShlLEFycmF5LmlzQXJyYXkocik/clswXTpyLG4pfHxcIlwifWZ1bmN0aW9uIFJlKGUsdCl7dmFyIHI9dC5ob3VyLG49dm9pZCAwPT09cj8wOnIsbz10Lm1pbnV0ZSxhPXZvaWQgMD09PW8/MDpvLHM9dC5zZWNvbmQ7cmV0dXJuIHgoTihFKGUsdm9pZCAwPT09cz8wOnMpLGEpLG4pfWZ1bmN0aW9uIEZlKGUsdCl7dmFyIHI9dCYmZXQodCl8fFplKCkmJmV0KFplKCkpO3JldHVybiBTKGUscj97bG9jYWxlOnJ9Om51bGwpfWZ1bmN0aW9uIEFlKGUsdCl7cmV0dXJuIEllKGUsXCJkZGRcIix0KX1mdW5jdGlvbiBLZShlKXtyZXR1cm4gSyhlKX1mdW5jdGlvbiBCZShlLHQscil7dmFyIG49ZXQodHx8WmUoKSk7cmV0dXJuIEIoZSx7bG9jYWxlOm4sd2Vla1N0YXJ0c09uOnJ9KX1mdW5jdGlvbiBXZShlKXtyZXR1cm4gVyhlKX1mdW5jdGlvbiBIZShlKXtyZXR1cm4gaihlKX1mdW5jdGlvbiBqZShlKXtyZXR1cm4gSChlKX1mdW5jdGlvbiBRZSgpe3JldHVybiBLKFllKCkpfWZ1bmN0aW9uIFZlKGUsdCl7cmV0dXJuIGUmJnQ/RyhlLHQpOiFlJiYhdH1mdW5jdGlvbiBxZShlLHQpe3JldHVybiBlJiZ0PyQoZSx0KTohZSYmIXR9ZnVuY3Rpb24gVWUoZSx0KXtyZXR1cm4gZSYmdD9KKGUsdCk6IWUmJiF0fWZ1bmN0aW9uIHplKGUsdCl7cmV0dXJuIGUmJnQ/eihlLHQpOiFlJiYhdH1mdW5jdGlvbiAkZShlLHQpe3JldHVybiBlJiZ0P1UoZSx0KTohZSYmIXR9ZnVuY3Rpb24gR2UoZSx0LHIpe3ZhciBuLG89Syh0KSxhPVEocik7dHJ5e249ZWUoZSx7c3RhcnQ6byxlbmQ6YX0pfWNhdGNoKGUpe249ITF9cmV0dXJuIG59ZnVuY3Rpb24gSmUoZSx0KXt2YXIgcj1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpnbG9iYWxUaGlzO3IuX19sb2NhbGVEYXRhX198fChyLl9fbG9jYWxlRGF0YV9fPXt9KSxyLl9fbG9jYWxlRGF0YV9fW2VdPXR9ZnVuY3Rpb24gWGUoZSl7KFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Omdsb2JhbFRoaXMpLl9fbG9jYWxlSWRfXz1lfWZ1bmN0aW9uIFplKCl7cmV0dXJuKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Omdsb2JhbFRoaXMpLl9fbG9jYWxlSWRfX31mdW5jdGlvbiBldChlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7dmFyIHQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6Z2xvYmFsVGhpcztyZXR1cm4gdC5fX2xvY2FsZURhdGFfXz90Ll9fbG9jYWxlRGF0YV9fW2VdOm51bGx9cmV0dXJuIGV9ZnVuY3Rpb24gdHQoZSx0KXtyZXR1cm4gSWUoWShZZSgpLGUpLFwiTExMTFwiLHQpfWZ1bmN0aW9uIHJ0KGUsdCl7cmV0dXJuIEllKFkoWWUoKSxlKSxcIkxMTFwiLHQpfWZ1bmN0aW9uIG50KGUsdCl7cmV0dXJuIEllKE8oWWUoKSxlKSxcIlFRUVwiLHQpfWZ1bmN0aW9uIG90KGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxyPXQubWluRGF0ZSxuPXQubWF4RGF0ZSxvPXQuZXhjbHVkZURhdGVzLGE9dC5leGNsdWRlRGF0ZUludGVydmFscyxzPXQuaW5jbHVkZURhdGVzLGk9dC5pbmNsdWRlRGF0ZUludGVydmFscyxwPXQuZmlsdGVyRGF0ZTtyZXR1cm4gZHQoZSx7bWluRGF0ZTpyLG1heERhdGU6bn0pfHxvJiZvLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB6ZShlLHQpfSkpfHxhJiZhLnNvbWUoKGZ1bmN0aW9uKHQpe3ZhciByPXQuc3RhcnQsbj10LmVuZDtyZXR1cm4gZWUoZSx7c3RhcnQ6cixlbmQ6bn0pfSkpfHxzJiYhcy5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gemUoZSx0KX0pKXx8aSYmIWkuc29tZSgoZnVuY3Rpb24odCl7dmFyIHI9dC5zdGFydCxuPXQuZW5kO3JldHVybiBlZShlLHtzdGFydDpyLGVuZDpufSl9KSl8fHAmJiFwKFllKGUpKXx8ITF9ZnVuY3Rpb24gYXQoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHI9dC5leGNsdWRlRGF0ZXMsbj10LmV4Y2x1ZGVEYXRlSW50ZXJ2YWxzO3JldHVybiBuJiZuLmxlbmd0aD4wP24uc29tZSgoZnVuY3Rpb24odCl7dmFyIHI9dC5zdGFydCxuPXQuZW5kO3JldHVybiBlZShlLHtzdGFydDpyLGVuZDpufSl9KSk6ciYmci5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gemUoZSx0KX0pKXx8ITF9ZnVuY3Rpb24gc3QoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHI9dC5taW5EYXRlLG49dC5tYXhEYXRlLG89dC5leGNsdWRlRGF0ZXMsYT10LmluY2x1ZGVEYXRlcyxzPXQuZmlsdGVyRGF0ZTtyZXR1cm4gZHQoZSx7bWluRGF0ZTpXKHIpLG1heERhdGU6VihuKX0pfHxvJiZvLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiBxZShlLHQpfSkpfHxhJiYhYS5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gcWUoZSx0KX0pKXx8cyYmIXMoWWUoZSkpfHwhMX1mdW5jdGlvbiBpdChlLHQscixuKXt2YXIgbz1NKGUpLGE9QyhlKSxzPU0odCksaT1DKHQpLHA9TShuKTtyZXR1cm4gbz09PXMmJm89PT1wP2E8PXImJnI8PWk6bzxzP3A9PT1vJiZhPD1yfHxwPT09cyYmaT49cnx8cDxzJiZwPm86dm9pZCAwfWZ1bmN0aW9uIHB0KGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxyPXQubWluRGF0ZSxuPXQubWF4RGF0ZSxvPXQuZXhjbHVkZURhdGVzLGE9dC5pbmNsdWRlRGF0ZXMscz10LmZpbHRlckRhdGU7cmV0dXJuIGR0KGUse21pbkRhdGU6cixtYXhEYXRlOm59KXx8byYmby5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gVWUoZSx0KX0pKXx8YSYmIWEuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIFVlKGUsdCl9KSl8fHMmJiFzKFllKGUpKXx8ITF9ZnVuY3Rpb24gY3QoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHI9dC5taW5EYXRlLG49dC5tYXhEYXRlLG89dC5leGNsdWRlRGF0ZXMsYT10LmluY2x1ZGVEYXRlcyxzPXQuZmlsdGVyRGF0ZSxpPW5ldyBEYXRlKGUsMCwxKTtyZXR1cm4gZHQoaSx7bWluRGF0ZTpqKHIpLG1heERhdGU6cShuKX0pfHxvJiZvLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBWZShpLGUpfSkpfHxhJiYhYS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gVmUoaSxlKX0pKXx8cyYmIXMoWWUoaSkpfHwhMX1mdW5jdGlvbiBsdChlLHQscixuKXt2YXIgbz1NKGUpLGE9XyhlKSxzPU0odCksaT1fKHQpLHA9TShuKTtyZXR1cm4gbz09PXMmJm89PT1wP2E8PXImJnI8PWk6bzxzP3A9PT1vJiZhPD1yfHxwPT09cyYmaT49cnx8cDxzJiZwPm86dm9pZCAwfWZ1bmN0aW9uIGR0KGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxyPXQubWluRGF0ZSxuPXQubWF4RGF0ZTtyZXR1cm4gciYmUihlLHIpPDB8fG4mJlIoZSxuKT4wfWZ1bmN0aW9uIHV0KGUsdCl7cmV0dXJuIHQuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIGcodCk9PT1nKGUpJiZ3KHQpPT09dyhlKX0pKX1mdW5jdGlvbiBodChlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30scj10LmV4Y2x1ZGVUaW1lcyxuPXQuaW5jbHVkZVRpbWVzLG89dC5maWx0ZXJUaW1lO3JldHVybiByJiZ1dChlLHIpfHxuJiYhdXQoZSxuKXx8byYmIW8oZSl8fCExfWZ1bmN0aW9uIG10KGUsdCl7dmFyIHI9dC5taW5UaW1lLG49dC5tYXhUaW1lO2lmKCFyfHwhbil0aHJvdyBuZXcgRXJyb3IoXCJCb3RoIG1pblRpbWUgYW5kIG1heFRpbWUgcHJvcHMgcmVxdWlyZWRcIik7dmFyIG8sYT1ZZSgpLHM9eChOKGEsdyhlKSksZyhlKSksaT14KE4oYSx3KHIpKSxnKHIpKSxwPXgoTihhLHcobikpLGcobikpO3RyeXtvPSFlZShzLHtzdGFydDppLGVuZDpwfSl9Y2F0Y2goZSl7bz0hMX1yZXR1cm4gb31mdW5jdGlvbiBmdChlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30scj10Lm1pbkRhdGUsbj10LmluY2x1ZGVEYXRlcyxvPWYoZSwxKTtyZXR1cm4gciYmRihyLG8pPjB8fG4mJm4uZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBGKGUsbyk+MH0pKXx8ITF9ZnVuY3Rpb24geXQoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHI9dC5tYXhEYXRlLG49dC5pbmNsdWRlRGF0ZXMsbz1sKGUsMSk7cmV0dXJuIHImJkYobyxyKT4wfHxuJiZuLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gRihvLGUpPjB9KSl8fCExfWZ1bmN0aW9uIHZ0KGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxyPXQubWluRGF0ZSxuPXQuaW5jbHVkZURhdGVzLG89dihlLDEpO3JldHVybiByJiZBKHIsbyk+MHx8biYmbi5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIEEoZSxvKT4wfSkpfHwhMX1mdW5jdGlvbiBEdChlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30scj10Lm1heERhdGUsbj10LmluY2x1ZGVEYXRlcyxvPXUoZSwxKTtyZXR1cm4gciYmQShvLHIpPjB8fG4mJm4uZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBBKG8sZSk+MH0pKXx8ITF9ZnVuY3Rpb24gd3QoZSl7dmFyIHQ9ZS5taW5EYXRlLHI9ZS5pbmNsdWRlRGF0ZXM7aWYociYmdCl7dmFyIG49ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBSKGUsdCk+PTB9KSk7cmV0dXJuIEkobil9cmV0dXJuIHI/SShyKTp0fWZ1bmN0aW9uIGd0KGUpe3ZhciB0PWUubWF4RGF0ZSxyPWUuaW5jbHVkZURhdGVzO2lmKHImJnQpe3ZhciBuPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gUihlLHQpPD0wfSkpO3JldHVybiBMKG4pfXJldHVybiByP0wocik6dH1mdW5jdGlvbiBrdCgpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10sdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06XCJyZWFjdC1kYXRlcGlja2VyX19kYXktLWhpZ2hsaWdodGVkXCIscj1uZXcgTWFwLG89MCxhPWUubGVuZ3RoO288YTtvKyspe3ZhciBzPWVbb107aWYobihzKSl7dmFyIGk9SWUocyxcIk1NLmRkLnl5eXlcIikscD1yLmdldChpKXx8W107cC5pbmNsdWRlcyh0KXx8KHAucHVzaCh0KSxyLnNldChpLHApKX1lbHNlIGlmKFwib2JqZWN0XCI9PT11ZShzKSl7dmFyIGM9T2JqZWN0LmtleXMocyksbD1jWzBdLGQ9c1tjWzBdXTtpZihcInN0cmluZ1wiPT10eXBlb2YgbCYmZC5jb25zdHJ1Y3Rvcj09PUFycmF5KWZvcih2YXIgdT0wLGg9ZC5sZW5ndGg7dTxoO3UrKyl7dmFyIG09SWUoZFt1XSxcIk1NLmRkLnl5eXlcIiksZj1yLmdldChtKXx8W107Zi5pbmNsdWRlcyhsKXx8KGYucHVzaChsKSxyLnNldChtLGYpKX19fXJldHVybiByfWZ1bmN0aW9uIGJ0KGUsdCxyLG4sbyl7Zm9yKHZhciBhPW8ubGVuZ3RoLHA9W10sYz0wO2M8YTtjKyspe3ZhciBsPXMoaShlLGcob1tjXSkpLHcob1tjXSkpLGQ9cyhlLChyKzEpKm4pO1gobCx0KSYmWihsLGQpJiZwLnB1c2gob1tjXSl9cmV0dXJuIHB9ZnVuY3Rpb24gU3QoZSl7cmV0dXJuIGU8MTA/XCIwXCIuY29uY2F0KGUpOlwiXCIuY29uY2F0KGUpfWZ1bmN0aW9uIEN0KGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxMixyPU1hdGguY2VpbChNKGUpL3QpKnQsbj1yLSh0LTEpO3JldHVybntzdGFydFBlcmlvZDpuLGVuZFBlcmlvZDpyfX1mdW5jdGlvbiBfdChlLHQscixuKXtmb3IodmFyIG89W10sYT0wO2E8Mip0KzE7YSsrKXt2YXIgcz1lK3QtYSxpPSEwO3ImJihpPU0ocik8PXMpLG4mJmkmJihpPU0obik+PXMpLGkmJm8ucHVzaChzKX1yZXR1cm4gb312YXIgTXQ9b2UoZnVuY3Rpb24obil7RGUoYSxlLkNvbXBvbmVudCk7dmFyIG89U2UoYSk7ZnVuY3Rpb24gYShyKXt2YXIgbjtoZSh0aGlzLGEpLHllKGtlKG49by5jYWxsKHRoaXMscikpLFwicmVuZGVyT3B0aW9uc1wiLChmdW5jdGlvbigpe3ZhciB0PW4ucHJvcHMueWVhcixyPW4uc3RhdGUueWVhcnNMaXN0Lm1hcCgoZnVuY3Rpb24ocil7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6dD09PXI/XCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbiByZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbi0tc2VsZWN0ZWRfeWVhclwiOlwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb25cIixrZXk6cixvbkNsaWNrOm4ub25DaGFuZ2UuYmluZChrZShuKSxyKSxcImFyaWEtc2VsZWN0ZWRcIjp0PT09cj9cInRydWVcIjp2b2lkIDB9LHQ9PT1yP2UuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb24tLXNlbGVjdGVkXCJ9LFwi4pyTXCIpOlwiXCIscil9KSksbz1uLnByb3BzLm1pbkRhdGU/TShuLnByb3BzLm1pbkRhdGUpOm51bGwsYT1uLnByb3BzLm1heERhdGU/TShuLnByb3BzLm1heERhdGUpOm51bGw7cmV0dXJuIGEmJm4uc3RhdGUueWVhcnNMaXN0LmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09YX0pKXx8ci51bnNoaWZ0KGUuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvblwiLGtleTpcInVwY29taW5nXCIsb25DbGljazpuLmluY3JlbWVudFllYXJzfSxlLmNyZWF0ZUVsZW1lbnQoXCJhXCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24gcmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMgcmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtdXBjb21pbmdcIn0pKSksbyYmbi5zdGF0ZS55ZWFyc0xpc3QuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1vfSkpfHxyLnB1c2goZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uXCIsa2V5OlwicHJldmlvdXNcIixvbkNsaWNrOm4uZGVjcmVtZW50WWVhcnN9LGUuY3JlYXRlRWxlbWVudChcImFcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbiByZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycyByZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy1wcmV2aW91c1wifSkpKSxyfSkpLHllKGtlKG4pLFwib25DaGFuZ2VcIiwoZnVuY3Rpb24oZSl7bi5wcm9wcy5vbkNoYW5nZShlKX0pKSx5ZShrZShuKSxcImhhbmRsZUNsaWNrT3V0c2lkZVwiLChmdW5jdGlvbigpe24ucHJvcHMub25DYW5jZWwoKX0pKSx5ZShrZShuKSxcInNoaWZ0WWVhcnNcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9bi5zdGF0ZS55ZWFyc0xpc3QubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdCtlfSkpO24uc2V0U3RhdGUoe3llYXJzTGlzdDp0fSl9KSkseWUoa2UobiksXCJpbmNyZW1lbnRZZWFyc1wiLChmdW5jdGlvbigpe3JldHVybiBuLnNoaWZ0WWVhcnMoMSl9KSkseWUoa2UobiksXCJkZWNyZW1lbnRZZWFyc1wiLChmdW5jdGlvbigpe3JldHVybiBuLnNoaWZ0WWVhcnMoLTEpfSkpO3ZhciBzPXIueWVhckRyb3Bkb3duSXRlbU51bWJlcixpPXIuc2Nyb2xsYWJsZVllYXJEcm9wZG93bixwPXN8fChpPzEwOjUpO3JldHVybiBuLnN0YXRlPXt5ZWFyc0xpc3Q6X3Qobi5wcm9wcy55ZWFyLHAsbi5wcm9wcy5taW5EYXRlLG4ucHJvcHMubWF4RGF0ZSl9LG4uZHJvcGRvd25SZWY9dCgpLG59cmV0dXJuIGZlKGEsW3trZXk6XCJjb21wb25lbnREaWRNb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kcm9wZG93blJlZi5jdXJyZW50O2lmKGUpe3ZhciB0PWUuY2hpbGRyZW4/QXJyYXkuZnJvbShlLmNoaWxkcmVuKTpudWxsLHI9dD90LmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFyaWFTZWxlY3RlZH0pKTpudWxsO2Uuc2Nyb2xsVG9wPXI/ci5vZmZzZXRUb3ArKHIuY2xpZW50SGVpZ2h0LWUuY2xpZW50SGVpZ2h0KS8yOihlLnNjcm9sbEhlaWdodC1lLmNsaWVudEhlaWdodCkvMn19fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1yKHtcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd25cIjohMCxcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd24tLXNjcm9sbGFibGVcIjp0aGlzLnByb3BzLnNjcm9sbGFibGVZZWFyRHJvcGRvd259KTtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTp0LHJlZjp0aGlzLmRyb3Bkb3duUmVmfSx0aGlzLnJlbmRlck9wdGlvbnMoKSl9fV0pLGF9KCkpLFB0PWZ1bmN0aW9uKHQpe0RlKG4sZS5Db21wb25lbnQpO3ZhciByPVNlKG4pO2Z1bmN0aW9uIG4oKXt2YXIgdDtoZSh0aGlzLG4pO2Zvcih2YXIgbz1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9MDtzPG87cysrKWFbc109YXJndW1lbnRzW3NdO3JldHVybiB5ZShrZSh0PXIuY2FsbC5hcHBseShyLFt0aGlzXS5jb25jYXQoYSkpKSxcInN0YXRlXCIse2Ryb3Bkb3duVmlzaWJsZTohMX0pLHllKGtlKHQpLFwicmVuZGVyU2VsZWN0T3B0aW9uc1wiLChmdW5jdGlvbigpe2Zvcih2YXIgcj10LnByb3BzLm1pbkRhdGU/TSh0LnByb3BzLm1pbkRhdGUpOjE5MDAsbj10LnByb3BzLm1heERhdGU/TSh0LnByb3BzLm1heERhdGUpOjIxMDAsbz1bXSxhPXI7YTw9bjthKyspby5wdXNoKGUuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLHtrZXk6YSx2YWx1ZTphfSxhKSk7cmV0dXJuIG99KSkseWUoa2UodCksXCJvblNlbGVjdENoYW5nZVwiLChmdW5jdGlvbihlKXt0Lm9uQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX0pKSx5ZShrZSh0KSxcInJlbmRlclNlbGVjdE1vZGVcIiwoZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIse3ZhbHVlOnQucHJvcHMueWVhcixjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLXNlbGVjdFwiLG9uQ2hhbmdlOnQub25TZWxlY3RDaGFuZ2V9LHQucmVuZGVyU2VsZWN0T3B0aW9ucygpKX0pKSx5ZShrZSh0KSxcInJlbmRlclJlYWRWaWV3XCIsKGZ1bmN0aW9uKHIpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7a2V5OlwicmVhZFwiLHN0eWxlOnt2aXNpYmlsaXR5OnI/XCJ2aXNpYmxlXCI6XCJoaWRkZW5cIn0sY2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXdcIixvbkNsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0LnRvZ2dsZURyb3Bkb3duKGUpfX0sZS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvd1wifSksZS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tc2VsZWN0ZWQteWVhclwifSx0LnByb3BzLnllYXIpKX0pKSx5ZShrZSh0KSxcInJlbmRlckRyb3Bkb3duXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChNdCx7a2V5OlwiZHJvcGRvd25cIix5ZWFyOnQucHJvcHMueWVhcixvbkNoYW5nZTp0Lm9uQ2hhbmdlLG9uQ2FuY2VsOnQudG9nZ2xlRHJvcGRvd24sbWluRGF0ZTp0LnByb3BzLm1pbkRhdGUsbWF4RGF0ZTp0LnByb3BzLm1heERhdGUsc2Nyb2xsYWJsZVllYXJEcm9wZG93bjp0LnByb3BzLnNjcm9sbGFibGVZZWFyRHJvcGRvd24seWVhckRyb3Bkb3duSXRlbU51bWJlcjp0LnByb3BzLnllYXJEcm9wZG93bkl0ZW1OdW1iZXJ9KX0pKSx5ZShrZSh0KSxcInJlbmRlclNjcm9sbE1vZGVcIiwoZnVuY3Rpb24oKXt2YXIgZT10LnN0YXRlLmRyb3Bkb3duVmlzaWJsZSxyPVt0LnJlbmRlclJlYWRWaWV3KCFlKV07cmV0dXJuIGUmJnIudW5zaGlmdCh0LnJlbmRlckRyb3Bkb3duKCkpLHJ9KSkseWUoa2UodCksXCJvbkNoYW5nZVwiLChmdW5jdGlvbihlKXt0LnRvZ2dsZURyb3Bkb3duKCksZSE9PXQucHJvcHMueWVhciYmdC5wcm9wcy5vbkNoYW5nZShlKX0pKSx5ZShrZSh0KSxcInRvZ2dsZURyb3Bkb3duXCIsKGZ1bmN0aW9uKGUpe3Quc2V0U3RhdGUoe2Ryb3Bkb3duVmlzaWJsZTohdC5zdGF0ZS5kcm9wZG93blZpc2libGV9LChmdW5jdGlvbigpe3QucHJvcHMuYWRqdXN0RGF0ZU9uQ2hhbmdlJiZ0LmhhbmRsZVllYXJDaGFuZ2UodC5wcm9wcy5kYXRlLGUpfSkpfSkpLHllKGtlKHQpLFwiaGFuZGxlWWVhckNoYW5nZVwiLChmdW5jdGlvbihlLHIpe3Qub25TZWxlY3QoZSxyKSx0LnNldE9wZW4oKX0pKSx5ZShrZSh0KSxcIm9uU2VsZWN0XCIsKGZ1bmN0aW9uKGUscil7dC5wcm9wcy5vblNlbGVjdCYmdC5wcm9wcy5vblNlbGVjdChlLHIpfSkpLHllKGtlKHQpLFwic2V0T3BlblwiLChmdW5jdGlvbigpe3QucHJvcHMuc2V0T3BlbiYmdC5wcm9wcy5zZXRPcGVuKCEwKX0pKSx0fXJldHVybiBmZShuLFt7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtzd2l0Y2godGhpcy5wcm9wcy5kcm9wZG93bk1vZGUpe2Nhc2VcInNjcm9sbFwiOnQ9dGhpcy5yZW5kZXJTY3JvbGxNb2RlKCk7YnJlYWs7Y2FzZVwic2VsZWN0XCI6dD10aGlzLnJlbmRlclNlbGVjdE1vZGUoKX1yZXR1cm4gZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd24tY29udGFpbmVyIHJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd24tY29udGFpbmVyLS1cIi5jb25jYXQodGhpcy5wcm9wcy5kcm9wZG93bk1vZGUpfSx0KX19XSksbn0oKSxFdD1vZShmdW5jdGlvbih0KXtEZShuLGUuQ29tcG9uZW50KTt2YXIgcj1TZShuKTtmdW5jdGlvbiBuKCl7dmFyIHQ7aGUodGhpcyxuKTtmb3IodmFyIG89YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPTA7czxvO3MrKylhW3NdPWFyZ3VtZW50c1tzXTtyZXR1cm4geWUoa2UodD1yLmNhbGwuYXBwbHkocixbdGhpc10uY29uY2F0KGEpKSksXCJpc1NlbGVjdGVkTW9udGhcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvcHMubW9udGg9PT1lfSkpLHllKGtlKHQpLFwicmVuZGVyT3B0aW9uc1wiLChmdW5jdGlvbigpe3JldHVybiB0LnByb3BzLm1vbnRoTmFtZXMubWFwKChmdW5jdGlvbihyLG4pe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOnQuaXNTZWxlY3RlZE1vbnRoKG4pP1wicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtb3B0aW9uIHJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbi0tc2VsZWN0ZWRfbW9udGhcIjpcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvblwiLGtleTpyLG9uQ2xpY2s6dC5vbkNoYW5nZS5iaW5kKGtlKHQpLG4pLFwiYXJpYS1zZWxlY3RlZFwiOnQuaXNTZWxlY3RlZE1vbnRoKG4pP1widHJ1ZVwiOnZvaWQgMH0sdC5pc1NlbGVjdGVkTW9udGgobik/ZS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1vcHRpb24tLXNlbGVjdGVkXCJ9LFwi4pyTXCIpOlwiXCIscil9KSl9KSkseWUoa2UodCksXCJvbkNoYW5nZVwiLChmdW5jdGlvbihlKXtyZXR1cm4gdC5wcm9wcy5vbkNoYW5nZShlKX0pKSx5ZShrZSh0KSxcImhhbmRsZUNsaWNrT3V0c2lkZVwiLChmdW5jdGlvbigpe3JldHVybiB0LnByb3BzLm9uQ2FuY2VsKCl9KSksdH1yZXR1cm4gZmUobixbe2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1kcm9wZG93blwifSx0aGlzLnJlbmRlck9wdGlvbnMoKSl9fV0pLG59KCkpLE50PWZ1bmN0aW9uKHQpe0RlKG4sZS5Db21wb25lbnQpO3ZhciByPVNlKG4pO2Z1bmN0aW9uIG4oKXt2YXIgdDtoZSh0aGlzLG4pO2Zvcih2YXIgbz1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9MDtzPG87cysrKWFbc109YXJndW1lbnRzW3NdO3JldHVybiB5ZShrZSh0PXIuY2FsbC5hcHBseShyLFt0aGlzXS5jb25jYXQoYSkpKSxcInN0YXRlXCIse2Ryb3Bkb3duVmlzaWJsZTohMX0pLHllKGtlKHQpLFwicmVuZGVyU2VsZWN0T3B0aW9uc1wiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQscil7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLHtrZXk6cix2YWx1ZTpyfSx0KX0pKX0pKSx5ZShrZSh0KSxcInJlbmRlclNlbGVjdE1vZGVcIiwoZnVuY3Rpb24ocil7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLHt2YWx1ZTp0LnByb3BzLm1vbnRoLGNsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXNlbGVjdFwiLG9uQ2hhbmdlOmZ1bmN0aW9uKGUpe3JldHVybiB0Lm9uQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX19LHQucmVuZGVyU2VsZWN0T3B0aW9ucyhyKSl9KSkseWUoa2UodCksXCJyZW5kZXJSZWFkVmlld1wiLChmdW5jdGlvbihyLG4pe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7a2V5OlwicmVhZFwiLHN0eWxlOnt2aXNpYmlsaXR5OnI/XCJ2aXNpYmxlXCI6XCJoaWRkZW5cIn0sY2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3XCIsb25DbGljazp0LnRvZ2dsZURyb3Bkb3dufSxlLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldy0tZG93bi1hcnJvd1wifSksZS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLXNlbGVjdGVkLW1vbnRoXCJ9LG5bdC5wcm9wcy5tb250aF0pKX0pKSx5ZShrZSh0KSxcInJlbmRlckRyb3Bkb3duXCIsKGZ1bmN0aW9uKHIpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoRXQse2tleTpcImRyb3Bkb3duXCIsbW9udGg6dC5wcm9wcy5tb250aCxtb250aE5hbWVzOnIsb25DaGFuZ2U6dC5vbkNoYW5nZSxvbkNhbmNlbDp0LnRvZ2dsZURyb3Bkb3dufSl9KSkseWUoa2UodCksXCJyZW5kZXJTY3JvbGxNb2RlXCIsKGZ1bmN0aW9uKGUpe3ZhciByPXQuc3RhdGUuZHJvcGRvd25WaXNpYmxlLG49W3QucmVuZGVyUmVhZFZpZXcoIXIsZSldO3JldHVybiByJiZuLnVuc2hpZnQodC5yZW5kZXJEcm9wZG93bihlKSksbn0pKSx5ZShrZSh0KSxcIm9uQ2hhbmdlXCIsKGZ1bmN0aW9uKGUpe3QudG9nZ2xlRHJvcGRvd24oKSxlIT09dC5wcm9wcy5tb250aCYmdC5wcm9wcy5vbkNoYW5nZShlKX0pKSx5ZShrZSh0KSxcInRvZ2dsZURyb3Bkb3duXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2V0U3RhdGUoe2Ryb3Bkb3duVmlzaWJsZTohdC5zdGF0ZS5kcm9wZG93blZpc2libGV9KX0pKSx0fXJldHVybiBmZShuLFt7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxyPXRoaXMsbj1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMV0ubWFwKHRoaXMucHJvcHMudXNlU2hvcnRNb250aEluRHJvcGRvd24/ZnVuY3Rpb24oZSl7cmV0dXJuIHJ0KGUsci5wcm9wcy5sb2NhbGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gdHQoZSxyLnByb3BzLmxvY2FsZSl9KTtzd2l0Y2godGhpcy5wcm9wcy5kcm9wZG93bk1vZGUpe2Nhc2VcInNjcm9sbFwiOnQ9dGhpcy5yZW5kZXJTY3JvbGxNb2RlKG4pO2JyZWFrO2Nhc2VcInNlbGVjdFwiOnQ9dGhpcy5yZW5kZXJTZWxlY3RNb2RlKG4pfXJldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtZHJvcGRvd24tY29udGFpbmVyIHJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWRyb3Bkb3duLWNvbnRhaW5lci0tXCIuY29uY2F0KHRoaXMucHJvcHMuZHJvcGRvd25Nb2RlKX0sdCl9fV0pLG59KCk7ZnVuY3Rpb24geHQoZSx0KXtmb3IodmFyIHI9W10sbj1XZShlKSxvPVdlKHQpOyFYKG4sbyk7KXIucHVzaChZZShuKSksbj1sKG4sMSk7cmV0dXJuIHJ9dmFyIFl0PW9lKGZ1bmN0aW9uKHQpe0RlKG8sZS5Db21wb25lbnQpO3ZhciBuPVNlKG8pO2Z1bmN0aW9uIG8odCl7dmFyIHI7cmV0dXJuIGhlKHRoaXMsbykseWUoa2Uocj1uLmNhbGwodGhpcyx0KSksXCJyZW5kZXJPcHRpb25zXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHIuc3RhdGUubW9udGhZZWFyc0xpc3QubWFwKChmdW5jdGlvbih0KXt2YXIgbj1QKHQpLG89VmUoci5wcm9wcy5kYXRlLHQpJiZxZShyLnByb3BzLmRhdGUsdCk7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6bz9cInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uLS1zZWxlY3RlZF9tb250aC15ZWFyXCI6XCJyZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLW9wdGlvblwiLGtleTpuLG9uQ2xpY2s6ci5vbkNoYW5nZS5iaW5kKGtlKHIpLG4pLFwiYXJpYS1zZWxlY3RlZFwiOm8/XCJ0cnVlXCI6dm9pZCAwfSxvP2UuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1vcHRpb24tLXNlbGVjdGVkXCJ9LFwi4pyTXCIpOlwiXCIsSWUodCxyLnByb3BzLmRhdGVGb3JtYXQsci5wcm9wcy5sb2NhbGUpKX0pKX0pKSx5ZShrZShyKSxcIm9uQ2hhbmdlXCIsKGZ1bmN0aW9uKGUpe3JldHVybiByLnByb3BzLm9uQ2hhbmdlKGUpfSkpLHllKGtlKHIpLFwiaGFuZGxlQ2xpY2tPdXRzaWRlXCIsKGZ1bmN0aW9uKCl7ci5wcm9wcy5vbkNhbmNlbCgpfSkpLHIuc3RhdGU9e21vbnRoWWVhcnNMaXN0Onh0KHIucHJvcHMubWluRGF0ZSxyLnByb3BzLm1heERhdGUpfSxyfXJldHVybiBmZShvLFt7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1yKHtcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd25cIjohMCxcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd24tLXNjcm9sbGFibGVcIjp0aGlzLnByb3BzLnNjcm9sbGFibGVNb250aFllYXJEcm9wZG93bn0pO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOnR9LHRoaXMucmVuZGVyT3B0aW9ucygpKX19XSksb30oKSksT3Q9ZnVuY3Rpb24odCl7RGUobixlLkNvbXBvbmVudCk7dmFyIHI9U2Uobik7ZnVuY3Rpb24gbigpe3ZhciB0O2hlKHRoaXMsbik7Zm9yKHZhciBvPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobykscz0wO3M8bztzKyspYVtzXT1hcmd1bWVudHNbc107cmV0dXJuIHllKGtlKHQ9ci5jYWxsLmFwcGx5KHIsW3RoaXNdLmNvbmNhdChhKSkpLFwic3RhdGVcIix7ZHJvcGRvd25WaXNpYmxlOiExfSkseWUoa2UodCksXCJyZW5kZXJTZWxlY3RPcHRpb25zXCIsKGZ1bmN0aW9uKCl7Zm9yKHZhciByPVdlKHQucHJvcHMubWluRGF0ZSksbj1XZSh0LnByb3BzLm1heERhdGUpLG89W107IVgocixuKTspe3ZhciBhPVAocik7by5wdXNoKGUuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLHtrZXk6YSx2YWx1ZTphfSxJZShyLHQucHJvcHMuZGF0ZUZvcm1hdCx0LnByb3BzLmxvY2FsZSkpKSxyPWwociwxKX1yZXR1cm4gb30pKSx5ZShrZSh0KSxcIm9uU2VsZWN0Q2hhbmdlXCIsKGZ1bmN0aW9uKGUpe3Qub25DaGFuZ2UoZS50YXJnZXQudmFsdWUpfSkpLHllKGtlKHQpLFwicmVuZGVyU2VsZWN0TW9kZVwiLChmdW5jdGlvbigpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIix7dmFsdWU6UChXZSh0LnByb3BzLmRhdGUpKSxjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXNlbGVjdFwiLG9uQ2hhbmdlOnQub25TZWxlY3RDaGFuZ2V9LHQucmVuZGVyU2VsZWN0T3B0aW9ucygpKX0pKSx5ZShrZSh0KSxcInJlbmRlclJlYWRWaWV3XCIsKGZ1bmN0aW9uKHIpe3ZhciBuPUllKHQucHJvcHMuZGF0ZSx0LnByb3BzLmRhdGVGb3JtYXQsdC5wcm9wcy5sb2NhbGUpO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7a2V5OlwicmVhZFwiLHN0eWxlOnt2aXNpYmlsaXR5OnI/XCJ2aXNpYmxlXCI6XCJoaWRkZW5cIn0sY2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXdcIixvbkNsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0LnRvZ2dsZURyb3Bkb3duKGUpfX0sZS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvd1wifSksZS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tc2VsZWN0ZWQtbW9udGgteWVhclwifSxuKSl9KSkseWUoa2UodCksXCJyZW5kZXJEcm9wZG93blwiLChmdW5jdGlvbigpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoWXQse2tleTpcImRyb3Bkb3duXCIsZGF0ZTp0LnByb3BzLmRhdGUsZGF0ZUZvcm1hdDp0LnByb3BzLmRhdGVGb3JtYXQsb25DaGFuZ2U6dC5vbkNoYW5nZSxvbkNhbmNlbDp0LnRvZ2dsZURyb3Bkb3duLG1pbkRhdGU6dC5wcm9wcy5taW5EYXRlLG1heERhdGU6dC5wcm9wcy5tYXhEYXRlLHNjcm9sbGFibGVNb250aFllYXJEcm9wZG93bjp0LnByb3BzLnNjcm9sbGFibGVNb250aFllYXJEcm9wZG93bixsb2NhbGU6dC5wcm9wcy5sb2NhbGV9KX0pKSx5ZShrZSh0KSxcInJlbmRlclNjcm9sbE1vZGVcIiwoZnVuY3Rpb24oKXt2YXIgZT10LnN0YXRlLmRyb3Bkb3duVmlzaWJsZSxyPVt0LnJlbmRlclJlYWRWaWV3KCFlKV07cmV0dXJuIGUmJnIudW5zaGlmdCh0LnJlbmRlckRyb3Bkb3duKCkpLHJ9KSkseWUoa2UodCksXCJvbkNoYW5nZVwiLChmdW5jdGlvbihlKXt0LnRvZ2dsZURyb3Bkb3duKCk7dmFyIHI9WWUocGFyc2VJbnQoZSkpO1ZlKHQucHJvcHMuZGF0ZSxyKSYmcWUodC5wcm9wcy5kYXRlLHIpfHx0LnByb3BzLm9uQ2hhbmdlKHIpfSkpLHllKGtlKHQpLFwidG9nZ2xlRHJvcGRvd25cIiwoZnVuY3Rpb24oKXtyZXR1cm4gdC5zZXRTdGF0ZSh7ZHJvcGRvd25WaXNpYmxlOiF0LnN0YXRlLmRyb3Bkb3duVmlzaWJsZX0pfSkpLHR9cmV0dXJuIGZlKG4sW3trZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O3N3aXRjaCh0aGlzLnByb3BzLmRyb3Bkb3duTW9kZSl7Y2FzZVwic2Nyb2xsXCI6dD10aGlzLnJlbmRlclNjcm9sbE1vZGUoKTticmVhaztjYXNlXCJzZWxlY3RcIjp0PXRoaXMucmVuZGVyU2VsZWN0TW9kZSgpfXJldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1kcm9wZG93bi1jb250YWluZXIgcmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1kcm9wZG93bi1jb250YWluZXItLVwiLmNvbmNhdCh0aGlzLnByb3BzLmRyb3Bkb3duTW9kZSl9LHQpfX1dKSxufSgpLFR0PWZ1bmN0aW9uKHQpe0RlKG8sZS5Db21wb25lbnQpO3ZhciBuPVNlKG8pO2Z1bmN0aW9uIG8oKXt2YXIgdDtoZSh0aGlzLG8pO2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGk9MDtpPGE7aSsrKXNbaV09YXJndW1lbnRzW2ldO3JldHVybiB5ZShrZSh0PW4uY2FsbC5hcHBseShuLFt0aGlzXS5jb25jYXQocykpKSxcImRheUVsXCIsZS5jcmVhdGVSZWYoKSkseWUoa2UodCksXCJoYW5kbGVDbGlja1wiLChmdW5jdGlvbihlKXshdC5pc0Rpc2FibGVkKCkmJnQucHJvcHMub25DbGljayYmdC5wcm9wcy5vbkNsaWNrKGUpfSkpLHllKGtlKHQpLFwiaGFuZGxlTW91c2VFbnRlclwiLChmdW5jdGlvbihlKXshdC5pc0Rpc2FibGVkKCkmJnQucHJvcHMub25Nb3VzZUVudGVyJiZ0LnByb3BzLm9uTW91c2VFbnRlcihlKX0pKSx5ZShrZSh0KSxcImhhbmRsZU9uS2V5RG93blwiLChmdW5jdGlvbihlKXtcIiBcIj09PWUua2V5JiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUua2V5PVwiRW50ZXJcIiksdC5wcm9wcy5oYW5kbGVPbktleURvd24oZSl9KSkseWUoa2UodCksXCJpc1NhbWVEYXlcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHplKHQucHJvcHMuZGF5LGUpfSkpLHllKGtlKHQpLFwiaXNLZXlib2FyZFNlbGVjdGVkXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIXQucHJvcHMuZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb24mJiF0LmlzU2FtZURheSh0LnByb3BzLnNlbGVjdGVkKSYmdC5pc1NhbWVEYXkodC5wcm9wcy5wcmVTZWxlY3Rpb24pfSkpLHllKGtlKHQpLFwiaXNEaXNhYmxlZFwiLChmdW5jdGlvbigpe3JldHVybiBvdCh0LnByb3BzLmRheSx0LnByb3BzKX0pKSx5ZShrZSh0KSxcImlzRXhjbHVkZWRcIiwoZnVuY3Rpb24oKXtyZXR1cm4gYXQodC5wcm9wcy5kYXksdC5wcm9wcyl9KSkseWUoa2UodCksXCJnZXRIaWdoTGlnaHRlZENsYXNzXCIsKGZ1bmN0aW9uKGUpe3ZhciByPXQucHJvcHMsbj1yLmRheSxvPXIuaGlnaGxpZ2h0RGF0ZXM7aWYoIW8pcmV0dXJuITE7dmFyIGE9SWUobixcIk1NLmRkLnl5eXlcIik7cmV0dXJuIG8uZ2V0KGEpfSkpLHllKGtlKHQpLFwiaXNJblJhbmdlXCIsKGZ1bmN0aW9uKCl7dmFyIGU9dC5wcm9wcyxyPWUuZGF5LG49ZS5zdGFydERhdGUsbz1lLmVuZERhdGU7cmV0dXJuISghbnx8IW8pJiZHZShyLG4sbyl9KSkseWUoa2UodCksXCJpc0luU2VsZWN0aW5nUmFuZ2VcIiwoZnVuY3Rpb24oKXt2YXIgZSxyPXQucHJvcHMsbj1yLmRheSxvPXIuc2VsZWN0c1N0YXJ0LGE9ci5zZWxlY3RzRW5kLHM9ci5zZWxlY3RzUmFuZ2UsaT1yLnNlbGVjdHNEaXNhYmxlZERheXNJblJhbmdlLHA9ci5zdGFydERhdGUsYz1yLmVuZERhdGUsbD1udWxsIT09KGU9dC5wcm9wcy5zZWxlY3RpbmdEYXRlKSYmdm9pZCAwIT09ZT9lOnQucHJvcHMucHJlU2VsZWN0aW9uO3JldHVybiEoIShvfHxhfHxzKXx8IWx8fCFpJiZ0LmlzRGlzYWJsZWQoKSkmJihvJiZjJiYoWihsLGMpfHwkZShsLGMpKT9HZShuLGwsYyk6KGEmJnAmJihYKGwscCl8fCRlKGwscCkpfHwhKCFzfHwhcHx8Y3x8IVgobCxwKSYmISRlKGwscCkpKSYmR2UobixwLGwpKX0pKSx5ZShrZSh0KSxcImlzU2VsZWN0aW5nUmFuZ2VTdGFydFwiLChmdW5jdGlvbigpe3ZhciBlO2lmKCF0LmlzSW5TZWxlY3RpbmdSYW5nZSgpKXJldHVybiExO3ZhciByPXQucHJvcHMsbj1yLmRheSxvPXIuc3RhcnREYXRlLGE9ci5zZWxlY3RzU3RhcnQscz1udWxsIT09KGU9dC5wcm9wcy5zZWxlY3RpbmdEYXRlKSYmdm9pZCAwIT09ZT9lOnQucHJvcHMucHJlU2VsZWN0aW9uO3JldHVybiB6ZShuLGE/czpvKX0pKSx5ZShrZSh0KSxcImlzU2VsZWN0aW5nUmFuZ2VFbmRcIiwoZnVuY3Rpb24oKXt2YXIgZTtpZighdC5pc0luU2VsZWN0aW5nUmFuZ2UoKSlyZXR1cm4hMTt2YXIgcj10LnByb3BzLG49ci5kYXksbz1yLmVuZERhdGUsYT1yLnNlbGVjdHNFbmQscz1yLnNlbGVjdHNSYW5nZSxpPW51bGwhPT0oZT10LnByb3BzLnNlbGVjdGluZ0RhdGUpJiZ2b2lkIDAhPT1lP2U6dC5wcm9wcy5wcmVTZWxlY3Rpb247cmV0dXJuIHplKG4sYXx8cz9pOm8pfSkpLHllKGtlKHQpLFwiaXNSYW5nZVN0YXJ0XCIsKGZ1bmN0aW9uKCl7dmFyIGU9dC5wcm9wcyxyPWUuZGF5LG49ZS5zdGFydERhdGUsbz1lLmVuZERhdGU7cmV0dXJuISghbnx8IW8pJiZ6ZShuLHIpfSkpLHllKGtlKHQpLFwiaXNSYW5nZUVuZFwiLChmdW5jdGlvbigpe3ZhciBlPXQucHJvcHMscj1lLmRheSxuPWUuc3RhcnREYXRlLG89ZS5lbmREYXRlO3JldHVybiEoIW58fCFvKSYmemUobyxyKX0pKSx5ZShrZSh0KSxcImlzV2Vla2VuZFwiLChmdW5jdGlvbigpe3ZhciBlPWsodC5wcm9wcy5kYXkpO3JldHVybiAwPT09ZXx8Nj09PWV9KSkseWUoa2UodCksXCJpc0FmdGVyTW9udGhcIiwoZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dC5wcm9wcy5tb250aCYmKHQucHJvcHMubW9udGgrMSklMTI9PT1DKHQucHJvcHMuZGF5KX0pKSx5ZShrZSh0KSxcImlzQmVmb3JlTW9udGhcIiwoZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dC5wcm9wcy5tb250aCYmKEModC5wcm9wcy5kYXkpKzEpJTEyPT09dC5wcm9wcy5tb250aH0pKSx5ZShrZSh0KSxcImlzQ3VycmVudERheVwiLChmdW5jdGlvbigpe3JldHVybiB0LmlzU2FtZURheShZZSgpKX0pKSx5ZShrZSh0KSxcImlzU2VsZWN0ZWRcIiwoZnVuY3Rpb24oKXtyZXR1cm4gdC5pc1NhbWVEYXkodC5wcm9wcy5zZWxlY3RlZCl9KSkseWUoa2UodCksXCJnZXRDbGFzc05hbWVzXCIsKGZ1bmN0aW9uKGUpe3ZhciBuPXQucHJvcHMuZGF5Q2xhc3NOYW1lP3QucHJvcHMuZGF5Q2xhc3NOYW1lKGUpOnZvaWQgMDtyZXR1cm4gcihcInJlYWN0LWRhdGVwaWNrZXJfX2RheVwiLG4sXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLVwiK0FlKHQucHJvcHMuZGF5KSx7XCJyZWFjdC1kYXRlcGlja2VyX19kYXktLWRpc2FibGVkXCI6dC5pc0Rpc2FibGVkKCksXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLWV4Y2x1ZGVkXCI6dC5pc0V4Y2x1ZGVkKCksXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLXNlbGVjdGVkXCI6dC5pc1NlbGVjdGVkKCksXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLWtleWJvYXJkLXNlbGVjdGVkXCI6dC5pc0tleWJvYXJkU2VsZWN0ZWQoKSxcInJlYWN0LWRhdGVwaWNrZXJfX2RheS0tcmFuZ2Utc3RhcnRcIjp0LmlzUmFuZ2VTdGFydCgpLFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1yYW5nZS1lbmRcIjp0LmlzUmFuZ2VFbmQoKSxcInJlYWN0LWRhdGVwaWNrZXJfX2RheS0taW4tcmFuZ2VcIjp0LmlzSW5SYW5nZSgpLFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1pbi1zZWxlY3RpbmctcmFuZ2VcIjp0LmlzSW5TZWxlY3RpbmdSYW5nZSgpLFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1zZWxlY3RpbmctcmFuZ2Utc3RhcnRcIjp0LmlzU2VsZWN0aW5nUmFuZ2VTdGFydCgpLFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1zZWxlY3RpbmctcmFuZ2UtZW5kXCI6dC5pc1NlbGVjdGluZ1JhbmdlRW5kKCksXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLXRvZGF5XCI6dC5pc0N1cnJlbnREYXkoKSxcInJlYWN0LWRhdGVwaWNrZXJfX2RheS0td2Vla2VuZFwiOnQuaXNXZWVrZW5kKCksXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLW91dHNpZGUtbW9udGhcIjp0LmlzQWZ0ZXJNb250aCgpfHx0LmlzQmVmb3JlTW9udGgoKX0sdC5nZXRIaWdoTGlnaHRlZENsYXNzKFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1oaWdobGlnaHRlZFwiKSl9KSkseWUoa2UodCksXCJnZXRBcmlhTGFiZWxcIiwoZnVuY3Rpb24oKXt2YXIgZT10LnByb3BzLHI9ZS5kYXksbj1lLmFyaWFMYWJlbFByZWZpeFdoZW5FbmFibGVkLG89dm9pZCAwPT09bj9cIkNob29zZVwiOm4sYT1lLmFyaWFMYWJlbFByZWZpeFdoZW5EaXNhYmxlZCxzPXZvaWQgMD09PWE/XCJOb3QgYXZhaWxhYmxlXCI6YSxpPXQuaXNEaXNhYmxlZCgpfHx0LmlzRXhjbHVkZWQoKT9zOm87cmV0dXJuXCJcIi5jb25jYXQoaSxcIiBcIikuY29uY2F0KEllKHIsXCJQUFBQXCIsdC5wcm9wcy5sb2NhbGUpKX0pKSx5ZShrZSh0KSxcImdldFRhYkluZGV4XCIsKGZ1bmN0aW9uKGUscil7dmFyIG49ZXx8dC5wcm9wcy5zZWxlY3RlZCxvPXJ8fHQucHJvcHMucHJlU2VsZWN0aW9uO3JldHVybiB0LmlzS2V5Ym9hcmRTZWxlY3RlZCgpfHx0LmlzU2FtZURheShuKSYmemUobyxuKT8wOi0xfSkpLHllKGtlKHQpLFwiaGFuZGxlRm9jdXNEYXlcIiwoZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30scj0hMTswPT09dC5nZXRUYWJJbmRleCgpJiYhZS5pc0lucHV0Rm9jdXNlZCYmdC5pc1NhbWVEYXkodC5wcm9wcy5wcmVTZWxlY3Rpb24pJiYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWRvY3VtZW50LmJvZHl8fChyPSEwKSx0LnByb3BzLmlubGluZSYmIXQucHJvcHMuc2hvdWxkRm9jdXNEYXlJbmxpbmUmJihyPSExKSx0LnByb3BzLmNvbnRhaW5lclJlZiYmdC5wcm9wcy5jb250YWluZXJSZWYuY3VycmVudCYmdC5wcm9wcy5jb250YWluZXJSZWYuY3VycmVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJyZWFjdC1kYXRlcGlja2VyX19kYXlcIikmJihyPSEwKSksciYmdC5kYXlFbC5jdXJyZW50LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9KSkseWUoa2UodCksXCJyZW5kZXJEYXlDb250ZW50c1wiLChmdW5jdGlvbigpe3JldHVybiB0LnByb3BzLm1vbnRoU2hvd3NEdXBsaWNhdGVEYXlzRW5kJiZ0LmlzQWZ0ZXJNb250aCgpfHx0LnByb3BzLm1vbnRoU2hvd3NEdXBsaWNhdGVEYXlzU3RhcnQmJnQuaXNCZWZvcmVNb250aCgpP251bGw6dC5wcm9wcy5yZW5kZXJEYXlDb250ZW50cz90LnByb3BzLnJlbmRlckRheUNvbnRlbnRzKGIodC5wcm9wcy5kYXkpLHQucHJvcHMuZGF5KTpiKHQucHJvcHMuZGF5KX0pKSx5ZShrZSh0KSxcInJlbmRlclwiLChmdW5jdGlvbigpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7cmVmOnQuZGF5RWwsY2xhc3NOYW1lOnQuZ2V0Q2xhc3NOYW1lcyh0LnByb3BzLmRheSksb25LZXlEb3duOnQuaGFuZGxlT25LZXlEb3duLG9uQ2xpY2s6dC5oYW5kbGVDbGljayxvbk1vdXNlRW50ZXI6dC5oYW5kbGVNb3VzZUVudGVyLHRhYkluZGV4OnQuZ2V0VGFiSW5kZXgoKSxcImFyaWEtbGFiZWxcIjp0LmdldEFyaWFMYWJlbCgpLHJvbGU6XCJvcHRpb25cIixcImFyaWEtZGlzYWJsZWRcIjp0LmlzRGlzYWJsZWQoKSxcImFyaWEtY3VycmVudFwiOnQuaXNDdXJyZW50RGF5KCk/XCJkYXRlXCI6dm9pZCAwLFwiYXJpYS1zZWxlY3RlZFwiOnQuaXNTZWxlY3RlZCgpfSx0LnJlbmRlckRheUNvbnRlbnRzKCkpfSkpLHR9cmV0dXJuIGZlKG8sW3trZXk6XCJjb21wb25lbnREaWRNb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVGb2N1c0RheSgpfX0se2tleTpcImNvbXBvbmVudERpZFVwZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuaGFuZGxlRm9jdXNEYXkoZSl9fV0pLG99KCksSXQ9ZnVuY3Rpb24odCl7RGUobyxlLkNvbXBvbmVudCk7dmFyIG49U2Uobyk7ZnVuY3Rpb24gbygpe3ZhciBlO2hlKHRoaXMsbyk7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkodCksYT0wO2E8dDthKyspclthXT1hcmd1bWVudHNbYV07cmV0dXJuIHllKGtlKGU9bi5jYWxsLmFwcGx5KG4sW3RoaXNdLmNvbmNhdChyKSkpLFwiaGFuZGxlQ2xpY2tcIiwoZnVuY3Rpb24odCl7ZS5wcm9wcy5vbkNsaWNrJiZlLnByb3BzLm9uQ2xpY2sodCl9KSksZX1yZXR1cm4gZmUobyxbe2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wcm9wcyxuPXQud2Vla051bWJlcixvPXQuYXJpYUxhYmVsUHJlZml4LGE9dm9pZCAwPT09bz9cIndlZWsgXCI6byxzPXtcInJlYWN0LWRhdGVwaWNrZXJfX3dlZWstbnVtYmVyXCI6ITAsXCJyZWFjdC1kYXRlcGlja2VyX193ZWVrLW51bWJlci0tY2xpY2thYmxlXCI6ISF0Lm9uQ2xpY2t9O3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOnIocyksXCJhcmlhLWxhYmVsXCI6XCJcIi5jb25jYXQoYSxcIiBcIikuY29uY2F0KHRoaXMucHJvcHMud2Vla051bWJlciksb25DbGljazp0aGlzLmhhbmRsZUNsaWNrfSxuKX19XSksb30oKSxMdD1mdW5jdGlvbih0KXtEZShuLGUuQ29tcG9uZW50KTt2YXIgcj1TZShuKTtmdW5jdGlvbiBuKCl7dmFyIHQ7aGUodGhpcyxuKTtmb3IodmFyIG89YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPTA7czxvO3MrKylhW3NdPWFyZ3VtZW50c1tzXTtyZXR1cm4geWUoa2UodD1yLmNhbGwuYXBwbHkocixbdGhpc10uY29uY2F0KGEpKSksXCJoYW5kbGVEYXlDbGlja1wiLChmdW5jdGlvbihlLHIpe3QucHJvcHMub25EYXlDbGljayYmdC5wcm9wcy5vbkRheUNsaWNrKGUscil9KSkseWUoa2UodCksXCJoYW5kbGVEYXlNb3VzZUVudGVyXCIsKGZ1bmN0aW9uKGUpe3QucHJvcHMub25EYXlNb3VzZUVudGVyJiZ0LnByb3BzLm9uRGF5TW91c2VFbnRlcihlKX0pKSx5ZShrZSh0KSxcImhhbmRsZVdlZWtDbGlja1wiLChmdW5jdGlvbihlLHIsbil7XCJmdW5jdGlvblwiPT10eXBlb2YgdC5wcm9wcy5vbldlZWtTZWxlY3QmJnQucHJvcHMub25XZWVrU2VsZWN0KGUscixuKSx0LnByb3BzLnNob3VsZENsb3NlT25TZWxlY3QmJnQucHJvcHMuc2V0T3BlbighMSl9KSkseWUoa2UodCksXCJmb3JtYXRXZWVrTnVtYmVyXCIsKGZ1bmN0aW9uKGUpe3JldHVybiB0LnByb3BzLmZvcm1hdFdlZWtOdW1iZXI/dC5wcm9wcy5mb3JtYXRXZWVrTnVtYmVyKGUpOkZlKGUpfSkpLHllKGtlKHQpLFwicmVuZGVyRGF5c1wiLChmdW5jdGlvbigpe3ZhciByPUJlKHQucHJvcHMuZGF5LHQucHJvcHMubG9jYWxlLHQucHJvcHMuY2FsZW5kYXJTdGFydERheSksbj1bXSxvPXQuZm9ybWF0V2Vla051bWJlcihyKTtpZih0LnByb3BzLnNob3dXZWVrTnVtYmVyKXt2YXIgYT10LnByb3BzLm9uV2Vla1NlbGVjdD90LmhhbmRsZVdlZWtDbGljay5iaW5kKGtlKHQpLHIsbyk6dm9pZCAwO24ucHVzaChlLmNyZWF0ZUVsZW1lbnQoSXQse2tleTpcIldcIix3ZWVrTnVtYmVyOm8sb25DbGljazphLGFyaWFMYWJlbFByZWZpeDp0LnByb3BzLmFyaWFMYWJlbFByZWZpeH0pKX1yZXR1cm4gbi5jb25jYXQoWzAsMSwyLDMsNCw1LDZdLm1hcCgoZnVuY3Rpb24obil7dmFyIG89cChyLG4pO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoVHQse2FyaWFMYWJlbFByZWZpeFdoZW5FbmFibGVkOnQucHJvcHMuY2hvb3NlRGF5QXJpYUxhYmVsUHJlZml4LGFyaWFMYWJlbFByZWZpeFdoZW5EaXNhYmxlZDp0LnByb3BzLmRpc2FibGVkRGF5QXJpYUxhYmVsUHJlZml4LGtleTpvLnZhbHVlT2YoKSxkYXk6byxtb250aDp0LnByb3BzLm1vbnRoLG9uQ2xpY2s6dC5oYW5kbGVEYXlDbGljay5iaW5kKGtlKHQpLG8pLG9uTW91c2VFbnRlcjp0LmhhbmRsZURheU1vdXNlRW50ZXIuYmluZChrZSh0KSxvKSxtaW5EYXRlOnQucHJvcHMubWluRGF0ZSxtYXhEYXRlOnQucHJvcHMubWF4RGF0ZSxleGNsdWRlRGF0ZXM6dC5wcm9wcy5leGNsdWRlRGF0ZXMsZXhjbHVkZURhdGVJbnRlcnZhbHM6dC5wcm9wcy5leGNsdWRlRGF0ZUludGVydmFscyxpbmNsdWRlRGF0ZXM6dC5wcm9wcy5pbmNsdWRlRGF0ZXMsaW5jbHVkZURhdGVJbnRlcnZhbHM6dC5wcm9wcy5pbmNsdWRlRGF0ZUludGVydmFscyxoaWdobGlnaHREYXRlczp0LnByb3BzLmhpZ2hsaWdodERhdGVzLHNlbGVjdGluZ0RhdGU6dC5wcm9wcy5zZWxlY3RpbmdEYXRlLGZpbHRlckRhdGU6dC5wcm9wcy5maWx0ZXJEYXRlLHByZVNlbGVjdGlvbjp0LnByb3BzLnByZVNlbGVjdGlvbixzZWxlY3RlZDp0LnByb3BzLnNlbGVjdGVkLHNlbGVjdHNTdGFydDp0LnByb3BzLnNlbGVjdHNTdGFydCxzZWxlY3RzRW5kOnQucHJvcHMuc2VsZWN0c0VuZCxzZWxlY3RzUmFuZ2U6dC5wcm9wcy5zZWxlY3RzUmFuZ2Usc2VsZWN0c0Rpc2FibGVkRGF5c0luUmFuZ2U6dC5wcm9wcy5zZWxlY3RzRGlzYWJsZWREYXlzSW5SYW5nZSxzdGFydERhdGU6dC5wcm9wcy5zdGFydERhdGUsZW5kRGF0ZTp0LnByb3BzLmVuZERhdGUsZGF5Q2xhc3NOYW1lOnQucHJvcHMuZGF5Q2xhc3NOYW1lLHJlbmRlckRheUNvbnRlbnRzOnQucHJvcHMucmVuZGVyRGF5Q29udGVudHMsZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb246dC5wcm9wcy5kaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbixoYW5kbGVPbktleURvd246dC5wcm9wcy5oYW5kbGVPbktleURvd24saXNJbnB1dEZvY3VzZWQ6dC5wcm9wcy5pc0lucHV0Rm9jdXNlZCxjb250YWluZXJSZWY6dC5wcm9wcy5jb250YWluZXJSZWYsaW5saW5lOnQucHJvcHMuaW5saW5lLHNob3VsZEZvY3VzRGF5SW5saW5lOnQucHJvcHMuc2hvdWxkRm9jdXNEYXlJbmxpbmUsbW9udGhTaG93c0R1cGxpY2F0ZURheXNFbmQ6dC5wcm9wcy5tb250aFNob3dzRHVwbGljYXRlRGF5c0VuZCxtb250aFNob3dzRHVwbGljYXRlRGF5c1N0YXJ0OnQucHJvcHMubW9udGhTaG93c0R1cGxpY2F0ZURheXNTdGFydCxsb2NhbGU6dC5wcm9wcy5sb2NhbGV9KX0pKSl9KSksdH1yZXR1cm4gZmUobixbe2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX193ZWVrXCJ9LHRoaXMucmVuZGVyRGF5cygpKX19XSxbe2tleTpcImRlZmF1bHRQcm9wc1wiLGdldDpmdW5jdGlvbigpe3JldHVybntzaG91bGRDbG9zZU9uU2VsZWN0OiEwfX19XSksbn0oKSxSdD1mdW5jdGlvbih0KXtEZShvLGUuQ29tcG9uZW50KTt2YXIgbj1TZShvKTtmdW5jdGlvbiBvKCl7dmFyIHQ7aGUodGhpcyxvKTtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxzPW5ldyBBcnJheShhKSxpPTA7aTxhO2krKylzW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4geWUoa2UodD1uLmNhbGwuYXBwbHkobixbdGhpc10uY29uY2F0KHMpKSksXCJNT05USF9SRUZTXCIsQ2UoQXJyYXkoMTIpKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY3JlYXRlUmVmKCl9KSkpLHllKGtlKHQpLFwiUVVBUlRFUl9SRUZTXCIsQ2UoQXJyYXkoNCkpLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVSZWYoKX0pKSkseWUoa2UodCksXCJpc0Rpc2FibGVkXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBvdChlLHQucHJvcHMpfSkpLHllKGtlKHQpLFwiaXNFeGNsdWRlZFwiLChmdW5jdGlvbihlKXtyZXR1cm4gYXQoZSx0LnByb3BzKX0pKSx5ZShrZSh0KSxcImhhbmRsZURheUNsaWNrXCIsKGZ1bmN0aW9uKGUscil7dC5wcm9wcy5vbkRheUNsaWNrJiZ0LnByb3BzLm9uRGF5Q2xpY2soZSxyLHQucHJvcHMub3JkZXJJbkRpc3BsYXkpfSkpLHllKGtlKHQpLFwiaGFuZGxlRGF5TW91c2VFbnRlclwiLChmdW5jdGlvbihlKXt0LnByb3BzLm9uRGF5TW91c2VFbnRlciYmdC5wcm9wcy5vbkRheU1vdXNlRW50ZXIoZSl9KSkseWUoa2UodCksXCJoYW5kbGVNb3VzZUxlYXZlXCIsKGZ1bmN0aW9uKCl7dC5wcm9wcy5vbk1vdXNlTGVhdmUmJnQucHJvcHMub25Nb3VzZUxlYXZlKCl9KSkseWUoa2UodCksXCJpc1JhbmdlU3RhcnRNb250aFwiLChmdW5jdGlvbihlKXt2YXIgcj10LnByb3BzLG49ci5kYXksbz1yLnN0YXJ0RGF0ZSxhPXIuZW5kRGF0ZTtyZXR1cm4hKCFvfHwhYSkmJnFlKFkobixlKSxvKX0pKSx5ZShrZSh0KSxcImlzUmFuZ2VTdGFydFF1YXJ0ZXJcIiwoZnVuY3Rpb24oZSl7dmFyIHI9dC5wcm9wcyxuPXIuZGF5LG89ci5zdGFydERhdGUsYT1yLmVuZERhdGU7cmV0dXJuISghb3x8IWEpJiZVZShPKG4sZSksbyl9KSkseWUoa2UodCksXCJpc1JhbmdlRW5kTW9udGhcIiwoZnVuY3Rpb24oZSl7dmFyIHI9dC5wcm9wcyxuPXIuZGF5LG89ci5zdGFydERhdGUsYT1yLmVuZERhdGU7cmV0dXJuISghb3x8IWEpJiZxZShZKG4sZSksYSl9KSkseWUoa2UodCksXCJpc1JhbmdlRW5kUXVhcnRlclwiLChmdW5jdGlvbihlKXt2YXIgcj10LnByb3BzLG49ci5kYXksbz1yLnN0YXJ0RGF0ZSxhPXIuZW5kRGF0ZTtyZXR1cm4hKCFvfHwhYSkmJlVlKE8obixlKSxhKX0pKSx5ZShrZSh0KSxcImlzV2Vla0luTW9udGhcIiwoZnVuY3Rpb24oZSl7dmFyIHI9dC5wcm9wcy5kYXksbj1wKGUsNik7cmV0dXJuIHFlKGUscil8fHFlKG4scil9KSkseWUoa2UodCksXCJpc0N1cnJlbnRNb250aFwiLChmdW5jdGlvbihlLHQpe3JldHVybiBNKGUpPT09TShZZSgpKSYmdD09PUMoWWUoKSl9KSkseWUoa2UodCksXCJpc0N1cnJlbnRRdWFydGVyXCIsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE0oZSk9PT1NKFllKCkpJiZ0PT09XyhZZSgpKX0pKSx5ZShrZSh0KSxcImlzU2VsZWN0ZWRNb250aFwiLChmdW5jdGlvbihlLHQscil7cmV0dXJuIEMoZSk9PT10JiZNKGUpPT09TShyKX0pKSx5ZShrZSh0KSxcImlzU2VsZWN0ZWRRdWFydGVyXCIsKGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gXyhlKT09PXQmJk0oZSk9PT1NKHIpfSkpLHllKGtlKHQpLFwicmVuZGVyV2Vla3NcIiwoZnVuY3Rpb24oKXtmb3IodmFyIHI9W10sbj10LnByb3BzLmZpeGVkSGVpZ2h0LG89MCxhPSExLHM9QmUoV2UodC5wcm9wcy5kYXkpLHQucHJvcHMubG9jYWxlLHQucHJvcHMuY2FsZW5kYXJTdGFydERheSk7ci5wdXNoKGUuY3JlYXRlRWxlbWVudChMdCx7YXJpYUxhYmVsUHJlZml4OnQucHJvcHMud2Vla0FyaWFMYWJlbFByZWZpeCxjaG9vc2VEYXlBcmlhTGFiZWxQcmVmaXg6dC5wcm9wcy5jaG9vc2VEYXlBcmlhTGFiZWxQcmVmaXgsZGlzYWJsZWREYXlBcmlhTGFiZWxQcmVmaXg6dC5wcm9wcy5kaXNhYmxlZERheUFyaWFMYWJlbFByZWZpeCxrZXk6byxkYXk6cyxtb250aDpDKHQucHJvcHMuZGF5KSxvbkRheUNsaWNrOnQuaGFuZGxlRGF5Q2xpY2ssb25EYXlNb3VzZUVudGVyOnQuaGFuZGxlRGF5TW91c2VFbnRlcixvbldlZWtTZWxlY3Q6dC5wcm9wcy5vbldlZWtTZWxlY3QsZm9ybWF0V2Vla051bWJlcjp0LnByb3BzLmZvcm1hdFdlZWtOdW1iZXIsbG9jYWxlOnQucHJvcHMubG9jYWxlLG1pbkRhdGU6dC5wcm9wcy5taW5EYXRlLG1heERhdGU6dC5wcm9wcy5tYXhEYXRlLGV4Y2x1ZGVEYXRlczp0LnByb3BzLmV4Y2x1ZGVEYXRlcyxleGNsdWRlRGF0ZUludGVydmFsczp0LnByb3BzLmV4Y2x1ZGVEYXRlSW50ZXJ2YWxzLGluY2x1ZGVEYXRlczp0LnByb3BzLmluY2x1ZGVEYXRlcyxpbmNsdWRlRGF0ZUludGVydmFsczp0LnByb3BzLmluY2x1ZGVEYXRlSW50ZXJ2YWxzLGlubGluZTp0LnByb3BzLmlubGluZSxzaG91bGRGb2N1c0RheUlubGluZTp0LnByb3BzLnNob3VsZEZvY3VzRGF5SW5saW5lLGhpZ2hsaWdodERhdGVzOnQucHJvcHMuaGlnaGxpZ2h0RGF0ZXMsc2VsZWN0aW5nRGF0ZTp0LnByb3BzLnNlbGVjdGluZ0RhdGUsZmlsdGVyRGF0ZTp0LnByb3BzLmZpbHRlckRhdGUscHJlU2VsZWN0aW9uOnQucHJvcHMucHJlU2VsZWN0aW9uLHNlbGVjdGVkOnQucHJvcHMuc2VsZWN0ZWQsc2VsZWN0c1N0YXJ0OnQucHJvcHMuc2VsZWN0c1N0YXJ0LHNlbGVjdHNFbmQ6dC5wcm9wcy5zZWxlY3RzRW5kLHNlbGVjdHNSYW5nZTp0LnByb3BzLnNlbGVjdHNSYW5nZSxzZWxlY3RzRGlzYWJsZWREYXlzSW5SYW5nZTp0LnByb3BzLnNlbGVjdHNEaXNhYmxlZERheXNJblJhbmdlLHNob3dXZWVrTnVtYmVyOnQucHJvcHMuc2hvd1dlZWtOdW1iZXJzLHN0YXJ0RGF0ZTp0LnByb3BzLnN0YXJ0RGF0ZSxlbmREYXRlOnQucHJvcHMuZW5kRGF0ZSxkYXlDbGFzc05hbWU6dC5wcm9wcy5kYXlDbGFzc05hbWUsc2V0T3Blbjp0LnByb3BzLnNldE9wZW4sc2hvdWxkQ2xvc2VPblNlbGVjdDp0LnByb3BzLnNob3VsZENsb3NlT25TZWxlY3QsZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb246dC5wcm9wcy5kaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbixyZW5kZXJEYXlDb250ZW50czp0LnByb3BzLnJlbmRlckRheUNvbnRlbnRzLGhhbmRsZU9uS2V5RG93bjp0LnByb3BzLmhhbmRsZU9uS2V5RG93bixpc0lucHV0Rm9jdXNlZDp0LnByb3BzLmlzSW5wdXRGb2N1c2VkLGNvbnRhaW5lclJlZjp0LnByb3BzLmNvbnRhaW5lclJlZixjYWxlbmRhclN0YXJ0RGF5OnQucHJvcHMuY2FsZW5kYXJTdGFydERheSxtb250aFNob3dzRHVwbGljYXRlRGF5c0VuZDp0LnByb3BzLm1vbnRoU2hvd3NEdXBsaWNhdGVEYXlzRW5kLG1vbnRoU2hvd3NEdXBsaWNhdGVEYXlzU3RhcnQ6dC5wcm9wcy5tb250aFNob3dzRHVwbGljYXRlRGF5c1N0YXJ0fSkpLCFhOyl7bysrLHM9YyhzLDEpO3ZhciBpPW4mJm8+PTYscD0hbiYmIXQuaXNXZWVrSW5Nb250aChzKTtpZihpfHxwKXtpZighdC5wcm9wcy5wZWVrTmV4dE1vbnRoKWJyZWFrO2E9ITB9fXJldHVybiByfSkpLHllKGtlKHQpLFwib25Nb250aENsaWNrXCIsKGZ1bmN0aW9uKGUscil7dC5oYW5kbGVEYXlDbGljayhXZShZKHQucHJvcHMuZGF5LHIpKSxlKX0pKSx5ZShrZSh0KSxcImhhbmRsZU1vbnRoTmF2aWdhdGlvblwiLChmdW5jdGlvbihlLHIpe3QuaXNEaXNhYmxlZChyKXx8dC5pc0V4Y2x1ZGVkKHIpfHwodC5wcm9wcy5zZXRQcmVTZWxlY3Rpb24ociksdC5NT05USF9SRUZTW2VdLmN1cnJlbnQmJnQuTU9OVEhfUkVGU1tlXS5jdXJyZW50LmZvY3VzKCkpfSkpLHllKGtlKHQpLFwib25Nb250aEtleURvd25cIiwoZnVuY3Rpb24oZSxyKXtlLnByZXZlbnREZWZhdWx0KCk7dmFyIG49ZS5rZXk7aWYoIXQucHJvcHMuZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb24pc3dpdGNoKG4pe2Nhc2VcIkVudGVyXCI6dC5vbk1vbnRoQ2xpY2soZSxyKSx0LnByb3BzLnNldFByZVNlbGVjdGlvbih0LnByb3BzLnNlbGVjdGVkKTticmVhaztjYXNlXCJBcnJvd1JpZ2h0XCI6dC5oYW5kbGVNb250aE5hdmlnYXRpb24oMTE9PT1yPzA6cisxLGwodC5wcm9wcy5wcmVTZWxlY3Rpb24sMSkpO2JyZWFrO2Nhc2VcIkFycm93TGVmdFwiOnQuaGFuZGxlTW9udGhOYXZpZ2F0aW9uKDA9PT1yPzExOnItMSxmKHQucHJvcHMucHJlU2VsZWN0aW9uLDEpKTticmVhaztjYXNlXCJBcnJvd1VwXCI6dC5oYW5kbGVNb250aE5hdmlnYXRpb24ocj49MCYmcjw9Mj9yKzk6ci0zLGYodC5wcm9wcy5wcmVTZWxlY3Rpb24sMykpO2JyZWFrO2Nhc2VcIkFycm93RG93blwiOnQuaGFuZGxlTW9udGhOYXZpZ2F0aW9uKHI+PTkmJnI8PTExP3ItOTpyKzMsbCh0LnByb3BzLnByZVNlbGVjdGlvbiwzKSl9fSkpLHllKGtlKHQpLFwib25RdWFydGVyQ2xpY2tcIiwoZnVuY3Rpb24oZSxyKXt0LmhhbmRsZURheUNsaWNrKGplKE8odC5wcm9wcy5kYXkscikpLGUpfSkpLHllKGtlKHQpLFwiaGFuZGxlUXVhcnRlck5hdmlnYXRpb25cIiwoZnVuY3Rpb24oZSxyKXt0LmlzRGlzYWJsZWQocil8fHQuaXNFeGNsdWRlZChyKXx8KHQucHJvcHMuc2V0UHJlU2VsZWN0aW9uKHIpLHQuUVVBUlRFUl9SRUZTW2UtMV0uY3VycmVudCYmdC5RVUFSVEVSX1JFRlNbZS0xXS5jdXJyZW50LmZvY3VzKCkpfSkpLHllKGtlKHQpLFwib25RdWFydGVyS2V5RG93blwiLChmdW5jdGlvbihlLHIpe3ZhciBuPWUua2V5O2lmKCF0LnByb3BzLmRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uKXN3aXRjaChuKXtjYXNlXCJFbnRlclwiOnQub25RdWFydGVyQ2xpY2soZSxyKSx0LnByb3BzLnNldFByZVNlbGVjdGlvbih0LnByb3BzLnNlbGVjdGVkKTticmVhaztjYXNlXCJBcnJvd1JpZ2h0XCI6dC5oYW5kbGVRdWFydGVyTmF2aWdhdGlvbig0PT09cj8xOnIrMSxkKHQucHJvcHMucHJlU2VsZWN0aW9uLDEpKTticmVhaztjYXNlXCJBcnJvd0xlZnRcIjp0LmhhbmRsZVF1YXJ0ZXJOYXZpZ2F0aW9uKDE9PT1yPzQ6ci0xLHkodC5wcm9wcy5wcmVTZWxlY3Rpb24sMSkpfX0pKSx5ZShrZSh0KSxcImdldE1vbnRoQ2xhc3NOYW1lc1wiLChmdW5jdGlvbihlKXt2YXIgbj10LnByb3BzLG89bi5kYXksYT1uLnN0YXJ0RGF0ZSxzPW4uZW5kRGF0ZSxpPW4uc2VsZWN0ZWQscD1uLm1pbkRhdGUsYz1uLm1heERhdGUsbD1uLnByZVNlbGVjdGlvbixkPW4ubW9udGhDbGFzc05hbWUsdT1uLmV4Y2x1ZGVEYXRlcyxoPW4uaW5jbHVkZURhdGVzLG09ZD9kKFkobyxlKSk6dm9pZCAwLGY9WShvLGUpO3JldHVybiByKFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dFwiLFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtXCIuY29uY2F0KGUpLG0se1wicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLWRpc2FibGVkXCI6KHB8fGN8fHV8fGgpJiZzdChmLHQucHJvcHMpLFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLXNlbGVjdGVkXCI6dC5pc1NlbGVjdGVkTW9udGgobyxlLGkpLFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dC0ta2V5Ym9hcmQtc2VsZWN0ZWRcIjohdC5wcm9wcy5kaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbiYmQyhsKT09PWUsXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC0taW4tcmFuZ2VcIjppdChhLHMsZSxvKSxcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1yYW5nZS1zdGFydFwiOnQuaXNSYW5nZVN0YXJ0TW9udGgoZSksXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC0tcmFuZ2UtZW5kXCI6dC5pc1JhbmdlRW5kTW9udGgoZSksXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS10b2RheVwiOnQuaXNDdXJyZW50TW9udGgobyxlKX0pfSkpLHllKGtlKHQpLFwiZ2V0VGFiSW5kZXhcIiwoZnVuY3Rpb24oZSl7dmFyIHI9Qyh0LnByb3BzLnByZVNlbGVjdGlvbik7cmV0dXJuIHQucHJvcHMuZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb258fGUhPT1yP1wiLTFcIjpcIjBcIn0pKSx5ZShrZSh0KSxcImdldFF1YXJ0ZXJUYWJJbmRleFwiLChmdW5jdGlvbihlKXt2YXIgcj1fKHQucHJvcHMucHJlU2VsZWN0aW9uKTtyZXR1cm4gdC5wcm9wcy5kaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbnx8ZSE9PXI/XCItMVwiOlwiMFwifSkpLHllKGtlKHQpLFwiZ2V0QXJpYUxhYmVsXCIsKGZ1bmN0aW9uKGUpe3ZhciByPXQucHJvcHMsbj1yLmNob29zZURheUFyaWFMYWJlbFByZWZpeCxvPXZvaWQgMD09PW4/XCJDaG9vc2VcIjpuLGE9ci5kaXNhYmxlZERheUFyaWFMYWJlbFByZWZpeCxzPXZvaWQgMD09PWE/XCJOb3QgYXZhaWxhYmxlXCI6YSxpPXIuZGF5LHA9WShpLGUpLGM9dC5pc0Rpc2FibGVkKHApfHx0LmlzRXhjbHVkZWQocCk/czpvO3JldHVyblwiXCIuY29uY2F0KGMsXCIgXCIpLmNvbmNhdChJZShwLFwiTU1NTSB5eXl5XCIpKX0pKSx5ZShrZSh0KSxcImdldFF1YXJ0ZXJDbGFzc05hbWVzXCIsKGZ1bmN0aW9uKGUpe3ZhciBuPXQucHJvcHMsbz1uLmRheSxhPW4uc3RhcnREYXRlLHM9bi5lbmREYXRlLGk9bi5zZWxlY3RlZCxwPW4ubWluRGF0ZSxjPW4ubWF4RGF0ZSxsPW4ucHJlU2VsZWN0aW9uO3JldHVybiByKFwicmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0XCIsXCJyZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLVwiLmNvbmNhdChlKSx7XCJyZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1kaXNhYmxlZFwiOihwfHxjKSYmcHQoTyhvLGUpLHQucHJvcHMpLFwicmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci0tc2VsZWN0ZWRcIjp0LmlzU2VsZWN0ZWRRdWFydGVyKG8sZSxpKSxcInJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0ta2V5Ym9hcmQtc2VsZWN0ZWRcIjpfKGwpPT09ZSxcInJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItLWluLXJhbmdlXCI6bHQoYSxzLGUsbyksXCJyZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1yYW5nZS1zdGFydFwiOnQuaXNSYW5nZVN0YXJ0UXVhcnRlcihlKSxcInJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItLXJhbmdlLWVuZFwiOnQuaXNSYW5nZUVuZFF1YXJ0ZXIoZSl9KX0pKSx5ZShrZSh0KSxcInJlbmRlck1vbnRoc1wiLChmdW5jdGlvbigpe3ZhciByPXQucHJvcHMsbj1yLnNob3dGdWxsTW9udGhZZWFyUGlja2VyLG89ci5zaG93VHdvQ29sdW1uTW9udGhZZWFyUGlja2VyLGE9ci5zaG93Rm91ckNvbHVtbk1vbnRoWWVhclBpY2tlcixzPXIubG9jYWxlLGk9ci5kYXkscD1yLnNlbGVjdGVkO3JldHVybihhP1tbMCwxLDIsM10sWzQsNSw2LDddLFs4LDksMTAsMTFdXTpvP1tbMCwxXSxbMiwzXSxbNCw1XSxbNiw3XSxbOCw5XSxbMTAsMTFdXTpbWzAsMSwyXSxbMyw0LDVdLFs2LDcsOF0sWzksMTAsMTFdXSkubWFwKChmdW5jdGlvbihyLG8pe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtd3JhcHBlclwiLGtleTpvfSxyLm1hcCgoZnVuY3Rpb24ocixvKXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse3JlZjp0Lk1PTlRIX1JFRlNbcl0sa2V5Om8sb25DbGljazpmdW5jdGlvbihlKXt0Lm9uTW9udGhDbGljayhlLHIpfSxvbktleURvd246ZnVuY3Rpb24oZSl7dC5vbk1vbnRoS2V5RG93bihlLHIpfSx0YWJJbmRleDp0LmdldFRhYkluZGV4KHIpLGNsYXNzTmFtZTp0LmdldE1vbnRoQ2xhc3NOYW1lcyhyKSxyb2xlOlwib3B0aW9uXCIsXCJhcmlhLWxhYmVsXCI6dC5nZXRBcmlhTGFiZWwociksXCJhcmlhLWN1cnJlbnRcIjp0LmlzQ3VycmVudE1vbnRoKGkscik/XCJkYXRlXCI6dm9pZCAwLFwiYXJpYS1zZWxlY3RlZFwiOnQuaXNTZWxlY3RlZE1vbnRoKGkscixwKX0sbj90dChyLHMpOnJ0KHIscykpfSkpKX0pKX0pKSx5ZShrZSh0KSxcInJlbmRlclF1YXJ0ZXJzXCIsKGZ1bmN0aW9uKCl7dmFyIHI9dC5wcm9wcyxuPXIuZGF5LG89ci5zZWxlY3RlZDtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItd3JhcHBlclwifSxbMSwyLDMsNF0ubWFwKChmdW5jdGlvbihyLGEpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7a2V5OmEscmVmOnQuUVVBUlRFUl9SRUZTW2FdLHJvbGU6XCJvcHRpb25cIixvbkNsaWNrOmZ1bmN0aW9uKGUpe3Qub25RdWFydGVyQ2xpY2soZSxyKX0sb25LZXlEb3duOmZ1bmN0aW9uKGUpe3Qub25RdWFydGVyS2V5RG93bihlLHIpfSxjbGFzc05hbWU6dC5nZXRRdWFydGVyQ2xhc3NOYW1lcyhyKSxcImFyaWEtc2VsZWN0ZWRcIjp0LmlzU2VsZWN0ZWRRdWFydGVyKG4scixvKSx0YWJJbmRleDp0LmdldFF1YXJ0ZXJUYWJJbmRleChyKSxcImFyaWEtY3VycmVudFwiOnQuaXNDdXJyZW50UXVhcnRlcihuLHIpP1wiZGF0ZVwiOnZvaWQgMH0sbnQocix0LnByb3BzLmxvY2FsZSkpfSkpKX0pKSx5ZShrZSh0KSxcImdldENsYXNzTmFtZXNcIiwoZnVuY3Rpb24oKXt2YXIgZT10LnByb3BzO2UuZGF5O3ZhciBuPWUuc2VsZWN0aW5nRGF0ZSxvPWUuc2VsZWN0c1N0YXJ0LGE9ZS5zZWxlY3RzRW5kLHM9ZS5zaG93TW9udGhZZWFyUGlja2VyLGk9ZS5zaG93UXVhcnRlclllYXJQaWNrZXI7cmV0dXJuIHIoXCJyZWFjdC1kYXRlcGlja2VyX19tb250aFwiLHtcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1zZWxlY3RpbmctcmFuZ2VcIjpuJiYob3x8YSl9LHtcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoUGlja2VyXCI6c30se1wicmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlclBpY2tlclwiOml9KX0pKSx0fXJldHVybiBmZShvLFt7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnByb3BzLHI9dC5zaG93TW9udGhZZWFyUGlja2VyLG49dC5zaG93UXVhcnRlclllYXJQaWNrZXIsbz10LmRheSxhPXQuYXJpYUxhYmVsUHJlZml4LHM9dm9pZCAwPT09YT9cIm1vbnRoIFwiOmE7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6dGhpcy5nZXRDbGFzc05hbWVzKCksb25Nb3VzZUxlYXZlOnRoaXMuaGFuZGxlTW91c2VMZWF2ZSxcImFyaWEtbGFiZWxcIjpcIlwiLmNvbmNhdChzLFwiIFwiKS5jb25jYXQoSWUobyxcInl5eXktTU1cIikpLHJvbGU6XCJsaXN0Ym94XCJ9LHI/dGhpcy5yZW5kZXJNb250aHMoKTpuP3RoaXMucmVuZGVyUXVhcnRlcnMoKTp0aGlzLnJlbmRlcldlZWtzKCkpfX1dKSxvfSgpLEZ0PWZ1bmN0aW9uKHQpe0RlKG4sZS5Db21wb25lbnQpO3ZhciByPVNlKG4pO2Z1bmN0aW9uIG4oKXt2YXIgdDtoZSh0aGlzLG4pO2Zvcih2YXIgbz1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KG8pLGk9MDtpPG87aSsrKWFbaV09YXJndW1lbnRzW2ldO3JldHVybiB5ZShrZSh0PXIuY2FsbC5hcHBseShyLFt0aGlzXS5jb25jYXQoYSkpKSxcInN0YXRlXCIse2hlaWdodDpudWxsfSkseWUoa2UodCksXCJoYW5kbGVDbGlja1wiLChmdW5jdGlvbihlKXsodC5wcm9wcy5taW5UaW1lfHx0LnByb3BzLm1heFRpbWUpJiZtdChlLHQucHJvcHMpfHwodC5wcm9wcy5leGNsdWRlVGltZXN8fHQucHJvcHMuaW5jbHVkZVRpbWVzfHx0LnByb3BzLmZpbHRlclRpbWUpJiZodChlLHQucHJvcHMpfHx0LnByb3BzLm9uQ2hhbmdlKGUpfSkpLHllKGtlKHQpLFwiaXNTZWxlY3RlZFRpbWVcIiwoZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LnByb3BzLnNlbGVjdGVkJiZyPT09ZyhlKSYmbj09PXcoZSl9KSkseWUoa2UodCksXCJsaUNsYXNzZXNcIiwoZnVuY3Rpb24oZSxyLG4pe3ZhciBvPVtcInJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdC1pdGVtXCIsdC5wcm9wcy50aW1lQ2xhc3NOYW1lP3QucHJvcHMudGltZUNsYXNzTmFtZShlLHIsbik6dm9pZCAwXTtyZXR1cm4gdC5pc1NlbGVjdGVkVGltZShlLHIsbikmJm8ucHVzaChcInJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdC1pdGVtLS1zZWxlY3RlZFwiKSwoKHQucHJvcHMubWluVGltZXx8dC5wcm9wcy5tYXhUaW1lKSYmbXQoZSx0LnByb3BzKXx8KHQucHJvcHMuZXhjbHVkZVRpbWVzfHx0LnByb3BzLmluY2x1ZGVUaW1lc3x8dC5wcm9wcy5maWx0ZXJUaW1lKSYmaHQoZSx0LnByb3BzKSkmJm8ucHVzaChcInJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdC1pdGVtLS1kaXNhYmxlZFwiKSx0LnByb3BzLmluamVjdFRpbWVzJiYoNjAqZyhlKSt3KGUpKSV0LnByb3BzLmludGVydmFscyE9MCYmby5wdXNoKFwicmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0LWl0ZW0tLWluamVjdGVkXCIpLG8uam9pbihcIiBcIil9KSkseWUoa2UodCksXCJoYW5kbGVPbktleURvd25cIiwoZnVuY3Rpb24oZSxyKXtcIiBcIj09PWUua2V5JiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUua2V5PVwiRW50ZXJcIiksXCJFbnRlclwiPT09ZS5rZXkmJnQuaGFuZGxlQ2xpY2sociksdC5wcm9wcy5oYW5kbGVPbktleURvd24oZSl9KSkseWUoa2UodCksXCJyZW5kZXJUaW1lc1wiLChmdW5jdGlvbigpe2Zvcih2YXIgcj1bXSxuPXQucHJvcHMuZm9ybWF0P3QucHJvcHMuZm9ybWF0OlwicFwiLG89dC5wcm9wcy5pbnRlcnZhbHMsYT1LZShZZSh0LnByb3BzLnNlbGVjdGVkKSksaT0xNDQwL28scD10LnByb3BzLmluamVjdFRpbWVzJiZ0LnByb3BzLmluamVjdFRpbWVzLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pKSxjPXQucHJvcHMuc2VsZWN0ZWR8fHQucHJvcHMub3BlblRvRGF0ZXx8WWUoKSxsPWcoYyksZD13KGMpLHU9eChOKGEsZCksbCksaD0wO2g8aTtoKyspe3ZhciBtPXMoYSxoKm8pO2lmKHIucHVzaChtKSxwKXt2YXIgZj1idChhLG0saCxvLHApO3I9ci5jb25jYXQoZil9fXJldHVybiByLm1hcCgoZnVuY3Rpb24ocixvKXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KFwibGlcIix7a2V5Om8sb25DbGljazp0LmhhbmRsZUNsaWNrLmJpbmQoa2UodCksciksY2xhc3NOYW1lOnQubGlDbGFzc2VzKHIsbCxkKSxyZWY6ZnVuY3Rpb24oZSl7KFoocix1KXx8JGUocix1KSkmJih0LmNlbnRlckxpPWUpfSxvbktleURvd246ZnVuY3Rpb24oZSl7dC5oYW5kbGVPbktleURvd24oZSxyKX0sdGFiSW5kZXg6XCIwXCIsXCJhcmlhLXNlbGVjdGVkXCI6dC5pc1NlbGVjdGVkVGltZShyLGwsZCk/XCJ0cnVlXCI6dm9pZCAwfSxJZShyLG4sdC5wcm9wcy5sb2NhbGUpKX0pKX0pKSx0fXJldHVybiBmZShuLFt7a2V5OlwiY29tcG9uZW50RGlkTW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMubGlzdC5zY3JvbGxUb3A9dGhpcy5jZW50ZXJMaSYmbi5jYWxjQ2VudGVyUG9zaXRpb24odGhpcy5wcm9wcy5tb250aFJlZj90aGlzLnByb3BzLm1vbnRoUmVmLmNsaWVudEhlaWdodC10aGlzLmhlYWRlci5jbGllbnRIZWlnaHQ6dGhpcy5saXN0LmNsaWVudEhlaWdodCx0aGlzLmNlbnRlckxpKSx0aGlzLnByb3BzLm1vbnRoUmVmJiZ0aGlzLmhlYWRlciYmdGhpcy5zZXRTdGF0ZSh7aGVpZ2h0OnRoaXMucHJvcHMubW9udGhSZWYuY2xpZW50SGVpZ2h0LXRoaXMuaGVhZGVyLmNsaWVudEhlaWdodH0pfX0se2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPXRoaXMuc3RhdGUuaGVpZ2h0O3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIgXCIuY29uY2F0KHRoaXMucHJvcHMudG9kYXlCdXR0b24/XCJyZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lci0td2l0aC10b2RheS1idXR0b25cIjpcIlwiKX0sZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlciByZWFjdC1kYXRlcGlja2VyX19oZWFkZXItLXRpbWUgXCIuY29uY2F0KHRoaXMucHJvcHMuc2hvd1RpbWVTZWxlY3RPbmx5P1wicmVhY3QtZGF0ZXBpY2tlcl9faGVhZGVyLS10aW1lLS1vbmx5XCI6XCJcIikscmVmOmZ1bmN0aW9uKGUpe3QuaGVhZGVyPWV9fSxlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlci10aW1lX19oZWFkZXJcIn0sdGhpcy5wcm9wcy50aW1lQ2FwdGlvbikpLGUuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX190aW1lXCJ9LGUuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX190aW1lLWJveFwifSxlLmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3RcIixyZWY6ZnVuY3Rpb24oZSl7dC5saXN0PWV9LHN0eWxlOnI/e2hlaWdodDpyfTp7fSx0YWJJbmRleDpcIjBcIn0sdGhpcy5yZW5kZXJUaW1lcygpKSkpKX19XSxbe2tleTpcImRlZmF1bHRQcm9wc1wiLGdldDpmdW5jdGlvbigpe3JldHVybntpbnRlcnZhbHM6MzAsb25UaW1lQ2hhbmdlOmZ1bmN0aW9uKCl7fSx0b2RheUJ1dHRvbjpudWxsLHRpbWVDYXB0aW9uOlwiVGltZVwifX19XSksbn0oKTt5ZShGdCxcImNhbGNDZW50ZXJQb3NpdGlvblwiLChmdW5jdGlvbihlLHQpe3JldHVybiB0Lm9mZnNldFRvcC0oZS8yLXQuY2xpZW50SGVpZ2h0LzIpfSkpO3ZhciBBdD1mdW5jdGlvbih0KXtEZShvLGUuQ29tcG9uZW50KTt2YXIgbj1TZShvKTtmdW5jdGlvbiBvKHQpe3ZhciBhO3JldHVybiBoZSh0aGlzLG8pLHllKGtlKGE9bi5jYWxsKHRoaXMsdCkpLFwiWUVBUl9SRUZTXCIsQ2UoQXJyYXkoYS5wcm9wcy55ZWFySXRlbU51bWJlcikpLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVSZWYoKX0pKSkseWUoa2UoYSksXCJpc0Rpc2FibGVkXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBvdChlLGEucHJvcHMpfSkpLHllKGtlKGEpLFwiaXNFeGNsdWRlZFwiLChmdW5jdGlvbihlKXtyZXR1cm4gYXQoZSxhLnByb3BzKX0pKSx5ZShrZShhKSxcInVwZGF0ZUZvY3VzT25QYWdpbmF0ZVwiLChmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe3RoaXMuWUVBUl9SRUZTW2VdLmN1cnJlbnQuZm9jdXMoKX0uYmluZChrZShhKSk7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0KX0pKSx5ZShrZShhKSxcImhhbmRsZVllYXJDbGlja1wiLChmdW5jdGlvbihlLHQpe2EucHJvcHMub25EYXlDbGljayYmYS5wcm9wcy5vbkRheUNsaWNrKGUsdCl9KSkseWUoa2UoYSksXCJoYW5kbGVZZWFyTmF2aWdhdGlvblwiLChmdW5jdGlvbihlLHQpe3ZhciByPWEucHJvcHMsbj1yLmRhdGUsbz1yLnllYXJJdGVtTnVtYmVyLHM9Q3QobixvKS5zdGFydFBlcmlvZDthLmlzRGlzYWJsZWQodCl8fGEuaXNFeGNsdWRlZCh0KXx8KGEucHJvcHMuc2V0UHJlU2VsZWN0aW9uKHQpLGUtcz09LTE/YS51cGRhdGVGb2N1c09uUGFnaW5hdGUoby0xKTplLXM9PT1vP2EudXBkYXRlRm9jdXNPblBhZ2luYXRlKDApOmEuWUVBUl9SRUZTW2Utc10uY3VycmVudC5mb2N1cygpKX0pKSx5ZShrZShhKSxcImlzU2FtZURheVwiLChmdW5jdGlvbihlLHQpe3JldHVybiB6ZShlLHQpfSkpLHllKGtlKGEpLFwiaXNDdXJyZW50WWVhclwiLChmdW5jdGlvbihlKXtyZXR1cm4gZT09PU0oWWUoKSl9KSkseWUoa2UoYSksXCJpc0tleWJvYXJkU2VsZWN0ZWRcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9SGUoVChhLnByb3BzLmRhdGUsZSkpO3JldHVybiFhLnByb3BzLmRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uJiYhYS5wcm9wcy5pbmxpbmUmJiF6ZSh0LEhlKGEucHJvcHMuc2VsZWN0ZWQpKSYmemUodCxIZShhLnByb3BzLnByZVNlbGVjdGlvbikpfSkpLHllKGtlKGEpLFwib25ZZWFyQ2xpY2tcIiwoZnVuY3Rpb24oZSx0KXt2YXIgcj1hLnByb3BzLmRhdGU7YS5oYW5kbGVZZWFyQ2xpY2soSGUoVChyLHQpKSxlKX0pKSx5ZShrZShhKSxcIm9uWWVhcktleURvd25cIiwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmtleTtpZighYS5wcm9wcy5kaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbilzd2l0Y2gocil7Y2FzZVwiRW50ZXJcIjphLm9uWWVhckNsaWNrKGUsdCksYS5wcm9wcy5zZXRQcmVTZWxlY3Rpb24oYS5wcm9wcy5zZWxlY3RlZCk7YnJlYWs7Y2FzZVwiQXJyb3dSaWdodFwiOmEuaGFuZGxlWWVhck5hdmlnYXRpb24odCsxLHUoYS5wcm9wcy5wcmVTZWxlY3Rpb24sMSkpO2JyZWFrO2Nhc2VcIkFycm93TGVmdFwiOmEuaGFuZGxlWWVhck5hdmlnYXRpb24odC0xLHYoYS5wcm9wcy5wcmVTZWxlY3Rpb24sMSkpfX0pKSx5ZShrZShhKSxcImdldFllYXJDbGFzc05hbWVzXCIsKGZ1bmN0aW9uKGUpe3ZhciB0PWEucHJvcHMsbj10Lm1pbkRhdGUsbz10Lm1heERhdGUscz10LnNlbGVjdGVkLGk9dC5leGNsdWRlRGF0ZXMscD10LmluY2x1ZGVEYXRlcyxjPXQuZmlsdGVyRGF0ZTtyZXR1cm4gcihcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItdGV4dFwiLHtcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItdGV4dC0tc2VsZWN0ZWRcIjplPT09TShzKSxcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItdGV4dC0tZGlzYWJsZWRcIjoobnx8b3x8aXx8cHx8YykmJmN0KGUsYS5wcm9wcyksXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHQtLWtleWJvYXJkLXNlbGVjdGVkXCI6YS5pc0tleWJvYXJkU2VsZWN0ZWQoZSksXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHQtLXRvZGF5XCI6YS5pc0N1cnJlbnRZZWFyKGUpfSl9KSkseWUoa2UoYSksXCJnZXRZZWFyVGFiSW5kZXhcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEucHJvcHMuZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb24/XCItMVwiOmU9PT1NKGEucHJvcHMucHJlU2VsZWN0aW9uKT9cIjBcIjpcIi0xXCJ9KSksYX1yZXR1cm4gZmUobyxbe2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMscj1bXSxuPXRoaXMucHJvcHMsbz1DdChuLmRhdGUsbi55ZWFySXRlbU51bWJlciksYT1vLnN0YXJ0UGVyaW9kLHM9by5lbmRQZXJpb2QsaT1mdW5jdGlvbihuKXtyLnB1c2goZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse3JlZjp0LllFQVJfUkVGU1tuLWFdLG9uQ2xpY2s6ZnVuY3Rpb24oZSl7dC5vblllYXJDbGljayhlLG4pfSxvbktleURvd246ZnVuY3Rpb24oZSl7dC5vblllYXJLZXlEb3duKGUsbil9LHRhYkluZGV4OnQuZ2V0WWVhclRhYkluZGV4KG4pLGNsYXNzTmFtZTp0LmdldFllYXJDbGFzc05hbWVzKG4pLGtleTpuLFwiYXJpYS1jdXJyZW50XCI6dC5pc0N1cnJlbnRZZWFyKG4pP1wiZGF0ZVwiOnZvaWQgMH0sbikpfSxwPWE7cDw9cztwKyspaShwKTtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX3llYXJcIn0sZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItd3JhcHBlclwifSxyKSl9fV0pLG99KCksS3Q9ZnVuY3Rpb24odCl7RGUobixlLkNvbXBvbmVudCk7dmFyIHI9U2Uobik7ZnVuY3Rpb24gbih0KXt2YXIgbztyZXR1cm4gaGUodGhpcyxuKSx5ZShrZShvPXIuY2FsbCh0aGlzLHQpKSxcIm9uVGltZUNoYW5nZVwiLChmdW5jdGlvbihlKXtvLnNldFN0YXRlKHt0aW1lOmV9KTt2YXIgdD1uZXcgRGF0ZTt0LnNldEhvdXJzKGUuc3BsaXQoXCI6XCIpWzBdKSx0LnNldE1pbnV0ZXMoZS5zcGxpdChcIjpcIilbMV0pLG8ucHJvcHMub25DaGFuZ2UodCl9KSkseWUoa2UobyksXCJyZW5kZXJUaW1lSW5wdXRcIiwoZnVuY3Rpb24oKXt2YXIgdD1vLnN0YXRlLnRpbWUscj1vLnByb3BzLG49ci5kYXRlLGE9ci50aW1lU3RyaW5nLHM9ci5jdXN0b21UaW1lSW5wdXQ7cmV0dXJuIHM/ZS5jbG9uZUVsZW1lbnQocyx7ZGF0ZTpuLHZhbHVlOnQsb25DaGFuZ2U6by5vblRpbWVDaGFuZ2V9KTplLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLHt0eXBlOlwidGltZVwiLGNsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXItdGltZV9faW5wdXRcIixwbGFjZWhvbGRlcjpcIlRpbWVcIixuYW1lOlwidGltZS1pbnB1dFwiLHJlcXVpcmVkOiEwLHZhbHVlOnQsb25DaGFuZ2U6ZnVuY3Rpb24oZSl7by5vblRpbWVDaGFuZ2UoZS50YXJnZXQudmFsdWV8fGEpfX0pfSkpLG8uc3RhdGU9e3RpbWU6by5wcm9wcy50aW1lU3RyaW5nfSxvfXJldHVybiBmZShuLFt7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LXRpbWUtY29udGFpbmVyXCJ9LGUuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyLXRpbWVfX2NhcHRpb25cIn0sdGhpcy5wcm9wcy50aW1lSW5wdXRMYWJlbCksZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXItdGltZV9faW5wdXQtY29udGFpbmVyXCJ9LGUuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyLXRpbWVfX2lucHV0XCJ9LHRoaXMucmVuZGVyVGltZUlucHV0KCkpKSl9fV0sW3trZXk6XCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRpbWVTdHJpbmchPT10LnRpbWU/e3RpbWU6ZS50aW1lU3RyaW5nfTpudWxsfX1dKSxufSgpO2Z1bmN0aW9uIEJ0KHQpe3ZhciByPXQuY2xhc3NOYW1lLG49dC5jaGlsZHJlbixvPXQuc2hvd1BvcHBlckFycm93LGE9dC5hcnJvd1Byb3BzLHM9dm9pZCAwPT09YT97fTphO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOnJ9LG8mJmUuY3JlYXRlRWxlbWVudChcImRpdlwiLHZlKHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZVwifSxzKSksbil9dmFyIFd0PVtcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItc2VsZWN0XCIsXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1zZWxlY3RcIixcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItc2VsZWN0XCJdLEh0PWZ1bmN0aW9uKHQpe0RlKG8sZS5Db21wb25lbnQpO3ZhciBuPVNlKG8pO2Z1bmN0aW9uIG8odCl7dmFyIGE7cmV0dXJuIGhlKHRoaXMsbykseWUoa2UoYT1uLmNhbGwodGhpcyx0KSksXCJoYW5kbGVDbGlja091dHNpZGVcIiwoZnVuY3Rpb24oZSl7YS5wcm9wcy5vbkNsaWNrT3V0c2lkZShlKX0pKSx5ZShrZShhKSxcInNldENsaWNrT3V0c2lkZVJlZlwiLChmdW5jdGlvbigpe3JldHVybiBhLmNvbnRhaW5lclJlZi5jdXJyZW50fSkpLHllKGtlKGEpLFwiaGFuZGxlRHJvcGRvd25Gb2N1c1wiLChmdW5jdGlvbihlKXsoZnVuY3Rpb24oKXt2YXIgZT0oKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSkuY2xhc3NOYW1lfHxcIlwiKS5zcGxpdCgvXFxzKy8pO3JldHVybiBXdC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gZS5pbmRleE9mKHQpPj0wfSkpfSkoZS50YXJnZXQpJiZhLnByb3BzLm9uRHJvcGRvd25Gb2N1cygpfSkpLHllKGtlKGEpLFwiZ2V0RGF0ZUluVmlld1wiLChmdW5jdGlvbigpe3ZhciBlPWEucHJvcHMsdD1lLnByZVNlbGVjdGlvbixyPWUuc2VsZWN0ZWQsbj1lLm9wZW5Ub0RhdGUsbz13dChhLnByb3BzKSxzPWd0KGEucHJvcHMpLGk9WWUoKSxwPW58fHJ8fHQ7cmV0dXJuIHB8fChvJiZaKGksbyk/bzpzJiZYKGkscyk/czppKX0pKSx5ZShrZShhKSxcImluY3JlYXNlTW9udGhcIiwoZnVuY3Rpb24oKXthLnNldFN0YXRlKChmdW5jdGlvbihlKXt2YXIgdD1lLmRhdGU7cmV0dXJue2RhdGU6bCh0LDEpfX0pLChmdW5jdGlvbigpe3JldHVybiBhLmhhbmRsZU1vbnRoQ2hhbmdlKGEuc3RhdGUuZGF0ZSl9KSl9KSkseWUoa2UoYSksXCJkZWNyZWFzZU1vbnRoXCIsKGZ1bmN0aW9uKCl7YS5zZXRTdGF0ZSgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRlO3JldHVybntkYXRlOmYodCwxKX19KSwoZnVuY3Rpb24oKXtyZXR1cm4gYS5oYW5kbGVNb250aENoYW5nZShhLnN0YXRlLmRhdGUpfSkpfSkpLHllKGtlKGEpLFwiaGFuZGxlRGF5Q2xpY2tcIiwoZnVuY3Rpb24oZSx0LHIpe2EucHJvcHMub25TZWxlY3QoZSx0LHIpLGEucHJvcHMuc2V0UHJlU2VsZWN0aW9uJiZhLnByb3BzLnNldFByZVNlbGVjdGlvbihlKX0pKSx5ZShrZShhKSxcImhhbmRsZURheU1vdXNlRW50ZXJcIiwoZnVuY3Rpb24oZSl7YS5zZXRTdGF0ZSh7c2VsZWN0aW5nRGF0ZTplfSksYS5wcm9wcy5vbkRheU1vdXNlRW50ZXImJmEucHJvcHMub25EYXlNb3VzZUVudGVyKGUpfSkpLHllKGtlKGEpLFwiaGFuZGxlTW9udGhNb3VzZUxlYXZlXCIsKGZ1bmN0aW9uKCl7YS5zZXRTdGF0ZSh7c2VsZWN0aW5nRGF0ZTpudWxsfSksYS5wcm9wcy5vbk1vbnRoTW91c2VMZWF2ZSYmYS5wcm9wcy5vbk1vbnRoTW91c2VMZWF2ZSgpfSkpLHllKGtlKGEpLFwiaGFuZGxlWWVhckNoYW5nZVwiLChmdW5jdGlvbihlKXthLnByb3BzLm9uWWVhckNoYW5nZSYmKGEucHJvcHMub25ZZWFyQ2hhbmdlKGUpLGEuc2V0U3RhdGUoe2lzUmVuZGVyQXJpYUxpdmVNZXNzYWdlOiEwfSkpLGEucHJvcHMuYWRqdXN0RGF0ZU9uQ2hhbmdlJiYoYS5wcm9wcy5vblNlbGVjdCYmYS5wcm9wcy5vblNlbGVjdChlKSxhLnByb3BzLnNldE9wZW4mJmEucHJvcHMuc2V0T3BlbighMCkpLGEucHJvcHMuc2V0UHJlU2VsZWN0aW9uJiZhLnByb3BzLnNldFByZVNlbGVjdGlvbihlKX0pKSx5ZShrZShhKSxcImhhbmRsZU1vbnRoQ2hhbmdlXCIsKGZ1bmN0aW9uKGUpe2EucHJvcHMub25Nb250aENoYW5nZSYmKGEucHJvcHMub25Nb250aENoYW5nZShlKSxhLnNldFN0YXRlKHtpc1JlbmRlckFyaWFMaXZlTWVzc2FnZTohMH0pKSxhLnByb3BzLmFkanVzdERhdGVPbkNoYW5nZSYmKGEucHJvcHMub25TZWxlY3QmJmEucHJvcHMub25TZWxlY3QoZSksYS5wcm9wcy5zZXRPcGVuJiZhLnByb3BzLnNldE9wZW4oITApKSxhLnByb3BzLnNldFByZVNlbGVjdGlvbiYmYS5wcm9wcy5zZXRQcmVTZWxlY3Rpb24oZSl9KSkseWUoa2UoYSksXCJoYW5kbGVNb250aFllYXJDaGFuZ2VcIiwoZnVuY3Rpb24oZSl7YS5oYW5kbGVZZWFyQ2hhbmdlKGUpLGEuaGFuZGxlTW9udGhDaGFuZ2UoZSl9KSkseWUoa2UoYSksXCJjaGFuZ2VZZWFyXCIsKGZ1bmN0aW9uKGUpe2Euc2V0U3RhdGUoKGZ1bmN0aW9uKHQpe3ZhciByPXQuZGF0ZTtyZXR1cm57ZGF0ZTpUKHIsZSl9fSksKGZ1bmN0aW9uKCl7cmV0dXJuIGEuaGFuZGxlWWVhckNoYW5nZShhLnN0YXRlLmRhdGUpfSkpfSkpLHllKGtlKGEpLFwiY2hhbmdlTW9udGhcIiwoZnVuY3Rpb24oZSl7YS5zZXRTdGF0ZSgoZnVuY3Rpb24odCl7dmFyIHI9dC5kYXRlO3JldHVybntkYXRlOlkocixlKX19KSwoZnVuY3Rpb24oKXtyZXR1cm4gYS5oYW5kbGVNb250aENoYW5nZShhLnN0YXRlLmRhdGUpfSkpfSkpLHllKGtlKGEpLFwiY2hhbmdlTW9udGhZZWFyXCIsKGZ1bmN0aW9uKGUpe2Euc2V0U3RhdGUoKGZ1bmN0aW9uKHQpe3ZhciByPXQuZGF0ZTtyZXR1cm57ZGF0ZTpUKFkocixDKGUpKSxNKGUpKX19KSwoZnVuY3Rpb24oKXtyZXR1cm4gYS5oYW5kbGVNb250aFllYXJDaGFuZ2UoYS5zdGF0ZS5kYXRlKX0pKX0pKSx5ZShrZShhKSxcImhlYWRlclwiLChmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTphLnN0YXRlLmRhdGUsbj1CZSh0LGEucHJvcHMubG9jYWxlLGEucHJvcHMuY2FsZW5kYXJTdGFydERheSksbz1bXTtyZXR1cm4gYS5wcm9wcy5zaG93V2Vla051bWJlcnMmJm8ucHVzaChlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7a2V5OlwiV1wiLGNsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX2RheS1uYW1lXCJ9LGEucHJvcHMud2Vla0xhYmVsfHxcIiNcIikpLG8uY29uY2F0KFswLDEsMiwzLDQsNSw2XS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBvPXAobix0KSxzPWEuZm9ybWF0V2Vla2RheShvLGEucHJvcHMubG9jYWxlKSxpPWEucHJvcHMud2Vla0RheUNsYXNzTmFtZT9hLnByb3BzLndlZWtEYXlDbGFzc05hbWUobyk6dm9pZCAwO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7a2V5OnQsY2xhc3NOYW1lOnIoXCJyZWFjdC1kYXRlcGlja2VyX19kYXktbmFtZVwiLGkpfSxzKX0pKSl9KSkseWUoa2UoYSksXCJmb3JtYXRXZWVrZGF5XCIsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEucHJvcHMuZm9ybWF0V2Vla0RheT9mdW5jdGlvbihlLHQscil7cmV0dXJuIHQoSWUoZSxcIkVFRUVcIixyKSl9KGUsYS5wcm9wcy5mb3JtYXRXZWVrRGF5LHQpOmEucHJvcHMudXNlV2Vla2RheXNTaG9ydD9mdW5jdGlvbihlLHQpe3JldHVybiBJZShlLFwiRUVFXCIsdCl9KGUsdCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSWUoZSxcIkVFRUVFRVwiLHQpfShlLHQpfSkpLHllKGtlKGEpLFwiZGVjcmVhc2VZZWFyXCIsKGZ1bmN0aW9uKCl7YS5zZXRTdGF0ZSgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRlO3JldHVybntkYXRlOnYodCxhLnByb3BzLnNob3dZZWFyUGlja2VyP2EucHJvcHMueWVhckl0ZW1OdW1iZXI6MSl9fSksKGZ1bmN0aW9uKCl7cmV0dXJuIGEuaGFuZGxlWWVhckNoYW5nZShhLnN0YXRlLmRhdGUpfSkpfSkpLHllKGtlKGEpLFwicmVuZGVyUHJldmlvdXNCdXR0b25cIiwoZnVuY3Rpb24oKXtpZighYS5wcm9wcy5yZW5kZXJDdXN0b21IZWFkZXIpe3ZhciB0O3N3aXRjaCghMCl7Y2FzZSBhLnByb3BzLnNob3dNb250aFllYXJQaWNrZXI6dD12dChhLnN0YXRlLmRhdGUsYS5wcm9wcyk7YnJlYWs7Y2FzZSBhLnByb3BzLnNob3dZZWFyUGlja2VyOnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHI9dC5taW5EYXRlLG49dC55ZWFySXRlbU51bWJlcixvPXZvaWQgMD09PW4/MTI6bixhPUN0KEhlKHYoZSxvKSksbykuZW5kUGVyaW9kLHM9ciYmTShyKTtyZXR1cm4gcyYmcz5hfHwhMX0oYS5zdGF0ZS5kYXRlLGEucHJvcHMpO2JyZWFrO2RlZmF1bHQ6dD1mdChhLnN0YXRlLmRhdGUsYS5wcm9wcyl9aWYoKGEucHJvcHMuZm9yY2VTaG93TW9udGhOYXZpZ2F0aW9ufHxhLnByb3BzLnNob3dEaXNhYmxlZE1vbnRoTmF2aWdhdGlvbnx8IXQpJiYhYS5wcm9wcy5zaG93VGltZVNlbGVjdE9ubHkpe3ZhciByPVtcInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb25cIixcInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzXCJdLG49YS5kZWNyZWFzZU1vbnRoOyhhLnByb3BzLnNob3dNb250aFllYXJQaWNrZXJ8fGEucHJvcHMuc2hvd1F1YXJ0ZXJZZWFyUGlja2VyfHxhLnByb3BzLnNob3dZZWFyUGlja2VyKSYmKG49YS5kZWNyZWFzZVllYXIpLHQmJmEucHJvcHMuc2hvd0Rpc2FibGVkTW9udGhOYXZpZ2F0aW9uJiYoci5wdXNoKFwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXMtLWRpc2FibGVkXCIpLG49bnVsbCk7dmFyIG89YS5wcm9wcy5zaG93TW9udGhZZWFyUGlja2VyfHxhLnByb3BzLnNob3dRdWFydGVyWWVhclBpY2tlcnx8YS5wcm9wcy5zaG93WWVhclBpY2tlcixzPWEucHJvcHMsaT1zLnByZXZpb3VzTW9udGhCdXR0b25MYWJlbCxwPXMucHJldmlvdXNZZWFyQnV0dG9uTGFiZWwsYz1hLnByb3BzLGw9Yy5wcmV2aW91c01vbnRoQXJpYUxhYmVsLGQ9dm9pZCAwPT09bD9cInN0cmluZ1wiPT10eXBlb2YgaT9pOlwiUHJldmlvdXMgTW9udGhcIjpsLHU9Yy5wcmV2aW91c1llYXJBcmlhTGFiZWwsaD12b2lkIDA9PT11P1wic3RyaW5nXCI9PXR5cGVvZiBwP3A6XCJQcmV2aW91cyBZZWFyXCI6dTtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse3R5cGU6XCJidXR0b25cIixjbGFzc05hbWU6ci5qb2luKFwiIFwiKSxvbkNsaWNrOm4sb25LZXlEb3duOmEucHJvcHMuaGFuZGxlT25LZXlEb3duLFwiYXJpYS1sYWJlbFwiOm8/aDpkfSxlLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpbXCJyZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLWljb25cIixcInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24taWNvbi0tcHJldmlvdXNcIl0uam9pbihcIiBcIil9LG8/YS5wcm9wcy5wcmV2aW91c1llYXJCdXR0b25MYWJlbDphLnByb3BzLnByZXZpb3VzTW9udGhCdXR0b25MYWJlbCkpfX19KSkseWUoa2UoYSksXCJpbmNyZWFzZVllYXJcIiwoZnVuY3Rpb24oKXthLnNldFN0YXRlKChmdW5jdGlvbihlKXt2YXIgdD1lLmRhdGU7cmV0dXJue2RhdGU6dSh0LGEucHJvcHMuc2hvd1llYXJQaWNrZXI/YS5wcm9wcy55ZWFySXRlbU51bWJlcjoxKX19KSwoZnVuY3Rpb24oKXtyZXR1cm4gYS5oYW5kbGVZZWFyQ2hhbmdlKGEuc3RhdGUuZGF0ZSl9KSl9KSkseWUoa2UoYSksXCJyZW5kZXJOZXh0QnV0dG9uXCIsKGZ1bmN0aW9uKCl7aWYoIWEucHJvcHMucmVuZGVyQ3VzdG9tSGVhZGVyKXt2YXIgdDtzd2l0Y2goITApe2Nhc2UgYS5wcm9wcy5zaG93TW9udGhZZWFyUGlja2VyOnQ9RHQoYS5zdGF0ZS5kYXRlLGEucHJvcHMpO2JyZWFrO2Nhc2UgYS5wcm9wcy5zaG93WWVhclBpY2tlcjp0PWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxyPXQubWF4RGF0ZSxuPXQueWVhckl0ZW1OdW1iZXIsbz12b2lkIDA9PT1uPzEyOm4sYT1DdCh1KGUsbyksbykuc3RhcnRQZXJpb2Qscz1yJiZNKHIpO3JldHVybiBzJiZzPGF8fCExfShhLnN0YXRlLmRhdGUsYS5wcm9wcyk7YnJlYWs7ZGVmYXVsdDp0PXl0KGEuc3RhdGUuZGF0ZSxhLnByb3BzKX1pZigoYS5wcm9wcy5mb3JjZVNob3dNb250aE5hdmlnYXRpb258fGEucHJvcHMuc2hvd0Rpc2FibGVkTW9udGhOYXZpZ2F0aW9ufHwhdCkmJiFhLnByb3BzLnNob3dUaW1lU2VsZWN0T25seSl7dmFyIHI9W1wicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvblwiLFwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dFwiXTthLnByb3BzLnNob3dUaW1lU2VsZWN0JiZyLnB1c2goXCJyZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0LS13aXRoLXRpbWVcIiksYS5wcm9wcy50b2RheUJ1dHRvbiYmci5wdXNoKFwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dC0td2l0aC10b2RheS1idXR0b25cIik7dmFyIG49YS5pbmNyZWFzZU1vbnRoOyhhLnByb3BzLnNob3dNb250aFllYXJQaWNrZXJ8fGEucHJvcHMuc2hvd1F1YXJ0ZXJZZWFyUGlja2VyfHxhLnByb3BzLnNob3dZZWFyUGlja2VyKSYmKG49YS5pbmNyZWFzZVllYXIpLHQmJmEucHJvcHMuc2hvd0Rpc2FibGVkTW9udGhOYXZpZ2F0aW9uJiYoci5wdXNoKFwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dC0tZGlzYWJsZWRcIiksbj1udWxsKTt2YXIgbz1hLnByb3BzLnNob3dNb250aFllYXJQaWNrZXJ8fGEucHJvcHMuc2hvd1F1YXJ0ZXJZZWFyUGlja2VyfHxhLnByb3BzLnNob3dZZWFyUGlja2VyLHM9YS5wcm9wcyxpPXMubmV4dE1vbnRoQnV0dG9uTGFiZWwscD1zLm5leHRZZWFyQnV0dG9uTGFiZWwsYz1hLnByb3BzLGw9Yy5uZXh0TW9udGhBcmlhTGFiZWwsZD12b2lkIDA9PT1sP1wic3RyaW5nXCI9PXR5cGVvZiBpP2k6XCJOZXh0IE1vbnRoXCI6bCxoPWMubmV4dFllYXJBcmlhTGFiZWwsbT12b2lkIDA9PT1oP1wic3RyaW5nXCI9PXR5cGVvZiBwP3A6XCJOZXh0IFllYXJcIjpoO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7dHlwZTpcImJ1dHRvblwiLGNsYXNzTmFtZTpyLmpvaW4oXCIgXCIpLG9uQ2xpY2s6bixvbktleURvd246YS5wcm9wcy5oYW5kbGVPbktleURvd24sXCJhcmlhLWxhYmVsXCI6bz9tOmR9LGUuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOltcInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24taWNvblwiLFwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi1pY29uLS1uZXh0XCJdLmpvaW4oXCIgXCIpfSxvP2EucHJvcHMubmV4dFllYXJCdXR0b25MYWJlbDphLnByb3BzLm5leHRNb250aEJ1dHRvbkxhYmVsKSl9fX0pKSx5ZShrZShhKSxcInJlbmRlckN1cnJlbnRNb250aFwiLChmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTphLnN0YXRlLmRhdGUscj1bXCJyZWFjdC1kYXRlcGlja2VyX19jdXJyZW50LW1vbnRoXCJdO3JldHVybiBhLnByb3BzLnNob3dZZWFyRHJvcGRvd24mJnIucHVzaChcInJlYWN0LWRhdGVwaWNrZXJfX2N1cnJlbnQtbW9udGgtLWhhc1llYXJEcm9wZG93blwiKSxhLnByb3BzLnNob3dNb250aERyb3Bkb3duJiZyLnB1c2goXCJyZWFjdC1kYXRlcGlja2VyX19jdXJyZW50LW1vbnRoLS1oYXNNb250aERyb3Bkb3duXCIpLGEucHJvcHMuc2hvd01vbnRoWWVhckRyb3Bkb3duJiZyLnB1c2goXCJyZWFjdC1kYXRlcGlja2VyX19jdXJyZW50LW1vbnRoLS1oYXNNb250aFllYXJEcm9wZG93blwiKSxlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOnIuam9pbihcIiBcIil9LEllKHQsYS5wcm9wcy5kYXRlRm9ybWF0LGEucHJvcHMubG9jYWxlKSl9KSkseWUoa2UoYSksXCJyZW5kZXJZZWFyRHJvcGRvd25cIiwoZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKGEucHJvcHMuc2hvd1llYXJEcm9wZG93biYmIXQpcmV0dXJuIGUuY3JlYXRlRWxlbWVudChQdCx7YWRqdXN0RGF0ZU9uQ2hhbmdlOmEucHJvcHMuYWRqdXN0RGF0ZU9uQ2hhbmdlLGRhdGU6YS5zdGF0ZS5kYXRlLG9uU2VsZWN0OmEucHJvcHMub25TZWxlY3Qsc2V0T3BlbjphLnByb3BzLnNldE9wZW4sZHJvcGRvd25Nb2RlOmEucHJvcHMuZHJvcGRvd25Nb2RlLG9uQ2hhbmdlOmEuY2hhbmdlWWVhcixtaW5EYXRlOmEucHJvcHMubWluRGF0ZSxtYXhEYXRlOmEucHJvcHMubWF4RGF0ZSx5ZWFyOk0oYS5zdGF0ZS5kYXRlKSxzY3JvbGxhYmxlWWVhckRyb3Bkb3duOmEucHJvcHMuc2Nyb2xsYWJsZVllYXJEcm9wZG93bix5ZWFyRHJvcGRvd25JdGVtTnVtYmVyOmEucHJvcHMueWVhckRyb3Bkb3duSXRlbU51bWJlcn0pfSkpLHllKGtlKGEpLFwicmVuZGVyTW9udGhEcm9wZG93blwiLChmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoYS5wcm9wcy5zaG93TW9udGhEcm9wZG93biYmIXQpcmV0dXJuIGUuY3JlYXRlRWxlbWVudChOdCx7ZHJvcGRvd25Nb2RlOmEucHJvcHMuZHJvcGRvd25Nb2RlLGxvY2FsZTphLnByb3BzLmxvY2FsZSxvbkNoYW5nZTphLmNoYW5nZU1vbnRoLG1vbnRoOkMoYS5zdGF0ZS5kYXRlKSx1c2VTaG9ydE1vbnRoSW5Ecm9wZG93bjphLnByb3BzLnVzZVNob3J0TW9udGhJbkRyb3Bkb3dufSl9KSkseWUoa2UoYSksXCJyZW5kZXJNb250aFllYXJEcm9wZG93blwiLChmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoYS5wcm9wcy5zaG93TW9udGhZZWFyRHJvcGRvd24mJiF0KXJldHVybiBlLmNyZWF0ZUVsZW1lbnQoT3Qse2Ryb3Bkb3duTW9kZTphLnByb3BzLmRyb3Bkb3duTW9kZSxsb2NhbGU6YS5wcm9wcy5sb2NhbGUsZGF0ZUZvcm1hdDphLnByb3BzLmRhdGVGb3JtYXQsb25DaGFuZ2U6YS5jaGFuZ2VNb250aFllYXIsbWluRGF0ZTphLnByb3BzLm1pbkRhdGUsbWF4RGF0ZTphLnByb3BzLm1heERhdGUsZGF0ZTphLnN0YXRlLmRhdGUsc2Nyb2xsYWJsZU1vbnRoWWVhckRyb3Bkb3duOmEucHJvcHMuc2Nyb2xsYWJsZU1vbnRoWWVhckRyb3Bkb3dufSl9KSkseWUoa2UoYSksXCJoYW5kbGVUb2RheUJ1dHRvbkNsaWNrXCIsKGZ1bmN0aW9uKGUpe2EucHJvcHMub25TZWxlY3QoUWUoKSxlKSxhLnByb3BzLnNldFByZVNlbGVjdGlvbiYmYS5wcm9wcy5zZXRQcmVTZWxlY3Rpb24oUWUoKSl9KSkseWUoa2UoYSksXCJyZW5kZXJUb2RheUJ1dHRvblwiLChmdW5jdGlvbigpe2lmKGEucHJvcHMudG9kYXlCdXR0b24mJiFhLnByb3BzLnNob3dUaW1lU2VsZWN0T25seSlyZXR1cm4gZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX3RvZGF5LWJ1dHRvblwiLG9uQ2xpY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGEuaGFuZGxlVG9kYXlCdXR0b25DbGljayhlKX19LGEucHJvcHMudG9kYXlCdXR0b24pfSkpLHllKGtlKGEpLFwicmVuZGVyRGVmYXVsdEhlYWRlclwiLChmdW5jdGlvbih0KXt2YXIgcj10Lm1vbnRoRGF0ZSxuPXQuaTtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlciBcIi5jb25jYXQoYS5wcm9wcy5zaG93VGltZVNlbGVjdD9cInJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlci0taGFzLXRpbWUtc2VsZWN0XCI6XCJcIil9LGEucmVuZGVyQ3VycmVudE1vbnRoKHIpLGUuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19oZWFkZXJfX2Ryb3Bkb3duIHJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlcl9fZHJvcGRvd24tLVwiLmNvbmNhdChhLnByb3BzLmRyb3Bkb3duTW9kZSksb25Gb2N1czphLmhhbmRsZURyb3Bkb3duRm9jdXN9LGEucmVuZGVyTW9udGhEcm9wZG93bigwIT09biksYS5yZW5kZXJNb250aFllYXJEcm9wZG93bigwIT09biksYS5yZW5kZXJZZWFyRHJvcGRvd24oMCE9PW4pKSxlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LW5hbWVzXCJ9LGEuaGVhZGVyKHIpKSl9KSkseWUoa2UoYSksXCJyZW5kZXJDdXN0b21IZWFkZXJcIiwoZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30scj10Lm1vbnRoRGF0ZSxuPXQuaTtpZihhLnByb3BzLnNob3dUaW1lU2VsZWN0JiYhYS5zdGF0ZS5tb250aENvbnRhaW5lcnx8YS5wcm9wcy5zaG93VGltZVNlbGVjdE9ubHkpcmV0dXJuIG51bGw7dmFyIG89ZnQoYS5zdGF0ZS5kYXRlLGEucHJvcHMpLHM9eXQoYS5zdGF0ZS5kYXRlLGEucHJvcHMpLGk9dnQoYS5zdGF0ZS5kYXRlLGEucHJvcHMpLHA9RHQoYS5zdGF0ZS5kYXRlLGEucHJvcHMpLGM9IWEucHJvcHMuc2hvd01vbnRoWWVhclBpY2tlciYmIWEucHJvcHMuc2hvd1F1YXJ0ZXJZZWFyUGlja2VyJiYhYS5wcm9wcy5zaG93WWVhclBpY2tlcjtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlciByZWFjdC1kYXRlcGlja2VyX19oZWFkZXItLWN1c3RvbVwiLG9uRm9jdXM6YS5wcm9wcy5vbkRyb3Bkb3duRm9jdXN9LGEucHJvcHMucmVuZGVyQ3VzdG9tSGVhZGVyKGRlKGRlKHt9LGEuc3RhdGUpLHt9LHtjdXN0b21IZWFkZXJDb3VudDpuLG1vbnRoRGF0ZTpyLGNoYW5nZU1vbnRoOmEuY2hhbmdlTW9udGgsY2hhbmdlWWVhcjphLmNoYW5nZVllYXIsZGVjcmVhc2VNb250aDphLmRlY3JlYXNlTW9udGgsaW5jcmVhc2VNb250aDphLmluY3JlYXNlTW9udGgsZGVjcmVhc2VZZWFyOmEuZGVjcmVhc2VZZWFyLGluY3JlYXNlWWVhcjphLmluY3JlYXNlWWVhcixwcmV2TW9udGhCdXR0b25EaXNhYmxlZDpvLG5leHRNb250aEJ1dHRvbkRpc2FibGVkOnMscHJldlllYXJCdXR0b25EaXNhYmxlZDppLG5leHRZZWFyQnV0dG9uRGlzYWJsZWQ6cH0pKSxjJiZlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LW5hbWVzXCJ9LGEuaGVhZGVyKHIpKSl9KSkseWUoa2UoYSksXCJyZW5kZXJZZWFySGVhZGVyXCIsKGZ1bmN0aW9uKCl7dmFyIHQ9YS5zdGF0ZS5kYXRlLHI9YS5wcm9wcyxuPXIuc2hvd1llYXJQaWNrZXIsbz1DdCh0LHIueWVhckl0ZW1OdW1iZXIpLHM9by5zdGFydFBlcmlvZCxpPW8uZW5kUGVyaW9kO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9faGVhZGVyIHJlYWN0LWRhdGVwaWNrZXIteWVhci1oZWFkZXJcIn0sbj9cIlwiLmNvbmNhdChzLFwiIC0gXCIpLmNvbmNhdChpKTpNKHQpKX0pKSx5ZShrZShhKSxcInJlbmRlckhlYWRlclwiLChmdW5jdGlvbihlKXtzd2l0Y2goITApe2Nhc2Ugdm9pZCAwIT09YS5wcm9wcy5yZW5kZXJDdXN0b21IZWFkZXI6cmV0dXJuIGEucmVuZGVyQ3VzdG9tSGVhZGVyKGUpO2Nhc2UgYS5wcm9wcy5zaG93TW9udGhZZWFyUGlja2VyfHxhLnByb3BzLnNob3dRdWFydGVyWWVhclBpY2tlcnx8YS5wcm9wcy5zaG93WWVhclBpY2tlcjpyZXR1cm4gYS5yZW5kZXJZZWFySGVhZGVyKGUpO2RlZmF1bHQ6cmV0dXJuIGEucmVuZGVyRGVmYXVsdEhlYWRlcihlKX19KSkseWUoa2UoYSksXCJyZW5kZXJNb250aHNcIiwoZnVuY3Rpb24oKXtpZighYS5wcm9wcy5zaG93VGltZVNlbGVjdE9ubHkmJiFhLnByb3BzLnNob3dZZWFyUGlja2VyKXtmb3IodmFyIHQ9W10scj1hLnByb3BzLnNob3dQcmV2aW91c01vbnRocz9hLnByb3BzLm1vbnRoc1Nob3duLTE6MCxuPWYoYS5zdGF0ZS5kYXRlLHIpLG89MDtvPGEucHJvcHMubW9udGhzU2hvd247KytvKXt2YXIgcz1vLWEucHJvcHMubW9udGhTZWxlY3RlZEluLGk9bChuLHMpLHA9XCJtb250aC1cIi5jb25jYXQobyksYz1vPGEucHJvcHMubW9udGhzU2hvd24tMSxkPW8+MDt0LnB1c2goZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2tleTpwLHJlZjpmdW5jdGlvbihlKXthLm1vbnRoQ29udGFpbmVyPWV9LGNsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWNvbnRhaW5lclwifSxhLnJlbmRlckhlYWRlcih7bW9udGhEYXRlOmksaTpvfSksZS5jcmVhdGVFbGVtZW50KFJ0LHtjaG9vc2VEYXlBcmlhTGFiZWxQcmVmaXg6YS5wcm9wcy5jaG9vc2VEYXlBcmlhTGFiZWxQcmVmaXgsZGlzYWJsZWREYXlBcmlhTGFiZWxQcmVmaXg6YS5wcm9wcy5kaXNhYmxlZERheUFyaWFMYWJlbFByZWZpeCx3ZWVrQXJpYUxhYmVsUHJlZml4OmEucHJvcHMud2Vla0FyaWFMYWJlbFByZWZpeCxhcmlhTGFiZWxQcmVmaXg6YS5wcm9wcy5tb250aEFyaWFMYWJlbFByZWZpeCxvbkNoYW5nZTphLmNoYW5nZU1vbnRoWWVhcixkYXk6aSxkYXlDbGFzc05hbWU6YS5wcm9wcy5kYXlDbGFzc05hbWUsY2FsZW5kYXJTdGFydERheTphLnByb3BzLmNhbGVuZGFyU3RhcnREYXksbW9udGhDbGFzc05hbWU6YS5wcm9wcy5tb250aENsYXNzTmFtZSxvbkRheUNsaWNrOmEuaGFuZGxlRGF5Q2xpY2ssaGFuZGxlT25LZXlEb3duOmEucHJvcHMuaGFuZGxlT25EYXlLZXlEb3duLG9uRGF5TW91c2VFbnRlcjphLmhhbmRsZURheU1vdXNlRW50ZXIsb25Nb3VzZUxlYXZlOmEuaGFuZGxlTW9udGhNb3VzZUxlYXZlLG9uV2Vla1NlbGVjdDphLnByb3BzLm9uV2Vla1NlbGVjdCxvcmRlckluRGlzcGxheTpvLGZvcm1hdFdlZWtOdW1iZXI6YS5wcm9wcy5mb3JtYXRXZWVrTnVtYmVyLGxvY2FsZTphLnByb3BzLmxvY2FsZSxtaW5EYXRlOmEucHJvcHMubWluRGF0ZSxtYXhEYXRlOmEucHJvcHMubWF4RGF0ZSxleGNsdWRlRGF0ZXM6YS5wcm9wcy5leGNsdWRlRGF0ZXMsZXhjbHVkZURhdGVJbnRlcnZhbHM6YS5wcm9wcy5leGNsdWRlRGF0ZUludGVydmFscyxoaWdobGlnaHREYXRlczphLnByb3BzLmhpZ2hsaWdodERhdGVzLHNlbGVjdGluZ0RhdGU6YS5zdGF0ZS5zZWxlY3RpbmdEYXRlLGluY2x1ZGVEYXRlczphLnByb3BzLmluY2x1ZGVEYXRlcyxpbmNsdWRlRGF0ZUludGVydmFsczphLnByb3BzLmluY2x1ZGVEYXRlSW50ZXJ2YWxzLGlubGluZTphLnByb3BzLmlubGluZSxzaG91bGRGb2N1c0RheUlubGluZTphLnByb3BzLnNob3VsZEZvY3VzRGF5SW5saW5lLGZpeGVkSGVpZ2h0OmEucHJvcHMuZml4ZWRIZWlnaHQsZmlsdGVyRGF0ZTphLnByb3BzLmZpbHRlckRhdGUscHJlU2VsZWN0aW9uOmEucHJvcHMucHJlU2VsZWN0aW9uLHNldFByZVNlbGVjdGlvbjphLnByb3BzLnNldFByZVNlbGVjdGlvbixzZWxlY3RlZDphLnByb3BzLnNlbGVjdGVkLHNlbGVjdHNTdGFydDphLnByb3BzLnNlbGVjdHNTdGFydCxzZWxlY3RzRW5kOmEucHJvcHMuc2VsZWN0c0VuZCxzZWxlY3RzUmFuZ2U6YS5wcm9wcy5zZWxlY3RzUmFuZ2Usc2VsZWN0c0Rpc2FibGVkRGF5c0luUmFuZ2U6YS5wcm9wcy5zZWxlY3RzRGlzYWJsZWREYXlzSW5SYW5nZSxzaG93V2Vla051bWJlcnM6YS5wcm9wcy5zaG93V2Vla051bWJlcnMsc3RhcnREYXRlOmEucHJvcHMuc3RhcnREYXRlLGVuZERhdGU6YS5wcm9wcy5lbmREYXRlLHBlZWtOZXh0TW9udGg6YS5wcm9wcy5wZWVrTmV4dE1vbnRoLHNldE9wZW46YS5wcm9wcy5zZXRPcGVuLHNob3VsZENsb3NlT25TZWxlY3Q6YS5wcm9wcy5zaG91bGRDbG9zZU9uU2VsZWN0LHJlbmRlckRheUNvbnRlbnRzOmEucHJvcHMucmVuZGVyRGF5Q29udGVudHMsZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb246YS5wcm9wcy5kaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbixzaG93TW9udGhZZWFyUGlja2VyOmEucHJvcHMuc2hvd01vbnRoWWVhclBpY2tlcixzaG93RnVsbE1vbnRoWWVhclBpY2tlcjphLnByb3BzLnNob3dGdWxsTW9udGhZZWFyUGlja2VyLHNob3dUd29Db2x1bW5Nb250aFllYXJQaWNrZXI6YS5wcm9wcy5zaG93VHdvQ29sdW1uTW9udGhZZWFyUGlja2VyLHNob3dGb3VyQ29sdW1uTW9udGhZZWFyUGlja2VyOmEucHJvcHMuc2hvd0ZvdXJDb2x1bW5Nb250aFllYXJQaWNrZXIsc2hvd1llYXJQaWNrZXI6YS5wcm9wcy5zaG93WWVhclBpY2tlcixzaG93UXVhcnRlclllYXJQaWNrZXI6YS5wcm9wcy5zaG93UXVhcnRlclllYXJQaWNrZXIsaXNJbnB1dEZvY3VzZWQ6YS5wcm9wcy5pc0lucHV0Rm9jdXNlZCxjb250YWluZXJSZWY6YS5jb250YWluZXJSZWYsbW9udGhTaG93c0R1cGxpY2F0ZURheXNFbmQ6Yyxtb250aFNob3dzRHVwbGljYXRlRGF5c1N0YXJ0OmR9KSkpfXJldHVybiB0fX0pKSx5ZShrZShhKSxcInJlbmRlclllYXJzXCIsKGZ1bmN0aW9uKCl7aWYoIWEucHJvcHMuc2hvd1RpbWVTZWxlY3RPbmx5KXJldHVybiBhLnByb3BzLnNob3dZZWFyUGlja2VyP2UuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLS1jb250YWluZXJcIn0sYS5yZW5kZXJIZWFkZXIoKSxlLmNyZWF0ZUVsZW1lbnQoQXQsdmUoe29uRGF5Q2xpY2s6YS5oYW5kbGVEYXlDbGljayxkYXRlOmEuc3RhdGUuZGF0ZX0sYS5wcm9wcykpKTp2b2lkIDB9KSkseWUoa2UoYSksXCJyZW5kZXJUaW1lU2VjdGlvblwiLChmdW5jdGlvbigpe2lmKGEucHJvcHMuc2hvd1RpbWVTZWxlY3QmJihhLnN0YXRlLm1vbnRoQ29udGFpbmVyfHxhLnByb3BzLnNob3dUaW1lU2VsZWN0T25seSkpcmV0dXJuIGUuY3JlYXRlRWxlbWVudChGdCx7c2VsZWN0ZWQ6YS5wcm9wcy5zZWxlY3RlZCxvcGVuVG9EYXRlOmEucHJvcHMub3BlblRvRGF0ZSxvbkNoYW5nZTphLnByb3BzLm9uVGltZUNoYW5nZSx0aW1lQ2xhc3NOYW1lOmEucHJvcHMudGltZUNsYXNzTmFtZSxmb3JtYXQ6YS5wcm9wcy50aW1lRm9ybWF0LGluY2x1ZGVUaW1lczphLnByb3BzLmluY2x1ZGVUaW1lcyxpbnRlcnZhbHM6YS5wcm9wcy50aW1lSW50ZXJ2YWxzLG1pblRpbWU6YS5wcm9wcy5taW5UaW1lLG1heFRpbWU6YS5wcm9wcy5tYXhUaW1lLGV4Y2x1ZGVUaW1lczphLnByb3BzLmV4Y2x1ZGVUaW1lcyxmaWx0ZXJUaW1lOmEucHJvcHMuZmlsdGVyVGltZSx0aW1lQ2FwdGlvbjphLnByb3BzLnRpbWVDYXB0aW9uLHRvZGF5QnV0dG9uOmEucHJvcHMudG9kYXlCdXR0b24sc2hvd01vbnRoRHJvcGRvd246YS5wcm9wcy5zaG93TW9udGhEcm9wZG93bixzaG93TW9udGhZZWFyRHJvcGRvd246YS5wcm9wcy5zaG93TW9udGhZZWFyRHJvcGRvd24sc2hvd1llYXJEcm9wZG93bjphLnByb3BzLnNob3dZZWFyRHJvcGRvd24sd2l0aFBvcnRhbDphLnByb3BzLndpdGhQb3J0YWwsbW9udGhSZWY6YS5zdGF0ZS5tb250aENvbnRhaW5lcixpbmplY3RUaW1lczphLnByb3BzLmluamVjdFRpbWVzLGxvY2FsZTphLnByb3BzLmxvY2FsZSxoYW5kbGVPbktleURvd246YS5wcm9wcy5oYW5kbGVPbktleURvd24sc2hvd1RpbWVTZWxlY3RPbmx5OmEucHJvcHMuc2hvd1RpbWVTZWxlY3RPbmx5fSl9KSkseWUoa2UoYSksXCJyZW5kZXJJbnB1dFRpbWVTZWN0aW9uXCIsKGZ1bmN0aW9uKCl7dmFyIHQ9bmV3IERhdGUoYS5wcm9wcy5zZWxlY3RlZCkscj1UZSh0KSYmQm9vbGVhbihhLnByb3BzLnNlbGVjdGVkKT9cIlwiLmNvbmNhdChTdCh0LmdldEhvdXJzKCkpLFwiOlwiKS5jb25jYXQoU3QodC5nZXRNaW51dGVzKCkpKTpcIlwiO2lmKGEucHJvcHMuc2hvd1RpbWVJbnB1dClyZXR1cm4gZS5jcmVhdGVFbGVtZW50KEt0LHtkYXRlOnQsdGltZVN0cmluZzpyLHRpbWVJbnB1dExhYmVsOmEucHJvcHMudGltZUlucHV0TGFiZWwsb25DaGFuZ2U6YS5wcm9wcy5vblRpbWVDaGFuZ2UsY3VzdG9tVGltZUlucHV0OmEucHJvcHMuY3VzdG9tVGltZUlucHV0fSl9KSkseWUoa2UoYSksXCJyZW5kZXJBcmlhTGl2ZVJlZ2lvblwiLChmdW5jdGlvbigpe3ZhciB0LHI9Q3QoYS5zdGF0ZS5kYXRlLGEucHJvcHMueWVhckl0ZW1OdW1iZXIpLG49ci5zdGFydFBlcmlvZCxvPXIuZW5kUGVyaW9kO3JldHVybiB0PWEucHJvcHMuc2hvd1llYXJQaWNrZXI/XCJcIi5jb25jYXQobixcIiAtIFwiKS5jb25jYXQobyk6YS5wcm9wcy5zaG93TW9udGhZZWFyUGlja2VyfHxhLnByb3BzLnNob3dRdWFydGVyWWVhclBpY2tlcj9NKGEuc3RhdGUuZGF0ZSk6XCJcIi5jb25jYXQodHQoQyhhLnN0YXRlLmRhdGUpLGEucHJvcHMubG9jYWxlKSxcIiBcIikuY29uY2F0KE0oYS5zdGF0ZS5kYXRlKSksZS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtyb2xlOlwiYWxlcnRcIixcImFyaWEtbGl2ZVwiOlwicG9saXRlXCIsY2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fYXJpYS1saXZlXCJ9LGEuc3RhdGUuaXNSZW5kZXJBcmlhTGl2ZU1lc3NhZ2UmJnQpfSkpLHllKGtlKGEpLFwicmVuZGVyQ2hpbGRyZW5cIiwoZnVuY3Rpb24oKXtpZihhLnByb3BzLmNoaWxkcmVuKXJldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fY2hpbGRyZW4tY29udGFpbmVyXCJ9LGEucHJvcHMuY2hpbGRyZW4pfSkpLGEuY29udGFpbmVyUmVmPWUuY3JlYXRlUmVmKCksYS5zdGF0ZT17ZGF0ZTphLmdldERhdGVJblZpZXcoKSxzZWxlY3RpbmdEYXRlOm51bGwsbW9udGhDb250YWluZXI6bnVsbCxpc1JlbmRlckFyaWFMaXZlTWVzc2FnZTohMX0sYX1yZXR1cm4gZmUobyxbe2tleTpcImNvbXBvbmVudERpZE1vdW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMucHJvcHMuc2hvd1RpbWVTZWxlY3QmJih0aGlzLmFzc2lnbk1vbnRoQ29udGFpbmVyPXZvaWQgZS5zZXRTdGF0ZSh7bW9udGhDb250YWluZXI6ZS5tb250aENvbnRhaW5lcn0pKX19LHtrZXk6XCJjb21wb25lbnREaWRVcGRhdGVcIix2YWx1ZTpmdW5jdGlvbihlKXshdGhpcy5wcm9wcy5wcmVTZWxlY3Rpb258fHplKHRoaXMucHJvcHMucHJlU2VsZWN0aW9uLGUucHJlU2VsZWN0aW9uKSYmdGhpcy5wcm9wcy5tb250aFNlbGVjdGVkSW49PT1lLm1vbnRoU2VsZWN0ZWRJbj90aGlzLnByb3BzLm9wZW5Ub0RhdGUmJiF6ZSh0aGlzLnByb3BzLm9wZW5Ub0RhdGUsZS5vcGVuVG9EYXRlKSYmdGhpcy5zZXRTdGF0ZSh7ZGF0ZTp0aGlzLnByb3BzLm9wZW5Ub0RhdGV9KTp0aGlzLnNldFN0YXRlKHtkYXRlOnRoaXMucHJvcHMucHJlU2VsZWN0aW9ufSl9fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnByb3BzLmNvbnRhaW5lcnx8QnQ7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChcImRpdlwiLHtyZWY6dGhpcy5jb250YWluZXJSZWZ9LGUuY3JlYXRlRWxlbWVudCh0LHtjbGFzc05hbWU6cihcInJlYWN0LWRhdGVwaWNrZXJcIix0aGlzLnByb3BzLmNsYXNzTmFtZSx7XCJyZWFjdC1kYXRlcGlja2VyLS10aW1lLW9ubHlcIjp0aGlzLnByb3BzLnNob3dUaW1lU2VsZWN0T25seX0pLHNob3dQb3BwZXJBcnJvdzp0aGlzLnByb3BzLnNob3dQb3BwZXJBcnJvdyxhcnJvd1Byb3BzOnRoaXMucHJvcHMuYXJyb3dQcm9wc30sdGhpcy5yZW5kZXJBcmlhTGl2ZVJlZ2lvbigpLHRoaXMucmVuZGVyUHJldmlvdXNCdXR0b24oKSx0aGlzLnJlbmRlck5leHRCdXR0b24oKSx0aGlzLnJlbmRlck1vbnRocygpLHRoaXMucmVuZGVyWWVhcnMoKSx0aGlzLnJlbmRlclRvZGF5QnV0dG9uKCksdGhpcy5yZW5kZXJUaW1lU2VjdGlvbigpLHRoaXMucmVuZGVySW5wdXRUaW1lU2VjdGlvbigpLHRoaXMucmVuZGVyQ2hpbGRyZW4oKSkpfX1dLFt7a2V5OlwiZGVmYXVsdFByb3BzXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJue29uRHJvcGRvd25Gb2N1czpmdW5jdGlvbigpe30sbW9udGhzU2hvd246MSxtb250aFNlbGVjdGVkSW46MCxmb3JjZVNob3dNb250aE5hdmlnYXRpb246ITEsdGltZUNhcHRpb246XCJUaW1lXCIscHJldmlvdXNZZWFyQnV0dG9uTGFiZWw6XCJQcmV2aW91cyBZZWFyXCIsbmV4dFllYXJCdXR0b25MYWJlbDpcIk5leHQgWWVhclwiLHByZXZpb3VzTW9udGhCdXR0b25MYWJlbDpcIlByZXZpb3VzIE1vbnRoXCIsbmV4dE1vbnRoQnV0dG9uTGFiZWw6XCJOZXh0IE1vbnRoXCIsY3VzdG9tVGltZUlucHV0Om51bGwseWVhckl0ZW1OdW1iZXI6MTJ9fX1dKSxvfSgpLGp0PWZ1bmN0aW9uKHQpe0RlKG4sZS5Db21wb25lbnQpO3ZhciByPVNlKG4pO2Z1bmN0aW9uIG4oZSl7dmFyIHQ7cmV0dXJuIGhlKHRoaXMsbiksKHQ9ci5jYWxsKHRoaXMsZSkpLmVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksdH1yZXR1cm4gZmUobixbe2tleTpcImNvbXBvbmVudERpZE1vdW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBvcnRhbFJvb3Q9KHRoaXMucHJvcHMucG9ydGFsSG9zdHx8ZG9jdW1lbnQpLmdldEVsZW1lbnRCeUlkKHRoaXMucHJvcHMucG9ydGFsSWQpLHRoaXMucG9ydGFsUm9vdHx8KHRoaXMucG9ydGFsUm9vdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHRoaXMucG9ydGFsUm9vdC5zZXRBdHRyaWJ1dGUoXCJpZFwiLHRoaXMucHJvcHMucG9ydGFsSWQpLCh0aGlzLnByb3BzLnBvcnRhbEhvc3R8fGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHRoaXMucG9ydGFsUm9vdCkpLHRoaXMucG9ydGFsUm9vdC5hcHBlbmRDaGlsZCh0aGlzLmVsKX19LHtrZXk6XCJjb21wb25lbnRXaWxsVW5tb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wb3J0YWxSb290LnJlbW92ZUNoaWxkKHRoaXMuZWwpfX0se2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGFlLmNyZWF0ZVBvcnRhbCh0aGlzLnByb3BzLmNoaWxkcmVuLHRoaXMuZWwpfX1dKSxufSgpLFF0PWZ1bmN0aW9uKGUpe3JldHVybiFlLmRpc2FibGVkJiYtMSE9PWUudGFiSW5kZXh9LFZ0PWZ1bmN0aW9uKHQpe0RlKG4sZS5Db21wb25lbnQpO3ZhciByPVNlKG4pO2Z1bmN0aW9uIG4odCl7dmFyIG87cmV0dXJuIGhlKHRoaXMsbikseWUoa2Uobz1yLmNhbGwodGhpcyx0KSksXCJnZXRUYWJDaGlsZHJlblwiLChmdW5jdGlvbigpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvLnRhYkxvb3BSZWYuY3VycmVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW3RhYmluZGV4XSwgYSwgYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYVwiKSwxLC0xKS5maWx0ZXIoUXQpfSkpLHllKGtlKG8pLFwiaGFuZGxlRm9jdXNTdGFydFwiLChmdW5jdGlvbihlKXt2YXIgdD1vLmdldFRhYkNoaWxkcmVuKCk7dCYmdC5sZW5ndGg+MSYmdFt0Lmxlbmd0aC0xXS5mb2N1cygpfSkpLHllKGtlKG8pLFwiaGFuZGxlRm9jdXNFbmRcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9by5nZXRUYWJDaGlsZHJlbigpO3QmJnQubGVuZ3RoPjEmJnRbMF0uZm9jdXMoKX0pKSxvLnRhYkxvb3BSZWY9ZS5jcmVhdGVSZWYoKSxvfXJldHVybiBmZShuLFt7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5lbmFibGVUYWJMb29wP2UuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX190YWItbG9vcFwiLHJlZjp0aGlzLnRhYkxvb3BSZWZ9LGUuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX190YWItbG9vcF9fc3RhcnRcIix0YWJJbmRleDpcIjBcIixvbkZvY3VzOnRoaXMuaGFuZGxlRm9jdXNTdGFydH0pLHRoaXMucHJvcHMuY2hpbGRyZW4sZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXJfX3RhYi1sb29wX19lbmRcIix0YWJJbmRleDpcIjBcIixvbkZvY3VzOnRoaXMuaGFuZGxlRm9jdXNFbmR9KSk6dGhpcy5wcm9wcy5jaGlsZHJlbn19XSxbe2tleTpcImRlZmF1bHRQcm9wc1wiLGdldDpmdW5jdGlvbigpe3JldHVybntlbmFibGVUYWJMb29wOiEwfX19XSksbn0oKSxxdD1mdW5jdGlvbih0KXtEZShvLGUuQ29tcG9uZW50KTt2YXIgbj1TZShvKTtmdW5jdGlvbiBvKCl7cmV0dXJuIGhlKHRoaXMsbyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGZlKG8sW3trZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0LG49dGhpcy5wcm9wcyxvPW4uY2xhc3NOYW1lLGE9bi53cmFwcGVyQ2xhc3NOYW1lLHM9bi5oaWRlUG9wcGVyLGk9bi5wb3BwZXJDb21wb25lbnQscD1uLnBvcHBlck1vZGlmaWVycyxjPW4ucG9wcGVyUGxhY2VtZW50LGw9bi5wb3BwZXJQcm9wcyxkPW4udGFyZ2V0Q29tcG9uZW50LHU9bi5lbmFibGVUYWJMb29wLGg9bi5wb3BwZXJPbktleURvd24sbT1uLnBvcnRhbElkLGY9bi5wb3J0YWxIb3N0O2lmKCFzKXt2YXIgeT1yKFwicmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJcIixvKTt0PWUuY3JlYXRlRWxlbWVudChzZSx2ZSh7bW9kaWZpZXJzOnAscGxhY2VtZW50OmN9LGwpLChmdW5jdGlvbih0KXt2YXIgcj10LnJlZixuPXQuc3R5bGUsbz10LnBsYWNlbWVudCxhPXQuYXJyb3dQcm9wcztyZXR1cm4gZS5jcmVhdGVFbGVtZW50KFZ0LHtlbmFibGVUYWJMb29wOnV9LGUuY3JlYXRlRWxlbWVudChcImRpdlwiLHtyZWY6cixzdHlsZTpuLGNsYXNzTmFtZTp5LFwiZGF0YS1wbGFjZW1lbnRcIjpvLG9uS2V5RG93bjpofSxlLmNsb25lRWxlbWVudChpLHthcnJvd1Byb3BzOmF9KSkpfSkpfXRoaXMucHJvcHMucG9wcGVyQ29udGFpbmVyJiYodD1lLmNyZWF0ZUVsZW1lbnQodGhpcy5wcm9wcy5wb3BwZXJDb250YWluZXIse30sdCkpLG0mJiFzJiYodD1lLmNyZWF0ZUVsZW1lbnQoanQse3BvcnRhbElkOm0scG9ydGFsSG9zdDpmfSx0KSk7dmFyIHY9cihcInJlYWN0LWRhdGVwaWNrZXItd3JhcHBlclwiLGEpO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoaWUse2NsYXNzTmFtZTpcInJlYWN0LWRhdGVwaWNrZXItbWFuYWdlclwifSxlLmNyZWF0ZUVsZW1lbnQocGUsbnVsbCwoZnVuY3Rpb24odCl7dmFyIHI9dC5yZWY7cmV0dXJuIGUuY3JlYXRlRWxlbWVudChcImRpdlwiLHtyZWY6cixjbGFzc05hbWU6dn0sZCl9KSksdCl9fV0sW3trZXk6XCJkZWZhdWx0UHJvcHNcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57aGlkZVBvcHBlcjohMCxwb3BwZXJNb2RpZmllcnM6W10scG9wcGVyUHJvcHM6e30scG9wcGVyUGxhY2VtZW50OlwiYm90dG9tLXN0YXJ0XCJ9fX1dKSxvfSgpLFV0PW9lKEh0KTt2YXIgenQ9ZnVuY3Rpb24odCl7RGUoYSxlLkNvbXBvbmVudCk7dmFyIG89U2UoYSk7ZnVuY3Rpb24gYSh0KXt2YXIgcztyZXR1cm4gaGUodGhpcyxhKSx5ZShrZShzPW8uY2FsbCh0aGlzLHQpKSxcImdldFByZVNlbGVjdGlvblwiLChmdW5jdGlvbigpe3JldHVybiBzLnByb3BzLm9wZW5Ub0RhdGU/cy5wcm9wcy5vcGVuVG9EYXRlOnMucHJvcHMuc2VsZWN0c0VuZCYmcy5wcm9wcy5zdGFydERhdGU/cy5wcm9wcy5zdGFydERhdGU6cy5wcm9wcy5zZWxlY3RzU3RhcnQmJnMucHJvcHMuZW5kRGF0ZT9zLnByb3BzLmVuZERhdGU6WWUoKX0pKSx5ZShrZShzKSxcImNhbGNJbml0aWFsU3RhdGVcIiwoZnVuY3Rpb24oKXt2YXIgZSx0PXMuZ2V0UHJlU2VsZWN0aW9uKCkscj13dChzLnByb3BzKSxuPWd0KHMucHJvcHMpLG89ciYmWih0LEsocikpP3I6biYmWCh0LFEobikpP246dDtyZXR1cm57b3BlbjpzLnByb3BzLnN0YXJ0T3Blbnx8ITEscHJldmVudEZvY3VzOiExLHByZVNlbGVjdGlvbjpudWxsIT09KGU9cy5wcm9wcy5zZWxlY3RzUmFuZ2U/cy5wcm9wcy5zdGFydERhdGU6cy5wcm9wcy5zZWxlY3RlZCkmJnZvaWQgMCE9PWU/ZTpvLGhpZ2hsaWdodERhdGVzOmt0KHMucHJvcHMuaGlnaGxpZ2h0RGF0ZXMpLGZvY3VzZWQ6ITEsc2hvdWxkRm9jdXNEYXlJbmxpbmU6ITEsaXNSZW5kZXJBcmlhTGl2ZU1lc3NhZ2U6ITF9fSkpLHllKGtlKHMpLFwiY2xlYXJQcmV2ZW50Rm9jdXNUaW1lb3V0XCIsKGZ1bmN0aW9uKCl7cy5wcmV2ZW50Rm9jdXNUaW1lb3V0JiZjbGVhclRpbWVvdXQocy5wcmV2ZW50Rm9jdXNUaW1lb3V0KX0pKSx5ZShrZShzKSxcInNldEZvY3VzXCIsKGZ1bmN0aW9uKCl7cy5pbnB1dCYmcy5pbnB1dC5mb2N1cyYmcy5pbnB1dC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pfSkpLHllKGtlKHMpLFwic2V0Qmx1clwiLChmdW5jdGlvbigpe3MuaW5wdXQmJnMuaW5wdXQuYmx1ciYmcy5pbnB1dC5ibHVyKCkscy5jYW5jZWxGb2N1c0lucHV0KCl9KSkseWUoa2UocyksXCJzZXRPcGVuXCIsKGZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07cy5zZXRTdGF0ZSh7b3BlbjplLHByZVNlbGVjdGlvbjplJiZzLnN0YXRlLm9wZW4/cy5zdGF0ZS5wcmVTZWxlY3Rpb246cy5jYWxjSW5pdGlhbFN0YXRlKCkucHJlU2VsZWN0aW9uLGxhc3RQcmVTZWxlY3RDaGFuZ2U6R3R9LChmdW5jdGlvbigpe2V8fHMuc2V0U3RhdGUoKGZ1bmN0aW9uKGUpe3JldHVybntmb2N1c2VkOiEhdCYmZS5mb2N1c2VkfX0pLChmdW5jdGlvbigpeyF0JiZzLnNldEJsdXIoKSxzLnNldFN0YXRlKHtpbnB1dFZhbHVlOm51bGx9KX0pKX0pKX0pKSx5ZShrZShzKSxcImlucHV0T2tcIiwoZnVuY3Rpb24oKXtyZXR1cm4gbihzLnN0YXRlLnByZVNlbGVjdGlvbil9KSkseWUoa2UocyksXCJpc0NhbGVuZGFyT3BlblwiLChmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1zLnByb3BzLm9wZW4/cy5zdGF0ZS5vcGVuJiYhcy5wcm9wcy5kaXNhYmxlZCYmIXMucHJvcHMucmVhZE9ubHk6cy5wcm9wcy5vcGVufSkpLHllKGtlKHMpLFwiaGFuZGxlRm9jdXNcIiwoZnVuY3Rpb24oZSl7cy5zdGF0ZS5wcmV2ZW50Rm9jdXN8fChzLnByb3BzLm9uRm9jdXMoZSkscy5wcm9wcy5wcmV2ZW50T3Blbk9uRm9jdXN8fHMucHJvcHMucmVhZE9ubHl8fHMuc2V0T3BlbighMCkpLHMuc2V0U3RhdGUoe2ZvY3VzZWQ6ITB9KX0pKSx5ZShrZShzKSxcImNhbmNlbEZvY3VzSW5wdXRcIiwoZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQocy5pbnB1dEZvY3VzVGltZW91dCkscy5pbnB1dEZvY3VzVGltZW91dD1udWxsfSkpLHllKGtlKHMpLFwiZGVmZXJGb2N1c0lucHV0XCIsKGZ1bmN0aW9uKCl7cy5jYW5jZWxGb2N1c0lucHV0KCkscy5pbnB1dEZvY3VzVGltZW91dD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBzLnNldEZvY3VzKCl9KSwxKX0pKSx5ZShrZShzKSxcImhhbmRsZURyb3Bkb3duRm9jdXNcIiwoZnVuY3Rpb24oKXtzLmNhbmNlbEZvY3VzSW5wdXQoKX0pKSx5ZShrZShzKSxcImhhbmRsZUJsdXJcIiwoZnVuY3Rpb24oZSl7KCFzLnN0YXRlLm9wZW58fHMucHJvcHMud2l0aFBvcnRhbHx8cy5wcm9wcy5zaG93VGltZUlucHV0KSYmcy5wcm9wcy5vbkJsdXIoZSkscy5zZXRTdGF0ZSh7Zm9jdXNlZDohMX0pfSkpLHllKGtlKHMpLFwiaGFuZGxlQ2FsZW5kYXJDbGlja091dHNpZGVcIiwoZnVuY3Rpb24oZSl7cy5wcm9wcy5pbmxpbmV8fHMuc2V0T3BlbighMSkscy5wcm9wcy5vbkNsaWNrT3V0c2lkZShlKSxzLnByb3BzLndpdGhQb3J0YWwmJmUucHJldmVudERlZmF1bHQoKX0pKSx5ZShrZShzKSxcImhhbmRsZUNoYW5nZVwiLChmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3ZhciBuPXRbMF07aWYoIXMucHJvcHMub25DaGFuZ2VSYXd8fChzLnByb3BzLm9uQ2hhbmdlUmF3LmFwcGx5KGtlKHMpLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIG4uaXNEZWZhdWx0UHJldmVudGVkJiYhbi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkpe3Muc2V0U3RhdGUoe2lucHV0VmFsdWU6bi50YXJnZXQudmFsdWUsbGFzdFByZVNlbGVjdENoYW5nZTokdH0pO3ZhciBvPU9lKG4udGFyZ2V0LnZhbHVlLHMucHJvcHMuZGF0ZUZvcm1hdCxzLnByb3BzLmxvY2FsZSxzLnByb3BzLnN0cmljdFBhcnNpbmcscy5wcm9wcy5taW5EYXRlKTtzLnByb3BzLnNob3dUaW1lU2VsZWN0T25seSYmIXplKG8scy5wcm9wcy5zZWxlY3RlZCkmJihvPWNlKHMucHJvcHMuc2VsZWN0ZWQsbnVsbD09bz97aG91cnM6ZyhzLnByb3BzLnNlbGVjdGVkKSxtaW51dGVzOncocy5wcm9wcy5zZWxlY3RlZCksc2Vjb25kczpEKHMucHJvcHMuc2VsZWN0ZWQpfTp7aG91cnM6ZyhvKSxtaW51dGVzOncobyksc2Vjb25kczpEKG8pfSkpLCFvJiZuLnRhcmdldC52YWx1ZXx8cy5zZXRTZWxlY3RlZChvLG4sITApfX0pKSx5ZShrZShzKSxcImhhbmRsZVNlbGVjdFwiLChmdW5jdGlvbihlLHQscil7aWYocy5zZXRTdGF0ZSh7cHJldmVudEZvY3VzOiEwfSwoZnVuY3Rpb24oKXtyZXR1cm4gcy5wcmV2ZW50Rm9jdXNUaW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIHMuc2V0U3RhdGUoe3ByZXZlbnRGb2N1czohMX0pfSksNTApLHMucHJldmVudEZvY3VzVGltZW91dH0pKSxzLnByb3BzLm9uQ2hhbmdlUmF3JiZzLnByb3BzLm9uQ2hhbmdlUmF3KHQpLHMuc2V0U2VsZWN0ZWQoZSx0LCExLHIpLHMuc2V0U3RhdGUoe2lzUmVuZGVyQXJpYUxpdmVNZXNzYWdlOiEwfSksIXMucHJvcHMuc2hvdWxkQ2xvc2VPblNlbGVjdHx8cy5wcm9wcy5zaG93VGltZVNlbGVjdClzLnNldFByZVNlbGVjdGlvbihlKTtlbHNlIGlmKCFzLnByb3BzLmlubGluZSl7cy5wcm9wcy5zZWxlY3RzUmFuZ2V8fHMuc2V0T3BlbighMSk7dmFyIG49cy5wcm9wcyxvPW4uc3RhcnREYXRlLGE9bi5lbmREYXRlOyFvfHxhfHxaKGUsbyl8fHMuc2V0T3BlbighMSl9fSkpLHllKGtlKHMpLFwic2V0U2VsZWN0ZWRcIiwoZnVuY3Rpb24oZSx0LHIsbil7dmFyIG89ZTtpZihzLnByb3BzLnNob3dZZWFyUGlja2VyKXtpZihudWxsIT09byYmY3QoTShvKSxzLnByb3BzKSlyZXR1cm59ZWxzZSBpZihzLnByb3BzLnNob3dNb250aFllYXJQaWNrZXIpe2lmKG51bGwhPT1vJiZzdChvLHMucHJvcHMpKXJldHVybn1lbHNlIGlmKG51bGwhPT1vJiZvdChvLHMucHJvcHMpKXJldHVybjt2YXIgYT1zLnByb3BzLGk9YS5vbkNoYW5nZSxwPWEuc2VsZWN0c1JhbmdlLGM9YS5zdGFydERhdGUsbD1hLmVuZERhdGU7aWYoISRlKHMucHJvcHMuc2VsZWN0ZWQsbyl8fHMucHJvcHMuYWxsb3dTYW1lRGF5fHxwKWlmKG51bGwhPT1vJiYoIXMucHJvcHMuc2VsZWN0ZWR8fHImJihzLnByb3BzLnNob3dUaW1lU2VsZWN0fHxzLnByb3BzLnNob3dUaW1lU2VsZWN0T25seXx8cy5wcm9wcy5zaG93VGltZUlucHV0KXx8KG89UmUobyx7aG91cjpnKHMucHJvcHMuc2VsZWN0ZWQpLG1pbnV0ZTp3KHMucHJvcHMuc2VsZWN0ZWQpLHNlY29uZDpEKHMucHJvcHMuc2VsZWN0ZWQpfSkpLHMucHJvcHMuaW5saW5lfHxzLnNldFN0YXRlKHtwcmVTZWxlY3Rpb246b30pLHMucHJvcHMuZm9jdXNTZWxlY3RlZE1vbnRofHxzLnNldFN0YXRlKHttb250aFNlbGVjdGVkSW46bn0pKSxwKXt2YXIgZD1jJiYhbCx1PWMmJmw7IWMmJiFsP2koW28sbnVsbF0sdCk6ZCYmKFoobyxjKT9pKFtvLG51bGxdLHQpOmkoW2Msb10sdCkpLHUmJmkoW28sbnVsbF0sdCl9ZWxzZSBpKG8sdCk7cnx8KHMucHJvcHMub25TZWxlY3Qobyx0KSxzLnNldFN0YXRlKHtpbnB1dFZhbHVlOm51bGx9KSl9KSkseWUoa2UocyksXCJzZXRQcmVTZWxlY3Rpb25cIiwoZnVuY3Rpb24oZSl7dmFyIHQ9dm9pZCAwIT09cy5wcm9wcy5taW5EYXRlLHI9dm9pZCAwIT09cy5wcm9wcy5tYXhEYXRlLG49ITA7aWYoZSl7dmFyIG89SyhlKTtpZih0JiZyKW49R2UoZSxzLnByb3BzLm1pbkRhdGUscy5wcm9wcy5tYXhEYXRlKTtlbHNlIGlmKHQpe3ZhciBhPUsocy5wcm9wcy5taW5EYXRlKTtuPVgoZSxhKXx8JGUobyxhKX1lbHNlIGlmKHIpe3ZhciBpPVEocy5wcm9wcy5tYXhEYXRlKTtuPVooZSxpKXx8JGUobyxpKX19biYmcy5zZXRTdGF0ZSh7cHJlU2VsZWN0aW9uOmV9KX0pKSx5ZShrZShzKSxcImhhbmRsZVRpbWVDaGFuZ2VcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9UmUocy5wcm9wcy5zZWxlY3RlZD9zLnByb3BzLnNlbGVjdGVkOnMuZ2V0UHJlU2VsZWN0aW9uKCkse2hvdXI6ZyhlKSxtaW51dGU6dyhlKX0pO3Muc2V0U3RhdGUoe3ByZVNlbGVjdGlvbjp0fSkscy5wcm9wcy5vbkNoYW5nZSh0KSxzLnByb3BzLnNob3VsZENsb3NlT25TZWxlY3QmJnMuc2V0T3BlbighMSkscy5wcm9wcy5zaG93VGltZUlucHV0JiZzLnNldE9wZW4oITApLChzLnByb3BzLnNob3dUaW1lU2VsZWN0T25seXx8cy5wcm9wcy5zaG93VGltZVNlbGVjdCkmJnMuc2V0U3RhdGUoe2lzUmVuZGVyQXJpYUxpdmVNZXNzYWdlOiEwfSkscy5zZXRTdGF0ZSh7aW5wdXRWYWx1ZTpudWxsfSl9KSkseWUoa2UocyksXCJvbklucHV0Q2xpY2tcIiwoZnVuY3Rpb24oKXtzLnByb3BzLmRpc2FibGVkfHxzLnByb3BzLnJlYWRPbmx5fHxzLnNldE9wZW4oITApLHMucHJvcHMub25JbnB1dENsaWNrKCl9KSkseWUoa2UocyksXCJvbklucHV0S2V5RG93blwiLChmdW5jdGlvbihlKXtzLnByb3BzLm9uS2V5RG93bihlKTt2YXIgdD1lLmtleTtpZihzLnN0YXRlLm9wZW58fHMucHJvcHMuaW5saW5lfHxzLnByb3BzLnByZXZlbnRPcGVuT25Gb2N1cyl7aWYocy5zdGF0ZS5vcGVuKXtpZihcIkFycm93RG93blwiPT09dHx8XCJBcnJvd1VwXCI9PT10KXtlLnByZXZlbnREZWZhdWx0KCk7dmFyIHI9cy5jYWxlbmRhci5jb21wb25lbnROb2RlJiZzLmNhbGVuZGFyLmNvbXBvbmVudE5vZGUucXVlcnlTZWxlY3RvcignLnJlYWN0LWRhdGVwaWNrZXJfX2RheVt0YWJpbmRleD1cIjBcIl0nKTtyZXR1cm4gdm9pZChyJiZyLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSkpfXZhciBuPVllKHMuc3RhdGUucHJlU2VsZWN0aW9uKTtcIkVudGVyXCI9PT10PyhlLnByZXZlbnREZWZhdWx0KCkscy5pbnB1dE9rKCkmJnMuc3RhdGUubGFzdFByZVNlbGVjdENoYW5nZT09PUd0PyhzLmhhbmRsZVNlbGVjdChuLGUpLCFzLnByb3BzLnNob3VsZENsb3NlT25TZWxlY3QmJnMuc2V0UHJlU2VsZWN0aW9uKG4pKTpzLnNldE9wZW4oITEpKTpcIkVzY2FwZVwiPT09dCYmKGUucHJldmVudERlZmF1bHQoKSxzLnNldE9wZW4oITEpKSxzLmlucHV0T2soKXx8cy5wcm9wcy5vbklucHV0RXJyb3Ioe2NvZGU6MSxtc2c6XCJEYXRlIGlucHV0IG5vdCB2YWxpZC5cIn0pfX1lbHNlXCJBcnJvd0Rvd25cIiE9PXQmJlwiQXJyb3dVcFwiIT09dCYmXCJFbnRlclwiIT09dHx8cy5vbklucHV0Q2xpY2soKX0pKSx5ZShrZShzKSxcIm9uUG9ydGFsS2V5RG93blwiLChmdW5jdGlvbihlKXtcIkVzY2FwZVwiPT09ZS5rZXkmJihlLnByZXZlbnREZWZhdWx0KCkscy5zZXRTdGF0ZSh7cHJldmVudEZvY3VzOiEwfSwoZnVuY3Rpb24oKXtzLnNldE9wZW4oITEpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cy5zZXRGb2N1cygpLHMuc2V0U3RhdGUoe3ByZXZlbnRGb2N1czohMX0pfSkpfSkpKX0pKSx5ZShrZShzKSxcIm9uRGF5S2V5RG93blwiLChmdW5jdGlvbihlKXtzLnByb3BzLm9uS2V5RG93bihlKTt2YXIgdD1lLmtleSxyPVllKHMuc3RhdGUucHJlU2VsZWN0aW9uKTtpZihcIkVudGVyXCI9PT10KWUucHJldmVudERlZmF1bHQoKSxzLmhhbmRsZVNlbGVjdChyLGUpLCFzLnByb3BzLnNob3VsZENsb3NlT25TZWxlY3QmJnMuc2V0UHJlU2VsZWN0aW9uKHIpO2Vsc2UgaWYoXCJFc2NhcGVcIj09PXQpZS5wcmV2ZW50RGVmYXVsdCgpLHMuc2V0T3BlbighMSkscy5pbnB1dE9rKCl8fHMucHJvcHMub25JbnB1dEVycm9yKHtjb2RlOjEsbXNnOlwiRGF0ZSBpbnB1dCBub3QgdmFsaWQuXCJ9KTtlbHNlIGlmKCFzLnByb3BzLmRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uKXt2YXIgbjtzd2l0Y2godCl7Y2FzZVwiQXJyb3dMZWZ0XCI6bj1oKHIsMSk7YnJlYWs7Y2FzZVwiQXJyb3dSaWdodFwiOm49cChyLDEpO2JyZWFrO2Nhc2VcIkFycm93VXBcIjpuPW0ociwxKTticmVhaztjYXNlXCJBcnJvd0Rvd25cIjpuPWMociwxKTticmVhaztjYXNlXCJQYWdlVXBcIjpuPWYociwxKTticmVhaztjYXNlXCJQYWdlRG93blwiOm49bChyLDEpO2JyZWFrO2Nhc2VcIkhvbWVcIjpuPXYociwxKTticmVhaztjYXNlXCJFbmRcIjpuPXUociwxKX1pZighbilyZXR1cm4gdm9pZChzLnByb3BzLm9uSW5wdXRFcnJvciYmcy5wcm9wcy5vbklucHV0RXJyb3Ioe2NvZGU6MSxtc2c6XCJEYXRlIGlucHV0IG5vdCB2YWxpZC5cIn0pKTtpZihlLnByZXZlbnREZWZhdWx0KCkscy5zZXRTdGF0ZSh7bGFzdFByZVNlbGVjdENoYW5nZTpHdH0pLHMucHJvcHMuYWRqdXN0RGF0ZU9uQ2hhbmdlJiZzLnNldFNlbGVjdGVkKG4pLHMuc2V0UHJlU2VsZWN0aW9uKG4pLHMucHJvcHMuaW5saW5lKXt2YXIgbz1DKHIpLGE9QyhuKSxpPU0ociksZD1NKG4pO28hPT1hfHxpIT09ZD9zLnNldFN0YXRlKHtzaG91bGRGb2N1c0RheUlubGluZTohMH0pOnMuc2V0U3RhdGUoe3Nob3VsZEZvY3VzRGF5SW5saW5lOiExfSl9fX0pKSx5ZShrZShzKSxcIm9uUG9wcGVyS2V5RG93blwiLChmdW5jdGlvbihlKXtcIkVzY2FwZVwiPT09ZS5rZXkmJihlLnByZXZlbnREZWZhdWx0KCkscy5zZXRTdGF0ZSh7cHJldmVudEZvY3VzOiEwfSwoZnVuY3Rpb24oKXtzLnNldE9wZW4oITEpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cy5zZXRGb2N1cygpLHMuc2V0U3RhdGUoe3ByZXZlbnRGb2N1czohMX0pfSkpfSkpKX0pKSx5ZShrZShzKSxcIm9uQ2xlYXJDbGlja1wiLChmdW5jdGlvbihlKXtlJiZlLnByZXZlbnREZWZhdWx0JiZlLnByZXZlbnREZWZhdWx0KCkscy5wcm9wcy5zZWxlY3RzUmFuZ2U/cy5wcm9wcy5vbkNoYW5nZShbbnVsbCxudWxsXSxlKTpzLnByb3BzLm9uQ2hhbmdlKG51bGwsZSkscy5zZXRTdGF0ZSh7aW5wdXRWYWx1ZTpudWxsfSl9KSkseWUoa2UocyksXCJjbGVhclwiLChmdW5jdGlvbigpe3Mub25DbGVhckNsaWNrKCl9KSkseWUoa2UocyksXCJvblNjcm9sbFwiLChmdW5jdGlvbihlKXtcImJvb2xlYW5cIj09dHlwZW9mIHMucHJvcHMuY2xvc2VPblNjcm9sbCYmcy5wcm9wcy5jbG9zZU9uU2Nyb2xsP2UudGFyZ2V0IT09ZG9jdW1lbnQmJmUudGFyZ2V0IT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZlLnRhcmdldCE9PWRvY3VtZW50LmJvZHl8fHMuc2V0T3BlbighMSk6XCJmdW5jdGlvblwiPT10eXBlb2Ygcy5wcm9wcy5jbG9zZU9uU2Nyb2xsJiZzLnByb3BzLmNsb3NlT25TY3JvbGwoZSkmJnMuc2V0T3BlbighMSl9KSkseWUoa2UocyksXCJyZW5kZXJDYWxlbmRhclwiLChmdW5jdGlvbigpe3JldHVybiBzLnByb3BzLmlubGluZXx8cy5pc0NhbGVuZGFyT3BlbigpP2UuY3JlYXRlRWxlbWVudChVdCx7cmVmOmZ1bmN0aW9uKGUpe3MuY2FsZW5kYXI9ZX0sbG9jYWxlOnMucHJvcHMubG9jYWxlLGNhbGVuZGFyU3RhcnREYXk6cy5wcm9wcy5jYWxlbmRhclN0YXJ0RGF5LGNob29zZURheUFyaWFMYWJlbFByZWZpeDpzLnByb3BzLmNob29zZURheUFyaWFMYWJlbFByZWZpeCxkaXNhYmxlZERheUFyaWFMYWJlbFByZWZpeDpzLnByb3BzLmRpc2FibGVkRGF5QXJpYUxhYmVsUHJlZml4LHdlZWtBcmlhTGFiZWxQcmVmaXg6cy5wcm9wcy53ZWVrQXJpYUxhYmVsUHJlZml4LG1vbnRoQXJpYUxhYmVsUHJlZml4OnMucHJvcHMubW9udGhBcmlhTGFiZWxQcmVmaXgsYWRqdXN0RGF0ZU9uQ2hhbmdlOnMucHJvcHMuYWRqdXN0RGF0ZU9uQ2hhbmdlLHNldE9wZW46cy5zZXRPcGVuLHNob3VsZENsb3NlT25TZWxlY3Q6cy5wcm9wcy5zaG91bGRDbG9zZU9uU2VsZWN0LGRhdGVGb3JtYXQ6cy5wcm9wcy5kYXRlRm9ybWF0Q2FsZW5kYXIsdXNlV2Vla2RheXNTaG9ydDpzLnByb3BzLnVzZVdlZWtkYXlzU2hvcnQsZm9ybWF0V2Vla0RheTpzLnByb3BzLmZvcm1hdFdlZWtEYXksZHJvcGRvd25Nb2RlOnMucHJvcHMuZHJvcGRvd25Nb2RlLHNlbGVjdGVkOnMucHJvcHMuc2VsZWN0ZWQscHJlU2VsZWN0aW9uOnMuc3RhdGUucHJlU2VsZWN0aW9uLG9uU2VsZWN0OnMuaGFuZGxlU2VsZWN0LG9uV2Vla1NlbGVjdDpzLnByb3BzLm9uV2Vla1NlbGVjdCxvcGVuVG9EYXRlOnMucHJvcHMub3BlblRvRGF0ZSxtaW5EYXRlOnMucHJvcHMubWluRGF0ZSxtYXhEYXRlOnMucHJvcHMubWF4RGF0ZSxzZWxlY3RzU3RhcnQ6cy5wcm9wcy5zZWxlY3RzU3RhcnQsc2VsZWN0c0VuZDpzLnByb3BzLnNlbGVjdHNFbmQsc2VsZWN0c1JhbmdlOnMucHJvcHMuc2VsZWN0c1JhbmdlLHN0YXJ0RGF0ZTpzLnByb3BzLnN0YXJ0RGF0ZSxlbmREYXRlOnMucHJvcHMuZW5kRGF0ZSxleGNsdWRlRGF0ZXM6cy5wcm9wcy5leGNsdWRlRGF0ZXMsZXhjbHVkZURhdGVJbnRlcnZhbHM6cy5wcm9wcy5leGNsdWRlRGF0ZUludGVydmFscyxmaWx0ZXJEYXRlOnMucHJvcHMuZmlsdGVyRGF0ZSxvbkNsaWNrT3V0c2lkZTpzLmhhbmRsZUNhbGVuZGFyQ2xpY2tPdXRzaWRlLGZvcm1hdFdlZWtOdW1iZXI6cy5wcm9wcy5mb3JtYXRXZWVrTnVtYmVyLGhpZ2hsaWdodERhdGVzOnMuc3RhdGUuaGlnaGxpZ2h0RGF0ZXMsaW5jbHVkZURhdGVzOnMucHJvcHMuaW5jbHVkZURhdGVzLGluY2x1ZGVEYXRlSW50ZXJ2YWxzOnMucHJvcHMuaW5jbHVkZURhdGVJbnRlcnZhbHMsaW5jbHVkZVRpbWVzOnMucHJvcHMuaW5jbHVkZVRpbWVzLGluamVjdFRpbWVzOnMucHJvcHMuaW5qZWN0VGltZXMsaW5saW5lOnMucHJvcHMuaW5saW5lLHNob3VsZEZvY3VzRGF5SW5saW5lOnMuc3RhdGUuc2hvdWxkRm9jdXNEYXlJbmxpbmUscGVla05leHRNb250aDpzLnByb3BzLnBlZWtOZXh0TW9udGgsc2hvd01vbnRoRHJvcGRvd246cy5wcm9wcy5zaG93TW9udGhEcm9wZG93bixzaG93UHJldmlvdXNNb250aHM6cy5wcm9wcy5zaG93UHJldmlvdXNNb250aHMsdXNlU2hvcnRNb250aEluRHJvcGRvd246cy5wcm9wcy51c2VTaG9ydE1vbnRoSW5Ecm9wZG93bixzaG93TW9udGhZZWFyRHJvcGRvd246cy5wcm9wcy5zaG93TW9udGhZZWFyRHJvcGRvd24sc2hvd1dlZWtOdW1iZXJzOnMucHJvcHMuc2hvd1dlZWtOdW1iZXJzLHNob3dZZWFyRHJvcGRvd246cy5wcm9wcy5zaG93WWVhckRyb3Bkb3duLHdpdGhQb3J0YWw6cy5wcm9wcy53aXRoUG9ydGFsLGZvcmNlU2hvd01vbnRoTmF2aWdhdGlvbjpzLnByb3BzLmZvcmNlU2hvd01vbnRoTmF2aWdhdGlvbixzaG93RGlzYWJsZWRNb250aE5hdmlnYXRpb246cy5wcm9wcy5zaG93RGlzYWJsZWRNb250aE5hdmlnYXRpb24sc2Nyb2xsYWJsZVllYXJEcm9wZG93bjpzLnByb3BzLnNjcm9sbGFibGVZZWFyRHJvcGRvd24sc2Nyb2xsYWJsZU1vbnRoWWVhckRyb3Bkb3duOnMucHJvcHMuc2Nyb2xsYWJsZU1vbnRoWWVhckRyb3Bkb3duLHRvZGF5QnV0dG9uOnMucHJvcHMudG9kYXlCdXR0b24sd2Vla0xhYmVsOnMucHJvcHMud2Vla0xhYmVsLG91dHNpZGVDbGlja0lnbm9yZUNsYXNzOlwicmVhY3QtZGF0ZXBpY2tlci1pZ25vcmUtb25jbGlja291dHNpZGVcIixmaXhlZEhlaWdodDpzLnByb3BzLmZpeGVkSGVpZ2h0LG1vbnRoc1Nob3duOnMucHJvcHMubW9udGhzU2hvd24sbW9udGhTZWxlY3RlZEluOnMuc3RhdGUubW9udGhTZWxlY3RlZEluLG9uRHJvcGRvd25Gb2N1czpzLmhhbmRsZURyb3Bkb3duRm9jdXMsb25Nb250aENoYW5nZTpzLnByb3BzLm9uTW9udGhDaGFuZ2Usb25ZZWFyQ2hhbmdlOnMucHJvcHMub25ZZWFyQ2hhbmdlLGRheUNsYXNzTmFtZTpzLnByb3BzLmRheUNsYXNzTmFtZSx3ZWVrRGF5Q2xhc3NOYW1lOnMucHJvcHMud2Vla0RheUNsYXNzTmFtZSxtb250aENsYXNzTmFtZTpzLnByb3BzLm1vbnRoQ2xhc3NOYW1lLHRpbWVDbGFzc05hbWU6cy5wcm9wcy50aW1lQ2xhc3NOYW1lLHNob3dUaW1lU2VsZWN0OnMucHJvcHMuc2hvd1RpbWVTZWxlY3Qsc2hvd1RpbWVTZWxlY3RPbmx5OnMucHJvcHMuc2hvd1RpbWVTZWxlY3RPbmx5LG9uVGltZUNoYW5nZTpzLmhhbmRsZVRpbWVDaGFuZ2UsdGltZUZvcm1hdDpzLnByb3BzLnRpbWVGb3JtYXQsdGltZUludGVydmFsczpzLnByb3BzLnRpbWVJbnRlcnZhbHMsbWluVGltZTpzLnByb3BzLm1pblRpbWUsbWF4VGltZTpzLnByb3BzLm1heFRpbWUsZXhjbHVkZVRpbWVzOnMucHJvcHMuZXhjbHVkZVRpbWVzLGZpbHRlclRpbWU6cy5wcm9wcy5maWx0ZXJUaW1lLHRpbWVDYXB0aW9uOnMucHJvcHMudGltZUNhcHRpb24sY2xhc3NOYW1lOnMucHJvcHMuY2FsZW5kYXJDbGFzc05hbWUsY29udGFpbmVyOnMucHJvcHMuY2FsZW5kYXJDb250YWluZXIseWVhckl0ZW1OdW1iZXI6cy5wcm9wcy55ZWFySXRlbU51bWJlcix5ZWFyRHJvcGRvd25JdGVtTnVtYmVyOnMucHJvcHMueWVhckRyb3Bkb3duSXRlbU51bWJlcixwcmV2aW91c01vbnRoQXJpYUxhYmVsOnMucHJvcHMucHJldmlvdXNNb250aEFyaWFMYWJlbCxwcmV2aW91c01vbnRoQnV0dG9uTGFiZWw6cy5wcm9wcy5wcmV2aW91c01vbnRoQnV0dG9uTGFiZWwsbmV4dE1vbnRoQXJpYUxhYmVsOnMucHJvcHMubmV4dE1vbnRoQXJpYUxhYmVsLG5leHRNb250aEJ1dHRvbkxhYmVsOnMucHJvcHMubmV4dE1vbnRoQnV0dG9uTGFiZWwscHJldmlvdXNZZWFyQXJpYUxhYmVsOnMucHJvcHMucHJldmlvdXNZZWFyQXJpYUxhYmVsLHByZXZpb3VzWWVhckJ1dHRvbkxhYmVsOnMucHJvcHMucHJldmlvdXNZZWFyQnV0dG9uTGFiZWwsbmV4dFllYXJBcmlhTGFiZWw6cy5wcm9wcy5uZXh0WWVhckFyaWFMYWJlbCxuZXh0WWVhckJ1dHRvbkxhYmVsOnMucHJvcHMubmV4dFllYXJCdXR0b25MYWJlbCx0aW1lSW5wdXRMYWJlbDpzLnByb3BzLnRpbWVJbnB1dExhYmVsLGRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uOnMucHJvcHMuZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb24scmVuZGVyQ3VzdG9tSGVhZGVyOnMucHJvcHMucmVuZGVyQ3VzdG9tSGVhZGVyLHBvcHBlclByb3BzOnMucHJvcHMucG9wcGVyUHJvcHMscmVuZGVyRGF5Q29udGVudHM6cy5wcm9wcy5yZW5kZXJEYXlDb250ZW50cyxvbkRheU1vdXNlRW50ZXI6cy5wcm9wcy5vbkRheU1vdXNlRW50ZXIsb25Nb250aE1vdXNlTGVhdmU6cy5wcm9wcy5vbk1vbnRoTW91c2VMZWF2ZSxzZWxlY3RzRGlzYWJsZWREYXlzSW5SYW5nZTpzLnByb3BzLnNlbGVjdHNEaXNhYmxlZERheXNJblJhbmdlLHNob3dUaW1lSW5wdXQ6cy5wcm9wcy5zaG93VGltZUlucHV0LHNob3dNb250aFllYXJQaWNrZXI6cy5wcm9wcy5zaG93TW9udGhZZWFyUGlja2VyLHNob3dGdWxsTW9udGhZZWFyUGlja2VyOnMucHJvcHMuc2hvd0Z1bGxNb250aFllYXJQaWNrZXIsc2hvd1R3b0NvbHVtbk1vbnRoWWVhclBpY2tlcjpzLnByb3BzLnNob3dUd29Db2x1bW5Nb250aFllYXJQaWNrZXIsc2hvd0ZvdXJDb2x1bW5Nb250aFllYXJQaWNrZXI6cy5wcm9wcy5zaG93Rm91ckNvbHVtbk1vbnRoWWVhclBpY2tlcixzaG93WWVhclBpY2tlcjpzLnByb3BzLnNob3dZZWFyUGlja2VyLHNob3dRdWFydGVyWWVhclBpY2tlcjpzLnByb3BzLnNob3dRdWFydGVyWWVhclBpY2tlcixzaG93UG9wcGVyQXJyb3c6cy5wcm9wcy5zaG93UG9wcGVyQXJyb3csZXhjbHVkZVNjcm9sbGJhcjpzLnByb3BzLmV4Y2x1ZGVTY3JvbGxiYXIsaGFuZGxlT25LZXlEb3duOnMucHJvcHMub25LZXlEb3duLGhhbmRsZU9uRGF5S2V5RG93bjpzLm9uRGF5S2V5RG93bixpc0lucHV0Rm9jdXNlZDpzLnN0YXRlLmZvY3VzZWQsY3VzdG9tVGltZUlucHV0OnMucHJvcHMuY3VzdG9tVGltZUlucHV0LHNldFByZVNlbGVjdGlvbjpzLnNldFByZVNlbGVjdGlvbn0scy5wcm9wcy5jaGlsZHJlbik6bnVsbH0pKSx5ZShrZShzKSxcInJlbmRlckFyaWFMaXZlUmVnaW9uXCIsKGZ1bmN0aW9uKCl7dmFyIHQscj1zLnByb3BzLG49ci5kYXRlRm9ybWF0LG89ci5sb2NhbGUsYT1zLnByb3BzLnNob3dUaW1lSW5wdXR8fHMucHJvcHMuc2hvd1RpbWVTZWxlY3Q/XCJQUFBQcFwiOlwiUFBQUFwiO3JldHVybiB0PXMucHJvcHMuc2VsZWN0c1JhbmdlP1wiU2VsZWN0ZWQgc3RhcnQgZGF0ZTogXCIuY29uY2F0KExlKHMucHJvcHMuc3RhcnREYXRlLHtkYXRlRm9ybWF0OmEsbG9jYWxlOm99KSxcIi4gXCIpLmNvbmNhdChzLnByb3BzLmVuZERhdGU/XCJFbmQgZGF0ZTogXCIrTGUocy5wcm9wcy5lbmREYXRlLHtkYXRlRm9ybWF0OmEsbG9jYWxlOm99KTpcIlwiKTpzLnByb3BzLnNob3dUaW1lU2VsZWN0T25seT9cIlNlbGVjdGVkIHRpbWU6IFwiLmNvbmNhdChMZShzLnByb3BzLnNlbGVjdGVkLHtkYXRlRm9ybWF0Om4sbG9jYWxlOm99KSk6cy5wcm9wcy5zaG93WWVhclBpY2tlcj9cIlNlbGVjdGVkIHllYXI6IFwiLmNvbmNhdChMZShzLnByb3BzLnNlbGVjdGVkLHtkYXRlRm9ybWF0OlwieXl5eVwiLGxvY2FsZTpvfSkpOnMucHJvcHMuc2hvd01vbnRoWWVhclBpY2tlcj9cIlNlbGVjdGVkIG1vbnRoOiBcIi5jb25jYXQoTGUocy5wcm9wcy5zZWxlY3RlZCx7ZGF0ZUZvcm1hdDpcIk1NTU0geXl5eVwiLGxvY2FsZTpvfSkpOnMucHJvcHMuc2hvd1F1YXJ0ZXJZZWFyUGlja2VyP1wiU2VsZWN0ZWQgcXVhcnRlcjogXCIuY29uY2F0KExlKHMucHJvcHMuc2VsZWN0ZWQse2RhdGVGb3JtYXQ6XCJ5eXl5LCBRUVFcIixsb2NhbGU6b30pKTpcIlNlbGVjdGVkIGRhdGU6IFwiLmNvbmNhdChMZShzLnByb3BzLnNlbGVjdGVkLHtkYXRlRm9ybWF0OmEsbG9jYWxlOm99KSksZS5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtyb2xlOlwiYWxlcnRcIixcImFyaWEtbGl2ZVwiOlwicG9saXRlXCIsY2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9fYXJpYS1saXZlXCJ9LHMuc3RhdGUuaXNSZW5kZXJBcmlhTGl2ZU1lc3NhZ2UmJnQpfSkpLHllKGtlKHMpLFwicmVuZGVyRGF0ZUlucHV0XCIsKGZ1bmN0aW9uKCl7dmFyIHQsbj1yKHMucHJvcHMuY2xhc3NOYW1lLHllKHt9LFwicmVhY3QtZGF0ZXBpY2tlci1pZ25vcmUtb25jbGlja291dHNpZGVcIixzLnN0YXRlLm9wZW4pKSxvPXMucHJvcHMuY3VzdG9tSW5wdXR8fGUuY3JlYXRlRWxlbWVudChcImlucHV0XCIse3R5cGU6XCJ0ZXh0XCJ9KSxhPXMucHJvcHMuY3VzdG9tSW5wdXRSZWZ8fFwicmVmXCIsaT1cInN0cmluZ1wiPT10eXBlb2Ygcy5wcm9wcy52YWx1ZT9zLnByb3BzLnZhbHVlOlwic3RyaW5nXCI9PXR5cGVvZiBzLnN0YXRlLmlucHV0VmFsdWU/cy5zdGF0ZS5pbnB1dFZhbHVlOnMucHJvcHMuc2VsZWN0c1JhbmdlP2Z1bmN0aW9uKGUsdCxyKXtpZighZSlyZXR1cm5cIlwiO3ZhciBuPUxlKGUsciksbz10P0xlKHQscik6XCJcIjtyZXR1cm5cIlwiLmNvbmNhdChuLFwiIC0gXCIpLmNvbmNhdChvKX0ocy5wcm9wcy5zdGFydERhdGUscy5wcm9wcy5lbmREYXRlLHMucHJvcHMpOkxlKHMucHJvcHMuc2VsZWN0ZWQscy5wcm9wcyk7cmV0dXJuIGUuY2xvbmVFbGVtZW50KG8sKHllKHQ9e30sYSwoZnVuY3Rpb24oZSl7cy5pbnB1dD1lfSkpLHllKHQsXCJ2YWx1ZVwiLGkpLHllKHQsXCJvbkJsdXJcIixzLmhhbmRsZUJsdXIpLHllKHQsXCJvbkNoYW5nZVwiLHMuaGFuZGxlQ2hhbmdlKSx5ZSh0LFwib25DbGlja1wiLHMub25JbnB1dENsaWNrKSx5ZSh0LFwib25Gb2N1c1wiLHMuaGFuZGxlRm9jdXMpLHllKHQsXCJvbktleURvd25cIixzLm9uSW5wdXRLZXlEb3duKSx5ZSh0LFwiaWRcIixzLnByb3BzLmlkKSx5ZSh0LFwibmFtZVwiLHMucHJvcHMubmFtZSkseWUodCxcImZvcm1cIixzLnByb3BzLmZvcm0pLHllKHQsXCJhdXRvRm9jdXNcIixzLnByb3BzLmF1dG9Gb2N1cykseWUodCxcInBsYWNlaG9sZGVyXCIscy5wcm9wcy5wbGFjZWhvbGRlclRleHQpLHllKHQsXCJkaXNhYmxlZFwiLHMucHJvcHMuZGlzYWJsZWQpLHllKHQsXCJhdXRvQ29tcGxldGVcIixzLnByb3BzLmF1dG9Db21wbGV0ZSkseWUodCxcImNsYXNzTmFtZVwiLHIoby5wcm9wcy5jbGFzc05hbWUsbikpLHllKHQsXCJ0aXRsZVwiLHMucHJvcHMudGl0bGUpLHllKHQsXCJyZWFkT25seVwiLHMucHJvcHMucmVhZE9ubHkpLHllKHQsXCJyZXF1aXJlZFwiLHMucHJvcHMucmVxdWlyZWQpLHllKHQsXCJ0YWJJbmRleFwiLHMucHJvcHMudGFiSW5kZXgpLHllKHQsXCJhcmlhLWRlc2NyaWJlZGJ5XCIscy5wcm9wcy5hcmlhRGVzY3JpYmVkQnkpLHllKHQsXCJhcmlhLWludmFsaWRcIixzLnByb3BzLmFyaWFJbnZhbGlkKSx5ZSh0LFwiYXJpYS1sYWJlbGxlZGJ5XCIscy5wcm9wcy5hcmlhTGFiZWxsZWRCeSkseWUodCxcImFyaWEtcmVxdWlyZWRcIixzLnByb3BzLmFyaWFSZXF1aXJlZCksdCkpfSkpLHllKGtlKHMpLFwicmVuZGVyQ2xlYXJCdXR0b25cIiwoZnVuY3Rpb24oKXt2YXIgdD1zLnByb3BzLHI9dC5pc0NsZWFyYWJsZSxuPXQuc2VsZWN0ZWQsbz10LnN0YXJ0RGF0ZSxhPXQuZW5kRGF0ZSxpPXQuY2xlYXJCdXR0b25UaXRsZSxwPXQuY2xlYXJCdXR0b25DbGFzc05hbWUsYz12b2lkIDA9PT1wP1wiXCI6cCxsPXQuYXJpYUxhYmVsQ2xvc2UsZD12b2lkIDA9PT1sP1wiQ2xvc2VcIjpsO3JldHVybiFyfHxudWxsPT1uJiZudWxsPT1vJiZudWxsPT1hP251bGw6ZS5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse3R5cGU6XCJidXR0b25cIixjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19jbG9zZS1pY29uIFwiLmNvbmNhdChjKS50cmltKCksXCJhcmlhLWxhYmVsXCI6ZCxvbkNsaWNrOnMub25DbGVhckNsaWNrLHRpdGxlOmksdGFiSW5kZXg6LTF9KX0pKSxzLnN0YXRlPXMuY2FsY0luaXRpYWxTdGF0ZSgpLHN9cmV0dXJuIGZlKGEsW3trZXk6XCJjb21wb25lbnREaWRNb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLm9uU2Nyb2xsLCEwKX19LHtrZXk6XCJjb21wb25lbnREaWRVcGRhdGVcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByLG47ZS5pbmxpbmUmJihyPWUuc2VsZWN0ZWQsbj10aGlzLnByb3BzLnNlbGVjdGVkLHImJm4/QyhyKSE9PUMobil8fE0ocikhPT1NKG4pOnIhPT1uKSYmdGhpcy5zZXRQcmVTZWxlY3Rpb24odGhpcy5wcm9wcy5zZWxlY3RlZCksdm9pZCAwIT09dGhpcy5zdGF0ZS5tb250aFNlbGVjdGVkSW4mJmUubW9udGhzU2hvd24hPT10aGlzLnByb3BzLm1vbnRoc1Nob3duJiZ0aGlzLnNldFN0YXRlKHttb250aFNlbGVjdGVkSW46MH0pLGUuaGlnaGxpZ2h0RGF0ZXMhPT10aGlzLnByb3BzLmhpZ2hsaWdodERhdGVzJiZ0aGlzLnNldFN0YXRlKHtoaWdobGlnaHREYXRlczprdCh0aGlzLnByb3BzLmhpZ2hsaWdodERhdGVzKX0pLHQuZm9jdXNlZHx8JGUoZS5zZWxlY3RlZCx0aGlzLnByb3BzLnNlbGVjdGVkKXx8dGhpcy5zZXRTdGF0ZSh7aW5wdXRWYWx1ZTpudWxsfSksdC5vcGVuIT09dGhpcy5zdGF0ZS5vcGVuJiYoITE9PT10Lm9wZW4mJiEwPT09dGhpcy5zdGF0ZS5vcGVuJiZ0aGlzLnByb3BzLm9uQ2FsZW5kYXJPcGVuKCksITA9PT10Lm9wZW4mJiExPT09dGhpcy5zdGF0ZS5vcGVuJiZ0aGlzLnByb3BzLm9uQ2FsZW5kYXJDbG9zZSgpKX19LHtrZXk6XCJjb21wb25lbnRXaWxsVW5tb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jbGVhclByZXZlbnRGb2N1c1RpbWVvdXQoKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMub25TY3JvbGwsITApfX0se2tleTpcInJlbmRlcklucHV0Q29udGFpbmVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnByb3BzLnNob3dJY29uO3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVhY3QtZGF0ZXBpY2tlcl9faW5wdXQtY29udGFpbmVyIFwiLmNvbmNhdCh0P1wicmVhY3QtZGF0ZXBpY2tlcl9fdmlldy1jYWxlbmRhci1pY29uXCI6XCJcIil9LHQmJmUuY3JlYXRlRWxlbWVudChcInN2Z1wiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19jYWxlbmRhci1pY29uXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHZpZXdCb3g6XCIwIDAgNDQ4IDUxMlwifSxlLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNOTYgMzJWNjRINDhDMjEuNSA2NCAwIDg1LjUgMCAxMTJ2NDhINDQ4VjExMmMwLTI2LjUtMjEuNS00OC00OC00OEgzNTJWMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWNjRIMTYwVjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzk2IDE0LjMgOTYgMzJ6TTQ0OCAxOTJIMFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhINDAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjE5MnpcIn0pKSx0aGlzLnJlbmRlckFyaWFMaXZlUmVnaW9uKCksdGhpcy5yZW5kZXJEYXRlSW5wdXQoKSx0aGlzLnJlbmRlckNsZWFyQnV0dG9uKCkpfX0se2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZW5kZXJDYWxlbmRhcigpO2lmKHRoaXMucHJvcHMuaW5saW5lKXJldHVybiB0O2lmKHRoaXMucHJvcHMud2l0aFBvcnRhbCl7dmFyIHI9dGhpcy5zdGF0ZS5vcGVuP2UuY3JlYXRlRWxlbWVudChWdCx7ZW5hYmxlVGFiTG9vcDp0aGlzLnByb3BzLmVuYWJsZVRhYkxvb3B9LGUuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJyZWFjdC1kYXRlcGlja2VyX19wb3J0YWxcIix0YWJJbmRleDotMSxvbktleURvd246dGhpcy5vblBvcnRhbEtleURvd259LHQpKTpudWxsO3JldHVybiB0aGlzLnN0YXRlLm9wZW4mJnRoaXMucHJvcHMucG9ydGFsSWQmJihyPWUuY3JlYXRlRWxlbWVudChqdCx7cG9ydGFsSWQ6dGhpcy5wcm9wcy5wb3J0YWxJZCxwb3J0YWxIb3N0OnRoaXMucHJvcHMucG9ydGFsSG9zdH0scikpLGUuY3JlYXRlRWxlbWVudChcImRpdlwiLG51bGwsdGhpcy5yZW5kZXJJbnB1dENvbnRhaW5lcigpLHIpfXJldHVybiBlLmNyZWF0ZUVsZW1lbnQocXQse2NsYXNzTmFtZTp0aGlzLnByb3BzLnBvcHBlckNsYXNzTmFtZSx3cmFwcGVyQ2xhc3NOYW1lOnRoaXMucHJvcHMud3JhcHBlckNsYXNzTmFtZSxoaWRlUG9wcGVyOiF0aGlzLmlzQ2FsZW5kYXJPcGVuKCkscG9ydGFsSWQ6dGhpcy5wcm9wcy5wb3J0YWxJZCxwb3J0YWxIb3N0OnRoaXMucHJvcHMucG9ydGFsSG9zdCxwb3BwZXJNb2RpZmllcnM6dGhpcy5wcm9wcy5wb3BwZXJNb2RpZmllcnMsdGFyZ2V0Q29tcG9uZW50OnRoaXMucmVuZGVySW5wdXRDb250YWluZXIoKSxwb3BwZXJDb250YWluZXI6dGhpcy5wcm9wcy5wb3BwZXJDb250YWluZXIscG9wcGVyQ29tcG9uZW50OnQscG9wcGVyUGxhY2VtZW50OnRoaXMucHJvcHMucG9wcGVyUGxhY2VtZW50LHBvcHBlclByb3BzOnRoaXMucHJvcHMucG9wcGVyUHJvcHMscG9wcGVyT25LZXlEb3duOnRoaXMub25Qb3BwZXJLZXlEb3duLGVuYWJsZVRhYkxvb3A6dGhpcy5wcm9wcy5lbmFibGVUYWJMb29wfSl9fV0sW3trZXk6XCJkZWZhdWx0UHJvcHNcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57YWxsb3dTYW1lRGF5OiExLGRhdGVGb3JtYXQ6XCJNTS9kZC95eXl5XCIsZGF0ZUZvcm1hdENhbGVuZGFyOlwiTExMTCB5eXl5XCIsb25DaGFuZ2U6ZnVuY3Rpb24oKXt9LGRpc2FibGVkOiExLGRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uOiExLGRyb3Bkb3duTW9kZTpcInNjcm9sbFwiLG9uRm9jdXM6ZnVuY3Rpb24oKXt9LG9uQmx1cjpmdW5jdGlvbigpe30sb25LZXlEb3duOmZ1bmN0aW9uKCl7fSxvbklucHV0Q2xpY2s6ZnVuY3Rpb24oKXt9LG9uU2VsZWN0OmZ1bmN0aW9uKCl7fSxvbkNsaWNrT3V0c2lkZTpmdW5jdGlvbigpe30sb25Nb250aENoYW5nZTpmdW5jdGlvbigpe30sb25DYWxlbmRhck9wZW46ZnVuY3Rpb24oKXt9LG9uQ2FsZW5kYXJDbG9zZTpmdW5jdGlvbigpe30scHJldmVudE9wZW5PbkZvY3VzOiExLG9uWWVhckNoYW5nZTpmdW5jdGlvbigpe30sb25JbnB1dEVycm9yOmZ1bmN0aW9uKCl7fSxtb250aHNTaG93bjoxLHJlYWRPbmx5OiExLHdpdGhQb3J0YWw6ITEsc2VsZWN0c0Rpc2FibGVkRGF5c0luUmFuZ2U6ITEsc2hvdWxkQ2xvc2VPblNlbGVjdDohMCxzaG93VGltZVNlbGVjdDohMSxzaG93VGltZUlucHV0OiExLHNob3dQcmV2aW91c01vbnRoczohMSxzaG93TW9udGhZZWFyUGlja2VyOiExLHNob3dGdWxsTW9udGhZZWFyUGlja2VyOiExLHNob3dUd29Db2x1bW5Nb250aFllYXJQaWNrZXI6ITEsc2hvd0ZvdXJDb2x1bW5Nb250aFllYXJQaWNrZXI6ITEsc2hvd1llYXJQaWNrZXI6ITEsc2hvd1F1YXJ0ZXJZZWFyUGlja2VyOiExLHN0cmljdFBhcnNpbmc6ITEsdGltZUludGVydmFsczozMCx0aW1lQ2FwdGlvbjpcIlRpbWVcIixwcmV2aW91c01vbnRoQXJpYUxhYmVsOlwiUHJldmlvdXMgTW9udGhcIixwcmV2aW91c01vbnRoQnV0dG9uTGFiZWw6XCJQcmV2aW91cyBNb250aFwiLG5leHRNb250aEFyaWFMYWJlbDpcIk5leHQgTW9udGhcIixuZXh0TW9udGhCdXR0b25MYWJlbDpcIk5leHQgTW9udGhcIixwcmV2aW91c1llYXJBcmlhTGFiZWw6XCJQcmV2aW91cyBZZWFyXCIscHJldmlvdXNZZWFyQnV0dG9uTGFiZWw6XCJQcmV2aW91cyBZZWFyXCIsbmV4dFllYXJBcmlhTGFiZWw6XCJOZXh0IFllYXJcIixuZXh0WWVhckJ1dHRvbkxhYmVsOlwiTmV4dCBZZWFyXCIsdGltZUlucHV0TGFiZWw6XCJUaW1lXCIsZW5hYmxlVGFiTG9vcDohMCx5ZWFySXRlbU51bWJlcjoxMixyZW5kZXJEYXlDb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZm9jdXNTZWxlY3RlZE1vbnRoOiExLHNob3dQb3BwZXJBcnJvdzohMCxleGNsdWRlU2Nyb2xsYmFyOiEwLGN1c3RvbVRpbWVJbnB1dDpudWxsLGNhbGVuZGFyU3RhcnREYXk6dm9pZCAwfX19XSksYX0oKSwkdD1cImlucHV0XCIsR3Q9XCJuYXZpZ2F0ZVwiO2V4cG9ydHtCdCBhcyBDYWxlbmRhckNvbnRhaW5lcix6dCBhcyBkZWZhdWx0LFplIGFzIGdldERlZmF1bHRMb2NhbGUsSmUgYXMgcmVnaXN0ZXJMb2NhbGUsWGUgYXMgc2V0RGVmYXVsdExvY2FsZX07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG4vKipcbiAqIEBpbnRlcmZhY2UgVGhlbWVcbiAqIEBsb2FkIC4vdGhlbWUuZG9jLm1kXG4gKiBAc2VjdGlvbiBkZXNpZ24tc3lzdGVtXG4gKi9cblxuLyoqXG4gKiBDb2xvciBwYWxldHRlLlxuICpcbiAqIEBtZW1iZXJvZiBUaGVtZVxuICogQGFsaWFzIGNvbG9yc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHByaW1hcnkxMDA9IzQyNjhGNiAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjNDI2OEY2OyBoZWlnaHQ6IDIwcHg7XCIgLz5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcmltYXJ5ODA9IzY0ODNGOCAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6ICM2NDgzRjg7IGhlaWdodDogMjBweDtcIiAvPlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHByaW1hcnk2MD0jODc5RkZBICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDogIzg3OUZGQTsgaGVpZ2h0OiAyMHB4O1wiIC8+XG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJpbWFyeTQwPSNBOUJBRkEgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjQTlCQUZBOyBoZWlnaHQ6IDIwcHg7XCIgLz5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcmltYXJ5MjA9I0NCRDVGRCAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6ICNDQkQ1RkQ7IGhlaWdodDogMjBweDtcIiAvPlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFjY2VudD0jMzhDQUYxICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6ICMzOENBRjE7IGhlaWdodDogMjBweDtcIiAvPlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxvdmU9I2U2MjgyYiAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZTYyODJiOyBoZWlnaHQ6IDIwcHg7XCIgLz5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBncmV5MTAwPSMxQzFDMzggICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjMUMxQzM4OyBoZWlnaHQ6IDIwcHg7XCIgLz5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBncmV5ODA9IzQ1NDY1NSAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjNDU0NjU1OyBoZWlnaHQ6IDIwcHg7XCIgLz5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBncmV5NjA9Izg5OEE5QSAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjODk4QTlBOyBoZWlnaHQ6IDIwcHg7XCIgLz5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBncmV5NDA9I0MwQzBDQSAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjQzBDMENBOyBoZWlnaHQ6IDIwcHg7XCIgLz5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBncmV5MjA9I0Y2RjdGQiAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjRjZGN0ZCOyBoZWlnaHQ6IDIwcHg7XCIgLz5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3aGl0ZT0jZmZmICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6ICNmZmY7IGhlaWdodDogMjBweDtcIiAvPlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGVycm9yRGFyaz0jREU0MDVEICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDogI0RFNDA1RDsgaGVpZ2h0OiAyMHB4O1wiIC8+XG4gKiBAcHJvcGVydHkge3N0cmluZ30gZXJyb3I9I0ZGNDU2NyAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6ICNGRjQ1Njc7IGhlaWdodDogMjBweDtcIiAvPlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGVycm9yTGlnaHQ9I0ZGQTVCNSAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjRkZBNUI1OyBoZWlnaHQ6IDIwcHg7XCIgLz5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdWNjZXNzRGFyaz0jMzJBODg3ICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDogIzMyQTg4NzsgaGVpZ2h0OiAyMHB4O1wiIC8+XG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3VjY2Vzcz0jNzBDOUIwICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDogIzcwQzlCMDsgaGVpZ2h0OiAyMHB4O1wiIC8+XG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3VjY2Vzc0xpZ2h0PSNEQkYwRjEgICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDogI0RCRjBGMTsgaGVpZ2h0OiAyMHB4O1wiIC8+XG4gKiBAcHJvcGVydHkge3N0cmluZ30gaW5mb0Rhcms9IzQyNjhGNiAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjNDI2OEY2OyBoZWlnaHQ6IDIwcHg7XCIgLz5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbmZvPSM4NzlGRkEgICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDogIzg3OUZGQTsgaGVpZ2h0OiAyMHB4O1wiIC8+XG4gKiBAcHJvcGVydHkge3N0cmluZ30gaW5mb0xpZ2h0PSNDQkQ1RkQgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjQ0JENUZEOyBoZWlnaHQ6IDIwcHg7XCIgLz5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmaWx0ZXJCZz0jMzQzRjg3ICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6ICMzNDNGODc7IGhlaWdodDogMjBweDtcIiAvPlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGhvdmVyQmc9IzUzNUI4RSAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6ICM1MzVCOEU7IGhlaWdodDogMjBweDtcIiAvPlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlucHV0Qm9yZGVyPSM4OThBOUEgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjODk4QTlBOyBoZWlnaHQ6IDIwcHg7XCIgLz5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBib3JkZXI9I0RERTFFNSwgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjRERFMUU1OyBoZWlnaHQ6IDIwcHg7XCIgLz5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZXBhcmF0b3I9I0MwQzBDQSAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQ6ICNDMEMwQ0E7IGhlaWdodDogMjBweDtcIiAvPlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGhpZ2hsaWdodD0jRjZGN0ZCICAgICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDogI0Y2RjdGQjsgaGVpZ2h0OiAyMHB4O1wiIC8+XG4gKiBAcHJvcGVydHkge3N0cmluZ30gZmlsdGVySW5wdXRCb3JkZXI9cmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpOyBoZWlnaHQ6IDIwcHg7XCIgLz5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmaWx0ZXJEaXNhYmxlZD1yZ2JhKDgzLDkxLDE0MiwwLjA1KSAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiByZ2JhKDgzLDkxLDE0MiwwLjA1KTsgaGVpZ2h0OiAyMHB4O1wiIC8+XG4gKiBAcHJvcGVydHkge3N0cmluZ30gYmc9I0Y2RjdGQiAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjRjZGN0ZCOyBoZWlnaHQ6IDIwcHg7XCIgLz5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbG9ycyA9IHtcbiAgLy8gZ2xvYmFsXG4gIGJvcmRlcjogJyNFRUVFRUYnLFxuICB0ZXh0OiAnIzBDMUUyOScsXG4gIC8vIHByaW1hcnlcbiAgcHJpbWFyeTEwMDogJyMzMDQwRDYnLFxuICBwcmltYXJ5ODA6ICcjNjQ4M0Y4JyxcbiAgcHJpbWFyeTYwOiAnIzk5QTlFRScsXG4gIHByaW1hcnk0MDogJyNCQkM1RjQnLFxuICBwcmltYXJ5MjA6ICcjRERFMkY5JyxcbiAgLy8gYWNjZW50XG4gIGFjY2VudDogJyMzQjM1NTInLFxuICAvLyBncmV5XG4gIGdyZXkxMDA6ICcjMEMxRTI5JyxcbiAgZ3JleTgwOiAnIzQ1NDY1NScsXG4gIGdyZXk2MDogJyM4OThBOUEnLFxuICBncmV5NDA6ICcjQkJDM0NCJyxcbiAgZ3JleTIwOiAnI0YyRjJGMicsXG4gIC8vIGNvbW1vblxuICB3aGl0ZTogJyNmZmYnLFxuICBibGFjazogJyMwMDAnLFxuICAvLyBhbGVydHNcbiAgZXJyb3JEYXJrOiAnIzlkMDYxNicsXG4gIGVycm9yOiAnI0MyMDAxMicsXG4gIGVycm9yTGlnaHQ6ICcjRjlFNUU3JyxcbiAgc3VjY2Vzc0Rhcms6ICcjMDA3RDdGJyxcbiAgc3VjY2VzczogJyMwMDdEN0YnLFxuICBzdWNjZXNzTGlnaHQ6ICcjRTVGMkYyJyxcbiAgd2FybmluZ0Rhcms6ICcjQTE0RjE3JyxcbiAgd2FybmluZzogJyNBMTRGMTcnLFxuICB3YXJuaW5nTGlnaHQ6ICcjRjZFREU4JyxcbiAgaW5mb0Rhcms6ICcjNDI2OEY2JyxcbiAgaW5mbzogJyMzMDQwRDYnLFxuICBpbmZvTGlnaHQ6ICcjQ0JENUZEJyxcbiAgLy8gYmFja2dyb3VuZHNcbiAgYmc6ICcjRjhGOUY5JyxcbiAgZmlsdGVyQmc6ICcjRkJGQkZCJyxcbiAgY29udGFpbmVyOiAnI0ZGRkZGRicsXG4gIHNpZGViYXI6ICcjRkZGRkZGJyxcbiAgLy8gZWxlbWVudHNcbiAgaW5wdXRCb3JkZXI6ICcjQkJDM0NCJyxcbiAgc2VwYXJhdG9yOiAnI0JCQzNDQicsXG4gIGhpZ2hsaWdodDogJyNGMkYyRjInLFxuICAvLyBBZG1pbkpTIGxvZ28gY29sb3JcbiAgbG92ZTogJyM0RDcwRUInXG59O1xuZXhwb3J0IGNvbnN0IENvbG9yVmFyaWFudHMgPSB7XG4gIHByaW1hcnk6ICdwcmltYXJ5MTAwJyxcbiAgc2Vjb25kYXJ5OiAnYWNjZW50JyxcbiAgZGFuZ2VyOiAnZXJyb3InLFxuICBzdWNjZXNzOiAnc3VjY2VzcycsXG4gIGluZm86ICdpbmZvJyxcbiAgd2FybmluZzogJ3dhcm5pbmcnLFxuICB0ZXh0OiAndGV4dCdcbn07XG4vKipcbiAqIFNpemVzIGNhbiBiZSB1c2VkIHdpdGggcGFkZGluZ3MsIG1hcmdpbnMgZXRjLlxuICpcbiAqIFRoaXMgaXMgdGhlIGV4YW1wbGUgb2YgdXNpbmcgcmVzcG9uc2l2ZSBtYXJnaW4gd2l0aCBCb3ggY29tcG9uZW50XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogPEJveCBwPVsnZGVmYXVsdCcsICd4bCddPnNvbWUgY29udGVudDwvQm94PlxuICogYGBgXG4gKlxuICogVGhpcyBjb21wb25lbnQgd2lsbCBoYXZlIDhweCBwYWRkaW5nIGZvciBsb3dlc3QgYnJlYWtwb2ludCBhbmQgMjRweCBhYm92ZVxuICogdGhpcyBicmVha3BvaW50LlxuICpcbiAqIEBtZW1iZXJvZiBUaGVtZVxuICogQGFsaWFzIHNwYWNlXG5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB4cz0ycHggICAgICAgIDJweCAtIDxzcGFuIGNsYXNzPVwic3BhY2UtYm94XCIgc3R5bGU9XCJ3aWR0aDogMnB4O1wiIC8+XG4gKiBAcHJvcGVydHkge3N0cmluZ30gc209NHB4ICAgICAgICA0cHggLSA8c3BhbiBjbGFzcz1cInNwYWNlLWJveFwiIHN0eWxlPVwid2lkdGg6IDRweDtcIiAvPlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRlZmF1bHQ9OHB4ICAgOHB4IC0gPHNwYW4gY2xhc3M9XCJzcGFjZS1ib3hcIiBzdHlsZT1cIndpZHRoOiA4cHg7XCIgLz4gKGFsaWFzIG1kKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxnPTE2cHggICAgICAgMTZweCAtIDxzcGFuIGNsYXNzPVwic3BhY2UtYm94XCIgc3R5bGU9XCJ3aWR0aDogMTZweDtcIiAvPlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHhsPTI0cHggICAgICAgMjRweCAtIDxzcGFuIGNsYXNzPVwic3BhY2UtYm94XCIgc3R5bGU9XCJ3aWR0aDogMjRweDtcIiAvPlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHh4bD0zMnB4ICAgICAgMzJweCAtIDxzcGFuIGNsYXNzPVwic3BhY2UtYm94XCIgc3R5bGU9XCJ3aWR0aDogMzJweDtcIiAvPlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHgzPTQ4cHggICAgICAgNDhweCAtIDxzcGFuIGNsYXNzPVwic3BhY2UtYm94XCIgc3R5bGU9XCJ3aWR0aDogNDhweDtcIiAvPlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHg0PTY0cHggICAgICAgNjRweCAtIDxzcGFuIGNsYXNzPVwic3BhY2UtYm94XCIgc3R5bGU9XCJ3aWR0aDogNjRweDtcIiAvPlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHg1PTgwcHggICAgICAgODBweCAtIDxzcGFuIGNsYXNzPVwic3BhY2UtYm94XCIgc3R5bGU9XCJ3aWR0aDogODBweDtcIiAvPlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHg2PTEyOHB4ICAgICAgMTI4cHggLSA8c3BhbiBjbGFzcz1cInNwYWNlLWJveFwiIHN0eWxlPVwid2lkdGg6IDEyOHB4O1wiIC8+XG4gKi9cbmV4cG9ydCBjb25zdCBzcGFjZSA9IHtcbiAgeHM6ICcycHgnLFxuICBzbTogJzRweCcsXG4gIGRlZmF1bHQ6ICc4cHgnLFxuICBtZDogJzhweCcsXG4gIGxnOiAnMTZweCcsXG4gIHhsOiAnMjRweCcsXG4gIHh4bDogJzMycHgnLFxuICB4MzogJzQ4cHgnLFxuICB4NDogJzY0cHgnLFxuICB4NTogJzgwcHgnLFxuICB4NjogJzEyOHB4J1xufTtcblxuLyoqXG4gKiBAbWVtYmVyb2YgVGhlbWVcbiAqIEBhbGlhcyBzaXplc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hdmJhckhlaWdodD02NHB4XG4gKiBAcHJvcGVydHkge3N0cmluZ30gc2lkZWJhcldpZHRoPTMwMHB4XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWF4Rm9ybVdpZHRoPTc0MHB4XG4gKi9cbmV4cG9ydCBjb25zdCBzaXplcyA9IHtcbiAgbmF2YmFySGVpZ2h0OiAnNjRweCcsXG4gIHNpZGViYXJXaWR0aDogJzMwMHB4JyxcbiAgbWF4Rm9ybVdpZHRoOiAnNzQwcHgnXG59O1xuXG4vKipcbiAqIEBtZW1iZXJvZiBUaGVtZVxuICogQGFsaWFzIGZvbnRTaXplc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHhzPTEwcHggICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAxMHB4O1wiPid4cycgZm9udCBzaXplPC9kaXY+XG4gKiBAcHJvcGVydHkge3N0cmluZ30gc209MTJweCAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDEycHg7XCI+J3NtJyBmb250IHNpemU8L2Rpdj5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkZWZhdWx0PTE0cHggKGFsaWFzIG1kKSA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiPidkZWZhdWx0JyBmb250IHNpemU8L2Rpdj5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsZz0xNnB4ICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMTZweDtcIj4nbGcnIGZvbnQgc2l6ZTwvZGl2PlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHhsPTE4cHggICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1wiPid4bCcgZm9udCBzaXplPC9kaXY+XG4gKiBAcHJvcGVydHkge3N0cmluZ30gaDQ9MjRweCAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDI0cHg7XCI+J2g0JyBmb250IHNpemU8L2Rpdj5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBoMz0yOHB4ICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMjhweDtcIj4naDMnIGZvbnQgc2l6ZTwvZGl2PlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGgyPTMycHggICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAzMnB4O1wiPidoMicgZm9udCBzaXplPC9kaXY+XG4gKiBAcHJvcGVydHkge3N0cmluZ30gaDE9NDBweCAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDQwcHg7XCI+J2gxJyBmb250IHNpemU8L2Rpdj5cbiAqL1xuZXhwb3J0IGNvbnN0IGZvbnRTaXplcyA9IHtcbiAgeHM6ICcxMHB4JyxcbiAgc206ICcxMnB4JyxcbiAgZGVmYXVsdDogJzE0cHgnLFxuICBtZDogJzE0cHgnLFxuICBsZzogJzE2cHgnLFxuICB4bDogJzE4cHgnLFxuICBoNDogJzI0cHgnLFxuICBoMzogJzI4cHgnLFxuICBoMjogJzMycHgnLFxuICBoMTogJzQwcHgnXG59O1xuXG4vKipcbiAqIEBtZW1iZXJvZiBUaGVtZVxuICogQGFsaWFzIGZvbnRXZWlnaHRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGlnaHRlcj0yMDBcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsaWdodGVyPTMwMFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5vcm1hbD00MDBcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBub3JtYWw9NTAwXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYm9sZGVyPTkwMFxuICovXG5leHBvcnQgY29uc3QgZm9udFdlaWdodHMgPSB7XG4gIGxpZ2h0ZXI6IDIwMCxcbiAgbGlnaHQ6IDMwMCxcbiAgbm9ybWFsOiA0MDAsXG4gIGJvbGQ6IDcwMCxcbiAgYm9sZGVyOiA5MDBcbn07XG5cbi8qKlxuICogQG1lbWJlcm9mIFRoZW1lXG4gKiBAYWxpYXMgbGluZUhlaWdodHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB4cz0xMHB4XG4gKiBAcHJvcGVydHkge3N0cmluZ30gc209MTJweFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRlZmF1bHQ9MTZweCAoYWxpYXMgbWQpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGc9MjRweFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHhsPTMycHhcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB4eGw9NDBweFxuICovXG5leHBvcnQgY29uc3QgbGluZUhlaWdodHMgPSB7XG4gIHhzOiAnMTBweCcsXG4gIHNtOiAnMTJweCcsXG4gIGRlZmF1bHQ6ICcxNnB4JyxcbiAgbWQ6ICcxNnB4JyxcbiAgbGc6ICcyNHB4JyxcbiAgeGw6ICczMnB4JyxcbiAgeHhsOiAnNDBweCdcbn07XG5cbi8qKlxuICogVGhpcyBkaW1lbnNpb24gY2FuIGJlIHVzZWQgd2l0aCBgdGVzdFNoYWRvd2AgYW5kIGBib3hTaGFkb3dgIHByb3BzIHByb3ZpZGVkXG4gKiBieSB7QGxpbmsgU2hhZG93UHJvcHN9XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogPEJveCB2YXJpYW50PVwiZ3JleVwiIGJveFNoYWRvdz1cImNhcmRcIj5Tb21lIGNvbnRlbnQuLi48L0JveD5cbiAqIGBgYFxuICpcbiAqIEBhbGlhcyBzaGFkb3dzXG4gKiBAbWVtYmVyb2YgVGhlbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsb2dpbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoYWRvdy1kaXZcIiBzdHlsZT1cImJveC1zaGFkb3c6IDAgMTVweCAyNHB4IDAgcmdiYSgxMzcsMTM4LDE1NCwwLjE1KTtcIi8+XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2FyZEhvdmVyICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGFkb3ctZGl2XCIgc3R5bGU9XCJib3gtc2hhZG93OiAwIDRweCAxMnB4IDAgcmdiYSgxMzcsMTM4LDE1NCwwLjQpO1wiLz5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkcmF3ZXIgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoYWRvdy1kaXZcIiBzdHlsZT1cImJveC1zaGFkb3c6IC0ycHggMCA4cHggMCByZ2JhKDEzNywxMzgsMTU0LDAuMik7XCIvPlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNhcmQgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hhZG93LWRpdlwiIHN0eWxlPVwiYm94LXNoYWRvdzogMCAxcHggNnB4IDAgcmdiYSgxMzcsMTM4LDE1NCwwLjQpO1wiLz5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbnB1dEZvY3VzICAgICAgICAgPGRpdiBjbGFzcz1cInNoYWRvdy1kaXZcIiBzdHlsZT1cImJveC1zaGFkb3c6IDAgMnB4IDRweCAwIHJnYmEoMTM1LDE1OSwyNTAsMC40KTtcIi8+XG4gKiBAcHJvcGVydHkge3N0cmluZ30gYnV0dG9uRm9jdXMgICAgICAgIDxkaXYgY2xhc3M9XCJzaGFkb3ctZGl2XCIgc3R5bGU9XCJib3gtc2hhZG93OiAwIDRweCA2cHggMCByZ2JhKDU2LDIwMiwyNDEsMC4zKTtcIi8+XG4gKi9cbmV4cG9ydCBjb25zdCBzaGFkb3dzID0ge1xuICBsb2dpbjogJzAgMTVweCAyNHB4IDAgcmdiYSgxMzcsMTM4LDE1NCwwLjE1KScsXG4gIGNhcmRIb3ZlcjogJzAgNHB4IDEycHggMCByZ2JhKDEzNywxMzgsMTU0LDAuNCknLFxuICBkcmF3ZXI6ICctMnB4IDAgOHB4IDAgcmdiYSgxMzcsMTM4LDE1NCwwLjIpJyxcbiAgY2FyZDogJzByZW0gMC4yNXJlbSAwLjVyZW0gcmdiYSgwLCAwLCAwLCAwLjEpJyxcbiAgaW5wdXRGb2N1czogJzAgMnB4IDRweCAwIHJnYmEoMTM1LDE1OSwyNTAsMC40KScsXG4gIGJ1dHRvbkZvY3VzOiAnMCA0cHggNnB4IDAgcmdiYSg1NiwyMDIsMjQxLDAuMyknXG59O1xuXG4vKipcbiAqIFJlc3BvbnNpdmUgYnJlYWtwb2ludHNcbiAqXG4gKiBIb3cgdG8gdXNlIHRoZW0gLSBzaW1wbHkgcGFzcyBhbiBhcnJheSB0byBnaXZlbiBwcm9wOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIC8vIFNob3dpbmcgYm94IG9uIG1vYmlsZSBkZXZpY2VzXG4gKiA8Qm94IGRpc3BsYXk9e1tcImJsb2NrXCIsIFwibm9uZVwiXX0+Li4uPC9Cb3g+XG4gKlxuICogLy8gcmVzcG9uc2l2ZSB3aWR0aFxuICogPEJveCB3aWR0aD17WzEsIDEvMiwgMS8zLCAxLzRdfT4uLi48L0JveD5cbiAqIGBgYFxuICpcbiAqIEBtZW1iZXJvZiBUaGVtZVxuICogQGFsaWFzIGJyZWFrcG9pbnRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gMD01NzdweFxuICogQHByb3BlcnR5IHtzdHJpbmd9IDE9NzY5cHhcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSAyPTEwMjRweFxuICogQHByb3BlcnR5IHtzdHJpbmd9IDM9MTMyNHB4XG4gKi9cbmV4cG9ydCBjb25zdCBicmVha3BvaW50cyA9IFsnNTc3cHgnLCAnNzY5cHgnLCAnMTAyNHB4JywgJzEzMjRweCcgLy8gMTAyNCArIHNpZGViYXJXaWR0aFxuXTtcblxuZXhwb3J0IGNvbnN0IGZvbnQgPSAnXFwnUm9ib3RvXFwnLCBzYW5zLXNlcmlmJztcblxuLyoqXG4gKiBCb3JkZXIgc3R5bGVzXG4gKlxuICogQG1lbWJlcm9mIFRoZW1lXG4gKiBAYWxpYXMgYm9yZGVyc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGlucHV0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gZmlsdGVySW5wdXRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBiZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGRlZmF1bHRcbiAqL1xuZXhwb3J0IGNvbnN0IGJvcmRlcnMgPSB7XG4gIGlucHV0OiBgMXB4IHNvbGlkICR7Y29sb3JzLmJvcmRlcn1gLFxuICBmaWx0ZXJJbnB1dDogJyAxcHggcmdiYSgyNTUsMjU1LDI1NSwgMC4xNSknLFxuICBiZzogYDFweCBzb2xpZCAke2NvbG9ycy5iZ31gLFxuICBkZWZhdWx0OiBgMXB4IHNvbGlkICR7Y29sb3JzLmJvcmRlcn1gXG59O1xuXG4vKipcbiAqIEJvcmRlciB3aWR0aHMgc2V0IGZvciBhbiBlbnRpcmUgbGF5b3V0LiBJZiB5b3UgbGlrZSB0byBoYXZlIGJvcmRlciByYWRpdXMgaW4gQnV0dG9uJ3MgYW5kIEJveCdlc1xuICogVGhlbiBzZXQgZGVmYXVsdCBwcm9wZXJ0eS5cbiAqXG4gKiBAbWVtYmVyb2YgVGhlbWVcbiAqIEBhbGlhcyBib3JkZXJXaWR0aHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkZWZhdWx0IC0gZGVmYXVsdCBib3JkZXIgd2l0aFxuICovXG5leHBvcnQgY29uc3QgYm9yZGVyV2lkdGhzID0ge1xuICBkZWZhdWx0OiAnMHB4J1xufTtcbi8vIFRPRE86IGFkZCB0cmFuc2l0aW9uc1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFByb3BzID0ge307XG5cbi8qKlxuICogVGhlIGNvbG9yIHV0aWxpdHkgcGFyc2VzIGEgY29tcG9uZW50J3MgY29sb3IgYW5kIGJnIHByb3BzIGFuZCBjb252ZXJ0cyB0aGVtIGludG8gQ1NTXG4gKiBkZWNsYXJhdGlvbnMuIEJ5IGRlZmF1bHQgdGhlIHJhdyB2YWx1ZSBvZiB0aGUgcHJvcCBpcyByZXR1cm5lZC4gQnV0IG1vc3Qgb2Z0ZW4geW91XG4gKiB3b3VsZCB1c2Ugb25lIG9mIHRoZSBjb2xvciBmcm9tIHRoZSBbY29sb3IgcGFsZXR0ZV17QGxpbmsgY29sb3JzfS5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDb2xvclByb3BzXG4gKiBAYWxpYXMgQ29sb3JQcm9wc1xuICogQG1lbWJlcm9mIFRoZW1lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NvbG9yXSAgICAgICAgICAgICAgICAgVGV4dCBjb2xvci4gSXQgY291bGQgYmUgZWl0aGVyIGEgI2hhc2ggb3JcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7QGxpbmsgY29sb3JzfSBmcm9tIGNzcyB0aGVtZSBuYW1lIGxpa2VcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZ3JleTgwYFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtiYWNrZ3JvdW5kQ29sb3IsIGJnXSAgIEJhY2tncm91bmQgY29sb3IuIFNpbWlsYXIgYXMgYWJvdmUgY291bGQgYmUgYVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNoYXNoIG9yIG9uZSBvZiB7QGxpbmsgY29sb3JzfS5cbiAqL1xuXG4vKipcbiAqIFRoZSBzcGFjZSB1dGlsaXR5IGNvbnZlcnRzIHNob3J0aGFuZCBtYXJnaW4gYW5kIHBhZGRpbmcgcHJvcHMgdG8gbWFyZ2luIGFuZCBwYWRkaW5nXG4gKiBDU1MgZGVjbGFyYXRpb25zLlxuICpcbiAqIFlvdSBjYW4gdXNlIGFzIGEgdmFsdWUgcmF3IGRpbWVuc2lvbnMgaW4gXCJweFwiIG9yIG9uZSBvZiB0aGUgdmFsdWUgZnJvbSB0aGVcbiAqIFtzcGFjZSBzY2FsZV17QGxpbmsgc3BhY2V9LlxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNwYWNlUHJvcHNcbiAqIEBhbGlhcyBTcGFjZVByb3BzXG4gKiBAbWVtYmVyb2YgVGhlbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbWFyZ2luLCBtXSAgICAgICAgICAgICBtYXJnaW5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbWFyZ2luVG9wLCBtdF0gICAgICAgICBtYXJnaW4tdG9wXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21hcmdpblJpZ2h0LCBtcl0gICAgICAgbWFyZ2luLXJpZ2h0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21hcmdpbkJvdHRvbSwgbWJdICAgICAgbWFyZ2luLWJvdHRvbVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttYXJnaW5MZWZ0LCBtbF0gICAgICAgIG1hcmdpbi1sZWZ0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21hcmdpblgsIG14XSAgICAgICAgICAgbWFyZ2luLWxlZnQgYW5kIG1hcmdpbi1yaWdodFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttYXJnaW5ZLCBteV0gICAgICAgICAgIG1hcmdpbi10b3AgYW5kIG1hcmdpbi1ib3R0b21cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGFkZGluZywgcF0gICAgICAgICAgICBwYWRkaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BhZGRpbmdUb3AsIHB0XSAgICAgICAgcGFkZGluZy10b3BcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGFkZGluZ1JpZ2h0LCBwcl0gICAgICBwYWRkaW5nLXJpZ2h0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BhZGRpbmdCb3R0b20sIHBiXSAgICAgcGFkZGluZy1ib3R0b21cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGFkZGluZ0xlZnQsIHBsXSAgICAgICBwYWRkaW5nLWxlZnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGFkZGluZ1gsIHB4XSAgICAgICAgICBwYWRkaW5nLWxlZnQgYW5kIHBhZGRpbmctcmlnaHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGFkZGluZ1ksIHB5XSAgICAgICAgICBwYWRkaW5nLXRvcCBhbmQgcGFkZGluZy1ib3R0b21cbiAqXG4gKiBTZXQgb2YgcHJvcHMgcmVsYXRlZCB0byB7QGxpbmsgc3BhY2V9LiBZb3UgY2FuIHB1dCB0aGVyZSBlaXRoZXIgc3RyaW5nIHdpdGggJ3B4JyBvclxuICogb25lIG9mIGBzcGFjZWAgcHJvcGVydGllcyBsaWtlIGBzbWAsIGBkZWZhdWx0YCwgYHhsYCBldGMuXG4gKi9cblxuLyoqXG4gKiBUeXBvZ3JhcGh5IHByb3BzIGluY2x1ZGUgX2ZvbnRGYW1pbHlfLCBfZm9udFNpemVfLCBfZm9udFdlaWdodF8sIF9saW5lSGVpZ2h0XywgX2xldHRlclNwYWNpbmdfLFxuICogX3RleHRBbGlnbl8sIGFuZCBfZm9udFN0eWxlXy5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBUeXBvZ3JhcGh5UHJvcHNcbiAqIEBhbGlhcyBUeXBvZ3JhcGh5UHJvcHNcbiAqIEBtZW1iZXJvZiBUaGVtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtmb250U2l6ZV0gICAgZm9udC1zaXplLiBDb3VsZCBiZSBlaXRoZXIgYWN0dWFsIGNzcyB2YWx1ZSBvciBrZXkgdGFrZW4gZnJvbVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0BsaW5rIGZvbnRTaXplc31cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZm9udFdlaWdodF0gIGZvbnQtd2VpZ2h0LiBDb3VsZCBiZSBlaXRoZXIgYWN0dWFsIGNzcyB2YWx1ZSBvciBrZXkgdGFrZW4gZnJvbVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0BsaW5rIGZvbnRXZWlnaHRzfVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtsaW5lSGVpZ2h0XSAgbGluZS1oZWlnaHQuIENvdWxkIGJlIGVpdGhlciBhY3R1YWwgY3NzIHZhbHVlIG9yIGtleSB0YWtlbiBmcm9tXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7QGxpbmsgbGluZUhlaWdodHN9XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3RleHRBbGlnbl0gICB0ZXh0LWFsaWduXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ZvbnRGYW1pbHldICBmb250LWZhbWlseVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtmb250U3R5bGVdICAgZm9udC1zdHlsZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtsZXR0ZXJTcGFjaW5nXSAgbGV0dGVyLXNwYWNpbmdcbiAqL1xuXG4vKipcbiAqIFRoZSBsYXlvdXQgdXRpbGl0eSBpbmNsdWRlcyBzdHlsZSBwcm9wcyBmb3Igd2lkdGgsIGhlaWdodCwgZGlzcGxheSwgbWluV2lkdGgsXG4gKiBtaW5IZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHNpemUsIHZlcnRpY2FsQWxpZ24sIG92ZXJmbG93LCBvdmVyZmxvd1gsIGFuZCBvdmVyZmxvd1kuXG4gKlxuICogVGhlIHdpZHRoIHByb3AgaXMgdHJhbnNmb3JtZWQgYmFzZWQgb24gdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAtIE51bWJlcnMgZnJvbSAwLTEgYXJlIGNvbnZlcnRlZCB0byBwZXJjZW50YWdlIHdpZHRocy5cbiAqIC0gTnVtYmVycyBncmVhdGVyIHRoYW4gMSBhcmUgY29udmVydGVkIHRvIHBpeGVsIHZhbHVlcy5cbiAqIC0gU3RyaW5nIHZhbHVlcyBhcmUgcGFzc2VkIGFzIHJhdyBDU1MgdmFsdWVzLlxuICogLSBBbmQgYXJyYXlzIGFyZSBjb252ZXJ0ZWQgdG8gcmVzcG9uc2l2ZSB3aWR0aCBzdHlsZXMuXG4gKiAtIHRoZSB3aWR0aCBwcm9wIHdpbGwgYXR0ZW1wdCB0byBwaWNrIHVwIHZhbHVlcyBmcm9tIHRoZSB7QGxpbmsgc2l6ZXN9XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIHdpZHRoIGA1MCVgXG4gKiA8Qm94IHdpZHRoPXsxLzJ9IC8+XG4gKlxuICogLy8gd2lkdGggYDI1NnB4YFxuICogPEJveCB3aWR0aD17MjU2fSAvPlxuICpcbiAqIC8vIHdpZHRoIGAnMmVtJ2BcbiAqIDxCb3ggd2lkdGg9JzJlbScgLz5cbiAqXG4gKiAvLyB3aWR0aCBgMTAwJWAgb24gYWxsIHZpZXdwb3J0IGFuZCBgNTAlYCBmcm9tIHRoZSBzbWFsbGVzdCBicmVha3BvaW50IGFuZCB1cFxuICogPEJveCB3aWR0aD17WyAxLCAxLzIgXX0gLz5cbiAqXG4gKiAvLyB3aWR0aCBmcm9tIGBzaXplc2BcbiAqIDxCb3ggaGVpZ2h0PSduYXZiYXJIZWlnaHQnIC8+XG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gTGF5b3V0UHJvcHNcbiAqIEBhbGlhcyBMYXlvdXRQcm9wc1xuICogQG1lbWJlcm9mIFRoZW1lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3dpZHRoXSAgICAgICAgIHdpZHRoXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2hlaWdodF0gICAgICAgIGhlaWdodFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkaXNwbGF5XSAgICAgICBkaXNwbGF5XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21pbldpZHRoXSAgICAgIG1pbi13aWR0aFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttaW5IZWlnaHRdICAgICBtaW4taGVpZ2h0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21heFdpZHRoXSAgICAgIG1heC13aWR0aFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttYXhIZWlnaHRdICAgICBtYXgtaGVpZ2h0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NpemVdICAgICAgICAgIHNpemVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdmVydGljYWxBbGlnbl0gdmVydGljYWwtYWxpZ25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbb3ZlcmZsb3ddICAgICAgb3ZlcmZsb3dcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbb3ZlcmZsb3dYXSAgICAgb3ZlcmZsb3cteFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtvdmVyZmxvd1ldICAgICBvdmVyZmxvdy15XG4gKi9cblxuLyoqXG4gKiBUaGUgZmxleGJveCB1dGlsaXR5IGluY2x1ZGVzIHN0eWxlIHByb3BzIGZvciBhbGlnbkl0ZW1zLCBhbGlnbkNvbnRlbnQsIGp1c3RpZnlJdGVtcyxcbiAqIGp1c3RpZnlDb250ZW50LCBmbGV4V3JhcCwgZmxleERpcmVjdGlvbiwgZmxleCwgZmxleEdyb3csIGZsZXhTaHJpbmssIGZsZXhCYXNpcyxcbiAqIGp1c3RpZnlTZWxmLCBhbGlnblNlbGYsIGFuZCBvcmRlci5cbiAqXG4gKiBUaGUgd2lkdGggcHJvcCBpcyB0cmFuc2Zvcm1lZCBiYXNlZCBvbiB0aGUgZm9sbG93aW5nOlxuICpcbiAqIC0gTnVtYmVycyBmcm9tIDAtMSBhcmUgY29udmVydGVkIHRvIHBlcmNlbnRhZ2Ugd2lkdGhzLlxuICogLSBOdW1iZXJzIGdyZWF0ZXIgdGhhbiAxIGFyZSBjb252ZXJ0ZWQgdG8gcGl4ZWwgdmFsdWVzLlxuICogLSBTdHJpbmcgdmFsdWVzIGFyZSBwYXNzZWQgYXMgcmF3IENTUyB2YWx1ZXMuXG4gKiAtIEFuZCBhcnJheXMgYXJlIGNvbnZlcnRlZCB0byByZXNwb25zaXZlIHdpZHRoIHN0eWxlcy5cbiAqIC0gdGhlIHdpZHRoIHByb3Agd2lsbCBhdHRlbXB0IHRvIHBpY2sgdXAgdmFsdWVzIGZyb20gdGhlIHtAbGluayBzaXplc31cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gYWxpZ25JdGVtc1xuICogPEJveCBhbGlnbkl0ZW1zPSdjZW50ZXInIC8+XG4gKlxuICogLy8gYWxpZ25Db250ZW50XG4gKiA8Qm94IGFsaWduQ29udGVudD0nY2VudGVyJyAvPlxuICpcbiAqIC8vIGp1c3RpZnlDb250ZW50XG4gKiA8Qm94IGp1c3RpZnlDb250ZW50PSdjZW50ZXInIC8+XG4gKlxuICogLy8gZmxleFdyYXBcbiAqIDxCb3ggZmxleFdyYXA9J3dyYXAnIC8+XG4gKlxuICogLy8gZmxleEJhc2lzXG4gKiA8Qm94IGZsZXhCYXNpcz0nYXV0bycgLz5cbiAqXG4gKiAvLyBmbGV4RGlyZWN0aW9uXG4gKiA8Qm94IGZsZXhEaXJlY3Rpb249J2NvbHVtbicgLz5cbiAqXG4gKiAvLyBmbGV4XG4gKiA8Qm94IGZsZXggLz5cbiAqXG4gKiAvLyBqdXN0aWZ5U2VsZlxuICogPEJveCBqdXN0aWZ5U2VsZj0nY2VudGVyJyAvPlxuICpcbiAqIC8vIGFsaWduU2VsZlxuICogPEJveCBhbGlnblNlbGY9J2NlbnRlcicgLz5cbiAqXG4gKiAvLyBvcmRlclxuICogPEJveCBvcmRlcj0nMicgLz5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGbGV4Ym94UHJvcHNcbiAqIEBhbGlhcyBGbGV4Ym94UHJvcHNcbiAqIEBtZW1iZXJvZiBUaGVtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFthbGlnbkl0ZW1zXSAgICAgICAgIGFsaWduLWl0ZW1zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2FsaWduQ29udGVudF0gICAgICAgYWxpZ24tY29udGVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtqdXN0aWZ5SXRlbXNdICAgICAgIGp1c3RpZnktaXRlbXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbanVzdGlmeUNvbnRlbnRdICAgICBqdXN0aWZ5LWNvbnRlbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZmxleFdyYXBdICAgICAgICAgICBmbGV4LXdyYXBcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZmxleERpcmVjdGlvbl0gICAgICBmbGV4LWRpcmVjdGlvblxuICogQHByb3BlcnR5IHtib29sZWFufSBbZmxleF0gICAgICAgICAgICAgICBmbGV4XG4gKiBAcHJvcGVydHkge251bWJlcnxzdHJpbmd9IFtmbGV4R3Jvd10gICAgICAgICAgIGZsZXgtZ3Jvd1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFtmbGV4U2hyaW5rXSAgICAgICAgIGZsZXgtc2hyaW5rXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ZsZXhCYXNpc10gICAgICAgICAgZmxleC1iYXNpc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtqdXN0aWZ5U2VsZl0gICAgICAgIGp1c3RpZnktc2VsZlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFthbGlnblNlbGZdICAgICAgICAgIGFsaWduLXNlbGZcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gW29yZGVyXSAgICAgICAgICAgICAgb3JkZXJcbiAqL1xuXG4vKipcbiAqIFJldXNlZCBWYXJpYW50IEVudW06IGBwcmltYXJ5YCB8IGBkYW5nZXJgIHwgYHN1Y2Nlc3NgIHwgYGluZm9gIHwgYHNlY29uZGFyeWAgfCBgZGVmYXVsdGBcbiAqXG4gKiBAdHlwZWRlZiB7RW51bX0gVmFyaWFudFR5cGVcbiAqIEBhbGlhcyBWYXJpYW50VHlwZVxuICogQG1lbWJlcm9mIFRoZW1lXG4gKi9cblxuLyoqXG4gKiBUaGUgYm9yZGVyIHV0aWxpdHkgaW5jbHVkZXMgYWxsIHN0eWxlIHByb3BzIHJlbGF0ZWQgdG8gYm9yZGVyXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gQm9yZGVyUHJvcHNcbiAqIEBhbGlhcyBCb3JkZXJQcm9wc1xuICogQG1lbWJlcm9mIFRoZW1lXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bWJlcn0gW2JvcmRlcldpZHRoXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtib3JkZXJTdHlsZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYm9yZGVyQ29sb3JdIEl0IGNvdWxkIGJlIGVpdGhlciBhICNoYXNoIG9yIHtAbGluayBjb2xvcnN9XG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bWJlcn0gW2JvcmRlclJhZGl1c11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVtYmVyfSBbYm9yZGVyVG9wXVxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudW1iZXJ9IFtib3JkZXJUb3BXaWR0aF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYm9yZGVyVG9wU3R5bGVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2JvcmRlclRvcENvbG9yXSBJdCBjb3VsZCBiZSBlaXRoZXIgYSAjaGFzaCBvciB7QGxpbmsgY29sb3JzfVxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudW1iZXJ9IFtib3JkZXJUb3BMZWZ0UmFkaXVzXVxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudW1iZXJ9IFtib3JkZXJUb3BSaWdodFJhZGl1c11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVtYmVyfSBbYm9yZGVyUmlnaHRdXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bWJlcn0gW2JvcmRlclJpZ2h0V2lkdGhdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2JvcmRlclJpZ2h0U3R5bGVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2JvcmRlclJpZ2h0Q29sb3JdIEl0IGNvdWxkIGJlIGVpdGhlciBhICNoYXNoIG9yIHtAbGluayBjb2xvcnN9XG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bWJlcn0gW2JvcmRlckJvdHRvbV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVtYmVyfSBbYm9yZGVyQm90dG9tV2lkdGhdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2JvcmRlckJvdHRvbVN0eWxlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtib3JkZXJCb3R0b21Db2xvcl0gSXQgY291bGQgYmUgZWl0aGVyIGEgI2hhc2ggb3Ige0BsaW5rIGNvbG9yc31cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVtYmVyfSBbYm9yZGVyQm90dG9tTGVmdFJhZGl1c11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVtYmVyfSBbYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNdXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bWJlcn0gW2JvcmRlckxlZnRdXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bWJlcn0gW2JvcmRlckxlZnRXaWR0aF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYm9yZGVyTGVmdFN0eWxlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtib3JkZXJMZWZ0Q29sb3JdIEl0IGNvdWxkIGJlIGVpdGhlciBhICNoYXNoIG9yIHtAbGluayBjb2xvcnN9XG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bWJlcn0gW2JvcmRlclhdXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bWJlcn0gW2JvcmRlclldXG4gKi9cblxuLyoqXG4gKiBUaGUgcG9zaXRpb24gdXRpbGl0eSBpbmNsdWRlcyBzdHlsZSBwcm9wcyBmb3IgcG9zaXRpb24sIHpJbmRleCwgdG9wLCByaWdodCwgYm90dG9tLCBhbmQgbGVmdC5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQb3NpdGlvblByb3BzXG4gKiBAYWxpYXMgUG9zaXRpb25Qcm9wc1xuICogQG1lbWJlcm9mIFRoZW1lXG4gKiBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVtYmVyfSBbcG9zaXRpb25dXG4gKiBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVtYmVyfSBbekluZGV4XVxuICogcHJvcGVydHkge3N0cmluZyB8IG51bWJlcn0gW3RvcF1cbiAqIHByb3BlcnR5IHtzdHJpbmcgfCBudW1iZXJ9IFtyaWdodF1cbiAqIHByb3BlcnR5IHtzdHJpbmcgfCBudW1iZXJ9IFtib3R0b21dXG4gKiBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVtYmVyfSBbbGVmdF1cbiAqL1xuXG4vKipcbiAqIFRoZSBzaGFkb3cgdXRpbGl0eSBpbmNsdWRlcyBzdHlsZSBwcm9wcyBmb3IgdGV4dFNoYWRvdyBhbmQgYm94U2hhZG93LlxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNoYWRvd1Byb3BzXG4gKiBAYWxpYXMgU2hhZG93UHJvcHNcbiAqIEBtZW1iZXJvZiBUaGVtZVxuICogcHJvcGVydHkge3N0cmluZ30gW2JveFNoYWRvd11cbiAqIHByb3BlcnR5IHtzdHJpbmd9IFt0ZXh0U2hhZG93XVxuICovIiwiaW1wb3J0IGFzc2lnbiBmcm9tICdvYmplY3QtYXNzaWduJztcbmV4cG9ydCB2YXIgbWVyZ2UgPSBmdW5jdGlvbiBtZXJnZShhLCBiKSB7XG4gIHZhciByZXN1bHQgPSBhc3NpZ24oe30sIGEsIGIpO1xuXG4gIGZvciAodmFyIGtleSBpbiBhKSB7XG4gICAgdmFyIF9hc3NpZ247XG5cbiAgICBpZiAoIWFba2V5XSB8fCB0eXBlb2YgYltrZXldICE9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgYXNzaWduKHJlc3VsdCwgKF9hc3NpZ24gPSB7fSwgX2Fzc2lnbltrZXldID0gYXNzaWduKGFba2V5XSwgYltrZXldKSwgX2Fzc2lnbikpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07IC8vIHNvcnQgb2JqZWN0LXZhbHVlIHJlc3BvbnNpdmUgc3R5bGVzXG5cbnZhciBzb3J0ID0gZnVuY3Rpb24gc29ydChvYmopIHtcbiAgdmFyIG5leHQgPSB7fTtcbiAgT2JqZWN0LmtleXMob2JqKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEubG9jYWxlQ29tcGFyZShiLCB1bmRlZmluZWQsIHtcbiAgICAgIG51bWVyaWM6IHRydWUsXG4gICAgICBzZW5zaXRpdml0eTogJ2Jhc2UnXG4gICAgfSk7XG4gIH0pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIG5leHRba2V5XSA9IG9ialtrZXldO1xuICB9KTtcbiAgcmV0dXJuIG5leHQ7XG59O1xuXG52YXIgZGVmYXVsdHMgPSB7XG4gIGJyZWFrcG9pbnRzOiBbNDAsIDUyLCA2NF0ubWFwKGZ1bmN0aW9uIChuKSB7XG4gICAgcmV0dXJuIG4gKyAnZW0nO1xuICB9KVxufTtcblxudmFyIGNyZWF0ZU1lZGlhUXVlcnkgPSBmdW5jdGlvbiBjcmVhdGVNZWRpYVF1ZXJ5KG4pIHtcbiAgcmV0dXJuIFwiQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogXCIgKyBuICsgXCIpXCI7XG59O1xuXG52YXIgZ2V0VmFsdWUgPSBmdW5jdGlvbiBnZXRWYWx1ZShuLCBzY2FsZSkge1xuICByZXR1cm4gZ2V0KHNjYWxlLCBuLCBuKTtcbn07XG5cbmV4cG9ydCB2YXIgZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iaiwga2V5LCBkZWYsIHAsIHVuZGVmKSB7XG4gIGtleSA9IGtleSAmJiBrZXkuc3BsaXQgPyBrZXkuc3BsaXQoJy4nKSA6IFtrZXldO1xuXG4gIGZvciAocCA9IDA7IHAgPCBrZXkubGVuZ3RoOyBwKyspIHtcbiAgICBvYmogPSBvYmogPyBvYmpba2V5W3BdXSA6IHVuZGVmO1xuICB9XG5cbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWYgPyBkZWYgOiBvYmo7XG59O1xuZXhwb3J0IHZhciBjcmVhdGVQYXJzZXIgPSBmdW5jdGlvbiBjcmVhdGVQYXJzZXIoY29uZmlnKSB7XG4gIHZhciBjYWNoZSA9IHt9O1xuXG4gIHZhciBwYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKHByb3BzKSB7XG4gICAgdmFyIHN0eWxlcyA9IHt9O1xuICAgIHZhciBzaG91bGRTb3J0ID0gZmFsc2U7XG4gICAgdmFyIGlzQ2FjaGVEaXNhYmxlZCA9IHByb3BzLnRoZW1lICYmIHByb3BzLnRoZW1lLmRpc2FibGVTdHlsZWRTeXN0ZW1DYWNoZTtcblxuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgaWYgKCFjb25maWdba2V5XSkgY29udGludWU7XG4gICAgICB2YXIgc3ggPSBjb25maWdba2V5XTtcbiAgICAgIHZhciByYXcgPSBwcm9wc1trZXldO1xuICAgICAgdmFyIHNjYWxlID0gZ2V0KHByb3BzLnRoZW1lLCBzeC5zY2FsZSwgc3guZGVmYXVsdHMpO1xuXG4gICAgICBpZiAodHlwZW9mIHJhdyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY2FjaGUuYnJlYWtwb2ludHMgPSAhaXNDYWNoZURpc2FibGVkICYmIGNhY2hlLmJyZWFrcG9pbnRzIHx8IGdldChwcm9wcy50aGVtZSwgJ2JyZWFrcG9pbnRzJywgZGVmYXVsdHMuYnJlYWtwb2ludHMpO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJhdykpIHtcbiAgICAgICAgICBjYWNoZS5tZWRpYSA9ICFpc0NhY2hlRGlzYWJsZWQgJiYgY2FjaGUubWVkaWEgfHwgW251bGxdLmNvbmNhdChjYWNoZS5icmVha3BvaW50cy5tYXAoY3JlYXRlTWVkaWFRdWVyeSkpO1xuICAgICAgICAgIHN0eWxlcyA9IG1lcmdlKHN0eWxlcywgcGFyc2VSZXNwb25zaXZlU3R5bGUoY2FjaGUubWVkaWEsIHN4LCBzY2FsZSwgcmF3LCBwcm9wcykpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJhdyAhPT0gbnVsbCkge1xuICAgICAgICAgIHN0eWxlcyA9IG1lcmdlKHN0eWxlcywgcGFyc2VSZXNwb25zaXZlT2JqZWN0KGNhY2hlLmJyZWFrcG9pbnRzLCBzeCwgc2NhbGUsIHJhdywgcHJvcHMpKTtcbiAgICAgICAgICBzaG91bGRTb3J0ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBhc3NpZ24oc3R5bGVzLCBzeChyYXcsIHNjYWxlLCBwcm9wcykpO1xuICAgIH0gLy8gc29ydCBvYmplY3QtYmFzZWQgcmVzcG9uc2l2ZSBzdHlsZXNcblxuXG4gICAgaWYgKHNob3VsZFNvcnQpIHtcbiAgICAgIHN0eWxlcyA9IHNvcnQoc3R5bGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGVzO1xuICB9O1xuXG4gIHBhcnNlLmNvbmZpZyA9IGNvbmZpZztcbiAgcGFyc2UucHJvcE5hbWVzID0gT2JqZWN0LmtleXMoY29uZmlnKTtcbiAgcGFyc2UuY2FjaGUgPSBjYWNoZTtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhjb25maWcpLmZpbHRlcihmdW5jdGlvbiAoaykge1xuICAgIHJldHVybiBrICE9PSAnY29uZmlnJztcbiAgfSk7XG5cbiAgaWYgKGtleXMubGVuZ3RoID4gMSkge1xuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgX2NyZWF0ZVBhcnNlcjtcblxuICAgICAgcGFyc2Vba2V5XSA9IGNyZWF0ZVBhcnNlcigoX2NyZWF0ZVBhcnNlciA9IHt9LCBfY3JlYXRlUGFyc2VyW2tleV0gPSBjb25maWdba2V5XSwgX2NyZWF0ZVBhcnNlcikpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlO1xufTtcblxudmFyIHBhcnNlUmVzcG9uc2l2ZVN0eWxlID0gZnVuY3Rpb24gcGFyc2VSZXNwb25zaXZlU3R5bGUobWVkaWFRdWVyaWVzLCBzeCwgc2NhbGUsIHJhdywgX3Byb3BzKSB7XG4gIHZhciBzdHlsZXMgPSB7fTtcbiAgcmF3LnNsaWNlKDAsIG1lZGlhUXVlcmllcy5sZW5ndGgpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpKSB7XG4gICAgdmFyIG1lZGlhID0gbWVkaWFRdWVyaWVzW2ldO1xuICAgIHZhciBzdHlsZSA9IHN4KHZhbHVlLCBzY2FsZSwgX3Byb3BzKTtcblxuICAgIGlmICghbWVkaWEpIHtcbiAgICAgIGFzc2lnbihzdHlsZXMsIHN0eWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9hc3NpZ24yO1xuXG4gICAgICBhc3NpZ24oc3R5bGVzLCAoX2Fzc2lnbjIgPSB7fSwgX2Fzc2lnbjJbbWVkaWFdID0gYXNzaWduKHt9LCBzdHlsZXNbbWVkaWFdLCBzdHlsZSksIF9hc3NpZ24yKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHN0eWxlcztcbn07XG5cbnZhciBwYXJzZVJlc3BvbnNpdmVPYmplY3QgPSBmdW5jdGlvbiBwYXJzZVJlc3BvbnNpdmVPYmplY3QoYnJlYWtwb2ludHMsIHN4LCBzY2FsZSwgcmF3LCBfcHJvcHMpIHtcbiAgdmFyIHN0eWxlcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiByYXcpIHtcbiAgICB2YXIgYnJlYWtwb2ludCA9IGJyZWFrcG9pbnRzW2tleV07XG4gICAgdmFyIHZhbHVlID0gcmF3W2tleV07XG4gICAgdmFyIHN0eWxlID0gc3godmFsdWUsIHNjYWxlLCBfcHJvcHMpO1xuXG4gICAgaWYgKCFicmVha3BvaW50KSB7XG4gICAgICBhc3NpZ24oc3R5bGVzLCBzdHlsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfYXNzaWduMztcblxuICAgICAgdmFyIG1lZGlhID0gY3JlYXRlTWVkaWFRdWVyeShicmVha3BvaW50KTtcbiAgICAgIGFzc2lnbihzdHlsZXMsIChfYXNzaWduMyA9IHt9LCBfYXNzaWduM1ttZWRpYV0gPSBhc3NpZ24oe30sIHN0eWxlc1ttZWRpYV0sIHN0eWxlKSwgX2Fzc2lnbjMpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3R5bGVzO1xufTtcblxuZXhwb3J0IHZhciBjcmVhdGVTdHlsZUZ1bmN0aW9uID0gZnVuY3Rpb24gY3JlYXRlU3R5bGVGdW5jdGlvbihfcmVmKSB7XG4gIHZhciBwcm9wZXJ0aWVzID0gX3JlZi5wcm9wZXJ0aWVzLFxuICAgICAgcHJvcGVydHkgPSBfcmVmLnByb3BlcnR5LFxuICAgICAgc2NhbGUgPSBfcmVmLnNjYWxlLFxuICAgICAgX3JlZiR0cmFuc2Zvcm0gPSBfcmVmLnRyYW5zZm9ybSxcbiAgICAgIHRyYW5zZm9ybSA9IF9yZWYkdHJhbnNmb3JtID09PSB2b2lkIDAgPyBnZXRWYWx1ZSA6IF9yZWYkdHJhbnNmb3JtLFxuICAgICAgZGVmYXVsdFNjYWxlID0gX3JlZi5kZWZhdWx0U2NhbGU7XG4gIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IFtwcm9wZXJ0eV07XG5cbiAgdmFyIHN4ID0gZnVuY3Rpb24gc3godmFsdWUsIHNjYWxlLCBfcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIG4gPSB0cmFuc2Zvcm0odmFsdWUsIHNjYWxlLCBfcHJvcHMpO1xuICAgIGlmIChuID09PSBudWxsKSByZXR1cm47XG4gICAgcHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXN1bHRbcHJvcF0gPSBuO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgc3guc2NhbGUgPSBzY2FsZTtcbiAgc3guZGVmYXVsdHMgPSBkZWZhdWx0U2NhbGU7XG4gIHJldHVybiBzeDtcbn07IC8vIG5ldyB2NSBBUElcblxuZXhwb3J0IHZhciBzeXN0ZW0gPSBmdW5jdGlvbiBzeXN0ZW0oYXJncykge1xuICBpZiAoYXJncyA9PT0gdm9pZCAwKSB7XG4gICAgYXJncyA9IHt9O1xuICB9XG5cbiAgdmFyIGNvbmZpZyA9IHt9O1xuICBPYmplY3Qua2V5cyhhcmdzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgY29uZiA9IGFyZ3Nba2V5XTtcblxuICAgIGlmIChjb25mID09PSB0cnVlKSB7XG4gICAgICAvLyBzaG9ydGN1dCBkZWZpbml0aW9uXG4gICAgICBjb25maWdba2V5XSA9IGNyZWF0ZVN0eWxlRnVuY3Rpb24oe1xuICAgICAgICBwcm9wZXJ0eToga2V5LFxuICAgICAgICBzY2FsZToga2V5XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbmYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbmZpZ1trZXldID0gY29uZjtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25maWdba2V5XSA9IGNyZWF0ZVN0eWxlRnVuY3Rpb24oY29uZik7XG4gIH0pO1xuICB2YXIgcGFyc2VyID0gY3JlYXRlUGFyc2VyKGNvbmZpZyk7XG4gIHJldHVybiBwYXJzZXI7XG59O1xuZXhwb3J0IHZhciBjb21wb3NlID0gZnVuY3Rpb24gY29tcG9zZSgpIHtcbiAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBwYXJzZXJzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHBhcnNlcnNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBwYXJzZXJzLmZvckVhY2goZnVuY3Rpb24gKHBhcnNlcikge1xuICAgIGlmICghcGFyc2VyIHx8ICFwYXJzZXIuY29uZmlnKSByZXR1cm47XG4gICAgYXNzaWduKGNvbmZpZywgcGFyc2VyLmNvbmZpZyk7XG4gIH0pO1xuICB2YXIgcGFyc2VyID0gY3JlYXRlUGFyc2VyKGNvbmZpZyk7XG4gIHJldHVybiBwYXJzZXI7XG59O1xuIiwiaW1wb3J0IHsgc3lzdGVtLCBnZXQgfSBmcm9tICdAc3R5bGVkLXN5c3RlbS9jb3JlJztcblxudmFyIGlzTnVtYmVyID0gZnVuY3Rpb24gaXNOdW1iZXIobikge1xuICByZXR1cm4gdHlwZW9mIG4gPT09ICdudW1iZXInICYmICFpc05hTihuKTtcbn07XG5cbnZhciBnZXRXaWR0aCA9IGZ1bmN0aW9uIGdldFdpZHRoKG4sIHNjYWxlKSB7XG4gIHJldHVybiBnZXQoc2NhbGUsIG4sICFpc051bWJlcihuKSB8fCBuID4gMSA/IG4gOiBuICogMTAwICsgJyUnKTtcbn07XG5cbnZhciBjb25maWcgPSB7XG4gIHdpZHRoOiB7XG4gICAgcHJvcGVydHk6ICd3aWR0aCcsXG4gICAgc2NhbGU6ICdzaXplcycsXG4gICAgdHJhbnNmb3JtOiBnZXRXaWR0aFxuICB9LFxuICBoZWlnaHQ6IHtcbiAgICBwcm9wZXJ0eTogJ2hlaWdodCcsXG4gICAgc2NhbGU6ICdzaXplcydcbiAgfSxcbiAgbWluV2lkdGg6IHtcbiAgICBwcm9wZXJ0eTogJ21pbldpZHRoJyxcbiAgICBzY2FsZTogJ3NpemVzJ1xuICB9LFxuICBtaW5IZWlnaHQ6IHtcbiAgICBwcm9wZXJ0eTogJ21pbkhlaWdodCcsXG4gICAgc2NhbGU6ICdzaXplcydcbiAgfSxcbiAgbWF4V2lkdGg6IHtcbiAgICBwcm9wZXJ0eTogJ21heFdpZHRoJyxcbiAgICBzY2FsZTogJ3NpemVzJ1xuICB9LFxuICBtYXhIZWlnaHQ6IHtcbiAgICBwcm9wZXJ0eTogJ21heEhlaWdodCcsXG4gICAgc2NhbGU6ICdzaXplcydcbiAgfSxcbiAgc2l6ZToge1xuICAgIHByb3BlcnRpZXM6IFsnd2lkdGgnLCAnaGVpZ2h0J10sXG4gICAgc2NhbGU6ICdzaXplcydcbiAgfSxcbiAgb3ZlcmZsb3c6IHRydWUsXG4gIG92ZXJmbG93WDogdHJ1ZSxcbiAgb3ZlcmZsb3dZOiB0cnVlLFxuICBkaXNwbGF5OiB0cnVlLFxuICB2ZXJ0aWNhbEFsaWduOiB0cnVlXG59O1xuZXhwb3J0IHZhciBsYXlvdXQgPSBzeXN0ZW0oY29uZmlnKTtcbmV4cG9ydCBkZWZhdWx0IGxheW91dDtcbiIsImltcG9ydCB7IHN5c3RlbSB9IGZyb20gJ0BzdHlsZWQtc3lzdGVtL2NvcmUnO1xudmFyIGNvbmZpZyA9IHtcbiAgY29sb3I6IHtcbiAgICBwcm9wZXJ0eTogJ2NvbG9yJyxcbiAgICBzY2FsZTogJ2NvbG9ycydcbiAgfSxcbiAgYmFja2dyb3VuZENvbG9yOiB7XG4gICAgcHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgIHNjYWxlOiAnY29sb3JzJ1xuICB9LFxuICBvcGFjaXR5OiB0cnVlXG59O1xuY29uZmlnLmJnID0gY29uZmlnLmJhY2tncm91bmRDb2xvcjtcbmV4cG9ydCB2YXIgY29sb3IgPSBzeXN0ZW0oY29uZmlnKTtcbmV4cG9ydCBkZWZhdWx0IGNvbG9yO1xuIiwiaW1wb3J0IHsgc3lzdGVtIH0gZnJvbSAnQHN0eWxlZC1zeXN0ZW0vY29yZSc7XG52YXIgZGVmYXVsdHMgPSB7XG4gIGZvbnRTaXplczogWzEyLCAxNCwgMTYsIDIwLCAyNCwgMzIsIDQ4LCA2NCwgNzJdXG59O1xudmFyIGNvbmZpZyA9IHtcbiAgZm9udEZhbWlseToge1xuICAgIHByb3BlcnR5OiAnZm9udEZhbWlseScsXG4gICAgc2NhbGU6ICdmb250cydcbiAgfSxcbiAgZm9udFNpemU6IHtcbiAgICBwcm9wZXJ0eTogJ2ZvbnRTaXplJyxcbiAgICBzY2FsZTogJ2ZvbnRTaXplcycsXG4gICAgZGVmYXVsdFNjYWxlOiBkZWZhdWx0cy5mb250U2l6ZXNcbiAgfSxcbiAgZm9udFdlaWdodDoge1xuICAgIHByb3BlcnR5OiAnZm9udFdlaWdodCcsXG4gICAgc2NhbGU6ICdmb250V2VpZ2h0cydcbiAgfSxcbiAgbGluZUhlaWdodDoge1xuICAgIHByb3BlcnR5OiAnbGluZUhlaWdodCcsXG4gICAgc2NhbGU6ICdsaW5lSGVpZ2h0cydcbiAgfSxcbiAgbGV0dGVyU3BhY2luZzoge1xuICAgIHByb3BlcnR5OiAnbGV0dGVyU3BhY2luZycsXG4gICAgc2NhbGU6ICdsZXR0ZXJTcGFjaW5ncydcbiAgfSxcbiAgdGV4dEFsaWduOiB0cnVlLFxuICBmb250U3R5bGU6IHRydWVcbn07XG5leHBvcnQgdmFyIHR5cG9ncmFwaHkgPSBzeXN0ZW0oY29uZmlnKTtcbmV4cG9ydCBkZWZhdWx0IHR5cG9ncmFwaHk7XG4iLCJpbXBvcnQgeyBzeXN0ZW0gfSBmcm9tICdAc3R5bGVkLXN5c3RlbS9jb3JlJztcbnZhciBjb25maWcgPSB7XG4gIGFsaWduSXRlbXM6IHRydWUsXG4gIGFsaWduQ29udGVudDogdHJ1ZSxcbiAganVzdGlmeUl0ZW1zOiB0cnVlLFxuICBqdXN0aWZ5Q29udGVudDogdHJ1ZSxcbiAgZmxleFdyYXA6IHRydWUsXG4gIGZsZXhEaXJlY3Rpb246IHRydWUsXG4gIC8vIGl0ZW1cbiAgZmxleDogdHJ1ZSxcbiAgZmxleEdyb3c6IHRydWUsXG4gIGZsZXhTaHJpbms6IHRydWUsXG4gIGZsZXhCYXNpczogdHJ1ZSxcbiAganVzdGlmeVNlbGY6IHRydWUsXG4gIGFsaWduU2VsZjogdHJ1ZSxcbiAgb3JkZXI6IHRydWVcbn07XG5leHBvcnQgdmFyIGZsZXhib3ggPSBzeXN0ZW0oY29uZmlnKTtcbmV4cG9ydCBkZWZhdWx0IGZsZXhib3g7XG4iLCJpbXBvcnQgeyBzeXN0ZW0gfSBmcm9tICdAc3R5bGVkLXN5c3RlbS9jb3JlJztcbnZhciBkZWZhdWx0cyA9IHtcbiAgc3BhY2U6IFswLCA0LCA4LCAxNiwgMzIsIDY0LCAxMjgsIDI1NiwgNTEyXVxufTtcbnZhciBjb25maWcgPSB7XG4gIGdyaWRHYXA6IHtcbiAgICBwcm9wZXJ0eTogJ2dyaWRHYXAnLFxuICAgIHNjYWxlOiAnc3BhY2UnLFxuICAgIGRlZmF1bHRTY2FsZTogZGVmYXVsdHMuc3BhY2VcbiAgfSxcbiAgZ3JpZENvbHVtbkdhcDoge1xuICAgIHByb3BlcnR5OiAnZ3JpZENvbHVtbkdhcCcsXG4gICAgc2NhbGU6ICdzcGFjZScsXG4gICAgZGVmYXVsdFNjYWxlOiBkZWZhdWx0cy5zcGFjZVxuICB9LFxuICBncmlkUm93R2FwOiB7XG4gICAgcHJvcGVydHk6ICdncmlkUm93R2FwJyxcbiAgICBzY2FsZTogJ3NwYWNlJyxcbiAgICBkZWZhdWx0U2NhbGU6IGRlZmF1bHRzLnNwYWNlXG4gIH0sXG4gIGdyaWRDb2x1bW46IHRydWUsXG4gIGdyaWRSb3c6IHRydWUsXG4gIGdyaWRBdXRvRmxvdzogdHJ1ZSxcbiAgZ3JpZEF1dG9Db2x1bW5zOiB0cnVlLFxuICBncmlkQXV0b1Jvd3M6IHRydWUsXG4gIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IHRydWUsXG4gIGdyaWRUZW1wbGF0ZVJvd3M6IHRydWUsXG4gIGdyaWRUZW1wbGF0ZUFyZWFzOiB0cnVlLFxuICBncmlkQXJlYTogdHJ1ZVxufTtcbmV4cG9ydCB2YXIgZ3JpZCA9IHN5c3RlbShjb25maWcpO1xuZXhwb3J0IGRlZmF1bHQgZ3JpZDtcbiIsImltcG9ydCB7IHN5c3RlbSB9IGZyb20gJ0BzdHlsZWQtc3lzdGVtL2NvcmUnO1xudmFyIGNvbmZpZyA9IHtcbiAgYm9yZGVyOiB7XG4gICAgcHJvcGVydHk6ICdib3JkZXInLFxuICAgIHNjYWxlOiAnYm9yZGVycydcbiAgfSxcbiAgYm9yZGVyV2lkdGg6IHtcbiAgICBwcm9wZXJ0eTogJ2JvcmRlcldpZHRoJyxcbiAgICBzY2FsZTogJ2JvcmRlcldpZHRocydcbiAgfSxcbiAgYm9yZGVyU3R5bGU6IHtcbiAgICBwcm9wZXJ0eTogJ2JvcmRlclN0eWxlJyxcbiAgICBzY2FsZTogJ2JvcmRlclN0eWxlcydcbiAgfSxcbiAgYm9yZGVyQ29sb3I6IHtcbiAgICBwcm9wZXJ0eTogJ2JvcmRlckNvbG9yJyxcbiAgICBzY2FsZTogJ2NvbG9ycydcbiAgfSxcbiAgYm9yZGVyUmFkaXVzOiB7XG4gICAgcHJvcGVydHk6ICdib3JkZXJSYWRpdXMnLFxuICAgIHNjYWxlOiAncmFkaWknXG4gIH0sXG4gIGJvcmRlclRvcDoge1xuICAgIHByb3BlcnR5OiAnYm9yZGVyVG9wJyxcbiAgICBzY2FsZTogJ2JvcmRlcnMnXG4gIH0sXG4gIGJvcmRlclRvcExlZnRSYWRpdXM6IHtcbiAgICBwcm9wZXJ0eTogJ2JvcmRlclRvcExlZnRSYWRpdXMnLFxuICAgIHNjYWxlOiAncmFkaWknXG4gIH0sXG4gIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiB7XG4gICAgcHJvcGVydHk6ICdib3JkZXJUb3BSaWdodFJhZGl1cycsXG4gICAgc2NhbGU6ICdyYWRpaSdcbiAgfSxcbiAgYm9yZGVyUmlnaHQ6IHtcbiAgICBwcm9wZXJ0eTogJ2JvcmRlclJpZ2h0JyxcbiAgICBzY2FsZTogJ2JvcmRlcnMnXG4gIH0sXG4gIGJvcmRlckJvdHRvbToge1xuICAgIHByb3BlcnR5OiAnYm9yZGVyQm90dG9tJyxcbiAgICBzY2FsZTogJ2JvcmRlcnMnXG4gIH0sXG4gIGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6IHtcbiAgICBwcm9wZXJ0eTogJ2JvcmRlckJvdHRvbUxlZnRSYWRpdXMnLFxuICAgIHNjYWxlOiAncmFkaWknXG4gIH0sXG4gIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiB7XG4gICAgcHJvcGVydHk6ICdib3JkZXJCb3R0b21SaWdodFJhZGl1cycsXG4gICAgc2NhbGU6ICdyYWRpaSdcbiAgfSxcbiAgYm9yZGVyTGVmdDoge1xuICAgIHByb3BlcnR5OiAnYm9yZGVyTGVmdCcsXG4gICAgc2NhbGU6ICdib3JkZXJzJ1xuICB9LFxuICBib3JkZXJYOiB7XG4gICAgcHJvcGVydGllczogWydib3JkZXJMZWZ0JywgJ2JvcmRlclJpZ2h0J10sXG4gICAgc2NhbGU6ICdib3JkZXJzJ1xuICB9LFxuICBib3JkZXJZOiB7XG4gICAgcHJvcGVydGllczogWydib3JkZXJUb3AnLCAnYm9yZGVyQm90dG9tJ10sXG4gICAgc2NhbGU6ICdib3JkZXJzJ1xuICB9XG59O1xuY29uZmlnLmJvcmRlclRvcFdpZHRoID0ge1xuICBwcm9wZXJ0eTogJ2JvcmRlclRvcFdpZHRoJyxcbiAgc2NhbGU6ICdib3JkZXJXaWR0aHMnXG59O1xuY29uZmlnLmJvcmRlclRvcENvbG9yID0ge1xuICBwcm9wZXJ0eTogJ2JvcmRlclRvcENvbG9yJyxcbiAgc2NhbGU6ICdjb2xvcnMnXG59O1xuY29uZmlnLmJvcmRlclRvcFN0eWxlID0ge1xuICBwcm9wZXJ0eTogJ2JvcmRlclRvcFN0eWxlJyxcbiAgc2NhbGU6ICdib3JkZXJTdHlsZXMnXG59O1xuY29uZmlnLmJvcmRlclRvcExlZnRSYWRpdXMgPSB7XG4gIHByb3BlcnR5OiAnYm9yZGVyVG9wTGVmdFJhZGl1cycsXG4gIHNjYWxlOiAncmFkaWknXG59O1xuY29uZmlnLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0ge1xuICBwcm9wZXJ0eTogJ2JvcmRlclRvcFJpZ2h0UmFkaXVzJyxcbiAgc2NhbGU6ICdyYWRpaSdcbn07XG5jb25maWcuYm9yZGVyQm90dG9tV2lkdGggPSB7XG4gIHByb3BlcnR5OiAnYm9yZGVyQm90dG9tV2lkdGgnLFxuICBzY2FsZTogJ2JvcmRlcldpZHRocydcbn07XG5jb25maWcuYm9yZGVyQm90dG9tQ29sb3IgPSB7XG4gIHByb3BlcnR5OiAnYm9yZGVyQm90dG9tQ29sb3InLFxuICBzY2FsZTogJ2NvbG9ycydcbn07XG5jb25maWcuYm9yZGVyQm90dG9tU3R5bGUgPSB7XG4gIHByb3BlcnR5OiAnYm9yZGVyQm90dG9tU3R5bGUnLFxuICBzY2FsZTogJ2JvcmRlclN0eWxlcydcbn07XG5jb25maWcuYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHtcbiAgcHJvcGVydHk6ICdib3JkZXJCb3R0b21MZWZ0UmFkaXVzJyxcbiAgc2NhbGU6ICdyYWRpaSdcbn07XG5jb25maWcuYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSB7XG4gIHByb3BlcnR5OiAnYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMnLFxuICBzY2FsZTogJ3JhZGlpJ1xufTtcbmNvbmZpZy5ib3JkZXJMZWZ0V2lkdGggPSB7XG4gIHByb3BlcnR5OiAnYm9yZGVyTGVmdFdpZHRoJyxcbiAgc2NhbGU6ICdib3JkZXJXaWR0aHMnXG59O1xuY29uZmlnLmJvcmRlckxlZnRDb2xvciA9IHtcbiAgcHJvcGVydHk6ICdib3JkZXJMZWZ0Q29sb3InLFxuICBzY2FsZTogJ2NvbG9ycydcbn07XG5jb25maWcuYm9yZGVyTGVmdFN0eWxlID0ge1xuICBwcm9wZXJ0eTogJ2JvcmRlckxlZnRTdHlsZScsXG4gIHNjYWxlOiAnYm9yZGVyU3R5bGVzJ1xufTtcbmNvbmZpZy5ib3JkZXJSaWdodFdpZHRoID0ge1xuICBwcm9wZXJ0eTogJ2JvcmRlclJpZ2h0V2lkdGgnLFxuICBzY2FsZTogJ2JvcmRlcldpZHRocydcbn07XG5jb25maWcuYm9yZGVyUmlnaHRDb2xvciA9IHtcbiAgcHJvcGVydHk6ICdib3JkZXJSaWdodENvbG9yJyxcbiAgc2NhbGU6ICdjb2xvcnMnXG59O1xuY29uZmlnLmJvcmRlclJpZ2h0U3R5bGUgPSB7XG4gIHByb3BlcnR5OiAnYm9yZGVyUmlnaHRTdHlsZScsXG4gIHNjYWxlOiAnYm9yZGVyU3R5bGVzJ1xufTtcbmV4cG9ydCB2YXIgYm9yZGVyID0gc3lzdGVtKGNvbmZpZyk7XG5leHBvcnQgZGVmYXVsdCBib3JkZXI7XG4iLCJpbXBvcnQgeyBzeXN0ZW0gfSBmcm9tICdAc3R5bGVkLXN5c3RlbS9jb3JlJztcbnZhciBjb25maWcgPSB7XG4gIGJhY2tncm91bmQ6IHRydWUsXG4gIGJhY2tncm91bmRJbWFnZTogdHJ1ZSxcbiAgYmFja2dyb3VuZFNpemU6IHRydWUsXG4gIGJhY2tncm91bmRQb3NpdGlvbjogdHJ1ZSxcbiAgYmFja2dyb3VuZFJlcGVhdDogdHJ1ZVxufTtcbmNvbmZpZy5iZ0ltYWdlID0gY29uZmlnLmJhY2tncm91bmRJbWFnZTtcbmNvbmZpZy5iZ1NpemUgPSBjb25maWcuYmFja2dyb3VuZFNpemU7XG5jb25maWcuYmdQb3NpdGlvbiA9IGNvbmZpZy5iYWNrZ3JvdW5kUG9zaXRpb247XG5jb25maWcuYmdSZXBlYXQgPSBjb25maWcuYmFja2dyb3VuZFJlcGVhdDtcbmV4cG9ydCB2YXIgYmFja2dyb3VuZCA9IHN5c3RlbShjb25maWcpO1xuZXhwb3J0IGRlZmF1bHQgYmFja2dyb3VuZDtcbiIsImltcG9ydCB7IHN5c3RlbSB9IGZyb20gJ0BzdHlsZWQtc3lzdGVtL2NvcmUnO1xudmFyIGRlZmF1bHRzID0ge1xuICBzcGFjZTogWzAsIDQsIDgsIDE2LCAzMiwgNjQsIDEyOCwgMjU2LCA1MTJdXG59O1xudmFyIGNvbmZpZyA9IHtcbiAgcG9zaXRpb246IHRydWUsXG4gIHpJbmRleDoge1xuICAgIHByb3BlcnR5OiAnekluZGV4JyxcbiAgICBzY2FsZTogJ3pJbmRpY2VzJ1xuICB9LFxuICB0b3A6IHtcbiAgICBwcm9wZXJ0eTogJ3RvcCcsXG4gICAgc2NhbGU6ICdzcGFjZScsXG4gICAgZGVmYXVsdFNjYWxlOiBkZWZhdWx0cy5zcGFjZVxuICB9LFxuICByaWdodDoge1xuICAgIHByb3BlcnR5OiAncmlnaHQnLFxuICAgIHNjYWxlOiAnc3BhY2UnLFxuICAgIGRlZmF1bHRTY2FsZTogZGVmYXVsdHMuc3BhY2VcbiAgfSxcbiAgYm90dG9tOiB7XG4gICAgcHJvcGVydHk6ICdib3R0b20nLFxuICAgIHNjYWxlOiAnc3BhY2UnLFxuICAgIGRlZmF1bHRTY2FsZTogZGVmYXVsdHMuc3BhY2VcbiAgfSxcbiAgbGVmdDoge1xuICAgIHByb3BlcnR5OiAnbGVmdCcsXG4gICAgc2NhbGU6ICdzcGFjZScsXG4gICAgZGVmYXVsdFNjYWxlOiBkZWZhdWx0cy5zcGFjZVxuICB9XG59O1xuZXhwb3J0IHZhciBwb3NpdGlvbiA9IHN5c3RlbShjb25maWcpO1xuZXhwb3J0IGRlZmF1bHQgcG9zaXRpb247XG4iLCJpbXBvcnQgeyBnZXQsIHN5c3RlbSwgY29tcG9zZSB9IGZyb20gJ0BzdHlsZWQtc3lzdGVtL2NvcmUnO1xudmFyIGRlZmF1bHRzID0ge1xuICBzcGFjZTogWzAsIDQsIDgsIDE2LCAzMiwgNjQsIDEyOCwgMjU2LCA1MTJdXG59O1xuXG52YXIgaXNOdW1iZXIgPSBmdW5jdGlvbiBpc051bWJlcihuKSB7XG4gIHJldHVybiB0eXBlb2YgbiA9PT0gJ251bWJlcicgJiYgIWlzTmFOKG4pO1xufTtcblxudmFyIGdldE1hcmdpbiA9IGZ1bmN0aW9uIGdldE1hcmdpbihuLCBzY2FsZSkge1xuICBpZiAoIWlzTnVtYmVyKG4pKSB7XG4gICAgcmV0dXJuIGdldChzY2FsZSwgbiwgbik7XG4gIH1cblxuICB2YXIgaXNOZWdhdGl2ZSA9IG4gPCAwO1xuICB2YXIgYWJzb2x1dGUgPSBNYXRoLmFicyhuKTtcbiAgdmFyIHZhbHVlID0gZ2V0KHNjYWxlLCBhYnNvbHV0ZSwgYWJzb2x1dGUpO1xuXG4gIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgcmV0dXJuIGlzTmVnYXRpdmUgPyAnLScgKyB2YWx1ZSA6IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlICogKGlzTmVnYXRpdmUgPyAtMSA6IDEpO1xufTtcblxudmFyIGNvbmZpZ3MgPSB7fTtcbmNvbmZpZ3MubWFyZ2luID0ge1xuICBtYXJnaW46IHtcbiAgICBwcm9wZXJ0eTogJ21hcmdpbicsXG4gICAgc2NhbGU6ICdzcGFjZScsXG4gICAgdHJhbnNmb3JtOiBnZXRNYXJnaW4sXG4gICAgZGVmYXVsdFNjYWxlOiBkZWZhdWx0cy5zcGFjZVxuICB9LFxuICBtYXJnaW5Ub3A6IHtcbiAgICBwcm9wZXJ0eTogJ21hcmdpblRvcCcsXG4gICAgc2NhbGU6ICdzcGFjZScsXG4gICAgdHJhbnNmb3JtOiBnZXRNYXJnaW4sXG4gICAgZGVmYXVsdFNjYWxlOiBkZWZhdWx0cy5zcGFjZVxuICB9LFxuICBtYXJnaW5SaWdodDoge1xuICAgIHByb3BlcnR5OiAnbWFyZ2luUmlnaHQnLFxuICAgIHNjYWxlOiAnc3BhY2UnLFxuICAgIHRyYW5zZm9ybTogZ2V0TWFyZ2luLFxuICAgIGRlZmF1bHRTY2FsZTogZGVmYXVsdHMuc3BhY2VcbiAgfSxcbiAgbWFyZ2luQm90dG9tOiB7XG4gICAgcHJvcGVydHk6ICdtYXJnaW5Cb3R0b20nLFxuICAgIHNjYWxlOiAnc3BhY2UnLFxuICAgIHRyYW5zZm9ybTogZ2V0TWFyZ2luLFxuICAgIGRlZmF1bHRTY2FsZTogZGVmYXVsdHMuc3BhY2VcbiAgfSxcbiAgbWFyZ2luTGVmdDoge1xuICAgIHByb3BlcnR5OiAnbWFyZ2luTGVmdCcsXG4gICAgc2NhbGU6ICdzcGFjZScsXG4gICAgdHJhbnNmb3JtOiBnZXRNYXJnaW4sXG4gICAgZGVmYXVsdFNjYWxlOiBkZWZhdWx0cy5zcGFjZVxuICB9LFxuICBtYXJnaW5YOiB7XG4gICAgcHJvcGVydGllczogWydtYXJnaW5MZWZ0JywgJ21hcmdpblJpZ2h0J10sXG4gICAgc2NhbGU6ICdzcGFjZScsXG4gICAgdHJhbnNmb3JtOiBnZXRNYXJnaW4sXG4gICAgZGVmYXVsdFNjYWxlOiBkZWZhdWx0cy5zcGFjZVxuICB9LFxuICBtYXJnaW5ZOiB7XG4gICAgcHJvcGVydGllczogWydtYXJnaW5Ub3AnLCAnbWFyZ2luQm90dG9tJ10sXG4gICAgc2NhbGU6ICdzcGFjZScsXG4gICAgdHJhbnNmb3JtOiBnZXRNYXJnaW4sXG4gICAgZGVmYXVsdFNjYWxlOiBkZWZhdWx0cy5zcGFjZVxuICB9XG59O1xuY29uZmlncy5tYXJnaW4ubSA9IGNvbmZpZ3MubWFyZ2luLm1hcmdpbjtcbmNvbmZpZ3MubWFyZ2luLm10ID0gY29uZmlncy5tYXJnaW4ubWFyZ2luVG9wO1xuY29uZmlncy5tYXJnaW4ubXIgPSBjb25maWdzLm1hcmdpbi5tYXJnaW5SaWdodDtcbmNvbmZpZ3MubWFyZ2luLm1iID0gY29uZmlncy5tYXJnaW4ubWFyZ2luQm90dG9tO1xuY29uZmlncy5tYXJnaW4ubWwgPSBjb25maWdzLm1hcmdpbi5tYXJnaW5MZWZ0O1xuY29uZmlncy5tYXJnaW4ubXggPSBjb25maWdzLm1hcmdpbi5tYXJnaW5YO1xuY29uZmlncy5tYXJnaW4ubXkgPSBjb25maWdzLm1hcmdpbi5tYXJnaW5ZO1xuY29uZmlncy5wYWRkaW5nID0ge1xuICBwYWRkaW5nOiB7XG4gICAgcHJvcGVydHk6ICdwYWRkaW5nJyxcbiAgICBzY2FsZTogJ3NwYWNlJyxcbiAgICBkZWZhdWx0U2NhbGU6IGRlZmF1bHRzLnNwYWNlXG4gIH0sXG4gIHBhZGRpbmdUb3A6IHtcbiAgICBwcm9wZXJ0eTogJ3BhZGRpbmdUb3AnLFxuICAgIHNjYWxlOiAnc3BhY2UnLFxuICAgIGRlZmF1bHRTY2FsZTogZGVmYXVsdHMuc3BhY2VcbiAgfSxcbiAgcGFkZGluZ1JpZ2h0OiB7XG4gICAgcHJvcGVydHk6ICdwYWRkaW5nUmlnaHQnLFxuICAgIHNjYWxlOiAnc3BhY2UnLFxuICAgIGRlZmF1bHRTY2FsZTogZGVmYXVsdHMuc3BhY2VcbiAgfSxcbiAgcGFkZGluZ0JvdHRvbToge1xuICAgIHByb3BlcnR5OiAncGFkZGluZ0JvdHRvbScsXG4gICAgc2NhbGU6ICdzcGFjZScsXG4gICAgZGVmYXVsdFNjYWxlOiBkZWZhdWx0cy5zcGFjZVxuICB9LFxuICBwYWRkaW5nTGVmdDoge1xuICAgIHByb3BlcnR5OiAncGFkZGluZ0xlZnQnLFxuICAgIHNjYWxlOiAnc3BhY2UnLFxuICAgIGRlZmF1bHRTY2FsZTogZGVmYXVsdHMuc3BhY2VcbiAgfSxcbiAgcGFkZGluZ1g6IHtcbiAgICBwcm9wZXJ0aWVzOiBbJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdSaWdodCddLFxuICAgIHNjYWxlOiAnc3BhY2UnLFxuICAgIGRlZmF1bHRTY2FsZTogZGVmYXVsdHMuc3BhY2VcbiAgfSxcbiAgcGFkZGluZ1k6IHtcbiAgICBwcm9wZXJ0aWVzOiBbJ3BhZGRpbmdUb3AnLCAncGFkZGluZ0JvdHRvbSddLFxuICAgIHNjYWxlOiAnc3BhY2UnLFxuICAgIGRlZmF1bHRTY2FsZTogZGVmYXVsdHMuc3BhY2VcbiAgfVxufTtcbmNvbmZpZ3MucGFkZGluZy5wID0gY29uZmlncy5wYWRkaW5nLnBhZGRpbmc7XG5jb25maWdzLnBhZGRpbmcucHQgPSBjb25maWdzLnBhZGRpbmcucGFkZGluZ1RvcDtcbmNvbmZpZ3MucGFkZGluZy5wciA9IGNvbmZpZ3MucGFkZGluZy5wYWRkaW5nUmlnaHQ7XG5jb25maWdzLnBhZGRpbmcucGIgPSBjb25maWdzLnBhZGRpbmcucGFkZGluZ0JvdHRvbTtcbmNvbmZpZ3MucGFkZGluZy5wbCA9IGNvbmZpZ3MucGFkZGluZy5wYWRkaW5nTGVmdDtcbmNvbmZpZ3MucGFkZGluZy5weCA9IGNvbmZpZ3MucGFkZGluZy5wYWRkaW5nWDtcbmNvbmZpZ3MucGFkZGluZy5weSA9IGNvbmZpZ3MucGFkZGluZy5wYWRkaW5nWTtcbmV4cG9ydCB2YXIgbWFyZ2luID0gc3lzdGVtKGNvbmZpZ3MubWFyZ2luKTtcbmV4cG9ydCB2YXIgcGFkZGluZyA9IHN5c3RlbShjb25maWdzLnBhZGRpbmcpO1xuZXhwb3J0IHZhciBzcGFjZSA9IGNvbXBvc2UobWFyZ2luLCBwYWRkaW5nKTtcbmV4cG9ydCBkZWZhdWx0IHNwYWNlO1xuIiwiaW1wb3J0IHsgc3lzdGVtIH0gZnJvbSAnQHN0eWxlZC1zeXN0ZW0vY29yZSc7XG5leHBvcnQgdmFyIHNoYWRvdyA9IHN5c3RlbSh7XG4gIGJveFNoYWRvdzoge1xuICAgIHByb3BlcnR5OiAnYm94U2hhZG93JyxcbiAgICBzY2FsZTogJ3NoYWRvd3MnXG4gIH0sXG4gIHRleHRTaGFkb3c6IHtcbiAgICBwcm9wZXJ0eTogJ3RleHRTaGFkb3cnLFxuICAgIHNjYWxlOiAnc2hhZG93cydcbiAgfVxufSk7XG5leHBvcnQgZGVmYXVsdCBzaGFkb3c7XG4iLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L2RsdlxuZXhwb3J0IHZhciBnZXQgPSBmdW5jdGlvbiBnZXQob2JqLCBrZXksIGRlZiwgcCwgdW5kZWYpIHtcbiAga2V5ID0ga2V5ICYmIGtleS5zcGxpdCA/IGtleS5zcGxpdCgnLicpIDogW2tleV07XG5cbiAgZm9yIChwID0gMDsgcCA8IGtleS5sZW5ndGg7IHArKykge1xuICAgIG9iaiA9IG9iaiA/IG9ialtrZXlbcF1dIDogdW5kZWY7XG4gIH1cblxuICByZXR1cm4gb2JqID09PSB1bmRlZiA/IGRlZiA6IG9iajtcbn07XG52YXIgZGVmYXVsdEJyZWFrcG9pbnRzID0gWzQwLCA1MiwgNjRdLm1hcChmdW5jdGlvbiAobikge1xuICByZXR1cm4gbiArICdlbSc7XG59KTtcbnZhciBkZWZhdWx0VGhlbWUgPSB7XG4gIHNwYWNlOiBbMCwgNCwgOCwgMTYsIDMyLCA2NCwgMTI4LCAyNTYsIDUxMl0sXG4gIGZvbnRTaXplczogWzEyLCAxNCwgMTYsIDIwLCAyNCwgMzIsIDQ4LCA2NCwgNzJdXG59O1xudmFyIGFsaWFzZXMgPSB7XG4gIGJnOiAnYmFja2dyb3VuZENvbG9yJyxcbiAgbTogJ21hcmdpbicsXG4gIG10OiAnbWFyZ2luVG9wJyxcbiAgbXI6ICdtYXJnaW5SaWdodCcsXG4gIG1iOiAnbWFyZ2luQm90dG9tJyxcbiAgbWw6ICdtYXJnaW5MZWZ0JyxcbiAgbXg6ICdtYXJnaW5YJyxcbiAgbXk6ICdtYXJnaW5ZJyxcbiAgcDogJ3BhZGRpbmcnLFxuICBwdDogJ3BhZGRpbmdUb3AnLFxuICBwcjogJ3BhZGRpbmdSaWdodCcsXG4gIHBiOiAncGFkZGluZ0JvdHRvbScsXG4gIHBsOiAncGFkZGluZ0xlZnQnLFxuICBweDogJ3BhZGRpbmdYJyxcbiAgcHk6ICdwYWRkaW5nWSdcbn07XG52YXIgbXVsdGlwbGVzID0ge1xuICBtYXJnaW5YOiBbJ21hcmdpbkxlZnQnLCAnbWFyZ2luUmlnaHQnXSxcbiAgbWFyZ2luWTogWydtYXJnaW5Ub3AnLCAnbWFyZ2luQm90dG9tJ10sXG4gIHBhZGRpbmdYOiBbJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdSaWdodCddLFxuICBwYWRkaW5nWTogWydwYWRkaW5nVG9wJywgJ3BhZGRpbmdCb3R0b20nXSxcbiAgc2l6ZTogWyd3aWR0aCcsICdoZWlnaHQnXVxufTtcbnZhciBzY2FsZXMgPSB7XG4gIGNvbG9yOiAnY29sb3JzJyxcbiAgYmFja2dyb3VuZENvbG9yOiAnY29sb3JzJyxcbiAgYm9yZGVyQ29sb3I6ICdjb2xvcnMnLFxuICBtYXJnaW46ICdzcGFjZScsXG4gIG1hcmdpblRvcDogJ3NwYWNlJyxcbiAgbWFyZ2luUmlnaHQ6ICdzcGFjZScsXG4gIG1hcmdpbkJvdHRvbTogJ3NwYWNlJyxcbiAgbWFyZ2luTGVmdDogJ3NwYWNlJyxcbiAgbWFyZ2luWDogJ3NwYWNlJyxcbiAgbWFyZ2luWTogJ3NwYWNlJyxcbiAgcGFkZGluZzogJ3NwYWNlJyxcbiAgcGFkZGluZ1RvcDogJ3NwYWNlJyxcbiAgcGFkZGluZ1JpZ2h0OiAnc3BhY2UnLFxuICBwYWRkaW5nQm90dG9tOiAnc3BhY2UnLFxuICBwYWRkaW5nTGVmdDogJ3NwYWNlJyxcbiAgcGFkZGluZ1g6ICdzcGFjZScsXG4gIHBhZGRpbmdZOiAnc3BhY2UnLFxuICB0b3A6ICdzcGFjZScsXG4gIHJpZ2h0OiAnc3BhY2UnLFxuICBib3R0b206ICdzcGFjZScsXG4gIGxlZnQ6ICdzcGFjZScsXG4gIGdyaWRHYXA6ICdzcGFjZScsXG4gIGdyaWRDb2x1bW5HYXA6ICdzcGFjZScsXG4gIGdyaWRSb3dHYXA6ICdzcGFjZScsXG4gIGdhcDogJ3NwYWNlJyxcbiAgY29sdW1uR2FwOiAnc3BhY2UnLFxuICByb3dHYXA6ICdzcGFjZScsXG4gIGZvbnRGYW1pbHk6ICdmb250cycsXG4gIGZvbnRTaXplOiAnZm9udFNpemVzJyxcbiAgZm9udFdlaWdodDogJ2ZvbnRXZWlnaHRzJyxcbiAgbGluZUhlaWdodDogJ2xpbmVIZWlnaHRzJyxcbiAgbGV0dGVyU3BhY2luZzogJ2xldHRlclNwYWNpbmdzJyxcbiAgYm9yZGVyOiAnYm9yZGVycycsXG4gIGJvcmRlclRvcDogJ2JvcmRlcnMnLFxuICBib3JkZXJSaWdodDogJ2JvcmRlcnMnLFxuICBib3JkZXJCb3R0b206ICdib3JkZXJzJyxcbiAgYm9yZGVyTGVmdDogJ2JvcmRlcnMnLFxuICBib3JkZXJXaWR0aDogJ2JvcmRlcldpZHRocycsXG4gIGJvcmRlclN0eWxlOiAnYm9yZGVyU3R5bGVzJyxcbiAgYm9yZGVyUmFkaXVzOiAncmFkaWknLFxuICBib3JkZXJUb3BSaWdodFJhZGl1czogJ3JhZGlpJyxcbiAgYm9yZGVyVG9wTGVmdFJhZGl1czogJ3JhZGlpJyxcbiAgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6ICdyYWRpaScsXG4gIGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6ICdyYWRpaScsXG4gIGJvcmRlclRvcFdpZHRoOiAnYm9yZGVyV2lkdGhzJyxcbiAgYm9yZGVyVG9wQ29sb3I6ICdjb2xvcnMnLFxuICBib3JkZXJUb3BTdHlsZTogJ2JvcmRlclN0eWxlcycsXG4gIGJvcmRlckJvdHRvbVdpZHRoOiAnYm9yZGVyV2lkdGhzJyxcbiAgYm9yZGVyQm90dG9tQ29sb3I6ICdjb2xvcnMnLFxuICBib3JkZXJCb3R0b21TdHlsZTogJ2JvcmRlclN0eWxlcycsXG4gIGJvcmRlckxlZnRXaWR0aDogJ2JvcmRlcldpZHRocycsXG4gIGJvcmRlckxlZnRDb2xvcjogJ2NvbG9ycycsXG4gIGJvcmRlckxlZnRTdHlsZTogJ2JvcmRlclN0eWxlcycsXG4gIGJvcmRlclJpZ2h0V2lkdGg6ICdib3JkZXJXaWR0aHMnLFxuICBib3JkZXJSaWdodENvbG9yOiAnY29sb3JzJyxcbiAgYm9yZGVyUmlnaHRTdHlsZTogJ2JvcmRlclN0eWxlcycsXG4gIG91dGxpbmVDb2xvcjogJ2NvbG9ycycsXG4gIGJveFNoYWRvdzogJ3NoYWRvd3MnLFxuICB0ZXh0U2hhZG93OiAnc2hhZG93cycsXG4gIHpJbmRleDogJ3pJbmRpY2VzJyxcbiAgd2lkdGg6ICdzaXplcycsXG4gIG1pbldpZHRoOiAnc2l6ZXMnLFxuICBtYXhXaWR0aDogJ3NpemVzJyxcbiAgaGVpZ2h0OiAnc2l6ZXMnLFxuICBtaW5IZWlnaHQ6ICdzaXplcycsXG4gIG1heEhlaWdodDogJ3NpemVzJyxcbiAgZmxleEJhc2lzOiAnc2l6ZXMnLFxuICBzaXplOiAnc2l6ZXMnLFxuICAvLyBzdmdcbiAgZmlsbDogJ2NvbG9ycycsXG4gIHN0cm9rZTogJ2NvbG9ycydcbn07XG5cbnZhciBwb3NpdGl2ZU9yTmVnYXRpdmUgPSBmdW5jdGlvbiBwb3NpdGl2ZU9yTmVnYXRpdmUoc2NhbGUsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8IHZhbHVlID49IDApIHtcbiAgICByZXR1cm4gZ2V0KHNjYWxlLCB2YWx1ZSwgdmFsdWUpO1xuICB9XG5cbiAgdmFyIGFic29sdXRlID0gTWF0aC5hYnModmFsdWUpO1xuICB2YXIgbiA9IGdldChzY2FsZSwgYWJzb2x1dGUsIGFic29sdXRlKTtcbiAgaWYgKHR5cGVvZiBuID09PSAnc3RyaW5nJykgcmV0dXJuICctJyArIG47XG4gIHJldHVybiBuICogLTE7XG59O1xuXG52YXIgdHJhbnNmb3JtcyA9IFsnbWFyZ2luJywgJ21hcmdpblRvcCcsICdtYXJnaW5SaWdodCcsICdtYXJnaW5Cb3R0b20nLCAnbWFyZ2luTGVmdCcsICdtYXJnaW5YJywgJ21hcmdpblknLCAndG9wJywgJ2JvdHRvbScsICdsZWZ0JywgJ3JpZ2h0J10ucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGN1cnIpIHtcbiAgdmFyIF9leHRlbmRzMjtcblxuICByZXR1cm4gX2V4dGVuZHMoe30sIGFjYywgKF9leHRlbmRzMiA9IHt9LCBfZXh0ZW5kczJbY3Vycl0gPSBwb3NpdGl2ZU9yTmVnYXRpdmUsIF9leHRlbmRzMikpO1xufSwge30pO1xuZXhwb3J0IHZhciByZXNwb25zaXZlID0gZnVuY3Rpb24gcmVzcG9uc2l2ZShzdHlsZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGVtZSkge1xuICAgIHZhciBuZXh0ID0ge307XG4gICAgdmFyIGJyZWFrcG9pbnRzID0gZ2V0KHRoZW1lLCAnYnJlYWtwb2ludHMnLCBkZWZhdWx0QnJlYWtwb2ludHMpO1xuICAgIHZhciBtZWRpYVF1ZXJpZXMgPSBbbnVsbF0uY29uY2F0KGJyZWFrcG9pbnRzLm1hcChmdW5jdGlvbiAobikge1xuICAgICAgcmV0dXJuIFwiQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogXCIgKyBuICsgXCIpXCI7XG4gICAgfSkpO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHN0eWxlcykge1xuICAgICAgdmFyIHZhbHVlID0gdHlwZW9mIHN0eWxlc1trZXldID09PSAnZnVuY3Rpb24nID8gc3R5bGVzW2tleV0odGhlbWUpIDogc3R5bGVzW2tleV07XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgbmV4dFtrZXldID0gdmFsdWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLnNsaWNlKDAsIG1lZGlhUXVlcmllcy5sZW5ndGgpLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBtZWRpYSA9IG1lZGlhUXVlcmllc1tpXTtcblxuICAgICAgICBpZiAoIW1lZGlhKSB7XG4gICAgICAgICAgbmV4dFtrZXldID0gdmFsdWVbaV07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0W21lZGlhXSA9IG5leHRbbWVkaWFdIHx8IHt9O1xuICAgICAgICBpZiAodmFsdWVbaV0gPT0gbnVsbCkgY29udGludWU7XG4gICAgICAgIG5leHRbbWVkaWFdW2tleV0gPSB2YWx1ZVtpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dDtcbiAgfTtcbn07XG5leHBvcnQgdmFyIGNzcyA9IGZ1bmN0aW9uIGNzcyhhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICBpZiAocHJvcHMgPT09IHZvaWQgMCkge1xuICAgICAgcHJvcHMgPSB7fTtcbiAgICB9XG5cbiAgICB2YXIgdGhlbWUgPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdFRoZW1lLCB7fSwgcHJvcHMudGhlbWUgfHwgcHJvcHMpO1xuXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBvYmogPSB0eXBlb2YgYXJncyA9PT0gJ2Z1bmN0aW9uJyA/IGFyZ3ModGhlbWUpIDogYXJncztcbiAgICB2YXIgc3R5bGVzID0gcmVzcG9uc2l2ZShvYmopKHRoZW1lKTtcblxuICAgIGZvciAodmFyIGtleSBpbiBzdHlsZXMpIHtcbiAgICAgIHZhciB4ID0gc3R5bGVzW2tleV07XG4gICAgICB2YXIgdmFsID0gdHlwZW9mIHggPT09ICdmdW5jdGlvbicgPyB4KHRoZW1lKSA6IHg7XG5cbiAgICAgIGlmIChrZXkgPT09ICd2YXJpYW50Jykge1xuICAgICAgICB2YXIgdmFyaWFudCA9IGNzcyhnZXQodGhlbWUsIHZhbCkpKHRoZW1lKTtcbiAgICAgICAgcmVzdWx0ID0gX2V4dGVuZHMoe30sIHJlc3VsdCwge30sIHZhcmlhbnQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXN1bHRba2V5XSA9IGNzcyh2YWwpKHRoZW1lKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcm9wID0gZ2V0KGFsaWFzZXMsIGtleSwga2V5KTtcbiAgICAgIHZhciBzY2FsZU5hbWUgPSBnZXQoc2NhbGVzLCBwcm9wKTtcbiAgICAgIHZhciBzY2FsZSA9IGdldCh0aGVtZSwgc2NhbGVOYW1lLCBnZXQodGhlbWUsIHByb3AsIHt9KSk7XG4gICAgICB2YXIgdHJhbnNmb3JtID0gZ2V0KHRyYW5zZm9ybXMsIHByb3AsIGdldCk7XG4gICAgICB2YXIgdmFsdWUgPSB0cmFuc2Zvcm0oc2NhbGUsIHZhbCwgdmFsKTtcblxuICAgICAgaWYgKG11bHRpcGxlc1twcm9wXSkge1xuICAgICAgICB2YXIgZGlycyA9IG11bHRpcGxlc1twcm9wXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICByZXN1bHRbZGlyc1tpXV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W3Byb3BdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBjc3M7XG4iLCJpbXBvcnQgeyBnZXQsIGNyZWF0ZVBhcnNlciB9IGZyb20gJ0BzdHlsZWQtc3lzdGVtL2NvcmUnO1xuaW1wb3J0IGNzcyBmcm9tICdAc3R5bGVkLXN5c3RlbS9jc3MnO1xuZXhwb3J0IHZhciB2YXJpYW50ID0gZnVuY3Rpb24gdmFyaWFudChfcmVmKSB7XG4gIHZhciBfY29uZmlnO1xuXG4gIHZhciBzY2FsZSA9IF9yZWYuc2NhbGUsXG4gICAgICBfcmVmJHByb3AgPSBfcmVmLnByb3AsXG4gICAgICBwcm9wID0gX3JlZiRwcm9wID09PSB2b2lkIDAgPyAndmFyaWFudCcgOiBfcmVmJHByb3AsXG4gICAgICBfcmVmJHZhcmlhbnRzID0gX3JlZi52YXJpYW50cyxcbiAgICAgIHZhcmlhbnRzID0gX3JlZiR2YXJpYW50cyA9PT0gdm9pZCAwID8ge30gOiBfcmVmJHZhcmlhbnRzLFxuICAgICAga2V5ID0gX3JlZi5rZXk7XG4gIHZhciBzeDtcblxuICBpZiAoT2JqZWN0LmtleXModmFyaWFudHMpLmxlbmd0aCkge1xuICAgIHN4ID0gZnVuY3Rpb24gc3godmFsdWUsIHNjYWxlLCBwcm9wcykge1xuICAgICAgcmV0dXJuIGNzcyhnZXQoc2NhbGUsIHZhbHVlLCBudWxsKSkocHJvcHMudGhlbWUpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgc3ggPSBmdW5jdGlvbiBzeCh2YWx1ZSwgc2NhbGUpIHtcbiAgICAgIHJldHVybiBnZXQoc2NhbGUsIHZhbHVlLCBudWxsKTtcbiAgICB9O1xuICB9XG5cbiAgc3guc2NhbGUgPSBzY2FsZSB8fCBrZXk7XG4gIHN4LmRlZmF1bHRzID0gdmFyaWFudHM7XG4gIHZhciBjb25maWcgPSAoX2NvbmZpZyA9IHt9LCBfY29uZmlnW3Byb3BdID0gc3gsIF9jb25maWcpO1xuICB2YXIgcGFyc2VyID0gY3JlYXRlUGFyc2VyKGNvbmZpZyk7XG4gIHJldHVybiBwYXJzZXI7XG59O1xuZXhwb3J0IGRlZmF1bHQgdmFyaWFudDtcbmV4cG9ydCB2YXIgYnV0dG9uU3R5bGUgPSB2YXJpYW50KHtcbiAga2V5OiAnYnV0dG9ucydcbn0pO1xuZXhwb3J0IHZhciB0ZXh0U3R5bGUgPSB2YXJpYW50KHtcbiAga2V5OiAndGV4dFN0eWxlcycsXG4gIHByb3A6ICd0ZXh0U3R5bGUnXG59KTtcbmV4cG9ydCB2YXIgY29sb3JTdHlsZSA9IHZhcmlhbnQoe1xuICBrZXk6ICdjb2xvclN0eWxlcycsXG4gIHByb3A6ICdjb2xvcnMnXG59KTtcbiIsImltcG9ydCB7IGNyZWF0ZVN0eWxlRnVuY3Rpb24sIGNyZWF0ZVBhcnNlciB9IGZyb20gJ0BzdHlsZWQtc3lzdGVtL2NvcmUnOyAvLyB2NCBhcGkgc2hpbXNcblxuaW1wb3J0IGxheW91dCBmcm9tICdAc3R5bGVkLXN5c3RlbS9sYXlvdXQnO1xuaW1wb3J0IGNvbG9yIGZyb20gJ0BzdHlsZWQtc3lzdGVtL2NvbG9yJztcbmltcG9ydCB0eXBvZ3JhcGh5IGZyb20gJ0BzdHlsZWQtc3lzdGVtL3R5cG9ncmFwaHknO1xuaW1wb3J0IGZsZXhib3ggZnJvbSAnQHN0eWxlZC1zeXN0ZW0vZmxleGJveCc7XG5pbXBvcnQgZ3JpZCBmcm9tICdAc3R5bGVkLXN5c3RlbS9ncmlkJztcbmltcG9ydCBib3JkZXIgZnJvbSAnQHN0eWxlZC1zeXN0ZW0vYm9yZGVyJztcbmltcG9ydCBiYWNrZ3JvdW5kIGZyb20gJ0BzdHlsZWQtc3lzdGVtL2JhY2tncm91bmQnO1xuaW1wb3J0IHBvc2l0aW9uIGZyb20gJ0BzdHlsZWQtc3lzdGVtL3Bvc2l0aW9uJztcbmV4cG9ydCB7IGdldCwgY3JlYXRlUGFyc2VyLCBjcmVhdGVTdHlsZUZ1bmN0aW9uLCBjb21wb3NlLCBzeXN0ZW0gfSBmcm9tICdAc3R5bGVkLXN5c3RlbS9jb3JlJztcbmV4cG9ydCB7IG1hcmdpbiwgcGFkZGluZywgc3BhY2UgfSBmcm9tICdAc3R5bGVkLXN5c3RlbS9zcGFjZSc7XG5leHBvcnQgeyBjb2xvciB9IGZyb20gJ0BzdHlsZWQtc3lzdGVtL2NvbG9yJztcbmV4cG9ydCB7IGxheW91dCB9IGZyb20gJ0BzdHlsZWQtc3lzdGVtL2xheW91dCc7XG5leHBvcnQgeyB0eXBvZ3JhcGh5IH0gZnJvbSAnQHN0eWxlZC1zeXN0ZW0vdHlwb2dyYXBoeSc7XG5leHBvcnQgeyBmbGV4Ym94IH0gZnJvbSAnQHN0eWxlZC1zeXN0ZW0vZmxleGJveCc7XG5leHBvcnQgeyBib3JkZXIgfSBmcm9tICdAc3R5bGVkLXN5c3RlbS9ib3JkZXInO1xuZXhwb3J0IHsgYmFja2dyb3VuZCB9IGZyb20gJ0BzdHlsZWQtc3lzdGVtL2JhY2tncm91bmQnO1xuZXhwb3J0IHsgcG9zaXRpb24gfSBmcm9tICdAc3R5bGVkLXN5c3RlbS9wb3NpdGlvbic7XG5leHBvcnQgeyBncmlkIH0gZnJvbSAnQHN0eWxlZC1zeXN0ZW0vZ3JpZCc7XG5leHBvcnQgeyBzaGFkb3cgfSBmcm9tICdAc3R5bGVkLXN5c3RlbS9zaGFkb3cnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBib3hTaGFkb3csIGRlZmF1bHQgYXMgdGV4dFNoYWRvdyB9IGZyb20gJ0BzdHlsZWQtc3lzdGVtL3NoYWRvdyc7XG5leHBvcnQgeyB2YXJpYW50LCBidXR0b25TdHlsZSwgdGV4dFN0eWxlLCBjb2xvclN0eWxlIH0gZnJvbSAnQHN0eWxlZC1zeXN0ZW0vdmFyaWFudCc7XG52YXIgd2lkdGggPSBsYXlvdXQud2lkdGgsXG4gICAgaGVpZ2h0ID0gbGF5b3V0LmhlaWdodCxcbiAgICBtaW5XaWR0aCA9IGxheW91dC5taW5XaWR0aCxcbiAgICBtaW5IZWlnaHQgPSBsYXlvdXQubWluSGVpZ2h0LFxuICAgIG1heFdpZHRoID0gbGF5b3V0Lm1heFdpZHRoLFxuICAgIG1heEhlaWdodCA9IGxheW91dC5tYXhIZWlnaHQsXG4gICAgc2l6ZSA9IGxheW91dC5zaXplLFxuICAgIHZlcnRpY2FsQWxpZ24gPSBsYXlvdXQudmVydGljYWxBbGlnbixcbiAgICBkaXNwbGF5ID0gbGF5b3V0LmRpc3BsYXksXG4gICAgb3ZlcmZsb3cgPSBsYXlvdXQub3ZlcmZsb3csXG4gICAgb3ZlcmZsb3dYID0gbGF5b3V0Lm92ZXJmbG93WCxcbiAgICBvdmVyZmxvd1kgPSBsYXlvdXQub3ZlcmZsb3dZO1xudmFyIG9wYWNpdHkgPSBjb2xvci5vcGFjaXR5O1xudmFyIGZvbnRTaXplID0gdHlwb2dyYXBoeS5mb250U2l6ZSxcbiAgICBmb250RmFtaWx5ID0gdHlwb2dyYXBoeS5mb250RmFtaWx5LFxuICAgIGZvbnRXZWlnaHQgPSB0eXBvZ3JhcGh5LmZvbnRXZWlnaHQsXG4gICAgbGluZUhlaWdodCA9IHR5cG9ncmFwaHkubGluZUhlaWdodCxcbiAgICB0ZXh0QWxpZ24gPSB0eXBvZ3JhcGh5LnRleHRBbGlnbixcbiAgICBmb250U3R5bGUgPSB0eXBvZ3JhcGh5LmZvbnRTdHlsZSxcbiAgICBsZXR0ZXJTcGFjaW5nID0gdHlwb2dyYXBoeS5sZXR0ZXJTcGFjaW5nO1xudmFyIGFsaWduSXRlbXMgPSBmbGV4Ym94LmFsaWduSXRlbXMsXG4gICAgYWxpZ25Db250ZW50ID0gZmxleGJveC5hbGlnbkNvbnRlbnQsXG4gICAganVzdGlmeUl0ZW1zID0gZmxleGJveC5qdXN0aWZ5SXRlbXMsXG4gICAganVzdGlmeUNvbnRlbnQgPSBmbGV4Ym94Lmp1c3RpZnlDb250ZW50LFxuICAgIGZsZXhXcmFwID0gZmxleGJveC5mbGV4V3JhcCxcbiAgICBmbGV4RGlyZWN0aW9uID0gZmxleGJveC5mbGV4RGlyZWN0aW9uLFxuICAgIGZsZXggPSBmbGV4Ym94LmZsZXgsXG4gICAgZmxleEdyb3cgPSBmbGV4Ym94LmZsZXhHcm93LFxuICAgIGZsZXhTaHJpbmsgPSBmbGV4Ym94LmZsZXhTaHJpbmssXG4gICAgZmxleEJhc2lzID0gZmxleGJveC5mbGV4QmFzaXMsXG4gICAganVzdGlmeVNlbGYgPSBmbGV4Ym94Lmp1c3RpZnlTZWxmLFxuICAgIGFsaWduU2VsZiA9IGZsZXhib3guYWxpZ25TZWxmLFxuICAgIG9yZGVyID0gZmxleGJveC5vcmRlcjtcbnZhciBncmlkR2FwID0gZ3JpZC5ncmlkR2FwLFxuICAgIGdyaWRDb2x1bW5HYXAgPSBncmlkLmdyaWRDb2x1bW5HYXAsXG4gICAgZ3JpZFJvd0dhcCA9IGdyaWQuZ3JpZFJvd0dhcCxcbiAgICBncmlkQ29sdW1uID0gZ3JpZC5ncmlkQ29sdW1uLFxuICAgIGdyaWRSb3cgPSBncmlkLmdyaWRSb3csXG4gICAgZ3JpZEF1dG9GbG93ID0gZ3JpZC5ncmlkQXV0b0Zsb3csXG4gICAgZ3JpZEF1dG9Db2x1bW5zID0gZ3JpZC5ncmlkQXV0b0NvbHVtbnMsXG4gICAgZ3JpZEF1dG9Sb3dzID0gZ3JpZC5ncmlkQXV0b1Jvd3MsXG4gICAgZ3JpZFRlbXBsYXRlQ29sdW1ucyA9IGdyaWQuZ3JpZFRlbXBsYXRlQ29sdW1ucyxcbiAgICBncmlkVGVtcGxhdGVSb3dzID0gZ3JpZC5ncmlkVGVtcGxhdGVSb3dzLFxuICAgIGdyaWRUZW1wbGF0ZUFyZWFzID0gZ3JpZC5ncmlkVGVtcGxhdGVBcmVhcyxcbiAgICBncmlkQXJlYSA9IGdyaWQuZ3JpZEFyZWE7XG52YXIgYm9yZGVyV2lkdGggPSBib3JkZXIuYm9yZGVyV2lkdGgsXG4gICAgYm9yZGVyU3R5bGUgPSBib3JkZXIuYm9yZGVyU3R5bGUsXG4gICAgYm9yZGVyQ29sb3IgPSBib3JkZXIuYm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyVG9wID0gYm9yZGVyLmJvcmRlclRvcCxcbiAgICBib3JkZXJSaWdodCA9IGJvcmRlci5ib3JkZXJSaWdodCxcbiAgICBib3JkZXJCb3R0b20gPSBib3JkZXIuYm9yZGVyQm90dG9tLFxuICAgIGJvcmRlckxlZnQgPSBib3JkZXIuYm9yZGVyTGVmdCxcbiAgICBib3JkZXJSYWRpdXMgPSBib3JkZXIuYm9yZGVyUmFkaXVzO1xudmFyIGJhY2tncm91bmRJbWFnZSA9IGJhY2tncm91bmQuYmFja2dyb3VuZEltYWdlLFxuICAgIGJhY2tncm91bmRTaXplID0gYmFja2dyb3VuZC5iYWNrZ3JvdW5kU2l6ZSxcbiAgICBiYWNrZ3JvdW5kUG9zaXRpb24gPSBiYWNrZ3JvdW5kLmJhY2tncm91bmRQb3NpdGlvbixcbiAgICBiYWNrZ3JvdW5kUmVwZWF0ID0gYmFja2dyb3VuZC5iYWNrZ3JvdW5kUmVwZWF0O1xudmFyIHpJbmRleCA9IHBvc2l0aW9uLnpJbmRleCxcbiAgICB0b3AgPSBwb3NpdGlvbi50b3AsXG4gICAgcmlnaHQgPSBwb3NpdGlvbi5yaWdodCxcbiAgICBib3R0b20gPSBwb3NpdGlvbi5ib3R0b20sXG4gICAgbGVmdCA9IHBvc2l0aW9uLmxlZnQ7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJvcmRlcnMgfSBmcm9tICdAc3R5bGVkLXN5c3RlbS9ib3JkZXInO1xuZXhwb3J0IHsgd2lkdGgsIGhlaWdodCwgbWluV2lkdGgsIG1pbkhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCwgc2l6ZSwgdmVydGljYWxBbGlnbiwgZGlzcGxheSwgb3ZlcmZsb3csIG92ZXJmbG93WCwgb3ZlcmZsb3dZIC8vIGNvbG9yXG4sIG9wYWNpdHkgLy8gdHlwb2dyYXBoeVxuLCBmb250U2l6ZSwgZm9udEZhbWlseSwgZm9udFdlaWdodCwgbGluZUhlaWdodCwgdGV4dEFsaWduLCBmb250U3R5bGUsIGxldHRlclNwYWNpbmcgLy8gZmxleGJveFxuLCBhbGlnbkl0ZW1zLCBhbGlnbkNvbnRlbnQsIGp1c3RpZnlJdGVtcywganVzdGlmeUNvbnRlbnQsIGZsZXhXcmFwLCBmbGV4RGlyZWN0aW9uLCBmbGV4LCBmbGV4R3JvdywgZmxleFNocmluaywgZmxleEJhc2lzLCBqdXN0aWZ5U2VsZiwgYWxpZ25TZWxmLCBvcmRlciAvLyBncmlkXG4sIGdyaWRHYXAsIGdyaWRDb2x1bW5HYXAsIGdyaWRSb3dHYXAsIGdyaWRDb2x1bW4sIGdyaWRSb3csIGdyaWRBdXRvRmxvdywgZ3JpZEF1dG9Db2x1bW5zLCBncmlkQXV0b1Jvd3MsIGdyaWRUZW1wbGF0ZUNvbHVtbnMsIGdyaWRUZW1wbGF0ZVJvd3MsIGdyaWRUZW1wbGF0ZUFyZWFzLCBncmlkQXJlYSAvLyBib3JkZXJcbiwgYm9yZGVyV2lkdGgsIGJvcmRlclN0eWxlLCBib3JkZXJDb2xvciwgYm9yZGVyVG9wLCBib3JkZXJSaWdodCwgYm9yZGVyQm90dG9tLCBib3JkZXJMZWZ0LCBib3JkZXJSYWRpdXMgLy8gYmFja2dyb3VuZFxuLCBiYWNrZ3JvdW5kSW1hZ2UsIGJhY2tncm91bmRTaXplLCBiYWNrZ3JvdW5kUG9zaXRpb24sIGJhY2tncm91bmRSZXBlYXQgLy8gcG9zaXRpb25cbiwgekluZGV4LCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfTsgLy8gdjQgc3R5bGUgQVBJIHNoaW1cblxuZXhwb3J0IHZhciBzdHlsZSA9IGZ1bmN0aW9uIHN0eWxlKF9yZWYpIHtcbiAgdmFyIHByb3AgPSBfcmVmLnByb3AsXG4gICAgICBjc3NQcm9wZXJ0eSA9IF9yZWYuY3NzUHJvcGVydHksXG4gICAgICBhbGlhcyA9IF9yZWYuYWxpYXMsXG4gICAgICBrZXkgPSBfcmVmLmtleSxcbiAgICAgIHRyYW5zZm9ybVZhbHVlID0gX3JlZi50cmFuc2Zvcm1WYWx1ZSxcbiAgICAgIHNjYWxlID0gX3JlZi5zY2FsZSxcbiAgICAgIHByb3BlcnRpZXMgPSBfcmVmLnByb3BlcnRpZXM7XG4gIHZhciBjb25maWcgPSB7fTtcbiAgY29uZmlnW3Byb3BdID0gY3JlYXRlU3R5bGVGdW5jdGlvbih7XG4gICAgcHJvcGVydGllczogcHJvcGVydGllcyxcbiAgICBwcm9wZXJ0eTogY3NzUHJvcGVydHkgfHwgcHJvcCxcbiAgICBzY2FsZToga2V5LFxuICAgIGRlZmF1bHRTY2FsZTogc2NhbGUsXG4gICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm1WYWx1ZVxuICB9KTtcbiAgaWYgKGFsaWFzKSBjb25maWdbYWxpYXNdID0gY29uZmlnW3Byb3BdO1xuICB2YXIgcGFyc2UgPSBjcmVhdGVQYXJzZXIoY29uZmlnKTtcbiAgcmV0dXJuIHBhcnNlO1xufTtcbiIsIi8vXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIsIGNvbXBhcmUsIGNvbXBhcmVDb250ZXh0KSB7XG4gIHZhciByZXQgPSBjb21wYXJlID8gY29tcGFyZS5jYWxsKGNvbXBhcmVDb250ZXh0LCBvYmpBLCBvYmpCKSA6IHZvaWQgMDtcblxuICBpZiAocmV0ICE9PSB2b2lkIDApIHtcbiAgICByZXR1cm4gISFyZXQ7XG4gIH1cblxuICBpZiAob2JqQSA9PT0gb2JqQikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmpBICE9PSBcIm9iamVjdFwiIHx8ICFvYmpBIHx8IHR5cGVvZiBvYmpCICE9PSBcIm9iamVjdFwiIHx8ICFvYmpCKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBiSGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmJpbmQob2JqQik7XG5cbiAgLy8gVGVzdCBmb3IgQSdzIGtleXMgZGlmZmVyZW50IGZyb20gQi5cbiAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwga2V5c0EubGVuZ3RoOyBpZHgrKykge1xuICAgIHZhciBrZXkgPSBrZXlzQVtpZHhdO1xuXG4gICAgaWYgKCFiSGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZUEgPSBvYmpBW2tleV07XG4gICAgdmFyIHZhbHVlQiA9IG9iakJba2V5XTtcblxuICAgIHJldCA9IGNvbXBhcmUgPyBjb21wYXJlLmNhbGwoY29tcGFyZUNvbnRleHQsIHZhbHVlQSwgdmFsdWVCLCBrZXkpIDogdm9pZCAwO1xuXG4gICAgaWYgKHJldCA9PT0gZmFsc2UgfHwgKHJldCA9PT0gdm9pZCAwICYmIHZhbHVlQSAhPT0gdmFsdWVCKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImZ1bmN0aW9uIHN0eWxpc19taW4gKFcpIHtcbiAgZnVuY3Rpb24gTShkLCBjLCBlLCBoLCBhKSB7XG4gICAgZm9yICh2YXIgbSA9IDAsIGIgPSAwLCB2ID0gMCwgbiA9IDAsIHEsIGcsIHggPSAwLCBLID0gMCwgaywgdSA9IGsgPSBxID0gMCwgbCA9IDAsIHIgPSAwLCBJID0gMCwgdCA9IDAsIEIgPSBlLmxlbmd0aCwgSiA9IEIgLSAxLCB5LCBmID0gJycsIHAgPSAnJywgRiA9ICcnLCBHID0gJycsIEM7IGwgPCBCOykge1xuICAgICAgZyA9IGUuY2hhckNvZGVBdChsKTtcbiAgICAgIGwgPT09IEogJiYgMCAhPT0gYiArIG4gKyB2ICsgbSAmJiAoMCAhPT0gYiAmJiAoZyA9IDQ3ID09PSBiID8gMTAgOiA0NyksIG4gPSB2ID0gbSA9IDAsIEIrKywgSisrKTtcblxuICAgICAgaWYgKDAgPT09IGIgKyBuICsgdiArIG0pIHtcbiAgICAgICAgaWYgKGwgPT09IEogJiYgKDAgPCByICYmIChmID0gZi5yZXBsYWNlKE4sICcnKSksIDAgPCBmLnRyaW0oKS5sZW5ndGgpKSB7XG4gICAgICAgICAgc3dpdGNoIChnKSB7XG4gICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgZiArPSBlLmNoYXJBdChsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnID0gNTk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGcpIHtcbiAgICAgICAgICBjYXNlIDEyMzpcbiAgICAgICAgICAgIGYgPSBmLnRyaW0oKTtcbiAgICAgICAgICAgIHEgPSBmLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICBrID0gMTtcblxuICAgICAgICAgICAgZm9yICh0ID0gKytsOyBsIDwgQjspIHtcbiAgICAgICAgICAgICAgc3dpdGNoIChnID0gZS5jaGFyQ29kZUF0KGwpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxMjM6XG4gICAgICAgICAgICAgICAgICBrKys7XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgMTI1OlxuICAgICAgICAgICAgICAgICAgay0tO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgICAgICAgc3dpdGNoIChnID0gZS5jaGFyQ29kZUF0KGwgKyAxKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodSA9IGwgKyAxOyB1IDwgSjsgKyt1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5jaGFyQ29kZUF0KHUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICg0MiA9PT0gZyAmJiA0MiA9PT0gZS5jaGFyQ29kZUF0KHUgLSAxKSAmJiBsICsgMiAhPT0gdSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gdSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICg0NyA9PT0gZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gdSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gdTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDkxOlxuICAgICAgICAgICAgICAgICAgZysrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgICAgICAgIGcrKztcblxuICAgICAgICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgICAgIGZvciAoOyBsKysgPCBKICYmIGUuY2hhckNvZGVBdChsKSAhPT0gZzspIHtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKDAgPT09IGspIGJyZWFrO1xuICAgICAgICAgICAgICBsKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGsgPSBlLnN1YnN0cmluZyh0LCBsKTtcbiAgICAgICAgICAgIDAgPT09IHEgJiYgKHEgPSAoZiA9IGYucmVwbGFjZShjYSwgJycpLnRyaW0oKSkuY2hhckNvZGVBdCgwKSk7XG5cbiAgICAgICAgICAgIHN3aXRjaCAocSkge1xuICAgICAgICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgICAgICAgIDAgPCByICYmIChmID0gZi5yZXBsYWNlKE4sICcnKSk7XG4gICAgICAgICAgICAgICAgZyA9IGYuY2hhckNvZGVBdCgxKTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAxMDA6XG4gICAgICAgICAgICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgICAgICAgICAgciA9IGM7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByID0gTztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBrID0gTShjLCByLCBrLCBnLCBhICsgMSk7XG4gICAgICAgICAgICAgICAgdCA9IGsubGVuZ3RoO1xuICAgICAgICAgICAgICAgIDAgPCBBICYmIChyID0gWChPLCBmLCBJKSwgQyA9IEgoMywgaywgciwgYywgRCwgeiwgdCwgZywgYSwgaCksIGYgPSByLmpvaW4oJycpLCB2b2lkIDAgIT09IEMgJiYgMCA9PT0gKHQgPSAoayA9IEMudHJpbSgpKS5sZW5ndGgpICYmIChnID0gMCwgayA9ICcnKSk7XG4gICAgICAgICAgICAgICAgaWYgKDAgPCB0KSBzd2l0Y2ggKGcpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgICAgICAgICBmID0gZi5yZXBsYWNlKGRhLCBlYSk7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOlxuICAgICAgICAgICAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgICAgICAgICBrID0gZiArICd7JyArIGsgKyAnfSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICAgICAgICAgICAgZiA9IGYucmVwbGFjZShmYSwgJyQxICQyJyk7XG4gICAgICAgICAgICAgICAgICAgIGsgPSBmICsgJ3snICsgayArICd9JztcbiAgICAgICAgICAgICAgICAgICAgayA9IDEgPT09IHcgfHwgMiA9PT0gdyAmJiBMKCdAJyArIGssIDMpID8gJ0Atd2Via2l0LScgKyBrICsgJ0AnICsgayA6ICdAJyArIGs7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBrID0gZiArIGssIDExMiA9PT0gaCAmJiAoayA9IChwICs9IGssICcnKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGsgPSAnJztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGsgPSBNKGMsIFgoYywgZiwgSSksIGssIGgsIGEgKyAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgRiArPSBrO1xuICAgICAgICAgICAgayA9IEkgPSByID0gdSA9IHEgPSAwO1xuICAgICAgICAgICAgZiA9ICcnO1xuICAgICAgICAgICAgZyA9IGUuY2hhckNvZGVBdCgrK2wpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDEyNTpcbiAgICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgICAgZiA9ICgwIDwgciA/IGYucmVwbGFjZShOLCAnJykgOiBmKS50cmltKCk7XG4gICAgICAgICAgICBpZiAoMSA8ICh0ID0gZi5sZW5ndGgpKSBzd2l0Y2ggKDAgPT09IHUgJiYgKHEgPSBmLmNoYXJDb2RlQXQoMCksIDQ1ID09PSBxIHx8IDk2IDwgcSAmJiAxMjMgPiBxKSAmJiAodCA9IChmID0gZi5yZXBsYWNlKCcgJywgJzonKSkubGVuZ3RoKSwgMCA8IEEgJiYgdm9pZCAwICE9PSAoQyA9IEgoMSwgZiwgYywgZCwgRCwgeiwgcC5sZW5ndGgsIGgsIGEsIGgpKSAmJiAwID09PSAodCA9IChmID0gQy50cmltKCkpLmxlbmd0aCkgJiYgKGYgPSAnXFx4MDBcXHgwMCcpLCBxID0gZi5jaGFyQ29kZUF0KDApLCBnID0gZi5jaGFyQ29kZUF0KDEpLCBxKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgICAgICAgIGlmICgxMDUgPT09IGcgfHwgOTkgPT09IGcpIHtcbiAgICAgICAgICAgICAgICAgIEcgKz0gZiArIGUuY2hhckF0KGwpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgNTggIT09IGYuY2hhckNvZGVBdCh0IC0gMSkgJiYgKHAgKz0gUChmLCBxLCBnLCBmLmNoYXJDb2RlQXQoMikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEkgPSByID0gdSA9IHEgPSAwO1xuICAgICAgICAgICAgZiA9ICcnO1xuICAgICAgICAgICAgZyA9IGUuY2hhckNvZGVBdCgrK2wpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZykge1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIDQ3ID09PSBiID8gYiA9IDAgOiAwID09PSAxICsgcSAmJiAxMDcgIT09IGggJiYgMCA8IGYubGVuZ3RoICYmIChyID0gMSwgZiArPSAnXFx4MDAnKTtcbiAgICAgICAgICAwIDwgQSAqIFkgJiYgSCgwLCBmLCBjLCBkLCBELCB6LCBwLmxlbmd0aCwgaCwgYSwgaCk7XG4gICAgICAgICAgeiA9IDE7XG4gICAgICAgICAgRCsrO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTk6XG4gICAgICAgIGNhc2UgMTI1OlxuICAgICAgICAgIGlmICgwID09PSBiICsgbiArIHYgKyBtKSB7XG4gICAgICAgICAgICB6Kys7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB6Kys7XG4gICAgICAgICAgeSA9IGUuY2hhckF0KGwpO1xuXG4gICAgICAgICAgc3dpdGNoIChnKSB7XG4gICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgICBpZiAoMCA9PT0gbiArIG0gKyBiKSBzd2l0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICAgICAgICB5ID0gJyc7XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAzMiAhPT0gZyAmJiAoeSA9ICcgJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgeSA9ICdcXFxcMCc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICB5ID0gJ1xcXFxmJztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgIHkgPSAnXFxcXHYnO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgICAgMCA9PT0gbiArIGIgKyBtICYmIChyID0gSSA9IDEsIHkgPSAnXFxmJyArIHkpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgICAgIGlmICgwID09PSBuICsgYiArIG0gKyBFICYmIDAgPCB1KSBzd2l0Y2ggKGwgLSB1KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgMTEyID09PSB4ICYmIDU4ID09PSBlLmNoYXJDb2RlQXQobCAtIDMpICYmIChFID0geCk7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAxMTEgPT09IEsgJiYgKEUgPSBLKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgICAgMCA9PT0gbiArIGIgKyBtICYmICh1ID0gbCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgICAwID09PSBiICsgdiArIG4gKyBtICYmIChyID0gMSwgeSArPSAnXFxyJyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgMCA9PT0gYiAmJiAobiA9IG4gPT09IGcgPyAwIDogMCA9PT0gbiA/IGcgOiBuKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgOTE6XG4gICAgICAgICAgICAgIDAgPT09IG4gKyBiICsgdiAmJiBtKys7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDkzOlxuICAgICAgICAgICAgICAwID09PSBuICsgYiArIHYgJiYgbS0tO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgICAgMCA9PT0gbiArIGIgKyBtICYmIHYtLTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgIGlmICgwID09PSBuICsgYiArIG0pIHtcbiAgICAgICAgICAgICAgICBpZiAoMCA9PT0gcSkgc3dpdGNoICgyICogeCArIDMgKiBLKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDUzMzpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHEgPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2Kys7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgICAgMCA9PT0gYiArIHYgKyBuICsgbSArIHUgKyBrICYmIChrID0gMSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgICAgaWYgKCEoMCA8IG4gKyBtICsgdikpIHN3aXRjaCAoYikge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAoMiAqIGcgKyAzICogZS5jaGFyQ29kZUF0KGwgKyAxKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDIzNTpcbiAgICAgICAgICAgICAgICAgICAgICBiID0gNDc7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyMjA6XG4gICAgICAgICAgICAgICAgICAgICAgdCA9IGwsIGIgPSA0MjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgICAgICAgNDcgPT09IGcgJiYgNDIgPT09IHggJiYgdCArIDIgIT09IGwgJiYgKDMzID09PSBlLmNoYXJDb2RlQXQodCArIDIpICYmIChwICs9IGUuc3Vic3RyaW5nKHQsIGwgKyAxKSksIHkgPSAnJywgYiA9IDApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgMCA9PT0gYiAmJiAoZiArPSB5KTtcbiAgICAgIH1cblxuICAgICAgSyA9IHg7XG4gICAgICB4ID0gZztcbiAgICAgIGwrKztcbiAgICB9XG5cbiAgICB0ID0gcC5sZW5ndGg7XG5cbiAgICBpZiAoMCA8IHQpIHtcbiAgICAgIHIgPSBjO1xuICAgICAgaWYgKDAgPCBBICYmIChDID0gSCgyLCBwLCByLCBkLCBELCB6LCB0LCBoLCBhLCBoKSwgdm9pZCAwICE9PSBDICYmIDAgPT09IChwID0gQykubGVuZ3RoKSkgcmV0dXJuIEcgKyBwICsgRjtcbiAgICAgIHAgPSByLmpvaW4oJywnKSArICd7JyArIHAgKyAnfSc7XG5cbiAgICAgIGlmICgwICE9PSB3ICogRSkge1xuICAgICAgICAyICE9PSB3IHx8IEwocCwgMikgfHwgKEUgPSAwKTtcblxuICAgICAgICBzd2l0Y2ggKEUpIHtcbiAgICAgICAgICBjYXNlIDExMTpcbiAgICAgICAgICAgIHAgPSBwLnJlcGxhY2UoaGEsICc6LW1vei0kMScpICsgcDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxMTI6XG4gICAgICAgICAgICBwID0gcC5yZXBsYWNlKFEsICc6Oi13ZWJraXQtaW5wdXQtJDEnKSArIHAucmVwbGFjZShRLCAnOjotbW96LSQxJykgKyBwLnJlcGxhY2UoUSwgJzotbXMtaW5wdXQtJDEnKSArIHA7XG4gICAgICAgIH1cblxuICAgICAgICBFID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gRyArIHAgKyBGO1xuICB9XG5cbiAgZnVuY3Rpb24gWChkLCBjLCBlKSB7XG4gICAgdmFyIGggPSBjLnRyaW0oKS5zcGxpdChpYSk7XG4gICAgYyA9IGg7XG4gICAgdmFyIGEgPSBoLmxlbmd0aCxcbiAgICAgICAgbSA9IGQubGVuZ3RoO1xuXG4gICAgc3dpdGNoIChtKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHZhciBiID0gMDtcblxuICAgICAgICBmb3IgKGQgPSAwID09PSBtID8gJycgOiBkWzBdICsgJyAnOyBiIDwgYTsgKytiKSB7XG4gICAgICAgICAgY1tiXSA9IFooZCwgY1tiXSwgZSkudHJpbSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHZhciB2ID0gYiA9IDA7XG5cbiAgICAgICAgZm9yIChjID0gW107IGIgPCBhOyArK2IpIHtcbiAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IG07ICsrbikge1xuICAgICAgICAgICAgY1t2KytdID0gWihkW25dICsgJyAnLCBoW2JdLCBlKS50cmltKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIGZ1bmN0aW9uIFooZCwgYywgZSkge1xuICAgIHZhciBoID0gYy5jaGFyQ29kZUF0KDApO1xuICAgIDMzID4gaCAmJiAoaCA9IChjID0gYy50cmltKCkpLmNoYXJDb2RlQXQoMCkpO1xuXG4gICAgc3dpdGNoIChoKSB7XG4gICAgICBjYXNlIDM4OlxuICAgICAgICByZXR1cm4gYy5yZXBsYWNlKEYsICckMScgKyBkLnRyaW0oKSk7XG5cbiAgICAgIGNhc2UgNTg6XG4gICAgICAgIHJldHVybiBkLnRyaW0oKSArIGMucmVwbGFjZShGLCAnJDEnICsgZC50cmltKCkpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoMCA8IDEgKiBlICYmIDAgPCBjLmluZGV4T2YoJ1xcZicpKSByZXR1cm4gYy5yZXBsYWNlKEYsICg1OCA9PT0gZC5jaGFyQ29kZUF0KDApID8gJycgOiAnJDEnKSArIGQudHJpbSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZCArIGM7XG4gIH1cblxuICBmdW5jdGlvbiBQKGQsIGMsIGUsIGgpIHtcbiAgICB2YXIgYSA9IGQgKyAnOycsXG4gICAgICAgIG0gPSAyICogYyArIDMgKiBlICsgNCAqIGg7XG5cbiAgICBpZiAoOTQ0ID09PSBtKSB7XG4gICAgICBkID0gYS5pbmRleE9mKCc6JywgOSkgKyAxO1xuICAgICAgdmFyIGIgPSBhLnN1YnN0cmluZyhkLCBhLmxlbmd0aCAtIDEpLnRyaW0oKTtcbiAgICAgIGIgPSBhLnN1YnN0cmluZygwLCBkKS50cmltKCkgKyBiICsgJzsnO1xuICAgICAgcmV0dXJuIDEgPT09IHcgfHwgMiA9PT0gdyAmJiBMKGIsIDEpID8gJy13ZWJraXQtJyArIGIgKyBiIDogYjtcbiAgICB9XG5cbiAgICBpZiAoMCA9PT0gdyB8fCAyID09PSB3ICYmICFMKGEsIDEpKSByZXR1cm4gYTtcblxuICAgIHN3aXRjaCAobSkge1xuICAgICAgY2FzZSAxMDE1OlxuICAgICAgICByZXR1cm4gOTcgPT09IGEuY2hhckNvZGVBdCgxMCkgPyAnLXdlYmtpdC0nICsgYSArIGEgOiBhO1xuXG4gICAgICBjYXNlIDk1MTpcbiAgICAgICAgcmV0dXJuIDExNiA9PT0gYS5jaGFyQ29kZUF0KDMpID8gJy13ZWJraXQtJyArIGEgKyBhIDogYTtcblxuICAgICAgY2FzZSA5NjM6XG4gICAgICAgIHJldHVybiAxMTAgPT09IGEuY2hhckNvZGVBdCg1KSA/ICctd2Via2l0LScgKyBhICsgYSA6IGE7XG5cbiAgICAgIGNhc2UgMTAwOTpcbiAgICAgICAgaWYgKDEwMCAhPT0gYS5jaGFyQ29kZUF0KDQpKSBicmVhaztcblxuICAgICAgY2FzZSA5Njk6XG4gICAgICBjYXNlIDk0MjpcbiAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgYTtcblxuICAgICAgY2FzZSA5Nzg6XG4gICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbW96LScgKyBhICsgYTtcblxuICAgICAgY2FzZSAxMDE5OlxuICAgICAgY2FzZSA5ODM6XG4gICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbW96LScgKyBhICsgJy1tcy0nICsgYSArIGE7XG5cbiAgICAgIGNhc2UgODgzOlxuICAgICAgICBpZiAoNDUgPT09IGEuY2hhckNvZGVBdCg4KSkgcmV0dXJuICctd2Via2l0LScgKyBhICsgYTtcbiAgICAgICAgaWYgKDAgPCBhLmluZGV4T2YoJ2ltYWdlLXNldCgnLCAxMSkpIHJldHVybiBhLnJlcGxhY2UoamEsICckMS13ZWJraXQtJDInKSArIGE7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDkzMjpcbiAgICAgICAgaWYgKDQ1ID09PSBhLmNoYXJDb2RlQXQoNCkpIHN3aXRjaCAoYS5jaGFyQ29kZUF0KDUpKSB7XG4gICAgICAgICAgY2FzZSAxMDM6XG4gICAgICAgICAgICByZXR1cm4gJy13ZWJraXQtYm94LScgKyBhLnJlcGxhY2UoJy1ncm93JywgJycpICsgJy13ZWJraXQtJyArIGEgKyAnLW1zLScgKyBhLnJlcGxhY2UoJ2dyb3cnLCAncG9zaXRpdmUnKSArIGE7XG5cbiAgICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtJyArIGEucmVwbGFjZSgnc2hyaW5rJywgJ25lZ2F0aXZlJykgKyBhO1xuXG4gICAgICAgICAgY2FzZSA5ODpcbiAgICAgICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtJyArIGEucmVwbGFjZSgnYmFzaXMnLCAncHJlZmVycmVkLXNpemUnKSArIGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy0nICsgYSArIGE7XG5cbiAgICAgIGNhc2UgOTY0OlxuICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLWZsZXgtJyArIGEgKyBhO1xuXG4gICAgICBjYXNlIDEwMjM6XG4gICAgICAgIGlmICg5OSAhPT0gYS5jaGFyQ29kZUF0KDgpKSBicmVhaztcbiAgICAgICAgYiA9IGEuc3Vic3RyaW5nKGEuaW5kZXhPZignOicsIDE1KSkucmVwbGFjZSgnZmxleC0nLCAnJykucmVwbGFjZSgnc3BhY2UtYmV0d2VlbicsICdqdXN0aWZ5Jyk7XG4gICAgICAgIHJldHVybiAnLXdlYmtpdC1ib3gtcGFjaycgKyBiICsgJy13ZWJraXQtJyArIGEgKyAnLW1zLWZsZXgtcGFjaycgKyBiICsgYTtcblxuICAgICAgY2FzZSAxMDA1OlxuICAgICAgICByZXR1cm4ga2EudGVzdChhKSA/IGEucmVwbGFjZShhYSwgJzotd2Via2l0LScpICsgYS5yZXBsYWNlKGFhLCAnOi1tb3otJykgKyBhIDogYTtcblxuICAgICAgY2FzZSAxZTM6XG4gICAgICAgIGIgPSBhLnN1YnN0cmluZygxMykudHJpbSgpO1xuICAgICAgICBjID0gYi5pbmRleE9mKCctJykgKyAxO1xuXG4gICAgICAgIHN3aXRjaCAoYi5jaGFyQ29kZUF0KDApICsgYi5jaGFyQ29kZUF0KGMpKSB7XG4gICAgICAgICAgY2FzZSAyMjY6XG4gICAgICAgICAgICBiID0gYS5yZXBsYWNlKEcsICd0YicpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDIzMjpcbiAgICAgICAgICAgIGIgPSBhLnJlcGxhY2UoRywgJ3RiLXJsJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjIwOlxuICAgICAgICAgICAgYiA9IGEucmVwbGFjZShHLCAnbHInKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy0nICsgYiArIGE7XG5cbiAgICAgIGNhc2UgMTAxNzpcbiAgICAgICAgaWYgKC0xID09PSBhLmluZGV4T2YoJ3N0aWNreScsIDkpKSBicmVhaztcblxuICAgICAgY2FzZSA5NzU6XG4gICAgICAgIGMgPSAoYSA9IGQpLmxlbmd0aCAtIDEwO1xuICAgICAgICBiID0gKDMzID09PSBhLmNoYXJDb2RlQXQoYykgPyBhLnN1YnN0cmluZygwLCBjKSA6IGEpLnN1YnN0cmluZyhkLmluZGV4T2YoJzonLCA3KSArIDEpLnRyaW0oKTtcblxuICAgICAgICBzd2l0Y2ggKG0gPSBiLmNoYXJDb2RlQXQoMCkgKyAoYi5jaGFyQ29kZUF0KDcpIHwgMCkpIHtcbiAgICAgICAgICBjYXNlIDIwMzpcbiAgICAgICAgICAgIGlmICgxMTEgPiBiLmNoYXJDb2RlQXQoOCkpIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgICBhID0gYS5yZXBsYWNlKGIsICctd2Via2l0LScgKyBiKSArICc7JyArIGE7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjA3OlxuICAgICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgICAgYSA9IGEucmVwbGFjZShiLCAnLXdlYmtpdC0nICsgKDEwMiA8IG0gPyAnaW5saW5lLScgOiAnJykgKyAnYm94JykgKyAnOycgKyBhLnJlcGxhY2UoYiwgJy13ZWJraXQtJyArIGIpICsgJzsnICsgYS5yZXBsYWNlKGIsICctbXMtJyArIGIgKyAnYm94JykgKyAnOycgKyBhO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGEgKyAnOyc7XG5cbiAgICAgIGNhc2UgOTM4OlxuICAgICAgICBpZiAoNDUgPT09IGEuY2hhckNvZGVBdCg1KSkgc3dpdGNoIChhLmNoYXJDb2RlQXQoNikpIHtcbiAgICAgICAgICBjYXNlIDEwNTpcbiAgICAgICAgICAgIHJldHVybiBiID0gYS5yZXBsYWNlKCctaXRlbXMnLCAnJyksICctd2Via2l0LScgKyBhICsgJy13ZWJraXQtYm94LScgKyBiICsgJy1tcy1mbGV4LScgKyBiICsgYTtcblxuICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy1mbGV4LWl0ZW0tJyArIGEucmVwbGFjZShiYSwgJycpICsgYTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLWZsZXgtbGluZS1wYWNrJyArIGEucmVwbGFjZSgnYWxpZ24tY29udGVudCcsICcnKS5yZXBsYWNlKGJhLCAnJykgKyBhO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDk3MzpcbiAgICAgIGNhc2UgOTg5OlxuICAgICAgICBpZiAoNDUgIT09IGEuY2hhckNvZGVBdCgzKSB8fCAxMjIgPT09IGEuY2hhckNvZGVBdCg0KSkgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTMxOlxuICAgICAgY2FzZSA5NTM6XG4gICAgICAgIGlmICghMCA9PT0gbGEudGVzdChkKSkgcmV0dXJuIDExNSA9PT0gKGIgPSBkLnN1YnN0cmluZyhkLmluZGV4T2YoJzonKSArIDEpKS5jaGFyQ29kZUF0KDApID8gUChkLnJlcGxhY2UoJ3N0cmV0Y2gnLCAnZmlsbC1hdmFpbGFibGUnKSwgYywgZSwgaCkucmVwbGFjZSgnOmZpbGwtYXZhaWxhYmxlJywgJzpzdHJldGNoJykgOiBhLnJlcGxhY2UoYiwgJy13ZWJraXQtJyArIGIpICsgYS5yZXBsYWNlKGIsICctbW96LScgKyBiLnJlcGxhY2UoJ2ZpbGwtJywgJycpKSArIGE7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDk2MjpcbiAgICAgICAgaWYgKGEgPSAnLXdlYmtpdC0nICsgYSArICgxMDIgPT09IGEuY2hhckNvZGVBdCg1KSA/ICctbXMtJyArIGEgOiAnJykgKyBhLCAyMTEgPT09IGUgKyBoICYmIDEwNSA9PT0gYS5jaGFyQ29kZUF0KDEzKSAmJiAwIDwgYS5pbmRleE9mKCd0cmFuc2Zvcm0nLCAxMCkpIHJldHVybiBhLnN1YnN0cmluZygwLCBhLmluZGV4T2YoJzsnLCAyNykgKyAxKS5yZXBsYWNlKG1hLCAnJDEtd2Via2l0LSQyJykgKyBhO1xuICAgIH1cblxuICAgIHJldHVybiBhO1xuICB9XG5cbiAgZnVuY3Rpb24gTChkLCBjKSB7XG4gICAgdmFyIGUgPSBkLmluZGV4T2YoMSA9PT0gYyA/ICc6JyA6ICd7JyksXG4gICAgICAgIGggPSBkLnN1YnN0cmluZygwLCAzICE9PSBjID8gZSA6IDEwKTtcbiAgICBlID0gZC5zdWJzdHJpbmcoZSArIDEsIGQubGVuZ3RoIC0gMSk7XG4gICAgcmV0dXJuIFIoMiAhPT0gYyA/IGggOiBoLnJlcGxhY2UobmEsICckMScpLCBlLCBjKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVhKGQsIGMpIHtcbiAgICB2YXIgZSA9IFAoYywgYy5jaGFyQ29kZUF0KDApLCBjLmNoYXJDb2RlQXQoMSksIGMuY2hhckNvZGVBdCgyKSk7XG4gICAgcmV0dXJuIGUgIT09IGMgKyAnOycgPyBlLnJlcGxhY2Uob2EsICcgb3IgKCQxKScpLnN1YnN0cmluZyg0KSA6ICcoJyArIGMgKyAnKSc7XG4gIH1cblxuICBmdW5jdGlvbiBIKGQsIGMsIGUsIGgsIGEsIG0sIGIsIHYsIG4sIHEpIHtcbiAgICBmb3IgKHZhciBnID0gMCwgeCA9IGMsIHc7IGcgPCBBOyArK2cpIHtcbiAgICAgIHN3aXRjaCAodyA9IFNbZ10uY2FsbChCLCBkLCB4LCBlLCBoLCBhLCBtLCBiLCB2LCBuLCBxKSkge1xuICAgICAgICBjYXNlIHZvaWQgMDpcbiAgICAgICAgY2FzZSAhMTpcbiAgICAgICAgY2FzZSAhMDpcbiAgICAgICAgY2FzZSBudWxsOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgeCA9IHc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHggIT09IGMpIHJldHVybiB4O1xuICB9XG5cbiAgZnVuY3Rpb24gVChkKSB7XG4gICAgc3dpdGNoIChkKSB7XG4gICAgICBjYXNlIHZvaWQgMDpcbiAgICAgIGNhc2UgbnVsbDpcbiAgICAgICAgQSA9IFMubGVuZ3RoID0gMDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgZCkgU1tBKytdID0gZDtlbHNlIGlmICgnb2JqZWN0JyA9PT0gdHlwZW9mIGQpIGZvciAodmFyIGMgPSAwLCBlID0gZC5sZW5ndGg7IGMgPCBlOyArK2MpIHtcbiAgICAgICAgICBUKGRbY10pO1xuICAgICAgICB9IGVsc2UgWSA9ICEhZCB8IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIFQ7XG4gIH1cblxuICBmdW5jdGlvbiBVKGQpIHtcbiAgICBkID0gZC5wcmVmaXg7XG4gICAgdm9pZCAwICE9PSBkICYmIChSID0gbnVsbCwgZCA/ICdmdW5jdGlvbicgIT09IHR5cGVvZiBkID8gdyA9IDEgOiAodyA9IDIsIFIgPSBkKSA6IHcgPSAwKTtcbiAgICByZXR1cm4gVTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEIoZCwgYykge1xuICAgIHZhciBlID0gZDtcbiAgICAzMyA+IGUuY2hhckNvZGVBdCgwKSAmJiAoZSA9IGUudHJpbSgpKTtcbiAgICBWID0gZTtcbiAgICBlID0gW1ZdO1xuXG4gICAgaWYgKDAgPCBBKSB7XG4gICAgICB2YXIgaCA9IEgoLTEsIGMsIGUsIGUsIEQsIHosIDAsIDAsIDAsIDApO1xuICAgICAgdm9pZCAwICE9PSBoICYmICdzdHJpbmcnID09PSB0eXBlb2YgaCAmJiAoYyA9IGgpO1xuICAgIH1cblxuICAgIHZhciBhID0gTShPLCBlLCBjLCAwLCAwKTtcbiAgICAwIDwgQSAmJiAoaCA9IEgoLTIsIGEsIGUsIGUsIEQsIHosIGEubGVuZ3RoLCAwLCAwLCAwKSwgdm9pZCAwICE9PSBoICYmIChhID0gaCkpO1xuICAgIFYgPSAnJztcbiAgICBFID0gMDtcbiAgICB6ID0gRCA9IDE7XG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICB2YXIgY2EgPSAvXlxcMCsvZyxcbiAgICAgIE4gPSAvW1xcMFxcclxcZl0vZyxcbiAgICAgIGFhID0gLzogKi9nLFxuICAgICAga2EgPSAvem9vfGdyYS8sXG4gICAgICBtYSA9IC8oWyw6IF0pKHRyYW5zZm9ybSkvZyxcbiAgICAgIGlhID0gLyxcXHIrPy9nLFxuICAgICAgRiA9IC8oW1xcdFxcclxcbiBdKSpcXGY/Ji9nLFxuICAgICAgZmEgPSAvQChrXFx3KylcXHMqKFxcUyopXFxzKi8sXG4gICAgICBRID0gLzo6KHBsYWNlKS9nLFxuICAgICAgaGEgPSAvOihyZWFkLW9ubHkpL2csXG4gICAgICBHID0gL1tzdmhdXFx3Ky1bdGJscl17Mn0vLFxuICAgICAgZGEgPSAvXFwoXFxzKiguKilcXHMqXFwpL2csXG4gICAgICBvYSA9IC8oW1xcc1xcU10qPyk7L2csXG4gICAgICBiYSA9IC8tc2VsZnxmbGV4LS9nLFxuICAgICAgbmEgPSAvW15dKj8oOltycF1bZWxdYVtcXHctXSspW15dKi8sXG4gICAgICBsYSA9IC9zdHJldGNofDpcXHMqXFx3K1xcLSg/OmNvbnRlfGF2YWlsKS8sXG4gICAgICBqYSA9IC8oW14tXSkoaW1hZ2Utc2V0XFwoKS8sXG4gICAgICB6ID0gMSxcbiAgICAgIEQgPSAxLFxuICAgICAgRSA9IDAsXG4gICAgICB3ID0gMSxcbiAgICAgIE8gPSBbXSxcbiAgICAgIFMgPSBbXSxcbiAgICAgIEEgPSAwLFxuICAgICAgUiA9IG51bGwsXG4gICAgICBZID0gMCxcbiAgICAgIFYgPSAnJztcbiAgQi51c2UgPSBUO1xuICBCLnNldCA9IFU7XG4gIHZvaWQgMCAhPT0gVyAmJiBVKFcpO1xuICByZXR1cm4gQjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R5bGlzX21pbjtcbiIsInZhciB1bml0bGVzc0tleXMgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAxLFxuICBib3JkZXJJbWFnZU91dHNldDogMSxcbiAgYm9yZGVySW1hZ2VTbGljZTogMSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogMSxcbiAgYm94RmxleDogMSxcbiAgYm94RmxleEdyb3VwOiAxLFxuICBib3hPcmRpbmFsR3JvdXA6IDEsXG4gIGNvbHVtbkNvdW50OiAxLFxuICBjb2x1bW5zOiAxLFxuICBmbGV4OiAxLFxuICBmbGV4R3JvdzogMSxcbiAgZmxleFBvc2l0aXZlOiAxLFxuICBmbGV4U2hyaW5rOiAxLFxuICBmbGV4TmVnYXRpdmU6IDEsXG4gIGZsZXhPcmRlcjogMSxcbiAgZ3JpZFJvdzogMSxcbiAgZ3JpZFJvd0VuZDogMSxcbiAgZ3JpZFJvd1NwYW46IDEsXG4gIGdyaWRSb3dTdGFydDogMSxcbiAgZ3JpZENvbHVtbjogMSxcbiAgZ3JpZENvbHVtbkVuZDogMSxcbiAgZ3JpZENvbHVtblNwYW46IDEsXG4gIGdyaWRDb2x1bW5TdGFydDogMSxcbiAgbXNHcmlkUm93OiAxLFxuICBtc0dyaWRSb3dTcGFuOiAxLFxuICBtc0dyaWRDb2x1bW46IDEsXG4gIG1zR3JpZENvbHVtblNwYW46IDEsXG4gIGZvbnRXZWlnaHQ6IDEsXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIG9wYWNpdHk6IDEsXG4gIG9yZGVyOiAxLFxuICBvcnBoYW5zOiAxLFxuICB0YWJTaXplOiAxLFxuICB3aWRvd3M6IDEsXG4gIHpJbmRleDogMSxcbiAgem9vbTogMSxcbiAgV2Via2l0TGluZUNsYW1wOiAxLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiAxLFxuICBmbG9vZE9wYWNpdHk6IDEsXG4gIHN0b3BPcGFjaXR5OiAxLFxuICBzdHJva2VEYXNoYXJyYXk6IDEsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDEsXG4gIHN0cm9rZU1pdGVybGltaXQ6IDEsXG4gIHN0cm9rZU9wYWNpdHk6IDEsXG4gIHN0cm9rZVdpZHRoOiAxXG59O1xuXG5leHBvcnQgZGVmYXVsdCB1bml0bGVzc0tleXM7XG4iLCJmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlW2FyZ10gPT09IHVuZGVmaW5lZCkgY2FjaGVbYXJnXSA9IGZuKGFyZyk7XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemU7XG4iLCJpbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIHJlYWN0UHJvcHNSZWdleCA9IC9eKChjaGlsZHJlbnxkYW5nZXJvdXNseVNldElubmVySFRNTHxrZXl8cmVmfGF1dG9Gb2N1c3xkZWZhdWx0VmFsdWV8ZGVmYXVsdENoZWNrZWR8aW5uZXJIVE1MfHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ3xzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8dmFsdWVMaW5rfGFiYnJ8YWNjZXB0fGFjY2VwdENoYXJzZXR8YWNjZXNzS2V5fGFjdGlvbnxhbGxvd3xhbGxvd1VzZXJNZWRpYXxhbGxvd1BheW1lbnRSZXF1ZXN0fGFsbG93RnVsbFNjcmVlbnxhbGxvd1RyYW5zcGFyZW5jeXxhbHR8YXN5bmN8YXV0b0NvbXBsZXRlfGF1dG9QbGF5fGNhcHR1cmV8Y2VsbFBhZGRpbmd8Y2VsbFNwYWNpbmd8Y2hhbGxlbmdlfGNoYXJTZXR8Y2hlY2tlZHxjaXRlfGNsYXNzSUR8Y2xhc3NOYW1lfGNvbHN8Y29sU3Bhbnxjb250ZW50fGNvbnRlbnRFZGl0YWJsZXxjb250ZXh0TWVudXxjb250cm9sc3xjb250cm9sc0xpc3R8Y29vcmRzfGNyb3NzT3JpZ2lufGRhdGF8ZGF0ZVRpbWV8ZGVjb2Rpbmd8ZGVmYXVsdHxkZWZlcnxkaXJ8ZGlzYWJsZWR8ZGlzYWJsZVBpY3R1cmVJblBpY3R1cmV8ZG93bmxvYWR8ZHJhZ2dhYmxlfGVuY1R5cGV8ZW50ZXJLZXlIaW50fGZvcm18Zm9ybUFjdGlvbnxmb3JtRW5jVHlwZXxmb3JtTWV0aG9kfGZvcm1Ob1ZhbGlkYXRlfGZvcm1UYXJnZXR8ZnJhbWVCb3JkZXJ8aGVhZGVyc3xoZWlnaHR8aGlkZGVufGhpZ2h8aHJlZnxocmVmTGFuZ3xodG1sRm9yfGh0dHBFcXVpdnxpZHxpbnB1dE1vZGV8aW50ZWdyaXR5fGlzfGtleVBhcmFtc3xrZXlUeXBlfGtpbmR8bGFiZWx8bGFuZ3xsaXN0fGxvYWRpbmd8bG9vcHxsb3d8bWFyZ2luSGVpZ2h0fG1hcmdpbldpZHRofG1heHxtYXhMZW5ndGh8bWVkaWF8bWVkaWFHcm91cHxtZXRob2R8bWlufG1pbkxlbmd0aHxtdWx0aXBsZXxtdXRlZHxuYW1lfG5vbmNlfG5vVmFsaWRhdGV8b3BlbnxvcHRpbXVtfHBhdHRlcm58cGxhY2Vob2xkZXJ8cGxheXNJbmxpbmV8cG9zdGVyfHByZWxvYWR8cHJvZmlsZXxyYWRpb0dyb3VwfHJlYWRPbmx5fHJlZmVycmVyUG9saWN5fHJlbHxyZXF1aXJlZHxyZXZlcnNlZHxyb2xlfHJvd3N8cm93U3BhbnxzYW5kYm94fHNjb3BlfHNjb3BlZHxzY3JvbGxpbmd8c2VhbWxlc3N8c2VsZWN0ZWR8c2hhcGV8c2l6ZXxzaXplc3xzbG90fHNwYW58c3BlbGxDaGVja3xzcmN8c3JjRG9jfHNyY0xhbmd8c3JjU2V0fHN0YXJ0fHN0ZXB8c3R5bGV8c3VtbWFyeXx0YWJJbmRleHx0YXJnZXR8dGl0bGV8dHJhbnNsYXRlfHR5cGV8dXNlTWFwfHZhbHVlfHdpZHRofHdtb2RlfHdyYXB8YWJvdXR8ZGF0YXR5cGV8aW5saXN0fHByZWZpeHxwcm9wZXJ0eXxyZXNvdXJjZXx0eXBlb2Z8dm9jYWJ8YXV0b0NhcGl0YWxpemV8YXV0b0NvcnJlY3R8YXV0b1NhdmV8Y29sb3J8aW5jcmVtZW50YWx8ZmFsbGJhY2t8aW5lcnR8aXRlbVByb3B8aXRlbVNjb3BlfGl0ZW1UeXBlfGl0ZW1JRHxpdGVtUmVmfG9ufG9wdGlvbnxyZXN1bHRzfHNlY3VyaXR5fHVuc2VsZWN0YWJsZXxhY2NlbnRIZWlnaHR8YWNjdW11bGF0ZXxhZGRpdGl2ZXxhbGlnbm1lbnRCYXNlbGluZXxhbGxvd1Jlb3JkZXJ8YWxwaGFiZXRpY3xhbXBsaXR1ZGV8YXJhYmljRm9ybXxhc2NlbnR8YXR0cmlidXRlTmFtZXxhdHRyaWJ1dGVUeXBlfGF1dG9SZXZlcnNlfGF6aW11dGh8YmFzZUZyZXF1ZW5jeXxiYXNlbGluZVNoaWZ0fGJhc2VQcm9maWxlfGJib3h8YmVnaW58Ymlhc3xieXxjYWxjTW9kZXxjYXBIZWlnaHR8Y2xpcHxjbGlwUGF0aFVuaXRzfGNsaXBQYXRofGNsaXBSdWxlfGNvbG9ySW50ZXJwb2xhdGlvbnxjb2xvckludGVycG9sYXRpb25GaWx0ZXJzfGNvbG9yUHJvZmlsZXxjb2xvclJlbmRlcmluZ3xjb250ZW50U2NyaXB0VHlwZXxjb250ZW50U3R5bGVUeXBlfGN1cnNvcnxjeHxjeXxkfGRlY2VsZXJhdGV8ZGVzY2VudHxkaWZmdXNlQ29uc3RhbnR8ZGlyZWN0aW9ufGRpc3BsYXl8ZGl2aXNvcnxkb21pbmFudEJhc2VsaW5lfGR1cnxkeHxkeXxlZGdlTW9kZXxlbGV2YXRpb258ZW5hYmxlQmFja2dyb3VuZHxlbmR8ZXhwb25lbnR8ZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZHxmaWxsfGZpbGxPcGFjaXR5fGZpbGxSdWxlfGZpbHRlcnxmaWx0ZXJSZXN8ZmlsdGVyVW5pdHN8Zmxvb2RDb2xvcnxmbG9vZE9wYWNpdHl8Zm9jdXNhYmxlfGZvbnRGYW1pbHl8Zm9udFNpemV8Zm9udFNpemVBZGp1c3R8Zm9udFN0cmV0Y2h8Zm9udFN0eWxlfGZvbnRWYXJpYW50fGZvbnRXZWlnaHR8Zm9ybWF0fGZyb218ZnJ8Znh8Znl8ZzF8ZzJ8Z2x5cGhOYW1lfGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsfGdseXBoT3JpZW50YXRpb25WZXJ0aWNhbHxnbHlwaFJlZnxncmFkaWVudFRyYW5zZm9ybXxncmFkaWVudFVuaXRzfGhhbmdpbmd8aG9yaXpBZHZYfGhvcml6T3JpZ2luWHxpZGVvZ3JhcGhpY3xpbWFnZVJlbmRlcmluZ3xpbnxpbjJ8aW50ZXJjZXB0fGt8azF8azJ8azN8azR8a2VybmVsTWF0cml4fGtlcm5lbFVuaXRMZW5ndGh8a2VybmluZ3xrZXlQb2ludHN8a2V5U3BsaW5lc3xrZXlUaW1lc3xsZW5ndGhBZGp1c3R8bGV0dGVyU3BhY2luZ3xsaWdodGluZ0NvbG9yfGxpbWl0aW5nQ29uZUFuZ2xlfGxvY2FsfG1hcmtlckVuZHxtYXJrZXJNaWR8bWFya2VyU3RhcnR8bWFya2VySGVpZ2h0fG1hcmtlclVuaXRzfG1hcmtlcldpZHRofG1hc2t8bWFza0NvbnRlbnRVbml0c3xtYXNrVW5pdHN8bWF0aGVtYXRpY2FsfG1vZGV8bnVtT2N0YXZlc3xvZmZzZXR8b3BhY2l0eXxvcGVyYXRvcnxvcmRlcnxvcmllbnR8b3JpZW50YXRpb258b3JpZ2lufG92ZXJmbG93fG92ZXJsaW5lUG9zaXRpb258b3ZlcmxpbmVUaGlja25lc3N8cGFub3NlMXxwYWludE9yZGVyfHBhdGhMZW5ndGh8cGF0dGVybkNvbnRlbnRVbml0c3xwYXR0ZXJuVHJhbnNmb3JtfHBhdHRlcm5Vbml0c3xwb2ludGVyRXZlbnRzfHBvaW50c3xwb2ludHNBdFh8cG9pbnRzQXRZfHBvaW50c0F0WnxwcmVzZXJ2ZUFscGhhfHByZXNlcnZlQXNwZWN0UmF0aW98cHJpbWl0aXZlVW5pdHN8cnxyYWRpdXN8cmVmWHxyZWZZfHJlbmRlcmluZ0ludGVudHxyZXBlYXRDb3VudHxyZXBlYXREdXJ8cmVxdWlyZWRFeHRlbnNpb25zfHJlcXVpcmVkRmVhdHVyZXN8cmVzdGFydHxyZXN1bHR8cm90YXRlfHJ4fHJ5fHNjYWxlfHNlZWR8c2hhcGVSZW5kZXJpbmd8c2xvcGV8c3BhY2luZ3xzcGVjdWxhckNvbnN0YW50fHNwZWN1bGFyRXhwb25lbnR8c3BlZWR8c3ByZWFkTWV0aG9kfHN0YXJ0T2Zmc2V0fHN0ZERldmlhdGlvbnxzdGVtaHxzdGVtdnxzdGl0Y2hUaWxlc3xzdG9wQ29sb3J8c3RvcE9wYWNpdHl8c3RyaWtldGhyb3VnaFBvc2l0aW9ufHN0cmlrZXRocm91Z2hUaGlja25lc3N8c3RyaW5nfHN0cm9rZXxzdHJva2VEYXNoYXJyYXl8c3Ryb2tlRGFzaG9mZnNldHxzdHJva2VMaW5lY2FwfHN0cm9rZUxpbmVqb2lufHN0cm9rZU1pdGVybGltaXR8c3Ryb2tlT3BhY2l0eXxzdHJva2VXaWR0aHxzdXJmYWNlU2NhbGV8c3lzdGVtTGFuZ3VhZ2V8dGFibGVWYWx1ZXN8dGFyZ2V0WHx0YXJnZXRZfHRleHRBbmNob3J8dGV4dERlY29yYXRpb258dGV4dFJlbmRlcmluZ3x0ZXh0TGVuZ3RofHRvfHRyYW5zZm9ybXx1MXx1Mnx1bmRlcmxpbmVQb3NpdGlvbnx1bmRlcmxpbmVUaGlja25lc3N8dW5pY29kZXx1bmljb2RlQmlkaXx1bmljb2RlUmFuZ2V8dW5pdHNQZXJFbXx2QWxwaGFiZXRpY3x2SGFuZ2luZ3x2SWRlb2dyYXBoaWN8dk1hdGhlbWF0aWNhbHx2YWx1ZXN8dmVjdG9yRWZmZWN0fHZlcnNpb258dmVydEFkdll8dmVydE9yaWdpblh8dmVydE9yaWdpbll8dmlld0JveHx2aWV3VGFyZ2V0fHZpc2liaWxpdHl8d2lkdGhzfHdvcmRTcGFjaW5nfHdyaXRpbmdNb2RlfHh8eEhlaWdodHx4MXx4Mnx4Q2hhbm5lbFNlbGVjdG9yfHhsaW5rQWN0dWF0ZXx4bGlua0FyY3JvbGV8eGxpbmtIcmVmfHhsaW5rUm9sZXx4bGlua1Nob3d8eGxpbmtUaXRsZXx4bGlua1R5cGV8eG1sQmFzZXx4bWxuc3x4bWxuc1hsaW5rfHhtbExhbmd8eG1sU3BhY2V8eXx5MXx5Mnx5Q2hhbm5lbFNlbGVjdG9yfHp8em9vbUFuZFBhbnxmb3J8Y2xhc3N8YXV0b2ZvY3VzKXwoKFtEZF1bQWFdW1R0XVtBYV18W0FhXVtScl1bSWldW0FhXXx4KS0uKikpJC87IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWJmZWU2OGE0Y2Q3ZTYwMDllZjYxZDIzXG5cbnZhciBpc1Byb3BWYWxpZCA9IC8qICNfX1BVUkVfXyAqL21lbW9pemUoZnVuY3Rpb24gKHByb3ApIHtcbiAgcmV0dXJuIHJlYWN0UHJvcHNSZWdleC50ZXN0KHByb3ApIHx8IHByb3AuY2hhckNvZGVBdCgwKSA9PT0gMTExXG4gIC8qIG8gKi9cbiAgJiYgcHJvcC5jaGFyQ29kZUF0KDEpID09PSAxMTBcbiAgLyogbiAqL1xuICAmJiBwcm9wLmNoYXJDb2RlQXQoMikgPCA5MTtcbn1cbi8qIForMSAqL1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgaXNQcm9wVmFsaWQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XG4gIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxuICBjb250ZXh0VHlwZTogdHJ1ZSxcbiAgY29udGV4dFR5cGVzOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxuICBtaXhpbnM6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICBuYW1lOiB0cnVlLFxuICBsZW5ndGg6IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWVcbn07XG52YXIgRk9SV0FSRF9SRUZfU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgcmVuZGVyOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWVcbn07XG52YXIgTUVNT19TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICBjb21wYXJlOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgVFlQRV9TVEFUSUNTID0ge307XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5Gb3J3YXJkUmVmXSA9IEZPUldBUkRfUkVGX1NUQVRJQ1M7XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5NZW1vXSA9IE1FTU9fU1RBVElDUztcblxuZnVuY3Rpb24gZ2V0U3RhdGljcyhjb21wb25lbnQpIHtcbiAgLy8gUmVhY3QgdjE2LjExIGFuZCBiZWxvd1xuICBpZiAocmVhY3RJcy5pc01lbW8oY29tcG9uZW50KSkge1xuICAgIHJldHVybiBNRU1PX1NUQVRJQ1M7XG4gIH0gLy8gUmVhY3QgdjE2LjEyIGFuZCBhYm92ZVxuXG5cbiAgcmV0dXJuIFRZUEVfU1RBVElDU1tjb21wb25lbnRbJyQkdHlwZW9mJ11dIHx8IFJFQUNUX1NUQVRJQ1M7XG59XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIG9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5mdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgYmxhY2tsaXN0KSB7XG4gIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXG4gICAgaWYgKG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICAgIGlmIChpbmhlcml0ZWRDb21wb25lbnQgJiYgaW5oZXJpdGVkQ29tcG9uZW50ICE9PSBvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgICAgaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBpbmhlcml0ZWRDb21wb25lbnQsIGJsYWNrbGlzdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRTdGF0aWNzID0gZ2V0U3RhdGljcyh0YXJnZXRDb21wb25lbnQpO1xuICAgIHZhciBzb3VyY2VTdGF0aWNzID0gZ2V0U3RhdGljcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFLTk9XTl9TVEFUSUNTW2tleV0gJiYgIShibGFja2xpc3QgJiYgYmxhY2tsaXN0W2tleV0pICYmICEoc291cmNlU3RhdGljcyAmJiBzb3VyY2VTdGF0aWNzW2tleV0pICYmICEodGFyZ2V0U3RhdGljcyAmJiB0YXJnZXRTdGF0aWNzW2tleV0pKSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEF2b2lkIGZhaWx1cmVzIGZyb20gcmVhZC1vbmx5IHByb3BlcnRpZXNcbiAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXRDb21wb25lbnQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcbiIsImltcG9ydCBfc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmNvbnN0IHN0eWxlZCA9IHR5cGVvZiBfc3R5bGVkID09PSAnZnVuY3Rpb24nID8gX3N0eWxlZCA6IF9zdHlsZWQuZGVmYXVsdDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZXhwb3J0c1xuZXhwb3J0IHsgc3R5bGVkIGFzIGRlZmF1bHQsIHN0eWxlZCB9O1xuZXhwb3J0ICogZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnOyIsImltcG9ydCB7IHNwYWNlIH0gZnJvbSAnc3R5bGVkLXN5c3RlbSc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5leHBvcnQgY29uc3QgQXZhdGFyID0gc3R5bGVkLmRpdmBcbiAgd2lkdGg6IDM2cHg7XG4gIGhlaWdodDogMzZweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4LXNocmluazogMDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGZvbnQtc2l6ZTogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuc3BhY2UubGd9O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAmOmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCckeyh7XG4gIHNyY1xufSkgPT4gc3JjfScpO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIH1cblxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMucHJpbWFyeTEwMH07XG4gIGNvbG9yOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMud2hpdGV9O1xuXG4gICR7c3BhY2V9XG5gO1xuQXZhdGFyLmRpc3BsYXlOYW1lID0gJ0F2YXRhcic7XG5leHBvcnQgZGVmYXVsdCBBdmF0YXI7IiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9wcmVmZXItZGVmYXVsdC1leHBvcnRcblxuLyoqXG4gKlxuICogR2VuZXJhdGVzIGNsYXNzIG5hbWUgZm9yIGdpdmVuIGNvbXBvbmVudC4gSXQgaXMgdXNlZCBieSBBZG1pbkpTIGNvcmUgdG8gYXBwZW5kIG5hbWVzcGFjZWRcbiAqIGNsYXNzZXMuXG4gKlxuICogIyMjIGV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBjc3NDbGFzcyB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nXG4gKlxuICogY3NzQ2xhc3MoJ0ljb24nLCAnbXktcmVndWxhci1jbGFzcy1uYW1lJylcbiAqIC8vIHJldHVybnM6ICdhZG1pbmpzX0ljb24gbXktcmVndWxhci1jbGFzcy1uYW1lJ1xuICogYGBgXG4gKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgQXJyYXk8c3RyaW5nPn0gY2xhc3NOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgW3JlZ3VsYXJDbGFzc11cbiAqIEBtZW1iZXJvZiBtb2R1bGU6QGFkbWluanMvZGVzaWduLXN5c3RlbVxuICovXG5leHBvcnQgY29uc3QgY3NzQ2xhc3MgPSAoY2xhc3NOYW1lLCByZWd1bGFyQ2xhc3MpID0+IHtcbiAgbGV0IG5hbWVzID0gW107XG4gIGlmIChjbGFzc05hbWUuam9pbikge1xuICAgIG5hbWVzID0gY2xhc3NOYW1lO1xuICB9IGVsc2Uge1xuICAgIG5hbWVzID0gW2NsYXNzTmFtZV07XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gbmFtZXMubWFwKG5hbWUgPT4gYGFkbWluanNfJHtuYW1lfWApO1xuICBpZiAocmVndWxhckNsYXNzKSB7XG4gICAgcGFyc2VkLnB1c2gocmVndWxhckNsYXNzKTtcbiAgfVxuICByZXR1cm4gcGFyc2VkLmpvaW4oJyAnKTtcbn07XG5leHBvcnQgZGVmYXVsdCBjc3NDbGFzczsiLCJpbXBvcnQgeyBjb2xvciwgc3BhY2UsIHR5cG9ncmFwaHksIHZhcmlhbnQgfSBmcm9tICdzdHlsZWQtc3lzdGVtJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IGNzc0NsYXNzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2Nzcy1jbGFzcy5qc1wiO1xuXG4vKipcbiAqIEBsb2FkIC4vYmFkZ2UtcHJvcHMuZG9jLm1kXG4gKiBAbWVtYmVyb2YgQmFkZ2VcbiAqIEBhbGlhcyBCYWRnZVByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWy4uLl0gT3RoZXIgcHJvcHMgZnJvbSB7QGxpbmsgQ29sb3JQcm9wc30sIHtAbGluayBTcGFjZVByb3BzfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB7QGxpbmsgVHlwb2dyYXBoeVByb3BzfVxuICovXG5cbmNvbnN0IHZhcmlhbnRTdHlsZSA9ICh2YXJpYW50Q29sb3IsIHByb3BzKSA9PiAoe1xuICBiZzogdmFyaWFudENvbG9yLFxuICBib3JkZXJDb2xvcjogdmFyaWFudENvbG9yLFxuICBjb2xvcjogcHJvcHMub3V0bGluZSA/IHZhcmlhbnRDb2xvciA6ICd3aGl0ZSdcbn0pO1xuY29uc3QgY29sb3JWYXJpYW50ID0gcHJvcHMgPT4gdmFyaWFudCh7XG4gIHZhcmlhbnRzOiB7XG4gICAgcHJpbWFyeTogdmFyaWFudFN0eWxlKCdwcmltYXJ5MTAwJywgcHJvcHMpLFxuICAgIGRhbmdlcjogdmFyaWFudFN0eWxlKCdlcnJvcicsIHByb3BzKSxcbiAgICBzdWNjZXNzOiB2YXJpYW50U3R5bGUoJ3N1Y2Nlc3MnLCBwcm9wcyksXG4gICAgaW5mbzogdmFyaWFudFN0eWxlKCdpbmZvJywgcHJvcHMpLFxuICAgIHNlY29uZGFyeTogdmFyaWFudFN0eWxlKCdhY2NlbnQnLCBwcm9wcyksXG4gICAgbGlnaHQ6IHZhcmlhbnRTdHlsZSgnbGlnaHQnLCBwcm9wcyksXG4gICAgZGVmYXVsdDoge31cbiAgfVxufSk7XG5jb25zdCBzaXplVmFyaWFudHMgPSB2YXJpYW50KHtcbiAgcHJvcDogJ3NpemUnLFxuICB2YXJpYW50czoge1xuICAgIHNtOiB7XG4gICAgICBweTogJ3hzJ1xuICAgIH0sXG4gICAgbGc6IHtcbiAgICAgIHB5OiAnMTFweCcsXG4gICAgICBweDogJzE0cHgnXG4gICAgfSxcbiAgICBkZWZhdWx0OiB7fVxuICB9XG59KTtcblxuLyoqXG4gKiBAbG9hZCAuL2JhZGdlLmRvYy5tZFxuICogQHNlZSBCYWRnZVByb3BzXG4gKiBAc2VlIHtAbGluayBodHRwczovL3N0b3J5Ym9vay5hZG1pbmpzLmNvLz9wYXRoPS9zdG9yeS9kZXNpZ25zeXN0ZW0tYXRvbXMtYmFkZ2UtLWRlZmF1bHQgU3RvcnlCb29rfVxuICogQGNvbXBvbmVudFxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHNlY3Rpb24gZGVzaWduLXN5c3RlbVxuICogQHN1YmNhdGVnb3J5IEF0b21zXG4gKi9cbmNvbnN0IEJhZGdlID0gc3R5bGVkLnNwYW5gXG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5ncmV5NDB9O1xuICBjb2xvcjogJHsoe1xuICBvdXRsaW5lLFxuICB0aGVtZVxufSkgPT4gb3V0bGluZSA/IHRoZW1lLmNvbG9ycy5ncmV5NjAgOiB0aGVtZS5jb2xvcnMud2hpdGV9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBmb250LWZhbWlseTogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuZm9udH07XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAke3NwYWNlfTtcbiAgJHtjb2xvcn07XG4gICR7dHlwb2dyYXBoeX07XG4gICR7cHJvcHMgPT4gY29sb3JWYXJpYW50KHByb3BzKX07XG4gICR7c2l6ZVZhcmlhbnRzfTtcbiAgJHsoe1xuICBvdXRsaW5lXG59KSA9PiBvdXRsaW5lID8gJ2JhY2tncm91bmQ6IHRyYW5zcGFyZW50OycgOiAnJ31cbmA7XG5CYWRnZS5kZWZhdWx0UHJvcHMgPSB7XG4gIHB4OiAnZGVmYXVsdCcsXG4gIHB5OiAnc20nLFxuICBmb250U2l6ZTogJ3NtJyxcbiAgYmc6ICdncmV5NDAnLFxuICBjbGFzc05hbWU6IGNzc0NsYXNzKCdCYWRnZScpXG59O1xuQmFkZ2UuZGlzcGxheU5hbWUgPSAnQmFkZ2UnO1xuZXhwb3J0IHsgQmFkZ2UgfTtcbmV4cG9ydCBkZWZhdWx0IEJhZGdlOyIsImltcG9ydCB7IHNwYWNlLCBjb2xvciwgbGF5b3V0LCBmbGV4Ym94LCBib3JkZXIsIHBvc2l0aW9uLCB2YXJpYW50LCBncmlkLCBzaGFkb3csIGJvcmRlclJhZGl1cyB9IGZyb20gJ3N0eWxlZC1zeXN0ZW0nO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuaW1wb3J0IHsgY3NzQ2xhc3MgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY3NzLWNsYXNzLmpzXCI7XG5cbi8qKlxuICogQGxvYWQgLi9ib3gtcHJvcHMuZG9jLm1kXG4gKiBAbWVtYmVyb2YgQm94XG4gKiBAYWxpYXMgQm94UHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbLi4uXSBPdGhlciBwcm9wcyBmcm9tIHtAbGluayBTcGFjZVByb3BzfSwge0BsaW5rIENvbG9yUHJvcHN9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIHtAbGluayBMYXlvdXRQcm9wc30sIHtAbGluayBGbGV4Ym94UHJvcHN9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIHtAbGluayBQb3NpdGlvblByb3BzfSBhbmQge0BsaW5rIEJvcmRlclByb3BzfS5cbiAqL1xuXG5jb25zdCB2YXJpYW50cyA9IHZhcmlhbnQoe1xuICB2YXJpYW50czoge1xuICAgIGdyZXk6IHtcbiAgICAgIGZsZXhHcm93OiAxLFxuICAgICAgYmc6ICdiZycsXG4gICAgICBweTogJ3hsJyxcbiAgICAgIHB4OiBbJzAnLCAneGwnXSxcbiAgICAgIGNsYXNzTmFtZTogY3NzQ2xhc3MoWydCb3gnLCAnQm94X0dyZXknXSlcbiAgICB9LFxuICAgIGNvbnRhaW5lcjoge1xuICAgICAgZmxleEdyb3c6IDEsXG4gICAgICBiZzogJ2NvbnRhaW5lcicsXG4gICAgICBweTogJ3hsJyxcbiAgICAgIHB4OiBbJzAnLCAneGwnXSxcbiAgICAgIGNsYXNzTmFtZTogY3NzQ2xhc3MoWydCb3gnLCAnQm94X0NvbnRhaW5lciddKSxcbiAgICAgIGJvcmRlclJhZGl1czogOFxuICAgIH0sXG4gICAgd2hpdGU6IHtcbiAgICAgIHB4OiBbJ2RlZmF1bHQnLCAneHhsJ10sXG4gICAgICBweTogJ3h4bCcsXG4gICAgICBiZzogJ3doaXRlJyxcbiAgICAgIGNsYXNzTmFtZTogY3NzQ2xhc3MoWydCb3gnLCAnQm94X1doaXRlJ10pXG4gICAgfSxcbiAgICBjYXJkOiB7XG4gICAgICBwOiAneHhsJyxcbiAgICAgIGJnOiAnd2hpdGUnLFxuICAgICAgY2xhc3NOYW1lOiBjc3NDbGFzcyhbJ0JveCcsICdCb3hfQ2FyZCddKSxcbiAgICAgIGJveFNoYWRvdzogJ2NhcmQnXG4gICAgfSxcbiAgICB0cmFuc3BhcmVudDoge1xuICAgICAgcHg6IFsnZGVmYXVsdCcsICd4eGwnXSxcbiAgICAgIHB5OiAneHhsJyxcbiAgICAgIGJnOiAndHJhbnNwYXJlbnQnLFxuICAgICAgY2xhc3NOYW1lOiBjc3NDbGFzcyhbJ0JveCcsICdCb3hfVHJhbnNwYXJlbnQnXSlcbiAgICB9XG4gIH1cbn0pO1xuXG4vKipcbiAqIEBsb2FkIC4vYm94LmRvYy5tZFxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQGNvbXBvbmVudFxuICogQHN1YmNhdGVnb3J5IEF0b21zXG4gKiBAc2VjdGlvbiBkZXNpZ24tc3lzdGVtXG4gKiBAc2VlIEJveFByb3BzXG4gKiBAc2VlIHtAbGluayBodHRwczovL3N0b3J5Ym9vay5hZG1pbmpzLmNvLz9wYXRoPS9zdG9yeS9kZXNpZ25zeXN0ZW0tYXRvbXMtYm94LS1zaW1wbGUtd2hpdGUtZ3JheS13cmFwcGVyIFN0b3J5Qm9va31cbiAqL1xuY29uc3QgQm94ID0gc3R5bGVkLnNlY3Rpb25gXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1pbi13aWR0aDogMDtcbiAgJHsoe1xuICBmbGV4XG59KSA9PiBmbGV4ICYmIHR5cGVvZiBmbGV4ID09PSAnYm9vbGVhbicgPyAnZGlzcGxheTogZmxleDsnIDogJyd9XG4gIGZvbnQtZmFtaWx5OiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5mb250fTtcbiAgbGluZS1oZWlnaHQ6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmxpbmVIZWlnaHRzLmRlZmF1bHR9O1xuICBmb250LXNpemU6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmZvbnRTaXplcy5kZWZhdWx0fTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgJHsoe1xuICBhbmltYXRlXG59KSA9PiBhbmltYXRlID8gJ3RyYW5zaXRpb246IGFsbCA1MDBtczsnIDogJyd9O1xuXG4gICR7c3BhY2V9O1xuICAke2NvbG9yfTtcbiAgJHtsYXlvdXR9O1xuICAke2ZsZXhib3h9O1xuICAke2dyaWR9O1xuICAke2JvcmRlcn07XG4gICR7Ym9yZGVyUmFkaXVzfVxuICAke3NoYWRvd307XG4gICR7cG9zaXRpb259O1xuICAke3ZhcmlhbnRzfTtcbmA7XG5Cb3guZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6IGNzc0NsYXNzKCdCb3gnKVxufTtcbkJveC5kaXNwbGF5TmFtZSA9ICdCb3gnO1xuZXhwb3J0IHsgQm94IH07XG5leHBvcnQgZGVmYXVsdCBCb3g7IiwiaW1wb3J0IHsgY3NzIH0gZnJvbSBcIi4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuY29uc3QgZGF0ZXBpY2tlclN0eWxlcyA9IGNzc2BcbiAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cImJvdHRvbVwiXSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUsIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XCJ0b3BcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLCAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyB7XG4gICAgbWFyZ2luLWxlZnQ6IC04cHg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cImJvdHRvbVwiXSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUsIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XCJ0b3BcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLCAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdywgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cImJvdHRvbVwiXSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGU6OmJlZm9yZSwgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cInRvcFwiXSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGU6OmJlZm9yZSwgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUge1xuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3JkZXI6IDhweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBoZWlnaHQ6IDA7XG4gICAgd2lkdGg6IDFweDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XCJib3R0b21cIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlOjpiZWZvcmUsIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XCJ0b3BcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlOjpiZWZvcmUsIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdzo6YmVmb3JlLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdzo6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIHotaW5kZXg6IC0xO1xuICAgIGJvcmRlci13aWR0aDogOHB4O1xuICAgIGxlZnQ6IC04cHg7XG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2FlYWVhZTtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XCJib3R0b21cIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlIHtcbiAgICB0b3A6IDA7XG4gICAgbWFyZ2luLXRvcDogLThweDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XCJib3R0b21cIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLCAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVwiYm90dG9tXCJdIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlIHtcbiAgICBib3JkZXItdG9wOiBub25lO1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmMGYwZjA7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVwiYm90dG9tXCJdIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlIHtcbiAgICB0b3A6IC0xcHg7XG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2FlYWVhZTtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XCJ0b3BcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLCAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyB7XG4gICAgYm90dG9tOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IC04cHg7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVwidG9wXCJdIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZSwgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3LS1kb3duLWFycm93LFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93LFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XCJ0b3BcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlOjpiZWZvcmUsIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdzo6YmVmb3JlLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdzo6YmVmb3JlIHtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgIGJvcmRlci10b3AtY29sb3I6ICNmZmY7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVwidG9wXCJdIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlLCAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldy0tZG93bi1hcnJvdzo6YmVmb3JlLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSB7XG4gICAgYm90dG9tOiAtMXB4O1xuICAgIGJvcmRlci10b3AtY29sb3I6ICNhZWFlYWU7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlci13cmFwcGVyIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXI6IDA7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlciB7XG4gICAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGNvbG9yOiAjMDAwO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNhZWFlYWU7XG4gICAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlci0tdGltZS1vbmx5IC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZSB7XG4gICAgbGVmdDogMzVweDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyLS10aW1lLW9ubHkgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyIHtcbiAgICBib3JkZXItbGVmdDogMDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyLS10aW1lLW9ubHkgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUge1xuICAgIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyLS10aW1lLW9ubHkgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHtcbiAgICBib3JkZXItcmFkaXVzOiAwLjNyZW07XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiA1MHB4O1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyIHtcbiAgICB6LWluZGV4OiAxO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cImJvdHRvbVwiXSB7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudD1cImJvdHRvbS1lbmRcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLCAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnQ9XCJ0b3AtZW5kXCJdIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZSB7XG4gICAgbGVmdDogYXV0bztcbiAgICByaWdodDogNTBweDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XCJ0b3BcIl0ge1xuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVwicmlnaHRcIl0ge1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVwicmlnaHRcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlIHtcbiAgICBsZWZ0OiBhdXRvO1xuICAgIHJpZ2h0OiA0MnB4O1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cImxlZnRcIl0ge1xuICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cImxlZnRcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlIHtcbiAgICBsZWZ0OiA0MnB4O1xuICAgIHJpZ2h0OiBhdXRvO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlciB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNhZWFlYWU7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4zcmVtO1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjNyZW07XG4gICAgcGFkZGluZy10b3A6IDhweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9faGVhZGVyLS10aW1lIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogOHB4O1xuICAgIHBhZGRpbmctbGVmdDogNXB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDVweDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLWRyb3Bkb3duLWNvbnRhaW5lci0tc2VsZWN0LFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtZHJvcGRvd24tY29udGFpbmVyLS1zZWxlY3QsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLWRyb3Bkb3duLWNvbnRhaW5lci0tc2VsZWN0LFxuICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1kcm9wZG93bi1jb250YWluZXItLXNjcm9sbCxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWRyb3Bkb3duLWNvbnRhaW5lci0tc2Nyb2xsLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1kcm9wZG93bi1jb250YWluZXItLXNjcm9sbCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1hcmdpbjogMCAycHg7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fY3VycmVudC1tb250aCxcbiAgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faGVhZGVyLFxuICAucmVhY3QtZGF0ZXBpY2tlci15ZWFyLWhlYWRlciB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBjb2xvcjogIzAwMDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBmb250LXNpemU6IDAuOTQ0cmVtO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faGVhZGVyIHtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbiB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBsaW5lLWhlaWdodDogMS43cmVtO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMTBweDtcbiAgICB3aWR0aDogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlcjogMC40NXJlbSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICB6LWluZGV4OiAxO1xuICAgIGhlaWdodDogMTBweDtcbiAgICB3aWR0aDogMTBweDtcbiAgICB0ZXh0LWluZGVudDogLTk5OWVtO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXMge1xuICAgIGxlZnQ6IDEwcHg7XG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjY2NjO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzOmhvdmVyIHtcbiAgICBib3JkZXItcmlnaHQtY29sb3I6ICNiM2IzYjM7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXMtLWRpc2FibGVkLCAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXMtLWRpc2FibGVkOmhvdmVyIHtcbiAgICBib3JkZXItcmlnaHQtY29sb3I6ICNlNmU2ZTY7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQge1xuICAgIHJpZ2h0OiAxMHB4O1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjY2NjO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQtLXdpdGgtdGltZTpub3QoLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQtLXdpdGgtdG9kYXktYnV0dG9uKSB7XG4gICAgcmlnaHQ6IDgwcHg7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dDpob3ZlciB7XG4gICAgYm9yZGVyLWxlZnQtY29sb3I6ICNiM2IzYjM7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dC0tZGlzYWJsZWQsIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0LS1kaXNhYmxlZDpob3ZlciB7XG4gICAgYm9yZGVyLWxlZnQtY29sb3I6ICNlNmU2ZTY7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy1wcmV2aW91cyB7XG4gICAgdG9wOiA0cHg7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogI2NjYztcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy1wcmV2aW91czpob3ZlciB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogI2IzYjNiMztcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy11cGNvbWluZyB7XG4gICAgdG9wOiAtNHB4O1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNjY2M7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtdXBjb21pbmc6aG92ZXIge1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNiM2IzYjM7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtY29udGFpbmVyIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aCB7XG4gICAgbWFyZ2luOiAwLjRyZW07XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGggLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiA0cmVtO1xuICAgIG1hcmdpbjogMnB4O1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LXRpbWUtY29udGFpbmVyIHtcbiAgICBjbGVhcjogYm90aDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW46IDVweCAwIDEwcHggMTVweDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LXRpbWUtY29udGFpbmVyIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2NhcHRpb24ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19pbnB1dC10aW1lLWNvbnRhaW5lciAucmVhY3QtZGF0ZXBpY2tlci10aW1lX19pbnB1dC1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19pbnB1dC10aW1lLWNvbnRhaW5lciAucmVhY3QtZGF0ZXBpY2tlci10aW1lX19pbnB1dC1jb250YWluZXIgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faW5wdXQge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19pbnB1dC10aW1lLWNvbnRhaW5lciAucmVhY3QtZGF0ZXBpY2tlci10aW1lX19pbnB1dC1jb250YWluZXIgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faW5wdXQgaW5wdXQge1xuICAgIHdpZHRoOiA4NXB4O1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LXRpbWUtY29udGFpbmVyIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2lucHV0LWNvbnRhaW5lciAucmVhY3QtZGF0ZXBpY2tlci10aW1lX19pbnB1dCBpbnB1dFt0eXBlPVwidGltZVwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LXRpbWUtY29udGFpbmVyIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2lucHV0LWNvbnRhaW5lciAucmVhY3QtZGF0ZXBpY2tlci10aW1lX19pbnB1dCBpbnB1dFt0eXBlPVwidGltZVwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19pbnB1dC10aW1lLWNvbnRhaW5lciAucmVhY3QtZGF0ZXBpY2tlci10aW1lX19pbnB1dC1jb250YWluZXIgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faW5wdXQgaW5wdXRbdHlwZT1cInRpbWVcIl0ge1xuICAgIC1tb3otYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LXRpbWUtY29udGFpbmVyIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2lucHV0LWNvbnRhaW5lciAucmVhY3QtZGF0ZXBpY2tlci10aW1lX19kZWxpbWl0ZXIge1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyIHtcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYWVhZWFlO1xuICAgIHdpZHRoOiA4NXB4O1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyLS13aXRoLXRvZGF5LWJ1dHRvbiB7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNhZWFlYWU7XG4gICAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogLTcycHg7XG4gICAgdG9wOiAwO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyIC5yZWFjdC1kYXRlcGlja2VyX190aW1lIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHtcbiAgICB3aWR0aDogODVweDtcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyIC5yZWFjdC1kYXRlcGlja2VyX190aW1lIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWJveCB1bC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3Qge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIGhlaWdodDogY2FsYygxOTVweCArICgxLjdyZW0gLyAyKSk7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgIHBhZGRpbmctcmlnaHQ6IDBweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lciAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZSAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1ib3ggdWwucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0IGxpLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdC1pdGVtIHtcbiAgICBoZWlnaHQ6IDMwcHg7XG4gICAgcGFkZGluZzogNXB4IDEwcHg7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lciAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZSAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1ib3ggdWwucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0IGxpLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdC1pdGVtOmhvdmVyIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lciAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZSAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1ib3ggdWwucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0IGxpLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdC1pdGVtLS1zZWxlY3RlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzIxNmJhNTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHVsLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdCBsaS5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTZiYTU7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHVsLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdCBsaS5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbS0tZGlzYWJsZWQge1xuICAgIGNvbG9yOiAjY2NjO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyIC5yZWFjdC1kYXRlcGlja2VyX190aW1lIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWJveCB1bC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QgbGkucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0LWl0ZW0tLWRpc2FibGVkOmhvdmVyIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fd2Vlay1udW1iZXIge1xuICAgIGNvbG9yOiAjY2NjO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMS43cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjdyZW07XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbjogMC4xNjZyZW07XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fd2Vlay1udW1iZXIucmVhY3QtZGF0ZXBpY2tlcl9fd2Vlay1udW1iZXItLWNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3dlZWstbnVtYmVyLnJlYWN0LWRhdGVwaWNrZXJfX3dlZWstbnVtYmVyLS1jbGlja2FibGU6aG92ZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS1uYW1lcyxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3dlZWsge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LW5hbWUsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19kYXksXG4gIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLW5hbWUge1xuICAgIGNvbG9yOiAjMDAwO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMS43cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjdyZW07XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbjogMC4xNjZyZW07XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLXNlbGVjdGVkLCAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLWluLXNlbGVjdGluZy1yYW5nZSwgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1pbi1yYW5nZSxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItLXNlbGVjdGVkLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci0taW4tc2VsZWN0aW5nLXJhbmdlLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci0taW4tcmFuZ2Uge1xuICAgIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjE2YmE1O1xuICAgIGNvbG9yOiAjZmZmO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1zZWxlY3RlZDpob3ZlciwgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1pbi1zZWxlY3RpbmctcmFuZ2U6aG92ZXIsIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC0taW4tcmFuZ2U6aG92ZXIsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1zZWxlY3RlZDpob3ZlcixcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItLWluLXNlbGVjdGluZy1yYW5nZTpob3ZlcixcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItLWluLXJhbmdlOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWQ1ZDkwO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1kaXNhYmxlZCxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItLWRpc2FibGVkIHtcbiAgICBjb2xvcjogI2NjYztcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC0tZGlzYWJsZWQ6aG92ZXIsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1kaXNhYmxlZDpob3ZlciB7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheSxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXRleHQsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19kYXk6aG92ZXIsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0OmhvdmVyLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0OmhvdmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwLjNyZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLXRvZGF5LFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dC0tdG9kYXksXG4gIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLXRvZGF5IHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWhpZ2hsaWdodGVkLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dC0taGlnaGxpZ2h0ZWQsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLWhpZ2hsaWdodGVkIHtcbiAgICBib3JkZXItcmFkaXVzOiAwLjNyZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzNkY2M0YTtcbiAgICBjb2xvcjogI2ZmZjtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWhpZ2hsaWdodGVkOmhvdmVyLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dC0taGlnaGxpZ2h0ZWQ6aG92ZXIsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLWhpZ2hsaWdodGVkOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzJiZTNmO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taGlnaGxpZ2h0ZWQtY3VzdG9tLTEsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1oaWdobGlnaHRlZC1jdXN0b20tMSxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0taGlnaGxpZ2h0ZWQtY3VzdG9tLTEge1xuICAgIGNvbG9yOiBtYWdlbnRhO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taGlnaGxpZ2h0ZWQtY3VzdG9tLTIsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1oaWdobGlnaHRlZC1jdXN0b20tMixcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0taGlnaGxpZ2h0ZWQtY3VzdG9tLTIge1xuICAgIGNvbG9yOiBncmVlbjtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLXNlbGVjdGVkLCAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1pbi1zZWxlY3RpbmctcmFuZ2UsIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWluLXJhbmdlLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dC0tc2VsZWN0ZWQsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1pbi1zZWxlY3RpbmctcmFuZ2UsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1pbi1yYW5nZSxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0tc2VsZWN0ZWQsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLWluLXNlbGVjdGluZy1yYW5nZSxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0taW4tcmFuZ2Uge1xuICAgIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjE2YmE1O1xuICAgIGNvbG9yOiAjZmZmO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0tc2VsZWN0ZWQ6aG92ZXIsIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWluLXNlbGVjdGluZy1yYW5nZTpob3ZlciwgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taW4tcmFuZ2U6aG92ZXIsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1zZWxlY3RlZDpob3ZlcixcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXRleHQtLWluLXNlbGVjdGluZy1yYW5nZTpob3ZlcixcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXRleHQtLWluLXJhbmdlOmhvdmVyLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0LS1zZWxlY3RlZDpob3ZlcixcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0taW4tc2VsZWN0aW5nLXJhbmdlOmhvdmVyLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0LS1pbi1yYW5nZTpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzFkNWQ5MDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWtleWJvYXJkLXNlbGVjdGVkLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dC0ta2V5Ym9hcmQtc2VsZWN0ZWQsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLWtleWJvYXJkLXNlbGVjdGVkIHtcbiAgICBib3JkZXItcmFkaXVzOiAwLjNyZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzJhODdkMDtcbiAgICBjb2xvcjogI2ZmZjtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWtleWJvYXJkLXNlbGVjdGVkOmhvdmVyLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dC0ta2V5Ym9hcmQtc2VsZWN0ZWQ6aG92ZXIsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLWtleWJvYXJkLXNlbGVjdGVkOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWQ1ZDkwO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taW4tc2VsZWN0aW5nLXJhbmdlICxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXRleHQtLWluLXNlbGVjdGluZy1yYW5nZSAsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLWluLXNlbGVjdGluZy1yYW5nZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgzMywgMTA3LCAxNjUsIDAuNSk7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLXNlbGVjdGluZy1yYW5nZSAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1pbi1yYW5nZSAsIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC0tc2VsZWN0aW5nLXJhbmdlXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1pbi1yYW5nZSAsIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC0tc2VsZWN0aW5nLXJhbmdlXG4gIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLWluLXJhbmdlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xuICAgIGNvbG9yOiAjMDAwO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0tZGlzYWJsZWQsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1kaXNhYmxlZCxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0tZGlzYWJsZWQge1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICBjb2xvcjogI2NjYztcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWRpc2FibGVkOmhvdmVyLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dC0tZGlzYWJsZWQ6aG92ZXIsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLWRpc2FibGVkOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1zZWxlY3RlZDpob3ZlciwgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXRleHQucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLWluLXJhbmdlOmhvdmVyLCAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1zZWxlY3RlZDpob3ZlciwgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXRleHQucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci0taW4tcmFuZ2U6aG92ZXIsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLXNlbGVjdGVkOmhvdmVyLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0LnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1pbi1yYW5nZTpob3ZlcixcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1zZWxlY3RlZDpob3ZlcixcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1pbi1yYW5nZTpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzIxNmJhNTtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0OmhvdmVyLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0OmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LWNvbnRhaW5lciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldyxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldyxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3IHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmFkaXVzOiAwLjNyZW07XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXc6aG92ZXIsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXc6aG92ZXIsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldzpob3ZlciB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3OmhvdmVyIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3OmhvdmVyIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXc6aG92ZXIgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3LS1kb3duLWFycm93LFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3OmhvdmVyIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldzpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldzpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93IHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiAjYjNiM2IzO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3LS1kb3duLWFycm93LFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93LFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3cge1xuICAgIGJvcmRlci10b3AtY29sb3I6ICNjY2M7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIG1hcmdpbi1sZWZ0OiAyMHB4O1xuICAgIHRvcDogOHB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3JkZXItd2lkdGg6IDAuNDVyZW07XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1kcm9wZG93bixcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWRyb3Bkb3duLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1kcm9wZG93biB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDUwJTtcbiAgICBsZWZ0OiAyNSU7XG4gICAgdG9wOiAzMHB4O1xuICAgIHotaW5kZXg6IDE7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjYWVhZWFlO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd246aG92ZXIsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1kcm9wZG93bjpob3ZlcixcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd246aG92ZXIge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLWRyb3Bkb3duLS1zY3JvbGxhYmxlLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtZHJvcGRvd24tLXNjcm9sbGFibGUsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLWRyb3Bkb3duLS1zY3JvbGxhYmxlIHtcbiAgICBoZWlnaHQ6IDE1MHB4O1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbixcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbixcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uIHtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb246Zmlyc3Qtb2YtdHlwZSxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbjpmaXJzdC1vZi10eXBlLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1vcHRpb246Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC4zcmVtO1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjNyZW07XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb246bGFzdC1vZi10eXBlLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtb3B0aW9uOmxhc3Qtb2YtdHlwZSxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uOmxhc3Qtb2YtdHlwZSB7XG4gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjNyZW07XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAuM3JlbTtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbjpob3ZlcixcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbjpob3ZlcixcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uOmhvdmVyIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy11cGNvbWluZyxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbjpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtdXBjb21pbmcsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLW9wdGlvbjpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtdXBjb21pbmcge1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNiM2IzYjM7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb246aG92ZXIgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXByZXZpb3VzLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtb3B0aW9uOmhvdmVyIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy1wcmV2aW91cyxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uOmhvdmVyIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy1wcmV2aW91cyB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogI2IzYjNiMztcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbi0tc2VsZWN0ZWQsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1vcHRpb24tLXNlbGVjdGVkLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1vcHRpb24tLXNlbGVjdGVkIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMTVweDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19jbG9zZS1pY29uIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiAwO1xuICAgIG91dGxpbmU6IDA7XG4gICAgcGFkZGluZzogMHB4IDZweCAwcHggMHB4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19jbG9zZS1pY29uOjphZnRlciB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTZiYTU7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGhlaWdodDogMTZweDtcbiAgICB3aWR0aDogMTZweDtcbiAgICBwYWRkaW5nOiAycHg7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgY29udGVudDogXCIwMGQ3XCI7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fdG9kYXktYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjYWVhZWFlO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgcGFkZGluZzogNXB4IDA7XG4gICAgY2xlYXI6IGxlZnQ7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGhlaWdodDogMTAwdmg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjgpO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB6LWluZGV4OiAyMTQ3NDgzNjQ3O1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LW5hbWUsXG4gIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX2RheSxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1uYW1lIHtcbiAgICB3aWR0aDogM3JlbTtcbiAgICBsaW5lLWhlaWdodDogM3JlbTtcbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0MDBweCksIChtYXgtaGVpZ2h0OiA1NTBweCkge1xuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS1uYW1lLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX2RheSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLW5hbWUge1xuICAgICAgd2lkdGg6IDJyZW07XG4gICAgICBsaW5lLWhlaWdodDogMnJlbTtcbiAgICB9XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19jdXJyZW50LW1vbnRoLFxuICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2hlYWRlciB7XG4gICAgZm9udC1zaXplOiAxLjQ0cmVtO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbiB7XG4gICAgYm9yZGVyOiAwLjgxcmVtIHNvbGlkIHRyYW5zcGFyZW50O1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXMge1xuICAgIGJvcmRlci1yaWdodC1jb2xvcjogI2NjYztcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzOmhvdmVyIHtcbiAgICBib3JkZXItcmlnaHQtY29sb3I6ICNiM2IzYjM7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1wcmV2aW91cy0tZGlzYWJsZWQsIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzLS1kaXNhYmxlZDpob3ZlciB7XG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjZTZlNmU2O1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgfVxuXG4gIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQge1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjY2NjO1xuICB9XG5cbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dDpob3ZlciB7XG4gICAgYm9yZGVyLWxlZnQtY29sb3I6ICNiM2IzYjM7XG4gIH1cblxuICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0LS1kaXNhYmxlZCwgLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dC0tZGlzYWJsZWQ6aG92ZXIge1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjZTZlNmU2O1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgfVxuYDtcbmV4cG9ydCBkZWZhdWx0IGRhdGVwaWNrZXJTdHlsZXM7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cbiAgcmV0dXJuIHNlbGY7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXNOYXRpdmVGdW5jdGlvbihmbikge1xuICByZXR1cm4gRnVuY3Rpb24udG9TdHJpbmcuY2FsbChmbikuaW5kZXhPZihcIltuYXRpdmUgY29kZV1cIikgIT09IC0xO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgZnJvbSBcIi4vaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgaWYgKGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0LmJpbmQoKTtcbiAgfSBlbHNlIHtcbiAgICBfY29uc3RydWN0ID0gZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gICAgICB2YXIgYSA9IFtudWxsXTtcbiAgICAgIGEucHVzaC5hcHBseShhLCBhcmdzKTtcbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoUGFyZW50LCBhKTtcbiAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgaWYgKENsYXNzKSBzZXRQcm90b3R5cGVPZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBfY29uc3RydWN0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59IiwiaW1wb3J0IGdldFByb3RvdHlwZU9mIGZyb20gXCIuL2dldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZUZ1bmN0aW9uIGZyb20gXCIuL2lzTmF0aXZlRnVuY3Rpb24uanNcIjtcbmltcG9ydCBjb25zdHJ1Y3QgZnJvbSBcIi4vY29uc3RydWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gIHZhciBfY2FjaGUgPSB0eXBlb2YgTWFwID09PSBcImZ1bmN0aW9uXCIgPyBuZXcgTWFwKCkgOiB1bmRlZmluZWQ7XG4gIF93cmFwTmF0aXZlU3VwZXIgPSBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gICAgaWYgKENsYXNzID09PSBudWxsIHx8ICFpc05hdGl2ZUZ1bmN0aW9uKENsYXNzKSkgcmV0dXJuIENsYXNzO1xuICAgIGlmICh0eXBlb2YgQ2xhc3MgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIF9jYWNoZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKF9jYWNoZS5oYXMoQ2xhc3MpKSByZXR1cm4gX2NhY2hlLmdldChDbGFzcyk7XG4gICAgICBfY2FjaGUuc2V0KENsYXNzLCBXcmFwcGVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gV3JhcHBlcigpIHtcbiAgICAgIHJldHVybiBjb25zdHJ1Y3QoQ2xhc3MsIGFyZ3VtZW50cywgZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgICBXcmFwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICB2YWx1ZTogV3JhcHBlcixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc2V0UHJvdG90eXBlT2YoV3JhcHBlciwgQ2xhc3MpO1xuICB9O1xuICByZXR1cm4gX3dyYXBOYXRpdmVTdXBlcihDbGFzcyk7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkJztcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlJztcbmltcG9ydCBfd3JhcE5hdGl2ZVN1cGVyIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3dyYXBOYXRpdmVTdXBlcic7XG5pbXBvcnQgX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbExvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbExvb3NlJztcblxuZnVuY3Rpb24gbGFzdCgpIHtcbiAgdmFyIF9yZWY7XG5cbiAgcmV0dXJuIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoIC0gMSwgX3JlZiA8IDAgfHwgYXJndW1lbnRzLmxlbmd0aCA8PSBfcmVmID8gdW5kZWZpbmVkIDogYXJndW1lbnRzW19yZWZdO1xufVxuXG5mdW5jdGlvbiBuZWdhdGlvbihhKSB7XG4gIHJldHVybiAtYTtcbn1cblxuZnVuY3Rpb24gYWRkaXRpb24oYSwgYikge1xuICByZXR1cm4gYSArIGI7XG59XG5cbmZ1bmN0aW9uIHN1YnRyYWN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgLSBiO1xufVxuXG5mdW5jdGlvbiBtdWx0aXBsaWNhdGlvbihhLCBiKSB7XG4gIHJldHVybiBhICogYjtcbn1cblxuZnVuY3Rpb24gZGl2aXNpb24oYSwgYikge1xuICByZXR1cm4gYSAvIGI7XG59XG5cbmZ1bmN0aW9uIG1heCgpIHtcbiAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KE1hdGgsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIG1pbigpIHtcbiAgcmV0dXJuIE1hdGgubWluLmFwcGx5KE1hdGgsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIGNvbW1hKCkge1xuICByZXR1cm4gQXJyYXkub2YuYXBwbHkoQXJyYXksIGFyZ3VtZW50cyk7XG59XG5cbnZhciBkZWZhdWx0U3ltYm9scyA9IHtcbiAgc3ltYm9sczoge1xuICAgICcqJzoge1xuICAgICAgaW5maXg6IHtcbiAgICAgICAgc3ltYm9sOiAnKicsXG4gICAgICAgIGY6IG11bHRpcGxpY2F0aW9uLFxuICAgICAgICBub3RhdGlvbjogJ2luZml4JyxcbiAgICAgICAgcHJlY2VkZW5jZTogNCxcbiAgICAgICAgcmlnaHRUb0xlZnQ6IDAsXG4gICAgICAgIGFyZ0NvdW50OiAyXG4gICAgICB9LFxuICAgICAgc3ltYm9sOiAnKicsXG4gICAgICByZWdTeW1ib2w6ICdcXFxcKidcbiAgICB9LFxuICAgICcvJzoge1xuICAgICAgaW5maXg6IHtcbiAgICAgICAgc3ltYm9sOiAnLycsXG4gICAgICAgIGY6IGRpdmlzaW9uLFxuICAgICAgICBub3RhdGlvbjogJ2luZml4JyxcbiAgICAgICAgcHJlY2VkZW5jZTogNCxcbiAgICAgICAgcmlnaHRUb0xlZnQ6IDAsXG4gICAgICAgIGFyZ0NvdW50OiAyXG4gICAgICB9LFxuICAgICAgc3ltYm9sOiAnLycsXG4gICAgICByZWdTeW1ib2w6ICcvJ1xuICAgIH0sXG4gICAgJysnOiB7XG4gICAgICBpbmZpeDoge1xuICAgICAgICBzeW1ib2w6ICcrJyxcbiAgICAgICAgZjogYWRkaXRpb24sXG4gICAgICAgIG5vdGF0aW9uOiAnaW5maXgnLFxuICAgICAgICBwcmVjZWRlbmNlOiAyLFxuICAgICAgICByaWdodFRvTGVmdDogMCxcbiAgICAgICAgYXJnQ291bnQ6IDJcbiAgICAgIH0sXG4gICAgICBwcmVmaXg6IHtcbiAgICAgICAgc3ltYm9sOiAnKycsXG4gICAgICAgIGY6IGxhc3QsXG4gICAgICAgIG5vdGF0aW9uOiAncHJlZml4JyxcbiAgICAgICAgcHJlY2VkZW5jZTogMyxcbiAgICAgICAgcmlnaHRUb0xlZnQ6IDAsXG4gICAgICAgIGFyZ0NvdW50OiAxXG4gICAgICB9LFxuICAgICAgc3ltYm9sOiAnKycsXG4gICAgICByZWdTeW1ib2w6ICdcXFxcKydcbiAgICB9LFxuICAgICctJzoge1xuICAgICAgaW5maXg6IHtcbiAgICAgICAgc3ltYm9sOiAnLScsXG4gICAgICAgIGY6IHN1YnRyYWN0aW9uLFxuICAgICAgICBub3RhdGlvbjogJ2luZml4JyxcbiAgICAgICAgcHJlY2VkZW5jZTogMixcbiAgICAgICAgcmlnaHRUb0xlZnQ6IDAsXG4gICAgICAgIGFyZ0NvdW50OiAyXG4gICAgICB9LFxuICAgICAgcHJlZml4OiB7XG4gICAgICAgIHN5bWJvbDogJy0nLFxuICAgICAgICBmOiBuZWdhdGlvbixcbiAgICAgICAgbm90YXRpb246ICdwcmVmaXgnLFxuICAgICAgICBwcmVjZWRlbmNlOiAzLFxuICAgICAgICByaWdodFRvTGVmdDogMCxcbiAgICAgICAgYXJnQ291bnQ6IDFcbiAgICAgIH0sXG4gICAgICBzeW1ib2w6ICctJyxcbiAgICAgIHJlZ1N5bWJvbDogJy0nXG4gICAgfSxcbiAgICAnLCc6IHtcbiAgICAgIGluZml4OiB7XG4gICAgICAgIHN5bWJvbDogJywnLFxuICAgICAgICBmOiBjb21tYSxcbiAgICAgICAgbm90YXRpb246ICdpbmZpeCcsXG4gICAgICAgIHByZWNlZGVuY2U6IDEsXG4gICAgICAgIHJpZ2h0VG9MZWZ0OiAwLFxuICAgICAgICBhcmdDb3VudDogMlxuICAgICAgfSxcbiAgICAgIHN5bWJvbDogJywnLFxuICAgICAgcmVnU3ltYm9sOiAnLCdcbiAgICB9LFxuICAgICcoJzoge1xuICAgICAgcHJlZml4OiB7XG4gICAgICAgIHN5bWJvbDogJygnLFxuICAgICAgICBmOiBsYXN0LFxuICAgICAgICBub3RhdGlvbjogJ3ByZWZpeCcsXG4gICAgICAgIHByZWNlZGVuY2U6IDAsXG4gICAgICAgIHJpZ2h0VG9MZWZ0OiAwLFxuICAgICAgICBhcmdDb3VudDogMVxuICAgICAgfSxcbiAgICAgIHN5bWJvbDogJygnLFxuICAgICAgcmVnU3ltYm9sOiAnXFxcXCgnXG4gICAgfSxcbiAgICAnKSc6IHtcbiAgICAgIHBvc3RmaXg6IHtcbiAgICAgICAgc3ltYm9sOiAnKScsXG4gICAgICAgIGY6IHVuZGVmaW5lZCxcbiAgICAgICAgbm90YXRpb246ICdwb3N0Zml4JyxcbiAgICAgICAgcHJlY2VkZW5jZTogMCxcbiAgICAgICAgcmlnaHRUb0xlZnQ6IDAsXG4gICAgICAgIGFyZ0NvdW50OiAxXG4gICAgICB9LFxuICAgICAgc3ltYm9sOiAnKScsXG4gICAgICByZWdTeW1ib2w6ICdcXFxcKSdcbiAgICB9LFxuICAgIG1pbjoge1xuICAgICAgZnVuYzoge1xuICAgICAgICBzeW1ib2w6ICdtaW4nLFxuICAgICAgICBmOiBtaW4sXG4gICAgICAgIG5vdGF0aW9uOiAnZnVuYycsXG4gICAgICAgIHByZWNlZGVuY2U6IDAsXG4gICAgICAgIHJpZ2h0VG9MZWZ0OiAwLFxuICAgICAgICBhcmdDb3VudDogMVxuICAgICAgfSxcbiAgICAgIHN5bWJvbDogJ21pbicsXG4gICAgICByZWdTeW1ib2w6ICdtaW5cXFxcYidcbiAgICB9LFxuICAgIG1heDoge1xuICAgICAgZnVuYzoge1xuICAgICAgICBzeW1ib2w6ICdtYXgnLFxuICAgICAgICBmOiBtYXgsXG4gICAgICAgIG5vdGF0aW9uOiAnZnVuYycsXG4gICAgICAgIHByZWNlZGVuY2U6IDAsXG4gICAgICAgIHJpZ2h0VG9MZWZ0OiAwLFxuICAgICAgICBhcmdDb3VudDogMVxuICAgICAgfSxcbiAgICAgIHN5bWJvbDogJ21heCcsXG4gICAgICByZWdTeW1ib2w6ICdtYXhcXFxcYidcbiAgICB9XG4gIH1cbn07XG52YXIgZGVmYXVsdFN5bWJvbE1hcCA9IGRlZmF1bHRTeW1ib2xzO1xuXG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vc3R5bGVkLWNvbXBvbmVudHMvc3R5bGVkLWNvbXBvbmVudHMvYmxvYi9mY2Y2ZjM4MDRjNTdhMTRkZDc5ODRkZmFiN2JjMDZlZTJlZGNhMDQ0L3NyYy91dGlscy9lcnJvci5qc1xuXG4vKipcbiAqIFBhcnNlIGVycm9ycy5tZCBhbmQgdHVybiBpdCBpbnRvIGEgc2ltcGxlIGhhc2ggb2YgY29kZTogbWVzc2FnZVxuICogQHByaXZhdGVcbiAqL1xudmFyIEVSUk9SUyA9IHtcbiAgXCIxXCI6IFwiUGFzc2VkIGludmFsaWQgYXJndW1lbnRzIHRvIGhzbCwgcGxlYXNlIHBhc3MgbXVsdGlwbGUgbnVtYmVycyBlLmcuIGhzbCgzNjAsIDAuNzUsIDAuNCkgb3IgYW4gb2JqZWN0IGUuZy4gcmdiKHsgaHVlOiAyNTUsIHNhdHVyYXRpb246IDAuNCwgbGlnaHRuZXNzOiAwLjc1IH0pLlxcblxcblwiLFxuICBcIjJcIjogXCJQYXNzZWQgaW52YWxpZCBhcmd1bWVudHMgdG8gaHNsYSwgcGxlYXNlIHBhc3MgbXVsdGlwbGUgbnVtYmVycyBlLmcuIGhzbGEoMzYwLCAwLjc1LCAwLjQsIDAuNykgb3IgYW4gb2JqZWN0IGUuZy4gcmdiKHsgaHVlOiAyNTUsIHNhdHVyYXRpb246IDAuNCwgbGlnaHRuZXNzOiAwLjc1LCBhbHBoYTogMC43IH0pLlxcblxcblwiLFxuICBcIjNcIjogXCJQYXNzZWQgYW4gaW5jb3JyZWN0IGFyZ3VtZW50IHRvIGEgY29sb3IgZnVuY3Rpb24sIHBsZWFzZSBwYXNzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgY29sb3IuXFxuXFxuXCIsXG4gIFwiNFwiOiBcIkNvdWxkbid0IGdlbmVyYXRlIHZhbGlkIHJnYiBzdHJpbmcgZnJvbSAlcywgaXQgcmV0dXJuZWQgJXMuXFxuXFxuXCIsXG4gIFwiNVwiOiBcIkNvdWxkbid0IHBhcnNlIHRoZSBjb2xvciBzdHJpbmcuIFBsZWFzZSBwcm92aWRlIHRoZSBjb2xvciBhcyBhIHN0cmluZyBpbiBoZXgsIHJnYiwgcmdiYSwgaHNsIG9yIGhzbGEgbm90YXRpb24uXFxuXFxuXCIsXG4gIFwiNlwiOiBcIlBhc3NlZCBpbnZhbGlkIGFyZ3VtZW50cyB0byByZ2IsIHBsZWFzZSBwYXNzIG11bHRpcGxlIG51bWJlcnMgZS5nLiByZ2IoMjU1LCAyMDUsIDEwMCkgb3IgYW4gb2JqZWN0IGUuZy4gcmdiKHsgcmVkOiAyNTUsIGdyZWVuOiAyMDUsIGJsdWU6IDEwMCB9KS5cXG5cXG5cIixcbiAgXCI3XCI6IFwiUGFzc2VkIGludmFsaWQgYXJndW1lbnRzIHRvIHJnYmEsIHBsZWFzZSBwYXNzIG11bHRpcGxlIG51bWJlcnMgZS5nLiByZ2IoMjU1LCAyMDUsIDEwMCwgMC43NSkgb3IgYW4gb2JqZWN0IGUuZy4gcmdiKHsgcmVkOiAyNTUsIGdyZWVuOiAyMDUsIGJsdWU6IDEwMCwgYWxwaGE6IDAuNzUgfSkuXFxuXFxuXCIsXG4gIFwiOFwiOiBcIlBhc3NlZCBpbnZhbGlkIGFyZ3VtZW50IHRvIHRvQ29sb3JTdHJpbmcsIHBsZWFzZSBwYXNzIGEgUmdiQ29sb3IsIFJnYmFDb2xvciwgSHNsQ29sb3Igb3IgSHNsYUNvbG9yIG9iamVjdC5cXG5cXG5cIixcbiAgXCI5XCI6IFwiUGxlYXNlIHByb3ZpZGUgYSBudW1iZXIgb2Ygc3RlcHMgdG8gdGhlIG1vZHVsYXJTY2FsZSBoZWxwZXIuXFxuXFxuXCIsXG4gIFwiMTBcIjogXCJQbGVhc2UgcGFzcyBhIG51bWJlciBvciBvbmUgb2YgdGhlIHByZWRlZmluZWQgc2NhbGVzIHRvIHRoZSBtb2R1bGFyU2NhbGUgaGVscGVyIGFzIHRoZSByYXRpby5cXG5cXG5cIixcbiAgXCIxMVwiOiBcIkludmFsaWQgdmFsdWUgcGFzc2VkIGFzIGJhc2UgdG8gbW9kdWxhclNjYWxlLCBleHBlY3RlZCBudW1iZXIgb3IgZW0gc3RyaW5nIGJ1dCBnb3QgXFxcIiVzXFxcIlxcblxcblwiLFxuICBcIjEyXCI6IFwiRXhwZWN0ZWQgYSBzdHJpbmcgZW5kaW5nIGluIFxcXCJweFxcXCIgb3IgYSBudW1iZXIgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byAlcygpLCBnb3QgXFxcIiVzXFxcIiBpbnN0ZWFkLlxcblxcblwiLFxuICBcIjEzXCI6IFwiRXhwZWN0ZWQgYSBzdHJpbmcgZW5kaW5nIGluIFxcXCJweFxcXCIgb3IgYSBudW1iZXIgcGFzc2VkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gJXMoKSwgZ290IFxcXCIlc1xcXCIgaW5zdGVhZC5cXG5cXG5cIixcbiAgXCIxNFwiOiBcIlBhc3NlZCBpbnZhbGlkIHBpeGVsIHZhbHVlIChcXFwiJXNcXFwiKSB0byAlcygpLCBwbGVhc2UgcGFzcyBhIHZhbHVlIGxpa2UgXFxcIjEycHhcXFwiIG9yIDEyLlxcblxcblwiLFxuICBcIjE1XCI6IFwiUGFzc2VkIGludmFsaWQgYmFzZSB2YWx1ZSAoXFxcIiVzXFxcIikgdG8gJXMoKSwgcGxlYXNlIHBhc3MgYSB2YWx1ZSBsaWtlIFxcXCIxMnB4XFxcIiBvciAxMi5cXG5cXG5cIixcbiAgXCIxNlwiOiBcIllvdSBtdXN0IHByb3ZpZGUgYSB0ZW1wbGF0ZSB0byB0aGlzIG1ldGhvZC5cXG5cXG5cIixcbiAgXCIxN1wiOiBcIllvdSBwYXNzZWQgYW4gdW5zdXBwb3J0ZWQgc2VsZWN0b3Igc3RhdGUgdG8gdGhpcyBtZXRob2QuXFxuXFxuXCIsXG4gIFwiMThcIjogXCJtaW5TY3JlZW4gYW5kIG1heFNjcmVlbiBtdXN0IGJlIHByb3ZpZGVkIGFzIHN0cmluZ2lmaWVkIG51bWJlcnMgd2l0aCB0aGUgc2FtZSB1bml0cy5cXG5cXG5cIixcbiAgXCIxOVwiOiBcImZyb21TaXplIGFuZCB0b1NpemUgbXVzdCBiZSBwcm92aWRlZCBhcyBzdHJpbmdpZmllZCBudW1iZXJzIHdpdGggdGhlIHNhbWUgdW5pdHMuXFxuXFxuXCIsXG4gIFwiMjBcIjogXCJleHBlY3RzIGVpdGhlciBhbiBhcnJheSBvZiBvYmplY3RzIG9yIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoZSBwcm9wZXJ0aWVzIHByb3AsIGZyb21TaXplLCBhbmQgdG9TaXplLlxcblxcblwiLFxuICBcIjIxXCI6IFwiZXhwZWN0cyB0aGUgb2JqZWN0cyBpbiB0aGUgZmlyc3QgYXJndW1lbnQgYXJyYXkgdG8gaGF2ZSB0aGUgcHJvcGVydGllcyBgcHJvcGAsIGBmcm9tU2l6ZWAsIGFuZCBgdG9TaXplYC5cXG5cXG5cIixcbiAgXCIyMlwiOiBcImV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IG9iamVjdCB0byBoYXZlIHRoZSBwcm9wZXJ0aWVzIGBwcm9wYCwgYGZyb21TaXplYCwgYW5kIGB0b1NpemVgLlxcblxcblwiLFxuICBcIjIzXCI6IFwiZm9udEZhY2UgZXhwZWN0cyBhIG5hbWUgb2YgYSBmb250LWZhbWlseS5cXG5cXG5cIixcbiAgXCIyNFwiOiBcImZvbnRGYWNlIGV4cGVjdHMgZWl0aGVyIHRoZSBwYXRoIHRvIHRoZSBmb250IGZpbGUocykgb3IgYSBuYW1lIG9mIGEgbG9jYWwgY29weS5cXG5cXG5cIixcbiAgXCIyNVwiOiBcImZvbnRGYWNlIGV4cGVjdHMgbG9jYWxGb250cyB0byBiZSBhbiBhcnJheS5cXG5cXG5cIixcbiAgXCIyNlwiOiBcImZvbnRGYWNlIGV4cGVjdHMgZmlsZUZvcm1hdHMgdG8gYmUgYW4gYXJyYXkuXFxuXFxuXCIsXG4gIFwiMjdcIjogXCJyYWRpYWxHcmFkaWVudCByZXF1cmllcyBhdCBsZWFzdCAyIGNvbG9yLXN0b3BzIHRvIHByb3Blcmx5IHJlbmRlci5cXG5cXG5cIixcbiAgXCIyOFwiOiBcIlBsZWFzZSBzdXBwbHkgYSBmaWxlbmFtZSB0byByZXRpbmFJbWFnZSgpIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cXG5cXG5cIixcbiAgXCIyOVwiOiBcIlBhc3NlZCBpbnZhbGlkIGFyZ3VtZW50IHRvIHRyaWFuZ2xlLCBwbGVhc2UgcGFzcyBjb3JyZWN0IHBvaW50aW5nRGlyZWN0aW9uIGUuZy4gJ3JpZ2h0Jy5cXG5cXG5cIixcbiAgXCIzMFwiOiBcIlBhc3NlZCBhbiBpbnZhbGlkIHZhbHVlIHRvIGBoZWlnaHRgIG9yIGB3aWR0aGAuIFBsZWFzZSBwcm92aWRlIGEgcGl4ZWwgYmFzZWQgdW5pdC5cXG5cXG5cIixcbiAgXCIzMVwiOiBcIlRoZSBhbmltYXRpb24gc2hvcnRoYW5kIG9ubHkgdGFrZXMgOCBhcmd1bWVudHMuIFNlZSB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbjogaHR0cDovL21kbi5pby9hbmltYXRpb25cXG5cXG5cIixcbiAgXCIzMlwiOiBcIlRvIHBhc3MgbXVsdGlwbGUgYW5pbWF0aW9ucyBwbGVhc2Ugc3VwcGx5IHRoZW0gaW4gYXJyYXlzLCBlLmcuIGFuaW1hdGlvbihbJ3JvdGF0ZScsICcycyddLCBbJ21vdmUnLCAnMXMnXSlcXG5UbyBwYXNzIGEgc2luZ2xlIGFuaW1hdGlvbiBwbGVhc2Ugc3VwcGx5IHRoZW0gaW4gc2ltcGxlIHZhbHVlcywgZS5nLiBhbmltYXRpb24oJ3JvdGF0ZScsICcycycpXFxuXFxuXCIsXG4gIFwiMzNcIjogXCJUaGUgYW5pbWF0aW9uIHNob3J0aGFuZCBhcnJheXMgY2FuIG9ubHkgaGF2ZSA4IGVsZW1lbnRzLiBTZWUgdGhlIHNwZWNpZmljYXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb246IGh0dHA6Ly9tZG4uaW8vYW5pbWF0aW9uXFxuXFxuXCIsXG4gIFwiMzRcIjogXCJib3JkZXJSYWRpdXMgZXhwZWN0cyBhIHJhZGl1cyB2YWx1ZSBhcyBhIHN0cmluZyBvciBudW1iZXIgYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cXG5cXG5cIixcbiAgXCIzNVwiOiBcImJvcmRlclJhZGl1cyBleHBlY3RzIG9uZSBvZiBcXFwidG9wXFxcIiwgXFxcImJvdHRvbVxcXCIsIFxcXCJsZWZ0XFxcIiBvciBcXFwicmlnaHRcXFwiIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cXG5cXG5cIixcbiAgXCIzNlwiOiBcIlByb3BlcnR5IG11c3QgYmUgYSBzdHJpbmcgdmFsdWUuXFxuXFxuXCIsXG4gIFwiMzdcIjogXCJTeW50YXggRXJyb3IgYXQgJXMuXFxuXFxuXCIsXG4gIFwiMzhcIjogXCJGb3JtdWxhIGNvbnRhaW5zIGEgZnVuY3Rpb24gdGhhdCBuZWVkcyBwYXJlbnRoZXNlcyBhdCAlcy5cXG5cXG5cIixcbiAgXCIzOVwiOiBcIkZvcm11bGEgaXMgbWlzc2luZyBjbG9zaW5nIHBhcmVudGhlc2lzIGF0ICVzLlxcblxcblwiLFxuICBcIjQwXCI6IFwiRm9ybXVsYSBoYXMgdG9vIG1hbnkgY2xvc2luZyBwYXJlbnRoZXNlcyBhdCAlcy5cXG5cXG5cIixcbiAgXCI0MVwiOiBcIkFsbCB2YWx1ZXMgaW4gYSBmb3JtdWxhIG11c3QgaGF2ZSB0aGUgc2FtZSB1bml0IG9yIGJlIHVuaXRsZXNzLlxcblxcblwiLFxuICBcIjQyXCI6IFwiUGxlYXNlIHByb3ZpZGUgYSBudW1iZXIgb2Ygc3RlcHMgdG8gdGhlIG1vZHVsYXJTY2FsZSBoZWxwZXIuXFxuXFxuXCIsXG4gIFwiNDNcIjogXCJQbGVhc2UgcGFzcyBhIG51bWJlciBvciBvbmUgb2YgdGhlIHByZWRlZmluZWQgc2NhbGVzIHRvIHRoZSBtb2R1bGFyU2NhbGUgaGVscGVyIGFzIHRoZSByYXRpby5cXG5cXG5cIixcbiAgXCI0NFwiOiBcIkludmFsaWQgdmFsdWUgcGFzc2VkIGFzIGJhc2UgdG8gbW9kdWxhclNjYWxlLCBleHBlY3RlZCBudW1iZXIgb3IgZW0vcmVtIHN0cmluZyBidXQgZ290ICVzLlxcblxcblwiLFxuICBcIjQ1XCI6IFwiUGFzc2VkIGludmFsaWQgYXJndW1lbnQgdG8gaHNsVG9Db2xvclN0cmluZywgcGxlYXNlIHBhc3MgYSBIc2xDb2xvciBvciBIc2xhQ29sb3Igb2JqZWN0LlxcblxcblwiLFxuICBcIjQ2XCI6IFwiUGFzc2VkIGludmFsaWQgYXJndW1lbnQgdG8gcmdiVG9Db2xvclN0cmluZywgcGxlYXNlIHBhc3MgYSBSZ2JDb2xvciBvciBSZ2JhQ29sb3Igb2JqZWN0LlxcblxcblwiLFxuICBcIjQ3XCI6IFwibWluU2NyZWVuIGFuZCBtYXhTY3JlZW4gbXVzdCBiZSBwcm92aWRlZCBhcyBzdHJpbmdpZmllZCBudW1iZXJzIHdpdGggdGhlIHNhbWUgdW5pdHMuXFxuXFxuXCIsXG4gIFwiNDhcIjogXCJmcm9tU2l6ZSBhbmQgdG9TaXplIG11c3QgYmUgcHJvdmlkZWQgYXMgc3RyaW5naWZpZWQgbnVtYmVycyB3aXRoIHRoZSBzYW1lIHVuaXRzLlxcblxcblwiLFxuICBcIjQ5XCI6IFwiRXhwZWN0cyBlaXRoZXIgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGUgcHJvcGVydGllcyBwcm9wLCBmcm9tU2l6ZSwgYW5kIHRvU2l6ZS5cXG5cXG5cIixcbiAgXCI1MFwiOiBcIkV4cGVjdHMgdGhlIG9iamVjdHMgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IGFycmF5IHRvIGhhdmUgdGhlIHByb3BlcnRpZXMgcHJvcCwgZnJvbVNpemUsIGFuZCB0b1NpemUuXFxuXFxuXCIsXG4gIFwiNTFcIjogXCJFeHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCBvYmplY3QgdG8gaGF2ZSB0aGUgcHJvcGVydGllcyBwcm9wLCBmcm9tU2l6ZSwgYW5kIHRvU2l6ZS5cXG5cXG5cIixcbiAgXCI1MlwiOiBcImZvbnRGYWNlIGV4cGVjdHMgZWl0aGVyIHRoZSBwYXRoIHRvIHRoZSBmb250IGZpbGUocykgb3IgYSBuYW1lIG9mIGEgbG9jYWwgY29weS5cXG5cXG5cIixcbiAgXCI1M1wiOiBcImZvbnRGYWNlIGV4cGVjdHMgbG9jYWxGb250cyB0byBiZSBhbiBhcnJheS5cXG5cXG5cIixcbiAgXCI1NFwiOiBcImZvbnRGYWNlIGV4cGVjdHMgZmlsZUZvcm1hdHMgdG8gYmUgYW4gYXJyYXkuXFxuXFxuXCIsXG4gIFwiNTVcIjogXCJmb250RmFjZSBleHBlY3RzIGEgbmFtZSBvZiBhIGZvbnQtZmFtaWx5LlxcblxcblwiLFxuICBcIjU2XCI6IFwibGluZWFyR3JhZGllbnQgcmVxdXJpZXMgYXQgbGVhc3QgMiBjb2xvci1zdG9wcyB0byBwcm9wZXJseSByZW5kZXIuXFxuXFxuXCIsXG4gIFwiNTdcIjogXCJyYWRpYWxHcmFkaWVudCByZXF1cmllcyBhdCBsZWFzdCAyIGNvbG9yLXN0b3BzIHRvIHByb3Blcmx5IHJlbmRlci5cXG5cXG5cIixcbiAgXCI1OFwiOiBcIlBsZWFzZSBzdXBwbHkgYSBmaWxlbmFtZSB0byByZXRpbmFJbWFnZSgpIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cXG5cXG5cIixcbiAgXCI1OVwiOiBcIlBhc3NlZCBpbnZhbGlkIGFyZ3VtZW50IHRvIHRyaWFuZ2xlLCBwbGVhc2UgcGFzcyBjb3JyZWN0IHBvaW50aW5nRGlyZWN0aW9uIGUuZy4gJ3JpZ2h0Jy5cXG5cXG5cIixcbiAgXCI2MFwiOiBcIlBhc3NlZCBhbiBpbnZhbGlkIHZhbHVlIHRvIGBoZWlnaHRgIG9yIGB3aWR0aGAuIFBsZWFzZSBwcm92aWRlIGEgcGl4ZWwgYmFzZWQgdW5pdC5cXG5cXG5cIixcbiAgXCI2MVwiOiBcIlByb3BlcnR5IG11c3QgYmUgYSBzdHJpbmcgdmFsdWUuXFxuXFxuXCIsXG4gIFwiNjJcIjogXCJib3JkZXJSYWRpdXMgZXhwZWN0cyBhIHJhZGl1cyB2YWx1ZSBhcyBhIHN0cmluZyBvciBudW1iZXIgYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cXG5cXG5cIixcbiAgXCI2M1wiOiBcImJvcmRlclJhZGl1cyBleHBlY3RzIG9uZSBvZiBcXFwidG9wXFxcIiwgXFxcImJvdHRvbVxcXCIsIFxcXCJsZWZ0XFxcIiBvciBcXFwicmlnaHRcXFwiIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cXG5cXG5cIixcbiAgXCI2NFwiOiBcIlRoZSBhbmltYXRpb24gc2hvcnRoYW5kIG9ubHkgdGFrZXMgOCBhcmd1bWVudHMuIFNlZSB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbjogaHR0cDovL21kbi5pby9hbmltYXRpb24uXFxuXFxuXCIsXG4gIFwiNjVcIjogXCJUbyBwYXNzIG11bHRpcGxlIGFuaW1hdGlvbnMgcGxlYXNlIHN1cHBseSB0aGVtIGluIGFycmF5cywgZS5nLiBhbmltYXRpb24oWydyb3RhdGUnLCAnMnMnXSwgWydtb3ZlJywgJzFzJ10pXFxcXG5UbyBwYXNzIGEgc2luZ2xlIGFuaW1hdGlvbiBwbGVhc2Ugc3VwcGx5IHRoZW0gaW4gc2ltcGxlIHZhbHVlcywgZS5nLiBhbmltYXRpb24oJ3JvdGF0ZScsICcycycpLlxcblxcblwiLFxuICBcIjY2XCI6IFwiVGhlIGFuaW1hdGlvbiBzaG9ydGhhbmQgYXJyYXlzIGNhbiBvbmx5IGhhdmUgOCBlbGVtZW50cy4gU2VlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uOiBodHRwOi8vbWRuLmlvL2FuaW1hdGlvbi5cXG5cXG5cIixcbiAgXCI2N1wiOiBcIllvdSBtdXN0IHByb3ZpZGUgYSB0ZW1wbGF0ZSB0byB0aGlzIG1ldGhvZC5cXG5cXG5cIixcbiAgXCI2OFwiOiBcIllvdSBwYXNzZWQgYW4gdW5zdXBwb3J0ZWQgc2VsZWN0b3Igc3RhdGUgdG8gdGhpcyBtZXRob2QuXFxuXFxuXCIsXG4gIFwiNjlcIjogXCJFeHBlY3RlZCBhIHN0cmluZyBlbmRpbmcgaW4gXFxcInB4XFxcIiBvciBhIG51bWJlciBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvICVzKCksIGdvdCAlcyBpbnN0ZWFkLlxcblxcblwiLFxuICBcIjcwXCI6IFwiRXhwZWN0ZWQgYSBzdHJpbmcgZW5kaW5nIGluIFxcXCJweFxcXCIgb3IgYSBudW1iZXIgcGFzc2VkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gJXMoKSwgZ290ICVzIGluc3RlYWQuXFxuXFxuXCIsXG4gIFwiNzFcIjogXCJQYXNzZWQgaW52YWxpZCBwaXhlbCB2YWx1ZSAlcyB0byAlcygpLCBwbGVhc2UgcGFzcyBhIHZhbHVlIGxpa2UgXFxcIjEycHhcXFwiIG9yIDEyLlxcblxcblwiLFxuICBcIjcyXCI6IFwiUGFzc2VkIGludmFsaWQgYmFzZSB2YWx1ZSAlcyB0byAlcygpLCBwbGVhc2UgcGFzcyBhIHZhbHVlIGxpa2UgXFxcIjEycHhcXFwiIG9yIDEyLlxcblxcblwiLFxuICBcIjczXCI6IFwiUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBDU1MgdmFyaWFibGUuXFxuXFxuXCIsXG4gIFwiNzRcIjogXCJDU1MgdmFyaWFibGUgbm90IGZvdW5kIGFuZCBubyBkZWZhdWx0IHdhcyBwcm92aWRlZC5cXG5cXG5cIixcbiAgXCI3NVwiOiBcImltcG9ydGFudCByZXF1aXJlcyBhIHZhbGlkIHN0eWxlIG9iamVjdCwgZ290IGEgJXMgaW5zdGVhZC5cXG5cXG5cIixcbiAgXCI3NlwiOiBcImZyb21TaXplIGFuZCB0b1NpemUgbXVzdCBiZSBwcm92aWRlZCBhcyBzdHJpbmdpZmllZCBudW1iZXJzIHdpdGggdGhlIHNhbWUgdW5pdHMgYXMgbWluU2NyZWVuIGFuZCBtYXhTY3JlZW4uXFxuXFxuXCIsXG4gIFwiNzdcIjogXCJyZW1Ub1B4IGV4cGVjdHMgYSB2YWx1ZSBpbiBcXFwicmVtXFxcIiBidXQgeW91IHByb3ZpZGVkIGl0IGluIFxcXCIlc1xcXCIuXFxuXFxuXCIsXG4gIFwiNzhcIjogXCJiYXNlIG11c3QgYmUgc2V0IGluIFxcXCJweFxcXCIgb3IgXFxcIiVcXFwiIGJ1dCB5b3Ugc2V0IGl0IGluIFxcXCIlc1xcXCIuXFxuXCJcbn07XG4vKipcbiAqIHN1cGVyIGJhc2ljIHZlcnNpb24gb2Ygc3ByaW50ZlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXQoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICB2YXIgYSA9IGFyZ3NbMF07XG4gIHZhciBiID0gW107XG4gIHZhciBjO1xuXG4gIGZvciAoYyA9IDE7IGMgPCBhcmdzLmxlbmd0aDsgYyArPSAxKSB7XG4gICAgYi5wdXNoKGFyZ3NbY10pO1xuICB9XG5cbiAgYi5mb3JFYWNoKGZ1bmN0aW9uIChkKSB7XG4gICAgYSA9IGEucmVwbGFjZSgvJVthLXpdLywgZCk7XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cbi8qKlxuICogQ3JlYXRlIGFuIGVycm9yIGZpbGUgb3V0IG9mIGVycm9ycy5tZCBmb3IgZGV2ZWxvcG1lbnQgYW5kIGEgc2ltcGxlIHdlYiBsaW5rIHRvIHRoZSBmdWxsIGVycm9yc1xuICogaW4gcHJvZHVjdGlvbiBtb2RlLlxuICogQHByaXZhdGVcbiAqL1xuXG5cbnZhciBQb2xpc2hlZEVycm9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfRXJyb3IpIHtcbiAgX2luaGVyaXRzTG9vc2UoUG9saXNoZWRFcnJvciwgX0Vycm9yKTtcblxuICBmdW5jdGlvbiBQb2xpc2hlZEVycm9yKGNvZGUpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgX3RoaXMgPSBfRXJyb3IuY2FsbCh0aGlzLCBcIkFuIGVycm9yIG9jY3VycmVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3N0eWxlZC1jb21wb25lbnRzL3BvbGlzaGVkL2Jsb2IvbWFpbi9zcmMvaW50ZXJuYWxIZWxwZXJzL2Vycm9ycy5tZCNcIiArIGNvZGUgKyBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIikgfHwgdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMgPSBfRXJyb3IuY2FsbCh0aGlzLCBmb3JtYXQuYXBwbHkodm9pZCAwLCBbRVJST1JTW2NvZGVdXS5jb25jYXQoYXJncykpKSB8fCB0aGlzO1xuICAgIH1cblxuICAgIHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKTtcbiAgfVxuXG4gIHJldHVybiBQb2xpc2hlZEVycm9yO1xufSggLyojX19QVVJFX18qL193cmFwTmF0aXZlU3VwZXIoRXJyb3IpKTtcblxudmFyIHVuaXRSZWdFeHAgPSAvKCg/IVxcdylhfG5hfGhjfG1jfGRnfG1lW3JdP3x4ZXxuaSg/IVthLXpBLVpdKXxtbXxjcHx0cHx4cHxxKD8hcyl8aHZ8eGFtdnxuaW12fHd2fHNtfHMoPyFcXER8JCl8Z2VkfGRhcmc/fG5ydXQpL2c7IC8vIE1lcmdlcyBhZGRpdGlvbmFsIG1hdGggZnVuY3Rpb25hbGl0eSBpbnRvIHRoZSBkZWZhdWx0cy5cblxuZnVuY3Rpb24gbWVyZ2VTeW1ib2xNYXBzKGFkZGl0aW9uYWxTeW1ib2xzKSB7XG4gIHZhciBzeW1ib2xNYXAgPSB7fTtcbiAgc3ltYm9sTWFwLnN5bWJvbHMgPSBhZGRpdGlvbmFsU3ltYm9scyA/IF9leHRlbmRzKHt9LCBkZWZhdWx0U3ltYm9sTWFwLnN5bWJvbHMsIGFkZGl0aW9uYWxTeW1ib2xzLnN5bWJvbHMpIDogX2V4dGVuZHMoe30sIGRlZmF1bHRTeW1ib2xNYXAuc3ltYm9scyk7XG4gIHJldHVybiBzeW1ib2xNYXA7XG59XG5cbmZ1bmN0aW9uIGV4ZWMob3BlcmF0b3JzLCB2YWx1ZXMpIHtcbiAgdmFyIF9yZWY7XG5cbiAgdmFyIG9wID0gb3BlcmF0b3JzLnBvcCgpO1xuICB2YWx1ZXMucHVzaChvcC5mLmFwcGx5KG9wLCAoX3JlZiA9IFtdKS5jb25jYXQuYXBwbHkoX3JlZiwgdmFsdWVzLnNwbGljZSgtb3AuYXJnQ291bnQpKSkpO1xuICByZXR1cm4gb3AucHJlY2VkZW5jZTtcbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlKGV4cHJlc3Npb24sIGFkZGl0aW9uYWxTeW1ib2xzKSB7XG4gIHZhciBzeW1ib2xNYXAgPSBtZXJnZVN5bWJvbE1hcHMoYWRkaXRpb25hbFN5bWJvbHMpO1xuICB2YXIgbWF0Y2g7XG4gIHZhciBvcGVyYXRvcnMgPSBbc3ltYm9sTWFwLnN5bWJvbHNbJygnXS5wcmVmaXhdO1xuICB2YXIgdmFsdWVzID0gW107XG4gIHZhciBwYXR0ZXJuID0gbmV3IFJlZ0V4cCggLy8gUGF0dGVybiBmb3IgbnVtYmVyc1xuICBcIlxcXFxkKyg/OlxcXFwuXFxcXGQrKT98XCIgKyAvLyAuLi5hbmQgcGF0dGVybnMgZm9yIGluZGl2aWR1YWwgb3BlcmF0b3JzL2Z1bmN0aW9uIG5hbWVzXG4gIE9iamVjdC5rZXlzKHN5bWJvbE1hcC5zeW1ib2xzKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBzeW1ib2xNYXAuc3ltYm9sc1trZXldO1xuICB9KSAvLyBsb25nZXIgc3ltYm9scyBzaG91bGQgYmUgbGlzdGVkIGZpcnN0XG4gIC8vICRGbG93Rml4TWVcbiAgLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYi5zeW1ib2wubGVuZ3RoIC0gYS5zeW1ib2wubGVuZ3RoO1xuICB9KSAvLyAkRmxvd0ZpeE1lXG4gIC5tYXAoZnVuY3Rpb24gKHZhbCkge1xuICAgIHJldHVybiB2YWwucmVnU3ltYm9sO1xuICB9KS5qb2luKCd8JykgKyBcInwoXFxcXFMpXCIsICdnJyk7XG4gIHBhdHRlcm4ubGFzdEluZGV4ID0gMDsgLy8gUmVzZXQgcmVndWxhciBleHByZXNzaW9uIG9iamVjdFxuXG4gIHZhciBhZnRlclZhbHVlID0gZmFsc2U7XG5cbiAgZG8ge1xuICAgIG1hdGNoID0gcGF0dGVybi5leGVjKGV4cHJlc3Npb24pO1xuXG4gICAgdmFyIF9yZWYyID0gbWF0Y2ggfHwgWycpJywgdW5kZWZpbmVkXSxcbiAgICAgICAgdG9rZW4gPSBfcmVmMlswXSxcbiAgICAgICAgYmFkID0gX3JlZjJbMV07XG5cbiAgICB2YXIgbm90TnVtYmVyID0gc3ltYm9sTWFwLnN5bWJvbHNbdG9rZW5dO1xuICAgIHZhciBub3ROZXdWYWx1ZSA9IG5vdE51bWJlciAmJiAhbm90TnVtYmVyLnByZWZpeCAmJiAhbm90TnVtYmVyLmZ1bmM7XG4gICAgdmFyIG5vdEFmdGVyVmFsdWUgPSAhbm90TnVtYmVyIHx8ICFub3ROdW1iZXIucG9zdGZpeCAmJiAhbm90TnVtYmVyLmluZml4OyAvLyBDaGVjayBmb3Igc3ludGF4IGVycm9yczpcblxuICAgIGlmIChiYWQgfHwgKGFmdGVyVmFsdWUgPyBub3RBZnRlclZhbHVlIDogbm90TmV3VmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcigzNywgbWF0Y2ggPyBtYXRjaC5pbmRleCA6IGV4cHJlc3Npb24ubGVuZ3RoLCBleHByZXNzaW9uKTtcbiAgICB9XG5cbiAgICBpZiAoYWZ0ZXJWYWx1ZSkge1xuICAgICAgLy8gV2UgZWl0aGVyIGhhdmUgYW4gaW5maXggb3IgcG9zdGZpeCBvcGVyYXRvciAodGhleSBzaG91bGQgYmUgbXV0dWFsbHkgZXhjbHVzaXZlKVxuICAgICAgdmFyIGN1cnIgPSBub3ROdW1iZXIucG9zdGZpeCB8fCBub3ROdW1iZXIuaW5maXg7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgdmFyIHByZXYgPSBvcGVyYXRvcnNbb3BlcmF0b3JzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoKGN1cnIucHJlY2VkZW5jZSAtIHByZXYucHJlY2VkZW5jZSB8fCBwcmV2LnJpZ2h0VG9MZWZ0KSA+IDApIGJyZWFrOyAvLyBBcHBseSBwcmV2aW91cyBvcGVyYXRvciwgc2luY2UgaXQgaGFzIHByZWNlZGVuY2Ugb3ZlciBjdXJyZW50IG9uZVxuICAgICAgfSB3aGlsZSAoZXhlYyhvcGVyYXRvcnMsIHZhbHVlcykpOyAvLyBFeGl0IGxvb3AgYWZ0ZXIgZXhlY3V0aW5nIGFuIG9wZW5pbmcgcGFyZW50aGVzaXMgb3IgZnVuY3Rpb25cblxuXG4gICAgICBhZnRlclZhbHVlID0gY3Vyci5ub3RhdGlvbiA9PT0gJ3Bvc3RmaXgnO1xuXG4gICAgICBpZiAoY3Vyci5zeW1ib2wgIT09ICcpJykge1xuICAgICAgICBvcGVyYXRvcnMucHVzaChjdXJyKTsgLy8gUG9zdGZpeCBhbHdheXMgaGFzIHByZWNlZGVuY2Ugb3ZlciBhbnkgb3BlcmF0b3IgdGhhdCBmb2xsb3dzIGFmdGVyIGl0XG5cbiAgICAgICAgaWYgKGFmdGVyVmFsdWUpIGV4ZWMob3BlcmF0b3JzLCB2YWx1ZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm90TnVtYmVyKSB7XG4gICAgICAvLyBwcmVmaXggb3BlcmF0b3Igb3IgZnVuY3Rpb25cbiAgICAgIG9wZXJhdG9ycy5wdXNoKG5vdE51bWJlci5wcmVmaXggfHwgbm90TnVtYmVyLmZ1bmMpO1xuXG4gICAgICBpZiAobm90TnVtYmVyLmZ1bmMpIHtcbiAgICAgICAgLy8gUmVxdWlyZSBhbiBvcGVuaW5nIHBhcmVudGhlc2lzXG4gICAgICAgIG1hdGNoID0gcGF0dGVybi5leGVjKGV4cHJlc3Npb24pO1xuXG4gICAgICAgIGlmICghbWF0Y2ggfHwgbWF0Y2hbMF0gIT09ICcoJykge1xuICAgICAgICAgIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDM4LCBtYXRjaCA/IG1hdGNoLmluZGV4IDogZXhwcmVzc2lvbi5sZW5ndGgsIGV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG51bWJlclxuICAgICAgdmFsdWVzLnB1c2goK3Rva2VuKTtcbiAgICAgIGFmdGVyVmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfSB3aGlsZSAobWF0Y2ggJiYgb3BlcmF0b3JzLmxlbmd0aCk7XG5cbiAgaWYgKG9wZXJhdG9ycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcigzOSwgbWF0Y2ggPyBtYXRjaC5pbmRleCA6IGV4cHJlc3Npb24ubGVuZ3RoLCBleHByZXNzaW9uKTtcbiAgfSBlbHNlIGlmIChtYXRjaCkge1xuICAgIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDQwLCBtYXRjaCA/IG1hdGNoLmluZGV4IDogZXhwcmVzc2lvbi5sZW5ndGgsIGV4cHJlc3Npb24pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZXMucG9wKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmV2ZXJzZVN0cmluZyhzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgnJykucmV2ZXJzZSgpLmpvaW4oJycpO1xufVxuLyoqXG4gKiBIZWxwZXIgZm9yIGRvaW5nIG1hdGggd2l0aCBDU1MgVW5pdHMuIEFjY2VwdHMgYSBmb3JtdWxhIGFzIGEgc3RyaW5nLiBBbGwgdmFsdWVzIGluIHRoZSBmb3JtdWxhIG11c3QgaGF2ZSB0aGUgc2FtZSB1bml0IChvciBiZSB1bml0bGVzcykuIFN1cHBvcnRzIGNvbXBsZXggZm9ybXVsYXMgdXRsaXppaW5nIGFkZGl0aW9uLCBzdWJ0cmFjdGlvbiwgbXVsdGlwbGljYXRpb24sIGRpdmlzaW9uLCBzcXVhcmUgcm9vdCwgcG93ZXJzLCBmYWN0b3JpYWwsIG1pbiwgbWF4LCBhcyB3ZWxsIGFzIHBhcmVudGhlc2VzIGZvciBvcmRlciBvZiBvcGVyYXRpb24uXG4gKlxuICpJbiBjYXNlcyB3aGVyZSB5b3UgbmVlZCB0byBkbyBjYWxjdWxhdGlvbnMgd2l0aCBtaXhlZCB1bml0cyB3aGVyZSBvbmUgdW5pdCBpcyBhIFtyZWxhdGl2ZSBsZW5ndGggdW5pdF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2xlbmd0aCNSZWxhdGl2ZV9sZW5ndGhfdW5pdHMpLCB5b3Ugd2lsbCB3YW50IHRvIHVzZSBbQ1NTIENhbGNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jYWxjKS5cbiAqXG4gKiAqd2FybmluZyogV2hpbGUgd2UndmUgZG9uZSBldmVyeXRoaW5nIHBvc3NpYmxlIHRvIGVuc3VyZSBtYXRoIHNhZmVseSBldmFsdXRlcyBmb3JtdWxhcyBleHByZXNzZWQgYXMgc3RyaW5ncywgeW91IHNob3VsZCBhbHdheXMgdXNlIGV4dHJlbWUgY2F1dGlvbiB3aGVuIHBhc3NpbmcgYG1hdGhgIHVzZXIgcHJvdmlkZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgZm9udFNpemU6IG1hdGgoJzEycmVtICsgOHJlbScpLFxuICogICBmb250U2l6ZTogbWF0aCgnKDEycHggKyAycHgpICogMycpLFxuICogICBmb250U2l6ZTogbWF0aCgnM3B4XjIgKyBzcXJ0KDQpJyksXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgIGZvbnRTaXplOiAke21hdGgoJzEycmVtICsgOHJlbScpfTtcbiAqICAgZm9udFNpemU6ICR7bWF0aCgnKDEycHggKyAycHgpICogMycpfTtcbiAqICAgZm9udFNpemU6ICR7bWF0aCgnM3B4XjIgKyBzcXJ0KDQpJyl9O1xuICogYFxuICpcbiAqIC8vIENTUyBhcyBKUyBPdXRwdXRcbiAqXG4gKiBkaXY6IHtcbiAqICAgZm9udFNpemU6ICcyMHJlbScsXG4gKiAgIGZvbnRTaXplOiAnNDJweCcsXG4gKiAgIGZvbnRTaXplOiAnMTFweCcsXG4gKiB9XG4gKi9cblxuXG5mdW5jdGlvbiBtYXRoKGZvcm11bGEsIGFkZGl0aW9uYWxTeW1ib2xzKSB7XG4gIHZhciByZXZlcnNlZEZvcm11bGEgPSByZXZlcnNlU3RyaW5nKGZvcm11bGEpO1xuICB2YXIgZm9ybXVsYU1hdGNoID0gcmV2ZXJzZWRGb3JtdWxhLm1hdGNoKHVuaXRSZWdFeHApOyAvLyBDaGVjayB0aGF0IGFsbCB1bml0cyBhcmUgdGhlIHNhbWVcblxuICBpZiAoZm9ybXVsYU1hdGNoICYmICFmb3JtdWxhTWF0Y2guZXZlcnkoZnVuY3Rpb24gKHVuaXQpIHtcbiAgICByZXR1cm4gdW5pdCA9PT0gZm9ybXVsYU1hdGNoWzBdO1xuICB9KSkge1xuICAgIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDQxKTtcbiAgfVxuXG4gIHZhciBjbGVhbkZvcm11bGEgPSByZXZlcnNlU3RyaW5nKHJldmVyc2VkRm9ybXVsYS5yZXBsYWNlKHVuaXRSZWdFeHAsICcnKSk7XG4gIHJldHVybiBcIlwiICsgY2FsY3VsYXRlKGNsZWFuRm9ybXVsYSwgYWRkaXRpb25hbFN5bWJvbHMpICsgKGZvcm11bGFNYXRjaCA/IHJldmVyc2VTdHJpbmcoZm9ybXVsYU1hdGNoWzBdKSA6ICcnKTtcbn1cblxudmFyIGNzc1ZhcmlhYmxlUmVnZXggPSAvLS1bXFxTXSovZztcbi8qKlxuICogRmV0Y2hlcyB0aGUgdmFsdWUgb2YgYSBwYXNzZWQgQ1NTIFZhcmlhYmxlIGluIHRoZSA6cm9vdCBzY29wZSwgb3Igb3RoZXJ3aXNlIHJldHVybnMgYSBkZWZhdWx0VmFsdWUgaWYgcHJvdmlkZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgJ2JhY2tncm91bmQnOiBjc3NWYXIoJy0tYmFja2dyb3VuZC1jb2xvcicpLFxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICBiYWNrZ3JvdW5kOiAke2Nzc1ZhcignLS1iYWNrZ3JvdW5kLWNvbG9yJyl9O1xuICogYFxuICpcbiAqIC8vIENTUyBpbiBKUyBPdXRwdXRcbiAqXG4gKiBlbGVtZW50IHtcbiAqICAgJ2JhY2tncm91bmQnOiAncmVkJ1xuICogfVxuICovXG5cbmZ1bmN0aW9uIGNzc1Zhcihjc3NWYXJpYWJsZSwgZGVmYXVsdFZhbHVlKSB7XG4gIGlmICghY3NzVmFyaWFibGUgfHwgIWNzc1ZhcmlhYmxlLm1hdGNoKGNzc1ZhcmlhYmxlUmVnZXgpKSB7XG4gICAgdGhyb3cgbmV3IFBvbGlzaGVkRXJyb3IoNzMpO1xuICB9XG5cbiAgdmFyIHZhcmlhYmxlVmFsdWU7XG4gIC8qIGVzbGludC1kaXNhYmxlICovXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZVZhbHVlID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoY3NzVmFyaWFibGUpO1xuICB9XG4gIC8qIGVzbGludC1lbmFibGUgKi9cblxuXG4gIGlmICh2YXJpYWJsZVZhbHVlKSB7XG4gICAgcmV0dXJuIHZhcmlhYmxlVmFsdWUudHJpbSgpO1xuICB9IGVsc2UgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig3NCk7XG59XG5cbi8vIEBwcml2YXRlXG5mdW5jdGlvbiBjYXBpdGFsaXplU3RyaW5nKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufVxuXG52YXIgcG9zaXRpb25NYXAkMSA9IFsnVG9wJywgJ1JpZ2h0JywgJ0JvdHRvbScsICdMZWZ0J107XG5cbmZ1bmN0aW9uIGdlbmVyYXRlUHJvcGVydHkocHJvcGVydHksIHBvc2l0aW9uKSB7XG4gIGlmICghcHJvcGVydHkpIHJldHVybiBwb3NpdGlvbi50b0xvd2VyQ2FzZSgpO1xuICB2YXIgc3BsaXRQcm9wZXJ0eSA9IHByb3BlcnR5LnNwbGl0KCctJyk7XG5cbiAgaWYgKHNwbGl0UHJvcGVydHkubGVuZ3RoID4gMSkge1xuICAgIHNwbGl0UHJvcGVydHkuc3BsaWNlKDEsIDAsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gc3BsaXRQcm9wZXJ0eS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgdmFsKSB7XG4gICAgICByZXR1cm4gXCJcIiArIGFjYyArIGNhcGl0YWxpemVTdHJpbmcodmFsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBqb2luZWRQcm9wZXJ0eSA9IHByb3BlcnR5LnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIFwiJDFcIiArIHBvc2l0aW9uICsgXCIkMlwiKTtcbiAgcmV0dXJuIHByb3BlcnR5ID09PSBqb2luZWRQcm9wZXJ0eSA/IFwiXCIgKyBwcm9wZXJ0eSArIHBvc2l0aW9uIDogam9pbmVkUHJvcGVydHk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU3R5bGVzKHByb3BlcnR5LCB2YWx1ZXNXaXRoRGVmYXVsdHMpIHtcbiAgdmFyIHN0eWxlcyA9IHt9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzV2l0aERlZmF1bHRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHZhbHVlc1dpdGhEZWZhdWx0c1tpXSB8fCB2YWx1ZXNXaXRoRGVmYXVsdHNbaV0gPT09IDApIHtcbiAgICAgIHN0eWxlc1tnZW5lcmF0ZVByb3BlcnR5KHByb3BlcnR5LCBwb3NpdGlvbk1hcCQxW2ldKV0gPSB2YWx1ZXNXaXRoRGVmYXVsdHNbaV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0eWxlcztcbn1cbi8qKlxuICogRW5hYmxlcyBzaG9ydGhhbmQgZm9yIGRpcmVjdGlvbi1iYXNlZCBwcm9wZXJ0aWVzLiBJdCBhY2NlcHRzIGEgcHJvcGVydHkgKGh5cGhlbmF0ZWQgb3IgY2FtZWxDYXNlZCkgYW5kIHVwIHRvIGZvdXIgdmFsdWVzIHRoYXQgbWFwIHRvIHRvcCwgcmlnaHQsIGJvdHRvbSwgYW5kIGxlZnQsIHJlc3BlY3RpdmVseS4gWW91IGNhbiBvcHRpb25hbGx5IHBhc3MgYW4gZW1wdHkgc3RyaW5nIHRvIGdldCBvbmx5IHRoZSBkaXJlY3Rpb25hbCB2YWx1ZXMgYXMgcHJvcGVydGllcy4gWW91IGNhbiBhbHNvIG9wdGlvbmFsbHkgcGFzcyBhIG51bGwgYXJndW1lbnQgZm9yIGEgZGlyZWN0aW9uYWwgdmFsdWUgdG8gaWdub3JlIGl0LlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgLi4uZGlyZWN0aW9uYWxQcm9wZXJ0eSgncGFkZGluZycsICcxMnB4JywgJzI0cHgnLCAnMzZweCcsICc0OHB4JylcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgJHtkaXJlY3Rpb25hbFByb3BlcnR5KCdwYWRkaW5nJywgJzEycHgnLCAnMjRweCcsICczNnB4JywgJzQ4cHgnKX1cbiAqIGBcbiAqXG4gKiAvLyBDU1MgYXMgSlMgT3V0cHV0XG4gKlxuICogZGl2IHtcbiAqICAgJ3BhZGRpbmdUb3AnOiAnMTJweCcsXG4gKiAgICdwYWRkaW5nUmlnaHQnOiAnMjRweCcsXG4gKiAgICdwYWRkaW5nQm90dG9tJzogJzM2cHgnLFxuICogICAncGFkZGluZ0xlZnQnOiAnNDhweCdcbiAqIH1cbiAqL1xuXG5cbmZ1bmN0aW9uIGRpcmVjdGlvbmFsUHJvcGVydHkocHJvcGVydHkpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHZhbHVlcyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgdmFsdWVzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIC8vICBwcmV0dGllci1pZ25vcmVcbiAgdmFyIGZpcnN0VmFsdWUgPSB2YWx1ZXNbMF0sXG4gICAgICBfdmFsdWVzJCA9IHZhbHVlc1sxXSxcbiAgICAgIHNlY29uZFZhbHVlID0gX3ZhbHVlcyQgPT09IHZvaWQgMCA/IGZpcnN0VmFsdWUgOiBfdmFsdWVzJCxcbiAgICAgIF92YWx1ZXMkMiA9IHZhbHVlc1syXSxcbiAgICAgIHRoaXJkVmFsdWUgPSBfdmFsdWVzJDIgPT09IHZvaWQgMCA/IGZpcnN0VmFsdWUgOiBfdmFsdWVzJDIsXG4gICAgICBfdmFsdWVzJDMgPSB2YWx1ZXNbM10sXG4gICAgICBmb3VydGhWYWx1ZSA9IF92YWx1ZXMkMyA9PT0gdm9pZCAwID8gc2Vjb25kVmFsdWUgOiBfdmFsdWVzJDM7XG4gIHZhciB2YWx1ZXNXaXRoRGVmYXVsdHMgPSBbZmlyc3RWYWx1ZSwgc2Vjb25kVmFsdWUsIHRoaXJkVmFsdWUsIGZvdXJ0aFZhbHVlXTtcbiAgcmV0dXJuIGdlbmVyYXRlU3R5bGVzKHByb3BlcnR5LCB2YWx1ZXNXaXRoRGVmYXVsdHMpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgc3RyaW5nIGVuZHMgd2l0aCBzb21ldGhpbmdcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGVuZHNXaXRoKHN0cmluZywgc3VmZml4KSB7XG4gIHJldHVybiBzdHJpbmcuc3Vic3RyKC1zdWZmaXgubGVuZ3RoKSA9PT0gc3VmZml4O1xufVxuXG52YXIgY3NzUmVnZXgkMSA9IC9eKFsrLV0/KD86XFxkK3xcXGQqXFwuXFxkKykpKFthLXpdKnwlKSQvO1xuLyoqXG4gKiBSZXR1cm5zIGEgZ2l2ZW4gQ1NTIHZhbHVlIG1pbnVzIGl0cyB1bml0IG9mIG1lYXN1cmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgJy0tZGltZW5zaW9uJzogc3RyaXBVbml0KCcxMDBweCcpXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgIC0tZGltZW5zaW9uOiAke3N0cmlwVW5pdCgnMTAwcHgnKX07XG4gKiBgXG4gKlxuICogLy8gQ1NTIGluIEpTIE91dHB1dFxuICpcbiAqIGVsZW1lbnQge1xuICogICAnLS1kaW1lbnNpb24nOiAxMDBcbiAqIH1cbiAqL1xuXG5mdW5jdGlvbiBzdHJpcFVuaXQodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiB2YWx1ZTtcbiAgdmFyIG1hdGNoZWRWYWx1ZSA9IHZhbHVlLm1hdGNoKGNzc1JlZ2V4JDEpO1xuICByZXR1cm4gbWF0Y2hlZFZhbHVlID8gcGFyc2VGbG9hdCh2YWx1ZSkgOiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBwaXhlbC10by14IGNvbnZlcnRlcnNcbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIHB4dG9GYWN0b3J5ID0gZnVuY3Rpb24gcHh0b0ZhY3RvcnkodG8pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChweHZhbCwgYmFzZSkge1xuICAgIGlmIChiYXNlID09PSB2b2lkIDApIHtcbiAgICAgIGJhc2UgPSAnMTZweCc7XG4gICAgfVxuXG4gICAgdmFyIG5ld1B4dmFsID0gcHh2YWw7XG4gICAgdmFyIG5ld0Jhc2UgPSBiYXNlO1xuXG4gICAgaWYgKHR5cGVvZiBweHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICghZW5kc1dpdGgocHh2YWwsICdweCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDY5LCB0bywgcHh2YWwpO1xuICAgICAgfVxuXG4gICAgICBuZXdQeHZhbCA9IHN0cmlwVW5pdChweHZhbCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBiYXNlID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKCFlbmRzV2l0aChiYXNlLCAncHgnKSkge1xuICAgICAgICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig3MCwgdG8sIGJhc2UpO1xuICAgICAgfVxuXG4gICAgICBuZXdCYXNlID0gc3RyaXBVbml0KGJhc2UpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3UHh2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig3MSwgcHh2YWwsIHRvKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0Jhc2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig3MiwgYmFzZSwgdG8pO1xuICAgIH1cblxuICAgIHJldHVybiBcIlwiICsgbmV3UHh2YWwgLyBuZXdCYXNlICsgdG87XG4gIH07XG59O1xuXG52YXIgcGl4ZWxzdG8gPSBweHRvRmFjdG9yeTtcblxuLyoqXG4gKiBDb252ZXJ0IHBpeGVsIHZhbHVlIHRvIGVtcy4gVGhlIGRlZmF1bHQgYmFzZSB2YWx1ZSBpcyAxNnB4LCBidXQgY2FuIGJlIGNoYW5nZWQgYnkgcGFzc2luZyBhXG4gKiBzZWNvbmQgYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9uLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHB4dmFsXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtiYXNlPScxNnB4J11cbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgICdoZWlnaHQnOiBlbSgnMTZweCcpXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgIGhlaWdodDogJHtlbSgnMTZweCcpfVxuICogYFxuICpcbiAqIC8vIENTUyBpbiBKUyBPdXRwdXRcbiAqXG4gKiBlbGVtZW50IHtcbiAqICAgJ2hlaWdodCc6ICcxZW0nXG4gKiB9XG4gKi9cblxudmFyIGVtID0gLyojX19QVVJFX18qL3BpeGVsc3RvKCdlbScpO1xudmFyIGVtJDEgPSBlbTtcblxudmFyIGNzc1JlZ2V4ID0gL14oWystXT8oPzpcXGQrfFxcZCpcXC5cXGQrKSkoW2Etel0qfCUpJC87XG4vKipcbiAqIFJldHVybnMgYSBnaXZlbiBDU1MgdmFsdWUgYW5kIGl0cyB1bml0IGFzIGVsZW1lbnRzIG9mIGFuIGFycmF5LlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgICctLWRpbWVuc2lvbic6IGdldFZhbHVlQW5kVW5pdCgnMTAwcHgnKVswXSxcbiAqICAgJy0tdW5pdCc6IGdldFZhbHVlQW5kVW5pdCgnMTAwcHgnKVsxXSxcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgLS1kaW1lbnNpb246ICR7Z2V0VmFsdWVBbmRVbml0KCcxMDBweCcpWzBdfTtcbiAqICAgLS11bml0OiAke2dldFZhbHVlQW5kVW5pdCgnMTAwcHgnKVsxXX07XG4gKiBgXG4gKlxuICogLy8gQ1NTIGluIEpTIE91dHB1dFxuICpcbiAqIGVsZW1lbnQge1xuICogICAnLS1kaW1lbnNpb24nOiAxMDAsXG4gKiAgICctLXVuaXQnOiAncHgnLFxuICogfVxuICovXG5cbmZ1bmN0aW9uIGdldFZhbHVlQW5kVW5pdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIFt2YWx1ZSwgJyddO1xuICB2YXIgbWF0Y2hlZFZhbHVlID0gdmFsdWUubWF0Y2goY3NzUmVnZXgpO1xuICBpZiAobWF0Y2hlZFZhbHVlKSByZXR1cm4gW3BhcnNlRmxvYXQodmFsdWUpLCBtYXRjaGVkVmFsdWVbMl1dO1xuICByZXR1cm4gW3ZhbHVlLCB1bmRlZmluZWRdO1xufVxuXG4vKipcbiAqIEhlbHBlciBmb3IgdGFyZ2V0aW5nIHJ1bGVzIGluIGEgc3R5bGUgYmxvY2sgZ2VuZXJhdGVkIGJ5IHBvbGlzaGVkIG1vZHVsZXMgdGhhdCBuZWVkICFpbXBvcnRhbnQtbGV2ZWwgc3BlY2lmaWNpdHkuIENhbiBvcHRpb25hbGx5IHNwZWNpZnkgYSBydWxlIChvciBydWxlcykgdG8gdGFyZ2V0IHNwZWNpZmljIHJ1bGVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIC4uLmltcG9ydGFudChjb3ZlcigpKVxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICAke2ltcG9ydGFudChjb3ZlcigpKX1cbiAqIGBcbiAqXG4gKiAvLyBDU1MgYXMgSlMgT3V0cHV0XG4gKlxuICogZGl2OiB7XG4gKiAgICdwb3NpdGlvbic6ICdhYnNvbHV0ZSAhaW1wb3J0YW50JyxcbiAqICAgJ3RvcCc6ICcwICFpbXBvcnRhbnQnLFxuICogICAncmlnaHQ6ICcwICFpbXBvcnRhbnQnLFxuICogICAnYm90dG9tJzogJzAgIWltcG9ydGFudCcsXG4gKiAgICdsZWZ0OiAnMCAhaW1wb3J0YW50J1xuICogfVxuICovXG5cbmZ1bmN0aW9uIGltcG9ydGFudChzdHlsZUJsb2NrLCBydWxlcykge1xuICBpZiAodHlwZW9mIHN0eWxlQmxvY2sgIT09ICdvYmplY3QnIHx8IHN0eWxlQmxvY2sgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig3NSwgdHlwZW9mIHN0eWxlQmxvY2spO1xuICB9XG5cbiAgdmFyIG5ld1N0eWxlQmxvY2sgPSB7fTtcbiAgT2JqZWN0LmtleXMoc3R5bGVCbG9jaykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKHR5cGVvZiBzdHlsZUJsb2NrW2tleV0gPT09ICdvYmplY3QnICYmIHN0eWxlQmxvY2tba2V5XSAhPT0gbnVsbCkge1xuICAgICAgbmV3U3R5bGVCbG9ja1trZXldID0gaW1wb3J0YW50KHN0eWxlQmxvY2tba2V5XSwgcnVsZXMpO1xuICAgIH0gZWxzZSBpZiAoIXJ1bGVzIHx8IHJ1bGVzICYmIChydWxlcyA9PT0ga2V5IHx8IHJ1bGVzLmluZGV4T2Yoa2V5KSA+PSAwKSkge1xuICAgICAgbmV3U3R5bGVCbG9ja1trZXldID0gc3R5bGVCbG9ja1trZXldICsgXCIgIWltcG9ydGFudFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTdHlsZUJsb2NrW2tleV0gPSBzdHlsZUJsb2NrW2tleV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5ld1N0eWxlQmxvY2s7XG59XG5cbnZhciByYXRpb05hbWVzID0ge1xuICBtaW5vclNlY29uZDogMS4wNjcsXG4gIG1ham9yU2Vjb25kOiAxLjEyNSxcbiAgbWlub3JUaGlyZDogMS4yLFxuICBtYWpvclRoaXJkOiAxLjI1LFxuICBwZXJmZWN0Rm91cnRoOiAxLjMzMyxcbiAgYXVnRm91cnRoOiAxLjQxNCxcbiAgcGVyZmVjdEZpZnRoOiAxLjUsXG4gIG1pbm9yU2l4dGg6IDEuNixcbiAgZ29sZGVuU2VjdGlvbjogMS42MTgsXG4gIG1ham9yU2l4dGg6IDEuNjY3LFxuICBtaW5vclNldmVudGg6IDEuNzc4LFxuICBtYWpvclNldmVudGg6IDEuODc1LFxuICBvY3RhdmU6IDIsXG4gIG1ham9yVGVudGg6IDIuNSxcbiAgbWFqb3JFbGV2ZW50aDogMi42NjcsXG4gIG1ham9yVHdlbGZ0aDogMyxcbiAgZG91YmxlT2N0YXZlOiA0XG59O1xuXG5mdW5jdGlvbiBnZXRSYXRpbyhyYXRpb05hbWUpIHtcbiAgcmV0dXJuIHJhdGlvTmFtZXNbcmF0aW9OYW1lXTtcbn1cbi8qKlxuICogRXN0YWJsaXNoIGNvbnNpc3RlbnQgbWVhc3VyZW1lbnRzIGFuZCBzcGFjaWFsIHJlbGF0aW9uc2hpcHMgdGhyb3VnaG91dCB5b3VyIHByb2plY3RzIGJ5IGluY3JlbWVudGluZyBhbiBlbSBvciByZW0gdmFsdWUgdXAgb3IgZG93biBhIGRlZmluZWQgc2NhbGUuIFdlIHByb3ZpZGUgYSBsaXN0IG9mIGNvbW1vbmx5IHVzZWQgc2NhbGVzIGFzIHByZS1kZWZpbmVkIHZhcmlhYmxlcy5cbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgICAvLyBJbmNyZW1lbnQgdHdvIHN0ZXBzIHVwIHRoZSBkZWZhdWx0IHNjYWxlXG4gKiAgICdmb250U2l6ZSc6IG1vZHVsYXJTY2FsZSgyKVxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICAgLy8gSW5jcmVtZW50IHR3byBzdGVwcyB1cCB0aGUgZGVmYXVsdCBzY2FsZVxuICogICBmb250U2l6ZTogJHttb2R1bGFyU2NhbGUoMil9XG4gKiBgXG4gKlxuICogLy8gQ1NTIGluIEpTIE91dHB1dFxuICpcbiAqIGVsZW1lbnQge1xuICogICAnZm9udFNpemUnOiAnMS43NzY4OWVtJ1xuICogfVxuICovXG5cblxuZnVuY3Rpb24gbW9kdWxhclNjYWxlKHN0ZXBzLCBiYXNlLCByYXRpbykge1xuICBpZiAoYmFzZSA9PT0gdm9pZCAwKSB7XG4gICAgYmFzZSA9ICcxZW0nO1xuICB9XG5cbiAgaWYgKHJhdGlvID09PSB2b2lkIDApIHtcbiAgICByYXRpbyA9IDEuMzMzO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzdGVwcyAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig0Mik7XG4gIH1cblxuICBpZiAodHlwZW9mIHJhdGlvID09PSAnc3RyaW5nJyAmJiAhcmF0aW9OYW1lc1tyYXRpb10pIHtcbiAgICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig0Myk7XG4gIH1cblxuICB2YXIgX3JlZiA9IHR5cGVvZiBiYXNlID09PSAnc3RyaW5nJyA/IGdldFZhbHVlQW5kVW5pdChiYXNlKSA6IFtiYXNlLCAnJ10sXG4gICAgICByZWFsQmFzZSA9IF9yZWZbMF0sXG4gICAgICB1bml0ID0gX3JlZlsxXTtcblxuICB2YXIgcmVhbFJhdGlvID0gdHlwZW9mIHJhdGlvID09PSAnc3RyaW5nJyA/IGdldFJhdGlvKHJhdGlvKSA6IHJhdGlvO1xuXG4gIGlmICh0eXBlb2YgcmVhbEJhc2UgPT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFBvbGlzaGVkRXJyb3IoNDQsIGJhc2UpO1xuICB9XG5cbiAgcmV0dXJuIFwiXCIgKyByZWFsQmFzZSAqIE1hdGgucG93KHJlYWxSYXRpbywgc3RlcHMpICsgKHVuaXQgfHwgJycpO1xufVxuXG4vKipcbiAqIENvbnZlcnQgcGl4ZWwgdmFsdWUgdG8gcmVtcy4gVGhlIGRlZmF1bHQgYmFzZSB2YWx1ZSBpcyAxNnB4LCBidXQgY2FuIGJlIGNoYW5nZWQgYnkgcGFzc2luZyBhXG4gKiBzZWNvbmQgYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9uLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHB4dmFsXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtiYXNlPScxNnB4J11cbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgICdoZWlnaHQnOiByZW0oJzE2cHgnKVxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICBoZWlnaHQ6ICR7cmVtKCcxNnB4Jyl9XG4gKiBgXG4gKlxuICogLy8gQ1NTIGluIEpTIE91dHB1dFxuICpcbiAqIGVsZW1lbnQge1xuICogICAnaGVpZ2h0JzogJzFyZW0nXG4gKiB9XG4gKi9cblxudmFyIHJlbSA9IC8qI19fUFVSRV9fKi9waXhlbHN0bygncmVtJyk7XG52YXIgcmVtJDEgPSByZW07XG5cbnZhciBkZWZhdWx0Rm9udFNpemUgPSAxNjtcblxuZnVuY3Rpb24gY29udmVydEJhc2UoYmFzZSkge1xuICB2YXIgZGVjb25zdHJ1Y3RlZFZhbHVlID0gZ2V0VmFsdWVBbmRVbml0KGJhc2UpO1xuXG4gIGlmIChkZWNvbnN0cnVjdGVkVmFsdWVbMV0gPT09ICdweCcpIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChiYXNlKTtcbiAgfVxuXG4gIGlmIChkZWNvbnN0cnVjdGVkVmFsdWVbMV0gPT09ICclJykge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KGJhc2UpIC8gMTAwICogZGVmYXVsdEZvbnRTaXplO1xuICB9XG5cbiAgdGhyb3cgbmV3IFBvbGlzaGVkRXJyb3IoNzgsIGRlY29uc3RydWN0ZWRWYWx1ZVsxXSk7XG59XG5cbmZ1bmN0aW9uIGdldEJhc2VGcm9tRG9jKCkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAhPT0gbnVsbCkge1xuICAgIHZhciByb290Rm9udFNpemUgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZm9udFNpemU7XG4gICAgcmV0dXJuIHJvb3RGb250U2l6ZSA/IGNvbnZlcnRCYXNlKHJvb3RGb250U2l6ZSkgOiBkZWZhdWx0Rm9udFNpemU7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSAqL1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuICByZXR1cm4gZGVmYXVsdEZvbnRTaXplO1xufVxuLyoqXG4gKiBDb252ZXJ0IHJlbSB2YWx1ZXMgdG8gcHguIEJ5IGRlZmF1bHQsIHRoZSBiYXNlIHZhbHVlIGlzIHB1bGxlZCBmcm9tIHRoZSBmb250LXNpemUgcHJvcGVydHkgb24gdGhlIHJvb3QgZWxlbWVudCAoaWYgaXQgaXMgc2V0IGluICUgb3IgcHgpLiBJdCBkZWZhdWx0cyB0byAxNnB4IGlmIG5vdCBmb3VuZCBvbiB0aGUgcm9vdC4gWW91IGNhbiBhbHNvIG92ZXJyaWRlIHRoZSBiYXNlIHZhbHVlIGJ5IHByb3ZpZGluZyB5b3VyIG93biBiYXNlIGluICUgb3IgcHguXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICAnaGVpZ2h0JzogcmVtVG9QeCgnMS42cmVtJylcbiAqICAgJ2hlaWdodCc6IHJlbVRvUHgoJzEuNnJlbScsICcxMHB4JylcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgaGVpZ2h0OiAke3JlbVRvUHgoJzEuNnJlbScpfVxuICogICBoZWlnaHQ6ICR7cmVtVG9QeCgnMS42cmVtJywgJzEwcHgnKX1cbiAqIGBcbiAqXG4gKiAvLyBDU1MgaW4gSlMgT3V0cHV0XG4gKlxuICogZWxlbWVudCB7XG4gKiAgICdoZWlnaHQnOiAnMjUuNnB4JyxcbiAqICAgJ2hlaWdodCc6ICcxNnB4JyxcbiAqIH1cbiAqL1xuXG5cbmZ1bmN0aW9uIHJlbVRvUHgodmFsdWUsIGJhc2UpIHtcbiAgdmFyIGRlY29uc3RydWN0ZWRWYWx1ZSA9IGdldFZhbHVlQW5kVW5pdCh2YWx1ZSk7XG5cbiAgaWYgKGRlY29uc3RydWN0ZWRWYWx1ZVsxXSAhPT0gJ3JlbScgJiYgZGVjb25zdHJ1Y3RlZFZhbHVlWzFdICE9PSAnJykge1xuICAgIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDc3LCBkZWNvbnN0cnVjdGVkVmFsdWVbMV0pO1xuICB9XG5cbiAgdmFyIG5ld0Jhc2UgPSBiYXNlID8gY29udmVydEJhc2UoYmFzZSkgOiBnZXRCYXNlRnJvbURvYygpO1xuICByZXR1cm4gZGVjb25zdHJ1Y3RlZFZhbHVlWzBdICogbmV3QmFzZSArIFwicHhcIjtcbn1cblxudmFyIGZ1bmN0aW9uc01hcCQzID0ge1xuICBiYWNrOiAnY3ViaWMtYmV6aWVyKDAuNjAwLCAtMC4yODAsIDAuNzM1LCAwLjA0NSknLFxuICBjaXJjOiAnY3ViaWMtYmV6aWVyKDAuNjAwLCAgMC4wNDAsIDAuOTgwLCAwLjMzNSknLFxuICBjdWJpYzogJ2N1YmljLWJlemllcigwLjU1MCwgIDAuMDU1LCAwLjY3NSwgMC4xOTApJyxcbiAgZXhwbzogJ2N1YmljLWJlemllcigwLjk1MCwgIDAuMDUwLCAwLjc5NSwgMC4wMzUpJyxcbiAgcXVhZDogJ2N1YmljLWJlemllcigwLjU1MCwgIDAuMDg1LCAwLjY4MCwgMC41MzApJyxcbiAgcXVhcnQ6ICdjdWJpYy1iZXppZXIoMC44OTUsICAwLjAzMCwgMC42ODUsIDAuMjIwKScsXG4gIHF1aW50OiAnY3ViaWMtYmV6aWVyKDAuNzU1LCAgMC4wNTAsIDAuODU1LCAwLjA2MCknLFxuICBzaW5lOiAnY3ViaWMtYmV6aWVyKDAuNDcwLCAgMC4wMDAsIDAuNzQ1LCAwLjcxNSknXG59O1xuLyoqXG4gKiBTdHJpbmcgdG8gcmVwcmVzZW50IGNvbW1vbiBlYXNpbmcgZnVuY3Rpb25zIGFzIGRlbW9uc3RyYXRlZCBoZXJlOiAoZ2l0aHViLmNvbS9qYXVraWEvZWFzaWUpLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgICd0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24nOiBlYXNlSW4oJ3F1YWQnKVxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiAgY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOiAke2Vhc2VJbigncXVhZCcpfTtcbiAqIGBcbiAqXG4gKiAvLyBDU1MgYXMgSlMgT3V0cHV0XG4gKlxuICogJ2Rpdic6IHtcbiAqICAgJ3RyYW5zaXRpb25UaW1pbmdGdW5jdGlvbic6ICdjdWJpYy1iZXppZXIoMC41NTAsICAwLjA4NSwgMC42ODAsIDAuNTMwKScsXG4gKiB9XG4gKi9cblxuZnVuY3Rpb24gZWFzZUluKGZ1bmN0aW9uTmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb25zTWFwJDNbZnVuY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbn1cblxudmFyIGZ1bmN0aW9uc01hcCQyID0ge1xuICBiYWNrOiAnY3ViaWMtYmV6aWVyKDAuNjgwLCAtMC41NTAsIDAuMjY1LCAxLjU1MCknLFxuICBjaXJjOiAnY3ViaWMtYmV6aWVyKDAuNzg1LCAgMC4xMzUsIDAuMTUwLCAwLjg2MCknLFxuICBjdWJpYzogJ2N1YmljLWJlemllcigwLjY0NSwgIDAuMDQ1LCAwLjM1NSwgMS4wMDApJyxcbiAgZXhwbzogJ2N1YmljLWJlemllcigxLjAwMCwgIDAuMDAwLCAwLjAwMCwgMS4wMDApJyxcbiAgcXVhZDogJ2N1YmljLWJlemllcigwLjQ1NSwgIDAuMDMwLCAwLjUxNSwgMC45NTUpJyxcbiAgcXVhcnQ6ICdjdWJpYy1iZXppZXIoMC43NzAsICAwLjAwMCwgMC4xNzUsIDEuMDAwKScsXG4gIHF1aW50OiAnY3ViaWMtYmV6aWVyKDAuODYwLCAgMC4wMDAsIDAuMDcwLCAxLjAwMCknLFxuICBzaW5lOiAnY3ViaWMtYmV6aWVyKDAuNDQ1LCAgMC4wNTAsIDAuNTUwLCAwLjk1MCknXG59O1xuLyoqXG4gKiBTdHJpbmcgdG8gcmVwcmVzZW50IGNvbW1vbiBlYXNpbmcgZnVuY3Rpb25zIGFzIGRlbW9uc3RyYXRlZCBoZXJlOiAoZ2l0aHViLmNvbS9qYXVraWEvZWFzaWUpLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgICd0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24nOiBlYXNlSW5PdXQoJ3F1YWQnKVxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiAgY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOiAke2Vhc2VJbk91dCgncXVhZCcpfTtcbiAqIGBcbiAqXG4gKiAvLyBDU1MgYXMgSlMgT3V0cHV0XG4gKlxuICogJ2Rpdic6IHtcbiAqICAgJ3RyYW5zaXRpb25UaW1pbmdGdW5jdGlvbic6ICdjdWJpYy1iZXppZXIoMC40NTUsICAwLjAzMCwgMC41MTUsIDAuOTU1KScsXG4gKiB9XG4gKi9cblxuZnVuY3Rpb24gZWFzZUluT3V0KGZ1bmN0aW9uTmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb25zTWFwJDJbZnVuY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbn1cblxudmFyIGZ1bmN0aW9uc01hcCQxID0ge1xuICBiYWNrOiAnY3ViaWMtYmV6aWVyKDAuMTc1LCAgMC44ODUsIDAuMzIwLCAxLjI3NSknLFxuICBjdWJpYzogJ2N1YmljLWJlemllcigwLjIxNSwgIDAuNjEwLCAwLjM1NSwgMS4wMDApJyxcbiAgY2lyYzogJ2N1YmljLWJlemllcigwLjA3NSwgIDAuODIwLCAwLjE2NSwgMS4wMDApJyxcbiAgZXhwbzogJ2N1YmljLWJlemllcigwLjE5MCwgIDEuMDAwLCAwLjIyMCwgMS4wMDApJyxcbiAgcXVhZDogJ2N1YmljLWJlemllcigwLjI1MCwgIDAuNDYwLCAwLjQ1MCwgMC45NDApJyxcbiAgcXVhcnQ6ICdjdWJpYy1iZXppZXIoMC4xNjUsICAwLjg0MCwgMC40NDAsIDEuMDAwKScsXG4gIHF1aW50OiAnY3ViaWMtYmV6aWVyKDAuMjMwLCAgMS4wMDAsIDAuMzIwLCAxLjAwMCknLFxuICBzaW5lOiAnY3ViaWMtYmV6aWVyKDAuMzkwLCAgMC41NzUsIDAuNTY1LCAxLjAwMCknXG59O1xuLyoqXG4gKiBTdHJpbmcgdG8gcmVwcmVzZW50IGNvbW1vbiBlYXNpbmcgZnVuY3Rpb25zIGFzIGRlbW9uc3RyYXRlZCBoZXJlOiAoZ2l0aHViLmNvbS9qYXVraWEvZWFzaWUpLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgICd0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24nOiBlYXNlT3V0KCdxdWFkJylcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgIHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjogJHtlYXNlT3V0KCdxdWFkJyl9O1xuICogYFxuICpcbiAqIC8vIENTUyBhcyBKUyBPdXRwdXRcbiAqXG4gKiAnZGl2Jzoge1xuICogICAndHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uJzogJ2N1YmljLWJlemllcigwLjI1MCwgIDAuNDYwLCAwLjQ1MCwgMC45NDApJyxcbiAqIH1cbiAqL1xuXG5mdW5jdGlvbiBlYXNlT3V0KGZ1bmN0aW9uTmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb25zTWFwJDFbZnVuY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgQ1NTIGNhbGMgZm9ybXVsYSBmb3IgbGluZWFyIGludGVycG9sYXRpb24gb2YgYSBwcm9wZXJ0eSBiZXR3ZWVuIHR3byB2YWx1ZXMuIEFjY2VwdHMgb3B0aW9uYWwgbWluU2NyZWVuIChkZWZhdWx0cyB0byAnMzIwcHgnKSBhbmQgbWF4U2NyZWVuIChkZWZhdWx0cyB0byAnMTIwMHB4JykuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgZm9udFNpemU6IGJldHdlZW4oJzIwcHgnLCAnMTAwcHgnLCAnNDAwcHgnLCAnMTAwMHB4JyksXG4gKiAgIGZvbnRTaXplOiBiZXR3ZWVuKCcyMHB4JywgJzEwMHB4JylcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgZm9udFNpemU6ICR7YmV0d2VlbignMjBweCcsICcxMDBweCcsICc0MDBweCcsICcxMDAwcHgnKX07XG4gKiAgIGZvbnRTaXplOiAke2JldHdlZW4oJzIwcHgnLCAnMTAwcHgnKX1cbiAqIGBcbiAqXG4gKiAvLyBDU1MgYXMgSlMgT3V0cHV0XG4gKlxuICogaDE6IHtcbiAqICAgJ2ZvbnRTaXplJzogJ2NhbGMoLTMzLjMzMzMzMzMzMzMzMzM0cHggKyAxMy4zMzMzMzMzMzMzMzMzMzR2dyknLFxuICogICAnZm9udFNpemUnOiAnY2FsYygtOS4wOTA5MDkwOTA5MDkwOTNweCArIDkuMDkwOTA5MDkwOTA5MDkydncpJ1xuICogfVxuICovXG5cbmZ1bmN0aW9uIGJldHdlZW4oZnJvbVNpemUsIHRvU2l6ZSwgbWluU2NyZWVuLCBtYXhTY3JlZW4pIHtcbiAgaWYgKG1pblNjcmVlbiA9PT0gdm9pZCAwKSB7XG4gICAgbWluU2NyZWVuID0gJzMyMHB4JztcbiAgfVxuXG4gIGlmIChtYXhTY3JlZW4gPT09IHZvaWQgMCkge1xuICAgIG1heFNjcmVlbiA9ICcxMjAwcHgnO1xuICB9XG5cbiAgdmFyIF9nZXRWYWx1ZUFuZFVuaXQgPSBnZXRWYWx1ZUFuZFVuaXQoZnJvbVNpemUpLFxuICAgICAgdW5pdGxlc3NGcm9tU2l6ZSA9IF9nZXRWYWx1ZUFuZFVuaXRbMF0sXG4gICAgICBmcm9tU2l6ZVVuaXQgPSBfZ2V0VmFsdWVBbmRVbml0WzFdO1xuXG4gIHZhciBfZ2V0VmFsdWVBbmRVbml0MiA9IGdldFZhbHVlQW5kVW5pdCh0b1NpemUpLFxuICAgICAgdW5pdGxlc3NUb1NpemUgPSBfZ2V0VmFsdWVBbmRVbml0MlswXSxcbiAgICAgIHRvU2l6ZVVuaXQgPSBfZ2V0VmFsdWVBbmRVbml0MlsxXTtcblxuICB2YXIgX2dldFZhbHVlQW5kVW5pdDMgPSBnZXRWYWx1ZUFuZFVuaXQobWluU2NyZWVuKSxcbiAgICAgIHVuaXRsZXNzTWluU2NyZWVuID0gX2dldFZhbHVlQW5kVW5pdDNbMF0sXG4gICAgICBtaW5TY3JlZW5Vbml0ID0gX2dldFZhbHVlQW5kVW5pdDNbMV07XG5cbiAgdmFyIF9nZXRWYWx1ZUFuZFVuaXQ0ID0gZ2V0VmFsdWVBbmRVbml0KG1heFNjcmVlbiksXG4gICAgICB1bml0bGVzc01heFNjcmVlbiA9IF9nZXRWYWx1ZUFuZFVuaXQ0WzBdLFxuICAgICAgbWF4U2NyZWVuVW5pdCA9IF9nZXRWYWx1ZUFuZFVuaXQ0WzFdO1xuXG4gIGlmICh0eXBlb2YgdW5pdGxlc3NNaW5TY3JlZW4gIT09ICdudW1iZXInIHx8IHR5cGVvZiB1bml0bGVzc01heFNjcmVlbiAhPT0gJ251bWJlcicgfHwgIW1pblNjcmVlblVuaXQgfHwgIW1heFNjcmVlblVuaXQgfHwgbWluU2NyZWVuVW5pdCAhPT0gbWF4U2NyZWVuVW5pdCkge1xuICAgIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDQ3KTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdW5pdGxlc3NGcm9tU2l6ZSAhPT0gJ251bWJlcicgfHwgdHlwZW9mIHVuaXRsZXNzVG9TaXplICE9PSAnbnVtYmVyJyB8fCBmcm9tU2l6ZVVuaXQgIT09IHRvU2l6ZVVuaXQpIHtcbiAgICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig0OCk7XG4gIH1cblxuICBpZiAoZnJvbVNpemVVbml0ICE9PSBtaW5TY3JlZW5Vbml0IHx8IHRvU2l6ZVVuaXQgIT09IG1heFNjcmVlblVuaXQpIHtcbiAgICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig3Nik7XG4gIH1cblxuICB2YXIgc2xvcGUgPSAodW5pdGxlc3NGcm9tU2l6ZSAtIHVuaXRsZXNzVG9TaXplKSAvICh1bml0bGVzc01pblNjcmVlbiAtIHVuaXRsZXNzTWF4U2NyZWVuKTtcbiAgdmFyIGJhc2UgPSB1bml0bGVzc1RvU2l6ZSAtIHNsb3BlICogdW5pdGxlc3NNYXhTY3JlZW47XG4gIHJldHVybiBcImNhbGMoXCIgKyBiYXNlLnRvRml4ZWQoMikgKyAoZnJvbVNpemVVbml0IHx8ICcnKSArIFwiICsgXCIgKyAoMTAwICogc2xvcGUpLnRvRml4ZWQoMikgKyBcInZ3KVwiO1xufVxuXG4vKipcbiAqIENTUyB0byBjb250YWluIGEgZmxvYXQgKGNyZWRpdCB0byBDU1NNb2pvKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICAgLi4uY2xlYXJGaXgoKSxcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgJHtjbGVhckZpeCgpfVxuICogYFxuICpcbiAqIC8vIENTUyBhcyBKUyBPdXRwdXRcbiAqXG4gKiAnJjo6YWZ0ZXInOiB7XG4gKiAgICdjbGVhcic6ICdib3RoJyxcbiAqICAgJ2NvbnRlbnQnOiAnXCJcIicsXG4gKiAgICdkaXNwbGF5JzogJ3RhYmxlJ1xuICogfVxuICovXG5mdW5jdGlvbiBjbGVhckZpeChwYXJlbnQpIHtcbiAgdmFyIF9yZWY7XG5cbiAgaWYgKHBhcmVudCA9PT0gdm9pZCAwKSB7XG4gICAgcGFyZW50ID0gJyYnO1xuICB9XG5cbiAgdmFyIHBzZXVkb1NlbGVjdG9yID0gcGFyZW50ICsgXCI6OmFmdGVyXCI7XG4gIHJldHVybiBfcmVmID0ge30sIF9yZWZbcHNldWRvU2VsZWN0b3JdID0ge1xuICAgIGNsZWFyOiAnYm90aCcsXG4gICAgY29udGVudDogJ1wiXCInLFxuICAgIGRpc3BsYXk6ICd0YWJsZSdcbiAgfSwgX3JlZjtcbn1cblxuLyoqXG4gKiBDU1MgdG8gZnVsbHkgY292ZXIgYW4gYXJlYS4gQ2FuIG9wdGlvbmFsbHkgYmUgcGFzc2VkIGFuIG9mZnNldCB0byBhY3QgYXMgYSBcInBhZGRpbmdcIi5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICAuLi5jb3ZlcigpXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgICR7Y292ZXIoKX1cbiAqIGBcbiAqXG4gKiAvLyBDU1MgYXMgSlMgT3V0cHV0XG4gKlxuICogZGl2OiB7XG4gKiAgICdwb3NpdGlvbic6ICdhYnNvbHV0ZScsXG4gKiAgICd0b3AnOiAnMCcsXG4gKiAgICdyaWdodDogJzAnLFxuICogICAnYm90dG9tJzogJzAnLFxuICogICAnbGVmdDogJzAnXG4gKiB9XG4gKi9cbmZ1bmN0aW9uIGNvdmVyKG9mZnNldCkge1xuICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHtcbiAgICBvZmZzZXQgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IG9mZnNldCxcbiAgICByaWdodDogb2Zmc2V0LFxuICAgIGJvdHRvbTogb2Zmc2V0LFxuICAgIGxlZnQ6IG9mZnNldFxuICB9O1xufVxuXG4vKipcbiAqIENTUyB0byByZXByZXNlbnQgdHJ1bmNhdGVkIHRleHQgd2l0aCBhbiBlbGxpcHNpcy4gWW91IGNhbiBvcHRpb25hbGx5IHBhc3MgYSBtYXgtd2lkdGggYW5kIG51bWJlciBvZiBsaW5lcyBiZWZvcmUgdHJ1bmNhdGluZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICAuLi5lbGxpcHNpcygnMjUwcHgnKVxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICAke2VsbGlwc2lzKCcyNTBweCcpfVxuICogYFxuICpcbiAqIC8vIENTUyBhcyBKUyBPdXRwdXRcbiAqXG4gKiBkaXY6IHtcbiAqICAgJ2Rpc3BsYXknOiAnaW5saW5lLWJsb2NrJyxcbiAqICAgJ21heFdpZHRoJzogJzI1MHB4JyxcbiAqICAgJ292ZXJmbG93JzogJ2hpZGRlbicsXG4gKiAgICd0ZXh0T3ZlcmZsb3cnOiAnZWxsaXBzaXMnLFxuICogICAnd2hpdGVTcGFjZSc6ICdub3dyYXAnLFxuICogICAnd29yZFdyYXAnOiAnbm9ybWFsJ1xuICogfVxuICovXG5mdW5jdGlvbiBlbGxpcHNpcyh3aWR0aCwgbGluZXMpIHtcbiAgaWYgKGxpbmVzID09PSB2b2lkIDApIHtcbiAgICBsaW5lcyA9IDE7XG4gIH1cblxuICB2YXIgc3R5bGVzID0ge1xuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIG1heFdpZHRoOiB3aWR0aCB8fCAnMTAwJScsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICB3b3JkV3JhcDogJ25vcm1hbCdcbiAgfTtcbiAgcmV0dXJuIGxpbmVzID4gMSA/IF9leHRlbmRzKHt9LCBzdHlsZXMsIHtcbiAgICBXZWJraXRCb3hPcmllbnQ6ICd2ZXJ0aWNhbCcsXG4gICAgV2Via2l0TGluZUNsYW1wOiBsaW5lcyxcbiAgICBkaXNwbGF5OiAnLXdlYmtpdC1ib3gnLFxuICAgIHdoaXRlU3BhY2U6ICdub3JtYWwnXG4gIH0pIDogc3R5bGVzO1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKG8sIGFsbG93QXJyYXlMaWtlKSB7IHZhciBpdCA9IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdIHx8IG9bXCJAQGl0ZXJhdG9yXCJdOyBpZiAoaXQpIHJldHVybiAoaXQgPSBpdC5jYWxsKG8pKS5uZXh0LmJpbmQoaXQpOyBpZiAoQXJyYXkuaXNBcnJheShvKSB8fCAoaXQgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobykpIHx8IGFsbG93QXJyYXlMaWtlICYmIG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSB7IGlmIChpdCkgbyA9IGl0OyB2YXIgaSA9IDA7IHJldHVybiBmdW5jdGlvbiAoKSB7IGlmIChpID49IG8ubGVuZ3RoKSByZXR1cm4geyBkb25lOiB0cnVlIH07IHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogb1tpKytdIH07IH07IH0gdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuLyoqXG4gKiBSZXR1cm5zIGEgc2V0IG9mIG1lZGlhIHF1ZXJpZXMgdGhhdCByZXNpemVzIGEgcHJvcGVydHkgKG9yIHNldCBvZiBwcm9wZXJ0aWVzKSBiZXR3ZWVuIGEgcHJvdmlkZWQgZnJvbVNpemUgYW5kIHRvU2l6ZS4gQWNjZXB0cyBvcHRpb25hbCBtaW5TY3JlZW4gKGRlZmF1bHRzIHRvICczMjBweCcpIGFuZCBtYXhTY3JlZW4gKGRlZmF1bHRzIHRvICcxMjAwcHgnKSB0byBjb25zdHJhaW4gdGhlIGludGVycG9sYXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgLi4uZmx1aWRSYW5nZShcbiAqICAgIHtcbiAqICAgICAgICBwcm9wOiAncGFkZGluZycsXG4gKiAgICAgICAgZnJvbVNpemU6ICcyMHB4JyxcbiAqICAgICAgICB0b1NpemU6ICcxMDBweCcsXG4gKiAgICAgIH0sXG4gKiAgICAgICc0MDBweCcsXG4gKiAgICAgICcxMDAwcHgnLFxuICogICAgKVxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICAke2ZsdWlkUmFuZ2UoXG4gKiAgICAgIHtcbiAqICAgICAgICBwcm9wOiAncGFkZGluZycsXG4gKiAgICAgICAgZnJvbVNpemU6ICcyMHB4JyxcbiAqICAgICAgICB0b1NpemU6ICcxMDBweCcsXG4gKiAgICAgIH0sXG4gKiAgICAgICc0MDBweCcsXG4gKiAgICAgICcxMDAwcHgnLFxuICogICAgKX1cbiAqIGBcbiAqXG4gKiAvLyBDU1MgYXMgSlMgT3V0cHV0XG4gKlxuICogZGl2OiB7XG4gKiAgIFwiQG1lZGlhIChtaW4td2lkdGg6IDEwMDBweClcIjogT2JqZWN0IHtcbiAqICAgICBcInBhZGRpbmdcIjogXCIxMDBweFwiLFxuICogICB9LFxuICogICBcIkBtZWRpYSAobWluLXdpZHRoOiA0MDBweClcIjogT2JqZWN0IHtcbiAqICAgICBcInBhZGRpbmdcIjogXCJjYWxjKC0zMy4zMzMzMzMzMzMzMzMzNHB4ICsgMTMuMzMzMzMzMzMzMzMzMzM0dncpXCIsXG4gKiAgIH0sXG4gKiAgIFwicGFkZGluZ1wiOiBcIjIwcHhcIixcbiAqIH1cbiAqL1xuZnVuY3Rpb24gZmx1aWRSYW5nZShjc3NQcm9wLCBtaW5TY3JlZW4sIG1heFNjcmVlbikge1xuICBpZiAobWluU2NyZWVuID09PSB2b2lkIDApIHtcbiAgICBtaW5TY3JlZW4gPSAnMzIwcHgnO1xuICB9XG5cbiAgaWYgKG1heFNjcmVlbiA9PT0gdm9pZCAwKSB7XG4gICAgbWF4U2NyZWVuID0gJzEyMDBweCc7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoY3NzUHJvcCkgJiYgdHlwZW9mIGNzc1Byb3AgIT09ICdvYmplY3QnIHx8IGNzc1Byb3AgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig0OSk7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShjc3NQcm9wKSkge1xuICAgIHZhciBtZWRpYVF1ZXJpZXMgPSB7fTtcbiAgICB2YXIgZmFsbGJhY2tzID0ge307XG5cbiAgICBmb3IgKHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKGNzc1Byb3ApLCBfc3RlcDsgIShfc3RlcCA9IF9pdGVyYXRvcigpKS5kb25lOykge1xuICAgICAgdmFyIF9leHRlbmRzMiwgX2V4dGVuZHMzO1xuXG4gICAgICB2YXIgb2JqID0gX3N0ZXAudmFsdWU7XG5cbiAgICAgIGlmICghb2JqLnByb3AgfHwgIW9iai5mcm9tU2l6ZSB8fCAhb2JqLnRvU2l6ZSkge1xuICAgICAgICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig1MCk7XG4gICAgICB9XG5cbiAgICAgIGZhbGxiYWNrc1tvYmoucHJvcF0gPSBvYmouZnJvbVNpemU7XG4gICAgICBtZWRpYVF1ZXJpZXNbXCJAbWVkaWEgKG1pbi13aWR0aDogXCIgKyBtaW5TY3JlZW4gKyBcIilcIl0gPSBfZXh0ZW5kcyh7fSwgbWVkaWFRdWVyaWVzW1wiQG1lZGlhIChtaW4td2lkdGg6IFwiICsgbWluU2NyZWVuICsgXCIpXCJdLCAoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMltvYmoucHJvcF0gPSBiZXR3ZWVuKG9iai5mcm9tU2l6ZSwgb2JqLnRvU2l6ZSwgbWluU2NyZWVuLCBtYXhTY3JlZW4pLCBfZXh0ZW5kczIpKTtcbiAgICAgIG1lZGlhUXVlcmllc1tcIkBtZWRpYSAobWluLXdpZHRoOiBcIiArIG1heFNjcmVlbiArIFwiKVwiXSA9IF9leHRlbmRzKHt9LCBtZWRpYVF1ZXJpZXNbXCJAbWVkaWEgKG1pbi13aWR0aDogXCIgKyBtYXhTY3JlZW4gKyBcIilcIl0sIChfZXh0ZW5kczMgPSB7fSwgX2V4dGVuZHMzW29iai5wcm9wXSA9IG9iai50b1NpemUsIF9leHRlbmRzMykpO1xuICAgIH1cblxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgZmFsbGJhY2tzLCBtZWRpYVF1ZXJpZXMpO1xuICB9IGVsc2Uge1xuICAgIHZhciBfcmVmLCBfcmVmMiwgX3JlZjM7XG5cbiAgICBpZiAoIWNzc1Byb3AucHJvcCB8fCAhY3NzUHJvcC5mcm9tU2l6ZSB8fCAhY3NzUHJvcC50b1NpemUpIHtcbiAgICAgIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDUxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JlZjMgPSB7fSwgX3JlZjNbY3NzUHJvcC5wcm9wXSA9IGNzc1Byb3AuZnJvbVNpemUsIF9yZWYzW1wiQG1lZGlhIChtaW4td2lkdGg6IFwiICsgbWluU2NyZWVuICsgXCIpXCJdID0gKF9yZWYgPSB7fSwgX3JlZltjc3NQcm9wLnByb3BdID0gYmV0d2Vlbihjc3NQcm9wLmZyb21TaXplLCBjc3NQcm9wLnRvU2l6ZSwgbWluU2NyZWVuLCBtYXhTY3JlZW4pLCBfcmVmKSwgX3JlZjNbXCJAbWVkaWEgKG1pbi13aWR0aDogXCIgKyBtYXhTY3JlZW4gKyBcIilcIl0gPSAoX3JlZjIgPSB7fSwgX3JlZjJbY3NzUHJvcC5wcm9wXSA9IGNzc1Byb3AudG9TaXplLCBfcmVmMiksIF9yZWYzO1xuICB9XG59XG5cbnZhciBkYXRhVVJJUmVnZXggPSAvXlxccypkYXRhOihbYS16XStcXC9bYS16LV0rKDtbYS16LV0rPVthLXotXSspPyk/KDtjaGFyc2V0PVthLXowLTktXSspPyg7YmFzZTY0KT8sW2EtejAtOSEkJicsKCkqKyw7PVxcLS5ffjpALz8lXFxzXSpcXHMqJC9pO1xudmFyIGZvcm1hdEhpbnRNYXAgPSB7XG4gIHdvZmY6ICd3b2ZmJyxcbiAgd29mZjI6ICd3b2ZmMicsXG4gIHR0ZjogJ3RydWV0eXBlJyxcbiAgb3RmOiAnb3BlbnR5cGUnLFxuICBlb3Q6ICdlbWJlZGRlZC1vcGVudHlwZScsXG4gIHN2ZzogJ3N2ZycsXG4gIHN2Z3o6ICdzdmcnXG59O1xuXG5mdW5jdGlvbiBnZW5lcmF0ZUZvcm1hdEhpbnQoZm9ybWF0LCBmb3JtYXRIaW50KSB7XG4gIGlmICghZm9ybWF0SGludCkgcmV0dXJuICcnO1xuICByZXR1cm4gXCIgZm9ybWF0KFxcXCJcIiArIGZvcm1hdEhpbnRNYXBbZm9ybWF0XSArIFwiXFxcIilcIjtcbn1cblxuZnVuY3Rpb24gaXNEYXRhVVJJKGZvbnRGaWxlUGF0aCkge1xuICByZXR1cm4gISFmb250RmlsZVBhdGgucmVwbGFjZSgvXFxzKy9nLCAnICcpLm1hdGNoKGRhdGFVUklSZWdleCk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlRmlsZVJlZmVyZW5jZXMoZm9udEZpbGVQYXRoLCBmaWxlRm9ybWF0cywgZm9ybWF0SGludCkge1xuICBpZiAoaXNEYXRhVVJJKGZvbnRGaWxlUGF0aCkpIHtcbiAgICByZXR1cm4gXCJ1cmwoXFxcIlwiICsgZm9udEZpbGVQYXRoICsgXCJcXFwiKVwiICsgZ2VuZXJhdGVGb3JtYXRIaW50KGZpbGVGb3JtYXRzWzBdLCBmb3JtYXRIaW50KTtcbiAgfVxuXG4gIHZhciBmaWxlRm9udFJlZmVyZW5jZXMgPSBmaWxlRm9ybWF0cy5tYXAoZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIHJldHVybiBcInVybChcXFwiXCIgKyBmb250RmlsZVBhdGggKyBcIi5cIiArIGZvcm1hdCArIFwiXFxcIilcIiArIGdlbmVyYXRlRm9ybWF0SGludChmb3JtYXQsIGZvcm1hdEhpbnQpO1xuICB9KTtcbiAgcmV0dXJuIGZpbGVGb250UmVmZXJlbmNlcy5qb2luKCcsICcpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUxvY2FsUmVmZXJlbmNlcyhsb2NhbEZvbnRzKSB7XG4gIHZhciBsb2NhbEZvbnRSZWZlcmVuY2VzID0gbG9jYWxGb250cy5tYXAoZnVuY3Rpb24gKGZvbnQpIHtcbiAgICByZXR1cm4gXCJsb2NhbChcXFwiXCIgKyBmb250ICsgXCJcXFwiKVwiO1xuICB9KTtcbiAgcmV0dXJuIGxvY2FsRm9udFJlZmVyZW5jZXMuam9pbignLCAnKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTb3VyY2VzKGZvbnRGaWxlUGF0aCwgbG9jYWxGb250cywgZmlsZUZvcm1hdHMsIGZvcm1hdEhpbnQpIHtcbiAgdmFyIGZvbnRSZWZlcmVuY2VzID0gW107XG4gIGlmIChsb2NhbEZvbnRzKSBmb250UmVmZXJlbmNlcy5wdXNoKGdlbmVyYXRlTG9jYWxSZWZlcmVuY2VzKGxvY2FsRm9udHMpKTtcblxuICBpZiAoZm9udEZpbGVQYXRoKSB7XG4gICAgZm9udFJlZmVyZW5jZXMucHVzaChnZW5lcmF0ZUZpbGVSZWZlcmVuY2VzKGZvbnRGaWxlUGF0aCwgZmlsZUZvcm1hdHMsIGZvcm1hdEhpbnQpKTtcbiAgfVxuXG4gIHJldHVybiBmb250UmVmZXJlbmNlcy5qb2luKCcsICcpO1xufVxuLyoqXG4gKiBDU1MgZm9yIGEgQGZvbnQtZmFjZSBkZWNsYXJhdGlvbi4gRGVmYXVsdHMgdG8gY2hlY2sgZm9yIGxvY2FsIGNvcGllcyBvZiB0aGUgZm9udCBvbiB0aGUgdXNlcidzIG1hY2hpbmUuIFlvdSBjYW4gZGlzYWJsZSB0aGlzIGJ5IHBhc3NpbmcgYG51bGxgIHRvIGxvY2FsRm9udHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgYmFzaWMgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgIC4uLmZvbnRGYWNlKHtcbiAqICAgICAgJ2ZvbnRGYW1pbHknOiAnU2Fucy1Qcm8nLFxuICogICAgICAnZm9udEZpbGVQYXRoJzogJ3BhdGgvdG8vZmlsZSdcbiAqICAgIH0pXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgYmFzaWMgdXNhZ2VcbiAqIGNvbnN0IEdsb2JhbFN0eWxlID0gY3JlYXRlR2xvYmFsU3R5bGVgJHtcbiAqICAgZm9udEZhY2Uoe1xuICogICAgICdmb250RmFtaWx5JzogJ1NhbnMtUHJvJyxcbiAqICAgICAnZm9udEZpbGVQYXRoJzogJ3BhdGgvdG8vZmlsZSdcbiAqICAgfVxuICogKX1gXG4gKlxuICogLy8gQ1NTIGFzIEpTIE91dHB1dFxuICpcbiAqICdAZm9udC1mYWNlJzoge1xuICogICAnZm9udEZhbWlseSc6ICdTYW5zLVBybycsXG4gKiAgICdzcmMnOiAndXJsKFwicGF0aC90by9maWxlLmVvdFwiKSwgdXJsKFwicGF0aC90by9maWxlLndvZmYyXCIpLCB1cmwoXCJwYXRoL3RvL2ZpbGUud29mZlwiKSwgdXJsKFwicGF0aC90by9maWxlLnR0ZlwiKSwgdXJsKFwicGF0aC90by9maWxlLnN2Z1wiKScsXG4gKiB9XG4gKi9cblxuXG5mdW5jdGlvbiBmb250RmFjZShfcmVmKSB7XG4gIHZhciBmb250RmFtaWx5ID0gX3JlZi5mb250RmFtaWx5LFxuICAgICAgZm9udEZpbGVQYXRoID0gX3JlZi5mb250RmlsZVBhdGgsXG4gICAgICBmb250U3RyZXRjaCA9IF9yZWYuZm9udFN0cmV0Y2gsXG4gICAgICBmb250U3R5bGUgPSBfcmVmLmZvbnRTdHlsZSxcbiAgICAgIGZvbnRWYXJpYW50ID0gX3JlZi5mb250VmFyaWFudCxcbiAgICAgIGZvbnRXZWlnaHQgPSBfcmVmLmZvbnRXZWlnaHQsXG4gICAgICBfcmVmJGZpbGVGb3JtYXRzID0gX3JlZi5maWxlRm9ybWF0cyxcbiAgICAgIGZpbGVGb3JtYXRzID0gX3JlZiRmaWxlRm9ybWF0cyA9PT0gdm9pZCAwID8gWydlb3QnLCAnd29mZjInLCAnd29mZicsICd0dGYnLCAnc3ZnJ10gOiBfcmVmJGZpbGVGb3JtYXRzLFxuICAgICAgX3JlZiRmb3JtYXRIaW50ID0gX3JlZi5mb3JtYXRIaW50LFxuICAgICAgZm9ybWF0SGludCA9IF9yZWYkZm9ybWF0SGludCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGZvcm1hdEhpbnQsXG4gICAgICBfcmVmJGxvY2FsRm9udHMgPSBfcmVmLmxvY2FsRm9udHMsXG4gICAgICBsb2NhbEZvbnRzID0gX3JlZiRsb2NhbEZvbnRzID09PSB2b2lkIDAgPyBbZm9udEZhbWlseV0gOiBfcmVmJGxvY2FsRm9udHMsXG4gICAgICB1bmljb2RlUmFuZ2UgPSBfcmVmLnVuaWNvZGVSYW5nZSxcbiAgICAgIGZvbnREaXNwbGF5ID0gX3JlZi5mb250RGlzcGxheSxcbiAgICAgIGZvbnRWYXJpYXRpb25TZXR0aW5ncyA9IF9yZWYuZm9udFZhcmlhdGlvblNldHRpbmdzLFxuICAgICAgZm9udEZlYXR1cmVTZXR0aW5ncyA9IF9yZWYuZm9udEZlYXR1cmVTZXR0aW5ncztcbiAgLy8gRXJyb3IgSGFuZGxpbmdcbiAgaWYgKCFmb250RmFtaWx5KSB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig1NSk7XG5cbiAgaWYgKCFmb250RmlsZVBhdGggJiYgIWxvY2FsRm9udHMpIHtcbiAgICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig1Mik7XG4gIH1cblxuICBpZiAobG9jYWxGb250cyAmJiAhQXJyYXkuaXNBcnJheShsb2NhbEZvbnRzKSkge1xuICAgIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDUzKTtcbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShmaWxlRm9ybWF0cykpIHtcbiAgICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig1NCk7XG4gIH1cblxuICB2YXIgZm9udEZhY2VEZWNsYXJhdGlvbiA9IHtcbiAgICAnQGZvbnQtZmFjZSc6IHtcbiAgICAgIGZvbnRGYW1pbHk6IGZvbnRGYW1pbHksXG4gICAgICBzcmM6IGdlbmVyYXRlU291cmNlcyhmb250RmlsZVBhdGgsIGxvY2FsRm9udHMsIGZpbGVGb3JtYXRzLCBmb3JtYXRIaW50KSxcbiAgICAgIHVuaWNvZGVSYW5nZTogdW5pY29kZVJhbmdlLFxuICAgICAgZm9udFN0cmV0Y2g6IGZvbnRTdHJldGNoLFxuICAgICAgZm9udFN0eWxlOiBmb250U3R5bGUsXG4gICAgICBmb250VmFyaWFudDogZm9udFZhcmlhbnQsXG4gICAgICBmb250V2VpZ2h0OiBmb250V2VpZ2h0LFxuICAgICAgZm9udERpc3BsYXk6IGZvbnREaXNwbGF5LFxuICAgICAgZm9udFZhcmlhdGlvblNldHRpbmdzOiBmb250VmFyaWF0aW9uU2V0dGluZ3MsXG4gICAgICBmb250RmVhdHVyZVNldHRpbmdzOiBmb250RmVhdHVyZVNldHRpbmdzXG4gICAgfVxuICB9OyAvLyBSZW1vdmVzIHVuZGVmaW5lZCBmaWVsZHMgZm9yIGNsZWFuZXIgY3NzIG9iamVjdC5cblxuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmb250RmFjZURlY2xhcmF0aW9uKSk7XG59XG5cbi8qKlxuICogQ1NTIHRvIGhpZGUgdGV4dCB0byBzaG93IGEgYmFja2dyb3VuZCBpbWFnZSBpbiBhIFNFTy1mcmllbmRseSB3YXkuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgJ2JhY2tncm91bmRJbWFnZSc6ICd1cmwobG9nby5wbmcpJyxcbiAqICAgLi4uaGlkZVRleHQoKSxcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgYmFja2dyb3VuZEltYWdlOiB1cmwobG9nby5wbmcpO1xuICogICAke2hpZGVUZXh0KCl9O1xuICogYFxuICpcbiAqIC8vIENTUyBhcyBKUyBPdXRwdXRcbiAqXG4gKiAnZGl2Jzoge1xuICogICAnYmFja2dyb3VuZEltYWdlJzogJ3VybChsb2dvLnBuZyknLFxuICogICAndGV4dEluZGVudCc6ICcxMDElJyxcbiAqICAgJ292ZXJmbG93JzogJ2hpZGRlbicsXG4gKiAgICd3aGl0ZVNwYWNlJzogJ25vd3JhcCcsXG4gKiB9XG4gKi9cbmZ1bmN0aW9uIGhpZGVUZXh0KCkge1xuICByZXR1cm4ge1xuICAgIHRleHRJbmRlbnQ6ICcxMDElJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCdcbiAgfTtcbn1cblxuLyoqXG4gKiBDU1MgdG8gaGlkZSBjb250ZW50IHZpc3VhbGx5IGJ1dCByZW1haW4gYWNjZXNzaWJsZSB0byBzY3JlZW4gcmVhZGVycy5cbiAqIGZyb20gW0hUTUw1IEJvaWxlcnBsYXRlXShodHRwczovL2dpdGh1Yi5jb20vaDVicC9odG1sNS1ib2lsZXJwbGF0ZS9ibG9iLzlhMTc2ZjU3YWYxY2ZlOGVjNzAzMDBkYTQ2MjFmYjliMDdlNWZhMzEvc3JjL2Nzcy9tYWluLmNzcyNMMTIxKVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIC4uLmhpZGVWaXN1YWxseSgpLFxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICAke2hpZGVWaXN1YWxseSgpfTtcbiAqIGBcbiAqXG4gKiAvLyBDU1MgYXMgSlMgT3V0cHV0XG4gKlxuICogJ2Rpdic6IHtcbiAqICAgJ2JvcmRlcic6ICcwJyxcbiAqICAgJ2NsaXAnOiAncmVjdCgwIDAgMCAwKScsXG4gKiAgICdoZWlnaHQnOiAnMXB4JyxcbiAqICAgJ21hcmdpbic6ICctMXB4JyxcbiAqICAgJ292ZXJmbG93JzogJ2hpZGRlbicsXG4gKiAgICdwYWRkaW5nJzogJzAnLFxuICogICAncG9zaXRpb24nOiAnYWJzb2x1dGUnLFxuICogICAnd2hpdGVTcGFjZSc6ICdub3dyYXAnLFxuICogICAnd2lkdGgnOiAnMXB4JyxcbiAqIH1cbiAqL1xuZnVuY3Rpb24gaGlkZVZpc3VhbGx5KCkge1xuICByZXR1cm4ge1xuICAgIGJvcmRlcjogJzAnLFxuICAgIGNsaXA6ICdyZWN0KDAgMCAwIDApJyxcbiAgICBoZWlnaHQ6ICcxcHgnLFxuICAgIG1hcmdpbjogJy0xcHgnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBwYWRkaW5nOiAnMCcsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgd2lkdGg6ICcxcHgnXG4gIH07XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbWVkaWEgcXVlcnkgdG8gdGFyZ2V0IEhpRFBJIGRldmljZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICBbaGlEUEkoMS41KV06IHtcbiAqICAgIHdpZHRoOiAyMDBweDtcbiAqICB9XG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgICR7aGlEUEkoMS41KX0ge1xuICogICAgIHdpZHRoOiAyMDBweDtcbiAqICAgfVxuICogYFxuICpcbiAqIC8vIENTUyBhcyBKUyBPdXRwdXRcbiAqXG4gKiAnQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAxLjUpLFxuICogIG9ubHkgc2NyZWVuIGFuZCAobWluLS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvOiAxLjUpLFxuICogIG9ubHkgc2NyZWVuIGFuZCAoLW8tbWluLWRldmljZS1waXhlbC1yYXRpbzogMS41LzEpLFxuICogIG9ubHkgc2NyZWVuIGFuZCAobWluLXJlc29sdXRpb246IDE0NGRwaSksXG4gKiAgb25seSBzY3JlZW4gYW5kIChtaW4tcmVzb2x1dGlvbjogMS41ZHBweCknOiB7XG4gKiAgICd3aWR0aCc6ICcyMDBweCcsXG4gKiB9XG4gKi9cbmZ1bmN0aW9uIGhpRFBJKHJhdGlvKSB7XG4gIGlmIChyYXRpbyA9PT0gdm9pZCAwKSB7XG4gICAgcmF0aW8gPSAxLjM7XG4gIH1cblxuICByZXR1cm4gXCJcXG4gICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiBcIiArIHJhdGlvICsgXCIpLFxcbiAgICBvbmx5IHNjcmVlbiBhbmQgKG1pbi0tbW96LWRldmljZS1waXhlbC1yYXRpbzogXCIgKyByYXRpbyArIFwiKSxcXG4gICAgb25seSBzY3JlZW4gYW5kICgtby1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiBcIiArIHJhdGlvICsgXCIvMSksXFxuICAgIG9ubHkgc2NyZWVuIGFuZCAobWluLXJlc29sdXRpb246IFwiICsgTWF0aC5yb3VuZChyYXRpbyAqIDk2KSArIFwiZHBpKSxcXG4gICAgb25seSBzY3JlZW4gYW5kIChtaW4tcmVzb2x1dGlvbjogXCIgKyByYXRpbyArIFwiZHBweClcXG4gIFwiO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RHcmFkaWVudFZhbHVlKGxpdGVyYWxzKSB7XG4gIHZhciB0ZW1wbGF0ZSA9ICcnO1xuXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBzdWJzdGl0dXRpb25zID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBzdWJzdGl0dXRpb25zW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGl0ZXJhbHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0ZW1wbGF0ZSArPSBsaXRlcmFsc1tpXTtcblxuICAgIGlmIChpID09PSBzdWJzdGl0dXRpb25zLmxlbmd0aCAtIDEgJiYgc3Vic3RpdHV0aW9uc1tpXSkge1xuICAgICAgdmFyIGRlZmluZWRWYWx1ZXMgPSBzdWJzdGl0dXRpb25zLmZpbHRlcihmdW5jdGlvbiAoc3Vic3RpdHV0ZSkge1xuICAgICAgICByZXR1cm4gISFzdWJzdGl0dXRlO1xuICAgICAgfSk7IC8vIEFkZHMgbGVhZGluZyBjb21hIGlmIHByb3BlcnRpZXMgcHJlY2VlZCBjb2xvci1zdG9wc1xuXG4gICAgICBpZiAoZGVmaW5lZFZhbHVlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuc2xpY2UoMCwgLTEpO1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIiwgXCIgKyBzdWJzdGl0dXRpb25zW2ldOyAvLyBObyB0cmFpbGluZyBzcGFjZSBpZiBjb2xvci1zdG9wcyBpcyB0aGUgb25seSBwYXJhbSBwcm92aWRlZFxuICAgICAgfSBlbHNlIGlmIChkZWZpbmVkVmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlwiICsgc3Vic3RpdHV0aW9uc1tpXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN1YnN0aXR1dGlvbnNbaV0pIHtcbiAgICAgIHRlbXBsYXRlICs9IHN1YnN0aXR1dGlvbnNbaV0gKyBcIiBcIjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGVtcGxhdGUudHJpbSgpO1xufVxuXG52YXIgX3RlbXBsYXRlT2JqZWN0JDE7XG5cbi8qKlxuICogQ1NTIGZvciBkZWNsYXJpbmcgYSBsaW5lYXIgZ3JhZGllbnQsIGluY2x1ZGluZyBhIGZhbGxiYWNrIGJhY2tncm91bmQtY29sb3IuIFRoZSBmYWxsYmFjayBpcyBlaXRoZXIgdGhlIGZpcnN0IGNvbG9yLXN0b3Agb3IgYW4gZXhwbGljaXRseSBwYXNzZWQgZmFsbGJhY2sgY29sb3IuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgLi4ubGluZWFyR3JhZGllbnQoe1xuICAgICAgICBjb2xvclN0b3BzOiBbJyMwMEZGRkYgMCUnLCAncmdiYSgwLCAwLCAyNTUsIDApIDUwJScsICcjMDAwMEZGIDk1JSddLFxuICAgICAgICB0b0RpcmVjdGlvbjogJ3RvIHRvcCByaWdodCcsXG4gICAgICAgIGZhbGxiYWNrOiAnI0ZGRicsXG4gICAgICB9KVxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICAke2xpbmVhckdyYWRpZW50KHtcbiAgICAgICAgY29sb3JTdG9wczogWycjMDBGRkZGIDAlJywgJ3JnYmEoMCwgMCwgMjU1LCAwKSA1MCUnLCAnIzAwMDBGRiA5NSUnXSxcbiAgICAgICAgdG9EaXJlY3Rpb246ICd0byB0b3AgcmlnaHQnLFxuICAgICAgICBmYWxsYmFjazogJyNGRkYnLFxuICAgICAgfSl9XG4gKmBcbiAqXG4gKiAvLyBDU1MgYXMgSlMgT3V0cHV0XG4gKlxuICogZGl2OiB7XG4gKiAgICdiYWNrZ3JvdW5kQ29sb3InOiAnI0ZGRicsXG4gKiAgICdiYWNrZ3JvdW5kSW1hZ2UnOiAnbGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgIzAwRkZGRiAwJSwgcmdiYSgwLCAwLCAyNTUsIDApIDUwJSwgIzAwMDBGRiA5NSUpJyxcbiAqIH1cbiAqL1xuZnVuY3Rpb24gbGluZWFyR3JhZGllbnQoX3JlZikge1xuICB2YXIgY29sb3JTdG9wcyA9IF9yZWYuY29sb3JTdG9wcyxcbiAgICAgIGZhbGxiYWNrID0gX3JlZi5mYWxsYmFjayxcbiAgICAgIF9yZWYkdG9EaXJlY3Rpb24gPSBfcmVmLnRvRGlyZWN0aW9uLFxuICAgICAgdG9EaXJlY3Rpb24gPSBfcmVmJHRvRGlyZWN0aW9uID09PSB2b2lkIDAgPyAnJyA6IF9yZWYkdG9EaXJlY3Rpb247XG5cbiAgaWYgKCFjb2xvclN0b3BzIHx8IGNvbG9yU3RvcHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDU2KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBmYWxsYmFjayB8fCBjb2xvclN0b3BzWzBdLnJlcGxhY2UoLyxcXHMrL2csICcsJykuc3BsaXQoJyAnKVswXS5yZXBsYWNlKC8sKD89XFxTKS9nLCAnLCAnKSxcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6IGNvbnN0cnVjdEdyYWRpZW50VmFsdWUoX3RlbXBsYXRlT2JqZWN0JDEgfHwgKF90ZW1wbGF0ZU9iamVjdCQxID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbExvb3NlKFtcImxpbmVhci1ncmFkaWVudChcIiwgXCJcIiwgXCIpXCJdKSksIHRvRGlyZWN0aW9uLCBjb2xvclN0b3BzLmpvaW4oJywgJykucmVwbGFjZSgvLCg/PVxcUykvZywgJywgJykpXG4gIH07XG59XG5cbi8qKlxuICogQ1NTIHRvIG5vcm1hbGl6ZSBhYm5vcm1hbGl0aWVzIGFjcm9zcyBicm93c2VycyAobm9ybWFsaXplLmNzcyB2OC4wLjEgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzKVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgICAuLi5ub3JtYWxpemUoKSxcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgR2xvYmFsU3R5bGUgPSBjcmVhdGVHbG9iYWxTdHlsZWAke25vcm1hbGl6ZSgpfWBcbiAqXG4gKiAvLyBDU1MgYXMgSlMgT3V0cHV0XG4gKlxuICogaHRtbCB7XG4gKiAgIGxpbmVIZWlnaHQ6IDEuMTUsXG4gKiAgIHRleHRTaXplQWRqdXN0OiAxMDAlLFxuICogfSAuLi5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplKCkge1xuICB2YXIgX3JlZjtcblxuICByZXR1cm4gWyhfcmVmID0ge1xuICAgIGh0bWw6IHtcbiAgICAgIGxpbmVIZWlnaHQ6ICcxLjE1JyxcbiAgICAgIHRleHRTaXplQWRqdXN0OiAnMTAwJSdcbiAgICB9LFxuICAgIGJvZHk6IHtcbiAgICAgIG1hcmdpbjogJzAnXG4gICAgfSxcbiAgICBtYWluOiB7XG4gICAgICBkaXNwbGF5OiAnYmxvY2snXG4gICAgfSxcbiAgICBoMToge1xuICAgICAgZm9udFNpemU6ICcyZW0nLFxuICAgICAgbWFyZ2luOiAnMC42N2VtIDAnXG4gICAgfSxcbiAgICBocjoge1xuICAgICAgYm94U2l6aW5nOiAnY29udGVudC1ib3gnLFxuICAgICAgaGVpZ2h0OiAnMCcsXG4gICAgICBvdmVyZmxvdzogJ3Zpc2libGUnXG4gICAgfSxcbiAgICBwcmU6IHtcbiAgICAgIGZvbnRGYW1pbHk6ICdtb25vc3BhY2UsIG1vbm9zcGFjZScsXG4gICAgICBmb250U2l6ZTogJzFlbSdcbiAgICB9LFxuICAgIGE6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgIH0sXG4gICAgJ2FiYnJbdGl0bGVdJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiAnbm9uZScsXG4gICAgICB0ZXh0RGVjb3JhdGlvbjogJ3VuZGVybGluZSdcbiAgICB9XG4gIH0sIF9yZWZbXCJiLFxcbiAgICBzdHJvbmdcIl0gPSB7XG4gICAgZm9udFdlaWdodDogJ2JvbGRlcidcbiAgfSwgX3JlZltcImNvZGUsXFxuICAgIGtiZCxcXG4gICAgc2FtcFwiXSA9IHtcbiAgICBmb250RmFtaWx5OiAnbW9ub3NwYWNlLCBtb25vc3BhY2UnLFxuICAgIGZvbnRTaXplOiAnMWVtJ1xuICB9LCBfcmVmLnNtYWxsID0ge1xuICAgIGZvbnRTaXplOiAnODAlJ1xuICB9LCBfcmVmW1wic3ViLFxcbiAgICBzdXBcIl0gPSB7XG4gICAgZm9udFNpemU6ICc3NSUnLFxuICAgIGxpbmVIZWlnaHQ6ICcwJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnYmFzZWxpbmUnXG4gIH0sIF9yZWYuc3ViID0ge1xuICAgIGJvdHRvbTogJy0wLjI1ZW0nXG4gIH0sIF9yZWYuc3VwID0ge1xuICAgIHRvcDogJy0wLjVlbSdcbiAgfSwgX3JlZi5pbWcgPSB7XG4gICAgYm9yZGVyU3R5bGU6ICdub25lJ1xuICB9LCBfcmVmW1wiYnV0dG9uLFxcbiAgICBpbnB1dCxcXG4gICAgb3B0Z3JvdXAsXFxuICAgIHNlbGVjdCxcXG4gICAgdGV4dGFyZWFcIl0gPSB7XG4gICAgZm9udEZhbWlseTogJ2luaGVyaXQnLFxuICAgIGZvbnRTaXplOiAnMTAwJScsXG4gICAgbGluZUhlaWdodDogJzEuMTUnLFxuICAgIG1hcmdpbjogJzAnXG4gIH0sIF9yZWZbXCJidXR0b24sXFxuICAgIGlucHV0XCJdID0ge1xuICAgIG92ZXJmbG93OiAndmlzaWJsZSdcbiAgfSwgX3JlZltcImJ1dHRvbixcXG4gICAgc2VsZWN0XCJdID0ge1xuICAgIHRleHRUcmFuc2Zvcm06ICdub25lJ1xuICB9LCBfcmVmW1wiYnV0dG9uLFxcbiAgICBodG1sIFt0eXBlPVxcXCJidXR0b25cXFwiXSxcXG4gICAgW3R5cGU9XFxcInJlc2V0XFxcIl0sXFxuICAgIFt0eXBlPVxcXCJzdWJtaXRcXFwiXVwiXSA9IHtcbiAgICBXZWJraXRBcHBlYXJhbmNlOiAnYnV0dG9uJ1xuICB9LCBfcmVmW1wiYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxcbiAgICBbdHlwZT1cXFwiYnV0dG9uXFxcIl06Oi1tb3otZm9jdXMtaW5uZXIsXFxuICAgIFt0eXBlPVxcXCJyZXNldFxcXCJdOjotbW96LWZvY3VzLWlubmVyLFxcbiAgICBbdHlwZT1cXFwic3VibWl0XFxcIl06Oi1tb3otZm9jdXMtaW5uZXJcIl0gPSB7XG4gICAgYm9yZGVyU3R5bGU6ICdub25lJyxcbiAgICBwYWRkaW5nOiAnMCdcbiAgfSwgX3JlZltcImJ1dHRvbjotbW96LWZvY3VzcmluZyxcXG4gICAgW3R5cGU9XFxcImJ1dHRvblxcXCJdOi1tb3otZm9jdXNyaW5nLFxcbiAgICBbdHlwZT1cXFwicmVzZXRcXFwiXTotbW96LWZvY3VzcmluZyxcXG4gICAgW3R5cGU9XFxcInN1Ym1pdFxcXCJdOi1tb3otZm9jdXNyaW5nXCJdID0ge1xuICAgIG91dGxpbmU6ICcxcHggZG90dGVkIEJ1dHRvblRleHQnXG4gIH0sIF9yZWYuZmllbGRzZXQgPSB7XG4gICAgcGFkZGluZzogJzAuMzVlbSAwLjYyNWVtIDAuNzVlbSdcbiAgfSwgX3JlZi5sZWdlbmQgPSB7XG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgY29sb3I6ICdpbmhlcml0JyxcbiAgICBkaXNwbGF5OiAndGFibGUnLFxuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgcGFkZGluZzogJzAnLFxuICAgIHdoaXRlU3BhY2U6ICdub3JtYWwnXG4gIH0sIF9yZWYucHJvZ3Jlc3MgPSB7XG4gICAgdmVydGljYWxBbGlnbjogJ2Jhc2VsaW5lJ1xuICB9LCBfcmVmLnRleHRhcmVhID0ge1xuICAgIG92ZXJmbG93OiAnYXV0bydcbiAgfSwgX3JlZltcIlt0eXBlPVxcXCJjaGVja2JveFxcXCJdLFxcbiAgICBbdHlwZT1cXFwicmFkaW9cXFwiXVwiXSA9IHtcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICBwYWRkaW5nOiAnMCdcbiAgfSwgX3JlZltcIlt0eXBlPVxcXCJudW1iZXJcXFwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcXG4gICAgW3R5cGU9XFxcIm51bWJlclxcXCJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uXCJdID0ge1xuICAgIGhlaWdodDogJ2F1dG8nXG4gIH0sIF9yZWZbJ1t0eXBlPVwic2VhcmNoXCJdJ10gPSB7XG4gICAgV2Via2l0QXBwZWFyYW5jZTogJ3RleHRmaWVsZCcsXG4gICAgb3V0bGluZU9mZnNldDogJy0ycHgnXG4gIH0sIF9yZWZbJ1t0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uJ10gPSB7XG4gICAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnXG4gIH0sIF9yZWZbJzo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24nXSA9IHtcbiAgICBXZWJraXRBcHBlYXJhbmNlOiAnYnV0dG9uJyxcbiAgICBmb250OiAnaW5oZXJpdCdcbiAgfSwgX3JlZi5kZXRhaWxzID0ge1xuICAgIGRpc3BsYXk6ICdibG9jaydcbiAgfSwgX3JlZi5zdW1tYXJ5ID0ge1xuICAgIGRpc3BsYXk6ICdsaXN0LWl0ZW0nXG4gIH0sIF9yZWYudGVtcGxhdGUgPSB7XG4gICAgZGlzcGxheTogJ25vbmUnXG4gIH0sIF9yZWZbJ1toaWRkZW5dJ10gPSB7XG4gICAgZGlzcGxheTogJ25vbmUnXG4gIH0sIF9yZWYpLCB7XG4gICAgJ2FiYnJbdGl0bGVdJzoge1xuICAgICAgdGV4dERlY29yYXRpb246ICd1bmRlcmxpbmUgZG90dGVkJ1xuICAgIH1cbiAgfV07XG59XG5cbnZhciBfdGVtcGxhdGVPYmplY3Q7XG5cbi8qKlxuICogQ1NTIGZvciBkZWNsYXJpbmcgYSByYWRpYWwgZ3JhZGllbnQsIGluY2x1ZGluZyBhIGZhbGxiYWNrIGJhY2tncm91bmQtY29sb3IuIFRoZSBmYWxsYmFjayBpcyBlaXRoZXIgdGhlIGZpcnN0IGNvbG9yLXN0b3Agb3IgYW4gZXhwbGljaXRseSBwYXNzZWQgZmFsbGJhY2sgY29sb3IuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgLi4ucmFkaWFsR3JhZGllbnQoe1xuICogICAgIGNvbG9yU3RvcHM6IFsnIzAwRkZGRiAwJScsICdyZ2JhKDAsIDAsIDI1NSwgMCkgNTAlJywgJyMwMDAwRkYgOTUlJ10sXG4gKiAgICAgZXh0ZW50OiAnZmFydGhlc3QtY29ybmVyIGF0IDQ1cHggNDVweCcsXG4gKiAgICAgcG9zaXRpb246ICdjZW50ZXInLFxuICogICAgIHNoYXBlOiAnZWxsaXBzZScsXG4gKiAgIH0pXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgICR7cmFkaWFsR3JhZGllbnQoe1xuICogICAgIGNvbG9yU3RvcHM6IFsnIzAwRkZGRiAwJScsICdyZ2JhKDAsIDAsIDI1NSwgMCkgNTAlJywgJyMwMDAwRkYgOTUlJ10sXG4gKiAgICAgZXh0ZW50OiAnZmFydGhlc3QtY29ybmVyIGF0IDQ1cHggNDVweCcsXG4gKiAgICAgcG9zaXRpb246ICdjZW50ZXInLFxuICogICAgIHNoYXBlOiAnZWxsaXBzZScsXG4gKiAgIH0pfVxuICpgXG4gKlxuICogLy8gQ1NTIGFzIEpTIE91dHB1dFxuICpcbiAqIGRpdjoge1xuICogICAnYmFja2dyb3VuZENvbG9yJzogJyMwMEZGRkYnLFxuICogICAnYmFja2dyb3VuZEltYWdlJzogJ3JhZGlhbC1ncmFkaWVudChjZW50ZXIgZWxsaXBzZSBmYXJ0aGVzdC1jb3JuZXIgYXQgNDVweCA0NXB4LCAjMDBGRkZGIDAlLCByZ2JhKDAsIDAsIDI1NSwgMCkgNTAlLCAjMDAwMEZGIDk1JSknLFxuICogfVxuICovXG5mdW5jdGlvbiByYWRpYWxHcmFkaWVudChfcmVmKSB7XG4gIHZhciBjb2xvclN0b3BzID0gX3JlZi5jb2xvclN0b3BzLFxuICAgICAgX3JlZiRleHRlbnQgPSBfcmVmLmV4dGVudCxcbiAgICAgIGV4dGVudCA9IF9yZWYkZXh0ZW50ID09PSB2b2lkIDAgPyAnJyA6IF9yZWYkZXh0ZW50LFxuICAgICAgZmFsbGJhY2sgPSBfcmVmLmZhbGxiYWNrLFxuICAgICAgX3JlZiRwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgICBwb3NpdGlvbiA9IF9yZWYkcG9zaXRpb24gPT09IHZvaWQgMCA/ICcnIDogX3JlZiRwb3NpdGlvbixcbiAgICAgIF9yZWYkc2hhcGUgPSBfcmVmLnNoYXBlLFxuICAgICAgc2hhcGUgPSBfcmVmJHNoYXBlID09PSB2b2lkIDAgPyAnJyA6IF9yZWYkc2hhcGU7XG5cbiAgaWYgKCFjb2xvclN0b3BzIHx8IGNvbG9yU3RvcHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDU3KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBmYWxsYmFjayB8fCBjb2xvclN0b3BzWzBdLnNwbGl0KCcgJylbMF0sXG4gICAgYmFja2dyb3VuZEltYWdlOiBjb25zdHJ1Y3RHcmFkaWVudFZhbHVlKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbExvb3NlKFtcInJhZGlhbC1ncmFkaWVudChcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCIpXCJdKSksIHBvc2l0aW9uLCBzaGFwZSwgZXh0ZW50LCBjb2xvclN0b3BzLmpvaW4oJywgJykpXG4gIH07XG59XG5cbi8qKlxuICogQSBoZWxwZXIgdG8gZ2VuZXJhdGUgYSByZXRpbmEgYmFja2dyb3VuZCBpbWFnZSBhbmQgbm9uLXJldGluYVxuICogYmFja2dyb3VuZCBpbWFnZS4gVGhlIHJldGluYSBiYWNrZ3JvdW5kIGltYWdlIHdpbGwgb3V0cHV0IHRvIGEgSGlEUEkgbWVkaWEgcXVlcnkuIFRoZSBtaXhpbiB1c2VzXG4gKiBhIF8yeC5wbmcgZmlsZW5hbWUgc3VmZml4IGJ5IGRlZmF1bHQuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAuLi5yZXRpbmFJbWFnZSgnbXktaW1nJylcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgJHtyZXRpbmFJbWFnZSgnbXktaW1nJyl9XG4gKiBgXG4gKlxuICogLy8gQ1NTIGFzIEpTIE91dHB1dFxuICogZGl2IHtcbiAqICAgYmFja2dyb3VuZEltYWdlOiAndXJsKG15LWltZy5wbmcpJyxcbiAqICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMS4zKSxcbiAqICAgIG9ubHkgc2NyZWVuIGFuZCAobWluLS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvOiAxLjMpLFxuICogICAgb25seSBzY3JlZW4gYW5kICgtby1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAxLjMvMSksXG4gKiAgICBvbmx5IHNjcmVlbiBhbmQgKG1pbi1yZXNvbHV0aW9uOiAxNDRkcGkpLFxuICogICAgb25seSBzY3JlZW4gYW5kIChtaW4tcmVzb2x1dGlvbjogMS41ZHBweCknOiB7XG4gKiAgICAgYmFja2dyb3VuZEltYWdlOiAndXJsKG15LWltZ18yeC5wbmcpJyxcbiAqICAgfVxuICogfVxuICovXG5mdW5jdGlvbiByZXRpbmFJbWFnZShmaWxlbmFtZSwgYmFja2dyb3VuZFNpemUsIGV4dGVuc2lvbiwgcmV0aW5hRmlsZW5hbWUsIHJldGluYVN1ZmZpeCkge1xuICB2YXIgX3JlZjtcblxuICBpZiAoZXh0ZW5zaW9uID09PSB2b2lkIDApIHtcbiAgICBleHRlbnNpb24gPSAncG5nJztcbiAgfVxuXG4gIGlmIChyZXRpbmFTdWZmaXggPT09IHZvaWQgMCkge1xuICAgIHJldGluYVN1ZmZpeCA9ICdfMngnO1xuICB9XG5cbiAgaWYgKCFmaWxlbmFtZSkge1xuICAgIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDU4KTtcbiAgfSAvLyBSZXBsYWNlIHRoZSBkb3QgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFzc2VkIGV4dGVuc2lvbiBpZiBvbmUgZXhpc3RzXG5cblxuICB2YXIgZXh0ID0gZXh0ZW5zaW9uLnJlcGxhY2UoL15cXC4vLCAnJyk7XG4gIHZhciByRmlsZW5hbWUgPSByZXRpbmFGaWxlbmFtZSA/IHJldGluYUZpbGVuYW1lICsgXCIuXCIgKyBleHQgOiBcIlwiICsgZmlsZW5hbWUgKyByZXRpbmFTdWZmaXggKyBcIi5cIiArIGV4dDtcbiAgcmV0dXJuIF9yZWYgPSB7XG4gICAgYmFja2dyb3VuZEltYWdlOiBcInVybChcIiArIGZpbGVuYW1lICsgXCIuXCIgKyBleHQgKyBcIilcIlxuICB9LCBfcmVmW2hpRFBJKCldID0gX2V4dGVuZHMoe1xuICAgIGJhY2tncm91bmRJbWFnZTogXCJ1cmwoXCIgKyByRmlsZW5hbWUgKyBcIilcIlxuICB9LCBiYWNrZ3JvdW5kU2l6ZSA/IHtcbiAgICBiYWNrZ3JvdW5kU2l6ZTogYmFja2dyb3VuZFNpemVcbiAgfSA6IHt9KSwgX3JlZjtcbn1cblxuLyogZXNsaW50LWRpc2FibGUga2V5LXNwYWNpbmcgKi9cbnZhciBmdW5jdGlvbnNNYXAgPSB7XG4gIGVhc2VJbkJhY2s6ICdjdWJpYy1iZXppZXIoMC42MDAsIC0wLjI4MCwgMC43MzUsIDAuMDQ1KScsXG4gIGVhc2VJbkNpcmM6ICdjdWJpYy1iZXppZXIoMC42MDAsICAwLjA0MCwgMC45ODAsIDAuMzM1KScsXG4gIGVhc2VJbkN1YmljOiAnY3ViaWMtYmV6aWVyKDAuNTUwLCAgMC4wNTUsIDAuNjc1LCAwLjE5MCknLFxuICBlYXNlSW5FeHBvOiAnY3ViaWMtYmV6aWVyKDAuOTUwLCAgMC4wNTAsIDAuNzk1LCAwLjAzNSknLFxuICBlYXNlSW5RdWFkOiAnY3ViaWMtYmV6aWVyKDAuNTUwLCAgMC4wODUsIDAuNjgwLCAwLjUzMCknLFxuICBlYXNlSW5RdWFydDogJ2N1YmljLWJlemllcigwLjg5NSwgIDAuMDMwLCAwLjY4NSwgMC4yMjApJyxcbiAgZWFzZUluUXVpbnQ6ICdjdWJpYy1iZXppZXIoMC43NTUsICAwLjA1MCwgMC44NTUsIDAuMDYwKScsXG4gIGVhc2VJblNpbmU6ICdjdWJpYy1iZXppZXIoMC40NzAsICAwLjAwMCwgMC43NDUsIDAuNzE1KScsXG4gIGVhc2VPdXRCYWNrOiAnY3ViaWMtYmV6aWVyKDAuMTc1LCAgMC44ODUsIDAuMzIwLCAxLjI3NSknLFxuICBlYXNlT3V0Q3ViaWM6ICdjdWJpYy1iZXppZXIoMC4yMTUsICAwLjYxMCwgMC4zNTUsIDEuMDAwKScsXG4gIGVhc2VPdXRDaXJjOiAnY3ViaWMtYmV6aWVyKDAuMDc1LCAgMC44MjAsIDAuMTY1LCAxLjAwMCknLFxuICBlYXNlT3V0RXhwbzogJ2N1YmljLWJlemllcigwLjE5MCwgIDEuMDAwLCAwLjIyMCwgMS4wMDApJyxcbiAgZWFzZU91dFF1YWQ6ICdjdWJpYy1iZXppZXIoMC4yNTAsICAwLjQ2MCwgMC40NTAsIDAuOTQwKScsXG4gIGVhc2VPdXRRdWFydDogJ2N1YmljLWJlemllcigwLjE2NSwgIDAuODQwLCAwLjQ0MCwgMS4wMDApJyxcbiAgZWFzZU91dFF1aW50OiAnY3ViaWMtYmV6aWVyKDAuMjMwLCAgMS4wMDAsIDAuMzIwLCAxLjAwMCknLFxuICBlYXNlT3V0U2luZTogJ2N1YmljLWJlemllcigwLjM5MCwgIDAuNTc1LCAwLjU2NSwgMS4wMDApJyxcbiAgZWFzZUluT3V0QmFjazogJ2N1YmljLWJlemllcigwLjY4MCwgLTAuNTUwLCAwLjI2NSwgMS41NTApJyxcbiAgZWFzZUluT3V0Q2lyYzogJ2N1YmljLWJlemllcigwLjc4NSwgIDAuMTM1LCAwLjE1MCwgMC44NjApJyxcbiAgZWFzZUluT3V0Q3ViaWM6ICdjdWJpYy1iZXppZXIoMC42NDUsICAwLjA0NSwgMC4zNTUsIDEuMDAwKScsXG4gIGVhc2VJbk91dEV4cG86ICdjdWJpYy1iZXppZXIoMS4wMDAsICAwLjAwMCwgMC4wMDAsIDEuMDAwKScsXG4gIGVhc2VJbk91dFF1YWQ6ICdjdWJpYy1iZXppZXIoMC40NTUsICAwLjAzMCwgMC41MTUsIDAuOTU1KScsXG4gIGVhc2VJbk91dFF1YXJ0OiAnY3ViaWMtYmV6aWVyKDAuNzcwLCAgMC4wMDAsIDAuMTc1LCAxLjAwMCknLFxuICBlYXNlSW5PdXRRdWludDogJ2N1YmljLWJlemllcigwLjg2MCwgIDAuMDAwLCAwLjA3MCwgMS4wMDApJyxcbiAgZWFzZUluT3V0U2luZTogJ2N1YmljLWJlemllcigwLjQ0NSwgIDAuMDUwLCAwLjU1MCwgMC45NTApJ1xufTtcbi8qIGVzbGludC1lbmFibGUga2V5LXNwYWNpbmcgKi9cblxuZnVuY3Rpb24gZ2V0VGltaW5nRnVuY3Rpb24oZnVuY3Rpb25OYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbnNNYXBbZnVuY3Rpb25OYW1lXTtcbn1cbi8qKlxuICogU3RyaW5nIHRvIHJlcHJlc2VudCBjb21tb24gZWFzaW5nIGZ1bmN0aW9ucyBhcyBkZW1vbnN0cmF0ZWQgaGVyZTogKGdpdGh1Yi5jb20vamF1a2lhL2Vhc2llKS5cbiAqXG4gKiBAZGVwcmVjYXRlZCAtIFRoaXMgd2lsbCBiZSBkZXByZWNhdGVkIGluIHY1IGluIGZhdm9yIG9mIGBlYXNlSW5gLCBgZWFzZU91dGAsIGBlYXNlSW5PdXRgLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgICd0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24nOiB0aW1pbmdGdW5jdGlvbnMoJ2Vhc2VJblF1YWQnKVxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiAgY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOiAke3RpbWluZ0Z1bmN0aW9ucygnZWFzZUluUXVhZCcpfTtcbiAqIGBcbiAqXG4gKiAvLyBDU1MgYXMgSlMgT3V0cHV0XG4gKlxuICogJ2Rpdic6IHtcbiAqICAgJ3RyYW5zaXRpb25UaW1pbmdGdW5jdGlvbic6ICdjdWJpYy1iZXppZXIoMC41NTAsICAwLjA4NSwgMC42ODAsIDAuNTMwKScsXG4gKiB9XG4gKi9cblxuXG5mdW5jdGlvbiB0aW1pbmdGdW5jdGlvbnModGltaW5nRnVuY3Rpb24pIHtcbiAgcmV0dXJuIGdldFRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uKTtcbn1cblxudmFyIGdldEJvcmRlcldpZHRoID0gZnVuY3Rpb24gZ2V0Qm9yZGVyV2lkdGgocG9pbnRpbmdEaXJlY3Rpb24sIGhlaWdodCwgd2lkdGgpIHtcbiAgdmFyIGZ1bGxXaWR0aCA9IFwiXCIgKyB3aWR0aFswXSArICh3aWR0aFsxXSB8fCAnJyk7XG4gIHZhciBoYWxmV2lkdGggPSBcIlwiICsgd2lkdGhbMF0gLyAyICsgKHdpZHRoWzFdIHx8ICcnKTtcbiAgdmFyIGZ1bGxIZWlnaHQgPSBcIlwiICsgaGVpZ2h0WzBdICsgKGhlaWdodFsxXSB8fCAnJyk7XG4gIHZhciBoYWxmSGVpZ2h0ID0gXCJcIiArIGhlaWdodFswXSAvIDIgKyAoaGVpZ2h0WzFdIHx8ICcnKTtcblxuICBzd2l0Y2ggKHBvaW50aW5nRGlyZWN0aW9uKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIHJldHVybiBcIjAgXCIgKyBoYWxmV2lkdGggKyBcIiBcIiArIGZ1bGxIZWlnaHQgKyBcIiBcIiArIGhhbGZXaWR0aDtcblxuICAgIGNhc2UgJ3RvcExlZnQnOlxuICAgICAgcmV0dXJuIGZ1bGxXaWR0aCArIFwiIFwiICsgZnVsbEhlaWdodCArIFwiIDAgMFwiO1xuXG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICByZXR1cm4gaGFsZkhlaWdodCArIFwiIFwiICsgZnVsbFdpZHRoICsgXCIgXCIgKyBoYWxmSGVpZ2h0ICsgXCIgMFwiO1xuXG4gICAgY2FzZSAnYm90dG9tTGVmdCc6XG4gICAgICByZXR1cm4gZnVsbFdpZHRoICsgXCIgMCAwIFwiICsgZnVsbEhlaWdodDtcblxuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICByZXR1cm4gZnVsbEhlaWdodCArIFwiIFwiICsgaGFsZldpZHRoICsgXCIgMCBcIiArIGhhbGZXaWR0aDtcblxuICAgIGNhc2UgJ2JvdHRvbVJpZ2h0JzpcbiAgICAgIHJldHVybiBcIjAgMCBcIiArIGZ1bGxXaWR0aCArIFwiIFwiICsgZnVsbEhlaWdodDtcblxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBoYWxmSGVpZ2h0ICsgXCIgMCBcIiArIGhhbGZIZWlnaHQgKyBcIiBcIiArIGZ1bGxXaWR0aDtcblxuICAgIGNhc2UgJ3RvcFJpZ2h0JzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiMCBcIiArIGZ1bGxXaWR0aCArIFwiIFwiICsgZnVsbEhlaWdodCArIFwiIDBcIjtcbiAgfVxufTtcblxudmFyIGdldEJvcmRlckNvbG9yID0gZnVuY3Rpb24gZ2V0Qm9yZGVyQ29sb3IocG9pbnRpbmdEaXJlY3Rpb24sIGZvcmVncm91bmRDb2xvcikge1xuICBzd2l0Y2ggKHBvaW50aW5nRGlyZWN0aW9uKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICdib3R0b21SaWdodCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBib3JkZXJCb3R0b21Db2xvcjogZm9yZWdyb3VuZENvbG9yXG4gICAgICB9O1xuXG4gICAgY2FzZSAncmlnaHQnOlxuICAgIGNhc2UgJ2JvdHRvbUxlZnQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9yZGVyTGVmdENvbG9yOiBmb3JlZ3JvdW5kQ29sb3JcbiAgICAgIH07XG5cbiAgICBjYXNlICdib3R0b20nOlxuICAgIGNhc2UgJ3RvcExlZnQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9yZGVyVG9wQ29sb3I6IGZvcmVncm91bmRDb2xvclxuICAgICAgfTtcblxuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3RvcFJpZ2h0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvcmRlclJpZ2h0Q29sb3I6IGZvcmVncm91bmRDb2xvclxuICAgICAgfTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig1OSk7XG4gIH1cbn07XG4vKipcbiAqIENTUyB0byByZXByZXNlbnQgdHJpYW5nbGUgd2l0aCBhbnkgcG9pbnRpbmcgZGlyZWN0aW9uIHdpdGggYW4gb3B0aW9uYWwgYmFja2dyb3VuZCBjb2xvci5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICpcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgLi4udHJpYW5nbGUoeyBwb2ludGluZ0RpcmVjdGlvbjogJ3JpZ2h0Jywgd2lkdGg6ICcxMDBweCcsIGhlaWdodDogJzEwMHB4JywgZm9yZWdyb3VuZENvbG9yOiAncmVkJyB9KVxuICogfVxuICpcbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgJHt0cmlhbmdsZSh7IHBvaW50aW5nRGlyZWN0aW9uOiAncmlnaHQnLCB3aWR0aDogJzEwMHB4JywgaGVpZ2h0OiAnMTAwcHgnLCBmb3JlZ3JvdW5kQ29sb3I6ICdyZWQnIH0pfVxuICpcbiAqXG4gKiAvLyBDU1MgYXMgSlMgT3V0cHV0XG4gKlxuICogZGl2OiB7XG4gKiAgJ2JvcmRlckNvbG9yJzogJ3RyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHJlZCcsXG4gKiAgJ2JvcmRlclN0eWxlJzogJ3NvbGlkJyxcbiAqICAnYm9yZGVyV2lkdGgnOiAnNTBweCAwIDUwcHggMTAwcHgnLFxuICogICdoZWlnaHQnOiAnMCcsXG4gKiAgJ3dpZHRoJzogJzAnLFxuICogfVxuICovXG5cblxuZnVuY3Rpb24gdHJpYW5nbGUoX3JlZikge1xuICB2YXIgcG9pbnRpbmdEaXJlY3Rpb24gPSBfcmVmLnBvaW50aW5nRGlyZWN0aW9uLFxuICAgICAgaGVpZ2h0ID0gX3JlZi5oZWlnaHQsXG4gICAgICB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICBmb3JlZ3JvdW5kQ29sb3IgPSBfcmVmLmZvcmVncm91bmRDb2xvcixcbiAgICAgIF9yZWYkYmFja2dyb3VuZENvbG9yID0gX3JlZi5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBfcmVmJGJhY2tncm91bmRDb2xvciA9PT0gdm9pZCAwID8gJ3RyYW5zcGFyZW50JyA6IF9yZWYkYmFja2dyb3VuZENvbG9yO1xuICB2YXIgd2lkdGhBbmRVbml0ID0gZ2V0VmFsdWVBbmRVbml0KHdpZHRoKTtcbiAgdmFyIGhlaWdodEFuZFVuaXQgPSBnZXRWYWx1ZUFuZFVuaXQoaGVpZ2h0KTtcblxuICBpZiAoaXNOYU4oaGVpZ2h0QW5kVW5pdFswXSkgfHwgaXNOYU4od2lkdGhBbmRVbml0WzBdKSkge1xuICAgIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDYwKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6ICcwJyxcbiAgICBoZWlnaHQ6ICcwJyxcbiAgICBib3JkZXJDb2xvcjogYmFja2dyb3VuZENvbG9yXG4gIH0sIGdldEJvcmRlckNvbG9yKHBvaW50aW5nRGlyZWN0aW9uLCBmb3JlZ3JvdW5kQ29sb3IpLCB7XG4gICAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyV2lkdGg6IGdldEJvcmRlcldpZHRoKHBvaW50aW5nRGlyZWN0aW9uLCBoZWlnaHRBbmRVbml0LCB3aWR0aEFuZFVuaXQpXG4gIH0pO1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIGFuIGVhc3kgd2F5IHRvIGNoYW5nZSB0aGUgYHdvcmRXcmFwYCBwcm9wZXJ0eS5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICAuLi53b3JkV3JhcCgnYnJlYWstd29yZCcpXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgICR7d29yZFdyYXAoJ2JyZWFrLXdvcmQnKX1cbiAqIGBcbiAqXG4gKiAvLyBDU1MgYXMgSlMgT3V0cHV0XG4gKlxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICBvdmVyZmxvd1dyYXA6ICdicmVhay13b3JkJyxcbiAqICAgd29yZFdyYXA6ICdicmVhay13b3JkJyxcbiAqICAgd29yZEJyZWFrOiAnYnJlYWstYWxsJyxcbiAqIH1cbiAqL1xuZnVuY3Rpb24gd29yZFdyYXAod3JhcCkge1xuICBpZiAod3JhcCA9PT0gdm9pZCAwKSB7XG4gICAgd3JhcCA9ICdicmVhay13b3JkJztcbiAgfVxuXG4gIHZhciB3b3JkQnJlYWsgPSB3cmFwID09PSAnYnJlYWstd29yZCcgPyAnYnJlYWstYWxsJyA6IHdyYXA7XG4gIHJldHVybiB7XG4gICAgb3ZlcmZsb3dXcmFwOiB3cmFwLFxuICAgIHdvcmRXcmFwOiB3cmFwLFxuICAgIHdvcmRCcmVhazogd29yZEJyZWFrXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbG9yVG9JbnQoY29sb3IpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQoY29sb3IgKiAyNTUpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0VG9JbnQocmVkLCBncmVlbiwgYmx1ZSkge1xuICByZXR1cm4gY29sb3JUb0ludChyZWQpICsgXCIsXCIgKyBjb2xvclRvSW50KGdyZWVuKSArIFwiLFwiICsgY29sb3JUb0ludChibHVlKTtcbn1cblxuZnVuY3Rpb24gaHNsVG9SZ2IoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGNvbnZlcnQpIHtcbiAgaWYgKGNvbnZlcnQgPT09IHZvaWQgMCkge1xuICAgIGNvbnZlcnQgPSBjb252ZXJ0VG9JbnQ7XG4gIH1cblxuICBpZiAoc2F0dXJhdGlvbiA9PT0gMCkge1xuICAgIC8vIGFjaHJvbWF0aWNcbiAgICByZXR1cm4gY29udmVydChsaWdodG5lc3MsIGxpZ2h0bmVzcywgbGlnaHRuZXNzKTtcbiAgfSAvLyBmb3JtdWxhZSBmcm9tIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hTTF9hbmRfSFNWXG5cblxuICB2YXIgaHVlUHJpbWUgPSAoaHVlICUgMzYwICsgMzYwKSAlIDM2MCAvIDYwO1xuICB2YXIgY2hyb21hID0gKDEgLSBNYXRoLmFicygyICogbGlnaHRuZXNzIC0gMSkpICogc2F0dXJhdGlvbjtcbiAgdmFyIHNlY29uZENvbXBvbmVudCA9IGNocm9tYSAqICgxIC0gTWF0aC5hYnMoaHVlUHJpbWUgJSAyIC0gMSkpO1xuICB2YXIgcmVkID0gMDtcbiAgdmFyIGdyZWVuID0gMDtcbiAgdmFyIGJsdWUgPSAwO1xuXG4gIGlmIChodWVQcmltZSA+PSAwICYmIGh1ZVByaW1lIDwgMSkge1xuICAgIHJlZCA9IGNocm9tYTtcbiAgICBncmVlbiA9IHNlY29uZENvbXBvbmVudDtcbiAgfSBlbHNlIGlmIChodWVQcmltZSA+PSAxICYmIGh1ZVByaW1lIDwgMikge1xuICAgIHJlZCA9IHNlY29uZENvbXBvbmVudDtcbiAgICBncmVlbiA9IGNocm9tYTtcbiAgfSBlbHNlIGlmIChodWVQcmltZSA+PSAyICYmIGh1ZVByaW1lIDwgMykge1xuICAgIGdyZWVuID0gY2hyb21hO1xuICAgIGJsdWUgPSBzZWNvbmRDb21wb25lbnQ7XG4gIH0gZWxzZSBpZiAoaHVlUHJpbWUgPj0gMyAmJiBodWVQcmltZSA8IDQpIHtcbiAgICBncmVlbiA9IHNlY29uZENvbXBvbmVudDtcbiAgICBibHVlID0gY2hyb21hO1xuICB9IGVsc2UgaWYgKGh1ZVByaW1lID49IDQgJiYgaHVlUHJpbWUgPCA1KSB7XG4gICAgcmVkID0gc2Vjb25kQ29tcG9uZW50O1xuICAgIGJsdWUgPSBjaHJvbWE7XG4gIH0gZWxzZSBpZiAoaHVlUHJpbWUgPj0gNSAmJiBodWVQcmltZSA8IDYpIHtcbiAgICByZWQgPSBjaHJvbWE7XG4gICAgYmx1ZSA9IHNlY29uZENvbXBvbmVudDtcbiAgfVxuXG4gIHZhciBsaWdodG5lc3NNb2RpZmljYXRpb24gPSBsaWdodG5lc3MgLSBjaHJvbWEgLyAyO1xuICB2YXIgZmluYWxSZWQgPSByZWQgKyBsaWdodG5lc3NNb2RpZmljYXRpb247XG4gIHZhciBmaW5hbEdyZWVuID0gZ3JlZW4gKyBsaWdodG5lc3NNb2RpZmljYXRpb247XG4gIHZhciBmaW5hbEJsdWUgPSBibHVlICsgbGlnaHRuZXNzTW9kaWZpY2F0aW9uO1xuICByZXR1cm4gY29udmVydChmaW5hbFJlZCwgZmluYWxHcmVlbiwgZmluYWxCbHVlKTtcbn1cblxudmFyIG5hbWVkQ29sb3JNYXAgPSB7XG4gIGFsaWNlYmx1ZTogJ2YwZjhmZicsXG4gIGFudGlxdWV3aGl0ZTogJ2ZhZWJkNycsXG4gIGFxdWE6ICcwMGZmZmYnLFxuICBhcXVhbWFyaW5lOiAnN2ZmZmQ0JyxcbiAgYXp1cmU6ICdmMGZmZmYnLFxuICBiZWlnZTogJ2Y1ZjVkYycsXG4gIGJpc3F1ZTogJ2ZmZTRjNCcsXG4gIGJsYWNrOiAnMDAwJyxcbiAgYmxhbmNoZWRhbG1vbmQ6ICdmZmViY2QnLFxuICBibHVlOiAnMDAwMGZmJyxcbiAgYmx1ZXZpb2xldDogJzhhMmJlMicsXG4gIGJyb3duOiAnYTUyYTJhJyxcbiAgYnVybHl3b29kOiAnZGViODg3JyxcbiAgY2FkZXRibHVlOiAnNWY5ZWEwJyxcbiAgY2hhcnRyZXVzZTogJzdmZmYwMCcsXG4gIGNob2NvbGF0ZTogJ2QyNjkxZScsXG4gIGNvcmFsOiAnZmY3ZjUwJyxcbiAgY29ybmZsb3dlcmJsdWU6ICc2NDk1ZWQnLFxuICBjb3Juc2lsazogJ2ZmZjhkYycsXG4gIGNyaW1zb246ICdkYzE0M2MnLFxuICBjeWFuOiAnMDBmZmZmJyxcbiAgZGFya2JsdWU6ICcwMDAwOGInLFxuICBkYXJrY3lhbjogJzAwOGI4YicsXG4gIGRhcmtnb2xkZW5yb2Q6ICdiODg2MGInLFxuICBkYXJrZ3JheTogJ2E5YTlhOScsXG4gIGRhcmtncmVlbjogJzAwNjQwMCcsXG4gIGRhcmtncmV5OiAnYTlhOWE5JyxcbiAgZGFya2toYWtpOiAnYmRiNzZiJyxcbiAgZGFya21hZ2VudGE6ICc4YjAwOGInLFxuICBkYXJrb2xpdmVncmVlbjogJzU1NmIyZicsXG4gIGRhcmtvcmFuZ2U6ICdmZjhjMDAnLFxuICBkYXJrb3JjaGlkOiAnOTkzMmNjJyxcbiAgZGFya3JlZDogJzhiMDAwMCcsXG4gIGRhcmtzYWxtb246ICdlOTk2N2EnLFxuICBkYXJrc2VhZ3JlZW46ICc4ZmJjOGYnLFxuICBkYXJrc2xhdGVibHVlOiAnNDgzZDhiJyxcbiAgZGFya3NsYXRlZ3JheTogJzJmNGY0ZicsXG4gIGRhcmtzbGF0ZWdyZXk6ICcyZjRmNGYnLFxuICBkYXJrdHVycXVvaXNlOiAnMDBjZWQxJyxcbiAgZGFya3Zpb2xldDogJzk0MDBkMycsXG4gIGRlZXBwaW5rOiAnZmYxNDkzJyxcbiAgZGVlcHNreWJsdWU6ICcwMGJmZmYnLFxuICBkaW1ncmF5OiAnNjk2OTY5JyxcbiAgZGltZ3JleTogJzY5Njk2OScsXG4gIGRvZGdlcmJsdWU6ICcxZTkwZmYnLFxuICBmaXJlYnJpY2s6ICdiMjIyMjInLFxuICBmbG9yYWx3aGl0ZTogJ2ZmZmFmMCcsXG4gIGZvcmVzdGdyZWVuOiAnMjI4YjIyJyxcbiAgZnVjaHNpYTogJ2ZmMDBmZicsXG4gIGdhaW5zYm9ybzogJ2RjZGNkYycsXG4gIGdob3N0d2hpdGU6ICdmOGY4ZmYnLFxuICBnb2xkOiAnZmZkNzAwJyxcbiAgZ29sZGVucm9kOiAnZGFhNTIwJyxcbiAgZ3JheTogJzgwODA4MCcsXG4gIGdyZWVuOiAnMDA4MDAwJyxcbiAgZ3JlZW55ZWxsb3c6ICdhZGZmMmYnLFxuICBncmV5OiAnODA4MDgwJyxcbiAgaG9uZXlkZXc6ICdmMGZmZjAnLFxuICBob3RwaW5rOiAnZmY2OWI0JyxcbiAgaW5kaWFucmVkOiAnY2Q1YzVjJyxcbiAgaW5kaWdvOiAnNGIwMDgyJyxcbiAgaXZvcnk6ICdmZmZmZjAnLFxuICBraGFraTogJ2YwZTY4YycsXG4gIGxhdmVuZGVyOiAnZTZlNmZhJyxcbiAgbGF2ZW5kZXJibHVzaDogJ2ZmZjBmNScsXG4gIGxhd25ncmVlbjogJzdjZmMwMCcsXG4gIGxlbW9uY2hpZmZvbjogJ2ZmZmFjZCcsXG4gIGxpZ2h0Ymx1ZTogJ2FkZDhlNicsXG4gIGxpZ2h0Y29yYWw6ICdmMDgwODAnLFxuICBsaWdodGN5YW46ICdlMGZmZmYnLFxuICBsaWdodGdvbGRlbnJvZHllbGxvdzogJ2ZhZmFkMicsXG4gIGxpZ2h0Z3JheTogJ2QzZDNkMycsXG4gIGxpZ2h0Z3JlZW46ICc5MGVlOTAnLFxuICBsaWdodGdyZXk6ICdkM2QzZDMnLFxuICBsaWdodHBpbms6ICdmZmI2YzEnLFxuICBsaWdodHNhbG1vbjogJ2ZmYTA3YScsXG4gIGxpZ2h0c2VhZ3JlZW46ICcyMGIyYWEnLFxuICBsaWdodHNreWJsdWU6ICc4N2NlZmEnLFxuICBsaWdodHNsYXRlZ3JheTogJzc4OScsXG4gIGxpZ2h0c2xhdGVncmV5OiAnNzg5JyxcbiAgbGlnaHRzdGVlbGJsdWU6ICdiMGM0ZGUnLFxuICBsaWdodHllbGxvdzogJ2ZmZmZlMCcsXG4gIGxpbWU6ICcwZjAnLFxuICBsaW1lZ3JlZW46ICczMmNkMzInLFxuICBsaW5lbjogJ2ZhZjBlNicsXG4gIG1hZ2VudGE6ICdmMGYnLFxuICBtYXJvb246ICc4MDAwMDAnLFxuICBtZWRpdW1hcXVhbWFyaW5lOiAnNjZjZGFhJyxcbiAgbWVkaXVtYmx1ZTogJzAwMDBjZCcsXG4gIG1lZGl1bW9yY2hpZDogJ2JhNTVkMycsXG4gIG1lZGl1bXB1cnBsZTogJzkzNzBkYicsXG4gIG1lZGl1bXNlYWdyZWVuOiAnM2NiMzcxJyxcbiAgbWVkaXVtc2xhdGVibHVlOiAnN2I2OGVlJyxcbiAgbWVkaXVtc3ByaW5nZ3JlZW46ICcwMGZhOWEnLFxuICBtZWRpdW10dXJxdW9pc2U6ICc0OGQxY2MnLFxuICBtZWRpdW12aW9sZXRyZWQ6ICdjNzE1ODUnLFxuICBtaWRuaWdodGJsdWU6ICcxOTE5NzAnLFxuICBtaW50Y3JlYW06ICdmNWZmZmEnLFxuICBtaXN0eXJvc2U6ICdmZmU0ZTEnLFxuICBtb2NjYXNpbjogJ2ZmZTRiNScsXG4gIG5hdmFqb3doaXRlOiAnZmZkZWFkJyxcbiAgbmF2eTogJzAwMDA4MCcsXG4gIG9sZGxhY2U6ICdmZGY1ZTYnLFxuICBvbGl2ZTogJzgwODAwMCcsXG4gIG9saXZlZHJhYjogJzZiOGUyMycsXG4gIG9yYW5nZTogJ2ZmYTUwMCcsXG4gIG9yYW5nZXJlZDogJ2ZmNDUwMCcsXG4gIG9yY2hpZDogJ2RhNzBkNicsXG4gIHBhbGVnb2xkZW5yb2Q6ICdlZWU4YWEnLFxuICBwYWxlZ3JlZW46ICc5OGZiOTgnLFxuICBwYWxldHVycXVvaXNlOiAnYWZlZWVlJyxcbiAgcGFsZXZpb2xldHJlZDogJ2RiNzA5MycsXG4gIHBhcGF5YXdoaXA6ICdmZmVmZDUnLFxuICBwZWFjaHB1ZmY6ICdmZmRhYjknLFxuICBwZXJ1OiAnY2Q4NTNmJyxcbiAgcGluazogJ2ZmYzBjYicsXG4gIHBsdW06ICdkZGEwZGQnLFxuICBwb3dkZXJibHVlOiAnYjBlMGU2JyxcbiAgcHVycGxlOiAnODAwMDgwJyxcbiAgcmViZWNjYXB1cnBsZTogJzYzOScsXG4gIHJlZDogJ2YwMCcsXG4gIHJvc3licm93bjogJ2JjOGY4ZicsXG4gIHJveWFsYmx1ZTogJzQxNjllMScsXG4gIHNhZGRsZWJyb3duOiAnOGI0NTEzJyxcbiAgc2FsbW9uOiAnZmE4MDcyJyxcbiAgc2FuZHlicm93bjogJ2Y0YTQ2MCcsXG4gIHNlYWdyZWVuOiAnMmU4YjU3JyxcbiAgc2Vhc2hlbGw6ICdmZmY1ZWUnLFxuICBzaWVubmE6ICdhMDUyMmQnLFxuICBzaWx2ZXI6ICdjMGMwYzAnLFxuICBza3libHVlOiAnODdjZWViJyxcbiAgc2xhdGVibHVlOiAnNmE1YWNkJyxcbiAgc2xhdGVncmF5OiAnNzA4MDkwJyxcbiAgc2xhdGVncmV5OiAnNzA4MDkwJyxcbiAgc25vdzogJ2ZmZmFmYScsXG4gIHNwcmluZ2dyZWVuOiAnMDBmZjdmJyxcbiAgc3RlZWxibHVlOiAnNDY4MmI0JyxcbiAgdGFuOiAnZDJiNDhjJyxcbiAgdGVhbDogJzAwODA4MCcsXG4gIHRoaXN0bGU6ICdkOGJmZDgnLFxuICB0b21hdG86ICdmZjYzNDcnLFxuICB0dXJxdW9pc2U6ICc0MGUwZDAnLFxuICB2aW9sZXQ6ICdlZTgyZWUnLFxuICB3aGVhdDogJ2Y1ZGViMycsXG4gIHdoaXRlOiAnZmZmJyxcbiAgd2hpdGVzbW9rZTogJ2Y1ZjVmNScsXG4gIHllbGxvdzogJ2ZmMCcsXG4gIHllbGxvd2dyZWVuOiAnOWFjZDMyJ1xufTtcbi8qKlxuICogQ2hlY2tzIGlmIGEgc3RyaW5nIGlzIGEgQ1NTIG5hbWVkIGNvbG9yIGFuZCByZXR1cm5zIGl0cyBlcXVpdmFsZW50IGhleCB2YWx1ZSwgb3RoZXJ3aXNlIHJldHVybnMgdGhlIG9yaWdpbmFsIGNvbG9yLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBuYW1lVG9IZXgoY29sb3IpIHtcbiAgaWYgKHR5cGVvZiBjb2xvciAhPT0gJ3N0cmluZycpIHJldHVybiBjb2xvcjtcbiAgdmFyIG5vcm1hbGl6ZWRDb2xvck5hbWUgPSBjb2xvci50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbmFtZWRDb2xvck1hcFtub3JtYWxpemVkQ29sb3JOYW1lXSA/IFwiI1wiICsgbmFtZWRDb2xvck1hcFtub3JtYWxpemVkQ29sb3JOYW1lXSA6IGNvbG9yO1xufVxuXG52YXIgaGV4UmVnZXggPSAvXiNbYS1mQS1GMC05XXs2fSQvO1xudmFyIGhleFJnYmFSZWdleCA9IC9eI1thLWZBLUYwLTldezh9JC87XG52YXIgcmVkdWNlZEhleFJlZ2V4ID0gL14jW2EtZkEtRjAtOV17M30kLztcbnZhciByZWR1Y2VkUmdiYUhleFJlZ2V4ID0gL14jW2EtZkEtRjAtOV17NH0kLztcbnZhciByZ2JSZWdleCA9IC9ecmdiXFwoXFxzKihcXGR7MSwzfSlcXHMqKD86LCk/XFxzKihcXGR7MSwzfSlcXHMqKD86LCk/XFxzKihcXGR7MSwzfSlcXHMqXFwpJC9pO1xudmFyIHJnYmFSZWdleCA9IC9ecmdiKD86YSk/XFwoXFxzKihcXGR7MSwzfSlcXHMqKD86LCk/XFxzKihcXGR7MSwzfSlcXHMqKD86LCk/XFxzKihcXGR7MSwzfSlcXHMqKD86LHxcXC8pXFxzKihbLStdP1xcZCpbLl0/XFxkK1slXT8pXFxzKlxcKSQvaTtcbnZhciBoc2xSZWdleCA9IC9eaHNsXFwoXFxzKihcXGR7MCwzfVsuXT9bMC05XSsoPzpkZWcpPylcXHMqKD86LCk/XFxzKihcXGR7MSwzfVsuXT9bMC05XT8pJVxccyooPzosKT9cXHMqKFxcZHsxLDN9Wy5dP1swLTldPyklXFxzKlxcKSQvaTtcbnZhciBoc2xhUmVnZXggPSAvXmhzbCg/OmEpP1xcKFxccyooXFxkezAsM31bLl0/WzAtOV0rKD86ZGVnKT8pXFxzKig/OiwpP1xccyooXFxkezEsM31bLl0/WzAtOV0/KSVcXHMqKD86LCk/XFxzKihcXGR7MSwzfVsuXT9bMC05XT8pJVxccyooPzosfFxcLylcXHMqKFstK10/XFxkKlsuXT9cXGQrWyVdPylcXHMqXFwpJC9pO1xuLyoqXG4gKiBSZXR1cm5zIGFuIFJnYkNvbG9yIG9yIFJnYmFDb2xvciBvYmplY3QuIFRoaXMgdXRpbGl0eSBmdW5jdGlvbiBpcyBvbmx5IHVzZWZ1bFxuICogaWYgd2FudCB0byBleHRyYWN0IGEgY29sb3IgY29tcG9uZW50LiBXaXRoIHRoZSBjb2xvciB1dGlsIGB0b0NvbG9yU3RyaW5nYCB5b3VcbiAqIGNhbiBjb252ZXJ0IGEgUmdiQ29sb3Igb3IgUmdiYUNvbG9yIG9iamVjdCBiYWNrIHRvIGEgc3RyaW5nLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBc3NpZ25zIGB7IHJlZDogMjU1LCBncmVlbjogMCwgYmx1ZTogMCB9YCB0byBjb2xvcjFcbiAqIGNvbnN0IGNvbG9yMSA9IHBhcnNlVG9SZ2IoJ3JnYigyNTUsIDAsIDApJyk7XG4gKiAvLyBBc3NpZ25zIGB7IHJlZDogOTIsIGdyZWVuOiAxMDIsIGJsdWU6IDExMiwgYWxwaGE6IDAuNzUgfWAgdG8gY29sb3IyXG4gKiBjb25zdCBjb2xvcjIgPSBwYXJzZVRvUmdiKCdoc2xhKDIxMCwgMTAlLCA0MCUsIDAuNzUpJyk7XG4gKi9cblxuZnVuY3Rpb24gcGFyc2VUb1JnYihjb2xvcikge1xuICBpZiAodHlwZW9mIGNvbG9yICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDMpO1xuICB9XG5cbiAgdmFyIG5vcm1hbGl6ZWRDb2xvciA9IG5hbWVUb0hleChjb2xvcik7XG5cbiAgaWYgKG5vcm1hbGl6ZWRDb2xvci5tYXRjaChoZXhSZWdleCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVkOiBwYXJzZUludChcIlwiICsgbm9ybWFsaXplZENvbG9yWzFdICsgbm9ybWFsaXplZENvbG9yWzJdLCAxNiksXG4gICAgICBncmVlbjogcGFyc2VJbnQoXCJcIiArIG5vcm1hbGl6ZWRDb2xvclszXSArIG5vcm1hbGl6ZWRDb2xvcls0XSwgMTYpLFxuICAgICAgYmx1ZTogcGFyc2VJbnQoXCJcIiArIG5vcm1hbGl6ZWRDb2xvcls1XSArIG5vcm1hbGl6ZWRDb2xvcls2XSwgMTYpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChub3JtYWxpemVkQ29sb3IubWF0Y2goaGV4UmdiYVJlZ2V4KSkge1xuICAgIHZhciBhbHBoYSA9IHBhcnNlRmxvYXQoKHBhcnNlSW50KFwiXCIgKyBub3JtYWxpemVkQ29sb3JbN10gKyBub3JtYWxpemVkQ29sb3JbOF0sIDE2KSAvIDI1NSkudG9GaXhlZCgyKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZDogcGFyc2VJbnQoXCJcIiArIG5vcm1hbGl6ZWRDb2xvclsxXSArIG5vcm1hbGl6ZWRDb2xvclsyXSwgMTYpLFxuICAgICAgZ3JlZW46IHBhcnNlSW50KFwiXCIgKyBub3JtYWxpemVkQ29sb3JbM10gKyBub3JtYWxpemVkQ29sb3JbNF0sIDE2KSxcbiAgICAgIGJsdWU6IHBhcnNlSW50KFwiXCIgKyBub3JtYWxpemVkQ29sb3JbNV0gKyBub3JtYWxpemVkQ29sb3JbNl0sIDE2KSxcbiAgICAgIGFscGhhOiBhbHBoYVxuICAgIH07XG4gIH1cblxuICBpZiAobm9ybWFsaXplZENvbG9yLm1hdGNoKHJlZHVjZWRIZXhSZWdleCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVkOiBwYXJzZUludChcIlwiICsgbm9ybWFsaXplZENvbG9yWzFdICsgbm9ybWFsaXplZENvbG9yWzFdLCAxNiksXG4gICAgICBncmVlbjogcGFyc2VJbnQoXCJcIiArIG5vcm1hbGl6ZWRDb2xvclsyXSArIG5vcm1hbGl6ZWRDb2xvclsyXSwgMTYpLFxuICAgICAgYmx1ZTogcGFyc2VJbnQoXCJcIiArIG5vcm1hbGl6ZWRDb2xvclszXSArIG5vcm1hbGl6ZWRDb2xvclszXSwgMTYpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChub3JtYWxpemVkQ29sb3IubWF0Y2gocmVkdWNlZFJnYmFIZXhSZWdleCkpIHtcbiAgICB2YXIgX2FscGhhID0gcGFyc2VGbG9hdCgocGFyc2VJbnQoXCJcIiArIG5vcm1hbGl6ZWRDb2xvcls0XSArIG5vcm1hbGl6ZWRDb2xvcls0XSwgMTYpIC8gMjU1KS50b0ZpeGVkKDIpKTtcblxuICAgIHJldHVybiB7XG4gICAgICByZWQ6IHBhcnNlSW50KFwiXCIgKyBub3JtYWxpemVkQ29sb3JbMV0gKyBub3JtYWxpemVkQ29sb3JbMV0sIDE2KSxcbiAgICAgIGdyZWVuOiBwYXJzZUludChcIlwiICsgbm9ybWFsaXplZENvbG9yWzJdICsgbm9ybWFsaXplZENvbG9yWzJdLCAxNiksXG4gICAgICBibHVlOiBwYXJzZUludChcIlwiICsgbm9ybWFsaXplZENvbG9yWzNdICsgbm9ybWFsaXplZENvbG9yWzNdLCAxNiksXG4gICAgICBhbHBoYTogX2FscGhhXG4gICAgfTtcbiAgfVxuXG4gIHZhciByZ2JNYXRjaGVkID0gcmdiUmVnZXguZXhlYyhub3JtYWxpemVkQ29sb3IpO1xuXG4gIGlmIChyZ2JNYXRjaGVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZDogcGFyc2VJbnQoXCJcIiArIHJnYk1hdGNoZWRbMV0sIDEwKSxcbiAgICAgIGdyZWVuOiBwYXJzZUludChcIlwiICsgcmdiTWF0Y2hlZFsyXSwgMTApLFxuICAgICAgYmx1ZTogcGFyc2VJbnQoXCJcIiArIHJnYk1hdGNoZWRbM10sIDEwKVxuICAgIH07XG4gIH1cblxuICB2YXIgcmdiYU1hdGNoZWQgPSByZ2JhUmVnZXguZXhlYyhub3JtYWxpemVkQ29sb3Iuc3Vic3RyaW5nKDAsIDUwKSk7XG5cbiAgaWYgKHJnYmFNYXRjaGVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZDogcGFyc2VJbnQoXCJcIiArIHJnYmFNYXRjaGVkWzFdLCAxMCksXG4gICAgICBncmVlbjogcGFyc2VJbnQoXCJcIiArIHJnYmFNYXRjaGVkWzJdLCAxMCksXG4gICAgICBibHVlOiBwYXJzZUludChcIlwiICsgcmdiYU1hdGNoZWRbM10sIDEwKSxcbiAgICAgIGFscGhhOiBwYXJzZUZsb2F0KFwiXCIgKyByZ2JhTWF0Y2hlZFs0XSkgPiAxID8gcGFyc2VGbG9hdChcIlwiICsgcmdiYU1hdGNoZWRbNF0pIC8gMTAwIDogcGFyc2VGbG9hdChcIlwiICsgcmdiYU1hdGNoZWRbNF0pXG4gICAgfTtcbiAgfVxuXG4gIHZhciBoc2xNYXRjaGVkID0gaHNsUmVnZXguZXhlYyhub3JtYWxpemVkQ29sb3IpO1xuXG4gIGlmIChoc2xNYXRjaGVkKSB7XG4gICAgdmFyIGh1ZSA9IHBhcnNlSW50KFwiXCIgKyBoc2xNYXRjaGVkWzFdLCAxMCk7XG4gICAgdmFyIHNhdHVyYXRpb24gPSBwYXJzZUludChcIlwiICsgaHNsTWF0Y2hlZFsyXSwgMTApIC8gMTAwO1xuICAgIHZhciBsaWdodG5lc3MgPSBwYXJzZUludChcIlwiICsgaHNsTWF0Y2hlZFszXSwgMTApIC8gMTAwO1xuICAgIHZhciByZ2JDb2xvclN0cmluZyA9IFwicmdiKFwiICsgaHNsVG9SZ2IoaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MpICsgXCIpXCI7XG4gICAgdmFyIGhzbFJnYk1hdGNoZWQgPSByZ2JSZWdleC5leGVjKHJnYkNvbG9yU3RyaW5nKTtcblxuICAgIGlmICghaHNsUmdiTWF0Y2hlZCkge1xuICAgICAgdGhyb3cgbmV3IFBvbGlzaGVkRXJyb3IoNCwgbm9ybWFsaXplZENvbG9yLCByZ2JDb2xvclN0cmluZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZDogcGFyc2VJbnQoXCJcIiArIGhzbFJnYk1hdGNoZWRbMV0sIDEwKSxcbiAgICAgIGdyZWVuOiBwYXJzZUludChcIlwiICsgaHNsUmdiTWF0Y2hlZFsyXSwgMTApLFxuICAgICAgYmx1ZTogcGFyc2VJbnQoXCJcIiArIGhzbFJnYk1hdGNoZWRbM10sIDEwKVxuICAgIH07XG4gIH1cblxuICB2YXIgaHNsYU1hdGNoZWQgPSBoc2xhUmVnZXguZXhlYyhub3JtYWxpemVkQ29sb3Iuc3Vic3RyaW5nKDAsIDUwKSk7XG5cbiAgaWYgKGhzbGFNYXRjaGVkKSB7XG4gICAgdmFyIF9odWUgPSBwYXJzZUludChcIlwiICsgaHNsYU1hdGNoZWRbMV0sIDEwKTtcblxuICAgIHZhciBfc2F0dXJhdGlvbiA9IHBhcnNlSW50KFwiXCIgKyBoc2xhTWF0Y2hlZFsyXSwgMTApIC8gMTAwO1xuXG4gICAgdmFyIF9saWdodG5lc3MgPSBwYXJzZUludChcIlwiICsgaHNsYU1hdGNoZWRbM10sIDEwKSAvIDEwMDtcblxuICAgIHZhciBfcmdiQ29sb3JTdHJpbmcgPSBcInJnYihcIiArIGhzbFRvUmdiKF9odWUsIF9zYXR1cmF0aW9uLCBfbGlnaHRuZXNzKSArIFwiKVwiO1xuXG4gICAgdmFyIF9oc2xSZ2JNYXRjaGVkID0gcmdiUmVnZXguZXhlYyhfcmdiQ29sb3JTdHJpbmcpO1xuXG4gICAgaWYgKCFfaHNsUmdiTWF0Y2hlZCkge1xuICAgICAgdGhyb3cgbmV3IFBvbGlzaGVkRXJyb3IoNCwgbm9ybWFsaXplZENvbG9yLCBfcmdiQ29sb3JTdHJpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZWQ6IHBhcnNlSW50KFwiXCIgKyBfaHNsUmdiTWF0Y2hlZFsxXSwgMTApLFxuICAgICAgZ3JlZW46IHBhcnNlSW50KFwiXCIgKyBfaHNsUmdiTWF0Y2hlZFsyXSwgMTApLFxuICAgICAgYmx1ZTogcGFyc2VJbnQoXCJcIiArIF9oc2xSZ2JNYXRjaGVkWzNdLCAxMCksXG4gICAgICBhbHBoYTogcGFyc2VGbG9hdChcIlwiICsgaHNsYU1hdGNoZWRbNF0pID4gMSA/IHBhcnNlRmxvYXQoXCJcIiArIGhzbGFNYXRjaGVkWzRdKSAvIDEwMCA6IHBhcnNlRmxvYXQoXCJcIiArIGhzbGFNYXRjaGVkWzRdKVxuICAgIH07XG4gIH1cblxuICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig1KTtcbn1cblxuZnVuY3Rpb24gcmdiVG9Ic2woY29sb3IpIHtcbiAgLy8gbWFrZSBzdXJlIHJnYiBhcmUgY29udGFpbmVkIGluIGEgc2V0IG9mIFswLCAyNTVdXG4gIHZhciByZWQgPSBjb2xvci5yZWQgLyAyNTU7XG4gIHZhciBncmVlbiA9IGNvbG9yLmdyZWVuIC8gMjU1O1xuICB2YXIgYmx1ZSA9IGNvbG9yLmJsdWUgLyAyNTU7XG4gIHZhciBtYXggPSBNYXRoLm1heChyZWQsIGdyZWVuLCBibHVlKTtcbiAgdmFyIG1pbiA9IE1hdGgubWluKHJlZCwgZ3JlZW4sIGJsdWUpO1xuICB2YXIgbGlnaHRuZXNzID0gKG1heCArIG1pbikgLyAyO1xuXG4gIGlmIChtYXggPT09IG1pbikge1xuICAgIC8vIGFjaHJvbWF0aWNcbiAgICBpZiAoY29sb3IuYWxwaGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHVlOiAwLFxuICAgICAgICBzYXR1cmF0aW9uOiAwLFxuICAgICAgICBsaWdodG5lc3M6IGxpZ2h0bmVzcyxcbiAgICAgICAgYWxwaGE6IGNvbG9yLmFscGhhXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBodWU6IDAsXG4gICAgICAgIHNhdHVyYXRpb246IDAsXG4gICAgICAgIGxpZ2h0bmVzczogbGlnaHRuZXNzXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBodWU7XG4gIHZhciBkZWx0YSA9IG1heCAtIG1pbjtcbiAgdmFyIHNhdHVyYXRpb24gPSBsaWdodG5lc3MgPiAwLjUgPyBkZWx0YSAvICgyIC0gbWF4IC0gbWluKSA6IGRlbHRhIC8gKG1heCArIG1pbik7XG5cbiAgc3dpdGNoIChtYXgpIHtcbiAgICBjYXNlIHJlZDpcbiAgICAgIGh1ZSA9IChncmVlbiAtIGJsdWUpIC8gZGVsdGEgKyAoZ3JlZW4gPCBibHVlID8gNiA6IDApO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGdyZWVuOlxuICAgICAgaHVlID0gKGJsdWUgLSByZWQpIC8gZGVsdGEgKyAyO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gYmx1ZSBjYXNlXG4gICAgICBodWUgPSAocmVkIC0gZ3JlZW4pIC8gZGVsdGEgKyA0O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBodWUgKj0gNjA7XG5cbiAgaWYgKGNvbG9yLmFscGhhICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaHVlOiBodWUsXG4gICAgICBzYXR1cmF0aW9uOiBzYXR1cmF0aW9uLFxuICAgICAgbGlnaHRuZXNzOiBsaWdodG5lc3MsXG4gICAgICBhbHBoYTogY29sb3IuYWxwaGFcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBodWU6IGh1ZSxcbiAgICBzYXR1cmF0aW9uOiBzYXR1cmF0aW9uLFxuICAgIGxpZ2h0bmVzczogbGlnaHRuZXNzXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBIc2xDb2xvciBvciBIc2xhQ29sb3Igb2JqZWN0LiBUaGlzIHV0aWxpdHkgZnVuY3Rpb24gaXMgb25seSB1c2VmdWxcbiAqIGlmIHdhbnQgdG8gZXh0cmFjdCBhIGNvbG9yIGNvbXBvbmVudC4gV2l0aCB0aGUgY29sb3IgdXRpbCBgdG9Db2xvclN0cmluZ2AgeW91XG4gKiBjYW4gY29udmVydCBhIEhzbENvbG9yIG9yIEhzbGFDb2xvciBvYmplY3QgYmFjayB0byBhIHN0cmluZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXNzaWducyBgeyBodWU6IDAsIHNhdHVyYXRpb246IDEsIGxpZ2h0bmVzczogMC41IH1gIHRvIGNvbG9yMVxuICogY29uc3QgY29sb3IxID0gcGFyc2VUb0hzbCgncmdiKDI1NSwgMCwgMCknKTtcbiAqIC8vIEFzc2lnbnMgYHsgaHVlOiAxMjgsIHNhdHVyYXRpb246IDEsIGxpZ2h0bmVzczogMC41LCBhbHBoYTogMC43NSB9YCB0byBjb2xvcjJcbiAqIGNvbnN0IGNvbG9yMiA9IHBhcnNlVG9Ic2woJ2hzbGEoMTI4LCAxMDAlLCA1MCUsIDAuNzUpJyk7XG4gKi9cbmZ1bmN0aW9uIHBhcnNlVG9Ic2woY29sb3IpIHtcbiAgLy8gTm90ZTogQXQgYSBsYXRlciBzdGFnZSB3ZSBjYW4gb3B0aW1pemUgdGhpcyBmdW5jdGlvbiBhcyByaWdodCBub3cgYSBoc2xcbiAgLy8gY29sb3Igd291bGQgYmUgcGFyc2VkIGNvbnZlcnRlZCB0byByZ2IgdmFsdWVzIGFuZCBjb252ZXJ0ZWQgYmFjayB0byBoc2wuXG4gIHJldHVybiByZ2JUb0hzbChwYXJzZVRvUmdiKGNvbG9yKSk7XG59XG5cbi8qKlxuICogUmVkdWNlcyBoZXggdmFsdWVzIGlmIHBvc3NpYmxlIGUuZy4gI2ZmODg2NiB0byAjZjg2XG4gKiBAcHJpdmF0ZVxuICovXG52YXIgcmVkdWNlSGV4VmFsdWUgPSBmdW5jdGlvbiByZWR1Y2VIZXhWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUubGVuZ3RoID09PSA3ICYmIHZhbHVlWzFdID09PSB2YWx1ZVsyXSAmJiB2YWx1ZVszXSA9PT0gdmFsdWVbNF0gJiYgdmFsdWVbNV0gPT09IHZhbHVlWzZdKSB7XG4gICAgcmV0dXJuIFwiI1wiICsgdmFsdWVbMV0gKyB2YWx1ZVszXSArIHZhbHVlWzVdO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxudmFyIHJlZHVjZUhleFZhbHVlJDEgPSByZWR1Y2VIZXhWYWx1ZTtcblxuZnVuY3Rpb24gbnVtYmVyVG9IZXgodmFsdWUpIHtcbiAgdmFyIGhleCA9IHZhbHVlLnRvU3RyaW5nKDE2KTtcbiAgcmV0dXJuIGhleC5sZW5ndGggPT09IDEgPyBcIjBcIiArIGhleCA6IGhleDtcbn1cblxuZnVuY3Rpb24gY29sb3JUb0hleChjb2xvcikge1xuICByZXR1cm4gbnVtYmVyVG9IZXgoTWF0aC5yb3VuZChjb2xvciAqIDI1NSkpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0VG9IZXgocmVkLCBncmVlbiwgYmx1ZSkge1xuICByZXR1cm4gcmVkdWNlSGV4VmFsdWUkMShcIiNcIiArIGNvbG9yVG9IZXgocmVkKSArIGNvbG9yVG9IZXgoZ3JlZW4pICsgY29sb3JUb0hleChibHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhzbFRvSGV4KGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzKSB7XG4gIHJldHVybiBoc2xUb1JnYihodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgY29udmVydFRvSGV4KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHZhbHVlIGZvciB0aGUgY29sb3IuIFRoZSByZXR1cm5lZCByZXN1bHQgaXMgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGhleCBub3RhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICBiYWNrZ3JvdW5kOiBoc2woMzU5LCAwLjc1LCAwLjQpLFxuICogICBiYWNrZ3JvdW5kOiBoc2woeyBodWU6IDM2MCwgc2F0dXJhdGlvbjogMC43NSwgbGlnaHRuZXNzOiAwLjQgfSksXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgIGJhY2tncm91bmQ6ICR7aHNsKDM1OSwgMC43NSwgMC40KX07XG4gKiAgIGJhY2tncm91bmQ6ICR7aHNsKHsgaHVlOiAzNjAsIHNhdHVyYXRpb246IDAuNzUsIGxpZ2h0bmVzczogMC40IH0pfTtcbiAqIGBcbiAqXG4gKiAvLyBDU1MgaW4gSlMgT3V0cHV0XG4gKlxuICogZWxlbWVudCB7XG4gKiAgIGJhY2tncm91bmQ6IFwiI2IzMTkxY1wiO1xuICogICBiYWNrZ3JvdW5kOiBcIiNiMzE5MWNcIjtcbiAqIH1cbiAqL1xuZnVuY3Rpb24gaHNsKHZhbHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHNhdHVyYXRpb24gPT09ICdudW1iZXInICYmIHR5cGVvZiBsaWdodG5lc3MgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGhzbFRvSGV4KHZhbHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgc2F0dXJhdGlvbiA9PT0gdW5kZWZpbmVkICYmIGxpZ2h0bmVzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGhzbFRvSGV4KHZhbHVlLmh1ZSwgdmFsdWUuc2F0dXJhdGlvbiwgdmFsdWUubGlnaHRuZXNzKTtcbiAgfVxuXG4gIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDEpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgdmFsdWUgZm9yIHRoZSBjb2xvci4gVGhlIHJldHVybmVkIHJlc3VsdCBpcyB0aGUgc21hbGxlc3QgcG9zc2libGUgcmdiYSBvciBoZXggbm90YXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgYmFja2dyb3VuZDogaHNsYSgzNTksIDAuNzUsIDAuNCwgMC43KSxcbiAqICAgYmFja2dyb3VuZDogaHNsYSh7IGh1ZTogMzYwLCBzYXR1cmF0aW9uOiAwLjc1LCBsaWdodG5lc3M6IDAuNCwgYWxwaGE6IDAsNyB9KSxcbiAqICAgYmFja2dyb3VuZDogaHNsYSgzNTksIDAuNzUsIDAuNCwgMSksXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgIGJhY2tncm91bmQ6ICR7aHNsYSgzNTksIDAuNzUsIDAuNCwgMC43KX07XG4gKiAgIGJhY2tncm91bmQ6ICR7aHNsYSh7IGh1ZTogMzYwLCBzYXR1cmF0aW9uOiAwLjc1LCBsaWdodG5lc3M6IDAuNCwgYWxwaGE6IDAsNyB9KX07XG4gKiAgIGJhY2tncm91bmQ6ICR7aHNsYSgzNTksIDAuNzUsIDAuNCwgMSl9O1xuICogYFxuICpcbiAqIC8vIENTUyBpbiBKUyBPdXRwdXRcbiAqXG4gKiBlbGVtZW50IHtcbiAqICAgYmFja2dyb3VuZDogXCJyZ2JhKDE3OSwyNSwyOCwwLjcpXCI7XG4gKiAgIGJhY2tncm91bmQ6IFwicmdiYSgxNzksMjUsMjgsMC43KVwiO1xuICogICBiYWNrZ3JvdW5kOiBcIiNiMzE5MWNcIjtcbiAqIH1cbiAqL1xuZnVuY3Rpb24gaHNsYSh2YWx1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB0eXBlb2Ygc2F0dXJhdGlvbiA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGxpZ2h0bmVzcyA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGFscGhhID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBhbHBoYSA+PSAxID8gaHNsVG9IZXgodmFsdWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcykgOiBcInJnYmEoXCIgKyBoc2xUb1JnYih2YWx1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzKSArIFwiLFwiICsgYWxwaGEgKyBcIilcIjtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHNhdHVyYXRpb24gPT09IHVuZGVmaW5lZCAmJiBsaWdodG5lc3MgPT09IHVuZGVmaW5lZCAmJiBhbHBoYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHZhbHVlLmFscGhhID49IDEgPyBoc2xUb0hleCh2YWx1ZS5odWUsIHZhbHVlLnNhdHVyYXRpb24sIHZhbHVlLmxpZ2h0bmVzcykgOiBcInJnYmEoXCIgKyBoc2xUb1JnYih2YWx1ZS5odWUsIHZhbHVlLnNhdHVyYXRpb24sIHZhbHVlLmxpZ2h0bmVzcykgKyBcIixcIiArIHZhbHVlLmFscGhhICsgXCIpXCI7XG4gIH1cblxuICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcigyKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHZhbHVlIGZvciB0aGUgY29sb3IuIFRoZSByZXR1cm5lZCByZXN1bHQgaXMgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGhleCBub3RhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICBiYWNrZ3JvdW5kOiByZ2IoMjU1LCAyMDUsIDEwMCksXG4gKiAgIGJhY2tncm91bmQ6IHJnYih7IHJlZDogMjU1LCBncmVlbjogMjA1LCBibHVlOiAxMDAgfSksXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgIGJhY2tncm91bmQ6ICR7cmdiKDI1NSwgMjA1LCAxMDApfTtcbiAqICAgYmFja2dyb3VuZDogJHtyZ2IoeyByZWQ6IDI1NSwgZ3JlZW46IDIwNSwgYmx1ZTogMTAwIH0pfTtcbiAqIGBcbiAqXG4gKiAvLyBDU1MgaW4gSlMgT3V0cHV0XG4gKlxuICogZWxlbWVudCB7XG4gKiAgIGJhY2tncm91bmQ6IFwiI2ZmY2Q2NFwiO1xuICogICBiYWNrZ3JvdW5kOiBcIiNmZmNkNjRcIjtcbiAqIH1cbiAqL1xuZnVuY3Rpb24gcmdiKHZhbHVlLCBncmVlbiwgYmx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgZ3JlZW4gPT09ICdudW1iZXInICYmIHR5cGVvZiBibHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiByZWR1Y2VIZXhWYWx1ZSQxKFwiI1wiICsgbnVtYmVyVG9IZXgodmFsdWUpICsgbnVtYmVyVG9IZXgoZ3JlZW4pICsgbnVtYmVyVG9IZXgoYmx1ZSkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgZ3JlZW4gPT09IHVuZGVmaW5lZCAmJiBibHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcmVkdWNlSGV4VmFsdWUkMShcIiNcIiArIG51bWJlclRvSGV4KHZhbHVlLnJlZCkgKyBudW1iZXJUb0hleCh2YWx1ZS5ncmVlbikgKyBudW1iZXJUb0hleCh2YWx1ZS5ibHVlKSk7XG4gIH1cblxuICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig2KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHZhbHVlIGZvciB0aGUgY29sb3IuIFRoZSByZXR1cm5lZCByZXN1bHQgaXMgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHJnYmEgb3IgaGV4IG5vdGF0aW9uLlxuICpcbiAqIENhbiBhbHNvIGJlIHVzZWQgdG8gZmFkZSBhIGNvbG9yIGJ5IHBhc3NpbmcgYSBoZXggdmFsdWUgb3IgbmFtZWQgQ1NTIGNvbG9yIGFsb25nIHdpdGggYW4gYWxwaGEgdmFsdWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDIwNSwgMTAwLCAwLjcpLFxuICogICBiYWNrZ3JvdW5kOiByZ2JhKHsgcmVkOiAyNTUsIGdyZWVuOiAyMDUsIGJsdWU6IDEwMCwgYWxwaGE6IDAuNyB9KSxcbiAqICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDIwNSwgMTAwLCAxKSxcbiAqICAgYmFja2dyb3VuZDogcmdiYSgnI2ZmZmZmZicsIDAuNCksXG4gKiAgIGJhY2tncm91bmQ6IHJnYmEoJ2JsYWNrJywgMC43KSxcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgYmFja2dyb3VuZDogJHtyZ2JhKDI1NSwgMjA1LCAxMDAsIDAuNyl9O1xuICogICBiYWNrZ3JvdW5kOiAke3JnYmEoeyByZWQ6IDI1NSwgZ3JlZW46IDIwNSwgYmx1ZTogMTAwLCBhbHBoYTogMC43IH0pfTtcbiAqICAgYmFja2dyb3VuZDogJHtyZ2JhKDI1NSwgMjA1LCAxMDAsIDEpfTtcbiAqICAgYmFja2dyb3VuZDogJHtyZ2JhKCcjZmZmZmZmJywgMC40KX07XG4gKiAgIGJhY2tncm91bmQ6ICR7cmdiYSgnYmxhY2snLCAwLjcpfTtcbiAqIGBcbiAqXG4gKiAvLyBDU1MgaW4gSlMgT3V0cHV0XG4gKlxuICogZWxlbWVudCB7XG4gKiAgIGJhY2tncm91bmQ6IFwicmdiYSgyNTUsMjA1LDEwMCwwLjcpXCI7XG4gKiAgIGJhY2tncm91bmQ6IFwicmdiYSgyNTUsMjA1LDEwMCwwLjcpXCI7XG4gKiAgIGJhY2tncm91bmQ6IFwiI2ZmY2Q2NFwiO1xuICogICBiYWNrZ3JvdW5kOiBcInJnYmEoMjU1LDI1NSwyNTUsMC40KVwiO1xuICogICBiYWNrZ3JvdW5kOiBcInJnYmEoMCwwLDAsMC43KVwiO1xuICogfVxuICovXG5mdW5jdGlvbiByZ2JhKGZpcnN0VmFsdWUsIHNlY29uZFZhbHVlLCB0aGlyZFZhbHVlLCBmb3VydGhWYWx1ZSkge1xuICBpZiAodHlwZW9mIGZpcnN0VmFsdWUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBzZWNvbmRWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB2YXIgcmdiVmFsdWUgPSBwYXJzZVRvUmdiKGZpcnN0VmFsdWUpO1xuICAgIHJldHVybiBcInJnYmEoXCIgKyByZ2JWYWx1ZS5yZWQgKyBcIixcIiArIHJnYlZhbHVlLmdyZWVuICsgXCIsXCIgKyByZ2JWYWx1ZS5ibHVlICsgXCIsXCIgKyBzZWNvbmRWYWx1ZSArIFwiKVwiO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBmaXJzdFZhbHVlID09PSAnbnVtYmVyJyAmJiB0eXBlb2Ygc2Vjb25kVmFsdWUgPT09ICdudW1iZXInICYmIHR5cGVvZiB0aGlyZFZhbHVlID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgZm91cnRoVmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZvdXJ0aFZhbHVlID49IDEgPyByZ2IoZmlyc3RWYWx1ZSwgc2Vjb25kVmFsdWUsIHRoaXJkVmFsdWUpIDogXCJyZ2JhKFwiICsgZmlyc3RWYWx1ZSArIFwiLFwiICsgc2Vjb25kVmFsdWUgKyBcIixcIiArIHRoaXJkVmFsdWUgKyBcIixcIiArIGZvdXJ0aFZhbHVlICsgXCIpXCI7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGZpcnN0VmFsdWUgPT09ICdvYmplY3QnICYmIHNlY29uZFZhbHVlID09PSB1bmRlZmluZWQgJiYgdGhpcmRWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIGZvdXJ0aFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmlyc3RWYWx1ZS5hbHBoYSA+PSAxID8gcmdiKGZpcnN0VmFsdWUucmVkLCBmaXJzdFZhbHVlLmdyZWVuLCBmaXJzdFZhbHVlLmJsdWUpIDogXCJyZ2JhKFwiICsgZmlyc3RWYWx1ZS5yZWQgKyBcIixcIiArIGZpcnN0VmFsdWUuZ3JlZW4gKyBcIixcIiArIGZpcnN0VmFsdWUuYmx1ZSArIFwiLFwiICsgZmlyc3RWYWx1ZS5hbHBoYSArIFwiKVwiO1xuICB9XG5cbiAgdGhyb3cgbmV3IFBvbGlzaGVkRXJyb3IoNyk7XG59XG5cbnZhciBpc1JnYiA9IGZ1bmN0aW9uIGlzUmdiKGNvbG9yKSB7XG4gIHJldHVybiB0eXBlb2YgY29sb3IucmVkID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgY29sb3IuZ3JlZW4gPT09ICdudW1iZXInICYmIHR5cGVvZiBjb2xvci5ibHVlID09PSAnbnVtYmVyJyAmJiAodHlwZW9mIGNvbG9yLmFscGhhICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgY29sb3IuYWxwaGEgPT09ICd1bmRlZmluZWQnKTtcbn07XG5cbnZhciBpc1JnYmEgPSBmdW5jdGlvbiBpc1JnYmEoY29sb3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBjb2xvci5yZWQgPT09ICdudW1iZXInICYmIHR5cGVvZiBjb2xvci5ncmVlbiA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGNvbG9yLmJsdWUgPT09ICdudW1iZXInICYmIHR5cGVvZiBjb2xvci5hbHBoYSA9PT0gJ251bWJlcic7XG59O1xuXG52YXIgaXNIc2wgPSBmdW5jdGlvbiBpc0hzbChjb2xvcikge1xuICByZXR1cm4gdHlwZW9mIGNvbG9yLmh1ZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGNvbG9yLnNhdHVyYXRpb24gPT09ICdudW1iZXInICYmIHR5cGVvZiBjb2xvci5saWdodG5lc3MgPT09ICdudW1iZXInICYmICh0eXBlb2YgY29sb3IuYWxwaGEgIT09ICdudW1iZXInIHx8IHR5cGVvZiBjb2xvci5hbHBoYSA9PT0gJ3VuZGVmaW5lZCcpO1xufTtcblxudmFyIGlzSHNsYSA9IGZ1bmN0aW9uIGlzSHNsYShjb2xvcikge1xuICByZXR1cm4gdHlwZW9mIGNvbG9yLmh1ZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGNvbG9yLnNhdHVyYXRpb24gPT09ICdudW1iZXInICYmIHR5cGVvZiBjb2xvci5saWdodG5lc3MgPT09ICdudW1iZXInICYmIHR5cGVvZiBjb2xvci5hbHBoYSA9PT0gJ251bWJlcic7XG59O1xuLyoqXG4gKiBDb252ZXJ0cyBhIFJnYkNvbG9yLCBSZ2JhQ29sb3IsIEhzbENvbG9yIG9yIEhzbGFDb2xvciBvYmplY3QgdG8gYSBjb2xvciBzdHJpbmcuXG4gKiBUaGlzIHV0aWwgaXMgdXNlZnVsIGluIGNhc2UgeW91IG9ubHkga25vdyBvbiBydW50aW1lIHdoaWNoIGNvbG9yIG9iamVjdCBpc1xuICogdXNlZC4gT3RoZXJ3aXNlIHdlIHJlY29tbWVuZCB0byByZWx5IG9uIGByZ2JgLCBgcmdiYWAsIGBoc2xgIG9yIGBoc2xhYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICBiYWNrZ3JvdW5kOiB0b0NvbG9yU3RyaW5nKHsgcmVkOiAyNTUsIGdyZWVuOiAyMDUsIGJsdWU6IDEwMCB9KSxcbiAqICAgYmFja2dyb3VuZDogdG9Db2xvclN0cmluZyh7IHJlZDogMjU1LCBncmVlbjogMjA1LCBibHVlOiAxMDAsIGFscGhhOiAwLjcyIH0pLFxuICogICBiYWNrZ3JvdW5kOiB0b0NvbG9yU3RyaW5nKHsgaHVlOiAyNDAsIHNhdHVyYXRpb246IDEsIGxpZ2h0bmVzczogMC41IH0pLFxuICogICBiYWNrZ3JvdW5kOiB0b0NvbG9yU3RyaW5nKHsgaHVlOiAzNjAsIHNhdHVyYXRpb246IDAuNzUsIGxpZ2h0bmVzczogMC40LCBhbHBoYTogMC43MiB9KSxcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgYmFja2dyb3VuZDogJHt0b0NvbG9yU3RyaW5nKHsgcmVkOiAyNTUsIGdyZWVuOiAyMDUsIGJsdWU6IDEwMCB9KX07XG4gKiAgIGJhY2tncm91bmQ6ICR7dG9Db2xvclN0cmluZyh7IHJlZDogMjU1LCBncmVlbjogMjA1LCBibHVlOiAxMDAsIGFscGhhOiAwLjcyIH0pfTtcbiAqICAgYmFja2dyb3VuZDogJHt0b0NvbG9yU3RyaW5nKHsgaHVlOiAyNDAsIHNhdHVyYXRpb246IDEsIGxpZ2h0bmVzczogMC41IH0pfTtcbiAqICAgYmFja2dyb3VuZDogJHt0b0NvbG9yU3RyaW5nKHsgaHVlOiAzNjAsIHNhdHVyYXRpb246IDAuNzUsIGxpZ2h0bmVzczogMC40LCBhbHBoYTogMC43MiB9KX07XG4gKiBgXG4gKlxuICogLy8gQ1NTIGluIEpTIE91dHB1dFxuICogZWxlbWVudCB7XG4gKiAgIGJhY2tncm91bmQ6IFwiI2ZmY2Q2NFwiO1xuICogICBiYWNrZ3JvdW5kOiBcInJnYmEoMjU1LDIwNSwxMDAsMC43MilcIjtcbiAqICAgYmFja2dyb3VuZDogXCIjMDBmXCI7XG4gKiAgIGJhY2tncm91bmQ6IFwicmdiYSgxNzksMjUsMjUsMC43MilcIjtcbiAqIH1cbiAqL1xuXG5cbmZ1bmN0aW9uIHRvQ29sb3JTdHJpbmcoY29sb3IpIHtcbiAgaWYgKHR5cGVvZiBjb2xvciAhPT0gJ29iamVjdCcpIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDgpO1xuICBpZiAoaXNSZ2JhKGNvbG9yKSkgcmV0dXJuIHJnYmEoY29sb3IpO1xuICBpZiAoaXNSZ2IoY29sb3IpKSByZXR1cm4gcmdiKGNvbG9yKTtcbiAgaWYgKGlzSHNsYShjb2xvcikpIHJldHVybiBoc2xhKGNvbG9yKTtcbiAgaWYgKGlzSHNsKGNvbG9yKSkgcmV0dXJuIGhzbChjb2xvcik7XG4gIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDgpO1xufVxuXG4vLyBUeXBlIGRlZmluaXRpb25zIHRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2djYW50aS9mbG93LXN0YXRpYy1sYW5kL2Jsb2IvbWFzdGVyL3NyYy9GdW4uanNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXG5mdW5jdGlvbiBjdXJyaWVkKGYsIGxlbmd0aCwgYWNjKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmbigpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgdmFyIGNvbWJpbmVkID0gYWNjLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gY29tYmluZWQubGVuZ3RoID49IGxlbmd0aCA/IGYuYXBwbHkodGhpcywgY29tYmluZWQpIDogY3VycmllZChmLCBsZW5ndGgsIGNvbWJpbmVkKTtcbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxuXG5cbmZ1bmN0aW9uIGN1cnJ5KGYpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZWRlY2xhcmVcbiAgcmV0dXJuIGN1cnJpZWQoZiwgZi5sZW5ndGgsIFtdKTtcbn1cblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBodWUgb2YgdGhlIGNvbG9yLiBIdWUgaXMgYSBudW1iZXIgYmV0d2VlbiAwIHRvIDM2MC4gVGhlIGZpcnN0XG4gKiBhcmd1bWVudCBmb3IgYWRqdXN0SHVlIGlzIHRoZSBhbW91bnQgb2YgZGVncmVlcyB0aGUgY29sb3IgaXMgcm90YXRlZCBhcm91bmRcbiAqIHRoZSBjb2xvciB3aGVlbCwgYWx3YXlzIHByb2R1Y2luZyBhIHBvc2l0aXZlIGh1ZSB2YWx1ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICBiYWNrZ3JvdW5kOiBhZGp1c3RIdWUoMTgwLCAnIzQ0OCcpLFxuICogICBiYWNrZ3JvdW5kOiBhZGp1c3RIdWUoJzE4MCcsICdyZ2JhKDEwMSwxMDAsMjA1LDAuNyknKSxcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgYmFja2dyb3VuZDogJHthZGp1c3RIdWUoMTgwLCAnIzQ0OCcpfTtcbiAqICAgYmFja2dyb3VuZDogJHthZGp1c3RIdWUoJzE4MCcsICdyZ2JhKDEwMSwxMDAsMjA1LDAuNyknKX07XG4gKiBgXG4gKlxuICogLy8gQ1NTIGluIEpTIE91dHB1dFxuICogZWxlbWVudCB7XG4gKiAgIGJhY2tncm91bmQ6IFwiIzg4ODg0NFwiO1xuICogICBiYWNrZ3JvdW5kOiBcInJnYmEoMTM2LDEzNiw2OCwwLjcpXCI7XG4gKiB9XG4gKi9cblxuZnVuY3Rpb24gYWRqdXN0SHVlKGRlZ3JlZSwgY29sb3IpIHtcbiAgaWYgKGNvbG9yID09PSAndHJhbnNwYXJlbnQnKSByZXR1cm4gY29sb3I7XG4gIHZhciBoc2xDb2xvciA9IHBhcnNlVG9Ic2woY29sb3IpO1xuICByZXR1cm4gdG9Db2xvclN0cmluZyhfZXh0ZW5kcyh7fSwgaHNsQ29sb3IsIHtcbiAgICBodWU6IGhzbENvbG9yLmh1ZSArIHBhcnNlRmxvYXQoZGVncmVlKVxuICB9KSk7XG59IC8vIHByZXR0aWVyLWlnbm9yZVxuXG5cbnZhciBjdXJyaWVkQWRqdXN0SHVlID0gLyojX19QVVJFX18qL2N1cnJ5XG4vKiA6OjxudW1iZXIgfCBzdHJpbmcsIHN0cmluZywgc3RyaW5nPiAqL1xuKGFkanVzdEh1ZSk7XG52YXIgY3VycmllZEFkanVzdEh1ZSQxID0gY3VycmllZEFkanVzdEh1ZTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb21wbGVtZW50IG9mIHRoZSBwcm92aWRlZCBjb2xvci4gVGhpcyBpcyBpZGVudGljYWwgdG8gYWRqdXN0SHVlKDE4MCwgPGNvbG9yPikuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgYmFja2dyb3VuZDogY29tcGxlbWVudCgnIzQ0OCcpLFxuICogICBiYWNrZ3JvdW5kOiBjb21wbGVtZW50KCdyZ2JhKDIwNCwyMDUsMTAwLDAuNyknKSxcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgYmFja2dyb3VuZDogJHtjb21wbGVtZW50KCcjNDQ4Jyl9O1xuICogICBiYWNrZ3JvdW5kOiAke2NvbXBsZW1lbnQoJ3JnYmEoMjA0LDIwNSwxMDAsMC43KScpfTtcbiAqIGBcbiAqXG4gKiAvLyBDU1MgaW4gSlMgT3V0cHV0XG4gKiBlbGVtZW50IHtcbiAqICAgYmFja2dyb3VuZDogXCIjODg0XCI7XG4gKiAgIGJhY2tncm91bmQ6IFwicmdiYSgxNTMsMTUzLDE1MywwLjcpXCI7XG4gKiB9XG4gKi9cblxuZnVuY3Rpb24gY29tcGxlbWVudChjb2xvcikge1xuICBpZiAoY29sb3IgPT09ICd0cmFuc3BhcmVudCcpIHJldHVybiBjb2xvcjtcbiAgdmFyIGhzbENvbG9yID0gcGFyc2VUb0hzbChjb2xvcik7XG4gIHJldHVybiB0b0NvbG9yU3RyaW5nKF9leHRlbmRzKHt9LCBoc2xDb2xvciwge1xuICAgIGh1ZTogKGhzbENvbG9yLmh1ZSArIDE4MCkgJSAzNjBcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBndWFyZChsb3dlckJvdW5kYXJ5LCB1cHBlckJvdW5kYXJ5LCB2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5tYXgobG93ZXJCb3VuZGFyeSwgTWF0aC5taW4odXBwZXJCb3VuZGFyeSwgdmFsdWUpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHZhbHVlIGZvciB0aGUgZGFya2VuZWQgY29sb3IuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgYmFja2dyb3VuZDogZGFya2VuKDAuMiwgJyNGRkNENjQnKSxcbiAqICAgYmFja2dyb3VuZDogZGFya2VuKCcwLjInLCAncmdiYSgyNTUsMjA1LDEwMCwwLjcpJyksXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgIGJhY2tncm91bmQ6ICR7ZGFya2VuKDAuMiwgJyNGRkNENjQnKX07XG4gKiAgIGJhY2tncm91bmQ6ICR7ZGFya2VuKCcwLjInLCAncmdiYSgyNTUsMjA1LDEwMCwwLjcpJyl9O1xuICogYFxuICpcbiAqIC8vIENTUyBpbiBKUyBPdXRwdXRcbiAqXG4gKiBlbGVtZW50IHtcbiAqICAgYmFja2dyb3VuZDogXCIjZmZiZDMxXCI7XG4gKiAgIGJhY2tncm91bmQ6IFwicmdiYSgyNTUsMTg5LDQ5LDAuNylcIjtcbiAqIH1cbiAqL1xuXG5mdW5jdGlvbiBkYXJrZW4oYW1vdW50LCBjb2xvcikge1xuICBpZiAoY29sb3IgPT09ICd0cmFuc3BhcmVudCcpIHJldHVybiBjb2xvcjtcbiAgdmFyIGhzbENvbG9yID0gcGFyc2VUb0hzbChjb2xvcik7XG4gIHJldHVybiB0b0NvbG9yU3RyaW5nKF9leHRlbmRzKHt9LCBoc2xDb2xvciwge1xuICAgIGxpZ2h0bmVzczogZ3VhcmQoMCwgMSwgaHNsQ29sb3IubGlnaHRuZXNzIC0gcGFyc2VGbG9hdChhbW91bnQpKVxuICB9KSk7XG59IC8vIHByZXR0aWVyLWlnbm9yZVxuXG5cbnZhciBjdXJyaWVkRGFya2VuID0gLyojX19QVVJFX18qL2N1cnJ5XG4vKiA6OjxudW1iZXIgfCBzdHJpbmcsIHN0cmluZywgc3RyaW5nPiAqL1xuKGRhcmtlbik7XG52YXIgY3VycmllZERhcmtlbiQxID0gY3VycmllZERhcmtlbjtcblxuLyoqXG4gKiBEZWNyZWFzZXMgdGhlIGludGVuc2l0eSBvZiBhIGNvbG9yLiBJdHMgcmFuZ2UgaXMgYmV0d2VlbiAwIHRvIDEuIFRoZSBmaXJzdFxuICogYXJndW1lbnQgb2YgdGhlIGRlc2F0dXJhdGUgZnVuY3Rpb24gaXMgdGhlIGFtb3VudCBieSBob3cgbXVjaCB0aGUgY29sb3JcbiAqIGludGVuc2l0eSBzaG91bGQgYmUgZGVjcmVhc2VkLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIGJhY2tncm91bmQ6IGRlc2F0dXJhdGUoMC4yLCAnI0NDQ0Q2NCcpLFxuICogICBiYWNrZ3JvdW5kOiBkZXNhdHVyYXRlKCcwLjInLCAncmdiYSgyMDQsMjA1LDEwMCwwLjcpJyksXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgIGJhY2tncm91bmQ6ICR7ZGVzYXR1cmF0ZSgwLjIsICcjQ0NDRDY0Jyl9O1xuICogICBiYWNrZ3JvdW5kOiAke2Rlc2F0dXJhdGUoJzAuMicsICdyZ2JhKDIwNCwyMDUsMTAwLDAuNyknKX07XG4gKiBgXG4gKlxuICogLy8gQ1NTIGluIEpTIE91dHB1dFxuICogZWxlbWVudCB7XG4gKiAgIGJhY2tncm91bmQ6IFwiI2I4Yjk3OVwiO1xuICogICBiYWNrZ3JvdW5kOiBcInJnYmEoMTg0LDE4NSwxMjEsMC43KVwiO1xuICogfVxuICovXG5cbmZ1bmN0aW9uIGRlc2F0dXJhdGUoYW1vdW50LCBjb2xvcikge1xuICBpZiAoY29sb3IgPT09ICd0cmFuc3BhcmVudCcpIHJldHVybiBjb2xvcjtcbiAgdmFyIGhzbENvbG9yID0gcGFyc2VUb0hzbChjb2xvcik7XG4gIHJldHVybiB0b0NvbG9yU3RyaW5nKF9leHRlbmRzKHt9LCBoc2xDb2xvciwge1xuICAgIHNhdHVyYXRpb246IGd1YXJkKDAsIDEsIGhzbENvbG9yLnNhdHVyYXRpb24gLSBwYXJzZUZsb2F0KGFtb3VudCkpXG4gIH0pKTtcbn0gLy8gcHJldHRpZXItaWdub3JlXG5cblxudmFyIGN1cnJpZWREZXNhdHVyYXRlID0gLyojX19QVVJFX18qL2N1cnJ5XG4vKiA6OjxudW1iZXIgfCBzdHJpbmcsIHN0cmluZywgc3RyaW5nPiAqL1xuKGRlc2F0dXJhdGUpO1xudmFyIGN1cnJpZWREZXNhdHVyYXRlJDEgPSBjdXJyaWVkRGVzYXR1cmF0ZTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgbnVtYmVyIChmbG9hdCkgcmVwcmVzZW50aW5nIHRoZSBsdW1pbmFuY2Ugb2YgYSBjb2xvci5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICBiYWNrZ3JvdW5kOiBnZXRMdW1pbmFuY2UoJyNDQ0NENjQnKSA+PSBnZXRMdW1pbmFuY2UoJyMwMDAwZmYnKSA/ICcjQ0NDRDY0JyA6ICcjMDAwMGZmJyxcbiAqICAgYmFja2dyb3VuZDogZ2V0THVtaW5hbmNlKCdyZ2JhKDU4LCAxMzMsIDI1NSwgMSknKSA+PSBnZXRMdW1pbmFuY2UoJ3JnYmEoMjU1LCA1NywgMTQ5LCAxKScpID9cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmdiYSg1OCwgMTMzLCAyNTUsIDEpJyA6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JnYmEoMjU1LCA1NywgMTQ5LCAxKScsXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgIGJhY2tncm91bmQ6ICR7Z2V0THVtaW5hbmNlKCcjQ0NDRDY0JykgPj0gZ2V0THVtaW5hbmNlKCcjMDAwMGZmJykgPyAnI0NDQ0Q2NCcgOiAnIzAwMDBmZid9O1xuICogICBiYWNrZ3JvdW5kOiAke2dldEx1bWluYW5jZSgncmdiYSg1OCwgMTMzLCAyNTUsIDEpJykgPj0gZ2V0THVtaW5hbmNlKCdyZ2JhKDI1NSwgNTcsIDE0OSwgMSknKSA/XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JnYmEoNTgsIDEzMywgMjU1LCAxKScgOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZ2JhKDI1NSwgNTcsIDE0OSwgMSknfTtcbiAqXG4gKiAvLyBDU1MgaW4gSlMgT3V0cHV0XG4gKlxuICogZGl2IHtcbiAqICAgYmFja2dyb3VuZDogXCIjQ0NDRDY0XCI7XG4gKiAgIGJhY2tncm91bmQ6IFwicmdiYSg1OCwgMTMzLCAyNTUsIDEpXCI7XG4gKiB9XG4gKi9cblxuZnVuY3Rpb24gZ2V0THVtaW5hbmNlKGNvbG9yKSB7XG4gIGlmIChjb2xvciA9PT0gJ3RyYW5zcGFyZW50JykgcmV0dXJuIDA7XG4gIHZhciByZ2JDb2xvciA9IHBhcnNlVG9SZ2IoY29sb3IpO1xuXG4gIHZhciBfT2JqZWN0JGtleXMkbWFwID0gT2JqZWN0LmtleXMocmdiQ29sb3IpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGNoYW5uZWwgPSByZ2JDb2xvcltrZXldIC8gMjU1O1xuICAgIHJldHVybiBjaGFubmVsIDw9IDAuMDM5MjggPyBjaGFubmVsIC8gMTIuOTIgOiBNYXRoLnBvdygoY2hhbm5lbCArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICB9KSxcbiAgICAgIHIgPSBfT2JqZWN0JGtleXMkbWFwWzBdLFxuICAgICAgZyA9IF9PYmplY3Qka2V5cyRtYXBbMV0sXG4gICAgICBiID0gX09iamVjdCRrZXlzJG1hcFsyXTtcblxuICByZXR1cm4gcGFyc2VGbG9hdCgoMC4yMTI2ICogciArIDAuNzE1MiAqIGcgKyAwLjA3MjIgKiBiKS50b0ZpeGVkKDMpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb250cmFzdCByYXRpbyBiZXR3ZWVuIHR3byBjb2xvcnMgYmFzZWQgb25cbiAqIFtXMydzIHJlY29tbWVuZGVkIGVxdWF0aW9uIGZvciBjYWxjdWxhdGluZyBjb250cmFzdF0oaHR0cDovL3d3dy53My5vcmcvVFIvV0NBRzIwLyNjb250cmFzdC1yYXRpb2RlZikuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGNvbnRyYXN0UmF0aW8gPSBnZXRDb250cmFzdCgnIzQ0NCcsICcjZmZmJyk7XG4gKi9cblxuZnVuY3Rpb24gZ2V0Q29udHJhc3QoY29sb3IxLCBjb2xvcjIpIHtcbiAgdmFyIGx1bWluYW5jZTEgPSBnZXRMdW1pbmFuY2UoY29sb3IxKTtcbiAgdmFyIGx1bWluYW5jZTIgPSBnZXRMdW1pbmFuY2UoY29sb3IyKTtcbiAgcmV0dXJuIHBhcnNlRmxvYXQoKGx1bWluYW5jZTEgPiBsdW1pbmFuY2UyID8gKGx1bWluYW5jZTEgKyAwLjA1KSAvIChsdW1pbmFuY2UyICsgMC4wNSkgOiAobHVtaW5hbmNlMiArIDAuMDUpIC8gKGx1bWluYW5jZTEgKyAwLjA1KSkudG9GaXhlZCgyKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGNvbG9yIHRvIGEgZ3JheXNjYWxlLCBieSByZWR1Y2luZyBpdHMgc2F0dXJhdGlvbiB0byAwLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIGJhY2tncm91bmQ6IGdyYXlzY2FsZSgnI0NDQ0Q2NCcpLFxuICogICBiYWNrZ3JvdW5kOiBncmF5c2NhbGUoJ3JnYmEoMjA0LDIwNSwxMDAsMC43KScpLFxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICBiYWNrZ3JvdW5kOiAke2dyYXlzY2FsZSgnI0NDQ0Q2NCcpfTtcbiAqICAgYmFja2dyb3VuZDogJHtncmF5c2NhbGUoJ3JnYmEoMjA0LDIwNSwxMDAsMC43KScpfTtcbiAqIGBcbiAqXG4gKiAvLyBDU1MgaW4gSlMgT3V0cHV0XG4gKiBlbGVtZW50IHtcbiAqICAgYmFja2dyb3VuZDogXCIjOTk5XCI7XG4gKiAgIGJhY2tncm91bmQ6IFwicmdiYSgxNTMsMTUzLDE1MywwLjcpXCI7XG4gKiB9XG4gKi9cblxuZnVuY3Rpb24gZ3JheXNjYWxlKGNvbG9yKSB7XG4gIGlmIChjb2xvciA9PT0gJ3RyYW5zcGFyZW50JykgcmV0dXJuIGNvbG9yO1xuICByZXR1cm4gdG9Db2xvclN0cmluZyhfZXh0ZW5kcyh7fSwgcGFyc2VUb0hzbChjb2xvciksIHtcbiAgICBzYXR1cmF0aW9uOiAwXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIEhzbENvbG9yIG9yIEhzbGFDb2xvciBvYmplY3QgdG8gYSBjb2xvciBzdHJpbmcuXG4gKiBUaGlzIHV0aWwgaXMgdXNlZnVsIGluIGNhc2UgeW91IG9ubHkga25vdyBvbiBydW50aW1lIHdoaWNoIGNvbG9yIG9iamVjdCBpc1xuICogdXNlZC4gT3RoZXJ3aXNlIHdlIHJlY29tbWVuZCB0byByZWx5IG9uIGBoc2xgIG9yIGBoc2xhYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICBiYWNrZ3JvdW5kOiBoc2xUb0NvbG9yU3RyaW5nKHsgaHVlOiAyNDAsIHNhdHVyYXRpb246IDEsIGxpZ2h0bmVzczogMC41IH0pLFxuICogICBiYWNrZ3JvdW5kOiBoc2xUb0NvbG9yU3RyaW5nKHsgaHVlOiAzNjAsIHNhdHVyYXRpb246IDAuNzUsIGxpZ2h0bmVzczogMC40LCBhbHBoYTogMC43MiB9KSxcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgYmFja2dyb3VuZDogJHtoc2xUb0NvbG9yU3RyaW5nKHsgaHVlOiAyNDAsIHNhdHVyYXRpb246IDEsIGxpZ2h0bmVzczogMC41IH0pfTtcbiAqICAgYmFja2dyb3VuZDogJHtoc2xUb0NvbG9yU3RyaW5nKHsgaHVlOiAzNjAsIHNhdHVyYXRpb246IDAuNzUsIGxpZ2h0bmVzczogMC40LCBhbHBoYTogMC43MiB9KX07XG4gKiBgXG4gKlxuICogLy8gQ1NTIGluIEpTIE91dHB1dFxuICogZWxlbWVudCB7XG4gKiAgIGJhY2tncm91bmQ6IFwiIzAwZlwiO1xuICogICBiYWNrZ3JvdW5kOiBcInJnYmEoMTc5LDI1LDI1LDAuNzIpXCI7XG4gKiB9XG4gKi9cbmZ1bmN0aW9uIGhzbFRvQ29sb3JTdHJpbmcoY29sb3IpIHtcbiAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGNvbG9yLmh1ZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGNvbG9yLnNhdHVyYXRpb24gPT09ICdudW1iZXInICYmIHR5cGVvZiBjb2xvci5saWdodG5lc3MgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKGNvbG9yLmFscGhhICYmIHR5cGVvZiBjb2xvci5hbHBoYSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBoc2xhKHtcbiAgICAgICAgaHVlOiBjb2xvci5odWUsXG4gICAgICAgIHNhdHVyYXRpb246IGNvbG9yLnNhdHVyYXRpb24sXG4gICAgICAgIGxpZ2h0bmVzczogY29sb3IubGlnaHRuZXNzLFxuICAgICAgICBhbHBoYTogY29sb3IuYWxwaGFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBoc2woe1xuICAgICAgaHVlOiBjb2xvci5odWUsXG4gICAgICBzYXR1cmF0aW9uOiBjb2xvci5zYXR1cmF0aW9uLFxuICAgICAgbGlnaHRuZXNzOiBjb2xvci5saWdodG5lc3NcbiAgICB9KTtcbiAgfVxuXG4gIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDQ1KTtcbn1cblxuLyoqXG4gKiBJbnZlcnRzIHRoZSByZWQsIGdyZWVuIGFuZCBibHVlIHZhbHVlcyBvZiBhIGNvbG9yLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIGJhY2tncm91bmQ6IGludmVydCgnI0NDQ0Q2NCcpLFxuICogICBiYWNrZ3JvdW5kOiBpbnZlcnQoJ3JnYmEoMTAxLDEwMCwyMDUsMC43KScpLFxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICBiYWNrZ3JvdW5kOiAke2ludmVydCgnI0NDQ0Q2NCcpfTtcbiAqICAgYmFja2dyb3VuZDogJHtpbnZlcnQoJ3JnYmEoMTAxLDEwMCwyMDUsMC43KScpfTtcbiAqIGBcbiAqXG4gKiAvLyBDU1MgaW4gSlMgT3V0cHV0XG4gKlxuICogZWxlbWVudCB7XG4gKiAgIGJhY2tncm91bmQ6IFwiIzMzMzI5YlwiO1xuICogICBiYWNrZ3JvdW5kOiBcInJnYmEoMTU0LDE1NSw1MCwwLjcpXCI7XG4gKiB9XG4gKi9cblxuZnVuY3Rpb24gaW52ZXJ0KGNvbG9yKSB7XG4gIGlmIChjb2xvciA9PT0gJ3RyYW5zcGFyZW50JykgcmV0dXJuIGNvbG9yOyAvLyBwYXJzZSBjb2xvciBzdHJpbmcgdG8gcmdiXG5cbiAgdmFyIHZhbHVlID0gcGFyc2VUb1JnYihjb2xvcik7XG4gIHJldHVybiB0b0NvbG9yU3RyaW5nKF9leHRlbmRzKHt9LCB2YWx1ZSwge1xuICAgIHJlZDogMjU1IC0gdmFsdWUucmVkLFxuICAgIGdyZWVuOiAyNTUgLSB2YWx1ZS5ncmVlbixcbiAgICBibHVlOiAyNTUgLSB2YWx1ZS5ibHVlXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHZhbHVlIGZvciB0aGUgbGlnaHRlbmVkIGNvbG9yLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oMC4yLCAnI0NDQ0Q2NCcpLFxuICogICBiYWNrZ3JvdW5kOiBsaWdodGVuKCcwLjInLCAncmdiYSgyMDQsMjA1LDEwMCwwLjcpJyksXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgIGJhY2tncm91bmQ6ICR7bGlnaHRlbigwLjIsICcjRkZDRDY0Jyl9O1xuICogICBiYWNrZ3JvdW5kOiAke2xpZ2h0ZW4oJzAuMicsICdyZ2JhKDIwNCwyMDUsMTAwLDAuNyknKX07XG4gKiBgXG4gKlxuICogLy8gQ1NTIGluIEpTIE91dHB1dFxuICpcbiAqIGVsZW1lbnQge1xuICogICBiYWNrZ3JvdW5kOiBcIiNlNWU2YjFcIjtcbiAqICAgYmFja2dyb3VuZDogXCJyZ2JhKDIyOSwyMzAsMTc3LDAuNylcIjtcbiAqIH1cbiAqL1xuXG5mdW5jdGlvbiBsaWdodGVuKGFtb3VudCwgY29sb3IpIHtcbiAgaWYgKGNvbG9yID09PSAndHJhbnNwYXJlbnQnKSByZXR1cm4gY29sb3I7XG4gIHZhciBoc2xDb2xvciA9IHBhcnNlVG9Ic2woY29sb3IpO1xuICByZXR1cm4gdG9Db2xvclN0cmluZyhfZXh0ZW5kcyh7fSwgaHNsQ29sb3IsIHtcbiAgICBsaWdodG5lc3M6IGd1YXJkKDAsIDEsIGhzbENvbG9yLmxpZ2h0bmVzcyArIHBhcnNlRmxvYXQoYW1vdW50KSlcbiAgfSkpO1xufSAvLyBwcmV0dGllci1pZ25vcmVcblxuXG52YXIgY3VycmllZExpZ2h0ZW4gPSAvKiNfX1BVUkVfXyovY3Vycnlcbi8qIDo6PG51bWJlciB8IHN0cmluZywgc3RyaW5nLCBzdHJpbmc+ICovXG4obGlnaHRlbik7XG52YXIgY3VycmllZExpZ2h0ZW4kMSA9IGN1cnJpZWRMaWdodGVuO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hpY2ggY29udHJhc3QgZ3VpZGVsaW5lcyBoYXZlIGJlZW4gbWV0IGZvciB0d28gY29sb3JzLlxuICogQmFzZWQgb24gdGhlIFtjb250cmFzdCBjYWxjdWxhdGlvbnMgcmVjb21tZW5kZWQgYnkgVzNdKGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvV0NBRzIxL1VuZGVyc3RhbmRpbmcvY29udHJhc3QtZW5oYW5jZWQuaHRtbCkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNjb3JlcyA9IG1lZXRzQ29udHJhc3RHdWlkZWxpbmVzKCcjNDQ0JywgJyNmZmYnKTtcbiAqL1xuZnVuY3Rpb24gbWVldHNDb250cmFzdEd1aWRlbGluZXMoY29sb3IxLCBjb2xvcjIpIHtcbiAgdmFyIGNvbnRyYXN0UmF0aW8gPSBnZXRDb250cmFzdChjb2xvcjEsIGNvbG9yMik7XG4gIHJldHVybiB7XG4gICAgQUE6IGNvbnRyYXN0UmF0aW8gPj0gNC41LFxuICAgIEFBTGFyZ2U6IGNvbnRyYXN0UmF0aW8gPj0gMyxcbiAgICBBQUE6IGNvbnRyYXN0UmF0aW8gPj0gNyxcbiAgICBBQUFMYXJnZTogY29udHJhc3RSYXRpbyA+PSA0LjVcbiAgfTtcbn1cblxuLyoqXG4gKiBNaXhlcyB0aGUgdHdvIHByb3ZpZGVkIGNvbG9ycyB0b2dldGhlciBieSBjYWxjdWxhdGluZyB0aGUgYXZlcmFnZSBvZiBlYWNoIG9mIHRoZSBSR0IgY29tcG9uZW50cyB3ZWlnaHRlZCB0byB0aGUgZmlyc3QgY29sb3IgYnkgdGhlIHByb3ZpZGVkIHdlaWdodC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICBiYWNrZ3JvdW5kOiBtaXgoMC41LCAnI2YwMCcsICcjMDBmJylcbiAqICAgYmFja2dyb3VuZDogbWl4KDAuMjUsICcjZjAwJywgJyMwMGYnKVxuICogICBiYWNrZ3JvdW5kOiBtaXgoJzAuNScsICdyZ2JhKDI1NSwgMCwgMCwgMC41KScsICcjMDBmJylcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgYmFja2dyb3VuZDogJHttaXgoMC41LCAnI2YwMCcsICcjMDBmJyl9O1xuICogICBiYWNrZ3JvdW5kOiAke21peCgwLjI1LCAnI2YwMCcsICcjMDBmJyl9O1xuICogICBiYWNrZ3JvdW5kOiAke21peCgnMC41JywgJ3JnYmEoMjU1LCAwLCAwLCAwLjUpJywgJyMwMGYnKX07XG4gKiBgXG4gKlxuICogLy8gQ1NTIGluIEpTIE91dHB1dFxuICpcbiAqIGVsZW1lbnQge1xuICogICBiYWNrZ3JvdW5kOiBcIiM3ZjAwN2ZcIjtcbiAqICAgYmFja2dyb3VuZDogXCIjM2YwMGJmXCI7XG4gKiAgIGJhY2tncm91bmQ6IFwicmdiYSg2MywgMCwgMTkxLCAwLjc1KVwiO1xuICogfVxuICovXG5cbmZ1bmN0aW9uIG1peCh3ZWlnaHQsIGNvbG9yLCBvdGhlckNvbG9yKSB7XG4gIGlmIChjb2xvciA9PT0gJ3RyYW5zcGFyZW50JykgcmV0dXJuIG90aGVyQ29sb3I7XG4gIGlmIChvdGhlckNvbG9yID09PSAndHJhbnNwYXJlbnQnKSByZXR1cm4gY29sb3I7XG4gIGlmICh3ZWlnaHQgPT09IDApIHJldHVybiBvdGhlckNvbG9yO1xuICB2YXIgcGFyc2VkQ29sb3IxID0gcGFyc2VUb1JnYihjb2xvcik7XG5cbiAgdmFyIGNvbG9yMSA9IF9leHRlbmRzKHt9LCBwYXJzZWRDb2xvcjEsIHtcbiAgICBhbHBoYTogdHlwZW9mIHBhcnNlZENvbG9yMS5hbHBoYSA9PT0gJ251bWJlcicgPyBwYXJzZWRDb2xvcjEuYWxwaGEgOiAxXG4gIH0pO1xuXG4gIHZhciBwYXJzZWRDb2xvcjIgPSBwYXJzZVRvUmdiKG90aGVyQ29sb3IpO1xuXG4gIHZhciBjb2xvcjIgPSBfZXh0ZW5kcyh7fSwgcGFyc2VkQ29sb3IyLCB7XG4gICAgYWxwaGE6IHR5cGVvZiBwYXJzZWRDb2xvcjIuYWxwaGEgPT09ICdudW1iZXInID8gcGFyc2VkQ29sb3IyLmFscGhhIDogMVxuICB9KTsgLy8gVGhlIGZvcm11bGEgaXMgY29waWVkIGZyb20gdGhlIG9yaWdpbmFsIFNhc3MgaW1wbGVtZW50YXRpb246XG4gIC8vIGh0dHA6Ly9zYXNzLWxhbmcuY29tL2RvY3VtZW50YXRpb24vU2Fzcy9TY3JpcHQvRnVuY3Rpb25zLmh0bWwjbWl4LWluc3RhbmNlX21ldGhvZFxuXG5cbiAgdmFyIGFscGhhRGVsdGEgPSBjb2xvcjEuYWxwaGEgLSBjb2xvcjIuYWxwaGE7XG4gIHZhciB4ID0gcGFyc2VGbG9hdCh3ZWlnaHQpICogMiAtIDE7XG4gIHZhciB5ID0geCAqIGFscGhhRGVsdGEgPT09IC0xID8geCA6IHggKyBhbHBoYURlbHRhO1xuICB2YXIgeiA9IDEgKyB4ICogYWxwaGFEZWx0YTtcbiAgdmFyIHdlaWdodDEgPSAoeSAvIHogKyAxKSAvIDIuMDtcbiAgdmFyIHdlaWdodDIgPSAxIC0gd2VpZ2h0MTtcbiAgdmFyIG1peGVkQ29sb3IgPSB7XG4gICAgcmVkOiBNYXRoLmZsb29yKGNvbG9yMS5yZWQgKiB3ZWlnaHQxICsgY29sb3IyLnJlZCAqIHdlaWdodDIpLFxuICAgIGdyZWVuOiBNYXRoLmZsb29yKGNvbG9yMS5ncmVlbiAqIHdlaWdodDEgKyBjb2xvcjIuZ3JlZW4gKiB3ZWlnaHQyKSxcbiAgICBibHVlOiBNYXRoLmZsb29yKGNvbG9yMS5ibHVlICogd2VpZ2h0MSArIGNvbG9yMi5ibHVlICogd2VpZ2h0MiksXG4gICAgYWxwaGE6IGNvbG9yMS5hbHBoYSAqIHBhcnNlRmxvYXQod2VpZ2h0KSArIGNvbG9yMi5hbHBoYSAqICgxIC0gcGFyc2VGbG9hdCh3ZWlnaHQpKVxuICB9O1xuICByZXR1cm4gcmdiYShtaXhlZENvbG9yKTtcbn0gLy8gcHJldHRpZXItaWdub3JlXG5cblxudmFyIGN1cnJpZWRNaXggPSAvKiNfX1BVUkVfXyovY3Vycnlcbi8qIDo6PG51bWJlciB8IHN0cmluZywgc3RyaW5nLCBzdHJpbmcsIHN0cmluZz4gKi9cbihtaXgpO1xudmFyIG1peCQxID0gY3VycmllZE1peDtcblxuLyoqXG4gKiBJbmNyZWFzZXMgdGhlIG9wYWNpdHkgb2YgYSBjb2xvci4gSXRzIHJhbmdlIGZvciB0aGUgYW1vdW50IGlzIGJldHdlZW4gMCB0byAxLlxuICpcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICBiYWNrZ3JvdW5kOiBvcGFjaWZ5KDAuMSwgJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC45KScpO1xuICogICBiYWNrZ3JvdW5kOiBvcGFjaWZ5KDAuMiwgJ2hzbGEoMCwgMCUsIDEwMCUsIDAuNSknKSxcbiAqICAgYmFja2dyb3VuZDogb3BhY2lmeSgnMC41JywgJ3JnYmEoMjU1LCAwLCAwLCAwLjIpJyksXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgIGJhY2tncm91bmQ6ICR7b3BhY2lmeSgwLjEsICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSknKX07XG4gKiAgIGJhY2tncm91bmQ6ICR7b3BhY2lmeSgwLjIsICdoc2xhKDAsIDAlLCAxMDAlLCAwLjUpJyl9LFxuICogICBiYWNrZ3JvdW5kOiAke29wYWNpZnkoJzAuNScsICdyZ2JhKDI1NSwgMCwgMCwgMC4yKScpfSxcbiAqIGBcbiAqXG4gKiAvLyBDU1MgaW4gSlMgT3V0cHV0XG4gKlxuICogZWxlbWVudCB7XG4gKiAgIGJhY2tncm91bmQ6IFwiI2ZmZlwiO1xuICogICBiYWNrZ3JvdW5kOiBcInJnYmEoMjU1LDI1NSwyNTUsMC43KVwiO1xuICogICBiYWNrZ3JvdW5kOiBcInJnYmEoMjU1LDAsMCwwLjcpXCI7XG4gKiB9XG4gKi9cblxuZnVuY3Rpb24gb3BhY2lmeShhbW91bnQsIGNvbG9yKSB7XG4gIGlmIChjb2xvciA9PT0gJ3RyYW5zcGFyZW50JykgcmV0dXJuIGNvbG9yO1xuICB2YXIgcGFyc2VkQ29sb3IgPSBwYXJzZVRvUmdiKGNvbG9yKTtcbiAgdmFyIGFscGhhID0gdHlwZW9mIHBhcnNlZENvbG9yLmFscGhhID09PSAnbnVtYmVyJyA/IHBhcnNlZENvbG9yLmFscGhhIDogMTtcblxuICB2YXIgY29sb3JXaXRoQWxwaGEgPSBfZXh0ZW5kcyh7fSwgcGFyc2VkQ29sb3IsIHtcbiAgICBhbHBoYTogZ3VhcmQoMCwgMSwgKGFscGhhICogMTAwICsgcGFyc2VGbG9hdChhbW91bnQpICogMTAwKSAvIDEwMClcbiAgfSk7XG5cbiAgcmV0dXJuIHJnYmEoY29sb3JXaXRoQWxwaGEpO1xufSAvLyBwcmV0dGllci1pZ25vcmVcblxuXG52YXIgY3VycmllZE9wYWNpZnkgPSAvKiNfX1BVUkVfXyovY3Vycnlcbi8qIDo6PG51bWJlciB8IHN0cmluZywgc3RyaW5nLCBzdHJpbmc+ICovXG4ob3BhY2lmeSk7XG52YXIgY3VycmllZE9wYWNpZnkkMSA9IGN1cnJpZWRPcGFjaWZ5O1xuXG52YXIgZGVmYXVsdFJldHVybklmTGlnaHRDb2xvciA9ICcjMDAwJztcbnZhciBkZWZhdWx0UmV0dXJuSWZEYXJrQ29sb3IgPSAnI2ZmZic7XG4vKipcbiAqIFJldHVybnMgYmxhY2sgb3Igd2hpdGUgKG9yIG9wdGlvbmFsIHBhc3NlZCBjb2xvcnMpIGZvciBiZXN0XG4gKiBjb250cmFzdCBkZXBlbmRpbmcgb24gdGhlIGx1bWlub3NpdHkgb2YgdGhlIGdpdmVuIGNvbG9yLlxuICogV2hlbiBwYXNzaW5nIGN1c3RvbSByZXR1cm4gY29sb3JzLCBzdHJpY3QgbW9kZSBlbnN1cmVzIHRoYXQgdGhlXG4gKiByZXR1cm4gY29sb3IgYWx3YXlzIG1lZXRzIG9yIGV4Y2VlZHMgV0NBRyBsZXZlbCBBQSBvciBncmVhdGVyLiBJZiB0aGlzIHRlc3RcbiAqIGZhaWxzLCB0aGUgZGVmYXVsdCByZXR1cm4gY29sb3IgKGJsYWNrIG9yIHdoaXRlKSBpcyByZXR1cm5lZCBpbiBwbGFjZSBvZiB0aGVcbiAqIGN1c3RvbSByZXR1cm4gY29sb3IuIFlvdSBjYW4gb3B0aW9uYWxseSB0dXJuIG9mZiBzdHJpY3QgbW9kZS5cbiAqXG4gKiBGb2xsb3dzIFtXM0Mgc3BlY3MgZm9yIHJlYWRhYmlsaXR5XShodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLVRFQ0hTL0cxOC5odG1sKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICBjb2xvcjogcmVhZGFibGVDb2xvcignIzAwMCcpLFxuICogICBjb2xvcjogcmVhZGFibGVDb2xvcignYmxhY2snLCAnIzAwMScsICcjZmY4JyksXG4gKiAgIGNvbG9yOiByZWFkYWJsZUNvbG9yKCd3aGl0ZScsICcjMDAxJywgJyNmZjgnKSxcbiAqICAgY29sb3I6IHJlYWRhYmxlQ29sb3IoJ3JlZCcsICcjMzMzJywgJyNkZGQnLCB0cnVlKVxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICBjb2xvcjogJHtyZWFkYWJsZUNvbG9yKCcjMDAwJyl9O1xuICogICBjb2xvcjogJHtyZWFkYWJsZUNvbG9yKCdibGFjaycsICcjMDAxJywgJyNmZjgnKX07XG4gKiAgIGNvbG9yOiAke3JlYWRhYmxlQ29sb3IoJ3doaXRlJywgJyMwMDEnLCAnI2ZmOCcpfTtcbiAqICAgY29sb3I6ICR7cmVhZGFibGVDb2xvcigncmVkJywgJyMzMzMnLCAnI2RkZCcsIHRydWUpfTtcbiAqIGBcbiAqXG4gKiAvLyBDU1MgaW4gSlMgT3V0cHV0XG4gKiBlbGVtZW50IHtcbiAqICAgY29sb3I6IFwiI2ZmZlwiO1xuICogICBjb2xvcjogXCIjZmY4XCI7XG4gKiAgIGNvbG9yOiBcIiMwMDFcIjtcbiAqICAgY29sb3I6IFwiIzAwMFwiO1xuICogfVxuICovXG5cbmZ1bmN0aW9uIHJlYWRhYmxlQ29sb3IoY29sb3IsIHJldHVybklmTGlnaHRDb2xvciwgcmV0dXJuSWZEYXJrQ29sb3IsIHN0cmljdCkge1xuICBpZiAocmV0dXJuSWZMaWdodENvbG9yID09PSB2b2lkIDApIHtcbiAgICByZXR1cm5JZkxpZ2h0Q29sb3IgPSBkZWZhdWx0UmV0dXJuSWZMaWdodENvbG9yO1xuICB9XG5cbiAgaWYgKHJldHVybklmRGFya0NvbG9yID09PSB2b2lkIDApIHtcbiAgICByZXR1cm5JZkRhcmtDb2xvciA9IGRlZmF1bHRSZXR1cm5JZkRhcmtDb2xvcjtcbiAgfVxuXG4gIGlmIChzdHJpY3QgPT09IHZvaWQgMCkge1xuICAgIHN0cmljdCA9IHRydWU7XG4gIH1cblxuICB2YXIgaXNDb2xvckxpZ2h0ID0gZ2V0THVtaW5hbmNlKGNvbG9yKSA+IDAuMTc5O1xuICB2YXIgcHJlZmVycmVkUmV0dXJuQ29sb3IgPSBpc0NvbG9yTGlnaHQgPyByZXR1cm5JZkxpZ2h0Q29sb3IgOiByZXR1cm5JZkRhcmtDb2xvcjtcblxuICBpZiAoIXN0cmljdCB8fCBnZXRDb250cmFzdChjb2xvciwgcHJlZmVycmVkUmV0dXJuQ29sb3IpID49IDQuNSkge1xuICAgIHJldHVybiBwcmVmZXJyZWRSZXR1cm5Db2xvcjtcbiAgfVxuXG4gIHJldHVybiBpc0NvbG9yTGlnaHQgPyBkZWZhdWx0UmV0dXJuSWZMaWdodENvbG9yIDogZGVmYXVsdFJldHVybklmRGFya0NvbG9yO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgUmdiQ29sb3Igb3IgUmdiYUNvbG9yIG9iamVjdCB0byBhIGNvbG9yIHN0cmluZy5cbiAqIFRoaXMgdXRpbCBpcyB1c2VmdWwgaW4gY2FzZSB5b3Ugb25seSBrbm93IG9uIHJ1bnRpbWUgd2hpY2ggY29sb3Igb2JqZWN0IGlzXG4gKiB1c2VkLiBPdGhlcndpc2Ugd2UgcmVjb21tZW5kIHRvIHJlbHkgb24gYHJnYmAgb3IgYHJnYmFgLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIGJhY2tncm91bmQ6IHJnYlRvQ29sb3JTdHJpbmcoeyByZWQ6IDI1NSwgZ3JlZW46IDIwNSwgYmx1ZTogMTAwIH0pLFxuICogICBiYWNrZ3JvdW5kOiByZ2JUb0NvbG9yU3RyaW5nKHsgcmVkOiAyNTUsIGdyZWVuOiAyMDUsIGJsdWU6IDEwMCwgYWxwaGE6IDAuNzIgfSksXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgIGJhY2tncm91bmQ6ICR7cmdiVG9Db2xvclN0cmluZyh7IHJlZDogMjU1LCBncmVlbjogMjA1LCBibHVlOiAxMDAgfSl9O1xuICogICBiYWNrZ3JvdW5kOiAke3JnYlRvQ29sb3JTdHJpbmcoeyByZWQ6IDI1NSwgZ3JlZW46IDIwNSwgYmx1ZTogMTAwLCBhbHBoYTogMC43MiB9KX07XG4gKiBgXG4gKlxuICogLy8gQ1NTIGluIEpTIE91dHB1dFxuICogZWxlbWVudCB7XG4gKiAgIGJhY2tncm91bmQ6IFwiI2ZmY2Q2NFwiO1xuICogICBiYWNrZ3JvdW5kOiBcInJnYmEoMjU1LDIwNSwxMDAsMC43MilcIjtcbiAqIH1cbiAqL1xuZnVuY3Rpb24gcmdiVG9Db2xvclN0cmluZyhjb2xvcikge1xuICBpZiAodHlwZW9mIGNvbG9yID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgY29sb3IucmVkID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgY29sb3IuZ3JlZW4gPT09ICdudW1iZXInICYmIHR5cGVvZiBjb2xvci5ibHVlID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgY29sb3IuYWxwaGEgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gcmdiYSh7XG4gICAgICAgIHJlZDogY29sb3IucmVkLFxuICAgICAgICBncmVlbjogY29sb3IuZ3JlZW4sXG4gICAgICAgIGJsdWU6IGNvbG9yLmJsdWUsXG4gICAgICAgIGFscGhhOiBjb2xvci5hbHBoYVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJnYih7XG4gICAgICByZWQ6IGNvbG9yLnJlZCxcbiAgICAgIGdyZWVuOiBjb2xvci5ncmVlbixcbiAgICAgIGJsdWU6IGNvbG9yLmJsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDQ2KTtcbn1cblxuLyoqXG4gKiBJbmNyZWFzZXMgdGhlIGludGVuc2l0eSBvZiBhIGNvbG9yLiBJdHMgcmFuZ2UgaXMgYmV0d2VlbiAwIHRvIDEuIFRoZSBmaXJzdFxuICogYXJndW1lbnQgb2YgdGhlIHNhdHVyYXRlIGZ1bmN0aW9uIGlzIHRoZSBhbW91bnQgYnkgaG93IG11Y2ggdGhlIGNvbG9yXG4gKiBpbnRlbnNpdHkgc2hvdWxkIGJlIGluY3JlYXNlZC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICBiYWNrZ3JvdW5kOiBzYXR1cmF0ZSgwLjIsICcjQ0NDRDY0JyksXG4gKiAgIGJhY2tncm91bmQ6IHNhdHVyYXRlKCcwLjInLCAncmdiYSgyMDQsMjA1LDEwMCwwLjcpJyksXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgIGJhY2tncm91bmQ6ICR7c2F0dXJhdGUoMC4yLCAnI0ZGQ0Q2NCcpfTtcbiAqICAgYmFja2dyb3VuZDogJHtzYXR1cmF0ZSgnMC4yJywgJ3JnYmEoMjA0LDIwNSwxMDAsMC43KScpfTtcbiAqIGBcbiAqXG4gKiAvLyBDU1MgaW4gSlMgT3V0cHV0XG4gKlxuICogZWxlbWVudCB7XG4gKiAgIGJhY2tncm91bmQ6IFwiI2UwZTI1MFwiO1xuICogICBiYWNrZ3JvdW5kOiBcInJnYmEoMjI0LDIyNiw4MCwwLjcpXCI7XG4gKiB9XG4gKi9cblxuZnVuY3Rpb24gc2F0dXJhdGUoYW1vdW50LCBjb2xvcikge1xuICBpZiAoY29sb3IgPT09ICd0cmFuc3BhcmVudCcpIHJldHVybiBjb2xvcjtcbiAgdmFyIGhzbENvbG9yID0gcGFyc2VUb0hzbChjb2xvcik7XG4gIHJldHVybiB0b0NvbG9yU3RyaW5nKF9leHRlbmRzKHt9LCBoc2xDb2xvciwge1xuICAgIHNhdHVyYXRpb246IGd1YXJkKDAsIDEsIGhzbENvbG9yLnNhdHVyYXRpb24gKyBwYXJzZUZsb2F0KGFtb3VudCkpXG4gIH0pKTtcbn0gLy8gcHJldHRpZXItaWdub3JlXG5cblxudmFyIGN1cnJpZWRTYXR1cmF0ZSA9IC8qI19fUFVSRV9fKi9jdXJyeVxuLyogOjo8bnVtYmVyIHwgc3RyaW5nLCBzdHJpbmcsIHN0cmluZz4gKi9cbihzYXR1cmF0ZSk7XG52YXIgY3VycmllZFNhdHVyYXRlJDEgPSBjdXJyaWVkU2F0dXJhdGU7XG5cbi8qKlxuICogU2V0cyB0aGUgaHVlIG9mIGEgY29sb3IgdG8gdGhlIHByb3ZpZGVkIHZhbHVlLiBUaGUgaHVlIHJhbmdlIGNhbiBiZVxuICogZnJvbSAwIGFuZCAzNTkuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgYmFja2dyb3VuZDogc2V0SHVlKDQyLCAnI0NDQ0Q2NCcpLFxuICogICBiYWNrZ3JvdW5kOiBzZXRIdWUoJzI0NCcsICdyZ2JhKDIwNCwyMDUsMTAwLDAuNyknKSxcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgYmFja2dyb3VuZDogJHtzZXRIdWUoNDIsICcjQ0NDRDY0Jyl9O1xuICogICBiYWNrZ3JvdW5kOiAke3NldEh1ZSgnMjQ0JywgJ3JnYmEoMjA0LDIwNSwxMDAsMC43KScpfTtcbiAqIGBcbiAqXG4gKiAvLyBDU1MgaW4gSlMgT3V0cHV0XG4gKiBlbGVtZW50IHtcbiAqICAgYmFja2dyb3VuZDogXCIjY2RhZTY0XCI7XG4gKiAgIGJhY2tncm91bmQ6IFwicmdiYSgxMDcsMTAwLDIwNSwwLjcpXCI7XG4gKiB9XG4gKi9cblxuZnVuY3Rpb24gc2V0SHVlKGh1ZSwgY29sb3IpIHtcbiAgaWYgKGNvbG9yID09PSAndHJhbnNwYXJlbnQnKSByZXR1cm4gY29sb3I7XG4gIHJldHVybiB0b0NvbG9yU3RyaW5nKF9leHRlbmRzKHt9LCBwYXJzZVRvSHNsKGNvbG9yKSwge1xuICAgIGh1ZTogcGFyc2VGbG9hdChodWUpXG4gIH0pKTtcbn0gLy8gcHJldHRpZXItaWdub3JlXG5cblxudmFyIGN1cnJpZWRTZXRIdWUgPSAvKiNfX1BVUkVfXyovY3Vycnlcbi8qIDo6PG51bWJlciB8IHN0cmluZywgc3RyaW5nLCBzdHJpbmc+ICovXG4oc2V0SHVlKTtcbnZhciBjdXJyaWVkU2V0SHVlJDEgPSBjdXJyaWVkU2V0SHVlO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpZ2h0bmVzcyBvZiBhIGNvbG9yIHRvIHRoZSBwcm92aWRlZCB2YWx1ZS4gVGhlIGxpZ2h0bmVzcyByYW5nZSBjYW4gYmVcbiAqIGZyb20gMCBhbmQgMS5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICBiYWNrZ3JvdW5kOiBzZXRMaWdodG5lc3MoMC4yLCAnI0NDQ0Q2NCcpLFxuICogICBiYWNrZ3JvdW5kOiBzZXRMaWdodG5lc3MoJzAuNzUnLCAncmdiYSgyMDQsMjA1LDEwMCwwLjcpJyksXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgIGJhY2tncm91bmQ6ICR7c2V0TGlnaHRuZXNzKDAuMiwgJyNDQ0NENjQnKX07XG4gKiAgIGJhY2tncm91bmQ6ICR7c2V0TGlnaHRuZXNzKCcwLjc1JywgJ3JnYmEoMjA0LDIwNSwxMDAsMC43KScpfTtcbiAqIGBcbiAqXG4gKiAvLyBDU1MgaW4gSlMgT3V0cHV0XG4gKiBlbGVtZW50IHtcbiAqICAgYmFja2dyb3VuZDogXCIjNGQ0ZDE5XCI7XG4gKiAgIGJhY2tncm91bmQ6IFwicmdiYSgyMjMsMjI0LDE1OSwwLjcpXCI7XG4gKiB9XG4gKi9cblxuZnVuY3Rpb24gc2V0TGlnaHRuZXNzKGxpZ2h0bmVzcywgY29sb3IpIHtcbiAgaWYgKGNvbG9yID09PSAndHJhbnNwYXJlbnQnKSByZXR1cm4gY29sb3I7XG4gIHJldHVybiB0b0NvbG9yU3RyaW5nKF9leHRlbmRzKHt9LCBwYXJzZVRvSHNsKGNvbG9yKSwge1xuICAgIGxpZ2h0bmVzczogcGFyc2VGbG9hdChsaWdodG5lc3MpXG4gIH0pKTtcbn0gLy8gcHJldHRpZXItaWdub3JlXG5cblxudmFyIGN1cnJpZWRTZXRMaWdodG5lc3MgPSAvKiNfX1BVUkVfXyovY3Vycnlcbi8qIDo6PG51bWJlciB8IHN0cmluZywgc3RyaW5nLCBzdHJpbmc+ICovXG4oc2V0TGlnaHRuZXNzKTtcbnZhciBjdXJyaWVkU2V0TGlnaHRuZXNzJDEgPSBjdXJyaWVkU2V0TGlnaHRuZXNzO1xuXG4vKipcbiAqIFNldHMgdGhlIHNhdHVyYXRpb24gb2YgYSBjb2xvciB0byB0aGUgcHJvdmlkZWQgdmFsdWUuIFRoZSBzYXR1cmF0aW9uIHJhbmdlIGNhbiBiZVxuICogZnJvbSAwIGFuZCAxLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIGJhY2tncm91bmQ6IHNldFNhdHVyYXRpb24oMC4yLCAnI0NDQ0Q2NCcpLFxuICogICBiYWNrZ3JvdW5kOiBzZXRTYXR1cmF0aW9uKCcwLjc1JywgJ3JnYmEoMjA0LDIwNSwxMDAsMC43KScpLFxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICBiYWNrZ3JvdW5kOiAke3NldFNhdHVyYXRpb24oMC4yLCAnI0NDQ0Q2NCcpfTtcbiAqICAgYmFja2dyb3VuZDogJHtzZXRTYXR1cmF0aW9uKCcwLjc1JywgJ3JnYmEoMjA0LDIwNSwxMDAsMC43KScpfTtcbiAqIGBcbiAqXG4gKiAvLyBDU1MgaW4gSlMgT3V0cHV0XG4gKiBlbGVtZW50IHtcbiAqICAgYmFja2dyb3VuZDogXCIjYWRhZDg0XCI7XG4gKiAgIGJhY2tncm91bmQ6IFwicmdiYSgyMjgsMjI5LDc2LDAuNylcIjtcbiAqIH1cbiAqL1xuXG5mdW5jdGlvbiBzZXRTYXR1cmF0aW9uKHNhdHVyYXRpb24sIGNvbG9yKSB7XG4gIGlmIChjb2xvciA9PT0gJ3RyYW5zcGFyZW50JykgcmV0dXJuIGNvbG9yO1xuICByZXR1cm4gdG9Db2xvclN0cmluZyhfZXh0ZW5kcyh7fSwgcGFyc2VUb0hzbChjb2xvciksIHtcbiAgICBzYXR1cmF0aW9uOiBwYXJzZUZsb2F0KHNhdHVyYXRpb24pXG4gIH0pKTtcbn0gLy8gcHJldHRpZXItaWdub3JlXG5cblxudmFyIGN1cnJpZWRTZXRTYXR1cmF0aW9uID0gLyojX19QVVJFX18qL2N1cnJ5XG4vKiA6OjxudW1iZXIgfCBzdHJpbmcsIHN0cmluZywgc3RyaW5nPiAqL1xuKHNldFNhdHVyYXRpb24pO1xudmFyIGN1cnJpZWRTZXRTYXR1cmF0aW9uJDEgPSBjdXJyaWVkU2V0U2F0dXJhdGlvbjtcblxuLyoqXG4gKiBTaGFkZXMgYSBjb2xvciBieSBtaXhpbmcgaXQgd2l0aCBibGFjay4gYHNoYWRlYCBjYW4gcHJvZHVjZVxuICogaHVlIHNoaWZ0cywgd2hlcmUgYXMgYGRhcmtlbmAgbWFuaXB1bGF0ZXMgdGhlIGx1bWluYW5jZSBjaGFubmVsIGFuZCB0aGVyZWZvcmVcbiAqIGRvZXNuJ3QgcHJvZHVjZSBodWUgc2hpZnRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIGJhY2tncm91bmQ6IHNoYWRlKDAuMjUsICcjMDBmJylcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgYmFja2dyb3VuZDogJHtzaGFkZSgwLjI1LCAnIzAwZicpfTtcbiAqIGBcbiAqXG4gKiAvLyBDU1MgaW4gSlMgT3V0cHV0XG4gKlxuICogZWxlbWVudCB7XG4gKiAgIGJhY2tncm91bmQ6IFwiIzAwMDAzZlwiO1xuICogfVxuICovXG5cbmZ1bmN0aW9uIHNoYWRlKHBlcmNlbnRhZ2UsIGNvbG9yKSB7XG4gIGlmIChjb2xvciA9PT0gJ3RyYW5zcGFyZW50JykgcmV0dXJuIGNvbG9yO1xuICByZXR1cm4gbWl4JDEocGFyc2VGbG9hdChwZXJjZW50YWdlKSwgJ3JnYigwLCAwLCAwKScsIGNvbG9yKTtcbn0gLy8gcHJldHRpZXItaWdub3JlXG5cblxudmFyIGN1cnJpZWRTaGFkZSA9IC8qI19fUFVSRV9fKi9jdXJyeVxuLyogOjo8bnVtYmVyIHwgc3RyaW5nLCBzdHJpbmcsIHN0cmluZz4gKi9cbihzaGFkZSk7XG52YXIgY3VycmllZFNoYWRlJDEgPSBjdXJyaWVkU2hhZGU7XG5cbi8qKlxuICogVGludHMgYSBjb2xvciBieSBtaXhpbmcgaXQgd2l0aCB3aGl0ZS4gYHRpbnRgIGNhbiBwcm9kdWNlXG4gKiBodWUgc2hpZnRzLCB3aGVyZSBhcyBgbGlnaHRlbmAgbWFuaXB1bGF0ZXMgdGhlIGx1bWluYW5jZSBjaGFubmVsIGFuZCB0aGVyZWZvcmVcbiAqIGRvZXNuJ3QgcHJvZHVjZSBodWUgc2hpZnRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIGJhY2tncm91bmQ6IHRpbnQoMC4yNSwgJyMwMGYnKVxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICBiYWNrZ3JvdW5kOiAke3RpbnQoMC4yNSwgJyMwMGYnKX07XG4gKiBgXG4gKlxuICogLy8gQ1NTIGluIEpTIE91dHB1dFxuICpcbiAqIGVsZW1lbnQge1xuICogICBiYWNrZ3JvdW5kOiBcIiNiZmJmZmZcIjtcbiAqIH1cbiAqL1xuXG5mdW5jdGlvbiB0aW50KHBlcmNlbnRhZ2UsIGNvbG9yKSB7XG4gIGlmIChjb2xvciA9PT0gJ3RyYW5zcGFyZW50JykgcmV0dXJuIGNvbG9yO1xuICByZXR1cm4gbWl4JDEocGFyc2VGbG9hdChwZXJjZW50YWdlKSwgJ3JnYigyNTUsIDI1NSwgMjU1KScsIGNvbG9yKTtcbn0gLy8gcHJldHRpZXItaWdub3JlXG5cblxudmFyIGN1cnJpZWRUaW50ID0gLyojX19QVVJFX18qL2N1cnJ5XG4vKiA6OjxudW1iZXIgfCBzdHJpbmcsIHN0cmluZywgc3RyaW5nPiAqL1xuKHRpbnQpO1xudmFyIGN1cnJpZWRUaW50JDEgPSBjdXJyaWVkVGludDtcblxuLyoqXG4gKiBEZWNyZWFzZXMgdGhlIG9wYWNpdHkgb2YgYSBjb2xvci4gSXRzIHJhbmdlIGZvciB0aGUgYW1vdW50IGlzIGJldHdlZW4gMCB0byAxLlxuICpcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudGl6ZSgwLjEsICcjZmZmJyksXG4gKiAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50aXplKDAuMiwgJ2hzbCgwLCAwJSwgMTAwJSknKSxcbiAqICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnRpemUoJzAuNScsICdyZ2JhKDI1NSwgMCwgMCwgMC44KScpLFxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICBiYWNrZ3JvdW5kOiAke3RyYW5zcGFyZW50aXplKDAuMSwgJyNmZmYnKX07XG4gKiAgIGJhY2tncm91bmQ6ICR7dHJhbnNwYXJlbnRpemUoMC4yLCAnaHNsKDAsIDAlLCAxMDAlKScpfTtcbiAqICAgYmFja2dyb3VuZDogJHt0cmFuc3BhcmVudGl6ZSgnMC41JywgJ3JnYmEoMjU1LCAwLCAwLCAwLjgpJyl9O1xuICogYFxuICpcbiAqIC8vIENTUyBpbiBKUyBPdXRwdXRcbiAqXG4gKiBlbGVtZW50IHtcbiAqICAgYmFja2dyb3VuZDogXCJyZ2JhKDI1NSwyNTUsMjU1LDAuOSlcIjtcbiAqICAgYmFja2dyb3VuZDogXCJyZ2JhKDI1NSwyNTUsMjU1LDAuOClcIjtcbiAqICAgYmFja2dyb3VuZDogXCJyZ2JhKDI1NSwwLDAsMC4zKVwiO1xuICogfVxuICovXG5cbmZ1bmN0aW9uIHRyYW5zcGFyZW50aXplKGFtb3VudCwgY29sb3IpIHtcbiAgaWYgKGNvbG9yID09PSAndHJhbnNwYXJlbnQnKSByZXR1cm4gY29sb3I7XG4gIHZhciBwYXJzZWRDb2xvciA9IHBhcnNlVG9SZ2IoY29sb3IpO1xuICB2YXIgYWxwaGEgPSB0eXBlb2YgcGFyc2VkQ29sb3IuYWxwaGEgPT09ICdudW1iZXInID8gcGFyc2VkQ29sb3IuYWxwaGEgOiAxO1xuXG4gIHZhciBjb2xvcldpdGhBbHBoYSA9IF9leHRlbmRzKHt9LCBwYXJzZWRDb2xvciwge1xuICAgIGFscGhhOiBndWFyZCgwLCAxLCArKGFscGhhICogMTAwIC0gcGFyc2VGbG9hdChhbW91bnQpICogMTAwKS50b0ZpeGVkKDIpIC8gMTAwKVxuICB9KTtcblxuICByZXR1cm4gcmdiYShjb2xvcldpdGhBbHBoYSk7XG59IC8vIHByZXR0aWVyLWlnbm9yZVxuXG5cbnZhciBjdXJyaWVkVHJhbnNwYXJlbnRpemUgPSAvKiNfX1BVUkVfXyovY3Vycnlcbi8qIDo6PG51bWJlciB8IHN0cmluZywgc3RyaW5nLCBzdHJpbmc+ICovXG4odHJhbnNwYXJlbnRpemUpO1xudmFyIGN1cnJpZWRUcmFuc3BhcmVudGl6ZSQxID0gY3VycmllZFRyYW5zcGFyZW50aXplO1xuXG4vKipcbiAqIFNob3J0aGFuZCBmb3IgZWFzaWx5IHNldHRpbmcgdGhlIGFuaW1hdGlvbiBwcm9wZXJ0eS4gQWxsb3dzIGVpdGhlciBtdWx0aXBsZSBhcnJheXMgd2l0aCBhbmltYXRpb25zXG4gKiBvciBhIHNpbmdsZSBhbmltYXRpb24gc3ByZWFkIG92ZXIgdGhlIGFyZ3VtZW50cy5cbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIC4uLmFuaW1hdGlvbihbJ3JvdGF0ZScsICcxcycsICdlYXNlLWluLW91dCddLCBbJ2NvbG9yY2hhbmdlJywgJzJzJ10pXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgICR7YW5pbWF0aW9uKFsncm90YXRlJywgJzFzJywgJ2Vhc2UtaW4tb3V0J10sIFsnY29sb3JjaGFuZ2UnLCAnMnMnXSl9XG4gKiBgXG4gKlxuICogLy8gQ1NTIGFzIEpTIE91dHB1dFxuICpcbiAqIGRpdiB7XG4gKiAgICdhbmltYXRpb24nOiAncm90YXRlIDFzIGVhc2UtaW4tb3V0LCBjb2xvcmNoYW5nZSAycydcbiAqIH1cbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIC4uLmFuaW1hdGlvbigncm90YXRlJywgJzFzJywgJ2Vhc2UtaW4tb3V0JylcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgJHthbmltYXRpb24oJ3JvdGF0ZScsICcxcycsICdlYXNlLWluLW91dCcpfVxuICogYFxuICpcbiAqIC8vIENTUyBhcyBKUyBPdXRwdXRcbiAqXG4gKiBkaXYge1xuICogICAnYW5pbWF0aW9uJzogJ3JvdGF0ZSAxcyBlYXNlLWluLW91dCdcbiAqIH1cbiAqL1xuZnVuY3Rpb24gYW5pbWF0aW9uKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgLy8gQWxsb3cgc2luZ2xlIG9yIG11bHRpcGxlIGFuaW1hdGlvbnMgcGFzc2VkXG4gIHZhciBtdWx0aU1vZGUgPSBBcnJheS5pc0FycmF5KGFyZ3NbMF0pO1xuXG4gIGlmICghbXVsdGlNb2RlICYmIGFyZ3MubGVuZ3RoID4gOCkge1xuICAgIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDY0KTtcbiAgfVxuXG4gIHZhciBjb2RlID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgIGlmIChtdWx0aU1vZGUgJiYgIUFycmF5LmlzQXJyYXkoYXJnKSB8fCAhbXVsdGlNb2RlICYmIEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFBvbGlzaGVkRXJyb3IoNjUpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykgJiYgYXJnLmxlbmd0aCA+IDgpIHtcbiAgICAgIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDY2KTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpID8gYXJnLmpvaW4oJyAnKSA6IGFyZztcbiAgfSkuam9pbignLCAnKTtcbiAgcmV0dXJuIHtcbiAgICBhbmltYXRpb246IGNvZGVcbiAgfTtcbn1cblxuLyoqXG4gKiBTaG9ydGhhbmQgdGhhdCBhY2NlcHRzIGFueSBudW1iZXIgb2YgYmFja2dyb3VuZEltYWdlIHZhbHVlcyBhcyBwYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBhIHNpbmdsZSBiYWNrZ3JvdW5kIHN0YXRlbWVudC5cbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIC4uLmJhY2tncm91bmRJbWFnZXMoJ3VybChcIi9pbWFnZS9iYWNrZ3JvdW5kLmpwZ1wiKScsICdsaW5lYXItZ3JhZGllbnQocmVkLCBncmVlbiknKVxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICAke2JhY2tncm91bmRJbWFnZXMoJ3VybChcIi9pbWFnZS9iYWNrZ3JvdW5kLmpwZ1wiKScsICdsaW5lYXItZ3JhZGllbnQocmVkLCBncmVlbiknKX1cbiAqIGBcbiAqXG4gKiAvLyBDU1MgYXMgSlMgT3V0cHV0XG4gKlxuICogZGl2IHtcbiAqICAgJ2JhY2tncm91bmRJbWFnZSc6ICd1cmwoXCIvaW1hZ2UvYmFja2dyb3VuZC5qcGdcIiksIGxpbmVhci1ncmFkaWVudChyZWQsIGdyZWVuKSdcbiAqIH1cbiAqL1xuZnVuY3Rpb24gYmFja2dyb3VuZEltYWdlcygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHByb3BlcnRpZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcHJvcGVydGllc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmFja2dyb3VuZEltYWdlOiBwcm9wZXJ0aWVzLmpvaW4oJywgJylcbiAgfTtcbn1cblxuLyoqXG4gKiBTaG9ydGhhbmQgdGhhdCBhY2NlcHRzIGFueSBudW1iZXIgb2YgYmFja2dyb3VuZCB2YWx1ZXMgYXMgcGFyYW1ldGVycyBmb3IgY3JlYXRpbmcgYSBzaW5nbGUgYmFja2dyb3VuZCBzdGF0ZW1lbnQuXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICAuLi5iYWNrZ3JvdW5kcygndXJsKFwiL2ltYWdlL2JhY2tncm91bmQuanBnXCIpJywgJ2xpbmVhci1ncmFkaWVudChyZWQsIGdyZWVuKScsICdjZW50ZXIgbm8tcmVwZWF0JylcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgJHtiYWNrZ3JvdW5kcygndXJsKFwiL2ltYWdlL2JhY2tncm91bmQuanBnXCIpJywgJ2xpbmVhci1ncmFkaWVudChyZWQsIGdyZWVuKScsICdjZW50ZXIgbm8tcmVwZWF0Jyl9XG4gKiBgXG4gKlxuICogLy8gQ1NTIGFzIEpTIE91dHB1dFxuICpcbiAqIGRpdiB7XG4gKiAgICdiYWNrZ3JvdW5kJzogJ3VybChcIi9pbWFnZS9iYWNrZ3JvdW5kLmpwZ1wiKSwgbGluZWFyLWdyYWRpZW50KHJlZCwgZ3JlZW4pLCBjZW50ZXIgbm8tcmVwZWF0J1xuICogfVxuICovXG5mdW5jdGlvbiBiYWNrZ3JvdW5kcygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHByb3BlcnRpZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcHJvcGVydGllc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmFja2dyb3VuZDogcHJvcGVydGllcy5qb2luKCcsICcpXG4gIH07XG59XG5cbnZhciBzaWRlTWFwID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXTtcbi8qKlxuICogU2hvcnRoYW5kIGZvciB0aGUgYm9yZGVyIHByb3BlcnR5IHRoYXQgc3BsaXRzIG91dCBpbmRpdmlkdWFsIHByb3BlcnRpZXMgZm9yIHVzZSB3aXRoIHRvb2xzIGxpa2UgRmVsYSBhbmQgU3R5bGV0cm9uLiBBIHNpZGUga2V5d29yZCBjYW4gb3B0aW9uYWxseSBiZSBwYXNzZWQgdG8gdGFyZ2V0IG9ubHkgb25lIHNpZGUncyBib3JkZXIgcHJvcGVydGllcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICAuLi5ib3JkZXIoJzFweCcsICdzb2xpZCcsICdyZWQnKVxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICAke2JvcmRlcignMXB4JywgJ3NvbGlkJywgJ3JlZCcpfVxuICogYFxuICpcbiAqIC8vIENTUyBhcyBKUyBPdXRwdXRcbiAqXG4gKiBkaXYge1xuICogICAnYm9yZGVyQ29sb3InOiAncmVkJyxcbiAqICAgJ2JvcmRlclN0eWxlJzogJ3NvbGlkJyxcbiAqICAgJ2JvcmRlcldpZHRoJzogYDFweGAsXG4gKiB9XG4gKlxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICAuLi5ib3JkZXIoJ3RvcCcsICcxcHgnLCAnc29saWQnLCAncmVkJylcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgJHtib3JkZXIoJ3RvcCcsICcxcHgnLCAnc29saWQnLCAncmVkJyl9XG4gKiBgXG4gKlxuICogLy8gQ1NTIGFzIEpTIE91dHB1dFxuICpcbiAqIGRpdiB7XG4gKiAgICdib3JkZXJUb3BDb2xvcic6ICdyZWQnLFxuICogICAnYm9yZGVyVG9wU3R5bGUnOiAnc29saWQnLFxuICogICAnYm9yZGVyVG9wV2lkdGgnOiBgMXB4YCxcbiAqIH1cbiAqL1xuXG5mdW5jdGlvbiBib3JkZXIoc2lkZUtleXdvcmQpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHZhbHVlcyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgdmFsdWVzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2lkZUtleXdvcmQgPT09ICdzdHJpbmcnICYmIHNpZGVNYXAuaW5kZXhPZihzaWRlS2V5d29yZCkgPj0gMCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgcmV0dXJuIF9yZWYgPSB7fSwgX3JlZltcImJvcmRlclwiICsgY2FwaXRhbGl6ZVN0cmluZyhzaWRlS2V5d29yZCkgKyBcIldpZHRoXCJdID0gdmFsdWVzWzBdLCBfcmVmW1wiYm9yZGVyXCIgKyBjYXBpdGFsaXplU3RyaW5nKHNpZGVLZXl3b3JkKSArIFwiU3R5bGVcIl0gPSB2YWx1ZXNbMV0sIF9yZWZbXCJib3JkZXJcIiArIGNhcGl0YWxpemVTdHJpbmcoc2lkZUtleXdvcmQpICsgXCJDb2xvclwiXSA9IHZhbHVlc1syXSwgX3JlZjtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZXMudW5zaGlmdChzaWRlS2V5d29yZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcldpZHRoOiB2YWx1ZXNbMF0sXG4gICAgICBib3JkZXJTdHlsZTogdmFsdWVzWzFdLFxuICAgICAgYm9yZGVyQ29sb3I6IHZhbHVlc1syXVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBTaG9ydGhhbmQgdGhhdCBhY2NlcHRzIHVwIHRvIGZvdXIgdmFsdWVzLCBpbmNsdWRpbmcgbnVsbCB0byBza2lwIGEgdmFsdWUsIGFuZCBtYXBzIHRoZW0gdG8gdGhlaXIgcmVzcGVjdGl2ZSBkaXJlY3Rpb25zLlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgLi4uYm9yZGVyQ29sb3IoJ3JlZCcsICdncmVlbicsICdibHVlJywgJ3llbGxvdycpXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgICR7Ym9yZGVyQ29sb3IoJ3JlZCcsICdncmVlbicsICdibHVlJywgJ3llbGxvdycpfVxuICogYFxuICpcbiAqIC8vIENTUyBhcyBKUyBPdXRwdXRcbiAqXG4gKiBkaXYge1xuICogICAnYm9yZGVyVG9wQ29sb3InOiAncmVkJyxcbiAqICAgJ2JvcmRlclJpZ2h0Q29sb3InOiAnZ3JlZW4nLFxuICogICAnYm9yZGVyQm90dG9tQ29sb3InOiAnYmx1ZScsXG4gKiAgICdib3JkZXJMZWZ0Q29sb3InOiAneWVsbG93J1xuICogfVxuICovXG5mdW5jdGlvbiBib3JkZXJDb2xvcigpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHZhbHVlcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICB2YWx1ZXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gZGlyZWN0aW9uYWxQcm9wZXJ0eS5hcHBseSh2b2lkIDAsIFsnYm9yZGVyQ29sb3InXS5jb25jYXQodmFsdWVzKSk7XG59XG5cbi8qKlxuICogU2hvcnRoYW5kIHRoYXQgYWNjZXB0cyBhIHZhbHVlIGZvciBzaWRlIGFuZCBhIHZhbHVlIGZvciByYWRpdXMgYW5kIGFwcGxpZXMgdGhlIHJhZGl1cyB2YWx1ZSB0byBib3RoIGNvcm5lcnMgb2YgdGhlIHNpZGUuXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICAuLi5ib3JkZXJSYWRpdXMoJ3RvcCcsICc1cHgnKVxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICAke2JvcmRlclJhZGl1cygndG9wJywgJzVweCcpfVxuICogYFxuICpcbiAqIC8vIENTUyBhcyBKUyBPdXRwdXRcbiAqXG4gKiBkaXYge1xuICogICAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnOiAnNXB4JyxcbiAqICAgJ2JvcmRlclRvcExlZnRSYWRpdXMnOiAnNXB4JyxcbiAqIH1cbiAqL1xuZnVuY3Rpb24gYm9yZGVyUmFkaXVzKHNpZGUsIHJhZGl1cykge1xuICB2YXIgdXBwZXJjYXNlU2lkZSA9IGNhcGl0YWxpemVTdHJpbmcoc2lkZSk7XG5cbiAgaWYgKCFyYWRpdXMgJiYgcmFkaXVzICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFBvbGlzaGVkRXJyb3IoNjIpO1xuICB9XG5cbiAgaWYgKHVwcGVyY2FzZVNpZGUgPT09ICdUb3AnIHx8IHVwcGVyY2FzZVNpZGUgPT09ICdCb3R0b20nKSB7XG4gICAgdmFyIF9yZWY7XG5cbiAgICByZXR1cm4gX3JlZiA9IHt9LCBfcmVmW1wiYm9yZGVyXCIgKyB1cHBlcmNhc2VTaWRlICsgXCJSaWdodFJhZGl1c1wiXSA9IHJhZGl1cywgX3JlZltcImJvcmRlclwiICsgdXBwZXJjYXNlU2lkZSArIFwiTGVmdFJhZGl1c1wiXSA9IHJhZGl1cywgX3JlZjtcbiAgfVxuXG4gIGlmICh1cHBlcmNhc2VTaWRlID09PSAnTGVmdCcgfHwgdXBwZXJjYXNlU2lkZSA9PT0gJ1JpZ2h0Jykge1xuICAgIHZhciBfcmVmMjtcblxuICAgIHJldHVybiBfcmVmMiA9IHt9LCBfcmVmMltcImJvcmRlclRvcFwiICsgdXBwZXJjYXNlU2lkZSArIFwiUmFkaXVzXCJdID0gcmFkaXVzLCBfcmVmMltcImJvcmRlckJvdHRvbVwiICsgdXBwZXJjYXNlU2lkZSArIFwiUmFkaXVzXCJdID0gcmFkaXVzLCBfcmVmMjtcbiAgfVxuXG4gIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDYzKTtcbn1cblxuLyoqXG4gKiBTaG9ydGhhbmQgdGhhdCBhY2NlcHRzIHVwIHRvIGZvdXIgdmFsdWVzLCBpbmNsdWRpbmcgbnVsbCB0byBza2lwIGEgdmFsdWUsIGFuZCBtYXBzIHRoZW0gdG8gdGhlaXIgcmVzcGVjdGl2ZSBkaXJlY3Rpb25zLlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgLi4uYm9yZGVyU3R5bGUoJ3NvbGlkJywgJ2Rhc2hlZCcsICdkb3R0ZWQnLCAnZG91YmxlJylcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgJHtib3JkZXJTdHlsZSgnc29saWQnLCAnZGFzaGVkJywgJ2RvdHRlZCcsICdkb3VibGUnKX1cbiAqIGBcbiAqXG4gKiAvLyBDU1MgYXMgSlMgT3V0cHV0XG4gKlxuICogZGl2IHtcbiAqICAgJ2JvcmRlclRvcFN0eWxlJzogJ3NvbGlkJyxcbiAqICAgJ2JvcmRlclJpZ2h0U3R5bGUnOiAnZGFzaGVkJyxcbiAqICAgJ2JvcmRlckJvdHRvbVN0eWxlJzogJ2RvdHRlZCcsXG4gKiAgICdib3JkZXJMZWZ0U3R5bGUnOiAnZG91YmxlJ1xuICogfVxuICovXG5mdW5jdGlvbiBib3JkZXJTdHlsZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHZhbHVlcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICB2YWx1ZXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gZGlyZWN0aW9uYWxQcm9wZXJ0eS5hcHBseSh2b2lkIDAsIFsnYm9yZGVyU3R5bGUnXS5jb25jYXQodmFsdWVzKSk7XG59XG5cbi8qKlxuICogU2hvcnRoYW5kIHRoYXQgYWNjZXB0cyB1cCB0byBmb3VyIHZhbHVlcywgaW5jbHVkaW5nIG51bGwgdG8gc2tpcCBhIHZhbHVlLCBhbmQgbWFwcyB0aGVtIHRvIHRoZWlyIHJlc3BlY3RpdmUgZGlyZWN0aW9ucy5cbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIC4uLmJvcmRlcldpZHRoKCcxMnB4JywgJzI0cHgnLCAnMzZweCcsICc0OHB4JylcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgJHtib3JkZXJXaWR0aCgnMTJweCcsICcyNHB4JywgJzM2cHgnLCAnNDhweCcpfVxuICogYFxuICpcbiAqIC8vIENTUyBhcyBKUyBPdXRwdXRcbiAqXG4gKiBkaXYge1xuICogICAnYm9yZGVyVG9wV2lkdGgnOiAnMTJweCcsXG4gKiAgICdib3JkZXJSaWdodFdpZHRoJzogJzI0cHgnLFxuICogICAnYm9yZGVyQm90dG9tV2lkdGgnOiAnMzZweCcsXG4gKiAgICdib3JkZXJMZWZ0V2lkdGgnOiAnNDhweCdcbiAqIH1cbiAqL1xuZnVuY3Rpb24gYm9yZGVyV2lkdGgoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCB2YWx1ZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgdmFsdWVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIGRpcmVjdGlvbmFsUHJvcGVydHkuYXBwbHkodm9pZCAwLCBbJ2JvcmRlcldpZHRoJ10uY29uY2F0KHZhbHVlcykpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVNlbGVjdG9ycyh0ZW1wbGF0ZSwgc3RhdGUpIHtcbiAgdmFyIHN0YXRlU3VmZml4ID0gc3RhdGUgPyBcIjpcIiArIHN0YXRlIDogJyc7XG4gIHJldHVybiB0ZW1wbGF0ZShzdGF0ZVN1ZmZpeCk7XG59XG4vKipcbiAqIEZ1bmN0aW9uIGhlbHBlciB0aGF0IGFkZHMgYW4gYXJyYXkgb2Ygc3RhdGVzIHRvIGEgdGVtcGxhdGUgb2Ygc2VsZWN0b3JzLiBVc2VkIGluIHRleHRJbnB1dHMgYW5kIGJ1dHRvbnMuXG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gc3RhdGVmdWxTZWxlY3RvcnMoc3RhdGVzLCB0ZW1wbGF0ZSwgc3RhdGVNYXApIHtcbiAgaWYgKCF0ZW1wbGF0ZSkgdGhyb3cgbmV3IFBvbGlzaGVkRXJyb3IoNjcpO1xuICBpZiAoc3RhdGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGdlbmVyYXRlU2VsZWN0b3JzKHRlbXBsYXRlLCBudWxsKTtcbiAgdmFyIHNlbGVjdG9ycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHN0YXRlTWFwICYmIHN0YXRlTWFwLmluZGV4T2Yoc3RhdGVzW2ldKSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBQb2xpc2hlZEVycm9yKDY4KTtcbiAgICB9XG5cbiAgICBzZWxlY3RvcnMucHVzaChnZW5lcmF0ZVNlbGVjdG9ycyh0ZW1wbGF0ZSwgc3RhdGVzW2ldKSk7XG4gIH1cblxuICBzZWxlY3RvcnMgPSBzZWxlY3RvcnMuam9pbignLCcpO1xuICByZXR1cm4gc2VsZWN0b3JzO1xufVxuXG52YXIgc3RhdGVNYXAkMSA9IFt1bmRlZmluZWQsIG51bGwsICdhY3RpdmUnLCAnZm9jdXMnLCAnaG92ZXInXTtcblxuZnVuY3Rpb24gdGVtcGxhdGUkMShzdGF0ZSkge1xuICByZXR1cm4gXCJidXR0b25cIiArIHN0YXRlICsgXCIsXFxuICBpbnB1dFt0eXBlPVxcXCJidXR0b25cXFwiXVwiICsgc3RhdGUgKyBcIixcXG4gIGlucHV0W3R5cGU9XFxcInJlc2V0XFxcIl1cIiArIHN0YXRlICsgXCIsXFxuICBpbnB1dFt0eXBlPVxcXCJzdWJtaXRcXFwiXVwiICsgc3RhdGU7XG59XG4vKipcbiAqIFBvcHVsYXRlcyBzZWxlY3RvcnMgdGhhdCB0YXJnZXQgYWxsIGJ1dHRvbnMuIFlvdSBjYW4gcGFzcyBvcHRpb25hbCBzdGF0ZXMgdG8gYXBwZW5kIHRvIHRoZSBzZWxlY3RvcnMuXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICBbYnV0dG9ucygnYWN0aXZlJyldOiB7XG4gKiAgICAgJ2JvcmRlcic6ICdub25lJ1xuICogICB9XG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgID4gJHtidXR0b25zKCdhY3RpdmUnKX0ge1xuICogICAgIGJvcmRlcjogbm9uZTtcbiAqICAgfVxuICogYFxuICpcbiAqIC8vIENTUyBpbiBKUyBPdXRwdXRcbiAqXG4gKiAgJ2J1dHRvbjphY3RpdmUsXG4gKiAgJ2lucHV0W3R5cGU9XCJidXR0b25cIl06YWN0aXZlLFxuICogICdpbnB1dFt0eXBlPVxcXCJyZXNldFxcXCJdOmFjdGl2ZSxcbiAqICAnaW5wdXRbdHlwZT1cXFwic3VibWl0XFxcIl06YWN0aXZlOiB7XG4gKiAgICdib3JkZXInOiAnbm9uZSdcbiAqIH1cbiAqL1xuXG5cbmZ1bmN0aW9uIGJ1dHRvbnMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBzdGF0ZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgc3RhdGVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlZnVsU2VsZWN0b3JzKHN0YXRlcywgdGVtcGxhdGUkMSwgc3RhdGVNYXAkMSk7XG59XG5cbi8qKlxuICogU2hvcnRoYW5kIHRoYXQgYWNjZXB0cyB1cCB0byBmb3VyIHZhbHVlcywgaW5jbHVkaW5nIG51bGwgdG8gc2tpcCBhIHZhbHVlLCBhbmQgbWFwcyB0aGVtIHRvIHRoZWlyIHJlc3BlY3RpdmUgZGlyZWN0aW9ucy5cbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIC4uLm1hcmdpbignMTJweCcsICcyNHB4JywgJzM2cHgnLCAnNDhweCcpXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgICR7bWFyZ2luKCcxMnB4JywgJzI0cHgnLCAnMzZweCcsICc0OHB4Jyl9XG4gKiBgXG4gKlxuICogLy8gQ1NTIGFzIEpTIE91dHB1dFxuICpcbiAqIGRpdiB7XG4gKiAgICdtYXJnaW5Ub3AnOiAnMTJweCcsXG4gKiAgICdtYXJnaW5SaWdodCc6ICcyNHB4JyxcbiAqICAgJ21hcmdpbkJvdHRvbSc6ICczNnB4JyxcbiAqICAgJ21hcmdpbkxlZnQnOiAnNDhweCdcbiAqIH1cbiAqL1xuZnVuY3Rpb24gbWFyZ2luKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgdmFsdWVzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHZhbHVlc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBkaXJlY3Rpb25hbFByb3BlcnR5LmFwcGx5KHZvaWQgMCwgWydtYXJnaW4nXS5jb25jYXQodmFsdWVzKSk7XG59XG5cbi8qKlxuICogU2hvcnRoYW5kIHRoYXQgYWNjZXB0cyB1cCB0byBmb3VyIHZhbHVlcywgaW5jbHVkaW5nIG51bGwgdG8gc2tpcCBhIHZhbHVlLCBhbmQgbWFwcyB0aGVtIHRvIHRoZWlyIHJlc3BlY3RpdmUgZGlyZWN0aW9ucy5cbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIC4uLnBhZGRpbmcoJzEycHgnLCAnMjRweCcsICczNnB4JywgJzQ4cHgnKVxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICAke3BhZGRpbmcoJzEycHgnLCAnMjRweCcsICczNnB4JywgJzQ4cHgnKX1cbiAqIGBcbiAqXG4gKiAvLyBDU1MgYXMgSlMgT3V0cHV0XG4gKlxuICogZGl2IHtcbiAqICAgJ3BhZGRpbmdUb3AnOiAnMTJweCcsXG4gKiAgICdwYWRkaW5nUmlnaHQnOiAnMjRweCcsXG4gKiAgICdwYWRkaW5nQm90dG9tJzogJzM2cHgnLFxuICogICAncGFkZGluZ0xlZnQnOiAnNDhweCdcbiAqIH1cbiAqL1xuZnVuY3Rpb24gcGFkZGluZygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHZhbHVlcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICB2YWx1ZXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gZGlyZWN0aW9uYWxQcm9wZXJ0eS5hcHBseSh2b2lkIDAsIFsncGFkZGluZyddLmNvbmNhdCh2YWx1ZXMpKTtcbn1cblxudmFyIHBvc2l0aW9uTWFwID0gWydhYnNvbHV0ZScsICdmaXhlZCcsICdyZWxhdGl2ZScsICdzdGF0aWMnLCAnc3RpY2t5J107XG4vKipcbiAqIFNob3J0aGFuZCBhY2NlcHRzIHVwIHRvIGZpdmUgdmFsdWVzLCBpbmNsdWRpbmcgbnVsbCB0byBza2lwIGEgdmFsdWUsIGFuZCBtYXBzIHRoZW0gdG8gdGhlaXIgcmVzcGVjdGl2ZSBkaXJlY3Rpb25zLiBUaGUgZmlyc3QgdmFsdWUgY2FuIG9wdGlvbmFsbHkgYmUgYSBwb3NpdGlvbiBrZXl3b3JkLlxuICogQGV4YW1wbGVcbiAqIC8vIFN0eWxlcyBhcyBvYmplY3QgdXNhZ2VcbiAqIGNvbnN0IHN0eWxlcyA9IHtcbiAqICAgLi4ucG9zaXRpb24oJzEycHgnLCAnMjRweCcsICczNnB4JywgJzQ4cHgnKVxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICAke3Bvc2l0aW9uKCcxMnB4JywgJzI0cHgnLCAnMzZweCcsICc0OHB4Jyl9XG4gKiBgXG4gKlxuICogLy8gQ1NTIGFzIEpTIE91dHB1dFxuICpcbiAqIGRpdiB7XG4gKiAgICd0b3AnOiAnMTJweCcsXG4gKiAgICdyaWdodCc6ICcyNHB4JyxcbiAqICAgJ2JvdHRvbSc6ICczNnB4JyxcbiAqICAgJ2xlZnQnOiAnNDhweCdcbiAqIH1cbiAqXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIC4uLnBvc2l0aW9uKCdhYnNvbHV0ZScsICcxMnB4JywgJzI0cHgnLCAnMzZweCcsICc0OHB4JylcbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgJHtwb3NpdGlvbignYWJzb2x1dGUnLCAnMTJweCcsICcyNHB4JywgJzM2cHgnLCAnNDhweCcpfVxuICogYFxuICpcbiAqIC8vIENTUyBhcyBKUyBPdXRwdXRcbiAqXG4gKiBkaXYge1xuICogICAncG9zaXRpb24nOiAnYWJzb2x1dGUnLFxuICogICAndG9wJzogJzEycHgnLFxuICogICAncmlnaHQnOiAnMjRweCcsXG4gKiAgICdib3R0b20nOiAnMzZweCcsXG4gKiAgICdsZWZ0JzogJzQ4cHgnXG4gKiB9XG4gKi9cblxuZnVuY3Rpb24gcG9zaXRpb24oZmlyc3RWYWx1ZSkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgdmFsdWVzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICB2YWx1ZXNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKHBvc2l0aW9uTWFwLmluZGV4T2YoZmlyc3RWYWx1ZSkgPj0gMCAmJiBmaXJzdFZhbHVlKSB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBkaXJlY3Rpb25hbFByb3BlcnR5LmFwcGx5KHZvaWQgMCwgWycnXS5jb25jYXQodmFsdWVzKSksIHtcbiAgICAgIHBvc2l0aW9uOiBmaXJzdFZhbHVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRpcmVjdGlvbmFsUHJvcGVydHkuYXBwbHkodm9pZCAwLCBbJycsIGZpcnN0VmFsdWVdLmNvbmNhdCh2YWx1ZXMpKTtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0aGFuZCB0byBzZXQgdGhlIGhlaWdodCBhbmQgd2lkdGggcHJvcGVydGllcyBpbiBhIHNpbmdsZSBzdGF0ZW1lbnQuXG4gKiBAZXhhbXBsZVxuICogLy8gU3R5bGVzIGFzIG9iamVjdCB1c2FnZVxuICogY29uc3Qgc3R5bGVzID0ge1xuICogICAuLi5zaXplKCczMDBweCcsICcyNTBweCcpXG4gKiB9XG4gKlxuICogLy8gc3R5bGVkLWNvbXBvbmVudHMgdXNhZ2VcbiAqIGNvbnN0IGRpdiA9IHN0eWxlZC5kaXZgXG4gKiAgICR7c2l6ZSgnMzAwcHgnLCAnMjUwcHgnKX1cbiAqIGBcbiAqXG4gKiAvLyBDU1MgYXMgSlMgT3V0cHV0XG4gKlxuICogZGl2IHtcbiAqICAgJ2hlaWdodCc6ICczMDBweCcsXG4gKiAgICd3aWR0aCc6ICcyNTBweCcsXG4gKiB9XG4gKi9cbmZ1bmN0aW9uIHNpemUoaGVpZ2h0LCB3aWR0aCkge1xuICBpZiAod2lkdGggPT09IHZvaWQgMCkge1xuICAgIHdpZHRoID0gaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB3aWR0aDogd2lkdGhcbiAgfTtcbn1cblxudmFyIHN0YXRlTWFwID0gW3VuZGVmaW5lZCwgbnVsbCwgJ2FjdGl2ZScsICdmb2N1cycsICdob3ZlciddO1xuXG5mdW5jdGlvbiB0ZW1wbGF0ZShzdGF0ZSkge1xuICByZXR1cm4gXCJpbnB1dFt0eXBlPVxcXCJjb2xvclxcXCJdXCIgKyBzdGF0ZSArIFwiLFxcbiAgICBpbnB1dFt0eXBlPVxcXCJkYXRlXFxcIl1cIiArIHN0YXRlICsgXCIsXFxuICAgIGlucHV0W3R5cGU9XFxcImRhdGV0aW1lXFxcIl1cIiArIHN0YXRlICsgXCIsXFxuICAgIGlucHV0W3R5cGU9XFxcImRhdGV0aW1lLWxvY2FsXFxcIl1cIiArIHN0YXRlICsgXCIsXFxuICAgIGlucHV0W3R5cGU9XFxcImVtYWlsXFxcIl1cIiArIHN0YXRlICsgXCIsXFxuICAgIGlucHV0W3R5cGU9XFxcIm1vbnRoXFxcIl1cIiArIHN0YXRlICsgXCIsXFxuICAgIGlucHV0W3R5cGU9XFxcIm51bWJlclxcXCJdXCIgKyBzdGF0ZSArIFwiLFxcbiAgICBpbnB1dFt0eXBlPVxcXCJwYXNzd29yZFxcXCJdXCIgKyBzdGF0ZSArIFwiLFxcbiAgICBpbnB1dFt0eXBlPVxcXCJzZWFyY2hcXFwiXVwiICsgc3RhdGUgKyBcIixcXG4gICAgaW5wdXRbdHlwZT1cXFwidGVsXFxcIl1cIiArIHN0YXRlICsgXCIsXFxuICAgIGlucHV0W3R5cGU9XFxcInRleHRcXFwiXVwiICsgc3RhdGUgKyBcIixcXG4gICAgaW5wdXRbdHlwZT1cXFwidGltZVxcXCJdXCIgKyBzdGF0ZSArIFwiLFxcbiAgICBpbnB1dFt0eXBlPVxcXCJ1cmxcXFwiXVwiICsgc3RhdGUgKyBcIixcXG4gICAgaW5wdXRbdHlwZT1cXFwid2Vla1xcXCJdXCIgKyBzdGF0ZSArIFwiLFxcbiAgICBpbnB1dDpub3QoW3R5cGVdKVwiICsgc3RhdGUgKyBcIixcXG4gICAgdGV4dGFyZWFcIiArIHN0YXRlO1xufVxuLyoqXG4gKiBQb3B1bGF0ZXMgc2VsZWN0b3JzIHRoYXQgdGFyZ2V0IGFsbCB0ZXh0IGlucHV0cy4gWW91IGNhbiBwYXNzIG9wdGlvbmFsIHN0YXRlcyB0byBhcHBlbmQgdG8gdGhlIHNlbGVjdG9ycy5cbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIFt0ZXh0SW5wdXRzKCdhY3RpdmUnKV06IHtcbiAqICAgICAnYm9yZGVyJzogJ25vbmUnXG4gKiAgIH1cbiAqIH1cbiAqXG4gKiAvLyBzdHlsZWQtY29tcG9uZW50cyB1c2FnZVxuICogY29uc3QgZGl2ID0gc3R5bGVkLmRpdmBcbiAqICAgPiAke3RleHRJbnB1dHMoJ2FjdGl2ZScpfSB7XG4gKiAgICAgYm9yZGVyOiBub25lO1xuICogICB9XG4gKiBgXG4gKlxuICogLy8gQ1NTIGluIEpTIE91dHB1dFxuICpcbiAqICAnaW5wdXRbdHlwZT1cImNvbG9yXCJdOmFjdGl2ZSxcbiAqICBpbnB1dFt0eXBlPVwiZGF0ZVwiXTphY3RpdmUsXG4gKiAgaW5wdXRbdHlwZT1cImRhdGV0aW1lXCJdOmFjdGl2ZSxcbiAqICBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl06YWN0aXZlLFxuICogIGlucHV0W3R5cGU9XCJlbWFpbFwiXTphY3RpdmUsXG4gKiAgaW5wdXRbdHlwZT1cIm1vbnRoXCJdOmFjdGl2ZSxcbiAqICBpbnB1dFt0eXBlPVwibnVtYmVyXCJdOmFjdGl2ZSxcbiAqICBpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl06YWN0aXZlLFxuICogIGlucHV0W3R5cGU9XCJzZWFyY2hcIl06YWN0aXZlLFxuICogIGlucHV0W3R5cGU9XCJ0ZWxcIl06YWN0aXZlLFxuICogIGlucHV0W3R5cGU9XCJ0ZXh0XCJdOmFjdGl2ZSxcbiAqICBpbnB1dFt0eXBlPVwidGltZVwiXTphY3RpdmUsXG4gKiAgaW5wdXRbdHlwZT1cInVybFwiXTphY3RpdmUsXG4gKiAgaW5wdXRbdHlwZT1cIndlZWtcIl06YWN0aXZlLFxuICogIGlucHV0Om5vdChbdHlwZV0pOmFjdGl2ZSxcbiAqICB0ZXh0YXJlYTphY3RpdmUnOiB7XG4gKiAgICdib3JkZXInOiAnbm9uZSdcbiAqIH1cbiAqL1xuXG5cbmZ1bmN0aW9uIHRleHRJbnB1dHMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBzdGF0ZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgc3RhdGVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlZnVsU2VsZWN0b3JzKHN0YXRlcywgdGVtcGxhdGUsIHN0YXRlTWFwKTtcbn1cblxuLyoqXG4gKiBBY2NlcHRzIGFueSBudW1iZXIgb2YgdHJhbnNpdGlvbiB2YWx1ZXMgYXMgcGFyYW1ldGVycyBmb3IgY3JlYXRpbmcgYSBzaW5nbGUgdHJhbnNpdGlvbiBzdGF0ZW1lbnQuIFlvdSBtYXkgYWxzbyBwYXNzIGFuIGFycmF5IG9mIHByb3BlcnRpZXMgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGFwcGx5IHRoZSBzYW1lIHRyYW5zaXRpb24gdmFsdWVzIHRvIChzZWNvbmQgcGFyYW1ldGVyKS5cbiAqIEBleGFtcGxlXG4gKiAvLyBTdHlsZXMgYXMgb2JqZWN0IHVzYWdlXG4gKiBjb25zdCBzdHlsZXMgPSB7XG4gKiAgIC4uLnRyYW5zaXRpb25zKCdvcGFjaXR5IDEuMHMgZWFzZS1pbiAwcycsICd3aWR0aCAyLjBzIGVhc2UtaW4gMnMnKSxcbiAqICAgLi4udHJhbnNpdGlvbnMoWydjb2xvcicsICdiYWNrZ3JvdW5kLWNvbG9yJ10sICcyLjBzIGVhc2UtaW4gMnMnKVxuICogfVxuICpcbiAqIC8vIHN0eWxlZC1jb21wb25lbnRzIHVzYWdlXG4gKiBjb25zdCBkaXYgPSBzdHlsZWQuZGl2YFxuICogICAke3RyYW5zaXRpb25zKCdvcGFjaXR5IDEuMHMgZWFzZS1pbiAwcycsICd3aWR0aCAyLjBzIGVhc2UtaW4gMnMnKX07XG4gKiAgICR7dHJhbnNpdGlvbnMoWydjb2xvcicsICdiYWNrZ3JvdW5kLWNvbG9yJ10sICcyLjBzIGVhc2UtaW4gMnMnKSx9O1xuICogYFxuICpcbiAqIC8vIENTUyBhcyBKUyBPdXRwdXRcbiAqXG4gKiBkaXYge1xuICogICAndHJhbnNpdGlvbic6ICdvcGFjaXR5IDEuMHMgZWFzZS1pbiAwcywgd2lkdGggMi4wcyBlYXNlLWluIDJzJ1xuICogICAndHJhbnNpdGlvbic6ICdjb2xvciAyLjBzIGVhc2UtaW4gMnMsIGJhY2tncm91bmQtY29sb3IgMi4wcyBlYXNlLWluIDJzJyxcbiAqIH1cbiAqL1xuXG5mdW5jdGlvbiB0cmFuc2l0aW9ucygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHByb3BlcnRpZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcHJvcGVydGllc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnRpZXNbMF0pICYmIHByb3BlcnRpZXMubGVuZ3RoID09PSAyKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvcGVydGllc1sxXTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgUG9saXNoZWRFcnJvcig2MSk7XG4gICAgfVxuXG4gICAgdmFyIHRyYW5zaXRpb25zU3RyaW5nID0gcHJvcGVydGllc1swXS5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gcHJvcGVydHkgKyBcIiBcIiArIHZhbHVlO1xuICAgIH0pLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zaXRpb25zU3RyaW5nXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHJhbnNpdGlvbjogcHJvcGVydGllcy5qb2luKCcsICcpXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgeyBjdXJyaWVkQWRqdXN0SHVlJDEgYXMgYWRqdXN0SHVlLCBhbmltYXRpb24sIGJhY2tncm91bmRJbWFnZXMsIGJhY2tncm91bmRzLCBiZXR3ZWVuLCBib3JkZXIsIGJvcmRlckNvbG9yLCBib3JkZXJSYWRpdXMsIGJvcmRlclN0eWxlLCBib3JkZXJXaWR0aCwgYnV0dG9ucywgY2xlYXJGaXgsIGNvbXBsZW1lbnQsIGNvdmVyLCBjc3NWYXIsIGN1cnJpZWREYXJrZW4kMSBhcyBkYXJrZW4sIGN1cnJpZWREZXNhdHVyYXRlJDEgYXMgZGVzYXR1cmF0ZSwgZGlyZWN0aW9uYWxQcm9wZXJ0eSwgZWFzZUluLCBlYXNlSW5PdXQsIGVhc2VPdXQsIGVsbGlwc2lzLCBlbSQxIGFzIGVtLCBmbHVpZFJhbmdlLCBmb250RmFjZSwgZ2V0Q29udHJhc3QsIGdldEx1bWluYW5jZSwgZ2V0VmFsdWVBbmRVbml0LCBncmF5c2NhbGUsIGhpRFBJLCBoaWRlVGV4dCwgaGlkZVZpc3VhbGx5LCBoc2wsIGhzbFRvQ29sb3JTdHJpbmcsIGhzbGEsIGltcG9ydGFudCwgaW52ZXJ0LCBjdXJyaWVkTGlnaHRlbiQxIGFzIGxpZ2h0ZW4sIGxpbmVhckdyYWRpZW50LCBtYXJnaW4sIG1hdGgsIG1lZXRzQ29udHJhc3RHdWlkZWxpbmVzLCBtaXgkMSBhcyBtaXgsIG1vZHVsYXJTY2FsZSwgbm9ybWFsaXplLCBjdXJyaWVkT3BhY2lmeSQxIGFzIG9wYWNpZnksIHBhZGRpbmcsIHBhcnNlVG9Ic2wsIHBhcnNlVG9SZ2IsIHBvc2l0aW9uLCByYWRpYWxHcmFkaWVudCwgcmVhZGFibGVDb2xvciwgcmVtJDEgYXMgcmVtLCByZW1Ub1B4LCByZXRpbmFJbWFnZSwgcmdiLCByZ2JUb0NvbG9yU3RyaW5nLCByZ2JhLCBjdXJyaWVkU2F0dXJhdGUkMSBhcyBzYXR1cmF0ZSwgY3VycmllZFNldEh1ZSQxIGFzIHNldEh1ZSwgY3VycmllZFNldExpZ2h0bmVzcyQxIGFzIHNldExpZ2h0bmVzcywgY3VycmllZFNldFNhdHVyYXRpb24kMSBhcyBzZXRTYXR1cmF0aW9uLCBjdXJyaWVkU2hhZGUkMSBhcyBzaGFkZSwgc2l6ZSwgc3RyaXBVbml0LCB0ZXh0SW5wdXRzLCB0aW1pbmdGdW5jdGlvbnMsIGN1cnJpZWRUaW50JDEgYXMgdGludCwgdG9Db2xvclN0cmluZywgdHJhbnNpdGlvbnMsIGN1cnJpZWRUcmFuc3BhcmVudGl6ZSQxIGFzIHRyYW5zcGFyZW50aXplLCB0cmlhbmdsZSwgd29yZFdyYXAgfTtcbiIsImltcG9ydCB7IHBhcnNlVG9SZ2IgfSBmcm9tICdwb2xpc2hlZCc7XG5leHBvcnQgZGVmYXVsdCAodGhlbWUgPT4ge1xuICBjb25zdCByZ2IgPSBwYXJzZVRvUmdiKHRoZW1lLmNvbG9ycy5hY2NlbnQpO1xuICBjb25zdCBjb2xvciA9IGByZ2JhKCR7cmdiLnJlZH0sICR7cmdiLmdyZWVufSwgJHtyZ2IuYmx1ZX0sIC41OClgO1xuICByZXR1cm4gYDAgMXB4IDRweCAwICR7Y29sb3J9O2A7XG59KTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5cbmZsYXR0ZW4uZmxhdHRlbiA9IGZsYXR0ZW5cbmZsYXR0ZW4udW5mbGF0dGVuID0gdW5mbGF0dGVuXG5cbmZ1bmN0aW9uIGlzQnVmZmVyIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJlxuICAgIG9iai5jb25zdHJ1Y3RvciAmJlxuICAgICh0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nKSAmJlxuICAgIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihvYmopXG59XG5cbmZ1bmN0aW9uIGtleUlkZW50aXR5IChrZXkpIHtcbiAgcmV0dXJuIGtleVxufVxuXG5mdW5jdGlvbiBmbGF0dGVuICh0YXJnZXQsIG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge31cblxuICBjb25zdCBkZWxpbWl0ZXIgPSBvcHRzLmRlbGltaXRlciB8fCAnLidcbiAgY29uc3QgbWF4RGVwdGggPSBvcHRzLm1heERlcHRoXG4gIGNvbnN0IHRyYW5zZm9ybUtleSA9IG9wdHMudHJhbnNmb3JtS2V5IHx8IGtleUlkZW50aXR5XG4gIGNvbnN0IG91dHB1dCA9IHt9XG5cbiAgZnVuY3Rpb24gc3RlcCAob2JqZWN0LCBwcmV2LCBjdXJyZW50RGVwdGgpIHtcbiAgICBjdXJyZW50RGVwdGggPSBjdXJyZW50RGVwdGggfHwgMVxuICAgIE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9iamVjdFtrZXldXG4gICAgICBjb25zdCBpc2FycmF5ID0gb3B0cy5zYWZlICYmIEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICBjb25zdCB0eXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKVxuICAgICAgY29uc3QgaXNidWZmZXIgPSBpc0J1ZmZlcih2YWx1ZSlcbiAgICAgIGNvbnN0IGlzb2JqZWN0ID0gKFxuICAgICAgICB0eXBlID09PSAnW29iamVjdCBPYmplY3RdJyB8fFxuICAgICAgICB0eXBlID09PSAnW29iamVjdCBBcnJheV0nXG4gICAgICApXG5cbiAgICAgIGNvbnN0IG5ld0tleSA9IHByZXZcbiAgICAgICAgPyBwcmV2ICsgZGVsaW1pdGVyICsgdHJhbnNmb3JtS2V5KGtleSlcbiAgICAgICAgOiB0cmFuc2Zvcm1LZXkoa2V5KVxuXG4gICAgICBpZiAoIWlzYXJyYXkgJiYgIWlzYnVmZmVyICYmIGlzb2JqZWN0ICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggJiZcbiAgICAgICAgKCFvcHRzLm1heERlcHRoIHx8IGN1cnJlbnREZXB0aCA8IG1heERlcHRoKSkge1xuICAgICAgICByZXR1cm4gc3RlcCh2YWx1ZSwgbmV3S2V5LCBjdXJyZW50RGVwdGggKyAxKVxuICAgICAgfVxuXG4gICAgICBvdXRwdXRbbmV3S2V5XSA9IHZhbHVlXG4gICAgfSlcbiAgfVxuXG4gIHN0ZXAodGFyZ2V0KVxuXG4gIHJldHVybiBvdXRwdXRcbn1cblxuZnVuY3Rpb24gdW5mbGF0dGVuICh0YXJnZXQsIG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge31cblxuICBjb25zdCBkZWxpbWl0ZXIgPSBvcHRzLmRlbGltaXRlciB8fCAnLidcbiAgY29uc3Qgb3ZlcndyaXRlID0gb3B0cy5vdmVyd3JpdGUgfHwgZmFsc2VcbiAgY29uc3QgdHJhbnNmb3JtS2V5ID0gb3B0cy50cmFuc2Zvcm1LZXkgfHwga2V5SWRlbnRpdHlcbiAgY29uc3QgcmVzdWx0ID0ge31cblxuICBjb25zdCBpc2J1ZmZlciA9IGlzQnVmZmVyKHRhcmdldClcbiAgaWYgKGlzYnVmZmVyIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0YXJnZXQpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgIHJldHVybiB0YXJnZXRcbiAgfVxuXG4gIC8vIHNhZmVseSBlbnN1cmUgdGhhdCB0aGUga2V5IGlzXG4gIC8vIGFuIGludGVnZXIuXG4gIGZ1bmN0aW9uIGdldGtleSAoa2V5KSB7XG4gICAgY29uc3QgcGFyc2VkS2V5ID0gTnVtYmVyKGtleSlcblxuICAgIHJldHVybiAoXG4gICAgICBpc05hTihwYXJzZWRLZXkpIHx8XG4gICAgICBrZXkuaW5kZXhPZignLicpICE9PSAtMSB8fFxuICAgICAgb3B0cy5vYmplY3RcbiAgICApID8ga2V5XG4gICAgICA6IHBhcnNlZEtleVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkS2V5cyAoa2V5UHJlZml4LCByZWNpcGllbnQsIHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0YXJnZXQpLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcbiAgICAgIHJlc3VsdFtrZXlQcmVmaXggKyBkZWxpbWl0ZXIgKyBrZXldID0gdGFyZ2V0W2tleV1cblxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH0sIHJlY2lwaWVudClcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRW1wdHkgKHZhbCkge1xuICAgIGNvbnN0IHR5cGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKVxuICAgIGNvbnN0IGlzQXJyYXkgPSB0eXBlID09PSAnW29iamVjdCBBcnJheV0nXG4gICAgY29uc3QgaXNPYmplY3QgPSB0eXBlID09PSAnW29iamVjdCBPYmplY3RdJ1xuXG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChpc0FycmF5KSB7XG4gICAgICByZXR1cm4gIXZhbC5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KSB7XG4gICAgICByZXR1cm4gIU9iamVjdC5rZXlzKHZhbCkubGVuZ3RoXG4gICAgfVxuICB9XG5cbiAgdGFyZ2V0ID0gT2JqZWN0LmtleXModGFyZ2V0KS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgY29uc3QgdHlwZSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0YXJnZXRba2V5XSlcbiAgICBjb25zdCBpc09iamVjdCA9ICh0eXBlID09PSAnW29iamVjdCBPYmplY3RdJyB8fCB0eXBlID09PSAnW29iamVjdCBBcnJheV0nKVxuICAgIGlmICghaXNPYmplY3QgfHwgaXNFbXB0eSh0YXJnZXRba2V5XSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdGFyZ2V0W2tleV1cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFkZEtleXMoXG4gICAgICAgIGtleSxcbiAgICAgICAgcmVzdWx0LFxuICAgICAgICBmbGF0dGVuKHRhcmdldFtrZXldLCBvcHRzKVxuICAgICAgKVxuICAgIH1cbiAgfSwge30pXG5cbiAgT2JqZWN0LmtleXModGFyZ2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBjb25zdCBzcGxpdCA9IGtleS5zcGxpdChkZWxpbWl0ZXIpLm1hcCh0cmFuc2Zvcm1LZXkpXG4gICAgbGV0IGtleTEgPSBnZXRrZXkoc3BsaXQuc2hpZnQoKSlcbiAgICBsZXQga2V5MiA9IGdldGtleShzcGxpdFswXSlcbiAgICBsZXQgcmVjaXBpZW50ID0gcmVzdWx0XG5cbiAgICB3aGlsZSAoa2V5MiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoa2V5MSA9PT0gJ19fcHJvdG9fXycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR5cGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmVjaXBpZW50W2tleTFdKVxuICAgICAgY29uc3QgaXNvYmplY3QgPSAoXG4gICAgICAgIHR5cGUgPT09ICdbb2JqZWN0IE9iamVjdF0nIHx8XG4gICAgICAgIHR5cGUgPT09ICdbb2JqZWN0IEFycmF5XSdcbiAgICAgIClcblxuICAgICAgLy8gZG8gbm90IHdyaXRlIG92ZXIgZmFsc2V5LCBub24tdW5kZWZpbmVkIHZhbHVlcyBpZiBvdmVyd3JpdGUgaXMgZmFsc2VcbiAgICAgIGlmICghb3ZlcndyaXRlICYmICFpc29iamVjdCAmJiB0eXBlb2YgcmVjaXBpZW50W2tleTFdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKChvdmVyd3JpdGUgJiYgIWlzb2JqZWN0KSB8fCAoIW92ZXJ3cml0ZSAmJiByZWNpcGllbnRba2V5MV0gPT0gbnVsbCkpIHtcbiAgICAgICAgcmVjaXBpZW50W2tleTFdID0gKFxuICAgICAgICAgIHR5cGVvZiBrZXkyID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICFvcHRzLm9iamVjdCA/IFtdIDoge31cbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICByZWNpcGllbnQgPSByZWNpcGllbnRba2V5MV1cbiAgICAgIGlmIChzcGxpdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGtleTEgPSBnZXRrZXkoc3BsaXQuc2hpZnQoKSlcbiAgICAgICAga2V5MiA9IGdldGtleShzcGxpdFswXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB1bmZsYXR0ZW4gYWdhaW4gZm9yICdtZXNzeSBvYmplY3RzJ1xuICAgIHJlY2lwaWVudFtrZXkxXSA9IHVuZmxhdHRlbih0YXJnZXRba2V5XSwgb3B0cylcbiAgfSlcblxuICByZXR1cm4gcmVzdWx0XG59XG4iLCIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCJ2YXIgbGlzdENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVDbGVhcicpLFxuICAgIGxpc3RDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZURlbGV0ZScpLFxuICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUdldCcpLFxuICAgIGxpc3RDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUhhcycpLFxuICAgIGxpc3RDYWNoZVNldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlzdENhY2hlO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgc3RhY2tDbGVhciA9IHJlcXVpcmUoJy4vX3N0YWNrQ2xlYXInKSxcbiAgICBzdGFja0RlbGV0ZSA9IHJlcXVpcmUoJy4vX3N0YWNrRGVsZXRlJyksXG4gICAgc3RhY2tHZXQgPSByZXF1aXJlKCcuL19zdGFja0dldCcpLFxuICAgIHN0YWNrSGFzID0gcmVxdWlyZSgnLi9fc3RhY2tIYXMnKSxcbiAgICBzdGFja1NldCA9IHJlcXVpcmUoJy4vX3N0YWNrU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGFjaztcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxuICogYHVuZGVmaW5lZGAgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZXEob2JqZWN0W2tleV0sIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25NZXJnZVZhbHVlO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgYmFzZSBmdW5jdGlvbiBmb3IgbWV0aG9kcyBsaWtlIGBfLmZvckluYCBhbmQgYF8uZm9yT3duYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3Qob2JqZWN0KSxcbiAgICAgICAgcHJvcHMgPSBrZXlzRnVuYyhvYmplY3QpLFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcbiAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmFzZUZvcjtcbiIsInZhciBjcmVhdGVCYXNlRm9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUZvcicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9yT3duYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBvYmplY3RgXG4gKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xudmFyIGJhc2VGb3IgPSBjcmVhdGVCYXNlRm9yKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvcjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBhbGxvY1Vuc2FmZSA9IEJ1ZmZlciA/IEJ1ZmZlci5hbGxvY1Vuc2FmZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgIGBidWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIFRoZSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJldHVybiBidWZmZXIuc2xpY2UoKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGFsbG9jVW5zYWZlID8gYWxsb2NVbnNhZmUobGVuZ3RoKSA6IG5ldyBidWZmZXIuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICBidWZmZXIuY29weShyZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQnVmZmVyO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheTtcbiIsInZhciBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XG4gIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVBcnJheUJ1ZmZlcjtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lVHlwZWRBcnJheTtcbiIsIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlBcnJheTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRQcm90b3R5cGU7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsInZhciBiYXNlSXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL19iYXNlSXNBcmd1bWVudHMnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FyZ3VtZW50cztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsInZhciBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAqIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2VPYmplY3Q7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUGxhaW5PYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBub2RlVXRpbDtcbiIsInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCwgdW5sZXNzIGBrZXlgIGlzIFwiX19wcm90b19fXCIgb3IgXCJjb25zdHJ1Y3RvclwiLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc2FmZUdldChvYmplY3QsIGtleSkge1xuICBpZiAoa2V5ID09PSAnY29uc3RydWN0b3InICYmIHR5cGVvZiBvYmplY3Rba2V5XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2FmZUdldDtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25WYWx1ZTtcbiIsInZhciBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyk7XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlPYmplY3Q7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcbiAqIFtgT2JqZWN0LmtleXNgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGV4Y2VwdCB0aGF0IGl0IGluY2x1ZGVzIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIG5hdGl2ZUtleXNJbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5c0luO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzSW4gPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5c0luO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgcGxhaW4gb2JqZWN0IGZsYXR0ZW5pbmcgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nXG4gKiBrZXllZCBwcm9wZXJ0aWVzIG9mIGB2YWx1ZWAgdG8gb3duIHByb3BlcnRpZXMgb2YgdGhlIHBsYWluIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9XG4gKi9cbmZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3QodmFsdWUsIGtleXNJbih2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvUGxhaW5PYmplY3Q7XG4iLCJ2YXIgYXNzaWduTWVyZ2VWYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnbk1lcmdlVmFsdWUnKSxcbiAgICBjbG9uZUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQnVmZmVyJyksXG4gICAgY2xvbmVUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fY2xvbmVUeXBlZEFycmF5JyksXG4gICAgY29weUFycmF5ID0gcmVxdWlyZSgnLi9fY29weUFycmF5JyksXG4gICAgaW5pdENsb25lT2JqZWN0ID0gcmVxdWlyZSgnLi9faW5pdENsb25lT2JqZWN0JyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi9pc1BsYWluT2JqZWN0JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKSxcbiAgICBzYWZlR2V0ID0gcmVxdWlyZSgnLi9fc2FmZUdldCcpLFxuICAgIHRvUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL3RvUGxhaW5PYmplY3QnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VNZXJnZWAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBtZXJnZXMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgbWVyZ2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBtZXJnZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXJnZUZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1lcmdlIHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXG4gKiAgY291bnRlcnBhcnRzLlxuICovXG5mdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBtZXJnZUZ1bmMsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIHZhciBvYmpWYWx1ZSA9IHNhZmVHZXQob2JqZWN0LCBrZXkpLFxuICAgICAgc3JjVmFsdWUgPSBzYWZlR2V0KHNvdXJjZSwga2V5KSxcbiAgICAgIHN0YWNrZWQgPSBzdGFjay5nZXQoc3JjVmFsdWUpO1xuXG4gIGlmIChzdGFja2VkKSB7XG4gICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgc3RhY2tlZCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgdmFyIGlzQ29tbW9uID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcblxuICBpZiAoaXNDb21tb24pIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHNyY1ZhbHVlKSxcbiAgICAgICAgaXNCdWZmID0gIWlzQXJyICYmIGlzQnVmZmVyKHNyY1ZhbHVlKSxcbiAgICAgICAgaXNUeXBlZCA9ICFpc0FyciAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheShzcmNWYWx1ZSk7XG5cbiAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgIGlmIChpc0FyciB8fCBpc0J1ZmYgfHwgaXNUeXBlZCkge1xuICAgICAgaWYgKGlzQXJyYXkob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0FycmF5TGlrZU9iamVjdChvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBjb3B5QXJyYXkob2JqVmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNCdWZmKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVCdWZmZXIoc3JjVmFsdWUsIHRydWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICBuZXdWYWx1ZSA9IGNsb25lVHlwZWRBcnJheShzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWUgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChzcmNWYWx1ZSkgfHwgaXNBcmd1bWVudHMoc3JjVmFsdWUpKSB7XG4gICAgICBuZXdWYWx1ZSA9IG9ialZhbHVlO1xuICAgICAgaWYgKGlzQXJndW1lbnRzKG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IHRvUGxhaW5PYmplY3Qob2JqVmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoIWlzT2JqZWN0KG9ialZhbHVlKSB8fCBpc0Z1bmN0aW9uKG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGluaXRDbG9uZU9iamVjdChzcmNWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzQ29tbW9uKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgc3RhY2suc2V0KHNyY1ZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgbWVyZ2VGdW5jKG5ld1ZhbHVlLCBzcmNWYWx1ZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xuICB9XG4gIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWVyZ2VEZWVwO1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBhc3NpZ25NZXJnZVZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduTWVyZ2VWYWx1ZScpLFxuICAgIGJhc2VGb3IgPSByZXF1aXJlKCcuL19iYXNlRm9yJyksXG4gICAgYmFzZU1lcmdlRGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VNZXJnZURlZXAnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpLFxuICAgIHNhZmVHZXQgPSByZXF1aXJlKCcuL19zYWZlR2V0Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmIChvYmplY3QgPT09IHNvdXJjZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBiYXNlRm9yKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgaWYgKGlzT2JqZWN0KHNyY1ZhbHVlKSkge1xuICAgICAgYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgICA/IGN1c3RvbWl6ZXIoc2FmZUdldChvYmplY3QsIGtleSksIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgICAgfVxuICAgICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfSwga2V5c0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWVyZ2U7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGx5O1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwidmFyIGJhc2VTZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VTZXRUb1N0cmluZycpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb1N0cmluZztcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUmVzdDtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJ2YXIgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzSXRlcmF0ZWVDYWxsID0gcmVxdWlyZSgnLi9faXNJdGVyYXRlZUNhbGwnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVBc3NpZ25lcjtcbiIsInZhciBiYXNlTWVyZ2UgPSByZXF1aXJlKCcuL19iYXNlTWVyZ2UnKSxcbiAgICBjcmVhdGVBc3NpZ25lciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUFzc2lnbmVyJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXG4gKiBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyBpbnRvIHRoZVxuICogZGVzdGluYXRpb24gb2JqZWN0LiBTb3VyY2UgcHJvcGVydGllcyB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAgYXJlXG4gKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcbiAqIGFyZSBtZXJnZWQgcmVjdXJzaXZlbHkuIE90aGVyIG9iamVjdHMgYW5kIHZhbHVlIHR5cGVzIGFyZSBvdmVycmlkZGVuIGJ5XG4gKiBhc3NpZ25tZW50LiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuIFN1YnNlcXVlbnRcbiAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjUuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0ge1xuICogICAnYSc6IFt7ICdiJzogMiB9LCB7ICdkJzogNCB9XVxuICogfTtcbiAqXG4gKiB2YXIgb3RoZXIgPSB7XG4gKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXG4gKiB9O1xuICpcbiAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiB7ICdhJzogW3sgJ2InOiAyLCAnYyc6IDMgfSwgeyAnZCc6IDQsICdlJzogNSB9XSB9XG4gKi9cbnZhciBtZXJnZSA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCkge1xuICBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlO1xuIiwiaW1wb3J0IGZsYXQgZnJvbSAnZmxhdCc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnbG9kYXNoL21lcmdlLmpzJztcbmltcG9ydCAqIGFzIHRoZW1lIGZyb20gXCIuLi90aGVtZS5qc1wiO1xuY29uc3Qge1xuICBmbGF0dGVuLFxuICB1bmZsYXR0ZW5cbn0gPSBmbGF0O1xuXG4vKipcbiAqIEFwcGxpZXMgbmV3IHN0eWxlcyB0byB0aGUgZGVmYXVsdCB0aGVtZVxuICpcbiAqICMjIyBFeGFtcGxlXG4gKlxuICogYGBganN4XG4gKiBpbXBvcnQgeyBjb21iaW5lU3R5bGVzIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbWBcbiAqXG4gKiBjb25zdCBteVRoZW1lID0gY29tYmluZVN0eWxlcyh7XG4gKiAgIGNvbG9yczoge1xuICogICAgIHByaW1hcnkxMDA6ICcjMDAwJ1xuICogICB9XG4gKiB9KVxuICogYGBgXG4gKlxuICogQHBhcmFtIHtUaGVtZU92ZXJyaWRlfSBvdmVycmlkZXNcbiAqIEBtZW1iZXJvZiBtb2R1bGU6QGFkbWluanMvZGVzaWduLXN5c3RlbVxuICpcbiAqIEByZXR1cm4gIHtUaGVtZX1cbiAqL1xuY29uc3QgY29tYmluZVN0eWxlcyA9ICguLi5vdmVycmlkZXMpID0+IHtcbiAgY29uc3QgbWVyZ2VkID0gbWVyZ2UoZmxhdHRlbih0aGVtZSksIC4uLm92ZXJyaWRlcy5tYXAoKG8gPSB7fSkgPT4gZmxhdHRlbihvKSkpO1xuICByZXR1cm4gdW5mbGF0dGVuKG1lcmdlZCk7XG59O1xuZXhwb3J0IHsgY29tYmluZVN0eWxlcyB9OyIsIi8qKlxuICogYWRkcyBsZWFkaW5nIDAgdG8gdGhlIG51bWJlciB3aGVuIGl0IGlzIGxvd2VyIHRoYW4gMTBcbiAqIEBwYXJhbSB7bnVtYmVyfSBwYWQgICAgICAgIG51bWJlciAtIGkuZSA4XG4gKiBAcmV0dXJucyB7c3Rpbmd9ICAgICAgICAgICBmb3JtYXR0ZWQgbnVtYmVyOiBpLmUuIFwiMDhcIlxuICogQG1lbWJlcm9mIG1vZHVsZTpAYWRtaW5qcy9kZXNpZ24tc3lzdGVtXG4gKi9cbmNvbnN0IHBhZCA9IG4gPT4gbiA8IDEwID8gYDAke24udG9TdHJpbmcoKX1gIDogbi50b1N0cmluZygpO1xuXG4vKipcbiAqIEZvcm1hdHMgZGF0ZSB0byBZWVlZLU1NLUREXG4gKlxuICogQHBhcmFtICAge0RhdGV9ICAgIGRhdGVcbiAqIEByZXR1cm4gIHtzdHJpbmd9XG4gKiBAbWVtYmVyb2YgbW9kdWxlOkBhZG1pbmpzL2Rlc2lnbi1zeXN0ZW1cbiAqL1xuY29uc3QgZm9ybWF0RGF0ZSA9IGRhdGUgPT4gYCR7ZGF0ZS5nZXRGdWxsWWVhcigpfS0ke3BhZChkYXRlLmdldE1vbnRoKCkgKyAxKX0tJHtwYWQoZGF0ZS5nZXREYXRlKCkpfWA7XG5cbi8qKlxuICogRm9ybWF0cyBkYXRlIHRvIEhIOm1tXG4gKlxuICogQHBhcmFtICAge0RhdGV9ICAgIGRhdGVcbiAqIEByZXR1cm4gIHtzdHJpbmd9XG4gKiBAbWVtYmVyb2YgbW9kdWxlOkBhZG1pbmpzL2Rlc2lnbi1zeXN0ZW1cbiAqL1xuY29uc3QgZm9ybWF0VGltZSA9IGRhdGUgPT4gYCR7cGFkKGRhdGUuZ2V0SG91cnMoKSl9OiR7cGFkKGRhdGUuZ2V0TWludXRlcygpKX1gO1xuXG4vKipcbiAqIEZvcm1hdHMgZGF0ZSB0byBZWVlZLU1NLUREIEhIOm1tXG4gKlxuICogQHBhcmFtICAge0RhdGV9ICAgIGRhdGVcbiAqIEByZXR1cm4gIHtzdHJpbmd9XG4gKiBAbWVtYmVyb2YgbW9kdWxlOkBhZG1pbmpzL2Rlc2lnbi1zeXN0ZW1cbiAqL1xuY29uc3QgZm9ybWF0RGF0ZVRpbWUgPSBkYXRlID0+IGAke2Zvcm1hdERhdGUoZGF0ZSl9ICR7Zm9ybWF0VGltZShkYXRlKX1gO1xuXG4vKipcbiAqIEJhc2VkIG9uIHRoZSBwcm9wZXJ0eSB0eXBlIGZvcm1hdHMgZGF0ZSB0byBlaXRoZXIgWVlZWS1NTS1ERCBISDptbSBvciBZWVlZLU1NLUREXG4gKlxuICogQHBhcmFtICAge0RhdGV9ICAgIGRhdGVcbiAqIEBwYXJhbSAgIHtQcm9wZXJ0eVR5cGV9ICAgIHByb3BlcnR5VHlwZVxuICogQHJldHVybiAge3N0cmluZ31cbiAqIEBtZW1iZXJvZiBtb2R1bGU6QGFkbWluanMvZGVzaWduLXN5c3RlbVxuICovXG5jb25zdCBmb3JtYXREYXRlUHJvcGVydHkgPSAoZGF0ZSwgcHJvcGVydHlUeXBlKSA9PiB7XG4gIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdkYXRlJykge1xuICAgIHJldHVybiBmb3JtYXREYXRlKGRhdGUpO1xuICB9XG4gIHJldHVybiBmb3JtYXREYXRlVGltZShkYXRlKTtcbn07XG5leHBvcnQgeyBmb3JtYXREYXRlUHJvcGVydHksIGZvcm1hdERhdGUsIGZvcm1hdERhdGVUaW1lLCBwYWQgfTsiLCJjb25zdCBnZW5lcmF0ZUlkID0ga2V5ID0+IHtcbiAgY29uc3QgYWNjZXNzS2V5ID0gYFVOSVFVRV9LRVlfJHtrZXl9YDtcbiAgd2luZG93LkFkbWluSlMgPSB3aW5kb3cuQWRtaW5KUyB8fCB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgd2luZG93LkFkbWluSlNbYWNjZXNzS2V5XSA9IChOdW1iZXIucGFyc2VJbnQod2luZG93LkFkbWluSlNbYWNjZXNzS2V5XSwgMTApIHx8IDApICsgMTtcbiAgcmV0dXJuIFthY2Nlc3NLZXksIHdpbmRvdy5BZG1pbkpTW2FjY2Vzc0tleV1dLmpvaW4oJ18nKTtcbn07XG5leHBvcnQgZGVmYXVsdCBnZW5lcmF0ZUlkOyIsIi8qIFNvbHV0aW9uIGluc3BpcmVkIGJ5IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMDczMjA5MS8yNTk0MjI3IGFuc3dlciAqL1xuY29uc3QgVU5JVFMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInXTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvcHJlZmVyLWRlZmF1bHQtZXhwb3J0XG5cbi8qKlxuICogQ2hhbmdlcyBzaXplIGluIGJ5dGVzIHRvIHN0cmluZy4gSWYgdW5pdCBpcyBub3QgcHJvdmlkZWQgLSB0cmllcyB0byBmaW5kIHRoZSBiZXN0IG1hdGNoLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBzaXplXG4gKiBAcGFyYW0geydCJyB8ICdLQicgfCAnTUInIHwgJ0dCJyB8ICdUQid9IFt1bml0XVxuICogQHJldHVybnMge3N0cmluZ31cbiAqIEBtZW1iZXJvZiBtb2R1bGU6QGFkbWluanMvZGVzaWduLXN5c3RlbVxuICovXG5jb25zdCBodW1hbkZpbGVTaXplID0gKHNpemUsIHVuaXQpID0+IHtcbiAgbGV0IGZvdW5kVW5pdEluZGV4ID0gbnVsbDtcbiAgaWYgKHVuaXQpIHtcbiAgICBmb3VuZFVuaXRJbmRleCA9IFVOSVRTLmZpbmRJbmRleCh1ID0+IHUgPT09IHVuaXQpO1xuICB9XG4gIGNvbnN0IHVuaXRJbmRleCA9IGZvdW5kVW5pdEluZGV4IHx8IE1hdGgubWluKE1hdGguZmxvb3IoTWF0aC5sb2coK3NpemUpIC8gTWF0aC5sb2coMTAyNCkpLCBVTklUUy5sZW5ndGgpO1xuICBjb25zdCBjYWxjdWxhdGVkU2l6ZSA9ICtzaXplIC8gMTAyNCAqKiB1bml0SW5kZXg7XG4gIGNvbnN0IGd1ZXNzZWRVbml0ID0gWydCJywgJ2tCJywgJ01CJywgJ0dCJywgJ1RCJ11bdW5pdEluZGV4XTtcbiAgcmV0dXJuIGAke01hdGgucm91bmQoY2FsY3VsYXRlZFNpemUpfSAke2d1ZXNzZWRVbml0fWA7XG59O1xuZXhwb3J0IHsgaHVtYW5GaWxlU2l6ZSB9OyIsIi8qIGVzbGludC1kaXNhYmxlIGFycm93LWJvZHktc3R5bGUgKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgZ2VuZXJhdGVJZCBmcm9tIFwiLi9nZW5lcmF0ZS1pZC5qc1wiO1xuXG4vLyBUT0RPOiBoYW5kbGUgaWZyYW1lIGNhc2Ugd2l0aCByZWYuY3VycmVudC5vd25lckRvY3VtZW50XG5leHBvcnQgY29uc3QgUG9ydGFsVXRpbHMgPSB7XG4gIGFwcGVuZEVsZW1lbnQ6IGVsZW1lbnQgPT4ge1xuICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICB9LFxuICByZW1vdmVFbGVtZW50OiBpZCA9PiB7XG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgZG9tRWxlbWVudD8ucmVtb3ZlKCk7XG4gIH0sXG4gIGNyZWF0ZVBvcnRhbEZvcktleTogZnVuY3Rpb24gY3JlYXRlUG9ydGFsRm9yS2V5KGlkS2V5LCBDb21wb25lbnQpIHtcbiAgICBjb25zdCBQb3J0YWwgPSBwcm9wcyA9PiB7XG4gICAgICBjb25zdCBbaWRdID0gdXNlU3RhdGUoZ2VuZXJhdGVJZChpZEtleSkpO1xuICAgICAgY29uc3QgW3BvcnRhbEVsZW1lbnRdID0gdXNlU3RhdGUod2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHBvcnRhbEVsZW1lbnQuaWQgPSBpZDtcbiAgICAgICAgUG9ydGFsVXRpbHMuYXBwZW5kRWxlbWVudChwb3J0YWxFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBQb3J0YWxVdGlscy5yZW1vdmVFbGVtZW50KGlkKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdERPTS5jcmVhdGVQb3J0YWwoIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgcHJvcHMpLCBwb3J0YWxFbGVtZW50KTtcbiAgICB9O1xuICAgIHJldHVybiBQb3J0YWw7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBQb3J0YWxVdGlsczsiLCIvKiBjU3BlbGw6ZGlzYWJsZSAqL1xuaW1wb3J0IHsgY3NzLCBjcmVhdGVHbG9iYWxTdHlsZSB9IGZyb20gXCIuLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcblxuLyoqXG4gKiBSZXNldHMgY3NzIHN0eWxlcyB3aGljaCBjYW4gYmUgYXBwbGllZCB0byBlbGVtZW50IGNyZWF0ZWQgYnkgc3R5bGVkLWNvbXBvbmVudFxuICpcbiAqICMjIyBFeGFtcGxlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgcmVzZXQgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJ1xuICpcbiAqIGNvbnN0IG15Q29udGVudENvbXBvbmVudCA9IHN0eWxlZGBcbiAqICAgJHtyZXNldH07XG4gKiBgXG4gKiBgYGBcbiAqIEBuZXcgaW4gdmVyc2lvbiAzLjNcbiAqIEBtZW1iZXJvZiBtb2R1bGU6QGFkbWluanMvZGVzaWduLXN5c3RlbVxuICovXG5jb25zdCByZXNldCA9IGNzc2Bcbi8qIGh0dHA6Ly9tZXllcndlYi5jb20vZXJpYy90b29scy9jc3MvcmVzZXQvXG4gICB2NC4wIHwgMjAxODA2MDJcbiAgIExpY2Vuc2U6IG5vbmUgKHB1YmxpYyBkb21haW4pXG4qL1xuaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBhcHBsZXQsIG9iamVjdCwgaWZyYW1lLFxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCwgYmxvY2txdW90ZSwgcHJlLFxuYSwgYWJiciwgYWNyb255bSwgYWRkcmVzcywgYmlnLCBjaXRlLCBjb2RlLFxuZGVsLCBkZm4sIGVtLCBpbWcsIGlucywga2JkLCBxLCBzLCBzYW1wLFxuc21hbGwsIHN0cmlrZSwgc3Ryb25nLCBzdWIsIHN1cCwgdHQsIHZhcixcbmIsIHUsIGksIGNlbnRlcixcbmRsLCBkdCwgZGQsIG9sLCB1bCwgbGksXG5maWVsZHNldCwgZm9ybSwgbGFiZWwsIGxlZ2VuZCxcbnRhYmxlLCBjYXB0aW9uLCB0Ym9keSwgdGZvb3QsIHRoZWFkLCB0ciwgdGgsIHRkLFxuYXJ0aWNsZSwgYXNpZGUsIGNhbnZhcywgZGV0YWlscywgZW1iZWQsXG5maWd1cmUsIGZpZ2NhcHRpb24sIGZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsXG5tYWluLCBtZW51LCBuYXYsIG91dHB1dCwgcnVieSwgc2VjdGlvbiwgc3VtbWFyeSxcbnRpbWUsIG1hcmssIGF1ZGlvLCB2aWRlbyB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiAwO1xuICBmb250LXNpemU6IDEwMCU7XG4gIGZvbnQ6IGluaGVyaXQ7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cbi8qIEhUTUw1IGRpc3BsYXktcm9sZSByZXNldCBmb3Igb2xkZXIgYnJvd3NlcnMgKi9cbmFydGljbGUsIGFzaWRlLCBkZXRhaWxzLCBmaWdjYXB0aW9uLCBmaWd1cmUsXG5mb290ZXIsIGhlYWRlciwgaGdyb3VwLCBtYWluLCBtZW51LCBuYXYsIHNlY3Rpb24ge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi8qIEhUTUw1IGhpZGRlbi1hdHRyaWJ1dGUgZml4IGZvciBuZXdlciBicm93c2VycyAqL1xuKltoaWRkZW5dIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuYm9keSB7XG4gIGxpbmUtaGVpZ2h0OiAxO1xufVxub2wsIHVsIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbmJsb2NrcXVvdGUsIHEge1xuICBxdW90ZXM6IG5vbmU7XG59XG5ibG9ja3F1b3RlOmJlZm9yZSwgYmxvY2txdW90ZTphZnRlcixcbnE6YmVmb3JlLCBxOmFmdGVyIHtcbiAgY29udGVudDogJyc7XG4gIGNvbnRlbnQ6IG5vbmU7XG59XG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xufVxuYDtcblxuLyogY1NwZWxsOmVuYWJsZSAqL1xuXG4vKipcbiAqIFJlc2V0cyBjc3MgY29tcG9uZW50IHdoaWNoIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSB0b3Agb2YgdGhlIGh0bWxcbiAqXG4gKiAjIyMgRXhhbXBsZVxuICpcbiAqIGBgYGpzeFxuICogaW1wb3J0IHsgUmVzZXQgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJ1xuICpcbiAqIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZX0+XG4gKiAgIDxSZXNldCAvPlxuICogICA8Qm94PlxuICogICAgIHsgLi4uIH1cbiAqICAgPC9Cb3g+XG4gKiA8L1RoZW1lUHJvdmlkZXI+XG4gKiBgYGBcbiAqIEBuZXcgaW4gdmVyc2lvbiAzLjNcbiAqIEBtZW1iZXJvZiBtb2R1bGU6QGFkbWluanMvZGVzaWduLXN5c3RlbVxuICovXG5jb25zdCBSZXNldCA9IGNyZWF0ZUdsb2JhbFN0eWxlYCR7cmVzZXR9YDtcbmV4cG9ydCB7IFJlc2V0LCByZXNldCB9OyIsImNvbnN0IHNlbGVjdFN0eWxlcyA9IHRoZW1lID0+ICh7XG4gIGNvbnRyb2w6IGJhc2VTdHlsZXMgPT4gKHtcbiAgICAuLi5iYXNlU3R5bGVzLFxuICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgYm9yZGVyQ29sb3I6IHRoZW1lLmNvbG9ycy5pbnB1dEJvcmRlclxuICB9KSxcbiAgaW5wdXQ6IGJhc2VTdHlsZXMgPT4gKHtcbiAgICAuLi5iYXNlU3R5bGVzLFxuICAgIGNvbG9yOiB0aGVtZS5jb2xvcnMuZ3JleTEwMFxuICB9KSxcbiAgc2luZ2xlVmFsdWU6IGJhc2VTdHlsZXMgPT4gKHtcbiAgICAuLi5iYXNlU3R5bGVzLFxuICAgIGNvbG9yOiB0aGVtZS5jb2xvcnMuZ3JleTEwMFxuICB9KSxcbiAgbWVudTogYmFzZVN0eWxlcyA9PiAoe1xuICAgIC4uLmJhc2VTdHlsZXMsXG4gICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgYmFja2dyb3VuZDogdGhlbWUuY29sb3JzLmNvbnRhaW5lcixcbiAgICBib3JkZXI6IHRoZW1lLmJvcmRlcnMuaW5wdXQsXG4gICAgekluZGV4OiAxMDBcbiAgfSlcbn0pO1xuY29uc3QgZmlsdGVyU3R5bGVzID0gdGhlbWUgPT4gKHtcbiAgY29udHJvbDogcHJvdmlkZWQgPT4gKHtcbiAgICAuLi5wcm92aWRlZCxcbiAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgIGJvcmRlckNvbG9yOiB0aGVtZS5jb2xvcnMuaW5wdXRCb3JkZXJcbiAgfSksXG4gIGlucHV0OiAoKSA9PiAoe1xuICAgIGNvbG9yOiB0aGVtZS5jb2xvcnMuZ3JleTEwMCxcbiAgICBncmlkQXJlYTogJzEvMS8yLzMnLFxuICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6ICcwcHggbWluLWNvbnRlbnQnXG4gIH0pLFxuICBzaW5nbGVWYWx1ZTogKCkgPT4gKHtcbiAgICBjb2xvcjogdGhlbWUuY29sb3JzLmdyZXkxMDAsXG4gICAgZ3JpZEFyZWE6ICcxLzEvMi8zJ1xuICB9KSxcbiAgbWVudTogcHJvdmlkZWQgPT4gKHtcbiAgICAuLi5wcm92aWRlZCxcbiAgICBib3JkZXJDb2xvcjogdGhlbWUuY29sb3JzLmJvcmRlcixcbiAgICBiYWNrZ3JvdW5kOiB0aGVtZS5jb2xvcnMuZmlsdGVyQmcsXG4gICAgekluZGV4OiA1XG4gIH0pXG59KTtcbmV4cG9ydCB7IGZpbHRlclN0eWxlcywgc2VsZWN0U3R5bGVzIH07IiwiaW1wb3J0IHsgZ2V0VmFsdWVBbmRVbml0IH0gZnJvbSAncG9saXNoZWQnO1xuZXhwb3J0IGZ1bmN0aW9uIHRoZW1lR2V0KGtpbmQsIHZhbHVlLCBvZmZzZXQpIHtcbiAgcmV0dXJuICh7XG4gICAgdGhlbWVcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHRoZW1lVmFsID0gdmFsdWUgPyB0aGVtZVtraW5kXVt2YWx1ZV0gOiB0aGVtZVtraW5kXTtcbiAgICBpZiAodGhlbWVWYWwgJiYgb2Zmc2V0KSB7XG4gICAgICBsZXQgb2Zmc2V0VmFsdWU7XG4gICAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgW29mZnNldFZhbHVlXSA9IGdldFZhbHVlQW5kVW5pdChvZmZzZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2Zmc2V0VmFsdWUgPSBvZmZzZXQ7XG4gICAgICB9XG4gICAgICBjb25zdCBbcHhWYWx1ZSwgdW5pdF0gPSBnZXRWYWx1ZUFuZFVuaXQodGhlbWVWYWwpO1xuICAgICAgcmV0dXJuIGAke3B4VmFsdWUgKyBvZmZzZXRWYWx1ZX0ke3VuaXR9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRoZW1lVmFsO1xuICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgdGhlbWVHZXQ7XG5cbi8qKlxuICpcbiAqIEhhbmR5IHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggc2ltcGxpZmllcyB0YWtpbmcgdmFsdWVzIGZyb20gdGhlIHtAbGluayBUaGVtZX0uXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBCb3gsIHRoZW1lR2V0IH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSdcbiAqXG4gKiBjb25zdCBteUNvbXBvbmVudCA9IHN0eWxlZChCb3gpYFxuICogICBwYWRkaW5nOiAke3RoZW1lR2V0KCdzcGFjZScsICd4bCcpfTtcbiAqICAgZm9udDogJHt0aGVtZUdldCgnZm9udCcpfTtcbiAqICAgbWFyZ2luLXRvcDogJHt0aGVtZUdldCgnc3BhY2UnLCAneGwnLCAtMil9O1xuICpcbiAqICAgbWFyZ2luLWJvdHRvbTogJHsocHJvcHMpID0+IHRoZW1lR2V0KCdzcGFjZScsIHByb3BzLmRpc2FibGVkID8gJ3hsJyA6ICd4eGwnKShwcm9wcyl9O1xuICogYFxuICpcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBraW5kICAgICAgICAgICBPbmUgb2YgdGhlIGtleXMgaW4gdGhlIHtAbGluayBUaGVtZX0gaW50ZXJmYWNlLiBGb3IgZXhhbXBsZTpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZm9udFdlaWdodHNgXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAgICAgICAgVmFsdWUgZm9yIHRoZSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBbb2Zmc2V0XSAgICBvcHRpb25hbCBvZmZzZXQuIFdoZW4geW91IHdhbnQgdG8gdGFrZSB4eGwgKyAycGl4ZWxzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBkbyB0aGlzIGJ5IHBhc3NpbmcgKzIgYXMgdGhlIG9mZnNldC5cbiAqIEByZXR1cm4ge1RoZW1lRnVuY3Rpb259ICBmdW5jdGlvbiB0YWtpbmcgcHJvcHMgYXMgYW4gYXJndW1lbnRcbiAqXG4gKiBAbmV3IGluIHZlcnNpb24gMy4zXG4gKiBAZnVuY3Rpb24gdGhlbWVHZXRcbiAqIEBtZW1iZXJvZiBUaGVtZVxuICovIiwiaW1wb3J0IHsgc3BhY2UsIGNvbG9yIGFzIHN0eWxlZENvbG9yLCB0eXBvZ3JhcGh5LCB2YXJpYW50IGFzIHN0eWxlZFZhcmlhbnQgfSBmcm9tICdzdHlsZWQtc3lzdGVtJztcbmltcG9ydCB7IGRhcmtlbiwgcmdiYSB9IGZyb20gJ3BvbGlzaGVkJztcbmltcG9ydCB7IGNzcyB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IENvbG9yVmFyaWFudHMgfSBmcm9tIFwiLi4vLi4vdGhlbWUuanNcIjtcbmltcG9ydCB7IGNzc0NsYXNzLCB0aGVtZUdldCB9IGZyb20gXCIuLi8uLi91dGlscy9pbmRleC5qc1wiO1xuY29uc3QgZ2V0Q29sb3IgPSB0aGVtZSA9PiBjb2xvciA9PiB0aGVtZS5jb2xvcnNbQ29sb3JWYXJpYW50c1tjb2xvcl0gfHwgJ3ByaW1hcnkxMDAnXTtcbmNvbnN0IGxlZ2FjeUJ1dHRvblZhcmlhbnRzID0gWydkYW5nZXInLCAnZGVmYXVsdCcsICdpbmZvJywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ3N1Y2Nlc3MnXS5yZWR1Y2UoKGFjYywgY29sb3IpID0+ICh7XG4gIC4uLmFjYyxcbiAgW2NvbG9yXToge1xuICAgIGNsYXNzTmFtZTogY3NzQ2xhc3MoWydCdXR0b24nLCAnQnV0dG9uX0xlZ2FjeSddKSxcbiAgICBib3JkZXJDb2xvcjogJ2N1cnJlbnRDb2xvcicsXG4gICAgY29sb3I6IHRoZW1lID0+IGdldENvbG9yKHRoZW1lKShjb2xvciksXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICBiZzogdGhlbWUgPT4gcmdiYShnZXRDb2xvcih0aGVtZSkoY29sb3IpLCAwLjA1KVxuICAgIH0sXG4gICAgJyY6Zm9jdXMsICY6YWN0aXZlJzoge1xuICAgICAgYmc6IHRoZW1lID0+IHJnYmEoZ2V0Q29sb3IodGhlbWUpKGNvbG9yKSwgMC4xKVxuICAgIH1cbiAgfVxufSksIHt9KTtcbmNvbnN0IGJ1dHRvblZhcmlhbnRzID0gKHtcbiAgY29sb3IgPSAncHJpbWFyeSdcbn0pID0+IHN0eWxlZFZhcmlhbnQoe1xuICB2YXJpYW50czoge1xuICAgIC4uLmxlZ2FjeUJ1dHRvblZhcmlhbnRzLFxuICAgIGNvbnRhaW5lZDoge1xuICAgICAgY2xhc3NOYW1lOiBjc3NDbGFzcyhbJ0J1dHRvbicsICdCdXR0b25fQ29udGFpbmVkJ10pLFxuICAgICAgY29sb3I6IHRoZW1lID0+IHRoZW1lLmNvbG9ycy53aGl0ZSxcbiAgICAgIGJnOiB0aGVtZSA9PiBnZXRDb2xvcih0aGVtZSkoY29sb3IpLFxuICAgICAgYm9yZGVyQ29sb3I6IHRoZW1lID0+IGdldENvbG9yKHRoZW1lKShjb2xvciksXG4gICAgICAnJjpob3Zlcic6IHtcbiAgICAgICAgYmc6IHRoZW1lID0+IGRhcmtlbigwLjE1LCBnZXRDb2xvcih0aGVtZSkoY29sb3IpKSxcbiAgICAgICAgYm9yZGVyQ29sb3I6IHRoZW1lID0+IGRhcmtlbigwLjE1LCBnZXRDb2xvcih0aGVtZSkoY29sb3IpKVxuICAgICAgfSxcbiAgICAgICcmOmZvY3VzLCAmOmFjdGl2ZSc6IHtcbiAgICAgICAgYmc6IHRoZW1lID0+IGRhcmtlbigwLjIsIGdldENvbG9yKHRoZW1lKShjb2xvcikpLFxuICAgICAgICBib3JkZXJDb2xvcjogdGhlbWUgPT4gZGFya2VuKDAuMiwgZ2V0Q29sb3IodGhlbWUpKGNvbG9yKSlcbiAgICAgIH1cbiAgICB9LFxuICAgIG91dGxpbmVkOiB7XG4gICAgICBjbGFzc05hbWU6IGNzc0NsYXNzKFsnQnV0dG9uJywgJ0J1dHRvbl9PdXRsaW5lZCddKSxcbiAgICAgIGJvcmRlckNvbG9yOiAnY3VycmVudENvbG9yJyxcbiAgICAgIGNvbG9yOiB0aGVtZSA9PiBnZXRDb2xvcih0aGVtZSkoY29sb3IpLFxuICAgICAgJyY6aG92ZXInOiB7XG4gICAgICAgIGJnOiB0aGVtZSA9PiByZ2JhKGdldENvbG9yKHRoZW1lKShjb2xvciksIDAuMDUpXG4gICAgICB9LFxuICAgICAgJyY6Zm9jdXMsICY6YWN0aXZlJzoge1xuICAgICAgICBiZzogdGhlbWUgPT4gcmdiYShnZXRDb2xvcih0aGVtZSkoY29sb3IpLCAwLjEpXG4gICAgICB9XG4gICAgfSxcbiAgICBsaWdodDoge1xuICAgICAgY2xhc3NOYW1lOiBjc3NDbGFzcyhbJ0J1dHRvbicsICdCdXR0b25fTGlnaHQnXSksXG4gICAgICBjb2xvcjogdGhlbWUgPT4gY29sb3IgJiYgZ2V0Q29sb3IodGhlbWUpKGNvbG9yKSxcbiAgICAgIGJvcmRlckNvbG9yOiAnZ3JleTQwJyxcbiAgICAgIFtgJiAuJHtjc3NDbGFzcygnSWNvbicpfSBzdmdgXToge1xuICAgICAgICBzdHJva2U6ICdncmV5ODAnXG4gICAgICB9LFxuICAgICAgJyY6aG92ZXInOiB7XG4gICAgICAgIGJnOiB0aGVtZSA9PiByZ2JhKGdldENvbG9yKHRoZW1lKShjb2xvciksIDAuMDUpXG4gICAgICB9LFxuICAgICAgJyY6Zm9jdXMsICY6YWN0aXZlJzoge1xuICAgICAgICBiZzogdGhlbWUgPT4gcmdiYShnZXRDb2xvcih0aGVtZSkoY29sb3IpLCAwLjEpXG4gICAgICB9XG4gICAgfSxcbiAgICB0ZXh0OiB7XG4gICAgICBjbGFzc05hbWU6IGNzc0NsYXNzKFsnQnV0dG9uJywgJ0J1dHRvbl9UZXh0J10pLFxuICAgICAgY29sb3I6IHRoZW1lID0+IGNvbG9yICYmIGdldENvbG9yKHRoZW1lKShjb2xvciksXG4gICAgICBib3JkZXJDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICcmOmRpc2FibGVkJzoge1xuICAgICAgICAnYm9yZGVyLWNvbG9yJzogJ3RyYW5zcGFyZW50J1xuICAgICAgfSxcbiAgICAgICcmOmhvdmVyJzoge1xuICAgICAgICBiZzogdGhlbWUgPT4gcmdiYShnZXRDb2xvcih0aGVtZSkoY29sb3IpLCAwLjA1KVxuICAgICAgfSxcbiAgICAgICcmOmZvY3VzLCAmOmFjdGl2ZSc6IHtcbiAgICAgICAgYmc6IHRoZW1lID0+IHJnYmEoZ2V0Q29sb3IodGhlbWUpKGNvbG9yKSwgMC4xKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5jb25zdCBzaXplVmFyaWFudHMgPSBzdHlsZWRWYXJpYW50KHtcbiAgcHJvcDogJ3NpemUnLFxuICB2YXJpYW50czoge1xuICAgIHNtOiB7XG4gICAgICBmb250U2l6ZTogJ3NtJyxcbiAgICAgIHB5OiAneHMnLFxuICAgICAgbGluZUhlaWdodDogJ2RlZmF1bHQnLFxuICAgICAgcHg6ICdsZycsXG4gICAgICBbYCYgLiR7Y3NzQ2xhc3MoJ0ljb24nKX1gXToge1xuICAgICAgICBtYXJnaW5Ub3A6ICctMXB4JyxcbiAgICAgICAgbWFyZ2luQm90dG9tOiAnLTFweCdcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHB5OiAnc20nLFxuICAgICAgcHg6ICd4eGwnLFxuICAgICAgbGluZUhlaWdodDogJ2xnJ1xuICAgIH0sXG4gICAgbWQ6IHtcbiAgICAgIHB5OiAnc20nLFxuICAgICAgcHg6ICd4eGwnLFxuICAgICAgbGluZUhlaWdodDogJ2xnJ1xuICAgIH0sXG4gICAgbGc6IHtcbiAgICAgIHB5OiAnZGVmYXVsdCcsXG4gICAgICBweDogJ3gzJyxcbiAgICAgIGxpbmVIZWlnaHQ6ICdsZydcbiAgICB9LFxuICAgIGljb246IHtcbiAgICAgIHB5OiAnZGVmYXVsdCcsXG4gICAgICBweDogJ2RlZmF1bHQnLFxuICAgICAgbGluZUhlaWdodDogJ3NtJyxcbiAgICAgIG1pbldpZHRoOiAnMzRweCcsXG4gICAgICBoZWlnaHQ6ICczNHB4JyxcbiAgICAgIFtgJiAuJHtjc3NDbGFzcygnSWNvbicpfWBdOiB7XG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogQnV0dG9uIENTUyBTdHlsZXMgd2hpY2ggY2FuIGJlIHJldXNlZCBpbiBhbm90aGVyIGJ1dHRvbi1saWtlIGNvbXBvbmVudCB3aXRoIHN0eWxlZC1jb21wb25lbnRzXG4gKlxuICogVXNhZ2U6XG4gKiBgYGBcbiAqIGltcG9ydCB7IEJ1dHRvbkNTUyB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nXG4gKiBpbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSdcbiAqXG4gKiBjb25zdCBNeVN0eWxlZExpbmsgPSBzdHlsZWQoTGluaylgXG4gKiAgICR7QnV0dG9uQ1NTfVxuICogYFxuICogYGBgXG4gKiBAbWVtYmVyb2YgQnV0dG9uXG4gKiBAYWxpYXMgQnV0dG9uQ1NTXG4gKi9cbmV4cG9ydCBjb25zdCBCdXR0b25DU1MgPSBjc3NgXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBvdXRsaW5lOiAwO1xuICBmb250LWZhbWlseTogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuZm9udH07XG4gIGZvbnQtc2l6ZTogJHt0aGVtZUdldCgnZm9udFNpemVzJywgJ2RlZmF1bHQnKX07XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGJvcmRlci1yYWRpdXM6ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ3NtJyl9O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gIGJvcmRlcjogMXB4IHNvbGlkICR7dGhlbWVHZXQoJ2NvbG9ycycsICdwcmltYXJ5MTAwJyl9O1xuICBjb2xvcjogJHt0aGVtZUdldCgnY29sb3JzJywgJ3ByaW1hcnkxMDAnKX07XG5cbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgJiAuJHtjc3NDbGFzcygnSWNvbicpfSB7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBtYXJnaW46IDAgJHt0aGVtZUdldCgnc3BhY2UnLCAnbWQnKX0gMCAwO1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICB9XG5cbiAgdHJhbnNpdGlvbjogYWxsIDAuMXMgZWFzZS1pbjtcblxuICAkeyh7XG4gIHJvdW5kZWRcbn0pID0+IHJvdW5kZWQgPyAnYm9yZGVyLXJhZGl1czogOTk5OXB4JyA6ICcnfTtcblxuICAmOmRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMik7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjMpO1xuICAgIGN1cnNvcjogYXV0bztcblxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyxcbiAgICAmOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMik7XG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIH1cbiAgfVxuXG4gICR7c3R5bGVkQ29sb3J9O1xuICAke3NwYWNlfTtcbiAgJHt0eXBvZ3JhcGh5fTtcblxuICAke2J1dHRvblZhcmlhbnRzfTtcbiAgJHtzaXplVmFyaWFudHN9O1xuYDtcbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkNTUzsiLCJpbXBvcnQgeyBzdHlsZWQsIGNzcyB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IGNzc0NsYXNzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2luZGV4LmpzXCI7XG5pbXBvcnQgQnV0dG9uQ1NTIGZyb20gXCIuL2J1dHRvbi1jc3MuanNcIjtcbmNvbnN0IGFkZENvbnRlbnQgPSBjc3NgXG4gICY6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJHsoe1xuICBsYWJlbFxufSkgPT4gbGFiZWx9JztcbiAgfVxuYDtcblxuLyoqXG4gKiBAbG9hZCAuL2J1dHRvbi5kb2MubWRcbiAqIEBjb21wb25lbnRcbiAqIEBzZWUgQnV0dG9uUHJvcHNcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vc3Rvcnlib29rLmFkbWluanMuY28vP3BhdGg9L3N0b3J5L2Rlc2lnbnN5c3RlbS1hdG9tcy1idXR0b24tLWRlZmF1bHQgU3RvcnlCb29rfVxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHN1YmNhdGVnb3J5IEF0b21zXG4gKiBAc2VjdGlvbiBkZXNpZ24tc3lzdGVtXG4gKi9cblxuY29uc3QgQnV0dG9uID0gc3R5bGVkLmJ1dHRvbi5hdHRycyhwcm9wcyA9PiAoe1xuICBjbGFzc05hbWU6IGNzc0NsYXNzKCdCdXR0b24nLCBwcm9wcy5jbGFzc05hbWUpXG59KSlgXG4gICR7QnV0dG9uQ1NTfTtcbiAgJHsoe1xuICBsYWJlbFxufSkgPT4gbGFiZWwgPyBhZGRDb250ZW50IDogJyd9O1xuYDtcbkJ1dHRvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIHZhcmlhbnQ6ICd0ZXh0JyxcbiAgY29sb3I6ICdwcmltYXJ5JyxcbiAgc2l6ZTogJ21kJ1xufTtcbkJ1dHRvbi5kaXNwbGF5TmFtZSA9ICdCdXR0b24nO1xuZXhwb3J0IHsgQnV0dG9uIH07XG5leHBvcnQgZGVmYXVsdCBCdXR0b247IiwiaW1wb3J0IHsgY29sb3IsIHNwYWNlLCB0eXBvZ3JhcGh5LCB2YXJpYW50IH0gZnJvbSAnc3R5bGVkLXN5c3RlbSc7XG5pbXBvcnQgeyBzdHlsZWQsIGNzcyB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IGNzc0NsYXNzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2Nzcy1jbGFzcy5qc1wiO1xuaW1wb3J0IHRoZW1lR2V0IGZyb20gXCIuLi8uLi91dGlscy90aGVtZS1nZXQuanNcIjtcbmNvbnN0IGxhYmVsVmFyaWFudHMgPSB2YXJpYW50KHtcbiAgdmFyaWFudHM6IHtcbiAgICBwcmltYXJ5OiB7XG4gICAgICBjb2xvcjogJ3ByaW1hcnkxMDAnLFxuICAgICAgW2AmIC4ke2Nzc0NsYXNzKCdJY29uJyl9IHN2Z2BdOiB7XG4gICAgICAgIHN0cm9rZTogJ3ByaW1hcnkxMDAnXG4gICAgICB9XG4gICAgfSxcbiAgICBkYW5nZXI6IHtcbiAgICAgIGNvbG9yOiAnZXJyb3InLFxuICAgICAgW2AmIC4ke2Nzc0NsYXNzKCdJY29uJyl9IHN2Z2BdOiB7XG4gICAgICAgIHN0cm9rZTogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH0sXG4gICAgc3VjY2Vzczoge1xuICAgICAgY29sb3I6ICdzdWNjZXNzJyxcbiAgICAgIFtgJiAuJHtjc3NDbGFzcygnSWNvbicpfSBzdmdgXToge1xuICAgICAgICBzdHJva2U6ICdzdWNjZXNzJ1xuICAgICAgfVxuICAgIH0sXG4gICAgaW5mbzoge1xuICAgICAgY29sb3I6ICdpbmZvJyxcbiAgICAgIFtgJiAuJHtjc3NDbGFzcygnSWNvbicpfSBzdmdgXToge1xuICAgICAgICBzdHJva2U6ICdpbmZvJ1xuICAgICAgfVxuICAgIH0sXG4gICAgc2Vjb25kYXJ5OiB7XG4gICAgICBjb2xvcjogJ2FjY2VudCcsXG4gICAgICBbYCYgLiR7Y3NzQ2xhc3MoJ0ljb24nKX0gc3ZnYF06IHtcbiAgICAgICAgc3Ryb2tlOiAnYWNjZW50J1xuICAgICAgfVxuICAgIH0sXG4gICAgbGlnaHQ6IHtcbiAgICAgIGNvbG9yOiAnZ3JleTYwJyxcbiAgICAgIG1iOiAnc20nLFxuICAgICAgZm9udFdlaWdodDogJ2xpZ2h0JyxcbiAgICAgIFtgJiAuJHtjc3NDbGFzcygnSWNvbicpfSBzdmdgXToge1xuICAgICAgICBzdHJva2U6ICdncmV5NjAnXG4gICAgICB9XG4gICAgfSxcbiAgICBkZWZhdWx0OiB7fVxuICB9XG59KTtcblxuLyoqXG4gKiBQcm9wIFR5cGVzIG9mIGEgTGFiZWwgY29tcG9uZW50LlxuICogQXBhcnQgZnJvbSB0aG9zZSBleHBsaWNpdGx5IHNwZWNpZmllZCBiZWxvdyBpdCBleHRlbmRzIGFsbCB7QGxpbmsgQ29sb3JQcm9wc30sXG4gKiB7QGxpbmsgU3BhY2VQcm9wc30gYW5kIHtAbGluayBUeXBvZ3JhcGh5UHJvcHN9XG4gKlxuICogQG1lbWJlcm9mIExhYmVsXG4gKiBAYWxpYXMgTGFiZWxQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFsuLi5dIEFsbCBwcm9wcyBkZWZhdWx0IHRvIF9sYWJlbF8gaHRtbCBjb21wb25lbnQgbGlrZSBgaHRtbEZvcmAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYGlkYCBldGMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWy4uLl0gT3RoZXIgcHJvcHMgZnJvbSB7QGxpbmsgQ29sb3JQcm9wc30sIHtAbGluayBTcGFjZVByb3BzfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB7QGxpbmsgVHlwb2dyYXBoeVByb3BzfVxuICovXG5cbmNvbnN0IHNldERpc2FibGVkID0gKHtcbiAgZGlzYWJsZWQsXG4gIHRoZW1lXG59KSA9PiBkaXNhYmxlZCA/IGNzc2BcbiAgICBjb2xvcjogJHt0aGVtZS5jb2xvcnMuZ3JleTQwfTtcbiAgICAmIC4ke2Nzc0NsYXNzKCdJY29uJyl9IHN2ZyB7XG4gICAgICBzdHJva2U6ICR7dGhlbWUuY29sb3JzLmdyZXk0MH07XG4gICAgfVxuICBgIDogY3NzYGA7XG5cbi8qKlxuICogQGNsYXNzZGVzY1xuICpcbiAqIDxpbWcgc3JjPVwiY29tcG9uZW50cy9sYWJlbC5wbmdcIiAvPlxuICpcbiAqIFN0eWxlZCBmb3JtIG9mICoqbGFiZWwqKiBlbGVtZW50LlxuICpcbiAqICMjIyBVc2FnZVxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IExhYmVsLCBMYWJlbFByb3BzIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSdcbiAqIGBgYFxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBzdWJjYXRlZ29yeSBBdG9tc1xuICogQHNlZSBMYWJlbFByb3BzXG4gKiBAc2VlIHtAbGluayBodHRwczovL3N0b3J5Ym9vay5hZG1pbmpzLmNvLz9wYXRoPS9zdG9yeS9kZXNpZ25zeXN0ZW0tYXRvbXMtbGFiZWwtLWRlZmF1bHQgU3Rvcnlib29rfVxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQGV4YW1wbGUgPGNhcHRpb24+MiBEaWZmZXJlbnQgdmVyc2lvbnM8L2NhcHRpb24+XG4gKiByZXR1cm4gKFxuICogPEJveCBwPVwieGxcIj5cbiAqICAgPFRleHQ+XG4gKiAgICAgPExhYmVsIHVwcGVyY2FzZT5Tb21lIHVwcGVyY2FzZSBsYWJlbDwvTGFiZWw+XG4gKiAgIDwvVGV4dD5cbiAqICAgPFRleHQgbXQ9XCJkZWZhdWx0XCI+XG4gKiAgICAgPExhYmVsIHJlcXVpcmVkPkxhYmVsIGZvciByZXF1aXJlZCBmaWVsZDwvTGFiZWw+XG4gKiAgIDwvVGV4dD5cbiAqIDwvQm94PlxuICogKVxuICogQHNlY3Rpb24gZGVzaWduLXN5c3RlbVxuICovXG5jb25zdCBMYWJlbCA9IHN0eWxlZC5sYWJlbGBcbiAgZGlzcGxheTogJHsoe1xuICBpbmxpbmVcbn0pID0+IGlubGluZSA/ICdpbmxpbmUtYmxvY2snIDogJ2Jsb2NrJ307XG4gIGZvbnQtZmFtaWx5OiAke3RoZW1lR2V0KCdmb250Jyl9O1xuICBmb250LXNpemU6ICR7cHJvcHMgPT4gdGhlbWVHZXQoJ2ZvbnRTaXplcycsIHByb3BzLnNpemUgPT09ICdsZycgPyAnbWQnIDogJ3NtJykocHJvcHMpfTtcbiAgbGluZS1oZWlnaHQ6ICR7dGhlbWVHZXQoJ2xpbmVIZWlnaHRzJywgJ2RlZmF1bHQnKX07XG4gIG1hcmdpbi1ib3R0b206ICR7KHtcbiAgdGhlbWUsXG4gIGlubGluZVxufSkgPT4gaW5saW5lID8gJzAnIDogdGhlbWUuc3BhY2UuZGVmYXVsdH07XG5cbiAgJjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiJHsoe1xuICByZXF1aXJlZFxufSkgPT4gcmVxdWlyZWQgPyAnKicgOiAnJ31cIjtcbiAgICBjb2xvcjogJHt0aGVtZUdldCgnY29sb3JzJywgJ3ByaW1hcnkxMDAnKX07XG4gICAgbWFyZ2luLXJpZ2h0OiAke3RoZW1lR2V0KCdzcGFjZScsICdzbScpfTtcbiAgICBkaXNwbGF5OiAkeyh7XG4gIHJlcXVpcmVkXG59KSA9PiByZXF1aXJlZCA/ICdibG9jay1pbmxpbmUnIDogJ25vbmUnfTtcbiAgfVxuXG4gICYgPiAuJHtjc3NDbGFzcygnSWNvbicpfTpmaXJzdC1jaGlsZCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAke3RoZW1lR2V0KCdzcGFjZScsICdtZCcpfTtcbiAgfVxuXG4gICR7KHtcbiAgdXBwZXJjYXNlXG59KSA9PiB1cHBlcmNhc2UgPyAndGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsnIDogJyd9XG4gICR7Y29sb3J9O1xuICAke3R5cG9ncmFwaHl9O1xuICAke3NwYWNlfTtcbiAgJHtsYWJlbFZhcmlhbnRzfTtcbiAgJHtwcm9wcyA9PiBzZXREaXNhYmxlZChwcm9wcyl9O1xuYDtcbkxhYmVsLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiBjc3NDbGFzcygnTGFiZWwnKVxufTtcbkxhYmVsLmRpc3BsYXlOYW1lID0gJ0xhYmVsJztcbmV4cG9ydCB7IExhYmVsIH07XG5leHBvcnQgZGVmYXVsdCBMYWJlbDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVkLCBjc3MgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgZm9jdXNTaGFkb3dTdHlsZSBmcm9tIFwiLi4vLi4vdXRpbHMvZm9jdXMtc2hhZG93LnN0eWxlLmpzXCI7XG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9sYWJlbC9pbmRleC5qc1wiO1xuY29uc3QgSWNvbiA9IHN0eWxlZC5zdmdgXG4gIGZpbGw6IG5vbmU7XG4gIHN0cm9rZTogd2hpdGU7XG4gIHN0cm9rZS13aWR0aDogMnB4O1xuYDtcbmV4cG9ydCBjb25zdCBDaGVja2JveFJhZGlvQ29udGFpbmVyID0gc3R5bGVkLnNwYW5gXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAmICsgJHtMYWJlbH0ge1xuICAgIG1hcmdpbi1sZWZ0OiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5zcGFjZS5kZWZhdWx0fTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIG1hcmdpbi1ib3R0b206ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnNwYWNlLnNtfTtcbiAgfVxuYDtcblxuLy8gSGlkZSBjaGVja2JveCB2aXN1YWxseSBidXQgcmVtYWluIGFjY2Vzc2libGUgdG8gc2NyZWVuIHJlYWRlcnMuXG4vLyBTb3VyY2U6IGh0dHBzOi8vcG9saXNoZWQuanMub3JnL2RvY3MvI2hpZGV2aXN1YWxseVxuY29uc3QgSGlkZGVuQ2hlY2tib3ggPSBzdHlsZWQuaW5wdXQuYXR0cnMoe1xuICB0eXBlOiAnY2hlY2tib3gnXG59KWBcbiAgYm9yZGVyOiAwO1xuICBjbGlwOiByZWN0KDAgMCAwIDApO1xuICBoZWlnaHQ6IDFweDtcbiAgbWFyZ2luOiAtMXB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwYWRkaW5nOiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHdpZHRoOiAxcHg7XG5gO1xuY29uc3QgY2hlY2tib3hCYWNrZ3JvdW5kID0gKHRoZW1lLCBjaGVja2VkLCBkaXNhYmxlZCkgPT4ge1xuICBpZiAoY2hlY2tlZCkge1xuICAgIHJldHVybiBkaXNhYmxlZCA/IHRoZW1lLmNvbG9ycy5ncmV5NDAgOiB0aGVtZS5jb2xvcnMucHJpbWFyeTEwMDtcbiAgfVxuICByZXR1cm4gJ3RyYW5zcGFyZW50Jztcbn07XG5jb25zdCBTdHlsZWRDaGVja2JveCA9IHN0eWxlZC5hYFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxNnB4O1xuICAvKiB3aGVuIGl0IGlzIHBsYWNlZCB3aXRoaW4gYSBjb250YWluZXIgc2V0dGluZyBkaWZmZXJlbnQgZm9udCBzaXplICovXG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe1xuICB0aGVtZSxcbiAgY2hlY2tlZCxcbiAgZGlzYWJsZWRcbn0pID0+IGNoZWNrZWQgJiYgIWRpc2FibGVkID8gdGhlbWUuY29sb3JzLnByaW1hcnkxMDAgOiB0aGVtZS5jb2xvcnMuaW5wdXRCb3JkZXJ9O1xuICBoZWlnaHQ6IDE2cHg7XG4gIGJhY2tncm91bmQ6ICR7KHtcbiAgY2hlY2tlZCxcbiAgdGhlbWUsXG4gIGRpc2FibGVkXG59KSA9PiBjaGVja2JveEJhY2tncm91bmQodGhlbWUsIGNoZWNrZWQsIGRpc2FibGVkKX07XG4gIHRyYW5zaXRpb246IGFsbCAxNTBtcztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG5cbiAgJHtIaWRkZW5DaGVja2JveH06Zm9jdXMgKyAmIHtcbiAgICAkeyh7XG4gIHRoZW1lXG59KSA9PiBgYm94LXNoYWRvdzogJHtmb2N1c1NoYWRvd1N0eWxlKHRoZW1lKX07YH07XG4gIH1cbiAgJHtIaWRkZW5DaGVja2JveH06aG92ZXIgKyAmIHtcbiAgICBib3JkZXItY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5ncmV5NjB9O1xuICB9XG4gICR7SWNvbn0ge1xuICAgIHZpc2liaWxpdHk6ICR7cHJvcHMgPT4gcHJvcHMuY2hlY2tlZCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nfTtcbiAgfVxuXG4gICR7KHtcbiAgZGlzYWJsZWRcbn0pID0+ICFkaXNhYmxlZCAmJiBjc3NgXG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICBgfVxuXG4gICY6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAtNXB4O1xuICAgIHRvcDogLTVweDtcbiAgICB3aWR0aDogMjRweDtcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgb3BhY2l0eTogMDtcbiAgICBiYWNrZ3JvdW5kOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMucHJpbWFyeTEwMH07XG4gIH1cbiAgJjphZnRlcjpiZWZvcmUge1xuICAgIG9wYWNpdHk6IDAuMTtcbiAgfVxuYDtcbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQ2hlY2tCb3hQcm9wc1xuICogQGFsaWFzIENoZWNrQm94UHJvcHNcbiAqIEBtZW1iZXJvZiBtb2R1bGU6QGFkbWluanMvZGVzaWduLXN5c3RlbS5DaGVja0JveFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFsuLi5dIEFsbCBwcm9wcyBkZWZhdWx0IHRvIF9jaGVja2JveF8gaHRtbCBpbnB1dCBsaWtlIGBvbkNoYW5nZWAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYGNoZWNrZWRgIGV0Yy5cbiAqL1xuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKlxuICogPGltZyBzcmM9XCJjb21wb25lbnRzL2NoZWNrYm94LnBuZ1wiIC8+XG4gKlxuICogSFRNTCBDaGVja0JveFxuICpcbiAqICMjIyBVc2FnZVxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IENoZWNrQm94LCBDaGVja0JveFByb3BzIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSdcbiAqIGBgYFxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vc3Rvcnlib29rLmFkbWluanMuY28vP3BhdGg9L3N0b3J5L2Rlc2lnbnN5c3RlbS1hdG9tcy1jaGVja2JveC0tZGVmYXVsdCBTdG9yeUJvb2t9XG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAc3ViY2F0ZWdvcnkgQXRvbXNcbiAqIEBleGFtcGxlXG4gKiByZXR1cm4gKFxuICogICA8Qm94IHA9XCJ4bFwiPlxuICogICAgICA8Q2hlY2tCb3ggaWQ9XCJjaGVja2JveDFcIi8+XG4gKiAgICAgIDxMYWJlbCBpbmxpbmUgaHRtbEZvcj1cImNoZWNrYm94MVwiIG1sPVwiZGVmYXVsdFwiPlNvbWUgZXhhbXBsZSBsYWJlbDwvTGFiZWw+XG4gKiAgIDwvQm94PlxuICogKVxuICogQHNlY3Rpb24gZGVzaWduLXN5c3RlbVxuICovXG5jb25zdCBDaGVja0JveCA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBjaGVja2VkLFxuICAgIG9uQ2hhbmdlLFxuICAgIGRpc2FibGVkLFxuICAgIC4uLnJlc3RQcm9wc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtpc0NoZWNrZWQsIHNldENoZWNrZWRdID0gdXNlU3RhdGUoY2hlY2tlZCA/PyBmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVybjtcbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIG9uQ2hhbmdlKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0Q2hlY2tlZCghZXZlbnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgIH1cbiAgfTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRDaGVja2VkKGNoZWNrZWQgPz8gZmFsc2UpO1xuICB9LCBbY2hlY2tlZF0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3hSYWRpb0NvbnRhaW5lciwge1xuICAgIGNsYXNzTmFtZTogW2NsYXNzTmFtZSA/PyAnJywgJ2FkbWluanNfQ2hlY2tib3gnXS5qb2luKCcgJylcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSGlkZGVuQ2hlY2tib3gsIF9leHRlbmRzKHtcbiAgICBjaGVja2VkOiBpc0NoZWNrZWQsXG4gICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG4gIH0sIHJlc3RQcm9wcywge1xuICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZENoZWNrYm94LCB7XG4gICAgY2hlY2tlZDogaXNDaGVja2VkLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBvbkNsaWNrOiBldmVudCA9PiBoYW5kbGVDaGFuZ2UgJiYgaGFuZGxlQ2hhbmdlKGV2ZW50KVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMjAgNiA5IDE3IDQgMTJcIlxuICB9KSkpKTtcbn07XG5DaGVja0JveC5kaXNwbGF5TmFtZSA9ICdDaGVja0JveCc7XG5leHBvcnQgeyBDaGVja0JveCB9O1xuZXhwb3J0IGRlZmF1bHQgQ2hlY2tCb3g7IiwiaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYsIHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VSZWYsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuXHJcbnZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcclxuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xyXG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBmcm9tKTtcclxufVxuXG4vKipcbiAqIEVzY2FwZSByZWdleCBjaGFyXG4gKlxuICogU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNzg4NTg1NS91c2UtZHluYW1pYy12YXJpYWJsZS1zdHJpbmctYXMtcmVnZXgtcGF0dGVybi1pbi1qYXZhc2NyaXB0XG4gKi9cbnZhciBlc2NhcGVSZWdFeHAgPSBmdW5jdGlvbiAoc3RyaW5nVG9Hb0ludG9UaGVSZWdleCkge1xuICAgIHJldHVybiBzdHJpbmdUb0dvSW50b1RoZVJlZ2V4LnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xufTtcblxudmFyIGFiYnJNYXAgPSB7IGs6IDEwMDAsIG06IDEwMDAwMDAsIGI6IDEwMDAwMDAwMDAgfTtcbi8qKlxuICogUGFyc2UgYSB2YWx1ZSB3aXRoIGFiYnJldmlhdGlvbiBlLmcgMWsgPSAxMDAwXG4gKi9cbnZhciBwYXJzZUFiYnJWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSwgZGVjaW1hbFNlcGFyYXRvcikge1xuICAgIGlmIChkZWNpbWFsU2VwYXJhdG9yID09PSB2b2lkIDApIHsgZGVjaW1hbFNlcGFyYXRvciA9ICcuJzsgfVxuICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKFwiKFxcXFxkKyhcIiArIGVzY2FwZVJlZ0V4cChkZWNpbWFsU2VwYXJhdG9yKSArIFwiXFxcXGQqKT8pKFtrbWJdKSRcIiwgJ2knKTtcbiAgICB2YXIgbWF0Y2ggPSB2YWx1ZS5tYXRjaChyZWcpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgICB2YXIgZGlnaXRzID0gbWF0Y2hbMV0sIGFiYnIgPSBtYXRjaFszXTtcbiAgICAgICAgdmFyIG11bHRpcGxpZXIgPSBhYmJyTWFwW2FiYnIudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIHJldHVybiBOdW1iZXIoZGlnaXRzLnJlcGxhY2UoZGVjaW1hbFNlcGFyYXRvciwgJy4nKSkgKiBtdWx0aXBsaWVyO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZ3JvdXAgc2VwYXJhdG9yIGZyb20gdmFsdWUgZWcuIDEsMDAwID4gMTAwMFxuICovXG52YXIgcmVtb3ZlU2VwYXJhdG9ycyA9IGZ1bmN0aW9uICh2YWx1ZSwgc2VwYXJhdG9yKSB7XG4gICAgaWYgKHNlcGFyYXRvciA9PT0gdm9pZCAwKSB7IHNlcGFyYXRvciA9ICcsJzsgfVxuICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4cChzZXBhcmF0b3IpLCAnZycpO1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHJlZywgJycpO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgaW52YWxpZCBjaGFyYWN0ZXJzXG4gKi9cbnZhciByZW1vdmVJbnZhbGlkQ2hhcnMgPSBmdW5jdGlvbiAodmFsdWUsIHZhbGlkQ2hhcnMpIHtcbiAgICB2YXIgY2hhcnMgPSBlc2NhcGVSZWdFeHAodmFsaWRDaGFycy5qb2luKCcnKSk7XG4gICAgdmFyIHJlZyA9IG5ldyBSZWdFeHAoXCJbXlxcXFxkXCIgKyBjaGFycyArIFwiXVwiLCAnZ2knKTtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZShyZWcsICcnKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIHByZWZpeCwgc2VwYXJhdG9ycyBhbmQgZXh0cmEgZGVjaW1hbHMgZnJvbSB2YWx1ZVxuICovXG52YXIgY2xlYW5WYWx1ZSA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciB2YWx1ZSA9IF9hLnZhbHVlLCBfYiA9IF9hLmdyb3VwU2VwYXJhdG9yLCBncm91cFNlcGFyYXRvciA9IF9iID09PSB2b2lkIDAgPyAnLCcgOiBfYiwgX2MgPSBfYS5kZWNpbWFsU2VwYXJhdG9yLCBkZWNpbWFsU2VwYXJhdG9yID0gX2MgPT09IHZvaWQgMCA/ICcuJyA6IF9jLCBfZCA9IF9hLmFsbG93RGVjaW1hbHMsIGFsbG93RGVjaW1hbHMgPSBfZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9kLCBfZSA9IF9hLmRlY2ltYWxzTGltaXQsIGRlY2ltYWxzTGltaXQgPSBfZSA9PT0gdm9pZCAwID8gMiA6IF9lLCBfZiA9IF9hLmFsbG93TmVnYXRpdmVWYWx1ZSwgYWxsb3dOZWdhdGl2ZVZhbHVlID0gX2YgPT09IHZvaWQgMCA/IHRydWUgOiBfZiwgX2cgPSBfYS5kaXNhYmxlQWJicmV2aWF0aW9ucywgZGlzYWJsZUFiYnJldmlhdGlvbnMgPSBfZyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfZywgX2ggPSBfYS5wcmVmaXgsIHByZWZpeCA9IF9oID09PSB2b2lkIDAgPyAnJyA6IF9oLCBfaiA9IF9hLnRyYW5zZm9ybVJhd1ZhbHVlLCB0cmFuc2Zvcm1SYXdWYWx1ZSA9IF9qID09PSB2b2lkIDAgPyBmdW5jdGlvbiAocmF3VmFsdWUpIHsgcmV0dXJuIHJhd1ZhbHVlOyB9IDogX2o7XG4gICAgdmFyIHRyYW5zZm9ybWVkVmFsdWUgPSB0cmFuc2Zvcm1SYXdWYWx1ZSh2YWx1ZSk7XG4gICAgaWYgKHRyYW5zZm9ybWVkVmFsdWUgPT09ICctJykge1xuICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWRWYWx1ZTtcbiAgICB9XG4gICAgdmFyIGFiYnJldmlhdGlvbnMgPSBkaXNhYmxlQWJicmV2aWF0aW9ucyA/IFtdIDogWydrJywgJ20nLCAnYiddO1xuICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKFwiKChefFxcXFxEKS1cXFxcZCl8KC1cIiArIGVzY2FwZVJlZ0V4cChwcmVmaXgpICsgXCIpXCIpO1xuICAgIHZhciBpc05lZ2F0aXZlID0gcmVnLnRlc3QodHJhbnNmb3JtZWRWYWx1ZSk7XG4gICAgLy8gSXMgdGhlcmUgYSBkaWdpdCBiZWZvcmUgdGhlIHByZWZpeD8gZWcuIDEkXG4gICAgdmFyIF9rID0gUmVnRXhwKFwiKFxcXFxkKyktP1wiICsgZXNjYXBlUmVnRXhwKHByZWZpeCkpLmV4ZWModmFsdWUpIHx8IFtdLCBwcmVmaXhXaXRoVmFsdWUgPSBfa1swXSwgcHJlVmFsdWUgPSBfa1sxXTtcbiAgICB2YXIgd2l0aG91dFByZWZpeCA9IHByZWZpeFxuICAgICAgICA/IHByZWZpeFdpdGhWYWx1ZVxuICAgICAgICAgICAgPyB0cmFuc2Zvcm1lZFZhbHVlLnJlcGxhY2UocHJlZml4V2l0aFZhbHVlLCAnJykuY29uY2F0KHByZVZhbHVlKVxuICAgICAgICAgICAgOiB0cmFuc2Zvcm1lZFZhbHVlLnJlcGxhY2UocHJlZml4LCAnJylcbiAgICAgICAgOiB0cmFuc2Zvcm1lZFZhbHVlO1xuICAgIHZhciB3aXRob3V0U2VwYXJhdG9ycyA9IHJlbW92ZVNlcGFyYXRvcnMod2l0aG91dFByZWZpeCwgZ3JvdXBTZXBhcmF0b3IpO1xuICAgIHZhciB3aXRob3V0SW52YWxpZENoYXJzID0gcmVtb3ZlSW52YWxpZENoYXJzKHdpdGhvdXRTZXBhcmF0b3JzLCBfX3NwcmVhZEFycmF5KFtcbiAgICAgICAgZ3JvdXBTZXBhcmF0b3IsXG4gICAgICAgIGRlY2ltYWxTZXBhcmF0b3JcbiAgICBdLCBhYmJyZXZpYXRpb25zKSk7XG4gICAgdmFyIHZhbHVlT25seSA9IHdpdGhvdXRJbnZhbGlkQ2hhcnM7XG4gICAgaWYgKCFkaXNhYmxlQWJicmV2aWF0aW9ucykge1xuICAgICAgICAvLyBkaXNhbGxvdyBsZXR0ZXIgd2l0aG91dCBudW1iZXJcbiAgICAgICAgaWYgKGFiYnJldmlhdGlvbnMuc29tZShmdW5jdGlvbiAobGV0dGVyKSB7IHJldHVybiBsZXR0ZXIgPT09IHdpdGhvdXRJbnZhbGlkQ2hhcnMudG9Mb3dlckNhc2UoKTsgfSkpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyc2VkID0gcGFyc2VBYmJyVmFsdWUod2l0aG91dEludmFsaWRDaGFycywgZGVjaW1hbFNlcGFyYXRvcik7XG4gICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICAgIHZhbHVlT25seSA9IFN0cmluZyhwYXJzZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBpbmNsdWRlTmVnYXRpdmUgPSBpc05lZ2F0aXZlICYmIGFsbG93TmVnYXRpdmVWYWx1ZSA/ICctJyA6ICcnO1xuICAgIGlmIChkZWNpbWFsU2VwYXJhdG9yICYmIHZhbHVlT25seS5pbmNsdWRlcyhkZWNpbWFsU2VwYXJhdG9yKSkge1xuICAgICAgICB2YXIgX2wgPSB3aXRob3V0SW52YWxpZENoYXJzLnNwbGl0KGRlY2ltYWxTZXBhcmF0b3IpLCBpbnQgPSBfbFswXSwgZGVjaW1hbHMgPSBfbFsxXTtcbiAgICAgICAgdmFyIHRyaW1tZWREZWNpbWFscyA9IGRlY2ltYWxzTGltaXQgJiYgZGVjaW1hbHMgPyBkZWNpbWFscy5zbGljZSgwLCBkZWNpbWFsc0xpbWl0KSA6IGRlY2ltYWxzO1xuICAgICAgICB2YXIgaW5jbHVkZURlY2ltYWxzID0gYWxsb3dEZWNpbWFscyA/IFwiXCIgKyBkZWNpbWFsU2VwYXJhdG9yICsgdHJpbW1lZERlY2ltYWxzIDogJyc7XG4gICAgICAgIHJldHVybiBcIlwiICsgaW5jbHVkZU5lZ2F0aXZlICsgaW50ICsgaW5jbHVkZURlY2ltYWxzO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIiArIGluY2x1ZGVOZWdhdGl2ZSArIHZhbHVlT25seTtcbn07XG5cbnZhciBmaXhlZERlY2ltYWxWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSwgZGVjaW1hbFNlcGFyYXRvciwgZml4ZWREZWNpbWFsTGVuZ3RoKSB7XG4gICAgaWYgKGZpeGVkRGVjaW1hbExlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhkZWNpbWFsU2VwYXJhdG9yKSkge1xuICAgICAgICAgICAgdmFyIF9hID0gdmFsdWUuc3BsaXQoZGVjaW1hbFNlcGFyYXRvciksIGludCA9IF9hWzBdLCBkZWNpbWFscyA9IF9hWzFdO1xuICAgICAgICAgICAgaWYgKGRlY2ltYWxzLmxlbmd0aCA+IGZpeGVkRGVjaW1hbExlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiICsgaW50ICsgZGVjaW1hbFNlcGFyYXRvciArIGRlY2ltYWxzLnNsaWNlKDAsIGZpeGVkRGVjaW1hbExlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlZyA9IHZhbHVlLmxlbmd0aCA+IGZpeGVkRGVjaW1hbExlbmd0aFxuICAgICAgICAgICAgPyBuZXcgUmVnRXhwKFwiKFxcXFxkKykoXFxcXGR7XCIgKyBmaXhlZERlY2ltYWxMZW5ndGggKyBcIn0pXCIpXG4gICAgICAgICAgICA6IG5ldyBSZWdFeHAoXCIoXFxcXGQpKFxcXFxkKylcIik7XG4gICAgICAgIHZhciBtYXRjaCA9IHZhbHVlLm1hdGNoKHJlZyk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgdmFyIGludCA9IG1hdGNoWzFdLCBkZWNpbWFscyA9IG1hdGNoWzJdO1xuICAgICAgICAgICAgcmV0dXJuIFwiXCIgKyBpbnQgKyBkZWNpbWFsU2VwYXJhdG9yICsgZGVjaW1hbHM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufTtcblxudmFyIGdldFN1ZmZpeCA9IGZ1bmN0aW9uICh2YWx1ZSwgX2EpIHtcbiAgICB2YXIgX2IgPSBfYS5ncm91cFNlcGFyYXRvciwgZ3JvdXBTZXBhcmF0b3IgPSBfYiA9PT0gdm9pZCAwID8gJywnIDogX2IsIF9jID0gX2EuZGVjaW1hbFNlcGFyYXRvciwgZGVjaW1hbFNlcGFyYXRvciA9IF9jID09PSB2b2lkIDAgPyAnLicgOiBfYztcbiAgICB2YXIgc3VmZml4UmVnID0gbmV3IFJlZ0V4cChcIlxcXFxkKFteXCIgKyBlc2NhcGVSZWdFeHAoZ3JvdXBTZXBhcmF0b3IpICsgZXNjYXBlUmVnRXhwKGRlY2ltYWxTZXBhcmF0b3IpICsgXCIwLTldKylcIik7XG4gICAgdmFyIHN1ZmZpeE1hdGNoID0gdmFsdWUubWF0Y2goc3VmZml4UmVnKTtcbiAgICByZXR1cm4gc3VmZml4TWF0Y2ggPyBzdWZmaXhNYXRjaFsxXSA6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogRm9ybWF0IHZhbHVlIHdpdGggZGVjaW1hbCBzZXBhcmF0b3IsIGdyb3VwIHNlcGFyYXRvciBhbmQgcHJlZml4XG4gKi9cbnZhciBmb3JtYXRWYWx1ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIF92YWx1ZSA9IG9wdGlvbnMudmFsdWUsIGRlY2ltYWxTZXBhcmF0b3IgPSBvcHRpb25zLmRlY2ltYWxTZXBhcmF0b3IsIGludGxDb25maWcgPSBvcHRpb25zLmludGxDb25maWcsIGRlY2ltYWxTY2FsZSA9IG9wdGlvbnMuZGVjaW1hbFNjYWxlLCBfYSA9IG9wdGlvbnMucHJlZml4LCBwcmVmaXggPSBfYSA9PT0gdm9pZCAwID8gJycgOiBfYSwgX2IgPSBvcHRpb25zLnN1ZmZpeCwgc3VmZml4ID0gX2IgPT09IHZvaWQgMCA/ICcnIDogX2I7XG4gICAgaWYgKF92YWx1ZSA9PT0gJycgfHwgX3ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAoX3ZhbHVlID09PSAnLScpIHtcbiAgICAgICAgcmV0dXJuICctJztcbiAgICB9XG4gICAgdmFyIGlzTmVnYXRpdmUgPSBuZXcgUmVnRXhwKFwiXlxcXFxkPy1cIiArIChwcmVmaXggPyBlc2NhcGVSZWdFeHAocHJlZml4KSArIFwiP1wiIDogJycpICsgXCJcXFxcZFwiKS50ZXN0KF92YWx1ZSk7XG4gICAgdmFyIHZhbHVlID0gZGVjaW1hbFNlcGFyYXRvciAhPT0gJy4nXG4gICAgICAgID8gcmVwbGFjZURlY2ltYWxTZXBhcmF0b3IoX3ZhbHVlLCBkZWNpbWFsU2VwYXJhdG9yLCBpc05lZ2F0aXZlKVxuICAgICAgICA6IF92YWx1ZTtcbiAgICB2YXIgZGVmYXVsdE51bWJlckZvcm1hdE9wdGlvbnMgPSB7XG4gICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZGVjaW1hbFNjYWxlIHx8IDAsXG4gICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMjAsXG4gICAgfTtcbiAgICB2YXIgbnVtYmVyRm9ybWF0dGVyID0gaW50bENvbmZpZ1xuICAgICAgICA/IG5ldyBJbnRsLk51bWJlckZvcm1hdChpbnRsQ29uZmlnLmxvY2FsZSwgaW50bENvbmZpZy5jdXJyZW5jeVxuICAgICAgICAgICAgPyBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZGVmYXVsdE51bWJlckZvcm1hdE9wdGlvbnMpLCB7IHN0eWxlOiAnY3VycmVuY3knLCBjdXJyZW5jeTogaW50bENvbmZpZy5jdXJyZW5jeSB9KSA6IGRlZmF1bHROdW1iZXJGb3JtYXRPcHRpb25zKVxuICAgICAgICA6IG5ldyBJbnRsLk51bWJlckZvcm1hdCh1bmRlZmluZWQsIGRlZmF1bHROdW1iZXJGb3JtYXRPcHRpb25zKTtcbiAgICB2YXIgcGFydHMgPSBudW1iZXJGb3JtYXR0ZXIuZm9ybWF0VG9QYXJ0cyhOdW1iZXIodmFsdWUpKTtcbiAgICB2YXIgZm9ybWF0dGVkID0gcmVwbGFjZVBhcnRzKHBhcnRzLCBvcHRpb25zKTtcbiAgICAvLyBEb2VzIGludGwgZm9ybWF0dGluZyBhZGQgYSBzdWZmaXg/XG4gICAgdmFyIGludGxTdWZmaXggPSBnZXRTdWZmaXgoZm9ybWF0dGVkLCBfX2Fzc2lnbih7fSwgb3B0aW9ucykpO1xuICAgIC8vIEluY2x1ZGUgZGVjaW1hbCBzZXBhcmF0b3IgaWYgdXNlciBpbnB1dCBlbmRzIHdpdGggZGVjaW1hbCBzZXBhcmF0b3JcbiAgICB2YXIgaW5jbHVkZURlY2ltYWxTZXBhcmF0b3IgPSBfdmFsdWUuc2xpY2UoLTEpID09PSBkZWNpbWFsU2VwYXJhdG9yID8gZGVjaW1hbFNlcGFyYXRvciA6ICcnO1xuICAgIHZhciBfYyA9IHZhbHVlLm1hdGNoKFJlZ0V4cCgnXFxcXGQrXFxcXC4oXFxcXGQrKScpKSB8fCBbXSwgZGVjaW1hbHMgPSBfY1sxXTtcbiAgICAvLyBLZWVwIG9yaWdpbmFsIGRlY2ltYWwgcGFkZGluZyBpZiBubyBkZWNpbWFsU2NhbGVcbiAgICBpZiAoZGVjaW1hbFNjYWxlID09PSB1bmRlZmluZWQgJiYgZGVjaW1hbHMgJiYgZGVjaW1hbFNlcGFyYXRvcikge1xuICAgICAgICBpZiAoZm9ybWF0dGVkLmluY2x1ZGVzKGRlY2ltYWxTZXBhcmF0b3IpKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZShSZWdFeHAoXCIoXFxcXGQrKShcIiArIGVzY2FwZVJlZ0V4cChkZWNpbWFsU2VwYXJhdG9yKSArIFwiKShcXFxcZCspXCIsICdnJyksIFwiJDEkMlwiICsgZGVjaW1hbHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGludGxTdWZmaXggJiYgIXN1ZmZpeCkge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKGludGxTdWZmaXgsIFwiXCIgKyBkZWNpbWFsU2VwYXJhdG9yICsgZGVjaW1hbHMgKyBpbnRsU3VmZml4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlZCA9IFwiXCIgKyBmb3JtYXR0ZWQgKyBkZWNpbWFsU2VwYXJhdG9yICsgZGVjaW1hbHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN1ZmZpeCAmJiBpbmNsdWRlRGVjaW1hbFNlcGFyYXRvcikge1xuICAgICAgICByZXR1cm4gXCJcIiArIGZvcm1hdHRlZCArIGluY2x1ZGVEZWNpbWFsU2VwYXJhdG9yICsgc3VmZml4O1xuICAgIH1cbiAgICBpZiAoaW50bFN1ZmZpeCAmJiBpbmNsdWRlRGVjaW1hbFNlcGFyYXRvcikge1xuICAgICAgICByZXR1cm4gZm9ybWF0dGVkLnJlcGxhY2UoaW50bFN1ZmZpeCwgXCJcIiArIGluY2x1ZGVEZWNpbWFsU2VwYXJhdG9yICsgaW50bFN1ZmZpeCk7XG4gICAgfVxuICAgIGlmIChpbnRsU3VmZml4ICYmIHN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0dGVkLnJlcGxhY2UoaW50bFN1ZmZpeCwgXCJcIiArIGluY2x1ZGVEZWNpbWFsU2VwYXJhdG9yICsgc3VmZml4KTtcbiAgICB9XG4gICAgcmV0dXJuIFtmb3JtYXR0ZWQsIGluY2x1ZGVEZWNpbWFsU2VwYXJhdG9yLCBzdWZmaXhdLmpvaW4oJycpO1xufTtcbi8qKlxuICogQmVmb3JlIGNvbnZlcnRpbmcgdG8gTnVtYmVyLCBkZWNpbWFsIHNlcGFyYXRvciBoYXMgdG8gYmUgLlxuICovXG52YXIgcmVwbGFjZURlY2ltYWxTZXBhcmF0b3IgPSBmdW5jdGlvbiAodmFsdWUsIGRlY2ltYWxTZXBhcmF0b3IsIGlzTmVnYXRpdmUpIHtcbiAgICB2YXIgbmV3VmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAoZGVjaW1hbFNlcGFyYXRvciAmJiBkZWNpbWFsU2VwYXJhdG9yICE9PSAnLicpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBuZXdWYWx1ZS5yZXBsYWNlKFJlZ0V4cChlc2NhcGVSZWdFeHAoZGVjaW1hbFNlcGFyYXRvciksICdnJyksICcuJyk7XG4gICAgICAgIGlmIChpc05lZ2F0aXZlICYmIGRlY2ltYWxTZXBhcmF0b3IgPT09ICctJykge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBcIi1cIiArIG5ld1ZhbHVlLnNsaWNlKDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdWYWx1ZTtcbn07XG52YXIgcmVwbGFjZVBhcnRzID0gZnVuY3Rpb24gKHBhcnRzLCBfYSkge1xuICAgIHZhciBwcmVmaXggPSBfYS5wcmVmaXgsIGdyb3VwU2VwYXJhdG9yID0gX2EuZ3JvdXBTZXBhcmF0b3IsIGRlY2ltYWxTZXBhcmF0b3IgPSBfYS5kZWNpbWFsU2VwYXJhdG9yLCBkZWNpbWFsU2NhbGUgPSBfYS5kZWNpbWFsU2NhbGUsIF9iID0gX2EuZGlzYWJsZUdyb3VwU2VwYXJhdG9ycywgZGlzYWJsZUdyb3VwU2VwYXJhdG9ycyA9IF9iID09PSB2b2lkIDAgPyBmYWxzZSA6IF9iO1xuICAgIHJldHVybiBwYXJ0c1xuICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBfYSwgaSkge1xuICAgICAgICB2YXIgdHlwZSA9IF9hLnR5cGUsIHZhbHVlID0gX2EudmFsdWU7XG4gICAgICAgIGlmIChpID09PSAwICYmIHByZWZpeCkge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdtaW51c1NpZ24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZSwgcHJlZml4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnY3VycmVuY3knKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgcHJldiksIFtwcmVmaXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbcHJlZml4LCB2YWx1ZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdjdXJyZW5jeScpIHtcbiAgICAgICAgICAgIHJldHVybiBwcmVmaXggPyBwcmV2IDogX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBwcmV2KSwgW3ZhbHVlXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIHJldHVybiAhZGlzYWJsZUdyb3VwU2VwYXJhdG9yc1xuICAgICAgICAgICAgICAgID8gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBwcmV2KSwgW2dyb3VwU2VwYXJhdG9yICE9PSB1bmRlZmluZWQgPyBncm91cFNlcGFyYXRvciA6IHZhbHVlXSkgOiBwcmV2O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlID09PSAnZGVjaW1hbCcpIHtcbiAgICAgICAgICAgIGlmIChkZWNpbWFsU2NhbGUgIT09IHVuZGVmaW5lZCAmJiBkZWNpbWFsU2NhbGUgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIHByZXYpLCBbZGVjaW1hbFNlcGFyYXRvciAhPT0gdW5kZWZpbmVkID8gZGVjaW1hbFNlcGFyYXRvciA6IHZhbHVlXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdmcmFjdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIHByZXYpLCBbZGVjaW1hbFNjYWxlICE9PSB1bmRlZmluZWQgPyB2YWx1ZS5zbGljZSgwLCBkZWNpbWFsU2NhbGUpIDogdmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBwcmV2KSwgW3ZhbHVlXSk7XG4gICAgfSwgWycnXSlcbiAgICAgICAgLmpvaW4oJycpO1xufTtcblxudmFyIGRlZmF1bHRDb25maWcgPSB7XG4gICAgY3VycmVuY3lTeW1ib2w6ICcnLFxuICAgIGdyb3VwU2VwYXJhdG9yOiAnJyxcbiAgICBkZWNpbWFsU2VwYXJhdG9yOiAnJyxcbiAgICBwcmVmaXg6ICcnLFxuICAgIHN1ZmZpeDogJycsXG59O1xuLyoqXG4gKiBHZXQgbG9jYWxlIGNvbmZpZyBmcm9tIGlucHV0IG9yIGRlZmF1bHRcbiAqL1xudmFyIGdldExvY2FsZUNvbmZpZyA9IGZ1bmN0aW9uIChpbnRsQ29uZmlnKSB7XG4gICAgdmFyIF9hID0gaW50bENvbmZpZyB8fCB7fSwgbG9jYWxlID0gX2EubG9jYWxlLCBjdXJyZW5jeSA9IF9hLmN1cnJlbmN5O1xuICAgIHZhciBudW1iZXJGb3JtYXR0ZXIgPSBsb2NhbGVcbiAgICAgICAgPyBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlLCBjdXJyZW5jeSA/IHsgY3VycmVuY3k6IGN1cnJlbmN5LCBzdHlsZTogJ2N1cnJlbmN5JyB9IDogdW5kZWZpbmVkKVxuICAgICAgICA6IG5ldyBJbnRsLk51bWJlckZvcm1hdCgpO1xuICAgIHJldHVybiBudW1iZXJGb3JtYXR0ZXIuZm9ybWF0VG9QYXJ0cygxMDAwLjEpLnJlZHVjZShmdW5jdGlvbiAocHJldiwgY3VyciwgaSkge1xuICAgICAgICBpZiAoY3Vyci50eXBlID09PSAnY3VycmVuY3knKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcHJldiksIHsgY3VycmVuY3lTeW1ib2w6IGN1cnIudmFsdWUsIHByZWZpeDogY3Vyci52YWx1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcHJldiksIHsgY3VycmVuY3lTeW1ib2w6IGN1cnIudmFsdWUsIHN1ZmZpeDogY3Vyci52YWx1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3Vyci50eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIHByZXYpLCB7IGdyb3VwU2VwYXJhdG9yOiBjdXJyLnZhbHVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyLnR5cGUgPT09ICdkZWNpbWFsJykge1xuICAgICAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBwcmV2KSwgeyBkZWNpbWFsU2VwYXJhdG9yOiBjdXJyLnZhbHVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIGRlZmF1bHRDb25maWcpO1xufTtcblxudmFyIGlzTnVtYmVyID0gZnVuY3Rpb24gKGlucHV0KSB7IHJldHVybiBSZWdFeHAoL1xcZC8sICdnaScpLnRlc3QoaW5wdXQpOyB9O1xuXG52YXIgcGFkVHJpbVZhbHVlID0gZnVuY3Rpb24gKHZhbHVlLCBkZWNpbWFsU2VwYXJhdG9yLCBkZWNpbWFsU2NhbGUpIHtcbiAgICBpZiAoZGVjaW1hbFNlcGFyYXRvciA9PT0gdm9pZCAwKSB7IGRlY2ltYWxTZXBhcmF0b3IgPSAnLic7IH1cbiAgICBpZiAoZGVjaW1hbFNjYWxlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoIXZhbHVlLm1hdGNoKC9cXGQvZykpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICB2YXIgX2EgPSB2YWx1ZS5zcGxpdChkZWNpbWFsU2VwYXJhdG9yKSwgaW50ID0gX2FbMF0sIGRlY2ltYWxzID0gX2FbMV07XG4gICAgaWYgKGRlY2ltYWxTY2FsZSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gaW50O1xuICAgIH1cbiAgICB2YXIgbmV3VmFsdWUgPSBkZWNpbWFscyB8fCAnJztcbiAgICBpZiAobmV3VmFsdWUubGVuZ3RoIDwgZGVjaW1hbFNjYWxlKSB7XG4gICAgICAgIHdoaWxlIChuZXdWYWx1ZS5sZW5ndGggPCBkZWNpbWFsU2NhbGUpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlICs9ICcwJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWUgPSBuZXdWYWx1ZS5zbGljZSgwLCBkZWNpbWFsU2NhbGUpO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIiArIGludCArIGRlY2ltYWxTZXBhcmF0b3IgKyBuZXdWYWx1ZTtcbn07XG5cbi8qKlxuICogQmFzZWQgb24gdGhlIGxhc3Qga2V5IHN0cm9rZSBhbmQgdGhlIGN1cnNvciBwb3NpdGlvbiwgdXBkYXRlIHRoZSB2YWx1ZVxuICogYW5kIHJlcG9zaXRpb24gdGhlIGN1cnNvciB0byB0aGUgcmlnaHQgcGxhY2VcbiAqL1xudmFyIHJlcG9zaXRpb25DdXJzb3IgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSBfYS5zZWxlY3Rpb25TdGFydCwgdmFsdWUgPSBfYS52YWx1ZSwgbGFzdEtleVN0cm9rZSA9IF9hLmxhc3RLZXlTdHJva2UsIHN0YXRlVmFsdWUgPSBfYS5zdGF0ZVZhbHVlLCBncm91cFNlcGFyYXRvciA9IF9hLmdyb3VwU2VwYXJhdG9yO1xuICAgIHZhciBjdXJzb3JQb3NpdGlvbiA9IHNlbGVjdGlvblN0YXJ0O1xuICAgIHZhciBtb2RpZmllZFZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHN0YXRlVmFsdWUgJiYgY3Vyc29yUG9zaXRpb24pIHtcbiAgICAgICAgdmFyIHNwbGl0VmFsdWUgPSB2YWx1ZS5zcGxpdCgnJyk7XG4gICAgICAgIC8vIGlmIGN1cnNvciBpcyB0byByaWdodCBvZiBncm91cFNlcGFyYXRvciBhbmQgYmFja3NwYWNlIHByZXNzZWQsIGRlbGV0ZSB0aGUgY2hhcmFjdGVyIHRvIHRoZSBsZWZ0IG9mIHRoZSBzZXBhcmF0b3IgYW5kIHJlcG9zaXRpb24gdGhlIGN1cnNvclxuICAgICAgICBpZiAobGFzdEtleVN0cm9rZSA9PT0gJ0JhY2tzcGFjZScgJiYgc3RhdGVWYWx1ZVtjdXJzb3JQb3NpdGlvbl0gPT09IGdyb3VwU2VwYXJhdG9yKSB7XG4gICAgICAgICAgICBzcGxpdFZhbHVlLnNwbGljZShjdXJzb3JQb3NpdGlvbiAtIDEsIDEpO1xuICAgICAgICAgICAgY3Vyc29yUG9zaXRpb24gLT0gMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBjdXJzb3IgaXMgdG8gbGVmdCBvZiBncm91cFNlcGFyYXRvciBhbmQgZGVsZXRlIHByZXNzZWQsIGRlbGV0ZSB0aGUgY2hhcmFjdGVyIHRvIHRoZSByaWdodCBvZiB0aGUgc2VwYXJhdG9yIGFuZCByZXBvc2l0aW9uIHRoZSBjdXJzb3JcbiAgICAgICAgaWYgKGxhc3RLZXlTdHJva2UgPT09ICdEZWxldGUnICYmIHN0YXRlVmFsdWVbY3Vyc29yUG9zaXRpb25dID09PSBncm91cFNlcGFyYXRvcikge1xuICAgICAgICAgICAgc3BsaXRWYWx1ZS5zcGxpY2UoY3Vyc29yUG9zaXRpb24sIDEpO1xuICAgICAgICAgICAgY3Vyc29yUG9zaXRpb24gKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBtb2RpZmllZFZhbHVlID0gc3BsaXRWYWx1ZS5qb2luKCcnKTtcbiAgICAgICAgcmV0dXJuIHsgbW9kaWZpZWRWYWx1ZTogbW9kaWZpZWRWYWx1ZSwgY3Vyc29yUG9zaXRpb246IGN1cnNvclBvc2l0aW9uIH07XG4gICAgfVxuICAgIHJldHVybiB7IG1vZGlmaWVkVmFsdWU6IG1vZGlmaWVkVmFsdWUsIGN1cnNvclBvc2l0aW9uOiBzZWxlY3Rpb25TdGFydCB9O1xufTtcblxudmFyIEN1cnJlbmN5SW5wdXQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfYSwgcmVmKSB7XG4gICAgdmFyIF9iID0gX2EuYWxsb3dEZWNpbWFscywgYWxsb3dEZWNpbWFscyA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2IsIF9jID0gX2EuYWxsb3dOZWdhdGl2ZVZhbHVlLCBhbGxvd05lZ2F0aXZlVmFsdWUgPSBfYyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9jLCBpZCA9IF9hLmlkLCBuYW1lID0gX2EubmFtZSwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBjdXN0b21JbnB1dCA9IF9hLmN1c3RvbUlucHV0LCBkZWNpbWFsc0xpbWl0ID0gX2EuZGVjaW1hbHNMaW1pdCwgZGVmYXVsdFZhbHVlID0gX2EuZGVmYXVsdFZhbHVlLCBfZCA9IF9hLmRpc2FibGVkLCBkaXNhYmxlZCA9IF9kID09PSB2b2lkIDAgPyBmYWxzZSA6IF9kLCB1c2VyTWF4TGVuZ3RoID0gX2EubWF4TGVuZ3RoLCB1c2VyVmFsdWUgPSBfYS52YWx1ZSwgb25WYWx1ZUNoYW5nZSA9IF9hLm9uVmFsdWVDaGFuZ2UsIGZpeGVkRGVjaW1hbExlbmd0aCA9IF9hLmZpeGVkRGVjaW1hbExlbmd0aCwgcGxhY2Vob2xkZXIgPSBfYS5wbGFjZWhvbGRlciwgZGVjaW1hbFNjYWxlID0gX2EuZGVjaW1hbFNjYWxlLCBwcmVmaXggPSBfYS5wcmVmaXgsIHN1ZmZpeCA9IF9hLnN1ZmZpeCwgaW50bENvbmZpZyA9IF9hLmludGxDb25maWcsIHN0ZXAgPSBfYS5zdGVwLCBtaW4gPSBfYS5taW4sIG1heCA9IF9hLm1heCwgX2UgPSBfYS5kaXNhYmxlR3JvdXBTZXBhcmF0b3JzLCBkaXNhYmxlR3JvdXBTZXBhcmF0b3JzID0gX2UgPT09IHZvaWQgMCA/IGZhbHNlIDogX2UsIF9mID0gX2EuZGlzYWJsZUFiYnJldmlhdGlvbnMsIGRpc2FibGVBYmJyZXZpYXRpb25zID0gX2YgPT09IHZvaWQgMCA/IGZhbHNlIDogX2YsIF9kZWNpbWFsU2VwYXJhdG9yID0gX2EuZGVjaW1hbFNlcGFyYXRvciwgX2dyb3VwU2VwYXJhdG9yID0gX2EuZ3JvdXBTZXBhcmF0b3IsIG9uQ2hhbmdlID0gX2Eub25DaGFuZ2UsIG9uRm9jdXMgPSBfYS5vbkZvY3VzLCBvbkJsdXIgPSBfYS5vbkJsdXIsIG9uS2V5RG93biA9IF9hLm9uS2V5RG93biwgb25LZXlVcCA9IF9hLm9uS2V5VXAsIHRyYW5zZm9ybVJhd1ZhbHVlID0gX2EudHJhbnNmb3JtUmF3VmFsdWUsIHByb3BzID0gX19yZXN0KF9hLCBbXCJhbGxvd0RlY2ltYWxzXCIsIFwiYWxsb3dOZWdhdGl2ZVZhbHVlXCIsIFwiaWRcIiwgXCJuYW1lXCIsIFwiY2xhc3NOYW1lXCIsIFwiY3VzdG9tSW5wdXRcIiwgXCJkZWNpbWFsc0xpbWl0XCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiZGlzYWJsZWRcIiwgXCJtYXhMZW5ndGhcIiwgXCJ2YWx1ZVwiLCBcIm9uVmFsdWVDaGFuZ2VcIiwgXCJmaXhlZERlY2ltYWxMZW5ndGhcIiwgXCJwbGFjZWhvbGRlclwiLCBcImRlY2ltYWxTY2FsZVwiLCBcInByZWZpeFwiLCBcInN1ZmZpeFwiLCBcImludGxDb25maWdcIiwgXCJzdGVwXCIsIFwibWluXCIsIFwibWF4XCIsIFwiZGlzYWJsZUdyb3VwU2VwYXJhdG9yc1wiLCBcImRpc2FibGVBYmJyZXZpYXRpb25zXCIsIFwiZGVjaW1hbFNlcGFyYXRvclwiLCBcImdyb3VwU2VwYXJhdG9yXCIsIFwib25DaGFuZ2VcIiwgXCJvbkZvY3VzXCIsIFwib25CbHVyXCIsIFwib25LZXlEb3duXCIsIFwib25LZXlVcFwiLCBcInRyYW5zZm9ybVJhd1ZhbHVlXCJdKTtcbiAgICBpZiAoX2RlY2ltYWxTZXBhcmF0b3IgJiYgaXNOdW1iZXIoX2RlY2ltYWxTZXBhcmF0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZGVjaW1hbFNlcGFyYXRvciBjYW5ub3QgYmUgYSBudW1iZXInKTtcbiAgICB9XG4gICAgaWYgKF9ncm91cFNlcGFyYXRvciAmJiBpc051bWJlcihfZ3JvdXBTZXBhcmF0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ3JvdXBTZXBhcmF0b3IgY2Fubm90IGJlIGEgbnVtYmVyJyk7XG4gICAgfVxuICAgIHZhciBsb2NhbGVDb25maWcgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldExvY2FsZUNvbmZpZyhpbnRsQ29uZmlnKTsgfSwgW2ludGxDb25maWddKTtcbiAgICB2YXIgZGVjaW1hbFNlcGFyYXRvciA9IF9kZWNpbWFsU2VwYXJhdG9yIHx8IGxvY2FsZUNvbmZpZy5kZWNpbWFsU2VwYXJhdG9yIHx8ICcnO1xuICAgIHZhciBncm91cFNlcGFyYXRvciA9IF9ncm91cFNlcGFyYXRvciB8fCBsb2NhbGVDb25maWcuZ3JvdXBTZXBhcmF0b3IgfHwgJyc7XG4gICAgaWYgKGRlY2ltYWxTZXBhcmF0b3IgJiZcbiAgICAgICAgZ3JvdXBTZXBhcmF0b3IgJiZcbiAgICAgICAgZGVjaW1hbFNlcGFyYXRvciA9PT0gZ3JvdXBTZXBhcmF0b3IgJiZcbiAgICAgICAgZGlzYWJsZUdyb3VwU2VwYXJhdG9ycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZWNpbWFsU2VwYXJhdG9yIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyBncm91cFNlcGFyYXRvcicpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0VmFsdWVPcHRpb25zID0ge1xuICAgICAgICBkZWNpbWFsU2VwYXJhdG9yOiBkZWNpbWFsU2VwYXJhdG9yLFxuICAgICAgICBncm91cFNlcGFyYXRvcjogZ3JvdXBTZXBhcmF0b3IsXG4gICAgICAgIGRpc2FibGVHcm91cFNlcGFyYXRvcnM6IGRpc2FibGVHcm91cFNlcGFyYXRvcnMsXG4gICAgICAgIGludGxDb25maWc6IGludGxDb25maWcsXG4gICAgICAgIHByZWZpeDogcHJlZml4IHx8IGxvY2FsZUNvbmZpZy5wcmVmaXgsXG4gICAgICAgIHN1ZmZpeDogc3VmZml4LFxuICAgIH07XG4gICAgdmFyIGNsZWFuVmFsdWVPcHRpb25zID0ge1xuICAgICAgICBkZWNpbWFsU2VwYXJhdG9yOiBkZWNpbWFsU2VwYXJhdG9yLFxuICAgICAgICBncm91cFNlcGFyYXRvcjogZ3JvdXBTZXBhcmF0b3IsXG4gICAgICAgIGFsbG93RGVjaW1hbHM6IGFsbG93RGVjaW1hbHMsXG4gICAgICAgIGRlY2ltYWxzTGltaXQ6IGRlY2ltYWxzTGltaXQgfHwgZml4ZWREZWNpbWFsTGVuZ3RoIHx8IDIsXG4gICAgICAgIGFsbG93TmVnYXRpdmVWYWx1ZTogYWxsb3dOZWdhdGl2ZVZhbHVlLFxuICAgICAgICBkaXNhYmxlQWJicmV2aWF0aW9uczogZGlzYWJsZUFiYnJldmlhdGlvbnMsXG4gICAgICAgIHByZWZpeDogcHJlZml4IHx8IGxvY2FsZUNvbmZpZy5wcmVmaXgsXG4gICAgICAgIHRyYW5zZm9ybVJhd1ZhbHVlOiB0cmFuc2Zvcm1SYXdWYWx1ZSxcbiAgICB9O1xuICAgIHZhciBmb3JtYXR0ZWRTdGF0ZVZhbHVlID0gZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgZGVmYXVsdFZhbHVlICE9PSBudWxsXG4gICAgICAgID8gZm9ybWF0VmFsdWUoX19hc3NpZ24oX19hc3NpZ24oe30sIGZvcm1hdFZhbHVlT3B0aW9ucyksIHsgZGVjaW1hbFNjYWxlOiBkZWNpbWFsU2NhbGUsIHZhbHVlOiBTdHJpbmcoZGVmYXVsdFZhbHVlKSB9KSlcbiAgICAgICAgOiB1c2VyVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB1c2VyVmFsdWUgIT09IG51bGxcbiAgICAgICAgICAgID8gZm9ybWF0VmFsdWUoX19hc3NpZ24oX19hc3NpZ24oe30sIGZvcm1hdFZhbHVlT3B0aW9ucyksIHsgZGVjaW1hbFNjYWxlOiBkZWNpbWFsU2NhbGUsIHZhbHVlOiBTdHJpbmcodXNlclZhbHVlKSB9KSlcbiAgICAgICAgICAgIDogJyc7XG4gICAgdmFyIF9nID0gdXNlU3RhdGUoZm9ybWF0dGVkU3RhdGVWYWx1ZSksIHN0YXRlVmFsdWUgPSBfZ1swXSwgc2V0U3RhdGVWYWx1ZSA9IF9nWzFdO1xuICAgIHZhciBfaCA9IHVzZVN0YXRlKGZhbHNlKSwgZGlydHkgPSBfaFswXSwgc2V0RGlydHkgPSBfaFsxXTtcbiAgICB2YXIgX2ogPSB1c2VTdGF0ZSgwKSwgY3Vyc29yID0gX2pbMF0sIHNldEN1cnNvciA9IF9qWzFdO1xuICAgIHZhciBfayA9IHVzZVN0YXRlKDApLCBjaGFuZ2VDb3VudCA9IF9rWzBdLCBzZXRDaGFuZ2VDb3VudCA9IF9rWzFdO1xuICAgIHZhciBfbCA9IHVzZVN0YXRlKG51bGwpLCBsYXN0S2V5U3Ryb2tlID0gX2xbMF0sIHNldExhc3RLZXlTdHJva2UgPSBfbFsxXTtcbiAgICB2YXIgaW5wdXRSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlucHV0UmVmLmN1cnJlbnQ7IH0pO1xuICAgIC8qKlxuICAgICAqIFByb2Nlc3MgY2hhbmdlIGluIHZhbHVlXG4gICAgICovXG4gICAgdmFyIHByb2Nlc3NDaGFuZ2UgPSBmdW5jdGlvbiAodmFsdWUsIHNlbGVjdGlvblN0YXJ0KSB7XG4gICAgICAgIHNldERpcnR5KHRydWUpO1xuICAgICAgICB2YXIgX2EgPSByZXBvc2l0aW9uQ3Vyc29yKHtcbiAgICAgICAgICAgIHNlbGVjdGlvblN0YXJ0OiBzZWxlY3Rpb25TdGFydCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGxhc3RLZXlTdHJva2U6IGxhc3RLZXlTdHJva2UsXG4gICAgICAgICAgICBzdGF0ZVZhbHVlOiBzdGF0ZVZhbHVlLFxuICAgICAgICAgICAgZ3JvdXBTZXBhcmF0b3I6IGdyb3VwU2VwYXJhdG9yLFxuICAgICAgICB9KSwgbW9kaWZpZWRWYWx1ZSA9IF9hLm1vZGlmaWVkVmFsdWUsIGN1cnNvclBvc2l0aW9uID0gX2EuY3Vyc29yUG9zaXRpb247XG4gICAgICAgIHZhciBzdHJpbmdWYWx1ZSA9IGNsZWFuVmFsdWUoX19hc3NpZ24oeyB2YWx1ZTogbW9kaWZpZWRWYWx1ZSB9LCBjbGVhblZhbHVlT3B0aW9ucykpO1xuICAgICAgICBpZiAodXNlck1heExlbmd0aCAmJiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8tL2csICcnKS5sZW5ndGggPiB1c2VyTWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmluZ1ZhbHVlID09PSAnJyB8fCBzdHJpbmdWYWx1ZSA9PT0gJy0nIHx8IHN0cmluZ1ZhbHVlID09PSBkZWNpbWFsU2VwYXJhdG9yKSB7XG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlICYmIG9uVmFsdWVDaGFuZ2UodW5kZWZpbmVkLCBuYW1lLCB7IGZsb2F0OiBudWxsLCBmb3JtYXR0ZWQ6ICcnLCB2YWx1ZTogJycgfSk7XG4gICAgICAgICAgICBzZXRTdGF0ZVZhbHVlKHN0cmluZ1ZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc3RyaW5nVmFsdWVXaXRob3V0U2VwYXJhdG9yID0gZGVjaW1hbFNlcGFyYXRvclxuICAgICAgICAgICAgPyBzdHJpbmdWYWx1ZS5yZXBsYWNlKGRlY2ltYWxTZXBhcmF0b3IsICcuJylcbiAgICAgICAgICAgIDogc3RyaW5nVmFsdWU7XG4gICAgICAgIHZhciBudW1iZXJWYWx1ZSA9IHBhcnNlRmxvYXQoc3RyaW5nVmFsdWVXaXRob3V0U2VwYXJhdG9yKTtcbiAgICAgICAgdmFyIGZvcm1hdHRlZFZhbHVlID0gZm9ybWF0VmFsdWUoX19hc3NpZ24oeyB2YWx1ZTogc3RyaW5nVmFsdWUgfSwgZm9ybWF0VmFsdWVPcHRpb25zKSk7XG4gICAgICAgIGlmIChjdXJzb3JQb3NpdGlvbiAhPT0gdW5kZWZpbmVkICYmIGN1cnNvclBvc2l0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBQcmV2ZW50IGN1cnNvciBqdW1waW5nXG4gICAgICAgICAgICB2YXIgbmV3Q3Vyc29yID0gY3Vyc29yUG9zaXRpb24gKyAoZm9ybWF0dGVkVmFsdWUubGVuZ3RoIC0gdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIG5ld0N1cnNvciA9IG5ld0N1cnNvciA8PSAwID8gKHByZWZpeCA/IHByZWZpeC5sZW5ndGggOiAwKSA6IG5ld0N1cnNvcjtcbiAgICAgICAgICAgIHNldEN1cnNvcihuZXdDdXJzb3IpO1xuICAgICAgICAgICAgc2V0Q2hhbmdlQ291bnQoY2hhbmdlQ291bnQgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRTdGF0ZVZhbHVlKGZvcm1hdHRlZFZhbHVlKTtcbiAgICAgICAgaWYgKG9uVmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSB7XG4gICAgICAgICAgICAgICAgZmxvYXQ6IG51bWJlclZhbHVlLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlZDogZm9ybWF0dGVkVmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHN0cmluZ1ZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2Uoc3RyaW5nVmFsdWUsIG5hbWUsIHZhbHVlcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEhhbmRsZSBjaGFuZ2UgZXZlbnRcbiAgICAgKi9cbiAgICB2YXIgaGFuZGxlT25DaGFuZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIF9hID0gZXZlbnQudGFyZ2V0LCB2YWx1ZSA9IF9hLnZhbHVlLCBzZWxlY3Rpb25TdGFydCA9IF9hLnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICBwcm9jZXNzQ2hhbmdlKHZhbHVlLCBzZWxlY3Rpb25TdGFydCk7XG4gICAgICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKGV2ZW50KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEhhbmRsZSBmb2N1cyBldmVudFxuICAgICAqL1xuICAgIHZhciBoYW5kbGVPbkZvY3VzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIG9uRm9jdXMgJiYgb25Gb2N1cyhldmVudCk7XG4gICAgICAgIHJldHVybiBzdGF0ZVZhbHVlID8gc3RhdGVWYWx1ZS5sZW5ndGggOiAwO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogSGFuZGxlIGJsdXIgZXZlbnRcbiAgICAgKlxuICAgICAqIEZvcm1hdCB2YWx1ZSBieSBwYWRkaW5nL3RyaW1taW5nIGRlY2ltYWxzIGlmIHJlcXVpcmVkIGJ5XG4gICAgICovXG4gICAgdmFyIGhhbmRsZU9uQmx1ciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICAgIHZhciB2YWx1ZU9ubHkgPSBjbGVhblZhbHVlKF9fYXNzaWduKHsgdmFsdWU6IHZhbHVlIH0sIGNsZWFuVmFsdWVPcHRpb25zKSk7XG4gICAgICAgIGlmICh2YWx1ZU9ubHkgPT09ICctJyB8fCAhdmFsdWVPbmx5KSB7XG4gICAgICAgICAgICBzZXRTdGF0ZVZhbHVlKCcnKTtcbiAgICAgICAgICAgIG9uQmx1ciAmJiBvbkJsdXIoZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmaXhlZERlY2ltYWxzID0gZml4ZWREZWNpbWFsVmFsdWUodmFsdWVPbmx5LCBkZWNpbWFsU2VwYXJhdG9yLCBmaXhlZERlY2ltYWxMZW5ndGgpO1xuICAgICAgICB2YXIgbmV3VmFsdWUgPSBwYWRUcmltVmFsdWUoZml4ZWREZWNpbWFscywgZGVjaW1hbFNlcGFyYXRvciwgZGVjaW1hbFNjYWxlICE9PSB1bmRlZmluZWQgPyBkZWNpbWFsU2NhbGUgOiBmaXhlZERlY2ltYWxMZW5ndGgpO1xuICAgICAgICB2YXIgbnVtYmVyVmFsdWUgPSBwYXJzZUZsb2F0KG5ld1ZhbHVlLnJlcGxhY2UoZGVjaW1hbFNlcGFyYXRvciwgJy4nKSk7XG4gICAgICAgIHZhciBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1hdFZhbHVlKF9fYXNzaWduKF9fYXNzaWduKHt9LCBmb3JtYXRWYWx1ZU9wdGlvbnMpLCB7IHZhbHVlOiBuZXdWYWx1ZSB9KSk7XG4gICAgICAgIGlmIChvblZhbHVlQ2hhbmdlKSB7XG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlKG5ld1ZhbHVlLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgZmxvYXQ6IG51bWJlclZhbHVlLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlZDogZm9ybWF0dGVkVmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0U3RhdGVWYWx1ZShmb3JtYXR0ZWRWYWx1ZSk7XG4gICAgICAgIG9uQmx1ciAmJiBvbkJsdXIoZXZlbnQpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogSGFuZGxlIGtleSBkb3duIGV2ZW50XG4gICAgICpcbiAgICAgKiBJbmNyZWFzZSBvciBkZWNyZWFzZSB2YWx1ZSBieSBzdGVwXG4gICAgICovXG4gICAgdmFyIGhhbmRsZU9uS2V5RG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIga2V5ID0gZXZlbnQua2V5O1xuICAgICAgICBzZXRMYXN0S2V5U3Ryb2tlKGtleSk7XG4gICAgICAgIGlmIChzdGVwICYmIChrZXkgPT09ICdBcnJvd1VwJyB8fCBrZXkgPT09ICdBcnJvd0Rvd24nKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHNldEN1cnNvcihzdGF0ZVZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gcGFyc2VGbG9hdCh1c2VyVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB1c2VyVmFsdWUgIT09IG51bGxcbiAgICAgICAgICAgICAgICA/IFN0cmluZyh1c2VyVmFsdWUpLnJlcGxhY2UoZGVjaW1hbFNlcGFyYXRvciwgJy4nKVxuICAgICAgICAgICAgICAgIDogY2xlYW5WYWx1ZShfX2Fzc2lnbih7IHZhbHVlOiBzdGF0ZVZhbHVlIH0sIGNsZWFuVmFsdWVPcHRpb25zKSkpIHx8IDA7XG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSBrZXkgPT09ICdBcnJvd1VwJyA/IGN1cnJlbnRWYWx1ZSArIHN0ZXAgOiBjdXJyZW50VmFsdWUgLSBzdGVwO1xuICAgICAgICAgICAgaWYgKG1pbiAhPT0gdW5kZWZpbmVkICYmIG5ld1ZhbHVlIDwgbWluKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1heCAhPT0gdW5kZWZpbmVkICYmIG5ld1ZhbHVlID4gbWF4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGZpeGVkTGVuZ3RoID0gU3RyaW5nKHN0ZXApLmluY2x1ZGVzKCcuJylcbiAgICAgICAgICAgICAgICA/IE51bWJlcihTdHJpbmcoc3RlcCkuc3BsaXQoJy4nKVsxXS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBwcm9jZXNzQ2hhbmdlKFN0cmluZyhmaXhlZExlbmd0aCA/IG5ld1ZhbHVlLnRvRml4ZWQoZml4ZWRMZW5ndGgpIDogbmV3VmFsdWUpLnJlcGxhY2UoJy4nLCBkZWNpbWFsU2VwYXJhdG9yKSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlEb3duICYmIG9uS2V5RG93bihldmVudCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBIYW5kbGUga2V5IHVwIGV2ZW50XG4gICAgICpcbiAgICAgKiBNb3ZlIGN1cnNvciBpZiB0aGVyZSBpcyBhIHN1ZmZpeCB0byBwcmV2ZW50IHVzZXIgdHlwaW5nIHBhc3Qgc3VmZml4XG4gICAgICovXG4gICAgdmFyIGhhbmRsZU9uS2V5VXAgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIGtleSA9IGV2ZW50LmtleSwgc2VsZWN0aW9uU3RhcnQgPSBldmVudC5jdXJyZW50VGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICBpZiAoa2V5ICE9PSAnQXJyb3dVcCcgJiYga2V5ICE9PSAnQXJyb3dEb3duJyAmJiBzdGF0ZVZhbHVlICE9PSAnLScpIHtcbiAgICAgICAgICAgIHZhciBzdWZmaXhfMSA9IGdldFN1ZmZpeChzdGF0ZVZhbHVlLCB7IGdyb3VwU2VwYXJhdG9yOiBncm91cFNlcGFyYXRvciwgZGVjaW1hbFNlcGFyYXRvcjogZGVjaW1hbFNlcGFyYXRvciB9KTtcbiAgICAgICAgICAgIGlmIChzdWZmaXhfMSAmJiBzZWxlY3Rpb25TdGFydCAmJiBzZWxlY3Rpb25TdGFydCA+IHN0YXRlVmFsdWUubGVuZ3RoIC0gc3VmZml4XzEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3Q3Vyc29yID0gc3RhdGVWYWx1ZS5sZW5ndGggLSBzdWZmaXhfMS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQuc2V0U2VsZWN0aW9uUmFuZ2UobmV3Q3Vyc29yLCBuZXdDdXJzb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbktleVVwICYmIG9uS2V5VXAoZXZlbnQpO1xuICAgIH07XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IganVtcGluZyBpZiBlZGl0aW5nIHZhbHVlXG4gICAgICAgIGlmIChkaXJ0eSAmJlxuICAgICAgICAgICAgc3RhdGVWYWx1ZSAhPT0gJy0nICYmXG4gICAgICAgICAgICBpbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBpbnB1dFJlZi5jdXJyZW50LnNldFNlbGVjdGlvblJhbmdlKGN1cnNvciwgY3Vyc29yKTtcbiAgICAgICAgfVxuICAgIH0sIFtzdGF0ZVZhbHVlLCBjdXJzb3IsIGlucHV0UmVmLCBkaXJ0eSwgY2hhbmdlQ291bnRdKTtcbiAgICAvKipcbiAgICAgKiBJZiB1c2VyIGhhcyBvbmx5IGVudGVyZWQgXCItXCIgb3IgZGVjaW1hbCBzZXBhcmF0b3IsXG4gICAgICoga2VlcCB0aGUgY2hhciB0byBhbGxvdyB0aGVtIHRvIGVudGVyIG5leHQgdmFsdWVcbiAgICAgKi9cbiAgICB2YXIgZ2V0UmVuZGVyVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh1c2VyVmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdXNlclZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgICBzdGF0ZVZhbHVlICE9PSAnLScgJiZcbiAgICAgICAgICAgICghZGVjaW1hbFNlcGFyYXRvciB8fCBzdGF0ZVZhbHVlICE9PSBkZWNpbWFsU2VwYXJhdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFZhbHVlKF9fYXNzaWduKF9fYXNzaWduKHt9LCBmb3JtYXRWYWx1ZU9wdGlvbnMpLCB7IGRlY2ltYWxTY2FsZTogZGlydHkgPyB1bmRlZmluZWQgOiBkZWNpbWFsU2NhbGUsIHZhbHVlOiBTdHJpbmcodXNlclZhbHVlKSB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRlVmFsdWU7XG4gICAgfTtcbiAgICB2YXIgaW5wdXRQcm9wcyA9IF9fYXNzaWduKHsgdHlwZTogJ3RleHQnLCBpbnB1dE1vZGU6ICdkZWNpbWFsJywgaWQ6IGlkLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSwgb25DaGFuZ2U6IGhhbmRsZU9uQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU9uQmx1ciwgb25Gb2N1czogaGFuZGxlT25Gb2N1cywgb25LZXlEb3duOiBoYW5kbGVPbktleURvd24sIG9uS2V5VXA6IGhhbmRsZU9uS2V5VXAsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLCB2YWx1ZTogZ2V0UmVuZGVyVmFsdWUoKSwgcmVmOiBpbnB1dFJlZiB9LCBwcm9wcyk7XG4gICAgaWYgKGN1c3RvbUlucHV0KSB7XG4gICAgICAgIHZhciBDdXN0b21JbnB1dCA9IGN1c3RvbUlucHV0O1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDdXN0b21JbnB1dCwgX19hc3NpZ24oe30sIGlucHV0UHJvcHMpKTtcbiAgICB9XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBfX2Fzc2lnbih7fSwgaW5wdXRQcm9wcykpO1xufSk7XG5DdXJyZW5jeUlucHV0LmRpc3BsYXlOYW1lID0gJ0N1cnJlbmN5SW5wdXQnO1xuXG5leHBvcnQgZGVmYXVsdCBDdXJyZW5jeUlucHV0O1xuZXhwb3J0IHsgZm9ybWF0VmFsdWUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmVzbS5qcy5tYXBcbiIsImltcG9ydCB7IGRhcmtlbiwgcmdiYSB9IGZyb20gJ3BvbGlzaGVkJztcbmltcG9ydCB7IHNwYWNlLCBsYXlvdXQsIHZhcmlhbnQgfSBmcm9tICdzdHlsZWQtc3lzdGVtJztcbmltcG9ydCB7IHN0eWxlZCwgY3NzIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuaW1wb3J0IHsgY3NzQ2xhc3MgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY3NzLWNsYXNzLmpzXCI7XG5jb25zdCBib3JkZXJsZXNzQ1NTID0gY3NzYFxuICBwYWRkaW5nOiAwO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItd2lkdGg6IDAgMCAxcHggMDtcbiAgY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy50ZXh0fTtcbiAgJjpmb2N1cyB7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLmlucHV0Qm9yZGVyfTtcbiAgfVxuXG4gICY6aG92ZXIge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuYDtcbmNvbnN0IHNpemVWYXJpYW50cyA9IHZhcmlhbnQoe1xuICBwcm9wOiAndmFyaWFudCcsXG4gIHZhcmlhbnRzOiB7XG4gICAgZGVmYXVsdDoge1xuICAgICAgZm9udFNpemU6ICdkZWZhdWx0JyxcbiAgICAgIGxpbmVIZWlnaHQ6ICdsZydcbiAgICB9LFxuICAgIHNtOiB7XG4gICAgICBmb250U2l6ZTogJ3NtJyxcbiAgICAgIGxpbmVIZWlnaHQ6ICdkZWZhdWx0J1xuICAgIH0sXG4gICAgbGc6IHtcbiAgICAgIGZvbnRTaXplOiAnbGcnLFxuICAgICAgbGluZUhlaWdodDogJ3hsJ1xuICAgIH0sXG4gICAgeGw6IHtcbiAgICAgIGZvbnRTaXplOiAneGwnLFxuICAgICAgbGluZUhlaWdodDogJ3h4bCdcbiAgICB9LFxuICAgIHh4bDoge1xuICAgICAgZm9udFNpemU6ICdoMScsXG4gICAgICBmb250V2VpZ2h0OiAnbGlnaHQnLFxuICAgICAgbGluZUhlaWdodDogJ3g0J1xuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogUHJvcCBUeXBlcyBvZiBhbiBJbnB1dCBjb21wb25lbnQuXG4gKiBBcGFydCBmcm9tIHZhcmlhbnQgaXQgZXh0ZW5kcyBhbGwge0BsaW5rIExheW91dFByb3BzfSBhbmQge0BsaW5rIFNwYWNlUHJvcHN9XG4gKlxuICogQG1lbWJlcm9mIElucHV0XG4gKiBAYWxpYXMgSW5wdXRQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFsuLi5dIE90aGVyIHByb3BzIGZyb20ge0BsaW5rIExheW91dFByb3BzfSwge0BsaW5rIFNwYWNlUHJvcHN9XG4gKi9cblxuLyoqXG4gKiBJbnB1dCBDU1MgU3R5bGVzIHdoaWNoIGNhbiBiZSByZXVzZWQgaW4gYW5vdGhlciBpbnB1dCBjb21wb25lbnQgd2l0aCBzdHlsZWQtY29tcG9uZW50c1xuICpcbiAqICMjIyBVc2FnZTpcbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7IElucHV0Q1NTIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSdcbiAqXG4gKiBjb25zdCBNeVN0eWxlZElucHV0ID0gc3R5bGVkLmlucHV0YFxuICogICAke0lucHV0Q1NTfVxuICogYFxuICogYGBgXG4gKiBAbWVtYmVyb2YgSW5wdXRcbiAqIEBhbGlhcyBJbnB1dENTU1xuICovXG5leHBvcnQgY29uc3QgSW5wdXRDU1MgPSBjc3NgXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGNvbG9yOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMuZ3JleTEwMH07XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IDFweCBzb2xpZCAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMuaW5wdXRCb3JkZXJ9O1xuICBib3JkZXItcmFkaXVzOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5zcGFjZS54c307XG4gIGZvbnQtc2l6ZTogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuZm9udFNpemVzLmRlZmF1bHR9O1xuICBsaW5lLWhlaWdodDogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUubGluZUhlaWdodHMubGd9O1xuICBmb250LWZhbWlseTogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuZm9udH07XG4gIG91dGxpbmU6IG5vbmU7XG5cbiAgJjpob3ZlciB7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7XG4gIHRoZW1lXG59KSA9PiBkYXJrZW4oMC4xLCB0aGVtZS5jb2xvcnMuaW5wdXRCb3JkZXIpfTtcbiAgfVxuICAmOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5wcmltYXJ5MTAwfTtcbiAgfVxuICAmOmRpc2FibGVkIHtcbiAgICBjb2xvcjogJHsoe1xuICB0aGVtZVxufSkgPT4gcmdiYSh0aGVtZS5jb2xvcnMuZ3JleTgwLCAwLjUpfTtcbiAgICBib3JkZXItY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHJnYmEodGhlbWUuY29sb3JzLmlucHV0Qm9yZGVyLCAwLjUpfTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7XG4gIHRoZW1lXG59KSA9PiByZ2JhKHRoZW1lLmNvbG9ycy5pbnB1dEJvcmRlciwgMC41KX07XG4gIH1cblxuICAkeyh7XG4gIGJvcmRlcmxlc3Ncbn0pID0+IGJvcmRlcmxlc3MgJiYgYm9yZGVybGVzc0NTU307XG4gICR7c2l6ZVZhcmlhbnRzfTtcbmA7XG5cbi8qKlxuICogQGNsYXNzZGVzY1xuICpcbiAqIDxpbWcgc3JjPVwiY29tcG9uZW50cy9pbnB1dC5wbmdcIiAvPlxuICpcbiAqIFdyYXBwZWQgYGlucHV0YCBodG1sIGVsZW1lbnQuXG4gKlxuICogIyMjIFVzYWdlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgSW5wdXQsIElucHV0UHJvcHMsIElucHV0Q1NTIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSdcbiAqIGBgYFxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBzdWJjYXRlZ29yeSBBdG9tc1xuICogQHNlZSBJbnB1dFByb3BzXG4gKiBAc2VlIHtAbGluayBodHRwczovL3N0b3J5Ym9vay5hZG1pbmpzLmNvLz9wYXRoPS9zdG9yeS9kZXNpZ25zeXN0ZW0tYXRvbXMtaW5wdXQtLWRlZmF1bHQgU3Rvcnlib29rfVxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQGV4YW1wbGVcbiAqIHJldHVybiAoXG4gKiAgIDxCb3ggcD1cInhsXCI+XG4gKiAgICAgIDxMYWJlbCBodG1sRm9yPVwiaW5wdXQxXCI+U29tZSBleGFtcGxlIGxhYmVsPC9MYWJlbD5cbiAqICAgICAgPElucHV0IGlkPVwiaW5wdXQxXCIgd2lkdGg9ezEvMn0gLz5cbiAqICAgPC9Cb3g+XG4gKiApXG4gKiBAc2VjdGlvbiBkZXNpZ24tc3lzdGVtXG4gKi9cbmNvbnN0IElucHV0ID0gc3R5bGVkLmlucHV0YFxuICAke0lucHV0Q1NTfTtcbiAgJHtzcGFjZX07XG4gICR7bGF5b3V0fTtcbmA7XG5JbnB1dC5kZWZhdWx0UHJvcHMgPSB7XG4gIHB4OiAnZGVmYXVsdCcsXG4gIHB5OiAnc20nLFxuICBjbGFzc05hbWU6IGNzc0NsYXNzKCdJbnB1dCcpXG59O1xuSW5wdXQuZGlzcGxheU5hbWUgPSAnSW5wdXQnO1xuZXhwb3J0IHsgSW5wdXQgfTtcbmV4cG9ydCBkZWZhdWx0IElucHV0OyIsImltcG9ydCB7IHNwYWNlLCB0eXBvZ3JhcGh5LCBsYXlvdXQgfSBmcm9tICdzdHlsZWQtc3lzdGVtJztcbmltcG9ydCBDdXJyZW5jeUlucHV0RmllbGRMaWIsIHsgZm9ybWF0VmFsdWUgYXMgZm9ybWF0Q3VycmVuY3lQcm9wZXJ0eSB9IGZyb20gJ3JlYWN0LWN1cnJlbmN5LWlucHV0LWZpZWxkJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IElucHV0Q1NTIH0gZnJvbSBcIi4uL2lucHV0L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBjc3NDbGFzcyB9IGZyb20gXCIuLi8uLi91dGlscy9jc3MtY2xhc3MuanNcIjtcbmNvbnN0IEN1cnJlbmN5SW5wdXRGaWVsZCA9IEN1cnJlbmN5SW5wdXRGaWVsZExpYi5kZWZhdWx0ID8/IEN1cnJlbmN5SW5wdXRGaWVsZExpYjtcbmNvbnN0IEN1cnJlbmN5SW5wdXRDb21wb25lbnQgPSBDdXJyZW5jeUlucHV0RmllbGQuZGVmYXVsdCA/PyBDdXJyZW5jeUlucHV0RmllbGQ7XG5cbi8qKlxuICogUHJvcCBUeXBlcyBvZiBhIEN1cnJlbmN5SW5wdXQgY29tcG9uZW50LlxuICogQ3VycmVuY3lJbnB1dCBpcyBiYXNlZCBvbiBgcmVhY3QtY3VycmVuY3ktaW5wdXQtZmllbGRgIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jY2hhbnh6eS9yZWFjdC1jdXJyZW5jeS1pbnB1dC1maWVsZCBSZWFjdCBDdXJyZW5jeSBJbnB1dCBGaWVsZCBDb21wb25lbnR9XG4gKiBJdCBleHRlbmRzIGFsbCB7QGxpbmsgU3BhY2VQcm9wc30sIHtAbGluayBUeXBvZ3JhcGh5UHJvcHN9IGFuZCB7QGxpbmsgTGF5b3V0UHJvcHN9IGFuZCB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2NjaGFueHp5L3JlYWN0LWN1cnJlbmN5LWlucHV0LWZpZWxkI3Byb3BzIFJlYWN0IEN1cnJlbmN5IElucHV0IEZpZWxkIENvbXBvbmVudCBQcm9wc31cbiAqIEBtZW1iZXJvZiBDdXJyZW5jeUlucHV0XG4gKiBAYWxpYXMgQ3VycmVuY3lJbnB1dFByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWy4uLl0gQWxsIHByb3BzIGRlZmF1bHQgdG8gX2N1cnJlbmN5aW5wdXRfIGh0bWwgY29tcG9uZW50IGxpa2UgYG9uQ2hhbmdlYCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBgdmFsdWVgIGV0Yy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbLi4uXSBQcm9wcyBmcm9tIHtAbGluayBTcGFjZVByb3BzfSwge0BsaW5rIFR5cG9ncmFwaHlQcm9wc31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQge0BsaW5rIExheW91dFByb3BzfSArIHRoZXkgZXh0ZW5kIHtAbGluayBJbnB1dFByb3BzfVxuICovXG5cbi8qKlxuICogQGNsYXNzZGVzY1xuICpcbiAqIDxpbWcgc3JjPVwiY29tcG9uZW50cy9jdXJyZW5jeS1pbnB1dC5wbmdcIiAvPlxuICpcbiAqIFdyYXBwZWQgYGN1cnJlbmN5aW5wdXRgIGh0bWwgZWxlbWVudC5cbiAqXG4gKiAjIyMgVXNhZ2VcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgQ3VycmVuY3lJbnB1dCwgQ3VycmVuY3lJbnB1dFByb3BzIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSdcbiAqIGBgYFxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBzdWJjYXRlZ29yeSBBdG9tc1xuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9zdG9yeWJvb2suYWRtaW5qcy5jby8/cGF0aD0vc3RvcnkvZGVzaWduc3lzdGVtLWF0b21zLWN1cnJlbmN5aW5wdXQtLWRlZmF1bHQgU3Rvcnlib29rfVxuICogQHNlZSBDdXJyZW5jeUlucHV0UHJvcHNcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBleGFtcGxlXG4gKiByZXR1cm4gKFxuICogICA8Qm94IHA9XCJ4bFwiPlxuICogICAgICA8TGFiZWwgaHRtbEZvcj1cImN1cnJlbmN5aW5wdXQxXCI+U29tZSBleGFtcGxlIGxhYmVsPC9MYWJlbD5cbiAqICAgICAgPEN1cnJlbmN5SW5wdXQgaWQ9XCJjdXJyZW5jeWlucHV0MVwiIGludGxDb25maWc9e3sgbG9jYWxlOiAnZW4tVVMnLCBjdXJyZW5jeTogJ0dCUCcgfX0gLz47XG4gKiAgIDwvQm94PlxuICogKVxuICogQHNlY3Rpb24gZGVzaWduLXN5c3RlbVxuICovXG5jb25zdCBDdXJyZW5jeUlucHV0ID0gc3R5bGVkKEN1cnJlbmN5SW5wdXRDb21wb25lbnQpYFxuICAke0lucHV0Q1NTfVxuICAke3NwYWNlfTtcbiAgJHtsYXlvdXR9O1xuICAke3R5cG9ncmFwaHl9O1xuXG4gIHdpZHRoOiAxMDAlO1xuYDtcbkN1cnJlbmN5SW5wdXQuZGVmYXVsdFByb3BzID0ge1xuICBweDogJ2RlZmF1bHQnLFxuICBweTogJ3NtJyxcbiAgY2xhc3NOYW1lOiBjc3NDbGFzcygnQ3VycmVuY3lJbnB1dCcpXG59O1xuQ3VycmVuY3lJbnB1dC5kaXNwbGF5TmFtZSA9ICdDdXJyZW5jeUlucHV0JztcbmV4cG9ydCB7IEN1cnJlbmN5SW5wdXQsIGZvcm1hdEN1cnJlbmN5UHJvcGVydHkgfTtcbmV4cG9ydCBkZWZhdWx0IEN1cnJlbmN5SW5wdXQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgRmVhdGhlckljb25zIGZyb20gJ3JlYWN0LWZlYXRoZXInO1xuaW1wb3J0IHsgc3BhY2UsIGNvbG9yIGFzIHN0eWxlZENvbG9yLCBib3JkZXJSYWRpdXMgfSBmcm9tICdzdHlsZWQtc3lzdGVtJztcbmltcG9ydCB7IHN0eWxlZCwgY3NzIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuaW1wb3J0IHsgY3NzQ2xhc3MgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY3NzLWNsYXNzLmpzXCI7XG5cbi8qKlxuICogUHJvcCBUeXBlcyBvZiBhbiBJY29uIGNvbXBvbmVudC5cbiAqIEFwYXJ0IGZyb20gcHJvcHMgZGVmaW5lZCBiZWxvdyBpdCBleHRlbmRzIGFsbCB7QGxpbmsgQ29sb3JQcm9wc30gYW5kIHtAbGluayBTcGFjZVByb3BzfVxuICpcbiAqIEBtZW1iZXJvZiBJY29uXG4gKiBAYWxpYXMgSWNvblByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWy4uLl0gT3RoZXIgcHJvcHMgZnJvbSB7QGxpbmsgQ29sb3JQcm9wc30gYW5kIHtAbGluayBTcGFjZVByb3BzfVxuICovXG5cbmNvbnN0IHNwaW5Dc3MgPSBjc3NgXG4gIEBrZXlmcmFtZXMgaWNvblNwaW4ge1xuICAgIGZyb20ge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgfVxuICB9XG5cbiAgYW5pbWF0aW9uLW5hbWU6IGljb25TcGluO1xuICBhbmltYXRpb24tZHVyYXRpb246IDEwMDBtcztcbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG4gIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcbmA7XG5jb25zdCBXcmFwcGVyID0gc3R5bGVkLnNwYW5gXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbGluZS1oZWlnaHQ6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmxpbmVIZWlnaHRzLnNtfTtcbiAgZm9udC1zaXplOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5mb250U2l6ZXMuc219O1xuXG4gICYgPiBzdmcge1xuICAgIHN0cm9rZTogJHsoe1xuICB0aGVtZSxcbiAgY29sb3Jcbn0pID0+IGNvbG9yICYmIGNvbG9yICE9PSAnaW5oZXJpdCcgPyB0aGVtZS5jb2xvcnNbY29sb3JdIDogJ2N1cnJlbnRDb2xvcid9O1xuICAgICR7KHtcbiAgc3BpblxufSkgPT4gc3BpbiA/IHNwaW5Dc3MgOiAnJ307XG4gIH1cbiAgJHsoe1xuICByb3VuZGVkXG59KSA9PiByb3VuZGVkID8gJ2JvcmRlci1yYWRpdXM6IDk5OTlweDsnIDogJyd9O1xuICAke3NwYWNlfTtcbiAgJHtzdHlsZWRDb2xvcn07XG4gICR7Ym9yZGVyUmFkaXVzfVxuYDtcblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKlxuICogPGltZyBzcmM9XCJjb21wb25lbnRzL2ljb24ucG5nXCIgLz5cbiAqXG4gKiBDb21wb25lbnQgd3JhcHBpbmcgW3JlYWN0LWZlYXRoZXJdKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL3JlYWN0LWZlYXRoZXIpLlxuICogTGlzdCBvZiBhbGwgaWNvbnMgY2FuIGJlIGZvdW5kIGhlcmU6IGh0dHBzOi8vZmVhdGhlcmljb25zLmNvbS9cbiAqIElmIHlvdSBoYXZlIHByb2JsZW0gdmVyaWZ5aW5nIHRoZSBrZXkgb2YgZ2l2ZW4gaWNvbiAtIHlvdSBjYW4gYWx3YXlzIG9wZW4gdGhlXG4gKiBDaHJvbWUgVGVybWluYWwgKHdpdGggQWRtaW5KUyBvcGVuKSBhbmQgd3JpdGUgdGhlcmU6XG4gKlxuICogYGBgXG4gKiBPYmplY3Qua2V5cyh3aW5kb3cuRmVhdGhlckljb25zKVxuICogYGBgXG4gKlxuICogdG8gc2VlIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBpY29uIGtleXMuXG4gKlxuICogIyMjIFVzYWdlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgSWNvbiwgSWNvblByb3BzIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSdcbiAqIGBgYFxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBzdWJjYXRlZ29yeSBBdG9tc1xuICogQHNlZSBJY29uUHJvcHNcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vc3Rvcnlib29rLmFkbWluanMuY28vP3BhdGg9L3N0b3J5L2Rlc2lnbnN5c3RlbS1hdG9tcy1pY29uLS1kZWZhdWx0IFN0b3J5Ym9va31cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkljb25zIGluc2lkZSBvdGhlciBlbGVtZW50czwvY2FwdGlvbj5cbiAqIHJldHVybiAoXG4gKiAgIDxCb3ggdmFyaWFudD1cImdyZXlcIj5cbiAqICAgICA8TGFiZWwgbWI9XCJkZWZhdWx0XCI+PEljb24gaWNvbj1cIkNhbWVyYVwiIC8+SWNvbiBpbiBMYWJlbDwvTGFiZWw+XG4gKiAgICAgPEJ1dHRvbj48SWNvbiBpY29uPVwiQ2FtZXJhXCIgLz5JY29uIGluIGJ1dHRvbjwvQnV0dG9uPlxuICogICA8L0JveD5cbiAqIClcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkRpZmZlcmVudCBzaXplczwvY2FwdGlvbj5cbiAqIGNvbnN0IHNpemVzID0gWzE2LCAyMCwgMjQsIDMyXVxuICogcmV0dXJuIChcbiAqICAgPEJveCB2YXJpYW50PVwiZ3JleVwiPlxuICogICAgIHtzaXplcy5tYXAoc2l6ZSA9PiAoXG4gKiAgICAgICA8TGFiZWwgbT1cImRlZmF1bHRcIj48SWNvbiBpY29uPVwiQ2FtZXJhXCIgc2l6ZT17c2l6ZX0vPkljb24ge3NpemV9PC9MYWJlbD5cbiAqICAgICApKX1cbiAqICAgPC9Cb3g+XG4gKiApXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+QmlnIHJvdW5kZWQgaWNvbiB3aXRoIGJhY2tncm91bmQ8L2NhcHRpb24+XG4gKiByZXR1cm4gKFxuICogICA8Qm94IHZhcmlhbnQ9XCJncmV5XCI+XG4gKiAgICAgPEljb24gaWNvbj1cIlBsdXNcIiBjb2xvcj1cIndoaXRlXCIgYmc9XCJwcmltYXJ5MTAwXCIgcm91bmRlZCBzaXplPXszMn0gcD1cImRlZmF1bHRcIi8+XG4gKiAgIDwvQm94PlxuICogKVxuICogQHNlY3Rpb24gZGVzaWduLXN5c3RlbVxuICovXG5jb25zdCBJY29uID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgaWNvbixcbiAgICBzaXplID0gMTYsXG4gICAgY29sb3IgPSAnaW5oZXJpdCcsXG4gICAgLi4ub3RoZXJcbiAgfSA9IHByb3BzO1xuICBpZiAoIWljb24pIHJldHVybiBudWxsO1xuICBjb25zdCBGZWF0aGVySWNvbiA9IEZlYXRoZXJJY29uc1tpY29uXSB8fCBGZWF0aGVySWNvbnMuU2xhc2g7XG4gIGlmIChGZWF0aGVySWNvbikge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVyLCBfZXh0ZW5kcyh7XG4gICAgICBpY29uOiBpY29uLFxuICAgICAgY2xhc3NOYW1lOiBjc3NDbGFzcygnSWNvbicpXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNvbG9yOiBjb2xvclxuICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGZWF0aGVySWNvbiwge1xuICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIGNvbG9yOiBjb2xvclxuICAgIH0pKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5leHBvcnQgeyBJY29uIH07XG5leHBvcnQgZGVmYXVsdCBJY29uOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgY29uc3QgQWNjZXB0ID0gKHtcbiAgd2lkdGggPSAxNTIsXG4gIGhlaWdodCA9IDE1MlxufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB3aWR0aDogd2lkdGgsXG4gIGhlaWdodDogaGVpZ2h0LFxuICB2aWV3Qm94OiBcIjAgMCAxNTIgMTUyXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gIGN4OiBcIjc2XCIsXG4gIGN5OiBcIjc2XCIsXG4gIHI6IFwiNzZcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCIxMDYuNTUyXCIsXG4gIGN5OiBcIjU0LjQ0ODNcIixcbiAgcjogXCIxNy40NDgzXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCI3NS40NDgzXCIsXG4gIGN5OiBcIjc2LjQ0ODNcIixcbiAgcjogXCIzOS40NDgzXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk05MS4zOTU3IDEwMi4wOThMOTAuNzU5MiAxMDIuNDk1TDkxLjE1NTggMTAzLjEzMUw5MS43OTI0IDEwMi43MzVMOTEuMzk1NyAxMDIuMDk4Wk05OC44MTMxIDk1LjU4MjNMOTkuMzkzMSA5Ni4wNTc4TDk5Ljg2ODYgOTUuNDc3OEw5OS4yODg2IDk1LjAwMjNMOTguODEzMSA5NS41ODIzWk05MC42MDI1IDEwMC44MjVMOTAuMjA1OSAxMDAuMTg4TDg5LjU2OTQgMTAwLjU4NUw4OS45NjYgMTAxLjIyMUw5MC42MDI1IDEwMC44MjVaTTk3LjY1MzEgOTQuNjMxM0w5OC4xMjg2IDk0LjA1MTNMOTcuNTQ4NiA5My41NzU4TDk3LjA3MzEgOTQuMTU1OEw5Ny42NTMxIDk0LjYzMTNaTTEwNC4xOTYgODUuNzIyMkwxMDQuOTEgODUuOTUyM1Y4NS45NTIzTDEwNC4xOTYgODUuNzIyMlpNMTA1LjY0NyA3Ni40NDkySDEwNi4zOTdWNzUuNjk5MkgxMDUuNjQ3Vjc2LjQ0OTJaTTEwMS40MzUgOTEuODQxMUwxMDEuMDUyIDkyLjQ4NkwxMDEuNjk3IDkyLjg2ODhMMTAyLjA4IDkyLjIyMzlMMTAxLjQzNSA5MS44NDExWk0xMDAuMTQ1IDkxLjA3NTVMOTkuNTAwMSA5MC42OTI2TDk5LjExNzMgOTEuMzM3Nkw5OS43NjIzIDkxLjcyMDRMMTAwLjE0NSA5MS4wNzU1Wk0xMDIuNzY4IDg1LjI2MkwxMDIuMDU0IDg1LjAzMTlMMTAyLjc2OCA4NS4yNjJaTTEwNC4xNDcgNzYuNDQ5MlY3NS42OTkySDEwMy4zOTdWNzYuNDQ5MkgxMDQuMTQ3Wk05MS43OTI0IDEwMi43MzVDOTQuNjc4NiAxMDAuOTM2IDk3LjI0NjUgOTguNjc2MyA5OS4zOTMxIDk2LjA1NzhMOTguMjMzMSA5NS4xMDY4Qzk2LjE4OTkgOTcuNTk5MiA5My43NDU3IDk5Ljc1MDIgOTAuOTk5MSAxMDEuNDYxTDkxLjc5MjQgMTAyLjczNVpNODkuOTY2IDEwMS4yMjFMOTAuNzU5MiAxMDIuNDk1TDkyLjAzMjMgMTAxLjcwMUw5MS4yMzkxIDEwMC40MjhMODkuOTY2IDEwMS4yMjFaTTk3LjA3MzEgOTQuMTU1OEM5NS4xMzMyIDk2LjUyMjEgOTIuODEyOCA5OC41NjQxIDkwLjIwNTkgMTAwLjE4OEw5MC45OTkxIDEwMS40NjFDOTMuNzQ1NyA5OS43NTAyIDk2LjE4OTkgOTcuNTk5MiA5OC4yMzMxIDk1LjEwNjhMOTcuMDczMSA5NC4xNTU4Wk05OS4yODg2IDk1LjAwMjNMOTguMTI4NiA5NC4wNTEzTDk3LjE3NzYgOTUuMjExM0w5OC4zMzc2IDk2LjE2MjNMOTkuMjg4NiA5NS4wMDIzWk0xMDQuOTEgODUuOTUyM0MxMDUuODc2IDgyLjk1NjEgMTA2LjM5NyA3OS43NjIxIDEwNi4zOTcgNzYuNDQ5MkgxMDQuODk3QzEwNC44OTcgNzkuNjA0IDEwNC40MDEgODIuNjQyOSAxMDMuNDgyIDg1LjQ5MjFMMTA0LjkxIDg1Ljk1MjNaTTEwMi4wOCA5Mi4yMjM5QzEwMy4yNDQgOTAuMjYzIDEwNC4xOTggODguMTYyIDEwNC45MSA4NS45NTIzTDEwMy40ODIgODUuNDkyMUMxMDIuODA1IDg3LjU5MzkgMTAxLjg5NyA4OS41OTI1IDEwMC43OSA5MS40NTgzTDEwMi4wOCA5Mi4yMjM5Wk05OS43NjIzIDkxLjcyMDRMMTAxLjA1MiA5Mi40ODZMMTAxLjgxOCA5MS4xOTYxTDEwMC41MjggOTAuNDMwNUw5OS43NjIzIDkxLjcyMDRaTTEwMi4wNTQgODUuMDMxOUMxMDEuNDEyIDg3LjAyNTcgMTAwLjU1MSA4OC45MjIgOTkuNTAwMSA5MC42OTI2TDEwMC43OSA5MS40NTgzQzEwMS44OTcgODkuNTkyNSAxMDIuODA1IDg3LjU5MzkgMTAzLjQ4MiA4NS40OTIxTDEwMi4wNTQgODUuMDMxOVpNMTAzLjM5NyA3Ni40NDkyQzEwMy4zOTcgNzkuNDQ1OSAxMDIuOTI2IDgyLjMyOTYgMTAyLjA1NCA4NS4wMzE5TDEwMy40ODIgODUuNDkyMUMxMDQuNDAxIDgyLjY0MjkgMTA0Ljg5NyA3OS42MDQgMTA0Ljg5NyA3Ni40NDkySDEwMy4zOTdaTTEwNS42NDcgNzUuNjk5MkgxMDQuMTQ3Vjc3LjE5OTJIMTA1LjY0N1Y3NS42OTkyWlwiLFxuICBmaWxsOiBcIiMzQjM1NTJcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTU4LjMwMTUgMzIuNDYxOUw1OS4wMDAyIDMyLjE4OTNMNTguNzI3NyAzMS40OTA2TDU4LjAyOSAzMS43NjMyTDU4LjMwMTUgMzIuNDYxOVpNNDEuNTA1MSA0My42NTM0TDQwLjk2NTggNDMuMTMyMkw0MC40NDQ2IDQzLjY3MTVMNDAuOTgzOSA0NC4xOTI3TDQxLjUwNTEgNDMuNjUzNFpNNTguODQ2NyAzMy44NTkzTDU5LjExOTIgMzQuNTU4MUw1OS44MTc5IDM0LjI4NTVMNTkuNTQ1NCAzMy41ODY4TDU4Ljg0NjcgMzMuODU5M1pNNDIuNTgzNyA0NC42OTU3TDQyLjA2MjUgNDUuMjM1MUw0Mi42MDE4IDQ1Ljc1NjJMNDMuMTIzIDQ1LjIxNjlMNDIuNTgzNyA0NC42OTU3Wk0zNi44NTE4IDQ5LjI3NjFMMzcuMjg0MSA0OC42NjMyTDM2LjY3MTIgNDguMjMwOUwzNi4yMzg5IDQ4Ljg0MzhMMzYuODUxOCA0OS4yNzYxWk0zMS4zODA0IDU5LjUxMTRMMzAuNjgwNCA1OS4yNDIyTDMwLjQxMTEgNTkuOTQyMkwzMS4xMTEyIDYwLjIxMTRMMzEuMzgwNCA1OS41MTE0Wk0zOC4wNzc2IDUwLjE0MDZMMzguNjkwNSA1MC41NzI5TDM5LjEyMjggNDkuOTZMMzguNTA5OSA0OS41Mjc3TDM4LjA3NzYgNTAuMTQwNlpNMzIuNzgwNCA2MC4wNDk4TDMyLjUxMTIgNjAuNzQ5OUwzMy4yMTEyIDYxLjAxOTFMMzMuNDgwNCA2MC4zMTkxTDMyLjc4MDQgNjAuMDQ5OFpNNTguMDI5IDMxLjc2MzJDNTEuNTMyMSAzNC4yOTc2IDQ1LjcyNTUgMzguMjA2OSA0MC45NjU4IDQzLjEzMjJMNDIuMDQ0NCA0NC4xNzQ2QzQ2LjY1NjUgMzkuNDAyMSA1Mi4yODE5IDM1LjYxNTIgNTguNTc0MSAzMy4xNjA2TDU4LjAyOSAzMS43NjMyWk01OS41NDU0IDMzLjU4NjhMNTkuMDAwMiAzMi4xODkzTDU3LjYwMjggMzIuNzM0NUw1OC4xNDc5IDM0LjEzMTlMNTkuNTQ1NCAzMy41ODY4Wk00My4xMjMgNDUuMjE2OUM0Ny41ODc0IDQwLjU5NzMgNTMuMDMxNyAzNi45MzI4IDU5LjExOTIgMzQuNTU4MUw1OC41NzQxIDMzLjE2MDZDNTIuMjgxOSAzNS42MTUyIDQ2LjY1NjUgMzkuNDAyMSA0Mi4wNDQ0IDQ0LjE3NDZMNDMuMTIzIDQ1LjIxNjlaTTQwLjk4MzkgNDQuMTkyN0w0Mi4wNjI1IDQ1LjIzNTFMNDMuMTA0OSA0NC4xNTY0TDQyLjAyNjMgNDMuMTE0TDQwLjk4MzkgNDQuMTkyN1pNMzYuMjM4OSA0OC44NDM4QzMzLjk4MjYgNTIuMDQzIDMyLjEwNzYgNTUuNTMxMSAzMC42ODA0IDU5LjI0MjJMMzIuMDgwNCA1OS43ODA2QzMzLjQ2MjYgNTYuMTg2NSAzNS4yNzg4IDUyLjgwNzcgMzcuNDY0NyA0OS43MDg0TDM2LjIzODkgNDguODQzOFpNMzguNTA5OSA0OS41Mjc3TDM3LjI4NDEgNDguNjYzMkwzNi40MTk2IDQ5Ljg4OUwzNy42NDU0IDUwLjc1MzVMMzguNTA5OSA0OS41Mjc3Wk0zMy40ODA0IDYwLjMxOTFDMzQuODE3NyA1Ni44NDE5IDM2LjU3NSA1My41NzI1IDM4LjY5MDUgNTAuNTcyOUwzNy40NjQ3IDQ5LjcwODRDMzUuMjc4OCA1Mi44MDc3IDMzLjQ2MjYgNTYuMTg2NSAzMi4wODA0IDU5Ljc4MDZMMzMuNDgwNCA2MC4zMTkxWk0zMS4xMTEyIDYwLjIxMTRMMzIuNTExMiA2MC43NDk5TDMzLjA0OTYgNTkuMzQ5OEwzMS42NDk2IDU4LjgxMTRMMzEuMTExMiA2MC4yMTE0WlwiLFxuICBmaWxsOiBcIiMzQjM1NTJcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk05NC40NTY2IDU1LjM5NTJDOTMuOTUyNCA1Mi41ODg1IDk3LjEzNTUgNTAuNTU5MSA5OS4yMjMzIDUyLjUwMTRDMTAxLjE4OSA1NC4zMyAxMDMuMTA4IDU2LjMzMiAxMDQuMjExIDU4LjA1MjhDMTA3LjYxMyA2My4zNjE4IDEwOS41ODYgNjkuNjc1IDEwOS41ODYgNzYuNDQ5QzEwOS41ODYgOTUuMzAyOCA5NC4zMDIyIDExMC41ODcgNzUuNDQ4NCAxMTAuNTg3QzcyLjE4NTggMTEwLjU4NyA2Ny45MjM3IDEwOS4zNSA2NC4yMDQyIDEwNy45OEM2MS40ODU4IDEwNi45NzkgNjEuOTQzOCAxMDMuMiA2NC43NDU1IDEwMi40NjRDNjYuNjE1MyAxMDEuOTcyIDY4LjQxNDQgMTAxLjQxNiA2OS43MjQzIDEwMC44MzNDODQuNzE4OCA5NC4xNTc1IDk1LjE3MjUgNzkuMTI3NSA5NS4xNzI1IDYxLjY1NTlDOTUuMTcyNSA1OS45NDEzIDk0Ljg2MjYgNTcuNjU0OSA5NC40NTY2IDU1LjM5NTJaXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBmaWxsT3BhY2l0eTogXCIwLjA1XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgZDogXCJNNTYuMzY3MyA3NC4zMTU2QzU4LjE4OTIgNzIuNDk4NCA2MS4xMTQ4IDcyLjQ1MjkgNjIuOTkxOSA3NC4xNzkzTDYzLjEzNDIgNzQuMzE1Nkw3MC43NTEzIDgxLjkxMzRMODkuMjgwMiA2My40MzNDOTEuMTAyMSA2MS42MTU4IDk0LjAyNzcgNjEuNTcwNCA5NS45MDQ4IDYzLjI5NjdMOTYuMDQ3MSA2My40MzNDOTcuODY5IDY1LjI1MDIgOTcuOTE0NiA2OC4xNjgyIDk2LjE4MzggNzAuMDQwNUw5Ni4wNDcxIDcwLjE4MjRMNzQuMTM1MyA5Mi4wMzc2QzcyLjMxMzQgOTMuODU0OCA2OS4zODc4IDkzLjkwMDIgNjcuNTEwNyA5Mi4xNzM5TDY3LjM2ODQgOTIuMDM3Nkw1Ni4zNjczIDgxLjA2NUM1NC40OTg3IDc5LjIwMTIgNTQuNDk4NyA3Ni4xNzk0IDU2LjM2NzMgNzQuMzE1NlpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSkpO1xuZXhwb3J0IGRlZmF1bHQgQWNjZXB0OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgY29uc3QgQWRtaW5KU0xvZ28gPSAoe1xuICB3aWR0aCA9IDExMyxcbiAgaGVpZ2h0ID0gMTEzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gIHdpZHRoOiB3aWR0aCxcbiAgaGVpZ2h0OiBoZWlnaHQsXG4gIHZpZXdCb3g6IFwiMCAwIDExMyAxMTNcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7XG4gIHg6IFwiLTE4LjglXCIsXG4gIHk6IFwiLTEzLjQlXCIsXG4gIHdpZHRoOiBcIjEzNy42JVwiLFxuICBoZWlnaHQ6IFwiMTM3LjYlXCIsXG4gIGZpbHRlclVuaXRzOiBcIm9iamVjdEJvdW5kaW5nQm94XCIsXG4gIGlkOiBcImFcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZU9mZnNldFwiLCB7XG4gIGR5OiBcIjVcIixcbiAgaW46IFwiU291cmNlQWxwaGFcIixcbiAgcmVzdWx0OiBcInNoYWRvd09mZnNldE91dGVyMVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZUdhdXNzaWFuQmx1clwiLCB7XG4gIHN0ZERldmlhdGlvbjogXCI1XCIsXG4gIGluOiBcInNoYWRvd09mZnNldE91dGVyMVwiLFxuICByZXN1bHQ6IFwic2hhZG93Qmx1ck91dGVyMVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZUNvbG9yTWF0cml4XCIsIHtcbiAgdmFsdWVzOiBcIjAgMCAwIDAgMC4zMDE5NjA3ODQgMCAwIDAgMCAwLjQzOTIxNTY4NiAwIDAgMCAwIDAuOTIxNTY4NjI3IDAgMCAwIDAuNDAyMjg5MTE3IDBcIixcbiAgaW46IFwic2hhZG93Qmx1ck91dGVyMVwiXG59KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gIGlkOiBcImJcIixcbiAgeDogXCIwXCIsXG4gIHk6IFwiMFwiLFxuICB3aWR0aDogXCI5M1wiLFxuICBoZWlnaHQ6IFwiOTNcIixcbiAgcng6IFwiMjBcIlxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICBmaWxsOiBcIm5vbmVcIixcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDEwIDUpXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidXNlXCIsIHtcbiAgZmlsbDogXCIjMDAwXCIsXG4gIGZpbHRlcjogXCJ1cmwoI2EpXCIsXG4gIHhsaW5rSHJlZjogXCIjYlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1c2VcIiwge1xuICBmaWxsOiBcIiM0RDcwRUJcIixcbiAgeGxpbmtIcmVmOiBcIiNiXCJcbn0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNTYuNSAyOCA4MyA3NEg2OC45MzJsLTMuMjgyLTUuNjk4YTUuNjMyIDUuNjMyIDAgMCAwLTQuNjMtMi44MTVsLS4yNS0uMDA2aC04LjU0YTUuNjMyIDUuNjMyIDAgMCAwLTQuODggMi44Mkw0NC4wNjYgNzRIMzBsMjYuNS00NnptMCAyMC40NDRjLTMuMTE0IDAtNS42MzggMi41NDMtNS42MzggNS42OCAwIDMuMTM2IDIuNTI0IDUuNjc4IDUuNjM4IDUuNjc4czUuNjM4LTIuNTQyIDUuNjM4LTUuNjc5YzAtMy4xMzYtMi41MjQtNS42NzktNS42MzgtNS42Nzl6XCIsXG4gIGZpbGw6IFwiI0ZGRlwiXG59KSkpO1xuZXhwb3J0IGRlZmF1bHQgQWRtaW5KU0xvZ287IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBjb25zdCBBc3Ryb25hdXQgPSAoe1xuICB3aWR0aCA9IDE1MixcbiAgaGVpZ2h0ID0gMTY5XG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gIHdpZHRoOiB3aWR0aCxcbiAgaGVpZ2h0OiBoZWlnaHQsXG4gIHZpZXdCb3g6IFwiMCAwIDE1MiAxNjlcIixcbiAgdmVyc2lvbjogXCIxLjFcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgaWQ6IFwiU3ltYm9sc1wiLFxuICBzdHJva2U6IFwibm9uZVwiLFxuICBzdHJva2VXaWR0aDogXCIxXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICBmaWxsUnVsZTogXCJldmVub2RkXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gIGlkOiBcIkdyb3VwXCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMi4wMDAwMDAsIDIuMDAwMDAwKVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIzXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTc0LDEyMy4wNjA2MTEgTDc0LDE1OC43MjM1NjcgQzc0LDE2Mi4wMzcyNzUgNzEuMzEzNzA4NSwxNjQuNzIzNTY3IDY4LDE2NC43MjM1NjcgQzY2Ljk0NTIxMTgsMTY0LjcyMzU2NyA2NS45MDkwNjI3LDE2NC40NDU1MDQgNjQuOTk1OTk2LDE2My45MTc0MDYgTDYuNjc0OTUwMjYsMTMwLjE4NTc3NCBMNi42NzQ5NTAyNiwxMzAuMTg1Nzc0IEMyLjU0Mzk4NDM5LDEyNy43OTY1MTIgMS40MjEwODU0N2UtMTQsMTIzLjM4NjI3OCAxLjQyMTA4NTQ3ZS0xNCwxMTguNjE0MTI1IEwxLjQyMTA4NTQ3ZS0xNCw0OC40MzYxMjkgQzEuNDIxMDg1NDdlLTE0LDQzLjY2Mzk3NTYgMi41NDM5ODQzOSwzOS4yNTM3NDEyIDYuNjc0OTUwMjYsMzYuODY0NDc5OSBMNjcuMzA3MjA4MywxLjc5NjA5Mjc4IEM3MS40NDc3MzM3LC0wLjU5ODY5NzU5NSA3Ni41NTIyNjYzLC0wLjU5ODY5NzU5NSA4MC42OTI3OTE3LDEuNzk2MDkyNzggTDE0MS4zMjUwNSwzNi44NjQ0Nzk5IEMxNDUuNDU2MDE2LDM5LjI1Mzc0MTIgMTQ4LDQzLjY2Mzk3NTYgMTQ4LDQ4LjQzNjEyOSBMMTQ4LDExOC42MTQxMjUgQzE0OCwxMjMuMzg2Mjc4IDE0NS40NTYwMTYsMTI3Ljc5NjUxMiAxNDEuMzI1MDUsMTMwLjE4NTc3NCBMOTIuMjgxMjIyNiwxNTguNTUxNjYzXCIsXG4gIGlkOiBcIlBhdGgtQ29weS0yXCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEwNC4wNzI0NjQsNTkuNDM0NzgyNiBMMTA3LjQyMDI5LDU5LjQzNDc4MjYgQzExMC41MDE4NzksNTkuNDM0NzgyNiAxMTMsNjEuOTMyOTAzOSAxMTMsNjUuMDE0NDkyOCBMMTEzLDcyLjgyNjA4NyBDMTEzLDc1LjkwNzY3NTggMTEwLjUwMTg3OSw3OC40MDU3OTcxIDEwNy40MjAyOSw3OC40MDU3OTcxIEwxMDQuMDcyNDY0LDc4LjQwNTc5NzFcIixcbiAgaWQ6IFwiUGF0aFwiLFxuICBmaWxsOiBcIiMzMDQwRDZcIixcbiAgZmlsbE9wYWNpdHk6IFwiMC4yXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0zNiw1OS40MzQ3ODI2IEwzOS4zNDc4MjYxLDU5LjQzNDc4MjYgQzQyLjQyOTQxNDksNTkuNDM0NzgyNiA0NC45Mjc1MzYyLDYxLjkzMjkwMzkgNDQuOTI3NTM2Miw2NS4wMTQ0OTI4IEw0NC45Mjc1MzYyLDcyLjgyNjA4NyBDNDQuOTI3NTM2Miw3NS45MDc2NzU4IDQyLjQyOTQxNDksNzguNDA1Nzk3MSAzOS4zNDc4MjYxLDc4LjQwNTc5NzEgTDM2LDc4LjQwNTc5NzFcIixcbiAgaWQ6IFwiUGF0aC1Db3B5LThcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMlwiLFxuICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDQwLjQ2Mzc2OCwgNjguOTIwMjkwKSBzY2FsZSgtMSwgMSkgdHJhbnNsYXRlKC00MC40NjM3NjgsIC02OC45MjAyOTApIFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNzMuOTQyMDI5LDM2IEw3NS4wNTc5NzEsMzYgQzkxLjY5ODU1MDcsMzYgMTA1LjE4ODQwNiw0OS40ODk4NTUxIDEwNS4xODg0MDYsNjYuMTMwNDM0OCBMMTA1LjE4ODQwNiw3NC4yNjA4Njk2IEMxMDUuMTg4NDA2LDg2LjQxMTEzNDEgOTUuMzM4NjcwMyw5Ni4yNjA4Njk2IDgzLjE4ODQwNTgsOTYuMjYwODY5NiBMNjUuODExNTk0Miw5Ni4yNjA4Njk2IEM1My42NjEzMjk3LDk2LjI2MDg2OTYgNDMuODExNTk0Miw4Ni40MTExMzQxIDQzLjgxMTU5NDIsNzQuMjYwODY5NiBMNDMuODExNTk0Miw2Ni4xMzA0MzQ4IEM0My44MTE1OTQyLDQ5LjQ4OTg1NTEgNTcuMzAxNDQ5MywzNiA3My45NDIwMjksMzYgWlwiLFxuICBpZDogXCJSZWN0YW5nbGVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTYxLjYyMzE4ODQsNTQuOTcxMDE0NSBMODcuMzc2ODExNiw1NC45NzEwMTQ1IEM5Mi44OTk2NTkxLDU0Ljk3MTAxNDUgOTcuMzc2ODExNiw1OS40NDgxNjcgOTcuMzc2ODExNiw2NC45NzEwMTQ1IEw5Ny4zNzY4MTE2LDcxLjE1MjE3MzkgQzk3LjM3NjgxMTYsODAuMDg4NzgxNSA5MC4xMzIyNTk4LDg3LjMzMzMzMzMgODEuMTk1NjUyMiw4Ny4zMzMzMzMzIEw2Ny44MDQzNDc4LDg3LjMzMzMzMzMgQzU4Ljg2Nzc0MDIsODcuMzMzMzMzMyA1MS42MjMxODg0LDgwLjA4ODc4MTUgNTEuNjIzMTg4NCw3MS4xNTIxNzM5IEw1MS42MjMxODg0LDY0Ljk3MTAxNDUgQzUxLjYyMzE4ODQsNTkuNDQ4MTY3IDU2LjEwMDM0MDksNTQuOTcxMDE0NSA2MS42MjMxODg0LDU0Ljk3MTAxNDUgWlwiLFxuICBpZDogXCJSZWN0YW5nbGVcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNOTguMTYyNTU0OSw5Ni40MDcyODM5IEMxMDQuMDM5MDA4LDk3LjMyMTIyMDMgMTA4LjUzNjIzMiwxMDIuNDAzNTM1IDEwOC41MzYyMzIsMTA4LjUzNjIzMiBMMTA4LjUzNjIzMiwxMTguMTM0NzM0IEMxMDguNTM2MjMyLDExOS4yMTE3ODQgMTA3Ljc2NzAyOCwxMjAuMTM1MTg4IDEwNi43MDc3MTUsMTIwLjMyOTg0NCBDMTA2LjA1NTA2MSwxMjAuNDQ5Nzc0IDEwNS41MTM3NDksMTIwLjU0NjI5NSAxMDUuMDgzNzc5LDEyMC42MTk0MDggQzk1Ljk5MjIzMzgsMTIyLjE2NTM1MyA4NS41NzM3MDI4LDEyMy4wNDM0NzggNzQuNSwxMjMuMDQzNDc4XCIsXG4gIGlkOiBcIlBhdGhcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNjMuOTk1ODQ3OCwxMjIuNzc1NjQ5IEM1Ni44Mzk1NjgsMTIyLjQwNjc1MiA1MC4wODIzMDc5LDEyMS42NjcyMDQgNDMuOTMxOTQ5OSwxMjAuNjIyMDgyIEM0My40OTgxODA0LDEyMC41NDgzNzIgNDIuOTUxNjQ0LDEyMC40NTA5NDcgNDIuMjkyMzQwNywxMjAuMzI5ODA3IEM0MS4yMzI5ODU1LDEyMC4xMzUxODQgNDAuNDYzNzY4MSwxMTkuMjExNzU0IDQwLjQ2Mzc2ODEsMTE4LjEzNDY2OSBMNDAuNDYzNzY4MSwxMDguNTM2MjMyIEM0MC40NjM3NjgxLDEwMi40NDYwNTUgNDQuODk4ODQ2NCw5Ny4zOTE3NDYgNTAuNzE1NDE0LDk2LjQyNjg5NFwiLFxuICBpZDogXCJQYXRoXCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEwMC43MjQ2MzgsODcuNjA1NzkyNCBDMTAwLjcyNDYzOCw5Ny40NjY4NzY3IDkyLjczMDY0OTQsMTA1LjE4ODQwNiA4Mi44Njk1NjUyLDEwNS4xODg0MDYgTDY2LjEzMDQzNDgsMTA1LjE4ODQwNiBDNTYuMjY5MzUwNiwxMDUuMTg4NDA2IDQ4LjI3NTM2MjMsOTcuNDY2ODc2NyA0OC4yNzUzNjIzLDg3LjYwNTc5MjRcIixcbiAgaWQ6IFwiUGF0aFwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pKSkpO1xuZXhwb3J0IGRlZmF1bHQgQXN0cm9uYXV0OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgY29uc3QgQmFnID0gKHtcbiAgd2lkdGggPSAxNTIsXG4gIGhlaWdodCA9IDE1MlxufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB3aWR0aDogd2lkdGgsXG4gIGhlaWdodDogaGVpZ2h0LFxuICB2aWV3Qm94OiBcIjAgMCAxNTIgMTUyXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gIGN4OiBcIjc2XCIsXG4gIGN5OiBcIjc2XCIsXG4gIHI6IFwiNzZcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMzcuNzUgNTYuOTYyOUMzNy43NSA1Ni41NDg3IDM4LjA4NTggNTYuMjEyOSAzOC41IDU2LjIxMjlIMTEzLjVDMTEzLjkxNCA1Ni4yMTI5IDExNC4yNSA1Ni41NDg3IDExNC4yNSA1Ni45NjI5VjExNy43NjNDMTE0LjI1IDExOS41NTggMTEyLjc5NSAxMjEuMDEzIDExMSAxMjEuMDEzSDQxQzM5LjIwNTEgMTIxLjAxMyAzNy43NSAxMTkuNTU4IDM3Ljc1IDExNy43NjNWNTYuOTYyOVpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk01Ni4wNjUxIDEwOS4xMDJDNTUuNzI0NSAxMDguODY4IDU1LjI3NTUgMTA4Ljg2OCA1NC45MzQ5IDEwOS4xMDJMNTMuNDAwOSAxMTAuMTUyQzUyLjgzNTUgMTEwLjU0IDUyLjA1NjggMTEwLjI1NiA1MS44NzI2IDEwOS41OTZMNTEuMzcyOSAxMDcuODA1QzUxLjI2MTkgMTA3LjQwOCA1MC45MTggMTA3LjExOSA1MC41MDcxIDEwNy4wNzlMNDguNjU2NyAxMDYuODk4QzQ3Ljk3NDYgMTA2LjgzMSA0Ny41NjAzIDEwNi4xMTMgNDcuODQzNSAxMDUuNDg5TDQ4LjYxMTggMTAzLjc5NkM0OC43ODI0IDEwMy40MiA0OC43MDQ1IDEwMi45NzggNDguNDE1NiAxMDIuNjgzTDQ3LjExNDUgMTAxLjM1NUM0Ni42MzQ5IDEwMC44NjUgNDYuNzc4OCAxMDAuMDQ5IDQ3LjM5NjkgOTkuNzUzMkw0OS4wNzM4IDk4Ljk1MDFDNDkuNDQ2MiA5OC43NzE3IDQ5LjY3MDYgOTguMzgyOSA0OS42Mzg5IDk3Ljk3MTNMNDkuNDk2IDk2LjExNzVDNDkuNDQzMyA5NS40MzQyIDUwLjA3OCA5NC45MDE1IDUwLjc0MTggOTUuMDcyMUw1Mi41NDI3IDk1LjUzNDhDNTIuOTQyNSA5NS42Mzc1IDUzLjM2NDQgOTUuNDgzOSA1My42MDQ3IDk1LjE0ODJMNTQuNjg2OCA5My42MzYyQzU1LjA4NTcgOTMuMDc4OSA1NS45MTQzIDkzLjA3ODkgNTYuMzEzMiA5My42MzYyTDU3LjM5NTMgOTUuMTQ4MkM1Ny42MzU2IDk1LjQ4MzkgNTguMDU3NSA5NS42Mzc1IDU4LjQ1NzMgOTUuNTM0OEw2MC4yNTgxIDk1LjA3MjFDNjAuOTIxOSA5NC45MDE1IDYxLjU1NjcgOTUuNDM0MiA2MS41MDQgOTYuMTE3NUw2MS4zNjExIDk3Ljk3MTNDNjEuMzI5MyA5OC4zODI5IDYxLjU1MzggOTguNzcxNyA2MS45MjYyIDk4Ljk1MDFMNjMuNjAzMSA5OS43NTMyQzY0LjIyMTIgMTAwLjA0OSA2NC4zNjUxIDEwMC44NjUgNjMuODg1NSAxMDEuMzU1TDYyLjU4NDQgMTAyLjY4M0M2Mi4yOTU1IDEwMi45NzggNjIuMjE3NSAxMDMuNDIgNjIuMzg4MSAxMDMuNzk2TDYzLjE1NjUgMTA1LjQ4OUM2My40Mzk3IDEwNi4xMTMgNjMuMDI1NCAxMDYuODMxIDYyLjM0MzMgMTA2Ljg5OEw2MC40OTI5IDEwNy4wNzlDNjAuMDgyIDEwNy4xMTkgNTkuNzM4IDEwNy40MDggNTkuNjI3MSAxMDcuODA1TDU5LjEyNzQgMTA5LjU5NkM1OC45NDMxIDExMC4yNTYgNTguMTY0NSAxMTAuNTQgNTcuNTk5MSAxMTAuMTUyTDU2LjA2NTEgMTA5LjEwMlpcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTkzLjc4MTIgNjEuMzYyM0M5My43ODEyIDYwLjI1NzcgOTQuNjc2NyA1OS4zNjIzIDk1Ljc4MTIgNTkuMzYyM0gxMDkuNkMxMTAuNDI5IDU5LjM2MjMgMTExLjEgNjAuMDMzOSAxMTEuMSA2MC44NjIzVjExNi4yMDRDMTExLjEgMTE3LjMwOCAxMTAuMjA1IDExOC4yMDQgMTA5LjEgMTE4LjIwNEg5NS43ODEzQzk0LjY3NjcgMTE4LjIwNCA5My43ODEyIDExNy4zMDggOTMuNzgxMiAxMTYuMjA0VjYxLjM2MjNaXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBmaWxsT3BhY2l0eTogXCIwLjA1XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0zNy44MTggNTYuMTc1TDM5LjYzNzYgMzUuMjVIMTEyLjM2MkwxMTQuMTgyIDU2LjE3NUgzNy44MThaXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk00MC4yODQ1IDM1LjI1SDExMS43MTVMMTA1LjU4NCA0NS4zMjI1TDEwNS4zMTQgNDUuNzY1OUwxMDUuNjM0IDQ2LjE3NDdMMTEzLjQ2MSA1Ni4xNzVIMzguNTM5M0w0Ni4zNjU2IDQ2LjE3NDdMNDYuNjg1NSA0NS43NjU5TDQ2LjQxNTYgNDUuMzIyNUw0MC4yODQ1IDM1LjI1WlwiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCI2NC4zXCIsXG4gIGN5OiBcIjY3LjE2MjNcIixcbiAgcjogXCIyLjkyNVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiODcuNjk5OVwiLFxuICBjeTogXCI2Ny4xNjIzXCIsXG4gIHI6IFwiMi45MjVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk04Ny42OTk4IDcwLjA4NzlWODAuODEyOUM4Ny42OTk4IDg3LjI3NDYgODIuNDYxNSA5Mi41MTI5IDc1Ljk5OTggOTIuNTEyOVY5Mi41MTI5QzY5LjUzODEgOTIuNTEyOSA2NC4yOTk4IDg3LjI3NDYgNjQuMjk5OCA4MC44MTI5VjcwLjA4NzlcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgZDogXCJNNDUuNjg2MyAzOS40MTkxQzQ1LjI5NDIgMzguNzUyNSA0NS43NzQ4IDM3LjkxMjEgNDYuNTQ4MiAzNy45MTIxSDEwNS40NTFDMTA2LjIyNSAzNy45MTIxIDEwNi43MDUgMzguNzUyNSAxMDYuMzEzIDM5LjQxOTFMMTAyLjQ2MyA0NS45NjQ5QzEwMi4zNzIgNDYuMTE4NiAxMDIuMzI1IDQ2LjI5MzYgMTAyLjMyNSA0Ni40NzE5VjUzLjAyOEMxMDIuMzI1IDUzLjU4MDMgMTAxLjg3NyA1NC4wMjggMTAxLjMyNSA1NC4wMjhINTAuNjc0OEM1MC4xMjI1IDU0LjAyOCA0OS42NzQ4IDUzLjU4MDMgNDkuNjc0OCA1My4wMjhWNDYuNDcxOUM0OS42NzQ4IDQ2LjI5MzYgNDkuNjI3MSA0Ni4xMTg2IDQ5LjUzNjcgNDUuOTY0OUw0NS42ODYzIDM5LjQxOTFaXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNzYuMDg5NiAyNVY0MC4zNDk1XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk01NS41IDEyOS41SDcyLjVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTc3LjE5NDQgMTI5LjVIODMuODA1NlwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNOTYuMTc5NiAzMS40NDUzTDg4LjUwNDkgNDQuNzM4NFwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNTYgMzEuNDQ1M0w2My42NzQ4IDQ0LjczODRcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSkpO1xuZXhwb3J0IGRlZmF1bHQgQmFnOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgY29uc3QgQmV3YXJlID0gKHtcbiAgd2lkdGggPSAxNTIsXG4gIGhlaWdodCA9IDE1MlxufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB3aWR0aDogd2lkdGgsXG4gIGhlaWdodDogaGVpZ2h0LFxuICB2aWV3Qm94OiBcIjAgMCAxNTIgMTUyXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gIGN4OiBcIjc2XCIsXG4gIGN5OiBcIjc2XCIsXG4gIHI6IFwiNzZcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCI5My4zMTYyXCIsXG4gIGN5OiBcIjU5LjA5NzRcIixcbiAgcjogXCIxNi4yNTU2XCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTcyLjU0NDkgMzMuOTIzMUM3NC4wODg0IDMxLjI3NyA3Ny45MTE2IDMxLjI3NyA3OS40NTUxIDMzLjkyMzFMMTE5LjQ5MSAxMDIuNTU2QzEyMS4wNDcgMTA1LjIyMyAxMTkuMTIzIDEwOC41NzEgMTE2LjAzNiAxMDguNTcxSDM1Ljk2NDFDMzIuODc3IDEwOC41NzEgMzAuOTUzNSAxMDUuMjIzIDMyLjUwOSAxMDIuNTU2TDcyLjU0NDkgMzMuOTIzMVpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTQyLjIxNTYgNzMuNDA1M0w0MS44Mzc3IDc0LjA1MzFMNDIuNDg1NSA3NC40MzFMNDIuODYzNCA3My43ODMyTDQyLjIxNTYgNzMuNDA1M1pNNTEuNjA4NSA1Ny4zMDMyTDUyLjI1NjMgNTcuNjgxMUw1Mi42MzQyIDU3LjAzMzJMNTEuOTg2NCA1Ni42NTUzTDUxLjYwODUgNTcuMzAzMlpNNDAuOTE5OSA3Mi42NDk0TDQwLjI3MjEgNzIuMjcxNUwzOS44OTQyIDcyLjkxOTRMNDAuNTQyIDczLjI5NzNMNDAuOTE5OSA3Mi42NDk0Wk01MC4zMTI4IDU2LjU0NzRMNTAuNjkwNyA1NS44OTk1TDUwLjA0MjkgNTUuNTIxNkw0OS42NjUgNTYuMTY5NUw1MC4zMTI4IDU2LjU0NzRaTTU1LjY4ODMgNTAuMzA5MUw1NS4zMTA0IDUwLjk1N0w1NS45NTgyIDUxLjMzNDlMNTYuMzM2MiA1MC42ODcxTDU1LjY4ODMgNTAuMzA5MVpNNjAuMTY5NiA0Mi42MjY5TDYwLjgxNzUgNDMuMDA0OEw2MS4xOTU0IDQyLjM1N0w2MC41NDc1IDQxLjk3OTFMNjAuMTY5NiA0Mi42MjY5Wk01NC4zOTI2IDQ5LjU1MzNMNTMuNzQ0OCA0OS4xNzU0TDUzLjM2NjkgNDkuODIzM0w1NC4wMTQ3IDUwLjIwMTJMNTQuMzkyNiA0OS41NTMzWk01OC44NzQgNDEuODcxMUw1OS4yNTE5IDQxLjIyMzNMNTguNjA0IDQwLjg0NTRMNTguMjI2MSA0MS40OTMyTDU4Ljg3NCA0MS44NzExWk00Mi44NjM0IDczLjc4MzJMNTIuMjU2MyA1Ny42ODExTDUwLjk2MDYgNTYuOTI1M0w0MS41Njc4IDczLjAyNzRMNDIuODYzNCA3My43ODMyWk00MC41NDIgNzMuMjk3M0w0MS44Mzc3IDc0LjA1MzFMNDIuNTkzNSA3Mi43NTc0TDQxLjI5NzggNzIuMDAxNkw0MC41NDIgNzMuMjk3M1pNNDkuNjY1IDU2LjE2OTVMNDAuMjcyMSA3Mi4yNzE1TDQxLjU2NzggNzMuMDI3NEw1MC45NjA2IDU2LjkyNTNMNDkuNjY1IDU2LjE2OTVaTTUxLjk4NjQgNTYuNjU1M0w1MC42OTA3IDU1Ljg5OTVMNDkuOTM0OSA1Ny4xOTUyTDUxLjIzMDYgNTcuOTUxTDUxLjk4NjQgNTYuNjU1M1pNNTYuMzM2MiA1MC42ODcxTDYwLjgxNzUgNDMuMDA0OEw1OS41MjE4IDQyLjI0OUw1NS4wNDA1IDQ5LjkzMTJMNTYuMzM2MiA1MC42ODcxWk01NC4wMTQ3IDUwLjIwMTJMNTUuMzEwNCA1MC45NTdMNTYuMDY2MiA0OS42NjEzTDU0Ljc3MDYgNDguOTA1NUw1NC4wMTQ3IDUwLjIwMTJaTTU4LjIyNjEgNDEuNDkzMkw1My43NDQ4IDQ5LjE3NTRMNTUuMDQwNSA0OS45MzEyTDU5LjUyMTggNDIuMjQ5TDU4LjIyNjEgNDEuNDkzMlpNNjAuNTQ3NSA0MS45NzkxTDU5LjI1MTkgNDEuMjIzM0w1OC40OTYxIDQyLjUxODlMNTkuNzkxNyA0My4yNzQ3TDYwLjU0NzUgNDEuOTc5MVpcIixcbiAgZmlsbDogXCIjM0IzNTUyXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk05NC45ODI0IDgwLjg4NjdMOTQuNjA0NSA4MC4yMzg4TDkzLjk1NjcgODAuNjE2N0w5NC4zMzQ2IDgxLjI2NDZMOTQuOTgyNCA4MC44ODY3Wk05Ny42NDExIDg1LjQ0NDVMOTYuOTkzMyA4NS44MjI0TDk3LjM3MTIgODYuNDcwMkw5OC4wMTkgODYuMDkyM0w5Ny42NDExIDg1LjQ0NDVaTTk2LjI3ODEgODAuMTMwOUw5Ni45MjU5IDc5Ljc1M0w5Ni41NDggNzkuMTA1MUw5NS45MDAyIDc5LjQ4M0w5Ni4yNzgxIDgwLjEzMDlaTTk4LjkzNjggODQuNjg4Nkw5OS4zMTQ3IDg1LjMzNjVMOTkuOTYyNSA4NC45NTg2TDk5LjU4NDYgODQuMzEwN0w5OC45MzY4IDg0LjY4ODZaTTk5LjQ2MTUgODguNTY1MUw5OS4wODM2IDg3LjkxNzJMOTguNDM1OCA4OC4yOTUxTDk4LjgxMzcgODguOTQzTDk5LjQ2MTUgODguNTY1MVpNMTAxLjYwMiA5Mi4yMzM5TDEwMC45NTQgOTIuNjExOEgxMDAuOTU0TDEwMS42MDIgOTIuMjMzOVpNMTAwLjc1NyA4Ny44MDkzTDEwMS40MDUgODcuNDMxNEwxMDEuMDI3IDg2Ljc4MzVMMTAwLjM3OSA4Ny4xNjE0TDEwMC43NTcgODcuODA5M1pNMTAyLjg5NyA5MS40NzgxTDEwMi4yNDkgOTEuODU2TDEwMi44OTcgOTEuNDc4MVpNMTA1Ljg5NCA5Ni42MTQ1TDEwNS4yNDYgOTYuOTkyNEwxMDUuODk0IDk2LjYxNDVaTTEwNC45MDQgMTAwLjM3NkwxMDQuNTI2IDk5LjcyNzdMMTA0LjUyNiA5OS43Mjc3TDEwNC45MDQgMTAwLjM3NlpNOTkuNDI1NyAxMDAuNzVIOTguNjc1N1YxMDEuNUg5OS40MjU3VjEwMC43NVpNOTkuNDI1NyA5OS4yNTAyVjk4LjUwMDJIOTguNjc1N1Y5OS4yNTAySDk5LjQyNTdaTTEwNC4xNDggOTkuMDc5OUwxMDQuNTI2IDk5LjcyNzdIMTA0LjUyNkwxMDQuMTQ4IDk5LjA3OTlaTTEwNC41OTggOTcuMzcwM0wxMDUuMjQ2IDk2Ljk5MjRMMTA0LjU5OCA5Ny4zNzAzWk05NC4zMzQ2IDgxLjI2NDZMOTYuOTkzMyA4NS44MjI0TDk4LjI4OSA4NS4wNjY1TDk1LjYzMDMgODAuNTA4OEw5NC4zMzQ2IDgxLjI2NDZaTTk1LjkwMDIgNzkuNDgzTDk0LjYwNDUgODAuMjM4OEw5NS4zNjAzIDgxLjUzNDVMOTYuNjU2IDgwLjc3ODdMOTUuOTAwMiA3OS40ODNaTTk5LjU4NDYgODQuMzEwN0w5Ni45MjU5IDc5Ljc1M0w5NS42MzAzIDgwLjUwODhMOTguMjg5IDg1LjA2NjVMOTkuNTg0NiA4NC4zMTA3Wk05OC4wMTkgODYuMDkyM0w5OS4zMTQ3IDg1LjMzNjVMOTguNTU4OSA4NC4wNDA4TDk3LjI2MzIgODQuNzk2Nkw5OC4wMTkgODYuMDkyM1pNOTguODEzNyA4OC45NDNMMTAwLjk1NCA5Mi42MTE4TDEwMi4yNDkgOTEuODU2TDEwMC4xMDkgODguMTg3Mkw5OC44MTM3IDg4Ljk0M1pNMTAwLjM3OSA4Ny4xNjE0TDk5LjA4MzYgODcuOTE3Mkw5OS44Mzk0IDg5LjIxMjlMMTAxLjEzNSA4OC40NTcxTDEwMC4zNzkgODcuMTYxNFpNMTAzLjU0NSA5MS4xMDAyTDEwMS40MDUgODcuNDMxNEwxMDAuMTA5IDg4LjE4NzJMMTAyLjI0OSA5MS44NTZMMTAzLjU0NSA5MS4xMDAyWk0xMDYuNTQxIDk2LjIzNjZMMTAzLjU0NSA5MS4xMDAyTDEwMi4yNDkgOTEuODU2TDEwNS4yNDYgOTYuOTkyNEwxMDYuNTQxIDk2LjIzNjZaTTEwNS4yODIgMTAxLjAyM0MxMDYuOTUxIDEwMC4wNDkgMTA3LjUxNSA5Ny45MDYzIDEwNi41NDEgOTYuMjM2NkwxMDUuMjQ2IDk2Ljk5MjRDMTA1LjgwMiA5Ny45NDY1IDEwNS40OCA5OS4xNzEyIDEwNC41MjYgOTkuNzI3N0wxMDUuMjgyIDEwMS4wMjNaTTEwMy41MTggMTAxLjVDMTA0LjEzOCAxMDEuNSAxMDQuNzQ2IDEwMS4zMzYgMTA1LjI4MiAxMDEuMDIzTDEwNC41MjYgOTkuNzI3N0MxMDQuMjIgOTkuOTA2MSAxMDMuODcyIDEwMCAxMDMuNTE4IDEwMFYxMDEuNVpNMTAzLjUwOCAxMDEuNUgxMDMuNTE4VjEwMEgxMDMuNTA4VjEwMS41Wk0xMDMuNDk3IDEwMS41SDEwMy41MDhWMTAwSDEwMy40OTdWMTAxLjVaTTEwMy40ODYgMTAxLjVIMTAzLjQ5N1YxMDBIMTAzLjQ4NlYxMDEuNVpNMTAzLjQ3NiAxMDEuNUgxMDMuNDg2VjEwMEgxMDMuNDc2VjEwMS41Wk0xMDMuNDY1IDEwMS41SDEwMy40NzZWMTAwSDEwMy40NjVWMTAxLjVaTTEwMy40NTQgMTAxLjVIMTAzLjQ2NVYxMDBIMTAzLjQ1NFYxMDEuNVpNMTAzLjQ0NCAxMDEuNUgxMDMuNDU0VjEwMEgxMDMuNDQ0VjEwMS41Wk0xMDMuNDMzIDEwMS41SDEwMy40NDRWMTAwSDEwMy40MzNWMTAxLjVaTTEwMy40MjMgMTAxLjVIMTAzLjQzM1YxMDBIMTAzLjQyM1YxMDEuNVpNMTAzLjQxMiAxMDEuNUgxMDMuNDIzVjEwMEgxMDMuNDEyVjEwMS41Wk0xMDMuNDAyIDEwMS41SDEwMy40MTJWMTAwSDEwMy40MDJWMTAxLjVaTTEwMy4zOTEgMTAxLjVIMTAzLjQwMlYxMDBIMTAzLjM5MVYxMDEuNVpNMTAzLjM4IDEwMS41SDEwMy4zOTFWMTAwSDEwMy4zOFYxMDEuNVpNMTAzLjM3IDEwMS41SDEwMy4zOFYxMDBIMTAzLjM3VjEwMS41Wk0xMDMuMzU5IDEwMS41SDEwMy4zN1YxMDBIMTAzLjM1OVYxMDEuNVpNMTAzLjM0OSAxMDEuNUgxMDMuMzU5VjEwMEgxMDMuMzQ5VjEwMS41Wk0xMDMuMzM4IDEwMS41SDEwMy4zNDlWMTAwSDEwMy4zMzhWMTAxLjVaTTEwMy4zMjggMTAxLjVIMTAzLjMzOFYxMDBIMTAzLjMyOFYxMDEuNVpNMTAzLjMxOCAxMDEuNUgxMDMuMzI4VjEwMEgxMDMuMzE4VjEwMS41Wk0xMDMuMzA3IDEwMS41SDEwMy4zMThWMTAwSDEwMy4zMDdWMTAxLjVaTTEwMy4yOTcgMTAxLjVIMTAzLjMwN1YxMDBIMTAzLjI5N1YxMDEuNVpNMTAzLjI4NiAxMDEuNUgxMDMuMjk3VjEwMEgxMDMuMjg2VjEwMS41Wk0xMDMuMjc2IDEwMS41SDEwMy4yODZWMTAwSDEwMy4yNzZWMTAxLjVaTTEwMy4yNjUgMTAxLjVIMTAzLjI3NlYxMDBIMTAzLjI2NVYxMDEuNVpNMTAzLjI1NSAxMDEuNUgxMDMuMjY1VjEwMEgxMDMuMjU1VjEwMS41Wk0xMDMuMjQ1IDEwMS41SDEwMy4yNTVWMTAwSDEwMy4yNDVWMTAxLjVaTTEwMy4yMzQgMTAxLjVIMTAzLjI0NVYxMDBIMTAzLjIzNFYxMDEuNVpNMTAzLjIyNCAxMDEuNUgxMDMuMjM0VjEwMEgxMDMuMjI0VjEwMS41Wk0xMDMuMjEzIDEwMS41SDEwMy4yMjRWMTAwSDEwMy4yMTNWMTAxLjVaTTEwMy4yMDMgMTAxLjVIMTAzLjIxM1YxMDBIMTAzLjIwM1YxMDEuNVpNMTAzLjE5MyAxMDEuNUgxMDMuMjAzVjEwMEgxMDMuMTkzVjEwMS41Wk0xMDMuMTgyIDEwMS41SDEwMy4xOTNWMTAwSDEwMy4xODJWMTAxLjVaTTEwMy4xNzIgMTAxLjVIMTAzLjE4MlYxMDBIMTAzLjE3MlYxMDEuNVpNMTAzLjE2MiAxMDEuNUgxMDMuMTcyVjEwMEgxMDMuMTYyVjEwMS41Wk0xMDMuMTUyIDEwMS41SDEwMy4xNjJWMTAwSDEwMy4xNTJWMTAxLjVaTTEwMy4xNDEgMTAxLjVIMTAzLjE1MlYxMDBIMTAzLjE0MVYxMDEuNVpNMTAzLjEzMSAxMDEuNUgxMDMuMTQxVjEwMEgxMDMuMTMxVjEwMS41Wk0xMDMuMTIxIDEwMS41SDEwMy4xMzFWMTAwSDEwMy4xMjFWMTAxLjVaTTEwMy4xMSAxMDEuNUgxMDMuMTIxVjEwMEgxMDMuMTFWMTAxLjVaTTEwMy4xIDEwMS41SDEwMy4xMVYxMDBIMTAzLjFWMTAxLjVaTTEwMy4wOSAxMDEuNUgxMDMuMVYxMDBIMTAzLjA5VjEwMS41Wk0xMDMuMDggMTAxLjVIMTAzLjA5VjEwMEgxMDMuMDhWMTAxLjVaTTEwMy4wNyAxMDEuNUgxMDMuMDhWMTAwSDEwMy4wN1YxMDEuNVpNMTAzLjA1OSAxMDEuNUgxMDMuMDdWMTAwSDEwMy4wNTlWMTAxLjVaTTEwMy4wNDkgMTAxLjVIMTAzLjA1OVYxMDBIMTAzLjA0OVYxMDEuNVpNMTAzLjAzOSAxMDEuNUgxMDMuMDQ5VjEwMEgxMDMuMDM5VjEwMS41Wk0xMDMuMDI5IDEwMS41SDEwMy4wMzlWMTAwSDEwMy4wMjlWMTAxLjVaTTEwMy4wMTkgMTAxLjVIMTAzLjAyOVYxMDBIMTAzLjAxOVYxMDEuNVpNMTAzLjAwOCAxMDEuNUgxMDMuMDE5VjEwMEgxMDMuMDA4VjEwMS41Wk0xMDIuOTk4IDEwMS41SDEwMy4wMDhWMTAwSDEwMi45OThWMTAxLjVaTTEwMi45ODggMTAxLjVIMTAyLjk5OFYxMDBIMTAyLjk4OFYxMDEuNVpNMTAyLjk3OCAxMDEuNUgxMDIuOTg4VjEwMEgxMDIuOTc4VjEwMS41Wk0xMDIuOTY4IDEwMS41SDEwMi45NzhWMTAwSDEwMi45NjhWMTAxLjVaTTEwMi45NTggMTAxLjVIMTAyLjk2OFYxMDBIMTAyLjk1OFYxMDEuNVpNMTAyLjk0OCAxMDEuNUgxMDIuOTU4VjEwMEgxMDIuOTQ4VjEwMS41Wk0xMDIuOTM4IDEwMS41SDEwMi45NDhWMTAwSDEwMi45MzhWMTAxLjVaTTEwMi45MjggMTAxLjVIMTAyLjkzOFYxMDBIMTAyLjkyOFYxMDEuNVpNMTAyLjkxOCAxMDEuNUgxMDIuOTI4VjEwMEgxMDIuOTE4VjEwMS41Wk0xMDIuOTA3IDEwMS41SDEwMi45MThWMTAwSDEwMi45MDdWMTAxLjVaTTEwMi44OTcgMTAxLjVIMTAyLjkwN1YxMDBIMTAyLjg5N1YxMDEuNVpNMTAyLjg4NyAxMDEuNUgxMDIuODk3VjEwMEgxMDIuODg3VjEwMS41Wk0xMDIuODc3IDEwMS41SDEwMi44ODdWMTAwSDEwMi44NzdWMTAxLjVaTTEwMi44NjcgMTAxLjVIMTAyLjg3N1YxMDBIMTAyLjg2N1YxMDEuNVpNMTAyLjg1NyAxMDEuNUgxMDIuODY3VjEwMEgxMDIuODU3VjEwMS41Wk0xMDIuODQ3IDEwMS41SDEwMi44NTdWMTAwSDEwMi44NDdWMTAxLjVaTTEwMi44MzcgMTAxLjVIMTAyLjg0N1YxMDBIMTAyLjgzN1YxMDEuNVpNMTAyLjgyNyAxMDEuNUgxMDIuODM3VjEwMEgxMDIuODI3VjEwMS41Wk0xMDIuODE4IDEwMS41SDEwMi44MjdWMTAwSDEwMi44MThWMTAxLjVaTTEwMi44MDggMTAxLjVIMTAyLjgxOFYxMDBIMTAyLjgwOFYxMDEuNVpNMTAyLjc5OCAxMDEuNUgxMDIuODA4VjEwMEgxMDIuNzk4VjEwMS41Wk0xMDIuNzg4IDEwMS41SDEwMi43OThWMTAwSDEwMi43ODhWMTAxLjVaTTEwMi43NzggMTAxLjVIMTAyLjc4OFYxMDBIMTAyLjc3OFYxMDEuNVpNMTAyLjc2OCAxMDEuNUgxMDIuNzc4VjEwMEgxMDIuNzY4VjEwMS41Wk0xMDIuNzU4IDEwMS41SDEwMi43NjhWMTAwSDEwMi43NThWMTAxLjVaTTEwMi43NDggMTAxLjVIMTAyLjc1OFYxMDBIMTAyLjc0OFYxMDEuNVpNMTAyLjczOCAxMDEuNUgxMDIuNzQ4VjEwMEgxMDIuNzM4VjEwMS41Wk0xMDIuNzI4IDEwMS41SDEwMi43MzhWMTAwSDEwMi43MjhWMTAxLjVaTTEwMi43MTkgMTAxLjVIMTAyLjcyOFYxMDBIMTAyLjcxOVYxMDEuNVpNMTAyLjcwOSAxMDEuNUgxMDIuNzE5VjEwMEgxMDIuNzA5VjEwMS41Wk0xMDIuNjk5IDEwMS41SDEwMi43MDlWMTAwSDEwMi42OTlWMTAxLjVaTTEwMi42ODkgMTAxLjVIMTAyLjY5OVYxMDBIMTAyLjY4OVYxMDEuNVpNMTAyLjY3OSAxMDEuNUgxMDIuNjg5VjEwMEgxMDIuNjc5VjEwMS41Wk0xMDIuNjY5IDEwMS41SDEwMi42NzlWMTAwSDEwMi42NjlWMTAxLjVaTTEwMi42NiAxMDEuNUgxMDIuNjY5VjEwMEgxMDIuNjZWMTAxLjVaTTEwMi42NSAxMDEuNUgxMDIuNjZWMTAwSDEwMi42NVYxMDEuNVpNMTAyLjY0IDEwMS41SDEwMi42NVYxMDBIMTAyLjY0VjEwMS41Wk0xMDIuNjMgMTAxLjVIMTAyLjY0VjEwMEgxMDIuNjNWMTAxLjVaTTEwMi42MjEgMTAxLjVIMTAyLjYzVjEwMEgxMDIuNjIxVjEwMS41Wk0xMDIuNjExIDEwMS41SDEwMi42MjFWMTAwSDEwMi42MTFWMTAxLjVaTTEwMi42MDEgMTAxLjVIMTAyLjYxMVYxMDBIMTAyLjYwMVYxMDEuNVpNMTAyLjU5MSAxMDEuNUgxMDIuNjAxVjEwMEgxMDIuNTkxVjEwMS41Wk0xMDIuNTgyIDEwMS41SDEwMi41OTFWMTAwSDEwMi41ODJWMTAxLjVaTTEwMi41NzIgMTAxLjVIMTAyLjU4MlYxMDBIMTAyLjU3MlYxMDEuNVpNMTAyLjU2MiAxMDEuNUgxMDIuNTcyVjEwMEgxMDIuNTYyVjEwMS41Wk0xMDIuNTUzIDEwMS41SDEwMi41NjJWMTAwSDEwMi41NTNWMTAxLjVaTTEwMi41NDMgMTAxLjVIMTAyLjU1M1YxMDBIMTAyLjU0M1YxMDEuNVpNMTAyLjUzMyAxMDEuNUgxMDIuNTQzVjEwMEgxMDIuNTMzVjEwMS41Wk0xMDIuNTI0IDEwMS41SDEwMi41MzNWMTAwSDEwMi41MjRWMTAxLjVaTTEwMi41MTQgMTAxLjVIMTAyLjUyNFYxMDBIMTAyLjUxNFYxMDEuNVpNMTAyLjUwNCAxMDEuNUgxMDIuNTE0VjEwMEgxMDIuNTA0VjEwMS41Wk0xMDIuNDk1IDEwMS41SDEwMi41MDRWMTAwSDEwMi40OTVWMTAxLjVaTTEwMi40ODUgMTAxLjVIMTAyLjQ5NVYxMDBIMTAyLjQ4NVYxMDEuNVpNMTAyLjQ3NiAxMDEuNUgxMDIuNDg1VjEwMEgxMDIuNDc2VjEwMS41Wk0xMDIuNDY2IDEwMS41SDEwMi40NzZWMTAwSDEwMi40NjZWMTAxLjVaTTEwMi40NTcgMTAxLjVIMTAyLjQ2NlYxMDBIMTAyLjQ1N1YxMDEuNVpNMTAyLjQ0NyAxMDEuNUgxMDIuNDU3VjEwMEgxMDIuNDQ3VjEwMS41Wk0xMDIuNDM3IDEwMS41SDEwMi40NDdWMTAwSDEwMi40MzdWMTAxLjVaTTEwMi40MjggMTAxLjVIMTAyLjQzN1YxMDBIMTAyLjQyOFYxMDEuNVpNMTAyLjQxOCAxMDEuNUgxMDIuNDI4VjEwMEgxMDIuNDE4VjEwMS41Wk0xMDIuNDA5IDEwMS41SDEwMi40MThWMTAwSDEwMi40MDlWMTAxLjVaTTEwMi4zOTkgMTAxLjVIMTAyLjQwOVYxMDBIMTAyLjM5OVYxMDEuNVpNMTAyLjM5IDEwMS41SDEwMi4zOTlWMTAwSDEwMi4zOVYxMDEuNVpNMTAyLjM4IDEwMS41SDEwMi4zOVYxMDBIMTAyLjM4VjEwMS41Wk0xMDIuMzcxIDEwMS41SDEwMi4zOFYxMDBIMTAyLjM3MVYxMDEuNVpNMTAyLjM2MSAxMDEuNUgxMDIuMzcxVjEwMEgxMDIuMzYxVjEwMS41Wk0xMDIuMzUyIDEwMS41SDEwMi4zNjFWMTAwSDEwMi4zNTJWMTAxLjVaTTEwMi4zNDIgMTAxLjVIMTAyLjM1MlYxMDBIMTAyLjM0MlYxMDEuNVpNMTAyLjMzMyAxMDEuNUgxMDIuMzQyVjEwMEgxMDIuMzMzVjEwMS41Wk0xMDIuMzI0IDEwMS41SDEwMi4zMzNWMTAwSDEwMi4zMjRWMTAxLjVaTTEwMi4zMTQgMTAxLjVIMTAyLjMyNFYxMDBIMTAyLjMxNFYxMDEuNVpNMTAyLjMwNSAxMDEuNUgxMDIuMzE0VjEwMEgxMDIuMzA1VjEwMS41Wk0xMDIuMjk1IDEwMS41SDEwMi4zMDVWMTAwSDEwMi4yOTVWMTAxLjVaTTEwMi4yODYgMTAxLjVIMTAyLjI5NVYxMDBIMTAyLjI4NlYxMDEuNVpNMTAyLjI3NyAxMDEuNUgxMDIuMjg2VjEwMEgxMDIuMjc3VjEwMS41Wk0xMDIuMjY3IDEwMS41SDEwMi4yNzdWMTAwSDEwMi4yNjdWMTAxLjVaTTEwMi4yNTggMTAxLjVIMTAyLjI2N1YxMDBIMTAyLjI1OFYxMDEuNVpNMTAyLjI0OSAxMDEuNUgxMDIuMjU4VjEwMEgxMDIuMjQ5VjEwMS41Wk0xMDIuMjM5IDEwMS41SDEwMi4yNDlWMTAwSDEwMi4yMzlWMTAxLjVaTTEwMi4yMyAxMDEuNUgxMDIuMjM5VjEwMEgxMDIuMjNWMTAxLjVaTTEwMi4yMjEgMTAxLjVIMTAyLjIzVjEwMEgxMDIuMjIxVjEwMS41Wk0xMDIuMjExIDEwMS41SDEwMi4yMjFWMTAwSDEwMi4yMTFWMTAxLjVaTTEwMi4yMDIgMTAxLjVIMTAyLjIxMVYxMDBIMTAyLjIwMlYxMDEuNVpNMTAyLjE5MyAxMDEuNUgxMDIuMjAyVjEwMEgxMDIuMTkzVjEwMS41Wk0xMDIuMTg0IDEwMS41SDEwMi4xOTNWMTAwSDEwMi4xODRWMTAxLjVaTTEwMi4xNzQgMTAxLjVIMTAyLjE4NFYxMDBIMTAyLjE3NFYxMDEuNVpNMTAyLjE2NSAxMDEuNUgxMDIuMTc0VjEwMEgxMDIuMTY1VjEwMS41Wk0xMDIuMTU2IDEwMS41SDEwMi4xNjVWMTAwSDEwMi4xNTZWMTAxLjVaTTEwMi4xNDcgMTAxLjVIMTAyLjE1NlYxMDBIMTAyLjE0N1YxMDEuNVpNMTAyLjEzNyAxMDEuNUgxMDIuMTQ3VjEwMEgxMDIuMTM3VjEwMS41Wk0xMDIuMTI4IDEwMS41SDEwMi4xMzdWMTAwSDEwMi4xMjhWMTAxLjVaTTEwMi4xMTkgMTAxLjVIMTAyLjEyOFYxMDBIMTAyLjExOVYxMDEuNVpNMTAyLjExIDEwMS41SDEwMi4xMTlWMTAwSDEwMi4xMVYxMDEuNVpNMTAyLjEwMSAxMDEuNUgxMDIuMTFWMTAwSDEwMi4xMDFWMTAxLjVaTTEwMi4wOTEgMTAxLjVIMTAyLjEwMVYxMDBIMTAyLjA5MVYxMDEuNVpNMTAyLjA4MiAxMDEuNUgxMDIuMDkxVjEwMEgxMDIuMDgyVjEwMS41Wk0xMDIuMDczIDEwMS41SDEwMi4wODJWMTAwSDEwMi4wNzNWMTAxLjVaTTEwMi4wNjQgMTAxLjVIMTAyLjA3M1YxMDBIMTAyLjA2NFYxMDEuNVpNMTAyLjA1NSAxMDEuNUgxMDIuMDY0VjEwMEgxMDIuMDU1VjEwMS41Wk0xMDIuMDQ2IDEwMS41SDEwMi4wNTVWMTAwSDEwMi4wNDZWMTAxLjVaTTEwMi4wMzcgMTAxLjVIMTAyLjA0NlYxMDBIMTAyLjAzN1YxMDEuNVpNMTAyLjAyOCAxMDEuNUgxMDIuMDM3VjEwMEgxMDIuMDI4VjEwMS41Wk0xMDIuMDE4IDEwMS41SDEwMi4wMjhWMTAwSDEwMi4wMThWMTAxLjVaTTEwMi4wMDkgMTAxLjVIMTAyLjAxOFYxMDBIMTAyLjAwOVYxMDEuNVpNMTAyIDEwMS41SDEwMi4wMDlWMTAwSDEwMlYxMDEuNVpNMTAxLjk5MSAxMDEuNUgxMDJWMTAwSDEwMS45OTFWMTAxLjVaTTEwMS45ODIgMTAxLjVIMTAxLjk5MVYxMDBIMTAxLjk4MlYxMDEuNVpNMTAxLjk3MyAxMDEuNUgxMDEuOTgyVjEwMEgxMDEuOTczVjEwMS41Wk0xMDEuOTY0IDEwMS41SDEwMS45NzNWMTAwSDEwMS45NjRWMTAxLjVaTTEwMS45NTUgMTAxLjVIMTAxLjk2NFYxMDBIMTAxLjk1NVYxMDEuNVpNMTAxLjk0NiAxMDEuNUgxMDEuOTU1VjEwMEgxMDEuOTQ2VjEwMS41Wk0xMDEuOTM3IDEwMS41SDEwMS45NDZWMTAwSDEwMS45MzdWMTAxLjVaTTEwMS45MjggMTAxLjVIMTAxLjkzN1YxMDBIMTAxLjkyOFYxMDEuNVpNMTAxLjkxOSAxMDEuNUgxMDEuOTI4VjEwMEgxMDEuOTE5VjEwMS41Wk0xMDEuOTEgMTAxLjVIMTAxLjkxOVYxMDBIMTAxLjkxVjEwMS41Wk0xMDEuOTAxIDEwMS41SDEwMS45MVYxMDBIMTAxLjkwMVYxMDEuNVpNMTAxLjg5MiAxMDEuNUgxMDEuOTAxVjEwMEgxMDEuODkyVjEwMS41Wk0xMDEuODg0IDEwMS41SDEwMS44OTJWMTAwSDEwMS44ODRWMTAxLjVaTTEwMS44NzUgMTAxLjVIMTAxLjg4NFYxMDBIMTAxLjg3NVYxMDEuNVpNMTAxLjg2NiAxMDEuNUgxMDEuODc1VjEwMEgxMDEuODY2VjEwMS41Wk0xMDEuODU3IDEwMS41SDEwMS44NjZWMTAwSDEwMS44NTdWMTAxLjVaTTEwMS44NDggMTAxLjVIMTAxLjg1N1YxMDBIMTAxLjg0OFYxMDEuNVpNMTAxLjgzOSAxMDEuNUgxMDEuODQ4VjEwMEgxMDEuODM5VjEwMS41Wk0xMDEuODMgMTAxLjVIMTAxLjgzOVYxMDBIMTAxLjgzVjEwMS41Wk0xMDEuODIxIDEwMS41SDEwMS44M1YxMDBIMTAxLjgyMVYxMDEuNVpNMTAxLjgxMiAxMDEuNUgxMDEuODIxVjEwMEgxMDEuODEyVjEwMS41Wk0xMDEuODA0IDEwMS41SDEwMS44MTJWMTAwSDEwMS44MDRWMTAxLjVaTTEwMS43OTUgMTAxLjVIMTAxLjgwNFYxMDBIMTAxLjc5NVYxMDEuNVpNMTAxLjc4NiAxMDEuNUgxMDEuNzk1VjEwMEgxMDEuNzg2VjEwMS41Wk0xMDEuNzc3IDEwMS41SDEwMS43ODZWMTAwSDEwMS43NzdWMTAxLjVaTTEwMS43NjggMTAxLjVIMTAxLjc3N1YxMDBIMTAxLjc2OFYxMDEuNVpNMTAxLjc2IDEwMS41SDEwMS43NjhWMTAwSDEwMS43NlYxMDEuNVpNMTAxLjc1MSAxMDEuNUgxMDEuNzZWMTAwSDEwMS43NTFWMTAxLjVaTTEwMS43NDIgMTAxLjVIMTAxLjc1MVYxMDBIMTAxLjc0MlYxMDEuNVpNMTAxLjczMyAxMDEuNUgxMDEuNzQyVjEwMEgxMDEuNzMzVjEwMS41Wk0xMDEuNzI1IDEwMS41SDEwMS43MzNWMTAwSDEwMS43MjVWMTAxLjVaTTEwMS43MTYgMTAxLjVIMTAxLjcyNVYxMDBIMTAxLjcxNlYxMDEuNVpNMTAxLjcwNyAxMDEuNUgxMDEuNzE2VjEwMEgxMDEuNzA3VjEwMS41Wk0xMDEuNjk4IDEwMS41SDEwMS43MDdWMTAwSDEwMS42OThWMTAxLjVaTTEwMS42OSAxMDEuNUgxMDEuNjk4VjEwMEgxMDEuNjlWMTAxLjVaTTEwMS42ODEgMTAxLjVIMTAxLjY5VjEwMEgxMDEuNjgxVjEwMS41Wk0xMDEuNjcyIDEwMS41SDEwMS42ODFWMTAwSDEwMS42NzJWMTAxLjVaTTEwMS42NjQgMTAxLjVIMTAxLjY3MlYxMDBIMTAxLjY2NFYxMDEuNVpNMTAxLjY1NSAxMDEuNUgxMDEuNjY0VjEwMEgxMDEuNjU1VjEwMS41Wk0xMDEuNjQ2IDEwMS41SDEwMS42NTVWMTAwSDEwMS42NDZWMTAxLjVaTTEwMS42MzggMTAxLjVIMTAxLjY0NlYxMDBIMTAxLjYzOFYxMDEuNVpNMTAxLjYyOSAxMDEuNUgxMDEuNjM4VjEwMEgxMDEuNjI5VjEwMS41Wk0xMDEuNjIxIDEwMS41SDEwMS42MjlWMTAwSDEwMS42MjFWMTAxLjVaTTEwMS42MTIgMTAxLjVIMTAxLjYyMVYxMDBIMTAxLjYxMlYxMDEuNVpNMTAxLjYwMyAxMDEuNUgxMDEuNjEyVjEwMEgxMDEuNjAzVjEwMS41Wk0xMDEuNTk1IDEwMS41SDEwMS42MDNWMTAwSDEwMS41OTVWMTAxLjVaTTEwMS41ODYgMTAxLjVIMTAxLjU5NVYxMDBIMTAxLjU4NlYxMDEuNVpNMTAxLjU3OCAxMDEuNUgxMDEuNTg2VjEwMEgxMDEuNTc4VjEwMS41Wk0xMDEuNTY5IDEwMS41SDEwMS41NzhWMTAwSDEwMS41NjlWMTAxLjVaTTEwMS41NjEgMTAxLjVIMTAxLjU2OVYxMDBIMTAxLjU2MVYxMDEuNVpNMTAxLjU1MiAxMDEuNUgxMDEuNTYxVjEwMEgxMDEuNTUyVjEwMS41Wk0xMDEuNTQ0IDEwMS41SDEwMS41NTJWMTAwSDEwMS41NDRWMTAxLjVaTTEwMS41MzUgMTAxLjVIMTAxLjU0NFYxMDBIMTAxLjUzNVYxMDEuNVpNMTAxLjUyNyAxMDEuNUgxMDEuNTM1VjEwMEgxMDEuNTI3VjEwMS41Wk0xMDEuNTE4IDEwMS41SDEwMS41MjdWMTAwSDEwMS41MThWMTAxLjVaTTEwMS41MSAxMDEuNUgxMDEuNTE4VjEwMEgxMDEuNTFWMTAxLjVaTTEwMS41MDEgMTAxLjVIMTAxLjUxVjEwMEgxMDEuNTAxVjEwMS41Wk0xMDEuNDkzIDEwMS41SDEwMS41MDFWMTAwSDEwMS40OTNWMTAxLjVaTTEwMS40ODQgMTAxLjVIMTAxLjQ5M1YxMDBIMTAxLjQ4NFYxMDEuNVpNMTAxLjQ3NiAxMDEuNUgxMDEuNDg0VjEwMEgxMDEuNDc2VjEwMS41Wk0xMDEuNDY3IDEwMS41SDEwMS40NzZWMTAwSDEwMS40NjdWMTAxLjVaTTEwMS40NTkgMTAxLjVIMTAxLjQ2N1YxMDBIMTAxLjQ1OVYxMDEuNVpNMTAxLjQ1MSAxMDEuNUgxMDEuNDU5VjEwMEgxMDEuNDUxVjEwMS41Wk0xMDEuNDQyIDEwMS41SDEwMS40NTFWMTAwSDEwMS40NDJWMTAxLjVaTTEwMS40MzQgMTAxLjVIMTAxLjQ0MlYxMDBIMTAxLjQzNFYxMDEuNVpNMTAxLjQyNSAxMDEuNUgxMDEuNDM0VjEwMEgxMDEuNDI1VjEwMS41Wk0xMDEuNDE3IDEwMS41SDEwMS40MjVWMTAwSDEwMS40MTdWMTAxLjVaTTEwMS40MDkgMTAxLjVIMTAxLjQxN1YxMDBIMTAxLjQwOVYxMDEuNVpNMTAxLjQgMTAxLjVIMTAxLjQwOVYxMDBIMTAxLjRWMTAxLjVaTTEwMS4zOTIgMTAxLjVIMTAxLjRWMTAwSDEwMS4zOTJWMTAxLjVaTTEwMS4zODQgMTAxLjVIMTAxLjM5MlYxMDBIMTAxLjM4NFYxMDEuNVpNMTAxLjM3NSAxMDEuNUgxMDEuMzg0VjEwMEgxMDEuMzc1VjEwMS41Wk0xMDEuMzY3IDEwMS41SDEwMS4zNzVWMTAwSDEwMS4zNjdWMTAxLjVaTTEwMS4zNTkgMTAxLjVIMTAxLjM2N1YxMDBIMTAxLjM1OVYxMDEuNVpNMTAxLjM1MSAxMDEuNUgxMDEuMzU5VjEwMEgxMDEuMzUxVjEwMS41Wk0xMDEuMzQyIDEwMS41SDEwMS4zNTFWMTAwSDEwMS4zNDJWMTAxLjVaTTEwMS4zMzQgMTAxLjVIMTAxLjM0MlYxMDBIMTAxLjMzNFYxMDEuNVpNMTAxLjMyNiAxMDEuNUgxMDEuMzM0VjEwMEgxMDEuMzI2VjEwMS41Wk0xMDEuMzE4IDEwMS41SDEwMS4zMjZWMTAwSDEwMS4zMThWMTAxLjVaTTEwMS4zMDkgMTAxLjVIMTAxLjMxOFYxMDBIMTAxLjMwOVYxMDEuNVpNMTAxLjMwMSAxMDEuNUgxMDEuMzA5VjEwMEgxMDEuMzAxVjEwMS41Wk0xMDEuMjkzIDEwMS41SDEwMS4zMDFWMTAwSDEwMS4yOTNWMTAxLjVaTTEwMS4yODUgMTAxLjVIMTAxLjI5M1YxMDBIMTAxLjI4NVYxMDEuNVpNMTAxLjI3NiAxMDEuNUgxMDEuMjg1VjEwMEgxMDEuMjc2VjEwMS41Wk0xMDEuMjY4IDEwMS41SDEwMS4yNzZWMTAwSDEwMS4yNjhWMTAxLjVaTTEwMS4yNiAxMDEuNUgxMDEuMjY4VjEwMEgxMDEuMjZWMTAxLjVaTTEwMS4yNTIgMTAxLjVIMTAxLjI2VjEwMEgxMDEuMjUyVjEwMS41Wk0xMDEuMjQ0IDEwMS41SDEwMS4yNTJWMTAwSDEwMS4yNDRWMTAxLjVaTTEwMS4yMzYgMTAxLjVIMTAxLjI0NFYxMDBIMTAxLjIzNlYxMDEuNVpNMTAxLjIyOCAxMDEuNUgxMDEuMjM2VjEwMEgxMDEuMjI4VjEwMS41Wk0xMDEuMjE5IDEwMS41SDEwMS4yMjhWMTAwSDEwMS4yMTlWMTAxLjVaTTEwMS4yMTEgMTAxLjVIMTAxLjIxOVYxMDBIMTAxLjIxMVYxMDEuNVpNMTAxLjIwMyAxMDEuNUgxMDEuMjExVjEwMEgxMDEuMjAzVjEwMS41Wk0xMDEuMTk1IDEwMS41SDEwMS4yMDNWMTAwSDEwMS4xOTVWMTAxLjVaTTEwMS4xODcgMTAxLjVIMTAxLjE5NVYxMDBIMTAxLjE4N1YxMDEuNVpNMTAxLjE3OSAxMDEuNUgxMDEuMTg3VjEwMEgxMDEuMTc5VjEwMS41Wk0xMDEuMTcxIDEwMS41SDEwMS4xNzlWMTAwSDEwMS4xNzFWMTAxLjVaTTEwMS4xNjMgMTAxLjVIMTAxLjE3MVYxMDBIMTAxLjE2M1YxMDEuNVpNMTAxLjE1NSAxMDEuNUgxMDEuMTYzVjEwMEgxMDEuMTU1VjEwMS41Wk0xMDEuMTQ3IDEwMS41SDEwMS4xNTVWMTAwSDEwMS4xNDdWMTAxLjVaTTEwMS4xMzkgMTAxLjVIMTAxLjE0N1YxMDBIMTAxLjEzOVYxMDEuNVpNMTAxLjEzMSAxMDEuNUgxMDEuMTM5VjEwMEgxMDEuMTMxVjEwMS41Wk0xMDEuMTIzIDEwMS41SDEwMS4xMzFWMTAwSDEwMS4xMjNWMTAxLjVaTTEwMS4xMTUgMTAxLjVIMTAxLjEyM1YxMDBIMTAxLjExNVYxMDEuNVpNMTAxLjEwNyAxMDEuNUgxMDEuMTE1VjEwMEgxMDEuMTA3VjEwMS41Wk0xMDEuMDk5IDEwMS41SDEwMS4xMDdWMTAwSDEwMS4wOTlWMTAxLjVaTTEwMS4wOTEgMTAxLjVIMTAxLjA5OVYxMDBIMTAxLjA5MVYxMDEuNVpNMTAxLjA4MyAxMDEuNUgxMDEuMDkxVjEwMEgxMDEuMDgzVjEwMS41Wk0xMDEuMDc1IDEwMS41SDEwMS4wODNWMTAwSDEwMS4wNzVWMTAxLjVaTTEwMS4wNjcgMTAxLjVIMTAxLjA3NVYxMDBIMTAxLjA2N1YxMDEuNVpNMTAxLjA1OSAxMDEuNUgxMDEuMDY3VjEwMEgxMDEuMDU5VjEwMS41Wk0xMDEuMDUyIDEwMS41SDEwMS4wNTlWMTAwSDEwMS4wNTJWMTAxLjVaTTEwMS4wNDQgMTAxLjVIMTAxLjA1MlYxMDBIMTAxLjA0NFYxMDEuNVpNMTAxLjAzNiAxMDEuNUgxMDEuMDQ0VjEwMEgxMDEuMDM2VjEwMS41Wk0xMDEuMDI4IDEwMS41SDEwMS4wMzZWMTAwSDEwMS4wMjhWMTAxLjVaTTEwMS4wMiAxMDEuNUgxMDEuMDI4VjEwMEgxMDEuMDJWMTAxLjVaTTEwMS4wMTIgMTAxLjVIMTAxLjAyVjEwMEgxMDEuMDEyVjEwMS41Wk0xMDEuMDA0IDEwMS41SDEwMS4wMTJWMTAwSDEwMS4wMDRWMTAxLjVaTTEwMC45OTcgMTAxLjVIMTAxLjAwNFYxMDBIMTAwLjk5N1YxMDEuNVpNMTAwLjk4OSAxMDEuNUgxMDAuOTk3VjEwMEgxMDAuOTg5VjEwMS41Wk0xMDAuOTgxIDEwMS41SDEwMC45ODlWMTAwSDEwMC45ODFWMTAxLjVaTTEwMC45NzMgMTAxLjVIMTAwLjk4MVYxMDBIMTAwLjk3M1YxMDEuNVpNMTAwLjk2NSAxMDEuNUgxMDAuOTczVjEwMEgxMDAuOTY1VjEwMS41Wk0xMDAuOTU4IDEwMS41SDEwMC45NjVWMTAwSDEwMC45NThWMTAxLjVaTTEwMC45NSAxMDEuNUgxMDAuOTU4VjEwMEgxMDAuOTVWMTAxLjVaTTEwMC45NDIgMTAxLjVIMTAwLjk1VjEwMEgxMDAuOTQyVjEwMS41Wk0xMDAuOTM0IDEwMS41SDEwMC45NDJWMTAwSDEwMC45MzRWMTAxLjVaTTEwMC45MjcgMTAxLjVIMTAwLjkzNFYxMDBIMTAwLjkyN1YxMDEuNVpNMTAwLjkxOSAxMDEuNUgxMDAuOTI3VjEwMEgxMDAuOTE5VjEwMS41Wk0xMDAuOTExIDEwMS41SDEwMC45MTlWMTAwSDEwMC45MTFWMTAxLjVaTTEwMC45MDMgMTAxLjVIMTAwLjkxMVYxMDBIMTAwLjkwM1YxMDEuNVpNMTAwLjg5NiAxMDEuNUgxMDAuOTAzVjEwMEgxMDAuODk2VjEwMS41Wk0xMDAuODg4IDEwMS41SDEwMC44OTZWMTAwSDEwMC44ODhWMTAxLjVaTTEwMC44OCAxMDEuNUgxMDAuODg4VjEwMEgxMDAuODhWMTAxLjVaTTEwMC44NzMgMTAxLjVIMTAwLjg4VjEwMEgxMDAuODczVjEwMS41Wk0xMDAuODY1IDEwMS41SDEwMC44NzNWMTAwSDEwMC44NjVWMTAxLjVaTTEwMC44NTggMTAxLjVIMTAwLjg2NVYxMDBIMTAwLjg1OFYxMDEuNVpNMTAwLjg1IDEwMS41SDEwMC44NThWMTAwSDEwMC44NVYxMDEuNVpNMTAwLjg0MiAxMDEuNUgxMDAuODVWMTAwSDEwMC44NDJWMTAxLjVaTTEwMC44MzUgMTAxLjVIMTAwLjg0MlYxMDBIMTAwLjgzNVYxMDEuNVpNMTAwLjgyNyAxMDEuNUgxMDAuODM1VjEwMEgxMDAuODI3VjEwMS41Wk0xMDAuODIgMTAxLjVIMTAwLjgyN1YxMDBIMTAwLjgyVjEwMS41Wk0xMDAuODEyIDEwMS41SDEwMC44MlYxMDBIMTAwLjgxMlYxMDEuNVpNMTAwLjgwNCAxMDEuNUgxMDAuODEyVjEwMEgxMDAuODA0VjEwMS41Wk0xMDAuNzk3IDEwMS41SDEwMC44MDRWMTAwSDEwMC43OTdWMTAxLjVaTTEwMC43ODkgMTAxLjVIMTAwLjc5N1YxMDBIMTAwLjc4OVYxMDEuNVpNMTAwLjc4MiAxMDEuNUgxMDAuNzg5VjEwMEgxMDAuNzgyVjEwMS41Wk0xMDAuNzc0IDEwMS41SDEwMC43ODJWMTAwSDEwMC43NzRWMTAxLjVaTTEwMC43NjcgMTAxLjVIMTAwLjc3NFYxMDBIMTAwLjc2N1YxMDEuNVpNMTAwLjc1OSAxMDEuNUgxMDAuNzY3VjEwMEgxMDAuNzU5VjEwMS41Wk0xMDAuNzUyIDEwMS41SDEwMC43NTlWMTAwSDEwMC43NTJWMTAxLjVaTTEwMC43NDQgMTAxLjVIMTAwLjc1MlYxMDBIMTAwLjc0NFYxMDEuNVpNMTAwLjczNyAxMDEuNUgxMDAuNzQ0VjEwMEgxMDAuNzM3VjEwMS41Wk0xMDAuNzI5IDEwMS41SDEwMC43MzdWMTAwSDEwMC43MjlWMTAxLjVaTTEwMC43MjIgMTAxLjVIMTAwLjcyOVYxMDBIMTAwLjcyMlYxMDEuNVpNMTAwLjcxNCAxMDEuNUgxMDAuNzIyVjEwMEgxMDAuNzE0VjEwMS41Wk0xMDAuNzA3IDEwMS41SDEwMC43MTRWMTAwSDEwMC43MDdWMTAxLjVaTTEwMC43IDEwMS41SDEwMC43MDdWMTAwSDEwMC43VjEwMS41Wk0xMDAuNjkyIDEwMS41SDEwMC43VjEwMEgxMDAuNjkyVjEwMS41Wk0xMDAuNjg1IDEwMS41SDEwMC42OTJWMTAwSDEwMC42ODVWMTAxLjVaTTEwMC42NzcgMTAxLjVIMTAwLjY4NVYxMDBIMTAwLjY3N1YxMDEuNVpNMTAwLjY3IDEwMS41SDEwMC42NzdWMTAwSDEwMC42N1YxMDEuNVpNMTAwLjY2MyAxMDEuNUgxMDAuNjdWMTAwSDEwMC42NjNWMTAxLjVaTTEwMC42NTUgMTAxLjVIMTAwLjY2M1YxMDBIMTAwLjY1NVYxMDEuNVpNMTAwLjY0OCAxMDEuNUgxMDAuNjU1VjEwMEgxMDAuNjQ4VjEwMS41Wk0xMDAuNjQxIDEwMS41SDEwMC42NDhWMTAwSDEwMC42NDFWMTAxLjVaTTEwMC42MzMgMTAxLjVIMTAwLjY0MVYxMDBIMTAwLjYzM1YxMDEuNVpNMTAwLjYyNiAxMDEuNUgxMDAuNjMzVjEwMEgxMDAuNjI2VjEwMS41Wk0xMDAuNjE5IDEwMS41SDEwMC42MjZWMTAwSDEwMC42MTlWMTAxLjVaTTEwMC42MTEgMTAxLjVIMTAwLjYxOVYxMDBIMTAwLjYxMVYxMDEuNVpNMTAwLjYwNCAxMDEuNUgxMDAuNjExVjEwMEgxMDAuNjA0VjEwMS41Wk0xMDAuNTk3IDEwMS41SDEwMC42MDRWMTAwSDEwMC41OTdWMTAxLjVaTTEwMC41OSAxMDEuNUgxMDAuNTk3VjEwMEgxMDAuNTlWMTAxLjVaTTEwMC41ODIgMTAxLjVIMTAwLjU5VjEwMEgxMDAuNTgyVjEwMS41Wk0xMDAuNTc1IDEwMS41SDEwMC41ODJWMTAwSDEwMC41NzVWMTAxLjVaTTEwMC41NjggMTAxLjVIMTAwLjU3NVYxMDBIMTAwLjU2OFYxMDEuNVpNMTAwLjU2MSAxMDEuNUgxMDAuNTY4VjEwMEgxMDAuNTYxVjEwMS41Wk0xMDAuNTUzIDEwMS41SDEwMC41NjFWMTAwSDEwMC41NTNWMTAxLjVaTTEwMC41NDYgMTAxLjVIMTAwLjU1M1YxMDBIMTAwLjU0NlYxMDEuNVpNMTAwLjUzOSAxMDEuNUgxMDAuNTQ2VjEwMEgxMDAuNTM5VjEwMS41Wk0xMDAuNTMyIDEwMS41SDEwMC41MzlWMTAwSDEwMC41MzJWMTAxLjVaTTEwMC41MjUgMTAxLjVIMTAwLjUzMlYxMDBIMTAwLjUyNVYxMDEuNVpNMTAwLjUxOCAxMDEuNUgxMDAuNTI1VjEwMEgxMDAuNTE4VjEwMS41Wk0xMDAuNTEgMTAxLjVIMTAwLjUxOFYxMDBIMTAwLjUxVjEwMS41Wk0xMDAuNTAzIDEwMS41SDEwMC41MVYxMDBIMTAwLjUwM1YxMDEuNVpNMTAwLjQ5NiAxMDEuNUgxMDAuNTAzVjEwMEgxMDAuNDk2VjEwMS41Wk0xMDAuNDg5IDEwMS41SDEwMC40OTZWMTAwSDEwMC40ODlWMTAxLjVaTTEwMC40ODIgMTAxLjVIMTAwLjQ4OVYxMDBIMTAwLjQ4MlYxMDEuNVpNMTAwLjQ3NSAxMDEuNUgxMDAuNDgyVjEwMEgxMDAuNDc1VjEwMS41Wk0xMDAuNDY4IDEwMS41SDEwMC40NzVWMTAwSDEwMC40NjhWMTAxLjVaTTEwMC40NjEgMTAxLjVIMTAwLjQ2OFYxMDBIMTAwLjQ2MVYxMDEuNVpNMTAwLjQ1NCAxMDEuNUgxMDAuNDYxVjEwMEgxMDAuNDU0VjEwMS41Wk0xMDAuNDQ3IDEwMS41SDEwMC40NTRWMTAwSDEwMC40NDdWMTAxLjVaTTEwMC40NCAxMDEuNUgxMDAuNDQ3VjEwMEgxMDAuNDRWMTAxLjVaTTEwMC40MzMgMTAxLjVIMTAwLjQ0VjEwMEgxMDAuNDMzVjEwMS41Wk0xMDAuNDI2IDEwMS41SDEwMC40MzNWMTAwSDEwMC40MjZWMTAxLjVaTTEwMC40MTkgMTAxLjVIMTAwLjQyNlYxMDBIMTAwLjQxOVYxMDEuNVpNMTAwLjQxMiAxMDEuNUgxMDAuNDE5VjEwMEgxMDAuNDEyVjEwMS41Wk0xMDAuNDA1IDEwMS41SDEwMC40MTJWMTAwSDEwMC40MDVWMTAxLjVaTTEwMC4zOTggMTAxLjVIMTAwLjQwNVYxMDBIMTAwLjM5OFYxMDEuNVpNMTAwLjM5MSAxMDEuNUgxMDAuMzk4VjEwMEgxMDAuMzkxVjEwMS41Wk0xMDAuMzg0IDEwMS41SDEwMC4zOTFWMTAwSDEwMC4zODRWMTAxLjVaTTEwMC4zNzcgMTAxLjVIMTAwLjM4NFYxMDBIMTAwLjM3N1YxMDEuNVpNMTAwLjM3IDEwMS41SDEwMC4zNzdWMTAwSDEwMC4zN1YxMDEuNVpNMTAwLjM2MyAxMDEuNUgxMDAuMzdWMTAwSDEwMC4zNjNWMTAxLjVaTTEwMC4zNTYgMTAxLjVIMTAwLjM2M1YxMDBIMTAwLjM1NlYxMDEuNVpNMTAwLjM0OSAxMDEuNUgxMDAuMzU2VjEwMEgxMDAuMzQ5VjEwMS41Wk0xMDAuMzQyIDEwMS41SDEwMC4zNDlWMTAwSDEwMC4zNDJWMTAxLjVaTTEwMC4zMzUgMTAxLjVIMTAwLjM0MlYxMDBIMTAwLjMzNVYxMDEuNVpNMTAwLjMyOCAxMDEuNUgxMDAuMzM1VjEwMEgxMDAuMzI4VjEwMS41Wk0xMDAuMzIxIDEwMS41SDEwMC4zMjhWMTAwSDEwMC4zMjFWMTAxLjVaTTEwMC4zMTUgMTAxLjVIMTAwLjMyMVYxMDBIMTAwLjMxNVYxMDEuNVpNMTAwLjMwOCAxMDEuNUgxMDAuMzE1VjEwMEgxMDAuMzA4VjEwMS41Wk0xMDAuMzAxIDEwMS41SDEwMC4zMDhWMTAwSDEwMC4zMDFWMTAxLjVaTTEwMC4yOTQgMTAxLjVIMTAwLjMwMVYxMDBIMTAwLjI5NFYxMDEuNVpNMTAwLjI4NyAxMDEuNUgxMDAuMjk0VjEwMEgxMDAuMjg3VjEwMS41Wk0xMDAuMjgxIDEwMS41SDEwMC4yODdWMTAwSDEwMC4yODFWMTAxLjVaTTEwMC4yNzQgMTAxLjVIMTAwLjI4MVYxMDBIMTAwLjI3NFYxMDEuNVpNMTAwLjI2NyAxMDEuNUgxMDAuMjc0VjEwMEgxMDAuMjY3VjEwMS41Wk0xMDAuMjYgMTAxLjVIMTAwLjI2N1YxMDBIMTAwLjI2VjEwMS41Wk0xMDAuMjUzIDEwMS41SDEwMC4yNlYxMDBIMTAwLjI1M1YxMDEuNVpNMTAwLjI0NyAxMDEuNUgxMDAuMjUzVjEwMEgxMDAuMjQ3VjEwMS41Wk0xMDAuMjQgMTAxLjVIMTAwLjI0N1YxMDBIMTAwLjI0VjEwMS41Wk0xMDAuMjMzIDEwMS41SDEwMC4yNFYxMDBIMTAwLjIzM1YxMDEuNVpNMTAwLjIyNiAxMDEuNUgxMDAuMjMzVjEwMEgxMDAuMjI2VjEwMS41Wk0xMDAuMjIgMTAxLjVIMTAwLjIyNlYxMDBIMTAwLjIyVjEwMS41Wk0xMDAuMjEzIDEwMS41SDEwMC4yMlYxMDBIMTAwLjIxM1YxMDEuNVpNMTAwLjIwNiAxMDEuNUgxMDAuMjEzVjEwMEgxMDAuMjA2VjEwMS41Wk0xMDAuMiAxMDEuNUgxMDAuMjA2VjEwMEgxMDAuMlYxMDEuNVpNMTAwLjE5MyAxMDEuNUgxMDAuMlYxMDBIMTAwLjE5M1YxMDEuNVpNMTAwLjE4NiAxMDEuNUgxMDAuMTkzVjEwMEgxMDAuMTg2VjEwMS41Wk0xMDAuMTggMTAxLjVIMTAwLjE4NlYxMDBIMTAwLjE4VjEwMS41Wk0xMDAuMTczIDEwMS41SDEwMC4xOFYxMDBIMTAwLjE3M1YxMDEuNVpNMTAwLjE2NyAxMDEuNUgxMDAuMTczVjEwMEgxMDAuMTY3VjEwMS41Wk0xMDAuMTYgMTAxLjVIMTAwLjE2N1YxMDBIMTAwLjE2VjEwMS41Wk0xMDAuMTUzIDEwMS41SDEwMC4xNlYxMDBIMTAwLjE1M1YxMDEuNVpNMTAwLjE0NyAxMDEuNUgxMDAuMTUzVjEwMEgxMDAuMTQ3VjEwMS41Wk0xMDAuMTQgMTAxLjVIMTAwLjE0N1YxMDBIMTAwLjE0VjEwMS41Wk0xMDAuMTM0IDEwMS41SDEwMC4xNFYxMDBIMTAwLjEzNFYxMDEuNVpNMTAwLjEyNyAxMDEuNUgxMDAuMTM0VjEwMEgxMDAuMTI3VjEwMS41Wk0xMDAuMTIgMTAxLjVIMTAwLjEyN1YxMDBIMTAwLjEyVjEwMS41Wk0xMDAuMTE0IDEwMS41SDEwMC4xMlYxMDBIMTAwLjExNFYxMDEuNVpNMTAwLjEwNyAxMDEuNUgxMDAuMTE0VjEwMEgxMDAuMTA3VjEwMS41Wk0xMDAuMTAxIDEwMS41SDEwMC4xMDdWMTAwSDEwMC4xMDFWMTAxLjVaTTEwMC4wOTQgMTAxLjVIMTAwLjEwMVYxMDBIMTAwLjA5NFYxMDEuNVpNMTAwLjA4OCAxMDEuNUgxMDAuMDk0VjEwMEgxMDAuMDg4VjEwMS41Wk0xMDAuMDgxIDEwMS41SDEwMC4wODhWMTAwSDEwMC4wODFWMTAxLjVaTTEwMC4wNzUgMTAxLjVIMTAwLjA4MVYxMDBIMTAwLjA3NVYxMDEuNVpNMTAwLjA2OCAxMDEuNUgxMDAuMDc1VjEwMEgxMDAuMDY4VjEwMS41Wk0xMDAuMDYyIDEwMS41SDEwMC4wNjhWMTAwSDEwMC4wNjJWMTAxLjVaTTEwMC4wNTUgMTAxLjVIMTAwLjA2MlYxMDBIMTAwLjA1NVYxMDEuNVpNMTAwLjA0OSAxMDEuNUgxMDAuMDU1VjEwMEgxMDAuMDQ5VjEwMS41Wk0xMDAuMDQzIDEwMS41SDEwMC4wNDlWMTAwSDEwMC4wNDNWMTAxLjVaTTEwMC4wMzYgMTAxLjVIMTAwLjA0M1YxMDBIMTAwLjAzNlYxMDEuNVpNMTAwLjAzIDEwMS41SDEwMC4wMzZWMTAwSDEwMC4wM1YxMDEuNVpNMTAwLjAyMyAxMDEuNUgxMDAuMDNWMTAwSDEwMC4wMjNWMTAxLjVaTTEwMC4wMTcgMTAxLjVIMTAwLjAyM1YxMDBIMTAwLjAxN1YxMDEuNVpNMTAwLjAxMSAxMDEuNUgxMDAuMDE3VjEwMEgxMDAuMDExVjEwMS41Wk0xMDAuMDA0IDEwMS41SDEwMC4wMTFWMTAwSDEwMC4wMDRWMTAxLjVaTTk5Ljk5NzkgMTAxLjVIMTAwLjAwNFYxMDBIOTkuOTk3OVYxMDEuNVpNOTkuOTkxNiAxMDEuNUg5OS45OTc5VjEwMEg5OS45OTE2VjEwMS41Wk05OS45ODUyIDEwMS41SDk5Ljk5MTZWMTAwSDk5Ljk4NTJWMTAxLjVaTTk5Ljk3ODkgMTAxLjVIOTkuOTg1MlYxMDBIOTkuOTc4OVYxMDEuNVpNOTkuOTcyNiAxMDEuNUg5OS45Nzg5VjEwMEg5OS45NzI2VjEwMS41Wk05OS45NjYzIDEwMS41SDk5Ljk3MjZWMTAwSDk5Ljk2NjNWMTAxLjVaTTk5Ljk2IDEwMS41SDk5Ljk2NjNWMTAwSDk5Ljk2VjEwMS41Wk05OS45NTM3IDEwMS41SDk5Ljk2VjEwMEg5OS45NTM3VjEwMS41Wk05OS45NDc1IDEwMS41SDk5Ljk1MzdWMTAwSDk5Ljk0NzVWMTAxLjVaTTk5Ljk0MTIgMTAxLjVIOTkuOTQ3NVYxMDBIOTkuOTQxMlYxMDEuNVpNOTkuOTM1IDEwMS41SDk5Ljk0MTJWMTAwSDk5LjkzNVYxMDEuNVpNOTkuOTI4NyAxMDEuNUg5OS45MzVWMTAwSDk5LjkyODdWMTAxLjVaTTk5LjkyMjUgMTAxLjVIOTkuOTI4N1YxMDBIOTkuOTIyNVYxMDEuNVpNOTkuOTE2MyAxMDEuNUg5OS45MjI1VjEwMEg5OS45MTYzVjEwMS41Wk05OS45MTAxIDEwMS41SDk5LjkxNjNWMTAwSDk5LjkxMDFWMTAxLjVaTTk5LjkwMzkgMTAxLjVIOTkuOTEwMVYxMDBIOTkuOTAzOVYxMDEuNVpNOTkuODk3NyAxMDEuNUg5OS45MDM5VjEwMEg5OS44OTc3VjEwMS41Wk05OS44OTE1IDEwMS41SDk5Ljg5NzdWMTAwSDk5Ljg5MTVWMTAxLjVaTTk5Ljg4NTMgMTAxLjVIOTkuODkxNVYxMDBIOTkuODg1M1YxMDEuNVpNOTkuODc5MiAxMDEuNUg5OS44ODUzVjEwMEg5OS44NzkyVjEwMS41Wk05OS44NzMgMTAxLjVIOTkuODc5MlYxMDBIOTkuODczVjEwMS41Wk05OS44NjY5IDEwMS41SDk5Ljg3M1YxMDBIOTkuODY2OVYxMDEuNVpNOTkuODYwOCAxMDEuNUg5OS44NjY5VjEwMEg5OS44NjA4VjEwMS41Wk05OS44NTQ3IDEwMS41SDk5Ljg2MDhWMTAwSDk5Ljg1NDdWMTAxLjVaTTk5Ljg0ODYgMTAxLjVIOTkuODU0N1YxMDBIOTkuODQ4NlYxMDEuNVpNOTkuODQyNSAxMDEuNUg5OS44NDg2VjEwMEg5OS44NDI1VjEwMS41Wk05OS44MzY0IDEwMS41SDk5Ljg0MjVWMTAwSDk5LjgzNjRWMTAxLjVaTTk5LjgzMDMgMTAxLjVIOTkuODM2NFYxMDBIOTkuODMwM1YxMDEuNVpNOTkuODI0MiAxMDEuNUg5OS44MzAzVjEwMEg5OS44MjQyVjEwMS41Wk05OS44MTgyIDEwMS41SDk5LjgyNDJWMTAwSDk5LjgxODJWMTAxLjVaTTk5LjgxMjEgMTAxLjVIOTkuODE4MlYxMDBIOTkuODEyMVYxMDEuNVpNOTkuODA2MSAxMDEuNUg5OS44MTIxVjEwMEg5OS44MDYxVjEwMS41Wk05OS44MDAxIDEwMS41SDk5LjgwNjFWMTAwSDk5LjgwMDFWMTAxLjVaTTk5Ljc5NDEgMTAxLjVIOTkuODAwMVYxMDBIOTkuNzk0MVYxMDEuNVpNOTkuNzg4MSAxMDEuNUg5OS43OTQxVjEwMEg5OS43ODgxVjEwMS41Wk05OS43ODIxIDEwMS41SDk5Ljc4ODFWMTAwSDk5Ljc4MjFWMTAxLjVaTTk5Ljc3NjEgMTAxLjVIOTkuNzgyMVYxMDBIOTkuNzc2MVYxMDEuNVpNOTkuNzcwMSAxMDEuNUg5OS43NzYxVjEwMEg5OS43NzAxVjEwMS41Wk05OS43NjQyIDEwMS41SDk5Ljc3MDFWMTAwSDk5Ljc2NDJWMTAxLjVaTTk5Ljc1ODIgMTAxLjVIOTkuNzY0MlYxMDBIOTkuNzU4MlYxMDEuNVpNOTkuNzUyMyAxMDEuNUg5OS43NTgyVjEwMEg5OS43NTIzVjEwMS41Wk05OS43NDY0IDEwMS41SDk5Ljc1MjNWMTAwSDk5Ljc0NjRWMTAxLjVaTTk5Ljc0MDUgMTAxLjVIOTkuNzQ2NFYxMDBIOTkuNzQwNVYxMDEuNVpNOTkuNzM0NiAxMDEuNUg5OS43NDA1VjEwMEg5OS43MzQ2VjEwMS41Wk05OS43Mjg3IDEwMS41SDk5LjczNDZWMTAwSDk5LjcyODdWMTAxLjVaTTk5LjcyMjggMTAxLjVIOTkuNzI4N1YxMDBIOTkuNzIyOFYxMDEuNVpNOTkuNzE2OSAxMDEuNUg5OS43MjI4VjEwMEg5OS43MTY5VjEwMS41Wk05OS43MTEgMTAxLjVIOTkuNzE2OVYxMDBIOTkuNzExVjEwMS41Wk05OS43MDUyIDEwMS41SDk5LjcxMVYxMDBIOTkuNzA1MlYxMDEuNVpNOTkuNjk5MyAxMDEuNUg5OS43MDUyVjEwMEg5OS42OTkzVjEwMS41Wk05OS42OTM1IDEwMS41SDk5LjY5OTNWMTAwSDk5LjY5MzVWMTAxLjVaTTk5LjY4NzcgMTAxLjVIOTkuNjkzNVYxMDBIOTkuNjg3N1YxMDEuNVpNOTkuNjgxOSAxMDEuNUg5OS42ODc3VjEwMEg5OS42ODE5VjEwMS41Wk05OS42NzYxIDEwMS41SDk5LjY4MTlWMTAwSDk5LjY3NjFWMTAxLjVaTTk5LjY3MDMgMTAxLjVIOTkuNjc2MVYxMDBIOTkuNjcwM1YxMDEuNVpNOTkuNjY0NSAxMDEuNUg5OS42NzAzVjEwMEg5OS42NjQ1VjEwMS41Wk05OS42NTg3IDEwMS41SDk5LjY2NDVWMTAwSDk5LjY1ODdWMTAxLjVaTTk5LjY1MyAxMDEuNUg5OS42NTg3VjEwMEg5OS42NTNWMTAxLjVaTTk5LjY0NzIgMTAxLjVIOTkuNjUzVjEwMEg5OS42NDcyVjEwMS41Wk05OS42NDE1IDEwMS41SDk5LjY0NzJWMTAwSDk5LjY0MTVWMTAxLjVaTTk5LjYzNTcgMTAxLjVIOTkuNjQxNVYxMDBIOTkuNjM1N1YxMDEuNVpNOTkuNjMgMTAxLjVIOTkuNjM1N1YxMDBIOTkuNjNWMTAxLjVaTTk5LjYyNDMgMTAxLjVIOTkuNjNWMTAwSDk5LjYyNDNWMTAxLjVaTTk5LjYxODYgMTAxLjVIOTkuNjI0M1YxMDBIOTkuNjE4NlYxMDEuNVpNOTkuNjEyOSAxMDEuNUg5OS42MTg2VjEwMEg5OS42MTI5VjEwMS41Wk05OS42MDcyIDEwMS41SDk5LjYxMjlWMTAwSDk5LjYwNzJWMTAxLjVaTTk5LjYwMTYgMTAxLjVIOTkuNjA3MlYxMDBIOTkuNjAxNlYxMDEuNVpNOTkuNTk1OSAxMDEuNUg5OS42MDE2VjEwMEg5OS41OTU5VjEwMS41Wk05OS41OTAzIDEwMS41SDk5LjU5NTlWMTAwSDk5LjU5MDNWMTAxLjVaTTk5LjU4NDYgMTAxLjVIOTkuNTkwM1YxMDBIOTkuNTg0NlYxMDEuNVpNOTkuNTc5IDEwMS41SDk5LjU4NDZWMTAwSDk5LjU3OVYxMDEuNVpNOTkuNTczNCAxMDEuNUg5OS41NzlWMTAwSDk5LjU3MzRWMTAxLjVaTTk5LjU2NzggMTAxLjVIOTkuNTczNFYxMDBIOTkuNTY3OFYxMDEuNVpNOTkuNTYyMiAxMDEuNUg5OS41Njc4VjEwMEg5OS41NjIyVjEwMS41Wk05OS41NTY2IDEwMS41SDk5LjU2MjJWMTAwSDk5LjU1NjZWMTAxLjVaTTk5LjU1MSAxMDEuNUg5OS41NTY2VjEwMEg5OS41NTFWMTAxLjVaTTk5LjU0NTUgMTAxLjVIOTkuNTUxVjEwMEg5OS41NDU1VjEwMS41Wk05OS41Mzk5IDEwMS41SDk5LjU0NTVWMTAwSDk5LjUzOTlWMTAxLjVaTTk5LjUzNDQgMTAxLjVIOTkuNTM5OVYxMDBIOTkuNTM0NFYxMDEuNVpNOTkuNTI4OSAxMDEuNUg5OS41MzQ0VjEwMEg5OS41Mjg5VjEwMS41Wk05OS41MjMzIDEwMS41SDk5LjUyODlWMTAwSDk5LjUyMzNWMTAxLjVaTTk5LjUxNzggMTAxLjVIOTkuNTIzM1YxMDBIOTkuNTE3OFYxMDEuNVpNOTkuNTEyMyAxMDEuNUg5OS41MTc4VjEwMEg5OS41MTIzVjEwMS41Wk05OS41MDY4IDEwMS41SDk5LjUxMjNWMTAwSDk5LjUwNjhWMTAxLjVaTTk5LjUwMTQgMTAxLjVIOTkuNTA2OFYxMDBIOTkuNTAxNFYxMDEuNVpNOTkuNDk1OSAxMDEuNUg5OS41MDE0VjEwMEg5OS40OTU5VjEwMS41Wk05OS40OTA0IDEwMS41SDk5LjQ5NTlWMTAwSDk5LjQ5MDRWMTAxLjVaTTk5LjQ4NSAxMDEuNUg5OS40OTA0VjEwMEg5OS40ODVWMTAxLjVaTTk5LjQ3OTUgMTAxLjVIOTkuNDg1VjEwMEg5OS40Nzk1VjEwMS41Wk05OS40NzQxIDEwMS41SDk5LjQ3OTVWMTAwSDk5LjQ3NDFWMTAxLjVaTTk5LjQ2ODcgMTAxLjVIOTkuNDc0MVYxMDBIOTkuNDY4N1YxMDEuNVpNOTkuNDYzMyAxMDEuNUg5OS40Njg3VjEwMEg5OS40NjMzVjEwMS41Wk05OS40NTc5IDEwMS41SDk5LjQ2MzNWMTAwSDk5LjQ1NzlWMTAxLjVaTTk5LjQ1MjUgMTAxLjVIOTkuNDU3OVYxMDBIOTkuNDUyNVYxMDEuNVpNOTkuNDQ3MSAxMDEuNUg5OS40NTI1VjEwMEg5OS40NDcxVjEwMS41Wk05OS40NDE4IDEwMS41SDk5LjQ0NzFWMTAwSDk5LjQ0MThWMTAxLjVaTTk5LjQzNjQgMTAxLjVIOTkuNDQxOFYxMDBIOTkuNDM2NFYxMDEuNVpNOTkuNDMxMSAxMDEuNUg5OS40MzY0VjEwMEg5OS40MzExVjEwMS41Wk05OS40MjU3IDEwMS41SDk5LjQzMTFWMTAwSDk5LjQyNTdWMTAxLjVaTTk4LjY3NTcgOTkuMjUwMlYxMDAuNzVIMTAwLjE3NlY5OS4yNTAySDk4LjY3NTdaTTk5LjQzMTEgOTguNTAwMkg5OS40MjU3VjEwMEg5OS40MzExVjk4LjUwMDJaTTk5LjQzNjQgOTguNTAwMkg5OS40MzExVjEwMEg5OS40MzY0Vjk4LjUwMDJaTTk5LjQ0MTggOTguNTAwMkg5OS40MzY0VjEwMEg5OS40NDE4Vjk4LjUwMDJaTTk5LjQ0NzEgOTguNTAwMkg5OS40NDE4VjEwMEg5OS40NDcxVjk4LjUwMDJaTTk5LjQ1MjUgOTguNTAwMkg5OS40NDcxVjEwMEg5OS40NTI1Vjk4LjUwMDJaTTk5LjQ1NzkgOTguNTAwMkg5OS40NTI1VjEwMEg5OS40NTc5Vjk4LjUwMDJaTTk5LjQ2MzMgOTguNTAwMkg5OS40NTc5VjEwMEg5OS40NjMzVjk4LjUwMDJaTTk5LjQ2ODcgOTguNTAwMkg5OS40NjMzVjEwMEg5OS40Njg3Vjk4LjUwMDJaTTk5LjQ3NDEgOTguNTAwMkg5OS40Njg3VjEwMEg5OS40NzQxVjk4LjUwMDJaTTk5LjQ3OTUgOTguNTAwMkg5OS40NzQxVjEwMEg5OS40Nzk1Vjk4LjUwMDJaTTk5LjQ4NSA5OC41MDAySDk5LjQ3OTVWMTAwSDk5LjQ4NVY5OC41MDAyWk05OS40OTA0IDk4LjUwMDJIOTkuNDg1VjEwMEg5OS40OTA0Vjk4LjUwMDJaTTk5LjQ5NTkgOTguNTAwMkg5OS40OTA0VjEwMEg5OS40OTU5Vjk4LjUwMDJaTTk5LjUwMTQgOTguNTAwMkg5OS40OTU5VjEwMEg5OS41MDE0Vjk4LjUwMDJaTTk5LjUwNjggOTguNTAwMkg5OS41MDE0VjEwMEg5OS41MDY4Vjk4LjUwMDJaTTk5LjUxMjMgOTguNTAwMkg5OS41MDY4VjEwMEg5OS41MTIzVjk4LjUwMDJaTTk5LjUxNzggOTguNTAwMkg5OS41MTIzVjEwMEg5OS41MTc4Vjk4LjUwMDJaTTk5LjUyMzMgOTguNTAwMkg5OS41MTc4VjEwMEg5OS41MjMzVjk4LjUwMDJaTTk5LjUyODkgOTguNTAwMkg5OS41MjMzVjEwMEg5OS41Mjg5Vjk4LjUwMDJaTTk5LjUzNDQgOTguNTAwMkg5OS41Mjg5VjEwMEg5OS41MzQ0Vjk4LjUwMDJaTTk5LjUzOTkgOTguNTAwMkg5OS41MzQ0VjEwMEg5OS41Mzk5Vjk4LjUwMDJaTTk5LjU0NTUgOTguNTAwMkg5OS41Mzk5VjEwMEg5OS41NDU1Vjk4LjUwMDJaTTk5LjU1MSA5OC41MDAySDk5LjU0NTVWMTAwSDk5LjU1MVY5OC41MDAyWk05OS41NTY2IDk4LjUwMDJIOTkuNTUxVjEwMEg5OS41NTY2Vjk4LjUwMDJaTTk5LjU2MjIgOTguNTAwMkg5OS41NTY2VjEwMEg5OS41NjIyVjk4LjUwMDJaTTk5LjU2NzggOTguNTAwMkg5OS41NjIyVjEwMEg5OS41Njc4Vjk4LjUwMDJaTTk5LjU3MzQgOTguNTAwMkg5OS41Njc4VjEwMEg5OS41NzM0Vjk4LjUwMDJaTTk5LjU3OSA5OC41MDAySDk5LjU3MzRWMTAwSDk5LjU3OVY5OC41MDAyWk05OS41ODQ2IDk4LjUwMDJIOTkuNTc5VjEwMEg5OS41ODQ2Vjk4LjUwMDJaTTk5LjU5MDMgOTguNTAwMkg5OS41ODQ2VjEwMEg5OS41OTAzVjk4LjUwMDJaTTk5LjU5NTkgOTguNTAwMkg5OS41OTAzVjEwMEg5OS41OTU5Vjk4LjUwMDJaTTk5LjYwMTYgOTguNTAwMkg5OS41OTU5VjEwMEg5OS42MDE2Vjk4LjUwMDJaTTk5LjYwNzIgOTguNTAwMkg5OS42MDE2VjEwMEg5OS42MDcyVjk4LjUwMDJaTTk5LjYxMjkgOTguNTAwMkg5OS42MDcyVjEwMEg5OS42MTI5Vjk4LjUwMDJaTTk5LjYxODYgOTguNTAwMkg5OS42MTI5VjEwMEg5OS42MTg2Vjk4LjUwMDJaTTk5LjYyNDMgOTguNTAwMkg5OS42MTg2VjEwMEg5OS42MjQzVjk4LjUwMDJaTTk5LjYzIDk4LjUwMDJIOTkuNjI0M1YxMDBIOTkuNjNWOTguNTAwMlpNOTkuNjM1NyA5OC41MDAySDk5LjYzVjEwMEg5OS42MzU3Vjk4LjUwMDJaTTk5LjY0MTUgOTguNTAwMkg5OS42MzU3VjEwMEg5OS42NDE1Vjk4LjUwMDJaTTk5LjY0NzIgOTguNTAwMkg5OS42NDE1VjEwMEg5OS42NDcyVjk4LjUwMDJaTTk5LjY1MyA5OC41MDAySDk5LjY0NzJWMTAwSDk5LjY1M1Y5OC41MDAyWk05OS42NTg3IDk4LjUwMDJIOTkuNjUzVjEwMEg5OS42NTg3Vjk4LjUwMDJaTTk5LjY2NDUgOTguNTAwMkg5OS42NTg3VjEwMEg5OS42NjQ1Vjk4LjUwMDJaTTk5LjY3MDMgOTguNTAwMkg5OS42NjQ1VjEwMEg5OS42NzAzVjk4LjUwMDJaTTk5LjY3NjEgOTguNTAwMkg5OS42NzAzVjEwMEg5OS42NzYxVjk4LjUwMDJaTTk5LjY4MTkgOTguNTAwMkg5OS42NzYxVjEwMEg5OS42ODE5Vjk4LjUwMDJaTTk5LjY4NzcgOTguNTAwMkg5OS42ODE5VjEwMEg5OS42ODc3Vjk4LjUwMDJaTTk5LjY5MzUgOTguNTAwMkg5OS42ODc3VjEwMEg5OS42OTM1Vjk4LjUwMDJaTTk5LjY5OTMgOTguNTAwMkg5OS42OTM1VjEwMEg5OS42OTkzVjk4LjUwMDJaTTk5LjcwNTIgOTguNTAwMkg5OS42OTkzVjEwMEg5OS43MDUyVjk4LjUwMDJaTTk5LjcxMSA5OC41MDAySDk5LjcwNTJWMTAwSDk5LjcxMVY5OC41MDAyWk05OS43MTY5IDk4LjUwMDJIOTkuNzExVjEwMEg5OS43MTY5Vjk4LjUwMDJaTTk5LjcyMjggOTguNTAwMkg5OS43MTY5VjEwMEg5OS43MjI4Vjk4LjUwMDJaTTk5LjcyODcgOTguNTAwMkg5OS43MjI4VjEwMEg5OS43Mjg3Vjk4LjUwMDJaTTk5LjczNDYgOTguNTAwMkg5OS43Mjg3VjEwMEg5OS43MzQ2Vjk4LjUwMDJaTTk5Ljc0MDUgOTguNTAwMkg5OS43MzQ2VjEwMEg5OS43NDA1Vjk4LjUwMDJaTTk5Ljc0NjQgOTguNTAwMkg5OS43NDA1VjEwMEg5OS43NDY0Vjk4LjUwMDJaTTk5Ljc1MjMgOTguNTAwMkg5OS43NDY0VjEwMEg5OS43NTIzVjk4LjUwMDJaTTk5Ljc1ODIgOTguNTAwMkg5OS43NTIzVjEwMEg5OS43NTgyVjk4LjUwMDJaTTk5Ljc2NDIgOTguNTAwMkg5OS43NTgyVjEwMEg5OS43NjQyVjk4LjUwMDJaTTk5Ljc3MDEgOTguNTAwMkg5OS43NjQyVjEwMEg5OS43NzAxVjk4LjUwMDJaTTk5Ljc3NjEgOTguNTAwMkg5OS43NzAxVjEwMEg5OS43NzYxVjk4LjUwMDJaTTk5Ljc4MjEgOTguNTAwMkg5OS43NzYxVjEwMEg5OS43ODIxVjk4LjUwMDJaTTk5Ljc4ODEgOTguNTAwMkg5OS43ODIxVjEwMEg5OS43ODgxVjk4LjUwMDJaTTk5Ljc5NDEgOTguNTAwMkg5OS43ODgxVjEwMEg5OS43OTQxVjk4LjUwMDJaTTk5LjgwMDEgOTguNTAwMkg5OS43OTQxVjEwMEg5OS44MDAxVjk4LjUwMDJaTTk5LjgwNjEgOTguNTAwMkg5OS44MDAxVjEwMEg5OS44MDYxVjk4LjUwMDJaTTk5LjgxMjEgOTguNTAwMkg5OS44MDYxVjEwMEg5OS44MTIxVjk4LjUwMDJaTTk5LjgxODIgOTguNTAwMkg5OS44MTIxVjEwMEg5OS44MTgyVjk4LjUwMDJaTTk5LjgyNDIgOTguNTAwMkg5OS44MTgyVjEwMEg5OS44MjQyVjk4LjUwMDJaTTk5LjgzMDMgOTguNTAwMkg5OS44MjQyVjEwMEg5OS44MzAzVjk4LjUwMDJaTTk5LjgzNjQgOTguNTAwMkg5OS44MzAzVjEwMEg5OS44MzY0Vjk4LjUwMDJaTTk5Ljg0MjUgOTguNTAwMkg5OS44MzY0VjEwMEg5OS44NDI1Vjk4LjUwMDJaTTk5Ljg0ODYgOTguNTAwMkg5OS44NDI1VjEwMEg5OS44NDg2Vjk4LjUwMDJaTTk5Ljg1NDcgOTguNTAwMkg5OS44NDg2VjEwMEg5OS44NTQ3Vjk4LjUwMDJaTTk5Ljg2MDggOTguNTAwMkg5OS44NTQ3VjEwMEg5OS44NjA4Vjk4LjUwMDJaTTk5Ljg2NjkgOTguNTAwMkg5OS44NjA4VjEwMEg5OS44NjY5Vjk4LjUwMDJaTTk5Ljg3MyA5OC41MDAySDk5Ljg2NjlWMTAwSDk5Ljg3M1Y5OC41MDAyWk05OS44NzkyIDk4LjUwMDJIOTkuODczVjEwMEg5OS44NzkyVjk4LjUwMDJaTTk5Ljg4NTMgOTguNTAwMkg5OS44NzkyVjEwMEg5OS44ODUzVjk4LjUwMDJaTTk5Ljg5MTUgOTguNTAwMkg5OS44ODUzVjEwMEg5OS44OTE1Vjk4LjUwMDJaTTk5Ljg5NzcgOTguNTAwMkg5OS44OTE1VjEwMEg5OS44OTc3Vjk4LjUwMDJaTTk5LjkwMzkgOTguNTAwMkg5OS44OTc3VjEwMEg5OS45MDM5Vjk4LjUwMDJaTTk5LjkxMDEgOTguNTAwMkg5OS45MDM5VjEwMEg5OS45MTAxVjk4LjUwMDJaTTk5LjkxNjMgOTguNTAwMkg5OS45MTAxVjEwMEg5OS45MTYzVjk4LjUwMDJaTTk5LjkyMjUgOTguNTAwMkg5OS45MTYzVjEwMEg5OS45MjI1Vjk4LjUwMDJaTTk5LjkyODcgOTguNTAwMkg5OS45MjI1VjEwMEg5OS45Mjg3Vjk4LjUwMDJaTTk5LjkzNSA5OC41MDAySDk5LjkyODdWMTAwSDk5LjkzNVY5OC41MDAyWk05OS45NDEyIDk4LjUwMDJIOTkuOTM1VjEwMEg5OS45NDEyVjk4LjUwMDJaTTk5Ljk0NzUgOTguNTAwMkg5OS45NDEyVjEwMEg5OS45NDc1Vjk4LjUwMDJaTTk5Ljk1MzcgOTguNTAwMkg5OS45NDc1VjEwMEg5OS45NTM3Vjk4LjUwMDJaTTk5Ljk2IDk4LjUwMDJIOTkuOTUzN1YxMDBIOTkuOTZWOTguNTAwMlpNOTkuOTY2MyA5OC41MDAySDk5Ljk2VjEwMEg5OS45NjYzVjk4LjUwMDJaTTk5Ljk3MjYgOTguNTAwMkg5OS45NjYzVjEwMEg5OS45NzI2Vjk4LjUwMDJaTTk5Ljk3ODkgOTguNTAwMkg5OS45NzI2VjEwMEg5OS45Nzg5Vjk4LjUwMDJaTTk5Ljk4NTIgOTguNTAwMkg5OS45Nzg5VjEwMEg5OS45ODUyVjk4LjUwMDJaTTk5Ljk5MTYgOTguNTAwMkg5OS45ODUyVjEwMEg5OS45OTE2Vjk4LjUwMDJaTTk5Ljk5NzkgOTguNTAwMkg5OS45OTE2VjEwMEg5OS45OTc5Vjk4LjUwMDJaTTEwMC4wMDQgOTguNTAwMkg5OS45OTc5VjEwMEgxMDAuMDA0Vjk4LjUwMDJaTTEwMC4wMTEgOTguNTAwMkgxMDAuMDA0VjEwMEgxMDAuMDExVjk4LjUwMDJaTTEwMC4wMTcgOTguNTAwMkgxMDAuMDExVjEwMEgxMDAuMDE3Vjk4LjUwMDJaTTEwMC4wMjMgOTguNTAwMkgxMDAuMDE3VjEwMEgxMDAuMDIzVjk4LjUwMDJaTTEwMC4wMyA5OC41MDAySDEwMC4wMjNWMTAwSDEwMC4wM1Y5OC41MDAyWk0xMDAuMDM2IDk4LjUwMDJIMTAwLjAzVjEwMEgxMDAuMDM2Vjk4LjUwMDJaTTEwMC4wNDMgOTguNTAwMkgxMDAuMDM2VjEwMEgxMDAuMDQzVjk4LjUwMDJaTTEwMC4wNDkgOTguNTAwMkgxMDAuMDQzVjEwMEgxMDAuMDQ5Vjk4LjUwMDJaTTEwMC4wNTUgOTguNTAwMkgxMDAuMDQ5VjEwMEgxMDAuMDU1Vjk4LjUwMDJaTTEwMC4wNjIgOTguNTAwMkgxMDAuMDU1VjEwMEgxMDAuMDYyVjk4LjUwMDJaTTEwMC4wNjggOTguNTAwMkgxMDAuMDYyVjEwMEgxMDAuMDY4Vjk4LjUwMDJaTTEwMC4wNzUgOTguNTAwMkgxMDAuMDY4VjEwMEgxMDAuMDc1Vjk4LjUwMDJaTTEwMC4wODEgOTguNTAwMkgxMDAuMDc1VjEwMEgxMDAuMDgxVjk4LjUwMDJaTTEwMC4wODggOTguNTAwMkgxMDAuMDgxVjEwMEgxMDAuMDg4Vjk4LjUwMDJaTTEwMC4wOTQgOTguNTAwMkgxMDAuMDg4VjEwMEgxMDAuMDk0Vjk4LjUwMDJaTTEwMC4xMDEgOTguNTAwMkgxMDAuMDk0VjEwMEgxMDAuMTAxVjk4LjUwMDJaTTEwMC4xMDcgOTguNTAwMkgxMDAuMTAxVjEwMEgxMDAuMTA3Vjk4LjUwMDJaTTEwMC4xMTQgOTguNTAwMkgxMDAuMTA3VjEwMEgxMDAuMTE0Vjk4LjUwMDJaTTEwMC4xMiA5OC41MDAySDEwMC4xMTRWMTAwSDEwMC4xMlY5OC41MDAyWk0xMDAuMTI3IDk4LjUwMDJIMTAwLjEyVjEwMEgxMDAuMTI3Vjk4LjUwMDJaTTEwMC4xMzQgOTguNTAwMkgxMDAuMTI3VjEwMEgxMDAuMTM0Vjk4LjUwMDJaTTEwMC4xNCA5OC41MDAySDEwMC4xMzRWMTAwSDEwMC4xNFY5OC41MDAyWk0xMDAuMTQ3IDk4LjUwMDJIMTAwLjE0VjEwMEgxMDAuMTQ3Vjk4LjUwMDJaTTEwMC4xNTMgOTguNTAwMkgxMDAuMTQ3VjEwMEgxMDAuMTUzVjk4LjUwMDJaTTEwMC4xNiA5OC41MDAySDEwMC4xNTNWMTAwSDEwMC4xNlY5OC41MDAyWk0xMDAuMTY3IDk4LjUwMDJIMTAwLjE2VjEwMEgxMDAuMTY3Vjk4LjUwMDJaTTEwMC4xNzMgOTguNTAwMkgxMDAuMTY3VjEwMEgxMDAuMTczVjk4LjUwMDJaTTEwMC4xOCA5OC41MDAySDEwMC4xNzNWMTAwSDEwMC4xOFY5OC41MDAyWk0xMDAuMTg2IDk4LjUwMDJIMTAwLjE4VjEwMEgxMDAuMTg2Vjk4LjUwMDJaTTEwMC4xOTMgOTguNTAwMkgxMDAuMTg2VjEwMEgxMDAuMTkzVjk4LjUwMDJaTTEwMC4yIDk4LjUwMDJIMTAwLjE5M1YxMDBIMTAwLjJWOTguNTAwMlpNMTAwLjIwNiA5OC41MDAySDEwMC4yVjEwMEgxMDAuMjA2Vjk4LjUwMDJaTTEwMC4yMTMgOTguNTAwMkgxMDAuMjA2VjEwMEgxMDAuMjEzVjk4LjUwMDJaTTEwMC4yMiA5OC41MDAySDEwMC4yMTNWMTAwSDEwMC4yMlY5OC41MDAyWk0xMDAuMjI2IDk4LjUwMDJIMTAwLjIyVjEwMEgxMDAuMjI2Vjk4LjUwMDJaTTEwMC4yMzMgOTguNTAwMkgxMDAuMjI2VjEwMEgxMDAuMjMzVjk4LjUwMDJaTTEwMC4yNCA5OC41MDAySDEwMC4yMzNWMTAwSDEwMC4yNFY5OC41MDAyWk0xMDAuMjQ3IDk4LjUwMDJIMTAwLjI0VjEwMEgxMDAuMjQ3Vjk4LjUwMDJaTTEwMC4yNTMgOTguNTAwMkgxMDAuMjQ3VjEwMEgxMDAuMjUzVjk4LjUwMDJaTTEwMC4yNiA5OC41MDAySDEwMC4yNTNWMTAwSDEwMC4yNlY5OC41MDAyWk0xMDAuMjY3IDk4LjUwMDJIMTAwLjI2VjEwMEgxMDAuMjY3Vjk4LjUwMDJaTTEwMC4yNzQgOTguNTAwMkgxMDAuMjY3VjEwMEgxMDAuMjc0Vjk4LjUwMDJaTTEwMC4yODEgOTguNTAwMkgxMDAuMjc0VjEwMEgxMDAuMjgxVjk4LjUwMDJaTTEwMC4yODcgOTguNTAwMkgxMDAuMjgxVjEwMEgxMDAuMjg3Vjk4LjUwMDJaTTEwMC4yOTQgOTguNTAwMkgxMDAuMjg3VjEwMEgxMDAuMjk0Vjk4LjUwMDJaTTEwMC4zMDEgOTguNTAwMkgxMDAuMjk0VjEwMEgxMDAuMzAxVjk4LjUwMDJaTTEwMC4zMDggOTguNTAwMkgxMDAuMzAxVjEwMEgxMDAuMzA4Vjk4LjUwMDJaTTEwMC4zMTUgOTguNTAwMkgxMDAuMzA4VjEwMEgxMDAuMzE1Vjk4LjUwMDJaTTEwMC4zMjEgOTguNTAwMkgxMDAuMzE1VjEwMEgxMDAuMzIxVjk4LjUwMDJaTTEwMC4zMjggOTguNTAwMkgxMDAuMzIxVjEwMEgxMDAuMzI4Vjk4LjUwMDJaTTEwMC4zMzUgOTguNTAwMkgxMDAuMzI4VjEwMEgxMDAuMzM1Vjk4LjUwMDJaTTEwMC4zNDIgOTguNTAwMkgxMDAuMzM1VjEwMEgxMDAuMzQyVjk4LjUwMDJaTTEwMC4zNDkgOTguNTAwMkgxMDAuMzQyVjEwMEgxMDAuMzQ5Vjk4LjUwMDJaTTEwMC4zNTYgOTguNTAwMkgxMDAuMzQ5VjEwMEgxMDAuMzU2Vjk4LjUwMDJaTTEwMC4zNjMgOTguNTAwMkgxMDAuMzU2VjEwMEgxMDAuMzYzVjk4LjUwMDJaTTEwMC4zNyA5OC41MDAySDEwMC4zNjNWMTAwSDEwMC4zN1Y5OC41MDAyWk0xMDAuMzc3IDk4LjUwMDJIMTAwLjM3VjEwMEgxMDAuMzc3Vjk4LjUwMDJaTTEwMC4zODQgOTguNTAwMkgxMDAuMzc3VjEwMEgxMDAuMzg0Vjk4LjUwMDJaTTEwMC4zOTEgOTguNTAwMkgxMDAuMzg0VjEwMEgxMDAuMzkxVjk4LjUwMDJaTTEwMC4zOTggOTguNTAwMkgxMDAuMzkxVjEwMEgxMDAuMzk4Vjk4LjUwMDJaTTEwMC40MDUgOTguNTAwMkgxMDAuMzk4VjEwMEgxMDAuNDA1Vjk4LjUwMDJaTTEwMC40MTIgOTguNTAwMkgxMDAuNDA1VjEwMEgxMDAuNDEyVjk4LjUwMDJaTTEwMC40MTkgOTguNTAwMkgxMDAuNDEyVjEwMEgxMDAuNDE5Vjk4LjUwMDJaTTEwMC40MjYgOTguNTAwMkgxMDAuNDE5VjEwMEgxMDAuNDI2Vjk4LjUwMDJaTTEwMC40MzMgOTguNTAwMkgxMDAuNDI2VjEwMEgxMDAuNDMzVjk4LjUwMDJaTTEwMC40NCA5OC41MDAySDEwMC40MzNWMTAwSDEwMC40NFY5OC41MDAyWk0xMDAuNDQ3IDk4LjUwMDJIMTAwLjQ0VjEwMEgxMDAuNDQ3Vjk4LjUwMDJaTTEwMC40NTQgOTguNTAwMkgxMDAuNDQ3VjEwMEgxMDAuNDU0Vjk4LjUwMDJaTTEwMC40NjEgOTguNTAwMkgxMDAuNDU0VjEwMEgxMDAuNDYxVjk4LjUwMDJaTTEwMC40NjggOTguNTAwMkgxMDAuNDYxVjEwMEgxMDAuNDY4Vjk4LjUwMDJaTTEwMC40NzUgOTguNTAwMkgxMDAuNDY4VjEwMEgxMDAuNDc1Vjk4LjUwMDJaTTEwMC40ODIgOTguNTAwMkgxMDAuNDc1VjEwMEgxMDAuNDgyVjk4LjUwMDJaTTEwMC40ODkgOTguNTAwMkgxMDAuNDgyVjEwMEgxMDAuNDg5Vjk4LjUwMDJaTTEwMC40OTYgOTguNTAwMkgxMDAuNDg5VjEwMEgxMDAuNDk2Vjk4LjUwMDJaTTEwMC41MDMgOTguNTAwMkgxMDAuNDk2VjEwMEgxMDAuNTAzVjk4LjUwMDJaTTEwMC41MSA5OC41MDAySDEwMC41MDNWMTAwSDEwMC41MVY5OC41MDAyWk0xMDAuNTE4IDk4LjUwMDJIMTAwLjUxVjEwMEgxMDAuNTE4Vjk4LjUwMDJaTTEwMC41MjUgOTguNTAwMkgxMDAuNTE4VjEwMEgxMDAuNTI1Vjk4LjUwMDJaTTEwMC41MzIgOTguNTAwMkgxMDAuNTI1VjEwMEgxMDAuNTMyVjk4LjUwMDJaTTEwMC41MzkgOTguNTAwMkgxMDAuNTMyVjEwMEgxMDAuNTM5Vjk4LjUwMDJaTTEwMC41NDYgOTguNTAwMkgxMDAuNTM5VjEwMEgxMDAuNTQ2Vjk4LjUwMDJaTTEwMC41NTMgOTguNTAwMkgxMDAuNTQ2VjEwMEgxMDAuNTUzVjk4LjUwMDJaTTEwMC41NjEgOTguNTAwMkgxMDAuNTUzVjEwMEgxMDAuNTYxVjk4LjUwMDJaTTEwMC41NjggOTguNTAwMkgxMDAuNTYxVjEwMEgxMDAuNTY4Vjk4LjUwMDJaTTEwMC41NzUgOTguNTAwMkgxMDAuNTY4VjEwMEgxMDAuNTc1Vjk4LjUwMDJaTTEwMC41ODIgOTguNTAwMkgxMDAuNTc1VjEwMEgxMDAuNTgyVjk4LjUwMDJaTTEwMC41OSA5OC41MDAySDEwMC41ODJWMTAwSDEwMC41OVY5OC41MDAyWk0xMDAuNTk3IDk4LjUwMDJIMTAwLjU5VjEwMEgxMDAuNTk3Vjk4LjUwMDJaTTEwMC42MDQgOTguNTAwMkgxMDAuNTk3VjEwMEgxMDAuNjA0Vjk4LjUwMDJaTTEwMC42MTEgOTguNTAwMkgxMDAuNjA0VjEwMEgxMDAuNjExVjk4LjUwMDJaTTEwMC42MTkgOTguNTAwMkgxMDAuNjExVjEwMEgxMDAuNjE5Vjk4LjUwMDJaTTEwMC42MjYgOTguNTAwMkgxMDAuNjE5VjEwMEgxMDAuNjI2Vjk4LjUwMDJaTTEwMC42MzMgOTguNTAwMkgxMDAuNjI2VjEwMEgxMDAuNjMzVjk4LjUwMDJaTTEwMC42NDEgOTguNTAwMkgxMDAuNjMzVjEwMEgxMDAuNjQxVjk4LjUwMDJaTTEwMC42NDggOTguNTAwMkgxMDAuNjQxVjEwMEgxMDAuNjQ4Vjk4LjUwMDJaTTEwMC42NTUgOTguNTAwMkgxMDAuNjQ4VjEwMEgxMDAuNjU1Vjk4LjUwMDJaTTEwMC42NjMgOTguNTAwMkgxMDAuNjU1VjEwMEgxMDAuNjYzVjk4LjUwMDJaTTEwMC42NyA5OC41MDAySDEwMC42NjNWMTAwSDEwMC42N1Y5OC41MDAyWk0xMDAuNjc3IDk4LjUwMDJIMTAwLjY3VjEwMEgxMDAuNjc3Vjk4LjUwMDJaTTEwMC42ODUgOTguNTAwMkgxMDAuNjc3VjEwMEgxMDAuNjg1Vjk4LjUwMDJaTTEwMC42OTIgOTguNTAwMkgxMDAuNjg1VjEwMEgxMDAuNjkyVjk4LjUwMDJaTTEwMC43IDk4LjUwMDJIMTAwLjY5MlYxMDBIMTAwLjdWOTguNTAwMlpNMTAwLjcwNyA5OC41MDAySDEwMC43VjEwMEgxMDAuNzA3Vjk4LjUwMDJaTTEwMC43MTQgOTguNTAwMkgxMDAuNzA3VjEwMEgxMDAuNzE0Vjk4LjUwMDJaTTEwMC43MjIgOTguNTAwMkgxMDAuNzE0VjEwMEgxMDAuNzIyVjk4LjUwMDJaTTEwMC43MjkgOTguNTAwMkgxMDAuNzIyVjEwMEgxMDAuNzI5Vjk4LjUwMDJaTTEwMC43MzcgOTguNTAwMkgxMDAuNzI5VjEwMEgxMDAuNzM3Vjk4LjUwMDJaTTEwMC43NDQgOTguNTAwMkgxMDAuNzM3VjEwMEgxMDAuNzQ0Vjk4LjUwMDJaTTEwMC43NTIgOTguNTAwMkgxMDAuNzQ0VjEwMEgxMDAuNzUyVjk4LjUwMDJaTTEwMC43NTkgOTguNTAwMkgxMDAuNzUyVjEwMEgxMDAuNzU5Vjk4LjUwMDJaTTEwMC43NjcgOTguNTAwMkgxMDAuNzU5VjEwMEgxMDAuNzY3Vjk4LjUwMDJaTTEwMC43NzQgOTguNTAwMkgxMDAuNzY3VjEwMEgxMDAuNzc0Vjk4LjUwMDJaTTEwMC43ODIgOTguNTAwMkgxMDAuNzc0VjEwMEgxMDAuNzgyVjk4LjUwMDJaTTEwMC43ODkgOTguNTAwMkgxMDAuNzgyVjEwMEgxMDAuNzg5Vjk4LjUwMDJaTTEwMC43OTcgOTguNTAwMkgxMDAuNzg5VjEwMEgxMDAuNzk3Vjk4LjUwMDJaTTEwMC44MDQgOTguNTAwMkgxMDAuNzk3VjEwMEgxMDAuODA0Vjk4LjUwMDJaTTEwMC44MTIgOTguNTAwMkgxMDAuODA0VjEwMEgxMDAuODEyVjk4LjUwMDJaTTEwMC44MiA5OC41MDAySDEwMC44MTJWMTAwSDEwMC44MlY5OC41MDAyWk0xMDAuODI3IDk4LjUwMDJIMTAwLjgyVjEwMEgxMDAuODI3Vjk4LjUwMDJaTTEwMC44MzUgOTguNTAwMkgxMDAuODI3VjEwMEgxMDAuODM1Vjk4LjUwMDJaTTEwMC44NDIgOTguNTAwMkgxMDAuODM1VjEwMEgxMDAuODQyVjk4LjUwMDJaTTEwMC44NSA5OC41MDAySDEwMC44NDJWMTAwSDEwMC44NVY5OC41MDAyWk0xMDAuODU4IDk4LjUwMDJIMTAwLjg1VjEwMEgxMDAuODU4Vjk4LjUwMDJaTTEwMC44NjUgOTguNTAwMkgxMDAuODU4VjEwMEgxMDAuODY1Vjk4LjUwMDJaTTEwMC44NzMgOTguNTAwMkgxMDAuODY1VjEwMEgxMDAuODczVjk4LjUwMDJaTTEwMC44OCA5OC41MDAySDEwMC44NzNWMTAwSDEwMC44OFY5OC41MDAyWk0xMDAuODg4IDk4LjUwMDJIMTAwLjg4VjEwMEgxMDAuODg4Vjk4LjUwMDJaTTEwMC44OTYgOTguNTAwMkgxMDAuODg4VjEwMEgxMDAuODk2Vjk4LjUwMDJaTTEwMC45MDMgOTguNTAwMkgxMDAuODk2VjEwMEgxMDAuOTAzVjk4LjUwMDJaTTEwMC45MTEgOTguNTAwMkgxMDAuOTAzVjEwMEgxMDAuOTExVjk4LjUwMDJaTTEwMC45MTkgOTguNTAwMkgxMDAuOTExVjEwMEgxMDAuOTE5Vjk4LjUwMDJaTTEwMC45MjcgOTguNTAwMkgxMDAuOTE5VjEwMEgxMDAuOTI3Vjk4LjUwMDJaTTEwMC45MzQgOTguNTAwMkgxMDAuOTI3VjEwMEgxMDAuOTM0Vjk4LjUwMDJaTTEwMC45NDIgOTguNTAwMkgxMDAuOTM0VjEwMEgxMDAuOTQyVjk4LjUwMDJaTTEwMC45NSA5OC41MDAySDEwMC45NDJWMTAwSDEwMC45NVY5OC41MDAyWk0xMDAuOTU4IDk4LjUwMDJIMTAwLjk1VjEwMEgxMDAuOTU4Vjk4LjUwMDJaTTEwMC45NjUgOTguNTAwMkgxMDAuOTU4VjEwMEgxMDAuOTY1Vjk4LjUwMDJaTTEwMC45NzMgOTguNTAwMkgxMDAuOTY1VjEwMEgxMDAuOTczVjk4LjUwMDJaTTEwMC45ODEgOTguNTAwMkgxMDAuOTczVjEwMEgxMDAuOTgxVjk4LjUwMDJaTTEwMC45ODkgOTguNTAwMkgxMDAuOTgxVjEwMEgxMDAuOTg5Vjk4LjUwMDJaTTEwMC45OTcgOTguNTAwMkgxMDAuOTg5VjEwMEgxMDAuOTk3Vjk4LjUwMDJaTTEwMS4wMDQgOTguNTAwMkgxMDAuOTk3VjEwMEgxMDEuMDA0Vjk4LjUwMDJaTTEwMS4wMTIgOTguNTAwMkgxMDEuMDA0VjEwMEgxMDEuMDEyVjk4LjUwMDJaTTEwMS4wMiA5OC41MDAySDEwMS4wMTJWMTAwSDEwMS4wMlY5OC41MDAyWk0xMDEuMDI4IDk4LjUwMDJIMTAxLjAyVjEwMEgxMDEuMDI4Vjk4LjUwMDJaTTEwMS4wMzYgOTguNTAwMkgxMDEuMDI4VjEwMEgxMDEuMDM2Vjk4LjUwMDJaTTEwMS4wNDQgOTguNTAwMkgxMDEuMDM2VjEwMEgxMDEuMDQ0Vjk4LjUwMDJaTTEwMS4wNTIgOTguNTAwMkgxMDEuMDQ0VjEwMEgxMDEuMDUyVjk4LjUwMDJaTTEwMS4wNTkgOTguNTAwMkgxMDEuMDUyVjEwMEgxMDEuMDU5Vjk4LjUwMDJaTTEwMS4wNjcgOTguNTAwMkgxMDEuMDU5VjEwMEgxMDEuMDY3Vjk4LjUwMDJaTTEwMS4wNzUgOTguNTAwMkgxMDEuMDY3VjEwMEgxMDEuMDc1Vjk4LjUwMDJaTTEwMS4wODMgOTguNTAwMkgxMDEuMDc1VjEwMEgxMDEuMDgzVjk4LjUwMDJaTTEwMS4wOTEgOTguNTAwMkgxMDEuMDgzVjEwMEgxMDEuMDkxVjk4LjUwMDJaTTEwMS4wOTkgOTguNTAwMkgxMDEuMDkxVjEwMEgxMDEuMDk5Vjk4LjUwMDJaTTEwMS4xMDcgOTguNTAwMkgxMDEuMDk5VjEwMEgxMDEuMTA3Vjk4LjUwMDJaTTEwMS4xMTUgOTguNTAwMkgxMDEuMTA3VjEwMEgxMDEuMTE1Vjk4LjUwMDJaTTEwMS4xMjMgOTguNTAwMkgxMDEuMTE1VjEwMEgxMDEuMTIzVjk4LjUwMDJaTTEwMS4xMzEgOTguNTAwMkgxMDEuMTIzVjEwMEgxMDEuMTMxVjk4LjUwMDJaTTEwMS4xMzkgOTguNTAwMkgxMDEuMTMxVjEwMEgxMDEuMTM5Vjk4LjUwMDJaTTEwMS4xNDcgOTguNTAwMkgxMDEuMTM5VjEwMEgxMDEuMTQ3Vjk4LjUwMDJaTTEwMS4xNTUgOTguNTAwMkgxMDEuMTQ3VjEwMEgxMDEuMTU1Vjk4LjUwMDJaTTEwMS4xNjMgOTguNTAwMkgxMDEuMTU1VjEwMEgxMDEuMTYzVjk4LjUwMDJaTTEwMS4xNzEgOTguNTAwMkgxMDEuMTYzVjEwMEgxMDEuMTcxVjk4LjUwMDJaTTEwMS4xNzkgOTguNTAwMkgxMDEuMTcxVjEwMEgxMDEuMTc5Vjk4LjUwMDJaTTEwMS4xODcgOTguNTAwMkgxMDEuMTc5VjEwMEgxMDEuMTg3Vjk4LjUwMDJaTTEwMS4xOTUgOTguNTAwMkgxMDEuMTg3VjEwMEgxMDEuMTk1Vjk4LjUwMDJaTTEwMS4yMDMgOTguNTAwMkgxMDEuMTk1VjEwMEgxMDEuMjAzVjk4LjUwMDJaTTEwMS4yMTEgOTguNTAwMkgxMDEuMjAzVjEwMEgxMDEuMjExVjk4LjUwMDJaTTEwMS4yMTkgOTguNTAwMkgxMDEuMjExVjEwMEgxMDEuMjE5Vjk4LjUwMDJaTTEwMS4yMjggOTguNTAwMkgxMDEuMjE5VjEwMEgxMDEuMjI4Vjk4LjUwMDJaTTEwMS4yMzYgOTguNTAwMkgxMDEuMjI4VjEwMEgxMDEuMjM2Vjk4LjUwMDJaTTEwMS4yNDQgOTguNTAwMkgxMDEuMjM2VjEwMEgxMDEuMjQ0Vjk4LjUwMDJaTTEwMS4yNTIgOTguNTAwMkgxMDEuMjQ0VjEwMEgxMDEuMjUyVjk4LjUwMDJaTTEwMS4yNiA5OC41MDAySDEwMS4yNTJWMTAwSDEwMS4yNlY5OC41MDAyWk0xMDEuMjY4IDk4LjUwMDJIMTAxLjI2VjEwMEgxMDEuMjY4Vjk4LjUwMDJaTTEwMS4yNzYgOTguNTAwMkgxMDEuMjY4VjEwMEgxMDEuMjc2Vjk4LjUwMDJaTTEwMS4yODUgOTguNTAwMkgxMDEuMjc2VjEwMEgxMDEuMjg1Vjk4LjUwMDJaTTEwMS4yOTMgOTguNTAwMkgxMDEuMjg1VjEwMEgxMDEuMjkzVjk4LjUwMDJaTTEwMS4zMDEgOTguNTAwMkgxMDEuMjkzVjEwMEgxMDEuMzAxVjk4LjUwMDJaTTEwMS4zMDkgOTguNTAwMkgxMDEuMzAxVjEwMEgxMDEuMzA5Vjk4LjUwMDJaTTEwMS4zMTggOTguNTAwMkgxMDEuMzA5VjEwMEgxMDEuMzE4Vjk4LjUwMDJaTTEwMS4zMjYgOTguNTAwMkgxMDEuMzE4VjEwMEgxMDEuMzI2Vjk4LjUwMDJaTTEwMS4zMzQgOTguNTAwMkgxMDEuMzI2VjEwMEgxMDEuMzM0Vjk4LjUwMDJaTTEwMS4zNDIgOTguNTAwMkgxMDEuMzM0VjEwMEgxMDEuMzQyVjk4LjUwMDJaTTEwMS4zNTEgOTguNTAwMkgxMDEuMzQyVjEwMEgxMDEuMzUxVjk4LjUwMDJaTTEwMS4zNTkgOTguNTAwMkgxMDEuMzUxVjEwMEgxMDEuMzU5Vjk4LjUwMDJaTTEwMS4zNjcgOTguNTAwMkgxMDEuMzU5VjEwMEgxMDEuMzY3Vjk4LjUwMDJaTTEwMS4zNzUgOTguNTAwMkgxMDEuMzY3VjEwMEgxMDEuMzc1Vjk4LjUwMDJaTTEwMS4zODQgOTguNTAwMkgxMDEuMzc1VjEwMEgxMDEuMzg0Vjk4LjUwMDJaTTEwMS4zOTIgOTguNTAwMkgxMDEuMzg0VjEwMEgxMDEuMzkyVjk4LjUwMDJaTTEwMS40IDk4LjUwMDJIMTAxLjM5MlYxMDBIMTAxLjRWOTguNTAwMlpNMTAxLjQwOSA5OC41MDAySDEwMS40VjEwMEgxMDEuNDA5Vjk4LjUwMDJaTTEwMS40MTcgOTguNTAwMkgxMDEuNDA5VjEwMEgxMDEuNDE3Vjk4LjUwMDJaTTEwMS40MjUgOTguNTAwMkgxMDEuNDE3VjEwMEgxMDEuNDI1Vjk4LjUwMDJaTTEwMS40MzQgOTguNTAwMkgxMDEuNDI1VjEwMEgxMDEuNDM0Vjk4LjUwMDJaTTEwMS40NDIgOTguNTAwMkgxMDEuNDM0VjEwMEgxMDEuNDQyVjk4LjUwMDJaTTEwMS40NTEgOTguNTAwMkgxMDEuNDQyVjEwMEgxMDEuNDUxVjk4LjUwMDJaTTEwMS40NTkgOTguNTAwMkgxMDEuNDUxVjEwMEgxMDEuNDU5Vjk4LjUwMDJaTTEwMS40NjcgOTguNTAwMkgxMDEuNDU5VjEwMEgxMDEuNDY3Vjk4LjUwMDJaTTEwMS40NzYgOTguNTAwMkgxMDEuNDY3VjEwMEgxMDEuNDc2Vjk4LjUwMDJaTTEwMS40ODQgOTguNTAwMkgxMDEuNDc2VjEwMEgxMDEuNDg0Vjk4LjUwMDJaTTEwMS40OTMgOTguNTAwMkgxMDEuNDg0VjEwMEgxMDEuNDkzVjk4LjUwMDJaTTEwMS41MDEgOTguNTAwMkgxMDEuNDkzVjEwMEgxMDEuNTAxVjk4LjUwMDJaTTEwMS41MSA5OC41MDAySDEwMS41MDFWMTAwSDEwMS41MVY5OC41MDAyWk0xMDEuNTE4IDk4LjUwMDJIMTAxLjUxVjEwMEgxMDEuNTE4Vjk4LjUwMDJaTTEwMS41MjcgOTguNTAwMkgxMDEuNTE4VjEwMEgxMDEuNTI3Vjk4LjUwMDJaTTEwMS41MzUgOTguNTAwMkgxMDEuNTI3VjEwMEgxMDEuNTM1Vjk4LjUwMDJaTTEwMS41NDQgOTguNTAwMkgxMDEuNTM1VjEwMEgxMDEuNTQ0Vjk4LjUwMDJaTTEwMS41NTIgOTguNTAwMkgxMDEuNTQ0VjEwMEgxMDEuNTUyVjk4LjUwMDJaTTEwMS41NjEgOTguNTAwMkgxMDEuNTUyVjEwMEgxMDEuNTYxVjk4LjUwMDJaTTEwMS41NjkgOTguNTAwMkgxMDEuNTYxVjEwMEgxMDEuNTY5Vjk4LjUwMDJaTTEwMS41NzggOTguNTAwMkgxMDEuNTY5VjEwMEgxMDEuNTc4Vjk4LjUwMDJaTTEwMS41ODYgOTguNTAwMkgxMDEuNTc4VjEwMEgxMDEuNTg2Vjk4LjUwMDJaTTEwMS41OTUgOTguNTAwMkgxMDEuNTg2VjEwMEgxMDEuNTk1Vjk4LjUwMDJaTTEwMS42MDMgOTguNTAwMkgxMDEuNTk1VjEwMEgxMDEuNjAzVjk4LjUwMDJaTTEwMS42MTIgOTguNTAwMkgxMDEuNjAzVjEwMEgxMDEuNjEyVjk4LjUwMDJaTTEwMS42MjEgOTguNTAwMkgxMDEuNjEyVjEwMEgxMDEuNjIxVjk4LjUwMDJaTTEwMS42MjkgOTguNTAwMkgxMDEuNjIxVjEwMEgxMDEuNjI5Vjk4LjUwMDJaTTEwMS42MzggOTguNTAwMkgxMDEuNjI5VjEwMEgxMDEuNjM4Vjk4LjUwMDJaTTEwMS42NDYgOTguNTAwMkgxMDEuNjM4VjEwMEgxMDEuNjQ2Vjk4LjUwMDJaTTEwMS42NTUgOTguNTAwMkgxMDEuNjQ2VjEwMEgxMDEuNjU1Vjk4LjUwMDJaTTEwMS42NjQgOTguNTAwMkgxMDEuNjU1VjEwMEgxMDEuNjY0Vjk4LjUwMDJaTTEwMS42NzIgOTguNTAwMkgxMDEuNjY0VjEwMEgxMDEuNjcyVjk4LjUwMDJaTTEwMS42ODEgOTguNTAwMkgxMDEuNjcyVjEwMEgxMDEuNjgxVjk4LjUwMDJaTTEwMS42OSA5OC41MDAySDEwMS42ODFWMTAwSDEwMS42OVY5OC41MDAyWk0xMDEuNjk4IDk4LjUwMDJIMTAxLjY5VjEwMEgxMDEuNjk4Vjk4LjUwMDJaTTEwMS43MDcgOTguNTAwMkgxMDEuNjk4VjEwMEgxMDEuNzA3Vjk4LjUwMDJaTTEwMS43MTYgOTguNTAwMkgxMDEuNzA3VjEwMEgxMDEuNzE2Vjk4LjUwMDJaTTEwMS43MjUgOTguNTAwMkgxMDEuNzE2VjEwMEgxMDEuNzI1Vjk4LjUwMDJaTTEwMS43MzMgOTguNTAwMkgxMDEuNzI1VjEwMEgxMDEuNzMzVjk4LjUwMDJaTTEwMS43NDIgOTguNTAwMkgxMDEuNzMzVjEwMEgxMDEuNzQyVjk4LjUwMDJaTTEwMS43NTEgOTguNTAwMkgxMDEuNzQyVjEwMEgxMDEuNzUxVjk4LjUwMDJaTTEwMS43NiA5OC41MDAySDEwMS43NTFWMTAwSDEwMS43NlY5OC41MDAyWk0xMDEuNzY4IDk4LjUwMDJIMTAxLjc2VjEwMEgxMDEuNzY4Vjk4LjUwMDJaTTEwMS43NzcgOTguNTAwMkgxMDEuNzY4VjEwMEgxMDEuNzc3Vjk4LjUwMDJaTTEwMS43ODYgOTguNTAwMkgxMDEuNzc3VjEwMEgxMDEuNzg2Vjk4LjUwMDJaTTEwMS43OTUgOTguNTAwMkgxMDEuNzg2VjEwMEgxMDEuNzk1Vjk4LjUwMDJaTTEwMS44MDQgOTguNTAwMkgxMDEuNzk1VjEwMEgxMDEuODA0Vjk4LjUwMDJaTTEwMS44MTIgOTguNTAwMkgxMDEuODA0VjEwMEgxMDEuODEyVjk4LjUwMDJaTTEwMS44MjEgOTguNTAwMkgxMDEuODEyVjEwMEgxMDEuODIxVjk4LjUwMDJaTTEwMS44MyA5OC41MDAySDEwMS44MjFWMTAwSDEwMS44M1Y5OC41MDAyWk0xMDEuODM5IDk4LjUwMDJIMTAxLjgzVjEwMEgxMDEuODM5Vjk4LjUwMDJaTTEwMS44NDggOTguNTAwMkgxMDEuODM5VjEwMEgxMDEuODQ4Vjk4LjUwMDJaTTEwMS44NTcgOTguNTAwMkgxMDEuODQ4VjEwMEgxMDEuODU3Vjk4LjUwMDJaTTEwMS44NjYgOTguNTAwMkgxMDEuODU3VjEwMEgxMDEuODY2Vjk4LjUwMDJaTTEwMS44NzUgOTguNTAwMkgxMDEuODY2VjEwMEgxMDEuODc1Vjk4LjUwMDJaTTEwMS44ODQgOTguNTAwMkgxMDEuODc1VjEwMEgxMDEuODg0Vjk4LjUwMDJaTTEwMS44OTIgOTguNTAwMkgxMDEuODg0VjEwMEgxMDEuODkyVjk4LjUwMDJaTTEwMS45MDEgOTguNTAwMkgxMDEuODkyVjEwMEgxMDEuOTAxVjk4LjUwMDJaTTEwMS45MSA5OC41MDAySDEwMS45MDFWMTAwSDEwMS45MVY5OC41MDAyWk0xMDEuOTE5IDk4LjUwMDJIMTAxLjkxVjEwMEgxMDEuOTE5Vjk4LjUwMDJaTTEwMS45MjggOTguNTAwMkgxMDEuOTE5VjEwMEgxMDEuOTI4Vjk4LjUwMDJaTTEwMS45MzcgOTguNTAwMkgxMDEuOTI4VjEwMEgxMDEuOTM3Vjk4LjUwMDJaTTEwMS45NDYgOTguNTAwMkgxMDEuOTM3VjEwMEgxMDEuOTQ2Vjk4LjUwMDJaTTEwMS45NTUgOTguNTAwMkgxMDEuOTQ2VjEwMEgxMDEuOTU1Vjk4LjUwMDJaTTEwMS45NjQgOTguNTAwMkgxMDEuOTU1VjEwMEgxMDEuOTY0Vjk4LjUwMDJaTTEwMS45NzMgOTguNTAwMkgxMDEuOTY0VjEwMEgxMDEuOTczVjk4LjUwMDJaTTEwMS45ODIgOTguNTAwMkgxMDEuOTczVjEwMEgxMDEuOTgyVjk4LjUwMDJaTTEwMS45OTEgOTguNTAwMkgxMDEuOTgyVjEwMEgxMDEuOTkxVjk4LjUwMDJaTTEwMiA5OC41MDAySDEwMS45OTFWMTAwSDEwMlY5OC41MDAyWk0xMDIuMDA5IDk4LjUwMDJIMTAyVjEwMEgxMDIuMDA5Vjk4LjUwMDJaTTEwMi4wMTggOTguNTAwMkgxMDIuMDA5VjEwMEgxMDIuMDE4Vjk4LjUwMDJaTTEwMi4wMjggOTguNTAwMkgxMDIuMDE4VjEwMEgxMDIuMDI4Vjk4LjUwMDJaTTEwMi4wMzcgOTguNTAwMkgxMDIuMDI4VjEwMEgxMDIuMDM3Vjk4LjUwMDJaTTEwMi4wNDYgOTguNTAwMkgxMDIuMDM3VjEwMEgxMDIuMDQ2Vjk4LjUwMDJaTTEwMi4wNTUgOTguNTAwMkgxMDIuMDQ2VjEwMEgxMDIuMDU1Vjk4LjUwMDJaTTEwMi4wNjQgOTguNTAwMkgxMDIuMDU1VjEwMEgxMDIuMDY0Vjk4LjUwMDJaTTEwMi4wNzMgOTguNTAwMkgxMDIuMDY0VjEwMEgxMDIuMDczVjk4LjUwMDJaTTEwMi4wODIgOTguNTAwMkgxMDIuMDczVjEwMEgxMDIuMDgyVjk4LjUwMDJaTTEwMi4wOTEgOTguNTAwMkgxMDIuMDgyVjEwMEgxMDIuMDkxVjk4LjUwMDJaTTEwMi4xMDEgOTguNTAwMkgxMDIuMDkxVjEwMEgxMDIuMTAxVjk4LjUwMDJaTTEwMi4xMSA5OC41MDAySDEwMi4xMDFWMTAwSDEwMi4xMVY5OC41MDAyWk0xMDIuMTE5IDk4LjUwMDJIMTAyLjExVjEwMEgxMDIuMTE5Vjk4LjUwMDJaTTEwMi4xMjggOTguNTAwMkgxMDIuMTE5VjEwMEgxMDIuMTI4Vjk4LjUwMDJaTTEwMi4xMzcgOTguNTAwMkgxMDIuMTI4VjEwMEgxMDIuMTM3Vjk4LjUwMDJaTTEwMi4xNDcgOTguNTAwMkgxMDIuMTM3VjEwMEgxMDIuMTQ3Vjk4LjUwMDJaTTEwMi4xNTYgOTguNTAwMkgxMDIuMTQ3VjEwMEgxMDIuMTU2Vjk4LjUwMDJaTTEwMi4xNjUgOTguNTAwMkgxMDIuMTU2VjEwMEgxMDIuMTY1Vjk4LjUwMDJaTTEwMi4xNzQgOTguNTAwMkgxMDIuMTY1VjEwMEgxMDIuMTc0Vjk4LjUwMDJaTTEwMi4xODQgOTguNTAwMkgxMDIuMTc0VjEwMEgxMDIuMTg0Vjk4LjUwMDJaTTEwMi4xOTMgOTguNTAwMkgxMDIuMTg0VjEwMEgxMDIuMTkzVjk4LjUwMDJaTTEwMi4yMDIgOTguNTAwMkgxMDIuMTkzVjEwMEgxMDIuMjAyVjk4LjUwMDJaTTEwMi4yMTEgOTguNTAwMkgxMDIuMjAyVjEwMEgxMDIuMjExVjk4LjUwMDJaTTEwMi4yMjEgOTguNTAwMkgxMDIuMjExVjEwMEgxMDIuMjIxVjk4LjUwMDJaTTEwMi4yMyA5OC41MDAySDEwMi4yMjFWMTAwSDEwMi4yM1Y5OC41MDAyWk0xMDIuMjM5IDk4LjUwMDJIMTAyLjIzVjEwMEgxMDIuMjM5Vjk4LjUwMDJaTTEwMi4yNDkgOTguNTAwMkgxMDIuMjM5VjEwMEgxMDIuMjQ5Vjk4LjUwMDJaTTEwMi4yNTggOTguNTAwMkgxMDIuMjQ5VjEwMEgxMDIuMjU4Vjk4LjUwMDJaTTEwMi4yNjcgOTguNTAwMkgxMDIuMjU4VjEwMEgxMDIuMjY3Vjk4LjUwMDJaTTEwMi4yNzcgOTguNTAwMkgxMDIuMjY3VjEwMEgxMDIuMjc3Vjk4LjUwMDJaTTEwMi4yODYgOTguNTAwMkgxMDIuMjc3VjEwMEgxMDIuMjg2Vjk4LjUwMDJaTTEwMi4yOTUgOTguNTAwMkgxMDIuMjg2VjEwMEgxMDIuMjk1Vjk4LjUwMDJaTTEwMi4zMDUgOTguNTAwMkgxMDIuMjk1VjEwMEgxMDIuMzA1Vjk4LjUwMDJaTTEwMi4zMTQgOTguNTAwMkgxMDIuMzA1VjEwMEgxMDIuMzE0Vjk4LjUwMDJaTTEwMi4zMjQgOTguNTAwMkgxMDIuMzE0VjEwMEgxMDIuMzI0Vjk4LjUwMDJaTTEwMi4zMzMgOTguNTAwMkgxMDIuMzI0VjEwMEgxMDIuMzMzVjk4LjUwMDJaTTEwMi4zNDIgOTguNTAwMkgxMDIuMzMzVjEwMEgxMDIuMzQyVjk4LjUwMDJaTTEwMi4zNTIgOTguNTAwMkgxMDIuMzQyVjEwMEgxMDIuMzUyVjk4LjUwMDJaTTEwMi4zNjEgOTguNTAwMkgxMDIuMzUyVjEwMEgxMDIuMzYxVjk4LjUwMDJaTTEwMi4zNzEgOTguNTAwMkgxMDIuMzYxVjEwMEgxMDIuMzcxVjk4LjUwMDJaTTEwMi4zOCA5OC41MDAySDEwMi4zNzFWMTAwSDEwMi4zOFY5OC41MDAyWk0xMDIuMzkgOTguNTAwMkgxMDIuMzhWMTAwSDEwMi4zOVY5OC41MDAyWk0xMDIuMzk5IDk4LjUwMDJIMTAyLjM5VjEwMEgxMDIuMzk5Vjk4LjUwMDJaTTEwMi40MDkgOTguNTAwMkgxMDIuMzk5VjEwMEgxMDIuNDA5Vjk4LjUwMDJaTTEwMi40MTggOTguNTAwMkgxMDIuNDA5VjEwMEgxMDIuNDE4Vjk4LjUwMDJaTTEwMi40MjggOTguNTAwMkgxMDIuNDE4VjEwMEgxMDIuNDI4Vjk4LjUwMDJaTTEwMi40MzcgOTguNTAwMkgxMDIuNDI4VjEwMEgxMDIuNDM3Vjk4LjUwMDJaTTEwMi40NDcgOTguNTAwMkgxMDIuNDM3VjEwMEgxMDIuNDQ3Vjk4LjUwMDJaTTEwMi40NTcgOTguNTAwMkgxMDIuNDQ3VjEwMEgxMDIuNDU3Vjk4LjUwMDJaTTEwMi40NjYgOTguNTAwMkgxMDIuNDU3VjEwMEgxMDIuNDY2Vjk4LjUwMDJaTTEwMi40NzYgOTguNTAwMkgxMDIuNDY2VjEwMEgxMDIuNDc2Vjk4LjUwMDJaTTEwMi40ODUgOTguNTAwMkgxMDIuNDc2VjEwMEgxMDIuNDg1Vjk4LjUwMDJaTTEwMi40OTUgOTguNTAwMkgxMDIuNDg1VjEwMEgxMDIuNDk1Vjk4LjUwMDJaTTEwMi41MDQgOTguNTAwMkgxMDIuNDk1VjEwMEgxMDIuNTA0Vjk4LjUwMDJaTTEwMi41MTQgOTguNTAwMkgxMDIuNTA0VjEwMEgxMDIuNTE0Vjk4LjUwMDJaTTEwMi41MjQgOTguNTAwMkgxMDIuNTE0VjEwMEgxMDIuNTI0Vjk4LjUwMDJaTTEwMi41MzMgOTguNTAwMkgxMDIuNTI0VjEwMEgxMDIuNTMzVjk4LjUwMDJaTTEwMi41NDMgOTguNTAwMkgxMDIuNTMzVjEwMEgxMDIuNTQzVjk4LjUwMDJaTTEwMi41NTMgOTguNTAwMkgxMDIuNTQzVjEwMEgxMDIuNTUzVjk4LjUwMDJaTTEwMi41NjIgOTguNTAwMkgxMDIuNTUzVjEwMEgxMDIuNTYyVjk4LjUwMDJaTTEwMi41NzIgOTguNTAwMkgxMDIuNTYyVjEwMEgxMDIuNTcyVjk4LjUwMDJaTTEwMi41ODIgOTguNTAwMkgxMDIuNTcyVjEwMEgxMDIuNTgyVjk4LjUwMDJaTTEwMi41OTEgOTguNTAwMkgxMDIuNTgyVjEwMEgxMDIuNTkxVjk4LjUwMDJaTTEwMi42MDEgOTguNTAwMkgxMDIuNTkxVjEwMEgxMDIuNjAxVjk4LjUwMDJaTTEwMi42MTEgOTguNTAwMkgxMDIuNjAxVjEwMEgxMDIuNjExVjk4LjUwMDJaTTEwMi42MjEgOTguNTAwMkgxMDIuNjExVjEwMEgxMDIuNjIxVjk4LjUwMDJaTTEwMi42MyA5OC41MDAySDEwMi42MjFWMTAwSDEwMi42M1Y5OC41MDAyWk0xMDIuNjQgOTguNTAwMkgxMDIuNjNWMTAwSDEwMi42NFY5OC41MDAyWk0xMDIuNjUgOTguNTAwMkgxMDIuNjRWMTAwSDEwMi42NVY5OC41MDAyWk0xMDIuNjYgOTguNTAwMkgxMDIuNjVWMTAwSDEwMi42NlY5OC41MDAyWk0xMDIuNjY5IDk4LjUwMDJIMTAyLjY2VjEwMEgxMDIuNjY5Vjk4LjUwMDJaTTEwMi42NzkgOTguNTAwMkgxMDIuNjY5VjEwMEgxMDIuNjc5Vjk4LjUwMDJaTTEwMi42ODkgOTguNTAwMkgxMDIuNjc5VjEwMEgxMDIuNjg5Vjk4LjUwMDJaTTEwMi42OTkgOTguNTAwMkgxMDIuNjg5VjEwMEgxMDIuNjk5Vjk4LjUwMDJaTTEwMi43MDkgOTguNTAwMkgxMDIuNjk5VjEwMEgxMDIuNzA5Vjk4LjUwMDJaTTEwMi43MTkgOTguNTAwMkgxMDIuNzA5VjEwMEgxMDIuNzE5Vjk4LjUwMDJaTTEwMi43MjggOTguNTAwMkgxMDIuNzE5VjEwMEgxMDIuNzI4Vjk4LjUwMDJaTTEwMi43MzggOTguNTAwMkgxMDIuNzI4VjEwMEgxMDIuNzM4Vjk4LjUwMDJaTTEwMi43NDggOTguNTAwMkgxMDIuNzM4VjEwMEgxMDIuNzQ4Vjk4LjUwMDJaTTEwMi43NTggOTguNTAwMkgxMDIuNzQ4VjEwMEgxMDIuNzU4Vjk4LjUwMDJaTTEwMi43NjggOTguNTAwMkgxMDIuNzU4VjEwMEgxMDIuNzY4Vjk4LjUwMDJaTTEwMi43NzggOTguNTAwMkgxMDIuNzY4VjEwMEgxMDIuNzc4Vjk4LjUwMDJaTTEwMi43ODggOTguNTAwMkgxMDIuNzc4VjEwMEgxMDIuNzg4Vjk4LjUwMDJaTTEwMi43OTggOTguNTAwMkgxMDIuNzg4VjEwMEgxMDIuNzk4Vjk4LjUwMDJaTTEwMi44MDggOTguNTAwMkgxMDIuNzk4VjEwMEgxMDIuODA4Vjk4LjUwMDJaTTEwMi44MTggOTguNTAwMkgxMDIuODA4VjEwMEgxMDIuODE4Vjk4LjUwMDJaTTEwMi44MjcgOTguNTAwMkgxMDIuODE4VjEwMEgxMDIuODI3Vjk4LjUwMDJaTTEwMi44MzcgOTguNTAwMkgxMDIuODI3VjEwMEgxMDIuODM3Vjk4LjUwMDJaTTEwMi44NDcgOTguNTAwMkgxMDIuODM3VjEwMEgxMDIuODQ3Vjk4LjUwMDJaTTEwMi44NTcgOTguNTAwMkgxMDIuODQ3VjEwMEgxMDIuODU3Vjk4LjUwMDJaTTEwMi44NjcgOTguNTAwMkgxMDIuODU3VjEwMEgxMDIuODY3Vjk4LjUwMDJaTTEwMi44NzcgOTguNTAwMkgxMDIuODY3VjEwMEgxMDIuODc3Vjk4LjUwMDJaTTEwMi44ODcgOTguNTAwMkgxMDIuODc3VjEwMEgxMDIuODg3Vjk4LjUwMDJaTTEwMi44OTcgOTguNTAwMkgxMDIuODg3VjEwMEgxMDIuODk3Vjk4LjUwMDJaTTEwMi45MDcgOTguNTAwMkgxMDIuODk3VjEwMEgxMDIuOTA3Vjk4LjUwMDJaTTEwMi45MTggOTguNTAwMkgxMDIuOTA3VjEwMEgxMDIuOTE4Vjk4LjUwMDJaTTEwMi45MjggOTguNTAwMkgxMDIuOTE4VjEwMEgxMDIuOTI4Vjk4LjUwMDJaTTEwMi45MzggOTguNTAwMkgxMDIuOTI4VjEwMEgxMDIuOTM4Vjk4LjUwMDJaTTEwMi45NDggOTguNTAwMkgxMDIuOTM4VjEwMEgxMDIuOTQ4Vjk4LjUwMDJaTTEwMi45NTggOTguNTAwMkgxMDIuOTQ4VjEwMEgxMDIuOTU4Vjk4LjUwMDJaTTEwMi45NjggOTguNTAwMkgxMDIuOTU4VjEwMEgxMDIuOTY4Vjk4LjUwMDJaTTEwMi45NzggOTguNTAwMkgxMDIuOTY4VjEwMEgxMDIuOTc4Vjk4LjUwMDJaTTEwMi45ODggOTguNTAwMkgxMDIuOTc4VjEwMEgxMDIuOTg4Vjk4LjUwMDJaTTEwMi45OTggOTguNTAwMkgxMDIuOTg4VjEwMEgxMDIuOTk4Vjk4LjUwMDJaTTEwMy4wMDggOTguNTAwMkgxMDIuOTk4VjEwMEgxMDMuMDA4Vjk4LjUwMDJaTTEwMy4wMTkgOTguNTAwMkgxMDMuMDA4VjEwMEgxMDMuMDE5Vjk4LjUwMDJaTTEwMy4wMjkgOTguNTAwMkgxMDMuMDE5VjEwMEgxMDMuMDI5Vjk4LjUwMDJaTTEwMy4wMzkgOTguNTAwMkgxMDMuMDI5VjEwMEgxMDMuMDM5Vjk4LjUwMDJaTTEwMy4wNDkgOTguNTAwMkgxMDMuMDM5VjEwMEgxMDMuMDQ5Vjk4LjUwMDJaTTEwMy4wNTkgOTguNTAwMkgxMDMuMDQ5VjEwMEgxMDMuMDU5Vjk4LjUwMDJaTTEwMy4wNyA5OC41MDAySDEwMy4wNTlWMTAwSDEwMy4wN1Y5OC41MDAyWk0xMDMuMDggOTguNTAwMkgxMDMuMDdWMTAwSDEwMy4wOFY5OC41MDAyWk0xMDMuMDkgOTguNTAwMkgxMDMuMDhWMTAwSDEwMy4wOVY5OC41MDAyWk0xMDMuMSA5OC41MDAySDEwMy4wOVYxMDBIMTAzLjFWOTguNTAwMlpNMTAzLjExIDk4LjUwMDJIMTAzLjFWMTAwSDEwMy4xMVY5OC41MDAyWk0xMDMuMTIxIDk4LjUwMDJIMTAzLjExVjEwMEgxMDMuMTIxVjk4LjUwMDJaTTEwMy4xMzEgOTguNTAwMkgxMDMuMTIxVjEwMEgxMDMuMTMxVjk4LjUwMDJaTTEwMy4xNDEgOTguNTAwMkgxMDMuMTMxVjEwMEgxMDMuMTQxVjk4LjUwMDJaTTEwMy4xNTIgOTguNTAwMkgxMDMuMTQxVjEwMEgxMDMuMTUyVjk4LjUwMDJaTTEwMy4xNjIgOTguNTAwMkgxMDMuMTUyVjEwMEgxMDMuMTYyVjk4LjUwMDJaTTEwMy4xNzIgOTguNTAwMkgxMDMuMTYyVjEwMEgxMDMuMTcyVjk4LjUwMDJaTTEwMy4xODIgOTguNTAwMkgxMDMuMTcyVjEwMEgxMDMuMTgyVjk4LjUwMDJaTTEwMy4xOTMgOTguNTAwMkgxMDMuMTgyVjEwMEgxMDMuMTkzVjk4LjUwMDJaTTEwMy4yMDMgOTguNTAwMkgxMDMuMTkzVjEwMEgxMDMuMjAzVjk4LjUwMDJaTTEwMy4yMTMgOTguNTAwMkgxMDMuMjAzVjEwMEgxMDMuMjEzVjk4LjUwMDJaTTEwMy4yMjQgOTguNTAwMkgxMDMuMjEzVjEwMEgxMDMuMjI0Vjk4LjUwMDJaTTEwMy4yMzQgOTguNTAwMkgxMDMuMjI0VjEwMEgxMDMuMjM0Vjk4LjUwMDJaTTEwMy4yNDUgOTguNTAwMkgxMDMuMjM0VjEwMEgxMDMuMjQ1Vjk4LjUwMDJaTTEwMy4yNTUgOTguNTAwMkgxMDMuMjQ1VjEwMEgxMDMuMjU1Vjk4LjUwMDJaTTEwMy4yNjUgOTguNTAwMkgxMDMuMjU1VjEwMEgxMDMuMjY1Vjk4LjUwMDJaTTEwMy4yNzYgOTguNTAwMkgxMDMuMjY1VjEwMEgxMDMuMjc2Vjk4LjUwMDJaTTEwMy4yODYgOTguNTAwMkgxMDMuMjc2VjEwMEgxMDMuMjg2Vjk4LjUwMDJaTTEwMy4yOTcgOTguNTAwMkgxMDMuMjg2VjEwMEgxMDMuMjk3Vjk4LjUwMDJaTTEwMy4zMDcgOTguNTAwMkgxMDMuMjk3VjEwMEgxMDMuMzA3Vjk4LjUwMDJaTTEwMy4zMTggOTguNTAwMkgxMDMuMzA3VjEwMEgxMDMuMzE4Vjk4LjUwMDJaTTEwMy4zMjggOTguNTAwMkgxMDMuMzE4VjEwMEgxMDMuMzI4Vjk4LjUwMDJaTTEwMy4zMzggOTguNTAwMkgxMDMuMzI4VjEwMEgxMDMuMzM4Vjk4LjUwMDJaTTEwMy4zNDkgOTguNTAwMkgxMDMuMzM4VjEwMEgxMDMuMzQ5Vjk4LjUwMDJaTTEwMy4zNTkgOTguNTAwMkgxMDMuMzQ5VjEwMEgxMDMuMzU5Vjk4LjUwMDJaTTEwMy4zNyA5OC41MDAySDEwMy4zNTlWMTAwSDEwMy4zN1Y5OC41MDAyWk0xMDMuMzggOTguNTAwMkgxMDMuMzdWMTAwSDEwMy4zOFY5OC41MDAyWk0xMDMuMzkxIDk4LjUwMDJIMTAzLjM4VjEwMEgxMDMuMzkxVjk4LjUwMDJaTTEwMy40MDIgOTguNTAwMkgxMDMuMzkxVjEwMEgxMDMuNDAyVjk4LjUwMDJaTTEwMy40MTIgOTguNTAwMkgxMDMuNDAyVjEwMEgxMDMuNDEyVjk4LjUwMDJaTTEwMy40MjMgOTguNTAwMkgxMDMuNDEyVjEwMEgxMDMuNDIzVjk4LjUwMDJaTTEwMy40MzMgOTguNTAwMkgxMDMuNDIzVjEwMEgxMDMuNDMzVjk4LjUwMDJaTTEwMy40NDQgOTguNTAwMkgxMDMuNDMzVjEwMEgxMDMuNDQ0Vjk4LjUwMDJaTTEwMy40NTQgOTguNTAwMkgxMDMuNDQ0VjEwMEgxMDMuNDU0Vjk4LjUwMDJaTTEwMy40NjUgOTguNTAwMkgxMDMuNDU0VjEwMEgxMDMuNDY1Vjk4LjUwMDJaTTEwMy40NzYgOTguNTAwMkgxMDMuNDY1VjEwMEgxMDMuNDc2Vjk4LjUwMDJaTTEwMy40ODYgOTguNTAwMkgxMDMuNDc2VjEwMEgxMDMuNDg2Vjk4LjUwMDJaTTEwMy40OTcgOTguNTAwMkgxMDMuNDg2VjEwMEgxMDMuNDk3Vjk4LjUwMDJaTTEwMy41MDggOTguNTAwMkgxMDMuNDk3VjEwMEgxMDMuNTA4Vjk4LjUwMDJaTTEwMy41MTggOTguNTAwMkgxMDMuNTA4VjEwMEgxMDMuNTE4Vjk4LjUwMDJaTTEwMy43NyA5OC40MzJDMTAzLjY5NCA5OC40NzY3IDEwMy42MDcgOTguNTAwMiAxMDMuNTE4IDk4LjUwMDJWMTAwQzEwMy44NzIgMTAwIDEwNC4yMiA5OS45MDYxIDEwNC41MjYgOTkuNzI3N0wxMDMuNzcgOTguNDMyWk0xMDMuOTUgOTcuNzQ4MkMxMDQuMDg5IDk3Ljk4NjcgMTA0LjAwOSA5OC4yOTI5IDEwMy43NyA5OC40MzJMMTA0LjUyNiA5OS43Mjc3QzEwNS40OCA5OS4xNzEyIDEwNS44MDIgOTcuOTQ2NSAxMDUuMjQ2IDk2Ljk5MjRMMTAzLjk1IDk3Ljc0ODJaTTEwMC45NTQgOTIuNjExOEwxMDMuOTUgOTcuNzQ4MkwxMDUuMjQ2IDk2Ljk5MjRMMTAyLjI0OSA5MS44NTZMMTAwLjk1NCA5Mi42MTE4WlwiLFxuICBmaWxsOiBcIiMzQjM1NTJcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk04Ni40NjMzIDY5LjI2NDFDODguMzgyOCA2NS45MzkzIDkzLjE3NzkgNjUuOTI4NiA5NS4xMTIzIDY5LjI0NDdMMTE0LjY5MyAxMDIuODExQzExNS4wODYgMTAzLjQ4NSAxMTQuODU4IDEwNC4zNSAxMTQuMTg0IDEwNC43NDRDMTEzLjk2OCAxMDQuODcgMTEzLjcyMiAxMDQuOTM2IDExMy40NzIgMTA0LjkzNkw3NC41MjgzIDEwNC45MzZDNzAuNjc5NCAxMDQuOTM2IDY4LjI3MzggMTAwLjc2OSA3MC4xOTgyIDk3LjQzNjFMODYuNDYzMyA2OS4yNjQxWlwiLFxuICBmaWxsOiBcIiMzMDQwRDZcIixcbiAgZmlsbE9wYWNpdHk6IFwiMC4wNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgeDogXCI3MS40MDYyXCIsXG4gIHk6IFwiNTQuMTUwNFwiLFxuICB3aWR0aDogXCI5LjE4Nzk3XCIsXG4gIGhlaWdodDogXCIyOS42ODQyXCIsXG4gIHJ4OiBcIjQuNTkzOTlcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiNzZcIixcbiAgY3k6IFwiOTMuMzc1OVwiLFxuICByOiBcIjUuMzAwNzVcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSkpO1xuZXhwb3J0IGRlZmF1bHQgQmV3YXJlOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgY29uc3QgQm94ID0gKHtcbiAgd2lkdGggPSAxNTIsXG4gIGhlaWdodCA9IDE1MlxufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB3aWR0aDogd2lkdGgsXG4gIGhlaWdodDogaGVpZ2h0LFxuICB2aWV3Qm94OiBcIjAgMCAxNTIgMTUyXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gIGN4OiBcIjc2XCIsXG4gIGN5OiBcIjc2XCIsXG4gIHI6IFwiNzZcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCI2MC4xNTM4XCIsXG4gIGN5OiBcIjQ0LjM5MTFcIixcbiAgcjogXCIxMi4wNTgxXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTI2Ljk1NDUgNDUuMzU5MkMyNi40ODk0IDQ0LjA1NjcgMjcuNDU0OSA0Mi42ODY1IDI4LjgzOCA0Mi42ODY1SDU3LjkyMzlDNTguNzY5MSA0Mi42ODY1IDU5LjUyMzEgNDMuMjE3OSA1OS44MDc0IDQ0LjAxMzlMNjYuOTA5MSA2My44OTg2SDMzLjU3NThMMjYuOTU0NSA0NS4zNTkyWlwiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTEyNS4wNDUgNDUuMzU5MkMxMjUuNTExIDQ0LjA1NjcgMTI0LjU0NSA0Mi42ODY1IDEyMy4xNjIgNDIuNjg2NUg5NC4wNzYxQzkzLjIzMDkgNDIuNjg2NSA5Mi40NzY5IDQzLjIxNzkgOTIuMTkyNiA0NC4wMTM5TDg1LjA5MDkgNjMuODk4NkgxMTguNDI0TDEyNS4wNDUgNDUuMzU5MlpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEwOC4yMjMgMzYuOTM2NUgxMDguOTczVjM2LjE4NjVIMTA4LjIyM1YzNi45MzY1Wk0xMDguMjIzIDM4LjQzNjVWMzkuMTg2NUgxMDguOTczVjM4LjQzNjVIMTA4LjIyM1pNMTAwLjg5IDM4LjQzNjVIMTAwLjE0VjM5LjE4NjVIMTAwLjg5VjM4LjQzNjVaTTEwMC44OSAzNi45MzY1VjM2LjE4NjVIMTAwLjE0VjM2LjkzNjVIMTAwLjg5Wk04Ny4wMTIzIDQwLjA4ODlMODcuNzE4NiA0MC4zNDEyTDg3LjAxMjMgNDAuMDg4OVpNOTcuMjc2NCAzNi45MzY1SDk4LjAyNjRWMzYuMTg2NUg5Ny4yNzY0VjM2LjkzNjVaTTk3LjI3NjQgMzguNDM2NVYzOS4xODY1SDk4LjAyNjRWMzguNDM2NUg5Ny4yNzY0Wk04OC40MjQ5IDQwLjU5MzRMODkuMTMxMiA0MC44NDU3TDg4LjQyNDkgNDAuNTkzNFpNODcuMzMyNSA0My42NTIxTDg4LjAzODggNDMuOTA0M0w4Ny4zMzI1IDQzLjY1MjFaTTg2LjU1MjMgNDUuODM2OEw4Ni4zIDQ2LjU0MzFMODcuMDA2MyA0Ni43OTU0TDg3LjI1ODYgNDYuMDg5MUw4Ni41NTIzIDQ1LjgzNjhaTTg1LjEzOTYgNDUuMzMyM0w4NC40MzMzIDQ1LjA4MDFMODQuMTgxMSA0NS43ODY0TDg0Ljg4NzQgNDYuMDM4Nkw4NS4xMzk2IDQ1LjMzMjNaTTg1LjkxOTkgNDMuMTQ3Nkw4NS4yMTM2IDQyLjg5NTNIODUuMjEzNkw4NS45MTk5IDQzLjE0NzZaTTEwOC4yMjMgMzYuMTg2NUgxMDguMjAzVjM3LjY4NjVIMTA4LjIyM1YzNi4xODY1Wk0xMDguOTczIDM4LjQzNjVWMzYuOTM2NUgxMDcuNDczVjM4LjQzNjVIMTA4Ljk3M1pNMTA4LjIwMyAzOS4xODY1SDEwOC4yMjNWMzcuNjg2NUgxMDguMjAzVjM5LjE4NjVaTTEwOC4xODQgMzkuMTg2NUgxMDguMjAzVjM3LjY4NjVIMTA4LjE4NFYzOS4xODY1Wk0xMDguMTY1IDM5LjE4NjVIMTA4LjE4NFYzNy42ODY1SDEwOC4xNjVWMzkuMTg2NVpNMTA4LjE0NiAzOS4xODY1SDEwOC4xNjVWMzcuNjg2NUgxMDguMTQ2VjM5LjE4NjVaTTEwOC4xMjcgMzkuMTg2NUgxMDguMTQ2VjM3LjY4NjVIMTA4LjEyN1YzOS4xODY1Wk0xMDguMTA4IDM5LjE4NjVIMTA4LjEyN1YzNy42ODY1SDEwOC4xMDhWMzkuMTg2NVpNMTA4LjA4OSAzOS4xODY1SDEwOC4xMDhWMzcuNjg2NUgxMDguMDg5VjM5LjE4NjVaTTEwOC4wNyAzOS4xODY1SDEwOC4wODlWMzcuNjg2NUgxMDguMDdWMzkuMTg2NVpNMTA4LjA1MSAzOS4xODY1SDEwOC4wN1YzNy42ODY1SDEwOC4wNTFWMzkuMTg2NVpNMTA4LjAzMiAzOS4xODY1SDEwOC4wNTFWMzcuNjg2NUgxMDguMDMyVjM5LjE4NjVaTTEwOC4wMTMgMzkuMTg2NUgxMDguMDMyVjM3LjY4NjVIMTA4LjAxM1YzOS4xODY1Wk0xMDcuOTk0IDM5LjE4NjVIMTA4LjAxM1YzNy42ODY1SDEwNy45OTRWMzkuMTg2NVpNMTA3Ljk3NSAzOS4xODY1SDEwNy45OTRWMzcuNjg2NUgxMDcuOTc1VjM5LjE4NjVaTTEwNy45NTYgMzkuMTg2NUgxMDcuOTc1VjM3LjY4NjVIMTA3Ljk1NlYzOS4xODY1Wk0xMDcuOTM3IDM5LjE4NjVIMTA3Ljk1NlYzNy42ODY1SDEwNy45MzdWMzkuMTg2NVpNMTA3LjkxOCAzOS4xODY1SDEwNy45MzdWMzcuNjg2NUgxMDcuOTE4VjM5LjE4NjVaTTEwNy44OTkgMzkuMTg2NUgxMDcuOTE4VjM3LjY4NjVIMTA3Ljg5OVYzOS4xODY1Wk0xMDcuODgxIDM5LjE4NjVIMTA3Ljg5OVYzNy42ODY1SDEwNy44ODFWMzkuMTg2NVpNMTA3Ljg2MiAzOS4xODY1SDEwNy44ODFWMzcuNjg2NUgxMDcuODYyVjM5LjE4NjVaTTEwNy44NDMgMzkuMTg2NUgxMDcuODYyVjM3LjY4NjVIMTA3Ljg0M1YzOS4xODY1Wk0xMDcuODI0IDM5LjE4NjVIMTA3Ljg0M1YzNy42ODY1SDEwNy44MjRWMzkuMTg2NVpNMTA3LjgwNSAzOS4xODY1SDEwNy44MjRWMzcuNjg2NUgxMDcuODA1VjM5LjE4NjVaTTEwNy43ODcgMzkuMTg2NUgxMDcuODA1VjM3LjY4NjVIMTA3Ljc4N1YzOS4xODY1Wk0xMDcuNzY4IDM5LjE4NjVIMTA3Ljc4N1YzNy42ODY1SDEwNy43NjhWMzkuMTg2NVpNMTA3Ljc0OSAzOS4xODY1SDEwNy43NjhWMzcuNjg2NUgxMDcuNzQ5VjM5LjE4NjVaTTEwNy43MzEgMzkuMTg2NUgxMDcuNzQ5VjM3LjY4NjVIMTA3LjczMVYzOS4xODY1Wk0xMDcuNzEyIDM5LjE4NjVIMTA3LjczMVYzNy42ODY1SDEwNy43MTJWMzkuMTg2NVpNMTA3LjY5MyAzOS4xODY1SDEwNy43MTJWMzcuNjg2NUgxMDcuNjkzVjM5LjE4NjVaTTEwNy42NzUgMzkuMTg2NUgxMDcuNjkzVjM3LjY4NjVIMTA3LjY3NVYzOS4xODY1Wk0xMDcuNjU2IDM5LjE4NjVIMTA3LjY3NVYzNy42ODY1SDEwNy42NTZWMzkuMTg2NVpNMTA3LjYzNyAzOS4xODY1SDEwNy42NTZWMzcuNjg2NUgxMDcuNjM3VjM5LjE4NjVaTTEwNy42MTkgMzkuMTg2NUgxMDcuNjM3VjM3LjY4NjVIMTA3LjYxOVYzOS4xODY1Wk0xMDcuNiAzOS4xODY1SDEwNy42MTlWMzcuNjg2NUgxMDcuNlYzOS4xODY1Wk0xMDcuNTgyIDM5LjE4NjVIMTA3LjZWMzcuNjg2NUgxMDcuNTgyVjM5LjE4NjVaTTEwNy41NjMgMzkuMTg2NUgxMDcuNTgyVjM3LjY4NjVIMTA3LjU2M1YzOS4xODY1Wk0xMDcuNTQ1IDM5LjE4NjVIMTA3LjU2M1YzNy42ODY1SDEwNy41NDVWMzkuMTg2NVpNMTA3LjUyNiAzOS4xODY1SDEwNy41NDVWMzcuNjg2NUgxMDcuNTI2VjM5LjE4NjVaTTEwNy41MDggMzkuMTg2NUgxMDcuNTI2VjM3LjY4NjVIMTA3LjUwOFYzOS4xODY1Wk0xMDcuNDg5IDM5LjE4NjVIMTA3LjUwOFYzNy42ODY1SDEwNy40ODlWMzkuMTg2NVpNMTA3LjQ3MSAzOS4xODY1SDEwNy40ODlWMzcuNjg2NUgxMDcuNDcxVjM5LjE4NjVaTTEwNy40NTIgMzkuMTg2NUgxMDcuNDcxVjM3LjY4NjVIMTA3LjQ1MlYzOS4xODY1Wk0xMDcuNDM0IDM5LjE4NjVIMTA3LjQ1MlYzNy42ODY1SDEwNy40MzRWMzkuMTg2NVpNMTA3LjQxNiAzOS4xODY1SDEwNy40MzRWMzcuNjg2NUgxMDcuNDE2VjM5LjE4NjVaTTEwNy4zOTcgMzkuMTg2NUgxMDcuNDE2VjM3LjY4NjVIMTA3LjM5N1YzOS4xODY1Wk0xMDcuMzc5IDM5LjE4NjVIMTA3LjM5N1YzNy42ODY1SDEwNy4zNzlWMzkuMTg2NVpNMTA3LjM2MSAzOS4xODY1SDEwNy4zNzlWMzcuNjg2NUgxMDcuMzYxVjM5LjE4NjVaTTEwNy4zNDIgMzkuMTg2NUgxMDcuMzYxVjM3LjY4NjVIMTA3LjM0MlYzOS4xODY1Wk0xMDcuMzI0IDM5LjE4NjVIMTA3LjM0MlYzNy42ODY1SDEwNy4zMjRWMzkuMTg2NVpNMTA3LjMwNiAzOS4xODY1SDEwNy4zMjRWMzcuNjg2NUgxMDcuMzA2VjM5LjE4NjVaTTEwNy4yODggMzkuMTg2NUgxMDcuMzA2VjM3LjY4NjVIMTA3LjI4OFYzOS4xODY1Wk0xMDcuMjY5IDM5LjE4NjVIMTA3LjI4OFYzNy42ODY1SDEwNy4yNjlWMzkuMTg2NVpNMTA3LjI1MSAzOS4xODY1SDEwNy4yNjlWMzcuNjg2NUgxMDcuMjUxVjM5LjE4NjVaTTEwNy4yMzMgMzkuMTg2NUgxMDcuMjUxVjM3LjY4NjVIMTA3LjIzM1YzOS4xODY1Wk0xMDcuMjE1IDM5LjE4NjVIMTA3LjIzM1YzNy42ODY1SDEwNy4yMTVWMzkuMTg2NVpNMTA3LjE5NyAzOS4xODY1SDEwNy4yMTVWMzcuNjg2NUgxMDcuMTk3VjM5LjE4NjVaTTEwNy4xNzkgMzkuMTg2NUgxMDcuMTk3VjM3LjY4NjVIMTA3LjE3OVYzOS4xODY1Wk0xMDcuMTYxIDM5LjE4NjVIMTA3LjE3OVYzNy42ODY1SDEwNy4xNjFWMzkuMTg2NVpNMTA3LjE0MiAzOS4xODY1SDEwNy4xNjFWMzcuNjg2NUgxMDcuMTQyVjM5LjE4NjVaTTEwNy4xMjQgMzkuMTg2NUgxMDcuMTQyVjM3LjY4NjVIMTA3LjEyNFYzOS4xODY1Wk0xMDcuMTA2IDM5LjE4NjVIMTA3LjEyNFYzNy42ODY1SDEwNy4xMDZWMzkuMTg2NVpNMTA3LjA4OCAzOS4xODY1SDEwNy4xMDZWMzcuNjg2NUgxMDcuMDg4VjM5LjE4NjVaTTEwNy4wNyAzOS4xODY1SDEwNy4wODhWMzcuNjg2NUgxMDcuMDdWMzkuMTg2NVpNMTA3LjA1MiAzOS4xODY1SDEwNy4wN1YzNy42ODY1SDEwNy4wNTJWMzkuMTg2NVpNMTA3LjAzNCAzOS4xODY1SDEwNy4wNTJWMzcuNjg2NUgxMDcuMDM0VjM5LjE4NjVaTTEwNy4wMTYgMzkuMTg2NUgxMDcuMDM0VjM3LjY4NjVIMTA3LjAxNlYzOS4xODY1Wk0xMDYuOTk4IDM5LjE4NjVIMTA3LjAxNlYzNy42ODY1SDEwNi45OThWMzkuMTg2NVpNMTA2Ljk4MSAzOS4xODY1SDEwNi45OThWMzcuNjg2NUgxMDYuOTgxVjM5LjE4NjVaTTEwNi45NjMgMzkuMTg2NUgxMDYuOTgxVjM3LjY4NjVIMTA2Ljk2M1YzOS4xODY1Wk0xMDYuOTQ1IDM5LjE4NjVIMTA2Ljk2M1YzNy42ODY1SDEwNi45NDVWMzkuMTg2NVpNMTA2LjkyNyAzOS4xODY1SDEwNi45NDVWMzcuNjg2NUgxMDYuOTI3VjM5LjE4NjVaTTEwNi45MDkgMzkuMTg2NUgxMDYuOTI3VjM3LjY4NjVIMTA2LjkwOVYzOS4xODY1Wk0xMDYuODkxIDM5LjE4NjVIMTA2LjkwOVYzNy42ODY1SDEwNi44OTFWMzkuMTg2NVpNMTA2Ljg3MyAzOS4xODY1SDEwNi44OTFWMzcuNjg2NUgxMDYuODczVjM5LjE4NjVaTTEwNi44NTYgMzkuMTg2NUgxMDYuODczVjM3LjY4NjVIMTA2Ljg1NlYzOS4xODY1Wk0xMDYuODM4IDM5LjE4NjVIMTA2Ljg1NlYzNy42ODY1SDEwNi44MzhWMzkuMTg2NVpNMTA2LjgyIDM5LjE4NjVIMTA2LjgzOFYzNy42ODY1SDEwNi44MlYzOS4xODY1Wk0xMDYuODAyIDM5LjE4NjVIMTA2LjgyVjM3LjY4NjVIMTA2LjgwMlYzOS4xODY1Wk0xMDYuNzg1IDM5LjE4NjVIMTA2LjgwMlYzNy42ODY1SDEwNi43ODVWMzkuMTg2NVpNMTA2Ljc2NyAzOS4xODY1SDEwNi43ODVWMzcuNjg2NUgxMDYuNzY3VjM5LjE4NjVaTTEwNi43NDkgMzkuMTg2NUgxMDYuNzY3VjM3LjY4NjVIMTA2Ljc0OVYzOS4xODY1Wk0xMDYuNzMyIDM5LjE4NjVIMTA2Ljc0OVYzNy42ODY1SDEwNi43MzJWMzkuMTg2NVpNMTA2LjcxNCAzOS4xODY1SDEwNi43MzJWMzcuNjg2NUgxMDYuNzE0VjM5LjE4NjVaTTEwNi42OTcgMzkuMTg2NUgxMDYuNzE0VjM3LjY4NjVIMTA2LjY5N1YzOS4xODY1Wk0xMDYuNjc5IDM5LjE4NjVIMTA2LjY5N1YzNy42ODY1SDEwNi42NzlWMzkuMTg2NVpNMTA2LjY2MSAzOS4xODY1SDEwNi42NzlWMzcuNjg2NUgxMDYuNjYxVjM5LjE4NjVaTTEwNi42NDQgMzkuMTg2NUgxMDYuNjYxVjM3LjY4NjVIMTA2LjY0NFYzOS4xODY1Wk0xMDYuNjI2IDM5LjE4NjVIMTA2LjY0NFYzNy42ODY1SDEwNi42MjZWMzkuMTg2NVpNMTA2LjYwOSAzOS4xODY1SDEwNi42MjZWMzcuNjg2NUgxMDYuNjA5VjM5LjE4NjVaTTEwNi41OTEgMzkuMTg2NUgxMDYuNjA5VjM3LjY4NjVIMTA2LjU5MVYzOS4xODY1Wk0xMDYuNTc0IDM5LjE4NjVIMTA2LjU5MVYzNy42ODY1SDEwNi41NzRWMzkuMTg2NVpNMTA2LjU1NiAzOS4xODY1SDEwNi41NzRWMzcuNjg2NUgxMDYuNTU2VjM5LjE4NjVaTTEwNi41MzkgMzkuMTg2NUgxMDYuNTU2VjM3LjY4NjVIMTA2LjUzOVYzOS4xODY1Wk0xMDYuNTIxIDM5LjE4NjVIMTA2LjUzOVYzNy42ODY1SDEwNi41MjFWMzkuMTg2NVpNMTA2LjUwNCAzOS4xODY1SDEwNi41MjFWMzcuNjg2NUgxMDYuNTA0VjM5LjE4NjVaTTEwNi40ODcgMzkuMTg2NUgxMDYuNTA0VjM3LjY4NjVIMTA2LjQ4N1YzOS4xODY1Wk0xMDYuNDY5IDM5LjE4NjVIMTA2LjQ4N1YzNy42ODY1SDEwNi40NjlWMzkuMTg2NVpNMTA2LjQ1MiAzOS4xODY1SDEwNi40NjlWMzcuNjg2NUgxMDYuNDUyVjM5LjE4NjVaTTEwNi40MzUgMzkuMTg2NUgxMDYuNDUyVjM3LjY4NjVIMTA2LjQzNVYzOS4xODY1Wk0xMDYuNDE3IDM5LjE4NjVIMTA2LjQzNVYzNy42ODY1SDEwNi40MTdWMzkuMTg2NVpNMTA2LjQgMzkuMTg2NUgxMDYuNDE3VjM3LjY4NjVIMTA2LjRWMzkuMTg2NVpNMTA2LjM4MyAzOS4xODY1SDEwNi40VjM3LjY4NjVIMTA2LjM4M1YzOS4xODY1Wk0xMDYuMzY2IDM5LjE4NjVIMTA2LjM4M1YzNy42ODY1SDEwNi4zNjZWMzkuMTg2NVpNMTA2LjM0OCAzOS4xODY1SDEwNi4zNjZWMzcuNjg2NUgxMDYuMzQ4VjM5LjE4NjVaTTEwNi4zMzEgMzkuMTg2NUgxMDYuMzQ4VjM3LjY4NjVIMTA2LjMzMVYzOS4xODY1Wk0xMDYuMzE0IDM5LjE4NjVIMTA2LjMzMVYzNy42ODY1SDEwNi4zMTRWMzkuMTg2NVpNMTA2LjI5NyAzOS4xODY1SDEwNi4zMTRWMzcuNjg2NUgxMDYuMjk3VjM5LjE4NjVaTTEwNi4yOCAzOS4xODY1SDEwNi4yOTdWMzcuNjg2NUgxMDYuMjhWMzkuMTg2NVpNMTA2LjI2MiAzOS4xODY1SDEwNi4yOFYzNy42ODY1SDEwNi4yNjJWMzkuMTg2NVpNMTA2LjI0NSAzOS4xODY1SDEwNi4yNjJWMzcuNjg2NUgxMDYuMjQ1VjM5LjE4NjVaTTEwNi4yMjggMzkuMTg2NUgxMDYuMjQ1VjM3LjY4NjVIMTA2LjIyOFYzOS4xODY1Wk0xMDYuMjExIDM5LjE4NjVIMTA2LjIyOFYzNy42ODY1SDEwNi4yMTFWMzkuMTg2NVpNMTA2LjE5NCAzOS4xODY1SDEwNi4yMTFWMzcuNjg2NUgxMDYuMTk0VjM5LjE4NjVaTTEwNi4xNzcgMzkuMTg2NUgxMDYuMTk0VjM3LjY4NjVIMTA2LjE3N1YzOS4xODY1Wk0xMDYuMTYgMzkuMTg2NUgxMDYuMTc3VjM3LjY4NjVIMTA2LjE2VjM5LjE4NjVaTTEwNi4xNDMgMzkuMTg2NUgxMDYuMTZWMzcuNjg2NUgxMDYuMTQzVjM5LjE4NjVaTTEwNi4xMjYgMzkuMTg2NUgxMDYuMTQzVjM3LjY4NjVIMTA2LjEyNlYzOS4xODY1Wk0xMDYuMTA5IDM5LjE4NjVIMTA2LjEyNlYzNy42ODY1SDEwNi4xMDlWMzkuMTg2NVpNMTA2LjA5MiAzOS4xODY1SDEwNi4xMDlWMzcuNjg2NUgxMDYuMDkyVjM5LjE4NjVaTTEwNi4wNzUgMzkuMTg2NUgxMDYuMDkyVjM3LjY4NjVIMTA2LjA3NVYzOS4xODY1Wk0xMDYuMDU4IDM5LjE4NjVIMTA2LjA3NVYzNy42ODY1SDEwNi4wNThWMzkuMTg2NVpNMTA2LjA0MSAzOS4xODY1SDEwNi4wNThWMzcuNjg2NUgxMDYuMDQxVjM5LjE4NjVaTTEwNi4wMjUgMzkuMTg2NUgxMDYuMDQxVjM3LjY4NjVIMTA2LjAyNVYzOS4xODY1Wk0xMDYuMDA4IDM5LjE4NjVIMTA2LjAyNVYzNy42ODY1SDEwNi4wMDhWMzkuMTg2NVpNMTA1Ljk5MSAzOS4xODY1SDEwNi4wMDhWMzcuNjg2NUgxMDUuOTkxVjM5LjE4NjVaTTEwNS45NzQgMzkuMTg2NUgxMDUuOTkxVjM3LjY4NjVIMTA1Ljk3NFYzOS4xODY1Wk0xMDUuOTU3IDM5LjE4NjVIMTA1Ljk3NFYzNy42ODY1SDEwNS45NTdWMzkuMTg2NVpNMTA1Ljk0IDM5LjE4NjVIMTA1Ljk1N1YzNy42ODY1SDEwNS45NFYzOS4xODY1Wk0xMDUuOTI0IDM5LjE4NjVIMTA1Ljk0VjM3LjY4NjVIMTA1LjkyNFYzOS4xODY1Wk0xMDUuOTA3IDM5LjE4NjVIMTA1LjkyNFYzNy42ODY1SDEwNS45MDdWMzkuMTg2NVpNMTA1Ljg5IDM5LjE4NjVIMTA1LjkwN1YzNy42ODY1SDEwNS44OVYzOS4xODY1Wk0xMDUuODc0IDM5LjE4NjVIMTA1Ljg5VjM3LjY4NjVIMTA1Ljg3NFYzOS4xODY1Wk0xMDUuODU3IDM5LjE4NjVIMTA1Ljg3NFYzNy42ODY1SDEwNS44NTdWMzkuMTg2NVpNMTA1Ljg0IDM5LjE4NjVIMTA1Ljg1N1YzNy42ODY1SDEwNS44NFYzOS4xODY1Wk0xMDUuODI0IDM5LjE4NjVIMTA1Ljg0VjM3LjY4NjVIMTA1LjgyNFYzOS4xODY1Wk0xMDUuODA3IDM5LjE4NjVIMTA1LjgyNFYzNy42ODY1SDEwNS44MDdWMzkuMTg2NVpNMTA1Ljc5IDM5LjE4NjVIMTA1LjgwN1YzNy42ODY1SDEwNS43OVYzOS4xODY1Wk0xMDUuNzc0IDM5LjE4NjVIMTA1Ljc5VjM3LjY4NjVIMTA1Ljc3NFYzOS4xODY1Wk0xMDUuNzU3IDM5LjE4NjVIMTA1Ljc3NFYzNy42ODY1SDEwNS43NTdWMzkuMTg2NVpNMTA1Ljc0MSAzOS4xODY1SDEwNS43NTdWMzcuNjg2NUgxMDUuNzQxVjM5LjE4NjVaTTEwNS43MjQgMzkuMTg2NUgxMDUuNzQxVjM3LjY4NjVIMTA1LjcyNFYzOS4xODY1Wk0xMDUuNzA4IDM5LjE4NjVIMTA1LjcyNFYzNy42ODY1SDEwNS43MDhWMzkuMTg2NVpNMTA1LjY5MSAzOS4xODY1SDEwNS43MDhWMzcuNjg2NUgxMDUuNjkxVjM5LjE4NjVaTTEwNS42NzUgMzkuMTg2NUgxMDUuNjkxVjM3LjY4NjVIMTA1LjY3NVYzOS4xODY1Wk0xMDUuNjU4IDM5LjE4NjVIMTA1LjY3NVYzNy42ODY1SDEwNS42NThWMzkuMTg2NVpNMTA1LjY0MiAzOS4xODY1SDEwNS42NThWMzcuNjg2NUgxMDUuNjQyVjM5LjE4NjVaTTEwNS42MjUgMzkuMTg2NUgxMDUuNjQyVjM3LjY4NjVIMTA1LjYyNVYzOS4xODY1Wk0xMDUuNjA5IDM5LjE4NjVIMTA1LjYyNVYzNy42ODY1SDEwNS42MDlWMzkuMTg2NVpNMTA1LjU5MyAzOS4xODY1SDEwNS42MDlWMzcuNjg2NUgxMDUuNTkzVjM5LjE4NjVaTTEwNS41NzYgMzkuMTg2NUgxMDUuNTkzVjM3LjY4NjVIMTA1LjU3NlYzOS4xODY1Wk0xMDUuNTYgMzkuMTg2NUgxMDUuNTc2VjM3LjY4NjVIMTA1LjU2VjM5LjE4NjVaTTEwNS41NDQgMzkuMTg2NUgxMDUuNTZWMzcuNjg2NUgxMDUuNTQ0VjM5LjE4NjVaTTEwNS41MjcgMzkuMTg2NUgxMDUuNTQ0VjM3LjY4NjVIMTA1LjUyN1YzOS4xODY1Wk0xMDUuNTExIDM5LjE4NjVIMTA1LjUyN1YzNy42ODY1SDEwNS41MTFWMzkuMTg2NVpNMTA1LjQ5NSAzOS4xODY1SDEwNS41MTFWMzcuNjg2NUgxMDUuNDk1VjM5LjE4NjVaTTEwNS40NzggMzkuMTg2NUgxMDUuNDk1VjM3LjY4NjVIMTA1LjQ3OFYzOS4xODY1Wk0xMDUuNDYyIDM5LjE4NjVIMTA1LjQ3OFYzNy42ODY1SDEwNS40NjJWMzkuMTg2NVpNMTA1LjQ0NiAzOS4xODY1SDEwNS40NjJWMzcuNjg2NUgxMDUuNDQ2VjM5LjE4NjVaTTEwNS40MyAzOS4xODY1SDEwNS40NDZWMzcuNjg2NUgxMDUuNDNWMzkuMTg2NVpNMTA1LjQxNCAzOS4xODY1SDEwNS40M1YzNy42ODY1SDEwNS40MTRWMzkuMTg2NVpNMTA1LjM5OCAzOS4xODY1SDEwNS40MTRWMzcuNjg2NUgxMDUuMzk4VjM5LjE4NjVaTTEwNS4zODEgMzkuMTg2NUgxMDUuMzk4VjM3LjY4NjVIMTA1LjM4MVYzOS4xODY1Wk0xMDUuMzY1IDM5LjE4NjVIMTA1LjM4MVYzNy42ODY1SDEwNS4zNjVWMzkuMTg2NVpNMTA1LjM0OSAzOS4xODY1SDEwNS4zNjVWMzcuNjg2NUgxMDUuMzQ5VjM5LjE4NjVaTTEwNS4zMzMgMzkuMTg2NUgxMDUuMzQ5VjM3LjY4NjVIMTA1LjMzM1YzOS4xODY1Wk0xMDUuMzE3IDM5LjE4NjVIMTA1LjMzM1YzNy42ODY1SDEwNS4zMTdWMzkuMTg2NVpNMTA1LjMwMSAzOS4xODY1SDEwNS4zMTdWMzcuNjg2NUgxMDUuMzAxVjM5LjE4NjVaTTEwNS4yODUgMzkuMTg2NUgxMDUuMzAxVjM3LjY4NjVIMTA1LjI4NVYzOS4xODY1Wk0xMDUuMjY5IDM5LjE4NjVIMTA1LjI4NVYzNy42ODY1SDEwNS4yNjlWMzkuMTg2NVpNMTA1LjI1MyAzOS4xODY1SDEwNS4yNjlWMzcuNjg2NUgxMDUuMjUzVjM5LjE4NjVaTTEwNS4yMzcgMzkuMTg2NUgxMDUuMjUzVjM3LjY4NjVIMTA1LjIzN1YzOS4xODY1Wk0xMDUuMjIxIDM5LjE4NjVIMTA1LjIzN1YzNy42ODY1SDEwNS4yMjFWMzkuMTg2NVpNMTA1LjIwNSAzOS4xODY1SDEwNS4yMjFWMzcuNjg2NUgxMDUuMjA1VjM5LjE4NjVaTTEwNS4xODkgMzkuMTg2NUgxMDUuMjA1VjM3LjY4NjVIMTA1LjE4OVYzOS4xODY1Wk0xMDUuMTczIDM5LjE4NjVIMTA1LjE4OVYzNy42ODY1SDEwNS4xNzNWMzkuMTg2NVpNMTA1LjE1OCAzOS4xODY1SDEwNS4xNzNWMzcuNjg2NUgxMDUuMTU4VjM5LjE4NjVaTTEwNS4xNDIgMzkuMTg2NUgxMDUuMTU4VjM3LjY4NjVIMTA1LjE0MlYzOS4xODY1Wk0xMDUuMTI2IDM5LjE4NjVIMTA1LjE0MlYzNy42ODY1SDEwNS4xMjZWMzkuMTg2NVpNMTA1LjExIDM5LjE4NjVIMTA1LjEyNlYzNy42ODY1SDEwNS4xMVYzOS4xODY1Wk0xMDUuMDk0IDM5LjE4NjVIMTA1LjExVjM3LjY4NjVIMTA1LjA5NFYzOS4xODY1Wk0xMDUuMDc4IDM5LjE4NjVIMTA1LjA5NFYzNy42ODY1SDEwNS4wNzhWMzkuMTg2NVpNMTA1LjA2MyAzOS4xODY1SDEwNS4wNzhWMzcuNjg2NUgxMDUuMDYzVjM5LjE4NjVaTTEwNS4wNDcgMzkuMTg2NUgxMDUuMDYzVjM3LjY4NjVIMTA1LjA0N1YzOS4xODY1Wk0xMDUuMDMxIDM5LjE4NjVIMTA1LjA0N1YzNy42ODY1SDEwNS4wMzFWMzkuMTg2NVpNMTA1LjAxNiAzOS4xODY1SDEwNS4wMzFWMzcuNjg2NUgxMDUuMDE2VjM5LjE4NjVaTTEwNSAzOS4xODY1SDEwNS4wMTZWMzcuNjg2NUgxMDVWMzkuMTg2NVpNMTA0Ljk4NCAzOS4xODY1SDEwNVYzNy42ODY1SDEwNC45ODRWMzkuMTg2NVpNMTA0Ljk2OSAzOS4xODY1SDEwNC45ODRWMzcuNjg2NUgxMDQuOTY5VjM5LjE4NjVaTTEwNC45NTMgMzkuMTg2NUgxMDQuOTY5VjM3LjY4NjVIMTA0Ljk1M1YzOS4xODY1Wk0xMDQuOTM3IDM5LjE4NjVIMTA0Ljk1M1YzNy42ODY1SDEwNC45MzdWMzkuMTg2NVpNMTA0LjkyMiAzOS4xODY1SDEwNC45MzdWMzcuNjg2NUgxMDQuOTIyVjM5LjE4NjVaTTEwNC45MDYgMzkuMTg2NUgxMDQuOTIyVjM3LjY4NjVIMTA0LjkwNlYzOS4xODY1Wk0xMDQuODkxIDM5LjE4NjVIMTA0LjkwNlYzNy42ODY1SDEwNC44OTFWMzkuMTg2NVpNMTA0Ljg3NSAzOS4xODY1SDEwNC44OTFWMzcuNjg2NUgxMDQuODc1VjM5LjE4NjVaTTEwNC44NiAzOS4xODY1SDEwNC44NzVWMzcuNjg2NUgxMDQuODZWMzkuMTg2NVpNMTA0Ljg0NCAzOS4xODY1SDEwNC44NlYzNy42ODY1SDEwNC44NDRWMzkuMTg2NVpNMTA0LjgyOSAzOS4xODY1SDEwNC44NDRWMzcuNjg2NUgxMDQuODI5VjM5LjE4NjVaTTEwNC44MTMgMzkuMTg2NUgxMDQuODI5VjM3LjY4NjVIMTA0LjgxM1YzOS4xODY1Wk0xMDQuNzk4IDM5LjE4NjVIMTA0LjgxM1YzNy42ODY1SDEwNC43OThWMzkuMTg2NVpNMTA0Ljc4MiAzOS4xODY1SDEwNC43OThWMzcuNjg2NUgxMDQuNzgyVjM5LjE4NjVaTTEwNC43NjcgMzkuMTg2NUgxMDQuNzgyVjM3LjY4NjVIMTA0Ljc2N1YzOS4xODY1Wk0xMDQuNzUyIDM5LjE4NjVIMTA0Ljc2N1YzNy42ODY1SDEwNC43NTJWMzkuMTg2NVpNMTA0LjczNiAzOS4xODY1SDEwNC43NTJWMzcuNjg2NUgxMDQuNzM2VjM5LjE4NjVaTTEwNC43MjEgMzkuMTg2NUgxMDQuNzM2VjM3LjY4NjVIMTA0LjcyMVYzOS4xODY1Wk0xMDQuNzA2IDM5LjE4NjVIMTA0LjcyMVYzNy42ODY1SDEwNC43MDZWMzkuMTg2NVpNMTA0LjY5IDM5LjE4NjVIMTA0LjcwNlYzNy42ODY1SDEwNC42OVYzOS4xODY1Wk0xMDQuNjc1IDM5LjE4NjVIMTA0LjY5VjM3LjY4NjVIMTA0LjY3NVYzOS4xODY1Wk0xMDQuNjYgMzkuMTg2NUgxMDQuNjc1VjM3LjY4NjVIMTA0LjY2VjM5LjE4NjVaTTEwNC42NDUgMzkuMTg2NUgxMDQuNjZWMzcuNjg2NUgxMDQuNjQ1VjM5LjE4NjVaTTEwNC42MjkgMzkuMTg2NUgxMDQuNjQ1VjM3LjY4NjVIMTA0LjYyOVYzOS4xODY1Wk0xMDQuNjE0IDM5LjE4NjVIMTA0LjYyOVYzNy42ODY1SDEwNC42MTRWMzkuMTg2NVpNMTA0LjU5OSAzOS4xODY1SDEwNC42MTRWMzcuNjg2NUgxMDQuNTk5VjM5LjE4NjVaTTEwNC41ODQgMzkuMTg2NUgxMDQuNTk5VjM3LjY4NjVIMTA0LjU4NFYzOS4xODY1Wk0xMDQuNTY5IDM5LjE4NjVIMTA0LjU4NFYzNy42ODY1SDEwNC41NjlWMzkuMTg2NVpNMTA0LjU1NCAzOS4xODY1SDEwNC41NjlWMzcuNjg2NUgxMDQuNTU0VjM5LjE4NjVaTTEwNC41MzggMzkuMTg2NUgxMDQuNTU0VjM3LjY4NjVIMTA0LjUzOFYzOS4xODY1Wk0xMDQuNTIzIDM5LjE4NjVIMTA0LjUzOFYzNy42ODY1SDEwNC41MjNWMzkuMTg2NVpNMTA0LjUwOCAzOS4xODY1SDEwNC41MjNWMzcuNjg2NUgxMDQuNTA4VjM5LjE4NjVaTTEwNC40OTMgMzkuMTg2NUgxMDQuNTA4VjM3LjY4NjVIMTA0LjQ5M1YzOS4xODY1Wk0xMDQuNDc4IDM5LjE4NjVIMTA0LjQ5M1YzNy42ODY1SDEwNC40NzhWMzkuMTg2NVpNMTA0LjQ2MyAzOS4xODY1SDEwNC40NzhWMzcuNjg2NUgxMDQuNDYzVjM5LjE4NjVaTTEwNC40NDggMzkuMTg2NUgxMDQuNDYzVjM3LjY4NjVIMTA0LjQ0OFYzOS4xODY1Wk0xMDQuNDMzIDM5LjE4NjVIMTA0LjQ0OFYzNy42ODY1SDEwNC40MzNWMzkuMTg2NVpNMTA0LjQxOCAzOS4xODY1SDEwNC40MzNWMzcuNjg2NUgxMDQuNDE4VjM5LjE4NjVaTTEwNC40MDMgMzkuMTg2NUgxMDQuNDE4VjM3LjY4NjVIMTA0LjQwM1YzOS4xODY1Wk0xMDQuMzg4IDM5LjE4NjVIMTA0LjQwM1YzNy42ODY1SDEwNC4zODhWMzkuMTg2NVpNMTA0LjM3MyAzOS4xODY1SDEwNC4zODhWMzcuNjg2NUgxMDQuMzczVjM5LjE4NjVaTTEwNC4zNTkgMzkuMTg2NUgxMDQuMzczVjM3LjY4NjVIMTA0LjM1OVYzOS4xODY1Wk0xMDQuMzQ0IDM5LjE4NjVIMTA0LjM1OVYzNy42ODY1SDEwNC4zNDRWMzkuMTg2NVpNMTA0LjMyOSAzOS4xODY1SDEwNC4zNDRWMzcuNjg2NUgxMDQuMzI5VjM5LjE4NjVaTTEwNC4zMTQgMzkuMTg2NUgxMDQuMzI5VjM3LjY4NjVIMTA0LjMxNFYzOS4xODY1Wk0xMDQuMjk5IDM5LjE4NjVIMTA0LjMxNFYzNy42ODY1SDEwNC4yOTlWMzkuMTg2NVpNMTA0LjI4NCAzOS4xODY1SDEwNC4yOTlWMzcuNjg2NUgxMDQuMjg0VjM5LjE4NjVaTTEwNC4yNyAzOS4xODY1SDEwNC4yODRWMzcuNjg2NUgxMDQuMjdWMzkuMTg2NVpNMTA0LjI1NSAzOS4xODY1SDEwNC4yN1YzNy42ODY1SDEwNC4yNTVWMzkuMTg2NVpNMTA0LjI0IDM5LjE4NjVIMTA0LjI1NVYzNy42ODY1SDEwNC4yNFYzOS4xODY1Wk0xMDQuMjI2IDM5LjE4NjVIMTA0LjI0VjM3LjY4NjVIMTA0LjIyNlYzOS4xODY1Wk0xMDQuMjExIDM5LjE4NjVIMTA0LjIyNlYzNy42ODY1SDEwNC4yMTFWMzkuMTg2NVpNMTA0LjE5NiAzOS4xODY1SDEwNC4yMTFWMzcuNjg2NUgxMDQuMTk2VjM5LjE4NjVaTTEwNC4xODIgMzkuMTg2NUgxMDQuMTk2VjM3LjY4NjVIMTA0LjE4MlYzOS4xODY1Wk0xMDQuMTY3IDM5LjE4NjVIMTA0LjE4MlYzNy42ODY1SDEwNC4xNjdWMzkuMTg2NVpNMTA0LjE1MiAzOS4xODY1SDEwNC4xNjdWMzcuNjg2NUgxMDQuMTUyVjM5LjE4NjVaTTEwNC4xMzggMzkuMTg2NUgxMDQuMTUyVjM3LjY4NjVIMTA0LjEzOFYzOS4xODY1Wk0xMDQuMTIzIDM5LjE4NjVIMTA0LjEzOFYzNy42ODY1SDEwNC4xMjNWMzkuMTg2NVpNMTA0LjEwOSAzOS4xODY1SDEwNC4xMjNWMzcuNjg2NUgxMDQuMTA5VjM5LjE4NjVaTTEwNC4wOTQgMzkuMTg2NUgxMDQuMTA5VjM3LjY4NjVIMTA0LjA5NFYzOS4xODY1Wk0xMDQuMDc5IDM5LjE4NjVIMTA0LjA5NFYzNy42ODY1SDEwNC4wNzlWMzkuMTg2NVpNMTA0LjA2NSAzOS4xODY1SDEwNC4wNzlWMzcuNjg2NUgxMDQuMDY1VjM5LjE4NjVaTTEwNC4wNSAzOS4xODY1SDEwNC4wNjVWMzcuNjg2NUgxMDQuMDVWMzkuMTg2NVpNMTA0LjAzNiAzOS4xODY1SDEwNC4wNVYzNy42ODY1SDEwNC4wMzZWMzkuMTg2NVpNMTA0LjAyMiAzOS4xODY1SDEwNC4wMzZWMzcuNjg2NUgxMDQuMDIyVjM5LjE4NjVaTTEwNC4wMDcgMzkuMTg2NUgxMDQuMDIyVjM3LjY4NjVIMTA0LjAwN1YzOS4xODY1Wk0xMDMuOTkzIDM5LjE4NjVIMTA0LjAwN1YzNy42ODY1SDEwMy45OTNWMzkuMTg2NVpNMTAzLjk3OCAzOS4xODY1SDEwMy45OTNWMzcuNjg2NUgxMDMuOTc4VjM5LjE4NjVaTTEwMy45NjQgMzkuMTg2NUgxMDMuOTc4VjM3LjY4NjVIMTAzLjk2NFYzOS4xODY1Wk0xMDMuOTUgMzkuMTg2NUgxMDMuOTY0VjM3LjY4NjVIMTAzLjk1VjM5LjE4NjVaTTEwMy45MzUgMzkuMTg2NUgxMDMuOTVWMzcuNjg2NUgxMDMuOTM1VjM5LjE4NjVaTTEwMy45MjEgMzkuMTg2NUgxMDMuOTM1VjM3LjY4NjVIMTAzLjkyMVYzOS4xODY1Wk0xMDMuOTA3IDM5LjE4NjVIMTAzLjkyMVYzNy42ODY1SDEwMy45MDdWMzkuMTg2NVpNMTAzLjg5MiAzOS4xODY1SDEwMy45MDdWMzcuNjg2NUgxMDMuODkyVjM5LjE4NjVaTTEwMy44NzggMzkuMTg2NUgxMDMuODkyVjM3LjY4NjVIMTAzLjg3OFYzOS4xODY1Wk0xMDMuODY0IDM5LjE4NjVIMTAzLjg3OFYzNy42ODY1SDEwMy44NjRWMzkuMTg2NVpNMTAzLjg1IDM5LjE4NjVIMTAzLjg2NFYzNy42ODY1SDEwMy44NVYzOS4xODY1Wk0xMDMuODM2IDM5LjE4NjVIMTAzLjg1VjM3LjY4NjVIMTAzLjgzNlYzOS4xODY1Wk0xMDMuODIxIDM5LjE4NjVIMTAzLjgzNlYzNy42ODY1SDEwMy44MjFWMzkuMTg2NVpNMTAzLjgwNyAzOS4xODY1SDEwMy44MjFWMzcuNjg2NUgxMDMuODA3VjM5LjE4NjVaTTEwMy43OTMgMzkuMTg2NUgxMDMuODA3VjM3LjY4NjVIMTAzLjc5M1YzOS4xODY1Wk0xMDMuNzc5IDM5LjE4NjVIMTAzLjc5M1YzNy42ODY1SDEwMy43NzlWMzkuMTg2NVpNMTAzLjc2NSAzOS4xODY1SDEwMy43NzlWMzcuNjg2NUgxMDMuNzY1VjM5LjE4NjVaTTEwMy43NTEgMzkuMTg2NUgxMDMuNzY1VjM3LjY4NjVIMTAzLjc1MVYzOS4xODY1Wk0xMDMuNzM3IDM5LjE4NjVIMTAzLjc1MVYzNy42ODY1SDEwMy43MzdWMzkuMTg2NVpNMTAzLjcyMyAzOS4xODY1SDEwMy43MzdWMzcuNjg2NUgxMDMuNzIzVjM5LjE4NjVaTTEwMy43MDkgMzkuMTg2NUgxMDMuNzIzVjM3LjY4NjVIMTAzLjcwOVYzOS4xODY1Wk0xMDMuNjk1IDM5LjE4NjVIMTAzLjcwOVYzNy42ODY1SDEwMy42OTVWMzkuMTg2NVpNMTAzLjY4MSAzOS4xODY1SDEwMy42OTVWMzcuNjg2NUgxMDMuNjgxVjM5LjE4NjVaTTEwMy42NjcgMzkuMTg2NUgxMDMuNjgxVjM3LjY4NjVIMTAzLjY2N1YzOS4xODY1Wk0xMDMuNjUzIDM5LjE4NjVIMTAzLjY2N1YzNy42ODY1SDEwMy42NTNWMzkuMTg2NVpNMTAzLjYzOSAzOS4xODY1SDEwMy42NTNWMzcuNjg2NUgxMDMuNjM5VjM5LjE4NjVaTTEwMy42MjUgMzkuMTg2NUgxMDMuNjM5VjM3LjY4NjVIMTAzLjYyNVYzOS4xODY1Wk0xMDMuNjExIDM5LjE4NjVIMTAzLjYyNVYzNy42ODY1SDEwMy42MTFWMzkuMTg2NVpNMTAzLjU5NyAzOS4xODY1SDEwMy42MTFWMzcuNjg2NUgxMDMuNTk3VjM5LjE4NjVaTTEwMy41ODMgMzkuMTg2NUgxMDMuNTk3VjM3LjY4NjVIMTAzLjU4M1YzOS4xODY1Wk0xMDMuNTY5IDM5LjE4NjVIMTAzLjU4M1YzNy42ODY1SDEwMy41NjlWMzkuMTg2NVpNMTAzLjU1NiAzOS4xODY1SDEwMy41NjlWMzcuNjg2NUgxMDMuNTU2VjM5LjE4NjVaTTEwMy41NDIgMzkuMTg2NUgxMDMuNTU2VjM3LjY4NjVIMTAzLjU0MlYzOS4xODY1Wk0xMDMuNTI4IDM5LjE4NjVIMTAzLjU0MlYzNy42ODY1SDEwMy41MjhWMzkuMTg2NVpNMTAzLjUxNCAzOS4xODY1SDEwMy41MjhWMzcuNjg2NUgxMDMuNTE0VjM5LjE4NjVaTTEwMy41IDM5LjE4NjVIMTAzLjUxNFYzNy42ODY1SDEwMy41VjM5LjE4NjVaTTEwMy40ODcgMzkuMTg2NUgxMDMuNVYzNy42ODY1SDEwMy40ODdWMzkuMTg2NVpNMTAzLjQ3MyAzOS4xODY1SDEwMy40ODdWMzcuNjg2NUgxMDMuNDczVjM5LjE4NjVaTTEwMy40NTkgMzkuMTg2NUgxMDMuNDczVjM3LjY4NjVIMTAzLjQ1OVYzOS4xODY1Wk0xMDMuNDQ2IDM5LjE4NjVIMTAzLjQ1OVYzNy42ODY1SDEwMy40NDZWMzkuMTg2NVpNMTAzLjQzMiAzOS4xODY1SDEwMy40NDZWMzcuNjg2NUgxMDMuNDMyVjM5LjE4NjVaTTEwMy40MTggMzkuMTg2NUgxMDMuNDMyVjM3LjY4NjVIMTAzLjQxOFYzOS4xODY1Wk0xMDMuNDA1IDM5LjE4NjVIMTAzLjQxOFYzNy42ODY1SDEwMy40MDVWMzkuMTg2NVpNMTAzLjM5MSAzOS4xODY1SDEwMy40MDVWMzcuNjg2NUgxMDMuMzkxVjM5LjE4NjVaTTEwMy4zNzggMzkuMTg2NUgxMDMuMzkxVjM3LjY4NjVIMTAzLjM3OFYzOS4xODY1Wk0xMDMuMzY0IDM5LjE4NjVIMTAzLjM3OFYzNy42ODY1SDEwMy4zNjRWMzkuMTg2NVpNMTAzLjM1MSAzOS4xODY1SDEwMy4zNjRWMzcuNjg2NUgxMDMuMzUxVjM5LjE4NjVaTTEwMy4zMzcgMzkuMTg2NUgxMDMuMzUxVjM3LjY4NjVIMTAzLjMzN1YzOS4xODY1Wk0xMDMuMzI0IDM5LjE4NjVIMTAzLjMzN1YzNy42ODY1SDEwMy4zMjRWMzkuMTg2NVpNMTAzLjMxIDM5LjE4NjVIMTAzLjMyNFYzNy42ODY1SDEwMy4zMVYzOS4xODY1Wk0xMDMuMjk3IDM5LjE4NjVIMTAzLjMxVjM3LjY4NjVIMTAzLjI5N1YzOS4xODY1Wk0xMDMuMjgzIDM5LjE4NjVIMTAzLjI5N1YzNy42ODY1SDEwMy4yODNWMzkuMTg2NVpNMTAzLjI3IDM5LjE4NjVIMTAzLjI4M1YzNy42ODY1SDEwMy4yN1YzOS4xODY1Wk0xMDMuMjU2IDM5LjE4NjVIMTAzLjI3VjM3LjY4NjVIMTAzLjI1NlYzOS4xODY1Wk0xMDMuMjQzIDM5LjE4NjVIMTAzLjI1NlYzNy42ODY1SDEwMy4yNDNWMzkuMTg2NVpNMTAzLjIzIDM5LjE4NjVIMTAzLjI0M1YzNy42ODY1SDEwMy4yM1YzOS4xODY1Wk0xMDMuMjE2IDM5LjE4NjVIMTAzLjIzVjM3LjY4NjVIMTAzLjIxNlYzOS4xODY1Wk0xMDMuMjAzIDM5LjE4NjVIMTAzLjIxNlYzNy42ODY1SDEwMy4yMDNWMzkuMTg2NVpNMTAzLjE5IDM5LjE4NjVIMTAzLjIwM1YzNy42ODY1SDEwMy4xOVYzOS4xODY1Wk0xMDMuMTc2IDM5LjE4NjVIMTAzLjE5VjM3LjY4NjVIMTAzLjE3NlYzOS4xODY1Wk0xMDMuMTYzIDM5LjE4NjVIMTAzLjE3NlYzNy42ODY1SDEwMy4xNjNWMzkuMTg2NVpNMTAzLjE1IDM5LjE4NjVIMTAzLjE2M1YzNy42ODY1SDEwMy4xNVYzOS4xODY1Wk0xMDMuMTM3IDM5LjE4NjVIMTAzLjE1VjM3LjY4NjVIMTAzLjEzN1YzOS4xODY1Wk0xMDMuMTIzIDM5LjE4NjVIMTAzLjEzN1YzNy42ODY1SDEwMy4xMjNWMzkuMTg2NVpNMTAzLjExIDM5LjE4NjVIMTAzLjEyM1YzNy42ODY1SDEwMy4xMVYzOS4xODY1Wk0xMDMuMDk3IDM5LjE4NjVIMTAzLjExVjM3LjY4NjVIMTAzLjA5N1YzOS4xODY1Wk0xMDMuMDg0IDM5LjE4NjVIMTAzLjA5N1YzNy42ODY1SDEwMy4wODRWMzkuMTg2NVpNMTAzLjA3MSAzOS4xODY1SDEwMy4wODRWMzcuNjg2NUgxMDMuMDcxVjM5LjE4NjVaTTEwMy4wNTggMzkuMTg2NUgxMDMuMDcxVjM3LjY4NjVIMTAzLjA1OFYzOS4xODY1Wk0xMDMuMDQ0IDM5LjE4NjVIMTAzLjA1OFYzNy42ODY1SDEwMy4wNDRWMzkuMTg2NVpNMTAzLjAzMSAzOS4xODY1SDEwMy4wNDRWMzcuNjg2NUgxMDMuMDMxVjM5LjE4NjVaTTEwMy4wMTggMzkuMTg2NUgxMDMuMDMxVjM3LjY4NjVIMTAzLjAxOFYzOS4xODY1Wk0xMDMuMDA1IDM5LjE4NjVIMTAzLjAxOFYzNy42ODY1SDEwMy4wMDVWMzkuMTg2NVpNMTAyLjk5MiAzOS4xODY1SDEwMy4wMDVWMzcuNjg2NUgxMDIuOTkyVjM5LjE4NjVaTTEwMi45NzkgMzkuMTg2NUgxMDIuOTkyVjM3LjY4NjVIMTAyLjk3OVYzOS4xODY1Wk0xMDIuOTY2IDM5LjE4NjVIMTAyLjk3OVYzNy42ODY1SDEwMi45NjZWMzkuMTg2NVpNMTAyLjk1MyAzOS4xODY1SDEwMi45NjZWMzcuNjg2NUgxMDIuOTUzVjM5LjE4NjVaTTEwMi45NCAzOS4xODY1SDEwMi45NTNWMzcuNjg2NUgxMDIuOTRWMzkuMTg2NVpNMTAyLjkyNyAzOS4xODY1SDEwMi45NFYzNy42ODY1SDEwMi45MjdWMzkuMTg2NVpNMTAyLjkxNCAzOS4xODY1SDEwMi45MjdWMzcuNjg2NUgxMDIuOTE0VjM5LjE4NjVaTTEwMi45MDIgMzkuMTg2NUgxMDIuOTE0VjM3LjY4NjVIMTAyLjkwMlYzOS4xODY1Wk0xMDIuODg5IDM5LjE4NjVIMTAyLjkwMlYzNy42ODY1SDEwMi44ODlWMzkuMTg2NVpNMTAyLjg3NiAzOS4xODY1SDEwMi44ODlWMzcuNjg2NUgxMDIuODc2VjM5LjE4NjVaTTEwMi44NjMgMzkuMTg2NUgxMDIuODc2VjM3LjY4NjVIMTAyLjg2M1YzOS4xODY1Wk0xMDIuODUgMzkuMTg2NUgxMDIuODYzVjM3LjY4NjVIMTAyLjg1VjM5LjE4NjVaTTEwMi44MzcgMzkuMTg2NUgxMDIuODVWMzcuNjg2NUgxMDIuODM3VjM5LjE4NjVaTTEwMi44MjUgMzkuMTg2NUgxMDIuODM3VjM3LjY4NjVIMTAyLjgyNVYzOS4xODY1Wk0xMDIuODEyIDM5LjE4NjVIMTAyLjgyNVYzNy42ODY1SDEwMi44MTJWMzkuMTg2NVpNMTAyLjc5OSAzOS4xODY1SDEwMi44MTJWMzcuNjg2NUgxMDIuNzk5VjM5LjE4NjVaTTEwMi43ODYgMzkuMTg2NUgxMDIuNzk5VjM3LjY4NjVIMTAyLjc4NlYzOS4xODY1Wk0xMDIuNzc0IDM5LjE4NjVIMTAyLjc4NlYzNy42ODY1SDEwMi43NzRWMzkuMTg2NVpNMTAyLjc2MSAzOS4xODY1SDEwMi43NzRWMzcuNjg2NUgxMDIuNzYxVjM5LjE4NjVaTTEwMi43NDggMzkuMTg2NUgxMDIuNzYxVjM3LjY4NjVIMTAyLjc0OFYzOS4xODY1Wk0xMDIuNzM2IDM5LjE4NjVIMTAyLjc0OFYzNy42ODY1SDEwMi43MzZWMzkuMTg2NVpNMTAyLjcyMyAzOS4xODY1SDEwMi43MzZWMzcuNjg2NUgxMDIuNzIzVjM5LjE4NjVaTTEwMi43MTEgMzkuMTg2NUgxMDIuNzIzVjM3LjY4NjVIMTAyLjcxMVYzOS4xODY1Wk0xMDIuNjk4IDM5LjE4NjVIMTAyLjcxMVYzNy42ODY1SDEwMi42OThWMzkuMTg2NVpNMTAyLjY4NSAzOS4xODY1SDEwMi42OThWMzcuNjg2NUgxMDIuNjg1VjM5LjE4NjVaTTEwMi42NzMgMzkuMTg2NUgxMDIuNjg1VjM3LjY4NjVIMTAyLjY3M1YzOS4xODY1Wk0xMDIuNjYgMzkuMTg2NUgxMDIuNjczVjM3LjY4NjVIMTAyLjY2VjM5LjE4NjVaTTEwMi42NDggMzkuMTg2NUgxMDIuNjZWMzcuNjg2NUgxMDIuNjQ4VjM5LjE4NjVaTTEwMi42MzUgMzkuMTg2NUgxMDIuNjQ4VjM3LjY4NjVIMTAyLjYzNVYzOS4xODY1Wk0xMDIuNjIzIDM5LjE4NjVIMTAyLjYzNVYzNy42ODY1SDEwMi42MjNWMzkuMTg2NVpNMTAyLjYxIDM5LjE4NjVIMTAyLjYyM1YzNy42ODY1SDEwMi42MVYzOS4xODY1Wk0xMDIuNTk4IDM5LjE4NjVIMTAyLjYxVjM3LjY4NjVIMTAyLjU5OFYzOS4xODY1Wk0xMDIuNTg1IDM5LjE4NjVIMTAyLjU5OFYzNy42ODY1SDEwMi41ODVWMzkuMTg2NVpNMTAyLjU3MyAzOS4xODY1SDEwMi41ODVWMzcuNjg2NUgxMDIuNTczVjM5LjE4NjVaTTEwMi41NjEgMzkuMTg2NUgxMDIuNTczVjM3LjY4NjVIMTAyLjU2MVYzOS4xODY1Wk0xMDIuNTQ4IDM5LjE4NjVIMTAyLjU2MVYzNy42ODY1SDEwMi41NDhWMzkuMTg2NVpNMTAyLjUzNiAzOS4xODY1SDEwMi41NDhWMzcuNjg2NUgxMDIuNTM2VjM5LjE4NjVaTTEwMi41MjQgMzkuMTg2NUgxMDIuNTM2VjM3LjY4NjVIMTAyLjUyNFYzOS4xODY1Wk0xMDIuNTExIDM5LjE4NjVIMTAyLjUyNFYzNy42ODY1SDEwMi41MTFWMzkuMTg2NVpNMTAyLjQ5OSAzOS4xODY1SDEwMi41MTFWMzcuNjg2NUgxMDIuNDk5VjM5LjE4NjVaTTEwMi40ODcgMzkuMTg2NUgxMDIuNDk5VjM3LjY4NjVIMTAyLjQ4N1YzOS4xODY1Wk0xMDIuNDc1IDM5LjE4NjVIMTAyLjQ4N1YzNy42ODY1SDEwMi40NzVWMzkuMTg2NVpNMTAyLjQ2MiAzOS4xODY1SDEwMi40NzVWMzcuNjg2NUgxMDIuNDYyVjM5LjE4NjVaTTEwMi40NSAzOS4xODY1SDEwMi40NjJWMzcuNjg2NUgxMDIuNDVWMzkuMTg2NVpNMTAyLjQzOCAzOS4xODY1SDEwMi40NVYzNy42ODY1SDEwMi40MzhWMzkuMTg2NVpNMTAyLjQyNiAzOS4xODY1SDEwMi40MzhWMzcuNjg2NUgxMDIuNDI2VjM5LjE4NjVaTTEwMi40MTQgMzkuMTg2NUgxMDIuNDI2VjM3LjY4NjVIMTAyLjQxNFYzOS4xODY1Wk0xMDIuNDAyIDM5LjE4NjVIMTAyLjQxNFYzNy42ODY1SDEwMi40MDJWMzkuMTg2NVpNMTAyLjM4OSAzOS4xODY1SDEwMi40MDJWMzcuNjg2NUgxMDIuMzg5VjM5LjE4NjVaTTEwMi4zNzcgMzkuMTg2NUgxMDIuMzg5VjM3LjY4NjVIMTAyLjM3N1YzOS4xODY1Wk0xMDIuMzY1IDM5LjE4NjVIMTAyLjM3N1YzNy42ODY1SDEwMi4zNjVWMzkuMTg2NVpNMTAyLjM1MyAzOS4xODY1SDEwMi4zNjVWMzcuNjg2NUgxMDIuMzUzVjM5LjE4NjVaTTEwMi4zNDEgMzkuMTg2NUgxMDIuMzUzVjM3LjY4NjVIMTAyLjM0MVYzOS4xODY1Wk0xMDIuMzI5IDM5LjE4NjVIMTAyLjM0MVYzNy42ODY1SDEwMi4zMjlWMzkuMTg2NVpNMTAyLjMxNyAzOS4xODY1SDEwMi4zMjlWMzcuNjg2NUgxMDIuMzE3VjM5LjE4NjVaTTEwMi4zMDUgMzkuMTg2NUgxMDIuMzE3VjM3LjY4NjVIMTAyLjMwNVYzOS4xODY1Wk0xMDIuMjkzIDM5LjE4NjVIMTAyLjMwNVYzNy42ODY1SDEwMi4yOTNWMzkuMTg2NVpNMTAyLjI4MSAzOS4xODY1SDEwMi4yOTNWMzcuNjg2NUgxMDIuMjgxVjM5LjE4NjVaTTEwMi4yNjkgMzkuMTg2NUgxMDIuMjgxVjM3LjY4NjVIMTAyLjI2OVYzOS4xODY1Wk0xMDIuMjU3IDM5LjE4NjVIMTAyLjI2OVYzNy42ODY1SDEwMi4yNTdWMzkuMTg2NVpNMTAyLjI0NiAzOS4xODY1SDEwMi4yNTdWMzcuNjg2NUgxMDIuMjQ2VjM5LjE4NjVaTTEwMi4yMzQgMzkuMTg2NUgxMDIuMjQ2VjM3LjY4NjVIMTAyLjIzNFYzOS4xODY1Wk0xMDIuMjIyIDM5LjE4NjVIMTAyLjIzNFYzNy42ODY1SDEwMi4yMjJWMzkuMTg2NVpNMTAyLjIxIDM5LjE4NjVIMTAyLjIyMlYzNy42ODY1SDEwMi4yMVYzOS4xODY1Wk0xMDIuMTk4IDM5LjE4NjVIMTAyLjIxVjM3LjY4NjVIMTAyLjE5OFYzOS4xODY1Wk0xMDIuMTg2IDM5LjE4NjVIMTAyLjE5OFYzNy42ODY1SDEwMi4xODZWMzkuMTg2NVpNMTAyLjE3NSAzOS4xODY1SDEwMi4xODZWMzcuNjg2NUgxMDIuMTc1VjM5LjE4NjVaTTEwMi4xNjMgMzkuMTg2NUgxMDIuMTc1VjM3LjY4NjVIMTAyLjE2M1YzOS4xODY1Wk0xMDIuMTUxIDM5LjE4NjVIMTAyLjE2M1YzNy42ODY1SDEwMi4xNTFWMzkuMTg2NVpNMTAyLjEzOSAzOS4xODY1SDEwMi4xNTFWMzcuNjg2NUgxMDIuMTM5VjM5LjE4NjVaTTEwMi4xMjggMzkuMTg2NUgxMDIuMTM5VjM3LjY4NjVIMTAyLjEyOFYzOS4xODY1Wk0xMDIuMTE2IDM5LjE4NjVIMTAyLjEyOFYzNy42ODY1SDEwMi4xMTZWMzkuMTg2NVpNMTAyLjEwNCAzOS4xODY1SDEwMi4xMTZWMzcuNjg2NUgxMDIuMTA0VjM5LjE4NjVaTTEwMi4wOTMgMzkuMTg2NUgxMDIuMTA0VjM3LjY4NjVIMTAyLjA5M1YzOS4xODY1Wk0xMDIuMDgxIDM5LjE4NjVIMTAyLjA5M1YzNy42ODY1SDEwMi4wODFWMzkuMTg2NVpNMTAyLjA2OSAzOS4xODY1SDEwMi4wODFWMzcuNjg2NUgxMDIuMDY5VjM5LjE4NjVaTTEwMi4wNTggMzkuMTg2NUgxMDIuMDY5VjM3LjY4NjVIMTAyLjA1OFYzOS4xODY1Wk0xMDIuMDQ2IDM5LjE4NjVIMTAyLjA1OFYzNy42ODY1SDEwMi4wNDZWMzkuMTg2NVpNMTAyLjAzNSAzOS4xODY1SDEwMi4wNDZWMzcuNjg2NUgxMDIuMDM1VjM5LjE4NjVaTTEwMi4wMjMgMzkuMTg2NUgxMDIuMDM1VjM3LjY4NjVIMTAyLjAyM1YzOS4xODY1Wk0xMDIuMDEyIDM5LjE4NjVIMTAyLjAyM1YzNy42ODY1SDEwMi4wMTJWMzkuMTg2NVpNMTAyIDM5LjE4NjVIMTAyLjAxMlYzNy42ODY1SDEwMlYzOS4xODY1Wk0xMDEuOTg5IDM5LjE4NjVIMTAyVjM3LjY4NjVIMTAxLjk4OVYzOS4xODY1Wk0xMDEuOTc3IDM5LjE4NjVIMTAxLjk4OVYzNy42ODY1SDEwMS45NzdWMzkuMTg2NVpNMTAxLjk2NiAzOS4xODY1SDEwMS45NzdWMzcuNjg2NUgxMDEuOTY2VjM5LjE4NjVaTTEwMS45NTUgMzkuMTg2NUgxMDEuOTY2VjM3LjY4NjVIMTAxLjk1NVYzOS4xODY1Wk0xMDEuOTQzIDM5LjE4NjVIMTAxLjk1NVYzNy42ODY1SDEwMS45NDNWMzkuMTg2NVpNMTAxLjkzMiAzOS4xODY1SDEwMS45NDNWMzcuNjg2NUgxMDEuOTMyVjM5LjE4NjVaTTEwMS45MiAzOS4xODY1SDEwMS45MzJWMzcuNjg2NUgxMDEuOTJWMzkuMTg2NVpNMTAxLjkwOSAzOS4xODY1SDEwMS45MlYzNy42ODY1SDEwMS45MDlWMzkuMTg2NVpNMTAxLjg5OCAzOS4xODY1SDEwMS45MDlWMzcuNjg2NUgxMDEuODk4VjM5LjE4NjVaTTEwMS44ODYgMzkuMTg2NUgxMDEuODk4VjM3LjY4NjVIMTAxLjg4NlYzOS4xODY1Wk0xMDEuODc1IDM5LjE4NjVIMTAxLjg4NlYzNy42ODY1SDEwMS44NzVWMzkuMTg2NVpNMTAxLjg2NCAzOS4xODY1SDEwMS44NzVWMzcuNjg2NUgxMDEuODY0VjM5LjE4NjVaTTEwMS44NTMgMzkuMTg2NUgxMDEuODY0VjM3LjY4NjVIMTAxLjg1M1YzOS4xODY1Wk0xMDEuODQxIDM5LjE4NjVIMTAxLjg1M1YzNy42ODY1SDEwMS44NDFWMzkuMTg2NVpNMTAxLjgzIDM5LjE4NjVIMTAxLjg0MVYzNy42ODY1SDEwMS44M1YzOS4xODY1Wk0xMDEuODE5IDM5LjE4NjVIMTAxLjgzVjM3LjY4NjVIMTAxLjgxOVYzOS4xODY1Wk0xMDEuODA4IDM5LjE4NjVIMTAxLjgxOVYzNy42ODY1SDEwMS44MDhWMzkuMTg2NVpNMTAxLjc5NyAzOS4xODY1SDEwMS44MDhWMzcuNjg2NUgxMDEuNzk3VjM5LjE4NjVaTTEwMS43ODYgMzkuMTg2NUgxMDEuNzk3VjM3LjY4NjVIMTAxLjc4NlYzOS4xODY1Wk0xMDEuNzc0IDM5LjE4NjVIMTAxLjc4NlYzNy42ODY1SDEwMS43NzRWMzkuMTg2NVpNMTAxLjc2MyAzOS4xODY1SDEwMS43NzRWMzcuNjg2NUgxMDEuNzYzVjM5LjE4NjVaTTEwMS43NTIgMzkuMTg2NUgxMDEuNzYzVjM3LjY4NjVIMTAxLjc1MlYzOS4xODY1Wk0xMDEuNzQxIDM5LjE4NjVIMTAxLjc1MlYzNy42ODY1SDEwMS43NDFWMzkuMTg2NVpNMTAxLjczIDM5LjE4NjVIMTAxLjc0MVYzNy42ODY1SDEwMS43M1YzOS4xODY1Wk0xMDEuNzE5IDM5LjE4NjVIMTAxLjczVjM3LjY4NjVIMTAxLjcxOVYzOS4xODY1Wk0xMDEuNzA4IDM5LjE4NjVIMTAxLjcxOVYzNy42ODY1SDEwMS43MDhWMzkuMTg2NVpNMTAxLjY5NyAzOS4xODY1SDEwMS43MDhWMzcuNjg2NUgxMDEuNjk3VjM5LjE4NjVaTTEwMS42ODYgMzkuMTg2NUgxMDEuNjk3VjM3LjY4NjVIMTAxLjY4NlYzOS4xODY1Wk0xMDEuNjc1IDM5LjE4NjVIMTAxLjY4NlYzNy42ODY1SDEwMS42NzVWMzkuMTg2NVpNMTAxLjY2NCAzOS4xODY1SDEwMS42NzVWMzcuNjg2NUgxMDEuNjY0VjM5LjE4NjVaTTEwMS42NTQgMzkuMTg2NUgxMDEuNjY0VjM3LjY4NjVIMTAxLjY1NFYzOS4xODY1Wk0xMDEuNjQzIDM5LjE4NjVIMTAxLjY1NFYzNy42ODY1SDEwMS42NDNWMzkuMTg2NVpNMTAxLjYzMiAzOS4xODY1SDEwMS42NDNWMzcuNjg2NUgxMDEuNjMyVjM5LjE4NjVaTTEwMS42MjEgMzkuMTg2NUgxMDEuNjMyVjM3LjY4NjVIMTAxLjYyMVYzOS4xODY1Wk0xMDEuNjEgMzkuMTg2NUgxMDEuNjIxVjM3LjY4NjVIMTAxLjYxVjM5LjE4NjVaTTEwMS41OTkgMzkuMTg2NUgxMDEuNjFWMzcuNjg2NUgxMDEuNTk5VjM5LjE4NjVaTTEwMS41ODkgMzkuMTg2NUgxMDEuNTk5VjM3LjY4NjVIMTAxLjU4OVYzOS4xODY1Wk0xMDEuNTc4IDM5LjE4NjVIMTAxLjU4OVYzNy42ODY1SDEwMS41NzhWMzkuMTg2NVpNMTAxLjU2NyAzOS4xODY1SDEwMS41NzhWMzcuNjg2NUgxMDEuNTY3VjM5LjE4NjVaTTEwMS41NTYgMzkuMTg2NUgxMDEuNTY3VjM3LjY4NjVIMTAxLjU1NlYzOS4xODY1Wk0xMDEuNTQ2IDM5LjE4NjVIMTAxLjU1NlYzNy42ODY1SDEwMS41NDZWMzkuMTg2NVpNMTAxLjUzNSAzOS4xODY1SDEwMS41NDZWMzcuNjg2NUgxMDEuNTM1VjM5LjE4NjVaTTEwMS41MjQgMzkuMTg2NUgxMDEuNTM1VjM3LjY4NjVIMTAxLjUyNFYzOS4xODY1Wk0xMDEuNTE0IDM5LjE4NjVIMTAxLjUyNFYzNy42ODY1SDEwMS41MTRWMzkuMTg2NVpNMTAxLjUwMyAzOS4xODY1SDEwMS41MTRWMzcuNjg2NUgxMDEuNTAzVjM5LjE4NjVaTTEwMS40OTIgMzkuMTg2NUgxMDEuNTAzVjM3LjY4NjVIMTAxLjQ5MlYzOS4xODY1Wk0xMDEuNDgyIDM5LjE4NjVIMTAxLjQ5MlYzNy42ODY1SDEwMS40ODJWMzkuMTg2NVpNMTAxLjQ3MSAzOS4xODY1SDEwMS40ODJWMzcuNjg2NUgxMDEuNDcxVjM5LjE4NjVaTTEwMS40NjEgMzkuMTg2NUgxMDEuNDcxVjM3LjY4NjVIMTAxLjQ2MVYzOS4xODY1Wk0xMDEuNDUgMzkuMTg2NUgxMDEuNDYxVjM3LjY4NjVIMTAxLjQ1VjM5LjE4NjVaTTEwMS40NCAzOS4xODY1SDEwMS40NVYzNy42ODY1SDEwMS40NFYzOS4xODY1Wk0xMDEuNDI5IDM5LjE4NjVIMTAxLjQ0VjM3LjY4NjVIMTAxLjQyOVYzOS4xODY1Wk0xMDEuNDE5IDM5LjE4NjVIMTAxLjQyOVYzNy42ODY1SDEwMS40MTlWMzkuMTg2NVpNMTAxLjQwOCAzOS4xODY1SDEwMS40MTlWMzcuNjg2NUgxMDEuNDA4VjM5LjE4NjVaTTEwMS4zOTggMzkuMTg2NUgxMDEuNDA4VjM3LjY4NjVIMTAxLjM5OFYzOS4xODY1Wk0xMDEuMzg3IDM5LjE4NjVIMTAxLjM5OFYzNy42ODY1SDEwMS4zODdWMzkuMTg2NVpNMTAxLjM3NyAzOS4xODY1SDEwMS4zODdWMzcuNjg2NUgxMDEuMzc3VjM5LjE4NjVaTTEwMS4zNjYgMzkuMTg2NUgxMDEuMzc3VjM3LjY4NjVIMTAxLjM2NlYzOS4xODY1Wk0xMDEuMzU2IDM5LjE4NjVIMTAxLjM2NlYzNy42ODY1SDEwMS4zNTZWMzkuMTg2NVpNMTAxLjM0NiAzOS4xODY1SDEwMS4zNTZWMzcuNjg2NUgxMDEuMzQ2VjM5LjE4NjVaTTEwMS4zMzUgMzkuMTg2NUgxMDEuMzQ2VjM3LjY4NjVIMTAxLjMzNVYzOS4xODY1Wk0xMDEuMzI1IDM5LjE4NjVIMTAxLjMzNVYzNy42ODY1SDEwMS4zMjVWMzkuMTg2NVpNMTAxLjMxNSAzOS4xODY1SDEwMS4zMjVWMzcuNjg2NUgxMDEuMzE1VjM5LjE4NjVaTTEwMS4zMDQgMzkuMTg2NUgxMDEuMzE1VjM3LjY4NjVIMTAxLjMwNFYzOS4xODY1Wk0xMDEuMjk0IDM5LjE4NjVIMTAxLjMwNFYzNy42ODY1SDEwMS4yOTRWMzkuMTg2NVpNMTAxLjI4NCAzOS4xODY1SDEwMS4yOTRWMzcuNjg2NUgxMDEuMjg0VjM5LjE4NjVaTTEwMS4yNzQgMzkuMTg2NUgxMDEuMjg0VjM3LjY4NjVIMTAxLjI3NFYzOS4xODY1Wk0xMDEuMjY0IDM5LjE4NjVIMTAxLjI3NFYzNy42ODY1SDEwMS4yNjRWMzkuMTg2NVpNMTAxLjI1MyAzOS4xODY1SDEwMS4yNjRWMzcuNjg2NUgxMDEuMjUzVjM5LjE4NjVaTTEwMS4yNDMgMzkuMTg2NUgxMDEuMjUzVjM3LjY4NjVIMTAxLjI0M1YzOS4xODY1Wk0xMDEuMjMzIDM5LjE4NjVIMTAxLjI0M1YzNy42ODY1SDEwMS4yMzNWMzkuMTg2NVpNMTAxLjIyMyAzOS4xODY1SDEwMS4yMzNWMzcuNjg2NUgxMDEuMjIzVjM5LjE4NjVaTTEwMS4yMTMgMzkuMTg2NUgxMDEuMjIzVjM3LjY4NjVIMTAxLjIxM1YzOS4xODY1Wk0xMDEuMjAzIDM5LjE4NjVIMTAxLjIxM1YzNy42ODY1SDEwMS4yMDNWMzkuMTg2NVpNMTAxLjE5MyAzOS4xODY1SDEwMS4yMDNWMzcuNjg2NUgxMDEuMTkzVjM5LjE4NjVaTTEwMS4xODMgMzkuMTg2NUgxMDEuMTkzVjM3LjY4NjVIMTAxLjE4M1YzOS4xODY1Wk0xMDEuMTczIDM5LjE4NjVIMTAxLjE4M1YzNy42ODY1SDEwMS4xNzNWMzkuMTg2NVpNMTAxLjE2MyAzOS4xODY1SDEwMS4xNzNWMzcuNjg2NUgxMDEuMTYzVjM5LjE4NjVaTTEwMS4xNTMgMzkuMTg2NUgxMDEuMTYzVjM3LjY4NjVIMTAxLjE1M1YzOS4xODY1Wk0xMDEuMTQzIDM5LjE4NjVIMTAxLjE1M1YzNy42ODY1SDEwMS4xNDNWMzkuMTg2NVpNMTAxLjEzMyAzOS4xODY1SDEwMS4xNDNWMzcuNjg2NUgxMDEuMTMzVjM5LjE4NjVaTTEwMS4xMjMgMzkuMTg2NUgxMDEuMTMzVjM3LjY4NjVIMTAxLjEyM1YzOS4xODY1Wk0xMDEuMTEzIDM5LjE4NjVIMTAxLjEyM1YzNy42ODY1SDEwMS4xMTNWMzkuMTg2NVpNMTAxLjEwMyAzOS4xODY1SDEwMS4xMTNWMzcuNjg2NUgxMDEuMTAzVjM5LjE4NjVaTTEwMS4wOTMgMzkuMTg2NUgxMDEuMTAzVjM3LjY4NjVIMTAxLjA5M1YzOS4xODY1Wk0xMDEuMDgzIDM5LjE4NjVIMTAxLjA5M1YzNy42ODY1SDEwMS4wODNWMzkuMTg2NVpNMTAxLjA3MyAzOS4xODY1SDEwMS4wODNWMzcuNjg2NUgxMDEuMDczVjM5LjE4NjVaTTEwMS4wNjQgMzkuMTg2NUgxMDEuMDczVjM3LjY4NjVIMTAxLjA2NFYzOS4xODY1Wk0xMDEuMDU0IDM5LjE4NjVIMTAxLjA2NFYzNy42ODY1SDEwMS4wNTRWMzkuMTg2NVpNMTAxLjA0NCAzOS4xODY1SDEwMS4wNTRWMzcuNjg2NUgxMDEuMDQ0VjM5LjE4NjVaTTEwMS4wMzQgMzkuMTg2NUgxMDEuMDQ0VjM3LjY4NjVIMTAxLjAzNFYzOS4xODY1Wk0xMDEuMDI0IDM5LjE4NjVIMTAxLjAzNFYzNy42ODY1SDEwMS4wMjRWMzkuMTg2NVpNMTAxLjAxNSAzOS4xODY1SDEwMS4wMjRWMzcuNjg2NUgxMDEuMDE1VjM5LjE4NjVaTTEwMS4wMDUgMzkuMTg2NUgxMDEuMDE1VjM3LjY4NjVIMTAxLjAwNVYzOS4xODY1Wk0xMDAuOTk1IDM5LjE4NjVIMTAxLjAwNVYzNy42ODY1SDEwMC45OTVWMzkuMTg2NVpNMTAwLjk4NiAzOS4xODY1SDEwMC45OTVWMzcuNjg2NUgxMDAuOTg2VjM5LjE4NjVaTTEwMC45NzYgMzkuMTg2NUgxMDAuOTg2VjM3LjY4NjVIMTAwLjk3NlYzOS4xODY1Wk0xMDAuOTY2IDM5LjE4NjVIMTAwLjk3NlYzNy42ODY1SDEwMC45NjZWMzkuMTg2NVpNMTAwLjk1NyAzOS4xODY1SDEwMC45NjZWMzcuNjg2NUgxMDAuOTU3VjM5LjE4NjVaTTEwMC45NDcgMzkuMTg2NUgxMDAuOTU3VjM3LjY4NjVIMTAwLjk0N1YzOS4xODY1Wk0xMDAuOTM4IDM5LjE4NjVIMTAwLjk0N1YzNy42ODY1SDEwMC45MzhWMzkuMTg2NVpNMTAwLjkyOCAzOS4xODY1SDEwMC45MzhWMzcuNjg2NUgxMDAuOTI4VjM5LjE4NjVaTTEwMC45MTggMzkuMTg2NUgxMDAuOTI4VjM3LjY4NjVIMTAwLjkxOFYzOS4xODY1Wk0xMDAuOTA5IDM5LjE4NjVIMTAwLjkxOFYzNy42ODY1SDEwMC45MDlWMzkuMTg2NVpNMTAwLjg5OSAzOS4xODY1SDEwMC45MDlWMzcuNjg2NUgxMDAuODk5VjM5LjE4NjVaTTEwMC44OSAzOS4xODY1SDEwMC44OTlWMzcuNjg2NUgxMDAuODlWMzkuMTg2NVpNMTAwLjE0IDM2LjkzNjVWMzguNDM2NUgxMDEuNjRWMzYuOTM2NUgxMDAuMTRaTTEwMC44OTkgMzYuMTg2NUgxMDAuODlWMzcuNjg2NUgxMDAuODk5VjM2LjE4NjVaTTEwMC45MDkgMzYuMTg2NUgxMDAuODk5VjM3LjY4NjVIMTAwLjkwOVYzNi4xODY1Wk0xMDAuOTE4IDM2LjE4NjVIMTAwLjkwOVYzNy42ODY1SDEwMC45MThWMzYuMTg2NVpNMTAwLjkyOCAzNi4xODY1SDEwMC45MThWMzcuNjg2NUgxMDAuOTI4VjM2LjE4NjVaTTEwMC45MzggMzYuMTg2NUgxMDAuOTI4VjM3LjY4NjVIMTAwLjkzOFYzNi4xODY1Wk0xMDAuOTQ3IDM2LjE4NjVIMTAwLjkzOFYzNy42ODY1SDEwMC45NDdWMzYuMTg2NVpNMTAwLjk1NyAzNi4xODY1SDEwMC45NDdWMzcuNjg2NUgxMDAuOTU3VjM2LjE4NjVaTTEwMC45NjYgMzYuMTg2NUgxMDAuOTU3VjM3LjY4NjVIMTAwLjk2NlYzNi4xODY1Wk0xMDAuOTc2IDM2LjE4NjVIMTAwLjk2NlYzNy42ODY1SDEwMC45NzZWMzYuMTg2NVpNMTAwLjk4NiAzNi4xODY1SDEwMC45NzZWMzcuNjg2NUgxMDAuOTg2VjM2LjE4NjVaTTEwMC45OTUgMzYuMTg2NUgxMDAuOTg2VjM3LjY4NjVIMTAwLjk5NVYzNi4xODY1Wk0xMDEuMDA1IDM2LjE4NjVIMTAwLjk5NVYzNy42ODY1SDEwMS4wMDVWMzYuMTg2NVpNMTAxLjAxNSAzNi4xODY1SDEwMS4wMDVWMzcuNjg2NUgxMDEuMDE1VjM2LjE4NjVaTTEwMS4wMjQgMzYuMTg2NUgxMDEuMDE1VjM3LjY4NjVIMTAxLjAyNFYzNi4xODY1Wk0xMDEuMDM0IDM2LjE4NjVIMTAxLjAyNFYzNy42ODY1SDEwMS4wMzRWMzYuMTg2NVpNMTAxLjA0NCAzNi4xODY1SDEwMS4wMzRWMzcuNjg2NUgxMDEuMDQ0VjM2LjE4NjVaTTEwMS4wNTQgMzYuMTg2NUgxMDEuMDQ0VjM3LjY4NjVIMTAxLjA1NFYzNi4xODY1Wk0xMDEuMDY0IDM2LjE4NjVIMTAxLjA1NFYzNy42ODY1SDEwMS4wNjRWMzYuMTg2NVpNMTAxLjA3MyAzNi4xODY1SDEwMS4wNjRWMzcuNjg2NUgxMDEuMDczVjM2LjE4NjVaTTEwMS4wODMgMzYuMTg2NUgxMDEuMDczVjM3LjY4NjVIMTAxLjA4M1YzNi4xODY1Wk0xMDEuMDkzIDM2LjE4NjVIMTAxLjA4M1YzNy42ODY1SDEwMS4wOTNWMzYuMTg2NVpNMTAxLjEwMyAzNi4xODY1SDEwMS4wOTNWMzcuNjg2NUgxMDEuMTAzVjM2LjE4NjVaTTEwMS4xMTMgMzYuMTg2NUgxMDEuMTAzVjM3LjY4NjVIMTAxLjExM1YzNi4xODY1Wk0xMDEuMTIzIDM2LjE4NjVIMTAxLjExM1YzNy42ODY1SDEwMS4xMjNWMzYuMTg2NVpNMTAxLjEzMyAzNi4xODY1SDEwMS4xMjNWMzcuNjg2NUgxMDEuMTMzVjM2LjE4NjVaTTEwMS4xNDMgMzYuMTg2NUgxMDEuMTMzVjM3LjY4NjVIMTAxLjE0M1YzNi4xODY1Wk0xMDEuMTUzIDM2LjE4NjVIMTAxLjE0M1YzNy42ODY1SDEwMS4xNTNWMzYuMTg2NVpNMTAxLjE2MyAzNi4xODY1SDEwMS4xNTNWMzcuNjg2NUgxMDEuMTYzVjM2LjE4NjVaTTEwMS4xNzMgMzYuMTg2NUgxMDEuMTYzVjM3LjY4NjVIMTAxLjE3M1YzNi4xODY1Wk0xMDEuMTgzIDM2LjE4NjVIMTAxLjE3M1YzNy42ODY1SDEwMS4xODNWMzYuMTg2NVpNMTAxLjE5MyAzNi4xODY1SDEwMS4xODNWMzcuNjg2NUgxMDEuMTkzVjM2LjE4NjVaTTEwMS4yMDMgMzYuMTg2NUgxMDEuMTkzVjM3LjY4NjVIMTAxLjIwM1YzNi4xODY1Wk0xMDEuMjEzIDM2LjE4NjVIMTAxLjIwM1YzNy42ODY1SDEwMS4yMTNWMzYuMTg2NVpNMTAxLjIyMyAzNi4xODY1SDEwMS4yMTNWMzcuNjg2NUgxMDEuMjIzVjM2LjE4NjVaTTEwMS4yMzMgMzYuMTg2NUgxMDEuMjIzVjM3LjY4NjVIMTAxLjIzM1YzNi4xODY1Wk0xMDEuMjQzIDM2LjE4NjVIMTAxLjIzM1YzNy42ODY1SDEwMS4yNDNWMzYuMTg2NVpNMTAxLjI1MyAzNi4xODY1SDEwMS4yNDNWMzcuNjg2NUgxMDEuMjUzVjM2LjE4NjVaTTEwMS4yNjQgMzYuMTg2NUgxMDEuMjUzVjM3LjY4NjVIMTAxLjI2NFYzNi4xODY1Wk0xMDEuMjc0IDM2LjE4NjVIMTAxLjI2NFYzNy42ODY1SDEwMS4yNzRWMzYuMTg2NVpNMTAxLjI4NCAzNi4xODY1SDEwMS4yNzRWMzcuNjg2NUgxMDEuMjg0VjM2LjE4NjVaTTEwMS4yOTQgMzYuMTg2NUgxMDEuMjg0VjM3LjY4NjVIMTAxLjI5NFYzNi4xODY1Wk0xMDEuMzA0IDM2LjE4NjVIMTAxLjI5NFYzNy42ODY1SDEwMS4zMDRWMzYuMTg2NVpNMTAxLjMxNSAzNi4xODY1SDEwMS4zMDRWMzcuNjg2NUgxMDEuMzE1VjM2LjE4NjVaTTEwMS4zMjUgMzYuMTg2NUgxMDEuMzE1VjM3LjY4NjVIMTAxLjMyNVYzNi4xODY1Wk0xMDEuMzM1IDM2LjE4NjVIMTAxLjMyNVYzNy42ODY1SDEwMS4zMzVWMzYuMTg2NVpNMTAxLjM0NiAzNi4xODY1SDEwMS4zMzVWMzcuNjg2NUgxMDEuMzQ2VjM2LjE4NjVaTTEwMS4zNTYgMzYuMTg2NUgxMDEuMzQ2VjM3LjY4NjVIMTAxLjM1NlYzNi4xODY1Wk0xMDEuMzY2IDM2LjE4NjVIMTAxLjM1NlYzNy42ODY1SDEwMS4zNjZWMzYuMTg2NVpNMTAxLjM3NyAzNi4xODY1SDEwMS4zNjZWMzcuNjg2NUgxMDEuMzc3VjM2LjE4NjVaTTEwMS4zODcgMzYuMTg2NUgxMDEuMzc3VjM3LjY4NjVIMTAxLjM4N1YzNi4xODY1Wk0xMDEuMzk4IDM2LjE4NjVIMTAxLjM4N1YzNy42ODY1SDEwMS4zOThWMzYuMTg2NVpNMTAxLjQwOCAzNi4xODY1SDEwMS4zOThWMzcuNjg2NUgxMDEuNDA4VjM2LjE4NjVaTTEwMS40MTkgMzYuMTg2NUgxMDEuNDA4VjM3LjY4NjVIMTAxLjQxOVYzNi4xODY1Wk0xMDEuNDI5IDM2LjE4NjVIMTAxLjQxOVYzNy42ODY1SDEwMS40MjlWMzYuMTg2NVpNMTAxLjQ0IDM2LjE4NjVIMTAxLjQyOVYzNy42ODY1SDEwMS40NFYzNi4xODY1Wk0xMDEuNDUgMzYuMTg2NUgxMDEuNDRWMzcuNjg2NUgxMDEuNDVWMzYuMTg2NVpNMTAxLjQ2MSAzNi4xODY1SDEwMS40NVYzNy42ODY1SDEwMS40NjFWMzYuMTg2NVpNMTAxLjQ3MSAzNi4xODY1SDEwMS40NjFWMzcuNjg2NUgxMDEuNDcxVjM2LjE4NjVaTTEwMS40ODIgMzYuMTg2NUgxMDEuNDcxVjM3LjY4NjVIMTAxLjQ4MlYzNi4xODY1Wk0xMDEuNDkyIDM2LjE4NjVIMTAxLjQ4MlYzNy42ODY1SDEwMS40OTJWMzYuMTg2NVpNMTAxLjUwMyAzNi4xODY1SDEwMS40OTJWMzcuNjg2NUgxMDEuNTAzVjM2LjE4NjVaTTEwMS41MTQgMzYuMTg2NUgxMDEuNTAzVjM3LjY4NjVIMTAxLjUxNFYzNi4xODY1Wk0xMDEuNTI0IDM2LjE4NjVIMTAxLjUxNFYzNy42ODY1SDEwMS41MjRWMzYuMTg2NVpNMTAxLjUzNSAzNi4xODY1SDEwMS41MjRWMzcuNjg2NUgxMDEuNTM1VjM2LjE4NjVaTTEwMS41NDYgMzYuMTg2NUgxMDEuNTM1VjM3LjY4NjVIMTAxLjU0NlYzNi4xODY1Wk0xMDEuNTU2IDM2LjE4NjVIMTAxLjU0NlYzNy42ODY1SDEwMS41NTZWMzYuMTg2NVpNMTAxLjU2NyAzNi4xODY1SDEwMS41NTZWMzcuNjg2NUgxMDEuNTY3VjM2LjE4NjVaTTEwMS41NzggMzYuMTg2NUgxMDEuNTY3VjM3LjY4NjVIMTAxLjU3OFYzNi4xODY1Wk0xMDEuNTg5IDM2LjE4NjVIMTAxLjU3OFYzNy42ODY1SDEwMS41ODlWMzYuMTg2NVpNMTAxLjU5OSAzNi4xODY1SDEwMS41ODlWMzcuNjg2NUgxMDEuNTk5VjM2LjE4NjVaTTEwMS42MSAzNi4xODY1SDEwMS41OTlWMzcuNjg2NUgxMDEuNjFWMzYuMTg2NVpNMTAxLjYyMSAzNi4xODY1SDEwMS42MVYzNy42ODY1SDEwMS42MjFWMzYuMTg2NVpNMTAxLjYzMiAzNi4xODY1SDEwMS42MjFWMzcuNjg2NUgxMDEuNjMyVjM2LjE4NjVaTTEwMS42NDMgMzYuMTg2NUgxMDEuNjMyVjM3LjY4NjVIMTAxLjY0M1YzNi4xODY1Wk0xMDEuNjU0IDM2LjE4NjVIMTAxLjY0M1YzNy42ODY1SDEwMS42NTRWMzYuMTg2NVpNMTAxLjY2NCAzNi4xODY1SDEwMS42NTRWMzcuNjg2NUgxMDEuNjY0VjM2LjE4NjVaTTEwMS42NzUgMzYuMTg2NUgxMDEuNjY0VjM3LjY4NjVIMTAxLjY3NVYzNi4xODY1Wk0xMDEuNjg2IDM2LjE4NjVIMTAxLjY3NVYzNy42ODY1SDEwMS42ODZWMzYuMTg2NVpNMTAxLjY5NyAzNi4xODY1SDEwMS42ODZWMzcuNjg2NUgxMDEuNjk3VjM2LjE4NjVaTTEwMS43MDggMzYuMTg2NUgxMDEuNjk3VjM3LjY4NjVIMTAxLjcwOFYzNi4xODY1Wk0xMDEuNzE5IDM2LjE4NjVIMTAxLjcwOFYzNy42ODY1SDEwMS43MTlWMzYuMTg2NVpNMTAxLjczIDM2LjE4NjVIMTAxLjcxOVYzNy42ODY1SDEwMS43M1YzNi4xODY1Wk0xMDEuNzQxIDM2LjE4NjVIMTAxLjczVjM3LjY4NjVIMTAxLjc0MVYzNi4xODY1Wk0xMDEuNzUyIDM2LjE4NjVIMTAxLjc0MVYzNy42ODY1SDEwMS43NTJWMzYuMTg2NVpNMTAxLjc2MyAzNi4xODY1SDEwMS43NTJWMzcuNjg2NUgxMDEuNzYzVjM2LjE4NjVaTTEwMS43NzQgMzYuMTg2NUgxMDEuNzYzVjM3LjY4NjVIMTAxLjc3NFYzNi4xODY1Wk0xMDEuNzg2IDM2LjE4NjVIMTAxLjc3NFYzNy42ODY1SDEwMS43ODZWMzYuMTg2NVpNMTAxLjc5NyAzNi4xODY1SDEwMS43ODZWMzcuNjg2NUgxMDEuNzk3VjM2LjE4NjVaTTEwMS44MDggMzYuMTg2NUgxMDEuNzk3VjM3LjY4NjVIMTAxLjgwOFYzNi4xODY1Wk0xMDEuODE5IDM2LjE4NjVIMTAxLjgwOFYzNy42ODY1SDEwMS44MTlWMzYuMTg2NVpNMTAxLjgzIDM2LjE4NjVIMTAxLjgxOVYzNy42ODY1SDEwMS44M1YzNi4xODY1Wk0xMDEuODQxIDM2LjE4NjVIMTAxLjgzVjM3LjY4NjVIMTAxLjg0MVYzNi4xODY1Wk0xMDEuODUzIDM2LjE4NjVIMTAxLjg0MVYzNy42ODY1SDEwMS44NTNWMzYuMTg2NVpNMTAxLjg2NCAzNi4xODY1SDEwMS44NTNWMzcuNjg2NUgxMDEuODY0VjM2LjE4NjVaTTEwMS44NzUgMzYuMTg2NUgxMDEuODY0VjM3LjY4NjVIMTAxLjg3NVYzNi4xODY1Wk0xMDEuODg2IDM2LjE4NjVIMTAxLjg3NVYzNy42ODY1SDEwMS44ODZWMzYuMTg2NVpNMTAxLjg5OCAzNi4xODY1SDEwMS44ODZWMzcuNjg2NUgxMDEuODk4VjM2LjE4NjVaTTEwMS45MDkgMzYuMTg2NUgxMDEuODk4VjM3LjY4NjVIMTAxLjkwOVYzNi4xODY1Wk0xMDEuOTIgMzYuMTg2NUgxMDEuOTA5VjM3LjY4NjVIMTAxLjkyVjM2LjE4NjVaTTEwMS45MzIgMzYuMTg2NUgxMDEuOTJWMzcuNjg2NUgxMDEuOTMyVjM2LjE4NjVaTTEwMS45NDMgMzYuMTg2NUgxMDEuOTMyVjM3LjY4NjVIMTAxLjk0M1YzNi4xODY1Wk0xMDEuOTU1IDM2LjE4NjVIMTAxLjk0M1YzNy42ODY1SDEwMS45NTVWMzYuMTg2NVpNMTAxLjk2NiAzNi4xODY1SDEwMS45NTVWMzcuNjg2NUgxMDEuOTY2VjM2LjE4NjVaTTEwMS45NzcgMzYuMTg2NUgxMDEuOTY2VjM3LjY4NjVIMTAxLjk3N1YzNi4xODY1Wk0xMDEuOTg5IDM2LjE4NjVIMTAxLjk3N1YzNy42ODY1SDEwMS45ODlWMzYuMTg2NVpNMTAyIDM2LjE4NjVIMTAxLjk4OVYzNy42ODY1SDEwMlYzNi4xODY1Wk0xMDIuMDEyIDM2LjE4NjVIMTAyVjM3LjY4NjVIMTAyLjAxMlYzNi4xODY1Wk0xMDIuMDIzIDM2LjE4NjVIMTAyLjAxMlYzNy42ODY1SDEwMi4wMjNWMzYuMTg2NVpNMTAyLjAzNSAzNi4xODY1SDEwMi4wMjNWMzcuNjg2NUgxMDIuMDM1VjM2LjE4NjVaTTEwMi4wNDYgMzYuMTg2NUgxMDIuMDM1VjM3LjY4NjVIMTAyLjA0NlYzNi4xODY1Wk0xMDIuMDU4IDM2LjE4NjVIMTAyLjA0NlYzNy42ODY1SDEwMi4wNThWMzYuMTg2NVpNMTAyLjA2OSAzNi4xODY1SDEwMi4wNThWMzcuNjg2NUgxMDIuMDY5VjM2LjE4NjVaTTEwMi4wODEgMzYuMTg2NUgxMDIuMDY5VjM3LjY4NjVIMTAyLjA4MVYzNi4xODY1Wk0xMDIuMDkzIDM2LjE4NjVIMTAyLjA4MVYzNy42ODY1SDEwMi4wOTNWMzYuMTg2NVpNMTAyLjEwNCAzNi4xODY1SDEwMi4wOTNWMzcuNjg2NUgxMDIuMTA0VjM2LjE4NjVaTTEwMi4xMTYgMzYuMTg2NUgxMDIuMTA0VjM3LjY4NjVIMTAyLjExNlYzNi4xODY1Wk0xMDIuMTI4IDM2LjE4NjVIMTAyLjExNlYzNy42ODY1SDEwMi4xMjhWMzYuMTg2NVpNMTAyLjEzOSAzNi4xODY1SDEwMi4xMjhWMzcuNjg2NUgxMDIuMTM5VjM2LjE4NjVaTTEwMi4xNTEgMzYuMTg2NUgxMDIuMTM5VjM3LjY4NjVIMTAyLjE1MVYzNi4xODY1Wk0xMDIuMTYzIDM2LjE4NjVIMTAyLjE1MVYzNy42ODY1SDEwMi4xNjNWMzYuMTg2NVpNMTAyLjE3NSAzNi4xODY1SDEwMi4xNjNWMzcuNjg2NUgxMDIuMTc1VjM2LjE4NjVaTTEwMi4xODYgMzYuMTg2NUgxMDIuMTc1VjM3LjY4NjVIMTAyLjE4NlYzNi4xODY1Wk0xMDIuMTk4IDM2LjE4NjVIMTAyLjE4NlYzNy42ODY1SDEwMi4xOThWMzYuMTg2NVpNMTAyLjIxIDM2LjE4NjVIMTAyLjE5OFYzNy42ODY1SDEwMi4yMVYzNi4xODY1Wk0xMDIuMjIyIDM2LjE4NjVIMTAyLjIxVjM3LjY4NjVIMTAyLjIyMlYzNi4xODY1Wk0xMDIuMjM0IDM2LjE4NjVIMTAyLjIyMlYzNy42ODY1SDEwMi4yMzRWMzYuMTg2NVpNMTAyLjI0NiAzNi4xODY1SDEwMi4yMzRWMzcuNjg2NUgxMDIuMjQ2VjM2LjE4NjVaTTEwMi4yNTcgMzYuMTg2NUgxMDIuMjQ2VjM3LjY4NjVIMTAyLjI1N1YzNi4xODY1Wk0xMDIuMjY5IDM2LjE4NjVIMTAyLjI1N1YzNy42ODY1SDEwMi4yNjlWMzYuMTg2NVpNMTAyLjI4MSAzNi4xODY1SDEwMi4yNjlWMzcuNjg2NUgxMDIuMjgxVjM2LjE4NjVaTTEwMi4yOTMgMzYuMTg2NUgxMDIuMjgxVjM3LjY4NjVIMTAyLjI5M1YzNi4xODY1Wk0xMDIuMzA1IDM2LjE4NjVIMTAyLjI5M1YzNy42ODY1SDEwMi4zMDVWMzYuMTg2NVpNMTAyLjMxNyAzNi4xODY1SDEwMi4zMDVWMzcuNjg2NUgxMDIuMzE3VjM2LjE4NjVaTTEwMi4zMjkgMzYuMTg2NUgxMDIuMzE3VjM3LjY4NjVIMTAyLjMyOVYzNi4xODY1Wk0xMDIuMzQxIDM2LjE4NjVIMTAyLjMyOVYzNy42ODY1SDEwMi4zNDFWMzYuMTg2NVpNMTAyLjM1MyAzNi4xODY1SDEwMi4zNDFWMzcuNjg2NUgxMDIuMzUzVjM2LjE4NjVaTTEwMi4zNjUgMzYuMTg2NUgxMDIuMzUzVjM3LjY4NjVIMTAyLjM2NVYzNi4xODY1Wk0xMDIuMzc3IDM2LjE4NjVIMTAyLjM2NVYzNy42ODY1SDEwMi4zNzdWMzYuMTg2NVpNMTAyLjM4OSAzNi4xODY1SDEwMi4zNzdWMzcuNjg2NUgxMDIuMzg5VjM2LjE4NjVaTTEwMi40MDIgMzYuMTg2NUgxMDIuMzg5VjM3LjY4NjVIMTAyLjQwMlYzNi4xODY1Wk0xMDIuNDE0IDM2LjE4NjVIMTAyLjQwMlYzNy42ODY1SDEwMi40MTRWMzYuMTg2NVpNMTAyLjQyNiAzNi4xODY1SDEwMi40MTRWMzcuNjg2NUgxMDIuNDI2VjM2LjE4NjVaTTEwMi40MzggMzYuMTg2NUgxMDIuNDI2VjM3LjY4NjVIMTAyLjQzOFYzNi4xODY1Wk0xMDIuNDUgMzYuMTg2NUgxMDIuNDM4VjM3LjY4NjVIMTAyLjQ1VjM2LjE4NjVaTTEwMi40NjIgMzYuMTg2NUgxMDIuNDVWMzcuNjg2NUgxMDIuNDYyVjM2LjE4NjVaTTEwMi40NzUgMzYuMTg2NUgxMDIuNDYyVjM3LjY4NjVIMTAyLjQ3NVYzNi4xODY1Wk0xMDIuNDg3IDM2LjE4NjVIMTAyLjQ3NVYzNy42ODY1SDEwMi40ODdWMzYuMTg2NVpNMTAyLjQ5OSAzNi4xODY1SDEwMi40ODdWMzcuNjg2NUgxMDIuNDk5VjM2LjE4NjVaTTEwMi41MTEgMzYuMTg2NUgxMDIuNDk5VjM3LjY4NjVIMTAyLjUxMVYzNi4xODY1Wk0xMDIuNTI0IDM2LjE4NjVIMTAyLjUxMVYzNy42ODY1SDEwMi41MjRWMzYuMTg2NVpNMTAyLjUzNiAzNi4xODY1SDEwMi41MjRWMzcuNjg2NUgxMDIuNTM2VjM2LjE4NjVaTTEwMi41NDggMzYuMTg2NUgxMDIuNTM2VjM3LjY4NjVIMTAyLjU0OFYzNi4xODY1Wk0xMDIuNTYxIDM2LjE4NjVIMTAyLjU0OFYzNy42ODY1SDEwMi41NjFWMzYuMTg2NVpNMTAyLjU3MyAzNi4xODY1SDEwMi41NjFWMzcuNjg2NUgxMDIuNTczVjM2LjE4NjVaTTEwMi41ODUgMzYuMTg2NUgxMDIuNTczVjM3LjY4NjVIMTAyLjU4NVYzNi4xODY1Wk0xMDIuNTk4IDM2LjE4NjVIMTAyLjU4NVYzNy42ODY1SDEwMi41OThWMzYuMTg2NVpNMTAyLjYxIDM2LjE4NjVIMTAyLjU5OFYzNy42ODY1SDEwMi42MVYzNi4xODY1Wk0xMDIuNjIzIDM2LjE4NjVIMTAyLjYxVjM3LjY4NjVIMTAyLjYyM1YzNi4xODY1Wk0xMDIuNjM1IDM2LjE4NjVIMTAyLjYyM1YzNy42ODY1SDEwMi42MzVWMzYuMTg2NVpNMTAyLjY0OCAzNi4xODY1SDEwMi42MzVWMzcuNjg2NUgxMDIuNjQ4VjM2LjE4NjVaTTEwMi42NiAzNi4xODY1SDEwMi42NDhWMzcuNjg2NUgxMDIuNjZWMzYuMTg2NVpNMTAyLjY3MyAzNi4xODY1SDEwMi42NlYzNy42ODY1SDEwMi42NzNWMzYuMTg2NVpNMTAyLjY4NSAzNi4xODY1SDEwMi42NzNWMzcuNjg2NUgxMDIuNjg1VjM2LjE4NjVaTTEwMi42OTggMzYuMTg2NUgxMDIuNjg1VjM3LjY4NjVIMTAyLjY5OFYzNi4xODY1Wk0xMDIuNzExIDM2LjE4NjVIMTAyLjY5OFYzNy42ODY1SDEwMi43MTFWMzYuMTg2NVpNMTAyLjcyMyAzNi4xODY1SDEwMi43MTFWMzcuNjg2NUgxMDIuNzIzVjM2LjE4NjVaTTEwMi43MzYgMzYuMTg2NUgxMDIuNzIzVjM3LjY4NjVIMTAyLjczNlYzNi4xODY1Wk0xMDIuNzQ4IDM2LjE4NjVIMTAyLjczNlYzNy42ODY1SDEwMi43NDhWMzYuMTg2NVpNMTAyLjc2MSAzNi4xODY1SDEwMi43NDhWMzcuNjg2NUgxMDIuNzYxVjM2LjE4NjVaTTEwMi43NzQgMzYuMTg2NUgxMDIuNzYxVjM3LjY4NjVIMTAyLjc3NFYzNi4xODY1Wk0xMDIuNzg2IDM2LjE4NjVIMTAyLjc3NFYzNy42ODY1SDEwMi43ODZWMzYuMTg2NVpNMTAyLjc5OSAzNi4xODY1SDEwMi43ODZWMzcuNjg2NUgxMDIuNzk5VjM2LjE4NjVaTTEwMi44MTIgMzYuMTg2NUgxMDIuNzk5VjM3LjY4NjVIMTAyLjgxMlYzNi4xODY1Wk0xMDIuODI1IDM2LjE4NjVIMTAyLjgxMlYzNy42ODY1SDEwMi44MjVWMzYuMTg2NVpNMTAyLjgzNyAzNi4xODY1SDEwMi44MjVWMzcuNjg2NUgxMDIuODM3VjM2LjE4NjVaTTEwMi44NSAzNi4xODY1SDEwMi44MzdWMzcuNjg2NUgxMDIuODVWMzYuMTg2NVpNMTAyLjg2MyAzNi4xODY1SDEwMi44NVYzNy42ODY1SDEwMi44NjNWMzYuMTg2NVpNMTAyLjg3NiAzNi4xODY1SDEwMi44NjNWMzcuNjg2NUgxMDIuODc2VjM2LjE4NjVaTTEwMi44ODkgMzYuMTg2NUgxMDIuODc2VjM3LjY4NjVIMTAyLjg4OVYzNi4xODY1Wk0xMDIuOTAyIDM2LjE4NjVIMTAyLjg4OVYzNy42ODY1SDEwMi45MDJWMzYuMTg2NVpNMTAyLjkxNCAzNi4xODY1SDEwMi45MDJWMzcuNjg2NUgxMDIuOTE0VjM2LjE4NjVaTTEwMi45MjcgMzYuMTg2NUgxMDIuOTE0VjM3LjY4NjVIMTAyLjkyN1YzNi4xODY1Wk0xMDIuOTQgMzYuMTg2NUgxMDIuOTI3VjM3LjY4NjVIMTAyLjk0VjM2LjE4NjVaTTEwMi45NTMgMzYuMTg2NUgxMDIuOTRWMzcuNjg2NUgxMDIuOTUzVjM2LjE4NjVaTTEwMi45NjYgMzYuMTg2NUgxMDIuOTUzVjM3LjY4NjVIMTAyLjk2NlYzNi4xODY1Wk0xMDIuOTc5IDM2LjE4NjVIMTAyLjk2NlYzNy42ODY1SDEwMi45NzlWMzYuMTg2NVpNMTAyLjk5MiAzNi4xODY1SDEwMi45NzlWMzcuNjg2NUgxMDIuOTkyVjM2LjE4NjVaTTEwMy4wMDUgMzYuMTg2NUgxMDIuOTkyVjM3LjY4NjVIMTAzLjAwNVYzNi4xODY1Wk0xMDMuMDE4IDM2LjE4NjVIMTAzLjAwNVYzNy42ODY1SDEwMy4wMThWMzYuMTg2NVpNMTAzLjAzMSAzNi4xODY1SDEwMy4wMThWMzcuNjg2NUgxMDMuMDMxVjM2LjE4NjVaTTEwMy4wNDQgMzYuMTg2NUgxMDMuMDMxVjM3LjY4NjVIMTAzLjA0NFYzNi4xODY1Wk0xMDMuMDU4IDM2LjE4NjVIMTAzLjA0NFYzNy42ODY1SDEwMy4wNThWMzYuMTg2NVpNMTAzLjA3MSAzNi4xODY1SDEwMy4wNThWMzcuNjg2NUgxMDMuMDcxVjM2LjE4NjVaTTEwMy4wODQgMzYuMTg2NUgxMDMuMDcxVjM3LjY4NjVIMTAzLjA4NFYzNi4xODY1Wk0xMDMuMDk3IDM2LjE4NjVIMTAzLjA4NFYzNy42ODY1SDEwMy4wOTdWMzYuMTg2NVpNMTAzLjExIDM2LjE4NjVIMTAzLjA5N1YzNy42ODY1SDEwMy4xMVYzNi4xODY1Wk0xMDMuMTIzIDM2LjE4NjVIMTAzLjExVjM3LjY4NjVIMTAzLjEyM1YzNi4xODY1Wk0xMDMuMTM3IDM2LjE4NjVIMTAzLjEyM1YzNy42ODY1SDEwMy4xMzdWMzYuMTg2NVpNMTAzLjE1IDM2LjE4NjVIMTAzLjEzN1YzNy42ODY1SDEwMy4xNVYzNi4xODY1Wk0xMDMuMTYzIDM2LjE4NjVIMTAzLjE1VjM3LjY4NjVIMTAzLjE2M1YzNi4xODY1Wk0xMDMuMTc2IDM2LjE4NjVIMTAzLjE2M1YzNy42ODY1SDEwMy4xNzZWMzYuMTg2NVpNMTAzLjE5IDM2LjE4NjVIMTAzLjE3NlYzNy42ODY1SDEwMy4xOVYzNi4xODY1Wk0xMDMuMjAzIDM2LjE4NjVIMTAzLjE5VjM3LjY4NjVIMTAzLjIwM1YzNi4xODY1Wk0xMDMuMjE2IDM2LjE4NjVIMTAzLjIwM1YzNy42ODY1SDEwMy4yMTZWMzYuMTg2NVpNMTAzLjIzIDM2LjE4NjVIMTAzLjIxNlYzNy42ODY1SDEwMy4yM1YzNi4xODY1Wk0xMDMuMjQzIDM2LjE4NjVIMTAzLjIzVjM3LjY4NjVIMTAzLjI0M1YzNi4xODY1Wk0xMDMuMjU2IDM2LjE4NjVIMTAzLjI0M1YzNy42ODY1SDEwMy4yNTZWMzYuMTg2NVpNMTAzLjI3IDM2LjE4NjVIMTAzLjI1NlYzNy42ODY1SDEwMy4yN1YzNi4xODY1Wk0xMDMuMjgzIDM2LjE4NjVIMTAzLjI3VjM3LjY4NjVIMTAzLjI4M1YzNi4xODY1Wk0xMDMuMjk3IDM2LjE4NjVIMTAzLjI4M1YzNy42ODY1SDEwMy4yOTdWMzYuMTg2NVpNMTAzLjMxIDM2LjE4NjVIMTAzLjI5N1YzNy42ODY1SDEwMy4zMVYzNi4xODY1Wk0xMDMuMzI0IDM2LjE4NjVIMTAzLjMxVjM3LjY4NjVIMTAzLjMyNFYzNi4xODY1Wk0xMDMuMzM3IDM2LjE4NjVIMTAzLjMyNFYzNy42ODY1SDEwMy4zMzdWMzYuMTg2NVpNMTAzLjM1MSAzNi4xODY1SDEwMy4zMzdWMzcuNjg2NUgxMDMuMzUxVjM2LjE4NjVaTTEwMy4zNjQgMzYuMTg2NUgxMDMuMzUxVjM3LjY4NjVIMTAzLjM2NFYzNi4xODY1Wk0xMDMuMzc4IDM2LjE4NjVIMTAzLjM2NFYzNy42ODY1SDEwMy4zNzhWMzYuMTg2NVpNMTAzLjM5MSAzNi4xODY1SDEwMy4zNzhWMzcuNjg2NUgxMDMuMzkxVjM2LjE4NjVaTTEwMy40MDUgMzYuMTg2NUgxMDMuMzkxVjM3LjY4NjVIMTAzLjQwNVYzNi4xODY1Wk0xMDMuNDE4IDM2LjE4NjVIMTAzLjQwNVYzNy42ODY1SDEwMy40MThWMzYuMTg2NVpNMTAzLjQzMiAzNi4xODY1SDEwMy40MThWMzcuNjg2NUgxMDMuNDMyVjM2LjE4NjVaTTEwMy40NDYgMzYuMTg2NUgxMDMuNDMyVjM3LjY4NjVIMTAzLjQ0NlYzNi4xODY1Wk0xMDMuNDU5IDM2LjE4NjVIMTAzLjQ0NlYzNy42ODY1SDEwMy40NTlWMzYuMTg2NVpNMTAzLjQ3MyAzNi4xODY1SDEwMy40NTlWMzcuNjg2NUgxMDMuNDczVjM2LjE4NjVaTTEwMy40ODcgMzYuMTg2NUgxMDMuNDczVjM3LjY4NjVIMTAzLjQ4N1YzNi4xODY1Wk0xMDMuNSAzNi4xODY1SDEwMy40ODdWMzcuNjg2NUgxMDMuNVYzNi4xODY1Wk0xMDMuNTE0IDM2LjE4NjVIMTAzLjVWMzcuNjg2NUgxMDMuNTE0VjM2LjE4NjVaTTEwMy41MjggMzYuMTg2NUgxMDMuNTE0VjM3LjY4NjVIMTAzLjUyOFYzNi4xODY1Wk0xMDMuNTQyIDM2LjE4NjVIMTAzLjUyOFYzNy42ODY1SDEwMy41NDJWMzYuMTg2NVpNMTAzLjU1NiAzNi4xODY1SDEwMy41NDJWMzcuNjg2NUgxMDMuNTU2VjM2LjE4NjVaTTEwMy41NjkgMzYuMTg2NUgxMDMuNTU2VjM3LjY4NjVIMTAzLjU2OVYzNi4xODY1Wk0xMDMuNTgzIDM2LjE4NjVIMTAzLjU2OVYzNy42ODY1SDEwMy41ODNWMzYuMTg2NVpNMTAzLjU5NyAzNi4xODY1SDEwMy41ODNWMzcuNjg2NUgxMDMuNTk3VjM2LjE4NjVaTTEwMy42MTEgMzYuMTg2NUgxMDMuNTk3VjM3LjY4NjVIMTAzLjYxMVYzNi4xODY1Wk0xMDMuNjI1IDM2LjE4NjVIMTAzLjYxMVYzNy42ODY1SDEwMy42MjVWMzYuMTg2NVpNMTAzLjYzOSAzNi4xODY1SDEwMy42MjVWMzcuNjg2NUgxMDMuNjM5VjM2LjE4NjVaTTEwMy42NTMgMzYuMTg2NUgxMDMuNjM5VjM3LjY4NjVIMTAzLjY1M1YzNi4xODY1Wk0xMDMuNjY3IDM2LjE4NjVIMTAzLjY1M1YzNy42ODY1SDEwMy42NjdWMzYuMTg2NVpNMTAzLjY4MSAzNi4xODY1SDEwMy42NjdWMzcuNjg2NUgxMDMuNjgxVjM2LjE4NjVaTTEwMy42OTUgMzYuMTg2NUgxMDMuNjgxVjM3LjY4NjVIMTAzLjY5NVYzNi4xODY1Wk0xMDMuNzA5IDM2LjE4NjVIMTAzLjY5NVYzNy42ODY1SDEwMy43MDlWMzYuMTg2NVpNMTAzLjcyMyAzNi4xODY1SDEwMy43MDlWMzcuNjg2NUgxMDMuNzIzVjM2LjE4NjVaTTEwMy43MzcgMzYuMTg2NUgxMDMuNzIzVjM3LjY4NjVIMTAzLjczN1YzNi4xODY1Wk0xMDMuNzUxIDM2LjE4NjVIMTAzLjczN1YzNy42ODY1SDEwMy43NTFWMzYuMTg2NVpNMTAzLjc2NSAzNi4xODY1SDEwMy43NTFWMzcuNjg2NUgxMDMuNzY1VjM2LjE4NjVaTTEwMy43NzkgMzYuMTg2NUgxMDMuNzY1VjM3LjY4NjVIMTAzLjc3OVYzNi4xODY1Wk0xMDMuNzkzIDM2LjE4NjVIMTAzLjc3OVYzNy42ODY1SDEwMy43OTNWMzYuMTg2NVpNMTAzLjgwNyAzNi4xODY1SDEwMy43OTNWMzcuNjg2NUgxMDMuODA3VjM2LjE4NjVaTTEwMy44MjEgMzYuMTg2NUgxMDMuODA3VjM3LjY4NjVIMTAzLjgyMVYzNi4xODY1Wk0xMDMuODM2IDM2LjE4NjVIMTAzLjgyMVYzNy42ODY1SDEwMy44MzZWMzYuMTg2NVpNMTAzLjg1IDM2LjE4NjVIMTAzLjgzNlYzNy42ODY1SDEwMy44NVYzNi4xODY1Wk0xMDMuODY0IDM2LjE4NjVIMTAzLjg1VjM3LjY4NjVIMTAzLjg2NFYzNi4xODY1Wk0xMDMuODc4IDM2LjE4NjVIMTAzLjg2NFYzNy42ODY1SDEwMy44NzhWMzYuMTg2NVpNMTAzLjg5MiAzNi4xODY1SDEwMy44NzhWMzcuNjg2NUgxMDMuODkyVjM2LjE4NjVaTTEwMy45MDcgMzYuMTg2NUgxMDMuODkyVjM3LjY4NjVIMTAzLjkwN1YzNi4xODY1Wk0xMDMuOTIxIDM2LjE4NjVIMTAzLjkwN1YzNy42ODY1SDEwMy45MjFWMzYuMTg2NVpNMTAzLjkzNSAzNi4xODY1SDEwMy45MjFWMzcuNjg2NUgxMDMuOTM1VjM2LjE4NjVaTTEwMy45NSAzNi4xODY1SDEwMy45MzVWMzcuNjg2NUgxMDMuOTVWMzYuMTg2NVpNMTAzLjk2NCAzNi4xODY1SDEwMy45NVYzNy42ODY1SDEwMy45NjRWMzYuMTg2NVpNMTAzLjk3OCAzNi4xODY1SDEwMy45NjRWMzcuNjg2NUgxMDMuOTc4VjM2LjE4NjVaTTEwMy45OTMgMzYuMTg2NUgxMDMuOTc4VjM3LjY4NjVIMTAzLjk5M1YzNi4xODY1Wk0xMDQuMDA3IDM2LjE4NjVIMTAzLjk5M1YzNy42ODY1SDEwNC4wMDdWMzYuMTg2NVpNMTA0LjAyMiAzNi4xODY1SDEwNC4wMDdWMzcuNjg2NUgxMDQuMDIyVjM2LjE4NjVaTTEwNC4wMzYgMzYuMTg2NUgxMDQuMDIyVjM3LjY4NjVIMTA0LjAzNlYzNi4xODY1Wk0xMDQuMDUgMzYuMTg2NUgxMDQuMDM2VjM3LjY4NjVIMTA0LjA1VjM2LjE4NjVaTTEwNC4wNjUgMzYuMTg2NUgxMDQuMDVWMzcuNjg2NUgxMDQuMDY1VjM2LjE4NjVaTTEwNC4wNzkgMzYuMTg2NUgxMDQuMDY1VjM3LjY4NjVIMTA0LjA3OVYzNi4xODY1Wk0xMDQuMDk0IDM2LjE4NjVIMTA0LjA3OVYzNy42ODY1SDEwNC4wOTRWMzYuMTg2NVpNMTA0LjEwOSAzNi4xODY1SDEwNC4wOTRWMzcuNjg2NUgxMDQuMTA5VjM2LjE4NjVaTTEwNC4xMjMgMzYuMTg2NUgxMDQuMTA5VjM3LjY4NjVIMTA0LjEyM1YzNi4xODY1Wk0xMDQuMTM4IDM2LjE4NjVIMTA0LjEyM1YzNy42ODY1SDEwNC4xMzhWMzYuMTg2NVpNMTA0LjE1MiAzNi4xODY1SDEwNC4xMzhWMzcuNjg2NUgxMDQuMTUyVjM2LjE4NjVaTTEwNC4xNjcgMzYuMTg2NUgxMDQuMTUyVjM3LjY4NjVIMTA0LjE2N1YzNi4xODY1Wk0xMDQuMTgyIDM2LjE4NjVIMTA0LjE2N1YzNy42ODY1SDEwNC4xODJWMzYuMTg2NVpNMTA0LjE5NiAzNi4xODY1SDEwNC4xODJWMzcuNjg2NUgxMDQuMTk2VjM2LjE4NjVaTTEwNC4yMTEgMzYuMTg2NUgxMDQuMTk2VjM3LjY4NjVIMTA0LjIxMVYzNi4xODY1Wk0xMDQuMjI2IDM2LjE4NjVIMTA0LjIxMVYzNy42ODY1SDEwNC4yMjZWMzYuMTg2NVpNMTA0LjI0IDM2LjE4NjVIMTA0LjIyNlYzNy42ODY1SDEwNC4yNFYzNi4xODY1Wk0xMDQuMjU1IDM2LjE4NjVIMTA0LjI0VjM3LjY4NjVIMTA0LjI1NVYzNi4xODY1Wk0xMDQuMjcgMzYuMTg2NUgxMDQuMjU1VjM3LjY4NjVIMTA0LjI3VjM2LjE4NjVaTTEwNC4yODQgMzYuMTg2NUgxMDQuMjdWMzcuNjg2NUgxMDQuMjg0VjM2LjE4NjVaTTEwNC4yOTkgMzYuMTg2NUgxMDQuMjg0VjM3LjY4NjVIMTA0LjI5OVYzNi4xODY1Wk0xMDQuMzE0IDM2LjE4NjVIMTA0LjI5OVYzNy42ODY1SDEwNC4zMTRWMzYuMTg2NVpNMTA0LjMyOSAzNi4xODY1SDEwNC4zMTRWMzcuNjg2NUgxMDQuMzI5VjM2LjE4NjVaTTEwNC4zNDQgMzYuMTg2NUgxMDQuMzI5VjM3LjY4NjVIMTA0LjM0NFYzNi4xODY1Wk0xMDQuMzU5IDM2LjE4NjVIMTA0LjM0NFYzNy42ODY1SDEwNC4zNTlWMzYuMTg2NVpNMTA0LjM3MyAzNi4xODY1SDEwNC4zNTlWMzcuNjg2NUgxMDQuMzczVjM2LjE4NjVaTTEwNC4zODggMzYuMTg2NUgxMDQuMzczVjM3LjY4NjVIMTA0LjM4OFYzNi4xODY1Wk0xMDQuNDAzIDM2LjE4NjVIMTA0LjM4OFYzNy42ODY1SDEwNC40MDNWMzYuMTg2NVpNMTA0LjQxOCAzNi4xODY1SDEwNC40MDNWMzcuNjg2NUgxMDQuNDE4VjM2LjE4NjVaTTEwNC40MzMgMzYuMTg2NUgxMDQuNDE4VjM3LjY4NjVIMTA0LjQzM1YzNi4xODY1Wk0xMDQuNDQ4IDM2LjE4NjVIMTA0LjQzM1YzNy42ODY1SDEwNC40NDhWMzYuMTg2NVpNMTA0LjQ2MyAzNi4xODY1SDEwNC40NDhWMzcuNjg2NUgxMDQuNDYzVjM2LjE4NjVaTTEwNC40NzggMzYuMTg2NUgxMDQuNDYzVjM3LjY4NjVIMTA0LjQ3OFYzNi4xODY1Wk0xMDQuNDkzIDM2LjE4NjVIMTA0LjQ3OFYzNy42ODY1SDEwNC40OTNWMzYuMTg2NVpNMTA0LjUwOCAzNi4xODY1SDEwNC40OTNWMzcuNjg2NUgxMDQuNTA4VjM2LjE4NjVaTTEwNC41MjMgMzYuMTg2NUgxMDQuNTA4VjM3LjY4NjVIMTA0LjUyM1YzNi4xODY1Wk0xMDQuNTM4IDM2LjE4NjVIMTA0LjUyM1YzNy42ODY1SDEwNC41MzhWMzYuMTg2NVpNMTA0LjU1NCAzNi4xODY1SDEwNC41MzhWMzcuNjg2NUgxMDQuNTU0VjM2LjE4NjVaTTEwNC41NjkgMzYuMTg2NUgxMDQuNTU0VjM3LjY4NjVIMTA0LjU2OVYzNi4xODY1Wk0xMDQuNTg0IDM2LjE4NjVIMTA0LjU2OVYzNy42ODY1SDEwNC41ODRWMzYuMTg2NVpNMTA0LjU5OSAzNi4xODY1SDEwNC41ODRWMzcuNjg2NUgxMDQuNTk5VjM2LjE4NjVaTTEwNC42MTQgMzYuMTg2NUgxMDQuNTk5VjM3LjY4NjVIMTA0LjYxNFYzNi4xODY1Wk0xMDQuNjI5IDM2LjE4NjVIMTA0LjYxNFYzNy42ODY1SDEwNC42MjlWMzYuMTg2NVpNMTA0LjY0NSAzNi4xODY1SDEwNC42MjlWMzcuNjg2NUgxMDQuNjQ1VjM2LjE4NjVaTTEwNC42NiAzNi4xODY1SDEwNC42NDVWMzcuNjg2NUgxMDQuNjZWMzYuMTg2NVpNMTA0LjY3NSAzNi4xODY1SDEwNC42NlYzNy42ODY1SDEwNC42NzVWMzYuMTg2NVpNMTA0LjY5IDM2LjE4NjVIMTA0LjY3NVYzNy42ODY1SDEwNC42OVYzNi4xODY1Wk0xMDQuNzA2IDM2LjE4NjVIMTA0LjY5VjM3LjY4NjVIMTA0LjcwNlYzNi4xODY1Wk0xMDQuNzIxIDM2LjE4NjVIMTA0LjcwNlYzNy42ODY1SDEwNC43MjFWMzYuMTg2NVpNMTA0LjczNiAzNi4xODY1SDEwNC43MjFWMzcuNjg2NUgxMDQuNzM2VjM2LjE4NjVaTTEwNC43NTIgMzYuMTg2NUgxMDQuNzM2VjM3LjY4NjVIMTA0Ljc1MlYzNi4xODY1Wk0xMDQuNzY3IDM2LjE4NjVIMTA0Ljc1MlYzNy42ODY1SDEwNC43NjdWMzYuMTg2NVpNMTA0Ljc4MiAzNi4xODY1SDEwNC43NjdWMzcuNjg2NUgxMDQuNzgyVjM2LjE4NjVaTTEwNC43OTggMzYuMTg2NUgxMDQuNzgyVjM3LjY4NjVIMTA0Ljc5OFYzNi4xODY1Wk0xMDQuODEzIDM2LjE4NjVIMTA0Ljc5OFYzNy42ODY1SDEwNC44MTNWMzYuMTg2NVpNMTA0LjgyOSAzNi4xODY1SDEwNC44MTNWMzcuNjg2NUgxMDQuODI5VjM2LjE4NjVaTTEwNC44NDQgMzYuMTg2NUgxMDQuODI5VjM3LjY4NjVIMTA0Ljg0NFYzNi4xODY1Wk0xMDQuODYgMzYuMTg2NUgxMDQuODQ0VjM3LjY4NjVIMTA0Ljg2VjM2LjE4NjVaTTEwNC44NzUgMzYuMTg2NUgxMDQuODZWMzcuNjg2NUgxMDQuODc1VjM2LjE4NjVaTTEwNC44OTEgMzYuMTg2NUgxMDQuODc1VjM3LjY4NjVIMTA0Ljg5MVYzNi4xODY1Wk0xMDQuOTA2IDM2LjE4NjVIMTA0Ljg5MVYzNy42ODY1SDEwNC45MDZWMzYuMTg2NVpNMTA0LjkyMiAzNi4xODY1SDEwNC45MDZWMzcuNjg2NUgxMDQuOTIyVjM2LjE4NjVaTTEwNC45MzcgMzYuMTg2NUgxMDQuOTIyVjM3LjY4NjVIMTA0LjkzN1YzNi4xODY1Wk0xMDQuOTUzIDM2LjE4NjVIMTA0LjkzN1YzNy42ODY1SDEwNC45NTNWMzYuMTg2NVpNMTA0Ljk2OSAzNi4xODY1SDEwNC45NTNWMzcuNjg2NUgxMDQuOTY5VjM2LjE4NjVaTTEwNC45ODQgMzYuMTg2NUgxMDQuOTY5VjM3LjY4NjVIMTA0Ljk4NFYzNi4xODY1Wk0xMDUgMzYuMTg2NUgxMDQuOTg0VjM3LjY4NjVIMTA1VjM2LjE4NjVaTTEwNS4wMTYgMzYuMTg2NUgxMDVWMzcuNjg2NUgxMDUuMDE2VjM2LjE4NjVaTTEwNS4wMzEgMzYuMTg2NUgxMDUuMDE2VjM3LjY4NjVIMTA1LjAzMVYzNi4xODY1Wk0xMDUuMDQ3IDM2LjE4NjVIMTA1LjAzMVYzNy42ODY1SDEwNS4wNDdWMzYuMTg2NVpNMTA1LjA2MyAzNi4xODY1SDEwNS4wNDdWMzcuNjg2NUgxMDUuMDYzVjM2LjE4NjVaTTEwNS4wNzggMzYuMTg2NUgxMDUuMDYzVjM3LjY4NjVIMTA1LjA3OFYzNi4xODY1Wk0xMDUuMDk0IDM2LjE4NjVIMTA1LjA3OFYzNy42ODY1SDEwNS4wOTRWMzYuMTg2NVpNMTA1LjExIDM2LjE4NjVIMTA1LjA5NFYzNy42ODY1SDEwNS4xMVYzNi4xODY1Wk0xMDUuMTI2IDM2LjE4NjVIMTA1LjExVjM3LjY4NjVIMTA1LjEyNlYzNi4xODY1Wk0xMDUuMTQyIDM2LjE4NjVIMTA1LjEyNlYzNy42ODY1SDEwNS4xNDJWMzYuMTg2NVpNMTA1LjE1OCAzNi4xODY1SDEwNS4xNDJWMzcuNjg2NUgxMDUuMTU4VjM2LjE4NjVaTTEwNS4xNzMgMzYuMTg2NUgxMDUuMTU4VjM3LjY4NjVIMTA1LjE3M1YzNi4xODY1Wk0xMDUuMTg5IDM2LjE4NjVIMTA1LjE3M1YzNy42ODY1SDEwNS4xODlWMzYuMTg2NVpNMTA1LjIwNSAzNi4xODY1SDEwNS4xODlWMzcuNjg2NUgxMDUuMjA1VjM2LjE4NjVaTTEwNS4yMjEgMzYuMTg2NUgxMDUuMjA1VjM3LjY4NjVIMTA1LjIyMVYzNi4xODY1Wk0xMDUuMjM3IDM2LjE4NjVIMTA1LjIyMVYzNy42ODY1SDEwNS4yMzdWMzYuMTg2NVpNMTA1LjI1MyAzNi4xODY1SDEwNS4yMzdWMzcuNjg2NUgxMDUuMjUzVjM2LjE4NjVaTTEwNS4yNjkgMzYuMTg2NUgxMDUuMjUzVjM3LjY4NjVIMTA1LjI2OVYzNi4xODY1Wk0xMDUuMjg1IDM2LjE4NjVIMTA1LjI2OVYzNy42ODY1SDEwNS4yODVWMzYuMTg2NVpNMTA1LjMwMSAzNi4xODY1SDEwNS4yODVWMzcuNjg2NUgxMDUuMzAxVjM2LjE4NjVaTTEwNS4zMTcgMzYuMTg2NUgxMDUuMzAxVjM3LjY4NjVIMTA1LjMxN1YzNi4xODY1Wk0xMDUuMzMzIDM2LjE4NjVIMTA1LjMxN1YzNy42ODY1SDEwNS4zMzNWMzYuMTg2NVpNMTA1LjM0OSAzNi4xODY1SDEwNS4zMzNWMzcuNjg2NUgxMDUuMzQ5VjM2LjE4NjVaTTEwNS4zNjUgMzYuMTg2NUgxMDUuMzQ5VjM3LjY4NjVIMTA1LjM2NVYzNi4xODY1Wk0xMDUuMzgxIDM2LjE4NjVIMTA1LjM2NVYzNy42ODY1SDEwNS4zODFWMzYuMTg2NVpNMTA1LjM5OCAzNi4xODY1SDEwNS4zODFWMzcuNjg2NUgxMDUuMzk4VjM2LjE4NjVaTTEwNS40MTQgMzYuMTg2NUgxMDUuMzk4VjM3LjY4NjVIMTA1LjQxNFYzNi4xODY1Wk0xMDUuNDMgMzYuMTg2NUgxMDUuNDE0VjM3LjY4NjVIMTA1LjQzVjM2LjE4NjVaTTEwNS40NDYgMzYuMTg2NUgxMDUuNDNWMzcuNjg2NUgxMDUuNDQ2VjM2LjE4NjVaTTEwNS40NjIgMzYuMTg2NUgxMDUuNDQ2VjM3LjY4NjVIMTA1LjQ2MlYzNi4xODY1Wk0xMDUuNDc4IDM2LjE4NjVIMTA1LjQ2MlYzNy42ODY1SDEwNS40NzhWMzYuMTg2NVpNMTA1LjQ5NSAzNi4xODY1SDEwNS40NzhWMzcuNjg2NUgxMDUuNDk1VjM2LjE4NjVaTTEwNS41MTEgMzYuMTg2NUgxMDUuNDk1VjM3LjY4NjVIMTA1LjUxMVYzNi4xODY1Wk0xMDUuNTI3IDM2LjE4NjVIMTA1LjUxMVYzNy42ODY1SDEwNS41MjdWMzYuMTg2NVpNMTA1LjU0NCAzNi4xODY1SDEwNS41MjdWMzcuNjg2NUgxMDUuNTQ0VjM2LjE4NjVaTTEwNS41NiAzNi4xODY1SDEwNS41NDRWMzcuNjg2NUgxMDUuNTZWMzYuMTg2NVpNMTA1LjU3NiAzNi4xODY1SDEwNS41NlYzNy42ODY1SDEwNS41NzZWMzYuMTg2NVpNMTA1LjU5MyAzNi4xODY1SDEwNS41NzZWMzcuNjg2NUgxMDUuNTkzVjM2LjE4NjVaTTEwNS42MDkgMzYuMTg2NUgxMDUuNTkzVjM3LjY4NjVIMTA1LjYwOVYzNi4xODY1Wk0xMDUuNjI1IDM2LjE4NjVIMTA1LjYwOVYzNy42ODY1SDEwNS42MjVWMzYuMTg2NVpNMTA1LjY0MiAzNi4xODY1SDEwNS42MjVWMzcuNjg2NUgxMDUuNjQyVjM2LjE4NjVaTTEwNS42NTggMzYuMTg2NUgxMDUuNjQyVjM3LjY4NjVIMTA1LjY1OFYzNi4xODY1Wk0xMDUuNjc1IDM2LjE4NjVIMTA1LjY1OFYzNy42ODY1SDEwNS42NzVWMzYuMTg2NVpNMTA1LjY5MSAzNi4xODY1SDEwNS42NzVWMzcuNjg2NUgxMDUuNjkxVjM2LjE4NjVaTTEwNS43MDggMzYuMTg2NUgxMDUuNjkxVjM3LjY4NjVIMTA1LjcwOFYzNi4xODY1Wk0xMDUuNzI0IDM2LjE4NjVIMTA1LjcwOFYzNy42ODY1SDEwNS43MjRWMzYuMTg2NVpNMTA1Ljc0MSAzNi4xODY1SDEwNS43MjRWMzcuNjg2NUgxMDUuNzQxVjM2LjE4NjVaTTEwNS43NTcgMzYuMTg2NUgxMDUuNzQxVjM3LjY4NjVIMTA1Ljc1N1YzNi4xODY1Wk0xMDUuNzc0IDM2LjE4NjVIMTA1Ljc1N1YzNy42ODY1SDEwNS43NzRWMzYuMTg2NVpNMTA1Ljc5IDM2LjE4NjVIMTA1Ljc3NFYzNy42ODY1SDEwNS43OVYzNi4xODY1Wk0xMDUuODA3IDM2LjE4NjVIMTA1Ljc5VjM3LjY4NjVIMTA1LjgwN1YzNi4xODY1Wk0xMDUuODI0IDM2LjE4NjVIMTA1LjgwN1YzNy42ODY1SDEwNS44MjRWMzYuMTg2NVpNMTA1Ljg0IDM2LjE4NjVIMTA1LjgyNFYzNy42ODY1SDEwNS44NFYzNi4xODY1Wk0xMDUuODU3IDM2LjE4NjVIMTA1Ljg0VjM3LjY4NjVIMTA1Ljg1N1YzNi4xODY1Wk0xMDUuODc0IDM2LjE4NjVIMTA1Ljg1N1YzNy42ODY1SDEwNS44NzRWMzYuMTg2NVpNMTA1Ljg5IDM2LjE4NjVIMTA1Ljg3NFYzNy42ODY1SDEwNS44OVYzNi4xODY1Wk0xMDUuOTA3IDM2LjE4NjVIMTA1Ljg5VjM3LjY4NjVIMTA1LjkwN1YzNi4xODY1Wk0xMDUuOTI0IDM2LjE4NjVIMTA1LjkwN1YzNy42ODY1SDEwNS45MjRWMzYuMTg2NVpNMTA1Ljk0IDM2LjE4NjVIMTA1LjkyNFYzNy42ODY1SDEwNS45NFYzNi4xODY1Wk0xMDUuOTU3IDM2LjE4NjVIMTA1Ljk0VjM3LjY4NjVIMTA1Ljk1N1YzNi4xODY1Wk0xMDUuOTc0IDM2LjE4NjVIMTA1Ljk1N1YzNy42ODY1SDEwNS45NzRWMzYuMTg2NVpNMTA1Ljk5MSAzNi4xODY1SDEwNS45NzRWMzcuNjg2NUgxMDUuOTkxVjM2LjE4NjVaTTEwNi4wMDggMzYuMTg2NUgxMDUuOTkxVjM3LjY4NjVIMTA2LjAwOFYzNi4xODY1Wk0xMDYuMDI1IDM2LjE4NjVIMTA2LjAwOFYzNy42ODY1SDEwNi4wMjVWMzYuMTg2NVpNMTA2LjA0MSAzNi4xODY1SDEwNi4wMjVWMzcuNjg2NUgxMDYuMDQxVjM2LjE4NjVaTTEwNi4wNTggMzYuMTg2NUgxMDYuMDQxVjM3LjY4NjVIMTA2LjA1OFYzNi4xODY1Wk0xMDYuMDc1IDM2LjE4NjVIMTA2LjA1OFYzNy42ODY1SDEwNi4wNzVWMzYuMTg2NVpNMTA2LjA5MiAzNi4xODY1SDEwNi4wNzVWMzcuNjg2NUgxMDYuMDkyVjM2LjE4NjVaTTEwNi4xMDkgMzYuMTg2NUgxMDYuMDkyVjM3LjY4NjVIMTA2LjEwOVYzNi4xODY1Wk0xMDYuMTI2IDM2LjE4NjVIMTA2LjEwOVYzNy42ODY1SDEwNi4xMjZWMzYuMTg2NVpNMTA2LjE0MyAzNi4xODY1SDEwNi4xMjZWMzcuNjg2NUgxMDYuMTQzVjM2LjE4NjVaTTEwNi4xNiAzNi4xODY1SDEwNi4xNDNWMzcuNjg2NUgxMDYuMTZWMzYuMTg2NVpNMTA2LjE3NyAzNi4xODY1SDEwNi4xNlYzNy42ODY1SDEwNi4xNzdWMzYuMTg2NVpNMTA2LjE5NCAzNi4xODY1SDEwNi4xNzdWMzcuNjg2NUgxMDYuMTk0VjM2LjE4NjVaTTEwNi4yMTEgMzYuMTg2NUgxMDYuMTk0VjM3LjY4NjVIMTA2LjIxMVYzNi4xODY1Wk0xMDYuMjI4IDM2LjE4NjVIMTA2LjIxMVYzNy42ODY1SDEwNi4yMjhWMzYuMTg2NVpNMTA2LjI0NSAzNi4xODY1SDEwNi4yMjhWMzcuNjg2NUgxMDYuMjQ1VjM2LjE4NjVaTTEwNi4yNjIgMzYuMTg2NUgxMDYuMjQ1VjM3LjY4NjVIMTA2LjI2MlYzNi4xODY1Wk0xMDYuMjggMzYuMTg2NUgxMDYuMjYyVjM3LjY4NjVIMTA2LjI4VjM2LjE4NjVaTTEwNi4yOTcgMzYuMTg2NUgxMDYuMjhWMzcuNjg2NUgxMDYuMjk3VjM2LjE4NjVaTTEwNi4zMTQgMzYuMTg2NUgxMDYuMjk3VjM3LjY4NjVIMTA2LjMxNFYzNi4xODY1Wk0xMDYuMzMxIDM2LjE4NjVIMTA2LjMxNFYzNy42ODY1SDEwNi4zMzFWMzYuMTg2NVpNMTA2LjM0OCAzNi4xODY1SDEwNi4zMzFWMzcuNjg2NUgxMDYuMzQ4VjM2LjE4NjVaTTEwNi4zNjYgMzYuMTg2NUgxMDYuMzQ4VjM3LjY4NjVIMTA2LjM2NlYzNi4xODY1Wk0xMDYuMzgzIDM2LjE4NjVIMTA2LjM2NlYzNy42ODY1SDEwNi4zODNWMzYuMTg2NVpNMTA2LjQgMzYuMTg2NUgxMDYuMzgzVjM3LjY4NjVIMTA2LjRWMzYuMTg2NVpNMTA2LjQxNyAzNi4xODY1SDEwNi40VjM3LjY4NjVIMTA2LjQxN1YzNi4xODY1Wk0xMDYuNDM1IDM2LjE4NjVIMTA2LjQxN1YzNy42ODY1SDEwNi40MzVWMzYuMTg2NVpNMTA2LjQ1MiAzNi4xODY1SDEwNi40MzVWMzcuNjg2NUgxMDYuNDUyVjM2LjE4NjVaTTEwNi40NjkgMzYuMTg2NUgxMDYuNDUyVjM3LjY4NjVIMTA2LjQ2OVYzNi4xODY1Wk0xMDYuNDg3IDM2LjE4NjVIMTA2LjQ2OVYzNy42ODY1SDEwNi40ODdWMzYuMTg2NVpNMTA2LjUwNCAzNi4xODY1SDEwNi40ODdWMzcuNjg2NUgxMDYuNTA0VjM2LjE4NjVaTTEwNi41MjEgMzYuMTg2NUgxMDYuNTA0VjM3LjY4NjVIMTA2LjUyMVYzNi4xODY1Wk0xMDYuNTM5IDM2LjE4NjVIMTA2LjUyMVYzNy42ODY1SDEwNi41MzlWMzYuMTg2NVpNMTA2LjU1NiAzNi4xODY1SDEwNi41MzlWMzcuNjg2NUgxMDYuNTU2VjM2LjE4NjVaTTEwNi41NzQgMzYuMTg2NUgxMDYuNTU2VjM3LjY4NjVIMTA2LjU3NFYzNi4xODY1Wk0xMDYuNTkxIDM2LjE4NjVIMTA2LjU3NFYzNy42ODY1SDEwNi41OTFWMzYuMTg2NVpNMTA2LjYwOSAzNi4xODY1SDEwNi41OTFWMzcuNjg2NUgxMDYuNjA5VjM2LjE4NjVaTTEwNi42MjYgMzYuMTg2NUgxMDYuNjA5VjM3LjY4NjVIMTA2LjYyNlYzNi4xODY1Wk0xMDYuNjQ0IDM2LjE4NjVIMTA2LjYyNlYzNy42ODY1SDEwNi42NDRWMzYuMTg2NVpNMTA2LjY2MSAzNi4xODY1SDEwNi42NDRWMzcuNjg2NUgxMDYuNjYxVjM2LjE4NjVaTTEwNi42NzkgMzYuMTg2NUgxMDYuNjYxVjM3LjY4NjVIMTA2LjY3OVYzNi4xODY1Wk0xMDYuNjk3IDM2LjE4NjVIMTA2LjY3OVYzNy42ODY1SDEwNi42OTdWMzYuMTg2NVpNMTA2LjcxNCAzNi4xODY1SDEwNi42OTdWMzcuNjg2NUgxMDYuNzE0VjM2LjE4NjVaTTEwNi43MzIgMzYuMTg2NUgxMDYuNzE0VjM3LjY4NjVIMTA2LjczMlYzNi4xODY1Wk0xMDYuNzQ5IDM2LjE4NjVIMTA2LjczMlYzNy42ODY1SDEwNi43NDlWMzYuMTg2NVpNMTA2Ljc2NyAzNi4xODY1SDEwNi43NDlWMzcuNjg2NUgxMDYuNzY3VjM2LjE4NjVaTTEwNi43ODUgMzYuMTg2NUgxMDYuNzY3VjM3LjY4NjVIMTA2Ljc4NVYzNi4xODY1Wk0xMDYuODAyIDM2LjE4NjVIMTA2Ljc4NVYzNy42ODY1SDEwNi44MDJWMzYuMTg2NVpNMTA2LjgyIDM2LjE4NjVIMTA2LjgwMlYzNy42ODY1SDEwNi44MlYzNi4xODY1Wk0xMDYuODM4IDM2LjE4NjVIMTA2LjgyVjM3LjY4NjVIMTA2LjgzOFYzNi4xODY1Wk0xMDYuODU2IDM2LjE4NjVIMTA2LjgzOFYzNy42ODY1SDEwNi44NTZWMzYuMTg2NVpNMTA2Ljg3MyAzNi4xODY1SDEwNi44NTZWMzcuNjg2NUgxMDYuODczVjM2LjE4NjVaTTEwNi44OTEgMzYuMTg2NUgxMDYuODczVjM3LjY4NjVIMTA2Ljg5MVYzNi4xODY1Wk0xMDYuOTA5IDM2LjE4NjVIMTA2Ljg5MVYzNy42ODY1SDEwNi45MDlWMzYuMTg2NVpNMTA2LjkyNyAzNi4xODY1SDEwNi45MDlWMzcuNjg2NUgxMDYuOTI3VjM2LjE4NjVaTTEwNi45NDUgMzYuMTg2NUgxMDYuOTI3VjM3LjY4NjVIMTA2Ljk0NVYzNi4xODY1Wk0xMDYuOTYzIDM2LjE4NjVIMTA2Ljk0NVYzNy42ODY1SDEwNi45NjNWMzYuMTg2NVpNMTA2Ljk4MSAzNi4xODY1SDEwNi45NjNWMzcuNjg2NUgxMDYuOTgxVjM2LjE4NjVaTTEwNi45OTggMzYuMTg2NUgxMDYuOTgxVjM3LjY4NjVIMTA2Ljk5OFYzNi4xODY1Wk0xMDcuMDE2IDM2LjE4NjVIMTA2Ljk5OFYzNy42ODY1SDEwNy4wMTZWMzYuMTg2NVpNMTA3LjAzNCAzNi4xODY1SDEwNy4wMTZWMzcuNjg2NUgxMDcuMDM0VjM2LjE4NjVaTTEwNy4wNTIgMzYuMTg2NUgxMDcuMDM0VjM3LjY4NjVIMTA3LjA1MlYzNi4xODY1Wk0xMDcuMDcgMzYuMTg2NUgxMDcuMDUyVjM3LjY4NjVIMTA3LjA3VjM2LjE4NjVaTTEwNy4wODggMzYuMTg2NUgxMDcuMDdWMzcuNjg2NUgxMDcuMDg4VjM2LjE4NjVaTTEwNy4xMDYgMzYuMTg2NUgxMDcuMDg4VjM3LjY4NjVIMTA3LjEwNlYzNi4xODY1Wk0xMDcuMTI0IDM2LjE4NjVIMTA3LjEwNlYzNy42ODY1SDEwNy4xMjRWMzYuMTg2NVpNMTA3LjE0MiAzNi4xODY1SDEwNy4xMjRWMzcuNjg2NUgxMDcuMTQyVjM2LjE4NjVaTTEwNy4xNjEgMzYuMTg2NUgxMDcuMTQyVjM3LjY4NjVIMTA3LjE2MVYzNi4xODY1Wk0xMDcuMTc5IDM2LjE4NjVIMTA3LjE2MVYzNy42ODY1SDEwNy4xNzlWMzYuMTg2NVpNMTA3LjE5NyAzNi4xODY1SDEwNy4xNzlWMzcuNjg2NUgxMDcuMTk3VjM2LjE4NjVaTTEwNy4yMTUgMzYuMTg2NUgxMDcuMTk3VjM3LjY4NjVIMTA3LjIxNVYzNi4xODY1Wk0xMDcuMjMzIDM2LjE4NjVIMTA3LjIxNVYzNy42ODY1SDEwNy4yMzNWMzYuMTg2NVpNMTA3LjI1MSAzNi4xODY1SDEwNy4yMzNWMzcuNjg2NUgxMDcuMjUxVjM2LjE4NjVaTTEwNy4yNjkgMzYuMTg2NUgxMDcuMjUxVjM3LjY4NjVIMTA3LjI2OVYzNi4xODY1Wk0xMDcuMjg4IDM2LjE4NjVIMTA3LjI2OVYzNy42ODY1SDEwNy4yODhWMzYuMTg2NVpNMTA3LjMwNiAzNi4xODY1SDEwNy4yODhWMzcuNjg2NUgxMDcuMzA2VjM2LjE4NjVaTTEwNy4zMjQgMzYuMTg2NUgxMDcuMzA2VjM3LjY4NjVIMTA3LjMyNFYzNi4xODY1Wk0xMDcuMzQyIDM2LjE4NjVIMTA3LjMyNFYzNy42ODY1SDEwNy4zNDJWMzYuMTg2NVpNMTA3LjM2MSAzNi4xODY1SDEwNy4zNDJWMzcuNjg2NUgxMDcuMzYxVjM2LjE4NjVaTTEwNy4zNzkgMzYuMTg2NUgxMDcuMzYxVjM3LjY4NjVIMTA3LjM3OVYzNi4xODY1Wk0xMDcuMzk3IDM2LjE4NjVIMTA3LjM3OVYzNy42ODY1SDEwNy4zOTdWMzYuMTg2NVpNMTA3LjQxNiAzNi4xODY1SDEwNy4zOTdWMzcuNjg2NUgxMDcuNDE2VjM2LjE4NjVaTTEwNy40MzQgMzYuMTg2NUgxMDcuNDE2VjM3LjY4NjVIMTA3LjQzNFYzNi4xODY1Wk0xMDcuNDUyIDM2LjE4NjVIMTA3LjQzNFYzNy42ODY1SDEwNy40NTJWMzYuMTg2NVpNMTA3LjQ3MSAzNi4xODY1SDEwNy40NTJWMzcuNjg2NUgxMDcuNDcxVjM2LjE4NjVaTTEwNy40ODkgMzYuMTg2NUgxMDcuNDcxVjM3LjY4NjVIMTA3LjQ4OVYzNi4xODY1Wk0xMDcuNTA4IDM2LjE4NjVIMTA3LjQ4OVYzNy42ODY1SDEwNy41MDhWMzYuMTg2NVpNMTA3LjUyNiAzNi4xODY1SDEwNy41MDhWMzcuNjg2NUgxMDcuNTI2VjM2LjE4NjVaTTEwNy41NDUgMzYuMTg2NUgxMDcuNTI2VjM3LjY4NjVIMTA3LjU0NVYzNi4xODY1Wk0xMDcuNTYzIDM2LjE4NjVIMTA3LjU0NVYzNy42ODY1SDEwNy41NjNWMzYuMTg2NVpNMTA3LjU4MiAzNi4xODY1SDEwNy41NjNWMzcuNjg2NUgxMDcuNTgyVjM2LjE4NjVaTTEwNy42IDM2LjE4NjVIMTA3LjU4MlYzNy42ODY1SDEwNy42VjM2LjE4NjVaTTEwNy42MTkgMzYuMTg2NUgxMDcuNlYzNy42ODY1SDEwNy42MTlWMzYuMTg2NVpNMTA3LjYzNyAzNi4xODY1SDEwNy42MTlWMzcuNjg2NUgxMDcuNjM3VjM2LjE4NjVaTTEwNy42NTYgMzYuMTg2NUgxMDcuNjM3VjM3LjY4NjVIMTA3LjY1NlYzNi4xODY1Wk0xMDcuNjc1IDM2LjE4NjVIMTA3LjY1NlYzNy42ODY1SDEwNy42NzVWMzYuMTg2NVpNMTA3LjY5MyAzNi4xODY1SDEwNy42NzVWMzcuNjg2NUgxMDcuNjkzVjM2LjE4NjVaTTEwNy43MTIgMzYuMTg2NUgxMDcuNjkzVjM3LjY4NjVIMTA3LjcxMlYzNi4xODY1Wk0xMDcuNzMxIDM2LjE4NjVIMTA3LjcxMlYzNy42ODY1SDEwNy43MzFWMzYuMTg2NVpNMTA3Ljc0OSAzNi4xODY1SDEwNy43MzFWMzcuNjg2NUgxMDcuNzQ5VjM2LjE4NjVaTTEwNy43NjggMzYuMTg2NUgxMDcuNzQ5VjM3LjY4NjVIMTA3Ljc2OFYzNi4xODY1Wk0xMDcuNzg3IDM2LjE4NjVIMTA3Ljc2OFYzNy42ODY1SDEwNy43ODdWMzYuMTg2NVpNMTA3LjgwNSAzNi4xODY1SDEwNy43ODdWMzcuNjg2NUgxMDcuODA1VjM2LjE4NjVaTTEwNy44MjQgMzYuMTg2NUgxMDcuODA1VjM3LjY4NjVIMTA3LjgyNFYzNi4xODY1Wk0xMDcuODQzIDM2LjE4NjVIMTA3LjgyNFYzNy42ODY1SDEwNy44NDNWMzYuMTg2NVpNMTA3Ljg2MiAzNi4xODY1SDEwNy44NDNWMzcuNjg2NUgxMDcuODYyVjM2LjE4NjVaTTEwNy44ODEgMzYuMTg2NUgxMDcuODYyVjM3LjY4NjVIMTA3Ljg4MVYzNi4xODY1Wk0xMDcuODk5IDM2LjE4NjVIMTA3Ljg4MVYzNy42ODY1SDEwNy44OTlWMzYuMTg2NVpNMTA3LjkxOCAzNi4xODY1SDEwNy44OTlWMzcuNjg2NUgxMDcuOTE4VjM2LjE4NjVaTTEwNy45MzcgMzYuMTg2NUgxMDcuOTE4VjM3LjY4NjVIMTA3LjkzN1YzNi4xODY1Wk0xMDcuOTU2IDM2LjE4NjVIMTA3LjkzN1YzNy42ODY1SDEwNy45NTZWMzYuMTg2NVpNMTA3Ljk3NSAzNi4xODY1SDEwNy45NTZWMzcuNjg2NUgxMDcuOTc1VjM2LjE4NjVaTTEwNy45OTQgMzYuMTg2NUgxMDcuOTc1VjM3LjY4NjVIMTA3Ljk5NFYzNi4xODY1Wk0xMDguMDEzIDM2LjE4NjVIMTA3Ljk5NFYzNy42ODY1SDEwOC4wMTNWMzYuMTg2NVpNMTA4LjAzMiAzNi4xODY1SDEwOC4wMTNWMzcuNjg2NUgxMDguMDMyVjM2LjE4NjVaTTEwOC4wNTEgMzYuMTg2NUgxMDguMDMyVjM3LjY4NjVIMTA4LjA1MVYzNi4xODY1Wk0xMDguMDcgMzYuMTg2NUgxMDguMDUxVjM3LjY4NjVIMTA4LjA3VjM2LjE4NjVaTTEwOC4wODkgMzYuMTg2NUgxMDguMDdWMzcuNjg2NUgxMDguMDg5VjM2LjE4NjVaTTEwOC4xMDggMzYuMTg2NUgxMDguMDg5VjM3LjY4NjVIMTA4LjEwOFYzNi4xODY1Wk0xMDguMTI3IDM2LjE4NjVIMTA4LjEwOFYzNy42ODY1SDEwOC4xMjdWMzYuMTg2NVpNMTA4LjE0NiAzNi4xODY1SDEwOC4xMjdWMzcuNjg2NUgxMDguMTQ2VjM2LjE4NjVaTTEwOC4xNjUgMzYuMTg2NUgxMDguMTQ2VjM3LjY4NjVIMTA4LjE2NVYzNi4xODY1Wk0xMDguMTg0IDM2LjE4NjVIMTA4LjE2NVYzNy42ODY1SDEwOC4xODRWMzYuMTg2NVpNMTA4LjIwMyAzNi4xODY1SDEwOC4xODRWMzcuNjg2NUgxMDguMjAzVjM2LjE4NjVaTTkxLjQ4NTYgMzYuMTg2NUM4OS4xNjEyIDM2LjE4NjUgODcuMDg3OCAzNy42NDc3IDg2LjMwNiAzOS44MzY3TDg3LjcxODYgNDAuMzQxMkM4OC4yODcyIDM4Ljc0OTIgODkuNzk1MSAzNy42ODY1IDkxLjQ4NTYgMzcuNjg2NVYzNi4xODY1Wk05MS41MDA2IDM2LjE4NjVIOTEuNDg1NlYzNy42ODY1SDkxLjUwMDZWMzYuMTg2NVpNOTEuNTE1NyAzNi4xODY1SDkxLjUwMDZWMzcuNjg2NUg5MS41MTU3VjM2LjE4NjVaTTkxLjUzMDcgMzYuMTg2NUg5MS41MTU3VjM3LjY4NjVIOTEuNTMwN1YzNi4xODY1Wk05MS41NDU4IDM2LjE4NjVIOTEuNTMwN1YzNy42ODY1SDkxLjU0NThWMzYuMTg2NVpNOTEuNTYwOCAzNi4xODY1SDkxLjU0NThWMzcuNjg2NUg5MS41NjA4VjM2LjE4NjVaTTkxLjU3NTggMzYuMTg2NUg5MS41NjA4VjM3LjY4NjVIOTEuNTc1OFYzNi4xODY1Wk05MS41OTA4IDM2LjE4NjVIOTEuNTc1OFYzNy42ODY1SDkxLjU5MDhWMzYuMTg2NVpNOTEuNjA1NyAzNi4xODY1SDkxLjU5MDhWMzcuNjg2NUg5MS42MDU3VjM2LjE4NjVaTTkxLjYyMDcgMzYuMTg2NUg5MS42MDU3VjM3LjY4NjVIOTEuNjIwN1YzNi4xODY1Wk05MS42MzU2IDM2LjE4NjVIOTEuNjIwN1YzNy42ODY1SDkxLjYzNTZWMzYuMTg2NVpNOTEuNjUwNiAzNi4xODY1SDkxLjYzNTZWMzcuNjg2NUg5MS42NTA2VjM2LjE4NjVaTTkxLjY2NTUgMzYuMTg2NUg5MS42NTA2VjM3LjY4NjVIOTEuNjY1NVYzNi4xODY1Wk05MS42ODA0IDM2LjE4NjVIOTEuNjY1NVYzNy42ODY1SDkxLjY4MDRWMzYuMTg2NVpNOTEuNjk1MiAzNi4xODY1SDkxLjY4MDRWMzcuNjg2NUg5MS42OTUyVjM2LjE4NjVaTTkxLjcxMDEgMzYuMTg2NUg5MS42OTUyVjM3LjY4NjVIOTEuNzEwMVYzNi4xODY1Wk05MS43MjUgMzYuMTg2NUg5MS43MTAxVjM3LjY4NjVIOTEuNzI1VjM2LjE4NjVaTTkxLjczOTggMzYuMTg2NUg5MS43MjVWMzcuNjg2NUg5MS43Mzk4VjM2LjE4NjVaTTkxLjc1NDYgMzYuMTg2NUg5MS43Mzk4VjM3LjY4NjVIOTEuNzU0NlYzNi4xODY1Wk05MS43Njk0IDM2LjE4NjVIOTEuNzU0NlYzNy42ODY1SDkxLjc2OTRWMzYuMTg2NVpNOTEuNzg0MiAzNi4xODY1SDkxLjc2OTRWMzcuNjg2NUg5MS43ODQyVjM2LjE4NjVaTTkxLjc5OSAzNi4xODY1SDkxLjc4NDJWMzcuNjg2NUg5MS43OTlWMzYuMTg2NVpNOTEuODEzOCAzNi4xODY1SDkxLjc5OVYzNy42ODY1SDkxLjgxMzhWMzYuMTg2NVpNOTEuODI4NSAzNi4xODY1SDkxLjgxMzhWMzcuNjg2NUg5MS44Mjg1VjM2LjE4NjVaTTkxLjg0MzIgMzYuMTg2NUg5MS44Mjg1VjM3LjY4NjVIOTEuODQzMlYzNi4xODY1Wk05MS44NTggMzYuMTg2NUg5MS44NDMyVjM3LjY4NjVIOTEuODU4VjM2LjE4NjVaTTkxLjg3MjcgMzYuMTg2NUg5MS44NThWMzcuNjg2NUg5MS44NzI3VjM2LjE4NjVaTTkxLjg4NzQgMzYuMTg2NUg5MS44NzI3VjM3LjY4NjVIOTEuODg3NFYzNi4xODY1Wk05MS45MDIgMzYuMTg2NUg5MS44ODc0VjM3LjY4NjVIOTEuOTAyVjM2LjE4NjVaTTkxLjkxNjcgMzYuMTg2NUg5MS45MDJWMzcuNjg2NUg5MS45MTY3VjM2LjE4NjVaTTkxLjkzMTMgMzYuMTg2NUg5MS45MTY3VjM3LjY4NjVIOTEuOTMxM1YzNi4xODY1Wk05MS45NDYgMzYuMTg2NUg5MS45MzEzVjM3LjY4NjVIOTEuOTQ2VjM2LjE4NjVaTTkxLjk2MDYgMzYuMTg2NUg5MS45NDZWMzcuNjg2NUg5MS45NjA2VjM2LjE4NjVaTTkxLjk3NTIgMzYuMTg2NUg5MS45NjA2VjM3LjY4NjVIOTEuOTc1MlYzNi4xODY1Wk05MS45ODk4IDM2LjE4NjVIOTEuOTc1MlYzNy42ODY1SDkxLjk4OThWMzYuMTg2NVpNOTIuMDA0NCAzNi4xODY1SDkxLjk4OThWMzcuNjg2NUg5Mi4wMDQ0VjM2LjE4NjVaTTkyLjAxODkgMzYuMTg2NUg5Mi4wMDQ0VjM3LjY4NjVIOTIuMDE4OVYzNi4xODY1Wk05Mi4wMzM1IDM2LjE4NjVIOTIuMDE4OVYzNy42ODY1SDkyLjAzMzVWMzYuMTg2NVpNOTIuMDQ4IDM2LjE4NjVIOTIuMDMzNVYzNy42ODY1SDkyLjA0OFYzNi4xODY1Wk05Mi4wNjI1IDM2LjE4NjVIOTIuMDQ4VjM3LjY4NjVIOTIuMDYyNVYzNi4xODY1Wk05Mi4wNzcgMzYuMTg2NUg5Mi4wNjI1VjM3LjY4NjVIOTIuMDc3VjM2LjE4NjVaTTkyLjA5MTUgMzYuMTg2NUg5Mi4wNzdWMzcuNjg2NUg5Mi4wOTE1VjM2LjE4NjVaTTkyLjEwNTkgMzYuMTg2NUg5Mi4wOTE1VjM3LjY4NjVIOTIuMTA1OVYzNi4xODY1Wk05Mi4xMjA0IDM2LjE4NjVIOTIuMTA1OVYzNy42ODY1SDkyLjEyMDRWMzYuMTg2NVpNOTIuMTM0OCAzNi4xODY1SDkyLjEyMDRWMzcuNjg2NUg5Mi4xMzQ4VjM2LjE4NjVaTTkyLjE0OTMgMzYuMTg2NUg5Mi4xMzQ4VjM3LjY4NjVIOTIuMTQ5M1YzNi4xODY1Wk05Mi4xNjM3IDM2LjE4NjVIOTIuMTQ5M1YzNy42ODY1SDkyLjE2MzdWMzYuMTg2NVpNOTIuMTc4MSAzNi4xODY1SDkyLjE2MzdWMzcuNjg2NUg5Mi4xNzgxVjM2LjE4NjVaTTkyLjE5MjUgMzYuMTg2NUg5Mi4xNzgxVjM3LjY4NjVIOTIuMTkyNVYzNi4xODY1Wk05Mi4yMDY4IDM2LjE4NjVIOTIuMTkyNVYzNy42ODY1SDkyLjIwNjhWMzYuMTg2NVpNOTIuMjIxMiAzNi4xODY1SDkyLjIwNjhWMzcuNjg2NUg5Mi4yMjEyVjM2LjE4NjVaTTkyLjIzNTUgMzYuMTg2NUg5Mi4yMjEyVjM3LjY4NjVIOTIuMjM1NVYzNi4xODY1Wk05Mi4yNDk4IDM2LjE4NjVIOTIuMjM1NVYzNy42ODY1SDkyLjI0OThWMzYuMTg2NVpNOTIuMjY0MSAzNi4xODY1SDkyLjI0OThWMzcuNjg2NUg5Mi4yNjQxVjM2LjE4NjVaTTkyLjI3ODQgMzYuMTg2NUg5Mi4yNjQxVjM3LjY4NjVIOTIuMjc4NFYzNi4xODY1Wk05Mi4yOTI3IDM2LjE4NjVIOTIuMjc4NFYzNy42ODY1SDkyLjI5MjdWMzYuMTg2NVpNOTIuMzA3IDM2LjE4NjVIOTIuMjkyN1YzNy42ODY1SDkyLjMwN1YzNi4xODY1Wk05Mi4zMjEyIDM2LjE4NjVIOTIuMzA3VjM3LjY4NjVIOTIuMzIxMlYzNi4xODY1Wk05Mi4zMzU1IDM2LjE4NjVIOTIuMzIxMlYzNy42ODY1SDkyLjMzNTVWMzYuMTg2NVpNOTIuMzQ5NyAzNi4xODY1SDkyLjMzNTVWMzcuNjg2NUg5Mi4zNDk3VjM2LjE4NjVaTTkyLjM2MzkgMzYuMTg2NUg5Mi4zNDk3VjM3LjY4NjVIOTIuMzYzOVYzNi4xODY1Wk05Mi4zNzgxIDM2LjE4NjVIOTIuMzYzOVYzNy42ODY1SDkyLjM3ODFWMzYuMTg2NVpNOTIuMzkyMiAzNi4xODY1SDkyLjM3ODFWMzcuNjg2NUg5Mi4zOTIyVjM2LjE4NjVaTTkyLjQwNjQgMzYuMTg2NUg5Mi4zOTIyVjM3LjY4NjVIOTIuNDA2NFYzNi4xODY1Wk05Mi40MjA1IDM2LjE4NjVIOTIuNDA2NFYzNy42ODY1SDkyLjQyMDVWMzYuMTg2NVpNOTIuNDM0NyAzNi4xODY1SDkyLjQyMDVWMzcuNjg2NUg5Mi40MzQ3VjM2LjE4NjVaTTkyLjQ0ODggMzYuMTg2NUg5Mi40MzQ3VjM3LjY4NjVIOTIuNDQ4OFYzNi4xODY1Wk05Mi40NjI5IDM2LjE4NjVIOTIuNDQ4OFYzNy42ODY1SDkyLjQ2MjlWMzYuMTg2NVpNOTIuNDc3IDM2LjE4NjVIOTIuNDYyOVYzNy42ODY1SDkyLjQ3N1YzNi4xODY1Wk05Mi40OTExIDM2LjE4NjVIOTIuNDc3VjM3LjY4NjVIOTIuNDkxMVYzNi4xODY1Wk05Mi41MDUxIDM2LjE4NjVIOTIuNDkxMVYzNy42ODY1SDkyLjUwNTFWMzYuMTg2NVpNOTIuNTE5MiAzNi4xODY1SDkyLjUwNTFWMzcuNjg2NUg5Mi41MTkyVjM2LjE4NjVaTTkyLjUzMzIgMzYuMTg2NUg5Mi41MTkyVjM3LjY4NjVIOTIuNTMzMlYzNi4xODY1Wk05Mi41NDcyIDM2LjE4NjVIOTIuNTMzMlYzNy42ODY1SDkyLjU0NzJWMzYuMTg2NVpNOTIuNTYxMiAzNi4xODY1SDkyLjU0NzJWMzcuNjg2NUg5Mi41NjEyVjM2LjE4NjVaTTkyLjU3NTIgMzYuMTg2NUg5Mi41NjEyVjM3LjY4NjVIOTIuNTc1MlYzNi4xODY1Wk05Mi41ODkxIDM2LjE4NjVIOTIuNTc1MlYzNy42ODY1SDkyLjU4OTFWMzYuMTg2NVpNOTIuNjAzMSAzNi4xODY1SDkyLjU4OTFWMzcuNjg2NUg5Mi42MDMxVjM2LjE4NjVaTTkyLjYxNyAzNi4xODY1SDkyLjYwMzFWMzcuNjg2NUg5Mi42MTdWMzYuMTg2NVpNOTIuNjMxIDM2LjE4NjVIOTIuNjE3VjM3LjY4NjVIOTIuNjMxVjM2LjE4NjVaTTkyLjY0NDkgMzYuMTg2NUg5Mi42MzFWMzcuNjg2NUg5Mi42NDQ5VjM2LjE4NjVaTTkyLjY1ODggMzYuMTg2NUg5Mi42NDQ5VjM3LjY4NjVIOTIuNjU4OFYzNi4xODY1Wk05Mi42NzI2IDM2LjE4NjVIOTIuNjU4OFYzNy42ODY1SDkyLjY3MjZWMzYuMTg2NVpNOTIuNjg2NSAzNi4xODY1SDkyLjY3MjZWMzcuNjg2NUg5Mi42ODY1VjM2LjE4NjVaTTkyLjcwMDQgMzYuMTg2NUg5Mi42ODY1VjM3LjY4NjVIOTIuNzAwNFYzNi4xODY1Wk05Mi43MTQyIDM2LjE4NjVIOTIuNzAwNFYzNy42ODY1SDkyLjcxNDJWMzYuMTg2NVpNOTIuNzI4IDM2LjE4NjVIOTIuNzE0MlYzNy42ODY1SDkyLjcyOFYzNi4xODY1Wk05Mi43NDE4IDM2LjE4NjVIOTIuNzI4VjM3LjY4NjVIOTIuNzQxOFYzNi4xODY1Wk05Mi43NTU2IDM2LjE4NjVIOTIuNzQxOFYzNy42ODY1SDkyLjc1NTZWMzYuMTg2NVpNOTIuNzY5NCAzNi4xODY1SDkyLjc1NTZWMzcuNjg2NUg5Mi43Njk0VjM2LjE4NjVaTTkyLjc4MzIgMzYuMTg2NUg5Mi43Njk0VjM3LjY4NjVIOTIuNzgzMlYzNi4xODY1Wk05Mi43OTY5IDM2LjE4NjVIOTIuNzgzMlYzNy42ODY1SDkyLjc5NjlWMzYuMTg2NVpNOTIuODEwNiAzNi4xODY1SDkyLjc5NjlWMzcuNjg2NUg5Mi44MTA2VjM2LjE4NjVaTTkyLjgyNDQgMzYuMTg2NUg5Mi44MTA2VjM3LjY4NjVIOTIuODI0NFYzNi4xODY1Wk05Mi44MzgxIDM2LjE4NjVIOTIuODI0NFYzNy42ODY1SDkyLjgzODFWMzYuMTg2NVpNOTIuODUxNyAzNi4xODY1SDkyLjgzODFWMzcuNjg2NUg5Mi44NTE3VjM2LjE4NjVaTTkyLjg2NTQgMzYuMTg2NUg5Mi44NTE3VjM3LjY4NjVIOTIuODY1NFYzNi4xODY1Wk05Mi44NzkxIDM2LjE4NjVIOTIuODY1NFYzNy42ODY1SDkyLjg3OTFWMzYuMTg2NVpNOTIuODkyNyAzNi4xODY1SDkyLjg3OTFWMzcuNjg2NUg5Mi44OTI3VjM2LjE4NjVaTTkyLjkwNjQgMzYuMTg2NUg5Mi44OTI3VjM3LjY4NjVIOTIuOTA2NFYzNi4xODY1Wk05Mi45MiAzNi4xODY1SDkyLjkwNjRWMzcuNjg2NUg5Mi45MlYzNi4xODY1Wk05Mi45MzM2IDM2LjE4NjVIOTIuOTJWMzcuNjg2NUg5Mi45MzM2VjM2LjE4NjVaTTkyLjk0NzIgMzYuMTg2NUg5Mi45MzM2VjM3LjY4NjVIOTIuOTQ3MlYzNi4xODY1Wk05Mi45NjA3IDM2LjE4NjVIOTIuOTQ3MlYzNy42ODY1SDkyLjk2MDdWMzYuMTg2NVpNOTIuOTc0MyAzNi4xODY1SDkyLjk2MDdWMzcuNjg2NUg5Mi45NzQzVjM2LjE4NjVaTTkyLjk4NzggMzYuMTg2NUg5Mi45NzQzVjM3LjY4NjVIOTIuOTg3OFYzNi4xODY1Wk05My4wMDEzIDM2LjE4NjVIOTIuOTg3OFYzNy42ODY1SDkzLjAwMTNWMzYuMTg2NVpNOTMuMDE0OSAzNi4xODY1SDkzLjAwMTNWMzcuNjg2NUg5My4wMTQ5VjM2LjE4NjVaTTkzLjAyODQgMzYuMTg2NUg5My4wMTQ5VjM3LjY4NjVIOTMuMDI4NFYzNi4xODY1Wk05My4wNDE4IDM2LjE4NjVIOTMuMDI4NFYzNy42ODY1SDkzLjA0MThWMzYuMTg2NVpNOTMuMDU1MyAzNi4xODY1SDkzLjA0MThWMzcuNjg2NUg5My4wNTUzVjM2LjE4NjVaTTkzLjA2ODggMzYuMTg2NUg5My4wNTUzVjM3LjY4NjVIOTMuMDY4OFYzNi4xODY1Wk05My4wODIyIDM2LjE4NjVIOTMuMDY4OFYzNy42ODY1SDkzLjA4MjJWMzYuMTg2NVpNOTMuMDk1NiAzNi4xODY1SDkzLjA4MjJWMzcuNjg2NUg5My4wOTU2VjM2LjE4NjVaTTkzLjEwOSAzNi4xODY1SDkzLjA5NTZWMzcuNjg2NUg5My4xMDlWMzYuMTg2NVpNOTMuMTIyNCAzNi4xODY1SDkzLjEwOVYzNy42ODY1SDkzLjEyMjRWMzYuMTg2NVpNOTMuMTM1OCAzNi4xODY1SDkzLjEyMjRWMzcuNjg2NUg5My4xMzU4VjM2LjE4NjVaTTkzLjE0OTIgMzYuMTg2NUg5My4xMzU4VjM3LjY4NjVIOTMuMTQ5MlYzNi4xODY1Wk05My4xNjI1IDM2LjE4NjVIOTMuMTQ5MlYzNy42ODY1SDkzLjE2MjVWMzYuMTg2NVpNOTMuMTc1OSAzNi4xODY1SDkzLjE2MjVWMzcuNjg2NUg5My4xNzU5VjM2LjE4NjVaTTkzLjE4OTIgMzYuMTg2NUg5My4xNzU5VjM3LjY4NjVIOTMuMTg5MlYzNi4xODY1Wk05My4yMDI1IDM2LjE4NjVIOTMuMTg5MlYzNy42ODY1SDkzLjIwMjVWMzYuMTg2NVpNOTMuMjE1OCAzNi4xODY1SDkzLjIwMjVWMzcuNjg2NUg5My4yMTU4VjM2LjE4NjVaTTkzLjIyOSAzNi4xODY1SDkzLjIxNThWMzcuNjg2NUg5My4yMjlWMzYuMTg2NVpNOTMuMjQyMyAzNi4xODY1SDkzLjIyOVYzNy42ODY1SDkzLjI0MjNWMzYuMTg2NVpNOTMuMjU1NiAzNi4xODY1SDkzLjI0MjNWMzcuNjg2NUg5My4yNTU2VjM2LjE4NjVaTTkzLjI2ODggMzYuMTg2NUg5My4yNTU2VjM3LjY4NjVIOTMuMjY4OFYzNi4xODY1Wk05My4yODIgMzYuMTg2NUg5My4yNjg4VjM3LjY4NjVIOTMuMjgyVjM2LjE4NjVaTTkzLjI5NTIgMzYuMTg2NUg5My4yODJWMzcuNjg2NUg5My4yOTUyVjM2LjE4NjVaTTkzLjMwODQgMzYuMTg2NUg5My4yOTUyVjM3LjY4NjVIOTMuMzA4NFYzNi4xODY1Wk05My4zMjE2IDM2LjE4NjVIOTMuMzA4NFYzNy42ODY1SDkzLjMyMTZWMzYuMTg2NVpNOTMuMzM0NyAzNi4xODY1SDkzLjMyMTZWMzcuNjg2NUg5My4zMzQ3VjM2LjE4NjVaTTkzLjM0NzkgMzYuMTg2NUg5My4zMzQ3VjM3LjY4NjVIOTMuMzQ3OVYzNi4xODY1Wk05My4zNjEgMzYuMTg2NUg5My4zNDc5VjM3LjY4NjVIOTMuMzYxVjM2LjE4NjVaTTkzLjM3NDEgMzYuMTg2NUg5My4zNjFWMzcuNjg2NUg5My4zNzQxVjM2LjE4NjVaTTkzLjM4NzIgMzYuMTg2NUg5My4zNzQxVjM3LjY4NjVIOTMuMzg3MlYzNi4xODY1Wk05My40MDAzIDM2LjE4NjVIOTMuMzg3MlYzNy42ODY1SDkzLjQwMDNWMzYuMTg2NVpNOTMuNDEzNCAzNi4xODY1SDkzLjQwMDNWMzcuNjg2NUg5My40MTM0VjM2LjE4NjVaTTkzLjQyNjQgMzYuMTg2NUg5My40MTM0VjM3LjY4NjVIOTMuNDI2NFYzNi4xODY1Wk05My40Mzk1IDM2LjE4NjVIOTMuNDI2NFYzNy42ODY1SDkzLjQzOTVWMzYuMTg2NVpNOTMuNDUyNSAzNi4xODY1SDkzLjQzOTVWMzcuNjg2NUg5My40NTI1VjM2LjE4NjVaTTkzLjQ2NTUgMzYuMTg2NUg5My40NTI1VjM3LjY4NjVIOTMuNDY1NVYzNi4xODY1Wk05My40Nzg1IDM2LjE4NjVIOTMuNDY1NVYzNy42ODY1SDkzLjQ3ODVWMzYuMTg2NVpNOTMuNDkxNSAzNi4xODY1SDkzLjQ3ODVWMzcuNjg2NUg5My40OTE1VjM2LjE4NjVaTTkzLjUwNDQgMzYuMTg2NUg5My40OTE1VjM3LjY4NjVIOTMuNTA0NFYzNi4xODY1Wk05My41MTc0IDM2LjE4NjVIOTMuNTA0NFYzNy42ODY1SDkzLjUxNzRWMzYuMTg2NVpNOTMuNTMwMyAzNi4xODY1SDkzLjUxNzRWMzcuNjg2NUg5My41MzAzVjM2LjE4NjVaTTkzLjU0MzMgMzYuMTg2NUg5My41MzAzVjM3LjY4NjVIOTMuNTQzM1YzNi4xODY1Wk05My41NTYyIDM2LjE4NjVIOTMuNTQzM1YzNy42ODY1SDkzLjU1NjJWMzYuMTg2NVpNOTMuNTY5MSAzNi4xODY1SDkzLjU1NjJWMzcuNjg2NUg5My41NjkxVjM2LjE4NjVaTTkzLjU4MTkgMzYuMTg2NUg5My41NjkxVjM3LjY4NjVIOTMuNTgxOVYzNi4xODY1Wk05My41OTQ4IDM2LjE4NjVIOTMuNTgxOVYzNy42ODY1SDkzLjU5NDhWMzYuMTg2NVpNOTMuNjA3NyAzNi4xODY1SDkzLjU5NDhWMzcuNjg2NUg5My42MDc3VjM2LjE4NjVaTTkzLjYyMDUgMzYuMTg2NUg5My42MDc3VjM3LjY4NjVIOTMuNjIwNVYzNi4xODY1Wk05My42MzMzIDM2LjE4NjVIOTMuNjIwNVYzNy42ODY1SDkzLjYzMzNWMzYuMTg2NVpNOTMuNjQ2MSAzNi4xODY1SDkzLjYzMzNWMzcuNjg2NUg5My42NDYxVjM2LjE4NjVaTTkzLjY1ODkgMzYuMTg2NUg5My42NDYxVjM3LjY4NjVIOTMuNjU4OVYzNi4xODY1Wk05My42NzE3IDM2LjE4NjVIOTMuNjU4OVYzNy42ODY1SDkzLjY3MTdWMzYuMTg2NVpNOTMuNjg0NCAzNi4xODY1SDkzLjY3MTdWMzcuNjg2NUg5My42ODQ0VjM2LjE4NjVaTTkzLjY5NzIgMzYuMTg2NUg5My42ODQ0VjM3LjY4NjVIOTMuNjk3MlYzNi4xODY1Wk05My43MDk5IDM2LjE4NjVIOTMuNjk3MlYzNy42ODY1SDkzLjcwOTlWMzYuMTg2NVpNOTMuNzIyNiAzNi4xODY1SDkzLjcwOTlWMzcuNjg2NUg5My43MjI2VjM2LjE4NjVaTTkzLjczNTMgMzYuMTg2NUg5My43MjI2VjM3LjY4NjVIOTMuNzM1M1YzNi4xODY1Wk05My43NDggMzYuMTg2NUg5My43MzUzVjM3LjY4NjVIOTMuNzQ4VjM2LjE4NjVaTTkzLjc2MDcgMzYuMTg2NUg5My43NDhWMzcuNjg2NUg5My43NjA3VjM2LjE4NjVaTTkzLjc3MzQgMzYuMTg2NUg5My43NjA3VjM3LjY4NjVIOTMuNzczNFYzNi4xODY1Wk05My43ODYgMzYuMTg2NUg5My43NzM0VjM3LjY4NjVIOTMuNzg2VjM2LjE4NjVaTTkzLjc5ODYgMzYuMTg2NUg5My43ODZWMzcuNjg2NUg5My43OTg2VjM2LjE4NjVaTTkzLjgxMTIgMzYuMTg2NUg5My43OTg2VjM3LjY4NjVIOTMuODExMlYzNi4xODY1Wk05My44MjM4IDM2LjE4NjVIOTMuODExMlYzNy42ODY1SDkzLjgyMzhWMzYuMTg2NVpNOTMuODM2NCAzNi4xODY1SDkzLjgyMzhWMzcuNjg2NUg5My44MzY0VjM2LjE4NjVaTTkzLjg0OSAzNi4xODY1SDkzLjgzNjRWMzcuNjg2NUg5My44NDlWMzYuMTg2NVpNOTMuODYxNSAzNi4xODY1SDkzLjg0OVYzNy42ODY1SDkzLjg2MTVWMzYuMTg2NVpNOTMuODc0MSAzNi4xODY1SDkzLjg2MTVWMzcuNjg2NUg5My44NzQxVjM2LjE4NjVaTTkzLjg4NjYgMzYuMTg2NUg5My44NzQxVjM3LjY4NjVIOTMuODg2NlYzNi4xODY1Wk05My44OTkxIDM2LjE4NjVIOTMuODg2NlYzNy42ODY1SDkzLjg5OTFWMzYuMTg2NVpNOTMuOTExNiAzNi4xODY1SDkzLjg5OTFWMzcuNjg2NUg5My45MTE2VjM2LjE4NjVaTTkzLjkyNDEgMzYuMTg2NUg5My45MTE2VjM3LjY4NjVIOTMuOTI0MVYzNi4xODY1Wk05My45MzY2IDM2LjE4NjVIOTMuOTI0MVYzNy42ODY1SDkzLjkzNjZWMzYuMTg2NVpNOTMuOTQ5IDM2LjE4NjVIOTMuOTM2NlYzNy42ODY1SDkzLjk0OVYzNi4xODY1Wk05My45NjE1IDM2LjE4NjVIOTMuOTQ5VjM3LjY4NjVIOTMuOTYxNVYzNi4xODY1Wk05My45NzM5IDM2LjE4NjVIOTMuOTYxNVYzNy42ODY1SDkzLjk3MzlWMzYuMTg2NVpNOTMuOTg2MyAzNi4xODY1SDkzLjk3MzlWMzcuNjg2NUg5My45ODYzVjM2LjE4NjVaTTkzLjk5ODcgMzYuMTg2NUg5My45ODYzVjM3LjY4NjVIOTMuOTk4N1YzNi4xODY1Wk05NC4wMTExIDM2LjE4NjVIOTMuOTk4N1YzNy42ODY1SDk0LjAxMTFWMzYuMTg2NVpNOTQuMDIzNCAzNi4xODY1SDk0LjAxMTFWMzcuNjg2NUg5NC4wMjM0VjM2LjE4NjVaTTk0LjAzNTggMzYuMTg2NUg5NC4wMjM0VjM3LjY4NjVIOTQuMDM1OFYzNi4xODY1Wk05NC4wNDgxIDM2LjE4NjVIOTQuMDM1OFYzNy42ODY1SDk0LjA0ODFWMzYuMTg2NVpNOTQuMDYwNCAzNi4xODY1SDk0LjA0ODFWMzcuNjg2NUg5NC4wNjA0VjM2LjE4NjVaTTk0LjA3MjcgMzYuMTg2NUg5NC4wNjA0VjM3LjY4NjVIOTQuMDcyN1YzNi4xODY1Wk05NC4wODUgMzYuMTg2NUg5NC4wNzI3VjM3LjY4NjVIOTQuMDg1VjM2LjE4NjVaTTk0LjA5NzMgMzYuMTg2NUg5NC4wODVWMzcuNjg2NUg5NC4wOTczVjM2LjE4NjVaTTk0LjEwOTYgMzYuMTg2NUg5NC4wOTczVjM3LjY4NjVIOTQuMTA5NlYzNi4xODY1Wk05NC4xMjE4IDM2LjE4NjVIOTQuMTA5NlYzNy42ODY1SDk0LjEyMThWMzYuMTg2NVpNOTQuMTM0IDM2LjE4NjVIOTQuMTIxOFYzNy42ODY1SDk0LjEzNFYzNi4xODY1Wk05NC4xNDYyIDM2LjE4NjVIOTQuMTM0VjM3LjY4NjVIOTQuMTQ2MlYzNi4xODY1Wk05NC4xNTg0IDM2LjE4NjVIOTQuMTQ2MlYzNy42ODY1SDk0LjE1ODRWMzYuMTg2NVpNOTQuMTcwNiAzNi4xODY1SDk0LjE1ODRWMzcuNjg2NUg5NC4xNzA2VjM2LjE4NjVaTTk0LjE4MjggMzYuMTg2NUg5NC4xNzA2VjM3LjY4NjVIOTQuMTgyOFYzNi4xODY1Wk05NC4xOTUgMzYuMTg2NUg5NC4xODI4VjM3LjY4NjVIOTQuMTk1VjM2LjE4NjVaTTk0LjIwNzEgMzYuMTg2NUg5NC4xOTVWMzcuNjg2NUg5NC4yMDcxVjM2LjE4NjVaTTk0LjIxOTIgMzYuMTg2NUg5NC4yMDcxVjM3LjY4NjVIOTQuMjE5MlYzNi4xODY1Wk05NC4yMzEzIDM2LjE4NjVIOTQuMjE5MlYzNy42ODY1SDk0LjIzMTNWMzYuMTg2NVpNOTQuMjQzNCAzNi4xODY1SDk0LjIzMTNWMzcuNjg2NUg5NC4yNDM0VjM2LjE4NjVaTTk0LjI1NTUgMzYuMTg2NUg5NC4yNDM0VjM3LjY4NjVIOTQuMjU1NVYzNi4xODY1Wk05NC4yNjc2IDM2LjE4NjVIOTQuMjU1NVYzNy42ODY1SDk0LjI2NzZWMzYuMTg2NVpNOTQuMjc5NiAzNi4xODY1SDk0LjI2NzZWMzcuNjg2NUg5NC4yNzk2VjM2LjE4NjVaTTk0LjI5MTcgMzYuMTg2NUg5NC4yNzk2VjM3LjY4NjVIOTQuMjkxN1YzNi4xODY1Wk05NC4zMDM3IDM2LjE4NjVIOTQuMjkxN1YzNy42ODY1SDk0LjMwMzdWMzYuMTg2NVpNOTQuMzE1NyAzNi4xODY1SDk0LjMwMzdWMzcuNjg2NUg5NC4zMTU3VjM2LjE4NjVaTTk0LjMyNzcgMzYuMTg2NUg5NC4zMTU3VjM3LjY4NjVIOTQuMzI3N1YzNi4xODY1Wk05NC4zMzk3IDM2LjE4NjVIOTQuMzI3N1YzNy42ODY1SDk0LjMzOTdWMzYuMTg2NVpNOTQuMzUxNyAzNi4xODY1SDk0LjMzOTdWMzcuNjg2NUg5NC4zNTE3VjM2LjE4NjVaTTk0LjM2MzYgMzYuMTg2NUg5NC4zNTE3VjM3LjY4NjVIOTQuMzYzNlYzNi4xODY1Wk05NC4zNzU2IDM2LjE4NjVIOTQuMzYzNlYzNy42ODY1SDk0LjM3NTZWMzYuMTg2NVpNOTQuMzg3NSAzNi4xODY1SDk0LjM3NTZWMzcuNjg2NUg5NC4zODc1VjM2LjE4NjVaTTk0LjM5OTQgMzYuMTg2NUg5NC4zODc1VjM3LjY4NjVIOTQuMzk5NFYzNi4xODY1Wk05NC40MTEzIDM2LjE4NjVIOTQuMzk5NFYzNy42ODY1SDk0LjQxMTNWMzYuMTg2NVpNOTQuNDIzMSAzNi4xODY1SDk0LjQxMTNWMzcuNjg2NUg5NC40MjMxVjM2LjE4NjVaTTk0LjQzNSAzNi4xODY1SDk0LjQyMzFWMzcuNjg2NUg5NC40MzVWMzYuMTg2NVpNOTQuNDQ2OSAzNi4xODY1SDk0LjQzNVYzNy42ODY1SDk0LjQ0NjlWMzYuMTg2NVpNOTQuNDU4NyAzNi4xODY1SDk0LjQ0NjlWMzcuNjg2NUg5NC40NTg3VjM2LjE4NjVaTTk0LjQ3MDUgMzYuMTg2NUg5NC40NTg3VjM3LjY4NjVIOTQuNDcwNVYzNi4xODY1Wk05NC40ODIzIDM2LjE4NjVIOTQuNDcwNVYzNy42ODY1SDk0LjQ4MjNWMzYuMTg2NVpNOTQuNDk0MSAzNi4xODY1SDk0LjQ4MjNWMzcuNjg2NUg5NC40OTQxVjM2LjE4NjVaTTk0LjUwNTkgMzYuMTg2NUg5NC40OTQxVjM3LjY4NjVIOTQuNTA1OVYzNi4xODY1Wk05NC41MTc2IDM2LjE4NjVIOTQuNTA1OVYzNy42ODY1SDk0LjUxNzZWMzYuMTg2NVpNOTQuNTI5NCAzNi4xODY1SDk0LjUxNzZWMzcuNjg2NUg5NC41Mjk0VjM2LjE4NjVaTTk0LjU0MTEgMzYuMTg2NUg5NC41Mjk0VjM3LjY4NjVIOTQuNTQxMVYzNi4xODY1Wk05NC41NTI4IDM2LjE4NjVIOTQuNTQxMVYzNy42ODY1SDk0LjU1MjhWMzYuMTg2NVpNOTQuNTY0NSAzNi4xODY1SDk0LjU1MjhWMzcuNjg2NUg5NC41NjQ1VjM2LjE4NjVaTTk0LjU3NjIgMzYuMTg2NUg5NC41NjQ1VjM3LjY4NjVIOTQuNTc2MlYzNi4xODY1Wk05NC41ODc5IDM2LjE4NjVIOTQuNTc2MlYzNy42ODY1SDk0LjU4NzlWMzYuMTg2NVpNOTQuNTk5NSAzNi4xODY1SDk0LjU4NzlWMzcuNjg2NUg5NC41OTk1VjM2LjE4NjVaTTk0LjYxMTIgMzYuMTg2NUg5NC41OTk1VjM3LjY4NjVIOTQuNjExMlYzNi4xODY1Wk05NC42MjI4IDM2LjE4NjVIOTQuNjExMlYzNy42ODY1SDk0LjYyMjhWMzYuMTg2NVpNOTQuNjM0NCAzNi4xODY1SDk0LjYyMjhWMzcuNjg2NUg5NC42MzQ0VjM2LjE4NjVaTTk0LjY0NiAzNi4xODY1SDk0LjYzNDRWMzcuNjg2NUg5NC42NDZWMzYuMTg2NVpNOTQuNjU3NiAzNi4xODY1SDk0LjY0NlYzNy42ODY1SDk0LjY1NzZWMzYuMTg2NVpNOTQuNjY5MiAzNi4xODY1SDk0LjY1NzZWMzcuNjg2NUg5NC42NjkyVjM2LjE4NjVaTTk0LjY4MDcgMzYuMTg2NUg5NC42NjkyVjM3LjY4NjVIOTQuNjgwN1YzNi4xODY1Wk05NC42OTIzIDM2LjE4NjVIOTQuNjgwN1YzNy42ODY1SDk0LjY5MjNWMzYuMTg2NVpNOTQuNzAzOCAzNi4xODY1SDk0LjY5MjNWMzcuNjg2NUg5NC43MDM4VjM2LjE4NjVaTTk0LjcxNTMgMzYuMTg2NUg5NC43MDM4VjM3LjY4NjVIOTQuNzE1M1YzNi4xODY1Wk05NC43MjY4IDM2LjE4NjVIOTQuNzE1M1YzNy42ODY1SDk0LjcyNjhWMzYuMTg2NVpNOTQuNzM4MyAzNi4xODY1SDk0LjcyNjhWMzcuNjg2NUg5NC43MzgzVjM2LjE4NjVaTTk0Ljc0OTcgMzYuMTg2NUg5NC43MzgzVjM3LjY4NjVIOTQuNzQ5N1YzNi4xODY1Wk05NC43NjEyIDM2LjE4NjVIOTQuNzQ5N1YzNy42ODY1SDk0Ljc2MTJWMzYuMTg2NVpNOTQuNzcyNiAzNi4xODY1SDk0Ljc2MTJWMzcuNjg2NUg5NC43NzI2VjM2LjE4NjVaTTk0Ljc4NCAzNi4xODY1SDk0Ljc3MjZWMzcuNjg2NUg5NC43ODRWMzYuMTg2NVpNOTQuNzk1NCAzNi4xODY1SDk0Ljc4NFYzNy42ODY1SDk0Ljc5NTRWMzYuMTg2NVpNOTQuODA2OCAzNi4xODY1SDk0Ljc5NTRWMzcuNjg2NUg5NC44MDY4VjM2LjE4NjVaTTk0LjgxODIgMzYuMTg2NUg5NC44MDY4VjM3LjY4NjVIOTQuODE4MlYzNi4xODY1Wk05NC44Mjk2IDM2LjE4NjVIOTQuODE4MlYzNy42ODY1SDk0LjgyOTZWMzYuMTg2NVpNOTQuODQwOSAzNi4xODY1SDk0LjgyOTZWMzcuNjg2NUg5NC44NDA5VjM2LjE4NjVaTTk0Ljg1MjMgMzYuMTg2NUg5NC44NDA5VjM3LjY4NjVIOTQuODUyM1YzNi4xODY1Wk05NC44NjM2IDM2LjE4NjVIOTQuODUyM1YzNy42ODY1SDk0Ljg2MzZWMzYuMTg2NVpNOTQuODc0OSAzNi4xODY1SDk0Ljg2MzZWMzcuNjg2NUg5NC44NzQ5VjM2LjE4NjVaTTk0Ljg4NjIgMzYuMTg2NUg5NC44NzQ5VjM3LjY4NjVIOTQuODg2MlYzNi4xODY1Wk05NC44OTc0IDM2LjE4NjVIOTQuODg2MlYzNy42ODY1SDk0Ljg5NzRWMzYuMTg2NVpNOTQuOTA4NyAzNi4xODY1SDk0Ljg5NzRWMzcuNjg2NUg5NC45MDg3VjM2LjE4NjVaTTk0LjkxOTkgMzYuMTg2NUg5NC45MDg3VjM3LjY4NjVIOTQuOTE5OVYzNi4xODY1Wk05NC45MzEyIDM2LjE4NjVIOTQuOTE5OVYzNy42ODY1SDk0LjkzMTJWMzYuMTg2NVpNOTQuOTQyNCAzNi4xODY1SDk0LjkzMTJWMzcuNjg2NUg5NC45NDI0VjM2LjE4NjVaTTk0Ljk1MzYgMzYuMTg2NUg5NC45NDI0VjM3LjY4NjVIOTQuOTUzNlYzNi4xODY1Wk05NC45NjQ4IDM2LjE4NjVIOTQuOTUzNlYzNy42ODY1SDk0Ljk2NDhWMzYuMTg2NVpNOTQuOTc1OSAzNi4xODY1SDk0Ljk2NDhWMzcuNjg2NUg5NC45NzU5VjM2LjE4NjVaTTk0Ljk4NzEgMzYuMTg2NUg5NC45NzU5VjM3LjY4NjVIOTQuOTg3MVYzNi4xODY1Wk05NC45OTgyIDM2LjE4NjVIOTQuOTg3MVYzNy42ODY1SDk0Ljk5ODJWMzYuMTg2NVpNOTUuMDA5NCAzNi4xODY1SDk0Ljk5ODJWMzcuNjg2NUg5NS4wMDk0VjM2LjE4NjVaTTk1LjAyMDUgMzYuMTg2NUg5NS4wMDk0VjM3LjY4NjVIOTUuMDIwNVYzNi4xODY1Wk05NS4wMzE2IDM2LjE4NjVIOTUuMDIwNVYzNy42ODY1SDk1LjAzMTZWMzYuMTg2NVpNOTUuMDQyNyAzNi4xODY1SDk1LjAzMTZWMzcuNjg2NUg5NS4wNDI3VjM2LjE4NjVaTTk1LjA1MzcgMzYuMTg2NUg5NS4wNDI3VjM3LjY4NjVIOTUuMDUzN1YzNi4xODY1Wk05NS4wNjQ4IDM2LjE4NjVIOTUuMDUzN1YzNy42ODY1SDk1LjA2NDhWMzYuMTg2NVpNOTUuMDc1OCAzNi4xODY1SDk1LjA2NDhWMzcuNjg2NUg5NS4wNzU4VjM2LjE4NjVaTTk1LjA4NjggMzYuMTg2NUg5NS4wNzU4VjM3LjY4NjVIOTUuMDg2OFYzNi4xODY1Wk05NS4wOTc4IDM2LjE4NjVIOTUuMDg2OFYzNy42ODY1SDk1LjA5NzhWMzYuMTg2NVpNOTUuMTA4OCAzNi4xODY1SDk1LjA5NzhWMzcuNjg2NUg5NS4xMDg4VjM2LjE4NjVaTTk1LjExOTggMzYuMTg2NUg5NS4xMDg4VjM3LjY4NjVIOTUuMTE5OFYzNi4xODY1Wk05NS4xMzA4IDM2LjE4NjVIOTUuMTE5OFYzNy42ODY1SDk1LjEzMDhWMzYuMTg2NVpNOTUuMTQxNyAzNi4xODY1SDk1LjEzMDhWMzcuNjg2NUg5NS4xNDE3VjM2LjE4NjVaTTk1LjE1MjcgMzYuMTg2NUg5NS4xNDE3VjM3LjY4NjVIOTUuMTUyN1YzNi4xODY1Wk05NS4xNjM2IDM2LjE4NjVIOTUuMTUyN1YzNy42ODY1SDk1LjE2MzZWMzYuMTg2NVpNOTUuMTc0NSAzNi4xODY1SDk1LjE2MzZWMzcuNjg2NUg5NS4xNzQ1VjM2LjE4NjVaTTk1LjE4NTQgMzYuMTg2NUg5NS4xNzQ1VjM3LjY4NjVIOTUuMTg1NFYzNi4xODY1Wk05NS4xOTYzIDM2LjE4NjVIOTUuMTg1NFYzNy42ODY1SDk1LjE5NjNWMzYuMTg2NVpNOTUuMjA3MSAzNi4xODY1SDk1LjE5NjNWMzcuNjg2NUg5NS4yMDcxVjM2LjE4NjVaTTk1LjIxOCAzNi4xODY1SDk1LjIwNzFWMzcuNjg2NUg5NS4yMThWMzYuMTg2NVpNOTUuMjI4OCAzNi4xODY1SDk1LjIxOFYzNy42ODY1SDk1LjIyODhWMzYuMTg2NVpNOTUuMjM5NiAzNi4xODY1SDk1LjIyODhWMzcuNjg2NUg5NS4yMzk2VjM2LjE4NjVaTTk1LjI1MDQgMzYuMTg2NUg5NS4yMzk2VjM3LjY4NjVIOTUuMjUwNFYzNi4xODY1Wk05NS4yNjEyIDM2LjE4NjVIOTUuMjUwNFYzNy42ODY1SDk1LjI2MTJWMzYuMTg2NVpNOTUuMjcyIDM2LjE4NjVIOTUuMjYxMlYzNy42ODY1SDk1LjI3MlYzNi4xODY1Wk05NS4yODI3IDM2LjE4NjVIOTUuMjcyVjM3LjY4NjVIOTUuMjgyN1YzNi4xODY1Wk05NS4yOTM1IDM2LjE4NjVIOTUuMjgyN1YzNy42ODY1SDk1LjI5MzVWMzYuMTg2NVpNOTUuMzA0MiAzNi4xODY1SDk1LjI5MzVWMzcuNjg2NUg5NS4zMDQyVjM2LjE4NjVaTTk1LjMxNDkgMzYuMTg2NUg5NS4zMDQyVjM3LjY4NjVIOTUuMzE0OVYzNi4xODY1Wk05NS4zMjU2IDM2LjE4NjVIOTUuMzE0OVYzNy42ODY1SDk1LjMyNTZWMzYuMTg2NVpNOTUuMzM2MyAzNi4xODY1SDk1LjMyNTZWMzcuNjg2NUg5NS4zMzYzVjM2LjE4NjVaTTk1LjM0NyAzNi4xODY1SDk1LjMzNjNWMzcuNjg2NUg5NS4zNDdWMzYuMTg2NVpNOTUuMzU3NiAzNi4xODY1SDk1LjM0N1YzNy42ODY1SDk1LjM1NzZWMzYuMTg2NVpNOTUuMzY4MyAzNi4xODY1SDk1LjM1NzZWMzcuNjg2NUg5NS4zNjgzVjM2LjE4NjVaTTk1LjM3ODkgMzYuMTg2NUg5NS4zNjgzVjM3LjY4NjVIOTUuMzc4OVYzNi4xODY1Wk05NS4zODk1IDM2LjE4NjVIOTUuMzc4OVYzNy42ODY1SDk1LjM4OTVWMzYuMTg2NVpNOTUuNDAwMSAzNi4xODY1SDk1LjM4OTVWMzcuNjg2NUg5NS40MDAxVjM2LjE4NjVaTTk1LjQxMDcgMzYuMTg2NUg5NS40MDAxVjM3LjY4NjVIOTUuNDEwN1YzNi4xODY1Wk05NS40MjEyIDM2LjE4NjVIOTUuNDEwN1YzNy42ODY1SDk1LjQyMTJWMzYuMTg2NVpNOTUuNDMxOCAzNi4xODY1SDk1LjQyMTJWMzcuNjg2NUg5NS40MzE4VjM2LjE4NjVaTTk1LjQ0MjMgMzYuMTg2NUg5NS40MzE4VjM3LjY4NjVIOTUuNDQyM1YzNi4xODY1Wk05NS40NTI5IDM2LjE4NjVIOTUuNDQyM1YzNy42ODY1SDk1LjQ1MjlWMzYuMTg2NVpNOTUuNDYzNCAzNi4xODY1SDk1LjQ1MjlWMzcuNjg2NUg5NS40NjM0VjM2LjE4NjVaTTk1LjQ3MzkgMzYuMTg2NUg5NS40NjM0VjM3LjY4NjVIOTUuNDczOVYzNi4xODY1Wk05NS40ODQzIDM2LjE4NjVIOTUuNDczOVYzNy42ODY1SDk1LjQ4NDNWMzYuMTg2NVpNOTUuNDk0OCAzNi4xODY1SDk1LjQ4NDNWMzcuNjg2NUg5NS40OTQ4VjM2LjE4NjVaTTk1LjUwNTIgMzYuMTg2NUg5NS40OTQ4VjM3LjY4NjVIOTUuNTA1MlYzNi4xODY1Wk05NS41MTU3IDM2LjE4NjVIOTUuNTA1MlYzNy42ODY1SDk1LjUxNTdWMzYuMTg2NVpNOTUuNTI2MSAzNi4xODY1SDk1LjUxNTdWMzcuNjg2NUg5NS41MjYxVjM2LjE4NjVaTTk1LjUzNjUgMzYuMTg2NUg5NS41MjYxVjM3LjY4NjVIOTUuNTM2NVYzNi4xODY1Wk05NS41NDY5IDM2LjE4NjVIOTUuNTM2NVYzNy42ODY1SDk1LjU0NjlWMzYuMTg2NVpNOTUuNTU3MyAzNi4xODY1SDk1LjU0NjlWMzcuNjg2NUg5NS41NTczVjM2LjE4NjVaTTk1LjU2NzYgMzYuMTg2NUg5NS41NTczVjM3LjY4NjVIOTUuNTY3NlYzNi4xODY1Wk05NS41NzggMzYuMTg2NUg5NS41Njc2VjM3LjY4NjVIOTUuNTc4VjM2LjE4NjVaTTk1LjU4ODMgMzYuMTg2NUg5NS41NzhWMzcuNjg2NUg5NS41ODgzVjM2LjE4NjVaTTk1LjU5ODYgMzYuMTg2NUg5NS41ODgzVjM3LjY4NjVIOTUuNTk4NlYzNi4xODY1Wk05NS42MDg5IDM2LjE4NjVIOTUuNTk4NlYzNy42ODY1SDk1LjYwODlWMzYuMTg2NVpNOTUuNjE5MiAzNi4xODY1SDk1LjYwODlWMzcuNjg2NUg5NS42MTkyVjM2LjE4NjVaTTk1LjYyOTUgMzYuMTg2NUg5NS42MTkyVjM3LjY4NjVIOTUuNjI5NVYzNi4xODY1Wk05NS42Mzk3IDM2LjE4NjVIOTUuNjI5NVYzNy42ODY1SDk1LjYzOTdWMzYuMTg2NVpNOTUuNjUgMzYuMTg2NUg5NS42Mzk3VjM3LjY4NjVIOTUuNjVWMzYuMTg2NVpNOTUuNjYwMiAzNi4xODY1SDk1LjY1VjM3LjY4NjVIOTUuNjYwMlYzNi4xODY1Wk05NS42NzA0IDM2LjE4NjVIOTUuNjYwMlYzNy42ODY1SDk1LjY3MDRWMzYuMTg2NVpNOTUuNjgwNiAzNi4xODY1SDk1LjY3MDRWMzcuNjg2NUg5NS42ODA2VjM2LjE4NjVaTTk1LjY5MDggMzYuMTg2NUg5NS42ODA2VjM3LjY4NjVIOTUuNjkwOFYzNi4xODY1Wk05NS43MDEgMzYuMTg2NUg5NS42OTA4VjM3LjY4NjVIOTUuNzAxVjM2LjE4NjVaTTk1LjcxMTEgMzYuMTg2NUg5NS43MDFWMzcuNjg2NUg5NS43MTExVjM2LjE4NjVaTTk1LjcyMTMgMzYuMTg2NUg5NS43MTExVjM3LjY4NjVIOTUuNzIxM1YzNi4xODY1Wk05NS43MzE0IDM2LjE4NjVIOTUuNzIxM1YzNy42ODY1SDk1LjczMTRWMzYuMTg2NVpNOTUuNzQxNSAzNi4xODY1SDk1LjczMTRWMzcuNjg2NUg5NS43NDE1VjM2LjE4NjVaTTk1Ljc1MTYgMzYuMTg2NUg5NS43NDE1VjM3LjY4NjVIOTUuNzUxNlYzNi4xODY1Wk05NS43NjE3IDM2LjE4NjVIOTUuNzUxNlYzNy42ODY1SDk1Ljc2MTdWMzYuMTg2NVpNOTUuNzcxNyAzNi4xODY1SDk1Ljc2MTdWMzcuNjg2NUg5NS43NzE3VjM2LjE4NjVaTTk1Ljc4MTggMzYuMTg2NUg5NS43NzE3VjM3LjY4NjVIOTUuNzgxOFYzNi4xODY1Wk05NS43OTE4IDM2LjE4NjVIOTUuNzgxOFYzNy42ODY1SDk1Ljc5MThWMzYuMTg2NVpNOTUuODAxOSAzNi4xODY1SDk1Ljc5MThWMzcuNjg2NUg5NS44MDE5VjM2LjE4NjVaTTk1LjgxMTkgMzYuMTg2NUg5NS44MDE5VjM3LjY4NjVIOTUuODExOVYzNi4xODY1Wk05NS44MjE5IDM2LjE4NjVIOTUuODExOVYzNy42ODY1SDk1LjgyMTlWMzYuMTg2NVpNOTUuODMxOCAzNi4xODY1SDk1LjgyMTlWMzcuNjg2NUg5NS44MzE4VjM2LjE4NjVaTTk1Ljg0MTggMzYuMTg2NUg5NS44MzE4VjM3LjY4NjVIOTUuODQxOFYzNi4xODY1Wk05NS44NTE3IDM2LjE4NjVIOTUuODQxOFYzNy42ODY1SDk1Ljg1MTdWMzYuMTg2NVpNOTUuODYxNyAzNi4xODY1SDk1Ljg1MTdWMzcuNjg2NUg5NS44NjE3VjM2LjE4NjVaTTk1Ljg3MTYgMzYuMTg2NUg5NS44NjE3VjM3LjY4NjVIOTUuODcxNlYzNi4xODY1Wk05NS44ODE1IDM2LjE4NjVIOTUuODcxNlYzNy42ODY1SDk1Ljg4MTVWMzYuMTg2NVpNOTUuODkxNCAzNi4xODY1SDk1Ljg4MTVWMzcuNjg2NUg5NS44OTE0VjM2LjE4NjVaTTk1LjkwMTMgMzYuMTg2NUg5NS44OTE0VjM3LjY4NjVIOTUuOTAxM1YzNi4xODY1Wk05NS45MTExIDM2LjE4NjVIOTUuOTAxM1YzNy42ODY1SDk1LjkxMTFWMzYuMTg2NVpNOTUuOTIxIDM2LjE4NjVIOTUuOTExMVYzNy42ODY1SDk1LjkyMVYzNi4xODY1Wk05NS45MzA4IDM2LjE4NjVIOTUuOTIxVjM3LjY4NjVIOTUuOTMwOFYzNi4xODY1Wk05NS45NDA2IDM2LjE4NjVIOTUuOTMwOFYzNy42ODY1SDk1Ljk0MDZWMzYuMTg2NVpNOTUuOTUwNCAzNi4xODY1SDk1Ljk0MDZWMzcuNjg2NUg5NS45NTA0VjM2LjE4NjVaTTk1Ljk2MDIgMzYuMTg2NUg5NS45NTA0VjM3LjY4NjVIOTUuOTYwMlYzNi4xODY1Wk05NS45NyAzNi4xODY1SDk1Ljk2MDJWMzcuNjg2NUg5NS45N1YzNi4xODY1Wk05NS45Nzk3IDM2LjE4NjVIOTUuOTdWMzcuNjg2NUg5NS45Nzk3VjM2LjE4NjVaTTk1Ljk4OTUgMzYuMTg2NUg5NS45Nzk3VjM3LjY4NjVIOTUuOTg5NVYzNi4xODY1Wk05NS45OTkyIDM2LjE4NjVIOTUuOTg5NVYzNy42ODY1SDk1Ljk5OTJWMzYuMTg2NVpNOTYuMDA4OSAzNi4xODY1SDk1Ljk5OTJWMzcuNjg2NUg5Ni4wMDg5VjM2LjE4NjVaTTk2LjAxODYgMzYuMTg2NUg5Ni4wMDg5VjM3LjY4NjVIOTYuMDE4NlYzNi4xODY1Wk05Ni4wMjgzIDM2LjE4NjVIOTYuMDE4NlYzNy42ODY1SDk2LjAyODNWMzYuMTg2NVpNOTYuMDM4IDM2LjE4NjVIOTYuMDI4M1YzNy42ODY1SDk2LjAzOFYzNi4xODY1Wk05Ni4wNDc2IDM2LjE4NjVIOTYuMDM4VjM3LjY4NjVIOTYuMDQ3NlYzNi4xODY1Wk05Ni4wNTczIDM2LjE4NjVIOTYuMDQ3NlYzNy42ODY1SDk2LjA1NzNWMzYuMTg2NVpNOTYuMDY2OSAzNi4xODY1SDk2LjA1NzNWMzcuNjg2NUg5Ni4wNjY5VjM2LjE4NjVaTTk2LjA3NjUgMzYuMTg2NUg5Ni4wNjY5VjM3LjY4NjVIOTYuMDc2NVYzNi4xODY1Wk05Ni4wODYxIDM2LjE4NjVIOTYuMDc2NVYzNy42ODY1SDk2LjA4NjFWMzYuMTg2NVpNOTYuMDk1NyAzNi4xODY1SDk2LjA4NjFWMzcuNjg2NUg5Ni4wOTU3VjM2LjE4NjVaTTk2LjEwNTIgMzYuMTg2NUg5Ni4wOTU3VjM3LjY4NjVIOTYuMTA1MlYzNi4xODY1Wk05Ni4xMTQ4IDM2LjE4NjVIOTYuMTA1MlYzNy42ODY1SDk2LjExNDhWMzYuMTg2NVpNOTYuMTI0MyAzNi4xODY1SDk2LjExNDhWMzcuNjg2NUg5Ni4xMjQzVjM2LjE4NjVaTTk2LjEzMzggMzYuMTg2NUg5Ni4xMjQzVjM3LjY4NjVIOTYuMTMzOFYzNi4xODY1Wk05Ni4xNDMzIDM2LjE4NjVIOTYuMTMzOFYzNy42ODY1SDk2LjE0MzNWMzYuMTg2NVpNOTYuMTUyOCAzNi4xODY1SDk2LjE0MzNWMzcuNjg2NUg5Ni4xNTI4VjM2LjE4NjVaTTk2LjE2MjMgMzYuMTg2NUg5Ni4xNTI4VjM3LjY4NjVIOTYuMTYyM1YzNi4xODY1Wk05Ni4xNzE4IDM2LjE4NjVIOTYuMTYyM1YzNy42ODY1SDk2LjE3MThWMzYuMTg2NVpNOTYuMTgxMiAzNi4xODY1SDk2LjE3MThWMzcuNjg2NUg5Ni4xODEyVjM2LjE4NjVaTTk2LjE5MDYgMzYuMTg2NUg5Ni4xODEyVjM3LjY4NjVIOTYuMTkwNlYzNi4xODY1Wk05Ni4yMDAxIDM2LjE4NjVIOTYuMTkwNlYzNy42ODY1SDk2LjIwMDFWMzYuMTg2NVpNOTYuMjA5NSAzNi4xODY1SDk2LjIwMDFWMzcuNjg2NUg5Ni4yMDk1VjM2LjE4NjVaTTk2LjIxODkgMzYuMTg2NUg5Ni4yMDk1VjM3LjY4NjVIOTYuMjE4OVYzNi4xODY1Wk05Ni4yMjgyIDM2LjE4NjVIOTYuMjE4OVYzNy42ODY1SDk2LjIyODJWMzYuMTg2NVpNOTYuMjM3NiAzNi4xODY1SDk2LjIyODJWMzcuNjg2NUg5Ni4yMzc2VjM2LjE4NjVaTTk2LjI0NjkgMzYuMTg2NUg5Ni4yMzc2VjM3LjY4NjVIOTYuMjQ2OVYzNi4xODY1Wk05Ni4yNTYzIDM2LjE4NjVIOTYuMjQ2OVYzNy42ODY1SDk2LjI1NjNWMzYuMTg2NVpNOTYuMjY1NiAzNi4xODY1SDk2LjI1NjNWMzcuNjg2NUg5Ni4yNjU2VjM2LjE4NjVaTTk2LjI3NDkgMzYuMTg2NUg5Ni4yNjU2VjM3LjY4NjVIOTYuMjc0OVYzNi4xODY1Wk05Ni4yODQyIDM2LjE4NjVIOTYuMjc0OVYzNy42ODY1SDk2LjI4NDJWMzYuMTg2NVpNOTYuMjkzNCAzNi4xODY1SDk2LjI4NDJWMzcuNjg2NUg5Ni4yOTM0VjM2LjE4NjVaTTk2LjMwMjcgMzYuMTg2NUg5Ni4yOTM0VjM3LjY4NjVIOTYuMzAyN1YzNi4xODY1Wk05Ni4zMTE5IDM2LjE4NjVIOTYuMzAyN1YzNy42ODY1SDk2LjMxMTlWMzYuMTg2NVpNOTYuMzIxMiAzNi4xODY1SDk2LjMxMTlWMzcuNjg2NUg5Ni4zMjEyVjM2LjE4NjVaTTk2LjMzMDQgMzYuMTg2NUg5Ni4zMjEyVjM3LjY4NjVIOTYuMzMwNFYzNi4xODY1Wk05Ni4zMzk2IDM2LjE4NjVIOTYuMzMwNFYzNy42ODY1SDk2LjMzOTZWMzYuMTg2NVpNOTYuMzQ4NyAzNi4xODY1SDk2LjMzOTZWMzcuNjg2NUg5Ni4zNDg3VjM2LjE4NjVaTTk2LjM1NzkgMzYuMTg2NUg5Ni4zNDg3VjM3LjY4NjVIOTYuMzU3OVYzNi4xODY1Wk05Ni4zNjcxIDM2LjE4NjVIOTYuMzU3OVYzNy42ODY1SDk2LjM2NzFWMzYuMTg2NVpNOTYuMzc2MiAzNi4xODY1SDk2LjM2NzFWMzcuNjg2NUg5Ni4zNzYyVjM2LjE4NjVaTTk2LjM4NTMgMzYuMTg2NUg5Ni4zNzYyVjM3LjY4NjVIOTYuMzg1M1YzNi4xODY1Wk05Ni4zOTQ0IDM2LjE4NjVIOTYuMzg1M1YzNy42ODY1SDk2LjM5NDRWMzYuMTg2NVpNOTYuNDAzNSAzNi4xODY1SDk2LjM5NDRWMzcuNjg2NUg5Ni40MDM1VjM2LjE4NjVaTTk2LjQxMjYgMzYuMTg2NUg5Ni40MDM1VjM3LjY4NjVIOTYuNDEyNlYzNi4xODY1Wk05Ni40MjE3IDM2LjE4NjVIOTYuNDEyNlYzNy42ODY1SDk2LjQyMTdWMzYuMTg2NVpNOTYuNDMwNyAzNi4xODY1SDk2LjQyMTdWMzcuNjg2NUg5Ni40MzA3VjM2LjE4NjVaTTk2LjQzOTggMzYuMTg2NUg5Ni40MzA3VjM3LjY4NjVIOTYuNDM5OFYzNi4xODY1Wk05Ni40NDg4IDM2LjE4NjVIOTYuNDM5OFYzNy42ODY1SDk2LjQ0ODhWMzYuMTg2NVpNOTYuNDU3OCAzNi4xODY1SDk2LjQ0ODhWMzcuNjg2NUg5Ni40NTc4VjM2LjE4NjVaTTk2LjQ2NjggMzYuMTg2NUg5Ni40NTc4VjM3LjY4NjVIOTYuNDY2OFYzNi4xODY1Wk05Ni40NzU4IDM2LjE4NjVIOTYuNDY2OFYzNy42ODY1SDk2LjQ3NThWMzYuMTg2NVpNOTYuNDg0NyAzNi4xODY1SDk2LjQ3NThWMzcuNjg2NUg5Ni40ODQ3VjM2LjE4NjVaTTk2LjQ5MzcgMzYuMTg2NUg5Ni40ODQ3VjM3LjY4NjVIOTYuNDkzN1YzNi4xODY1Wk05Ni41MDI2IDM2LjE4NjVIOTYuNDkzN1YzNy42ODY1SDk2LjUwMjZWMzYuMTg2NVpNOTYuNTExNSAzNi4xODY1SDk2LjUwMjZWMzcuNjg2NUg5Ni41MTE1VjM2LjE4NjVaTTk2LjUyMDQgMzYuMTg2NUg5Ni41MTE1VjM3LjY4NjVIOTYuNTIwNFYzNi4xODY1Wk05Ni41MjkzIDM2LjE4NjVIOTYuNTIwNFYzNy42ODY1SDk2LjUyOTNWMzYuMTg2NVpNOTYuNTM4MiAzNi4xODY1SDk2LjUyOTNWMzcuNjg2NUg5Ni41MzgyVjM2LjE4NjVaTTk2LjU0NyAzNi4xODY1SDk2LjUzODJWMzcuNjg2NUg5Ni41NDdWMzYuMTg2NVpNOTYuNTU1OSAzNi4xODY1SDk2LjU0N1YzNy42ODY1SDk2LjU1NTlWMzYuMTg2NVpNOTYuNTY0NyAzNi4xODY1SDk2LjU1NTlWMzcuNjg2NUg5Ni41NjQ3VjM2LjE4NjVaTTk2LjU3MzUgMzYuMTg2NUg5Ni41NjQ3VjM3LjY4NjVIOTYuNTczNVYzNi4xODY1Wk05Ni41ODIzIDM2LjE4NjVIOTYuNTczNVYzNy42ODY1SDk2LjU4MjNWMzYuMTg2NVpNOTYuNTkxMSAzNi4xODY1SDk2LjU4MjNWMzcuNjg2NUg5Ni41OTExVjM2LjE4NjVaTTk2LjU5OTkgMzYuMTg2NUg5Ni41OTExVjM3LjY4NjVIOTYuNTk5OVYzNi4xODY1Wk05Ni42MDg2IDM2LjE4NjVIOTYuNTk5OVYzNy42ODY1SDk2LjYwODZWMzYuMTg2NVpNOTYuNjE3NCAzNi4xODY1SDk2LjYwODZWMzcuNjg2NUg5Ni42MTc0VjM2LjE4NjVaTTk2LjYyNjEgMzYuMTg2NUg5Ni42MTc0VjM3LjY4NjVIOTYuNjI2MVYzNi4xODY1Wk05Ni42MzQ4IDM2LjE4NjVIOTYuNjI2MVYzNy42ODY1SDk2LjYzNDhWMzYuMTg2NVpNOTYuNjQzNSAzNi4xODY1SDk2LjYzNDhWMzcuNjg2NUg5Ni42NDM1VjM2LjE4NjVaTTk2LjY1MjIgMzYuMTg2NUg5Ni42NDM1VjM3LjY4NjVIOTYuNjUyMlYzNi4xODY1Wk05Ni42NjA4IDM2LjE4NjVIOTYuNjUyMlYzNy42ODY1SDk2LjY2MDhWMzYuMTg2NVpNOTYuNjY5NSAzNi4xODY1SDk2LjY2MDhWMzcuNjg2NUg5Ni42Njk1VjM2LjE4NjVaTTk2LjY3ODEgMzYuMTg2NUg5Ni42Njk1VjM3LjY4NjVIOTYuNjc4MVYzNi4xODY1Wk05Ni42ODY4IDM2LjE4NjVIOTYuNjc4MVYzNy42ODY1SDk2LjY4NjhWMzYuMTg2NVpNOTYuNjk1NCAzNi4xODY1SDk2LjY4NjhWMzcuNjg2NUg5Ni42OTU0VjM2LjE4NjVaTTk2LjcwNCAzNi4xODY1SDk2LjY5NTRWMzcuNjg2NUg5Ni43MDRWMzYuMTg2NVpNOTYuNzEyNSAzNi4xODY1SDk2LjcwNFYzNy42ODY1SDk2LjcxMjVWMzYuMTg2NVpNOTYuNzIxMSAzNi4xODY1SDk2LjcxMjVWMzcuNjg2NUg5Ni43MjExVjM2LjE4NjVaTTk2LjcyOTcgMzYuMTg2NUg5Ni43MjExVjM3LjY4NjVIOTYuNzI5N1YzNi4xODY1Wk05Ni43MzgyIDM2LjE4NjVIOTYuNzI5N1YzNy42ODY1SDk2LjczODJWMzYuMTg2NVpNOTYuNzQ2NyAzNi4xODY1SDk2LjczODJWMzcuNjg2NUg5Ni43NDY3VjM2LjE4NjVaTTk2Ljc1NTIgMzYuMTg2NUg5Ni43NDY3VjM3LjY4NjVIOTYuNzU1MlYzNi4xODY1Wk05Ni43NjM3IDM2LjE4NjVIOTYuNzU1MlYzNy42ODY1SDk2Ljc2MzdWMzYuMTg2NVpNOTYuNzcyMiAzNi4xODY1SDk2Ljc2MzdWMzcuNjg2NUg5Ni43NzIyVjM2LjE4NjVaTTk2Ljc4MDYgMzYuMTg2NUg5Ni43NzIyVjM3LjY4NjVIOTYuNzgwNlYzNi4xODY1Wk05Ni43ODkxIDM2LjE4NjVIOTYuNzgwNlYzNy42ODY1SDk2Ljc4OTFWMzYuMTg2NVpNOTYuNzk3NSAzNi4xODY1SDk2Ljc4OTFWMzcuNjg2NUg5Ni43OTc1VjM2LjE4NjVaTTk2LjgwNTkgMzYuMTg2NUg5Ni43OTc1VjM3LjY4NjVIOTYuODA1OVYzNi4xODY1Wk05Ni44MTQzIDM2LjE4NjVIOTYuODA1OVYzNy42ODY1SDk2LjgxNDNWMzYuMTg2NVpNOTYuODIyNyAzNi4xODY1SDk2LjgxNDNWMzcuNjg2NUg5Ni44MjI3VjM2LjE4NjVaTTk2LjgzMTEgMzYuMTg2NUg5Ni44MjI3VjM3LjY4NjVIOTYuODMxMVYzNi4xODY1Wk05Ni44Mzk1IDM2LjE4NjVIOTYuODMxMVYzNy42ODY1SDk2LjgzOTVWMzYuMTg2NVpNOTYuODQ3OCAzNi4xODY1SDk2LjgzOTVWMzcuNjg2NUg5Ni44NDc4VjM2LjE4NjVaTTk2Ljg1NjEgMzYuMTg2NUg5Ni44NDc4VjM3LjY4NjVIOTYuODU2MVYzNi4xODY1Wk05Ni44NjQ0IDM2LjE4NjVIOTYuODU2MVYzNy42ODY1SDk2Ljg2NDRWMzYuMTg2NVpNOTYuODcyNyAzNi4xODY1SDk2Ljg2NDRWMzcuNjg2NUg5Ni44NzI3VjM2LjE4NjVaTTk2Ljg4MSAzNi4xODY1SDk2Ljg3MjdWMzcuNjg2NUg5Ni44ODFWMzYuMTg2NVpNOTYuODg5MyAzNi4xODY1SDk2Ljg4MVYzNy42ODY1SDk2Ljg4OTNWMzYuMTg2NVpNOTYuODk3NSAzNi4xODY1SDk2Ljg4OTNWMzcuNjg2NUg5Ni44OTc1VjM2LjE4NjVaTTk2LjkwNTggMzYuMTg2NUg5Ni44OTc1VjM3LjY4NjVIOTYuOTA1OFYzNi4xODY1Wk05Ni45MTQgMzYuMTg2NUg5Ni45MDU4VjM3LjY4NjVIOTYuOTE0VjM2LjE4NjVaTTk2LjkyMjIgMzYuMTg2NUg5Ni45MTRWMzcuNjg2NUg5Ni45MjIyVjM2LjE4NjVaTTk2LjkzMDQgMzYuMTg2NUg5Ni45MjIyVjM3LjY4NjVIOTYuOTMwNFYzNi4xODY1Wk05Ni45Mzg2IDM2LjE4NjVIOTYuOTMwNFYzNy42ODY1SDk2LjkzODZWMzYuMTg2NVpNOTYuOTQ2OCAzNi4xODY1SDk2LjkzODZWMzcuNjg2NUg5Ni45NDY4VjM2LjE4NjVaTTk2Ljk1NDkgMzYuMTg2NUg5Ni45NDY4VjM3LjY4NjVIOTYuOTU0OVYzNi4xODY1Wk05Ni45NjMgMzYuMTg2NUg5Ni45NTQ5VjM3LjY4NjVIOTYuOTYzVjM2LjE4NjVaTTk2Ljk3MTIgMzYuMTg2NUg5Ni45NjNWMzcuNjg2NUg5Ni45NzEyVjM2LjE4NjVaTTk2Ljk3OTMgMzYuMTg2NUg5Ni45NzEyVjM3LjY4NjVIOTYuOTc5M1YzNi4xODY1Wk05Ni45ODc0IDM2LjE4NjVIOTYuOTc5M1YzNy42ODY1SDk2Ljk4NzRWMzYuMTg2NVpNOTYuOTk1NCAzNi4xODY1SDk2Ljk4NzRWMzcuNjg2NUg5Ni45OTU0VjM2LjE4NjVaTTk3LjAwMzUgMzYuMTg2NUg5Ni45OTU0VjM3LjY4NjVIOTcuMDAzNVYzNi4xODY1Wk05Ny4wMTE2IDM2LjE4NjVIOTcuMDAzNVYzNy42ODY1SDk3LjAxMTZWMzYuMTg2NVpNOTcuMDE5NiAzNi4xODY1SDk3LjAxMTZWMzcuNjg2NUg5Ny4wMTk2VjM2LjE4NjVaTTk3LjAyNzYgMzYuMTg2NUg5Ny4wMTk2VjM3LjY4NjVIOTcuMDI3NlYzNi4xODY1Wk05Ny4wMzU2IDM2LjE4NjVIOTcuMDI3NlYzNy42ODY1SDk3LjAzNTZWMzYuMTg2NVpNOTcuMDQzNiAzNi4xODY1SDk3LjAzNTZWMzcuNjg2NUg5Ny4wNDM2VjM2LjE4NjVaTTk3LjA1MTYgMzYuMTg2NUg5Ny4wNDM2VjM3LjY4NjVIOTcuMDUxNlYzNi4xODY1Wk05Ny4wNTk1IDM2LjE4NjVIOTcuMDUxNlYzNy42ODY1SDk3LjA1OTVWMzYuMTg2NVpNOTcuMDY3NSAzNi4xODY1SDk3LjA1OTVWMzcuNjg2NUg5Ny4wNjc1VjM2LjE4NjVaTTk3LjA3NTQgMzYuMTg2NUg5Ny4wNjc1VjM3LjY4NjVIOTcuMDc1NFYzNi4xODY1Wk05Ny4wODMzIDM2LjE4NjVIOTcuMDc1NFYzNy42ODY1SDk3LjA4MzNWMzYuMTg2NVpNOTcuMDkxMiAzNi4xODY1SDk3LjA4MzNWMzcuNjg2NUg5Ny4wOTEyVjM2LjE4NjVaTTk3LjA5OTEgMzYuMTg2NUg5Ny4wOTEyVjM3LjY4NjVIOTcuMDk5MVYzNi4xODY1Wk05Ny4xMDcgMzYuMTg2NUg5Ny4wOTkxVjM3LjY4NjVIOTcuMTA3VjM2LjE4NjVaTTk3LjExNDggMzYuMTg2NUg5Ny4xMDdWMzcuNjg2NUg5Ny4xMTQ4VjM2LjE4NjVaTTk3LjEyMjcgMzYuMTg2NUg5Ny4xMTQ4VjM3LjY4NjVIOTcuMTIyN1YzNi4xODY1Wk05Ny4xMzA1IDM2LjE4NjVIOTcuMTIyN1YzNy42ODY1SDk3LjEzMDVWMzYuMTg2NVpNOTcuMTM4MyAzNi4xODY1SDk3LjEzMDVWMzcuNjg2NUg5Ny4xMzgzVjM2LjE4NjVaTTk3LjE0NjEgMzYuMTg2NUg5Ny4xMzgzVjM3LjY4NjVIOTcuMTQ2MVYzNi4xODY1Wk05Ny4xNTM5IDM2LjE4NjVIOTcuMTQ2MVYzNy42ODY1SDk3LjE1MzlWMzYuMTg2NVpNOTcuMTYxNyAzNi4xODY1SDk3LjE1MzlWMzcuNjg2NUg5Ny4xNjE3VjM2LjE4NjVaTTk3LjE2OTQgMzYuMTg2NUg5Ny4xNjE3VjM3LjY4NjVIOTcuMTY5NFYzNi4xODY1Wk05Ny4xNzcyIDM2LjE4NjVIOTcuMTY5NFYzNy42ODY1SDk3LjE3NzJWMzYuMTg2NVpNOTcuMTg0OSAzNi4xODY1SDk3LjE3NzJWMzcuNjg2NUg5Ny4xODQ5VjM2LjE4NjVaTTk3LjE5MjYgMzYuMTg2NUg5Ny4xODQ5VjM3LjY4NjVIOTcuMTkyNlYzNi4xODY1Wk05Ny4yMDAzIDM2LjE4NjVIOTcuMTkyNlYzNy42ODY1SDk3LjIwMDNWMzYuMTg2NVpNOTcuMjA4IDM2LjE4NjVIOTcuMjAwM1YzNy42ODY1SDk3LjIwOFYzNi4xODY1Wk05Ny4yMTU2IDM2LjE4NjVIOTcuMjA4VjM3LjY4NjVIOTcuMjE1NlYzNi4xODY1Wk05Ny4yMjMzIDM2LjE4NjVIOTcuMjE1NlYzNy42ODY1SDk3LjIyMzNWMzYuMTg2NVpNOTcuMjMwOSAzNi4xODY1SDk3LjIyMzNWMzcuNjg2NUg5Ny4yMzA5VjM2LjE4NjVaTTk3LjIzODYgMzYuMTg2NUg5Ny4yMzA5VjM3LjY4NjVIOTcuMjM4NlYzNi4xODY1Wk05Ny4yNDYyIDM2LjE4NjVIOTcuMjM4NlYzNy42ODY1SDk3LjI0NjJWMzYuMTg2NVpNOTcuMjUzNyAzNi4xODY1SDk3LjI0NjJWMzcuNjg2NUg5Ny4yNTM3VjM2LjE4NjVaTTk3LjI2MTMgMzYuMTg2NUg5Ny4yNTM3VjM3LjY4NjVIOTcuMjYxM1YzNi4xODY1Wk05Ny4yNjg5IDM2LjE4NjVIOTcuMjYxM1YzNy42ODY1SDk3LjI2ODlWMzYuMTg2NVpNOTcuMjc2NCAzNi4xODY1SDk3LjI2ODlWMzcuNjg2NUg5Ny4yNzY0VjM2LjE4NjVaTTk4LjAyNjQgMzguNDM2NVYzNi45MzY1SDk2LjUyNjRWMzguNDM2NUg5OC4wMjY0Wk05Ny4yNjg5IDM5LjE4NjVIOTcuMjc2NFYzNy42ODY1SDk3LjI2ODlWMzkuMTg2NVpNOTcuMjYxMyAzOS4xODY1SDk3LjI2ODlWMzcuNjg2NUg5Ny4yNjEzVjM5LjE4NjVaTTk3LjI1MzcgMzkuMTg2NUg5Ny4yNjEzVjM3LjY4NjVIOTcuMjUzN1YzOS4xODY1Wk05Ny4yNDYyIDM5LjE4NjVIOTcuMjUzN1YzNy42ODY1SDk3LjI0NjJWMzkuMTg2NVpNOTcuMjM4NiAzOS4xODY1SDk3LjI0NjJWMzcuNjg2NUg5Ny4yMzg2VjM5LjE4NjVaTTk3LjIzMDkgMzkuMTg2NUg5Ny4yMzg2VjM3LjY4NjVIOTcuMjMwOVYzOS4xODY1Wk05Ny4yMjMzIDM5LjE4NjVIOTcuMjMwOVYzNy42ODY1SDk3LjIyMzNWMzkuMTg2NVpNOTcuMjE1NiAzOS4xODY1SDk3LjIyMzNWMzcuNjg2NUg5Ny4yMTU2VjM5LjE4NjVaTTk3LjIwOCAzOS4xODY1SDk3LjIxNTZWMzcuNjg2NUg5Ny4yMDhWMzkuMTg2NVpNOTcuMjAwMyAzOS4xODY1SDk3LjIwOFYzNy42ODY1SDk3LjIwMDNWMzkuMTg2NVpNOTcuMTkyNiAzOS4xODY1SDk3LjIwMDNWMzcuNjg2NUg5Ny4xOTI2VjM5LjE4NjVaTTk3LjE4NDkgMzkuMTg2NUg5Ny4xOTI2VjM3LjY4NjVIOTcuMTg0OVYzOS4xODY1Wk05Ny4xNzcyIDM5LjE4NjVIOTcuMTg0OVYzNy42ODY1SDk3LjE3NzJWMzkuMTg2NVpNOTcuMTY5NCAzOS4xODY1SDk3LjE3NzJWMzcuNjg2NUg5Ny4xNjk0VjM5LjE4NjVaTTk3LjE2MTcgMzkuMTg2NUg5Ny4xNjk0VjM3LjY4NjVIOTcuMTYxN1YzOS4xODY1Wk05Ny4xNTM5IDM5LjE4NjVIOTcuMTYxN1YzNy42ODY1SDk3LjE1MzlWMzkuMTg2NVpNOTcuMTQ2MSAzOS4xODY1SDk3LjE1MzlWMzcuNjg2NUg5Ny4xNDYxVjM5LjE4NjVaTTk3LjEzODMgMzkuMTg2NUg5Ny4xNDYxVjM3LjY4NjVIOTcuMTM4M1YzOS4xODY1Wk05Ny4xMzA1IDM5LjE4NjVIOTcuMTM4M1YzNy42ODY1SDk3LjEzMDVWMzkuMTg2NVpNOTcuMTIyNyAzOS4xODY1SDk3LjEzMDVWMzcuNjg2NUg5Ny4xMjI3VjM5LjE4NjVaTTk3LjExNDggMzkuMTg2NUg5Ny4xMjI3VjM3LjY4NjVIOTcuMTE0OFYzOS4xODY1Wk05Ny4xMDcgMzkuMTg2NUg5Ny4xMTQ4VjM3LjY4NjVIOTcuMTA3VjM5LjE4NjVaTTk3LjA5OTEgMzkuMTg2NUg5Ny4xMDdWMzcuNjg2NUg5Ny4wOTkxVjM5LjE4NjVaTTk3LjA5MTIgMzkuMTg2NUg5Ny4wOTkxVjM3LjY4NjVIOTcuMDkxMlYzOS4xODY1Wk05Ny4wODMzIDM5LjE4NjVIOTcuMDkxMlYzNy42ODY1SDk3LjA4MzNWMzkuMTg2NVpNOTcuMDc1NCAzOS4xODY1SDk3LjA4MzNWMzcuNjg2NUg5Ny4wNzU0VjM5LjE4NjVaTTk3LjA2NzUgMzkuMTg2NUg5Ny4wNzU0VjM3LjY4NjVIOTcuMDY3NVYzOS4xODY1Wk05Ny4wNTk1IDM5LjE4NjVIOTcuMDY3NVYzNy42ODY1SDk3LjA1OTVWMzkuMTg2NVpNOTcuMDUxNiAzOS4xODY1SDk3LjA1OTVWMzcuNjg2NUg5Ny4wNTE2VjM5LjE4NjVaTTk3LjA0MzYgMzkuMTg2NUg5Ny4wNTE2VjM3LjY4NjVIOTcuMDQzNlYzOS4xODY1Wk05Ny4wMzU2IDM5LjE4NjVIOTcuMDQzNlYzNy42ODY1SDk3LjAzNTZWMzkuMTg2NVpNOTcuMDI3NiAzOS4xODY1SDk3LjAzNTZWMzcuNjg2NUg5Ny4wMjc2VjM5LjE4NjVaTTk3LjAxOTYgMzkuMTg2NUg5Ny4wMjc2VjM3LjY4NjVIOTcuMDE5NlYzOS4xODY1Wk05Ny4wMTE2IDM5LjE4NjVIOTcuMDE5NlYzNy42ODY1SDk3LjAxMTZWMzkuMTg2NVpNOTcuMDAzNSAzOS4xODY1SDk3LjAxMTZWMzcuNjg2NUg5Ny4wMDM1VjM5LjE4NjVaTTk2Ljk5NTQgMzkuMTg2NUg5Ny4wMDM1VjM3LjY4NjVIOTYuOTk1NFYzOS4xODY1Wk05Ni45ODc0IDM5LjE4NjVIOTYuOTk1NFYzNy42ODY1SDk2Ljk4NzRWMzkuMTg2NVpNOTYuOTc5MyAzOS4xODY1SDk2Ljk4NzRWMzcuNjg2NUg5Ni45NzkzVjM5LjE4NjVaTTk2Ljk3MTIgMzkuMTg2NUg5Ni45NzkzVjM3LjY4NjVIOTYuOTcxMlYzOS4xODY1Wk05Ni45NjMgMzkuMTg2NUg5Ni45NzEyVjM3LjY4NjVIOTYuOTYzVjM5LjE4NjVaTTk2Ljk1NDkgMzkuMTg2NUg5Ni45NjNWMzcuNjg2NUg5Ni45NTQ5VjM5LjE4NjVaTTk2Ljk0NjggMzkuMTg2NUg5Ni45NTQ5VjM3LjY4NjVIOTYuOTQ2OFYzOS4xODY1Wk05Ni45Mzg2IDM5LjE4NjVIOTYuOTQ2OFYzNy42ODY1SDk2LjkzODZWMzkuMTg2NVpNOTYuOTMwNCAzOS4xODY1SDk2LjkzODZWMzcuNjg2NUg5Ni45MzA0VjM5LjE4NjVaTTk2LjkyMjIgMzkuMTg2NUg5Ni45MzA0VjM3LjY4NjVIOTYuOTIyMlYzOS4xODY1Wk05Ni45MTQgMzkuMTg2NUg5Ni45MjIyVjM3LjY4NjVIOTYuOTE0VjM5LjE4NjVaTTk2LjkwNTggMzkuMTg2NUg5Ni45MTRWMzcuNjg2NUg5Ni45MDU4VjM5LjE4NjVaTTk2Ljg5NzUgMzkuMTg2NUg5Ni45MDU4VjM3LjY4NjVIOTYuODk3NVYzOS4xODY1Wk05Ni44ODkzIDM5LjE4NjVIOTYuODk3NVYzNy42ODY1SDk2Ljg4OTNWMzkuMTg2NVpNOTYuODgxIDM5LjE4NjVIOTYuODg5M1YzNy42ODY1SDk2Ljg4MVYzOS4xODY1Wk05Ni44NzI3IDM5LjE4NjVIOTYuODgxVjM3LjY4NjVIOTYuODcyN1YzOS4xODY1Wk05Ni44NjQ0IDM5LjE4NjVIOTYuODcyN1YzNy42ODY1SDk2Ljg2NDRWMzkuMTg2NVpNOTYuODU2MSAzOS4xODY1SDk2Ljg2NDRWMzcuNjg2NUg5Ni44NTYxVjM5LjE4NjVaTTk2Ljg0NzggMzkuMTg2NUg5Ni44NTYxVjM3LjY4NjVIOTYuODQ3OFYzOS4xODY1Wk05Ni44Mzk1IDM5LjE4NjVIOTYuODQ3OFYzNy42ODY1SDk2LjgzOTVWMzkuMTg2NVpNOTYuODMxMSAzOS4xODY1SDk2LjgzOTVWMzcuNjg2NUg5Ni44MzExVjM5LjE4NjVaTTk2LjgyMjcgMzkuMTg2NUg5Ni44MzExVjM3LjY4NjVIOTYuODIyN1YzOS4xODY1Wk05Ni44MTQzIDM5LjE4NjVIOTYuODIyN1YzNy42ODY1SDk2LjgxNDNWMzkuMTg2NVpNOTYuODA1OSAzOS4xODY1SDk2LjgxNDNWMzcuNjg2NUg5Ni44MDU5VjM5LjE4NjVaTTk2Ljc5NzUgMzkuMTg2NUg5Ni44MDU5VjM3LjY4NjVIOTYuNzk3NVYzOS4xODY1Wk05Ni43ODkxIDM5LjE4NjVIOTYuNzk3NVYzNy42ODY1SDk2Ljc4OTFWMzkuMTg2NVpNOTYuNzgwNiAzOS4xODY1SDk2Ljc4OTFWMzcuNjg2NUg5Ni43ODA2VjM5LjE4NjVaTTk2Ljc3MjIgMzkuMTg2NUg5Ni43ODA2VjM3LjY4NjVIOTYuNzcyMlYzOS4xODY1Wk05Ni43NjM3IDM5LjE4NjVIOTYuNzcyMlYzNy42ODY1SDk2Ljc2MzdWMzkuMTg2NVpNOTYuNzU1MiAzOS4xODY1SDk2Ljc2MzdWMzcuNjg2NUg5Ni43NTUyVjM5LjE4NjVaTTk2Ljc0NjcgMzkuMTg2NUg5Ni43NTUyVjM3LjY4NjVIOTYuNzQ2N1YzOS4xODY1Wk05Ni43MzgyIDM5LjE4NjVIOTYuNzQ2N1YzNy42ODY1SDk2LjczODJWMzkuMTg2NVpNOTYuNzI5NyAzOS4xODY1SDk2LjczODJWMzcuNjg2NUg5Ni43Mjk3VjM5LjE4NjVaTTk2LjcyMTEgMzkuMTg2NUg5Ni43Mjk3VjM3LjY4NjVIOTYuNzIxMVYzOS4xODY1Wk05Ni43MTI1IDM5LjE4NjVIOTYuNzIxMVYzNy42ODY1SDk2LjcxMjVWMzkuMTg2NVpNOTYuNzA0IDM5LjE4NjVIOTYuNzEyNVYzNy42ODY1SDk2LjcwNFYzOS4xODY1Wk05Ni42OTU0IDM5LjE4NjVIOTYuNzA0VjM3LjY4NjVIOTYuNjk1NFYzOS4xODY1Wk05Ni42ODY4IDM5LjE4NjVIOTYuNjk1NFYzNy42ODY1SDk2LjY4NjhWMzkuMTg2NVpNOTYuNjc4MSAzOS4xODY1SDk2LjY4NjhWMzcuNjg2NUg5Ni42NzgxVjM5LjE4NjVaTTk2LjY2OTUgMzkuMTg2NUg5Ni42NzgxVjM3LjY4NjVIOTYuNjY5NVYzOS4xODY1Wk05Ni42NjA4IDM5LjE4NjVIOTYuNjY5NVYzNy42ODY1SDk2LjY2MDhWMzkuMTg2NVpNOTYuNjUyMiAzOS4xODY1SDk2LjY2MDhWMzcuNjg2NUg5Ni42NTIyVjM5LjE4NjVaTTk2LjY0MzUgMzkuMTg2NUg5Ni42NTIyVjM3LjY4NjVIOTYuNjQzNVYzOS4xODY1Wk05Ni42MzQ4IDM5LjE4NjVIOTYuNjQzNVYzNy42ODY1SDk2LjYzNDhWMzkuMTg2NVpNOTYuNjI2MSAzOS4xODY1SDk2LjYzNDhWMzcuNjg2NUg5Ni42MjYxVjM5LjE4NjVaTTk2LjYxNzQgMzkuMTg2NUg5Ni42MjYxVjM3LjY4NjVIOTYuNjE3NFYzOS4xODY1Wk05Ni42MDg2IDM5LjE4NjVIOTYuNjE3NFYzNy42ODY1SDk2LjYwODZWMzkuMTg2NVpNOTYuNTk5OSAzOS4xODY1SDk2LjYwODZWMzcuNjg2NUg5Ni41OTk5VjM5LjE4NjVaTTk2LjU5MTEgMzkuMTg2NUg5Ni41OTk5VjM3LjY4NjVIOTYuNTkxMVYzOS4xODY1Wk05Ni41ODIzIDM5LjE4NjVIOTYuNTkxMVYzNy42ODY1SDk2LjU4MjNWMzkuMTg2NVpNOTYuNTczNSAzOS4xODY1SDk2LjU4MjNWMzcuNjg2NUg5Ni41NzM1VjM5LjE4NjVaTTk2LjU2NDcgMzkuMTg2NUg5Ni41NzM1VjM3LjY4NjVIOTYuNTY0N1YzOS4xODY1Wk05Ni41NTU5IDM5LjE4NjVIOTYuNTY0N1YzNy42ODY1SDk2LjU1NTlWMzkuMTg2NVpNOTYuNTQ3IDM5LjE4NjVIOTYuNTU1OVYzNy42ODY1SDk2LjU0N1YzOS4xODY1Wk05Ni41MzgyIDM5LjE4NjVIOTYuNTQ3VjM3LjY4NjVIOTYuNTM4MlYzOS4xODY1Wk05Ni41MjkzIDM5LjE4NjVIOTYuNTM4MlYzNy42ODY1SDk2LjUyOTNWMzkuMTg2NVpNOTYuNTIwNCAzOS4xODY1SDk2LjUyOTNWMzcuNjg2NUg5Ni41MjA0VjM5LjE4NjVaTTk2LjUxMTUgMzkuMTg2NUg5Ni41MjA0VjM3LjY4NjVIOTYuNTExNVYzOS4xODY1Wk05Ni41MDI2IDM5LjE4NjVIOTYuNTExNVYzNy42ODY1SDk2LjUwMjZWMzkuMTg2NVpNOTYuNDkzNyAzOS4xODY1SDk2LjUwMjZWMzcuNjg2NUg5Ni40OTM3VjM5LjE4NjVaTTk2LjQ4NDcgMzkuMTg2NUg5Ni40OTM3VjM3LjY4NjVIOTYuNDg0N1YzOS4xODY1Wk05Ni40NzU4IDM5LjE4NjVIOTYuNDg0N1YzNy42ODY1SDk2LjQ3NThWMzkuMTg2NVpNOTYuNDY2OCAzOS4xODY1SDk2LjQ3NThWMzcuNjg2NUg5Ni40NjY4VjM5LjE4NjVaTTk2LjQ1NzggMzkuMTg2NUg5Ni40NjY4VjM3LjY4NjVIOTYuNDU3OFYzOS4xODY1Wk05Ni40NDg4IDM5LjE4NjVIOTYuNDU3OFYzNy42ODY1SDk2LjQ0ODhWMzkuMTg2NVpNOTYuNDM5OCAzOS4xODY1SDk2LjQ0ODhWMzcuNjg2NUg5Ni40Mzk4VjM5LjE4NjVaTTk2LjQzMDcgMzkuMTg2NUg5Ni40Mzk4VjM3LjY4NjVIOTYuNDMwN1YzOS4xODY1Wk05Ni40MjE3IDM5LjE4NjVIOTYuNDMwN1YzNy42ODY1SDk2LjQyMTdWMzkuMTg2NVpNOTYuNDEyNiAzOS4xODY1SDk2LjQyMTdWMzcuNjg2NUg5Ni40MTI2VjM5LjE4NjVaTTk2LjQwMzUgMzkuMTg2NUg5Ni40MTI2VjM3LjY4NjVIOTYuNDAzNVYzOS4xODY1Wk05Ni4zOTQ0IDM5LjE4NjVIOTYuNDAzNVYzNy42ODY1SDk2LjM5NDRWMzkuMTg2NVpNOTYuMzg1MyAzOS4xODY1SDk2LjM5NDRWMzcuNjg2NUg5Ni4zODUzVjM5LjE4NjVaTTk2LjM3NjIgMzkuMTg2NUg5Ni4zODUzVjM3LjY4NjVIOTYuMzc2MlYzOS4xODY1Wk05Ni4zNjcxIDM5LjE4NjVIOTYuMzc2MlYzNy42ODY1SDk2LjM2NzFWMzkuMTg2NVpNOTYuMzU3OSAzOS4xODY1SDk2LjM2NzFWMzcuNjg2NUg5Ni4zNTc5VjM5LjE4NjVaTTk2LjM0ODcgMzkuMTg2NUg5Ni4zNTc5VjM3LjY4NjVIOTYuMzQ4N1YzOS4xODY1Wk05Ni4zMzk2IDM5LjE4NjVIOTYuMzQ4N1YzNy42ODY1SDk2LjMzOTZWMzkuMTg2NVpNOTYuMzMwNCAzOS4xODY1SDk2LjMzOTZWMzcuNjg2NUg5Ni4zMzA0VjM5LjE4NjVaTTk2LjMyMTIgMzkuMTg2NUg5Ni4zMzA0VjM3LjY4NjVIOTYuMzIxMlYzOS4xODY1Wk05Ni4zMTE5IDM5LjE4NjVIOTYuMzIxMlYzNy42ODY1SDk2LjMxMTlWMzkuMTg2NVpNOTYuMzAyNyAzOS4xODY1SDk2LjMxMTlWMzcuNjg2NUg5Ni4zMDI3VjM5LjE4NjVaTTk2LjI5MzQgMzkuMTg2NUg5Ni4zMDI3VjM3LjY4NjVIOTYuMjkzNFYzOS4xODY1Wk05Ni4yODQyIDM5LjE4NjVIOTYuMjkzNFYzNy42ODY1SDk2LjI4NDJWMzkuMTg2NVpNOTYuMjc0OSAzOS4xODY1SDk2LjI4NDJWMzcuNjg2NUg5Ni4yNzQ5VjM5LjE4NjVaTTk2LjI2NTYgMzkuMTg2NUg5Ni4yNzQ5VjM3LjY4NjVIOTYuMjY1NlYzOS4xODY1Wk05Ni4yNTYzIDM5LjE4NjVIOTYuMjY1NlYzNy42ODY1SDk2LjI1NjNWMzkuMTg2NVpNOTYuMjQ2OSAzOS4xODY1SDk2LjI1NjNWMzcuNjg2NUg5Ni4yNDY5VjM5LjE4NjVaTTk2LjIzNzYgMzkuMTg2NUg5Ni4yNDY5VjM3LjY4NjVIOTYuMjM3NlYzOS4xODY1Wk05Ni4yMjgyIDM5LjE4NjVIOTYuMjM3NlYzNy42ODY1SDk2LjIyODJWMzkuMTg2NVpNOTYuMjE4OSAzOS4xODY1SDk2LjIyODJWMzcuNjg2NUg5Ni4yMTg5VjM5LjE4NjVaTTk2LjIwOTUgMzkuMTg2NUg5Ni4yMTg5VjM3LjY4NjVIOTYuMjA5NVYzOS4xODY1Wk05Ni4yMDAxIDM5LjE4NjVIOTYuMjA5NVYzNy42ODY1SDk2LjIwMDFWMzkuMTg2NVpNOTYuMTkwNiAzOS4xODY1SDk2LjIwMDFWMzcuNjg2NUg5Ni4xOTA2VjM5LjE4NjVaTTk2LjE4MTIgMzkuMTg2NUg5Ni4xOTA2VjM3LjY4NjVIOTYuMTgxMlYzOS4xODY1Wk05Ni4xNzE4IDM5LjE4NjVIOTYuMTgxMlYzNy42ODY1SDk2LjE3MThWMzkuMTg2NVpNOTYuMTYyMyAzOS4xODY1SDk2LjE3MThWMzcuNjg2NUg5Ni4xNjIzVjM5LjE4NjVaTTk2LjE1MjggMzkuMTg2NUg5Ni4xNjIzVjM3LjY4NjVIOTYuMTUyOFYzOS4xODY1Wk05Ni4xNDMzIDM5LjE4NjVIOTYuMTUyOFYzNy42ODY1SDk2LjE0MzNWMzkuMTg2NVpNOTYuMTMzOCAzOS4xODY1SDk2LjE0MzNWMzcuNjg2NUg5Ni4xMzM4VjM5LjE4NjVaTTk2LjEyNDMgMzkuMTg2NUg5Ni4xMzM4VjM3LjY4NjVIOTYuMTI0M1YzOS4xODY1Wk05Ni4xMTQ4IDM5LjE4NjVIOTYuMTI0M1YzNy42ODY1SDk2LjExNDhWMzkuMTg2NVpNOTYuMTA1MiAzOS4xODY1SDk2LjExNDhWMzcuNjg2NUg5Ni4xMDUyVjM5LjE4NjVaTTk2LjA5NTcgMzkuMTg2NUg5Ni4xMDUyVjM3LjY4NjVIOTYuMDk1N1YzOS4xODY1Wk05Ni4wODYxIDM5LjE4NjVIOTYuMDk1N1YzNy42ODY1SDk2LjA4NjFWMzkuMTg2NVpNOTYuMDc2NSAzOS4xODY1SDk2LjA4NjFWMzcuNjg2NUg5Ni4wNzY1VjM5LjE4NjVaTTk2LjA2NjkgMzkuMTg2NUg5Ni4wNzY1VjM3LjY4NjVIOTYuMDY2OVYzOS4xODY1Wk05Ni4wNTczIDM5LjE4NjVIOTYuMDY2OVYzNy42ODY1SDk2LjA1NzNWMzkuMTg2NVpNOTYuMDQ3NiAzOS4xODY1SDk2LjA1NzNWMzcuNjg2NUg5Ni4wNDc2VjM5LjE4NjVaTTk2LjAzOCAzOS4xODY1SDk2LjA0NzZWMzcuNjg2NUg5Ni4wMzhWMzkuMTg2NVpNOTYuMDI4MyAzOS4xODY1SDk2LjAzOFYzNy42ODY1SDk2LjAyODNWMzkuMTg2NVpNOTYuMDE4NiAzOS4xODY1SDk2LjAyODNWMzcuNjg2NUg5Ni4wMTg2VjM5LjE4NjVaTTk2LjAwODkgMzkuMTg2NUg5Ni4wMTg2VjM3LjY4NjVIOTYuMDA4OVYzOS4xODY1Wk05NS45OTkyIDM5LjE4NjVIOTYuMDA4OVYzNy42ODY1SDk1Ljk5OTJWMzkuMTg2NVpNOTUuOTg5NSAzOS4xODY1SDk1Ljk5OTJWMzcuNjg2NUg5NS45ODk1VjM5LjE4NjVaTTk1Ljk3OTcgMzkuMTg2NUg5NS45ODk1VjM3LjY4NjVIOTUuOTc5N1YzOS4xODY1Wk05NS45NyAzOS4xODY1SDk1Ljk3OTdWMzcuNjg2NUg5NS45N1YzOS4xODY1Wk05NS45NjAyIDM5LjE4NjVIOTUuOTdWMzcuNjg2NUg5NS45NjAyVjM5LjE4NjVaTTk1Ljk1MDQgMzkuMTg2NUg5NS45NjAyVjM3LjY4NjVIOTUuOTUwNFYzOS4xODY1Wk05NS45NDA2IDM5LjE4NjVIOTUuOTUwNFYzNy42ODY1SDk1Ljk0MDZWMzkuMTg2NVpNOTUuOTMwOCAzOS4xODY1SDk1Ljk0MDZWMzcuNjg2NUg5NS45MzA4VjM5LjE4NjVaTTk1LjkyMSAzOS4xODY1SDk1LjkzMDhWMzcuNjg2NUg5NS45MjFWMzkuMTg2NVpNOTUuOTExMSAzOS4xODY1SDk1LjkyMVYzNy42ODY1SDk1LjkxMTFWMzkuMTg2NVpNOTUuOTAxMyAzOS4xODY1SDk1LjkxMTFWMzcuNjg2NUg5NS45MDEzVjM5LjE4NjVaTTk1Ljg5MTQgMzkuMTg2NUg5NS45MDEzVjM3LjY4NjVIOTUuODkxNFYzOS4xODY1Wk05NS44ODE1IDM5LjE4NjVIOTUuODkxNFYzNy42ODY1SDk1Ljg4MTVWMzkuMTg2NVpNOTUuODcxNiAzOS4xODY1SDk1Ljg4MTVWMzcuNjg2NUg5NS44NzE2VjM5LjE4NjVaTTk1Ljg2MTcgMzkuMTg2NUg5NS44NzE2VjM3LjY4NjVIOTUuODYxN1YzOS4xODY1Wk05NS44NTE3IDM5LjE4NjVIOTUuODYxN1YzNy42ODY1SDk1Ljg1MTdWMzkuMTg2NVpNOTUuODQxOCAzOS4xODY1SDk1Ljg1MTdWMzcuNjg2NUg5NS44NDE4VjM5LjE4NjVaTTk1LjgzMTggMzkuMTg2NUg5NS44NDE4VjM3LjY4NjVIOTUuODMxOFYzOS4xODY1Wk05NS44MjE5IDM5LjE4NjVIOTUuODMxOFYzNy42ODY1SDk1LjgyMTlWMzkuMTg2NVpNOTUuODExOSAzOS4xODY1SDk1LjgyMTlWMzcuNjg2NUg5NS44MTE5VjM5LjE4NjVaTTk1LjgwMTkgMzkuMTg2NUg5NS44MTE5VjM3LjY4NjVIOTUuODAxOVYzOS4xODY1Wk05NS43OTE4IDM5LjE4NjVIOTUuODAxOVYzNy42ODY1SDk1Ljc5MThWMzkuMTg2NVpNOTUuNzgxOCAzOS4xODY1SDk1Ljc5MThWMzcuNjg2NUg5NS43ODE4VjM5LjE4NjVaTTk1Ljc3MTcgMzkuMTg2NUg5NS43ODE4VjM3LjY4NjVIOTUuNzcxN1YzOS4xODY1Wk05NS43NjE3IDM5LjE4NjVIOTUuNzcxN1YzNy42ODY1SDk1Ljc2MTdWMzkuMTg2NVpNOTUuNzUxNiAzOS4xODY1SDk1Ljc2MTdWMzcuNjg2NUg5NS43NTE2VjM5LjE4NjVaTTk1Ljc0MTUgMzkuMTg2NUg5NS43NTE2VjM3LjY4NjVIOTUuNzQxNVYzOS4xODY1Wk05NS43MzE0IDM5LjE4NjVIOTUuNzQxNVYzNy42ODY1SDk1LjczMTRWMzkuMTg2NVpNOTUuNzIxMyAzOS4xODY1SDk1LjczMTRWMzcuNjg2NUg5NS43MjEzVjM5LjE4NjVaTTk1LjcxMTEgMzkuMTg2NUg5NS43MjEzVjM3LjY4NjVIOTUuNzExMVYzOS4xODY1Wk05NS43MDEgMzkuMTg2NUg5NS43MTExVjM3LjY4NjVIOTUuNzAxVjM5LjE4NjVaTTk1LjY5MDggMzkuMTg2NUg5NS43MDFWMzcuNjg2NUg5NS42OTA4VjM5LjE4NjVaTTk1LjY4MDYgMzkuMTg2NUg5NS42OTA4VjM3LjY4NjVIOTUuNjgwNlYzOS4xODY1Wk05NS42NzA0IDM5LjE4NjVIOTUuNjgwNlYzNy42ODY1SDk1LjY3MDRWMzkuMTg2NVpNOTUuNjYwMiAzOS4xODY1SDk1LjY3MDRWMzcuNjg2NUg5NS42NjAyVjM5LjE4NjVaTTk1LjY1IDM5LjE4NjVIOTUuNjYwMlYzNy42ODY1SDk1LjY1VjM5LjE4NjVaTTk1LjYzOTcgMzkuMTg2NUg5NS42NVYzNy42ODY1SDk1LjYzOTdWMzkuMTg2NVpNOTUuNjI5NSAzOS4xODY1SDk1LjYzOTdWMzcuNjg2NUg5NS42Mjk1VjM5LjE4NjVaTTk1LjYxOTIgMzkuMTg2NUg5NS42Mjk1VjM3LjY4NjVIOTUuNjE5MlYzOS4xODY1Wk05NS42MDg5IDM5LjE4NjVIOTUuNjE5MlYzNy42ODY1SDk1LjYwODlWMzkuMTg2NVpNOTUuNTk4NiAzOS4xODY1SDk1LjYwODlWMzcuNjg2NUg5NS41OTg2VjM5LjE4NjVaTTk1LjU4ODMgMzkuMTg2NUg5NS41OTg2VjM3LjY4NjVIOTUuNTg4M1YzOS4xODY1Wk05NS41NzggMzkuMTg2NUg5NS41ODgzVjM3LjY4NjVIOTUuNTc4VjM5LjE4NjVaTTk1LjU2NzYgMzkuMTg2NUg5NS41NzhWMzcuNjg2NUg5NS41Njc2VjM5LjE4NjVaTTk1LjU1NzMgMzkuMTg2NUg5NS41Njc2VjM3LjY4NjVIOTUuNTU3M1YzOS4xODY1Wk05NS41NDY5IDM5LjE4NjVIOTUuNTU3M1YzNy42ODY1SDk1LjU0NjlWMzkuMTg2NVpNOTUuNTM2NSAzOS4xODY1SDk1LjU0NjlWMzcuNjg2NUg5NS41MzY1VjM5LjE4NjVaTTk1LjUyNjEgMzkuMTg2NUg5NS41MzY1VjM3LjY4NjVIOTUuNTI2MVYzOS4xODY1Wk05NS41MTU3IDM5LjE4NjVIOTUuNTI2MVYzNy42ODY1SDk1LjUxNTdWMzkuMTg2NVpNOTUuNTA1MiAzOS4xODY1SDk1LjUxNTdWMzcuNjg2NUg5NS41MDUyVjM5LjE4NjVaTTk1LjQ5NDggMzkuMTg2NUg5NS41MDUyVjM3LjY4NjVIOTUuNDk0OFYzOS4xODY1Wk05NS40ODQzIDM5LjE4NjVIOTUuNDk0OFYzNy42ODY1SDk1LjQ4NDNWMzkuMTg2NVpNOTUuNDczOSAzOS4xODY1SDk1LjQ4NDNWMzcuNjg2NUg5NS40NzM5VjM5LjE4NjVaTTk1LjQ2MzQgMzkuMTg2NUg5NS40NzM5VjM3LjY4NjVIOTUuNDYzNFYzOS4xODY1Wk05NS40NTI5IDM5LjE4NjVIOTUuNDYzNFYzNy42ODY1SDk1LjQ1MjlWMzkuMTg2NVpNOTUuNDQyMyAzOS4xODY1SDk1LjQ1MjlWMzcuNjg2NUg5NS40NDIzVjM5LjE4NjVaTTk1LjQzMTggMzkuMTg2NUg5NS40NDIzVjM3LjY4NjVIOTUuNDMxOFYzOS4xODY1Wk05NS40MjEyIDM5LjE4NjVIOTUuNDMxOFYzNy42ODY1SDk1LjQyMTJWMzkuMTg2NVpNOTUuNDEwNyAzOS4xODY1SDk1LjQyMTJWMzcuNjg2NUg5NS40MTA3VjM5LjE4NjVaTTk1LjQwMDEgMzkuMTg2NUg5NS40MTA3VjM3LjY4NjVIOTUuNDAwMVYzOS4xODY1Wk05NS4zODk1IDM5LjE4NjVIOTUuNDAwMVYzNy42ODY1SDk1LjM4OTVWMzkuMTg2NVpNOTUuMzc4OSAzOS4xODY1SDk1LjM4OTVWMzcuNjg2NUg5NS4zNzg5VjM5LjE4NjVaTTk1LjM2ODMgMzkuMTg2NUg5NS4zNzg5VjM3LjY4NjVIOTUuMzY4M1YzOS4xODY1Wk05NS4zNTc2IDM5LjE4NjVIOTUuMzY4M1YzNy42ODY1SDk1LjM1NzZWMzkuMTg2NVpNOTUuMzQ3IDM5LjE4NjVIOTUuMzU3NlYzNy42ODY1SDk1LjM0N1YzOS4xODY1Wk05NS4zMzYzIDM5LjE4NjVIOTUuMzQ3VjM3LjY4NjVIOTUuMzM2M1YzOS4xODY1Wk05NS4zMjU2IDM5LjE4NjVIOTUuMzM2M1YzNy42ODY1SDk1LjMyNTZWMzkuMTg2NVpNOTUuMzE0OSAzOS4xODY1SDk1LjMyNTZWMzcuNjg2NUg5NS4zMTQ5VjM5LjE4NjVaTTk1LjMwNDIgMzkuMTg2NUg5NS4zMTQ5VjM3LjY4NjVIOTUuMzA0MlYzOS4xODY1Wk05NS4yOTM1IDM5LjE4NjVIOTUuMzA0MlYzNy42ODY1SDk1LjI5MzVWMzkuMTg2NVpNOTUuMjgyNyAzOS4xODY1SDk1LjI5MzVWMzcuNjg2NUg5NS4yODI3VjM5LjE4NjVaTTk1LjI3MiAzOS4xODY1SDk1LjI4MjdWMzcuNjg2NUg5NS4yNzJWMzkuMTg2NVpNOTUuMjYxMiAzOS4xODY1SDk1LjI3MlYzNy42ODY1SDk1LjI2MTJWMzkuMTg2NVpNOTUuMjUwNCAzOS4xODY1SDk1LjI2MTJWMzcuNjg2NUg5NS4yNTA0VjM5LjE4NjVaTTk1LjIzOTYgMzkuMTg2NUg5NS4yNTA0VjM3LjY4NjVIOTUuMjM5NlYzOS4xODY1Wk05NS4yMjg4IDM5LjE4NjVIOTUuMjM5NlYzNy42ODY1SDk1LjIyODhWMzkuMTg2NVpNOTUuMjE4IDM5LjE4NjVIOTUuMjI4OFYzNy42ODY1SDk1LjIxOFYzOS4xODY1Wk05NS4yMDcxIDM5LjE4NjVIOTUuMjE4VjM3LjY4NjVIOTUuMjA3MVYzOS4xODY1Wk05NS4xOTYzIDM5LjE4NjVIOTUuMjA3MVYzNy42ODY1SDk1LjE5NjNWMzkuMTg2NVpNOTUuMTg1NCAzOS4xODY1SDk1LjE5NjNWMzcuNjg2NUg5NS4xODU0VjM5LjE4NjVaTTk1LjE3NDUgMzkuMTg2NUg5NS4xODU0VjM3LjY4NjVIOTUuMTc0NVYzOS4xODY1Wk05NS4xNjM2IDM5LjE4NjVIOTUuMTc0NVYzNy42ODY1SDk1LjE2MzZWMzkuMTg2NVpNOTUuMTUyNyAzOS4xODY1SDk1LjE2MzZWMzcuNjg2NUg5NS4xNTI3VjM5LjE4NjVaTTk1LjE0MTcgMzkuMTg2NUg5NS4xNTI3VjM3LjY4NjVIOTUuMTQxN1YzOS4xODY1Wk05NS4xMzA4IDM5LjE4NjVIOTUuMTQxN1YzNy42ODY1SDk1LjEzMDhWMzkuMTg2NVpNOTUuMTE5OCAzOS4xODY1SDk1LjEzMDhWMzcuNjg2NUg5NS4xMTk4VjM5LjE4NjVaTTk1LjEwODggMzkuMTg2NUg5NS4xMTk4VjM3LjY4NjVIOTUuMTA4OFYzOS4xODY1Wk05NS4wOTc4IDM5LjE4NjVIOTUuMTA4OFYzNy42ODY1SDk1LjA5NzhWMzkuMTg2NVpNOTUuMDg2OCAzOS4xODY1SDk1LjA5NzhWMzcuNjg2NUg5NS4wODY4VjM5LjE4NjVaTTk1LjA3NTggMzkuMTg2NUg5NS4wODY4VjM3LjY4NjVIOTUuMDc1OFYzOS4xODY1Wk05NS4wNjQ4IDM5LjE4NjVIOTUuMDc1OFYzNy42ODY1SDk1LjA2NDhWMzkuMTg2NVpNOTUuMDUzNyAzOS4xODY1SDk1LjA2NDhWMzcuNjg2NUg5NS4wNTM3VjM5LjE4NjVaTTk1LjA0MjcgMzkuMTg2NUg5NS4wNTM3VjM3LjY4NjVIOTUuMDQyN1YzOS4xODY1Wk05NS4wMzE2IDM5LjE4NjVIOTUuMDQyN1YzNy42ODY1SDk1LjAzMTZWMzkuMTg2NVpNOTUuMDIwNSAzOS4xODY1SDk1LjAzMTZWMzcuNjg2NUg5NS4wMjA1VjM5LjE4NjVaTTk1LjAwOTQgMzkuMTg2NUg5NS4wMjA1VjM3LjY4NjVIOTUuMDA5NFYzOS4xODY1Wk05NC45OTgyIDM5LjE4NjVIOTUuMDA5NFYzNy42ODY1SDk0Ljk5ODJWMzkuMTg2NVpNOTQuOTg3MSAzOS4xODY1SDk0Ljk5ODJWMzcuNjg2NUg5NC45ODcxVjM5LjE4NjVaTTk0Ljk3NTkgMzkuMTg2NUg5NC45ODcxVjM3LjY4NjVIOTQuOTc1OVYzOS4xODY1Wk05NC45NjQ4IDM5LjE4NjVIOTQuOTc1OVYzNy42ODY1SDk0Ljk2NDhWMzkuMTg2NVpNOTQuOTUzNiAzOS4xODY1SDk0Ljk2NDhWMzcuNjg2NUg5NC45NTM2VjM5LjE4NjVaTTk0Ljk0MjQgMzkuMTg2NUg5NC45NTM2VjM3LjY4NjVIOTQuOTQyNFYzOS4xODY1Wk05NC45MzEyIDM5LjE4NjVIOTQuOTQyNFYzNy42ODY1SDk0LjkzMTJWMzkuMTg2NVpNOTQuOTE5OSAzOS4xODY1SDk0LjkzMTJWMzcuNjg2NUg5NC45MTk5VjM5LjE4NjVaTTk0LjkwODcgMzkuMTg2NUg5NC45MTk5VjM3LjY4NjVIOTQuOTA4N1YzOS4xODY1Wk05NC44OTc0IDM5LjE4NjVIOTQuOTA4N1YzNy42ODY1SDk0Ljg5NzRWMzkuMTg2NVpNOTQuODg2MiAzOS4xODY1SDk0Ljg5NzRWMzcuNjg2NUg5NC44ODYyVjM5LjE4NjVaTTk0Ljg3NDkgMzkuMTg2NUg5NC44ODYyVjM3LjY4NjVIOTQuODc0OVYzOS4xODY1Wk05NC44NjM2IDM5LjE4NjVIOTQuODc0OVYzNy42ODY1SDk0Ljg2MzZWMzkuMTg2NVpNOTQuODUyMyAzOS4xODY1SDk0Ljg2MzZWMzcuNjg2NUg5NC44NTIzVjM5LjE4NjVaTTk0Ljg0MDkgMzkuMTg2NUg5NC44NTIzVjM3LjY4NjVIOTQuODQwOVYzOS4xODY1Wk05NC44Mjk2IDM5LjE4NjVIOTQuODQwOVYzNy42ODY1SDk0LjgyOTZWMzkuMTg2NVpNOTQuODE4MiAzOS4xODY1SDk0LjgyOTZWMzcuNjg2NUg5NC44MTgyVjM5LjE4NjVaTTk0LjgwNjggMzkuMTg2NUg5NC44MTgyVjM3LjY4NjVIOTQuODA2OFYzOS4xODY1Wk05NC43OTU0IDM5LjE4NjVIOTQuODA2OFYzNy42ODY1SDk0Ljc5NTRWMzkuMTg2NVpNOTQuNzg0IDM5LjE4NjVIOTQuNzk1NFYzNy42ODY1SDk0Ljc4NFYzOS4xODY1Wk05NC43NzI2IDM5LjE4NjVIOTQuNzg0VjM3LjY4NjVIOTQuNzcyNlYzOS4xODY1Wk05NC43NjEyIDM5LjE4NjVIOTQuNzcyNlYzNy42ODY1SDk0Ljc2MTJWMzkuMTg2NVpNOTQuNzQ5NyAzOS4xODY1SDk0Ljc2MTJWMzcuNjg2NUg5NC43NDk3VjM5LjE4NjVaTTk0LjczODMgMzkuMTg2NUg5NC43NDk3VjM3LjY4NjVIOTQuNzM4M1YzOS4xODY1Wk05NC43MjY4IDM5LjE4NjVIOTQuNzM4M1YzNy42ODY1SDk0LjcyNjhWMzkuMTg2NVpNOTQuNzE1MyAzOS4xODY1SDk0LjcyNjhWMzcuNjg2NUg5NC43MTUzVjM5LjE4NjVaTTk0LjcwMzggMzkuMTg2NUg5NC43MTUzVjM3LjY4NjVIOTQuNzAzOFYzOS4xODY1Wk05NC42OTIzIDM5LjE4NjVIOTQuNzAzOFYzNy42ODY1SDk0LjY5MjNWMzkuMTg2NVpNOTQuNjgwNyAzOS4xODY1SDk0LjY5MjNWMzcuNjg2NUg5NC42ODA3VjM5LjE4NjVaTTk0LjY2OTIgMzkuMTg2NUg5NC42ODA3VjM3LjY4NjVIOTQuNjY5MlYzOS4xODY1Wk05NC42NTc2IDM5LjE4NjVIOTQuNjY5MlYzNy42ODY1SDk0LjY1NzZWMzkuMTg2NVpNOTQuNjQ2IDM5LjE4NjVIOTQuNjU3NlYzNy42ODY1SDk0LjY0NlYzOS4xODY1Wk05NC42MzQ0IDM5LjE4NjVIOTQuNjQ2VjM3LjY4NjVIOTQuNjM0NFYzOS4xODY1Wk05NC42MjI4IDM5LjE4NjVIOTQuNjM0NFYzNy42ODY1SDk0LjYyMjhWMzkuMTg2NVpNOTQuNjExMiAzOS4xODY1SDk0LjYyMjhWMzcuNjg2NUg5NC42MTEyVjM5LjE4NjVaTTk0LjU5OTUgMzkuMTg2NUg5NC42MTEyVjM3LjY4NjVIOTQuNTk5NVYzOS4xODY1Wk05NC41ODc5IDM5LjE4NjVIOTQuNTk5NVYzNy42ODY1SDk0LjU4NzlWMzkuMTg2NVpNOTQuNTc2MiAzOS4xODY1SDk0LjU4NzlWMzcuNjg2NUg5NC41NzYyVjM5LjE4NjVaTTk0LjU2NDUgMzkuMTg2NUg5NC41NzYyVjM3LjY4NjVIOTQuNTY0NVYzOS4xODY1Wk05NC41NTI4IDM5LjE4NjVIOTQuNTY0NVYzNy42ODY1SDk0LjU1MjhWMzkuMTg2NVpNOTQuNTQxMSAzOS4xODY1SDk0LjU1MjhWMzcuNjg2NUg5NC41NDExVjM5LjE4NjVaTTk0LjUyOTQgMzkuMTg2NUg5NC41NDExVjM3LjY4NjVIOTQuNTI5NFYzOS4xODY1Wk05NC41MTc2IDM5LjE4NjVIOTQuNTI5NFYzNy42ODY1SDk0LjUxNzZWMzkuMTg2NVpNOTQuNTA1OSAzOS4xODY1SDk0LjUxNzZWMzcuNjg2NUg5NC41MDU5VjM5LjE4NjVaTTk0LjQ5NDEgMzkuMTg2NUg5NC41MDU5VjM3LjY4NjVIOTQuNDk0MVYzOS4xODY1Wk05NC40ODIzIDM5LjE4NjVIOTQuNDk0MVYzNy42ODY1SDk0LjQ4MjNWMzkuMTg2NVpNOTQuNDcwNSAzOS4xODY1SDk0LjQ4MjNWMzcuNjg2NUg5NC40NzA1VjM5LjE4NjVaTTk0LjQ1ODcgMzkuMTg2NUg5NC40NzA1VjM3LjY4NjVIOTQuNDU4N1YzOS4xODY1Wk05NC40NDY5IDM5LjE4NjVIOTQuNDU4N1YzNy42ODY1SDk0LjQ0NjlWMzkuMTg2NVpNOTQuNDM1IDM5LjE4NjVIOTQuNDQ2OVYzNy42ODY1SDk0LjQzNVYzOS4xODY1Wk05NC40MjMxIDM5LjE4NjVIOTQuNDM1VjM3LjY4NjVIOTQuNDIzMVYzOS4xODY1Wk05NC40MTEzIDM5LjE4NjVIOTQuNDIzMVYzNy42ODY1SDk0LjQxMTNWMzkuMTg2NVpNOTQuMzk5NCAzOS4xODY1SDk0LjQxMTNWMzcuNjg2NUg5NC4zOTk0VjM5LjE4NjVaTTk0LjM4NzUgMzkuMTg2NUg5NC4zOTk0VjM3LjY4NjVIOTQuMzg3NVYzOS4xODY1Wk05NC4zNzU2IDM5LjE4NjVIOTQuMzg3NVYzNy42ODY1SDk0LjM3NTZWMzkuMTg2NVpNOTQuMzYzNiAzOS4xODY1SDk0LjM3NTZWMzcuNjg2NUg5NC4zNjM2VjM5LjE4NjVaTTk0LjM1MTcgMzkuMTg2NUg5NC4zNjM2VjM3LjY4NjVIOTQuMzUxN1YzOS4xODY1Wk05NC4zMzk3IDM5LjE4NjVIOTQuMzUxN1YzNy42ODY1SDk0LjMzOTdWMzkuMTg2NVpNOTQuMzI3NyAzOS4xODY1SDk0LjMzOTdWMzcuNjg2NUg5NC4zMjc3VjM5LjE4NjVaTTk0LjMxNTcgMzkuMTg2NUg5NC4zMjc3VjM3LjY4NjVIOTQuMzE1N1YzOS4xODY1Wk05NC4zMDM3IDM5LjE4NjVIOTQuMzE1N1YzNy42ODY1SDk0LjMwMzdWMzkuMTg2NVpNOTQuMjkxNyAzOS4xODY1SDk0LjMwMzdWMzcuNjg2NUg5NC4yOTE3VjM5LjE4NjVaTTk0LjI3OTYgMzkuMTg2NUg5NC4yOTE3VjM3LjY4NjVIOTQuMjc5NlYzOS4xODY1Wk05NC4yNjc2IDM5LjE4NjVIOTQuMjc5NlYzNy42ODY1SDk0LjI2NzZWMzkuMTg2NVpNOTQuMjU1NSAzOS4xODY1SDk0LjI2NzZWMzcuNjg2NUg5NC4yNTU1VjM5LjE4NjVaTTk0LjI0MzQgMzkuMTg2NUg5NC4yNTU1VjM3LjY4NjVIOTQuMjQzNFYzOS4xODY1Wk05NC4yMzEzIDM5LjE4NjVIOTQuMjQzNFYzNy42ODY1SDk0LjIzMTNWMzkuMTg2NVpNOTQuMjE5MiAzOS4xODY1SDk0LjIzMTNWMzcuNjg2NUg5NC4yMTkyVjM5LjE4NjVaTTk0LjIwNzEgMzkuMTg2NUg5NC4yMTkyVjM3LjY4NjVIOTQuMjA3MVYzOS4xODY1Wk05NC4xOTUgMzkuMTg2NUg5NC4yMDcxVjM3LjY4NjVIOTQuMTk1VjM5LjE4NjVaTTk0LjE4MjggMzkuMTg2NUg5NC4xOTVWMzcuNjg2NUg5NC4xODI4VjM5LjE4NjVaTTk0LjE3MDYgMzkuMTg2NUg5NC4xODI4VjM3LjY4NjVIOTQuMTcwNlYzOS4xODY1Wk05NC4xNTg0IDM5LjE4NjVIOTQuMTcwNlYzNy42ODY1SDk0LjE1ODRWMzkuMTg2NVpNOTQuMTQ2MiAzOS4xODY1SDk0LjE1ODRWMzcuNjg2NUg5NC4xNDYyVjM5LjE4NjVaTTk0LjEzNCAzOS4xODY1SDk0LjE0NjJWMzcuNjg2NUg5NC4xMzRWMzkuMTg2NVpNOTQuMTIxOCAzOS4xODY1SDk0LjEzNFYzNy42ODY1SDk0LjEyMThWMzkuMTg2NVpNOTQuMTA5NiAzOS4xODY1SDk0LjEyMThWMzcuNjg2NUg5NC4xMDk2VjM5LjE4NjVaTTk0LjA5NzMgMzkuMTg2NUg5NC4xMDk2VjM3LjY4NjVIOTQuMDk3M1YzOS4xODY1Wk05NC4wODUgMzkuMTg2NUg5NC4wOTczVjM3LjY4NjVIOTQuMDg1VjM5LjE4NjVaTTk0LjA3MjcgMzkuMTg2NUg5NC4wODVWMzcuNjg2NUg5NC4wNzI3VjM5LjE4NjVaTTk0LjA2MDQgMzkuMTg2NUg5NC4wNzI3VjM3LjY4NjVIOTQuMDYwNFYzOS4xODY1Wk05NC4wNDgxIDM5LjE4NjVIOTQuMDYwNFYzNy42ODY1SDk0LjA0ODFWMzkuMTg2NVpNOTQuMDM1OCAzOS4xODY1SDk0LjA0ODFWMzcuNjg2NUg5NC4wMzU4VjM5LjE4NjVaTTk0LjAyMzQgMzkuMTg2NUg5NC4wMzU4VjM3LjY4NjVIOTQuMDIzNFYzOS4xODY1Wk05NC4wMTExIDM5LjE4NjVIOTQuMDIzNFYzNy42ODY1SDk0LjAxMTFWMzkuMTg2NVpNOTMuOTk4NyAzOS4xODY1SDk0LjAxMTFWMzcuNjg2NUg5My45OTg3VjM5LjE4NjVaTTkzLjk4NjMgMzkuMTg2NUg5My45OTg3VjM3LjY4NjVIOTMuOTg2M1YzOS4xODY1Wk05My45NzM5IDM5LjE4NjVIOTMuOTg2M1YzNy42ODY1SDkzLjk3MzlWMzkuMTg2NVpNOTMuOTYxNSAzOS4xODY1SDkzLjk3MzlWMzcuNjg2NUg5My45NjE1VjM5LjE4NjVaTTkzLjk0OSAzOS4xODY1SDkzLjk2MTVWMzcuNjg2NUg5My45NDlWMzkuMTg2NVpNOTMuOTM2NiAzOS4xODY1SDkzLjk0OVYzNy42ODY1SDkzLjkzNjZWMzkuMTg2NVpNOTMuOTI0MSAzOS4xODY1SDkzLjkzNjZWMzcuNjg2NUg5My45MjQxVjM5LjE4NjVaTTkzLjkxMTYgMzkuMTg2NUg5My45MjQxVjM3LjY4NjVIOTMuOTExNlYzOS4xODY1Wk05My44OTkxIDM5LjE4NjVIOTMuOTExNlYzNy42ODY1SDkzLjg5OTFWMzkuMTg2NVpNOTMuODg2NiAzOS4xODY1SDkzLjg5OTFWMzcuNjg2NUg5My44ODY2VjM5LjE4NjVaTTkzLjg3NDEgMzkuMTg2NUg5My44ODY2VjM3LjY4NjVIOTMuODc0MVYzOS4xODY1Wk05My44NjE1IDM5LjE4NjVIOTMuODc0MVYzNy42ODY1SDkzLjg2MTVWMzkuMTg2NVpNOTMuODQ5IDM5LjE4NjVIOTMuODYxNVYzNy42ODY1SDkzLjg0OVYzOS4xODY1Wk05My44MzY0IDM5LjE4NjVIOTMuODQ5VjM3LjY4NjVIOTMuODM2NFYzOS4xODY1Wk05My44MjM4IDM5LjE4NjVIOTMuODM2NFYzNy42ODY1SDkzLjgyMzhWMzkuMTg2NVpNOTMuODExMiAzOS4xODY1SDkzLjgyMzhWMzcuNjg2NUg5My44MTEyVjM5LjE4NjVaTTkzLjc5ODYgMzkuMTg2NUg5My44MTEyVjM3LjY4NjVIOTMuNzk4NlYzOS4xODY1Wk05My43ODYgMzkuMTg2NUg5My43OTg2VjM3LjY4NjVIOTMuNzg2VjM5LjE4NjVaTTkzLjc3MzQgMzkuMTg2NUg5My43ODZWMzcuNjg2NUg5My43NzM0VjM5LjE4NjVaTTkzLjc2MDcgMzkuMTg2NUg5My43NzM0VjM3LjY4NjVIOTMuNzYwN1YzOS4xODY1Wk05My43NDggMzkuMTg2NUg5My43NjA3VjM3LjY4NjVIOTMuNzQ4VjM5LjE4NjVaTTkzLjczNTMgMzkuMTg2NUg5My43NDhWMzcuNjg2NUg5My43MzUzVjM5LjE4NjVaTTkzLjcyMjYgMzkuMTg2NUg5My43MzUzVjM3LjY4NjVIOTMuNzIyNlYzOS4xODY1Wk05My43MDk5IDM5LjE4NjVIOTMuNzIyNlYzNy42ODY1SDkzLjcwOTlWMzkuMTg2NVpNOTMuNjk3MiAzOS4xODY1SDkzLjcwOTlWMzcuNjg2NUg5My42OTcyVjM5LjE4NjVaTTkzLjY4NDQgMzkuMTg2NUg5My42OTcyVjM3LjY4NjVIOTMuNjg0NFYzOS4xODY1Wk05My42NzE3IDM5LjE4NjVIOTMuNjg0NFYzNy42ODY1SDkzLjY3MTdWMzkuMTg2NVpNOTMuNjU4OSAzOS4xODY1SDkzLjY3MTdWMzcuNjg2NUg5My42NTg5VjM5LjE4NjVaTTkzLjY0NjEgMzkuMTg2NUg5My42NTg5VjM3LjY4NjVIOTMuNjQ2MVYzOS4xODY1Wk05My42MzMzIDM5LjE4NjVIOTMuNjQ2MVYzNy42ODY1SDkzLjYzMzNWMzkuMTg2NVpNOTMuNjIwNSAzOS4xODY1SDkzLjYzMzNWMzcuNjg2NUg5My42MjA1VjM5LjE4NjVaTTkzLjYwNzcgMzkuMTg2NUg5My42MjA1VjM3LjY4NjVIOTMuNjA3N1YzOS4xODY1Wk05My41OTQ4IDM5LjE4NjVIOTMuNjA3N1YzNy42ODY1SDkzLjU5NDhWMzkuMTg2NVpNOTMuNTgxOSAzOS4xODY1SDkzLjU5NDhWMzcuNjg2NUg5My41ODE5VjM5LjE4NjVaTTkzLjU2OTEgMzkuMTg2NUg5My41ODE5VjM3LjY4NjVIOTMuNTY5MVYzOS4xODY1Wk05My41NTYyIDM5LjE4NjVIOTMuNTY5MVYzNy42ODY1SDkzLjU1NjJWMzkuMTg2NVpNOTMuNTQzMyAzOS4xODY1SDkzLjU1NjJWMzcuNjg2NUg5My41NDMzVjM5LjE4NjVaTTkzLjUzMDMgMzkuMTg2NUg5My41NDMzVjM3LjY4NjVIOTMuNTMwM1YzOS4xODY1Wk05My41MTc0IDM5LjE4NjVIOTMuNTMwM1YzNy42ODY1SDkzLjUxNzRWMzkuMTg2NVpNOTMuNTA0NCAzOS4xODY1SDkzLjUxNzRWMzcuNjg2NUg5My41MDQ0VjM5LjE4NjVaTTkzLjQ5MTUgMzkuMTg2NUg5My41MDQ0VjM3LjY4NjVIOTMuNDkxNVYzOS4xODY1Wk05My40Nzg1IDM5LjE4NjVIOTMuNDkxNVYzNy42ODY1SDkzLjQ3ODVWMzkuMTg2NVpNOTMuNDY1NSAzOS4xODY1SDkzLjQ3ODVWMzcuNjg2NUg5My40NjU1VjM5LjE4NjVaTTkzLjQ1MjUgMzkuMTg2NUg5My40NjU1VjM3LjY4NjVIOTMuNDUyNVYzOS4xODY1Wk05My40Mzk1IDM5LjE4NjVIOTMuNDUyNVYzNy42ODY1SDkzLjQzOTVWMzkuMTg2NVpNOTMuNDI2NCAzOS4xODY1SDkzLjQzOTVWMzcuNjg2NUg5My40MjY0VjM5LjE4NjVaTTkzLjQxMzQgMzkuMTg2NUg5My40MjY0VjM3LjY4NjVIOTMuNDEzNFYzOS4xODY1Wk05My40MDAzIDM5LjE4NjVIOTMuNDEzNFYzNy42ODY1SDkzLjQwMDNWMzkuMTg2NVpNOTMuMzg3MiAzOS4xODY1SDkzLjQwMDNWMzcuNjg2NUg5My4zODcyVjM5LjE4NjVaTTkzLjM3NDEgMzkuMTg2NUg5My4zODcyVjM3LjY4NjVIOTMuMzc0MVYzOS4xODY1Wk05My4zNjEgMzkuMTg2NUg5My4zNzQxVjM3LjY4NjVIOTMuMzYxVjM5LjE4NjVaTTkzLjM0NzkgMzkuMTg2NUg5My4zNjFWMzcuNjg2NUg5My4zNDc5VjM5LjE4NjVaTTkzLjMzNDcgMzkuMTg2NUg5My4zNDc5VjM3LjY4NjVIOTMuMzM0N1YzOS4xODY1Wk05My4zMjE2IDM5LjE4NjVIOTMuMzM0N1YzNy42ODY1SDkzLjMyMTZWMzkuMTg2NVpNOTMuMzA4NCAzOS4xODY1SDkzLjMyMTZWMzcuNjg2NUg5My4zMDg0VjM5LjE4NjVaTTkzLjI5NTIgMzkuMTg2NUg5My4zMDg0VjM3LjY4NjVIOTMuMjk1MlYzOS4xODY1Wk05My4yODIgMzkuMTg2NUg5My4yOTUyVjM3LjY4NjVIOTMuMjgyVjM5LjE4NjVaTTkzLjI2ODggMzkuMTg2NUg5My4yODJWMzcuNjg2NUg5My4yNjg4VjM5LjE4NjVaTTkzLjI1NTYgMzkuMTg2NUg5My4yNjg4VjM3LjY4NjVIOTMuMjU1NlYzOS4xODY1Wk05My4yNDIzIDM5LjE4NjVIOTMuMjU1NlYzNy42ODY1SDkzLjI0MjNWMzkuMTg2NVpNOTMuMjI5IDM5LjE4NjVIOTMuMjQyM1YzNy42ODY1SDkzLjIyOVYzOS4xODY1Wk05My4yMTU4IDM5LjE4NjVIOTMuMjI5VjM3LjY4NjVIOTMuMjE1OFYzOS4xODY1Wk05My4yMDI1IDM5LjE4NjVIOTMuMjE1OFYzNy42ODY1SDkzLjIwMjVWMzkuMTg2NVpNOTMuMTg5MiAzOS4xODY1SDkzLjIwMjVWMzcuNjg2NUg5My4xODkyVjM5LjE4NjVaTTkzLjE3NTkgMzkuMTg2NUg5My4xODkyVjM3LjY4NjVIOTMuMTc1OVYzOS4xODY1Wk05My4xNjI1IDM5LjE4NjVIOTMuMTc1OVYzNy42ODY1SDkzLjE2MjVWMzkuMTg2NVpNOTMuMTQ5MiAzOS4xODY1SDkzLjE2MjVWMzcuNjg2NUg5My4xNDkyVjM5LjE4NjVaTTkzLjEzNTggMzkuMTg2NUg5My4xNDkyVjM3LjY4NjVIOTMuMTM1OFYzOS4xODY1Wk05My4xMjI0IDM5LjE4NjVIOTMuMTM1OFYzNy42ODY1SDkzLjEyMjRWMzkuMTg2NVpNOTMuMTA5IDM5LjE4NjVIOTMuMTIyNFYzNy42ODY1SDkzLjEwOVYzOS4xODY1Wk05My4wOTU2IDM5LjE4NjVIOTMuMTA5VjM3LjY4NjVIOTMuMDk1NlYzOS4xODY1Wk05My4wODIyIDM5LjE4NjVIOTMuMDk1NlYzNy42ODY1SDkzLjA4MjJWMzkuMTg2NVpNOTMuMDY4OCAzOS4xODY1SDkzLjA4MjJWMzcuNjg2NUg5My4wNjg4VjM5LjE4NjVaTTkzLjA1NTMgMzkuMTg2NUg5My4wNjg4VjM3LjY4NjVIOTMuMDU1M1YzOS4xODY1Wk05My4wNDE4IDM5LjE4NjVIOTMuMDU1M1YzNy42ODY1SDkzLjA0MThWMzkuMTg2NVpNOTMuMDI4NCAzOS4xODY1SDkzLjA0MThWMzcuNjg2NUg5My4wMjg0VjM5LjE4NjVaTTkzLjAxNDkgMzkuMTg2NUg5My4wMjg0VjM3LjY4NjVIOTMuMDE0OVYzOS4xODY1Wk05My4wMDEzIDM5LjE4NjVIOTMuMDE0OVYzNy42ODY1SDkzLjAwMTNWMzkuMTg2NVpNOTIuOTg3OCAzOS4xODY1SDkzLjAwMTNWMzcuNjg2NUg5Mi45ODc4VjM5LjE4NjVaTTkyLjk3NDMgMzkuMTg2NUg5Mi45ODc4VjM3LjY4NjVIOTIuOTc0M1YzOS4xODY1Wk05Mi45NjA3IDM5LjE4NjVIOTIuOTc0M1YzNy42ODY1SDkyLjk2MDdWMzkuMTg2NVpNOTIuOTQ3MiAzOS4xODY1SDkyLjk2MDdWMzcuNjg2NUg5Mi45NDcyVjM5LjE4NjVaTTkyLjkzMzYgMzkuMTg2NUg5Mi45NDcyVjM3LjY4NjVIOTIuOTMzNlYzOS4xODY1Wk05Mi45MiAzOS4xODY1SDkyLjkzMzZWMzcuNjg2NUg5Mi45MlYzOS4xODY1Wk05Mi45MDY0IDM5LjE4NjVIOTIuOTJWMzcuNjg2NUg5Mi45MDY0VjM5LjE4NjVaTTkyLjg5MjcgMzkuMTg2NUg5Mi45MDY0VjM3LjY4NjVIOTIuODkyN1YzOS4xODY1Wk05Mi44NzkxIDM5LjE4NjVIOTIuODkyN1YzNy42ODY1SDkyLjg3OTFWMzkuMTg2NVpNOTIuODY1NCAzOS4xODY1SDkyLjg3OTFWMzcuNjg2NUg5Mi44NjU0VjM5LjE4NjVaTTkyLjg1MTcgMzkuMTg2NUg5Mi44NjU0VjM3LjY4NjVIOTIuODUxN1YzOS4xODY1Wk05Mi44MzgxIDM5LjE4NjVIOTIuODUxN1YzNy42ODY1SDkyLjgzODFWMzkuMTg2NVpNOTIuODI0NCAzOS4xODY1SDkyLjgzODFWMzcuNjg2NUg5Mi44MjQ0VjM5LjE4NjVaTTkyLjgxMDYgMzkuMTg2NUg5Mi44MjQ0VjM3LjY4NjVIOTIuODEwNlYzOS4xODY1Wk05Mi43OTY5IDM5LjE4NjVIOTIuODEwNlYzNy42ODY1SDkyLjc5NjlWMzkuMTg2NVpNOTIuNzgzMiAzOS4xODY1SDkyLjc5NjlWMzcuNjg2NUg5Mi43ODMyVjM5LjE4NjVaTTkyLjc2OTQgMzkuMTg2NUg5Mi43ODMyVjM3LjY4NjVIOTIuNzY5NFYzOS4xODY1Wk05Mi43NTU2IDM5LjE4NjVIOTIuNzY5NFYzNy42ODY1SDkyLjc1NTZWMzkuMTg2NVpNOTIuNzQxOCAzOS4xODY1SDkyLjc1NTZWMzcuNjg2NUg5Mi43NDE4VjM5LjE4NjVaTTkyLjcyOCAzOS4xODY1SDkyLjc0MThWMzcuNjg2NUg5Mi43MjhWMzkuMTg2NVpNOTIuNzE0MiAzOS4xODY1SDkyLjcyOFYzNy42ODY1SDkyLjcxNDJWMzkuMTg2NVpNOTIuNzAwNCAzOS4xODY1SDkyLjcxNDJWMzcuNjg2NUg5Mi43MDA0VjM5LjE4NjVaTTkyLjY4NjUgMzkuMTg2NUg5Mi43MDA0VjM3LjY4NjVIOTIuNjg2NVYzOS4xODY1Wk05Mi42NzI2IDM5LjE4NjVIOTIuNjg2NVYzNy42ODY1SDkyLjY3MjZWMzkuMTg2NVpNOTIuNjU4OCAzOS4xODY1SDkyLjY3MjZWMzcuNjg2NUg5Mi42NTg4VjM5LjE4NjVaTTkyLjY0NDkgMzkuMTg2NUg5Mi42NTg4VjM3LjY4NjVIOTIuNjQ0OVYzOS4xODY1Wk05Mi42MzEgMzkuMTg2NUg5Mi42NDQ5VjM3LjY4NjVIOTIuNjMxVjM5LjE4NjVaTTkyLjYxNyAzOS4xODY1SDkyLjYzMVYzNy42ODY1SDkyLjYxN1YzOS4xODY1Wk05Mi42MDMxIDM5LjE4NjVIOTIuNjE3VjM3LjY4NjVIOTIuNjAzMVYzOS4xODY1Wk05Mi41ODkxIDM5LjE4NjVIOTIuNjAzMVYzNy42ODY1SDkyLjU4OTFWMzkuMTg2NVpNOTIuNTc1MiAzOS4xODY1SDkyLjU4OTFWMzcuNjg2NUg5Mi41NzUyVjM5LjE4NjVaTTkyLjU2MTIgMzkuMTg2NUg5Mi41NzUyVjM3LjY4NjVIOTIuNTYxMlYzOS4xODY1Wk05Mi41NDcyIDM5LjE4NjVIOTIuNTYxMlYzNy42ODY1SDkyLjU0NzJWMzkuMTg2NVpNOTIuNTMzMiAzOS4xODY1SDkyLjU0NzJWMzcuNjg2NUg5Mi41MzMyVjM5LjE4NjVaTTkyLjUxOTIgMzkuMTg2NUg5Mi41MzMyVjM3LjY4NjVIOTIuNTE5MlYzOS4xODY1Wk05Mi41MDUxIDM5LjE4NjVIOTIuNTE5MlYzNy42ODY1SDkyLjUwNTFWMzkuMTg2NVpNOTIuNDkxMSAzOS4xODY1SDkyLjUwNTFWMzcuNjg2NUg5Mi40OTExVjM5LjE4NjVaTTkyLjQ3NyAzOS4xODY1SDkyLjQ5MTFWMzcuNjg2NUg5Mi40NzdWMzkuMTg2NVpNOTIuNDYyOSAzOS4xODY1SDkyLjQ3N1YzNy42ODY1SDkyLjQ2MjlWMzkuMTg2NVpNOTIuNDQ4OCAzOS4xODY1SDkyLjQ2MjlWMzcuNjg2NUg5Mi40NDg4VjM5LjE4NjVaTTkyLjQzNDcgMzkuMTg2NUg5Mi40NDg4VjM3LjY4NjVIOTIuNDM0N1YzOS4xODY1Wk05Mi40MjA1IDM5LjE4NjVIOTIuNDM0N1YzNy42ODY1SDkyLjQyMDVWMzkuMTg2NVpNOTIuNDA2NCAzOS4xODY1SDkyLjQyMDVWMzcuNjg2NUg5Mi40MDY0VjM5LjE4NjVaTTkyLjM5MjIgMzkuMTg2NUg5Mi40MDY0VjM3LjY4NjVIOTIuMzkyMlYzOS4xODY1Wk05Mi4zNzgxIDM5LjE4NjVIOTIuMzkyMlYzNy42ODY1SDkyLjM3ODFWMzkuMTg2NVpNOTIuMzYzOSAzOS4xODY1SDkyLjM3ODFWMzcuNjg2NUg5Mi4zNjM5VjM5LjE4NjVaTTkyLjM0OTcgMzkuMTg2NUg5Mi4zNjM5VjM3LjY4NjVIOTIuMzQ5N1YzOS4xODY1Wk05Mi4zMzU1IDM5LjE4NjVIOTIuMzQ5N1YzNy42ODY1SDkyLjMzNTVWMzkuMTg2NVpNOTIuMzIxMiAzOS4xODY1SDkyLjMzNTVWMzcuNjg2NUg5Mi4zMjEyVjM5LjE4NjVaTTkyLjMwNyAzOS4xODY1SDkyLjMyMTJWMzcuNjg2NUg5Mi4zMDdWMzkuMTg2NVpNOTIuMjkyNyAzOS4xODY1SDkyLjMwN1YzNy42ODY1SDkyLjI5MjdWMzkuMTg2NVpNOTIuMjc4NCAzOS4xODY1SDkyLjI5MjdWMzcuNjg2NUg5Mi4yNzg0VjM5LjE4NjVaTTkyLjI2NDEgMzkuMTg2NUg5Mi4yNzg0VjM3LjY4NjVIOTIuMjY0MVYzOS4xODY1Wk05Mi4yNDk4IDM5LjE4NjVIOTIuMjY0MVYzNy42ODY1SDkyLjI0OThWMzkuMTg2NVpNOTIuMjM1NSAzOS4xODY1SDkyLjI0OThWMzcuNjg2NUg5Mi4yMzU1VjM5LjE4NjVaTTkyLjIyMTIgMzkuMTg2NUg5Mi4yMzU1VjM3LjY4NjVIOTIuMjIxMlYzOS4xODY1Wk05Mi4yMDY4IDM5LjE4NjVIOTIuMjIxMlYzNy42ODY1SDkyLjIwNjhWMzkuMTg2NVpNOTIuMTkyNSAzOS4xODY1SDkyLjIwNjhWMzcuNjg2NUg5Mi4xOTI1VjM5LjE4NjVaTTkyLjE3ODEgMzkuMTg2NUg5Mi4xOTI1VjM3LjY4NjVIOTIuMTc4MVYzOS4xODY1Wk05Mi4xNjM3IDM5LjE4NjVIOTIuMTc4MVYzNy42ODY1SDkyLjE2MzdWMzkuMTg2NVpNOTIuMTQ5MyAzOS4xODY1SDkyLjE2MzdWMzcuNjg2NUg5Mi4xNDkzVjM5LjE4NjVaTTkyLjEzNDggMzkuMTg2NUg5Mi4xNDkzVjM3LjY4NjVIOTIuMTM0OFYzOS4xODY1Wk05Mi4xMjA0IDM5LjE4NjVIOTIuMTM0OFYzNy42ODY1SDkyLjEyMDRWMzkuMTg2NVpNOTIuMTA1OSAzOS4xODY1SDkyLjEyMDRWMzcuNjg2NUg5Mi4xMDU5VjM5LjE4NjVaTTkyLjA5MTUgMzkuMTg2NUg5Mi4xMDU5VjM3LjY4NjVIOTIuMDkxNVYzOS4xODY1Wk05Mi4wNzcgMzkuMTg2NUg5Mi4wOTE1VjM3LjY4NjVIOTIuMDc3VjM5LjE4NjVaTTkyLjA2MjUgMzkuMTg2NUg5Mi4wNzdWMzcuNjg2NUg5Mi4wNjI1VjM5LjE4NjVaTTkyLjA0OCAzOS4xODY1SDkyLjA2MjVWMzcuNjg2NUg5Mi4wNDhWMzkuMTg2NVpNOTIuMDMzNSAzOS4xODY1SDkyLjA0OFYzNy42ODY1SDkyLjAzMzVWMzkuMTg2NVpNOTIuMDE4OSAzOS4xODY1SDkyLjAzMzVWMzcuNjg2NUg5Mi4wMTg5VjM5LjE4NjVaTTkyLjAwNDQgMzkuMTg2NUg5Mi4wMTg5VjM3LjY4NjVIOTIuMDA0NFYzOS4xODY1Wk05MS45ODk4IDM5LjE4NjVIOTIuMDA0NFYzNy42ODY1SDkxLjk4OThWMzkuMTg2NVpNOTEuOTc1MiAzOS4xODY1SDkxLjk4OThWMzcuNjg2NUg5MS45NzUyVjM5LjE4NjVaTTkxLjk2MDYgMzkuMTg2NUg5MS45NzUyVjM3LjY4NjVIOTEuOTYwNlYzOS4xODY1Wk05MS45NDYgMzkuMTg2NUg5MS45NjA2VjM3LjY4NjVIOTEuOTQ2VjM5LjE4NjVaTTkxLjkzMTMgMzkuMTg2NUg5MS45NDZWMzcuNjg2NUg5MS45MzEzVjM5LjE4NjVaTTkxLjkxNjcgMzkuMTg2NUg5MS45MzEzVjM3LjY4NjVIOTEuOTE2N1YzOS4xODY1Wk05MS45MDIgMzkuMTg2NUg5MS45MTY3VjM3LjY4NjVIOTEuOTAyVjM5LjE4NjVaTTkxLjg4NzQgMzkuMTg2NUg5MS45MDJWMzcuNjg2NUg5MS44ODc0VjM5LjE4NjVaTTkxLjg3MjcgMzkuMTg2NUg5MS44ODc0VjM3LjY4NjVIOTEuODcyN1YzOS4xODY1Wk05MS44NTggMzkuMTg2NUg5MS44NzI3VjM3LjY4NjVIOTEuODU4VjM5LjE4NjVaTTkxLjg0MzIgMzkuMTg2NUg5MS44NThWMzcuNjg2NUg5MS44NDMyVjM5LjE4NjVaTTkxLjgyODUgMzkuMTg2NUg5MS44NDMyVjM3LjY4NjVIOTEuODI4NVYzOS4xODY1Wk05MS44MTM4IDM5LjE4NjVIOTEuODI4NVYzNy42ODY1SDkxLjgxMzhWMzkuMTg2NVpNOTEuNzk5IDM5LjE4NjVIOTEuODEzOFYzNy42ODY1SDkxLjc5OVYzOS4xODY1Wk05MS43ODQyIDM5LjE4NjVIOTEuNzk5VjM3LjY4NjVIOTEuNzg0MlYzOS4xODY1Wk05MS43Njk0IDM5LjE4NjVIOTEuNzg0MlYzNy42ODY1SDkxLjc2OTRWMzkuMTg2NVpNOTEuNzU0NiAzOS4xODY1SDkxLjc2OTRWMzcuNjg2NUg5MS43NTQ2VjM5LjE4NjVaTTkxLjczOTggMzkuMTg2NUg5MS43NTQ2VjM3LjY4NjVIOTEuNzM5OFYzOS4xODY1Wk05MS43MjUgMzkuMTg2NUg5MS43Mzk4VjM3LjY4NjVIOTEuNzI1VjM5LjE4NjVaTTkxLjcxMDEgMzkuMTg2NUg5MS43MjVWMzcuNjg2NUg5MS43MTAxVjM5LjE4NjVaTTkxLjY5NTIgMzkuMTg2NUg5MS43MTAxVjM3LjY4NjVIOTEuNjk1MlYzOS4xODY1Wk05MS42ODA0IDM5LjE4NjVIOTEuNjk1MlYzNy42ODY1SDkxLjY4MDRWMzkuMTg2NVpNOTEuNjY1NSAzOS4xODY1SDkxLjY4MDRWMzcuNjg2NUg5MS42NjU1VjM5LjE4NjVaTTkxLjY1MDYgMzkuMTg2NUg5MS42NjU1VjM3LjY4NjVIOTEuNjUwNlYzOS4xODY1Wk05MS42MzU2IDM5LjE4NjVIOTEuNjUwNlYzNy42ODY1SDkxLjYzNTZWMzkuMTg2NVpNOTEuNjIwNyAzOS4xODY1SDkxLjYzNTZWMzcuNjg2NUg5MS42MjA3VjM5LjE4NjVaTTkxLjYwNTcgMzkuMTg2NUg5MS42MjA3VjM3LjY4NjVIOTEuNjA1N1YzOS4xODY1Wk05MS41OTA4IDM5LjE4NjVIOTEuNjA1N1YzNy42ODY1SDkxLjU5MDhWMzkuMTg2NVpNOTEuNTc1OCAzOS4xODY1SDkxLjU5MDhWMzcuNjg2NUg5MS41NzU4VjM5LjE4NjVaTTkxLjU2MDggMzkuMTg2NUg5MS41NzU4VjM3LjY4NjVIOTEuNTYwOFYzOS4xODY1Wk05MS41NDU4IDM5LjE4NjVIOTEuNTYwOFYzNy42ODY1SDkxLjU0NThWMzkuMTg2NVpNOTEuNTMwNyAzOS4xODY1SDkxLjU0NThWMzcuNjg2NUg5MS41MzA3VjM5LjE4NjVaTTkxLjUxNTcgMzkuMTg2NUg5MS41MzA3VjM3LjY4NjVIOTEuNTE1N1YzOS4xODY1Wk05MS41MDA2IDM5LjE4NjVIOTEuNTE1N1YzNy42ODY1SDkxLjUwMDZWMzkuMTg2NVpNOTEuNDg1NiAzOS4xODY1SDkxLjUwMDZWMzcuNjg2NUg5MS40ODU2VjM5LjE4NjVaTTg5LjEzMTIgNDAuODQ1N0M4OS40ODY2IDM5Ljg1MDcgOTAuNDI5IDM5LjE4NjUgOTEuNDg1NiAzOS4xODY1VjM3LjY4NjVDODkuNzk1MSAzNy42ODY1IDg4LjI4NzIgMzguNzQ5MiA4Ny43MTg2IDQwLjM0MTJMODkuMTMxMiA0MC44NDU3Wk04OC4wMzg4IDQzLjkwNDNMODkuMTMxMiA0MC44NDU3TDg3LjcxODYgNDAuMzQxMkw4Ni42MjYyIDQzLjM5OThMODguMDM4OCA0My45MDQzWk04Ny4yNTg2IDQ2LjA4OTFMODguMDM4OCA0My45MDQzTDg2LjYyNjIgNDMuMzk5OEw4NS44NDYgNDUuNTg0Nkw4Ny4yNTg2IDQ2LjA4OTFaTTg0Ljg4NzQgNDYuMDM4Nkw4Ni4zIDQ2LjU0MzFMODYuODA0NSA0NS4xMzA1TDg1LjM5MTkgNDQuNjI2TDg0Ljg4NzQgNDYuMDM4NlpNODUuMjEzNiA0Mi44OTUzTDg0LjQzMzMgNDUuMDgwMUw4NS44NDYgNDUuNTg0Nkw4Ni42MjYyIDQzLjM5OThMODUuMjEzNiA0Mi44OTUzWk04Ni4zMDYgMzkuODM2N0w4NS4yMTM2IDQyLjg5NTNMODYuNjI2MiA0My4zOTk4TDg3LjcxODYgNDAuMzQxMkw4Ni4zMDYgMzkuODM2N1pcIixcbiAgZmlsbDogXCIjM0IzNTUyXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgZDogXCJNMTIyLjQ5MiA0Ni4yOTUzQzEyMi43MjUgNDUuNjQ0MSAxMjIuMjQyIDQ0Ljk1OSAxMjEuNTUxIDQ0Ljk1OUw5NC44NTg1IDQ0Ljk1OUM5NC40MzU5IDQ0Ljk1OSA5NC4wNTg5IDQ1LjIyNDcgOTMuOTE2OCA0NS42MjI2TDg4LjU5ODUgNjAuNTEzOEM4OC4zNjU5IDYxLjE2NSA4OC44NDg3IDYxLjg1MDEgODkuNTQwMiA2MS44NTAxSDExNi4yMzJDMTE2LjY1NSA2MS44NTAxIDExNy4wMzIgNjEuNTg0NCAxMTcuMTc0IDYxLjE4NjVMMTIyLjQ5MiA0Ni4yOTUzWlwiLFxuICBmaWxsOiBcIiMzMDQwRDZcIixcbiAgZmlsbE9wYWNpdHk6IFwiMC4wNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTI5LjUwNzUgNDYuMjk1M0MyOS4yNzQ5IDQ1LjY0NDEgMjkuNzU3NyA0NC45NTkgMzAuNDQ5MyA0NC45NTlMNTcuMTQxNSA0NC45NTlDNTcuNTY0MSA0NC45NTkgNTcuOTQxMSA0NS4yMjQ3IDU4LjA4MzIgNDUuNjIyNkw2My40MDE1IDYwLjUxMzhDNjMuNjM0MSA2MS4xNjUgNjMuMTUxMyA2MS44NTAxIDYyLjQ1OTggNjEuODUwMUgzNS43Njc1QzM1LjM0NDkgNjEuODUwMSAzNC45Njc5IDYxLjU4NDQgMzQuODI1OCA2MS4xODY1TDI5LjUwNzUgNDYuMjk1M1pcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMDVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTMzLjU3NjIgNjMuODk4NEgxMTguNDI1VjExNC40NDRDMTE4LjQyNSAxMTYuNjUzIDExNi42MzQgMTE4LjQ0NCAxMTQuNDI1IDExOC40NDRIMzcuNTc2MkMzNS4zNjcgMTE4LjQ0NCAzMy41NzYyIDExNi42NTMgMzMuNTc2MiAxMTQuNDQ0VjYzLjg5ODRaXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICB4OiBcIjM1Ljg0ODZcIixcbiAgeTogXCI2Ni4xNzE5XCIsXG4gIHdpZHRoOiBcIjI4Ljc4NzlcIixcbiAgaGVpZ2h0OiBcIjUwXCIsXG4gIHJ4OiBcIjFcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMDVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTQwLjUgNzEuNDk5N1Y4MS40OTk3XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk00MC41IDg1LjQwODhWODkuOTU0MlwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgeDogXCI4Ny4zNjMzXCIsXG4gIHk6IFwiNjYuMTcxOVwiLFxuICB3aWR0aDogXCIxMC42MDYxXCIsXG4gIGhlaWdodDogXCI1MFwiLFxuICByeDogXCIxXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNjYuOTA5MSA2NC4yOTk4VjExOC4wNDNcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk01NC41IDEyNS41SDcxLjVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTc2LjE5NDQgMTI1LjVIODIuODA1NlwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSk7XG5leHBvcnQgZGVmYXVsdCBCb3g7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBjb25zdCBDYWxlbmRhciA9ICh7XG4gIHdpZHRoID0gMTUyLFxuICBoZWlnaHQgPSAxNTJcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgd2lkdGg6IHdpZHRoLFxuICBoZWlnaHQ6IGhlaWdodCxcbiAgdmlld0JveDogXCIwIDAgMTUyIDE1MlwiLFxuICBmaWxsOiBcIm5vbmVcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCI3NlwiLFxuICBjeTogXCI3NlwiLFxuICByOiBcIjc2XCIsXG4gIGZpbGw6IFwid2hpdGVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gIHg6IFwiNDYuNTI3OFwiLFxuICB5OiBcIjMyLjAxNjZcIixcbiAgd2lkdGg6IFwiNjguNzIyMlwiLFxuICBoZWlnaHQ6IFwiODMuNjQ0NFwiLFxuICByeDogXCIzLjI1XCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICB4OiBcIjQ5LjI4OTFcIixcbiAgeTogXCIzNC43NzczXCIsXG4gIHdpZHRoOiBcIjYzLjJcIixcbiAgaGVpZ2h0OiBcIjc4LjEyMjJcIixcbiAgcng6IFwiMlwiLFxuICBmaWxsOiBcIiMzMDQwRDZcIixcbiAgZmlsbE9wYWNpdHk6IFwiMC4wNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgeDogXCIzNy43NVwiLFxuICB5OiBcIjM4LjE2MTFcIixcbiAgd2lkdGg6IFwiNjguNzIyMlwiLFxuICBoZWlnaHQ6IFwiODMuNjQ0NFwiLFxuICByeDogXCIzLjI1XCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk02OS40Nzc1IDYzLjMwNTFIOTMuMTc3NVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNjkuNDc3NSA2OC41NzI3SDgyLjY0NDJcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gIHg6IFwiNTEuMDQ0NFwiLFxuICB5OiBcIjYwLjIzMzRcIixcbiAgd2lkdGg6IFwiMTEuNDExMVwiLFxuICBoZWlnaHQ6IFwiMTEuNDExMVwiLFxuICByeDogXCIyXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNjkuNDc3NSA4Ny4wMDUzSDkzLjE3NzVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTY5LjQ3NzUgOTIuMjcxOUg4Mi42NDQyXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICB4OiBcIjUxLjA0NDRcIixcbiAgeTogXCI4My45MzM2XCIsXG4gIHdpZHRoOiBcIjExLjQxMTFcIixcbiAgaGVpZ2h0OiBcIjExLjQxMTFcIixcbiAgcng6IFwiMlwiLFxuICBmaWxsOiBcIiMzMDQwRDZcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTY4LjE2MzIgMzEuNjY3OUM2Ny4wNDk3IDI4LjM3MjUgNjMuOTMyNSAyNiA2MC4yNjEzIDI2QzU1LjY1NTggMjYgNTEuOTIyNCAyOS43MzM0IDUxLjkyMjQgMzQuMzM4OUM1MS45MjI0IDM4Ljk0NDMgNTUuNjU1OCA0Mi42Nzc4IDYwLjI2MTMgNDIuNjc3OFwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNOTIuNzc3NyAzMS43Nzk2QzkxLjY5NzUgMjguNDI2MiA4OC41NTE1IDI2IDg0LjgzODkgMjZDODAuMjMzNCAyNiA3Ni41IDI5LjczMzQgNzYuNSAzNC4zMzg5Qzc2LjUgMzguOTQ0MyA4MC4yMzM0IDQyLjY3NzggODQuODM4OSA0Mi42Nzc4XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0zMS41IDczVjkyXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0zMS41IDk3VjEwNVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSk7XG5leHBvcnQgZGVmYXVsdCBDYWxlbmRhcjsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGNvbnN0IENhbmNlbCA9ICh7XG4gIHdpZHRoID0gMTUyLFxuICBoZWlnaHQgPSAxNTJcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgd2lkdGg6IHdpZHRoLFxuICBoZWlnaHQ6IGhlaWdodCxcbiAgdmlld0JveDogXCIwIDAgMTUyIDE1MlwiLFxuICBmaWxsOiBcIm5vbmVcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCI3NlwiLFxuICBjeTogXCI3NlwiLFxuICByOiBcIjc2XCIsXG4gIGZpbGw6IFwid2hpdGVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiMTA2LjU1MlwiLFxuICBjeTogXCI1NC40NDgzXCIsXG4gIHI6IFwiMTcuNDQ4M1wiLFxuICBmaWxsOiBcIiMzMDQwRDZcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiNzUuNDQ4M1wiLFxuICBjeTogXCI3Ni40NDgzXCIsXG4gIHI6IFwiMzkuNDQ4M1wiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTk0LjQ1NjYgNTUuMzk0MkM5My45NTI0IDUyLjU4NzYgOTcuMTM1NSA1MC41NTgyIDk5LjIyMzMgNTIuNTAwNUMxMDEuMTg5IDU0LjMyOTEgMTAzLjEwOCA1Ni4zMzEgMTA0LjIxMSA1OC4wNTE4QzEwNy42MTMgNjMuMzYwOSAxMDkuNTg2IDY5LjY3NCAxMDkuNTg2IDc2LjQ0OEMxMDkuNTg2IDk1LjMwMTggOTQuMzAyMiAxMTAuNTg2IDc1LjQ0ODQgMTEwLjU4NkM3Mi4xODU4IDExMC41ODYgNjcuOTIzNyAxMDkuMzQ5IDY0LjIwNDIgMTA3Ljk3OUM2MS40ODU4IDEwNi45NzggNjEuOTQzOCAxMDMuMTk5IDY0Ljc0NTUgMTAyLjQ2M0M2Ni42MTUzIDEwMS45NzEgNjguNDE0NCAxMDEuNDE1IDY5LjcyNDMgMTAwLjgzMkM4NC43MTg4IDk0LjE1NjYgOTUuMTcyNSA3OS4xMjY1IDk1LjE3MjUgNjEuNjU0OUM5NS4xNzI1IDU5Ljk0MDMgOTQuODYyNiA1Ny42NTM5IDk0LjQ1NjYgNTUuMzk0MlpcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMDVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk04OS45ODE3IDYxLjkxNTFDOTEuODQ1IDYzLjc3ODQgOTEuODQ1IDY2Ljc5OTUgODkuOTgxNyA2OC42NjI4TDgyLjE5NjQgNzYuNDQ4MUw4OS45ODE3IDg0LjIzNDRDOTEuODQ1IDg2LjA5NzggOTEuODQ1IDg5LjExODggODkuOTgxNyA5MC45ODIxQzg4LjExODMgOTIuODQ1NSA4NS4wOTczIDkyLjg0NTUgODMuMjMzOSA5MC45ODIxTDc1LjQ0ODYgODMuMTk1OEw2Ny42NjIzIDkwLjk4MjFDNjUuNzk5IDkyLjg0NTUgNjIuNzc3OSA5Mi44NDU1IDYwLjkxNDYgOTAuOTgyMUM1OS4wNTEzIDg5LjExODggNTkuMDUxMyA4Ni4wOTc4IDYwLjkxNDYgODQuMjM0NEw2OC43MDA5IDc2LjQ0ODFMNjAuOTE0NiA2OC42NjI4QzU5LjA1MTMgNjYuNzk5NSA1OS4wNTEzIDYzLjc3ODQgNjAuOTE0NiA2MS45MTUxQzYyLjc3NzkgNjAuMDUxNyA2NS43OTkgNjAuMDUxNyA2Ny42NjIzIDYxLjkxNTFMNzUuNDQ4NiA2OS43MDA0TDgzLjIzMzkgNjEuOTE1MUM4NS4wOTczIDYwLjA1MTcgODguMTE4MyA2MC4wNTE3IDg5Ljk4MTcgNjEuOTE1MVpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTkxLjMxNTIgMTAxLjkzN0w5MC42Nzg2IDEwMi4zMzNMOTEuMDc1MiAxMDIuOTdMOTEuNzExOCAxMDIuNTczTDkxLjMxNTIgMTAxLjkzN1pNOTguNzMyNiA5NS40MjEyTDk5LjMxMjYgOTUuODk2N0w5OS43ODgxIDk1LjMxNjdMOTkuMjA4MSA5NC44NDEyTDk4LjczMjYgOTUuNDIxMlpNOTAuNTIyIDEwMC42NjRMOTAuMTI1NCAxMDAuMDI3TDg5LjQ4ODggMTAwLjQyNEw4OS44ODU0IDEwMS4wNkw5MC41MjIgMTAwLjY2NFpNOTcuNTcyNiA5NC40NzAyTDk4LjA0ODEgOTMuODkwMkw5Ny40NjgxIDkzLjQxNDdMOTYuOTkyNiA5My45OTQ3TDk3LjU3MjYgOTQuNDcwMlpNMTA0LjExNSA4NS41NjExTDEwNC44MjkgODUuNzkxMlY4NS43OTEyTDEwNC4xMTUgODUuNTYxMVpNMTA1LjU2NiA3Ni4yODgxSDEwNi4zMTZWNzUuNTM4MUgxMDUuNTY2Vjc2LjI4ODFaTTEwMS4zNTQgOTEuNjc5OUwxMDAuOTcyIDkyLjMyNDlMMTAxLjYxNyA5Mi43MDc3TDEwMS45OTkgOTIuMDYyN0wxMDEuMzU0IDkxLjY3OTlaTTEwMC4wNjUgOTAuOTE0M0w5OS40MTk2IDkwLjUzMTVMOTkuMDM2OCA5MS4xNzY1TDk5LjY4MTcgOTEuNTU5M0wxMDAuMDY1IDkwLjkxNDNaTTEwMi42ODggODUuMTAwOUwxMDEuOTc0IDg0Ljg3MDhMMTAyLjY4OCA4NS4xMDA5Wk0xMDQuMDY2IDc2LjI4ODFWNzUuNTM4MUgxMDMuMzE2Vjc2LjI4ODFIMTA0LjA2NlpNOTEuNzExOCAxMDIuNTczQzk0LjU5OCAxMDAuNzc1IDk3LjE2NTkgOTguNTE1MSA5OS4zMTI2IDk1Ljg5NjdMOTguMTUyNiA5NC45NDU3Qzk2LjEwOTMgOTcuNDM4IDkzLjY2NTEgOTkuNTg5IDkwLjkxODYgMTAxLjNMOTEuNzExOCAxMDIuNTczWk04OS44ODU0IDEwMS4wNkw5MC42Nzg2IDEwMi4zMzNMOTEuOTUxNyAxMDEuNTRMOTEuMTU4NSAxMDAuMjY3TDg5Ljg4NTQgMTAxLjA2Wk05Ni45OTI2IDkzLjk5NDdDOTUuMDUyNyA5Ni4zNjA5IDkyLjczMjMgOTguNDAyOSA5MC4xMjU0IDEwMC4wMjdMOTAuOTE4NiAxMDEuM0M5My42NjUxIDk5LjU4OSA5Ni4xMDkzIDk3LjQzOCA5OC4xNTI2IDk0Ljk0NTdMOTYuOTkyNiA5My45OTQ3Wk05OS4yMDgxIDk0Ljg0MTJMOTguMDQ4MSA5My44OTAyTDk3LjA5NzEgOTUuMDUwMkw5OC4yNTcxIDk2LjAwMTJMOTkuMjA4MSA5NC44NDEyWk0xMDQuODI5IDg1Ljc5MTJDMTA1Ljc5NSA4Mi43OTUgMTA2LjMxNiA3OS42MDA5IDEwNi4zMTYgNzYuMjg4MUgxMDQuODE2QzEwNC44MTYgNzkuNDQyOCAxMDQuMzIgODIuNDgxNyAxMDMuNDAyIDg1LjMzMUwxMDQuODI5IDg1Ljc5MTJaTTEwMS45OTkgOTIuMDYyN0MxMDMuMTYzIDkwLjEwMTggMTA0LjExNyA4OC4wMDA5IDEwNC44MjkgODUuNzkxMkwxMDMuNDAyIDg1LjMzMUMxMDIuNzI0IDg3LjQzMjcgMTAxLjgxNyA4OS40MzEzIDEwMC43MDkgOTEuMjk3MUwxMDEuOTk5IDkyLjA2MjdaTTk5LjY4MTcgOTEuNTU5M0wxMDAuOTcyIDkyLjMyNDlMMTAxLjczNyA5MS4wMzVMMTAwLjQ0NyA5MC4yNjk0TDk5LjY4MTcgOTEuNTU5M1pNMTAxLjk3NCA4NC44NzA4QzEwMS4zMzEgODYuODY0NiAxMDAuNDcxIDg4Ljc2MDggOTkuNDE5NiA5MC41MzE1TDEwMC43MDkgOTEuMjk3MUMxMDEuODE3IDg5LjQzMTMgMTAyLjcyNCA4Ny40MzI3IDEwMy40MDIgODUuMzMxTDEwMS45NzQgODQuODcwOFpNMTAzLjMxNiA3Ni4yODgxQzEwMy4zMTYgNzkuMjg0NyAxMDIuODQ1IDgyLjE2ODQgMTAxLjk3NCA4NC44NzA4TDEwMy40MDIgODUuMzMxQzEwNC4zMiA4Mi40ODE3IDEwNC44MTYgNzkuNDQyOCAxMDQuODE2IDc2LjI4ODFIMTAzLjMxNlpNMTA1LjU2NiA3NS41MzgxSDEwNC4wNjZWNzcuMDM4MUgxMDUuNTY2Vjc1LjUzODFaXCIsXG4gIGZpbGw6IFwiIzNCMzU1MlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNTguMjIxIDMyLjMwMThMNTguOTE5NyAzMi4wMjkyTDU4LjY0NzEgMzEuMzMwNUw1Ny45NDg0IDMxLjYwM0w1OC4yMjEgMzIuMzAxOFpNNDEuNDI0NSA0My40OTMyTDQwLjg4NTIgNDIuOTcyTDQwLjM2NCA0My41MTEzTDQwLjkwMzMgNDQuMDMyNUw0MS40MjQ1IDQzLjQ5MzJaTTU4Ljc2NjEgMzMuNjk5Mkw1OS4wMzg3IDM0LjM5NzlMNTkuNzM3NCAzNC4xMjUzTDU5LjQ2NDggMzMuNDI2Nkw1OC43NjYxIDMzLjY5OTJaTTQyLjUwMzIgNDQuNTM1Nkw0MS45ODIgNDUuMDc0OUw0Mi41MjEzIDQ1LjU5NjFMNDMuMDQyNSA0NS4wNTY4TDQyLjUwMzIgNDQuNTM1NlpNMzYuNzcxMyA0OS4xMTU5TDM3LjIwMzUgNDguNTAzMUwzNi41OTA2IDQ4LjA3MDhMMzYuMTU4NCA0OC42ODM3TDM2Ljc3MTMgNDkuMTE1OVpNMzEuMjk5OCA1OS4zNTEzTDMwLjU5OTggNTkuMDgyTDMwLjMzMDYgNTkuNzgyMUwzMS4wMzA2IDYwLjA1MTNMMzEuMjk5OCA1OS4zNTEzWk0zNy45OTcxIDQ5Ljk4MDVMMzguNjEgNTAuNDEyOEwzOS4wNDIyIDQ5Ljc5OTlMMzguNDI5MyA0OS4zNjc2TDM3Ljk5NzEgNDkuOTgwNVpNMzIuNjk5OCA1OS44ODk3TDMyLjQzMDYgNjAuNTg5N0wzMy4xMzA2IDYwLjg1ODlMMzMuMzk5OSA2MC4xNTg5TDMyLjY5OTggNTkuODg5N1pNNTcuOTQ4NCAzMS42MDNDNTEuNDUxNiAzNC4xMzc0IDQ1LjY0NDkgMzguMDQ2NyA0MC44ODUyIDQyLjk3Mkw0MS45NjM4IDQ0LjAxNDRDNDYuNTc1OSAzOS4yNDE5IDUyLjIwMTQgMzUuNDU1IDU4LjQ5MzUgMzMuMDAwNUw1Ny45NDg0IDMxLjYwM1pNNTkuNDY0OCAzMy40MjY2TDU4LjkxOTcgMzIuMDI5Mkw1Ny41MjIyIDMyLjU3NDNMNTguMDY3NCAzMy45NzE4TDU5LjQ2NDggMzMuNDI2NlpNNDMuMDQyNSA0NS4wNTY4QzQ3LjUwNjggNDAuNDM3MSA1Mi45NTExIDM2Ljc3MjYgNTkuMDM4NyAzNC4zOTc5TDU4LjQ5MzUgMzMuMDAwNUM1Mi4yMDE0IDM1LjQ1NSA0Ni41NzU5IDM5LjI0MTkgNDEuOTYzOCA0NC4wMTQ0TDQzLjA0MjUgNDUuMDU2OFpNNDAuOTAzMyA0NC4wMzI1TDQxLjk4MiA0NS4wNzQ5TDQzLjAyNDMgNDMuOTk2M0w0MS45NDU3IDQyLjk1MzlMNDAuOTAzMyA0NC4wMzI1Wk0zNi4xNTg0IDQ4LjY4MzdDMzMuOTAyMSA1MS44ODI4IDMyLjAyNyA1NS4zNzEgMzAuNTk5OCA1OS4wODJMMzEuOTk5OCA1OS42MjA1QzMzLjM4MjEgNTYuMDI2NCAzNS4xOTgyIDUyLjY0NzYgMzcuMzg0MiA0OS41NDgyTDM2LjE1ODQgNDguNjgzN1pNMzguNDI5MyA0OS4zNjc2TDM3LjIwMzUgNDguNTAzMUwzNi4zMzkgNDkuNzI4OEwzNy41NjQ4IDUwLjU5MzRMMzguNDI5MyA0OS4zNjc2Wk0zMy4zOTk5IDYwLjE1ODlDMzQuNzM3MSA1Ni42ODE3IDM2LjQ5NDQgNTMuNDEyMyAzOC42MSA1MC40MTI4TDM3LjM4NDIgNDkuNTQ4MkMzNS4xOTgyIDUyLjY0NzYgMzMuMzgyMSA1Ni4wMjY0IDMxLjk5OTggNTkuNjIwNUwzMy4zOTk5IDYwLjE1ODlaTTMxLjAzMDYgNjAuMDUxM0wzMi40MzA2IDYwLjU4OTdMMzIuOTY5MSA1OS4xODk3TDMxLjU2OSA1OC42NTEyTDMxLjAzMDYgNjAuMDUxM1pcIixcbiAgZmlsbDogXCIjM0IzNTUyXCJcbn0pKTtcbmV4cG9ydCBkZWZhdWx0IENhbmNlbDsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGNvbnN0IENhcmRzID0gKHtcbiAgd2lkdGggPSAxNTIsXG4gIGhlaWdodCA9IDE1MlxufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB3aWR0aDogd2lkdGgsXG4gIGhlaWdodDogaGVpZ2h0LFxuICB2aWV3Qm94OiBcIjAgMCAxNTIgMTUyXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gIGN4OiBcIjc2XCIsXG4gIGN5OiBcIjc2XCIsXG4gIHI6IFwiNzZcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjQuMzk5OSA2Ny44NjJDMjMuOTM1MyA2Ni4xMjgyIDI0Ljk2NDIgNjQuMzQ2MSAyNi42OTggNjMuODgxNkwxMDIuOTgxIDQzLjQ0MTVDMTA0LjcxNSA0Mi45NzY5IDEwNi40OTcgNDQuMDA1OCAxMDYuOTYyIDQ1LjczOTZMMTIxLjA3MSA5OC4zOTQ5QzEyMS41MzUgMTAwLjEyOSAxMjAuNTA2IDEwMS45MTEgMTE4Ljc3MyAxMDIuMzc1TDQyLjQ4OTIgMTIyLjgxNUM0MC43NTU1IDEyMy4yOCAzOC45NzM0IDEyMi4yNTEgMzguNTA4OCAxMjAuNTE3TDI0LjM5OTkgNjcuODYyWlwiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTI4LjI5NDUgNjkuMjUyMkMyOC4wMDg2IDY4LjE4NTIgMjguNjQxOCA2Ny4wODg2IDI5LjcwODcgNjYuODAyN0w5OC40NzkzIDQ4LjM3NTZDOTkuNTQ2MyA0OC4wODk4IDEwMC42NDMgNDguNzIyOSAxMDAuOTI5IDQ5Ljc4OTlMMTEzLjg4MiA5OC4xMzIxQzExNC4xNjggOTkuMTk5IDExMy41MzUgMTAwLjI5NiAxMTIuNDY4IDEwMC41ODJMNDMuNjk3MiAxMTkuMDA5QzQyLjYzMDMgMTE5LjI5NCA0MS41MzM2IDExOC42NjEgNDEuMjQ3OCAxMTcuNTk0TDI4LjI5NDUgNjkuMjUyMlpcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMDVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gIHg6IFwiNDEuNzc1OVwiLFxuICB5OiBcIjQxLjc1XCIsXG4gIHdpZHRoOiBcIjg1LjQ3NDRcIixcbiAgaGVpZ2h0OiBcIjYxLjAxMjhcIixcbiAgcng6IFwiMy4yNVwiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMzYuNzc1OSA0M1Y0My43NUgzNy41MjU5VjQzSDM2Ljc3NTlaTTM1LjI3NTkgNDNIMzQuNTI1OVY0My43NUgzNS4yNzU5VjQzWk02MC4zNDYxIDM0LjI1SDYxLjA5NjFWMzMuNUg2MC4zNDYxVjM0LjI1Wk02MC4zNDYxIDM1Ljc1VjM2LjVINjEuMDk2MVYzNS43NUg2MC4zNDYxWk02Ni4zOTUxIDM1Ljc1SDY1LjY0NTFWMzYuNUg2Ni4zOTUxVjM1Ljc1Wk02Ni4zOTUxIDM0LjI1VjMzLjVINjUuNjQ1MVYzNC4yNUg2Ni4zOTUxWk03NC40NDA1IDM0LjI1SDc1LjE5MDVWMzMuNUg3NC40NDA1VjM0LjI1Wk03NC40NDA1IDM1Ljc1VjM2LjVINzUuMTkwNVYzNS43NUg3NC40NDA1Wk0zNy41MjU5IDQzQzM3LjUyNTkgMzkuNDEwMSA0MC40MzYgMzYuNSA0NC4wMjU5IDM2LjVWMzVDMzkuNjA3NiAzNSAzNi4wMjU5IDM4LjU4MTcgMzYuMDI1OSA0M0gzNy41MjU5Wk0zNS4yNzU5IDQzLjc1SDM2Ljc3NTlWNDIuMjVIMzUuMjc1OVY0My43NVpNNDQuMDI1OSAzMy41QzM4Ljc3OTIgMzMuNSAzNC41MjU5IDM3Ljc1MzMgMzQuNTI1OSA0M0gzNi4wMjU5QzM2LjAyNTkgMzguNTgxNyAzOS42MDc2IDM1IDQ0LjAyNTkgMzVWMzMuNVpNNDQuMDY4NCAzMy41SDQ0LjAyNTlWMzVINDQuMDY4NFYzMy41Wk00NC4xMTA4IDMzLjVINDQuMDY4NFYzNUg0NC4xMTA4VjMzLjVaTTQ0LjE1MzIgMzMuNUg0NC4xMTA4VjM1SDQ0LjE1MzJWMzMuNVpNNDQuMTk1NSAzMy41SDQ0LjE1MzJWMzVINDQuMTk1NVYzMy41Wk00NC4yMzc5IDMzLjVINDQuMTk1NVYzNUg0NC4yMzc5VjMzLjVaTTQ0LjI4MDEgMzMuNUg0NC4yMzc5VjM1SDQ0LjI4MDFWMzMuNVpNNDQuMzIyNCAzMy41SDQ0LjI4MDFWMzVINDQuMzIyNFYzMy41Wk00NC4zNjQ2IDMzLjVINDQuMzIyNFYzNUg0NC4zNjQ2VjMzLjVaTTQ0LjQwNjcgMzMuNUg0NC4zNjQ2VjM1SDQ0LjQwNjdWMzMuNVpNNDQuNDQ4OCAzMy41SDQ0LjQwNjdWMzVINDQuNDQ4OFYzMy41Wk00NC40OTA5IDMzLjVINDQuNDQ4OFYzNUg0NC40OTA5VjMzLjVaTTQ0LjUzMjkgMzMuNUg0NC40OTA5VjM1SDQ0LjUzMjlWMzMuNVpNNDQuNTc0OSAzMy41SDQ0LjUzMjlWMzVINDQuNTc0OVYzMy41Wk00NC42MTY4IDMzLjVINDQuNTc0OVYzNUg0NC42MTY4VjMzLjVaTTQ0LjY1ODcgMzMuNUg0NC42MTY4VjM1SDQ0LjY1ODdWMzMuNVpNNDQuNzAwNiAzMy41SDQ0LjY1ODdWMzVINDQuNzAwNlYzMy41Wk00NC43NDI0IDMzLjVINDQuNzAwNlYzNUg0NC43NDI0VjMzLjVaTTQ0Ljc4NDIgMzMuNUg0NC43NDI0VjM1SDQ0Ljc4NDJWMzMuNVpNNDQuODI1OSAzMy41SDQ0Ljc4NDJWMzVINDQuODI1OVYzMy41Wk00NC44Njc2IDMzLjVINDQuODI1OVYzNUg0NC44Njc2VjMzLjVaTTQ0LjkwOTIgMzMuNUg0NC44Njc2VjM1SDQ0LjkwOTJWMzMuNVpNNDQuOTUwOCAzMy41SDQ0LjkwOTJWMzVINDQuOTUwOFYzMy41Wk00NC45OTI0IDMzLjVINDQuOTUwOFYzNUg0NC45OTI0VjMzLjVaTTQ1LjAzMzkgMzMuNUg0NC45OTI0VjM1SDQ1LjAzMzlWMzMuNVpNNDUuMDc1NCAzMy41SDQ1LjAzMzlWMzVINDUuMDc1NFYzMy41Wk00NS4xMTY5IDMzLjVINDUuMDc1NFYzNUg0NS4xMTY5VjMzLjVaTTQ1LjE1ODMgMzMuNUg0NS4xMTY5VjM1SDQ1LjE1ODNWMzMuNVpNNDUuMTk5NiAzMy41SDQ1LjE1ODNWMzVINDUuMTk5NlYzMy41Wk00NS4yNDA5IDMzLjVINDUuMTk5NlYzNUg0NS4yNDA5VjMzLjVaTTQ1LjI4MjIgMzMuNUg0NS4yNDA5VjM1SDQ1LjI4MjJWMzMuNVpNNDUuMzIzNSAzMy41SDQ1LjI4MjJWMzVINDUuMzIzNVYzMy41Wk00NS4zNjQ2IDMzLjVINDUuMzIzNVYzNUg0NS4zNjQ2VjMzLjVaTTQ1LjQwNTggMzMuNUg0NS4zNjQ2VjM1SDQ1LjQwNThWMzMuNVpNNDUuNDQ2OSAzMy41SDQ1LjQwNThWMzVINDUuNDQ2OVYzMy41Wk00NS40ODggMzMuNUg0NS40NDY5VjM1SDQ1LjQ4OFYzMy41Wk00NS41MjkgMzMuNUg0NS40ODhWMzVINDUuNTI5VjMzLjVaTTQ1LjU3IDMzLjVINDUuNTI5VjM1SDQ1LjU3VjMzLjVaTTQ1LjYxMDkgMzMuNUg0NS41N1YzNUg0NS42MTA5VjMzLjVaTTQ1LjY1MTggMzMuNUg0NS42MTA5VjM1SDQ1LjY1MThWMzMuNVpNNDUuNjkyNyAzMy41SDQ1LjY1MThWMzVINDUuNjkyN1YzMy41Wk00NS43MzM1IDMzLjVINDUuNjkyN1YzNUg0NS43MzM1VjMzLjVaTTQ1Ljc3NDMgMzMuNUg0NS43MzM1VjM1SDQ1Ljc3NDNWMzMuNVpNNDUuODE1IDMzLjVINDUuNzc0M1YzNUg0NS44MTVWMzMuNVpNNDUuODU1NyAzMy41SDQ1LjgxNVYzNUg0NS44NTU3VjMzLjVaTTQ1Ljg5NjQgMzMuNUg0NS44NTU3VjM1SDQ1Ljg5NjRWMzMuNVpNNDUuOTM3IDMzLjVINDUuODk2NFYzNUg0NS45MzdWMzMuNVpNNDUuOTc3NiAzMy41SDQ1LjkzN1YzNUg0NS45Nzc2VjMzLjVaTTQ2LjAxODEgMzMuNUg0NS45Nzc2VjM1SDQ2LjAxODFWMzMuNVpNNDYuMDU4NiAzMy41SDQ2LjAxODFWMzVINDYuMDU4NlYzMy41Wk00Ni4wOTkgMzMuNUg0Ni4wNTg2VjM1SDQ2LjA5OVYzMy41Wk00Ni4xMzk0IDMzLjVINDYuMDk5VjM1SDQ2LjEzOTRWMzMuNVpNNDYuMTc5OCAzMy41SDQ2LjEzOTRWMzVINDYuMTc5OFYzMy41Wk00Ni4yMjAxIDMzLjVINDYuMTc5OFYzNUg0Ni4yMjAxVjMzLjVaTTQ2LjI2MDQgMzMuNUg0Ni4yMjAxVjM1SDQ2LjI2MDRWMzMuNVpNNDYuMzAwNiAzMy41SDQ2LjI2MDRWMzVINDYuMzAwNlYzMy41Wk00Ni4zNDA4IDMzLjVINDYuMzAwNlYzNUg0Ni4zNDA4VjMzLjVaTTQ2LjM4MSAzMy41SDQ2LjM0MDhWMzVINDYuMzgxVjMzLjVaTTQ2LjQyMTEgMzMuNUg0Ni4zODFWMzVINDYuNDIxMVYzMy41Wk00Ni40NjEyIDMzLjVINDYuNDIxMVYzNUg0Ni40NjEyVjMzLjVaTTQ2LjUwMTIgMzMuNUg0Ni40NjEyVjM1SDQ2LjUwMTJWMzMuNVpNNDYuNTQxMiAzMy41SDQ2LjUwMTJWMzVINDYuNTQxMlYzMy41Wk00Ni41ODExIDMzLjVINDYuNTQxMlYzNUg0Ni41ODExVjMzLjVaTTQ2LjYyMSAzMy41SDQ2LjU4MTFWMzVINDYuNjIxVjMzLjVaTTQ2LjY2MDkgMzMuNUg0Ni42MjFWMzVINDYuNjYwOVYzMy41Wk00Ni43MDA3IDMzLjVINDYuNjYwOVYzNUg0Ni43MDA3VjMzLjVaTTQ2Ljc0MDUgMzMuNUg0Ni43MDA3VjM1SDQ2Ljc0MDVWMzMuNVpNNDYuNzgwMyAzMy41SDQ2Ljc0MDVWMzVINDYuNzgwM1YzMy41Wk00Ni44MiAzMy41SDQ2Ljc4MDNWMzVINDYuODJWMzMuNVpNNDYuODU5NiAzMy41SDQ2LjgyVjM1SDQ2Ljg1OTZWMzMuNVpNNDYuODk5MiAzMy41SDQ2Ljg1OTZWMzVINDYuODk5MlYzMy41Wk00Ni45Mzg4IDMzLjVINDYuODk5MlYzNUg0Ni45Mzg4VjMzLjVaTTQ2Ljk3ODMgMzMuNUg0Ni45Mzg4VjM1SDQ2Ljk3ODNWMzMuNVpNNDcuMDE3OCAzMy41SDQ2Ljk3ODNWMzVINDcuMDE3OFYzMy41Wk00Ny4wNTczIDMzLjVINDcuMDE3OFYzNUg0Ny4wNTczVjMzLjVaTTQ3LjA5NjcgMzMuNUg0Ny4wNTczVjM1SDQ3LjA5NjdWMzMuNVpNNDcuMTM2MSAzMy41SDQ3LjA5NjdWMzVINDcuMTM2MVYzMy41Wk00Ny4xNzU0IDMzLjVINDcuMTM2MVYzNUg0Ny4xNzU0VjMzLjVaTTQ3LjIxNDcgMzMuNUg0Ny4xNzU0VjM1SDQ3LjIxNDdWMzMuNVpNNDcuMjUzOSAzMy41SDQ3LjIxNDdWMzVINDcuMjUzOVYzMy41Wk00Ny4yOTMxIDMzLjVINDcuMjUzOVYzNUg0Ny4yOTMxVjMzLjVaTTQ3LjMzMjMgMzMuNUg0Ny4yOTMxVjM1SDQ3LjMzMjNWMzMuNVpNNDcuMzcxNCAzMy41SDQ3LjMzMjNWMzVINDcuMzcxNFYzMy41Wk00Ny40MTA1IDMzLjVINDcuMzcxNFYzNUg0Ny40MTA1VjMzLjVaTTQ3LjQ0OTUgMzMuNUg0Ny40MTA1VjM1SDQ3LjQ0OTVWMzMuNVpNNDcuNDg4NSAzMy41SDQ3LjQ0OTVWMzVINDcuNDg4NVYzMy41Wk00Ny41Mjc0IDMzLjVINDcuNDg4NVYzNUg0Ny41Mjc0VjMzLjVaTTQ3LjU2NjMgMzMuNUg0Ny41Mjc0VjM1SDQ3LjU2NjNWMzMuNVpNNDcuNjA1MiAzMy41SDQ3LjU2NjNWMzVINDcuNjA1MlYzMy41Wk00Ny42NDQgMzMuNUg0Ny42MDUyVjM1SDQ3LjY0NFYzMy41Wk00Ny42ODI4IDMzLjVINDcuNjQ0VjM1SDQ3LjY4MjhWMzMuNVpNNDcuNzIxNiAzMy41SDQ3LjY4MjhWMzVINDcuNzIxNlYzMy41Wk00Ny43NjAzIDMzLjVINDcuNzIxNlYzNUg0Ny43NjAzVjMzLjVaTTQ3Ljc5ODkgMzMuNUg0Ny43NjAzVjM1SDQ3Ljc5ODlWMzMuNVpNNDcuODM3NiAzMy41SDQ3Ljc5ODlWMzVINDcuODM3NlYzMy41Wk00Ny44NzYxIDMzLjVINDcuODM3NlYzNUg0Ny44NzYxVjMzLjVaTTQ3LjkxNDcgMzMuNUg0Ny44NzYxVjM1SDQ3LjkxNDdWMzMuNVpNNDcuOTUzMiAzMy41SDQ3LjkxNDdWMzVINDcuOTUzMlYzMy41Wk00Ny45OTE2IDMzLjVINDcuOTUzMlYzNUg0Ny45OTE2VjMzLjVaTTQ4LjAzIDMzLjVINDcuOTkxNlYzNUg0OC4wM1YzMy41Wk00OC4wNjg0IDMzLjVINDguMDNWMzVINDguMDY4NFYzMy41Wk00OC4xMDY3IDMzLjVINDguMDY4NFYzNUg0OC4xMDY3VjMzLjVaTTQ4LjE0NSAzMy41SDQ4LjEwNjdWMzVINDguMTQ1VjMzLjVaTTQ4LjE4MzMgMzMuNUg0OC4xNDVWMzVINDguMTgzM1YzMy41Wk00OC4yMjE1IDMzLjVINDguMTgzM1YzNUg0OC4yMjE1VjMzLjVaTTQ4LjI1OTYgMzMuNUg0OC4yMjE1VjM1SDQ4LjI1OTZWMzMuNVpNNDguMjk3OCAzMy41SDQ4LjI1OTZWMzVINDguMjk3OFYzMy41Wk00OC4zMzU4IDMzLjVINDguMjk3OFYzNUg0OC4zMzU4VjMzLjVaTTQ4LjM3MzkgMzMuNUg0OC4zMzU4VjM1SDQ4LjM3MzlWMzMuNVpNNDguNDExOSAzMy41SDQ4LjM3MzlWMzVINDguNDExOVYzMy41Wk00OC40NDk4IDMzLjVINDguNDExOVYzNUg0OC40NDk4VjMzLjVaTTQ4LjQ4NzcgMzMuNUg0OC40NDk4VjM1SDQ4LjQ4NzdWMzMuNVpNNDguNTI1NiAzMy41SDQ4LjQ4NzdWMzVINDguNTI1NlYzMy41Wk00OC41NjM1IDMzLjVINDguNTI1NlYzNUg0OC41NjM1VjMzLjVaTTQ4LjYwMTIgMzMuNUg0OC41NjM1VjM1SDQ4LjYwMTJWMzMuNVpNNDguNjM5IDMzLjVINDguNjAxMlYzNUg0OC42MzlWMzMuNVpNNDguNjc2NyAzMy41SDQ4LjYzOVYzNUg0OC42NzY3VjMzLjVaTTQ4LjcxNDQgMzMuNUg0OC42NzY3VjM1SDQ4LjcxNDRWMzMuNVpNNDguNzUyIDMzLjVINDguNzE0NFYzNUg0OC43NTJWMzMuNVpNNDguNzg5NiAzMy41SDQ4Ljc1MlYzNUg0OC43ODk2VjMzLjVaTTQ4LjgyNzEgMzMuNUg0OC43ODk2VjM1SDQ4LjgyNzFWMzMuNVpNNDguODY0NiAzMy41SDQ4LjgyNzFWMzVINDguODY0NlYzMy41Wk00OC45MDIxIDMzLjVINDguODY0NlYzNUg0OC45MDIxVjMzLjVaTTQ4LjkzOTUgMzMuNUg0OC45MDIxVjM1SDQ4LjkzOTVWMzMuNVpNNDguOTc2OSAzMy41SDQ4LjkzOTVWMzVINDguOTc2OVYzMy41Wk00OS4wMTQyIDMzLjVINDguOTc2OVYzNUg0OS4wMTQyVjMzLjVaTTQ5LjA1MTUgMzMuNUg0OS4wMTQyVjM1SDQ5LjA1MTVWMzMuNVpNNDkuMDg4NyAzMy41SDQ5LjA1MTVWMzVINDkuMDg4N1YzMy41Wk00OS4xMjU5IDMzLjVINDkuMDg4N1YzNUg0OS4xMjU5VjMzLjVaTTQ5LjE2MzEgMzMuNUg0OS4xMjU5VjM1SDQ5LjE2MzFWMzMuNVpNNDkuMjAwMiAzMy41SDQ5LjE2MzFWMzVINDkuMjAwMlYzMy41Wk00OS4yMzczIDMzLjVINDkuMjAwMlYzNUg0OS4yMzczVjMzLjVaTTQ5LjI3NDQgMzMuNUg0OS4yMzczVjM1SDQ5LjI3NDRWMzMuNVpNNDkuMzExNCAzMy41SDQ5LjI3NDRWMzVINDkuMzExNFYzMy41Wk00OS4zNDgzIDMzLjVINDkuMzExNFYzNUg0OS4zNDgzVjMzLjVaTTQ5LjM4NTIgMzMuNUg0OS4zNDgzVjM1SDQ5LjM4NTJWMzMuNVpNNDkuNDIyMSAzMy41SDQ5LjM4NTJWMzVINDkuNDIyMVYzMy41Wk00OS40NTkgMzMuNUg0OS40MjIxVjM1SDQ5LjQ1OVYzMy41Wk00OS40OTU3IDMzLjVINDkuNDU5VjM1SDQ5LjQ5NTdWMzMuNVpNNDkuNTMyNSAzMy41SDQ5LjQ5NTdWMzVINDkuNTMyNVYzMy41Wk00OS41NjkyIDMzLjVINDkuNTMyNVYzNUg0OS41NjkyVjMzLjVaTTQ5LjYwNTkgMzMuNUg0OS41NjkyVjM1SDQ5LjYwNTlWMzMuNVpNNDkuNjQyNSAzMy41SDQ5LjYwNTlWMzVINDkuNjQyNVYzMy41Wk00OS42NzkxIDMzLjVINDkuNjQyNVYzNUg0OS42NzkxVjMzLjVaTTQ5LjcxNTYgMzMuNUg0OS42NzkxVjM1SDQ5LjcxNTZWMzMuNVpNNDkuNzUyMSAzMy41SDQ5LjcxNTZWMzVINDkuNzUyMVYzMy41Wk00OS43ODg2IDMzLjVINDkuNzUyMVYzNUg0OS43ODg2VjMzLjVaTTQ5LjgyNSAzMy41SDQ5Ljc4ODZWMzVINDkuODI1VjMzLjVaTTQ5Ljg2MTQgMzMuNUg0OS44MjVWMzVINDkuODYxNFYzMy41Wk00OS44OTc3IDMzLjVINDkuODYxNFYzNUg0OS44OTc3VjMzLjVaTTQ5LjkzNCAzMy41SDQ5Ljg5NzdWMzVINDkuOTM0VjMzLjVaTTQ5Ljk3MDMgMzMuNUg0OS45MzRWMzVINDkuOTcwM1YzMy41Wk01MC4wMDY1IDMzLjVINDkuOTcwM1YzNUg1MC4wMDY1VjMzLjVaTTUwLjA0MjcgMzMuNUg1MC4wMDY1VjM1SDUwLjA0MjdWMzMuNVpNNTAuMDc4OCAzMy41SDUwLjA0MjdWMzVINTAuMDc4OFYzMy41Wk01MC4xMTQ5IDMzLjVINTAuMDc4OFYzNUg1MC4xMTQ5VjMzLjVaTTUwLjE1MDkgMzMuNUg1MC4xMTQ5VjM1SDUwLjE1MDlWMzMuNVpNNTAuMTg2OSAzMy41SDUwLjE1MDlWMzVINTAuMTg2OVYzMy41Wk01MC4yMjI5IDMzLjVINTAuMTg2OVYzNUg1MC4yMjI5VjMzLjVaTTUwLjI1ODggMzMuNUg1MC4yMjI5VjM1SDUwLjI1ODhWMzMuNVpNNTAuMjk0NyAzMy41SDUwLjI1ODhWMzVINTAuMjk0N1YzMy41Wk01MC4zMzA1IDMzLjVINTAuMjk0N1YzNUg1MC4zMzA1VjMzLjVaTTUwLjM2NjMgMzMuNUg1MC4zMzA1VjM1SDUwLjM2NjNWMzMuNVpNNTAuNDAyMSAzMy41SDUwLjM2NjNWMzVINTAuNDAyMVYzMy41Wk01MC40Mzc4IDMzLjVINTAuNDAyMVYzNUg1MC40Mzc4VjMzLjVaTTUwLjQ3MzUgMzMuNUg1MC40Mzc4VjM1SDUwLjQ3MzVWMzMuNVpNNTAuNTA5MSAzMy41SDUwLjQ3MzVWMzVINTAuNTA5MVYzMy41Wk01MC41NDQ3IDMzLjVINTAuNTA5MVYzNUg1MC41NDQ3VjMzLjVaTTUwLjU4MDMgMzMuNUg1MC41NDQ3VjM1SDUwLjU4MDNWMzMuNVpNNTAuNjE1OCAzMy41SDUwLjU4MDNWMzVINTAuNjE1OFYzMy41Wk01MC42NTEyIDMzLjVINTAuNjE1OFYzNUg1MC42NTEyVjMzLjVaTTUwLjY4NjcgMzMuNUg1MC42NTEyVjM1SDUwLjY4NjdWMzMuNVpNNTAuNzIyIDMzLjVINTAuNjg2N1YzNUg1MC43MjJWMzMuNVpNNTAuNzU3NCAzMy41SDUwLjcyMlYzNUg1MC43NTc0VjMzLjVaTTUwLjc5MjcgMzMuNUg1MC43NTc0VjM1SDUwLjc5MjdWMzMuNVpNNTAuODI3OSAzMy41SDUwLjc5MjdWMzVINTAuODI3OVYzMy41Wk01MC44NjMxIDMzLjVINTAuODI3OVYzNUg1MC44NjMxVjMzLjVaTTUwLjg5ODMgMzMuNUg1MC44NjMxVjM1SDUwLjg5ODNWMzMuNVpNNTAuOTMzNSAzMy41SDUwLjg5ODNWMzVINTAuOTMzNVYzMy41Wk01MC45Njg1IDMzLjVINTAuOTMzNVYzNUg1MC45Njg1VjMzLjVaTTUxLjAwMzYgMzMuNUg1MC45Njg1VjM1SDUxLjAwMzZWMzMuNVpNNTEuMDM4NiAzMy41SDUxLjAwMzZWMzVINTEuMDM4NlYzMy41Wk01MS4wNzM2IDMzLjVINTEuMDM4NlYzNUg1MS4wNzM2VjMzLjVaTTUxLjEwODUgMzMuNUg1MS4wNzM2VjM1SDUxLjEwODVWMzMuNVpNNTEuMTQzNCAzMy41SDUxLjEwODVWMzVINTEuMTQzNFYzMy41Wk01MS4xNzgyIDMzLjVINTEuMTQzNFYzNUg1MS4xNzgyVjMzLjVaTTUxLjIxMyAzMy41SDUxLjE3ODJWMzVINTEuMjEzVjMzLjVaTTUxLjI0NzggMzMuNUg1MS4yMTNWMzVINTEuMjQ3OFYzMy41Wk01MS4yODI1IDMzLjVINTEuMjQ3OFYzNUg1MS4yODI1VjMzLjVaTTUxLjMxNzIgMzMuNUg1MS4yODI1VjM1SDUxLjMxNzJWMzMuNVpNNTEuMzUxOCAzMy41SDUxLjMxNzJWMzVINTEuMzUxOFYzMy41Wk01MS4zODY0IDMzLjVINTEuMzUxOFYzNUg1MS4zODY0VjMzLjVaTTUxLjQyMSAzMy41SDUxLjM4NjRWMzVINTEuNDIxVjMzLjVaTTUxLjQ1NTUgMzMuNUg1MS40MjFWMzVINTEuNDU1NVYzMy41Wk01MS40ODk5IDMzLjVINTEuNDU1NVYzNUg1MS40ODk5VjMzLjVaTTUxLjUyNDQgMzMuNUg1MS40ODk5VjM1SDUxLjUyNDRWMzMuNVpNNTEuNTU4OCAzMy41SDUxLjUyNDRWMzVINTEuNTU4OFYzMy41Wk01MS41OTMxIDMzLjVINTEuNTU4OFYzNUg1MS41OTMxVjMzLjVaTTUxLjYyNzQgMzMuNUg1MS41OTMxVjM1SDUxLjYyNzRWMzMuNVpNNTEuNjYxNyAzMy41SDUxLjYyNzRWMzVINTEuNjYxN1YzMy41Wk01MS42OTU5IDMzLjVINTEuNjYxN1YzNUg1MS42OTU5VjMzLjVaTTUxLjczMDEgMzMuNUg1MS42OTU5VjM1SDUxLjczMDFWMzMuNVpNNTEuNzY0MiAzMy41SDUxLjczMDFWMzVINTEuNzY0MlYzMy41Wk01MS43OTgzIDMzLjVINTEuNzY0MlYzNUg1MS43OTgzVjMzLjVaTTUxLjgzMjQgMzMuNUg1MS43OTgzVjM1SDUxLjgzMjRWMzMuNVpNNTEuODY2NCAzMy41SDUxLjgzMjRWMzVINTEuODY2NFYzMy41Wk01MS45MDAzIDMzLjVINTEuODY2NFYzNUg1MS45MDAzVjMzLjVaTTUxLjkzNDMgMzMuNUg1MS45MDAzVjM1SDUxLjkzNDNWMzMuNVpNNTEuOTY4MiAzMy41SDUxLjkzNDNWMzVINTEuOTY4MlYzMy41Wk01Mi4wMDIgMzMuNUg1MS45NjgyVjM1SDUyLjAwMlYzMy41Wk01Mi4wMzU4IDMzLjVINTIuMDAyVjM1SDUyLjAzNThWMzMuNVpNNTIuMDY5NiAzMy41SDUyLjAzNThWMzVINTIuMDY5NlYzMy41Wk01Mi4xMDMzIDMzLjVINTIuMDY5NlYzNUg1Mi4xMDMzVjMzLjVaTTUyLjEzNyAzMy41SDUyLjEwMzNWMzVINTIuMTM3VjMzLjVaTTUyLjE3MDYgMzMuNUg1Mi4xMzdWMzVINTIuMTcwNlYzMy41Wk01Mi4yMDQyIDMzLjVINTIuMTcwNlYzNUg1Mi4yMDQyVjMzLjVaTTUyLjIzNzggMzMuNUg1Mi4yMDQyVjM1SDUyLjIzNzhWMzMuNVpNNTIuMjcxMyAzMy41SDUyLjIzNzhWMzVINTIuMjcxM1YzMy41Wk01Mi4zMDQ4IDMzLjVINTIuMjcxM1YzNUg1Mi4zMDQ4VjMzLjVaTTUyLjMzODIgMzMuNUg1Mi4zMDQ4VjM1SDUyLjMzODJWMzMuNVpNNTIuMzcxNiAzMy41SDUyLjMzODJWMzVINTIuMzcxNlYzMy41Wk01Mi40MDQ5IDMzLjVINTIuMzcxNlYzNUg1Mi40MDQ5VjMzLjVaTTUyLjQzODIgMzMuNUg1Mi40MDQ5VjM1SDUyLjQzODJWMzMuNVpNNTIuNDcxNSAzMy41SDUyLjQzODJWMzVINTIuNDcxNVYzMy41Wk01Mi41MDQ3IDMzLjVINTIuNDcxNVYzNUg1Mi41MDQ3VjMzLjVaTTUyLjUzNzkgMzMuNUg1Mi41MDQ3VjM1SDUyLjUzNzlWMzMuNVpNNTIuNTcxMSAzMy41SDUyLjUzNzlWMzVINTIuNTcxMVYzMy41Wk01Mi42MDQyIDMzLjVINTIuNTcxMVYzNUg1Mi42MDQyVjMzLjVaTTUyLjYzNzIgMzMuNUg1Mi42MDQyVjM1SDUyLjYzNzJWMzMuNVpNNTIuNjcwMiAzMy41SDUyLjYzNzJWMzVINTIuNjcwMlYzMy41Wk01Mi43MDMyIDMzLjVINTIuNjcwMlYzNUg1Mi43MDMyVjMzLjVaTTUyLjczNjEgMzMuNUg1Mi43MDMyVjM1SDUyLjczNjFWMzMuNVpNNTIuNzY5IDMzLjVINTIuNzM2MVYzNUg1Mi43NjlWMzMuNVpNNTIuODAxOSAzMy41SDUyLjc2OVYzNUg1Mi44MDE5VjMzLjVaTTUyLjgzNDcgMzMuNUg1Mi44MDE5VjM1SDUyLjgzNDdWMzMuNVpNNTIuODY3NSAzMy41SDUyLjgzNDdWMzVINTIuODY3NVYzMy41Wk01Mi45MDAyIDMzLjVINTIuODY3NVYzNUg1Mi45MDAyVjMzLjVaTTUyLjkzMjkgMzMuNUg1Mi45MDAyVjM1SDUyLjkzMjlWMzMuNVpNNTIuOTY1NSAzMy41SDUyLjkzMjlWMzVINTIuOTY1NVYzMy41Wk01Mi45OTgxIDMzLjVINTIuOTY1NVYzNUg1Mi45OTgxVjMzLjVaTTUzLjAzMDcgMzMuNUg1Mi45OTgxVjM1SDUzLjAzMDdWMzMuNVpNNTMuMDYzMiAzMy41SDUzLjAzMDdWMzVINTMuMDYzMlYzMy41Wk01My4wOTU3IDMzLjVINTMuMDYzMlYzNUg1My4wOTU3VjMzLjVaTTUzLjEyODEgMzMuNUg1My4wOTU3VjM1SDUzLjEyODFWMzMuNVpNNTMuMTYwNSAzMy41SDUzLjEyODFWMzVINTMuMTYwNVYzMy41Wk01My4xOTI5IDMzLjVINTMuMTYwNVYzNUg1My4xOTI5VjMzLjVaTTUzLjIyNTIgMzMuNUg1My4xOTI5VjM1SDUzLjIyNTJWMzMuNVpNNTMuMjU3NCAzMy41SDUzLjIyNTJWMzVINTMuMjU3NFYzMy41Wk01My4yODk3IDMzLjVINTMuMjU3NFYzNUg1My4yODk3VjMzLjVaTTUzLjMyMTggMzMuNUg1My4yODk3VjM1SDUzLjMyMThWMzMuNVpNNTMuMzU0IDMzLjVINTMuMzIxOFYzNUg1My4zNTRWMzMuNVpNNTMuMzg2MSAzMy41SDUzLjM1NFYzNUg1My4zODYxVjMzLjVaTTUzLjQxODIgMzMuNUg1My4zODYxVjM1SDUzLjQxODJWMzMuNVpNNTMuNDUwMiAzMy41SDUzLjQxODJWMzVINTMuNDUwMlYzMy41Wk01My40ODIyIDMzLjVINTMuNDUwMlYzNUg1My40ODIyVjMzLjVaTTUzLjUxNDEgMzMuNUg1My40ODIyVjM1SDUzLjUxNDFWMzMuNVpNNTMuNTQ2IDMzLjVINTMuNTE0MVYzNUg1My41NDZWMzMuNVpNNTMuNTc3OCAzMy41SDUzLjU0NlYzNUg1My41Nzc4VjMzLjVaTTUzLjYwOTcgMzMuNUg1My41Nzc4VjM1SDUzLjYwOTdWMzMuNVpNNTMuNjQxNCAzMy41SDUzLjYwOTdWMzVINTMuNjQxNFYzMy41Wk01My42NzMyIDMzLjVINTMuNjQxNFYzNUg1My42NzMyVjMzLjVaTTUzLjcwNDkgMzMuNUg1My42NzMyVjM1SDUzLjcwNDlWMzMuNVpNNTMuNzM2NSAzMy41SDUzLjcwNDlWMzVINTMuNzM2NVYzMy41Wk01My43NjgxIDMzLjVINTMuNzM2NVYzNUg1My43NjgxVjMzLjVaTTUzLjc5OTcgMzMuNUg1My43NjgxVjM1SDUzLjc5OTdWMzMuNVpNNTMuODMxMiAzMy41SDUzLjc5OTdWMzVINTMuODMxMlYzMy41Wk01My44NjI3IDMzLjVINTMuODMxMlYzNUg1My44NjI3VjMzLjVaTTUzLjg5NDEgMzMuNUg1My44NjI3VjM1SDUzLjg5NDFWMzMuNVpNNTMuOTI1NSAzMy41SDUzLjg5NDFWMzVINTMuOTI1NVYzMy41Wk01My45NTY5IDMzLjVINTMuOTI1NVYzNUg1My45NTY5VjMzLjVaTTUzLjk4ODIgMzMuNUg1My45NTY5VjM1SDUzLjk4ODJWMzMuNVpNNTQuMDE5NSAzMy41SDUzLjk4ODJWMzVINTQuMDE5NVYzMy41Wk01NC4wNTA3IDMzLjVINTQuMDE5NVYzNUg1NC4wNTA3VjMzLjVaTTU0LjA4MTkgMzMuNUg1NC4wNTA3VjM1SDU0LjA4MTlWMzMuNVpNNTQuMTEzIDMzLjVINTQuMDgxOVYzNUg1NC4xMTNWMzMuNVpNNTQuMTQ0MSAzMy41SDU0LjExM1YzNUg1NC4xNDQxVjMzLjVaTTU0LjE3NTIgMzMuNUg1NC4xNDQxVjM1SDU0LjE3NTJWMzMuNVpNNTQuMjA2MiAzMy41SDU0LjE3NTJWMzVINTQuMjA2MlYzMy41Wk01NC4yMzcyIDMzLjVINTQuMjA2MlYzNUg1NC4yMzcyVjMzLjVaTTU0LjI2ODEgMzMuNUg1NC4yMzcyVjM1SDU0LjI2ODFWMzMuNVpNNTQuMjk5IDMzLjVINTQuMjY4MVYzNUg1NC4yOTlWMzMuNVpNNTQuMzI5OSAzMy41SDU0LjI5OVYzNUg1NC4zMjk5VjMzLjVaTTU0LjM2MDcgMzMuNUg1NC4zMjk5VjM1SDU0LjM2MDdWMzMuNVpNNTQuMzkxNSAzMy41SDU0LjM2MDdWMzVINTQuMzkxNVYzMy41Wk01NC40MjIyIDMzLjVINTQuMzkxNVYzNUg1NC40MjIyVjMzLjVaTTU0LjQ1MjkgMzMuNUg1NC40MjIyVjM1SDU0LjQ1MjlWMzMuNVpNNTQuNDgzNiAzMy41SDU0LjQ1MjlWMzVINTQuNDgzNlYzMy41Wk01NC41MTQyIDMzLjVINTQuNDgzNlYzNUg1NC41MTQyVjMzLjVaTTU0LjU0NDggMzMuNUg1NC41MTQyVjM1SDU0LjU0NDhWMzMuNVpNNTQuNTc1MyAzMy41SDU0LjU0NDhWMzVINTQuNTc1M1YzMy41Wk01NC42MDU4IDMzLjVINTQuNTc1M1YzNUg1NC42MDU4VjMzLjVaTTU0LjYzNjIgMzMuNUg1NC42MDU4VjM1SDU0LjYzNjJWMzMuNVpNNTQuNjY2NiAzMy41SDU0LjYzNjJWMzVINTQuNjY2NlYzMy41Wk01NC42OTcgMzMuNUg1NC42NjY2VjM1SDU0LjY5N1YzMy41Wk01NC43MjczIDMzLjVINTQuNjk3VjM1SDU0LjcyNzNWMzMuNVpNNTQuNzU3NiAzMy41SDU0LjcyNzNWMzVINTQuNzU3NlYzMy41Wk01NC43ODc4IDMzLjVINTQuNzU3NlYzNUg1NC43ODc4VjMzLjVaTTU0LjgxOCAzMy41SDU0Ljc4NzhWMzVINTQuODE4VjMzLjVaTTU0Ljg0ODIgMzMuNUg1NC44MThWMzVINTQuODQ4MlYzMy41Wk01NC44NzgzIDMzLjVINTQuODQ4MlYzNUg1NC44NzgzVjMzLjVaTTU0LjkwODMgMzMuNUg1NC44NzgzVjM1SDU0LjkwODNWMzMuNVpNNTQuOTM4NCAzMy41SDU0LjkwODNWMzVINTQuOTM4NFYzMy41Wk01NC45NjgzIDMzLjVINTQuOTM4NFYzNUg1NC45NjgzVjMzLjVaTTU0Ljk5ODMgMzMuNUg1NC45NjgzVjM1SDU0Ljk5ODNWMzMuNVpNNTUuMDI4MiAzMy41SDU0Ljk5ODNWMzVINTUuMDI4MlYzMy41Wk01NS4wNTgxIDMzLjVINTUuMDI4MlYzNUg1NS4wNTgxVjMzLjVaTTU1LjA4NzkgMzMuNUg1NS4wNTgxVjM1SDU1LjA4NzlWMzMuNVpNNTUuMTE3NyAzMy41SDU1LjA4NzlWMzVINTUuMTE3N1YzMy41Wk01NS4xNDc0IDMzLjVINTUuMTE3N1YzNUg1NS4xNDc0VjMzLjVaTTU1LjE3NzEgMzMuNUg1NS4xNDc0VjM1SDU1LjE3NzFWMzMuNVpNNTUuMjA2OCAzMy41SDU1LjE3NzFWMzVINTUuMjA2OFYzMy41Wk01NS4yMzY0IDMzLjVINTUuMjA2OFYzNUg1NS4yMzY0VjMzLjVaTTU1LjI2NTkgMzMuNUg1NS4yMzY0VjM1SDU1LjI2NTlWMzMuNVpNNTUuMjk1NSAzMy41SDU1LjI2NTlWMzVINTUuMjk1NVYzMy41Wk01NS4zMjUgMzMuNUg1NS4yOTU1VjM1SDU1LjMyNVYzMy41Wk01NS4zNTQ0IDMzLjVINTUuMzI1VjM1SDU1LjM1NDRWMzMuNVpNNTUuMzgzOCAzMy41SDU1LjM1NDRWMzVINTUuMzgzOFYzMy41Wk01NS40MTMyIDMzLjVINTUuMzgzOFYzNUg1NS40MTMyVjMzLjVaTTU1LjQ0MjUgMzMuNUg1NS40MTMyVjM1SDU1LjQ0MjVWMzMuNVpNNTUuNDcxOCAzMy41SDU1LjQ0MjVWMzVINTUuNDcxOFYzMy41Wk01NS41MDEgMzMuNUg1NS40NzE4VjM1SDU1LjUwMVYzMy41Wk01NS41MzAyIDMzLjVINTUuNTAxVjM1SDU1LjUzMDJWMzMuNVpNNTUuNTU5NCAzMy41SDU1LjUzMDJWMzVINTUuNTU5NFYzMy41Wk01NS41ODg1IDMzLjVINTUuNTU5NFYzNUg1NS41ODg1VjMzLjVaTTU1LjYxNzYgMzMuNUg1NS41ODg1VjM1SDU1LjYxNzZWMzMuNVpNNTUuNjQ2NiAzMy41SDU1LjYxNzZWMzVINTUuNjQ2NlYzMy41Wk01NS42NzU2IDMzLjVINTUuNjQ2NlYzNUg1NS42NzU2VjMzLjVaTTU1LjcwNDUgMzMuNUg1NS42NzU2VjM1SDU1LjcwNDVWMzMuNVpNNTUuNzMzNCAzMy41SDU1LjcwNDVWMzVINTUuNzMzNFYzMy41Wk01NS43NjIzIDMzLjVINTUuNzMzNFYzNUg1NS43NjIzVjMzLjVaTTU1Ljc5MTEgMzMuNUg1NS43NjIzVjM1SDU1Ljc5MTFWMzMuNVpNNTUuODE5OSAzMy41SDU1Ljc5MTFWMzVINTUuODE5OVYzMy41Wk01NS44NDg3IDMzLjVINTUuODE5OVYzNUg1NS44NDg3VjMzLjVaTTU1Ljg3NzQgMzMuNUg1NS44NDg3VjM1SDU1Ljg3NzRWMzMuNVpNNTUuOTA2IDMzLjVINTUuODc3NFYzNUg1NS45MDZWMzMuNVpNNTUuOTM0NiAzMy41SDU1LjkwNlYzNUg1NS45MzQ2VjMzLjVaTTU1Ljk2MzIgMzMuNUg1NS45MzQ2VjM1SDU1Ljk2MzJWMzMuNVpNNTUuOTkxNyAzMy41SDU1Ljk2MzJWMzVINTUuOTkxN1YzMy41Wk01Ni4wMjAyIDMzLjVINTUuOTkxN1YzNUg1Ni4wMjAyVjMzLjVaTTU2LjA0ODcgMzMuNUg1Ni4wMjAyVjM1SDU2LjA0ODdWMzMuNVpNNTYuMDc3MSAzMy41SDU2LjA0ODdWMzVINTYuMDc3MVYzMy41Wk01Ni4xMDU1IDMzLjVINTYuMDc3MVYzNUg1Ni4xMDU1VjMzLjVaTTU2LjEzMzggMzMuNUg1Ni4xMDU1VjM1SDU2LjEzMzhWMzMuNVpNNTYuMTYyMSAzMy41SDU2LjEzMzhWMzVINTYuMTYyMVYzMy41Wk01Ni4xOTAzIDMzLjVINTYuMTYyMVYzNUg1Ni4xOTAzVjMzLjVaTTU2LjIxODUgMzMuNUg1Ni4xOTAzVjM1SDU2LjIxODVWMzMuNVpNNTYuMjQ2NyAzMy41SDU2LjIxODVWMzVINTYuMjQ2N1YzMy41Wk01Ni4yNzQ4IDMzLjVINTYuMjQ2N1YzNUg1Ni4yNzQ4VjMzLjVaTTU2LjMwMjkgMzMuNUg1Ni4yNzQ4VjM1SDU2LjMwMjlWMzMuNVpNNTYuMzMwOSAzMy41SDU2LjMwMjlWMzVINTYuMzMwOVYzMy41Wk01Ni4zNTg5IDMzLjVINTYuMzMwOVYzNUg1Ni4zNTg5VjMzLjVaTTU2LjM4NjkgMzMuNUg1Ni4zNTg5VjM1SDU2LjM4NjlWMzMuNVpNNTYuNDE0OCAzMy41SDU2LjM4NjlWMzVINTYuNDE0OFYzMy41Wk01Ni40NDI2IDMzLjVINTYuNDE0OFYzNUg1Ni40NDI2VjMzLjVaTTU2LjQ3MDUgMzMuNUg1Ni40NDI2VjM1SDU2LjQ3MDVWMzMuNVpNNTYuNDk4MyAzMy41SDU2LjQ3MDVWMzVINTYuNDk4M1YzMy41Wk01Ni41MjYgMzMuNUg1Ni40OTgzVjM1SDU2LjUyNlYzMy41Wk01Ni41NTM3IDMzLjVINTYuNTI2VjM1SDU2LjU1MzdWMzMuNVpNNTYuNTgxNCAzMy41SDU2LjU1MzdWMzVINTYuNTgxNFYzMy41Wk01Ni42MDkgMzMuNUg1Ni41ODE0VjM1SDU2LjYwOVYzMy41Wk01Ni42MzY2IDMzLjVINTYuNjA5VjM1SDU2LjYzNjZWMzMuNVpNNTYuNjY0MSAzMy41SDU2LjYzNjZWMzVINTYuNjY0MVYzMy41Wk01Ni42OTE2IDMzLjVINTYuNjY0MVYzNUg1Ni42OTE2VjMzLjVaTTU2LjcxOTEgMzMuNUg1Ni42OTE2VjM1SDU2LjcxOTFWMzMuNVpNNTYuNzQ2NSAzMy41SDU2LjcxOTFWMzVINTYuNzQ2NVYzMy41Wk01Ni43NzM5IDMzLjVINTYuNzQ2NVYzNUg1Ni43NzM5VjMzLjVaTTU2LjgwMTIgMzMuNUg1Ni43NzM5VjM1SDU2LjgwMTJWMzMuNVpNNTYuODI4NSAzMy41SDU2LjgwMTJWMzVINTYuODI4NVYzMy41Wk01Ni44NTU3IDMzLjVINTYuODI4NVYzNUg1Ni44NTU3VjMzLjVaTTU2Ljg4MjkgMzMuNUg1Ni44NTU3VjM1SDU2Ljg4MjlWMzMuNVpNNTYuOTEwMSAzMy41SDU2Ljg4MjlWMzVINTYuOTEwMVYzMy41Wk01Ni45MzcyIDMzLjVINTYuOTEwMVYzNUg1Ni45MzcyVjMzLjVaTTU2Ljk2NDMgMzMuNUg1Ni45MzcyVjM1SDU2Ljk2NDNWMzMuNVpNNTYuOTkxMyAzMy41SDU2Ljk2NDNWMzVINTYuOTkxM1YzMy41Wk01Ny4wMTgzIDMzLjVINTYuOTkxM1YzNUg1Ny4wMTgzVjMzLjVaTTU3LjA0NTMgMzMuNUg1Ny4wMTgzVjM1SDU3LjA0NTNWMzMuNVpNNTcuMDcyMiAzMy41SDU3LjA0NTNWMzVINTcuMDcyMlYzMy41Wk01Ny4wOTkxIDMzLjVINTcuMDcyMlYzNUg1Ny4wOTkxVjMzLjVaTTU3LjEyNTkgMzMuNUg1Ny4wOTkxVjM1SDU3LjEyNTlWMzMuNVpNNTcuMTUyNyAzMy41SDU3LjEyNTlWMzVINTcuMTUyN1YzMy41Wk01Ny4xNzk1IDMzLjVINTcuMTUyN1YzNUg1Ny4xNzk1VjMzLjVaTTU3LjIwNjIgMzMuNUg1Ny4xNzk1VjM1SDU3LjIwNjJWMzMuNVpNNTcuMjMyOCAzMy41SDU3LjIwNjJWMzVINTcuMjMyOFYzMy41Wk01Ny4yNTk1IDMzLjVINTcuMjMyOFYzNUg1Ny4yNTk1VjMzLjVaTTU3LjI4NiAzMy41SDU3LjI1OTVWMzVINTcuMjg2VjMzLjVaTTU3LjMxMjYgMzMuNUg1Ny4yODZWMzVINTcuMzEyNlYzMy41Wk01Ny4zMzkxIDMzLjVINTcuMzEyNlYzNUg1Ny4zMzkxVjMzLjVaTTU3LjM2NTUgMzMuNUg1Ny4zMzkxVjM1SDU3LjM2NTVWMzMuNVpNNTcuMzkyIDMzLjVINTcuMzY1NVYzNUg1Ny4zOTJWMzMuNVpNNTcuNDE4MyAzMy41SDU3LjM5MlYzNUg1Ny40MTgzVjMzLjVaTTU3LjQ0NDcgMzMuNUg1Ny40MTgzVjM1SDU3LjQ0NDdWMzMuNVpNNTcuNDcxIDMzLjVINTcuNDQ0N1YzNUg1Ny40NzFWMzMuNVpNNTcuNDk3MiAzMy41SDU3LjQ3MVYzNUg1Ny40OTcyVjMzLjVaTTU3LjUyMzQgMzMuNUg1Ny40OTcyVjM1SDU3LjUyMzRWMzMuNVpNNTcuNTQ5NiAzMy41SDU3LjUyMzRWMzVINTcuNTQ5NlYzMy41Wk01Ny41NzU3IDMzLjVINTcuNTQ5NlYzNUg1Ny41NzU3VjMzLjVaTTU3LjYwMTggMzMuNUg1Ny41NzU3VjM1SDU3LjYwMThWMzMuNVpNNTcuNjI3OCAzMy41SDU3LjYwMThWMzVINTcuNjI3OFYzMy41Wk01Ny42NTM5IDMzLjVINTcuNjI3OFYzNUg1Ny42NTM5VjMzLjVaTTU3LjY3OTggMzMuNUg1Ny42NTM5VjM1SDU3LjY3OThWMzMuNVpNNTcuNzA1NyAzMy41SDU3LjY3OThWMzVINTcuNzA1N1YzMy41Wk01Ny43MzE2IDMzLjVINTcuNzA1N1YzNUg1Ny43MzE2VjMzLjVaTTU3Ljc1NzQgMzMuNUg1Ny43MzE2VjM1SDU3Ljc1NzRWMzMuNVpNNTcuNzgzMiAzMy41SDU3Ljc1NzRWMzVINTcuNzgzMlYzMy41Wk01Ny44MDkgMzMuNUg1Ny43ODMyVjM1SDU3LjgwOVYzMy41Wk01Ny44MzQ3IDMzLjVINTcuODA5VjM1SDU3LjgzNDdWMzMuNVpNNTcuODYwNCAzMy41SDU3LjgzNDdWMzVINTcuODYwNFYzMy41Wk01Ny44ODYgMzMuNUg1Ny44NjA0VjM1SDU3Ljg4NlYzMy41Wk01Ny45MTE2IDMzLjVINTcuODg2VjM1SDU3LjkxMTZWMzMuNVpNNTcuOTM3MSAzMy41SDU3LjkxMTZWMzVINTcuOTM3MVYzMy41Wk01Ny45NjI2IDMzLjVINTcuOTM3MVYzNUg1Ny45NjI2VjMzLjVaTTU3Ljk4ODEgMzMuNUg1Ny45NjI2VjM1SDU3Ljk4ODFWMzMuNVpNNTguMDEzNSAzMy41SDU3Ljk4ODFWMzVINTguMDEzNVYzMy41Wk01OC4wMzg5IDMzLjVINTguMDEzNVYzNUg1OC4wMzg5VjMzLjVaTTU4LjA2NDIgMzMuNUg1OC4wMzg5VjM1SDU4LjA2NDJWMzMuNVpNNTguMDg5NSAzMy41SDU4LjA2NDJWMzVINTguMDg5NVYzMy41Wk01OC4xMTQ4IDMzLjVINTguMDg5NVYzNUg1OC4xMTQ4VjMzLjVaTTU4LjE0IDMzLjVINTguMTE0OFYzNUg1OC4xNFYzMy41Wk01OC4xNjUyIDMzLjVINTguMTRWMzVINTguMTY1MlYzMy41Wk01OC4xOTAzIDMzLjVINTguMTY1MlYzNUg1OC4xOTAzVjMzLjVaTTU4LjIxNTQgMzMuNUg1OC4xOTAzVjM1SDU4LjIxNTRWMzMuNVpNNTguMjQwNSAzMy41SDU4LjIxNTRWMzVINTguMjQwNVYzMy41Wk01OC4yNjU1IDMzLjVINTguMjQwNVYzNUg1OC4yNjU1VjMzLjVaTTU4LjI5MDQgMzMuNUg1OC4yNjU1VjM1SDU4LjI5MDRWMzMuNVpNNTguMzE1MyAzMy41SDU4LjI5MDRWMzVINTguMzE1M1YzMy41Wk01OC4zNDAyIDMzLjVINTguMzE1M1YzNUg1OC4zNDAyVjMzLjVaTTU4LjM2NTEgMzMuNUg1OC4zNDAyVjM1SDU4LjM2NTFWMzMuNVpNNTguMzg5OSAzMy41SDU4LjM2NTFWMzVINTguMzg5OVYzMy41Wk01OC40MTQ2IDMzLjVINTguMzg5OVYzNUg1OC40MTQ2VjMzLjVaTTU4LjQzOTMgMzMuNUg1OC40MTQ2VjM1SDU4LjQzOTNWMzMuNVpNNTguNDY0IDMzLjVINTguNDM5M1YzNUg1OC40NjRWMzMuNVpNNTguNDg4NiAzMy41SDU4LjQ2NFYzNUg1OC40ODg2VjMzLjVaTTU4LjUxMzIgMzMuNUg1OC40ODg2VjM1SDU4LjUxMzJWMzMuNVpNNTguNTM3OCAzMy41SDU4LjUxMzJWMzVINTguNTM3OFYzMy41Wk01OC41NjIzIDMzLjVINTguNTM3OFYzNUg1OC41NjIzVjMzLjVaTTU4LjU4NjggMzMuNUg1OC41NjIzVjM1SDU4LjU4NjhWMzMuNVpNNTguNjExMiAzMy41SDU4LjU4NjhWMzVINTguNjExMlYzMy41Wk01OC42MzU2IDMzLjVINTguNjExMlYzNUg1OC42MzU2VjMzLjVaTTU4LjY1OTkgMzMuNUg1OC42MzU2VjM1SDU4LjY1OTlWMzMuNVpNNTguNjg0MiAzMy41SDU4LjY1OTlWMzVINTguNjg0MlYzMy41Wk01OC43MDg1IDMzLjVINTguNjg0MlYzNUg1OC43MDg1VjMzLjVaTTU4LjczMjcgMzMuNUg1OC43MDg1VjM1SDU4LjczMjdWMzMuNVpNNTguNzU2OSAzMy41SDU4LjczMjdWMzVINTguNzU2OVYzMy41Wk01OC43ODEgMzMuNUg1OC43NTY5VjM1SDU4Ljc4MVYzMy41Wk01OC44MDUxIDMzLjVINTguNzgxVjM1SDU4LjgwNTFWMzMuNVpNNTguODI5MiAzMy41SDU4LjgwNTFWMzVINTguODI5MlYzMy41Wk01OC44NTMyIDMzLjVINTguODI5MlYzNUg1OC44NTMyVjMzLjVaTTU4Ljg3NzEgMzMuNUg1OC44NTMyVjM1SDU4Ljg3NzFWMzMuNVpNNTguOTAxMSAzMy41SDU4Ljg3NzFWMzVINTguOTAxMVYzMy41Wk01OC45MjQ5IDMzLjVINTguOTAxMVYzNUg1OC45MjQ5VjMzLjVaTTU4Ljk0ODggMzMuNUg1OC45MjQ5VjM1SDU4Ljk0ODhWMzMuNVpNNTguOTcyNiAzMy41SDU4Ljk0ODhWMzVINTguOTcyNlYzMy41Wk01OC45OTY0IDMzLjVINTguOTcyNlYzNUg1OC45OTY0VjMzLjVaTTU5LjAyMDEgMzMuNUg1OC45OTY0VjM1SDU5LjAyMDFWMzMuNVpNNTkuMDQzNyAzMy41SDU5LjAyMDFWMzVINTkuMDQzN1YzMy41Wk01OS4wNjc0IDMzLjVINTkuMDQzN1YzNUg1OS4wNjc0VjMzLjVaTTU5LjA5MSAzMy41SDU5LjA2NzRWMzVINTkuMDkxVjMzLjVaTTU5LjExNDUgMzMuNUg1OS4wOTFWMzVINTkuMTE0NVYzMy41Wk01OS4xMzggMzMuNUg1OS4xMTQ1VjM1SDU5LjEzOFYzMy41Wk01OS4xNjE1IDMzLjVINTkuMTM4VjM1SDU5LjE2MTVWMzMuNVpNNTkuMTg0OSAzMy41SDU5LjE2MTVWMzVINTkuMTg0OVYzMy41Wk01OS4yMDgzIDMzLjVINTkuMTg0OVYzNUg1OS4yMDgzVjMzLjVaTTU5LjIzMTcgMzMuNUg1OS4yMDgzVjM1SDU5LjIzMTdWMzMuNVpNNTkuMjU1IDMzLjVINTkuMjMxN1YzNUg1OS4yNTVWMzMuNVpNNTkuMjc4MiAzMy41SDU5LjI1NVYzNUg1OS4yNzgyVjMzLjVaTTU5LjMwMTUgMzMuNUg1OS4yNzgyVjM1SDU5LjMwMTVWMzMuNVpNNTkuMzI0NyAzMy41SDU5LjMwMTVWMzVINTkuMzI0N1YzMy41Wk01OS4zNDc4IDMzLjVINTkuMzI0N1YzNUg1OS4zNDc4VjMzLjVaTTU5LjM3MDkgMzMuNUg1OS4zNDc4VjM1SDU5LjM3MDlWMzMuNVpNNTkuMzkzOSAzMy41SDU5LjM3MDlWMzVINTkuMzkzOVYzMy41Wk01OS40MTcgMzMuNUg1OS4zOTM5VjM1SDU5LjQxN1YzMy41Wk01OS40Mzk5IDMzLjVINTkuNDE3VjM1SDU5LjQzOTlWMzMuNVpNNTkuNDYyOSAzMy41SDU5LjQzOTlWMzVINTkuNDYyOVYzMy41Wk01OS40ODU4IDMzLjVINTkuNDYyOVYzNUg1OS40ODU4VjMzLjVaTTU5LjUwODYgMzMuNUg1OS40ODU4VjM1SDU5LjUwODZWMzMuNVpNNTkuNTMxNCAzMy41SDU5LjUwODZWMzVINTkuNTMxNFYzMy41Wk01OS41NTQyIDMzLjVINTkuNTMxNFYzNUg1OS41NTQyVjMzLjVaTTU5LjU3NjkgMzMuNUg1OS41NTQyVjM1SDU5LjU3NjlWMzMuNVpNNTkuNTk5NiAzMy41SDU5LjU3NjlWMzVINTkuNTk5NlYzMy41Wk01OS42MjIyIDMzLjVINTkuNTk5NlYzNUg1OS42MjIyVjMzLjVaTTU5LjY0NDggMzMuNUg1OS42MjIyVjM1SDU5LjY0NDhWMzMuNVpNNTkuNjY3NCAzMy41SDU5LjY0NDhWMzVINTkuNjY3NFYzMy41Wk01OS42ODk5IDMzLjVINTkuNjY3NFYzNUg1OS42ODk5VjMzLjVaTTU5LjcxMjQgMzMuNUg1OS42ODk5VjM1SDU5LjcxMjRWMzMuNVpNNTkuNzM0OCAzMy41SDU5LjcxMjRWMzVINTkuNzM0OFYzMy41Wk01OS43NTcyIDMzLjVINTkuNzM0OFYzNUg1OS43NTcyVjMzLjVaTTU5Ljc3OTUgMzMuNUg1OS43NTcyVjM1SDU5Ljc3OTVWMzMuNVpNNTkuODAxOCAzMy41SDU5Ljc3OTVWMzVINTkuODAxOFYzMy41Wk01OS44MjQxIDMzLjVINTkuODAxOFYzNUg1OS44MjQxVjMzLjVaTTU5Ljg0NjMgMzMuNUg1OS44MjQxVjM1SDU5Ljg0NjNWMzMuNVpNNTkuODY4NSAzMy41SDU5Ljg0NjNWMzVINTkuODY4NVYzMy41Wk01OS44OTA3IDMzLjVINTkuODY4NVYzNUg1OS44OTA3VjMzLjVaTTU5LjkxMjggMzMuNUg1OS44OTA3VjM1SDU5LjkxMjhWMzMuNVpNNTkuOTM0OCAzMy41SDU5LjkxMjhWMzVINTkuOTM0OFYzMy41Wk01OS45NTY4IDMzLjVINTkuOTM0OFYzNUg1OS45NTY4VjMzLjVaTTU5Ljk3ODggMzMuNUg1OS45NTY4VjM1SDU5Ljk3ODhWMzMuNVpNNjAuMDAwOCAzMy41SDU5Ljk3ODhWMzVINjAuMDAwOFYzMy41Wk02MC4wMjI3IDMzLjVINjAuMDAwOFYzNUg2MC4wMjI3VjMzLjVaTTYwLjA0NDUgMzMuNUg2MC4wMjI3VjM1SDYwLjA0NDVWMzMuNVpNNjAuMDY2MyAzMy41SDYwLjA0NDVWMzVINjAuMDY2M1YzMy41Wk02MC4wODgxIDMzLjVINjAuMDY2M1YzNUg2MC4wODgxVjMzLjVaTTYwLjEwOTggMzMuNUg2MC4wODgxVjM1SDYwLjEwOThWMzMuNVpNNjAuMTMxNSAzMy41SDYwLjEwOThWMzVINjAuMTMxNVYzMy41Wk02MC4xNTMxIDMzLjVINjAuMTMxNVYzNUg2MC4xNTMxVjMzLjVaTTYwLjE3NDcgMzMuNUg2MC4xNTMxVjM1SDYwLjE3NDdWMzMuNVpNNjAuMTk2MyAzMy41SDYwLjE3NDdWMzVINjAuMTk2M1YzMy41Wk02MC4yMTc4IDMzLjVINjAuMTk2M1YzNUg2MC4yMTc4VjMzLjVaTTYwLjIzOTMgMzMuNUg2MC4yMTc4VjM1SDYwLjIzOTNWMzMuNVpNNjAuMjYwNyAzMy41SDYwLjIzOTNWMzVINjAuMjYwN1YzMy41Wk02MC4yODIxIDMzLjVINjAuMjYwN1YzNUg2MC4yODIxVjMzLjVaTTYwLjMwMzUgMzMuNUg2MC4yODIxVjM1SDYwLjMwMzVWMzMuNVpNNjAuMzI0OCAzMy41SDYwLjMwMzVWMzVINjAuMzI0OFYzMy41Wk02MC4zNDYxIDMzLjVINjAuMzI0OFYzNUg2MC4zNDYxVjMzLjVaTTYxLjA5NjEgMzUuNzVWMzQuMjVINTkuNTk2MVYzNS43NUg2MS4wOTYxWk02MC4zMjQ4IDM2LjVINjAuMzQ2MVYzNUg2MC4zMjQ4VjM2LjVaTTYwLjMwMzUgMzYuNUg2MC4zMjQ4VjM1SDYwLjMwMzVWMzYuNVpNNjAuMjgyMSAzNi41SDYwLjMwMzVWMzVINjAuMjgyMVYzNi41Wk02MC4yNjA3IDM2LjVINjAuMjgyMVYzNUg2MC4yNjA3VjM2LjVaTTYwLjIzOTMgMzYuNUg2MC4yNjA3VjM1SDYwLjIzOTNWMzYuNVpNNjAuMjE3OCAzNi41SDYwLjIzOTNWMzVINjAuMjE3OFYzNi41Wk02MC4xOTYzIDM2LjVINjAuMjE3OFYzNUg2MC4xOTYzVjM2LjVaTTYwLjE3NDcgMzYuNUg2MC4xOTYzVjM1SDYwLjE3NDdWMzYuNVpNNjAuMTUzMSAzNi41SDYwLjE3NDdWMzVINjAuMTUzMVYzNi41Wk02MC4xMzE1IDM2LjVINjAuMTUzMVYzNUg2MC4xMzE1VjM2LjVaTTYwLjEwOTggMzYuNUg2MC4xMzE1VjM1SDYwLjEwOThWMzYuNVpNNjAuMDg4MSAzNi41SDYwLjEwOThWMzVINjAuMDg4MVYzNi41Wk02MC4wNjYzIDM2LjVINjAuMDg4MVYzNUg2MC4wNjYzVjM2LjVaTTYwLjA0NDUgMzYuNUg2MC4wNjYzVjM1SDYwLjA0NDVWMzYuNVpNNjAuMDIyNyAzNi41SDYwLjA0NDVWMzVINjAuMDIyN1YzNi41Wk02MC4wMDA4IDM2LjVINjAuMDIyN1YzNUg2MC4wMDA4VjM2LjVaTTU5Ljk3ODggMzYuNUg2MC4wMDA4VjM1SDU5Ljk3ODhWMzYuNVpNNTkuOTU2OCAzNi41SDU5Ljk3ODhWMzVINTkuOTU2OFYzNi41Wk01OS45MzQ4IDM2LjVINTkuOTU2OFYzNUg1OS45MzQ4VjM2LjVaTTU5LjkxMjggMzYuNUg1OS45MzQ4VjM1SDU5LjkxMjhWMzYuNVpNNTkuODkwNyAzNi41SDU5LjkxMjhWMzVINTkuODkwN1YzNi41Wk01OS44Njg1IDM2LjVINTkuODkwN1YzNUg1OS44Njg1VjM2LjVaTTU5Ljg0NjMgMzYuNUg1OS44Njg1VjM1SDU5Ljg0NjNWMzYuNVpNNTkuODI0MSAzNi41SDU5Ljg0NjNWMzVINTkuODI0MVYzNi41Wk01OS44MDE4IDM2LjVINTkuODI0MVYzNUg1OS44MDE4VjM2LjVaTTU5Ljc3OTUgMzYuNUg1OS44MDE4VjM1SDU5Ljc3OTVWMzYuNVpNNTkuNzU3MiAzNi41SDU5Ljc3OTVWMzVINTkuNzU3MlYzNi41Wk01OS43MzQ4IDM2LjVINTkuNzU3MlYzNUg1OS43MzQ4VjM2LjVaTTU5LjcxMjQgMzYuNUg1OS43MzQ4VjM1SDU5LjcxMjRWMzYuNVpNNTkuNjg5OSAzNi41SDU5LjcxMjRWMzVINTkuNjg5OVYzNi41Wk01OS42Njc0IDM2LjVINTkuNjg5OVYzNUg1OS42Njc0VjM2LjVaTTU5LjY0NDggMzYuNUg1OS42Njc0VjM1SDU5LjY0NDhWMzYuNVpNNTkuNjIyMiAzNi41SDU5LjY0NDhWMzVINTkuNjIyMlYzNi41Wk01OS41OTk2IDM2LjVINTkuNjIyMlYzNUg1OS41OTk2VjM2LjVaTTU5LjU3NjkgMzYuNUg1OS41OTk2VjM1SDU5LjU3NjlWMzYuNVpNNTkuNTU0MiAzNi41SDU5LjU3NjlWMzVINTkuNTU0MlYzNi41Wk01OS41MzE0IDM2LjVINTkuNTU0MlYzNUg1OS41MzE0VjM2LjVaTTU5LjUwODYgMzYuNUg1OS41MzE0VjM1SDU5LjUwODZWMzYuNVpNNTkuNDg1OCAzNi41SDU5LjUwODZWMzVINTkuNDg1OFYzNi41Wk01OS40NjI5IDM2LjVINTkuNDg1OFYzNUg1OS40NjI5VjM2LjVaTTU5LjQzOTkgMzYuNUg1OS40NjI5VjM1SDU5LjQzOTlWMzYuNVpNNTkuNDE3IDM2LjVINTkuNDM5OVYzNUg1OS40MTdWMzYuNVpNNTkuMzkzOSAzNi41SDU5LjQxN1YzNUg1OS4zOTM5VjM2LjVaTTU5LjM3MDkgMzYuNUg1OS4zOTM5VjM1SDU5LjM3MDlWMzYuNVpNNTkuMzQ3OCAzNi41SDU5LjM3MDlWMzVINTkuMzQ3OFYzNi41Wk01OS4zMjQ3IDM2LjVINTkuMzQ3OFYzNUg1OS4zMjQ3VjM2LjVaTTU5LjMwMTUgMzYuNUg1OS4zMjQ3VjM1SDU5LjMwMTVWMzYuNVpNNTkuMjc4MiAzNi41SDU5LjMwMTVWMzVINTkuMjc4MlYzNi41Wk01OS4yNTUgMzYuNUg1OS4yNzgyVjM1SDU5LjI1NVYzNi41Wk01OS4yMzE3IDM2LjVINTkuMjU1VjM1SDU5LjIzMTdWMzYuNVpNNTkuMjA4MyAzNi41SDU5LjIzMTdWMzVINTkuMjA4M1YzNi41Wk01OS4xODQ5IDM2LjVINTkuMjA4M1YzNUg1OS4xODQ5VjM2LjVaTTU5LjE2MTUgMzYuNUg1OS4xODQ5VjM1SDU5LjE2MTVWMzYuNVpNNTkuMTM4IDM2LjVINTkuMTYxNVYzNUg1OS4xMzhWMzYuNVpNNTkuMTE0NSAzNi41SDU5LjEzOFYzNUg1OS4xMTQ1VjM2LjVaTTU5LjA5MSAzNi41SDU5LjExNDVWMzVINTkuMDkxVjM2LjVaTTU5LjA2NzQgMzYuNUg1OS4wOTFWMzVINTkuMDY3NFYzNi41Wk01OS4wNDM3IDM2LjVINTkuMDY3NFYzNUg1OS4wNDM3VjM2LjVaTTU5LjAyMDEgMzYuNUg1OS4wNDM3VjM1SDU5LjAyMDFWMzYuNVpNNTguOTk2NCAzNi41SDU5LjAyMDFWMzVINTguOTk2NFYzNi41Wk01OC45NzI2IDM2LjVINTguOTk2NFYzNUg1OC45NzI2VjM2LjVaTTU4Ljk0ODggMzYuNUg1OC45NzI2VjM1SDU4Ljk0ODhWMzYuNVpNNTguOTI0OSAzNi41SDU4Ljk0ODhWMzVINTguOTI0OVYzNi41Wk01OC45MDExIDM2LjVINTguOTI0OVYzNUg1OC45MDExVjM2LjVaTTU4Ljg3NzEgMzYuNUg1OC45MDExVjM1SDU4Ljg3NzFWMzYuNVpNNTguODUzMiAzNi41SDU4Ljg3NzFWMzVINTguODUzMlYzNi41Wk01OC44MjkyIDM2LjVINTguODUzMlYzNUg1OC44MjkyVjM2LjVaTTU4LjgwNTEgMzYuNUg1OC44MjkyVjM1SDU4LjgwNTFWMzYuNVpNNTguNzgxIDM2LjVINTguODA1MVYzNUg1OC43ODFWMzYuNVpNNTguNzU2OSAzNi41SDU4Ljc4MVYzNUg1OC43NTY5VjM2LjVaTTU4LjczMjcgMzYuNUg1OC43NTY5VjM1SDU4LjczMjdWMzYuNVpNNTguNzA4NSAzNi41SDU4LjczMjdWMzVINTguNzA4NVYzNi41Wk01OC42ODQyIDM2LjVINTguNzA4NVYzNUg1OC42ODQyVjM2LjVaTTU4LjY1OTkgMzYuNUg1OC42ODQyVjM1SDU4LjY1OTlWMzYuNVpNNTguNjM1NiAzNi41SDU4LjY1OTlWMzVINTguNjM1NlYzNi41Wk01OC42MTEyIDM2LjVINTguNjM1NlYzNUg1OC42MTEyVjM2LjVaTTU4LjU4NjggMzYuNUg1OC42MTEyVjM1SDU4LjU4NjhWMzYuNVpNNTguNTYyMyAzNi41SDU4LjU4NjhWMzVINTguNTYyM1YzNi41Wk01OC41Mzc4IDM2LjVINTguNTYyM1YzNUg1OC41Mzc4VjM2LjVaTTU4LjUxMzIgMzYuNUg1OC41Mzc4VjM1SDU4LjUxMzJWMzYuNVpNNTguNDg4NiAzNi41SDU4LjUxMzJWMzVINTguNDg4NlYzNi41Wk01OC40NjQgMzYuNUg1OC40ODg2VjM1SDU4LjQ2NFYzNi41Wk01OC40MzkzIDM2LjVINTguNDY0VjM1SDU4LjQzOTNWMzYuNVpNNTguNDE0NiAzNi41SDU4LjQzOTNWMzVINTguNDE0NlYzNi41Wk01OC4zODk5IDM2LjVINTguNDE0NlYzNUg1OC4zODk5VjM2LjVaTTU4LjM2NTEgMzYuNUg1OC4zODk5VjM1SDU4LjM2NTFWMzYuNVpNNTguMzQwMiAzNi41SDU4LjM2NTFWMzVINTguMzQwMlYzNi41Wk01OC4zMTUzIDM2LjVINTguMzQwMlYzNUg1OC4zMTUzVjM2LjVaTTU4LjI5MDQgMzYuNUg1OC4zMTUzVjM1SDU4LjI5MDRWMzYuNVpNNTguMjY1NSAzNi41SDU4LjI5MDRWMzVINTguMjY1NVYzNi41Wk01OC4yNDA1IDM2LjVINTguMjY1NVYzNUg1OC4yNDA1VjM2LjVaTTU4LjIxNTQgMzYuNUg1OC4yNDA1VjM1SDU4LjIxNTRWMzYuNVpNNTguMTkwMyAzNi41SDU4LjIxNTRWMzVINTguMTkwM1YzNi41Wk01OC4xNjUyIDM2LjVINTguMTkwM1YzNUg1OC4xNjUyVjM2LjVaTTU4LjE0IDM2LjVINTguMTY1MlYzNUg1OC4xNFYzNi41Wk01OC4xMTQ4IDM2LjVINTguMTRWMzVINTguMTE0OFYzNi41Wk01OC4wODk1IDM2LjVINTguMTE0OFYzNUg1OC4wODk1VjM2LjVaTTU4LjA2NDIgMzYuNUg1OC4wODk1VjM1SDU4LjA2NDJWMzYuNVpNNTguMDM4OSAzNi41SDU4LjA2NDJWMzVINTguMDM4OVYzNi41Wk01OC4wMTM1IDM2LjVINTguMDM4OVYzNUg1OC4wMTM1VjM2LjVaTTU3Ljk4ODEgMzYuNUg1OC4wMTM1VjM1SDU3Ljk4ODFWMzYuNVpNNTcuOTYyNiAzNi41SDU3Ljk4ODFWMzVINTcuOTYyNlYzNi41Wk01Ny45MzcxIDM2LjVINTcuOTYyNlYzNUg1Ny45MzcxVjM2LjVaTTU3LjkxMTYgMzYuNUg1Ny45MzcxVjM1SDU3LjkxMTZWMzYuNVpNNTcuODg2IDM2LjVINTcuOTExNlYzNUg1Ny44ODZWMzYuNVpNNTcuODYwNCAzNi41SDU3Ljg4NlYzNUg1Ny44NjA0VjM2LjVaTTU3LjgzNDcgMzYuNUg1Ny44NjA0VjM1SDU3LjgzNDdWMzYuNVpNNTcuODA5IDM2LjVINTcuODM0N1YzNUg1Ny44MDlWMzYuNVpNNTcuNzgzMiAzNi41SDU3LjgwOVYzNUg1Ny43ODMyVjM2LjVaTTU3Ljc1NzQgMzYuNUg1Ny43ODMyVjM1SDU3Ljc1NzRWMzYuNVpNNTcuNzMxNiAzNi41SDU3Ljc1NzRWMzVINTcuNzMxNlYzNi41Wk01Ny43MDU3IDM2LjVINTcuNzMxNlYzNUg1Ny43MDU3VjM2LjVaTTU3LjY3OTggMzYuNUg1Ny43MDU3VjM1SDU3LjY3OThWMzYuNVpNNTcuNjUzOSAzNi41SDU3LjY3OThWMzVINTcuNjUzOVYzNi41Wk01Ny42Mjc4IDM2LjVINTcuNjUzOVYzNUg1Ny42Mjc4VjM2LjVaTTU3LjYwMTggMzYuNUg1Ny42Mjc4VjM1SDU3LjYwMThWMzYuNVpNNTcuNTc1NyAzNi41SDU3LjYwMThWMzVINTcuNTc1N1YzNi41Wk01Ny41NDk2IDM2LjVINTcuNTc1N1YzNUg1Ny41NDk2VjM2LjVaTTU3LjUyMzQgMzYuNUg1Ny41NDk2VjM1SDU3LjUyMzRWMzYuNVpNNTcuNDk3MiAzNi41SDU3LjUyMzRWMzVINTcuNDk3MlYzNi41Wk01Ny40NzEgMzYuNUg1Ny40OTcyVjM1SDU3LjQ3MVYzNi41Wk01Ny40NDQ3IDM2LjVINTcuNDcxVjM1SDU3LjQ0NDdWMzYuNVpNNTcuNDE4MyAzNi41SDU3LjQ0NDdWMzVINTcuNDE4M1YzNi41Wk01Ny4zOTIgMzYuNUg1Ny40MTgzVjM1SDU3LjM5MlYzNi41Wk01Ny4zNjU1IDM2LjVINTcuMzkyVjM1SDU3LjM2NTVWMzYuNVpNNTcuMzM5MSAzNi41SDU3LjM2NTVWMzVINTcuMzM5MVYzNi41Wk01Ny4zMTI2IDM2LjVINTcuMzM5MVYzNUg1Ny4zMTI2VjM2LjVaTTU3LjI4NiAzNi41SDU3LjMxMjZWMzVINTcuMjg2VjM2LjVaTTU3LjI1OTUgMzYuNUg1Ny4yODZWMzVINTcuMjU5NVYzNi41Wk01Ny4yMzI4IDM2LjVINTcuMjU5NVYzNUg1Ny4yMzI4VjM2LjVaTTU3LjIwNjIgMzYuNUg1Ny4yMzI4VjM1SDU3LjIwNjJWMzYuNVpNNTcuMTc5NSAzNi41SDU3LjIwNjJWMzVINTcuMTc5NVYzNi41Wk01Ny4xNTI3IDM2LjVINTcuMTc5NVYzNUg1Ny4xNTI3VjM2LjVaTTU3LjEyNTkgMzYuNUg1Ny4xNTI3VjM1SDU3LjEyNTlWMzYuNVpNNTcuMDk5MSAzNi41SDU3LjEyNTlWMzVINTcuMDk5MVYzNi41Wk01Ny4wNzIyIDM2LjVINTcuMDk5MVYzNUg1Ny4wNzIyVjM2LjVaTTU3LjA0NTMgMzYuNUg1Ny4wNzIyVjM1SDU3LjA0NTNWMzYuNVpNNTcuMDE4MyAzNi41SDU3LjA0NTNWMzVINTcuMDE4M1YzNi41Wk01Ni45OTEzIDM2LjVINTcuMDE4M1YzNUg1Ni45OTEzVjM2LjVaTTU2Ljk2NDMgMzYuNUg1Ni45OTEzVjM1SDU2Ljk2NDNWMzYuNVpNNTYuOTM3MiAzNi41SDU2Ljk2NDNWMzVINTYuOTM3MlYzNi41Wk01Ni45MTAxIDM2LjVINTYuOTM3MlYzNUg1Ni45MTAxVjM2LjVaTTU2Ljg4MjkgMzYuNUg1Ni45MTAxVjM1SDU2Ljg4MjlWMzYuNVpNNTYuODU1NyAzNi41SDU2Ljg4MjlWMzVINTYuODU1N1YzNi41Wk01Ni44Mjg1IDM2LjVINTYuODU1N1YzNUg1Ni44Mjg1VjM2LjVaTTU2LjgwMTIgMzYuNUg1Ni44Mjg1VjM1SDU2LjgwMTJWMzYuNVpNNTYuNzczOSAzNi41SDU2LjgwMTJWMzVINTYuNzczOVYzNi41Wk01Ni43NDY1IDM2LjVINTYuNzczOVYzNUg1Ni43NDY1VjM2LjVaTTU2LjcxOTEgMzYuNUg1Ni43NDY1VjM1SDU2LjcxOTFWMzYuNVpNNTYuNjkxNiAzNi41SDU2LjcxOTFWMzVINTYuNjkxNlYzNi41Wk01Ni42NjQxIDM2LjVINTYuNjkxNlYzNUg1Ni42NjQxVjM2LjVaTTU2LjYzNjYgMzYuNUg1Ni42NjQxVjM1SDU2LjYzNjZWMzYuNVpNNTYuNjA5IDM2LjVINTYuNjM2NlYzNUg1Ni42MDlWMzYuNVpNNTYuNTgxNCAzNi41SDU2LjYwOVYzNUg1Ni41ODE0VjM2LjVaTTU2LjU1MzcgMzYuNUg1Ni41ODE0VjM1SDU2LjU1MzdWMzYuNVpNNTYuNTI2IDM2LjVINTYuNTUzN1YzNUg1Ni41MjZWMzYuNVpNNTYuNDk4MyAzNi41SDU2LjUyNlYzNUg1Ni40OTgzVjM2LjVaTTU2LjQ3MDUgMzYuNUg1Ni40OTgzVjM1SDU2LjQ3MDVWMzYuNVpNNTYuNDQyNiAzNi41SDU2LjQ3MDVWMzVINTYuNDQyNlYzNi41Wk01Ni40MTQ4IDM2LjVINTYuNDQyNlYzNUg1Ni40MTQ4VjM2LjVaTTU2LjM4NjkgMzYuNUg1Ni40MTQ4VjM1SDU2LjM4NjlWMzYuNVpNNTYuMzU4OSAzNi41SDU2LjM4NjlWMzVINTYuMzU4OVYzNi41Wk01Ni4zMzA5IDM2LjVINTYuMzU4OVYzNUg1Ni4zMzA5VjM2LjVaTTU2LjMwMjkgMzYuNUg1Ni4zMzA5VjM1SDU2LjMwMjlWMzYuNVpNNTYuMjc0OCAzNi41SDU2LjMwMjlWMzVINTYuMjc0OFYzNi41Wk01Ni4yNDY3IDM2LjVINTYuMjc0OFYzNUg1Ni4yNDY3VjM2LjVaTTU2LjIxODUgMzYuNUg1Ni4yNDY3VjM1SDU2LjIxODVWMzYuNVpNNTYuMTkwMyAzNi41SDU2LjIxODVWMzVINTYuMTkwM1YzNi41Wk01Ni4xNjIxIDM2LjVINTYuMTkwM1YzNUg1Ni4xNjIxVjM2LjVaTTU2LjEzMzggMzYuNUg1Ni4xNjIxVjM1SDU2LjEzMzhWMzYuNVpNNTYuMTA1NSAzNi41SDU2LjEzMzhWMzVINTYuMTA1NVYzNi41Wk01Ni4wNzcxIDM2LjVINTYuMTA1NVYzNUg1Ni4wNzcxVjM2LjVaTTU2LjA0ODcgMzYuNUg1Ni4wNzcxVjM1SDU2LjA0ODdWMzYuNVpNNTYuMDIwMiAzNi41SDU2LjA0ODdWMzVINTYuMDIwMlYzNi41Wk01NS45OTE3IDM2LjVINTYuMDIwMlYzNUg1NS45OTE3VjM2LjVaTTU1Ljk2MzIgMzYuNUg1NS45OTE3VjM1SDU1Ljk2MzJWMzYuNVpNNTUuOTM0NiAzNi41SDU1Ljk2MzJWMzVINTUuOTM0NlYzNi41Wk01NS45MDYgMzYuNUg1NS45MzQ2VjM1SDU1LjkwNlYzNi41Wk01NS44Nzc0IDM2LjVINTUuOTA2VjM1SDU1Ljg3NzRWMzYuNVpNNTUuODQ4NyAzNi41SDU1Ljg3NzRWMzVINTUuODQ4N1YzNi41Wk01NS44MTk5IDM2LjVINTUuODQ4N1YzNUg1NS44MTk5VjM2LjVaTTU1Ljc5MTEgMzYuNUg1NS44MTk5VjM1SDU1Ljc5MTFWMzYuNVpNNTUuNzYyMyAzNi41SDU1Ljc5MTFWMzVINTUuNzYyM1YzNi41Wk01NS43MzM0IDM2LjVINTUuNzYyM1YzNUg1NS43MzM0VjM2LjVaTTU1LjcwNDUgMzYuNUg1NS43MzM0VjM1SDU1LjcwNDVWMzYuNVpNNTUuNjc1NiAzNi41SDU1LjcwNDVWMzVINTUuNjc1NlYzNi41Wk01NS42NDY2IDM2LjVINTUuNjc1NlYzNUg1NS42NDY2VjM2LjVaTTU1LjYxNzYgMzYuNUg1NS42NDY2VjM1SDU1LjYxNzZWMzYuNVpNNTUuNTg4NSAzNi41SDU1LjYxNzZWMzVINTUuNTg4NVYzNi41Wk01NS41NTk0IDM2LjVINTUuNTg4NVYzNUg1NS41NTk0VjM2LjVaTTU1LjUzMDIgMzYuNUg1NS41NTk0VjM1SDU1LjUzMDJWMzYuNVpNNTUuNTAxIDM2LjVINTUuNTMwMlYzNUg1NS41MDFWMzYuNVpNNTUuNDcxOCAzNi41SDU1LjUwMVYzNUg1NS40NzE4VjM2LjVaTTU1LjQ0MjUgMzYuNUg1NS40NzE4VjM1SDU1LjQ0MjVWMzYuNVpNNTUuNDEzMiAzNi41SDU1LjQ0MjVWMzVINTUuNDEzMlYzNi41Wk01NS4zODM4IDM2LjVINTUuNDEzMlYzNUg1NS4zODM4VjM2LjVaTTU1LjM1NDQgMzYuNUg1NS4zODM4VjM1SDU1LjM1NDRWMzYuNVpNNTUuMzI1IDM2LjVINTUuMzU0NFYzNUg1NS4zMjVWMzYuNVpNNTUuMjk1NSAzNi41SDU1LjMyNVYzNUg1NS4yOTU1VjM2LjVaTTU1LjI2NTkgMzYuNUg1NS4yOTU1VjM1SDU1LjI2NTlWMzYuNVpNNTUuMjM2NCAzNi41SDU1LjI2NTlWMzVINTUuMjM2NFYzNi41Wk01NS4yMDY4IDM2LjVINTUuMjM2NFYzNUg1NS4yMDY4VjM2LjVaTTU1LjE3NzEgMzYuNUg1NS4yMDY4VjM1SDU1LjE3NzFWMzYuNVpNNTUuMTQ3NCAzNi41SDU1LjE3NzFWMzVINTUuMTQ3NFYzNi41Wk01NS4xMTc3IDM2LjVINTUuMTQ3NFYzNUg1NS4xMTc3VjM2LjVaTTU1LjA4NzkgMzYuNUg1NS4xMTc3VjM1SDU1LjA4NzlWMzYuNVpNNTUuMDU4MSAzNi41SDU1LjA4NzlWMzVINTUuMDU4MVYzNi41Wk01NS4wMjgyIDM2LjVINTUuMDU4MVYzNUg1NS4wMjgyVjM2LjVaTTU0Ljk5ODMgMzYuNUg1NS4wMjgyVjM1SDU0Ljk5ODNWMzYuNVpNNTQuOTY4MyAzNi41SDU0Ljk5ODNWMzVINTQuOTY4M1YzNi41Wk01NC45Mzg0IDM2LjVINTQuOTY4M1YzNUg1NC45Mzg0VjM2LjVaTTU0LjkwODMgMzYuNUg1NC45Mzg0VjM1SDU0LjkwODNWMzYuNVpNNTQuODc4MyAzNi41SDU0LjkwODNWMzVINTQuODc4M1YzNi41Wk01NC44NDgyIDM2LjVINTQuODc4M1YzNUg1NC44NDgyVjM2LjVaTTU0LjgxOCAzNi41SDU0Ljg0ODJWMzVINTQuODE4VjM2LjVaTTU0Ljc4NzggMzYuNUg1NC44MThWMzVINTQuNzg3OFYzNi41Wk01NC43NTc2IDM2LjVINTQuNzg3OFYzNUg1NC43NTc2VjM2LjVaTTU0LjcyNzMgMzYuNUg1NC43NTc2VjM1SDU0LjcyNzNWMzYuNVpNNTQuNjk3IDM2LjVINTQuNzI3M1YzNUg1NC42OTdWMzYuNVpNNTQuNjY2NiAzNi41SDU0LjY5N1YzNUg1NC42NjY2VjM2LjVaTTU0LjYzNjIgMzYuNUg1NC42NjY2VjM1SDU0LjYzNjJWMzYuNVpNNTQuNjA1OCAzNi41SDU0LjYzNjJWMzVINTQuNjA1OFYzNi41Wk01NC41NzUzIDM2LjVINTQuNjA1OFYzNUg1NC41NzUzVjM2LjVaTTU0LjU0NDggMzYuNUg1NC41NzUzVjM1SDU0LjU0NDhWMzYuNVpNNTQuNTE0MiAzNi41SDU0LjU0NDhWMzVINTQuNTE0MlYzNi41Wk01NC40ODM2IDM2LjVINTQuNTE0MlYzNUg1NC40ODM2VjM2LjVaTTU0LjQ1MjkgMzYuNUg1NC40ODM2VjM1SDU0LjQ1MjlWMzYuNVpNNTQuNDIyMiAzNi41SDU0LjQ1MjlWMzVINTQuNDIyMlYzNi41Wk01NC4zOTE1IDM2LjVINTQuNDIyMlYzNUg1NC4zOTE1VjM2LjVaTTU0LjM2MDcgMzYuNUg1NC4zOTE1VjM1SDU0LjM2MDdWMzYuNVpNNTQuMzI5OSAzNi41SDU0LjM2MDdWMzVINTQuMzI5OVYzNi41Wk01NC4yOTkgMzYuNUg1NC4zMjk5VjM1SDU0LjI5OVYzNi41Wk01NC4yNjgxIDM2LjVINTQuMjk5VjM1SDU0LjI2ODFWMzYuNVpNNTQuMjM3MiAzNi41SDU0LjI2ODFWMzVINTQuMjM3MlYzNi41Wk01NC4yMDYyIDM2LjVINTQuMjM3MlYzNUg1NC4yMDYyVjM2LjVaTTU0LjE3NTIgMzYuNUg1NC4yMDYyVjM1SDU0LjE3NTJWMzYuNVpNNTQuMTQ0MSAzNi41SDU0LjE3NTJWMzVINTQuMTQ0MVYzNi41Wk01NC4xMTMgMzYuNUg1NC4xNDQxVjM1SDU0LjExM1YzNi41Wk01NC4wODE5IDM2LjVINTQuMTEzVjM1SDU0LjA4MTlWMzYuNVpNNTQuMDUwNyAzNi41SDU0LjA4MTlWMzVINTQuMDUwN1YzNi41Wk01NC4wMTk1IDM2LjVINTQuMDUwN1YzNUg1NC4wMTk1VjM2LjVaTTUzLjk4ODIgMzYuNUg1NC4wMTk1VjM1SDUzLjk4ODJWMzYuNVpNNTMuOTU2OSAzNi41SDUzLjk4ODJWMzVINTMuOTU2OVYzNi41Wk01My45MjU1IDM2LjVINTMuOTU2OVYzNUg1My45MjU1VjM2LjVaTTUzLjg5NDEgMzYuNUg1My45MjU1VjM1SDUzLjg5NDFWMzYuNVpNNTMuODYyNyAzNi41SDUzLjg5NDFWMzVINTMuODYyN1YzNi41Wk01My44MzEyIDM2LjVINTMuODYyN1YzNUg1My44MzEyVjM2LjVaTTUzLjc5OTcgMzYuNUg1My44MzEyVjM1SDUzLjc5OTdWMzYuNVpNNTMuNzY4MSAzNi41SDUzLjc5OTdWMzVINTMuNzY4MVYzNi41Wk01My43MzY1IDM2LjVINTMuNzY4MVYzNUg1My43MzY1VjM2LjVaTTUzLjcwNDkgMzYuNUg1My43MzY1VjM1SDUzLjcwNDlWMzYuNVpNNTMuNjczMiAzNi41SDUzLjcwNDlWMzVINTMuNjczMlYzNi41Wk01My42NDE0IDM2LjVINTMuNjczMlYzNUg1My42NDE0VjM2LjVaTTUzLjYwOTcgMzYuNUg1My42NDE0VjM1SDUzLjYwOTdWMzYuNVpNNTMuNTc3OCAzNi41SDUzLjYwOTdWMzVINTMuNTc3OFYzNi41Wk01My41NDYgMzYuNUg1My41Nzc4VjM1SDUzLjU0NlYzNi41Wk01My41MTQxIDM2LjVINTMuNTQ2VjM1SDUzLjUxNDFWMzYuNVpNNTMuNDgyMiAzNi41SDUzLjUxNDFWMzVINTMuNDgyMlYzNi41Wk01My40NTAyIDM2LjVINTMuNDgyMlYzNUg1My40NTAyVjM2LjVaTTUzLjQxODIgMzYuNUg1My40NTAyVjM1SDUzLjQxODJWMzYuNVpNNTMuMzg2MSAzNi41SDUzLjQxODJWMzVINTMuMzg2MVYzNi41Wk01My4zNTQgMzYuNUg1My4zODYxVjM1SDUzLjM1NFYzNi41Wk01My4zMjE4IDM2LjVINTMuMzU0VjM1SDUzLjMyMThWMzYuNVpNNTMuMjg5NyAzNi41SDUzLjMyMThWMzVINTMuMjg5N1YzNi41Wk01My4yNTc0IDM2LjVINTMuMjg5N1YzNUg1My4yNTc0VjM2LjVaTTUzLjIyNTIgMzYuNUg1My4yNTc0VjM1SDUzLjIyNTJWMzYuNVpNNTMuMTkyOSAzNi41SDUzLjIyNTJWMzVINTMuMTkyOVYzNi41Wk01My4xNjA1IDM2LjVINTMuMTkyOVYzNUg1My4xNjA1VjM2LjVaTTUzLjEyODEgMzYuNUg1My4xNjA1VjM1SDUzLjEyODFWMzYuNVpNNTMuMDk1NyAzNi41SDUzLjEyODFWMzVINTMuMDk1N1YzNi41Wk01My4wNjMyIDM2LjVINTMuMDk1N1YzNUg1My4wNjMyVjM2LjVaTTUzLjAzMDcgMzYuNUg1My4wNjMyVjM1SDUzLjAzMDdWMzYuNVpNNTIuOTk4MSAzNi41SDUzLjAzMDdWMzVINTIuOTk4MVYzNi41Wk01Mi45NjU1IDM2LjVINTIuOTk4MVYzNUg1Mi45NjU1VjM2LjVaTTUyLjkzMjkgMzYuNUg1Mi45NjU1VjM1SDUyLjkzMjlWMzYuNVpNNTIuOTAwMiAzNi41SDUyLjkzMjlWMzVINTIuOTAwMlYzNi41Wk01Mi44Njc1IDM2LjVINTIuOTAwMlYzNUg1Mi44Njc1VjM2LjVaTTUyLjgzNDcgMzYuNUg1Mi44Njc1VjM1SDUyLjgzNDdWMzYuNVpNNTIuODAxOSAzNi41SDUyLjgzNDdWMzVINTIuODAxOVYzNi41Wk01Mi43NjkgMzYuNUg1Mi44MDE5VjM1SDUyLjc2OVYzNi41Wk01Mi43MzYxIDM2LjVINTIuNzY5VjM1SDUyLjczNjFWMzYuNVpNNTIuNzAzMiAzNi41SDUyLjczNjFWMzVINTIuNzAzMlYzNi41Wk01Mi42NzAyIDM2LjVINTIuNzAzMlYzNUg1Mi42NzAyVjM2LjVaTTUyLjYzNzIgMzYuNUg1Mi42NzAyVjM1SDUyLjYzNzJWMzYuNVpNNTIuNjA0MiAzNi41SDUyLjYzNzJWMzVINTIuNjA0MlYzNi41Wk01Mi41NzExIDM2LjVINTIuNjA0MlYzNUg1Mi41NzExVjM2LjVaTTUyLjUzNzkgMzYuNUg1Mi41NzExVjM1SDUyLjUzNzlWMzYuNVpNNTIuNTA0NyAzNi41SDUyLjUzNzlWMzVINTIuNTA0N1YzNi41Wk01Mi40NzE1IDM2LjVINTIuNTA0N1YzNUg1Mi40NzE1VjM2LjVaTTUyLjQzODIgMzYuNUg1Mi40NzE1VjM1SDUyLjQzODJWMzYuNVpNNTIuNDA0OSAzNi41SDUyLjQzODJWMzVINTIuNDA0OVYzNi41Wk01Mi4zNzE2IDM2LjVINTIuNDA0OVYzNUg1Mi4zNzE2VjM2LjVaTTUyLjMzODIgMzYuNUg1Mi4zNzE2VjM1SDUyLjMzODJWMzYuNVpNNTIuMzA0OCAzNi41SDUyLjMzODJWMzVINTIuMzA0OFYzNi41Wk01Mi4yNzEzIDM2LjVINTIuMzA0OFYzNUg1Mi4yNzEzVjM2LjVaTTUyLjIzNzggMzYuNUg1Mi4yNzEzVjM1SDUyLjIzNzhWMzYuNVpNNTIuMjA0MiAzNi41SDUyLjIzNzhWMzVINTIuMjA0MlYzNi41Wk01Mi4xNzA2IDM2LjVINTIuMjA0MlYzNUg1Mi4xNzA2VjM2LjVaTTUyLjEzNyAzNi41SDUyLjE3MDZWMzVINTIuMTM3VjM2LjVaTTUyLjEwMzMgMzYuNUg1Mi4xMzdWMzVINTIuMTAzM1YzNi41Wk01Mi4wNjk2IDM2LjVINTIuMTAzM1YzNUg1Mi4wNjk2VjM2LjVaTTUyLjAzNTggMzYuNUg1Mi4wNjk2VjM1SDUyLjAzNThWMzYuNVpNNTIuMDAyIDM2LjVINTIuMDM1OFYzNUg1Mi4wMDJWMzYuNVpNNTEuOTY4MiAzNi41SDUyLjAwMlYzNUg1MS45NjgyVjM2LjVaTTUxLjkzNDMgMzYuNUg1MS45NjgyVjM1SDUxLjkzNDNWMzYuNVpNNTEuOTAwMyAzNi41SDUxLjkzNDNWMzVINTEuOTAwM1YzNi41Wk01MS44NjY0IDM2LjVINTEuOTAwM1YzNUg1MS44NjY0VjM2LjVaTTUxLjgzMjQgMzYuNUg1MS44NjY0VjM1SDUxLjgzMjRWMzYuNVpNNTEuNzk4MyAzNi41SDUxLjgzMjRWMzVINTEuNzk4M1YzNi41Wk01MS43NjQyIDM2LjVINTEuNzk4M1YzNUg1MS43NjQyVjM2LjVaTTUxLjczMDEgMzYuNUg1MS43NjQyVjM1SDUxLjczMDFWMzYuNVpNNTEuNjk1OSAzNi41SDUxLjczMDFWMzVINTEuNjk1OVYzNi41Wk01MS42NjE3IDM2LjVINTEuNjk1OVYzNUg1MS42NjE3VjM2LjVaTTUxLjYyNzQgMzYuNUg1MS42NjE3VjM1SDUxLjYyNzRWMzYuNVpNNTEuNTkzMSAzNi41SDUxLjYyNzRWMzVINTEuNTkzMVYzNi41Wk01MS41NTg4IDM2LjVINTEuNTkzMVYzNUg1MS41NTg4VjM2LjVaTTUxLjUyNDQgMzYuNUg1MS41NTg4VjM1SDUxLjUyNDRWMzYuNVpNNTEuNDg5OSAzNi41SDUxLjUyNDRWMzVINTEuNDg5OVYzNi41Wk01MS40NTU1IDM2LjVINTEuNDg5OVYzNUg1MS40NTU1VjM2LjVaTTUxLjQyMSAzNi41SDUxLjQ1NTVWMzVINTEuNDIxVjM2LjVaTTUxLjM4NjQgMzYuNUg1MS40MjFWMzVINTEuMzg2NFYzNi41Wk01MS4zNTE4IDM2LjVINTEuMzg2NFYzNUg1MS4zNTE4VjM2LjVaTTUxLjMxNzIgMzYuNUg1MS4zNTE4VjM1SDUxLjMxNzJWMzYuNVpNNTEuMjgyNSAzNi41SDUxLjMxNzJWMzVINTEuMjgyNVYzNi41Wk01MS4yNDc4IDM2LjVINTEuMjgyNVYzNUg1MS4yNDc4VjM2LjVaTTUxLjIxMyAzNi41SDUxLjI0NzhWMzVINTEuMjEzVjM2LjVaTTUxLjE3ODIgMzYuNUg1MS4yMTNWMzVINTEuMTc4MlYzNi41Wk01MS4xNDM0IDM2LjVINTEuMTc4MlYzNUg1MS4xNDM0VjM2LjVaTTUxLjEwODUgMzYuNUg1MS4xNDM0VjM1SDUxLjEwODVWMzYuNVpNNTEuMDczNiAzNi41SDUxLjEwODVWMzVINTEuMDczNlYzNi41Wk01MS4wMzg2IDM2LjVINTEuMDczNlYzNUg1MS4wMzg2VjM2LjVaTTUxLjAwMzYgMzYuNUg1MS4wMzg2VjM1SDUxLjAwMzZWMzYuNVpNNTAuOTY4NSAzNi41SDUxLjAwMzZWMzVINTAuOTY4NVYzNi41Wk01MC45MzM1IDM2LjVINTAuOTY4NVYzNUg1MC45MzM1VjM2LjVaTTUwLjg5ODMgMzYuNUg1MC45MzM1VjM1SDUwLjg5ODNWMzYuNVpNNTAuODYzMSAzNi41SDUwLjg5ODNWMzVINTAuODYzMVYzNi41Wk01MC44Mjc5IDM2LjVINTAuODYzMVYzNUg1MC44Mjc5VjM2LjVaTTUwLjc5MjcgMzYuNUg1MC44Mjc5VjM1SDUwLjc5MjdWMzYuNVpNNTAuNzU3NCAzNi41SDUwLjc5MjdWMzVINTAuNzU3NFYzNi41Wk01MC43MjIgMzYuNUg1MC43NTc0VjM1SDUwLjcyMlYzNi41Wk01MC42ODY3IDM2LjVINTAuNzIyVjM1SDUwLjY4NjdWMzYuNVpNNTAuNjUxMiAzNi41SDUwLjY4NjdWMzVINTAuNjUxMlYzNi41Wk01MC42MTU4IDM2LjVINTAuNjUxMlYzNUg1MC42MTU4VjM2LjVaTTUwLjU4MDMgMzYuNUg1MC42MTU4VjM1SDUwLjU4MDNWMzYuNVpNNTAuNTQ0NyAzNi41SDUwLjU4MDNWMzVINTAuNTQ0N1YzNi41Wk01MC41MDkxIDM2LjVINTAuNTQ0N1YzNUg1MC41MDkxVjM2LjVaTTUwLjQ3MzUgMzYuNUg1MC41MDkxVjM1SDUwLjQ3MzVWMzYuNVpNNTAuNDM3OCAzNi41SDUwLjQ3MzVWMzVINTAuNDM3OFYzNi41Wk01MC40MDIxIDM2LjVINTAuNDM3OFYzNUg1MC40MDIxVjM2LjVaTTUwLjM2NjMgMzYuNUg1MC40MDIxVjM1SDUwLjM2NjNWMzYuNVpNNTAuMzMwNSAzNi41SDUwLjM2NjNWMzVINTAuMzMwNVYzNi41Wk01MC4yOTQ3IDM2LjVINTAuMzMwNVYzNUg1MC4yOTQ3VjM2LjVaTTUwLjI1ODggMzYuNUg1MC4yOTQ3VjM1SDUwLjI1ODhWMzYuNVpNNTAuMjIyOSAzNi41SDUwLjI1ODhWMzVINTAuMjIyOVYzNi41Wk01MC4xODY5IDM2LjVINTAuMjIyOVYzNUg1MC4xODY5VjM2LjVaTTUwLjE1MDkgMzYuNUg1MC4xODY5VjM1SDUwLjE1MDlWMzYuNVpNNTAuMTE0OSAzNi41SDUwLjE1MDlWMzVINTAuMTE0OVYzNi41Wk01MC4wNzg4IDM2LjVINTAuMTE0OVYzNUg1MC4wNzg4VjM2LjVaTTUwLjA0MjcgMzYuNUg1MC4wNzg4VjM1SDUwLjA0MjdWMzYuNVpNNTAuMDA2NSAzNi41SDUwLjA0MjdWMzVINTAuMDA2NVYzNi41Wk00OS45NzAzIDM2LjVINTAuMDA2NVYzNUg0OS45NzAzVjM2LjVaTTQ5LjkzNCAzNi41SDQ5Ljk3MDNWMzVINDkuOTM0VjM2LjVaTTQ5Ljg5NzcgMzYuNUg0OS45MzRWMzVINDkuODk3N1YzNi41Wk00OS44NjE0IDM2LjVINDkuODk3N1YzNUg0OS44NjE0VjM2LjVaTTQ5LjgyNSAzNi41SDQ5Ljg2MTRWMzVINDkuODI1VjM2LjVaTTQ5Ljc4ODYgMzYuNUg0OS44MjVWMzVINDkuNzg4NlYzNi41Wk00OS43NTIxIDM2LjVINDkuNzg4NlYzNUg0OS43NTIxVjM2LjVaTTQ5LjcxNTYgMzYuNUg0OS43NTIxVjM1SDQ5LjcxNTZWMzYuNVpNNDkuNjc5MSAzNi41SDQ5LjcxNTZWMzVINDkuNjc5MVYzNi41Wk00OS42NDI1IDM2LjVINDkuNjc5MVYzNUg0OS42NDI1VjM2LjVaTTQ5LjYwNTkgMzYuNUg0OS42NDI1VjM1SDQ5LjYwNTlWMzYuNVpNNDkuNTY5MiAzNi41SDQ5LjYwNTlWMzVINDkuNTY5MlYzNi41Wk00OS41MzI1IDM2LjVINDkuNTY5MlYzNUg0OS41MzI1VjM2LjVaTTQ5LjQ5NTcgMzYuNUg0OS41MzI1VjM1SDQ5LjQ5NTdWMzYuNVpNNDkuNDU5IDM2LjVINDkuNDk1N1YzNUg0OS40NTlWMzYuNVpNNDkuNDIyMSAzNi41SDQ5LjQ1OVYzNUg0OS40MjIxVjM2LjVaTTQ5LjM4NTIgMzYuNUg0OS40MjIxVjM1SDQ5LjM4NTJWMzYuNVpNNDkuMzQ4MyAzNi41SDQ5LjM4NTJWMzVINDkuMzQ4M1YzNi41Wk00OS4zMTE0IDM2LjVINDkuMzQ4M1YzNUg0OS4zMTE0VjM2LjVaTTQ5LjI3NDQgMzYuNUg0OS4zMTE0VjM1SDQ5LjI3NDRWMzYuNVpNNDkuMjM3MyAzNi41SDQ5LjI3NDRWMzVINDkuMjM3M1YzNi41Wk00OS4yMDAyIDM2LjVINDkuMjM3M1YzNUg0OS4yMDAyVjM2LjVaTTQ5LjE2MzEgMzYuNUg0OS4yMDAyVjM1SDQ5LjE2MzFWMzYuNVpNNDkuMTI1OSAzNi41SDQ5LjE2MzFWMzVINDkuMTI1OVYzNi41Wk00OS4wODg3IDM2LjVINDkuMTI1OVYzNUg0OS4wODg3VjM2LjVaTTQ5LjA1MTUgMzYuNUg0OS4wODg3VjM1SDQ5LjA1MTVWMzYuNVpNNDkuMDE0MiAzNi41SDQ5LjA1MTVWMzVINDkuMDE0MlYzNi41Wk00OC45NzY5IDM2LjVINDkuMDE0MlYzNUg0OC45NzY5VjM2LjVaTTQ4LjkzOTUgMzYuNUg0OC45NzY5VjM1SDQ4LjkzOTVWMzYuNVpNNDguOTAyMSAzNi41SDQ4LjkzOTVWMzVINDguOTAyMVYzNi41Wk00OC44NjQ2IDM2LjVINDguOTAyMVYzNUg0OC44NjQ2VjM2LjVaTTQ4LjgyNzEgMzYuNUg0OC44NjQ2VjM1SDQ4LjgyNzFWMzYuNVpNNDguNzg5NiAzNi41SDQ4LjgyNzFWMzVINDguNzg5NlYzNi41Wk00OC43NTIgMzYuNUg0OC43ODk2VjM1SDQ4Ljc1MlYzNi41Wk00OC43MTQ0IDM2LjVINDguNzUyVjM1SDQ4LjcxNDRWMzYuNVpNNDguNjc2NyAzNi41SDQ4LjcxNDRWMzVINDguNjc2N1YzNi41Wk00OC42MzkgMzYuNUg0OC42NzY3VjM1SDQ4LjYzOVYzNi41Wk00OC42MDEyIDM2LjVINDguNjM5VjM1SDQ4LjYwMTJWMzYuNVpNNDguNTYzNSAzNi41SDQ4LjYwMTJWMzVINDguNTYzNVYzNi41Wk00OC41MjU2IDM2LjVINDguNTYzNVYzNUg0OC41MjU2VjM2LjVaTTQ4LjQ4NzcgMzYuNUg0OC41MjU2VjM1SDQ4LjQ4NzdWMzYuNVpNNDguNDQ5OCAzNi41SDQ4LjQ4NzdWMzVINDguNDQ5OFYzNi41Wk00OC40MTE5IDM2LjVINDguNDQ5OFYzNUg0OC40MTE5VjM2LjVaTTQ4LjM3MzkgMzYuNUg0OC40MTE5VjM1SDQ4LjM3MzlWMzYuNVpNNDguMzM1OCAzNi41SDQ4LjM3MzlWMzVINDguMzM1OFYzNi41Wk00OC4yOTc4IDM2LjVINDguMzM1OFYzNUg0OC4yOTc4VjM2LjVaTTQ4LjI1OTYgMzYuNUg0OC4yOTc4VjM1SDQ4LjI1OTZWMzYuNVpNNDguMjIxNSAzNi41SDQ4LjI1OTZWMzVINDguMjIxNVYzNi41Wk00OC4xODMzIDM2LjVINDguMjIxNVYzNUg0OC4xODMzVjM2LjVaTTQ4LjE0NSAzNi41SDQ4LjE4MzNWMzVINDguMTQ1VjM2LjVaTTQ4LjEwNjcgMzYuNUg0OC4xNDVWMzVINDguMTA2N1YzNi41Wk00OC4wNjg0IDM2LjVINDguMTA2N1YzNUg0OC4wNjg0VjM2LjVaTTQ4LjAzIDM2LjVINDguMDY4NFYzNUg0OC4wM1YzNi41Wk00Ny45OTE2IDM2LjVINDguMDNWMzVINDcuOTkxNlYzNi41Wk00Ny45NTMyIDM2LjVINDcuOTkxNlYzNUg0Ny45NTMyVjM2LjVaTTQ3LjkxNDcgMzYuNUg0Ny45NTMyVjM1SDQ3LjkxNDdWMzYuNVpNNDcuODc2MSAzNi41SDQ3LjkxNDdWMzVINDcuODc2MVYzNi41Wk00Ny44Mzc2IDM2LjVINDcuODc2MVYzNUg0Ny44Mzc2VjM2LjVaTTQ3Ljc5ODkgMzYuNUg0Ny44Mzc2VjM1SDQ3Ljc5ODlWMzYuNVpNNDcuNzYwMyAzNi41SDQ3Ljc5ODlWMzVINDcuNzYwM1YzNi41Wk00Ny43MjE2IDM2LjVINDcuNzYwM1YzNUg0Ny43MjE2VjM2LjVaTTQ3LjY4MjggMzYuNUg0Ny43MjE2VjM1SDQ3LjY4MjhWMzYuNVpNNDcuNjQ0IDM2LjVINDcuNjgyOFYzNUg0Ny42NDRWMzYuNVpNNDcuNjA1MiAzNi41SDQ3LjY0NFYzNUg0Ny42MDUyVjM2LjVaTTQ3LjU2NjMgMzYuNUg0Ny42MDUyVjM1SDQ3LjU2NjNWMzYuNVpNNDcuNTI3NCAzNi41SDQ3LjU2NjNWMzVINDcuNTI3NFYzNi41Wk00Ny40ODg1IDM2LjVINDcuNTI3NFYzNUg0Ny40ODg1VjM2LjVaTTQ3LjQ0OTUgMzYuNUg0Ny40ODg1VjM1SDQ3LjQ0OTVWMzYuNVpNNDcuNDEwNSAzNi41SDQ3LjQ0OTVWMzVINDcuNDEwNVYzNi41Wk00Ny4zNzE0IDM2LjVINDcuNDEwNVYzNUg0Ny4zNzE0VjM2LjVaTTQ3LjMzMjMgMzYuNUg0Ny4zNzE0VjM1SDQ3LjMzMjNWMzYuNVpNNDcuMjkzMSAzNi41SDQ3LjMzMjNWMzVINDcuMjkzMVYzNi41Wk00Ny4yNTM5IDM2LjVINDcuMjkzMVYzNUg0Ny4yNTM5VjM2LjVaTTQ3LjIxNDcgMzYuNUg0Ny4yNTM5VjM1SDQ3LjIxNDdWMzYuNVpNNDcuMTc1NCAzNi41SDQ3LjIxNDdWMzVINDcuMTc1NFYzNi41Wk00Ny4xMzYxIDM2LjVINDcuMTc1NFYzNUg0Ny4xMzYxVjM2LjVaTTQ3LjA5NjcgMzYuNUg0Ny4xMzYxVjM1SDQ3LjA5NjdWMzYuNVpNNDcuMDU3MyAzNi41SDQ3LjA5NjdWMzVINDcuMDU3M1YzNi41Wk00Ny4wMTc4IDM2LjVINDcuMDU3M1YzNUg0Ny4wMTc4VjM2LjVaTTQ2Ljk3ODMgMzYuNUg0Ny4wMTc4VjM1SDQ2Ljk3ODNWMzYuNVpNNDYuOTM4OCAzNi41SDQ2Ljk3ODNWMzVINDYuOTM4OFYzNi41Wk00Ni44OTkyIDM2LjVINDYuOTM4OFYzNUg0Ni44OTkyVjM2LjVaTTQ2Ljg1OTYgMzYuNUg0Ni44OTkyVjM1SDQ2Ljg1OTZWMzYuNVpNNDYuODIgMzYuNUg0Ni44NTk2VjM1SDQ2LjgyVjM2LjVaTTQ2Ljc4MDMgMzYuNUg0Ni44MlYzNUg0Ni43ODAzVjM2LjVaTTQ2Ljc0MDUgMzYuNUg0Ni43ODAzVjM1SDQ2Ljc0MDVWMzYuNVpNNDYuNzAwNyAzNi41SDQ2Ljc0MDVWMzVINDYuNzAwN1YzNi41Wk00Ni42NjA5IDM2LjVINDYuNzAwN1YzNUg0Ni42NjA5VjM2LjVaTTQ2LjYyMSAzNi41SDQ2LjY2MDlWMzVINDYuNjIxVjM2LjVaTTQ2LjU4MTEgMzYuNUg0Ni42MjFWMzVINDYuNTgxMVYzNi41Wk00Ni41NDEyIDM2LjVINDYuNTgxMVYzNUg0Ni41NDEyVjM2LjVaTTQ2LjUwMTIgMzYuNUg0Ni41NDEyVjM1SDQ2LjUwMTJWMzYuNVpNNDYuNDYxMiAzNi41SDQ2LjUwMTJWMzVINDYuNDYxMlYzNi41Wk00Ni40MjExIDM2LjVINDYuNDYxMlYzNUg0Ni40MjExVjM2LjVaTTQ2LjM4MSAzNi41SDQ2LjQyMTFWMzVINDYuMzgxVjM2LjVaTTQ2LjM0MDggMzYuNUg0Ni4zODFWMzVINDYuMzQwOFYzNi41Wk00Ni4zMDA2IDM2LjVINDYuMzQwOFYzNUg0Ni4zMDA2VjM2LjVaTTQ2LjI2MDQgMzYuNUg0Ni4zMDA2VjM1SDQ2LjI2MDRWMzYuNVpNNDYuMjIwMSAzNi41SDQ2LjI2MDRWMzVINDYuMjIwMVYzNi41Wk00Ni4xNzk4IDM2LjVINDYuMjIwMVYzNUg0Ni4xNzk4VjM2LjVaTTQ2LjEzOTQgMzYuNUg0Ni4xNzk4VjM1SDQ2LjEzOTRWMzYuNVpNNDYuMDk5IDM2LjVINDYuMTM5NFYzNUg0Ni4wOTlWMzYuNVpNNDYuMDU4NiAzNi41SDQ2LjA5OVYzNUg0Ni4wNTg2VjM2LjVaTTQ2LjAxODEgMzYuNUg0Ni4wNTg2VjM1SDQ2LjAxODFWMzYuNVpNNDUuOTc3NiAzNi41SDQ2LjAxODFWMzVINDUuOTc3NlYzNi41Wk00NS45MzcgMzYuNUg0NS45Nzc2VjM1SDQ1LjkzN1YzNi41Wk00NS44OTY0IDM2LjVINDUuOTM3VjM1SDQ1Ljg5NjRWMzYuNVpNNDUuODU1NyAzNi41SDQ1Ljg5NjRWMzVINDUuODU1N1YzNi41Wk00NS44MTUgMzYuNUg0NS44NTU3VjM1SDQ1LjgxNVYzNi41Wk00NS43NzQzIDM2LjVINDUuODE1VjM1SDQ1Ljc3NDNWMzYuNVpNNDUuNzMzNSAzNi41SDQ1Ljc3NDNWMzVINDUuNzMzNVYzNi41Wk00NS42OTI3IDM2LjVINDUuNzMzNVYzNUg0NS42OTI3VjM2LjVaTTQ1LjY1MTggMzYuNUg0NS42OTI3VjM1SDQ1LjY1MThWMzYuNVpNNDUuNjEwOSAzNi41SDQ1LjY1MThWMzVINDUuNjEwOVYzNi41Wk00NS41NyAzNi41SDQ1LjYxMDlWMzVINDUuNTdWMzYuNVpNNDUuNTI5IDM2LjVINDUuNTdWMzVINDUuNTI5VjM2LjVaTTQ1LjQ4OCAzNi41SDQ1LjUyOVYzNUg0NS40ODhWMzYuNVpNNDUuNDQ2OSAzNi41SDQ1LjQ4OFYzNUg0NS40NDY5VjM2LjVaTTQ1LjQwNTggMzYuNUg0NS40NDY5VjM1SDQ1LjQwNThWMzYuNVpNNDUuMzY0NiAzNi41SDQ1LjQwNThWMzVINDUuMzY0NlYzNi41Wk00NS4zMjM1IDM2LjVINDUuMzY0NlYzNUg0NS4zMjM1VjM2LjVaTTQ1LjI4MjIgMzYuNUg0NS4zMjM1VjM1SDQ1LjI4MjJWMzYuNVpNNDUuMjQwOSAzNi41SDQ1LjI4MjJWMzVINDUuMjQwOVYzNi41Wk00NS4xOTk2IDM2LjVINDUuMjQwOVYzNUg0NS4xOTk2VjM2LjVaTTQ1LjE1ODMgMzYuNUg0NS4xOTk2VjM1SDQ1LjE1ODNWMzYuNVpNNDUuMTE2OSAzNi41SDQ1LjE1ODNWMzVINDUuMTE2OVYzNi41Wk00NS4wNzU0IDM2LjVINDUuMTE2OVYzNUg0NS4wNzU0VjM2LjVaTTQ1LjAzMzkgMzYuNUg0NS4wNzU0VjM1SDQ1LjAzMzlWMzYuNVpNNDQuOTkyNCAzNi41SDQ1LjAzMzlWMzVINDQuOTkyNFYzNi41Wk00NC45NTA4IDM2LjVINDQuOTkyNFYzNUg0NC45NTA4VjM2LjVaTTQ0LjkwOTIgMzYuNUg0NC45NTA4VjM1SDQ0LjkwOTJWMzYuNVpNNDQuODY3NiAzNi41SDQ0LjkwOTJWMzVINDQuODY3NlYzNi41Wk00NC44MjU5IDM2LjVINDQuODY3NlYzNUg0NC44MjU5VjM2LjVaTTQ0Ljc4NDIgMzYuNUg0NC44MjU5VjM1SDQ0Ljc4NDJWMzYuNVpNNDQuNzQyNCAzNi41SDQ0Ljc4NDJWMzVINDQuNzQyNFYzNi41Wk00NC43MDA2IDM2LjVINDQuNzQyNFYzNUg0NC43MDA2VjM2LjVaTTQ0LjY1ODcgMzYuNUg0NC43MDA2VjM1SDQ0LjY1ODdWMzYuNVpNNDQuNjE2OCAzNi41SDQ0LjY1ODdWMzVINDQuNjE2OFYzNi41Wk00NC41NzQ5IDM2LjVINDQuNjE2OFYzNUg0NC41NzQ5VjM2LjVaTTQ0LjUzMjkgMzYuNUg0NC41NzQ5VjM1SDQ0LjUzMjlWMzYuNVpNNDQuNDkwOSAzNi41SDQ0LjUzMjlWMzVINDQuNDkwOVYzNi41Wk00NC40NDg4IDM2LjVINDQuNDkwOVYzNUg0NC40NDg4VjM2LjVaTTQ0LjQwNjcgMzYuNUg0NC40NDg4VjM1SDQ0LjQwNjdWMzYuNVpNNDQuMzY0NiAzNi41SDQ0LjQwNjdWMzVINDQuMzY0NlYzNi41Wk00NC4zMjI0IDM2LjVINDQuMzY0NlYzNUg0NC4zMjI0VjM2LjVaTTQ0LjI4MDEgMzYuNUg0NC4zMjI0VjM1SDQ0LjI4MDFWMzYuNVpNNDQuMjM3OSAzNi41SDQ0LjI4MDFWMzVINDQuMjM3OVYzNi41Wk00NC4xOTU1IDM2LjVINDQuMjM3OVYzNUg0NC4xOTU1VjM2LjVaTTQ0LjE1MzIgMzYuNUg0NC4xOTU1VjM1SDQ0LjE1MzJWMzYuNVpNNDQuMTEwOCAzNi41SDQ0LjE1MzJWMzVINDQuMTEwOFYzNi41Wk00NC4wNjg0IDM2LjVINDQuMTEwOFYzNUg0NC4wNjg0VjM2LjVaTTQ0LjAyNTkgMzYuNUg0NC4wNjg0VjM1SDQ0LjAyNTlWMzYuNVpNNjYuMzk1MSAzNi41SDY2LjQwNzNWMzVINjYuMzk1MVYzNi41Wk02NS42NDUxIDM0LjI1VjM1Ljc1SDY3LjE0NTFWMzQuMjVINjUuNjQ1MVpNNjYuNDA3MyAzMy41SDY2LjM5NTFWMzVINjYuNDA3M1YzMy41Wk02Ni40MTk1IDMzLjVINjYuNDA3M1YzNUg2Ni40MTk1VjMzLjVaTTY2LjQzMTggMzMuNUg2Ni40MTk1VjM1SDY2LjQzMThWMzMuNVpNNjYuNDQ0IDMzLjVINjYuNDMxOFYzNUg2Ni40NDRWMzMuNVpNNjYuNDU2MyAzMy41SDY2LjQ0NFYzNUg2Ni40NTYzVjMzLjVaTTY2LjQ2ODYgMzMuNUg2Ni40NTYzVjM1SDY2LjQ2ODZWMzMuNVpNNjYuNDgwOSAzMy41SDY2LjQ2ODZWMzVINjYuNDgwOVYzMy41Wk02Ni40OTMyIDMzLjVINjYuNDgwOVYzNUg2Ni40OTMyVjMzLjVaTTY2LjUwNTYgMzMuNUg2Ni40OTMyVjM1SDY2LjUwNTZWMzMuNVpNNjYuNTE3OSAzMy41SDY2LjUwNTZWMzVINjYuNTE3OVYzMy41Wk02Ni41MzAzIDMzLjVINjYuNTE3OVYzNUg2Ni41MzAzVjMzLjVaTTY2LjU0MjYgMzMuNUg2Ni41MzAzVjM1SDY2LjU0MjZWMzMuNVpNNjYuNTU1IDMzLjVINjYuNTQyNlYzNUg2Ni41NTVWMzMuNVpNNjYuNTY3NCAzMy41SDY2LjU1NVYzNUg2Ni41Njc0VjMzLjVaTTY2LjU3OTggMzMuNUg2Ni41Njc0VjM1SDY2LjU3OThWMzMuNVpNNjYuNTkyMyAzMy41SDY2LjU3OThWMzVINjYuNTkyM1YzMy41Wk02Ni42MDQ3IDMzLjVINjYuNTkyM1YzNUg2Ni42MDQ3VjMzLjVaTTY2LjYxNzIgMzMuNUg2Ni42MDQ3VjM1SDY2LjYxNzJWMzMuNVpNNjYuNjI5NiAzMy41SDY2LjYxNzJWMzVINjYuNjI5NlYzMy41Wk02Ni42NDIxIDMzLjVINjYuNjI5NlYzNUg2Ni42NDIxVjMzLjVaTTY2LjY1NDYgMzMuNUg2Ni42NDIxVjM1SDY2LjY1NDZWMzMuNVpNNjYuNjY3MSAzMy41SDY2LjY1NDZWMzVINjYuNjY3MVYzMy41Wk02Ni42Nzk3IDMzLjVINjYuNjY3MVYzNUg2Ni42Nzk3VjMzLjVaTTY2LjY5MjIgMzMuNUg2Ni42Nzk3VjM1SDY2LjY5MjJWMzMuNVpNNjYuNzA0NyAzMy41SDY2LjY5MjJWMzVINjYuNzA0N1YzMy41Wk02Ni43MTczIDMzLjVINjYuNzA0N1YzNUg2Ni43MTczVjMzLjVaTTY2LjcyOTkgMzMuNUg2Ni43MTczVjM1SDY2LjcyOTlWMzMuNVpNNjYuNzQyNSAzMy41SDY2LjcyOTlWMzVINjYuNzQyNVYzMy41Wk02Ni43NTUxIDMzLjVINjYuNzQyNVYzNUg2Ni43NTUxVjMzLjVaTTY2Ljc2NzcgMzMuNUg2Ni43NTUxVjM1SDY2Ljc2NzdWMzMuNVpNNjYuNzgwMyAzMy41SDY2Ljc2NzdWMzVINjYuNzgwM1YzMy41Wk02Ni43OTMgMzMuNUg2Ni43ODAzVjM1SDY2Ljc5M1YzMy41Wk02Ni44MDU3IDMzLjVINjYuNzkzVjM1SDY2LjgwNTdWMzMuNVpNNjYuODE4MyAzMy41SDY2LjgwNTdWMzVINjYuODE4M1YzMy41Wk02Ni44MzEgMzMuNUg2Ni44MTgzVjM1SDY2LjgzMVYzMy41Wk02Ni44NDM3IDMzLjVINjYuODMxVjM1SDY2Ljg0MzdWMzMuNVpNNjYuODU2NCAzMy41SDY2Ljg0MzdWMzVINjYuODU2NFYzMy41Wk02Ni44NjkyIDMzLjVINjYuODU2NFYzNUg2Ni44NjkyVjMzLjVaTTY2Ljg4MTkgMzMuNUg2Ni44NjkyVjM1SDY2Ljg4MTlWMzMuNVpNNjYuODk0NyAzMy41SDY2Ljg4MTlWMzVINjYuODk0N1YzMy41Wk02Ni45MDc0IDMzLjVINjYuODk0N1YzNUg2Ni45MDc0VjMzLjVaTTY2LjkyMDIgMzMuNUg2Ni45MDc0VjM1SDY2LjkyMDJWMzMuNVpNNjYuOTMzIDMzLjVINjYuOTIwMlYzNUg2Ni45MzNWMzMuNVpNNjYuOTQ1OCAzMy41SDY2LjkzM1YzNUg2Ni45NDU4VjMzLjVaTTY2Ljk1ODYgMzMuNUg2Ni45NDU4VjM1SDY2Ljk1ODZWMzMuNVpNNjYuOTcxNSAzMy41SDY2Ljk1ODZWMzVINjYuOTcxNVYzMy41Wk02Ni45ODQzIDMzLjVINjYuOTcxNVYzNUg2Ni45ODQzVjMzLjVaTTY2Ljk5NzIgMzMuNUg2Ni45ODQzVjM1SDY2Ljk5NzJWMzMuNVpNNjcuMDEwMSAzMy41SDY2Ljk5NzJWMzVINjcuMDEwMVYzMy41Wk02Ny4wMjMgMzMuNUg2Ny4wMTAxVjM1SDY3LjAyM1YzMy41Wk02Ny4wMzU5IDMzLjVINjcuMDIzVjM1SDY3LjAzNTlWMzMuNVpNNjcuMDQ4OCAzMy41SDY3LjAzNTlWMzVINjcuMDQ4OFYzMy41Wk02Ny4wNjE3IDMzLjVINjcuMDQ4OFYzNUg2Ny4wNjE3VjMzLjVaTTY3LjA3NDcgMzMuNUg2Ny4wNjE3VjM1SDY3LjA3NDdWMzMuNVpNNjcuMDg3NiAzMy41SDY3LjA3NDdWMzVINjcuMDg3NlYzMy41Wk02Ny4xMDA2IDMzLjVINjcuMDg3NlYzNUg2Ny4xMDA2VjMzLjVaTTY3LjExMzYgMzMuNUg2Ny4xMDA2VjM1SDY3LjExMzZWMzMuNVpNNjcuMTI2NiAzMy41SDY3LjExMzZWMzVINjcuMTI2NlYzMy41Wk02Ny4xMzk2IDMzLjVINjcuMTI2NlYzNUg2Ny4xMzk2VjMzLjVaTTY3LjE1MjcgMzMuNUg2Ny4xMzk2VjM1SDY3LjE1MjdWMzMuNVpNNjcuMTY1NyAzMy41SDY3LjE1MjdWMzVINjcuMTY1N1YzMy41Wk02Ny4xNzg4IDMzLjVINjcuMTY1N1YzNUg2Ny4xNzg4VjMzLjVaTTY3LjE5MTggMzMuNUg2Ny4xNzg4VjM1SDY3LjE5MThWMzMuNVpNNjcuMjA0OSAzMy41SDY3LjE5MThWMzVINjcuMjA0OVYzMy41Wk02Ny4yMTggMzMuNUg2Ny4yMDQ5VjM1SDY3LjIxOFYzMy41Wk02Ny4yMzExIDMzLjVINjcuMjE4VjM1SDY3LjIzMTFWMzMuNVpNNjcuMjQ0MiAzMy41SDY3LjIzMTFWMzVINjcuMjQ0MlYzMy41Wk02Ny4yNTc0IDMzLjVINjcuMjQ0MlYzNUg2Ny4yNTc0VjMzLjVaTTY3LjI3MDUgMzMuNUg2Ny4yNTc0VjM1SDY3LjI3MDVWMzMuNVpNNjcuMjgzNyAzMy41SDY3LjI3MDVWMzVINjcuMjgzN1YzMy41Wk02Ny4yOTY5IDMzLjVINjcuMjgzN1YzNUg2Ny4yOTY5VjMzLjVaTTY3LjMxMDEgMzMuNUg2Ny4yOTY5VjM1SDY3LjMxMDFWMzMuNVpNNjcuMzIzMyAzMy41SDY3LjMxMDFWMzVINjcuMzIzM1YzMy41Wk02Ny4zMzY1IDMzLjVINjcuMzIzM1YzNUg2Ny4zMzY1VjMzLjVaTTY3LjM0OTcgMzMuNUg2Ny4zMzY1VjM1SDY3LjM0OTdWMzMuNVpNNjcuMzYzIDMzLjVINjcuMzQ5N1YzNUg2Ny4zNjNWMzMuNVpNNjcuMzc2MyAzMy41SDY3LjM2M1YzNUg2Ny4zNzYzVjMzLjVaTTY3LjM4OTUgMzMuNUg2Ny4zNzYzVjM1SDY3LjM4OTVWMzMuNVpNNjcuNDAyOCAzMy41SDY3LjM4OTVWMzVINjcuNDAyOFYzMy41Wk02Ny40MTYxIDMzLjVINjcuNDAyOFYzNUg2Ny40MTYxVjMzLjVaTTY3LjQyOTQgMzMuNUg2Ny40MTYxVjM1SDY3LjQyOTRWMzMuNVpNNjcuNDQyOCAzMy41SDY3LjQyOTRWMzVINjcuNDQyOFYzMy41Wk02Ny40NTYxIDMzLjVINjcuNDQyOFYzNUg2Ny40NTYxVjMzLjVaTTY3LjQ2OTUgMzMuNUg2Ny40NTYxVjM1SDY3LjQ2OTVWMzMuNVpNNjcuNDgyOCAzMy41SDY3LjQ2OTVWMzVINjcuNDgyOFYzMy41Wk02Ny40OTYyIDMzLjVINjcuNDgyOFYzNUg2Ny40OTYyVjMzLjVaTTY3LjUwOTYgMzMuNUg2Ny40OTYyVjM1SDY3LjUwOTZWMzMuNVpNNjcuNTIzIDMzLjVINjcuNTA5NlYzNUg2Ny41MjNWMzMuNVpNNjcuNTM2NSAzMy41SDY3LjUyM1YzNUg2Ny41MzY1VjMzLjVaTTY3LjU0OTkgMzMuNUg2Ny41MzY1VjM1SDY3LjU0OTlWMzMuNVpNNjcuNTYzNCAzMy41SDY3LjU0OTlWMzVINjcuNTYzNFYzMy41Wk02Ny41NzY4IDMzLjVINjcuNTYzNFYzNUg2Ny41NzY4VjMzLjVaTTY3LjU5MDMgMzMuNUg2Ny41NzY4VjM1SDY3LjU5MDNWMzMuNVpNNjcuNjAzOCAzMy41SDY3LjU5MDNWMzVINjcuNjAzOFYzMy41Wk02Ny42MTczIDMzLjVINjcuNjAzOFYzNUg2Ny42MTczVjMzLjVaTTY3LjYzMDggMzMuNUg2Ny42MTczVjM1SDY3LjYzMDhWMzMuNVpNNjcuNjQ0NCAzMy41SDY3LjYzMDhWMzVINjcuNjQ0NFYzMy41Wk02Ny42NTc5IDMzLjVINjcuNjQ0NFYzNUg2Ny42NTc5VjMzLjVaTTY3LjY3MTUgMzMuNUg2Ny42NTc5VjM1SDY3LjY3MTVWMzMuNVpNNjcuNjg1IDMzLjVINjcuNjcxNVYzNUg2Ny42ODVWMzMuNVpNNjcuNjk4NiAzMy41SDY3LjY4NVYzNUg2Ny42OTg2VjMzLjVaTTY3LjcxMjIgMzMuNUg2Ny42OTg2VjM1SDY3LjcxMjJWMzMuNVpNNjcuNzI1OSAzMy41SDY3LjcxMjJWMzVINjcuNzI1OVYzMy41Wk02Ny43Mzk1IDMzLjVINjcuNzI1OVYzNUg2Ny43Mzk1VjMzLjVaTTY3Ljc1MzEgMzMuNUg2Ny43Mzk1VjM1SDY3Ljc1MzFWMzMuNVpNNjcuNzY2OCAzMy41SDY3Ljc1MzFWMzVINjcuNzY2OFYzMy41Wk02Ny43ODA1IDMzLjVINjcuNzY2OFYzNUg2Ny43ODA1VjMzLjVaTTY3Ljc5NDEgMzMuNUg2Ny43ODA1VjM1SDY3Ljc5NDFWMzMuNVpNNjcuODA3OCAzMy41SDY3Ljc5NDFWMzVINjcuODA3OFYzMy41Wk02Ny44MjE2IDMzLjVINjcuODA3OFYzNUg2Ny44MjE2VjMzLjVaTTY3LjgzNTMgMzMuNUg2Ny44MjE2VjM1SDY3LjgzNTNWMzMuNVpNNjcuODQ5IDMzLjVINjcuODM1M1YzNUg2Ny44NDlWMzMuNVpNNjcuODYyOCAzMy41SDY3Ljg0OVYzNUg2Ny44NjI4VjMzLjVaTTY3Ljg3NjUgMzMuNUg2Ny44NjI4VjM1SDY3Ljg3NjVWMzMuNVpNNjcuODkwMyAzMy41SDY3Ljg3NjVWMzVINjcuODkwM1YzMy41Wk02Ny45MDQxIDMzLjVINjcuODkwM1YzNUg2Ny45MDQxVjMzLjVaTTY3LjkxNzkgMzMuNUg2Ny45MDQxVjM1SDY3LjkxNzlWMzMuNVpNNjcuOTMxOCAzMy41SDY3LjkxNzlWMzVINjcuOTMxOFYzMy41Wk02Ny45NDU2IDMzLjVINjcuOTMxOFYzNUg2Ny45NDU2VjMzLjVaTTY3Ljk1OTQgMzMuNUg2Ny45NDU2VjM1SDY3Ljk1OTRWMzMuNVpNNjcuOTczMyAzMy41SDY3Ljk1OTRWMzVINjcuOTczM1YzMy41Wk02Ny45ODcyIDMzLjVINjcuOTczM1YzNUg2Ny45ODcyVjMzLjVaTTY4LjAwMTEgMzMuNUg2Ny45ODcyVjM1SDY4LjAwMTFWMzMuNVpNNjguMDE1IDMzLjVINjguMDAxMVYzNUg2OC4wMTVWMzMuNVpNNjguMDI4OSAzMy41SDY4LjAxNVYzNUg2OC4wMjg5VjMzLjVaTTY4LjA0MjggMzMuNUg2OC4wMjg5VjM1SDY4LjA0MjhWMzMuNVpNNjguMDU2OCAzMy41SDY4LjA0MjhWMzVINjguMDU2OFYzMy41Wk02OC4wNzA3IDMzLjVINjguMDU2OFYzNUg2OC4wNzA3VjMzLjVaTTY4LjA4NDcgMzMuNUg2OC4wNzA3VjM1SDY4LjA4NDdWMzMuNVpNNjguMDk4NyAzMy41SDY4LjA4NDdWMzVINjguMDk4N1YzMy41Wk02OC4xMTI3IDMzLjVINjguMDk4N1YzNUg2OC4xMTI3VjMzLjVaTTY4LjEyNjcgMzMuNUg2OC4xMTI3VjM1SDY4LjEyNjdWMzMuNVpNNjguMTQwNyAzMy41SDY4LjEyNjdWMzVINjguMTQwN1YzMy41Wk02OC4xNTQ4IDMzLjVINjguMTQwN1YzNUg2OC4xNTQ4VjMzLjVaTTY4LjE2ODggMzMuNUg2OC4xNTQ4VjM1SDY4LjE2ODhWMzMuNVpNNjguMTgyOSAzMy41SDY4LjE2ODhWMzVINjguMTgyOVYzMy41Wk02OC4xOTcgMzMuNUg2OC4xODI5VjM1SDY4LjE5N1YzMy41Wk02OC4yMTExIDMzLjVINjguMTk3VjM1SDY4LjIxMTFWMzMuNVpNNjguMjI1MiAzMy41SDY4LjIxMTFWMzVINjguMjI1MlYzMy41Wk02OC4yMzkzIDMzLjVINjguMjI1MlYzNUg2OC4yMzkzVjMzLjVaTTY4LjI1MzQgMzMuNUg2OC4yMzkzVjM1SDY4LjI1MzRWMzMuNVpNNjguMjY3NiAzMy41SDY4LjI1MzRWMzVINjguMjY3NlYzMy41Wk02OC4yODE3IDMzLjVINjguMjY3NlYzNUg2OC4yODE3VjMzLjVaTTY4LjI5NTkgMzMuNUg2OC4yODE3VjM1SDY4LjI5NTlWMzMuNVpNNjguMzEwMSAzMy41SDY4LjI5NTlWMzVINjguMzEwMVYzMy41Wk02OC4zMjQzIDMzLjVINjguMzEwMVYzNUg2OC4zMjQzVjMzLjVaTTY4LjMzODUgMzMuNUg2OC4zMjQzVjM1SDY4LjMzODVWMzMuNVpNNjguMzUyOCAzMy41SDY4LjMzODVWMzVINjguMzUyOFYzMy41Wk02OC4zNjcgMzMuNUg2OC4zNTI4VjM1SDY4LjM2N1YzMy41Wk02OC4zODEzIDMzLjVINjguMzY3VjM1SDY4LjM4MTNWMzMuNVpNNjguMzk1NSAzMy41SDY4LjM4MTNWMzVINjguMzk1NVYzMy41Wk02OC40MDk4IDMzLjVINjguMzk1NVYzNUg2OC40MDk4VjMzLjVaTTY4LjQyNDEgMzMuNUg2OC40MDk4VjM1SDY4LjQyNDFWMzMuNVpNNjguNDM4NCAzMy41SDY4LjQyNDFWMzVINjguNDM4NFYzMy41Wk02OC40NTI4IDMzLjVINjguNDM4NFYzNUg2OC40NTI4VjMzLjVaTTY4LjQ2NzEgMzMuNUg2OC40NTI4VjM1SDY4LjQ2NzFWMzMuNVpNNjguNDgxNSAzMy41SDY4LjQ2NzFWMzVINjguNDgxNVYzMy41Wk02OC40OTU4IDMzLjVINjguNDgxNVYzNUg2OC40OTU4VjMzLjVaTTY4LjUxMDIgMzMuNUg2OC40OTU4VjM1SDY4LjUxMDJWMzMuNVpNNjguNTI0NiAzMy41SDY4LjUxMDJWMzVINjguNTI0NlYzMy41Wk02OC41MzkgMzMuNUg2OC41MjQ2VjM1SDY4LjUzOVYzMy41Wk02OC41NTM0IDMzLjVINjguNTM5VjM1SDY4LjU1MzRWMzMuNVpNNjguNTY3OSAzMy41SDY4LjU1MzRWMzVINjguNTY3OVYzMy41Wk02OC41ODIzIDMzLjVINjguNTY3OVYzNUg2OC41ODIzVjMzLjVaTTY4LjU5NjggMzMuNUg2OC41ODIzVjM1SDY4LjU5NjhWMzMuNVpNNjguNjExMyAzMy41SDY4LjU5NjhWMzVINjguNjExM1YzMy41Wk02OC42MjU4IDMzLjVINjguNjExM1YzNUg2OC42MjU4VjMzLjVaTTY4LjY0MDMgMzMuNUg2OC42MjU4VjM1SDY4LjY0MDNWMzMuNVpNNjguNjU0OCAzMy41SDY4LjY0MDNWMzVINjguNjU0OFYzMy41Wk02OC42NjkzIDMzLjVINjguNjU0OFYzNUg2OC42NjkzVjMzLjVaTTY4LjY4MzkgMzMuNUg2OC42NjkzVjM1SDY4LjY4MzlWMzMuNVpNNjguNjk4NCAzMy41SDY4LjY4MzlWMzVINjguNjk4NFYzMy41Wk02OC43MTMgMzMuNUg2OC42OTg0VjM1SDY4LjcxM1YzMy41Wk02OC43Mjc2IDMzLjVINjguNzEzVjM1SDY4LjcyNzZWMzMuNVpNNjguNzQyMiAzMy41SDY4LjcyNzZWMzVINjguNzQyMlYzMy41Wk02OC43NTY4IDMzLjVINjguNzQyMlYzNUg2OC43NTY4VjMzLjVaTTY4Ljc3MTQgMzMuNUg2OC43NTY4VjM1SDY4Ljc3MTRWMzMuNVpNNjguNzg2MSAzMy41SDY4Ljc3MTRWMzVINjguNzg2MVYzMy41Wk02OC44MDA3IDMzLjVINjguNzg2MVYzNUg2OC44MDA3VjMzLjVaTTY4LjgxNTQgMzMuNUg2OC44MDA3VjM1SDY4LjgxNTRWMzMuNVpNNjguODMwMSAzMy41SDY4LjgxNTRWMzVINjguODMwMVYzMy41Wk02OC44NDQ4IDMzLjVINjguODMwMVYzNUg2OC44NDQ4VjMzLjVaTTY4Ljg1OTUgMzMuNUg2OC44NDQ4VjM1SDY4Ljg1OTVWMzMuNVpNNjguODc0MiAzMy41SDY4Ljg1OTVWMzVINjguODc0MlYzMy41Wk02OC44ODg5IDMzLjVINjguODc0MlYzNUg2OC44ODg5VjMzLjVaTTY4LjkwMzcgMzMuNUg2OC44ODg5VjM1SDY4LjkwMzdWMzMuNVpNNjguOTE4NCAzMy41SDY4LjkwMzdWMzVINjguOTE4NFYzMy41Wk02OC45MzMyIDMzLjVINjguOTE4NFYzNUg2OC45MzMyVjMzLjVaTTY4Ljk0OCAzMy41SDY4LjkzMzJWMzVINjguOTQ4VjMzLjVaTTY4Ljk2MjggMzMuNUg2OC45NDhWMzVINjguOTYyOFYzMy41Wk02OC45Nzc2IDMzLjVINjguOTYyOFYzNUg2OC45Nzc2VjMzLjVaTTY4Ljk5MjUgMzMuNUg2OC45Nzc2VjM1SDY4Ljk5MjVWMzMuNVpNNjkuMDA3MyAzMy41SDY4Ljk5MjVWMzVINjkuMDA3M1YzMy41Wk02OS4wMjIyIDMzLjVINjkuMDA3M1YzNUg2OS4wMjIyVjMzLjVaTTY5LjAzNzEgMzMuNUg2OS4wMjIyVjM1SDY5LjAzNzFWMzMuNVpNNjkuMDUxOSAzMy41SDY5LjAzNzFWMzVINjkuMDUxOVYzMy41Wk02OS4wNjY4IDMzLjVINjkuMDUxOVYzNUg2OS4wNjY4VjMzLjVaTTY5LjA4MTggMzMuNUg2OS4wNjY4VjM1SDY5LjA4MThWMzMuNVpNNjkuMDk2NyAzMy41SDY5LjA4MThWMzVINjkuMDk2N1YzMy41Wk02OS4xMTE2IDMzLjVINjkuMDk2N1YzNUg2OS4xMTE2VjMzLjVaTTY5LjEyNjYgMzMuNUg2OS4xMTE2VjM1SDY5LjEyNjZWMzMuNVpNNjkuMTQxNiAzMy41SDY5LjEyNjZWMzVINjkuMTQxNlYzMy41Wk02OS4xNTY1IDMzLjVINjkuMTQxNlYzNUg2OS4xNTY1VjMzLjVaTTY5LjE3MTUgMzMuNUg2OS4xNTY1VjM1SDY5LjE3MTVWMzMuNVpNNjkuMTg2NSAzMy41SDY5LjE3MTVWMzVINjkuMTg2NVYzMy41Wk02OS4yMDE2IDMzLjVINjkuMTg2NVYzNUg2OS4yMDE2VjMzLjVaTTY5LjIxNjYgMzMuNUg2OS4yMDE2VjM1SDY5LjIxNjZWMzMuNVpNNjkuMjMxNyAzMy41SDY5LjIxNjZWMzVINjkuMjMxN1YzMy41Wk02OS4yNDY3IDMzLjVINjkuMjMxN1YzNUg2OS4yNDY3VjMzLjVaTTY5LjI2MTggMzMuNUg2OS4yNDY3VjM1SDY5LjI2MThWMzMuNVpNNjkuMjc2OSAzMy41SDY5LjI2MThWMzVINjkuMjc2OVYzMy41Wk02OS4yOTIgMzMuNUg2OS4yNzY5VjM1SDY5LjI5MlYzMy41Wk02OS4zMDcxIDMzLjVINjkuMjkyVjM1SDY5LjMwNzFWMzMuNVpNNjkuMzIyMyAzMy41SDY5LjMwNzFWMzVINjkuMzIyM1YzMy41Wk02OS4zMzc0IDMzLjVINjkuMzIyM1YzNUg2OS4zMzc0VjMzLjVaTTY5LjM1MjYgMzMuNUg2OS4zMzc0VjM1SDY5LjM1MjZWMzMuNVpNNjkuMzY3NyAzMy41SDY5LjM1MjZWMzVINjkuMzY3N1YzMy41Wk02OS4zODI5IDMzLjVINjkuMzY3N1YzNUg2OS4zODI5VjMzLjVaTTY5LjM5ODEgMzMuNUg2OS4zODI5VjM1SDY5LjM5ODFWMzMuNVpNNjkuNDEzMyAzMy41SDY5LjM5ODFWMzVINjkuNDEzM1YzMy41Wk02OS40Mjg2IDMzLjVINjkuNDEzM1YzNUg2OS40Mjg2VjMzLjVaTTY5LjQ0MzggMzMuNUg2OS40Mjg2VjM1SDY5LjQ0MzhWMzMuNVpNNjkuNDU5MSAzMy41SDY5LjQ0MzhWMzVINjkuNDU5MVYzMy41Wk02OS40NzQzIDMzLjVINjkuNDU5MVYzNUg2OS40NzQzVjMzLjVaTTY5LjQ4OTYgMzMuNUg2OS40NzQzVjM1SDY5LjQ4OTZWMzMuNVpNNjkuNTA0OSAzMy41SDY5LjQ4OTZWMzVINjkuNTA0OVYzMy41Wk02OS41MjAyIDMzLjVINjkuNTA0OVYzNUg2OS41MjAyVjMzLjVaTTY5LjUzNTYgMzMuNUg2OS41MjAyVjM1SDY5LjUzNTZWMzMuNVpNNjkuNTUwOSAzMy41SDY5LjUzNTZWMzVINjkuNTUwOVYzMy41Wk02OS41NjYyIDMzLjVINjkuNTUwOVYzNUg2OS41NjYyVjMzLjVaTTY5LjU4MTYgMzMuNUg2OS41NjYyVjM1SDY5LjU4MTZWMzMuNVpNNjkuNTk3IDMzLjVINjkuNTgxNlYzNUg2OS41OTdWMzMuNVpNNjkuNjEyNCAzMy41SDY5LjU5N1YzNUg2OS42MTI0VjMzLjVaTTY5LjYyNzggMzMuNUg2OS42MTI0VjM1SDY5LjYyNzhWMzMuNVpNNjkuNjQzMiAzMy41SDY5LjYyNzhWMzVINjkuNjQzMlYzMy41Wk02OS42NTg2IDMzLjVINjkuNjQzMlYzNUg2OS42NTg2VjMzLjVaTTY5LjY3NDEgMzMuNUg2OS42NTg2VjM1SDY5LjY3NDFWMzMuNVpNNjkuNjg5NSAzMy41SDY5LjY3NDFWMzVINjkuNjg5NVYzMy41Wk02OS43MDUgMzMuNUg2OS42ODk1VjM1SDY5LjcwNVYzMy41Wk02OS43MjA1IDMzLjVINjkuNzA1VjM1SDY5LjcyMDVWMzMuNVpNNjkuNzM2IDMzLjVINjkuNzIwNVYzNUg2OS43MzZWMzMuNVpNNjkuNzUxNSAzMy41SDY5LjczNlYzNUg2OS43NTE1VjMzLjVaTTY5Ljc2NzEgMzMuNUg2OS43NTE1VjM1SDY5Ljc2NzFWMzMuNVpNNjkuNzgyNiAzMy41SDY5Ljc2NzFWMzVINjkuNzgyNlYzMy41Wk02OS43OTgyIDMzLjVINjkuNzgyNlYzNUg2OS43OTgyVjMzLjVaTTY5LjgxMzcgMzMuNUg2OS43OTgyVjM1SDY5LjgxMzdWMzMuNVpNNjkuODI5MyAzMy41SDY5LjgxMzdWMzVINjkuODI5M1YzMy41Wk02OS44NDQ5IDMzLjVINjkuODI5M1YzNUg2OS44NDQ5VjMzLjVaTTY5Ljg2MDUgMzMuNUg2OS44NDQ5VjM1SDY5Ljg2MDVWMzMuNVpNNjkuODc2MSAzMy41SDY5Ljg2MDVWMzVINjkuODc2MVYzMy41Wk02OS44OTE4IDMzLjVINjkuODc2MVYzNUg2OS44OTE4VjMzLjVaTTY5LjkwNzQgMzMuNUg2OS44OTE4VjM1SDY5LjkwNzRWMzMuNVpNNjkuOTIzMSAzMy41SDY5LjkwNzRWMzVINjkuOTIzMVYzMy41Wk02OS45Mzg4IDMzLjVINjkuOTIzMVYzNUg2OS45Mzg4VjMzLjVaTTY5Ljk1NDUgMzMuNUg2OS45Mzg4VjM1SDY5Ljk1NDVWMzMuNVpNNjkuOTcwMiAzMy41SDY5Ljk1NDVWMzVINjkuOTcwMlYzMy41Wk02OS45ODU5IDMzLjVINjkuOTcwMlYzNUg2OS45ODU5VjMzLjVaTTcwLjAwMTYgMzMuNUg2OS45ODU5VjM1SDcwLjAwMTZWMzMuNVpNNzAuMDE3NCAzMy41SDcwLjAwMTZWMzVINzAuMDE3NFYzMy41Wk03MC4wMzMxIDMzLjVINzAuMDE3NFYzNUg3MC4wMzMxVjMzLjVaTTcwLjA0ODkgMzMuNUg3MC4wMzMxVjM1SDcwLjA0ODlWMzMuNVpNNzAuMDY0NyAzMy41SDcwLjA0ODlWMzVINzAuMDY0N1YzMy41Wk03MC4wODA1IDMzLjVINzAuMDY0N1YzNUg3MC4wODA1VjMzLjVaTTcwLjA5NjMgMzMuNUg3MC4wODA1VjM1SDcwLjA5NjNWMzMuNVpNNzAuMTEyMiAzMy41SDcwLjA5NjNWMzVINzAuMTEyMlYzMy41Wk03MC4xMjggMzMuNUg3MC4xMTIyVjM1SDcwLjEyOFYzMy41Wk03MC4xNDM5IDMzLjVINzAuMTI4VjM1SDcwLjE0MzlWMzMuNVpNNzAuMTU5NyAzMy41SDcwLjE0MzlWMzVINzAuMTU5N1YzMy41Wk03MC4xNzU2IDMzLjVINzAuMTU5N1YzNUg3MC4xNzU2VjMzLjVaTTcwLjE5MTUgMzMuNUg3MC4xNzU2VjM1SDcwLjE5MTVWMzMuNVpNNzAuMjA3NCAzMy41SDcwLjE5MTVWMzVINzAuMjA3NFYzMy41Wk03MC4yMjM0IDMzLjVINzAuMjA3NFYzNUg3MC4yMjM0VjMzLjVaTTcwLjIzOTMgMzMuNUg3MC4yMjM0VjM1SDcwLjIzOTNWMzMuNVpNNzAuMjU1MiAzMy41SDcwLjIzOTNWMzVINzAuMjU1MlYzMy41Wk03MC4yNzEyIDMzLjVINzAuMjU1MlYzNUg3MC4yNzEyVjMzLjVaTTcwLjI4NzIgMzMuNUg3MC4yNzEyVjM1SDcwLjI4NzJWMzMuNVpNNzAuMzAzMiAzMy41SDcwLjI4NzJWMzVINzAuMzAzMlYzMy41Wk03MC4zMTkyIDMzLjVINzAuMzAzMlYzNUg3MC4zMTkyVjMzLjVaTTcwLjMzNTIgMzMuNUg3MC4zMTkyVjM1SDcwLjMzNTJWMzMuNVpNNzAuMzUxMiAzMy41SDcwLjMzNTJWMzVINzAuMzUxMlYzMy41Wk03MC4zNjczIDMzLjVINzAuMzUxMlYzNUg3MC4zNjczVjMzLjVaTTcwLjM4MzQgMzMuNUg3MC4zNjczVjM1SDcwLjM4MzRWMzMuNVpNNzAuMzk5NCAzMy41SDcwLjM4MzRWMzVINzAuMzk5NFYzMy41Wk03MC40MTU1IDMzLjVINzAuMzk5NFYzNUg3MC40MTU1VjMzLjVaTTcwLjQzMTYgMzMuNUg3MC40MTU1VjM1SDcwLjQzMTZWMzMuNVpNNzAuNDQ3NyAzMy41SDcwLjQzMTZWMzVINzAuNDQ3N1YzMy41Wk03MC40NjM5IDMzLjVINzAuNDQ3N1YzNUg3MC40NjM5VjMzLjVaTTcwLjQ4IDMzLjVINzAuNDYzOVYzNUg3MC40OFYzMy41Wk03MC40OTYyIDMzLjVINzAuNDhWMzVINzAuNDk2MlYzMy41Wk03MC41MTIzIDMzLjVINzAuNDk2MlYzNUg3MC41MTIzVjMzLjVaTTcwLjUyODUgMzMuNUg3MC41MTIzVjM1SDcwLjUyODVWMzMuNVpNNzAuNTQ0NyAzMy41SDcwLjUyODVWMzVINzAuNTQ0N1YzMy41Wk03MC41NjA5IDMzLjVINzAuNTQ0N1YzNUg3MC41NjA5VjMzLjVaTTcwLjU3NzIgMzMuNUg3MC41NjA5VjM1SDcwLjU3NzJWMzMuNVpNNzAuNTkzNCAzMy41SDcwLjU3NzJWMzVINzAuNTkzNFYzMy41Wk03MC42MDk3IDMzLjVINzAuNTkzNFYzNUg3MC42MDk3VjMzLjVaTTcwLjYyNTkgMzMuNUg3MC42MDk3VjM1SDcwLjYyNTlWMzMuNVpNNzAuNjQyMiAzMy41SDcwLjYyNTlWMzVINzAuNjQyMlYzMy41Wk03MC42NTg1IDMzLjVINzAuNjQyMlYzNUg3MC42NTg1VjMzLjVaTTcwLjY3NDggMzMuNUg3MC42NTg1VjM1SDcwLjY3NDhWMzMuNVpNNzAuNjkxMSAzMy41SDcwLjY3NDhWMzVINzAuNjkxMVYzMy41Wk03MC43MDc1IDMzLjVINzAuNjkxMVYzNUg3MC43MDc1VjMzLjVaTTcwLjcyMzggMzMuNUg3MC43MDc1VjM1SDcwLjcyMzhWMzMuNVpNNzAuNzQwMiAzMy41SDcwLjcyMzhWMzVINzAuNzQwMlYzMy41Wk03MC43NTY2IDMzLjVINzAuNzQwMlYzNUg3MC43NTY2VjMzLjVaTTcwLjc3MjkgMzMuNUg3MC43NTY2VjM1SDcwLjc3MjlWMzMuNVpNNzAuNzg5MyAzMy41SDcwLjc3MjlWMzVINzAuNzg5M1YzMy41Wk03MC44MDU4IDMzLjVINzAuNzg5M1YzNUg3MC44MDU4VjMzLjVaTTcwLjgyMjIgMzMuNUg3MC44MDU4VjM1SDcwLjgyMjJWMzMuNVpNNzAuODM4NiAzMy41SDcwLjgyMjJWMzVINzAuODM4NlYzMy41Wk03MC44NTUxIDMzLjVINzAuODM4NlYzNUg3MC44NTUxVjMzLjVaTTcwLjg3MTYgMzMuNUg3MC44NTUxVjM1SDcwLjg3MTZWMzMuNVpNNzAuODg4MSAzMy41SDcwLjg3MTZWMzVINzAuODg4MVYzMy41Wk03MC45MDQ2IDMzLjVINzAuODg4MVYzNUg3MC45MDQ2VjMzLjVaTTcwLjkyMTEgMzMuNUg3MC45MDQ2VjM1SDcwLjkyMTFWMzMuNVpNNzAuOTM3NiAzMy41SDcwLjkyMTFWMzVINzAuOTM3NlYzMy41Wk03MC45NTQxIDMzLjVINzAuOTM3NlYzNUg3MC45NTQxVjMzLjVaTTcwLjk3MDcgMzMuNUg3MC45NTQxVjM1SDcwLjk3MDdWMzMuNVpNNzAuOTg3MyAzMy41SDcwLjk3MDdWMzVINzAuOTg3M1YzMy41Wk03MS4wMDM4IDMzLjVINzAuOTg3M1YzNUg3MS4wMDM4VjMzLjVaTTcxLjAyMDQgMzMuNUg3MS4wMDM4VjM1SDcxLjAyMDRWMzMuNVpNNzEuMDM3IDMzLjVINzEuMDIwNFYzNUg3MS4wMzdWMzMuNVpNNzEuMDUzNyAzMy41SDcxLjAzN1YzNUg3MS4wNTM3VjMzLjVaTTcxLjA3MDMgMzMuNUg3MS4wNTM3VjM1SDcxLjA3MDNWMzMuNVpNNzEuMDg2OSAzMy41SDcxLjA3MDNWMzVINzEuMDg2OVYzMy41Wk03MS4xMDM2IDMzLjVINzEuMDg2OVYzNUg3MS4xMDM2VjMzLjVaTTcxLjEyMDMgMzMuNUg3MS4xMDM2VjM1SDcxLjEyMDNWMzMuNVpNNzEuMTM3IDMzLjVINzEuMTIwM1YzNUg3MS4xMzdWMzMuNVpNNzEuMTUzNyAzMy41SDcxLjEzN1YzNUg3MS4xNTM3VjMzLjVaTTcxLjE3MDQgMzMuNUg3MS4xNTM3VjM1SDcxLjE3MDRWMzMuNVpNNzEuMTg3MSAzMy41SDcxLjE3MDRWMzVINzEuMTg3MVYzMy41Wk03MS4yMDM5IDMzLjVINzEuMTg3MVYzNUg3MS4yMDM5VjMzLjVaTTcxLjIyMDYgMzMuNUg3MS4yMDM5VjM1SDcxLjIyMDZWMzMuNVpNNzEuMjM3NCAzMy41SDcxLjIyMDZWMzVINzEuMjM3NFYzMy41Wk03MS4yNTQyIDMzLjVINzEuMjM3NFYzNUg3MS4yNTQyVjMzLjVaTTcxLjI3MSAzMy41SDcxLjI1NDJWMzVINzEuMjcxVjMzLjVaTTcxLjI4NzggMzMuNUg3MS4yNzFWMzVINzEuMjg3OFYzMy41Wk03MS4zMDQ2IDMzLjVINzEuMjg3OFYzNUg3MS4zMDQ2VjMzLjVaTTcxLjMyMTUgMzMuNUg3MS4zMDQ2VjM1SDcxLjMyMTVWMzMuNVpNNzEuMzM4MyAzMy41SDcxLjMyMTVWMzVINzEuMzM4M1YzMy41Wk03MS4zNTUyIDMzLjVINzEuMzM4M1YzNUg3MS4zNTUyVjMzLjVaTTcxLjM3MjEgMzMuNUg3MS4zNTUyVjM1SDcxLjM3MjFWMzMuNVpNNzEuMzg5IDMzLjVINzEuMzcyMVYzNUg3MS4zODlWMzMuNVpNNzEuNDA1OSAzMy41SDcxLjM4OVYzNUg3MS40MDU5VjMzLjVaTTcxLjQyMjggMzMuNUg3MS40MDU5VjM1SDcxLjQyMjhWMzMuNVpNNzEuNDM5NyAzMy41SDcxLjQyMjhWMzVINzEuNDM5N1YzMy41Wk03MS40NTY3IDMzLjVINzEuNDM5N1YzNUg3MS40NTY3VjMzLjVaTTcxLjQ3MzcgMzMuNUg3MS40NTY3VjM1SDcxLjQ3MzdWMzMuNVpNNzEuNDkwNiAzMy41SDcxLjQ3MzdWMzVINzEuNDkwNlYzMy41Wk03MS41MDc2IDMzLjVINzEuNDkwNlYzNUg3MS41MDc2VjMzLjVaTTcxLjUyNDYgMzMuNUg3MS41MDc2VjM1SDcxLjUyNDZWMzMuNVpNNzEuNTQxNiAzMy41SDcxLjUyNDZWMzVINzEuNTQxNlYzMy41Wk03MS41NTg3IDMzLjVINzEuNTQxNlYzNUg3MS41NTg3VjMzLjVaTTcxLjU3NTcgMzMuNUg3MS41NTg3VjM1SDcxLjU3NTdWMzMuNVpNNzEuNTkyOCAzMy41SDcxLjU3NTdWMzVINzEuNTkyOFYzMy41Wk03MS42MDk5IDMzLjVINzEuNTkyOFYzNUg3MS42MDk5VjMzLjVaTTcxLjYyNjkgMzMuNUg3MS42MDk5VjM1SDcxLjYyNjlWMzMuNVpNNzEuNjQ0IDMzLjVINzEuNjI2OVYzNUg3MS42NDRWMzMuNVpNNzEuNjYxMiAzMy41SDcxLjY0NFYzNUg3MS42NjEyVjMzLjVaTTcxLjY3ODMgMzMuNUg3MS42NjEyVjM1SDcxLjY3ODNWMzMuNVpNNzEuNjk1NCAzMy41SDcxLjY3ODNWMzVINzEuNjk1NFYzMy41Wk03MS43MTI2IDMzLjVINzEuNjk1NFYzNUg3MS43MTI2VjMzLjVaTTcxLjcyOTcgMzMuNUg3MS43MTI2VjM1SDcxLjcyOTdWMzMuNVpNNzEuNzQ2OSAzMy41SDcxLjcyOTdWMzVINzEuNzQ2OVYzMy41Wk03MS43NjQxIDMzLjVINzEuNzQ2OVYzNUg3MS43NjQxVjMzLjVaTTcxLjc4MTMgMzMuNUg3MS43NjQxVjM1SDcxLjc4MTNWMzMuNVpNNzEuNzk4NiAzMy41SDcxLjc4MTNWMzVINzEuNzk4NlYzMy41Wk03MS44MTU4IDMzLjVINzEuNzk4NlYzNUg3MS44MTU4VjMzLjVaTTcxLjgzMyAzMy41SDcxLjgxNThWMzVINzEuODMzVjMzLjVaTTcxLjg1MDMgMzMuNUg3MS44MzNWMzVINzEuODUwM1YzMy41Wk03MS44Njc2IDMzLjVINzEuODUwM1YzNUg3MS44Njc2VjMzLjVaTTcxLjg4NDkgMzMuNUg3MS44Njc2VjM1SDcxLjg4NDlWMzMuNVpNNzEuOTAyMiAzMy41SDcxLjg4NDlWMzVINzEuOTAyMlYzMy41Wk03MS45MTk1IDMzLjVINzEuOTAyMlYzNUg3MS45MTk1VjMzLjVaTTcxLjkzNjggMzMuNUg3MS45MTk1VjM1SDcxLjkzNjhWMzMuNVpNNzEuOTU0MiAzMy41SDcxLjkzNjhWMzVINzEuOTU0MlYzMy41Wk03MS45NzE1IDMzLjVINzEuOTU0MlYzNUg3MS45NzE1VjMzLjVaTTcxLjk4ODkgMzMuNUg3MS45NzE1VjM1SDcxLjk4ODlWMzMuNVpNNzIuMDA2MyAzMy41SDcxLjk4ODlWMzVINzIuMDA2M1YzMy41Wk03Mi4wMjM3IDMzLjVINzIuMDA2M1YzNUg3Mi4wMjM3VjMzLjVaTTcyLjA0MTEgMzMuNUg3Mi4wMjM3VjM1SDcyLjA0MTFWMzMuNVpNNzIuMDU4NSAzMy41SDcyLjA0MTFWMzVINzIuMDU4NVYzMy41Wk03Mi4wNzYgMzMuNUg3Mi4wNTg1VjM1SDcyLjA3NlYzMy41Wk03Mi4wOTM0IDMzLjVINzIuMDc2VjM1SDcyLjA5MzRWMzMuNVpNNzIuMTEwOSAzMy41SDcyLjA5MzRWMzVINzIuMTEwOVYzMy41Wk03Mi4xMjg0IDMzLjVINzIuMTEwOVYzNUg3Mi4xMjg0VjMzLjVaTTcyLjE0NTkgMzMuNUg3Mi4xMjg0VjM1SDcyLjE0NTlWMzMuNVpNNzIuMTYzNCAzMy41SDcyLjE0NTlWMzVINzIuMTYzNFYzMy41Wk03Mi4xODA5IDMzLjVINzIuMTYzNFYzNUg3Mi4xODA5VjMzLjVaTTcyLjE5ODUgMzMuNUg3Mi4xODA5VjM1SDcyLjE5ODVWMzMuNVpNNzIuMjE2IDMzLjVINzIuMTk4NVYzNUg3Mi4yMTZWMzMuNVpNNzIuMjMzNiAzMy41SDcyLjIxNlYzNUg3Mi4yMzM2VjMzLjVaTTcyLjI1MTEgMzMuNUg3Mi4yMzM2VjM1SDcyLjI1MTFWMzMuNVpNNzIuMjY4NyAzMy41SDcyLjI1MTFWMzVINzIuMjY4N1YzMy41Wk03Mi4yODYzIDMzLjVINzIuMjY4N1YzNUg3Mi4yODYzVjMzLjVaTTcyLjMwNCAzMy41SDcyLjI4NjNWMzVINzIuMzA0VjMzLjVaTTcyLjMyMTYgMzMuNUg3Mi4zMDRWMzVINzIuMzIxNlYzMy41Wk03Mi4zMzkyIDMzLjVINzIuMzIxNlYzNUg3Mi4zMzkyVjMzLjVaTTcyLjM1NjkgMzMuNUg3Mi4zMzkyVjM1SDcyLjM1NjlWMzMuNVpNNzIuMzc0NiAzMy41SDcyLjM1NjlWMzVINzIuMzc0NlYzMy41Wk03Mi4zOTIzIDMzLjVINzIuMzc0NlYzNUg3Mi4zOTIzVjMzLjVaTTcyLjQxIDMzLjVINzIuMzkyM1YzNUg3Mi40MVYzMy41Wk03Mi40Mjc3IDMzLjVINzIuNDFWMzVINzIuNDI3N1YzMy41Wk03Mi40NDU0IDMzLjVINzIuNDI3N1YzNUg3Mi40NDU0VjMzLjVaTTcyLjQ2MzIgMzMuNUg3Mi40NDU0VjM1SDcyLjQ2MzJWMzMuNVpNNzIuNDgwOSAzMy41SDcyLjQ2MzJWMzVINzIuNDgwOVYzMy41Wk03Mi40OTg3IDMzLjVINzIuNDgwOVYzNUg3Mi40OTg3VjMzLjVaTTcyLjUxNjUgMzMuNUg3Mi40OTg3VjM1SDcyLjUxNjVWMzMuNVpNNzIuNTM0MyAzMy41SDcyLjUxNjVWMzVINzIuNTM0M1YzMy41Wk03Mi41NTIxIDMzLjVINzIuNTM0M1YzNUg3Mi41NTIxVjMzLjVaTTcyLjU2OTkgMzMuNUg3Mi41NTIxVjM1SDcyLjU2OTlWMzMuNVpNNzIuNTg3NyAzMy41SDcyLjU2OTlWMzVINzIuNTg3N1YzMy41Wk03Mi42MDU2IDMzLjVINzIuNTg3N1YzNUg3Mi42MDU2VjMzLjVaTTcyLjYyMzQgMzMuNUg3Mi42MDU2VjM1SDcyLjYyMzRWMzMuNVpNNzIuNjQxMyAzMy41SDcyLjYyMzRWMzVINzIuNjQxM1YzMy41Wk03Mi42NTkyIDMzLjVINzIuNjQxM1YzNUg3Mi42NTkyVjMzLjVaTTcyLjY3NzEgMzMuNUg3Mi42NTkyVjM1SDcyLjY3NzFWMzMuNVpNNzIuNjk1IDMzLjVINzIuNjc3MVYzNUg3Mi42OTVWMzMuNVpNNzIuNzEzIDMzLjVINzIuNjk1VjM1SDcyLjcxM1YzMy41Wk03Mi43MzA5IDMzLjVINzIuNzEzVjM1SDcyLjczMDlWMzMuNVpNNzIuNzQ4OSAzMy41SDcyLjczMDlWMzVINzIuNzQ4OVYzMy41Wk03Mi43NjY5IDMzLjVINzIuNzQ4OVYzNUg3Mi43NjY5VjMzLjVaTTcyLjc4NDggMzMuNUg3Mi43NjY5VjM1SDcyLjc4NDhWMzMuNVpNNzIuODAyOCAzMy41SDcyLjc4NDhWMzVINzIuODAyOFYzMy41Wk03Mi44MjA5IDMzLjVINzIuODAyOFYzNUg3Mi44MjA5VjMzLjVaTTcyLjgzODkgMzMuNUg3Mi44MjA5VjM1SDcyLjgzODlWMzMuNVpNNzIuODU2OSAzMy41SDcyLjgzODlWMzVINzIuODU2OVYzMy41Wk03Mi44NzUgMzMuNUg3Mi44NTY5VjM1SDcyLjg3NVYzMy41Wk03Mi44OTMxIDMzLjVINzIuODc1VjM1SDcyLjg5MzFWMzMuNVpNNzIuOTExMSAzMy41SDcyLjg5MzFWMzVINzIuOTExMVYzMy41Wk03Mi45MjkyIDMzLjVINzIuOTExMVYzNUg3Mi45MjkyVjMzLjVaTTcyLjk0NzQgMzMuNUg3Mi45MjkyVjM1SDcyLjk0NzRWMzMuNVpNNzIuOTY1NSAzMy41SDcyLjk0NzRWMzVINzIuOTY1NVYzMy41Wk03Mi45ODM2IDMzLjVINzIuOTY1NVYzNUg3Mi45ODM2VjMzLjVaTTczLjAwMTggMzMuNUg3Mi45ODM2VjM1SDczLjAwMThWMzMuNVpNNzMuMDE5OSAzMy41SDczLjAwMThWMzVINzMuMDE5OVYzMy41Wk03My4wMzgxIDMzLjVINzMuMDE5OVYzNUg3My4wMzgxVjMzLjVaTTczLjA1NjMgMzMuNUg3My4wMzgxVjM1SDczLjA1NjNWMzMuNVpNNzMuMDc0NSAzMy41SDczLjA1NjNWMzVINzMuMDc0NVYzMy41Wk03My4wOTI3IDMzLjVINzMuMDc0NVYzNUg3My4wOTI3VjMzLjVaTTczLjExMSAzMy41SDczLjA5MjdWMzVINzMuMTExVjMzLjVaTTczLjEyOTIgMzMuNUg3My4xMTFWMzVINzMuMTI5MlYzMy41Wk03My4xNDc1IDMzLjVINzMuMTI5MlYzNUg3My4xNDc1VjMzLjVaTTczLjE2NTcgMzMuNUg3My4xNDc1VjM1SDczLjE2NTdWMzMuNVpNNzMuMTg0IDMzLjVINzMuMTY1N1YzNUg3My4xODRWMzMuNVpNNzMuMjAyMyAzMy41SDczLjE4NFYzNUg3My4yMDIzVjMzLjVaTTczLjIyMDcgMzMuNUg3My4yMDIzVjM1SDczLjIyMDdWMzMuNVpNNzMuMjM5IDMzLjVINzMuMjIwN1YzNUg3My4yMzlWMzMuNVpNNzMuMjU3MyAzMy41SDczLjIzOVYzNUg3My4yNTczVjMzLjVaTTczLjI3NTcgMzMuNUg3My4yNTczVjM1SDczLjI3NTdWMzMuNVpNNzMuMjk0MSAzMy41SDczLjI3NTdWMzVINzMuMjk0MVYzMy41Wk03My4zMTI0IDMzLjVINzMuMjk0MVYzNUg3My4zMTI0VjMzLjVaTTczLjMzMDggMzMuNUg3My4zMTI0VjM1SDczLjMzMDhWMzMuNVpNNzMuMzQ5MyAzMy41SDczLjMzMDhWMzVINzMuMzQ5M1YzMy41Wk03My4zNjc3IDMzLjVINzMuMzQ5M1YzNUg3My4zNjc3VjMzLjVaTTczLjM4NjEgMzMuNUg3My4zNjc3VjM1SDczLjM4NjFWMzMuNVpNNzMuNDA0NiAzMy41SDczLjM4NjFWMzVINzMuNDA0NlYzMy41Wk03My40MjMgMzMuNUg3My40MDQ2VjM1SDczLjQyM1YzMy41Wk03My40NDE1IDMzLjVINzMuNDIzVjM1SDczLjQ0MTVWMzMuNVpNNzMuNDYgMzMuNUg3My40NDE1VjM1SDczLjQ2VjMzLjVaTTczLjQ3ODUgMzMuNUg3My40NlYzNUg3My40Nzg1VjMzLjVaTTczLjQ5NyAzMy41SDczLjQ3ODVWMzVINzMuNDk3VjMzLjVaTTczLjUxNTYgMzMuNUg3My40OTdWMzVINzMuNTE1NlYzMy41Wk03My41MzQxIDMzLjVINzMuNTE1NlYzNUg3My41MzQxVjMzLjVaTTczLjU1MjcgMzMuNUg3My41MzQxVjM1SDczLjU1MjdWMzMuNVpNNzMuNTcxMyAzMy41SDczLjU1MjdWMzVINzMuNTcxM1YzMy41Wk03My41ODk4IDMzLjVINzMuNTcxM1YzNUg3My41ODk4VjMzLjVaTTczLjYwODQgMzMuNUg3My41ODk4VjM1SDczLjYwODRWMzMuNVpNNzMuNjI3MSAzMy41SDczLjYwODRWMzVINzMuNjI3MVYzMy41Wk03My42NDU3IDMzLjVINzMuNjI3MVYzNUg3My42NDU3VjMzLjVaTTczLjY2NDMgMzMuNUg3My42NDU3VjM1SDczLjY2NDNWMzMuNVpNNzMuNjgzIDMzLjVINzMuNjY0M1YzNUg3My42ODNWMzMuNVpNNzMuNzAxNyAzMy41SDczLjY4M1YzNUg3My43MDE3VjMzLjVaTTczLjcyMDMgMzMuNUg3My43MDE3VjM1SDczLjcyMDNWMzMuNVpNNzMuNzM5IDMzLjVINzMuNzIwM1YzNUg3My43MzlWMzMuNVpNNzMuNzU3OCAzMy41SDczLjczOVYzNUg3My43NTc4VjMzLjVaTTczLjc3NjUgMzMuNUg3My43NTc4VjM1SDczLjc3NjVWMzMuNVpNNzMuNzk1MiAzMy41SDczLjc3NjVWMzVINzMuNzk1MlYzMy41Wk03My44MTQgMzMuNUg3My43OTUyVjM1SDczLjgxNFYzMy41Wk03My44MzI3IDMzLjVINzMuODE0VjM1SDczLjgzMjdWMzMuNVpNNzMuODUxNSAzMy41SDczLjgzMjdWMzVINzMuODUxNVYzMy41Wk03My44NzAzIDMzLjVINzMuODUxNVYzNUg3My44NzAzVjMzLjVaTTczLjg4OTEgMzMuNUg3My44NzAzVjM1SDczLjg4OTFWMzMuNVpNNzMuOTA3OSAzMy41SDczLjg4OTFWMzVINzMuOTA3OVYzMy41Wk03My45MjY4IDMzLjVINzMuOTA3OVYzNUg3My45MjY4VjMzLjVaTTczLjk0NTYgMzMuNUg3My45MjY4VjM1SDczLjk0NTZWMzMuNVpNNzMuOTY0NSAzMy41SDczLjk0NTZWMzVINzMuOTY0NVYzMy41Wk03My45ODM0IDMzLjVINzMuOTY0NVYzNUg3My45ODM0VjMzLjVaTTc0LjAwMjMgMzMuNUg3My45ODM0VjM1SDc0LjAwMjNWMzMuNVpNNzQuMDIxMiAzMy41SDc0LjAwMjNWMzVINzQuMDIxMlYzMy41Wk03NC4wNDAxIDMzLjVINzQuMDIxMlYzNUg3NC4wNDAxVjMzLjVaTTc0LjA1OSAzMy41SDc0LjA0MDFWMzVINzQuMDU5VjMzLjVaTTc0LjA3NzkgMzMuNUg3NC4wNTlWMzVINzQuMDc3OVYzMy41Wk03NC4wOTY5IDMzLjVINzQuMDc3OVYzNUg3NC4wOTY5VjMzLjVaTTc0LjExNTkgMzMuNUg3NC4wOTY5VjM1SDc0LjExNTlWMzMuNVpNNzQuMTM0OSAzMy41SDc0LjExNTlWMzVINzQuMTM0OVYzMy41Wk03NC4xNTM5IDMzLjVINzQuMTM0OVYzNUg3NC4xNTM5VjMzLjVaTTc0LjE3MjkgMzMuNUg3NC4xNTM5VjM1SDc0LjE3MjlWMzMuNVpNNzQuMTkxOSAzMy41SDc0LjE3MjlWMzVINzQuMTkxOVYzMy41Wk03NC4yMTA5IDMzLjVINzQuMTkxOVYzNUg3NC4yMTA5VjMzLjVaTTc0LjIzIDMzLjVINzQuMjEwOVYzNUg3NC4yM1YzMy41Wk03NC4yNDkxIDMzLjVINzQuMjNWMzVINzQuMjQ5MVYzMy41Wk03NC4yNjgxIDMzLjVINzQuMjQ5MVYzNUg3NC4yNjgxVjMzLjVaTTc0LjI4NzIgMzMuNUg3NC4yNjgxVjM1SDc0LjI4NzJWMzMuNVpNNzQuMzA2MyAzMy41SDc0LjI4NzJWMzVINzQuMzA2M1YzMy41Wk03NC4zMjU1IDMzLjVINzQuMzA2M1YzNUg3NC4zMjU1VjMzLjVaTTc0LjM0NDYgMzMuNUg3NC4zMjU1VjM1SDc0LjM0NDZWMzMuNVpNNzQuMzYzOCAzMy41SDc0LjM0NDZWMzVINzQuMzYzOFYzMy41Wk03NC4zODI5IDMzLjVINzQuMzYzOFYzNUg3NC4zODI5VjMzLjVaTTc0LjQwMjEgMzMuNUg3NC4zODI5VjM1SDc0LjQwMjFWMzMuNVpNNzQuNDIxMyAzMy41SDc0LjQwMjFWMzVINzQuNDIxM1YzMy41Wk03NC40NDA1IDMzLjVINzQuNDIxM1YzNUg3NC40NDA1VjMzLjVaTTc1LjE5MDUgMzUuNzVWMzQuMjVINzMuNjkwNVYzNS43NUg3NS4xOTA1Wk03NC40MjEzIDM2LjVINzQuNDQwNVYzNUg3NC40MjEzVjM2LjVaTTc0LjQwMjEgMzYuNUg3NC40MjEzVjM1SDc0LjQwMjFWMzYuNVpNNzQuMzgyOSAzNi41SDc0LjQwMjFWMzVINzQuMzgyOVYzNi41Wk03NC4zNjM4IDM2LjVINzQuMzgyOVYzNUg3NC4zNjM4VjM2LjVaTTc0LjM0NDYgMzYuNUg3NC4zNjM4VjM1SDc0LjM0NDZWMzYuNVpNNzQuMzI1NSAzNi41SDc0LjM0NDZWMzVINzQuMzI1NVYzNi41Wk03NC4zMDYzIDM2LjVINzQuMzI1NVYzNUg3NC4zMDYzVjM2LjVaTTc0LjI4NzIgMzYuNUg3NC4zMDYzVjM1SDc0LjI4NzJWMzYuNVpNNzQuMjY4MSAzNi41SDc0LjI4NzJWMzVINzQuMjY4MVYzNi41Wk03NC4yNDkxIDM2LjVINzQuMjY4MVYzNUg3NC4yNDkxVjM2LjVaTTc0LjIzIDM2LjVINzQuMjQ5MVYzNUg3NC4yM1YzNi41Wk03NC4yMTA5IDM2LjVINzQuMjNWMzVINzQuMjEwOVYzNi41Wk03NC4xOTE5IDM2LjVINzQuMjEwOVYzNUg3NC4xOTE5VjM2LjVaTTc0LjE3MjkgMzYuNUg3NC4xOTE5VjM1SDc0LjE3MjlWMzYuNVpNNzQuMTUzOSAzNi41SDc0LjE3MjlWMzVINzQuMTUzOVYzNi41Wk03NC4xMzQ5IDM2LjVINzQuMTUzOVYzNUg3NC4xMzQ5VjM2LjVaTTc0LjExNTkgMzYuNUg3NC4xMzQ5VjM1SDc0LjExNTlWMzYuNVpNNzQuMDk2OSAzNi41SDc0LjExNTlWMzVINzQuMDk2OVYzNi41Wk03NC4wNzc5IDM2LjVINzQuMDk2OVYzNUg3NC4wNzc5VjM2LjVaTTc0LjA1OSAzNi41SDc0LjA3NzlWMzVINzQuMDU5VjM2LjVaTTc0LjA0MDEgMzYuNUg3NC4wNTlWMzVINzQuMDQwMVYzNi41Wk03NC4wMjEyIDM2LjVINzQuMDQwMVYzNUg3NC4wMjEyVjM2LjVaTTc0LjAwMjMgMzYuNUg3NC4wMjEyVjM1SDc0LjAwMjNWMzYuNVpNNzMuOTgzNCAzNi41SDc0LjAwMjNWMzVINzMuOTgzNFYzNi41Wk03My45NjQ1IDM2LjVINzMuOTgzNFYzNUg3My45NjQ1VjM2LjVaTTczLjk0NTYgMzYuNUg3My45NjQ1VjM1SDczLjk0NTZWMzYuNVpNNzMuOTI2OCAzNi41SDczLjk0NTZWMzVINzMuOTI2OFYzNi41Wk03My45MDc5IDM2LjVINzMuOTI2OFYzNUg3My45MDc5VjM2LjVaTTczLjg4OTEgMzYuNUg3My45MDc5VjM1SDczLjg4OTFWMzYuNVpNNzMuODcwMyAzNi41SDczLjg4OTFWMzVINzMuODcwM1YzNi41Wk03My44NTE1IDM2LjVINzMuODcwM1YzNUg3My44NTE1VjM2LjVaTTczLjgzMjcgMzYuNUg3My44NTE1VjM1SDczLjgzMjdWMzYuNVpNNzMuODE0IDM2LjVINzMuODMyN1YzNUg3My44MTRWMzYuNVpNNzMuNzk1MiAzNi41SDczLjgxNFYzNUg3My43OTUyVjM2LjVaTTczLjc3NjUgMzYuNUg3My43OTUyVjM1SDczLjc3NjVWMzYuNVpNNzMuNzU3OCAzNi41SDczLjc3NjVWMzVINzMuNzU3OFYzNi41Wk03My43MzkgMzYuNUg3My43NTc4VjM1SDczLjczOVYzNi41Wk03My43MjAzIDM2LjVINzMuNzM5VjM1SDczLjcyMDNWMzYuNVpNNzMuNzAxNyAzNi41SDczLjcyMDNWMzVINzMuNzAxN1YzNi41Wk03My42ODMgMzYuNUg3My43MDE3VjM1SDczLjY4M1YzNi41Wk03My42NjQzIDM2LjVINzMuNjgzVjM1SDczLjY2NDNWMzYuNVpNNzMuNjQ1NyAzNi41SDczLjY2NDNWMzVINzMuNjQ1N1YzNi41Wk03My42MjcxIDM2LjVINzMuNjQ1N1YzNUg3My42MjcxVjM2LjVaTTczLjYwODQgMzYuNUg3My42MjcxVjM1SDczLjYwODRWMzYuNVpNNzMuNTg5OCAzNi41SDczLjYwODRWMzVINzMuNTg5OFYzNi41Wk03My41NzEzIDM2LjVINzMuNTg5OFYzNUg3My41NzEzVjM2LjVaTTczLjU1MjcgMzYuNUg3My41NzEzVjM1SDczLjU1MjdWMzYuNVpNNzMuNTM0MSAzNi41SDczLjU1MjdWMzVINzMuNTM0MVYzNi41Wk03My41MTU2IDM2LjVINzMuNTM0MVYzNUg3My41MTU2VjM2LjVaTTczLjQ5NyAzNi41SDczLjUxNTZWMzVINzMuNDk3VjM2LjVaTTczLjQ3ODUgMzYuNUg3My40OTdWMzVINzMuNDc4NVYzNi41Wk03My40NiAzNi41SDczLjQ3ODVWMzVINzMuNDZWMzYuNVpNNzMuNDQxNSAzNi41SDczLjQ2VjM1SDczLjQ0MTVWMzYuNVpNNzMuNDIzIDM2LjVINzMuNDQxNVYzNUg3My40MjNWMzYuNVpNNzMuNDA0NiAzNi41SDczLjQyM1YzNUg3My40MDQ2VjM2LjVaTTczLjM4NjEgMzYuNUg3My40MDQ2VjM1SDczLjM4NjFWMzYuNVpNNzMuMzY3NyAzNi41SDczLjM4NjFWMzVINzMuMzY3N1YzNi41Wk03My4zNDkzIDM2LjVINzMuMzY3N1YzNUg3My4zNDkzVjM2LjVaTTczLjMzMDggMzYuNUg3My4zNDkzVjM1SDczLjMzMDhWMzYuNVpNNzMuMzEyNCAzNi41SDczLjMzMDhWMzVINzMuMzEyNFYzNi41Wk03My4yOTQxIDM2LjVINzMuMzEyNFYzNUg3My4yOTQxVjM2LjVaTTczLjI3NTcgMzYuNUg3My4yOTQxVjM1SDczLjI3NTdWMzYuNVpNNzMuMjU3MyAzNi41SDczLjI3NTdWMzVINzMuMjU3M1YzNi41Wk03My4yMzkgMzYuNUg3My4yNTczVjM1SDczLjIzOVYzNi41Wk03My4yMjA3IDM2LjVINzMuMjM5VjM1SDczLjIyMDdWMzYuNVpNNzMuMjAyMyAzNi41SDczLjIyMDdWMzVINzMuMjAyM1YzNi41Wk03My4xODQgMzYuNUg3My4yMDIzVjM1SDczLjE4NFYzNi41Wk03My4xNjU3IDM2LjVINzMuMTg0VjM1SDczLjE2NTdWMzYuNVpNNzMuMTQ3NSAzNi41SDczLjE2NTdWMzVINzMuMTQ3NVYzNi41Wk03My4xMjkyIDM2LjVINzMuMTQ3NVYzNUg3My4xMjkyVjM2LjVaTTczLjExMSAzNi41SDczLjEyOTJWMzVINzMuMTExVjM2LjVaTTczLjA5MjcgMzYuNUg3My4xMTFWMzVINzMuMDkyN1YzNi41Wk03My4wNzQ1IDM2LjVINzMuMDkyN1YzNUg3My4wNzQ1VjM2LjVaTTczLjA1NjMgMzYuNUg3My4wNzQ1VjM1SDczLjA1NjNWMzYuNVpNNzMuMDM4MSAzNi41SDczLjA1NjNWMzVINzMuMDM4MVYzNi41Wk03My4wMTk5IDM2LjVINzMuMDM4MVYzNUg3My4wMTk5VjM2LjVaTTczLjAwMTggMzYuNUg3My4wMTk5VjM1SDczLjAwMThWMzYuNVpNNzIuOTgzNiAzNi41SDczLjAwMThWMzVINzIuOTgzNlYzNi41Wk03Mi45NjU1IDM2LjVINzIuOTgzNlYzNUg3Mi45NjU1VjM2LjVaTTcyLjk0NzQgMzYuNUg3Mi45NjU1VjM1SDcyLjk0NzRWMzYuNVpNNzIuOTI5MiAzNi41SDcyLjk0NzRWMzVINzIuOTI5MlYzNi41Wk03Mi45MTExIDM2LjVINzIuOTI5MlYzNUg3Mi45MTExVjM2LjVaTTcyLjg5MzEgMzYuNUg3Mi45MTExVjM1SDcyLjg5MzFWMzYuNVpNNzIuODc1IDM2LjVINzIuODkzMVYzNUg3Mi44NzVWMzYuNVpNNzIuODU2OSAzNi41SDcyLjg3NVYzNUg3Mi44NTY5VjM2LjVaTTcyLjgzODkgMzYuNUg3Mi44NTY5VjM1SDcyLjgzODlWMzYuNVpNNzIuODIwOSAzNi41SDcyLjgzODlWMzVINzIuODIwOVYzNi41Wk03Mi44MDI4IDM2LjVINzIuODIwOVYzNUg3Mi44MDI4VjM2LjVaTTcyLjc4NDggMzYuNUg3Mi44MDI4VjM1SDcyLjc4NDhWMzYuNVpNNzIuNzY2OSAzNi41SDcyLjc4NDhWMzVINzIuNzY2OVYzNi41Wk03Mi43NDg5IDM2LjVINzIuNzY2OVYzNUg3Mi43NDg5VjM2LjVaTTcyLjczMDkgMzYuNUg3Mi43NDg5VjM1SDcyLjczMDlWMzYuNVpNNzIuNzEzIDM2LjVINzIuNzMwOVYzNUg3Mi43MTNWMzYuNVpNNzIuNjk1IDM2LjVINzIuNzEzVjM1SDcyLjY5NVYzNi41Wk03Mi42NzcxIDM2LjVINzIuNjk1VjM1SDcyLjY3NzFWMzYuNVpNNzIuNjU5MiAzNi41SDcyLjY3NzFWMzVINzIuNjU5MlYzNi41Wk03Mi42NDEzIDM2LjVINzIuNjU5MlYzNUg3Mi42NDEzVjM2LjVaTTcyLjYyMzQgMzYuNUg3Mi42NDEzVjM1SDcyLjYyMzRWMzYuNVpNNzIuNjA1NiAzNi41SDcyLjYyMzRWMzVINzIuNjA1NlYzNi41Wk03Mi41ODc3IDM2LjVINzIuNjA1NlYzNUg3Mi41ODc3VjM2LjVaTTcyLjU2OTkgMzYuNUg3Mi41ODc3VjM1SDcyLjU2OTlWMzYuNVpNNzIuNTUyMSAzNi41SDcyLjU2OTlWMzVINzIuNTUyMVYzNi41Wk03Mi41MzQzIDM2LjVINzIuNTUyMVYzNUg3Mi41MzQzVjM2LjVaTTcyLjUxNjUgMzYuNUg3Mi41MzQzVjM1SDcyLjUxNjVWMzYuNVpNNzIuNDk4NyAzNi41SDcyLjUxNjVWMzVINzIuNDk4N1YzNi41Wk03Mi40ODA5IDM2LjVINzIuNDk4N1YzNUg3Mi40ODA5VjM2LjVaTTcyLjQ2MzIgMzYuNUg3Mi40ODA5VjM1SDcyLjQ2MzJWMzYuNVpNNzIuNDQ1NCAzNi41SDcyLjQ2MzJWMzVINzIuNDQ1NFYzNi41Wk03Mi40Mjc3IDM2LjVINzIuNDQ1NFYzNUg3Mi40Mjc3VjM2LjVaTTcyLjQxIDM2LjVINzIuNDI3N1YzNUg3Mi40MVYzNi41Wk03Mi4zOTIzIDM2LjVINzIuNDFWMzVINzIuMzkyM1YzNi41Wk03Mi4zNzQ2IDM2LjVINzIuMzkyM1YzNUg3Mi4zNzQ2VjM2LjVaTTcyLjM1NjkgMzYuNUg3Mi4zNzQ2VjM1SDcyLjM1NjlWMzYuNVpNNzIuMzM5MiAzNi41SDcyLjM1NjlWMzVINzIuMzM5MlYzNi41Wk03Mi4zMjE2IDM2LjVINzIuMzM5MlYzNUg3Mi4zMjE2VjM2LjVaTTcyLjMwNCAzNi41SDcyLjMyMTZWMzVINzIuMzA0VjM2LjVaTTcyLjI4NjMgMzYuNUg3Mi4zMDRWMzVINzIuMjg2M1YzNi41Wk03Mi4yNjg3IDM2LjVINzIuMjg2M1YzNUg3Mi4yNjg3VjM2LjVaTTcyLjI1MTEgMzYuNUg3Mi4yNjg3VjM1SDcyLjI1MTFWMzYuNVpNNzIuMjMzNiAzNi41SDcyLjI1MTFWMzVINzIuMjMzNlYzNi41Wk03Mi4yMTYgMzYuNUg3Mi4yMzM2VjM1SDcyLjIxNlYzNi41Wk03Mi4xOTg1IDM2LjVINzIuMjE2VjM1SDcyLjE5ODVWMzYuNVpNNzIuMTgwOSAzNi41SDcyLjE5ODVWMzVINzIuMTgwOVYzNi41Wk03Mi4xNjM0IDM2LjVINzIuMTgwOVYzNUg3Mi4xNjM0VjM2LjVaTTcyLjE0NTkgMzYuNUg3Mi4xNjM0VjM1SDcyLjE0NTlWMzYuNVpNNzIuMTI4NCAzNi41SDcyLjE0NTlWMzVINzIuMTI4NFYzNi41Wk03Mi4xMTA5IDM2LjVINzIuMTI4NFYzNUg3Mi4xMTA5VjM2LjVaTTcyLjA5MzQgMzYuNUg3Mi4xMTA5VjM1SDcyLjA5MzRWMzYuNVpNNzIuMDc2IDM2LjVINzIuMDkzNFYzNUg3Mi4wNzZWMzYuNVpNNzIuMDU4NSAzNi41SDcyLjA3NlYzNUg3Mi4wNTg1VjM2LjVaTTcyLjA0MTEgMzYuNUg3Mi4wNTg1VjM1SDcyLjA0MTFWMzYuNVpNNzIuMDIzNyAzNi41SDcyLjA0MTFWMzVINzIuMDIzN1YzNi41Wk03Mi4wMDYzIDM2LjVINzIuMDIzN1YzNUg3Mi4wMDYzVjM2LjVaTTcxLjk4ODkgMzYuNUg3Mi4wMDYzVjM1SDcxLjk4ODlWMzYuNVpNNzEuOTcxNSAzNi41SDcxLjk4ODlWMzVINzEuOTcxNVYzNi41Wk03MS45NTQyIDM2LjVINzEuOTcxNVYzNUg3MS45NTQyVjM2LjVaTTcxLjkzNjggMzYuNUg3MS45NTQyVjM1SDcxLjkzNjhWMzYuNVpNNzEuOTE5NSAzNi41SDcxLjkzNjhWMzVINzEuOTE5NVYzNi41Wk03MS45MDIyIDM2LjVINzEuOTE5NVYzNUg3MS45MDIyVjM2LjVaTTcxLjg4NDkgMzYuNUg3MS45MDIyVjM1SDcxLjg4NDlWMzYuNVpNNzEuODY3NiAzNi41SDcxLjg4NDlWMzVINzEuODY3NlYzNi41Wk03MS44NTAzIDM2LjVINzEuODY3NlYzNUg3MS44NTAzVjM2LjVaTTcxLjgzMyAzNi41SDcxLjg1MDNWMzVINzEuODMzVjM2LjVaTTcxLjgxNTggMzYuNUg3MS44MzNWMzVINzEuODE1OFYzNi41Wk03MS43OTg2IDM2LjVINzEuODE1OFYzNUg3MS43OTg2VjM2LjVaTTcxLjc4MTMgMzYuNUg3MS43OTg2VjM1SDcxLjc4MTNWMzYuNVpNNzEuNzY0MSAzNi41SDcxLjc4MTNWMzVINzEuNzY0MVYzNi41Wk03MS43NDY5IDM2LjVINzEuNzY0MVYzNUg3MS43NDY5VjM2LjVaTTcxLjcyOTcgMzYuNUg3MS43NDY5VjM1SDcxLjcyOTdWMzYuNVpNNzEuNzEyNiAzNi41SDcxLjcyOTdWMzVINzEuNzEyNlYzNi41Wk03MS42OTU0IDM2LjVINzEuNzEyNlYzNUg3MS42OTU0VjM2LjVaTTcxLjY3ODMgMzYuNUg3MS42OTU0VjM1SDcxLjY3ODNWMzYuNVpNNzEuNjYxMiAzNi41SDcxLjY3ODNWMzVINzEuNjYxMlYzNi41Wk03MS42NDQgMzYuNUg3MS42NjEyVjM1SDcxLjY0NFYzNi41Wk03MS42MjY5IDM2LjVINzEuNjQ0VjM1SDcxLjYyNjlWMzYuNVpNNzEuNjA5OSAzNi41SDcxLjYyNjlWMzVINzEuNjA5OVYzNi41Wk03MS41OTI4IDM2LjVINzEuNjA5OVYzNUg3MS41OTI4VjM2LjVaTTcxLjU3NTcgMzYuNUg3MS41OTI4VjM1SDcxLjU3NTdWMzYuNVpNNzEuNTU4NyAzNi41SDcxLjU3NTdWMzVINzEuNTU4N1YzNi41Wk03MS41NDE2IDM2LjVINzEuNTU4N1YzNUg3MS41NDE2VjM2LjVaTTcxLjUyNDYgMzYuNUg3MS41NDE2VjM1SDcxLjUyNDZWMzYuNVpNNzEuNTA3NiAzNi41SDcxLjUyNDZWMzVINzEuNTA3NlYzNi41Wk03MS40OTA2IDM2LjVINzEuNTA3NlYzNUg3MS40OTA2VjM2LjVaTTcxLjQ3MzcgMzYuNUg3MS40OTA2VjM1SDcxLjQ3MzdWMzYuNVpNNzEuNDU2NyAzNi41SDcxLjQ3MzdWMzVINzEuNDU2N1YzNi41Wk03MS40Mzk3IDM2LjVINzEuNDU2N1YzNUg3MS40Mzk3VjM2LjVaTTcxLjQyMjggMzYuNUg3MS40Mzk3VjM1SDcxLjQyMjhWMzYuNVpNNzEuNDA1OSAzNi41SDcxLjQyMjhWMzVINzEuNDA1OVYzNi41Wk03MS4zODkgMzYuNUg3MS40MDU5VjM1SDcxLjM4OVYzNi41Wk03MS4zNzIxIDM2LjVINzEuMzg5VjM1SDcxLjM3MjFWMzYuNVpNNzEuMzU1MiAzNi41SDcxLjM3MjFWMzVINzEuMzU1MlYzNi41Wk03MS4zMzgzIDM2LjVINzEuMzU1MlYzNUg3MS4zMzgzVjM2LjVaTTcxLjMyMTUgMzYuNUg3MS4zMzgzVjM1SDcxLjMyMTVWMzYuNVpNNzEuMzA0NiAzNi41SDcxLjMyMTVWMzVINzEuMzA0NlYzNi41Wk03MS4yODc4IDM2LjVINzEuMzA0NlYzNUg3MS4yODc4VjM2LjVaTTcxLjI3MSAzNi41SDcxLjI4NzhWMzVINzEuMjcxVjM2LjVaTTcxLjI1NDIgMzYuNUg3MS4yNzFWMzVINzEuMjU0MlYzNi41Wk03MS4yMzc0IDM2LjVINzEuMjU0MlYzNUg3MS4yMzc0VjM2LjVaTTcxLjIyMDYgMzYuNUg3MS4yMzc0VjM1SDcxLjIyMDZWMzYuNVpNNzEuMjAzOSAzNi41SDcxLjIyMDZWMzVINzEuMjAzOVYzNi41Wk03MS4xODcxIDM2LjVINzEuMjAzOVYzNUg3MS4xODcxVjM2LjVaTTcxLjE3MDQgMzYuNUg3MS4xODcxVjM1SDcxLjE3MDRWMzYuNVpNNzEuMTUzNyAzNi41SDcxLjE3MDRWMzVINzEuMTUzN1YzNi41Wk03MS4xMzcgMzYuNUg3MS4xNTM3VjM1SDcxLjEzN1YzNi41Wk03MS4xMjAzIDM2LjVINzEuMTM3VjM1SDcxLjEyMDNWMzYuNVpNNzEuMTAzNiAzNi41SDcxLjEyMDNWMzVINzEuMTAzNlYzNi41Wk03MS4wODY5IDM2LjVINzEuMTAzNlYzNUg3MS4wODY5VjM2LjVaTTcxLjA3MDMgMzYuNUg3MS4wODY5VjM1SDcxLjA3MDNWMzYuNVpNNzEuMDUzNyAzNi41SDcxLjA3MDNWMzVINzEuMDUzN1YzNi41Wk03MS4wMzcgMzYuNUg3MS4wNTM3VjM1SDcxLjAzN1YzNi41Wk03MS4wMjA0IDM2LjVINzEuMDM3VjM1SDcxLjAyMDRWMzYuNVpNNzEuMDAzOCAzNi41SDcxLjAyMDRWMzVINzEuMDAzOFYzNi41Wk03MC45ODczIDM2LjVINzEuMDAzOFYzNUg3MC45ODczVjM2LjVaTTcwLjk3MDcgMzYuNUg3MC45ODczVjM1SDcwLjk3MDdWMzYuNVpNNzAuOTU0MSAzNi41SDcwLjk3MDdWMzVINzAuOTU0MVYzNi41Wk03MC45Mzc2IDM2LjVINzAuOTU0MVYzNUg3MC45Mzc2VjM2LjVaTTcwLjkyMTEgMzYuNUg3MC45Mzc2VjM1SDcwLjkyMTFWMzYuNVpNNzAuOTA0NiAzNi41SDcwLjkyMTFWMzVINzAuOTA0NlYzNi41Wk03MC44ODgxIDM2LjVINzAuOTA0NlYzNUg3MC44ODgxVjM2LjVaTTcwLjg3MTYgMzYuNUg3MC44ODgxVjM1SDcwLjg3MTZWMzYuNVpNNzAuODU1MSAzNi41SDcwLjg3MTZWMzVINzAuODU1MVYzNi41Wk03MC44Mzg2IDM2LjVINzAuODU1MVYzNUg3MC44Mzg2VjM2LjVaTTcwLjgyMjIgMzYuNUg3MC44Mzg2VjM1SDcwLjgyMjJWMzYuNVpNNzAuODA1OCAzNi41SDcwLjgyMjJWMzVINzAuODA1OFYzNi41Wk03MC43ODkzIDM2LjVINzAuODA1OFYzNUg3MC43ODkzVjM2LjVaTTcwLjc3MjkgMzYuNUg3MC43ODkzVjM1SDcwLjc3MjlWMzYuNVpNNzAuNzU2NiAzNi41SDcwLjc3MjlWMzVINzAuNzU2NlYzNi41Wk03MC43NDAyIDM2LjVINzAuNzU2NlYzNUg3MC43NDAyVjM2LjVaTTcwLjcyMzggMzYuNUg3MC43NDAyVjM1SDcwLjcyMzhWMzYuNVpNNzAuNzA3NSAzNi41SDcwLjcyMzhWMzVINzAuNzA3NVYzNi41Wk03MC42OTExIDM2LjVINzAuNzA3NVYzNUg3MC42OTExVjM2LjVaTTcwLjY3NDggMzYuNUg3MC42OTExVjM1SDcwLjY3NDhWMzYuNVpNNzAuNjU4NSAzNi41SDcwLjY3NDhWMzVINzAuNjU4NVYzNi41Wk03MC42NDIyIDM2LjVINzAuNjU4NVYzNUg3MC42NDIyVjM2LjVaTTcwLjYyNTkgMzYuNUg3MC42NDIyVjM1SDcwLjYyNTlWMzYuNVpNNzAuNjA5NyAzNi41SDcwLjYyNTlWMzVINzAuNjA5N1YzNi41Wk03MC41OTM0IDM2LjVINzAuNjA5N1YzNUg3MC41OTM0VjM2LjVaTTcwLjU3NzIgMzYuNUg3MC41OTM0VjM1SDcwLjU3NzJWMzYuNVpNNzAuNTYwOSAzNi41SDcwLjU3NzJWMzVINzAuNTYwOVYzNi41Wk03MC41NDQ3IDM2LjVINzAuNTYwOVYzNUg3MC41NDQ3VjM2LjVaTTcwLjUyODUgMzYuNUg3MC41NDQ3VjM1SDcwLjUyODVWMzYuNVpNNzAuNTEyMyAzNi41SDcwLjUyODVWMzVINzAuNTEyM1YzNi41Wk03MC40OTYyIDM2LjVINzAuNTEyM1YzNUg3MC40OTYyVjM2LjVaTTcwLjQ4IDM2LjVINzAuNDk2MlYzNUg3MC40OFYzNi41Wk03MC40NjM5IDM2LjVINzAuNDhWMzVINzAuNDYzOVYzNi41Wk03MC40NDc3IDM2LjVINzAuNDYzOVYzNUg3MC40NDc3VjM2LjVaTTcwLjQzMTYgMzYuNUg3MC40NDc3VjM1SDcwLjQzMTZWMzYuNVpNNzAuNDE1NSAzNi41SDcwLjQzMTZWMzVINzAuNDE1NVYzNi41Wk03MC4zOTk0IDM2LjVINzAuNDE1NVYzNUg3MC4zOTk0VjM2LjVaTTcwLjM4MzQgMzYuNUg3MC4zOTk0VjM1SDcwLjM4MzRWMzYuNVpNNzAuMzY3MyAzNi41SDcwLjM4MzRWMzVINzAuMzY3M1YzNi41Wk03MC4zNTEyIDM2LjVINzAuMzY3M1YzNUg3MC4zNTEyVjM2LjVaTTcwLjMzNTIgMzYuNUg3MC4zNTEyVjM1SDcwLjMzNTJWMzYuNVpNNzAuMzE5MiAzNi41SDcwLjMzNTJWMzVINzAuMzE5MlYzNi41Wk03MC4zMDMyIDM2LjVINzAuMzE5MlYzNUg3MC4zMDMyVjM2LjVaTTcwLjI4NzIgMzYuNUg3MC4zMDMyVjM1SDcwLjI4NzJWMzYuNVpNNzAuMjcxMiAzNi41SDcwLjI4NzJWMzVINzAuMjcxMlYzNi41Wk03MC4yNTUyIDM2LjVINzAuMjcxMlYzNUg3MC4yNTUyVjM2LjVaTTcwLjIzOTMgMzYuNUg3MC4yNTUyVjM1SDcwLjIzOTNWMzYuNVpNNzAuMjIzNCAzNi41SDcwLjIzOTNWMzVINzAuMjIzNFYzNi41Wk03MC4yMDc0IDM2LjVINzAuMjIzNFYzNUg3MC4yMDc0VjM2LjVaTTcwLjE5MTUgMzYuNUg3MC4yMDc0VjM1SDcwLjE5MTVWMzYuNVpNNzAuMTc1NiAzNi41SDcwLjE5MTVWMzVINzAuMTc1NlYzNi41Wk03MC4xNTk3IDM2LjVINzAuMTc1NlYzNUg3MC4xNTk3VjM2LjVaTTcwLjE0MzkgMzYuNUg3MC4xNTk3VjM1SDcwLjE0MzlWMzYuNVpNNzAuMTI4IDM2LjVINzAuMTQzOVYzNUg3MC4xMjhWMzYuNVpNNzAuMTEyMiAzNi41SDcwLjEyOFYzNUg3MC4xMTIyVjM2LjVaTTcwLjA5NjMgMzYuNUg3MC4xMTIyVjM1SDcwLjA5NjNWMzYuNVpNNzAuMDgwNSAzNi41SDcwLjA5NjNWMzVINzAuMDgwNVYzNi41Wk03MC4wNjQ3IDM2LjVINzAuMDgwNVYzNUg3MC4wNjQ3VjM2LjVaTTcwLjA0ODkgMzYuNUg3MC4wNjQ3VjM1SDcwLjA0ODlWMzYuNVpNNzAuMDMzMSAzNi41SDcwLjA0ODlWMzVINzAuMDMzMVYzNi41Wk03MC4wMTc0IDM2LjVINzAuMDMzMVYzNUg3MC4wMTc0VjM2LjVaTTcwLjAwMTYgMzYuNUg3MC4wMTc0VjM1SDcwLjAwMTZWMzYuNVpNNjkuOTg1OSAzNi41SDcwLjAwMTZWMzVINjkuOTg1OVYzNi41Wk02OS45NzAyIDM2LjVINjkuOTg1OVYzNUg2OS45NzAyVjM2LjVaTTY5Ljk1NDUgMzYuNUg2OS45NzAyVjM1SDY5Ljk1NDVWMzYuNVpNNjkuOTM4OCAzNi41SDY5Ljk1NDVWMzVINjkuOTM4OFYzNi41Wk02OS45MjMxIDM2LjVINjkuOTM4OFYzNUg2OS45MjMxVjM2LjVaTTY5LjkwNzQgMzYuNUg2OS45MjMxVjM1SDY5LjkwNzRWMzYuNVpNNjkuODkxOCAzNi41SDY5LjkwNzRWMzVINjkuODkxOFYzNi41Wk02OS44NzYxIDM2LjVINjkuODkxOFYzNUg2OS44NzYxVjM2LjVaTTY5Ljg2MDUgMzYuNUg2OS44NzYxVjM1SDY5Ljg2MDVWMzYuNVpNNjkuODQ0OSAzNi41SDY5Ljg2MDVWMzVINjkuODQ0OVYzNi41Wk02OS44MjkzIDM2LjVINjkuODQ0OVYzNUg2OS44MjkzVjM2LjVaTTY5LjgxMzcgMzYuNUg2OS44MjkzVjM1SDY5LjgxMzdWMzYuNVpNNjkuNzk4MiAzNi41SDY5LjgxMzdWMzVINjkuNzk4MlYzNi41Wk02OS43ODI2IDM2LjVINjkuNzk4MlYzNUg2OS43ODI2VjM2LjVaTTY5Ljc2NzEgMzYuNUg2OS43ODI2VjM1SDY5Ljc2NzFWMzYuNVpNNjkuNzUxNSAzNi41SDY5Ljc2NzFWMzVINjkuNzUxNVYzNi41Wk02OS43MzYgMzYuNUg2OS43NTE1VjM1SDY5LjczNlYzNi41Wk02OS43MjA1IDM2LjVINjkuNzM2VjM1SDY5LjcyMDVWMzYuNVpNNjkuNzA1IDM2LjVINjkuNzIwNVYzNUg2OS43MDVWMzYuNVpNNjkuNjg5NSAzNi41SDY5LjcwNVYzNUg2OS42ODk1VjM2LjVaTTY5LjY3NDEgMzYuNUg2OS42ODk1VjM1SDY5LjY3NDFWMzYuNVpNNjkuNjU4NiAzNi41SDY5LjY3NDFWMzVINjkuNjU4NlYzNi41Wk02OS42NDMyIDM2LjVINjkuNjU4NlYzNUg2OS42NDMyVjM2LjVaTTY5LjYyNzggMzYuNUg2OS42NDMyVjM1SDY5LjYyNzhWMzYuNVpNNjkuNjEyNCAzNi41SDY5LjYyNzhWMzVINjkuNjEyNFYzNi41Wk02OS41OTcgMzYuNUg2OS42MTI0VjM1SDY5LjU5N1YzNi41Wk02OS41ODE2IDM2LjVINjkuNTk3VjM1SDY5LjU4MTZWMzYuNVpNNjkuNTY2MiAzNi41SDY5LjU4MTZWMzVINjkuNTY2MlYzNi41Wk02OS41NTA5IDM2LjVINjkuNTY2MlYzNUg2OS41NTA5VjM2LjVaTTY5LjUzNTYgMzYuNUg2OS41NTA5VjM1SDY5LjUzNTZWMzYuNVpNNjkuNTIwMiAzNi41SDY5LjUzNTZWMzVINjkuNTIwMlYzNi41Wk02OS41MDQ5IDM2LjVINjkuNTIwMlYzNUg2OS41MDQ5VjM2LjVaTTY5LjQ4OTYgMzYuNUg2OS41MDQ5VjM1SDY5LjQ4OTZWMzYuNVpNNjkuNDc0MyAzNi41SDY5LjQ4OTZWMzVINjkuNDc0M1YzNi41Wk02OS40NTkxIDM2LjVINjkuNDc0M1YzNUg2OS40NTkxVjM2LjVaTTY5LjQ0MzggMzYuNUg2OS40NTkxVjM1SDY5LjQ0MzhWMzYuNVpNNjkuNDI4NiAzNi41SDY5LjQ0MzhWMzVINjkuNDI4NlYzNi41Wk02OS40MTMzIDM2LjVINjkuNDI4NlYzNUg2OS40MTMzVjM2LjVaTTY5LjM5ODEgMzYuNUg2OS40MTMzVjM1SDY5LjM5ODFWMzYuNVpNNjkuMzgyOSAzNi41SDY5LjM5ODFWMzVINjkuMzgyOVYzNi41Wk02OS4zNjc3IDM2LjVINjkuMzgyOVYzNUg2OS4zNjc3VjM2LjVaTTY5LjM1MjYgMzYuNUg2OS4zNjc3VjM1SDY5LjM1MjZWMzYuNVpNNjkuMzM3NCAzNi41SDY5LjM1MjZWMzVINjkuMzM3NFYzNi41Wk02OS4zMjIzIDM2LjVINjkuMzM3NFYzNUg2OS4zMjIzVjM2LjVaTTY5LjMwNzEgMzYuNUg2OS4zMjIzVjM1SDY5LjMwNzFWMzYuNVpNNjkuMjkyIDM2LjVINjkuMzA3MVYzNUg2OS4yOTJWMzYuNVpNNjkuMjc2OSAzNi41SDY5LjI5MlYzNUg2OS4yNzY5VjM2LjVaTTY5LjI2MTggMzYuNUg2OS4yNzY5VjM1SDY5LjI2MThWMzYuNVpNNjkuMjQ2NyAzNi41SDY5LjI2MThWMzVINjkuMjQ2N1YzNi41Wk02OS4yMzE3IDM2LjVINjkuMjQ2N1YzNUg2OS4yMzE3VjM2LjVaTTY5LjIxNjYgMzYuNUg2OS4yMzE3VjM1SDY5LjIxNjZWMzYuNVpNNjkuMjAxNiAzNi41SDY5LjIxNjZWMzVINjkuMjAxNlYzNi41Wk02OS4xODY1IDM2LjVINjkuMjAxNlYzNUg2OS4xODY1VjM2LjVaTTY5LjE3MTUgMzYuNUg2OS4xODY1VjM1SDY5LjE3MTVWMzYuNVpNNjkuMTU2NSAzNi41SDY5LjE3MTVWMzVINjkuMTU2NVYzNi41Wk02OS4xNDE2IDM2LjVINjkuMTU2NVYzNUg2OS4xNDE2VjM2LjVaTTY5LjEyNjYgMzYuNUg2OS4xNDE2VjM1SDY5LjEyNjZWMzYuNVpNNjkuMTExNiAzNi41SDY5LjEyNjZWMzVINjkuMTExNlYzNi41Wk02OS4wOTY3IDM2LjVINjkuMTExNlYzNUg2OS4wOTY3VjM2LjVaTTY5LjA4MTggMzYuNUg2OS4wOTY3VjM1SDY5LjA4MThWMzYuNVpNNjkuMDY2OCAzNi41SDY5LjA4MThWMzVINjkuMDY2OFYzNi41Wk02OS4wNTE5IDM2LjVINjkuMDY2OFYzNUg2OS4wNTE5VjM2LjVaTTY5LjAzNzEgMzYuNUg2OS4wNTE5VjM1SDY5LjAzNzFWMzYuNVpNNjkuMDIyMiAzNi41SDY5LjAzNzFWMzVINjkuMDIyMlYzNi41Wk02OS4wMDczIDM2LjVINjkuMDIyMlYzNUg2OS4wMDczVjM2LjVaTTY4Ljk5MjUgMzYuNUg2OS4wMDczVjM1SDY4Ljk5MjVWMzYuNVpNNjguOTc3NiAzNi41SDY4Ljk5MjVWMzVINjguOTc3NlYzNi41Wk02OC45NjI4IDM2LjVINjguOTc3NlYzNUg2OC45NjI4VjM2LjVaTTY4Ljk0OCAzNi41SDY4Ljk2MjhWMzVINjguOTQ4VjM2LjVaTTY4LjkzMzIgMzYuNUg2OC45NDhWMzVINjguOTMzMlYzNi41Wk02OC45MTg0IDM2LjVINjguOTMzMlYzNUg2OC45MTg0VjM2LjVaTTY4LjkwMzcgMzYuNUg2OC45MTg0VjM1SDY4LjkwMzdWMzYuNVpNNjguODg4OSAzNi41SDY4LjkwMzdWMzVINjguODg4OVYzNi41Wk02OC44NzQyIDM2LjVINjguODg4OVYzNUg2OC44NzQyVjM2LjVaTTY4Ljg1OTUgMzYuNUg2OC44NzQyVjM1SDY4Ljg1OTVWMzYuNVpNNjguODQ0OCAzNi41SDY4Ljg1OTVWMzVINjguODQ0OFYzNi41Wk02OC44MzAxIDM2LjVINjguODQ0OFYzNUg2OC44MzAxVjM2LjVaTTY4LjgxNTQgMzYuNUg2OC44MzAxVjM1SDY4LjgxNTRWMzYuNVpNNjguODAwNyAzNi41SDY4LjgxNTRWMzVINjguODAwN1YzNi41Wk02OC43ODYxIDM2LjVINjguODAwN1YzNUg2OC43ODYxVjM2LjVaTTY4Ljc3MTQgMzYuNUg2OC43ODYxVjM1SDY4Ljc3MTRWMzYuNVpNNjguNzU2OCAzNi41SDY4Ljc3MTRWMzVINjguNzU2OFYzNi41Wk02OC43NDIyIDM2LjVINjguNzU2OFYzNUg2OC43NDIyVjM2LjVaTTY4LjcyNzYgMzYuNUg2OC43NDIyVjM1SDY4LjcyNzZWMzYuNVpNNjguNzEzIDM2LjVINjguNzI3NlYzNUg2OC43MTNWMzYuNVpNNjguNjk4NCAzNi41SDY4LjcxM1YzNUg2OC42OTg0VjM2LjVaTTY4LjY4MzkgMzYuNUg2OC42OTg0VjM1SDY4LjY4MzlWMzYuNVpNNjguNjY5MyAzNi41SDY4LjY4MzlWMzVINjguNjY5M1YzNi41Wk02OC42NTQ4IDM2LjVINjguNjY5M1YzNUg2OC42NTQ4VjM2LjVaTTY4LjY0MDMgMzYuNUg2OC42NTQ4VjM1SDY4LjY0MDNWMzYuNVpNNjguNjI1OCAzNi41SDY4LjY0MDNWMzVINjguNjI1OFYzNi41Wk02OC42MTEzIDM2LjVINjguNjI1OFYzNUg2OC42MTEzVjM2LjVaTTY4LjU5NjggMzYuNUg2OC42MTEzVjM1SDY4LjU5NjhWMzYuNVpNNjguNTgyMyAzNi41SDY4LjU5NjhWMzVINjguNTgyM1YzNi41Wk02OC41Njc5IDM2LjVINjguNTgyM1YzNUg2OC41Njc5VjM2LjVaTTY4LjU1MzQgMzYuNUg2OC41Njc5VjM1SDY4LjU1MzRWMzYuNVpNNjguNTM5IDM2LjVINjguNTUzNFYzNUg2OC41MzlWMzYuNVpNNjguNTI0NiAzNi41SDY4LjUzOVYzNUg2OC41MjQ2VjM2LjVaTTY4LjUxMDIgMzYuNUg2OC41MjQ2VjM1SDY4LjUxMDJWMzYuNVpNNjguNDk1OCAzNi41SDY4LjUxMDJWMzVINjguNDk1OFYzNi41Wk02OC40ODE1IDM2LjVINjguNDk1OFYzNUg2OC40ODE1VjM2LjVaTTY4LjQ2NzEgMzYuNUg2OC40ODE1VjM1SDY4LjQ2NzFWMzYuNVpNNjguNDUyOCAzNi41SDY4LjQ2NzFWMzVINjguNDUyOFYzNi41Wk02OC40Mzg0IDM2LjVINjguNDUyOFYzNUg2OC40Mzg0VjM2LjVaTTY4LjQyNDEgMzYuNUg2OC40Mzg0VjM1SDY4LjQyNDFWMzYuNVpNNjguNDA5OCAzNi41SDY4LjQyNDFWMzVINjguNDA5OFYzNi41Wk02OC4zOTU1IDM2LjVINjguNDA5OFYzNUg2OC4zOTU1VjM2LjVaTTY4LjM4MTMgMzYuNUg2OC4zOTU1VjM1SDY4LjM4MTNWMzYuNVpNNjguMzY3IDM2LjVINjguMzgxM1YzNUg2OC4zNjdWMzYuNVpNNjguMzUyOCAzNi41SDY4LjM2N1YzNUg2OC4zNTI4VjM2LjVaTTY4LjMzODUgMzYuNUg2OC4zNTI4VjM1SDY4LjMzODVWMzYuNVpNNjguMzI0MyAzNi41SDY4LjMzODVWMzVINjguMzI0M1YzNi41Wk02OC4zMTAxIDM2LjVINjguMzI0M1YzNUg2OC4zMTAxVjM2LjVaTTY4LjI5NTkgMzYuNUg2OC4zMTAxVjM1SDY4LjI5NTlWMzYuNVpNNjguMjgxNyAzNi41SDY4LjI5NTlWMzVINjguMjgxN1YzNi41Wk02OC4yNjc2IDM2LjVINjguMjgxN1YzNUg2OC4yNjc2VjM2LjVaTTY4LjI1MzQgMzYuNUg2OC4yNjc2VjM1SDY4LjI1MzRWMzYuNVpNNjguMjM5MyAzNi41SDY4LjI1MzRWMzVINjguMjM5M1YzNi41Wk02OC4yMjUyIDM2LjVINjguMjM5M1YzNUg2OC4yMjUyVjM2LjVaTTY4LjIxMTEgMzYuNUg2OC4yMjUyVjM1SDY4LjIxMTFWMzYuNVpNNjguMTk3IDM2LjVINjguMjExMVYzNUg2OC4xOTdWMzYuNVpNNjguMTgyOSAzNi41SDY4LjE5N1YzNUg2OC4xODI5VjM2LjVaTTY4LjE2ODggMzYuNUg2OC4xODI5VjM1SDY4LjE2ODhWMzYuNVpNNjguMTU0OCAzNi41SDY4LjE2ODhWMzVINjguMTU0OFYzNi41Wk02OC4xNDA3IDM2LjVINjguMTU0OFYzNUg2OC4xNDA3VjM2LjVaTTY4LjEyNjcgMzYuNUg2OC4xNDA3VjM1SDY4LjEyNjdWMzYuNVpNNjguMTEyNyAzNi41SDY4LjEyNjdWMzVINjguMTEyN1YzNi41Wk02OC4wOTg3IDM2LjVINjguMTEyN1YzNUg2OC4wOTg3VjM2LjVaTTY4LjA4NDcgMzYuNUg2OC4wOTg3VjM1SDY4LjA4NDdWMzYuNVpNNjguMDcwNyAzNi41SDY4LjA4NDdWMzVINjguMDcwN1YzNi41Wk02OC4wNTY4IDM2LjVINjguMDcwN1YzNUg2OC4wNTY4VjM2LjVaTTY4LjA0MjggMzYuNUg2OC4wNTY4VjM1SDY4LjA0MjhWMzYuNVpNNjguMDI4OSAzNi41SDY4LjA0MjhWMzVINjguMDI4OVYzNi41Wk02OC4wMTUgMzYuNUg2OC4wMjg5VjM1SDY4LjAxNVYzNi41Wk02OC4wMDExIDM2LjVINjguMDE1VjM1SDY4LjAwMTFWMzYuNVpNNjcuOTg3MiAzNi41SDY4LjAwMTFWMzVINjcuOTg3MlYzNi41Wk02Ny45NzMzIDM2LjVINjcuOTg3MlYzNUg2Ny45NzMzVjM2LjVaTTY3Ljk1OTQgMzYuNUg2Ny45NzMzVjM1SDY3Ljk1OTRWMzYuNVpNNjcuOTQ1NiAzNi41SDY3Ljk1OTRWMzVINjcuOTQ1NlYzNi41Wk02Ny45MzE4IDM2LjVINjcuOTQ1NlYzNUg2Ny45MzE4VjM2LjVaTTY3LjkxNzkgMzYuNUg2Ny45MzE4VjM1SDY3LjkxNzlWMzYuNVpNNjcuOTA0MSAzNi41SDY3LjkxNzlWMzVINjcuOTA0MVYzNi41Wk02Ny44OTAzIDM2LjVINjcuOTA0MVYzNUg2Ny44OTAzVjM2LjVaTTY3Ljg3NjUgMzYuNUg2Ny44OTAzVjM1SDY3Ljg3NjVWMzYuNVpNNjcuODYyOCAzNi41SDY3Ljg3NjVWMzVINjcuODYyOFYzNi41Wk02Ny44NDkgMzYuNUg2Ny44NjI4VjM1SDY3Ljg0OVYzNi41Wk02Ny44MzUzIDM2LjVINjcuODQ5VjM1SDY3LjgzNTNWMzYuNVpNNjcuODIxNiAzNi41SDY3LjgzNTNWMzVINjcuODIxNlYzNi41Wk02Ny44MDc4IDM2LjVINjcuODIxNlYzNUg2Ny44MDc4VjM2LjVaTTY3Ljc5NDEgMzYuNUg2Ny44MDc4VjM1SDY3Ljc5NDFWMzYuNVpNNjcuNzgwNSAzNi41SDY3Ljc5NDFWMzVINjcuNzgwNVYzNi41Wk02Ny43NjY4IDM2LjVINjcuNzgwNVYzNUg2Ny43NjY4VjM2LjVaTTY3Ljc1MzEgMzYuNUg2Ny43NjY4VjM1SDY3Ljc1MzFWMzYuNVpNNjcuNzM5NSAzNi41SDY3Ljc1MzFWMzVINjcuNzM5NVYzNi41Wk02Ny43MjU5IDM2LjVINjcuNzM5NVYzNUg2Ny43MjU5VjM2LjVaTTY3LjcxMjIgMzYuNUg2Ny43MjU5VjM1SDY3LjcxMjJWMzYuNVpNNjcuNjk4NiAzNi41SDY3LjcxMjJWMzVINjcuNjk4NlYzNi41Wk02Ny42ODUgMzYuNUg2Ny42OTg2VjM1SDY3LjY4NVYzNi41Wk02Ny42NzE1IDM2LjVINjcuNjg1VjM1SDY3LjY3MTVWMzYuNVpNNjcuNjU3OSAzNi41SDY3LjY3MTVWMzVINjcuNjU3OVYzNi41Wk02Ny42NDQ0IDM2LjVINjcuNjU3OVYzNUg2Ny42NDQ0VjM2LjVaTTY3LjYzMDggMzYuNUg2Ny42NDQ0VjM1SDY3LjYzMDhWMzYuNVpNNjcuNjE3MyAzNi41SDY3LjYzMDhWMzVINjcuNjE3M1YzNi41Wk02Ny42MDM4IDM2LjVINjcuNjE3M1YzNUg2Ny42MDM4VjM2LjVaTTY3LjU5MDMgMzYuNUg2Ny42MDM4VjM1SDY3LjU5MDNWMzYuNVpNNjcuNTc2OCAzNi41SDY3LjU5MDNWMzVINjcuNTc2OFYzNi41Wk02Ny41NjM0IDM2LjVINjcuNTc2OFYzNUg2Ny41NjM0VjM2LjVaTTY3LjU0OTkgMzYuNUg2Ny41NjM0VjM1SDY3LjU0OTlWMzYuNVpNNjcuNTM2NSAzNi41SDY3LjU0OTlWMzVINjcuNTM2NVYzNi41Wk02Ny41MjMgMzYuNUg2Ny41MzY1VjM1SDY3LjUyM1YzNi41Wk02Ny41MDk2IDM2LjVINjcuNTIzVjM1SDY3LjUwOTZWMzYuNVpNNjcuNDk2MiAzNi41SDY3LjUwOTZWMzVINjcuNDk2MlYzNi41Wk02Ny40ODI4IDM2LjVINjcuNDk2MlYzNUg2Ny40ODI4VjM2LjVaTTY3LjQ2OTUgMzYuNUg2Ny40ODI4VjM1SDY3LjQ2OTVWMzYuNVpNNjcuNDU2MSAzNi41SDY3LjQ2OTVWMzVINjcuNDU2MVYzNi41Wk02Ny40NDI4IDM2LjVINjcuNDU2MVYzNUg2Ny40NDI4VjM2LjVaTTY3LjQyOTQgMzYuNUg2Ny40NDI4VjM1SDY3LjQyOTRWMzYuNVpNNjcuNDE2MSAzNi41SDY3LjQyOTRWMzVINjcuNDE2MVYzNi41Wk02Ny40MDI4IDM2LjVINjcuNDE2MVYzNUg2Ny40MDI4VjM2LjVaTTY3LjM4OTUgMzYuNUg2Ny40MDI4VjM1SDY3LjM4OTVWMzYuNVpNNjcuMzc2MyAzNi41SDY3LjM4OTVWMzVINjcuMzc2M1YzNi41Wk02Ny4zNjMgMzYuNUg2Ny4zNzYzVjM1SDY3LjM2M1YzNi41Wk02Ny4zNDk3IDM2LjVINjcuMzYzVjM1SDY3LjM0OTdWMzYuNVpNNjcuMzM2NSAzNi41SDY3LjM0OTdWMzVINjcuMzM2NVYzNi41Wk02Ny4zMjMzIDM2LjVINjcuMzM2NVYzNUg2Ny4zMjMzVjM2LjVaTTY3LjMxMDEgMzYuNUg2Ny4zMjMzVjM1SDY3LjMxMDFWMzYuNVpNNjcuMjk2OSAzNi41SDY3LjMxMDFWMzVINjcuMjk2OVYzNi41Wk02Ny4yODM3IDM2LjVINjcuMjk2OVYzNUg2Ny4yODM3VjM2LjVaTTY3LjI3MDUgMzYuNUg2Ny4yODM3VjM1SDY3LjI3MDVWMzYuNVpNNjcuMjU3NCAzNi41SDY3LjI3MDVWMzVINjcuMjU3NFYzNi41Wk02Ny4yNDQyIDM2LjVINjcuMjU3NFYzNUg2Ny4yNDQyVjM2LjVaTTY3LjIzMTEgMzYuNUg2Ny4yNDQyVjM1SDY3LjIzMTFWMzYuNVpNNjcuMjE4IDM2LjVINjcuMjMxMVYzNUg2Ny4yMThWMzYuNVpNNjcuMjA0OSAzNi41SDY3LjIxOFYzNUg2Ny4yMDQ5VjM2LjVaTTY3LjE5MTggMzYuNUg2Ny4yMDQ5VjM1SDY3LjE5MThWMzYuNVpNNjcuMTc4OCAzNi41SDY3LjE5MThWMzVINjcuMTc4OFYzNi41Wk02Ny4xNjU3IDM2LjVINjcuMTc4OFYzNUg2Ny4xNjU3VjM2LjVaTTY3LjE1MjcgMzYuNUg2Ny4xNjU3VjM1SDY3LjE1MjdWMzYuNVpNNjcuMTM5NiAzNi41SDY3LjE1MjdWMzVINjcuMTM5NlYzNi41Wk02Ny4xMjY2IDM2LjVINjcuMTM5NlYzNUg2Ny4xMjY2VjM2LjVaTTY3LjExMzYgMzYuNUg2Ny4xMjY2VjM1SDY3LjExMzZWMzYuNVpNNjcuMTAwNiAzNi41SDY3LjExMzZWMzVINjcuMTAwNlYzNi41Wk02Ny4wODc2IDM2LjVINjcuMTAwNlYzNUg2Ny4wODc2VjM2LjVaTTY3LjA3NDcgMzYuNUg2Ny4wODc2VjM1SDY3LjA3NDdWMzYuNVpNNjcuMDYxNyAzNi41SDY3LjA3NDdWMzVINjcuMDYxN1YzNi41Wk02Ny4wNDg4IDM2LjVINjcuMDYxN1YzNUg2Ny4wNDg4VjM2LjVaTTY3LjAzNTkgMzYuNUg2Ny4wNDg4VjM1SDY3LjAzNTlWMzYuNVpNNjcuMDIzIDM2LjVINjcuMDM1OVYzNUg2Ny4wMjNWMzYuNVpNNjcuMDEwMSAzNi41SDY3LjAyM1YzNUg2Ny4wMTAxVjM2LjVaTTY2Ljk5NzIgMzYuNUg2Ny4wMTAxVjM1SDY2Ljk5NzJWMzYuNVpNNjYuOTg0MyAzNi41SDY2Ljk5NzJWMzVINjYuOTg0M1YzNi41Wk02Ni45NzE1IDM2LjVINjYuOTg0M1YzNUg2Ni45NzE1VjM2LjVaTTY2Ljk1ODYgMzYuNUg2Ni45NzE1VjM1SDY2Ljk1ODZWMzYuNVpNNjYuOTQ1OCAzNi41SDY2Ljk1ODZWMzVINjYuOTQ1OFYzNi41Wk02Ni45MzMgMzYuNUg2Ni45NDU4VjM1SDY2LjkzM1YzNi41Wk02Ni45MjAyIDM2LjVINjYuOTMzVjM1SDY2LjkyMDJWMzYuNVpNNjYuOTA3NCAzNi41SDY2LjkyMDJWMzVINjYuOTA3NFYzNi41Wk02Ni44OTQ3IDM2LjVINjYuOTA3NFYzNUg2Ni44OTQ3VjM2LjVaTTY2Ljg4MTkgMzYuNUg2Ni44OTQ3VjM1SDY2Ljg4MTlWMzYuNVpNNjYuODY5MiAzNi41SDY2Ljg4MTlWMzVINjYuODY5MlYzNi41Wk02Ni44NTY0IDM2LjVINjYuODY5MlYzNUg2Ni44NTY0VjM2LjVaTTY2Ljg0MzcgMzYuNUg2Ni44NTY0VjM1SDY2Ljg0MzdWMzYuNVpNNjYuODMxIDM2LjVINjYuODQzN1YzNUg2Ni44MzFWMzYuNVpNNjYuODE4MyAzNi41SDY2LjgzMVYzNUg2Ni44MTgzVjM2LjVaTTY2LjgwNTcgMzYuNUg2Ni44MTgzVjM1SDY2LjgwNTdWMzYuNVpNNjYuNzkzIDM2LjVINjYuODA1N1YzNUg2Ni43OTNWMzYuNVpNNjYuNzgwMyAzNi41SDY2Ljc5M1YzNUg2Ni43ODAzVjM2LjVaTTY2Ljc2NzcgMzYuNUg2Ni43ODAzVjM1SDY2Ljc2NzdWMzYuNVpNNjYuNzU1MSAzNi41SDY2Ljc2NzdWMzVINjYuNzU1MVYzNi41Wk02Ni43NDI1IDM2LjVINjYuNzU1MVYzNUg2Ni43NDI1VjM2LjVaTTY2LjcyOTkgMzYuNUg2Ni43NDI1VjM1SDY2LjcyOTlWMzYuNVpNNjYuNzE3MyAzNi41SDY2LjcyOTlWMzVINjYuNzE3M1YzNi41Wk02Ni43MDQ3IDM2LjVINjYuNzE3M1YzNUg2Ni43MDQ3VjM2LjVaTTY2LjY5MjIgMzYuNUg2Ni43MDQ3VjM1SDY2LjY5MjJWMzYuNVpNNjYuNjc5NyAzNi41SDY2LjY5MjJWMzVINjYuNjc5N1YzNi41Wk02Ni42NjcxIDM2LjVINjYuNjc5N1YzNUg2Ni42NjcxVjM2LjVaTTY2LjY1NDYgMzYuNUg2Ni42NjcxVjM1SDY2LjY1NDZWMzYuNVpNNjYuNjQyMSAzNi41SDY2LjY1NDZWMzVINjYuNjQyMVYzNi41Wk02Ni42Mjk2IDM2LjVINjYuNjQyMVYzNUg2Ni42Mjk2VjM2LjVaTTY2LjYxNzIgMzYuNUg2Ni42Mjk2VjM1SDY2LjYxNzJWMzYuNVpNNjYuNjA0NyAzNi41SDY2LjYxNzJWMzVINjYuNjA0N1YzNi41Wk02Ni41OTIzIDM2LjVINjYuNjA0N1YzNUg2Ni41OTIzVjM2LjVaTTY2LjU3OTggMzYuNUg2Ni41OTIzVjM1SDY2LjU3OThWMzYuNVpNNjYuNTY3NCAzNi41SDY2LjU3OThWMzVINjYuNTY3NFYzNi41Wk02Ni41NTUgMzYuNUg2Ni41Njc0VjM1SDY2LjU1NVYzNi41Wk02Ni41NDI2IDM2LjVINjYuNTU1VjM1SDY2LjU0MjZWMzYuNVpNNjYuNTMwMyAzNi41SDY2LjU0MjZWMzVINjYuNTMwM1YzNi41Wk02Ni41MTc5IDM2LjVINjYuNTMwM1YzNUg2Ni41MTc5VjM2LjVaTTY2LjUwNTYgMzYuNUg2Ni41MTc5VjM1SDY2LjUwNTZWMzYuNVpNNjYuNDkzMiAzNi41SDY2LjUwNTZWMzVINjYuNDkzMlYzNi41Wk02Ni40ODA5IDM2LjVINjYuNDkzMlYzNUg2Ni40ODA5VjM2LjVaTTY2LjQ2ODYgMzYuNUg2Ni40ODA5VjM1SDY2LjQ2ODZWMzYuNVpNNjYuNDU2MyAzNi41SDY2LjQ2ODZWMzVINjYuNDU2M1YzNi41Wk02Ni40NDQgMzYuNUg2Ni40NTYzVjM1SDY2LjQ0NFYzNi41Wk02Ni40MzE4IDM2LjVINjYuNDQ0VjM1SDY2LjQzMThWMzYuNVpNNjYuNDE5NSAzNi41SDY2LjQzMThWMzVINjYuNDE5NVYzNi41Wk02Ni40MDczIDM2LjVINjYuNDE5NVYzNUg2Ni40MDczVjM2LjVaXCIsXG4gIGZpbGw6IFwiIzNCMzU1MlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNTEuODk3NSA4MC40MUg3OC4xNzFcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTUxLjg5NzUgODkuNDcwNkg3MC45MjMxXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICB4OiBcIjQxLjc3NTlcIixcbiAgeTogXCI1NC40MzM2XCIsXG4gIHdpZHRoOiBcIjg1LjQ3NDRcIixcbiAgaGVpZ2h0OiBcIjEzLjkwMTdcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gIHg6IFwiNDMuNzQzN1wiLFxuICB5OiBcIjU2LjQwMTRcIixcbiAgd2lkdGg6IFwiODEuNTM4NVwiLFxuICBoZWlnaHQ6IFwiOS45NjU4MVwiLFxuICByeDogXCIxXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiXG59KSk7XG5leHBvcnQgZGVmYXVsdCBDYXJkczsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGNvbnN0IENsaXAgPSAoe1xuICB3aWR0aCA9IDE1MixcbiAgaGVpZ2h0ID0gMTUyXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gIHdpZHRoOiB3aWR0aCxcbiAgaGVpZ2h0OiBoZWlnaHQsXG4gIHZpZXdCb3g6IFwiMCAwIDE1MiAxNTJcIixcbiAgZmlsbDogXCJub25lXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiNzZcIixcbiAgY3k6IFwiNzZcIixcbiAgcjogXCI3NlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICB4OiBcIjM3Ljc1XCIsXG4gIHk6IFwiMzMuNjMzOFwiLFxuICB3aWR0aDogXCI3Ni41XCIsXG4gIGhlaWdodDogXCI5MS4wMTE2XCIsXG4gIHJ4OiBcIjMuMjVcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gIHg6IFwiNDAuNjI3OVwiLFxuICB5OiBcIjM2LjUxMTdcIixcbiAgd2lkdGg6IFwiNzAuNzQ0MlwiLFxuICBoZWlnaHQ6IFwiODUuMjU1OFwiLFxuICByeDogXCIyXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBmaWxsT3BhY2l0eTogXCIwLjA1XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICB4OiBcIjQ0LjA5ODZcIixcbiAgeTogXCIzOC4xNjg5XCIsXG4gIHdpZHRoOiBcIjYzLjgwMjNcIixcbiAgaGVpZ2h0OiBcIjc5LjIyMDlcIixcbiAgcng6IFwiMS4yNVwiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNjMuMzAyMiA4MC41MDA0SDg4LjY5NzZcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiNzYuMDAwMlwiLFxuICBjeTogXCI2My43MjE0XCIsXG4gIHI6IFwiOC4xNjI3OVwiLFxuICBmaWxsOiBcIiMzMDQwRDZcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTYzLjMwMjIgODkuNTY5N0g4OC42OTc2XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk02My4zMDIyIDk4LjY0SDg4LjY5NzZcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibWFza1wiLCB7XG4gIGlkOiBcInBhdGgtOS1pbnNpZGUtMV8wXzIzOTRcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgZDogXCJNODEuNDQxOSAyNy40NDE5SDEwMS45M0MxMDQuMTM5IDI3LjQ0MTkgMTA1LjkzIDI5LjIzMjcgMTA1LjkzIDMxLjQ0MTlWMzguODYwNUMxMDUuOTMgNDEuMDY5NiAxMDQuMTM5IDQyLjg2MDUgMTAxLjkzIDQyLjg2MDVINTAuMDY5OEM0Ny44NjA3IDQyLjg2MDUgNDYuMDY5OCA0MS4wNjk2IDQ2LjA2OTggMzguODYwNVYzMS40NDE5QzQ2LjA2OTggMjkuMjMyNyA0Ny44NjA3IDI3LjQ0MTkgNTAuMDY5OCAyNy40NDE5SDcwLjU1ODJDNzAuNTU4MiAyNC40MzY0IDcyLjk5NDYgMjIgNzYuMDAwMSAyMkM3OS4wMDU1IDIyIDgxLjQ0MTkgMjQuNDM2NCA4MS40NDE5IDI3LjQ0MTlaXCJcbn0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTgxLjQ0MTkgMjcuNDQxOUgxMDEuOTNDMTA0LjEzOSAyNy40NDE5IDEwNS45MyAyOS4yMzI3IDEwNS45MyAzMS40NDE5VjM4Ljg2MDVDMTA1LjkzIDQxLjA2OTYgMTA0LjEzOSA0Mi44NjA1IDEwMS45MyA0Mi44NjA1SDUwLjA2OThDNDcuODYwNyA0Mi44NjA1IDQ2LjA2OTggNDEuMDY5NiA0Ni4wNjk4IDM4Ljg2MDVWMzEuNDQxOUM0Ni4wNjk4IDI5LjIzMjcgNDcuODYwNyAyNy40NDE5IDUwLjA2OTggMjcuNDQxOUg3MC41NTgyQzcwLjU1ODIgMjQuNDM2NCA3Mi45OTQ2IDIyIDc2LjAwMDEgMjJDNzkuMDA1NSAyMiA4MS40NDE5IDI0LjQzNjQgODEuNDQxOSAyNy40NDE5WlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk04MS40NDE5IDI3LjQ0MTlINzkuOTQxOVYyOC45NDE5SDgxLjQ0MTlWMjcuNDQxOVpNNzAuNTU4MiAyNy40NDE5VjI4Ljk0MTlINzIuMDU4MlYyNy40NDE5SDcwLjU1ODJaTTgxLjQ0MTkgMjguOTQxOUgxMDEuOTNWMjUuOTQxOUg4MS40NDE5VjI4Ljk0MTlaTTEwMS45MyAyOC45NDE5QzEwMy4zMTEgMjguOTQxOSAxMDQuNDMgMzAuMDYxMSAxMDQuNDMgMzEuNDQxOUgxMDcuNDNDMTA3LjQzIDI4LjQwNDMgMTA0Ljk2OCAyNS45NDE5IDEwMS45MyAyNS45NDE5VjI4Ljk0MTlaTTEwNC40MyAzMS40NDE5VjM4Ljg2MDVIMTA3LjQzVjMxLjQ0MTlIMTA0LjQzWk0xMDQuNDMgMzguODYwNUMxMDQuNDMgNDAuMjQxMiAxMDMuMzExIDQxLjM2MDUgMTAxLjkzIDQxLjM2MDVWNDQuMzYwNUMxMDQuOTY4IDQ0LjM2MDUgMTA3LjQzIDQxLjg5OCAxMDcuNDMgMzguODYwNUgxMDQuNDNaTTEwMS45MyA0MS4zNjA1SDUwLjA2OThWNDQuMzYwNUgxMDEuOTNWNDEuMzYwNVpNNTAuMDY5OCA0MS4zNjA1QzQ4LjY4OTEgNDEuMzYwNSA0Ny41Njk4IDQwLjI0MTIgNDcuNTY5OCAzOC44NjA1SDQ0LjU2OThDNDQuNTY5OCA0MS44OTggNDcuMDMyMyA0NC4zNjA1IDUwLjA2OTggNDQuMzYwNVY0MS4zNjA1Wk00Ny41Njk4IDM4Ljg2MDVWMzEuNDQxOUg0NC41Njk4VjM4Ljg2MDVINDcuNTY5OFpNNDcuNTY5OCAzMS40NDE5QzQ3LjU2OTggMzAuMDYxMSA0OC42ODkxIDI4Ljk0MTkgNTAuMDY5OCAyOC45NDE5VjI1Ljk0MTlDNDcuMDMyMyAyNS45NDE5IDQ0LjU2OTggMjguNDA0MyA0NC41Njk4IDMxLjQ0MTlINDcuNTY5OFpNNTAuMDY5OCAyOC45NDE5SDcwLjU1ODJWMjUuOTQxOUg1MC4wNjk4VjI4Ljk0MTlaTTcyLjA1ODIgMjcuNDQxOUM3Mi4wNTgyIDI1LjI2NDggNzMuODIzIDIzLjUgNzYuMDAwMSAyMy41VjIwLjVDNzIuMTY2MiAyMC41IDY5LjA1ODIgMjMuNjA4IDY5LjA1ODIgMjcuNDQxOUg3Mi4wNTgyWk03Ni4wMDAxIDIzLjVDNzguMTc3MSAyMy41IDc5Ljk0MTkgMjUuMjY0OCA3OS45NDE5IDI3LjQ0MTlIODIuOTQxOUM4Mi45NDE5IDIzLjYwOCA3OS44MzM5IDIwLjUgNzYuMDAwMSAyMC41VjIzLjVaXCIsXG4gIGZpbGw6IFwiIzNCMzU1MlwiLFxuICBtYXNrOiBcInVybCgjcGF0aC05LWluc2lkZS0xXzBfMjM5NClcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gIHg6IFwiNDguNzkwNVwiLFxuICB5OiBcIjM0LjY5NzNcIixcbiAgd2lkdGg6IFwiNTQuNDE4NlwiLFxuICBoZWlnaHQ6IFwiNS40NDE4NlwiLFxuICByeDogXCIxXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBmaWxsT3BhY2l0eTogXCIwLjA1XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk01MC4zNjM2IDMxLjVINTcuNjM2NFwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNjEuMDkwOSAzMS41SDYyLjkwOTFcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEyMSA2NlY4NVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTIxIDkwVjk4XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pKTtcbmV4cG9ydCBkZWZhdWx0IENsaXA7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBjb25zdCBDbG91ZCA9ICh7XG4gIHdpZHRoID0gMTUyLFxuICBoZWlnaHQgPSAxNTJcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgd2lkdGg6IHdpZHRoLFxuICBoZWlnaHQ6IGhlaWdodCxcbiAgdmlld0JveDogXCIwIDAgMTUyIDE1MlwiLFxuICBmaWxsOiBcIm5vbmVcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCI3NlwiLFxuICBjeTogXCI3NlwiLFxuICByOiBcIjc2XCIsXG4gIGZpbGw6IFwid2hpdGVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiMTE4LjU4NFwiLFxuICBjeTogXCI2Ny43NDk3XCIsXG4gIHI6IFwiMTUuNDE2N1wiLFxuICBmaWxsOiBcIiMzMDQwRDZcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibWFza1wiLCB7XG4gIGlkOiBcInBhdGgtMy1pbnNpZGUtMV8wXzIzNDJcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgZDogXCJNMTEzLjc0NSAxMDUuNzM4SDM5LjI1OTlWMTA1LjcyOUMzOS4wNjIgMTA1LjczNSAzOC44NjMzIDEwNS43MzggMzguNjY0IDEwNS43MzhDMjcuODAzOSAxMDUuNzM4IDE5IDk2LjkzNDUgMTkgODYuMDc0NEMxOSA3Ni42NDU0IDI1LjYzNjUgNjguNzY2NCAzNC40OTMyIDY2Ljg1MzZDMzQuNTc1NCA1MS40NTY0IDQ3LjA4MjYgMzkgNjIuNDk5MSAzOUM3Mi41NjQxIDM5IDgxLjM4OSA0NC4zMDk0IDg2LjMyNTkgNTIuMjgwM0M4OC43NDQ5IDUxLjM5ODYgOTEuMzU2NiA1MC45MTc2IDk0LjA4MDYgNTAuOTE3NkMxMDYuNTg2IDUwLjkxNzYgMTE2LjcyNCA2MS4wNTUzIDExNi43MjQgNzMuNTYwOUMxMTYuNzI0IDczLjY1MjcgMTE2LjcyMyA3My43NDQ0IDExNi43MjIgNzMuODM2QzEyNC4xODUgNzUuMjMyNSAxMjkuODMzIDgxLjc4MTUgMTI5LjgzMyA4OS42NDk2QzEyOS44MzMgOTguMzM1NyAxMjIuOTUgMTA1LjQxNCAxMTQuMzQgMTA1LjcyOFYxMDUuNzM4SDExMy43NDVaXCJcbn0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTExMy43NDUgMTA1LjczOEgzOS4yNTk5VjEwNS43MjlDMzkuMDYyIDEwNS43MzUgMzguODYzMyAxMDUuNzM4IDM4LjY2NCAxMDUuNzM4QzI3LjgwMzkgMTA1LjczOCAxOSA5Ni45MzQ1IDE5IDg2LjA3NDRDMTkgNzYuNjQ1NCAyNS42MzY1IDY4Ljc2NjQgMzQuNDkzMiA2Ni44NTM2QzM0LjU3NTQgNTEuNDU2NCA0Ny4wODI2IDM5IDYyLjQ5OTEgMzlDNzIuNTY0MSAzOSA4MS4zODkgNDQuMzA5NCA4Ni4zMjU5IDUyLjI4MDNDODguNzQ0OSA1MS4zOTg2IDkxLjM1NjYgNTAuOTE3NiA5NC4wODA2IDUwLjkxNzZDMTA2LjU4NiA1MC45MTc2IDExNi43MjQgNjEuMDU1MyAxMTYuNzI0IDczLjU2MDlDMTE2LjcyNCA3My42NTI3IDExNi43MjMgNzMuNzQ0NCAxMTYuNzIyIDczLjgzNkMxMjQuMTg1IDc1LjIzMjUgMTI5LjgzMyA4MS43ODE1IDEyOS44MzMgODkuNjQ5NkMxMjkuODMzIDk4LjMzNTcgMTIyLjk1IDEwNS40MTQgMTE0LjM0IDEwNS43MjhWMTA1LjczOEgxMTMuNzQ1WlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0zOS4yNTk5IDEwNS43MzhIMzcuNzU5OVYxMDcuMjM4SDM5LjI1OTlWMTA1LjczOFpNMzkuMjU5OSAxMDUuNzI5SDQwLjc1OTlWMTA0LjE4NEwzOS4yMTUyIDEwNC4yM0wzOS4yNTk5IDEwNS43MjlaTTM0LjQ5MzIgNjYuODUzNkwzNC44MDk5IDY4LjMxOThMMzUuOTg2OCA2OC4wNjU2TDM1Ljk5MzIgNjYuODYxNkwzNC40OTMyIDY2Ljg1MzZaTTg2LjMyNTkgNTIuMjgwM0w4NS4wNTA2IDUzLjA3MDFMODUuNjkzMSA1NC4xMDc1TDg2LjgzOTUgNTMuNjg5Nkw4Ni4zMjU5IDUyLjI4MDNaTTExNi43MjIgNzMuODM2TDExNS4yMjIgNzMuODE4MUwxMTUuMjA3IDc1LjA3ODVMMTE2LjQ0NiA3NS4zMTA0TDExNi43MjIgNzMuODM2Wk0xMTQuMzQgMTA1LjcyOEwxMTQuMjg2IDEwNC4yMjlMMTEyLjg0IDEwNC4yODFWMTA1LjcyOEgxMTQuMzRaTTExNC4zNCAxMDUuNzM4VjEwNy4yMzhIMTE1Ljg0VjEwNS43MzhIMTE0LjM0Wk0xMTMuNzQ1IDEwNC4yMzhIMzkuMjU5OVYxMDcuMjM4SDExMy43NDVWMTA0LjIzOFpNNDAuNzU5OSAxMDUuNzM4VjEwNS43MjlIMzcuNzU5OVYxMDUuNzM4SDQwLjc1OTlaTTM5LjIxNTIgMTA0LjIzQzM5LjAzMjIgMTA0LjIzNiAzOC44NDg0IDEwNC4yMzggMzguNjY0IDEwNC4yMzhWMTA3LjIzOEMzOC44NzgyIDEwNy4yMzggMzkuMDkxNyAxMDcuMjM1IDM5LjMwNDUgMTA3LjIyOUwzOS4yMTUyIDEwNC4yM1pNMzguNjY0IDEwNC4yMzhDMjguNjMyMyAxMDQuMjM4IDIwLjUgOTYuMTA2MSAyMC41IDg2LjA3NDRIMTcuNUMxNy41IDk3Ljc2MjkgMjYuOTc1NCAxMDcuMjM4IDM4LjY2NCAxMDcuMjM4VjEwNC4yMzhaTTIwLjUgODYuMDc0NEMyMC41IDc3LjM2NjQgMjYuNjI5MSA3MC4wODY2IDM0LjgwOTkgNjguMzE5OEwzNC4xNzY2IDY1LjM4NzRDMjQuNjQzOCA2Ny40NDYyIDE3LjUgNzUuOTI0MyAxNy41IDg2LjA3NDRIMjAuNVpNMzUuOTkzMiA2Ni44NjE2QzM2LjA3MSA1Mi4yODkzIDQ3LjkwODMgNDAuNSA2Mi40OTkxIDQwLjVWMzcuNUM0Ni4yNTY4IDM3LjUgMzMuMDc5OSA1MC42MjM1IDMyLjk5MzMgNjYuODQ1NkwzNS45OTMyIDY2Ljg2MTZaTTYyLjQ5OTEgNDAuNUM3Mi4wMjMzIDQwLjUgODAuMzc1OCA0NS41MjIzIDg1LjA1MDYgNTMuMDcwMUw4Ny42MDExIDUxLjQ5MDVDODIuNDAyMyA0My4wOTY2IDczLjEwNDkgMzcuNSA2Mi40OTkxIDM3LjVWNDAuNVpNODYuODM5NSA1My42ODk2Qzg5LjA5NjQgNTIuODY3IDkxLjUzNDMgNTIuNDE3NiA5NC4wODA2IDUyLjQxNzZWNDkuNDE3NkM5MS4xNzg4IDQ5LjQxNzYgODguMzkzNCA0OS45MzAyIDg1LjgxMjIgNTAuODcxTDg2LjgzOTUgNTMuNjg5NlpNOTQuMDgwNiA1Mi40MTc2QzEwNS43NTggNTIuNDE3NiAxMTUuMjI0IDYxLjg4MzggMTE1LjIyNCA3My41NjA5SDExOC4yMjRDMTE4LjIyNCA2MC4yMjY5IDEwNy40MTUgNDkuNDE3NiA5NC4wODA2IDQ5LjQxNzZWNTIuNDE3NlpNMTE1LjIyNCA3My41NjA5QzExNS4yMjQgNzMuNjQ2OCAxMTUuMjI0IDczLjczMjYgMTE1LjIyMiA3My44MTgxTDExOC4yMjIgNzMuODUzOEMxMTguMjIzIDczLjc1NjMgMTE4LjIyNCA3My42NTg2IDExOC4yMjQgNzMuNTYwOUgxMTUuMjI0Wk0xMTYuNDQ2IDc1LjMxMDRDMTIzLjIxMyA3Ni41NzY2IDEyOC4zMzMgODIuNTE2NyAxMjguMzMzIDg5LjY0OTZIMTMxLjMzM0MxMzEuMzMzIDgxLjA0NjMgMTI1LjE1OCA3My44ODg1IDExNi45OTggNzIuMzYxNUwxMTYuNDQ2IDc1LjMxMDRaTTEyOC4zMzMgODkuNjQ5NkMxMjguMzMzIDk3LjUyNTUgMTIyLjA5MiAxMDMuOTQ0IDExNC4yODYgMTA0LjIyOUwxMTQuMzk1IDEwNy4yMjdDMTIzLjgwOCAxMDYuODg0IDEzMS4zMzMgOTkuMTQ1OCAxMzEuMzMzIDg5LjY0OTZIMTI4LjMzM1pNMTEyLjg0IDEwNS43MjhWMTA1LjczOEgxMTUuODRWMTA1LjcyOEgxMTIuODRaTTExNC4zNCAxMDQuMjM4SDExMy43NDVWMTA3LjIzOEgxMTQuMzRWMTA0LjIzOFpcIixcbiAgZmlsbDogXCIjM0IzNTUyXCIsXG4gIG1hc2s6IFwidXJsKCNwYXRoLTMtaW5zaWRlLTFfMF8yMzQyKVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTI0LjczOSAxMDYuNzI2TDEyNS4zMzYgMTA2LjI3MUwxMjQuODgyIDEwNS42NzVMMTI0LjI4NSAxMDYuMTI5TDEyNC43MzkgMTA2LjcyNlpNMTE1LjYxNSAxMDkuOTg4TDExNS41ODcgMTA5LjIzOEwxMTUuNjE1IDEwOS45ODhaTTEyNS42NDggMTA3LjkxOUwxMjYuMTAyIDEwOC41MTZMMTI2LjY5OSAxMDguMDYyTDEyNi4yNDQgMTA3LjQ2NUwxMjUuNjQ4IDEwNy45MTlaTTExNi4zOCAxMTEuNDQ3TDExNi4zMjIgMTEwLjY5OUwxMTUuNjQyIDExMC43NTFMMTE1LjYzIDExMS40MzRMMTE2LjM4IDExMS40NDdaTTExNi4zNzkgMTExLjQ5OVYxMTIuMjQ5SDExNy4xMTZMMTE3LjEyOSAxMTEuNTEyTDExNi4zNzkgMTExLjQ5OVpNMTA0LjgyOSAxMTEuNDk5SDEwNC4wNzlWMTEyLjI0OUgxMDQuODI5VjExMS40OTlaTTEwNC44MjkgMTA5Ljk5OVYxMDkuMjQ5SDEwNC4wNzlWMTA5Ljk5OUgxMDQuODI5Wk0xMTUuMzE3IDEwOS45OTlWMTEwLjc0OUgxMTUuMzMxTDExNS4zNDUgMTEwLjc0OEwxMTUuMzE3IDEwOS45OTlaTTk5Ljc4OTkgMTA5Ljk5OUgxMDAuNTRWMTA5LjI0OUg5OS43ODk5VjEwOS45OTlaTTkzLjQwMzMgMTA5Ljk5OVYxMDkuMjQ5SDkyLjY1MzNWMTA5Ljk5OUg5My40MDMzWk05OS43ODk5IDExMS40OTlWMTEyLjI0OUgxMDAuNTRWMTExLjQ5OUg5OS43ODk5Wk05My40MDMzIDExMS40OTlIOTIuNjUzM1YxMTIuMjQ5SDkzLjQwMzNWMTExLjQ5OVpNMTI0LjI4NSAxMDYuMTI5QzEyMS44NTIgMTA3Ljk4IDExOC44NTEgMTA5LjEyIDExNS41ODcgMTA5LjIzOEwxMTUuNjQyIDExMC43MzdDMTE5LjIyNSAxMTAuNjA3IDEyMi41MjMgMTA5LjM1NSAxMjUuMTkzIDEwNy4zMjJMMTI0LjI4NSAxMDYuMTI5Wk0xMjYuMjQ0IDEwNy40NjVMMTI1LjMzNiAxMDYuMjcxTDEyNC4xNDIgMTA3LjE4TDEyNS4wNTEgMTA4LjM3M0wxMjYuMjQ0IDEwNy40NjVaTTExNi40MzcgMTEyLjE5NUMxMjAuMDU0IDExMS45MTcgMTIzLjM3OCAxMTAuNTg5IDEyNi4xMDIgMTA4LjUxNkwxMjUuMTkzIDEwNy4zMjJDMTIyLjY5MiAxMDkuMjI2IDExOS42NDIgMTEwLjQ0NSAxMTYuMzIyIDExMC42OTlMMTE2LjQzNyAxMTIuMTk1Wk0xMTcuMTI5IDExMS41MTJMMTE3LjEyOSAxMTEuNDZMMTE1LjYzIDExMS40MzRMMTE1LjYyOSAxMTEuNDg2TDExNy4xMjkgMTExLjUxMlpNMTE1LjY0MiAxMTIuMjQ5SDExNi4zNzlWMTEwLjc0OUgxMTUuNjQyVjExMi4yNDlaTTEwNC44MjkgMTEyLjI0OUgxMTUuNjQyVjExMC43NDlIMTA0LjgyOVYxMTIuMjQ5Wk0xMDQuMDc5IDEwOS45OTlWMTExLjQ5OUgxMDUuNTc5VjEwOS45OTlIMTA0LjA3OVpNMTE1LjMxNyAxMDkuMjQ5SDEwNC44MjlWMTEwLjc0OUgxMTUuMzE3VjEwOS4yNDlaTTExNS41ODcgMTA5LjIzOEwxMTUuMjkgMTA5LjI0OUwxMTUuMzQ1IDExMC43NDhMMTE1LjY0MiAxMTAuNzM3TDExNS41ODcgMTA5LjIzOFpNOTkuNzg5OSAxMDkuMjQ5SDkzLjQwMzNWMTEwLjc0OUg5OS43ODk5VjEwOS4yNDlaTTEwMC41NCAxMTEuNDk5VjEwOS45OTlIOTkuMDM5OVYxMTEuNDk5SDEwMC41NFpNOTMuNDAzMyAxMTIuMjQ5SDk5Ljc4OTlWMTEwLjc0OUg5My40MDMzVjExMi4yNDlaTTkyLjY1MzMgMTA5Ljk5OVYxMTEuNDk5SDk0LjE1MzNWMTA5Ljk5OUg5Mi42NTMzWlwiLFxuICBmaWxsOiBcIiMzQjM1NTJcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk01Mi43OTE0IDUzLjE4MTVDNTYuMDQ1MiA3Ni43MTMzIDc2LjIzOTkgOTQuODMzNSAxMDAuNjY3IDk0LjgzMzVDMTA2LjYwNSA5NC44MzM1IDExMi4yOTIgOTMuNzYyNyAxMTcuNTQ4IDkxLjgwMzdDMTE4LjIwNSA5MS41NTg2IDExOS4wMTQgOTEuMjA4OCAxMTkuODQ4IDkwLjgyNjJDMTIyLjAwMSA4OS44Mzk1IDEyNC40OTIgOTEuNTEzIDEyMy45NDMgOTMuODE2NUMxMjMuNzYzIDk0LjU3MDMgMTIzLjU1NCA5NS4yMzM2IDEyMy4zMTMgOTUuNjY0N0MxMjEuMjQ5IDk5LjM3MDEgMTE3LjI5MiAxMDEuODc3IDExMi43NSAxMDEuODc3SDM5LjMyMjZMMzkuMzIzIDEwMS44NjhDMzAuODE0NyAxMDEuNTk5IDI0IDk0LjYxNjkgMjQgODYuMDQzMkMyNCA3Ny43MDMxIDMwLjQ0ODMgNzAuODY5MSAzOC42MzEyIDcwLjI1NDhDMzguNTE5NCA2OS4zMTUgMzguNDYyNCA2OC4zNTc4IDM4LjQ2MjQgNjcuMzg3M0MzOC40NjI0IDYxLjQzOTggNDAuNjA2IDU1Ljk5MyA0NC4xNjI5IDUxLjc3NzRDNDUuMDYxOCA1MC43MTIgNDYuNTY0NSA0OS40ODI1IDQ4LjAzODUgNDguMzk0MUM0OS44OTc0IDQ3LjAyMTQgNTIuNDI0MSA0OC4zNjkyIDUyLjU2OTMgNTAuNjc1NUM1Mi42MzA1IDUxLjY0NjUgNTIuNzA0NCA1Mi41NTI0IDUyLjc5MTQgNTMuMTgxNVpcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMDVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTExMC4xNyA0MS45Nzk3TDM1LjA4OSAxMTcuMDZcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTM2LjQ1NzggNzMuNjQxMkwzNS43Mjc3IDczLjgxMjdWNzMuODEyN0wzNi40NTc4IDczLjY0MTJaTTM1LjU1NjIgNzMuMDgyNUwzNS43Mjc3IDczLjgxMjdMMzUuNzI3NyA3My44MTI3TDM1LjU1NjIgNzMuMDgyNVpNMzkuMTA1MiA4MC40ODE4TDM5Ljc2MDYgODAuMTE3M0wzOS43NjA2IDgwLjExNzNMMzkuMTA1MiA4MC40ODE4Wk0zOC44MTQyIDgxLjUwMThMMzkuMTc4OCA4Mi4xNTcySDM5LjE3ODhMMzguODE0MiA4MS41MDE4Wk0zNy43OTQzIDgxLjIxMDhMMzguNDQ5NyA4MC44NDYzTDM3Ljc5NDMgODEuMjEwOFpNMzQuOTk3NiA3My45ODQyTDM1LjcyNzcgNzMuODEyN0wzNS43Mjc3IDczLjgxMjdMMzQuOTk3NiA3My45ODQyWk00MC45OTkgODMuNDE3OEw0MS42MDE0IDgyLjk3MUw0MC45OTkgODMuNDE3OFpNMzkuOTQ5OCA4My4yNjIxTDM5LjUwMzEgODIuNjU5N0gzOS41MDMxTDM5Ljk0OTggODMuMjYyMVpNNDMuNTA3OSA4Ni4zMzgxTDQ0LjA0MDQgODUuODFMNDMuNTA3OSA4Ni4zMzgxWk00My41MDM2IDg3LjM5ODhMNDQuMDMxOCA4Ny45MzEzSDQ0LjAzMThMNDMuNTAzNiA4Ny4zOTg4Wk00Mi40NDMgODcuMzk0NUw0MS45MTA1IDg3LjkyMjdMNDIuNDQzIDg3LjM5NDVaTTM5Ljc5NDEgODQuMzExM0wzOS4xOTE3IDg0Ljc1OEwzOS43OTQxIDg0LjMxMTNaTTM3LjE4OCA3My40Njk3QzM2Ljk5ODUgNzIuNjYzMiAzNi4xOTEyIDcyLjE2MyAzNS4zODQ3IDcyLjM1MjRMMzUuNzI3NyA3My44MTI3TDM1LjcyNzcgNzMuODEyN0wzNy4xODggNzMuNDY5N1pNMzkuNzYwNiA4MC4xMTczQzM4LjYxNDggNzguMDU2OCAzNy43NDEyIDc1LjgyNDkgMzcuMTg4IDczLjQ2OTdMMzUuNzI3NyA3My44MTI3QzM2LjMxMzEgNzYuMzA1IDM3LjIzNzYgNzguNjY2NiAzOC40NDk3IDgwLjg0NjNMMzkuNzYwNiA4MC4xMTczWk0zOS4xNzg4IDgyLjE1NzJDMzkuOTAyOCA4MS43NTQ2IDQwLjE2MzMgODAuODQxMyAzOS43NjA2IDgwLjExNzNMMzguNDQ5NyA4MC44NDYzVjgwLjg0NjNMMzkuMTc4OCA4Mi4xNTcyWk0zNy4xMzg4IDgxLjU3NTNDMzcuNTQxNCA4Mi4yOTkzIDM4LjQ1NDggODIuNTU5OSAzOS4xNzg4IDgyLjE1NzJMMzguNDQ5NyA4MC44NDYzTDM3LjEzODggODEuNTc1M1pNMzQuMjY3NCA3NC4xNTU3QzM0Ljg4NTEgNzYuNzg1MSAzNS44NjA0IDc5LjI3NjUgMzcuMTM4OCA4MS41NzUzTDM4LjQ0OTcgODAuODQ2M0MzNy4yMzc2IDc4LjY2NjYgMzYuMzEzMSA3Ni4zMDUgMzUuNzI3NyA3My44MTI3TDM0LjI2NzQgNzQuMTU1N1pNMzUuMzg0NyA3Mi4zNTI0QzM0LjU3ODIgNzIuNTQxOCAzNC4wNzggNzMuMzQ5MiAzNC4yNjc0IDc0LjE1NTdMMzUuNzI3NyA3My44MTI3TDM1LjcyNzcgNzMuODEyN0wzNS4zODQ3IDcyLjM1MjRaTTQxLjYwMTQgODIuOTcxQzQxLjEwNzkgODIuMzA1NiA0MC4xNjg1IDgyLjE2NjIgMzkuNTAzMSA4Mi42NTk3TDQwLjM5NjYgODMuODY0NUw0MS42MDE0IDgyLjk3MVpNNDQuMDQwNCA4NS44MUM0My4xNjE2IDg0LjkyNCA0Mi4zNDYxIDgzLjk3NTIgNDEuNjAxNCA4Mi45NzFMNDAuMzk2NiA4My44NjQ1QzQxLjE4NDEgODQuOTI2NCA0Mi4wNDYzIDg1LjkyOTYgNDIuOTc1NSA4Ni44NjYzTDQ0LjA0MDQgODUuODFaTTQ0LjAzMTggODcuOTMxM0M0NC42MiA4Ny4zNDc4IDQ0LjYyMzggODYuMzk4MSA0NC4wNDA0IDg1LjgxTDQyLjk3NTUgODYuODY2M0w0NC4wMzE4IDg3LjkzMTNaTTQxLjkxMDUgODcuOTIyN0M0Mi40OTM5IDg4LjUxMDggNDMuNDQzNyA4OC41MTQ3IDQ0LjAzMTggODcuOTMxM0w0Mi45NzU1IDg2Ljg2NjNMNDEuOTEwNSA4Ny45MjI3Wk0zOS4xOTE3IDg0Ljc1OEM0MC4wMjIgODUuODc3NiA0MC45MzEgODYuOTM1MiA0MS45MTA1IDg3LjkyMjdMNDIuOTc1NSA4Ni44NjYzQzQyLjA0NjMgODUuOTI5NiA0MS4xODQxIDg0LjkyNjQgNDAuMzk2NiA4My44NjQ1TDM5LjE5MTcgODQuNzU4Wk0zOS41MDMxIDgyLjY1OTdDMzguODM3NiA4My4xNTMxIDM4LjY5ODIgODQuMDkyNiAzOS4xOTE3IDg0Ljc1OEw0MC4zOTY2IDgzLjg2NDVMMzkuNTAzMSA4Mi42NTk3WlwiLFxuICBmaWxsOiBcIiMzQjM1NTJcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTc3LjQ1MTYgMzUuMjkxNkw3Ny43NTUxIDM0LjYwNTdMNzcuNDUxNiAzNS4yOTE2Wk03Ni40NjIzIDM1LjY3NEw3NS43NzY1IDM1LjM3MDVMNzYuNDYyMyAzNS42NzRaTTg2LjkyOTIgNDEuNDM5M0w4Ny40MzEzIDQwLjg4MjJMODYuOTI5MiA0MS40MzkzWk04Ni45ODQgNDIuNDk4NUw4Ny41NDExIDQzLjAwMDdIODcuNTQxMUw4Ni45ODQgNDIuNDk4NVpNODUuOTI0OCA0Mi41NTM0TDg1LjQyMjYgNDMuMTEwNFY0My4xMTA0TDg1LjkyNDggNDIuNTUzNFpNNzYuODQ0NyAzNi42NjMzTDc2LjU0MTIgMzcuMzQ5Mkw3Ni44NDQ3IDM2LjY2MzNaTTY2LjI3MTkgMzIuMzk3Nkw2Ni4yMDQxIDMzLjE0NDZMNjYuMjcxOSAzMi4zOTc2Wk02NS40NTcyIDMzLjA3NjhMNjYuMjA0MSAzMy4xNDQ2TDY1LjQ1NzIgMzMuMDc2OFpNNzIuMzM0MSAzMy40ODA5TDcyLjEzODcgMzQuMjA1TDcyLjMzNDEgMzMuNDgwOVpNNzIuODYyOSAzNC40MDA0TDczLjU4NyAzNC41OTU3TDcyLjg2MjkgMzQuNDAwNFpNNzEuOTQzNCAzNC45MjkyTDcyLjEzODggMzQuMjA1TDcxLjk0MzQgMzQuOTI5MlpNNjYuMTM2NCAzMy44OTE1TDY2LjIwNDEgMzMuMTQ0Nkw2Ni4xMzY0IDMzLjg5MTVaTTc3Ljc1NTEgMzQuNjA1N0M3Ni45OTc2IDM0LjI3MDUgNzYuMTExNyAzNC42MTI5IDc1Ljc3NjUgMzUuMzcwNUw3Ny4xNDgyIDM1Ljk3NzRWMzUuOTc3NEw3Ny43NTUxIDM0LjYwNTdaTTg3LjQzMTMgNDAuODgyMkM4NC41Nzg1IDM4LjMxMDQgODEuMzE3IDM2LjE4MTggNzcuNzU1MSAzNC42MDU3TDc3LjE0ODIgMzUuOTc3NEM4MC41NjI5IDM3LjQ4ODQgODMuNjkwNiAzOS41Mjk1IDg2LjQyNyA0MS45OTYzTDg3LjQzMTMgNDAuODgyMlpNODcuNTQxMSA0My4wMDA3Qzg4LjA5NTggNDIuMzg1NCA4OC4wNDY2IDQxLjQzNjkgODcuNDMxMyA0MC44ODIyTDg2LjQyNyA0MS45OTYzTDg2LjQyNyA0MS45OTYzTDg3LjU0MTEgNDMuMDAwN1pNODUuNDIyNiA0My4xMTA0Qzg2LjAzNzkgNDMuNjY1MSA4Ni45ODY0IDQzLjYxNiA4Ny41NDExIDQzLjAwMDdMODYuNDI3IDQxLjk5NjNIODYuNDI3TDg1LjQyMjYgNDMuMTEwNFpNNzYuNTQxMiAzNy4zNDkyQzc5LjgwODcgMzguNzk1IDgyLjgwMjcgNDAuNzQ4NiA4NS40MjI2IDQzLjExMDRMODYuNDI3IDQxLjk5NjNDODMuNjkwNiAzOS41Mjk1IDgwLjU2MjkgMzcuNDg4NCA3Ny4xNDgyIDM1Ljk3NzRMNzYuNTQxMiAzNy4zNDkyWk03NS43NzY1IDM1LjM3MDVDNzUuNDQxMiAzNi4xMjgxIDc1Ljc4MzYgMzcuMDEzOSA3Ni41NDEyIDM3LjM0OTJMNzcuMTQ4MiAzNS45Nzc0TDc1Ljc3NjUgMzUuMzcwNVpNNjYuMzM5NyAzMS42NTA3QzY1LjUxNDcgMzEuNTc1OCA2NC43ODUyIDMyLjE4NCA2NC43MTAzIDMzLjAwOUw2Ni4yMDQxIDMzLjE0NDZMNjYuMzM5NyAzMS42NTA3Wk03Mi41Mjk0IDMyLjc1NjhDNzAuNTI4NSAzMi4yMTcgNjguNDYgMzEuODQzMiA2Ni4zMzk3IDMxLjY1MDdMNjYuMjA0MSAzMy4xNDQ2QzY4LjIzNzYgMzMuMzI5MSA3MC4yMjA4IDMzLjY4NzYgNzIuMTM4NyAzNC4yMDVMNzIuNTI5NCAzMi43NTY4Wk03My41ODcgMzQuNTk1N0M3My44MDI3IDMzLjc5NTkgNzMuMzI5MyAzMi45NzI2IDcyLjUyOTQgMzIuNzU2OEw3Mi4xMzg3IDM0LjIwNUw3Mi4xMzg4IDM0LjIwNUw3My41ODcgMzQuNTk1N1pNNzEuNzQ4MSAzNS42NTMzQzcyLjU0NzkgMzUuODY5IDczLjM3MTIgMzUuMzk1NiA3My41ODcgMzQuNTk1N0w3Mi4xMzg4IDM0LjIwNUw3MS43NDgxIDM1LjY1MzNaTTY2LjA2ODYgMzQuNjM4NEM2OC4wMTUyIDM0LjgxNTEgNjkuOTEzIDM1LjE1ODIgNzEuNzQ4MSAzNS42NTMzTDcyLjEzODggMzQuMjA1QzcwLjIyMDggMzMuNjg3NiA2OC4yMzc2IDMzLjMyOTEgNjYuMjA0MSAzMy4xNDQ2TDY2LjA2ODYgMzQuNjM4NFpNNjQuNzEwMyAzMy4wMDlDNjQuNjM1NCAzMy44MzQgNjUuMjQzNSAzNC41NjM2IDY2LjA2ODYgMzQuNjM4NEw2Ni4yMDQxIDMzLjE0NDZMNjQuNzEwMyAzMy4wMDlaXCIsXG4gIGZpbGw6IFwiIzNCMzU1MlwiXG59KSk7XG5leHBvcnQgZGVmYXVsdCBDbG91ZDsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGNvbnN0IEN1cCA9ICh7XG4gIHdpZHRoID0gMTUyLFxuICBoZWlnaHQgPSAxNTJcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgd2lkdGg6IHdpZHRoLFxuICBoZWlnaHQ6IGhlaWdodCxcbiAgdmlld0JveDogXCIwIDAgMTUyIDE1MlwiLFxuICBmaWxsOiBcIm5vbmVcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCI3NlwiLFxuICBjeTogXCI3NlwiLFxuICByOiBcIjc2XCIsXG4gIGZpbGw6IFwid2hpdGVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEwNS44NTMgMTE2LjgxNkMxMDUuODUzIDExNy42NjIgMTA1LjIyNiAxMTguNjQ1IDEwMy42NSAxMTkuNjc3QzEwMi4xMDUgMTIwLjY5IDk5LjgxOTcgMTIxLjYzIDk2LjkyODcgMTIyLjQzMUM5MS4xNTczIDEyNC4wMyA4My4xNDE0IDEyNS4wMjkgNzQuMjU3MiAxMjUuMDI5QzY1LjM3MyAxMjUuMDI5IDU3LjM1NzEgMTI0LjAzIDUxLjU4NTcgMTIyLjQzMUM0OC42OTQ3IDEyMS42MyA0Ni40MDk1IDEyMC42OSA0NC44NjQ1IDExOS42NzdDNDMuMjg4NiAxMTguNjQ1IDQyLjY2MTYgMTE3LjY2MiA0Mi42NjE2IDExNi44MTZDNDIuNjYxNiAxMTUuOTcgNDMuMjg4NiAxMTQuOTg3IDQ0Ljg2NDUgMTEzLjk1NEM0Ni40MDk1IDExMi45NDIgNDguNjk0NyAxMTIuMDAyIDUxLjU4NTcgMTExLjIwMUM1Ny4zNTcxIDEwOS42MDEgNjUuMzczIDEwOC42MDMgNzQuMjU3MiAxMDguNjAzQzgzLjE0MTQgMTA4LjYwMyA5MS4xNTczIDEwOS42MDEgOTYuOTI4NyAxMTEuMjAxQzk5LjgxOTcgMTEyLjAwMiAxMDIuMTA1IDExMi45NDIgMTAzLjY1IDExMy45NTRDMTA1LjIyNiAxMTQuOTg3IDEwNS44NTMgMTE1Ljk3IDEwNS44NTMgMTE2LjgxNlpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTMxLjc1IDYyLjYxNzJIMTE2Ljc2NVY3NC43Mjc1QzExNi43NjUgOTguMjAzNyA5Ny43MzM1IDExNy4yMzUgNzQuMjU3NCAxMTcuMjM1QzUwLjc4MTIgMTE3LjIzNSAzMS43NSA5OC4yMDM3IDMxLjc1IDc0LjcyNzVWNjIuNjE3MlpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk0xMDguMjggNzEuOTg4OEMxMDkuNzkxIDcxLjU3NiAxMTEuMjggNzIuNzEzNCAxMTEuMjggNzQuMjc5NEwxMTEuMjc5IDc0LjU0OTNDMTExLjI3OSA5Mi4wNzM2IDk5LjIzMDQgMTA2Ljc4NCA4Mi45NjQ5IDExMC44NDdDODIuMzUwMiAxMTEuMDAxIDgxLjU4MyAxMTEuMTQxIDgwLjc2MTIgMTExLjI2NkM3OC44MTU4IDExMS41NjIgNzcuODM4MyAxMDkuMTI2IDc5LjI0ODIgMTA3Ljc1M0M3OS4zMTM2IDEwNy42ODkgNzkuMzc2NSAxMDcuNjI3IDc5LjQzNjYgMTA3LjU2N0M4Ni45NzQxIDk5Ljk4NjggOTEuNjY5NyA4OS41Nzg3IDkxLjc5MTcgNzguMDczOUw5MS43OTQxIDc3LjYxNDJDOTEuNzk0NiA3NS44MDE4IDkzLjE3MzIgNzQuMjg3IDk0Ljk3NzUgNzQuMTE2MUw5NS4zNTYxIDc0LjA4MDJMOTYuNTAwNCA3My45NTQ2TDk3LjYyMjMgNzMuODIyN0M5Ny44MDczIDczLjgwMDIgOTcuOTkxNCA3My43Nzc0IDk4LjE3NDUgNzMuNzU0NEw5OS4yNjEzIDczLjYxMzFMMTAwLjMyNCA3My40NjU5TDEwMS4zNjIgNzMuMzEyN0MxMDEuNTMyIDczLjI4NjcgMTAxLjcwMiA3My4yNjA0IDEwMS44NzEgNzMuMjMzOUwxMDIuODcgNzMuMDcyMUwxMDMuODQyIDcyLjkwNDhDMTA0LjAwMiA3Mi44NzY0IDEwNC4xNjEgNzIuODQ3OCAxMDQuMzE4IDcyLjgxOUwxMDUuMjQ5IDcyLjY0MzVDMTA2LjAxMyA3Mi40OTUxIDEwNi43NDggNzIuMzQxMiAxMDcuNDUxIDcyLjE4MjFMMTA4LjI4IDcxLjk4ODhaXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBmaWxsT3BhY2l0eTogXCIwLjA1XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMTYuNzY1IDYxLjQ3NzhDMTE2Ljc2NSA2MS43NTQxIDExNi42MiA2Mi4xMjA3IDExNi4xMjcgNjIuNTc2NEMxMTUuNjM1IDYzLjAzMTIgMTE0Ljg2NyA2My41MDU0IDExMy44MDkgNjMuOTc4N0MxMTEuNjk4IDY0LjkyMjkgMTA4LjU5NiA2NS43OTE1IDEwNC43MDYgNjYuNTI3N0M5Ni45MzU5IDY3Ljk5NzYgODYuMTcwNSA2OC45MTE2IDc0LjI1NzQgNjguOTExNkM2Mi4zNDQyIDY4LjkxMTYgNTEuNTc4OCA2Ny45OTc2IDQzLjgwOTIgNjYuNTI3N0MzOS45MTgyIDY1Ljc5MTUgMzYuODE2NiA2NC45MjI5IDM0LjcwNTYgNjMuOTc4N0MzMy42NDc2IDYzLjUwNTQgMzIuODc5OSA2My4wMzEyIDMyLjM4OCA2Mi41NzY0QzMxLjg5NTEgNjIuMTIwNyAzMS43NSA2MS43NTQxIDMxLjc1IDYxLjQ3NzhDMzEuNzUgNjEuMjAxNSAzMS44OTUxIDYwLjgzNDkgMzIuMzg4IDYwLjM3OTFDMzIuODc5OSA1OS45MjQzIDMzLjY0NzYgNTkuNDUwMSAzNC43MDU2IDU4Ljk3NjlDMzYuODE2NiA1OC4wMzI2IDM5LjkxODIgNTcuMTY0IDQzLjgwOTIgNTYuNDI3OUM1MS41Nzg4IDU0Ljk1NzkgNjIuMzQ0MiA1NC4wNDM5IDc0LjI1NzQgNTQuMDQzOUM4Ni4xNzA1IDU0LjA0MzkgOTYuOTM1OSA1NC45NTc5IDEwNC43MDYgNTYuNDI3OUMxMDguNTk2IDU3LjE2NCAxMTEuNjk4IDU4LjAzMjYgMTEzLjgwOSA1OC45NzY5QzExNC44NjcgNTkuNDUwMSAxMTUuNjM1IDU5LjkyNDMgMTE2LjEyNyA2MC4zNzkxQzExNi42MiA2MC44MzQ5IDExNi43NjUgNjEuMjAxNSAxMTYuNzY1IDYxLjQ3NzhaXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0zNy4yNzI1IDc1LjAyNjhMMzYuNTU1IDc0LjgwODRMMzYuMzM2NiA3NS41MjU5TDM3LjA1NCA3NS43NDQzTDM3LjI3MjUgNzUuMDI2OFpNNjIuMjU3NyA3OC42MTE0TDYyLjIxNyA3OS4zNjAzTDYyLjk2NTkgNzkuNDAwOUw2My4wMDY2IDc4LjY1Mkw2Mi4yNTc3IDc4LjYxMTRaTTM3LjcwOTMgNzMuNTkxOEwzNy45Mjc3IDcyLjg3NDNMMzcuMjEwMiA3Mi42NTU5TDM2Ljk5MTggNzMuMzczNEwzNy43MDkzIDczLjU5MThaTTYyLjMzOTEgNzcuMTEzNkw2My4wODggNzcuMTU0M0w2My4xMjg2IDc2LjQwNTRMNjIuMzc5NyA3Ni4zNjQ3TDYyLjMzOTEgNzcuMTEzNlpNNjcuMTU3NiA3OC44MTk5TDY2LjQwOCA3OC43OTY2TDY2LjM4NDYgNzkuNTQ2Mkw2Ny4xMzQzIDc5LjU2OTZMNjcuMTU3NiA3OC44MTk5Wk03NC4yNTc1IDc4LjkyOTNWNzkuNjc5M0g3NS4wMDc1Vjc4LjkyOTNINzQuMjU3NVpNNjcuMjA0MyA3Ny4zMjA2TDY3LjIyNzYgNzYuNTcxTDY2LjQ3OCA3Ni41NDc3TDY2LjQ1NDYgNzcuMjk3M0w2Ny4yMDQzIDc3LjMyMDZaTTc0LjI1NzUgNzcuNDI5M0g3NS4wMDc1Vjc2LjY3OTNINzQuMjU3NVY3Ny40MjkzWk0zNy4wNTQgNzUuNzQ0M0M0Mi44MTUgNzcuNDk4IDUxLjc1NjYgNzguNzkyMiA2Mi4yMTcgNzkuMzYwM0w2Mi4yOTg0IDc3Ljg2MjVDNTEuODg2IDc3LjI5NyA0My4wODMgNzYuMDExNiAzNy40OTA5IDc0LjMwOTNMMzcuMDU0IDc1Ljc0NDNaTTM2Ljk5MTggNzMuMzczNEwzNi41NTUgNzQuODA4NEwzNy45OSA3NS4yNDUyTDM4LjQyNjggNzMuODEwMkwzNi45OTE4IDczLjM3MzRaTTYyLjM3OTcgNzYuMzY0N0M1Mi4wMTUzIDc1LjgwMTggNDMuMzUwOSA3NC41MjUyIDM3LjkyNzcgNzIuODc0M0wzNy40OTA5IDc0LjMwOTNDNDMuMDgzIDc2LjAxMTYgNTEuODg2IDc3LjI5NyA2Mi4yOTg0IDc3Ljg2MjVMNjIuMzc5NyA3Ni4zNjQ3Wk02My4wMDY2IDc4LjY1Mkw2My4wODggNzcuMTU0M0w2MS41OTAyIDc3LjA3MjlMNjEuNTA4OCA3OC41NzA3TDYzLjAwNjYgNzguNjUyWk02Ny4xMzQzIDc5LjU2OTZDNjkuNDUyNiA3OS42NDE3IDcxLjgzMjEgNzkuNjc5MyA3NC4yNTc1IDc5LjY3OTNWNzguMTc5M0M3MS44NDc1IDc4LjE3OTMgNjkuNDgzNiA3OC4xNDIgNjcuMTgwOSA3OC4wNzAzTDY3LjEzNDMgNzkuNTY5NlpNNjYuNDU0NiA3Ny4yOTczTDY2LjQwOCA3OC43OTY2TDY3LjkwNzIgNzguODQzM0w2Ny45NTM5IDc3LjM0NEw2Ni40NTQ2IDc3LjI5NzNaTTc0LjI1NzUgNzYuNjc5M0M3MS44NjMgNzYuNjc5MyA2OS41MTQ2IDc2LjY0MjIgNjcuMjI3NiA3Ni41NzFMNjcuMTgwOSA3OC4wNzAzQzY5LjQ4MzYgNzguMTQyIDcxLjg0NzUgNzguMTc5MyA3NC4yNTc1IDc4LjE3OTNWNzYuNjc5M1pNNzUuMDA3NSA3OC45MjkzVjc3LjQyOTNINzMuNTA3NVY3OC45MjkzSDc1LjAwNzVaXCIsXG4gIGZpbGw6IFwiIzNCMzU1MlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTc0Ljg0MzkgNjAuMzA5N0w3Ni4zNTAzIDYwLjMxNzdMNzcuODQgNjAuMzM0Nkw3OS4zMTE4IDYwLjM2MDFMODAuNzY0NSA2MC4zOTQyTDgyLjE5NjcgNjAuNDM2NUw4My4xMzk1IDYwLjQ2OTNMODQuNTM0OSA2MC41MjUxTDg1LjkwNjQgNjAuNTg4N0w4Ni44MDY5IDYwLjYzNTRMODcuNjk1OSA2MC42ODU1TDg5LjQzNzggNjAuNzk1NEw5MC43MTEyIDYwLjg4NjJMOTEuOTU0OSA2MC45ODRMOTMuNTY0NyA2MS4xMjVMOTQuMzQ4MSA2MS4xOTk5TDk1LjQ5NTEgNjEuMzE3Nkw5Ni45NzAxIDYxLjQ4NDNMOTcuNjgzNSA2MS41NzE3TDk4LjM4MDMgNjEuNjYxN0w5OS4zOTM2IDYxLjgwMTVMMTAwLjA0NyA2MS44OTc4TDEwMC45OTQgNjIuMDQ2OUwxMDEuNjAzIDYyLjE0OTJMMTAyLjQ4IDYyLjMwN0wxMDMuMDQgNjIuNDE1TDEwMy41ODEgNjIuNTI1MkwxMDQuMTAyIDYyLjYzNzVMMTA0LjYwMiA2Mi43NTE4TDEwNS4wODEgNjIuODY4MkwxMDUuMzEzIDYyLjkyNzFMMTA1Ljc2IDYzLjA0NjRMMTA2LjE4NSA2My4xNjc1TDEwNi43ODIgNjMuMzUyNkwxMDYuODkzIDYzLjM5ODFDMTA3LjQwNCA2My42MDcxIDEwNy4zNDkgNjQuMzUyOCAxMDYuODEgNjQuNDczNkMxMDYuNjEgNjQuNTE4NiAxMDYuNDA2IDY0LjU2MzIgMTA2LjE5OSA2NC42MDc0TDEwNS42ODcgNjQuNzE1M0wxMDQuODQzIDY0Ljg4NDVMMTAzLjg3OSA2NS4wNjYzQzEwMy41MjIgNjUuMTMxNSAxMDMuMTYgNjUuMTk1NCAxMDIuNzkyIDY1LjI1ODFMMTAyLjIzNiA2NS4zNTExTDEwMS4xMDEgNjUuNTMxNEM5OS4wNTYzIDY1Ljg0NDggOTYuODY2OSA2Ni4xMjA4IDk0LjU2MTMgNjYuMzU2NUw5My42OTEzIDY2LjQ0M0w5Mi4zNjY2IDY2LjU2NTVMOTEuMDE5MiA2Ni42Nzk0TDkwLjMzNzQgNjYuNzMzTDg4Ljk1ODIgNjYuODMzNUw4OC4yNjExIDY2Ljg4MDRMODcuNTU5MSA2Ni45MjUxTDg2LjE0MTMgNjcuMDA3NUw4NC43MDU4IDY3LjA4MDZMODMuOTgxOCA2Ny4xMTM3TDgyLjUyMiA2Ny4xNzI4Qzc5LjgzMTcgNjcuMjcyMyA3Ny4wNjY1IDY3LjMyMzggNzQuMjU3NCA2Ny4zMjM4QzcxLjkxNjUgNjcuMzIzOCA2OS42MDYxIDY3LjI4ODEgNjcuMzQ0MSA2Ny4yMTg1TDY1Ljk5MjkgNjcuMTcyOEw2NC41MzMxIDY3LjExMzdMNjMuODA5MSA2Ny4wODA2TDYyLjM3MzYgNjcuMDA3NUw2MC45NTU4IDY2LjkyNTFMNjAuMjUzOCA2Ni44ODA0TDU5LjU1NjcgNjYuODMzNUw1OC4xNzc1IDY2LjczM0w1Ny40OTU2IDY2LjY3OTRMNTYuMTQ4MyA2Ni41NjU1TDU1LjQ4MzEgNjYuNTA1NEw1NC4xNzAxIDY2LjM3ODVDNTIuMDgzMSA2Ni4xNjgxIDUwLjA5IDY1LjkyNDggNDguMjExNSA2NS42NTA3TDQ3LjQxMzUgNjUuNTMxNEw0Ni4yNzg2IDY1LjM1MTFDNDUuNzgxMSA2NS4yNjkzIDQ1LjI5MyA2NS4xODUyIDQ0LjgxNDYgNjUuMDk4OEw0NC4xMDQ1IDY0Ljk2NzVMNDMuNjcyIDY0Ljg4NDVMNDIuODI4MiA2NC43MTUzQzQyLjUzNjkgNjQuNjU1MSA0Mi4yNTEgNjQuNTk0MiA0MS45NzA1IDY0LjUzMjZDNDEuMzUxNiA2NC4zOTY3IDQxLjI4NzEgNjMuNTMwNiA0MS44ODAxIDYzLjMwNzRDNDEuOTA0MSA2My4yOTg0IDQxLjkyMTEgNjMuMjkyMiA0MS45MzAyIDYzLjI4OTNMNDIuNDM4OCA2My4xMzU3TDQzLjA5NDkgNjIuOTU1MUw0My42Nzg4IDYyLjgwNzlMNDQuMTY5NyA2Mi42OTI0TDQ0LjY4MTMgNjIuNTc4OUw0NS40ODY5IDYyLjQxMjZMNDYuMzM3MSA2Mi4yNTEzTDQ2LjkyODEgNjIuMTQ2NUw0Ny44NDk4IDYxLjk5MzdMNDguNDg3MiA2MS44OTQ5TDQ5LjE0MjYgNjEuNzk4NUw0OS44MTU1IDYxLjcwNDVMNTAuODU3IDYxLjU2ODVMNTEuOTM1OCA2MS40MzgzTDUyLjY3NTIgNjEuMzU1TDUzLjQzMDMgNjEuMjc0NEw1NC4yMDA2IDYxLjE5NjZMNTUuMzg0IDYxLjA4NTNMNTYuNTk5OCA2MC45ODA3TDU3Ljg0NjUgNjAuODgzTDU5LjEyMyA2MC43OTIzTDYwLjQyOCA2MC43MDg3TDYxLjMxMzIgNjAuNjU3MUw2Mi4yMTAyIDYwLjYwODlMNjMuNTc2NyA2MC41NDI5TDY0Ljk2NzUgNjAuNDg0N0w2Ni4zODE0IDYwLjQzNDVMNjcuODE2OSA2MC4zOTI0TDY5LjI3MjggNjAuMzU4N0w3MC4yNTQyIDYwLjM0MUw3MS43NDE0IDYwLjMyMTZMNzIuNzQyNSA2MC4zMTM2TDczLjc1MDcgNjAuMzA5Nkw3NC44NDM5IDYwLjMwOTdaXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTE2LjczNSA2MS44NjcySDExNy41MDRDMTI3Ljc2MiA2MS44NjcyIDEzNS42MTIgNzEuMDAwNSAxMzQuMDcxIDgxLjE0MThWODEuMTQxOEMxMzIuODI3IDg5LjMzMDYgMTI1Ljc4NyA5NS4zODE5IDExNy41MDQgOTUuMzgxOUgxMTEuNjQzXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNjYuMDczNCAxOUw2Ny45NDA0IDIxLjExNTlDNzAuOTk1MiAyNC41NzggNzAuMDkwNCAyOS45NzM3IDY2LjA3MzQgMzIuMjVWMzIuMjVDNjIuMDU2NCAzNC41MjYzIDYxLjE1MTcgMzkuOTIyIDY0LjIwNjUgNDMuMzg0MUw2Ni4wNzM0IDQ1LjVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTc2Ljk4NTUgMzYuOTI2OEw3OC44NTI1IDM5LjA0MjZDODEuOTA3MyA0Mi41MDQ3IDgxLjAwMjUgNDcuOTAwNSA3Ni45ODU1IDUwLjE3NjhWNTAuMTc2OEM3Mi45Njg1IDUyLjQ1MzEgNzIuMDYzOCA1Ny44NDg4IDc1LjExODYgNjEuMzEwOUw3Ni45ODU1IDYzLjQyNjhcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSkpO1xuZXhwb3J0IGRlZmF1bHQgQ3VwOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgY29uc3QgRGV0YWlscyA9ICh7XG4gIHdpZHRoID0gMTUyLFxuICBoZWlnaHQgPSAxNTJcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgd2lkdGg6IHdpZHRoLFxuICBoZWlnaHQ6IGhlaWdodCxcbiAgdmlld0JveDogXCIwIDAgMTUyIDE1MlwiLFxuICBmaWxsOiBcIm5vbmVcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCI3NlwiLFxuICBjeTogXCI3NlwiLFxuICByOiBcIjc2XCIsXG4gIGZpbGw6IFwid2hpdGVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTMyLjc1IDExMy4xNTZWMzguMjYzNEw0MC41MTE4IDQyLjQ5NzFMNDAuODcxIDQyLjY5M0w0MS4yMzAxIDQyLjQ5NzFMNDkuNzQxOSAzNy44NTQzTDU4LjI1MzggNDIuNDk3MUw1OC42MTI5IDQyLjY5M0w1OC45NzIgNDIuNDk3MUw2Ny40ODM5IDM3Ljg1NDNMNzUuOTk1NyA0Mi40OTcxTDc2LjM1NDggNDIuNjkzTDc2LjcxNCA0Mi40OTcxTDg0LjQ3NTggMzguMjYzNFYxMTMuMTU2TDc2LjcxNCAxMDguOTIyTDc2LjM1NDggMTA4LjcyNkw3NS45OTU3IDEwOC45MjJMNjcuNDgzOSAxMTMuNTY1TDU4Ljk3MiAxMDguOTIyTDU4LjYxMjkgMTA4LjcyNkw1OC4yNTM4IDEwOC45MjJMNDkuNzQxOSAxMTMuNTY1TDQxLjIzMDEgMTA4LjkyMkw0MC44NzEgMTA4LjcyNkw0MC41MTE4IDEwOC45MjJMMzIuNzUgMTEzLjE1NlpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTQ0LjkwMzMgNjUuNjAyOUg2Ni43ODg1XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk00NC45MDMzIDc1LjU2ODdINjYuNzg4NVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNDQuOTAzMyA4NS41MzU1SDY2Ljc4ODVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEwNi45NTUgNTQuNzg2N0MxMTcuODQzIDY1LjY3NDEgMTE3Ljg0MyA4My4zMjYxIDEwNi45NTUgOTQuMjEzNkM5Ni4wNjc4IDEwNS4xMDEgNzguNDE1OCAxMDUuMTAxIDY3LjUyODQgOTQuMjEzNkM1Ni42NDA5IDgzLjMyNjEgNTYuNjQwOSA2NS42NzQxIDY3LjUyODQgNTQuNzg2N0M3OC40MTU4IDQzLjg5OTIgOTYuMDY3OCA0My44OTkyIDEwNi45NTUgNTQuNzg2N1pcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEyMi41OTEgNzMuMDI0MkwxMjIuNjIyIDczLjc3MzZMMTIzLjM3MSA3My43NDI1TDEyMy4zNCA3Mi45OTMxTDEyMi41OTEgNzMuMDI0MlpNMTIwLjMxNCA2MS45MDg2TDEyMS4wMTUgNjEuNjQyMkwxMjAuNzQ5IDYwLjk0MTFMMTIwLjA0OCA2MS4yMDc2TDEyMC4zMTQgNjEuOTA4NlpNMTIxLjA5MiA3My4wODY0TDEyMC4zNDIgNzMuMTE3NUwxMjAuMzc0IDczLjg2NjhMMTIxLjEyMyA3My44MzU3TDEyMS4wOTIgNzMuMDg2NFpNMTE4LjkxMiA2Mi40NDE2TDExOC42NDUgNjEuNzQwNUwxMTcuOTQ0IDYyLjAwNjlMMTE4LjIxMSA2Mi43MDhMMTE4LjkxMiA2Mi40NDE2Wk0xMTIuMjU5IDQ5LjQ4MjlMMTExLjcyOSA1MC4wMTMzTDExMi4yNTkgNDkuNDgyOVpNOTguNjIzNSA0MC45OTMyTDk4Ljg2NDIgNDAuMjgyOEw5OC4xNTM4IDQwLjA0MjFMOTcuOTEzMiA0MC43NTI1TDk4LjYyMzUgNDAuOTkzMlpNMTE2Ljc5OCA1NS4wNDIyTDExNy4yMTEgNTUuNjY4MkwxMTcuODM3IDU1LjI1NTJMMTE3LjQyNCA1NC42MjkyTDExNi43OTggNTUuMDQyMlpNMTE1LjU0NiA1NS44NjgzTDExNC45MiA1Ni4yODEzTDExNS4zMzMgNTYuOTA3M0wxMTUuOTU5IDU2LjQ5NDNMMTE1LjU0NiA1NS44NjgzWk0xMTEuMTk4IDUwLjU0MzZMMTExLjcyOSA1MC4wMTMzVjUwLjAxMzNMMTExLjE5OCA1MC41NDM2Wk05OC4xNDIxIDQyLjQxMzhMOTcuNDMxOCA0Mi4xNzMxTDk3LjE5MTEgNDIuODgzNUw5Ny45MDE0IDQzLjEyNDFMOTguMTQyMSA0Mi40MTM4Wk0xMjMuMzQgNzIuOTkzMUMxMjMuMTggNjkuMTM2NSAxMjIuNDA1IDY1LjI5OTcgMTIxLjAxNSA2MS42NDIyTDExOS42MTMgNjIuMTc1MUMxMjAuOTQ1IDY1LjY4IDEyMS42ODggNjkuMzU3NyAxMjEuODQxIDczLjA1NTNMMTIzLjM0IDcyLjk5MzFaTTEyMS4xMjMgNzMuODM1N0wxMjIuNjIyIDczLjc3MzZMMTIyLjU1OSA3Mi4yNzQ4TDEyMS4wNjEgNzIuMzM3TDEyMS4xMjMgNzMuODM1N1pNMTE4LjIxMSA2Mi43MDhDMTE5LjQ4NSA2Ni4wNjAzIDEyMC4xOTYgNjkuNTc4OSAxMjAuMzQyIDczLjExNzVMMTIxLjg0MSA3My4wNTUzQzEyMS42ODggNjkuMzU3NyAxMjAuOTQ1IDY1LjY4IDExOS42MTMgNjIuMTc1MUwxMTguMjExIDYyLjcwOFpNMTIwLjA0OCA2MS4yMDc2TDExOC42NDUgNjEuNzQwNUwxMTkuMTc4IDYzLjE0MjZMMTIwLjU4IDYyLjYwOTdMMTIwLjA0OCA2MS4yMDc2Wk0xMTIuNzg5IDQ4Ljk1MjZDMTA4LjczNSA0NC44OTg4IDEwMy45NTQgNDIuMDA3NiA5OC44NjQyIDQwLjI4MjhMOTguMzgyOCA0MS43MDM1QzEwMy4yNiA0My4zNTYgMTA3Ljg0MSA0Ni4xMjU5IDExMS43MjkgNTAuMDEzM0wxMTIuNzg5IDQ4Ljk1MjZaTTExNy40MjQgNTQuNjI5MkMxMTYuMSA1Mi42MjE1IDExNC41NTQgNTAuNzE3OCAxMTIuNzg5IDQ4Ljk1MjZMMTExLjcyOSA1MC4wMTMzQzExMy40MjIgNTEuNzA2NSAxMTQuOTAzIDUzLjUzMTUgMTE2LjE3MiA1NS40NTUyTDExNy40MjQgNTQuNjI5MlpNMTE1Ljk1OSA1Ni40OTQzTDExNy4yMTEgNTUuNjY4MkwxMTYuMzg1IDU0LjQxNjJMMTE1LjEzMyA1NS4yNDIzTDExNS45NTkgNTYuNDk0M1pNMTEwLjY2OCA1MS4wNzM5QzExMi4yODkgNTIuNjk1MiAxMTMuNzA2IDU0LjQ0MTYgMTE0LjkyIDU2LjI4MTNMMTE2LjE3MiA1NS40NTUyQzExNC45MDMgNTMuNTMxNSAxMTMuNDIyIDUxLjcwNjUgMTExLjcyOSA1MC4wMTMzTDExMC42NjggNTEuMDczOVpNOTcuOTAxNCA0My4xMjQxQzEwMi41NjUgNDQuNzA0NCAxMDYuOTQ3IDQ3LjM1MyAxMTAuNjY4IDUxLjA3MzlMMTExLjcyOSA1MC4wMTMzQzEwNy44NDEgNDYuMTI1OSAxMDMuMjYgNDMuMzU2IDk4LjM4MjggNDEuNzAzNUw5Ny45MDE0IDQzLjEyNDFaTTk3LjkxMzIgNDAuNzUyNUw5Ny40MzE4IDQyLjE3MzFMOTguODUyNCA0Mi42NTQ1TDk5LjMzMzggNDEuMjMzOUw5Ny45MTMyIDQwLjc1MjVaXCIsXG4gIGZpbGw6IFwiIzNCMzU1MlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTEwLjExIDEwMS4zNTlMMTE0LjEwMiA5Ny4zNjc3QzExNS4wNjkgOTYuNDAwOSAxMTYuNjM2IDk2LjQwMDkgMTE3LjYwMyA5Ny4zNjc3TDEzMC4xNDggMTA5LjkxM0MxMzEuMTE1IDExMC44OCAxMzEuMTE1IDExMi40NDggMTMwLjE0OCAxMTMuNDE0TDEyNi4xNTcgMTE3LjQwNkMxMjUuMTkgMTE4LjM3MyAxMjMuNjIyIDExOC4zNzMgMTIyLjY1NSAxMTcuNDA2TDExMC4xMSAxMDQuODYxQzEwOS4xNDMgMTAzLjg5NCAxMDkuMTQzIDEwMi4zMjYgMTEwLjExIDEwMS4zNTlaXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMDcuMjI3IDk0LjQ4NDRMMTExLjkxOSA5OS4xNzdcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiODcuMjQyMVwiLFxuICBjeTogXCI3NC40OTk5XCIsXG4gIHI6IFwiMjAuNjIxXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gIGN4OiBcIjg3LjI0MThcIixcbiAgY3k6IFwiNzQuNDk5NlwiLFxuICByOiBcIjE4LjE0NTJcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMDVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiOTMuMjkwNFwiLFxuICBjeTogXCI4MC41NDg3XCIsXG4gIHI6IFwiNC44Mzg3MVwiLFxuICBmaWxsOiBcIiMzMDQwRDZcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTg3LjI0MTggNjAuMzg2N0M3OS40NDc1IDYwLjM4NjcgNzMuMTI4OSA2Ni43MDUzIDczLjEyODkgNzQuNDk5NlwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTExNC40MTEgOTkuODkzNkMxMTQuODAxIDk5LjUwMzEgMTE1LjQzNCA5OS41MDMxIDExNS44MjUgOTkuODkzNkwxMjcuNTI2IDExMS41OTVDMTI3LjkxNyAxMTEuOTg2IDEyNy45MTcgMTEyLjYxOSAxMjcuNTI2IDExMy4wMDlMMTI0Ljk0OSAxMTUuNTg3QzEyNC41NTggMTE1Ljk3NyAxMjMuOTI1IDExNS45NzcgMTIzLjUzNSAxMTUuNTg3TDExMS44MzMgMTAzLjg4NUMxMTEuNDQzIDEwMy40OTUgMTExLjQ0MyAxMDIuODYyIDExMS44MzMgMTAyLjQ3MUwxMTQuNDExIDk5Ljg5MzZaXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBmaWxsT3BhY2l0eTogXCIwLjA1XCJcbn0pKTtcbmV4cG9ydCBkZWZhdWx0IERldGFpbHM7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBjb25zdCBEb2NzID0gKHtcbiAgd2lkdGggPSAxNTIsXG4gIGhlaWdodCA9IDE1MlxufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB3aWR0aDogd2lkdGgsXG4gIGhlaWdodDogaGVpZ2h0LFxuICB2aWV3Qm94OiBcIjAgMCAxNTIgMTUyXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gIGN4OiBcIjc2XCIsXG4gIGN5OiBcIjc2XCIsXG4gIHI6IFwiNzZcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjcuNDk3IDUyLjkxNDdDMjcuMDMyNSA1MS4xODA5IDI4LjA2MTQgNDkuMzk4OCAyOS43OTUxIDQ4LjkzNDNMODQuNDM2NCAzNC4yOTMyQzg2LjE3MDIgMzMuODI4NiA4Ny45NTIzIDM0Ljg1NzUgODguNDE2OCAzNi41OTEzTDEwNy42NiAxMDguNDA3QzEwOC4xMjQgMTEwLjE0IDEwNy4wOTUgMTExLjkyMiAxMDUuMzYyIDExMi4zODdMNTAuNzIwMyAxMjcuMDI4QzQ4Ljk4NjUgMTI3LjQ5MyA0Ny4yMDQ0IDEyNi40NjQgNDYuNzM5OSAxMjQuNzNMMjcuNDk3IDUyLjkxNDdaXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgZDogXCJNMzAuOTM0MiA1My45ODM3QzMwLjY0ODQgNTIuOTE2OCAzMS4yODE1IDUxLjgyMDEgMzIuMzQ4NSA1MS41MzQyTDg0LjUyNjIgMzcuNTUzMkM4NS41OTMxIDM3LjI2NzQgODYuNjg5OCAzNy45MDA1IDg2Ljk3NTcgMzguOTY3NUwxMDUuMDkyIDEwNi41NzdDMTA1LjM3NyAxMDcuNjQ0IDEwNC43NDQgMTA4Ljc0IDEwMy42NzcgMTA5LjAyNkw1MS40OTk2IDEyMy4wMDdDNTAuNDMyNyAxMjMuMjkzIDQ5LjMzNiAxMjIuNjYgNDkuMDUwMSAxMjEuNTkzTDMwLjkzNDIgNTMuOTgzN1pcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMDVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiMTEyLjAyOFwiLFxuICBjeTogXCI2OC40OTQ5XCIsXG4gIHI6IFwiMTQuOTcyNVwiLFxuICBmaWxsOiBcIiMzMDQwRDZcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibWFza1wiLCB7XG4gIGlkOiBcInBhdGgtNS1pbnNpZGUtMV8wXzIzOTNcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgZDogXCJNOTguNjg2MiAzMkg1NC4yNjY2QzUyLjA1NzUgMzIgNTAuMjY2NiAzMy43OTA5IDUwLjI2NjYgMzZWMTEwLjM0OUM1MC4yNjY2IDExMi41NTggNTIuMDU3NSAxMTQuMzQ5IDU0LjI2NjYgMTE0LjM0OUgxMTAuODM1QzExMy4wNDUgMTE0LjM0OSAxMTQuODM1IDExMi41NTggMTE0LjgzNSAxMTAuMzQ5VjQ4LjIyMTNMOTkuMTAzMSAzMi40ODlDOTguOTQ4OSAzMi4zMzQ4IDk4LjgxIDMyLjE3MTIgOTguNjg2MiAzMlpcIlxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgZDogXCJNOTguNjg2MiAzMkg1NC4yNjY2QzUyLjA1NzUgMzIgNTAuMjY2NiAzMy43OTA5IDUwLjI2NjYgMzZWMTEwLjM0OUM1MC4yNjY2IDExMi41NTggNTIuMDU3NSAxMTQuMzQ5IDU0LjI2NjYgMTE0LjM0OUgxMTAuODM1QzExMy4wNDUgMTE0LjM0OSAxMTQuODM1IDExMi41NTggMTE0LjgzNSAxMTAuMzQ5VjQ4LjIyMTNMOTkuMTAzMSAzMi40ODlDOTguOTQ4OSAzMi4zMzQ4IDk4LjgxIDMyLjE3MTIgOTguNjg2MiAzMlpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNOTguNjg2MiAzMkw5OS45MDIgMzEuMTIxNEw5OS40NTI5IDMwLjVIOTguNjg2MlYzMlpNMTE0LjgzNSA0OC4yMjEzSDExNi4zMzVWNDcuNkwxMTUuODk2IDQ3LjE2MDZMMTE0LjgzNSA0OC4yMjEzWk05OS4xMDMxIDMyLjQ4OUw5OC4wNDI0IDMzLjU0OTZMOTguMDQyNCAzMy41NDk2TDk5LjEwMzEgMzIuNDg5Wk01NC4yNjY2IDMzLjVIOTguNjg2MlYzMC41SDU0LjI2NjZWMzMuNVpNNTEuNzY2NiAzNkM1MS43NjY2IDM0LjYxOTMgNTIuODg1OSAzMy41IDU0LjI2NjYgMzMuNVYzMC41QzUxLjIyOSAzMC41IDQ4Ljc2NjYgMzIuOTYyNCA0OC43NjY2IDM2SDUxLjc2NjZaTTUxLjc2NjYgMTEwLjM0OVYzNkg0OC43NjY2VjExMC4zNDlINTEuNzY2NlpNNTQuMjY2NiAxMTIuODQ5QzUyLjg4NTkgMTEyLjg0OSA1MS43NjY2IDExMS43MjkgNTEuNzY2NiAxMTAuMzQ5SDQ4Ljc2NjZDNDguNzY2NiAxMTMuMzg2IDUxLjIyOSAxMTUuODQ5IDU0LjI2NjYgMTE1Ljg0OVYxMTIuODQ5Wk0xMTAuODM1IDExMi44NDlINTQuMjY2NlYxMTUuODQ5SDExMC44MzVWMTEyLjg0OVpNMTEzLjMzNSAxMTAuMzQ5QzExMy4zMzUgMTExLjcyOSAxMTIuMjE2IDExMi44NDkgMTEwLjgzNSAxMTIuODQ5VjExNS44NDlDMTEzLjg3MyAxMTUuODQ5IDExNi4zMzUgMTEzLjM4NiAxMTYuMzM1IDExMC4zNDlIMTEzLjMzNVpNMTEzLjMzNSA0OC4yMjEzVjExMC4zNDlIMTE2LjMzNVY0OC4yMjEzSDExMy4zMzVaTTExNS44OTYgNDcuMTYwNkwxMDAuMTY0IDMxLjQyODNMOTguMDQyNCAzMy41NDk2TDExMy43NzUgNDkuMjgyTDExNS44OTYgNDcuMTYwNlpNMTAwLjE2NCAzMS40MjgzQzEwMC4wNjYgMzEuMzMwOCA5OS45NzkxIDMxLjIyODEgOTkuOTAyIDMxLjEyMTRMOTcuNDcwNSAzMi44Nzg2Qzk3LjY0MDkgMzMuMTE0MyA5Ny44MzE2IDMzLjMzODggOTguMDQyNCAzMy41NDk2TDEwMC4xNjQgMzEuNDI4M1pcIixcbiAgZmlsbDogXCIjM0IzNTUyXCIsXG4gIG1hc2s6IFwidXJsKCNwYXRoLTUtaW5zaWRlLTFfMF8yMzkzKVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNDYuNzUgMzZWMzYuNzVINDcuNVYzNkg0Ni43NVpNNDUuMjUgMzZINDQuNVYzNi43NUg0NS4yNVYzNlpNNjcuMDM4OCAyNy4yNUg2Ny43ODg4VjI2LjVINjcuMDM4OFYyNy4yNVpNNjcuMDM4OCAyOC43NVYyOS41SDY3Ljc4ODhWMjguNzVINjcuMDM4OFpNNzEuMjc0OSAyOC43NUg3MC41MjQ5VjI5LjVINzEuMjc0OVYyOC43NVpNNzEuMjc0OSAyNy4yNVYyNi41SDcwLjUyNDlWMjcuMjVINzEuMjc0OVpNNzcuOTgzOSAyNy4yNUg3OC43MzM5VjI2LjVINzcuOTgzOVYyNy4yNVpNNzcuOTgzOSAyOC43NVYyOS41SDc4LjczMzlWMjguNzVINzcuOTgzOVpNNDcuNSAzNkM0Ny41IDMyLjQxMDEgNTAuNDEwMSAyOS41IDU0IDI5LjVWMjhDNDkuNTgxNyAyOCA0NiAzMS41ODE3IDQ2IDM2SDQ3LjVaTTQ1LjI1IDM2Ljc1SDQ2Ljc1VjM1LjI1SDQ1LjI1VjM2Ljc1Wk01NCAyNi41QzQ4Ljc1MzMgMjYuNSA0NC41IDMwLjc1MzMgNDQuNSAzNkg0NkM0NiAzMS41ODE3IDQ5LjU4MTcgMjggNTQgMjhWMjYuNVpNNTQuMDMzOSAyNi41SDU0VjI4SDU0LjAzMzlWMjYuNVpNNTQuMDY3OCAyNi41SDU0LjAzMzlWMjhINTQuMDY3OFYyNi41Wk01NC4xMDE3IDI2LjVINTQuMDY3OFYyOEg1NC4xMDE3VjI2LjVaTTU0LjEzNTYgMjYuNUg1NC4xMDE3VjI4SDU0LjEzNTZWMjYuNVpNNTQuMTY5NCAyNi41SDU0LjEzNTZWMjhINTQuMTY5NFYyNi41Wk01NC4yMDMxIDI2LjVINTQuMTY5NFYyOEg1NC4yMDMxVjI2LjVaTTU0LjIzNjkgMjYuNUg1NC4yMDMxVjI4SDU0LjIzNjlWMjYuNVpNNTQuMjcwNiAyNi41SDU0LjIzNjlWMjhINTQuMjcwNlYyNi41Wk01NC4zMDQzIDI2LjVINTQuMjcwNlYyOEg1NC4zMDQzVjI2LjVaTTU0LjMzNzkgMjYuNUg1NC4zMDQzVjI4SDU0LjMzNzlWMjYuNVpNNTQuMzcxNSAyNi41SDU0LjMzNzlWMjhINTQuMzcxNVYyNi41Wk01NC40MDUxIDI2LjVINTQuMzcxNVYyOEg1NC40MDUxVjI2LjVaTTU0LjQzODYgMjYuNUg1NC40MDUxVjI4SDU0LjQzODZWMjYuNVpNNTQuNDcyMSAyNi41SDU0LjQzODZWMjhINTQuNDcyMVYyNi41Wk01NC41MDU2IDI2LjVINTQuNDcyMVYyOEg1NC41MDU2VjI2LjVaTTU0LjUzOSAyNi41SDU0LjUwNTZWMjhINTQuNTM5VjI2LjVaTTU0LjU3MjQgMjYuNUg1NC41MzlWMjhINTQuNTcyNFYyNi41Wk01NC42MDU4IDI2LjVINTQuNTcyNFYyOEg1NC42MDU4VjI2LjVaTTU0LjYzOTIgMjYuNUg1NC42MDU4VjI4SDU0LjYzOTJWMjYuNVpNNTQuNjcyNSAyNi41SDU0LjYzOTJWMjhINTQuNjcyNVYyNi41Wk01NC43MDU3IDI2LjVINTQuNjcyNVYyOEg1NC43MDU3VjI2LjVaTTU0LjczOSAyNi41SDU0LjcwNTdWMjhINTQuNzM5VjI2LjVaTTU0Ljc3MjIgMjYuNUg1NC43MzlWMjhINTQuNzcyMlYyNi41Wk01NC44MDU0IDI2LjVINTQuNzcyMlYyOEg1NC44MDU0VjI2LjVaTTU0LjgzODUgMjYuNUg1NC44MDU0VjI4SDU0LjgzODVWMjYuNVpNNTQuODcxNiAyNi41SDU0LjgzODVWMjhINTQuODcxNlYyNi41Wk01NC45MDQ3IDI2LjVINTQuODcxNlYyOEg1NC45MDQ3VjI2LjVaTTU0LjkzNzcgMjYuNUg1NC45MDQ3VjI4SDU0LjkzNzdWMjYuNVpNNTQuOTcwOCAyNi41SDU0LjkzNzdWMjhINTQuOTcwOFYyNi41Wk01NS4wMDM3IDI2LjVINTQuOTcwOFYyOEg1NS4wMDM3VjI2LjVaTTU1LjAzNjcgMjYuNUg1NS4wMDM3VjI4SDU1LjAzNjdWMjYuNVpNNTUuMDY5NiAyNi41SDU1LjAzNjdWMjhINTUuMDY5NlYyNi41Wk01NS4xMDI1IDI2LjVINTUuMDY5NlYyOEg1NS4xMDI1VjI2LjVaTTU1LjEzNTMgMjYuNUg1NS4xMDI1VjI4SDU1LjEzNTNWMjYuNVpNNTUuMTY4MSAyNi41SDU1LjEzNTNWMjhINTUuMTY4MVYyNi41Wk01NS4yMDA5IDI2LjVINTUuMTY4MVYyOEg1NS4yMDA5VjI2LjVaTTU1LjIzMzYgMjYuNUg1NS4yMDA5VjI4SDU1LjIzMzZWMjYuNVpNNTUuMjY2NCAyNi41SDU1LjIzMzZWMjhINTUuMjY2NFYyNi41Wk01NS4yOTkgMjYuNUg1NS4yNjY0VjI4SDU1LjI5OVYyNi41Wk01NS4zMzE3IDI2LjVINTUuMjk5VjI4SDU1LjMzMTdWMjYuNVpNNTUuMzY0MyAyNi41SDU1LjMzMTdWMjhINTUuMzY0M1YyNi41Wk01NS4zOTY5IDI2LjVINTUuMzY0M1YyOEg1NS4zOTY5VjI2LjVaTTU1LjQyOTQgMjYuNUg1NS4zOTY5VjI4SDU1LjQyOTRWMjYuNVpNNTUuNDYxOSAyNi41SDU1LjQyOTRWMjhINTUuNDYxOVYyNi41Wk01NS40OTQ0IDI2LjVINTUuNDYxOVYyOEg1NS40OTQ0VjI2LjVaTTU1LjUyNjkgMjYuNUg1NS40OTQ0VjI4SDU1LjUyNjlWMjYuNVpNNTUuNTU5MyAyNi41SDU1LjUyNjlWMjhINTUuNTU5M1YyNi41Wk01NS41OTE3IDI2LjVINTUuNTU5M1YyOEg1NS41OTE3VjI2LjVaTTU1LjYyNCAyNi41SDU1LjU5MTdWMjhINTUuNjI0VjI2LjVaTTU1LjY1NjMgMjYuNUg1NS42MjRWMjhINTUuNjU2M1YyNi41Wk01NS42ODg2IDI2LjVINTUuNjU2M1YyOEg1NS42ODg2VjI2LjVaTTU1LjcyMDggMjYuNUg1NS42ODg2VjI4SDU1LjcyMDhWMjYuNVpNNTUuNzUzMSAyNi41SDU1LjcyMDhWMjhINTUuNzUzMVYyNi41Wk01NS43ODUyIDI2LjVINTUuNzUzMVYyOEg1NS43ODUyVjI2LjVaTTU1LjgxNzQgMjYuNUg1NS43ODUyVjI4SDU1LjgxNzRWMjYuNVpNNTUuODQ5NSAyNi41SDU1LjgxNzRWMjhINTUuODQ5NVYyNi41Wk01NS44ODE2IDI2LjVINTUuODQ5NVYyOEg1NS44ODE2VjI2LjVaTTU1LjkxMzYgMjYuNUg1NS44ODE2VjI4SDU1LjkxMzZWMjYuNVpNNTUuOTQ1NiAyNi41SDU1LjkxMzZWMjhINTUuOTQ1NlYyNi41Wk01NS45Nzc2IDI2LjVINTUuOTQ1NlYyOEg1NS45Nzc2VjI2LjVaTTU2LjAwOTYgMjYuNUg1NS45Nzc2VjI4SDU2LjAwOTZWMjYuNVpNNTYuMDQxNSAyNi41SDU2LjAwOTZWMjhINTYuMDQxNVYyNi41Wk01Ni4wNzM0IDI2LjVINTYuMDQxNVYyOEg1Ni4wNzM0VjI2LjVaTTU2LjEwNTIgMjYuNUg1Ni4wNzM0VjI4SDU2LjEwNTJWMjYuNVpNNTYuMTM3IDI2LjVINTYuMTA1MlYyOEg1Ni4xMzdWMjYuNVpNNTYuMTY4OCAyNi41SDU2LjEzN1YyOEg1Ni4xNjg4VjI2LjVaTTU2LjIwMDYgMjYuNUg1Ni4xNjg4VjI4SDU2LjIwMDZWMjYuNVpNNTYuMjMyMyAyNi41SDU2LjIwMDZWMjhINTYuMjMyM1YyNi41Wk01Ni4yNjQgMjYuNUg1Ni4yMzIzVjI4SDU2LjI2NFYyNi41Wk01Ni4yOTU2IDI2LjVINTYuMjY0VjI4SDU2LjI5NTZWMjYuNVpNNTYuMzI3MiAyNi41SDU2LjI5NTZWMjhINTYuMzI3MlYyNi41Wk01Ni4zNTg4IDI2LjVINTYuMzI3MlYyOEg1Ni4zNTg4VjI2LjVaTTU2LjM5MDQgMjYuNUg1Ni4zNTg4VjI4SDU2LjM5MDRWMjYuNVpNNTYuNDIxOSAyNi41SDU2LjM5MDRWMjhINTYuNDIxOVYyNi41Wk01Ni40NTM0IDI2LjVINTYuNDIxOVYyOEg1Ni40NTM0VjI2LjVaTTU2LjQ4NDggMjYuNUg1Ni40NTM0VjI4SDU2LjQ4NDhWMjYuNVpNNTYuNTE2MyAyNi41SDU2LjQ4NDhWMjhINTYuNTE2M1YyNi41Wk01Ni41NDc2IDI2LjVINTYuNTE2M1YyOEg1Ni41NDc2VjI2LjVaTTU2LjU3OSAyNi41SDU2LjU0NzZWMjhINTYuNTc5VjI2LjVaTTU2LjYxMDMgMjYuNUg1Ni41NzlWMjhINTYuNjEwM1YyNi41Wk01Ni42NDE2IDI2LjVINTYuNjEwM1YyOEg1Ni42NDE2VjI2LjVaTTU2LjY3MjggMjYuNUg1Ni42NDE2VjI4SDU2LjY3MjhWMjYuNVpNNTYuNzA0MSAyNi41SDU2LjY3MjhWMjhINTYuNzA0MVYyNi41Wk01Ni43MzUzIDI2LjVINTYuNzA0MVYyOEg1Ni43MzUzVjI2LjVaTTU2Ljc2NjQgMjYuNUg1Ni43MzUzVjI4SDU2Ljc2NjRWMjYuNVpNNTYuNzk3NSAyNi41SDU2Ljc2NjRWMjhINTYuNzk3NVYyNi41Wk01Ni44Mjg2IDI2LjVINTYuNzk3NVYyOEg1Ni44Mjg2VjI2LjVaTTU2Ljg1OTcgMjYuNUg1Ni44Mjg2VjI4SDU2Ljg1OTdWMjYuNVpNNTYuODkwNyAyNi41SDU2Ljg1OTdWMjhINTYuODkwN1YyNi41Wk01Ni45MjE3IDI2LjVINTYuODkwN1YyOEg1Ni45MjE3VjI2LjVaTTU2Ljk1MjYgMjYuNUg1Ni45MjE3VjI4SDU2Ljk1MjZWMjYuNVpNNTYuOTgzNiAyNi41SDU2Ljk1MjZWMjhINTYuOTgzNlYyNi41Wk01Ny4wMTQ0IDI2LjVINTYuOTgzNlYyOEg1Ny4wMTQ0VjI2LjVaTTU3LjA0NTMgMjYuNUg1Ny4wMTQ0VjI4SDU3LjA0NTNWMjYuNVpNNTcuMDc2MSAyNi41SDU3LjA0NTNWMjhINTcuMDc2MVYyNi41Wk01Ny4xMDY5IDI2LjVINTcuMDc2MVYyOEg1Ny4xMDY5VjI2LjVaTTU3LjEzNzcgMjYuNUg1Ny4xMDY5VjI4SDU3LjEzNzdWMjYuNVpNNTcuMTY4NCAyNi41SDU3LjEzNzdWMjhINTcuMTY4NFYyNi41Wk01Ny4xOTkxIDI2LjVINTcuMTY4NFYyOEg1Ny4xOTkxVjI2LjVaTTU3LjIyOTcgMjYuNUg1Ny4xOTkxVjI4SDU3LjIyOTdWMjYuNVpNNTcuMjYwMyAyNi41SDU3LjIyOTdWMjhINTcuMjYwM1YyNi41Wk01Ny4yOTA5IDI2LjVINTcuMjYwM1YyOEg1Ny4yOTA5VjI2LjVaTTU3LjMyMTUgMjYuNUg1Ny4yOTA5VjI4SDU3LjMyMTVWMjYuNVpNNTcuMzUyIDI2LjVINTcuMzIxNVYyOEg1Ny4zNTJWMjYuNVpNNTcuMzgyNSAyNi41SDU3LjM1MlYyOEg1Ny4zODI1VjI2LjVaTTU3LjQxMyAyNi41SDU3LjM4MjVWMjhINTcuNDEzVjI2LjVaTTU3LjQ0MzQgMjYuNUg1Ny40MTNWMjhINTcuNDQzNFYyNi41Wk01Ny40NzM4IDI2LjVINTcuNDQzNFYyOEg1Ny40NzM4VjI2LjVaTTU3LjUwNDEgMjYuNUg1Ny40NzM4VjI4SDU3LjUwNDFWMjYuNVpNNTcuNTM0NSAyNi41SDU3LjUwNDFWMjhINTcuNTM0NVYyNi41Wk01Ny41NjQ4IDI2LjVINTcuNTM0NVYyOEg1Ny41NjQ4VjI2LjVaTTU3LjU5NSAyNi41SDU3LjU2NDhWMjhINTcuNTk1VjI2LjVaTTU3LjYyNTIgMjYuNUg1Ny41OTVWMjhINTcuNjI1MlYyNi41Wk01Ny42NTU0IDI2LjVINTcuNjI1MlYyOEg1Ny42NTU0VjI2LjVaTTU3LjY4NTYgMjYuNUg1Ny42NTU0VjI4SDU3LjY4NTZWMjYuNVpNNTcuNzE1NyAyNi41SDU3LjY4NTZWMjhINTcuNzE1N1YyNi41Wk01Ny43NDU4IDI2LjVINTcuNzE1N1YyOEg1Ny43NDU4VjI2LjVaTTU3Ljc3NTkgMjYuNUg1Ny43NDU4VjI4SDU3Ljc3NTlWMjYuNVpNNTcuODA1OSAyNi41SDU3Ljc3NTlWMjhINTcuODA1OVYyNi41Wk01Ny44MzU5IDI2LjVINTcuODA1OVYyOEg1Ny44MzU5VjI2LjVaTTU3Ljg2NTggMjYuNUg1Ny44MzU5VjI4SDU3Ljg2NThWMjYuNVpNNTcuODk1OCAyNi41SDU3Ljg2NThWMjhINTcuODk1OFYyNi41Wk01Ny45MjU3IDI2LjVINTcuODk1OFYyOEg1Ny45MjU3VjI2LjVaTTU3Ljk1NTUgMjYuNUg1Ny45MjU3VjI4SDU3Ljk1NTVWMjYuNVpNNTcuOTg1MyAyNi41SDU3Ljk1NTVWMjhINTcuOTg1M1YyNi41Wk01OC4wMTUxIDI2LjVINTcuOTg1M1YyOEg1OC4wMTUxVjI2LjVaTTU4LjA0NDkgMjYuNUg1OC4wMTUxVjI4SDU4LjA0NDlWMjYuNVpNNTguMDc0NiAyNi41SDU4LjA0NDlWMjhINTguMDc0NlYyNi41Wk01OC4xMDQzIDI2LjVINTguMDc0NlYyOEg1OC4xMDQzVjI2LjVaTTU4LjEzNCAyNi41SDU4LjEwNDNWMjhINTguMTM0VjI2LjVaTTU4LjE2MzYgMjYuNUg1OC4xMzRWMjhINTguMTYzNlYyNi41Wk01OC4xOTMyIDI2LjVINTguMTYzNlYyOEg1OC4xOTMyVjI2LjVaTTU4LjIyMjggMjYuNUg1OC4xOTMyVjI4SDU4LjIyMjhWMjYuNVpNNTguMjUyMyAyNi41SDU4LjIyMjhWMjhINTguMjUyM1YyNi41Wk01OC4yODE4IDI2LjVINTguMjUyM1YyOEg1OC4yODE4VjI2LjVaTTU4LjMxMTMgMjYuNUg1OC4yODE4VjI4SDU4LjMxMTNWMjYuNVpNNTguMzQwNyAyNi41SDU4LjMxMTNWMjhINTguMzQwN1YyNi41Wk01OC4zNzAxIDI2LjVINTguMzQwN1YyOEg1OC4zNzAxVjI2LjVaTTU4LjM5OTQgMjYuNUg1OC4zNzAxVjI4SDU4LjM5OTRWMjYuNVpNNTguNDI4OCAyNi41SDU4LjM5OTRWMjhINTguNDI4OFYyNi41Wk01OC40NTgxIDI2LjVINTguNDI4OFYyOEg1OC40NTgxVjI2LjVaTTU4LjQ4NzMgMjYuNUg1OC40NTgxVjI4SDU4LjQ4NzNWMjYuNVpNNTguNTE2NiAyNi41SDU4LjQ4NzNWMjhINTguNTE2NlYyNi41Wk01OC41NDU4IDI2LjVINTguNTE2NlYyOEg1OC41NDU4VjI2LjVaTTU4LjU3NDkgMjYuNUg1OC41NDU4VjI4SDU4LjU3NDlWMjYuNVpNNTguNjA0MSAyNi41SDU4LjU3NDlWMjhINTguNjA0MVYyNi41Wk01OC42MzMxIDI2LjVINTguNjA0MVYyOEg1OC42MzMxVjI2LjVaTTU4LjY2MjIgMjYuNUg1OC42MzMxVjI4SDU4LjY2MjJWMjYuNVpNNTguNjkxMiAyNi41SDU4LjY2MjJWMjhINTguNjkxMlYyNi41Wk01OC43MjAyIDI2LjVINTguNjkxMlYyOEg1OC43MjAyVjI2LjVaTTU4Ljc0OTIgMjYuNUg1OC43MjAyVjI4SDU4Ljc0OTJWMjYuNVpNNTguNzc4MSAyNi41SDU4Ljc0OTJWMjhINTguNzc4MVYyNi41Wk01OC44MDcgMjYuNUg1OC43NzgxVjI4SDU4LjgwN1YyNi41Wk01OC44MzU5IDI2LjVINTguODA3VjI4SDU4LjgzNTlWMjYuNVpNNTguODY0NyAyNi41SDU4LjgzNTlWMjhINTguODY0N1YyNi41Wk01OC44OTM1IDI2LjVINTguODY0N1YyOEg1OC44OTM1VjI2LjVaTTU4LjkyMjMgMjYuNUg1OC44OTM1VjI4SDU4LjkyMjNWMjYuNVpNNTguOTUxIDI2LjVINTguOTIyM1YyOEg1OC45NTFWMjYuNVpNNTguOTc5NyAyNi41SDU4Ljk1MVYyOEg1OC45Nzk3VjI2LjVaTTU5LjAwODQgMjYuNUg1OC45Nzk3VjI4SDU5LjAwODRWMjYuNVpNNTkuMDM3IDI2LjVINTkuMDA4NFYyOEg1OS4wMzdWMjYuNVpNNTkuMDY1NiAyNi41SDU5LjAzN1YyOEg1OS4wNjU2VjI2LjVaTTU5LjA5NDIgMjYuNUg1OS4wNjU2VjI4SDU5LjA5NDJWMjYuNVpNNTkuMTIyNyAyNi41SDU5LjA5NDJWMjhINTkuMTIyN1YyNi41Wk01OS4xNTEyIDI2LjVINTkuMTIyN1YyOEg1OS4xNTEyVjI2LjVaTTU5LjE3OTcgMjYuNUg1OS4xNTEyVjI4SDU5LjE3OTdWMjYuNVpNNTkuMjA4MSAyNi41SDU5LjE3OTdWMjhINTkuMjA4MVYyNi41Wk01OS4yMzY1IDI2LjVINTkuMjA4MVYyOEg1OS4yMzY1VjI2LjVaTTU5LjI2NDkgMjYuNUg1OS4yMzY1VjI4SDU5LjI2NDlWMjYuNVpNNTkuMjkzMiAyNi41SDU5LjI2NDlWMjhINTkuMjkzMlYyNi41Wk01OS4zMjE1IDI2LjVINTkuMjkzMlYyOEg1OS4zMjE1VjI2LjVaTTU5LjM0OTggMjYuNUg1OS4zMjE1VjI4SDU5LjM0OThWMjYuNVpNNTkuMzc4IDI2LjVINTkuMzQ5OFYyOEg1OS4zNzhWMjYuNVpNNTkuNDA2MiAyNi41SDU5LjM3OFYyOEg1OS40MDYyVjI2LjVaTTU5LjQzNDQgMjYuNUg1OS40MDYyVjI4SDU5LjQzNDRWMjYuNVpNNTkuNDYyNSAyNi41SDU5LjQzNDRWMjhINTkuNDYyNVYyNi41Wk01OS40OTA3IDI2LjVINTkuNDYyNVYyOEg1OS40OTA3VjI2LjVaTTU5LjUxODcgMjYuNUg1OS40OTA3VjI4SDU5LjUxODdWMjYuNVpNNTkuNTQ2OCAyNi41SDU5LjUxODdWMjhINTkuNTQ2OFYyNi41Wk01OS41NzQ4IDI2LjVINTkuNTQ2OFYyOEg1OS41NzQ4VjI2LjVaTTU5LjYwMjcgMjYuNUg1OS41NzQ4VjI4SDU5LjYwMjdWMjYuNVpNNTkuNjMwNyAyNi41SDU5LjYwMjdWMjhINTkuNjMwN1YyNi41Wk01OS42NTg2IDI2LjVINTkuNjMwN1YyOEg1OS42NTg2VjI2LjVaTTU5LjY4NjQgMjYuNUg1OS42NTg2VjI4SDU5LjY4NjRWMjYuNVpNNTkuNzE0MyAyNi41SDU5LjY4NjRWMjhINTkuNzE0M1YyNi41Wk01OS43NDIxIDI2LjVINTkuNzE0M1YyOEg1OS43NDIxVjI2LjVaTTU5Ljc2OTkgMjYuNUg1OS43NDIxVjI4SDU5Ljc2OTlWMjYuNVpNNTkuNzk3NiAyNi41SDU5Ljc2OTlWMjhINTkuNzk3NlYyNi41Wk01OS44MjUzIDI2LjVINTkuNzk3NlYyOEg1OS44MjUzVjI2LjVaTTU5Ljg1MyAyNi41SDU5LjgyNTNWMjhINTkuODUzVjI2LjVaTTU5Ljg4MDYgMjYuNUg1OS44NTNWMjhINTkuODgwNlYyNi41Wk01OS45MDgyIDI2LjVINTkuODgwNlYyOEg1OS45MDgyVjI2LjVaTTU5LjkzNTggMjYuNUg1OS45MDgyVjI4SDU5LjkzNThWMjYuNVpNNTkuOTYzMyAyNi41SDU5LjkzNThWMjhINTkuOTYzM1YyNi41Wk01OS45OTA4IDI2LjVINTkuOTYzM1YyOEg1OS45OTA4VjI2LjVaTTYwLjAxODMgMjYuNUg1OS45OTA4VjI4SDYwLjAxODNWMjYuNVpNNjAuMDQ1NyAyNi41SDYwLjAxODNWMjhINjAuMDQ1N1YyNi41Wk02MC4wNzMxIDI2LjVINjAuMDQ1N1YyOEg2MC4wNzMxVjI2LjVaTTYwLjEwMDUgMjYuNUg2MC4wNzMxVjI4SDYwLjEwMDVWMjYuNVpNNjAuMTI3OSAyNi41SDYwLjEwMDVWMjhINjAuMTI3OVYyNi41Wk02MC4xNTUyIDI2LjVINjAuMTI3OVYyOEg2MC4xNTUyVjI2LjVaTTYwLjE4MjQgMjYuNUg2MC4xNTUyVjI4SDYwLjE4MjRWMjYuNVpNNjAuMjA5NyAyNi41SDYwLjE4MjRWMjhINjAuMjA5N1YyNi41Wk02MC4yMzY5IDI2LjVINjAuMjA5N1YyOEg2MC4yMzY5VjI2LjVaTTYwLjI2NDEgMjYuNUg2MC4yMzY5VjI4SDYwLjI2NDFWMjYuNVpNNjAuMjkxMiAyNi41SDYwLjI2NDFWMjhINjAuMjkxMlYyNi41Wk02MC4zMTgzIDI2LjVINjAuMjkxMlYyOEg2MC4zMTgzVjI2LjVaTTYwLjM0NTQgMjYuNUg2MC4zMTgzVjI4SDYwLjM0NTRWMjYuNVpNNjAuMzcyNCAyNi41SDYwLjM0NTRWMjhINjAuMzcyNFYyNi41Wk02MC4zOTk0IDI2LjVINjAuMzcyNFYyOEg2MC4zOTk0VjI2LjVaTTYwLjQyNjQgMjYuNUg2MC4zOTk0VjI4SDYwLjQyNjRWMjYuNVpNNjAuNDUzNCAyNi41SDYwLjQyNjRWMjhINjAuNDUzNFYyNi41Wk02MC40ODAzIDI2LjVINjAuNDUzNFYyOEg2MC40ODAzVjI2LjVaTTYwLjUwNzEgMjYuNUg2MC40ODAzVjI4SDYwLjUwNzFWMjYuNVpNNjAuNTM0IDI2LjVINjAuNTA3MVYyOEg2MC41MzRWMjYuNVpNNjAuNTYwOCAyNi41SDYwLjUzNFYyOEg2MC41NjA4VjI2LjVaTTYwLjU4NzYgMjYuNUg2MC41NjA4VjI4SDYwLjU4NzZWMjYuNVpNNjAuNjE0MyAyNi41SDYwLjU4NzZWMjhINjAuNjE0M1YyNi41Wk02MC42NDEgMjYuNUg2MC42MTQzVjI4SDYwLjY0MVYyNi41Wk02MC42Njc3IDI2LjVINjAuNjQxVjI4SDYwLjY2NzdWMjYuNVpNNjAuNjk0MyAyNi41SDYwLjY2NzdWMjhINjAuNjk0M1YyNi41Wk02MC43MjA5IDI2LjVINjAuNjk0M1YyOEg2MC43MjA5VjI2LjVaTTYwLjc0NzUgMjYuNUg2MC43MjA5VjI4SDYwLjc0NzVWMjYuNVpNNjAuNzc0MSAyNi41SDYwLjc0NzVWMjhINjAuNzc0MVYyNi41Wk02MC44MDA2IDI2LjVINjAuNzc0MVYyOEg2MC44MDA2VjI2LjVaTTYwLjgyNzEgMjYuNUg2MC44MDA2VjI4SDYwLjgyNzFWMjYuNVpNNjAuODUzNSAyNi41SDYwLjgyNzFWMjhINjAuODUzNVYyNi41Wk02MC44Nzk5IDI2LjVINjAuODUzNVYyOEg2MC44Nzk5VjI2LjVaTTYwLjkwNjMgMjYuNUg2MC44Nzk5VjI4SDYwLjkwNjNWMjYuNVpNNjAuOTMyNiAyNi41SDYwLjkwNjNWMjhINjAuOTMyNlYyNi41Wk02MC45NTkgMjYuNUg2MC45MzI2VjI4SDYwLjk1OVYyNi41Wk02MC45ODUyIDI2LjVINjAuOTU5VjI4SDYwLjk4NTJWMjYuNVpNNjEuMDExNSAyNi41SDYwLjk4NTJWMjhINjEuMDExNVYyNi41Wk02MS4wMzc3IDI2LjVINjEuMDExNVYyOEg2MS4wMzc3VjI2LjVaTTYxLjA2MzkgMjYuNUg2MS4wMzc3VjI4SDYxLjA2MzlWMjYuNVpNNjEuMDkgMjYuNUg2MS4wNjM5VjI4SDYxLjA5VjI2LjVaTTYxLjExNjEgMjYuNUg2MS4wOVYyOEg2MS4xMTYxVjI2LjVaTTYxLjE0MjIgMjYuNUg2MS4xMTYxVjI4SDYxLjE0MjJWMjYuNVpNNjEuMTY4MyAyNi41SDYxLjE0MjJWMjhINjEuMTY4M1YyNi41Wk02MS4xOTQzIDI2LjVINjEuMTY4M1YyOEg2MS4xOTQzVjI2LjVaTTYxLjIyMDIgMjYuNUg2MS4xOTQzVjI4SDYxLjIyMDJWMjYuNVpNNjEuMjQ2MiAyNi41SDYxLjIyMDJWMjhINjEuMjQ2MlYyNi41Wk02MS4yNzIxIDI2LjVINjEuMjQ2MlYyOEg2MS4yNzIxVjI2LjVaTTYxLjI5OCAyNi41SDYxLjI3MjFWMjhINjEuMjk4VjI2LjVaTTYxLjMyMzggMjYuNUg2MS4yOThWMjhINjEuMzIzOFYyNi41Wk02MS4zNDk3IDI2LjVINjEuMzIzOFYyOEg2MS4zNDk3VjI2LjVaTTYxLjM3NTQgMjYuNUg2MS4zNDk3VjI4SDYxLjM3NTRWMjYuNVpNNjEuNDAxMiAyNi41SDYxLjM3NTRWMjhINjEuNDAxMlYyNi41Wk02MS40MjY5IDI2LjVINjEuNDAxMlYyOEg2MS40MjY5VjI2LjVaTTYxLjQ1MjYgMjYuNUg2MS40MjY5VjI4SDYxLjQ1MjZWMjYuNVpNNjEuNDc4MiAyNi41SDYxLjQ1MjZWMjhINjEuNDc4MlYyNi41Wk02MS41MDM4IDI2LjVINjEuNDc4MlYyOEg2MS41MDM4VjI2LjVaTTYxLjUyOTQgMjYuNUg2MS41MDM4VjI4SDYxLjUyOTRWMjYuNVpNNjEuNTU1IDI2LjVINjEuNTI5NFYyOEg2MS41NTVWMjYuNVpNNjEuNTgwNSAyNi41SDYxLjU1NVYyOEg2MS41ODA1VjI2LjVaTTYxLjYwNiAyNi41SDYxLjU4MDVWMjhINjEuNjA2VjI2LjVaTTYxLjYzMTQgMjYuNUg2MS42MDZWMjhINjEuNjMxNFYyNi41Wk02MS42NTY4IDI2LjVINjEuNjMxNFYyOEg2MS42NTY4VjI2LjVaTTYxLjY4MjIgMjYuNUg2MS42NTY4VjI4SDYxLjY4MjJWMjYuNVpNNjEuNzA3NiAyNi41SDYxLjY4MjJWMjhINjEuNzA3NlYyNi41Wk02MS43MzI5IDI2LjVINjEuNzA3NlYyOEg2MS43MzI5VjI2LjVaTTYxLjc1ODIgMjYuNUg2MS43MzI5VjI4SDYxLjc1ODJWMjYuNVpNNjEuNzgzNCAyNi41SDYxLjc1ODJWMjhINjEuNzgzNFYyNi41Wk02MS44MDg2IDI2LjVINjEuNzgzNFYyOEg2MS44MDg2VjI2LjVaTTYxLjgzMzggMjYuNUg2MS44MDg2VjI4SDYxLjgzMzhWMjYuNVpNNjEuODU5IDI2LjVINjEuODMzOFYyOEg2MS44NTlWMjYuNVpNNjEuODg0MSAyNi41SDYxLjg1OVYyOEg2MS44ODQxVjI2LjVaTTYxLjkwOTIgMjYuNUg2MS44ODQxVjI4SDYxLjkwOTJWMjYuNVpNNjEuOTM0MiAyNi41SDYxLjkwOTJWMjhINjEuOTM0MlYyNi41Wk02MS45NTkzIDI2LjVINjEuOTM0MlYyOEg2MS45NTkzVjI2LjVaTTYxLjk4NDIgMjYuNUg2MS45NTkzVjI4SDYxLjk4NDJWMjYuNVpNNjIuMDA5MiAyNi41SDYxLjk4NDJWMjhINjIuMDA5MlYyNi41Wk02Mi4wMzQxIDI2LjVINjIuMDA5MlYyOEg2Mi4wMzQxVjI2LjVaTTYyLjA1OSAyNi41SDYyLjAzNDFWMjhINjIuMDU5VjI2LjVaTTYyLjA4MzkgMjYuNUg2Mi4wNTlWMjhINjIuMDgzOVYyNi41Wk02Mi4xMDg3IDI2LjVINjIuMDgzOVYyOEg2Mi4xMDg3VjI2LjVaTTYyLjEzMzUgMjYuNUg2Mi4xMDg3VjI4SDYyLjEzMzVWMjYuNVpNNjIuMTU4MiAyNi41SDYyLjEzMzVWMjhINjIuMTU4MlYyNi41Wk02Mi4xODI5IDI2LjVINjIuMTU4MlYyOEg2Mi4xODI5VjI2LjVaTTYyLjIwNzYgMjYuNUg2Mi4xODI5VjI4SDYyLjIwNzZWMjYuNVpNNjIuMjMyMyAyNi41SDYyLjIwNzZWMjhINjIuMjMyM1YyNi41Wk02Mi4yNTY5IDI2LjVINjIuMjMyM1YyOEg2Mi4yNTY5VjI2LjVaTTYyLjI4MTUgMjYuNUg2Mi4yNTY5VjI4SDYyLjI4MTVWMjYuNVpNNjIuMzA2IDI2LjVINjIuMjgxNVYyOEg2Mi4zMDZWMjYuNVpNNjIuMzMwNiAyNi41SDYyLjMwNlYyOEg2Mi4zMzA2VjI2LjVaTTYyLjM1NSAyNi41SDYyLjMzMDZWMjhINjIuMzU1VjI2LjVaTTYyLjM3OTUgMjYuNUg2Mi4zNTVWMjhINjIuMzc5NVYyNi41Wk02Mi40MDM5IDI2LjVINjIuMzc5NVYyOEg2Mi40MDM5VjI2LjVaTTYyLjQyODMgMjYuNUg2Mi40MDM5VjI4SDYyLjQyODNWMjYuNVpNNjIuNDUyNyAyNi41SDYyLjQyODNWMjhINjIuNDUyN1YyNi41Wk02Mi40NzcgMjYuNUg2Mi40NTI3VjI4SDYyLjQ3N1YyNi41Wk02Mi41MDEzIDI2LjVINjIuNDc3VjI4SDYyLjUwMTNWMjYuNVpNNjIuNTI1NSAyNi41SDYyLjUwMTNWMjhINjIuNTI1NVYyNi41Wk02Mi41NDk4IDI2LjVINjIuNTI1NVYyOEg2Mi41NDk4VjI2LjVaTTYyLjU3MzkgMjYuNUg2Mi41NDk4VjI4SDYyLjU3MzlWMjYuNVpNNjIuNTk4MSAyNi41SDYyLjU3MzlWMjhINjIuNTk4MVYyNi41Wk02Mi42MjIyIDI2LjVINjIuNTk4MVYyOEg2Mi42MjIyVjI2LjVaTTYyLjY0NjMgMjYuNUg2Mi42MjIyVjI4SDYyLjY0NjNWMjYuNVpNNjIuNjcwNCAyNi41SDYyLjY0NjNWMjhINjIuNjcwNFYyNi41Wk02Mi42OTQ0IDI2LjVINjIuNjcwNFYyOEg2Mi42OTQ0VjI2LjVaTTYyLjcxODQgMjYuNUg2Mi42OTQ0VjI4SDYyLjcxODRWMjYuNVpNNjIuNzQyMyAyNi41SDYyLjcxODRWMjhINjIuNzQyM1YyNi41Wk02Mi43NjYzIDI2LjVINjIuNzQyM1YyOEg2Mi43NjYzVjI2LjVaTTYyLjc5MDIgMjYuNUg2Mi43NjYzVjI4SDYyLjc5MDJWMjYuNVpNNjIuODE0IDI2LjVINjIuNzkwMlYyOEg2Mi44MTRWMjYuNVpNNjIuODM3OCAyNi41SDYyLjgxNFYyOEg2Mi44Mzc4VjI2LjVaTTYyLjg2MTYgMjYuNUg2Mi44Mzc4VjI4SDYyLjg2MTZWMjYuNVpNNjIuODg1NCAyNi41SDYyLjg2MTZWMjhINjIuODg1NFYyNi41Wk02Mi45MDkxIDI2LjVINjIuODg1NFYyOEg2Mi45MDkxVjI2LjVaTTYyLjkzMjggMjYuNUg2Mi45MDkxVjI4SDYyLjkzMjhWMjYuNVpNNjIuOTU2NSAyNi41SDYyLjkzMjhWMjhINjIuOTU2NVYyNi41Wk02Mi45ODAxIDI2LjVINjIuOTU2NVYyOEg2Mi45ODAxVjI2LjVaTTYzLjAwMzcgMjYuNUg2Mi45ODAxVjI4SDYzLjAwMzdWMjYuNVpNNjMuMDI3MyAyNi41SDYzLjAwMzdWMjhINjMuMDI3M1YyNi41Wk02My4wNTA4IDI2LjVINjMuMDI3M1YyOEg2My4wNTA4VjI2LjVaTTYzLjA3NDMgMjYuNUg2My4wNTA4VjI4SDYzLjA3NDNWMjYuNVpNNjMuMDk3NyAyNi41SDYzLjA3NDNWMjhINjMuMDk3N1YyNi41Wk02My4xMjEyIDI2LjVINjMuMDk3N1YyOEg2My4xMjEyVjI2LjVaTTYzLjE0NDYgMjYuNUg2My4xMjEyVjI4SDYzLjE0NDZWMjYuNVpNNjMuMTY3OSAyNi41SDYzLjE0NDZWMjhINjMuMTY3OVYyNi41Wk02My4xOTEyIDI2LjVINjMuMTY3OVYyOEg2My4xOTEyVjI2LjVaTTYzLjIxNDUgMjYuNUg2My4xOTEyVjI4SDYzLjIxNDVWMjYuNVpNNjMuMjM3OCAyNi41SDYzLjIxNDVWMjhINjMuMjM3OFYyNi41Wk02My4yNjEgMjYuNUg2My4yMzc4VjI4SDYzLjI2MVYyNi41Wk02My4yODQyIDI2LjVINjMuMjYxVjI4SDYzLjI4NDJWMjYuNVpNNjMuMzA3NCAyNi41SDYzLjI4NDJWMjhINjMuMzA3NFYyNi41Wk02My4zMzA1IDI2LjVINjMuMzA3NFYyOEg2My4zMzA1VjI2LjVaTTYzLjM1MzYgMjYuNUg2My4zMzA1VjI4SDYzLjM1MzZWMjYuNVpNNjMuMzc2NyAyNi41SDYzLjM1MzZWMjhINjMuMzc2N1YyNi41Wk02My4zOTk3IDI2LjVINjMuMzc2N1YyOEg2My4zOTk3VjI2LjVaTTYzLjQyMjcgMjYuNUg2My4zOTk3VjI4SDYzLjQyMjdWMjYuNVpNNjMuNDQ1NyAyNi41SDYzLjQyMjdWMjhINjMuNDQ1N1YyNi41Wk02My40Njg2IDI2LjVINjMuNDQ1N1YyOEg2My40Njg2VjI2LjVaTTYzLjQ5MTUgMjYuNUg2My40Njg2VjI4SDYzLjQ5MTVWMjYuNVpNNjMuNTE0MyAyNi41SDYzLjQ5MTVWMjhINjMuNTE0M1YyNi41Wk02My41MzcyIDI2LjVINjMuNTE0M1YyOEg2My41MzcyVjI2LjVaTTYzLjU2IDI2LjVINjMuNTM3MlYyOEg2My41NlYyNi41Wk02My41ODI3IDI2LjVINjMuNTZWMjhINjMuNTgyN1YyNi41Wk02My42MDU1IDI2LjVINjMuNTgyN1YyOEg2My42MDU1VjI2LjVaTTYzLjYyODIgMjYuNUg2My42MDU1VjI4SDYzLjYyODJWMjYuNVpNNjMuNjUwOCAyNi41SDYzLjYyODJWMjhINjMuNjUwOFYyNi41Wk02My42NzM1IDI2LjVINjMuNjUwOFYyOEg2My42NzM1VjI2LjVaTTYzLjY5NjEgMjYuNUg2My42NzM1VjI4SDYzLjY5NjFWMjYuNVpNNjMuNzE4NiAyNi41SDYzLjY5NjFWMjhINjMuNzE4NlYyNi41Wk02My43NDEyIDI2LjVINjMuNzE4NlYyOEg2My43NDEyVjI2LjVaTTYzLjc2MzcgMjYuNUg2My43NDEyVjI4SDYzLjc2MzdWMjYuNVpNNjMuNzg2MSAyNi41SDYzLjc2MzdWMjhINjMuNzg2MVYyNi41Wk02My44MDg2IDI2LjVINjMuNzg2MVYyOEg2My44MDg2VjI2LjVaTTYzLjgzMSAyNi41SDYzLjgwODZWMjhINjMuODMxVjI2LjVaTTYzLjg1MzMgMjYuNUg2My44MzFWMjhINjMuODUzM1YyNi41Wk02My44NzU3IDI2LjVINjMuODUzM1YyOEg2My44NzU3VjI2LjVaTTYzLjg5OCAyNi41SDYzLjg3NTdWMjhINjMuODk4VjI2LjVaTTYzLjkyMDIgMjYuNUg2My44OThWMjhINjMuOTIwMlYyNi41Wk02My45NDI1IDI2LjVINjMuOTIwMlYyOEg2My45NDI1VjI2LjVaTTYzLjk2NDcgMjYuNUg2My45NDI1VjI4SDYzLjk2NDdWMjYuNVpNNjMuOTg2OCAyNi41SDYzLjk2NDdWMjhINjMuOTg2OFYyNi41Wk02NC4wMDkgMjYuNUg2My45ODY4VjI4SDY0LjAwOVYyNi41Wk02NC4wMzExIDI2LjVINjQuMDA5VjI4SDY0LjAzMTFWMjYuNVpNNjQuMDUzMSAyNi41SDY0LjAzMTFWMjhINjQuMDUzMVYyNi41Wk02NC4wNzUyIDI2LjVINjQuMDUzMVYyOEg2NC4wNzUyVjI2LjVaTTY0LjA5NzIgMjYuNUg2NC4wNzUyVjI4SDY0LjA5NzJWMjYuNVpNNjQuMTE5MSAyNi41SDY0LjA5NzJWMjhINjQuMTE5MVYyNi41Wk02NC4xNDExIDI2LjVINjQuMTE5MVYyOEg2NC4xNDExVjI2LjVaTTY0LjE2MyAyNi41SDY0LjE0MTFWMjhINjQuMTYzVjI2LjVaTTY0LjE4NDggMjYuNUg2NC4xNjNWMjhINjQuMTg0OFYyNi41Wk02NC4yMDY3IDI2LjVINjQuMTg0OFYyOEg2NC4yMDY3VjI2LjVaTTY0LjIyODUgMjYuNUg2NC4yMDY3VjI4SDY0LjIyODVWMjYuNVpNNjQuMjUwMiAyNi41SDY0LjIyODVWMjhINjQuMjUwMlYyNi41Wk02NC4yNzIgMjYuNUg2NC4yNTAyVjI4SDY0LjI3MlYyNi41Wk02NC4yOTM3IDI2LjVINjQuMjcyVjI4SDY0LjI5MzdWMjYuNVpNNjQuMzE1MyAyNi41SDY0LjI5MzdWMjhINjQuMzE1M1YyNi41Wk02NC4zMzcgMjYuNUg2NC4zMTUzVjI4SDY0LjMzN1YyNi41Wk02NC4zNTg2IDI2LjVINjQuMzM3VjI4SDY0LjM1ODZWMjYuNVpNNjQuMzgwMiAyNi41SDY0LjM1ODZWMjhINjQuMzgwMlYyNi41Wk02NC40MDE3IDI2LjVINjQuMzgwMlYyOEg2NC40MDE3VjI2LjVaTTY0LjQyMzIgMjYuNUg2NC40MDE3VjI4SDY0LjQyMzJWMjYuNVpNNjQuNDQ0NyAyNi41SDY0LjQyMzJWMjhINjQuNDQ0N1YyNi41Wk02NC40NjYxIDI2LjVINjQuNDQ0N1YyOEg2NC40NjYxVjI2LjVaTTY0LjQ4NzUgMjYuNUg2NC40NjYxVjI4SDY0LjQ4NzVWMjYuNVpNNjQuNTA4OSAyNi41SDY0LjQ4NzVWMjhINjQuNTA4OVYyNi41Wk02NC41MzAyIDI2LjVINjQuNTA4OVYyOEg2NC41MzAyVjI2LjVaTTY0LjU1MTUgMjYuNUg2NC41MzAyVjI4SDY0LjU1MTVWMjYuNVpNNjQuNTcyOCAyNi41SDY0LjU1MTVWMjhINjQuNTcyOFYyNi41Wk02NC41OTQgMjYuNUg2NC41NzI4VjI4SDY0LjU5NFYyNi41Wk02NC42MTUyIDI2LjVINjQuNTk0VjI4SDY0LjYxNTJWMjYuNVpNNjQuNjM2NCAyNi41SDY0LjYxNTJWMjhINjQuNjM2NFYyNi41Wk02NC42NTc2IDI2LjVINjQuNjM2NFYyOEg2NC42NTc2VjI2LjVaTTY0LjY3ODcgMjYuNUg2NC42NTc2VjI4SDY0LjY3ODdWMjYuNVpNNjQuNjk5NyAyNi41SDY0LjY3ODdWMjhINjQuNjk5N1YyNi41Wk02NC43MjA4IDI2LjVINjQuNjk5N1YyOEg2NC43MjA4VjI2LjVaTTY0Ljc0MTggMjYuNUg2NC43MjA4VjI4SDY0Ljc0MThWMjYuNVpNNjQuNzYyOCAyNi41SDY0Ljc0MThWMjhINjQuNzYyOFYyNi41Wk02NC43ODM3IDI2LjVINjQuNzYyOFYyOEg2NC43ODM3VjI2LjVaTTY0LjgwNDYgMjYuNUg2NC43ODM3VjI4SDY0LjgwNDZWMjYuNVpNNjQuODI1NSAyNi41SDY0LjgwNDZWMjhINjQuODI1NVYyNi41Wk02NC44NDYzIDI2LjVINjQuODI1NVYyOEg2NC44NDYzVjI2LjVaTTY0Ljg2NzEgMjYuNUg2NC44NDYzVjI4SDY0Ljg2NzFWMjYuNVpNNjQuODg3OSAyNi41SDY0Ljg2NzFWMjhINjQuODg3OVYyNi41Wk02NC45MDg2IDI2LjVINjQuODg3OVYyOEg2NC45MDg2VjI2LjVaTTY0LjkyOTMgMjYuNUg2NC45MDg2VjI4SDY0LjkyOTNWMjYuNVpNNjQuOTUgMjYuNUg2NC45MjkzVjI4SDY0Ljk1VjI2LjVaTTY0Ljk3MDcgMjYuNUg2NC45NVYyOEg2NC45NzA3VjI2LjVaTTY0Ljk5MTMgMjYuNUg2NC45NzA3VjI4SDY0Ljk5MTNWMjYuNVpNNjUuMDExOCAyNi41SDY0Ljk5MTNWMjhINjUuMDExOFYyNi41Wk02NS4wMzI0IDI2LjVINjUuMDExOFYyOEg2NS4wMzI0VjI2LjVaTTY1LjA1MjkgMjYuNUg2NS4wMzI0VjI4SDY1LjA1MjlWMjYuNVpNNjUuMDczNCAyNi41SDY1LjA1MjlWMjhINjUuMDczNFYyNi41Wk02NS4wOTM4IDI2LjVINjUuMDczNFYyOEg2NS4wOTM4VjI2LjVaTTY1LjExNDIgMjYuNUg2NS4wOTM4VjI4SDY1LjExNDJWMjYuNVpNNjUuMTM0NiAyNi41SDY1LjExNDJWMjhINjUuMTM0NlYyNi41Wk02NS4xNTQ5IDI2LjVINjUuMTM0NlYyOEg2NS4xNTQ5VjI2LjVaTTY1LjE3NTMgMjYuNUg2NS4xNTQ5VjI4SDY1LjE3NTNWMjYuNVpNNjUuMTk1NSAyNi41SDY1LjE3NTNWMjhINjUuMTk1NVYyNi41Wk02NS4yMTU4IDI2LjVINjUuMTk1NVYyOEg2NS4yMTU4VjI2LjVaTTY1LjIzNiAyNi41SDY1LjIxNThWMjhINjUuMjM2VjI2LjVaTTY1LjI1NjIgMjYuNUg2NS4yMzZWMjhINjUuMjU2MlYyNi41Wk02NS4yNzYzIDI2LjVINjUuMjU2MlYyOEg2NS4yNzYzVjI2LjVaTTY1LjI5NjQgMjYuNUg2NS4yNzYzVjI4SDY1LjI5NjRWMjYuNVpNNjUuMzE2NSAyNi41SDY1LjI5NjRWMjhINjUuMzE2NVYyNi41Wk02NS4zMzY1IDI2LjVINjUuMzE2NVYyOEg2NS4zMzY1VjI2LjVaTTY1LjM1NjYgMjYuNUg2NS4zMzY1VjI4SDY1LjM1NjZWMjYuNVpNNjUuMzc2NSAyNi41SDY1LjM1NjZWMjhINjUuMzc2NVYyNi41Wk02NS4zOTY1IDI2LjVINjUuMzc2NVYyOEg2NS4zOTY1VjI2LjVaTTY1LjQxNjQgMjYuNUg2NS4zOTY1VjI4SDY1LjQxNjRWMjYuNVpNNjUuNDM2MyAyNi41SDY1LjQxNjRWMjhINjUuNDM2M1YyNi41Wk02NS40NTYxIDI2LjVINjUuNDM2M1YyOEg2NS40NTYxVjI2LjVaTTY1LjQ3NTkgMjYuNUg2NS40NTYxVjI4SDY1LjQ3NTlWMjYuNVpNNjUuNDk1NyAyNi41SDY1LjQ3NTlWMjhINjUuNDk1N1YyNi41Wk02NS41MTU1IDI2LjVINjUuNDk1N1YyOEg2NS41MTU1VjI2LjVaTTY1LjUzNTIgMjYuNUg2NS41MTU1VjI4SDY1LjUzNTJWMjYuNVpNNjUuNTU0OCAyNi41SDY1LjUzNTJWMjhINjUuNTU0OFYyNi41Wk02NS41NzQ1IDI2LjVINjUuNTU0OFYyOEg2NS41NzQ1VjI2LjVaTTY1LjU5NDEgMjYuNUg2NS41NzQ1VjI4SDY1LjU5NDFWMjYuNVpNNjUuNjEzNyAyNi41SDY1LjU5NDFWMjhINjUuNjEzN1YyNi41Wk02NS42MzMyIDI2LjVINjUuNjEzN1YyOEg2NS42MzMyVjI2LjVaTTY1LjY1MjggMjYuNUg2NS42MzMyVjI4SDY1LjY1MjhWMjYuNVpNNjUuNjcyMiAyNi41SDY1LjY1MjhWMjhINjUuNjcyMlYyNi41Wk02NS42OTE3IDI2LjVINjUuNjcyMlYyOEg2NS42OTE3VjI2LjVaTTY1LjcxMTEgMjYuNUg2NS42OTE3VjI4SDY1LjcxMTFWMjYuNVpNNjUuNzMwNSAyNi41SDY1LjcxMTFWMjhINjUuNzMwNVYyNi41Wk02NS43NDk4IDI2LjVINjUuNzMwNVYyOEg2NS43NDk4VjI2LjVaTTY1Ljc2OTEgMjYuNUg2NS43NDk4VjI4SDY1Ljc2OTFWMjYuNVpNNjUuNzg4NCAyNi41SDY1Ljc2OTFWMjhINjUuNzg4NFYyNi41Wk02NS44MDc3IDI2LjVINjUuNzg4NFYyOEg2NS44MDc3VjI2LjVaTTY1LjgyNjkgMjYuNUg2NS44MDc3VjI4SDY1LjgyNjlWMjYuNVpNNjUuODQ2MSAyNi41SDY1LjgyNjlWMjhINjUuODQ2MVYyNi41Wk02NS44NjUyIDI2LjVINjUuODQ2MVYyOEg2NS44NjUyVjI2LjVaTTY1Ljg4NDMgMjYuNUg2NS44NjUyVjI4SDY1Ljg4NDNWMjYuNVpNNjUuOTAzNCAyNi41SDY1Ljg4NDNWMjhINjUuOTAzNFYyNi41Wk02NS45MjI1IDI2LjVINjUuOTAzNFYyOEg2NS45MjI1VjI2LjVaTTY1Ljk0MTUgMjYuNUg2NS45MjI1VjI4SDY1Ljk0MTVWMjYuNVpNNjUuOTYwNSAyNi41SDY1Ljk0MTVWMjhINjUuOTYwNVYyNi41Wk02NS45Nzk0IDI2LjVINjUuOTYwNVYyOEg2NS45Nzk0VjI2LjVaTTY1Ljk5ODMgMjYuNUg2NS45Nzk0VjI4SDY1Ljk5ODNWMjYuNVpNNjYuMDE3MiAyNi41SDY1Ljk5ODNWMjhINjYuMDE3MlYyNi41Wk02Ni4wMzYxIDI2LjVINjYuMDE3MlYyOEg2Ni4wMzYxVjI2LjVaTTY2LjA1NDkgMjYuNUg2Ni4wMzYxVjI4SDY2LjA1NDlWMjYuNVpNNjYuMDczNyAyNi41SDY2LjA1NDlWMjhINjYuMDczN1YyNi41Wk02Ni4wOTI0IDI2LjVINjYuMDczN1YyOEg2Ni4wOTI0VjI2LjVaTTY2LjExMTEgMjYuNUg2Ni4wOTI0VjI4SDY2LjExMTFWMjYuNVpNNjYuMTI5OCAyNi41SDY2LjExMTFWMjhINjYuMTI5OFYyNi41Wk02Ni4xNDg1IDI2LjVINjYuMTI5OFYyOEg2Ni4xNDg1VjI2LjVaTTY2LjE2NzEgMjYuNUg2Ni4xNDg1VjI4SDY2LjE2NzFWMjYuNVpNNjYuMTg1NyAyNi41SDY2LjE2NzFWMjhINjYuMTg1N1YyNi41Wk02Ni4yMDQyIDI2LjVINjYuMTg1N1YyOEg2Ni4yMDQyVjI2LjVaTTY2LjIyMjggMjYuNUg2Ni4yMDQyVjI4SDY2LjIyMjhWMjYuNVpNNjYuMjQxMiAyNi41SDY2LjIyMjhWMjhINjYuMjQxMlYyNi41Wk02Ni4yNTk3IDI2LjVINjYuMjQxMlYyOEg2Ni4yNTk3VjI2LjVaTTY2LjI3ODEgMjYuNUg2Ni4yNTk3VjI4SDY2LjI3ODFWMjYuNVpNNjYuMjk2NSAyNi41SDY2LjI3ODFWMjhINjYuMjk2NVYyNi41Wk02Ni4zMTQ5IDI2LjVINjYuMjk2NVYyOEg2Ni4zMTQ5VjI2LjVaTTY2LjMzMzIgMjYuNUg2Ni4zMTQ5VjI4SDY2LjMzMzJWMjYuNVpNNjYuMzUxNSAyNi41SDY2LjMzMzJWMjhINjYuMzUxNVYyNi41Wk02Ni4zNjk3IDI2LjVINjYuMzUxNVYyOEg2Ni4zNjk3VjI2LjVaTTY2LjM4NzkgMjYuNUg2Ni4zNjk3VjI4SDY2LjM4NzlWMjYuNVpNNjYuNDA2MSAyNi41SDY2LjM4NzlWMjhINjYuNDA2MVYyNi41Wk02Ni40MjQzIDI2LjVINjYuNDA2MVYyOEg2Ni40MjQzVjI2LjVaTTY2LjQ0MjQgMjYuNUg2Ni40MjQzVjI4SDY2LjQ0MjRWMjYuNVpNNjYuNDYwNSAyNi41SDY2LjQ0MjRWMjhINjYuNDYwNVYyNi41Wk02Ni40Nzg2IDI2LjVINjYuNDYwNVYyOEg2Ni40Nzg2VjI2LjVaTTY2LjQ5NjYgMjYuNUg2Ni40Nzg2VjI4SDY2LjQ5NjZWMjYuNVpNNjYuNTE0NiAyNi41SDY2LjQ5NjZWMjhINjYuNTE0NlYyNi41Wk02Ni41MzI1IDI2LjVINjYuNTE0NlYyOEg2Ni41MzI1VjI2LjVaTTY2LjU1MDQgMjYuNUg2Ni41MzI1VjI4SDY2LjU1MDRWMjYuNVpNNjYuNTY4MyAyNi41SDY2LjU1MDRWMjhINjYuNTY4M1YyNi41Wk02Ni41ODYyIDI2LjVINjYuNTY4M1YyOEg2Ni41ODYyVjI2LjVaTTY2LjYwNCAyNi41SDY2LjU4NjJWMjhINjYuNjA0VjI2LjVaTTY2LjYyMTggMjYuNUg2Ni42MDRWMjhINjYuNjIxOFYyNi41Wk02Ni42Mzk2IDI2LjVINjYuNjIxOFYyOEg2Ni42Mzk2VjI2LjVaTTY2LjY1NzMgMjYuNUg2Ni42Mzk2VjI4SDY2LjY1NzNWMjYuNVpNNjYuNjc1IDI2LjVINjYuNjU3M1YyOEg2Ni42NzVWMjYuNVpNNjYuNjkyNiAyNi41SDY2LjY3NVYyOEg2Ni42OTI2VjI2LjVaTTY2LjcxMDMgMjYuNUg2Ni42OTI2VjI4SDY2LjcxMDNWMjYuNVpNNjYuNzI3OCAyNi41SDY2LjcxMDNWMjhINjYuNzI3OFYyNi41Wk02Ni43NDU0IDI2LjVINjYuNzI3OFYyOEg2Ni43NDU0VjI2LjVaTTY2Ljc2MjkgMjYuNUg2Ni43NDU0VjI4SDY2Ljc2MjlWMjYuNVpNNjYuNzgwNCAyNi41SDY2Ljc2MjlWMjhINjYuNzgwNFYyNi41Wk02Ni43OTc5IDI2LjVINjYuNzgwNFYyOEg2Ni43OTc5VjI2LjVaTTY2LjgxNTMgMjYuNUg2Ni43OTc5VjI4SDY2LjgxNTNWMjYuNVpNNjYuODMyNyAyNi41SDY2LjgxNTNWMjhINjYuODMyN1YyNi41Wk02Ni44NTAxIDI2LjVINjYuODMyN1YyOEg2Ni44NTAxVjI2LjVaTTY2Ljg2NzQgMjYuNUg2Ni44NTAxVjI4SDY2Ljg2NzRWMjYuNVpNNjYuODg0NyAyNi41SDY2Ljg2NzRWMjhINjYuODg0N1YyNi41Wk02Ni45MDE5IDI2LjVINjYuODg0N1YyOEg2Ni45MDE5VjI2LjVaTTY2LjkxOTIgMjYuNUg2Ni45MDE5VjI4SDY2LjkxOTJWMjYuNVpNNjYuOTM2MyAyNi41SDY2LjkxOTJWMjhINjYuOTM2M1YyNi41Wk02Ni45NTM1IDI2LjVINjYuOTM2M1YyOEg2Ni45NTM1VjI2LjVaTTY2Ljk3MDYgMjYuNUg2Ni45NTM1VjI4SDY2Ljk3MDZWMjYuNVpNNjYuOTg3NyAyNi41SDY2Ljk3MDZWMjhINjYuOTg3N1YyNi41Wk02Ny4wMDQ4IDI2LjVINjYuOTg3N1YyOEg2Ny4wMDQ4VjI2LjVaTTY3LjAyMTggMjYuNUg2Ny4wMDQ4VjI4SDY3LjAyMThWMjYuNVpNNjcuMDM4OCAyNi41SDY3LjAyMThWMjhINjcuMDM4OFYyNi41Wk02Ny43ODg4IDI4Ljc1VjI3LjI1SDY2LjI4ODhWMjguNzVINjcuNzg4OFpNNjcuMDIxOCAyOS41SDY3LjAzODhWMjhINjcuMDIxOFYyOS41Wk02Ny4wMDQ4IDI5LjVINjcuMDIxOFYyOEg2Ny4wMDQ4VjI5LjVaTTY2Ljk4NzcgMjkuNUg2Ny4wMDQ4VjI4SDY2Ljk4NzdWMjkuNVpNNjYuOTcwNiAyOS41SDY2Ljk4NzdWMjhINjYuOTcwNlYyOS41Wk02Ni45NTM1IDI5LjVINjYuOTcwNlYyOEg2Ni45NTM1VjI5LjVaTTY2LjkzNjMgMjkuNUg2Ni45NTM1VjI4SDY2LjkzNjNWMjkuNVpNNjYuOTE5MiAyOS41SDY2LjkzNjNWMjhINjYuOTE5MlYyOS41Wk02Ni45MDE5IDI5LjVINjYuOTE5MlYyOEg2Ni45MDE5VjI5LjVaTTY2Ljg4NDcgMjkuNUg2Ni45MDE5VjI4SDY2Ljg4NDdWMjkuNVpNNjYuODY3NCAyOS41SDY2Ljg4NDdWMjhINjYuODY3NFYyOS41Wk02Ni44NTAxIDI5LjVINjYuODY3NFYyOEg2Ni44NTAxVjI5LjVaTTY2LjgzMjcgMjkuNUg2Ni44NTAxVjI4SDY2LjgzMjdWMjkuNVpNNjYuODE1MyAyOS41SDY2LjgzMjdWMjhINjYuODE1M1YyOS41Wk02Ni43OTc5IDI5LjVINjYuODE1M1YyOEg2Ni43OTc5VjI5LjVaTTY2Ljc4MDQgMjkuNUg2Ni43OTc5VjI4SDY2Ljc4MDRWMjkuNVpNNjYuNzYyOSAyOS41SDY2Ljc4MDRWMjhINjYuNzYyOVYyOS41Wk02Ni43NDU0IDI5LjVINjYuNzYyOVYyOEg2Ni43NDU0VjI5LjVaTTY2LjcyNzggMjkuNUg2Ni43NDU0VjI4SDY2LjcyNzhWMjkuNVpNNjYuNzEwMyAyOS41SDY2LjcyNzhWMjhINjYuNzEwM1YyOS41Wk02Ni42OTI2IDI5LjVINjYuNzEwM1YyOEg2Ni42OTI2VjI5LjVaTTY2LjY3NSAyOS41SDY2LjY5MjZWMjhINjYuNjc1VjI5LjVaTTY2LjY1NzMgMjkuNUg2Ni42NzVWMjhINjYuNjU3M1YyOS41Wk02Ni42Mzk2IDI5LjVINjYuNjU3M1YyOEg2Ni42Mzk2VjI5LjVaTTY2LjYyMTggMjkuNUg2Ni42Mzk2VjI4SDY2LjYyMThWMjkuNVpNNjYuNjA0IDI5LjVINjYuNjIxOFYyOEg2Ni42MDRWMjkuNVpNNjYuNTg2MiAyOS41SDY2LjYwNFYyOEg2Ni41ODYyVjI5LjVaTTY2LjU2ODMgMjkuNUg2Ni41ODYyVjI4SDY2LjU2ODNWMjkuNVpNNjYuNTUwNCAyOS41SDY2LjU2ODNWMjhINjYuNTUwNFYyOS41Wk02Ni41MzI1IDI5LjVINjYuNTUwNFYyOEg2Ni41MzI1VjI5LjVaTTY2LjUxNDYgMjkuNUg2Ni41MzI1VjI4SDY2LjUxNDZWMjkuNVpNNjYuNDk2NiAyOS41SDY2LjUxNDZWMjhINjYuNDk2NlYyOS41Wk02Ni40Nzg2IDI5LjVINjYuNDk2NlYyOEg2Ni40Nzg2VjI5LjVaTTY2LjQ2MDUgMjkuNUg2Ni40Nzg2VjI4SDY2LjQ2MDVWMjkuNVpNNjYuNDQyNCAyOS41SDY2LjQ2MDVWMjhINjYuNDQyNFYyOS41Wk02Ni40MjQzIDI5LjVINjYuNDQyNFYyOEg2Ni40MjQzVjI5LjVaTTY2LjQwNjEgMjkuNUg2Ni40MjQzVjI4SDY2LjQwNjFWMjkuNVpNNjYuMzg3OSAyOS41SDY2LjQwNjFWMjhINjYuMzg3OVYyOS41Wk02Ni4zNjk3IDI5LjVINjYuMzg3OVYyOEg2Ni4zNjk3VjI5LjVaTTY2LjM1MTUgMjkuNUg2Ni4zNjk3VjI4SDY2LjM1MTVWMjkuNVpNNjYuMzMzMiAyOS41SDY2LjM1MTVWMjhINjYuMzMzMlYyOS41Wk02Ni4zMTQ5IDI5LjVINjYuMzMzMlYyOEg2Ni4zMTQ5VjI5LjVaTTY2LjI5NjUgMjkuNUg2Ni4zMTQ5VjI4SDY2LjI5NjVWMjkuNVpNNjYuMjc4MSAyOS41SDY2LjI5NjVWMjhINjYuMjc4MVYyOS41Wk02Ni4yNTk3IDI5LjVINjYuMjc4MVYyOEg2Ni4yNTk3VjI5LjVaTTY2LjI0MTIgMjkuNUg2Ni4yNTk3VjI4SDY2LjI0MTJWMjkuNVpNNjYuMjIyOCAyOS41SDY2LjI0MTJWMjhINjYuMjIyOFYyOS41Wk02Ni4yMDQyIDI5LjVINjYuMjIyOFYyOEg2Ni4yMDQyVjI5LjVaTTY2LjE4NTcgMjkuNUg2Ni4yMDQyVjI4SDY2LjE4NTdWMjkuNVpNNjYuMTY3MSAyOS41SDY2LjE4NTdWMjhINjYuMTY3MVYyOS41Wk02Ni4xNDg1IDI5LjVINjYuMTY3MVYyOEg2Ni4xNDg1VjI5LjVaTTY2LjEyOTggMjkuNUg2Ni4xNDg1VjI4SDY2LjEyOThWMjkuNVpNNjYuMTExMSAyOS41SDY2LjEyOThWMjhINjYuMTExMVYyOS41Wk02Ni4wOTI0IDI5LjVINjYuMTExMVYyOEg2Ni4wOTI0VjI5LjVaTTY2LjA3MzcgMjkuNUg2Ni4wOTI0VjI4SDY2LjA3MzdWMjkuNVpNNjYuMDU0OSAyOS41SDY2LjA3MzdWMjhINjYuMDU0OVYyOS41Wk02Ni4wMzYxIDI5LjVINjYuMDU0OVYyOEg2Ni4wMzYxVjI5LjVaTTY2LjAxNzIgMjkuNUg2Ni4wMzYxVjI4SDY2LjAxNzJWMjkuNVpNNjUuOTk4MyAyOS41SDY2LjAxNzJWMjhINjUuOTk4M1YyOS41Wk02NS45Nzk0IDI5LjVINjUuOTk4M1YyOEg2NS45Nzk0VjI5LjVaTTY1Ljk2MDUgMjkuNUg2NS45Nzk0VjI4SDY1Ljk2MDVWMjkuNVpNNjUuOTQxNSAyOS41SDY1Ljk2MDVWMjhINjUuOTQxNVYyOS41Wk02NS45MjI1IDI5LjVINjUuOTQxNVYyOEg2NS45MjI1VjI5LjVaTTY1LjkwMzQgMjkuNUg2NS45MjI1VjI4SDY1LjkwMzRWMjkuNVpNNjUuODg0MyAyOS41SDY1LjkwMzRWMjhINjUuODg0M1YyOS41Wk02NS44NjUyIDI5LjVINjUuODg0M1YyOEg2NS44NjUyVjI5LjVaTTY1Ljg0NjEgMjkuNUg2NS44NjUyVjI4SDY1Ljg0NjFWMjkuNVpNNjUuODI2OSAyOS41SDY1Ljg0NjFWMjhINjUuODI2OVYyOS41Wk02NS44MDc3IDI5LjVINjUuODI2OVYyOEg2NS44MDc3VjI5LjVaTTY1Ljc4ODQgMjkuNUg2NS44MDc3VjI4SDY1Ljc4ODRWMjkuNVpNNjUuNzY5MSAyOS41SDY1Ljc4ODRWMjhINjUuNzY5MVYyOS41Wk02NS43NDk4IDI5LjVINjUuNzY5MVYyOEg2NS43NDk4VjI5LjVaTTY1LjczMDUgMjkuNUg2NS43NDk4VjI4SDY1LjczMDVWMjkuNVpNNjUuNzExMSAyOS41SDY1LjczMDVWMjhINjUuNzExMVYyOS41Wk02NS42OTE3IDI5LjVINjUuNzExMVYyOEg2NS42OTE3VjI5LjVaTTY1LjY3MjIgMjkuNUg2NS42OTE3VjI4SDY1LjY3MjJWMjkuNVpNNjUuNjUyOCAyOS41SDY1LjY3MjJWMjhINjUuNjUyOFYyOS41Wk02NS42MzMyIDI5LjVINjUuNjUyOFYyOEg2NS42MzMyVjI5LjVaTTY1LjYxMzcgMjkuNUg2NS42MzMyVjI4SDY1LjYxMzdWMjkuNVpNNjUuNTk0MSAyOS41SDY1LjYxMzdWMjhINjUuNTk0MVYyOS41Wk02NS41NzQ1IDI5LjVINjUuNTk0MVYyOEg2NS41NzQ1VjI5LjVaTTY1LjU1NDggMjkuNUg2NS41NzQ1VjI4SDY1LjU1NDhWMjkuNVpNNjUuNTM1MiAyOS41SDY1LjU1NDhWMjhINjUuNTM1MlYyOS41Wk02NS41MTU1IDI5LjVINjUuNTM1MlYyOEg2NS41MTU1VjI5LjVaTTY1LjQ5NTcgMjkuNUg2NS41MTU1VjI4SDY1LjQ5NTdWMjkuNVpNNjUuNDc1OSAyOS41SDY1LjQ5NTdWMjhINjUuNDc1OVYyOS41Wk02NS40NTYxIDI5LjVINjUuNDc1OVYyOEg2NS40NTYxVjI5LjVaTTY1LjQzNjMgMjkuNUg2NS40NTYxVjI4SDY1LjQzNjNWMjkuNVpNNjUuNDE2NCAyOS41SDY1LjQzNjNWMjhINjUuNDE2NFYyOS41Wk02NS4zOTY1IDI5LjVINjUuNDE2NFYyOEg2NS4zOTY1VjI5LjVaTTY1LjM3NjUgMjkuNUg2NS4zOTY1VjI4SDY1LjM3NjVWMjkuNVpNNjUuMzU2NiAyOS41SDY1LjM3NjVWMjhINjUuMzU2NlYyOS41Wk02NS4zMzY1IDI5LjVINjUuMzU2NlYyOEg2NS4zMzY1VjI5LjVaTTY1LjMxNjUgMjkuNUg2NS4zMzY1VjI4SDY1LjMxNjVWMjkuNVpNNjUuMjk2NCAyOS41SDY1LjMxNjVWMjhINjUuMjk2NFYyOS41Wk02NS4yNzYzIDI5LjVINjUuMjk2NFYyOEg2NS4yNzYzVjI5LjVaTTY1LjI1NjIgMjkuNUg2NS4yNzYzVjI4SDY1LjI1NjJWMjkuNVpNNjUuMjM2IDI5LjVINjUuMjU2MlYyOEg2NS4yMzZWMjkuNVpNNjUuMjE1OCAyOS41SDY1LjIzNlYyOEg2NS4yMTU4VjI5LjVaTTY1LjE5NTUgMjkuNUg2NS4yMTU4VjI4SDY1LjE5NTVWMjkuNVpNNjUuMTc1MyAyOS41SDY1LjE5NTVWMjhINjUuMTc1M1YyOS41Wk02NS4xNTQ5IDI5LjVINjUuMTc1M1YyOEg2NS4xNTQ5VjI5LjVaTTY1LjEzNDYgMjkuNUg2NS4xNTQ5VjI4SDY1LjEzNDZWMjkuNVpNNjUuMTE0MiAyOS41SDY1LjEzNDZWMjhINjUuMTE0MlYyOS41Wk02NS4wOTM4IDI5LjVINjUuMTE0MlYyOEg2NS4wOTM4VjI5LjVaTTY1LjA3MzQgMjkuNUg2NS4wOTM4VjI4SDY1LjA3MzRWMjkuNVpNNjUuMDUyOSAyOS41SDY1LjA3MzRWMjhINjUuMDUyOVYyOS41Wk02NS4wMzI0IDI5LjVINjUuMDUyOVYyOEg2NS4wMzI0VjI5LjVaTTY1LjAxMTggMjkuNUg2NS4wMzI0VjI4SDY1LjAxMThWMjkuNVpNNjQuOTkxMyAyOS41SDY1LjAxMThWMjhINjQuOTkxM1YyOS41Wk02NC45NzA3IDI5LjVINjQuOTkxM1YyOEg2NC45NzA3VjI5LjVaTTY0Ljk1IDI5LjVINjQuOTcwN1YyOEg2NC45NVYyOS41Wk02NC45MjkzIDI5LjVINjQuOTVWMjhINjQuOTI5M1YyOS41Wk02NC45MDg2IDI5LjVINjQuOTI5M1YyOEg2NC45MDg2VjI5LjVaTTY0Ljg4NzkgMjkuNUg2NC45MDg2VjI4SDY0Ljg4NzlWMjkuNVpNNjQuODY3MSAyOS41SDY0Ljg4NzlWMjhINjQuODY3MVYyOS41Wk02NC44NDYzIDI5LjVINjQuODY3MVYyOEg2NC44NDYzVjI5LjVaTTY0LjgyNTUgMjkuNUg2NC44NDYzVjI4SDY0LjgyNTVWMjkuNVpNNjQuODA0NiAyOS41SDY0LjgyNTVWMjhINjQuODA0NlYyOS41Wk02NC43ODM3IDI5LjVINjQuODA0NlYyOEg2NC43ODM3VjI5LjVaTTY0Ljc2MjggMjkuNUg2NC43ODM3VjI4SDY0Ljc2MjhWMjkuNVpNNjQuNzQxOCAyOS41SDY0Ljc2MjhWMjhINjQuNzQxOFYyOS41Wk02NC43MjA4IDI5LjVINjQuNzQxOFYyOEg2NC43MjA4VjI5LjVaTTY0LjY5OTcgMjkuNUg2NC43MjA4VjI4SDY0LjY5OTdWMjkuNVpNNjQuNjc4NyAyOS41SDY0LjY5OTdWMjhINjQuNjc4N1YyOS41Wk02NC42NTc2IDI5LjVINjQuNjc4N1YyOEg2NC42NTc2VjI5LjVaTTY0LjYzNjQgMjkuNUg2NC42NTc2VjI4SDY0LjYzNjRWMjkuNVpNNjQuNjE1MiAyOS41SDY0LjYzNjRWMjhINjQuNjE1MlYyOS41Wk02NC41OTQgMjkuNUg2NC42MTUyVjI4SDY0LjU5NFYyOS41Wk02NC41NzI4IDI5LjVINjQuNTk0VjI4SDY0LjU3MjhWMjkuNVpNNjQuNTUxNSAyOS41SDY0LjU3MjhWMjhINjQuNTUxNVYyOS41Wk02NC41MzAyIDI5LjVINjQuNTUxNVYyOEg2NC41MzAyVjI5LjVaTTY0LjUwODkgMjkuNUg2NC41MzAyVjI4SDY0LjUwODlWMjkuNVpNNjQuNDg3NSAyOS41SDY0LjUwODlWMjhINjQuNDg3NVYyOS41Wk02NC40NjYxIDI5LjVINjQuNDg3NVYyOEg2NC40NjYxVjI5LjVaTTY0LjQ0NDcgMjkuNUg2NC40NjYxVjI4SDY0LjQ0NDdWMjkuNVpNNjQuNDIzMiAyOS41SDY0LjQ0NDdWMjhINjQuNDIzMlYyOS41Wk02NC40MDE3IDI5LjVINjQuNDIzMlYyOEg2NC40MDE3VjI5LjVaTTY0LjM4MDIgMjkuNUg2NC40MDE3VjI4SDY0LjM4MDJWMjkuNVpNNjQuMzU4NiAyOS41SDY0LjM4MDJWMjhINjQuMzU4NlYyOS41Wk02NC4zMzcgMjkuNUg2NC4zNTg2VjI4SDY0LjMzN1YyOS41Wk02NC4zMTUzIDI5LjVINjQuMzM3VjI4SDY0LjMxNTNWMjkuNVpNNjQuMjkzNyAyOS41SDY0LjMxNTNWMjhINjQuMjkzN1YyOS41Wk02NC4yNzIgMjkuNUg2NC4yOTM3VjI4SDY0LjI3MlYyOS41Wk02NC4yNTAyIDI5LjVINjQuMjcyVjI4SDY0LjI1MDJWMjkuNVpNNjQuMjI4NSAyOS41SDY0LjI1MDJWMjhINjQuMjI4NVYyOS41Wk02NC4yMDY3IDI5LjVINjQuMjI4NVYyOEg2NC4yMDY3VjI5LjVaTTY0LjE4NDggMjkuNUg2NC4yMDY3VjI4SDY0LjE4NDhWMjkuNVpNNjQuMTYzIDI5LjVINjQuMTg0OFYyOEg2NC4xNjNWMjkuNVpNNjQuMTQxMSAyOS41SDY0LjE2M1YyOEg2NC4xNDExVjI5LjVaTTY0LjExOTEgMjkuNUg2NC4xNDExVjI4SDY0LjExOTFWMjkuNVpNNjQuMDk3MiAyOS41SDY0LjExOTFWMjhINjQuMDk3MlYyOS41Wk02NC4wNzUyIDI5LjVINjQuMDk3MlYyOEg2NC4wNzUyVjI5LjVaTTY0LjA1MzEgMjkuNUg2NC4wNzUyVjI4SDY0LjA1MzFWMjkuNVpNNjQuMDMxMSAyOS41SDY0LjA1MzFWMjhINjQuMDMxMVYyOS41Wk02NC4wMDkgMjkuNUg2NC4wMzExVjI4SDY0LjAwOVYyOS41Wk02My45ODY4IDI5LjVINjQuMDA5VjI4SDYzLjk4NjhWMjkuNVpNNjMuOTY0NyAyOS41SDYzLjk4NjhWMjhINjMuOTY0N1YyOS41Wk02My45NDI1IDI5LjVINjMuOTY0N1YyOEg2My45NDI1VjI5LjVaTTYzLjkyMDIgMjkuNUg2My45NDI1VjI4SDYzLjkyMDJWMjkuNVpNNjMuODk4IDI5LjVINjMuOTIwMlYyOEg2My44OThWMjkuNVpNNjMuODc1NyAyOS41SDYzLjg5OFYyOEg2My44NzU3VjI5LjVaTTYzLjg1MzMgMjkuNUg2My44NzU3VjI4SDYzLjg1MzNWMjkuNVpNNjMuODMxIDI5LjVINjMuODUzM1YyOEg2My44MzFWMjkuNVpNNjMuODA4NiAyOS41SDYzLjgzMVYyOEg2My44MDg2VjI5LjVaTTYzLjc4NjEgMjkuNUg2My44MDg2VjI4SDYzLjc4NjFWMjkuNVpNNjMuNzYzNyAyOS41SDYzLjc4NjFWMjhINjMuNzYzN1YyOS41Wk02My43NDEyIDI5LjVINjMuNzYzN1YyOEg2My43NDEyVjI5LjVaTTYzLjcxODYgMjkuNUg2My43NDEyVjI4SDYzLjcxODZWMjkuNVpNNjMuNjk2MSAyOS41SDYzLjcxODZWMjhINjMuNjk2MVYyOS41Wk02My42NzM1IDI5LjVINjMuNjk2MVYyOEg2My42NzM1VjI5LjVaTTYzLjY1MDggMjkuNUg2My42NzM1VjI4SDYzLjY1MDhWMjkuNVpNNjMuNjI4MiAyOS41SDYzLjY1MDhWMjhINjMuNjI4MlYyOS41Wk02My42MDU1IDI5LjVINjMuNjI4MlYyOEg2My42MDU1VjI5LjVaTTYzLjU4MjcgMjkuNUg2My42MDU1VjI4SDYzLjU4MjdWMjkuNVpNNjMuNTYgMjkuNUg2My41ODI3VjI4SDYzLjU2VjI5LjVaTTYzLjUzNzIgMjkuNUg2My41NlYyOEg2My41MzcyVjI5LjVaTTYzLjUxNDMgMjkuNUg2My41MzcyVjI4SDYzLjUxNDNWMjkuNVpNNjMuNDkxNSAyOS41SDYzLjUxNDNWMjhINjMuNDkxNVYyOS41Wk02My40Njg2IDI5LjVINjMuNDkxNVYyOEg2My40Njg2VjI5LjVaTTYzLjQ0NTcgMjkuNUg2My40Njg2VjI4SDYzLjQ0NTdWMjkuNVpNNjMuNDIyNyAyOS41SDYzLjQ0NTdWMjhINjMuNDIyN1YyOS41Wk02My4zOTk3IDI5LjVINjMuNDIyN1YyOEg2My4zOTk3VjI5LjVaTTYzLjM3NjcgMjkuNUg2My4zOTk3VjI4SDYzLjM3NjdWMjkuNVpNNjMuMzUzNiAyOS41SDYzLjM3NjdWMjhINjMuMzUzNlYyOS41Wk02My4zMzA1IDI5LjVINjMuMzUzNlYyOEg2My4zMzA1VjI5LjVaTTYzLjMwNzQgMjkuNUg2My4zMzA1VjI4SDYzLjMwNzRWMjkuNVpNNjMuMjg0MiAyOS41SDYzLjMwNzRWMjhINjMuMjg0MlYyOS41Wk02My4yNjEgMjkuNUg2My4yODQyVjI4SDYzLjI2MVYyOS41Wk02My4yMzc4IDI5LjVINjMuMjYxVjI4SDYzLjIzNzhWMjkuNVpNNjMuMjE0NSAyOS41SDYzLjIzNzhWMjhINjMuMjE0NVYyOS41Wk02My4xOTEyIDI5LjVINjMuMjE0NVYyOEg2My4xOTEyVjI5LjVaTTYzLjE2NzkgMjkuNUg2My4xOTEyVjI4SDYzLjE2NzlWMjkuNVpNNjMuMTQ0NiAyOS41SDYzLjE2NzlWMjhINjMuMTQ0NlYyOS41Wk02My4xMjEyIDI5LjVINjMuMTQ0NlYyOEg2My4xMjEyVjI5LjVaTTYzLjA5NzcgMjkuNUg2My4xMjEyVjI4SDYzLjA5NzdWMjkuNVpNNjMuMDc0MyAyOS41SDYzLjA5NzdWMjhINjMuMDc0M1YyOS41Wk02My4wNTA4IDI5LjVINjMuMDc0M1YyOEg2My4wNTA4VjI5LjVaTTYzLjAyNzMgMjkuNUg2My4wNTA4VjI4SDYzLjAyNzNWMjkuNVpNNjMuMDAzNyAyOS41SDYzLjAyNzNWMjhINjMuMDAzN1YyOS41Wk02Mi45ODAxIDI5LjVINjMuMDAzN1YyOEg2Mi45ODAxVjI5LjVaTTYyLjk1NjUgMjkuNUg2Mi45ODAxVjI4SDYyLjk1NjVWMjkuNVpNNjIuOTMyOCAyOS41SDYyLjk1NjVWMjhINjIuOTMyOFYyOS41Wk02Mi45MDkxIDI5LjVINjIuOTMyOFYyOEg2Mi45MDkxVjI5LjVaTTYyLjg4NTQgMjkuNUg2Mi45MDkxVjI4SDYyLjg4NTRWMjkuNVpNNjIuODYxNiAyOS41SDYyLjg4NTRWMjhINjIuODYxNlYyOS41Wk02Mi44Mzc4IDI5LjVINjIuODYxNlYyOEg2Mi44Mzc4VjI5LjVaTTYyLjgxNCAyOS41SDYyLjgzNzhWMjhINjIuODE0VjI5LjVaTTYyLjc5MDIgMjkuNUg2Mi44MTRWMjhINjIuNzkwMlYyOS41Wk02Mi43NjYzIDI5LjVINjIuNzkwMlYyOEg2Mi43NjYzVjI5LjVaTTYyLjc0MjMgMjkuNUg2Mi43NjYzVjI4SDYyLjc0MjNWMjkuNVpNNjIuNzE4NCAyOS41SDYyLjc0MjNWMjhINjIuNzE4NFYyOS41Wk02Mi42OTQ0IDI5LjVINjIuNzE4NFYyOEg2Mi42OTQ0VjI5LjVaTTYyLjY3MDQgMjkuNUg2Mi42OTQ0VjI4SDYyLjY3MDRWMjkuNVpNNjIuNjQ2MyAyOS41SDYyLjY3MDRWMjhINjIuNjQ2M1YyOS41Wk02Mi42MjIyIDI5LjVINjIuNjQ2M1YyOEg2Mi42MjIyVjI5LjVaTTYyLjU5ODEgMjkuNUg2Mi42MjIyVjI4SDYyLjU5ODFWMjkuNVpNNjIuNTczOSAyOS41SDYyLjU5ODFWMjhINjIuNTczOVYyOS41Wk02Mi41NDk4IDI5LjVINjIuNTczOVYyOEg2Mi41NDk4VjI5LjVaTTYyLjUyNTUgMjkuNUg2Mi41NDk4VjI4SDYyLjUyNTVWMjkuNVpNNjIuNTAxMyAyOS41SDYyLjUyNTVWMjhINjIuNTAxM1YyOS41Wk02Mi40NzcgMjkuNUg2Mi41MDEzVjI4SDYyLjQ3N1YyOS41Wk02Mi40NTI3IDI5LjVINjIuNDc3VjI4SDYyLjQ1MjdWMjkuNVpNNjIuNDI4MyAyOS41SDYyLjQ1MjdWMjhINjIuNDI4M1YyOS41Wk02Mi40MDM5IDI5LjVINjIuNDI4M1YyOEg2Mi40MDM5VjI5LjVaTTYyLjM3OTUgMjkuNUg2Mi40MDM5VjI4SDYyLjM3OTVWMjkuNVpNNjIuMzU1IDI5LjVINjIuMzc5NVYyOEg2Mi4zNTVWMjkuNVpNNjIuMzMwNiAyOS41SDYyLjM1NVYyOEg2Mi4zMzA2VjI5LjVaTTYyLjMwNiAyOS41SDYyLjMzMDZWMjhINjIuMzA2VjI5LjVaTTYyLjI4MTUgMjkuNUg2Mi4zMDZWMjhINjIuMjgxNVYyOS41Wk02Mi4yNTY5IDI5LjVINjIuMjgxNVYyOEg2Mi4yNTY5VjI5LjVaTTYyLjIzMjMgMjkuNUg2Mi4yNTY5VjI4SDYyLjIzMjNWMjkuNVpNNjIuMjA3NiAyOS41SDYyLjIzMjNWMjhINjIuMjA3NlYyOS41Wk02Mi4xODI5IDI5LjVINjIuMjA3NlYyOEg2Mi4xODI5VjI5LjVaTTYyLjE1ODIgMjkuNUg2Mi4xODI5VjI4SDYyLjE1ODJWMjkuNVpNNjIuMTMzNSAyOS41SDYyLjE1ODJWMjhINjIuMTMzNVYyOS41Wk02Mi4xMDg3IDI5LjVINjIuMTMzNVYyOEg2Mi4xMDg3VjI5LjVaTTYyLjA4MzkgMjkuNUg2Mi4xMDg3VjI4SDYyLjA4MzlWMjkuNVpNNjIuMDU5IDI5LjVINjIuMDgzOVYyOEg2Mi4wNTlWMjkuNVpNNjIuMDM0MSAyOS41SDYyLjA1OVYyOEg2Mi4wMzQxVjI5LjVaTTYyLjAwOTIgMjkuNUg2Mi4wMzQxVjI4SDYyLjAwOTJWMjkuNVpNNjEuOTg0MiAyOS41SDYyLjAwOTJWMjhINjEuOTg0MlYyOS41Wk02MS45NTkzIDI5LjVINjEuOTg0MlYyOEg2MS45NTkzVjI5LjVaTTYxLjkzNDIgMjkuNUg2MS45NTkzVjI4SDYxLjkzNDJWMjkuNVpNNjEuOTA5MiAyOS41SDYxLjkzNDJWMjhINjEuOTA5MlYyOS41Wk02MS44ODQxIDI5LjVINjEuOTA5MlYyOEg2MS44ODQxVjI5LjVaTTYxLjg1OSAyOS41SDYxLjg4NDFWMjhINjEuODU5VjI5LjVaTTYxLjgzMzggMjkuNUg2MS44NTlWMjhINjEuODMzOFYyOS41Wk02MS44MDg2IDI5LjVINjEuODMzOFYyOEg2MS44MDg2VjI5LjVaTTYxLjc4MzQgMjkuNUg2MS44MDg2VjI4SDYxLjc4MzRWMjkuNVpNNjEuNzU4MiAyOS41SDYxLjc4MzRWMjhINjEuNzU4MlYyOS41Wk02MS43MzI5IDI5LjVINjEuNzU4MlYyOEg2MS43MzI5VjI5LjVaTTYxLjcwNzYgMjkuNUg2MS43MzI5VjI4SDYxLjcwNzZWMjkuNVpNNjEuNjgyMiAyOS41SDYxLjcwNzZWMjhINjEuNjgyMlYyOS41Wk02MS42NTY4IDI5LjVINjEuNjgyMlYyOEg2MS42NTY4VjI5LjVaTTYxLjYzMTQgMjkuNUg2MS42NTY4VjI4SDYxLjYzMTRWMjkuNVpNNjEuNjA2IDI5LjVINjEuNjMxNFYyOEg2MS42MDZWMjkuNVpNNjEuNTgwNSAyOS41SDYxLjYwNlYyOEg2MS41ODA1VjI5LjVaTTYxLjU1NSAyOS41SDYxLjU4MDVWMjhINjEuNTU1VjI5LjVaTTYxLjUyOTQgMjkuNUg2MS41NTVWMjhINjEuNTI5NFYyOS41Wk02MS41MDM4IDI5LjVINjEuNTI5NFYyOEg2MS41MDM4VjI5LjVaTTYxLjQ3ODIgMjkuNUg2MS41MDM4VjI4SDYxLjQ3ODJWMjkuNVpNNjEuNDUyNiAyOS41SDYxLjQ3ODJWMjhINjEuNDUyNlYyOS41Wk02MS40MjY5IDI5LjVINjEuNDUyNlYyOEg2MS40MjY5VjI5LjVaTTYxLjQwMTIgMjkuNUg2MS40MjY5VjI4SDYxLjQwMTJWMjkuNVpNNjEuMzc1NCAyOS41SDYxLjQwMTJWMjhINjEuMzc1NFYyOS41Wk02MS4zNDk3IDI5LjVINjEuMzc1NFYyOEg2MS4zNDk3VjI5LjVaTTYxLjMyMzggMjkuNUg2MS4zNDk3VjI4SDYxLjMyMzhWMjkuNVpNNjEuMjk4IDI5LjVINjEuMzIzOFYyOEg2MS4yOThWMjkuNVpNNjEuMjcyMSAyOS41SDYxLjI5OFYyOEg2MS4yNzIxVjI5LjVaTTYxLjI0NjIgMjkuNUg2MS4yNzIxVjI4SDYxLjI0NjJWMjkuNVpNNjEuMjIwMiAyOS41SDYxLjI0NjJWMjhINjEuMjIwMlYyOS41Wk02MS4xOTQzIDI5LjVINjEuMjIwMlYyOEg2MS4xOTQzVjI5LjVaTTYxLjE2ODMgMjkuNUg2MS4xOTQzVjI4SDYxLjE2ODNWMjkuNVpNNjEuMTQyMiAyOS41SDYxLjE2ODNWMjhINjEuMTQyMlYyOS41Wk02MS4xMTYxIDI5LjVINjEuMTQyMlYyOEg2MS4xMTYxVjI5LjVaTTYxLjA5IDI5LjVINjEuMTE2MVYyOEg2MS4wOVYyOS41Wk02MS4wNjM5IDI5LjVINjEuMDlWMjhINjEuMDYzOVYyOS41Wk02MS4wMzc3IDI5LjVINjEuMDYzOVYyOEg2MS4wMzc3VjI5LjVaTTYxLjAxMTUgMjkuNUg2MS4wMzc3VjI4SDYxLjAxMTVWMjkuNVpNNjAuOTg1MiAyOS41SDYxLjAxMTVWMjhINjAuOTg1MlYyOS41Wk02MC45NTkgMjkuNUg2MC45ODUyVjI4SDYwLjk1OVYyOS41Wk02MC45MzI2IDI5LjVINjAuOTU5VjI4SDYwLjkzMjZWMjkuNVpNNjAuOTA2MyAyOS41SDYwLjkzMjZWMjhINjAuOTA2M1YyOS41Wk02MC44Nzk5IDI5LjVINjAuOTA2M1YyOEg2MC44Nzk5VjI5LjVaTTYwLjg1MzUgMjkuNUg2MC44Nzk5VjI4SDYwLjg1MzVWMjkuNVpNNjAuODI3MSAyOS41SDYwLjg1MzVWMjhINjAuODI3MVYyOS41Wk02MC44MDA2IDI5LjVINjAuODI3MVYyOEg2MC44MDA2VjI5LjVaTTYwLjc3NDEgMjkuNUg2MC44MDA2VjI4SDYwLjc3NDFWMjkuNVpNNjAuNzQ3NSAyOS41SDYwLjc3NDFWMjhINjAuNzQ3NVYyOS41Wk02MC43MjA5IDI5LjVINjAuNzQ3NVYyOEg2MC43MjA5VjI5LjVaTTYwLjY5NDMgMjkuNUg2MC43MjA5VjI4SDYwLjY5NDNWMjkuNVpNNjAuNjY3NyAyOS41SDYwLjY5NDNWMjhINjAuNjY3N1YyOS41Wk02MC42NDEgMjkuNUg2MC42Njc3VjI4SDYwLjY0MVYyOS41Wk02MC42MTQzIDI5LjVINjAuNjQxVjI4SDYwLjYxNDNWMjkuNVpNNjAuNTg3NiAyOS41SDYwLjYxNDNWMjhINjAuNTg3NlYyOS41Wk02MC41NjA4IDI5LjVINjAuNTg3NlYyOEg2MC41NjA4VjI5LjVaTTYwLjUzNCAyOS41SDYwLjU2MDhWMjhINjAuNTM0VjI5LjVaTTYwLjUwNzEgMjkuNUg2MC41MzRWMjhINjAuNTA3MVYyOS41Wk02MC40ODAzIDI5LjVINjAuNTA3MVYyOEg2MC40ODAzVjI5LjVaTTYwLjQ1MzQgMjkuNUg2MC40ODAzVjI4SDYwLjQ1MzRWMjkuNVpNNjAuNDI2NCAyOS41SDYwLjQ1MzRWMjhINjAuNDI2NFYyOS41Wk02MC4zOTk0IDI5LjVINjAuNDI2NFYyOEg2MC4zOTk0VjI5LjVaTTYwLjM3MjQgMjkuNUg2MC4zOTk0VjI4SDYwLjM3MjRWMjkuNVpNNjAuMzQ1NCAyOS41SDYwLjM3MjRWMjhINjAuMzQ1NFYyOS41Wk02MC4zMTgzIDI5LjVINjAuMzQ1NFYyOEg2MC4zMTgzVjI5LjVaTTYwLjI5MTIgMjkuNUg2MC4zMTgzVjI4SDYwLjI5MTJWMjkuNVpNNjAuMjY0MSAyOS41SDYwLjI5MTJWMjhINjAuMjY0MVYyOS41Wk02MC4yMzY5IDI5LjVINjAuMjY0MVYyOEg2MC4yMzY5VjI5LjVaTTYwLjIwOTcgMjkuNUg2MC4yMzY5VjI4SDYwLjIwOTdWMjkuNVpNNjAuMTgyNCAyOS41SDYwLjIwOTdWMjhINjAuMTgyNFYyOS41Wk02MC4xNTUyIDI5LjVINjAuMTgyNFYyOEg2MC4xNTUyVjI5LjVaTTYwLjEyNzkgMjkuNUg2MC4xNTUyVjI4SDYwLjEyNzlWMjkuNVpNNjAuMTAwNSAyOS41SDYwLjEyNzlWMjhINjAuMTAwNVYyOS41Wk02MC4wNzMxIDI5LjVINjAuMTAwNVYyOEg2MC4wNzMxVjI5LjVaTTYwLjA0NTcgMjkuNUg2MC4wNzMxVjI4SDYwLjA0NTdWMjkuNVpNNjAuMDE4MyAyOS41SDYwLjA0NTdWMjhINjAuMDE4M1YyOS41Wk01OS45OTA4IDI5LjVINjAuMDE4M1YyOEg1OS45OTA4VjI5LjVaTTU5Ljk2MzMgMjkuNUg1OS45OTA4VjI4SDU5Ljk2MzNWMjkuNVpNNTkuOTM1OCAyOS41SDU5Ljk2MzNWMjhINTkuOTM1OFYyOS41Wk01OS45MDgyIDI5LjVINTkuOTM1OFYyOEg1OS45MDgyVjI5LjVaTTU5Ljg4MDYgMjkuNUg1OS45MDgyVjI4SDU5Ljg4MDZWMjkuNVpNNTkuODUzIDI5LjVINTkuODgwNlYyOEg1OS44NTNWMjkuNVpNNTkuODI1MyAyOS41SDU5Ljg1M1YyOEg1OS44MjUzVjI5LjVaTTU5Ljc5NzYgMjkuNUg1OS44MjUzVjI4SDU5Ljc5NzZWMjkuNVpNNTkuNzY5OSAyOS41SDU5Ljc5NzZWMjhINTkuNzY5OVYyOS41Wk01OS43NDIxIDI5LjVINTkuNzY5OVYyOEg1OS43NDIxVjI5LjVaTTU5LjcxNDMgMjkuNUg1OS43NDIxVjI4SDU5LjcxNDNWMjkuNVpNNTkuNjg2NCAyOS41SDU5LjcxNDNWMjhINTkuNjg2NFYyOS41Wk01OS42NTg2IDI5LjVINTkuNjg2NFYyOEg1OS42NTg2VjI5LjVaTTU5LjYzMDcgMjkuNUg1OS42NTg2VjI4SDU5LjYzMDdWMjkuNVpNNTkuNjAyNyAyOS41SDU5LjYzMDdWMjhINTkuNjAyN1YyOS41Wk01OS41NzQ4IDI5LjVINTkuNjAyN1YyOEg1OS41NzQ4VjI5LjVaTTU5LjU0NjggMjkuNUg1OS41NzQ4VjI4SDU5LjU0NjhWMjkuNVpNNTkuNTE4NyAyOS41SDU5LjU0NjhWMjhINTkuNTE4N1YyOS41Wk01OS40OTA3IDI5LjVINTkuNTE4N1YyOEg1OS40OTA3VjI5LjVaTTU5LjQ2MjUgMjkuNUg1OS40OTA3VjI4SDU5LjQ2MjVWMjkuNVpNNTkuNDM0NCAyOS41SDU5LjQ2MjVWMjhINTkuNDM0NFYyOS41Wk01OS40MDYyIDI5LjVINTkuNDM0NFYyOEg1OS40MDYyVjI5LjVaTTU5LjM3OCAyOS41SDU5LjQwNjJWMjhINTkuMzc4VjI5LjVaTTU5LjM0OTggMjkuNUg1OS4zNzhWMjhINTkuMzQ5OFYyOS41Wk01OS4zMjE1IDI5LjVINTkuMzQ5OFYyOEg1OS4zMjE1VjI5LjVaTTU5LjI5MzIgMjkuNUg1OS4zMjE1VjI4SDU5LjI5MzJWMjkuNVpNNTkuMjY0OSAyOS41SDU5LjI5MzJWMjhINTkuMjY0OVYyOS41Wk01OS4yMzY1IDI5LjVINTkuMjY0OVYyOEg1OS4yMzY1VjI5LjVaTTU5LjIwODEgMjkuNUg1OS4yMzY1VjI4SDU5LjIwODFWMjkuNVpNNTkuMTc5NyAyOS41SDU5LjIwODFWMjhINTkuMTc5N1YyOS41Wk01OS4xNTEyIDI5LjVINTkuMTc5N1YyOEg1OS4xNTEyVjI5LjVaTTU5LjEyMjcgMjkuNUg1OS4xNTEyVjI4SDU5LjEyMjdWMjkuNVpNNTkuMDk0MiAyOS41SDU5LjEyMjdWMjhINTkuMDk0MlYyOS41Wk01OS4wNjU2IDI5LjVINTkuMDk0MlYyOEg1OS4wNjU2VjI5LjVaTTU5LjAzNyAyOS41SDU5LjA2NTZWMjhINTkuMDM3VjI5LjVaTTU5LjAwODQgMjkuNUg1OS4wMzdWMjhINTkuMDA4NFYyOS41Wk01OC45Nzk3IDI5LjVINTkuMDA4NFYyOEg1OC45Nzk3VjI5LjVaTTU4Ljk1MSAyOS41SDU4Ljk3OTdWMjhINTguOTUxVjI5LjVaTTU4LjkyMjMgMjkuNUg1OC45NTFWMjhINTguOTIyM1YyOS41Wk01OC44OTM1IDI5LjVINTguOTIyM1YyOEg1OC44OTM1VjI5LjVaTTU4Ljg2NDcgMjkuNUg1OC44OTM1VjI4SDU4Ljg2NDdWMjkuNVpNNTguODM1OSAyOS41SDU4Ljg2NDdWMjhINTguODM1OVYyOS41Wk01OC44MDcgMjkuNUg1OC44MzU5VjI4SDU4LjgwN1YyOS41Wk01OC43NzgxIDI5LjVINTguODA3VjI4SDU4Ljc3ODFWMjkuNVpNNTguNzQ5MiAyOS41SDU4Ljc3ODFWMjhINTguNzQ5MlYyOS41Wk01OC43MjAyIDI5LjVINTguNzQ5MlYyOEg1OC43MjAyVjI5LjVaTTU4LjY5MTIgMjkuNUg1OC43MjAyVjI4SDU4LjY5MTJWMjkuNVpNNTguNjYyMiAyOS41SDU4LjY5MTJWMjhINTguNjYyMlYyOS41Wk01OC42MzMxIDI5LjVINTguNjYyMlYyOEg1OC42MzMxVjI5LjVaTTU4LjYwNDEgMjkuNUg1OC42MzMxVjI4SDU4LjYwNDFWMjkuNVpNNTguNTc0OSAyOS41SDU4LjYwNDFWMjhINTguNTc0OVYyOS41Wk01OC41NDU4IDI5LjVINTguNTc0OVYyOEg1OC41NDU4VjI5LjVaTTU4LjUxNjYgMjkuNUg1OC41NDU4VjI4SDU4LjUxNjZWMjkuNVpNNTguNDg3MyAyOS41SDU4LjUxNjZWMjhINTguNDg3M1YyOS41Wk01OC40NTgxIDI5LjVINTguNDg3M1YyOEg1OC40NTgxVjI5LjVaTTU4LjQyODggMjkuNUg1OC40NTgxVjI4SDU4LjQyODhWMjkuNVpNNTguMzk5NCAyOS41SDU4LjQyODhWMjhINTguMzk5NFYyOS41Wk01OC4zNzAxIDI5LjVINTguMzk5NFYyOEg1OC4zNzAxVjI5LjVaTTU4LjM0MDcgMjkuNUg1OC4zNzAxVjI4SDU4LjM0MDdWMjkuNVpNNTguMzExMyAyOS41SDU4LjM0MDdWMjhINTguMzExM1YyOS41Wk01OC4yODE4IDI5LjVINTguMzExM1YyOEg1OC4yODE4VjI5LjVaTTU4LjI1MjMgMjkuNUg1OC4yODE4VjI4SDU4LjI1MjNWMjkuNVpNNTguMjIyOCAyOS41SDU4LjI1MjNWMjhINTguMjIyOFYyOS41Wk01OC4xOTMyIDI5LjVINTguMjIyOFYyOEg1OC4xOTMyVjI5LjVaTTU4LjE2MzYgMjkuNUg1OC4xOTMyVjI4SDU4LjE2MzZWMjkuNVpNNTguMTM0IDI5LjVINTguMTYzNlYyOEg1OC4xMzRWMjkuNVpNNTguMTA0MyAyOS41SDU4LjEzNFYyOEg1OC4xMDQzVjI5LjVaTTU4LjA3NDYgMjkuNUg1OC4xMDQzVjI4SDU4LjA3NDZWMjkuNVpNNTguMDQ0OSAyOS41SDU4LjA3NDZWMjhINTguMDQ0OVYyOS41Wk01OC4wMTUxIDI5LjVINTguMDQ0OVYyOEg1OC4wMTUxVjI5LjVaTTU3Ljk4NTMgMjkuNUg1OC4wMTUxVjI4SDU3Ljk4NTNWMjkuNVpNNTcuOTU1NSAyOS41SDU3Ljk4NTNWMjhINTcuOTU1NVYyOS41Wk01Ny45MjU3IDI5LjVINTcuOTU1NVYyOEg1Ny45MjU3VjI5LjVaTTU3Ljg5NTggMjkuNUg1Ny45MjU3VjI4SDU3Ljg5NThWMjkuNVpNNTcuODY1OCAyOS41SDU3Ljg5NThWMjhINTcuODY1OFYyOS41Wk01Ny44MzU5IDI5LjVINTcuODY1OFYyOEg1Ny44MzU5VjI5LjVaTTU3LjgwNTkgMjkuNUg1Ny44MzU5VjI4SDU3LjgwNTlWMjkuNVpNNTcuNzc1OSAyOS41SDU3LjgwNTlWMjhINTcuNzc1OVYyOS41Wk01Ny43NDU4IDI5LjVINTcuNzc1OVYyOEg1Ny43NDU4VjI5LjVaTTU3LjcxNTcgMjkuNUg1Ny43NDU4VjI4SDU3LjcxNTdWMjkuNVpNNTcuNjg1NiAyOS41SDU3LjcxNTdWMjhINTcuNjg1NlYyOS41Wk01Ny42NTU0IDI5LjVINTcuNjg1NlYyOEg1Ny42NTU0VjI5LjVaTTU3LjYyNTIgMjkuNUg1Ny42NTU0VjI4SDU3LjYyNTJWMjkuNVpNNTcuNTk1IDI5LjVINTcuNjI1MlYyOEg1Ny41OTVWMjkuNVpNNTcuNTY0OCAyOS41SDU3LjU5NVYyOEg1Ny41NjQ4VjI5LjVaTTU3LjUzNDUgMjkuNUg1Ny41NjQ4VjI4SDU3LjUzNDVWMjkuNVpNNTcuNTA0MSAyOS41SDU3LjUzNDVWMjhINTcuNTA0MVYyOS41Wk01Ny40NzM4IDI5LjVINTcuNTA0MVYyOEg1Ny40NzM4VjI5LjVaTTU3LjQ0MzQgMjkuNUg1Ny40NzM4VjI4SDU3LjQ0MzRWMjkuNVpNNTcuNDEzIDI5LjVINTcuNDQzNFYyOEg1Ny40MTNWMjkuNVpNNTcuMzgyNSAyOS41SDU3LjQxM1YyOEg1Ny4zODI1VjI5LjVaTTU3LjM1MiAyOS41SDU3LjM4MjVWMjhINTcuMzUyVjI5LjVaTTU3LjMyMTUgMjkuNUg1Ny4zNTJWMjhINTcuMzIxNVYyOS41Wk01Ny4yOTA5IDI5LjVINTcuMzIxNVYyOEg1Ny4yOTA5VjI5LjVaTTU3LjI2MDMgMjkuNUg1Ny4yOTA5VjI4SDU3LjI2MDNWMjkuNVpNNTcuMjI5NyAyOS41SDU3LjI2MDNWMjhINTcuMjI5N1YyOS41Wk01Ny4xOTkxIDI5LjVINTcuMjI5N1YyOEg1Ny4xOTkxVjI5LjVaTTU3LjE2ODQgMjkuNUg1Ny4xOTkxVjI4SDU3LjE2ODRWMjkuNVpNNTcuMTM3NyAyOS41SDU3LjE2ODRWMjhINTcuMTM3N1YyOS41Wk01Ny4xMDY5IDI5LjVINTcuMTM3N1YyOEg1Ny4xMDY5VjI5LjVaTTU3LjA3NjEgMjkuNUg1Ny4xMDY5VjI4SDU3LjA3NjFWMjkuNVpNNTcuMDQ1MyAyOS41SDU3LjA3NjFWMjhINTcuMDQ1M1YyOS41Wk01Ny4wMTQ0IDI5LjVINTcuMDQ1M1YyOEg1Ny4wMTQ0VjI5LjVaTTU2Ljk4MzYgMjkuNUg1Ny4wMTQ0VjI4SDU2Ljk4MzZWMjkuNVpNNTYuOTUyNiAyOS41SDU2Ljk4MzZWMjhINTYuOTUyNlYyOS41Wk01Ni45MjE3IDI5LjVINTYuOTUyNlYyOEg1Ni45MjE3VjI5LjVaTTU2Ljg5MDcgMjkuNUg1Ni45MjE3VjI4SDU2Ljg5MDdWMjkuNVpNNTYuODU5NyAyOS41SDU2Ljg5MDdWMjhINTYuODU5N1YyOS41Wk01Ni44Mjg2IDI5LjVINTYuODU5N1YyOEg1Ni44Mjg2VjI5LjVaTTU2Ljc5NzUgMjkuNUg1Ni44Mjg2VjI4SDU2Ljc5NzVWMjkuNVpNNTYuNzY2NCAyOS41SDU2Ljc5NzVWMjhINTYuNzY2NFYyOS41Wk01Ni43MzUzIDI5LjVINTYuNzY2NFYyOEg1Ni43MzUzVjI5LjVaTTU2LjcwNDEgMjkuNUg1Ni43MzUzVjI4SDU2LjcwNDFWMjkuNVpNNTYuNjcyOCAyOS41SDU2LjcwNDFWMjhINTYuNjcyOFYyOS41Wk01Ni42NDE2IDI5LjVINTYuNjcyOFYyOEg1Ni42NDE2VjI5LjVaTTU2LjYxMDMgMjkuNUg1Ni42NDE2VjI4SDU2LjYxMDNWMjkuNVpNNTYuNTc5IDI5LjVINTYuNjEwM1YyOEg1Ni41NzlWMjkuNVpNNTYuNTQ3NiAyOS41SDU2LjU3OVYyOEg1Ni41NDc2VjI5LjVaTTU2LjUxNjMgMjkuNUg1Ni41NDc2VjI4SDU2LjUxNjNWMjkuNVpNNTYuNDg0OCAyOS41SDU2LjUxNjNWMjhINTYuNDg0OFYyOS41Wk01Ni40NTM0IDI5LjVINTYuNDg0OFYyOEg1Ni40NTM0VjI5LjVaTTU2LjQyMTkgMjkuNUg1Ni40NTM0VjI4SDU2LjQyMTlWMjkuNVpNNTYuMzkwNCAyOS41SDU2LjQyMTlWMjhINTYuMzkwNFYyOS41Wk01Ni4zNTg4IDI5LjVINTYuMzkwNFYyOEg1Ni4zNTg4VjI5LjVaTTU2LjMyNzIgMjkuNUg1Ni4zNTg4VjI4SDU2LjMyNzJWMjkuNVpNNTYuMjk1NiAyOS41SDU2LjMyNzJWMjhINTYuMjk1NlYyOS41Wk01Ni4yNjQgMjkuNUg1Ni4yOTU2VjI4SDU2LjI2NFYyOS41Wk01Ni4yMzIzIDI5LjVINTYuMjY0VjI4SDU2LjIzMjNWMjkuNVpNNTYuMjAwNiAyOS41SDU2LjIzMjNWMjhINTYuMjAwNlYyOS41Wk01Ni4xNjg4IDI5LjVINTYuMjAwNlYyOEg1Ni4xNjg4VjI5LjVaTTU2LjEzNyAyOS41SDU2LjE2ODhWMjhINTYuMTM3VjI5LjVaTTU2LjEwNTIgMjkuNUg1Ni4xMzdWMjhINTYuMTA1MlYyOS41Wk01Ni4wNzM0IDI5LjVINTYuMTA1MlYyOEg1Ni4wNzM0VjI5LjVaTTU2LjA0MTUgMjkuNUg1Ni4wNzM0VjI4SDU2LjA0MTVWMjkuNVpNNTYuMDA5NiAyOS41SDU2LjA0MTVWMjhINTYuMDA5NlYyOS41Wk01NS45Nzc2IDI5LjVINTYuMDA5NlYyOEg1NS45Nzc2VjI5LjVaTTU1Ljk0NTYgMjkuNUg1NS45Nzc2VjI4SDU1Ljk0NTZWMjkuNVpNNTUuOTEzNiAyOS41SDU1Ljk0NTZWMjhINTUuOTEzNlYyOS41Wk01NS44ODE2IDI5LjVINTUuOTEzNlYyOEg1NS44ODE2VjI5LjVaTTU1Ljg0OTUgMjkuNUg1NS44ODE2VjI4SDU1Ljg0OTVWMjkuNVpNNTUuODE3NCAyOS41SDU1Ljg0OTVWMjhINTUuODE3NFYyOS41Wk01NS43ODUyIDI5LjVINTUuODE3NFYyOEg1NS43ODUyVjI5LjVaTTU1Ljc1MzEgMjkuNUg1NS43ODUyVjI4SDU1Ljc1MzFWMjkuNVpNNTUuNzIwOCAyOS41SDU1Ljc1MzFWMjhINTUuNzIwOFYyOS41Wk01NS42ODg2IDI5LjVINTUuNzIwOFYyOEg1NS42ODg2VjI5LjVaTTU1LjY1NjMgMjkuNUg1NS42ODg2VjI4SDU1LjY1NjNWMjkuNVpNNTUuNjI0IDI5LjVINTUuNjU2M1YyOEg1NS42MjRWMjkuNVpNNTUuNTkxNyAyOS41SDU1LjYyNFYyOEg1NS41OTE3VjI5LjVaTTU1LjU1OTMgMjkuNUg1NS41OTE3VjI4SDU1LjU1OTNWMjkuNVpNNTUuNTI2OSAyOS41SDU1LjU1OTNWMjhINTUuNTI2OVYyOS41Wk01NS40OTQ0IDI5LjVINTUuNTI2OVYyOEg1NS40OTQ0VjI5LjVaTTU1LjQ2MTkgMjkuNUg1NS40OTQ0VjI4SDU1LjQ2MTlWMjkuNVpNNTUuNDI5NCAyOS41SDU1LjQ2MTlWMjhINTUuNDI5NFYyOS41Wk01NS4zOTY5IDI5LjVINTUuNDI5NFYyOEg1NS4zOTY5VjI5LjVaTTU1LjM2NDMgMjkuNUg1NS4zOTY5VjI4SDU1LjM2NDNWMjkuNVpNNTUuMzMxNyAyOS41SDU1LjM2NDNWMjhINTUuMzMxN1YyOS41Wk01NS4yOTkgMjkuNUg1NS4zMzE3VjI4SDU1LjI5OVYyOS41Wk01NS4yNjY0IDI5LjVINTUuMjk5VjI4SDU1LjI2NjRWMjkuNVpNNTUuMjMzNiAyOS41SDU1LjI2NjRWMjhINTUuMjMzNlYyOS41Wk01NS4yMDA5IDI5LjVINTUuMjMzNlYyOEg1NS4yMDA5VjI5LjVaTTU1LjE2ODEgMjkuNUg1NS4yMDA5VjI4SDU1LjE2ODFWMjkuNVpNNTUuMTM1MyAyOS41SDU1LjE2ODFWMjhINTUuMTM1M1YyOS41Wk01NS4xMDI1IDI5LjVINTUuMTM1M1YyOEg1NS4xMDI1VjI5LjVaTTU1LjA2OTYgMjkuNUg1NS4xMDI1VjI4SDU1LjA2OTZWMjkuNVpNNTUuMDM2NyAyOS41SDU1LjA2OTZWMjhINTUuMDM2N1YyOS41Wk01NS4wMDM3IDI5LjVINTUuMDM2N1YyOEg1NS4wMDM3VjI5LjVaTTU0Ljk3MDggMjkuNUg1NS4wMDM3VjI4SDU0Ljk3MDhWMjkuNVpNNTQuOTM3NyAyOS41SDU0Ljk3MDhWMjhINTQuOTM3N1YyOS41Wk01NC45MDQ3IDI5LjVINTQuOTM3N1YyOEg1NC45MDQ3VjI5LjVaTTU0Ljg3MTYgMjkuNUg1NC45MDQ3VjI4SDU0Ljg3MTZWMjkuNVpNNTQuODM4NSAyOS41SDU0Ljg3MTZWMjhINTQuODM4NVYyOS41Wk01NC44MDU0IDI5LjVINTQuODM4NVYyOEg1NC44MDU0VjI5LjVaTTU0Ljc3MjIgMjkuNUg1NC44MDU0VjI4SDU0Ljc3MjJWMjkuNVpNNTQuNzM5IDI5LjVINTQuNzcyMlYyOEg1NC43MzlWMjkuNVpNNTQuNzA1NyAyOS41SDU0LjczOVYyOEg1NC43MDU3VjI5LjVaTTU0LjY3MjUgMjkuNUg1NC43MDU3VjI4SDU0LjY3MjVWMjkuNVpNNTQuNjM5MiAyOS41SDU0LjY3MjVWMjhINTQuNjM5MlYyOS41Wk01NC42MDU4IDI5LjVINTQuNjM5MlYyOEg1NC42MDU4VjI5LjVaTTU0LjU3MjQgMjkuNUg1NC42MDU4VjI4SDU0LjU3MjRWMjkuNVpNNTQuNTM5IDI5LjVINTQuNTcyNFYyOEg1NC41MzlWMjkuNVpNNTQuNTA1NiAyOS41SDU0LjUzOVYyOEg1NC41MDU2VjI5LjVaTTU0LjQ3MjEgMjkuNUg1NC41MDU2VjI4SDU0LjQ3MjFWMjkuNVpNNTQuNDM4NiAyOS41SDU0LjQ3MjFWMjhINTQuNDM4NlYyOS41Wk01NC40MDUxIDI5LjVINTQuNDM4NlYyOEg1NC40MDUxVjI5LjVaTTU0LjM3MTUgMjkuNUg1NC40MDUxVjI4SDU0LjM3MTVWMjkuNVpNNTQuMzM3OSAyOS41SDU0LjM3MTVWMjhINTQuMzM3OVYyOS41Wk01NC4zMDQzIDI5LjVINTQuMzM3OVYyOEg1NC4zMDQzVjI5LjVaTTU0LjI3MDYgMjkuNUg1NC4zMDQzVjI4SDU0LjI3MDZWMjkuNVpNNTQuMjM2OSAyOS41SDU0LjI3MDZWMjhINTQuMjM2OVYyOS41Wk01NC4yMDMxIDI5LjVINTQuMjM2OVYyOEg1NC4yMDMxVjI5LjVaTTU0LjE2OTQgMjkuNUg1NC4yMDMxVjI4SDU0LjE2OTRWMjkuNVpNNTQuMTM1NiAyOS41SDU0LjE2OTRWMjhINTQuMTM1NlYyOS41Wk01NC4xMDE3IDI5LjVINTQuMTM1NlYyOEg1NC4xMDE3VjI5LjVaTTU0LjA2NzggMjkuNUg1NC4xMDE3VjI4SDU0LjA2NzhWMjkuNVpNNTQuMDMzOSAyOS41SDU0LjA2NzhWMjhINTQuMDMzOVYyOS41Wk01NCAyOS41SDU0LjAzMzlWMjhINTRWMjkuNVpNNzEuMjc0OSAyOS41SDcxLjI4NTFWMjhINzEuMjc0OVYyOS41Wk03MC41MjQ5IDI3LjI1VjI4Ljc1SDcyLjAyNDlWMjcuMjVINzAuNTI0OVpNNzEuMjg1MSAyNi41SDcxLjI3NDlWMjhINzEuMjg1MVYyNi41Wk03MS4yOTUzIDI2LjVINzEuMjg1MVYyOEg3MS4yOTUzVjI2LjVaTTcxLjMwNTUgMjYuNUg3MS4yOTUzVjI4SDcxLjMwNTVWMjYuNVpNNzEuMzE1NyAyNi41SDcxLjMwNTVWMjhINzEuMzE1N1YyNi41Wk03MS4zMjU5IDI2LjVINzEuMzE1N1YyOEg3MS4zMjU5VjI2LjVaTTcxLjMzNjIgMjYuNUg3MS4zMjU5VjI4SDcxLjMzNjJWMjYuNVpNNzEuMzQ2NCAyNi41SDcxLjMzNjJWMjhINzEuMzQ2NFYyNi41Wk03MS4zNTY3IDI2LjVINzEuMzQ2NFYyOEg3MS4zNTY3VjI2LjVaTTcxLjM2NyAyNi41SDcxLjM1NjdWMjhINzEuMzY3VjI2LjVaTTcxLjM3NzMgMjYuNUg3MS4zNjdWMjhINzEuMzc3M1YyNi41Wk03MS4zODc2IDI2LjVINzEuMzc3M1YyOEg3MS4zODc2VjI2LjVaTTcxLjM5NzkgMjYuNUg3MS4zODc2VjI4SDcxLjM5NzlWMjYuNVpNNzEuNDA4MiAyNi41SDcxLjM5NzlWMjhINzEuNDA4MlYyNi41Wk03MS40MTg1IDI2LjVINzEuNDA4MlYyOEg3MS40MTg1VjI2LjVaTTcxLjQyODkgMjYuNUg3MS40MTg1VjI4SDcxLjQyODlWMjYuNVpNNzEuNDM5MiAyNi41SDcxLjQyODlWMjhINzEuNDM5MlYyNi41Wk03MS40NDk2IDI2LjVINzEuNDM5MlYyOEg3MS40NDk2VjI2LjVaTTcxLjQ2IDI2LjVINzEuNDQ5NlYyOEg3MS40NlYyNi41Wk03MS40NzA0IDI2LjVINzEuNDZWMjhINzEuNDcwNFYyNi41Wk03MS40ODA4IDI2LjVINzEuNDcwNFYyOEg3MS40ODA4VjI2LjVaTTcxLjQ5MTIgMjYuNUg3MS40ODA4VjI4SDcxLjQ5MTJWMjYuNVpNNzEuNTAxNiAyNi41SDcxLjQ5MTJWMjhINzEuNTAxNlYyNi41Wk03MS41MTIxIDI2LjVINzEuNTAxNlYyOEg3MS41MTIxVjI2LjVaTTcxLjUyMjUgMjYuNUg3MS41MTIxVjI4SDcxLjUyMjVWMjYuNVpNNzEuNTMzIDI2LjVINzEuNTIyNVYyOEg3MS41MzNWMjYuNVpNNzEuNTQzNSAyNi41SDcxLjUzM1YyOEg3MS41NDM1VjI2LjVaTTcxLjU1MzkgMjYuNUg3MS41NDM1VjI4SDcxLjU1MzlWMjYuNVpNNzEuNTY0NCAyNi41SDcxLjU1MzlWMjhINzEuNTY0NFYyNi41Wk03MS41NzUgMjYuNUg3MS41NjQ0VjI4SDcxLjU3NVYyNi41Wk03MS41ODU1IDI2LjVINzEuNTc1VjI4SDcxLjU4NTVWMjYuNVpNNzEuNTk2IDI2LjVINzEuNTg1NVYyOEg3MS41OTZWMjYuNVpNNzEuNjA2NSAyNi41SDcxLjU5NlYyOEg3MS42MDY1VjI2LjVaTTcxLjYxNzEgMjYuNUg3MS42MDY1VjI4SDcxLjYxNzFWMjYuNVpNNzEuNjI3NyAyNi41SDcxLjYxNzFWMjhINzEuNjI3N1YyNi41Wk03MS42MzgyIDI2LjVINzEuNjI3N1YyOEg3MS42MzgyVjI2LjVaTTcxLjY0ODggMjYuNUg3MS42MzgyVjI4SDcxLjY0ODhWMjYuNVpNNzEuNjU5NCAyNi41SDcxLjY0ODhWMjhINzEuNjU5NFYyNi41Wk03MS42NyAyNi41SDcxLjY1OTRWMjhINzEuNjdWMjYuNVpNNzEuNjgwNyAyNi41SDcxLjY3VjI4SDcxLjY4MDdWMjYuNVpNNzEuNjkxMyAyNi41SDcxLjY4MDdWMjhINzEuNjkxM1YyNi41Wk03MS43MDE5IDI2LjVINzEuNjkxM1YyOEg3MS43MDE5VjI2LjVaTTcxLjcxMjYgMjYuNUg3MS43MDE5VjI4SDcxLjcxMjZWMjYuNVpNNzEuNzIzMyAyNi41SDcxLjcxMjZWMjhINzEuNzIzM1YyNi41Wk03MS43MzM5IDI2LjVINzEuNzIzM1YyOEg3MS43MzM5VjI2LjVaTTcxLjc0NDYgMjYuNUg3MS43MzM5VjI4SDcxLjc0NDZWMjYuNVpNNzEuNzU1MyAyNi41SDcxLjc0NDZWMjhINzEuNzU1M1YyNi41Wk03MS43NjYgMjYuNUg3MS43NTUzVjI4SDcxLjc2NlYyNi41Wk03MS43NzY4IDI2LjVINzEuNzY2VjI4SDcxLjc3NjhWMjYuNVpNNzEuNzg3NSAyNi41SDcxLjc3NjhWMjhINzEuNzg3NVYyNi41Wk03MS43OTgyIDI2LjVINzEuNzg3NVYyOEg3MS43OTgyVjI2LjVaTTcxLjgwOSAyNi41SDcxLjc5ODJWMjhINzEuODA5VjI2LjVaTTcxLjgxOTggMjYuNUg3MS44MDlWMjhINzEuODE5OFYyNi41Wk03MS44MzA1IDI2LjVINzEuODE5OFYyOEg3MS44MzA1VjI2LjVaTTcxLjg0MTMgMjYuNUg3MS44MzA1VjI4SDcxLjg0MTNWMjYuNVpNNzEuODUyMSAyNi41SDcxLjg0MTNWMjhINzEuODUyMVYyNi41Wk03MS44NjMgMjYuNUg3MS44NTIxVjI4SDcxLjg2M1YyNi41Wk03MS44NzM4IDI2LjVINzEuODYzVjI4SDcxLjg3MzhWMjYuNVpNNzEuODg0NiAyNi41SDcxLjg3MzhWMjhINzEuODg0NlYyNi41Wk03MS44OTU1IDI2LjVINzEuODg0NlYyOEg3MS44OTU1VjI2LjVaTTcxLjkwNjMgMjYuNUg3MS44OTU1VjI4SDcxLjkwNjNWMjYuNVpNNzEuOTE3MiAyNi41SDcxLjkwNjNWMjhINzEuOTE3MlYyNi41Wk03MS45MjgxIDI2LjVINzEuOTE3MlYyOEg3MS45MjgxVjI2LjVaTTcxLjkzOSAyNi41SDcxLjkyODFWMjhINzEuOTM5VjI2LjVaTTcxLjk0OTkgMjYuNUg3MS45MzlWMjhINzEuOTQ5OVYyNi41Wk03MS45NjA4IDI2LjVINzEuOTQ5OVYyOEg3MS45NjA4VjI2LjVaTTcxLjk3MTcgMjYuNUg3MS45NjA4VjI4SDcxLjk3MTdWMjYuNVpNNzEuOTgyNyAyNi41SDcxLjk3MTdWMjhINzEuOTgyN1YyNi41Wk03MS45OTM2IDI2LjVINzEuOTgyN1YyOEg3MS45OTM2VjI2LjVaTTcyLjAwNDYgMjYuNUg3MS45OTM2VjI4SDcyLjAwNDZWMjYuNVpNNzIuMDE1NiAyNi41SDcyLjAwNDZWMjhINzIuMDE1NlYyNi41Wk03Mi4wMjY2IDI2LjVINzIuMDE1NlYyOEg3Mi4wMjY2VjI2LjVaTTcyLjAzNzYgMjYuNUg3Mi4wMjY2VjI4SDcyLjAzNzZWMjYuNVpNNzIuMDQ4NiAyNi41SDcyLjAzNzZWMjhINzIuMDQ4NlYyNi41Wk03Mi4wNTk2IDI2LjVINzIuMDQ4NlYyOEg3Mi4wNTk2VjI2LjVaTTcyLjA3MDYgMjYuNUg3Mi4wNTk2VjI4SDcyLjA3MDZWMjYuNVpNNzIuMDgxNyAyNi41SDcyLjA3MDZWMjhINzIuMDgxN1YyNi41Wk03Mi4wOTI3IDI2LjVINzIuMDgxN1YyOEg3Mi4wOTI3VjI2LjVaTTcyLjEwMzggMjYuNUg3Mi4wOTI3VjI4SDcyLjEwMzhWMjYuNVpNNzIuMTE0OSAyNi41SDcyLjEwMzhWMjhINzIuMTE0OVYyNi41Wk03Mi4xMjYgMjYuNUg3Mi4xMTQ5VjI4SDcyLjEyNlYyNi41Wk03Mi4xMzcxIDI2LjVINzIuMTI2VjI4SDcyLjEzNzFWMjYuNVpNNzIuMTQ4MiAyNi41SDcyLjEzNzFWMjhINzIuMTQ4MlYyNi41Wk03Mi4xNTkzIDI2LjVINzIuMTQ4MlYyOEg3Mi4xNTkzVjI2LjVaTTcyLjE3MDQgMjYuNUg3Mi4xNTkzVjI4SDcyLjE3MDRWMjYuNVpNNzIuMTgxNiAyNi41SDcyLjE3MDRWMjhINzIuMTgxNlYyNi41Wk03Mi4xOTI3IDI2LjVINzIuMTgxNlYyOEg3Mi4xOTI3VjI2LjVaTTcyLjIwMzkgMjYuNUg3Mi4xOTI3VjI4SDcyLjIwMzlWMjYuNVpNNzIuMjE1MSAyNi41SDcyLjIwMzlWMjhINzIuMjE1MVYyNi41Wk03Mi4yMjYzIDI2LjVINzIuMjE1MVYyOEg3Mi4yMjYzVjI2LjVaTTcyLjIzNzUgMjYuNUg3Mi4yMjYzVjI4SDcyLjIzNzVWMjYuNVpNNzIuMjQ4NyAyNi41SDcyLjIzNzVWMjhINzIuMjQ4N1YyNi41Wk03Mi4yNTk5IDI2LjVINzIuMjQ4N1YyOEg3Mi4yNTk5VjI2LjVaTTcyLjI3MTIgMjYuNUg3Mi4yNTk5VjI4SDcyLjI3MTJWMjYuNVpNNzIuMjgyNCAyNi41SDcyLjI3MTJWMjhINzIuMjgyNFYyNi41Wk03Mi4yOTM3IDI2LjVINzIuMjgyNFYyOEg3Mi4yOTM3VjI2LjVaTTcyLjMwNDkgMjYuNUg3Mi4yOTM3VjI4SDcyLjMwNDlWMjYuNVpNNzIuMzE2MiAyNi41SDcyLjMwNDlWMjhINzIuMzE2MlYyNi41Wk03Mi4zMjc1IDI2LjVINzIuMzE2MlYyOEg3Mi4zMjc1VjI2LjVaTTcyLjMzODggMjYuNUg3Mi4zMjc1VjI4SDcyLjMzODhWMjYuNVpNNzIuMzUwMSAyNi41SDcyLjMzODhWMjhINzIuMzUwMVYyNi41Wk03Mi4zNjE1IDI2LjVINzIuMzUwMVYyOEg3Mi4zNjE1VjI2LjVaTTcyLjM3MjggMjYuNUg3Mi4zNjE1VjI4SDcyLjM3MjhWMjYuNVpNNzIuMzg0MiAyNi41SDcyLjM3MjhWMjhINzIuMzg0MlYyNi41Wk03Mi4zOTU1IDI2LjVINzIuMzg0MlYyOEg3Mi4zOTU1VjI2LjVaTTcyLjQwNjkgMjYuNUg3Mi4zOTU1VjI4SDcyLjQwNjlWMjYuNVpNNzIuNDE4MyAyNi41SDcyLjQwNjlWMjhINzIuNDE4M1YyNi41Wk03Mi40Mjk3IDI2LjVINzIuNDE4M1YyOEg3Mi40Mjk3VjI2LjVaTTcyLjQ0MTEgMjYuNUg3Mi40Mjk3VjI4SDcyLjQ0MTFWMjYuNVpNNzIuNDUyNSAyNi41SDcyLjQ0MTFWMjhINzIuNDUyNVYyNi41Wk03Mi40NjM5IDI2LjVINzIuNDUyNVYyOEg3Mi40NjM5VjI2LjVaTTcyLjQ3NTQgMjYuNUg3Mi40NjM5VjI4SDcyLjQ3NTRWMjYuNVpNNzIuNDg2OCAyNi41SDcyLjQ3NTRWMjhINzIuNDg2OFYyNi41Wk03Mi40OTgzIDI2LjVINzIuNDg2OFYyOEg3Mi40OTgzVjI2LjVaTTcyLjUwOTggMjYuNUg3Mi40OTgzVjI4SDcyLjUwOThWMjYuNVpNNzIuNTIxMyAyNi41SDcyLjUwOThWMjhINzIuNTIxM1YyNi41Wk03Mi41MzI4IDI2LjVINzIuNTIxM1YyOEg3Mi41MzI4VjI2LjVaTTcyLjU0NDMgMjYuNUg3Mi41MzI4VjI4SDcyLjU0NDNWMjYuNVpNNzIuNTU1OCAyNi41SDcyLjU0NDNWMjhINzIuNTU1OFYyNi41Wk03Mi41NjczIDI2LjVINzIuNTU1OFYyOEg3Mi41NjczVjI2LjVaTTcyLjU3ODkgMjYuNUg3Mi41NjczVjI4SDcyLjU3ODlWMjYuNVpNNzIuNTkwNCAyNi41SDcyLjU3ODlWMjhINzIuNTkwNFYyNi41Wk03Mi42MDIgMjYuNUg3Mi41OTA0VjI4SDcyLjYwMlYyNi41Wk03Mi42MTM2IDI2LjVINzIuNjAyVjI4SDcyLjYxMzZWMjYuNVpNNzIuNjI1MiAyNi41SDcyLjYxMzZWMjhINzIuNjI1MlYyNi41Wk03Mi42MzY4IDI2LjVINzIuNjI1MlYyOEg3Mi42MzY4VjI2LjVaTTcyLjY0ODQgMjYuNUg3Mi42MzY4VjI4SDcyLjY0ODRWMjYuNVpNNzIuNjYgMjYuNUg3Mi42NDg0VjI4SDcyLjY2VjI2LjVaTTcyLjY3MTcgMjYuNUg3Mi42NlYyOEg3Mi42NzE3VjI2LjVaTTcyLjY4MzMgMjYuNUg3Mi42NzE3VjI4SDcyLjY4MzNWMjYuNVpNNzIuNjk1IDI2LjVINzIuNjgzM1YyOEg3Mi42OTVWMjYuNVpNNzIuNzA2NiAyNi41SDcyLjY5NVYyOEg3Mi43MDY2VjI2LjVaTTcyLjcxODMgMjYuNUg3Mi43MDY2VjI4SDcyLjcxODNWMjYuNVpNNzIuNzMgMjYuNUg3Mi43MTgzVjI4SDcyLjczVjI2LjVaTTcyLjc0MTcgMjYuNUg3Mi43M1YyOEg3Mi43NDE3VjI2LjVaTTcyLjc1MzQgMjYuNUg3Mi43NDE3VjI4SDcyLjc1MzRWMjYuNVpNNzIuNzY1MiAyNi41SDcyLjc1MzRWMjhINzIuNzY1MlYyNi41Wk03Mi43NzY5IDI2LjVINzIuNzY1MlYyOEg3Mi43NzY5VjI2LjVaTTcyLjc4ODcgMjYuNUg3Mi43NzY5VjI4SDcyLjc4ODdWMjYuNVpNNzIuODAwNCAyNi41SDcyLjc4ODdWMjhINzIuODAwNFYyNi41Wk03Mi44MTIyIDI2LjVINzIuODAwNFYyOEg3Mi44MTIyVjI2LjVaTTcyLjgyNCAyNi41SDcyLjgxMjJWMjhINzIuODI0VjI2LjVaTTcyLjgzNTggMjYuNUg3Mi44MjRWMjhINzIuODM1OFYyNi41Wk03Mi44NDc2IDI2LjVINzIuODM1OFYyOEg3Mi44NDc2VjI2LjVaTTcyLjg1OTQgMjYuNUg3Mi44NDc2VjI4SDcyLjg1OTRWMjYuNVpNNzIuODcxMiAyNi41SDcyLjg1OTRWMjhINzIuODcxMlYyNi41Wk03Mi44ODMxIDI2LjVINzIuODcxMlYyOEg3Mi44ODMxVjI2LjVaTTcyLjg5NDkgMjYuNUg3Mi44ODMxVjI4SDcyLjg5NDlWMjYuNVpNNzIuOTA2OCAyNi41SDcyLjg5NDlWMjhINzIuOTA2OFYyNi41Wk03Mi45MTg3IDI2LjVINzIuOTA2OFYyOEg3Mi45MTg3VjI2LjVaTTcyLjkzMDYgMjYuNUg3Mi45MTg3VjI4SDcyLjkzMDZWMjYuNVpNNzIuOTQyNSAyNi41SDcyLjkzMDZWMjhINzIuOTQyNVYyNi41Wk03Mi45NTQ0IDI2LjVINzIuOTQyNVYyOEg3Mi45NTQ0VjI2LjVaTTcyLjk2NjMgMjYuNUg3Mi45NTQ0VjI4SDcyLjk2NjNWMjYuNVpNNzIuOTc4MiAyNi41SDcyLjk2NjNWMjhINzIuOTc4MlYyNi41Wk03Mi45OTAyIDI2LjVINzIuOTc4MlYyOEg3Mi45OTAyVjI2LjVaTTczLjAwMjEgMjYuNUg3Mi45OTAyVjI4SDczLjAwMjFWMjYuNVpNNzMuMDE0MSAyNi41SDczLjAwMjFWMjhINzMuMDE0MVYyNi41Wk03My4wMjYxIDI2LjVINzMuMDE0MVYyOEg3My4wMjYxVjI2LjVaTTczLjAzODEgMjYuNUg3My4wMjYxVjI4SDczLjAzODFWMjYuNVpNNzMuMDUwMSAyNi41SDczLjAzODFWMjhINzMuMDUwMVYyNi41Wk03My4wNjIxIDI2LjVINzMuMDUwMVYyOEg3My4wNjIxVjI2LjVaTTczLjA3NDEgMjYuNUg3My4wNjIxVjI4SDczLjA3NDFWMjYuNVpNNzMuMDg2MSAyNi41SDczLjA3NDFWMjhINzMuMDg2MVYyNi41Wk03My4wOTgyIDI2LjVINzMuMDg2MVYyOEg3My4wOTgyVjI2LjVaTTczLjExMDMgMjYuNUg3My4wOTgyVjI4SDczLjExMDNWMjYuNVpNNzMuMTIyMyAyNi41SDczLjExMDNWMjhINzMuMTIyM1YyNi41Wk03My4xMzQ0IDI2LjVINzMuMTIyM1YyOEg3My4xMzQ0VjI2LjVaTTczLjE0NjUgMjYuNUg3My4xMzQ0VjI4SDczLjE0NjVWMjYuNVpNNzMuMTU4NiAyNi41SDczLjE0NjVWMjhINzMuMTU4NlYyNi41Wk03My4xNzA3IDI2LjVINzMuMTU4NlYyOEg3My4xNzA3VjI2LjVaTTczLjE4MjkgMjYuNUg3My4xNzA3VjI4SDczLjE4MjlWMjYuNVpNNzMuMTk1IDI2LjVINzMuMTgyOVYyOEg3My4xOTVWMjYuNVpNNzMuMjA3MSAyNi41SDczLjE5NVYyOEg3My4yMDcxVjI2LjVaTTczLjIxOTMgMjYuNUg3My4yMDcxVjI4SDczLjIxOTNWMjYuNVpNNzMuMjMxNSAyNi41SDczLjIxOTNWMjhINzMuMjMxNVYyNi41Wk03My4yNDM3IDI2LjVINzMuMjMxNVYyOEg3My4yNDM3VjI2LjVaTTczLjI1NTkgMjYuNUg3My4yNDM3VjI4SDczLjI1NTlWMjYuNVpNNzMuMjY4MSAyNi41SDczLjI1NTlWMjhINzMuMjY4MVYyNi41Wk03My4yODAzIDI2LjVINzMuMjY4MVYyOEg3My4yODAzVjI2LjVaTTczLjI5MjUgMjYuNUg3My4yODAzVjI4SDczLjI5MjVWMjYuNVpNNzMuMzA0OCAyNi41SDczLjI5MjVWMjhINzMuMzA0OFYyNi41Wk03My4zMTcgMjYuNUg3My4zMDQ4VjI4SDczLjMxN1YyNi41Wk03My4zMjkzIDI2LjVINzMuMzE3VjI4SDczLjMyOTNWMjYuNVpNNzMuMzQxNiAyNi41SDczLjMyOTNWMjhINzMuMzQxNlYyNi41Wk03My4zNTM4IDI2LjVINzMuMzQxNlYyOEg3My4zNTM4VjI2LjVaTTczLjM2NjEgMjYuNUg3My4zNTM4VjI4SDczLjM2NjFWMjYuNVpNNzMuMzc4NCAyNi41SDczLjM2NjFWMjhINzMuMzc4NFYyNi41Wk03My4zOTA4IDI2LjVINzMuMzc4NFYyOEg3My4zOTA4VjI2LjVaTTczLjQwMzEgMjYuNUg3My4zOTA4VjI4SDczLjQwMzFWMjYuNVpNNzMuNDE1NCAyNi41SDczLjQwMzFWMjhINzMuNDE1NFYyNi41Wk03My40Mjc4IDI2LjVINzMuNDE1NFYyOEg3My40Mjc4VjI2LjVaTTczLjQ0MDIgMjYuNUg3My40Mjc4VjI4SDczLjQ0MDJWMjYuNVpNNzMuNDUyNiAyNi41SDczLjQ0MDJWMjhINzMuNDUyNlYyNi41Wk03My40NjQ5IDI2LjVINzMuNDUyNlYyOEg3My40NjQ5VjI2LjVaTTczLjQ3NzMgMjYuNUg3My40NjQ5VjI4SDczLjQ3NzNWMjYuNVpNNzMuNDg5OCAyNi41SDczLjQ3NzNWMjhINzMuNDg5OFYyNi41Wk03My41MDIyIDI2LjVINzMuNDg5OFYyOEg3My41MDIyVjI2LjVaTTczLjUxNDYgMjYuNUg3My41MDIyVjI4SDczLjUxNDZWMjYuNVpNNzMuNTI3MSAyNi41SDczLjUxNDZWMjhINzMuNTI3MVYyNi41Wk03My41Mzk1IDI2LjVINzMuNTI3MVYyOEg3My41Mzk1VjI2LjVaTTczLjU1MiAyNi41SDczLjUzOTVWMjhINzMuNTUyVjI2LjVaTTczLjU2NDUgMjYuNUg3My41NTJWMjhINzMuNTY0NVYyNi41Wk03My41NzcgMjYuNUg3My41NjQ1VjI4SDczLjU3N1YyNi41Wk03My41ODk1IDI2LjVINzMuNTc3VjI4SDczLjU4OTVWMjYuNVpNNzMuNjAyIDI2LjVINzMuNTg5NVYyOEg3My42MDJWMjYuNVpNNzMuNjE0NSAyNi41SDczLjYwMlYyOEg3My42MTQ1VjI2LjVaTTczLjYyNzEgMjYuNUg3My42MTQ1VjI4SDczLjYyNzFWMjYuNVpNNzMuNjM5NiAyNi41SDczLjYyNzFWMjhINzMuNjM5NlYyNi41Wk03My42NTIyIDI2LjVINzMuNjM5NlYyOEg3My42NTIyVjI2LjVaTTczLjY2NDcgMjYuNUg3My42NTIyVjI4SDczLjY2NDdWMjYuNVpNNzMuNjc3MyAyNi41SDczLjY2NDdWMjhINzMuNjc3M1YyNi41Wk03My42ODk5IDI2LjVINzMuNjc3M1YyOEg3My42ODk5VjI2LjVaTTczLjcwMjUgMjYuNUg3My42ODk5VjI4SDczLjcwMjVWMjYuNVpNNzMuNzE1MSAyNi41SDczLjcwMjVWMjhINzMuNzE1MVYyNi41Wk03My43Mjc4IDI2LjVINzMuNzE1MVYyOEg3My43Mjc4VjI2LjVaTTczLjc0MDQgMjYuNUg3My43Mjc4VjI4SDczLjc0MDRWMjYuNVpNNzMuNzUzMSAyNi41SDczLjc0MDRWMjhINzMuNzUzMVYyNi41Wk03My43NjU3IDI2LjVINzMuNzUzMVYyOEg3My43NjU3VjI2LjVaTTczLjc3ODQgMjYuNUg3My43NjU3VjI4SDczLjc3ODRWMjYuNVpNNzMuNzkxMSAyNi41SDczLjc3ODRWMjhINzMuNzkxMVYyNi41Wk03My44MDM4IDI2LjVINzMuNzkxMVYyOEg3My44MDM4VjI2LjVaTTczLjgxNjUgMjYuNUg3My44MDM4VjI4SDczLjgxNjVWMjYuNVpNNzMuODI5MiAyNi41SDczLjgxNjVWMjhINzMuODI5MlYyNi41Wk03My44NDIgMjYuNUg3My44MjkyVjI4SDczLjg0MlYyNi41Wk03My44NTQ3IDI2LjVINzMuODQyVjI4SDczLjg1NDdWMjYuNVpNNzMuODY3NSAyNi41SDczLjg1NDdWMjhINzMuODY3NVYyNi41Wk03My44ODAyIDI2LjVINzMuODY3NVYyOEg3My44ODAyVjI2LjVaTTczLjg5MyAyNi41SDczLjg4MDJWMjhINzMuODkzVjI2LjVaTTczLjkwNTggMjYuNUg3My44OTNWMjhINzMuOTA1OFYyNi41Wk03My45MTg2IDI2LjVINzMuOTA1OFYyOEg3My45MTg2VjI2LjVaTTczLjkzMTQgMjYuNUg3My45MTg2VjI4SDczLjkzMTRWMjYuNVpNNzMuOTQ0MiAyNi41SDczLjkzMTRWMjhINzMuOTQ0MlYyNi41Wk03My45NTcxIDI2LjVINzMuOTQ0MlYyOEg3My45NTcxVjI2LjVaTTczLjk2OTkgMjYuNUg3My45NTcxVjI4SDczLjk2OTlWMjYuNVpNNzMuOTgyOCAyNi41SDczLjk2OTlWMjhINzMuOTgyOFYyNi41Wk03My45OTU2IDI2LjVINzMuOTgyOFYyOEg3My45OTU2VjI2LjVaTTc0LjAwODUgMjYuNUg3My45OTU2VjI4SDc0LjAwODVWMjYuNVpNNzQuMDIxNCAyNi41SDc0LjAwODVWMjhINzQuMDIxNFYyNi41Wk03NC4wMzQzIDI2LjVINzQuMDIxNFYyOEg3NC4wMzQzVjI2LjVaTTc0LjA0NzIgMjYuNUg3NC4wMzQzVjI4SDc0LjA0NzJWMjYuNVpNNzQuMDYwMiAyNi41SDc0LjA0NzJWMjhINzQuMDYwMlYyNi41Wk03NC4wNzMxIDI2LjVINzQuMDYwMlYyOEg3NC4wNzMxVjI2LjVaTTc0LjA4NiAyNi41SDc0LjA3MzFWMjhINzQuMDg2VjI2LjVaTTc0LjA5OSAyNi41SDc0LjA4NlYyOEg3NC4wOTlWMjYuNVpNNzQuMTEyIDI2LjVINzQuMDk5VjI4SDc0LjExMlYyNi41Wk03NC4xMjUgMjYuNUg3NC4xMTJWMjhINzQuMTI1VjI2LjVaTTc0LjEzOCAyNi41SDc0LjEyNVYyOEg3NC4xMzhWMjYuNVpNNzQuMTUxIDI2LjVINzQuMTM4VjI4SDc0LjE1MVYyNi41Wk03NC4xNjQgMjYuNUg3NC4xNTFWMjhINzQuMTY0VjI2LjVaTTc0LjE3NyAyNi41SDc0LjE2NFYyOEg3NC4xNzdWMjYuNVpNNzQuMTkwMSAyNi41SDc0LjE3N1YyOEg3NC4xOTAxVjI2LjVaTTc0LjIwMzEgMjYuNUg3NC4xOTAxVjI4SDc0LjIwMzFWMjYuNVpNNzQuMjE2MiAyNi41SDc0LjIwMzFWMjhINzQuMjE2MlYyNi41Wk03NC4yMjkyIDI2LjVINzQuMjE2MlYyOEg3NC4yMjkyVjI2LjVaTTc0LjI0MjMgMjYuNUg3NC4yMjkyVjI4SDc0LjI0MjNWMjYuNVpNNzQuMjU1NCAyNi41SDc0LjI0MjNWMjhINzQuMjU1NFYyNi41Wk03NC4yNjg1IDI2LjVINzQuMjU1NFYyOEg3NC4yNjg1VjI2LjVaTTc0LjI4MTcgMjYuNUg3NC4yNjg1VjI4SDc0LjI4MTdWMjYuNVpNNzQuMjk0OCAyNi41SDc0LjI4MTdWMjhINzQuMjk0OFYyNi41Wk03NC4zMDc5IDI2LjVINzQuMjk0OFYyOEg3NC4zMDc5VjI2LjVaTTc0LjMyMTEgMjYuNUg3NC4zMDc5VjI4SDc0LjMyMTFWMjYuNVpNNzQuMzM0MyAyNi41SDc0LjMyMTFWMjhINzQuMzM0M1YyNi41Wk03NC4zNDc0IDI2LjVINzQuMzM0M1YyOEg3NC4zNDc0VjI2LjVaTTc0LjM2MDYgMjYuNUg3NC4zNDc0VjI4SDc0LjM2MDZWMjYuNVpNNzQuMzczOCAyNi41SDc0LjM2MDZWMjhINzQuMzczOFYyNi41Wk03NC4zODcgMjYuNUg3NC4zNzM4VjI4SDc0LjM4N1YyNi41Wk03NC40MDAzIDI2LjVINzQuMzg3VjI4SDc0LjQwMDNWMjYuNVpNNzQuNDEzNSAyNi41SDc0LjQwMDNWMjhINzQuNDEzNVYyNi41Wk03NC40MjY3IDI2LjVINzQuNDEzNVYyOEg3NC40MjY3VjI2LjVaTTc0LjQ0IDI2LjVINzQuNDI2N1YyOEg3NC40NFYyNi41Wk03NC40NTMzIDI2LjVINzQuNDRWMjhINzQuNDUzM1YyNi41Wk03NC40NjY1IDI2LjVINzQuNDUzM1YyOEg3NC40NjY1VjI2LjVaTTc0LjQ3OTggMjYuNUg3NC40NjY1VjI4SDc0LjQ3OThWMjYuNVpNNzQuNDkzMSAyNi41SDc0LjQ3OThWMjhINzQuNDkzMVYyNi41Wk03NC41MDY1IDI2LjVINzQuNDkzMVYyOEg3NC41MDY1VjI2LjVaTTc0LjUxOTggMjYuNUg3NC41MDY1VjI4SDc0LjUxOThWMjYuNVpNNzQuNTMzMSAyNi41SDc0LjUxOThWMjhINzQuNTMzMVYyNi41Wk03NC41NDY1IDI2LjVINzQuNTMzMVYyOEg3NC41NDY1VjI2LjVaTTc0LjU1OTggMjYuNUg3NC41NDY1VjI4SDc0LjU1OThWMjYuNVpNNzQuNTczMiAyNi41SDc0LjU1OThWMjhINzQuNTczMlYyNi41Wk03NC41ODY2IDI2LjVINzQuNTczMlYyOEg3NC41ODY2VjI2LjVaTTc0LjYgMjYuNUg3NC41ODY2VjI4SDc0LjZWMjYuNVpNNzQuNjEzNCAyNi41SDc0LjZWMjhINzQuNjEzNFYyNi41Wk03NC42MjY4IDI2LjVINzQuNjEzNFYyOEg3NC42MjY4VjI2LjVaTTc0LjY0MDIgMjYuNUg3NC42MjY4VjI4SDc0LjY0MDJWMjYuNVpNNzQuNjUzNyAyNi41SDc0LjY0MDJWMjhINzQuNjUzN1YyNi41Wk03NC42NjcxIDI2LjVINzQuNjUzN1YyOEg3NC42NjcxVjI2LjVaTTc0LjY4MDYgMjYuNUg3NC42NjcxVjI4SDc0LjY4MDZWMjYuNVpNNzQuNjk0MSAyNi41SDc0LjY4MDZWMjhINzQuNjk0MVYyNi41Wk03NC43MDc1IDI2LjVINzQuNjk0MVYyOEg3NC43MDc1VjI2LjVaTTc0LjcyMSAyNi41SDc0LjcwNzVWMjhINzQuNzIxVjI2LjVaTTc0LjczNDUgMjYuNUg3NC43MjFWMjhINzQuNzM0NVYyNi41Wk03NC43NDgxIDI2LjVINzQuNzM0NVYyOEg3NC43NDgxVjI2LjVaTTc0Ljc2MTYgMjYuNUg3NC43NDgxVjI4SDc0Ljc2MTZWMjYuNVpNNzQuNzc1MSAyNi41SDc0Ljc2MTZWMjhINzQuNzc1MVYyNi41Wk03NC43ODg3IDI2LjVINzQuNzc1MVYyOEg3NC43ODg3VjI2LjVaTTc0LjgwMjMgMjYuNUg3NC43ODg3VjI4SDc0LjgwMjNWMjYuNVpNNzQuODE1OCAyNi41SDc0LjgwMjNWMjhINzQuODE1OFYyNi41Wk03NC44Mjk0IDI2LjVINzQuODE1OFYyOEg3NC44Mjk0VjI2LjVaTTc0Ljg0MyAyNi41SDc0LjgyOTRWMjhINzQuODQzVjI2LjVaTTc0Ljg1NjYgMjYuNUg3NC44NDNWMjhINzQuODU2NlYyNi41Wk03NC44NzAzIDI2LjVINzQuODU2NlYyOEg3NC44NzAzVjI2LjVaTTc0Ljg4MzkgMjYuNUg3NC44NzAzVjI4SDc0Ljg4MzlWMjYuNVpNNzQuODk3NSAyNi41SDc0Ljg4MzlWMjhINzQuODk3NVYyNi41Wk03NC45MTEyIDI2LjVINzQuODk3NVYyOEg3NC45MTEyVjI2LjVaTTc0LjkyNDkgMjYuNUg3NC45MTEyVjI4SDc0LjkyNDlWMjYuNVpNNzQuOTM4NSAyNi41SDc0LjkyNDlWMjhINzQuOTM4NVYyNi41Wk03NC45NTIyIDI2LjVINzQuOTM4NVYyOEg3NC45NTIyVjI2LjVaTTc0Ljk2NTkgMjYuNUg3NC45NTIyVjI4SDc0Ljk2NTlWMjYuNVpNNzQuOTc5NyAyNi41SDc0Ljk2NTlWMjhINzQuOTc5N1YyNi41Wk03NC45OTM0IDI2LjVINzQuOTc5N1YyOEg3NC45OTM0VjI2LjVaTTc1LjAwNzEgMjYuNUg3NC45OTM0VjI4SDc1LjAwNzFWMjYuNVpNNzUuMDIwOSAyNi41SDc1LjAwNzFWMjhINzUuMDIwOVYyNi41Wk03NS4wMzQ2IDI2LjVINzUuMDIwOVYyOEg3NS4wMzQ2VjI2LjVaTTc1LjA0ODQgMjYuNUg3NS4wMzQ2VjI4SDc1LjA0ODRWMjYuNVpNNzUuMDYyMiAyNi41SDc1LjA0ODRWMjhINzUuMDYyMlYyNi41Wk03NS4wNzYgMjYuNUg3NS4wNjIyVjI4SDc1LjA3NlYyNi41Wk03NS4wODk4IDI2LjVINzUuMDc2VjI4SDc1LjA4OThWMjYuNVpNNzUuMTAzNiAyNi41SDc1LjA4OThWMjhINzUuMTAzNlYyNi41Wk03NS4xMTc0IDI2LjVINzUuMTAzNlYyOEg3NS4xMTc0VjI2LjVaTTc1LjEzMTMgMjYuNUg3NS4xMTc0VjI4SDc1LjEzMTNWMjYuNVpNNzUuMTQ1MSAyNi41SDc1LjEzMTNWMjhINzUuMTQ1MVYyNi41Wk03NS4xNTkgMjYuNUg3NS4xNDUxVjI4SDc1LjE1OVYyNi41Wk03NS4xNzI5IDI2LjVINzUuMTU5VjI4SDc1LjE3MjlWMjYuNVpNNzUuMTg2NyAyNi41SDc1LjE3MjlWMjhINzUuMTg2N1YyNi41Wk03NS4yMDA2IDI2LjVINzUuMTg2N1YyOEg3NS4yMDA2VjI2LjVaTTc1LjIxNDUgMjYuNUg3NS4yMDA2VjI4SDc1LjIxNDVWMjYuNVpNNzUuMjI4NSAyNi41SDc1LjIxNDVWMjhINzUuMjI4NVYyNi41Wk03NS4yNDI0IDI2LjVINzUuMjI4NVYyOEg3NS4yNDI0VjI2LjVaTTc1LjI1NjMgMjYuNUg3NS4yNDI0VjI4SDc1LjI1NjNWMjYuNVpNNzUuMjcwMyAyNi41SDc1LjI1NjNWMjhINzUuMjcwM1YyNi41Wk03NS4yODQzIDI2LjVINzUuMjcwM1YyOEg3NS4yODQzVjI2LjVaTTc1LjI5ODIgMjYuNUg3NS4yODQzVjI4SDc1LjI5ODJWMjYuNVpNNzUuMzEyMiAyNi41SDc1LjI5ODJWMjhINzUuMzEyMlYyNi41Wk03NS4zMjYyIDI2LjVINzUuMzEyMlYyOEg3NS4zMjYyVjI2LjVaTTc1LjM0MDIgMjYuNUg3NS4zMjYyVjI4SDc1LjM0MDJWMjYuNVpNNzUuMzU0MiAyNi41SDc1LjM0MDJWMjhINzUuMzU0MlYyNi41Wk03NS4zNjgzIDI2LjVINzUuMzU0MlYyOEg3NS4zNjgzVjI2LjVaTTc1LjM4MjMgMjYuNUg3NS4zNjgzVjI4SDc1LjM4MjNWMjYuNVpNNzUuMzk2NCAyNi41SDc1LjM4MjNWMjhINzUuMzk2NFYyNi41Wk03NS40MTA1IDI2LjVINzUuMzk2NFYyOEg3NS40MTA1VjI2LjVaTTc1LjQyNDUgMjYuNUg3NS40MTA1VjI4SDc1LjQyNDVWMjYuNVpNNzUuNDM4NiAyNi41SDc1LjQyNDVWMjhINzUuNDM4NlYyNi41Wk03NS40NTI3IDI2LjVINzUuNDM4NlYyOEg3NS40NTI3VjI2LjVaTTc1LjQ2NjggMjYuNUg3NS40NTI3VjI4SDc1LjQ2NjhWMjYuNVpNNzUuNDgxIDI2LjVINzUuNDY2OFYyOEg3NS40ODFWMjYuNVpNNzUuNDk1MSAyNi41SDc1LjQ4MVYyOEg3NS40OTUxVjI2LjVaTTc1LjUwOTIgMjYuNUg3NS40OTUxVjI4SDc1LjUwOTJWMjYuNVpNNzUuNTIzNCAyNi41SDc1LjUwOTJWMjhINzUuNTIzNFYyNi41Wk03NS41Mzc2IDI2LjVINzUuNTIzNFYyOEg3NS41Mzc2VjI2LjVaTTc1LjU1MTggMjYuNUg3NS41Mzc2VjI4SDc1LjU1MThWMjYuNVpNNzUuNTY2IDI2LjVINzUuNTUxOFYyOEg3NS41NjZWMjYuNVpNNzUuNTgwMiAyNi41SDc1LjU2NlYyOEg3NS41ODAyVjI2LjVaTTc1LjU5NDQgMjYuNUg3NS41ODAyVjI4SDc1LjU5NDRWMjYuNVpNNzUuNjA4NiAyNi41SDc1LjU5NDRWMjhINzUuNjA4NlYyNi41Wk03NS42MjI4IDI2LjVINzUuNjA4NlYyOEg3NS42MjI4VjI2LjVaTTc1LjYzNzEgMjYuNUg3NS42MjI4VjI4SDc1LjYzNzFWMjYuNVpNNzUuNjUxNCAyNi41SDc1LjYzNzFWMjhINzUuNjUxNFYyNi41Wk03NS42NjU2IDI2LjVINzUuNjUxNFYyOEg3NS42NjU2VjI2LjVaTTc1LjY3OTkgMjYuNUg3NS42NjU2VjI4SDc1LjY3OTlWMjYuNVpNNzUuNjk0MiAyNi41SDc1LjY3OTlWMjhINzUuNjk0MlYyNi41Wk03NS43MDg1IDI2LjVINzUuNjk0MlYyOEg3NS43MDg1VjI2LjVaTTc1LjcyMjggMjYuNUg3NS43MDg1VjI4SDc1LjcyMjhWMjYuNVpNNzUuNzM3MiAyNi41SDc1LjcyMjhWMjhINzUuNzM3MlYyNi41Wk03NS43NTE1IDI2LjVINzUuNzM3MlYyOEg3NS43NTE1VjI2LjVaTTc1Ljc2NTkgMjYuNUg3NS43NTE1VjI4SDc1Ljc2NTlWMjYuNVpNNzUuNzgwMiAyNi41SDc1Ljc2NTlWMjhINzUuNzgwMlYyNi41Wk03NS43OTQ2IDI2LjVINzUuNzgwMlYyOEg3NS43OTQ2VjI2LjVaTTc1LjgwOSAyNi41SDc1Ljc5NDZWMjhINzUuODA5VjI2LjVaTTc1LjgyMzQgMjYuNUg3NS44MDlWMjhINzUuODIzNFYyNi41Wk03NS44Mzc4IDI2LjVINzUuODIzNFYyOEg3NS44Mzc4VjI2LjVaTTc1Ljg1MjIgMjYuNUg3NS44Mzc4VjI4SDc1Ljg1MjJWMjYuNVpNNzUuODY2NiAyNi41SDc1Ljg1MjJWMjhINzUuODY2NlYyNi41Wk03NS44ODExIDI2LjVINzUuODY2NlYyOEg3NS44ODExVjI2LjVaTTc1Ljg5NTUgMjYuNUg3NS44ODExVjI4SDc1Ljg5NTVWMjYuNVpNNzUuOTEgMjYuNUg3NS44OTU1VjI4SDc1LjkxVjI2LjVaTTc1LjkyNDUgMjYuNUg3NS45MVYyOEg3NS45MjQ1VjI2LjVaTTc1LjkzOSAyNi41SDc1LjkyNDVWMjhINzUuOTM5VjI2LjVaTTc1Ljk1MzUgMjYuNUg3NS45MzlWMjhINzUuOTUzNVYyNi41Wk03NS45NjggMjYuNUg3NS45NTM1VjI4SDc1Ljk2OFYyNi41Wk03NS45ODI1IDI2LjVINzUuOTY4VjI4SDc1Ljk4MjVWMjYuNVpNNzUuOTk3MSAyNi41SDc1Ljk4MjVWMjhINzUuOTk3MVYyNi41Wk03Ni4wMTE2IDI2LjVINzUuOTk3MVYyOEg3Ni4wMTE2VjI2LjVaTTc2LjAyNjIgMjYuNUg3Ni4wMTE2VjI4SDc2LjAyNjJWMjYuNVpNNzYuMDQwNyAyNi41SDc2LjAyNjJWMjhINzYuMDQwN1YyNi41Wk03Ni4wNTUzIDI2LjVINzYuMDQwN1YyOEg3Ni4wNTUzVjI2LjVaTTc2LjA2OTkgMjYuNUg3Ni4wNTUzVjI4SDc2LjA2OTlWMjYuNVpNNzYuMDg0NSAyNi41SDc2LjA2OTlWMjhINzYuMDg0NVYyNi41Wk03Ni4wOTkxIDI2LjVINzYuMDg0NVYyOEg3Ni4wOTkxVjI2LjVaTTc2LjExMzggMjYuNUg3Ni4wOTkxVjI4SDc2LjExMzhWMjYuNVpNNzYuMTI4NCAyNi41SDc2LjExMzhWMjhINzYuMTI4NFYyNi41Wk03Ni4xNDMgMjYuNUg3Ni4xMjg0VjI4SDc2LjE0M1YyNi41Wk03Ni4xNTc3IDI2LjVINzYuMTQzVjI4SDc2LjE1NzdWMjYuNVpNNzYuMTcyNCAyNi41SDc2LjE1NzdWMjhINzYuMTcyNFYyNi41Wk03Ni4xODcxIDI2LjVINzYuMTcyNFYyOEg3Ni4xODcxVjI2LjVaTTc2LjIwMTggMjYuNUg3Ni4xODcxVjI4SDc2LjIwMThWMjYuNVpNNzYuMjE2NSAyNi41SDc2LjIwMThWMjhINzYuMjE2NVYyNi41Wk03Ni4yMzEyIDI2LjVINzYuMjE2NVYyOEg3Ni4yMzEyVjI2LjVaTTc2LjI0NTkgMjYuNUg3Ni4yMzEyVjI4SDc2LjI0NTlWMjYuNVpNNzYuMjYwNyAyNi41SDc2LjI0NTlWMjhINzYuMjYwN1YyNi41Wk03Ni4yNzU0IDI2LjVINzYuMjYwN1YyOEg3Ni4yNzU0VjI2LjVaTTc2LjI5MDIgMjYuNUg3Ni4yNzU0VjI4SDc2LjI5MDJWMjYuNVpNNzYuMzA0OSAyNi41SDc2LjI5MDJWMjhINzYuMzA0OVYyNi41Wk03Ni4zMTk3IDI2LjVINzYuMzA0OVYyOEg3Ni4zMTk3VjI2LjVaTTc2LjMzNDUgMjYuNUg3Ni4zMTk3VjI4SDc2LjMzNDVWMjYuNVpNNzYuMzQ5MyAyNi41SDc2LjMzNDVWMjhINzYuMzQ5M1YyNi41Wk03Ni4zNjQyIDI2LjVINzYuMzQ5M1YyOEg3Ni4zNjQyVjI2LjVaTTc2LjM3OSAyNi41SDc2LjM2NDJWMjhINzYuMzc5VjI2LjVaTTc2LjM5MzggMjYuNUg3Ni4zNzlWMjhINzYuMzkzOFYyNi41Wk03Ni40MDg3IDI2LjVINzYuMzkzOFYyOEg3Ni40MDg3VjI2LjVaTTc2LjQyMzYgMjYuNUg3Ni40MDg3VjI4SDc2LjQyMzZWMjYuNVpNNzYuNDM4NCAyNi41SDc2LjQyMzZWMjhINzYuNDM4NFYyNi41Wk03Ni40NTMzIDI2LjVINzYuNDM4NFYyOEg3Ni40NTMzVjI2LjVaTTc2LjQ2ODIgMjYuNUg3Ni40NTMzVjI4SDc2LjQ2ODJWMjYuNVpNNzYuNDgzMSAyNi41SDc2LjQ2ODJWMjhINzYuNDgzMVYyNi41Wk03Ni40OTgxIDI2LjVINzYuNDgzMVYyOEg3Ni40OTgxVjI2LjVaTTc2LjUxMyAyNi41SDc2LjQ5ODFWMjhINzYuNTEzVjI2LjVaTTc2LjUyNzkgMjYuNUg3Ni41MTNWMjhINzYuNTI3OVYyNi41Wk03Ni41NDI5IDI2LjVINzYuNTI3OVYyOEg3Ni41NDI5VjI2LjVaTTc2LjU1NzkgMjYuNUg3Ni41NDI5VjI4SDc2LjU1NzlWMjYuNVpNNzYuNTcyOSAyNi41SDc2LjU1NzlWMjhINzYuNTcyOVYyNi41Wk03Ni41ODc4IDI2LjVINzYuNTcyOVYyOEg3Ni41ODc4VjI2LjVaTTc2LjYwMjkgMjYuNUg3Ni41ODc4VjI4SDc2LjYwMjlWMjYuNVpNNzYuNjE3OSAyNi41SDc2LjYwMjlWMjhINzYuNjE3OVYyNi41Wk03Ni42MzI5IDI2LjVINzYuNjE3OVYyOEg3Ni42MzI5VjI2LjVaTTc2LjY0NzkgMjYuNUg3Ni42MzI5VjI4SDc2LjY0NzlWMjYuNVpNNzYuNjYzIDI2LjVINzYuNjQ3OVYyOEg3Ni42NjNWMjYuNVpNNzYuNjc4IDI2LjVINzYuNjYzVjI4SDc2LjY3OFYyNi41Wk03Ni42OTMxIDI2LjVINzYuNjc4VjI4SDc2LjY5MzFWMjYuNVpNNzYuNzA4MiAyNi41SDc2LjY5MzFWMjhINzYuNzA4MlYyNi41Wk03Ni43MjMzIDI2LjVINzYuNzA4MlYyOEg3Ni43MjMzVjI2LjVaTTc2LjczODQgMjYuNUg3Ni43MjMzVjI4SDc2LjczODRWMjYuNVpNNzYuNzUzNSAyNi41SDc2LjczODRWMjhINzYuNzUzNVYyNi41Wk03Ni43Njg2IDI2LjVINzYuNzUzNVYyOEg3Ni43Njg2VjI2LjVaTTc2Ljc4MzggMjYuNUg3Ni43Njg2VjI4SDc2Ljc4MzhWMjYuNVpNNzYuNzk4OSAyNi41SDc2Ljc4MzhWMjhINzYuNzk4OVYyNi41Wk03Ni44MTQxIDI2LjVINzYuNzk4OVYyOEg3Ni44MTQxVjI2LjVaTTc2LjgyOTMgMjYuNUg3Ni44MTQxVjI4SDc2LjgyOTNWMjYuNVpNNzYuODQ0NSAyNi41SDc2LjgyOTNWMjhINzYuODQ0NVYyNi41Wk03Ni44NTk3IDI2LjVINzYuODQ0NVYyOEg3Ni44NTk3VjI2LjVaTTc2Ljg3NDkgMjYuNUg3Ni44NTk3VjI4SDc2Ljg3NDlWMjYuNVpNNzYuODkwMSAyNi41SDc2Ljg3NDlWMjhINzYuODkwMVYyNi41Wk03Ni45MDUzIDI2LjVINzYuODkwMVYyOEg3Ni45MDUzVjI2LjVaTTc2LjkyMDYgMjYuNUg3Ni45MDUzVjI4SDc2LjkyMDZWMjYuNVpNNzYuOTM1OCAyNi41SDc2LjkyMDZWMjhINzYuOTM1OFYyNi41Wk03Ni45NTExIDI2LjVINzYuOTM1OFYyOEg3Ni45NTExVjI2LjVaTTc2Ljk2NjQgMjYuNUg3Ni45NTExVjI4SDc2Ljk2NjRWMjYuNVpNNzYuOTgxNyAyNi41SDc2Ljk2NjRWMjhINzYuOTgxN1YyNi41Wk03Ni45OTcgMjYuNUg3Ni45ODE3VjI4SDc2Ljk5N1YyNi41Wk03Ny4wMTIzIDI2LjVINzYuOTk3VjI4SDc3LjAxMjNWMjYuNVpNNzcuMDI3NiAyNi41SDc3LjAxMjNWMjhINzcuMDI3NlYyNi41Wk03Ny4wNDI5IDI2LjVINzcuMDI3NlYyOEg3Ny4wNDI5VjI2LjVaTTc3LjA1ODMgMjYuNUg3Ny4wNDI5VjI4SDc3LjA1ODNWMjYuNVpNNzcuMDczNiAyNi41SDc3LjA1ODNWMjhINzcuMDczNlYyNi41Wk03Ny4wODkgMjYuNUg3Ny4wNzM2VjI4SDc3LjA4OVYyNi41Wk03Ny4xMDQ0IDI2LjVINzcuMDg5VjI4SDc3LjEwNDRWMjYuNVpNNzcuMTE5OCAyNi41SDc3LjEwNDRWMjhINzcuMTE5OFYyNi41Wk03Ny4xMzUyIDI2LjVINzcuMTE5OFYyOEg3Ny4xMzUyVjI2LjVaTTc3LjE1MDYgMjYuNUg3Ny4xMzUyVjI4SDc3LjE1MDZWMjYuNVpNNzcuMTY2IDI2LjVINzcuMTUwNlYyOEg3Ny4xNjZWMjYuNVpNNzcuMTgxNCAyNi41SDc3LjE2NlYyOEg3Ny4xODE0VjI2LjVaTTc3LjE5NjkgMjYuNUg3Ny4xODE0VjI4SDc3LjE5NjlWMjYuNVpNNzcuMjEyNCAyNi41SDc3LjE5NjlWMjhINzcuMjEyNFYyNi41Wk03Ny4yMjc4IDI2LjVINzcuMjEyNFYyOEg3Ny4yMjc4VjI2LjVaTTc3LjI0MzMgMjYuNUg3Ny4yMjc4VjI4SDc3LjI0MzNWMjYuNVpNNzcuMjU4OCAyNi41SDc3LjI0MzNWMjhINzcuMjU4OFYyNi41Wk03Ny4yNzQzIDI2LjVINzcuMjU4OFYyOEg3Ny4yNzQzVjI2LjVaTTc3LjI4OTggMjYuNUg3Ny4yNzQzVjI4SDc3LjI4OThWMjYuNVpNNzcuMzA1NCAyNi41SDc3LjI4OThWMjhINzcuMzA1NFYyNi41Wk03Ny4zMjA5IDI2LjVINzcuMzA1NFYyOEg3Ny4zMjA5VjI2LjVaTTc3LjMzNjQgMjYuNUg3Ny4zMjA5VjI4SDc3LjMzNjRWMjYuNVpNNzcuMzUyIDI2LjVINzcuMzM2NFYyOEg3Ny4zNTJWMjYuNVpNNzcuMzY3NiAyNi41SDc3LjM1MlYyOEg3Ny4zNjc2VjI2LjVaTTc3LjM4MzIgMjYuNUg3Ny4zNjc2VjI4SDc3LjM4MzJWMjYuNVpNNzcuMzk4OCAyNi41SDc3LjM4MzJWMjhINzcuMzk4OFYyNi41Wk03Ny40MTQ0IDI2LjVINzcuMzk4OFYyOEg3Ny40MTQ0VjI2LjVaTTc3LjQzIDI2LjVINzcuNDE0NFYyOEg3Ny40M1YyNi41Wk03Ny40NDU2IDI2LjVINzcuNDNWMjhINzcuNDQ1NlYyNi41Wk03Ny40NjEzIDI2LjVINzcuNDQ1NlYyOEg3Ny40NjEzVjI2LjVaTTc3LjQ3NjkgMjYuNUg3Ny40NjEzVjI4SDc3LjQ3NjlWMjYuNVpNNzcuNDkyNiAyNi41SDc3LjQ3NjlWMjhINzcuNDkyNlYyNi41Wk03Ny41MDgzIDI2LjVINzcuNDkyNlYyOEg3Ny41MDgzVjI2LjVaTTc3LjUyNCAyNi41SDc3LjUwODNWMjhINzcuNTI0VjI2LjVaTTc3LjUzOTcgMjYuNUg3Ny41MjRWMjhINzcuNTM5N1YyNi41Wk03Ny41NTU0IDI2LjVINzcuNTM5N1YyOEg3Ny41NTU0VjI2LjVaTTc3LjU3MTEgMjYuNUg3Ny41NTU0VjI4SDc3LjU3MTFWMjYuNVpNNzcuNTg2OCAyNi41SDc3LjU3MTFWMjhINzcuNTg2OFYyNi41Wk03Ny42MDI2IDI2LjVINzcuNTg2OFYyOEg3Ny42MDI2VjI2LjVaTTc3LjYxODMgMjYuNUg3Ny42MDI2VjI4SDc3LjYxODNWMjYuNVpNNzcuNjM0MSAyNi41SDc3LjYxODNWMjhINzcuNjM0MVYyNi41Wk03Ny42NDk5IDI2LjVINzcuNjM0MVYyOEg3Ny42NDk5VjI2LjVaTTc3LjY2NTcgMjYuNUg3Ny42NDk5VjI4SDc3LjY2NTdWMjYuNVpNNzcuNjgxNSAyNi41SDc3LjY2NTdWMjhINzcuNjgxNVYyNi41Wk03Ny42OTczIDI2LjVINzcuNjgxNVYyOEg3Ny42OTczVjI2LjVaTTc3LjcxMzEgMjYuNUg3Ny42OTczVjI4SDc3LjcxMzFWMjYuNVpNNzcuNzI4OSAyNi41SDc3LjcxMzFWMjhINzcuNzI4OVYyNi41Wk03Ny43NDQ4IDI2LjVINzcuNzI4OVYyOEg3Ny43NDQ4VjI2LjVaTTc3Ljc2MDcgMjYuNUg3Ny43NDQ4VjI4SDc3Ljc2MDdWMjYuNVpNNzcuNzc2NSAyNi41SDc3Ljc2MDdWMjhINzcuNzc2NVYyNi41Wk03Ny43OTI0IDI2LjVINzcuNzc2NVYyOEg3Ny43OTI0VjI2LjVaTTc3LjgwODMgMjYuNUg3Ny43OTI0VjI4SDc3LjgwODNWMjYuNVpNNzcuODI0MiAyNi41SDc3LjgwODNWMjhINzcuODI0MlYyNi41Wk03Ny44NDAxIDI2LjVINzcuODI0MlYyOEg3Ny44NDAxVjI2LjVaTTc3Ljg1NiAyNi41SDc3Ljg0MDFWMjhINzcuODU2VjI2LjVaTTc3Ljg3MiAyNi41SDc3Ljg1NlYyOEg3Ny44NzJWMjYuNVpNNzcuODg3OSAyNi41SDc3Ljg3MlYyOEg3Ny44ODc5VjI2LjVaTTc3LjkwMzkgMjYuNUg3Ny44ODc5VjI4SDc3LjkwMzlWMjYuNVpNNzcuOTE5OSAyNi41SDc3LjkwMzlWMjhINzcuOTE5OVYyNi41Wk03Ny45MzU5IDI2LjVINzcuOTE5OVYyOEg3Ny45MzU5VjI2LjVaTTc3Ljk1MTkgMjYuNUg3Ny45MzU5VjI4SDc3Ljk1MTlWMjYuNVpNNzcuOTY3OSAyNi41SDc3Ljk1MTlWMjhINzcuOTY3OVYyNi41Wk03Ny45ODM5IDI2LjVINzcuOTY3OVYyOEg3Ny45ODM5VjI2LjVaTTc4LjczMzkgMjguNzVWMjcuMjVINzcuMjMzOVYyOC43NUg3OC43MzM5Wk03Ny45Njc5IDI5LjVINzcuOTgzOVYyOEg3Ny45Njc5VjI5LjVaTTc3Ljk1MTkgMjkuNUg3Ny45Njc5VjI4SDc3Ljk1MTlWMjkuNVpNNzcuOTM1OSAyOS41SDc3Ljk1MTlWMjhINzcuOTM1OVYyOS41Wk03Ny45MTk5IDI5LjVINzcuOTM1OVYyOEg3Ny45MTk5VjI5LjVaTTc3LjkwMzkgMjkuNUg3Ny45MTk5VjI4SDc3LjkwMzlWMjkuNVpNNzcuODg3OSAyOS41SDc3LjkwMzlWMjhINzcuODg3OVYyOS41Wk03Ny44NzIgMjkuNUg3Ny44ODc5VjI4SDc3Ljg3MlYyOS41Wk03Ny44NTYgMjkuNUg3Ny44NzJWMjhINzcuODU2VjI5LjVaTTc3Ljg0MDEgMjkuNUg3Ny44NTZWMjhINzcuODQwMVYyOS41Wk03Ny44MjQyIDI5LjVINzcuODQwMVYyOEg3Ny44MjQyVjI5LjVaTTc3LjgwODMgMjkuNUg3Ny44MjQyVjI4SDc3LjgwODNWMjkuNVpNNzcuNzkyNCAyOS41SDc3LjgwODNWMjhINzcuNzkyNFYyOS41Wk03Ny43NzY1IDI5LjVINzcuNzkyNFYyOEg3Ny43NzY1VjI5LjVaTTc3Ljc2MDcgMjkuNUg3Ny43NzY1VjI4SDc3Ljc2MDdWMjkuNVpNNzcuNzQ0OCAyOS41SDc3Ljc2MDdWMjhINzcuNzQ0OFYyOS41Wk03Ny43Mjg5IDI5LjVINzcuNzQ0OFYyOEg3Ny43Mjg5VjI5LjVaTTc3LjcxMzEgMjkuNUg3Ny43Mjg5VjI4SDc3LjcxMzFWMjkuNVpNNzcuNjk3MyAyOS41SDc3LjcxMzFWMjhINzcuNjk3M1YyOS41Wk03Ny42ODE1IDI5LjVINzcuNjk3M1YyOEg3Ny42ODE1VjI5LjVaTTc3LjY2NTcgMjkuNUg3Ny42ODE1VjI4SDc3LjY2NTdWMjkuNVpNNzcuNjQ5OSAyOS41SDc3LjY2NTdWMjhINzcuNjQ5OVYyOS41Wk03Ny42MzQxIDI5LjVINzcuNjQ5OVYyOEg3Ny42MzQxVjI5LjVaTTc3LjYxODMgMjkuNUg3Ny42MzQxVjI4SDc3LjYxODNWMjkuNVpNNzcuNjAyNiAyOS41SDc3LjYxODNWMjhINzcuNjAyNlYyOS41Wk03Ny41ODY4IDI5LjVINzcuNjAyNlYyOEg3Ny41ODY4VjI5LjVaTTc3LjU3MTEgMjkuNUg3Ny41ODY4VjI4SDc3LjU3MTFWMjkuNVpNNzcuNTU1NCAyOS41SDc3LjU3MTFWMjhINzcuNTU1NFYyOS41Wk03Ny41Mzk3IDI5LjVINzcuNTU1NFYyOEg3Ny41Mzk3VjI5LjVaTTc3LjUyNCAyOS41SDc3LjUzOTdWMjhINzcuNTI0VjI5LjVaTTc3LjUwODMgMjkuNUg3Ny41MjRWMjhINzcuNTA4M1YyOS41Wk03Ny40OTI2IDI5LjVINzcuNTA4M1YyOEg3Ny40OTI2VjI5LjVaTTc3LjQ3NjkgMjkuNUg3Ny40OTI2VjI4SDc3LjQ3NjlWMjkuNVpNNzcuNDYxMyAyOS41SDc3LjQ3NjlWMjhINzcuNDYxM1YyOS41Wk03Ny40NDU2IDI5LjVINzcuNDYxM1YyOEg3Ny40NDU2VjI5LjVaTTc3LjQzIDI5LjVINzcuNDQ1NlYyOEg3Ny40M1YyOS41Wk03Ny40MTQ0IDI5LjVINzcuNDNWMjhINzcuNDE0NFYyOS41Wk03Ny4zOTg4IDI5LjVINzcuNDE0NFYyOEg3Ny4zOTg4VjI5LjVaTTc3LjM4MzIgMjkuNUg3Ny4zOTg4VjI4SDc3LjM4MzJWMjkuNVpNNzcuMzY3NiAyOS41SDc3LjM4MzJWMjhINzcuMzY3NlYyOS41Wk03Ny4zNTIgMjkuNUg3Ny4zNjc2VjI4SDc3LjM1MlYyOS41Wk03Ny4zMzY0IDI5LjVINzcuMzUyVjI4SDc3LjMzNjRWMjkuNVpNNzcuMzIwOSAyOS41SDc3LjMzNjRWMjhINzcuMzIwOVYyOS41Wk03Ny4zMDU0IDI5LjVINzcuMzIwOVYyOEg3Ny4zMDU0VjI5LjVaTTc3LjI4OTggMjkuNUg3Ny4zMDU0VjI4SDc3LjI4OThWMjkuNVpNNzcuMjc0MyAyOS41SDc3LjI4OThWMjhINzcuMjc0M1YyOS41Wk03Ny4yNTg4IDI5LjVINzcuMjc0M1YyOEg3Ny4yNTg4VjI5LjVaTTc3LjI0MzMgMjkuNUg3Ny4yNTg4VjI4SDc3LjI0MzNWMjkuNVpNNzcuMjI3OCAyOS41SDc3LjI0MzNWMjhINzcuMjI3OFYyOS41Wk03Ny4yMTI0IDI5LjVINzcuMjI3OFYyOEg3Ny4yMTI0VjI5LjVaTTc3LjE5NjkgMjkuNUg3Ny4yMTI0VjI4SDc3LjE5NjlWMjkuNVpNNzcuMTgxNCAyOS41SDc3LjE5NjlWMjhINzcuMTgxNFYyOS41Wk03Ny4xNjYgMjkuNUg3Ny4xODE0VjI4SDc3LjE2NlYyOS41Wk03Ny4xNTA2IDI5LjVINzcuMTY2VjI4SDc3LjE1MDZWMjkuNVpNNzcuMTM1MiAyOS41SDc3LjE1MDZWMjhINzcuMTM1MlYyOS41Wk03Ny4xMTk4IDI5LjVINzcuMTM1MlYyOEg3Ny4xMTk4VjI5LjVaTTc3LjEwNDQgMjkuNUg3Ny4xMTk4VjI4SDc3LjEwNDRWMjkuNVpNNzcuMDg5IDI5LjVINzcuMTA0NFYyOEg3Ny4wODlWMjkuNVpNNzcuMDczNiAyOS41SDc3LjA4OVYyOEg3Ny4wNzM2VjI5LjVaTTc3LjA1ODMgMjkuNUg3Ny4wNzM2VjI4SDc3LjA1ODNWMjkuNVpNNzcuMDQyOSAyOS41SDc3LjA1ODNWMjhINzcuMDQyOVYyOS41Wk03Ny4wMjc2IDI5LjVINzcuMDQyOVYyOEg3Ny4wMjc2VjI5LjVaTTc3LjAxMjMgMjkuNUg3Ny4wMjc2VjI4SDc3LjAxMjNWMjkuNVpNNzYuOTk3IDI5LjVINzcuMDEyM1YyOEg3Ni45OTdWMjkuNVpNNzYuOTgxNyAyOS41SDc2Ljk5N1YyOEg3Ni45ODE3VjI5LjVaTTc2Ljk2NjQgMjkuNUg3Ni45ODE3VjI4SDc2Ljk2NjRWMjkuNVpNNzYuOTUxMSAyOS41SDc2Ljk2NjRWMjhINzYuOTUxMVYyOS41Wk03Ni45MzU4IDI5LjVINzYuOTUxMVYyOEg3Ni45MzU4VjI5LjVaTTc2LjkyMDYgMjkuNUg3Ni45MzU4VjI4SDc2LjkyMDZWMjkuNVpNNzYuOTA1MyAyOS41SDc2LjkyMDZWMjhINzYuOTA1M1YyOS41Wk03Ni44OTAxIDI5LjVINzYuOTA1M1YyOEg3Ni44OTAxVjI5LjVaTTc2Ljg3NDkgMjkuNUg3Ni44OTAxVjI4SDc2Ljg3NDlWMjkuNVpNNzYuODU5NyAyOS41SDc2Ljg3NDlWMjhINzYuODU5N1YyOS41Wk03Ni44NDQ1IDI5LjVINzYuODU5N1YyOEg3Ni44NDQ1VjI5LjVaTTc2LjgyOTMgMjkuNUg3Ni44NDQ1VjI4SDc2LjgyOTNWMjkuNVpNNzYuODE0MSAyOS41SDc2LjgyOTNWMjhINzYuODE0MVYyOS41Wk03Ni43OTg5IDI5LjVINzYuODE0MVYyOEg3Ni43OTg5VjI5LjVaTTc2Ljc4MzggMjkuNUg3Ni43OTg5VjI4SDc2Ljc4MzhWMjkuNVpNNzYuNzY4NiAyOS41SDc2Ljc4MzhWMjhINzYuNzY4NlYyOS41Wk03Ni43NTM1IDI5LjVINzYuNzY4NlYyOEg3Ni43NTM1VjI5LjVaTTc2LjczODQgMjkuNUg3Ni43NTM1VjI4SDc2LjczODRWMjkuNVpNNzYuNzIzMyAyOS41SDc2LjczODRWMjhINzYuNzIzM1YyOS41Wk03Ni43MDgyIDI5LjVINzYuNzIzM1YyOEg3Ni43MDgyVjI5LjVaTTc2LjY5MzEgMjkuNUg3Ni43MDgyVjI4SDc2LjY5MzFWMjkuNVpNNzYuNjc4IDI5LjVINzYuNjkzMVYyOEg3Ni42NzhWMjkuNVpNNzYuNjYzIDI5LjVINzYuNjc4VjI4SDc2LjY2M1YyOS41Wk03Ni42NDc5IDI5LjVINzYuNjYzVjI4SDc2LjY0NzlWMjkuNVpNNzYuNjMyOSAyOS41SDc2LjY0NzlWMjhINzYuNjMyOVYyOS41Wk03Ni42MTc5IDI5LjVINzYuNjMyOVYyOEg3Ni42MTc5VjI5LjVaTTc2LjYwMjkgMjkuNUg3Ni42MTc5VjI4SDc2LjYwMjlWMjkuNVpNNzYuNTg3OCAyOS41SDc2LjYwMjlWMjhINzYuNTg3OFYyOS41Wk03Ni41NzI5IDI5LjVINzYuNTg3OFYyOEg3Ni41NzI5VjI5LjVaTTc2LjU1NzkgMjkuNUg3Ni41NzI5VjI4SDc2LjU1NzlWMjkuNVpNNzYuNTQyOSAyOS41SDc2LjU1NzlWMjhINzYuNTQyOVYyOS41Wk03Ni41Mjc5IDI5LjVINzYuNTQyOVYyOEg3Ni41Mjc5VjI5LjVaTTc2LjUxMyAyOS41SDc2LjUyNzlWMjhINzYuNTEzVjI5LjVaTTc2LjQ5ODEgMjkuNUg3Ni41MTNWMjhINzYuNDk4MVYyOS41Wk03Ni40ODMxIDI5LjVINzYuNDk4MVYyOEg3Ni40ODMxVjI5LjVaTTc2LjQ2ODIgMjkuNUg3Ni40ODMxVjI4SDc2LjQ2ODJWMjkuNVpNNzYuNDUzMyAyOS41SDc2LjQ2ODJWMjhINzYuNDUzM1YyOS41Wk03Ni40Mzg0IDI5LjVINzYuNDUzM1YyOEg3Ni40Mzg0VjI5LjVaTTc2LjQyMzYgMjkuNUg3Ni40Mzg0VjI4SDc2LjQyMzZWMjkuNVpNNzYuNDA4NyAyOS41SDc2LjQyMzZWMjhINzYuNDA4N1YyOS41Wk03Ni4zOTM4IDI5LjVINzYuNDA4N1YyOEg3Ni4zOTM4VjI5LjVaTTc2LjM3OSAyOS41SDc2LjM5MzhWMjhINzYuMzc5VjI5LjVaTTc2LjM2NDIgMjkuNUg3Ni4zNzlWMjhINzYuMzY0MlYyOS41Wk03Ni4zNDkzIDI5LjVINzYuMzY0MlYyOEg3Ni4zNDkzVjI5LjVaTTc2LjMzNDUgMjkuNUg3Ni4zNDkzVjI4SDc2LjMzNDVWMjkuNVpNNzYuMzE5NyAyOS41SDc2LjMzNDVWMjhINzYuMzE5N1YyOS41Wk03Ni4zMDQ5IDI5LjVINzYuMzE5N1YyOEg3Ni4zMDQ5VjI5LjVaTTc2LjI5MDIgMjkuNUg3Ni4zMDQ5VjI4SDc2LjI5MDJWMjkuNVpNNzYuMjc1NCAyOS41SDc2LjI5MDJWMjhINzYuMjc1NFYyOS41Wk03Ni4yNjA3IDI5LjVINzYuMjc1NFYyOEg3Ni4yNjA3VjI5LjVaTTc2LjI0NTkgMjkuNUg3Ni4yNjA3VjI4SDc2LjI0NTlWMjkuNVpNNzYuMjMxMiAyOS41SDc2LjI0NTlWMjhINzYuMjMxMlYyOS41Wk03Ni4yMTY1IDI5LjVINzYuMjMxMlYyOEg3Ni4yMTY1VjI5LjVaTTc2LjIwMTggMjkuNUg3Ni4yMTY1VjI4SDc2LjIwMThWMjkuNVpNNzYuMTg3MSAyOS41SDc2LjIwMThWMjhINzYuMTg3MVYyOS41Wk03Ni4xNzI0IDI5LjVINzYuMTg3MVYyOEg3Ni4xNzI0VjI5LjVaTTc2LjE1NzcgMjkuNUg3Ni4xNzI0VjI4SDc2LjE1NzdWMjkuNVpNNzYuMTQzIDI5LjVINzYuMTU3N1YyOEg3Ni4xNDNWMjkuNVpNNzYuMTI4NCAyOS41SDc2LjE0M1YyOEg3Ni4xMjg0VjI5LjVaTTc2LjExMzggMjkuNUg3Ni4xMjg0VjI4SDc2LjExMzhWMjkuNVpNNzYuMDk5MSAyOS41SDc2LjExMzhWMjhINzYuMDk5MVYyOS41Wk03Ni4wODQ1IDI5LjVINzYuMDk5MVYyOEg3Ni4wODQ1VjI5LjVaTTc2LjA2OTkgMjkuNUg3Ni4wODQ1VjI4SDc2LjA2OTlWMjkuNVpNNzYuMDU1MyAyOS41SDc2LjA2OTlWMjhINzYuMDU1M1YyOS41Wk03Ni4wNDA3IDI5LjVINzYuMDU1M1YyOEg3Ni4wNDA3VjI5LjVaTTc2LjAyNjIgMjkuNUg3Ni4wNDA3VjI4SDc2LjAyNjJWMjkuNVpNNzYuMDExNiAyOS41SDc2LjAyNjJWMjhINzYuMDExNlYyOS41Wk03NS45OTcxIDI5LjVINzYuMDExNlYyOEg3NS45OTcxVjI5LjVaTTc1Ljk4MjUgMjkuNUg3NS45OTcxVjI4SDc1Ljk4MjVWMjkuNVpNNzUuOTY4IDI5LjVINzUuOTgyNVYyOEg3NS45NjhWMjkuNVpNNzUuOTUzNSAyOS41SDc1Ljk2OFYyOEg3NS45NTM1VjI5LjVaTTc1LjkzOSAyOS41SDc1Ljk1MzVWMjhINzUuOTM5VjI5LjVaTTc1LjkyNDUgMjkuNUg3NS45MzlWMjhINzUuOTI0NVYyOS41Wk03NS45MSAyOS41SDc1LjkyNDVWMjhINzUuOTFWMjkuNVpNNzUuODk1NSAyOS41SDc1LjkxVjI4SDc1Ljg5NTVWMjkuNVpNNzUuODgxMSAyOS41SDc1Ljg5NTVWMjhINzUuODgxMVYyOS41Wk03NS44NjY2IDI5LjVINzUuODgxMVYyOEg3NS44NjY2VjI5LjVaTTc1Ljg1MjIgMjkuNUg3NS44NjY2VjI4SDc1Ljg1MjJWMjkuNVpNNzUuODM3OCAyOS41SDc1Ljg1MjJWMjhINzUuODM3OFYyOS41Wk03NS44MjM0IDI5LjVINzUuODM3OFYyOEg3NS44MjM0VjI5LjVaTTc1LjgwOSAyOS41SDc1LjgyMzRWMjhINzUuODA5VjI5LjVaTTc1Ljc5NDYgMjkuNUg3NS44MDlWMjhINzUuNzk0NlYyOS41Wk03NS43ODAyIDI5LjVINzUuNzk0NlYyOEg3NS43ODAyVjI5LjVaTTc1Ljc2NTkgMjkuNUg3NS43ODAyVjI4SDc1Ljc2NTlWMjkuNVpNNzUuNzUxNSAyOS41SDc1Ljc2NTlWMjhINzUuNzUxNVYyOS41Wk03NS43MzcyIDI5LjVINzUuNzUxNVYyOEg3NS43MzcyVjI5LjVaTTc1LjcyMjggMjkuNUg3NS43MzcyVjI4SDc1LjcyMjhWMjkuNVpNNzUuNzA4NSAyOS41SDc1LjcyMjhWMjhINzUuNzA4NVYyOS41Wk03NS42OTQyIDI5LjVINzUuNzA4NVYyOEg3NS42OTQyVjI5LjVaTTc1LjY3OTkgMjkuNUg3NS42OTQyVjI4SDc1LjY3OTlWMjkuNVpNNzUuNjY1NiAyOS41SDc1LjY3OTlWMjhINzUuNjY1NlYyOS41Wk03NS42NTE0IDI5LjVINzUuNjY1NlYyOEg3NS42NTE0VjI5LjVaTTc1LjYzNzEgMjkuNUg3NS42NTE0VjI4SDc1LjYzNzFWMjkuNVpNNzUuNjIyOCAyOS41SDc1LjYzNzFWMjhINzUuNjIyOFYyOS41Wk03NS42MDg2IDI5LjVINzUuNjIyOFYyOEg3NS42MDg2VjI5LjVaTTc1LjU5NDQgMjkuNUg3NS42MDg2VjI4SDc1LjU5NDRWMjkuNVpNNzUuNTgwMiAyOS41SDc1LjU5NDRWMjhINzUuNTgwMlYyOS41Wk03NS41NjYgMjkuNUg3NS41ODAyVjI4SDc1LjU2NlYyOS41Wk03NS41NTE4IDI5LjVINzUuNTY2VjI4SDc1LjU1MThWMjkuNVpNNzUuNTM3NiAyOS41SDc1LjU1MThWMjhINzUuNTM3NlYyOS41Wk03NS41MjM0IDI5LjVINzUuNTM3NlYyOEg3NS41MjM0VjI5LjVaTTc1LjUwOTIgMjkuNUg3NS41MjM0VjI4SDc1LjUwOTJWMjkuNVpNNzUuNDk1MSAyOS41SDc1LjUwOTJWMjhINzUuNDk1MVYyOS41Wk03NS40ODEgMjkuNUg3NS40OTUxVjI4SDc1LjQ4MVYyOS41Wk03NS40NjY4IDI5LjVINzUuNDgxVjI4SDc1LjQ2NjhWMjkuNVpNNzUuNDUyNyAyOS41SDc1LjQ2NjhWMjhINzUuNDUyN1YyOS41Wk03NS40Mzg2IDI5LjVINzUuNDUyN1YyOEg3NS40Mzg2VjI5LjVaTTc1LjQyNDUgMjkuNUg3NS40Mzg2VjI4SDc1LjQyNDVWMjkuNVpNNzUuNDEwNSAyOS41SDc1LjQyNDVWMjhINzUuNDEwNVYyOS41Wk03NS4zOTY0IDI5LjVINzUuNDEwNVYyOEg3NS4zOTY0VjI5LjVaTTc1LjM4MjMgMjkuNUg3NS4zOTY0VjI4SDc1LjM4MjNWMjkuNVpNNzUuMzY4MyAyOS41SDc1LjM4MjNWMjhINzUuMzY4M1YyOS41Wk03NS4zNTQyIDI5LjVINzUuMzY4M1YyOEg3NS4zNTQyVjI5LjVaTTc1LjM0MDIgMjkuNUg3NS4zNTQyVjI4SDc1LjM0MDJWMjkuNVpNNzUuMzI2MiAyOS41SDc1LjM0MDJWMjhINzUuMzI2MlYyOS41Wk03NS4zMTIyIDI5LjVINzUuMzI2MlYyOEg3NS4zMTIyVjI5LjVaTTc1LjI5ODIgMjkuNUg3NS4zMTIyVjI4SDc1LjI5ODJWMjkuNVpNNzUuMjg0MyAyOS41SDc1LjI5ODJWMjhINzUuMjg0M1YyOS41Wk03NS4yNzAzIDI5LjVINzUuMjg0M1YyOEg3NS4yNzAzVjI5LjVaTTc1LjI1NjMgMjkuNUg3NS4yNzAzVjI4SDc1LjI1NjNWMjkuNVpNNzUuMjQyNCAyOS41SDc1LjI1NjNWMjhINzUuMjQyNFYyOS41Wk03NS4yMjg1IDI5LjVINzUuMjQyNFYyOEg3NS4yMjg1VjI5LjVaTTc1LjIxNDUgMjkuNUg3NS4yMjg1VjI4SDc1LjIxNDVWMjkuNVpNNzUuMjAwNiAyOS41SDc1LjIxNDVWMjhINzUuMjAwNlYyOS41Wk03NS4xODY3IDI5LjVINzUuMjAwNlYyOEg3NS4xODY3VjI5LjVaTTc1LjE3MjkgMjkuNUg3NS4xODY3VjI4SDc1LjE3MjlWMjkuNVpNNzUuMTU5IDI5LjVINzUuMTcyOVYyOEg3NS4xNTlWMjkuNVpNNzUuMTQ1MSAyOS41SDc1LjE1OVYyOEg3NS4xNDUxVjI5LjVaTTc1LjEzMTMgMjkuNUg3NS4xNDUxVjI4SDc1LjEzMTNWMjkuNVpNNzUuMTE3NCAyOS41SDc1LjEzMTNWMjhINzUuMTE3NFYyOS41Wk03NS4xMDM2IDI5LjVINzUuMTE3NFYyOEg3NS4xMDM2VjI5LjVaTTc1LjA4OTggMjkuNUg3NS4xMDM2VjI4SDc1LjA4OThWMjkuNVpNNzUuMDc2IDI5LjVINzUuMDg5OFYyOEg3NS4wNzZWMjkuNVpNNzUuMDYyMiAyOS41SDc1LjA3NlYyOEg3NS4wNjIyVjI5LjVaTTc1LjA0ODQgMjkuNUg3NS4wNjIyVjI4SDc1LjA0ODRWMjkuNVpNNzUuMDM0NiAyOS41SDc1LjA0ODRWMjhINzUuMDM0NlYyOS41Wk03NS4wMjA5IDI5LjVINzUuMDM0NlYyOEg3NS4wMjA5VjI5LjVaTTc1LjAwNzEgMjkuNUg3NS4wMjA5VjI4SDc1LjAwNzFWMjkuNVpNNzQuOTkzNCAyOS41SDc1LjAwNzFWMjhINzQuOTkzNFYyOS41Wk03NC45Nzk3IDI5LjVINzQuOTkzNFYyOEg3NC45Nzk3VjI5LjVaTTc0Ljk2NTkgMjkuNUg3NC45Nzk3VjI4SDc0Ljk2NTlWMjkuNVpNNzQuOTUyMiAyOS41SDc0Ljk2NTlWMjhINzQuOTUyMlYyOS41Wk03NC45Mzg1IDI5LjVINzQuOTUyMlYyOEg3NC45Mzg1VjI5LjVaTTc0LjkyNDkgMjkuNUg3NC45Mzg1VjI4SDc0LjkyNDlWMjkuNVpNNzQuOTExMiAyOS41SDc0LjkyNDlWMjhINzQuOTExMlYyOS41Wk03NC44OTc1IDI5LjVINzQuOTExMlYyOEg3NC44OTc1VjI5LjVaTTc0Ljg4MzkgMjkuNUg3NC44OTc1VjI4SDc0Ljg4MzlWMjkuNVpNNzQuODcwMyAyOS41SDc0Ljg4MzlWMjhINzQuODcwM1YyOS41Wk03NC44NTY2IDI5LjVINzQuODcwM1YyOEg3NC44NTY2VjI5LjVaTTc0Ljg0MyAyOS41SDc0Ljg1NjZWMjhINzQuODQzVjI5LjVaTTc0LjgyOTQgMjkuNUg3NC44NDNWMjhINzQuODI5NFYyOS41Wk03NC44MTU4IDI5LjVINzQuODI5NFYyOEg3NC44MTU4VjI5LjVaTTc0LjgwMjMgMjkuNUg3NC44MTU4VjI4SDc0LjgwMjNWMjkuNVpNNzQuNzg4NyAyOS41SDc0LjgwMjNWMjhINzQuNzg4N1YyOS41Wk03NC43NzUxIDI5LjVINzQuNzg4N1YyOEg3NC43NzUxVjI5LjVaTTc0Ljc2MTYgMjkuNUg3NC43NzUxVjI4SDc0Ljc2MTZWMjkuNVpNNzQuNzQ4MSAyOS41SDc0Ljc2MTZWMjhINzQuNzQ4MVYyOS41Wk03NC43MzQ1IDI5LjVINzQuNzQ4MVYyOEg3NC43MzQ1VjI5LjVaTTc0LjcyMSAyOS41SDc0LjczNDVWMjhINzQuNzIxVjI5LjVaTTc0LjcwNzUgMjkuNUg3NC43MjFWMjhINzQuNzA3NVYyOS41Wk03NC42OTQxIDI5LjVINzQuNzA3NVYyOEg3NC42OTQxVjI5LjVaTTc0LjY4MDYgMjkuNUg3NC42OTQxVjI4SDc0LjY4MDZWMjkuNVpNNzQuNjY3MSAyOS41SDc0LjY4MDZWMjhINzQuNjY3MVYyOS41Wk03NC42NTM3IDI5LjVINzQuNjY3MVYyOEg3NC42NTM3VjI5LjVaTTc0LjY0MDIgMjkuNUg3NC42NTM3VjI4SDc0LjY0MDJWMjkuNVpNNzQuNjI2OCAyOS41SDc0LjY0MDJWMjhINzQuNjI2OFYyOS41Wk03NC42MTM0IDI5LjVINzQuNjI2OFYyOEg3NC42MTM0VjI5LjVaTTc0LjYgMjkuNUg3NC42MTM0VjI4SDc0LjZWMjkuNVpNNzQuNTg2NiAyOS41SDc0LjZWMjhINzQuNTg2NlYyOS41Wk03NC41NzMyIDI5LjVINzQuNTg2NlYyOEg3NC41NzMyVjI5LjVaTTc0LjU1OTggMjkuNUg3NC41NzMyVjI4SDc0LjU1OThWMjkuNVpNNzQuNTQ2NSAyOS41SDc0LjU1OThWMjhINzQuNTQ2NVYyOS41Wk03NC41MzMxIDI5LjVINzQuNTQ2NVYyOEg3NC41MzMxVjI5LjVaTTc0LjUxOTggMjkuNUg3NC41MzMxVjI4SDc0LjUxOThWMjkuNVpNNzQuNTA2NSAyOS41SDc0LjUxOThWMjhINzQuNTA2NVYyOS41Wk03NC40OTMxIDI5LjVINzQuNTA2NVYyOEg3NC40OTMxVjI5LjVaTTc0LjQ3OTggMjkuNUg3NC40OTMxVjI4SDc0LjQ3OThWMjkuNVpNNzQuNDY2NSAyOS41SDc0LjQ3OThWMjhINzQuNDY2NVYyOS41Wk03NC40NTMzIDI5LjVINzQuNDY2NVYyOEg3NC40NTMzVjI5LjVaTTc0LjQ0IDI5LjVINzQuNDUzM1YyOEg3NC40NFYyOS41Wk03NC40MjY3IDI5LjVINzQuNDRWMjhINzQuNDI2N1YyOS41Wk03NC40MTM1IDI5LjVINzQuNDI2N1YyOEg3NC40MTM1VjI5LjVaTTc0LjQwMDMgMjkuNUg3NC40MTM1VjI4SDc0LjQwMDNWMjkuNVpNNzQuMzg3IDI5LjVINzQuNDAwM1YyOEg3NC4zODdWMjkuNVpNNzQuMzczOCAyOS41SDc0LjM4N1YyOEg3NC4zNzM4VjI5LjVaTTc0LjM2MDYgMjkuNUg3NC4zNzM4VjI4SDc0LjM2MDZWMjkuNVpNNzQuMzQ3NCAyOS41SDc0LjM2MDZWMjhINzQuMzQ3NFYyOS41Wk03NC4zMzQzIDI5LjVINzQuMzQ3NFYyOEg3NC4zMzQzVjI5LjVaTTc0LjMyMTEgMjkuNUg3NC4zMzQzVjI4SDc0LjMyMTFWMjkuNVpNNzQuMzA3OSAyOS41SDc0LjMyMTFWMjhINzQuMzA3OVYyOS41Wk03NC4yOTQ4IDI5LjVINzQuMzA3OVYyOEg3NC4yOTQ4VjI5LjVaTTc0LjI4MTcgMjkuNUg3NC4yOTQ4VjI4SDc0LjI4MTdWMjkuNVpNNzQuMjY4NSAyOS41SDc0LjI4MTdWMjhINzQuMjY4NVYyOS41Wk03NC4yNTU0IDI5LjVINzQuMjY4NVYyOEg3NC4yNTU0VjI5LjVaTTc0LjI0MjMgMjkuNUg3NC4yNTU0VjI4SDc0LjI0MjNWMjkuNVpNNzQuMjI5MiAyOS41SDc0LjI0MjNWMjhINzQuMjI5MlYyOS41Wk03NC4yMTYyIDI5LjVINzQuMjI5MlYyOEg3NC4yMTYyVjI5LjVaTTc0LjIwMzEgMjkuNUg3NC4yMTYyVjI4SDc0LjIwMzFWMjkuNVpNNzQuMTkwMSAyOS41SDc0LjIwMzFWMjhINzQuMTkwMVYyOS41Wk03NC4xNzcgMjkuNUg3NC4xOTAxVjI4SDc0LjE3N1YyOS41Wk03NC4xNjQgMjkuNUg3NC4xNzdWMjhINzQuMTY0VjI5LjVaTTc0LjE1MSAyOS41SDc0LjE2NFYyOEg3NC4xNTFWMjkuNVpNNzQuMTM4IDI5LjVINzQuMTUxVjI4SDc0LjEzOFYyOS41Wk03NC4xMjUgMjkuNUg3NC4xMzhWMjhINzQuMTI1VjI5LjVaTTc0LjExMiAyOS41SDc0LjEyNVYyOEg3NC4xMTJWMjkuNVpNNzQuMDk5IDI5LjVINzQuMTEyVjI4SDc0LjA5OVYyOS41Wk03NC4wODYgMjkuNUg3NC4wOTlWMjhINzQuMDg2VjI5LjVaTTc0LjA3MzEgMjkuNUg3NC4wODZWMjhINzQuMDczMVYyOS41Wk03NC4wNjAyIDI5LjVINzQuMDczMVYyOEg3NC4wNjAyVjI5LjVaTTc0LjA0NzIgMjkuNUg3NC4wNjAyVjI4SDc0LjA0NzJWMjkuNVpNNzQuMDM0MyAyOS41SDc0LjA0NzJWMjhINzQuMDM0M1YyOS41Wk03NC4wMjE0IDI5LjVINzQuMDM0M1YyOEg3NC4wMjE0VjI5LjVaTTc0LjAwODUgMjkuNUg3NC4wMjE0VjI4SDc0LjAwODVWMjkuNVpNNzMuOTk1NiAyOS41SDc0LjAwODVWMjhINzMuOTk1NlYyOS41Wk03My45ODI4IDI5LjVINzMuOTk1NlYyOEg3My45ODI4VjI5LjVaTTczLjk2OTkgMjkuNUg3My45ODI4VjI4SDczLjk2OTlWMjkuNVpNNzMuOTU3MSAyOS41SDczLjk2OTlWMjhINzMuOTU3MVYyOS41Wk03My45NDQyIDI5LjVINzMuOTU3MVYyOEg3My45NDQyVjI5LjVaTTczLjkzMTQgMjkuNUg3My45NDQyVjI4SDczLjkzMTRWMjkuNVpNNzMuOTE4NiAyOS41SDczLjkzMTRWMjhINzMuOTE4NlYyOS41Wk03My45MDU4IDI5LjVINzMuOTE4NlYyOEg3My45MDU4VjI5LjVaTTczLjg5MyAyOS41SDczLjkwNThWMjhINzMuODkzVjI5LjVaTTczLjg4MDIgMjkuNUg3My44OTNWMjhINzMuODgwMlYyOS41Wk03My44Njc1IDI5LjVINzMuODgwMlYyOEg3My44Njc1VjI5LjVaTTczLjg1NDcgMjkuNUg3My44Njc1VjI4SDczLjg1NDdWMjkuNVpNNzMuODQyIDI5LjVINzMuODU0N1YyOEg3My44NDJWMjkuNVpNNzMuODI5MiAyOS41SDczLjg0MlYyOEg3My44MjkyVjI5LjVaTTczLjgxNjUgMjkuNUg3My44MjkyVjI4SDczLjgxNjVWMjkuNVpNNzMuODAzOCAyOS41SDczLjgxNjVWMjhINzMuODAzOFYyOS41Wk03My43OTExIDI5LjVINzMuODAzOFYyOEg3My43OTExVjI5LjVaTTczLjc3ODQgMjkuNUg3My43OTExVjI4SDczLjc3ODRWMjkuNVpNNzMuNzY1NyAyOS41SDczLjc3ODRWMjhINzMuNzY1N1YyOS41Wk03My43NTMxIDI5LjVINzMuNzY1N1YyOEg3My43NTMxVjI5LjVaTTczLjc0MDQgMjkuNUg3My43NTMxVjI4SDczLjc0MDRWMjkuNVpNNzMuNzI3OCAyOS41SDczLjc0MDRWMjhINzMuNzI3OFYyOS41Wk03My43MTUxIDI5LjVINzMuNzI3OFYyOEg3My43MTUxVjI5LjVaTTczLjcwMjUgMjkuNUg3My43MTUxVjI4SDczLjcwMjVWMjkuNVpNNzMuNjg5OSAyOS41SDczLjcwMjVWMjhINzMuNjg5OVYyOS41Wk03My42NzczIDI5LjVINzMuNjg5OVYyOEg3My42NzczVjI5LjVaTTczLjY2NDcgMjkuNUg3My42NzczVjI4SDczLjY2NDdWMjkuNVpNNzMuNjUyMiAyOS41SDczLjY2NDdWMjhINzMuNjUyMlYyOS41Wk03My42Mzk2IDI5LjVINzMuNjUyMlYyOEg3My42Mzk2VjI5LjVaTTczLjYyNzEgMjkuNUg3My42Mzk2VjI4SDczLjYyNzFWMjkuNVpNNzMuNjE0NSAyOS41SDczLjYyNzFWMjhINzMuNjE0NVYyOS41Wk03My42MDIgMjkuNUg3My42MTQ1VjI4SDczLjYwMlYyOS41Wk03My41ODk1IDI5LjVINzMuNjAyVjI4SDczLjU4OTVWMjkuNVpNNzMuNTc3IDI5LjVINzMuNTg5NVYyOEg3My41NzdWMjkuNVpNNzMuNTY0NSAyOS41SDczLjU3N1YyOEg3My41NjQ1VjI5LjVaTTczLjU1MiAyOS41SDczLjU2NDVWMjhINzMuNTUyVjI5LjVaTTczLjUzOTUgMjkuNUg3My41NTJWMjhINzMuNTM5NVYyOS41Wk03My41MjcxIDI5LjVINzMuNTM5NVYyOEg3My41MjcxVjI5LjVaTTczLjUxNDYgMjkuNUg3My41MjcxVjI4SDczLjUxNDZWMjkuNVpNNzMuNTAyMiAyOS41SDczLjUxNDZWMjhINzMuNTAyMlYyOS41Wk03My40ODk4IDI5LjVINzMuNTAyMlYyOEg3My40ODk4VjI5LjVaTTczLjQ3NzMgMjkuNUg3My40ODk4VjI4SDczLjQ3NzNWMjkuNVpNNzMuNDY0OSAyOS41SDczLjQ3NzNWMjhINzMuNDY0OVYyOS41Wk03My40NTI2IDI5LjVINzMuNDY0OVYyOEg3My40NTI2VjI5LjVaTTczLjQ0MDIgMjkuNUg3My40NTI2VjI4SDczLjQ0MDJWMjkuNVpNNzMuNDI3OCAyOS41SDczLjQ0MDJWMjhINzMuNDI3OFYyOS41Wk03My40MTU0IDI5LjVINzMuNDI3OFYyOEg3My40MTU0VjI5LjVaTTczLjQwMzEgMjkuNUg3My40MTU0VjI4SDczLjQwMzFWMjkuNVpNNzMuMzkwOCAyOS41SDczLjQwMzFWMjhINzMuMzkwOFYyOS41Wk03My4zNzg0IDI5LjVINzMuMzkwOFYyOEg3My4zNzg0VjI5LjVaTTczLjM2NjEgMjkuNUg3My4zNzg0VjI4SDczLjM2NjFWMjkuNVpNNzMuMzUzOCAyOS41SDczLjM2NjFWMjhINzMuMzUzOFYyOS41Wk03My4zNDE2IDI5LjVINzMuMzUzOFYyOEg3My4zNDE2VjI5LjVaTTczLjMyOTMgMjkuNUg3My4zNDE2VjI4SDczLjMyOTNWMjkuNVpNNzMuMzE3IDI5LjVINzMuMzI5M1YyOEg3My4zMTdWMjkuNVpNNzMuMzA0OCAyOS41SDczLjMxN1YyOEg3My4zMDQ4VjI5LjVaTTczLjI5MjUgMjkuNUg3My4zMDQ4VjI4SDczLjI5MjVWMjkuNVpNNzMuMjgwMyAyOS41SDczLjI5MjVWMjhINzMuMjgwM1YyOS41Wk03My4yNjgxIDI5LjVINzMuMjgwM1YyOEg3My4yNjgxVjI5LjVaTTczLjI1NTkgMjkuNUg3My4yNjgxVjI4SDczLjI1NTlWMjkuNVpNNzMuMjQzNyAyOS41SDczLjI1NTlWMjhINzMuMjQzN1YyOS41Wk03My4yMzE1IDI5LjVINzMuMjQzN1YyOEg3My4yMzE1VjI5LjVaTTczLjIxOTMgMjkuNUg3My4yMzE1VjI4SDczLjIxOTNWMjkuNVpNNzMuMjA3MSAyOS41SDczLjIxOTNWMjhINzMuMjA3MVYyOS41Wk03My4xOTUgMjkuNUg3My4yMDcxVjI4SDczLjE5NVYyOS41Wk03My4xODI5IDI5LjVINzMuMTk1VjI4SDczLjE4MjlWMjkuNVpNNzMuMTcwNyAyOS41SDczLjE4MjlWMjhINzMuMTcwN1YyOS41Wk03My4xNTg2IDI5LjVINzMuMTcwN1YyOEg3My4xNTg2VjI5LjVaTTczLjE0NjUgMjkuNUg3My4xNTg2VjI4SDczLjE0NjVWMjkuNVpNNzMuMTM0NCAyOS41SDczLjE0NjVWMjhINzMuMTM0NFYyOS41Wk03My4xMjIzIDI5LjVINzMuMTM0NFYyOEg3My4xMjIzVjI5LjVaTTczLjExMDMgMjkuNUg3My4xMjIzVjI4SDczLjExMDNWMjkuNVpNNzMuMDk4MiAyOS41SDczLjExMDNWMjhINzMuMDk4MlYyOS41Wk03My4wODYxIDI5LjVINzMuMDk4MlYyOEg3My4wODYxVjI5LjVaTTczLjA3NDEgMjkuNUg3My4wODYxVjI4SDczLjA3NDFWMjkuNVpNNzMuMDYyMSAyOS41SDczLjA3NDFWMjhINzMuMDYyMVYyOS41Wk03My4wNTAxIDI5LjVINzMuMDYyMVYyOEg3My4wNTAxVjI5LjVaTTczLjAzODEgMjkuNUg3My4wNTAxVjI4SDczLjAzODFWMjkuNVpNNzMuMDI2MSAyOS41SDczLjAzODFWMjhINzMuMDI2MVYyOS41Wk03My4wMTQxIDI5LjVINzMuMDI2MVYyOEg3My4wMTQxVjI5LjVaTTczLjAwMjEgMjkuNUg3My4wMTQxVjI4SDczLjAwMjFWMjkuNVpNNzIuOTkwMiAyOS41SDczLjAwMjFWMjhINzIuOTkwMlYyOS41Wk03Mi45NzgyIDI5LjVINzIuOTkwMlYyOEg3Mi45NzgyVjI5LjVaTTcyLjk2NjMgMjkuNUg3Mi45NzgyVjI4SDcyLjk2NjNWMjkuNVpNNzIuOTU0NCAyOS41SDcyLjk2NjNWMjhINzIuOTU0NFYyOS41Wk03Mi45NDI1IDI5LjVINzIuOTU0NFYyOEg3Mi45NDI1VjI5LjVaTTcyLjkzMDYgMjkuNUg3Mi45NDI1VjI4SDcyLjkzMDZWMjkuNVpNNzIuOTE4NyAyOS41SDcyLjkzMDZWMjhINzIuOTE4N1YyOS41Wk03Mi45MDY4IDI5LjVINzIuOTE4N1YyOEg3Mi45MDY4VjI5LjVaTTcyLjg5NDkgMjkuNUg3Mi45MDY4VjI4SDcyLjg5NDlWMjkuNVpNNzIuODgzMSAyOS41SDcyLjg5NDlWMjhINzIuODgzMVYyOS41Wk03Mi44NzEyIDI5LjVINzIuODgzMVYyOEg3Mi44NzEyVjI5LjVaTTcyLjg1OTQgMjkuNUg3Mi44NzEyVjI4SDcyLjg1OTRWMjkuNVpNNzIuODQ3NiAyOS41SDcyLjg1OTRWMjhINzIuODQ3NlYyOS41Wk03Mi44MzU4IDI5LjVINzIuODQ3NlYyOEg3Mi44MzU4VjI5LjVaTTcyLjgyNCAyOS41SDcyLjgzNThWMjhINzIuODI0VjI5LjVaTTcyLjgxMjIgMjkuNUg3Mi44MjRWMjhINzIuODEyMlYyOS41Wk03Mi44MDA0IDI5LjVINzIuODEyMlYyOEg3Mi44MDA0VjI5LjVaTTcyLjc4ODcgMjkuNUg3Mi44MDA0VjI4SDcyLjc4ODdWMjkuNVpNNzIuNzc2OSAyOS41SDcyLjc4ODdWMjhINzIuNzc2OVYyOS41Wk03Mi43NjUyIDI5LjVINzIuNzc2OVYyOEg3Mi43NjUyVjI5LjVaTTcyLjc1MzQgMjkuNUg3Mi43NjUyVjI4SDcyLjc1MzRWMjkuNVpNNzIuNzQxNyAyOS41SDcyLjc1MzRWMjhINzIuNzQxN1YyOS41Wk03Mi43MyAyOS41SDcyLjc0MTdWMjhINzIuNzNWMjkuNVpNNzIuNzE4MyAyOS41SDcyLjczVjI4SDcyLjcxODNWMjkuNVpNNzIuNzA2NiAyOS41SDcyLjcxODNWMjhINzIuNzA2NlYyOS41Wk03Mi42OTUgMjkuNUg3Mi43MDY2VjI4SDcyLjY5NVYyOS41Wk03Mi42ODMzIDI5LjVINzIuNjk1VjI4SDcyLjY4MzNWMjkuNVpNNzIuNjcxNyAyOS41SDcyLjY4MzNWMjhINzIuNjcxN1YyOS41Wk03Mi42NiAyOS41SDcyLjY3MTdWMjhINzIuNjZWMjkuNVpNNzIuNjQ4NCAyOS41SDcyLjY2VjI4SDcyLjY0ODRWMjkuNVpNNzIuNjM2OCAyOS41SDcyLjY0ODRWMjhINzIuNjM2OFYyOS41Wk03Mi42MjUyIDI5LjVINzIuNjM2OFYyOEg3Mi42MjUyVjI5LjVaTTcyLjYxMzYgMjkuNUg3Mi42MjUyVjI4SDcyLjYxMzZWMjkuNVpNNzIuNjAyIDI5LjVINzIuNjEzNlYyOEg3Mi42MDJWMjkuNVpNNzIuNTkwNCAyOS41SDcyLjYwMlYyOEg3Mi41OTA0VjI5LjVaTTcyLjU3ODkgMjkuNUg3Mi41OTA0VjI4SDcyLjU3ODlWMjkuNVpNNzIuNTY3MyAyOS41SDcyLjU3ODlWMjhINzIuNTY3M1YyOS41Wk03Mi41NTU4IDI5LjVINzIuNTY3M1YyOEg3Mi41NTU4VjI5LjVaTTcyLjU0NDMgMjkuNUg3Mi41NTU4VjI4SDcyLjU0NDNWMjkuNVpNNzIuNTMyOCAyOS41SDcyLjU0NDNWMjhINzIuNTMyOFYyOS41Wk03Mi41MjEzIDI5LjVINzIuNTMyOFYyOEg3Mi41MjEzVjI5LjVaTTcyLjUwOTggMjkuNUg3Mi41MjEzVjI4SDcyLjUwOThWMjkuNVpNNzIuNDk4MyAyOS41SDcyLjUwOThWMjhINzIuNDk4M1YyOS41Wk03Mi40ODY4IDI5LjVINzIuNDk4M1YyOEg3Mi40ODY4VjI5LjVaTTcyLjQ3NTQgMjkuNUg3Mi40ODY4VjI4SDcyLjQ3NTRWMjkuNVpNNzIuNDYzOSAyOS41SDcyLjQ3NTRWMjhINzIuNDYzOVYyOS41Wk03Mi40NTI1IDI5LjVINzIuNDYzOVYyOEg3Mi40NTI1VjI5LjVaTTcyLjQ0MTEgMjkuNUg3Mi40NTI1VjI4SDcyLjQ0MTFWMjkuNVpNNzIuNDI5NyAyOS41SDcyLjQ0MTFWMjhINzIuNDI5N1YyOS41Wk03Mi40MTgzIDI5LjVINzIuNDI5N1YyOEg3Mi40MTgzVjI5LjVaTTcyLjQwNjkgMjkuNUg3Mi40MTgzVjI4SDcyLjQwNjlWMjkuNVpNNzIuMzk1NSAyOS41SDcyLjQwNjlWMjhINzIuMzk1NVYyOS41Wk03Mi4zODQyIDI5LjVINzIuMzk1NVYyOEg3Mi4zODQyVjI5LjVaTTcyLjM3MjggMjkuNUg3Mi4zODQyVjI4SDcyLjM3MjhWMjkuNVpNNzIuMzYxNSAyOS41SDcyLjM3MjhWMjhINzIuMzYxNVYyOS41Wk03Mi4zNTAxIDI5LjVINzIuMzYxNVYyOEg3Mi4zNTAxVjI5LjVaTTcyLjMzODggMjkuNUg3Mi4zNTAxVjI4SDcyLjMzODhWMjkuNVpNNzIuMzI3NSAyOS41SDcyLjMzODhWMjhINzIuMzI3NVYyOS41Wk03Mi4zMTYyIDI5LjVINzIuMzI3NVYyOEg3Mi4zMTYyVjI5LjVaTTcyLjMwNDkgMjkuNUg3Mi4zMTYyVjI4SDcyLjMwNDlWMjkuNVpNNzIuMjkzNyAyOS41SDcyLjMwNDlWMjhINzIuMjkzN1YyOS41Wk03Mi4yODI0IDI5LjVINzIuMjkzN1YyOEg3Mi4yODI0VjI5LjVaTTcyLjI3MTIgMjkuNUg3Mi4yODI0VjI4SDcyLjI3MTJWMjkuNVpNNzIuMjU5OSAyOS41SDcyLjI3MTJWMjhINzIuMjU5OVYyOS41Wk03Mi4yNDg3IDI5LjVINzIuMjU5OVYyOEg3Mi4yNDg3VjI5LjVaTTcyLjIzNzUgMjkuNUg3Mi4yNDg3VjI4SDcyLjIzNzVWMjkuNVpNNzIuMjI2MyAyOS41SDcyLjIzNzVWMjhINzIuMjI2M1YyOS41Wk03Mi4yMTUxIDI5LjVINzIuMjI2M1YyOEg3Mi4yMTUxVjI5LjVaTTcyLjIwMzkgMjkuNUg3Mi4yMTUxVjI4SDcyLjIwMzlWMjkuNVpNNzIuMTkyNyAyOS41SDcyLjIwMzlWMjhINzIuMTkyN1YyOS41Wk03Mi4xODE2IDI5LjVINzIuMTkyN1YyOEg3Mi4xODE2VjI5LjVaTTcyLjE3MDQgMjkuNUg3Mi4xODE2VjI4SDcyLjE3MDRWMjkuNVpNNzIuMTU5MyAyOS41SDcyLjE3MDRWMjhINzIuMTU5M1YyOS41Wk03Mi4xNDgyIDI5LjVINzIuMTU5M1YyOEg3Mi4xNDgyVjI5LjVaTTcyLjEzNzEgMjkuNUg3Mi4xNDgyVjI4SDcyLjEzNzFWMjkuNVpNNzIuMTI2IDI5LjVINzIuMTM3MVYyOEg3Mi4xMjZWMjkuNVpNNzIuMTE0OSAyOS41SDcyLjEyNlYyOEg3Mi4xMTQ5VjI5LjVaTTcyLjEwMzggMjkuNUg3Mi4xMTQ5VjI4SDcyLjEwMzhWMjkuNVpNNzIuMDkyNyAyOS41SDcyLjEwMzhWMjhINzIuMDkyN1YyOS41Wk03Mi4wODE3IDI5LjVINzIuMDkyN1YyOEg3Mi4wODE3VjI5LjVaTTcyLjA3MDYgMjkuNUg3Mi4wODE3VjI4SDcyLjA3MDZWMjkuNVpNNzIuMDU5NiAyOS41SDcyLjA3MDZWMjhINzIuMDU5NlYyOS41Wk03Mi4wNDg2IDI5LjVINzIuMDU5NlYyOEg3Mi4wNDg2VjI5LjVaTTcyLjAzNzYgMjkuNUg3Mi4wNDg2VjI4SDcyLjAzNzZWMjkuNVpNNzIuMDI2NiAyOS41SDcyLjAzNzZWMjhINzIuMDI2NlYyOS41Wk03Mi4wMTU2IDI5LjVINzIuMDI2NlYyOEg3Mi4wMTU2VjI5LjVaTTcyLjAwNDYgMjkuNUg3Mi4wMTU2VjI4SDcyLjAwNDZWMjkuNVpNNzEuOTkzNiAyOS41SDcyLjAwNDZWMjhINzEuOTkzNlYyOS41Wk03MS45ODI3IDI5LjVINzEuOTkzNlYyOEg3MS45ODI3VjI5LjVaTTcxLjk3MTcgMjkuNUg3MS45ODI3VjI4SDcxLjk3MTdWMjkuNVpNNzEuOTYwOCAyOS41SDcxLjk3MTdWMjhINzEuOTYwOFYyOS41Wk03MS45NDk5IDI5LjVINzEuOTYwOFYyOEg3MS45NDk5VjI5LjVaTTcxLjkzOSAyOS41SDcxLjk0OTlWMjhINzEuOTM5VjI5LjVaTTcxLjkyODEgMjkuNUg3MS45MzlWMjhINzEuOTI4MVYyOS41Wk03MS45MTcyIDI5LjVINzEuOTI4MVYyOEg3MS45MTcyVjI5LjVaTTcxLjkwNjMgMjkuNUg3MS45MTcyVjI4SDcxLjkwNjNWMjkuNVpNNzEuODk1NSAyOS41SDcxLjkwNjNWMjhINzEuODk1NVYyOS41Wk03MS44ODQ2IDI5LjVINzEuODk1NVYyOEg3MS44ODQ2VjI5LjVaTTcxLjg3MzggMjkuNUg3MS44ODQ2VjI4SDcxLjg3MzhWMjkuNVpNNzEuODYzIDI5LjVINzEuODczOFYyOEg3MS44NjNWMjkuNVpNNzEuODUyMSAyOS41SDcxLjg2M1YyOEg3MS44NTIxVjI5LjVaTTcxLjg0MTMgMjkuNUg3MS44NTIxVjI4SDcxLjg0MTNWMjkuNVpNNzEuODMwNSAyOS41SDcxLjg0MTNWMjhINzEuODMwNVYyOS41Wk03MS44MTk4IDI5LjVINzEuODMwNVYyOEg3MS44MTk4VjI5LjVaTTcxLjgwOSAyOS41SDcxLjgxOThWMjhINzEuODA5VjI5LjVaTTcxLjc5ODIgMjkuNUg3MS44MDlWMjhINzEuNzk4MlYyOS41Wk03MS43ODc1IDI5LjVINzEuNzk4MlYyOEg3MS43ODc1VjI5LjVaTTcxLjc3NjggMjkuNUg3MS43ODc1VjI4SDcxLjc3NjhWMjkuNVpNNzEuNzY2IDI5LjVINzEuNzc2OFYyOEg3MS43NjZWMjkuNVpNNzEuNzU1MyAyOS41SDcxLjc2NlYyOEg3MS43NTUzVjI5LjVaTTcxLjc0NDYgMjkuNUg3MS43NTUzVjI4SDcxLjc0NDZWMjkuNVpNNzEuNzMzOSAyOS41SDcxLjc0NDZWMjhINzEuNzMzOVYyOS41Wk03MS43MjMzIDI5LjVINzEuNzMzOVYyOEg3MS43MjMzVjI5LjVaTTcxLjcxMjYgMjkuNUg3MS43MjMzVjI4SDcxLjcxMjZWMjkuNVpNNzEuNzAxOSAyOS41SDcxLjcxMjZWMjhINzEuNzAxOVYyOS41Wk03MS42OTEzIDI5LjVINzEuNzAxOVYyOEg3MS42OTEzVjI5LjVaTTcxLjY4MDcgMjkuNUg3MS42OTEzVjI4SDcxLjY4MDdWMjkuNVpNNzEuNjcgMjkuNUg3MS42ODA3VjI4SDcxLjY3VjI5LjVaTTcxLjY1OTQgMjkuNUg3MS42N1YyOEg3MS42NTk0VjI5LjVaTTcxLjY0ODggMjkuNUg3MS42NTk0VjI4SDcxLjY0ODhWMjkuNVpNNzEuNjM4MiAyOS41SDcxLjY0ODhWMjhINzEuNjM4MlYyOS41Wk03MS42Mjc3IDI5LjVINzEuNjM4MlYyOEg3MS42Mjc3VjI5LjVaTTcxLjYxNzEgMjkuNUg3MS42Mjc3VjI4SDcxLjYxNzFWMjkuNVpNNzEuNjA2NSAyOS41SDcxLjYxNzFWMjhINzEuNjA2NVYyOS41Wk03MS41OTYgMjkuNUg3MS42MDY1VjI4SDcxLjU5NlYyOS41Wk03MS41ODU1IDI5LjVINzEuNTk2VjI4SDcxLjU4NTVWMjkuNVpNNzEuNTc1IDI5LjVINzEuNTg1NVYyOEg3MS41NzVWMjkuNVpNNzEuNTY0NCAyOS41SDcxLjU3NVYyOEg3MS41NjQ0VjI5LjVaTTcxLjU1MzkgMjkuNUg3MS41NjQ0VjI4SDcxLjU1MzlWMjkuNVpNNzEuNTQzNSAyOS41SDcxLjU1MzlWMjhINzEuNTQzNVYyOS41Wk03MS41MzMgMjkuNUg3MS41NDM1VjI4SDcxLjUzM1YyOS41Wk03MS41MjI1IDI5LjVINzEuNTMzVjI4SDcxLjUyMjVWMjkuNVpNNzEuNTEyMSAyOS41SDcxLjUyMjVWMjhINzEuNTEyMVYyOS41Wk03MS41MDE2IDI5LjVINzEuNTEyMVYyOEg3MS41MDE2VjI5LjVaTTcxLjQ5MTIgMjkuNUg3MS41MDE2VjI4SDcxLjQ5MTJWMjkuNVpNNzEuNDgwOCAyOS41SDcxLjQ5MTJWMjhINzEuNDgwOFYyOS41Wk03MS40NzA0IDI5LjVINzEuNDgwOFYyOEg3MS40NzA0VjI5LjVaTTcxLjQ2IDI5LjVINzEuNDcwNFYyOEg3MS40NlYyOS41Wk03MS40NDk2IDI5LjVINzEuNDZWMjhINzEuNDQ5NlYyOS41Wk03MS40MzkyIDI5LjVINzEuNDQ5NlYyOEg3MS40MzkyVjI5LjVaTTcxLjQyODkgMjkuNUg3MS40MzkyVjI4SDcxLjQyODlWMjkuNVpNNzEuNDE4NSAyOS41SDcxLjQyODlWMjhINzEuNDE4NVYyOS41Wk03MS40MDgyIDI5LjVINzEuNDE4NVYyOEg3MS40MDgyVjI5LjVaTTcxLjM5NzkgMjkuNUg3MS40MDgyVjI4SDcxLjM5NzlWMjkuNVpNNzEuMzg3NiAyOS41SDcxLjM5NzlWMjhINzEuMzg3NlYyOS41Wk03MS4zNzczIDI5LjVINzEuMzg3NlYyOEg3MS4zNzczVjI5LjVaTTcxLjM2NyAyOS41SDcxLjM3NzNWMjhINzEuMzY3VjI5LjVaTTcxLjM1NjcgMjkuNUg3MS4zNjdWMjhINzEuMzU2N1YyOS41Wk03MS4zNDY0IDI5LjVINzEuMzU2N1YyOEg3MS4zNDY0VjI5LjVaTTcxLjMzNjIgMjkuNUg3MS4zNDY0VjI4SDcxLjMzNjJWMjkuNVpNNzEuMzI1OSAyOS41SDcxLjMzNjJWMjhINzEuMzI1OVYyOS41Wk03MS4zMTU3IDI5LjVINzEuMzI1OVYyOEg3MS4zMTU3VjI5LjVaTTcxLjMwNTUgMjkuNUg3MS4zMTU3VjI4SDcxLjMwNTVWMjkuNVpNNzEuMjk1MyAyOS41SDcxLjMwNTVWMjhINzEuMjk1M1YyOS41Wk03MS4yODUxIDI5LjVINzEuMjk1M1YyOEg3MS4yODUxVjI5LjVaXCIsXG4gIGZpbGw6IFwiIzNCMzU1MlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTk3Ljk5MSAzNS40MDAyQzk4LjA3OCAzNS41MjgxIDk4LjE3MzggMzUuNjUxOCA5OC4yNzg0IDM1Ljc3MDVMOTguNDQyIDM1Ljk0NDZMOTcuOTkxIDM2LjcyMzVMOTcuOTkxMyA0Ni4wMzYzQzk3Ljk5MTMgNDcuNTMxMyA5OS4xNiA0OC43NTM1IDEwMC42MzQgNDguODM4OEwxMDAuNzk5IDQ4Ljg0MzZMMTEwLjExIDQ4Ljg0MjhMMTExLjI0MyA0OC44Mzg4TDExMS4yNDMgNjkuNDM5NkMxMTEuMjQzIDcxLjIyMTQgMTA5LjA4OCA3Mi4xMTM3IDEwNy44MjggNzAuODUzOEw3NS43ODg0IDM4LjgxMzhDNzQuNTI4NCAzNy41NTM4IDc1LjQyMDggMzUuMzk5NSA3Ny4yMDI3IDM1LjM5OTZMOTcuOTkxIDM1LjQwMDJaXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBmaWxsT3BhY2l0eTogXCIwLjA1XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMTQuMDc3IDQ4Ljg0MzhIMTAxLjk5MUM5OS43ODIxIDQ4Ljg0MzggOTcuOTkxMiA0Ny4wNTI5IDk3Ljk5MTIgNDQuODQzOFYzMi43NTY4XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNjguOTgyNCA2Ni42MjQxSDk2LjEyXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk02OC45ODI0IDc1Ljk4MTZIOTYuMTJcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTY4Ljk4MjQgODUuMzM5SDk2LjEyXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pKTtcbmV4cG9ydCBkZWZhdWx0IERvY3M7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBjb25zdCBEb2N1bWVudENoZWNrID0gKHtcbiAgd2lkdGggPSAxNTIsXG4gIGhlaWdodCA9IDE2OVxufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB3aWR0aDogd2lkdGgsXG4gIGhlaWdodDogaGVpZ2h0LFxuICB2aWV3Qm94OiBcIjAgMCAxNTIgMTY5XCIsXG4gIHZlcnNpb246IFwiMS4xXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gIGlkOiBcIlN5bWJvbHNcIixcbiAgc3Ryb2tlOiBcIm5vbmVcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMVwiLFxuICBmaWxsOiBcIm5vbmVcIixcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICBpZDogXCJHcm91cFwiLFxuICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDIuMDAwMDAwLCAyLjAwMDAwMClcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiM1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk03NCwxMjYuMDYwNjExIEw3NCwxNTguNzIzNTY3IEM3NCwxNjIuMDM3Mjc1IDcxLjMxMzcwODUsMTY0LjcyMzU2NyA2OCwxNjQuNzIzNTY3IEM2Ni45NDUyMTE4LDE2NC43MjM1NjcgNjUuOTA5MDYyNywxNjQuNDQ1NTA0IDY0Ljk5NTk5NiwxNjMuOTE3NDA2IEw2LjY3NDk1MDI2LDEzMC4xODU3NzQgTDYuNjc0OTUwMjYsMTMwLjE4NTc3NCBDMi41NDM5ODQzOSwxMjcuNzk2NTEyIDEuNDIxMDg1NDdlLTE0LDEyMy4zODYyNzggMS40MjEwODU0N2UtMTQsMTE4LjYxNDEyNSBMMS40MjEwODU0N2UtMTQsNDguNDM2MTI5IEMxLjQyMTA4NTQ3ZS0xNCw0My42NjM5NzU2IDIuNTQzOTg0MzksMzkuMjUzNzQxMiA2LjY3NDk1MDI2LDM2Ljg2NDQ3OTkgTDY3LjMwNzIwODMsMS43OTYwOTI3OCBDNzEuNDQ3NzMzNywtMC41OTg2OTc1OTUgNzYuNTUyMjY2MywtMC41OTg2OTc1OTUgODAuNjkyNzkxNywxLjc5NjA5Mjc4IEwxNDEuMzI1MDUsMzYuODY0NDc5OSBDMTQ1LjQ1NjAxNiwzOS4yNTM3NDEyIDE0OCw0My42NjM5NzU2IDE0OCw0OC40MzYxMjkgTDE0OCwxMTguNjE0MTI1IEMxNDgsMTIzLjM4NjI3OCAxNDUuNDU2MDE2LDEyNy43OTY1MTIgMTQxLjMyNTA1LDEzMC4xODU3NzQgTDkyLjI4MTIyMjYsMTU4LjU1MTY2M1wiLFxuICBpZDogXCJQYXRoLUNvcHktNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMDUsNzAuMDI5NjU0NSBDMTA1LDg3LjU3NzE5MzIgMTA1LDEwMC4wNzc3NDEgMTA1LDEwNy41MzEyOTcgTDEwNSwxMjAuMjYzMzg0IEMxMDUsMTIxLjA5Mzc0MyAxMDUsMTIyLjMzOTI4MiAxMDUsMTI0IEMxMDUsMTI1LjEwNDU2OSAxMDQuMTA0NTY5LDEyNiAxMDMsMTI2IEw3My45Njc2Mjk3LDEyNlwiLFxuICBpZDogXCJQYXRoXCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTU0LDQyLjIxNjIxMDIgTDU0LDU0IEM1NCw1NS4xMDQ1Njk1IDUzLjEwNDU2OTUsNTYgNTIsNTYgTDQwLjE2NDQ5NzksNTZcIixcbiAgaWQ6IFwiUGF0aC1Db3B5LTlcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNTguNzQ2MDQ0MywxMjYgTDQyLDEyNiBDNDAuODk1NDMwNSwxMjYgNDAsMTI1LjEwNDU2OSA0MCwxMjQgTDQwLDU1LjY4OTg2MjggTDUzLjY4OTg2MjgsNDIgQzYzLjk1NjQ1MjQsNDIgNzEuNjU2Mzk0Niw0MiA3Ni43ODk2ODk0LDQyXCIsXG4gIGlkOiBcIlBhdGhcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgeDE6IFwiNTguNVwiLFxuICB5MTogXCI4OS41XCIsXG4gIHgyOiBcIjg2Ljg3MTU2MzRcIixcbiAgeTI6IFwiODkuNVwiLFxuICBpZDogXCJMaW5lLTRcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgeDE6IFwiNTguNVwiLFxuICB5MTogXCIxMDQuNVwiLFxuICB4MjogXCI4Ni44NzE1NjM0XCIsXG4gIHkyOiBcIjEwNC41XCIsXG4gIGlkOiBcIkxpbmUtNC1Db3B5XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgaWQ6IFwiT3ZhbFwiLFxuICBmaWxsOiBcIiMzMDQwRDZcIixcbiAgZmlsbE9wYWNpdHk6IFwiMC4yXCIsXG4gIGN4OiBcIjkyXCIsXG4gIGN5OiBcIjU1XCIsXG4gIHI6IFwiMjBcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICBpZDogXCJQYXRoXCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIixcbiAgcG9pbnRzOiBcIjEwMy43Mjc5MjIgNDkgOTEgNjEuNzI3OTIyMSA4My44NzE1NjM0IDU0LjU5OTQ4NTVcIlxufSkpKSk7XG5leHBvcnQgZGVmYXVsdCBEb2N1bWVudENoZWNrOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgY29uc3QgRG9jdW1lbnRTZWFyY2ggPSAoe1xuICB3aWR0aCA9IDE1MixcbiAgaGVpZ2h0ID0gMTY5XG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gIHdpZHRoOiB3aWR0aCxcbiAgaGVpZ2h0OiBoZWlnaHQsXG4gIHZpZXdCb3g6IFwiMCAwIDE1MiAxNjlcIixcbiAgdmVyc2lvbjogXCIxLjFcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgaWQ6IFwiU3ltYm9sc1wiLFxuICBzdHJva2U6IFwibm9uZVwiLFxuICBzdHJva2VXaWR0aDogXCIxXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICBmaWxsUnVsZTogXCJldmVub2RkXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gIGlkOiBcIkdyb3VwXCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMi4wMDAwMDAsIDIuMDAwMDAwKVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIzXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTc0LDEyNi4wNjA2MTEgTDc0LDE1OC43MjM1NjcgQzc0LDE2Mi4wMzcyNzUgNzEuMzEzNzA4NSwxNjQuNzIzNTY3IDY4LDE2NC43MjM1NjcgQzY2Ljk0NTIxMTgsMTY0LjcyMzU2NyA2NS45MDkwNjI3LDE2NC40NDU1MDQgNjQuOTk1OTk2LDE2My45MTc0MDYgTDYuNjc0OTUwMjYsMTMwLjE4NTc3NCBMNi42NzQ5NTAyNiwxMzAuMTg1Nzc0IEMyLjU0Mzk4NDM5LDEyNy43OTY1MTIgMS40MjEwODU0N2UtMTQsMTIzLjM4NjI3OCAxLjQyMTA4NTQ3ZS0xNCwxMTguNjE0MTI1IEwxLjQyMTA4NTQ3ZS0xNCw0OC40MzYxMjkgQzEuNDIxMDg1NDdlLTE0LDQzLjY2Mzk3NTYgMi41NDM5ODQzOSwzOS4yNTM3NDEyIDYuNjc0OTUwMjYsMzYuODY0NDc5OSBMNjcuMzA3MjA4MywxLjc5NjA5Mjc4IEM3MS40NDc3MzM3LC0wLjU5ODY5NzU5NSA3Ni41NTIyNjYzLC0wLjU5ODY5NzU5NSA4MC42OTI3OTE3LDEuNzk2MDkyNzggTDE0MS4zMjUwNSwzNi44NjQ0Nzk5IEMxNDUuNDU2MDE2LDM5LjI1Mzc0MTIgMTQ4LDQzLjY2Mzk3NTYgMTQ4LDQ4LjQzNjEyOSBMMTQ4LDExOC42MTQxMjUgQzE0OCwxMjMuMzg2Mjc4IDE0NS40NTYwMTYsMTI3Ljc5NjUxMiAxNDEuMzI1MDUsMTMwLjE4NTc3NCBMOTIuMjgxMjIyNiwxNTguNTUxNjYzXCIsXG4gIGlkOiBcIlBhdGgtQ29weS00XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEwNiwxMjAuMjYzMzg0IEMxMDYsMTIxLjA5Mzc0MyAxMDYsMTIyLjMzOTI4MiAxMDYsMTI0IEMxMDYsMTI1LjEwNDU2OSAxMDUuMTA0NTY5LDEyNiAxMDQsMTI2IEw3NCwxMjZcIixcbiAgaWQ6IFwiUGF0aFwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk01NSw0Mi4yMTYyMTAyIEw1NSw1NCBDNTUsNTUuMTA0NTY5NSA1NC4xMDQ1Njk1LDU2IDUzLDU2IEw0MS4xNjQ0OTc5LDU2XCIsXG4gIGlkOiBcIlBhdGhcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNTYuNTIyMDk2OCwxMjYgTDQzLDEyNiBDNDEuODk1NDMwNSwxMjYgNDEsMTI1LjEwNDU2OSA0MSwxMjQgTDQxLDU1LjY4OTg2MjggTDU0LjY4OTg2MjgsNDIgTDEwNCw0MiBDMTA1LjEwNDU2OSw0MiAxMDYsNDIuODk1NDMwNSAxMDYsNDQgQzEwNiw3NS42MjgzNTQxIDEwNiw5Ni44MDU0NTI5IDEwNiwxMDcuNTMxMjk3XCIsXG4gIGlkOiBcIlBhdGhcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBpZDogXCJPdmFsXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBmaWxsT3BhY2l0eTogXCIwLjJcIixcbiAgY3g6IFwiNzZcIixcbiAgY3k6IFwiODRcIixcbiAgcjogXCIxOFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBpZDogXCJPdmFsLUNvcHktMlwiLFxuICBmaWxsOiBcIiNGRkZGRkZGXCIsXG4gIGN4OiBcIjc2XCIsXG4gIGN5OiBcIjg0XCIsXG4gIHI6IFwiMTBcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gIGlkOiBcIlJlY3RhbmdsZVwiLFxuICBmaWxsOiBcIiMzMDQwRDZcIixcbiAgZmlsbE9wYWNpdHk6IFwiMC4yXCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMTA1LjMxNjc0MywgMTEzLjE4NTk3Nykgcm90YXRlKC0zMTUuMDAwMDAwKSB0cmFuc2xhdGUoLTEwNS4zMTY3NDMsIC0xMTMuMTg1OTc3KSBcIixcbiAgeDogXCI5MS44MTY3NDM0XCIsXG4gIHk6IFwiMTA4LjY4NTk3N1wiLFxuICB3aWR0aDogXCIyN1wiLFxuICBoZWlnaHQ6IFwiOVwiLFxuICByeDogXCIyXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICB4MTogXCI4OC41XCIsXG4gIHkxOiBcIjk2LjVcIixcbiAgeDI6IFwiOTUuNDY4OTUwOVwiLFxuICB5MjogXCIxMDMuNDY4OTUxXCIsXG4gIGlkOiBcIkxpbmUtM1wiXG59KSkpKTtcbmV4cG9ydCBkZWZhdWx0IERvY3VtZW50U2VhcmNoOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgY29uc3QgRHJhd2VyID0gKHtcbiAgd2lkdGggPSAxNTIsXG4gIGhlaWdodCA9IDE1MlxufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB3aWR0aDogd2lkdGgsXG4gIGhlaWdodDogaGVpZ2h0LFxuICB2aWV3Qm94OiBcIjAgMCAxNTIgMTUyXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gIGN4OiBcIjc2XCIsXG4gIGN5OiBcIjc2XCIsXG4gIHI6IFwiNzZcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCIxMDkuODIzXCIsXG4gIGN5OiBcIjU4LjUzNjZcIixcbiAgcjogXCIxNi4xNzcyXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCIxMDkuODIzXCIsXG4gIGN5OiBcIjU4LjUzNjZcIixcbiAgcjogXCIxNi4xNzcyXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTU5Ljk5MDYgOTcuODEyNkgzNC4yMjc4QzMzLjk3ODUgOTcuODEyNiAzMy43NzY0IDk3LjYxMDUgMzMuNzc2NCA5Ny4zNjEyQzMzLjc3NjQgOTcuMzMxNCAzMy43NzkzIDk3LjMwMTggMzMuNzg1MSA5Ny4yNzI2TDQyLjEyNTYgNTUuNTcwM0M0Mi40NjMyIDUzLjg4MjIgNDMuOTQ1NSA1Mi42NjcgNDUuNjY3MSA1Mi42NjdIMTA3LjAxMkMxMDguNzM0IDUyLjY2NyAxMTAuMjE2IDUzLjg4MjIgMTEwLjU1NCA1NS41NzAzTDExOC44OTQgOTcuMjcyNkMxMTguOTQzIDk3LjUxNzEgMTE4Ljc4NSA5Ny43NTUgMTE4LjU0IDk3LjgwMzlDMTE4LjUxMSA5Ny44MDk3IDExOC40ODEgOTcuODEyNiAxMTguNDUyIDk3LjgxMjZIOTEuODg1VjExMS43OTVINjguMzM2Mkw1OS45OTA2IDk3LjgxMjZaXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgZDogXCJNNjIuNDE4MyAxMDAuMTM4SDQwLjQ4MTFDNDAuMjY4OCAxMDAuMTM4IDQwLjA5NjcgOTkuOTY2IDQwLjA5NjcgOTkuNzUzN0M0MC4wOTY3IDk5LjcyODQgNDAuMDk5MiA5OS43MDMxIDQwLjEwNDEgOTkuNjc4M0w0Ny4yMDYxIDY0LjE2ODVDNDcuNDkzNiA2Mi43MzEgNDguNzU1OCA2MS42OTYzIDUwLjIyMTcgNjEuNjk2M0gxMDIuNDU4QzEwMy45MjQgNjEuNjk2MyAxMDUuMTg2IDYyLjczMSAxMDUuNDczIDY0LjE2ODVMMTEyLjU3NSA5OS42NzgzQzExMi42MTcgOTkuODg2NSAxMTIuNDgyIDEwMC4wODkgMTEyLjI3NCAxMDAuMTMxQzExMi4yNDkgMTAwLjEzNiAxMTIuMjI0IDEwMC4xMzggMTEyLjE5OCAxMDAuMTM4SDg5LjU3NjZWMTEwLjY3N0g2Ny4zMTA2TDYyLjQxODMgMTAwLjEzOFpcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMDVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTUyLjY4MDggNzcuNjI1MUw1My40MjA2IDc3Ljc0ODlMNTIuNjgwOCA3Ny42MjUxWk01Mi4wNjQ5IDc2Ljc2MTZMNTIuMTg4NyA3Ni4wMjE5SDUyLjE4ODdMNTIuMDY0OSA3Ni43NjE2Wk01MS40NTQ3IDg0Ljk1MjlMNTAuNzE1IDg0LjgyOTFMNTEuNDU0NyA4NC45NTI5Wk01MC41OTEyIDg1LjU2ODhMNTAuNDY3NCA4Ni4zMDg1SDUwLjQ2NzRMNTAuNTkxMiA4NS41Njg4Wk00OS45NzUyIDg0LjcwNTNMNTAuNzE1IDg0LjgyOTFMNDkuOTc1MiA4NC43MDUzWk01MS4yMDE0IDc3LjM3NzZMNTEuOTQxMSA3Ny41MDEzTDUxLjIwMTQgNzcuMzc3NlpNNTMuOTYyOCA2OS45NjM5TDUzLjIyODIgNjkuODEyNkw1My4yMjU0IDY5LjgyNjNMNTMuMjIzMSA2OS44NDAxTDUzLjk2MjggNjkuOTYzOVpNNTIuNDg5OCA2OS42ODA0TDUxLjc1NDMgNjkuNTMzM0w1MS43NTQzIDY5LjUzMzNMNTIuNDg5OCA2OS42ODA0Wk01Mi40ODc1IDY5LjY5Mkw1MS43NTIgNjkuNTQ0OUw1MS43NDk3IDY5LjU1NjVMNTEuNzQ3NyA2OS41NjgyTDUyLjQ4NzUgNjkuNjkyWk01Mi40ODU1IDY5LjcwMzdMNTEuNzQ1OCA2OS41Nzk5TDUxLjc0NTggNjkuNTc5OUw1Mi40ODU1IDY5LjcwMzdaTTUyLjAwOTMgNzIuNTQ5NUw1Mi43NDkgNzIuNjczM0w1Mi4wMDkzIDcyLjU0OTVaTTUxLjY2OTIgNzQuNTgyMkw1Mi40MDg5IDc0LjcwNkw1MS42NjkyIDc0LjU4MjJaTTUzLjE0ODYgNzQuODI5OEw1Mi40MDg5IDc0LjcwNkw1My4xNDg2IDc0LjgyOThaTTUzLjQ4ODcgNzIuNzk3TDU0LjIyODQgNzIuOTIwOEw1My40ODg3IDcyLjc5N1pNNTMuNDIwNiA3Ny43NDg5QzUzLjU1NzMgNzYuOTMxOCA1My4wMDU3IDc2LjE1ODYgNTIuMTg4NyA3Ni4wMjE5TDUxLjk0MTEgNzcuNTAxM0w1My40MjA2IDc3Ljc0ODlaTTUyLjE5NDQgODUuMDc2Nkw1My40MjA2IDc3Ljc0ODlMNTEuOTQxMSA3Ny41MDEzTDUwLjcxNSA4NC44MjkxTDUyLjE5NDQgODUuMDc2NlpNNTAuNDY3NCA4Ni4zMDg1QzUxLjI4NDUgODYuNDQ1MiA1Mi4wNTc3IDg1Ljg5MzcgNTIuMTk0NCA4NS4wNzY2TDUwLjcxNSA4NC44MjkxSDUwLjcxNUw1MC40Njc0IDg2LjMwODVaTTQ5LjIzNTUgODQuNTgxNUM0OS4wOTg4IDg1LjM5ODYgNDkuNjUwMyA4Ni4xNzE4IDUwLjQ2NzQgODYuMzA4NUw1MC43MTUgODQuODI5MUg1MC43MTVMNDkuMjM1NSA4NC41ODE1Wk01MC40NjE3IDc3LjI1MzhMNDkuMjM1NSA4NC41ODE1TDUwLjcxNSA4NC44MjkxTDUxLjk0MTEgNzcuNTAxM0w1MC40NjE3IDc3LjI1MzhaTTUyLjE4ODcgNzYuMDIxOUM1MS4zNzE2IDc1Ljg4NTIgNTAuNTk4NCA3Ni40MzY3IDUwLjQ2MTcgNzcuMjUzOEw1MS45NDExIDc3LjUwMTNINTEuOTQxMUw1Mi4xODg3IDc2LjAyMTlaTTU0LjY5NzQgNzAuMTE1MUM1NC44MDc1IDY5LjU4MDUgNTUuMjc4MyA2OS4xOTYzIDU1LjgyNDggNjkuMTk2M1Y2Ny42OTYzQzU0LjU2NjEgNjcuNjk2MyA1My40ODE4IDY4LjU4MTEgNTMuMjI4MiA2OS44MTI2TDU0LjY5NzQgNzAuMTE1MVpNNTUuODI0OCA2OS4xOTYzSDU1Ljg0MjdWNjcuNjk2M0g1NS44MjQ4VjY5LjE5NjNaTTU1Ljg0MjcgNjkuMTk2M0g1NS44NjA3VjY3LjY5NjNINTUuODQyN1Y2OS4xOTYzWk01NS44NjA3IDY5LjE5NjNINTUuODc4NlY2Ny42OTYzSDU1Ljg2MDdWNjkuMTk2M1pNNTUuODc4NiA2OS4xOTYzSDU1Ljg5NjRWNjcuNjk2M0g1NS44Nzg2VjY5LjE5NjNaTTU1Ljg5NjQgNjkuMTk2M0g1NS45MTQzVjY3LjY5NjNINTUuODk2NFY2OS4xOTYzWk01NS45MTQzIDY5LjE5NjNINTUuOTMyMlY2Ny42OTYzSDU1LjkxNDNWNjkuMTk2M1pNNTUuOTMyMiA2OS4xOTYzSDU1Ljk1VjY3LjY5NjNINTUuOTMyMlY2OS4xOTYzWk01NS45NSA2OS4xOTYzSDU1Ljk2NzhWNjcuNjk2M0g1NS45NVY2OS4xOTYzWk01NS45Njc4IDY5LjE5NjNINTUuOTg1NlY2Ny42OTYzSDU1Ljk2NzhWNjkuMTk2M1pNNTUuOTg1NiA2OS4xOTYzSDU2LjAwMzRWNjcuNjk2M0g1NS45ODU2VjY5LjE5NjNaTTU2LjAwMzQgNjkuMTk2M0g1Ni4wMjExVjY3LjY5NjNINTYuMDAzNFY2OS4xOTYzWk01Ni4wMjExIDY5LjE5NjNINTYuMDM4OVY2Ny42OTYzSDU2LjAyMTFWNjkuMTk2M1pNNTYuMDM4OSA2OS4xOTYzSDU2LjA1NjZWNjcuNjk2M0g1Ni4wMzg5VjY5LjE5NjNaTTU2LjA1NjYgNjkuMTk2M0g1Ni4wNzQzVjY3LjY5NjNINTYuMDU2NlY2OS4xOTYzWk01Ni4wNzQzIDY5LjE5NjNINTYuMDkyVjY3LjY5NjNINTYuMDc0M1Y2OS4xOTYzWk01Ni4wOTIgNjkuMTk2M0g1Ni4xMDk3VjY3LjY5NjNINTYuMDkyVjY5LjE5NjNaTTU2LjEwOTcgNjkuMTk2M0g1Ni4xMjczVjY3LjY5NjNINTYuMTA5N1Y2OS4xOTYzWk01Ni4xMjczIDY5LjE5NjNINTYuMTQ1VjY3LjY5NjNINTYuMTI3M1Y2OS4xOTYzWk01Ni4xNDUgNjkuMTk2M0g1Ni4xNjI2VjY3LjY5NjNINTYuMTQ1VjY5LjE5NjNaTTU2LjE2MjYgNjkuMTk2M0g1Ni4xODAyVjY3LjY5NjNINTYuMTYyNlY2OS4xOTYzWk01Ni4xODAyIDY5LjE5NjNINTYuMTk3OFY2Ny42OTYzSDU2LjE4MDJWNjkuMTk2M1pNNTYuMTk3OCA2OS4xOTYzSDU2LjIxNTNWNjcuNjk2M0g1Ni4xOTc4VjY5LjE5NjNaTTU2LjIxNTMgNjkuMTk2M0g1Ni4yMzI5VjY3LjY5NjNINTYuMjE1M1Y2OS4xOTYzWk01Ni4yMzI5IDY5LjE5NjNINTYuMjUwNFY2Ny42OTYzSDU2LjIzMjlWNjkuMTk2M1pNNTYuMjUwNCA2OS4xOTYzSDU2LjI2NzlWNjcuNjk2M0g1Ni4yNTA0VjY5LjE5NjNaTTU2LjI2NzkgNjkuMTk2M0g1Ni4yODU0VjY3LjY5NjNINTYuMjY3OVY2OS4xOTYzWk01Ni4yODU0IDY5LjE5NjNINTYuMzAyOVY2Ny42OTYzSDU2LjI4NTRWNjkuMTk2M1pNNTYuMzAyOSA2OS4xOTYzSDU2LjMyMDRWNjcuNjk2M0g1Ni4zMDI5VjY5LjE5NjNaTTU2LjMyMDQgNjkuMTk2M0g1Ni4zMzc4VjY3LjY5NjNINTYuMzIwNFY2OS4xOTYzWk01Ni4zMzc4IDY5LjE5NjNINTYuMzU1MlY2Ny42OTYzSDU2LjMzNzhWNjkuMTk2M1pNNTYuMzU1MiA2OS4xOTYzSDU2LjM3MjZWNjcuNjk2M0g1Ni4zNTUyVjY5LjE5NjNaTTU2LjM3MjYgNjkuMTk2M0g1Ni4zOVY2Ny42OTYzSDU2LjM3MjZWNjkuMTk2M1pNNTYuMzkgNjkuMTk2M0g1Ni40MDc0VjY3LjY5NjNINTYuMzlWNjkuMTk2M1pNNTYuNDA3NCA2OS4xOTYzSDU2LjQyNDhWNjcuNjk2M0g1Ni40MDc0VjY5LjE5NjNaTTU2LjQyNDggNjkuMTk2M0g1Ni40NDIxVjY3LjY5NjNINTYuNDI0OFY2OS4xOTYzWk01Ni40NDIxIDY5LjE5NjNINTYuNDU5NFY2Ny42OTYzSDU2LjQ0MjFWNjkuMTk2M1pNNTYuNDU5NCA2OS4xOTYzSDU2LjQ3NjdWNjcuNjk2M0g1Ni40NTk0VjY5LjE5NjNaTTU2LjQ3NjcgNjkuMTk2M0g1Ni40OTRWNjcuNjk2M0g1Ni40NzY3VjY5LjE5NjNaTTU2LjQ5NCA2OS4xOTYzSDU2LjUxMTNWNjcuNjk2M0g1Ni40OTRWNjkuMTk2M1pNNTYuNTExMyA2OS4xOTYzSDU2LjUyODVWNjcuNjk2M0g1Ni41MTEzVjY5LjE5NjNaTTU2LjUyODUgNjkuMTk2M0g1Ni41NDU4VjY3LjY5NjNINTYuNTI4NVY2OS4xOTYzWk01Ni41NDU4IDY5LjE5NjNINTYuNTYzVjY3LjY5NjNINTYuNTQ1OFY2OS4xOTYzWk01Ni41NjMgNjkuMTk2M0g1Ni41ODAyVjY3LjY5NjNINTYuNTYzVjY5LjE5NjNaTTU2LjU4MDIgNjkuMTk2M0g1Ni41OTc0VjY3LjY5NjNINTYuNTgwMlY2OS4xOTYzWk01Ni41OTc0IDY5LjE5NjNINTYuNjE0NVY2Ny42OTYzSDU2LjU5NzRWNjkuMTk2M1pNNTYuNjE0NSA2OS4xOTYzSDU2LjYzMTdWNjcuNjk2M0g1Ni42MTQ1VjY5LjE5NjNaTTU2LjYzMTcgNjkuMTk2M0g1Ni42NDg4VjY3LjY5NjNINTYuNjMxN1Y2OS4xOTYzWk01Ni42NDg4IDY5LjE5NjNINTYuNjY1OVY2Ny42OTYzSDU2LjY0ODhWNjkuMTk2M1pNNTYuNjY1OSA2OS4xOTYzSDU2LjY4M1Y2Ny42OTYzSDU2LjY2NTlWNjkuMTk2M1pNNTYuNjgzIDY5LjE5NjNINTYuNzAwMVY2Ny42OTYzSDU2LjY4M1Y2OS4xOTYzWk01Ni43MDAxIDY5LjE5NjNINTYuNzE3MVY2Ny42OTYzSDU2LjcwMDFWNjkuMTk2M1pNNTYuNzE3MSA2OS4xOTYzSDU2LjczNDJWNjcuNjk2M0g1Ni43MTcxVjY5LjE5NjNaTTU2LjczNDIgNjkuMTk2M0g1Ni43NTEyVjY3LjY5NjNINTYuNzM0MlY2OS4xOTYzWk01Ni43NTEyIDY5LjE5NjNINTYuNzY4MlY2Ny42OTYzSDU2Ljc1MTJWNjkuMTk2M1pNNTYuNzY4MiA2OS4xOTYzSDU2Ljc4NTJWNjcuNjk2M0g1Ni43NjgyVjY5LjE5NjNaTTU2Ljc4NTIgNjkuMTk2M0g1Ni44MDIyVjY3LjY5NjNINTYuNzg1MlY2OS4xOTYzWk01Ni44MDIyIDY5LjE5NjNINTYuODE5MVY2Ny42OTYzSDU2LjgwMjJWNjkuMTk2M1pNNTYuODE5MSA2OS4xOTYzSDU2LjgzNlY2Ny42OTYzSDU2LjgxOTFWNjkuMTk2M1pNNTYuODM2IDY5LjE5NjNINTYuODUzVjY3LjY5NjNINTYuODM2VjY5LjE5NjNaTTU2Ljg1MyA2OS4xOTYzSDU2Ljg2OTlWNjcuNjk2M0g1Ni44NTNWNjkuMTk2M1pNNTYuODY5OSA2OS4xOTYzSDU2Ljg4NjdWNjcuNjk2M0g1Ni44Njk5VjY5LjE5NjNaTTU2Ljg4NjcgNjkuMTk2M0g1Ni45MDM2VjY3LjY5NjNINTYuODg2N1Y2OS4xOTYzWk01Ni45MDM2IDY5LjE5NjNINTYuOTIwNVY2Ny42OTYzSDU2LjkwMzZWNjkuMTk2M1pNNTYuOTIwNSA2OS4xOTYzSDU2LjkzNzNWNjcuNjk2M0g1Ni45MjA1VjY5LjE5NjNaTTU2LjkzNzMgNjkuMTk2M0g1Ni45NTQxVjY3LjY5NjNINTYuOTM3M1Y2OS4xOTYzWk01Ni45NTQxIDY5LjE5NjNINTYuOTcwOVY2Ny42OTYzSDU2Ljk1NDFWNjkuMTk2M1pNNTYuOTcwOSA2OS4xOTYzSDU2Ljk4NzdWNjcuNjk2M0g1Ni45NzA5VjY5LjE5NjNaTTU2Ljk4NzcgNjkuMTk2M0g1Ny4wMDQ0VjY3LjY5NjNINTYuOTg3N1Y2OS4xOTYzWk01Ny4wMDQ0IDY5LjE5NjNINTcuMDIxMlY2Ny42OTYzSDU3LjAwNDRWNjkuMTk2M1pNNTcuMDIxMiA2OS4xOTYzSDU3LjAzNzlWNjcuNjk2M0g1Ny4wMjEyVjY5LjE5NjNaTTU3LjAzNzkgNjkuMTk2M0g1Ny4wNTQ2VjY3LjY5NjNINTcuMDM3OVY2OS4xOTYzWk01Ny4wNTQ2IDY5LjE5NjNINTcuMDcxM1Y2Ny42OTYzSDU3LjA1NDZWNjkuMTk2M1pNNTcuMDcxMyA2OS4xOTYzSDU3LjA4OFY2Ny42OTYzSDU3LjA3MTNWNjkuMTk2M1pNNTcuMDg4IDY5LjE5NjNINTcuMTA0NlY2Ny42OTYzSDU3LjA4OFY2OS4xOTYzWk01Ny4xMDQ2IDY5LjE5NjNINTcuMTIxM1Y2Ny42OTYzSDU3LjEwNDZWNjkuMTk2M1pNNTcuMTIxMyA2OS4xOTYzSDU3LjEzNzlWNjcuNjk2M0g1Ny4xMjEzVjY5LjE5NjNaTTU3LjEzNzkgNjkuMTk2M0g1Ny4xNTQ1VjY3LjY5NjNINTcuMTM3OVY2OS4xOTYzWk01Ny4xNTQ1IDY5LjE5NjNINTcuMTcxMVY2Ny42OTYzSDU3LjE1NDVWNjkuMTk2M1pNNTcuMTcxMSA2OS4xOTYzSDU3LjE4NzZWNjcuNjk2M0g1Ny4xNzExVjY5LjE5NjNaTTU3LjE4NzYgNjkuMTk2M0g1Ny4yMDQyVjY3LjY5NjNINTcuMTg3NlY2OS4xOTYzWk01Ny4yMDQyIDY5LjE5NjNINTcuMjIwN1Y2Ny42OTYzSDU3LjIwNDJWNjkuMTk2M1pNNTcuMjIwNyA2OS4xOTYzSDU3LjIzNzJWNjcuNjk2M0g1Ny4yMjA3VjY5LjE5NjNaTTU3LjIzNzIgNjkuMTk2M0g1Ny4yNTM3VjY3LjY5NjNINTcuMjM3MlY2OS4xOTYzWk01Ny4yNTM3IDY5LjE5NjNINTcuMjcwMlY2Ny42OTYzSDU3LjI1MzdWNjkuMTk2M1pNNTcuMjcwMiA2OS4xOTYzSDU3LjI4NjdWNjcuNjk2M0g1Ny4yNzAyVjY5LjE5NjNaTTU3LjI4NjcgNjkuMTk2M0g1Ny4zMDMxVjY3LjY5NjNINTcuMjg2N1Y2OS4xOTYzWk01Ny4zMDMxIDY5LjE5NjNINTcuMzE5NlY2Ny42OTYzSDU3LjMwMzFWNjkuMTk2M1pNNTcuMzE5NiA2OS4xOTYzSDU3LjMzNlY2Ny42OTYzSDU3LjMxOTZWNjkuMTk2M1pNNTcuMzM2IDY5LjE5NjNINTcuMzUyNFY2Ny42OTYzSDU3LjMzNlY2OS4xOTYzWk01Ny4zNTI0IDY5LjE5NjNINTcuMzY4N1Y2Ny42OTYzSDU3LjM1MjRWNjkuMTk2M1pNNTcuMzY4NyA2OS4xOTYzSDU3LjM4NTFWNjcuNjk2M0g1Ny4zNjg3VjY5LjE5NjNaTTU3LjM4NTEgNjkuMTk2M0g1Ny40MDE0VjY3LjY5NjNINTcuMzg1MVY2OS4xOTYzWk01Ny40MDE0IDY5LjE5NjNINTcuNDE3OFY2Ny42OTYzSDU3LjQwMTRWNjkuMTk2M1pNNTcuNDE3OCA2OS4xOTYzSDU3LjQzNDFWNjcuNjk2M0g1Ny40MTc4VjY5LjE5NjNaTTU3LjQzNDEgNjkuMTk2M0g1Ny40NTAzVjY3LjY5NjNINTcuNDM0MVY2OS4xOTYzWk01Ny40NTAzIDY5LjE5NjNINTcuNDY2NlY2Ny42OTYzSDU3LjQ1MDNWNjkuMTk2M1pNNTcuNDY2NiA2OS4xOTYzSDU3LjQ4MjlWNjcuNjk2M0g1Ny40NjY2VjY5LjE5NjNaTTU3LjQ4MjkgNjkuMTk2M0g1Ny40OTkxVjY3LjY5NjNINTcuNDgyOVY2OS4xOTYzWk01Ny40OTkxIDY5LjE5NjNINTcuNTE1M1Y2Ny42OTYzSDU3LjQ5OTFWNjkuMTk2M1pNNTcuNTE1MyA2OS4xOTYzSDU3LjUzMTVWNjcuNjk2M0g1Ny41MTUzVjY5LjE5NjNaTTU3LjUzMTUgNjkuMTk2M0g1Ny41NDc3VjY3LjY5NjNINTcuNTMxNVY2OS4xOTYzWk01Ny41NDc3IDY5LjE5NjNINTcuNTYzOVY2Ny42OTYzSDU3LjU0NzdWNjkuMTk2M1pNNTcuNTYzOSA2OS4xOTYzSDU3LjU4VjY3LjY5NjNINTcuNTYzOVY2OS4xOTYzWk01Ny41OCA2OS4xOTYzSDU3LjU5NjFWNjcuNjk2M0g1Ny41OFY2OS4xOTYzWk01Ny41OTYxIDY5LjE5NjNINTcuNjEyM1Y2Ny42OTYzSDU3LjU5NjFWNjkuMTk2M1pNNTcuNjEyMyA2OS4xOTYzSDU3LjYyODRWNjcuNjk2M0g1Ny42MTIzVjY5LjE5NjNaTTU3LjYyODQgNjkuMTk2M0g1Ny42NDQ0VjY3LjY5NjNINTcuNjI4NFY2OS4xOTYzWk01Ny42NDQ0IDY5LjE5NjNINTcuNjYwNVY2Ny42OTYzSDU3LjY0NDRWNjkuMTk2M1pNNTcuNjYwNSA2OS4xOTYzSDU3LjY3NjVWNjcuNjk2M0g1Ny42NjA1VjY5LjE5NjNaTTU3LjY3NjUgNjkuMTk2M0g1Ny42OTI2VjY3LjY5NjNINTcuNjc2NVY2OS4xOTYzWk01Ny42OTI2IDY5LjE5NjNINTcuNzA4NlY2Ny42OTYzSDU3LjY5MjZWNjkuMTk2M1pNNTcuNzA4NiA2OS4xOTYzSDU3LjcyNDZWNjcuNjk2M0g1Ny43MDg2VjY5LjE5NjNaTTU3LjcyNDYgNjkuMTk2M0g1Ny43NDA1VjY3LjY5NjNINTcuNzI0NlY2OS4xOTYzWk01Ny43NDA1IDY5LjE5NjNINTcuNzU2NVY2Ny42OTYzSDU3Ljc0MDVWNjkuMTk2M1pNNTcuNzU2NSA2OS4xOTYzSDU3Ljc3MjRWNjcuNjk2M0g1Ny43NTY1VjY5LjE5NjNaTTU3Ljc3MjQgNjkuMTk2M0g1Ny43ODgzVjY3LjY5NjNINTcuNzcyNFY2OS4xOTYzWk01Ny43ODgzIDY5LjE5NjNINTcuODA0MlY2Ny42OTYzSDU3Ljc4ODNWNjkuMTk2M1pNNTcuODA0MiA2OS4xOTYzSDU3LjgyMDFWNjcuNjk2M0g1Ny44MDQyVjY5LjE5NjNaTTU3LjgyMDEgNjkuMTk2M0g1Ny44MzZWNjcuNjk2M0g1Ny44MjAxVjY5LjE5NjNaTTU3LjgzNiA2OS4xOTYzSDU3Ljg1MThWNjcuNjk2M0g1Ny44MzZWNjkuMTk2M1pNNTcuODUxOCA2OS4xOTYzSDU3Ljg2NzdWNjcuNjk2M0g1Ny44NTE4VjY5LjE5NjNaTTU3Ljg2NzcgNjkuMTk2M0g1Ny44ODM1VjY3LjY5NjNINTcuODY3N1Y2OS4xOTYzWk01Ny44ODM1IDY5LjE5NjNINTcuODk5M1Y2Ny42OTYzSDU3Ljg4MzVWNjkuMTk2M1pNNTcuODk5MyA2OS4xOTYzSDU3LjkxNTFWNjcuNjk2M0g1Ny44OTkzVjY5LjE5NjNaTTU3LjkxNTEgNjkuMTk2M0g1Ny45MzA4VjY3LjY5NjNINTcuOTE1MVY2OS4xOTYzWk01Ny45MzA4IDY5LjE5NjNINTcuOTQ2NlY2Ny42OTYzSDU3LjkzMDhWNjkuMTk2M1pNNTcuOTQ2NiA2OS4xOTYzSDU3Ljk2MjNWNjcuNjk2M0g1Ny45NDY2VjY5LjE5NjNaTTU3Ljk2MjMgNjkuMTk2M0g1Ny45NzhWNjcuNjk2M0g1Ny45NjIzVjY5LjE5NjNaTTU3Ljk3OCA2OS4xOTYzSDU3Ljk5MzdWNjcuNjk2M0g1Ny45NzhWNjkuMTk2M1pNNTcuOTkzNyA2OS4xOTYzSDU4LjAwOTRWNjcuNjk2M0g1Ny45OTM3VjY5LjE5NjNaTTU4LjAwOTQgNjkuMTk2M0g1OC4wMjVWNjcuNjk2M0g1OC4wMDk0VjY5LjE5NjNaTTU4LjAyNSA2OS4xOTYzSDU4LjA0MDdWNjcuNjk2M0g1OC4wMjVWNjkuMTk2M1pNNTguMDQwNyA2OS4xOTYzSDU4LjA1NjNWNjcuNjk2M0g1OC4wNDA3VjY5LjE5NjNaTTU4LjA1NjMgNjkuMTk2M0g1OC4wNzE5VjY3LjY5NjNINTguMDU2M1Y2OS4xOTYzWk01OC4wNzE5IDY5LjE5NjNINTguMDg3NVY2Ny42OTYzSDU4LjA3MTlWNjkuMTk2M1pNNTguMDg3NSA2OS4xOTYzSDU4LjEwM1Y2Ny42OTYzSDU4LjA4NzVWNjkuMTk2M1pNNTguMTAzIDY5LjE5NjNINTguMTE4NlY2Ny42OTYzSDU4LjEwM1Y2OS4xOTYzWk01OC4xMTg2IDY5LjE5NjNINTguMTM0MVY2Ny42OTYzSDU4LjExODZWNjkuMTk2M1pNNTguMTM0MSA2OS4xOTYzSDU4LjE0OTZWNjcuNjk2M0g1OC4xMzQxVjY5LjE5NjNaTTU4LjE0OTYgNjkuMTk2M0g1OC4xNjUxVjY3LjY5NjNINTguMTQ5NlY2OS4xOTYzWk01OC4xNjUxIDY5LjE5NjNINTguMTgwNlY2Ny42OTYzSDU4LjE2NTFWNjkuMTk2M1pNNTguMTgwNiA2OS4xOTYzSDU4LjE5NjFWNjcuNjk2M0g1OC4xODA2VjY5LjE5NjNaTTU4LjE5NjEgNjkuMTk2M0g1OC4yMTE1VjY3LjY5NjNINTguMTk2MVY2OS4xOTYzWk01OC4yMTE1IDY5LjE5NjNINTguMjI3VjY3LjY5NjNINTguMjExNVY2OS4xOTYzWk01OC4yMjcgNjkuMTk2M0g1OC4yNDI0VjY3LjY5NjNINTguMjI3VjY5LjE5NjNaTTU4LjI0MjQgNjkuMTk2M0g1OC4yNTc4VjY3LjY5NjNINTguMjQyNFY2OS4xOTYzWk01OC4yNTc4IDY5LjE5NjNINTguMjczMVY2Ny42OTYzSDU4LjI1NzhWNjkuMTk2M1pNNTguMjczMSA2OS4xOTYzSDU4LjI4ODVWNjcuNjk2M0g1OC4yNzMxVjY5LjE5NjNaTTU4LjI4ODUgNjkuMTk2M0g1OC4zMDM4VjY3LjY5NjNINTguMjg4NVY2OS4xOTYzWk01OC4zMDM4IDY5LjE5NjNINTguMzE5MlY2Ny42OTYzSDU4LjMwMzhWNjkuMTk2M1pNNTguMzE5MiA2OS4xOTYzSDU4LjMzNDVWNjcuNjk2M0g1OC4zMTkyVjY5LjE5NjNaTTU4LjMzNDUgNjkuMTk2M0g1OC4zNDk4VjY3LjY5NjNINTguMzM0NVY2OS4xOTYzWk01OC4zNDk4IDY5LjE5NjNINTguMzY1VjY3LjY5NjNINTguMzQ5OFY2OS4xOTYzWk01OC4zNjUgNjkuMTk2M0g1OC4zODAzVjY3LjY5NjNINTguMzY1VjY5LjE5NjNaTTU4LjM4MDMgNjkuMTk2M0g1OC4zOTU1VjY3LjY5NjNINTguMzgwM1Y2OS4xOTYzWk01OC4zOTU1IDY5LjE5NjNINTguNDEwN1Y2Ny42OTYzSDU4LjM5NTVWNjkuMTk2M1pNNTguNDEwNyA2OS4xOTYzSDU4LjQyNTlWNjcuNjk2M0g1OC40MTA3VjY5LjE5NjNaTTU4LjQyNTkgNjkuMTk2M0g1OC40NDExVjY3LjY5NjNINTguNDI1OVY2OS4xOTYzWk01OC40NDExIDY5LjE5NjNINTguNDU2M1Y2Ny42OTYzSDU4LjQ0MTFWNjkuMTk2M1pNNTguNDU2MyA2OS4xOTYzSDU4LjQ3MTRWNjcuNjk2M0g1OC40NTYzVjY5LjE5NjNaTTU4LjQ3MTQgNjkuMTk2M0g1OC40ODY2VjY3LjY5NjNINTguNDcxNFY2OS4xOTYzWk01OC40ODY2IDY5LjE5NjNINTguNTAxN1Y2Ny42OTYzSDU4LjQ4NjZWNjkuMTk2M1pNNTguNTAxNyA2OS4xOTYzSDU4LjUxNjhWNjcuNjk2M0g1OC41MDE3VjY5LjE5NjNaTTU4LjUxNjggNjkuMTk2M0g1OC41MzE5VjY3LjY5NjNINTguNTE2OFY2OS4xOTYzWk01OC41MzE5IDY5LjE5NjNINTguNTQ2OVY2Ny42OTYzSDU4LjUzMTlWNjkuMTk2M1pNNTguNTQ2OSA2OS4xOTYzSDU4LjU2MlY2Ny42OTYzSDU4LjU0NjlWNjkuMTk2M1pNNTguNTYyIDY5LjE5NjNINTguNTc3VjY3LjY5NjNINTguNTYyVjY5LjE5NjNaTTU4LjU3NyA2OS4xOTYzSDU4LjU5MlY2Ny42OTYzSDU4LjU3N1Y2OS4xOTYzWk01OC41OTIgNjkuMTk2M0g1OC42MDdWNjcuNjk2M0g1OC41OTJWNjkuMTk2M1pNNTguNjA3IDY5LjE5NjNINTguNjIyVjY3LjY5NjNINTguNjA3VjY5LjE5NjNaTTU4LjYyMiA2OS4xOTYzSDU4LjYzNjlWNjcuNjk2M0g1OC42MjJWNjkuMTk2M1pNNTguNjM2OSA2OS4xOTYzSDU4LjY1MTlWNjcuNjk2M0g1OC42MzY5VjY5LjE5NjNaTTU4LjY1MTkgNjkuMTk2M0g1OC42NjY4VjY3LjY5NjNINTguNjUxOVY2OS4xOTYzWk01OC42NjY4IDY5LjE5NjNINTguNjgxN1Y2Ny42OTYzSDU4LjY2NjhWNjkuMTk2M1pNNTguNjgxNyA2OS4xOTYzSDU4LjY5NjZWNjcuNjk2M0g1OC42ODE3VjY5LjE5NjNaTTU4LjY5NjYgNjkuMTk2M0g1OC43MTE0VjY3LjY5NjNINTguNjk2NlY2OS4xOTYzWk01OC43MTE0IDY5LjE5NjNINTguNzI2M1Y2Ny42OTYzSDU4LjcxMTRWNjkuMTk2M1pNNTguNzI2MyA2OS4xOTYzSDU4Ljc0MTFWNjcuNjk2M0g1OC43MjYzVjY5LjE5NjNaTTU4Ljc0MTEgNjkuMTk2M0g1OC43NTU5VjY3LjY5NjNINTguNzQxMVY2OS4xOTYzWk01OC43NTU5IDY5LjE5NjNINTguNzcwN1Y2Ny42OTYzSDU4Ljc1NTlWNjkuMTk2M1pNNTguNzcwNyA2OS4xOTYzSDU4Ljc4NTVWNjcuNjk2M0g1OC43NzA3VjY5LjE5NjNaTTU4Ljc4NTUgNjkuMTk2M0g1OC44MDAzVjY3LjY5NjNINTguNzg1NVY2OS4xOTYzWk01OC44MDAzIDY5LjE5NjNINTguODE1VjY3LjY5NjNINTguODAwM1Y2OS4xOTYzWk01OC44MTUgNjkuMTk2M0g1OC44Mjk3VjY3LjY5NjNINTguODE1VjY5LjE5NjNaTTU4LjgyOTcgNjkuMTk2M0g1OC44NDQ1VjY3LjY5NjNINTguODI5N1Y2OS4xOTYzWk01OC44NDQ1IDY5LjE5NjNINTguODU5MVY2Ny42OTYzSDU4Ljg0NDVWNjkuMTk2M1pNNTguODU5MSA2OS4xOTYzSDU4Ljg3MzhWNjcuNjk2M0g1OC44NTkxVjY5LjE5NjNaTTU4Ljg3MzggNjkuMTk2M0g1OC44ODg1VjY3LjY5NjNINTguODczOFY2OS4xOTYzWk01OC44ODg1IDY5LjE5NjNINTguOTAzMVY2Ny42OTYzSDU4Ljg4ODVWNjkuMTk2M1pNNTguOTAzMSA2OS4xOTYzSDU4LjkxNzdWNjcuNjk2M0g1OC45MDMxVjY5LjE5NjNaTTU4LjkxNzcgNjkuMTk2M0g1OC45MzI0VjY3LjY5NjNINTguOTE3N1Y2OS4xOTYzWk01OC45MzI0IDY5LjE5NjNINTguOTQ2OVY2Ny42OTYzSDU4LjkzMjRWNjkuMTk2M1pNNTguOTQ2OSA2OS4xOTYzSDU4Ljk2MTVWNjcuNjk2M0g1OC45NDY5VjY5LjE5NjNaTTU4Ljk2MTUgNjkuMTk2M0g1OC45NzYxVjY3LjY5NjNINTguOTYxNVY2OS4xOTYzWk01OC45NzYxIDY5LjE5NjNINTguOTkwNlY2Ny42OTYzSDU4Ljk3NjFWNjkuMTk2M1pNNTguOTkwNiA2OS4xOTYzSDU5LjAwNTFWNjcuNjk2M0g1OC45OTA2VjY5LjE5NjNaTTU5LjAwNTEgNjkuMTk2M0g1OS4wMTk2VjY3LjY5NjNINTkuMDA1MVY2OS4xOTYzWk01OS4wMTk2IDY5LjE5NjNINTkuMDM0MVY2Ny42OTYzSDU5LjAxOTZWNjkuMTk2M1pNNTkuMDM0MSA2OS4xOTYzSDU5LjA0ODZWNjcuNjk2M0g1OS4wMzQxVjY5LjE5NjNaTTU5LjA0ODYgNjkuMTk2M0g1OS4wNjNWNjcuNjk2M0g1OS4wNDg2VjY5LjE5NjNaTTU5LjA2MyA2OS4xOTYzSDU5LjA3NzRWNjcuNjk2M0g1OS4wNjNWNjkuMTk2M1pNNTkuMDc3NCA2OS4xOTYzSDU5LjA5MTlWNjcuNjk2M0g1OS4wNzc0VjY5LjE5NjNaTTU5LjA5MTkgNjkuMTk2M0g1OS4xMDYyVjY3LjY5NjNINTkuMDkxOVY2OS4xOTYzWk01OS4xMDYyIDY5LjE5NjNINTkuMTIwNlY2Ny42OTYzSDU5LjEwNjJWNjkuMTk2M1pNNTkuMTIwNiA2OS4xOTYzSDU5LjEzNVY2Ny42OTYzSDU5LjEyMDZWNjkuMTk2M1pNNTkuMTM1IDY5LjE5NjNINTkuMTQ5M1Y2Ny42OTYzSDU5LjEzNVY2OS4xOTYzWk01OS4xNDkzIDY5LjE5NjNINTkuMTYzN1Y2Ny42OTYzSDU5LjE0OTNWNjkuMTk2M1pNNTkuMTYzNyA2OS4xOTYzSDU5LjE3OFY2Ny42OTYzSDU5LjE2MzdWNjkuMTk2M1pNNTkuMTc4IDY5LjE5NjNINTkuMTkyMlY2Ny42OTYzSDU5LjE3OFY2OS4xOTYzWk01OS4xOTIyIDY5LjE5NjNINTkuMjA2NVY2Ny42OTYzSDU5LjE5MjJWNjkuMTk2M1pNNTkuMjA2NSA2OS4xOTYzSDU5LjIyMDhWNjcuNjk2M0g1OS4yMDY1VjY5LjE5NjNaTTU5LjIyMDggNjkuMTk2M0g1OS4yMzVWNjcuNjk2M0g1OS4yMjA4VjY5LjE5NjNaTTU5LjIzNSA2OS4xOTYzSDU5LjI0OTJWNjcuNjk2M0g1OS4yMzVWNjkuMTk2M1pNNTkuMjQ5MiA2OS4xOTYzSDU5LjI2MzRWNjcuNjk2M0g1OS4yNDkyVjY5LjE5NjNaTTU5LjI2MzQgNjkuMTk2M0g1OS4yNzc2VjY3LjY5NjNINTkuMjYzNFY2OS4xOTYzWk01OS4yNzc2IDY5LjE5NjNINTkuMjkxOFY2Ny42OTYzSDU5LjI3NzZWNjkuMTk2M1pNNTkuMjkxOCA2OS4xOTYzSDU5LjMwNTlWNjcuNjk2M0g1OS4yOTE4VjY5LjE5NjNaTTU5LjMwNTkgNjkuMTk2M0g1OS4zMjAxVjY3LjY5NjNINTkuMzA1OVY2OS4xOTYzWk01OS4zMjAxIDY5LjE5NjNINTkuMzM0MlY2Ny42OTYzSDU5LjMyMDFWNjkuMTk2M1pNNTkuMzM0MiA2OS4xOTYzSDU5LjM0ODNWNjcuNjk2M0g1OS4zMzQyVjY5LjE5NjNaTTU5LjM0ODMgNjkuMTk2M0g1OS4zNjI0VjY3LjY5NjNINTkuMzQ4M1Y2OS4xOTYzWk01OS4zNjI0IDY5LjE5NjNINTkuMzc2NFY2Ny42OTYzSDU5LjM2MjRWNjkuMTk2M1pNNTkuMzc2NCA2OS4xOTYzSDU5LjM5MDVWNjcuNjk2M0g1OS4zNzY0VjY5LjE5NjNaTTU5LjM5MDUgNjkuMTk2M0g1OS40MDQ1VjY3LjY5NjNINTkuMzkwNVY2OS4xOTYzWk01OS40MDQ1IDY5LjE5NjNINTkuNDE4NVY2Ny42OTYzSDU5LjQwNDVWNjkuMTk2M1pNNTkuNDE4NSA2OS4xOTYzSDU5LjQzMjVWNjcuNjk2M0g1OS40MTg1VjY5LjE5NjNaTTU5LjQzMjUgNjkuMTk2M0g1OS40NDY1VjY3LjY5NjNINTkuNDMyNVY2OS4xOTYzWk01OS40NDY1IDY5LjE5NjNINTkuNDYwNFY2Ny42OTYzSDU5LjQ0NjVWNjkuMTk2M1pNNTkuNDYwNCA2OS4xOTYzSDU5LjQ3NDRWNjcuNjk2M0g1OS40NjA0VjY5LjE5NjNaTTU5LjQ3NDQgNjkuMTk2M0g1OS40ODgzVjY3LjY5NjNINTkuNDc0NFY2OS4xOTYzWk01OS40ODgzIDY5LjE5NjNINTkuNTAyMlY2Ny42OTYzSDU5LjQ4ODNWNjkuMTk2M1pNNTkuNTAyMiA2OS4xOTYzSDU5LjUxNjFWNjcuNjk2M0g1OS41MDIyVjY5LjE5NjNaTTU5LjUxNjEgNjkuMTk2M0g1OS41Mjk5VjY3LjY5NjNINTkuNTE2MVY2OS4xOTYzWk01OS41Mjk5IDY5LjE5NjNINTkuNTQzOFY2Ny42OTYzSDU5LjUyOTlWNjkuMTk2M1pNNTkuNTQzOCA2OS4xOTYzSDU5LjU1NzZWNjcuNjk2M0g1OS41NDM4VjY5LjE5NjNaTTU5LjU1NzYgNjkuMTk2M0g1OS41NzE0VjY3LjY5NjNINTkuNTU3NlY2OS4xOTYzWk01OS41NzE0IDY5LjE5NjNINTkuNTg1MlY2Ny42OTYzSDU5LjU3MTRWNjkuMTk2M1pNNTkuNTg1MiA2OS4xOTYzSDU5LjU5OVY2Ny42OTYzSDU5LjU4NTJWNjkuMTk2M1pNNTkuNTk5IDY5LjE5NjNINTkuNjEyOFY2Ny42OTYzSDU5LjU5OVY2OS4xOTYzWk01OS42MTI4IDY5LjE5NjNINTkuNjI2NVY2Ny42OTYzSDU5LjYxMjhWNjkuMTk2M1pNNTkuNjI2NSA2OS4xOTYzSDU5LjY0MDNWNjcuNjk2M0g1OS42MjY1VjY5LjE5NjNaTTU5LjY0MDMgNjkuMTk2M0g1OS42NTRWNjcuNjk2M0g1OS42NDAzVjY5LjE5NjNaTTU5LjY1NCA2OS4xOTYzSDU5LjY2NzdWNjcuNjk2M0g1OS42NTRWNjkuMTk2M1pNNTkuNjY3NyA2OS4xOTYzSDU5LjY4MTRWNjcuNjk2M0g1OS42Njc3VjY5LjE5NjNaTTU5LjY4MTQgNjkuMTk2M0g1OS42OTVWNjcuNjk2M0g1OS42ODE0VjY5LjE5NjNaTTU5LjY5NSA2OS4xOTYzSDU5LjcwODdWNjcuNjk2M0g1OS42OTVWNjkuMTk2M1pNNTkuNzA4NyA2OS4xOTYzSDU5LjcyMjNWNjcuNjk2M0g1OS43MDg3VjY5LjE5NjNaTTU5LjcyMjMgNjkuMTk2M0g1OS43MzU5VjY3LjY5NjNINTkuNzIyM1Y2OS4xOTYzWk01OS43MzU5IDY5LjE5NjNINTkuNzQ5NVY2Ny42OTYzSDU5LjczNTlWNjkuMTk2M1pNNTkuNzQ5NSA2OS4xOTYzSDU5Ljc2M1Y2Ny42OTYzSDU5Ljc0OTVWNjkuMTk2M1pNNTkuNzYzIDY5LjE5NjNINTkuNzc2NlY2Ny42OTYzSDU5Ljc2M1Y2OS4xOTYzWk01OS43NzY2IDY5LjE5NjNINTkuNzkwMVY2Ny42OTYzSDU5Ljc3NjZWNjkuMTk2M1pNNTkuNzkwMSA2OS4xOTYzSDU5LjgwMzdWNjcuNjk2M0g1OS43OTAxVjY5LjE5NjNaTTU5LjgwMzcgNjkuMTk2M0g1OS44MTcyVjY3LjY5NjNINTkuODAzN1Y2OS4xOTYzWk01OS44MTcyIDY5LjE5NjNINTkuODMwNlY2Ny42OTYzSDU5LjgxNzJWNjkuMTk2M1pNNTkuODMwNiA2OS4xOTYzSDU5Ljg0NDFWNjcuNjk2M0g1OS44MzA2VjY5LjE5NjNaTTU5Ljg0NDEgNjkuMTk2M0g1OS44NTc2VjY3LjY5NjNINTkuODQ0MVY2OS4xOTYzWk01OS44NTc2IDY5LjE5NjNINTkuODcxVjY3LjY5NjNINTkuODU3NlY2OS4xOTYzWk01OS44NzEgNjkuMTk2M0g1OS44ODQ0VjY3LjY5NjNINTkuODcxVjY5LjE5NjNaTTU5Ljg4NDQgNjkuMTk2M0g1OS44OTc4VjY3LjY5NjNINTkuODg0NFY2OS4xOTYzWk01OS44OTc4IDY5LjE5NjNINTkuOTExMlY2Ny42OTYzSDU5Ljg5NzhWNjkuMTk2M1pNNTkuOTExMiA2OS4xOTYzSDU5LjkyNDVWNjcuNjk2M0g1OS45MTEyVjY5LjE5NjNaTTU5LjkyNDUgNjkuMTk2M0g1OS45Mzc5VjY3LjY5NjNINTkuOTI0NVY2OS4xOTYzWk01OS45Mzc5IDY5LjE5NjNINTkuOTUxMlY2Ny42OTYzSDU5LjkzNzlWNjkuMTk2M1pNNTkuOTUxMiA2OS4xOTYzSDU5Ljk2NDVWNjcuNjk2M0g1OS45NTEyVjY5LjE5NjNaTTU5Ljk2NDUgNjkuMTk2M0g1OS45Nzc4VjY3LjY5NjNINTkuOTY0NVY2OS4xOTYzWk01OS45Nzc4IDY5LjE5NjNINTkuOTkxMVY2Ny42OTYzSDU5Ljk3NzhWNjkuMTk2M1pNNTkuOTkxMSA2OS4xOTYzSDYwLjAwNDNWNjcuNjk2M0g1OS45OTExVjY5LjE5NjNaTTYwLjAwNDMgNjkuMTk2M0g2MC4wMTc2VjY3LjY5NjNINjAuMDA0M1Y2OS4xOTYzWk02MC4wMTc2IDY5LjE5NjNINjAuMDMwOFY2Ny42OTYzSDYwLjAxNzZWNjkuMTk2M1pNNjAuMDMwOCA2OS4xOTYzSDYwLjA0NFY2Ny42OTYzSDYwLjAzMDhWNjkuMTk2M1pNNjAuMDQ0IDY5LjE5NjNINjAuMDU3MlY2Ny42OTYzSDYwLjA0NFY2OS4xOTYzWk02MC4wNTcyIDY5LjE5NjNINjAuMDcwM1Y2Ny42OTYzSDYwLjA1NzJWNjkuMTk2M1pNNjAuMDcwMyA2OS4xOTYzSDYwLjA4MzVWNjcuNjk2M0g2MC4wNzAzVjY5LjE5NjNaTTYwLjA4MzUgNjkuMTk2M0g2MC4wOTY2VjY3LjY5NjNINjAuMDgzNVY2OS4xOTYzWk02MC4wOTY2IDY5LjE5NjNINjAuMTA5N1Y2Ny42OTYzSDYwLjA5NjZWNjkuMTk2M1pNNjAuMTA5NyA2OS4xOTYzSDYwLjEyMjhWNjcuNjk2M0g2MC4xMDk3VjY5LjE5NjNaTTYwLjEyMjggNjkuMTk2M0g2MC4xMzU5VjY3LjY5NjNINjAuMTIyOFY2OS4xOTYzWk02MC4xMzU5IDY5LjE5NjNINjAuMTQ5VjY3LjY5NjNINjAuMTM1OVY2OS4xOTYzWk02MC4xNDkgNjkuMTk2M0g2MC4xNjJWNjcuNjk2M0g2MC4xNDlWNjkuMTk2M1pNNjAuMTYyIDY5LjE5NjNINjAuMTc1MVY2Ny42OTYzSDYwLjE2MlY2OS4xOTYzWk02MC4xNzUxIDY5LjE5NjNINjAuMTg4MVY2Ny42OTYzSDYwLjE3NTFWNjkuMTk2M1pNNjAuMTg4MSA2OS4xOTYzSDYwLjIwMTFWNjcuNjk2M0g2MC4xODgxVjY5LjE5NjNaTTYwLjIwMTEgNjkuMTk2M0g2MC4yMTRWNjcuNjk2M0g2MC4yMDExVjY5LjE5NjNaTTYwLjIxNCA2OS4xOTYzSDYwLjIyN1Y2Ny42OTYzSDYwLjIxNFY2OS4xOTYzWk02MC4yMjcgNjkuMTk2M0g2MC4yMzk5VjY3LjY5NjNINjAuMjI3VjY5LjE5NjNaTTYwLjIzOTkgNjkuMTk2M0g2MC4yNTI5VjY3LjY5NjNINjAuMjM5OVY2OS4xOTYzWk02MC4yNTI5IDY5LjE5NjNINjAuMjY1OFY2Ny42OTYzSDYwLjI1MjlWNjkuMTk2M1pNNjAuMjY1OCA2OS4xOTYzSDYwLjI3ODdWNjcuNjk2M0g2MC4yNjU4VjY5LjE5NjNaTTYwLjI3ODcgNjkuMTk2M0g2MC4yOTE1VjY3LjY5NjNINjAuMjc4N1Y2OS4xOTYzWk02MC4yOTE1IDY5LjE5NjNINjAuMzA0NFY2Ny42OTYzSDYwLjI5MTVWNjkuMTk2M1pNNjAuMzA0NCA2OS4xOTYzSDYwLjMxNzJWNjcuNjk2M0g2MC4zMDQ0VjY5LjE5NjNaTTYwLjMxNzIgNjkuMTk2M0g2MC4zM1Y2Ny42OTYzSDYwLjMxNzJWNjkuMTk2M1pNNjAuMzMgNjkuMTk2M0g2MC4zNDI4VjY3LjY5NjNINjAuMzNWNjkuMTk2M1pNNjAuMzQyOCA2OS4xOTYzSDYwLjM1NTZWNjcuNjk2M0g2MC4zNDI4VjY5LjE5NjNaTTYwLjM1NTYgNjkuMTk2M0g2MC4zNjg0VjY3LjY5NjNINjAuMzU1NlY2OS4xOTYzWk02MC4zNjg0IDY5LjE5NjNINjAuMzgxMVY2Ny42OTYzSDYwLjM2ODRWNjkuMTk2M1pNNjAuMzgxMSA2OS4xOTYzSDYwLjM5MzlWNjcuNjk2M0g2MC4zODExVjY5LjE5NjNaTTYwLjM5MzkgNjkuMTk2M0g2MC40MDY2VjY3LjY5NjNINjAuMzkzOVY2OS4xOTYzWk02MC40MDY2IDY5LjE5NjNINjAuNDE5M1Y2Ny42OTYzSDYwLjQwNjZWNjkuMTk2M1pNNjAuNDE5MyA2OS4xOTYzSDYwLjQzMTlWNjcuNjk2M0g2MC40MTkzVjY5LjE5NjNaTTYwLjQzMTkgNjkuMTk2M0g2MC40NDQ2VjY3LjY5NjNINjAuNDMxOVY2OS4xOTYzWk02MC40NDQ2IDY5LjE5NjNINjAuNDU3MlY2Ny42OTYzSDYwLjQ0NDZWNjkuMTk2M1pNNjAuNDU3MiA2OS4xOTYzSDYwLjQ2OTlWNjcuNjk2M0g2MC40NTcyVjY5LjE5NjNaTTYwLjQ2OTkgNjkuMTk2M0g2MC40ODI1VjY3LjY5NjNINjAuNDY5OVY2OS4xOTYzWk02MC40ODI1IDY5LjE5NjNINjAuNDk1MVY2Ny42OTYzSDYwLjQ4MjVWNjkuMTk2M1pNNjAuNDk1MSA2OS4xOTYzSDYwLjUwNzZWNjcuNjk2M0g2MC40OTUxVjY5LjE5NjNaTTYwLjUwNzYgNjkuMTk2M0g2MC41MjAyVjY3LjY5NjNINjAuNTA3NlY2OS4xOTYzWk02MC41MjAyIDY5LjE5NjNINjAuNTMyN1Y2Ny42OTYzSDYwLjUyMDJWNjkuMTk2M1pNNjAuNTMyNyA2OS4xOTYzSDYwLjU0NTNWNjcuNjk2M0g2MC41MzI3VjY5LjE5NjNaTTYwLjU0NTMgNjkuMTk2M0g2MC41NTc4VjY3LjY5NjNINjAuNTQ1M1Y2OS4xOTYzWk02MC41NTc4IDY5LjE5NjNINjAuNTcwMlY2Ny42OTYzSDYwLjU1NzhWNjkuMTk2M1pNNjAuNTcwMiA2OS4xOTYzSDYwLjU4MjdWNjcuNjk2M0g2MC41NzAyVjY5LjE5NjNaTTYwLjU4MjcgNjkuMTk2M0g2MC41OTUyVjY3LjY5NjNINjAuNTgyN1Y2OS4xOTYzWk02MC41OTUyIDY5LjE5NjNINjAuNjA3NlY2Ny42OTYzSDYwLjU5NTJWNjkuMTk2M1pNNjAuNjA3NiA2OS4xOTYzSDYwLjYyVjY3LjY5NjNINjAuNjA3NlY2OS4xOTYzWk02MC42MiA2OS4xOTYzSDYwLjYzMjRWNjcuNjk2M0g2MC42MlY2OS4xOTYzWk02MC42MzI0IDY5LjE5NjNINjAuNjQ0OFY2Ny42OTYzSDYwLjYzMjRWNjkuMTk2M1pNNjAuNjQ0OCA2OS4xOTYzSDYwLjY1NzFWNjcuNjk2M0g2MC42NDQ4VjY5LjE5NjNaTTYwLjY1NzEgNjkuMTk2M0g2MC42Njk1VjY3LjY5NjNINjAuNjU3MVY2OS4xOTYzWk02MC42Njk1IDY5LjE5NjNINjAuNjgxOFY2Ny42OTYzSDYwLjY2OTVWNjkuMTk2M1pNNjAuNjgxOCA2OS4xOTYzSDYwLjY5NDFWNjcuNjk2M0g2MC42ODE4VjY5LjE5NjNaTTYwLjY5NDEgNjkuMTk2M0g2MC43MDY0VjY3LjY5NjNINjAuNjk0MVY2OS4xOTYzWk02MC43MDY0IDY5LjE5NjNINjAuNzE4N1Y2Ny42OTYzSDYwLjcwNjRWNjkuMTk2M1pNNjAuNzE4NyA2OS4xOTYzSDYwLjczMVY2Ny42OTYzSDYwLjcxODdWNjkuMTk2M1pNNjAuNzMxIDY5LjE5NjNINjAuNzQzMlY2Ny42OTYzSDYwLjczMVY2OS4xOTYzWk02MC43NDMyIDY5LjE5NjNINjAuNzU1NFY2Ny42OTYzSDYwLjc0MzJWNjkuMTk2M1pNNjAuNzU1NCA2OS4xOTYzSDYwLjc2NzZWNjcuNjk2M0g2MC43NTU0VjY5LjE5NjNaTTYwLjc2NzYgNjkuMTk2M0g2MC43Nzk4VjY3LjY5NjNINjAuNzY3NlY2OS4xOTYzWk02MC43Nzk4IDY5LjE5NjNINjAuNzkyVjY3LjY5NjNINjAuNzc5OFY2OS4xOTYzWk02MC43OTIgNjkuMTk2M0g2MC44MDQxVjY3LjY5NjNINjAuNzkyVjY5LjE5NjNaTTYwLjgwNDEgNjkuMTk2M0g2MC44MTYzVjY3LjY5NjNINjAuODA0MVY2OS4xOTYzWk02MC44MTYzIDY5LjE5NjNINjAuODI4NFY2Ny42OTYzSDYwLjgxNjNWNjkuMTk2M1pNNjAuODI4NCA2OS4xOTYzSDYwLjg0MDVWNjcuNjk2M0g2MC44Mjg0VjY5LjE5NjNaTTYwLjg0MDUgNjkuMTk2M0g2MC44NTI2VjY3LjY5NjNINjAuODQwNVY2OS4xOTYzWk02MC44NTI2IDY5LjE5NjNINjAuODY0NlY2Ny42OTYzSDYwLjg1MjZWNjkuMTk2M1pNNjAuODY0NiA2OS4xOTYzSDYwLjg3NjdWNjcuNjk2M0g2MC44NjQ2VjY5LjE5NjNaTTYwLjg3NjcgNjkuMTk2M0g2MC44ODg3VjY3LjY5NjNINjAuODc2N1Y2OS4xOTYzWk02MC44ODg3IDY5LjE5NjNINjAuOTAwN1Y2Ny42OTYzSDYwLjg4ODdWNjkuMTk2M1pNNjAuOTAwNyA2OS4xOTYzSDYwLjkxMjdWNjcuNjk2M0g2MC45MDA3VjY5LjE5NjNaTTYwLjkxMjcgNjkuMTk2M0g2MC45MjQ3VjY3LjY5NjNINjAuOTEyN1Y2OS4xOTYzWk02MC45MjQ3IDY5LjE5NjNINjAuOTM2NlY2Ny42OTYzSDYwLjkyNDdWNjkuMTk2M1pNNjAuOTM2NiA2OS4xOTYzSDYwLjk0ODZWNjcuNjk2M0g2MC45MzY2VjY5LjE5NjNaTTYwLjk0ODYgNjkuMTk2M0g2MC45NjA1VjY3LjY5NjNINjAuOTQ4NlY2OS4xOTYzWk02MC45NjA1IDY5LjE5NjNINjAuOTcyNFY2Ny42OTYzSDYwLjk2MDVWNjkuMTk2M1pNNjAuOTcyNCA2OS4xOTYzSDYwLjk4NDNWNjcuNjk2M0g2MC45NzI0VjY5LjE5NjNaTTYwLjk4NDMgNjkuMTk2M0g2MC45OTYyVjY3LjY5NjNINjAuOTg0M1Y2OS4xOTYzWk02MC45OTYyIDY5LjE5NjNINjEuMDA4VjY3LjY5NjNINjAuOTk2MlY2OS4xOTYzWk02MS4wMDggNjkuMTk2M0g2MS4wMTk5VjY3LjY5NjNINjEuMDA4VjY5LjE5NjNaTTYxLjAxOTkgNjkuMTk2M0g2MS4wMzE3VjY3LjY5NjNINjEuMDE5OVY2OS4xOTYzWk02MS4wMzE3IDY5LjE5NjNINjEuMDQzNVY2Ny42OTYzSDYxLjAzMTdWNjkuMTk2M1pNNjEuMDQzNSA2OS4xOTYzSDYxLjA1NTNWNjcuNjk2M0g2MS4wNDM1VjY5LjE5NjNaTTYxLjA1NTMgNjkuMTk2M0g2MS4wNjdWNjcuNjk2M0g2MS4wNTUzVjY5LjE5NjNaTTYxLjA2NyA2OS4xOTYzSDYxLjA3ODhWNjcuNjk2M0g2MS4wNjdWNjkuMTk2M1pNNjEuMDc4OCA2OS4xOTYzSDYxLjA5MDVWNjcuNjk2M0g2MS4wNzg4VjY5LjE5NjNaTTYxLjA5MDUgNjkuMTk2M0g2MS4xMDIyVjY3LjY5NjNINjEuMDkwNVY2OS4xOTYzWk02MS4xMDIyIDY5LjE5NjNINjEuMTEzOVY2Ny42OTYzSDYxLjEwMjJWNjkuMTk2M1pNNjEuMTEzOSA2OS4xOTYzSDYxLjEyNTZWNjcuNjk2M0g2MS4xMTM5VjY5LjE5NjNaTTYxLjEyNTYgNjkuMTk2M0g2MS4xMzczVjY3LjY5NjNINjEuMTI1NlY2OS4xOTYzWk02MS4xMzczIDY5LjE5NjNINjEuMTQ4OVY2Ny42OTYzSDYxLjEzNzNWNjkuMTk2M1pNNjEuMTQ4OSA2OS4xOTYzSDYxLjE2MDVWNjcuNjk2M0g2MS4xNDg5VjY5LjE5NjNaTTYxLjE2MDUgNjkuMTk2M0g2MS4xNzIxVjY3LjY5NjNINjEuMTYwNVY2OS4xOTYzWk02MS4xNzIxIDY5LjE5NjNINjEuMTgzN1Y2Ny42OTYzSDYxLjE3MjFWNjkuMTk2M1pNNjEuMTgzNyA2OS4xOTYzSDYxLjE5NTNWNjcuNjk2M0g2MS4xODM3VjY5LjE5NjNaTTYxLjE5NTMgNjkuMTk2M0g2MS4yMDY5VjY3LjY5NjNINjEuMTk1M1Y2OS4xOTYzWk02MS4yMDY5IDY5LjE5NjNINjEuMjE4NFY2Ny42OTYzSDYxLjIwNjlWNjkuMTk2M1pNNjEuMjE4NCA2OS4xOTYzSDYxLjIyOTlWNjcuNjk2M0g2MS4yMTg0VjY5LjE5NjNaTTYxLjIyOTkgNjkuMTk2M0g2MS4yNDE0VjY3LjY5NjNINjEuMjI5OVY2OS4xOTYzWk02MS4yNDE0IDY5LjE5NjNINjEuMjUyOVY2Ny42OTYzSDYxLjI0MTRWNjkuMTk2M1pNNjEuMjUyOSA2OS4xOTYzSDYxLjI2NDRWNjcuNjk2M0g2MS4yNTI5VjY5LjE5NjNaTTYxLjI2NDQgNjkuMTk2M0g2MS4yNzU4VjY3LjY5NjNINjEuMjY0NFY2OS4xOTYzWk02MS4yNzU4IDY5LjE5NjNINjEuMjg3M1Y2Ny42OTYzSDYxLjI3NThWNjkuMTk2M1pNNjEuMjg3MyA2OS4xOTYzSDYxLjI5ODdWNjcuNjk2M0g2MS4yODczVjY5LjE5NjNaTTYxLjI5ODcgNjkuMTk2M0g2MS4zMTAxVjY3LjY5NjNINjEuMjk4N1Y2OS4xOTYzWk02MS4zMTAxIDY5LjE5NjNINjEuMzIxNVY2Ny42OTYzSDYxLjMxMDFWNjkuMTk2M1pNNjEuMzIxNSA2OS4xOTYzSDYxLjMzMjhWNjcuNjk2M0g2MS4zMjE1VjY5LjE5NjNaTTYxLjMzMjggNjkuMTk2M0g2MS4zNDQyVjY3LjY5NjNINjEuMzMyOFY2OS4xOTYzWk02MS4zNDQyIDY5LjE5NjNINjEuMzU1NVY2Ny42OTYzSDYxLjM0NDJWNjkuMTk2M1pNNjEuMzU1NSA2OS4xOTYzSDYxLjM2NjhWNjcuNjk2M0g2MS4zNTU1VjY5LjE5NjNaTTYxLjM2NjggNjkuMTk2M0g2MS4zNzgxVjY3LjY5NjNINjEuMzY2OFY2OS4xOTYzWk02MS4zNzgxIDY5LjE5NjNINjEuMzg5NFY2Ny42OTYzSDYxLjM3ODFWNjkuMTk2M1pNNjEuMzg5NCA2OS4xOTYzSDYxLjQwMDZWNjcuNjk2M0g2MS4zODk0VjY5LjE5NjNaTTYxLjQwMDYgNjkuMTk2M0g2MS40MTE5VjY3LjY5NjNINjEuNDAwNlY2OS4xOTYzWk02MS40MTE5IDY5LjE5NjNINjEuNDIzMVY2Ny42OTYzSDYxLjQxMTlWNjkuMTk2M1pNNjEuNDIzMSA2OS4xOTYzSDYxLjQzNDNWNjcuNjk2M0g2MS40MjMxVjY5LjE5NjNaTTYxLjQzNDMgNjkuMTk2M0g2MS40NDU1VjY3LjY5NjNINjEuNDM0M1Y2OS4xOTYzWk02MS40NDU1IDY5LjE5NjNINjEuNDU2N1Y2Ny42OTYzSDYxLjQ0NTVWNjkuMTk2M1pNNjEuNDU2NyA2OS4xOTYzSDYxLjQ2NzhWNjcuNjk2M0g2MS40NTY3VjY5LjE5NjNaTTYxLjQ2NzggNjkuMTk2M0g2MS40NzlWNjcuNjk2M0g2MS40Njc4VjY5LjE5NjNaTTYxLjQ3OSA2OS4xOTYzSDYxLjQ5MDFWNjcuNjk2M0g2MS40NzlWNjkuMTk2M1pNNjEuNDkwMSA2OS4xOTYzSDYxLjUwMTJWNjcuNjk2M0g2MS40OTAxVjY5LjE5NjNaTTYxLjUwMTIgNjkuMTk2M0g2MS41MTIzVjY3LjY5NjNINjEuNTAxMlY2OS4xOTYzWk02MS41MTIzIDY5LjE5NjNINjEuNTIzM1Y2Ny42OTYzSDYxLjUxMjNWNjkuMTk2M1pNNjEuNTIzMyA2OS4xOTYzSDYxLjUzNDRWNjcuNjk2M0g2MS41MjMzVjY5LjE5NjNaTTYxLjUzNDQgNjkuMTk2M0g2MS41NDU0VjY3LjY5NjNINjEuNTM0NFY2OS4xOTYzWk02MS41NDU0IDY5LjE5NjNINjEuNTU2NFY2Ny42OTYzSDYxLjU0NTRWNjkuMTk2M1pNNjEuNTU2NCA2OS4xOTYzSDYxLjU2NzRWNjcuNjk2M0g2MS41NTY0VjY5LjE5NjNaTTYxLjU2NzQgNjkuMTk2M0g2MS41Nzg0VjY3LjY5NjNINjEuNTY3NFY2OS4xOTYzWk02MS41Nzg0IDY5LjE5NjNINjEuNTg5NFY2Ny42OTYzSDYxLjU3ODRWNjkuMTk2M1pNNjEuNTg5NCA2OS4xOTYzSDYxLjYwMDNWNjcuNjk2M0g2MS41ODk0VjY5LjE5NjNaTTYxLjYwMDMgNjkuMTk2M0g2MS42MTEyVjY3LjY5NjNINjEuNjAwM1Y2OS4xOTYzWk02MS42MTEyIDY5LjE5NjNINjEuNjIyMVY2Ny42OTYzSDYxLjYxMTJWNjkuMTk2M1pNNjEuNjIyMSA2OS4xOTYzSDYxLjYzM1Y2Ny42OTYzSDYxLjYyMjFWNjkuMTk2M1pNNjEuNjMzIDY5LjE5NjNINjEuNjQzOVY2Ny42OTYzSDYxLjYzM1Y2OS4xOTYzWk02MS42NDM5IDY5LjE5NjNINjEuNjU0OFY2Ny42OTYzSDYxLjY0MzlWNjkuMTk2M1pNNjEuNjU0OCA2OS4xOTYzSDYxLjY2NTZWNjcuNjk2M0g2MS42NTQ4VjY5LjE5NjNaTTYxLjY2NTYgNjkuMTk2M0g2MS42NzY0VjY3LjY5NjNINjEuNjY1NlY2OS4xOTYzWk02MS42NzY0IDY5LjE5NjNINjEuNjg3MlY2Ny42OTYzSDYxLjY3NjRWNjkuMTk2M1pNNjEuNjg3MiA2OS4xOTYzSDYxLjY5OFY2Ny42OTYzSDYxLjY4NzJWNjkuMTk2M1pNNjEuNjk4IDY5LjE5NjNINjEuNzA4OFY2Ny42OTYzSDYxLjY5OFY2OS4xOTYzWk02MS43MDg4IDY5LjE5NjNINjEuNzE5NVY2Ny42OTYzSDYxLjcwODhWNjkuMTk2M1pNNjEuNzE5NSA2OS4xOTYzSDYxLjczMDJWNjcuNjk2M0g2MS43MTk1VjY5LjE5NjNaTTYxLjczMDIgNjkuMTk2M0g2MS43NDFWNjcuNjk2M0g2MS43MzAyVjY5LjE5NjNaTTYxLjc0MSA2OS4xOTYzSDYxLjc1MTdWNjcuNjk2M0g2MS43NDFWNjkuMTk2M1pNNjEuNzUxNyA2OS4xOTYzSDYxLjc2MjNWNjcuNjk2M0g2MS43NTE3VjY5LjE5NjNaTTYxLjc2MjMgNjkuMTk2M0g2MS43NzNWNjcuNjk2M0g2MS43NjIzVjY5LjE5NjNaTTYxLjc3MyA2OS4xOTYzSDYxLjc4MzZWNjcuNjk2M0g2MS43NzNWNjkuMTk2M1pNNjEuNzgzNiA2OS4xOTYzSDYxLjc5NDNWNjcuNjk2M0g2MS43ODM2VjY5LjE5NjNaTTYxLjc5NDMgNjkuMTk2M0g2MS44MDQ5VjY3LjY5NjNINjEuNzk0M1Y2OS4xOTYzWk02MS44MDQ5IDY5LjE5NjNINjEuODE1NVY2Ny42OTYzSDYxLjgwNDlWNjkuMTk2M1pNNjEuODE1NSA2OS4xOTYzSDYxLjgyNjFWNjcuNjk2M0g2MS44MTU1VjY5LjE5NjNaTTYxLjgyNjEgNjkuMTk2M0g2MS44MzY2VjY3LjY5NjNINjEuODI2MVY2OS4xOTYzWk02MS44MzY2IDY5LjE5NjNINjEuODQ3MVY2Ny42OTYzSDYxLjgzNjZWNjkuMTk2M1pNNjEuODQ3MSA2OS4xOTYzSDYxLjg1NzdWNjcuNjk2M0g2MS44NDcxVjY5LjE5NjNaTTYxLjg1NzcgNjkuMTk2M0g2MS44NjgyVjY3LjY5NjNINjEuODU3N1Y2OS4xOTYzWk02MS44NjgyIDY5LjE5NjNINjEuODc4N1Y2Ny42OTYzSDYxLjg2ODJWNjkuMTk2M1pNNjEuODc4NyA2OS4xOTYzSDYxLjg4OTFWNjcuNjk2M0g2MS44Nzg3VjY5LjE5NjNaTTYxLjg4OTEgNjkuMTk2M0g2MS44OTk2VjY3LjY5NjNINjEuODg5MVY2OS4xOTYzWk02MS44OTk2IDY5LjE5NjNINjEuOTFWNjcuNjk2M0g2MS44OTk2VjY5LjE5NjNaTTYxLjkxIDY5LjE5NjNINjEuOTIwNFY2Ny42OTYzSDYxLjkxVjY5LjE5NjNaTTYxLjkyMDQgNjkuMTk2M0g2MS45MzA4VjY3LjY5NjNINjEuOTIwNFY2OS4xOTYzWk02MS45MzA4IDY5LjE5NjNINjEuOTQxMlY2Ny42OTYzSDYxLjkzMDhWNjkuMTk2M1pNNjEuOTQxMiA2OS4xOTYzSDYxLjk1MTZWNjcuNjk2M0g2MS45NDEyVjY5LjE5NjNaTTYxLjk1MTYgNjkuMTk2M0g2MS45NjE5VjY3LjY5NjNINjEuOTUxNlY2OS4xOTYzWk02MS45NjE5IDY5LjE5NjNINjEuOTcyM1Y2Ny42OTYzSDYxLjk2MTlWNjkuMTk2M1pNNjEuOTcyMyA2OS4xOTYzSDYxLjk4MjZWNjcuNjk2M0g2MS45NzIzVjY5LjE5NjNaTTYxLjk4MjYgNjkuMTk2M0g2MS45OTI5VjY3LjY5NjNINjEuOTgyNlY2OS4xOTYzWk02MS45OTI5IDY5LjE5NjNINjIuMDAzMVY2Ny42OTYzSDYxLjk5MjlWNjkuMTk2M1pNNjIuMDAzMSA2OS4xOTYzSDYyLjAxMzRWNjcuNjk2M0g2Mi4wMDMxVjY5LjE5NjNaTTYyLjAxMzQgNjkuMTk2M0g2Mi4wMjM2VjY3LjY5NjNINjIuMDEzNFY2OS4xOTYzWk02Mi4wMjM2IDY5LjE5NjNINjIuMDMzOVY2Ny42OTYzSDYyLjAyMzZWNjkuMTk2M1pNNjIuMDMzOSA2OS4xOTYzSDYyLjA0NDFWNjcuNjk2M0g2Mi4wMzM5VjY5LjE5NjNaTTYyLjA0NDEgNjkuMTk2M0g2Mi4wNTQzVjY3LjY5NjNINjIuMDQ0MVY2OS4xOTYzWk02Mi4wNTQzIDY5LjE5NjNINjIuMDY0NFY2Ny42OTYzSDYyLjA1NDNWNjkuMTk2M1pNNjIuMDY0NCA2OS4xOTYzSDYyLjA3NDZWNjcuNjk2M0g2Mi4wNjQ0VjY5LjE5NjNaTTYyLjA3NDYgNjkuMTk2M0g2Mi4wODQ3VjY3LjY5NjNINjIuMDc0NlY2OS4xOTYzWk02Mi4wODQ3IDY5LjE5NjNINjIuMDk0OVY2Ny42OTYzSDYyLjA4NDdWNjkuMTk2M1pNNjIuMDk0OSA2OS4xOTYzSDYyLjEwNVY2Ny42OTYzSDYyLjA5NDlWNjkuMTk2M1pNNjIuMTA1IDY5LjE5NjNINjIuMTE1VjY3LjY5NjNINjIuMTA1VjY5LjE5NjNaTTYyLjExNSA2OS4xOTYzSDYyLjEyNTFWNjcuNjk2M0g2Mi4xMTVWNjkuMTk2M1pNNjIuMTI1MSA2OS4xOTYzSDYyLjEzNTJWNjcuNjk2M0g2Mi4xMjUxVjY5LjE5NjNaTTYyLjEzNTIgNjkuMTk2M0g2Mi4xNDUyVjY3LjY5NjNINjIuMTM1MlY2OS4xOTYzWk02Mi4xNDUyIDY5LjE5NjNINjIuMTU1MlY2Ny42OTYzSDYyLjE0NTJWNjkuMTk2M1pNNjIuMTU1MiA2OS4xOTYzSDYyLjE2NTJWNjcuNjk2M0g2Mi4xNTUyVjY5LjE5NjNaTTYyLjE2NTIgNjkuMTk2M0g2Mi4xNzUyVjY3LjY5NjNINjIuMTY1MlY2OS4xOTYzWk02Mi4xNzUyIDY5LjE5NjNINjIuMTg1MVY2Ny42OTYzSDYyLjE3NTJWNjkuMTk2M1pNNjIuMTg1MSA2OS4xOTYzSDYyLjE5NTFWNjcuNjk2M0g2Mi4xODUxVjY5LjE5NjNaTTYyLjE5NTEgNjkuMTk2M0g2Mi4yMDVWNjcuNjk2M0g2Mi4xOTUxVjY5LjE5NjNaTTYyLjIwNSA2OS4xOTYzSDYyLjIxNDlWNjcuNjk2M0g2Mi4yMDVWNjkuMTk2M1pNNjIuMjE0OSA2OS4xOTYzSDYyLjIyNDhWNjcuNjk2M0g2Mi4yMTQ5VjY5LjE5NjNaTTYyLjIyNDggNjkuMTk2M0g2Mi4yMzQ3VjY3LjY5NjNINjIuMjI0OFY2OS4xOTYzWk02Mi4yMzQ3IDY5LjE5NjNINjIuMjQ0NVY2Ny42OTYzSDYyLjIzNDdWNjkuMTk2M1pNNjIuMjQ0NSA2OS4xOTYzSDYyLjI1NDRWNjcuNjk2M0g2Mi4yNDQ1VjY5LjE5NjNaTTYyLjI1NDQgNjkuMTk2M0g2Mi4yNjQyVjY3LjY5NjNINjIuMjU0NFY2OS4xOTYzWk02Mi4yNjQyIDY5LjE5NjNINjIuMjc0VjY3LjY5NjNINjIuMjY0MlY2OS4xOTYzWk02Mi4yNzQgNjkuMTk2M0g2Mi4yODM4VjY3LjY5NjNINjIuMjc0VjY5LjE5NjNaTTYyLjI4MzggNjkuMTk2M0g2Mi4yOTM2VjY3LjY5NjNINjIuMjgzOFY2OS4xOTYzWk02Mi4yOTM2IDY5LjE5NjNINjIuMzAzM1Y2Ny42OTYzSDYyLjI5MzZWNjkuMTk2M1pNNjIuMzAzMyA2OS4xOTYzSDYyLjMxM1Y2Ny42OTYzSDYyLjMwMzNWNjkuMTk2M1pNNjIuMzEzIDY5LjE5NjNINjIuMzIyOFY2Ny42OTYzSDYyLjMxM1Y2OS4xOTYzWk02Mi4zMjI4IDY5LjE5NjNINjIuMzMyNVY2Ny42OTYzSDYyLjMyMjhWNjkuMTk2M1pNNjIuMzMyNSA2OS4xOTYzSDYyLjM0MjFWNjcuNjk2M0g2Mi4zMzI1VjY5LjE5NjNaTTYyLjM0MjEgNjkuMTk2M0g2Mi4zNTE4VjY3LjY5NjNINjIuMzQyMVY2OS4xOTYzWk02Mi4zNTE4IDY5LjE5NjNINjIuMzYxNVY2Ny42OTYzSDYyLjM1MThWNjkuMTk2M1pNNjIuMzYxNSA2OS4xOTYzSDYyLjM3MTFWNjcuNjk2M0g2Mi4zNjE1VjY5LjE5NjNaTTYyLjM3MTEgNjkuMTk2M0g2Mi4zODA3VjY3LjY5NjNINjIuMzcxMVY2OS4xOTYzWk02Mi4zODA3IDY5LjE5NjNINjIuMzkwM1Y2Ny42OTYzSDYyLjM4MDdWNjkuMTk2M1pNNjIuMzkwMyA2OS4xOTYzSDYyLjM5OTlWNjcuNjk2M0g2Mi4zOTAzVjY5LjE5NjNaTTYyLjM5OTkgNjkuMTk2M0g2Mi40MDk0VjY3LjY5NjNINjIuMzk5OVY2OS4xOTYzWk02Mi40MDk0IDY5LjE5NjNINjIuNDE5VjY3LjY5NjNINjIuNDA5NFY2OS4xOTYzWk02Mi40MTkgNjkuMTk2M0g2Mi40Mjg1VjY3LjY5NjNINjIuNDE5VjY5LjE5NjNaTTYyLjQyODUgNjkuMTk2M0g2Mi40MzhWNjcuNjk2M0g2Mi40Mjg1VjY5LjE5NjNaTTYyLjQzOCA2OS4xOTYzSDYyLjQ0NzVWNjcuNjk2M0g2Mi40MzhWNjkuMTk2M1pNNjIuNDQ3NSA2OS4xOTYzSDYyLjQ1NjlWNjcuNjk2M0g2Mi40NDc1VjY5LjE5NjNaTTYyLjQ1NjkgNjkuMTk2M0g2Mi40NjY0VjY3LjY5NjNINjIuNDU2OVY2OS4xOTYzWk02Mi40NjY0IDY5LjE5NjNINjIuNDc1OFY2Ny42OTYzSDYyLjQ2NjRWNjkuMTk2M1pNNjIuNDc1OCA2OS4xOTYzSDYyLjQ4NTNWNjcuNjk2M0g2Mi40NzU4VjY5LjE5NjNaTTYyLjQ4NTMgNjkuMTk2M0g2Mi40OTQ3VjY3LjY5NjNINjIuNDg1M1Y2OS4xOTYzWk02Mi40OTQ3IDY5LjE5NjNINjIuNTA0VjY3LjY5NjNINjIuNDk0N1Y2OS4xOTYzWk02Mi41MDQgNjkuMTk2M0g2Mi41MTM0VjY3LjY5NjNINjIuNTA0VjY5LjE5NjNaTTYyLjUxMzQgNjkuMTk2M0g2Mi41MjI4VjY3LjY5NjNINjIuNTEzNFY2OS4xOTYzWk02Mi41MjI4IDY5LjE5NjNINjIuNTMyMVY2Ny42OTYzSDYyLjUyMjhWNjkuMTk2M1pNNjIuNTMyMSA2OS4xOTYzSDYyLjU0MTRWNjcuNjk2M0g2Mi41MzIxVjY5LjE5NjNaTTYyLjU0MTQgNjkuMTk2M0g2Mi41NTA3VjY3LjY5NjNINjIuNTQxNFY2OS4xOTYzWk02Mi41NTA3IDY5LjE5NjNINjIuNTZWNjcuNjk2M0g2Mi41NTA3VjY5LjE5NjNaTTYyLjU2IDY5LjE5NjNINjIuNTY5MlY2Ny42OTYzSDYyLjU2VjY5LjE5NjNaTTYyLjU2OTIgNjkuMTk2M0g2Mi41Nzg1VjY3LjY5NjNINjIuNTY5MlY2OS4xOTYzWk02Mi41Nzg1IDY5LjE5NjNINjIuNTg3N1Y2Ny42OTYzSDYyLjU3ODVWNjkuMTk2M1pNNjIuNTg3NyA2OS4xOTYzSDYyLjU5NjlWNjcuNjk2M0g2Mi41ODc3VjY5LjE5NjNaTTYyLjU5NjkgNjkuMTk2M0g2Mi42MDYxVjY3LjY5NjNINjIuNTk2OVY2OS4xOTYzWk02Mi42MDYxIDY5LjE5NjNINjIuNjE1M1Y2Ny42OTYzSDYyLjYwNjFWNjkuMTk2M1pNNjIuNjE1MyA2OS4xOTYzSDYyLjYyNDRWNjcuNjk2M0g2Mi42MTUzVjY5LjE5NjNaTTYyLjYyNDQgNjkuMTk2M0g2Mi42MzM2VjY3LjY5NjNINjIuNjI0NFY2OS4xOTYzWk02Mi42MzM2IDY5LjE5NjNINjIuNjQyN1Y2Ny42OTYzSDYyLjYzMzZWNjkuMTk2M1pNNjIuNjQyNyA2OS4xOTYzSDYyLjY1MThWNjcuNjk2M0g2Mi42NDI3VjY5LjE5NjNaTTYyLjY1MTggNjkuMTk2M0g2Mi42NjA5VjY3LjY5NjNINjIuNjUxOFY2OS4xOTYzWk02Mi42NjA5IDY5LjE5NjNINjIuNjY5OVY2Ny42OTYzSDYyLjY2MDlWNjkuMTk2M1pNNjIuNjY5OSA2OS4xOTYzSDYyLjY3OVY2Ny42OTYzSDYyLjY2OTlWNjkuMTk2M1pNNjIuNjc5IDY5LjE5NjNINjIuNjg4VjY3LjY5NjNINjIuNjc5VjY5LjE5NjNaTTYyLjY4OCA2OS4xOTYzSDYyLjY5N1Y2Ny42OTYzSDYyLjY4OFY2OS4xOTYzWk02Mi42OTcgNjkuMTk2M0g2Mi43MDZWNjcuNjk2M0g2Mi42OTdWNjkuMTk2M1pNNjIuNzA2IDY5LjE5NjNINjIuNzE1VjY3LjY5NjNINjIuNzA2VjY5LjE5NjNaTTYyLjcxNSA2OS4xOTYzQzYzLjU0MzUgNjkuMTk2MyA2NC4yMTUgNjguNTI0NyA2NC4yMTUgNjcuNjk2M0g2Mi43MTVWNjkuMTk2M1pNNjQuMjE1IDY3LjY5NjNDNjQuMjE1IDY2Ljg2NzkgNjMuNTQzNSA2Ni4xOTYzIDYyLjcxNSA2Ni4xOTYzVjY3LjY5NjNINjQuMjE1Wk02Mi43MTUgNjYuMTk2M0g2Mi43MDZWNjcuNjk2M0g2Mi43MTVWNjYuMTk2M1pNNjIuNzA2IDY2LjE5NjNINjIuNjk3VjY3LjY5NjNINjIuNzA2VjY2LjE5NjNaTTYyLjY5NyA2Ni4xOTYzSDYyLjY4OFY2Ny42OTYzSDYyLjY5N1Y2Ni4xOTYzWk02Mi42ODggNjYuMTk2M0g2Mi42NzlWNjcuNjk2M0g2Mi42ODhWNjYuMTk2M1pNNjIuNjc5IDY2LjE5NjNINjIuNjY5OVY2Ny42OTYzSDYyLjY3OVY2Ni4xOTYzWk02Mi42Njk5IDY2LjE5NjNINjIuNjYwOVY2Ny42OTYzSDYyLjY2OTlWNjYuMTk2M1pNNjIuNjYwOSA2Ni4xOTYzSDYyLjY1MThWNjcuNjk2M0g2Mi42NjA5VjY2LjE5NjNaTTYyLjY1MTggNjYuMTk2M0g2Mi42NDI3VjY3LjY5NjNINjIuNjUxOFY2Ni4xOTYzWk02Mi42NDI3IDY2LjE5NjNINjIuNjMzNlY2Ny42OTYzSDYyLjY0MjdWNjYuMTk2M1pNNjIuNjMzNiA2Ni4xOTYzSDYyLjYyNDRWNjcuNjk2M0g2Mi42MzM2VjY2LjE5NjNaTTYyLjYyNDQgNjYuMTk2M0g2Mi42MTUzVjY3LjY5NjNINjIuNjI0NFY2Ni4xOTYzWk02Mi42MTUzIDY2LjE5NjNINjIuNjA2MVY2Ny42OTYzSDYyLjYxNTNWNjYuMTk2M1pNNjIuNjA2MSA2Ni4xOTYzSDYyLjU5NjlWNjcuNjk2M0g2Mi42MDYxVjY2LjE5NjNaTTYyLjU5NjkgNjYuMTk2M0g2Mi41ODc3VjY3LjY5NjNINjIuNTk2OVY2Ni4xOTYzWk02Mi41ODc3IDY2LjE5NjNINjIuNTc4NVY2Ny42OTYzSDYyLjU4NzdWNjYuMTk2M1pNNjIuNTc4NSA2Ni4xOTYzSDYyLjU2OTJWNjcuNjk2M0g2Mi41Nzg1VjY2LjE5NjNaTTYyLjU2OTIgNjYuMTk2M0g2Mi41NlY2Ny42OTYzSDYyLjU2OTJWNjYuMTk2M1pNNjIuNTYgNjYuMTk2M0g2Mi41NTA3VjY3LjY5NjNINjIuNTZWNjYuMTk2M1pNNjIuNTUwNyA2Ni4xOTYzSDYyLjU0MTRWNjcuNjk2M0g2Mi41NTA3VjY2LjE5NjNaTTYyLjU0MTQgNjYuMTk2M0g2Mi41MzIxVjY3LjY5NjNINjIuNTQxNFY2Ni4xOTYzWk02Mi41MzIxIDY2LjE5NjNINjIuNTIyOFY2Ny42OTYzSDYyLjUzMjFWNjYuMTk2M1pNNjIuNTIyOCA2Ni4xOTYzSDYyLjUxMzRWNjcuNjk2M0g2Mi41MjI4VjY2LjE5NjNaTTYyLjUxMzQgNjYuMTk2M0g2Mi41MDRWNjcuNjk2M0g2Mi41MTM0VjY2LjE5NjNaTTYyLjUwNCA2Ni4xOTYzSDYyLjQ5NDdWNjcuNjk2M0g2Mi41MDRWNjYuMTk2M1pNNjIuNDk0NyA2Ni4xOTYzSDYyLjQ4NTNWNjcuNjk2M0g2Mi40OTQ3VjY2LjE5NjNaTTYyLjQ4NTMgNjYuMTk2M0g2Mi40NzU4VjY3LjY5NjNINjIuNDg1M1Y2Ni4xOTYzWk02Mi40NzU4IDY2LjE5NjNINjIuNDY2NFY2Ny42OTYzSDYyLjQ3NThWNjYuMTk2M1pNNjIuNDY2NCA2Ni4xOTYzSDYyLjQ1NjlWNjcuNjk2M0g2Mi40NjY0VjY2LjE5NjNaTTYyLjQ1NjkgNjYuMTk2M0g2Mi40NDc1VjY3LjY5NjNINjIuNDU2OVY2Ni4xOTYzWk02Mi40NDc1IDY2LjE5NjNINjIuNDM4VjY3LjY5NjNINjIuNDQ3NVY2Ni4xOTYzWk02Mi40MzggNjYuMTk2M0g2Mi40Mjg1VjY3LjY5NjNINjIuNDM4VjY2LjE5NjNaTTYyLjQyODUgNjYuMTk2M0g2Mi40MTlWNjcuNjk2M0g2Mi40Mjg1VjY2LjE5NjNaTTYyLjQxOSA2Ni4xOTYzSDYyLjQwOTRWNjcuNjk2M0g2Mi40MTlWNjYuMTk2M1pNNjIuNDA5NCA2Ni4xOTYzSDYyLjM5OTlWNjcuNjk2M0g2Mi40MDk0VjY2LjE5NjNaTTYyLjM5OTkgNjYuMTk2M0g2Mi4zOTAzVjY3LjY5NjNINjIuMzk5OVY2Ni4xOTYzWk02Mi4zOTAzIDY2LjE5NjNINjIuMzgwN1Y2Ny42OTYzSDYyLjM5MDNWNjYuMTk2M1pNNjIuMzgwNyA2Ni4xOTYzSDYyLjM3MTFWNjcuNjk2M0g2Mi4zODA3VjY2LjE5NjNaTTYyLjM3MTEgNjYuMTk2M0g2Mi4zNjE1VjY3LjY5NjNINjIuMzcxMVY2Ni4xOTYzWk02Mi4zNjE1IDY2LjE5NjNINjIuMzUxOFY2Ny42OTYzSDYyLjM2MTVWNjYuMTk2M1pNNjIuMzUxOCA2Ni4xOTYzSDYyLjM0MjFWNjcuNjk2M0g2Mi4zNTE4VjY2LjE5NjNaTTYyLjM0MjEgNjYuMTk2M0g2Mi4zMzI1VjY3LjY5NjNINjIuMzQyMVY2Ni4xOTYzWk02Mi4zMzI1IDY2LjE5NjNINjIuMzIyOFY2Ny42OTYzSDYyLjMzMjVWNjYuMTk2M1pNNjIuMzIyOCA2Ni4xOTYzSDYyLjMxM1Y2Ny42OTYzSDYyLjMyMjhWNjYuMTk2M1pNNjIuMzEzIDY2LjE5NjNINjIuMzAzM1Y2Ny42OTYzSDYyLjMxM1Y2Ni4xOTYzWk02Mi4zMDMzIDY2LjE5NjNINjIuMjkzNlY2Ny42OTYzSDYyLjMwMzNWNjYuMTk2M1pNNjIuMjkzNiA2Ni4xOTYzSDYyLjI4MzhWNjcuNjk2M0g2Mi4yOTM2VjY2LjE5NjNaTTYyLjI4MzggNjYuMTk2M0g2Mi4yNzRWNjcuNjk2M0g2Mi4yODM4VjY2LjE5NjNaTTYyLjI3NCA2Ni4xOTYzSDYyLjI2NDJWNjcuNjk2M0g2Mi4yNzRWNjYuMTk2M1pNNjIuMjY0MiA2Ni4xOTYzSDYyLjI1NDRWNjcuNjk2M0g2Mi4yNjQyVjY2LjE5NjNaTTYyLjI1NDQgNjYuMTk2M0g2Mi4yNDQ1VjY3LjY5NjNINjIuMjU0NFY2Ni4xOTYzWk02Mi4yNDQ1IDY2LjE5NjNINjIuMjM0N1Y2Ny42OTYzSDYyLjI0NDVWNjYuMTk2M1pNNjIuMjM0NyA2Ni4xOTYzSDYyLjIyNDhWNjcuNjk2M0g2Mi4yMzQ3VjY2LjE5NjNaTTYyLjIyNDggNjYuMTk2M0g2Mi4yMTQ5VjY3LjY5NjNINjIuMjI0OFY2Ni4xOTYzWk02Mi4yMTQ5IDY2LjE5NjNINjIuMjA1VjY3LjY5NjNINjIuMjE0OVY2Ni4xOTYzWk02Mi4yMDUgNjYuMTk2M0g2Mi4xOTUxVjY3LjY5NjNINjIuMjA1VjY2LjE5NjNaTTYyLjE5NTEgNjYuMTk2M0g2Mi4xODUxVjY3LjY5NjNINjIuMTk1MVY2Ni4xOTYzWk02Mi4xODUxIDY2LjE5NjNINjIuMTc1MlY2Ny42OTYzSDYyLjE4NTFWNjYuMTk2M1pNNjIuMTc1MiA2Ni4xOTYzSDYyLjE2NTJWNjcuNjk2M0g2Mi4xNzUyVjY2LjE5NjNaTTYyLjE2NTIgNjYuMTk2M0g2Mi4xNTUyVjY3LjY5NjNINjIuMTY1MlY2Ni4xOTYzWk02Mi4xNTUyIDY2LjE5NjNINjIuMTQ1MlY2Ny42OTYzSDYyLjE1NTJWNjYuMTk2M1pNNjIuMTQ1MiA2Ni4xOTYzSDYyLjEzNTJWNjcuNjk2M0g2Mi4xNDUyVjY2LjE5NjNaTTYyLjEzNTIgNjYuMTk2M0g2Mi4xMjUxVjY3LjY5NjNINjIuMTM1MlY2Ni4xOTYzWk02Mi4xMjUxIDY2LjE5NjNINjIuMTE1VjY3LjY5NjNINjIuMTI1MVY2Ni4xOTYzWk02Mi4xMTUgNjYuMTk2M0g2Mi4xMDVWNjcuNjk2M0g2Mi4xMTVWNjYuMTk2M1pNNjIuMTA1IDY2LjE5NjNINjIuMDk0OVY2Ny42OTYzSDYyLjEwNVY2Ni4xOTYzWk02Mi4wOTQ5IDY2LjE5NjNINjIuMDg0N1Y2Ny42OTYzSDYyLjA5NDlWNjYuMTk2M1pNNjIuMDg0NyA2Ni4xOTYzSDYyLjA3NDZWNjcuNjk2M0g2Mi4wODQ3VjY2LjE5NjNaTTYyLjA3NDYgNjYuMTk2M0g2Mi4wNjQ0VjY3LjY5NjNINjIuMDc0NlY2Ni4xOTYzWk02Mi4wNjQ0IDY2LjE5NjNINjIuMDU0M1Y2Ny42OTYzSDYyLjA2NDRWNjYuMTk2M1pNNjIuMDU0MyA2Ni4xOTYzSDYyLjA0NDFWNjcuNjk2M0g2Mi4wNTQzVjY2LjE5NjNaTTYyLjA0NDEgNjYuMTk2M0g2Mi4wMzM5VjY3LjY5NjNINjIuMDQ0MVY2Ni4xOTYzWk02Mi4wMzM5IDY2LjE5NjNINjIuMDIzNlY2Ny42OTYzSDYyLjAzMzlWNjYuMTk2M1pNNjIuMDIzNiA2Ni4xOTYzSDYyLjAxMzRWNjcuNjk2M0g2Mi4wMjM2VjY2LjE5NjNaTTYyLjAxMzQgNjYuMTk2M0g2Mi4wMDMxVjY3LjY5NjNINjIuMDEzNFY2Ni4xOTYzWk02Mi4wMDMxIDY2LjE5NjNINjEuOTkyOVY2Ny42OTYzSDYyLjAwMzFWNjYuMTk2M1pNNjEuOTkyOSA2Ni4xOTYzSDYxLjk4MjZWNjcuNjk2M0g2MS45OTI5VjY2LjE5NjNaTTYxLjk4MjYgNjYuMTk2M0g2MS45NzIzVjY3LjY5NjNINjEuOTgyNlY2Ni4xOTYzWk02MS45NzIzIDY2LjE5NjNINjEuOTYxOVY2Ny42OTYzSDYxLjk3MjNWNjYuMTk2M1pNNjEuOTYxOSA2Ni4xOTYzSDYxLjk1MTZWNjcuNjk2M0g2MS45NjE5VjY2LjE5NjNaTTYxLjk1MTYgNjYuMTk2M0g2MS45NDEyVjY3LjY5NjNINjEuOTUxNlY2Ni4xOTYzWk02MS45NDEyIDY2LjE5NjNINjEuOTMwOFY2Ny42OTYzSDYxLjk0MTJWNjYuMTk2M1pNNjEuOTMwOCA2Ni4xOTYzSDYxLjkyMDRWNjcuNjk2M0g2MS45MzA4VjY2LjE5NjNaTTYxLjkyMDQgNjYuMTk2M0g2MS45MVY2Ny42OTYzSDYxLjkyMDRWNjYuMTk2M1pNNjEuOTEgNjYuMTk2M0g2MS44OTk2VjY3LjY5NjNINjEuOTFWNjYuMTk2M1pNNjEuODk5NiA2Ni4xOTYzSDYxLjg4OTFWNjcuNjk2M0g2MS44OTk2VjY2LjE5NjNaTTYxLjg4OTEgNjYuMTk2M0g2MS44Nzg3VjY3LjY5NjNINjEuODg5MVY2Ni4xOTYzWk02MS44Nzg3IDY2LjE5NjNINjEuODY4MlY2Ny42OTYzSDYxLjg3ODdWNjYuMTk2M1pNNjEuODY4MiA2Ni4xOTYzSDYxLjg1NzdWNjcuNjk2M0g2MS44NjgyVjY2LjE5NjNaTTYxLjg1NzcgNjYuMTk2M0g2MS44NDcxVjY3LjY5NjNINjEuODU3N1Y2Ni4xOTYzWk02MS44NDcxIDY2LjE5NjNINjEuODM2NlY2Ny42OTYzSDYxLjg0NzFWNjYuMTk2M1pNNjEuODM2NiA2Ni4xOTYzSDYxLjgyNjFWNjcuNjk2M0g2MS44MzY2VjY2LjE5NjNaTTYxLjgyNjEgNjYuMTk2M0g2MS44MTU1VjY3LjY5NjNINjEuODI2MVY2Ni4xOTYzWk02MS44MTU1IDY2LjE5NjNINjEuODA0OVY2Ny42OTYzSDYxLjgxNTVWNjYuMTk2M1pNNjEuODA0OSA2Ni4xOTYzSDYxLjc5NDNWNjcuNjk2M0g2MS44MDQ5VjY2LjE5NjNaTTYxLjc5NDMgNjYuMTk2M0g2MS43ODM2VjY3LjY5NjNINjEuNzk0M1Y2Ni4xOTYzWk02MS43ODM2IDY2LjE5NjNINjEuNzczVjY3LjY5NjNINjEuNzgzNlY2Ni4xOTYzWk02MS43NzMgNjYuMTk2M0g2MS43NjIzVjY3LjY5NjNINjEuNzczVjY2LjE5NjNaTTYxLjc2MjMgNjYuMTk2M0g2MS43NTE3VjY3LjY5NjNINjEuNzYyM1Y2Ni4xOTYzWk02MS43NTE3IDY2LjE5NjNINjEuNzQxVjY3LjY5NjNINjEuNzUxN1Y2Ni4xOTYzWk02MS43NDEgNjYuMTk2M0g2MS43MzAyVjY3LjY5NjNINjEuNzQxVjY2LjE5NjNaTTYxLjczMDIgNjYuMTk2M0g2MS43MTk1VjY3LjY5NjNINjEuNzMwMlY2Ni4xOTYzWk02MS43MTk1IDY2LjE5NjNINjEuNzA4OFY2Ny42OTYzSDYxLjcxOTVWNjYuMTk2M1pNNjEuNzA4OCA2Ni4xOTYzSDYxLjY5OFY2Ny42OTYzSDYxLjcwODhWNjYuMTk2M1pNNjEuNjk4IDY2LjE5NjNINjEuNjg3MlY2Ny42OTYzSDYxLjY5OFY2Ni4xOTYzWk02MS42ODcyIDY2LjE5NjNINjEuNjc2NFY2Ny42OTYzSDYxLjY4NzJWNjYuMTk2M1pNNjEuNjc2NCA2Ni4xOTYzSDYxLjY2NTZWNjcuNjk2M0g2MS42NzY0VjY2LjE5NjNaTTYxLjY2NTYgNjYuMTk2M0g2MS42NTQ4VjY3LjY5NjNINjEuNjY1NlY2Ni4xOTYzWk02MS42NTQ4IDY2LjE5NjNINjEuNjQzOVY2Ny42OTYzSDYxLjY1NDhWNjYuMTk2M1pNNjEuNjQzOSA2Ni4xOTYzSDYxLjYzM1Y2Ny42OTYzSDYxLjY0MzlWNjYuMTk2M1pNNjEuNjMzIDY2LjE5NjNINjEuNjIyMVY2Ny42OTYzSDYxLjYzM1Y2Ni4xOTYzWk02MS42MjIxIDY2LjE5NjNINjEuNjExMlY2Ny42OTYzSDYxLjYyMjFWNjYuMTk2M1pNNjEuNjExMiA2Ni4xOTYzSDYxLjYwMDNWNjcuNjk2M0g2MS42MTEyVjY2LjE5NjNaTTYxLjYwMDMgNjYuMTk2M0g2MS41ODk0VjY3LjY5NjNINjEuNjAwM1Y2Ni4xOTYzWk02MS41ODk0IDY2LjE5NjNINjEuNTc4NFY2Ny42OTYzSDYxLjU4OTRWNjYuMTk2M1pNNjEuNTc4NCA2Ni4xOTYzSDYxLjU2NzRWNjcuNjk2M0g2MS41Nzg0VjY2LjE5NjNaTTYxLjU2NzQgNjYuMTk2M0g2MS41NTY0VjY3LjY5NjNINjEuNTY3NFY2Ni4xOTYzWk02MS41NTY0IDY2LjE5NjNINjEuNTQ1NFY2Ny42OTYzSDYxLjU1NjRWNjYuMTk2M1pNNjEuNTQ1NCA2Ni4xOTYzSDYxLjUzNDRWNjcuNjk2M0g2MS41NDU0VjY2LjE5NjNaTTYxLjUzNDQgNjYuMTk2M0g2MS41MjMzVjY3LjY5NjNINjEuNTM0NFY2Ni4xOTYzWk02MS41MjMzIDY2LjE5NjNINjEuNTEyM1Y2Ny42OTYzSDYxLjUyMzNWNjYuMTk2M1pNNjEuNTEyMyA2Ni4xOTYzSDYxLjUwMTJWNjcuNjk2M0g2MS41MTIzVjY2LjE5NjNaTTYxLjUwMTIgNjYuMTk2M0g2MS40OTAxVjY3LjY5NjNINjEuNTAxMlY2Ni4xOTYzWk02MS40OTAxIDY2LjE5NjNINjEuNDc5VjY3LjY5NjNINjEuNDkwMVY2Ni4xOTYzWk02MS40NzkgNjYuMTk2M0g2MS40Njc4VjY3LjY5NjNINjEuNDc5VjY2LjE5NjNaTTYxLjQ2NzggNjYuMTk2M0g2MS40NTY3VjY3LjY5NjNINjEuNDY3OFY2Ni4xOTYzWk02MS40NTY3IDY2LjE5NjNINjEuNDQ1NVY2Ny42OTYzSDYxLjQ1NjdWNjYuMTk2M1pNNjEuNDQ1NSA2Ni4xOTYzSDYxLjQzNDNWNjcuNjk2M0g2MS40NDU1VjY2LjE5NjNaTTYxLjQzNDMgNjYuMTk2M0g2MS40MjMxVjY3LjY5NjNINjEuNDM0M1Y2Ni4xOTYzWk02MS40MjMxIDY2LjE5NjNINjEuNDExOVY2Ny42OTYzSDYxLjQyMzFWNjYuMTk2M1pNNjEuNDExOSA2Ni4xOTYzSDYxLjQwMDZWNjcuNjk2M0g2MS40MTE5VjY2LjE5NjNaTTYxLjQwMDYgNjYuMTk2M0g2MS4zODk0VjY3LjY5NjNINjEuNDAwNlY2Ni4xOTYzWk02MS4zODk0IDY2LjE5NjNINjEuMzc4MVY2Ny42OTYzSDYxLjM4OTRWNjYuMTk2M1pNNjEuMzc4MSA2Ni4xOTYzSDYxLjM2NjhWNjcuNjk2M0g2MS4zNzgxVjY2LjE5NjNaTTYxLjM2NjggNjYuMTk2M0g2MS4zNTU1VjY3LjY5NjNINjEuMzY2OFY2Ni4xOTYzWk02MS4zNTU1IDY2LjE5NjNINjEuMzQ0MlY2Ny42OTYzSDYxLjM1NTVWNjYuMTk2M1pNNjEuMzQ0MiA2Ni4xOTYzSDYxLjMzMjhWNjcuNjk2M0g2MS4zNDQyVjY2LjE5NjNaTTYxLjMzMjggNjYuMTk2M0g2MS4zMjE1VjY3LjY5NjNINjEuMzMyOFY2Ni4xOTYzWk02MS4zMjE1IDY2LjE5NjNINjEuMzEwMVY2Ny42OTYzSDYxLjMyMTVWNjYuMTk2M1pNNjEuMzEwMSA2Ni4xOTYzSDYxLjI5ODdWNjcuNjk2M0g2MS4zMTAxVjY2LjE5NjNaTTYxLjI5ODcgNjYuMTk2M0g2MS4yODczVjY3LjY5NjNINjEuMjk4N1Y2Ni4xOTYzWk02MS4yODczIDY2LjE5NjNINjEuMjc1OFY2Ny42OTYzSDYxLjI4NzNWNjYuMTk2M1pNNjEuMjc1OCA2Ni4xOTYzSDYxLjI2NDRWNjcuNjk2M0g2MS4yNzU4VjY2LjE5NjNaTTYxLjI2NDQgNjYuMTk2M0g2MS4yNTI5VjY3LjY5NjNINjEuMjY0NFY2Ni4xOTYzWk02MS4yNTI5IDY2LjE5NjNINjEuMjQxNFY2Ny42OTYzSDYxLjI1MjlWNjYuMTk2M1pNNjEuMjQxNCA2Ni4xOTYzSDYxLjIyOTlWNjcuNjk2M0g2MS4yNDE0VjY2LjE5NjNaTTYxLjIyOTkgNjYuMTk2M0g2MS4yMTg0VjY3LjY5NjNINjEuMjI5OVY2Ni4xOTYzWk02MS4yMTg0IDY2LjE5NjNINjEuMjA2OVY2Ny42OTYzSDYxLjIxODRWNjYuMTk2M1pNNjEuMjA2OSA2Ni4xOTYzSDYxLjE5NTNWNjcuNjk2M0g2MS4yMDY5VjY2LjE5NjNaTTYxLjE5NTMgNjYuMTk2M0g2MS4xODM3VjY3LjY5NjNINjEuMTk1M1Y2Ni4xOTYzWk02MS4xODM3IDY2LjE5NjNINjEuMTcyMVY2Ny42OTYzSDYxLjE4MzdWNjYuMTk2M1pNNjEuMTcyMSA2Ni4xOTYzSDYxLjE2MDVWNjcuNjk2M0g2MS4xNzIxVjY2LjE5NjNaTTYxLjE2MDUgNjYuMTk2M0g2MS4xNDg5VjY3LjY5NjNINjEuMTYwNVY2Ni4xOTYzWk02MS4xNDg5IDY2LjE5NjNINjEuMTM3M1Y2Ny42OTYzSDYxLjE0ODlWNjYuMTk2M1pNNjEuMTM3MyA2Ni4xOTYzSDYxLjEyNTZWNjcuNjk2M0g2MS4xMzczVjY2LjE5NjNaTTYxLjEyNTYgNjYuMTk2M0g2MS4xMTM5VjY3LjY5NjNINjEuMTI1NlY2Ni4xOTYzWk02MS4xMTM5IDY2LjE5NjNINjEuMTAyMlY2Ny42OTYzSDYxLjExMzlWNjYuMTk2M1pNNjEuMTAyMiA2Ni4xOTYzSDYxLjA5MDVWNjcuNjk2M0g2MS4xMDIyVjY2LjE5NjNaTTYxLjA5MDUgNjYuMTk2M0g2MS4wNzg4VjY3LjY5NjNINjEuMDkwNVY2Ni4xOTYzWk02MS4wNzg4IDY2LjE5NjNINjEuMDY3VjY3LjY5NjNINjEuMDc4OFY2Ni4xOTYzWk02MS4wNjcgNjYuMTk2M0g2MS4wNTUzVjY3LjY5NjNINjEuMDY3VjY2LjE5NjNaTTYxLjA1NTMgNjYuMTk2M0g2MS4wNDM1VjY3LjY5NjNINjEuMDU1M1Y2Ni4xOTYzWk02MS4wNDM1IDY2LjE5NjNINjEuMDMxN1Y2Ny42OTYzSDYxLjA0MzVWNjYuMTk2M1pNNjEuMDMxNyA2Ni4xOTYzSDYxLjAxOTlWNjcuNjk2M0g2MS4wMzE3VjY2LjE5NjNaTTYxLjAxOTkgNjYuMTk2M0g2MS4wMDhWNjcuNjk2M0g2MS4wMTk5VjY2LjE5NjNaTTYxLjAwOCA2Ni4xOTYzSDYwLjk5NjJWNjcuNjk2M0g2MS4wMDhWNjYuMTk2M1pNNjAuOTk2MiA2Ni4xOTYzSDYwLjk4NDNWNjcuNjk2M0g2MC45OTYyVjY2LjE5NjNaTTYwLjk4NDMgNjYuMTk2M0g2MC45NzI0VjY3LjY5NjNINjAuOTg0M1Y2Ni4xOTYzWk02MC45NzI0IDY2LjE5NjNINjAuOTYwNVY2Ny42OTYzSDYwLjk3MjRWNjYuMTk2M1pNNjAuOTYwNSA2Ni4xOTYzSDYwLjk0ODZWNjcuNjk2M0g2MC45NjA1VjY2LjE5NjNaTTYwLjk0ODYgNjYuMTk2M0g2MC45MzY2VjY3LjY5NjNINjAuOTQ4NlY2Ni4xOTYzWk02MC45MzY2IDY2LjE5NjNINjAuOTI0N1Y2Ny42OTYzSDYwLjkzNjZWNjYuMTk2M1pNNjAuOTI0NyA2Ni4xOTYzSDYwLjkxMjdWNjcuNjk2M0g2MC45MjQ3VjY2LjE5NjNaTTYwLjkxMjcgNjYuMTk2M0g2MC45MDA3VjY3LjY5NjNINjAuOTEyN1Y2Ni4xOTYzWk02MC45MDA3IDY2LjE5NjNINjAuODg4N1Y2Ny42OTYzSDYwLjkwMDdWNjYuMTk2M1pNNjAuODg4NyA2Ni4xOTYzSDYwLjg3NjdWNjcuNjk2M0g2MC44ODg3VjY2LjE5NjNaTTYwLjg3NjcgNjYuMTk2M0g2MC44NjQ2VjY3LjY5NjNINjAuODc2N1Y2Ni4xOTYzWk02MC44NjQ2IDY2LjE5NjNINjAuODUyNlY2Ny42OTYzSDYwLjg2NDZWNjYuMTk2M1pNNjAuODUyNiA2Ni4xOTYzSDYwLjg0MDVWNjcuNjk2M0g2MC44NTI2VjY2LjE5NjNaTTYwLjg0MDUgNjYuMTk2M0g2MC44Mjg0VjY3LjY5NjNINjAuODQwNVY2Ni4xOTYzWk02MC44Mjg0IDY2LjE5NjNINjAuODE2M1Y2Ny42OTYzSDYwLjgyODRWNjYuMTk2M1pNNjAuODE2MyA2Ni4xOTYzSDYwLjgwNDFWNjcuNjk2M0g2MC44MTYzVjY2LjE5NjNaTTYwLjgwNDEgNjYuMTk2M0g2MC43OTJWNjcuNjk2M0g2MC44MDQxVjY2LjE5NjNaTTYwLjc5MiA2Ni4xOTYzSDYwLjc3OThWNjcuNjk2M0g2MC43OTJWNjYuMTk2M1pNNjAuNzc5OCA2Ni4xOTYzSDYwLjc2NzZWNjcuNjk2M0g2MC43Nzk4VjY2LjE5NjNaTTYwLjc2NzYgNjYuMTk2M0g2MC43NTU0VjY3LjY5NjNINjAuNzY3NlY2Ni4xOTYzWk02MC43NTU0IDY2LjE5NjNINjAuNzQzMlY2Ny42OTYzSDYwLjc1NTRWNjYuMTk2M1pNNjAuNzQzMiA2Ni4xOTYzSDYwLjczMVY2Ny42OTYzSDYwLjc0MzJWNjYuMTk2M1pNNjAuNzMxIDY2LjE5NjNINjAuNzE4N1Y2Ny42OTYzSDYwLjczMVY2Ni4xOTYzWk02MC43MTg3IDY2LjE5NjNINjAuNzA2NFY2Ny42OTYzSDYwLjcxODdWNjYuMTk2M1pNNjAuNzA2NCA2Ni4xOTYzSDYwLjY5NDFWNjcuNjk2M0g2MC43MDY0VjY2LjE5NjNaTTYwLjY5NDEgNjYuMTk2M0g2MC42ODE4VjY3LjY5NjNINjAuNjk0MVY2Ni4xOTYzWk02MC42ODE4IDY2LjE5NjNINjAuNjY5NVY2Ny42OTYzSDYwLjY4MThWNjYuMTk2M1pNNjAuNjY5NSA2Ni4xOTYzSDYwLjY1NzFWNjcuNjk2M0g2MC42Njk1VjY2LjE5NjNaTTYwLjY1NzEgNjYuMTk2M0g2MC42NDQ4VjY3LjY5NjNINjAuNjU3MVY2Ni4xOTYzWk02MC42NDQ4IDY2LjE5NjNINjAuNjMyNFY2Ny42OTYzSDYwLjY0NDhWNjYuMTk2M1pNNjAuNjMyNCA2Ni4xOTYzSDYwLjYyVjY3LjY5NjNINjAuNjMyNFY2Ni4xOTYzWk02MC42MiA2Ni4xOTYzSDYwLjYwNzZWNjcuNjk2M0g2MC42MlY2Ni4xOTYzWk02MC42MDc2IDY2LjE5NjNINjAuNTk1MlY2Ny42OTYzSDYwLjYwNzZWNjYuMTk2M1pNNjAuNTk1MiA2Ni4xOTYzSDYwLjU4MjdWNjcuNjk2M0g2MC41OTUyVjY2LjE5NjNaTTYwLjU4MjcgNjYuMTk2M0g2MC41NzAyVjY3LjY5NjNINjAuNTgyN1Y2Ni4xOTYzWk02MC41NzAyIDY2LjE5NjNINjAuNTU3OFY2Ny42OTYzSDYwLjU3MDJWNjYuMTk2M1pNNjAuNTU3OCA2Ni4xOTYzSDYwLjU0NTNWNjcuNjk2M0g2MC41NTc4VjY2LjE5NjNaTTYwLjU0NTMgNjYuMTk2M0g2MC41MzI3VjY3LjY5NjNINjAuNTQ1M1Y2Ni4xOTYzWk02MC41MzI3IDY2LjE5NjNINjAuNTIwMlY2Ny42OTYzSDYwLjUzMjdWNjYuMTk2M1pNNjAuNTIwMiA2Ni4xOTYzSDYwLjUwNzZWNjcuNjk2M0g2MC41MjAyVjY2LjE5NjNaTTYwLjUwNzYgNjYuMTk2M0g2MC40OTUxVjY3LjY5NjNINjAuNTA3NlY2Ni4xOTYzWk02MC40OTUxIDY2LjE5NjNINjAuNDgyNVY2Ny42OTYzSDYwLjQ5NTFWNjYuMTk2M1pNNjAuNDgyNSA2Ni4xOTYzSDYwLjQ2OTlWNjcuNjk2M0g2MC40ODI1VjY2LjE5NjNaTTYwLjQ2OTkgNjYuMTk2M0g2MC40NTcyVjY3LjY5NjNINjAuNDY5OVY2Ni4xOTYzWk02MC40NTcyIDY2LjE5NjNINjAuNDQ0NlY2Ny42OTYzSDYwLjQ1NzJWNjYuMTk2M1pNNjAuNDQ0NiA2Ni4xOTYzSDYwLjQzMTlWNjcuNjk2M0g2MC40NDQ2VjY2LjE5NjNaTTYwLjQzMTkgNjYuMTk2M0g2MC40MTkzVjY3LjY5NjNINjAuNDMxOVY2Ni4xOTYzWk02MC40MTkzIDY2LjE5NjNINjAuNDA2NlY2Ny42OTYzSDYwLjQxOTNWNjYuMTk2M1pNNjAuNDA2NiA2Ni4xOTYzSDYwLjM5MzlWNjcuNjk2M0g2MC40MDY2VjY2LjE5NjNaTTYwLjM5MzkgNjYuMTk2M0g2MC4zODExVjY3LjY5NjNINjAuMzkzOVY2Ni4xOTYzWk02MC4zODExIDY2LjE5NjNINjAuMzY4NFY2Ny42OTYzSDYwLjM4MTFWNjYuMTk2M1pNNjAuMzY4NCA2Ni4xOTYzSDYwLjM1NTZWNjcuNjk2M0g2MC4zNjg0VjY2LjE5NjNaTTYwLjM1NTYgNjYuMTk2M0g2MC4zNDI4VjY3LjY5NjNINjAuMzU1NlY2Ni4xOTYzWk02MC4zNDI4IDY2LjE5NjNINjAuMzNWNjcuNjk2M0g2MC4zNDI4VjY2LjE5NjNaTTYwLjMzIDY2LjE5NjNINjAuMzE3MlY2Ny42OTYzSDYwLjMzVjY2LjE5NjNaTTYwLjMxNzIgNjYuMTk2M0g2MC4zMDQ0VjY3LjY5NjNINjAuMzE3MlY2Ni4xOTYzWk02MC4zMDQ0IDY2LjE5NjNINjAuMjkxNVY2Ny42OTYzSDYwLjMwNDRWNjYuMTk2M1pNNjAuMjkxNSA2Ni4xOTYzSDYwLjI3ODdWNjcuNjk2M0g2MC4yOTE1VjY2LjE5NjNaTTYwLjI3ODcgNjYuMTk2M0g2MC4yNjU4VjY3LjY5NjNINjAuMjc4N1Y2Ni4xOTYzWk02MC4yNjU4IDY2LjE5NjNINjAuMjUyOVY2Ny42OTYzSDYwLjI2NThWNjYuMTk2M1pNNjAuMjUyOSA2Ni4xOTYzSDYwLjIzOTlWNjcuNjk2M0g2MC4yNTI5VjY2LjE5NjNaTTYwLjIzOTkgNjYuMTk2M0g2MC4yMjdWNjcuNjk2M0g2MC4yMzk5VjY2LjE5NjNaTTYwLjIyNyA2Ni4xOTYzSDYwLjIxNFY2Ny42OTYzSDYwLjIyN1Y2Ni4xOTYzWk02MC4yMTQgNjYuMTk2M0g2MC4yMDExVjY3LjY5NjNINjAuMjE0VjY2LjE5NjNaTTYwLjIwMTEgNjYuMTk2M0g2MC4xODgxVjY3LjY5NjNINjAuMjAxMVY2Ni4xOTYzWk02MC4xODgxIDY2LjE5NjNINjAuMTc1MVY2Ny42OTYzSDYwLjE4ODFWNjYuMTk2M1pNNjAuMTc1MSA2Ni4xOTYzSDYwLjE2MlY2Ny42OTYzSDYwLjE3NTFWNjYuMTk2M1pNNjAuMTYyIDY2LjE5NjNINjAuMTQ5VjY3LjY5NjNINjAuMTYyVjY2LjE5NjNaTTYwLjE0OSA2Ni4xOTYzSDYwLjEzNTlWNjcuNjk2M0g2MC4xNDlWNjYuMTk2M1pNNjAuMTM1OSA2Ni4xOTYzSDYwLjEyMjhWNjcuNjk2M0g2MC4xMzU5VjY2LjE5NjNaTTYwLjEyMjggNjYuMTk2M0g2MC4xMDk3VjY3LjY5NjNINjAuMTIyOFY2Ni4xOTYzWk02MC4xMDk3IDY2LjE5NjNINjAuMDk2NlY2Ny42OTYzSDYwLjEwOTdWNjYuMTk2M1pNNjAuMDk2NiA2Ni4xOTYzSDYwLjA4MzVWNjcuNjk2M0g2MC4wOTY2VjY2LjE5NjNaTTYwLjA4MzUgNjYuMTk2M0g2MC4wNzAzVjY3LjY5NjNINjAuMDgzNVY2Ni4xOTYzWk02MC4wNzAzIDY2LjE5NjNINjAuMDU3MlY2Ny42OTYzSDYwLjA3MDNWNjYuMTk2M1pNNjAuMDU3MiA2Ni4xOTYzSDYwLjA0NFY2Ny42OTYzSDYwLjA1NzJWNjYuMTk2M1pNNjAuMDQ0IDY2LjE5NjNINjAuMDMwOFY2Ny42OTYzSDYwLjA0NFY2Ni4xOTYzWk02MC4wMzA4IDY2LjE5NjNINjAuMDE3NlY2Ny42OTYzSDYwLjAzMDhWNjYuMTk2M1pNNjAuMDE3NiA2Ni4xOTYzSDYwLjAwNDNWNjcuNjk2M0g2MC4wMTc2VjY2LjE5NjNaTTYwLjAwNDMgNjYuMTk2M0g1OS45OTExVjY3LjY5NjNINjAuMDA0M1Y2Ni4xOTYzWk01OS45OTExIDY2LjE5NjNINTkuOTc3OFY2Ny42OTYzSDU5Ljk5MTFWNjYuMTk2M1pNNTkuOTc3OCA2Ni4xOTYzSDU5Ljk2NDVWNjcuNjk2M0g1OS45Nzc4VjY2LjE5NjNaTTU5Ljk2NDUgNjYuMTk2M0g1OS45NTEyVjY3LjY5NjNINTkuOTY0NVY2Ni4xOTYzWk01OS45NTEyIDY2LjE5NjNINTkuOTM3OVY2Ny42OTYzSDU5Ljk1MTJWNjYuMTk2M1pNNTkuOTM3OSA2Ni4xOTYzSDU5LjkyNDVWNjcuNjk2M0g1OS45Mzc5VjY2LjE5NjNaTTU5LjkyNDUgNjYuMTk2M0g1OS45MTEyVjY3LjY5NjNINTkuOTI0NVY2Ni4xOTYzWk01OS45MTEyIDY2LjE5NjNINTkuODk3OFY2Ny42OTYzSDU5LjkxMTJWNjYuMTk2M1pNNTkuODk3OCA2Ni4xOTYzSDU5Ljg4NDRWNjcuNjk2M0g1OS44OTc4VjY2LjE5NjNaTTU5Ljg4NDQgNjYuMTk2M0g1OS44NzFWNjcuNjk2M0g1OS44ODQ0VjY2LjE5NjNaTTU5Ljg3MSA2Ni4xOTYzSDU5Ljg1NzZWNjcuNjk2M0g1OS44NzFWNjYuMTk2M1pNNTkuODU3NiA2Ni4xOTYzSDU5Ljg0NDFWNjcuNjk2M0g1OS44NTc2VjY2LjE5NjNaTTU5Ljg0NDEgNjYuMTk2M0g1OS44MzA2VjY3LjY5NjNINTkuODQ0MVY2Ni4xOTYzWk01OS44MzA2IDY2LjE5NjNINTkuODE3MlY2Ny42OTYzSDU5LjgzMDZWNjYuMTk2M1pNNTkuODE3MiA2Ni4xOTYzSDU5LjgwMzdWNjcuNjk2M0g1OS44MTcyVjY2LjE5NjNaTTU5LjgwMzcgNjYuMTk2M0g1OS43OTAxVjY3LjY5NjNINTkuODAzN1Y2Ni4xOTYzWk01OS43OTAxIDY2LjE5NjNINTkuNzc2NlY2Ny42OTYzSDU5Ljc5MDFWNjYuMTk2M1pNNTkuNzc2NiA2Ni4xOTYzSDU5Ljc2M1Y2Ny42OTYzSDU5Ljc3NjZWNjYuMTk2M1pNNTkuNzYzIDY2LjE5NjNINTkuNzQ5NVY2Ny42OTYzSDU5Ljc2M1Y2Ni4xOTYzWk01OS43NDk1IDY2LjE5NjNINTkuNzM1OVY2Ny42OTYzSDU5Ljc0OTVWNjYuMTk2M1pNNTkuNzM1OSA2Ni4xOTYzSDU5LjcyMjNWNjcuNjk2M0g1OS43MzU5VjY2LjE5NjNaTTU5LjcyMjMgNjYuMTk2M0g1OS43MDg3VjY3LjY5NjNINTkuNzIyM1Y2Ni4xOTYzWk01OS43MDg3IDY2LjE5NjNINTkuNjk1VjY3LjY5NjNINTkuNzA4N1Y2Ni4xOTYzWk01OS42OTUgNjYuMTk2M0g1OS42ODE0VjY3LjY5NjNINTkuNjk1VjY2LjE5NjNaTTU5LjY4MTQgNjYuMTk2M0g1OS42Njc3VjY3LjY5NjNINTkuNjgxNFY2Ni4xOTYzWk01OS42Njc3IDY2LjE5NjNINTkuNjU0VjY3LjY5NjNINTkuNjY3N1Y2Ni4xOTYzWk01OS42NTQgNjYuMTk2M0g1OS42NDAzVjY3LjY5NjNINTkuNjU0VjY2LjE5NjNaTTU5LjY0MDMgNjYuMTk2M0g1OS42MjY1VjY3LjY5NjNINTkuNjQwM1Y2Ni4xOTYzWk01OS42MjY1IDY2LjE5NjNINTkuNjEyOFY2Ny42OTYzSDU5LjYyNjVWNjYuMTk2M1pNNTkuNjEyOCA2Ni4xOTYzSDU5LjU5OVY2Ny42OTYzSDU5LjYxMjhWNjYuMTk2M1pNNTkuNTk5IDY2LjE5NjNINTkuNTg1MlY2Ny42OTYzSDU5LjU5OVY2Ni4xOTYzWk01OS41ODUyIDY2LjE5NjNINTkuNTcxNFY2Ny42OTYzSDU5LjU4NTJWNjYuMTk2M1pNNTkuNTcxNCA2Ni4xOTYzSDU5LjU1NzZWNjcuNjk2M0g1OS41NzE0VjY2LjE5NjNaTTU5LjU1NzYgNjYuMTk2M0g1OS41NDM4VjY3LjY5NjNINTkuNTU3NlY2Ni4xOTYzWk01OS41NDM4IDY2LjE5NjNINTkuNTI5OVY2Ny42OTYzSDU5LjU0MzhWNjYuMTk2M1pNNTkuNTI5OSA2Ni4xOTYzSDU5LjUxNjFWNjcuNjk2M0g1OS41Mjk5VjY2LjE5NjNaTTU5LjUxNjEgNjYuMTk2M0g1OS41MDIyVjY3LjY5NjNINTkuNTE2MVY2Ni4xOTYzWk01OS41MDIyIDY2LjE5NjNINTkuNDg4M1Y2Ny42OTYzSDU5LjUwMjJWNjYuMTk2M1pNNTkuNDg4MyA2Ni4xOTYzSDU5LjQ3NDRWNjcuNjk2M0g1OS40ODgzVjY2LjE5NjNaTTU5LjQ3NDQgNjYuMTk2M0g1OS40NjA0VjY3LjY5NjNINTkuNDc0NFY2Ni4xOTYzWk01OS40NjA0IDY2LjE5NjNINTkuNDQ2NVY2Ny42OTYzSDU5LjQ2MDRWNjYuMTk2M1pNNTkuNDQ2NSA2Ni4xOTYzSDU5LjQzMjVWNjcuNjk2M0g1OS40NDY1VjY2LjE5NjNaTTU5LjQzMjUgNjYuMTk2M0g1OS40MTg1VjY3LjY5NjNINTkuNDMyNVY2Ni4xOTYzWk01OS40MTg1IDY2LjE5NjNINTkuNDA0NVY2Ny42OTYzSDU5LjQxODVWNjYuMTk2M1pNNTkuNDA0NSA2Ni4xOTYzSDU5LjM5MDVWNjcuNjk2M0g1OS40MDQ1VjY2LjE5NjNaTTU5LjM5MDUgNjYuMTk2M0g1OS4zNzY0VjY3LjY5NjNINTkuMzkwNVY2Ni4xOTYzWk01OS4zNzY0IDY2LjE5NjNINTkuMzYyNFY2Ny42OTYzSDU5LjM3NjRWNjYuMTk2M1pNNTkuMzYyNCA2Ni4xOTYzSDU5LjM0ODNWNjcuNjk2M0g1OS4zNjI0VjY2LjE5NjNaTTU5LjM0ODMgNjYuMTk2M0g1OS4zMzQyVjY3LjY5NjNINTkuMzQ4M1Y2Ni4xOTYzWk01OS4zMzQyIDY2LjE5NjNINTkuMzIwMVY2Ny42OTYzSDU5LjMzNDJWNjYuMTk2M1pNNTkuMzIwMSA2Ni4xOTYzSDU5LjMwNTlWNjcuNjk2M0g1OS4zMjAxVjY2LjE5NjNaTTU5LjMwNTkgNjYuMTk2M0g1OS4yOTE4VjY3LjY5NjNINTkuMzA1OVY2Ni4xOTYzWk01OS4yOTE4IDY2LjE5NjNINTkuMjc3NlY2Ny42OTYzSDU5LjI5MThWNjYuMTk2M1pNNTkuMjc3NiA2Ni4xOTYzSDU5LjI2MzRWNjcuNjk2M0g1OS4yNzc2VjY2LjE5NjNaTTU5LjI2MzQgNjYuMTk2M0g1OS4yNDkyVjY3LjY5NjNINTkuMjYzNFY2Ni4xOTYzWk01OS4yNDkyIDY2LjE5NjNINTkuMjM1VjY3LjY5NjNINTkuMjQ5MlY2Ni4xOTYzWk01OS4yMzUgNjYuMTk2M0g1OS4yMjA4VjY3LjY5NjNINTkuMjM1VjY2LjE5NjNaTTU5LjIyMDggNjYuMTk2M0g1OS4yMDY1VjY3LjY5NjNINTkuMjIwOFY2Ni4xOTYzWk01OS4yMDY1IDY2LjE5NjNINTkuMTkyMlY2Ny42OTYzSDU5LjIwNjVWNjYuMTk2M1pNNTkuMTkyMiA2Ni4xOTYzSDU5LjE3OFY2Ny42OTYzSDU5LjE5MjJWNjYuMTk2M1pNNTkuMTc4IDY2LjE5NjNINTkuMTYzN1Y2Ny42OTYzSDU5LjE3OFY2Ni4xOTYzWk01OS4xNjM3IDY2LjE5NjNINTkuMTQ5M1Y2Ny42OTYzSDU5LjE2MzdWNjYuMTk2M1pNNTkuMTQ5MyA2Ni4xOTYzSDU5LjEzNVY2Ny42OTYzSDU5LjE0OTNWNjYuMTk2M1pNNTkuMTM1IDY2LjE5NjNINTkuMTIwNlY2Ny42OTYzSDU5LjEzNVY2Ni4xOTYzWk01OS4xMjA2IDY2LjE5NjNINTkuMTA2MlY2Ny42OTYzSDU5LjEyMDZWNjYuMTk2M1pNNTkuMTA2MiA2Ni4xOTYzSDU5LjA5MTlWNjcuNjk2M0g1OS4xMDYyVjY2LjE5NjNaTTU5LjA5MTkgNjYuMTk2M0g1OS4wNzc0VjY3LjY5NjNINTkuMDkxOVY2Ni4xOTYzWk01OS4wNzc0IDY2LjE5NjNINTkuMDYzVjY3LjY5NjNINTkuMDc3NFY2Ni4xOTYzWk01OS4wNjMgNjYuMTk2M0g1OS4wNDg2VjY3LjY5NjNINTkuMDYzVjY2LjE5NjNaTTU5LjA0ODYgNjYuMTk2M0g1OS4wMzQxVjY3LjY5NjNINTkuMDQ4NlY2Ni4xOTYzWk01OS4wMzQxIDY2LjE5NjNINTkuMDE5NlY2Ny42OTYzSDU5LjAzNDFWNjYuMTk2M1pNNTkuMDE5NiA2Ni4xOTYzSDU5LjAwNTFWNjcuNjk2M0g1OS4wMTk2VjY2LjE5NjNaTTU5LjAwNTEgNjYuMTk2M0g1OC45OTA2VjY3LjY5NjNINTkuMDA1MVY2Ni4xOTYzWk01OC45OTA2IDY2LjE5NjNINTguOTc2MVY2Ny42OTYzSDU4Ljk5MDZWNjYuMTk2M1pNNTguOTc2MSA2Ni4xOTYzSDU4Ljk2MTVWNjcuNjk2M0g1OC45NzYxVjY2LjE5NjNaTTU4Ljk2MTUgNjYuMTk2M0g1OC45NDY5VjY3LjY5NjNINTguOTYxNVY2Ni4xOTYzWk01OC45NDY5IDY2LjE5NjNINTguOTMyNFY2Ny42OTYzSDU4Ljk0NjlWNjYuMTk2M1pNNTguOTMyNCA2Ni4xOTYzSDU4LjkxNzdWNjcuNjk2M0g1OC45MzI0VjY2LjE5NjNaTTU4LjkxNzcgNjYuMTk2M0g1OC45MDMxVjY3LjY5NjNINTguOTE3N1Y2Ni4xOTYzWk01OC45MDMxIDY2LjE5NjNINTguODg4NVY2Ny42OTYzSDU4LjkwMzFWNjYuMTk2M1pNNTguODg4NSA2Ni4xOTYzSDU4Ljg3MzhWNjcuNjk2M0g1OC44ODg1VjY2LjE5NjNaTTU4Ljg3MzggNjYuMTk2M0g1OC44NTkxVjY3LjY5NjNINTguODczOFY2Ni4xOTYzWk01OC44NTkxIDY2LjE5NjNINTguODQ0NVY2Ny42OTYzSDU4Ljg1OTFWNjYuMTk2M1pNNTguODQ0NSA2Ni4xOTYzSDU4LjgyOTdWNjcuNjk2M0g1OC44NDQ1VjY2LjE5NjNaTTU4LjgyOTcgNjYuMTk2M0g1OC44MTVWNjcuNjk2M0g1OC44Mjk3VjY2LjE5NjNaTTU4LjgxNSA2Ni4xOTYzSDU4LjgwMDNWNjcuNjk2M0g1OC44MTVWNjYuMTk2M1pNNTguODAwMyA2Ni4xOTYzSDU4Ljc4NTVWNjcuNjk2M0g1OC44MDAzVjY2LjE5NjNaTTU4Ljc4NTUgNjYuMTk2M0g1OC43NzA3VjY3LjY5NjNINTguNzg1NVY2Ni4xOTYzWk01OC43NzA3IDY2LjE5NjNINTguNzU1OVY2Ny42OTYzSDU4Ljc3MDdWNjYuMTk2M1pNNTguNzU1OSA2Ni4xOTYzSDU4Ljc0MTFWNjcuNjk2M0g1OC43NTU5VjY2LjE5NjNaTTU4Ljc0MTEgNjYuMTk2M0g1OC43MjYzVjY3LjY5NjNINTguNzQxMVY2Ni4xOTYzWk01OC43MjYzIDY2LjE5NjNINTguNzExNFY2Ny42OTYzSDU4LjcyNjNWNjYuMTk2M1pNNTguNzExNCA2Ni4xOTYzSDU4LjY5NjZWNjcuNjk2M0g1OC43MTE0VjY2LjE5NjNaTTU4LjY5NjYgNjYuMTk2M0g1OC42ODE3VjY3LjY5NjNINTguNjk2NlY2Ni4xOTYzWk01OC42ODE3IDY2LjE5NjNINTguNjY2OFY2Ny42OTYzSDU4LjY4MTdWNjYuMTk2M1pNNTguNjY2OCA2Ni4xOTYzSDU4LjY1MTlWNjcuNjk2M0g1OC42NjY4VjY2LjE5NjNaTTU4LjY1MTkgNjYuMTk2M0g1OC42MzY5VjY3LjY5NjNINTguNjUxOVY2Ni4xOTYzWk01OC42MzY5IDY2LjE5NjNINTguNjIyVjY3LjY5NjNINTguNjM2OVY2Ni4xOTYzWk01OC42MjIgNjYuMTk2M0g1OC42MDdWNjcuNjk2M0g1OC42MjJWNjYuMTk2M1pNNTguNjA3IDY2LjE5NjNINTguNTkyVjY3LjY5NjNINTguNjA3VjY2LjE5NjNaTTU4LjU5MiA2Ni4xOTYzSDU4LjU3N1Y2Ny42OTYzSDU4LjU5MlY2Ni4xOTYzWk01OC41NzcgNjYuMTk2M0g1OC41NjJWNjcuNjk2M0g1OC41NzdWNjYuMTk2M1pNNTguNTYyIDY2LjE5NjNINTguNTQ2OVY2Ny42OTYzSDU4LjU2MlY2Ni4xOTYzWk01OC41NDY5IDY2LjE5NjNINTguNTMxOVY2Ny42OTYzSDU4LjU0NjlWNjYuMTk2M1pNNTguNTMxOSA2Ni4xOTYzSDU4LjUxNjhWNjcuNjk2M0g1OC41MzE5VjY2LjE5NjNaTTU4LjUxNjggNjYuMTk2M0g1OC41MDE3VjY3LjY5NjNINTguNTE2OFY2Ni4xOTYzWk01OC41MDE3IDY2LjE5NjNINTguNDg2NlY2Ny42OTYzSDU4LjUwMTdWNjYuMTk2M1pNNTguNDg2NiA2Ni4xOTYzSDU4LjQ3MTRWNjcuNjk2M0g1OC40ODY2VjY2LjE5NjNaTTU4LjQ3MTQgNjYuMTk2M0g1OC40NTYzVjY3LjY5NjNINTguNDcxNFY2Ni4xOTYzWk01OC40NTYzIDY2LjE5NjNINTguNDQxMVY2Ny42OTYzSDU4LjQ1NjNWNjYuMTk2M1pNNTguNDQxMSA2Ni4xOTYzSDU4LjQyNTlWNjcuNjk2M0g1OC40NDExVjY2LjE5NjNaTTU4LjQyNTkgNjYuMTk2M0g1OC40MTA3VjY3LjY5NjNINTguNDI1OVY2Ni4xOTYzWk01OC40MTA3IDY2LjE5NjNINTguMzk1NVY2Ny42OTYzSDU4LjQxMDdWNjYuMTk2M1pNNTguMzk1NSA2Ni4xOTYzSDU4LjM4MDNWNjcuNjk2M0g1OC4zOTU1VjY2LjE5NjNaTTU4LjM4MDMgNjYuMTk2M0g1OC4zNjVWNjcuNjk2M0g1OC4zODAzVjY2LjE5NjNaTTU4LjM2NSA2Ni4xOTYzSDU4LjM0OThWNjcuNjk2M0g1OC4zNjVWNjYuMTk2M1pNNTguMzQ5OCA2Ni4xOTYzSDU4LjMzNDVWNjcuNjk2M0g1OC4zNDk4VjY2LjE5NjNaTTU4LjMzNDUgNjYuMTk2M0g1OC4zMTkyVjY3LjY5NjNINTguMzM0NVY2Ni4xOTYzWk01OC4zMTkyIDY2LjE5NjNINTguMzAzOFY2Ny42OTYzSDU4LjMxOTJWNjYuMTk2M1pNNTguMzAzOCA2Ni4xOTYzSDU4LjI4ODVWNjcuNjk2M0g1OC4zMDM4VjY2LjE5NjNaTTU4LjI4ODUgNjYuMTk2M0g1OC4yNzMxVjY3LjY5NjNINTguMjg4NVY2Ni4xOTYzWk01OC4yNzMxIDY2LjE5NjNINTguMjU3OFY2Ny42OTYzSDU4LjI3MzFWNjYuMTk2M1pNNTguMjU3OCA2Ni4xOTYzSDU4LjI0MjRWNjcuNjk2M0g1OC4yNTc4VjY2LjE5NjNaTTU4LjI0MjQgNjYuMTk2M0g1OC4yMjdWNjcuNjk2M0g1OC4yNDI0VjY2LjE5NjNaTTU4LjIyNyA2Ni4xOTYzSDU4LjIxMTVWNjcuNjk2M0g1OC4yMjdWNjYuMTk2M1pNNTguMjExNSA2Ni4xOTYzSDU4LjE5NjFWNjcuNjk2M0g1OC4yMTE1VjY2LjE5NjNaTTU4LjE5NjEgNjYuMTk2M0g1OC4xODA2VjY3LjY5NjNINTguMTk2MVY2Ni4xOTYzWk01OC4xODA2IDY2LjE5NjNINTguMTY1MVY2Ny42OTYzSDU4LjE4MDZWNjYuMTk2M1pNNTguMTY1MSA2Ni4xOTYzSDU4LjE0OTZWNjcuNjk2M0g1OC4xNjUxVjY2LjE5NjNaTTU4LjE0OTYgNjYuMTk2M0g1OC4xMzQxVjY3LjY5NjNINTguMTQ5NlY2Ni4xOTYzWk01OC4xMzQxIDY2LjE5NjNINTguMTE4NlY2Ny42OTYzSDU4LjEzNDFWNjYuMTk2M1pNNTguMTE4NiA2Ni4xOTYzSDU4LjEwM1Y2Ny42OTYzSDU4LjExODZWNjYuMTk2M1pNNTguMTAzIDY2LjE5NjNINTguMDg3NVY2Ny42OTYzSDU4LjEwM1Y2Ni4xOTYzWk01OC4wODc1IDY2LjE5NjNINTguMDcxOVY2Ny42OTYzSDU4LjA4NzVWNjYuMTk2M1pNNTguMDcxOSA2Ni4xOTYzSDU4LjA1NjNWNjcuNjk2M0g1OC4wNzE5VjY2LjE5NjNaTTU4LjA1NjMgNjYuMTk2M0g1OC4wNDA3VjY3LjY5NjNINTguMDU2M1Y2Ni4xOTYzWk01OC4wNDA3IDY2LjE5NjNINTguMDI1VjY3LjY5NjNINTguMDQwN1Y2Ni4xOTYzWk01OC4wMjUgNjYuMTk2M0g1OC4wMDk0VjY3LjY5NjNINTguMDI1VjY2LjE5NjNaTTU4LjAwOTQgNjYuMTk2M0g1Ny45OTM3VjY3LjY5NjNINTguMDA5NFY2Ni4xOTYzWk01Ny45OTM3IDY2LjE5NjNINTcuOTc4VjY3LjY5NjNINTcuOTkzN1Y2Ni4xOTYzWk01Ny45NzggNjYuMTk2M0g1Ny45NjIzVjY3LjY5NjNINTcuOTc4VjY2LjE5NjNaTTU3Ljk2MjMgNjYuMTk2M0g1Ny45NDY2VjY3LjY5NjNINTcuOTYyM1Y2Ni4xOTYzWk01Ny45NDY2IDY2LjE5NjNINTcuOTMwOFY2Ny42OTYzSDU3Ljk0NjZWNjYuMTk2M1pNNTcuOTMwOCA2Ni4xOTYzSDU3LjkxNTFWNjcuNjk2M0g1Ny45MzA4VjY2LjE5NjNaTTU3LjkxNTEgNjYuMTk2M0g1Ny44OTkzVjY3LjY5NjNINTcuOTE1MVY2Ni4xOTYzWk01Ny44OTkzIDY2LjE5NjNINTcuODgzNVY2Ny42OTYzSDU3Ljg5OTNWNjYuMTk2M1pNNTcuODgzNSA2Ni4xOTYzSDU3Ljg2NzdWNjcuNjk2M0g1Ny44ODM1VjY2LjE5NjNaTTU3Ljg2NzcgNjYuMTk2M0g1Ny44NTE4VjY3LjY5NjNINTcuODY3N1Y2Ni4xOTYzWk01Ny44NTE4IDY2LjE5NjNINTcuODM2VjY3LjY5NjNINTcuODUxOFY2Ni4xOTYzWk01Ny44MzYgNjYuMTk2M0g1Ny44MjAxVjY3LjY5NjNINTcuODM2VjY2LjE5NjNaTTU3LjgyMDEgNjYuMTk2M0g1Ny44MDQyVjY3LjY5NjNINTcuODIwMVY2Ni4xOTYzWk01Ny44MDQyIDY2LjE5NjNINTcuNzg4M1Y2Ny42OTYzSDU3LjgwNDJWNjYuMTk2M1pNNTcuNzg4MyA2Ni4xOTYzSDU3Ljc3MjRWNjcuNjk2M0g1Ny43ODgzVjY2LjE5NjNaTTU3Ljc3MjQgNjYuMTk2M0g1Ny43NTY1VjY3LjY5NjNINTcuNzcyNFY2Ni4xOTYzWk01Ny43NTY1IDY2LjE5NjNINTcuNzQwNVY2Ny42OTYzSDU3Ljc1NjVWNjYuMTk2M1pNNTcuNzQwNSA2Ni4xOTYzSDU3LjcyNDZWNjcuNjk2M0g1Ny43NDA1VjY2LjE5NjNaTTU3LjcyNDYgNjYuMTk2M0g1Ny43MDg2VjY3LjY5NjNINTcuNzI0NlY2Ni4xOTYzWk01Ny43MDg2IDY2LjE5NjNINTcuNjkyNlY2Ny42OTYzSDU3LjcwODZWNjYuMTk2M1pNNTcuNjkyNiA2Ni4xOTYzSDU3LjY3NjVWNjcuNjk2M0g1Ny42OTI2VjY2LjE5NjNaTTU3LjY3NjUgNjYuMTk2M0g1Ny42NjA1VjY3LjY5NjNINTcuNjc2NVY2Ni4xOTYzWk01Ny42NjA1IDY2LjE5NjNINTcuNjQ0NFY2Ny42OTYzSDU3LjY2MDVWNjYuMTk2M1pNNTcuNjQ0NCA2Ni4xOTYzSDU3LjYyODRWNjcuNjk2M0g1Ny42NDQ0VjY2LjE5NjNaTTU3LjYyODQgNjYuMTk2M0g1Ny42MTIzVjY3LjY5NjNINTcuNjI4NFY2Ni4xOTYzWk01Ny42MTIzIDY2LjE5NjNINTcuNTk2MVY2Ny42OTYzSDU3LjYxMjNWNjYuMTk2M1pNNTcuNTk2MSA2Ni4xOTYzSDU3LjU4VjY3LjY5NjNINTcuNTk2MVY2Ni4xOTYzWk01Ny41OCA2Ni4xOTYzSDU3LjU2MzlWNjcuNjk2M0g1Ny41OFY2Ni4xOTYzWk01Ny41NjM5IDY2LjE5NjNINTcuNTQ3N1Y2Ny42OTYzSDU3LjU2MzlWNjYuMTk2M1pNNTcuNTQ3NyA2Ni4xOTYzSDU3LjUzMTVWNjcuNjk2M0g1Ny41NDc3VjY2LjE5NjNaTTU3LjUzMTUgNjYuMTk2M0g1Ny41MTUzVjY3LjY5NjNINTcuNTMxNVY2Ni4xOTYzWk01Ny41MTUzIDY2LjE5NjNINTcuNDk5MVY2Ny42OTYzSDU3LjUxNTNWNjYuMTk2M1pNNTcuNDk5MSA2Ni4xOTYzSDU3LjQ4MjlWNjcuNjk2M0g1Ny40OTkxVjY2LjE5NjNaTTU3LjQ4MjkgNjYuMTk2M0g1Ny40NjY2VjY3LjY5NjNINTcuNDgyOVY2Ni4xOTYzWk01Ny40NjY2IDY2LjE5NjNINTcuNDUwM1Y2Ny42OTYzSDU3LjQ2NjZWNjYuMTk2M1pNNTcuNDUwMyA2Ni4xOTYzSDU3LjQzNDFWNjcuNjk2M0g1Ny40NTAzVjY2LjE5NjNaTTU3LjQzNDEgNjYuMTk2M0g1Ny40MTc4VjY3LjY5NjNINTcuNDM0MVY2Ni4xOTYzWk01Ny40MTc4IDY2LjE5NjNINTcuNDAxNFY2Ny42OTYzSDU3LjQxNzhWNjYuMTk2M1pNNTcuNDAxNCA2Ni4xOTYzSDU3LjM4NTFWNjcuNjk2M0g1Ny40MDE0VjY2LjE5NjNaTTU3LjM4NTEgNjYuMTk2M0g1Ny4zNjg3VjY3LjY5NjNINTcuMzg1MVY2Ni4xOTYzWk01Ny4zNjg3IDY2LjE5NjNINTcuMzUyNFY2Ny42OTYzSDU3LjM2ODdWNjYuMTk2M1pNNTcuMzUyNCA2Ni4xOTYzSDU3LjMzNlY2Ny42OTYzSDU3LjM1MjRWNjYuMTk2M1pNNTcuMzM2IDY2LjE5NjNINTcuMzE5NlY2Ny42OTYzSDU3LjMzNlY2Ni4xOTYzWk01Ny4zMTk2IDY2LjE5NjNINTcuMzAzMVY2Ny42OTYzSDU3LjMxOTZWNjYuMTk2M1pNNTcuMzAzMSA2Ni4xOTYzSDU3LjI4NjdWNjcuNjk2M0g1Ny4zMDMxVjY2LjE5NjNaTTU3LjI4NjcgNjYuMTk2M0g1Ny4yNzAyVjY3LjY5NjNINTcuMjg2N1Y2Ni4xOTYzWk01Ny4yNzAyIDY2LjE5NjNINTcuMjUzN1Y2Ny42OTYzSDU3LjI3MDJWNjYuMTk2M1pNNTcuMjUzNyA2Ni4xOTYzSDU3LjIzNzJWNjcuNjk2M0g1Ny4yNTM3VjY2LjE5NjNaTTU3LjIzNzIgNjYuMTk2M0g1Ny4yMjA3VjY3LjY5NjNINTcuMjM3MlY2Ni4xOTYzWk01Ny4yMjA3IDY2LjE5NjNINTcuMjA0MlY2Ny42OTYzSDU3LjIyMDdWNjYuMTk2M1pNNTcuMjA0MiA2Ni4xOTYzSDU3LjE4NzZWNjcuNjk2M0g1Ny4yMDQyVjY2LjE5NjNaTTU3LjE4NzYgNjYuMTk2M0g1Ny4xNzExVjY3LjY5NjNINTcuMTg3NlY2Ni4xOTYzWk01Ny4xNzExIDY2LjE5NjNINTcuMTU0NVY2Ny42OTYzSDU3LjE3MTFWNjYuMTk2M1pNNTcuMTU0NSA2Ni4xOTYzSDU3LjEzNzlWNjcuNjk2M0g1Ny4xNTQ1VjY2LjE5NjNaTTU3LjEzNzkgNjYuMTk2M0g1Ny4xMjEzVjY3LjY5NjNINTcuMTM3OVY2Ni4xOTYzWk01Ny4xMjEzIDY2LjE5NjNINTcuMTA0NlY2Ny42OTYzSDU3LjEyMTNWNjYuMTk2M1pNNTcuMTA0NiA2Ni4xOTYzSDU3LjA4OFY2Ny42OTYzSDU3LjEwNDZWNjYuMTk2M1pNNTcuMDg4IDY2LjE5NjNINTcuMDcxM1Y2Ny42OTYzSDU3LjA4OFY2Ni4xOTYzWk01Ny4wNzEzIDY2LjE5NjNINTcuMDU0NlY2Ny42OTYzSDU3LjA3MTNWNjYuMTk2M1pNNTcuMDU0NiA2Ni4xOTYzSDU3LjAzNzlWNjcuNjk2M0g1Ny4wNTQ2VjY2LjE5NjNaTTU3LjAzNzkgNjYuMTk2M0g1Ny4wMjEyVjY3LjY5NjNINTcuMDM3OVY2Ni4xOTYzWk01Ny4wMjEyIDY2LjE5NjNINTcuMDA0NFY2Ny42OTYzSDU3LjAyMTJWNjYuMTk2M1pNNTcuMDA0NCA2Ni4xOTYzSDU2Ljk4NzdWNjcuNjk2M0g1Ny4wMDQ0VjY2LjE5NjNaTTU2Ljk4NzcgNjYuMTk2M0g1Ni45NzA5VjY3LjY5NjNINTYuOTg3N1Y2Ni4xOTYzWk01Ni45NzA5IDY2LjE5NjNINTYuOTU0MVY2Ny42OTYzSDU2Ljk3MDlWNjYuMTk2M1pNNTYuOTU0MSA2Ni4xOTYzSDU2LjkzNzNWNjcuNjk2M0g1Ni45NTQxVjY2LjE5NjNaTTU2LjkzNzMgNjYuMTk2M0g1Ni45MjA1VjY3LjY5NjNINTYuOTM3M1Y2Ni4xOTYzWk01Ni45MjA1IDY2LjE5NjNINTYuOTAzNlY2Ny42OTYzSDU2LjkyMDVWNjYuMTk2M1pNNTYuOTAzNiA2Ni4xOTYzSDU2Ljg4NjdWNjcuNjk2M0g1Ni45MDM2VjY2LjE5NjNaTTU2Ljg4NjcgNjYuMTk2M0g1Ni44Njk5VjY3LjY5NjNINTYuODg2N1Y2Ni4xOTYzWk01Ni44Njk5IDY2LjE5NjNINTYuODUzVjY3LjY5NjNINTYuODY5OVY2Ni4xOTYzWk01Ni44NTMgNjYuMTk2M0g1Ni44MzZWNjcuNjk2M0g1Ni44NTNWNjYuMTk2M1pNNTYuODM2IDY2LjE5NjNINTYuODE5MVY2Ny42OTYzSDU2LjgzNlY2Ni4xOTYzWk01Ni44MTkxIDY2LjE5NjNINTYuODAyMlY2Ny42OTYzSDU2LjgxOTFWNjYuMTk2M1pNNTYuODAyMiA2Ni4xOTYzSDU2Ljc4NTJWNjcuNjk2M0g1Ni44MDIyVjY2LjE5NjNaTTU2Ljc4NTIgNjYuMTk2M0g1Ni43NjgyVjY3LjY5NjNINTYuNzg1MlY2Ni4xOTYzWk01Ni43NjgyIDY2LjE5NjNINTYuNzUxMlY2Ny42OTYzSDU2Ljc2ODJWNjYuMTk2M1pNNTYuNzUxMiA2Ni4xOTYzSDU2LjczNDJWNjcuNjk2M0g1Ni43NTEyVjY2LjE5NjNaTTU2LjczNDIgNjYuMTk2M0g1Ni43MTcxVjY3LjY5NjNINTYuNzM0MlY2Ni4xOTYzWk01Ni43MTcxIDY2LjE5NjNINTYuNzAwMVY2Ny42OTYzSDU2LjcxNzFWNjYuMTk2M1pNNTYuNzAwMSA2Ni4xOTYzSDU2LjY4M1Y2Ny42OTYzSDU2LjcwMDFWNjYuMTk2M1pNNTYuNjgzIDY2LjE5NjNINTYuNjY1OVY2Ny42OTYzSDU2LjY4M1Y2Ni4xOTYzWk01Ni42NjU5IDY2LjE5NjNINTYuNjQ4OFY2Ny42OTYzSDU2LjY2NTlWNjYuMTk2M1pNNTYuNjQ4OCA2Ni4xOTYzSDU2LjYzMTdWNjcuNjk2M0g1Ni42NDg4VjY2LjE5NjNaTTU2LjYzMTcgNjYuMTk2M0g1Ni42MTQ1VjY3LjY5NjNINTYuNjMxN1Y2Ni4xOTYzWk01Ni42MTQ1IDY2LjE5NjNINTYuNTk3NFY2Ny42OTYzSDU2LjYxNDVWNjYuMTk2M1pNNTYuNTk3NCA2Ni4xOTYzSDU2LjU4MDJWNjcuNjk2M0g1Ni41OTc0VjY2LjE5NjNaTTU2LjU4MDIgNjYuMTk2M0g1Ni41NjNWNjcuNjk2M0g1Ni41ODAyVjY2LjE5NjNaTTU2LjU2MyA2Ni4xOTYzSDU2LjU0NThWNjcuNjk2M0g1Ni41NjNWNjYuMTk2M1pNNTYuNTQ1OCA2Ni4xOTYzSDU2LjUyODVWNjcuNjk2M0g1Ni41NDU4VjY2LjE5NjNaTTU2LjUyODUgNjYuMTk2M0g1Ni41MTEzVjY3LjY5NjNINTYuNTI4NVY2Ni4xOTYzWk01Ni41MTEzIDY2LjE5NjNINTYuNDk0VjY3LjY5NjNINTYuNTExM1Y2Ni4xOTYzWk01Ni40OTQgNjYuMTk2M0g1Ni40NzY3VjY3LjY5NjNINTYuNDk0VjY2LjE5NjNaTTU2LjQ3NjcgNjYuMTk2M0g1Ni40NTk0VjY3LjY5NjNINTYuNDc2N1Y2Ni4xOTYzWk01Ni40NTk0IDY2LjE5NjNINTYuNDQyMVY2Ny42OTYzSDU2LjQ1OTRWNjYuMTk2M1pNNTYuNDQyMSA2Ni4xOTYzSDU2LjQyNDhWNjcuNjk2M0g1Ni40NDIxVjY2LjE5NjNaTTU2LjQyNDggNjYuMTk2M0g1Ni40MDc0VjY3LjY5NjNINTYuNDI0OFY2Ni4xOTYzWk01Ni40MDc0IDY2LjE5NjNINTYuMzlWNjcuNjk2M0g1Ni40MDc0VjY2LjE5NjNaTTU2LjM5IDY2LjE5NjNINTYuMzcyNlY2Ny42OTYzSDU2LjM5VjY2LjE5NjNaTTU2LjM3MjYgNjYuMTk2M0g1Ni4zNTUyVjY3LjY5NjNINTYuMzcyNlY2Ni4xOTYzWk01Ni4zNTUyIDY2LjE5NjNINTYuMzM3OFY2Ny42OTYzSDU2LjM1NTJWNjYuMTk2M1pNNTYuMzM3OCA2Ni4xOTYzSDU2LjMyMDRWNjcuNjk2M0g1Ni4zMzc4VjY2LjE5NjNaTTU2LjMyMDQgNjYuMTk2M0g1Ni4zMDI5VjY3LjY5NjNINTYuMzIwNFY2Ni4xOTYzWk01Ni4zMDI5IDY2LjE5NjNINTYuMjg1NFY2Ny42OTYzSDU2LjMwMjlWNjYuMTk2M1pNNTYuMjg1NCA2Ni4xOTYzSDU2LjI2NzlWNjcuNjk2M0g1Ni4yODU0VjY2LjE5NjNaTTU2LjI2NzkgNjYuMTk2M0g1Ni4yNTA0VjY3LjY5NjNINTYuMjY3OVY2Ni4xOTYzWk01Ni4yNTA0IDY2LjE5NjNINTYuMjMyOVY2Ny42OTYzSDU2LjI1MDRWNjYuMTk2M1pNNTYuMjMyOSA2Ni4xOTYzSDU2LjIxNTNWNjcuNjk2M0g1Ni4yMzI5VjY2LjE5NjNaTTU2LjIxNTMgNjYuMTk2M0g1Ni4xOTc4VjY3LjY5NjNINTYuMjE1M1Y2Ni4xOTYzWk01Ni4xOTc4IDY2LjE5NjNINTYuMTgwMlY2Ny42OTYzSDU2LjE5NzhWNjYuMTk2M1pNNTYuMTgwMiA2Ni4xOTYzSDU2LjE2MjZWNjcuNjk2M0g1Ni4xODAyVjY2LjE5NjNaTTU2LjE2MjYgNjYuMTk2M0g1Ni4xNDVWNjcuNjk2M0g1Ni4xNjI2VjY2LjE5NjNaTTU2LjE0NSA2Ni4xOTYzSDU2LjEyNzNWNjcuNjk2M0g1Ni4xNDVWNjYuMTk2M1pNNTYuMTI3MyA2Ni4xOTYzSDU2LjEwOTdWNjcuNjk2M0g1Ni4xMjczVjY2LjE5NjNaTTU2LjEwOTcgNjYuMTk2M0g1Ni4wOTJWNjcuNjk2M0g1Ni4xMDk3VjY2LjE5NjNaTTU2LjA5MiA2Ni4xOTYzSDU2LjA3NDNWNjcuNjk2M0g1Ni4wOTJWNjYuMTk2M1pNNTYuMDc0MyA2Ni4xOTYzSDU2LjA1NjZWNjcuNjk2M0g1Ni4wNzQzVjY2LjE5NjNaTTU2LjA1NjYgNjYuMTk2M0g1Ni4wMzg5VjY3LjY5NjNINTYuMDU2NlY2Ni4xOTYzWk01Ni4wMzg5IDY2LjE5NjNINTYuMDIxMVY2Ny42OTYzSDU2LjAzODlWNjYuMTk2M1pNNTYuMDIxMSA2Ni4xOTYzSDU2LjAwMzRWNjcuNjk2M0g1Ni4wMjExVjY2LjE5NjNaTTU2LjAwMzQgNjYuMTk2M0g1NS45ODU2VjY3LjY5NjNINTYuMDAzNFY2Ni4xOTYzWk01NS45ODU2IDY2LjE5NjNINTUuOTY3OFY2Ny42OTYzSDU1Ljk4NTZWNjYuMTk2M1pNNTUuOTY3OCA2Ni4xOTYzSDU1Ljk1VjY3LjY5NjNINTUuOTY3OFY2Ni4xOTYzWk01NS45NSA2Ni4xOTYzSDU1LjkzMjJWNjcuNjk2M0g1NS45NVY2Ni4xOTYzWk01NS45MzIyIDY2LjE5NjNINTUuOTE0M1Y2Ny42OTYzSDU1LjkzMjJWNjYuMTk2M1pNNTUuOTE0MyA2Ni4xOTYzSDU1Ljg5NjRWNjcuNjk2M0g1NS45MTQzVjY2LjE5NjNaTTU1Ljg5NjQgNjYuMTk2M0g1NS44Nzg2VjY3LjY5NjNINTUuODk2NFY2Ni4xOTYzWk01NS44Nzg2IDY2LjE5NjNINTUuODYwN1Y2Ny42OTYzSDU1Ljg3ODZWNjYuMTk2M1pNNTUuODYwNyA2Ni4xOTYzSDU1Ljg0MjdWNjcuNjk2M0g1NS44NjA3VjY2LjE5NjNaTTU1Ljg0MjcgNjYuMTk2M0g1NS44MjQ4VjY3LjY5NjNINTUuODQyN1Y2Ni4xOTYzWk01NS44MjQ4IDY2LjE5NjNDNTMuODQ2MSA2Ni4xOTYzIDUyLjE0MjQgNjcuNTkzIDUxLjc1NDMgNjkuNTMzM0w1My4yMjUyIDY5LjgyNzRDNTMuNDczMSA2OC41ODgzIDU0LjU2MTEgNjcuNjk2MyA1NS44MjQ4IDY3LjY5NjNWNjYuMTk2M1pNNTEuNzU0MyA2OS41MzMzTDUxLjc1MiA2OS41NDQ5TDUzLjIyMjkgNjkuODM5MUw1My4yMjUyIDY5LjgyNzRMNTEuNzU0MyA2OS41MzMzWk01MS43NDc3IDY5LjU2ODJMNTEuNzQ1OCA2OS41Nzk5TDUzLjIyNTIgNjkuODI3NEw1My4yMjcyIDY5LjgxNThMNTEuNzQ3NyA2OS41NjgyWk01MS43NDU4IDY5LjU3OTlMNTEuMjY5NiA3Mi40MjU3TDUyLjc0OSA3Mi42NzMzTDUzLjIyNTIgNjkuODI3NEw1MS43NDU4IDY5LjU3OTlaTTUxLjI2OTYgNzIuNDI1N0w1MC45Mjk0IDc0LjQ1ODRMNTIuNDA4OSA3NC43MDZMNTIuNzQ5IDcyLjY3MzNMNTEuMjY5NiA3Mi40MjU3Wk01MC45Mjk0IDc0LjQ1ODRDNTAuNzkyNyA3NS4yNzU1IDUxLjM0NDMgNzYuMDQ4NyA1Mi4xNjEzIDc2LjE4NTRMNTIuNDA4OSA3NC43MDZINTIuNDA4OUw1MC45Mjk0IDc0LjQ1ODRaTTUyLjE2MTMgNzYuMTg1NEM1Mi45Nzg0IDc2LjMyMjIgNTMuNzUxNiA3NS43NzA2IDUzLjg4ODMgNzQuOTUzNkw1Mi40MDg5IDc0LjcwNkg1Mi40MDg5TDUyLjE2MTMgNzYuMTg1NFpNNTMuODg4MyA3NC45NTM2TDU0LjIyODQgNzIuOTIwOEw1Mi43NDkgNzIuNjczM0w1Mi40MDg5IDc0LjcwNkw1My44ODgzIDc0Ljk1MzZaTTU0LjIyODQgNzIuOTIwOEw1NC43MDI1IDcwLjA4NzdMNTMuMjIzMSA2OS44NDAxTDUyLjc0OSA3Mi42NzMzTDU0LjIyODQgNzIuOTIwOFpcIixcbiAgZmlsbDogXCIjM0IzNTUyXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcIm1hc2tcIiwge1xuICBpZDogXCJwYXRoLTctaW5zaWRlLTFfMF8yMzQ0XCIsXG4gIGZpbGw6IFwid2hpdGVcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTc2LjMzOTggMTA3LjA2OEM4MS4zMjY1IDEwNy4wNjggODUuMzY4OSAxMDMuMDI1IDg1LjM2ODkgOTguMDM4N0M4NS4zNjg5IDk3LjczMzkgODUuMzUzOCA5Ny40MzI3IDg1LjMyNDQgOTcuMTM1N0gxMTkuMThDMTE5LjQ1NiA5Ny4xMzU3IDExOS42OCA5Ny4zNTk2IDExOS42OCA5Ny42MzU3VjExNC44MDZDMTE5LjY4IDExNy4wMTUgMTE3Ljg4OSAxMTguODA2IDExNS42OCAxMTguODA2SDM3QzM0Ljc5MDkgMTE4LjgwNiAzMyAxMTcuMDE1IDMzIDExNC44MDZWOTcuNjM1N0MzMyA5Ny4zNTk2IDMzLjIyMzkgOTcuMTM1NyAzMy41IDk3LjEzNTdINjcuMzU1M0M2Ny4zMjU4IDk3LjQzMjcgNjcuMzEwNyA5Ny43MzM5IDY3LjMxMDcgOTguMDM4N0M2Ny4zMTA3IDEwMy4wMjUgNzEuMzUzMiAxMDcuMDY4IDc2LjMzOTggMTA3LjA2OFpcIlxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgZDogXCJNNzYuMzM5OCAxMDcuMDY4QzgxLjMyNjUgMTA3LjA2OCA4NS4zNjg5IDEwMy4wMjUgODUuMzY4OSA5OC4wMzg3Qzg1LjM2ODkgOTcuNzMzOSA4NS4zNTM4IDk3LjQzMjcgODUuMzI0NCA5Ny4xMzU3SDExOS4xOEMxMTkuNDU2IDk3LjEzNTcgMTE5LjY4IDk3LjM1OTYgMTE5LjY4IDk3LjYzNTdWMTE0LjgwNkMxMTkuNjggMTE3LjAxNSAxMTcuODg5IDExOC44MDYgMTE1LjY4IDExOC44MDZIMzdDMzQuNzkwOSAxMTguODA2IDMzIDExNy4wMTUgMzMgMTE0LjgwNlY5Ny42MzU3QzMzIDk3LjM1OTYgMzMuMjIzOSA5Ny4xMzU3IDMzLjUgOTcuMTM1N0g2Ny4zNTUzQzY3LjMyNTggOTcuNDMyNyA2Ny4zMTA3IDk3LjczMzkgNjcuMzEwNyA5OC4wMzg3QzY3LjMxMDcgMTAzLjAyNSA3MS4zNTMyIDEwNy4wNjggNzYuMzM5OCAxMDcuMDY4WlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk04NS4zMjQ0IDk3LjEzNTdWOTUuNjM1N0g4My42NjgxTDgzLjgzMTcgOTcuMjgzOUw4NS4zMjQ0IDk3LjEzNTdaTTY3LjM1NTMgOTcuMTM1N0w2OC44NDc5IDk3LjI4MzlMNjkuMDExNiA5NS42MzU3SDY3LjM1NTNWOTcuMTM1N1pNODMuODY4OSA5OC4wMzg3QzgzLjg2ODkgMTAyLjE5NyA4MC40OTggMTA1LjU2OCA3Ni4zMzk4IDEwNS41NjhWMTA4LjU2OEM4Mi4xNTQ5IDEwOC41NjggODYuODY4OSAxMDMuODU0IDg2Ljg2ODkgOTguMDM4N0g4My44Njg5Wk04My44MzE3IDk3LjI4MzlDODMuODU2MyA5Ny41MzE4IDgzLjg2ODkgOTcuNzgzNSA4My44Njg5IDk4LjAzODdIODYuODY4OUM4Ni44Njg5IDk3LjY4NDMgODYuODUxNCA5Ny4zMzM3IDg2LjgxNyA5Ni45ODc1TDgzLjgzMTcgOTcuMjgzOVpNODUuMzI0NCA5OC42MzU3SDExOS4xOFY5NS42MzU3SDg1LjMyNDRWOTguNjM1N1pNMTE5LjE4IDk4LjYzNTdDMTE4LjYyNyA5OC42MzU3IDExOC4xOCA5OC4xODggMTE4LjE4IDk3LjYzNTdIMTIxLjE4QzEyMS4xOCA5Ni41MzEyIDEyMC4yODQgOTUuNjM1NyAxMTkuMTggOTUuNjM1N1Y5OC42MzU3Wk0xMTguMTggOTcuNjM1N1YxMTQuODA2SDEyMS4xOFY5Ny42MzU3SDExOC4xOFpNMTE4LjE4IDExNC44MDZDMTE4LjE4IDExNi4xODYgMTE3LjA2IDExNy4zMDYgMTE1LjY4IDExNy4zMDZWMTIwLjMwNkMxMTguNzE3IDEyMC4zMDYgMTIxLjE4IDExNy44NDMgMTIxLjE4IDExNC44MDZIMTE4LjE4Wk0xMTUuNjggMTE3LjMwNkgzN1YxMjAuMzA2SDExNS42OFYxMTcuMzA2Wk0zNyAxMTcuMzA2QzM1LjYxOTMgMTE3LjMwNiAzNC41IDExNi4xODYgMzQuNSAxMTQuODA2SDMxLjVDMzEuNSAxMTcuODQzIDMzLjk2MjQgMTIwLjMwNiAzNyAxMjAuMzA2VjExNy4zMDZaTTM0LjUgMTE0LjgwNlY5Ny42MzU3SDMxLjVWMTE0LjgwNkgzNC41Wk0zNC41IDk3LjYzNTdDMzQuNSA5OC4xODggMzQuMDUyMyA5OC42MzU3IDMzLjUgOTguNjM1N1Y5NS42MzU3QzMyLjM5NTQgOTUuNjM1NyAzMS41IDk2LjUzMTIgMzEuNSA5Ny42MzU3SDM0LjVaTTMzLjUgOTguNjM1N0g2Ny4zNTUzVjk1LjYzNTdIMzMuNVY5OC42MzU3Wk02OC44MTA3IDk4LjAzODdDNjguODEwNyA5Ny43ODM1IDY4LjgyMzMgOTcuNTMxOCA2OC44NDc5IDk3LjI4MzlMNjUuODYyNiA5Ni45ODc1QzY1LjgyODIgOTcuMzMzNyA2NS44MTA3IDk3LjY4NDMgNjUuODEwNyA5OC4wMzg3SDY4LjgxMDdaTTc2LjMzOTggMTA1LjU2OEM3Mi4xODE2IDEwNS41NjggNjguODEwNyAxMDIuMTk3IDY4LjgxMDcgOTguMDM4N0g2NS44MTA3QzY1LjgxMDcgMTAzLjg1NCA3MC41MjQ3IDEwOC41NjggNzYuMzM5OCAxMDguNTY4VjEwNS41NjhaXCIsXG4gIGZpbGw6IFwiIzNCMzU1MlwiLFxuICBtYXNrOiBcInVybCgjcGF0aC03LWluc2lkZS0xXzBfMjM0NClcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTc2LjMzOTYgMjRWMzkuMzQ5NVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNOTYuNDI5NiAzMC40NDUzTDg4Ljc1NDkgNDMuNzM4NFwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNTYuMjUgMzAuNDQ1M0w2My45MjQ4IDQzLjczODRcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTcwLjUgMTI1LjVIODcuNVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNOTIuMTk0NCAxMjUuNUg5OC44MDU2XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pKTtcbmV4cG9ydCBkZWZhdWx0IERyYXdlcjsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGNvbnN0IEZpbGVTZWFyY2ggPSAoe1xuICB3aWR0aCA9IDE1MixcbiAgaGVpZ2h0ID0gMTY5XG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gIHdpZHRoOiB3aWR0aCxcbiAgaGVpZ2h0OiBoZWlnaHQsXG4gIHZpZXdCb3g6IFwiMCAwIDE1MiAxNjlcIixcbiAgdmVyc2lvbjogXCIxLjFcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgaWQ6IFwiU3ltYm9sc1wiLFxuICBzdHJva2U6IFwibm9uZVwiLFxuICBzdHJva2VXaWR0aDogXCIxXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgaWQ6IFwiR3JvdXAtMTBcIixcbiAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgyLjAwMDAwMCwgMi4wMDAwMDApXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTc0LDEyNC43NDE1ODkgTDc0LDE2MS43NjI0NTYgQzc0LDE2My41NTM2NDkgNzIuNTQ3OTUwNSwxNjUuMDA1Njk5IDcwLjc1Njc1NjgsMTY1LjAwNTY5OSBDNzAuMTkxNjAxLDE2NS4wMDU2OTkgNjkuNjM2MjU1MSwxNjQuODU4MDE3IDY5LjE0NTc1MjMsMTY0LjU3NzI5IEw2LjY3NDk1MDI2LDEyOC44MjM1ODkgTDYuNjc0OTUwMjYsMTI4LjgyMzU4OSBDMi41NDM5ODQzOSwxMjYuNDU5MzI4IDAsMTIyLjA5NTIzOSAwLDExNy4zNzMwMTkgTDAsNDcuOTI5MzIyOSBDMCw0My4yMDcxMDI0IDIuNTQzOTg0MzksMzguODQzMDE0IDYuNjc0OTUwMjYsMzYuNDc4NzUyNSBMNjcuMzA3MjA4MywxLjc3NzI5OTU2IEM3MS40NDc3MzM3LC0wLjU5MjQzMzE4OCA3Ni41NTIyNjYzLC0wLjU5MjQzMzE4OCA4MC42OTI3OTE3LDEuNzc3Mjk5NTYgTDE0MS4zMjUwNSwzNi40Nzg3NTI1IEMxNDUuNDU2MDE2LDM4Ljg0MzAxNCAxNDgsNDMuMjA3MTAyNCAxNDgsNDcuOTI5MzIyOSBMMTQ4LDExNy4zNzMwMTkgQzE0OCwxMjIuMDk1MjM5IDE0NS40NTYwMTYsMTI2LjQ1OTMyOCAxNDEuMzI1MDUsMTI4LjgyMzU4OSBMOTIuMjgxMjIyNiwxNTYuODkyNjc1XCIsXG4gIGlkOiBcIlBhdGgtQ29weS01XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjNcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gIGlkOiBcIkdyb3VwXCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMjYuMDAwMDAwLCA0NC4wMDAwMDApXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIwLjVcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjcuOTYzMTM5NywzLjU1MjcxMzY4ZS0xNSBDMzMuNDYyNDAxMywzLjU1MjcxMzY4ZS0xNSAzOC4zODA4NTY2LDIuNTIwODcgNDEuNjU1MzY3Miw2LjQ4NDg3NDY1IEw4MS45NDcyNTI3LDYuNDg1OTYzMjEgQzg0LjA3NjIzNjIsNi40ODU5NjMyMSA4NS44MDIxMTgzLDguMjM1NTQxNjYgODUuODAyMTE4MywxMC4zOTM3NTYxIEw4NS44MDIsMjguMzI1IEw4OC4yNTE1MzA4LDI4LjMyNTI4MjMgTDg4LjI1MSwzMi40MjkgTDkzLDMyLjQyOTgxNjEgTDkzLDU5Ljc0NzI5MzcgTDg1Ljg0NTUyNDYsNjcgTDU4Ljg5ODAzNTksNjcgTDU4Ljg5OCw2Mi4xODYgTDU0Ljg0OTA5NDEsNjIuMTg2MzM0MyBMNTQuODQ5LDU5LjcwMyBMMjMuNTY0NDM0Miw1OS43MDMyOTE0IEMyMS40MzU0NTA4LDU5LjcwMzI5MTQgMTkuNzA5NTY4Nyw1Ny45NTM3MTI5IDE5LjcwOTU2ODcsNTUuNzk1NDk4NSBMMTkuNzA5MzQ1NCwzNC4xNDUyOTA1IEMxOC42MDgyNzk4LDMzLjU2MjE5NCAxNy41NzQ2ODYsMzIuODY2MDczMyAxNi42MjM1NDU1LDMyLjA3MjExNTggTDE0LjYxODI1OTgsMzQuMTAzMjUyIEwxNC44NjIwNDA2LDM0LjM1MDY1ODUgQzE1LjgwMTEwNTMsMzUuMzAyNjE2NiAxNS44MDExMDUzLDM2Ljg0NjA0NTYgMTQuODYyMDQwNiwzNy43OTgwMDM3IEw3LjcyMTQyMDY5LDQ1LjAzNjY2NDMgQzYuNzgyMzU1OTUsNDUuOTg4NjIyNCA1LjI1OTgzMTE5LDQ1Ljk4ODYyMjQgNC4zMjA3NjY0NSw0NS4wMzY2NjQzIEwxLjcwNDI5ODU1LDQyLjM4NDI3MjMgQzAuNzY1MjMzODE1LDQxLjQzMjMxNDIgMC43NjUyMzM4MTUsMzkuODg4ODg1MiAxLjcwNDI5ODU1LDM4LjkzNjkyNzEgTDguODQ0OTE4NDQsMzEuNjk4MjY2NSBDOS43ODM5ODMxNywzMC43NDYzMDg0IDExLjMwNjUwNzksMzAuNzQ2MzA4NCAxMi4yNDU1NzI3LDMxLjY5ODI2NjUgTDEyLjQ4ODI1OTgsMzEuOTQ0MjUyIEwxNC40NjcyMDkyLDI5Ljk0MDM5OTIgQzExLjc1NDA5MTYsMjYuNzY2MzIyIDEwLjExMjM5MywyMi42MjU0MzE2IDEwLjExMjM5MywxOC4wOTU4Mzc0IEMxMC4xMTIzOTMsOC4xMDE3ODIzNSAxOC4xMDQ0NDQ2LDMuNTUyNzEzNjhlLTE1IDI3Ljk2MzEzOTcsMy41NTI3MTM2OGUtMTUgWiBNOTEuNjg4Mzg2LDMzLjc1OTQzODUgTDYwLjIwOTY0OTksMzMuNzU5NDM4NSBMNjAuMjA5NjQ5OSw2NS42NzAzNzc1IEw4NC44NCw2NS42NyBMODQuODQwMjY4LDU4LjcyODIzNDkgTDkxLjY4OCw1OC43MjggTDkxLjY4ODM4NiwzMy43NTk0Mzg1IFogTTkxLjUzOCw1OS4zNDggTDg1LjQ1MjM1NDUsNTkuMzQ4NzI1NCBMODUuNDUyLDY1LjUxOCBMOTEuNTM4LDU5LjM0OCBaIE04Ny42Mzk0NDQyLDI4Ljk0NTc3MjggTDU1LjQ2MTE4MDcsMjguOTQ1NzcyOCBMNTUuNDYxMTgwNyw2MS41NjU4NDM4IEw1OC44OTgsNjEuNTY1IEw1OC44OTgwMzU5LDMyLjQyOTgxNjEgTDg3LjYzOSwzMi40MjkgTDg3LjYzOTQ0NDIsMjguOTQ1NzcyOCBaIE04NC40OSwxNS4xNjMgTDQ1LjU4MDczMTksMTUuMTYzNTkzNSBDNDUuNzM0MTMyOSwxNi4xMTc5OTgyIDQ1LjgxMzg4NjQsMTcuMDk3NDc2MiA0NS44MTM4ODY0LDE4LjA5NTgzNzQgQzQ1LjgxMzg4NjQsMjguMDg5ODkyNCAzNy44MjE4MzQ5LDM2LjE5MTY3NDcgMjcuOTYzMTM5NywzNi4xOTE2NzQ3IEMyNS41MDA3OTExLDM2LjE5MTY3NDcgMjMuMTU0ODg3NiwzNS42ODYyNjgzIDIxLjAyMDg2ODIsMzQuNzcyMjA0NiBMMjEuMDIxMTgyNyw1NS43OTU0OTg1IEMyMS4wMjExODI3LDU3LjIxOTM4MjcgMjIuMTU5ODM1Miw1OC4zNzM2Njg5IDIzLjU2NDQzNDIsNTguMzczNjY4OSBMNTQuODQ5LDU4LjM3MyBMNTQuODQ5MDk0MSwyOC4zMjUyODIzIEw4NC40OSwyOC4zMjUgTDg0LjQ5LDE1LjE2MyBaIE03OC40OTkyNDk1LDQ4LjQ3MjMwNTYgQzc4LjY2ODI3MjUsNDguNDcyMzA1NiA3OC44MDUyOTI3LDQ4LjYxMTIwNzEgNzguODA1MjkyNyw0OC43ODI1NTA4IEM3OC44MDUyOTI3LDQ4Ljk1Mzg5NDUgNzguNjY4MjcyNSw0OS4wOTI3OTYxIDc4LjQ5OTI0OTUsNDkuMDkyNzk2MSBMNjcuMDEyNTE3NCw0OS4wOTI3OTYxIEM2Ni44NDM0OTQ0LDQ5LjA5Mjc5NjEgNjYuNzA2NDc0Miw0OC45NTM4OTQ1IDY2LjcwNjQ3NDIsNDguNzgyNTUwOCBDNjYuNzA2NDc0Miw0OC42MTEyMDcxIDY2Ljg0MzQ5NDQsNDguNDcyMzA1NiA2Ny4wMTI1MTc0LDQ4LjQ3MjMwNTYgTDc4LjQ5OTI0OTUsNDguNDcyMzA1NiBaIE05Ljc3MjM2OTU5LDMyLjYzODQ1MTYgTDIuNjMxNzQ5NzEsMzkuODc3MTEyMSBDMi4yMDQ5MDIxLDQwLjMwOTgyMDMgMi4yMDQ5MDIxLDQxLjAxMTM3OSAyLjYzMTc0OTcxLDQxLjQ0NDA4NzIgTDUuMjQ4MjE3NjEsNDQuMDk2NDc5MiBDNS42NzUwNjUyMiw0NC41MjkxODc0IDYuMzY3MTIxOTMsNDQuNTI5MTg3NCA2Ljc5Mzk2OTU0LDQ0LjA5NjQ3OTIgTDEzLjkzNDU4OTQsMzYuODU3ODE4NiBDMTQuMzYxNDM3LDM2LjQyNTExMDQgMTQuMzYxNDM3LDM1LjcyMzU1MTggMTMuOTM0NTg5NCwzNS4yOTA4NDM1IEwxMS4zMTgxMjE1LDMyLjYzODQ1MTYgQzEwLjg5MTI3MzksMzIuMjA1NzQzMyAxMC4xOTkyMTcyLDMyLjIwNTc0MzMgOS43NzIzNjk1OSwzMi42Mzg0NTE2IFogTTg1LjU0Nzc2NDQsNDIuNzk3MDg3OCBDODUuNzE2Nzg3NCw0Mi43OTcwODc4IDg1Ljg1MzgwNzYsNDIuOTM1OTg5MyA4NS44NTM4MDc2LDQzLjEwNzMzMyBDODUuODUzODA3Niw0My4yNzg2NzY3IDg1LjcxNjc4NzQsNDMuNDE3NTc4MyA4NS41NDc3NjQ0LDQzLjQxNzU3ODMgTDY3LjE2ODk5MzEsNDMuNDE3NTc4MyBDNjYuOTk5OTcwMSw0My40MTc1NzgzIDY2Ljg2Mjk0OTksNDMuMjc4Njc2NyA2Ni44NjI5NDk5LDQzLjEwNzMzMyBDNjYuODYyOTQ5OSw0Mi45MzU5ODkzIDY2Ljk5OTk3MDEsNDIuNzk3MDg3OCA2Ny4xNjg5OTMxLDQyLjc5NzA4NzggTDg1LjU0Nzc2NDQsNDIuNzk3MDg3OCBaIE0yNy45NjMxMzk3LDEuMzI5NjIyNDYgQzE4LjgyODgyOSwxLjMyOTYyMjQ2IDExLjQyNDAwNyw4LjgzNjExMjU2IDExLjQyNDAwNywxOC4wOTU4Mzc0IEMxMS40MjQwMDcsMjcuMzU1NTYyMiAxOC44Mjg4MjksMzQuODYyMDUyMyAyNy45NjMxMzk3LDM0Ljg2MjA1MjMgQzM3LjA5NzQ1MDUsMzQuODYyMDUyMyA0NC41MDIyNzI0LDI3LjM1NTU2MjIgNDQuNTAyMjcyNCwxOC4wOTU4Mzc0IEM0NC41MDIyNzI0LDguODM2MTEyNTYgMzcuMDk3NDUwNSwxLjMyOTYyMjQ2IDI3Ljk2MzEzOTcsMS4zMjk2MjI0NiBaIE0xNC44NzY0NDIxLDMwLjQwMjk2NTYgTDEyLjkyMTI1OTgsMzIuMzgzMjUyIEwxNC4xODUyNTk4LDMzLjY2NTI1MiBMMTYuMTU1NTI5NywzMS42Njc2MDM3IEMxNS43MDg3MDU1LDMxLjI2NzgwNjQgMTUuMjgxNzc3LDMwLjg0NTY4NjUgMTQuODc2NDQyMSwzMC40MDI5NjU2IFogTTI3Ljk2MzEzOTcsNC40MDgyOTMgQzM1LjQyMDE3NjcsNC40MDgyOTMgNDEuNDY1Mjk5NSwxMC41MzY0MTUzIDQxLjQ2NTI5OTUsMTguMDk1ODM3NCBDNDEuNDY1Mjk5NSwyNS42NTUyNTk0IDM1LjQyMDE3NjcsMzEuNzgzMzgxNyAyNy45NjMxMzk3LDMxLjc4MzM4MTcgQzIwLjUwNjEwMjgsMzEuNzgzMzgxNyAxNC40NjA5OCwyNS42NTUyNTk0IDE0LjQ2MDk4LDE4LjA5NTgzNzQgQzE0LjQ2MDk4LDEwLjUzNjQxNTMgMjAuNTA2MTAyOCw0LjQwODI5MyAyNy45NjMxMzk3LDQuNDA4MjkzIFogTTI3Ljk2MzEzOTcsNS4wMjg3ODM0OCBDMjAuODQ0MTQ4OSw1LjAyODc4MzQ4IDE1LjA3MzA2NjUsMTAuODc5MTAyOCAxNS4wNzMwNjY1LDE4LjA5NTgzNzQgQzE1LjA3MzA2NjUsMjUuMzEyNTcyIDIwLjg0NDE0ODksMzEuMTYyODkxMyAyNy45NjMxMzk3LDMxLjE2Mjg5MTMgQzM1LjA4MjEzMDYsMzEuMTYyODkxMyA0MC44NTMyMTMsMjUuMzEyNTcyIDQwLjg1MzIxMywxOC4wOTU4Mzc0IEM0MC44NTMyMTMsMTAuODc5MTAyOCAzNS4wODIxMzA2LDUuMDI4NzgzNDggMjcuOTYzMTM5Nyw1LjAyODc4MzQ4IFogTTI3Ljk2MzEzOTcsOC40NjIwMjAwMSBDMjguMTMyMTYyOCw4LjQ2MjAyMDAxIDI4LjI2OTE4Myw4LjYwMDkyMTUzIDI4LjI2OTE4Myw4Ljc3MjI2NTI1IEMyOC4yNjkxODMsOC45NDM2MDg5NiAyOC4xMzIxNjI4LDkuMDgyNTEwNDkgMjcuOTYzMTM5Nyw5LjA4MjUxMDQ5IEMyMy4wNTI2Mzc5LDkuMDgyNTEwNDkgMTkuMDcxODg5NywxMy4xMTc5MTQ0IDE5LjA3MTg4OTcsMTguMDk1ODM3NCBDMTkuMDcxODg5NywxOC4yNjcxODExIDE4LjkzNDg2OTQsMTguNDA2MDgyNiAxOC43NjU4NDY0LDE4LjQwNjA4MjYgQzE4LjU5NjgyMzQsMTguNDA2MDgyNiAxOC40NTk4MDMxLDE4LjI2NzE4MTEgMTguNDU5ODAzMSwxOC4wOTU4Mzc0IEMxOC40NTk4MDMxLDEyLjc3NTIyNyAyMi43MTQ1OTE5LDguNDYyMDIwMDEgMjcuOTYzMTM5Nyw4LjQ2MjAyMDAxIFogTTQyLjY1NDk0NTQsNy44MTQ2ODg3NiBDNDQuMDEyNTYwOCw5LjgwNDU5MTEgNDQuOTg2OTE5OSwxMi4wODM3MjM3IDQ1LjQ2OTg0ODIsMTQuNTQyNDI2NiBMODQuNDksMTQuNTQyIEw4NC40OTA1MDQzLDEwLjM5Mzc1NjEgQzg0LjQ5MDUwNDMsOC45Njk4NzE4NyA4My4zNTE4NTE4LDcuODE1NTg1NjcgODEuOTQ3MjUyNyw3LjgxNTU4NTY3IEw0Mi42NTQ5NDU0LDcuODE0Njg4NzYgWlwiLFxuICBpZDogXCJDb21iaW5lZC1TaGFwZVwiXG59KSkpKSk7XG5leHBvcnQgZGVmYXVsdCBGaWxlU2VhcmNoOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgY29uc3QgRmxhZ0luQ29nID0gKHtcbiAgd2lkdGggPSAxNTIsXG4gIGhlaWdodCA9IDE2OVxufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB3aWR0aDogd2lkdGgsXG4gIGhlaWdodDogaGVpZ2h0LFxuICB2aWV3Qm94OiBcIjAgMCAxNTIgMTY5XCIsXG4gIHZlcnNpb246IFwiMS4xXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gIGlkOiBcIlN5bWJvbHNcIixcbiAgc3Ryb2tlOiBcIm5vbmVcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMVwiLFxuICBmaWxsOiBcIm5vbmVcIixcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICBpZDogXCJHcm91cFwiLFxuICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDIuMDAwMDAwLCAyLjAwMDAwMClcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiM1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk03NCwxMDIuMDYwNjExIEw3NCwxNTguNzIzNTY3IEM3NCwxNjIuMDM3Mjc1IDcxLjMxMzcwODUsMTY0LjcyMzU2NyA2OCwxNjQuNzIzNTY3IEM2Ni45NDUyMTE4LDE2NC43MjM1NjcgNjUuOTA5MDYyNywxNjQuNDQ1NTA0IDY0Ljk5NTk5NiwxNjMuOTE3NDA2IEw2LjY3NDk1MDI2LDEzMC4xODU3NzQgTDYuNjc0OTUwMjYsMTMwLjE4NTc3NCBDMi41NDM5ODQzOSwxMjcuNzk2NTEyIDEuNDIxMDg1NDdlLTE0LDEyMy4zODYyNzggMS40MjEwODU0N2UtMTQsMTE4LjYxNDEyNSBMMS40MjEwODU0N2UtMTQsNDguNDM2MTI5IEMxLjQyMTA4NTQ3ZS0xNCw0My42NjM5NzU2IDIuNTQzOTg0MzksMzkuMjUzNzQxMiA2LjY3NDk1MDI2LDM2Ljg2NDQ3OTkgTDY3LjMwNzIwODMsMS43OTYwOTI3OCBDNzEuNDQ3NzMzNywtMC41OTg2OTc1OTUgNzYuNTUyMjY2MywtMC41OTg2OTc1OTUgODAuNjkyNzkxNywxLjc5NjA5Mjc4IEwxNDEuMzI1MDUsMzYuODY0NDc5OSBDMTQ1LjQ1NjAxNiwzOS4yNTM3NDEyIDE0OCw0My42NjM5NzU2IDE0OCw0OC40MzYxMjkgTDE0OCwxMTguNjE0MTI1IEMxNDgsMTIzLjM4NjI3OCAxNDUuNDU2MDE2LDEyNy43OTY1MTIgMTQxLjMyNTA1LDEzMC4xODU3NzQgTDkyLjI4MTIyMjYsMTU4LjU1MTY2M1wiLFxuICBpZDogXCJQYXRoLUNvcHktM1wiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk01MSw0OSBMMTE5LDQ5IEMxMjAuMTA0NTY5LDQ5IDEyMSw0OS44OTU0MzA1IDEyMSw1MSBMMTIxLDkyIEMxMjEsOTMuMTA0NTY5NSAxMjAuMTA0NTY5LDk0IDExOSw5NCBMNTEsOTQgTDUxLDk0XCIsXG4gIGlkOiBcIlBhdGhcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgeDE6IFwiNTAuNVwiLFxuICB5MTogXCIxMTcuNjY0NjY2XCIsXG4gIHgyOiBcIjUwLjVcIixcbiAgeTI6IFwiNDZcIixcbiAgaWQ6IFwiTGluZS0yXCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTkwLjIzOTQzNSw4MS43NzgyNzEyIEM5MC4wNjMxMjY5LDgyLjE2NzY0NDkgODkuODc1ODQ0Nyw4Mi41NTEyMjU5IDg5LjY3Nzk2NzEsODIuOTI4NjM5NCBMODIuMjk4OTY3Miw4Mi45Mjg2MzkzIEw4MS44OTM3NzI4LDgyLjA2NjkyMzYgTDc4LjExNzI3MTYsODMuOTg3NTY0NSBMNzYuNTU5MTYzMiw3OS44Mzk0ODQ4IEM3Ni4zOTYxNjIzLDc5LjEzMzIzNDEgNzYuNTczOTEyOSw3OC4zOTY1NTEgNzcuMDM5MzIyMiw3Ny44NDEzNzUyIEw3OS44NzIxMDM3LDc0LjQ2MjIxNjIgQzc5LjgyNDk5MTksNzMuODc0Njg1NyA3OS44MDA5ODIzLDczLjI4MDgyMDIgNzkuODAwOTgyMyw3Mi42ODE0ODM4IEM3OS44MDA5ODIzLDY3Ljc5MjczNDQgODEuMzk2MzU3Myw2My4yNjc0ODU1IDg0LjEwNzg0Nyw1OS41NzU2MDU4IEM4NC41MzYyODcxLDU5LjAwOTgzNTMgODQuOTk3ODEzLDU4LjczNzA0NTMgODUuNDA5NTMyNSw1OC42MDg2MzgyIEM4Ni4wOTMwNTA3LDU4LjM5NTQ2MjQgODYuNzQxOTkwNCw1OC41MjY0NjY0IDg3LjI3NTE0MjcsNTguOTEzMTExNyBDOTAuNjEzODEsNjMuMjc2MTU2NyA5Mi4xOTkwMTc3LDY3Ljc5OTE1MTIgOTIuMTk5MDE3Nyw3Mi42ODE0ODM4IEM5Mi4xOTkwMTc3LDczLjI4MDgyMDIgOTIuMTc1MDA4MSw3My44NzQ2ODU3IDkyLjEyNzg5NjMsNzQuNDYyMjE2MiBMOTQuOTYwNjc3OCw3Ny44NDEzNzUyIEM5NS4zODA2ODE5LDc4LjM0MjM4ODIgOTUuNTY2NDE3Miw3OC45OTEyMjA0IDk1LjQ3ODg2MzQsNzkuNjMyMTA3NiBMOTQuOTMwOTk0NSw4My42NDI0NjY0IEw5MC4yMzk0MzUsODEuNzc4MjcxMiBaXCIsXG4gIGlkOiBcIlBhdGhcIixcbiAgZmlsbDogXCIjRkZGRkZGXCIsXG4gIGZpbGxPcGFjaXR5OiAwXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTguNDQ1MDY2OCwxMjQuMzM4MTUgQzIwLjM4ODA3NDksMTIyLjQ5NjU2MiAyMi40MjE3MzYsMTIwLjc0OTY3MSAyNC41Mzg2NjAyLDExOS4xMDQ4NjcgTDIyLjM0OTY3NCwxMTUuNzM0MTI0IEMyMS43NDgwODIzLDExNC44MDc3NTQgMjIuMDExMzY3MSwxMTMuNTY5MDk3IDIyLjkzNzczNzEsMTEyLjk2NzUwNSBMMzEuMzI0NDQyNywxMDcuNTIxMTE1IEMzMi4yNTA4MTI3LDEwNi45MTk1MjMgMzMuNDg5NDcwMywxMDcuMTgyODA4IDM0LjA5MTA2MTksMTA4LjEwOTE3OCBMMzYuMjg5MzIwNSwxMTEuNDk0MTk5IEM0My45MzI1ODQzLDEwNy40Mjk3NjkgNTIuMjk5NzI0NywxMDQuNTQ2NjkzIDYxLjE0NzE5ODIsMTAzLjA4ODUxN1wiLFxuICBpZDogXCJQYXRoXCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTc0LjUsMTAyIEM4Ni4yMzQzODg2LDEwMiA5Ny4zODk1NTksMTA0LjQ3OTkyOCAxMDcuNDY5OTk3LDEwOC45NDQyNzEgTDEwOS41MjI3NTksMTA1LjM4ODc4NCBDMTEwLjA3NTA0MywxMDQuNDMyMTk5IDExMS4yOTgyMjQsMTA0LjEwNDQ0OSAxMTIuMjU0ODA5LDEwNC42NTY3MzMgTDEyNS4yNDUxOTEsMTEyLjE1NjczMyBDMTI2LjIwMTc3NiwxMTIuNzA5MDE4IDEyNi41Mjk1MjYsMTEzLjkzMjE5OSAxMjUuOTc3MjQxLDExNC44ODg3ODQgTDEyMy44MjU0NTksMTE4LjYxNTc4MSBDMTI2LjA5NzE5MiwxMjAuMzQ1NDI2IDEyOC4yNzUzNTQsMTIyLjE5MTY1NSAxMzAuMzUxMDI1LDEyNC4xNDU1NDZcIixcbiAgaWQ6IFwiUGF0aFwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICB4MTogXCI4Mi41XCIsXG4gIHkxOiBcIjE5LjVcIixcbiAgeDI6IFwiODIuNVwiLFxuICB5MjogXCIzMi41Mjc4Nzg0XCIsXG4gIGlkOiBcIkxpbmUtNlwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICB4MTogXCI4Mi41XCIsXG4gIHkxOiBcIjE5LjVcIixcbiAgeDI6IFwiODIuNVwiLFxuICB5MjogXCIzMi41Mjc4Nzg0XCIsXG4gIGlkOiBcIkxpbmUtNi1Db3B5XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4Mi41MDAwMDAsIDI2LjAwMDAwMCkgcm90YXRlKC0yNzAuMDAwMDAwKSB0cmFuc2xhdGUoLTgyLjUwMDAwMCwgLTI2LjAwMDAwMCkgXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICB4MTogXCIzMC41XCIsXG4gIHkxOiBcIjQwLjNcIixcbiAgeDI6IFwiMzAuNVwiLFxuICB5MjogXCI0OC4xMTY3MjcxXCIsXG4gIGlkOiBcIkxpbmUtNlwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICB4MTogXCIzMC40OTE2MzY1XCIsXG4gIHkxOiBcIjQwLjI5MTYzNjVcIixcbiAgeDI6IFwiMzAuNDkxNjM2NVwiLFxuICB5MjogXCI0OC4xMDgzNjM1XCIsXG4gIGlkOiBcIkxpbmUtNi1Db3B5XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgzMC40OTE2MzYsIDQ0LjIwMDAwMCkgcm90YXRlKC0yNzAuMDAwMDAwKSB0cmFuc2xhdGUoLTMwLjQ5MTYzNiwgLTQ0LjIwMDAwMCkgXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICB4MTogXCIxNy41XCIsXG4gIHkxOiBcIjc4LjQzMzMzMzNcIixcbiAgeDI6IFwiMTcuNVwiLFxuICB5MjogXCI4OS43MjQxNjEzXCIsXG4gIGlkOiBcIkxpbmUtNlwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICB4MTogXCIxNy40ODc5MTkzXCIsXG4gIHkxOiBcIjc4LjQyMTI1MjdcIixcbiAgeDI6IFwiMTcuNDg3OTE5M1wiLFxuICB5MjogXCI4OS43MTIwODA3XCIsXG4gIGlkOiBcIkxpbmUtNi1Db3B5XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxNy40ODc5MTksIDg0LjA2NjY2Nykgcm90YXRlKC0yNzAuMDAwMDAwKSB0cmFuc2xhdGUoLTE3LjQ4NzkxOSwgLTg0LjA2NjY2NykgXCJcbn0pKSkpO1xuZXhwb3J0IGRlZmF1bHQgRmxhZ0luQ29nOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgY29uc3QgRm9sZGVyID0gKHtcbiAgd2lkdGggPSAxNTIsXG4gIGhlaWdodCA9IDE1MlxufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB3aWR0aDogd2lkdGgsXG4gIGhlaWdodDogaGVpZ2h0LFxuICB2aWV3Qm94OiBcIjAgMCAxNTIgMTUyXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gIGN4OiBcIjc2XCIsXG4gIGN5OiBcIjc2XCIsXG4gIHI6IFwiNzZcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJtYXNrXCIsIHtcbiAgaWQ6IFwicGF0aC0yLWluc2lkZS0xXzBfMjM4OVwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk00Ny44MDk1IDM1QzQ1LjYwMDQgMzUgNDMuODA5NSAzNi43OTA5IDQzLjgwOTUgMzlWNDQuOTA0OEgzNy45MDQ4QzM1LjY5NTYgNDQuOTA0OCAzMy45MDQ4IDQ2LjY5NTYgMzMuOTA0OCA0OC45MDQ4VjkzLjczMDJDMzMuOTA0OCA5NS45MzkzIDM1LjY5NTYgOTcuNzMwMiAzNy45MDQ4IDk3LjczMDJIMTA3LjQ5MkMxMDkuNzAxIDk3LjczMDIgMTExLjQ5MiA5NS45MzkzIDExMS40OTIgOTMuNzMwMlY0OC45MDQ4QzExMS40OTIgNDYuNjk1NiAxMDkuNzAxIDQ0LjkwNDggMTA3LjQ5MiA0NC45MDQ4SDgwLjEyN1YzOUM4MC4xMjcgMzYuNzkwOSA3OC4zMzYyIDM1IDc2LjEyNyAzNUg0Ny44MDk1WlwiXG59KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk00Ny44MDk1IDM1QzQ1LjYwMDQgMzUgNDMuODA5NSAzNi43OTA5IDQzLjgwOTUgMzlWNDQuOTA0OEgzNy45MDQ4QzM1LjY5NTYgNDQuOTA0OCAzMy45MDQ4IDQ2LjY5NTYgMzMuOTA0OCA0OC45MDQ4VjkzLjczMDJDMzMuOTA0OCA5NS45MzkzIDM1LjY5NTYgOTcuNzMwMiAzNy45MDQ4IDk3LjczMDJIMTA3LjQ5MkMxMDkuNzAxIDk3LjczMDIgMTExLjQ5MiA5NS45MzkzIDExMS40OTIgOTMuNzMwMlY0OC45MDQ4QzExMS40OTIgNDYuNjk1NiAxMDkuNzAxIDQ0LjkwNDggMTA3LjQ5MiA0NC45MDQ4SDgwLjEyN1YzOUM4MC4xMjcgMzYuNzkwOSA3OC4zMzYyIDM1IDc2LjEyNyAzNUg0Ny44MDk1WlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk00My44MDk1IDQ0LjkwNDhWNDYuNDA0OEg0NS4zMDk1VjQ0LjkwNDhINDMuODA5NVpNODAuMTI3IDQ0LjkwNDhINzguNjI3VjQ2LjQwNDhIODAuMTI3VjQ0LjkwNDhaTTQ1LjMwOTUgMzlDNDUuMzA5NSAzNy42MTkzIDQ2LjQyODggMzYuNSA0Ny44MDk1IDM2LjVWMzMuNUM0NC43NzIgMzMuNSA0Mi4zMDk1IDM1Ljk2MjQgNDIuMzA5NSAzOUg0NS4zMDk1Wk00NS4zMDk1IDQ0LjkwNDhWMzlINDIuMzA5NVY0NC45MDQ4SDQ1LjMwOTVaTTM3LjkwNDggNDYuNDA0OEg0My44MDk1VjQzLjQwNDhIMzcuOTA0OFY0Ni40MDQ4Wk0zNS40MDQ4IDQ4LjkwNDhDMzUuNDA0OCA0Ny41MjQgMzYuNTI0MSA0Ni40MDQ4IDM3LjkwNDggNDYuNDA0OFY0My40MDQ4QzM0Ljg2NzIgNDMuNDA0OCAzMi40MDQ4IDQ1Ljg2NzIgMzIuNDA0OCA0OC45MDQ4SDM1LjQwNDhaTTM1LjQwNDggOTMuNzMwMlY0OC45MDQ4SDMyLjQwNDhWOTMuNzMwMkgzNS40MDQ4Wk0zNy45MDQ4IDk2LjIzMDJDMzYuNTI0MSA5Ni4yMzAyIDM1LjQwNDggOTUuMTEwOSAzNS40MDQ4IDkzLjczMDJIMzIuNDA0OEMzMi40MDQ4IDk2Ljc2NzcgMzQuODY3MiA5OS4yMzAyIDM3LjkwNDggOTkuMjMwMlY5Ni4yMzAyWk0xMDcuNDkyIDk2LjIzMDJIMzcuOTA0OFY5OS4yMzAySDEwNy40OTJWOTYuMjMwMlpNMTA5Ljk5MiA5My43MzAyQzEwOS45OTIgOTUuMTEwOSAxMDguODczIDk2LjIzMDIgMTA3LjQ5MiA5Ni4yMzAyVjk5LjIzMDJDMTEwLjUzIDk5LjIzMDIgMTEyLjk5MiA5Ni43Njc3IDExMi45OTIgOTMuNzMwMkgxMDkuOTkyWk0xMDkuOTkyIDQ4LjkwNDhWOTMuNzMwMkgxMTIuOTkyVjQ4LjkwNDhIMTA5Ljk5MlpNMTA3LjQ5MiA0Ni40MDQ4QzEwOC44NzMgNDYuNDA0OCAxMDkuOTkyIDQ3LjUyNCAxMDkuOTkyIDQ4LjkwNDhIMTEyLjk5MkMxMTIuOTkyIDQ1Ljg2NzIgMTEwLjUzIDQzLjQwNDggMTA3LjQ5MiA0My40MDQ4VjQ2LjQwNDhaTTgwLjEyNyA0Ni40MDQ4SDEwNy40OTJWNDMuNDA0OEg4MC4xMjdWNDYuNDA0OFpNNzguNjI3IDM5VjQ0LjkwNDhIODEuNjI3VjM5SDc4LjYyN1pNNzYuMTI3IDM2LjVDNzcuNTA3NyAzNi41IDc4LjYyNyAzNy42MTkzIDc4LjYyNyAzOUg4MS42MjdDODEuNjI3IDM1Ljk2MjQgNzkuMTY0NiAzMy41IDc2LjEyNyAzMy41VjM2LjVaTTQ3LjgwOTUgMzYuNUg3Ni4xMjdWMzMuNUg0Ny44MDk1VjM2LjVaXCIsXG4gIGZpbGw6IFwiIzNCMzU1MlwiLFxuICBtYXNrOiBcInVybCgjcGF0aC0yLWluc2lkZS0xXzBfMjM4OSlcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk00OS4wOTM3IDM4LjMwMThDNDcuOTg5MiAzOC4zMDE4IDQ3LjA5MzcgMzkuMTk3MiA0Ny4wOTM3IDQwLjMwMThWNDguMTg5SDM5LjIwNjVDMzguMTAyIDQ4LjE4OSAzNy4yMDY1IDQ5LjA4NDQgMzcuMjA2NSA1MC4xODlWOTQuNTE4NkMzNy4yMDY1IDk1LjYyMzEgMzguMTAyIDk2LjUxODYgMzkuMjA2NSA5Ni41MTg2SDEwNi4xOTFDMTA3LjI5NSA5Ni41MTg2IDEwOC4xOTEgOTUuNjIzMSAxMDguMTkxIDk0LjUxODZWNTAuMTg5QzEwOC4xOTEgNDkuMDg0NCAxMDcuMjk1IDQ4LjE4OSAxMDYuMTkxIDQ4LjE4OUg3Ny4wMTg4VjQwLjMwMThDNzcuMDE4OCAzOS4xOTcyIDc2LjEyMzMgMzguMzAxOCA3NS4wMTg4IDM4LjMwMThINDkuMDkzN1pcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMDVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiMTA0LjA0MVwiLFxuICBjeTogXCI1My45NjE2XCIsXG4gIHI6IFwiMTUuNjU5OFwiLFxuICBmaWxsOiBcIiMzMDQwRDZcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTI1LjM1NjIgNTguNDE5NkMyNS4wOTI2IDU2LjQ2OTUgMjYuNjA5IDU0LjczNDQgMjguNTc2OSA1NC43MzQ0SDEyMy40MjNDMTI1LjM5MSA1NC43MzQ0IDEyNi45MDcgNTYuNDY5NSAxMjYuNjQ0IDU4LjQxOTZMMTE5LjQ3MSAxMTEuNDk5QzExOS4yNTMgMTEzLjExMSAxMTcuODc3IDExNC4zMTQgMTE2LjI1IDExNC4zMTRIMzUuNzQ5OEMzNC4xMjMxIDExNC4zMTQgMzIuNzQ2OSAxMTMuMTExIDMyLjUyOTEgMTExLjQ5OUwyNS4zNTYyIDU4LjQxOTZaXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgZDogXCJNMTE3LjQwMSA4Ni4xNzQ4QzExOC42MTIgODYuMTc0OCAxMTkuNTQ2IDg3LjI0MjUgMTE5LjM4MyA4OC40NDI2TDExNi42NiAxMDguNTk1QzExNi40MzkgMTEwLjIzMiAxMTUuMDQxIDExMS40NTQgMTEzLjM4OSAxMTEuNDU0SDM4LjYxMTNDMzYuOTU4NyAxMTEuNDU0IDM1LjU2MDcgMTEwLjIzMiAzNS4zMzk0IDEwOC41OTVMMzIuNjE2NSA4OC40NDI2QzMyLjQ1NDMgODcuMjQyNSAzMy4zODc1IDg2LjE3NDggMzQuNTk4NSA4Ni4xNzQ4SDExNy40MDFaXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBmaWxsT3BhY2l0eTogXCIwLjA1XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk02MC4zMTc0IDc0LjIwNjZIOTEuNjgyNVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNjEuMTQzMSA4Mi40NjA1SDkwLjg1NzRcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTYyLjc5MzUgOTAuNzE0NUg4OS4yMDYyXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0yMS4yNDM0IDYyLjQwMDFMMjAuNTAwMSA2Mi41MDAxTDIwLjUwMDEgNjIuNTAwMUwyMS4yNDM0IDYyLjQwMDFaTTIwLjQwMDEgNjEuNzU2OEwyMC41MDAxIDYyLjUwMDFMMjAuNTAwMSA2Mi41MDAxTDIwLjQwMDEgNjEuNzU2OFpNMjQuMDY5MyA4My40MTUyTDI0LjgxMjcgODMuMzE1MkwyNC4wNjkzIDgzLjQxNTJaTTIzLjQyNiA4NC4yNTg1TDIzLjMyNiA4My41MTUySDIzLjMyNkwyMy40MjYgODQuMjU4NVpNMjIuNTgyNyA4My42MTUxTDIzLjMyNiA4My41MTUyTDIyLjU4MjcgODMuNjE1MVpNMTkuNzU2OCA2Mi42TDIwLjUwMDEgNjIuNTAwMVY2Mi41MDAxTDE5Ljc1NjggNjIuNlpNMjQuNzc4MSA4OC42ODU3TDI0LjAzNDggODguNzg1N0wyNC43NzgxIDg4LjY4NTdaTTIzLjkzNDggODguMDQyNEwyNC4wMzQ4IDg4Ljc4NTdMMjMuOTM0OCA4OC4wNDI0Wk0yNS42NTY4IDk1LjIyMDRMMjQuOTEzNSA5NS4zMjAzTDI1LjY1NjggOTUuMjIwNFpNMjUuMDEzNSA5Ni4wNjM2TDI1LjExMzQgOTYuODA2OUwyNS4wMTM1IDk2LjA2MzZaTTI0LjE3MDIgOTUuNDIwM0wyNC45MTM1IDk1LjMyMDNMMjQuMTcwMiA5NS40MjAzWk0yMy4yOTE1IDg4Ljg4NTZMMjQuMDM0OCA4OC43ODU3TDIzLjI5MTUgODguODg1NlpNMjEuOTg2NyA2Mi4zMDAyQzIxLjg3NjMgNjEuNDc5MSAyMS4xMjEyIDYwLjkwMzEgMjAuMzAwMiA2MS4wMTM1TDIwLjUwMDEgNjIuNTAwMUwyMC41MDAxIDYyLjUwMDFMMjEuOTg2NyA2Mi4zMDAyWk0yNC44MTI3IDgzLjMxNTJMMjEuOTg2NyA2Mi4zMDAyTDIwLjUwMDEgNjIuNTAwMUwyMy4zMjYgODMuNTE1MkwyNC44MTI3IDgzLjMxNTJaTTIzLjUyNTkgODUuMDAxOEMyNC4zNDcgODQuODkxNCAyNC45MjMxIDg0LjEzNjMgMjQuODEyNyA4My4zMTUyTDIzLjMyNiA4My41MTUySDIzLjMyNkwyMy41MjU5IDg1LjAwMThaTTIxLjgzOTQgODMuNzE1MUMyMS45NDk4IDg0LjUzNjEgMjIuNzA0OSA4NS4xMTIyIDIzLjUyNTkgODUuMDAxOEwyMy4zMjYgODMuNTE1MkgyMy4zMjZMMjEuODM5NCA4My43MTUxWk0xOS4wMTM1IDYyLjdMMjEuODM5NCA4My43MTUxTDIzLjMyNiA4My41MTUyTDIwLjUwMDEgNjIuNTAwMUwxOS4wMTM1IDYyLjdaTTIwLjMwMDIgNjEuMDEzNUMxOS40NzkxIDYxLjEyMzkgMTguOTAzMSA2MS44NzkgMTkuMDEzNSA2Mi43TDIwLjUwMDEgNjIuNTAwMUwyMC41MDAxIDYyLjUwMDFMMjAuMzAwMiA2MS4wMTM1Wk0yNS41MjE0IDg4LjU4NThDMjUuNDExIDg3Ljc2NDcgMjQuNjU1OSA4Ny4xODg2IDIzLjgzNDkgODcuMjk5TDI0LjAzNDggODguNzg1N0wyNS41MjE0IDg4LjU4NThaTTI2LjQwMDEgOTUuMTIwNEwyNS41MjE0IDg4LjU4NThMMjQuMDM0OCA4OC43ODU3TDI0LjkxMzUgOTUuMzIwM0wyNi40MDAxIDk1LjEyMDRaTTI1LjExMzQgOTYuODA2OUMyNS45MzQ1IDk2LjY5NjUgMjYuNTEwNSA5NS45NDE0IDI2LjQwMDEgOTUuMTIwNEwyNC45MTM1IDk1LjMyMDNMMjUuMTEzNCA5Ni44MDY5Wk0yMy40MjY5IDk1LjUyMDJDMjMuNTM3MyA5Ni4zNDEzIDI0LjI5MjQgOTYuOTE3MyAyNS4xMTM0IDk2LjgwNjlMMjQuOTEzNSA5NS4zMjAzTDIzLjQyNjkgOTUuNTIwMlpNMjIuNTQ4MiA4OC45ODU2TDIzLjQyNjkgOTUuNTIwMkwyNC45MTM1IDk1LjMyMDNMMjQuMDM0OCA4OC43ODU3TDIyLjU0ODIgODguOTg1NlpNMjMuODM0OSA4Ny4yOTlDMjMuMDEzOCA4Ny40MDk0IDIyLjQzNzggODguMTY0NSAyMi41NDgyIDg4Ljk4NTZMMjQuMDM0OCA4OC43ODU3TDIzLjgzNDkgODcuMjk5WlwiLFxuICBmaWxsOiBcIiMzQjM1NTJcIlxufSkpO1xuZXhwb3J0IGRlZmF1bHQgRm9sZGVyOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgY29uc3QgRm9sZGVycyA9ICh7XG4gIHdpZHRoID0gMTUyLFxuICBoZWlnaHQgPSAxNjlcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgd2lkdGg6IHdpZHRoLFxuICBoZWlnaHQ6IGhlaWdodCxcbiAgdmlld0JveDogXCIwIDAgMTUyIDE2OVwiLFxuICB2ZXJzaW9uOiBcIjEuMVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICBpZDogXCJTeW1ib2xzXCIsXG4gIHN0cm9rZTogXCJub25lXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjFcIixcbiAgZmlsbDogXCJub25lXCIsXG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgaWQ6IFwiR3JvdXBcIixcbiAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgyLjAwMDAwMCwgMi4wMDAwMDApXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTc0LDEyNC4wNjA2MTEgTDc0LDE1OC43MjM1NjcgQzc0LDE2Mi4wMzcyNzUgNzEuMzEzNzA4NSwxNjQuNzIzNTY3IDY4LDE2NC43MjM1NjcgQzY2Ljk0NTIxMTgsMTY0LjcyMzU2NyA2NS45MDkwNjI3LDE2NC40NDU1MDQgNjQuOTk1OTk2LDE2My45MTc0MDYgTDYuNjc0OTUwMjYsMTMwLjE4NTc3NCBMNi42NzQ5NTAyNiwxMzAuMTg1Nzc0IEMyLjU0Mzk4NDM5LDEyNy43OTY1MTIgMS40MjEwODU0N2UtMTQsMTIzLjM4NjI3OCAxLjQyMTA4NTQ3ZS0xNCwxMTguNjE0MTI1IEwxLjQyMTA4NTQ3ZS0xNCw0OC40MzYxMjkgQzEuNDIxMDg1NDdlLTE0LDQzLjY2Mzk3NTYgMi41NDM5ODQzOSwzOS4yNTM3NDEyIDYuNjc0OTUwMjYsMzYuODY0NDc5OSBMNjcuMzA3MjA4MywxLjc5NjA5Mjc4IEM3MS40NDc3MzM3LC0wLjU5ODY5NzU5NSA3Ni41NTIyNjYzLC0wLjU5ODY5NzU5NSA4MC42OTI3OTE3LDEuNzk2MDkyNzggTDE0MS4zMjUwNSwzNi44NjQ0Nzk5IEMxNDUuNDU2MDE2LDM5LjI1Mzc0MTIgMTQ4LDQzLjY2Mzk3NTYgMTQ4LDQ4LjQzNjEyOSBMMTQ4LDExOC42MTQxMjUgQzE0OCwxMjMuMzg2Mjc4IDE0NS40NTYwMTYsMTI3Ljc5NjUxMiAxNDEuMzI1MDUsMTMwLjE4NTc3NCBMOTIuMjgxMjIyNiwxNTguNTUxNjYzXCIsXG4gIGlkOiBcIlBhdGgtQ29weS02XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjNcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNODAsNzUuNDE5MDk0OCBDODAsNzAuOTE4NTYwOCA4MCw2NC4xNjc3NTk5IDgwLDU1LjE2NjY5MiBMODkuMTY2NjkyLDQ2IEwxMjIuMTg0NjE1LDQ2IEMxMjIuOTI0MjMyLDQ2IDEyMy41MjM4MSw0Ni41OTk1Nzc2IDEyMy41MjM4MSw0Ny4zMzkxOTQxIEMxMjMuNTIzODEsNjguNTE3NDQ3NCAxMjMuNTIzODEsODIuNjk3NTcwNyAxMjMuNTIzODEsODkuODc5NTY0MSBMMTIzLjUyMzgxLDk4LjQwNDkzMjQgQzEyMy41MjM4MSw5OC45NjA5Mzg0IDEyMy41MjM4MSw5OS43OTQ5NDc2IDEyMy41MjM4MSwxMDAuOTA2OTYgQzEyMy41MjM4MSwxMDEuNjQ2NTc2IDEyMi45MjQyMzIsMTAyLjI0NjE1NCAxMjIuMTg0NjE1LDEwMi4yNDYxNTQgQzExOS43NzU5MDUsMTAyLjI0NjE1NCAxMTcuOTY5MzcyLDEwMi4yNDYxNTQgMTE2Ljc2NTAxNiwxMDIuMjQ2MTU0IEwxMDcuOTgwNzI0LDY4Ljk0ODU3NDIgTDgwLDc1LjQxOTA5NDggWlwiLFxuICBpZDogXCJQYXRoXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBmaWxsT3BhY2l0eTogXCIwLjJcIixcbiAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxMDEuNzYxOTA1LCA3NC4xMjMwNzcpIHJvdGF0ZSgtMzQ1LjAwMDAwMCkgdHJhbnNsYXRlKC0xMDEuNzYxOTA1LCAtNzQuMTIzMDc3KSBcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTgwLDc1LjQxOTA5NDggQzgwLDcwLjkxODU2MDggODAsNjQuMTY3NzU5OSA4MCw1NS4xNjY2OTIgTDg5LjE2NjY5Miw0NiBMMTIyLjE4NDYxNSw0NiBDMTIyLjkyNDIzMiw0NiAxMjMuNTIzODEsNDYuNTk5NTc3NiAxMjMuNTIzODEsNDcuMzM5MTk0MSBDMTIzLjUyMzgxLDY4LjUxNzQ0NzQgMTIzLjUyMzgxLDgyLjY5NzU3MDcgMTIzLjUyMzgxLDg5Ljg3OTU2NDEgTDEyMy41MjM4MSw5OC40MDQ5MzI0IEwxMjMuNTIzODEsOTguNDA0OTMyNCBDMTIzLjUyMzgxLDk4Ljk2MDkzODQgMTIzLjUyMzgxLDk5Ljc5NDk0NzYgMTIzLjUyMzgxLDEwMC45MDY5NiBDMTIzLjUyMzgxLDEwMS42NDY1NzYgMTIyLjkyNDIzMiwxMDIuMjQ2MTU0IDEyMi4xODQ2MTUsMTAyLjI0NjE1NCBDMTE5Ljc3NTkwNSwxMDIuMjQ2MTU0IDExNy45NjkzNzIsMTAyLjI0NjE1NCAxMTYuNzY1MDE2LDEwMi4yNDYxNTRcIixcbiAgaWQ6IFwiUGF0aC1Db3B5LTdcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiM1wiLFxuICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDEwMS43NjE5MDUsIDc0LjEyMzA3Nykgcm90YXRlKC0zNDUuMDAwMDAwKSB0cmFuc2xhdGUoLTEwMS43NjE5MDUsIC03NC4xMjMwNzcpIFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNOTYuMDAxMjExLDQyLjUzNTg1NiBMOTYuMDAxMjExLDUwLjQyNjI0NzIgQzk2LjAwMTIxMSw1MS4xNjU4NjM3IDk1LjQwMTYzMzQsNTEuNzY1NDQxMyA5NC42NjIwMTY5LDUxLjc2NTQ0MTMgTDg2LjczNjk5OTQsNTEuNzY1NDQxM1wiLFxuICBpZDogXCJQYXRoLUNvcHktMTBcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiM1wiLFxuICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDkxLjM2OTEwNSwgNDcuMTUwNjQ5KSByb3RhdGUoLTM0NS4wMDAwMDApIHRyYW5zbGF0ZSgtOTEuMzY5MTA1LCAtNDcuMTUwNjQ5KSBcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTQ4LjkwNzM2OCwzOC4zNDU4NzYgTDQ4LjkwNzM2OCw0Ni4yMzYyNjcxIEM0OC45MDczNjgsNDYuOTc1ODgzNiA0OC4zMDc3OTA0LDQ3LjU3NTQ2MTMgNDcuNTY4MTczOSw0Ny41NzU0NjEzIEwzOS42NDMxNTY0LDQ3LjU3NTQ2MTNcIixcbiAgaWQ6IFwiUGF0aC1Db3B5LTEwXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjNcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMlwiLFxuICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDQ0LjI3NTI2MiwgNDIuOTYwNjY5KSByb3RhdGUoLTE1LjAwMDAwMCkgdHJhbnNsYXRlKC00NC4yNzUyNjIsIC00Mi45NjA2NjkpIFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNDAuNjU2OTg3NCw1NC40Mjg3MjMxIEM0MC42NTY5ODc0LDUxLjgzMDg4NjkgNDAuNjU2OTg3NCw0Ny45MzQxMzI3IDQwLjY1Njk4NzQsNDIuNzM4NDYwNSBMNDkuODIzNjc5NCwzMy41NzE3Njg1IEw4Mi44NDE2MDI4LDMzLjU3MTc2ODUgQzgzLjU4MTIxOTMsMzMuNTcxNzY4NSA4NC4xODA3OTY5LDM0LjE3MTM0NjEgODQuMTgwNzk2OSwzNC45MTA5NjI2IEM4NC4xODA3OTY5LDQzLjA2MzU4MjUgODQuMTgwNzk2OSw1MC4xNzkxNjEgODQuMTgwNzk2OSw1Ni4yNTc2OThcIixcbiAgaWQ6IFwiUGF0aFwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIzXCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoNjIuNDE4ODkyLCA0NC45MTQ3MzMpIHJvdGF0ZSgtMTUuMDAwMDAwKSB0cmFuc2xhdGUoLTYyLjQxODg5MiwgLTQ0LjkxNDczMykgXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk01My42MzQyNjgsMTI0IEwzNCwxMjQgQzMyLjg5NTQzMDUsMTI0IDMyLDEyMy4xMDQ1NjkgMzIsMTIyIEwzMiw2MiBDMzIsNjAuODk1NDMwNSAzMi44OTU0MzA1LDYwIDM0LDYwIEw1My41NTg0ODE2LDYwIEM1NC40MTkzNDI0LDYwIDU1LjE4MzYyMDEsNjAuNTUwODYwMiA1NS40NTU4NDgyLDYxLjM2NzU0NDUgTDU4LjMzMzMzMzMsNzAgTDEwNyw3MCBDMTA4LjEwNDU2OSw3MCAxMDksNzAuODk1NDMwNSAxMDksNzIgTDEwOSwxMjIgQzEwOSwxMjMuMTA0NTY5IDEwOC4xMDQ1NjksMTI0IDEwNywxMjQgTDc0LDEyNFwiLFxuICBpZDogXCJQYXRoXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjNcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgeDE6IFwiMzJcIixcbiAgeTE6IFwiODAuNDYxMTczNVwiLFxuICB4MjogXCI5Ni41NzMxXCIsXG4gIHkyOiBcIjgwLjQ2MTE3MzVcIixcbiAgaWQ6IFwiTGluZS03XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjNcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSkpKTtcbmV4cG9ydCBkZWZhdWx0IEZvbGRlcnM7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBjb25zdCBHaXRodWJMb2dvID0gKHtcbiAgd2lkdGggPSA3MixcbiAgaGVpZ2h0ID0gNzFcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgd2lkdGg6IHdpZHRoLFxuICBoZWlnaHQ6IGhlaWdodCxcbiAgdmlld0JveDogXCIwIDAgNzIgNzFcIixcbiAgdmVyc2lvbjogXCIxLjFcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgaWQ6IFwiU3ltYm9sc1wiLFxuICBzdHJva2U6IFwibm9uZVwiLFxuICBzdHJva2VXaWR0aDogXCIxXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICBmaWxsUnVsZTogXCJldmVub2RkXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gIGlkOiBcIkF0b21zL0xvZ290eXBlL0dpdGh1YlwiLFxuICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAuMDAwMDAwLCAxLjAwMDAwMClcIixcbiAgZmlsbDogXCIjMEMxRTI5XCIsXG4gIGZpbGxSdWxlOiBcIm5vbnplcm9cIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNjcuMTAxMzc1OSwxNy40MjM4NDIzIEM2My44ODU0ODUyLDExLjkxMzc5MjIgNTkuNTIzMzM0OSw3LjU1MTQ3NzgxIDU0LjAxMzc3NjgsNC4zMzU5MTUxNyBDNDguNTAzMzk4NiwxLjEyMDE4ODUxIDQyLjQ4NzcwODQsLTAuNDg3MjY0Nzg5IDM1Ljk2MjQ0MTksLTAuNDg3MjY0Nzg5IEMyOS40Mzc5OTU0LC0wLjQ4NzI2NDc4OSAyMy40MjAzMzcxLDEuMTIwNjgwNTQgMTcuOTExMTA3MSw0LjMzNTkxNTE3IEMxMi40MDEwNTY5LDcuNTUxMzEzOCA4LjAzOTA3MDYyLDExLjkxMzc5MjIgNC44MjMxNzk5NSwxNy40MjM4NDIzIEMxLjYwNzc4MTMyLDIyLjkzMzcyODQgLTQuMjYzMjU2NDFlLTE0LDI4Ljk1MDU2NjYgLTQuMjYzMjU2NDFlLTE0LDM1LjQ3NDE5MzEgQy00LjI2MzI1NjQxZS0xNCw0My4zMTA1NDg0IDIuMjg2Mjg3MDIsNTAuMzU3MTk5OSA2Ljg2MDAwOTExLDU2LjYxNTk1MTYgQzExLjQzMzIzOTIsNjIuODc1MTk1MyAxNy4zNDExNzU0LDY3LjIwNjM0OCAyNC41ODMzMjU3LDY5LjYwOTkwMTUgQzI1LjQyNjMzMjYsNjkuNzY2MzY2MiAyNi4wNTAzODcyLDY5LjY1NjMxNjEgMjYuNDU2MTQ1OCw2OS4yODI1MzkzIEMyNi44NjIwNjgzLDY4LjkwODI3MDUgMjcuMDY0NzgzNiw2OC40Mzk1MzI1IDI3LjA2NDc4MzYsNjcuODc4MjkzMyBDMjcuMDY0NzgzNiw2Ny43ODQ2NDQxIDI3LjA1Njc0NzIsNjYuOTQyMTI5MyAyNy4wNDExNjYzLDY1LjM0OTc2NDggQzI3LjAyNTA5MzQsNjMuNzU3NDAwNCAyNy4wMTc1NDksNjIuMzY4MjQzMiAyNy4wMTc1NDksNjEuMTgyOTQ5MyBMMjUuOTQwNTAxMSw2MS4zNjkyNjM3IEMyNS4yNTM3OTUsNjEuNDk1MDU4NyAyNC4zODc0OTg5LDYxLjU0ODM2MTYgMjMuMzQxNjEyOCw2MS41MzMyNzI4IEMyMi4yOTYyMTg3LDYxLjUxODY3NiAyMS4yMTA5NzA0LDYxLjQwOTExNzkgMjAuMDg3MzQ0LDYxLjIwNTQxODYgQzE4Ljk2MzIyNTUsNjEuMDAzNTIzNCAxNy45MTc2Njc0LDYwLjUzNTI3NzQgMTYuOTQ5ODQ5Nyw1OS44MDE2NjQ2IEMxNS45ODI1MjM5LDU5LjA2ODA1MTggMTUuMjk1ODE3OCw1OC4xMDc3Nzg1IDE0Ljg4OTg5NTIsNTYuOTIyMzIwNiBMMTQuNDIxNjQ5Miw1NS44NDQ3ODA4IEMxNC4xMDk1Mzk5LDU1LjEyNzQwNDkgMTMuNjE4MTY4Niw1NC4zMzA0ODQ2IDEyLjk0Njg3OTMsNTMuNDU2OTcyMSBDMTIuMjc1NTksNTIuNTgyNjM5NSAxMS41OTY3NTYzLDUxLjk4OTkxMDYgMTAuOTEwMDUwMSw1MS42Nzc4MDEzIEwxMC41ODIxOTU5LDUxLjQ0MzEwNDIgQzEwLjM2MzczNTgsNTEuMjg3MTMxNiAxMC4xNjEwMjA1LDUxLjA5OTAxMzEgOS45NzM1NTgwOSw1MC44ODA3MTcgQzkuNzg2MjU5NjgsNTAuNjYyNDIwOSA5LjY0NjAzMTg5LDUwLjQ0Mzk2MDcgOS41NTIzODI2OSw1MC4yMjUxNzI2IEM5LjQ1ODU2OTQ4LDUwLjAwNjIyMDQgOS41MzYzMDk3OSw0OS44MjY2MzA0IDkuNzg2NDIzNjksNDkuNjg1NzQ2NiBDMTAuMDM2NTM3Niw0OS41NDQ4NjI4IDEwLjQ4ODU0NjcsNDkuNDc2NDcxIDExLjE0NDQxOTEsNDkuNDc2NDcxIEwxMi4wODA1ODMxLDQ5LjYxNjM3MDcgQzEyLjcwNDk2NTgsNDkuNzQxNTA5NyAxMy40NzcyODQ3LDUwLjExNTI4NjUgMTQuMzk4NTIzOSw1MC43Mzk5OTcyIEMxNS4zMTkyNzExLDUxLjM2NDIxNTggMTYuMDc2MTczMSw1Mi4xNzU3MzI5IDE2LjY2OTM5NDEsNTMuMTc0MjIwNCBDMTcuMzg3NzU0LDU0LjQ1NDQ3NTUgMTguMjUzMjMwMSw1NS40MzAwMDE3IDE5LjI2ODI4MjUsNTYuMTAxMjkxIEMyMC4yODI1MTQ4LDU2Ljc3MjU4MDMgMjEuMzA1MTExNiw1Ny4xMDc2NTA5IDIyLjMzNTA4ODgsNTcuMTA3NjUwOSBDMjMuMzY1MDY2MSw1Ny4xMDc2NTA5IDI0LjI1NDY1MTUsNTcuMDI5NTgyNiAyNS4wMDQxNzMxLDU2Ljg3NDI2NiBDMjUuNzUyODc0Nyw1Ni43MTgxMjkzIDI2LjQ1NTMyNTcsNTYuNDgzNDMyMiAyNy4xMTExOTgyLDU2LjE3MTQ4NjkgQzI3LjM5MjE0NTgsNTQuMDc5MDU4NyAyOC4xNTcwODQzLDUyLjQ3MTYwNTQgMjkuNDA1MzU3Niw1MS4zNDc5Nzg5IEMyNy42MjYxODY4LDUxLjE2MTAwODYgMjYuMDI2NjA1OSw1MC44Nzk0MDQ5IDI0LjYwNTc5NSw1MC41MDQ5NzIxIEMyMy4xODU4MDQxLDUwLjEzMDA0NzMgMjEuNzE4NDE0Niw0OS41MjE1NzM1IDIwLjIwNDYxMDUsNDguNjc3OTEwNiBDMTguNjg5OTg2Myw0Ny44MzUzOTU4IDE3LjQzMzUxMjUsNDYuNzg5MTgxNyAxNi40MzQ4NjEsNDUuNTQxMDcyMyBDMTUuNDM2MDQ1Niw0NC4yOTIzMDcgMTQuNjE2MzI4LDQyLjY1Mjg3MTkgMTMuOTc2ODU2NSw0MC42MjQyNDMyIEMxMy4zMzcwNTY5LDM4LjU5NDc5NDQgMTMuMDE3MDc1MiwzNi4yNTM3Mjg0IDEzLjAxNzA3NTIsMzMuNjAwMzg5IEMxMy4wMTcwNzUyLDI5LjgyMjQzOTEgMTQuMjUwNDIzNywyNi42MDc1MzI1IDE2LjcxNjYyODcsMjMuOTUzODY1MSBDMTUuNTYxMzQ4NSwyMS4xMTM1NTUzIDE1LjY3MDQxNDYsMTcuOTI5NDgyNCAxNy4wNDQxNTQ5LDE0LjQwMTk3NDQgQzE3Ljk0OTQ4NTIsMTQuMTIwNjk4OCAxOS4yOTIwNjM4LDE0LjMzMTc3ODUgMjEuMDcxMjM0NiwxNS4wMzM5MDE1IEMyMi44NTA3MzM1LDE1LjczNjM1MjUgMjQuMTUzNjIxOSwxNi4zMzgxMDIgMjQuOTgxMjExOCwxNi44MzcwMTc3IEMyNS44MDg4MDE4LDE3LjMzNTc2OTQgMjYuNDcxODkwNywxNy43NTg0MjA5IDI2Ljk3MTQ2MjQsMTguMTAxMTk5OSBDMjkuODc1MjQzNywxNy4yODk4NDY4IDMyLjg3MTg1NDIsMTYuODg0MDg4MyAzNS45NjIxMTM5LDE2Ljg4NDA4ODMgQzM5LjA1MjM3MzYsMTYuODg0MDg4MyA0Mi4wNDk2NDAxLDE3LjI4OTg0NjggNDQuOTUzNTg1NCwxOC4xMDExOTk5IEw0Ni43MzI5MjAzLDE2Ljk3NzkwMTUgQzQ3Ljk0OTcwMzksMTYuMjI4Mzc5OSA0OS4zODY1ODc3LDE1LjU0MTUwOTcgNTEuMDQwMTI3NiwxNC45MTcxMjcgQzUyLjY5NDY1MTUsMTQuMjkzMDcyMyA1My45NTk4MTc4LDE0LjEyMTE5MDggNTQuODM0MzE0NCwxNC40MDI0NjY0IEM1Ni4yMzg1NjA0LDE3LjkzMDEzODQgNTYuMzYzNjk5MywyMS4xMTQwNDczIDU1LjIwODA5MTEsMjMuOTU0MzU3MSBDNTcuNjc0MTMyMSwyNi42MDgwMjQ1IDU4LjkwNzk3MjcsMjkuODIzNzUxMiA1OC45MDc5NzI3LDMzLjYwMDg4MSBDNTguOTA3OTcyNywzNi4yNTQyMjA0IDU4LjU4Njg0MjgsMzguNjAyNjY2OSA1Ny45NDgwMjczLDQwLjY0NzY5NjUgQzU3LjMwODM5MTgsNDIuNjkzMDU0MSA1Ni40ODE2MjE5LDQ0LjMzMDg0OTEgNTUuNDY3Mzg5NSw0NS41NjQ1MjU2IEM1NC40NTIwMDkxLDQ2Ljc5ODAzODIgNTMuMTg3NDk4OSw0Ny44MzYwNTE4IDUxLjY3MzY5NDgsNDguNjc4NDAyNiBDNTAuMTU5NTYyNiw0OS41MjE0MDk1IDQ4LjY5MTY4MTEsNTAuMTI5ODgzMyA0Ny4yNzE2OTAyLDUwLjUwNDgwODEgQzQ1Ljg1MTA0MzMsNTAuODc5NzMyOSA0NC4yNTE0NjI0LDUxLjE2MTUwMDYgNDIuNDcyMjkxNiw1MS4zNDg3OTkgQzQ0LjA5NDk5NzcsNTIuNzUzMDQ1IDQ0LjkwNjUxNDgsNTQuOTY5NjI4MSA0NC45MDY1MTQ4LDU3Ljk5NzU2NDQgTDQ0LjkwNjUxNDgsNjcuODc2OTgxMiBDNDQuOTA2NTE0OCw2OC40MzgyMjA0IDQ1LjEwMTY4NTYsNjguOTA2Nzk0NCA0NS40OTIzNTU0LDY5LjI4MTIyNzIgQzQ1Ljg4MjUzMyw2OS42NTUwMDQgNDYuNDk4NzE1Myw2OS43NjUwNTQxIDQ3LjM0MTcyMjEsNjkuNjA4NDI1NCBDNTQuNTg0ODU2NSw2Ny4yMDUxOTk5IDYwLjQ5Mjc5MjcsNjIuODczODgzMyA2NS4wNjU4NTg4LDU2LjYxNDYzOTUgQzY5LjYzODQzMjgsNTAuMzU1ODg3OCA3MS45MjU1Mzk5LDQzLjMwOTIzNjQgNzEuOTI1NTM5OSwzNS40NzI4ODEgQzcxLjkyMzg5OTgsMjguOTUwMDc0NiA3MC4zMTUyOTg0LDIyLjkzMzcyODQgNjcuMTAxMzc1OSwxNy40MjM4NDIzIFpcIixcbiAgaWQ6IFwiUGF0aFwiXG59KSkpKTtcbmV4cG9ydCBkZWZhdWx0IEdpdGh1YkxvZ287IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBjb25zdCBJZGVudGl0eUNhcmQgPSAoe1xuICB3aWR0aCA9IDE1MixcbiAgaGVpZ2h0ID0gMTUyXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gIHdpZHRoOiB3aWR0aCxcbiAgaGVpZ2h0OiBoZWlnaHQsXG4gIHZpZXdCb3g6IFwiMCAwIDE1MiAxNTJcIixcbiAgZmlsbDogXCJub25lXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiNzZcIixcbiAgY3k6IFwiNzZcIixcbiAgcjogXCI3NlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0yOC40MTc5IDU4LjI0MzhDMjcuOTUzNCA1Ni41MSAyOC45ODIzIDU0LjcyNzkgMzAuNzE2IDU0LjI2MzRMODUuODE4OSAzOS40OTg2Qzg3LjU1MjcgMzkuMDM0IDg5LjMzNDggNDAuMDYyOSA4OS43OTk0IDQxLjc5NjdMMTA4LjE0MiAxMTAuMjUxQzEwOC42MDYgMTExLjk4NSAxMDcuNTc3IDExMy43NjcgMTA1Ljg0NCAxMTQuMjMxTDUwLjc0MDYgMTI4Ljk5NkM0OS4wMDY5IDEyOS40NjEgNDcuMjI0OCAxMjguNDMyIDQ2Ljc2MDIgMTI2LjY5OEwyOC40MTc5IDU4LjI0MzhaXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0zMC40NjkxIDg1LjI5MDlMMzAuNjYzMiA4Ni4wMTUzTDMxLjM4NzcgODUuODIxMkwzMS4xOTM1IDg1LjA5NjhMMzAuNDY5MSA4NS4yOTA5Wk0yOC40NDE2IDc3LjcyNDFMMjkuMTY2IDc3LjUzTDI4Ljk3MTkgNzYuODA1NUwyOC4yNDc1IDc2Ljk5OTZMMjguNDQxNiA3Ny43MjQxWk0yOS4wMjAyIDg1LjY3OTFMMjguMjk1OCA4NS44NzMyTDI4LjQ4OTkgODYuNTk3N0wyOS4yMTQzIDg2LjQwMzVMMjkuMDIwMiA4NS42NzkxWk0yNi45OTI3IDc4LjExMjNMMjYuNzk4NiA3Ny4zODc5TDI2LjA3NDEgNzcuNTgyTDI2LjI2ODMgNzguMzA2NEwyNi45OTI3IDc4LjExMjNaTTIzLjQ1MzMgNTkuMTA3NkwyNC4xNzc4IDU4LjkxMzVMMjMuNDUzMyA1OS4xMDc2Wk0yOC41Nzk4IDUwLjIyODJMMjguNzczOSA1MC45NTI2TDI5LjQ5ODQgNTAuNzU4NUwyOS4zMDQzIDUwLjAzNDFMMjguNTc5OCA1MC4yMjgyWk0yNS42ODA2IDY3LjQyMDFMMjQuOTU2MiA2Ny42MTQyTDI1LjY4MDYgNjcuNDIwMVpNMjcuMjcxNiA3My4zNTc1TDI3LjQ2NTcgNzQuMDgyTDI4LjE5MDEgNzMuODg3OUwyNy45OTYgNzMuMTYzNEwyNy4yNzE2IDczLjM1NzVaTTI1LjgyMjcgNzMuNzQ1OEwyNS4wOTgyIDczLjkzOTlMMjUuMjkyNCA3NC42NjQzTDI2LjAxNjggNzQuNDcwMkwyNS44MjI3IDczLjc0NThaTTI0LjIzMTcgNjcuODA4M0wyNC45NTYyIDY3LjYxNDJMMjQuMjMxNyA2Ny44MDgzWk0yMi4wMDQ0IDU5LjQ5NThMMjEuMjggNTkuNjg5OUwyMi4wMDQ0IDU5LjQ5NThaTTI4LjE5MTYgNDguNzc5M0wyOC45MTYxIDQ4LjU4NTJMMjguNzIxOSA0Ny44NjA3TDI3Ljk5NzUgNDguMDU0OUwyOC4xOTE2IDQ4Ljc3OTNaTTMxLjE5MzUgODUuMDk2OEwyOS4xNjYgNzcuNTNMMjcuNzE3MSA3Ny45MTgyTDI5Ljc0NDcgODUuNDg1TDMxLjE5MzUgODUuMDk2OFpNMjkuMjE0MyA4Ni40MDM1TDMwLjY2MzIgODYuMDE1M0wzMC4yNzUgODQuNTY2NEwyOC44MjYxIDg0Ljk1NDdMMjkuMjE0MyA4Ni40MDM1Wk0yNi4yNjgzIDc4LjMwNjRMMjguMjk1OCA4NS44NzMyTDI5Ljc0NDcgODUuNDg1TDI3LjcxNzEgNzcuOTE4MkwyNi4yNjgzIDc4LjMwNjRaTTI4LjI0NzUgNzYuOTk5NkwyNi43OTg2IDc3LjM4NzlMMjcuMTg2OCA3OC44MzY4TDI4LjYzNTcgNzguNDQ4NUwyOC4yNDc1IDc2Ljk5OTZaTTI0LjE3NzggNTguOTEzNUMyMy4yNDg2IDU1LjQ0NTkgMjUuMzA2NCA1MS44ODE4IDI4Ljc3MzkgNTAuOTUyNkwyOC4zODU3IDQ5LjUwMzdDMjQuMTE4IDUwLjY0NzMgMjEuNTg1MyA1NS4wMzQgMjIuNzI4OSA1OS4zMDE3TDI0LjE3NzggNTguOTEzNVpNMjYuNDA1MSA2Ny4yMjU5TDI0LjE3NzggNTguOTEzNUwyMi43Mjg5IDU5LjMwMTdMMjQuOTU2MiA2Ny42MTQyTDI2LjQwNTEgNjcuMjI1OVpNMjcuOTk2IDczLjE2MzRMMjYuNDA1MSA2Ny4yMjU5TDI0Ljk1NjIgNjcuNjE0MkwyNi41NDcxIDczLjU1MTZMMjcuOTk2IDczLjE2MzRaTTI2LjAxNjggNzQuNDcwMkwyNy40NjU3IDc0LjA4MkwyNy4wNzc1IDcyLjYzMzFMMjUuNjI4NiA3My4wMjEzTDI2LjAxNjggNzQuNDcwMlpNMjMuNTA3MyA2OC4wMDI0TDI1LjA5ODIgNzMuOTM5OUwyNi41NDcxIDczLjU1MTZMMjQuOTU2MiA2Ny42MTQyTDIzLjUwNzMgNjguMDAyNFpNMjEuMjggNTkuNjg5OUwyMy41MDczIDY4LjAwMjRMMjQuOTU2MiA2Ny42MTQyTDIyLjcyODkgNTkuMzAxN0wyMS4yOCA1OS42ODk5Wk0yNy45OTc1IDQ4LjA1NDlDMjIuOTI5NiA0OS40MTI4IDE5LjkyMiA1NC42MjIgMjEuMjggNTkuNjg5OUwyMi43Mjg5IDU5LjMwMTdDMjEuNTg1MyA1NS4wMzQgMjQuMTE4IDUwLjY0NzMgMjguMzg1NyA0OS41MDM3TDI3Ljk5NzUgNDguMDU0OVpNMjkuMzA0MyA1MC4wMzQxTDI4LjkxNjEgNDguNTg1MkwyNy40NjcyIDQ4Ljk3MzRMMjcuODU1NCA1MC40MjIzTDI5LjMwNDMgNTAuMDM0MVpcIixcbiAgZmlsbDogXCIjM0IzNTUyXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgZDogXCJNMzEuMjQxMyA1OC45NDU1QzMwLjk1NTQgNTcuODc4NiAzMS41ODg2IDU2Ljc4MTkgMzIuNjU1NSA1Ni40OTZMODYuMTI0NCA0Mi4xNjkxQzg3LjE5MTQgNDEuODgzMiA4OC4yODggNDIuNTE2NCA4OC41NzM5IDQzLjU4MzNMMTA2LjE2NSAxMDkuMjM1QzEwNi40NTEgMTEwLjMwMiAxMDUuODE4IDExMS4zOTkgMTA0Ljc1MSAxMTEuNjg1TDUxLjI4MjIgMTI2LjAxMkM1MC4yMTUzIDEyNi4yOTggNDkuMTE4NiAxMjUuNjY1IDQ4LjgzMjcgMTI0LjU5OEwzMS4yNDEzIDU4Ljk0NTVaXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBmaWxsT3BhY2l0eTogXCIwLjA1XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcIm1hc2tcIiwge1xuICBpZDogXCJwYXRoLTUtaW5zaWRlLTFfMF8yMzM1XCIsXG4gIGZpbGw6IFwid2hpdGVcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTY4LjIxNDggMzIuNjE3MkM2Ni4wMDU3IDMyLjYxNzIgNjQuMjE0OCAzNC40MDgxIDY0LjIxNDggMzYuNjE3MlY0MC43NDhINTEuOTUzMUM0OS43NDQgNDAuNzQ4IDQ3Ljk1MzEgNDIuNTM4OSA0Ny45NTMxIDQ0Ljc0OFYxMTUuNjE3QzQ3Ljk1MzEgMTE3LjgyNiA0OS43NDQgMTE5LjYxNyA1MS45NTMxIDExOS42MTdIMTA5QzExMS4yMDkgMTE5LjYxNyAxMTMgMTE3LjgyNiAxMTMgMTE1LjYxN1Y0NC43NDhDMTEzIDQyLjUzODkgMTExLjIwOSA0MC43NDggMTA5IDQwLjc0OEg5Ni43MzgyVjM2LjYxNzJDOTYuNzM4MiAzNC40MDggOTQuOTQ3MyAzMi42MTcyIDkyLjczODIgMzIuNjE3Mkg2OC4yMTQ4WlwiXG59KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk02OC4yMTQ4IDMyLjYxNzJDNjYuMDA1NyAzMi42MTcyIDY0LjIxNDggMzQuNDA4MSA2NC4yMTQ4IDM2LjYxNzJWNDAuNzQ4SDUxLjk1MzFDNDkuNzQ0IDQwLjc0OCA0Ny45NTMxIDQyLjUzODkgNDcuOTUzMSA0NC43NDhWMTE1LjYxN0M0Ny45NTMxIDExNy44MjYgNDkuNzQ0IDExOS42MTcgNTEuOTUzMSAxMTkuNjE3SDEwOUMxMTEuMjA5IDExOS42MTcgMTEzIDExNy44MjYgMTEzIDExNS42MTdWNDQuNzQ4QzExMyA0Mi41Mzg5IDExMS4yMDkgNDAuNzQ4IDEwOSA0MC43NDhIOTYuNzM4MlYzNi42MTcyQzk2LjczODIgMzQuNDA4IDk0Ljk0NzMgMzIuNjE3MiA5Mi43MzgyIDMyLjYxNzJINjguMjE0OFpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNjQuMjE0OCA0MC43NDhWNDIuMjQ4SDY1LjcxNDhWNDAuNzQ4SDY0LjIxNDhaTTk2LjczODIgNDAuNzQ4SDk1LjIzODJWNDIuMjQ4SDk2LjczODJWNDAuNzQ4Wk02NS43MTQ4IDM2LjYxNzJDNjUuNzE0OCAzNS4yMzY1IDY2LjgzNDEgMzQuMTE3MiA2OC4yMTQ4IDM0LjExNzJWMzEuMTE3MkM2NS4xNzcyIDMxLjExNzIgNjIuNzE0OCAzMy41Nzk2IDYyLjcxNDggMzYuNjE3Mkg2NS43MTQ4Wk02NS43MTQ4IDQwLjc0OFYzNi42MTcySDYyLjcxNDhWNDAuNzQ4SDY1LjcxNDhaTTUxLjk1MzEgNDIuMjQ4SDY0LjIxNDhWMzkuMjQ4SDUxLjk1MzFWNDIuMjQ4Wk00OS40NTMxIDQ0Ljc0OEM0OS40NTMxIDQzLjM2NzMgNTAuNTcyNCA0Mi4yNDggNTEuOTUzMSA0Mi4yNDhWMzkuMjQ4QzQ4LjkxNTYgMzkuMjQ4IDQ2LjQ1MzEgNDEuNzEwNSA0Ni40NTMxIDQ0Ljc0OEg0OS40NTMxWk00OS40NTMxIDExNS42MTdWNDQuNzQ4SDQ2LjQ1MzFWMTE1LjYxN0g0OS40NTMxWk01MS45NTMxIDExOC4xMTdDNTAuNTcyNCAxMTguMTE3IDQ5LjQ1MzEgMTE2Ljk5OCA0OS40NTMxIDExNS42MTdINDYuNDUzMUM0Ni40NTMxIDExOC42NTUgNDguOTE1NiAxMjEuMTE3IDUxLjk1MzEgMTIxLjExN1YxMTguMTE3Wk0xMDkgMTE4LjExN0g1MS45NTMxVjEyMS4xMTdIMTA5VjExOC4xMTdaTTExMS41IDExNS42MTdDMTExLjUgMTE2Ljk5OCAxMTAuMzgxIDExOC4xMTcgMTA5IDExOC4xMTdWMTIxLjExN0MxMTIuMDM3IDEyMS4xMTcgMTE0LjUgMTE4LjY1NSAxMTQuNSAxMTUuNjE3SDExMS41Wk0xMTEuNSA0NC43NDhWMTE1LjYxN0gxMTQuNVY0NC43NDhIMTExLjVaTTEwOSA0Mi4yNDhDMTEwLjM4MSA0Mi4yNDggMTExLjUgNDMuMzY3MyAxMTEuNSA0NC43NDhIMTE0LjVDMTE0LjUgNDEuNzEwNSAxMTIuMDM3IDM5LjI0OCAxMDkgMzkuMjQ4VjQyLjI0OFpNOTYuNzM4MiA0Mi4yNDhIMTA5VjM5LjI0OEg5Ni43MzgyVjQyLjI0OFpNOTUuMjM4MiAzNi42MTcyVjQwLjc0OEg5OC4yMzgyVjM2LjYxNzJIOTUuMjM4MlpNOTIuNzM4MiAzNC4xMTcyQzk0LjExODkgMzQuMTE3MiA5NS4yMzgyIDM1LjIzNjUgOTUuMjM4MiAzNi42MTcySDk4LjIzODJDOTguMjM4MiAzMy41Nzk2IDk1Ljc3NTcgMzEuMTE3MiA5Mi43MzgyIDMxLjExNzJWMzQuMTE3MlpNNjguMjE0OCAzNC4xMTcySDkyLjczODJWMzEuMTE3Mkg2OC4yMTQ4VjM0LjExNzJaXCIsXG4gIGZpbGw6IFwiIzNCMzU1MlwiLFxuICBtYXNrOiBcInVybCgjcGF0aC01LWluc2lkZS0xXzBfMjMzNSlcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk0xMDUuOTA2IDczLjM4ODVDMTA3LjgyNiA3Mi44Mjc3IDEwOS43NDcgNzQuMjY3NyAxMDkuNzQ3IDc2LjI2ODJWMTE0LjQ1NEMxMDkuNzQ3IDExNS4zNTIgMTA5LjA1NyAxMTYuMDggMTA4LjIwNiAxMTYuMDhIODguMzU0NkM4Ni42OTc3IDExNi4wOCA4NS4zNTQ1IDExNC43MzcgODUuMzU0NiAxMTMuMDhMODUuMzU1MSA5NS4xNzg1Qzg1LjM1NTEgOTMuODgzNyA4Ni4xODY2IDkyLjczODUgODcuMzk4MyA5Mi4yODIxQzg4LjYwMzIgOTEuODI4MiA5MC4wNjAzIDkxLjIzMTIgOTAuOTQzOCA5MC42OTk0Qzk0LjY3MjcgODguNDU0OSA5Ny42MjI0IDg1LjA0NzQgOTkuMjkwOCA4MC45NzlDOTkuNzI4NCA3OS45MTIxIDEwMC4xMzEgNzguMTI1OSAxMDAuNCA3Ni43NjQ2QzEwMC42MjUgNzUuNjI3NyAxMDEuNDQ4IDc0LjY5MDYgMTAyLjU2IDc0LjM2NTdMMTA1LjkwNiA3My4zODg1WlwiLFxuICBmaWxsOiBcIiMzMDQwRDZcIixcbiAgZmlsbE9wYWNpdHk6IFwiMC4wNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNjkuMDkyOCA5Ny4yNTcxSDkxLjg1OTFcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTY5LjA5MjggMTA1LjM4OEg5MS44NTkxXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gIGN4OiBcIjgwLjQ3NjJcIixcbiAgY3k6IFwiNDQuMDAwNlwiLFxuICByOiBcIjQuODc4NVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCI4MC40NzY1XCIsXG4gIGN5OiBcIjczLjI3MTRcIixcbiAgcjogXCIxNi4yNjE3XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk05OC45MjIxIDYxLjI1NTVMOTguMjk0MSA2MS42NjU1TDk4LjkyMjEgNjEuMjU1NVpNMTAxLjM0MSA2Ni4yNDA2TDEwMC42MzEgNjYuNDhMMTAxLjM0MSA2Ni4yNDA2Wk0xMDAuODcgNjcuMTkwOEwxMDAuNjMxIDY2LjQ4TDEwMC44NyA2Ny4xOTA4Wk05OS45MTk4IDY2LjcxOTVMOTkuMjA5IDY2Ljk1ODlIOTkuMjA5TDk5LjkxOTggNjYuNzE5NVpNOTcuNjY2IDYyLjA3NTRMOTcuMDM4IDYyLjQ4NTRMOTcuNjY2IDYyLjA3NTRaTTg4LjY4NzMgNTIuODQyNUw4OC40MDc0IDUzLjUzODNWNTMuNTM4M0w4OC42ODczIDUyLjg0MjVaTTg3LjcxMTYgNTMuMjU4NEw4OC40MDc0IDUzLjUzODNMODguNDA3NCA1My41MzgzTDg3LjcxMTYgNTMuMjU4NFpNOTYuNTYxNyA1OC4yNDU0TDk2LjAxMzggNTguNzU3NUw5Ni41NjE3IDU4LjI0NTRaTTk2LjUyNTkgNTkuMzA1NEw5Ny4wMzggNTkuODUzNEg5Ny4wMzhMOTYuNTI1OSA1OS4zMDU0Wk05NS40NjU4IDU5LjI2OTZMOTYuMDEzOCA1OC43NTc1TDk2LjAxMzggNTguNzU3NUw5NS40NjU4IDU5LjI2OTZaTTg4LjEyNzUgNTQuMjM0MUw4OC40MDc0IDUzLjUzODNIODguNDA3NEw4OC4xMjc1IDU0LjIzNDFaTTk5LjU1MDIgNjAuODQ1NkM5OS4wOTc0IDYwLjE1MTkgOTguMTY3OSA1OS45NTY2IDk3LjQ3NDIgNjAuNDA5NEw5OC4yOTQxIDYxLjY2NTVMOTkuNTUwMiA2MC44NDU2Wk0xMDIuMDUyIDY2LjAwMTJDMTAxLjQzNCA2NC4xNjY0IDEwMC41ODkgNjIuNDM2NyA5OS41NTAyIDYwLjg0NTZMOTguMjk0MSA2MS42NjU1Qzk5LjI2NDMgNjMuMTUxOSAxMDAuMDU0IDY0Ljc2NzIgMTAwLjYzMSA2Ni40OEwxMDIuMDUyIDY2LjAwMTJaTTEwMS4xMDkgNjcuOTAxNUMxMDEuODk0IDY3LjYzNzEgMTAyLjMxNiA2Ni43ODYzIDEwMi4wNTIgNjYuMDAxMkwxMDAuNjMxIDY2LjQ4TDEwMS4xMDkgNjcuOTAxNVpNOTkuMjA5IDY2Ljk1ODlDOTkuNDczNCA2Ny43NDQgMTAwLjMyNCA2OC4xNjYgMTAxLjEwOSA2Ny45MDE1TDEwMC42MzEgNjYuNDhMOTkuMjA5IDY2Ljk1ODlaTTk3LjAzOCA2Mi40ODU0Qzk3LjkzOTggNjMuODY3IDk4LjY3MzEgNjUuMzY3OSA5OS4yMDkgNjYuOTU4OUwxMDAuNjMxIDY2LjQ4QzEwMC4wNTQgNjQuNzY3MiA5OS4yNjQzIDYzLjE1MTkgOTguMjk0MSA2MS42NjU1TDk3LjAzOCA2Mi40ODU0Wk05Ny40NzQyIDYwLjQwOTRDOTYuNzgwNSA2MC44NjIyIDk2LjU4NTIgNjEuNzkxNiA5Ny4wMzggNjIuNDg1NEw5OC4yOTQxIDYxLjY2NTVMOTcuNDc0MiA2MC40MDk0Wk04OC45NjcyIDUyLjE0NjdDODguMTk4NyA1MS44Mzc1IDg3LjMyNSA1Mi4yMDk5IDg3LjAxNTggNTIuOTc4NUw4OC40MDc0IDUzLjUzODNMODguNDA3NCA1My41MzgzTDg4Ljk2NzIgNTIuMTQ2N1pNOTcuMTA5NyA1Ny43MzMzQzk0Ljg1NjIgNTUuMzIxOSA5Mi4wODMyIDUzLjQwMDEgODguOTY3MiA1Mi4xNDY3TDg4LjQwNzQgNTMuNTM4M0M5MS4zMTY3IDU0LjcwODYgOTMuOTA3NiA1Ni41MDM3IDk2LjAxMzggNTguNzU3NUw5Ny4xMDk3IDU3LjczMzNaTTk3LjAzOCA1OS44NTM0Qzk3LjY0MzIgNTkuMjg3NyA5Ny42NzUzIDU4LjMzODUgOTcuMTA5NyA1Ny43MzMzTDk2LjAxMzggNTguNzU3NUw5Ni4wMTM4IDU4Ljc1NzVMOTcuMDM4IDU5Ljg1MzRaTTk0LjkxNzkgNTkuNzgxNkM5NS40ODM1IDYwLjM4NjkgOTYuNDMyNyA2MC40MTkgOTcuMDM4IDU5Ljg1MzRMOTYuMDEzOCA1OC43NTc1VjU4Ljc1NzVMOTQuOTE3OSA1OS43ODE2Wk04Ny44NDc2IDU0LjkyOTlDOTAuNTUwMyA1Ni4wMTcxIDkyLjk1OSA1Ny42ODU2IDk0LjkxNzkgNTkuNzgxNkw5Ni4wMTM4IDU4Ljc1NzVDOTMuOTA3NiA1Ni41MDM3IDkxLjMxNjcgNTQuNzA4NiA4OC40MDc0IDUzLjUzODNMODcuODQ3NiA1NC45Mjk5Wk04Ny4wMTU4IDUyLjk3ODVDODYuNzA2NiA1My43NDcgODcuMDc5IDU0LjYyMDcgODcuODQ3NiA1NC45Mjk5TDg4LjQwNzQgNTMuNTM4M0w4OC40MDc0IDUzLjUzODNMODcuMDE1OCA1Mi45Nzg1WlwiLFxuICBmaWxsOiBcIiMzQjM1NTJcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiODAuNDc2M1wiLFxuICBjeTogXCI3MC4wMTkzXCIsXG4gIHI6IFwiNi41MDQ2N1wiLFxuICBmaWxsOiBcIiMzMDQwRDZcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTcwLjUwMSA4Ni4wMjcyQzcxLjk0NyA4MS45MTI2IDc1Ljg2NyA3OC45NjI5IDgwLjQ3NTggNzguOTYyOUM4NS4wOTczIDc4Ljk2MjkgODkuMDI2MSA4MS45Mjg4IDkwLjQ2MjUgODYuMDYxMVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNjkuMjYwNyAyMy42NzQ3TDY5LjkxMTkgMjMuMzAyNkw2OS4yNjA3IDIzLjY3NDdaTTY4LjIzNzQgMjMuMzk1N0w2Ny44NjUzIDIyLjc0NDVINjcuODY1M0w2OC4yMzc0IDIzLjM5NTdaTTc5LjAwOTQgNDAuNzM1TDc4LjM1ODIgNDEuMTA3MUg3OC4zNTgyTDc5LjAwOTQgNDAuNzM1Wk04MS4zMTQyIDQxLjM2MzVMODEuNjg2MyA0Mi4wMTQ3SDgxLjY4NjNMODEuMzE0MiA0MS4zNjM1Wk04MS45NDI3IDQwLjczNUw4Mi41OTM5IDQxLjEwNzFMODEuOTQyNyA0MC43MzVaTTgyLjMxNTkgNDAuMDgxOUw4MS42NjQ3IDM5LjcwOThIODEuNjY0N0w4Mi4zMTU5IDQwLjA4MTlaTTgyLjU4MjUgMzkuNjE1NEw4My4yMzM3IDM5Ljk4NzVIODMuMjMzN0w4Mi41ODI1IDM5LjYxNTRaTTgzLjYwNTggMzkuMzM2M0w4My45Nzc5IDM4LjY4NTFMODMuNjA1OCAzOS4zMzYzWk04My44ODQ4IDQwLjM1OTZMODQuNTM2IDQwLjczMTdWNDAuNzMxN0w4My44ODQ4IDQwLjM1OTZaTTgzLjYxODMgNDAuODI2MUw4Mi45NjcxIDQwLjQ1NEg4Mi45NjcxTDgzLjYxODMgNDAuODI2MVpNODMuMjQ1MSA0MS40NzkyTDgyLjU5MzkgNDEuMTA3MUw4My4yNDUxIDQxLjQ3OTJaTTgyLjA1ODQgNDIuNjY1OUw4Mi40MzA1IDQzLjMxNzFMODIuMDU4NCA0Mi42NjU5Wk03Ny43MDcgNDEuNDc5Mkw3OC4zNTgyIDQxLjEwNzFMNzcuNzA3IDQxLjQ3OTJaTTY3Ljk1ODMgMjQuNDE5TDY3LjMwNzEgMjQuNzkxMUg2Ny4zMDcxTDY3Ljk1ODMgMjQuNDE5Wk05Ni41MDQ5IDE4LjI3NDZMOTcuMTU2MSAxOC42NDY3VjE4LjY0NjdMOTYuNTA0OSAxOC4yNzQ2Wk05Ni4yMjU4IDE3LjI1MTNMOTYuNTk3OSAxNi42MDAxVjE2LjYwMDFMOTYuMjI1OCAxNy4yNTEzWk04Ny43NjUyIDMzLjU2ODlMODguNDE2NCAzMy45NDFMODcuNzY1MiAzMy41Njg5Wk04Ni43NDIgMzMuODQ4TDg3LjExNDEgMzMuMTk2OEg4Ny4xMTQxTDg2Ljc0MiAzMy44NDhaTTg2LjQ2MjkgMzIuODI0N0w4NS44MTE3IDMyLjQ1MjZMODYuNDYyOSAzMi44MjQ3Wk05NS4yMDI1IDE3LjUzMDRMOTUuODUzNyAxNy45MDI1VjE3LjkwMjVMOTUuMjAyNSAxNy41MzA0Wk02OS45MTE5IDIzLjMwMjZDNjkuNTAwOSAyMi41ODM0IDY4LjU4NDYgMjIuMzMzNSA2Ny44NjUzIDIyLjc0NDVMNjguNjA5NSAyNC4wNDY4SDY4LjYwOTVMNjkuOTExOSAyMy4zMDI2Wk03OS42NjA2IDQwLjM2MjlMNjkuOTExOSAyMy4zMDI2TDY4LjYwOTUgMjQuMDQ2OEw3OC4zNTgyIDQxLjEwNzFMNzkuNjYwNiA0MC4zNjI5Wk04MC45NDIxIDQwLjcxMjRDODAuNDkxNyA0MC45Njk3IDc5LjkxNzkgNDAuODEzMiA3OS42NjA2IDQwLjM2MjlMNzguMzU4MiA0MS4xMDcxQzc5LjAyNjYgNDIuMjc2NyA4MC41MTY2IDQyLjY4MzEgODEuNjg2MyA0Mi4wMTQ3TDgwLjk0MjEgNDAuNzEyNFpNODEuMjkxNiA0MC4zNjI5QzgxLjIwODQgNDAuNTA4NSA4MS4wODc3IDQwLjYyOTEgODAuOTQyMSA0MC43MTI0TDgxLjY4NjMgNDIuMDE0N0M4Mi4wNjQ0IDQxLjc5ODYgODIuMzc3OCA0MS40ODUyIDgyLjU5MzkgNDEuMTA3MUw4MS4yOTE2IDQwLjM2MjlaTTgxLjY2NDcgMzkuNzA5OEw4MS4yOTE2IDQwLjM2MjlMODIuNTkzOSA0MS4xMDcxTDgyLjk2NzEgNDAuNDU0TDgxLjY2NDcgMzkuNzA5OFpNODEuOTMxMyAzOS4yNDMzTDgxLjY2NDcgMzkuNzA5OEw4Mi45NjcxIDQwLjQ1NEw4My4yMzM3IDM5Ljk4NzVMODEuOTMxMyAzOS4yNDMzWk04My45Nzc5IDM4LjY4NTFDODMuMjU4NiAzOC4yNzQxIDgyLjM0MjMgMzguNTI0IDgxLjkzMTMgMzkuMjQzM0w4My4yMzM3IDM5Ljk4NzVMODMuOTc3OSAzOC42ODUxWk04NC41MzYgNDAuNzMxN0M4NC45NDcgNDAuMDEyNCA4NC42OTcyIDM5LjA5NjIgODMuOTc3OSAzOC42ODUxTDgzLjIzMzcgMzkuOTg3NUg4My4yMzM3TDg0LjUzNiA0MC43MzE3Wk04NC4yNjk1IDQxLjE5ODJMODQuNTM2IDQwLjczMTdMODMuMjMzNyAzOS45ODc1TDgyLjk2NzEgNDAuNDU0TDg0LjI2OTUgNDEuMTk4MlpNODMuODk2MyA0MS44NTEzTDg0LjI2OTUgNDEuMTk4Mkw4Mi45NjcxIDQwLjQ1NEw4Mi41OTM5IDQxLjEwNzFMODMuODk2MyA0MS44NTEzWk04Mi40MzA1IDQzLjMxNzFDODMuMDQxMiA0Mi45NjgxIDgzLjU0NzMgNDIuNDYyIDgzLjg5NjMgNDEuODUxM0w4Mi41OTM5IDQxLjEwNzFDODIuMzc3OCA0MS40ODUyIDgyLjA2NDQgNDEuNzk4NiA4MS42ODYzIDQyLjAxNDdMODIuNDMwNSA0My4zMTcxWk03Ny4wNTU4IDQxLjg1MTNDNzguMTM1MiA0My43NDAyIDgwLjU0MTUgNDQuMzk2NSA4Mi40MzA1IDQzLjMxNzFMODEuNjg2MyA0Mi4wMTQ3QzgwLjUxNjYgNDIuNjgzMSA3OS4wMjY2IDQyLjI3NjcgNzguMzU4MiA0MS4xMDcxTDc3LjA1NTggNDEuODUxM1pNNjcuMzA3MSAyNC43OTExTDc3LjA1NTggNDEuODUxM0w3OC4zNTgyIDQxLjEwNzFMNjguNjA5NSAyNC4wNDY4TDY3LjMwNzEgMjQuNzkxMVpNNjcuODY1MyAyMi43NDQ1QzY3LjE0NiAyMy4xNTU1IDY2Ljg5NjEgMjQuMDcxOCA2Ny4zMDcxIDI0Ljc5MTFMNjguNjA5NSAyNC4wNDY4TDY3Ljg2NTMgMjIuNzQ0NVpNOTcuMTU2MSAxOC42NDY3Qzk3LjU2NzEgMTcuOTI3NCA5Ny4zMTcyIDE3LjAxMTEgOTYuNTk3OSAxNi42MDAxTDk1Ljg1MzcgMTcuOTAyNVYxNy45MDI1TDk3LjE1NjEgMTguNjQ2N1pNODguNDE2NCAzMy45NDFMOTcuMTU2MSAxOC42NDY3TDk1Ljg1MzcgMTcuOTAyNUw4Ny4xMTQxIDMzLjE5NjhMODguNDE2NCAzMy45NDFaTTg2LjM2OTggMzQuNDk5MkM4Ny4wODkxIDM0LjkxMDIgODguMDA1NCAzNC42NjAzIDg4LjQxNjQgMzMuOTQxTDg3LjExNDEgMzMuMTk2OEg4Ny4xMTQxTDg2LjM2OTggMzQuNDk5MlpNODUuODExNyAzMi40NTI2Qzg1LjQwMDcgMzMuMTcxOSA4NS42NTA2IDM0LjA4ODIgODYuMzY5OSAzNC40OTkyTDg3LjExNDEgMzMuMTk2OFYzMy4xOTY4TDg1LjgxMTcgMzIuNDUyNlpNOTQuNTUxMyAxNy4xNTgzTDg1LjgxMTcgMzIuNDUyNkw4Ny4xMTQxIDMzLjE5NjhMOTUuODUzNyAxNy45MDI1TDk0LjU1MTMgMTcuMTU4M1pNOTYuNTk3OSAxNi42MDAxQzk1Ljg3ODYgMTYuMTg5MSA5NC45NjIzIDE2LjQzOSA5NC41NTEzIDE3LjE1ODNMOTUuODUzNyAxNy45MDI1TDk1Ljg1MzcgMTcuOTAyNUw5Ni41OTc5IDE2LjYwMDFaXCIsXG4gIGZpbGw6IFwiIzNCMzU1MlwiXG59KSk7XG5leHBvcnQgZGVmYXVsdCBJZGVudGl0eUNhcmQ7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBjb25zdCBMYXVuY2ggPSAoe1xuICB3aWR0aCA9IDE2NSxcbiAgaGVpZ2h0ID0gMTg0XG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gIHdpZHRoOiB3aWR0aCxcbiAgaGVpZ2h0OiBoZWlnaHQsXG4gIHZpZXdCb3g6IFwiMCAwIDE2NSAxODRcIixcbiAgdmVyc2lvbjogXCIxLjFcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgaWQ6IFwiU3ltYm9sc1wiLFxuICBzdHJva2U6IFwibm9uZVwiLFxuICBzdHJva2VXaWR0aDogXCIxXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICBmaWxsUnVsZTogXCJldmVub2RkXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gIGlkOiBcIkdyb3VwXCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMi4wMDAwMDAsIDEuMDAwMDAwKVwiLFxuICBmaWxsUnVsZTogXCJub256ZXJvXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTgwLjUsMTYzLjY3NTU2IEw4MC41LDE3Ny4wNzE3OTcgQzgwLjUsMTc5LjI4MDkzNiA3OC43MDkxMzksMTgxLjA3MTc5NyA3Ni41LDE4MS4wNzE3OTcgQzc1Ljc5Nzg1MzMsMTgxLjA3MTc5NyA3NS4xMDgwNzY4LDE4MC44ODY5NzIgNzQuNSwxODAuNTM1ODk4IEw1LjM5MjY1MDE1LDE0MC42MzY3NTEgTDUuMzkyNjUwMTUsMTQwLjYzNjc1MSBDMi4yOTg2MzkzOCwxMzguODUwNDIzIDAuMzkyNjUwMTUsMTM1LjU0OTE1MyAwLjM5MjY1MDE1LDEzMS45NzY0OTcgTDAuMzkyNjUwMTUsNTEuMDIzNTAyNyBDMC4zOTI2NTAxNSw0Ny40NTA4NDY4IDIuMjk4NjM5MzgsNDQuMTQ5NTc2NiA1LjM5MjY1MDE1LDQyLjM2MzI0ODcgTDc1LjUsMS44ODY3NTEzNSBDNzguNTk0MDEwOCwwLjEwMDQyMzM5NiA4Mi40MDU5ODkyLDAuMTAwNDIzMzk2IDg1LjUsMS44ODY3NTEzNSBMMTU1LjYwNzM1LDQyLjM2MzI0ODcgQzE1OC43MDEzNjEsNDQuMTQ5NTc2NiAxNjAuNjA3MzUsNDcuNDUwODQ2OCAxNjAuNjA3MzUsNTEuMDIzNTAyNyBMMTYwLjYwNzM1LDEzMS45NzY0OTcgQzE2MC42MDczNSwxMzUuNTQ5MTUzIDE1OC43MDEzNjEsMTM4Ljg1MDQyMyAxNTUuNjA3MzUsMTQwLjYzNjc1MSBMOTQuMDQwNzYyNCwxNzYuMTgyMjM3XCIsXG4gIGlkOiBcIlBhdGhcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiM1wiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICBpZDogXCJHcm91cC0xMVwiLFxuICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDQ3LjAwMDAwMCwgMjEuMDAwMDAwKVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIyXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTUzLjk5NDI1NzksMzkuNTIxOTQ3MSBMNTUuODI4ODc5NywzNS44NTI3MDM1IEM1Ni4zMjI4NTgyLDM0Ljg2NDc0NjUgNTcuNTI0MjA0MywzNC40NjQyOTc4IDU4LjUxMjE2MTMsMzQuOTU4Mjc2MyBDNTguODk5MjE2MSwzNS4xNTE4MDM3IDU5LjIxMzA2MTEsMzUuNDY1NjQ4NyA1OS40MDY1ODg1LDM1Ljg1MjcwMzUgTDYxLjI0MTIxMDMsMzkuNTIxOTQ3MSBDNjIuNTYwMzM2OSw0Mi4xNjAyMDAzIDYzLjI0NzA5MzYsNDUuMDY5MzQ4NiA2My4yNDcwOTM2LDQ4LjAxOTAwNTQgTDYzLjI0NzA5MzYsMTIyLjA5NTMyOSBDNjMuMjQ3MDkzNiwxMjIuNjQ3NjEzIDYyLjc5OTM3ODQsMTIzLjA5NTMyOSA2Mi4yNDcwOTM2LDEyMy4wOTUzMjkgTDUyLjk4ODM3NDYsMTIzLjA5NTMyOSBDNTIuNDM2MDg5OCwxMjMuMDk1MzI5IDUxLjk4ODM3NDYsMTIyLjY0NzYxMyA1MS45ODgzNzQ2LDEyMi4wOTUzMjkgTDUxLjk4ODM3NDYsNDguMDE5MDA1NCBDNTEuOTg4Mzc0Niw0NS4wNjkzNDg2IDUyLjY3NTEzMTMsNDIuMTYwMjAwMyA1My45OTQyNTc5LDM5LjUyMTk0NzEgWlwiLFxuICBpZDogXCJSZWN0YW5nbGVcIixcbiAgZmlsbDogXCIjRkZGRkZGXCIsXG4gIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk01Ljc1ODc4OTczLDM5LjUyMTk0NzEgTDcuNTkzNDExNTIsMzUuODUyNzAzNSBDOC4wODczOTAwMiwzNC44NjQ3NDY1IDkuMjg4NzM2MSwzNC40NjQyOTc4IDEwLjI3NjY5MzEsMzQuOTU4Mjc2MyBDMTAuNjYzNzQ3OSwzNS4xNTE4MDM3IDEwLjk3NzU5MjksMzUuNDY1NjQ4NyAxMS4xNzExMjAzLDM1Ljg1MjcwMzUgTDEzLjAwNTc0MjEsMzkuNTIxOTQ3MSBDMTQuMzI0ODY4Nyw0Mi4xNjAyMDAzIDE1LjAxMTYyNTQsNDUuMDY5MzQ4NiAxNS4wMTE2MjU0LDQ4LjAxOTAwNTQgTDE1LjAxMTYyNTQsMTIyLjA5NTMyOSBDMTUuMDExNjI1NCwxMjIuNjQ3NjEzIDE0LjU2MzkxMDIsMTIzLjA5NTMyOSAxNC4wMTE2MjU0LDEyMy4wOTUzMjkgTDQuNzUyOTA2MzYsMTIzLjA5NTMyOSBDNC4yMDA2MjE2MSwxMjMuMDk1MzI5IDMuNzUyOTA2MzYsMTIyLjY0NzYxMyAzLjc1MjkwNjM2LDEyMi4wOTUzMjkgTDMuNzUyOTA2MzYsNDguMDE5MDA1NCBDMy43NTI5MDYzNiw0NS4wNjkzNDg2IDQuNDM5NjYzMTEsNDIuMTYwMjAwMyA1Ljc1ODc4OTczLDM5LjUyMTk0NzEgWlwiLFxuICBpZDogXCJSZWN0YW5nbGVcIixcbiAgZmlsbDogXCIjRkZGRkZGXCIsXG4gIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0yNi41NTcxMjMyLDcuODI0NDUzMTEgTDMwLjIwNjE5ODIsMi41Mjg1NTA3IEMzMS40NTk2Mzc1LDAuNzA5NDM0MTg5IDMzLjk1MDQzNjIsMC4yNTA4NjIyNDcgMzUuNzY5NTUyNywxLjUwNDMwMTYgQzM2LjE3MDQ1NzIsMS43ODA1Mzk3NiAzNi41MTc1NjM3LDIuMTI3NjQ2MjggMzYuNzkzODAxOCwyLjUyODU1MDcgTDQwLjQ0Mjg3NjgsNy44MjQ0NTMxMSBDNDQuOTY0NTQwOCwxNC4zODY3NDQgNDcuMzg1NzUzNSwyMi4xNjc5NDUxIDQ3LjM4NTc1MzUsMzAuMTM3MjA1MiBMNDcuMzg1NzUzNSw5My44MjI2NTkxIEw0Ny4zODU3NTM1LDkzLjgyMjY1OTEgTDE5LjYxNDI0NjUsOTMuODIyNjU5MSBMMTkuNjE0MjQ2NSwzMC4xMzcyMDUyIEMxOS42MTQyNDY1LDIyLjE2Nzk0NTEgMjIuMDM1NDU5MiwxNC4zODY3NDQgMjYuNTU3MTIzMiw3LjgyNDQ1MzExIFpcIixcbiAgaWQ6IFwiUmVjdGFuZ2xlXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNDAuNTc0NTczOCwxMTcuMzU1MzYyIEw0MS42Mzk5NjczLDY0LjQ5MjM0NTcgTDQ1LjAwMDcwMjcsNzcuODMwMzA3OCBDNDYuODc1NzMzOCw4NS4yNzE4NjE3IDUwLjYzMzQ5MjksOTIuMTA1OTc2IDU1LjkxMjc1NTEsOTcuNjc1NzAyOCBMNTkuMjExMTIyLDEwMS4xNTU1NDYgQzYyLjA2NTgyMjMsMTA0LjE2NzMxMSA2My45OTYyMDU5LDEwNy45MzUwOCA2NC43NzMwMzY1LDExMi4wMTE0MjQgTDY1LjU0ODUwNjYsMTE2LjA4MDYyOSBDNjUuNTQ2MzU5OSwxMTYuNDc3MTA4IDY1LjQ1MDQ1NjUsMTE2LjgxMDU2NiA2NS4yNTY2OTUzLDExNy4wNDQ3NCBDNjUuMDg4OTg0NSwxMTcuMjQ3NDI5IDY0Ljg0Nzg4NDQsMTE3LjM1NTM2MiA2NC41ODI4NjYsMTE3LjM1NTM2MiBMNDAuNTc0NTczOCwxMTcuMzU1MzYyIFpcIixcbiAgaWQ6IFwiUGF0aC0zXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMS4wMjAzNTY5MiwxMTcuMzU1MzYyIEwyLjA4NTc1MDQyLDY0LjQ5MjM0NTcgTDUuNDQ2NDg1ODEsNzcuODMwMzA3OCBDNy4zMjE1MTY5Miw4NS4yNzE4NjE3IDExLjA3OTI3Niw5Mi4xMDU5NzYgMTYuMzU4NTM4Myw5Ny42NzU3MDI4IEwxOS42NTY5MDUyLDEwMS4xNTU1NDYgQzIyLjUxMTYwNTQsMTA0LjE2NzMxMSAyNC40NDE5ODksMTA3LjkzNTA4IDI1LjIxODgxOTYsMTEyLjAxMTQyNCBMMjUuOTk0Mjg5NywxMTYuMDgwNjI5IEMyNS45OTIxNDMsMTE2LjQ3NzEwOCAyNS44OTYyMzk2LDExNi44MTA1NjYgMjUuNzAyNDc4NSwxMTcuMDQ0NzQgQzI1LjUzNDc2NzYsMTE3LjI0NzQyOSAyNS4yOTM2Njc1LDExNy4zNTUzNjIgMjUuMDI4NjQ5MSwxMTcuMzU1MzYyIEwxLjAyMDM1NjkyLDExNy4zNTUzNjIgWlwiLFxuICBpZDogXCJQYXRoLTMtQ29weVwiLFxuICBmaWxsOiBcIiMzMDQwRDZcIixcbiAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxMy43MjI4OTIsIDg3LjY5MTIyMykgc2NhbGUoLTEsIDEpIHRyYW5zbGF0ZSgtMTMuNzIyODkyLCAtODcuNjkxMjIzKSBcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTI2Ljk0NzQ1NjgsNDYuNjE1ODA0NyBMMjkuMDY4ODcyOCw0Mi41NTc0NDM4IEMzMC4zNDgxMTQsNDAuMTEwMTk5OCAzMy4zNjkwMjcxLDM5LjE2MzM0NjQgMzUuODE2MjcxLDQwLjQ0MjU4NzYgQzM2LjcyMDQ5MDcsNDAuOTE1MjQ3OSAzNy40NTg0NjY5LDQxLjY1MzIyNDEgMzcuOTMxMTI3Miw0Mi41NTc0NDM4IEw0MC4wNTI1NDMyLDQ2LjYxNTgwNDcgQzQxLjg0NjI4MzEsNTAuMDQ3MzA3MiA0Mi43ODMxMzI1LDUzLjg2MTg2MzQgNDIuNzgzMTMyNSw1Ny43MzM5MDU4IEw0Mi43ODMxMzI1LDEyMi44NzU2ODUgTDQyLjc4MzEzMjUsMTIyLjg3NTY4NSBMMjQuMjE2ODY3NSwxMjIuODc1Njg1IEwyNC4yMTY4Njc1LDU3LjczMzkwNTggQzI0LjIxNjg2NzUsNTMuODYxODYzNCAyNS4xNTM3MTY5LDUwLjA0NzMwNzIgMjYuOTQ3NDU2OCw0Ni42MTU4MDQ3IFpcIixcbiAgaWQ6IFwiUmVjdGFuZ2xlXCIsXG4gIGZpbGw6IFwiI0ZGRkZGRlwiLFxuICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNDYuNjI2NTA2LDEyNS4xMDQ2MDEgTDIwLjM3MzQ5NCwxMjUuMTA0NjAxIEwyMC4zNzM0OTQsMTE4LjAzMjMxMiBDMjAuMzczNDk0LDExNi4wNzkzNTMgMjEuMTY1MDg2OSwxMTQuMzExMjgxIDIyLjQ0NDkxOTUsMTEzLjAzMTQ0OCBDMjMuNzI0NzUyMSwxMTEuNzUxNjE2IDI1LjQ5MjgyNDQsMTEwLjk2MDAyMyAyNy40NDU3ODMxLDExMC45NjAwMjMgTDM5LjU1NDIxNjksMTEwLjk2MDAyMyBDNDEuNTA3MTc1NiwxMTAuOTYwMDIzIDQzLjI3NTI0NzksMTExLjc1MTYxNiA0NC41NTUwODA1LDExMy4wMzE0NDggQzQ1LjgzNDkxMzEsMTE0LjMxMTI4MSA0Ni42MjY1MDYsMTE2LjA3OTM1MyA0Ni42MjY1MDYsMTE4LjAzMjMxMiBMNDYuNjI2NTA2LDEyNS4xMDQ2MDEgWlwiLFxuICBpZDogXCJSZWN0YW5nbGVcIixcbiAgZmlsbDogXCIjRkZGRkZGXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICB4MTogXCIzMy41XCIsXG4gIHkxOiBcIjEwMS40ODQxMTlcIixcbiAgeDI6IFwiMzMuNVwiLFxuICB5MjogXCIxMjkuMjAzMzMyXCIsXG4gIGlkOiBcIkxpbmVcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMlwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pKSkpKTtcbmV4cG9ydCBkZWZhdWx0IExhdW5jaDsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3QgTW9vbiA9ICh7XG4gIHdpZHRoID0gMjYwLFxuICBoZWlnaHQgPSAyNjBcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgd2lkdGg6IHdpZHRoLFxuICBoZWlnaHQ6IGhlaWdodCxcbiAgdmlld0JveDogXCIwIDAgMjYwIDI2MFwiLFxuICB2ZXJzaW9uOiBcIjEuMVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRlZnNcIiwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBpZDogXCJwYXRoLTFcIixcbiAgY3g6IFwiMTA2XCIsXG4gIGN5OiBcIjEwNlwiLFxuICByOiBcIjEwNlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIiwge1xuICB4OiBcIi0xNy4wJVwiLFxuICB5OiBcIi0xNy4wJVwiLFxuICB3aWR0aDogXCIxMzQuMCVcIixcbiAgaGVpZ2h0OiBcIjEzNC4wJVwiLFxuICBmaWx0ZXJVbml0czogXCJvYmplY3RCb3VuZGluZ0JveFwiLFxuICBpZDogXCJmaWx0ZXItMlwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImZlT2Zmc2V0XCIsIHtcbiAgZHg6IFwiMFwiLFxuICBkeTogXCIwXCIsXG4gIGluOiBcIlNvdXJjZUFscGhhXCIsXG4gIHJlc3VsdDogXCJzaGFkb3dPZmZzZXRPdXRlcjFcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVHYXVzc2lhbkJsdXJcIiwge1xuICBzdGREZXZpYXRpb246IFwiMTJcIixcbiAgaW46IFwic2hhZG93T2Zmc2V0T3V0ZXIxXCIsXG4gIHJlc3VsdDogXCJzaGFkb3dCbHVyT3V0ZXIxXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImZlQ29sb3JNYXRyaXhcIiwge1xuICB2YWx1ZXM6IFwiMCAwIDAgMCAwLjk1ODExMjI5OSAgIDAgMCAwIDAgMC45MTA1Nzc4MzQgICAwIDAgMCAwIDAuODU1OTEzNTc5ICAwIDAgMCAxIDBcIixcbiAgdHlwZTogXCJtYXRyaXhcIixcbiAgaW46IFwic2hhZG93Qmx1ck91dGVyMVwiXG59KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgaWQ6IFwicGF0aC0zXCIsXG4gIGN4OiBcIjEwNlwiLFxuICBjeTogXCIxMDZcIixcbiAgcjogXCIxMDZcIlxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICBpZDogXCJNYWluLVRlbXBsYXRlc1wiLFxuICBzdHJva2U6IFwibm9uZVwiLFxuICBzdHJva2VXaWR0aDogXCIxXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICBmaWxsUnVsZTogXCJldmVub2RkXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gIGlkOiBcIkdyb3VwLTEyXCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMjQuMDAwMDAwLCAyNC4wMDAwMDApXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gIGlkOiBcIk92YWxcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1c2VcIiwge1xuICBmaWxsOiBcImJsYWNrXCIsXG4gIGZpbGxPcGFjaXR5OiBcIjFcIixcbiAgZmlsdGVyOiBcInVybCgjZmlsdGVyLTIpXCIsXG4gIGhyZWY6IFwiI3BhdGgtMVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1c2VcIiwge1xuICBmaWxsOiBcIiNGNEU4REJcIixcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBocmVmOiBcIiNwYXRoLTFcIlxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICBpZDogXCJQYXRoLTdcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJtYXNrXCIsIHtcbiAgaWQ6IFwibWFzay00XCIsXG4gIGZpbGw6IFwid2hpdGVcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1c2VcIiwge1xuICBocmVmOiBcIiNwYXRoLTNcIlxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInVzZVwiLCB7XG4gIGlkOiBcIk1hc2tcIixcbiAgZmlsbDogXCIjRjRFOERCXCIsXG4gIGhyZWY6IFwiI3BhdGgtM1wiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMzkuODA2OTYyNiwzLjc2NzQ3MDY2IEM0NS4zMDIxMTg0LDExNS41OTMxNDUgOTcuMjg5NDEyNSwxNzYuMDQzMTI0IDE5NS43Njg4NDUsMTg1LjExNzQwNyBDMjk0LjI0ODI3OCwxOTQuMTkxNjg5IDI1My41NzU0NTcsMjE1Ljg3MjU1MyA3My43NTAzODQsMjUwLjE2IEwtMzMuOTIsMTYwLjc4MDYzNyBMLTI1LjI5MDc1NDYsMjQuMDkwOTIwOSBMMjYuNTQ1NzgyMiwtNC4yNCBMMzkuODA2OTYyNiwzLjc2NzQ3MDY2IFpcIixcbiAgZmlsbDogXCIjQzhCQkIyXCIsXG4gIG1hc2s6IFwidXJsKCNtYXNrLTQpXCJcbn0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBpZDogXCJPdmFsXCIsXG4gIGZpbGw6IFwiI0M4QkJCMlwiLFxuICBjeDogXCI4MC41XCIsXG4gIGN5OiBcIjM3LjVcIixcbiAgcjogXCIyMi41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gIGlkOiBcIk92YWwtQ29weS0zXCIsXG4gIGZpbGw6IFwiI0M4QkJCMlwiLFxuICBjeDogXCIxNThcIixcbiAgY3k6IFwiNjZcIixcbiAgcjogXCIxN1wiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBpZDogXCJPdmFsLUNvcHktNFwiLFxuICBzdHJva2U6IFwiI0Y0RThEQlwiLFxuICBzdHJva2VXaWR0aDogXCIzXCIsXG4gIGZpbGw6IFwiI0M4QkJCMlwiLFxuICBjeDogXCIxMjRcIixcbiAgY3k6IFwiMTY2XCIsXG4gIHI6IFwiMTdcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgaWQ6IFwiT3ZhbC1Db3B5LTVcIixcbiAgc3Ryb2tlOiBcIiNGNEU4REJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS42ODc1XCIsXG4gIGZpbGw6IFwiI0M4QkJCMlwiLFxuICBjeDogXCI1OC41XCIsXG4gIGN5OiBcIjkyLjVcIixcbiAgcjogXCI5LjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgaWQ6IFwiT3ZhbC1Db3B5XCIsXG4gIGZpbGw6IFwiI0M4QkJCMlwiLFxuICBjeDogXCIxNTcuNVwiLFxuICBjeTogXCIxMjQuNVwiLFxuICByOiBcIjguNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBpZDogXCJPdmFsLUNvcHktNlwiLFxuICBmaWxsOiBcIiNDOEJCQjJcIixcbiAgY3g6IFwiMTkwXCIsXG4gIGN5OiBcIjk2XCIsXG4gIHI6IFwiM1wiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBpZDogXCJPdmFsLUNvcHktOFwiLFxuICBmaWxsOiBcIiNDOEJCQjJcIixcbiAgY3g6IFwiODFcIixcbiAgY3k6IFwiMTEzXCIsXG4gIHI6IFwiM1wiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBpZDogXCJPdmFsLUNvcHktN1wiLFxuICBmaWxsOiBcIiNDOEJCQjJcIixcbiAgY3g6IFwiMTI2XCIsXG4gIGN5OiBcIjI5XCIsXG4gIHI6IFwiM1wiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBpZDogXCJPdmFsLUNvcHktMlwiLFxuICBmaWxsOiBcIiNDOEJCQjJcIixcbiAgY3g6IFwiOTcuNVwiLFxuICBjeTogXCIxMDEuNVwiLFxuICByOiBcIjguNVwiXG59KSkpKTtcbmV4cG9ydCBkZWZhdWx0IE1vb247IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBjb25zdCBOb3RGb3VuZCA9ICh7XG4gIHdpZHRoID0gMTUyLFxuICBoZWlnaHQgPSAxNTJcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgd2lkdGg6IHdpZHRoLFxuICBoZWlnaHQ6IGhlaWdodCxcbiAgdmlld0JveDogXCIwIDAgMTUyIDE1MlwiLFxuICBmaWxsOiBcIm5vbmVcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCI3NlwiLFxuICBjeTogXCI3NlwiLFxuICByOiBcIjc2XCIsXG4gIGZpbGw6IFwid2hpdGVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTQ1Ljk4MDUgODYuOTE1MkM0OC45NDEzIDEwMy45NjMgNjMuODA4NSAxMTYuOTI3IDgxLjcwMzUgMTE2LjkyN0MxMDEuNzI5IDExNi45MjcgMTE3Ljk2MyAxMDAuNjkzIDExNy45NjMgODAuNjY3NUMxMTcuOTYzIDYwLjY0MiAxMDEuNzI5IDQ0LjQwODIgODEuNzAzNSA0NC40MDgyQzc4LjgzNjkgNDQuNDA4MiA3Ni4wNDgxIDQ0Ljc0MDggNzMuMzczNCA0NS4zNjk2XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMDUuOTA2IDExOC45MzRMMTA1LjUwNSAxMTguM0wxMDUuOTA2IDExOC45MzRaTTEwNi4xMzkgMTE3LjlMMTA2Ljc3NCAxMTcuNUwxMDYuNzc0IDExNy40OTlMMTA2LjEzOSAxMTcuOVpNOTUuNDY5NyAxMjMuNzYzTDk1LjI0NTggMTIzLjA0N0w5NS40Njk3IDEyMy43NjNaTTk0LjUzIDEyMy4yNzFMOTUuMjQ1OCAxMjMuMDQ3SDk1LjI0NThMOTQuNTMgMTIzLjI3MVpNOTUuMDIxOSAxMjIuMzMxTDk0Ljc5NzkgMTIxLjYxNkg5NC43OTc5TDk1LjAyMTkgMTIyLjMzMVpNMTA1LjEwNSAxMTcuNjY2TDEwNC43MDUgMTE3LjAzMkwxMDUuMTA1IDExNy42NjZaTTEyNC4zMiA5NS42NjlMMTIzLjYxIDk1LjQyNkwxMjMuNjEgOTUuNDI2TDEyNC4zMiA5NS42NjlaTTExMC42NTYgMTE1LjQ3OUwxMTAuMTc2IDExNC45MDJIMTEwLjE3NkwxMTAuNjU2IDExNS40NzlaTTEwOS42IDExNS4zODNMMTA5LjAyNCAxMTUuODYzTDEwOS4wMjQgMTE1Ljg2M0wxMDkuNiAxMTUuMzgzWk0xMDkuNjk2IDExNC4zMjZMMTEwLjE3NiAxMTQuOTAyTDExMC4xNzYgMTE0LjkwMkwxMDkuNjk2IDExNC4zMjZaTTEyMi45IDk1LjE4M0wxMjMuNjEgOTUuNDI2Vjk1LjQyNkwxMjIuOSA5NS4xODNaTTEwNi4zMDYgMTE5LjU2OUMxMDcuMDA3IDExOS4xMjYgMTA3LjIxNiAxMTguMiAxMDYuNzc0IDExNy41TDEwNS41MDUgMTE4LjNMMTA2LjMwNiAxMTkuNTY5Wk05NS42OTM3IDEyNC40NzlDOTkuNDY3NyAxMjMuMjk4IDEwMy4wMjkgMTIxLjYzNyAxMDYuMzA2IDExOS41NjlMMTA1LjUwNSAxMTguM0MxMDIuMzM3IDEyMC4zMDEgOTguODkzOCAxMjEuOTA2IDk1LjI0NTggMTIzLjA0N0w5NS42OTM3IDEyNC40NzlaTTkzLjgxNDIgMTIzLjQ5NUM5NC4wNjE2IDEyNC4yODYgOTQuOTAzIDEyNC43MjYgOTUuNjkzNyAxMjQuNDc5TDk1LjI0NTggMTIzLjA0N0g5NS4yNDU4TDkzLjgxNDIgMTIzLjQ5NVpNOTQuNzk3OSAxMjEuNjE2Qzk0LjAwNzMgMTIxLjg2MyA5My41NjY5IDEyMi43MDQgOTMuODE0MiAxMjMuNDk1TDk1LjI0NTggMTIzLjA0N0g5NS4yNDU4TDk0Ljc5NzkgMTIxLjYxNlpNMTA0LjcwNSAxMTcuMDMyQzEwMS42NDQgMTE4Ljk2NCA5OC4zMTk5IDEyMC41MTQgOTQuNzk3OSAxMjEuNjE2TDk1LjI0NTggMTIzLjA0N0M5OC44OTM4IDEyMS45MDYgMTAyLjMzNyAxMjAuMzAxIDEwNS41MDUgMTE4LjNMMTA0LjcwNSAxMTcuMDMyWk0xMDYuNzc0IDExNy40OTlDMTA2LjMzMSAxMTYuNzk5IDEwNS40MDUgMTE2LjU5IDEwNC43MDUgMTE3LjAzMkwxMDUuNTA1IDExOC4zTDEwNi43NzQgMTE3LjQ5OVpNMTI1LjAyOSA5NS45MTJDMTI1LjI5OCA5NS4xMjgyIDEyNC44OCA5NC4yNzUzIDEyNC4wOTYgOTQuMDA2OUwxMjMuNjEgOTUuNDI2Vjk1LjQyNkwxMjUuMDI5IDk1LjkxMlpNMTExLjEzNiAxMTYuMDU1QzExNy40NDggMTEwLjc5NiAxMjIuMzEgMTAzLjg1MyAxMjUuMDI5IDk1LjkxMkwxMjMuNjEgOTUuNDI2QzEyMC45ODEgMTAzLjEwMiAxMTYuMjgxIDEwOS44MTYgMTEwLjE3NiAxMTQuOTAyTDExMS4xMzYgMTE2LjA1NVpNMTA5LjAyNCAxMTUuODYzQzEwOS41NTQgMTE2LjQ5OSAxMTAuNSAxMTYuNTg1IDExMS4xMzYgMTE2LjA1NUwxMTAuMTc2IDExNC45MDJIMTEwLjE3NkwxMDkuMDI0IDExNS44NjNaTTEwOS4yMTYgMTEzLjc1QzEwOC41NzkgMTE0LjI4IDEwOC40OTMgMTE1LjIyNiAxMDkuMDI0IDExNS44NjNMMTEwLjE3NiAxMTQuOTAySDExMC4xNzZMMTA5LjIxNiAxMTMuNzVaTTEyMi4xOTEgOTQuOTRDMTE5LjY1MyAxMDIuMzUxIDExNS4xMTQgMTA4LjgzNyAxMDkuMjE2IDExMy43NUwxMTAuMTc2IDExNC45MDJDMTE2LjI4MSAxMDkuODE2IDEyMC45ODEgMTAzLjEwMiAxMjMuNjEgOTUuNDI2TDEyMi4xOTEgOTQuOTRaTTEyNC4wOTYgOTQuMDA2OUMxMjMuMzEyIDkzLjczODUgMTIyLjQ1OSA5NC4xNTYzIDEyMi4xOTEgOTQuOTRMMTIzLjYxIDk1LjQyNlY5NS40MjZMMTI0LjA5NiA5NC4wMDY5WlwiLFxuICBmaWxsOiBcIiMzQjM1NTJcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk0xMDIuNTMxIDU5Ljg5NjJDMTAyLjA2IDU4Ljg2NTcgMTAzLjM0OSA1Ny45MjA5IDEwNC4xMjIgNTguNzQ5OUMxMDYuMjc4IDYxLjA2MzggMTA4LjY2MiA2My44OTY2IDEwOS43ODkgNjYuMTcxM0MxMTEuODkyIDcwLjQxNyAxMTMuMDc0IDc1LjIgMTEzLjA3NCA4MC4yNTkyQzExMy4wNzQgOTcuODA5NiA5OC44NDY3IDExMi4wMzcgODEuMjk2MyAxMTIuMDM3Qzc2LjI5NjkgMTEyLjAzNyA3MS41NjcxIDExMC44ODIgNjcuMzU5IDEwOC44MjZDNjUuMTA4OSAxMDcuNzI2IDYyLjMyMjQgMTA1LjQxMiA2MC4wMTE3IDEwMy4yODFDNTkuMTcyNiAxMDIuNTA3IDYwLjEzNyAxMDEuMTk3IDYxLjE3MzggMTAxLjY3NEM2My41MDUyIDEwMi43NDggNjYuMTE1OSAxMDMuNzk1IDY4LjExMTMgMTA0LjE2NkM3MC4wMDggMTA0LjUxOSA3MS45NjQgMTA0LjcwNCA3My45NjMgMTA0LjcwNEM5MS41MTM0IDEwNC43MDQgMTA1Ljc0MSA5MC40NzYzIDEwNS43NDEgNzIuOTI1OUMxMDUuNzQxIDcxLjIwOSAxMDUuNjA1IDY5LjUyMzggMTA1LjM0MiA2Ny44ODA3QzEwNC45ODcgNjUuNjUzNSAxMDMuNzQ4IDYyLjU1NzMgMTAyLjUzMSA1OS44OTYyWlwiLFxuICBmaWxsOiBcIiMzMDQwRDZcIixcbiAgZmlsbE9wYWNpdHk6IFwiMC4wNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNDkuNzExMiA5Ny43NzAxQzQyLjM2MTkgMTA4LjYwMyAzOS4yMjEzIDExNy4xMTggNDIuMjM2NiAxMjAuMTM0QzQ3LjQ4NyAxMjUuMzg0IDY5LjQxMzMgMTExLjk3IDkxLjIxMDMgOTAuMTczMkMxMTMuMDA3IDY4LjM3NjIgMTI2LjQyMSA0Ni40NDk5IDEyMS4xNzEgNDEuMTk5NUMxMTguMTQ0IDM4LjE3MzEgMTA5LjU3NyA0MS4zNDgxIDk4LjY4NzMgNDguNzU1NVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTM0Ljg1MTkgNTguMjU5NVY2OS42NjY5SDIzQzIxLjg5NTQgNjkuNjY2OSAyMSA2OC43NzE1IDIxIDY3LjY2NjlWNTAuMTExM1wiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCI1MS45NjMxXCIsXG4gIGN5OiBcIjY4Ljg1MTdcIixcbiAgcjogXCIxMS40MDc0XCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNTEuOTYzMSA1My40NDQzQzQ5LjAyMTYgNTMuNDQ0MyA0Ni4yNzI2IDU0LjI2ODYgNDMuOTM0NiA1NS42OTg4XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0zNC44NTE3IDY4Ljg1MjVWODAuMjU5OVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNODEuMjk2MiA1OC4yNTk1VjY5LjY2NjlINjkuNDQ0M0M2OC4zMzk4IDY5LjY2NjkgNjcuNDQ0MyA2OC43NzE1IDY3LjQ0NDMgNjcuNjY2OVY1MC4xMTEzXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk04MS4yOTYxIDY4Ljg1MjVWODAuMjU5OVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNzEuNzQxMSA5My44MzRDNzAuMzA5MSA5Mi40MDIxIDY3Ljk4NzUgOTIuNDAyMSA2Ni41NTU2IDkzLjgzNEM2NS4xMjM3IDk1LjI2NiA2NS4xMjM3IDk3LjU4NzYgNjYuNTU1NiA5OS4wMTk1XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMDUuMDk5IDkyLjg5OTVDMTAzLjk4NSA5MS43ODU3IDEwMi4xOCA5MS43ODU3IDEwMS4wNjYgOTIuODk5NUM5OS45NTIyIDk0LjAxMzIgOTkuOTUyMiA5NS44MTg5IDEwMS4wNjYgOTYuOTMyNlwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTAwLjU1NyA2MS4wMTQ4Qzk5LjMxOTYgNTguODcxNCA5Ni41Nzg3IDU4LjEzNyA5NC40MzUzIDU5LjM3NDVDOTIuMjkxOCA2MC42MTIgOTEuNTU3NCA2My4zNTI5IDkyLjc5NDkgNjUuNDk2M1wiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSk7XG5leHBvcnQgZGVmYXVsdCBOb3RGb3VuZDsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGNvbnN0IE5vdGVib29rID0gKHtcbiAgd2lkdGggPSAxNTIsXG4gIGhlaWdodCA9IDE1MlxufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB3aWR0aDogd2lkdGgsXG4gIGhlaWdodDogaGVpZ2h0LFxuICB2aWV3Qm94OiBcIjAgMCAxNTIgMTUyXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gIGN4OiBcIjc2XCIsXG4gIGN5OiBcIjc2XCIsXG4gIHI6IFwiNzZcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgeDogXCIyMy43NVwiLFxuICB5OiBcIjM5Ljc1XCIsXG4gIHdpZHRoOiBcIjEwNC41XCIsXG4gIGhlaWdodDogXCI3Mi40NTM1XCIsXG4gIHJ4OiBcIjMuMjVcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gIHg6IFwiMjUuNjkyNFwiLFxuICB5OiBcIjQxLjEwOTRcIixcbiAgd2lkdGg6IFwiMTAwLjYxMlwiLFxuICBoZWlnaHQ6IFwiNjkuNjk3OVwiLFxuICByeDogXCIyXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBmaWxsT3BhY2l0eTogXCIwLjA1XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0zMy42MTA0IDQ0LjI4NzFDMzMuNjEwNCA0My41OTY4IDM0LjE3IDQzLjAzNzEgMzQuODYwNCA0My4wMzcxSDExOC4zODlWMTA3LjY2N0MxMTguMzg5IDEwOC4zNTcgMTE3LjgzIDEwOC45MTcgMTE3LjEzOSAxMDguOTE3SDM0Ljg2MDRDMzQuMTcgMTA4LjkxNyAzMy42MTA0IDEwOC4zNTcgMzMuNjEwNCAxMDcuNjY3VjQ0LjI4NzFaXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0zOC41IDQ5LjVWNjMuNVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMzguNSA2OC4xNjY3VjcyLjgzMzNcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gIHg6IFwiNTAuMTE2MlwiLFxuICB5OiBcIjQ1LjU3MzJcIixcbiAgd2lkdGg6IFwiMjMuMDA3OFwiLFxuICBoZWlnaHQ6IFwiNjAuODA2MlwiLFxuICByeDogXCIyXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBmaWxsT3BhY2l0eTogXCIwLjA1XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk04Ny4wOTI4IDY0LjA2MjJIMTEwLjEwMVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNODcuMDkyOCA3MC42MzU1SDExMC4xMDFcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiMTA2LjgxNFwiLFxuICBjeTogXCI1NS40MzM3XCIsXG4gIHI6IFwiNC4xMDg1M1wiLFxuICBmaWxsOiBcIiMzMDQwRDZcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTg3LjA5MjggODkuNTM0OUgxMTAuMTAxXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk04Ny4wOTI4IDk2LjEwODFIMTEwLjEwMVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCIxMDYuODE0XCIsXG4gIGN5OiBcIjgwLjkwNzRcIixcbiAgcjogXCI0LjEwODUzXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTE4LjY1NyA0My4wMzcxSDEyMy4zMDNDMTIzLjk5MyA0My4wMzcxIDEyNC41NTMgNDMuNTk2OCAxMjQuNTUzIDQ0LjI4NzFWNjUuNzZDMTI0LjU1MyA2Ni40NTAzIDEyMy45OTMgNjcuMDEgMTIzLjMwMyA2Ny4wMUgxMTguNjU3VjQzLjAzNzFaXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMTguNzI4IDU1LjAyMzJIMTI0LjQ4XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk03NS45OTk3IDQzLjU0NjZWMTA4LjQwN1wiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNODAuNTE5MiA1NS4wMjMzQzgwLjUxOTIgNTIuNTI3MyA3OC40OTU4IDUwLjUwMzkgNzUuOTk5OCA1MC41MDM5QzczLjUwMzkgNTAuNTAzOSA3MS40ODA1IDUyLjUyNzMgNzEuNDgwNSA1NS4wMjMzXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk04MC41MTkyIDYzLjI0MDFDODAuNTE5MiA2MC43NDQxIDc4LjQ5NTggNTguNzIwNyA3NS45OTk4IDU4LjcyMDdDNzMuNTAzOSA1OC43MjA3IDcxLjQ4MDUgNjAuNzQ0MSA3MS40ODA1IDYzLjI0MDFcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTgwLjUxOTIgOTIuODIyMUM4MC41MTkyIDkwLjMyNjEgNzguNDk1OCA4OC4zMDI3IDc1Ljk5OTggODguMzAyN0M3My41MDM5IDg4LjMwMjcgNzEuNDgwNSA5MC4zMjYxIDcxLjQ4MDUgOTIuODIyMVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNODAuNTE5MiAxMDEuMDM5QzgwLjUxOTIgOTguNTQyOSA3OC40OTU4IDk2LjUxOTUgNzUuOTk5OCA5Ni41MTk1QzczLjUwMzkgOTYuNTE5NSA3MS40ODA1IDk4LjU0MjkgNzEuNDgwNSAxMDEuMDM5XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk01Ni41IDExOS41SDczLjVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTc4LjE5NDQgMTE5LjVIODQuODA1NlwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSk7XG5leHBvcnQgZGVmYXVsdCBOb3RlYm9vazsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGNvbnN0IFBhZGxvY2sgPSAoe1xuICB3aWR0aCA9IDE1MixcbiAgaGVpZ2h0ID0gMTUyXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gIHdpZHRoOiB3aWR0aCxcbiAgaGVpZ2h0OiBoZWlnaHQsXG4gIHZpZXdCb3g6IFwiMCAwIDE1MiAxNTJcIixcbiAgZmlsbDogXCJub25lXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiNzZcIixcbiAgY3k6IFwiNzZcIixcbiAgcjogXCI3NlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICB4OiBcIjM5Ljc1XCIsXG4gIHk6IFwiNjIuMjA4XCIsXG4gIHdpZHRoOiBcIjcyLjVcIixcbiAgaGVpZ2h0OiBcIjU2LjMxMjVcIixcbiAgcng6IFwiMy4yNVwiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNDUuNSA4OS40VjEwMC42XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk00NS41IDEwNS4yVjExMC44XCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgZDogXCJNNTQuNDE3IDY3LjMxMjVDNTQuNDE3IDY2LjIwNzkgNTUuMzEyNCA2NS4zMTI1IDU2LjQxNyA2NS4zMTI1SDEwNy4xNDZDMTA4LjI1MSA2NS4zMTI1IDEwOS4xNDYgNjYuMjA3OSAxMDkuMTQ2IDY3LjMxMjVWMTEzLjQxN0MxMDkuMTQ2IDExNC41MjEgMTA4LjI1MSAxMTUuNDE3IDEwNy4xNDYgMTE1LjQxN0g1Ni40MTdDNTUuMzEyNCAxMTUuNDE3IDU0LjQxNyAxMTQuNTIxIDU0LjQxNyAxMTMuNDE3VjY3LjMxMjVaXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBmaWxsT3BhY2l0eTogXCIwLjA1XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk01NC40MTcgNjEuOTU1NVY0Ny41ODMzQzU0LjQxNyAzNS42NjMyIDY0LjA4MDIgMjYgNzYuMDAwMyAyNkM4Ny45MjA1IDI2IDk3LjU4MzcgMzUuNjYzMiA5Ny41ODM3IDQ3LjU4MzNWNjEuOTU1NVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTg3LjAyNDQgMzcuOTY5NEw4Ni41Mjk1IDM3LjQwNTlMODUuOTY2IDM3LjkwMDhMODYuNDYwOSAzOC40NjQzTDg3LjAyNDQgMzcuOTY5NFpNOTAuMzg4NCA0NC40MDE5TDg5LjY2MDIgNDQuNTgxNEw4OS44Mzk2IDQ1LjMwOTZMOTAuNTY3OCA0NS4xMzAyTDkwLjM4ODQgNDQuNDAxOVpNODguMTUxNCAzNi45Nzk1TDg4LjcxNDkgMzYuNDg0NUw4OC4yMTk5IDM1LjkyMUw4Ny42NTY1IDM2LjQxNkw4OC4xNTE0IDM2Ljk3OTVaTTkxLjg0NDggNDQuMDQzTDkyLjAyNDMgNDQuNzcxM0w5Mi43NTI1IDQ0LjU5MThMOTIuNTczIDQzLjg2MzZMOTEuODQ0OCA0NC4wNDNaTTkwLjgzMzEgNDguMDgzN1Y0Ny4zMzM3SDkwLjA4MzFWNDguMDgzN0g5MC44MzMxWk05MC44MzMxIDU4Ljc5MzVIOTAuMDgzMVY1OS41NDM1SDkwLjgzMzFWNTguNzkzNVpNOTIuMzMzMSA0OC4wODM3SDkzLjA4MzFWNDcuMzMzN0g5Mi4zMzMxVjQ4LjA4MzdaTTkyLjMzMzEgNTguNzkzNVY1OS41NDM1SDkzLjA4MzFWNTguNzkzNUg5Mi4zMzMxWk04Ni40NjA5IDM4LjQ2NDNDODcuOTc4NyA0MC4xOTIzIDg5LjA5MzEgNDIuMjgwMSA4OS42NjAyIDQ0LjU4MTRMOTEuMTE2NiA0NC4yMjI1QzkwLjQ5MDUgNDEuNjgxOCA4OS4yNjA3IDM5LjM3ODggODcuNTg3OSAzNy40NzQ0TDg2LjQ2MDkgMzguNDY0M1pNODcuNjU2NSAzNi40MTZMODYuNTI5NSAzNy40MDU5TDg3LjUxOTQgMzguNTMyOUw4OC42NDY0IDM3LjU0M0w4Ny42NTY1IDM2LjQxNlpNOTIuNTczIDQzLjg2MzZDOTEuODg4IDQxLjA4MzUgOTAuNTQyNiAzOC41NjUzIDg4LjcxNDkgMzYuNDg0NUw4Ny41ODc5IDM3LjQ3NDRDODkuMjYwNyAzOS4zNzg4IDkwLjQ5MDUgNDEuNjgxOCA5MS4xMTY2IDQ0LjIyMjVMOTIuNTczIDQzLjg2MzZaTTkwLjU2NzggNDUuMTMwMkw5Mi4wMjQzIDQ0Ljc3MTNMOTEuNjY1NCA0My4zMTQ4TDkwLjIwODkgNDMuNjczN0w5MC41Njc4IDQ1LjEzMDJaTTkwLjA4MzEgNDguMDgzN1Y1OC43OTM1SDkxLjU4MzFWNDguMDgzN0g5MC4wODMxWk05Mi4zMzMxIDQ3LjMzMzdIOTAuODMzMVY0OC44MzM3SDkyLjMzMzFWNDcuMzMzN1pNOTMuMDgzMSA1OC43OTM1VjQ4LjA4MzdIOTEuNTgzMVY1OC43OTM1SDkzLjA4MzFaTTkwLjgzMzEgNTkuNTQzNUg5Mi4zMzMxVjU4LjA0MzVIOTAuODMzMVY1OS41NDM1WlwiLFxuICBmaWxsOiBcIiMzQjM1NTJcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTUyLjY3MjEgMzIuNzQ3NEw1My4zMDI0IDMzLjE1NEw1My43MDg5IDMyLjUyMzdMNTMuMDc4NiAzMi4xMTcyTDUyLjY3MjEgMzIuNzQ3NFpNNDguMTY3IDU1LjA0NjFWNTUuNzk2MUg0OC45MTdWNTUuMDQ2MUg0OC4xNjdaTTQ2LjY2NyA1NS4wNDYxSDQ1LjkxN1Y1NS43OTYxSDQ2LjY2N1Y1NS4wNDYxWk01MS40MTE2IDMxLjkzNDRMNTEuODE4MSAzMS4zMDQxTDUxLjE4NzggMzAuODk3Nkw1MC43ODEzIDMxLjUyNzlMNTEuNDExNiAzMS45MzQ0Wk01Ni41Njk5IDI3Ljk0NTFMNTYuMDM2OCAyOC40NzI3TDU2LjU2NDQgMjkuMDA1OEw1Ny4wOTc0IDI4LjQ3ODJMNTYuNTY5OSAyNy45NDUxWk02NC44OTAxIDIyLjIzMDNMNjUuMTk3NyAyMi45MTQzTDY1Ljg4MTcgMjIuNjA2Nkw2NS41NzQxIDIxLjkyMjZMNjQuODkwMSAyMi4yMzAzWk01NS41MTQ3IDI2Ljg3OUw1NC45ODcxIDI2LjM0NTlMNTQuNDU0IDI2Ljg3MzVMNTQuOTgxNiAyNy40MDY2TDU1LjUxNDcgMjYuODc5Wk02NC4yNzQ4IDIwLjg2MjNMNjQuOTU4OCAyMC41NTQ2TDY0LjY1MTEgMTkuODcwN0w2My45NjcxIDIwLjE3ODNMNjQuMjc0OCAyMC44NjIzWk00OC45MTcgNDguMDgzNUM0OC45MTcgNDIuNTc5NiA1MC41Mjc1IDM3LjQ1NjQgNTMuMzAyNCAzMy4xNTRMNTIuMDQxOCAzMi4zNDA5QzQ5LjExNTMgMzYuODc4NCA0Ny40MTcgNDIuMjgyNiA0Ny40MTcgNDguMDgzNUg0OC45MTdaTTQ4LjkxNyA0OC4xMDE2VjQ4LjA4MzVINDcuNDE3VjQ4LjEwMTZINDguOTE3Wk00OC45MTcgNDguMTE5N1Y0OC4xMDE2SDQ3LjQxN1Y0OC4xMTk3SDQ4LjkxN1pNNDguOTE3IDQ4LjEzNzhWNDguMTE5N0g0Ny40MTdWNDguMTM3OEg0OC45MTdaTTQ4LjkxNyA0OC4xNTU5VjQ4LjEzNzhINDcuNDE3VjQ4LjE1NTlINDguOTE3Wk00OC45MTcgNDguMTczOVY0OC4xNTU5SDQ3LjQxN1Y0OC4xNzM5SDQ4LjkxN1pNNDguOTE3IDQ4LjE5MlY0OC4xNzM5SDQ3LjQxN1Y0OC4xOTJINDguOTE3Wk00OC45MTcgNDguMjFWNDguMTkySDQ3LjQxN1Y0OC4yMUg0OC45MTdaTTQ4LjkxNyA0OC4yMjhWNDguMjFINDcuNDE3VjQ4LjIyOEg0OC45MTdaTTQ4LjkxNyA0OC4yNDU5VjQ4LjIyOEg0Ny40MTdWNDguMjQ1OUg0OC45MTdaTTQ4LjkxNyA0OC4yNjM5VjQ4LjI0NTlINDcuNDE3VjQ4LjI2MzlINDguOTE3Wk00OC45MTcgNDguMjgxOVY0OC4yNjM5SDQ3LjQxN1Y0OC4yODE5SDQ4LjkxN1pNNDguOTE3IDQ4LjI5OThWNDguMjgxOUg0Ny40MTdWNDguMjk5OEg0OC45MTdaTTQ4LjkxNyA0OC4zMTc3VjQ4LjI5OThINDcuNDE3VjQ4LjMxNzdINDguOTE3Wk00OC45MTcgNDguMzM1NlY0OC4zMTc3SDQ3LjQxN1Y0OC4zMzU2SDQ4LjkxN1pNNDguOTE3IDQ4LjM1MzVWNDguMzM1Nkg0Ny40MTdWNDguMzUzNUg0OC45MTdaTTQ4LjkxNyA0OC4zNzEzVjQ4LjM1MzVINDcuNDE3VjQ4LjM3MTNINDguOTE3Wk00OC45MTcgNDguMzg5MlY0OC4zNzEzSDQ3LjQxN1Y0OC4zODkySDQ4LjkxN1pNNDguOTE3IDQ4LjQwN1Y0OC4zODkySDQ3LjQxN1Y0OC40MDdINDguOTE3Wk00OC45MTcgNDguNDI0OFY0OC40MDdINDcuNDE3VjQ4LjQyNDhINDguOTE3Wk00OC45MTcgNDguNDQyNlY0OC40MjQ4SDQ3LjQxN1Y0OC40NDI2SDQ4LjkxN1pNNDguOTE3IDQ4LjQ2MDNWNDguNDQyNkg0Ny40MTdWNDguNDYwM0g0OC45MTdaTTQ4LjkxNyA0OC40NzgxVjQ4LjQ2MDNINDcuNDE3VjQ4LjQ3ODFINDguOTE3Wk00OC45MTcgNDguNDk1OFY0OC40NzgxSDQ3LjQxN1Y0OC40OTU4SDQ4LjkxN1pNNDguOTE3IDQ4LjUxMzVWNDguNDk1OEg0Ny40MTdWNDguNTEzNUg0OC45MTdaTTQ4LjkxNyA0OC41MzEyVjQ4LjUxMzVINDcuNDE3VjQ4LjUzMTJINDguOTE3Wk00OC45MTcgNDguNTQ4OVY0OC41MzEySDQ3LjQxN1Y0OC41NDg5SDQ4LjkxN1pNNDguOTE3IDQ4LjU2NjZWNDguNTQ4OUg0Ny40MTdWNDguNTY2Nkg0OC45MTdaTTQ4LjkxNyA0OC41ODQyVjQ4LjU2NjZINDcuNDE3VjQ4LjU4NDJINDguOTE3Wk00OC45MTcgNDguNjAxOVY0OC41ODQySDQ3LjQxN1Y0OC42MDE5SDQ4LjkxN1pNNDguOTE3IDQ4LjYxOTVWNDguNjAxOUg0Ny40MTdWNDguNjE5NUg0OC45MTdaTTQ4LjkxNyA0OC42MzcxVjQ4LjYxOTVINDcuNDE3VjQ4LjYzNzFINDguOTE3Wk00OC45MTcgNDguNjU0NlY0OC42MzcxSDQ3LjQxN1Y0OC42NTQ2SDQ4LjkxN1pNNDguOTE3IDQ4LjY3MjJWNDguNjU0Nkg0Ny40MTdWNDguNjcyMkg0OC45MTdaTTQ4LjkxNyA0OC42ODk3VjQ4LjY3MjJINDcuNDE3VjQ4LjY4OTdINDguOTE3Wk00OC45MTcgNDguNzA3MlY0OC42ODk3SDQ3LjQxN1Y0OC43MDcySDQ4LjkxN1pNNDguOTE3IDQ4LjcyNDhWNDguNzA3Mkg0Ny40MTdWNDguNzI0OEg0OC45MTdaTTQ4LjkxNyA0OC43NDIyVjQ4LjcyNDhINDcuNDE3VjQ4Ljc0MjJINDguOTE3Wk00OC45MTcgNDguNzU5N1Y0OC43NDIySDQ3LjQxN1Y0OC43NTk3SDQ4LjkxN1pNNDguOTE3IDQ4Ljc3NzJWNDguNzU5N0g0Ny40MTdWNDguNzc3Mkg0OC45MTdaTTQ4LjkxNyA0OC43OTQ2VjQ4Ljc3NzJINDcuNDE3VjQ4Ljc5NDZINDguOTE3Wk00OC45MTcgNDguODEyVjQ4Ljc5NDZINDcuNDE3VjQ4LjgxMkg0OC45MTdaTTQ4LjkxNyA0OC44Mjk0VjQ4LjgxMkg0Ny40MTdWNDguODI5NEg0OC45MTdaTTQ4LjkxNyA0OC44NDY4VjQ4LjgyOTRINDcuNDE3VjQ4Ljg0NjhINDguOTE3Wk00OC45MTcgNDguODY0MVY0OC44NDY4SDQ3LjQxN1Y0OC44NjQxSDQ4LjkxN1pNNDguOTE3IDQ4Ljg4MTVWNDguODY0MUg0Ny40MTdWNDguODgxNUg0OC45MTdaTTQ4LjkxNyA0OC44OTg4VjQ4Ljg4MTVINDcuNDE3VjQ4Ljg5ODhINDguOTE3Wk00OC45MTcgNDguOTE2MVY0OC44OTg4SDQ3LjQxN1Y0OC45MTYxSDQ4LjkxN1pNNDguOTE3IDQ4LjkzMzRWNDguOTE2MUg0Ny40MTdWNDguOTMzNEg0OC45MTdaTTQ4LjkxNyA0OC45NTA3VjQ4LjkzMzRINDcuNDE3VjQ4Ljk1MDdINDguOTE3Wk00OC45MTcgNDguOTY3OVY0OC45NTA3SDQ3LjQxN1Y0OC45Njc5SDQ4LjkxN1pNNDguOTE3IDQ4Ljk4NTJWNDguOTY3OUg0Ny40MTdWNDguOTg1Mkg0OC45MTdaTTQ4LjkxNyA0OS4wMDI0VjQ4Ljk4NTJINDcuNDE3VjQ5LjAwMjRINDguOTE3Wk00OC45MTcgNDkuMDE5NlY0OS4wMDI0SDQ3LjQxN1Y0OS4wMTk2SDQ4LjkxN1pNNDguOTE3IDQ5LjAzNjhWNDkuMDE5Nkg0Ny40MTdWNDkuMDM2OEg0OC45MTdaTTQ4LjkxNyA0OS4wNTM5VjQ5LjAzNjhINDcuNDE3VjQ5LjA1MzlINDguOTE3Wk00OC45MTcgNDkuMDcxMVY0OS4wNTM5SDQ3LjQxN1Y0OS4wNzExSDQ4LjkxN1pNNDguOTE3IDQ5LjA4ODJWNDkuMDcxMUg0Ny40MTdWNDkuMDg4Mkg0OC45MTdaTTQ4LjkxNyA0OS4xMDUzVjQ5LjA4ODJINDcuNDE3VjQ5LjEwNTNINDguOTE3Wk00OC45MTcgNDkuMTIyNFY0OS4xMDUzSDQ3LjQxN1Y0OS4xMjI0SDQ4LjkxN1pNNDguOTE3IDQ5LjEzOTVWNDkuMTIyNEg0Ny40MTdWNDkuMTM5NUg0OC45MTdaTTQ4LjkxNyA0OS4xNTY2VjQ5LjEzOTVINDcuNDE3VjQ5LjE1NjZINDguOTE3Wk00OC45MTcgNDkuMTczNlY0OS4xNTY2SDQ3LjQxN1Y0OS4xNzM2SDQ4LjkxN1pNNDguOTE3IDQ5LjE5MDZWNDkuMTczNkg0Ny40MTdWNDkuMTkwNkg0OC45MTdaTTQ4LjkxNyA0OS4yMDc3VjQ5LjE5MDZINDcuNDE3VjQ5LjIwNzdINDguOTE3Wk00OC45MTcgNDkuMjI0NlY0OS4yMDc3SDQ3LjQxN1Y0OS4yMjQ2SDQ4LjkxN1pNNDguOTE3IDQ5LjI0MTZWNDkuMjI0Nkg0Ny40MTdWNDkuMjQxNkg0OC45MTdaTTQ4LjkxNyA0OS4yNTg2VjQ5LjI0MTZINDcuNDE3VjQ5LjI1ODZINDguOTE3Wk00OC45MTcgNDkuMjc1NVY0OS4yNTg2SDQ3LjQxN1Y0OS4yNzU1SDQ4LjkxN1pNNDguOTE3IDQ5LjI5MjRWNDkuMjc1NUg0Ny40MTdWNDkuMjkyNEg0OC45MTdaTTQ4LjkxNyA0OS4zMDkzVjQ5LjI5MjRINDcuNDE3VjQ5LjMwOTNINDguOTE3Wk00OC45MTcgNDkuMzI2MlY0OS4zMDkzSDQ3LjQxN1Y0OS4zMjYySDQ4LjkxN1pNNDguOTE3IDQ5LjM0MzFWNDkuMzI2Mkg0Ny40MTdWNDkuMzQzMUg0OC45MTdaTTQ4LjkxNyA0OS4zNTk5VjQ5LjM0MzFINDcuNDE3VjQ5LjM1OTlINDguOTE3Wk00OC45MTcgNDkuMzc2OFY0OS4zNTk5SDQ3LjQxN1Y0OS4zNzY4SDQ4LjkxN1pNNDguOTE3IDQ5LjM5MzZWNDkuMzc2OEg0Ny40MTdWNDkuMzkzNkg0OC45MTdaTTQ4LjkxNyA0OS40MTA0VjQ5LjM5MzZINDcuNDE3VjQ5LjQxMDRINDguOTE3Wk00OC45MTcgNDkuNDI3MVY0OS40MTA0SDQ3LjQxN1Y0OS40MjcxSDQ4LjkxN1pNNDguOTE3IDQ5LjQ0MzlWNDkuNDI3MUg0Ny40MTdWNDkuNDQzOUg0OC45MTdaTTQ4LjkxNyA0OS40NjA2VjQ5LjQ0MzlINDcuNDE3VjQ5LjQ2MDZINDguOTE3Wk00OC45MTcgNDkuNDc3NFY0OS40NjA2SDQ3LjQxN1Y0OS40Nzc0SDQ4LjkxN1pNNDguOTE3IDQ5LjQ5NDFWNDkuNDc3NEg0Ny40MTdWNDkuNDk0MUg0OC45MTdaTTQ4LjkxNyA0OS41MTA4VjQ5LjQ5NDFINDcuNDE3VjQ5LjUxMDhINDguOTE3Wk00OC45MTcgNDkuNTI3NFY0OS41MTA4SDQ3LjQxN1Y0OS41Mjc0SDQ4LjkxN1pNNDguOTE3IDQ5LjU0NDFWNDkuNTI3NEg0Ny40MTdWNDkuNTQ0MUg0OC45MTdaTTQ4LjkxNyA0OS41NjA3VjQ5LjU0NDFINDcuNDE3VjQ5LjU2MDdINDguOTE3Wk00OC45MTcgNDkuNTc3M1Y0OS41NjA3SDQ3LjQxN1Y0OS41NzczSDQ4LjkxN1pNNDguOTE3IDQ5LjU5MzlWNDkuNTc3M0g0Ny40MTdWNDkuNTkzOUg0OC45MTdaTTQ4LjkxNyA0OS42MTA1VjQ5LjU5MzlINDcuNDE3VjQ5LjYxMDVINDguOTE3Wk00OC45MTcgNDkuNjI3MVY0OS42MTA1SDQ3LjQxN1Y0OS42MjcxSDQ4LjkxN1pNNDguOTE3IDQ5LjY0MzZWNDkuNjI3MUg0Ny40MTdWNDkuNjQzNkg0OC45MTdaTTQ4LjkxNyA0OS42NjAyVjQ5LjY0MzZINDcuNDE3VjQ5LjY2MDJINDguOTE3Wk00OC45MTcgNDkuNjc2N1Y0OS42NjAySDQ3LjQxN1Y0OS42NzY3SDQ4LjkxN1pNNDguOTE3IDQ5LjY5MzJWNDkuNjc2N0g0Ny40MTdWNDkuNjkzMkg0OC45MTdaTTQ4LjkxNyA0OS43MDk2VjQ5LjY5MzJINDcuNDE3VjQ5LjcwOTZINDguOTE3Wk00OC45MTcgNDkuNzI2MVY0OS43MDk2SDQ3LjQxN1Y0OS43MjYxSDQ4LjkxN1pNNDguOTE3IDQ5Ljc0MjVWNDkuNzI2MUg0Ny40MTdWNDkuNzQyNUg0OC45MTdaTTQ4LjkxNyA0OS43NTlWNDkuNzQyNUg0Ny40MTdWNDkuNzU5SDQ4LjkxN1pNNDguOTE3IDQ5Ljc3NTRWNDkuNzU5SDQ3LjQxN1Y0OS43NzU0SDQ4LjkxN1pNNDguOTE3IDQ5Ljc5MThWNDkuNzc1NEg0Ny40MTdWNDkuNzkxOEg0OC45MTdaTTQ4LjkxNyA0OS44MDgxVjQ5Ljc5MThINDcuNDE3VjQ5LjgwODFINDguOTE3Wk00OC45MTcgNDkuODI0NVY0OS44MDgxSDQ3LjQxN1Y0OS44MjQ1SDQ4LjkxN1pNNDguOTE3IDQ5Ljg0MDhWNDkuODI0NUg0Ny40MTdWNDkuODQwOEg0OC45MTdaTTQ4LjkxNyA0OS44NTcxVjQ5Ljg0MDhINDcuNDE3VjQ5Ljg1NzFINDguOTE3Wk00OC45MTcgNDkuODczNFY0OS44NTcxSDQ3LjQxN1Y0OS44NzM0SDQ4LjkxN1pNNDguOTE3IDQ5Ljg4OTdWNDkuODczNEg0Ny40MTdWNDkuODg5N0g0OC45MTdaTTQ4LjkxNyA0OS45MDZWNDkuODg5N0g0Ny40MTdWNDkuOTA2SDQ4LjkxN1pNNDguOTE3IDQ5LjkyMjJWNDkuOTA2SDQ3LjQxN1Y0OS45MjIySDQ4LjkxN1pNNDguOTE3IDQ5LjkzODRWNDkuOTIyMkg0Ny40MTdWNDkuOTM4NEg0OC45MTdaTTQ4LjkxNyA0OS45NTQ3VjQ5LjkzODRINDcuNDE3VjQ5Ljk1NDdINDguOTE3Wk00OC45MTcgNDkuOTcwOVY0OS45NTQ3SDQ3LjQxN1Y0OS45NzA5SDQ4LjkxN1pNNDguOTE3IDQ5Ljk4N1Y0OS45NzA5SDQ3LjQxN1Y0OS45ODdINDguOTE3Wk00OC45MTcgNTAuMDAzMlY0OS45ODdINDcuNDE3VjUwLjAwMzJINDguOTE3Wk00OC45MTcgNTAuMDE5M1Y1MC4wMDMySDQ3LjQxN1Y1MC4wMTkzSDQ4LjkxN1pNNDguOTE3IDUwLjAzNTRWNTAuMDE5M0g0Ny40MTdWNTAuMDM1NEg0OC45MTdaTTQ4LjkxNyA1MC4wNTE1VjUwLjAzNTRINDcuNDE3VjUwLjA1MTVINDguOTE3Wk00OC45MTcgNTAuMDY3NlY1MC4wNTE1SDQ3LjQxN1Y1MC4wNjc2SDQ4LjkxN1pNNDguOTE3IDUwLjA4MzdWNTAuMDY3Nkg0Ny40MTdWNTAuMDgzN0g0OC45MTdaTTQ4LjkxNyA1MC4wOTk4VjUwLjA4MzdINDcuNDE3VjUwLjA5OThINDguOTE3Wk00OC45MTcgNTAuMTE1OFY1MC4wOTk4SDQ3LjQxN1Y1MC4xMTU4SDQ4LjkxN1pNNDguOTE3IDUwLjEzMThWNTAuMTE1OEg0Ny40MTdWNTAuMTMxOEg0OC45MTdaTTQ4LjkxNyA1MC4xNDc4VjUwLjEzMThINDcuNDE3VjUwLjE0NzhINDguOTE3Wk00OC45MTcgNTAuMTYzOFY1MC4xNDc4SDQ3LjQxN1Y1MC4xNjM4SDQ4LjkxN1pNNDguOTE3IDUwLjE3OTdWNTAuMTYzOEg0Ny40MTdWNTAuMTc5N0g0OC45MTdaTTQ4LjkxNyA1MC4xOTU3VjUwLjE3OTdINDcuNDE3VjUwLjE5NTdINDguOTE3Wk00OC45MTcgNTAuMjExNlY1MC4xOTU3SDQ3LjQxN1Y1MC4yMTE2SDQ4LjkxN1pNNDguOTE3IDUwLjIyNzVWNTAuMjExNkg0Ny40MTdWNTAuMjI3NUg0OC45MTdaTTQ4LjkxNyA1MC4yNDM0VjUwLjIyNzVINDcuNDE3VjUwLjI0MzRINDguOTE3Wk00OC45MTcgNTAuMjU5M1Y1MC4yNDM0SDQ3LjQxN1Y1MC4yNTkzSDQ4LjkxN1pNNDguOTE3IDUwLjI3NTJWNTAuMjU5M0g0Ny40MTdWNTAuMjc1Mkg0OC45MTdaTTQ4LjkxNyA1MC4yOTFWNTAuMjc1Mkg0Ny40MTdWNTAuMjkxSDQ4LjkxN1pNNDguOTE3IDUwLjMwNjhWNTAuMjkxSDQ3LjQxN1Y1MC4zMDY4SDQ4LjkxN1pNNDguOTE3IDUwLjMyMjZWNTAuMzA2OEg0Ny40MTdWNTAuMzIyNkg0OC45MTdaTTQ4LjkxNyA1MC4zMzg0VjUwLjMyMjZINDcuNDE3VjUwLjMzODRINDguOTE3Wk00OC45MTcgNTAuMzU0MlY1MC4zMzg0SDQ3LjQxN1Y1MC4zNTQySDQ4LjkxN1pNNDguOTE3IDUwLjM2OTlWNTAuMzU0Mkg0Ny40MTdWNTAuMzY5OUg0OC45MTdaTTQ4LjkxNyA1MC4zODU3VjUwLjM2OTlINDcuNDE3VjUwLjM4NTdINDguOTE3Wk00OC45MTcgNTAuNDAxNFY1MC4zODU3SDQ3LjQxN1Y1MC40MDE0SDQ4LjkxN1pNNDguOTE3IDUwLjQxNzFWNTAuNDAxNEg0Ny40MTdWNTAuNDE3MUg0OC45MTdaTTQ4LjkxNyA1MC40MzI3VjUwLjQxNzFINDcuNDE3VjUwLjQzMjdINDguOTE3Wk00OC45MTcgNTAuNDQ4NFY1MC40MzI3SDQ3LjQxN1Y1MC40NDg0SDQ4LjkxN1pNNDguOTE3IDUwLjQ2NFY1MC40NDg0SDQ3LjQxN1Y1MC40NjRINDguOTE3Wk00OC45MTcgNTAuNDc5N1Y1MC40NjRINDcuNDE3VjUwLjQ3OTdINDguOTE3Wk00OC45MTcgNTAuNDk1M1Y1MC40Nzk3SDQ3LjQxN1Y1MC40OTUzSDQ4LjkxN1pNNDguOTE3IDUwLjUxMDlWNTAuNDk1M0g0Ny40MTdWNTAuNTEwOUg0OC45MTdaTTQ4LjkxNyA1MC41MjY0VjUwLjUxMDlINDcuNDE3VjUwLjUyNjRINDguOTE3Wk00OC45MTcgNTAuNTQyVjUwLjUyNjRINDcuNDE3VjUwLjU0Mkg0OC45MTdaTTQ4LjkxNyA1MC41NTc1VjUwLjU0Mkg0Ny40MTdWNTAuNTU3NUg0OC45MTdaTTQ4LjkxNyA1MC41NzMxVjUwLjU1NzVINDcuNDE3VjUwLjU3MzFINDguOTE3Wk00OC45MTcgNTAuNTg4NlY1MC41NzMxSDQ3LjQxN1Y1MC41ODg2SDQ4LjkxN1pNNDguOTE3IDUwLjYwNFY1MC41ODg2SDQ3LjQxN1Y1MC42MDRINDguOTE3Wk00OC45MTcgNTAuNjE5NVY1MC42MDRINDcuNDE3VjUwLjYxOTVINDguOTE3Wk00OC45MTcgNTAuNjM1VjUwLjYxOTVINDcuNDE3VjUwLjYzNUg0OC45MTdaTTQ4LjkxNyA1MC42NTA0VjUwLjYzNUg0Ny40MTdWNTAuNjUwNEg0OC45MTdaTTQ4LjkxNyA1MC42NjU4VjUwLjY1MDRINDcuNDE3VjUwLjY2NThINDguOTE3Wk00OC45MTcgNTAuNjgxMlY1MC42NjU4SDQ3LjQxN1Y1MC42ODEySDQ4LjkxN1pNNDguOTE3IDUwLjY5NjZWNTAuNjgxMkg0Ny40MTdWNTAuNjk2Nkg0OC45MTdaTTQ4LjkxNyA1MC43MTE5VjUwLjY5NjZINDcuNDE3VjUwLjcxMTlINDguOTE3Wk00OC45MTcgNTAuNzI3M1Y1MC43MTE5SDQ3LjQxN1Y1MC43MjczSDQ4LjkxN1pNNDguOTE3IDUwLjc0MjZWNTAuNzI3M0g0Ny40MTdWNTAuNzQyNkg0OC45MTdaTTQ4LjkxNyA1MC43NTc5VjUwLjc0MjZINDcuNDE3VjUwLjc1NzlINDguOTE3Wk00OC45MTcgNTAuNzczMlY1MC43NTc5SDQ3LjQxN1Y1MC43NzMySDQ4LjkxN1pNNDguOTE3IDUwLjc4ODVWNTAuNzczMkg0Ny40MTdWNTAuNzg4NUg0OC45MTdaTTQ4LjkxNyA1MC44MDM3VjUwLjc4ODVINDcuNDE3VjUwLjgwMzdINDguOTE3Wk00OC45MTcgNTAuODE5VjUwLjgwMzdINDcuNDE3VjUwLjgxOUg0OC45MTdaTTQ4LjkxNyA1MC44MzQyVjUwLjgxOUg0Ny40MTdWNTAuODM0Mkg0OC45MTdaTTQ4LjkxNyA1MC44NDk0VjUwLjgzNDJINDcuNDE3VjUwLjg0OTRINDguOTE3Wk00OC45MTcgNTAuODY0NlY1MC44NDk0SDQ3LjQxN1Y1MC44NjQ2SDQ4LjkxN1pNNDguOTE3IDUwLjg3OTdWNTAuODY0Nkg0Ny40MTdWNTAuODc5N0g0OC45MTdaTTQ4LjkxNyA1MC44OTQ5VjUwLjg3OTdINDcuNDE3VjUwLjg5NDlINDguOTE3Wk00OC45MTcgNTAuOTFWNTAuODk0OUg0Ny40MTdWNTAuOTFINDguOTE3Wk00OC45MTcgNTAuOTI1MVY1MC45MUg0Ny40MTdWNTAuOTI1MUg0OC45MTdaTTQ4LjkxNyA1MC45NDAyVjUwLjkyNTFINDcuNDE3VjUwLjk0MDJINDguOTE3Wk00OC45MTcgNTAuOTU1M1Y1MC45NDAySDQ3LjQxN1Y1MC45NTUzSDQ4LjkxN1pNNDguOTE3IDUwLjk3MDRWNTAuOTU1M0g0Ny40MTdWNTAuOTcwNEg0OC45MTdaTTQ4LjkxNyA1MC45ODU0VjUwLjk3MDRINDcuNDE3VjUwLjk4NTRINDguOTE3Wk00OC45MTcgNTEuMDAwNFY1MC45ODU0SDQ3LjQxN1Y1MS4wMDA0SDQ4LjkxN1pNNDguOTE3IDUxLjAxNTRWNTEuMDAwNEg0Ny40MTdWNTEuMDE1NEg0OC45MTdaTTQ4LjkxNyA1MS4wMzA0VjUxLjAxNTRINDcuNDE3VjUxLjAzMDRINDguOTE3Wk00OC45MTcgNTEuMDQ1NFY1MS4wMzA0SDQ3LjQxN1Y1MS4wNDU0SDQ4LjkxN1pNNDguOTE3IDUxLjA2MDRWNTEuMDQ1NEg0Ny40MTdWNTEuMDYwNEg0OC45MTdaTTQ4LjkxNyA1MS4wNzUzVjUxLjA2MDRINDcuNDE3VjUxLjA3NTNINDguOTE3Wk00OC45MTcgNTEuMDkwMlY1MS4wNzUzSDQ3LjQxN1Y1MS4wOTAySDQ4LjkxN1pNNDguOTE3IDUxLjEwNTFWNTEuMDkwMkg0Ny40MTdWNTEuMTA1MUg0OC45MTdaTTQ4LjkxNyA1MS4xMlY1MS4xMDUxSDQ3LjQxN1Y1MS4xMkg0OC45MTdaTTQ4LjkxNyA1MS4xMzQ5VjUxLjEySDQ3LjQxN1Y1MS4xMzQ5SDQ4LjkxN1pNNDguOTE3IDUxLjE0OTdWNTEuMTM0OUg0Ny40MTdWNTEuMTQ5N0g0OC45MTdaTTQ4LjkxNyA1MS4xNjQ1VjUxLjE0OTdINDcuNDE3VjUxLjE2NDVINDguOTE3Wk00OC45MTcgNTEuMTc5M1Y1MS4xNjQ1SDQ3LjQxN1Y1MS4xNzkzSDQ4LjkxN1pNNDguOTE3IDUxLjE5NDFWNTEuMTc5M0g0Ny40MTdWNTEuMTk0MUg0OC45MTdaTTQ4LjkxNyA1MS4yMDg5VjUxLjE5NDFINDcuNDE3VjUxLjIwODlINDguOTE3Wk00OC45MTcgNTEuMjIzN1Y1MS4yMDg5SDQ3LjQxN1Y1MS4yMjM3SDQ4LjkxN1pNNDguOTE3IDUxLjIzODRWNTEuMjIzN0g0Ny40MTdWNTEuMjM4NEg0OC45MTdaTTQ4LjkxNyA1MS4yNTMxVjUxLjIzODRINDcuNDE3VjUxLjI1MzFINDguOTE3Wk00OC45MTcgNTEuMjY3OFY1MS4yNTMxSDQ3LjQxN1Y1MS4yNjc4SDQ4LjkxN1pNNDguOTE3IDUxLjI4MjVWNTEuMjY3OEg0Ny40MTdWNTEuMjgyNUg0OC45MTdaTTQ4LjkxNyA1MS4yOTcyVjUxLjI4MjVINDcuNDE3VjUxLjI5NzJINDguOTE3Wk00OC45MTcgNTEuMzExOVY1MS4yOTcySDQ3LjQxN1Y1MS4zMTE5SDQ4LjkxN1pNNDguOTE3IDUxLjMyNjVWNTEuMzExOUg0Ny40MTdWNTEuMzI2NUg0OC45MTdaTTQ4LjkxNyA1MS4zNDExVjUxLjMyNjVINDcuNDE3VjUxLjM0MTFINDguOTE3Wk00OC45MTcgNTEuMzU1N1Y1MS4zNDExSDQ3LjQxN1Y1MS4zNTU3SDQ4LjkxN1pNNDguOTE3IDUxLjM3MDNWNTEuMzU1N0g0Ny40MTdWNTEuMzcwM0g0OC45MTdaTTQ4LjkxNyA1MS4zODQ4VjUxLjM3MDNINDcuNDE3VjUxLjM4NDhINDguOTE3Wk00OC45MTcgNTEuMzk5NFY1MS4zODQ4SDQ3LjQxN1Y1MS4zOTk0SDQ4LjkxN1pNNDguOTE3IDUxLjQxMzlWNTEuMzk5NEg0Ny40MTdWNTEuNDEzOUg0OC45MTdaTTQ4LjkxNyA1MS40Mjg0VjUxLjQxMzlINDcuNDE3VjUxLjQyODRINDguOTE3Wk00OC45MTcgNTEuNDQyOVY1MS40Mjg0SDQ3LjQxN1Y1MS40NDI5SDQ4LjkxN1pNNDguOTE3IDUxLjQ1NzRWNTEuNDQyOUg0Ny40MTdWNTEuNDU3NEg0OC45MTdaTTQ4LjkxNyA1MS40NzE5VjUxLjQ1NzRINDcuNDE3VjUxLjQ3MTlINDguOTE3Wk00OC45MTcgNTEuNDg2M1Y1MS40NzE5SDQ3LjQxN1Y1MS40ODYzSDQ4LjkxN1pNNDguOTE3IDUxLjUwMDdWNTEuNDg2M0g0Ny40MTdWNTEuNTAwN0g0OC45MTdaTTQ4LjkxNyA1MS41MTUxVjUxLjUwMDdINDcuNDE3VjUxLjUxNTFINDguOTE3Wk00OC45MTcgNTEuNTI5NVY1MS41MTUxSDQ3LjQxN1Y1MS41Mjk1SDQ4LjkxN1pNNDguOTE3IDUxLjU0MzlWNTEuNTI5NUg0Ny40MTdWNTEuNTQzOUg0OC45MTdaTTQ4LjkxNyA1MS41NTgyVjUxLjU0MzlINDcuNDE3VjUxLjU1ODJINDguOTE3Wk00OC45MTcgNTEuNTcyNlY1MS41NTgySDQ3LjQxN1Y1MS41NzI2SDQ4LjkxN1pNNDguOTE3IDUxLjU4NjlWNTEuNTcyNkg0Ny40MTdWNTEuNTg2OUg0OC45MTdaTTQ4LjkxNyA1MS42MDEyVjUxLjU4NjlINDcuNDE3VjUxLjYwMTJINDguOTE3Wk00OC45MTcgNTEuNjE1NVY1MS42MDEySDQ3LjQxN1Y1MS42MTU1SDQ4LjkxN1pNNDguOTE3IDUxLjYyOTdWNTEuNjE1NUg0Ny40MTdWNTEuNjI5N0g0OC45MTdaTTQ4LjkxNyA1MS42NDRWNTEuNjI5N0g0Ny40MTdWNTEuNjQ0SDQ4LjkxN1pNNDguOTE3IDUxLjY1ODJWNTEuNjQ0SDQ3LjQxN1Y1MS42NTgySDQ4LjkxN1pNNDguOTE3IDUxLjY3MjRWNTEuNjU4Mkg0Ny40MTdWNTEuNjcyNEg0OC45MTdaTTQ4LjkxNyA1MS42ODY2VjUxLjY3MjRINDcuNDE3VjUxLjY4NjZINDguOTE3Wk00OC45MTcgNTEuNzAwOFY1MS42ODY2SDQ3LjQxN1Y1MS43MDA4SDQ4LjkxN1pNNDguOTE3IDUxLjcxNDlWNTEuNzAwOEg0Ny40MTdWNTEuNzE0OUg0OC45MTdaTTQ4LjkxNyA1MS43MjkxVjUxLjcxNDlINDcuNDE3VjUxLjcyOTFINDguOTE3Wk00OC45MTcgNTEuNzQzMlY1MS43MjkxSDQ3LjQxN1Y1MS43NDMySDQ4LjkxN1pNNDguOTE3IDUxLjc1NzNWNTEuNzQzMkg0Ny40MTdWNTEuNzU3M0g0OC45MTdaTTQ4LjkxNyA1MS43NzE0VjUxLjc1NzNINDcuNDE3VjUxLjc3MTRINDguOTE3Wk00OC45MTcgNTEuNzg1NFY1MS43NzE0SDQ3LjQxN1Y1MS43ODU0SDQ4LjkxN1pNNDguOTE3IDUxLjc5OTVWNTEuNzg1NEg0Ny40MTdWNTEuNzk5NUg0OC45MTdaTTQ4LjkxNyA1MS44MTM1VjUxLjc5OTVINDcuNDE3VjUxLjgxMzVINDguOTE3Wk00OC45MTcgNTEuODI3NVY1MS44MTM1SDQ3LjQxN1Y1MS44Mjc1SDQ4LjkxN1pNNDguOTE3IDUxLjg0MTVWNTEuODI3NUg0Ny40MTdWNTEuODQxNUg0OC45MTdaTTQ4LjkxNyA1MS44NTU1VjUxLjg0MTVINDcuNDE3VjUxLjg1NTVINDguOTE3Wk00OC45MTcgNTEuODY5NVY1MS44NTU1SDQ3LjQxN1Y1MS44Njk1SDQ4LjkxN1pNNDguOTE3IDUxLjg4MzRWNTEuODY5NUg0Ny40MTdWNTEuODgzNEg0OC45MTdaTTQ4LjkxNyA1MS44OTc0VjUxLjg4MzRINDcuNDE3VjUxLjg5NzRINDguOTE3Wk00OC45MTcgNTEuOTExM1Y1MS44OTc0SDQ3LjQxN1Y1MS45MTEzSDQ4LjkxN1pNNDguOTE3IDUxLjkyNTJWNTEuOTExM0g0Ny40MTdWNTEuOTI1Mkg0OC45MTdaTTQ4LjkxNyA1MS45MzlWNTEuOTI1Mkg0Ny40MTdWNTEuOTM5SDQ4LjkxN1pNNDguOTE3IDUxLjk1MjlWNTEuOTM5SDQ3LjQxN1Y1MS45NTI5SDQ4LjkxN1pNNDguOTE3IDUxLjk2NjdWNTEuOTUyOUg0Ny40MTdWNTEuOTY2N0g0OC45MTdaTTQ4LjkxNyA1MS45ODA1VjUxLjk2NjdINDcuNDE3VjUxLjk4MDVINDguOTE3Wk00OC45MTcgNTEuOTk0M1Y1MS45ODA1SDQ3LjQxN1Y1MS45OTQzSDQ4LjkxN1pNNDguOTE3IDUyLjAwODFWNTEuOTk0M0g0Ny40MTdWNTIuMDA4MUg0OC45MTdaTTQ4LjkxNyA1Mi4wMjE5VjUyLjAwODFINDcuNDE3VjUyLjAyMTlINDguOTE3Wk00OC45MTcgNTIuMDM1NlY1Mi4wMjE5SDQ3LjQxN1Y1Mi4wMzU2SDQ4LjkxN1pNNDguOTE3IDUyLjA0OTRWNTIuMDM1Nkg0Ny40MTdWNTIuMDQ5NEg0OC45MTdaTTQ4LjkxNyA1Mi4wNjMxVjUyLjA0OTRINDcuNDE3VjUyLjA2MzFINDguOTE3Wk00OC45MTcgNTIuMDc2OFY1Mi4wNjMxSDQ3LjQxN1Y1Mi4wNzY4SDQ4LjkxN1pNNDguOTE3IDUyLjA5MDVWNTIuMDc2OEg0Ny40MTdWNTIuMDkwNUg0OC45MTdaTTQ4LjkxNyA1Mi4xMDQxVjUyLjA5MDVINDcuNDE3VjUyLjEwNDFINDguOTE3Wk00OC45MTcgNTIuMTE3OFY1Mi4xMDQxSDQ3LjQxN1Y1Mi4xMTc4SDQ4LjkxN1pNNDguOTE3IDUyLjEzMTRWNTIuMTE3OEg0Ny40MTdWNTIuMTMxNEg0OC45MTdaTTQ4LjkxNyA1Mi4xNDVWNTIuMTMxNEg0Ny40MTdWNTIuMTQ1SDQ4LjkxN1pNNDguOTE3IDUyLjE1ODZWNTIuMTQ1SDQ3LjQxN1Y1Mi4xNTg2SDQ4LjkxN1pNNDguOTE3IDUyLjE3MjJWNTIuMTU4Nkg0Ny40MTdWNTIuMTcyMkg0OC45MTdaTTQ4LjkxNyA1Mi4xODU3VjUyLjE3MjJINDcuNDE3VjUyLjE4NTdINDguOTE3Wk00OC45MTcgNTIuMTk5M1Y1Mi4xODU3SDQ3LjQxN1Y1Mi4xOTkzSDQ4LjkxN1pNNDguOTE3IDUyLjIxMjhWNTIuMTk5M0g0Ny40MTdWNTIuMjEyOEg0OC45MTdaTTQ4LjkxNyA1Mi4yMjYzVjUyLjIxMjhINDcuNDE3VjUyLjIyNjNINDguOTE3Wk00OC45MTcgNTIuMjM5OFY1Mi4yMjYzSDQ3LjQxN1Y1Mi4yMzk4SDQ4LjkxN1pNNDguOTE3IDUyLjI1MzJWNTIuMjM5OEg0Ny40MTdWNTIuMjUzMkg0OC45MTdaTTQ4LjkxNyA1Mi4yNjY3VjUyLjI1MzJINDcuNDE3VjUyLjI2NjdINDguOTE3Wk00OC45MTcgNTIuMjgwMVY1Mi4yNjY3SDQ3LjQxN1Y1Mi4yODAxSDQ4LjkxN1pNNDguOTE3IDUyLjI5MzVWNTIuMjgwMUg0Ny40MTdWNTIuMjkzNUg0OC45MTdaTTQ4LjkxNyA1Mi4zMDY5VjUyLjI5MzVINDcuNDE3VjUyLjMwNjlINDguOTE3Wk00OC45MTcgNTIuMzIwM1Y1Mi4zMDY5SDQ3LjQxN1Y1Mi4zMjAzSDQ4LjkxN1pNNDguOTE3IDUyLjMzMzdWNTIuMzIwM0g0Ny40MTdWNTIuMzMzN0g0OC45MTdaTTQ4LjkxNyA1Mi4zNDdWNTIuMzMzN0g0Ny40MTdWNTIuMzQ3SDQ4LjkxN1pNNDguOTE3IDUyLjM2MDNWNTIuMzQ3SDQ3LjQxN1Y1Mi4zNjAzSDQ4LjkxN1pNNDguOTE3IDUyLjM3MzZWNTIuMzYwM0g0Ny40MTdWNTIuMzczNkg0OC45MTdaTTQ4LjkxNyA1Mi4zODY5VjUyLjM3MzZINDcuNDE3VjUyLjM4NjlINDguOTE3Wk00OC45MTcgNTIuNDAwMlY1Mi4zODY5SDQ3LjQxN1Y1Mi40MDAySDQ4LjkxN1pNNDguOTE3IDUyLjQxMzRWNTIuNDAwMkg0Ny40MTdWNTIuNDEzNEg0OC45MTdaTTQ4LjkxNyA1Mi40MjY3VjUyLjQxMzRINDcuNDE3VjUyLjQyNjdINDguOTE3Wk00OC45MTcgNTIuNDM5OVY1Mi40MjY3SDQ3LjQxN1Y1Mi40Mzk5SDQ4LjkxN1pNNDguOTE3IDUyLjQ1MzFWNTIuNDM5OUg0Ny40MTdWNTIuNDUzMUg0OC45MTdaTTQ4LjkxNyA1Mi40NjYzVjUyLjQ1MzFINDcuNDE3VjUyLjQ2NjNINDguOTE3Wk00OC45MTcgNTIuNDc5NFY1Mi40NjYzSDQ3LjQxN1Y1Mi40Nzk0SDQ4LjkxN1pNNDguOTE3IDUyLjQ5MjZWNTIuNDc5NEg0Ny40MTdWNTIuNDkyNkg0OC45MTdaTTQ4LjkxNyA1Mi41MDU3VjUyLjQ5MjZINDcuNDE3VjUyLjUwNTdINDguOTE3Wk00OC45MTcgNTIuNTE4OFY1Mi41MDU3SDQ3LjQxN1Y1Mi41MTg4SDQ4LjkxN1pNNDguOTE3IDUyLjUzMTlWNTIuNTE4OEg0Ny40MTdWNTIuNTMxOUg0OC45MTdaTTQ4LjkxNyA1Mi41NDVWNTIuNTMxOUg0Ny40MTdWNTIuNTQ1SDQ4LjkxN1pNNDguOTE3IDUyLjU1ODFWNTIuNTQ1SDQ3LjQxN1Y1Mi41NTgxSDQ4LjkxN1pNNDguOTE3IDUyLjU3MTFWNTIuNTU4MUg0Ny40MTdWNTIuNTcxMUg0OC45MTdaTTQ4LjkxNyA1Mi41ODQxVjUyLjU3MTFINDcuNDE3VjUyLjU4NDFINDguOTE3Wk00OC45MTcgNTIuNTk3MVY1Mi41ODQxSDQ3LjQxN1Y1Mi41OTcxSDQ4LjkxN1pNNDguOTE3IDUyLjYxMDFWNTIuNTk3MUg0Ny40MTdWNTIuNjEwMUg0OC45MTdaTTQ4LjkxNyA1Mi42MjMxVjUyLjYxMDFINDcuNDE3VjUyLjYyMzFINDguOTE3Wk00OC45MTcgNTIuNjM2VjUyLjYyMzFINDcuNDE3VjUyLjYzNkg0OC45MTdaTTQ4LjkxNyA1Mi42NDlWNTIuNjM2SDQ3LjQxN1Y1Mi42NDlINDguOTE3Wk00OC45MTcgNTIuNjYxOVY1Mi42NDlINDcuNDE3VjUyLjY2MTlINDguOTE3Wk00OC45MTcgNTIuNjc0OFY1Mi42NjE5SDQ3LjQxN1Y1Mi42NzQ4SDQ4LjkxN1pNNDguOTE3IDUyLjY4NzdWNTIuNjc0OEg0Ny40MTdWNTIuNjg3N0g0OC45MTdaTTQ4LjkxNyA1Mi43MDA1VjUyLjY4NzdINDcuNDE3VjUyLjcwMDVINDguOTE3Wk00OC45MTcgNTIuNzEzNFY1Mi43MDA1SDQ3LjQxN1Y1Mi43MTM0SDQ4LjkxN1pNNDguOTE3IDUyLjcyNjJWNTIuNzEzNEg0Ny40MTdWNTIuNzI2Mkg0OC45MTdaTTQ4LjkxNyA1Mi43MzlWNTIuNzI2Mkg0Ny40MTdWNTIuNzM5SDQ4LjkxN1pNNDguOTE3IDUyLjc1MThWNTIuNzM5SDQ3LjQxN1Y1Mi43NTE4SDQ4LjkxN1pNNDguOTE3IDUyLjc2NDZWNTIuNzUxOEg0Ny40MTdWNTIuNzY0Nkg0OC45MTdaTTQ4LjkxNyA1Mi43NzczVjUyLjc2NDZINDcuNDE3VjUyLjc3NzNINDguOTE3Wk00OC45MTcgNTIuNzkwMVY1Mi43NzczSDQ3LjQxN1Y1Mi43OTAxSDQ4LjkxN1pNNDguOTE3IDUyLjgwMjhWNTIuNzkwMUg0Ny40MTdWNTIuODAyOEg0OC45MTdaTTQ4LjkxNyA1Mi44MTU1VjUyLjgwMjhINDcuNDE3VjUyLjgxNTVINDguOTE3Wk00OC45MTcgNTIuODI4MlY1Mi44MTU1SDQ3LjQxN1Y1Mi44MjgySDQ4LjkxN1pNNDguOTE3IDUyLjg0MDlWNTIuODI4Mkg0Ny40MTdWNTIuODQwOUg0OC45MTdaTTQ4LjkxNyA1Mi44NTM1VjUyLjg0MDlINDcuNDE3VjUyLjg1MzVINDguOTE3Wk00OC45MTcgNTIuODY2MlY1Mi44NTM1SDQ3LjQxN1Y1Mi44NjYySDQ4LjkxN1pNNDguOTE3IDUyLjg3ODhWNTIuODY2Mkg0Ny40MTdWNTIuODc4OEg0OC45MTdaTTQ4LjkxNyA1Mi44OTE0VjUyLjg3ODhINDcuNDE3VjUyLjg5MTRINDguOTE3Wk00OC45MTcgNTIuOTA0VjUyLjg5MTRINDcuNDE3VjUyLjkwNEg0OC45MTdaTTQ4LjkxNyA1Mi45MTY1VjUyLjkwNEg0Ny40MTdWNTIuOTE2NUg0OC45MTdaTTQ4LjkxNyA1Mi45MjkxVjUyLjkxNjVINDcuNDE3VjUyLjkyOTFINDguOTE3Wk00OC45MTcgNTIuOTQxNlY1Mi45MjkxSDQ3LjQxN1Y1Mi45NDE2SDQ4LjkxN1pNNDguOTE3IDUyLjk1NDFWNTIuOTQxNkg0Ny40MTdWNTIuOTU0MUg0OC45MTdaTTQ4LjkxNyA1Mi45NjY2VjUyLjk1NDFINDcuNDE3VjUyLjk2NjZINDguOTE3Wk00OC45MTcgNTIuOTc5MVY1Mi45NjY2SDQ3LjQxN1Y1Mi45NzkxSDQ4LjkxN1pNNDguOTE3IDUyLjk5MTVWNTIuOTc5MUg0Ny40MTdWNTIuOTkxNUg0OC45MTdaTTQ4LjkxNyA1My4wMDRWNTIuOTkxNUg0Ny40MTdWNTMuMDA0SDQ4LjkxN1pNNDguOTE3IDUzLjAxNjRWNTMuMDA0SDQ3LjQxN1Y1My4wMTY0SDQ4LjkxN1pNNDguOTE3IDUzLjAyODhWNTMuMDE2NEg0Ny40MTdWNTMuMDI4OEg0OC45MTdaTTQ4LjkxNyA1My4wNDEyVjUzLjAyODhINDcuNDE3VjUzLjA0MTJINDguOTE3Wk00OC45MTcgNTMuMDUzNVY1My4wNDEySDQ3LjQxN1Y1My4wNTM1SDQ4LjkxN1pNNDguOTE3IDUzLjA2NTlWNTMuMDUzNUg0Ny40MTdWNTMuMDY1OUg0OC45MTdaTTQ4LjkxNyA1My4wNzgyVjUzLjA2NTlINDcuNDE3VjUzLjA3ODJINDguOTE3Wk00OC45MTcgNTMuMDkwNVY1My4wNzgySDQ3LjQxN1Y1My4wOTA1SDQ4LjkxN1pNNDguOTE3IDUzLjEwMjhWNTMuMDkwNUg0Ny40MTdWNTMuMTAyOEg0OC45MTdaTTQ4LjkxNyA1My4xMTUxVjUzLjEwMjhINDcuNDE3VjUzLjExNTFINDguOTE3Wk00OC45MTcgNTMuMTI3NFY1My4xMTUxSDQ3LjQxN1Y1My4xMjc0SDQ4LjkxN1pNNDguOTE3IDUzLjEzOTZWNTMuMTI3NEg0Ny40MTdWNTMuMTM5Nkg0OC45MTdaTTQ4LjkxNyA1My4xNTE4VjUzLjEzOTZINDcuNDE3VjUzLjE1MThINDguOTE3Wk00OC45MTcgNTMuMTY0MVY1My4xNTE4SDQ3LjQxN1Y1My4xNjQxSDQ4LjkxN1pNNDguOTE3IDUzLjE3NjJWNTMuMTY0MUg0Ny40MTdWNTMuMTc2Mkg0OC45MTdaTTQ4LjkxNyA1My4xODg0VjUzLjE3NjJINDcuNDE3VjUzLjE4ODRINDguOTE3Wk00OC45MTcgNTMuMjAwNlY1My4xODg0SDQ3LjQxN1Y1My4yMDA2SDQ4LjkxN1pNNDguOTE3IDUzLjIxMjdWNTMuMjAwNkg0Ny40MTdWNTMuMjEyN0g0OC45MTdaTTQ4LjkxNyA1My4yMjQ4VjUzLjIxMjdINDcuNDE3VjUzLjIyNDhINDguOTE3Wk00OC45MTcgNTMuMjM2OVY1My4yMjQ4SDQ3LjQxN1Y1My4yMzY5SDQ4LjkxN1pNNDguOTE3IDUzLjI0OVY1My4yMzY5SDQ3LjQxN1Y1My4yNDlINDguOTE3Wk00OC45MTcgNTMuMjYxMVY1My4yNDlINDcuNDE3VjUzLjI2MTFINDguOTE3Wk00OC45MTcgNTMuMjczMVY1My4yNjExSDQ3LjQxN1Y1My4yNzMxSDQ4LjkxN1pNNDguOTE3IDUzLjI4NTJWNTMuMjczMUg0Ny40MTdWNTMuMjg1Mkg0OC45MTdaTTQ4LjkxNyA1My4yOTcyVjUzLjI4NTJINDcuNDE3VjUzLjI5NzJINDguOTE3Wk00OC45MTcgNTMuMzA5MlY1My4yOTcySDQ3LjQxN1Y1My4zMDkySDQ4LjkxN1pNNDguOTE3IDUzLjMyMTJWNTMuMzA5Mkg0Ny40MTdWNTMuMzIxMkg0OC45MTdaTTQ4LjkxNyA1My4zMzMxVjUzLjMyMTJINDcuNDE3VjUzLjMzMzFINDguOTE3Wk00OC45MTcgNTMuMzQ1MVY1My4zMzMxSDQ3LjQxN1Y1My4zNDUxSDQ4LjkxN1pNNDguOTE3IDUzLjM1N1Y1My4zNDUxSDQ3LjQxN1Y1My4zNTdINDguOTE3Wk00OC45MTcgNTMuMzY4OVY1My4zNTdINDcuNDE3VjUzLjM2ODlINDguOTE3Wk00OC45MTcgNTMuMzgwOFY1My4zNjg5SDQ3LjQxN1Y1My4zODA4SDQ4LjkxN1pNNDguOTE3IDUzLjM5MjdWNTMuMzgwOEg0Ny40MTdWNTMuMzkyN0g0OC45MTdaTTQ4LjkxNyA1My40MDQ1VjUzLjM5MjdINDcuNDE3VjUzLjQwNDVINDguOTE3Wk00OC45MTcgNTMuNDE2NFY1My40MDQ1SDQ3LjQxN1Y1My40MTY0SDQ4LjkxN1pNNDguOTE3IDUzLjQyODJWNTMuNDE2NEg0Ny40MTdWNTMuNDI4Mkg0OC45MTdaTTQ4LjkxNyA1My40NFY1My40MjgySDQ3LjQxN1Y1My40NEg0OC45MTdaTTQ4LjkxNyA1My40NTE4VjUzLjQ0SDQ3LjQxN1Y1My40NTE4SDQ4LjkxN1pNNDguOTE3IDUzLjQ2MzVWNTMuNDUxOEg0Ny40MTdWNTMuNDYzNUg0OC45MTdaTTQ4LjkxNyA1My40NzUzVjUzLjQ2MzVINDcuNDE3VjUzLjQ3NTNINDguOTE3Wk00OC45MTcgNTMuNDg3VjUzLjQ3NTNINDcuNDE3VjUzLjQ4N0g0OC45MTdaTTQ4LjkxNyA1My40OTg3VjUzLjQ4N0g0Ny40MTdWNTMuNDk4N0g0OC45MTdaTTQ4LjkxNyA1My41MTA0VjUzLjQ5ODdINDcuNDE3VjUzLjUxMDRINDguOTE3Wk00OC45MTcgNTMuNTIyMVY1My41MTA0SDQ3LjQxN1Y1My41MjIxSDQ4LjkxN1pNNDguOTE3IDUzLjUzMzdWNTMuNTIyMUg0Ny40MTdWNTMuNTMzN0g0OC45MTdaTTQ4LjkxNyA1My41NDU0VjUzLjUzMzdINDcuNDE3VjUzLjU0NTRINDguOTE3Wk00OC45MTcgNTMuNTU3VjUzLjU0NTRINDcuNDE3VjUzLjU1N0g0OC45MTdaTTQ4LjkxNyA1My41Njg2VjUzLjU1N0g0Ny40MTdWNTMuNTY4Nkg0OC45MTdaTTQ4LjkxNyA1My41ODAyVjUzLjU2ODZINDcuNDE3VjUzLjU4MDJINDguOTE3Wk00OC45MTcgNTMuNTkxOFY1My41ODAySDQ3LjQxN1Y1My41OTE4SDQ4LjkxN1pNNDguOTE3IDUzLjYwMzNWNTMuNTkxOEg0Ny40MTdWNTMuNjAzM0g0OC45MTdaTTQ4LjkxNyA1My42MTQ5VjUzLjYwMzNINDcuNDE3VjUzLjYxNDlINDguOTE3Wk00OC45MTcgNTMuNjI2NFY1My42MTQ5SDQ3LjQxN1Y1My42MjY0SDQ4LjkxN1pNNDguOTE3IDUzLjYzNzlWNTMuNjI2NEg0Ny40MTdWNTMuNjM3OUg0OC45MTdaTTQ4LjkxNyA1My42NDk0VjUzLjYzNzlINDcuNDE3VjUzLjY0OTRINDguOTE3Wk00OC45MTcgNTMuNjYwOFY1My42NDk0SDQ3LjQxN1Y1My42NjA4SDQ4LjkxN1pNNDguOTE3IDUzLjY3MjNWNTMuNjYwOEg0Ny40MTdWNTMuNjcyM0g0OC45MTdaTTQ4LjkxNyA1My42ODM3VjUzLjY3MjNINDcuNDE3VjUzLjY4MzdINDguOTE3Wk00OC45MTcgNTMuNjk1MVY1My42ODM3SDQ3LjQxN1Y1My42OTUxSDQ4LjkxN1pNNDguOTE3IDUzLjcwNjVWNTMuNjk1MUg0Ny40MTdWNTMuNzA2NUg0OC45MTdaTTQ4LjkxNyA1My43MTc5VjUzLjcwNjVINDcuNDE3VjUzLjcxNzlINDguOTE3Wk00OC45MTcgNTMuNzI5M1Y1My43MTc5SDQ3LjQxN1Y1My43MjkzSDQ4LjkxN1pNNDguOTE3IDUzLjc0MDZWNTMuNzI5M0g0Ny40MTdWNTMuNzQwNkg0OC45MTdaTTQ4LjkxNyA1My43NTE5VjUzLjc0MDZINDcuNDE3VjUzLjc1MTlINDguOTE3Wk00OC45MTcgNTMuNzYzMlY1My43NTE5SDQ3LjQxN1Y1My43NjMySDQ4LjkxN1pNNDguOTE3IDUzLjc3NDVWNTMuNzYzMkg0Ny40MTdWNTMuNzc0NUg0OC45MTdaTTQ4LjkxNyA1My43ODU4VjUzLjc3NDVINDcuNDE3VjUzLjc4NThINDguOTE3Wk00OC45MTcgNTMuNzk3VjUzLjc4NThINDcuNDE3VjUzLjc5N0g0OC45MTdaTTQ4LjkxNyA1My44MDgzVjUzLjc5N0g0Ny40MTdWNTMuODA4M0g0OC45MTdaTTQ4LjkxNyA1My44MTk1VjUzLjgwODNINDcuNDE3VjUzLjgxOTVINDguOTE3Wk00OC45MTcgNTMuODMwN1Y1My44MTk1SDQ3LjQxN1Y1My44MzA3SDQ4LjkxN1pNNDguOTE3IDUzLjg0MTlWNTMuODMwN0g0Ny40MTdWNTMuODQxOUg0OC45MTdaTTQ4LjkxNyA1My44NTNWNTMuODQxOUg0Ny40MTdWNTMuODUzSDQ4LjkxN1pNNDguOTE3IDUzLjg2NDJWNTMuODUzSDQ3LjQxN1Y1My44NjQySDQ4LjkxN1pNNDguOTE3IDUzLjg3NTNWNTMuODY0Mkg0Ny40MTdWNTMuODc1M0g0OC45MTdaTTQ4LjkxNyA1My44ODY0VjUzLjg3NTNINDcuNDE3VjUzLjg4NjRINDguOTE3Wk00OC45MTcgNTMuODk3NVY1My44ODY0SDQ3LjQxN1Y1My44OTc1SDQ4LjkxN1pNNDguOTE3IDUzLjkwODZWNTMuODk3NUg0Ny40MTdWNTMuOTA4Nkg0OC45MTdaTTQ4LjkxNyA1My45MTk3VjUzLjkwODZINDcuNDE3VjUzLjkxOTdINDguOTE3Wk00OC45MTcgNTMuOTMwN1Y1My45MTk3SDQ3LjQxN1Y1My45MzA3SDQ4LjkxN1pNNDguOTE3IDUzLjk0MTdWNTMuOTMwN0g0Ny40MTdWNTMuOTQxN0g0OC45MTdaTTQ4LjkxNyA1My45NTI3VjUzLjk0MTdINDcuNDE3VjUzLjk1MjdINDguOTE3Wk00OC45MTcgNTMuOTYzN1Y1My45NTI3SDQ3LjQxN1Y1My45NjM3SDQ4LjkxN1pNNDguOTE3IDUzLjk3NDdWNTMuOTYzN0g0Ny40MTdWNTMuOTc0N0g0OC45MTdaTTQ4LjkxNyA1My45ODU2VjUzLjk3NDdINDcuNDE3VjUzLjk4NTZINDguOTE3Wk00OC45MTcgNTMuOTk2NlY1My45ODU2SDQ3LjQxN1Y1My45OTY2SDQ4LjkxN1pNNDguOTE3IDU0LjAwNzVWNTMuOTk2Nkg0Ny40MTdWNTQuMDA3NUg0OC45MTdaTTQ4LjkxNyA1NC4wMTg0VjU0LjAwNzVINDcuNDE3VjU0LjAxODRINDguOTE3Wk00OC45MTcgNTQuMDI5M1Y1NC4wMTg0SDQ3LjQxN1Y1NC4wMjkzSDQ4LjkxN1pNNDguOTE3IDU0LjA0MDFWNTQuMDI5M0g0Ny40MTdWNTQuMDQwMUg0OC45MTdaTTQ4LjkxNyA1NC4wNTFWNTQuMDQwMUg0Ny40MTdWNTQuMDUxSDQ4LjkxN1pNNDguOTE3IDU0LjA2MThWNTQuMDUxSDQ3LjQxN1Y1NC4wNjE4SDQ4LjkxN1pNNDguOTE3IDU0LjA3MjZWNTQuMDYxOEg0Ny40MTdWNTQuMDcyNkg0OC45MTdaTTQ4LjkxNyA1NC4wODM0VjU0LjA3MjZINDcuNDE3VjU0LjA4MzRINDguOTE3Wk00OC45MTcgNTQuMDk0MlY1NC4wODM0SDQ3LjQxN1Y1NC4wOTQySDQ4LjkxN1pNNDguOTE3IDU0LjEwNDlWNTQuMDk0Mkg0Ny40MTdWNTQuMTA0OUg0OC45MTdaTTQ4LjkxNyA1NC4xMTU3VjU0LjEwNDlINDcuNDE3VjU0LjExNTdINDguOTE3Wk00OC45MTcgNTQuMTI2NFY1NC4xMTU3SDQ3LjQxN1Y1NC4xMjY0SDQ4LjkxN1pNNDguOTE3IDU0LjEzNzFWNTQuMTI2NEg0Ny40MTdWNTQuMTM3MUg0OC45MTdaTTQ4LjkxNyA1NC4xNDc4VjU0LjEzNzFINDcuNDE3VjU0LjE0NzhINDguOTE3Wk00OC45MTcgNTQuMTU4NFY1NC4xNDc4SDQ3LjQxN1Y1NC4xNTg0SDQ4LjkxN1pNNDguOTE3IDU0LjE2OTFWNTQuMTU4NEg0Ny40MTdWNTQuMTY5MUg0OC45MTdaTTQ4LjkxNyA1NC4xNzk3VjU0LjE2OTFINDcuNDE3VjU0LjE3OTdINDguOTE3Wk00OC45MTcgNTQuMTkwM1Y1NC4xNzk3SDQ3LjQxN1Y1NC4xOTAzSDQ4LjkxN1pNNDguOTE3IDU0LjIwMDlWNTQuMTkwM0g0Ny40MTdWNTQuMjAwOUg0OC45MTdaTTQ4LjkxNyA1NC4yMTE1VjU0LjIwMDlINDcuNDE3VjU0LjIxMTVINDguOTE3Wk00OC45MTcgNTQuMjIyMVY1NC4yMTE1SDQ3LjQxN1Y1NC4yMjIxSDQ4LjkxN1pNNDguOTE3IDU0LjIzMjZWNTQuMjIyMUg0Ny40MTdWNTQuMjMyNkg0OC45MTdaTTQ4LjkxNyA1NC4yNDMyVjU0LjIzMjZINDcuNDE3VjU0LjI0MzJINDguOTE3Wk00OC45MTcgNTQuMjUzN1Y1NC4yNDMySDQ3LjQxN1Y1NC4yNTM3SDQ4LjkxN1pNNDguOTE3IDU0LjI2NDJWNTQuMjUzN0g0Ny40MTdWNTQuMjY0Mkg0OC45MTdaTTQ4LjkxNyA1NC4yNzQ2VjU0LjI2NDJINDcuNDE3VjU0LjI3NDZINDguOTE3Wk00OC45MTcgNTQuMjg1MVY1NC4yNzQ2SDQ3LjQxN1Y1NC4yODUxSDQ4LjkxN1pNNDguOTE3IDU0LjI5NTVWNTQuMjg1MUg0Ny40MTdWNTQuMjk1NUg0OC45MTdaTTQ4LjkxNyA1NC4zMDU5VjU0LjI5NTVINDcuNDE3VjU0LjMwNTlINDguOTE3Wk00OC45MTcgNTQuMzE2M1Y1NC4zMDU5SDQ3LjQxN1Y1NC4zMTYzSDQ4LjkxN1pNNDguOTE3IDU0LjMyNjdWNTQuMzE2M0g0Ny40MTdWNTQuMzI2N0g0OC45MTdaTTQ4LjkxNyA1NC4zMzcxVjU0LjMyNjdINDcuNDE3VjU0LjMzNzFINDguOTE3Wk00OC45MTcgNTQuMzQ3NVY1NC4zMzcxSDQ3LjQxN1Y1NC4zNDc1SDQ4LjkxN1pNNDguOTE3IDU0LjM1NzhWNTQuMzQ3NUg0Ny40MTdWNTQuMzU3OEg0OC45MTdaTTQ4LjkxNyA1NC4zNjgxVjU0LjM1NzhINDcuNDE3VjU0LjM2ODFINDguOTE3Wk00OC45MTcgNTQuMzc4NFY1NC4zNjgxSDQ3LjQxN1Y1NC4zNzg0SDQ4LjkxN1pNNDguOTE3IDU0LjM4ODdWNTQuMzc4NEg0Ny40MTdWNTQuMzg4N0g0OC45MTdaTTQ4LjkxNyA1NC4zOTg5VjU0LjM4ODdINDcuNDE3VjU0LjM5ODlINDguOTE3Wk00OC45MTcgNTQuNDA5MlY1NC4zOTg5SDQ3LjQxN1Y1NC40MDkySDQ4LjkxN1pNNDguOTE3IDU0LjQxOTRWNTQuNDA5Mkg0Ny40MTdWNTQuNDE5NEg0OC45MTdaTTQ4LjkxNyA1NC40Mjk2VjU0LjQxOTRINDcuNDE3VjU0LjQyOTZINDguOTE3Wk00OC45MTcgNTQuNDM5OFY1NC40Mjk2SDQ3LjQxN1Y1NC40Mzk4SDQ4LjkxN1pNNDguOTE3IDU0LjQ1VjU0LjQzOThINDcuNDE3VjU0LjQ1SDQ4LjkxN1pNNDguOTE3IDU0LjQ2MDFWNTQuNDVINDcuNDE3VjU0LjQ2MDFINDguOTE3Wk00OC45MTcgNTQuNDcwM1Y1NC40NjAxSDQ3LjQxN1Y1NC40NzAzSDQ4LjkxN1pNNDguOTE3IDU0LjQ4MDRWNTQuNDcwM0g0Ny40MTdWNTQuNDgwNEg0OC45MTdaTTQ4LjkxNyA1NC40OTA1VjU0LjQ4MDRINDcuNDE3VjU0LjQ5MDVINDguOTE3Wk00OC45MTcgNTQuNTAwNlY1NC40OTA1SDQ3LjQxN1Y1NC41MDA2SDQ4LjkxN1pNNDguOTE3IDU0LjUxMDZWNTQuNTAwNkg0Ny40MTdWNTQuNTEwNkg0OC45MTdaTTQ4LjkxNyA1NC41MjA3VjU0LjUxMDZINDcuNDE3VjU0LjUyMDdINDguOTE3Wk00OC45MTcgNTQuNTMwN1Y1NC41MjA3SDQ3LjQxN1Y1NC41MzA3SDQ4LjkxN1pNNDguOTE3IDU0LjU0MDdWNTQuNTMwN0g0Ny40MTdWNTQuNTQwN0g0OC45MTdaTTQ4LjkxNyA1NC41NTA3VjU0LjU0MDdINDcuNDE3VjU0LjU1MDdINDguOTE3Wk00OC45MTcgNTQuNTYwN1Y1NC41NTA3SDQ3LjQxN1Y1NC41NjA3SDQ4LjkxN1pNNDguOTE3IDU0LjU3MDdWNTQuNTYwN0g0Ny40MTdWNTQuNTcwN0g0OC45MTdaTTQ4LjkxNyA1NC41ODA2VjU0LjU3MDdINDcuNDE3VjU0LjU4MDZINDguOTE3Wk00OC45MTcgNTQuNTkwNVY1NC41ODA2SDQ3LjQxN1Y1NC41OTA1SDQ4LjkxN1pNNDguOTE3IDU0LjYwMDRWNTQuNTkwNUg0Ny40MTdWNTQuNjAwNEg0OC45MTdaTTQ4LjkxNyA1NC42MTAzVjU0LjYwMDRINDcuNDE3VjU0LjYxMDNINDguOTE3Wk00OC45MTcgNTQuNjIwMlY1NC42MTAzSDQ3LjQxN1Y1NC42MjAySDQ4LjkxN1pNNDguOTE3IDU0LjYzMDFWNTQuNjIwMkg0Ny40MTdWNTQuNjMwMUg0OC45MTdaTTQ4LjkxNyA1NC42Mzk5VjU0LjYzMDFINDcuNDE3VjU0LjYzOTlINDguOTE3Wk00OC45MTcgNTQuNjQ5N1Y1NC42Mzk5SDQ3LjQxN1Y1NC42NDk3SDQ4LjkxN1pNNDguOTE3IDU0LjY1OTVWNTQuNjQ5N0g0Ny40MTdWNTQuNjU5NUg0OC45MTdaTTQ4LjkxNyA1NC42NjkzVjU0LjY1OTVINDcuNDE3VjU0LjY2OTNINDguOTE3Wk00OC45MTcgNTQuNjc5MVY1NC42NjkzSDQ3LjQxN1Y1NC42NzkxSDQ4LjkxN1pNNDguOTE3IDU0LjY4ODhWNTQuNjc5MUg0Ny40MTdWNTQuNjg4OEg0OC45MTdaTTQ4LjkxNyA1NC42OTg1VjU0LjY4ODhINDcuNDE3VjU0LjY5ODVINDguOTE3Wk00OC45MTcgNTQuNzA4MlY1NC42OTg1SDQ3LjQxN1Y1NC43MDgySDQ4LjkxN1pNNDguOTE3IDU0LjcxNzlWNTQuNzA4Mkg0Ny40MTdWNTQuNzE3OUg0OC45MTdaTTQ4LjkxNyA1NC43Mjc2VjU0LjcxNzlINDcuNDE3VjU0LjcyNzZINDguOTE3Wk00OC45MTcgNTQuNzM3M1Y1NC43Mjc2SDQ3LjQxN1Y1NC43MzczSDQ4LjkxN1pNNDguOTE3IDU0Ljc0NjlWNTQuNzM3M0g0Ny40MTdWNTQuNzQ2OUg0OC45MTdaTTQ4LjkxNyA1NC43NTY1VjU0Ljc0NjlINDcuNDE3VjU0Ljc1NjVINDguOTE3Wk00OC45MTcgNTQuNzY2MVY1NC43NTY1SDQ3LjQxN1Y1NC43NjYxSDQ4LjkxN1pNNDguOTE3IDU0Ljc3NTdWNTQuNzY2MUg0Ny40MTdWNTQuNzc1N0g0OC45MTdaTTQ4LjkxNyA1NC43ODUzVjU0Ljc3NTdINDcuNDE3VjU0Ljc4NTNINDguOTE3Wk00OC45MTcgNTQuNzk0OVY1NC43ODUzSDQ3LjQxN1Y1NC43OTQ5SDQ4LjkxN1pNNDguOTE3IDU0LjgwNDRWNTQuNzk0OUg0Ny40MTdWNTQuODA0NEg0OC45MTdaTTQ4LjkxNyA1NC44MTM5VjU0LjgwNDRINDcuNDE3VjU0LjgxMzlINDguOTE3Wk00OC45MTcgNTQuODIzNFY1NC44MTM5SDQ3LjQxN1Y1NC44MjM0SDQ4LjkxN1pNNDguOTE3IDU0LjgzMjlWNTQuODIzNEg0Ny40MTdWNTQuODMyOUg0OC45MTdaTTQ4LjkxNyA1NC44NDI0VjU0LjgzMjlINDcuNDE3VjU0Ljg0MjRINDguOTE3Wk00OC45MTcgNTQuODUxOFY1NC44NDI0SDQ3LjQxN1Y1NC44NTE4SDQ4LjkxN1pNNDguOTE3IDU0Ljg2MTJWNTQuODUxOEg0Ny40MTdWNTQuODYxMkg0OC45MTdaTTQ4LjkxNyA1NC44NzA2VjU0Ljg2MTJINDcuNDE3VjU0Ljg3MDZINDguOTE3Wk00OC45MTcgNTQuODhWNTQuODcwNkg0Ny40MTdWNTQuODhINDguOTE3Wk00OC45MTcgNTQuODg5NFY1NC44OEg0Ny40MTdWNTQuODg5NEg0OC45MTdaTTQ4LjkxNyA1NC44OTg4VjU0Ljg4OTRINDcuNDE3VjU0Ljg5ODhINDguOTE3Wk00OC45MTcgNTQuOTA4MVY1NC44OTg4SDQ3LjQxN1Y1NC45MDgxSDQ4LjkxN1pNNDguOTE3IDU0LjkxNzRWNTQuOTA4MUg0Ny40MTdWNTQuOTE3NEg0OC45MTdaTTQ4LjkxNyA1NC45MjY3VjU0LjkxNzRINDcuNDE3VjU0LjkyNjdINDguOTE3Wk00OC45MTcgNTQuOTM2VjU0LjkyNjdINDcuNDE3VjU0LjkzNkg0OC45MTdaTTQ4LjkxNyA1NC45NDUzVjU0LjkzNkg0Ny40MTdWNTQuOTQ1M0g0OC45MTdaTTQ4LjkxNyA1NC45NTQ1VjU0Ljk0NTNINDcuNDE3VjU0Ljk1NDVINDguOTE3Wk00OC45MTcgNTQuOTYzOFY1NC45NTQ1SDQ3LjQxN1Y1NC45NjM4SDQ4LjkxN1pNNDguOTE3IDU0Ljk3M1Y1NC45NjM4SDQ3LjQxN1Y1NC45NzNINDguOTE3Wk00OC45MTcgNTQuOTgyMlY1NC45NzNINDcuNDE3VjU0Ljk4MjJINDguOTE3Wk00OC45MTcgNTQuOTkxNFY1NC45ODIySDQ3LjQxN1Y1NC45OTE0SDQ4LjkxN1pNNDguOTE3IDU1LjAwMDVWNTQuOTkxNEg0Ny40MTdWNTUuMDAwNUg0OC45MTdaTTQ4LjkxNyA1NS4wMDk3VjU1LjAwMDVINDcuNDE3VjU1LjAwOTdINDguOTE3Wk00OC45MTcgNTUuMDE4OFY1NS4wMDk3SDQ3LjQxN1Y1NS4wMTg4SDQ4LjkxN1pNNDguOTE3IDU1LjAyNzlWNTUuMDE4OEg0Ny40MTdWNTUuMDI3OUg0OC45MTdaTTQ4LjkxNyA1NS4wMzdWNTUuMDI3OUg0Ny40MTdWNTUuMDM3SDQ4LjkxN1pNNDguOTE3IDU1LjA0NjFWNTUuMDM3SDQ3LjQxN1Y1NS4wNDYxSDQ4LjkxN1pNNDYuNjY3IDU1Ljc5NjFINDguMTY3VjU0LjI5NjFINDYuNjY3VjU1Ljc5NjFaTTQ1LjkxNyA1NS4wMzdWNTUuMDQ2MUg0Ny40MTdWNTUuMDM3SDQ1LjkxN1pNNDUuOTE3IDU1LjAyNzlWNTUuMDM3SDQ3LjQxN1Y1NS4wMjc5SDQ1LjkxN1pNNDUuOTE3IDU1LjAxODhWNTUuMDI3OUg0Ny40MTdWNTUuMDE4OEg0NS45MTdaTTQ1LjkxNyA1NS4wMDk3VjU1LjAxODhINDcuNDE3VjU1LjAwOTdINDUuOTE3Wk00NS45MTcgNTUuMDAwNVY1NS4wMDk3SDQ3LjQxN1Y1NS4wMDA1SDQ1LjkxN1pNNDUuOTE3IDU0Ljk5MTRWNTUuMDAwNUg0Ny40MTdWNTQuOTkxNEg0NS45MTdaTTQ1LjkxNyA1NC45ODIyVjU0Ljk5MTRINDcuNDE3VjU0Ljk4MjJINDUuOTE3Wk00NS45MTcgNTQuOTczVjU0Ljk4MjJINDcuNDE3VjU0Ljk3M0g0NS45MTdaTTQ1LjkxNyA1NC45NjM4VjU0Ljk3M0g0Ny40MTdWNTQuOTYzOEg0NS45MTdaTTQ1LjkxNyA1NC45NTQ1VjU0Ljk2MzhINDcuNDE3VjU0Ljk1NDVINDUuOTE3Wk00NS45MTcgNTQuOTQ1M1Y1NC45NTQ1SDQ3LjQxN1Y1NC45NDUzSDQ1LjkxN1pNNDUuOTE3IDU0LjkzNlY1NC45NDUzSDQ3LjQxN1Y1NC45MzZINDUuOTE3Wk00NS45MTcgNTQuOTI2N1Y1NC45MzZINDcuNDE3VjU0LjkyNjdINDUuOTE3Wk00NS45MTcgNTQuOTE3NFY1NC45MjY3SDQ3LjQxN1Y1NC45MTc0SDQ1LjkxN1pNNDUuOTE3IDU0LjkwODFWNTQuOTE3NEg0Ny40MTdWNTQuOTA4MUg0NS45MTdaTTQ1LjkxNyA1NC44OTg4VjU0LjkwODFINDcuNDE3VjU0Ljg5ODhINDUuOTE3Wk00NS45MTcgNTQuODg5NFY1NC44OTg4SDQ3LjQxN1Y1NC44ODk0SDQ1LjkxN1pNNDUuOTE3IDU0Ljg4VjU0Ljg4OTRINDcuNDE3VjU0Ljg4SDQ1LjkxN1pNNDUuOTE3IDU0Ljg3MDZWNTQuODhINDcuNDE3VjU0Ljg3MDZINDUuOTE3Wk00NS45MTcgNTQuODYxMlY1NC44NzA2SDQ3LjQxN1Y1NC44NjEySDQ1LjkxN1pNNDUuOTE3IDU0Ljg1MThWNTQuODYxMkg0Ny40MTdWNTQuODUxOEg0NS45MTdaTTQ1LjkxNyA1NC44NDI0VjU0Ljg1MThINDcuNDE3VjU0Ljg0MjRINDUuOTE3Wk00NS45MTcgNTQuODMyOVY1NC44NDI0SDQ3LjQxN1Y1NC44MzI5SDQ1LjkxN1pNNDUuOTE3IDU0LjgyMzRWNTQuODMyOUg0Ny40MTdWNTQuODIzNEg0NS45MTdaTTQ1LjkxNyA1NC44MTM5VjU0LjgyMzRINDcuNDE3VjU0LjgxMzlINDUuOTE3Wk00NS45MTcgNTQuODA0NFY1NC44MTM5SDQ3LjQxN1Y1NC44MDQ0SDQ1LjkxN1pNNDUuOTE3IDU0Ljc5NDlWNTQuODA0NEg0Ny40MTdWNTQuNzk0OUg0NS45MTdaTTQ1LjkxNyA1NC43ODUzVjU0Ljc5NDlINDcuNDE3VjU0Ljc4NTNINDUuOTE3Wk00NS45MTcgNTQuNzc1N1Y1NC43ODUzSDQ3LjQxN1Y1NC43NzU3SDQ1LjkxN1pNNDUuOTE3IDU0Ljc2NjFWNTQuNzc1N0g0Ny40MTdWNTQuNzY2MUg0NS45MTdaTTQ1LjkxNyA1NC43NTY1VjU0Ljc2NjFINDcuNDE3VjU0Ljc1NjVINDUuOTE3Wk00NS45MTcgNTQuNzQ2OVY1NC43NTY1SDQ3LjQxN1Y1NC43NDY5SDQ1LjkxN1pNNDUuOTE3IDU0LjczNzNWNTQuNzQ2OUg0Ny40MTdWNTQuNzM3M0g0NS45MTdaTTQ1LjkxNyA1NC43Mjc2VjU0LjczNzNINDcuNDE3VjU0LjcyNzZINDUuOTE3Wk00NS45MTcgNTQuNzE3OVY1NC43Mjc2SDQ3LjQxN1Y1NC43MTc5SDQ1LjkxN1pNNDUuOTE3IDU0LjcwODJWNTQuNzE3OUg0Ny40MTdWNTQuNzA4Mkg0NS45MTdaTTQ1LjkxNyA1NC42OTg1VjU0LjcwODJINDcuNDE3VjU0LjY5ODVINDUuOTE3Wk00NS45MTcgNTQuNjg4OFY1NC42OTg1SDQ3LjQxN1Y1NC42ODg4SDQ1LjkxN1pNNDUuOTE3IDU0LjY3OTFWNTQuNjg4OEg0Ny40MTdWNTQuNjc5MUg0NS45MTdaTTQ1LjkxNyA1NC42NjkzVjU0LjY3OTFINDcuNDE3VjU0LjY2OTNINDUuOTE3Wk00NS45MTcgNTQuNjU5NVY1NC42NjkzSDQ3LjQxN1Y1NC42NTk1SDQ1LjkxN1pNNDUuOTE3IDU0LjY0OTdWNTQuNjU5NUg0Ny40MTdWNTQuNjQ5N0g0NS45MTdaTTQ1LjkxNyA1NC42Mzk5VjU0LjY0OTdINDcuNDE3VjU0LjYzOTlINDUuOTE3Wk00NS45MTcgNTQuNjMwMVY1NC42Mzk5SDQ3LjQxN1Y1NC42MzAxSDQ1LjkxN1pNNDUuOTE3IDU0LjYyMDJWNTQuNjMwMUg0Ny40MTdWNTQuNjIwMkg0NS45MTdaTTQ1LjkxNyA1NC42MTAzVjU0LjYyMDJINDcuNDE3VjU0LjYxMDNINDUuOTE3Wk00NS45MTcgNTQuNjAwNFY1NC42MTAzSDQ3LjQxN1Y1NC42MDA0SDQ1LjkxN1pNNDUuOTE3IDU0LjU5MDVWNTQuNjAwNEg0Ny40MTdWNTQuNTkwNUg0NS45MTdaTTQ1LjkxNyA1NC41ODA2VjU0LjU5MDVINDcuNDE3VjU0LjU4MDZINDUuOTE3Wk00NS45MTcgNTQuNTcwN1Y1NC41ODA2SDQ3LjQxN1Y1NC41NzA3SDQ1LjkxN1pNNDUuOTE3IDU0LjU2MDdWNTQuNTcwN0g0Ny40MTdWNTQuNTYwN0g0NS45MTdaTTQ1LjkxNyA1NC41NTA3VjU0LjU2MDdINDcuNDE3VjU0LjU1MDdINDUuOTE3Wk00NS45MTcgNTQuNTQwN1Y1NC41NTA3SDQ3LjQxN1Y1NC41NDA3SDQ1LjkxN1pNNDUuOTE3IDU0LjUzMDdWNTQuNTQwN0g0Ny40MTdWNTQuNTMwN0g0NS45MTdaTTQ1LjkxNyA1NC41MjA3VjU0LjUzMDdINDcuNDE3VjU0LjUyMDdINDUuOTE3Wk00NS45MTcgNTQuNTEwNlY1NC41MjA3SDQ3LjQxN1Y1NC41MTA2SDQ1LjkxN1pNNDUuOTE3IDU0LjUwMDZWNTQuNTEwNkg0Ny40MTdWNTQuNTAwNkg0NS45MTdaTTQ1LjkxNyA1NC40OTA1VjU0LjUwMDZINDcuNDE3VjU0LjQ5MDVINDUuOTE3Wk00NS45MTcgNTQuNDgwNFY1NC40OTA1SDQ3LjQxN1Y1NC40ODA0SDQ1LjkxN1pNNDUuOTE3IDU0LjQ3MDNWNTQuNDgwNEg0Ny40MTdWNTQuNDcwM0g0NS45MTdaTTQ1LjkxNyA1NC40NjAxVjU0LjQ3MDNINDcuNDE3VjU0LjQ2MDFINDUuOTE3Wk00NS45MTcgNTQuNDVWNTQuNDYwMUg0Ny40MTdWNTQuNDVINDUuOTE3Wk00NS45MTcgNTQuNDM5OFY1NC40NUg0Ny40MTdWNTQuNDM5OEg0NS45MTdaTTQ1LjkxNyA1NC40Mjk2VjU0LjQzOThINDcuNDE3VjU0LjQyOTZINDUuOTE3Wk00NS45MTcgNTQuNDE5NFY1NC40Mjk2SDQ3LjQxN1Y1NC40MTk0SDQ1LjkxN1pNNDUuOTE3IDU0LjQwOTJWNTQuNDE5NEg0Ny40MTdWNTQuNDA5Mkg0NS45MTdaTTQ1LjkxNyA1NC4zOTg5VjU0LjQwOTJINDcuNDE3VjU0LjM5ODlINDUuOTE3Wk00NS45MTcgNTQuMzg4N1Y1NC4zOTg5SDQ3LjQxN1Y1NC4zODg3SDQ1LjkxN1pNNDUuOTE3IDU0LjM3ODRWNTQuMzg4N0g0Ny40MTdWNTQuMzc4NEg0NS45MTdaTTQ1LjkxNyA1NC4zNjgxVjU0LjM3ODRINDcuNDE3VjU0LjM2ODFINDUuOTE3Wk00NS45MTcgNTQuMzU3OFY1NC4zNjgxSDQ3LjQxN1Y1NC4zNTc4SDQ1LjkxN1pNNDUuOTE3IDU0LjM0NzVWNTQuMzU3OEg0Ny40MTdWNTQuMzQ3NUg0NS45MTdaTTQ1LjkxNyA1NC4zMzcxVjU0LjM0NzVINDcuNDE3VjU0LjMzNzFINDUuOTE3Wk00NS45MTcgNTQuMzI2N1Y1NC4zMzcxSDQ3LjQxN1Y1NC4zMjY3SDQ1LjkxN1pNNDUuOTE3IDU0LjMxNjNWNTQuMzI2N0g0Ny40MTdWNTQuMzE2M0g0NS45MTdaTTQ1LjkxNyA1NC4zMDU5VjU0LjMxNjNINDcuNDE3VjU0LjMwNTlINDUuOTE3Wk00NS45MTcgNTQuMjk1NVY1NC4zMDU5SDQ3LjQxN1Y1NC4yOTU1SDQ1LjkxN1pNNDUuOTE3IDU0LjI4NTFWNTQuMjk1NUg0Ny40MTdWNTQuMjg1MUg0NS45MTdaTTQ1LjkxNyA1NC4yNzQ2VjU0LjI4NTFINDcuNDE3VjU0LjI3NDZINDUuOTE3Wk00NS45MTcgNTQuMjY0MlY1NC4yNzQ2SDQ3LjQxN1Y1NC4yNjQySDQ1LjkxN1pNNDUuOTE3IDU0LjI1MzdWNTQuMjY0Mkg0Ny40MTdWNTQuMjUzN0g0NS45MTdaTTQ1LjkxNyA1NC4yNDMyVjU0LjI1MzdINDcuNDE3VjU0LjI0MzJINDUuOTE3Wk00NS45MTcgNTQuMjMyNlY1NC4yNDMySDQ3LjQxN1Y1NC4yMzI2SDQ1LjkxN1pNNDUuOTE3IDU0LjIyMjFWNTQuMjMyNkg0Ny40MTdWNTQuMjIyMUg0NS45MTdaTTQ1LjkxNyA1NC4yMTE1VjU0LjIyMjFINDcuNDE3VjU0LjIxMTVINDUuOTE3Wk00NS45MTcgNTQuMjAwOVY1NC4yMTE1SDQ3LjQxN1Y1NC4yMDA5SDQ1LjkxN1pNNDUuOTE3IDU0LjE5MDNWNTQuMjAwOUg0Ny40MTdWNTQuMTkwM0g0NS45MTdaTTQ1LjkxNyA1NC4xNzk3VjU0LjE5MDNINDcuNDE3VjU0LjE3OTdINDUuOTE3Wk00NS45MTcgNTQuMTY5MVY1NC4xNzk3SDQ3LjQxN1Y1NC4xNjkxSDQ1LjkxN1pNNDUuOTE3IDU0LjE1ODRWNTQuMTY5MUg0Ny40MTdWNTQuMTU4NEg0NS45MTdaTTQ1LjkxNyA1NC4xNDc4VjU0LjE1ODRINDcuNDE3VjU0LjE0NzhINDUuOTE3Wk00NS45MTcgNTQuMTM3MVY1NC4xNDc4SDQ3LjQxN1Y1NC4xMzcxSDQ1LjkxN1pNNDUuOTE3IDU0LjEyNjRWNTQuMTM3MUg0Ny40MTdWNTQuMTI2NEg0NS45MTdaTTQ1LjkxNyA1NC4xMTU3VjU0LjEyNjRINDcuNDE3VjU0LjExNTdINDUuOTE3Wk00NS45MTcgNTQuMTA0OVY1NC4xMTU3SDQ3LjQxN1Y1NC4xMDQ5SDQ1LjkxN1pNNDUuOTE3IDU0LjA5NDJWNTQuMTA0OUg0Ny40MTdWNTQuMDk0Mkg0NS45MTdaTTQ1LjkxNyA1NC4wODM0VjU0LjA5NDJINDcuNDE3VjU0LjA4MzRINDUuOTE3Wk00NS45MTcgNTQuMDcyNlY1NC4wODM0SDQ3LjQxN1Y1NC4wNzI2SDQ1LjkxN1pNNDUuOTE3IDU0LjA2MThWNTQuMDcyNkg0Ny40MTdWNTQuMDYxOEg0NS45MTdaTTQ1LjkxNyA1NC4wNTFWNTQuMDYxOEg0Ny40MTdWNTQuMDUxSDQ1LjkxN1pNNDUuOTE3IDU0LjA0MDFWNTQuMDUxSDQ3LjQxN1Y1NC4wNDAxSDQ1LjkxN1pNNDUuOTE3IDU0LjAyOTNWNTQuMDQwMUg0Ny40MTdWNTQuMDI5M0g0NS45MTdaTTQ1LjkxNyA1NC4wMTg0VjU0LjAyOTNINDcuNDE3VjU0LjAxODRINDUuOTE3Wk00NS45MTcgNTQuMDA3NVY1NC4wMTg0SDQ3LjQxN1Y1NC4wMDc1SDQ1LjkxN1pNNDUuOTE3IDUzLjk5NjZWNTQuMDA3NUg0Ny40MTdWNTMuOTk2Nkg0NS45MTdaTTQ1LjkxNyA1My45ODU2VjUzLjk5NjZINDcuNDE3VjUzLjk4NTZINDUuOTE3Wk00NS45MTcgNTMuOTc0N1Y1My45ODU2SDQ3LjQxN1Y1My45NzQ3SDQ1LjkxN1pNNDUuOTE3IDUzLjk2MzdWNTMuOTc0N0g0Ny40MTdWNTMuOTYzN0g0NS45MTdaTTQ1LjkxNyA1My45NTI3VjUzLjk2MzdINDcuNDE3VjUzLjk1MjdINDUuOTE3Wk00NS45MTcgNTMuOTQxN1Y1My45NTI3SDQ3LjQxN1Y1My45NDE3SDQ1LjkxN1pNNDUuOTE3IDUzLjkzMDdWNTMuOTQxN0g0Ny40MTdWNTMuOTMwN0g0NS45MTdaTTQ1LjkxNyA1My45MTk3VjUzLjkzMDdINDcuNDE3VjUzLjkxOTdINDUuOTE3Wk00NS45MTcgNTMuOTA4NlY1My45MTk3SDQ3LjQxN1Y1My45MDg2SDQ1LjkxN1pNNDUuOTE3IDUzLjg5NzVWNTMuOTA4Nkg0Ny40MTdWNTMuODk3NUg0NS45MTdaTTQ1LjkxNyA1My44ODY0VjUzLjg5NzVINDcuNDE3VjUzLjg4NjRINDUuOTE3Wk00NS45MTcgNTMuODc1M1Y1My44ODY0SDQ3LjQxN1Y1My44NzUzSDQ1LjkxN1pNNDUuOTE3IDUzLjg2NDJWNTMuODc1M0g0Ny40MTdWNTMuODY0Mkg0NS45MTdaTTQ1LjkxNyA1My44NTNWNTMuODY0Mkg0Ny40MTdWNTMuODUzSDQ1LjkxN1pNNDUuOTE3IDUzLjg0MTlWNTMuODUzSDQ3LjQxN1Y1My44NDE5SDQ1LjkxN1pNNDUuOTE3IDUzLjgzMDdWNTMuODQxOUg0Ny40MTdWNTMuODMwN0g0NS45MTdaTTQ1LjkxNyA1My44MTk1VjUzLjgzMDdINDcuNDE3VjUzLjgxOTVINDUuOTE3Wk00NS45MTcgNTMuODA4M1Y1My44MTk1SDQ3LjQxN1Y1My44MDgzSDQ1LjkxN1pNNDUuOTE3IDUzLjc5N1Y1My44MDgzSDQ3LjQxN1Y1My43OTdINDUuOTE3Wk00NS45MTcgNTMuNzg1OFY1My43OTdINDcuNDE3VjUzLjc4NThINDUuOTE3Wk00NS45MTcgNTMuNzc0NVY1My43ODU4SDQ3LjQxN1Y1My43NzQ1SDQ1LjkxN1pNNDUuOTE3IDUzLjc2MzJWNTMuNzc0NUg0Ny40MTdWNTMuNzYzMkg0NS45MTdaTTQ1LjkxNyA1My43NTE5VjUzLjc2MzJINDcuNDE3VjUzLjc1MTlINDUuOTE3Wk00NS45MTcgNTMuNzQwNlY1My43NTE5SDQ3LjQxN1Y1My43NDA2SDQ1LjkxN1pNNDUuOTE3IDUzLjcyOTNWNTMuNzQwNkg0Ny40MTdWNTMuNzI5M0g0NS45MTdaTTQ1LjkxNyA1My43MTc5VjUzLjcyOTNINDcuNDE3VjUzLjcxNzlINDUuOTE3Wk00NS45MTcgNTMuNzA2NVY1My43MTc5SDQ3LjQxN1Y1My43MDY1SDQ1LjkxN1pNNDUuOTE3IDUzLjY5NTFWNTMuNzA2NUg0Ny40MTdWNTMuNjk1MUg0NS45MTdaTTQ1LjkxNyA1My42ODM3VjUzLjY5NTFINDcuNDE3VjUzLjY4MzdINDUuOTE3Wk00NS45MTcgNTMuNjcyM1Y1My42ODM3SDQ3LjQxN1Y1My42NzIzSDQ1LjkxN1pNNDUuOTE3IDUzLjY2MDhWNTMuNjcyM0g0Ny40MTdWNTMuNjYwOEg0NS45MTdaTTQ1LjkxNyA1My42NDk0VjUzLjY2MDhINDcuNDE3VjUzLjY0OTRINDUuOTE3Wk00NS45MTcgNTMuNjM3OVY1My42NDk0SDQ3LjQxN1Y1My42Mzc5SDQ1LjkxN1pNNDUuOTE3IDUzLjYyNjRWNTMuNjM3OUg0Ny40MTdWNTMuNjI2NEg0NS45MTdaTTQ1LjkxNyA1My42MTQ5VjUzLjYyNjRINDcuNDE3VjUzLjYxNDlINDUuOTE3Wk00NS45MTcgNTMuNjAzM1Y1My42MTQ5SDQ3LjQxN1Y1My42MDMzSDQ1LjkxN1pNNDUuOTE3IDUzLjU5MThWNTMuNjAzM0g0Ny40MTdWNTMuNTkxOEg0NS45MTdaTTQ1LjkxNyA1My41ODAyVjUzLjU5MThINDcuNDE3VjUzLjU4MDJINDUuOTE3Wk00NS45MTcgNTMuNTY4NlY1My41ODAySDQ3LjQxN1Y1My41Njg2SDQ1LjkxN1pNNDUuOTE3IDUzLjU1N1Y1My41Njg2SDQ3LjQxN1Y1My41NTdINDUuOTE3Wk00NS45MTcgNTMuNTQ1NFY1My41NTdINDcuNDE3VjUzLjU0NTRINDUuOTE3Wk00NS45MTcgNTMuNTMzN1Y1My41NDU0SDQ3LjQxN1Y1My41MzM3SDQ1LjkxN1pNNDUuOTE3IDUzLjUyMjFWNTMuNTMzN0g0Ny40MTdWNTMuNTIyMUg0NS45MTdaTTQ1LjkxNyA1My41MTA0VjUzLjUyMjFINDcuNDE3VjUzLjUxMDRINDUuOTE3Wk00NS45MTcgNTMuNDk4N1Y1My41MTA0SDQ3LjQxN1Y1My40OTg3SDQ1LjkxN1pNNDUuOTE3IDUzLjQ4N1Y1My40OTg3SDQ3LjQxN1Y1My40ODdINDUuOTE3Wk00NS45MTcgNTMuNDc1M1Y1My40ODdINDcuNDE3VjUzLjQ3NTNINDUuOTE3Wk00NS45MTcgNTMuNDYzNVY1My40NzUzSDQ3LjQxN1Y1My40NjM1SDQ1LjkxN1pNNDUuOTE3IDUzLjQ1MThWNTMuNDYzNUg0Ny40MTdWNTMuNDUxOEg0NS45MTdaTTQ1LjkxNyA1My40NFY1My40NTE4SDQ3LjQxN1Y1My40NEg0NS45MTdaTTQ1LjkxNyA1My40MjgyVjUzLjQ0SDQ3LjQxN1Y1My40MjgySDQ1LjkxN1pNNDUuOTE3IDUzLjQxNjRWNTMuNDI4Mkg0Ny40MTdWNTMuNDE2NEg0NS45MTdaTTQ1LjkxNyA1My40MDQ1VjUzLjQxNjRINDcuNDE3VjUzLjQwNDVINDUuOTE3Wk00NS45MTcgNTMuMzkyN1Y1My40MDQ1SDQ3LjQxN1Y1My4zOTI3SDQ1LjkxN1pNNDUuOTE3IDUzLjM4MDhWNTMuMzkyN0g0Ny40MTdWNTMuMzgwOEg0NS45MTdaTTQ1LjkxNyA1My4zNjg5VjUzLjM4MDhINDcuNDE3VjUzLjM2ODlINDUuOTE3Wk00NS45MTcgNTMuMzU3VjUzLjM2ODlINDcuNDE3VjUzLjM1N0g0NS45MTdaTTQ1LjkxNyA1My4zNDUxVjUzLjM1N0g0Ny40MTdWNTMuMzQ1MUg0NS45MTdaTTQ1LjkxNyA1My4zMzMxVjUzLjM0NTFINDcuNDE3VjUzLjMzMzFINDUuOTE3Wk00NS45MTcgNTMuMzIxMlY1My4zMzMxSDQ3LjQxN1Y1My4zMjEySDQ1LjkxN1pNNDUuOTE3IDUzLjMwOTJWNTMuMzIxMkg0Ny40MTdWNTMuMzA5Mkg0NS45MTdaTTQ1LjkxNyA1My4yOTcyVjUzLjMwOTJINDcuNDE3VjUzLjI5NzJINDUuOTE3Wk00NS45MTcgNTMuMjg1MlY1My4yOTcySDQ3LjQxN1Y1My4yODUySDQ1LjkxN1pNNDUuOTE3IDUzLjI3MzFWNTMuMjg1Mkg0Ny40MTdWNTMuMjczMUg0NS45MTdaTTQ1LjkxNyA1My4yNjExVjUzLjI3MzFINDcuNDE3VjUzLjI2MTFINDUuOTE3Wk00NS45MTcgNTMuMjQ5VjUzLjI2MTFINDcuNDE3VjUzLjI0OUg0NS45MTdaTTQ1LjkxNyA1My4yMzY5VjUzLjI0OUg0Ny40MTdWNTMuMjM2OUg0NS45MTdaTTQ1LjkxNyA1My4yMjQ4VjUzLjIzNjlINDcuNDE3VjUzLjIyNDhINDUuOTE3Wk00NS45MTcgNTMuMjEyN1Y1My4yMjQ4SDQ3LjQxN1Y1My4yMTI3SDQ1LjkxN1pNNDUuOTE3IDUzLjIwMDZWNTMuMjEyN0g0Ny40MTdWNTMuMjAwNkg0NS45MTdaTTQ1LjkxNyA1My4xODg0VjUzLjIwMDZINDcuNDE3VjUzLjE4ODRINDUuOTE3Wk00NS45MTcgNTMuMTc2MlY1My4xODg0SDQ3LjQxN1Y1My4xNzYySDQ1LjkxN1pNNDUuOTE3IDUzLjE2NDFWNTMuMTc2Mkg0Ny40MTdWNTMuMTY0MUg0NS45MTdaTTQ1LjkxNyA1My4xNTE4VjUzLjE2NDFINDcuNDE3VjUzLjE1MThINDUuOTE3Wk00NS45MTcgNTMuMTM5NlY1My4xNTE4SDQ3LjQxN1Y1My4xMzk2SDQ1LjkxN1pNNDUuOTE3IDUzLjEyNzRWNTMuMTM5Nkg0Ny40MTdWNTMuMTI3NEg0NS45MTdaTTQ1LjkxNyA1My4xMTUxVjUzLjEyNzRINDcuNDE3VjUzLjExNTFINDUuOTE3Wk00NS45MTcgNTMuMTAyOFY1My4xMTUxSDQ3LjQxN1Y1My4xMDI4SDQ1LjkxN1pNNDUuOTE3IDUzLjA5MDVWNTMuMTAyOEg0Ny40MTdWNTMuMDkwNUg0NS45MTdaTTQ1LjkxNyA1My4wNzgyVjUzLjA5MDVINDcuNDE3VjUzLjA3ODJINDUuOTE3Wk00NS45MTcgNTMuMDY1OVY1My4wNzgySDQ3LjQxN1Y1My4wNjU5SDQ1LjkxN1pNNDUuOTE3IDUzLjA1MzVWNTMuMDY1OUg0Ny40MTdWNTMuMDUzNUg0NS45MTdaTTQ1LjkxNyA1My4wNDEyVjUzLjA1MzVINDcuNDE3VjUzLjA0MTJINDUuOTE3Wk00NS45MTcgNTMuMDI4OFY1My4wNDEySDQ3LjQxN1Y1My4wMjg4SDQ1LjkxN1pNNDUuOTE3IDUzLjAxNjRWNTMuMDI4OEg0Ny40MTdWNTMuMDE2NEg0NS45MTdaTTQ1LjkxNyA1My4wMDRWNTMuMDE2NEg0Ny40MTdWNTMuMDA0SDQ1LjkxN1pNNDUuOTE3IDUyLjk5MTVWNTMuMDA0SDQ3LjQxN1Y1Mi45OTE1SDQ1LjkxN1pNNDUuOTE3IDUyLjk3OTFWNTIuOTkxNUg0Ny40MTdWNTIuOTc5MUg0NS45MTdaTTQ1LjkxNyA1Mi45NjY2VjUyLjk3OTFINDcuNDE3VjUyLjk2NjZINDUuOTE3Wk00NS45MTcgNTIuOTU0MVY1Mi45NjY2SDQ3LjQxN1Y1Mi45NTQxSDQ1LjkxN1pNNDUuOTE3IDUyLjk0MTZWNTIuOTU0MUg0Ny40MTdWNTIuOTQxNkg0NS45MTdaTTQ1LjkxNyA1Mi45MjkxVjUyLjk0MTZINDcuNDE3VjUyLjkyOTFINDUuOTE3Wk00NS45MTcgNTIuOTE2NVY1Mi45MjkxSDQ3LjQxN1Y1Mi45MTY1SDQ1LjkxN1pNNDUuOTE3IDUyLjkwNFY1Mi45MTY1SDQ3LjQxN1Y1Mi45MDRINDUuOTE3Wk00NS45MTcgNTIuODkxNFY1Mi45MDRINDcuNDE3VjUyLjg5MTRINDUuOTE3Wk00NS45MTcgNTIuODc4OFY1Mi44OTE0SDQ3LjQxN1Y1Mi44Nzg4SDQ1LjkxN1pNNDUuOTE3IDUyLjg2NjJWNTIuODc4OEg0Ny40MTdWNTIuODY2Mkg0NS45MTdaTTQ1LjkxNyA1Mi44NTM1VjUyLjg2NjJINDcuNDE3VjUyLjg1MzVINDUuOTE3Wk00NS45MTcgNTIuODQwOVY1Mi44NTM1SDQ3LjQxN1Y1Mi44NDA5SDQ1LjkxN1pNNDUuOTE3IDUyLjgyODJWNTIuODQwOUg0Ny40MTdWNTIuODI4Mkg0NS45MTdaTTQ1LjkxNyA1Mi44MTU1VjUyLjgyODJINDcuNDE3VjUyLjgxNTVINDUuOTE3Wk00NS45MTcgNTIuODAyOFY1Mi44MTU1SDQ3LjQxN1Y1Mi44MDI4SDQ1LjkxN1pNNDUuOTE3IDUyLjc5MDFWNTIuODAyOEg0Ny40MTdWNTIuNzkwMUg0NS45MTdaTTQ1LjkxNyA1Mi43NzczVjUyLjc5MDFINDcuNDE3VjUyLjc3NzNINDUuOTE3Wk00NS45MTcgNTIuNzY0NlY1Mi43NzczSDQ3LjQxN1Y1Mi43NjQ2SDQ1LjkxN1pNNDUuOTE3IDUyLjc1MThWNTIuNzY0Nkg0Ny40MTdWNTIuNzUxOEg0NS45MTdaTTQ1LjkxNyA1Mi43MzlWNTIuNzUxOEg0Ny40MTdWNTIuNzM5SDQ1LjkxN1pNNDUuOTE3IDUyLjcyNjJWNTIuNzM5SDQ3LjQxN1Y1Mi43MjYySDQ1LjkxN1pNNDUuOTE3IDUyLjcxMzRWNTIuNzI2Mkg0Ny40MTdWNTIuNzEzNEg0NS45MTdaTTQ1LjkxNyA1Mi43MDA1VjUyLjcxMzRINDcuNDE3VjUyLjcwMDVINDUuOTE3Wk00NS45MTcgNTIuNjg3N1Y1Mi43MDA1SDQ3LjQxN1Y1Mi42ODc3SDQ1LjkxN1pNNDUuOTE3IDUyLjY3NDhWNTIuNjg3N0g0Ny40MTdWNTIuNjc0OEg0NS45MTdaTTQ1LjkxNyA1Mi42NjE5VjUyLjY3NDhINDcuNDE3VjUyLjY2MTlINDUuOTE3Wk00NS45MTcgNTIuNjQ5VjUyLjY2MTlINDcuNDE3VjUyLjY0OUg0NS45MTdaTTQ1LjkxNyA1Mi42MzZWNTIuNjQ5SDQ3LjQxN1Y1Mi42MzZINDUuOTE3Wk00NS45MTcgNTIuNjIzMVY1Mi42MzZINDcuNDE3VjUyLjYyMzFINDUuOTE3Wk00NS45MTcgNTIuNjEwMVY1Mi42MjMxSDQ3LjQxN1Y1Mi42MTAxSDQ1LjkxN1pNNDUuOTE3IDUyLjU5NzFWNTIuNjEwMUg0Ny40MTdWNTIuNTk3MUg0NS45MTdaTTQ1LjkxNyA1Mi41ODQxVjUyLjU5NzFINDcuNDE3VjUyLjU4NDFINDUuOTE3Wk00NS45MTcgNTIuNTcxMVY1Mi41ODQxSDQ3LjQxN1Y1Mi41NzExSDQ1LjkxN1pNNDUuOTE3IDUyLjU1ODFWNTIuNTcxMUg0Ny40MTdWNTIuNTU4MUg0NS45MTdaTTQ1LjkxNyA1Mi41NDVWNTIuNTU4MUg0Ny40MTdWNTIuNTQ1SDQ1LjkxN1pNNDUuOTE3IDUyLjUzMTlWNTIuNTQ1SDQ3LjQxN1Y1Mi41MzE5SDQ1LjkxN1pNNDUuOTE3IDUyLjUxODhWNTIuNTMxOUg0Ny40MTdWNTIuNTE4OEg0NS45MTdaTTQ1LjkxNyA1Mi41MDU3VjUyLjUxODhINDcuNDE3VjUyLjUwNTdINDUuOTE3Wk00NS45MTcgNTIuNDkyNlY1Mi41MDU3SDQ3LjQxN1Y1Mi40OTI2SDQ1LjkxN1pNNDUuOTE3IDUyLjQ3OTRWNTIuNDkyNkg0Ny40MTdWNTIuNDc5NEg0NS45MTdaTTQ1LjkxNyA1Mi40NjYzVjUyLjQ3OTRINDcuNDE3VjUyLjQ2NjNINDUuOTE3Wk00NS45MTcgNTIuNDUzMVY1Mi40NjYzSDQ3LjQxN1Y1Mi40NTMxSDQ1LjkxN1pNNDUuOTE3IDUyLjQzOTlWNTIuNDUzMUg0Ny40MTdWNTIuNDM5OUg0NS45MTdaTTQ1LjkxNyA1Mi40MjY3VjUyLjQzOTlINDcuNDE3VjUyLjQyNjdINDUuOTE3Wk00NS45MTcgNTIuNDEzNFY1Mi40MjY3SDQ3LjQxN1Y1Mi40MTM0SDQ1LjkxN1pNNDUuOTE3IDUyLjQwMDJWNTIuNDEzNEg0Ny40MTdWNTIuNDAwMkg0NS45MTdaTTQ1LjkxNyA1Mi4zODY5VjUyLjQwMDJINDcuNDE3VjUyLjM4NjlINDUuOTE3Wk00NS45MTcgNTIuMzczNlY1Mi4zODY5SDQ3LjQxN1Y1Mi4zNzM2SDQ1LjkxN1pNNDUuOTE3IDUyLjM2MDNWNTIuMzczNkg0Ny40MTdWNTIuMzYwM0g0NS45MTdaTTQ1LjkxNyA1Mi4zNDdWNTIuMzYwM0g0Ny40MTdWNTIuMzQ3SDQ1LjkxN1pNNDUuOTE3IDUyLjMzMzdWNTIuMzQ3SDQ3LjQxN1Y1Mi4zMzM3SDQ1LjkxN1pNNDUuOTE3IDUyLjMyMDNWNTIuMzMzN0g0Ny40MTdWNTIuMzIwM0g0NS45MTdaTTQ1LjkxNyA1Mi4zMDY5VjUyLjMyMDNINDcuNDE3VjUyLjMwNjlINDUuOTE3Wk00NS45MTcgNTIuMjkzNVY1Mi4zMDY5SDQ3LjQxN1Y1Mi4yOTM1SDQ1LjkxN1pNNDUuOTE3IDUyLjI4MDFWNTIuMjkzNUg0Ny40MTdWNTIuMjgwMUg0NS45MTdaTTQ1LjkxNyA1Mi4yNjY3VjUyLjI4MDFINDcuNDE3VjUyLjI2NjdINDUuOTE3Wk00NS45MTcgNTIuMjUzMlY1Mi4yNjY3SDQ3LjQxN1Y1Mi4yNTMySDQ1LjkxN1pNNDUuOTE3IDUyLjIzOThWNTIuMjUzMkg0Ny40MTdWNTIuMjM5OEg0NS45MTdaTTQ1LjkxNyA1Mi4yMjYzVjUyLjIzOThINDcuNDE3VjUyLjIyNjNINDUuOTE3Wk00NS45MTcgNTIuMjEyOFY1Mi4yMjYzSDQ3LjQxN1Y1Mi4yMTI4SDQ1LjkxN1pNNDUuOTE3IDUyLjE5OTNWNTIuMjEyOEg0Ny40MTdWNTIuMTk5M0g0NS45MTdaTTQ1LjkxNyA1Mi4xODU3VjUyLjE5OTNINDcuNDE3VjUyLjE4NTdINDUuOTE3Wk00NS45MTcgNTIuMTcyMlY1Mi4xODU3SDQ3LjQxN1Y1Mi4xNzIySDQ1LjkxN1pNNDUuOTE3IDUyLjE1ODZWNTIuMTcyMkg0Ny40MTdWNTIuMTU4Nkg0NS45MTdaTTQ1LjkxNyA1Mi4xNDVWNTIuMTU4Nkg0Ny40MTdWNTIuMTQ1SDQ1LjkxN1pNNDUuOTE3IDUyLjEzMTRWNTIuMTQ1SDQ3LjQxN1Y1Mi4xMzE0SDQ1LjkxN1pNNDUuOTE3IDUyLjExNzhWNTIuMTMxNEg0Ny40MTdWNTIuMTE3OEg0NS45MTdaTTQ1LjkxNyA1Mi4xMDQxVjUyLjExNzhINDcuNDE3VjUyLjEwNDFINDUuOTE3Wk00NS45MTcgNTIuMDkwNVY1Mi4xMDQxSDQ3LjQxN1Y1Mi4wOTA1SDQ1LjkxN1pNNDUuOTE3IDUyLjA3NjhWNTIuMDkwNUg0Ny40MTdWNTIuMDc2OEg0NS45MTdaTTQ1LjkxNyA1Mi4wNjMxVjUyLjA3NjhINDcuNDE3VjUyLjA2MzFINDUuOTE3Wk00NS45MTcgNTIuMDQ5NFY1Mi4wNjMxSDQ3LjQxN1Y1Mi4wNDk0SDQ1LjkxN1pNNDUuOTE3IDUyLjAzNTZWNTIuMDQ5NEg0Ny40MTdWNTIuMDM1Nkg0NS45MTdaTTQ1LjkxNyA1Mi4wMjE5VjUyLjAzNTZINDcuNDE3VjUyLjAyMTlINDUuOTE3Wk00NS45MTcgNTIuMDA4MVY1Mi4wMjE5SDQ3LjQxN1Y1Mi4wMDgxSDQ1LjkxN1pNNDUuOTE3IDUxLjk5NDNWNTIuMDA4MUg0Ny40MTdWNTEuOTk0M0g0NS45MTdaTTQ1LjkxNyA1MS45ODA1VjUxLjk5NDNINDcuNDE3VjUxLjk4MDVINDUuOTE3Wk00NS45MTcgNTEuOTY2N1Y1MS45ODA1SDQ3LjQxN1Y1MS45NjY3SDQ1LjkxN1pNNDUuOTE3IDUxLjk1MjlWNTEuOTY2N0g0Ny40MTdWNTEuOTUyOUg0NS45MTdaTTQ1LjkxNyA1MS45MzlWNTEuOTUyOUg0Ny40MTdWNTEuOTM5SDQ1LjkxN1pNNDUuOTE3IDUxLjkyNTJWNTEuOTM5SDQ3LjQxN1Y1MS45MjUySDQ1LjkxN1pNNDUuOTE3IDUxLjkxMTNWNTEuOTI1Mkg0Ny40MTdWNTEuOTExM0g0NS45MTdaTTQ1LjkxNyA1MS44OTc0VjUxLjkxMTNINDcuNDE3VjUxLjg5NzRINDUuOTE3Wk00NS45MTcgNTEuODgzNFY1MS44OTc0SDQ3LjQxN1Y1MS44ODM0SDQ1LjkxN1pNNDUuOTE3IDUxLjg2OTVWNTEuODgzNEg0Ny40MTdWNTEuODY5NUg0NS45MTdaTTQ1LjkxNyA1MS44NTU1VjUxLjg2OTVINDcuNDE3VjUxLjg1NTVINDUuOTE3Wk00NS45MTcgNTEuODQxNVY1MS44NTU1SDQ3LjQxN1Y1MS44NDE1SDQ1LjkxN1pNNDUuOTE3IDUxLjgyNzVWNTEuODQxNUg0Ny40MTdWNTEuODI3NUg0NS45MTdaTTQ1LjkxNyA1MS44MTM1VjUxLjgyNzVINDcuNDE3VjUxLjgxMzVINDUuOTE3Wk00NS45MTcgNTEuNzk5NVY1MS44MTM1SDQ3LjQxN1Y1MS43OTk1SDQ1LjkxN1pNNDUuOTE3IDUxLjc4NTRWNTEuNzk5NUg0Ny40MTdWNTEuNzg1NEg0NS45MTdaTTQ1LjkxNyA1MS43NzE0VjUxLjc4NTRINDcuNDE3VjUxLjc3MTRINDUuOTE3Wk00NS45MTcgNTEuNzU3M1Y1MS43NzE0SDQ3LjQxN1Y1MS43NTczSDQ1LjkxN1pNNDUuOTE3IDUxLjc0MzJWNTEuNzU3M0g0Ny40MTdWNTEuNzQzMkg0NS45MTdaTTQ1LjkxNyA1MS43MjkxVjUxLjc0MzJINDcuNDE3VjUxLjcyOTFINDUuOTE3Wk00NS45MTcgNTEuNzE0OVY1MS43MjkxSDQ3LjQxN1Y1MS43MTQ5SDQ1LjkxN1pNNDUuOTE3IDUxLjcwMDhWNTEuNzE0OUg0Ny40MTdWNTEuNzAwOEg0NS45MTdaTTQ1LjkxNyA1MS42ODY2VjUxLjcwMDhINDcuNDE3VjUxLjY4NjZINDUuOTE3Wk00NS45MTcgNTEuNjcyNFY1MS42ODY2SDQ3LjQxN1Y1MS42NzI0SDQ1LjkxN1pNNDUuOTE3IDUxLjY1ODJWNTEuNjcyNEg0Ny40MTdWNTEuNjU4Mkg0NS45MTdaTTQ1LjkxNyA1MS42NDRWNTEuNjU4Mkg0Ny40MTdWNTEuNjQ0SDQ1LjkxN1pNNDUuOTE3IDUxLjYyOTdWNTEuNjQ0SDQ3LjQxN1Y1MS42Mjk3SDQ1LjkxN1pNNDUuOTE3IDUxLjYxNTVWNTEuNjI5N0g0Ny40MTdWNTEuNjE1NUg0NS45MTdaTTQ1LjkxNyA1MS42MDEyVjUxLjYxNTVINDcuNDE3VjUxLjYwMTJINDUuOTE3Wk00NS45MTcgNTEuNTg2OVY1MS42MDEySDQ3LjQxN1Y1MS41ODY5SDQ1LjkxN1pNNDUuOTE3IDUxLjU3MjZWNTEuNTg2OUg0Ny40MTdWNTEuNTcyNkg0NS45MTdaTTQ1LjkxNyA1MS41NTgyVjUxLjU3MjZINDcuNDE3VjUxLjU1ODJINDUuOTE3Wk00NS45MTcgNTEuNTQzOVY1MS41NTgySDQ3LjQxN1Y1MS41NDM5SDQ1LjkxN1pNNDUuOTE3IDUxLjUyOTVWNTEuNTQzOUg0Ny40MTdWNTEuNTI5NUg0NS45MTdaTTQ1LjkxNyA1MS41MTUxVjUxLjUyOTVINDcuNDE3VjUxLjUxNTFINDUuOTE3Wk00NS45MTcgNTEuNTAwN1Y1MS41MTUxSDQ3LjQxN1Y1MS41MDA3SDQ1LjkxN1pNNDUuOTE3IDUxLjQ4NjNWNTEuNTAwN0g0Ny40MTdWNTEuNDg2M0g0NS45MTdaTTQ1LjkxNyA1MS40NzE5VjUxLjQ4NjNINDcuNDE3VjUxLjQ3MTlINDUuOTE3Wk00NS45MTcgNTEuNDU3NFY1MS40NzE5SDQ3LjQxN1Y1MS40NTc0SDQ1LjkxN1pNNDUuOTE3IDUxLjQ0MjlWNTEuNDU3NEg0Ny40MTdWNTEuNDQyOUg0NS45MTdaTTQ1LjkxNyA1MS40Mjg0VjUxLjQ0MjlINDcuNDE3VjUxLjQyODRINDUuOTE3Wk00NS45MTcgNTEuNDEzOVY1MS40Mjg0SDQ3LjQxN1Y1MS40MTM5SDQ1LjkxN1pNNDUuOTE3IDUxLjM5OTRWNTEuNDEzOUg0Ny40MTdWNTEuMzk5NEg0NS45MTdaTTQ1LjkxNyA1MS4zODQ4VjUxLjM5OTRINDcuNDE3VjUxLjM4NDhINDUuOTE3Wk00NS45MTcgNTEuMzcwM1Y1MS4zODQ4SDQ3LjQxN1Y1MS4zNzAzSDQ1LjkxN1pNNDUuOTE3IDUxLjM1NTdWNTEuMzcwM0g0Ny40MTdWNTEuMzU1N0g0NS45MTdaTTQ1LjkxNyA1MS4zNDExVjUxLjM1NTdINDcuNDE3VjUxLjM0MTFINDUuOTE3Wk00NS45MTcgNTEuMzI2NVY1MS4zNDExSDQ3LjQxN1Y1MS4zMjY1SDQ1LjkxN1pNNDUuOTE3IDUxLjMxMTlWNTEuMzI2NUg0Ny40MTdWNTEuMzExOUg0NS45MTdaTTQ1LjkxNyA1MS4yOTcyVjUxLjMxMTlINDcuNDE3VjUxLjI5NzJINDUuOTE3Wk00NS45MTcgNTEuMjgyNVY1MS4yOTcySDQ3LjQxN1Y1MS4yODI1SDQ1LjkxN1pNNDUuOTE3IDUxLjI2NzhWNTEuMjgyNUg0Ny40MTdWNTEuMjY3OEg0NS45MTdaTTQ1LjkxNyA1MS4yNTMxVjUxLjI2NzhINDcuNDE3VjUxLjI1MzFINDUuOTE3Wk00NS45MTcgNTEuMjM4NFY1MS4yNTMxSDQ3LjQxN1Y1MS4yMzg0SDQ1LjkxN1pNNDUuOTE3IDUxLjIyMzdWNTEuMjM4NEg0Ny40MTdWNTEuMjIzN0g0NS45MTdaTTQ1LjkxNyA1MS4yMDg5VjUxLjIyMzdINDcuNDE3VjUxLjIwODlINDUuOTE3Wk00NS45MTcgNTEuMTk0MVY1MS4yMDg5SDQ3LjQxN1Y1MS4xOTQxSDQ1LjkxN1pNNDUuOTE3IDUxLjE3OTNWNTEuMTk0MUg0Ny40MTdWNTEuMTc5M0g0NS45MTdaTTQ1LjkxNyA1MS4xNjQ1VjUxLjE3OTNINDcuNDE3VjUxLjE2NDVINDUuOTE3Wk00NS45MTcgNTEuMTQ5N1Y1MS4xNjQ1SDQ3LjQxN1Y1MS4xNDk3SDQ1LjkxN1pNNDUuOTE3IDUxLjEzNDlWNTEuMTQ5N0g0Ny40MTdWNTEuMTM0OUg0NS45MTdaTTQ1LjkxNyA1MS4xMlY1MS4xMzQ5SDQ3LjQxN1Y1MS4xMkg0NS45MTdaTTQ1LjkxNyA1MS4xMDUxVjUxLjEySDQ3LjQxN1Y1MS4xMDUxSDQ1LjkxN1pNNDUuOTE3IDUxLjA5MDJWNTEuMTA1MUg0Ny40MTdWNTEuMDkwMkg0NS45MTdaTTQ1LjkxNyA1MS4wNzUzVjUxLjA5MDJINDcuNDE3VjUxLjA3NTNINDUuOTE3Wk00NS45MTcgNTEuMDYwNFY1MS4wNzUzSDQ3LjQxN1Y1MS4wNjA0SDQ1LjkxN1pNNDUuOTE3IDUxLjA0NTRWNTEuMDYwNEg0Ny40MTdWNTEuMDQ1NEg0NS45MTdaTTQ1LjkxNyA1MS4wMzA0VjUxLjA0NTRINDcuNDE3VjUxLjAzMDRINDUuOTE3Wk00NS45MTcgNTEuMDE1NFY1MS4wMzA0SDQ3LjQxN1Y1MS4wMTU0SDQ1LjkxN1pNNDUuOTE3IDUxLjAwMDRWNTEuMDE1NEg0Ny40MTdWNTEuMDAwNEg0NS45MTdaTTQ1LjkxNyA1MC45ODU0VjUxLjAwMDRINDcuNDE3VjUwLjk4NTRINDUuOTE3Wk00NS45MTcgNTAuOTcwNFY1MC45ODU0SDQ3LjQxN1Y1MC45NzA0SDQ1LjkxN1pNNDUuOTE3IDUwLjk1NTNWNTAuOTcwNEg0Ny40MTdWNTAuOTU1M0g0NS45MTdaTTQ1LjkxNyA1MC45NDAyVjUwLjk1NTNINDcuNDE3VjUwLjk0MDJINDUuOTE3Wk00NS45MTcgNTAuOTI1MVY1MC45NDAySDQ3LjQxN1Y1MC45MjUxSDQ1LjkxN1pNNDUuOTE3IDUwLjkxVjUwLjkyNTFINDcuNDE3VjUwLjkxSDQ1LjkxN1pNNDUuOTE3IDUwLjg5NDlWNTAuOTFINDcuNDE3VjUwLjg5NDlINDUuOTE3Wk00NS45MTcgNTAuODc5N1Y1MC44OTQ5SDQ3LjQxN1Y1MC44Nzk3SDQ1LjkxN1pNNDUuOTE3IDUwLjg2NDZWNTAuODc5N0g0Ny40MTdWNTAuODY0Nkg0NS45MTdaTTQ1LjkxNyA1MC44NDk0VjUwLjg2NDZINDcuNDE3VjUwLjg0OTRINDUuOTE3Wk00NS45MTcgNTAuODM0MlY1MC44NDk0SDQ3LjQxN1Y1MC44MzQySDQ1LjkxN1pNNDUuOTE3IDUwLjgxOVY1MC44MzQySDQ3LjQxN1Y1MC44MTlINDUuOTE3Wk00NS45MTcgNTAuODAzN1Y1MC44MTlINDcuNDE3VjUwLjgwMzdINDUuOTE3Wk00NS45MTcgNTAuNzg4NVY1MC44MDM3SDQ3LjQxN1Y1MC43ODg1SDQ1LjkxN1pNNDUuOTE3IDUwLjc3MzJWNTAuNzg4NUg0Ny40MTdWNTAuNzczMkg0NS45MTdaTTQ1LjkxNyA1MC43NTc5VjUwLjc3MzJINDcuNDE3VjUwLjc1NzlINDUuOTE3Wk00NS45MTcgNTAuNzQyNlY1MC43NTc5SDQ3LjQxN1Y1MC43NDI2SDQ1LjkxN1pNNDUuOTE3IDUwLjcyNzNWNTAuNzQyNkg0Ny40MTdWNTAuNzI3M0g0NS45MTdaTTQ1LjkxNyA1MC43MTE5VjUwLjcyNzNINDcuNDE3VjUwLjcxMTlINDUuOTE3Wk00NS45MTcgNTAuNjk2NlY1MC43MTE5SDQ3LjQxN1Y1MC42OTY2SDQ1LjkxN1pNNDUuOTE3IDUwLjY4MTJWNTAuNjk2Nkg0Ny40MTdWNTAuNjgxMkg0NS45MTdaTTQ1LjkxNyA1MC42NjU4VjUwLjY4MTJINDcuNDE3VjUwLjY2NThINDUuOTE3Wk00NS45MTcgNTAuNjUwNFY1MC42NjU4SDQ3LjQxN1Y1MC42NTA0SDQ1LjkxN1pNNDUuOTE3IDUwLjYzNVY1MC42NTA0SDQ3LjQxN1Y1MC42MzVINDUuOTE3Wk00NS45MTcgNTAuNjE5NVY1MC42MzVINDcuNDE3VjUwLjYxOTVINDUuOTE3Wk00NS45MTcgNTAuNjA0VjUwLjYxOTVINDcuNDE3VjUwLjYwNEg0NS45MTdaTTQ1LjkxNyA1MC41ODg2VjUwLjYwNEg0Ny40MTdWNTAuNTg4Nkg0NS45MTdaTTQ1LjkxNyA1MC41NzMxVjUwLjU4ODZINDcuNDE3VjUwLjU3MzFINDUuOTE3Wk00NS45MTcgNTAuNTU3NVY1MC41NzMxSDQ3LjQxN1Y1MC41NTc1SDQ1LjkxN1pNNDUuOTE3IDUwLjU0MlY1MC41NTc1SDQ3LjQxN1Y1MC41NDJINDUuOTE3Wk00NS45MTcgNTAuNTI2NFY1MC41NDJINDcuNDE3VjUwLjUyNjRINDUuOTE3Wk00NS45MTcgNTAuNTEwOVY1MC41MjY0SDQ3LjQxN1Y1MC41MTA5SDQ1LjkxN1pNNDUuOTE3IDUwLjQ5NTNWNTAuNTEwOUg0Ny40MTdWNTAuNDk1M0g0NS45MTdaTTQ1LjkxNyA1MC40Nzk3VjUwLjQ5NTNINDcuNDE3VjUwLjQ3OTdINDUuOTE3Wk00NS45MTcgNTAuNDY0VjUwLjQ3OTdINDcuNDE3VjUwLjQ2NEg0NS45MTdaTTQ1LjkxNyA1MC40NDg0VjUwLjQ2NEg0Ny40MTdWNTAuNDQ4NEg0NS45MTdaTTQ1LjkxNyA1MC40MzI3VjUwLjQ0ODRINDcuNDE3VjUwLjQzMjdINDUuOTE3Wk00NS45MTcgNTAuNDE3MVY1MC40MzI3SDQ3LjQxN1Y1MC40MTcxSDQ1LjkxN1pNNDUuOTE3IDUwLjQwMTRWNTAuNDE3MUg0Ny40MTdWNTAuNDAxNEg0NS45MTdaTTQ1LjkxNyA1MC4zODU3VjUwLjQwMTRINDcuNDE3VjUwLjM4NTdINDUuOTE3Wk00NS45MTcgNTAuMzY5OVY1MC4zODU3SDQ3LjQxN1Y1MC4zNjk5SDQ1LjkxN1pNNDUuOTE3IDUwLjM1NDJWNTAuMzY5OUg0Ny40MTdWNTAuMzU0Mkg0NS45MTdaTTQ1LjkxNyA1MC4zMzg0VjUwLjM1NDJINDcuNDE3VjUwLjMzODRINDUuOTE3Wk00NS45MTcgNTAuMzIyNlY1MC4zMzg0SDQ3LjQxN1Y1MC4zMjI2SDQ1LjkxN1pNNDUuOTE3IDUwLjMwNjhWNTAuMzIyNkg0Ny40MTdWNTAuMzA2OEg0NS45MTdaTTQ1LjkxNyA1MC4yOTFWNTAuMzA2OEg0Ny40MTdWNTAuMjkxSDQ1LjkxN1pNNDUuOTE3IDUwLjI3NTJWNTAuMjkxSDQ3LjQxN1Y1MC4yNzUySDQ1LjkxN1pNNDUuOTE3IDUwLjI1OTNWNTAuMjc1Mkg0Ny40MTdWNTAuMjU5M0g0NS45MTdaTTQ1LjkxNyA1MC4yNDM0VjUwLjI1OTNINDcuNDE3VjUwLjI0MzRINDUuOTE3Wk00NS45MTcgNTAuMjI3NVY1MC4yNDM0SDQ3LjQxN1Y1MC4yMjc1SDQ1LjkxN1pNNDUuOTE3IDUwLjIxMTZWNTAuMjI3NUg0Ny40MTdWNTAuMjExNkg0NS45MTdaTTQ1LjkxNyA1MC4xOTU3VjUwLjIxMTZINDcuNDE3VjUwLjE5NTdINDUuOTE3Wk00NS45MTcgNTAuMTc5N1Y1MC4xOTU3SDQ3LjQxN1Y1MC4xNzk3SDQ1LjkxN1pNNDUuOTE3IDUwLjE2MzhWNTAuMTc5N0g0Ny40MTdWNTAuMTYzOEg0NS45MTdaTTQ1LjkxNyA1MC4xNDc4VjUwLjE2MzhINDcuNDE3VjUwLjE0NzhINDUuOTE3Wk00NS45MTcgNTAuMTMxOFY1MC4xNDc4SDQ3LjQxN1Y1MC4xMzE4SDQ1LjkxN1pNNDUuOTE3IDUwLjExNThWNTAuMTMxOEg0Ny40MTdWNTAuMTE1OEg0NS45MTdaTTQ1LjkxNyA1MC4wOTk4VjUwLjExNThINDcuNDE3VjUwLjA5OThINDUuOTE3Wk00NS45MTcgNTAuMDgzN1Y1MC4wOTk4SDQ3LjQxN1Y1MC4wODM3SDQ1LjkxN1pNNDUuOTE3IDUwLjA2NzZWNTAuMDgzN0g0Ny40MTdWNTAuMDY3Nkg0NS45MTdaTTQ1LjkxNyA1MC4wNTE1VjUwLjA2NzZINDcuNDE3VjUwLjA1MTVINDUuOTE3Wk00NS45MTcgNTAuMDM1NFY1MC4wNTE1SDQ3LjQxN1Y1MC4wMzU0SDQ1LjkxN1pNNDUuOTE3IDUwLjAxOTNWNTAuMDM1NEg0Ny40MTdWNTAuMDE5M0g0NS45MTdaTTQ1LjkxNyA1MC4wMDMyVjUwLjAxOTNINDcuNDE3VjUwLjAwMzJINDUuOTE3Wk00NS45MTcgNDkuOTg3VjUwLjAwMzJINDcuNDE3VjQ5Ljk4N0g0NS45MTdaTTQ1LjkxNyA0OS45NzA5VjQ5Ljk4N0g0Ny40MTdWNDkuOTcwOUg0NS45MTdaTTQ1LjkxNyA0OS45NTQ3VjQ5Ljk3MDlINDcuNDE3VjQ5Ljk1NDdINDUuOTE3Wk00NS45MTcgNDkuOTM4NFY0OS45NTQ3SDQ3LjQxN1Y0OS45Mzg0SDQ1LjkxN1pNNDUuOTE3IDQ5LjkyMjJWNDkuOTM4NEg0Ny40MTdWNDkuOTIyMkg0NS45MTdaTTQ1LjkxNyA0OS45MDZWNDkuOTIyMkg0Ny40MTdWNDkuOTA2SDQ1LjkxN1pNNDUuOTE3IDQ5Ljg4OTdWNDkuOTA2SDQ3LjQxN1Y0OS44ODk3SDQ1LjkxN1pNNDUuOTE3IDQ5Ljg3MzRWNDkuODg5N0g0Ny40MTdWNDkuODczNEg0NS45MTdaTTQ1LjkxNyA0OS44NTcxVjQ5Ljg3MzRINDcuNDE3VjQ5Ljg1NzFINDUuOTE3Wk00NS45MTcgNDkuODQwOFY0OS44NTcxSDQ3LjQxN1Y0OS44NDA4SDQ1LjkxN1pNNDUuOTE3IDQ5LjgyNDVWNDkuODQwOEg0Ny40MTdWNDkuODI0NUg0NS45MTdaTTQ1LjkxNyA0OS44MDgxVjQ5LjgyNDVINDcuNDE3VjQ5LjgwODFINDUuOTE3Wk00NS45MTcgNDkuNzkxOFY0OS44MDgxSDQ3LjQxN1Y0OS43OTE4SDQ1LjkxN1pNNDUuOTE3IDQ5Ljc3NTRWNDkuNzkxOEg0Ny40MTdWNDkuNzc1NEg0NS45MTdaTTQ1LjkxNyA0OS43NTlWNDkuNzc1NEg0Ny40MTdWNDkuNzU5SDQ1LjkxN1pNNDUuOTE3IDQ5Ljc0MjVWNDkuNzU5SDQ3LjQxN1Y0OS43NDI1SDQ1LjkxN1pNNDUuOTE3IDQ5LjcyNjFWNDkuNzQyNUg0Ny40MTdWNDkuNzI2MUg0NS45MTdaTTQ1LjkxNyA0OS43MDk2VjQ5LjcyNjFINDcuNDE3VjQ5LjcwOTZINDUuOTE3Wk00NS45MTcgNDkuNjkzMlY0OS43MDk2SDQ3LjQxN1Y0OS42OTMySDQ1LjkxN1pNNDUuOTE3IDQ5LjY3NjdWNDkuNjkzMkg0Ny40MTdWNDkuNjc2N0g0NS45MTdaTTQ1LjkxNyA0OS42NjAyVjQ5LjY3NjdINDcuNDE3VjQ5LjY2MDJINDUuOTE3Wk00NS45MTcgNDkuNjQzNlY0OS42NjAySDQ3LjQxN1Y0OS42NDM2SDQ1LjkxN1pNNDUuOTE3IDQ5LjYyNzFWNDkuNjQzNkg0Ny40MTdWNDkuNjI3MUg0NS45MTdaTTQ1LjkxNyA0OS42MTA1VjQ5LjYyNzFINDcuNDE3VjQ5LjYxMDVINDUuOTE3Wk00NS45MTcgNDkuNTkzOVY0OS42MTA1SDQ3LjQxN1Y0OS41OTM5SDQ1LjkxN1pNNDUuOTE3IDQ5LjU3NzNWNDkuNTkzOUg0Ny40MTdWNDkuNTc3M0g0NS45MTdaTTQ1LjkxNyA0OS41NjA3VjQ5LjU3NzNINDcuNDE3VjQ5LjU2MDdINDUuOTE3Wk00NS45MTcgNDkuNTQ0MVY0OS41NjA3SDQ3LjQxN1Y0OS41NDQxSDQ1LjkxN1pNNDUuOTE3IDQ5LjUyNzRWNDkuNTQ0MUg0Ny40MTdWNDkuNTI3NEg0NS45MTdaTTQ1LjkxNyA0OS41MTA4VjQ5LjUyNzRINDcuNDE3VjQ5LjUxMDhINDUuOTE3Wk00NS45MTcgNDkuNDk0MVY0OS41MTA4SDQ3LjQxN1Y0OS40OTQxSDQ1LjkxN1pNNDUuOTE3IDQ5LjQ3NzRWNDkuNDk0MUg0Ny40MTdWNDkuNDc3NEg0NS45MTdaTTQ1LjkxNyA0OS40NjA2VjQ5LjQ3NzRINDcuNDE3VjQ5LjQ2MDZINDUuOTE3Wk00NS45MTcgNDkuNDQzOVY0OS40NjA2SDQ3LjQxN1Y0OS40NDM5SDQ1LjkxN1pNNDUuOTE3IDQ5LjQyNzFWNDkuNDQzOUg0Ny40MTdWNDkuNDI3MUg0NS45MTdaTTQ1LjkxNyA0OS40MTA0VjQ5LjQyNzFINDcuNDE3VjQ5LjQxMDRINDUuOTE3Wk00NS45MTcgNDkuMzkzNlY0OS40MTA0SDQ3LjQxN1Y0OS4zOTM2SDQ1LjkxN1pNNDUuOTE3IDQ5LjM3NjhWNDkuMzkzNkg0Ny40MTdWNDkuMzc2OEg0NS45MTdaTTQ1LjkxNyA0OS4zNTk5VjQ5LjM3NjhINDcuNDE3VjQ5LjM1OTlINDUuOTE3Wk00NS45MTcgNDkuMzQzMVY0OS4zNTk5SDQ3LjQxN1Y0OS4zNDMxSDQ1LjkxN1pNNDUuOTE3IDQ5LjMyNjJWNDkuMzQzMUg0Ny40MTdWNDkuMzI2Mkg0NS45MTdaTTQ1LjkxNyA0OS4zMDkzVjQ5LjMyNjJINDcuNDE3VjQ5LjMwOTNINDUuOTE3Wk00NS45MTcgNDkuMjkyNFY0OS4zMDkzSDQ3LjQxN1Y0OS4yOTI0SDQ1LjkxN1pNNDUuOTE3IDQ5LjI3NTVWNDkuMjkyNEg0Ny40MTdWNDkuMjc1NUg0NS45MTdaTTQ1LjkxNyA0OS4yNTg2VjQ5LjI3NTVINDcuNDE3VjQ5LjI1ODZINDUuOTE3Wk00NS45MTcgNDkuMjQxNlY0OS4yNTg2SDQ3LjQxN1Y0OS4yNDE2SDQ1LjkxN1pNNDUuOTE3IDQ5LjIyNDZWNDkuMjQxNkg0Ny40MTdWNDkuMjI0Nkg0NS45MTdaTTQ1LjkxNyA0OS4yMDc3VjQ5LjIyNDZINDcuNDE3VjQ5LjIwNzdINDUuOTE3Wk00NS45MTcgNDkuMTkwNlY0OS4yMDc3SDQ3LjQxN1Y0OS4xOTA2SDQ1LjkxN1pNNDUuOTE3IDQ5LjE3MzZWNDkuMTkwNkg0Ny40MTdWNDkuMTczNkg0NS45MTdaTTQ1LjkxNyA0OS4xNTY2VjQ5LjE3MzZINDcuNDE3VjQ5LjE1NjZINDUuOTE3Wk00NS45MTcgNDkuMTM5NVY0OS4xNTY2SDQ3LjQxN1Y0OS4xMzk1SDQ1LjkxN1pNNDUuOTE3IDQ5LjEyMjRWNDkuMTM5NUg0Ny40MTdWNDkuMTIyNEg0NS45MTdaTTQ1LjkxNyA0OS4xMDUzVjQ5LjEyMjRINDcuNDE3VjQ5LjEwNTNINDUuOTE3Wk00NS45MTcgNDkuMDg4MlY0OS4xMDUzSDQ3LjQxN1Y0OS4wODgySDQ1LjkxN1pNNDUuOTE3IDQ5LjA3MTFWNDkuMDg4Mkg0Ny40MTdWNDkuMDcxMUg0NS45MTdaTTQ1LjkxNyA0OS4wNTM5VjQ5LjA3MTFINDcuNDE3VjQ5LjA1MzlINDUuOTE3Wk00NS45MTcgNDkuMDM2OFY0OS4wNTM5SDQ3LjQxN1Y0OS4wMzY4SDQ1LjkxN1pNNDUuOTE3IDQ5LjAxOTZWNDkuMDM2OEg0Ny40MTdWNDkuMDE5Nkg0NS45MTdaTTQ1LjkxNyA0OS4wMDI0VjQ5LjAxOTZINDcuNDE3VjQ5LjAwMjRINDUuOTE3Wk00NS45MTcgNDguOTg1MlY0OS4wMDI0SDQ3LjQxN1Y0OC45ODUySDQ1LjkxN1pNNDUuOTE3IDQ4Ljk2NzlWNDguOTg1Mkg0Ny40MTdWNDguOTY3OUg0NS45MTdaTTQ1LjkxNyA0OC45NTA3VjQ4Ljk2NzlINDcuNDE3VjQ4Ljk1MDdINDUuOTE3Wk00NS45MTcgNDguOTMzNFY0OC45NTA3SDQ3LjQxN1Y0OC45MzM0SDQ1LjkxN1pNNDUuOTE3IDQ4LjkxNjFWNDguOTMzNEg0Ny40MTdWNDguOTE2MUg0NS45MTdaTTQ1LjkxNyA0OC44OTg4VjQ4LjkxNjFINDcuNDE3VjQ4Ljg5ODhINDUuOTE3Wk00NS45MTcgNDguODgxNVY0OC44OTg4SDQ3LjQxN1Y0OC44ODE1SDQ1LjkxN1pNNDUuOTE3IDQ4Ljg2NDFWNDguODgxNUg0Ny40MTdWNDguODY0MUg0NS45MTdaTTQ1LjkxNyA0OC44NDY4VjQ4Ljg2NDFINDcuNDE3VjQ4Ljg0NjhINDUuOTE3Wk00NS45MTcgNDguODI5NFY0OC44NDY4SDQ3LjQxN1Y0OC44Mjk0SDQ1LjkxN1pNNDUuOTE3IDQ4LjgxMlY0OC44Mjk0SDQ3LjQxN1Y0OC44MTJINDUuOTE3Wk00NS45MTcgNDguNzk0NlY0OC44MTJINDcuNDE3VjQ4Ljc5NDZINDUuOTE3Wk00NS45MTcgNDguNzc3MlY0OC43OTQ2SDQ3LjQxN1Y0OC43NzcySDQ1LjkxN1pNNDUuOTE3IDQ4Ljc1OTdWNDguNzc3Mkg0Ny40MTdWNDguNzU5N0g0NS45MTdaTTQ1LjkxNyA0OC43NDIyVjQ4Ljc1OTdINDcuNDE3VjQ4Ljc0MjJINDUuOTE3Wk00NS45MTcgNDguNzI0OFY0OC43NDIySDQ3LjQxN1Y0OC43MjQ4SDQ1LjkxN1pNNDUuOTE3IDQ4LjcwNzJWNDguNzI0OEg0Ny40MTdWNDguNzA3Mkg0NS45MTdaTTQ1LjkxNyA0OC42ODk3VjQ4LjcwNzJINDcuNDE3VjQ4LjY4OTdINDUuOTE3Wk00NS45MTcgNDguNjcyMlY0OC42ODk3SDQ3LjQxN1Y0OC42NzIySDQ1LjkxN1pNNDUuOTE3IDQ4LjY1NDZWNDguNjcyMkg0Ny40MTdWNDguNjU0Nkg0NS45MTdaTTQ1LjkxNyA0OC42MzcxVjQ4LjY1NDZINDcuNDE3VjQ4LjYzNzFINDUuOTE3Wk00NS45MTcgNDguNjE5NVY0OC42MzcxSDQ3LjQxN1Y0OC42MTk1SDQ1LjkxN1pNNDUuOTE3IDQ4LjYwMTlWNDguNjE5NUg0Ny40MTdWNDguNjAxOUg0NS45MTdaTTQ1LjkxNyA0OC41ODQyVjQ4LjYwMTlINDcuNDE3VjQ4LjU4NDJINDUuOTE3Wk00NS45MTcgNDguNTY2NlY0OC41ODQySDQ3LjQxN1Y0OC41NjY2SDQ1LjkxN1pNNDUuOTE3IDQ4LjU0ODlWNDguNTY2Nkg0Ny40MTdWNDguNTQ4OUg0NS45MTdaTTQ1LjkxNyA0OC41MzEyVjQ4LjU0ODlINDcuNDE3VjQ4LjUzMTJINDUuOTE3Wk00NS45MTcgNDguNTEzNVY0OC41MzEySDQ3LjQxN1Y0OC41MTM1SDQ1LjkxN1pNNDUuOTE3IDQ4LjQ5NThWNDguNTEzNUg0Ny40MTdWNDguNDk1OEg0NS45MTdaTTQ1LjkxNyA0OC40NzgxVjQ4LjQ5NThINDcuNDE3VjQ4LjQ3ODFINDUuOTE3Wk00NS45MTcgNDguNDYwM1Y0OC40NzgxSDQ3LjQxN1Y0OC40NjAzSDQ1LjkxN1pNNDUuOTE3IDQ4LjQ0MjZWNDguNDYwM0g0Ny40MTdWNDguNDQyNkg0NS45MTdaTTQ1LjkxNyA0OC40MjQ4VjQ4LjQ0MjZINDcuNDE3VjQ4LjQyNDhINDUuOTE3Wk00NS45MTcgNDguNDA3VjQ4LjQyNDhINDcuNDE3VjQ4LjQwN0g0NS45MTdaTTQ1LjkxNyA0OC4zODkyVjQ4LjQwN0g0Ny40MTdWNDguMzg5Mkg0NS45MTdaTTQ1LjkxNyA0OC4zNzEzVjQ4LjM4OTJINDcuNDE3VjQ4LjM3MTNINDUuOTE3Wk00NS45MTcgNDguMzUzNVY0OC4zNzEzSDQ3LjQxN1Y0OC4zNTM1SDQ1LjkxN1pNNDUuOTE3IDQ4LjMzNTZWNDguMzUzNUg0Ny40MTdWNDguMzM1Nkg0NS45MTdaTTQ1LjkxNyA0OC4zMTc3VjQ4LjMzNTZINDcuNDE3VjQ4LjMxNzdINDUuOTE3Wk00NS45MTcgNDguMjk5OFY0OC4zMTc3SDQ3LjQxN1Y0OC4yOTk4SDQ1LjkxN1pNNDUuOTE3IDQ4LjI4MTlWNDguMjk5OEg0Ny40MTdWNDguMjgxOUg0NS45MTdaTTQ1LjkxNyA0OC4yNjM5VjQ4LjI4MTlINDcuNDE3VjQ4LjI2MzlINDUuOTE3Wk00NS45MTcgNDguMjQ1OVY0OC4yNjM5SDQ3LjQxN1Y0OC4yNDU5SDQ1LjkxN1pNNDUuOTE3IDQ4LjIyOFY0OC4yNDU5SDQ3LjQxN1Y0OC4yMjhINDUuOTE3Wk00NS45MTcgNDguMjFWNDguMjI4SDQ3LjQxN1Y0OC4yMUg0NS45MTdaTTQ1LjkxNyA0OC4xOTJWNDguMjFINDcuNDE3VjQ4LjE5Mkg0NS45MTdaTTQ1LjkxNyA0OC4xNzM5VjQ4LjE5Mkg0Ny40MTdWNDguMTczOUg0NS45MTdaTTQ1LjkxNyA0OC4xNTU5VjQ4LjE3MzlINDcuNDE3VjQ4LjE1NTlINDUuOTE3Wk00NS45MTcgNDguMTM3OFY0OC4xNTU5SDQ3LjQxN1Y0OC4xMzc4SDQ1LjkxN1pNNDUuOTE3IDQ4LjExOTdWNDguMTM3OEg0Ny40MTdWNDguMTE5N0g0NS45MTdaTTQ1LjkxNyA0OC4xMDE2VjQ4LjExOTdINDcuNDE3VjQ4LjEwMTZINDUuOTE3Wk00NS45MTcgNDguMDgzNVY0OC4xMDE2SDQ3LjQxN1Y0OC4wODM1SDQ1LjkxN1pNNTAuNzgxMyAzMS41Mjc5QzQ3LjcwMzIgMzYuMzAwNCA0NS45MTcgNDEuOTg1NiA0NS45MTcgNDguMDgzNUg0Ny40MTdDNDcuNDE3IDQyLjI4MjYgNDkuMTE1MyAzNi44Nzg0IDUyLjA0MTggMzIuMzQwOUw1MC43ODEzIDMxLjUyNzlaTTUzLjA3ODYgMzIuMTE3Mkw1MS44MTgxIDMxLjMwNDFMNTEuMDA1MSAzMi41NjQ3TDUyLjI2NTYgMzMuMzc3N0w1My4wNzg2IDMyLjExNzJaTTU3LjA5NzQgMjguNDc4MkM1OS40Mjg4IDI2LjE3MDcgNjIuMTY4NiAyNC4yNzY4IDY1LjE5NzcgMjIuOTE0M0w2NC41ODI0IDIxLjU0NjNDNjEuMzg3NyAyMi45ODMzIDU4LjQ5OTMgMjQuOTgwMiA1Ni4wNDIzIDI3LjQxMkw1Ny4wOTc0IDI4LjQ3ODJaTTU0Ljk4MTYgMjcuNDA2Nkw1Ni4wMzY4IDI4LjQ3MjdMNTcuMTAyOSAyNy40MTc1TDU2LjA0NzcgMjYuMzUxNEw1NC45ODE2IDI3LjQwNjZaTTYzLjk2NzEgMjAuMTc4M0M2MC42MDY4IDIxLjY4OTggNTcuNTY5OSAyMy43ODk2IDU0Ljk4NzEgMjYuMzQ1OUw1Ni4wNDIzIDI3LjQxMkM1OC40OTkzIDI0Ljk4MDIgNjEuMzg3NyAyMi45ODMzIDY0LjU4MjQgMjEuNTQ2M0w2My45NjcxIDIwLjE3ODNaTTY1LjU3NDEgMjEuOTIyNkw2NC45NTg4IDIwLjU1NDZMNjMuNTkwOCAyMS4xN0w2NC4yMDYxIDIyLjUzNzlMNjUuNTc0MSAyMS45MjI2WlwiLFxuICBmaWxsOiBcIiMzQjM1NTJcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibWFza1wiLCB7XG4gIGlkOiBcInBhdGgtOS1vdXRzaWRlLTFfMF8yMzQxXCIsXG4gIG1hc2tVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICB4OiBcIjYzLjc1XCIsXG4gIHk6IFwiNzMuMTA0NVwiLFxuICB3aWR0aDogXCIyNVwiLFxuICBoZWlnaHQ6IFwiMzVcIixcbiAgZmlsbDogXCJibGFja1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICBmaWxsOiBcIndoaXRlXCIsXG4gIHg6IFwiNjMuNzVcIixcbiAgeTogXCI3My4xMDQ1XCIsXG4gIHdpZHRoOiBcIjI1XCIsXG4gIGhlaWdodDogXCIzNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTgwLjYyNSA5My4zNjdDODMuMzg5OCA5MS43Njc2IDg1LjI1IDg4Ljc3ODMgODUuMjUgODUuMzU0NUM4NS4yNSA4MC4yNDU5IDgxLjEwODYgNzYuMTA0NSA3NiA3Ni4xMDQ1QzcwLjg5MTQgNzYuMTA0NSA2Ni43NSA4MC4yNDU5IDY2Ljc1IDg1LjM1NDVDNjYuNzUgODguNzc4MyA2OC42MTAyIDkxLjc2NzYgNzEuMzc1IDkzLjM2N1YxMDBDNzEuMzc1IDEwMi41NTUgNzMuNDQ1NyAxMDQuNjI1IDc2IDEwNC42MjVDNzguNTU0MyAxMDQuNjI1IDgwLjYyNSAxMDIuNTU1IDgwLjYyNSAxMDBWOTMuMzY3WlwiXG59KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk04MC42MjUgOTMuMzY3QzgzLjM4OTggOTEuNzY3NiA4NS4yNSA4OC43NzgzIDg1LjI1IDg1LjM1NDVDODUuMjUgODAuMjQ1OSA4MS4xMDg2IDc2LjEwNDUgNzYgNzYuMTA0NUM3MC44OTE0IDc2LjEwNDUgNjYuNzUgODAuMjQ1OSA2Ni43NSA4NS4zNTQ1QzY2Ljc1IDg4Ljc3ODMgNjguNjEwMiA5MS43Njc2IDcxLjM3NSA5My4zNjdWMTAwQzcxLjM3NSAxMDIuNTU1IDczLjQ0NTcgMTA0LjYyNSA3NiAxMDQuNjI1Qzc4LjU1NDMgMTA0LjYyNSA4MC42MjUgMTAyLjU1NSA4MC42MjUgMTAwVjkzLjM2N1pcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk04MC42MjUgOTMuMzY3TDc5LjEyMjggOTAuNzcwMkw3Ny42MjUgOTEuNjM2NlY5My4zNjdIODAuNjI1Wk03MS4zNzUgOTMuMzY3SDc0LjM3NVY5MS42MzY2TDcyLjg3NzIgOTAuNzcwMkw3MS4zNzUgOTMuMzY3Wk04Mi4yNSA4NS4zNTQ1QzgyLjI1IDg3LjY2NDEgODAuOTk4OCA4OS42ODUgNzkuMTIyOCA5MC43NzAyTDgyLjEyNzIgOTUuOTYzOEM4NS43ODA5IDkzLjg1MDMgODguMjUgODkuODkyNSA4OC4yNSA4NS4zNTQ1SDgyLjI1Wk03NiA3OS4xMDQ1Qzc5LjQ1MTggNzkuMTA0NSA4Mi4yNSA4MS45MDI3IDgyLjI1IDg1LjM1NDVIODguMjVDODguMjUgNzguNTg5IDgyLjc2NTUgNzMuMTA0NSA3NiA3My4xMDQ1Vjc5LjEwNDVaTTY5Ljc1IDg1LjM1NDVDNjkuNzUgODEuOTAyNyA3Mi41NDgyIDc5LjEwNDUgNzYgNzkuMTA0NVY3My4xMDQ1QzY5LjIzNDUgNzMuMTA0NSA2My43NSA3OC41ODkgNjMuNzUgODUuMzU0NUg2OS43NVpNNzIuODc3MiA5MC43NzAyQzcxLjAwMTIgODkuNjg1IDY5Ljc1IDg3LjY2NDEgNjkuNzUgODUuMzU0NUg2My43NUM2My43NSA4OS44OTI1IDY2LjIxOTEgOTMuODUwMyA2OS44NzI4IDk1Ljk2MzhMNzIuODc3MiA5MC43NzAyWk03NC4zNzUgMTAwVjkzLjM2N0g2OC4zNzVWMTAwSDc0LjM3NVpNNzYgMTAxLjYyNUM3NS4xMDI1IDEwMS42MjUgNzQuMzc1IDEwMC44OTggNzQuMzc1IDEwMEg2OC4zNzVDNjguMzc1IDEwNC4yMTEgNzEuNzg4OCAxMDcuNjI1IDc2IDEwNy42MjVWMTAxLjYyNVpNNzcuNjI1IDEwMEM3Ny42MjUgMTAwLjg5OCA3Ni44OTc1IDEwMS42MjUgNzYgMTAxLjYyNVYxMDcuNjI1QzgwLjIxMTIgMTA3LjYyNSA4My42MjUgMTA0LjIxMSA4My42MjUgMTAwSDc3LjYyNVpNNzcuNjI1IDkzLjM2N1YxMDBIODMuNjI1VjkzLjM2N0g3Ny42MjVaXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgbWFzazogXCJ1cmwoI3BhdGgtOS1vdXRzaWRlLTFfMF8yMzQxKVwiXG59KSk7XG5leHBvcnQgZGVmYXVsdCBQYWRsb2NrOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgY29uc3QgUGhvdG9zID0gKHtcbiAgd2lkdGggPSAxNTIsXG4gIGhlaWdodCA9IDE1MlxufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB3aWR0aDogd2lkdGgsXG4gIGhlaWdodDogaGVpZ2h0LFxuICB2aWV3Qm94OiBcIjAgMCAxNTIgMTUyXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gIGN4OiBcIjc2XCIsXG4gIGN5OiBcIjc2XCIsXG4gIHI6IFwiNzZcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjUuNTQ0OSA2MC4zMzU2QzI1LjA4MDMgNTguNjAxOCAyNi4xMDkyIDU2LjgxOTcgMjcuODQzIDU2LjM1NTJMODQuNzY1IDQxLjEwM0M4Ni40OTg3IDQwLjYzODQgODguMjgwOCA0MS42NjczIDg4Ljc0NTQgNDMuNDAxMUwxMDYuMjU3IDEwOC43NTZDMTA2LjcyMiAxMTAuNDg5IDEwNS42OTMgMTEyLjI3MSAxMDMuOTU5IDExMi43MzZMNDcuMDM3IDEyNy45ODhDNDUuMzAzMiAxMjguNDUzIDQzLjUyMTEgMTI3LjQyNCA0My4wNTY2IDEyNS42OUwyNS41NDQ5IDYwLjMzNTZaXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgZDogXCJNMjkuNTI1NCA2MS42MDA4QzI5LjIzOTYgNjAuNTMzOSAyOS44NzI3IDU5LjQzNzIgMzAuOTM5NyA1OS4xNTEzTDg0LjIyOTggNDQuODcyM0M4NS4yOTY3IDQ0LjU4NjQgODYuMzkzNCA0NS4yMTk1IDg2LjY3OTMgNDYuMjg2NUwxMDIuOTU2IDEwNy4wMzFDMTAzLjI0MiAxMDguMDk4IDEwMi42MDkgMTA5LjE5NSAxMDEuNTQyIDEwOS40ODFMNDguMjUxNSAxMjMuNzZDNDcuMTg0NiAxMjQuMDQ2IDQ2LjA4NzkgMTIzLjQxMyA0NS44MDIgMTIyLjM0NkwyOS41MjU0IDYxLjYwMDhaXCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBmaWxsT3BhY2l0eTogXCIwLjA1XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICB4OiBcIjQ3LjA1MDhcIixcbiAgeTogXCIzMi43NVwiLFxuICB3aWR0aDogXCI3Mi4yMlwiLFxuICBoZWlnaHQ6IFwiODMuODZcIixcbiAgcng6IFwiMy4yNVwiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNDIuMDUwOCAzNVYzNS43NUg0Mi44MDA4VjM1SDQyLjA1MDhaTTQwLjU1MDggMzVIMzkuODAwOFYzNS43NUg0MC41NTA4VjM1Wk02Mi4zMzk2IDI2LjI1SDYzLjA4OTZWMjUuNUg2Mi4zMzk2VjI2LjI1Wk02Mi4zMzk2IDI3Ljc1VjI4LjVINjMuMDg5NlYyNy43NUg2Mi4zMzk2Wk02Ni41NzU3IDI3Ljc1SDY1LjgyNTdWMjguNUg2Ni41NzU3VjI3Ljc1Wk02Ni41NzU3IDI2LjI1VjI1LjVINjUuODI1N1YyNi4yNUg2Ni41NzU3Wk03My4yODQ3IDI2LjI1SDc0LjAzNDdWMjUuNUg3My4yODQ3VjI2LjI1Wk03My4yODQ3IDI3Ljc1VjI4LjVINzQuMDM0N1YyNy43NUg3My4yODQ3Wk00Mi44MDA4IDM1QzQyLjgwMDggMzEuNDEwMSA0NS43MTA5IDI4LjUgNDkuMzAwOCAyOC41VjI3QzQ0Ljg4MjUgMjcgNDEuMzAwOCAzMC41ODE3IDQxLjMwMDggMzVINDIuODAwOFpNNDAuNTUwOCAzNS43NUg0Mi4wNTA4VjM0LjI1SDQwLjU1MDhWMzUuNzVaTTQ5LjMwMDggMjUuNUM0NC4wNTQxIDI1LjUgMzkuODAwOCAyOS43NTMzIDM5LjgwMDggMzVINDEuMzAwOEM0MS4zMDA4IDMwLjU4MTcgNDQuODgyNSAyNyA0OS4zMDA4IDI3VjI1LjVaTTQ5LjMzNDcgMjUuNUg0OS4zMDA4VjI3SDQ5LjMzNDdWMjUuNVpNNDkuMzY4NiAyNS41SDQ5LjMzNDdWMjdINDkuMzY4NlYyNS41Wk00OS40MDI1IDI1LjVINDkuMzY4NlYyN0g0OS40MDI1VjI1LjVaTTQ5LjQzNjMgMjUuNUg0OS40MDI1VjI3SDQ5LjQzNjNWMjUuNVpNNDkuNDcwMSAyNS41SDQ5LjQzNjNWMjdINDkuNDcwMVYyNS41Wk00OS41MDM5IDI1LjVINDkuNDcwMVYyN0g0OS41MDM5VjI1LjVaTTQ5LjUzNzcgMjUuNUg0OS41MDM5VjI3SDQ5LjUzNzdWMjUuNVpNNDkuNTcxNCAyNS41SDQ5LjUzNzdWMjdINDkuNTcxNFYyNS41Wk00OS42MDUgMjUuNUg0OS41NzE0VjI3SDQ5LjYwNVYyNS41Wk00OS42Mzg3IDI1LjVINDkuNjA1VjI3SDQ5LjYzODdWMjUuNVpNNDkuNjcyMyAyNS41SDQ5LjYzODdWMjdINDkuNjcyM1YyNS41Wk00OS43MDU5IDI1LjVINDkuNjcyM1YyN0g0OS43MDU5VjI1LjVaTTQ5LjczOTQgMjUuNUg0OS43MDU5VjI3SDQ5LjczOTRWMjUuNVpNNDkuNzcyOSAyNS41SDQ5LjczOTRWMjdINDkuNzcyOVYyNS41Wk00OS44MDY0IDI1LjVINDkuNzcyOVYyN0g0OS44MDY0VjI1LjVaTTQ5LjgzOTggMjUuNUg0OS44MDY0VjI3SDQ5LjgzOThWMjUuNVpNNDkuODczMiAyNS41SDQ5LjgzOThWMjdINDkuODczMlYyNS41Wk00OS45MDY2IDI1LjVINDkuODczMlYyN0g0OS45MDY2VjI1LjVaTTQ5LjkzOTkgMjUuNUg0OS45MDY2VjI3SDQ5LjkzOTlWMjUuNVpNNDkuOTczMyAyNS41SDQ5LjkzOTlWMjdINDkuOTczM1YyNS41Wk01MC4wMDY1IDI1LjVINDkuOTczM1YyN0g1MC4wMDY1VjI1LjVaTTUwLjAzOTggMjUuNUg1MC4wMDY1VjI3SDUwLjAzOThWMjUuNVpNNTAuMDczIDI1LjVINTAuMDM5OFYyN0g1MC4wNzNWMjUuNVpNNTAuMTA2MiAyNS41SDUwLjA3M1YyN0g1MC4xMDYyVjI1LjVaTTUwLjEzOTMgMjUuNUg1MC4xMDYyVjI3SDUwLjEzOTNWMjUuNVpNNTAuMTcyNCAyNS41SDUwLjEzOTNWMjdINTAuMTcyNFYyNS41Wk01MC4yMDU1IDI1LjVINTAuMTcyNFYyN0g1MC4yMDU1VjI1LjVaTTUwLjIzODUgMjUuNUg1MC4yMDU1VjI3SDUwLjIzODVWMjUuNVpNNTAuMjcxNSAyNS41SDUwLjIzODVWMjdINTAuMjcxNVYyNS41Wk01MC4zMDQ1IDI1LjVINTAuMjcxNVYyN0g1MC4zMDQ1VjI1LjVaTTUwLjMzNzUgMjUuNUg1MC4zMDQ1VjI3SDUwLjMzNzVWMjUuNVpNNTAuMzcwNCAyNS41SDUwLjMzNzVWMjdINTAuMzcwNFYyNS41Wk01MC40MDMyIDI1LjVINTAuMzcwNFYyN0g1MC40MDMyVjI1LjVaTTUwLjQzNjEgMjUuNUg1MC40MDMyVjI3SDUwLjQzNjFWMjUuNVpNNTAuNDY4OSAyNS41SDUwLjQzNjFWMjdINTAuNDY4OVYyNS41Wk01MC41MDE3IDI1LjVINTAuNDY4OVYyN0g1MC41MDE3VjI1LjVaTTUwLjUzNDQgMjUuNUg1MC41MDE3VjI3SDUwLjUzNDRWMjUuNVpNNTAuNTY3MSAyNS41SDUwLjUzNDRWMjdINTAuNTY3MVYyNS41Wk01MC41OTk4IDI1LjVINTAuNTY3MVYyN0g1MC41OTk4VjI1LjVaTTUwLjYzMjUgMjUuNUg1MC41OTk4VjI3SDUwLjYzMjVWMjUuNVpNNTAuNjY1MSAyNS41SDUwLjYzMjVWMjdINTAuNjY1MVYyNS41Wk01MC42OTc3IDI1LjVINTAuNjY1MVYyN0g1MC42OTc3VjI1LjVaTTUwLjczMDIgMjUuNUg1MC42OTc3VjI3SDUwLjczMDJWMjUuNVpNNTAuNzYyNyAyNS41SDUwLjczMDJWMjdINTAuNzYyN1YyNS41Wk01MC43OTUyIDI1LjVINTAuNzYyN1YyN0g1MC43OTUyVjI1LjVaTTUwLjgyNzYgMjUuNUg1MC43OTUyVjI3SDUwLjgyNzZWMjUuNVpNNTAuODYwMSAyNS41SDUwLjgyNzZWMjdINTAuODYwMVYyNS41Wk01MC44OTI0IDI1LjVINTAuODYwMVYyN0g1MC44OTI0VjI1LjVaTTUwLjkyNDggMjUuNUg1MC44OTI0VjI3SDUwLjkyNDhWMjUuNVpNNTAuOTU3MSAyNS41SDUwLjkyNDhWMjdINTAuOTU3MVYyNS41Wk01MC45ODk0IDI1LjVINTAuOTU3MVYyN0g1MC45ODk0VjI1LjVaTTUxLjAyMTYgMjUuNUg1MC45ODk0VjI3SDUxLjAyMTZWMjUuNVpNNTEuMDUzOCAyNS41SDUxLjAyMTZWMjdINTEuMDUzOFYyNS41Wk01MS4wODYgMjUuNUg1MS4wNTM4VjI3SDUxLjA4NlYyNS41Wk01MS4xMTgyIDI1LjVINTEuMDg2VjI3SDUxLjExODJWMjUuNVpNNTEuMTUwMyAyNS41SDUxLjExODJWMjdINTEuMTUwM1YyNS41Wk01MS4xODI0IDI1LjVINTEuMTUwM1YyN0g1MS4xODI0VjI1LjVaTTUxLjIxNDQgMjUuNUg1MS4xODI0VjI3SDUxLjIxNDRWMjUuNVpNNTEuMjQ2NCAyNS41SDUxLjIxNDRWMjdINTEuMjQ2NFYyNS41Wk01MS4yNzg0IDI1LjVINTEuMjQ2NFYyN0g1MS4yNzg0VjI1LjVaTTUxLjMxMDQgMjUuNUg1MS4yNzg0VjI3SDUxLjMxMDRWMjUuNVpNNTEuMzQyMyAyNS41SDUxLjMxMDRWMjdINTEuMzQyM1YyNS41Wk01MS4zNzQyIDI1LjVINTEuMzQyM1YyN0g1MS4zNzQyVjI1LjVaTTUxLjQwNiAyNS41SDUxLjM3NDJWMjdINTEuNDA2VjI1LjVaTTUxLjQzNzggMjUuNUg1MS40MDZWMjdINTEuNDM3OFYyNS41Wk01MS40Njk2IDI1LjVINTEuNDM3OFYyN0g1MS40Njk2VjI1LjVaTTUxLjUwMTQgMjUuNUg1MS40Njk2VjI3SDUxLjUwMTRWMjUuNVpNNTEuNTMzMSAyNS41SDUxLjUwMTRWMjdINTEuNTMzMVYyNS41Wk01MS41NjQ4IDI1LjVINTEuNTMzMVYyN0g1MS41NjQ4VjI1LjVaTTUxLjU5NjQgMjUuNUg1MS41NjQ4VjI3SDUxLjU5NjRWMjUuNVpNNTEuNjI4IDI1LjVINTEuNTk2NFYyN0g1MS42MjhWMjUuNVpNNTEuNjU5NiAyNS41SDUxLjYyOFYyN0g1MS42NTk2VjI1LjVaTTUxLjY5MTIgMjUuNUg1MS42NTk2VjI3SDUxLjY5MTJWMjUuNVpNNTEuNzIyNyAyNS41SDUxLjY5MTJWMjdINTEuNzIyN1YyNS41Wk01MS43NTQyIDI1LjVINTEuNzIyN1YyN0g1MS43NTQyVjI1LjVaTTUxLjc4NTYgMjUuNUg1MS43NTQyVjI3SDUxLjc4NTZWMjUuNVpNNTEuODE3IDI1LjVINTEuNzg1NlYyN0g1MS44MTdWMjUuNVpNNTEuODQ4NCAyNS41SDUxLjgxN1YyN0g1MS44NDg0VjI1LjVaTTUxLjg3OTggMjUuNUg1MS44NDg0VjI3SDUxLjg3OThWMjUuNVpNNTEuOTExMSAyNS41SDUxLjg3OThWMjdINTEuOTExMVYyNS41Wk01MS45NDI0IDI1LjVINTEuOTExMVYyN0g1MS45NDI0VjI1LjVaTTUxLjk3MzYgMjUuNUg1MS45NDI0VjI3SDUxLjk3MzZWMjUuNVpNNTIuMDA0OCAyNS41SDUxLjk3MzZWMjdINTIuMDA0OFYyNS41Wk01Mi4wMzYgMjUuNUg1Mi4wMDQ4VjI3SDUyLjAzNlYyNS41Wk01Mi4wNjcyIDI1LjVINTIuMDM2VjI3SDUyLjA2NzJWMjUuNVpNNTIuMDk4MyAyNS41SDUyLjA2NzJWMjdINTIuMDk4M1YyNS41Wk01Mi4xMjk0IDI1LjVINTIuMDk4M1YyN0g1Mi4xMjk0VjI1LjVaTTUyLjE2MDQgMjUuNUg1Mi4xMjk0VjI3SDUyLjE2MDRWMjUuNVpNNTIuMTkxNSAyNS41SDUyLjE2MDRWMjdINTIuMTkxNVYyNS41Wk01Mi4yMjI1IDI1LjVINTIuMTkxNVYyN0g1Mi4yMjI1VjI1LjVaTTUyLjI1MzQgMjUuNUg1Mi4yMjI1VjI3SDUyLjI1MzRWMjUuNVpNNTIuMjg0MyAyNS41SDUyLjI1MzRWMjdINTIuMjg0M1YyNS41Wk01Mi4zMTUyIDI1LjVINTIuMjg0M1YyN0g1Mi4zMTUyVjI1LjVaTTUyLjM0NjEgMjUuNUg1Mi4zMTUyVjI3SDUyLjM0NjFWMjUuNVpNNTIuMzc2OSAyNS41SDUyLjM0NjFWMjdINTIuMzc2OVYyNS41Wk01Mi40MDc3IDI1LjVINTIuMzc2OVYyN0g1Mi40MDc3VjI1LjVaTTUyLjQzODQgMjUuNUg1Mi40MDc3VjI3SDUyLjQzODRWMjUuNVpNNTIuNDY5MiAyNS41SDUyLjQzODRWMjdINTIuNDY5MlYyNS41Wk01Mi40OTk5IDI1LjVINTIuNDY5MlYyN0g1Mi40OTk5VjI1LjVaTTUyLjUzMDUgMjUuNUg1Mi40OTk5VjI3SDUyLjUzMDVWMjUuNVpNNTIuNTYxMSAyNS41SDUyLjUzMDVWMjdINTIuNTYxMVYyNS41Wk01Mi41OTE3IDI1LjVINTIuNTYxMVYyN0g1Mi41OTE3VjI1LjVaTTUyLjYyMjMgMjUuNUg1Mi41OTE3VjI3SDUyLjYyMjNWMjUuNVpNNTIuNjUyOCAyNS41SDUyLjYyMjNWMjdINTIuNjUyOFYyNS41Wk01Mi42ODMzIDI1LjVINTIuNjUyOFYyN0g1Mi42ODMzVjI1LjVaTTUyLjcxMzcgMjUuNUg1Mi42ODMzVjI3SDUyLjcxMzdWMjUuNVpNNTIuNzQ0MiAyNS41SDUyLjcxMzdWMjdINTIuNzQ0MlYyNS41Wk01Mi43NzQ2IDI1LjVINTIuNzQ0MlYyN0g1Mi43NzQ2VjI1LjVaTTUyLjgwNDkgMjUuNUg1Mi43NzQ2VjI3SDUyLjgwNDlWMjUuNVpNNTIuODM1MiAyNS41SDUyLjgwNDlWMjdINTIuODM1MlYyNS41Wk01Mi44NjU1IDI1LjVINTIuODM1MlYyN0g1Mi44NjU1VjI1LjVaTTUyLjg5NTggMjUuNUg1Mi44NjU1VjI3SDUyLjg5NThWMjUuNVpNNTIuOTI2IDI1LjVINTIuODk1OFYyN0g1Mi45MjZWMjUuNVpNNTIuOTU2MiAyNS41SDUyLjkyNlYyN0g1Mi45NTYyVjI1LjVaTTUyLjk4NjQgMjUuNUg1Mi45NTYyVjI3SDUyLjk4NjRWMjUuNVpNNTMuMDE2NSAyNS41SDUyLjk4NjRWMjdINTMuMDE2NVYyNS41Wk01My4wNDY2IDI1LjVINTMuMDE2NVYyN0g1My4wNDY2VjI1LjVaTTUzLjA3NjYgMjUuNUg1My4wNDY2VjI3SDUzLjA3NjZWMjUuNVpNNTMuMTA2NyAyNS41SDUzLjA3NjZWMjdINTMuMTA2N1YyNS41Wk01My4xMzY3IDI1LjVINTMuMTA2N1YyN0g1My4xMzY3VjI1LjVaTTUzLjE2NjYgMjUuNUg1My4xMzY3VjI3SDUzLjE2NjZWMjUuNVpNNTMuMTk2NSAyNS41SDUzLjE2NjZWMjdINTMuMTk2NVYyNS41Wk01My4yMjY0IDI1LjVINTMuMTk2NVYyN0g1My4yMjY0VjI1LjVaTTUzLjI1NjMgMjUuNUg1My4yMjY0VjI3SDUzLjI1NjNWMjUuNVpNNTMuMjg2MSAyNS41SDUzLjI1NjNWMjdINTMuMjg2MVYyNS41Wk01My4zMTU5IDI1LjVINTMuMjg2MVYyN0g1My4zMTU5VjI1LjVaTTUzLjM0NTcgMjUuNUg1My4zMTU5VjI3SDUzLjM0NTdWMjUuNVpNNTMuMzc1NCAyNS41SDUzLjM0NTdWMjdINTMuMzc1NFYyNS41Wk01My40MDUxIDI1LjVINTMuMzc1NFYyN0g1My40MDUxVjI1LjVaTTUzLjQzNDggMjUuNUg1My40MDUxVjI3SDUzLjQzNDhWMjUuNVpNNTMuNDY0NCAyNS41SDUzLjQzNDhWMjdINTMuNDY0NFYyNS41Wk01My40OTQgMjUuNUg1My40NjQ0VjI3SDUzLjQ5NFYyNS41Wk01My41MjM2IDI1LjVINTMuNDk0VjI3SDUzLjUyMzZWMjUuNVpNNTMuNTUzMSAyNS41SDUzLjUyMzZWMjdINTMuNTUzMVYyNS41Wk01My41ODI2IDI1LjVINTMuNTUzMVYyN0g1My41ODI2VjI1LjVaTTUzLjYxMiAyNS41SDUzLjU4MjZWMjdINTMuNjEyVjI1LjVaTTUzLjY0MTUgMjUuNUg1My42MTJWMjdINTMuNjQxNVYyNS41Wk01My42NzA5IDI1LjVINTMuNjQxNVYyN0g1My42NzA5VjI1LjVaTTUzLjcwMDIgMjUuNUg1My42NzA5VjI3SDUzLjcwMDJWMjUuNVpNNTMuNzI5NiAyNS41SDUzLjcwMDJWMjdINTMuNzI5NlYyNS41Wk01My43NTg4IDI1LjVINTMuNzI5NlYyN0g1My43NTg4VjI1LjVaTTUzLjc4ODEgMjUuNUg1My43NTg4VjI3SDUzLjc4ODFWMjUuNVpNNTMuODE3MyAyNS41SDUzLjc4ODFWMjdINTMuODE3M1YyNS41Wk01My44NDY1IDI1LjVINTMuODE3M1YyN0g1My44NDY1VjI1LjVaTTUzLjg3NTcgMjUuNUg1My44NDY1VjI3SDUzLjg3NTdWMjUuNVpNNTMuOTA0OCAyNS41SDUzLjg3NTdWMjdINTMuOTA0OFYyNS41Wk01My45MzM5IDI1LjVINTMuOTA0OFYyN0g1My45MzM5VjI1LjVaTTUzLjk2MyAyNS41SDUzLjkzMzlWMjdINTMuOTYzVjI1LjVaTTUzLjk5MiAyNS41SDUzLjk2M1YyN0g1My45OTJWMjUuNVpNNTQuMDIxIDI1LjVINTMuOTkyVjI3SDU0LjAyMVYyNS41Wk01NC4wNSAyNS41SDU0LjAyMVYyN0g1NC4wNVYyNS41Wk01NC4wNzg5IDI1LjVINTQuMDVWMjdINTQuMDc4OVYyNS41Wk01NC4xMDc4IDI1LjVINTQuMDc4OVYyN0g1NC4xMDc4VjI1LjVaTTU0LjEzNjcgMjUuNUg1NC4xMDc4VjI3SDU0LjEzNjdWMjUuNVpNNTQuMTY1NSAyNS41SDU0LjEzNjdWMjdINTQuMTY1NVYyNS41Wk01NC4xOTQzIDI1LjVINTQuMTY1NVYyN0g1NC4xOTQzVjI1LjVaTTU0LjIyMzEgMjUuNUg1NC4xOTQzVjI3SDU0LjIyMzFWMjUuNVpNNTQuMjUxOCAyNS41SDU0LjIyMzFWMjdINTQuMjUxOFYyNS41Wk01NC4yODA1IDI1LjVINTQuMjUxOFYyN0g1NC4yODA1VjI1LjVaTTU0LjMwOTIgMjUuNUg1NC4yODA1VjI3SDU0LjMwOTJWMjUuNVpNNTQuMzM3OCAyNS41SDU0LjMwOTJWMjdINTQuMzM3OFYyNS41Wk01NC4zNjY0IDI1LjVINTQuMzM3OFYyN0g1NC4zNjY0VjI1LjVaTTU0LjM5NSAyNS41SDU0LjM2NjRWMjdINTQuMzk1VjI1LjVaTTU0LjQyMzUgMjUuNUg1NC4zOTVWMjdINTQuNDIzNVYyNS41Wk01NC40NTIgMjUuNUg1NC40MjM1VjI3SDU0LjQ1MlYyNS41Wk01NC40ODA1IDI1LjVINTQuNDUyVjI3SDU0LjQ4MDVWMjUuNVpNNTQuNTA4OSAyNS41SDU0LjQ4MDVWMjdINTQuNTA4OVYyNS41Wk01NC41MzczIDI1LjVINTQuNTA4OVYyN0g1NC41MzczVjI1LjVaTTU0LjU2NTcgMjUuNUg1NC41MzczVjI3SDU0LjU2NTdWMjUuNVpNNTQuNTk0IDI1LjVINTQuNTY1N1YyN0g1NC41OTRWMjUuNVpNNTQuNjIyMyAyNS41SDU0LjU5NFYyN0g1NC42MjIzVjI1LjVaTTU0LjY1MDYgMjUuNUg1NC42MjIzVjI3SDU0LjY1MDZWMjUuNVpNNTQuNjc4OCAyNS41SDU0LjY1MDZWMjdINTQuNjc4OFYyNS41Wk01NC43MDcgMjUuNUg1NC42Nzg4VjI3SDU0LjcwN1YyNS41Wk01NC43MzUyIDI1LjVINTQuNzA3VjI3SDU0LjczNTJWMjUuNVpNNTQuNzYzMyAyNS41SDU0LjczNTJWMjdINTQuNzYzM1YyNS41Wk01NC43OTE0IDI1LjVINTQuNzYzM1YyN0g1NC43OTE0VjI1LjVaTTU0LjgxOTUgMjUuNUg1NC43OTE0VjI3SDU0LjgxOTVWMjUuNVpNNTQuODQ3NSAyNS41SDU0LjgxOTVWMjdINTQuODQ3NVYyNS41Wk01NC44NzU1IDI1LjVINTQuODQ3NVYyN0g1NC44NzU1VjI1LjVaTTU0LjkwMzUgMjUuNUg1NC44NzU1VjI3SDU0LjkwMzVWMjUuNVpNNTQuOTMxNCAyNS41SDU0LjkwMzVWMjdINTQuOTMxNFYyNS41Wk01NC45NTk0IDI1LjVINTQuOTMxNFYyN0g1NC45NTk0VjI1LjVaTTU0Ljk4NzIgMjUuNUg1NC45NTk0VjI3SDU0Ljk4NzJWMjUuNVpNNTUuMDE1MSAyNS41SDU0Ljk4NzJWMjdINTUuMDE1MVYyNS41Wk01NS4wNDI5IDI1LjVINTUuMDE1MVYyN0g1NS4wNDI5VjI1LjVaTTU1LjA3MDYgMjUuNUg1NS4wNDI5VjI3SDU1LjA3MDZWMjUuNVpNNTUuMDk4NCAyNS41SDU1LjA3MDZWMjdINTUuMDk4NFYyNS41Wk01NS4xMjYxIDI1LjVINTUuMDk4NFYyN0g1NS4xMjYxVjI1LjVaTTU1LjE1MzcgMjUuNUg1NS4xMjYxVjI3SDU1LjE1MzdWMjUuNVpNNTUuMTgxNCAyNS41SDU1LjE1MzdWMjdINTUuMTgxNFYyNS41Wk01NS4yMDkgMjUuNUg1NS4xODE0VjI3SDU1LjIwOVYyNS41Wk01NS4yMzY2IDI1LjVINTUuMjA5VjI3SDU1LjIzNjZWMjUuNVpNNTUuMjY0MSAyNS41SDU1LjIzNjZWMjdINTUuMjY0MVYyNS41Wk01NS4yOTE2IDI1LjVINTUuMjY0MVYyN0g1NS4yOTE2VjI1LjVaTTU1LjMxOTEgMjUuNUg1NS4yOTE2VjI3SDU1LjMxOTFWMjUuNVpNNTUuMzQ2NSAyNS41SDU1LjMxOTFWMjdINTUuMzQ2NVYyNS41Wk01NS4zNzM5IDI1LjVINTUuMzQ2NVYyN0g1NS4zNzM5VjI1LjVaTTU1LjQwMTMgMjUuNUg1NS4zNzM5VjI3SDU1LjQwMTNWMjUuNVpNNTUuNDI4NiAyNS41SDU1LjQwMTNWMjdINTUuNDI4NlYyNS41Wk01NS40NTU5IDI1LjVINTUuNDI4NlYyN0g1NS40NTU5VjI1LjVaTTU1LjQ4MzIgMjUuNUg1NS40NTU5VjI3SDU1LjQ4MzJWMjUuNVpNNTUuNTEwNSAyNS41SDU1LjQ4MzJWMjdINTUuNTEwNVYyNS41Wk01NS41Mzc3IDI1LjVINTUuNTEwNVYyN0g1NS41Mzc3VjI1LjVaTTU1LjU2NDggMjUuNUg1NS41Mzc3VjI3SDU1LjU2NDhWMjUuNVpNNTUuNTkyIDI1LjVINTUuNTY0OFYyN0g1NS41OTJWMjUuNVpNNTUuNjE5MSAyNS41SDU1LjU5MlYyN0g1NS42MTkxVjI1LjVaTTU1LjY0NjIgMjUuNUg1NS42MTkxVjI3SDU1LjY0NjJWMjUuNVpNNTUuNjczMiAyNS41SDU1LjY0NjJWMjdINTUuNjczMlYyNS41Wk01NS43MDAyIDI1LjVINTUuNjczMlYyN0g1NS43MDAyVjI1LjVaTTU1LjcyNzIgMjUuNUg1NS43MDAyVjI3SDU1LjcyNzJWMjUuNVpNNTUuNzU0MSAyNS41SDU1LjcyNzJWMjdINTUuNzU0MVYyNS41Wk01NS43ODEgMjUuNUg1NS43NTQxVjI3SDU1Ljc4MVYyNS41Wk01NS44MDc5IDI1LjVINTUuNzgxVjI3SDU1LjgwNzlWMjUuNVpNNTUuODM0OCAyNS41SDU1LjgwNzlWMjdINTUuODM0OFYyNS41Wk01NS44NjE2IDI1LjVINTUuODM0OFYyN0g1NS44NjE2VjI1LjVaTTU1Ljg4ODMgMjUuNUg1NS44NjE2VjI3SDU1Ljg4ODNWMjUuNVpNNTUuOTE1MSAyNS41SDU1Ljg4ODNWMjdINTUuOTE1MVYyNS41Wk01NS45NDE4IDI1LjVINTUuOTE1MVYyN0g1NS45NDE4VjI1LjVaTTU1Ljk2ODUgMjUuNUg1NS45NDE4VjI3SDU1Ljk2ODVWMjUuNVpNNTUuOTk1MSAyNS41SDU1Ljk2ODVWMjdINTUuOTk1MVYyNS41Wk01Ni4wMjE3IDI1LjVINTUuOTk1MVYyN0g1Ni4wMjE3VjI1LjVaTTU2LjA0ODMgMjUuNUg1Ni4wMjE3VjI3SDU2LjA0ODNWMjUuNVpNNTYuMDc0OSAyNS41SDU2LjA0ODNWMjdINTYuMDc0OVYyNS41Wk01Ni4xMDE0IDI1LjVINTYuMDc0OVYyN0g1Ni4xMDE0VjI1LjVaTTU2LjEyNzggMjUuNUg1Ni4xMDE0VjI3SDU2LjEyNzhWMjUuNVpNNTYuMTU0MyAyNS41SDU2LjEyNzhWMjdINTYuMTU0M1YyNS41Wk01Ni4xODA3IDI1LjVINTYuMTU0M1YyN0g1Ni4xODA3VjI1LjVaTTU2LjIwNzEgMjUuNUg1Ni4xODA3VjI3SDU2LjIwNzFWMjUuNVpNNTYuMjMzNCAyNS41SDU2LjIwNzFWMjdINTYuMjMzNFYyNS41Wk01Ni4yNTk3IDI1LjVINTYuMjMzNFYyN0g1Ni4yNTk3VjI1LjVaTTU2LjI4NiAyNS41SDU2LjI1OTdWMjdINTYuMjg2VjI1LjVaTTU2LjMxMjMgMjUuNUg1Ni4yODZWMjdINTYuMzEyM1YyNS41Wk01Ni4zMzg1IDI1LjVINTYuMzEyM1YyN0g1Ni4zMzg1VjI1LjVaTTU2LjM2NDYgMjUuNUg1Ni4zMzg1VjI3SDU2LjM2NDZWMjUuNVpNNTYuMzkwOCAyNS41SDU2LjM2NDZWMjdINTYuMzkwOFYyNS41Wk01Ni40MTY5IDI1LjVINTYuMzkwOFYyN0g1Ni40MTY5VjI1LjVaTTU2LjQ0MyAyNS41SDU2LjQxNjlWMjdINTYuNDQzVjI1LjVaTTU2LjQ2OSAyNS41SDU2LjQ0M1YyN0g1Ni40NjlWMjUuNVpNNTYuNDk1IDI1LjVINTYuNDY5VjI3SDU2LjQ5NVYyNS41Wk01Ni41MjEgMjUuNUg1Ni40OTVWMjdINTYuNTIxVjI1LjVaTTU2LjU0NyAyNS41SDU2LjUyMVYyN0g1Ni41NDdWMjUuNVpNNTYuNTcyOSAyNS41SDU2LjU0N1YyN0g1Ni41NzI5VjI1LjVaTTU2LjU5ODggMjUuNUg1Ni41NzI5VjI3SDU2LjU5ODhWMjUuNVpNNTYuNjI0NiAyNS41SDU2LjU5ODhWMjdINTYuNjI0NlYyNS41Wk01Ni42NTA0IDI1LjVINTYuNjI0NlYyN0g1Ni42NTA0VjI1LjVaTTU2LjY3NjIgMjUuNUg1Ni42NTA0VjI3SDU2LjY3NjJWMjUuNVpNNTYuNzAyIDI1LjVINTYuNjc2MlYyN0g1Ni43MDJWMjUuNVpNNTYuNzI3NyAyNS41SDU2LjcwMlYyN0g1Ni43Mjc3VjI1LjVaTTU2Ljc1MzQgMjUuNUg1Ni43Mjc3VjI3SDU2Ljc1MzRWMjUuNVpNNTYuNzc5IDI1LjVINTYuNzUzNFYyN0g1Ni43NzlWMjUuNVpNNTYuODA0NiAyNS41SDU2Ljc3OVYyN0g1Ni44MDQ2VjI1LjVaTTU2LjgzMDIgMjUuNUg1Ni44MDQ2VjI3SDU2LjgzMDJWMjUuNVpNNTYuODU1OCAyNS41SDU2LjgzMDJWMjdINTYuODU1OFYyNS41Wk01Ni44ODEzIDI1LjVINTYuODU1OFYyN0g1Ni44ODEzVjI1LjVaTTU2LjkwNjggMjUuNUg1Ni44ODEzVjI3SDU2LjkwNjhWMjUuNVpNNTYuOTMyMiAyNS41SDU2LjkwNjhWMjdINTYuOTMyMlYyNS41Wk01Ni45NTc2IDI1LjVINTYuOTMyMlYyN0g1Ni45NTc2VjI1LjVaTTU2Ljk4MyAyNS41SDU2Ljk1NzZWMjdINTYuOTgzVjI1LjVaTTU3LjAwODQgMjUuNUg1Ni45ODNWMjdINTcuMDA4NFYyNS41Wk01Ny4wMzM3IDI1LjVINTcuMDA4NFYyN0g1Ny4wMzM3VjI1LjVaTTU3LjA1OSAyNS41SDU3LjAzMzdWMjdINTcuMDU5VjI1LjVaTTU3LjA4NDIgMjUuNUg1Ny4wNTlWMjdINTcuMDg0MlYyNS41Wk01Ny4xMDk0IDI1LjVINTcuMDg0MlYyN0g1Ny4xMDk0VjI1LjVaTTU3LjEzNDYgMjUuNUg1Ny4xMDk0VjI3SDU3LjEzNDZWMjUuNVpNNTcuMTU5OCAyNS41SDU3LjEzNDZWMjdINTcuMTU5OFYyNS41Wk01Ny4xODQ5IDI1LjVINTcuMTU5OFYyN0g1Ny4xODQ5VjI1LjVaTTU3LjIxIDI1LjVINTcuMTg0OVYyN0g1Ny4yMVYyNS41Wk01Ny4yMzUgMjUuNUg1Ny4yMVYyN0g1Ny4yMzVWMjUuNVpNNTcuMjYgMjUuNUg1Ny4yMzVWMjdINTcuMjZWMjUuNVpNNTcuMjg1IDI1LjVINTcuMjZWMjdINTcuMjg1VjI1LjVaTTU3LjMxIDI1LjVINTcuMjg1VjI3SDU3LjMxVjI1LjVaTTU3LjMzNDkgMjUuNUg1Ny4zMVYyN0g1Ny4zMzQ5VjI1LjVaTTU3LjM1OTggMjUuNUg1Ny4zMzQ5VjI3SDU3LjM1OThWMjUuNVpNNTcuMzg0NiAyNS41SDU3LjM1OThWMjdINTcuMzg0NlYyNS41Wk01Ny40MDk1IDI1LjVINTcuMzg0NlYyN0g1Ny40MDk1VjI1LjVaTTU3LjQzNDIgMjUuNUg1Ny40MDk1VjI3SDU3LjQzNDJWMjUuNVpNNTcuNDU5IDI1LjVINTcuNDM0MlYyN0g1Ny40NTlWMjUuNVpNNTcuNDgzNyAyNS41SDU3LjQ1OVYyN0g1Ny40ODM3VjI1LjVaTTU3LjUwODQgMjUuNUg1Ny40ODM3VjI3SDU3LjUwODRWMjUuNVpNNTcuNTMzMSAyNS41SDU3LjUwODRWMjdINTcuNTMzMVYyNS41Wk01Ny41NTc3IDI1LjVINTcuNTMzMVYyN0g1Ny41NTc3VjI1LjVaTTU3LjU4MjMgMjUuNUg1Ny41NTc3VjI3SDU3LjU4MjNWMjUuNVpNNTcuNjA2OCAyNS41SDU3LjU4MjNWMjdINTcuNjA2OFYyNS41Wk01Ny42MzEzIDI1LjVINTcuNjA2OFYyN0g1Ny42MzEzVjI1LjVaTTU3LjY1NTggMjUuNUg1Ny42MzEzVjI3SDU3LjY1NThWMjUuNVpNNTcuNjgwMyAyNS41SDU3LjY1NThWMjdINTcuNjgwM1YyNS41Wk01Ny43MDQ3IDI1LjVINTcuNjgwM1YyN0g1Ny43MDQ3VjI1LjVaTTU3LjcyOTEgMjUuNUg1Ny43MDQ3VjI3SDU3LjcyOTFWMjUuNVpNNTcuNzUzNCAyNS41SDU3LjcyOTFWMjdINTcuNzUzNFYyNS41Wk01Ny43Nzc4IDI1LjVINTcuNzUzNFYyN0g1Ny43Nzc4VjI1LjVaTTU3LjgwMjEgMjUuNUg1Ny43Nzc4VjI3SDU3LjgwMjFWMjUuNVpNNTcuODI2MyAyNS41SDU3LjgwMjFWMjdINTcuODI2M1YyNS41Wk01Ny44NTA1IDI1LjVINTcuODI2M1YyN0g1Ny44NTA1VjI1LjVaTTU3Ljg3NDcgMjUuNUg1Ny44NTA1VjI3SDU3Ljg3NDdWMjUuNVpNNTcuODk4OSAyNS41SDU3Ljg3NDdWMjdINTcuODk4OVYyNS41Wk01Ny45MjMgMjUuNUg1Ny44OTg5VjI3SDU3LjkyM1YyNS41Wk01Ny45NDcxIDI1LjVINTcuOTIzVjI3SDU3Ljk0NzFWMjUuNVpNNTcuOTcxMiAyNS41SDU3Ljk0NzFWMjdINTcuOTcxMlYyNS41Wk01Ny45OTUyIDI1LjVINTcuOTcxMlYyN0g1Ny45OTUyVjI1LjVaTTU4LjAxOTIgMjUuNUg1Ny45OTUyVjI3SDU4LjAxOTJWMjUuNVpNNTguMDQzMSAyNS41SDU4LjAxOTJWMjdINTguMDQzMVYyNS41Wk01OC4wNjcxIDI1LjVINTguMDQzMVYyN0g1OC4wNjcxVjI1LjVaTTU4LjA5MDkgMjUuNUg1OC4wNjcxVjI3SDU4LjA5MDlWMjUuNVpNNTguMTE0OCAyNS41SDU4LjA5MDlWMjdINTguMTE0OFYyNS41Wk01OC4xMzg2IDI1LjVINTguMTE0OFYyN0g1OC4xMzg2VjI1LjVaTTU4LjE2MjQgMjUuNUg1OC4xMzg2VjI3SDU4LjE2MjRWMjUuNVpNNTguMTg2MiAyNS41SDU4LjE2MjRWMjdINTguMTg2MlYyNS41Wk01OC4yMDk5IDI1LjVINTguMTg2MlYyN0g1OC4yMDk5VjI1LjVaTTU4LjIzMzYgMjUuNUg1OC4yMDk5VjI3SDU4LjIzMzZWMjUuNVpNNTguMjU3MyAyNS41SDU4LjIzMzZWMjdINTguMjU3M1YyNS41Wk01OC4yODA5IDI1LjVINTguMjU3M1YyN0g1OC4yODA5VjI1LjVaTTU4LjMwNDUgMjUuNUg1OC4yODA5VjI3SDU4LjMwNDVWMjUuNVpNNTguMzI4IDI1LjVINTguMzA0NVYyN0g1OC4zMjhWMjUuNVpNNTguMzUxNiAyNS41SDU4LjMyOFYyN0g1OC4zNTE2VjI1LjVaTTU4LjM3NTEgMjUuNUg1OC4zNTE2VjI3SDU4LjM3NTFWMjUuNVpNNTguMzk4NSAyNS41SDU4LjM3NTFWMjdINTguMzk4NVYyNS41Wk01OC40MjE5IDI1LjVINTguMzk4NVYyN0g1OC40MjE5VjI1LjVaTTU4LjQ0NTMgMjUuNUg1OC40MjE5VjI3SDU4LjQ0NTNWMjUuNVpNNTguNDY4NyAyNS41SDU4LjQ0NTNWMjdINTguNDY4N1YyNS41Wk01OC40OTIgMjUuNUg1OC40Njg3VjI3SDU4LjQ5MlYyNS41Wk01OC41MTUzIDI1LjVINTguNDkyVjI3SDU4LjUxNTNWMjUuNVpNNTguNTM4NiAyNS41SDU4LjUxNTNWMjdINTguNTM4NlYyNS41Wk01OC41NjE4IDI1LjVINTguNTM4NlYyN0g1OC41NjE4VjI1LjVaTTU4LjU4NSAyNS41SDU4LjU2MThWMjdINTguNTg1VjI1LjVaTTU4LjYwODIgMjUuNUg1OC41ODVWMjdINTguNjA4MlYyNS41Wk01OC42MzEzIDI1LjVINTguNjA4MlYyN0g1OC42MzEzVjI1LjVaTTU4LjY1NDQgMjUuNUg1OC42MzEzVjI3SDU4LjY1NDRWMjUuNVpNNTguNjc3NSAyNS41SDU4LjY1NDRWMjdINTguNjc3NVYyNS41Wk01OC43MDA1IDI1LjVINTguNjc3NVYyN0g1OC43MDA1VjI1LjVaTTU4LjcyMzUgMjUuNUg1OC43MDA1VjI3SDU4LjcyMzVWMjUuNVpNNTguNzQ2NCAyNS41SDU4LjcyMzVWMjdINTguNzQ2NFYyNS41Wk01OC43Njk0IDI1LjVINTguNzQ2NFYyN0g1OC43Njk0VjI1LjVaTTU4Ljc5MjMgMjUuNUg1OC43Njk0VjI3SDU4Ljc5MjNWMjUuNVpNNTguODE1MSAyNS41SDU4Ljc5MjNWMjdINTguODE1MVYyNS41Wk01OC44MzggMjUuNUg1OC44MTUxVjI3SDU4LjgzOFYyNS41Wk01OC44NjA4IDI1LjVINTguODM4VjI3SDU4Ljg2MDhWMjUuNVpNNTguODgzNSAyNS41SDU4Ljg2MDhWMjdINTguODgzNVYyNS41Wk01OC45MDYzIDI1LjVINTguODgzNVYyN0g1OC45MDYzVjI1LjVaTTU4LjkyODkgMjUuNUg1OC45MDYzVjI3SDU4LjkyODlWMjUuNVpNNTguOTUxNiAyNS41SDU4LjkyODlWMjdINTguOTUxNlYyNS41Wk01OC45NzQyIDI1LjVINTguOTUxNlYyN0g1OC45NzQyVjI1LjVaTTU4Ljk5NjggMjUuNUg1OC45NzQyVjI3SDU4Ljk5NjhWMjUuNVpNNTkuMDE5NCAyNS41SDU4Ljk5NjhWMjdINTkuMDE5NFYyNS41Wk01OS4wNDE5IDI1LjVINTkuMDE5NFYyN0g1OS4wNDE5VjI1LjVaTTU5LjA2NDQgMjUuNUg1OS4wNDE5VjI3SDU5LjA2NDRWMjUuNVpNNTkuMDg2OSAyNS41SDU5LjA2NDRWMjdINTkuMDg2OVYyNS41Wk01OS4xMDkzIDI1LjVINTkuMDg2OVYyN0g1OS4xMDkzVjI1LjVaTTU5LjEzMTcgMjUuNUg1OS4xMDkzVjI3SDU5LjEzMTdWMjUuNVpNNTkuMTU0MSAyNS41SDU5LjEzMTdWMjdINTkuMTU0MVYyNS41Wk01OS4xNzY0IDI1LjVINTkuMTU0MVYyN0g1OS4xNzY0VjI1LjVaTTU5LjE5ODcgMjUuNUg1OS4xNzY0VjI3SDU5LjE5ODdWMjUuNVpNNTkuMjIxIDI1LjVINTkuMTk4N1YyN0g1OS4yMjFWMjUuNVpNNTkuMjQzMiAyNS41SDU5LjIyMVYyN0g1OS4yNDMyVjI1LjVaTTU5LjI2NTQgMjUuNUg1OS4yNDMyVjI3SDU5LjI2NTRWMjUuNVpNNTkuMjg3NiAyNS41SDU5LjI2NTRWMjdINTkuMjg3NlYyNS41Wk01OS4zMDk3IDI1LjVINTkuMjg3NlYyN0g1OS4zMDk3VjI1LjVaTTU5LjMzMTggMjUuNUg1OS4zMDk3VjI3SDU5LjMzMThWMjUuNVpNNTkuMzUzOSAyNS41SDU5LjMzMThWMjdINTkuMzUzOVYyNS41Wk01OS4zNzU5IDI1LjVINTkuMzUzOVYyN0g1OS4zNzU5VjI1LjVaTTU5LjM5NzkgMjUuNUg1OS4zNzU5VjI3SDU5LjM5NzlWMjUuNVpNNTkuNDE5OSAyNS41SDU5LjM5NzlWMjdINTkuNDE5OVYyNS41Wk01OS40NDE4IDI1LjVINTkuNDE5OVYyN0g1OS40NDE4VjI1LjVaTTU5LjQ2MzcgMjUuNUg1OS40NDE4VjI3SDU5LjQ2MzdWMjUuNVpNNTkuNDg1NiAyNS41SDU5LjQ2MzdWMjdINTkuNDg1NlYyNS41Wk01OS41MDc0IDI1LjVINTkuNDg1NlYyN0g1OS41MDc0VjI1LjVaTTU5LjUyOTMgMjUuNUg1OS41MDc0VjI3SDU5LjUyOTNWMjUuNVpNNTkuNTUxIDI1LjVINTkuNTI5M1YyN0g1OS41NTFWMjUuNVpNNTkuNTcyOCAyNS41SDU5LjU1MVYyN0g1OS41NzI4VjI1LjVaTTU5LjU5NDUgMjUuNUg1OS41NzI4VjI3SDU5LjU5NDVWMjUuNVpNNTkuNjE2MSAyNS41SDU5LjU5NDVWMjdINTkuNjE2MVYyNS41Wk01OS42Mzc4IDI1LjVINTkuNjE2MVYyN0g1OS42Mzc4VjI1LjVaTTU5LjY1OTQgMjUuNUg1OS42Mzc4VjI3SDU5LjY1OTRWMjUuNVpNNTkuNjgwOSAyNS41SDU5LjY1OTRWMjdINTkuNjgwOVYyNS41Wk01OS43MDI1IDI1LjVINTkuNjgwOVYyN0g1OS43MDI1VjI1LjVaTTU5LjcyNCAyNS41SDU5LjcwMjVWMjdINTkuNzI0VjI1LjVaTTU5Ljc0NTQgMjUuNUg1OS43MjRWMjdINTkuNzQ1NFYyNS41Wk01OS43NjY5IDI1LjVINTkuNzQ1NFYyN0g1OS43NjY5VjI1LjVaTTU5Ljc4ODMgMjUuNUg1OS43NjY5VjI3SDU5Ljc4ODNWMjUuNVpNNTkuODA5NyAyNS41SDU5Ljc4ODNWMjdINTkuODA5N1YyNS41Wk01OS44MzEgMjUuNUg1OS44MDk3VjI3SDU5LjgzMVYyNS41Wk01OS44NTIzIDI1LjVINTkuODMxVjI3SDU5Ljg1MjNWMjUuNVpNNTkuODczNiAyNS41SDU5Ljg1MjNWMjdINTkuODczNlYyNS41Wk01OS44OTQ4IDI1LjVINTkuODczNlYyN0g1OS44OTQ4VjI1LjVaTTU5LjkxNiAyNS41SDU5Ljg5NDhWMjdINTkuOTE2VjI1LjVaTTU5LjkzNzIgMjUuNUg1OS45MTZWMjdINTkuOTM3MlYyNS41Wk01OS45NTgzIDI1LjVINTkuOTM3MlYyN0g1OS45NTgzVjI1LjVaTTU5Ljk3OTQgMjUuNUg1OS45NTgzVjI3SDU5Ljk3OTRWMjUuNVpNNjAuMDAwNSAyNS41SDU5Ljk3OTRWMjdINjAuMDAwNVYyNS41Wk02MC4wMjE2IDI1LjVINjAuMDAwNVYyN0g2MC4wMjE2VjI1LjVaTTYwLjA0MjYgMjUuNUg2MC4wMjE2VjI3SDYwLjA0MjZWMjUuNVpNNjAuMDYzNSAyNS41SDYwLjA0MjZWMjdINjAuMDYzNVYyNS41Wk02MC4wODQ1IDI1LjVINjAuMDYzNVYyN0g2MC4wODQ1VjI1LjVaTTYwLjEwNTQgMjUuNUg2MC4wODQ1VjI3SDYwLjEwNTRWMjUuNVpNNjAuMTI2MyAyNS41SDYwLjEwNTRWMjdINjAuMTI2M1YyNS41Wk02MC4xNDcxIDI1LjVINjAuMTI2M1YyN0g2MC4xNDcxVjI1LjVaTTYwLjE2NzkgMjUuNUg2MC4xNDcxVjI3SDYwLjE2NzlWMjUuNVpNNjAuMTg4NyAyNS41SDYwLjE2NzlWMjdINjAuMTg4N1YyNS41Wk02MC4yMDk0IDI1LjVINjAuMTg4N1YyN0g2MC4yMDk0VjI1LjVaTTYwLjIzMDEgMjUuNUg2MC4yMDk0VjI3SDYwLjIzMDFWMjUuNVpNNjAuMjUwOCAyNS41SDYwLjIzMDFWMjdINjAuMjUwOFYyNS41Wk02MC4yNzE0IDI1LjVINjAuMjUwOFYyN0g2MC4yNzE0VjI1LjVaTTYwLjI5MiAyNS41SDYwLjI3MTRWMjdINjAuMjkyVjI1LjVaTTYwLjMxMjYgMjUuNUg2MC4yOTJWMjdINjAuMzEyNlYyNS41Wk02MC4zMzMyIDI1LjVINjAuMzEyNlYyN0g2MC4zMzMyVjI1LjVaTTYwLjM1MzcgMjUuNUg2MC4zMzMyVjI3SDYwLjM1MzdWMjUuNVpNNjAuMzc0MiAyNS41SDYwLjM1MzdWMjdINjAuMzc0MlYyNS41Wk02MC4zOTQ2IDI1LjVINjAuMzc0MlYyN0g2MC4zOTQ2VjI1LjVaTTYwLjQxNSAyNS41SDYwLjM5NDZWMjdINjAuNDE1VjI1LjVaTTYwLjQzNTQgMjUuNUg2MC40MTVWMjdINjAuNDM1NFYyNS41Wk02MC40NTU3IDI1LjVINjAuNDM1NFYyN0g2MC40NTU3VjI1LjVaTTYwLjQ3NiAyNS41SDYwLjQ1NTdWMjdINjAuNDc2VjI1LjVaTTYwLjQ5NjMgMjUuNUg2MC40NzZWMjdINjAuNDk2M1YyNS41Wk02MC41MTY2IDI1LjVINjAuNDk2M1YyN0g2MC41MTY2VjI1LjVaTTYwLjUzNjggMjUuNUg2MC41MTY2VjI3SDYwLjUzNjhWMjUuNVpNNjAuNTU2OSAyNS41SDYwLjUzNjhWMjdINjAuNTU2OVYyNS41Wk02MC41NzcxIDI1LjVINjAuNTU2OVYyN0g2MC41NzcxVjI1LjVaTTYwLjU5NzIgMjUuNUg2MC41NzcxVjI3SDYwLjU5NzJWMjUuNVpNNjAuNjE3MyAyNS41SDYwLjU5NzJWMjdINjAuNjE3M1YyNS41Wk02MC42MzczIDI1LjVINjAuNjE3M1YyN0g2MC42MzczVjI1LjVaTTYwLjY1NzMgMjUuNUg2MC42MzczVjI3SDYwLjY1NzNWMjUuNVpNNjAuNjc3MyAyNS41SDYwLjY1NzNWMjdINjAuNjc3M1YyNS41Wk02MC42OTczIDI1LjVINjAuNjc3M1YyN0g2MC42OTczVjI1LjVaTTYwLjcxNzIgMjUuNUg2MC42OTczVjI3SDYwLjcxNzJWMjUuNVpNNjAuNzM3IDI1LjVINjAuNzE3MlYyN0g2MC43MzdWMjUuNVpNNjAuNzU2OSAyNS41SDYwLjczN1YyN0g2MC43NTY5VjI1LjVaTTYwLjc3NjcgMjUuNUg2MC43NTY5VjI3SDYwLjc3NjdWMjUuNVpNNjAuNzk2NSAyNS41SDYwLjc3NjdWMjdINjAuNzk2NVYyNS41Wk02MC44MTYyIDI1LjVINjAuNzk2NVYyN0g2MC44MTYyVjI1LjVaTTYwLjgzNTkgMjUuNUg2MC44MTYyVjI3SDYwLjgzNTlWMjUuNVpNNjAuODU1NiAyNS41SDYwLjgzNTlWMjdINjAuODU1NlYyNS41Wk02MC44NzUzIDI1LjVINjAuODU1NlYyN0g2MC44NzUzVjI1LjVaTTYwLjg5NDkgMjUuNUg2MC44NzUzVjI3SDYwLjg5NDlWMjUuNVpNNjAuOTE0NSAyNS41SDYwLjg5NDlWMjdINjAuOTE0NVYyNS41Wk02MC45MzQgMjUuNUg2MC45MTQ1VjI3SDYwLjkzNFYyNS41Wk02MC45NTM1IDI1LjVINjAuOTM0VjI3SDYwLjk1MzVWMjUuNVpNNjAuOTczIDI1LjVINjAuOTUzNVYyN0g2MC45NzNWMjUuNVpNNjAuOTkyNSAyNS41SDYwLjk3M1YyN0g2MC45OTI1VjI1LjVaTTYxLjAxMTkgMjUuNUg2MC45OTI1VjI3SDYxLjAxMTlWMjUuNVpNNjEuMDMxMyAyNS41SDYxLjAxMTlWMjdINjEuMDMxM1YyNS41Wk02MS4wNTA2IDI1LjVINjEuMDMxM1YyN0g2MS4wNTA2VjI1LjVaTTYxLjA2OTkgMjUuNUg2MS4wNTA2VjI3SDYxLjA2OTlWMjUuNVpNNjEuMDg5MiAyNS41SDYxLjA2OTlWMjdINjEuMDg5MlYyNS41Wk02MS4xMDg1IDI1LjVINjEuMDg5MlYyN0g2MS4xMDg1VjI1LjVaTTYxLjEyNzcgMjUuNUg2MS4xMDg1VjI3SDYxLjEyNzdWMjUuNVpNNjEuMTQ2OSAyNS41SDYxLjEyNzdWMjdINjEuMTQ2OVYyNS41Wk02MS4xNjYgMjUuNUg2MS4xNDY5VjI3SDYxLjE2NlYyNS41Wk02MS4xODUxIDI1LjVINjEuMTY2VjI3SDYxLjE4NTFWMjUuNVpNNjEuMjA0MiAyNS41SDYxLjE4NTFWMjdINjEuMjA0MlYyNS41Wk02MS4yMjMyIDI1LjVINjEuMjA0MlYyN0g2MS4yMjMyVjI1LjVaTTYxLjI0MjMgMjUuNUg2MS4yMjMyVjI3SDYxLjI0MjNWMjUuNVpNNjEuMjYxMiAyNS41SDYxLjI0MjNWMjdINjEuMjYxMlYyNS41Wk02MS4yODAyIDI1LjVINjEuMjYxMlYyN0g2MS4yODAyVjI1LjVaTTYxLjI5OTEgMjUuNUg2MS4yODAyVjI3SDYxLjI5OTFWMjUuNVpNNjEuMzE4IDI1LjVINjEuMjk5MVYyN0g2MS4zMThWMjUuNVpNNjEuMzM2OSAyNS41SDYxLjMxOFYyN0g2MS4zMzY5VjI1LjVaTTYxLjM1NTcgMjUuNUg2MS4zMzY5VjI3SDYxLjM1NTdWMjUuNVpNNjEuMzc0NSAyNS41SDYxLjM1NTdWMjdINjEuMzc0NVYyNS41Wk02MS4zOTMyIDI1LjVINjEuMzc0NVYyN0g2MS4zOTMyVjI1LjVaTTYxLjQxMTkgMjUuNUg2MS4zOTMyVjI3SDYxLjQxMTlWMjUuNVpNNjEuNDMwNiAyNS41SDYxLjQxMTlWMjdINjEuNDMwNlYyNS41Wk02MS40NDkzIDI1LjVINjEuNDMwNlYyN0g2MS40NDkzVjI1LjVaTTYxLjQ2NzkgMjUuNUg2MS40NDkzVjI3SDYxLjQ2NzlWMjUuNVpNNjEuNDg2NSAyNS41SDYxLjQ2NzlWMjdINjEuNDg2NVYyNS41Wk02MS41MDUgMjUuNUg2MS40ODY1VjI3SDYxLjUwNVYyNS41Wk02MS41MjM1IDI1LjVINjEuNTA1VjI3SDYxLjUyMzVWMjUuNVpNNjEuNTQyIDI1LjVINjEuNTIzNVYyN0g2MS41NDJWMjUuNVpNNjEuNTYwNSAyNS41SDYxLjU0MlYyN0g2MS41NjA1VjI1LjVaTTYxLjU3ODkgMjUuNUg2MS41NjA1VjI3SDYxLjU3ODlWMjUuNVpNNjEuNTk3MyAyNS41SDYxLjU3ODlWMjdINjEuNTk3M1YyNS41Wk02MS42MTU2IDI1LjVINjEuNTk3M1YyN0g2MS42MTU2VjI1LjVaTTYxLjYzNCAyNS41SDYxLjYxNTZWMjdINjEuNjM0VjI1LjVaTTYxLjY1MjIgMjUuNUg2MS42MzRWMjdINjEuNjUyMlYyNS41Wk02MS42NzA1IDI1LjVINjEuNjUyMlYyN0g2MS42NzA1VjI1LjVaTTYxLjY4ODcgMjUuNUg2MS42NzA1VjI3SDYxLjY4ODdWMjUuNVpNNjEuNzA2OSAyNS41SDYxLjY4ODdWMjdINjEuNzA2OVYyNS41Wk02MS43MjUxIDI1LjVINjEuNzA2OVYyN0g2MS43MjUxVjI1LjVaTTYxLjc0MzIgMjUuNUg2MS43MjUxVjI3SDYxLjc0MzJWMjUuNVpNNjEuNzYxMyAyNS41SDYxLjc0MzJWMjdINjEuNzYxM1YyNS41Wk02MS43NzkzIDI1LjVINjEuNzYxM1YyN0g2MS43NzkzVjI1LjVaTTYxLjc5NzQgMjUuNUg2MS43NzkzVjI3SDYxLjc5NzRWMjUuNVpNNjEuODE1MyAyNS41SDYxLjc5NzRWMjdINjEuODE1M1YyNS41Wk02MS44MzMzIDI1LjVINjEuODE1M1YyN0g2MS44MzMzVjI1LjVaTTYxLjg1MTIgMjUuNUg2MS44MzMzVjI3SDYxLjg1MTJWMjUuNVpNNjEuODY5MSAyNS41SDYxLjg1MTJWMjdINjEuODY5MVYyNS41Wk02MS44ODcgMjUuNUg2MS44NjkxVjI3SDYxLjg4N1YyNS41Wk02MS45MDQ4IDI1LjVINjEuODg3VjI3SDYxLjkwNDhWMjUuNVpNNjEuOTIyNiAyNS41SDYxLjkwNDhWMjdINjEuOTIyNlYyNS41Wk02MS45NDAzIDI1LjVINjEuOTIyNlYyN0g2MS45NDAzVjI1LjVaTTYxLjk1ODEgMjUuNUg2MS45NDAzVjI3SDYxLjk1ODFWMjUuNVpNNjEuOTc1OCAyNS41SDYxLjk1ODFWMjdINjEuOTc1OFYyNS41Wk02MS45OTM0IDI1LjVINjEuOTc1OFYyN0g2MS45OTM0VjI1LjVaTTYyLjAxMSAyNS41SDYxLjk5MzRWMjdINjIuMDExVjI1LjVaTTYyLjAyODYgMjUuNUg2Mi4wMTFWMjdINjIuMDI4NlYyNS41Wk02Mi4wNDYyIDI1LjVINjIuMDI4NlYyN0g2Mi4wNDYyVjI1LjVaTTYyLjA2MzcgMjUuNUg2Mi4wNDYyVjI3SDYyLjA2MzdWMjUuNVpNNjIuMDgxMiAyNS41SDYyLjA2MzdWMjdINjIuMDgxMlYyNS41Wk02Mi4wOTg3IDI1LjVINjIuMDgxMlYyN0g2Mi4wOTg3VjI1LjVaTTYyLjExNjEgMjUuNUg2Mi4wOTg3VjI3SDYyLjExNjFWMjUuNVpNNjIuMTMzNSAyNS41SDYyLjExNjFWMjdINjIuMTMzNVYyNS41Wk02Mi4xNTA4IDI1LjVINjIuMTMzNVYyN0g2Mi4xNTA4VjI1LjVaTTYyLjE2ODIgMjUuNUg2Mi4xNTA4VjI3SDYyLjE2ODJWMjUuNVpNNjIuMTg1NSAyNS41SDYyLjE2ODJWMjdINjIuMTg1NVYyNS41Wk02Mi4yMDI3IDI1LjVINjIuMTg1NVYyN0g2Mi4yMDI3VjI1LjVaTTYyLjIxOTkgMjUuNUg2Mi4yMDI3VjI3SDYyLjIxOTlWMjUuNVpNNjIuMjM3MSAyNS41SDYyLjIxOTlWMjdINjIuMjM3MVYyNS41Wk02Mi4yNTQzIDI1LjVINjIuMjM3MVYyN0g2Mi4yNTQzVjI1LjVaTTYyLjI3MTQgMjUuNUg2Mi4yNTQzVjI3SDYyLjI3MTRWMjUuNVpNNjIuMjg4NSAyNS41SDYyLjI3MTRWMjdINjIuMjg4NVYyNS41Wk02Mi4zMDU2IDI1LjVINjIuMjg4NVYyN0g2Mi4zMDU2VjI1LjVaTTYyLjMyMjYgMjUuNUg2Mi4zMDU2VjI3SDYyLjMyMjZWMjUuNVpNNjIuMzM5NiAyNS41SDYyLjMyMjZWMjdINjIuMzM5NlYyNS41Wk02My4wODk2IDI3Ljc1VjI2LjI1SDYxLjU4OTZWMjcuNzVINjMuMDg5NlpNNjIuMzIyNiAyOC41SDYyLjMzOTZWMjdINjIuMzIyNlYyOC41Wk02Mi4zMDU2IDI4LjVINjIuMzIyNlYyN0g2Mi4zMDU2VjI4LjVaTTYyLjI4ODUgMjguNUg2Mi4zMDU2VjI3SDYyLjI4ODVWMjguNVpNNjIuMjcxNCAyOC41SDYyLjI4ODVWMjdINjIuMjcxNFYyOC41Wk02Mi4yNTQzIDI4LjVINjIuMjcxNFYyN0g2Mi4yNTQzVjI4LjVaTTYyLjIzNzEgMjguNUg2Mi4yNTQzVjI3SDYyLjIzNzFWMjguNVpNNjIuMjE5OSAyOC41SDYyLjIzNzFWMjdINjIuMjE5OVYyOC41Wk02Mi4yMDI3IDI4LjVINjIuMjE5OVYyN0g2Mi4yMDI3VjI4LjVaTTYyLjE4NTUgMjguNUg2Mi4yMDI3VjI3SDYyLjE4NTVWMjguNVpNNjIuMTY4MiAyOC41SDYyLjE4NTVWMjdINjIuMTY4MlYyOC41Wk02Mi4xNTA4IDI4LjVINjIuMTY4MlYyN0g2Mi4xNTA4VjI4LjVaTTYyLjEzMzUgMjguNUg2Mi4xNTA4VjI3SDYyLjEzMzVWMjguNVpNNjIuMTE2MSAyOC41SDYyLjEzMzVWMjdINjIuMTE2MVYyOC41Wk02Mi4wOTg3IDI4LjVINjIuMTE2MVYyN0g2Mi4wOTg3VjI4LjVaTTYyLjA4MTIgMjguNUg2Mi4wOTg3VjI3SDYyLjA4MTJWMjguNVpNNjIuMDYzNyAyOC41SDYyLjA4MTJWMjdINjIuMDYzN1YyOC41Wk02Mi4wNDYyIDI4LjVINjIuMDYzN1YyN0g2Mi4wNDYyVjI4LjVaTTYyLjAyODYgMjguNUg2Mi4wNDYyVjI3SDYyLjAyODZWMjguNVpNNjIuMDExIDI4LjVINjIuMDI4NlYyN0g2Mi4wMTFWMjguNVpNNjEuOTkzNCAyOC41SDYyLjAxMVYyN0g2MS45OTM0VjI4LjVaTTYxLjk3NTggMjguNUg2MS45OTM0VjI3SDYxLjk3NThWMjguNVpNNjEuOTU4MSAyOC41SDYxLjk3NThWMjdINjEuOTU4MVYyOC41Wk02MS45NDAzIDI4LjVINjEuOTU4MVYyN0g2MS45NDAzVjI4LjVaTTYxLjkyMjYgMjguNUg2MS45NDAzVjI3SDYxLjkyMjZWMjguNVpNNjEuOTA0OCAyOC41SDYxLjkyMjZWMjdINjEuOTA0OFYyOC41Wk02MS44ODcgMjguNUg2MS45MDQ4VjI3SDYxLjg4N1YyOC41Wk02MS44NjkxIDI4LjVINjEuODg3VjI3SDYxLjg2OTFWMjguNVpNNjEuODUxMiAyOC41SDYxLjg2OTFWMjdINjEuODUxMlYyOC41Wk02MS44MzMzIDI4LjVINjEuODUxMlYyN0g2MS44MzMzVjI4LjVaTTYxLjgxNTMgMjguNUg2MS44MzMzVjI3SDYxLjgxNTNWMjguNVpNNjEuNzk3NCAyOC41SDYxLjgxNTNWMjdINjEuNzk3NFYyOC41Wk02MS43NzkzIDI4LjVINjEuNzk3NFYyN0g2MS43NzkzVjI4LjVaTTYxLjc2MTMgMjguNUg2MS43NzkzVjI3SDYxLjc2MTNWMjguNVpNNjEuNzQzMiAyOC41SDYxLjc2MTNWMjdINjEuNzQzMlYyOC41Wk02MS43MjUxIDI4LjVINjEuNzQzMlYyN0g2MS43MjUxVjI4LjVaTTYxLjcwNjkgMjguNUg2MS43MjUxVjI3SDYxLjcwNjlWMjguNVpNNjEuNjg4NyAyOC41SDYxLjcwNjlWMjdINjEuNjg4N1YyOC41Wk02MS42NzA1IDI4LjVINjEuNjg4N1YyN0g2MS42NzA1VjI4LjVaTTYxLjY1MjIgMjguNUg2MS42NzA1VjI3SDYxLjY1MjJWMjguNVpNNjEuNjM0IDI4LjVINjEuNjUyMlYyN0g2MS42MzRWMjguNVpNNjEuNjE1NiAyOC41SDYxLjYzNFYyN0g2MS42MTU2VjI4LjVaTTYxLjU5NzMgMjguNUg2MS42MTU2VjI3SDYxLjU5NzNWMjguNVpNNjEuNTc4OSAyOC41SDYxLjU5NzNWMjdINjEuNTc4OVYyOC41Wk02MS41NjA1IDI4LjVINjEuNTc4OVYyN0g2MS41NjA1VjI4LjVaTTYxLjU0MiAyOC41SDYxLjU2MDVWMjdINjEuNTQyVjI4LjVaTTYxLjUyMzUgMjguNUg2MS41NDJWMjdINjEuNTIzNVYyOC41Wk02MS41MDUgMjguNUg2MS41MjM1VjI3SDYxLjUwNVYyOC41Wk02MS40ODY1IDI4LjVINjEuNTA1VjI3SDYxLjQ4NjVWMjguNVpNNjEuNDY3OSAyOC41SDYxLjQ4NjVWMjdINjEuNDY3OVYyOC41Wk02MS40NDkzIDI4LjVINjEuNDY3OVYyN0g2MS40NDkzVjI4LjVaTTYxLjQzMDYgMjguNUg2MS40NDkzVjI3SDYxLjQzMDZWMjguNVpNNjEuNDExOSAyOC41SDYxLjQzMDZWMjdINjEuNDExOVYyOC41Wk02MS4zOTMyIDI4LjVINjEuNDExOVYyN0g2MS4zOTMyVjI4LjVaTTYxLjM3NDUgMjguNUg2MS4zOTMyVjI3SDYxLjM3NDVWMjguNVpNNjEuMzU1NyAyOC41SDYxLjM3NDVWMjdINjEuMzU1N1YyOC41Wk02MS4zMzY5IDI4LjVINjEuMzU1N1YyN0g2MS4zMzY5VjI4LjVaTTYxLjMxOCAyOC41SDYxLjMzNjlWMjdINjEuMzE4VjI4LjVaTTYxLjI5OTEgMjguNUg2MS4zMThWMjdINjEuMjk5MVYyOC41Wk02MS4yODAyIDI4LjVINjEuMjk5MVYyN0g2MS4yODAyVjI4LjVaTTYxLjI2MTIgMjguNUg2MS4yODAyVjI3SDYxLjI2MTJWMjguNVpNNjEuMjQyMyAyOC41SDYxLjI2MTJWMjdINjEuMjQyM1YyOC41Wk02MS4yMjMyIDI4LjVINjEuMjQyM1YyN0g2MS4yMjMyVjI4LjVaTTYxLjIwNDIgMjguNUg2MS4yMjMyVjI3SDYxLjIwNDJWMjguNVpNNjEuMTg1MSAyOC41SDYxLjIwNDJWMjdINjEuMTg1MVYyOC41Wk02MS4xNjYgMjguNUg2MS4xODUxVjI3SDYxLjE2NlYyOC41Wk02MS4xNDY5IDI4LjVINjEuMTY2VjI3SDYxLjE0NjlWMjguNVpNNjEuMTI3NyAyOC41SDYxLjE0NjlWMjdINjEuMTI3N1YyOC41Wk02MS4xMDg1IDI4LjVINjEuMTI3N1YyN0g2MS4xMDg1VjI4LjVaTTYxLjA4OTIgMjguNUg2MS4xMDg1VjI3SDYxLjA4OTJWMjguNVpNNjEuMDY5OSAyOC41SDYxLjA4OTJWMjdINjEuMDY5OVYyOC41Wk02MS4wNTA2IDI4LjVINjEuMDY5OVYyN0g2MS4wNTA2VjI4LjVaTTYxLjAzMTMgMjguNUg2MS4wNTA2VjI3SDYxLjAzMTNWMjguNVpNNjEuMDExOSAyOC41SDYxLjAzMTNWMjdINjEuMDExOVYyOC41Wk02MC45OTI1IDI4LjVINjEuMDExOVYyN0g2MC45OTI1VjI4LjVaTTYwLjk3MyAyOC41SDYwLjk5MjVWMjdINjAuOTczVjI4LjVaTTYwLjk1MzUgMjguNUg2MC45NzNWMjdINjAuOTUzNVYyOC41Wk02MC45MzQgMjguNUg2MC45NTM1VjI3SDYwLjkzNFYyOC41Wk02MC45MTQ1IDI4LjVINjAuOTM0VjI3SDYwLjkxNDVWMjguNVpNNjAuODk0OSAyOC41SDYwLjkxNDVWMjdINjAuODk0OVYyOC41Wk02MC44NzUzIDI4LjVINjAuODk0OVYyN0g2MC44NzUzVjI4LjVaTTYwLjg1NTYgMjguNUg2MC44NzUzVjI3SDYwLjg1NTZWMjguNVpNNjAuODM1OSAyOC41SDYwLjg1NTZWMjdINjAuODM1OVYyOC41Wk02MC44MTYyIDI4LjVINjAuODM1OVYyN0g2MC44MTYyVjI4LjVaTTYwLjc5NjUgMjguNUg2MC44MTYyVjI3SDYwLjc5NjVWMjguNVpNNjAuNzc2NyAyOC41SDYwLjc5NjVWMjdINjAuNzc2N1YyOC41Wk02MC43NTY5IDI4LjVINjAuNzc2N1YyN0g2MC43NTY5VjI4LjVaTTYwLjczNyAyOC41SDYwLjc1NjlWMjdINjAuNzM3VjI4LjVaTTYwLjcxNzIgMjguNUg2MC43MzdWMjdINjAuNzE3MlYyOC41Wk02MC42OTczIDI4LjVINjAuNzE3MlYyN0g2MC42OTczVjI4LjVaTTYwLjY3NzMgMjguNUg2MC42OTczVjI3SDYwLjY3NzNWMjguNVpNNjAuNjU3MyAyOC41SDYwLjY3NzNWMjdINjAuNjU3M1YyOC41Wk02MC42MzczIDI4LjVINjAuNjU3M1YyN0g2MC42MzczVjI4LjVaTTYwLjYxNzMgMjguNUg2MC42MzczVjI3SDYwLjYxNzNWMjguNVpNNjAuNTk3MiAyOC41SDYwLjYxNzNWMjdINjAuNTk3MlYyOC41Wk02MC41NzcxIDI4LjVINjAuNTk3MlYyN0g2MC41NzcxVjI4LjVaTTYwLjU1NjkgMjguNUg2MC41NzcxVjI3SDYwLjU1NjlWMjguNVpNNjAuNTM2OCAyOC41SDYwLjU1NjlWMjdINjAuNTM2OFYyOC41Wk02MC41MTY2IDI4LjVINjAuNTM2OFYyN0g2MC41MTY2VjI4LjVaTTYwLjQ5NjMgMjguNUg2MC41MTY2VjI3SDYwLjQ5NjNWMjguNVpNNjAuNDc2IDI4LjVINjAuNDk2M1YyN0g2MC40NzZWMjguNVpNNjAuNDU1NyAyOC41SDYwLjQ3NlYyN0g2MC40NTU3VjI4LjVaTTYwLjQzNTQgMjguNUg2MC40NTU3VjI3SDYwLjQzNTRWMjguNVpNNjAuNDE1IDI4LjVINjAuNDM1NFYyN0g2MC40MTVWMjguNVpNNjAuMzk0NiAyOC41SDYwLjQxNVYyN0g2MC4zOTQ2VjI4LjVaTTYwLjM3NDIgMjguNUg2MC4zOTQ2VjI3SDYwLjM3NDJWMjguNVpNNjAuMzUzNyAyOC41SDYwLjM3NDJWMjdINjAuMzUzN1YyOC41Wk02MC4zMzMyIDI4LjVINjAuMzUzN1YyN0g2MC4zMzMyVjI4LjVaTTYwLjMxMjYgMjguNUg2MC4zMzMyVjI3SDYwLjMxMjZWMjguNVpNNjAuMjkyIDI4LjVINjAuMzEyNlYyN0g2MC4yOTJWMjguNVpNNjAuMjcxNCAyOC41SDYwLjI5MlYyN0g2MC4yNzE0VjI4LjVaTTYwLjI1MDggMjguNUg2MC4yNzE0VjI3SDYwLjI1MDhWMjguNVpNNjAuMjMwMSAyOC41SDYwLjI1MDhWMjdINjAuMjMwMVYyOC41Wk02MC4yMDk0IDI4LjVINjAuMjMwMVYyN0g2MC4yMDk0VjI4LjVaTTYwLjE4ODcgMjguNUg2MC4yMDk0VjI3SDYwLjE4ODdWMjguNVpNNjAuMTY3OSAyOC41SDYwLjE4ODdWMjdINjAuMTY3OVYyOC41Wk02MC4xNDcxIDI4LjVINjAuMTY3OVYyN0g2MC4xNDcxVjI4LjVaTTYwLjEyNjMgMjguNUg2MC4xNDcxVjI3SDYwLjEyNjNWMjguNVpNNjAuMTA1NCAyOC41SDYwLjEyNjNWMjdINjAuMTA1NFYyOC41Wk02MC4wODQ1IDI4LjVINjAuMTA1NFYyN0g2MC4wODQ1VjI4LjVaTTYwLjA2MzUgMjguNUg2MC4wODQ1VjI3SDYwLjA2MzVWMjguNVpNNjAuMDQyNiAyOC41SDYwLjA2MzVWMjdINjAuMDQyNlYyOC41Wk02MC4wMjE2IDI4LjVINjAuMDQyNlYyN0g2MC4wMjE2VjI4LjVaTTYwLjAwMDUgMjguNUg2MC4wMjE2VjI3SDYwLjAwMDVWMjguNVpNNTkuOTc5NCAyOC41SDYwLjAwMDVWMjdINTkuOTc5NFYyOC41Wk01OS45NTgzIDI4LjVINTkuOTc5NFYyN0g1OS45NTgzVjI4LjVaTTU5LjkzNzIgMjguNUg1OS45NTgzVjI3SDU5LjkzNzJWMjguNVpNNTkuOTE2IDI4LjVINTkuOTM3MlYyN0g1OS45MTZWMjguNVpNNTkuODk0OCAyOC41SDU5LjkxNlYyN0g1OS44OTQ4VjI4LjVaTTU5Ljg3MzYgMjguNUg1OS44OTQ4VjI3SDU5Ljg3MzZWMjguNVpNNTkuODUyMyAyOC41SDU5Ljg3MzZWMjdINTkuODUyM1YyOC41Wk01OS44MzEgMjguNUg1OS44NTIzVjI3SDU5LjgzMVYyOC41Wk01OS44MDk3IDI4LjVINTkuODMxVjI3SDU5LjgwOTdWMjguNVpNNTkuNzg4MyAyOC41SDU5LjgwOTdWMjdINTkuNzg4M1YyOC41Wk01OS43NjY5IDI4LjVINTkuNzg4M1YyN0g1OS43NjY5VjI4LjVaTTU5Ljc0NTQgMjguNUg1OS43NjY5VjI3SDU5Ljc0NTRWMjguNVpNNTkuNzI0IDI4LjVINTkuNzQ1NFYyN0g1OS43MjRWMjguNVpNNTkuNzAyNSAyOC41SDU5LjcyNFYyN0g1OS43MDI1VjI4LjVaTTU5LjY4MDkgMjguNUg1OS43MDI1VjI3SDU5LjY4MDlWMjguNVpNNTkuNjU5NCAyOC41SDU5LjY4MDlWMjdINTkuNjU5NFYyOC41Wk01OS42Mzc4IDI4LjVINTkuNjU5NFYyN0g1OS42Mzc4VjI4LjVaTTU5LjYxNjEgMjguNUg1OS42Mzc4VjI3SDU5LjYxNjFWMjguNVpNNTkuNTk0NSAyOC41SDU5LjYxNjFWMjdINTkuNTk0NVYyOC41Wk01OS41NzI4IDI4LjVINTkuNTk0NVYyN0g1OS41NzI4VjI4LjVaTTU5LjU1MSAyOC41SDU5LjU3MjhWMjdINTkuNTUxVjI4LjVaTTU5LjUyOTMgMjguNUg1OS41NTFWMjdINTkuNTI5M1YyOC41Wk01OS41MDc0IDI4LjVINTkuNTI5M1YyN0g1OS41MDc0VjI4LjVaTTU5LjQ4NTYgMjguNUg1OS41MDc0VjI3SDU5LjQ4NTZWMjguNVpNNTkuNDYzNyAyOC41SDU5LjQ4NTZWMjdINTkuNDYzN1YyOC41Wk01OS40NDE4IDI4LjVINTkuNDYzN1YyN0g1OS40NDE4VjI4LjVaTTU5LjQxOTkgMjguNUg1OS40NDE4VjI3SDU5LjQxOTlWMjguNVpNNTkuMzk3OSAyOC41SDU5LjQxOTlWMjdINTkuMzk3OVYyOC41Wk01OS4zNzU5IDI4LjVINTkuMzk3OVYyN0g1OS4zNzU5VjI4LjVaTTU5LjM1MzkgMjguNUg1OS4zNzU5VjI3SDU5LjM1MzlWMjguNVpNNTkuMzMxOCAyOC41SDU5LjM1MzlWMjdINTkuMzMxOFYyOC41Wk01OS4zMDk3IDI4LjVINTkuMzMxOFYyN0g1OS4zMDk3VjI4LjVaTTU5LjI4NzYgMjguNUg1OS4zMDk3VjI3SDU5LjI4NzZWMjguNVpNNTkuMjY1NCAyOC41SDU5LjI4NzZWMjdINTkuMjY1NFYyOC41Wk01OS4yNDMyIDI4LjVINTkuMjY1NFYyN0g1OS4yNDMyVjI4LjVaTTU5LjIyMSAyOC41SDU5LjI0MzJWMjdINTkuMjIxVjI4LjVaTTU5LjE5ODcgMjguNUg1OS4yMjFWMjdINTkuMTk4N1YyOC41Wk01OS4xNzY0IDI4LjVINTkuMTk4N1YyN0g1OS4xNzY0VjI4LjVaTTU5LjE1NDEgMjguNUg1OS4xNzY0VjI3SDU5LjE1NDFWMjguNVpNNTkuMTMxNyAyOC41SDU5LjE1NDFWMjdINTkuMTMxN1YyOC41Wk01OS4xMDkzIDI4LjVINTkuMTMxN1YyN0g1OS4xMDkzVjI4LjVaTTU5LjA4NjkgMjguNUg1OS4xMDkzVjI3SDU5LjA4NjlWMjguNVpNNTkuMDY0NCAyOC41SDU5LjA4NjlWMjdINTkuMDY0NFYyOC41Wk01OS4wNDE5IDI4LjVINTkuMDY0NFYyN0g1OS4wNDE5VjI4LjVaTTU5LjAxOTQgMjguNUg1OS4wNDE5VjI3SDU5LjAxOTRWMjguNVpNNTguOTk2OCAyOC41SDU5LjAxOTRWMjdINTguOTk2OFYyOC41Wk01OC45NzQyIDI4LjVINTguOTk2OFYyN0g1OC45NzQyVjI4LjVaTTU4Ljk1MTYgMjguNUg1OC45NzQyVjI3SDU4Ljk1MTZWMjguNVpNNTguOTI4OSAyOC41SDU4Ljk1MTZWMjdINTguOTI4OVYyOC41Wk01OC45MDYzIDI4LjVINTguOTI4OVYyN0g1OC45MDYzVjI4LjVaTTU4Ljg4MzUgMjguNUg1OC45MDYzVjI3SDU4Ljg4MzVWMjguNVpNNTguODYwOCAyOC41SDU4Ljg4MzVWMjdINTguODYwOFYyOC41Wk01OC44MzggMjguNUg1OC44NjA4VjI3SDU4LjgzOFYyOC41Wk01OC44MTUxIDI4LjVINTguODM4VjI3SDU4LjgxNTFWMjguNVpNNTguNzkyMyAyOC41SDU4LjgxNTFWMjdINTguNzkyM1YyOC41Wk01OC43Njk0IDI4LjVINTguNzkyM1YyN0g1OC43Njk0VjI4LjVaTTU4Ljc0NjQgMjguNUg1OC43Njk0VjI3SDU4Ljc0NjRWMjguNVpNNTguNzIzNSAyOC41SDU4Ljc0NjRWMjdINTguNzIzNVYyOC41Wk01OC43MDA1IDI4LjVINTguNzIzNVYyN0g1OC43MDA1VjI4LjVaTTU4LjY3NzUgMjguNUg1OC43MDA1VjI3SDU4LjY3NzVWMjguNVpNNTguNjU0NCAyOC41SDU4LjY3NzVWMjdINTguNjU0NFYyOC41Wk01OC42MzEzIDI4LjVINTguNjU0NFYyN0g1OC42MzEzVjI4LjVaTTU4LjYwODIgMjguNUg1OC42MzEzVjI3SDU4LjYwODJWMjguNVpNNTguNTg1IDI4LjVINTguNjA4MlYyN0g1OC41ODVWMjguNVpNNTguNTYxOCAyOC41SDU4LjU4NVYyN0g1OC41NjE4VjI4LjVaTTU4LjUzODYgMjguNUg1OC41NjE4VjI3SDU4LjUzODZWMjguNVpNNTguNTE1MyAyOC41SDU4LjUzODZWMjdINTguNTE1M1YyOC41Wk01OC40OTIgMjguNUg1OC41MTUzVjI3SDU4LjQ5MlYyOC41Wk01OC40Njg3IDI4LjVINTguNDkyVjI3SDU4LjQ2ODdWMjguNVpNNTguNDQ1MyAyOC41SDU4LjQ2ODdWMjdINTguNDQ1M1YyOC41Wk01OC40MjE5IDI4LjVINTguNDQ1M1YyN0g1OC40MjE5VjI4LjVaTTU4LjM5ODUgMjguNUg1OC40MjE5VjI3SDU4LjM5ODVWMjguNVpNNTguMzc1MSAyOC41SDU4LjM5ODVWMjdINTguMzc1MVYyOC41Wk01OC4zNTE2IDI4LjVINTguMzc1MVYyN0g1OC4zNTE2VjI4LjVaTTU4LjMyOCAyOC41SDU4LjM1MTZWMjdINTguMzI4VjI4LjVaTTU4LjMwNDUgMjguNUg1OC4zMjhWMjdINTguMzA0NVYyOC41Wk01OC4yODA5IDI4LjVINTguMzA0NVYyN0g1OC4yODA5VjI4LjVaTTU4LjI1NzMgMjguNUg1OC4yODA5VjI3SDU4LjI1NzNWMjguNVpNNTguMjMzNiAyOC41SDU4LjI1NzNWMjdINTguMjMzNlYyOC41Wk01OC4yMDk5IDI4LjVINTguMjMzNlYyN0g1OC4yMDk5VjI4LjVaTTU4LjE4NjIgMjguNUg1OC4yMDk5VjI3SDU4LjE4NjJWMjguNVpNNTguMTYyNCAyOC41SDU4LjE4NjJWMjdINTguMTYyNFYyOC41Wk01OC4xMzg2IDI4LjVINTguMTYyNFYyN0g1OC4xMzg2VjI4LjVaTTU4LjExNDggMjguNUg1OC4xMzg2VjI3SDU4LjExNDhWMjguNVpNNTguMDkwOSAyOC41SDU4LjExNDhWMjdINTguMDkwOVYyOC41Wk01OC4wNjcxIDI4LjVINTguMDkwOVYyN0g1OC4wNjcxVjI4LjVaTTU4LjA0MzEgMjguNUg1OC4wNjcxVjI3SDU4LjA0MzFWMjguNVpNNTguMDE5MiAyOC41SDU4LjA0MzFWMjdINTguMDE5MlYyOC41Wk01Ny45OTUyIDI4LjVINTguMDE5MlYyN0g1Ny45OTUyVjI4LjVaTTU3Ljk3MTIgMjguNUg1Ny45OTUyVjI3SDU3Ljk3MTJWMjguNVpNNTcuOTQ3MSAyOC41SDU3Ljk3MTJWMjdINTcuOTQ3MVYyOC41Wk01Ny45MjMgMjguNUg1Ny45NDcxVjI3SDU3LjkyM1YyOC41Wk01Ny44OTg5IDI4LjVINTcuOTIzVjI3SDU3Ljg5ODlWMjguNVpNNTcuODc0NyAyOC41SDU3Ljg5ODlWMjdINTcuODc0N1YyOC41Wk01Ny44NTA1IDI4LjVINTcuODc0N1YyN0g1Ny44NTA1VjI4LjVaTTU3LjgyNjMgMjguNUg1Ny44NTA1VjI3SDU3LjgyNjNWMjguNVpNNTcuODAyMSAyOC41SDU3LjgyNjNWMjdINTcuODAyMVYyOC41Wk01Ny43Nzc4IDI4LjVINTcuODAyMVYyN0g1Ny43Nzc4VjI4LjVaTTU3Ljc1MzQgMjguNUg1Ny43Nzc4VjI3SDU3Ljc1MzRWMjguNVpNNTcuNzI5MSAyOC41SDU3Ljc1MzRWMjdINTcuNzI5MVYyOC41Wk01Ny43MDQ3IDI4LjVINTcuNzI5MVYyN0g1Ny43MDQ3VjI4LjVaTTU3LjY4MDMgMjguNUg1Ny43MDQ3VjI3SDU3LjY4MDNWMjguNVpNNTcuNjU1OCAyOC41SDU3LjY4MDNWMjdINTcuNjU1OFYyOC41Wk01Ny42MzEzIDI4LjVINTcuNjU1OFYyN0g1Ny42MzEzVjI4LjVaTTU3LjYwNjggMjguNUg1Ny42MzEzVjI3SDU3LjYwNjhWMjguNVpNNTcuNTgyMyAyOC41SDU3LjYwNjhWMjdINTcuNTgyM1YyOC41Wk01Ny41NTc3IDI4LjVINTcuNTgyM1YyN0g1Ny41NTc3VjI4LjVaTTU3LjUzMzEgMjguNUg1Ny41NTc3VjI3SDU3LjUzMzFWMjguNVpNNTcuNTA4NCAyOC41SDU3LjUzMzFWMjdINTcuNTA4NFYyOC41Wk01Ny40ODM3IDI4LjVINTcuNTA4NFYyN0g1Ny40ODM3VjI4LjVaTTU3LjQ1OSAyOC41SDU3LjQ4MzdWMjdINTcuNDU5VjI4LjVaTTU3LjQzNDIgMjguNUg1Ny40NTlWMjdINTcuNDM0MlYyOC41Wk01Ny40MDk1IDI4LjVINTcuNDM0MlYyN0g1Ny40MDk1VjI4LjVaTTU3LjM4NDYgMjguNUg1Ny40MDk1VjI3SDU3LjM4NDZWMjguNVpNNTcuMzU5OCAyOC41SDU3LjM4NDZWMjdINTcuMzU5OFYyOC41Wk01Ny4zMzQ5IDI4LjVINTcuMzU5OFYyN0g1Ny4zMzQ5VjI4LjVaTTU3LjMxIDI4LjVINTcuMzM0OVYyN0g1Ny4zMVYyOC41Wk01Ny4yODUgMjguNUg1Ny4zMVYyN0g1Ny4yODVWMjguNVpNNTcuMjYgMjguNUg1Ny4yODVWMjdINTcuMjZWMjguNVpNNTcuMjM1IDI4LjVINTcuMjZWMjdINTcuMjM1VjI4LjVaTTU3LjIxIDI4LjVINTcuMjM1VjI3SDU3LjIxVjI4LjVaTTU3LjE4NDkgMjguNUg1Ny4yMVYyN0g1Ny4xODQ5VjI4LjVaTTU3LjE1OTggMjguNUg1Ny4xODQ5VjI3SDU3LjE1OThWMjguNVpNNTcuMTM0NiAyOC41SDU3LjE1OThWMjdINTcuMTM0NlYyOC41Wk01Ny4xMDk0IDI4LjVINTcuMTM0NlYyN0g1Ny4xMDk0VjI4LjVaTTU3LjA4NDIgMjguNUg1Ny4xMDk0VjI3SDU3LjA4NDJWMjguNVpNNTcuMDU5IDI4LjVINTcuMDg0MlYyN0g1Ny4wNTlWMjguNVpNNTcuMDMzNyAyOC41SDU3LjA1OVYyN0g1Ny4wMzM3VjI4LjVaTTU3LjAwODQgMjguNUg1Ny4wMzM3VjI3SDU3LjAwODRWMjguNVpNNTYuOTgzIDI4LjVINTcuMDA4NFYyN0g1Ni45ODNWMjguNVpNNTYuOTU3NiAyOC41SDU2Ljk4M1YyN0g1Ni45NTc2VjI4LjVaTTU2LjkzMjIgMjguNUg1Ni45NTc2VjI3SDU2LjkzMjJWMjguNVpNNTYuOTA2OCAyOC41SDU2LjkzMjJWMjdINTYuOTA2OFYyOC41Wk01Ni44ODEzIDI4LjVINTYuOTA2OFYyN0g1Ni44ODEzVjI4LjVaTTU2Ljg1NTggMjguNUg1Ni44ODEzVjI3SDU2Ljg1NThWMjguNVpNNTYuODMwMiAyOC41SDU2Ljg1NThWMjdINTYuODMwMlYyOC41Wk01Ni44MDQ2IDI4LjVINTYuODMwMlYyN0g1Ni44MDQ2VjI4LjVaTTU2Ljc3OSAyOC41SDU2LjgwNDZWMjdINTYuNzc5VjI4LjVaTTU2Ljc1MzQgMjguNUg1Ni43NzlWMjdINTYuNzUzNFYyOC41Wk01Ni43Mjc3IDI4LjVINTYuNzUzNFYyN0g1Ni43Mjc3VjI4LjVaTTU2LjcwMiAyOC41SDU2LjcyNzdWMjdINTYuNzAyVjI4LjVaTTU2LjY3NjIgMjguNUg1Ni43MDJWMjdINTYuNjc2MlYyOC41Wk01Ni42NTA0IDI4LjVINTYuNjc2MlYyN0g1Ni42NTA0VjI4LjVaTTU2LjYyNDYgMjguNUg1Ni42NTA0VjI3SDU2LjYyNDZWMjguNVpNNTYuNTk4OCAyOC41SDU2LjYyNDZWMjdINTYuNTk4OFYyOC41Wk01Ni41NzI5IDI4LjVINTYuNTk4OFYyN0g1Ni41NzI5VjI4LjVaTTU2LjU0NyAyOC41SDU2LjU3MjlWMjdINTYuNTQ3VjI4LjVaTTU2LjUyMSAyOC41SDU2LjU0N1YyN0g1Ni41MjFWMjguNVpNNTYuNDk1IDI4LjVINTYuNTIxVjI3SDU2LjQ5NVYyOC41Wk01Ni40NjkgMjguNUg1Ni40OTVWMjdINTYuNDY5VjI4LjVaTTU2LjQ0MyAyOC41SDU2LjQ2OVYyN0g1Ni40NDNWMjguNVpNNTYuNDE2OSAyOC41SDU2LjQ0M1YyN0g1Ni40MTY5VjI4LjVaTTU2LjM5MDggMjguNUg1Ni40MTY5VjI3SDU2LjM5MDhWMjguNVpNNTYuMzY0NiAyOC41SDU2LjM5MDhWMjdINTYuMzY0NlYyOC41Wk01Ni4zMzg1IDI4LjVINTYuMzY0NlYyN0g1Ni4zMzg1VjI4LjVaTTU2LjMxMjMgMjguNUg1Ni4zMzg1VjI3SDU2LjMxMjNWMjguNVpNNTYuMjg2IDI4LjVINTYuMzEyM1YyN0g1Ni4yODZWMjguNVpNNTYuMjU5NyAyOC41SDU2LjI4NlYyN0g1Ni4yNTk3VjI4LjVaTTU2LjIzMzQgMjguNUg1Ni4yNTk3VjI3SDU2LjIzMzRWMjguNVpNNTYuMjA3MSAyOC41SDU2LjIzMzRWMjdINTYuMjA3MVYyOC41Wk01Ni4xODA3IDI4LjVINTYuMjA3MVYyN0g1Ni4xODA3VjI4LjVaTTU2LjE1NDMgMjguNUg1Ni4xODA3VjI3SDU2LjE1NDNWMjguNVpNNTYuMTI3OCAyOC41SDU2LjE1NDNWMjdINTYuMTI3OFYyOC41Wk01Ni4xMDE0IDI4LjVINTYuMTI3OFYyN0g1Ni4xMDE0VjI4LjVaTTU2LjA3NDkgMjguNUg1Ni4xMDE0VjI3SDU2LjA3NDlWMjguNVpNNTYuMDQ4MyAyOC41SDU2LjA3NDlWMjdINTYuMDQ4M1YyOC41Wk01Ni4wMjE3IDI4LjVINTYuMDQ4M1YyN0g1Ni4wMjE3VjI4LjVaTTU1Ljk5NTEgMjguNUg1Ni4wMjE3VjI3SDU1Ljk5NTFWMjguNVpNNTUuOTY4NSAyOC41SDU1Ljk5NTFWMjdINTUuOTY4NVYyOC41Wk01NS45NDE4IDI4LjVINTUuOTY4NVYyN0g1NS45NDE4VjI4LjVaTTU1LjkxNTEgMjguNUg1NS45NDE4VjI3SDU1LjkxNTFWMjguNVpNNTUuODg4MyAyOC41SDU1LjkxNTFWMjdINTUuODg4M1YyOC41Wk01NS44NjE2IDI4LjVINTUuODg4M1YyN0g1NS44NjE2VjI4LjVaTTU1LjgzNDggMjguNUg1NS44NjE2VjI3SDU1LjgzNDhWMjguNVpNNTUuODA3OSAyOC41SDU1LjgzNDhWMjdINTUuODA3OVYyOC41Wk01NS43ODEgMjguNUg1NS44MDc5VjI3SDU1Ljc4MVYyOC41Wk01NS43NTQxIDI4LjVINTUuNzgxVjI3SDU1Ljc1NDFWMjguNVpNNTUuNzI3MiAyOC41SDU1Ljc1NDFWMjdINTUuNzI3MlYyOC41Wk01NS43MDAyIDI4LjVINTUuNzI3MlYyN0g1NS43MDAyVjI4LjVaTTU1LjY3MzIgMjguNUg1NS43MDAyVjI3SDU1LjY3MzJWMjguNVpNNTUuNjQ2MiAyOC41SDU1LjY3MzJWMjdINTUuNjQ2MlYyOC41Wk01NS42MTkxIDI4LjVINTUuNjQ2MlYyN0g1NS42MTkxVjI4LjVaTTU1LjU5MiAyOC41SDU1LjYxOTFWMjdINTUuNTkyVjI4LjVaTTU1LjU2NDggMjguNUg1NS41OTJWMjdINTUuNTY0OFYyOC41Wk01NS41Mzc3IDI4LjVINTUuNTY0OFYyN0g1NS41Mzc3VjI4LjVaTTU1LjUxMDUgMjguNUg1NS41Mzc3VjI3SDU1LjUxMDVWMjguNVpNNTUuNDgzMiAyOC41SDU1LjUxMDVWMjdINTUuNDgzMlYyOC41Wk01NS40NTU5IDI4LjVINTUuNDgzMlYyN0g1NS40NTU5VjI4LjVaTTU1LjQyODYgMjguNUg1NS40NTU5VjI3SDU1LjQyODZWMjguNVpNNTUuNDAxMyAyOC41SDU1LjQyODZWMjdINTUuNDAxM1YyOC41Wk01NS4zNzM5IDI4LjVINTUuNDAxM1YyN0g1NS4zNzM5VjI4LjVaTTU1LjM0NjUgMjguNUg1NS4zNzM5VjI3SDU1LjM0NjVWMjguNVpNNTUuMzE5MSAyOC41SDU1LjM0NjVWMjdINTUuMzE5MVYyOC41Wk01NS4yOTE2IDI4LjVINTUuMzE5MVYyN0g1NS4yOTE2VjI4LjVaTTU1LjI2NDEgMjguNUg1NS4yOTE2VjI3SDU1LjI2NDFWMjguNVpNNTUuMjM2NiAyOC41SDU1LjI2NDFWMjdINTUuMjM2NlYyOC41Wk01NS4yMDkgMjguNUg1NS4yMzY2VjI3SDU1LjIwOVYyOC41Wk01NS4xODE0IDI4LjVINTUuMjA5VjI3SDU1LjE4MTRWMjguNVpNNTUuMTUzNyAyOC41SDU1LjE4MTRWMjdINTUuMTUzN1YyOC41Wk01NS4xMjYxIDI4LjVINTUuMTUzN1YyN0g1NS4xMjYxVjI4LjVaTTU1LjA5ODQgMjguNUg1NS4xMjYxVjI3SDU1LjA5ODRWMjguNVpNNTUuMDcwNiAyOC41SDU1LjA5ODRWMjdINTUuMDcwNlYyOC41Wk01NS4wNDI5IDI4LjVINTUuMDcwNlYyN0g1NS4wNDI5VjI4LjVaTTU1LjAxNTEgMjguNUg1NS4wNDI5VjI3SDU1LjAxNTFWMjguNVpNNTQuOTg3MiAyOC41SDU1LjAxNTFWMjdINTQuOTg3MlYyOC41Wk01NC45NTk0IDI4LjVINTQuOTg3MlYyN0g1NC45NTk0VjI4LjVaTTU0LjkzMTQgMjguNUg1NC45NTk0VjI3SDU0LjkzMTRWMjguNVpNNTQuOTAzNSAyOC41SDU0LjkzMTRWMjdINTQuOTAzNVYyOC41Wk01NC44NzU1IDI4LjVINTQuOTAzNVYyN0g1NC44NzU1VjI4LjVaTTU0Ljg0NzUgMjguNUg1NC44NzU1VjI3SDU0Ljg0NzVWMjguNVpNNTQuODE5NSAyOC41SDU0Ljg0NzVWMjdINTQuODE5NVYyOC41Wk01NC43OTE0IDI4LjVINTQuODE5NVYyN0g1NC43OTE0VjI4LjVaTTU0Ljc2MzMgMjguNUg1NC43OTE0VjI3SDU0Ljc2MzNWMjguNVpNNTQuNzM1MiAyOC41SDU0Ljc2MzNWMjdINTQuNzM1MlYyOC41Wk01NC43MDcgMjguNUg1NC43MzUyVjI3SDU0LjcwN1YyOC41Wk01NC42Nzg4IDI4LjVINTQuNzA3VjI3SDU0LjY3ODhWMjguNVpNNTQuNjUwNiAyOC41SDU0LjY3ODhWMjdINTQuNjUwNlYyOC41Wk01NC42MjIzIDI4LjVINTQuNjUwNlYyN0g1NC42MjIzVjI4LjVaTTU0LjU5NCAyOC41SDU0LjYyMjNWMjdINTQuNTk0VjI4LjVaTTU0LjU2NTcgMjguNUg1NC41OTRWMjdINTQuNTY1N1YyOC41Wk01NC41MzczIDI4LjVINTQuNTY1N1YyN0g1NC41MzczVjI4LjVaTTU0LjUwODkgMjguNUg1NC41MzczVjI3SDU0LjUwODlWMjguNVpNNTQuNDgwNSAyOC41SDU0LjUwODlWMjdINTQuNDgwNVYyOC41Wk01NC40NTIgMjguNUg1NC40ODA1VjI3SDU0LjQ1MlYyOC41Wk01NC40MjM1IDI4LjVINTQuNDUyVjI3SDU0LjQyMzVWMjguNVpNNTQuMzk1IDI4LjVINTQuNDIzNVYyN0g1NC4zOTVWMjguNVpNNTQuMzY2NCAyOC41SDU0LjM5NVYyN0g1NC4zNjY0VjI4LjVaTTU0LjMzNzggMjguNUg1NC4zNjY0VjI3SDU0LjMzNzhWMjguNVpNNTQuMzA5MiAyOC41SDU0LjMzNzhWMjdINTQuMzA5MlYyOC41Wk01NC4yODA1IDI4LjVINTQuMzA5MlYyN0g1NC4yODA1VjI4LjVaTTU0LjI1MTggMjguNUg1NC4yODA1VjI3SDU0LjI1MThWMjguNVpNNTQuMjIzMSAyOC41SDU0LjI1MThWMjdINTQuMjIzMVYyOC41Wk01NC4xOTQzIDI4LjVINTQuMjIzMVYyN0g1NC4xOTQzVjI4LjVaTTU0LjE2NTUgMjguNUg1NC4xOTQzVjI3SDU0LjE2NTVWMjguNVpNNTQuMTM2NyAyOC41SDU0LjE2NTVWMjdINTQuMTM2N1YyOC41Wk01NC4xMDc4IDI4LjVINTQuMTM2N1YyN0g1NC4xMDc4VjI4LjVaTTU0LjA3ODkgMjguNUg1NC4xMDc4VjI3SDU0LjA3ODlWMjguNVpNNTQuMDUgMjguNUg1NC4wNzg5VjI3SDU0LjA1VjI4LjVaTTU0LjAyMSAyOC41SDU0LjA1VjI3SDU0LjAyMVYyOC41Wk01My45OTIgMjguNUg1NC4wMjFWMjdINTMuOTkyVjI4LjVaTTUzLjk2MyAyOC41SDUzLjk5MlYyN0g1My45NjNWMjguNVpNNTMuOTMzOSAyOC41SDUzLjk2M1YyN0g1My45MzM5VjI4LjVaTTUzLjkwNDggMjguNUg1My45MzM5VjI3SDUzLjkwNDhWMjguNVpNNTMuODc1NyAyOC41SDUzLjkwNDhWMjdINTMuODc1N1YyOC41Wk01My44NDY1IDI4LjVINTMuODc1N1YyN0g1My44NDY1VjI4LjVaTTUzLjgxNzMgMjguNUg1My44NDY1VjI3SDUzLjgxNzNWMjguNVpNNTMuNzg4MSAyOC41SDUzLjgxNzNWMjdINTMuNzg4MVYyOC41Wk01My43NTg4IDI4LjVINTMuNzg4MVYyN0g1My43NTg4VjI4LjVaTTUzLjcyOTYgMjguNUg1My43NTg4VjI3SDUzLjcyOTZWMjguNVpNNTMuNzAwMiAyOC41SDUzLjcyOTZWMjdINTMuNzAwMlYyOC41Wk01My42NzA5IDI4LjVINTMuNzAwMlYyN0g1My42NzA5VjI4LjVaTTUzLjY0MTUgMjguNUg1My42NzA5VjI3SDUzLjY0MTVWMjguNVpNNTMuNjEyIDI4LjVINTMuNjQxNVYyN0g1My42MTJWMjguNVpNNTMuNTgyNiAyOC41SDUzLjYxMlYyN0g1My41ODI2VjI4LjVaTTUzLjU1MzEgMjguNUg1My41ODI2VjI3SDUzLjU1MzFWMjguNVpNNTMuNTIzNiAyOC41SDUzLjU1MzFWMjdINTMuNTIzNlYyOC41Wk01My40OTQgMjguNUg1My41MjM2VjI3SDUzLjQ5NFYyOC41Wk01My40NjQ0IDI4LjVINTMuNDk0VjI3SDUzLjQ2NDRWMjguNVpNNTMuNDM0OCAyOC41SDUzLjQ2NDRWMjdINTMuNDM0OFYyOC41Wk01My40MDUxIDI4LjVINTMuNDM0OFYyN0g1My40MDUxVjI4LjVaTTUzLjM3NTQgMjguNUg1My40MDUxVjI3SDUzLjM3NTRWMjguNVpNNTMuMzQ1NyAyOC41SDUzLjM3NTRWMjdINTMuMzQ1N1YyOC41Wk01My4zMTU5IDI4LjVINTMuMzQ1N1YyN0g1My4zMTU5VjI4LjVaTTUzLjI4NjEgMjguNUg1My4zMTU5VjI3SDUzLjI4NjFWMjguNVpNNTMuMjU2MyAyOC41SDUzLjI4NjFWMjdINTMuMjU2M1YyOC41Wk01My4yMjY0IDI4LjVINTMuMjU2M1YyN0g1My4yMjY0VjI4LjVaTTUzLjE5NjUgMjguNUg1My4yMjY0VjI3SDUzLjE5NjVWMjguNVpNNTMuMTY2NiAyOC41SDUzLjE5NjVWMjdINTMuMTY2NlYyOC41Wk01My4xMzY3IDI4LjVINTMuMTY2NlYyN0g1My4xMzY3VjI4LjVaTTUzLjEwNjcgMjguNUg1My4xMzY3VjI3SDUzLjEwNjdWMjguNVpNNTMuMDc2NiAyOC41SDUzLjEwNjdWMjdINTMuMDc2NlYyOC41Wk01My4wNDY2IDI4LjVINTMuMDc2NlYyN0g1My4wNDY2VjI4LjVaTTUzLjAxNjUgMjguNUg1My4wNDY2VjI3SDUzLjAxNjVWMjguNVpNNTIuOTg2NCAyOC41SDUzLjAxNjVWMjdINTIuOTg2NFYyOC41Wk01Mi45NTYyIDI4LjVINTIuOTg2NFYyN0g1Mi45NTYyVjI4LjVaTTUyLjkyNiAyOC41SDUyLjk1NjJWMjdINTIuOTI2VjI4LjVaTTUyLjg5NTggMjguNUg1Mi45MjZWMjdINTIuODk1OFYyOC41Wk01Mi44NjU1IDI4LjVINTIuODk1OFYyN0g1Mi44NjU1VjI4LjVaTTUyLjgzNTIgMjguNUg1Mi44NjU1VjI3SDUyLjgzNTJWMjguNVpNNTIuODA0OSAyOC41SDUyLjgzNTJWMjdINTIuODA0OVYyOC41Wk01Mi43NzQ2IDI4LjVINTIuODA0OVYyN0g1Mi43NzQ2VjI4LjVaTTUyLjc0NDIgMjguNUg1Mi43NzQ2VjI3SDUyLjc0NDJWMjguNVpNNTIuNzEzNyAyOC41SDUyLjc0NDJWMjdINTIuNzEzN1YyOC41Wk01Mi42ODMzIDI4LjVINTIuNzEzN1YyN0g1Mi42ODMzVjI4LjVaTTUyLjY1MjggMjguNUg1Mi42ODMzVjI3SDUyLjY1MjhWMjguNVpNNTIuNjIyMyAyOC41SDUyLjY1MjhWMjdINTIuNjIyM1YyOC41Wk01Mi41OTE3IDI4LjVINTIuNjIyM1YyN0g1Mi41OTE3VjI4LjVaTTUyLjU2MTEgMjguNUg1Mi41OTE3VjI3SDUyLjU2MTFWMjguNVpNNTIuNTMwNSAyOC41SDUyLjU2MTFWMjdINTIuNTMwNVYyOC41Wk01Mi40OTk5IDI4LjVINTIuNTMwNVYyN0g1Mi40OTk5VjI4LjVaTTUyLjQ2OTIgMjguNUg1Mi40OTk5VjI3SDUyLjQ2OTJWMjguNVpNNTIuNDM4NCAyOC41SDUyLjQ2OTJWMjdINTIuNDM4NFYyOC41Wk01Mi40MDc3IDI4LjVINTIuNDM4NFYyN0g1Mi40MDc3VjI4LjVaTTUyLjM3NjkgMjguNUg1Mi40MDc3VjI3SDUyLjM3NjlWMjguNVpNNTIuMzQ2MSAyOC41SDUyLjM3NjlWMjdINTIuMzQ2MVYyOC41Wk01Mi4zMTUyIDI4LjVINTIuMzQ2MVYyN0g1Mi4zMTUyVjI4LjVaTTUyLjI4NDMgMjguNUg1Mi4zMTUyVjI3SDUyLjI4NDNWMjguNVpNNTIuMjUzNCAyOC41SDUyLjI4NDNWMjdINTIuMjUzNFYyOC41Wk01Mi4yMjI1IDI4LjVINTIuMjUzNFYyN0g1Mi4yMjI1VjI4LjVaTTUyLjE5MTUgMjguNUg1Mi4yMjI1VjI3SDUyLjE5MTVWMjguNVpNNTIuMTYwNCAyOC41SDUyLjE5MTVWMjdINTIuMTYwNFYyOC41Wk01Mi4xMjk0IDI4LjVINTIuMTYwNFYyN0g1Mi4xMjk0VjI4LjVaTTUyLjA5ODMgMjguNUg1Mi4xMjk0VjI3SDUyLjA5ODNWMjguNVpNNTIuMDY3MiAyOC41SDUyLjA5ODNWMjdINTIuMDY3MlYyOC41Wk01Mi4wMzYgMjguNUg1Mi4wNjcyVjI3SDUyLjAzNlYyOC41Wk01Mi4wMDQ4IDI4LjVINTIuMDM2VjI3SDUyLjAwNDhWMjguNVpNNTEuOTczNiAyOC41SDUyLjAwNDhWMjdINTEuOTczNlYyOC41Wk01MS45NDI0IDI4LjVINTEuOTczNlYyN0g1MS45NDI0VjI4LjVaTTUxLjkxMTEgMjguNUg1MS45NDI0VjI3SDUxLjkxMTFWMjguNVpNNTEuODc5OCAyOC41SDUxLjkxMTFWMjdINTEuODc5OFYyOC41Wk01MS44NDg0IDI4LjVINTEuODc5OFYyN0g1MS44NDg0VjI4LjVaTTUxLjgxNyAyOC41SDUxLjg0ODRWMjdINTEuODE3VjI4LjVaTTUxLjc4NTYgMjguNUg1MS44MTdWMjdINTEuNzg1NlYyOC41Wk01MS43NTQyIDI4LjVINTEuNzg1NlYyN0g1MS43NTQyVjI4LjVaTTUxLjcyMjcgMjguNUg1MS43NTQyVjI3SDUxLjcyMjdWMjguNVpNNTEuNjkxMiAyOC41SDUxLjcyMjdWMjdINTEuNjkxMlYyOC41Wk01MS42NTk2IDI4LjVINTEuNjkxMlYyN0g1MS42NTk2VjI4LjVaTTUxLjYyOCAyOC41SDUxLjY1OTZWMjdINTEuNjI4VjI4LjVaTTUxLjU5NjQgMjguNUg1MS42MjhWMjdINTEuNTk2NFYyOC41Wk01MS41NjQ4IDI4LjVINTEuNTk2NFYyN0g1MS41NjQ4VjI4LjVaTTUxLjUzMzEgMjguNUg1MS41NjQ4VjI3SDUxLjUzMzFWMjguNVpNNTEuNTAxNCAyOC41SDUxLjUzMzFWMjdINTEuNTAxNFYyOC41Wk01MS40Njk2IDI4LjVINTEuNTAxNFYyN0g1MS40Njk2VjI4LjVaTTUxLjQzNzggMjguNUg1MS40Njk2VjI3SDUxLjQzNzhWMjguNVpNNTEuNDA2IDI4LjVINTEuNDM3OFYyN0g1MS40MDZWMjguNVpNNTEuMzc0MiAyOC41SDUxLjQwNlYyN0g1MS4zNzQyVjI4LjVaTTUxLjM0MjMgMjguNUg1MS4zNzQyVjI3SDUxLjM0MjNWMjguNVpNNTEuMzEwNCAyOC41SDUxLjM0MjNWMjdINTEuMzEwNFYyOC41Wk01MS4yNzg0IDI4LjVINTEuMzEwNFYyN0g1MS4yNzg0VjI4LjVaTTUxLjI0NjQgMjguNUg1MS4yNzg0VjI3SDUxLjI0NjRWMjguNVpNNTEuMjE0NCAyOC41SDUxLjI0NjRWMjdINTEuMjE0NFYyOC41Wk01MS4xODI0IDI4LjVINTEuMjE0NFYyN0g1MS4xODI0VjI4LjVaTTUxLjE1MDMgMjguNUg1MS4xODI0VjI3SDUxLjE1MDNWMjguNVpNNTEuMTE4MiAyOC41SDUxLjE1MDNWMjdINTEuMTE4MlYyOC41Wk01MS4wODYgMjguNUg1MS4xMTgyVjI3SDUxLjA4NlYyOC41Wk01MS4wNTM4IDI4LjVINTEuMDg2VjI3SDUxLjA1MzhWMjguNVpNNTEuMDIxNiAyOC41SDUxLjA1MzhWMjdINTEuMDIxNlYyOC41Wk01MC45ODk0IDI4LjVINTEuMDIxNlYyN0g1MC45ODk0VjI4LjVaTTUwLjk1NzEgMjguNUg1MC45ODk0VjI3SDUwLjk1NzFWMjguNVpNNTAuOTI0OCAyOC41SDUwLjk1NzFWMjdINTAuOTI0OFYyOC41Wk01MC44OTI0IDI4LjVINTAuOTI0OFYyN0g1MC44OTI0VjI4LjVaTTUwLjg2MDEgMjguNUg1MC44OTI0VjI3SDUwLjg2MDFWMjguNVpNNTAuODI3NiAyOC41SDUwLjg2MDFWMjdINTAuODI3NlYyOC41Wk01MC43OTUyIDI4LjVINTAuODI3NlYyN0g1MC43OTUyVjI4LjVaTTUwLjc2MjcgMjguNUg1MC43OTUyVjI3SDUwLjc2MjdWMjguNVpNNTAuNzMwMiAyOC41SDUwLjc2MjdWMjdINTAuNzMwMlYyOC41Wk01MC42OTc3IDI4LjVINTAuNzMwMlYyN0g1MC42OTc3VjI4LjVaTTUwLjY2NTEgMjguNUg1MC42OTc3VjI3SDUwLjY2NTFWMjguNVpNNTAuNjMyNSAyOC41SDUwLjY2NTFWMjdINTAuNjMyNVYyOC41Wk01MC41OTk4IDI4LjVINTAuNjMyNVYyN0g1MC41OTk4VjI4LjVaTTUwLjU2NzEgMjguNUg1MC41OTk4VjI3SDUwLjU2NzFWMjguNVpNNTAuNTM0NCAyOC41SDUwLjU2NzFWMjdINTAuNTM0NFYyOC41Wk01MC41MDE3IDI4LjVINTAuNTM0NFYyN0g1MC41MDE3VjI4LjVaTTUwLjQ2ODkgMjguNUg1MC41MDE3VjI3SDUwLjQ2ODlWMjguNVpNNTAuNDM2MSAyOC41SDUwLjQ2ODlWMjdINTAuNDM2MVYyOC41Wk01MC40MDMyIDI4LjVINTAuNDM2MVYyN0g1MC40MDMyVjI4LjVaTTUwLjM3MDQgMjguNUg1MC40MDMyVjI3SDUwLjM3MDRWMjguNVpNNTAuMzM3NSAyOC41SDUwLjM3MDRWMjdINTAuMzM3NVYyOC41Wk01MC4zMDQ1IDI4LjVINTAuMzM3NVYyN0g1MC4zMDQ1VjI4LjVaTTUwLjI3MTUgMjguNUg1MC4zMDQ1VjI3SDUwLjI3MTVWMjguNVpNNTAuMjM4NSAyOC41SDUwLjI3MTVWMjdINTAuMjM4NVYyOC41Wk01MC4yMDU1IDI4LjVINTAuMjM4NVYyN0g1MC4yMDU1VjI4LjVaTTUwLjE3MjQgMjguNUg1MC4yMDU1VjI3SDUwLjE3MjRWMjguNVpNNTAuMTM5MyAyOC41SDUwLjE3MjRWMjdINTAuMTM5M1YyOC41Wk01MC4xMDYyIDI4LjVINTAuMTM5M1YyN0g1MC4xMDYyVjI4LjVaTTUwLjA3MyAyOC41SDUwLjEwNjJWMjdINTAuMDczVjI4LjVaTTUwLjAzOTggMjguNUg1MC4wNzNWMjdINTAuMDM5OFYyOC41Wk01MC4wMDY1IDI4LjVINTAuMDM5OFYyN0g1MC4wMDY1VjI4LjVaTTQ5Ljk3MzMgMjguNUg1MC4wMDY1VjI3SDQ5Ljk3MzNWMjguNVpNNDkuOTM5OSAyOC41SDQ5Ljk3MzNWMjdINDkuOTM5OVYyOC41Wk00OS45MDY2IDI4LjVINDkuOTM5OVYyN0g0OS45MDY2VjI4LjVaTTQ5Ljg3MzIgMjguNUg0OS45MDY2VjI3SDQ5Ljg3MzJWMjguNVpNNDkuODM5OCAyOC41SDQ5Ljg3MzJWMjdINDkuODM5OFYyOC41Wk00OS44MDY0IDI4LjVINDkuODM5OFYyN0g0OS44MDY0VjI4LjVaTTQ5Ljc3MjkgMjguNUg0OS44MDY0VjI3SDQ5Ljc3MjlWMjguNVpNNDkuNzM5NCAyOC41SDQ5Ljc3MjlWMjdINDkuNzM5NFYyOC41Wk00OS43MDU5IDI4LjVINDkuNzM5NFYyN0g0OS43MDU5VjI4LjVaTTQ5LjY3MjMgMjguNUg0OS43MDU5VjI3SDQ5LjY3MjNWMjguNVpNNDkuNjM4NyAyOC41SDQ5LjY3MjNWMjdINDkuNjM4N1YyOC41Wk00OS42MDUgMjguNUg0OS42Mzg3VjI3SDQ5LjYwNVYyOC41Wk00OS41NzE0IDI4LjVINDkuNjA1VjI3SDQ5LjU3MTRWMjguNVpNNDkuNTM3NyAyOC41SDQ5LjU3MTRWMjdINDkuNTM3N1YyOC41Wk00OS41MDM5IDI4LjVINDkuNTM3N1YyN0g0OS41MDM5VjI4LjVaTTQ5LjQ3MDEgMjguNUg0OS41MDM5VjI3SDQ5LjQ3MDFWMjguNVpNNDkuNDM2MyAyOC41SDQ5LjQ3MDFWMjdINDkuNDM2M1YyOC41Wk00OS40MDI1IDI4LjVINDkuNDM2M1YyN0g0OS40MDI1VjI4LjVaTTQ5LjM2ODYgMjguNUg0OS40MDI1VjI3SDQ5LjM2ODZWMjguNVpNNDkuMzM0NyAyOC41SDQ5LjM2ODZWMjdINDkuMzM0N1YyOC41Wk00OS4zMDA4IDI4LjVINDkuMzM0N1YyN0g0OS4zMDA4VjI4LjVaTTY2LjU3NTcgMjguNUg2Ni41ODU4VjI3SDY2LjU3NTdWMjguNVpNNjUuODI1NyAyNi4yNVYyNy43NUg2Ny4zMjU3VjI2LjI1SDY1LjgyNTdaTTY2LjU4NTggMjUuNUg2Ni41NzU3VjI3SDY2LjU4NThWMjUuNVpNNjYuNTk2IDI1LjVINjYuNTg1OFYyN0g2Ni41OTZWMjUuNVpNNjYuNjA2MyAyNS41SDY2LjU5NlYyN0g2Ni42MDYzVjI1LjVaTTY2LjYxNjUgMjUuNUg2Ni42MDYzVjI3SDY2LjYxNjVWMjUuNVpNNjYuNjI2NyAyNS41SDY2LjYxNjVWMjdINjYuNjI2N1YyNS41Wk02Ni42MzcgMjUuNUg2Ni42MjY3VjI3SDY2LjYzN1YyNS41Wk02Ni42NDcyIDI1LjVINjYuNjM3VjI3SDY2LjY0NzJWMjUuNVpNNjYuNjU3NSAyNS41SDY2LjY0NzJWMjdINjYuNjU3NVYyNS41Wk02Ni42Njc4IDI1LjVINjYuNjU3NVYyN0g2Ni42Njc4VjI1LjVaTTY2LjY3OCAyNS41SDY2LjY2NzhWMjdINjYuNjc4VjI1LjVaTTY2LjY4ODMgMjUuNUg2Ni42NzhWMjdINjYuNjg4M1YyNS41Wk02Ni42OTg3IDI1LjVINjYuNjg4M1YyN0g2Ni42OTg3VjI1LjVaTTY2LjcwOSAyNS41SDY2LjY5ODdWMjdINjYuNzA5VjI1LjVaTTY2LjcxOTMgMjUuNUg2Ni43MDlWMjdINjYuNzE5M1YyNS41Wk02Ni43Mjk3IDI1LjVINjYuNzE5M1YyN0g2Ni43Mjk3VjI1LjVaTTY2Ljc0IDI1LjVINjYuNzI5N1YyN0g2Ni43NFYyNS41Wk02Ni43NTA0IDI1LjVINjYuNzRWMjdINjYuNzUwNFYyNS41Wk02Ni43NjA4IDI1LjVINjYuNzUwNFYyN0g2Ni43NjA4VjI1LjVaTTY2Ljc3MTIgMjUuNUg2Ni43NjA4VjI3SDY2Ljc3MTJWMjUuNVpNNjYuNzgxNiAyNS41SDY2Ljc3MTJWMjdINjYuNzgxNlYyNS41Wk02Ni43OTIgMjUuNUg2Ni43ODE2VjI3SDY2Ljc5MlYyNS41Wk02Ni44MDI0IDI1LjVINjYuNzkyVjI3SDY2LjgwMjRWMjUuNVpNNjYuODEyOSAyNS41SDY2LjgwMjRWMjdINjYuODEyOVYyNS41Wk02Ni44MjMzIDI1LjVINjYuODEyOVYyN0g2Ni44MjMzVjI1LjVaTTY2LjgzMzggMjUuNUg2Ni44MjMzVjI3SDY2LjgzMzhWMjUuNVpNNjYuODQ0MiAyNS41SDY2LjgzMzhWMjdINjYuODQ0MlYyNS41Wk02Ni44NTQ3IDI1LjVINjYuODQ0MlYyN0g2Ni44NTQ3VjI1LjVaTTY2Ljg2NTIgMjUuNUg2Ni44NTQ3VjI3SDY2Ljg2NTJWMjUuNVpNNjYuODc1NyAyNS41SDY2Ljg2NTJWMjdINjYuODc1N1YyNS41Wk02Ni44ODYzIDI1LjVINjYuODc1N1YyN0g2Ni44ODYzVjI1LjVaTTY2Ljg5NjggMjUuNUg2Ni44ODYzVjI3SDY2Ljg5NjhWMjUuNVpNNjYuOTA3MyAyNS41SDY2Ljg5NjhWMjdINjYuOTA3M1YyNS41Wk02Ni45MTc5IDI1LjVINjYuOTA3M1YyN0g2Ni45MTc5VjI1LjVaTTY2LjkyODQgMjUuNUg2Ni45MTc5VjI3SDY2LjkyODRWMjUuNVpNNjYuOTM5IDI1LjVINjYuOTI4NFYyN0g2Ni45MzlWMjUuNVpNNjYuOTQ5NiAyNS41SDY2LjkzOVYyN0g2Ni45NDk2VjI1LjVaTTY2Ljk2MDIgMjUuNUg2Ni45NDk2VjI3SDY2Ljk2MDJWMjUuNVpNNjYuOTcwOCAyNS41SDY2Ljk2MDJWMjdINjYuOTcwOFYyNS41Wk02Ni45ODE0IDI1LjVINjYuOTcwOFYyN0g2Ni45ODE0VjI1LjVaTTY2Ljk5MjEgMjUuNUg2Ni45ODE0VjI3SDY2Ljk5MjFWMjUuNVpNNjcuMDAyNyAyNS41SDY2Ljk5MjFWMjdINjcuMDAyN1YyNS41Wk02Ny4wMTM0IDI1LjVINjcuMDAyN1YyN0g2Ny4wMTM0VjI1LjVaTTY3LjAyNCAyNS41SDY3LjAxMzRWMjdINjcuMDI0VjI1LjVaTTY3LjAzNDcgMjUuNUg2Ny4wMjRWMjdINjcuMDM0N1YyNS41Wk02Ny4wNDU0IDI1LjVINjcuMDM0N1YyN0g2Ny4wNDU0VjI1LjVaTTY3LjA1NjEgMjUuNUg2Ny4wNDU0VjI3SDY3LjA1NjFWMjUuNVpNNjcuMDY2OCAyNS41SDY3LjA1NjFWMjdINjcuMDY2OFYyNS41Wk02Ny4wNzc1IDI1LjVINjcuMDY2OFYyN0g2Ny4wNzc1VjI1LjVaTTY3LjA4ODMgMjUuNUg2Ny4wNzc1VjI3SDY3LjA4ODNWMjUuNVpNNjcuMDk5IDI1LjVINjcuMDg4M1YyN0g2Ny4wOTlWMjUuNVpNNjcuMTA5OCAyNS41SDY3LjA5OVYyN0g2Ny4xMDk4VjI1LjVaTTY3LjEyMDYgMjUuNUg2Ny4xMDk4VjI3SDY3LjEyMDZWMjUuNVpNNjcuMTMxMyAyNS41SDY3LjEyMDZWMjdINjcuMTMxM1YyNS41Wk02Ny4xNDIxIDI1LjVINjcuMTMxM1YyN0g2Ny4xNDIxVjI1LjVaTTY3LjE1MjkgMjUuNUg2Ny4xNDIxVjI3SDY3LjE1MjlWMjUuNVpNNjcuMTYzNyAyNS41SDY3LjE1MjlWMjdINjcuMTYzN1YyNS41Wk02Ny4xNzQ2IDI1LjVINjcuMTYzN1YyN0g2Ny4xNzQ2VjI1LjVaTTY3LjE4NTQgMjUuNUg2Ny4xNzQ2VjI3SDY3LjE4NTRWMjUuNVpNNjcuMTk2MyAyNS41SDY3LjE4NTRWMjdINjcuMTk2M1YyNS41Wk02Ny4yMDcxIDI1LjVINjcuMTk2M1YyN0g2Ny4yMDcxVjI1LjVaTTY3LjIxOCAyNS41SDY3LjIwNzFWMjdINjcuMjE4VjI1LjVaTTY3LjIyODkgMjUuNUg2Ny4yMThWMjdINjcuMjI4OVYyNS41Wk02Ny4yMzk4IDI1LjVINjcuMjI4OVYyN0g2Ny4yMzk4VjI1LjVaTTY3LjI1MDcgMjUuNUg2Ny4yMzk4VjI3SDY3LjI1MDdWMjUuNVpNNjcuMjYxNiAyNS41SDY3LjI1MDdWMjdINjcuMjYxNlYyNS41Wk02Ny4yNzI1IDI1LjVINjcuMjYxNlYyN0g2Ny4yNzI1VjI1LjVaTTY3LjI4MzUgMjUuNUg2Ny4yNzI1VjI3SDY3LjI4MzVWMjUuNVpNNjcuMjk0NCAyNS41SDY3LjI4MzVWMjdINjcuMjk0NFYyNS41Wk02Ny4zMDU0IDI1LjVINjcuMjk0NFYyN0g2Ny4zMDU0VjI1LjVaTTY3LjMxNjQgMjUuNUg2Ny4zMDU0VjI3SDY3LjMxNjRWMjUuNVpNNjcuMzI3MyAyNS41SDY3LjMxNjRWMjdINjcuMzI3M1YyNS41Wk02Ny4zMzgzIDI1LjVINjcuMzI3M1YyN0g2Ny4zMzgzVjI1LjVaTTY3LjM0OTQgMjUuNUg2Ny4zMzgzVjI3SDY3LjM0OTRWMjUuNVpNNjcuMzYwNCAyNS41SDY3LjM0OTRWMjdINjcuMzYwNFYyNS41Wk02Ny4zNzE0IDI1LjVINjcuMzYwNFYyN0g2Ny4zNzE0VjI1LjVaTTY3LjM4MjQgMjUuNUg2Ny4zNzE0VjI3SDY3LjM4MjRWMjUuNVpNNjcuMzkzNSAyNS41SDY3LjM4MjRWMjdINjcuMzkzNVYyNS41Wk02Ny40MDQ2IDI1LjVINjcuMzkzNVYyN0g2Ny40MDQ2VjI1LjVaTTY3LjQxNTYgMjUuNUg2Ny40MDQ2VjI3SDY3LjQxNTZWMjUuNVpNNjcuNDI2NyAyNS41SDY3LjQxNTZWMjdINjcuNDI2N1YyNS41Wk02Ny40Mzc4IDI1LjVINjcuNDI2N1YyN0g2Ny40Mzc4VjI1LjVaTTY3LjQ0ODkgMjUuNUg2Ny40Mzc4VjI3SDY3LjQ0ODlWMjUuNVpNNjcuNDYwMSAyNS41SDY3LjQ0ODlWMjdINjcuNDYwMVYyNS41Wk02Ny40NzEyIDI1LjVINjcuNDYwMVYyN0g2Ny40NzEyVjI1LjVaTTY3LjQ4MjQgMjUuNUg2Ny40NzEyVjI3SDY3LjQ4MjRWMjUuNVpNNjcuNDkzNSAyNS41SDY3LjQ4MjRWMjdINjcuNDkzNVYyNS41Wk02Ny41MDQ3IDI1LjVINjcuNDkzNVYyN0g2Ny41MDQ3VjI1LjVaTTY3LjUxNTkgMjUuNUg2Ny41MDQ3VjI3SDY3LjUxNTlWMjUuNVpNNjcuNTI3MSAyNS41SDY3LjUxNTlWMjdINjcuNTI3MVYyNS41Wk02Ny41MzgzIDI1LjVINjcuNTI3MVYyN0g2Ny41MzgzVjI1LjVaTTY3LjU0OTUgMjUuNUg2Ny41MzgzVjI3SDY3LjU0OTVWMjUuNVpNNjcuNTYwNyAyNS41SDY3LjU0OTVWMjdINjcuNTYwN1YyNS41Wk02Ny41NzE5IDI1LjVINjcuNTYwN1YyN0g2Ny41NzE5VjI1LjVaTTY3LjU4MzIgMjUuNUg2Ny41NzE5VjI3SDY3LjU4MzJWMjUuNVpNNjcuNTk0NCAyNS41SDY3LjU4MzJWMjdINjcuNTk0NFYyNS41Wk02Ny42MDU3IDI1LjVINjcuNTk0NFYyN0g2Ny42MDU3VjI1LjVaTTY3LjYxNyAyNS41SDY3LjYwNTdWMjdINjcuNjE3VjI1LjVaTTY3LjYyODMgMjUuNUg2Ny42MTdWMjdINjcuNjI4M1YyNS41Wk02Ny42Mzk2IDI1LjVINjcuNjI4M1YyN0g2Ny42Mzk2VjI1LjVaTTY3LjY1MDkgMjUuNUg2Ny42Mzk2VjI3SDY3LjY1MDlWMjUuNVpNNjcuNjYyMiAyNS41SDY3LjY1MDlWMjdINjcuNjYyMlYyNS41Wk02Ny42NzM2IDI1LjVINjcuNjYyMlYyN0g2Ny42NzM2VjI1LjVaTTY3LjY4NDkgMjUuNUg2Ny42NzM2VjI3SDY3LjY4NDlWMjUuNVpNNjcuNjk2MyAyNS41SDY3LjY4NDlWMjdINjcuNjk2M1YyNS41Wk02Ny43MDc3IDI1LjVINjcuNjk2M1YyN0g2Ny43MDc3VjI1LjVaTTY3LjcxOTEgMjUuNUg2Ny43MDc3VjI3SDY3LjcxOTFWMjUuNVpNNjcuNzMwNSAyNS41SDY3LjcxOTFWMjdINjcuNzMwNVYyNS41Wk02Ny43NDE5IDI1LjVINjcuNzMwNVYyN0g2Ny43NDE5VjI1LjVaTTY3Ljc1MzMgMjUuNUg2Ny43NDE5VjI3SDY3Ljc1MzNWMjUuNVpNNjcuNzY0NyAyNS41SDY3Ljc1MzNWMjdINjcuNzY0N1YyNS41Wk02Ny43NzYyIDI1LjVINjcuNzY0N1YyN0g2Ny43NzYyVjI1LjVaTTY3Ljc4NzYgMjUuNUg2Ny43NzYyVjI3SDY3Ljc4NzZWMjUuNVpNNjcuNzk5MSAyNS41SDY3Ljc4NzZWMjdINjcuNzk5MVYyNS41Wk02Ny44MTA2IDI1LjVINjcuNzk5MVYyN0g2Ny44MTA2VjI1LjVaTTY3LjgyMjEgMjUuNUg2Ny44MTA2VjI3SDY3LjgyMjFWMjUuNVpNNjcuODMzNiAyNS41SDY3LjgyMjFWMjdINjcuODMzNlYyNS41Wk02Ny44NDUxIDI1LjVINjcuODMzNlYyN0g2Ny44NDUxVjI1LjVaTTY3Ljg1NjYgMjUuNUg2Ny44NDUxVjI3SDY3Ljg1NjZWMjUuNVpNNjcuODY4MSAyNS41SDY3Ljg1NjZWMjdINjcuODY4MVYyNS41Wk02Ny44Nzk3IDI1LjVINjcuODY4MVYyN0g2Ny44Nzk3VjI1LjVaTTY3Ljg5MTIgMjUuNUg2Ny44Nzk3VjI3SDY3Ljg5MTJWMjUuNVpNNjcuOTAyOCAyNS41SDY3Ljg5MTJWMjdINjcuOTAyOFYyNS41Wk02Ny45MTQ0IDI1LjVINjcuOTAyOFYyN0g2Ny45MTQ0VjI1LjVaTTY3LjkyNiAyNS41SDY3LjkxNDRWMjdINjcuOTI2VjI1LjVaTTY3LjkzNzYgMjUuNUg2Ny45MjZWMjdINjcuOTM3NlYyNS41Wk02Ny45NDkyIDI1LjVINjcuOTM3NlYyN0g2Ny45NDkyVjI1LjVaTTY3Ljk2MDggMjUuNUg2Ny45NDkyVjI3SDY3Ljk2MDhWMjUuNVpNNjcuOTcyNCAyNS41SDY3Ljk2MDhWMjdINjcuOTcyNFYyNS41Wk02Ny45ODQxIDI1LjVINjcuOTcyNFYyN0g2Ny45ODQxVjI1LjVaTTY3Ljk5NTggMjUuNUg2Ny45ODQxVjI3SDY3Ljk5NThWMjUuNVpNNjguMDA3NCAyNS41SDY3Ljk5NThWMjdINjguMDA3NFYyNS41Wk02OC4wMTkxIDI1LjVINjguMDA3NFYyN0g2OC4wMTkxVjI1LjVaTTY4LjAzMDggMjUuNUg2OC4wMTkxVjI3SDY4LjAzMDhWMjUuNVpNNjguMDQyNSAyNS41SDY4LjAzMDhWMjdINjguMDQyNVYyNS41Wk02OC4wNTQyIDI1LjVINjguMDQyNVYyN0g2OC4wNTQyVjI1LjVaTTY4LjA2NiAyNS41SDY4LjA1NDJWMjdINjguMDY2VjI1LjVaTTY4LjA3NzcgMjUuNUg2OC4wNjZWMjdINjguMDc3N1YyNS41Wk02OC4wODk0IDI1LjVINjguMDc3N1YyN0g2OC4wODk0VjI1LjVaTTY4LjEwMTIgMjUuNUg2OC4wODk0VjI3SDY4LjEwMTJWMjUuNVpNNjguMTEzIDI1LjVINjguMTAxMlYyN0g2OC4xMTNWMjUuNVpNNjguMTI0OCAyNS41SDY4LjExM1YyN0g2OC4xMjQ4VjI1LjVaTTY4LjEzNjYgMjUuNUg2OC4xMjQ4VjI3SDY4LjEzNjZWMjUuNVpNNjguMTQ4NCAyNS41SDY4LjEzNjZWMjdINjguMTQ4NFYyNS41Wk02OC4xNjAyIDI1LjVINjguMTQ4NFYyN0g2OC4xNjAyVjI1LjVaTTY4LjE3MiAyNS41SDY4LjE2MDJWMjdINjguMTcyVjI1LjVaTTY4LjE4MzkgMjUuNUg2OC4xNzJWMjdINjguMTgzOVYyNS41Wk02OC4xOTU3IDI1LjVINjguMTgzOVYyN0g2OC4xOTU3VjI1LjVaTTY4LjIwNzYgMjUuNUg2OC4xOTU3VjI3SDY4LjIwNzZWMjUuNVpNNjguMjE5NSAyNS41SDY4LjIwNzZWMjdINjguMjE5NVYyNS41Wk02OC4yMzEzIDI1LjVINjguMjE5NVYyN0g2OC4yMzEzVjI1LjVaTTY4LjI0MzIgMjUuNUg2OC4yMzEzVjI3SDY4LjI0MzJWMjUuNVpNNjguMjU1MiAyNS41SDY4LjI0MzJWMjdINjguMjU1MlYyNS41Wk02OC4yNjcxIDI1LjVINjguMjU1MlYyN0g2OC4yNjcxVjI1LjVaTTY4LjI3OSAyNS41SDY4LjI2NzFWMjdINjguMjc5VjI1LjVaTTY4LjI5MSAyNS41SDY4LjI3OVYyN0g2OC4yOTFWMjUuNVpNNjguMzAyOSAyNS41SDY4LjI5MVYyN0g2OC4zMDI5VjI1LjVaTTY4LjMxNDkgMjUuNUg2OC4zMDI5VjI3SDY4LjMxNDlWMjUuNVpNNjguMzI2OSAyNS41SDY4LjMxNDlWMjdINjguMzI2OVYyNS41Wk02OC4zMzg5IDI1LjVINjguMzI2OVYyN0g2OC4zMzg5VjI1LjVaTTY4LjM1MDkgMjUuNUg2OC4zMzg5VjI3SDY4LjM1MDlWMjUuNVpNNjguMzYyOSAyNS41SDY4LjM1MDlWMjdINjguMzYyOVYyNS41Wk02OC4zNzQ5IDI1LjVINjguMzYyOVYyN0g2OC4zNzQ5VjI1LjVaTTY4LjM4NjkgMjUuNUg2OC4zNzQ5VjI3SDY4LjM4NjlWMjUuNVpNNjguMzk5IDI1LjVINjguMzg2OVYyN0g2OC4zOTlWMjUuNVpNNjguNDExIDI1LjVINjguMzk5VjI3SDY4LjQxMVYyNS41Wk02OC40MjMxIDI1LjVINjguNDExVjI3SDY4LjQyMzFWMjUuNVpNNjguNDM1MiAyNS41SDY4LjQyMzFWMjdINjguNDM1MlYyNS41Wk02OC40NDczIDI1LjVINjguNDM1MlYyN0g2OC40NDczVjI1LjVaTTY4LjQ1OTQgMjUuNUg2OC40NDczVjI3SDY4LjQ1OTRWMjUuNVpNNjguNDcxNSAyNS41SDY4LjQ1OTRWMjdINjguNDcxNVYyNS41Wk02OC40ODM2IDI1LjVINjguNDcxNVYyN0g2OC40ODM2VjI1LjVaTTY4LjQ5NTggMjUuNUg2OC40ODM2VjI3SDY4LjQ5NThWMjUuNVpNNjguNTA3OSAyNS41SDY4LjQ5NThWMjdINjguNTA3OVYyNS41Wk02OC41MjAxIDI1LjVINjguNTA3OVYyN0g2OC41MjAxVjI1LjVaTTY4LjUzMjMgMjUuNUg2OC41MjAxVjI3SDY4LjUzMjNWMjUuNVpNNjguNTQ0NCAyNS41SDY4LjUzMjNWMjdINjguNTQ0NFYyNS41Wk02OC41NTY2IDI1LjVINjguNTQ0NFYyN0g2OC41NTY2VjI1LjVaTTY4LjU2ODggMjUuNUg2OC41NTY2VjI3SDY4LjU2ODhWMjUuNVpNNjguNTgxMSAyNS41SDY4LjU2ODhWMjdINjguNTgxMVYyNS41Wk02OC41OTMzIDI1LjVINjguNTgxMVYyN0g2OC41OTMzVjI1LjVaTTY4LjYwNTUgMjUuNUg2OC41OTMzVjI3SDY4LjYwNTVWMjUuNVpNNjguNjE3OCAyNS41SDY4LjYwNTVWMjdINjguNjE3OFYyNS41Wk02OC42MzAxIDI1LjVINjguNjE3OFYyN0g2OC42MzAxVjI1LjVaTTY4LjY0MjMgMjUuNUg2OC42MzAxVjI3SDY4LjY0MjNWMjUuNVpNNjguNjU0NiAyNS41SDY4LjY0MjNWMjdINjguNjU0NlYyNS41Wk02OC42NjY5IDI1LjVINjguNjU0NlYyN0g2OC42NjY5VjI1LjVaTTY4LjY3OTIgMjUuNUg2OC42NjY5VjI3SDY4LjY3OTJWMjUuNVpNNjguNjkxNiAyNS41SDY4LjY3OTJWMjdINjguNjkxNlYyNS41Wk02OC43MDM5IDI1LjVINjguNjkxNlYyN0g2OC43MDM5VjI1LjVaTTY4LjcxNjIgMjUuNUg2OC43MDM5VjI3SDY4LjcxNjJWMjUuNVpNNjguNzI4NiAyNS41SDY4LjcxNjJWMjdINjguNzI4NlYyNS41Wk02OC43NDEgMjUuNUg2OC43Mjg2VjI3SDY4Ljc0MVYyNS41Wk02OC43NTMzIDI1LjVINjguNzQxVjI3SDY4Ljc1MzNWMjUuNVpNNjguNzY1NyAyNS41SDY4Ljc1MzNWMjdINjguNzY1N1YyNS41Wk02OC43NzgxIDI1LjVINjguNzY1N1YyN0g2OC43NzgxVjI1LjVaTTY4Ljc5MDUgMjUuNUg2OC43NzgxVjI3SDY4Ljc5MDVWMjUuNVpNNjguODAzIDI1LjVINjguNzkwNVYyN0g2OC44MDNWMjUuNVpNNjguODE1NCAyNS41SDY4LjgwM1YyN0g2OC44MTU0VjI1LjVaTTY4LjgyNzggMjUuNUg2OC44MTU0VjI3SDY4LjgyNzhWMjUuNVpNNjguODQwMyAyNS41SDY4LjgyNzhWMjdINjguODQwM1YyNS41Wk02OC44NTI4IDI1LjVINjguODQwM1YyN0g2OC44NTI4VjI1LjVaTTY4Ljg2NTMgMjUuNUg2OC44NTI4VjI3SDY4Ljg2NTNWMjUuNVpNNjguODc3NyAyNS41SDY4Ljg2NTNWMjdINjguODc3N1YyNS41Wk02OC44OTAzIDI1LjVINjguODc3N1YyN0g2OC44OTAzVjI1LjVaTTY4LjkwMjggMjUuNUg2OC44OTAzVjI3SDY4LjkwMjhWMjUuNVpNNjguOTE1MyAyNS41SDY4LjkwMjhWMjdINjguOTE1M1YyNS41Wk02OC45Mjc4IDI1LjVINjguOTE1M1YyN0g2OC45Mjc4VjI1LjVaTTY4Ljk0MDQgMjUuNUg2OC45Mjc4VjI3SDY4Ljk0MDRWMjUuNVpNNjguOTUyOSAyNS41SDY4Ljk0MDRWMjdINjguOTUyOVYyNS41Wk02OC45NjU1IDI1LjVINjguOTUyOVYyN0g2OC45NjU1VjI1LjVaTTY4Ljk3ODEgMjUuNUg2OC45NjU1VjI3SDY4Ljk3ODFWMjUuNVpNNjguOTkwNyAyNS41SDY4Ljk3ODFWMjdINjguOTkwN1YyNS41Wk02OS4wMDMzIDI1LjVINjguOTkwN1YyN0g2OS4wMDMzVjI1LjVaTTY5LjAxNTkgMjUuNUg2OS4wMDMzVjI3SDY5LjAxNTlWMjUuNVpNNjkuMDI4NiAyNS41SDY5LjAxNTlWMjdINjkuMDI4NlYyNS41Wk02OS4wNDEyIDI1LjVINjkuMDI4NlYyN0g2OS4wNDEyVjI1LjVaTTY5LjA1MzggMjUuNUg2OS4wNDEyVjI3SDY5LjA1MzhWMjUuNVpNNjkuMDY2NSAyNS41SDY5LjA1MzhWMjdINjkuMDY2NVYyNS41Wk02OS4wNzkyIDI1LjVINjkuMDY2NVYyN0g2OS4wNzkyVjI1LjVaTTY5LjA5MTkgMjUuNUg2OS4wNzkyVjI3SDY5LjA5MTlWMjUuNVpNNjkuMTA0NiAyNS41SDY5LjA5MTlWMjdINjkuMTA0NlYyNS41Wk02OS4xMTczIDI1LjVINjkuMTA0NlYyN0g2OS4xMTczVjI1LjVaTTY5LjEzIDI1LjVINjkuMTE3M1YyN0g2OS4xM1YyNS41Wk02OS4xNDI3IDI1LjVINjkuMTNWMjdINjkuMTQyN1YyNS41Wk02OS4xNTU1IDI1LjVINjkuMTQyN1YyN0g2OS4xNTU1VjI1LjVaTTY5LjE2ODIgMjUuNUg2OS4xNTU1VjI3SDY5LjE2ODJWMjUuNVpNNjkuMTgxIDI1LjVINjkuMTY4MlYyN0g2OS4xODFWMjUuNVpNNjkuMTkzOCAyNS41SDY5LjE4MVYyN0g2OS4xOTM4VjI1LjVaTTY5LjIwNjYgMjUuNUg2OS4xOTM4VjI3SDY5LjIwNjZWMjUuNVpNNjkuMjE5NCAyNS41SDY5LjIwNjZWMjdINjkuMjE5NFYyNS41Wk02OS4yMzIyIDI1LjVINjkuMjE5NFYyN0g2OS4yMzIyVjI1LjVaTTY5LjI0NSAyNS41SDY5LjIzMjJWMjdINjkuMjQ1VjI1LjVaTTY5LjI1NzggMjUuNUg2OS4yNDVWMjdINjkuMjU3OFYyNS41Wk02OS4yNzA3IDI1LjVINjkuMjU3OFYyN0g2OS4yNzA3VjI1LjVaTTY5LjI4MzYgMjUuNUg2OS4yNzA3VjI3SDY5LjI4MzZWMjUuNVpNNjkuMjk2NCAyNS41SDY5LjI4MzZWMjdINjkuMjk2NFYyNS41Wk02OS4zMDkzIDI1LjVINjkuMjk2NFYyN0g2OS4zMDkzVjI1LjVaTTY5LjMyMjIgMjUuNUg2OS4zMDkzVjI3SDY5LjMyMjJWMjUuNVpNNjkuMzM1MSAyNS41SDY5LjMyMjJWMjdINjkuMzM1MVYyNS41Wk02OS4zNDggMjUuNUg2OS4zMzUxVjI3SDY5LjM0OFYyNS41Wk02OS4zNjA5IDI1LjVINjkuMzQ4VjI3SDY5LjM2MDlWMjUuNVpNNjkuMzczOSAyNS41SDY5LjM2MDlWMjdINjkuMzczOVYyNS41Wk02OS4zODY4IDI1LjVINjkuMzczOVYyN0g2OS4zODY4VjI1LjVaTTY5LjM5OTggMjUuNUg2OS4zODY4VjI3SDY5LjM5OThWMjUuNVpNNjkuNDEyOCAyNS41SDY5LjM5OThWMjdINjkuNDEyOFYyNS41Wk02OS40MjU3IDI1LjVINjkuNDEyOFYyN0g2OS40MjU3VjI1LjVaTTY5LjQzODcgMjUuNUg2OS40MjU3VjI3SDY5LjQzODdWMjUuNVpNNjkuNDUxNyAyNS41SDY5LjQzODdWMjdINjkuNDUxN1YyNS41Wk02OS40NjQ4IDI1LjVINjkuNDUxN1YyN0g2OS40NjQ4VjI1LjVaTTY5LjQ3NzggMjUuNUg2OS40NjQ4VjI3SDY5LjQ3NzhWMjUuNVpNNjkuNDkwOCAyNS41SDY5LjQ3NzhWMjdINjkuNDkwOFYyNS41Wk02OS41MDM5IDI1LjVINjkuNDkwOFYyN0g2OS41MDM5VjI1LjVaTTY5LjUxNjkgMjUuNUg2OS41MDM5VjI3SDY5LjUxNjlWMjUuNVpNNjkuNTMgMjUuNUg2OS41MTY5VjI3SDY5LjUzVjI1LjVaTTY5LjU0MzEgMjUuNUg2OS41M1YyN0g2OS41NDMxVjI1LjVaTTY5LjU1NjIgMjUuNUg2OS41NDMxVjI3SDY5LjU1NjJWMjUuNVpNNjkuNTY5MyAyNS41SDY5LjU1NjJWMjdINjkuNTY5M1YyNS41Wk02OS41ODI0IDI1LjVINjkuNTY5M1YyN0g2OS41ODI0VjI1LjVaTTY5LjU5NTYgMjUuNUg2OS41ODI0VjI3SDY5LjU5NTZWMjUuNVpNNjkuNjA4NyAyNS41SDY5LjU5NTZWMjdINjkuNjA4N1YyNS41Wk02OS42MjE5IDI1LjVINjkuNjA4N1YyN0g2OS42MjE5VjI1LjVaTTY5LjYzNSAyNS41SDY5LjYyMTlWMjdINjkuNjM1VjI1LjVaTTY5LjY0ODIgMjUuNUg2OS42MzVWMjdINjkuNjQ4MlYyNS41Wk02OS42NjE0IDI1LjVINjkuNjQ4MlYyN0g2OS42NjE0VjI1LjVaTTY5LjY3NDYgMjUuNUg2OS42NjE0VjI3SDY5LjY3NDZWMjUuNVpNNjkuNjg3OCAyNS41SDY5LjY3NDZWMjdINjkuNjg3OFYyNS41Wk02OS43MDEgMjUuNUg2OS42ODc4VjI3SDY5LjcwMVYyNS41Wk02OS43MTQzIDI1LjVINjkuNzAxVjI3SDY5LjcxNDNWMjUuNVpNNjkuNzI3NSAyNS41SDY5LjcxNDNWMjdINjkuNzI3NVYyNS41Wk02OS43NDA4IDI1LjVINjkuNzI3NVYyN0g2OS43NDA4VjI1LjVaTTY5Ljc1NCAyNS41SDY5Ljc0MDhWMjdINjkuNzU0VjI1LjVaTTY5Ljc2NzMgMjUuNUg2OS43NTRWMjdINjkuNzY3M1YyNS41Wk02OS43ODA2IDI1LjVINjkuNzY3M1YyN0g2OS43ODA2VjI1LjVaTTY5Ljc5MzkgMjUuNUg2OS43ODA2VjI3SDY5Ljc5MzlWMjUuNVpNNjkuODA3MiAyNS41SDY5Ljc5MzlWMjdINjkuODA3MlYyNS41Wk02OS44MjA2IDI1LjVINjkuODA3MlYyN0g2OS44MjA2VjI1LjVaTTY5LjgzMzkgMjUuNUg2OS44MjA2VjI3SDY5LjgzMzlWMjUuNVpNNjkuODQ3MiAyNS41SDY5LjgzMzlWMjdINjkuODQ3MlYyNS41Wk02OS44NjA2IDI1LjVINjkuODQ3MlYyN0g2OS44NjA2VjI1LjVaTTY5Ljg3NCAyNS41SDY5Ljg2MDZWMjdINjkuODc0VjI1LjVaTTY5Ljg4NzQgMjUuNUg2OS44NzRWMjdINjkuODg3NFYyNS41Wk02OS45MDA4IDI1LjVINjkuODg3NFYyN0g2OS45MDA4VjI1LjVaTTY5LjkxNDIgMjUuNUg2OS45MDA4VjI3SDY5LjkxNDJWMjUuNVpNNjkuOTI3NiAyNS41SDY5LjkxNDJWMjdINjkuOTI3NlYyNS41Wk02OS45NDEgMjUuNUg2OS45Mjc2VjI3SDY5Ljk0MVYyNS41Wk02OS45NTQ0IDI1LjVINjkuOTQxVjI3SDY5Ljk1NDRWMjUuNVpNNjkuOTY3OSAyNS41SDY5Ljk1NDRWMjdINjkuOTY3OVYyNS41Wk02OS45ODE0IDI1LjVINjkuOTY3OVYyN0g2OS45ODE0VjI1LjVaTTY5Ljk5NDggMjUuNUg2OS45ODE0VjI3SDY5Ljk5NDhWMjUuNVpNNzAuMDA4MyAyNS41SDY5Ljk5NDhWMjdINzAuMDA4M1YyNS41Wk03MC4wMjE4IDI1LjVINzAuMDA4M1YyN0g3MC4wMjE4VjI1LjVaTTcwLjAzNTMgMjUuNUg3MC4wMjE4VjI3SDcwLjAzNTNWMjUuNVpNNzAuMDQ4OCAyNS41SDcwLjAzNTNWMjdINzAuMDQ4OFYyNS41Wk03MC4wNjI0IDI1LjVINzAuMDQ4OFYyN0g3MC4wNjI0VjI1LjVaTTcwLjA3NTkgMjUuNUg3MC4wNjI0VjI3SDcwLjA3NTlWMjUuNVpNNzAuMDg5NSAyNS41SDcwLjA3NTlWMjdINzAuMDg5NVYyNS41Wk03MC4xMDMgMjUuNUg3MC4wODk1VjI3SDcwLjEwM1YyNS41Wk03MC4xMTY2IDI1LjVINzAuMTAzVjI3SDcwLjExNjZWMjUuNVpNNzAuMTMwMiAyNS41SDcwLjExNjZWMjdINzAuMTMwMlYyNS41Wk03MC4xNDM4IDI1LjVINzAuMTMwMlYyN0g3MC4xNDM4VjI1LjVaTTcwLjE1NzQgMjUuNUg3MC4xNDM4VjI3SDcwLjE1NzRWMjUuNVpNNzAuMTcxIDI1LjVINzAuMTU3NFYyN0g3MC4xNzFWMjUuNVpNNzAuMTg0NyAyNS41SDcwLjE3MVYyN0g3MC4xODQ3VjI1LjVaTTcwLjE5ODMgMjUuNUg3MC4xODQ3VjI3SDcwLjE5ODNWMjUuNVpNNzAuMjEyIDI1LjVINzAuMTk4M1YyN0g3MC4yMTJWMjUuNVpNNzAuMjI1NiAyNS41SDcwLjIxMlYyN0g3MC4yMjU2VjI1LjVaTTcwLjIzOTMgMjUuNUg3MC4yMjU2VjI3SDcwLjIzOTNWMjUuNVpNNzAuMjUzIDI1LjVINzAuMjM5M1YyN0g3MC4yNTNWMjUuNVpNNzAuMjY2NyAyNS41SDcwLjI1M1YyN0g3MC4yNjY3VjI1LjVaTTcwLjI4MDQgMjUuNUg3MC4yNjY3VjI3SDcwLjI4MDRWMjUuNVpNNzAuMjk0MiAyNS41SDcwLjI4MDRWMjdINzAuMjk0MlYyNS41Wk03MC4zMDc5IDI1LjVINzAuMjk0MlYyN0g3MC4zMDc5VjI1LjVaTTcwLjMyMTYgMjUuNUg3MC4zMDc5VjI3SDcwLjMyMTZWMjUuNVpNNzAuMzM1NCAyNS41SDcwLjMyMTZWMjdINzAuMzM1NFYyNS41Wk03MC4zNDkyIDI1LjVINzAuMzM1NFYyN0g3MC4zNDkyVjI1LjVaTTcwLjM2MyAyNS41SDcwLjM0OTJWMjdINzAuMzYzVjI1LjVaTTcwLjM3NjggMjUuNUg3MC4zNjNWMjdINzAuMzc2OFYyNS41Wk03MC4zOTA2IDI1LjVINzAuMzc2OFYyN0g3MC4zOTA2VjI1LjVaTTcwLjQwNDQgMjUuNUg3MC4zOTA2VjI3SDcwLjQwNDRWMjUuNVpNNzAuNDE4MiAyNS41SDcwLjQwNDRWMjdINzAuNDE4MlYyNS41Wk03MC40MzIgMjUuNUg3MC40MTgyVjI3SDcwLjQzMlYyNS41Wk03MC40NDU5IDI1LjVINzAuNDMyVjI3SDcwLjQ0NTlWMjUuNVpNNzAuNDU5OCAyNS41SDcwLjQ0NTlWMjdINzAuNDU5OFYyNS41Wk03MC40NzM2IDI1LjVINzAuNDU5OFYyN0g3MC40NzM2VjI1LjVaTTcwLjQ4NzUgMjUuNUg3MC40NzM2VjI3SDcwLjQ4NzVWMjUuNVpNNzAuNTAxNCAyNS41SDcwLjQ4NzVWMjdINzAuNTAxNFYyNS41Wk03MC41MTUzIDI1LjVINzAuNTAxNFYyN0g3MC41MTUzVjI1LjVaTTcwLjUyOTIgMjUuNUg3MC41MTUzVjI3SDcwLjUyOTJWMjUuNVpNNzAuNTQzMiAyNS41SDcwLjUyOTJWMjdINzAuNTQzMlYyNS41Wk03MC41NTcxIDI1LjVINzAuNTQzMlYyN0g3MC41NTcxVjI1LjVaTTcwLjU3MTEgMjUuNUg3MC41NTcxVjI3SDcwLjU3MTFWMjUuNVpNNzAuNTg1IDI1LjVINzAuNTcxMVYyN0g3MC41ODVWMjUuNVpNNzAuNTk5IDI1LjVINzAuNTg1VjI3SDcwLjU5OVYyNS41Wk03MC42MTMgMjUuNUg3MC41OTlWMjdINzAuNjEzVjI1LjVaTTcwLjYyNyAyNS41SDcwLjYxM1YyN0g3MC42MjdWMjUuNVpNNzAuNjQxIDI1LjVINzAuNjI3VjI3SDcwLjY0MVYyNS41Wk03MC42NTUgMjUuNUg3MC42NDFWMjdINzAuNjU1VjI1LjVaTTcwLjY2OTEgMjUuNUg3MC42NTVWMjdINzAuNjY5MVYyNS41Wk03MC42ODMxIDI1LjVINzAuNjY5MVYyN0g3MC42ODMxVjI1LjVaTTcwLjY5NzIgMjUuNUg3MC42ODMxVjI3SDcwLjY5NzJWMjUuNVpNNzAuNzExMiAyNS41SDcwLjY5NzJWMjdINzAuNzExMlYyNS41Wk03MC43MjUzIDI1LjVINzAuNzExMlYyN0g3MC43MjUzVjI1LjVaTTcwLjczOTQgMjUuNUg3MC43MjUzVjI3SDcwLjczOTRWMjUuNVpNNzAuNzUzNSAyNS41SDcwLjczOTRWMjdINzAuNzUzNVYyNS41Wk03MC43Njc2IDI1LjVINzAuNzUzNVYyN0g3MC43Njc2VjI1LjVaTTcwLjc4MTcgMjUuNUg3MC43Njc2VjI3SDcwLjc4MTdWMjUuNVpNNzAuNzk1OSAyNS41SDcwLjc4MTdWMjdINzAuNzk1OVYyNS41Wk03MC44MSAyNS41SDcwLjc5NTlWMjdINzAuODFWMjUuNVpNNzAuODI0MiAyNS41SDcwLjgxVjI3SDcwLjgyNDJWMjUuNVpNNzAuODM4NCAyNS41SDcwLjgyNDJWMjdINzAuODM4NFYyNS41Wk03MC44NTI1IDI1LjVINzAuODM4NFYyN0g3MC44NTI1VjI1LjVaTTcwLjg2NjcgMjUuNUg3MC44NTI1VjI3SDcwLjg2NjdWMjUuNVpNNzAuODgwOSAyNS41SDcwLjg2NjdWMjdINzAuODgwOVYyNS41Wk03MC44OTUyIDI1LjVINzAuODgwOVYyN0g3MC44OTUyVjI1LjVaTTcwLjkwOTQgMjUuNUg3MC44OTUyVjI3SDcwLjkwOTRWMjUuNVpNNzAuOTIzNiAyNS41SDcwLjkwOTRWMjdINzAuOTIzNlYyNS41Wk03MC45Mzc5IDI1LjVINzAuOTIzNlYyN0g3MC45Mzc5VjI1LjVaTTcwLjk1MjEgMjUuNUg3MC45Mzc5VjI3SDcwLjk1MjFWMjUuNVpNNzAuOTY2NCAyNS41SDcwLjk1MjFWMjdINzAuOTY2NFYyNS41Wk03MC45ODA3IDI1LjVINzAuOTY2NFYyN0g3MC45ODA3VjI1LjVaTTcwLjk5NSAyNS41SDcwLjk4MDdWMjdINzAuOTk1VjI1LjVaTTcxLjAwOTMgMjUuNUg3MC45OTVWMjdINzEuMDA5M1YyNS41Wk03MS4wMjM2IDI1LjVINzEuMDA5M1YyN0g3MS4wMjM2VjI1LjVaTTcxLjAzNzkgMjUuNUg3MS4wMjM2VjI3SDcxLjAzNzlWMjUuNVpNNzEuMDUyMyAyNS41SDcxLjAzNzlWMjdINzEuMDUyM1YyNS41Wk03MS4wNjY2IDI1LjVINzEuMDUyM1YyN0g3MS4wNjY2VjI1LjVaTTcxLjA4MSAyNS41SDcxLjA2NjZWMjdINzEuMDgxVjI1LjVaTTcxLjA5NTQgMjUuNUg3MS4wODFWMjdINzEuMDk1NFYyNS41Wk03MS4xMDk4IDI1LjVINzEuMDk1NFYyN0g3MS4xMDk4VjI1LjVaTTcxLjEyNDIgMjUuNUg3MS4xMDk4VjI3SDcxLjEyNDJWMjUuNVpNNzEuMTM4NiAyNS41SDcxLjEyNDJWMjdINzEuMTM4NlYyNS41Wk03MS4xNTMgMjUuNUg3MS4xMzg2VjI3SDcxLjE1M1YyNS41Wk03MS4xNjc0IDI1LjVINzEuMTUzVjI3SDcxLjE2NzRWMjUuNVpNNzEuMTgxOSAyNS41SDcxLjE2NzRWMjdINzEuMTgxOVYyNS41Wk03MS4xOTYzIDI1LjVINzEuMTgxOVYyN0g3MS4xOTYzVjI1LjVaTTcxLjIxMDggMjUuNUg3MS4xOTYzVjI3SDcxLjIxMDhWMjUuNVpNNzEuMjI1MyAyNS41SDcxLjIxMDhWMjdINzEuMjI1M1YyNS41Wk03MS4yMzk4IDI1LjVINzEuMjI1M1YyN0g3MS4yMzk4VjI1LjVaTTcxLjI1NDMgMjUuNUg3MS4yMzk4VjI3SDcxLjI1NDNWMjUuNVpNNzEuMjY4OCAyNS41SDcxLjI1NDNWMjdINzEuMjY4OFYyNS41Wk03MS4yODMzIDI1LjVINzEuMjY4OFYyN0g3MS4yODMzVjI1LjVaTTcxLjI5NzggMjUuNUg3MS4yODMzVjI3SDcxLjI5NzhWMjUuNVpNNzEuMzEyNCAyNS41SDcxLjI5NzhWMjdINzEuMzEyNFYyNS41Wk03MS4zMjY5IDI1LjVINzEuMzEyNFYyN0g3MS4zMjY5VjI1LjVaTTcxLjM0MTUgMjUuNUg3MS4zMjY5VjI3SDcxLjM0MTVWMjUuNVpNNzEuMzU2MSAyNS41SDcxLjM0MTVWMjdINzEuMzU2MVYyNS41Wk03MS4zNzA3IDI1LjVINzEuMzU2MVYyN0g3MS4zNzA3VjI1LjVaTTcxLjM4NTMgMjUuNUg3MS4zNzA3VjI3SDcxLjM4NTNWMjUuNVpNNzEuMzk5OSAyNS41SDcxLjM4NTNWMjdINzEuMzk5OVYyNS41Wk03MS40MTQ1IDI1LjVINzEuMzk5OVYyN0g3MS40MTQ1VjI1LjVaTTcxLjQyOTIgMjUuNUg3MS40MTQ1VjI3SDcxLjQyOTJWMjUuNVpNNzEuNDQzOCAyNS41SDcxLjQyOTJWMjdINzEuNDQzOFYyNS41Wk03MS40NTg1IDI1LjVINzEuNDQzOFYyN0g3MS40NTg1VjI1LjVaTTcxLjQ3MzIgMjUuNUg3MS40NTg1VjI3SDcxLjQ3MzJWMjUuNVpNNzEuNDg3OCAyNS41SDcxLjQ3MzJWMjdINzEuNDg3OFYyNS41Wk03MS41MDI1IDI1LjVINzEuNDg3OFYyN0g3MS41MDI1VjI1LjVaTTcxLjUxNzIgMjUuNUg3MS41MDI1VjI3SDcxLjUxNzJWMjUuNVpNNzEuNTMyIDI1LjVINzEuNTE3MlYyN0g3MS41MzJWMjUuNVpNNzEuNTQ2NyAyNS41SDcxLjUzMlYyN0g3MS41NDY3VjI1LjVaTTcxLjU2MTQgMjUuNUg3MS41NDY3VjI3SDcxLjU2MTRWMjUuNVpNNzEuNTc2MiAyNS41SDcxLjU2MTRWMjdINzEuNTc2MlYyNS41Wk03MS41OTEgMjUuNUg3MS41NzYyVjI3SDcxLjU5MVYyNS41Wk03MS42MDU3IDI1LjVINzEuNTkxVjI3SDcxLjYwNTdWMjUuNVpNNzEuNjIwNSAyNS41SDcxLjYwNTdWMjdINzEuNjIwNVYyNS41Wk03MS42MzUzIDI1LjVINzEuNjIwNVYyN0g3MS42MzUzVjI1LjVaTTcxLjY1MDEgMjUuNUg3MS42MzUzVjI3SDcxLjY1MDFWMjUuNVpNNzEuNjY0OSAyNS41SDcxLjY1MDFWMjdINzEuNjY0OVYyNS41Wk03MS42Nzk4IDI1LjVINzEuNjY0OVYyN0g3MS42Nzk4VjI1LjVaTTcxLjY5NDYgMjUuNUg3MS42Nzk4VjI3SDcxLjY5NDZWMjUuNVpNNzEuNzA5NSAyNS41SDcxLjY5NDZWMjdINzEuNzA5NVYyNS41Wk03MS43MjQzIDI1LjVINzEuNzA5NVYyN0g3MS43MjQzVjI1LjVaTTcxLjczOTIgMjUuNUg3MS43MjQzVjI3SDcxLjczOTJWMjUuNVpNNzEuNzU0MSAyNS41SDcxLjczOTJWMjdINzEuNzU0MVYyNS41Wk03MS43NjkgMjUuNUg3MS43NTQxVjI3SDcxLjc2OVYyNS41Wk03MS43ODM5IDI1LjVINzEuNzY5VjI3SDcxLjc4MzlWMjUuNVpNNzEuNzk4OCAyNS41SDcxLjc4MzlWMjdINzEuNzk4OFYyNS41Wk03MS44MTM4IDI1LjVINzEuNzk4OFYyN0g3MS44MTM4VjI1LjVaTTcxLjgyODcgMjUuNUg3MS44MTM4VjI3SDcxLjgyODdWMjUuNVpNNzEuODQzNyAyNS41SDcxLjgyODdWMjdINzEuODQzN1YyNS41Wk03MS44NTg3IDI1LjVINzEuODQzN1YyN0g3MS44NTg3VjI1LjVaTTcxLjg3MzYgMjUuNUg3MS44NTg3VjI3SDcxLjg3MzZWMjUuNVpNNzEuODg4NiAyNS41SDcxLjg3MzZWMjdINzEuODg4NlYyNS41Wk03MS45MDM2IDI1LjVINzEuODg4NlYyN0g3MS45MDM2VjI1LjVaTTcxLjkxODYgMjUuNUg3MS45MDM2VjI3SDcxLjkxODZWMjUuNVpNNzEuOTMzNyAyNS41SDcxLjkxODZWMjdINzEuOTMzN1YyNS41Wk03MS45NDg3IDI1LjVINzEuOTMzN1YyN0g3MS45NDg3VjI1LjVaTTcxLjk2MzggMjUuNUg3MS45NDg3VjI3SDcxLjk2MzhWMjUuNVpNNzEuOTc4OCAyNS41SDcxLjk2MzhWMjdINzEuOTc4OFYyNS41Wk03MS45OTM5IDI1LjVINzEuOTc4OFYyN0g3MS45OTM5VjI1LjVaTTcyLjAwOSAyNS41SDcxLjk5MzlWMjdINzIuMDA5VjI1LjVaTTcyLjAyNDEgMjUuNUg3Mi4wMDlWMjdINzIuMDI0MVYyNS41Wk03Mi4wMzkyIDI1LjVINzIuMDI0MVYyN0g3Mi4wMzkyVjI1LjVaTTcyLjA1NDMgMjUuNUg3Mi4wMzkyVjI3SDcyLjA1NDNWMjUuNVpNNzIuMDY5NCAyNS41SDcyLjA1NDNWMjdINzIuMDY5NFYyNS41Wk03Mi4wODQ2IDI1LjVINzIuMDY5NFYyN0g3Mi4wODQ2VjI1LjVaTTcyLjA5OTcgMjUuNUg3Mi4wODQ2VjI3SDcyLjA5OTdWMjUuNVpNNzIuMTE0OSAyNS41SDcyLjA5OTdWMjdINzIuMTE0OVYyNS41Wk03Mi4xMzAxIDI1LjVINzIuMTE0OVYyN0g3Mi4xMzAxVjI1LjVaTTcyLjE0NTIgMjUuNUg3Mi4xMzAxVjI3SDcyLjE0NTJWMjUuNVpNNzIuMTYwNCAyNS41SDcyLjE0NTJWMjdINzIuMTYwNFYyNS41Wk03Mi4xNzU2IDI1LjVINzIuMTYwNFYyN0g3Mi4xNzU2VjI1LjVaTTcyLjE5MDkgMjUuNUg3Mi4xNzU2VjI3SDcyLjE5MDlWMjUuNVpNNzIuMjA2MSAyNS41SDcyLjE5MDlWMjdINzIuMjA2MVYyNS41Wk03Mi4yMjEzIDI1LjVINzIuMjA2MVYyN0g3Mi4yMjEzVjI1LjVaTTcyLjIzNjYgMjUuNUg3Mi4yMjEzVjI3SDcyLjIzNjZWMjUuNVpNNzIuMjUxOSAyNS41SDcyLjIzNjZWMjdINzIuMjUxOVYyNS41Wk03Mi4yNjcxIDI1LjVINzIuMjUxOVYyN0g3Mi4yNjcxVjI1LjVaTTcyLjI4MjQgMjUuNUg3Mi4yNjcxVjI3SDcyLjI4MjRWMjUuNVpNNzIuMjk3NyAyNS41SDcyLjI4MjRWMjdINzIuMjk3N1YyNS41Wk03Mi4zMTMgMjUuNUg3Mi4yOTc3VjI3SDcyLjMxM1YyNS41Wk03Mi4zMjg0IDI1LjVINzIuMzEzVjI3SDcyLjMyODRWMjUuNVpNNzIuMzQzNyAyNS41SDcyLjMyODRWMjdINzIuMzQzN1YyNS41Wk03Mi4zNTkgMjUuNUg3Mi4zNDM3VjI3SDcyLjM1OVYyNS41Wk03Mi4zNzQ0IDI1LjVINzIuMzU5VjI3SDcyLjM3NDRWMjUuNVpNNzIuMzg5OCAyNS41SDcyLjM3NDRWMjdINzIuMzg5OFYyNS41Wk03Mi40MDUyIDI1LjVINzIuMzg5OFYyN0g3Mi40MDUyVjI1LjVaTTcyLjQyMDUgMjUuNUg3Mi40MDUyVjI3SDcyLjQyMDVWMjUuNVpNNzIuNDM1OSAyNS41SDcyLjQyMDVWMjdINzIuNDM1OVYyNS41Wk03Mi40NTE0IDI1LjVINzIuNDM1OVYyN0g3Mi40NTE0VjI1LjVaTTcyLjQ2NjggMjUuNUg3Mi40NTE0VjI3SDcyLjQ2NjhWMjUuNVpNNzIuNDgyMiAyNS41SDcyLjQ2NjhWMjdINzIuNDgyMlYyNS41Wk03Mi40OTc3IDI1LjVINzIuNDgyMlYyN0g3Mi40OTc3VjI1LjVaTTcyLjUxMzEgMjUuNUg3Mi40OTc3VjI3SDcyLjUxMzFWMjUuNVpNNzIuNTI4NiAyNS41SDcyLjUxMzFWMjdINzIuNTI4NlYyNS41Wk03Mi41NDQxIDI1LjVINzIuNTI4NlYyN0g3Mi41NDQxVjI1LjVaTTcyLjU1OTYgMjUuNUg3Mi41NDQxVjI3SDcyLjU1OTZWMjUuNVpNNzIuNTc1MSAyNS41SDcyLjU1OTZWMjdINzIuNTc1MVYyNS41Wk03Mi41OTA2IDI1LjVINzIuNTc1MVYyN0g3Mi41OTA2VjI1LjVaTTcyLjYwNjEgMjUuNUg3Mi41OTA2VjI3SDcyLjYwNjFWMjUuNVpNNzIuNjIxNyAyNS41SDcyLjYwNjFWMjdINzIuNjIxN1YyNS41Wk03Mi42MzcyIDI1LjVINzIuNjIxN1YyN0g3Mi42MzcyVjI1LjVaTTcyLjY1MjggMjUuNUg3Mi42MzcyVjI3SDcyLjY1MjhWMjUuNVpNNzIuNjY4NCAyNS41SDcyLjY1MjhWMjdINzIuNjY4NFYyNS41Wk03Mi42ODQgMjUuNUg3Mi42Njg0VjI3SDcyLjY4NFYyNS41Wk03Mi42OTk1IDI1LjVINzIuNjg0VjI3SDcyLjY5OTVWMjUuNVpNNzIuNzE1MiAyNS41SDcyLjY5OTVWMjdINzIuNzE1MlYyNS41Wk03Mi43MzA4IDI1LjVINzIuNzE1MlYyN0g3Mi43MzA4VjI1LjVaTTcyLjc0NjQgMjUuNUg3Mi43MzA4VjI3SDcyLjc0NjRWMjUuNVpNNzIuNzYyMSAyNS41SDcyLjc0NjRWMjdINzIuNzYyMVYyNS41Wk03Mi43Nzc3IDI1LjVINzIuNzYyMVYyN0g3Mi43Nzc3VjI1LjVaTTcyLjc5MzQgMjUuNUg3Mi43Nzc3VjI3SDcyLjc5MzRWMjUuNVpNNzIuODA5IDI1LjVINzIuNzkzNFYyN0g3Mi44MDlWMjUuNVpNNzIuODI0NyAyNS41SDcyLjgwOVYyN0g3Mi44MjQ3VjI1LjVaTTcyLjg0MDQgMjUuNUg3Mi44MjQ3VjI3SDcyLjg0MDRWMjUuNVpNNzIuODU2MSAyNS41SDcyLjg0MDRWMjdINzIuODU2MVYyNS41Wk03Mi44NzE5IDI1LjVINzIuODU2MVYyN0g3Mi44NzE5VjI1LjVaTTcyLjg4NzYgMjUuNUg3Mi44NzE5VjI3SDcyLjg4NzZWMjUuNVpNNzIuOTAzMyAyNS41SDcyLjg4NzZWMjdINzIuOTAzM1YyNS41Wk03Mi45MTkxIDI1LjVINzIuOTAzM1YyN0g3Mi45MTkxVjI1LjVaTTcyLjkzNDkgMjUuNUg3Mi45MTkxVjI3SDcyLjkzNDlWMjUuNVpNNzIuOTUwNyAyNS41SDcyLjkzNDlWMjdINzIuOTUwN1YyNS41Wk03Mi45NjY0IDI1LjVINzIuOTUwN1YyN0g3Mi45NjY0VjI1LjVaTTcyLjk4MjIgMjUuNUg3Mi45NjY0VjI3SDcyLjk4MjJWMjUuNVpNNzIuOTk4MSAyNS41SDcyLjk4MjJWMjdINzIuOTk4MVYyNS41Wk03My4wMTM5IDI1LjVINzIuOTk4MVYyN0g3My4wMTM5VjI1LjVaTTczLjAyOTcgMjUuNUg3My4wMTM5VjI3SDczLjAyOTdWMjUuNVpNNzMuMDQ1NiAyNS41SDczLjAyOTdWMjdINzMuMDQ1NlYyNS41Wk03My4wNjE0IDI1LjVINzMuMDQ1NlYyN0g3My4wNjE0VjI1LjVaTTczLjA3NzMgMjUuNUg3My4wNjE0VjI3SDczLjA3NzNWMjUuNVpNNzMuMDkzMiAyNS41SDczLjA3NzNWMjdINzMuMDkzMlYyNS41Wk03My4xMDkxIDI1LjVINzMuMDkzMlYyN0g3My4xMDkxVjI1LjVaTTczLjEyNSAyNS41SDczLjEwOTFWMjdINzMuMTI1VjI1LjVaTTczLjE0MDkgMjUuNUg3My4xMjVWMjdINzMuMTQwOVYyNS41Wk03My4xNTY4IDI1LjVINzMuMTQwOVYyN0g3My4xNTY4VjI1LjVaTTczLjE3MjggMjUuNUg3My4xNTY4VjI3SDczLjE3MjhWMjUuNVpNNzMuMTg4NyAyNS41SDczLjE3MjhWMjdINzMuMTg4N1YyNS41Wk03My4yMDQ3IDI1LjVINzMuMTg4N1YyN0g3My4yMDQ3VjI1LjVaTTczLjIyMDcgMjUuNUg3My4yMDQ3VjI3SDczLjIyMDdWMjUuNVpNNzMuMjM2NiAyNS41SDczLjIyMDdWMjdINzMuMjM2NlYyNS41Wk03My4yNTI2IDI1LjVINzMuMjM2NlYyN0g3My4yNTI2VjI1LjVaTTczLjI2ODYgMjUuNUg3My4yNTI2VjI3SDczLjI2ODZWMjUuNVpNNzMuMjg0NyAyNS41SDczLjI2ODZWMjdINzMuMjg0N1YyNS41Wk03NC4wMzQ3IDI3Ljc1VjI2LjI1SDcyLjUzNDdWMjcuNzVINzQuMDM0N1pNNzMuMjY4NiAyOC41SDczLjI4NDdWMjdINzMuMjY4NlYyOC41Wk03My4yNTI2IDI4LjVINzMuMjY4NlYyN0g3My4yNTI2VjI4LjVaTTczLjIzNjYgMjguNUg3My4yNTI2VjI3SDczLjIzNjZWMjguNVpNNzMuMjIwNyAyOC41SDczLjIzNjZWMjdINzMuMjIwN1YyOC41Wk03My4yMDQ3IDI4LjVINzMuMjIwN1YyN0g3My4yMDQ3VjI4LjVaTTczLjE4ODcgMjguNUg3My4yMDQ3VjI3SDczLjE4ODdWMjguNVpNNzMuMTcyOCAyOC41SDczLjE4ODdWMjdINzMuMTcyOFYyOC41Wk03My4xNTY4IDI4LjVINzMuMTcyOFYyN0g3My4xNTY4VjI4LjVaTTczLjE0MDkgMjguNUg3My4xNTY4VjI3SDczLjE0MDlWMjguNVpNNzMuMTI1IDI4LjVINzMuMTQwOVYyN0g3My4xMjVWMjguNVpNNzMuMTA5MSAyOC41SDczLjEyNVYyN0g3My4xMDkxVjI4LjVaTTczLjA5MzIgMjguNUg3My4xMDkxVjI3SDczLjA5MzJWMjguNVpNNzMuMDc3MyAyOC41SDczLjA5MzJWMjdINzMuMDc3M1YyOC41Wk03My4wNjE0IDI4LjVINzMuMDc3M1YyN0g3My4wNjE0VjI4LjVaTTczLjA0NTYgMjguNUg3My4wNjE0VjI3SDczLjA0NTZWMjguNVpNNzMuMDI5NyAyOC41SDczLjA0NTZWMjdINzMuMDI5N1YyOC41Wk03My4wMTM5IDI4LjVINzMuMDI5N1YyN0g3My4wMTM5VjI4LjVaTTcyLjk5ODEgMjguNUg3My4wMTM5VjI3SDcyLjk5ODFWMjguNVpNNzIuOTgyMiAyOC41SDcyLjk5ODFWMjdINzIuOTgyMlYyOC41Wk03Mi45NjY0IDI4LjVINzIuOTgyMlYyN0g3Mi45NjY0VjI4LjVaTTcyLjk1MDcgMjguNUg3Mi45NjY0VjI3SDcyLjk1MDdWMjguNVpNNzIuOTM0OSAyOC41SDcyLjk1MDdWMjdINzIuOTM0OVYyOC41Wk03Mi45MTkxIDI4LjVINzIuOTM0OVYyN0g3Mi45MTkxVjI4LjVaTTcyLjkwMzMgMjguNUg3Mi45MTkxVjI3SDcyLjkwMzNWMjguNVpNNzIuODg3NiAyOC41SDcyLjkwMzNWMjdINzIuODg3NlYyOC41Wk03Mi44NzE5IDI4LjVINzIuODg3NlYyN0g3Mi44NzE5VjI4LjVaTTcyLjg1NjEgMjguNUg3Mi44NzE5VjI3SDcyLjg1NjFWMjguNVpNNzIuODQwNCAyOC41SDcyLjg1NjFWMjdINzIuODQwNFYyOC41Wk03Mi44MjQ3IDI4LjVINzIuODQwNFYyN0g3Mi44MjQ3VjI4LjVaTTcyLjgwOSAyOC41SDcyLjgyNDdWMjdINzIuODA5VjI4LjVaTTcyLjc5MzQgMjguNUg3Mi44MDlWMjdINzIuNzkzNFYyOC41Wk03Mi43Nzc3IDI4LjVINzIuNzkzNFYyN0g3Mi43Nzc3VjI4LjVaTTcyLjc2MjEgMjguNUg3Mi43Nzc3VjI3SDcyLjc2MjFWMjguNVpNNzIuNzQ2NCAyOC41SDcyLjc2MjFWMjdINzIuNzQ2NFYyOC41Wk03Mi43MzA4IDI4LjVINzIuNzQ2NFYyN0g3Mi43MzA4VjI4LjVaTTcyLjcxNTIgMjguNUg3Mi43MzA4VjI3SDcyLjcxNTJWMjguNVpNNzIuNjk5NSAyOC41SDcyLjcxNTJWMjdINzIuNjk5NVYyOC41Wk03Mi42ODQgMjguNUg3Mi42OTk1VjI3SDcyLjY4NFYyOC41Wk03Mi42Njg0IDI4LjVINzIuNjg0VjI3SDcyLjY2ODRWMjguNVpNNzIuNjUyOCAyOC41SDcyLjY2ODRWMjdINzIuNjUyOFYyOC41Wk03Mi42MzcyIDI4LjVINzIuNjUyOFYyN0g3Mi42MzcyVjI4LjVaTTcyLjYyMTcgMjguNUg3Mi42MzcyVjI3SDcyLjYyMTdWMjguNVpNNzIuNjA2MSAyOC41SDcyLjYyMTdWMjdINzIuNjA2MVYyOC41Wk03Mi41OTA2IDI4LjVINzIuNjA2MVYyN0g3Mi41OTA2VjI4LjVaTTcyLjU3NTEgMjguNUg3Mi41OTA2VjI3SDcyLjU3NTFWMjguNVpNNzIuNTU5NiAyOC41SDcyLjU3NTFWMjdINzIuNTU5NlYyOC41Wk03Mi41NDQxIDI4LjVINzIuNTU5NlYyN0g3Mi41NDQxVjI4LjVaTTcyLjUyODYgMjguNUg3Mi41NDQxVjI3SDcyLjUyODZWMjguNVpNNzIuNTEzMSAyOC41SDcyLjUyODZWMjdINzIuNTEzMVYyOC41Wk03Mi40OTc3IDI4LjVINzIuNTEzMVYyN0g3Mi40OTc3VjI4LjVaTTcyLjQ4MjIgMjguNUg3Mi40OTc3VjI3SDcyLjQ4MjJWMjguNVpNNzIuNDY2OCAyOC41SDcyLjQ4MjJWMjdINzIuNDY2OFYyOC41Wk03Mi40NTE0IDI4LjVINzIuNDY2OFYyN0g3Mi40NTE0VjI4LjVaTTcyLjQzNTkgMjguNUg3Mi40NTE0VjI3SDcyLjQzNTlWMjguNVpNNzIuNDIwNSAyOC41SDcyLjQzNTlWMjdINzIuNDIwNVYyOC41Wk03Mi40MDUyIDI4LjVINzIuNDIwNVYyN0g3Mi40MDUyVjI4LjVaTTcyLjM4OTggMjguNUg3Mi40MDUyVjI3SDcyLjM4OThWMjguNVpNNzIuMzc0NCAyOC41SDcyLjM4OThWMjdINzIuMzc0NFYyOC41Wk03Mi4zNTkgMjguNUg3Mi4zNzQ0VjI3SDcyLjM1OVYyOC41Wk03Mi4zNDM3IDI4LjVINzIuMzU5VjI3SDcyLjM0MzdWMjguNVpNNzIuMzI4NCAyOC41SDcyLjM0MzdWMjdINzIuMzI4NFYyOC41Wk03Mi4zMTMgMjguNUg3Mi4zMjg0VjI3SDcyLjMxM1YyOC41Wk03Mi4yOTc3IDI4LjVINzIuMzEzVjI3SDcyLjI5NzdWMjguNVpNNzIuMjgyNCAyOC41SDcyLjI5NzdWMjdINzIuMjgyNFYyOC41Wk03Mi4yNjcxIDI4LjVINzIuMjgyNFYyN0g3Mi4yNjcxVjI4LjVaTTcyLjI1MTkgMjguNUg3Mi4yNjcxVjI3SDcyLjI1MTlWMjguNVpNNzIuMjM2NiAyOC41SDcyLjI1MTlWMjdINzIuMjM2NlYyOC41Wk03Mi4yMjEzIDI4LjVINzIuMjM2NlYyN0g3Mi4yMjEzVjI4LjVaTTcyLjIwNjEgMjguNUg3Mi4yMjEzVjI3SDcyLjIwNjFWMjguNVpNNzIuMTkwOSAyOC41SDcyLjIwNjFWMjdINzIuMTkwOVYyOC41Wk03Mi4xNzU2IDI4LjVINzIuMTkwOVYyN0g3Mi4xNzU2VjI4LjVaTTcyLjE2MDQgMjguNUg3Mi4xNzU2VjI3SDcyLjE2MDRWMjguNVpNNzIuMTQ1MiAyOC41SDcyLjE2MDRWMjdINzIuMTQ1MlYyOC41Wk03Mi4xMzAxIDI4LjVINzIuMTQ1MlYyN0g3Mi4xMzAxVjI4LjVaTTcyLjExNDkgMjguNUg3Mi4xMzAxVjI3SDcyLjExNDlWMjguNVpNNzIuMDk5NyAyOC41SDcyLjExNDlWMjdINzIuMDk5N1YyOC41Wk03Mi4wODQ2IDI4LjVINzIuMDk5N1YyN0g3Mi4wODQ2VjI4LjVaTTcyLjA2OTQgMjguNUg3Mi4wODQ2VjI3SDcyLjA2OTRWMjguNVpNNzIuMDU0MyAyOC41SDcyLjA2OTRWMjdINzIuMDU0M1YyOC41Wk03Mi4wMzkyIDI4LjVINzIuMDU0M1YyN0g3Mi4wMzkyVjI4LjVaTTcyLjAyNDEgMjguNUg3Mi4wMzkyVjI3SDcyLjAyNDFWMjguNVpNNzIuMDA5IDI4LjVINzIuMDI0MVYyN0g3Mi4wMDlWMjguNVpNNzEuOTkzOSAyOC41SDcyLjAwOVYyN0g3MS45OTM5VjI4LjVaTTcxLjk3ODggMjguNUg3MS45OTM5VjI3SDcxLjk3ODhWMjguNVpNNzEuOTYzOCAyOC41SDcxLjk3ODhWMjdINzEuOTYzOFYyOC41Wk03MS45NDg3IDI4LjVINzEuOTYzOFYyN0g3MS45NDg3VjI4LjVaTTcxLjkzMzcgMjguNUg3MS45NDg3VjI3SDcxLjkzMzdWMjguNVpNNzEuOTE4NiAyOC41SDcxLjkzMzdWMjdINzEuOTE4NlYyOC41Wk03MS45MDM2IDI4LjVINzEuOTE4NlYyN0g3MS45MDM2VjI4LjVaTTcxLjg4ODYgMjguNUg3MS45MDM2VjI3SDcxLjg4ODZWMjguNVpNNzEuODczNiAyOC41SDcxLjg4ODZWMjdINzEuODczNlYyOC41Wk03MS44NTg3IDI4LjVINzEuODczNlYyN0g3MS44NTg3VjI4LjVaTTcxLjg0MzcgMjguNUg3MS44NTg3VjI3SDcxLjg0MzdWMjguNVpNNzEuODI4NyAyOC41SDcxLjg0MzdWMjdINzEuODI4N1YyOC41Wk03MS44MTM4IDI4LjVINzEuODI4N1YyN0g3MS44MTM4VjI4LjVaTTcxLjc5ODggMjguNUg3MS44MTM4VjI3SDcxLjc5ODhWMjguNVpNNzEuNzgzOSAyOC41SDcxLjc5ODhWMjdINzEuNzgzOVYyOC41Wk03MS43NjkgMjguNUg3MS43ODM5VjI3SDcxLjc2OVYyOC41Wk03MS43NTQxIDI4LjVINzEuNzY5VjI3SDcxLjc1NDFWMjguNVpNNzEuNzM5MiAyOC41SDcxLjc1NDFWMjdINzEuNzM5MlYyOC41Wk03MS43MjQzIDI4LjVINzEuNzM5MlYyN0g3MS43MjQzVjI4LjVaTTcxLjcwOTUgMjguNUg3MS43MjQzVjI3SDcxLjcwOTVWMjguNVpNNzEuNjk0NiAyOC41SDcxLjcwOTVWMjdINzEuNjk0NlYyOC41Wk03MS42Nzk4IDI4LjVINzEuNjk0NlYyN0g3MS42Nzk4VjI4LjVaTTcxLjY2NDkgMjguNUg3MS42Nzk4VjI3SDcxLjY2NDlWMjguNVpNNzEuNjUwMSAyOC41SDcxLjY2NDlWMjdINzEuNjUwMVYyOC41Wk03MS42MzUzIDI4LjVINzEuNjUwMVYyN0g3MS42MzUzVjI4LjVaTTcxLjYyMDUgMjguNUg3MS42MzUzVjI3SDcxLjYyMDVWMjguNVpNNzEuNjA1NyAyOC41SDcxLjYyMDVWMjdINzEuNjA1N1YyOC41Wk03MS41OTEgMjguNUg3MS42MDU3VjI3SDcxLjU5MVYyOC41Wk03MS41NzYyIDI4LjVINzEuNTkxVjI3SDcxLjU3NjJWMjguNVpNNzEuNTYxNCAyOC41SDcxLjU3NjJWMjdINzEuNTYxNFYyOC41Wk03MS41NDY3IDI4LjVINzEuNTYxNFYyN0g3MS41NDY3VjI4LjVaTTcxLjUzMiAyOC41SDcxLjU0NjdWMjdINzEuNTMyVjI4LjVaTTcxLjUxNzIgMjguNUg3MS41MzJWMjdINzEuNTE3MlYyOC41Wk03MS41MDI1IDI4LjVINzEuNTE3MlYyN0g3MS41MDI1VjI4LjVaTTcxLjQ4NzggMjguNUg3MS41MDI1VjI3SDcxLjQ4NzhWMjguNVpNNzEuNDczMiAyOC41SDcxLjQ4NzhWMjdINzEuNDczMlYyOC41Wk03MS40NTg1IDI4LjVINzEuNDczMlYyN0g3MS40NTg1VjI4LjVaTTcxLjQ0MzggMjguNUg3MS40NTg1VjI3SDcxLjQ0MzhWMjguNVpNNzEuNDI5MiAyOC41SDcxLjQ0MzhWMjdINzEuNDI5MlYyOC41Wk03MS40MTQ1IDI4LjVINzEuNDI5MlYyN0g3MS40MTQ1VjI4LjVaTTcxLjM5OTkgMjguNUg3MS40MTQ1VjI3SDcxLjM5OTlWMjguNVpNNzEuMzg1MyAyOC41SDcxLjM5OTlWMjdINzEuMzg1M1YyOC41Wk03MS4zNzA3IDI4LjVINzEuMzg1M1YyN0g3MS4zNzA3VjI4LjVaTTcxLjM1NjEgMjguNUg3MS4zNzA3VjI3SDcxLjM1NjFWMjguNVpNNzEuMzQxNSAyOC41SDcxLjM1NjFWMjdINzEuMzQxNVYyOC41Wk03MS4zMjY5IDI4LjVINzEuMzQxNVYyN0g3MS4zMjY5VjI4LjVaTTcxLjMxMjQgMjguNUg3MS4zMjY5VjI3SDcxLjMxMjRWMjguNVpNNzEuMjk3OCAyOC41SDcxLjMxMjRWMjdINzEuMjk3OFYyOC41Wk03MS4yODMzIDI4LjVINzEuMjk3OFYyN0g3MS4yODMzVjI4LjVaTTcxLjI2ODggMjguNUg3MS4yODMzVjI3SDcxLjI2ODhWMjguNVpNNzEuMjU0MyAyOC41SDcxLjI2ODhWMjdINzEuMjU0M1YyOC41Wk03MS4yMzk4IDI4LjVINzEuMjU0M1YyN0g3MS4yMzk4VjI4LjVaTTcxLjIyNTMgMjguNUg3MS4yMzk4VjI3SDcxLjIyNTNWMjguNVpNNzEuMjEwOCAyOC41SDcxLjIyNTNWMjdINzEuMjEwOFYyOC41Wk03MS4xOTYzIDI4LjVINzEuMjEwOFYyN0g3MS4xOTYzVjI4LjVaTTcxLjE4MTkgMjguNUg3MS4xOTYzVjI3SDcxLjE4MTlWMjguNVpNNzEuMTY3NCAyOC41SDcxLjE4MTlWMjdINzEuMTY3NFYyOC41Wk03MS4xNTMgMjguNUg3MS4xNjc0VjI3SDcxLjE1M1YyOC41Wk03MS4xMzg2IDI4LjVINzEuMTUzVjI3SDcxLjEzODZWMjguNVpNNzEuMTI0MiAyOC41SDcxLjEzODZWMjdINzEuMTI0MlYyOC41Wk03MS4xMDk4IDI4LjVINzEuMTI0MlYyN0g3MS4xMDk4VjI4LjVaTTcxLjA5NTQgMjguNUg3MS4xMDk4VjI3SDcxLjA5NTRWMjguNVpNNzEuMDgxIDI4LjVINzEuMDk1NFYyN0g3MS4wODFWMjguNVpNNzEuMDY2NiAyOC41SDcxLjA4MVYyN0g3MS4wNjY2VjI4LjVaTTcxLjA1MjMgMjguNUg3MS4wNjY2VjI3SDcxLjA1MjNWMjguNVpNNzEuMDM3OSAyOC41SDcxLjA1MjNWMjdINzEuMDM3OVYyOC41Wk03MS4wMjM2IDI4LjVINzEuMDM3OVYyN0g3MS4wMjM2VjI4LjVaTTcxLjAwOTMgMjguNUg3MS4wMjM2VjI3SDcxLjAwOTNWMjguNVpNNzAuOTk1IDI4LjVINzEuMDA5M1YyN0g3MC45OTVWMjguNVpNNzAuOTgwNyAyOC41SDcwLjk5NVYyN0g3MC45ODA3VjI4LjVaTTcwLjk2NjQgMjguNUg3MC45ODA3VjI3SDcwLjk2NjRWMjguNVpNNzAuOTUyMSAyOC41SDcwLjk2NjRWMjdINzAuOTUyMVYyOC41Wk03MC45Mzc5IDI4LjVINzAuOTUyMVYyN0g3MC45Mzc5VjI4LjVaTTcwLjkyMzYgMjguNUg3MC45Mzc5VjI3SDcwLjkyMzZWMjguNVpNNzAuOTA5NCAyOC41SDcwLjkyMzZWMjdINzAuOTA5NFYyOC41Wk03MC44OTUyIDI4LjVINzAuOTA5NFYyN0g3MC44OTUyVjI4LjVaTTcwLjg4MDkgMjguNUg3MC44OTUyVjI3SDcwLjg4MDlWMjguNVpNNzAuODY2NyAyOC41SDcwLjg4MDlWMjdINzAuODY2N1YyOC41Wk03MC44NTI1IDI4LjVINzAuODY2N1YyN0g3MC44NTI1VjI4LjVaTTcwLjgzODQgMjguNUg3MC44NTI1VjI3SDcwLjgzODRWMjguNVpNNzAuODI0MiAyOC41SDcwLjgzODRWMjdINzAuODI0MlYyOC41Wk03MC44MSAyOC41SDcwLjgyNDJWMjdINzAuODFWMjguNVpNNzAuNzk1OSAyOC41SDcwLjgxVjI3SDcwLjc5NTlWMjguNVpNNzAuNzgxNyAyOC41SDcwLjc5NTlWMjdINzAuNzgxN1YyOC41Wk03MC43Njc2IDI4LjVINzAuNzgxN1YyN0g3MC43Njc2VjI4LjVaTTcwLjc1MzUgMjguNUg3MC43Njc2VjI3SDcwLjc1MzVWMjguNVpNNzAuNzM5NCAyOC41SDcwLjc1MzVWMjdINzAuNzM5NFYyOC41Wk03MC43MjUzIDI4LjVINzAuNzM5NFYyN0g3MC43MjUzVjI4LjVaTTcwLjcxMTIgMjguNUg3MC43MjUzVjI3SDcwLjcxMTJWMjguNVpNNzAuNjk3MiAyOC41SDcwLjcxMTJWMjdINzAuNjk3MlYyOC41Wk03MC42ODMxIDI4LjVINzAuNjk3MlYyN0g3MC42ODMxVjI4LjVaTTcwLjY2OTEgMjguNUg3MC42ODMxVjI3SDcwLjY2OTFWMjguNVpNNzAuNjU1IDI4LjVINzAuNjY5MVYyN0g3MC42NTVWMjguNVpNNzAuNjQxIDI4LjVINzAuNjU1VjI3SDcwLjY0MVYyOC41Wk03MC42MjcgMjguNUg3MC42NDFWMjdINzAuNjI3VjI4LjVaTTcwLjYxMyAyOC41SDcwLjYyN1YyN0g3MC42MTNWMjguNVpNNzAuNTk5IDI4LjVINzAuNjEzVjI3SDcwLjU5OVYyOC41Wk03MC41ODUgMjguNUg3MC41OTlWMjdINzAuNTg1VjI4LjVaTTcwLjU3MTEgMjguNUg3MC41ODVWMjdINzAuNTcxMVYyOC41Wk03MC41NTcxIDI4LjVINzAuNTcxMVYyN0g3MC41NTcxVjI4LjVaTTcwLjU0MzIgMjguNUg3MC41NTcxVjI3SDcwLjU0MzJWMjguNVpNNzAuNTI5MiAyOC41SDcwLjU0MzJWMjdINzAuNTI5MlYyOC41Wk03MC41MTUzIDI4LjVINzAuNTI5MlYyN0g3MC41MTUzVjI4LjVaTTcwLjUwMTQgMjguNUg3MC41MTUzVjI3SDcwLjUwMTRWMjguNVpNNzAuNDg3NSAyOC41SDcwLjUwMTRWMjdINzAuNDg3NVYyOC41Wk03MC40NzM2IDI4LjVINzAuNDg3NVYyN0g3MC40NzM2VjI4LjVaTTcwLjQ1OTggMjguNUg3MC40NzM2VjI3SDcwLjQ1OThWMjguNVpNNzAuNDQ1OSAyOC41SDcwLjQ1OThWMjdINzAuNDQ1OVYyOC41Wk03MC40MzIgMjguNUg3MC40NDU5VjI3SDcwLjQzMlYyOC41Wk03MC40MTgyIDI4LjVINzAuNDMyVjI3SDcwLjQxODJWMjguNVpNNzAuNDA0NCAyOC41SDcwLjQxODJWMjdINzAuNDA0NFYyOC41Wk03MC4zOTA2IDI4LjVINzAuNDA0NFYyN0g3MC4zOTA2VjI4LjVaTTcwLjM3NjggMjguNUg3MC4zOTA2VjI3SDcwLjM3NjhWMjguNVpNNzAuMzYzIDI4LjVINzAuMzc2OFYyN0g3MC4zNjNWMjguNVpNNzAuMzQ5MiAyOC41SDcwLjM2M1YyN0g3MC4zNDkyVjI4LjVaTTcwLjMzNTQgMjguNUg3MC4zNDkyVjI3SDcwLjMzNTRWMjguNVpNNzAuMzIxNiAyOC41SDcwLjMzNTRWMjdINzAuMzIxNlYyOC41Wk03MC4zMDc5IDI4LjVINzAuMzIxNlYyN0g3MC4zMDc5VjI4LjVaTTcwLjI5NDIgMjguNUg3MC4zMDc5VjI3SDcwLjI5NDJWMjguNVpNNzAuMjgwNCAyOC41SDcwLjI5NDJWMjdINzAuMjgwNFYyOC41Wk03MC4yNjY3IDI4LjVINzAuMjgwNFYyN0g3MC4yNjY3VjI4LjVaTTcwLjI1MyAyOC41SDcwLjI2NjdWMjdINzAuMjUzVjI4LjVaTTcwLjIzOTMgMjguNUg3MC4yNTNWMjdINzAuMjM5M1YyOC41Wk03MC4yMjU2IDI4LjVINzAuMjM5M1YyN0g3MC4yMjU2VjI4LjVaTTcwLjIxMiAyOC41SDcwLjIyNTZWMjdINzAuMjEyVjI4LjVaTTcwLjE5ODMgMjguNUg3MC4yMTJWMjdINzAuMTk4M1YyOC41Wk03MC4xODQ3IDI4LjVINzAuMTk4M1YyN0g3MC4xODQ3VjI4LjVaTTcwLjE3MSAyOC41SDcwLjE4NDdWMjdINzAuMTcxVjI4LjVaTTcwLjE1NzQgMjguNUg3MC4xNzFWMjdINzAuMTU3NFYyOC41Wk03MC4xNDM4IDI4LjVINzAuMTU3NFYyN0g3MC4xNDM4VjI4LjVaTTcwLjEzMDIgMjguNUg3MC4xNDM4VjI3SDcwLjEzMDJWMjguNVpNNzAuMTE2NiAyOC41SDcwLjEzMDJWMjdINzAuMTE2NlYyOC41Wk03MC4xMDMgMjguNUg3MC4xMTY2VjI3SDcwLjEwM1YyOC41Wk03MC4wODk1IDI4LjVINzAuMTAzVjI3SDcwLjA4OTVWMjguNVpNNzAuMDc1OSAyOC41SDcwLjA4OTVWMjdINzAuMDc1OVYyOC41Wk03MC4wNjI0IDI4LjVINzAuMDc1OVYyN0g3MC4wNjI0VjI4LjVaTTcwLjA0ODggMjguNUg3MC4wNjI0VjI3SDcwLjA0ODhWMjguNVpNNzAuMDM1MyAyOC41SDcwLjA0ODhWMjdINzAuMDM1M1YyOC41Wk03MC4wMjE4IDI4LjVINzAuMDM1M1YyN0g3MC4wMjE4VjI4LjVaTTcwLjAwODMgMjguNUg3MC4wMjE4VjI3SDcwLjAwODNWMjguNVpNNjkuOTk0OCAyOC41SDcwLjAwODNWMjdINjkuOTk0OFYyOC41Wk02OS45ODE0IDI4LjVINjkuOTk0OFYyN0g2OS45ODE0VjI4LjVaTTY5Ljk2NzkgMjguNUg2OS45ODE0VjI3SDY5Ljk2NzlWMjguNVpNNjkuOTU0NCAyOC41SDY5Ljk2NzlWMjdINjkuOTU0NFYyOC41Wk02OS45NDEgMjguNUg2OS45NTQ0VjI3SDY5Ljk0MVYyOC41Wk02OS45Mjc2IDI4LjVINjkuOTQxVjI3SDY5LjkyNzZWMjguNVpNNjkuOTE0MiAyOC41SDY5LjkyNzZWMjdINjkuOTE0MlYyOC41Wk02OS45MDA4IDI4LjVINjkuOTE0MlYyN0g2OS45MDA4VjI4LjVaTTY5Ljg4NzQgMjguNUg2OS45MDA4VjI3SDY5Ljg4NzRWMjguNVpNNjkuODc0IDI4LjVINjkuODg3NFYyN0g2OS44NzRWMjguNVpNNjkuODYwNiAyOC41SDY5Ljg3NFYyN0g2OS44NjA2VjI4LjVaTTY5Ljg0NzIgMjguNUg2OS44NjA2VjI3SDY5Ljg0NzJWMjguNVpNNjkuODMzOSAyOC41SDY5Ljg0NzJWMjdINjkuODMzOVYyOC41Wk02OS44MjA2IDI4LjVINjkuODMzOVYyN0g2OS44MjA2VjI4LjVaTTY5LjgwNzIgMjguNUg2OS44MjA2VjI3SDY5LjgwNzJWMjguNVpNNjkuNzkzOSAyOC41SDY5LjgwNzJWMjdINjkuNzkzOVYyOC41Wk02OS43ODA2IDI4LjVINjkuNzkzOVYyN0g2OS43ODA2VjI4LjVaTTY5Ljc2NzMgMjguNUg2OS43ODA2VjI3SDY5Ljc2NzNWMjguNVpNNjkuNzU0IDI4LjVINjkuNzY3M1YyN0g2OS43NTRWMjguNVpNNjkuNzQwOCAyOC41SDY5Ljc1NFYyN0g2OS43NDA4VjI4LjVaTTY5LjcyNzUgMjguNUg2OS43NDA4VjI3SDY5LjcyNzVWMjguNVpNNjkuNzE0MyAyOC41SDY5LjcyNzVWMjdINjkuNzE0M1YyOC41Wk02OS43MDEgMjguNUg2OS43MTQzVjI3SDY5LjcwMVYyOC41Wk02OS42ODc4IDI4LjVINjkuNzAxVjI3SDY5LjY4NzhWMjguNVpNNjkuNjc0NiAyOC41SDY5LjY4NzhWMjdINjkuNjc0NlYyOC41Wk02OS42NjE0IDI4LjVINjkuNjc0NlYyN0g2OS42NjE0VjI4LjVaTTY5LjY0ODIgMjguNUg2OS42NjE0VjI3SDY5LjY0ODJWMjguNVpNNjkuNjM1IDI4LjVINjkuNjQ4MlYyN0g2OS42MzVWMjguNVpNNjkuNjIxOSAyOC41SDY5LjYzNVYyN0g2OS42MjE5VjI4LjVaTTY5LjYwODcgMjguNUg2OS42MjE5VjI3SDY5LjYwODdWMjguNVpNNjkuNTk1NiAyOC41SDY5LjYwODdWMjdINjkuNTk1NlYyOC41Wk02OS41ODI0IDI4LjVINjkuNTk1NlYyN0g2OS41ODI0VjI4LjVaTTY5LjU2OTMgMjguNUg2OS41ODI0VjI3SDY5LjU2OTNWMjguNVpNNjkuNTU2MiAyOC41SDY5LjU2OTNWMjdINjkuNTU2MlYyOC41Wk02OS41NDMxIDI4LjVINjkuNTU2MlYyN0g2OS41NDMxVjI4LjVaTTY5LjUzIDI4LjVINjkuNTQzMVYyN0g2OS41M1YyOC41Wk02OS41MTY5IDI4LjVINjkuNTNWMjdINjkuNTE2OVYyOC41Wk02OS41MDM5IDI4LjVINjkuNTE2OVYyN0g2OS41MDM5VjI4LjVaTTY5LjQ5MDggMjguNUg2OS41MDM5VjI3SDY5LjQ5MDhWMjguNVpNNjkuNDc3OCAyOC41SDY5LjQ5MDhWMjdINjkuNDc3OFYyOC41Wk02OS40NjQ4IDI4LjVINjkuNDc3OFYyN0g2OS40NjQ4VjI4LjVaTTY5LjQ1MTcgMjguNUg2OS40NjQ4VjI3SDY5LjQ1MTdWMjguNVpNNjkuNDM4NyAyOC41SDY5LjQ1MTdWMjdINjkuNDM4N1YyOC41Wk02OS40MjU3IDI4LjVINjkuNDM4N1YyN0g2OS40MjU3VjI4LjVaTTY5LjQxMjggMjguNUg2OS40MjU3VjI3SDY5LjQxMjhWMjguNVpNNjkuMzk5OCAyOC41SDY5LjQxMjhWMjdINjkuMzk5OFYyOC41Wk02OS4zODY4IDI4LjVINjkuMzk5OFYyN0g2OS4zODY4VjI4LjVaTTY5LjM3MzkgMjguNUg2OS4zODY4VjI3SDY5LjM3MzlWMjguNVpNNjkuMzYwOSAyOC41SDY5LjM3MzlWMjdINjkuMzYwOVYyOC41Wk02OS4zNDggMjguNUg2OS4zNjA5VjI3SDY5LjM0OFYyOC41Wk02OS4zMzUxIDI4LjVINjkuMzQ4VjI3SDY5LjMzNTFWMjguNVpNNjkuMzIyMiAyOC41SDY5LjMzNTFWMjdINjkuMzIyMlYyOC41Wk02OS4zMDkzIDI4LjVINjkuMzIyMlYyN0g2OS4zMDkzVjI4LjVaTTY5LjI5NjQgMjguNUg2OS4zMDkzVjI3SDY5LjI5NjRWMjguNVpNNjkuMjgzNiAyOC41SDY5LjI5NjRWMjdINjkuMjgzNlYyOC41Wk02OS4yNzA3IDI4LjVINjkuMjgzNlYyN0g2OS4yNzA3VjI4LjVaTTY5LjI1NzggMjguNUg2OS4yNzA3VjI3SDY5LjI1NzhWMjguNVpNNjkuMjQ1IDI4LjVINjkuMjU3OFYyN0g2OS4yNDVWMjguNVpNNjkuMjMyMiAyOC41SDY5LjI0NVYyN0g2OS4yMzIyVjI4LjVaTTY5LjIxOTQgMjguNUg2OS4yMzIyVjI3SDY5LjIxOTRWMjguNVpNNjkuMjA2NiAyOC41SDY5LjIxOTRWMjdINjkuMjA2NlYyOC41Wk02OS4xOTM4IDI4LjVINjkuMjA2NlYyN0g2OS4xOTM4VjI4LjVaTTY5LjE4MSAyOC41SDY5LjE5MzhWMjdINjkuMTgxVjI4LjVaTTY5LjE2ODIgMjguNUg2OS4xODFWMjdINjkuMTY4MlYyOC41Wk02OS4xNTU1IDI4LjVINjkuMTY4MlYyN0g2OS4xNTU1VjI4LjVaTTY5LjE0MjcgMjguNUg2OS4xNTU1VjI3SDY5LjE0MjdWMjguNVpNNjkuMTMgMjguNUg2OS4xNDI3VjI3SDY5LjEzVjI4LjVaTTY5LjExNzMgMjguNUg2OS4xM1YyN0g2OS4xMTczVjI4LjVaTTY5LjEwNDYgMjguNUg2OS4xMTczVjI3SDY5LjEwNDZWMjguNVpNNjkuMDkxOSAyOC41SDY5LjEwNDZWMjdINjkuMDkxOVYyOC41Wk02OS4wNzkyIDI4LjVINjkuMDkxOVYyN0g2OS4wNzkyVjI4LjVaTTY5LjA2NjUgMjguNUg2OS4wNzkyVjI3SDY5LjA2NjVWMjguNVpNNjkuMDUzOCAyOC41SDY5LjA2NjVWMjdINjkuMDUzOFYyOC41Wk02OS4wNDEyIDI4LjVINjkuMDUzOFYyN0g2OS4wNDEyVjI4LjVaTTY5LjAyODYgMjguNUg2OS4wNDEyVjI3SDY5LjAyODZWMjguNVpNNjkuMDE1OSAyOC41SDY5LjAyODZWMjdINjkuMDE1OVYyOC41Wk02OS4wMDMzIDI4LjVINjkuMDE1OVYyN0g2OS4wMDMzVjI4LjVaTTY4Ljk5MDcgMjguNUg2OS4wMDMzVjI3SDY4Ljk5MDdWMjguNVpNNjguOTc4MSAyOC41SDY4Ljk5MDdWMjdINjguOTc4MVYyOC41Wk02OC45NjU1IDI4LjVINjguOTc4MVYyN0g2OC45NjU1VjI4LjVaTTY4Ljk1MjkgMjguNUg2OC45NjU1VjI3SDY4Ljk1MjlWMjguNVpNNjguOTQwNCAyOC41SDY4Ljk1MjlWMjdINjguOTQwNFYyOC41Wk02OC45Mjc4IDI4LjVINjguOTQwNFYyN0g2OC45Mjc4VjI4LjVaTTY4LjkxNTMgMjguNUg2OC45Mjc4VjI3SDY4LjkxNTNWMjguNVpNNjguOTAyOCAyOC41SDY4LjkxNTNWMjdINjguOTAyOFYyOC41Wk02OC44OTAzIDI4LjVINjguOTAyOFYyN0g2OC44OTAzVjI4LjVaTTY4Ljg3NzcgMjguNUg2OC44OTAzVjI3SDY4Ljg3NzdWMjguNVpNNjguODY1MyAyOC41SDY4Ljg3NzdWMjdINjguODY1M1YyOC41Wk02OC44NTI4IDI4LjVINjguODY1M1YyN0g2OC44NTI4VjI4LjVaTTY4Ljg0MDMgMjguNUg2OC44NTI4VjI3SDY4Ljg0MDNWMjguNVpNNjguODI3OCAyOC41SDY4Ljg0MDNWMjdINjguODI3OFYyOC41Wk02OC44MTU0IDI4LjVINjguODI3OFYyN0g2OC44MTU0VjI4LjVaTTY4LjgwMyAyOC41SDY4LjgxNTRWMjdINjguODAzVjI4LjVaTTY4Ljc5MDUgMjguNUg2OC44MDNWMjdINjguNzkwNVYyOC41Wk02OC43NzgxIDI4LjVINjguNzkwNVYyN0g2OC43NzgxVjI4LjVaTTY4Ljc2NTcgMjguNUg2OC43NzgxVjI3SDY4Ljc2NTdWMjguNVpNNjguNzUzMyAyOC41SDY4Ljc2NTdWMjdINjguNzUzM1YyOC41Wk02OC43NDEgMjguNUg2OC43NTMzVjI3SDY4Ljc0MVYyOC41Wk02OC43Mjg2IDI4LjVINjguNzQxVjI3SDY4LjcyODZWMjguNVpNNjguNzE2MiAyOC41SDY4LjcyODZWMjdINjguNzE2MlYyOC41Wk02OC43MDM5IDI4LjVINjguNzE2MlYyN0g2OC43MDM5VjI4LjVaTTY4LjY5MTYgMjguNUg2OC43MDM5VjI3SDY4LjY5MTZWMjguNVpNNjguNjc5MiAyOC41SDY4LjY5MTZWMjdINjguNjc5MlYyOC41Wk02OC42NjY5IDI4LjVINjguNjc5MlYyN0g2OC42NjY5VjI4LjVaTTY4LjY1NDYgMjguNUg2OC42NjY5VjI3SDY4LjY1NDZWMjguNVpNNjguNjQyMyAyOC41SDY4LjY1NDZWMjdINjguNjQyM1YyOC41Wk02OC42MzAxIDI4LjVINjguNjQyM1YyN0g2OC42MzAxVjI4LjVaTTY4LjYxNzggMjguNUg2OC42MzAxVjI3SDY4LjYxNzhWMjguNVpNNjguNjA1NSAyOC41SDY4LjYxNzhWMjdINjguNjA1NVYyOC41Wk02OC41OTMzIDI4LjVINjguNjA1NVYyN0g2OC41OTMzVjI4LjVaTTY4LjU4MTEgMjguNUg2OC41OTMzVjI3SDY4LjU4MTFWMjguNVpNNjguNTY4OCAyOC41SDY4LjU4MTFWMjdINjguNTY4OFYyOC41Wk02OC41NTY2IDI4LjVINjguNTY4OFYyN0g2OC41NTY2VjI4LjVaTTY4LjU0NDQgMjguNUg2OC41NTY2VjI3SDY4LjU0NDRWMjguNVpNNjguNTMyMyAyOC41SDY4LjU0NDRWMjdINjguNTMyM1YyOC41Wk02OC41MjAxIDI4LjVINjguNTMyM1YyN0g2OC41MjAxVjI4LjVaTTY4LjUwNzkgMjguNUg2OC41MjAxVjI3SDY4LjUwNzlWMjguNVpNNjguNDk1OCAyOC41SDY4LjUwNzlWMjdINjguNDk1OFYyOC41Wk02OC40ODM2IDI4LjVINjguNDk1OFYyN0g2OC40ODM2VjI4LjVaTTY4LjQ3MTUgMjguNUg2OC40ODM2VjI3SDY4LjQ3MTVWMjguNVpNNjguNDU5NCAyOC41SDY4LjQ3MTVWMjdINjguNDU5NFYyOC41Wk02OC40NDczIDI4LjVINjguNDU5NFYyN0g2OC40NDczVjI4LjVaTTY4LjQzNTIgMjguNUg2OC40NDczVjI3SDY4LjQzNTJWMjguNVpNNjguNDIzMSAyOC41SDY4LjQzNTJWMjdINjguNDIzMVYyOC41Wk02OC40MTEgMjguNUg2OC40MjMxVjI3SDY4LjQxMVYyOC41Wk02OC4zOTkgMjguNUg2OC40MTFWMjdINjguMzk5VjI4LjVaTTY4LjM4NjkgMjguNUg2OC4zOTlWMjdINjguMzg2OVYyOC41Wk02OC4zNzQ5IDI4LjVINjguMzg2OVYyN0g2OC4zNzQ5VjI4LjVaTTY4LjM2MjkgMjguNUg2OC4zNzQ5VjI3SDY4LjM2MjlWMjguNVpNNjguMzUwOSAyOC41SDY4LjM2MjlWMjdINjguMzUwOVYyOC41Wk02OC4zMzg5IDI4LjVINjguMzUwOVYyN0g2OC4zMzg5VjI4LjVaTTY4LjMyNjkgMjguNUg2OC4zMzg5VjI3SDY4LjMyNjlWMjguNVpNNjguMzE0OSAyOC41SDY4LjMyNjlWMjdINjguMzE0OVYyOC41Wk02OC4zMDI5IDI4LjVINjguMzE0OVYyN0g2OC4zMDI5VjI4LjVaTTY4LjI5MSAyOC41SDY4LjMwMjlWMjdINjguMjkxVjI4LjVaTTY4LjI3OSAyOC41SDY4LjI5MVYyN0g2OC4yNzlWMjguNVpNNjguMjY3MSAyOC41SDY4LjI3OVYyN0g2OC4yNjcxVjI4LjVaTTY4LjI1NTIgMjguNUg2OC4yNjcxVjI3SDY4LjI1NTJWMjguNVpNNjguMjQzMiAyOC41SDY4LjI1NTJWMjdINjguMjQzMlYyOC41Wk02OC4yMzEzIDI4LjVINjguMjQzMlYyN0g2OC4yMzEzVjI4LjVaTTY4LjIxOTUgMjguNUg2OC4yMzEzVjI3SDY4LjIxOTVWMjguNVpNNjguMjA3NiAyOC41SDY4LjIxOTVWMjdINjguMjA3NlYyOC41Wk02OC4xOTU3IDI4LjVINjguMjA3NlYyN0g2OC4xOTU3VjI4LjVaTTY4LjE4MzkgMjguNUg2OC4xOTU3VjI3SDY4LjE4MzlWMjguNVpNNjguMTcyIDI4LjVINjguMTgzOVYyN0g2OC4xNzJWMjguNVpNNjguMTYwMiAyOC41SDY4LjE3MlYyN0g2OC4xNjAyVjI4LjVaTTY4LjE0ODQgMjguNUg2OC4xNjAyVjI3SDY4LjE0ODRWMjguNVpNNjguMTM2NiAyOC41SDY4LjE0ODRWMjdINjguMTM2NlYyOC41Wk02OC4xMjQ4IDI4LjVINjguMTM2NlYyN0g2OC4xMjQ4VjI4LjVaTTY4LjExMyAyOC41SDY4LjEyNDhWMjdINjguMTEzVjI4LjVaTTY4LjEwMTIgMjguNUg2OC4xMTNWMjdINjguMTAxMlYyOC41Wk02OC4wODk0IDI4LjVINjguMTAxMlYyN0g2OC4wODk0VjI4LjVaTTY4LjA3NzcgMjguNUg2OC4wODk0VjI3SDY4LjA3NzdWMjguNVpNNjguMDY2IDI4LjVINjguMDc3N1YyN0g2OC4wNjZWMjguNVpNNjguMDU0MiAyOC41SDY4LjA2NlYyN0g2OC4wNTQyVjI4LjVaTTY4LjA0MjUgMjguNUg2OC4wNTQyVjI3SDY4LjA0MjVWMjguNVpNNjguMDMwOCAyOC41SDY4LjA0MjVWMjdINjguMDMwOFYyOC41Wk02OC4wMTkxIDI4LjVINjguMDMwOFYyN0g2OC4wMTkxVjI4LjVaTTY4LjAwNzQgMjguNUg2OC4wMTkxVjI3SDY4LjAwNzRWMjguNVpNNjcuOTk1OCAyOC41SDY4LjAwNzRWMjdINjcuOTk1OFYyOC41Wk02Ny45ODQxIDI4LjVINjcuOTk1OFYyN0g2Ny45ODQxVjI4LjVaTTY3Ljk3MjQgMjguNUg2Ny45ODQxVjI3SDY3Ljk3MjRWMjguNVpNNjcuOTYwOCAyOC41SDY3Ljk3MjRWMjdINjcuOTYwOFYyOC41Wk02Ny45NDkyIDI4LjVINjcuOTYwOFYyN0g2Ny45NDkyVjI4LjVaTTY3LjkzNzYgMjguNUg2Ny45NDkyVjI3SDY3LjkzNzZWMjguNVpNNjcuOTI2IDI4LjVINjcuOTM3NlYyN0g2Ny45MjZWMjguNVpNNjcuOTE0NCAyOC41SDY3LjkyNlYyN0g2Ny45MTQ0VjI4LjVaTTY3LjkwMjggMjguNUg2Ny45MTQ0VjI3SDY3LjkwMjhWMjguNVpNNjcuODkxMiAyOC41SDY3LjkwMjhWMjdINjcuODkxMlYyOC41Wk02Ny44Nzk3IDI4LjVINjcuODkxMlYyN0g2Ny44Nzk3VjI4LjVaTTY3Ljg2ODEgMjguNUg2Ny44Nzk3VjI3SDY3Ljg2ODFWMjguNVpNNjcuODU2NiAyOC41SDY3Ljg2ODFWMjdINjcuODU2NlYyOC41Wk02Ny44NDUxIDI4LjVINjcuODU2NlYyN0g2Ny44NDUxVjI4LjVaTTY3LjgzMzYgMjguNUg2Ny44NDUxVjI3SDY3LjgzMzZWMjguNVpNNjcuODIyMSAyOC41SDY3LjgzMzZWMjdINjcuODIyMVYyOC41Wk02Ny44MTA2IDI4LjVINjcuODIyMVYyN0g2Ny44MTA2VjI4LjVaTTY3Ljc5OTEgMjguNUg2Ny44MTA2VjI3SDY3Ljc5OTFWMjguNVpNNjcuNzg3NiAyOC41SDY3Ljc5OTFWMjdINjcuNzg3NlYyOC41Wk02Ny43NzYyIDI4LjVINjcuNzg3NlYyN0g2Ny43NzYyVjI4LjVaTTY3Ljc2NDcgMjguNUg2Ny43NzYyVjI3SDY3Ljc2NDdWMjguNVpNNjcuNzUzMyAyOC41SDY3Ljc2NDdWMjdINjcuNzUzM1YyOC41Wk02Ny43NDE5IDI4LjVINjcuNzUzM1YyN0g2Ny43NDE5VjI4LjVaTTY3LjczMDUgMjguNUg2Ny43NDE5VjI3SDY3LjczMDVWMjguNVpNNjcuNzE5MSAyOC41SDY3LjczMDVWMjdINjcuNzE5MVYyOC41Wk02Ny43MDc3IDI4LjVINjcuNzE5MVYyN0g2Ny43MDc3VjI4LjVaTTY3LjY5NjMgMjguNUg2Ny43MDc3VjI3SDY3LjY5NjNWMjguNVpNNjcuNjg0OSAyOC41SDY3LjY5NjNWMjdINjcuNjg0OVYyOC41Wk02Ny42NzM2IDI4LjVINjcuNjg0OVYyN0g2Ny42NzM2VjI4LjVaTTY3LjY2MjIgMjguNUg2Ny42NzM2VjI3SDY3LjY2MjJWMjguNVpNNjcuNjUwOSAyOC41SDY3LjY2MjJWMjdINjcuNjUwOVYyOC41Wk02Ny42Mzk2IDI4LjVINjcuNjUwOVYyN0g2Ny42Mzk2VjI4LjVaTTY3LjYyODMgMjguNUg2Ny42Mzk2VjI3SDY3LjYyODNWMjguNVpNNjcuNjE3IDI4LjVINjcuNjI4M1YyN0g2Ny42MTdWMjguNVpNNjcuNjA1NyAyOC41SDY3LjYxN1YyN0g2Ny42MDU3VjI4LjVaTTY3LjU5NDQgMjguNUg2Ny42MDU3VjI3SDY3LjU5NDRWMjguNVpNNjcuNTgzMiAyOC41SDY3LjU5NDRWMjdINjcuNTgzMlYyOC41Wk02Ny41NzE5IDI4LjVINjcuNTgzMlYyN0g2Ny41NzE5VjI4LjVaTTY3LjU2MDcgMjguNUg2Ny41NzE5VjI3SDY3LjU2MDdWMjguNVpNNjcuNTQ5NSAyOC41SDY3LjU2MDdWMjdINjcuNTQ5NVYyOC41Wk02Ny41MzgzIDI4LjVINjcuNTQ5NVYyN0g2Ny41MzgzVjI4LjVaTTY3LjUyNzEgMjguNUg2Ny41MzgzVjI3SDY3LjUyNzFWMjguNVpNNjcuNTE1OSAyOC41SDY3LjUyNzFWMjdINjcuNTE1OVYyOC41Wk02Ny41MDQ3IDI4LjVINjcuNTE1OVYyN0g2Ny41MDQ3VjI4LjVaTTY3LjQ5MzUgMjguNUg2Ny41MDQ3VjI3SDY3LjQ5MzVWMjguNVpNNjcuNDgyNCAyOC41SDY3LjQ5MzVWMjdINjcuNDgyNFYyOC41Wk02Ny40NzEyIDI4LjVINjcuNDgyNFYyN0g2Ny40NzEyVjI4LjVaTTY3LjQ2MDEgMjguNUg2Ny40NzEyVjI3SDY3LjQ2MDFWMjguNVpNNjcuNDQ4OSAyOC41SDY3LjQ2MDFWMjdINjcuNDQ4OVYyOC41Wk02Ny40Mzc4IDI4LjVINjcuNDQ4OVYyN0g2Ny40Mzc4VjI4LjVaTTY3LjQyNjcgMjguNUg2Ny40Mzc4VjI3SDY3LjQyNjdWMjguNVpNNjcuNDE1NiAyOC41SDY3LjQyNjdWMjdINjcuNDE1NlYyOC41Wk02Ny40MDQ2IDI4LjVINjcuNDE1NlYyN0g2Ny40MDQ2VjI4LjVaTTY3LjM5MzUgMjguNUg2Ny40MDQ2VjI3SDY3LjM5MzVWMjguNVpNNjcuMzgyNCAyOC41SDY3LjM5MzVWMjdINjcuMzgyNFYyOC41Wk02Ny4zNzE0IDI4LjVINjcuMzgyNFYyN0g2Ny4zNzE0VjI4LjVaTTY3LjM2MDQgMjguNUg2Ny4zNzE0VjI3SDY3LjM2MDRWMjguNVpNNjcuMzQ5NCAyOC41SDY3LjM2MDRWMjdINjcuMzQ5NFYyOC41Wk02Ny4zMzgzIDI4LjVINjcuMzQ5NFYyN0g2Ny4zMzgzVjI4LjVaTTY3LjMyNzMgMjguNUg2Ny4zMzgzVjI3SDY3LjMyNzNWMjguNVpNNjcuMzE2NCAyOC41SDY3LjMyNzNWMjdINjcuMzE2NFYyOC41Wk02Ny4zMDU0IDI4LjVINjcuMzE2NFYyN0g2Ny4zMDU0VjI4LjVaTTY3LjI5NDQgMjguNUg2Ny4zMDU0VjI3SDY3LjI5NDRWMjguNVpNNjcuMjgzNSAyOC41SDY3LjI5NDRWMjdINjcuMjgzNVYyOC41Wk02Ny4yNzI1IDI4LjVINjcuMjgzNVYyN0g2Ny4yNzI1VjI4LjVaTTY3LjI2MTYgMjguNUg2Ny4yNzI1VjI3SDY3LjI2MTZWMjguNVpNNjcuMjUwNyAyOC41SDY3LjI2MTZWMjdINjcuMjUwN1YyOC41Wk02Ny4yMzk4IDI4LjVINjcuMjUwN1YyN0g2Ny4yMzk4VjI4LjVaTTY3LjIyODkgMjguNUg2Ny4yMzk4VjI3SDY3LjIyODlWMjguNVpNNjcuMjE4IDI4LjVINjcuMjI4OVYyN0g2Ny4yMThWMjguNVpNNjcuMjA3MSAyOC41SDY3LjIxOFYyN0g2Ny4yMDcxVjI4LjVaTTY3LjE5NjMgMjguNUg2Ny4yMDcxVjI3SDY3LjE5NjNWMjguNVpNNjcuMTg1NCAyOC41SDY3LjE5NjNWMjdINjcuMTg1NFYyOC41Wk02Ny4xNzQ2IDI4LjVINjcuMTg1NFYyN0g2Ny4xNzQ2VjI4LjVaTTY3LjE2MzcgMjguNUg2Ny4xNzQ2VjI3SDY3LjE2MzdWMjguNVpNNjcuMTUyOSAyOC41SDY3LjE2MzdWMjdINjcuMTUyOVYyOC41Wk02Ny4xNDIxIDI4LjVINjcuMTUyOVYyN0g2Ny4xNDIxVjI4LjVaTTY3LjEzMTMgMjguNUg2Ny4xNDIxVjI3SDY3LjEzMTNWMjguNVpNNjcuMTIwNiAyOC41SDY3LjEzMTNWMjdINjcuMTIwNlYyOC41Wk02Ny4xMDk4IDI4LjVINjcuMTIwNlYyN0g2Ny4xMDk4VjI4LjVaTTY3LjA5OSAyOC41SDY3LjEwOThWMjdINjcuMDk5VjI4LjVaTTY3LjA4ODMgMjguNUg2Ny4wOTlWMjdINjcuMDg4M1YyOC41Wk02Ny4wNzc1IDI4LjVINjcuMDg4M1YyN0g2Ny4wNzc1VjI4LjVaTTY3LjA2NjggMjguNUg2Ny4wNzc1VjI3SDY3LjA2NjhWMjguNVpNNjcuMDU2MSAyOC41SDY3LjA2NjhWMjdINjcuMDU2MVYyOC41Wk02Ny4wNDU0IDI4LjVINjcuMDU2MVYyN0g2Ny4wNDU0VjI4LjVaTTY3LjAzNDcgMjguNUg2Ny4wNDU0VjI3SDY3LjAzNDdWMjguNVpNNjcuMDI0IDI4LjVINjcuMDM0N1YyN0g2Ny4wMjRWMjguNVpNNjcuMDEzNCAyOC41SDY3LjAyNFYyN0g2Ny4wMTM0VjI4LjVaTTY3LjAwMjcgMjguNUg2Ny4wMTM0VjI3SDY3LjAwMjdWMjguNVpNNjYuOTkyMSAyOC41SDY3LjAwMjdWMjdINjYuOTkyMVYyOC41Wk02Ni45ODE0IDI4LjVINjYuOTkyMVYyN0g2Ni45ODE0VjI4LjVaTTY2Ljk3MDggMjguNUg2Ni45ODE0VjI3SDY2Ljk3MDhWMjguNVpNNjYuOTYwMiAyOC41SDY2Ljk3MDhWMjdINjYuOTYwMlYyOC41Wk02Ni45NDk2IDI4LjVINjYuOTYwMlYyN0g2Ni45NDk2VjI4LjVaTTY2LjkzOSAyOC41SDY2Ljk0OTZWMjdINjYuOTM5VjI4LjVaTTY2LjkyODQgMjguNUg2Ni45MzlWMjdINjYuOTI4NFYyOC41Wk02Ni45MTc5IDI4LjVINjYuOTI4NFYyN0g2Ni45MTc5VjI4LjVaTTY2LjkwNzMgMjguNUg2Ni45MTc5VjI3SDY2LjkwNzNWMjguNVpNNjYuODk2OCAyOC41SDY2LjkwNzNWMjdINjYuODk2OFYyOC41Wk02Ni44ODYzIDI4LjVINjYuODk2OFYyN0g2Ni44ODYzVjI4LjVaTTY2Ljg3NTcgMjguNUg2Ni44ODYzVjI3SDY2Ljg3NTdWMjguNVpNNjYuODY1MiAyOC41SDY2Ljg3NTdWMjdINjYuODY1MlYyOC41Wk02Ni44NTQ3IDI4LjVINjYuODY1MlYyN0g2Ni44NTQ3VjI4LjVaTTY2Ljg0NDIgMjguNUg2Ni44NTQ3VjI3SDY2Ljg0NDJWMjguNVpNNjYuODMzOCAyOC41SDY2Ljg0NDJWMjdINjYuODMzOFYyOC41Wk02Ni44MjMzIDI4LjVINjYuODMzOFYyN0g2Ni44MjMzVjI4LjVaTTY2LjgxMjkgMjguNUg2Ni44MjMzVjI3SDY2LjgxMjlWMjguNVpNNjYuODAyNCAyOC41SDY2LjgxMjlWMjdINjYuODAyNFYyOC41Wk02Ni43OTIgMjguNUg2Ni44MDI0VjI3SDY2Ljc5MlYyOC41Wk02Ni43ODE2IDI4LjVINjYuNzkyVjI3SDY2Ljc4MTZWMjguNVpNNjYuNzcxMiAyOC41SDY2Ljc4MTZWMjdINjYuNzcxMlYyOC41Wk02Ni43NjA4IDI4LjVINjYuNzcxMlYyN0g2Ni43NjA4VjI4LjVaTTY2Ljc1MDQgMjguNUg2Ni43NjA4VjI3SDY2Ljc1MDRWMjguNVpNNjYuNzQgMjguNUg2Ni43NTA0VjI3SDY2Ljc0VjI4LjVaTTY2LjcyOTcgMjguNUg2Ni43NFYyN0g2Ni43Mjk3VjI4LjVaTTY2LjcxOTMgMjguNUg2Ni43Mjk3VjI3SDY2LjcxOTNWMjguNVpNNjYuNzA5IDI4LjVINjYuNzE5M1YyN0g2Ni43MDlWMjguNVpNNjYuNjk4NyAyOC41SDY2LjcwOVYyN0g2Ni42OTg3VjI4LjVaTTY2LjY4ODMgMjguNUg2Ni42OTg3VjI3SDY2LjY4ODNWMjguNVpNNjYuNjc4IDI4LjVINjYuNjg4M1YyN0g2Ni42NzhWMjguNVpNNjYuNjY3OCAyOC41SDY2LjY3OFYyN0g2Ni42Njc4VjI4LjVaTTY2LjY1NzUgMjguNUg2Ni42Njc4VjI3SDY2LjY1NzVWMjguNVpNNjYuNjQ3MiAyOC41SDY2LjY1NzVWMjdINjYuNjQ3MlYyOC41Wk02Ni42MzcgMjguNUg2Ni42NDcyVjI3SDY2LjYzN1YyOC41Wk02Ni42MjY3IDI4LjVINjYuNjM3VjI3SDY2LjYyNjdWMjguNVpNNjYuNjE2NSAyOC41SDY2LjYyNjdWMjdINjYuNjE2NVYyOC41Wk02Ni42MDYzIDI4LjVINjYuNjE2NVYyN0g2Ni42MDYzVjI4LjVaTTY2LjU5NiAyOC41SDY2LjYwNjNWMjdINjYuNTk2VjI4LjVaTTY2LjU4NTggMjguNUg2Ni41OTZWMjdINjYuNTg1OFYyOC41WlwiLFxuICBmaWxsOiBcIiMzQjM1NTJcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gIHg6IFwiNTIuODcxMVwiLFxuICB5OiBcIjM4LjU3MDNcIixcbiAgd2lkdGg6IFwiNjAuNThcIixcbiAgaGVpZ2h0OiBcIjYwLjU4XCIsXG4gIHJ4OiBcIjEuMjVcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk05MC43MjU2IDQyLjcwMDJDOTAuNzI1NiA0Mi4xNDc5IDkxLjE3MzMgNDEuNzAwMiA5MS43MjU2IDQxLjcwMDJIMTA5LjMyMUMxMDkuODc0IDQxLjcwMDIgMTEwLjMyMSA0Mi4xNDc5IDExMC4zMjEgNDIuNzAwMlY5NS4wMjAyQzExMC4zMjEgOTUuNTcyNSAxMDkuODc0IDk2LjAyMDIgMTA5LjMyMSA5Ni4wMjAySDkxLjcyNTZDOTEuMTczMyA5Ni4wMjAyIDkwLjcyNTYgOTUuNTcyNSA5MC43MjU2IDk1LjAyMDJWNDIuNzAwMlpcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMDVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk02Ny42NDA5IDU0LjMwOTZDNjguNjk2NCA1NC4zMDk2IDY5LjcwMjcgNTQuNTIwMyA3MC42MjAxIDU0LjkwMkM3MC44ODI0IDU1LjAxMTIgNzEuMjMyMSA1NS4yMDY1IDcxLjU0NzcgNTUuMzk1QzcxLjk5OTUgNTUuNjY1IDcyLjEzNTYgNTYuMjQ3NiA3MS44NzM4IDU2LjcwNDFMNjUuMTQ5NyA2OC40MjczQzY0Ljg4NjMgNjguODg2NSA2NC4zMTAyIDY5LjA2MTggNjMuODQ4IDY4LjgwMzZDNjMuNDg4NyA2OC42MDI5IDYzLjA5NDYgNjguMzY3IDYyLjg0NTcgNjguMTcxMUM2MS4wNDAyIDY2Ljc1MDMgNTkuODgwOSA2NC41NDUzIDU5Ljg4MDkgNjIuMDY5NkM1OS44ODA5IDU3Ljc4MzggNjMuMzU1MSA1NC4zMDk2IDY3LjY0MDkgNTQuMzA5NlpcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk02MS4zOTQxIDgzLjYzMDRDNjAuNDMzNCA4My42MzA0IDU5LjgzMTggODIuNTkxOCA2MC4zMDk3IDgxLjc1ODVMNzUuNzcyMSA1NC43OTg1Qzc2LjI1MjQgNTMuOTYxIDc3LjQ2MDQgNTMuOTYxIDc3Ljk0MDcgNTQuNzk4NUw4Ni4xNDggNjkuMTA4NEM4Ni42MTExIDY5LjkxNTkgODcuNzYyOCA2OS45NTIgODguMjc1NSA2OS4xNzUxTDkyLjMwMzEgNjMuMDcyNkM5Mi43OTcyIDYyLjMyNCA5My44OTU2IDYyLjMyNDEgOTQuMzg5NyA2My4wNzI2TDEwNi42NzggODEuNjkxOEMxMDcuMjI3IDgyLjUyMjkgMTA2LjYzMSA4My42MzA0IDEwNS42MzUgODMuNjMwNEg2MS4zOTQxWlwiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSk7XG5leHBvcnQgZGVmYXVsdCBQaG90b3M7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBjb25zdCBQbGFuZXQgPSAoe1xuICB3aWR0aCA9IDE1MixcbiAgaGVpZ2h0ID0gMTY5XG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gIHdpZHRoOiB3aWR0aCxcbiAgaGVpZ2h0OiBoZWlnaHQsXG4gIHZpZXdCb3g6IFwiMCAwIDE1MiAxNjlcIixcbiAgdmVyc2lvbjogXCIxLjFcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgaWQ6IFwiU3ltYm9sc1wiLFxuICBzdHJva2U6IFwibm9uZVwiLFxuICBzdHJva2VXaWR0aDogXCIxXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICBmaWxsUnVsZTogXCJldmVub2RkXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gIGlkOiBcIkdyb3VwXCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMi4wMDAwMDAsIDIuMDAwMDAwKVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIzXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTc0LDExNy4zNzExMzQgTDc0LDE1OC43MjM1NjcgQzc0LDE2Mi4wMzcyNzUgNzEuMzEzNzA4NSwxNjQuNzIzNTY3IDY4LDE2NC43MjM1NjcgQzY2Ljk0NTIxMTgsMTY0LjcyMzU2NyA2NS45MDkwNjI3LDE2NC40NDU1MDQgNjQuOTk1OTk2LDE2My45MTc0MDYgTDYuNjc0OTUwMjYsMTMwLjE4NTc3NCBMNi42NzQ5NTAyNiwxMzAuMTg1Nzc0IEMyLjU0Mzk4NDM5LDEyNy43OTY1MTIgMS40MjEwODU0N2UtMTQsMTIzLjM4NjI3OCAxLjQyMTA4NTQ3ZS0xNCwxMTguNjE0MTI1IEwxLjQyMTA4NTQ3ZS0xNCw0OC40MzYxMjkgQzEuNDIxMDg1NDdlLTE0LDQzLjY2Mzk3NTYgMi41NDM5ODQzOSwzOS4yNTM3NDEyIDYuNjc0OTUwMjYsMzYuODY0NDc5OSBMNjcuMzA3MjA4MywxLjc5NjA5Mjc4IEM3MS40NDc3MzM3LC0wLjU5ODY5NzU5NSA3Ni41NTIyNjYzLC0wLjU5ODY5NzU5NSA4MC42OTI3OTE3LDEuNzk2MDkyNzggTDE0MS4zMjUwNSwzNi44NjQ0Nzk5IEMxNDUuNDU2MDE2LDM5LjI1Mzc0MTIgMTQ4LDQzLjY2Mzk3NTYgMTQ4LDQ4LjQzNjEyOSBMMTQ4LDExOC42MTQxMjUgQzE0OCwxMjMuMzg2Mjc4IDE0NS40NTYwMTYsMTI3Ljc5NjUxMiAxNDEuMzI1MDUsMTMwLjE4NTc3NCBMOTIuMjgxMjIyNiwxNTguNTUxNjYzXCIsXG4gIGlkOiBcIlBhdGhcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTA4Ljg4Mjg2Niw5MC43NDE4NjU4IEMxMDkuNzE0MjYxLDg3LjY5NzYzNzkgMTEwLjE1ODExMiw4NC40OTM0MzU5IDExMC4xNTgxMTIsODEuMTg1NTY3IEMxMTAuMTU4MTEyLDYxLjIwMDgzMDIgOTMuOTU3MjgxMyw0NSA3My45NzI1NDQ1LDQ1IEM1My45ODc4MDc3LDQ1IDM3Ljc4Njk3NzUsNjEuMjAwODMwMiAzNy43ODY5Nzc1LDgxLjE4NTU2NyBDMzcuNzg2OTc3NSw5Ny4zNjEwMDk1IDQ4LjQwMDMzMzcsMTExLjA1NzU3IDYzLjA0MzA4NTcsMTE1LjY5MTI4N1wiLFxuICBpZDogXCJQYXRoXCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTczLjk3MjU0NDUsMTE3LjM3MTEzNCBDNzcuNTkwODk4OCwxMTcuMzcxMTM0IDgxLjA4NTIxMTksMTE2Ljg0MDA1MSA4NC4zODE3ODY2LDExNS44NTE1ODIgQzg5Ljg5MjgzMDksMTE0LjE5OTExIDk0Ljg1MTI0NjgsMTExLjI2ODM2MiA5OC45MTI3MTIyLDEwNy40MDM2NlwiLFxuICBpZDogXCJQYXRoXCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgaWQ6IFwiT3ZhbC1Db3B5XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMTk2MjY4NTc1XCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiLFxuICBjeDogXCIxMDQuMTI3MTg0XCIsXG4gIGN5OiBcIjk5LjI3ODM1MDVcIixcbiAgcjogXCI5LjY0OTQ4NDU0XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMjAuMjU1OTg0LDg1LjQ2NTk2NjUgQzEyOC40Mzg1NSw4OS44NDE4OTU2IDEzMy4wMDIwNTcsOTMuOTAxNTg3MSAxMzIuMjI2ODM0LDk2Ljc5NDc1NjggQzEzMS4zODgxNyw5OS45MjQ2OTMxIDEyNC40NTU2OTksMTAxLjExMjgzNyAxMTMuODUzMzYxLDEwMC41MTU1MTZcIixcbiAgaWQ6IFwiUGF0aFwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk05NC4wNTczMTExLDk4LjA0Nzc1MzUgQzg2Ljg1MTM3ODEsOTYuNzY0OTQ0NyA3OS4wMDE2ODM2LDk1LjAyMDQ3MjYgNzAuODUwNzA2Niw5Mi44MzY0MjQ5IEMzOC42Nzc3NTA4LDg0LjIxNTcwNzQgMTMuOTk0MTExNSw3Mi4wMTA5NjgzIDE1LjcxODI1NSw2NS41NzYzNzcyIEMxNi40OTgyNTQ2LDYyLjY2NTM3OTEgMjIuNTQ5MzU3Niw2MS40MzQwMTg3IDMxLjkyMTUzNTQsNjEuNzU2NTMyNlwiLFxuICBpZDogXCJQYXRoXCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gIHgxOiBcIjk2LjVcIixcbiAgeTE6IFwiMjIuNVwiLFxuICB4MjogXCI5Ni41XCIsXG4gIHkyOiBcIjM1LjUyNzg3ODRcIixcbiAgaWQ6IFwiTGluZS02XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gIHgxOiBcIjk2LjVcIixcbiAgeTE6IFwiMjIuNVwiLFxuICB4MjogXCI5Ni41XCIsXG4gIHkyOiBcIjM1LjUyNzg3ODRcIixcbiAgaWQ6IFwiTGluZS02LUNvcHlcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDk2LjUwMDAwMCwgMjkuMDAwMDAwKSByb3RhdGUoLTI3MC4wMDAwMDApIHRyYW5zbGF0ZSgtOTYuNTAwMDAwLCAtMjkuMDAwMDAwKSBcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gIHgxOiBcIjM4LjVcIixcbiAgeTE6IFwiMzguM1wiLFxuICB4MjogXCIzOC41XCIsXG4gIHkyOiBcIjQ2LjExNjcyNzFcIixcbiAgaWQ6IFwiTGluZS02XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gIHgxOiBcIjM4LjQ5MTYzNjVcIixcbiAgeTE6IFwiMzguMjkxNjM2NVwiLFxuICB4MjogXCIzOC40OTE2MzY1XCIsXG4gIHkyOiBcIjQ2LjEwODM2MzVcIixcbiAgaWQ6IFwiTGluZS02LUNvcHlcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDM4LjQ5MTYzNiwgNDIuMjAwMDAwKSByb3RhdGUoLTI3MC4wMDAwMDApIHRyYW5zbGF0ZSgtMzguNDkxNjM2LCAtNDIuMjAwMDAwKSBcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gIHgxOiBcIjk4XCIsXG4gIHkxOiBcIjEyMi4yNjY2NjdcIixcbiAgeDI6IFwiOThcIixcbiAgeTI6IFwiMTI5LjIxNDg2OFwiLFxuICBpZDogXCJMaW5lLTZcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgeDE6IFwiOTcuOTkyNTY1OFwiLFxuICB5MTogXCIxMjIuMjU5MjMyXCIsXG4gIHgyOiBcIjk3Ljk5MjU2NThcIixcbiAgeTI6IFwiMTI5LjIwNzQzNFwiLFxuICBpZDogXCJMaW5lLTYtQ29weVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOTcuOTkyNTY2LCAxMjUuNzMzMzMzKSByb3RhdGUoLTI3MC4wMDAwMDApIHRyYW5zbGF0ZSgtOTcuOTkyNTY2LCAtMTI1LjczMzMzMykgXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICB4MTogXCI0MC41XCIsXG4gIHkxOiBcIjEyMi40MzMzMzNcIixcbiAgeDI6IFwiNDAuNVwiLFxuICB5MjogXCIxMzMuNzI0MTYxXCIsXG4gIGlkOiBcIkxpbmUtNlwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICB4MTogXCI0MC40ODc5MTkzXCIsXG4gIHkxOiBcIjEyMi40MjEyNTNcIixcbiAgeDI6IFwiNDAuNDg3OTE5M1wiLFxuICB5MjogXCIxMzMuNzEyMDgxXCIsXG4gIGlkOiBcIkxpbmUtNi1Db3B5XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg0MC40ODc5MTksIDEyOC4wNjY2NjcpIHJvdGF0ZSgtMjcwLjAwMDAwMCkgdHJhbnNsYXRlKC00MC40ODc5MTksIC0xMjguMDY2NjY3KSBcIlxufSkpKSk7XG5leHBvcnQgZGVmYXVsdCBQbGFuZXQ7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBjb25zdCBQbHVnID0gKHtcbiAgd2lkdGggPSAxNTIsXG4gIGhlaWdodCA9IDE1MlxufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB3aWR0aDogd2lkdGgsXG4gIGhlaWdodDogaGVpZ2h0LFxuICB2aWV3Qm94OiBcIjAgMCAxNTIgMTUyXCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gIGN4OiBcIjc2XCIsXG4gIGN5OiBcIjc2XCIsXG4gIHI6IFwiNzZcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCI2MC4xNzA1XCIsXG4gIGN5OiBcIjUxLjM2NTlcIixcbiAgcjogXCIxNC4zNjU5XCIsXG4gIGZpbGw6IFwiIzMwNDBENlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNTguNzgwMyA3Ni44NTRINTEuMzY1NlwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMzAuMDQ4OCA3Ni44NTRIMThcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTQwLjI0NDEgNDMuNDg4M0wzNC42OTE2IDcxLjgwNjRDMzQuMjA3IDc0LjI3NzQgMzYuMDk4OCA3Ni41NzYxIDM4LjYxNjggNzYuNTc2MUg0MS44NzE1QzQ0LjM4OTUgNzYuNTc2MSA0Ni4yODEyIDc4Ljg3NDggNDUuNzk2NyA4MS4zNDU3TDQwLjI0NDEgMTA5LjY2NFwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgeDogXCI4NS40ODE5XCIsXG4gIHk6IFwiMzcuNzVcIixcbiAgd2lkdGg6IFwiMjIuNTk3NlwiLFxuICBoZWlnaHQ6IFwiNzguMjA3M1wiLFxuICByeDogXCIzLjI1XCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk05MS41IDg1LjI5MTdWOTguNzA4M1wiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNOTEuNSAxMDMuMDgzVjEwNi45MTdcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEwNS41MjcgMzIuNzVIMTA0Ljc3N1YzMy41SDEwNS41MjdWMzIuNzVaTTEwNS41MjcgMzEuMjVWMzAuNUgxMDQuNzc3VjMxLjI1SDEwNS41MjdaTTExNC4yNzcgNDQuNzg3VjQ1LjUzN0gxMTUuMDI3VjQ0Ljc4N0gxMTQuMjc3Wk0xMTIuNzc3IDQ0Ljc4N0gxMTIuMDI3VjQ1LjUzN0gxMTIuNzc3VjQ0Ljc4N1pNMTEyLjc3NyA0OS4xNjA2VjQ4LjQxMDZIMTEyLjAyN1Y0OS4xNjA2SDExMi43NzdaTTExNC4yNzcgNDkuMTYwNkgxMTUuMDI3VjQ4LjQxMDZIMTE0LjI3N1Y0OS4xNjA2Wk0xMTQuMjc3IDU0LjQ2OTNWNTUuMjE5M0gxMTUuMDI3VjU0LjQ2OTNIMTE0LjI3N1pNMTEyLjc3NyA1NC40NjkzSDExMi4wMjdWNTUuMjE5M0gxMTIuNzc3VjU0LjQ2OTNaTTEwNS41MjcgMzMuNUMxMDkuMTE3IDMzLjUgMTEyLjAyNyAzNi40MTAxIDExMi4wMjcgNDBIMTEzLjUyN0MxMTMuNTI3IDM1LjU4MTcgMTA5Ljk0NSAzMiAxMDUuNTI3IDMyVjMzLjVaTTEwNC43NzcgMzEuMjVWMzIuNzVIMTA2LjI3N1YzMS4yNUgxMDQuNzc3Wk0xMTUuMDI3IDQwQzExNS4wMjcgMzQuNzUzMyAxMTAuNzc0IDMwLjUgMTA1LjUyNyAzMC41VjMyQzEwOS45NDUgMzIgMTEzLjUyNyAzNS41ODE3IDExMy41MjcgNDBIMTE1LjAyN1pNMTE1LjAyNyA0MC4wMTI1VjQwSDExMy41MjdWNDAuMDEyNUgxMTUuMDI3Wk0xMTUuMDI3IDQwLjAyNDlWNDAuMDEyNUgxMTMuNTI3VjQwLjAyNDlIMTE1LjAyN1pNMTE1LjAyNyA0MC4wMzczVjQwLjAyNDlIMTEzLjUyN1Y0MC4wMzczSDExNS4wMjdaTTExNS4wMjcgNDAuMDQ5OFY0MC4wMzczSDExMy41MjdWNDAuMDQ5OEgxMTUuMDI3Wk0xMTUuMDI3IDQwLjA2MjJWNDAuMDQ5OEgxMTMuNTI3VjQwLjA2MjJIMTE1LjAyN1pNMTE1LjAyNyA0MC4wNzQ2VjQwLjA2MjJIMTEzLjUyN1Y0MC4wNzQ2SDExNS4wMjdaTTExNS4wMjcgNDAuMDg3VjQwLjA3NDZIMTEzLjUyN1Y0MC4wODdIMTE1LjAyN1pNMTE1LjAyNyA0MC4wOTkzVjQwLjA4N0gxMTMuNTI3VjQwLjA5OTNIMTE1LjAyN1pNMTE1LjAyNyA0MC4xMTE3VjQwLjA5OTNIMTEzLjUyN1Y0MC4xMTE3SDExNS4wMjdaTTExNS4wMjcgNDAuMTI0MVY0MC4xMTE3SDExMy41MjdWNDAuMTI0MUgxMTUuMDI3Wk0xMTUuMDI3IDQwLjEzNjRWNDAuMTI0MUgxMTMuNTI3VjQwLjEzNjRIMTE1LjAyN1pNMTE1LjAyNyA0MC4xNDg3VjQwLjEzNjRIMTEzLjUyN1Y0MC4xNDg3SDExNS4wMjdaTTExNS4wMjcgNDAuMTYxVjQwLjE0ODdIMTEzLjUyN1Y0MC4xNjFIMTE1LjAyN1pNMTE1LjAyNyA0MC4xNzMzVjQwLjE2MUgxMTMuNTI3VjQwLjE3MzNIMTE1LjAyN1pNMTE1LjAyNyA0MC4xODU2VjQwLjE3MzNIMTEzLjUyN1Y0MC4xODU2SDExNS4wMjdaTTExNS4wMjcgNDAuMTk3OVY0MC4xODU2SDExMy41MjdWNDAuMTk3OUgxMTUuMDI3Wk0xMTUuMDI3IDQwLjIxMDJWNDAuMTk3OUgxMTMuNTI3VjQwLjIxMDJIMTE1LjAyN1pNMTE1LjAyNyA0MC4yMjI0VjQwLjIxMDJIMTEzLjUyN1Y0MC4yMjI0SDExNS4wMjdaTTExNS4wMjcgNDAuMjM0N1Y0MC4yMjI0SDExMy41MjdWNDAuMjM0N0gxMTUuMDI3Wk0xMTUuMDI3IDQwLjI0NjlWNDAuMjM0N0gxMTMuNTI3VjQwLjI0NjlIMTE1LjAyN1pNMTE1LjAyNyA0MC4yNTkxVjQwLjI0NjlIMTEzLjUyN1Y0MC4yNTkxSDExNS4wMjdaTTExNS4wMjcgNDAuMjcxM1Y0MC4yNTkxSDExMy41MjdWNDAuMjcxM0gxMTUuMDI3Wk0xMTUuMDI3IDQwLjI4MzVWNDAuMjcxM0gxMTMuNTI3VjQwLjI4MzVIMTE1LjAyN1pNMTE1LjAyNyA0MC4yOTU3VjQwLjI4MzVIMTEzLjUyN1Y0MC4yOTU3SDExNS4wMjdaTTExNS4wMjcgNDAuMzA3OFY0MC4yOTU3SDExMy41MjdWNDAuMzA3OEgxMTUuMDI3Wk0xMTUuMDI3IDQwLjMyVjQwLjMwNzhIMTEzLjUyN1Y0MC4zMkgxMTUuMDI3Wk0xMTUuMDI3IDQwLjMzMjFWNDAuMzJIMTEzLjUyN1Y0MC4zMzIxSDExNS4wMjdaTTExNS4wMjcgNDAuMzQ0M1Y0MC4zMzIxSDExMy41MjdWNDAuMzQ0M0gxMTUuMDI3Wk0xMTUuMDI3IDQwLjM1NjRWNDAuMzQ0M0gxMTMuNTI3VjQwLjM1NjRIMTE1LjAyN1pNMTE1LjAyNyA0MC4zNjg1VjQwLjM1NjRIMTEzLjUyN1Y0MC4zNjg1SDExNS4wMjdaTTExNS4wMjcgNDAuMzgwNlY0MC4zNjg1SDExMy41MjdWNDAuMzgwNkgxMTUuMDI3Wk0xMTUuMDI3IDQwLjM5MjdWNDAuMzgwNkgxMTMuNTI3VjQwLjM5MjdIMTE1LjAyN1pNMTE1LjAyNyA0MC40MDQ4VjQwLjM5MjdIMTEzLjUyN1Y0MC40MDQ4SDExNS4wMjdaTTExNS4wMjcgNDAuNDE2OFY0MC40MDQ4SDExMy41MjdWNDAuNDE2OEgxMTUuMDI3Wk0xMTUuMDI3IDQwLjQyODlWNDAuNDE2OEgxMTMuNTI3VjQwLjQyODlIMTE1LjAyN1pNMTE1LjAyNyA0MC40NDA5VjQwLjQyODlIMTEzLjUyN1Y0MC40NDA5SDExNS4wMjdaTTExNS4wMjcgNDAuNDUyOVY0MC40NDA5SDExMy41MjdWNDAuNDUyOUgxMTUuMDI3Wk0xMTUuMDI3IDQwLjQ2NDlWNDAuNDUyOUgxMTMuNTI3VjQwLjQ2NDlIMTE1LjAyN1pNMTE1LjAyNyA0MC40NzY5VjQwLjQ2NDlIMTEzLjUyN1Y0MC40NzY5SDExNS4wMjdaTTExNS4wMjcgNDAuNDg4OVY0MC40NzY5SDExMy41MjdWNDAuNDg4OUgxMTUuMDI3Wk0xMTUuMDI3IDQwLjUwMDlWNDAuNDg4OUgxMTMuNTI3VjQwLjUwMDlIMTE1LjAyN1pNMTE1LjAyNyA0MC41MTI4VjQwLjUwMDlIMTEzLjUyN1Y0MC41MTI4SDExNS4wMjdaTTExNS4wMjcgNDAuNTI0OFY0MC41MTI4SDExMy41MjdWNDAuNTI0OEgxMTUuMDI3Wk0xMTUuMDI3IDQwLjUzNjdWNDAuNTI0OEgxMTMuNTI3VjQwLjUzNjdIMTE1LjAyN1pNMTE1LjAyNyA0MC41NDg2VjQwLjUzNjdIMTEzLjUyN1Y0MC41NDg2SDExNS4wMjdaTTExNS4wMjcgNDAuNTYwNlY0MC41NDg2SDExMy41MjdWNDAuNTYwNkgxMTUuMDI3Wk0xMTUuMDI3IDQwLjU3MjVWNDAuNTYwNkgxMTMuNTI3VjQwLjU3MjVIMTE1LjAyN1pNMTE1LjAyNyA0MC41ODQzVjQwLjU3MjVIMTEzLjUyN1Y0MC41ODQzSDExNS4wMjdaTTExNS4wMjcgNDAuNTk2MlY0MC41ODQzSDExMy41MjdWNDAuNTk2MkgxMTUuMDI3Wk0xMTUuMDI3IDQwLjYwODFWNDAuNTk2MkgxMTMuNTI3VjQwLjYwODFIMTE1LjAyN1pNMTE1LjAyNyA0MC42MTk5VjQwLjYwODFIMTEzLjUyN1Y0MC42MTk5SDExNS4wMjdaTTExNS4wMjcgNDAuNjMxOFY0MC42MTk5SDExMy41MjdWNDAuNjMxOEgxMTUuMDI3Wk0xMTUuMDI3IDQwLjY0MzZWNDAuNjMxOEgxMTMuNTI3VjQwLjY0MzZIMTE1LjAyN1pNMTE1LjAyNyA0MC42NTU0VjQwLjY0MzZIMTEzLjUyN1Y0MC42NTU0SDExNS4wMjdaTTExNS4wMjcgNDAuNjY3MlY0MC42NTU0SDExMy41MjdWNDAuNjY3MkgxMTUuMDI3Wk0xMTUuMDI3IDQwLjY3OVY0MC42NjcySDExMy41MjdWNDAuNjc5SDExNS4wMjdaTTExNS4wMjcgNDAuNjkwOFY0MC42NzlIMTEzLjUyN1Y0MC42OTA4SDExNS4wMjdaTTExNS4wMjcgNDAuNzAyNlY0MC42OTA4SDExMy41MjdWNDAuNzAyNkgxMTUuMDI3Wk0xMTUuMDI3IDQwLjcxNDNWNDAuNzAyNkgxMTMuNTI3VjQwLjcxNDNIMTE1LjAyN1pNMTE1LjAyNyA0MC43MjYxVjQwLjcxNDNIMTEzLjUyN1Y0MC43MjYxSDExNS4wMjdaTTExNS4wMjcgNDAuNzM3OFY0MC43MjYxSDExMy41MjdWNDAuNzM3OEgxMTUuMDI3Wk0xMTUuMDI3IDQwLjc0OTVWNDAuNzM3OEgxMTMuNTI3VjQwLjc0OTVIMTE1LjAyN1pNMTE1LjAyNyA0MC43NjEyVjQwLjc0OTVIMTEzLjUyN1Y0MC43NjEySDExNS4wMjdaTTExNS4wMjcgNDAuNzcyOVY0MC43NjEySDExMy41MjdWNDAuNzcyOUgxMTUuMDI3Wk0xMTUuMDI3IDQwLjc4NDZWNDAuNzcyOUgxMTMuNTI3VjQwLjc4NDZIMTE1LjAyN1pNMTE1LjAyNyA0MC43OTYyVjQwLjc4NDZIMTEzLjUyN1Y0MC43OTYySDExNS4wMjdaTTExNS4wMjcgNDAuODA3OVY0MC43OTYySDExMy41MjdWNDAuODA3OUgxMTUuMDI3Wk0xMTUuMDI3IDQwLjgxOTVWNDAuODA3OUgxMTMuNTI3VjQwLjgxOTVIMTE1LjAyN1pNMTE1LjAyNyA0MC44MzEyVjQwLjgxOTVIMTEzLjUyN1Y0MC44MzEySDExNS4wMjdaTTExNS4wMjcgNDAuODQyOFY0MC44MzEySDExMy41MjdWNDAuODQyOEgxMTUuMDI3Wk0xMTUuMDI3IDQwLjg1NDRWNDAuODQyOEgxMTMuNTI3VjQwLjg1NDRIMTE1LjAyN1pNMTE1LjAyNyA0MC44NjZWNDAuODU0NEgxMTMuNTI3VjQwLjg2NkgxMTUuMDI3Wk0xMTUuMDI3IDQwLjg3NzZWNDAuODY2SDExMy41MjdWNDAuODc3NkgxMTUuMDI3Wk0xMTUuMDI3IDQwLjg4OTJWNDAuODc3NkgxMTMuNTI3VjQwLjg4OTJIMTE1LjAyN1pNMTE1LjAyNyA0MC45MDA3VjQwLjg4OTJIMTEzLjUyN1Y0MC45MDA3SDExNS4wMjdaTTExNS4wMjcgNDAuOTEyM1Y0MC45MDA3SDExMy41MjdWNDAuOTEyM0gxMTUuMDI3Wk0xMTUuMDI3IDQwLjkyMzhWNDAuOTEyM0gxMTMuNTI3VjQwLjkyMzhIMTE1LjAyN1pNMTE1LjAyNyA0MC45MzUzVjQwLjkyMzhIMTEzLjUyN1Y0MC45MzUzSDExNS4wMjdaTTExNS4wMjcgNDAuOTQ2OFY0MC45MzUzSDExMy41MjdWNDAuOTQ2OEgxMTUuMDI3Wk0xMTUuMDI3IDQwLjk1ODNWNDAuOTQ2OEgxMTMuNTI3VjQwLjk1ODNIMTE1LjAyN1pNMTE1LjAyNyA0MC45Njk4VjQwLjk1ODNIMTEzLjUyN1Y0MC45Njk4SDExNS4wMjdaTTExNS4wMjcgNDAuOTgxM1Y0MC45Njk4SDExMy41MjdWNDAuOTgxM0gxMTUuMDI3Wk0xMTUuMDI3IDQwLjk5MjhWNDAuOTgxM0gxMTMuNTI3VjQwLjk5MjhIMTE1LjAyN1pNMTE1LjAyNyA0MS4wMDQyVjQwLjk5MjhIMTEzLjUyN1Y0MS4wMDQySDExNS4wMjdaTTExNS4wMjcgNDEuMDE1NlY0MS4wMDQySDExMy41MjdWNDEuMDE1NkgxMTUuMDI3Wk0xMTUuMDI3IDQxLjAyNzFWNDEuMDE1NkgxMTMuNTI3VjQxLjAyNzFIMTE1LjAyN1pNMTE1LjAyNyA0MS4wMzg1VjQxLjAyNzFIMTEzLjUyN1Y0MS4wMzg1SDExNS4wMjdaTTExNS4wMjcgNDEuMDQ5OVY0MS4wMzg1SDExMy41MjdWNDEuMDQ5OUgxMTUuMDI3Wk0xMTUuMDI3IDQxLjA2MTNWNDEuMDQ5OUgxMTMuNTI3VjQxLjA2MTNIMTE1LjAyN1pNMTE1LjAyNyA0MS4wNzI2VjQxLjA2MTNIMTEzLjUyN1Y0MS4wNzI2SDExNS4wMjdaTTExNS4wMjcgNDEuMDg0VjQxLjA3MjZIMTEzLjUyN1Y0MS4wODRIMTE1LjAyN1pNMTE1LjAyNyA0MS4wOTU0VjQxLjA4NEgxMTMuNTI3VjQxLjA5NTRIMTE1LjAyN1pNMTE1LjAyNyA0MS4xMDY3VjQxLjA5NTRIMTEzLjUyN1Y0MS4xMDY3SDExNS4wMjdaTTExNS4wMjcgNDEuMTE4VjQxLjEwNjdIMTEzLjUyN1Y0MS4xMThIMTE1LjAyN1pNMTE1LjAyNyA0MS4xMjkzVjQxLjExOEgxMTMuNTI3VjQxLjEyOTNIMTE1LjAyN1pNMTE1LjAyNyA0MS4xNDA2VjQxLjEyOTNIMTEzLjUyN1Y0MS4xNDA2SDExNS4wMjdaTTExNS4wMjcgNDEuMTUxOVY0MS4xNDA2SDExMy41MjdWNDEuMTUxOUgxMTUuMDI3Wk0xMTUuMDI3IDQxLjE2MzJWNDEuMTUxOUgxMTMuNTI3VjQxLjE2MzJIMTE1LjAyN1pNMTE1LjAyNyA0MS4xNzQ1VjQxLjE2MzJIMTEzLjUyN1Y0MS4xNzQ1SDExNS4wMjdaTTExNS4wMjcgNDEuMTg1N1Y0MS4xNzQ1SDExMy41MjdWNDEuMTg1N0gxMTUuMDI3Wk0xMTUuMDI3IDQxLjE5N1Y0MS4xODU3SDExMy41MjdWNDEuMTk3SDExNS4wMjdaTTExNS4wMjcgNDEuMjA4MlY0MS4xOTdIMTEzLjUyN1Y0MS4yMDgySDExNS4wMjdaTTExNS4wMjcgNDEuMjE5NFY0MS4yMDgySDExMy41MjdWNDEuMjE5NEgxMTUuMDI3Wk0xMTUuMDI3IDQxLjIzMDZWNDEuMjE5NEgxMTMuNTI3VjQxLjIzMDZIMTE1LjAyN1pNMTE1LjAyNyA0MS4yNDE4VjQxLjIzMDZIMTEzLjUyN1Y0MS4yNDE4SDExNS4wMjdaTTExNS4wMjcgNDEuMjUzVjQxLjI0MThIMTEzLjUyN1Y0MS4yNTNIMTE1LjAyN1pNMTE1LjAyNyA0MS4yNjQyVjQxLjI1M0gxMTMuNTI3VjQxLjI2NDJIMTE1LjAyN1pNMTE1LjAyNyA0MS4yNzUzVjQxLjI2NDJIMTEzLjUyN1Y0MS4yNzUzSDExNS4wMjdaTTExNS4wMjcgNDEuMjg2NVY0MS4yNzUzSDExMy41MjdWNDEuMjg2NUgxMTUuMDI3Wk0xMTUuMDI3IDQxLjI5NzZWNDEuMjg2NUgxMTMuNTI3VjQxLjI5NzZIMTE1LjAyN1pNMTE1LjAyNyA0MS4zMDg3VjQxLjI5NzZIMTEzLjUyN1Y0MS4zMDg3SDExNS4wMjdaTTExNS4wMjcgNDEuMzE5OFY0MS4zMDg3SDExMy41MjdWNDEuMzE5OEgxMTUuMDI3Wk0xMTUuMDI3IDQxLjMzMDlWNDEuMzE5OEgxMTMuNTI3VjQxLjMzMDlIMTE1LjAyN1pNMTE1LjAyNyA0MS4zNDJWNDEuMzMwOUgxMTMuNTI3VjQxLjM0MkgxMTUuMDI3Wk0xMTUuMDI3IDQxLjM1MzFWNDEuMzQySDExMy41MjdWNDEuMzUzMUgxMTUuMDI3Wk0xMTUuMDI3IDQxLjM2NDJWNDEuMzUzMUgxMTMuNTI3VjQxLjM2NDJIMTE1LjAyN1pNMTE1LjAyNyA0MS4zNzUyVjQxLjM2NDJIMTEzLjUyN1Y0MS4zNzUySDExNS4wMjdaTTExNS4wMjcgNDEuMzg2MlY0MS4zNzUySDExMy41MjdWNDEuMzg2MkgxMTUuMDI3Wk0xMTUuMDI3IDQxLjM5NzNWNDEuMzg2MkgxMTMuNTI3VjQxLjM5NzNIMTE1LjAyN1pNMTE1LjAyNyA0MS40MDgzVjQxLjM5NzNIMTEzLjUyN1Y0MS40MDgzSDExNS4wMjdaTTExNS4wMjcgNDEuNDE5M1Y0MS40MDgzSDExMy41MjdWNDEuNDE5M0gxMTUuMDI3Wk0xMTUuMDI3IDQxLjQzMDNWNDEuNDE5M0gxMTMuNTI3VjQxLjQzMDNIMTE1LjAyN1pNMTE1LjAyNyA0MS40NDEyVjQxLjQzMDNIMTEzLjUyN1Y0MS40NDEySDExNS4wMjdaTTExNS4wMjcgNDEuNDUyMlY0MS40NDEySDExMy41MjdWNDEuNDUyMkgxMTUuMDI3Wk0xMTUuMDI3IDQxLjQ2MzJWNDEuNDUyMkgxMTMuNTI3VjQxLjQ2MzJIMTE1LjAyN1pNMTE1LjAyNyA0MS40NzQxVjQxLjQ2MzJIMTEzLjUyN1Y0MS40NzQxSDExNS4wMjdaTTExNS4wMjcgNDEuNDg1VjQxLjQ3NDFIMTEzLjUyN1Y0MS40ODVIMTE1LjAyN1pNMTE1LjAyNyA0MS40OTU5VjQxLjQ4NUgxMTMuNTI3VjQxLjQ5NTlIMTE1LjAyN1pNMTE1LjAyNyA0MS41MDY4VjQxLjQ5NTlIMTEzLjUyN1Y0MS41MDY4SDExNS4wMjdaTTExNS4wMjcgNDEuNTE3N1Y0MS41MDY4SDExMy41MjdWNDEuNTE3N0gxMTUuMDI3Wk0xMTUuMDI3IDQxLjUyODZWNDEuNTE3N0gxMTMuNTI3VjQxLjUyODZIMTE1LjAyN1pNMTE1LjAyNyA0MS41Mzk1VjQxLjUyODZIMTEzLjUyN1Y0MS41Mzk1SDExNS4wMjdaTTExNS4wMjcgNDEuNTUwM1Y0MS41Mzk1SDExMy41MjdWNDEuNTUwM0gxMTUuMDI3Wk0xMTUuMDI3IDQxLjU2MTJWNDEuNTUwM0gxMTMuNTI3VjQxLjU2MTJIMTE1LjAyN1pNMTE1LjAyNyA0MS41NzJWNDEuNTYxMkgxMTMuNTI3VjQxLjU3MkgxMTUuMDI3Wk0xMTUuMDI3IDQxLjU4MjhWNDEuNTcySDExMy41MjdWNDEuNTgyOEgxMTUuMDI3Wk0xMTUuMDI3IDQxLjU5MzZWNDEuNTgyOEgxMTMuNTI3VjQxLjU5MzZIMTE1LjAyN1pNMTE1LjAyNyA0MS42MDQ0VjQxLjU5MzZIMTEzLjUyN1Y0MS42MDQ0SDExNS4wMjdaTTExNS4wMjcgNDEuNjE1MlY0MS42MDQ0SDExMy41MjdWNDEuNjE1MkgxMTUuMDI3Wk0xMTUuMDI3IDQxLjYyNTlWNDEuNjE1MkgxMTMuNTI3VjQxLjYyNTlIMTE1LjAyN1pNMTE1LjAyNyA0MS42MzY3VjQxLjYyNTlIMTEzLjUyN1Y0MS42MzY3SDExNS4wMjdaTTExNS4wMjcgNDEuNjQ3NFY0MS42MzY3SDExMy41MjdWNDEuNjQ3NEgxMTUuMDI3Wk0xMTUuMDI3IDQxLjY1ODJWNDEuNjQ3NEgxMTMuNTI3VjQxLjY1ODJIMTE1LjAyN1pNMTE1LjAyNyA0MS42Njg5VjQxLjY1ODJIMTEzLjUyN1Y0MS42Njg5SDExNS4wMjdaTTExNS4wMjcgNDEuNjc5NlY0MS42Njg5SDExMy41MjdWNDEuNjc5NkgxMTUuMDI3Wk0xMTUuMDI3IDQxLjY5MDNWNDEuNjc5NkgxMTMuNTI3VjQxLjY5MDNIMTE1LjAyN1pNMTE1LjAyNyA0MS43MDFWNDEuNjkwM0gxMTMuNTI3VjQxLjcwMUgxMTUuMDI3Wk0xMTUuMDI3IDQxLjcxMTdWNDEuNzAxSDExMy41MjdWNDEuNzExN0gxMTUuMDI3Wk0xMTUuMDI3IDQxLjcyMjNWNDEuNzExN0gxMTMuNTI3VjQxLjcyMjNIMTE1LjAyN1pNMTE1LjAyNyA0MS43MzNWNDEuNzIyM0gxMTMuNTI3VjQxLjczM0gxMTUuMDI3Wk0xMTUuMDI3IDQxLjc0MzZWNDEuNzMzSDExMy41MjdWNDEuNzQzNkgxMTUuMDI3Wk0xMTUuMDI3IDQxLjc1NDJWNDEuNzQzNkgxMTMuNTI3VjQxLjc1NDJIMTE1LjAyN1pNMTE1LjAyNyA0MS43NjQ4VjQxLjc1NDJIMTEzLjUyN1Y0MS43NjQ4SDExNS4wMjdaTTExNS4wMjcgNDEuNzc1NFY0MS43NjQ4SDExMy41MjdWNDEuNzc1NEgxMTUuMDI3Wk0xMTUuMDI3IDQxLjc4NlY0MS43NzU0SDExMy41MjdWNDEuNzg2SDExNS4wMjdaTTExNS4wMjcgNDEuNzk2NlY0MS43ODZIMTEzLjUyN1Y0MS43OTY2SDExNS4wMjdaTTExNS4wMjcgNDEuODA3MVY0MS43OTY2SDExMy41MjdWNDEuODA3MUgxMTUuMDI3Wk0xMTUuMDI3IDQxLjgxNzdWNDEuODA3MUgxMTMuNTI3VjQxLjgxNzdIMTE1LjAyN1pNMTE1LjAyNyA0MS44MjgyVjQxLjgxNzdIMTEzLjUyN1Y0MS44MjgySDExNS4wMjdaTTExNS4wMjcgNDEuODM4N1Y0MS44MjgySDExMy41MjdWNDEuODM4N0gxMTUuMDI3Wk0xMTUuMDI3IDQxLjg0OTNWNDEuODM4N0gxMTMuNTI3VjQxLjg0OTNIMTE1LjAyN1pNMTE1LjAyNyA0MS44NTk4VjQxLjg0OTNIMTEzLjUyN1Y0MS44NTk4SDExNS4wMjdaTTExNS4wMjcgNDEuODcwMlY0MS44NTk4SDExMy41MjdWNDEuODcwMkgxMTUuMDI3Wk0xMTUuMDI3IDQxLjg4MDdWNDEuODcwMkgxMTMuNTI3VjQxLjg4MDdIMTE1LjAyN1pNMTE1LjAyNyA0MS44OTEyVjQxLjg4MDdIMTEzLjUyN1Y0MS44OTEySDExNS4wMjdaTTExNS4wMjcgNDEuOTAxNlY0MS44OTEySDExMy41MjdWNDEuOTAxNkgxMTUuMDI3Wk0xMTUuMDI3IDQxLjkxMjFWNDEuOTAxNkgxMTMuNTI3VjQxLjkxMjFIMTE1LjAyN1pNMTE1LjAyNyA0MS45MjI1VjQxLjkxMjFIMTEzLjUyN1Y0MS45MjI1SDExNS4wMjdaTTExNS4wMjcgNDEuOTMyOVY0MS45MjI1SDExMy41MjdWNDEuOTMyOUgxMTUuMDI3Wk0xMTUuMDI3IDQxLjk0MzNWNDEuOTMyOUgxMTMuNTI3VjQxLjk0MzNIMTE1LjAyN1pNMTE1LjAyNyA0MS45NTM3VjQxLjk0MzNIMTEzLjUyN1Y0MS45NTM3SDExNS4wMjdaTTExNS4wMjcgNDEuOTY0MVY0MS45NTM3SDExMy41MjdWNDEuOTY0MUgxMTUuMDI3Wk0xMTUuMDI3IDQxLjk3NDVWNDEuOTY0MUgxMTMuNTI3VjQxLjk3NDVIMTE1LjAyN1pNMTE1LjAyNyA0MS45ODQ4VjQxLjk3NDVIMTEzLjUyN1Y0MS45ODQ4SDExNS4wMjdaTTExNS4wMjcgNDEuOTk1MlY0MS45ODQ4SDExMy41MjdWNDEuOTk1MkgxMTUuMDI3Wk0xMTUuMDI3IDQyLjAwNTVWNDEuOTk1MkgxMTMuNTI3VjQyLjAwNTVIMTE1LjAyN1pNMTE1LjAyNyA0Mi4wMTU4VjQyLjAwNTVIMTEzLjUyN1Y0Mi4wMTU4SDExNS4wMjdaTTExNS4wMjcgNDIuMDI2MVY0Mi4wMTU4SDExMy41MjdWNDIuMDI2MUgxMTUuMDI3Wk0xMTUuMDI3IDQyLjAzNjRWNDIuMDI2MUgxMTMuNTI3VjQyLjAzNjRIMTE1LjAyN1pNMTE1LjAyNyA0Mi4wNDY3VjQyLjAzNjRIMTEzLjUyN1Y0Mi4wNDY3SDExNS4wMjdaTTExNS4wMjcgNDIuMDU2OVY0Mi4wNDY3SDExMy41MjdWNDIuMDU2OUgxMTUuMDI3Wk0xMTUuMDI3IDQyLjA2NzJWNDIuMDU2OUgxMTMuNTI3VjQyLjA2NzJIMTE1LjAyN1pNMTE1LjAyNyA0Mi4wNzc0VjQyLjA2NzJIMTEzLjUyN1Y0Mi4wNzc0SDExNS4wMjdaTTExNS4wMjcgNDIuMDg3N1Y0Mi4wNzc0SDExMy41MjdWNDIuMDg3N0gxMTUuMDI3Wk0xMTUuMDI3IDQyLjA5NzlWNDIuMDg3N0gxMTMuNTI3VjQyLjA5NzlIMTE1LjAyN1pNMTE1LjAyNyA0Mi4xMDgxVjQyLjA5NzlIMTEzLjUyN1Y0Mi4xMDgxSDExNS4wMjdaTTExNS4wMjcgNDIuMTE4M1Y0Mi4xMDgxSDExMy41MjdWNDIuMTE4M0gxMTUuMDI3Wk0xMTUuMDI3IDQyLjEyODVWNDIuMTE4M0gxMTMuNTI3VjQyLjEyODVIMTE1LjAyN1pNMTE1LjAyNyA0Mi4xMzg3VjQyLjEyODVIMTEzLjUyN1Y0Mi4xMzg3SDExNS4wMjdaTTExNS4wMjcgNDIuMTQ4OFY0Mi4xMzg3SDExMy41MjdWNDIuMTQ4OEgxMTUuMDI3Wk0xMTUuMDI3IDQyLjE1OVY0Mi4xNDg4SDExMy41MjdWNDIuMTU5SDExNS4wMjdaTTExNS4wMjcgNDIuMTY5MVY0Mi4xNTlIMTEzLjUyN1Y0Mi4xNjkxSDExNS4wMjdaTTExNS4wMjcgNDIuMTc5MlY0Mi4xNjkxSDExMy41MjdWNDIuMTc5MkgxMTUuMDI3Wk0xMTUuMDI3IDQyLjE4OTNWNDIuMTc5MkgxMTMuNTI3VjQyLjE4OTNIMTE1LjAyN1pNMTE1LjAyNyA0Mi4xOTk0VjQyLjE4OTNIMTEzLjUyN1Y0Mi4xOTk0SDExNS4wMjdaTTExNS4wMjcgNDIuMjA5NVY0Mi4xOTk0SDExMy41MjdWNDIuMjA5NUgxMTUuMDI3Wk0xMTUuMDI3IDQyLjIxOTZWNDIuMjA5NUgxMTMuNTI3VjQyLjIxOTZIMTE1LjAyN1pNMTE1LjAyNyA0Mi4yMjk3VjQyLjIxOTZIMTEzLjUyN1Y0Mi4yMjk3SDExNS4wMjdaTTExNS4wMjcgNDIuMjM5N1Y0Mi4yMjk3SDExMy41MjdWNDIuMjM5N0gxMTUuMDI3Wk0xMTUuMDI3IDQyLjI0OTdWNDIuMjM5N0gxMTMuNTI3VjQyLjI0OTdIMTE1LjAyN1pNMTE1LjAyNyA0Mi4yNTk4VjQyLjI0OTdIMTEzLjUyN1Y0Mi4yNTk4SDExNS4wMjdaTTExNS4wMjcgNDIuMjY5OFY0Mi4yNTk4SDExMy41MjdWNDIuMjY5OEgxMTUuMDI3Wk0xMTUuMDI3IDQyLjI3OThWNDIuMjY5OEgxMTMuNTI3VjQyLjI3OThIMTE1LjAyN1pNMTE1LjAyNyA0Mi4yODk4VjQyLjI3OThIMTEzLjUyN1Y0Mi4yODk4SDExNS4wMjdaTTExNS4wMjcgNDIuMjk5N1Y0Mi4yODk4SDExMy41MjdWNDIuMjk5N0gxMTUuMDI3Wk0xMTUuMDI3IDQyLjMwOTdWNDIuMjk5N0gxMTMuNTI3VjQyLjMwOTdIMTE1LjAyN1pNMTE1LjAyNyA0Mi4zMTk3VjQyLjMwOTdIMTEzLjUyN1Y0Mi4zMTk3SDExNS4wMjdaTTExNS4wMjcgNDIuMzI5NlY0Mi4zMTk3SDExMy41MjdWNDIuMzI5NkgxMTUuMDI3Wk0xMTUuMDI3IDQyLjMzOTVWNDIuMzI5NkgxMTMuNTI3VjQyLjMzOTVIMTE1LjAyN1pNMTE1LjAyNyA0Mi4zNDk0VjQyLjMzOTVIMTEzLjUyN1Y0Mi4zNDk0SDExNS4wMjdaTTExNS4wMjcgNDIuMzU5M1Y0Mi4zNDk0SDExMy41MjdWNDIuMzU5M0gxMTUuMDI3Wk0xMTUuMDI3IDQyLjM2OTJWNDIuMzU5M0gxMTMuNTI3VjQyLjM2OTJIMTE1LjAyN1pNMTE1LjAyNyA0Mi4zNzkxVjQyLjM2OTJIMTEzLjUyN1Y0Mi4zNzkxSDExNS4wMjdaTTExNS4wMjcgNDIuMzg5VjQyLjM3OTFIMTEzLjUyN1Y0Mi4zODlIMTE1LjAyN1pNMTE1LjAyNyA0Mi4zOTg4VjQyLjM4OUgxMTMuNTI3VjQyLjM5ODhIMTE1LjAyN1pNMTE1LjAyNyA0Mi40MDg3VjQyLjM5ODhIMTEzLjUyN1Y0Mi40MDg3SDExNS4wMjdaTTExNS4wMjcgNDIuNDE4NVY0Mi40MDg3SDExMy41MjdWNDIuNDE4NUgxMTUuMDI3Wk0xMTUuMDI3IDQyLjQyODNWNDIuNDE4NUgxMTMuNTI3VjQyLjQyODNIMTE1LjAyN1pNMTE1LjAyNyA0Mi40MzgxVjQyLjQyODNIMTEzLjUyN1Y0Mi40MzgxSDExNS4wMjdaTTExNS4wMjcgNDIuNDQ3OVY0Mi40MzgxSDExMy41MjdWNDIuNDQ3OUgxMTUuMDI3Wk0xMTUuMDI3IDQyLjQ1NzdWNDIuNDQ3OUgxMTMuNTI3VjQyLjQ1NzdIMTE1LjAyN1pNMTE1LjAyNyA0Mi40Njc1VjQyLjQ1NzdIMTEzLjUyN1Y0Mi40Njc1SDExNS4wMjdaTTExNS4wMjcgNDIuNDc3MlY0Mi40Njc1SDExMy41MjdWNDIuNDc3MkgxMTUuMDI3Wk0xMTUuMDI3IDQyLjQ4N1Y0Mi40NzcySDExMy41MjdWNDIuNDg3SDExNS4wMjdaTTExNS4wMjcgNDIuNDk2N1Y0Mi40ODdIMTEzLjUyN1Y0Mi40OTY3SDExNS4wMjdaTTExNS4wMjcgNDIuNTA2NFY0Mi40OTY3SDExMy41MjdWNDIuNTA2NEgxMTUuMDI3Wk0xMTUuMDI3IDQyLjUxNjFWNDIuNTA2NEgxMTMuNTI3VjQyLjUxNjFIMTE1LjAyN1pNMTE1LjAyNyA0Mi41MjU4VjQyLjUxNjFIMTEzLjUyN1Y0Mi41MjU4SDExNS4wMjdaTTExNS4wMjcgNDIuNTM1NVY0Mi41MjU4SDExMy41MjdWNDIuNTM1NUgxMTUuMDI3Wk0xMTUuMDI3IDQyLjU0NTJWNDIuNTM1NUgxMTMuNTI3VjQyLjU0NTJIMTE1LjAyN1pNMTE1LjAyNyA0Mi41NTQ5VjQyLjU0NTJIMTEzLjUyN1Y0Mi41NTQ5SDExNS4wMjdaTTExNS4wMjcgNDIuNTY0NVY0Mi41NTQ5SDExMy41MjdWNDIuNTY0NUgxMTUuMDI3Wk0xMTUuMDI3IDQyLjU3NDFWNDIuNTY0NUgxMTMuNTI3VjQyLjU3NDFIMTE1LjAyN1pNMTE1LjAyNyA0Mi41ODM4VjQyLjU3NDFIMTEzLjUyN1Y0Mi41ODM4SDExNS4wMjdaTTExNS4wMjcgNDIuNTkzNFY0Mi41ODM4SDExMy41MjdWNDIuNTkzNEgxMTUuMDI3Wk0xMTUuMDI3IDQyLjYwM1Y0Mi41OTM0SDExMy41MjdWNDIuNjAzSDExNS4wMjdaTTExNS4wMjcgNDIuNjEyNlY0Mi42MDNIMTEzLjUyN1Y0Mi42MTI2SDExNS4wMjdaTTExNS4wMjcgNDIuNjIyMVY0Mi42MTI2SDExMy41MjdWNDIuNjIyMUgxMTUuMDI3Wk0xMTUuMDI3IDQyLjYzMTdWNDIuNjIyMUgxMTMuNTI3VjQyLjYzMTdIMTE1LjAyN1pNMTE1LjAyNyA0Mi42NDEzVjQyLjYzMTdIMTEzLjUyN1Y0Mi42NDEzSDExNS4wMjdaTTExNS4wMjcgNDIuNjUwOFY0Mi42NDEzSDExMy41MjdWNDIuNjUwOEgxMTUuMDI3Wk0xMTUuMDI3IDQyLjY2MDNWNDIuNjUwOEgxMTMuNTI3VjQyLjY2MDNIMTE1LjAyN1pNMTE1LjAyNyA0Mi42Njk4VjQyLjY2MDNIMTEzLjUyN1Y0Mi42Njk4SDExNS4wMjdaTTExNS4wMjcgNDIuNjc5M1Y0Mi42Njk4SDExMy41MjdWNDIuNjc5M0gxMTUuMDI3Wk0xMTUuMDI3IDQyLjY4ODhWNDIuNjc5M0gxMTMuNTI3VjQyLjY4ODhIMTE1LjAyN1pNMTE1LjAyNyA0Mi42OTgzVjQyLjY4ODhIMTEzLjUyN1Y0Mi42OTgzSDExNS4wMjdaTTExNS4wMjcgNDIuNzA3OFY0Mi42OTgzSDExMy41MjdWNDIuNzA3OEgxMTUuMDI3Wk0xMTUuMDI3IDQyLjcxNzJWNDIuNzA3OEgxMTMuNTI3VjQyLjcxNzJIMTE1LjAyN1pNMTE1LjAyNyA0Mi43MjY3VjQyLjcxNzJIMTEzLjUyN1Y0Mi43MjY3SDExNS4wMjdaTTExNS4wMjcgNDIuNzM2MVY0Mi43MjY3SDExMy41MjdWNDIuNzM2MUgxMTUuMDI3Wk0xMTUuMDI3IDQyLjc0NTVWNDIuNzM2MUgxMTMuNTI3VjQyLjc0NTVIMTE1LjAyN1pNMTE1LjAyNyA0Mi43NTQ5VjQyLjc0NTVIMTEzLjUyN1Y0Mi43NTQ5SDExNS4wMjdaTTExNS4wMjcgNDIuNzY0M1Y0Mi43NTQ5SDExMy41MjdWNDIuNzY0M0gxMTUuMDI3Wk0xMTUuMDI3IDQyLjc3MzdWNDIuNzY0M0gxMTMuNTI3VjQyLjc3MzdIMTE1LjAyN1pNMTE1LjAyNyA0Mi43ODNWNDIuNzczN0gxMTMuNTI3VjQyLjc4M0gxMTUuMDI3Wk0xMTUuMDI3IDQyLjc5MjRWNDIuNzgzSDExMy41MjdWNDIuNzkyNEgxMTUuMDI3Wk0xMTUuMDI3IDQyLjgwMTdWNDIuNzkyNEgxMTMuNTI3VjQyLjgwMTdIMTE1LjAyN1pNMTE1LjAyNyA0Mi44MTExVjQyLjgwMTdIMTEzLjUyN1Y0Mi44MTExSDExNS4wMjdaTTExNS4wMjcgNDIuODIwNFY0Mi44MTExSDExMy41MjdWNDIuODIwNEgxMTUuMDI3Wk0xMTUuMDI3IDQyLjgyOTdWNDIuODIwNEgxMTMuNTI3VjQyLjgyOTdIMTE1LjAyN1pNMTE1LjAyNyA0Mi44MzlWNDIuODI5N0gxMTMuNTI3VjQyLjgzOUgxMTUuMDI3Wk0xMTUuMDI3IDQyLjg0ODNWNDIuODM5SDExMy41MjdWNDIuODQ4M0gxMTUuMDI3Wk0xMTUuMDI3IDQyLjg1NzZWNDIuODQ4M0gxMTMuNTI3VjQyLjg1NzZIMTE1LjAyN1pNMTE1LjAyNyA0Mi44NjY4VjQyLjg1NzZIMTEzLjUyN1Y0Mi44NjY4SDExNS4wMjdaTTExNS4wMjcgNDIuODc2MVY0Mi44NjY4SDExMy41MjdWNDIuODc2MUgxMTUuMDI3Wk0xMTUuMDI3IDQyLjg4NTNWNDIuODc2MUgxMTMuNTI3VjQyLjg4NTNIMTE1LjAyN1pNMTE1LjAyNyA0Mi44OTQ1VjQyLjg4NTNIMTEzLjUyN1Y0Mi44OTQ1SDExNS4wMjdaTTExNS4wMjcgNDIuOTAzN1Y0Mi44OTQ1SDExMy41MjdWNDIuOTAzN0gxMTUuMDI3Wk0xMTUuMDI3IDQyLjkxMjlWNDIuOTAzN0gxMTMuNTI3VjQyLjkxMjlIMTE1LjAyN1pNMTE1LjAyNyA0Mi45MjIxVjQyLjkxMjlIMTEzLjUyN1Y0Mi45MjIxSDExNS4wMjdaTTExNS4wMjcgNDIuOTMxM1Y0Mi45MjIxSDExMy41MjdWNDIuOTMxM0gxMTUuMDI3Wk0xMTUuMDI3IDQyLjk0MDRWNDIuOTMxM0gxMTMuNTI3VjQyLjk0MDRIMTE1LjAyN1pNMTE1LjAyNyA0Mi45NDk2VjQyLjk0MDRIMTEzLjUyN1Y0Mi45NDk2SDExNS4wMjdaTTExNS4wMjcgNDIuOTU4N1Y0Mi45NDk2SDExMy41MjdWNDIuOTU4N0gxMTUuMDI3Wk0xMTUuMDI3IDQyLjk2NzhWNDIuOTU4N0gxMTMuNTI3VjQyLjk2NzhIMTE1LjAyN1pNMTE1LjAyNyA0Mi45NzdWNDIuOTY3OEgxMTMuNTI3VjQyLjk3N0gxMTUuMDI3Wk0xMTUuMDI3IDQyLjk4NjFWNDIuOTc3SDExMy41MjdWNDIuOTg2MUgxMTUuMDI3Wk0xMTUuMDI3IDQyLjk5NTFWNDIuOTg2MUgxMTMuNTI3VjQyLjk5NTFIMTE1LjAyN1pNMTE1LjAyNyA0My4wMDQyVjQyLjk5NTFIMTEzLjUyN1Y0My4wMDQySDExNS4wMjdaTTExNS4wMjcgNDMuMDEzM1Y0My4wMDQySDExMy41MjdWNDMuMDEzM0gxMTUuMDI3Wk0xMTUuMDI3IDQzLjAyMjNWNDMuMDEzM0gxMTMuNTI3VjQzLjAyMjNIMTE1LjAyN1pNMTE1LjAyNyA0My4wMzE0VjQzLjAyMjNIMTEzLjUyN1Y0My4wMzE0SDExNS4wMjdaTTExNS4wMjcgNDMuMDQwNFY0My4wMzE0SDExMy41MjdWNDMuMDQwNEgxMTUuMDI3Wk0xMTUuMDI3IDQzLjA0OTRWNDMuMDQwNEgxMTMuNTI3VjQzLjA0OTRIMTE1LjAyN1pNMTE1LjAyNyA0My4wNTg0VjQzLjA0OTRIMTEzLjUyN1Y0My4wNTg0SDExNS4wMjdaTTExNS4wMjcgNDMuMDY3NFY0My4wNTg0SDExMy41MjdWNDMuMDY3NEgxMTUuMDI3Wk0xMTUuMDI3IDQzLjA3NjRWNDMuMDY3NEgxMTMuNTI3VjQzLjA3NjRIMTE1LjAyN1pNMTE1LjAyNyA0My4wODU0VjQzLjA3NjRIMTEzLjUyN1Y0My4wODU0SDExNS4wMjdaTTExNS4wMjcgNDMuMDk0M1Y0My4wODU0SDExMy41MjdWNDMuMDk0M0gxMTUuMDI3Wk0xMTUuMDI3IDQzLjEwMzNWNDMuMDk0M0gxMTMuNTI3VjQzLjEwMzNIMTE1LjAyN1pNMTE1LjAyNyA0My4xMTIyVjQzLjEwMzNIMTEzLjUyN1Y0My4xMTIySDExNS4wMjdaTTExNS4wMjcgNDMuMTIxMVY0My4xMTIySDExMy41MjdWNDMuMTIxMUgxMTUuMDI3Wk0xMTUuMDI3IDQzLjEzVjQzLjEyMTFIMTEzLjUyN1Y0My4xM0gxMTUuMDI3Wk0xMTUuMDI3IDQzLjEzODlWNDMuMTNIMTEzLjUyN1Y0My4xMzg5SDExNS4wMjdaTTExNS4wMjcgNDMuMTQ3OFY0My4xMzg5SDExMy41MjdWNDMuMTQ3OEgxMTUuMDI3Wk0xMTUuMDI3IDQzLjE1NjZWNDMuMTQ3OEgxMTMuNTI3VjQzLjE1NjZIMTE1LjAyN1pNMTE1LjAyNyA0My4xNjU1VjQzLjE1NjZIMTEzLjUyN1Y0My4xNjU1SDExNS4wMjdaTTExNS4wMjcgNDMuMTc0M1Y0My4xNjU1SDExMy41MjdWNDMuMTc0M0gxMTUuMDI3Wk0xMTUuMDI3IDQzLjE4MzJWNDMuMTc0M0gxMTMuNTI3VjQzLjE4MzJIMTE1LjAyN1pNMTE1LjAyNyA0My4xOTJWNDMuMTgzMkgxMTMuNTI3VjQzLjE5MkgxMTUuMDI3Wk0xMTUuMDI3IDQzLjIwMDhWNDMuMTkySDExMy41MjdWNDMuMjAwOEgxMTUuMDI3Wk0xMTUuMDI3IDQzLjIwOTZWNDMuMjAwOEgxMTMuNTI3VjQzLjIwOTZIMTE1LjAyN1pNMTE1LjAyNyA0My4yMTg0VjQzLjIwOTZIMTEzLjUyN1Y0My4yMTg0SDExNS4wMjdaTTExNS4wMjcgNDMuMjI3MlY0My4yMTg0SDExMy41MjdWNDMuMjI3MkgxMTUuMDI3Wk0xMTUuMDI3IDQzLjIzNTlWNDMuMjI3MkgxMTMuNTI3VjQzLjIzNTlIMTE1LjAyN1pNMTE1LjAyNyA0My4yNDQ3VjQzLjIzNTlIMTEzLjUyN1Y0My4yNDQ3SDExNS4wMjdaTTExNS4wMjcgNDMuMjUzNFY0My4yNDQ3SDExMy41MjdWNDMuMjUzNEgxMTUuMDI3Wk0xMTUuMDI3IDQzLjI2MjFWNDMuMjUzNEgxMTMuNTI3VjQzLjI2MjFIMTE1LjAyN1pNMTE1LjAyNyA0My4yNzA4VjQzLjI2MjFIMTEzLjUyN1Y0My4yNzA4SDExNS4wMjdaTTExNS4wMjcgNDMuMjc5NVY0My4yNzA4SDExMy41MjdWNDMuMjc5NUgxMTUuMDI3Wk0xMTUuMDI3IDQzLjI4ODJWNDMuMjc5NUgxMTMuNTI3VjQzLjI4ODJIMTE1LjAyN1pNMTE1LjAyNyA0My4yOTY5VjQzLjI4ODJIMTEzLjUyN1Y0My4yOTY5SDExNS4wMjdaTTExNS4wMjcgNDMuMzA1NlY0My4yOTY5SDExMy41MjdWNDMuMzA1NkgxMTUuMDI3Wk0xMTUuMDI3IDQzLjMxNDJWNDMuMzA1NkgxMTMuNTI3VjQzLjMxNDJIMTE1LjAyN1pNMTE1LjAyNyA0My4zMjI4VjQzLjMxNDJIMTEzLjUyN1Y0My4zMjI4SDExNS4wMjdaTTExNS4wMjcgNDMuMzMxNVY0My4zMjI4SDExMy41MjdWNDMuMzMxNUgxMTUuMDI3Wk0xMTUuMDI3IDQzLjM0MDFWNDMuMzMxNUgxMTMuNTI3VjQzLjM0MDFIMTE1LjAyN1pNMTE1LjAyNyA0My4zNDg3VjQzLjM0MDFIMTEzLjUyN1Y0My4zNDg3SDExNS4wMjdaTTExNS4wMjcgNDMuMzU3M1Y0My4zNDg3SDExMy41MjdWNDMuMzU3M0gxMTUuMDI3Wk0xMTUuMDI3IDQzLjM2NThWNDMuMzU3M0gxMTMuNTI3VjQzLjM2NThIMTE1LjAyN1pNMTE1LjAyNyA0My4zNzQ0VjQzLjM2NThIMTEzLjUyN1Y0My4zNzQ0SDExNS4wMjdaTTExNS4wMjcgNDMuMzgzVjQzLjM3NDRIMTEzLjUyN1Y0My4zODNIMTE1LjAyN1pNMTE1LjAyNyA0My4zOTE1VjQzLjM4M0gxMTMuNTI3VjQzLjM5MTVIMTE1LjAyN1pNMTE1LjAyNyA0My40VjQzLjM5MTVIMTEzLjUyN1Y0My40SDExNS4wMjdaTTExNS4wMjcgNDMuNDA4NVY0My40SDExMy41MjdWNDMuNDA4NUgxMTUuMDI3Wk0xMTUuMDI3IDQzLjQxN1Y0My40MDg1SDExMy41MjdWNDMuNDE3SDExNS4wMjdaTTExNS4wMjcgNDMuNDI1NVY0My40MTdIMTEzLjUyN1Y0My40MjU1SDExNS4wMjdaTTExNS4wMjcgNDMuNDM0VjQzLjQyNTVIMTEzLjUyN1Y0My40MzRIMTE1LjAyN1pNMTE1LjAyNyA0My40NDI1VjQzLjQzNEgxMTMuNTI3VjQzLjQ0MjVIMTE1LjAyN1pNMTE1LjAyNyA0My40NTA5VjQzLjQ0MjVIMTEzLjUyN1Y0My40NTA5SDExNS4wMjdaTTExNS4wMjcgNDMuNDU5NFY0My40NTA5SDExMy41MjdWNDMuNDU5NEgxMTUuMDI3Wk0xMTUuMDI3IDQzLjQ2NzhWNDMuNDU5NEgxMTMuNTI3VjQzLjQ2NzhIMTE1LjAyN1pNMTE1LjAyNyA0My40NzYyVjQzLjQ2NzhIMTEzLjUyN1Y0My40NzYySDExNS4wMjdaTTExNS4wMjcgNDMuNDg0NlY0My40NzYySDExMy41MjdWNDMuNDg0NkgxMTUuMDI3Wk0xMTUuMDI3IDQzLjQ5M1Y0My40ODQ2SDExMy41MjdWNDMuNDkzSDExNS4wMjdaTTExNS4wMjcgNDMuNTAxNFY0My40OTNIMTEzLjUyN1Y0My41MDE0SDExNS4wMjdaTTExNS4wMjcgNDMuNTA5OFY0My41MDE0SDExMy41MjdWNDMuNTA5OEgxMTUuMDI3Wk0xMTUuMDI3IDQzLjUxODFWNDMuNTA5OEgxMTMuNTI3VjQzLjUxODFIMTE1LjAyN1pNMTE1LjAyNyA0My41MjY1VjQzLjUxODFIMTEzLjUyN1Y0My41MjY1SDExNS4wMjdaTTExNS4wMjcgNDMuNTM0OFY0My41MjY1SDExMy41MjdWNDMuNTM0OEgxMTUuMDI3Wk0xMTUuMDI3IDQzLjU0MzFWNDMuNTM0OEgxMTMuNTI3VjQzLjU0MzFIMTE1LjAyN1pNMTE1LjAyNyA0My41NTE0VjQzLjU0MzFIMTEzLjUyN1Y0My41NTE0SDExNS4wMjdaTTExNS4wMjcgNDMuNTU5N1Y0My41NTE0SDExMy41MjdWNDMuNTU5N0gxMTUuMDI3Wk0xMTUuMDI3IDQzLjU2OFY0My41NTk3SDExMy41MjdWNDMuNTY4SDExNS4wMjdaTTExNS4wMjcgNDMuNTc2M1Y0My41NjhIMTEzLjUyN1Y0My41NzYzSDExNS4wMjdaTTExNS4wMjcgNDMuNTg0NlY0My41NzYzSDExMy41MjdWNDMuNTg0NkgxMTUuMDI3Wk0xMTUuMDI3IDQzLjU5MjhWNDMuNTg0NkgxMTMuNTI3VjQzLjU5MjhIMTE1LjAyN1pNMTE1LjAyNyA0My42MDFWNDMuNTkyOEgxMTMuNTI3VjQzLjYwMUgxMTUuMDI3Wk0xMTUuMDI3IDQzLjYwOTNWNDMuNjAxSDExMy41MjdWNDMuNjA5M0gxMTUuMDI3Wk0xMTUuMDI3IDQzLjYxNzVWNDMuNjA5M0gxMTMuNTI3VjQzLjYxNzVIMTE1LjAyN1pNMTE1LjAyNyA0My42MjU3VjQzLjYxNzVIMTEzLjUyN1Y0My42MjU3SDExNS4wMjdaTTExNS4wMjcgNDMuNjMzOVY0My42MjU3SDExMy41MjdWNDMuNjMzOUgxMTUuMDI3Wk0xMTUuMDI3IDQzLjY0MlY0My42MzM5SDExMy41MjdWNDMuNjQySDExNS4wMjdaTTExNS4wMjcgNDMuNjUwMlY0My42NDJIMTEzLjUyN1Y0My42NTAySDExNS4wMjdaTTExNS4wMjcgNDMuNjU4NFY0My42NTAySDExMy41MjdWNDMuNjU4NEgxMTUuMDI3Wk0xMTUuMDI3IDQzLjY2NjVWNDMuNjU4NEgxMTMuNTI3VjQzLjY2NjVIMTE1LjAyN1pNMTE1LjAyNyA0My42NzQ2VjQzLjY2NjVIMTEzLjUyN1Y0My42NzQ2SDExNS4wMjdaTTExNS4wMjcgNDMuNjgyN1Y0My42NzQ2SDExMy41MjdWNDMuNjgyN0gxMTUuMDI3Wk0xMTUuMDI3IDQzLjY5MDhWNDMuNjgyN0gxMTMuNTI3VjQzLjY5MDhIMTE1LjAyN1pNMTE1LjAyNyA0My42OTg5VjQzLjY5MDhIMTEzLjUyN1Y0My42OTg5SDExNS4wMjdaTTExNS4wMjcgNDMuNzA3VjQzLjY5ODlIMTEzLjUyN1Y0My43MDdIMTE1LjAyN1pNMTE1LjAyNyA0My43MTUxVjQzLjcwN0gxMTMuNTI3VjQzLjcxNTFIMTE1LjAyN1pNMTE1LjAyNyA0My43MjMxVjQzLjcxNTFIMTEzLjUyN1Y0My43MjMxSDExNS4wMjdaTTExNS4wMjcgNDMuNzMxMlY0My43MjMxSDExMy41MjdWNDMuNzMxMkgxMTUuMDI3Wk0xMTUuMDI3IDQzLjczOTJWNDMuNzMxMkgxMTMuNTI3VjQzLjczOTJIMTE1LjAyN1pNMTE1LjAyNyA0My43NDcyVjQzLjczOTJIMTEzLjUyN1Y0My43NDcySDExNS4wMjdaTTExNS4wMjcgNDMuNzU1MlY0My43NDcySDExMy41MjdWNDMuNzU1MkgxMTUuMDI3Wk0xMTUuMDI3IDQzLjc2MzJWNDMuNzU1MkgxMTMuNTI3VjQzLjc2MzJIMTE1LjAyN1pNMTE1LjAyNyA0My43NzEyVjQzLjc2MzJIMTEzLjUyN1Y0My43NzEySDExNS4wMjdaTTExNS4wMjcgNDMuNzc5MVY0My43NzEySDExMy41MjdWNDMuNzc5MUgxMTUuMDI3Wk0xMTUuMDI3IDQzLjc4NzFWNDMuNzc5MUgxMTMuNTI3VjQzLjc4NzFIMTE1LjAyN1pNMTE1LjAyNyA0My43OTVWNDMuNzg3MUgxMTMuNTI3VjQzLjc5NUgxMTUuMDI3Wk0xMTUuMDI3IDQzLjgwM1Y0My43OTVIMTEzLjUyN1Y0My44MDNIMTE1LjAyN1pNMTE1LjAyNyA0My44MTA5VjQzLjgwM0gxMTMuNTI3VjQzLjgxMDlIMTE1LjAyN1pNMTE1LjAyNyA0My44MTg4VjQzLjgxMDlIMTEzLjUyN1Y0My44MTg4SDExNS4wMjdaTTExNS4wMjcgNDMuODI2N1Y0My44MTg4SDExMy41MjdWNDMuODI2N0gxMTUuMDI3Wk0xMTUuMDI3IDQzLjgzNDZWNDMuODI2N0gxMTMuNTI3VjQzLjgzNDZIMTE1LjAyN1pNMTE1LjAyNyA0My44NDI1VjQzLjgzNDZIMTEzLjUyN1Y0My44NDI1SDExNS4wMjdaTTExNS4wMjcgNDMuODUwM1Y0My44NDI1SDExMy41MjdWNDMuODUwM0gxMTUuMDI3Wk0xMTUuMDI3IDQzLjg1ODJWNDMuODUwM0gxMTMuNTI3VjQzLjg1ODJIMTE1LjAyN1pNMTE1LjAyNyA0My44NjZWNDMuODU4MkgxMTMuNTI3VjQzLjg2NkgxMTUuMDI3Wk0xMTUuMDI3IDQzLjg3MzhWNDMuODY2SDExMy41MjdWNDMuODczOEgxMTUuMDI3Wk0xMTUuMDI3IDQzLjg4MTZWNDMuODczOEgxMTMuNTI3VjQzLjg4MTZIMTE1LjAyN1pNMTE1LjAyNyA0My44ODk0VjQzLjg4MTZIMTEzLjUyN1Y0My44ODk0SDExNS4wMjdaTTExNS4wMjcgNDMuODk3MlY0My44ODk0SDExMy41MjdWNDMuODk3MkgxMTUuMDI3Wk0xMTUuMDI3IDQzLjkwNVY0My44OTcySDExMy41MjdWNDMuOTA1SDExNS4wMjdaTTExNS4wMjcgNDMuOTEyN1Y0My45MDVIMTEzLjUyN1Y0My45MTI3SDExNS4wMjdaTTExNS4wMjcgNDMuOTIwNVY0My45MTI3SDExMy41MjdWNDMuOTIwNUgxMTUuMDI3Wk0xMTUuMDI3IDQzLjkyODJWNDMuOTIwNUgxMTMuNTI3VjQzLjkyODJIMTE1LjAyN1pNMTE1LjAyNyA0My45MzU5VjQzLjkyODJIMTEzLjUyN1Y0My45MzU5SDExNS4wMjdaTTExNS4wMjcgNDMuOTQzN1Y0My45MzU5SDExMy41MjdWNDMuOTQzN0gxMTUuMDI3Wk0xMTUuMDI3IDQzLjk1MTRWNDMuOTQzN0gxMTMuNTI3VjQzLjk1MTRIMTE1LjAyN1pNMTE1LjAyNyA0My45NTlWNDMuOTUxNEgxMTMuNTI3VjQzLjk1OUgxMTUuMDI3Wk0xMTUuMDI3IDQzLjk2NjdWNDMuOTU5SDExMy41MjdWNDMuOTY2N0gxMTUuMDI3Wk0xMTUuMDI3IDQzLjk3NDRWNDMuOTY2N0gxMTMuNTI3VjQzLjk3NDRIMTE1LjAyN1pNMTE1LjAyNyA0My45ODJWNDMuOTc0NEgxMTMuNTI3VjQzLjk4MkgxMTUuMDI3Wk0xMTUuMDI3IDQzLjk4OTdWNDMuOTgySDExMy41MjdWNDMuOTg5N0gxMTUuMDI3Wk0xMTUuMDI3IDQzLjk5NzNWNDMuOTg5N0gxMTMuNTI3VjQzLjk5NzNIMTE1LjAyN1pNMTE1LjAyNyA0NC4wMDQ5VjQzLjk5NzNIMTEzLjUyN1Y0NC4wMDQ5SDExNS4wMjdaTTExNS4wMjcgNDQuMDEyNVY0NC4wMDQ5SDExMy41MjdWNDQuMDEyNUgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjAyMDFWNDQuMDEyNUgxMTMuNTI3VjQ0LjAyMDFIMTE1LjAyN1pNMTE1LjAyNyA0NC4wMjc3VjQ0LjAyMDFIMTEzLjUyN1Y0NC4wMjc3SDExNS4wMjdaTTExNS4wMjcgNDQuMDM1M1Y0NC4wMjc3SDExMy41MjdWNDQuMDM1M0gxMTUuMDI3Wk0xMTUuMDI3IDQ0LjA0MjhWNDQuMDM1M0gxMTMuNTI3VjQ0LjA0MjhIMTE1LjAyN1pNMTE1LjAyNyA0NC4wNTA0VjQ0LjA0MjhIMTEzLjUyN1Y0NC4wNTA0SDExNS4wMjdaTTExNS4wMjcgNDQuMDU3OVY0NC4wNTA0SDExMy41MjdWNDQuMDU3OUgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjA2NTRWNDQuMDU3OUgxMTMuNTI3VjQ0LjA2NTRIMTE1LjAyN1pNMTE1LjAyNyA0NC4wNzI5VjQ0LjA2NTRIMTEzLjUyN1Y0NC4wNzI5SDExNS4wMjdaTTExNS4wMjcgNDQuMDgwNFY0NC4wNzI5SDExMy41MjdWNDQuMDgwNEgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjA4NzlWNDQuMDgwNEgxMTMuNTI3VjQ0LjA4NzlIMTE1LjAyN1pNMTE1LjAyNyA0NC4wOTUzVjQ0LjA4NzlIMTEzLjUyN1Y0NC4wOTUzSDExNS4wMjdaTTExNS4wMjcgNDQuMTAyOFY0NC4wOTUzSDExMy41MjdWNDQuMTAyOEgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjExMDJWNDQuMTAyOEgxMTMuNTI3VjQ0LjExMDJIMTE1LjAyN1pNMTE1LjAyNyA0NC4xMTc3VjQ0LjExMDJIMTEzLjUyN1Y0NC4xMTc3SDExNS4wMjdaTTExNS4wMjcgNDQuMTI1MVY0NC4xMTc3SDExMy41MjdWNDQuMTI1MUgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjEzMjVWNDQuMTI1MUgxMTMuNTI3VjQ0LjEzMjVIMTE1LjAyN1pNMTE1LjAyNyA0NC4xMzk5VjQ0LjEzMjVIMTEzLjUyN1Y0NC4xMzk5SDExNS4wMjdaTTExNS4wMjcgNDQuMTQ3M1Y0NC4xMzk5SDExMy41MjdWNDQuMTQ3M0gxMTUuMDI3Wk0xMTUuMDI3IDQ0LjE1NDdWNDQuMTQ3M0gxMTMuNTI3VjQ0LjE1NDdIMTE1LjAyN1pNMTE1LjAyNyA0NC4xNjJWNDQuMTU0N0gxMTMuNTI3VjQ0LjE2MkgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjE2OTRWNDQuMTYySDExMy41MjdWNDQuMTY5NEgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjE3NjdWNDQuMTY5NEgxMTMuNTI3VjQ0LjE3NjdIMTE1LjAyN1pNMTE1LjAyNyA0NC4xODRWNDQuMTc2N0gxMTMuNTI3VjQ0LjE4NEgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjE5MTNWNDQuMTg0SDExMy41MjdWNDQuMTkxM0gxMTUuMDI3Wk0xMTUuMDI3IDQ0LjE5ODZWNDQuMTkxM0gxMTMuNTI3VjQ0LjE5ODZIMTE1LjAyN1pNMTE1LjAyNyA0NC4yMDU5VjQ0LjE5ODZIMTEzLjUyN1Y0NC4yMDU5SDExNS4wMjdaTTExNS4wMjcgNDQuMjEzMlY0NC4yMDU5SDExMy41MjdWNDQuMjEzMkgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjIyMDVWNDQuMjEzMkgxMTMuNTI3VjQ0LjIyMDVIMTE1LjAyN1pNMTE1LjAyNyA0NC4yMjc3VjQ0LjIyMDVIMTEzLjUyN1Y0NC4yMjc3SDExNS4wMjdaTTExNS4wMjcgNDQuMjM0OVY0NC4yMjc3SDExMy41MjdWNDQuMjM0OUgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjI0MjJWNDQuMjM0OUgxMTMuNTI3VjQ0LjI0MjJIMTE1LjAyN1pNMTE1LjAyNyA0NC4yNDk0VjQ0LjI0MjJIMTEzLjUyN1Y0NC4yNDk0SDExNS4wMjdaTTExNS4wMjcgNDQuMjU2NlY0NC4yNDk0SDExMy41MjdWNDQuMjU2NkgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjI2MzhWNDQuMjU2NkgxMTMuNTI3VjQ0LjI2MzhIMTE1LjAyN1pNMTE1LjAyNyA0NC4yNzA5VjQ0LjI2MzhIMTEzLjUyN1Y0NC4yNzA5SDExNS4wMjdaTTExNS4wMjcgNDQuMjc4MVY0NC4yNzA5SDExMy41MjdWNDQuMjc4MUgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjI4NTNWNDQuMjc4MUgxMTMuNTI3VjQ0LjI4NTNIMTE1LjAyN1pNMTE1LjAyNyA0NC4yOTI0VjQ0LjI4NTNIMTEzLjUyN1Y0NC4yOTI0SDExNS4wMjdaTTExNS4wMjcgNDQuMjk5NVY0NC4yOTI0SDExMy41MjdWNDQuMjk5NUgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjMwNjZWNDQuMjk5NUgxMTMuNTI3VjQ0LjMwNjZIMTE1LjAyN1pNMTE1LjAyNyA0NC4zMTM3VjQ0LjMwNjZIMTEzLjUyN1Y0NC4zMTM3SDExNS4wMjdaTTExNS4wMjcgNDQuMzIwOFY0NC4zMTM3SDExMy41MjdWNDQuMzIwOEgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjMyNzlWNDQuMzIwOEgxMTMuNTI3VjQ0LjMyNzlIMTE1LjAyN1pNMTE1LjAyNyA0NC4zMzVWNDQuMzI3OUgxMTMuNTI3VjQ0LjMzNUgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjM0MlY0NC4zMzVIMTEzLjUyN1Y0NC4zNDJIMTE1LjAyN1pNMTE1LjAyNyA0NC4zNDkxVjQ0LjM0MkgxMTMuNTI3VjQ0LjM0OTFIMTE1LjAyN1pNMTE1LjAyNyA0NC4zNTYxVjQ0LjM0OTFIMTEzLjUyN1Y0NC4zNTYxSDExNS4wMjdaTTExNS4wMjcgNDQuMzYzMVY0NC4zNTYxSDExMy41MjdWNDQuMzYzMUgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjM3MDFWNDQuMzYzMUgxMTMuNTI3VjQ0LjM3MDFIMTE1LjAyN1pNMTE1LjAyNyA0NC4zNzcxVjQ0LjM3MDFIMTEzLjUyN1Y0NC4zNzcxSDExNS4wMjdaTTExNS4wMjcgNDQuMzg0MVY0NC4zNzcxSDExMy41MjdWNDQuMzg0MUgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjM5MTFWNDQuMzg0MUgxMTMuNTI3VjQ0LjM5MTFIMTE1LjAyN1pNMTE1LjAyNyA0NC4zOThWNDQuMzkxMUgxMTMuNTI3VjQ0LjM5OEgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjQwNVY0NC4zOThIMTEzLjUyN1Y0NC40MDVIMTE1LjAyN1pNMTE1LjAyNyA0NC40MTE5VjQ0LjQwNUgxMTMuNTI3VjQ0LjQxMTlIMTE1LjAyN1pNMTE1LjAyNyA0NC40MTg4VjQ0LjQxMTlIMTEzLjUyN1Y0NC40MTg4SDExNS4wMjdaTTExNS4wMjcgNDQuNDI1N1Y0NC40MTg4SDExMy41MjdWNDQuNDI1N0gxMTUuMDI3Wk0xMTUuMDI3IDQ0LjQzMjZWNDQuNDI1N0gxMTMuNTI3VjQ0LjQzMjZIMTE1LjAyN1pNMTE1LjAyNyA0NC40Mzk1VjQ0LjQzMjZIMTEzLjUyN1Y0NC40Mzk1SDExNS4wMjdaTTExNS4wMjcgNDQuNDQ2NFY0NC40Mzk1SDExMy41MjdWNDQuNDQ2NEgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjQ1MzNWNDQuNDQ2NEgxMTMuNTI3VjQ0LjQ1MzNIMTE1LjAyN1pNMTE1LjAyNyA0NC40NjAxVjQ0LjQ1MzNIMTEzLjUyN1Y0NC40NjAxSDExNS4wMjdaTTExNS4wMjcgNDQuNDY2OVY0NC40NjAxSDExMy41MjdWNDQuNDY2OUgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjQ3MzhWNDQuNDY2OUgxMTMuNTI3VjQ0LjQ3MzhIMTE1LjAyN1pNMTE1LjAyNyA0NC40ODA2VjQ0LjQ3MzhIMTEzLjUyN1Y0NC40ODA2SDExNS4wMjdaTTExNS4wMjcgNDQuNDg3NFY0NC40ODA2SDExMy41MjdWNDQuNDg3NEgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjQ5NDJWNDQuNDg3NEgxMTMuNTI3VjQ0LjQ5NDJIMTE1LjAyN1pNMTE1LjAyNyA0NC41MDA5VjQ0LjQ5NDJIMTEzLjUyN1Y0NC41MDA5SDExNS4wMjdaTTExNS4wMjcgNDQuNTA3N1Y0NC41MDA5SDExMy41MjdWNDQuNTA3N0gxMTUuMDI3Wk0xMTUuMDI3IDQ0LjUxNDVWNDQuNTA3N0gxMTMuNTI3VjQ0LjUxNDVIMTE1LjAyN1pNMTE1LjAyNyA0NC41MjEyVjQ0LjUxNDVIMTEzLjUyN1Y0NC41MjEySDExNS4wMjdaTTExNS4wMjcgNDQuNTI3OVY0NC41MjEySDExMy41MjdWNDQuNTI3OUgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjUzNDZWNDQuNTI3OUgxMTMuNTI3VjQ0LjUzNDZIMTE1LjAyN1pNMTE1LjAyNyA0NC41NDEzVjQ0LjUzNDZIMTEzLjUyN1Y0NC41NDEzSDExNS4wMjdaTTExNS4wMjcgNDQuNTQ4VjQ0LjU0MTNIMTEzLjUyN1Y0NC41NDhIMTE1LjAyN1pNMTE1LjAyNyA0NC41NTQ3VjQ0LjU0OEgxMTMuNTI3VjQ0LjU1NDdIMTE1LjAyN1pNMTE1LjAyNyA0NC41NjE0VjQ0LjU1NDdIMTEzLjUyN1Y0NC41NjE0SDExNS4wMjdaTTExNS4wMjcgNDQuNTY4VjQ0LjU2MTRIMTEzLjUyN1Y0NC41NjhIMTE1LjAyN1pNMTE1LjAyNyA0NC41NzQ3VjQ0LjU2OEgxMTMuNTI3VjQ0LjU3NDdIMTE1LjAyN1pNMTE1LjAyNyA0NC41ODEzVjQ0LjU3NDdIMTEzLjUyN1Y0NC41ODEzSDExNS4wMjdaTTExNS4wMjcgNDQuNTg3OVY0NC41ODEzSDExMy41MjdWNDQuNTg3OUgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjU5NDVWNDQuNTg3OUgxMTMuNTI3VjQ0LjU5NDVIMTE1LjAyN1pNMTE1LjAyNyA0NC42MDExVjQ0LjU5NDVIMTEzLjUyN1Y0NC42MDExSDExNS4wMjdaTTExNS4wMjcgNDQuNjA3N1Y0NC42MDExSDExMy41MjdWNDQuNjA3N0gxMTUuMDI3Wk0xMTUuMDI3IDQ0LjYxNDJWNDQuNjA3N0gxMTMuNTI3VjQ0LjYxNDJIMTE1LjAyN1pNMTE1LjAyNyA0NC42MjA4VjQ0LjYxNDJIMTEzLjUyN1Y0NC42MjA4SDExNS4wMjdaTTExNS4wMjcgNDQuNjI3M1Y0NC42MjA4SDExMy41MjdWNDQuNjI3M0gxMTUuMDI3Wk0xMTUuMDI3IDQ0LjYzMzlWNDQuNjI3M0gxMTMuNTI3VjQ0LjYzMzlIMTE1LjAyN1pNMTE1LjAyNyA0NC42NDA0VjQ0LjYzMzlIMTEzLjUyN1Y0NC42NDA0SDExNS4wMjdaTTExNS4wMjcgNDQuNjQ2OVY0NC42NDA0SDExMy41MjdWNDQuNjQ2OUgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjY1MzRWNDQuNjQ2OUgxMTMuNTI3VjQ0LjY1MzRIMTE1LjAyN1pNMTE1LjAyNyA0NC42NTk5VjQ0LjY1MzRIMTEzLjUyN1Y0NC42NTk5SDExNS4wMjdaTTExNS4wMjcgNDQuNjY2NFY0NC42NTk5SDExMy41MjdWNDQuNjY2NEgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjY3MjhWNDQuNjY2NEgxMTMuNTI3VjQ0LjY3MjhIMTE1LjAyN1pNMTE1LjAyNyA0NC42NzkzVjQ0LjY3MjhIMTEzLjUyN1Y0NC42NzkzSDExNS4wMjdaTTExNS4wMjcgNDQuNjg1N1Y0NC42NzkzSDExMy41MjdWNDQuNjg1N0gxMTUuMDI3Wk0xMTUuMDI3IDQ0LjY5MjFWNDQuNjg1N0gxMTMuNTI3VjQ0LjY5MjFIMTE1LjAyN1pNMTE1LjAyNyA0NC42OTg1VjQ0LjY5MjFIMTEzLjUyN1Y0NC42OTg1SDExNS4wMjdaTTExNS4wMjcgNDQuNzA0OVY0NC42OTg1SDExMy41MjdWNDQuNzA0OUgxMTUuMDI3Wk0xMTUuMDI3IDQ0LjcxMTNWNDQuNzA0OUgxMTMuNTI3VjQ0LjcxMTNIMTE1LjAyN1pNMTE1LjAyNyA0NC43MTc3VjQ0LjcxMTNIMTEzLjUyN1Y0NC43MTc3SDExNS4wMjdaTTExNS4wMjcgNDQuNzI0VjQ0LjcxNzdIMTEzLjUyN1Y0NC43MjRIMTE1LjAyN1pNMTE1LjAyNyA0NC43MzA0VjQ0LjcyNEgxMTMuNTI3VjQ0LjczMDRIMTE1LjAyN1pNMTE1LjAyNyA0NC43MzY3VjQ0LjczMDRIMTEzLjUyN1Y0NC43MzY3SDExNS4wMjdaTTExNS4wMjcgNDQuNzQzVjQ0LjczNjdIMTEzLjUyN1Y0NC43NDNIMTE1LjAyN1pNMTE1LjAyNyA0NC43NDk0VjQ0Ljc0M0gxMTMuNTI3VjQ0Ljc0OTRIMTE1LjAyN1pNMTE1LjAyNyA0NC43NTU3VjQ0Ljc0OTRIMTEzLjUyN1Y0NC43NTU3SDExNS4wMjdaTTExNS4wMjcgNDQuNzYxOVY0NC43NTU3SDExMy41MjdWNDQuNzYxOUgxMTUuMDI3Wk0xMTUuMDI3IDQ0Ljc2ODJWNDQuNzYxOUgxMTMuNTI3VjQ0Ljc2ODJIMTE1LjAyN1pNMTE1LjAyNyA0NC43NzQ1VjQ0Ljc2ODJIMTEzLjUyN1Y0NC43NzQ1SDExNS4wMjdaTTExNS4wMjcgNDQuNzgwN1Y0NC43NzQ1SDExMy41MjdWNDQuNzgwN0gxMTUuMDI3Wk0xMTUuMDI3IDQ0Ljc4N1Y0NC43ODA3SDExMy41MjdWNDQuNzg3SDExNS4wMjdaTTExMi43NzcgNDUuNTM3SDExNC4yNzdWNDQuMDM3SDExMi43NzdWNDUuNTM3Wk0xMTIuMDI3IDQ0Ljc4MDdWNDQuNzg3SDExMy41MjdWNDQuNzgwN0gxMTIuMDI3Wk0xMTIuMDI3IDQ0Ljc3NDVWNDQuNzgwN0gxMTMuNTI3VjQ0Ljc3NDVIMTEyLjAyN1pNMTEyLjAyNyA0NC43NjgyVjQ0Ljc3NDVIMTEzLjUyN1Y0NC43NjgySDExMi4wMjdaTTExMi4wMjcgNDQuNzYxOVY0NC43NjgySDExMy41MjdWNDQuNzYxOUgxMTIuMDI3Wk0xMTIuMDI3IDQ0Ljc1NTdWNDQuNzYxOUgxMTMuNTI3VjQ0Ljc1NTdIMTEyLjAyN1pNMTEyLjAyNyA0NC43NDk0VjQ0Ljc1NTdIMTEzLjUyN1Y0NC43NDk0SDExMi4wMjdaTTExMi4wMjcgNDQuNzQzVjQ0Ljc0OTRIMTEzLjUyN1Y0NC43NDNIMTEyLjAyN1pNMTEyLjAyNyA0NC43MzY3VjQ0Ljc0M0gxMTMuNTI3VjQ0LjczNjdIMTEyLjAyN1pNMTEyLjAyNyA0NC43MzA0VjQ0LjczNjdIMTEzLjUyN1Y0NC43MzA0SDExMi4wMjdaTTExMi4wMjcgNDQuNzI0VjQ0LjczMDRIMTEzLjUyN1Y0NC43MjRIMTEyLjAyN1pNMTEyLjAyNyA0NC43MTc3VjQ0LjcyNEgxMTMuNTI3VjQ0LjcxNzdIMTEyLjAyN1pNMTEyLjAyNyA0NC43MTEzVjQ0LjcxNzdIMTEzLjUyN1Y0NC43MTEzSDExMi4wMjdaTTExMi4wMjcgNDQuNzA0OVY0NC43MTEzSDExMy41MjdWNDQuNzA0OUgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjY5ODVWNDQuNzA0OUgxMTMuNTI3VjQ0LjY5ODVIMTEyLjAyN1pNMTEyLjAyNyA0NC42OTIxVjQ0LjY5ODVIMTEzLjUyN1Y0NC42OTIxSDExMi4wMjdaTTExMi4wMjcgNDQuNjg1N1Y0NC42OTIxSDExMy41MjdWNDQuNjg1N0gxMTIuMDI3Wk0xMTIuMDI3IDQ0LjY3OTNWNDQuNjg1N0gxMTMuNTI3VjQ0LjY3OTNIMTEyLjAyN1pNMTEyLjAyNyA0NC42NzI4VjQ0LjY3OTNIMTEzLjUyN1Y0NC42NzI4SDExMi4wMjdaTTExMi4wMjcgNDQuNjY2NFY0NC42NzI4SDExMy41MjdWNDQuNjY2NEgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjY1OTlWNDQuNjY2NEgxMTMuNTI3VjQ0LjY1OTlIMTEyLjAyN1pNMTEyLjAyNyA0NC42NTM0VjQ0LjY1OTlIMTEzLjUyN1Y0NC42NTM0SDExMi4wMjdaTTExMi4wMjcgNDQuNjQ2OVY0NC42NTM0SDExMy41MjdWNDQuNjQ2OUgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjY0MDRWNDQuNjQ2OUgxMTMuNTI3VjQ0LjY0MDRIMTEyLjAyN1pNMTEyLjAyNyA0NC42MzM5VjQ0LjY0MDRIMTEzLjUyN1Y0NC42MzM5SDExMi4wMjdaTTExMi4wMjcgNDQuNjI3M1Y0NC42MzM5SDExMy41MjdWNDQuNjI3M0gxMTIuMDI3Wk0xMTIuMDI3IDQ0LjYyMDhWNDQuNjI3M0gxMTMuNTI3VjQ0LjYyMDhIMTEyLjAyN1pNMTEyLjAyNyA0NC42MTQyVjQ0LjYyMDhIMTEzLjUyN1Y0NC42MTQySDExMi4wMjdaTTExMi4wMjcgNDQuNjA3N1Y0NC42MTQySDExMy41MjdWNDQuNjA3N0gxMTIuMDI3Wk0xMTIuMDI3IDQ0LjYwMTFWNDQuNjA3N0gxMTMuNTI3VjQ0LjYwMTFIMTEyLjAyN1pNMTEyLjAyNyA0NC41OTQ1VjQ0LjYwMTFIMTEzLjUyN1Y0NC41OTQ1SDExMi4wMjdaTTExMi4wMjcgNDQuNTg3OVY0NC41OTQ1SDExMy41MjdWNDQuNTg3OUgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjU4MTNWNDQuNTg3OUgxMTMuNTI3VjQ0LjU4MTNIMTEyLjAyN1pNMTEyLjAyNyA0NC41NzQ3VjQ0LjU4MTNIMTEzLjUyN1Y0NC41NzQ3SDExMi4wMjdaTTExMi4wMjcgNDQuNTY4VjQ0LjU3NDdIMTEzLjUyN1Y0NC41NjhIMTEyLjAyN1pNMTEyLjAyNyA0NC41NjE0VjQ0LjU2OEgxMTMuNTI3VjQ0LjU2MTRIMTEyLjAyN1pNMTEyLjAyNyA0NC41NTQ3VjQ0LjU2MTRIMTEzLjUyN1Y0NC41NTQ3SDExMi4wMjdaTTExMi4wMjcgNDQuNTQ4VjQ0LjU1NDdIMTEzLjUyN1Y0NC41NDhIMTEyLjAyN1pNMTEyLjAyNyA0NC41NDEzVjQ0LjU0OEgxMTMuNTI3VjQ0LjU0MTNIMTEyLjAyN1pNMTEyLjAyNyA0NC41MzQ2VjQ0LjU0MTNIMTEzLjUyN1Y0NC41MzQ2SDExMi4wMjdaTTExMi4wMjcgNDQuNTI3OVY0NC41MzQ2SDExMy41MjdWNDQuNTI3OUgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjUyMTJWNDQuNTI3OUgxMTMuNTI3VjQ0LjUyMTJIMTEyLjAyN1pNMTEyLjAyNyA0NC41MTQ1VjQ0LjUyMTJIMTEzLjUyN1Y0NC41MTQ1SDExMi4wMjdaTTExMi4wMjcgNDQuNTA3N1Y0NC41MTQ1SDExMy41MjdWNDQuNTA3N0gxMTIuMDI3Wk0xMTIuMDI3IDQ0LjUwMDlWNDQuNTA3N0gxMTMuNTI3VjQ0LjUwMDlIMTEyLjAyN1pNMTEyLjAyNyA0NC40OTQyVjQ0LjUwMDlIMTEzLjUyN1Y0NC40OTQySDExMi4wMjdaTTExMi4wMjcgNDQuNDg3NFY0NC40OTQySDExMy41MjdWNDQuNDg3NEgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjQ4MDZWNDQuNDg3NEgxMTMuNTI3VjQ0LjQ4MDZIMTEyLjAyN1pNMTEyLjAyNyA0NC40NzM4VjQ0LjQ4MDZIMTEzLjUyN1Y0NC40NzM4SDExMi4wMjdaTTExMi4wMjcgNDQuNDY2OVY0NC40NzM4SDExMy41MjdWNDQuNDY2OUgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjQ2MDFWNDQuNDY2OUgxMTMuNTI3VjQ0LjQ2MDFIMTEyLjAyN1pNMTEyLjAyNyA0NC40NTMzVjQ0LjQ2MDFIMTEzLjUyN1Y0NC40NTMzSDExMi4wMjdaTTExMi4wMjcgNDQuNDQ2NFY0NC40NTMzSDExMy41MjdWNDQuNDQ2NEgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjQzOTVWNDQuNDQ2NEgxMTMuNTI3VjQ0LjQzOTVIMTEyLjAyN1pNMTEyLjAyNyA0NC40MzI2VjQ0LjQzOTVIMTEzLjUyN1Y0NC40MzI2SDExMi4wMjdaTTExMi4wMjcgNDQuNDI1N1Y0NC40MzI2SDExMy41MjdWNDQuNDI1N0gxMTIuMDI3Wk0xMTIuMDI3IDQ0LjQxODhWNDQuNDI1N0gxMTMuNTI3VjQ0LjQxODhIMTEyLjAyN1pNMTEyLjAyNyA0NC40MTE5VjQ0LjQxODhIMTEzLjUyN1Y0NC40MTE5SDExMi4wMjdaTTExMi4wMjcgNDQuNDA1VjQ0LjQxMTlIMTEzLjUyN1Y0NC40MDVIMTEyLjAyN1pNMTEyLjAyNyA0NC4zOThWNDQuNDA1SDExMy41MjdWNDQuMzk4SDExMi4wMjdaTTExMi4wMjcgNDQuMzkxMVY0NC4zOThIMTEzLjUyN1Y0NC4zOTExSDExMi4wMjdaTTExMi4wMjcgNDQuMzg0MVY0NC4zOTExSDExMy41MjdWNDQuMzg0MUgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjM3NzFWNDQuMzg0MUgxMTMuNTI3VjQ0LjM3NzFIMTEyLjAyN1pNMTEyLjAyNyA0NC4zNzAxVjQ0LjM3NzFIMTEzLjUyN1Y0NC4zNzAxSDExMi4wMjdaTTExMi4wMjcgNDQuMzYzMVY0NC4zNzAxSDExMy41MjdWNDQuMzYzMUgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjM1NjFWNDQuMzYzMUgxMTMuNTI3VjQ0LjM1NjFIMTEyLjAyN1pNMTEyLjAyNyA0NC4zNDkxVjQ0LjM1NjFIMTEzLjUyN1Y0NC4zNDkxSDExMi4wMjdaTTExMi4wMjcgNDQuMzQyVjQ0LjM0OTFIMTEzLjUyN1Y0NC4zNDJIMTEyLjAyN1pNMTEyLjAyNyA0NC4zMzVWNDQuMzQySDExMy41MjdWNDQuMzM1SDExMi4wMjdaTTExMi4wMjcgNDQuMzI3OVY0NC4zMzVIMTEzLjUyN1Y0NC4zMjc5SDExMi4wMjdaTTExMi4wMjcgNDQuMzIwOFY0NC4zMjc5SDExMy41MjdWNDQuMzIwOEgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjMxMzdWNDQuMzIwOEgxMTMuNTI3VjQ0LjMxMzdIMTEyLjAyN1pNMTEyLjAyNyA0NC4zMDY2VjQ0LjMxMzdIMTEzLjUyN1Y0NC4zMDY2SDExMi4wMjdaTTExMi4wMjcgNDQuMjk5NVY0NC4zMDY2SDExMy41MjdWNDQuMjk5NUgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjI5MjRWNDQuMjk5NUgxMTMuNTI3VjQ0LjI5MjRIMTEyLjAyN1pNMTEyLjAyNyA0NC4yODUzVjQ0LjI5MjRIMTEzLjUyN1Y0NC4yODUzSDExMi4wMjdaTTExMi4wMjcgNDQuMjc4MVY0NC4yODUzSDExMy41MjdWNDQuMjc4MUgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjI3MDlWNDQuMjc4MUgxMTMuNTI3VjQ0LjI3MDlIMTEyLjAyN1pNMTEyLjAyNyA0NC4yNjM4VjQ0LjI3MDlIMTEzLjUyN1Y0NC4yNjM4SDExMi4wMjdaTTExMi4wMjcgNDQuMjU2NlY0NC4yNjM4SDExMy41MjdWNDQuMjU2NkgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjI0OTRWNDQuMjU2NkgxMTMuNTI3VjQ0LjI0OTRIMTEyLjAyN1pNMTEyLjAyNyA0NC4yNDIyVjQ0LjI0OTRIMTEzLjUyN1Y0NC4yNDIySDExMi4wMjdaTTExMi4wMjcgNDQuMjM0OVY0NC4yNDIySDExMy41MjdWNDQuMjM0OUgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjIyNzdWNDQuMjM0OUgxMTMuNTI3VjQ0LjIyNzdIMTEyLjAyN1pNMTEyLjAyNyA0NC4yMjA1VjQ0LjIyNzdIMTEzLjUyN1Y0NC4yMjA1SDExMi4wMjdaTTExMi4wMjcgNDQuMjEzMlY0NC4yMjA1SDExMy41MjdWNDQuMjEzMkgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjIwNTlWNDQuMjEzMkgxMTMuNTI3VjQ0LjIwNTlIMTEyLjAyN1pNMTEyLjAyNyA0NC4xOTg2VjQ0LjIwNTlIMTEzLjUyN1Y0NC4xOTg2SDExMi4wMjdaTTExMi4wMjcgNDQuMTkxM1Y0NC4xOTg2SDExMy41MjdWNDQuMTkxM0gxMTIuMDI3Wk0xMTIuMDI3IDQ0LjE4NFY0NC4xOTEzSDExMy41MjdWNDQuMTg0SDExMi4wMjdaTTExMi4wMjcgNDQuMTc2N1Y0NC4xODRIMTEzLjUyN1Y0NC4xNzY3SDExMi4wMjdaTTExMi4wMjcgNDQuMTY5NFY0NC4xNzY3SDExMy41MjdWNDQuMTY5NEgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjE2MlY0NC4xNjk0SDExMy41MjdWNDQuMTYySDExMi4wMjdaTTExMi4wMjcgNDQuMTU0N1Y0NC4xNjJIMTEzLjUyN1Y0NC4xNTQ3SDExMi4wMjdaTTExMi4wMjcgNDQuMTQ3M1Y0NC4xNTQ3SDExMy41MjdWNDQuMTQ3M0gxMTIuMDI3Wk0xMTIuMDI3IDQ0LjEzOTlWNDQuMTQ3M0gxMTMuNTI3VjQ0LjEzOTlIMTEyLjAyN1pNMTEyLjAyNyA0NC4xMzI1VjQ0LjEzOTlIMTEzLjUyN1Y0NC4xMzI1SDExMi4wMjdaTTExMi4wMjcgNDQuMTI1MVY0NC4xMzI1SDExMy41MjdWNDQuMTI1MUgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjExNzdWNDQuMTI1MUgxMTMuNTI3VjQ0LjExNzdIMTEyLjAyN1pNMTEyLjAyNyA0NC4xMTAyVjQ0LjExNzdIMTEzLjUyN1Y0NC4xMTAySDExMi4wMjdaTTExMi4wMjcgNDQuMTAyOFY0NC4xMTAySDExMy41MjdWNDQuMTAyOEgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjA5NTNWNDQuMTAyOEgxMTMuNTI3VjQ0LjA5NTNIMTEyLjAyN1pNMTEyLjAyNyA0NC4wODc5VjQ0LjA5NTNIMTEzLjUyN1Y0NC4wODc5SDExMi4wMjdaTTExMi4wMjcgNDQuMDgwNFY0NC4wODc5SDExMy41MjdWNDQuMDgwNEgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjA3MjlWNDQuMDgwNEgxMTMuNTI3VjQ0LjA3MjlIMTEyLjAyN1pNMTEyLjAyNyA0NC4wNjU0VjQ0LjA3MjlIMTEzLjUyN1Y0NC4wNjU0SDExMi4wMjdaTTExMi4wMjcgNDQuMDU3OVY0NC4wNjU0SDExMy41MjdWNDQuMDU3OUgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjA1MDRWNDQuMDU3OUgxMTMuNTI3VjQ0LjA1MDRIMTEyLjAyN1pNMTEyLjAyNyA0NC4wNDI4VjQ0LjA1MDRIMTEzLjUyN1Y0NC4wNDI4SDExMi4wMjdaTTExMi4wMjcgNDQuMDM1M1Y0NC4wNDI4SDExMy41MjdWNDQuMDM1M0gxMTIuMDI3Wk0xMTIuMDI3IDQ0LjAyNzdWNDQuMDM1M0gxMTMuNTI3VjQ0LjAyNzdIMTEyLjAyN1pNMTEyLjAyNyA0NC4wMjAxVjQ0LjAyNzdIMTEzLjUyN1Y0NC4wMjAxSDExMi4wMjdaTTExMi4wMjcgNDQuMDEyNVY0NC4wMjAxSDExMy41MjdWNDQuMDEyNUgxMTIuMDI3Wk0xMTIuMDI3IDQ0LjAwNDlWNDQuMDEyNUgxMTMuNTI3VjQ0LjAwNDlIMTEyLjAyN1pNMTEyLjAyNyA0My45OTczVjQ0LjAwNDlIMTEzLjUyN1Y0My45OTczSDExMi4wMjdaTTExMi4wMjcgNDMuOTg5N1Y0My45OTczSDExMy41MjdWNDMuOTg5N0gxMTIuMDI3Wk0xMTIuMDI3IDQzLjk4MlY0My45ODk3SDExMy41MjdWNDMuOTgySDExMi4wMjdaTTExMi4wMjcgNDMuOTc0NFY0My45ODJIMTEzLjUyN1Y0My45NzQ0SDExMi4wMjdaTTExMi4wMjcgNDMuOTY2N1Y0My45NzQ0SDExMy41MjdWNDMuOTY2N0gxMTIuMDI3Wk0xMTIuMDI3IDQzLjk1OVY0My45NjY3SDExMy41MjdWNDMuOTU5SDExMi4wMjdaTTExMi4wMjcgNDMuOTUxNFY0My45NTlIMTEzLjUyN1Y0My45NTE0SDExMi4wMjdaTTExMi4wMjcgNDMuOTQzN1Y0My45NTE0SDExMy41MjdWNDMuOTQzN0gxMTIuMDI3Wk0xMTIuMDI3IDQzLjkzNTlWNDMuOTQzN0gxMTMuNTI3VjQzLjkzNTlIMTEyLjAyN1pNMTEyLjAyNyA0My45MjgyVjQzLjkzNTlIMTEzLjUyN1Y0My45MjgySDExMi4wMjdaTTExMi4wMjcgNDMuOTIwNVY0My45MjgySDExMy41MjdWNDMuOTIwNUgxMTIuMDI3Wk0xMTIuMDI3IDQzLjkxMjdWNDMuOTIwNUgxMTMuNTI3VjQzLjkxMjdIMTEyLjAyN1pNMTEyLjAyNyA0My45MDVWNDMuOTEyN0gxMTMuNTI3VjQzLjkwNUgxMTIuMDI3Wk0xMTIuMDI3IDQzLjg5NzJWNDMuOTA1SDExMy41MjdWNDMuODk3MkgxMTIuMDI3Wk0xMTIuMDI3IDQzLjg4OTRWNDMuODk3MkgxMTMuNTI3VjQzLjg4OTRIMTEyLjAyN1pNMTEyLjAyNyA0My44ODE2VjQzLjg4OTRIMTEzLjUyN1Y0My44ODE2SDExMi4wMjdaTTExMi4wMjcgNDMuODczOFY0My44ODE2SDExMy41MjdWNDMuODczOEgxMTIuMDI3Wk0xMTIuMDI3IDQzLjg2NlY0My44NzM4SDExMy41MjdWNDMuODY2SDExMi4wMjdaTTExMi4wMjcgNDMuODU4MlY0My44NjZIMTEzLjUyN1Y0My44NTgySDExMi4wMjdaTTExMi4wMjcgNDMuODUwM1Y0My44NTgySDExMy41MjdWNDMuODUwM0gxMTIuMDI3Wk0xMTIuMDI3IDQzLjg0MjVWNDMuODUwM0gxMTMuNTI3VjQzLjg0MjVIMTEyLjAyN1pNMTEyLjAyNyA0My44MzQ2VjQzLjg0MjVIMTEzLjUyN1Y0My44MzQ2SDExMi4wMjdaTTExMi4wMjcgNDMuODI2N1Y0My44MzQ2SDExMy41MjdWNDMuODI2N0gxMTIuMDI3Wk0xMTIuMDI3IDQzLjgxODhWNDMuODI2N0gxMTMuNTI3VjQzLjgxODhIMTEyLjAyN1pNMTEyLjAyNyA0My44MTA5VjQzLjgxODhIMTEzLjUyN1Y0My44MTA5SDExMi4wMjdaTTExMi4wMjcgNDMuODAzVjQzLjgxMDlIMTEzLjUyN1Y0My44MDNIMTEyLjAyN1pNMTEyLjAyNyA0My43OTVWNDMuODAzSDExMy41MjdWNDMuNzk1SDExMi4wMjdaTTExMi4wMjcgNDMuNzg3MVY0My43OTVIMTEzLjUyN1Y0My43ODcxSDExMi4wMjdaTTExMi4wMjcgNDMuNzc5MVY0My43ODcxSDExMy41MjdWNDMuNzc5MUgxMTIuMDI3Wk0xMTIuMDI3IDQzLjc3MTJWNDMuNzc5MUgxMTMuNTI3VjQzLjc3MTJIMTEyLjAyN1pNMTEyLjAyNyA0My43NjMyVjQzLjc3MTJIMTEzLjUyN1Y0My43NjMySDExMi4wMjdaTTExMi4wMjcgNDMuNzU1MlY0My43NjMySDExMy41MjdWNDMuNzU1MkgxMTIuMDI3Wk0xMTIuMDI3IDQzLjc0NzJWNDMuNzU1MkgxMTMuNTI3VjQzLjc0NzJIMTEyLjAyN1pNMTEyLjAyNyA0My43MzkyVjQzLjc0NzJIMTEzLjUyN1Y0My43MzkySDExMi4wMjdaTTExMi4wMjcgNDMuNzMxMlY0My43MzkySDExMy41MjdWNDMuNzMxMkgxMTIuMDI3Wk0xMTIuMDI3IDQzLjcyMzFWNDMuNzMxMkgxMTMuNTI3VjQzLjcyMzFIMTEyLjAyN1pNMTEyLjAyNyA0My43MTUxVjQzLjcyMzFIMTEzLjUyN1Y0My43MTUxSDExMi4wMjdaTTExMi4wMjcgNDMuNzA3VjQzLjcxNTFIMTEzLjUyN1Y0My43MDdIMTEyLjAyN1pNMTEyLjAyNyA0My42OTg5VjQzLjcwN0gxMTMuNTI3VjQzLjY5ODlIMTEyLjAyN1pNMTEyLjAyNyA0My42OTA4VjQzLjY5ODlIMTEzLjUyN1Y0My42OTA4SDExMi4wMjdaTTExMi4wMjcgNDMuNjgyN1Y0My42OTA4SDExMy41MjdWNDMuNjgyN0gxMTIuMDI3Wk0xMTIuMDI3IDQzLjY3NDZWNDMuNjgyN0gxMTMuNTI3VjQzLjY3NDZIMTEyLjAyN1pNMTEyLjAyNyA0My42NjY1VjQzLjY3NDZIMTEzLjUyN1Y0My42NjY1SDExMi4wMjdaTTExMi4wMjcgNDMuNjU4NFY0My42NjY1SDExMy41MjdWNDMuNjU4NEgxMTIuMDI3Wk0xMTIuMDI3IDQzLjY1MDJWNDMuNjU4NEgxMTMuNTI3VjQzLjY1MDJIMTEyLjAyN1pNMTEyLjAyNyA0My42NDJWNDMuNjUwMkgxMTMuNTI3VjQzLjY0MkgxMTIuMDI3Wk0xMTIuMDI3IDQzLjYzMzlWNDMuNjQySDExMy41MjdWNDMuNjMzOUgxMTIuMDI3Wk0xMTIuMDI3IDQzLjYyNTdWNDMuNjMzOUgxMTMuNTI3VjQzLjYyNTdIMTEyLjAyN1pNMTEyLjAyNyA0My42MTc1VjQzLjYyNTdIMTEzLjUyN1Y0My42MTc1SDExMi4wMjdaTTExMi4wMjcgNDMuNjA5M1Y0My42MTc1SDExMy41MjdWNDMuNjA5M0gxMTIuMDI3Wk0xMTIuMDI3IDQzLjYwMVY0My42MDkzSDExMy41MjdWNDMuNjAxSDExMi4wMjdaTTExMi4wMjcgNDMuNTkyOFY0My42MDFIMTEzLjUyN1Y0My41OTI4SDExMi4wMjdaTTExMi4wMjcgNDMuNTg0NlY0My41OTI4SDExMy41MjdWNDMuNTg0NkgxMTIuMDI3Wk0xMTIuMDI3IDQzLjU3NjNWNDMuNTg0NkgxMTMuNTI3VjQzLjU3NjNIMTEyLjAyN1pNMTEyLjAyNyA0My41NjhWNDMuNTc2M0gxMTMuNTI3VjQzLjU2OEgxMTIuMDI3Wk0xMTIuMDI3IDQzLjU1OTdWNDMuNTY4SDExMy41MjdWNDMuNTU5N0gxMTIuMDI3Wk0xMTIuMDI3IDQzLjU1MTRWNDMuNTU5N0gxMTMuNTI3VjQzLjU1MTRIMTEyLjAyN1pNMTEyLjAyNyA0My41NDMxVjQzLjU1MTRIMTEzLjUyN1Y0My41NDMxSDExMi4wMjdaTTExMi4wMjcgNDMuNTM0OFY0My41NDMxSDExMy41MjdWNDMuNTM0OEgxMTIuMDI3Wk0xMTIuMDI3IDQzLjUyNjVWNDMuNTM0OEgxMTMuNTI3VjQzLjUyNjVIMTEyLjAyN1pNMTEyLjAyNyA0My41MTgxVjQzLjUyNjVIMTEzLjUyN1Y0My41MTgxSDExMi4wMjdaTTExMi4wMjcgNDMuNTA5OFY0My41MTgxSDExMy41MjdWNDMuNTA5OEgxMTIuMDI3Wk0xMTIuMDI3IDQzLjUwMTRWNDMuNTA5OEgxMTMuNTI3VjQzLjUwMTRIMTEyLjAyN1pNMTEyLjAyNyA0My40OTNWNDMuNTAxNEgxMTMuNTI3VjQzLjQ5M0gxMTIuMDI3Wk0xMTIuMDI3IDQzLjQ4NDZWNDMuNDkzSDExMy41MjdWNDMuNDg0NkgxMTIuMDI3Wk0xMTIuMDI3IDQzLjQ3NjJWNDMuNDg0NkgxMTMuNTI3VjQzLjQ3NjJIMTEyLjAyN1pNMTEyLjAyNyA0My40Njc4VjQzLjQ3NjJIMTEzLjUyN1Y0My40Njc4SDExMi4wMjdaTTExMi4wMjcgNDMuNDU5NFY0My40Njc4SDExMy41MjdWNDMuNDU5NEgxMTIuMDI3Wk0xMTIuMDI3IDQzLjQ1MDlWNDMuNDU5NEgxMTMuNTI3VjQzLjQ1MDlIMTEyLjAyN1pNMTEyLjAyNyA0My40NDI1VjQzLjQ1MDlIMTEzLjUyN1Y0My40NDI1SDExMi4wMjdaTTExMi4wMjcgNDMuNDM0VjQzLjQ0MjVIMTEzLjUyN1Y0My40MzRIMTEyLjAyN1pNMTEyLjAyNyA0My40MjU1VjQzLjQzNEgxMTMuNTI3VjQzLjQyNTVIMTEyLjAyN1pNMTEyLjAyNyA0My40MTdWNDMuNDI1NUgxMTMuNTI3VjQzLjQxN0gxMTIuMDI3Wk0xMTIuMDI3IDQzLjQwODVWNDMuNDE3SDExMy41MjdWNDMuNDA4NUgxMTIuMDI3Wk0xMTIuMDI3IDQzLjRWNDMuNDA4NUgxMTMuNTI3VjQzLjRIMTEyLjAyN1pNMTEyLjAyNyA0My4zOTE1VjQzLjRIMTEzLjUyN1Y0My4zOTE1SDExMi4wMjdaTTExMi4wMjcgNDMuMzgzVjQzLjM5MTVIMTEzLjUyN1Y0My4zODNIMTEyLjAyN1pNMTEyLjAyNyA0My4zNzQ0VjQzLjM4M0gxMTMuNTI3VjQzLjM3NDRIMTEyLjAyN1pNMTEyLjAyNyA0My4zNjU4VjQzLjM3NDRIMTEzLjUyN1Y0My4zNjU4SDExMi4wMjdaTTExMi4wMjcgNDMuMzU3M1Y0My4zNjU4SDExMy41MjdWNDMuMzU3M0gxMTIuMDI3Wk0xMTIuMDI3IDQzLjM0ODdWNDMuMzU3M0gxMTMuNTI3VjQzLjM0ODdIMTEyLjAyN1pNMTEyLjAyNyA0My4zNDAxVjQzLjM0ODdIMTEzLjUyN1Y0My4zNDAxSDExMi4wMjdaTTExMi4wMjcgNDMuMzMxNVY0My4zNDAxSDExMy41MjdWNDMuMzMxNUgxMTIuMDI3Wk0xMTIuMDI3IDQzLjMyMjhWNDMuMzMxNUgxMTMuNTI3VjQzLjMyMjhIMTEyLjAyN1pNMTEyLjAyNyA0My4zMTQyVjQzLjMyMjhIMTEzLjUyN1Y0My4zMTQySDExMi4wMjdaTTExMi4wMjcgNDMuMzA1NlY0My4zMTQySDExMy41MjdWNDMuMzA1NkgxMTIuMDI3Wk0xMTIuMDI3IDQzLjI5NjlWNDMuMzA1NkgxMTMuNTI3VjQzLjI5NjlIMTEyLjAyN1pNMTEyLjAyNyA0My4yODgyVjQzLjI5NjlIMTEzLjUyN1Y0My4yODgySDExMi4wMjdaTTExMi4wMjcgNDMuMjc5NVY0My4yODgySDExMy41MjdWNDMuMjc5NUgxMTIuMDI3Wk0xMTIuMDI3IDQzLjI3MDhWNDMuMjc5NUgxMTMuNTI3VjQzLjI3MDhIMTEyLjAyN1pNMTEyLjAyNyA0My4yNjIxVjQzLjI3MDhIMTEzLjUyN1Y0My4yNjIxSDExMi4wMjdaTTExMi4wMjcgNDMuMjUzNFY0My4yNjIxSDExMy41MjdWNDMuMjUzNEgxMTIuMDI3Wk0xMTIuMDI3IDQzLjI0NDdWNDMuMjUzNEgxMTMuNTI3VjQzLjI0NDdIMTEyLjAyN1pNMTEyLjAyNyA0My4yMzU5VjQzLjI0NDdIMTEzLjUyN1Y0My4yMzU5SDExMi4wMjdaTTExMi4wMjcgNDMuMjI3MlY0My4yMzU5SDExMy41MjdWNDMuMjI3MkgxMTIuMDI3Wk0xMTIuMDI3IDQzLjIxODRWNDMuMjI3MkgxMTMuNTI3VjQzLjIxODRIMTEyLjAyN1pNMTEyLjAyNyA0My4yMDk2VjQzLjIxODRIMTEzLjUyN1Y0My4yMDk2SDExMi4wMjdaTTExMi4wMjcgNDMuMjAwOFY0My4yMDk2SDExMy41MjdWNDMuMjAwOEgxMTIuMDI3Wk0xMTIuMDI3IDQzLjE5MlY0My4yMDA4SDExMy41MjdWNDMuMTkySDExMi4wMjdaTTExMi4wMjcgNDMuMTgzMlY0My4xOTJIMTEzLjUyN1Y0My4xODMySDExMi4wMjdaTTExMi4wMjcgNDMuMTc0M1Y0My4xODMySDExMy41MjdWNDMuMTc0M0gxMTIuMDI3Wk0xMTIuMDI3IDQzLjE2NTVWNDMuMTc0M0gxMTMuNTI3VjQzLjE2NTVIMTEyLjAyN1pNMTEyLjAyNyA0My4xNTY2VjQzLjE2NTVIMTEzLjUyN1Y0My4xNTY2SDExMi4wMjdaTTExMi4wMjcgNDMuMTQ3OFY0My4xNTY2SDExMy41MjdWNDMuMTQ3OEgxMTIuMDI3Wk0xMTIuMDI3IDQzLjEzODlWNDMuMTQ3OEgxMTMuNTI3VjQzLjEzODlIMTEyLjAyN1pNMTEyLjAyNyA0My4xM1Y0My4xMzg5SDExMy41MjdWNDMuMTNIMTEyLjAyN1pNMTEyLjAyNyA0My4xMjExVjQzLjEzSDExMy41MjdWNDMuMTIxMUgxMTIuMDI3Wk0xMTIuMDI3IDQzLjExMjJWNDMuMTIxMUgxMTMuNTI3VjQzLjExMjJIMTEyLjAyN1pNMTEyLjAyNyA0My4xMDMzVjQzLjExMjJIMTEzLjUyN1Y0My4xMDMzSDExMi4wMjdaTTExMi4wMjcgNDMuMDk0M1Y0My4xMDMzSDExMy41MjdWNDMuMDk0M0gxMTIuMDI3Wk0xMTIuMDI3IDQzLjA4NTRWNDMuMDk0M0gxMTMuNTI3VjQzLjA4NTRIMTEyLjAyN1pNMTEyLjAyNyA0My4wNzY0VjQzLjA4NTRIMTEzLjUyN1Y0My4wNzY0SDExMi4wMjdaTTExMi4wMjcgNDMuMDY3NFY0My4wNzY0SDExMy41MjdWNDMuMDY3NEgxMTIuMDI3Wk0xMTIuMDI3IDQzLjA1ODRWNDMuMDY3NEgxMTMuNTI3VjQzLjA1ODRIMTEyLjAyN1pNMTEyLjAyNyA0My4wNDk0VjQzLjA1ODRIMTEzLjUyN1Y0My4wNDk0SDExMi4wMjdaTTExMi4wMjcgNDMuMDQwNFY0My4wNDk0SDExMy41MjdWNDMuMDQwNEgxMTIuMDI3Wk0xMTIuMDI3IDQzLjAzMTRWNDMuMDQwNEgxMTMuNTI3VjQzLjAzMTRIMTEyLjAyN1pNMTEyLjAyNyA0My4wMjIzVjQzLjAzMTRIMTEzLjUyN1Y0My4wMjIzSDExMi4wMjdaTTExMi4wMjcgNDMuMDEzM1Y0My4wMjIzSDExMy41MjdWNDMuMDEzM0gxMTIuMDI3Wk0xMTIuMDI3IDQzLjAwNDJWNDMuMDEzM0gxMTMuNTI3VjQzLjAwNDJIMTEyLjAyN1pNMTEyLjAyNyA0Mi45OTUxVjQzLjAwNDJIMTEzLjUyN1Y0Mi45OTUxSDExMi4wMjdaTTExMi4wMjcgNDIuOTg2MVY0Mi45OTUxSDExMy41MjdWNDIuOTg2MUgxMTIuMDI3Wk0xMTIuMDI3IDQyLjk3N1Y0Mi45ODYxSDExMy41MjdWNDIuOTc3SDExMi4wMjdaTTExMi4wMjcgNDIuOTY3OFY0Mi45NzdIMTEzLjUyN1Y0Mi45Njc4SDExMi4wMjdaTTExMi4wMjcgNDIuOTU4N1Y0Mi45Njc4SDExMy41MjdWNDIuOTU4N0gxMTIuMDI3Wk0xMTIuMDI3IDQyLjk0OTZWNDIuOTU4N0gxMTMuNTI3VjQyLjk0OTZIMTEyLjAyN1pNMTEyLjAyNyA0Mi45NDA0VjQyLjk0OTZIMTEzLjUyN1Y0Mi45NDA0SDExMi4wMjdaTTExMi4wMjcgNDIuOTMxM1Y0Mi45NDA0SDExMy41MjdWNDIuOTMxM0gxMTIuMDI3Wk0xMTIuMDI3IDQyLjkyMjFWNDIuOTMxM0gxMTMuNTI3VjQyLjkyMjFIMTEyLjAyN1pNMTEyLjAyNyA0Mi45MTI5VjQyLjkyMjFIMTEzLjUyN1Y0Mi45MTI5SDExMi4wMjdaTTExMi4wMjcgNDIuOTAzN1Y0Mi45MTI5SDExMy41MjdWNDIuOTAzN0gxMTIuMDI3Wk0xMTIuMDI3IDQyLjg5NDVWNDIuOTAzN0gxMTMuNTI3VjQyLjg5NDVIMTEyLjAyN1pNMTEyLjAyNyA0Mi44ODUzVjQyLjg5NDVIMTEzLjUyN1Y0Mi44ODUzSDExMi4wMjdaTTExMi4wMjcgNDIuODc2MVY0Mi44ODUzSDExMy41MjdWNDIuODc2MUgxMTIuMDI3Wk0xMTIuMDI3IDQyLjg2NjhWNDIuODc2MUgxMTMuNTI3VjQyLjg2NjhIMTEyLjAyN1pNMTEyLjAyNyA0Mi44NTc2VjQyLjg2NjhIMTEzLjUyN1Y0Mi44NTc2SDExMi4wMjdaTTExMi4wMjcgNDIuODQ4M1Y0Mi44NTc2SDExMy41MjdWNDIuODQ4M0gxMTIuMDI3Wk0xMTIuMDI3IDQyLjgzOVY0Mi44NDgzSDExMy41MjdWNDIuODM5SDExMi4wMjdaTTExMi4wMjcgNDIuODI5N1Y0Mi44MzlIMTEzLjUyN1Y0Mi44Mjk3SDExMi4wMjdaTTExMi4wMjcgNDIuODIwNFY0Mi44Mjk3SDExMy41MjdWNDIuODIwNEgxMTIuMDI3Wk0xMTIuMDI3IDQyLjgxMTFWNDIuODIwNEgxMTMuNTI3VjQyLjgxMTFIMTEyLjAyN1pNMTEyLjAyNyA0Mi44MDE3VjQyLjgxMTFIMTEzLjUyN1Y0Mi44MDE3SDExMi4wMjdaTTExMi4wMjcgNDIuNzkyNFY0Mi44MDE3SDExMy41MjdWNDIuNzkyNEgxMTIuMDI3Wk0xMTIuMDI3IDQyLjc4M1Y0Mi43OTI0SDExMy41MjdWNDIuNzgzSDExMi4wMjdaTTExMi4wMjcgNDIuNzczN1Y0Mi43ODNIMTEzLjUyN1Y0Mi43NzM3SDExMi4wMjdaTTExMi4wMjcgNDIuNzY0M1Y0Mi43NzM3SDExMy41MjdWNDIuNzY0M0gxMTIuMDI3Wk0xMTIuMDI3IDQyLjc1NDlWNDIuNzY0M0gxMTMuNTI3VjQyLjc1NDlIMTEyLjAyN1pNMTEyLjAyNyA0Mi43NDU1VjQyLjc1NDlIMTEzLjUyN1Y0Mi43NDU1SDExMi4wMjdaTTExMi4wMjcgNDIuNzM2MVY0Mi43NDU1SDExMy41MjdWNDIuNzM2MUgxMTIuMDI3Wk0xMTIuMDI3IDQyLjcyNjdWNDIuNzM2MUgxMTMuNTI3VjQyLjcyNjdIMTEyLjAyN1pNMTEyLjAyNyA0Mi43MTcyVjQyLjcyNjdIMTEzLjUyN1Y0Mi43MTcySDExMi4wMjdaTTExMi4wMjcgNDIuNzA3OFY0Mi43MTcySDExMy41MjdWNDIuNzA3OEgxMTIuMDI3Wk0xMTIuMDI3IDQyLjY5ODNWNDIuNzA3OEgxMTMuNTI3VjQyLjY5ODNIMTEyLjAyN1pNMTEyLjAyNyA0Mi42ODg4VjQyLjY5ODNIMTEzLjUyN1Y0Mi42ODg4SDExMi4wMjdaTTExMi4wMjcgNDIuNjc5M1Y0Mi42ODg4SDExMy41MjdWNDIuNjc5M0gxMTIuMDI3Wk0xMTIuMDI3IDQyLjY2OThWNDIuNjc5M0gxMTMuNTI3VjQyLjY2OThIMTEyLjAyN1pNMTEyLjAyNyA0Mi42NjAzVjQyLjY2OThIMTEzLjUyN1Y0Mi42NjAzSDExMi4wMjdaTTExMi4wMjcgNDIuNjUwOFY0Mi42NjAzSDExMy41MjdWNDIuNjUwOEgxMTIuMDI3Wk0xMTIuMDI3IDQyLjY0MTNWNDIuNjUwOEgxMTMuNTI3VjQyLjY0MTNIMTEyLjAyN1pNMTEyLjAyNyA0Mi42MzE3VjQyLjY0MTNIMTEzLjUyN1Y0Mi42MzE3SDExMi4wMjdaTTExMi4wMjcgNDIuNjIyMVY0Mi42MzE3SDExMy41MjdWNDIuNjIyMUgxMTIuMDI3Wk0xMTIuMDI3IDQyLjYxMjZWNDIuNjIyMUgxMTMuNTI3VjQyLjYxMjZIMTEyLjAyN1pNMTEyLjAyNyA0Mi42MDNWNDIuNjEyNkgxMTMuNTI3VjQyLjYwM0gxMTIuMDI3Wk0xMTIuMDI3IDQyLjU5MzRWNDIuNjAzSDExMy41MjdWNDIuNTkzNEgxMTIuMDI3Wk0xMTIuMDI3IDQyLjU4MzhWNDIuNTkzNEgxMTMuNTI3VjQyLjU4MzhIMTEyLjAyN1pNMTEyLjAyNyA0Mi41NzQxVjQyLjU4MzhIMTEzLjUyN1Y0Mi41NzQxSDExMi4wMjdaTTExMi4wMjcgNDIuNTY0NVY0Mi41NzQxSDExMy41MjdWNDIuNTY0NUgxMTIuMDI3Wk0xMTIuMDI3IDQyLjU1NDlWNDIuNTY0NUgxMTMuNTI3VjQyLjU1NDlIMTEyLjAyN1pNMTEyLjAyNyA0Mi41NDUyVjQyLjU1NDlIMTEzLjUyN1Y0Mi41NDUySDExMi4wMjdaTTExMi4wMjcgNDIuNTM1NVY0Mi41NDUySDExMy41MjdWNDIuNTM1NUgxMTIuMDI3Wk0xMTIuMDI3IDQyLjUyNThWNDIuNTM1NUgxMTMuNTI3VjQyLjUyNThIMTEyLjAyN1pNMTEyLjAyNyA0Mi41MTYxVjQyLjUyNThIMTEzLjUyN1Y0Mi41MTYxSDExMi4wMjdaTTExMi4wMjcgNDIuNTA2NFY0Mi41MTYxSDExMy41MjdWNDIuNTA2NEgxMTIuMDI3Wk0xMTIuMDI3IDQyLjQ5NjdWNDIuNTA2NEgxMTMuNTI3VjQyLjQ5NjdIMTEyLjAyN1pNMTEyLjAyNyA0Mi40ODdWNDIuNDk2N0gxMTMuNTI3VjQyLjQ4N0gxMTIuMDI3Wk0xMTIuMDI3IDQyLjQ3NzJWNDIuNDg3SDExMy41MjdWNDIuNDc3MkgxMTIuMDI3Wk0xMTIuMDI3IDQyLjQ2NzVWNDIuNDc3MkgxMTMuNTI3VjQyLjQ2NzVIMTEyLjAyN1pNMTEyLjAyNyA0Mi40NTc3VjQyLjQ2NzVIMTEzLjUyN1Y0Mi40NTc3SDExMi4wMjdaTTExMi4wMjcgNDIuNDQ3OVY0Mi40NTc3SDExMy41MjdWNDIuNDQ3OUgxMTIuMDI3Wk0xMTIuMDI3IDQyLjQzODFWNDIuNDQ3OUgxMTMuNTI3VjQyLjQzODFIMTEyLjAyN1pNMTEyLjAyNyA0Mi40MjgzVjQyLjQzODFIMTEzLjUyN1Y0Mi40MjgzSDExMi4wMjdaTTExMi4wMjcgNDIuNDE4NVY0Mi40MjgzSDExMy41MjdWNDIuNDE4NUgxMTIuMDI3Wk0xMTIuMDI3IDQyLjQwODdWNDIuNDE4NUgxMTMuNTI3VjQyLjQwODdIMTEyLjAyN1pNMTEyLjAyNyA0Mi4zOTg4VjQyLjQwODdIMTEzLjUyN1Y0Mi4zOTg4SDExMi4wMjdaTTExMi4wMjcgNDIuMzg5VjQyLjM5ODhIMTEzLjUyN1Y0Mi4zODlIMTEyLjAyN1pNMTEyLjAyNyA0Mi4zNzkxVjQyLjM4OUgxMTMuNTI3VjQyLjM3OTFIMTEyLjAyN1pNMTEyLjAyNyA0Mi4zNjkyVjQyLjM3OTFIMTEzLjUyN1Y0Mi4zNjkySDExMi4wMjdaTTExMi4wMjcgNDIuMzU5M1Y0Mi4zNjkySDExMy41MjdWNDIuMzU5M0gxMTIuMDI3Wk0xMTIuMDI3IDQyLjM0OTRWNDIuMzU5M0gxMTMuNTI3VjQyLjM0OTRIMTEyLjAyN1pNMTEyLjAyNyA0Mi4zMzk1VjQyLjM0OTRIMTEzLjUyN1Y0Mi4zMzk1SDExMi4wMjdaTTExMi4wMjcgNDIuMzI5NlY0Mi4zMzk1SDExMy41MjdWNDIuMzI5NkgxMTIuMDI3Wk0xMTIuMDI3IDQyLjMxOTdWNDIuMzI5NkgxMTMuNTI3VjQyLjMxOTdIMTEyLjAyN1pNMTEyLjAyNyA0Mi4zMDk3VjQyLjMxOTdIMTEzLjUyN1Y0Mi4zMDk3SDExMi4wMjdaTTExMi4wMjcgNDIuMjk5N1Y0Mi4zMDk3SDExMy41MjdWNDIuMjk5N0gxMTIuMDI3Wk0xMTIuMDI3IDQyLjI4OThWNDIuMjk5N0gxMTMuNTI3VjQyLjI4OThIMTEyLjAyN1pNMTEyLjAyNyA0Mi4yNzk4VjQyLjI4OThIMTEzLjUyN1Y0Mi4yNzk4SDExMi4wMjdaTTExMi4wMjcgNDIuMjY5OFY0Mi4yNzk4SDExMy41MjdWNDIuMjY5OEgxMTIuMDI3Wk0xMTIuMDI3IDQyLjI1OThWNDIuMjY5OEgxMTMuNTI3VjQyLjI1OThIMTEyLjAyN1pNMTEyLjAyNyA0Mi4yNDk3VjQyLjI1OThIMTEzLjUyN1Y0Mi4yNDk3SDExMi4wMjdaTTExMi4wMjcgNDIuMjM5N1Y0Mi4yNDk3SDExMy41MjdWNDIuMjM5N0gxMTIuMDI3Wk0xMTIuMDI3IDQyLjIyOTdWNDIuMjM5N0gxMTMuNTI3VjQyLjIyOTdIMTEyLjAyN1pNMTEyLjAyNyA0Mi4yMTk2VjQyLjIyOTdIMTEzLjUyN1Y0Mi4yMTk2SDExMi4wMjdaTTExMi4wMjcgNDIuMjA5NVY0Mi4yMTk2SDExMy41MjdWNDIuMjA5NUgxMTIuMDI3Wk0xMTIuMDI3IDQyLjE5OTRWNDIuMjA5NUgxMTMuNTI3VjQyLjE5OTRIMTEyLjAyN1pNMTEyLjAyNyA0Mi4xODkzVjQyLjE5OTRIMTEzLjUyN1Y0Mi4xODkzSDExMi4wMjdaTTExMi4wMjcgNDIuMTc5MlY0Mi4xODkzSDExMy41MjdWNDIuMTc5MkgxMTIuMDI3Wk0xMTIuMDI3IDQyLjE2OTFWNDIuMTc5MkgxMTMuNTI3VjQyLjE2OTFIMTEyLjAyN1pNMTEyLjAyNyA0Mi4xNTlWNDIuMTY5MUgxMTMuNTI3VjQyLjE1OUgxMTIuMDI3Wk0xMTIuMDI3IDQyLjE0ODhWNDIuMTU5SDExMy41MjdWNDIuMTQ4OEgxMTIuMDI3Wk0xMTIuMDI3IDQyLjEzODdWNDIuMTQ4OEgxMTMuNTI3VjQyLjEzODdIMTEyLjAyN1pNMTEyLjAyNyA0Mi4xMjg1VjQyLjEzODdIMTEzLjUyN1Y0Mi4xMjg1SDExMi4wMjdaTTExMi4wMjcgNDIuMTE4M1Y0Mi4xMjg1SDExMy41MjdWNDIuMTE4M0gxMTIuMDI3Wk0xMTIuMDI3IDQyLjEwODFWNDIuMTE4M0gxMTMuNTI3VjQyLjEwODFIMTEyLjAyN1pNMTEyLjAyNyA0Mi4wOTc5VjQyLjEwODFIMTEzLjUyN1Y0Mi4wOTc5SDExMi4wMjdaTTExMi4wMjcgNDIuMDg3N1Y0Mi4wOTc5SDExMy41MjdWNDIuMDg3N0gxMTIuMDI3Wk0xMTIuMDI3IDQyLjA3NzRWNDIuMDg3N0gxMTMuNTI3VjQyLjA3NzRIMTEyLjAyN1pNMTEyLjAyNyA0Mi4wNjcyVjQyLjA3NzRIMTEzLjUyN1Y0Mi4wNjcySDExMi4wMjdaTTExMi4wMjcgNDIuMDU2OVY0Mi4wNjcySDExMy41MjdWNDIuMDU2OUgxMTIuMDI3Wk0xMTIuMDI3IDQyLjA0NjdWNDIuMDU2OUgxMTMuNTI3VjQyLjA0NjdIMTEyLjAyN1pNMTEyLjAyNyA0Mi4wMzY0VjQyLjA0NjdIMTEzLjUyN1Y0Mi4wMzY0SDExMi4wMjdaTTExMi4wMjcgNDIuMDI2MVY0Mi4wMzY0SDExMy41MjdWNDIuMDI2MUgxMTIuMDI3Wk0xMTIuMDI3IDQyLjAxNThWNDIuMDI2MUgxMTMuNTI3VjQyLjAxNThIMTEyLjAyN1pNMTEyLjAyNyA0Mi4wMDU1VjQyLjAxNThIMTEzLjUyN1Y0Mi4wMDU1SDExMi4wMjdaTTExMi4wMjcgNDEuOTk1MlY0Mi4wMDU1SDExMy41MjdWNDEuOTk1MkgxMTIuMDI3Wk0xMTIuMDI3IDQxLjk4NDhWNDEuOTk1MkgxMTMuNTI3VjQxLjk4NDhIMTEyLjAyN1pNMTEyLjAyNyA0MS45NzQ1VjQxLjk4NDhIMTEzLjUyN1Y0MS45NzQ1SDExMi4wMjdaTTExMi4wMjcgNDEuOTY0MVY0MS45NzQ1SDExMy41MjdWNDEuOTY0MUgxMTIuMDI3Wk0xMTIuMDI3IDQxLjk1MzdWNDEuOTY0MUgxMTMuNTI3VjQxLjk1MzdIMTEyLjAyN1pNMTEyLjAyNyA0MS45NDMzVjQxLjk1MzdIMTEzLjUyN1Y0MS45NDMzSDExMi4wMjdaTTExMi4wMjcgNDEuOTMyOVY0MS45NDMzSDExMy41MjdWNDEuOTMyOUgxMTIuMDI3Wk0xMTIuMDI3IDQxLjkyMjVWNDEuOTMyOUgxMTMuNTI3VjQxLjkyMjVIMTEyLjAyN1pNMTEyLjAyNyA0MS45MTIxVjQxLjkyMjVIMTEzLjUyN1Y0MS45MTIxSDExMi4wMjdaTTExMi4wMjcgNDEuOTAxNlY0MS45MTIxSDExMy41MjdWNDEuOTAxNkgxMTIuMDI3Wk0xMTIuMDI3IDQxLjg5MTJWNDEuOTAxNkgxMTMuNTI3VjQxLjg5MTJIMTEyLjAyN1pNMTEyLjAyNyA0MS44ODA3VjQxLjg5MTJIMTEzLjUyN1Y0MS44ODA3SDExMi4wMjdaTTExMi4wMjcgNDEuODcwMlY0MS44ODA3SDExMy41MjdWNDEuODcwMkgxMTIuMDI3Wk0xMTIuMDI3IDQxLjg1OThWNDEuODcwMkgxMTMuNTI3VjQxLjg1OThIMTEyLjAyN1pNMTEyLjAyNyA0MS44NDkzVjQxLjg1OThIMTEzLjUyN1Y0MS44NDkzSDExMi4wMjdaTTExMi4wMjcgNDEuODM4N1Y0MS44NDkzSDExMy41MjdWNDEuODM4N0gxMTIuMDI3Wk0xMTIuMDI3IDQxLjgyODJWNDEuODM4N0gxMTMuNTI3VjQxLjgyODJIMTEyLjAyN1pNMTEyLjAyNyA0MS44MTc3VjQxLjgyODJIMTEzLjUyN1Y0MS44MTc3SDExMi4wMjdaTTExMi4wMjcgNDEuODA3MVY0MS44MTc3SDExMy41MjdWNDEuODA3MUgxMTIuMDI3Wk0xMTIuMDI3IDQxLjc5NjZWNDEuODA3MUgxMTMuNTI3VjQxLjc5NjZIMTEyLjAyN1pNMTEyLjAyNyA0MS43ODZWNDEuNzk2NkgxMTMuNTI3VjQxLjc4NkgxMTIuMDI3Wk0xMTIuMDI3IDQxLjc3NTRWNDEuNzg2SDExMy41MjdWNDEuNzc1NEgxMTIuMDI3Wk0xMTIuMDI3IDQxLjc2NDhWNDEuNzc1NEgxMTMuNTI3VjQxLjc2NDhIMTEyLjAyN1pNMTEyLjAyNyA0MS43NTQyVjQxLjc2NDhIMTEzLjUyN1Y0MS43NTQySDExMi4wMjdaTTExMi4wMjcgNDEuNzQzNlY0MS43NTQySDExMy41MjdWNDEuNzQzNkgxMTIuMDI3Wk0xMTIuMDI3IDQxLjczM1Y0MS43NDM2SDExMy41MjdWNDEuNzMzSDExMi4wMjdaTTExMi4wMjcgNDEuNzIyM1Y0MS43MzNIMTEzLjUyN1Y0MS43MjIzSDExMi4wMjdaTTExMi4wMjcgNDEuNzExN1Y0MS43MjIzSDExMy41MjdWNDEuNzExN0gxMTIuMDI3Wk0xMTIuMDI3IDQxLjcwMVY0MS43MTE3SDExMy41MjdWNDEuNzAxSDExMi4wMjdaTTExMi4wMjcgNDEuNjkwM1Y0MS43MDFIMTEzLjUyN1Y0MS42OTAzSDExMi4wMjdaTTExMi4wMjcgNDEuNjc5NlY0MS42OTAzSDExMy41MjdWNDEuNjc5NkgxMTIuMDI3Wk0xMTIuMDI3IDQxLjY2ODlWNDEuNjc5NkgxMTMuNTI3VjQxLjY2ODlIMTEyLjAyN1pNMTEyLjAyNyA0MS42NTgyVjQxLjY2ODlIMTEzLjUyN1Y0MS42NTgySDExMi4wMjdaTTExMi4wMjcgNDEuNjQ3NFY0MS42NTgySDExMy41MjdWNDEuNjQ3NEgxMTIuMDI3Wk0xMTIuMDI3IDQxLjYzNjdWNDEuNjQ3NEgxMTMuNTI3VjQxLjYzNjdIMTEyLjAyN1pNMTEyLjAyNyA0MS42MjU5VjQxLjYzNjdIMTEzLjUyN1Y0MS42MjU5SDExMi4wMjdaTTExMi4wMjcgNDEuNjE1MlY0MS42MjU5SDExMy41MjdWNDEuNjE1MkgxMTIuMDI3Wk0xMTIuMDI3IDQxLjYwNDRWNDEuNjE1MkgxMTMuNTI3VjQxLjYwNDRIMTEyLjAyN1pNMTEyLjAyNyA0MS41OTM2VjQxLjYwNDRIMTEzLjUyN1Y0MS41OTM2SDExMi4wMjdaTTExMi4wMjcgNDEuNTgyOFY0MS41OTM2SDExMy41MjdWNDEuNTgyOEgxMTIuMDI3Wk0xMTIuMDI3IDQxLjU3MlY0MS41ODI4SDExMy41MjdWNDEuNTcySDExMi4wMjdaTTExMi4wMjcgNDEuNTYxMlY0MS41NzJIMTEzLjUyN1Y0MS41NjEySDExMi4wMjdaTTExMi4wMjcgNDEuNTUwM1Y0MS41NjEySDExMy41MjdWNDEuNTUwM0gxMTIuMDI3Wk0xMTIuMDI3IDQxLjUzOTVWNDEuNTUwM0gxMTMuNTI3VjQxLjUzOTVIMTEyLjAyN1pNMTEyLjAyNyA0MS41Mjg2VjQxLjUzOTVIMTEzLjUyN1Y0MS41Mjg2SDExMi4wMjdaTTExMi4wMjcgNDEuNTE3N1Y0MS41Mjg2SDExMy41MjdWNDEuNTE3N0gxMTIuMDI3Wk0xMTIuMDI3IDQxLjUwNjhWNDEuNTE3N0gxMTMuNTI3VjQxLjUwNjhIMTEyLjAyN1pNMTEyLjAyNyA0MS40OTU5VjQxLjUwNjhIMTEzLjUyN1Y0MS40OTU5SDExMi4wMjdaTTExMi4wMjcgNDEuNDg1VjQxLjQ5NTlIMTEzLjUyN1Y0MS40ODVIMTEyLjAyN1pNMTEyLjAyNyA0MS40NzQxVjQxLjQ4NUgxMTMuNTI3VjQxLjQ3NDFIMTEyLjAyN1pNMTEyLjAyNyA0MS40NjMyVjQxLjQ3NDFIMTEzLjUyN1Y0MS40NjMySDExMi4wMjdaTTExMi4wMjcgNDEuNDUyMlY0MS40NjMySDExMy41MjdWNDEuNDUyMkgxMTIuMDI3Wk0xMTIuMDI3IDQxLjQ0MTJWNDEuNDUyMkgxMTMuNTI3VjQxLjQ0MTJIMTEyLjAyN1pNMTEyLjAyNyA0MS40MzAzVjQxLjQ0MTJIMTEzLjUyN1Y0MS40MzAzSDExMi4wMjdaTTExMi4wMjcgNDEuNDE5M1Y0MS40MzAzSDExMy41MjdWNDEuNDE5M0gxMTIuMDI3Wk0xMTIuMDI3IDQxLjQwODNWNDEuNDE5M0gxMTMuNTI3VjQxLjQwODNIMTEyLjAyN1pNMTEyLjAyNyA0MS4zOTczVjQxLjQwODNIMTEzLjUyN1Y0MS4zOTczSDExMi4wMjdaTTExMi4wMjcgNDEuMzg2MlY0MS4zOTczSDExMy41MjdWNDEuMzg2MkgxMTIuMDI3Wk0xMTIuMDI3IDQxLjM3NTJWNDEuMzg2MkgxMTMuNTI3VjQxLjM3NTJIMTEyLjAyN1pNMTEyLjAyNyA0MS4zNjQyVjQxLjM3NTJIMTEzLjUyN1Y0MS4zNjQySDExMi4wMjdaTTExMi4wMjcgNDEuMzUzMVY0MS4zNjQySDExMy41MjdWNDEuMzUzMUgxMTIuMDI3Wk0xMTIuMDI3IDQxLjM0MlY0MS4zNTMxSDExMy41MjdWNDEuMzQySDExMi4wMjdaTTExMi4wMjcgNDEuMzMwOVY0MS4zNDJIMTEzLjUyN1Y0MS4zMzA5SDExMi4wMjdaTTExMi4wMjcgNDEuMzE5OFY0MS4zMzA5SDExMy41MjdWNDEuMzE5OEgxMTIuMDI3Wk0xMTIuMDI3IDQxLjMwODdWNDEuMzE5OEgxMTMuNTI3VjQxLjMwODdIMTEyLjAyN1pNMTEyLjAyNyA0MS4yOTc2VjQxLjMwODdIMTEzLjUyN1Y0MS4yOTc2SDExMi4wMjdaTTExMi4wMjcgNDEuMjg2NVY0MS4yOTc2SDExMy41MjdWNDEuMjg2NUgxMTIuMDI3Wk0xMTIuMDI3IDQxLjI3NTNWNDEuMjg2NUgxMTMuNTI3VjQxLjI3NTNIMTEyLjAyN1pNMTEyLjAyNyA0MS4yNjQyVjQxLjI3NTNIMTEzLjUyN1Y0MS4yNjQySDExMi4wMjdaTTExMi4wMjcgNDEuMjUzVjQxLjI2NDJIMTEzLjUyN1Y0MS4yNTNIMTEyLjAyN1pNMTEyLjAyNyA0MS4yNDE4VjQxLjI1M0gxMTMuNTI3VjQxLjI0MThIMTEyLjAyN1pNMTEyLjAyNyA0MS4yMzA2VjQxLjI0MThIMTEzLjUyN1Y0MS4yMzA2SDExMi4wMjdaTTExMi4wMjcgNDEuMjE5NFY0MS4yMzA2SDExMy41MjdWNDEuMjE5NEgxMTIuMDI3Wk0xMTIuMDI3IDQxLjIwODJWNDEuMjE5NEgxMTMuNTI3VjQxLjIwODJIMTEyLjAyN1pNMTEyLjAyNyA0MS4xOTdWNDEuMjA4MkgxMTMuNTI3VjQxLjE5N0gxMTIuMDI3Wk0xMTIuMDI3IDQxLjE4NTdWNDEuMTk3SDExMy41MjdWNDEuMTg1N0gxMTIuMDI3Wk0xMTIuMDI3IDQxLjE3NDVWNDEuMTg1N0gxMTMuNTI3VjQxLjE3NDVIMTEyLjAyN1pNMTEyLjAyNyA0MS4xNjMyVjQxLjE3NDVIMTEzLjUyN1Y0MS4xNjMySDExMi4wMjdaTTExMi4wMjcgNDEuMTUxOVY0MS4xNjMySDExMy41MjdWNDEuMTUxOUgxMTIuMDI3Wk0xMTIuMDI3IDQxLjE0MDZWNDEuMTUxOUgxMTMuNTI3VjQxLjE0MDZIMTEyLjAyN1pNMTEyLjAyNyA0MS4xMjkzVjQxLjE0MDZIMTEzLjUyN1Y0MS4xMjkzSDExMi4wMjdaTTExMi4wMjcgNDEuMTE4VjQxLjEyOTNIMTEzLjUyN1Y0MS4xMThIMTEyLjAyN1pNMTEyLjAyNyA0MS4xMDY3VjQxLjExOEgxMTMuNTI3VjQxLjEwNjdIMTEyLjAyN1pNMTEyLjAyNyA0MS4wOTU0VjQxLjEwNjdIMTEzLjUyN1Y0MS4wOTU0SDExMi4wMjdaTTExMi4wMjcgNDEuMDg0VjQxLjA5NTRIMTEzLjUyN1Y0MS4wODRIMTEyLjAyN1pNMTEyLjAyNyA0MS4wNzI2VjQxLjA4NEgxMTMuNTI3VjQxLjA3MjZIMTEyLjAyN1pNMTEyLjAyNyA0MS4wNjEzVjQxLjA3MjZIMTEzLjUyN1Y0MS4wNjEzSDExMi4wMjdaTTExMi4wMjcgNDEuMDQ5OVY0MS4wNjEzSDExMy41MjdWNDEuMDQ5OUgxMTIuMDI3Wk0xMTIuMDI3IDQxLjAzODVWNDEuMDQ5OUgxMTMuNTI3VjQxLjAzODVIMTEyLjAyN1pNMTEyLjAyNyA0MS4wMjcxVjQxLjAzODVIMTEzLjUyN1Y0MS4wMjcxSDExMi4wMjdaTTExMi4wMjcgNDEuMDE1NlY0MS4wMjcxSDExMy41MjdWNDEuMDE1NkgxMTIuMDI3Wk0xMTIuMDI3IDQxLjAwNDJWNDEuMDE1NkgxMTMuNTI3VjQxLjAwNDJIMTEyLjAyN1pNMTEyLjAyNyA0MC45OTI4VjQxLjAwNDJIMTEzLjUyN1Y0MC45OTI4SDExMi4wMjdaTTExMi4wMjcgNDAuOTgxM1Y0MC45OTI4SDExMy41MjdWNDAuOTgxM0gxMTIuMDI3Wk0xMTIuMDI3IDQwLjk2OThWNDAuOTgxM0gxMTMuNTI3VjQwLjk2OThIMTEyLjAyN1pNMTEyLjAyNyA0MC45NTgzVjQwLjk2OThIMTEzLjUyN1Y0MC45NTgzSDExMi4wMjdaTTExMi4wMjcgNDAuOTQ2OFY0MC45NTgzSDExMy41MjdWNDAuOTQ2OEgxMTIuMDI3Wk0xMTIuMDI3IDQwLjkzNTNWNDAuOTQ2OEgxMTMuNTI3VjQwLjkzNTNIMTEyLjAyN1pNMTEyLjAyNyA0MC45MjM4VjQwLjkzNTNIMTEzLjUyN1Y0MC45MjM4SDExMi4wMjdaTTExMi4wMjcgNDAuOTEyM1Y0MC45MjM4SDExMy41MjdWNDAuOTEyM0gxMTIuMDI3Wk0xMTIuMDI3IDQwLjkwMDdWNDAuOTEyM0gxMTMuNTI3VjQwLjkwMDdIMTEyLjAyN1pNMTEyLjAyNyA0MC44ODkyVjQwLjkwMDdIMTEzLjUyN1Y0MC44ODkySDExMi4wMjdaTTExMi4wMjcgNDAuODc3NlY0MC44ODkySDExMy41MjdWNDAuODc3NkgxMTIuMDI3Wk0xMTIuMDI3IDQwLjg2NlY0MC44Nzc2SDExMy41MjdWNDAuODY2SDExMi4wMjdaTTExMi4wMjcgNDAuODU0NFY0MC44NjZIMTEzLjUyN1Y0MC44NTQ0SDExMi4wMjdaTTExMi4wMjcgNDAuODQyOFY0MC44NTQ0SDExMy41MjdWNDAuODQyOEgxMTIuMDI3Wk0xMTIuMDI3IDQwLjgzMTJWNDAuODQyOEgxMTMuNTI3VjQwLjgzMTJIMTEyLjAyN1pNMTEyLjAyNyA0MC44MTk1VjQwLjgzMTJIMTEzLjUyN1Y0MC44MTk1SDExMi4wMjdaTTExMi4wMjcgNDAuODA3OVY0MC44MTk1SDExMy41MjdWNDAuODA3OUgxMTIuMDI3Wk0xMTIuMDI3IDQwLjc5NjJWNDAuODA3OUgxMTMuNTI3VjQwLjc5NjJIMTEyLjAyN1pNMTEyLjAyNyA0MC43ODQ2VjQwLjc5NjJIMTEzLjUyN1Y0MC43ODQ2SDExMi4wMjdaTTExMi4wMjcgNDAuNzcyOVY0MC43ODQ2SDExMy41MjdWNDAuNzcyOUgxMTIuMDI3Wk0xMTIuMDI3IDQwLjc2MTJWNDAuNzcyOUgxMTMuNTI3VjQwLjc2MTJIMTEyLjAyN1pNMTEyLjAyNyA0MC43NDk1VjQwLjc2MTJIMTEzLjUyN1Y0MC43NDk1SDExMi4wMjdaTTExMi4wMjcgNDAuNzM3OFY0MC43NDk1SDExMy41MjdWNDAuNzM3OEgxMTIuMDI3Wk0xMTIuMDI3IDQwLjcyNjFWNDAuNzM3OEgxMTMuNTI3VjQwLjcyNjFIMTEyLjAyN1pNMTEyLjAyNyA0MC43MTQzVjQwLjcyNjFIMTEzLjUyN1Y0MC43MTQzSDExMi4wMjdaTTExMi4wMjcgNDAuNzAyNlY0MC43MTQzSDExMy41MjdWNDAuNzAyNkgxMTIuMDI3Wk0xMTIuMDI3IDQwLjY5MDhWNDAuNzAyNkgxMTMuNTI3VjQwLjY5MDhIMTEyLjAyN1pNMTEyLjAyNyA0MC42NzlWNDAuNjkwOEgxMTMuNTI3VjQwLjY3OUgxMTIuMDI3Wk0xMTIuMDI3IDQwLjY2NzJWNDAuNjc5SDExMy41MjdWNDAuNjY3MkgxMTIuMDI3Wk0xMTIuMDI3IDQwLjY1NTRWNDAuNjY3MkgxMTMuNTI3VjQwLjY1NTRIMTEyLjAyN1pNMTEyLjAyNyA0MC42NDM2VjQwLjY1NTRIMTEzLjUyN1Y0MC42NDM2SDExMi4wMjdaTTExMi4wMjcgNDAuNjMxOFY0MC42NDM2SDExMy41MjdWNDAuNjMxOEgxMTIuMDI3Wk0xMTIuMDI3IDQwLjYxOTlWNDAuNjMxOEgxMTMuNTI3VjQwLjYxOTlIMTEyLjAyN1pNMTEyLjAyNyA0MC42MDgxVjQwLjYxOTlIMTEzLjUyN1Y0MC42MDgxSDExMi4wMjdaTTExMi4wMjcgNDAuNTk2MlY0MC42MDgxSDExMy41MjdWNDAuNTk2MkgxMTIuMDI3Wk0xMTIuMDI3IDQwLjU4NDNWNDAuNTk2MkgxMTMuNTI3VjQwLjU4NDNIMTEyLjAyN1pNMTEyLjAyNyA0MC41NzI1VjQwLjU4NDNIMTEzLjUyN1Y0MC41NzI1SDExMi4wMjdaTTExMi4wMjcgNDAuNTYwNlY0MC41NzI1SDExMy41MjdWNDAuNTYwNkgxMTIuMDI3Wk0xMTIuMDI3IDQwLjU0ODZWNDAuNTYwNkgxMTMuNTI3VjQwLjU0ODZIMTEyLjAyN1pNMTEyLjAyNyA0MC41MzY3VjQwLjU0ODZIMTEzLjUyN1Y0MC41MzY3SDExMi4wMjdaTTExMi4wMjcgNDAuNTI0OFY0MC41MzY3SDExMy41MjdWNDAuNTI0OEgxMTIuMDI3Wk0xMTIuMDI3IDQwLjUxMjhWNDAuNTI0OEgxMTMuNTI3VjQwLjUxMjhIMTEyLjAyN1pNMTEyLjAyNyA0MC41MDA5VjQwLjUxMjhIMTEzLjUyN1Y0MC41MDA5SDExMi4wMjdaTTExMi4wMjcgNDAuNDg4OVY0MC41MDA5SDExMy41MjdWNDAuNDg4OUgxMTIuMDI3Wk0xMTIuMDI3IDQwLjQ3NjlWNDAuNDg4OUgxMTMuNTI3VjQwLjQ3NjlIMTEyLjAyN1pNMTEyLjAyNyA0MC40NjQ5VjQwLjQ3NjlIMTEzLjUyN1Y0MC40NjQ5SDExMi4wMjdaTTExMi4wMjcgNDAuNDUyOVY0MC40NjQ5SDExMy41MjdWNDAuNDUyOUgxMTIuMDI3Wk0xMTIuMDI3IDQwLjQ0MDlWNDAuNDUyOUgxMTMuNTI3VjQwLjQ0MDlIMTEyLjAyN1pNMTEyLjAyNyA0MC40Mjg5VjQwLjQ0MDlIMTEzLjUyN1Y0MC40Mjg5SDExMi4wMjdaTTExMi4wMjcgNDAuNDE2OFY0MC40Mjg5SDExMy41MjdWNDAuNDE2OEgxMTIuMDI3Wk0xMTIuMDI3IDQwLjQwNDhWNDAuNDE2OEgxMTMuNTI3VjQwLjQwNDhIMTEyLjAyN1pNMTEyLjAyNyA0MC4zOTI3VjQwLjQwNDhIMTEzLjUyN1Y0MC4zOTI3SDExMi4wMjdaTTExMi4wMjcgNDAuMzgwNlY0MC4zOTI3SDExMy41MjdWNDAuMzgwNkgxMTIuMDI3Wk0xMTIuMDI3IDQwLjM2ODVWNDAuMzgwNkgxMTMuNTI3VjQwLjM2ODVIMTEyLjAyN1pNMTEyLjAyNyA0MC4zNTY0VjQwLjM2ODVIMTEzLjUyN1Y0MC4zNTY0SDExMi4wMjdaTTExMi4wMjcgNDAuMzQ0M1Y0MC4zNTY0SDExMy41MjdWNDAuMzQ0M0gxMTIuMDI3Wk0xMTIuMDI3IDQwLjMzMjFWNDAuMzQ0M0gxMTMuNTI3VjQwLjMzMjFIMTEyLjAyN1pNMTEyLjAyNyA0MC4zMlY0MC4zMzIxSDExMy41MjdWNDAuMzJIMTEyLjAyN1pNMTEyLjAyNyA0MC4zMDc4VjQwLjMySDExMy41MjdWNDAuMzA3OEgxMTIuMDI3Wk0xMTIuMDI3IDQwLjI5NTdWNDAuMzA3OEgxMTMuNTI3VjQwLjI5NTdIMTEyLjAyN1pNMTEyLjAyNyA0MC4yODM1VjQwLjI5NTdIMTEzLjUyN1Y0MC4yODM1SDExMi4wMjdaTTExMi4wMjcgNDAuMjcxM1Y0MC4yODM1SDExMy41MjdWNDAuMjcxM0gxMTIuMDI3Wk0xMTIuMDI3IDQwLjI1OTFWNDAuMjcxM0gxMTMuNTI3VjQwLjI1OTFIMTEyLjAyN1pNMTEyLjAyNyA0MC4yNDY5VjQwLjI1OTFIMTEzLjUyN1Y0MC4yNDY5SDExMi4wMjdaTTExMi4wMjcgNDAuMjM0N1Y0MC4yNDY5SDExMy41MjdWNDAuMjM0N0gxMTIuMDI3Wk0xMTIuMDI3IDQwLjIyMjRWNDAuMjM0N0gxMTMuNTI3VjQwLjIyMjRIMTEyLjAyN1pNMTEyLjAyNyA0MC4yMTAyVjQwLjIyMjRIMTEzLjUyN1Y0MC4yMTAySDExMi4wMjdaTTExMi4wMjcgNDAuMTk3OVY0MC4yMTAySDExMy41MjdWNDAuMTk3OUgxMTIuMDI3Wk0xMTIuMDI3IDQwLjE4NTZWNDAuMTk3OUgxMTMuNTI3VjQwLjE4NTZIMTEyLjAyN1pNMTEyLjAyNyA0MC4xNzMzVjQwLjE4NTZIMTEzLjUyN1Y0MC4xNzMzSDExMi4wMjdaTTExMi4wMjcgNDAuMTYxVjQwLjE3MzNIMTEzLjUyN1Y0MC4xNjFIMTEyLjAyN1pNMTEyLjAyNyA0MC4xNDg3VjQwLjE2MUgxMTMuNTI3VjQwLjE0ODdIMTEyLjAyN1pNMTEyLjAyNyA0MC4xMzY0VjQwLjE0ODdIMTEzLjUyN1Y0MC4xMzY0SDExMi4wMjdaTTExMi4wMjcgNDAuMTI0MVY0MC4xMzY0SDExMy41MjdWNDAuMTI0MUgxMTIuMDI3Wk0xMTIuMDI3IDQwLjExMTdWNDAuMTI0MUgxMTMuNTI3VjQwLjExMTdIMTEyLjAyN1pNMTEyLjAyNyA0MC4wOTkzVjQwLjExMTdIMTEzLjUyN1Y0MC4wOTkzSDExMi4wMjdaTTExMi4wMjcgNDAuMDg3VjQwLjA5OTNIMTEzLjUyN1Y0MC4wODdIMTEyLjAyN1pNMTEyLjAyNyA0MC4wNzQ2VjQwLjA4N0gxMTMuNTI3VjQwLjA3NDZIMTEyLjAyN1pNMTEyLjAyNyA0MC4wNjIyVjQwLjA3NDZIMTEzLjUyN1Y0MC4wNjIySDExMi4wMjdaTTExMi4wMjcgNDAuMDQ5OFY0MC4wNjIySDExMy41MjdWNDAuMDQ5OEgxMTIuMDI3Wk0xMTIuMDI3IDQwLjAzNzNWNDAuMDQ5OEgxMTMuNTI3VjQwLjAzNzNIMTEyLjAyN1pNMTEyLjAyNyA0MC4wMjQ5VjQwLjAzNzNIMTEzLjUyN1Y0MC4wMjQ5SDExMi4wMjdaTTExMi4wMjcgNDAuMDEyNVY0MC4wMjQ5SDExMy41MjdWNDAuMDEyNUgxMTIuMDI3Wk0xMTIuMDI3IDQwVjQwLjAxMjVIMTEzLjUyN1Y0MEgxMTIuMDI3Wk0xMTIuMDI3IDQ5LjE2MDZWNDkuMTY5NEgxMTMuNTI3VjQ5LjE2MDZIMTEyLjAyN1pNMTE0LjI3NyA0OC40MTA2SDExMi43NzdWNDkuOTEwNkgxMTQuMjc3VjQ4LjQxMDZaTTExNS4wMjcgNDkuMTY5NFY0OS4xNjA2SDExMy41MjdWNDkuMTY5NEgxMTUuMDI3Wk0xMTUuMDI3IDQ5LjE3ODNWNDkuMTY5NEgxMTMuNTI3VjQ5LjE3ODNIMTE1LjAyN1pNMTE1LjAyNyA0OS4xODcyVjQ5LjE3ODNIMTEzLjUyN1Y0OS4xODcySDExNS4wMjdaTTExNS4wMjcgNDkuMTk2MVY0OS4xODcySDExMy41MjdWNDkuMTk2MUgxMTUuMDI3Wk0xMTUuMDI3IDQ5LjIwNVY0OS4xOTYxSDExMy41MjdWNDkuMjA1SDExNS4wMjdaTTExNS4wMjcgNDkuMjEzOFY0OS4yMDVIMTEzLjUyN1Y0OS4yMTM4SDExNS4wMjdaTTExNS4wMjcgNDkuMjIyN1Y0OS4yMTM4SDExMy41MjdWNDkuMjIyN0gxMTUuMDI3Wk0xMTUuMDI3IDQ5LjIzMTZWNDkuMjIyN0gxMTMuNTI3VjQ5LjIzMTZIMTE1LjAyN1pNMTE1LjAyNyA0OS4yNDA2VjQ5LjIzMTZIMTEzLjUyN1Y0OS4yNDA2SDExNS4wMjdaTTExNS4wMjcgNDkuMjQ5NVY0OS4yNDA2SDExMy41MjdWNDkuMjQ5NUgxMTUuMDI3Wk0xMTUuMDI3IDQ5LjI1ODRWNDkuMjQ5NUgxMTMuNTI3VjQ5LjI1ODRIMTE1LjAyN1pNMTE1LjAyNyA0OS4yNjczVjQ5LjI1ODRIMTEzLjUyN1Y0OS4yNjczSDExNS4wMjdaTTExNS4wMjcgNDkuMjc2MlY0OS4yNjczSDExMy41MjdWNDkuMjc2MkgxMTUuMDI3Wk0xMTUuMDI3IDQ5LjI4NTJWNDkuMjc2MkgxMTMuNTI3VjQ5LjI4NTJIMTE1LjAyN1pNMTE1LjAyNyA0OS4yOTQxVjQ5LjI4NTJIMTEzLjUyN1Y0OS4yOTQxSDExNS4wMjdaTTExNS4wMjcgNDkuMzAzMVY0OS4yOTQxSDExMy41MjdWNDkuMzAzMUgxMTUuMDI3Wk0xMTUuMDI3IDQ5LjMxMlY0OS4zMDMxSDExMy41MjdWNDkuMzEySDExNS4wMjdaTTExNS4wMjcgNDkuMzIxVjQ5LjMxMkgxMTMuNTI3VjQ5LjMyMUgxMTUuMDI3Wk0xMTUuMDI3IDQ5LjMzVjQ5LjMyMUgxMTMuNTI3VjQ5LjMzSDExNS4wMjdaTTExNS4wMjcgNDkuMzM4OVY0OS4zM0gxMTMuNTI3VjQ5LjMzODlIMTE1LjAyN1pNMTE1LjAyNyA0OS4zNDc5VjQ5LjMzODlIMTEzLjUyN1Y0OS4zNDc5SDExNS4wMjdaTTExNS4wMjcgNDkuMzU2OVY0OS4zNDc5SDExMy41MjdWNDkuMzU2OUgxMTUuMDI3Wk0xMTUuMDI3IDQ5LjM2NTlWNDkuMzU2OUgxMTMuNTI3VjQ5LjM2NTlIMTE1LjAyN1pNMTE1LjAyNyA0OS4zNzQ5VjQ5LjM2NTlIMTEzLjUyN1Y0OS4zNzQ5SDExNS4wMjdaTTExNS4wMjcgNDkuMzgzOVY0OS4zNzQ5SDExMy41MjdWNDkuMzgzOUgxMTUuMDI3Wk0xMTUuMDI3IDQ5LjM5MjlWNDkuMzgzOUgxMTMuNTI3VjQ5LjM5MjlIMTE1LjAyN1pNMTE1LjAyNyA0OS40MDE5VjQ5LjM5MjlIMTEzLjUyN1Y0OS40MDE5SDExNS4wMjdaTTExNS4wMjcgNDkuNDEwOVY0OS40MDE5SDExMy41MjdWNDkuNDEwOUgxMTUuMDI3Wk0xMTUuMDI3IDQ5LjQyVjQ5LjQxMDlIMTEzLjUyN1Y0OS40MkgxMTUuMDI3Wk0xMTUuMDI3IDQ5LjQyOVY0OS40MkgxMTMuNTI3VjQ5LjQyOUgxMTUuMDI3Wk0xMTUuMDI3IDQ5LjQzOFY0OS40MjlIMTEzLjUyN1Y0OS40MzhIMTE1LjAyN1pNMTE1LjAyNyA0OS40NDcxVjQ5LjQzOEgxMTMuNTI3VjQ5LjQ0NzFIMTE1LjAyN1pNMTE1LjAyNyA0OS40NTYxVjQ5LjQ0NzFIMTEzLjUyN1Y0OS40NTYxSDExNS4wMjdaTTExNS4wMjcgNDkuNDY1MlY0OS40NTYxSDExMy41MjdWNDkuNDY1MkgxMTUuMDI3Wk0xMTUuMDI3IDQ5LjQ3NDNWNDkuNDY1MkgxMTMuNTI3VjQ5LjQ3NDNIMTE1LjAyN1pNMTE1LjAyNyA0OS40ODMzVjQ5LjQ3NDNIMTEzLjUyN1Y0OS40ODMzSDExNS4wMjdaTTExNS4wMjcgNDkuNDkyNFY0OS40ODMzSDExMy41MjdWNDkuNDkyNEgxMTUuMDI3Wk0xMTUuMDI3IDQ5LjUwMTVWNDkuNDkyNEgxMTMuNTI3VjQ5LjUwMTVIMTE1LjAyN1pNMTE1LjAyNyA0OS41MTA2VjQ5LjUwMTVIMTEzLjUyN1Y0OS41MTA2SDExNS4wMjdaTTExNS4wMjcgNDkuNTE5N1Y0OS41MTA2SDExMy41MjdWNDkuNTE5N0gxMTUuMDI3Wk0xMTUuMDI3IDQ5LjUyODhWNDkuNTE5N0gxMTMuNTI3VjQ5LjUyODhIMTE1LjAyN1pNMTE1LjAyNyA0OS41Mzc5VjQ5LjUyODhIMTEzLjUyN1Y0OS41Mzc5SDExNS4wMjdaTTExNS4wMjcgNDkuNTQ3VjQ5LjUzNzlIMTEzLjUyN1Y0OS41NDdIMTE1LjAyN1pNMTE1LjAyNyA0OS41NTYxVjQ5LjU0N0gxMTMuNTI3VjQ5LjU1NjFIMTE1LjAyN1pNMTE1LjAyNyA0OS41NjUyVjQ5LjU1NjFIMTEzLjUyN1Y0OS41NjUySDExNS4wMjdaTTExNS4wMjcgNDkuNTc0M1Y0OS41NjUySDExMy41MjdWNDkuNTc0M0gxMTUuMDI3Wk0xMTUuMDI3IDQ5LjU4MzVWNDkuNTc0M0gxMTMuNTI3VjQ5LjU4MzVIMTE1LjAyN1pNMTE1LjAyNyA0OS41OTI2VjQ5LjU4MzVIMTEzLjUyN1Y0OS41OTI2SDExNS4wMjdaTTExNS4wMjcgNDkuNjAxOFY0OS41OTI2SDExMy41MjdWNDkuNjAxOEgxMTUuMDI3Wk0xMTUuMDI3IDQ5LjYxMDlWNDkuNjAxOEgxMTMuNTI3VjQ5LjYxMDlIMTE1LjAyN1pNMTE1LjAyNyA0OS42MjAxVjQ5LjYxMDlIMTEzLjUyN1Y0OS42MjAxSDExNS4wMjdaTTExNS4wMjcgNDkuNjI5MlY0OS42MjAxSDExMy41MjdWNDkuNjI5MkgxMTUuMDI3Wk0xMTUuMDI3IDQ5LjYzODRWNDkuNjI5MkgxMTMuNTI3VjQ5LjYzODRIMTE1LjAyN1pNMTE1LjAyNyA0OS42NDc2VjQ5LjYzODRIMTEzLjUyN1Y0OS42NDc2SDExNS4wMjdaTTExNS4wMjcgNDkuNjU2N1Y0OS42NDc2SDExMy41MjdWNDkuNjU2N0gxMTUuMDI3Wk0xMTUuMDI3IDQ5LjY2NTlWNDkuNjU2N0gxMTMuNTI3VjQ5LjY2NTlIMTE1LjAyN1pNMTE1LjAyNyA0OS42NzUxVjQ5LjY2NTlIMTEzLjUyN1Y0OS42NzUxSDExNS4wMjdaTTExNS4wMjcgNDkuNjg0M1Y0OS42NzUxSDExMy41MjdWNDkuNjg0M0gxMTUuMDI3Wk0xMTUuMDI3IDQ5LjY5MzVWNDkuNjg0M0gxMTMuNTI3VjQ5LjY5MzVIMTE1LjAyN1pNMTE1LjAyNyA0OS43MDI3VjQ5LjY5MzVIMTEzLjUyN1Y0OS43MDI3SDExNS4wMjdaTTExNS4wMjcgNDkuNzEyVjQ5LjcwMjdIMTEzLjUyN1Y0OS43MTJIMTE1LjAyN1pNMTE1LjAyNyA0OS43MjEyVjQ5LjcxMkgxMTMuNTI3VjQ5LjcyMTJIMTE1LjAyN1pNMTE1LjAyNyA0OS43MzA0VjQ5LjcyMTJIMTEzLjUyN1Y0OS43MzA0SDExNS4wMjdaTTExNS4wMjcgNDkuNzM5NlY0OS43MzA0SDExMy41MjdWNDkuNzM5NkgxMTUuMDI3Wk0xMTUuMDI3IDQ5Ljc0ODlWNDkuNzM5NkgxMTMuNTI3VjQ5Ljc0ODlIMTE1LjAyN1pNMTE1LjAyNyA0OS43NTgxVjQ5Ljc0ODlIMTEzLjUyN1Y0OS43NTgxSDExNS4wMjdaTTExNS4wMjcgNDkuNzY3NFY0OS43NTgxSDExMy41MjdWNDkuNzY3NEgxMTUuMDI3Wk0xMTUuMDI3IDQ5Ljc3NjZWNDkuNzY3NEgxMTMuNTI3VjQ5Ljc3NjZIMTE1LjAyN1pNMTE1LjAyNyA0OS43ODU5VjQ5Ljc3NjZIMTEzLjUyN1Y0OS43ODU5SDExNS4wMjdaTTExNS4wMjcgNDkuNzk1MlY0OS43ODU5SDExMy41MjdWNDkuNzk1MkgxMTUuMDI3Wk0xMTUuMDI3IDQ5LjgwNDRWNDkuNzk1MkgxMTMuNTI3VjQ5LjgwNDRIMTE1LjAyN1pNMTE1LjAyNyA0OS44MTM3VjQ5LjgwNDRIMTEzLjUyN1Y0OS44MTM3SDExNS4wMjdaTTExNS4wMjcgNDkuODIzVjQ5LjgxMzdIMTEzLjUyN1Y0OS44MjNIMTE1LjAyN1pNMTE1LjAyNyA0OS44MzIzVjQ5LjgyM0gxMTMuNTI3VjQ5LjgzMjNIMTE1LjAyN1pNMTE1LjAyNyA0OS44NDE2VjQ5LjgzMjNIMTEzLjUyN1Y0OS44NDE2SDExNS4wMjdaTTExNS4wMjcgNDkuODUwOVY0OS44NDE2SDExMy41MjdWNDkuODUwOUgxMTUuMDI3Wk0xMTUuMDI3IDQ5Ljg2MDJWNDkuODUwOUgxMTMuNTI3VjQ5Ljg2MDJIMTE1LjAyN1pNMTE1LjAyNyA0OS44Njk1VjQ5Ljg2MDJIMTEzLjUyN1Y0OS44Njk1SDExNS4wMjdaTTExNS4wMjcgNDkuODc4OFY0OS44Njk1SDExMy41MjdWNDkuODc4OEgxMTUuMDI3Wk0xMTUuMDI3IDQ5Ljg4ODJWNDkuODc4OEgxMTMuNTI3VjQ5Ljg4ODJIMTE1LjAyN1pNMTE1LjAyNyA0OS44OTc1VjQ5Ljg4ODJIMTEzLjUyN1Y0OS44OTc1SDExNS4wMjdaTTExNS4wMjcgNDkuOTA2OFY0OS44OTc1SDExMy41MjdWNDkuOTA2OEgxMTUuMDI3Wk0xMTUuMDI3IDQ5LjkxNjJWNDkuOTA2OEgxMTMuNTI3VjQ5LjkxNjJIMTE1LjAyN1pNMTE1LjAyNyA0OS45MjU1VjQ5LjkxNjJIMTEzLjUyN1Y0OS45MjU1SDExNS4wMjdaTTExNS4wMjcgNDkuOTM0OVY0OS45MjU1SDExMy41MjdWNDkuOTM0OUgxMTUuMDI3Wk0xMTUuMDI3IDQ5Ljk0NDNWNDkuOTM0OUgxMTMuNTI3VjQ5Ljk0NDNIMTE1LjAyN1pNMTE1LjAyNyA0OS45NTM2VjQ5Ljk0NDNIMTEzLjUyN1Y0OS45NTM2SDExNS4wMjdaTTExNS4wMjcgNDkuOTYzVjQ5Ljk1MzZIMTEzLjUyN1Y0OS45NjNIMTE1LjAyN1pNMTE1LjAyNyA0OS45NzI0VjQ5Ljk2M0gxMTMuNTI3VjQ5Ljk3MjRIMTE1LjAyN1pNMTE1LjAyNyA0OS45ODE4VjQ5Ljk3MjRIMTEzLjUyN1Y0OS45ODE4SDExNS4wMjdaTTExNS4wMjcgNDkuOTkxMlY0OS45ODE4SDExMy41MjdWNDkuOTkxMkgxMTUuMDI3Wk0xMTUuMDI3IDUwLjAwMDZWNDkuOTkxMkgxMTMuNTI3VjUwLjAwMDZIMTE1LjAyN1pNMTE1LjAyNyA1MC4wMVY1MC4wMDA2SDExMy41MjdWNTAuMDFIMTE1LjAyN1pNMTE1LjAyNyA1MC4wMTk0VjUwLjAxSDExMy41MjdWNTAuMDE5NEgxMTUuMDI3Wk0xMTUuMDI3IDUwLjAyODhWNTAuMDE5NEgxMTMuNTI3VjUwLjAyODhIMTE1LjAyN1pNMTE1LjAyNyA1MC4wMzgyVjUwLjAyODhIMTEzLjUyN1Y1MC4wMzgySDExNS4wMjdaTTExNS4wMjcgNTAuMDQ3NlY1MC4wMzgySDExMy41MjdWNTAuMDQ3NkgxMTUuMDI3Wk0xMTUuMDI3IDUwLjA1NzFWNTAuMDQ3NkgxMTMuNTI3VjUwLjA1NzFIMTE1LjAyN1pNMTE1LjAyNyA1MC4wNjY1VjUwLjA1NzFIMTEzLjUyN1Y1MC4wNjY1SDExNS4wMjdaTTExNS4wMjcgNTAuMDc2VjUwLjA2NjVIMTEzLjUyN1Y1MC4wNzZIMTE1LjAyN1pNMTE1LjAyNyA1MC4wODU0VjUwLjA3NkgxMTMuNTI3VjUwLjA4NTRIMTE1LjAyN1pNMTE1LjAyNyA1MC4wOTQ5VjUwLjA4NTRIMTEzLjUyN1Y1MC4wOTQ5SDExNS4wMjdaTTExNS4wMjcgNTAuMTA0M1Y1MC4wOTQ5SDExMy41MjdWNTAuMTA0M0gxMTUuMDI3Wk0xMTUuMDI3IDUwLjExMzhWNTAuMTA0M0gxMTMuNTI3VjUwLjExMzhIMTE1LjAyN1pNMTE1LjAyNyA1MC4xMjMzVjUwLjExMzhIMTEzLjUyN1Y1MC4xMjMzSDExNS4wMjdaTTExNS4wMjcgNTAuMTMyOFY1MC4xMjMzSDExMy41MjdWNTAuMTMyOEgxMTUuMDI3Wk0xMTUuMDI3IDUwLjE0MjNWNTAuMTMyOEgxMTMuNTI3VjUwLjE0MjNIMTE1LjAyN1pNMTE1LjAyNyA1MC4xNTE3VjUwLjE0MjNIMTEzLjUyN1Y1MC4xNTE3SDExNS4wMjdaTTExNS4wMjcgNTAuMTYxMlY1MC4xNTE3SDExMy41MjdWNTAuMTYxMkgxMTUuMDI3Wk0xMTUuMDI3IDUwLjE3MDdWNTAuMTYxMkgxMTMuNTI3VjUwLjE3MDdIMTE1LjAyN1pNMTE1LjAyNyA1MC4xODAzVjUwLjE3MDdIMTEzLjUyN1Y1MC4xODAzSDExNS4wMjdaTTExNS4wMjcgNTAuMTg5OFY1MC4xODAzSDExMy41MjdWNTAuMTg5OEgxMTUuMDI3Wk0xMTUuMDI3IDUwLjE5OTNWNTAuMTg5OEgxMTMuNTI3VjUwLjE5OTNIMTE1LjAyN1pNMTE1LjAyNyA1MC4yMDg4VjUwLjE5OTNIMTEzLjUyN1Y1MC4yMDg4SDExNS4wMjdaTTExNS4wMjcgNTAuMjE4NFY1MC4yMDg4SDExMy41MjdWNTAuMjE4NEgxMTUuMDI3Wk0xMTUuMDI3IDUwLjIyNzlWNTAuMjE4NEgxMTMuNTI3VjUwLjIyNzlIMTE1LjAyN1pNMTE1LjAyNyA1MC4yMzc0VjUwLjIyNzlIMTEzLjUyN1Y1MC4yMzc0SDExNS4wMjdaTTExNS4wMjcgNTAuMjQ3VjUwLjIzNzRIMTEzLjUyN1Y1MC4yNDdIMTE1LjAyN1pNMTE1LjAyNyA1MC4yNTY2VjUwLjI0N0gxMTMuNTI3VjUwLjI1NjZIMTE1LjAyN1pNMTE1LjAyNyA1MC4yNjYxVjUwLjI1NjZIMTEzLjUyN1Y1MC4yNjYxSDExNS4wMjdaTTExNS4wMjcgNTAuMjc1N1Y1MC4yNjYxSDExMy41MjdWNTAuMjc1N0gxMTUuMDI3Wk0xMTUuMDI3IDUwLjI4NTNWNTAuMjc1N0gxMTMuNTI3VjUwLjI4NTNIMTE1LjAyN1pNMTE1LjAyNyA1MC4yOTQ4VjUwLjI4NTNIMTEzLjUyN1Y1MC4yOTQ4SDExNS4wMjdaTTExNS4wMjcgNTAuMzA0NFY1MC4yOTQ4SDExMy41MjdWNTAuMzA0NEgxMTUuMDI3Wk0xMTUuMDI3IDUwLjMxNFY1MC4zMDQ0SDExMy41MjdWNTAuMzE0SDExNS4wMjdaTTExNS4wMjcgNTAuMzIzNlY1MC4zMTRIMTEzLjUyN1Y1MC4zMjM2SDExNS4wMjdaTTExNS4wMjcgNTAuMzMzMlY1MC4zMjM2SDExMy41MjdWNTAuMzMzMkgxMTUuMDI3Wk0xMTUuMDI3IDUwLjM0MjhWNTAuMzMzMkgxMTMuNTI3VjUwLjM0MjhIMTE1LjAyN1pNMTE1LjAyNyA1MC4zNTI1VjUwLjM0MjhIMTEzLjUyN1Y1MC4zNTI1SDExNS4wMjdaTTExNS4wMjcgNTAuMzYyMVY1MC4zNTI1SDExMy41MjdWNTAuMzYyMUgxMTUuMDI3Wk0xMTUuMDI3IDUwLjM3MTdWNTAuMzYyMUgxMTMuNTI3VjUwLjM3MTdIMTE1LjAyN1pNMTE1LjAyNyA1MC4zODEzVjUwLjM3MTdIMTEzLjUyN1Y1MC4zODEzSDExNS4wMjdaTTExNS4wMjcgNTAuMzkxVjUwLjM4MTNIMTEzLjUyN1Y1MC4zOTFIMTE1LjAyN1pNMTE1LjAyNyA1MC40MDA2VjUwLjM5MUgxMTMuNTI3VjUwLjQwMDZIMTE1LjAyN1pNMTE1LjAyNyA1MC40MTAzVjUwLjQwMDZIMTEzLjUyN1Y1MC40MTAzSDExNS4wMjdaTTExNS4wMjcgNTAuNDE5OVY1MC40MTAzSDExMy41MjdWNTAuNDE5OUgxMTUuMDI3Wk0xMTUuMDI3IDUwLjQyOTZWNTAuNDE5OUgxMTMuNTI3VjUwLjQyOTZIMTE1LjAyN1pNMTE1LjAyNyA1MC40MzkzVjUwLjQyOTZIMTEzLjUyN1Y1MC40MzkzSDExNS4wMjdaTTExNS4wMjcgNTAuNDQ4OVY1MC40MzkzSDExMy41MjdWNTAuNDQ4OUgxMTUuMDI3Wk0xMTUuMDI3IDUwLjQ1ODZWNTAuNDQ4OUgxMTMuNTI3VjUwLjQ1ODZIMTE1LjAyN1pNMTE1LjAyNyA1MC40NjgzVjUwLjQ1ODZIMTEzLjUyN1Y1MC40NjgzSDExNS4wMjdaTTExNS4wMjcgNTAuNDc4VjUwLjQ2ODNIMTEzLjUyN1Y1MC40NzhIMTE1LjAyN1pNMTE1LjAyNyA1MC40ODc3VjUwLjQ3OEgxMTMuNTI3VjUwLjQ4NzdIMTE1LjAyN1pNMTE1LjAyNyA1MC40OTc0VjUwLjQ4NzdIMTEzLjUyN1Y1MC40OTc0SDExNS4wMjdaTTExNS4wMjcgNTAuNTA3MVY1MC40OTc0SDExMy41MjdWNTAuNTA3MUgxMTUuMDI3Wk0xMTUuMDI3IDUwLjUxNjhWNTAuNTA3MUgxMTMuNTI3VjUwLjUxNjhIMTE1LjAyN1pNMTE1LjAyNyA1MC41MjY2VjUwLjUxNjhIMTEzLjUyN1Y1MC41MjY2SDExNS4wMjdaTTExNS4wMjcgNTAuNTM2M1Y1MC41MjY2SDExMy41MjdWNTAuNTM2M0gxMTUuMDI3Wk0xMTUuMDI3IDUwLjU0NlY1MC41MzYzSDExMy41MjdWNTAuNTQ2SDExNS4wMjdaTTExNS4wMjcgNTAuNTU1OFY1MC41NDZIMTEzLjUyN1Y1MC41NTU4SDExNS4wMjdaTTExNS4wMjcgNTAuNTY1NVY1MC41NTU4SDExMy41MjdWNTAuNTY1NUgxMTUuMDI3Wk0xMTUuMDI3IDUwLjU3NTNWNTAuNTY1NUgxMTMuNTI3VjUwLjU3NTNIMTE1LjAyN1pNMTE1LjAyNyA1MC41ODVWNTAuNTc1M0gxMTMuNTI3VjUwLjU4NUgxMTUuMDI3Wk0xMTUuMDI3IDUwLjU5NDhWNTAuNTg1SDExMy41MjdWNTAuNTk0OEgxMTUuMDI3Wk0xMTUuMDI3IDUwLjYwNDZWNTAuNTk0OEgxMTMuNTI3VjUwLjYwNDZIMTE1LjAyN1pNMTE1LjAyNyA1MC42MTQzVjUwLjYwNDZIMTEzLjUyN1Y1MC42MTQzSDExNS4wMjdaTTExNS4wMjcgNTAuNjI0MVY1MC42MTQzSDExMy41MjdWNTAuNjI0MUgxMTUuMDI3Wk0xMTUuMDI3IDUwLjYzMzlWNTAuNjI0MUgxMTMuNTI3VjUwLjYzMzlIMTE1LjAyN1pNMTE1LjAyNyA1MC42NDM3VjUwLjYzMzlIMTEzLjUyN1Y1MC42NDM3SDExNS4wMjdaTTExNS4wMjcgNTAuNjUzNVY1MC42NDM3SDExMy41MjdWNTAuNjUzNUgxMTUuMDI3Wk0xMTUuMDI3IDUwLjY2MzNWNTAuNjUzNUgxMTMuNTI3VjUwLjY2MzNIMTE1LjAyN1pNMTE1LjAyNyA1MC42NzMxVjUwLjY2MzNIMTEzLjUyN1Y1MC42NzMxSDExNS4wMjdaTTExNS4wMjcgNTAuNjgyOVY1MC42NzMxSDExMy41MjdWNTAuNjgyOUgxMTUuMDI3Wk0xMTUuMDI3IDUwLjY5MjhWNTAuNjgyOUgxMTMuNTI3VjUwLjY5MjhIMTE1LjAyN1pNMTE1LjAyNyA1MC43MDI2VjUwLjY5MjhIMTEzLjUyN1Y1MC43MDI2SDExNS4wMjdaTTExNS4wMjcgNTAuNzEyNFY1MC43MDI2SDExMy41MjdWNTAuNzEyNEgxMTUuMDI3Wk0xMTUuMDI3IDUwLjcyMjNWNTAuNzEyNEgxMTMuNTI3VjUwLjcyMjNIMTE1LjAyN1pNMTE1LjAyNyA1MC43MzIxVjUwLjcyMjNIMTEzLjUyN1Y1MC43MzIxSDExNS4wMjdaTTExNS4wMjcgNTAuNzQyVjUwLjczMjFIMTEzLjUyN1Y1MC43NDJIMTE1LjAyN1pNMTE1LjAyNyA1MC43NTE4VjUwLjc0MkgxMTMuNTI3VjUwLjc1MThIMTE1LjAyN1pNMTE1LjAyNyA1MC43NjE3VjUwLjc1MThIMTEzLjUyN1Y1MC43NjE3SDExNS4wMjdaTTExNS4wMjcgNTAuNzcxNlY1MC43NjE3SDExMy41MjdWNTAuNzcxNkgxMTUuMDI3Wk0xMTUuMDI3IDUwLjc4MTRWNTAuNzcxNkgxMTMuNTI3VjUwLjc4MTRIMTE1LjAyN1pNMTE1LjAyNyA1MC43OTEzVjUwLjc4MTRIMTEzLjUyN1Y1MC43OTEzSDExNS4wMjdaTTExNS4wMjcgNTAuODAxMlY1MC43OTEzSDExMy41MjdWNTAuODAxMkgxMTUuMDI3Wk0xMTUuMDI3IDUwLjgxMTFWNTAuODAxMkgxMTMuNTI3VjUwLjgxMTFIMTE1LjAyN1pNMTE1LjAyNyA1MC44MjFWNTAuODExMUgxMTMuNTI3VjUwLjgyMUgxMTUuMDI3Wk0xMTUuMDI3IDUwLjgzMDlWNTAuODIxSDExMy41MjdWNTAuODMwOUgxMTUuMDI3Wk0xMTUuMDI3IDUwLjg0MDhWNTAuODMwOUgxMTMuNTI3VjUwLjg0MDhIMTE1LjAyN1pNMTE1LjAyNyA1MC44NTA3VjUwLjg0MDhIMTEzLjUyN1Y1MC44NTA3SDExNS4wMjdaTTExNS4wMjcgNTAuODYwN1Y1MC44NTA3SDExMy41MjdWNTAuODYwN0gxMTUuMDI3Wk0xMTUuMDI3IDUwLjg3MDZWNTAuODYwN0gxMTMuNTI3VjUwLjg3MDZIMTE1LjAyN1pNMTE1LjAyNyA1MC44ODA1VjUwLjg3MDZIMTEzLjUyN1Y1MC44ODA1SDExNS4wMjdaTTExNS4wMjcgNTAuODkwNVY1MC44ODA1SDExMy41MjdWNTAuODkwNUgxMTUuMDI3Wk0xMTUuMDI3IDUwLjkwMDRWNTAuODkwNUgxMTMuNTI3VjUwLjkwMDRIMTE1LjAyN1pNMTE1LjAyNyA1MC45MTA0VjUwLjkwMDRIMTEzLjUyN1Y1MC45MTA0SDExNS4wMjdaTTExNS4wMjcgNTAuOTIwM1Y1MC45MTA0SDExMy41MjdWNTAuOTIwM0gxMTUuMDI3Wk0xMTUuMDI3IDUwLjkzMDNWNTAuOTIwM0gxMTMuNTI3VjUwLjkzMDNIMTE1LjAyN1pNMTE1LjAyNyA1MC45NDAzVjUwLjkzMDNIMTEzLjUyN1Y1MC45NDAzSDExNS4wMjdaTTExNS4wMjcgNTAuOTUwMlY1MC45NDAzSDExMy41MjdWNTAuOTUwMkgxMTUuMDI3Wk0xMTUuMDI3IDUwLjk2MDJWNTAuOTUwMkgxMTMuNTI3VjUwLjk2MDJIMTE1LjAyN1pNMTE1LjAyNyA1MC45NzAyVjUwLjk2MDJIMTEzLjUyN1Y1MC45NzAySDExNS4wMjdaTTExNS4wMjcgNTAuOTgwMlY1MC45NzAySDExMy41MjdWNTAuOTgwMkgxMTUuMDI3Wk0xMTUuMDI3IDUwLjk5MDJWNTAuOTgwMkgxMTMuNTI3VjUwLjk5MDJIMTE1LjAyN1pNMTE1LjAyNyA1MS4wMDAyVjUwLjk5MDJIMTEzLjUyN1Y1MS4wMDAySDExNS4wMjdaTTExNS4wMjcgNTEuMDEwMlY1MS4wMDAySDExMy41MjdWNTEuMDEwMkgxMTUuMDI3Wk0xMTUuMDI3IDUxLjAyMDJWNTEuMDEwMkgxMTMuNTI3VjUxLjAyMDJIMTE1LjAyN1pNMTE1LjAyNyA1MS4wMzAzVjUxLjAyMDJIMTEzLjUyN1Y1MS4wMzAzSDExNS4wMjdaTTExNS4wMjcgNTEuMDQwM1Y1MS4wMzAzSDExMy41MjdWNTEuMDQwM0gxMTUuMDI3Wk0xMTUuMDI3IDUxLjA1MDNWNTEuMDQwM0gxMTMuNTI3VjUxLjA1MDNIMTE1LjAyN1pNMTE1LjAyNyA1MS4wNjA0VjUxLjA1MDNIMTEzLjUyN1Y1MS4wNjA0SDExNS4wMjdaTTExNS4wMjcgNTEuMDcwNFY1MS4wNjA0SDExMy41MjdWNTEuMDcwNEgxMTUuMDI3Wk0xMTUuMDI3IDUxLjA4MDVWNTEuMDcwNEgxMTMuNTI3VjUxLjA4MDVIMTE1LjAyN1pNMTE1LjAyNyA1MS4wOTA1VjUxLjA4MDVIMTEzLjUyN1Y1MS4wOTA1SDExNS4wMjdaTTExNS4wMjcgNTEuMTAwNlY1MS4wOTA1SDExMy41MjdWNTEuMTAwNkgxMTUuMDI3Wk0xMTUuMDI3IDUxLjExMDdWNTEuMTAwNkgxMTMuNTI3VjUxLjExMDdIMTE1LjAyN1pNMTE1LjAyNyA1MS4xMjA3VjUxLjExMDdIMTEzLjUyN1Y1MS4xMjA3SDExNS4wMjdaTTExNS4wMjcgNTEuMTMwOFY1MS4xMjA3SDExMy41MjdWNTEuMTMwOEgxMTUuMDI3Wk0xMTUuMDI3IDUxLjE0MDlWNTEuMTMwOEgxMTMuNTI3VjUxLjE0MDlIMTE1LjAyN1pNMTE1LjAyNyA1MS4xNTFWNTEuMTQwOUgxMTMuNTI3VjUxLjE1MUgxMTUuMDI3Wk0xMTUuMDI3IDUxLjE2MTFWNTEuMTUxSDExMy41MjdWNTEuMTYxMUgxMTUuMDI3Wk0xMTUuMDI3IDUxLjE3MTJWNTEuMTYxMUgxMTMuNTI3VjUxLjE3MTJIMTE1LjAyN1pNMTE1LjAyNyA1MS4xODEzVjUxLjE3MTJIMTEzLjUyN1Y1MS4xODEzSDExNS4wMjdaTTExNS4wMjcgNTEuMTkxNFY1MS4xODEzSDExMy41MjdWNTEuMTkxNEgxMTUuMDI3Wk0xMTUuMDI3IDUxLjIwMTZWNTEuMTkxNEgxMTMuNTI3VjUxLjIwMTZIMTE1LjAyN1pNMTE1LjAyNyA1MS4yMTE3VjUxLjIwMTZIMTEzLjUyN1Y1MS4yMTE3SDExNS4wMjdaTTExNS4wMjcgNTEuMjIxOFY1MS4yMTE3SDExMy41MjdWNTEuMjIxOEgxMTUuMDI3Wk0xMTUuMDI3IDUxLjIzMlY1MS4yMjE4SDExMy41MjdWNTEuMjMySDExNS4wMjdaTTExNS4wMjcgNTEuMjQyMVY1MS4yMzJIMTEzLjUyN1Y1MS4yNDIxSDExNS4wMjdaTTExNS4wMjcgNTEuMjUyM1Y1MS4yNDIxSDExMy41MjdWNTEuMjUyM0gxMTUuMDI3Wk0xMTUuMDI3IDUxLjI2MjRWNTEuMjUyM0gxMTMuNTI3VjUxLjI2MjRIMTE1LjAyN1pNMTE1LjAyNyA1MS4yNzI2VjUxLjI2MjRIMTEzLjUyN1Y1MS4yNzI2SDExNS4wMjdaTTExNS4wMjcgNTEuMjgyOFY1MS4yNzI2SDExMy41MjdWNTEuMjgyOEgxMTUuMDI3Wk0xMTUuMDI3IDUxLjI5MjlWNTEuMjgyOEgxMTMuNTI3VjUxLjI5MjlIMTE1LjAyN1pNMTE1LjAyNyA1MS4zMDMxVjUxLjI5MjlIMTEzLjUyN1Y1MS4zMDMxSDExNS4wMjdaTTExNS4wMjcgNTEuMzEzM1Y1MS4zMDMxSDExMy41MjdWNTEuMzEzM0gxMTUuMDI3Wk0xMTUuMDI3IDUxLjMyMzVWNTEuMzEzM0gxMTMuNTI3VjUxLjMyMzVIMTE1LjAyN1pNMTE1LjAyNyA1MS4zMzM3VjUxLjMyMzVIMTEzLjUyN1Y1MS4zMzM3SDExNS4wMjdaTTExNS4wMjcgNTEuMzQzOVY1MS4zMzM3SDExMy41MjdWNTEuMzQzOUgxMTUuMDI3Wk0xMTUuMDI3IDUxLjM1NDFWNTEuMzQzOUgxMTMuNTI3VjUxLjM1NDFIMTE1LjAyN1pNMTE1LjAyNyA1MS4zNjQzVjUxLjM1NDFIMTEzLjUyN1Y1MS4zNjQzSDExNS4wMjdaTTExNS4wMjcgNTEuMzc0NlY1MS4zNjQzSDExMy41MjdWNTEuMzc0NkgxMTUuMDI3Wk0xMTUuMDI3IDUxLjM4NDhWNTEuMzc0NkgxMTMuNTI3VjUxLjM4NDhIMTE1LjAyN1pNMTE1LjAyNyA1MS4zOTVWNTEuMzg0OEgxMTMuNTI3VjUxLjM5NUgxMTUuMDI3Wk0xMTUuMDI3IDUxLjQwNTNWNTEuMzk1SDExMy41MjdWNTEuNDA1M0gxMTUuMDI3Wk0xMTUuMDI3IDUxLjQxNTVWNTEuNDA1M0gxMTMuNTI3VjUxLjQxNTVIMTE1LjAyN1pNMTE1LjAyNyA1MS40MjU4VjUxLjQxNTVIMTEzLjUyN1Y1MS40MjU4SDExNS4wMjdaTTExNS4wMjcgNTEuNDM2VjUxLjQyNThIMTEzLjUyN1Y1MS40MzZIMTE1LjAyN1pNMTE1LjAyNyA1MS40NDYzVjUxLjQzNkgxMTMuNTI3VjUxLjQ0NjNIMTE1LjAyN1pNMTE1LjAyNyA1MS40NTY2VjUxLjQ0NjNIMTEzLjUyN1Y1MS40NTY2SDExNS4wMjdaTTExNS4wMjcgNTEuNDY2OFY1MS40NTY2SDExMy41MjdWNTEuNDY2OEgxMTUuMDI3Wk0xMTUuMDI3IDUxLjQ3NzFWNTEuNDY2OEgxMTMuNTI3VjUxLjQ3NzFIMTE1LjAyN1pNMTE1LjAyNyA1MS40ODc0VjUxLjQ3NzFIMTEzLjUyN1Y1MS40ODc0SDExNS4wMjdaTTExNS4wMjcgNTEuNDk3N1Y1MS40ODc0SDExMy41MjdWNTEuNDk3N0gxMTUuMDI3Wk0xMTUuMDI3IDUxLjUwOFY1MS40OTc3SDExMy41MjdWNTEuNTA4SDExNS4wMjdaTTExNS4wMjcgNTEuNTE4M1Y1MS41MDhIMTEzLjUyN1Y1MS41MTgzSDExNS4wMjdaTTExNS4wMjcgNTEuNTI4NlY1MS41MTgzSDExMy41MjdWNTEuNTI4NkgxMTUuMDI3Wk0xMTUuMDI3IDUxLjUzODlWNTEuNTI4NkgxMTMuNTI3VjUxLjUzODlIMTE1LjAyN1pNMTE1LjAyNyA1MS41NDkzVjUxLjUzODlIMTEzLjUyN1Y1MS41NDkzSDExNS4wMjdaTTExNS4wMjcgNTEuNTU5NlY1MS41NDkzSDExMy41MjdWNTEuNTU5NkgxMTUuMDI3Wk0xMTUuMDI3IDUxLjU2OTlWNTEuNTU5NkgxMTMuNTI3VjUxLjU2OTlIMTE1LjAyN1pNMTE1LjAyNyA1MS41ODAzVjUxLjU2OTlIMTEzLjUyN1Y1MS41ODAzSDExNS4wMjdaTTExNS4wMjcgNTEuNTkwNlY1MS41ODAzSDExMy41MjdWNTEuNTkwNkgxMTUuMDI3Wk0xMTUuMDI3IDUxLjYwMVY1MS41OTA2SDExMy41MjdWNTEuNjAxSDExNS4wMjdaTTExNS4wMjcgNTEuNjExM1Y1MS42MDFIMTEzLjUyN1Y1MS42MTEzSDExNS4wMjdaTTExNS4wMjcgNTEuNjIxN1Y1MS42MTEzSDExMy41MjdWNTEuNjIxN0gxMTUuMDI3Wk0xMTUuMDI3IDUxLjYzMjFWNTEuNjIxN0gxMTMuNTI3VjUxLjYzMjFIMTE1LjAyN1pNMTE1LjAyNyA1MS42NDI1VjUxLjYzMjFIMTEzLjUyN1Y1MS42NDI1SDExNS4wMjdaTTExNS4wMjcgNTEuNjUyOFY1MS42NDI1SDExMy41MjdWNTEuNjUyOEgxMTUuMDI3Wk0xMTUuMDI3IDUxLjY2MzJWNTEuNjUyOEgxMTMuNTI3VjUxLjY2MzJIMTE1LjAyN1pNMTE1LjAyNyA1MS42NzM2VjUxLjY2MzJIMTEzLjUyN1Y1MS42NzM2SDExNS4wMjdaTTExNS4wMjcgNTEuNjg0VjUxLjY3MzZIMTEzLjUyN1Y1MS42ODRIMTE1LjAyN1pNMTE1LjAyNyA1MS42OTQ0VjUxLjY4NEgxMTMuNTI3VjUxLjY5NDRIMTE1LjAyN1pNMTE1LjAyNyA1MS43MDQ4VjUxLjY5NDRIMTEzLjUyN1Y1MS43MDQ4SDExNS4wMjdaTTExNS4wMjcgNTEuNzE1M1Y1MS43MDQ4SDExMy41MjdWNTEuNzE1M0gxMTUuMDI3Wk0xMTUuMDI3IDUxLjcyNTdWNTEuNzE1M0gxMTMuNTI3VjUxLjcyNTdIMTE1LjAyN1pNMTE1LjAyNyA1MS43MzYxVjUxLjcyNTdIMTEzLjUyN1Y1MS43MzYxSDExNS4wMjdaTTExNS4wMjcgNTEuNzQ2NlY1MS43MzYxSDExMy41MjdWNTEuNzQ2NkgxMTUuMDI3Wk0xMTUuMDI3IDUxLjc1N1Y1MS43NDY2SDExMy41MjdWNTEuNzU3SDExNS4wMjdaTTExNS4wMjcgNTEuNzY3NFY1MS43NTdIMTEzLjUyN1Y1MS43Njc0SDExNS4wMjdaTTExNS4wMjcgNTEuNzc3OVY1MS43Njc0SDExMy41MjdWNTEuNzc3OUgxMTUuMDI3Wk0xMTUuMDI3IDUxLjc4ODRWNTEuNzc3OUgxMTMuNTI3VjUxLjc4ODRIMTE1LjAyN1pNMTE1LjAyNyA1MS43OTg4VjUxLjc4ODRIMTEzLjUyN1Y1MS43OTg4SDExNS4wMjdaTTExNS4wMjcgNTEuODA5M1Y1MS43OTg4SDExMy41MjdWNTEuODA5M0gxMTUuMDI3Wk0xMTUuMDI3IDUxLjgxOThWNTEuODA5M0gxMTMuNTI3VjUxLjgxOThIMTE1LjAyN1pNMTE1LjAyNyA1MS44MzAzVjUxLjgxOThIMTEzLjUyN1Y1MS44MzAzSDExNS4wMjdaTTExNS4wMjcgNTEuODQwN1Y1MS44MzAzSDExMy41MjdWNTEuODQwN0gxMTUuMDI3Wk0xMTUuMDI3IDUxLjg1MTJWNTEuODQwN0gxMTMuNTI3VjUxLjg1MTJIMTE1LjAyN1pNMTE1LjAyNyA1MS44NjE3VjUxLjg1MTJIMTEzLjUyN1Y1MS44NjE3SDExNS4wMjdaTTExNS4wMjcgNTEuODcyM1Y1MS44NjE3SDExMy41MjdWNTEuODcyM0gxMTUuMDI3Wk0xMTUuMDI3IDUxLjg4MjhWNTEuODcyM0gxMTMuNTI3VjUxLjg4MjhIMTE1LjAyN1pNMTE1LjAyNyA1MS44OTMzVjUxLjg4MjhIMTEzLjUyN1Y1MS44OTMzSDExNS4wMjdaTTExNS4wMjcgNTEuOTAzOFY1MS44OTMzSDExMy41MjdWNTEuOTAzOEgxMTUuMDI3Wk0xMTUuMDI3IDUxLjkxNDNWNTEuOTAzOEgxMTMuNTI3VjUxLjkxNDNIMTE1LjAyN1pNMTE1LjAyNyA1MS45MjQ5VjUxLjkxNDNIMTEzLjUyN1Y1MS45MjQ5SDExNS4wMjdaTTExNS4wMjcgNTEuOTM1NFY1MS45MjQ5SDExMy41MjdWNTEuOTM1NEgxMTUuMDI3Wk0xMTUuMDI3IDUxLjk0NlY1MS45MzU0SDExMy41MjdWNTEuOTQ2SDExNS4wMjdaTTExNS4wMjcgNTEuOTU2NVY1MS45NDZIMTEzLjUyN1Y1MS45NTY1SDExNS4wMjdaTTExNS4wMjcgNTEuOTY3MVY1MS45NTY1SDExMy41MjdWNTEuOTY3MUgxMTUuMDI3Wk0xMTUuMDI3IDUxLjk3NzZWNTEuOTY3MUgxMTMuNTI3VjUxLjk3NzZIMTE1LjAyN1pNMTE1LjAyNyA1MS45ODgyVjUxLjk3NzZIMTEzLjUyN1Y1MS45ODgySDExNS4wMjdaTTExNS4wMjcgNTEuOTk4OFY1MS45ODgySDExMy41MjdWNTEuOTk4OEgxMTUuMDI3Wk0xMTUuMDI3IDUyLjAwOTRWNTEuOTk4OEgxMTMuNTI3VjUyLjAwOTRIMTE1LjAyN1pNMTE1LjAyNyA1Mi4wMlY1Mi4wMDk0SDExMy41MjdWNTIuMDJIMTE1LjAyN1pNMTE1LjAyNyA1Mi4wMzA2VjUyLjAySDExMy41MjdWNTIuMDMwNkgxMTUuMDI3Wk0xMTUuMDI3IDUyLjA0MTJWNTIuMDMwNkgxMTMuNTI3VjUyLjA0MTJIMTE1LjAyN1pNMTE1LjAyNyA1Mi4wNTE4VjUyLjA0MTJIMTEzLjUyN1Y1Mi4wNTE4SDExNS4wMjdaTTExNS4wMjcgNTIuMDYyNFY1Mi4wNTE4SDExMy41MjdWNTIuMDYyNEgxMTUuMDI3Wk0xMTUuMDI3IDUyLjA3M1Y1Mi4wNjI0SDExMy41MjdWNTIuMDczSDExNS4wMjdaTTExNS4wMjcgNTIuMDgzNlY1Mi4wNzNIMTEzLjUyN1Y1Mi4wODM2SDExNS4wMjdaTTExNS4wMjcgNTIuMDk0M1Y1Mi4wODM2SDExMy41MjdWNTIuMDk0M0gxMTUuMDI3Wk0xMTUuMDI3IDUyLjEwNDlWNTIuMDk0M0gxMTMuNTI3VjUyLjEwNDlIMTE1LjAyN1pNMTE1LjAyNyA1Mi4xMTU1VjUyLjEwNDlIMTEzLjUyN1Y1Mi4xMTU1SDExNS4wMjdaTTExNS4wMjcgNTIuMTI2MlY1Mi4xMTU1SDExMy41MjdWNTIuMTI2MkgxMTUuMDI3Wk0xMTUuMDI3IDUyLjEzNjhWNTIuMTI2MkgxMTMuNTI3VjUyLjEzNjhIMTE1LjAyN1pNMTE1LjAyNyA1Mi4xNDc1VjUyLjEzNjhIMTEzLjUyN1Y1Mi4xNDc1SDExNS4wMjdaTTExNS4wMjcgNTIuMTU4MlY1Mi4xNDc1SDExMy41MjdWNTIuMTU4MkgxMTUuMDI3Wk0xMTUuMDI3IDUyLjE2ODhWNTIuMTU4MkgxMTMuNTI3VjUyLjE2ODhIMTE1LjAyN1pNMTE1LjAyNyA1Mi4xNzk1VjUyLjE2ODhIMTEzLjUyN1Y1Mi4xNzk1SDExNS4wMjdaTTExNS4wMjcgNTIuMTkwMlY1Mi4xNzk1SDExMy41MjdWNTIuMTkwMkgxMTUuMDI3Wk0xMTUuMDI3IDUyLjIwMDlWNTIuMTkwMkgxMTMuNTI3VjUyLjIwMDlIMTE1LjAyN1pNMTE1LjAyNyA1Mi4yMTE2VjUyLjIwMDlIMTEzLjUyN1Y1Mi4yMTE2SDExNS4wMjdaTTExNS4wMjcgNTIuMjIyM1Y1Mi4yMTE2SDExMy41MjdWNTIuMjIyM0gxMTUuMDI3Wk0xMTUuMDI3IDUyLjIzM1Y1Mi4yMjIzSDExMy41MjdWNTIuMjMzSDExNS4wMjdaTTExNS4wMjcgNTIuMjQzN1Y1Mi4yMzNIMTEzLjUyN1Y1Mi4yNDM3SDExNS4wMjdaTTExNS4wMjcgNTIuMjU0NFY1Mi4yNDM3SDExMy41MjdWNTIuMjU0NEgxMTUuMDI3Wk0xMTUuMDI3IDUyLjI2NTJWNTIuMjU0NEgxMTMuNTI3VjUyLjI2NTJIMTE1LjAyN1pNMTE1LjAyNyA1Mi4yNzU5VjUyLjI2NTJIMTEzLjUyN1Y1Mi4yNzU5SDExNS4wMjdaTTExNS4wMjcgNTIuMjg2NlY1Mi4yNzU5SDExMy41MjdWNTIuMjg2NkgxMTUuMDI3Wk0xMTUuMDI3IDUyLjI5NzRWNTIuMjg2NkgxMTMuNTI3VjUyLjI5NzRIMTE1LjAyN1pNMTE1LjAyNyA1Mi4zMDgxVjUyLjI5NzRIMTEzLjUyN1Y1Mi4zMDgxSDExNS4wMjdaTTExNS4wMjcgNTIuMzE4OVY1Mi4zMDgxSDExMy41MjdWNTIuMzE4OUgxMTUuMDI3Wk0xMTUuMDI3IDUyLjMyOTZWNTIuMzE4OUgxMTMuNTI3VjUyLjMyOTZIMTE1LjAyN1pNMTE1LjAyNyA1Mi4zNDA0VjUyLjMyOTZIMTEzLjUyN1Y1Mi4zNDA0SDExNS4wMjdaTTExNS4wMjcgNTIuMzUxMlY1Mi4zNDA0SDExMy41MjdWNTIuMzUxMkgxMTUuMDI3Wk0xMTUuMDI3IDUyLjM2MlY1Mi4zNTEySDExMy41MjdWNTIuMzYySDExNS4wMjdaTTExNS4wMjcgNTIuMzcyN1Y1Mi4zNjJIMTEzLjUyN1Y1Mi4zNzI3SDExNS4wMjdaTTExNS4wMjcgNTIuMzgzNVY1Mi4zNzI3SDExMy41MjdWNTIuMzgzNUgxMTUuMDI3Wk0xMTUuMDI3IDUyLjM5NDNWNTIuMzgzNUgxMTMuNTI3VjUyLjM5NDNIMTE1LjAyN1pNMTE1LjAyNyA1Mi40MDUxVjUyLjM5NDNIMTEzLjUyN1Y1Mi40MDUxSDExNS4wMjdaTTExNS4wMjcgNTIuNDE1OVY1Mi40MDUxSDExMy41MjdWNTIuNDE1OUgxMTUuMDI3Wk0xMTUuMDI3IDUyLjQyNjhWNTIuNDE1OUgxMTMuNTI3VjUyLjQyNjhIMTE1LjAyN1pNMTE1LjAyNyA1Mi40Mzc2VjUyLjQyNjhIMTEzLjUyN1Y1Mi40Mzc2SDExNS4wMjdaTTExNS4wMjcgNTIuNDQ4NFY1Mi40Mzc2SDExMy41MjdWNTIuNDQ4NEgxMTUuMDI3Wk0xMTUuMDI3IDUyLjQ1OTJWNTIuNDQ4NEgxMTMuNTI3VjUyLjQ1OTJIMTE1LjAyN1pNMTE1LjAyNyA1Mi40NzAxVjUyLjQ1OTJIMTEzLjUyN1Y1Mi40NzAxSDExNS4wMjdaTTExNS4wMjcgNTIuNDgwOVY1Mi40NzAxSDExMy41MjdWNTIuNDgwOUgxMTUuMDI3Wk0xMTUuMDI3IDUyLjQ5MThWNTIuNDgwOUgxMTMuNTI3VjUyLjQ5MThIMTE1LjAyN1pNMTE1LjAyNyA1Mi41MDI2VjUyLjQ5MThIMTEzLjUyN1Y1Mi41MDI2SDExNS4wMjdaTTExNS4wMjcgNTIuNTEzNVY1Mi41MDI2SDExMy41MjdWNTIuNTEzNUgxMTUuMDI3Wk0xMTUuMDI3IDUyLjUyNDNWNTIuNTEzNUgxMTMuNTI3VjUyLjUyNDNIMTE1LjAyN1pNMTE1LjAyNyA1Mi41MzUyVjUyLjUyNDNIMTEzLjUyN1Y1Mi41MzUySDExNS4wMjdaTTExNS4wMjcgNTIuNTQ2MVY1Mi41MzUySDExMy41MjdWNTIuNTQ2MUgxMTUuMDI3Wk0xMTUuMDI3IDUyLjU1N1Y1Mi41NDYxSDExMy41MjdWNTIuNTU3SDExNS4wMjdaTTExNS4wMjcgNTIuNTY3OVY1Mi41NTdIMTEzLjUyN1Y1Mi41Njc5SDExNS4wMjdaTTExNS4wMjcgNTIuNTc4OFY1Mi41Njc5SDExMy41MjdWNTIuNTc4OEgxMTUuMDI3Wk0xMTUuMDI3IDUyLjU4OTdWNTIuNTc4OEgxMTMuNTI3VjUyLjU4OTdIMTE1LjAyN1pNMTE1LjAyNyA1Mi42MDA2VjUyLjU4OTdIMTEzLjUyN1Y1Mi42MDA2SDExNS4wMjdaTTExNS4wMjcgNTIuNjExNVY1Mi42MDA2SDExMy41MjdWNTIuNjExNUgxMTUuMDI3Wk0xMTUuMDI3IDUyLjYyMjRWNTIuNjExNUgxMTMuNTI3VjUyLjYyMjRIMTE1LjAyN1pNMTE1LjAyNyA1Mi42MzMzVjUyLjYyMjRIMTEzLjUyN1Y1Mi42MzMzSDExNS4wMjdaTTExNS4wMjcgNTIuNjQ0M1Y1Mi42MzMzSDExMy41MjdWNTIuNjQ0M0gxMTUuMDI3Wk0xMTUuMDI3IDUyLjY1NTJWNTIuNjQ0M0gxMTMuNTI3VjUyLjY1NTJIMTE1LjAyN1pNMTE1LjAyNyA1Mi42NjYxVjUyLjY1NTJIMTEzLjUyN1Y1Mi42NjYxSDExNS4wMjdaTTExNS4wMjcgNTIuNjc3MVY1Mi42NjYxSDExMy41MjdWNTIuNjc3MUgxMTUuMDI3Wk0xMTUuMDI3IDUyLjY4OFY1Mi42NzcxSDExMy41MjdWNTIuNjg4SDExNS4wMjdaTTExNS4wMjcgNTIuNjk5VjUyLjY4OEgxMTMuNTI3VjUyLjY5OUgxMTUuMDI3Wk0xMTUuMDI3IDUyLjcxVjUyLjY5OUgxMTMuNTI3VjUyLjcxSDExNS4wMjdaTTExNS4wMjcgNTIuNzIxVjUyLjcxSDExMy41MjdWNTIuNzIxSDExNS4wMjdaTTExNS4wMjcgNTIuNzMxOVY1Mi43MjFIMTEzLjUyN1Y1Mi43MzE5SDExNS4wMjdaTTExNS4wMjcgNTIuNzQyOVY1Mi43MzE5SDExMy41MjdWNTIuNzQyOUgxMTUuMDI3Wk0xMTUuMDI3IDUyLjc1MzlWNTIuNzQyOUgxMTMuNTI3VjUyLjc1MzlIMTE1LjAyN1pNMTE1LjAyNyA1Mi43NjQ5VjUyLjc1MzlIMTEzLjUyN1Y1Mi43NjQ5SDExNS4wMjdaTTExNS4wMjcgNTIuNzc1OVY1Mi43NjQ5SDExMy41MjdWNTIuNzc1OUgxMTUuMDI3Wk0xMTUuMDI3IDUyLjc4NjlWNTIuNzc1OUgxMTMuNTI3VjUyLjc4NjlIMTE1LjAyN1pNMTE1LjAyNyA1Mi43OTc5VjUyLjc4NjlIMTEzLjUyN1Y1Mi43OTc5SDExNS4wMjdaTTExNS4wMjcgNTIuODA4OVY1Mi43OTc5SDExMy41MjdWNTIuODA4OUgxMTUuMDI3Wk0xMTUuMDI3IDUyLjgyVjUyLjgwODlIMTEzLjUyN1Y1Mi44MkgxMTUuMDI3Wk0xMTUuMDI3IDUyLjgzMVY1Mi44MkgxMTMuNTI3VjUyLjgzMUgxMTUuMDI3Wk0xMTUuMDI3IDUyLjg0MlY1Mi44MzFIMTEzLjUyN1Y1Mi44NDJIMTE1LjAyN1pNMTE1LjAyNyA1Mi44NTMxVjUyLjg0MkgxMTMuNTI3VjUyLjg1MzFIMTE1LjAyN1pNMTE1LjAyNyA1Mi44NjQxVjUyLjg1MzFIMTEzLjUyN1Y1Mi44NjQxSDExNS4wMjdaTTExNS4wMjcgNTIuODc1MlY1Mi44NjQxSDExMy41MjdWNTIuODc1MkgxMTUuMDI3Wk0xMTUuMDI3IDUyLjg4NjNWNTIuODc1MkgxMTMuNTI3VjUyLjg4NjNIMTE1LjAyN1pNMTE1LjAyNyA1Mi44OTczVjUyLjg4NjNIMTEzLjUyN1Y1Mi44OTczSDExNS4wMjdaTTExNS4wMjcgNTIuOTA4NFY1Mi44OTczSDExMy41MjdWNTIuOTA4NEgxMTUuMDI3Wk0xMTUuMDI3IDUyLjkxOTVWNTIuOTA4NEgxMTMuNTI3VjUyLjkxOTVIMTE1LjAyN1pNMTE1LjAyNyA1Mi45MzA2VjUyLjkxOTVIMTEzLjUyN1Y1Mi45MzA2SDExNS4wMjdaTTExNS4wMjcgNTIuOTQxNlY1Mi45MzA2SDExMy41MjdWNTIuOTQxNkgxMTUuMDI3Wk0xMTUuMDI3IDUyLjk1MjdWNTIuOTQxNkgxMTMuNTI3VjUyLjk1MjdIMTE1LjAyN1pNMTE1LjAyNyA1Mi45NjM4VjUyLjk1MjdIMTEzLjUyN1Y1Mi45NjM4SDExNS4wMjdaTTExNS4wMjcgNTIuOTc1VjUyLjk2MzhIMTEzLjUyN1Y1Mi45NzVIMTE1LjAyN1pNMTE1LjAyNyA1Mi45ODYxVjUyLjk3NUgxMTMuNTI3VjUyLjk4NjFIMTE1LjAyN1pNMTE1LjAyNyA1Mi45OTcyVjUyLjk4NjFIMTEzLjUyN1Y1Mi45OTcySDExNS4wMjdaTTExNS4wMjcgNTMuMDA4M1Y1Mi45OTcySDExMy41MjdWNTMuMDA4M0gxMTUuMDI3Wk0xMTUuMDI3IDUzLjAxOTRWNTMuMDA4M0gxMTMuNTI3VjUzLjAxOTRIMTE1LjAyN1pNMTE1LjAyNyA1My4wMzA2VjUzLjAxOTRIMTEzLjUyN1Y1My4wMzA2SDExNS4wMjdaTTExNS4wMjcgNTMuMDQxN1Y1My4wMzA2SDExMy41MjdWNTMuMDQxN0gxMTUuMDI3Wk0xMTUuMDI3IDUzLjA1MjlWNTMuMDQxN0gxMTMuNTI3VjUzLjA1MjlIMTE1LjAyN1pNMTE1LjAyNyA1My4wNjRWNTMuMDUyOUgxMTMuNTI3VjUzLjA2NEgxMTUuMDI3Wk0xMTUuMDI3IDUzLjA3NTJWNTMuMDY0SDExMy41MjdWNTMuMDc1MkgxMTUuMDI3Wk0xMTUuMDI3IDUzLjA4NjRWNTMuMDc1MkgxMTMuNTI3VjUzLjA4NjRIMTE1LjAyN1pNMTE1LjAyNyA1My4wOTc1VjUzLjA4NjRIMTEzLjUyN1Y1My4wOTc1SDExNS4wMjdaTTExNS4wMjcgNTMuMTA4N1Y1My4wOTc1SDExMy41MjdWNTMuMTA4N0gxMTUuMDI3Wk0xMTUuMDI3IDUzLjExOTlWNTMuMTA4N0gxMTMuNTI3VjUzLjExOTlIMTE1LjAyN1pNMTE1LjAyNyA1My4xMzExVjUzLjExOTlIMTEzLjUyN1Y1My4xMzExSDExNS4wMjdaTTExNS4wMjcgNTMuMTQyM1Y1My4xMzExSDExMy41MjdWNTMuMTQyM0gxMTUuMDI3Wk0xMTUuMDI3IDUzLjE1MzVWNTMuMTQyM0gxMTMuNTI3VjUzLjE1MzVIMTE1LjAyN1pNMTE1LjAyNyA1My4xNjQ3VjUzLjE1MzVIMTEzLjUyN1Y1My4xNjQ3SDExNS4wMjdaTTExNS4wMjcgNTMuMTc1OVY1My4xNjQ3SDExMy41MjdWNTMuMTc1OUgxMTUuMDI3Wk0xMTUuMDI3IDUzLjE4NzFWNTMuMTc1OUgxMTMuNTI3VjUzLjE4NzFIMTE1LjAyN1pNMTE1LjAyNyA1My4xOTg0VjUzLjE4NzFIMTEzLjUyN1Y1My4xOTg0SDExNS4wMjdaTTExNS4wMjcgNTMuMjA5NlY1My4xOTg0SDExMy41MjdWNTMuMjA5NkgxMTUuMDI3Wk0xMTUuMDI3IDUzLjIyMDhWNTMuMjA5NkgxMTMuNTI3VjUzLjIyMDhIMTE1LjAyN1pNMTE1LjAyNyA1My4yMzIxVjUzLjIyMDhIMTEzLjUyN1Y1My4yMzIxSDExNS4wMjdaTTExNS4wMjcgNTMuMjQzM1Y1My4yMzIxSDExMy41MjdWNTMuMjQzM0gxMTUuMDI3Wk0xMTUuMDI3IDUzLjI1NDZWNTMuMjQzM0gxMTMuNTI3VjUzLjI1NDZIMTE1LjAyN1pNMTE1LjAyNyA1My4yNjU5VjUzLjI1NDZIMTEzLjUyN1Y1My4yNjU5SDExNS4wMjdaTTExNS4wMjcgNTMuMjc3MVY1My4yNjU5SDExMy41MjdWNTMuMjc3MUgxMTUuMDI3Wk0xMTUuMDI3IDUzLjI4ODRWNTMuMjc3MUgxMTMuNTI3VjUzLjI4ODRIMTE1LjAyN1pNMTE1LjAyNyA1My4yOTk3VjUzLjI4ODRIMTEzLjUyN1Y1My4yOTk3SDExNS4wMjdaTTExNS4wMjcgNTMuMzExVjUzLjI5OTdIMTEzLjUyN1Y1My4zMTFIMTE1LjAyN1pNMTE1LjAyNyA1My4zMjIyVjUzLjMxMUgxMTMuNTI3VjUzLjMyMjJIMTE1LjAyN1pNMTE1LjAyNyA1My4zMzM1VjUzLjMyMjJIMTEzLjUyN1Y1My4zMzM1SDExNS4wMjdaTTExNS4wMjcgNTMuMzQ0OFY1My4zMzM1SDExMy41MjdWNTMuMzQ0OEgxMTUuMDI3Wk0xMTUuMDI3IDUzLjM1NjJWNTMuMzQ0OEgxMTMuNTI3VjUzLjM1NjJIMTE1LjAyN1pNMTE1LjAyNyA1My4zNjc1VjUzLjM1NjJIMTEzLjUyN1Y1My4zNjc1SDExNS4wMjdaTTExNS4wMjcgNTMuMzc4OFY1My4zNjc1SDExMy41MjdWNTMuMzc4OEgxMTUuMDI3Wk0xMTUuMDI3IDUzLjM5MDFWNTMuMzc4OEgxMTMuNTI3VjUzLjM5MDFIMTE1LjAyN1pNMTE1LjAyNyA1My40MDE1VjUzLjM5MDFIMTEzLjUyN1Y1My40MDE1SDExNS4wMjdaTTExNS4wMjcgNTMuNDEyOFY1My40MDE1SDExMy41MjdWNTMuNDEyOEgxMTUuMDI3Wk0xMTUuMDI3IDUzLjQyNDFWNTMuNDEyOEgxMTMuNTI3VjUzLjQyNDFIMTE1LjAyN1pNMTE1LjAyNyA1My40MzU1VjUzLjQyNDFIMTEzLjUyN1Y1My40MzU1SDExNS4wMjdaTTExNS4wMjcgNTMuNDQ2OFY1My40MzU1SDExMy41MjdWNTMuNDQ2OEgxMTUuMDI3Wk0xMTUuMDI3IDUzLjQ1ODJWNTMuNDQ2OEgxMTMuNTI3VjUzLjQ1ODJIMTE1LjAyN1pNMTE1LjAyNyA1My40Njk2VjUzLjQ1ODJIMTEzLjUyN1Y1My40Njk2SDExNS4wMjdaTTExNS4wMjcgNTMuNDgwOVY1My40Njk2SDExMy41MjdWNTMuNDgwOUgxMTUuMDI3Wk0xMTUuMDI3IDUzLjQ5MjNWNTMuNDgwOUgxMTMuNTI3VjUzLjQ5MjNIMTE1LjAyN1pNMTE1LjAyNyA1My41MDM3VjUzLjQ5MjNIMTEzLjUyN1Y1My41MDM3SDExNS4wMjdaTTExNS4wMjcgNTMuNTE1MVY1My41MDM3SDExMy41MjdWNTMuNTE1MUgxMTUuMDI3Wk0xMTUuMDI3IDUzLjUyNjVWNTMuNTE1MUgxMTMuNTI3VjUzLjUyNjVIMTE1LjAyN1pNMTE1LjAyNyA1My41Mzc5VjUzLjUyNjVIMTEzLjUyN1Y1My41Mzc5SDExNS4wMjdaTTExNS4wMjcgNTMuNTQ5M1Y1My41Mzc5SDExMy41MjdWNTMuNTQ5M0gxMTUuMDI3Wk0xMTUuMDI3IDUzLjU2MDdWNTMuNTQ5M0gxMTMuNTI3VjUzLjU2MDdIMTE1LjAyN1pNMTE1LjAyNyA1My41NzIyVjUzLjU2MDdIMTEzLjUyN1Y1My41NzIySDExNS4wMjdaTTExNS4wMjcgNTMuNTgzNlY1My41NzIySDExMy41MjdWNTMuNTgzNkgxMTUuMDI3Wk0xMTUuMDI3IDUzLjU5NVY1My41ODM2SDExMy41MjdWNTMuNTk1SDExNS4wMjdaTTExNS4wMjcgNTMuNjA2NFY1My41OTVIMTEzLjUyN1Y1My42MDY0SDExNS4wMjdaTTExNS4wMjcgNTMuNjE3OVY1My42MDY0SDExMy41MjdWNTMuNjE3OUgxMTUuMDI3Wk0xMTUuMDI3IDUzLjYyOTNWNTMuNjE3OUgxMTMuNTI3VjUzLjYyOTNIMTE1LjAyN1pNMTE1LjAyNyA1My42NDA4VjUzLjYyOTNIMTEzLjUyN1Y1My42NDA4SDExNS4wMjdaTTExNS4wMjcgNTMuNjUyM1Y1My42NDA4SDExMy41MjdWNTMuNjUyM0gxMTUuMDI3Wk0xMTUuMDI3IDUzLjY2MzdWNTMuNjUyM0gxMTMuNTI3VjUzLjY2MzdIMTE1LjAyN1pNMTE1LjAyNyA1My42NzUyVjUzLjY2MzdIMTEzLjUyN1Y1My42NzUySDExNS4wMjdaTTExNS4wMjcgNTMuNjg2N1Y1My42NzUySDExMy41MjdWNTMuNjg2N0gxMTUuMDI3Wk0xMTUuMDI3IDUzLjY5ODJWNTMuNjg2N0gxMTMuNTI3VjUzLjY5ODJIMTE1LjAyN1pNMTE1LjAyNyA1My43MDk3VjUzLjY5ODJIMTEzLjUyN1Y1My43MDk3SDExNS4wMjdaTTExNS4wMjcgNTMuNzIxMlY1My43MDk3SDExMy41MjdWNTMuNzIxMkgxMTUuMDI3Wk0xMTUuMDI3IDUzLjczMjdWNTMuNzIxMkgxMTMuNTI3VjUzLjczMjdIMTE1LjAyN1pNMTE1LjAyNyA1My43NDQyVjUzLjczMjdIMTEzLjUyN1Y1My43NDQySDExNS4wMjdaTTExNS4wMjcgNTMuNzU1N1Y1My43NDQySDExMy41MjdWNTMuNzU1N0gxMTUuMDI3Wk0xMTUuMDI3IDUzLjc2NzJWNTMuNzU1N0gxMTMuNTI3VjUzLjc2NzJIMTE1LjAyN1pNMTE1LjAyNyA1My43Nzg3VjUzLjc2NzJIMTEzLjUyN1Y1My43Nzg3SDExNS4wMjdaTTExNS4wMjcgNTMuNzkwM1Y1My43Nzg3SDExMy41MjdWNTMuNzkwM0gxMTUuMDI3Wk0xMTUuMDI3IDUzLjgwMThWNTMuNzkwM0gxMTMuNTI3VjUzLjgwMThIMTE1LjAyN1pNMTE1LjAyNyA1My44MTM0VjUzLjgwMThIMTEzLjUyN1Y1My44MTM0SDExNS4wMjdaTTExNS4wMjcgNTMuODI0OVY1My44MTM0SDExMy41MjdWNTMuODI0OUgxMTUuMDI3Wk0xMTUuMDI3IDUzLjgzNjVWNTMuODI0OUgxMTMuNTI3VjUzLjgzNjVIMTE1LjAyN1pNMTE1LjAyNyA1My44NDhWNTMuODM2NUgxMTMuNTI3VjUzLjg0OEgxMTUuMDI3Wk0xMTUuMDI3IDUzLjg1OTZWNTMuODQ4SDExMy41MjdWNTMuODU5NkgxMTUuMDI3Wk0xMTUuMDI3IDUzLjg3MTJWNTMuODU5NkgxMTMuNTI3VjUzLjg3MTJIMTE1LjAyN1pNMTE1LjAyNyA1My44ODI3VjUzLjg3MTJIMTEzLjUyN1Y1My44ODI3SDExNS4wMjdaTTExNS4wMjcgNTMuODk0M1Y1My44ODI3SDExMy41MjdWNTMuODk0M0gxMTUuMDI3Wk0xMTUuMDI3IDUzLjkwNTlWNTMuODk0M0gxMTMuNTI3VjUzLjkwNTlIMTE1LjAyN1pNMTE1LjAyNyA1My45MTc1VjUzLjkwNTlIMTEzLjUyN1Y1My45MTc1SDExNS4wMjdaTTExNS4wMjcgNTMuOTI5MVY1My45MTc1SDExMy41MjdWNTMuOTI5MUgxMTUuMDI3Wk0xMTUuMDI3IDUzLjk0MDdWNTMuOTI5MUgxMTMuNTI3VjUzLjk0MDdIMTE1LjAyN1pNMTE1LjAyNyA1My45NTI0VjUzLjk0MDdIMTEzLjUyN1Y1My45NTI0SDExNS4wMjdaTTExNS4wMjcgNTMuOTY0VjUzLjk1MjRIMTEzLjUyN1Y1My45NjRIMTE1LjAyN1pNMTE1LjAyNyA1My45NzU2VjUzLjk2NEgxMTMuNTI3VjUzLjk3NTZIMTE1LjAyN1pNMTE1LjAyNyA1My45ODcyVjUzLjk3NTZIMTEzLjUyN1Y1My45ODcySDExNS4wMjdaTTExNS4wMjcgNTMuOTk4OVY1My45ODcySDExMy41MjdWNTMuOTk4OUgxMTUuMDI3Wk0xMTUuMDI3IDU0LjAxMDVWNTMuOTk4OUgxMTMuNTI3VjU0LjAxMDVIMTE1LjAyN1pNMTE1LjAyNyA1NC4wMjIyVjU0LjAxMDVIMTEzLjUyN1Y1NC4wMjIySDExNS4wMjdaTTExNS4wMjcgNTQuMDMzOFY1NC4wMjIySDExMy41MjdWNTQuMDMzOEgxMTUuMDI3Wk0xMTUuMDI3IDU0LjA0NTVWNTQuMDMzOEgxMTMuNTI3VjU0LjA0NTVIMTE1LjAyN1pNMTE1LjAyNyA1NC4wNTcyVjU0LjA0NTVIMTEzLjUyN1Y1NC4wNTcySDExNS4wMjdaTTExNS4wMjcgNTQuMDY4OFY1NC4wNTcySDExMy41MjdWNTQuMDY4OEgxMTUuMDI3Wk0xMTUuMDI3IDU0LjA4MDVWNTQuMDY4OEgxMTMuNTI3VjU0LjA4MDVIMTE1LjAyN1pNMTE1LjAyNyA1NC4wOTIyVjU0LjA4MDVIMTEzLjUyN1Y1NC4wOTIySDExNS4wMjdaTTExNS4wMjcgNTQuMTAzOVY1NC4wOTIySDExMy41MjdWNTQuMTAzOUgxMTUuMDI3Wk0xMTUuMDI3IDU0LjExNTZWNTQuMTAzOUgxMTMuNTI3VjU0LjExNTZIMTE1LjAyN1pNMTE1LjAyNyA1NC4xMjczVjU0LjExNTZIMTEzLjUyN1Y1NC4xMjczSDExNS4wMjdaTTExNS4wMjcgNTQuMTM5VjU0LjEyNzNIMTEzLjUyN1Y1NC4xMzlIMTE1LjAyN1pNMTE1LjAyNyA1NC4xNTA3VjU0LjEzOUgxMTMuNTI3VjU0LjE1MDdIMTE1LjAyN1pNMTE1LjAyNyA1NC4xNjI0VjU0LjE1MDdIMTEzLjUyN1Y1NC4xNjI0SDExNS4wMjdaTTExNS4wMjcgNTQuMTc0MlY1NC4xNjI0SDExMy41MjdWNTQuMTc0MkgxMTUuMDI3Wk0xMTUuMDI3IDU0LjE4NTlWNTQuMTc0MkgxMTMuNTI3VjU0LjE4NTlIMTE1LjAyN1pNMTE1LjAyNyA1NC4xOTc2VjU0LjE4NTlIMTEzLjUyN1Y1NC4xOTc2SDExNS4wMjdaTTExNS4wMjcgNTQuMjA5NFY1NC4xOTc2SDExMy41MjdWNTQuMjA5NEgxMTUuMDI3Wk0xMTUuMDI3IDU0LjIyMTFWNTQuMjA5NEgxMTMuNTI3VjU0LjIyMTFIMTE1LjAyN1pNMTE1LjAyNyA1NC4yMzI5VjU0LjIyMTFIMTEzLjUyN1Y1NC4yMzI5SDExNS4wMjdaTTExNS4wMjcgNTQuMjQ0N1Y1NC4yMzI5SDExMy41MjdWNTQuMjQ0N0gxMTUuMDI3Wk0xMTUuMDI3IDU0LjI1NjRWNTQuMjQ0N0gxMTMuNTI3VjU0LjI1NjRIMTE1LjAyN1pNMTE1LjAyNyA1NC4yNjgyVjU0LjI1NjRIMTEzLjUyN1Y1NC4yNjgySDExNS4wMjdaTTExNS4wMjcgNTQuMjhWNTQuMjY4MkgxMTMuNTI3VjU0LjI4SDExNS4wMjdaTTExNS4wMjcgNTQuMjkxOFY1NC4yOEgxMTMuNTI3VjU0LjI5MThIMTE1LjAyN1pNMTE1LjAyNyA1NC4zMDM2VjU0LjI5MThIMTEzLjUyN1Y1NC4zMDM2SDExNS4wMjdaTTExNS4wMjcgNTQuMzE1NFY1NC4zMDM2SDExMy41MjdWNTQuMzE1NEgxMTUuMDI3Wk0xMTUuMDI3IDU0LjMyNzJWNTQuMzE1NEgxMTMuNTI3VjU0LjMyNzJIMTE1LjAyN1pNMTE1LjAyNyA1NC4zMzlWNTQuMzI3MkgxMTMuNTI3VjU0LjMzOUgxMTUuMDI3Wk0xMTUuMDI3IDU0LjM1MDhWNTQuMzM5SDExMy41MjdWNTQuMzUwOEgxMTUuMDI3Wk0xMTUuMDI3IDU0LjM2MjZWNTQuMzUwOEgxMTMuNTI3VjU0LjM2MjZIMTE1LjAyN1pNMTE1LjAyNyA1NC4zNzQ0VjU0LjM2MjZIMTEzLjUyN1Y1NC4zNzQ0SDExNS4wMjdaTTExNS4wMjcgNTQuMzg2M1Y1NC4zNzQ0SDExMy41MjdWNTQuMzg2M0gxMTUuMDI3Wk0xMTUuMDI3IDU0LjM5ODFWNTQuMzg2M0gxMTMuNTI3VjU0LjM5ODFIMTE1LjAyN1pNMTE1LjAyNyA1NC40MVY1NC4zOTgxSDExMy41MjdWNTQuNDFIMTE1LjAyN1pNMTE1LjAyNyA1NC40MjE4VjU0LjQxSDExMy41MjdWNTQuNDIxOEgxMTUuMDI3Wk0xMTUuMDI3IDU0LjQzMzdWNTQuNDIxOEgxMTMuNTI3VjU0LjQzMzdIMTE1LjAyN1pNMTE1LjAyNyA1NC40NDU1VjU0LjQzMzdIMTEzLjUyN1Y1NC40NDU1SDExNS4wMjdaTTExNS4wMjcgNTQuNDU3NFY1NC40NDU1SDExMy41MjdWNTQuNDU3NEgxMTUuMDI3Wk0xMTUuMDI3IDU0LjQ2OTNWNTQuNDU3NEgxMTMuNTI3VjU0LjQ2OTNIMTE1LjAyN1pNMTEyLjc3NyA1NS4yMTkzSDExNC4yNzdWNTMuNzE5M0gxMTIuNzc3VjU1LjIxOTNaTTExMi4wMjcgNTQuNDU3NFY1NC40NjkzSDExMy41MjdWNTQuNDU3NEgxMTIuMDI3Wk0xMTIuMDI3IDU0LjQ0NTVWNTQuNDU3NEgxMTMuNTI3VjU0LjQ0NTVIMTEyLjAyN1pNMTEyLjAyNyA1NC40MzM3VjU0LjQ0NTVIMTEzLjUyN1Y1NC40MzM3SDExMi4wMjdaTTExMi4wMjcgNTQuNDIxOFY1NC40MzM3SDExMy41MjdWNTQuNDIxOEgxMTIuMDI3Wk0xMTIuMDI3IDU0LjQxVjU0LjQyMThIMTEzLjUyN1Y1NC40MUgxMTIuMDI3Wk0xMTIuMDI3IDU0LjM5ODFWNTQuNDFIMTEzLjUyN1Y1NC4zOTgxSDExMi4wMjdaTTExMi4wMjcgNTQuMzg2M1Y1NC4zOTgxSDExMy41MjdWNTQuMzg2M0gxMTIuMDI3Wk0xMTIuMDI3IDU0LjM3NDRWNTQuMzg2M0gxMTMuNTI3VjU0LjM3NDRIMTEyLjAyN1pNMTEyLjAyNyA1NC4zNjI2VjU0LjM3NDRIMTEzLjUyN1Y1NC4zNjI2SDExMi4wMjdaTTExMi4wMjcgNTQuMzUwOFY1NC4zNjI2SDExMy41MjdWNTQuMzUwOEgxMTIuMDI3Wk0xMTIuMDI3IDU0LjMzOVY1NC4zNTA4SDExMy41MjdWNTQuMzM5SDExMi4wMjdaTTExMi4wMjcgNTQuMzI3MlY1NC4zMzlIMTEzLjUyN1Y1NC4zMjcySDExMi4wMjdaTTExMi4wMjcgNTQuMzE1NFY1NC4zMjcySDExMy41MjdWNTQuMzE1NEgxMTIuMDI3Wk0xMTIuMDI3IDU0LjMwMzZWNTQuMzE1NEgxMTMuNTI3VjU0LjMwMzZIMTEyLjAyN1pNMTEyLjAyNyA1NC4yOTE4VjU0LjMwMzZIMTEzLjUyN1Y1NC4yOTE4SDExMi4wMjdaTTExMi4wMjcgNTQuMjhWNTQuMjkxOEgxMTMuNTI3VjU0LjI4SDExMi4wMjdaTTExMi4wMjcgNTQuMjY4MlY1NC4yOEgxMTMuNTI3VjU0LjI2ODJIMTEyLjAyN1pNMTEyLjAyNyA1NC4yNTY0VjU0LjI2ODJIMTEzLjUyN1Y1NC4yNTY0SDExMi4wMjdaTTExMi4wMjcgNTQuMjQ0N1Y1NC4yNTY0SDExMy41MjdWNTQuMjQ0N0gxMTIuMDI3Wk0xMTIuMDI3IDU0LjIzMjlWNTQuMjQ0N0gxMTMuNTI3VjU0LjIzMjlIMTEyLjAyN1pNMTEyLjAyNyA1NC4yMjExVjU0LjIzMjlIMTEzLjUyN1Y1NC4yMjExSDExMi4wMjdaTTExMi4wMjcgNTQuMjA5NFY1NC4yMjExSDExMy41MjdWNTQuMjA5NEgxMTIuMDI3Wk0xMTIuMDI3IDU0LjE5NzZWNTQuMjA5NEgxMTMuNTI3VjU0LjE5NzZIMTEyLjAyN1pNMTEyLjAyNyA1NC4xODU5VjU0LjE5NzZIMTEzLjUyN1Y1NC4xODU5SDExMi4wMjdaTTExMi4wMjcgNTQuMTc0MlY1NC4xODU5SDExMy41MjdWNTQuMTc0MkgxMTIuMDI3Wk0xMTIuMDI3IDU0LjE2MjRWNTQuMTc0MkgxMTMuNTI3VjU0LjE2MjRIMTEyLjAyN1pNMTEyLjAyNyA1NC4xNTA3VjU0LjE2MjRIMTEzLjUyN1Y1NC4xNTA3SDExMi4wMjdaTTExMi4wMjcgNTQuMTM5VjU0LjE1MDdIMTEzLjUyN1Y1NC4xMzlIMTEyLjAyN1pNMTEyLjAyNyA1NC4xMjczVjU0LjEzOUgxMTMuNTI3VjU0LjEyNzNIMTEyLjAyN1pNMTEyLjAyNyA1NC4xMTU2VjU0LjEyNzNIMTEzLjUyN1Y1NC4xMTU2SDExMi4wMjdaTTExMi4wMjcgNTQuMTAzOVY1NC4xMTU2SDExMy41MjdWNTQuMTAzOUgxMTIuMDI3Wk0xMTIuMDI3IDU0LjA5MjJWNTQuMTAzOUgxMTMuNTI3VjU0LjA5MjJIMTEyLjAyN1pNMTEyLjAyNyA1NC4wODA1VjU0LjA5MjJIMTEzLjUyN1Y1NC4wODA1SDExMi4wMjdaTTExMi4wMjcgNTQuMDY4OFY1NC4wODA1SDExMy41MjdWNTQuMDY4OEgxMTIuMDI3Wk0xMTIuMDI3IDU0LjA1NzJWNTQuMDY4OEgxMTMuNTI3VjU0LjA1NzJIMTEyLjAyN1pNMTEyLjAyNyA1NC4wNDU1VjU0LjA1NzJIMTEzLjUyN1Y1NC4wNDU1SDExMi4wMjdaTTExMi4wMjcgNTQuMDMzOFY1NC4wNDU1SDExMy41MjdWNTQuMDMzOEgxMTIuMDI3Wk0xMTIuMDI3IDU0LjAyMjJWNTQuMDMzOEgxMTMuNTI3VjU0LjAyMjJIMTEyLjAyN1pNMTEyLjAyNyA1NC4wMTA1VjU0LjAyMjJIMTEzLjUyN1Y1NC4wMTA1SDExMi4wMjdaTTExMi4wMjcgNTMuOTk4OVY1NC4wMTA1SDExMy41MjdWNTMuOTk4OUgxMTIuMDI3Wk0xMTIuMDI3IDUzLjk4NzJWNTMuOTk4OUgxMTMuNTI3VjUzLjk4NzJIMTEyLjAyN1pNMTEyLjAyNyA1My45NzU2VjUzLjk4NzJIMTEzLjUyN1Y1My45NzU2SDExMi4wMjdaTTExMi4wMjcgNTMuOTY0VjUzLjk3NTZIMTEzLjUyN1Y1My45NjRIMTEyLjAyN1pNMTEyLjAyNyA1My45NTI0VjUzLjk2NEgxMTMuNTI3VjUzLjk1MjRIMTEyLjAyN1pNMTEyLjAyNyA1My45NDA3VjUzLjk1MjRIMTEzLjUyN1Y1My45NDA3SDExMi4wMjdaTTExMi4wMjcgNTMuOTI5MVY1My45NDA3SDExMy41MjdWNTMuOTI5MUgxMTIuMDI3Wk0xMTIuMDI3IDUzLjkxNzVWNTMuOTI5MUgxMTMuNTI3VjUzLjkxNzVIMTEyLjAyN1pNMTEyLjAyNyA1My45MDU5VjUzLjkxNzVIMTEzLjUyN1Y1My45MDU5SDExMi4wMjdaTTExMi4wMjcgNTMuODk0M1Y1My45MDU5SDExMy41MjdWNTMuODk0M0gxMTIuMDI3Wk0xMTIuMDI3IDUzLjg4MjdWNTMuODk0M0gxMTMuNTI3VjUzLjg4MjdIMTEyLjAyN1pNMTEyLjAyNyA1My44NzEyVjUzLjg4MjdIMTEzLjUyN1Y1My44NzEySDExMi4wMjdaTTExMi4wMjcgNTMuODU5NlY1My44NzEySDExMy41MjdWNTMuODU5NkgxMTIuMDI3Wk0xMTIuMDI3IDUzLjg0OFY1My44NTk2SDExMy41MjdWNTMuODQ4SDExMi4wMjdaTTExMi4wMjcgNTMuODM2NVY1My44NDhIMTEzLjUyN1Y1My44MzY1SDExMi4wMjdaTTExMi4wMjcgNTMuODI0OVY1My44MzY1SDExMy41MjdWNTMuODI0OUgxMTIuMDI3Wk0xMTIuMDI3IDUzLjgxMzRWNTMuODI0OUgxMTMuNTI3VjUzLjgxMzRIMTEyLjAyN1pNMTEyLjAyNyA1My44MDE4VjUzLjgxMzRIMTEzLjUyN1Y1My44MDE4SDExMi4wMjdaTTExMi4wMjcgNTMuNzkwM1Y1My44MDE4SDExMy41MjdWNTMuNzkwM0gxMTIuMDI3Wk0xMTIuMDI3IDUzLjc3ODdWNTMuNzkwM0gxMTMuNTI3VjUzLjc3ODdIMTEyLjAyN1pNMTEyLjAyNyA1My43NjcyVjUzLjc3ODdIMTEzLjUyN1Y1My43NjcySDExMi4wMjdaTTExMi4wMjcgNTMuNzU1N1Y1My43NjcySDExMy41MjdWNTMuNzU1N0gxMTIuMDI3Wk0xMTIuMDI3IDUzLjc0NDJWNTMuNzU1N0gxMTMuNTI3VjUzLjc0NDJIMTEyLjAyN1pNMTEyLjAyNyA1My43MzI3VjUzLjc0NDJIMTEzLjUyN1Y1My43MzI3SDExMi4wMjdaTTExMi4wMjcgNTMuNzIxMlY1My43MzI3SDExMy41MjdWNTMuNzIxMkgxMTIuMDI3Wk0xMTIuMDI3IDUzLjcwOTdWNTMuNzIxMkgxMTMuNTI3VjUzLjcwOTdIMTEyLjAyN1pNMTEyLjAyNyA1My42OTgyVjUzLjcwOTdIMTEzLjUyN1Y1My42OTgySDExMi4wMjdaTTExMi4wMjcgNTMuNjg2N1Y1My42OTgySDExMy41MjdWNTMuNjg2N0gxMTIuMDI3Wk0xMTIuMDI3IDUzLjY3NTJWNTMuNjg2N0gxMTMuNTI3VjUzLjY3NTJIMTEyLjAyN1pNMTEyLjAyNyA1My42NjM3VjUzLjY3NTJIMTEzLjUyN1Y1My42NjM3SDExMi4wMjdaTTExMi4wMjcgNTMuNjUyM1Y1My42NjM3SDExMy41MjdWNTMuNjUyM0gxMTIuMDI3Wk0xMTIuMDI3IDUzLjY0MDhWNTMuNjUyM0gxMTMuNTI3VjUzLjY0MDhIMTEyLjAyN1pNMTEyLjAyNyA1My42MjkzVjUzLjY0MDhIMTEzLjUyN1Y1My42MjkzSDExMi4wMjdaTTExMi4wMjcgNTMuNjE3OVY1My42MjkzSDExMy41MjdWNTMuNjE3OUgxMTIuMDI3Wk0xMTIuMDI3IDUzLjYwNjRWNTMuNjE3OUgxMTMuNTI3VjUzLjYwNjRIMTEyLjAyN1pNMTEyLjAyNyA1My41OTVWNTMuNjA2NEgxMTMuNTI3VjUzLjU5NUgxMTIuMDI3Wk0xMTIuMDI3IDUzLjU4MzZWNTMuNTk1SDExMy41MjdWNTMuNTgzNkgxMTIuMDI3Wk0xMTIuMDI3IDUzLjU3MjJWNTMuNTgzNkgxMTMuNTI3VjUzLjU3MjJIMTEyLjAyN1pNMTEyLjAyNyA1My41NjA3VjUzLjU3MjJIMTEzLjUyN1Y1My41NjA3SDExMi4wMjdaTTExMi4wMjcgNTMuNTQ5M1Y1My41NjA3SDExMy41MjdWNTMuNTQ5M0gxMTIuMDI3Wk0xMTIuMDI3IDUzLjUzNzlWNTMuNTQ5M0gxMTMuNTI3VjUzLjUzNzlIMTEyLjAyN1pNMTEyLjAyNyA1My41MjY1VjUzLjUzNzlIMTEzLjUyN1Y1My41MjY1SDExMi4wMjdaTTExMi4wMjcgNTMuNTE1MVY1My41MjY1SDExMy41MjdWNTMuNTE1MUgxMTIuMDI3Wk0xMTIuMDI3IDUzLjUwMzdWNTMuNTE1MUgxMTMuNTI3VjUzLjUwMzdIMTEyLjAyN1pNMTEyLjAyNyA1My40OTIzVjUzLjUwMzdIMTEzLjUyN1Y1My40OTIzSDExMi4wMjdaTTExMi4wMjcgNTMuNDgwOVY1My40OTIzSDExMy41MjdWNTMuNDgwOUgxMTIuMDI3Wk0xMTIuMDI3IDUzLjQ2OTZWNTMuNDgwOUgxMTMuNTI3VjUzLjQ2OTZIMTEyLjAyN1pNMTEyLjAyNyA1My40NTgyVjUzLjQ2OTZIMTEzLjUyN1Y1My40NTgySDExMi4wMjdaTTExMi4wMjcgNTMuNDQ2OFY1My40NTgySDExMy41MjdWNTMuNDQ2OEgxMTIuMDI3Wk0xMTIuMDI3IDUzLjQzNTVWNTMuNDQ2OEgxMTMuNTI3VjUzLjQzNTVIMTEyLjAyN1pNMTEyLjAyNyA1My40MjQxVjUzLjQzNTVIMTEzLjUyN1Y1My40MjQxSDExMi4wMjdaTTExMi4wMjcgNTMuNDEyOFY1My40MjQxSDExMy41MjdWNTMuNDEyOEgxMTIuMDI3Wk0xMTIuMDI3IDUzLjQwMTVWNTMuNDEyOEgxMTMuNTI3VjUzLjQwMTVIMTEyLjAyN1pNMTEyLjAyNyA1My4zOTAxVjUzLjQwMTVIMTEzLjUyN1Y1My4zOTAxSDExMi4wMjdaTTExMi4wMjcgNTMuMzc4OFY1My4zOTAxSDExMy41MjdWNTMuMzc4OEgxMTIuMDI3Wk0xMTIuMDI3IDUzLjM2NzVWNTMuMzc4OEgxMTMuNTI3VjUzLjM2NzVIMTEyLjAyN1pNMTEyLjAyNyA1My4zNTYyVjUzLjM2NzVIMTEzLjUyN1Y1My4zNTYySDExMi4wMjdaTTExMi4wMjcgNTMuMzQ0OFY1My4zNTYySDExMy41MjdWNTMuMzQ0OEgxMTIuMDI3Wk0xMTIuMDI3IDUzLjMzMzVWNTMuMzQ0OEgxMTMuNTI3VjUzLjMzMzVIMTEyLjAyN1pNMTEyLjAyNyA1My4zMjIyVjUzLjMzMzVIMTEzLjUyN1Y1My4zMjIySDExMi4wMjdaTTExMi4wMjcgNTMuMzExVjUzLjMyMjJIMTEzLjUyN1Y1My4zMTFIMTEyLjAyN1pNMTEyLjAyNyA1My4yOTk3VjUzLjMxMUgxMTMuNTI3VjUzLjI5OTdIMTEyLjAyN1pNMTEyLjAyNyA1My4yODg0VjUzLjI5OTdIMTEzLjUyN1Y1My4yODg0SDExMi4wMjdaTTExMi4wMjcgNTMuMjc3MVY1My4yODg0SDExMy41MjdWNTMuMjc3MUgxMTIuMDI3Wk0xMTIuMDI3IDUzLjI2NTlWNTMuMjc3MUgxMTMuNTI3VjUzLjI2NTlIMTEyLjAyN1pNMTEyLjAyNyA1My4yNTQ2VjUzLjI2NTlIMTEzLjUyN1Y1My4yNTQ2SDExMi4wMjdaTTExMi4wMjcgNTMuMjQzM1Y1My4yNTQ2SDExMy41MjdWNTMuMjQzM0gxMTIuMDI3Wk0xMTIuMDI3IDUzLjIzMjFWNTMuMjQzM0gxMTMuNTI3VjUzLjIzMjFIMTEyLjAyN1pNMTEyLjAyNyA1My4yMjA4VjUzLjIzMjFIMTEzLjUyN1Y1My4yMjA4SDExMi4wMjdaTTExMi4wMjcgNTMuMjA5NlY1My4yMjA4SDExMy41MjdWNTMuMjA5NkgxMTIuMDI3Wk0xMTIuMDI3IDUzLjE5ODRWNTMuMjA5NkgxMTMuNTI3VjUzLjE5ODRIMTEyLjAyN1pNMTEyLjAyNyA1My4xODcxVjUzLjE5ODRIMTEzLjUyN1Y1My4xODcxSDExMi4wMjdaTTExMi4wMjcgNTMuMTc1OVY1My4xODcxSDExMy41MjdWNTMuMTc1OUgxMTIuMDI3Wk0xMTIuMDI3IDUzLjE2NDdWNTMuMTc1OUgxMTMuNTI3VjUzLjE2NDdIMTEyLjAyN1pNMTEyLjAyNyA1My4xNTM1VjUzLjE2NDdIMTEzLjUyN1Y1My4xNTM1SDExMi4wMjdaTTExMi4wMjcgNTMuMTQyM1Y1My4xNTM1SDExMy41MjdWNTMuMTQyM0gxMTIuMDI3Wk0xMTIuMDI3IDUzLjEzMTFWNTMuMTQyM0gxMTMuNTI3VjUzLjEzMTFIMTEyLjAyN1pNMTEyLjAyNyA1My4xMTk5VjUzLjEzMTFIMTEzLjUyN1Y1My4xMTk5SDExMi4wMjdaTTExMi4wMjcgNTMuMTA4N1Y1My4xMTk5SDExMy41MjdWNTMuMTA4N0gxMTIuMDI3Wk0xMTIuMDI3IDUzLjA5NzVWNTMuMTA4N0gxMTMuNTI3VjUzLjA5NzVIMTEyLjAyN1pNMTEyLjAyNyA1My4wODY0VjUzLjA5NzVIMTEzLjUyN1Y1My4wODY0SDExMi4wMjdaTTExMi4wMjcgNTMuMDc1MlY1My4wODY0SDExMy41MjdWNTMuMDc1MkgxMTIuMDI3Wk0xMTIuMDI3IDUzLjA2NFY1My4wNzUySDExMy41MjdWNTMuMDY0SDExMi4wMjdaTTExMi4wMjcgNTMuMDUyOVY1My4wNjRIMTEzLjUyN1Y1My4wNTI5SDExMi4wMjdaTTExMi4wMjcgNTMuMDQxN1Y1My4wNTI5SDExMy41MjdWNTMuMDQxN0gxMTIuMDI3Wk0xMTIuMDI3IDUzLjAzMDZWNTMuMDQxN0gxMTMuNTI3VjUzLjAzMDZIMTEyLjAyN1pNMTEyLjAyNyA1My4wMTk0VjUzLjAzMDZIMTEzLjUyN1Y1My4wMTk0SDExMi4wMjdaTTExMi4wMjcgNTMuMDA4M1Y1My4wMTk0SDExMy41MjdWNTMuMDA4M0gxMTIuMDI3Wk0xMTIuMDI3IDUyLjk5NzJWNTMuMDA4M0gxMTMuNTI3VjUyLjk5NzJIMTEyLjAyN1pNMTEyLjAyNyA1Mi45ODYxVjUyLjk5NzJIMTEzLjUyN1Y1Mi45ODYxSDExMi4wMjdaTTExMi4wMjcgNTIuOTc1VjUyLjk4NjFIMTEzLjUyN1Y1Mi45NzVIMTEyLjAyN1pNMTEyLjAyNyA1Mi45NjM4VjUyLjk3NUgxMTMuNTI3VjUyLjk2MzhIMTEyLjAyN1pNMTEyLjAyNyA1Mi45NTI3VjUyLjk2MzhIMTEzLjUyN1Y1Mi45NTI3SDExMi4wMjdaTTExMi4wMjcgNTIuOTQxNlY1Mi45NTI3SDExMy41MjdWNTIuOTQxNkgxMTIuMDI3Wk0xMTIuMDI3IDUyLjkzMDZWNTIuOTQxNkgxMTMuNTI3VjUyLjkzMDZIMTEyLjAyN1pNMTEyLjAyNyA1Mi45MTk1VjUyLjkzMDZIMTEzLjUyN1Y1Mi45MTk1SDExMi4wMjdaTTExMi4wMjcgNTIuOTA4NFY1Mi45MTk1SDExMy41MjdWNTIuOTA4NEgxMTIuMDI3Wk0xMTIuMDI3IDUyLjg5NzNWNTIuOTA4NEgxMTMuNTI3VjUyLjg5NzNIMTEyLjAyN1pNMTEyLjAyNyA1Mi44ODYzVjUyLjg5NzNIMTEzLjUyN1Y1Mi44ODYzSDExMi4wMjdaTTExMi4wMjcgNTIuODc1MlY1Mi44ODYzSDExMy41MjdWNTIuODc1MkgxMTIuMDI3Wk0xMTIuMDI3IDUyLjg2NDFWNTIuODc1MkgxMTMuNTI3VjUyLjg2NDFIMTEyLjAyN1pNMTEyLjAyNyA1Mi44NTMxVjUyLjg2NDFIMTEzLjUyN1Y1Mi44NTMxSDExMi4wMjdaTTExMi4wMjcgNTIuODQyVjUyLjg1MzFIMTEzLjUyN1Y1Mi44NDJIMTEyLjAyN1pNMTEyLjAyNyA1Mi44MzFWNTIuODQySDExMy41MjdWNTIuODMxSDExMi4wMjdaTTExMi4wMjcgNTIuODJWNTIuODMxSDExMy41MjdWNTIuODJIMTEyLjAyN1pNMTEyLjAyNyA1Mi44MDg5VjUyLjgySDExMy41MjdWNTIuODA4OUgxMTIuMDI3Wk0xMTIuMDI3IDUyLjc5NzlWNTIuODA4OUgxMTMuNTI3VjUyLjc5NzlIMTEyLjAyN1pNMTEyLjAyNyA1Mi43ODY5VjUyLjc5NzlIMTEzLjUyN1Y1Mi43ODY5SDExMi4wMjdaTTExMi4wMjcgNTIuNzc1OVY1Mi43ODY5SDExMy41MjdWNTIuNzc1OUgxMTIuMDI3Wk0xMTIuMDI3IDUyLjc2NDlWNTIuNzc1OUgxMTMuNTI3VjUyLjc2NDlIMTEyLjAyN1pNMTEyLjAyNyA1Mi43NTM5VjUyLjc2NDlIMTEzLjUyN1Y1Mi43NTM5SDExMi4wMjdaTTExMi4wMjcgNTIuNzQyOVY1Mi43NTM5SDExMy41MjdWNTIuNzQyOUgxMTIuMDI3Wk0xMTIuMDI3IDUyLjczMTlWNTIuNzQyOUgxMTMuNTI3VjUyLjczMTlIMTEyLjAyN1pNMTEyLjAyNyA1Mi43MjFWNTIuNzMxOUgxMTMuNTI3VjUyLjcyMUgxMTIuMDI3Wk0xMTIuMDI3IDUyLjcxVjUyLjcyMUgxMTMuNTI3VjUyLjcxSDExMi4wMjdaTTExMi4wMjcgNTIuNjk5VjUyLjcxSDExMy41MjdWNTIuNjk5SDExMi4wMjdaTTExMi4wMjcgNTIuNjg4VjUyLjY5OUgxMTMuNTI3VjUyLjY4OEgxMTIuMDI3Wk0xMTIuMDI3IDUyLjY3NzFWNTIuNjg4SDExMy41MjdWNTIuNjc3MUgxMTIuMDI3Wk0xMTIuMDI3IDUyLjY2NjFWNTIuNjc3MUgxMTMuNTI3VjUyLjY2NjFIMTEyLjAyN1pNMTEyLjAyNyA1Mi42NTUyVjUyLjY2NjFIMTEzLjUyN1Y1Mi42NTUySDExMi4wMjdaTTExMi4wMjcgNTIuNjQ0M1Y1Mi42NTUySDExMy41MjdWNTIuNjQ0M0gxMTIuMDI3Wk0xMTIuMDI3IDUyLjYzMzNWNTIuNjQ0M0gxMTMuNTI3VjUyLjYzMzNIMTEyLjAyN1pNMTEyLjAyNyA1Mi42MjI0VjUyLjYzMzNIMTEzLjUyN1Y1Mi42MjI0SDExMi4wMjdaTTExMi4wMjcgNTIuNjExNVY1Mi42MjI0SDExMy41MjdWNTIuNjExNUgxMTIuMDI3Wk0xMTIuMDI3IDUyLjYwMDZWNTIuNjExNUgxMTMuNTI3VjUyLjYwMDZIMTEyLjAyN1pNMTEyLjAyNyA1Mi41ODk3VjUyLjYwMDZIMTEzLjUyN1Y1Mi41ODk3SDExMi4wMjdaTTExMi4wMjcgNTIuNTc4OFY1Mi41ODk3SDExMy41MjdWNTIuNTc4OEgxMTIuMDI3Wk0xMTIuMDI3IDUyLjU2NzlWNTIuNTc4OEgxMTMuNTI3VjUyLjU2NzlIMTEyLjAyN1pNMTEyLjAyNyA1Mi41NTdWNTIuNTY3OUgxMTMuNTI3VjUyLjU1N0gxMTIuMDI3Wk0xMTIuMDI3IDUyLjU0NjFWNTIuNTU3SDExMy41MjdWNTIuNTQ2MUgxMTIuMDI3Wk0xMTIuMDI3IDUyLjUzNTJWNTIuNTQ2MUgxMTMuNTI3VjUyLjUzNTJIMTEyLjAyN1pNMTEyLjAyNyA1Mi41MjQzVjUyLjUzNTJIMTEzLjUyN1Y1Mi41MjQzSDExMi4wMjdaTTExMi4wMjcgNTIuNTEzNVY1Mi41MjQzSDExMy41MjdWNTIuNTEzNUgxMTIuMDI3Wk0xMTIuMDI3IDUyLjUwMjZWNTIuNTEzNUgxMTMuNTI3VjUyLjUwMjZIMTEyLjAyN1pNMTEyLjAyNyA1Mi40OTE4VjUyLjUwMjZIMTEzLjUyN1Y1Mi40OTE4SDExMi4wMjdaTTExMi4wMjcgNTIuNDgwOVY1Mi40OTE4SDExMy41MjdWNTIuNDgwOUgxMTIuMDI3Wk0xMTIuMDI3IDUyLjQ3MDFWNTIuNDgwOUgxMTMuNTI3VjUyLjQ3MDFIMTEyLjAyN1pNMTEyLjAyNyA1Mi40NTkyVjUyLjQ3MDFIMTEzLjUyN1Y1Mi40NTkySDExMi4wMjdaTTExMi4wMjcgNTIuNDQ4NFY1Mi40NTkySDExMy41MjdWNTIuNDQ4NEgxMTIuMDI3Wk0xMTIuMDI3IDUyLjQzNzZWNTIuNDQ4NEgxMTMuNTI3VjUyLjQzNzZIMTEyLjAyN1pNMTEyLjAyNyA1Mi40MjY4VjUyLjQzNzZIMTEzLjUyN1Y1Mi40MjY4SDExMi4wMjdaTTExMi4wMjcgNTIuNDE1OVY1Mi40MjY4SDExMy41MjdWNTIuNDE1OUgxMTIuMDI3Wk0xMTIuMDI3IDUyLjQwNTFWNTIuNDE1OUgxMTMuNTI3VjUyLjQwNTFIMTEyLjAyN1pNMTEyLjAyNyA1Mi4zOTQzVjUyLjQwNTFIMTEzLjUyN1Y1Mi4zOTQzSDExMi4wMjdaTTExMi4wMjcgNTIuMzgzNVY1Mi4zOTQzSDExMy41MjdWNTIuMzgzNUgxMTIuMDI3Wk0xMTIuMDI3IDUyLjM3MjdWNTIuMzgzNUgxMTMuNTI3VjUyLjM3MjdIMTEyLjAyN1pNMTEyLjAyNyA1Mi4zNjJWNTIuMzcyN0gxMTMuNTI3VjUyLjM2MkgxMTIuMDI3Wk0xMTIuMDI3IDUyLjM1MTJWNTIuMzYySDExMy41MjdWNTIuMzUxMkgxMTIuMDI3Wk0xMTIuMDI3IDUyLjM0MDRWNTIuMzUxMkgxMTMuNTI3VjUyLjM0MDRIMTEyLjAyN1pNMTEyLjAyNyA1Mi4zMjk2VjUyLjM0MDRIMTEzLjUyN1Y1Mi4zMjk2SDExMi4wMjdaTTExMi4wMjcgNTIuMzE4OVY1Mi4zMjk2SDExMy41MjdWNTIuMzE4OUgxMTIuMDI3Wk0xMTIuMDI3IDUyLjMwODFWNTIuMzE4OUgxMTMuNTI3VjUyLjMwODFIMTEyLjAyN1pNMTEyLjAyNyA1Mi4yOTc0VjUyLjMwODFIMTEzLjUyN1Y1Mi4yOTc0SDExMi4wMjdaTTExMi4wMjcgNTIuMjg2NlY1Mi4yOTc0SDExMy41MjdWNTIuMjg2NkgxMTIuMDI3Wk0xMTIuMDI3IDUyLjI3NTlWNTIuMjg2NkgxMTMuNTI3VjUyLjI3NTlIMTEyLjAyN1pNMTEyLjAyNyA1Mi4yNjUyVjUyLjI3NTlIMTEzLjUyN1Y1Mi4yNjUySDExMi4wMjdaTTExMi4wMjcgNTIuMjU0NFY1Mi4yNjUySDExMy41MjdWNTIuMjU0NEgxMTIuMDI3Wk0xMTIuMDI3IDUyLjI0MzdWNTIuMjU0NEgxMTMuNTI3VjUyLjI0MzdIMTEyLjAyN1pNMTEyLjAyNyA1Mi4yMzNWNTIuMjQzN0gxMTMuNTI3VjUyLjIzM0gxMTIuMDI3Wk0xMTIuMDI3IDUyLjIyMjNWNTIuMjMzSDExMy41MjdWNTIuMjIyM0gxMTIuMDI3Wk0xMTIuMDI3IDUyLjIxMTZWNTIuMjIyM0gxMTMuNTI3VjUyLjIxMTZIMTEyLjAyN1pNMTEyLjAyNyA1Mi4yMDA5VjUyLjIxMTZIMTEzLjUyN1Y1Mi4yMDA5SDExMi4wMjdaTTExMi4wMjcgNTIuMTkwMlY1Mi4yMDA5SDExMy41MjdWNTIuMTkwMkgxMTIuMDI3Wk0xMTIuMDI3IDUyLjE3OTVWNTIuMTkwMkgxMTMuNTI3VjUyLjE3OTVIMTEyLjAyN1pNMTEyLjAyNyA1Mi4xNjg4VjUyLjE3OTVIMTEzLjUyN1Y1Mi4xNjg4SDExMi4wMjdaTTExMi4wMjcgNTIuMTU4MlY1Mi4xNjg4SDExMy41MjdWNTIuMTU4MkgxMTIuMDI3Wk0xMTIuMDI3IDUyLjE0NzVWNTIuMTU4MkgxMTMuNTI3VjUyLjE0NzVIMTEyLjAyN1pNMTEyLjAyNyA1Mi4xMzY4VjUyLjE0NzVIMTEzLjUyN1Y1Mi4xMzY4SDExMi4wMjdaTTExMi4wMjcgNTIuMTI2MlY1Mi4xMzY4SDExMy41MjdWNTIuMTI2MkgxMTIuMDI3Wk0xMTIuMDI3IDUyLjExNTVWNTIuMTI2MkgxMTMuNTI3VjUyLjExNTVIMTEyLjAyN1pNMTEyLjAyNyA1Mi4xMDQ5VjUyLjExNTVIMTEzLjUyN1Y1Mi4xMDQ5SDExMi4wMjdaTTExMi4wMjcgNTIuMDk0M1Y1Mi4xMDQ5SDExMy41MjdWNTIuMDk0M0gxMTIuMDI3Wk0xMTIuMDI3IDUyLjA4MzZWNTIuMDk0M0gxMTMuNTI3VjUyLjA4MzZIMTEyLjAyN1pNMTEyLjAyNyA1Mi4wNzNWNTIuMDgzNkgxMTMuNTI3VjUyLjA3M0gxMTIuMDI3Wk0xMTIuMDI3IDUyLjA2MjRWNTIuMDczSDExMy41MjdWNTIuMDYyNEgxMTIuMDI3Wk0xMTIuMDI3IDUyLjA1MThWNTIuMDYyNEgxMTMuNTI3VjUyLjA1MThIMTEyLjAyN1pNMTEyLjAyNyA1Mi4wNDEyVjUyLjA1MThIMTEzLjUyN1Y1Mi4wNDEySDExMi4wMjdaTTExMi4wMjcgNTIuMDMwNlY1Mi4wNDEySDExMy41MjdWNTIuMDMwNkgxMTIuMDI3Wk0xMTIuMDI3IDUyLjAyVjUyLjAzMDZIMTEzLjUyN1Y1Mi4wMkgxMTIuMDI3Wk0xMTIuMDI3IDUyLjAwOTRWNTIuMDJIMTEzLjUyN1Y1Mi4wMDk0SDExMi4wMjdaTTExMi4wMjcgNTEuOTk4OFY1Mi4wMDk0SDExMy41MjdWNTEuOTk4OEgxMTIuMDI3Wk0xMTIuMDI3IDUxLjk4ODJWNTEuOTk4OEgxMTMuNTI3VjUxLjk4ODJIMTEyLjAyN1pNMTEyLjAyNyA1MS45Nzc2VjUxLjk4ODJIMTEzLjUyN1Y1MS45Nzc2SDExMi4wMjdaTTExMi4wMjcgNTEuOTY3MVY1MS45Nzc2SDExMy41MjdWNTEuOTY3MUgxMTIuMDI3Wk0xMTIuMDI3IDUxLjk1NjVWNTEuOTY3MUgxMTMuNTI3VjUxLjk1NjVIMTEyLjAyN1pNMTEyLjAyNyA1MS45NDZWNTEuOTU2NUgxMTMuNTI3VjUxLjk0NkgxMTIuMDI3Wk0xMTIuMDI3IDUxLjkzNTRWNTEuOTQ2SDExMy41MjdWNTEuOTM1NEgxMTIuMDI3Wk0xMTIuMDI3IDUxLjkyNDlWNTEuOTM1NEgxMTMuNTI3VjUxLjkyNDlIMTEyLjAyN1pNMTEyLjAyNyA1MS45MTQzVjUxLjkyNDlIMTEzLjUyN1Y1MS45MTQzSDExMi4wMjdaTTExMi4wMjcgNTEuOTAzOFY1MS45MTQzSDExMy41MjdWNTEuOTAzOEgxMTIuMDI3Wk0xMTIuMDI3IDUxLjg5MzNWNTEuOTAzOEgxMTMuNTI3VjUxLjg5MzNIMTEyLjAyN1pNMTEyLjAyNyA1MS44ODI4VjUxLjg5MzNIMTEzLjUyN1Y1MS44ODI4SDExMi4wMjdaTTExMi4wMjcgNTEuODcyM1Y1MS44ODI4SDExMy41MjdWNTEuODcyM0gxMTIuMDI3Wk0xMTIuMDI3IDUxLjg2MTdWNTEuODcyM0gxMTMuNTI3VjUxLjg2MTdIMTEyLjAyN1pNMTEyLjAyNyA1MS44NTEyVjUxLjg2MTdIMTEzLjUyN1Y1MS44NTEySDExMi4wMjdaTTExMi4wMjcgNTEuODQwN1Y1MS44NTEySDExMy41MjdWNTEuODQwN0gxMTIuMDI3Wk0xMTIuMDI3IDUxLjgzMDNWNTEuODQwN0gxMTMuNTI3VjUxLjgzMDNIMTEyLjAyN1pNMTEyLjAyNyA1MS44MTk4VjUxLjgzMDNIMTEzLjUyN1Y1MS44MTk4SDExMi4wMjdaTTExMi4wMjcgNTEuODA5M1Y1MS44MTk4SDExMy41MjdWNTEuODA5M0gxMTIuMDI3Wk0xMTIuMDI3IDUxLjc5ODhWNTEuODA5M0gxMTMuNTI3VjUxLjc5ODhIMTEyLjAyN1pNMTEyLjAyNyA1MS43ODg0VjUxLjc5ODhIMTEzLjUyN1Y1MS43ODg0SDExMi4wMjdaTTExMi4wMjcgNTEuNzc3OVY1MS43ODg0SDExMy41MjdWNTEuNzc3OUgxMTIuMDI3Wk0xMTIuMDI3IDUxLjc2NzRWNTEuNzc3OUgxMTMuNTI3VjUxLjc2NzRIMTEyLjAyN1pNMTEyLjAyNyA1MS43NTdWNTEuNzY3NEgxMTMuNTI3VjUxLjc1N0gxMTIuMDI3Wk0xMTIuMDI3IDUxLjc0NjZWNTEuNzU3SDExMy41MjdWNTEuNzQ2NkgxMTIuMDI3Wk0xMTIuMDI3IDUxLjczNjFWNTEuNzQ2NkgxMTMuNTI3VjUxLjczNjFIMTEyLjAyN1pNMTEyLjAyNyA1MS43MjU3VjUxLjczNjFIMTEzLjUyN1Y1MS43MjU3SDExMi4wMjdaTTExMi4wMjcgNTEuNzE1M1Y1MS43MjU3SDExMy41MjdWNTEuNzE1M0gxMTIuMDI3Wk0xMTIuMDI3IDUxLjcwNDhWNTEuNzE1M0gxMTMuNTI3VjUxLjcwNDhIMTEyLjAyN1pNMTEyLjAyNyA1MS42OTQ0VjUxLjcwNDhIMTEzLjUyN1Y1MS42OTQ0SDExMi4wMjdaTTExMi4wMjcgNTEuNjg0VjUxLjY5NDRIMTEzLjUyN1Y1MS42ODRIMTEyLjAyN1pNMTEyLjAyNyA1MS42NzM2VjUxLjY4NEgxMTMuNTI3VjUxLjY3MzZIMTEyLjAyN1pNMTEyLjAyNyA1MS42NjMyVjUxLjY3MzZIMTEzLjUyN1Y1MS42NjMySDExMi4wMjdaTTExMi4wMjcgNTEuNjUyOFY1MS42NjMySDExMy41MjdWNTEuNjUyOEgxMTIuMDI3Wk0xMTIuMDI3IDUxLjY0MjVWNTEuNjUyOEgxMTMuNTI3VjUxLjY0MjVIMTEyLjAyN1pNMTEyLjAyNyA1MS42MzIxVjUxLjY0MjVIMTEzLjUyN1Y1MS42MzIxSDExMi4wMjdaTTExMi4wMjcgNTEuNjIxN1Y1MS42MzIxSDExMy41MjdWNTEuNjIxN0gxMTIuMDI3Wk0xMTIuMDI3IDUxLjYxMTNWNTEuNjIxN0gxMTMuNTI3VjUxLjYxMTNIMTEyLjAyN1pNMTEyLjAyNyA1MS42MDFWNTEuNjExM0gxMTMuNTI3VjUxLjYwMUgxMTIuMDI3Wk0xMTIuMDI3IDUxLjU5MDZWNTEuNjAxSDExMy41MjdWNTEuNTkwNkgxMTIuMDI3Wk0xMTIuMDI3IDUxLjU4MDNWNTEuNTkwNkgxMTMuNTI3VjUxLjU4MDNIMTEyLjAyN1pNMTEyLjAyNyA1MS41Njk5VjUxLjU4MDNIMTEzLjUyN1Y1MS41Njk5SDExMi4wMjdaTTExMi4wMjcgNTEuNTU5NlY1MS41Njk5SDExMy41MjdWNTEuNTU5NkgxMTIuMDI3Wk0xMTIuMDI3IDUxLjU0OTNWNTEuNTU5NkgxMTMuNTI3VjUxLjU0OTNIMTEyLjAyN1pNMTEyLjAyNyA1MS41Mzg5VjUxLjU0OTNIMTEzLjUyN1Y1MS41Mzg5SDExMi4wMjdaTTExMi4wMjcgNTEuNTI4NlY1MS41Mzg5SDExMy41MjdWNTEuNTI4NkgxMTIuMDI3Wk0xMTIuMDI3IDUxLjUxODNWNTEuNTI4NkgxMTMuNTI3VjUxLjUxODNIMTEyLjAyN1pNMTEyLjAyNyA1MS41MDhWNTEuNTE4M0gxMTMuNTI3VjUxLjUwOEgxMTIuMDI3Wk0xMTIuMDI3IDUxLjQ5NzdWNTEuNTA4SDExMy41MjdWNTEuNDk3N0gxMTIuMDI3Wk0xMTIuMDI3IDUxLjQ4NzRWNTEuNDk3N0gxMTMuNTI3VjUxLjQ4NzRIMTEyLjAyN1pNMTEyLjAyNyA1MS40NzcxVjUxLjQ4NzRIMTEzLjUyN1Y1MS40NzcxSDExMi4wMjdaTTExMi4wMjcgNTEuNDY2OFY1MS40NzcxSDExMy41MjdWNTEuNDY2OEgxMTIuMDI3Wk0xMTIuMDI3IDUxLjQ1NjZWNTEuNDY2OEgxMTMuNTI3VjUxLjQ1NjZIMTEyLjAyN1pNMTEyLjAyNyA1MS40NDYzVjUxLjQ1NjZIMTEzLjUyN1Y1MS40NDYzSDExMi4wMjdaTTExMi4wMjcgNTEuNDM2VjUxLjQ0NjNIMTEzLjUyN1Y1MS40MzZIMTEyLjAyN1pNMTEyLjAyNyA1MS40MjU4VjUxLjQzNkgxMTMuNTI3VjUxLjQyNThIMTEyLjAyN1pNMTEyLjAyNyA1MS40MTU1VjUxLjQyNThIMTEzLjUyN1Y1MS40MTU1SDExMi4wMjdaTTExMi4wMjcgNTEuNDA1M1Y1MS40MTU1SDExMy41MjdWNTEuNDA1M0gxMTIuMDI3Wk0xMTIuMDI3IDUxLjM5NVY1MS40MDUzSDExMy41MjdWNTEuMzk1SDExMi4wMjdaTTExMi4wMjcgNTEuMzg0OFY1MS4zOTVIMTEzLjUyN1Y1MS4zODQ4SDExMi4wMjdaTTExMi4wMjcgNTEuMzc0NlY1MS4zODQ4SDExMy41MjdWNTEuMzc0NkgxMTIuMDI3Wk0xMTIuMDI3IDUxLjM2NDNWNTEuMzc0NkgxMTMuNTI3VjUxLjM2NDNIMTEyLjAyN1pNMTEyLjAyNyA1MS4zNTQxVjUxLjM2NDNIMTEzLjUyN1Y1MS4zNTQxSDExMi4wMjdaTTExMi4wMjcgNTEuMzQzOVY1MS4zNTQxSDExMy41MjdWNTEuMzQzOUgxMTIuMDI3Wk0xMTIuMDI3IDUxLjMzMzdWNTEuMzQzOUgxMTMuNTI3VjUxLjMzMzdIMTEyLjAyN1pNMTEyLjAyNyA1MS4zMjM1VjUxLjMzMzdIMTEzLjUyN1Y1MS4zMjM1SDExMi4wMjdaTTExMi4wMjcgNTEuMzEzM1Y1MS4zMjM1SDExMy41MjdWNTEuMzEzM0gxMTIuMDI3Wk0xMTIuMDI3IDUxLjMwMzFWNTEuMzEzM0gxMTMuNTI3VjUxLjMwMzFIMTEyLjAyN1pNMTEyLjAyNyA1MS4yOTI5VjUxLjMwMzFIMTEzLjUyN1Y1MS4yOTI5SDExMi4wMjdaTTExMi4wMjcgNTEuMjgyOFY1MS4yOTI5SDExMy41MjdWNTEuMjgyOEgxMTIuMDI3Wk0xMTIuMDI3IDUxLjI3MjZWNTEuMjgyOEgxMTMuNTI3VjUxLjI3MjZIMTEyLjAyN1pNMTEyLjAyNyA1MS4yNjI0VjUxLjI3MjZIMTEzLjUyN1Y1MS4yNjI0SDExMi4wMjdaTTExMi4wMjcgNTEuMjUyM1Y1MS4yNjI0SDExMy41MjdWNTEuMjUyM0gxMTIuMDI3Wk0xMTIuMDI3IDUxLjI0MjFWNTEuMjUyM0gxMTMuNTI3VjUxLjI0MjFIMTEyLjAyN1pNMTEyLjAyNyA1MS4yMzJWNTEuMjQyMUgxMTMuNTI3VjUxLjIzMkgxMTIuMDI3Wk0xMTIuMDI3IDUxLjIyMThWNTEuMjMySDExMy41MjdWNTEuMjIxOEgxMTIuMDI3Wk0xMTIuMDI3IDUxLjIxMTdWNTEuMjIxOEgxMTMuNTI3VjUxLjIxMTdIMTEyLjAyN1pNMTEyLjAyNyA1MS4yMDE2VjUxLjIxMTdIMTEzLjUyN1Y1MS4yMDE2SDExMi4wMjdaTTExMi4wMjcgNTEuMTkxNFY1MS4yMDE2SDExMy41MjdWNTEuMTkxNEgxMTIuMDI3Wk0xMTIuMDI3IDUxLjE4MTNWNTEuMTkxNEgxMTMuNTI3VjUxLjE4MTNIMTEyLjAyN1pNMTEyLjAyNyA1MS4xNzEyVjUxLjE4MTNIMTEzLjUyN1Y1MS4xNzEySDExMi4wMjdaTTExMi4wMjcgNTEuMTYxMVY1MS4xNzEySDExMy41MjdWNTEuMTYxMUgxMTIuMDI3Wk0xMTIuMDI3IDUxLjE1MVY1MS4xNjExSDExMy41MjdWNTEuMTUxSDExMi4wMjdaTTExMi4wMjcgNTEuMTQwOVY1MS4xNTFIMTEzLjUyN1Y1MS4xNDA5SDExMi4wMjdaTTExMi4wMjcgNTEuMTMwOFY1MS4xNDA5SDExMy41MjdWNTEuMTMwOEgxMTIuMDI3Wk0xMTIuMDI3IDUxLjEyMDdWNTEuMTMwOEgxMTMuNTI3VjUxLjEyMDdIMTEyLjAyN1pNMTEyLjAyNyA1MS4xMTA3VjUxLjEyMDdIMTEzLjUyN1Y1MS4xMTA3SDExMi4wMjdaTTExMi4wMjcgNTEuMTAwNlY1MS4xMTA3SDExMy41MjdWNTEuMTAwNkgxMTIuMDI3Wk0xMTIuMDI3IDUxLjA5MDVWNTEuMTAwNkgxMTMuNTI3VjUxLjA5MDVIMTEyLjAyN1pNMTEyLjAyNyA1MS4wODA1VjUxLjA5MDVIMTEzLjUyN1Y1MS4wODA1SDExMi4wMjdaTTExMi4wMjcgNTEuMDcwNFY1MS4wODA1SDExMy41MjdWNTEuMDcwNEgxMTIuMDI3Wk0xMTIuMDI3IDUxLjA2MDRWNTEuMDcwNEgxMTMuNTI3VjUxLjA2MDRIMTEyLjAyN1pNMTEyLjAyNyA1MS4wNTAzVjUxLjA2MDRIMTEzLjUyN1Y1MS4wNTAzSDExMi4wMjdaTTExMi4wMjcgNTEuMDQwM1Y1MS4wNTAzSDExMy41MjdWNTEuMDQwM0gxMTIuMDI3Wk0xMTIuMDI3IDUxLjAzMDNWNTEuMDQwM0gxMTMuNTI3VjUxLjAzMDNIMTEyLjAyN1pNMTEyLjAyNyA1MS4wMjAyVjUxLjAzMDNIMTEzLjUyN1Y1MS4wMjAySDExMi4wMjdaTTExMi4wMjcgNTEuMDEwMlY1MS4wMjAySDExMy41MjdWNTEuMDEwMkgxMTIuMDI3Wk0xMTIuMDI3IDUxLjAwMDJWNTEuMDEwMkgxMTMuNTI3VjUxLjAwMDJIMTEyLjAyN1pNMTEyLjAyNyA1MC45OTAyVjUxLjAwMDJIMTEzLjUyN1Y1MC45OTAySDExMi4wMjdaTTExMi4wMjcgNTAuOTgwMlY1MC45OTAySDExMy41MjdWNTAuOTgwMkgxMTIuMDI3Wk0xMTIuMDI3IDUwLjk3MDJWNTAuOTgwMkgxMTMuNTI3VjUwLjk3MDJIMTEyLjAyN1pNMTEyLjAyNyA1MC45NjAyVjUwLjk3MDJIMTEzLjUyN1Y1MC45NjAySDExMi4wMjdaTTExMi4wMjcgNTAuOTUwMlY1MC45NjAySDExMy41MjdWNTAuOTUwMkgxMTIuMDI3Wk0xMTIuMDI3IDUwLjk0MDNWNTAuOTUwMkgxMTMuNTI3VjUwLjk0MDNIMTEyLjAyN1pNMTEyLjAyNyA1MC45MzAzVjUwLjk0MDNIMTEzLjUyN1Y1MC45MzAzSDExMi4wMjdaTTExMi4wMjcgNTAuOTIwM1Y1MC45MzAzSDExMy41MjdWNTAuOTIwM0gxMTIuMDI3Wk0xMTIuMDI3IDUwLjkxMDRWNTAuOTIwM0gxMTMuNTI3VjUwLjkxMDRIMTEyLjAyN1pNMTEyLjAyNyA1MC45MDA0VjUwLjkxMDRIMTEzLjUyN1Y1MC45MDA0SDExMi4wMjdaTTExMi4wMjcgNTAuODkwNVY1MC45MDA0SDExMy41MjdWNTAuODkwNUgxMTIuMDI3Wk0xMTIuMDI3IDUwLjg4MDVWNTAuODkwNUgxMTMuNTI3VjUwLjg4MDVIMTEyLjAyN1pNMTEyLjAyNyA1MC44NzA2VjUwLjg4MDVIMTEzLjUyN1Y1MC44NzA2SDExMi4wMjdaTTExMi4wMjcgNTAuODYwN1Y1MC44NzA2SDExMy41MjdWNTAuODYwN0gxMTIuMDI3Wk0xMTIuMDI3IDUwLjg1MDdWNTAuODYwN0gxMTMuNTI3VjUwLjg1MDdIMTEyLjAyN1pNMTEyLjAyNyA1MC44NDA4VjUwLjg1MDdIMTEzLjUyN1Y1MC44NDA4SDExMi4wMjdaTTExMi4wMjcgNTAuODMwOVY1MC44NDA4SDExMy41MjdWNTAuODMwOUgxMTIuMDI3Wk0xMTIuMDI3IDUwLjgyMVY1MC44MzA5SDExMy41MjdWNTAuODIxSDExMi4wMjdaTTExMi4wMjcgNTAuODExMVY1MC44MjFIMTEzLjUyN1Y1MC44MTExSDExMi4wMjdaTTExMi4wMjcgNTAuODAxMlY1MC44MTExSDExMy41MjdWNTAuODAxMkgxMTIuMDI3Wk0xMTIuMDI3IDUwLjc5MTNWNTAuODAxMkgxMTMuNTI3VjUwLjc5MTNIMTEyLjAyN1pNMTEyLjAyNyA1MC43ODE0VjUwLjc5MTNIMTEzLjUyN1Y1MC43ODE0SDExMi4wMjdaTTExMi4wMjcgNTAuNzcxNlY1MC43ODE0SDExMy41MjdWNTAuNzcxNkgxMTIuMDI3Wk0xMTIuMDI3IDUwLjc2MTdWNTAuNzcxNkgxMTMuNTI3VjUwLjc2MTdIMTEyLjAyN1pNMTEyLjAyNyA1MC43NTE4VjUwLjc2MTdIMTEzLjUyN1Y1MC43NTE4SDExMi4wMjdaTTExMi4wMjcgNTAuNzQyVjUwLjc1MThIMTEzLjUyN1Y1MC43NDJIMTEyLjAyN1pNMTEyLjAyNyA1MC43MzIxVjUwLjc0MkgxMTMuNTI3VjUwLjczMjFIMTEyLjAyN1pNMTEyLjAyNyA1MC43MjIzVjUwLjczMjFIMTEzLjUyN1Y1MC43MjIzSDExMi4wMjdaTTExMi4wMjcgNTAuNzEyNFY1MC43MjIzSDExMy41MjdWNTAuNzEyNEgxMTIuMDI3Wk0xMTIuMDI3IDUwLjcwMjZWNTAuNzEyNEgxMTMuNTI3VjUwLjcwMjZIMTEyLjAyN1pNMTEyLjAyNyA1MC42OTI4VjUwLjcwMjZIMTEzLjUyN1Y1MC42OTI4SDExMi4wMjdaTTExMi4wMjcgNTAuNjgyOVY1MC42OTI4SDExMy41MjdWNTAuNjgyOUgxMTIuMDI3Wk0xMTIuMDI3IDUwLjY3MzFWNTAuNjgyOUgxMTMuNTI3VjUwLjY3MzFIMTEyLjAyN1pNMTEyLjAyNyA1MC42NjMzVjUwLjY3MzFIMTEzLjUyN1Y1MC42NjMzSDExMi4wMjdaTTExMi4wMjcgNTAuNjUzNVY1MC42NjMzSDExMy41MjdWNTAuNjUzNUgxMTIuMDI3Wk0xMTIuMDI3IDUwLjY0MzdWNTAuNjUzNUgxMTMuNTI3VjUwLjY0MzdIMTEyLjAyN1pNMTEyLjAyNyA1MC42MzM5VjUwLjY0MzdIMTEzLjUyN1Y1MC42MzM5SDExMi4wMjdaTTExMi4wMjcgNTAuNjI0MVY1MC42MzM5SDExMy41MjdWNTAuNjI0MUgxMTIuMDI3Wk0xMTIuMDI3IDUwLjYxNDNWNTAuNjI0MUgxMTMuNTI3VjUwLjYxNDNIMTEyLjAyN1pNMTEyLjAyNyA1MC42MDQ2VjUwLjYxNDNIMTEzLjUyN1Y1MC42MDQ2SDExMi4wMjdaTTExMi4wMjcgNTAuNTk0OFY1MC42MDQ2SDExMy41MjdWNTAuNTk0OEgxMTIuMDI3Wk0xMTIuMDI3IDUwLjU4NVY1MC41OTQ4SDExMy41MjdWNTAuNTg1SDExMi4wMjdaTTExMi4wMjcgNTAuNTc1M1Y1MC41ODVIMTEzLjUyN1Y1MC41NzUzSDExMi4wMjdaTTExMi4wMjcgNTAuNTY1NVY1MC41NzUzSDExMy41MjdWNTAuNTY1NUgxMTIuMDI3Wk0xMTIuMDI3IDUwLjU1NThWNTAuNTY1NUgxMTMuNTI3VjUwLjU1NThIMTEyLjAyN1pNMTEyLjAyNyA1MC41NDZWNTAuNTU1OEgxMTMuNTI3VjUwLjU0NkgxMTIuMDI3Wk0xMTIuMDI3IDUwLjUzNjNWNTAuNTQ2SDExMy41MjdWNTAuNTM2M0gxMTIuMDI3Wk0xMTIuMDI3IDUwLjUyNjZWNTAuNTM2M0gxMTMuNTI3VjUwLjUyNjZIMTEyLjAyN1pNMTEyLjAyNyA1MC41MTY4VjUwLjUyNjZIMTEzLjUyN1Y1MC41MTY4SDExMi4wMjdaTTExMi4wMjcgNTAuNTA3MVY1MC41MTY4SDExMy41MjdWNTAuNTA3MUgxMTIuMDI3Wk0xMTIuMDI3IDUwLjQ5NzRWNTAuNTA3MUgxMTMuNTI3VjUwLjQ5NzRIMTEyLjAyN1pNMTEyLjAyNyA1MC40ODc3VjUwLjQ5NzRIMTEzLjUyN1Y1MC40ODc3SDExMi4wMjdaTTExMi4wMjcgNTAuNDc4VjUwLjQ4NzdIMTEzLjUyN1Y1MC40NzhIMTEyLjAyN1pNMTEyLjAyNyA1MC40NjgzVjUwLjQ3OEgxMTMuNTI3VjUwLjQ2ODNIMTEyLjAyN1pNMTEyLjAyNyA1MC40NTg2VjUwLjQ2ODNIMTEzLjUyN1Y1MC40NTg2SDExMi4wMjdaTTExMi4wMjcgNTAuNDQ4OVY1MC40NTg2SDExMy41MjdWNTAuNDQ4OUgxMTIuMDI3Wk0xMTIuMDI3IDUwLjQzOTNWNTAuNDQ4OUgxMTMuNTI3VjUwLjQzOTNIMTEyLjAyN1pNMTEyLjAyNyA1MC40Mjk2VjUwLjQzOTNIMTEzLjUyN1Y1MC40Mjk2SDExMi4wMjdaTTExMi4wMjcgNTAuNDE5OVY1MC40Mjk2SDExMy41MjdWNTAuNDE5OUgxMTIuMDI3Wk0xMTIuMDI3IDUwLjQxMDNWNTAuNDE5OUgxMTMuNTI3VjUwLjQxMDNIMTEyLjAyN1pNMTEyLjAyNyA1MC40MDA2VjUwLjQxMDNIMTEzLjUyN1Y1MC40MDA2SDExMi4wMjdaTTExMi4wMjcgNTAuMzkxVjUwLjQwMDZIMTEzLjUyN1Y1MC4zOTFIMTEyLjAyN1pNMTEyLjAyNyA1MC4zODEzVjUwLjM5MUgxMTMuNTI3VjUwLjM4MTNIMTEyLjAyN1pNMTEyLjAyNyA1MC4zNzE3VjUwLjM4MTNIMTEzLjUyN1Y1MC4zNzE3SDExMi4wMjdaTTExMi4wMjcgNTAuMzYyMVY1MC4zNzE3SDExMy41MjdWNTAuMzYyMUgxMTIuMDI3Wk0xMTIuMDI3IDUwLjM1MjVWNTAuMzYyMUgxMTMuNTI3VjUwLjM1MjVIMTEyLjAyN1pNMTEyLjAyNyA1MC4zNDI4VjUwLjM1MjVIMTEzLjUyN1Y1MC4zNDI4SDExMi4wMjdaTTExMi4wMjcgNTAuMzMzMlY1MC4zNDI4SDExMy41MjdWNTAuMzMzMkgxMTIuMDI3Wk0xMTIuMDI3IDUwLjMyMzZWNTAuMzMzMkgxMTMuNTI3VjUwLjMyMzZIMTEyLjAyN1pNMTEyLjAyNyA1MC4zMTRWNTAuMzIzNkgxMTMuNTI3VjUwLjMxNEgxMTIuMDI3Wk0xMTIuMDI3IDUwLjMwNDRWNTAuMzE0SDExMy41MjdWNTAuMzA0NEgxMTIuMDI3Wk0xMTIuMDI3IDUwLjI5NDhWNTAuMzA0NEgxMTMuNTI3VjUwLjI5NDhIMTEyLjAyN1pNMTEyLjAyNyA1MC4yODUzVjUwLjI5NDhIMTEzLjUyN1Y1MC4yODUzSDExMi4wMjdaTTExMi4wMjcgNTAuMjc1N1Y1MC4yODUzSDExMy41MjdWNTAuMjc1N0gxMTIuMDI3Wk0xMTIuMDI3IDUwLjI2NjFWNTAuMjc1N0gxMTMuNTI3VjUwLjI2NjFIMTEyLjAyN1pNMTEyLjAyNyA1MC4yNTY2VjUwLjI2NjFIMTEzLjUyN1Y1MC4yNTY2SDExMi4wMjdaTTExMi4wMjcgNTAuMjQ3VjUwLjI1NjZIMTEzLjUyN1Y1MC4yNDdIMTEyLjAyN1pNMTEyLjAyNyA1MC4yMzc0VjUwLjI0N0gxMTMuNTI3VjUwLjIzNzRIMTEyLjAyN1pNMTEyLjAyNyA1MC4yMjc5VjUwLjIzNzRIMTEzLjUyN1Y1MC4yMjc5SDExMi4wMjdaTTExMi4wMjcgNTAuMjE4NFY1MC4yMjc5SDExMy41MjdWNTAuMjE4NEgxMTIuMDI3Wk0xMTIuMDI3IDUwLjIwODhWNTAuMjE4NEgxMTMuNTI3VjUwLjIwODhIMTEyLjAyN1pNMTEyLjAyNyA1MC4xOTkzVjUwLjIwODhIMTEzLjUyN1Y1MC4xOTkzSDExMi4wMjdaTTExMi4wMjcgNTAuMTg5OFY1MC4xOTkzSDExMy41MjdWNTAuMTg5OEgxMTIuMDI3Wk0xMTIuMDI3IDUwLjE4MDNWNTAuMTg5OEgxMTMuNTI3VjUwLjE4MDNIMTEyLjAyN1pNMTEyLjAyNyA1MC4xNzA3VjUwLjE4MDNIMTEzLjUyN1Y1MC4xNzA3SDExMi4wMjdaTTExMi4wMjcgNTAuMTYxMlY1MC4xNzA3SDExMy41MjdWNTAuMTYxMkgxMTIuMDI3Wk0xMTIuMDI3IDUwLjE1MTdWNTAuMTYxMkgxMTMuNTI3VjUwLjE1MTdIMTEyLjAyN1pNMTEyLjAyNyA1MC4xNDIzVjUwLjE1MTdIMTEzLjUyN1Y1MC4xNDIzSDExMi4wMjdaTTExMi4wMjcgNTAuMTMyOFY1MC4xNDIzSDExMy41MjdWNTAuMTMyOEgxMTIuMDI3Wk0xMTIuMDI3IDUwLjEyMzNWNTAuMTMyOEgxMTMuNTI3VjUwLjEyMzNIMTEyLjAyN1pNMTEyLjAyNyA1MC4xMTM4VjUwLjEyMzNIMTEzLjUyN1Y1MC4xMTM4SDExMi4wMjdaTTExMi4wMjcgNTAuMTA0M1Y1MC4xMTM4SDExMy41MjdWNTAuMTA0M0gxMTIuMDI3Wk0xMTIuMDI3IDUwLjA5NDlWNTAuMTA0M0gxMTMuNTI3VjUwLjA5NDlIMTEyLjAyN1pNMTEyLjAyNyA1MC4wODU0VjUwLjA5NDlIMTEzLjUyN1Y1MC4wODU0SDExMi4wMjdaTTExMi4wMjcgNTAuMDc2VjUwLjA4NTRIMTEzLjUyN1Y1MC4wNzZIMTEyLjAyN1pNMTEyLjAyNyA1MC4wNjY1VjUwLjA3NkgxMTMuNTI3VjUwLjA2NjVIMTEyLjAyN1pNMTEyLjAyNyA1MC4wNTcxVjUwLjA2NjVIMTEzLjUyN1Y1MC4wNTcxSDExMi4wMjdaTTExMi4wMjcgNTAuMDQ3NlY1MC4wNTcxSDExMy41MjdWNTAuMDQ3NkgxMTIuMDI3Wk0xMTIuMDI3IDUwLjAzODJWNTAuMDQ3NkgxMTMuNTI3VjUwLjAzODJIMTEyLjAyN1pNMTEyLjAyNyA1MC4wMjg4VjUwLjAzODJIMTEzLjUyN1Y1MC4wMjg4SDExMi4wMjdaTTExMi4wMjcgNTAuMDE5NFY1MC4wMjg4SDExMy41MjdWNTAuMDE5NEgxMTIuMDI3Wk0xMTIuMDI3IDUwLjAxVjUwLjAxOTRIMTEzLjUyN1Y1MC4wMUgxMTIuMDI3Wk0xMTIuMDI3IDUwLjAwMDZWNTAuMDFIMTEzLjUyN1Y1MC4wMDA2SDExMi4wMjdaTTExMi4wMjcgNDkuOTkxMlY1MC4wMDA2SDExMy41MjdWNDkuOTkxMkgxMTIuMDI3Wk0xMTIuMDI3IDQ5Ljk4MThWNDkuOTkxMkgxMTMuNTI3VjQ5Ljk4MThIMTEyLjAyN1pNMTEyLjAyNyA0OS45NzI0VjQ5Ljk4MThIMTEzLjUyN1Y0OS45NzI0SDExMi4wMjdaTTExMi4wMjcgNDkuOTYzVjQ5Ljk3MjRIMTEzLjUyN1Y0OS45NjNIMTEyLjAyN1pNMTEyLjAyNyA0OS45NTM2VjQ5Ljk2M0gxMTMuNTI3VjQ5Ljk1MzZIMTEyLjAyN1pNMTEyLjAyNyA0OS45NDQzVjQ5Ljk1MzZIMTEzLjUyN1Y0OS45NDQzSDExMi4wMjdaTTExMi4wMjcgNDkuOTM0OVY0OS45NDQzSDExMy41MjdWNDkuOTM0OUgxMTIuMDI3Wk0xMTIuMDI3IDQ5LjkyNTVWNDkuOTM0OUgxMTMuNTI3VjQ5LjkyNTVIMTEyLjAyN1pNMTEyLjAyNyA0OS45MTYyVjQ5LjkyNTVIMTEzLjUyN1Y0OS45MTYySDExMi4wMjdaTTExMi4wMjcgNDkuOTA2OFY0OS45MTYySDExMy41MjdWNDkuOTA2OEgxMTIuMDI3Wk0xMTIuMDI3IDQ5Ljg5NzVWNDkuOTA2OEgxMTMuNTI3VjQ5Ljg5NzVIMTEyLjAyN1pNMTEyLjAyNyA0OS44ODgyVjQ5Ljg5NzVIMTEzLjUyN1Y0OS44ODgySDExMi4wMjdaTTExMi4wMjcgNDkuODc4OFY0OS44ODgySDExMy41MjdWNDkuODc4OEgxMTIuMDI3Wk0xMTIuMDI3IDQ5Ljg2OTVWNDkuODc4OEgxMTMuNTI3VjQ5Ljg2OTVIMTEyLjAyN1pNMTEyLjAyNyA0OS44NjAyVjQ5Ljg2OTVIMTEzLjUyN1Y0OS44NjAySDExMi4wMjdaTTExMi4wMjcgNDkuODUwOVY0OS44NjAySDExMy41MjdWNDkuODUwOUgxMTIuMDI3Wk0xMTIuMDI3IDQ5Ljg0MTZWNDkuODUwOUgxMTMuNTI3VjQ5Ljg0MTZIMTEyLjAyN1pNMTEyLjAyNyA0OS44MzIzVjQ5Ljg0MTZIMTEzLjUyN1Y0OS44MzIzSDExMi4wMjdaTTExMi4wMjcgNDkuODIzVjQ5LjgzMjNIMTEzLjUyN1Y0OS44MjNIMTEyLjAyN1pNMTEyLjAyNyA0OS44MTM3VjQ5LjgyM0gxMTMuNTI3VjQ5LjgxMzdIMTEyLjAyN1pNMTEyLjAyNyA0OS44MDQ0VjQ5LjgxMzdIMTEzLjUyN1Y0OS44MDQ0SDExMi4wMjdaTTExMi4wMjcgNDkuNzk1MlY0OS44MDQ0SDExMy41MjdWNDkuNzk1MkgxMTIuMDI3Wk0xMTIuMDI3IDQ5Ljc4NTlWNDkuNzk1MkgxMTMuNTI3VjQ5Ljc4NTlIMTEyLjAyN1pNMTEyLjAyNyA0OS43NzY2VjQ5Ljc4NTlIMTEzLjUyN1Y0OS43NzY2SDExMi4wMjdaTTExMi4wMjcgNDkuNzY3NFY0OS43NzY2SDExMy41MjdWNDkuNzY3NEgxMTIuMDI3Wk0xMTIuMDI3IDQ5Ljc1ODFWNDkuNzY3NEgxMTMuNTI3VjQ5Ljc1ODFIMTEyLjAyN1pNMTEyLjAyNyA0OS43NDg5VjQ5Ljc1ODFIMTEzLjUyN1Y0OS43NDg5SDExMi4wMjdaTTExMi4wMjcgNDkuNzM5NlY0OS43NDg5SDExMy41MjdWNDkuNzM5NkgxMTIuMDI3Wk0xMTIuMDI3IDQ5LjczMDRWNDkuNzM5NkgxMTMuNTI3VjQ5LjczMDRIMTEyLjAyN1pNMTEyLjAyNyA0OS43MjEyVjQ5LjczMDRIMTEzLjUyN1Y0OS43MjEySDExMi4wMjdaTTExMi4wMjcgNDkuNzEyVjQ5LjcyMTJIMTEzLjUyN1Y0OS43MTJIMTEyLjAyN1pNMTEyLjAyNyA0OS43MDI3VjQ5LjcxMkgxMTMuNTI3VjQ5LjcwMjdIMTEyLjAyN1pNMTEyLjAyNyA0OS42OTM1VjQ5LjcwMjdIMTEzLjUyN1Y0OS42OTM1SDExMi4wMjdaTTExMi4wMjcgNDkuNjg0M1Y0OS42OTM1SDExMy41MjdWNDkuNjg0M0gxMTIuMDI3Wk0xMTIuMDI3IDQ5LjY3NTFWNDkuNjg0M0gxMTMuNTI3VjQ5LjY3NTFIMTEyLjAyN1pNMTEyLjAyNyA0OS42NjU5VjQ5LjY3NTFIMTEzLjUyN1Y0OS42NjU5SDExMi4wMjdaTTExMi4wMjcgNDkuNjU2N1Y0OS42NjU5SDExMy41MjdWNDkuNjU2N0gxMTIuMDI3Wk0xMTIuMDI3IDQ5LjY0NzZWNDkuNjU2N0gxMTMuNTI3VjQ5LjY0NzZIMTEyLjAyN1pNMTEyLjAyNyA0OS42Mzg0VjQ5LjY0NzZIMTEzLjUyN1Y0OS42Mzg0SDExMi4wMjdaTTExMi4wMjcgNDkuNjI5MlY0OS42Mzg0SDExMy41MjdWNDkuNjI5MkgxMTIuMDI3Wk0xMTIuMDI3IDQ5LjYyMDFWNDkuNjI5MkgxMTMuNTI3VjQ5LjYyMDFIMTEyLjAyN1pNMTEyLjAyNyA0OS42MTA5VjQ5LjYyMDFIMTEzLjUyN1Y0OS42MTA5SDExMi4wMjdaTTExMi4wMjcgNDkuNjAxOFY0OS42MTA5SDExMy41MjdWNDkuNjAxOEgxMTIuMDI3Wk0xMTIuMDI3IDQ5LjU5MjZWNDkuNjAxOEgxMTMuNTI3VjQ5LjU5MjZIMTEyLjAyN1pNMTEyLjAyNyA0OS41ODM1VjQ5LjU5MjZIMTEzLjUyN1Y0OS41ODM1SDExMi4wMjdaTTExMi4wMjcgNDkuNTc0M1Y0OS41ODM1SDExMy41MjdWNDkuNTc0M0gxMTIuMDI3Wk0xMTIuMDI3IDQ5LjU2NTJWNDkuNTc0M0gxMTMuNTI3VjQ5LjU2NTJIMTEyLjAyN1pNMTEyLjAyNyA0OS41NTYxVjQ5LjU2NTJIMTEzLjUyN1Y0OS41NTYxSDExMi4wMjdaTTExMi4wMjcgNDkuNTQ3VjQ5LjU1NjFIMTEzLjUyN1Y0OS41NDdIMTEyLjAyN1pNMTEyLjAyNyA0OS41Mzc5VjQ5LjU0N0gxMTMuNTI3VjQ5LjUzNzlIMTEyLjAyN1pNMTEyLjAyNyA0OS41Mjg4VjQ5LjUzNzlIMTEzLjUyN1Y0OS41Mjg4SDExMi4wMjdaTTExMi4wMjcgNDkuNTE5N1Y0OS41Mjg4SDExMy41MjdWNDkuNTE5N0gxMTIuMDI3Wk0xMTIuMDI3IDQ5LjUxMDZWNDkuNTE5N0gxMTMuNTI3VjQ5LjUxMDZIMTEyLjAyN1pNMTEyLjAyNyA0OS41MDE1VjQ5LjUxMDZIMTEzLjUyN1Y0OS41MDE1SDExMi4wMjdaTTExMi4wMjcgNDkuNDkyNFY0OS41MDE1SDExMy41MjdWNDkuNDkyNEgxMTIuMDI3Wk0xMTIuMDI3IDQ5LjQ4MzNWNDkuNDkyNEgxMTMuNTI3VjQ5LjQ4MzNIMTEyLjAyN1pNMTEyLjAyNyA0OS40NzQzVjQ5LjQ4MzNIMTEzLjUyN1Y0OS40NzQzSDExMi4wMjdaTTExMi4wMjcgNDkuNDY1MlY0OS40NzQzSDExMy41MjdWNDkuNDY1MkgxMTIuMDI3Wk0xMTIuMDI3IDQ5LjQ1NjFWNDkuNDY1MkgxMTMuNTI3VjQ5LjQ1NjFIMTEyLjAyN1pNMTEyLjAyNyA0OS40NDcxVjQ5LjQ1NjFIMTEzLjUyN1Y0OS40NDcxSDExMi4wMjdaTTExMi4wMjcgNDkuNDM4VjQ5LjQ0NzFIMTEzLjUyN1Y0OS40MzhIMTEyLjAyN1pNMTEyLjAyNyA0OS40MjlWNDkuNDM4SDExMy41MjdWNDkuNDI5SDExMi4wMjdaTTExMi4wMjcgNDkuNDJWNDkuNDI5SDExMy41MjdWNDkuNDJIMTEyLjAyN1pNMTEyLjAyNyA0OS40MTA5VjQ5LjQySDExMy41MjdWNDkuNDEwOUgxMTIuMDI3Wk0xMTIuMDI3IDQ5LjQwMTlWNDkuNDEwOUgxMTMuNTI3VjQ5LjQwMTlIMTEyLjAyN1pNMTEyLjAyNyA0OS4zOTI5VjQ5LjQwMTlIMTEzLjUyN1Y0OS4zOTI5SDExMi4wMjdaTTExMi4wMjcgNDkuMzgzOVY0OS4zOTI5SDExMy41MjdWNDkuMzgzOUgxMTIuMDI3Wk0xMTIuMDI3IDQ5LjM3NDlWNDkuMzgzOUgxMTMuNTI3VjQ5LjM3NDlIMTEyLjAyN1pNMTEyLjAyNyA0OS4zNjU5VjQ5LjM3NDlIMTEzLjUyN1Y0OS4zNjU5SDExMi4wMjdaTTExMi4wMjcgNDkuMzU2OVY0OS4zNjU5SDExMy41MjdWNDkuMzU2OUgxMTIuMDI3Wk0xMTIuMDI3IDQ5LjM0NzlWNDkuMzU2OUgxMTMuNTI3VjQ5LjM0NzlIMTEyLjAyN1pNMTEyLjAyNyA0OS4zMzg5VjQ5LjM0NzlIMTEzLjUyN1Y0OS4zMzg5SDExMi4wMjdaTTExMi4wMjcgNDkuMzNWNDkuMzM4OUgxMTMuNTI3VjQ5LjMzSDExMi4wMjdaTTExMi4wMjcgNDkuMzIxVjQ5LjMzSDExMy41MjdWNDkuMzIxSDExMi4wMjdaTTExMi4wMjcgNDkuMzEyVjQ5LjMyMUgxMTMuNTI3VjQ5LjMxMkgxMTIuMDI3Wk0xMTIuMDI3IDQ5LjMwMzFWNDkuMzEySDExMy41MjdWNDkuMzAzMUgxMTIuMDI3Wk0xMTIuMDI3IDQ5LjI5NDFWNDkuMzAzMUgxMTMuNTI3VjQ5LjI5NDFIMTEyLjAyN1pNMTEyLjAyNyA0OS4yODUyVjQ5LjI5NDFIMTEzLjUyN1Y0OS4yODUySDExMi4wMjdaTTExMi4wMjcgNDkuMjc2MlY0OS4yODUySDExMy41MjdWNDkuMjc2MkgxMTIuMDI3Wk0xMTIuMDI3IDQ5LjI2NzNWNDkuMjc2MkgxMTMuNTI3VjQ5LjI2NzNIMTEyLjAyN1pNMTEyLjAyNyA0OS4yNTg0VjQ5LjI2NzNIMTEzLjUyN1Y0OS4yNTg0SDExMi4wMjdaTTExMi4wMjcgNDkuMjQ5NVY0OS4yNTg0SDExMy41MjdWNDkuMjQ5NUgxMTIuMDI3Wk0xMTIuMDI3IDQ5LjI0MDZWNDkuMjQ5NUgxMTMuNTI3VjQ5LjI0MDZIMTEyLjAyN1pNMTEyLjAyNyA0OS4yMzE2VjQ5LjI0MDZIMTEzLjUyN1Y0OS4yMzE2SDExMi4wMjdaTTExMi4wMjcgNDkuMjIyN1Y0OS4yMzE2SDExMy41MjdWNDkuMjIyN0gxMTIuMDI3Wk0xMTIuMDI3IDQ5LjIxMzhWNDkuMjIyN0gxMTMuNTI3VjQ5LjIxMzhIMTEyLjAyN1pNMTEyLjAyNyA0OS4yMDVWNDkuMjEzOEgxMTMuNTI3VjQ5LjIwNUgxMTIuMDI3Wk0xMTIuMDI3IDQ5LjE5NjFWNDkuMjA1SDExMy41MjdWNDkuMTk2MUgxMTIuMDI3Wk0xMTIuMDI3IDQ5LjE4NzJWNDkuMTk2MUgxMTMuNTI3VjQ5LjE4NzJIMTEyLjAyN1pNMTEyLjAyNyA0OS4xNzgzVjQ5LjE4NzJIMTEzLjUyN1Y0OS4xNzgzSDExMi4wMjdaTTExMi4wMjcgNDkuMTY5NFY0OS4xNzgzSDExMy41MjdWNDkuMTY5NEgxMTIuMDI3WlwiLFxuICBmaWxsOiBcIiMzQjM1NTJcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEwOC4xODkgNjEuODQ3N0gxMjcuNTM3QzEyOS4zMzEgNjEuODQ3NyAxMzAuNzg3IDYzLjMwMjcgMTMwLjc4NyA2NS4wOTc3VjY1LjQzOTFDMTMwLjc4NyA2Ny4yMzQgMTI5LjMzMSA2OC42ODkxIDEyNy41MzcgNjguNjg5MUgxMDguMTg5VjYxLjg0NzdaXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMDguMTg5IDg1LjAxODZIMTI3LjUzN0MxMjkuMzMxIDg1LjAxODYgMTMwLjc4NyA4Ni40NzM2IDEzMC43ODcgODguMjY4NlY4OC42MUMxMzAuNzg3IDkwLjQwNDkgMTI5LjMzMSA5MS44NiAxMjcuNTM3IDkxLjg2SDEwOC4xODlWODUuMDE4NlpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTU4LjE0MDEgNTAuMjY4NkM1OC4xNDAxIDQ4LjQ3MzYgNTkuNTk1MiA0Ny4wMTg2IDYxLjM5MDEgNDcuMDE4Nkg4NS4zNzE4VjEwNi42ODlINjEuMzkwMUM1OS41OTUyIDEwNi42ODkgNTguMTQwMSAxMDUuMjM0IDU4LjE0MDEgMTAzLjQzOVY1MC4yNjg2WlwiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTYxLjA5NzcgNTEuOTc1NkM2MS4wOTc3IDUwLjg3MSA2MS45OTMxIDQ5Ljk3NTYgNjMuMDk3NyA0OS45NzU2TDgyLjQxNDcgNDkuOTc1NlYxMDMuNzMySDYzLjA5NzdDNjEuOTkzMSAxMDMuNzMyIDYxLjA5NzcgMTAyLjgzNiA2MS4wOTc3IDEwMS43MzJWNTEuOTc1NlpcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMDVcIlxufSkpO1xuZXhwb3J0IGRlZmF1bHQgUGx1ZzsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGNvbnN0IFJvY2tldCA9ICh7XG4gIHdpZHRoID0gMjQ5LFxuICBoZWlnaHQgPSAxNzlcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgd2lkdGg6IHdpZHRoLFxuICBoZWlnaHQ6IGhlaWdodCxcbiAgdmlld0JveDogXCIwIDAgMjQ5IDE3OVwiLFxuICB2ZXJzaW9uOiBcIjEuMVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRlZnNcIiwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gIHgxOiBcIjUwJVwiLFxuICB5MTogXCIwJVwiLFxuICB4MjogXCI1MCVcIixcbiAgeTI6IFwiMTAwJVwiLFxuICBpZDogXCJsaW5lYXJHcmFkaWVudC0xXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLCB7XG4gIHN0b3BDb2xvcjogXCIjRkZBQjg2XCIsXG4gIG9mZnNldDogXCIwJVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIsIHtcbiAgc3RvcENvbG9yOiBcIiNGRkI0NEVcIixcbiAgb2Zmc2V0OiBcIjEwMCVcIlxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgeDE6IFwiNTAlXCIsXG4gIHkxOiBcIjAlXCIsXG4gIHgyOiBcIjUwJVwiLFxuICB5MjogXCIxMDAlXCIsXG4gIGlkOiBcImxpbmVhckdyYWRpZW50LTJcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIsIHtcbiAgc3RvcENvbG9yOiBcIiNGRkFCODZcIixcbiAgb2Zmc2V0OiBcIjAlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN0b3BcIiwge1xuICBzdG9wQ29sb3I6IFwiI0ZGQjQ0RVwiLFxuICBvZmZzZXQ6IFwiMTAwJVwiXG59KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZWFyR3JhZGllbnRcIiwge1xuICB4MTogXCI1MCVcIixcbiAgeTE6IFwiMCVcIixcbiAgeDI6IFwiNTAlXCIsXG4gIHkyOiBcIjEwMCVcIixcbiAgaWQ6IFwibGluZWFyR3JhZGllbnQtM1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN0b3BcIiwge1xuICBzdG9wQ29sb3I6IFwiI0ZGRjJCMVwiLFxuICBvZmZzZXQ6IFwiMCVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLCB7XG4gIHN0b3BDb2xvcjogXCIjRkZFQTdFXCIsXG4gIG9mZnNldDogXCIxMDAlXCJcbn0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gIHgxOiBcIjUwJVwiLFxuICB5MTogXCIwJVwiLFxuICB4MjogXCI1MCVcIixcbiAgeTI6IFwiMTAwJVwiLFxuICBpZDogXCJsaW5lYXJHcmFkaWVudC00XCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLCB7XG4gIHN0b3BDb2xvcjogXCIjRkZGMkIxXCIsXG4gIG9mZnNldDogXCIwJVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIsIHtcbiAgc3RvcENvbG9yOiBcIiNGRkNEN0VcIixcbiAgb2Zmc2V0OiBcIjEwMCVcIlxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgeDE6IFwiNTAlXCIsXG4gIHkxOiBcIjAlXCIsXG4gIHgyOiBcIjUwJVwiLFxuICB5MjogXCIxMDAlXCIsXG4gIGlkOiBcImxpbmVhckdyYWRpZW50LTVcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIsIHtcbiAgc3RvcENvbG9yOiBcIiNGRkFCODZcIixcbiAgb2Zmc2V0OiBcIjAlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN0b3BcIiwge1xuICBzdG9wQ29sb3I6IFwiI0ZGQjQ0RVwiLFxuICBvZmZzZXQ6IFwiMTAwJVwiXG59KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZWFyR3JhZGllbnRcIiwge1xuICB4MTogXCI1MCVcIixcbiAgeTE6IFwiMCVcIixcbiAgeDI6IFwiNTAlXCIsXG4gIHkyOiBcIjEwMCVcIixcbiAgaWQ6IFwibGluZWFyR3JhZGllbnQtNlwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN0b3BcIiwge1xuICBzdG9wQ29sb3I6IFwiI0ZGRjJCMVwiLFxuICBvZmZzZXQ6IFwiMCVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLCB7XG4gIHN0b3BDb2xvcjogXCIjRkZFQTdFXCIsXG4gIG9mZnNldDogXCIxMDAlXCJcbn0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gIHgxOiBcIjUwJVwiLFxuICB5MTogXCIwJVwiLFxuICB4MjogXCI1MCVcIixcbiAgeTI6IFwiMTAwJVwiLFxuICBpZDogXCJsaW5lYXJHcmFkaWVudC03XCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3RvcFwiLCB7XG4gIHN0b3BDb2xvcjogXCIjRkZGMkIxXCIsXG4gIG9mZnNldDogXCIwJVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIsIHtcbiAgc3RvcENvbG9yOiBcIiNGRkNEN0VcIixcbiAgb2Zmc2V0OiBcIjEwMCVcIlxufSkpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgaWQ6IFwiTWFpbi1UZW1wbGF0ZXNcIixcbiAgc3Ryb2tlOiBcIm5vbmVcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMVwiLFxuICBmaWxsOiBcIm5vbmVcIixcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICBpZDogXCJSb2NrZXQtd2l0aC1tb3Rpb25cIixcbiAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxNDAuNTAwMDAwLCA3NC4wMDAwMDApIHJvdGF0ZSgxNy4wMDAwMDApIHRyYW5zbGF0ZSgtMTQwLjUwMDAwMCwgLTc0LjAwMDAwMCkgdHJhbnNsYXRlKDE5LjAwMDAwMCwgLTQwLjAwMDAwMClcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgaWQ6IFwiUm9ja2V0XCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMTM3LjY2MjM0NSwgMTEyLjg1NTc0MCkgcm90YXRlKDcuMDAwMDAwKSB0cmFuc2xhdGUoLTEzNy42NjIzNDUsIC0xMTIuODU1NzQwKSB0cmFuc2xhdGUoNDQuMTYyMzQ1LCAxMS4zNTU3NDApXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gIGlkOiBcIkdyb3VwLTE1XCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZWxsaXBzZVwiLCB7XG4gIGlkOiBcIk92YWwtQ29weS0yOVwiLFxuICBmaWxsOiBcIiNGNEU4REJcIixcbiAgY3g6IFwiMTE2LjM3OTYyNVwiLFxuICBjeTogXCI1Ny41OTMyOTYyXCIsXG4gIHJ4OiBcIjIuMDEzNDg4MzNcIixcbiAgcnk6IFwiMi4wMTM3NTE2MlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJlbGxpcHNlXCIsIHtcbiAgaWQ6IFwiT3ZhbC1Db3B5LTMxXCIsXG4gIGZpbGw6IFwiI0Y0RThEQlwiLFxuICBjeDogXCIzNC4yMjkzMDE2XCIsXG4gIGN5OiBcIjE1NS4wNTg4NzRcIixcbiAgcng6IFwiMi4wMTM0ODgzM1wiLFxuICByeTogXCIyLjAxMzc1MTYyXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImVsbGlwc2VcIiwge1xuICBpZDogXCJPdmFsLUNvcHktMTlcIixcbiAgZmlsbDogXCIjRjRFOERCXCIsXG4gIGN4OiBcIjE2MC4yNzM2NzFcIixcbiAgY3k6IFwiMTQwLjE1NzExMlwiLFxuICByeDogXCI0LjAyNjk3NjY1XCIsXG4gIHJ5OiBcIjQuMDI3NTAzMjNcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZWxsaXBzZVwiLCB7XG4gIGlkOiBcIk92YWwtQ29weS0yM1wiLFxuICBmaWxsOiBcIiNGNEU4REJcIixcbiAgY3g6IFwiNzQuMDk2MzcwNFwiLFxuICBjeTogXCI1MS41NTIwNDE0XCIsXG4gIHJ4OiBcIjQuMDI2OTc2NjVcIixcbiAgcnk6IFwiNC4wMjc1MDMyM1wiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgaWQ6IFwiR3JvdXAtMTNcIixcbiAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg3LjQwNDAyMywgMTM2Ljg5ODcyMilcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjkuMjkzMzY3NSw2Mi40MDUxODExIEMzNS44Mjk2NTM4LDYyLjQwNTE4MTEgNDEuMTI4MDEzOSw1Ni45ODEzODkgNDEuMTI3NTg2LDUwLjI4OTg2ODggQzQxLjEyNzE1ODEsNDMuNTk4MzQ4NSAzMy4xMjg2ODE3LDAuNTk4NTM2MTUyIDI5LjI4OTQxNTEsMC41OTg1MzYxNTIgQzI1LjQ1MDE0ODYsMC41OTg1MzYxNTIgMTcuNDU3MTcxNiw0My41OTY4MzQ4IDE3LjQ1NzU5OTUsNTAuMjg4MzU1MSBDMTcuNDU4MDI3NCw1Ni45Nzk4NzUzIDIyLjc1NzA4MTIsNjIuNDA1MTgxMSAyOS4yOTMzNjc1LDYyLjQwNTE4MTEgWlwiLFxuICBpZDogXCJPdmFsLUNvcHktMzhcIixcbiAgZmlsbDogXCJ1cmwoI2xpbmVhckdyYWRpZW50LTIpXCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMjkuMjkyNTkzLCAzMS41MDE4NTkpIHJvdGF0ZSgtMTQxLjAwMDAwMCkgdHJhbnNsYXRlKC0yOS4yOTI1OTMsIC0zMS41MDE4NTkpIFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMzEuNzE5OTY3Miw1Mi45NTkzNDI4IEMzNi4wNzc0OTE0LDUyLjk1OTM0MjggMzkuNjA5NzQzOSw0OS41Mzc1MzAzIDM5LjYwOTQ3MzksNDUuMzE1ODg4MyBDMzkuNjA5MjA0LDQxLjA5NDI0NjMgMzYuMjI1OTE3Niw1LjIwNjQxMDE4IDMxLjk1ODU4MDcsNS4yMDY0MTAxOCBDMjcuNjkxMjQzNyw1LjIwNjQxMDE4IDIzLjgyOTIxMyw0MS4wOTMyMzcyIDIzLjgyOTQ4MjksNDUuMzE0ODc5MiBDMjMuODI5NzUyOSw0OS41MzY1MjEyIDI3LjM2MjQ0Myw1Mi45NTkzNDI4IDMxLjcxOTk2NzIsNTIuOTU5MzQyOCBaXCIsXG4gIGlkOiBcIk92YWwtQ29weS0zOVwiLFxuICBmaWxsOiBcInVybCgjbGluZWFyR3JhZGllbnQtMylcIixcbiAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgzMS43MTk0NzgsIDI5LjA4Mjg3Nikgcm90YXRlKC0xNDEuMDAwMDAwKSB0cmFuc2xhdGUoLTMxLjcxOTQ3OCwgLTI5LjA4Mjg3NikgXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0zNC45OTY4NzczLDQxLjk3Mjc2ODIgQzM4LjU1NTUyMjEsNDEuOTcyNzY4MiA0MS40NDAyMDYsMzkuMzUwOTY1NyA0MS40Mzk5OTkxLDM2LjExNjMwMDMgQzQxLjQzOTc5MjMsMzIuODgxNjM0OCAzOS4xNTIzNzg5LDguMTQzNTMxMTEgMzUuNTkzNzM0Miw4LjE0MzUzMTExIEMzMi4wMzUwODk0LDguMTQzNTMxMTEgMjguNTUyNzk5NiwzMi44ODA4MTA3IDI4LjU1MzAwNjUsMzYuMTE1NDc2MiBDMjguNTUzMjEzMywzOS4zNTAxNDE2IDMxLjQzODIzMjYsNDEuOTcyNzY4MiAzNC45OTY4NzczLDQxLjk3Mjc2ODIgWlwiLFxuICBpZDogXCJPdmFsLUNvcHktMzlcIixcbiAgZmlsbDogXCJ1cmwoI2xpbmVhckdyYWRpZW50LTQpXCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMzQuOTk2NTAzLCAyNS4wNTgxNTApIHJvdGF0ZSgtMTQxLjAwMDAwMCkgdHJhbnNsYXRlKC0zNC45OTY1MDMsIC0yNS4wNTgxNTApIFwiXG59KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gIGlkOiBcIkdyb3VwLTExXCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMTAyLjE3NTEzNiwgODkuMjUyOTE3KSByb3RhdGUoNDAuMDAwMDAwKSB0cmFuc2xhdGUoLTEwMi4xNzUxMzYsIC04OS4yNTI5MTcpIHRyYW5zbGF0ZSg1OS42NzUxMzYsIDguNzUyOTE3KVwiLFxuICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gIHN0cm9rZTogXCIjQzlEMUY2XCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuOTc0MjQ4OTNcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNjcuNzc3NzAyNCw0OS43NTAyNTE3IEw3MC45MzYyOTI1LDQzLjMwNjc2NTcgQzcxLjQxNjIxOTEsNDIuMzI3NzIxMSA3Mi41OTg5NDksNDEuOTIzMTA2MSA3My41Nzc5OTM1LDQyLjQwMzAzMjcgQzczLjk3MTExMDUsNDIuNTk1NzM4MiA3NC4yODkwMjEsNDIuOTEzNjQ4NyA3NC40ODE3MjY1LDQzLjMwNjc2NTcgTDc3LjY0MDMxNjYsNDkuNzUwMjUxNyBDNzguODk5OTY5NSw1Mi4zMTk5Mjg2IDc5LjU1NDg2OTgsNTUuMTQzNzg4NSA3OS41NTQ4Njk4LDU4LjAwNTU5OTkgTDc5LjU1NDg2OTgsMTUxLjM1ODEzNyBDNzkuNTU0ODY5OCwxNTEuOTAzMzExIDc5LjExMjkxOTIsMTUyLjM0NTI2MSA3OC41Njc3NDU0LDE1Mi4zNDUyNjEgTDY2Ljg1MDI3MzcsMTUyLjM0NTI2MSBDNjYuMzA1MDk5OSwxNTIuMzQ1MjYxIDY1Ljg2MzE0OTIsMTUxLjkwMzMxMSA2NS44NjMxNDkyLDE1MS4zNTgxMzcgTDY1Ljg2MzE0OTIsNTguMDA1NTk5OSBDNjUuODYzMTQ5Miw1NS4xNDM3ODg1IDY2LjUxODA0OTUsNTIuMzE5OTI4NiA2Ny43Nzc3MDI0LDQ5Ljc1MDI1MTcgWlwiLFxuICBpZDogXCJSZWN0YW5nbGVcIixcbiAgZmlsbDogXCIjRkZGRkZGXCIsXG4gIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk03LjkxNDQ1ODk1LDUwLjI0Nzk0ODkgTDExLjA3MzA0OTEsNDMuODA0NDYyOSBDMTEuNTUyOTc1Nyw0Mi44MjU0MTgzIDEyLjczNTcwNTUsNDIuNDIwODAzMyAxMy43MTQ3NTAxLDQyLjkwMDcyOTkgQzE0LjEwNzg2Nyw0My4wOTM0MzU0IDE0LjQyNTc3NzYsNDMuNDExMzQ1OSAxNC42MTg0ODMxLDQzLjgwNDQ2MjkgTDE3Ljc3NzA3MzIsNTAuMjQ3OTQ4OSBDMTkuMDM2NzI2MSw1Mi44MTc2MjU4IDE5LjY5MTYyNjQsNTUuNjQxNDg1NyAxOS42OTE2MjY0LDU4LjUwMzI5NzEgTDE5LjY5MTYyNjQsMTUxLjg1NTgzNCBDMTkuNjkxNjI2NCwxNTIuNDAxMDA4IDE5LjI0OTY3NTcsMTUyLjg0Mjk1OSAxOC43MDQ1MDE5LDE1Mi44NDI5NTkgTDYuOTg3MDMwMjEsMTUyLjg0Mjk1OSBDNi40NDE4NTY0MywxNTIuODQyOTU5IDUuOTk5OTA1NzUsMTUyLjQwMTAwOCA1Ljk5OTkwNTc1LDE1MS44NTU4MzQgTDUuOTk5OTA1NzUsNTguNTAzMjk3MSBDNS45OTk5MDU3NSw1NS42NDE0ODU3IDYuNjU0ODA2MDUsNTIuODE3NjI1OCA3LjkxNDQ1ODk1LDUwLjI0Nzk0ODkgWlwiLFxuICBpZDogXCJSZWN0YW5nbGUtQ29weS0xMVwiLFxuICBmaWxsOiBcIiNGRkZGRkZcIixcbiAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTMzLjA5MDYwMTEsMTEuMzU0MzAzIEwzOS40MDAyNjIzLDIuMjcyMzgyNSBDNDAuNjQ0NDkwNCwwLjQ4MTQ4MTEyNiA0My4xMDQ5NDksMC4wMzgzMTQ4ODUzIDQ0Ljg5NTg1MDQsMS4yODI1NDMgQzQ1LjI4MjExNzUsMS41NTA5MDE5NiA0NS42MTczMzA5LDEuODg2MTE1MzYgNDUuODg1Njg5OSwyLjI3MjM4MjUgTDUyLjE5NTM1MSwxMS4zNTQzMDMgQzU3LjI0OTk4MSwxOC42Mjk3NzI2IDU5Ljk1ODk3NTcsMjcuMjc2OTI4MSA1OS45NTg5NzU3LDM2LjEzNTkyMDIgTDU5Ljk1ODk3NTcsMTE2LjQyNzg2MiBMNTkuOTU4OTc1NywxMTYuNDI3ODYyIEwyNS4zMjY5NzY1LDExNi40Mjc4NjIgTDI1LjMyNjk3NjUsMzYuMTM1OTIwMiBDMjUuMzI2OTc2NSwyNy4yNzY5MjgxIDI4LjAzNTk3MTIsMTguNjI5NzcyNiAzMy4wOTA2MDExLDExLjM1NDMwMyBaXCIsXG4gIGlkOiBcIlJlY3RhbmdsZVwiLFxuICBmaWxsOiBcIiNGMEYxRjlcIixcbiAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTUxLjA3MDkzNDMsMTQ1Ljk0NTQzNiBMNTIuNDYxNjExMSw3OC40MzA2MDkgTDU3LjI3ODI3OTcsOTcuMTM0NTQzMSBDNTkuNTg0MTY5OSwxMDYuMDg4NzAyIDY0LjE3OTU1ODcsMTE0LjI4OTA2NyA3MC42MTMwNjUyLDEyMC45MzAxNTggTDc1LjEyOTI4MTIsMTI1LjU5MjA5NSBDNzguNzI2Mzg4NiwxMjkuMzA1MjY3IDgxLjE2NzQ2NDEsMTMzLjk4MzM2NCA4Mi4xNTU4MTksMTM5LjA1NzgwOCBMODMuMjUxMTg2MiwxNDQuNjgxNjc4IEM4My4yNDkzNDU2LDE0NS4wNzU1MzcgODMuMTU1MDI0NiwxNDUuNDA2MzE4IDgyLjk2MzY3OTIsMTQ1LjYzODUyOCBDODIuNzk4NDc0NywxNDUuODM5MDE0IDgyLjU2MDcwODQsMTQ1Ljk0NTQzNiA4Mi4yOTkzOTI1LDE0NS45NDU0MzYgTDUxLjA3MDkzNDMsMTQ1Ljk0NTQzNiBaXCIsXG4gIGlkOiBcIlBhdGgtM1wiLFxuICBmaWxsOiBcIiNGMEYxRjlcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEuNDcxNTAyMjksMTQ1LjQyNTgwNiBMMi44NjIxNzkxMiw3Ny45MTA5Nzk3IEw3LjY3ODg0NzczLDk2LjYxNDkxMzcgQzkuOTg0NzM3ODksMTA1LjU2OTA3MyAxNC41ODAxMjY3LDExMy43Njk0MzggMjEuMDEzNjMzMiwxMjAuNDEwNTI5IEwyNS41Mjk4NDkyLDEyNS4wNzI0NjYgQzI5LjEyNjk1NjYsMTI4Ljc4NTYzOCAzMS41NjgwMzIxLDEzMy40NjM3MzQgMzIuNTU2Mzg3LDEzOC41MzgxNzkgTDMzLjY1MTc1NDMsMTQ0LjE2MjA0OSBDMzMuNjQ5OTEzNiwxNDQuNTU1OTA3IDMzLjU1NTU5MjYsMTQ0Ljg4NjY4OSAzMy4zNjQyNDcyLDE0NS4xMTg4OTkgQzMzLjE5OTA0MjcsMTQ1LjMxOTM4NSAzMi45NjEyNzY0LDE0NS40MjU4MDYgMzIuNjk5OTYwNSwxNDUuNDI1ODA2IEwxLjQ3MTUwMjI5LDE0NS40MjU4MDYgWlwiLFxuICBpZDogXCJQYXRoLTMtQ29weVwiLFxuICBmaWxsOiBcIiNGMEYxRjlcIixcbiAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxNy43Nzk4MzUsIDEwOC41NTQ0MDApIHNjYWxlKC0xLCAxKSB0cmFuc2xhdGUoLTE3Ljc3OTgzNSwgLTEwOC41NTQ0MDApIFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMzQuMTMyMTE2LDU4Ljk3MDY0NzEgTDM4LjY3NDk1MTgsNTAuNDM3MTMyNSBDMzkuOTU1ODc1NCw0OC4wMzA5NzQ2IDQyLjk0NDg0NTYsNDcuMTE4NzkxOSA0NS4zNTEwMDM2LDQ4LjM5OTcxNTUgQzQ2LjIxNzY3MzcsNDguODYxMDg5MyA0Ni45MjcwNDY4LDQ5LjU3MDQ2MjQgNDcuMzg4NDIwNiw1MC40MzcxMzI1IEw1MS45MzEyNTY0LDU4Ljk3MDY0NzEgQzUzLjc1NTcxMjQsNjIuMzk3ODA2NSA1NC43MDk5MTg1LDY2LjIyMDgzNzkgNTQuNzA5OTE4NSw3MC4xMDMzNzA3IEw1NC43MDk5MTg1LDE1MS45MzgzOTYgTDU0LjcwOTkxODUsMTUxLjkzODM5NiBMMzEuMzUzNDUzOSwxNTEuOTM4Mzk2IEwzMS4zNTM0NTM5LDcwLjEwMzM3MDcgQzMxLjM1MzQ1MzksNjYuMjIwODM3OSAzMi4zMDc2NTk5LDYyLjM5NzgwNjUgMzQuMTMyMTE2LDU4Ljk3MDY0NzEgWlwiLFxuICBpZDogXCJSZWN0YW5nbGUtMlwiLFxuICBmaWxsOiBcIiNGRkZGRkZcIixcbiAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTU5LjQyODA0ODksMTU1LjQyOTMxNyBMMjUuOTY0OTAzMywxNTUuNDI5MzE3IEwyNS45NjQ5MDMzLDE0Ni4zNDc2ODQgQzI1Ljk2NDkwMzMsMTQzLjgzOTg2IDI2Ljk4MTM5OTgsMTQxLjU2OTQ1MSAyOC42MjQ4NTIyLDEzOS45MjU5OTkgQzMwLjI2ODMwNDcsMTM4LjI4MjU0NyAzMi41Mzg3MTMxLDEzNy4yNjYwNSAzNS4wNDY1MzY5LDEzNy4yNjYwNSBMNTAuMzQ2NDE1MywxMzcuMjY2MDUgQzUyLjg1NDIzOTIsMTM3LjI2NjA1IDU1LjEyNDY0NzYsMTM4LjI4MjU0NyA1Ni43NjgxLDEzOS45MjU5OTkgQzU4LjQxMTU1MjUsMTQxLjU2OTQ1MSA1OS40MjgwNDg5LDE0My44Mzk4NiA1OS40MjgwNDg5LDE0Ni4zNDc2ODQgTDU5LjQyODA0ODksMTU1LjQyOTMxNyBaXCIsXG4gIGlkOiBcIlJlY3RhbmdsZVwiLFxuICBmaWxsOiBcIiNGRkZGRkZcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTQyLjk3MTY5MjEsMTI2LjI4MjM4OSBMNDIuOTcxNjkyMSwxNjAuMjY0NTExXCIsXG4gIGlkOiBcIkxpbmUtMlwiLFxuICBmaWxsOiBcIiNGMEYxRjlcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiXG59KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gIGlkOiBcIkdyb3VwLTE0XCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoNDUuOTA3NTM0LCAxNjIuNzExMTMxKVwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNy43MTg2LDM4LjY2MjU4NzggQzIxLjcyMjA3NTMsMzguNjYyNTg3OCAyNC45NjczMjA5LDM1LjM0MDUxNTEgMjQuOTY3MDU4OCwzMS4yNDE5NTkgQzI0Ljk2Njc5NjcsMjcuMTQzNDAyOCAxOS4zNTI3NjQ3LDAuODA2MDE3NzMzIDE3LjcxNjE3OTEsMC44MDYwMTc3MzMgQzE2LjA3OTU5MzYsMC44MDYwMTc3MzMgMTAuNDY4OTMsMjcuMTQyNDc1NyAxMC40NjkxOTIsMzEuMjQxMDMxOCBDMTAuNDY5NDU0MSwzNS4zMzk1ODggMTMuNzE1MTI0NiwzOC42NjI1ODc4IDE3LjcxODYsMzguNjYyNTg3OCBaXCIsXG4gIGlkOiBcIk92YWxcIixcbiAgZmlsbDogXCJ1cmwoI2xpbmVhckdyYWRpZW50LTUpXCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMTcuNzE4MTI1LCAxOS43MzQzMDMpIHJvdGF0ZSgtMTQxLjAwMDAwMCkgdHJhbnNsYXRlKC0xNy43MTgxMjUsIC0xOS43MzQzMDMpIFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTkuODk5MDE3NiwzMC45MTY4NjIzIEMyMi41NjgwMDEyLDMwLjkxNjg2MjMgMjQuNzMxNTA1OCwyOC44MjEwMDIyIDI0LjczMTM0MDUsMjYuMjM1MjQ2NSBDMjQuNzMxMTc1MSwyMy42NDk0OTA3IDIzLjAxNTUzNywzLjg3NDE0MzI0IDIwLjM0NjU1MzQsMy44NzQxNDMyNCBDMTcuNjc3NTY5OSwzLjg3NDE0MzI0IDE1LjA2NTkzMDYsMjMuNjQ4ODcyNiAxNS4wNjYwOTYsMjYuMjM0NjI4NCBDMTUuMDY2MjYxMywyOC44MjAzODQxIDE3LjIzMDAzNDEsMzAuOTE2ODYyMyAxOS44OTkwMTc2LDMwLjkxNjg2MjMgWlwiLFxuICBpZDogXCJPdmFsLUNvcHktMzVcIixcbiAgZmlsbDogXCJ1cmwoI2xpbmVhckdyYWRpZW50LTYpXCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMTkuODk4NzE4LCAxNy4zOTU1MDMpIHJvdGF0ZSgtMTQxLjAwMDAwMCkgdHJhbnNsYXRlKC0xOS44OTg3MTgsIC0xNy4zOTU1MDMpIFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjEuNTE3MzczNSwyNS40MzE0MTY2IEMyMy41MTkxMTEyLDI1LjQzMTQxNjYgMjUuMTQxNzQwNCwyMy44NzA4MDY1IDI1LjE0MTYxNzMsMjEuOTQ1NDEwNCBDMjUuMTQxNDk0MiwyMC4wMjAwMTQzIDIzLjg1NDc3MjQsNS4yOTQ5NjQ3NyAyMS44NTMwMzQ3LDUuMjk0OTY0NzcgQzE5Ljg1MTI5Nyw1LjI5NDk2NDc3IDE3Ljg5MjU2MDgsMjAuMDE5NTUwNyAxNy44OTI2ODM5LDIxLjk0NDk0NjggQzE3Ljg5MjgwNzEsMjMuODcwMzQyOSAxOS41MTU2MzU5LDI1LjQzMTQxNjYgMjEuNTE3MzczNSwyNS40MzE0MTY2IFpcIixcbiAgaWQ6IFwiT3ZhbC1Db3B5LTQwXCIsXG4gIGZpbGw6IFwidXJsKCNsaW5lYXJHcmFkaWVudC03KVwiLFxuICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDIxLjUxNzE1MSwgMTUuMzYzMTkxKSByb3RhdGUoLTE0MS4wMDAwMDApIHRyYW5zbGF0ZSgtMjEuNTE3MTUxLCAtMTUuMzYzMTkxKSBcIlxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICBpZDogXCJHcm91cC0xNC1Db3B5XCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMC4wMDAwMDAsIDEyNC4wNDcxMDApXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE3LjcxODYsMzguNjYyNTg3OCBDMjEuNzIyMDc1MywzOC42NjI1ODc4IDI0Ljk2NzMyMDksMzUuMzQwNTE1MSAyNC45NjcwNTg4LDMxLjI0MTk1OSBDMjQuOTY2Nzk2NywyNy4xNDM0MDI4IDE5LjM1Mjc2NDcsMC44MDYwMTc3MzMgMTcuNzE2MTc5MSwwLjgwNjAxNzczMyBDMTYuMDc5NTkzNiwwLjgwNjAxNzczMyAxMC40Njg5MywyNy4xNDI0NzU3IDEwLjQ2OTE5MiwzMS4yNDEwMzE4IEMxMC40Njk0NTQxLDM1LjMzOTU4OCAxMy43MTUxMjQ2LDM4LjY2MjU4NzggMTcuNzE4NiwzOC42NjI1ODc4IFpcIixcbiAgaWQ6IFwiT3ZhbFwiLFxuICBmaWxsOiBcInVybCgjbGluZWFyR3JhZGllbnQtNSlcIixcbiAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxNy43MTgxMjUsIDE5LjczNDMwMykgcm90YXRlKC0xNDEuMDAwMDAwKSB0cmFuc2xhdGUoLTE3LjcxODEyNSwgLTE5LjczNDMwMykgXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xOS44OTkwMTc2LDMwLjkxNjg2MjMgQzIyLjU2ODAwMTIsMzAuOTE2ODYyMyAyNC43MzE1MDU4LDI4LjgyMTAwMjIgMjQuNzMxMzQwNSwyNi4yMzUyNDY1IEMyNC43MzExNzUxLDIzLjY0OTQ5MDcgMjMuMDE1NTM3LDMuODc0MTQzMjQgMjAuMzQ2NTUzNCwzLjg3NDE0MzI0IEMxNy42Nzc1Njk5LDMuODc0MTQzMjQgMTUuMDY1OTMwNiwyMy42NDg4NzI2IDE1LjA2NjA5NiwyNi4yMzQ2Mjg0IEMxNS4wNjYyNjEzLDI4LjgyMDM4NDEgMTcuMjMwMDM0MSwzMC45MTY4NjIzIDE5Ljg5OTAxNzYsMzAuOTE2ODYyMyBaXCIsXG4gIGlkOiBcIk92YWwtQ29weS0zNVwiLFxuICBmaWxsOiBcInVybCgjbGluZWFyR3JhZGllbnQtNilcIixcbiAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxOS44OTg3MTgsIDE3LjM5NTUwMykgcm90YXRlKC0xNDEuMDAwMDAwKSB0cmFuc2xhdGUoLTE5Ljg5ODcxOCwgLTE3LjM5NTUwMykgXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0yMS41MTczNzM1LDI1LjQzMTQxNjYgQzIzLjUxOTExMTIsMjUuNDMxNDE2NiAyNS4xNDE3NDA0LDIzLjg3MDgwNjUgMjUuMTQxNjE3MywyMS45NDU0MTA0IEMyNS4xNDE0OTQyLDIwLjAyMDAxNDMgMjMuODU0NzcyNCw1LjI5NDk2NDc3IDIxLjg1MzAzNDcsNS4yOTQ5NjQ3NyBDMTkuODUxMjk3LDUuMjk0OTY0NzcgMTcuODkyNTYwOCwyMC4wMTk1NTA3IDE3Ljg5MjY4MzksMjEuOTQ0OTQ2OCBDMTcuODkyODA3MSwyMy44NzAzNDI5IDE5LjUxNTYzNTksMjUuNDMxNDE2NiAyMS41MTczNzM1LDI1LjQzMTQxNjYgWlwiLFxuICBpZDogXCJPdmFsLUNvcHktNDBcIixcbiAgZmlsbDogXCJ1cmwoI2xpbmVhckdyYWRpZW50LTcpXCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMjEuNTE3MTUxLCAxNS4zNjMxOTEpIHJvdGF0ZSgtMTQxLjAwMDAwMCkgdHJhbnNsYXRlKC0yMS41MTcxNTEsIC0xNS4zNjMxOTEpIFwiXG59KSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk04MC4wNDk0NDAzLDExNi4zMzUxMjIgQzg4LjgwNzY2OTksMTAxLjE0NDQwNyAxMTMuODk0NTQxLDcxLjY5MzQyOTUgMTU1LjMxMDA1MiwyNy45ODIxODkxIEwxNTUuMzEwMDUyLDEzLjQzMzkzMSBMNzYuMjg1NDU5NywyNC4yMTc5MzY3IEw5LjAxNzM5MDc3LDExMC4wNzE1NzIgTDY3LjEwNjk4NjgsMTU4LjkyNTIwMiBMOTAuNDU2NjE2MiwxNzguNTU3MDkgQzc0Ljc2MDI2OTQsMTUyLjI2NjQ5MyA3MS4yOTEyMTA4LDEzMS41MjU4MzcgODAuMDQ5NDQwMywxMTYuMzM1MTIyIFpcIixcbiAgaWQ6IFwiUGF0aC04XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMTZcIixcbiAgZmlsbDogXCIjMTkyMDM1XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImVsbGlwc2VcIiwge1xuICBpZDogXCJPdmFsXCIsXG4gIHN0cm9rZTogXCIjQUNCM0Q3XCIsXG4gIHN0cm9rZVdpZHRoOiBcIjAuOTg3MTI0NDY0XCIsXG4gIGZpbGw6IFwiI0NCRDVGRFwiLFxuICBjeDogXCIxMzQuMTUwNTg5XCIsXG4gIGN5OiBcIjUxLjE5Njk2NTZcIixcbiAgcng6IFwiNi4wOTI3MzE3NVwiLFxuICByeTogXCI2LjA4ODkyOTM1XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImVsbGlwc2VcIiwge1xuICBpZDogXCJPdmFsLUNvcHktMzZcIixcbiAgZmlsbDogXCIjQUNCM0Q3XCIsXG4gIGN4OiBcIjEzNC4xMzg5OVwiLFxuICBjeTogXCI1MS4xMzkxNzUxXCIsXG4gIHJ4OiBcIjMuODA3OTU3MzRcIixcbiAgcnk6IFwiMy44MDU1ODA4NFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJlbGxpcHNlXCIsIHtcbiAgaWQ6IFwiT3ZhbC1Db3B5LTM3XCIsXG4gIGZpbGw6IFwiI0NCRDRGRlwiLFxuICBjeDogXCIxMzEuNDc0NzEzXCIsXG4gIGN5OiBcIjQ5LjMzMjYyOTdcIixcbiAgcng6IFwiMi4yODQ3NzQ0MVwiLFxuICByeTogXCIyLjI4MzM0ODUxXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImVsbGlwc2VcIiwge1xuICBpZDogXCJPdmFsLUNvcHktNDFcIixcbiAgZmlsbDogXCIjQ0JENEZGXCIsXG4gIGN4OiBcIjEzNS4xMjgyODNcIixcbiAgY3k6IFwiNTEuNjE0MjA5NFwiLFxuICByeDogXCIxXCIsXG4gIHJ5OiBcIjFcIlxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gIGlkOiBcIk92YWwtQ29weS0zMVwiLFxuICBmaWxsOiBcIiNGNEU4REJcIixcbiAgY3g6IFwiMzguMTI4NDg2OFwiLFxuICBjeTogXCIxMDguMzAzMTY5XCIsXG4gIHI6IFwiMVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBpZDogXCJPdmFsLUNvcHktMjJcIixcbiAgZmlsbDogXCIjRjRFOERCXCIsXG4gIGN4OiBcIjQuMzIxMTI4ODdcIixcbiAgY3k6IFwiMTYzLjcyMzQzOFwiLFxuICByOiBcIjMuOTQ4NDk3ODVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gIHgxOiBcIjE1My43Mzk4MjVcIixcbiAgeTE6IFwiMTY2Ljc2MjQ3OFwiLFxuICB4MjogXCIxMzMuMDEwMjEyXCIsXG4gIHkyOiBcIjE4Ni41MDQ5NjdcIixcbiAgaWQ6IFwiUGF0aC05LUNvcHlcIixcbiAgc3Ryb2tlOiBcIiNGNEU4REFcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMi45NjEzNzMzOVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICB4MTogXCI3MS4wMTgwNDc2XCIsXG4gIHkxOiBcIjE5Ni4wNDYxMzlcIixcbiAgeDI6IFwiNTQuMjM2OTMxN1wiLFxuICB5MjogXCIyMTAuODUzMDA2XCIsXG4gIGlkOiBcIlBhdGgtOS1Db3B5LTJcIixcbiAgc3Ryb2tlOiBcIiNGNEU4REFcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMi45NjEzNzMzOVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICB4MTogXCIzOS40MzA0NTYxXCIsXG4gIHkxOiBcIjEzOS45MDU0NjZcIixcbiAgeDI6IFwiMjcuNTg0OTYyNlwiLFxuICB5MjogXCIxNTAuNzYzODM1XCIsXG4gIGlkOiBcIlBhdGgtOS1Db3B5LTVcIixcbiAgc3Ryb2tlOiBcIiNGNEU4REFcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMi45NjEzNzMzOVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICB4MTogXCIyNy4wODA4NDQ3XCIsXG4gIHkxOiBcIjIyMC4zNTc3NjNcIixcbiAgeDI6IFwiMTguMTk2NzI0NlwiLFxuICB5MjogXCIyMjYuMjgwNTFcIixcbiAgaWQ6IFwiUGF0aC05LUNvcHktNlwiLFxuICBzdHJva2U6IFwiI0Y0RThEQVwiLFxuICBzdHJva2VXaWR0aDogXCIyLjk2MTM3MzM5XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gIHgxOiBcIjQyLjU1MDE2MzZcIixcbiAgeTE6IFwiMTY5LjkxMzg0NlwiLFxuICB4MjogXCI0LjA1MjMwOTU1XCIsXG4gIHkyOiBcIjIwMy40NzYwNzdcIixcbiAgaWQ6IFwiUGF0aC05LUNvcHktM1wiLFxuICBzdHJva2U6IFwiI0Y0RThEQVwiLFxuICBzdHJva2VXaWR0aDogXCIyLjk2MTM3MzM5XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gIHgxOiBcIjE0My4wOTQyNjlcIixcbiAgeTE6IFwiMTkzLjc0MDk5NVwiLFxuICB4MjogXCIxMDQuNTk2NDE1XCIsXG4gIHkyOiBcIjIyNy4zMDMyMjZcIixcbiAgaWQ6IFwiUGF0aC05LUNvcHktNFwiLFxuICBzdHJva2U6IFwiI0Y0RThEQVwiLFxuICBzdHJva2VXaWR0aDogXCIyLjk2MTM3MzM5XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxufSkpKSk7XG5leHBvcnQgZGVmYXVsdCBSb2NrZXQ7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBjb25zdCBSb2NrZXROZXcgPSAoe1xuICB3aWR0aCA9IDE1MixcbiAgaGVpZ2h0ID0gMTUyXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gIHdpZHRoOiB3aWR0aCxcbiAgaGVpZ2h0OiBoZWlnaHQsXG4gIHZpZXdCb3g6IFwiMCAwIDE1MiAxNTJcIixcbiAgZmlsbDogXCJub25lXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiNzZcIixcbiAgY3k6IFwiNzZcIixcbiAgcjogXCI3NlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk01OS44NjA0IDM5Ljg5MjVDNTkuODYwNCAzNi4zNjIyIDYxLjAxNzkgMzIuOTI5MiA2My4xNTU2IDMwLjExOTdDNjkuNjE0NSAyMS42MzA4IDgyLjM4NTIgMjEuNjMwOCA4OC44NDQyIDMwLjExOTdDOTAuOTgxOSAzMi45MjkyIDkyLjEzOTQgMzYuMzYyMiA5Mi4xMzk0IDM5Ljg5MjVWMTA5LjY5Mkg1OS44NjA0VjM5Ljg5MjVaXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgZDogXCJNODAuMzU5MSAyNS41MzM3QzgwLjk4OTYgMjYuMDEzNSA4MS41NTI1IDI2LjU3NjMgODIuMDMyMyAyNy4yMDY5Qzg2LjU3MTUgMzMuMTcyNyA4OS4wMjk0IDQwLjQ2MjIgODkuMDI5NCA0Ny45NTg1Vjk5LjU3NjhMNzguNDEzMSA5OS41NzYzTDc4LjQxMzQgMjYuNjU5OUM3OC40MTM0IDI1LjYyMzQgNzkuNTM0MiAyNC45MDYxIDgwLjM1OTEgMjUuNTMzN1pcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMDVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTkyLjE5MTQgNTQuMjc4NUM5Mi4xOTE0IDUyLjY5NTYgOTIuNzMwMSA1MS4xNTk4IDkzLjcxOSA0OS45MjM4Qzk2LjUwOTYgNDYuNDM1NSAxMDEuODE1IDQ2LjQzNTUgMTA0LjYwNiA0OS45MjM4QzEwNS41OTUgNTEuMTU5OCAxMDYuMTMzIDUyLjY5NTYgMTA2LjEzMyA1NC4yNzg1VjEwOS42OTJIOTIuMTkxNFY1NC4yNzg1WlwiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTEwMC44MDQgNDguNTY2MkMxMDEgNDguNzIzIDEwMS4xNzggNDguOTAxIDEwMS4zMzUgNDkuMDk3QzEwMy4wNTMgNTEuMjQ0NiAxMDMuOTg5IDUzLjkxMyAxMDMuOTg5IDU2LjY2MzJWOTIuODg5Mkw5OC42ODA3IDkyLjg4ODRMOTguNjgwNyA1MC4wODk2Qzk4LjY4MDcgNDguOTAwNSA5OS44NzU0IDQ3LjgyMzQgMTAwLjgwNCA0OC41NjYyWlwiLFxuICBmaWxsOiBcIiMzMDQwRDZcIixcbiAgZmlsbE9wYWNpdHk6IFwiMC4wNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNjIuNzU1OSA1My44MzJDNjIuNzU1OSA1MC42ODE2IDYzLjg3ODkgNDcuNjM0MyA2NS45MjM0IDQ1LjIzNzNDNzEuMjExIDM5LjAzODEgODAuNzg5MSAzOS4wMzgxIDg2LjA3NjcgNDUuMjM3M0M4OC4xMjEyIDQ3LjYzNDMgODkuMjQ0MiA1MC42ODE2IDg5LjI0NDIgNTMuODMyVjExNC41MThINjIuNzU1OVY1My44MzJaXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gIGN4OiBcIjc2LjAwMDNcIixcbiAgY3k6IFwiNjQuNTk4OVwiLFxuICByOiBcIjYuMzQzMDJcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk03MS41NDEgMTM0Ljk4OUw2OC43MTE3IDEyMC44NDNIODMuMjg5TDgwLjQ1OTcgMTM0Ljk4OUM4MC4wMzQ2IDEzNy4xMTUgNzguMTY4MSAxMzguNjQ1IDc2LjAwMDQgMTM4LjY0NUM3My44MzI2IDEzOC42NDUgNzEuOTY2MiAxMzcuMTE1IDcxLjU0MSAxMzQuOTg5WlwiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNOTcuMjg0MyAxMjcuMzYzTDk1LjY4MjcgMTE2LjAxOEgxMDIuNjQyTDEwMS4wNCAxMjcuMzYzQzEwMC45MDggMTI4LjI5OSAxMDAuMTA3IDEyOC45OTQgOTkuMTYyNCAxMjguOTk0Qzk4LjIxNzMgMTI4Ljk5NCA5Ny40MTY0IDEyOC4yOTkgOTcuMjg0MyAxMjcuMzYzWlwiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNjUuMjg1NCAxMTkuMjM3TDY2LjQ1MjMgMTE0LjU2OUg4NS41NDg2TDg2LjcxNTYgMTE5LjIzN0M4Ni45MTI4IDEyMC4wMjYgODYuMzE2MSAxMjAuNzkgODUuNTAyOSAxMjAuNzlINjYuNDk4MUM2NS42ODQ5IDEyMC43OSA2NS4wODgyIDEyMC4wMjYgNjUuMjg1NCAxMTkuMjM3WlwiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNOTQuMjM4NSAxMTQuNDEyTDk1LjQwNTUgMTA5Ljc0NEgxMDIuOTJMMTA0LjA4NyAxMTQuNDEyQzEwNC4yODUgMTE1LjIwMSAxMDMuNjg4IDExNS45NjUgMTAyLjg3NSAxMTUuOTY1SDk1LjQ1MTJDOTQuNjM4IDExNS45NjUgOTQuMDQxMyAxMTUuMjAxIDk0LjIzODUgMTE0LjQxMlpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTQ1Ljg2NjIgNTQuMjc4NUM0NS44NjYyIDUyLjY5NTYgNDYuNDA0OSA1MS4xNTk4IDQ3LjM5MzggNDkuOTIzOEM1MC4xODQ0IDQ2LjQzNTUgNTUuNDg5OSA0Ni40MzU1IDU4LjI4MDUgNDkuOTIzOEM1OS4yNjk0IDUxLjE1OTggNTkuODA4MSA1Mi42OTU2IDU5LjgwODEgNTQuMjc4NVYxMDkuNjkySDQ1Ljg2NjJWNTQuMjc4NVpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTQwLjg2NjIgNzIuMjE5MlY3Mi45NjkySDQxLjYxNjJWNzIuMjE5Mkg0MC44NjYyWk0zOS4zNjYyIDcyLjIxOTJIMzguNjE2MlY3Mi45NjkySDM5LjM2NjJWNzIuMjE5MlpNMzkuMzY2MiA2Ni4yOTA3VjY1LjU0MDdIMzguNjE2MlY2Ni4yOTA3SDM5LjM2NjJaTTQwLjg2NjIgNjYuMjkwN0g0MS42MTYyVjY1LjU0MDdINDAuODY2MlY2Ni4yOTA3Wk00Ny4wNjIzIDQxLjMzNzRMNDcuNjQ4IDQxLjgwNkw0OC4xMTY1IDQxLjIyMDNMNDcuNTMwOCA0MC43NTE4TDQ3LjA2MjMgNDEuMzM3NFpNNDAuODY2MiA2Mi4xNDU3VjYyLjg5NTdINDEuNjE2MlY2Mi4xNDU3SDQwLjg2NjJaTTM5LjM2NjIgNjIuMTQ1N0gzOC42MTYyVjYyLjg5NTdIMzkuMzY2MlY2Mi4xNDU3Wk00NS44OTEgNDAuNDAwNEw0Ni4zNTk1IDM5LjgxNDdMNDUuNzczOSAzOS4zNDYyTDQ1LjMwNTQgMzkuOTMxOUw0NS44OTEgNDAuNDAwNFpNNDEuNjE2MiA3Mi4yMTkyVjcyLjIwNkg0MC4xMTYyVjcyLjIxOTJINDEuNjE2MlpNMzkuMzY2MiA3Mi45NjkySDQwLjg2NjJWNzEuNDY5MkgzOS4zNjYyVjcyLjk2OTJaTTM4LjYxNjIgNzIuMjA2VjcyLjIxOTJINDAuMTE2MlY3Mi4yMDZIMzguNjE2MlpNMzguNjE2MiA3Mi4xOTI4VjcyLjIwNkg0MC4xMTYyVjcyLjE5MjhIMzguNjE2MlpNMzguNjE2MiA3Mi4xNzk3VjcyLjE5MjhINDAuMTE2MlY3Mi4xNzk3SDM4LjYxNjJaTTM4LjYxNjIgNzIuMTY2NVY3Mi4xNzk3SDQwLjExNjJWNzIuMTY2NUgzOC42MTYyWk0zOC42MTYyIDcyLjE1MzRWNzIuMTY2NUg0MC4xMTYyVjcyLjE1MzRIMzguNjE2MlpNMzguNjE2MiA3Mi4xNDAzVjcyLjE1MzRINDAuMTE2MlY3Mi4xNDAzSDM4LjYxNjJaTTM4LjYxNjIgNzIuMTI3MVY3Mi4xNDAzSDQwLjExNjJWNzIuMTI3MUgzOC42MTYyWk0zOC42MTYyIDcyLjExNFY3Mi4xMjcxSDQwLjExNjJWNzIuMTE0SDM4LjYxNjJaTTM4LjYxNjIgNzIuMTAwOVY3Mi4xMTRINDAuMTE2MlY3Mi4xMDA5SDM4LjYxNjJaTTM4LjYxNjIgNzIuMDg3OFY3Mi4xMDA5SDQwLjExNjJWNzIuMDg3OEgzOC42MTYyWk0zOC42MTYyIDcyLjA3NDdWNzIuMDg3OEg0MC4xMTYyVjcyLjA3NDdIMzguNjE2MlpNMzguNjE2MiA3Mi4wNjE2VjcyLjA3NDdINDAuMTE2MlY3Mi4wNjE2SDM4LjYxNjJaTTM4LjYxNjIgNzIuMDQ4NVY3Mi4wNjE2SDQwLjExNjJWNzIuMDQ4NUgzOC42MTYyWk0zOC42MTYyIDcyLjAzNTRWNzIuMDQ4NUg0MC4xMTYyVjcyLjAzNTRIMzguNjE2MlpNMzguNjE2MiA3Mi4wMjI0VjcyLjAzNTRINDAuMTE2MlY3Mi4wMjI0SDM4LjYxNjJaTTM4LjYxNjIgNzIuMDA5M1Y3Mi4wMjI0SDQwLjExNjJWNzIuMDA5M0gzOC42MTYyWk0zOC42MTYyIDcxLjk5NjJWNzIuMDA5M0g0MC4xMTYyVjcxLjk5NjJIMzguNjE2MlpNMzguNjE2MiA3MS45ODMyVjcxLjk5NjJINDAuMTE2MlY3MS45ODMySDM4LjYxNjJaTTM4LjYxNjIgNzEuOTcwMVY3MS45ODMySDQwLjExNjJWNzEuOTcwMUgzOC42MTYyWk0zOC42MTYyIDcxLjk1NzFWNzEuOTcwMUg0MC4xMTYyVjcxLjk1NzFIMzguNjE2MlpNMzguNjE2MiA3MS45NDRWNzEuOTU3MUg0MC4xMTYyVjcxLjk0NEgzOC42MTYyWk0zOC42MTYyIDcxLjkzMVY3MS45NDRINDAuMTE2MlY3MS45MzFIMzguNjE2MlpNMzguNjE2MiA3MS45MThWNzEuOTMxSDQwLjExNjJWNzEuOTE4SDM4LjYxNjJaTTM4LjYxNjIgNzEuOTA0OVY3MS45MThINDAuMTE2MlY3MS45MDQ5SDM4LjYxNjJaTTM4LjYxNjIgNzEuODkxOVY3MS45MDQ5SDQwLjExNjJWNzEuODkxOUgzOC42MTYyWk0zOC42MTYyIDcxLjg3ODlWNzEuODkxOUg0MC4xMTYyVjcxLjg3ODlIMzguNjE2MlpNMzguNjE2MiA3MS44NjU5VjcxLjg3ODlINDAuMTE2MlY3MS44NjU5SDM4LjYxNjJaTTM4LjYxNjIgNzEuODUyOVY3MS44NjU5SDQwLjExNjJWNzEuODUyOUgzOC42MTYyWk0zOC42MTYyIDcxLjgzOTlWNzEuODUyOUg0MC4xMTYyVjcxLjgzOTlIMzguNjE2MlpNMzguNjE2MiA3MS44MjY5VjcxLjgzOTlINDAuMTE2MlY3MS44MjY5SDM4LjYxNjJaTTM4LjYxNjIgNzEuODE0VjcxLjgyNjlINDAuMTE2MlY3MS44MTRIMzguNjE2MlpNMzguNjE2MiA3MS44MDFWNzEuODE0SDQwLjExNjJWNzEuODAxSDM4LjYxNjJaTTM4LjYxNjIgNzEuNzg4VjcxLjgwMUg0MC4xMTYyVjcxLjc4OEgzOC42MTYyWk0zOC42MTYyIDcxLjc3NTFWNzEuNzg4SDQwLjExNjJWNzEuNzc1MUgzOC42MTYyWk0zOC42MTYyIDcxLjc2MjFWNzEuNzc1MUg0MC4xMTYyVjcxLjc2MjFIMzguNjE2MlpNMzguNjE2MiA3MS43NDkyVjcxLjc2MjFINDAuMTE2MlY3MS43NDkySDM4LjYxNjJaTTM4LjYxNjIgNzEuNzM2MlY3MS43NDkySDQwLjExNjJWNzEuNzM2MkgzOC42MTYyWk0zOC42MTYyIDcxLjcyMzNWNzEuNzM2Mkg0MC4xMTYyVjcxLjcyMzNIMzguNjE2MlpNMzguNjE2MiA3MS43MTA0VjcxLjcyMzNINDAuMTE2MlY3MS43MTA0SDM4LjYxNjJaTTM4LjYxNjIgNzEuNjk3NFY3MS43MTA0SDQwLjExNjJWNzEuNjk3NEgzOC42MTYyWk0zOC42MTYyIDcxLjY4NDVWNzEuNjk3NEg0MC4xMTYyVjcxLjY4NDVIMzguNjE2MlpNMzguNjE2MiA3MS42NzE2VjcxLjY4NDVINDAuMTE2MlY3MS42NzE2SDM4LjYxNjJaTTM4LjYxNjIgNzEuNjU4N1Y3MS42NzE2SDQwLjExNjJWNzEuNjU4N0gzOC42MTYyWk0zOC42MTYyIDcxLjY0NThWNzEuNjU4N0g0MC4xMTYyVjcxLjY0NThIMzguNjE2MlpNMzguNjE2MiA3MS42MzI5VjcxLjY0NThINDAuMTE2MlY3MS42MzI5SDM4LjYxNjJaTTM4LjYxNjIgNzEuNjJWNzEuNjMyOUg0MC4xMTYyVjcxLjYySDM4LjYxNjJaTTM4LjYxNjIgNzEuNjA3MlY3MS42Mkg0MC4xMTYyVjcxLjYwNzJIMzguNjE2MlpNMzguNjE2MiA3MS41OTQzVjcxLjYwNzJINDAuMTE2MlY3MS41OTQzSDM4LjYxNjJaTTM4LjYxNjIgNzEuNTgxNFY3MS41OTQzSDQwLjExNjJWNzEuNTgxNEgzOC42MTYyWk0zOC42MTYyIDcxLjU2ODZWNzEuNTgxNEg0MC4xMTYyVjcxLjU2ODZIMzguNjE2MlpNMzguNjE2MiA3MS41NTU3VjcxLjU2ODZINDAuMTE2MlY3MS41NTU3SDM4LjYxNjJaTTM4LjYxNjIgNzEuNTQyOVY3MS41NTU3SDQwLjExNjJWNzEuNTQyOUgzOC42MTYyWk0zOC42MTYyIDcxLjUzVjcxLjU0MjlINDAuMTE2MlY3MS41M0gzOC42MTYyWk0zOC42MTYyIDcxLjUxNzJWNzEuNTNINDAuMTE2MlY3MS41MTcySDM4LjYxNjJaTTM4LjYxNjIgNzEuNTA0NFY3MS41MTcySDQwLjExNjJWNzEuNTA0NEgzOC42MTYyWk0zOC42MTYyIDcxLjQ5MTVWNzEuNTA0NEg0MC4xMTYyVjcxLjQ5MTVIMzguNjE2MlpNMzguNjE2MiA3MS40Nzg3VjcxLjQ5MTVINDAuMTE2MlY3MS40Nzg3SDM4LjYxNjJaTTM4LjYxNjIgNzEuNDY1OVY3MS40Nzg3SDQwLjExNjJWNzEuNDY1OUgzOC42MTYyWk0zOC42MTYyIDcxLjQ1MzFWNzEuNDY1OUg0MC4xMTYyVjcxLjQ1MzFIMzguNjE2MlpNMzguNjE2MiA3MS40NDAzVjcxLjQ1MzFINDAuMTE2MlY3MS40NDAzSDM4LjYxNjJaTTM4LjYxNjIgNzEuNDI3NVY3MS40NDAzSDQwLjExNjJWNzEuNDI3NUgzOC42MTYyWk0zOC42MTYyIDcxLjQxNDdWNzEuNDI3NUg0MC4xMTYyVjcxLjQxNDdIMzguNjE2MlpNMzguNjE2MiA3MS40MDJWNzEuNDE0N0g0MC4xMTYyVjcxLjQwMkgzOC42MTYyWk0zOC42MTYyIDcxLjM4OTJWNzEuNDAySDQwLjExNjJWNzEuMzg5MkgzOC42MTYyWk0zOC42MTYyIDcxLjM3NjRWNzEuMzg5Mkg0MC4xMTYyVjcxLjM3NjRIMzguNjE2MlpNMzguNjE2MiA3MS4zNjM2VjcxLjM3NjRINDAuMTE2MlY3MS4zNjM2SDM4LjYxNjJaTTM4LjYxNjIgNzEuMzUwOVY3MS4zNjM2SDQwLjExNjJWNzEuMzUwOUgzOC42MTYyWk0zOC42MTYyIDcxLjMzODFWNzEuMzUwOUg0MC4xMTYyVjcxLjMzODFIMzguNjE2MlpNMzguNjE2MiA3MS4zMjU0VjcxLjMzODFINDAuMTE2MlY3MS4zMjU0SDM4LjYxNjJaTTM4LjYxNjIgNzEuMzEyN1Y3MS4zMjU0SDQwLjExNjJWNzEuMzEyN0gzOC42MTYyWk0zOC42MTYyIDcxLjI5OTlWNzEuMzEyN0g0MC4xMTYyVjcxLjI5OTlIMzguNjE2MlpNMzguNjE2MiA3MS4yODcyVjcxLjI5OTlINDAuMTE2MlY3MS4yODcySDM4LjYxNjJaTTM4LjYxNjIgNzEuMjc0NVY3MS4yODcySDQwLjExNjJWNzEuMjc0NUgzOC42MTYyWk0zOC42MTYyIDcxLjI2MThWNzEuMjc0NUg0MC4xMTYyVjcxLjI2MThIMzguNjE2MlpNMzguNjE2MiA3MS4yNDkxVjcxLjI2MThINDAuMTE2MlY3MS4yNDkxSDM4LjYxNjJaTTM4LjYxNjIgNzEuMjM2NFY3MS4yNDkxSDQwLjExNjJWNzEuMjM2NEgzOC42MTYyWk0zOC42MTYyIDcxLjIyMzdWNzEuMjM2NEg0MC4xMTYyVjcxLjIyMzdIMzguNjE2MlpNMzguNjE2MiA3MS4yMTFWNzEuMjIzN0g0MC4xMTYyVjcxLjIxMUgzOC42MTYyWk0zOC42MTYyIDcxLjE5ODNWNzEuMjExSDQwLjExNjJWNzEuMTk4M0gzOC42MTYyWk0zOC42MTYyIDcxLjE4NTdWNzEuMTk4M0g0MC4xMTYyVjcxLjE4NTdIMzguNjE2MlpNMzguNjE2MiA3MS4xNzNWNzEuMTg1N0g0MC4xMTYyVjcxLjE3M0gzOC42MTYyWk0zOC42MTYyIDcxLjE2MDNWNzEuMTczSDQwLjExNjJWNzEuMTYwM0gzOC42MTYyWk0zOC42MTYyIDcxLjE0NzdWNzEuMTYwM0g0MC4xMTYyVjcxLjE0NzdIMzguNjE2MlpNMzguNjE2MiA3MS4xMzVWNzEuMTQ3N0g0MC4xMTYyVjcxLjEzNUgzOC42MTYyWk0zOC42MTYyIDcxLjEyMjRWNzEuMTM1SDQwLjExNjJWNzEuMTIyNEgzOC42MTYyWk0zOC42MTYyIDcxLjEwOTdWNzEuMTIyNEg0MC4xMTYyVjcxLjEwOTdIMzguNjE2MlpNMzguNjE2MiA3MS4wOTcxVjcxLjEwOTdINDAuMTE2MlY3MS4wOTcxSDM4LjYxNjJaTTM4LjYxNjIgNzEuMDg0NVY3MS4wOTcxSDQwLjExNjJWNzEuMDg0NUgzOC42MTYyWk0zOC42MTYyIDcxLjA3MTlWNzEuMDg0NUg0MC4xMTYyVjcxLjA3MTlIMzguNjE2MlpNMzguNjE2MiA3MS4wNTkzVjcxLjA3MTlINDAuMTE2MlY3MS4wNTkzSDM4LjYxNjJaTTM4LjYxNjIgNzEuMDQ2NlY3MS4wNTkzSDQwLjExNjJWNzEuMDQ2NkgzOC42MTYyWk0zOC42MTYyIDcxLjAzNFY3MS4wNDY2SDQwLjExNjJWNzEuMDM0SDM4LjYxNjJaTTM4LjYxNjIgNzEuMDIxNVY3MS4wMzRINDAuMTE2MlY3MS4wMjE1SDM4LjYxNjJaTTM4LjYxNjIgNzEuMDA4OVY3MS4wMjE1SDQwLjExNjJWNzEuMDA4OUgzOC42MTYyWk0zOC42MTYyIDcwLjk5NjNWNzEuMDA4OUg0MC4xMTYyVjcwLjk5NjNIMzguNjE2MlpNMzguNjE2MiA3MC45ODM3VjcwLjk5NjNINDAuMTE2MlY3MC45ODM3SDM4LjYxNjJaTTM4LjYxNjIgNzAuOTcxMVY3MC45ODM3SDQwLjExNjJWNzAuOTcxMUgzOC42MTYyWk0zOC42MTYyIDcwLjk1ODZWNzAuOTcxMUg0MC4xMTYyVjcwLjk1ODZIMzguNjE2MlpNMzguNjE2MiA3MC45NDZWNzAuOTU4Nkg0MC4xMTYyVjcwLjk0NkgzOC42MTYyWk0zOC42MTYyIDcwLjkzMzVWNzAuOTQ2SDQwLjExNjJWNzAuOTMzNUgzOC42MTYyWk0zOC42MTYyIDcwLjkyMDlWNzAuOTMzNUg0MC4xMTYyVjcwLjkyMDlIMzguNjE2MlpNMzguNjE2MiA3MC45MDg0VjcwLjkyMDlINDAuMTE2MlY3MC45MDg0SDM4LjYxNjJaTTM4LjYxNjIgNzAuODk1OVY3MC45MDg0SDQwLjExNjJWNzAuODk1OUgzOC42MTYyWk0zOC42MTYyIDcwLjg4MzNWNzAuODk1OUg0MC4xMTYyVjcwLjg4MzNIMzguNjE2MlpNMzguNjE2MiA3MC44NzA4VjcwLjg4MzNINDAuMTE2MlY3MC44NzA4SDM4LjYxNjJaTTM4LjYxNjIgNzAuODU4M1Y3MC44NzA4SDQwLjExNjJWNzAuODU4M0gzOC42MTYyWk0zOC42MTYyIDcwLjg0NThWNzAuODU4M0g0MC4xMTYyVjcwLjg0NThIMzguNjE2MlpNMzguNjE2MiA3MC44MzMzVjcwLjg0NThINDAuMTE2MlY3MC44MzMzSDM4LjYxNjJaTTM4LjYxNjIgNzAuODIwOFY3MC44MzMzSDQwLjExNjJWNzAuODIwOEgzOC42MTYyWk0zOC42MTYyIDcwLjgwODNWNzAuODIwOEg0MC4xMTYyVjcwLjgwODNIMzguNjE2MlpNMzguNjE2MiA3MC43OTU4VjcwLjgwODNINDAuMTE2MlY3MC43OTU4SDM4LjYxNjJaTTM4LjYxNjIgNzAuNzgzNFY3MC43OTU4SDQwLjExNjJWNzAuNzgzNEgzOC42MTYyWk0zOC42MTYyIDcwLjc3MDlWNzAuNzgzNEg0MC4xMTYyVjcwLjc3MDlIMzguNjE2MlpNMzguNjE2MiA3MC43NTg0VjcwLjc3MDlINDAuMTE2MlY3MC43NTg0SDM4LjYxNjJaTTM4LjYxNjIgNzAuNzQ2VjcwLjc1ODRINDAuMTE2MlY3MC43NDZIMzguNjE2MlpNMzguNjE2MiA3MC43MzM1VjcwLjc0Nkg0MC4xMTYyVjcwLjczMzVIMzguNjE2MlpNMzguNjE2MiA3MC43MjExVjcwLjczMzVINDAuMTE2MlY3MC43MjExSDM4LjYxNjJaTTM4LjYxNjIgNzAuNzA4NlY3MC43MjExSDQwLjExNjJWNzAuNzA4NkgzOC42MTYyWk0zOC42MTYyIDcwLjY5NjJWNzAuNzA4Nkg0MC4xMTYyVjcwLjY5NjJIMzguNjE2MlpNMzguNjE2MiA3MC42ODM4VjcwLjY5NjJINDAuMTE2MlY3MC42ODM4SDM4LjYxNjJaTTM4LjYxNjIgNzAuNjcxNFY3MC42ODM4SDQwLjExNjJWNzAuNjcxNEgzOC42MTYyWk0zOC42MTYyIDcwLjY1OVY3MC42NzE0SDQwLjExNjJWNzAuNjU5SDM4LjYxNjJaTTM4LjYxNjIgNzAuNjQ2NVY3MC42NTlINDAuMTE2MlY3MC42NDY1SDM4LjYxNjJaTTM4LjYxNjIgNzAuNjM0MVY3MC42NDY1SDQwLjExNjJWNzAuNjM0MUgzOC42MTYyWk0zOC42MTYyIDcwLjYyMTdWNzAuNjM0MUg0MC4xMTYyVjcwLjYyMTdIMzguNjE2MlpNMzguNjE2MiA3MC42MDk0VjcwLjYyMTdINDAuMTE2MlY3MC42MDk0SDM4LjYxNjJaTTM4LjYxNjIgNzAuNTk3VjcwLjYwOTRINDAuMTE2MlY3MC41OTdIMzguNjE2MlpNMzguNjE2MiA3MC41ODQ2VjcwLjU5N0g0MC4xMTYyVjcwLjU4NDZIMzguNjE2MlpNMzguNjE2MiA3MC41NzIyVjcwLjU4NDZINDAuMTE2MlY3MC41NzIySDM4LjYxNjJaTTM4LjYxNjIgNzAuNTU5OVY3MC41NzIySDQwLjExNjJWNzAuNTU5OUgzOC42MTYyWk0zOC42MTYyIDcwLjU0NzVWNzAuNTU5OUg0MC4xMTYyVjcwLjU0NzVIMzguNjE2MlpNMzguNjE2MiA3MC41MzUyVjcwLjU0NzVINDAuMTE2MlY3MC41MzUySDM4LjYxNjJaTTM4LjYxNjIgNzAuNTIyOFY3MC41MzUySDQwLjExNjJWNzAuNTIyOEgzOC42MTYyWk0zOC42MTYyIDcwLjUxMDVWNzAuNTIyOEg0MC4xMTYyVjcwLjUxMDVIMzguNjE2MlpNMzguNjE2MiA3MC40OTgxVjcwLjUxMDVINDAuMTE2MlY3MC40OTgxSDM4LjYxNjJaTTM4LjYxNjIgNzAuNDg1OFY3MC40OTgxSDQwLjExNjJWNzAuNDg1OEgzOC42MTYyWk0zOC42MTYyIDcwLjQ3MzVWNzAuNDg1OEg0MC4xMTYyVjcwLjQ3MzVIMzguNjE2MlpNMzguNjE2MiA3MC40NjEyVjcwLjQ3MzVINDAuMTE2MlY3MC40NjEySDM4LjYxNjJaTTM4LjYxNjIgNzAuNDQ4OVY3MC40NjEySDQwLjExNjJWNzAuNDQ4OUgzOC42MTYyWk0zOC42MTYyIDcwLjQzNjZWNzAuNDQ4OUg0MC4xMTYyVjcwLjQzNjZIMzguNjE2MlpNMzguNjE2MiA3MC40MjQzVjcwLjQzNjZINDAuMTE2MlY3MC40MjQzSDM4LjYxNjJaTTM4LjYxNjIgNzAuNDEyVjcwLjQyNDNINDAuMTE2MlY3MC40MTJIMzguNjE2MlpNMzguNjE2MiA3MC4zOTk3VjcwLjQxMkg0MC4xMTYyVjcwLjM5OTdIMzguNjE2MlpNMzguNjE2MiA3MC4zODc0VjcwLjM5OTdINDAuMTE2MlY3MC4zODc0SDM4LjYxNjJaTTM4LjYxNjIgNzAuMzc1MlY3MC4zODc0SDQwLjExNjJWNzAuMzc1MkgzOC42MTYyWk0zOC42MTYyIDcwLjM2MjlWNzAuMzc1Mkg0MC4xMTYyVjcwLjM2MjlIMzguNjE2MlpNMzguNjE2MiA3MC4zNTA2VjcwLjM2MjlINDAuMTE2MlY3MC4zNTA2SDM4LjYxNjJaTTM4LjYxNjIgNzAuMzM4NFY3MC4zNTA2SDQwLjExNjJWNzAuMzM4NEgzOC42MTYyWk0zOC42MTYyIDcwLjMyNjFWNzAuMzM4NEg0MC4xMTYyVjcwLjMyNjFIMzguNjE2MlpNMzguNjE2MiA3MC4zMTM5VjcwLjMyNjFINDAuMTE2MlY3MC4zMTM5SDM4LjYxNjJaTTM4LjYxNjIgNzAuMzAxN1Y3MC4zMTM5SDQwLjExNjJWNzAuMzAxN0gzOC42MTYyWk0zOC42MTYyIDcwLjI4OTRWNzAuMzAxN0g0MC4xMTYyVjcwLjI4OTRIMzguNjE2MlpNMzguNjE2MiA3MC4yNzcyVjcwLjI4OTRINDAuMTE2MlY3MC4yNzcySDM4LjYxNjJaTTM4LjYxNjIgNzAuMjY1VjcwLjI3NzJINDAuMTE2MlY3MC4yNjVIMzguNjE2MlpNMzguNjE2MiA3MC4yNTI4VjcwLjI2NUg0MC4xMTYyVjcwLjI1MjhIMzguNjE2MlpNMzguNjE2MiA3MC4yNDA2VjcwLjI1MjhINDAuMTE2MlY3MC4yNDA2SDM4LjYxNjJaTTM4LjYxNjIgNzAuMjI4NFY3MC4yNDA2SDQwLjExNjJWNzAuMjI4NEgzOC42MTYyWk0zOC42MTYyIDcwLjIxNjJWNzAuMjI4NEg0MC4xMTYyVjcwLjIxNjJIMzguNjE2MlpNMzguNjE2MiA3MC4yMDRWNzAuMjE2Mkg0MC4xMTYyVjcwLjIwNEgzOC42MTYyWk0zOC42MTYyIDcwLjE5MThWNzAuMjA0SDQwLjExNjJWNzAuMTkxOEgzOC42MTYyWk0zOC42MTYyIDcwLjE3OTdWNzAuMTkxOEg0MC4xMTYyVjcwLjE3OTdIMzguNjE2MlpNMzguNjE2MiA3MC4xNjc1VjcwLjE3OTdINDAuMTE2MlY3MC4xNjc1SDM4LjYxNjJaTTM4LjYxNjIgNzAuMTU1M1Y3MC4xNjc1SDQwLjExNjJWNzAuMTU1M0gzOC42MTYyWk0zOC42MTYyIDcwLjE0MzJWNzAuMTU1M0g0MC4xMTYyVjcwLjE0MzJIMzguNjE2MlpNMzguNjE2MiA3MC4xMzFWNzAuMTQzMkg0MC4xMTYyVjcwLjEzMUgzOC42MTYyWk0zOC42MTYyIDcwLjExODlWNzAuMTMxSDQwLjExNjJWNzAuMTE4OUgzOC42MTYyWk0zOC42MTYyIDcwLjEwNjhWNzAuMTE4OUg0MC4xMTYyVjcwLjEwNjhIMzguNjE2MlpNMzguNjE2MiA3MC4wOTQ2VjcwLjEwNjhINDAuMTE2MlY3MC4wOTQ2SDM4LjYxNjJaTTM4LjYxNjIgNzAuMDgyNVY3MC4wOTQ2SDQwLjExNjJWNzAuMDgyNUgzOC42MTYyWk0zOC42MTYyIDcwLjA3MDRWNzAuMDgyNUg0MC4xMTYyVjcwLjA3MDRIMzguNjE2MlpNMzguNjE2MiA3MC4wNTgzVjcwLjA3MDRINDAuMTE2MlY3MC4wNTgzSDM4LjYxNjJaTTM4LjYxNjIgNzAuMDQ2MlY3MC4wNTgzSDQwLjExNjJWNzAuMDQ2MkgzOC42MTYyWk0zOC42MTYyIDcwLjAzNDFWNzAuMDQ2Mkg0MC4xMTYyVjcwLjAzNDFIMzguNjE2MlpNMzguNjE2MiA3MC4wMjJWNzAuMDM0MUg0MC4xMTYyVjcwLjAyMkgzOC42MTYyWk0zOC42MTYyIDcwLjAwOTlWNzAuMDIySDQwLjExNjJWNzAuMDA5OUgzOC42MTYyWk0zOC42MTYyIDY5Ljk5NzhWNzAuMDA5OUg0MC4xMTYyVjY5Ljk5NzhIMzguNjE2MlpNMzguNjE2MiA2OS45ODU4VjY5Ljk5NzhINDAuMTE2MlY2OS45ODU4SDM4LjYxNjJaTTM4LjYxNjIgNjkuOTczN1Y2OS45ODU4SDQwLjExNjJWNjkuOTczN0gzOC42MTYyWk0zOC42MTYyIDY5Ljk2MTZWNjkuOTczN0g0MC4xMTYyVjY5Ljk2MTZIMzguNjE2MlpNMzguNjE2MiA2OS45NDk2VjY5Ljk2MTZINDAuMTE2MlY2OS45NDk2SDM4LjYxNjJaTTM4LjYxNjIgNjkuOTM3NVY2OS45NDk2SDQwLjExNjJWNjkuOTM3NUgzOC42MTYyWk0zOC42MTYyIDY5LjkyNTVWNjkuOTM3NUg0MC4xMTYyVjY5LjkyNTVIMzguNjE2MlpNMzguNjE2MiA2OS45MTM1VjY5LjkyNTVINDAuMTE2MlY2OS45MTM1SDM4LjYxNjJaTTM4LjYxNjIgNjkuOTAxNFY2OS45MTM1SDQwLjExNjJWNjkuOTAxNEgzOC42MTYyWk0zOC42MTYyIDY5Ljg4OTRWNjkuOTAxNEg0MC4xMTYyVjY5Ljg4OTRIMzguNjE2MlpNMzguNjE2MiA2OS44Nzc0VjY5Ljg4OTRINDAuMTE2MlY2OS44Nzc0SDM4LjYxNjJaTTM4LjYxNjIgNjkuODY1NFY2OS44Nzc0SDQwLjExNjJWNjkuODY1NEgzOC42MTYyWk0zOC42MTYyIDY5Ljg1MzRWNjkuODY1NEg0MC4xMTYyVjY5Ljg1MzRIMzguNjE2MlpNMzguNjE2MiA2OS44NDE0VjY5Ljg1MzRINDAuMTE2MlY2OS44NDE0SDM4LjYxNjJaTTM4LjYxNjIgNjkuODI5NFY2OS44NDE0SDQwLjExNjJWNjkuODI5NEgzOC42MTYyWk0zOC42MTYyIDY5LjgxNzRWNjkuODI5NEg0MC4xMTYyVjY5LjgxNzRIMzguNjE2MlpNMzguNjE2MiA2OS44MDU0VjY5LjgxNzRINDAuMTE2MlY2OS44MDU0SDM4LjYxNjJaTTM4LjYxNjIgNjkuNzkzNVY2OS44MDU0SDQwLjExNjJWNjkuNzkzNUgzOC42MTYyWk0zOC42MTYyIDY5Ljc4MTVWNjkuNzkzNUg0MC4xMTYyVjY5Ljc4MTVIMzguNjE2MlpNMzguNjE2MiA2OS43Njk1VjY5Ljc4MTVINDAuMTE2MlY2OS43Njk1SDM4LjYxNjJaTTM4LjYxNjIgNjkuNzU3NlY2OS43Njk1SDQwLjExNjJWNjkuNzU3NkgzOC42MTYyWk0zOC42MTYyIDY5Ljc0NTZWNjkuNzU3Nkg0MC4xMTYyVjY5Ljc0NTZIMzguNjE2MlpNMzguNjE2MiA2OS43MzM3VjY5Ljc0NTZINDAuMTE2MlY2OS43MzM3SDM4LjYxNjJaTTM4LjYxNjIgNjkuNzIxOFY2OS43MzM3SDQwLjExNjJWNjkuNzIxOEgzOC42MTYyWk0zOC42MTYyIDY5LjcwOThWNjkuNzIxOEg0MC4xMTYyVjY5LjcwOThIMzguNjE2MlpNMzguNjE2MiA2OS42OTc5VjY5LjcwOThINDAuMTE2MlY2OS42OTc5SDM4LjYxNjJaTTM4LjYxNjIgNjkuNjg2VjY5LjY5NzlINDAuMTE2MlY2OS42ODZIMzguNjE2MlpNMzguNjE2MiA2OS42NzQxVjY5LjY4Nkg0MC4xMTYyVjY5LjY3NDFIMzguNjE2MlpNMzguNjE2MiA2OS42NjIyVjY5LjY3NDFINDAuMTE2MlY2OS42NjIySDM4LjYxNjJaTTM4LjYxNjIgNjkuNjUwM1Y2OS42NjIySDQwLjExNjJWNjkuNjUwM0gzOC42MTYyWk0zOC42MTYyIDY5LjYzODRWNjkuNjUwM0g0MC4xMTYyVjY5LjYzODRIMzguNjE2MlpNMzguNjE2MiA2OS42MjY1VjY5LjYzODRINDAuMTE2MlY2OS42MjY1SDM4LjYxNjJaTTM4LjYxNjIgNjkuNjE0NlY2OS42MjY1SDQwLjExNjJWNjkuNjE0NkgzOC42MTYyWk0zOC42MTYyIDY5LjYwMjdWNjkuNjE0Nkg0MC4xMTYyVjY5LjYwMjdIMzguNjE2MlpNMzguNjE2MiA2OS41OTA5VjY5LjYwMjdINDAuMTE2MlY2OS41OTA5SDM4LjYxNjJaTTM4LjYxNjIgNjkuNTc5VjY5LjU5MDlINDAuMTE2MlY2OS41NzlIMzguNjE2MlpNMzguNjE2MiA2OS41NjcyVjY5LjU3OUg0MC4xMTYyVjY5LjU2NzJIMzguNjE2MlpNMzguNjE2MiA2OS41NTUzVjY5LjU2NzJINDAuMTE2MlY2OS41NTUzSDM4LjYxNjJaTTM4LjYxNjIgNjkuNTQzNVY2OS41NTUzSDQwLjExNjJWNjkuNTQzNUgzOC42MTYyWk0zOC42MTYyIDY5LjUzMTZWNjkuNTQzNUg0MC4xMTYyVjY5LjUzMTZIMzguNjE2MlpNMzguNjE2MiA2OS41MTk4VjY5LjUzMTZINDAuMTE2MlY2OS41MTk4SDM4LjYxNjJaTTM4LjYxNjIgNjkuNTA4VjY5LjUxOThINDAuMTE2MlY2OS41MDhIMzguNjE2MlpNMzguNjE2MiA2OS40OTYyVjY5LjUwOEg0MC4xMTYyVjY5LjQ5NjJIMzguNjE2MlpNMzguNjE2MiA2OS40ODQzVjY5LjQ5NjJINDAuMTE2MlY2OS40ODQzSDM4LjYxNjJaTTM4LjYxNjIgNjkuNDcyNVY2OS40ODQzSDQwLjExNjJWNjkuNDcyNUgzOC42MTYyWk0zOC42MTYyIDY5LjQ2MDdWNjkuNDcyNUg0MC4xMTYyVjY5LjQ2MDdIMzguNjE2MlpNMzguNjE2MiA2OS40NDg5VjY5LjQ2MDdINDAuMTE2MlY2OS40NDg5SDM4LjYxNjJaTTM4LjYxNjIgNjkuNDM3MlY2OS40NDg5SDQwLjExNjJWNjkuNDM3MkgzOC42MTYyWk0zOC42MTYyIDY5LjQyNTRWNjkuNDM3Mkg0MC4xMTYyVjY5LjQyNTRIMzguNjE2MlpNMzguNjE2MiA2OS40MTM2VjY5LjQyNTRINDAuMTE2MlY2OS40MTM2SDM4LjYxNjJaTTM4LjYxNjIgNjkuNDAxOFY2OS40MTM2SDQwLjExNjJWNjkuNDAxOEgzOC42MTYyWk0zOC42MTYyIDY5LjM5MDFWNjkuNDAxOEg0MC4xMTYyVjY5LjM5MDFIMzguNjE2MlpNMzguNjE2MiA2OS4zNzgzVjY5LjM5MDFINDAuMTE2MlY2OS4zNzgzSDM4LjYxNjJaTTM4LjYxNjIgNjkuMzY2NlY2OS4zNzgzSDQwLjExNjJWNjkuMzY2NkgzOC42MTYyWk0zOC42MTYyIDY5LjM1NDhWNjkuMzY2Nkg0MC4xMTYyVjY5LjM1NDhIMzguNjE2MlpNMzguNjE2MiA2OS4zNDMxVjY5LjM1NDhINDAuMTE2MlY2OS4zNDMxSDM4LjYxNjJaTTM4LjYxNjIgNjkuMzMxNFY2OS4zNDMxSDQwLjExNjJWNjkuMzMxNEgzOC42MTYyWk0zOC42MTYyIDY5LjMxOTZWNjkuMzMxNEg0MC4xMTYyVjY5LjMxOTZIMzguNjE2MlpNMzguNjE2MiA2OS4zMDc5VjY5LjMxOTZINDAuMTE2MlY2OS4zMDc5SDM4LjYxNjJaTTM4LjYxNjIgNjkuMjk2MlY2OS4zMDc5SDQwLjExNjJWNjkuMjk2MkgzOC42MTYyWk0zOC42MTYyIDY5LjI4NDVWNjkuMjk2Mkg0MC4xMTYyVjY5LjI4NDVIMzguNjE2MlpNMzguNjE2MiA2OS4yNzI4VjY5LjI4NDVINDAuMTE2MlY2OS4yNzI4SDM4LjYxNjJaTTM4LjYxNjIgNjkuMjYxMVY2OS4yNzI4SDQwLjExNjJWNjkuMjYxMUgzOC42MTYyWk0zOC42MTYyIDY5LjI0OTRWNjkuMjYxMUg0MC4xMTYyVjY5LjI0OTRIMzguNjE2MlpNMzguNjE2MiA2OS4yMzc3VjY5LjI0OTRINDAuMTE2MlY2OS4yMzc3SDM4LjYxNjJaTTM4LjYxNjIgNjkuMjI2MVY2OS4yMzc3SDQwLjExNjJWNjkuMjI2MUgzOC42MTYyWk0zOC42MTYyIDY5LjIxNDRWNjkuMjI2MUg0MC4xMTYyVjY5LjIxNDRIMzguNjE2MlpNMzguNjE2MiA2OS4yMDI3VjY5LjIxNDRINDAuMTE2MlY2OS4yMDI3SDM4LjYxNjJaTTM4LjYxNjIgNjkuMTkxMVY2OS4yMDI3SDQwLjExNjJWNjkuMTkxMUgzOC42MTYyWk0zOC42MTYyIDY5LjE3OTRWNjkuMTkxMUg0MC4xMTYyVjY5LjE3OTRIMzguNjE2MlpNMzguNjE2MiA2OS4xNjc4VjY5LjE3OTRINDAuMTE2MlY2OS4xNjc4SDM4LjYxNjJaTTM4LjYxNjIgNjkuMTU2MVY2OS4xNjc4SDQwLjExNjJWNjkuMTU2MUgzOC42MTYyWk0zOC42MTYyIDY5LjE0NDVWNjkuMTU2MUg0MC4xMTYyVjY5LjE0NDVIMzguNjE2MlpNMzguNjE2MiA2OS4xMzI5VjY5LjE0NDVINDAuMTE2MlY2OS4xMzI5SDM4LjYxNjJaTTM4LjYxNjIgNjkuMTIxM1Y2OS4xMzI5SDQwLjExNjJWNjkuMTIxM0gzOC42MTYyWk0zOC42MTYyIDY5LjEwOTZWNjkuMTIxM0g0MC4xMTYyVjY5LjEwOTZIMzguNjE2MlpNMzguNjE2MiA2OS4wOThWNjkuMTA5Nkg0MC4xMTYyVjY5LjA5OEgzOC42MTYyWk0zOC42MTYyIDY5LjA4NjRWNjkuMDk4SDQwLjExNjJWNjkuMDg2NEgzOC42MTYyWk0zOC42MTYyIDY5LjA3NDhWNjkuMDg2NEg0MC4xMTYyVjY5LjA3NDhIMzguNjE2MlpNMzguNjE2MiA2OS4wNjMzVjY5LjA3NDhINDAuMTE2MlY2OS4wNjMzSDM4LjYxNjJaTTM4LjYxNjIgNjkuMDUxN1Y2OS4wNjMzSDQwLjExNjJWNjkuMDUxN0gzOC42MTYyWk0zOC42MTYyIDY5LjA0MDFWNjkuMDUxN0g0MC4xMTYyVjY5LjA0MDFIMzguNjE2MlpNMzguNjE2MiA2OS4wMjg1VjY5LjA0MDFINDAuMTE2MlY2OS4wMjg1SDM4LjYxNjJaTTM4LjYxNjIgNjkuMDE3VjY5LjAyODVINDAuMTE2MlY2OS4wMTdIMzguNjE2MlpNMzguNjE2MiA2OS4wMDU0VjY5LjAxN0g0MC4xMTYyVjY5LjAwNTRIMzguNjE2MlpNMzguNjE2MiA2OC45OTM5VjY5LjAwNTRINDAuMTE2MlY2OC45OTM5SDM4LjYxNjJaTTM4LjYxNjIgNjguOTgyM1Y2OC45OTM5SDQwLjExNjJWNjguOTgyM0gzOC42MTYyWk0zOC42MTYyIDY4Ljk3MDhWNjguOTgyM0g0MC4xMTYyVjY4Ljk3MDhIMzguNjE2MlpNMzguNjE2MiA2OC45NTkyVjY4Ljk3MDhINDAuMTE2MlY2OC45NTkySDM4LjYxNjJaTTM4LjYxNjIgNjguOTQ3N1Y2OC45NTkySDQwLjExNjJWNjguOTQ3N0gzOC42MTYyWk0zOC42MTYyIDY4LjkzNjJWNjguOTQ3N0g0MC4xMTYyVjY4LjkzNjJIMzguNjE2MlpNMzguNjE2MiA2OC45MjQ3VjY4LjkzNjJINDAuMTE2MlY2OC45MjQ3SDM4LjYxNjJaTTM4LjYxNjIgNjguOTEzMlY2OC45MjQ3SDQwLjExNjJWNjguOTEzMkgzOC42MTYyWk0zOC42MTYyIDY4LjkwMTdWNjguOTEzMkg0MC4xMTYyVjY4LjkwMTdIMzguNjE2MlpNMzguNjE2MiA2OC44OTAyVjY4LjkwMTdINDAuMTE2MlY2OC44OTAySDM4LjYxNjJaTTM4LjYxNjIgNjguODc4N1Y2OC44OTAySDQwLjExNjJWNjguODc4N0gzOC42MTYyWk0zOC42MTYyIDY4Ljg2NzJWNjguODc4N0g0MC4xMTYyVjY4Ljg2NzJIMzguNjE2MlpNMzguNjE2MiA2OC44NTU3VjY4Ljg2NzJINDAuMTE2MlY2OC44NTU3SDM4LjYxNjJaTTM4LjYxNjIgNjguODQ0M1Y2OC44NTU3SDQwLjExNjJWNjguODQ0M0gzOC42MTYyWk0zOC42MTYyIDY4LjgzMjhWNjguODQ0M0g0MC4xMTYyVjY4LjgzMjhIMzguNjE2MlpNMzguNjE2MiA2OC44MjEzVjY4LjgzMjhINDAuMTE2MlY2OC44MjEzSDM4LjYxNjJaTTM4LjYxNjIgNjguODA5OVY2OC44MjEzSDQwLjExNjJWNjguODA5OUgzOC42MTYyWk0zOC42MTYyIDY4Ljc5ODRWNjguODA5OUg0MC4xMTYyVjY4Ljc5ODRIMzguNjE2MlpNMzguNjE2MiA2OC43ODdWNjguNzk4NEg0MC4xMTYyVjY4Ljc4N0gzOC42MTYyWk0zOC42MTYyIDY4Ljc3NTZWNjguNzg3SDQwLjExNjJWNjguNzc1NkgzOC42MTYyWk0zOC42MTYyIDY4Ljc2NDFWNjguNzc1Nkg0MC4xMTYyVjY4Ljc2NDFIMzguNjE2MlpNMzguNjE2MiA2OC43NTI3VjY4Ljc2NDFINDAuMTE2MlY2OC43NTI3SDM4LjYxNjJaTTM4LjYxNjIgNjguNzQxM1Y2OC43NTI3SDQwLjExNjJWNjguNzQxM0gzOC42MTYyWk0zOC42MTYyIDY4LjcyOTlWNjguNzQxM0g0MC4xMTYyVjY4LjcyOTlIMzguNjE2MlpNMzguNjE2MiA2OC43MTg1VjY4LjcyOTlINDAuMTE2MlY2OC43MTg1SDM4LjYxNjJaTTM4LjYxNjIgNjguNzA3MVY2OC43MTg1SDQwLjExNjJWNjguNzA3MUgzOC42MTYyWk0zOC42MTYyIDY4LjY5NTdWNjguNzA3MUg0MC4xMTYyVjY4LjY5NTdIMzguNjE2MlpNMzguNjE2MiA2OC42ODQzVjY4LjY5NTdINDAuMTE2MlY2OC42ODQzSDM4LjYxNjJaTTM4LjYxNjIgNjguNjcyOVY2OC42ODQzSDQwLjExNjJWNjguNjcyOUgzOC42MTYyWk0zOC42MTYyIDY4LjY2MTZWNjguNjcyOUg0MC4xMTYyVjY4LjY2MTZIMzguNjE2MlpNMzguNjE2MiA2OC42NTAyVjY4LjY2MTZINDAuMTE2MlY2OC42NTAySDM4LjYxNjJaTTM4LjYxNjIgNjguNjM4OVY2OC42NTAySDQwLjExNjJWNjguNjM4OUgzOC42MTYyWk0zOC42MTYyIDY4LjYyNzVWNjguNjM4OUg0MC4xMTYyVjY4LjYyNzVIMzguNjE2MlpNMzguNjE2MiA2OC42MTYyVjY4LjYyNzVINDAuMTE2MlY2OC42MTYySDM4LjYxNjJaTTM4LjYxNjIgNjguNjA0OFY2OC42MTYySDQwLjExNjJWNjguNjA0OEgzOC42MTYyWk0zOC42MTYyIDY4LjU5MzVWNjguNjA0OEg0MC4xMTYyVjY4LjU5MzVIMzguNjE2MlpNMzguNjE2MiA2OC41ODIyVjY4LjU5MzVINDAuMTE2MlY2OC41ODIySDM4LjYxNjJaTTM4LjYxNjIgNjguNTcwOFY2OC41ODIySDQwLjExNjJWNjguNTcwOEgzOC42MTYyWk0zOC42MTYyIDY4LjU1OTVWNjguNTcwOEg0MC4xMTYyVjY4LjU1OTVIMzguNjE2MlpNMzguNjE2MiA2OC41NDgyVjY4LjU1OTVINDAuMTE2MlY2OC41NDgySDM4LjYxNjJaTTM4LjYxNjIgNjguNTM2OVY2OC41NDgySDQwLjExNjJWNjguNTM2OUgzOC42MTYyWk0zOC42MTYyIDY4LjUyNTZWNjguNTM2OUg0MC4xMTYyVjY4LjUyNTZIMzguNjE2MlpNMzguNjE2MiA2OC41MTQzVjY4LjUyNTZINDAuMTE2MlY2OC41MTQzSDM4LjYxNjJaTTM4LjYxNjIgNjguNTAzVjY4LjUxNDNINDAuMTE2MlY2OC41MDNIMzguNjE2MlpNMzguNjE2MiA2OC40OTE4VjY4LjUwM0g0MC4xMTYyVjY4LjQ5MThIMzguNjE2MlpNMzguNjE2MiA2OC40ODA1VjY4LjQ5MThINDAuMTE2MlY2OC40ODA1SDM4LjYxNjJaTTM4LjYxNjIgNjguNDY5MlY2OC40ODA1SDQwLjExNjJWNjguNDY5MkgzOC42MTYyWk0zOC42MTYyIDY4LjQ1OFY2OC40NjkySDQwLjExNjJWNjguNDU4SDM4LjYxNjJaTTM4LjYxNjIgNjguNDQ2N1Y2OC40NThINDAuMTE2MlY2OC40NDY3SDM4LjYxNjJaTTM4LjYxNjIgNjguNDM1NVY2OC40NDY3SDQwLjExNjJWNjguNDM1NUgzOC42MTYyWk0zOC42MTYyIDY4LjQyNDJWNjguNDM1NUg0MC4xMTYyVjY4LjQyNDJIMzguNjE2MlpNMzguNjE2MiA2OC40MTNWNjguNDI0Mkg0MC4xMTYyVjY4LjQxM0gzOC42MTYyWk0zOC42MTYyIDY4LjQwMThWNjguNDEzSDQwLjExNjJWNjguNDAxOEgzOC42MTYyWk0zOC42MTYyIDY4LjM5MDVWNjguNDAxOEg0MC4xMTYyVjY4LjM5MDVIMzguNjE2MlpNMzguNjE2MiA2OC4zNzkzVjY4LjM5MDVINDAuMTE2MlY2OC4zNzkzSDM4LjYxNjJaTTM4LjYxNjIgNjguMzY4MVY2OC4zNzkzSDQwLjExNjJWNjguMzY4MUgzOC42MTYyWk0zOC42MTYyIDY4LjM1NjlWNjguMzY4MUg0MC4xMTYyVjY4LjM1NjlIMzguNjE2MlpNMzguNjE2MiA2OC4zNDU3VjY4LjM1NjlINDAuMTE2MlY2OC4zNDU3SDM4LjYxNjJaTTM4LjYxNjIgNjguMzM0NVY2OC4zNDU3SDQwLjExNjJWNjguMzM0NUgzOC42MTYyWk0zOC42MTYyIDY4LjMyMzNWNjguMzM0NUg0MC4xMTYyVjY4LjMyMzNIMzguNjE2MlpNMzguNjE2MiA2OC4zMTIxVjY4LjMyMzNINDAuMTE2MlY2OC4zMTIxSDM4LjYxNjJaTTM4LjYxNjIgNjguMzAxVjY4LjMxMjFINDAuMTE2MlY2OC4zMDFIMzguNjE2MlpNMzguNjE2MiA2OC4yODk4VjY4LjMwMUg0MC4xMTYyVjY4LjI4OThIMzguNjE2MlpNMzguNjE2MiA2OC4yNzg2VjY4LjI4OThINDAuMTE2MlY2OC4yNzg2SDM4LjYxNjJaTTM4LjYxNjIgNjguMjY3NVY2OC4yNzg2SDQwLjExNjJWNjguMjY3NUgzOC42MTYyWk0zOC42MTYyIDY4LjI1NjNWNjguMjY3NUg0MC4xMTYyVjY4LjI1NjNIMzguNjE2MlpNMzguNjE2MiA2OC4yNDUyVjY4LjI1NjNINDAuMTE2MlY2OC4yNDUySDM4LjYxNjJaTTM4LjYxNjIgNjguMjM0MVY2OC4yNDUySDQwLjExNjJWNjguMjM0MUgzOC42MTYyWk0zOC42MTYyIDY4LjIyMjlWNjguMjM0MUg0MC4xMTYyVjY4LjIyMjlIMzguNjE2MlpNMzguNjE2MiA2OC4yMTE4VjY4LjIyMjlINDAuMTE2MlY2OC4yMTE4SDM4LjYxNjJaTTM4LjYxNjIgNjguMjAwN1Y2OC4yMTE4SDQwLjExNjJWNjguMjAwN0gzOC42MTYyWk0zOC42MTYyIDY4LjE4OTZWNjguMjAwN0g0MC4xMTYyVjY4LjE4OTZIMzguNjE2MlpNMzguNjE2MiA2OC4xNzg1VjY4LjE4OTZINDAuMTE2MlY2OC4xNzg1SDM4LjYxNjJaTTM4LjYxNjIgNjguMTY3NFY2OC4xNzg1SDQwLjExNjJWNjguMTY3NEgzOC42MTYyWk0zOC42MTYyIDY4LjE1NjNWNjguMTY3NEg0MC4xMTYyVjY4LjE1NjNIMzguNjE2MlpNMzguNjE2MiA2OC4xNDUyVjY4LjE1NjNINDAuMTE2MlY2OC4xNDUySDM4LjYxNjJaTTM4LjYxNjIgNjguMTM0MVY2OC4xNDUySDQwLjExNjJWNjguMTM0MUgzOC42MTYyWk0zOC42MTYyIDY4LjEyMzFWNjguMTM0MUg0MC4xMTYyVjY4LjEyMzFIMzguNjE2MlpNMzguNjE2MiA2OC4xMTJWNjguMTIzMUg0MC4xMTYyVjY4LjExMkgzOC42MTYyWk0zOC42MTYyIDY4LjEwMDlWNjguMTEySDQwLjExNjJWNjguMTAwOUgzOC42MTYyWk0zOC42MTYyIDY4LjA4OTlWNjguMTAwOUg0MC4xMTYyVjY4LjA4OTlIMzguNjE2MlpNMzguNjE2MiA2OC4wNzg4VjY4LjA4OTlINDAuMTE2MlY2OC4wNzg4SDM4LjYxNjJaTTM4LjYxNjIgNjguMDY3OFY2OC4wNzg4SDQwLjExNjJWNjguMDY3OEgzOC42MTYyWk0zOC42MTYyIDY4LjA1NjdWNjguMDY3OEg0MC4xMTYyVjY4LjA1NjdIMzguNjE2MlpNMzguNjE2MiA2OC4wNDU3VjY4LjA1NjdINDAuMTE2MlY2OC4wNDU3SDM4LjYxNjJaTTM4LjYxNjIgNjguMDM0N1Y2OC4wNDU3SDQwLjExNjJWNjguMDM0N0gzOC42MTYyWk0zOC42MTYyIDY4LjAyMzdWNjguMDM0N0g0MC4xMTYyVjY4LjAyMzdIMzguNjE2MlpNMzguNjE2MiA2OC4wMTI3VjY4LjAyMzdINDAuMTE2MlY2OC4wMTI3SDM4LjYxNjJaTTM4LjYxNjIgNjguMDAxN1Y2OC4wMTI3SDQwLjExNjJWNjguMDAxN0gzOC42MTYyWk0zOC42MTYyIDY3Ljk5MDdWNjguMDAxN0g0MC4xMTYyVjY3Ljk5MDdIMzguNjE2MlpNMzguNjE2MiA2Ny45Nzk3VjY3Ljk5MDdINDAuMTE2MlY2Ny45Nzk3SDM4LjYxNjJaTTM4LjYxNjIgNjcuOTY4N1Y2Ny45Nzk3SDQwLjExNjJWNjcuOTY4N0gzOC42MTYyWk0zOC42MTYyIDY3Ljk1NzdWNjcuOTY4N0g0MC4xMTYyVjY3Ljk1NzdIMzguNjE2MlpNMzguNjE2MiA2Ny45NDY3VjY3Ljk1NzdINDAuMTE2MlY2Ny45NDY3SDM4LjYxNjJaTTM4LjYxNjIgNjcuOTM1OFY2Ny45NDY3SDQwLjExNjJWNjcuOTM1OEgzOC42MTYyWk0zOC42MTYyIDY3LjkyNDhWNjcuOTM1OEg0MC4xMTYyVjY3LjkyNDhIMzguNjE2MlpNMzguNjE2MiA2Ny45MTM4VjY3LjkyNDhINDAuMTE2MlY2Ny45MTM4SDM4LjYxNjJaTTM4LjYxNjIgNjcuOTAyOVY2Ny45MTM4SDQwLjExNjJWNjcuOTAyOUgzOC42MTYyWk0zOC42MTYyIDY3Ljg5MTlWNjcuOTAyOUg0MC4xMTYyVjY3Ljg5MTlIMzguNjE2MlpNMzguNjE2MiA2Ny44ODFWNjcuODkxOUg0MC4xMTYyVjY3Ljg4MUgzOC42MTYyWk0zOC42MTYyIDY3Ljg3MDFWNjcuODgxSDQwLjExNjJWNjcuODcwMUgzOC42MTYyWk0zOC42MTYyIDY3Ljg1OTJWNjcuODcwMUg0MC4xMTYyVjY3Ljg1OTJIMzguNjE2MlpNMzguNjE2MiA2Ny44NDgyVjY3Ljg1OTJINDAuMTE2MlY2Ny44NDgySDM4LjYxNjJaTTM4LjYxNjIgNjcuODM3M1Y2Ny44NDgySDQwLjExNjJWNjcuODM3M0gzOC42MTYyWk0zOC42MTYyIDY3LjgyNjRWNjcuODM3M0g0MC4xMTYyVjY3LjgyNjRIMzguNjE2MlpNMzguNjE2MiA2Ny44MTU1VjY3LjgyNjRINDAuMTE2MlY2Ny44MTU1SDM4LjYxNjJaTTM4LjYxNjIgNjcuODA0NlY2Ny44MTU1SDQwLjExNjJWNjcuODA0NkgzOC42MTYyWk0zOC42MTYyIDY3Ljc5MzdWNjcuODA0Nkg0MC4xMTYyVjY3Ljc5MzdIMzguNjE2MlpNMzguNjE2MiA2Ny43ODI5VjY3Ljc5MzdINDAuMTE2MlY2Ny43ODI5SDM4LjYxNjJaTTM4LjYxNjIgNjcuNzcyVjY3Ljc4MjlINDAuMTE2MlY2Ny43NzJIMzguNjE2MlpNMzguNjE2MiA2Ny43NjExVjY3Ljc3Mkg0MC4xMTYyVjY3Ljc2MTFIMzguNjE2MlpNMzguNjE2MiA2Ny43NTAzVjY3Ljc2MTFINDAuMTE2MlY2Ny43NTAzSDM4LjYxNjJaTTM4LjYxNjIgNjcuNzM5NFY2Ny43NTAzSDQwLjExNjJWNjcuNzM5NEgzOC42MTYyWk0zOC42MTYyIDY3LjcyODVWNjcuNzM5NEg0MC4xMTYyVjY3LjcyODVIMzguNjE2MlpNMzguNjE2MiA2Ny43MTc3VjY3LjcyODVINDAuMTE2MlY2Ny43MTc3SDM4LjYxNjJaTTM4LjYxNjIgNjcuNzA2OVY2Ny43MTc3SDQwLjExNjJWNjcuNzA2OUgzOC42MTYyWk0zOC42MTYyIDY3LjY5NlY2Ny43MDY5SDQwLjExNjJWNjcuNjk2SDM4LjYxNjJaTTM4LjYxNjIgNjcuNjg1MlY2Ny42OTZINDAuMTE2MlY2Ny42ODUySDM4LjYxNjJaTTM4LjYxNjIgNjcuNjc0NFY2Ny42ODUySDQwLjExNjJWNjcuNjc0NEgzOC42MTYyWk0zOC42MTYyIDY3LjY2MzZWNjcuNjc0NEg0MC4xMTYyVjY3LjY2MzZIMzguNjE2MlpNMzguNjE2MiA2Ny42NTI4VjY3LjY2MzZINDAuMTE2MlY2Ny42NTI4SDM4LjYxNjJaTTM4LjYxNjIgNjcuNjQyVjY3LjY1MjhINDAuMTE2MlY2Ny42NDJIMzguNjE2MlpNMzguNjE2MiA2Ny42MzEyVjY3LjY0Mkg0MC4xMTYyVjY3LjYzMTJIMzguNjE2MlpNMzguNjE2MiA2Ny42MjA0VjY3LjYzMTJINDAuMTE2MlY2Ny42MjA0SDM4LjYxNjJaTTM4LjYxNjIgNjcuNjA5NlY2Ny42MjA0SDQwLjExNjJWNjcuNjA5NkgzOC42MTYyWk0zOC42MTYyIDY3LjU5ODhWNjcuNjA5Nkg0MC4xMTYyVjY3LjU5ODhIMzguNjE2MlpNMzguNjE2MiA2Ny41ODgxVjY3LjU5ODhINDAuMTE2MlY2Ny41ODgxSDM4LjYxNjJaTTM4LjYxNjIgNjcuNTc3M1Y2Ny41ODgxSDQwLjExNjJWNjcuNTc3M0gzOC42MTYyWk0zOC42MTYyIDY3LjU2NjVWNjcuNTc3M0g0MC4xMTYyVjY3LjU2NjVIMzguNjE2MlpNMzguNjE2MiA2Ny41NTU4VjY3LjU2NjVINDAuMTE2MlY2Ny41NTU4SDM4LjYxNjJaTTM4LjYxNjIgNjcuNTQ1VjY3LjU1NThINDAuMTE2MlY2Ny41NDVIMzguNjE2MlpNMzguNjE2MiA2Ny41MzQzVjY3LjU0NUg0MC4xMTYyVjY3LjUzNDNIMzguNjE2MlpNMzguNjE2MiA2Ny41MjM2VjY3LjUzNDNINDAuMTE2MlY2Ny41MjM2SDM4LjYxNjJaTTM4LjYxNjIgNjcuNTEyOFY2Ny41MjM2SDQwLjExNjJWNjcuNTEyOEgzOC42MTYyWk0zOC42MTYyIDY3LjUwMjFWNjcuNTEyOEg0MC4xMTYyVjY3LjUwMjFIMzguNjE2MlpNMzguNjE2MiA2Ny40OTE0VjY3LjUwMjFINDAuMTE2MlY2Ny40OTE0SDM4LjYxNjJaTTM4LjYxNjIgNjcuNDgwN1Y2Ny40OTE0SDQwLjExNjJWNjcuNDgwN0gzOC42MTYyWk0zOC42MTYyIDY3LjQ3VjY3LjQ4MDdINDAuMTE2MlY2Ny40N0gzOC42MTYyWk0zOC42MTYyIDY3LjQ1OTNWNjcuNDdINDAuMTE2MlY2Ny40NTkzSDM4LjYxNjJaTTM4LjYxNjIgNjcuNDQ4NlY2Ny40NTkzSDQwLjExNjJWNjcuNDQ4NkgzOC42MTYyWk0zOC42MTYyIDY3LjQzNzlWNjcuNDQ4Nkg0MC4xMTYyVjY3LjQzNzlIMzguNjE2MlpNMzguNjE2MiA2Ny40MjczVjY3LjQzNzlINDAuMTE2MlY2Ny40MjczSDM4LjYxNjJaTTM4LjYxNjIgNjcuNDE2NlY2Ny40MjczSDQwLjExNjJWNjcuNDE2NkgzOC42MTYyWk0zOC42MTYyIDY3LjQwNTlWNjcuNDE2Nkg0MC4xMTYyVjY3LjQwNTlIMzguNjE2MlpNMzguNjE2MiA2Ny4zOTUzVjY3LjQwNTlINDAuMTE2MlY2Ny4zOTUzSDM4LjYxNjJaTTM4LjYxNjIgNjcuMzg0NlY2Ny4zOTUzSDQwLjExNjJWNjcuMzg0NkgzOC42MTYyWk0zOC42MTYyIDY3LjM3NFY2Ny4zODQ2SDQwLjExNjJWNjcuMzc0SDM4LjYxNjJaTTM4LjYxNjIgNjcuMzYzM1Y2Ny4zNzRINDAuMTE2MlY2Ny4zNjMzSDM4LjYxNjJaTTM4LjYxNjIgNjcuMzUyN1Y2Ny4zNjMzSDQwLjExNjJWNjcuMzUyN0gzOC42MTYyWk0zOC42MTYyIDY3LjM0MjFWNjcuMzUyN0g0MC4xMTYyVjY3LjM0MjFIMzguNjE2MlpNMzguNjE2MiA2Ny4zMzE1VjY3LjM0MjFINDAuMTE2MlY2Ny4zMzE1SDM4LjYxNjJaTTM4LjYxNjIgNjcuMzIwOFY2Ny4zMzE1SDQwLjExNjJWNjcuMzIwOEgzOC42MTYyWk0zOC42MTYyIDY3LjMxMDJWNjcuMzIwOEg0MC4xMTYyVjY3LjMxMDJIMzguNjE2MlpNMzguNjE2MiA2Ny4yOTk2VjY3LjMxMDJINDAuMTE2MlY2Ny4yOTk2SDM4LjYxNjJaTTM4LjYxNjIgNjcuMjg5VjY3LjI5OTZINDAuMTE2MlY2Ny4yODlIMzguNjE2MlpNMzguNjE2MiA2Ny4yNzg0VjY3LjI4OUg0MC4xMTYyVjY3LjI3ODRIMzguNjE2MlpNMzguNjE2MiA2Ny4yNjc5VjY3LjI3ODRINDAuMTE2MlY2Ny4yNjc5SDM4LjYxNjJaTTM4LjYxNjIgNjcuMjU3M1Y2Ny4yNjc5SDQwLjExNjJWNjcuMjU3M0gzOC42MTYyWk0zOC42MTYyIDY3LjI0NjdWNjcuMjU3M0g0MC4xMTYyVjY3LjI0NjdIMzguNjE2MlpNMzguNjE2MiA2Ny4yMzYxVjY3LjI0NjdINDAuMTE2MlY2Ny4yMzYxSDM4LjYxNjJaTTM4LjYxNjIgNjcuMjI1NlY2Ny4yMzYxSDQwLjExNjJWNjcuMjI1NkgzOC42MTYyWk0zOC42MTYyIDY3LjIxNVY2Ny4yMjU2SDQwLjExNjJWNjcuMjE1SDM4LjYxNjJaTTM4LjYxNjIgNjcuMjA0NVY2Ny4yMTVINDAuMTE2MlY2Ny4yMDQ1SDM4LjYxNjJaTTM4LjYxNjIgNjcuMTk0VjY3LjIwNDVINDAuMTE2MlY2Ny4xOTRIMzguNjE2MlpNMzguNjE2MiA2Ny4xODM0VjY3LjE5NEg0MC4xMTYyVjY3LjE4MzRIMzguNjE2MlpNMzguNjE2MiA2Ny4xNzI5VjY3LjE4MzRINDAuMTE2MlY2Ny4xNzI5SDM4LjYxNjJaTTM4LjYxNjIgNjcuMTYyNFY2Ny4xNzI5SDQwLjExNjJWNjcuMTYyNEgzOC42MTYyWk0zOC42MTYyIDY3LjE1MTlWNjcuMTYyNEg0MC4xMTYyVjY3LjE1MTlIMzguNjE2MlpNMzguNjE2MiA2Ny4xNDEzVjY3LjE1MTlINDAuMTE2MlY2Ny4xNDEzSDM4LjYxNjJaTTM4LjYxNjIgNjcuMTMwOFY2Ny4xNDEzSDQwLjExNjJWNjcuMTMwOEgzOC42MTYyWk0zOC42MTYyIDY3LjEyMDNWNjcuMTMwOEg0MC4xMTYyVjY3LjEyMDNIMzguNjE2MlpNMzguNjE2MiA2Ny4xMDk5VjY3LjEyMDNINDAuMTE2MlY2Ny4xMDk5SDM4LjYxNjJaTTM4LjYxNjIgNjcuMDk5NFY2Ny4xMDk5SDQwLjExNjJWNjcuMDk5NEgzOC42MTYyWk0zOC42MTYyIDY3LjA4ODlWNjcuMDk5NEg0MC4xMTYyVjY3LjA4ODlIMzguNjE2MlpNMzguNjE2MiA2Ny4wNzg0VjY3LjA4ODlINDAuMTE2MlY2Ny4wNzg0SDM4LjYxNjJaTTM4LjYxNjIgNjcuMDY4VjY3LjA3ODRINDAuMTE2MlY2Ny4wNjhIMzguNjE2MlpNMzguNjE2MiA2Ny4wNTc1VjY3LjA2OEg0MC4xMTYyVjY3LjA1NzVIMzguNjE2MlpNMzguNjE2MiA2Ny4wNDdWNjcuMDU3NUg0MC4xMTYyVjY3LjA0N0gzOC42MTYyWk0zOC42MTYyIDY3LjAzNjZWNjcuMDQ3SDQwLjExNjJWNjcuMDM2NkgzOC42MTYyWk0zOC42MTYyIDY3LjAyNjJWNjcuMDM2Nkg0MC4xMTYyVjY3LjAyNjJIMzguNjE2MlpNMzguNjE2MiA2Ny4wMTU3VjY3LjAyNjJINDAuMTE2MlY2Ny4wMTU3SDM4LjYxNjJaTTM4LjYxNjIgNjcuMDA1M1Y2Ny4wMTU3SDQwLjExNjJWNjcuMDA1M0gzOC42MTYyWk0zOC42MTYyIDY2Ljk5NDlWNjcuMDA1M0g0MC4xMTYyVjY2Ljk5NDlIMzguNjE2MlpNMzguNjE2MiA2Ni45ODQ1VjY2Ljk5NDlINDAuMTE2MlY2Ni45ODQ1SDM4LjYxNjJaTTM4LjYxNjIgNjYuOTc0VjY2Ljk4NDVINDAuMTE2MlY2Ni45NzRIMzguNjE2MlpNMzguNjE2MiA2Ni45NjM2VjY2Ljk3NEg0MC4xMTYyVjY2Ljk2MzZIMzguNjE2MlpNMzguNjE2MiA2Ni45NTMyVjY2Ljk2MzZINDAuMTE2MlY2Ni45NTMySDM4LjYxNjJaTTM4LjYxNjIgNjYuOTQyOVY2Ni45NTMySDQwLjExNjJWNjYuOTQyOUgzOC42MTYyWk0zOC42MTYyIDY2LjkzMjVWNjYuOTQyOUg0MC4xMTYyVjY2LjkzMjVIMzguNjE2MlpNMzguNjE2MiA2Ni45MjIxVjY2LjkzMjVINDAuMTE2MlY2Ni45MjIxSDM4LjYxNjJaTTM4LjYxNjIgNjYuOTExN1Y2Ni45MjIxSDQwLjExNjJWNjYuOTExN0gzOC42MTYyWk0zOC42MTYyIDY2LjkwMTRWNjYuOTExN0g0MC4xMTYyVjY2LjkwMTRIMzguNjE2MlpNMzguNjE2MiA2Ni44OTFWNjYuOTAxNEg0MC4xMTYyVjY2Ljg5MUgzOC42MTYyWk0zOC42MTYyIDY2Ljg4MDZWNjYuODkxSDQwLjExNjJWNjYuODgwNkgzOC42MTYyWk0zOC42MTYyIDY2Ljg3MDNWNjYuODgwNkg0MC4xMTYyVjY2Ljg3MDNIMzguNjE2MlpNMzguNjE2MiA2Ni44NlY2Ni44NzAzSDQwLjExNjJWNjYuODZIMzguNjE2MlpNMzguNjE2MiA2Ni44NDk2VjY2Ljg2SDQwLjExNjJWNjYuODQ5NkgzOC42MTYyWk0zOC42MTYyIDY2LjgzOTNWNjYuODQ5Nkg0MC4xMTYyVjY2LjgzOTNIMzguNjE2MlpNMzguNjE2MiA2Ni44MjlWNjYuODM5M0g0MC4xMTYyVjY2LjgyOUgzOC42MTYyWk0zOC42MTYyIDY2LjgxODZWNjYuODI5SDQwLjExNjJWNjYuODE4NkgzOC42MTYyWk0zOC42MTYyIDY2LjgwODNWNjYuODE4Nkg0MC4xMTYyVjY2LjgwODNIMzguNjE2MlpNMzguNjE2MiA2Ni43OThWNjYuODA4M0g0MC4xMTYyVjY2Ljc5OEgzOC42MTYyWk0zOC42MTYyIDY2Ljc4NzdWNjYuNzk4SDQwLjExNjJWNjYuNzg3N0gzOC42MTYyWk0zOC42MTYyIDY2Ljc3NzRWNjYuNzg3N0g0MC4xMTYyVjY2Ljc3NzRIMzguNjE2MlpNMzguNjE2MiA2Ni43NjcyVjY2Ljc3NzRINDAuMTE2MlY2Ni43NjcySDM4LjYxNjJaTTM4LjYxNjIgNjYuNzU2OVY2Ni43NjcySDQwLjExNjJWNjYuNzU2OUgzOC42MTYyWk0zOC42MTYyIDY2Ljc0NjZWNjYuNzU2OUg0MC4xMTYyVjY2Ljc0NjZIMzguNjE2MlpNMzguNjE2MiA2Ni43MzYzVjY2Ljc0NjZINDAuMTE2MlY2Ni43MzYzSDM4LjYxNjJaTTM4LjYxNjIgNjYuNzI2MVY2Ni43MzYzSDQwLjExNjJWNjYuNzI2MUgzOC42MTYyWk0zOC42MTYyIDY2LjcxNThWNjYuNzI2MUg0MC4xMTYyVjY2LjcxNThIMzguNjE2MlpNMzguNjE2MiA2Ni43MDU2VjY2LjcxNThINDAuMTE2MlY2Ni43MDU2SDM4LjYxNjJaTTM4LjYxNjIgNjYuNjk1M1Y2Ni43MDU2SDQwLjExNjJWNjYuNjk1M0gzOC42MTYyWk0zOC42MTYyIDY2LjY4NTFWNjYuNjk1M0g0MC4xMTYyVjY2LjY4NTFIMzguNjE2MlpNMzguNjE2MiA2Ni42NzQ5VjY2LjY4NTFINDAuMTE2MlY2Ni42NzQ5SDM4LjYxNjJaTTM4LjYxNjIgNjYuNjY0NlY2Ni42NzQ5SDQwLjExNjJWNjYuNjY0NkgzOC42MTYyWk0zOC42MTYyIDY2LjY1NDRWNjYuNjY0Nkg0MC4xMTYyVjY2LjY1NDRIMzguNjE2MlpNMzguNjE2MiA2Ni42NDQyVjY2LjY1NDRINDAuMTE2MlY2Ni42NDQySDM4LjYxNjJaTTM4LjYxNjIgNjYuNjM0VjY2LjY0NDJINDAuMTE2MlY2Ni42MzRIMzguNjE2MlpNMzguNjE2MiA2Ni42MjM4VjY2LjYzNEg0MC4xMTYyVjY2LjYyMzhIMzguNjE2MlpNMzguNjE2MiA2Ni42MTM2VjY2LjYyMzhINDAuMTE2MlY2Ni42MTM2SDM4LjYxNjJaTTM4LjYxNjIgNjYuNjAzNFY2Ni42MTM2SDQwLjExNjJWNjYuNjAzNEgzOC42MTYyWk0zOC42MTYyIDY2LjU5MzNWNjYuNjAzNEg0MC4xMTYyVjY2LjU5MzNIMzguNjE2MlpNMzguNjE2MiA2Ni41ODMxVjY2LjU5MzNINDAuMTE2MlY2Ni41ODMxSDM4LjYxNjJaTTM4LjYxNjIgNjYuNTcyOVY2Ni41ODMxSDQwLjExNjJWNjYuNTcyOUgzOC42MTYyWk0zOC42MTYyIDY2LjU2MjdWNjYuNTcyOUg0MC4xMTYyVjY2LjU2MjdIMzguNjE2MlpNMzguNjE2MiA2Ni41NTI2VjY2LjU2MjdINDAuMTE2MlY2Ni41NTI2SDM4LjYxNjJaTTM4LjYxNjIgNjYuNTQyNFY2Ni41NTI2SDQwLjExNjJWNjYuNTQyNEgzOC42MTYyWk0zOC42MTYyIDY2LjUzMjNWNjYuNTQyNEg0MC4xMTYyVjY2LjUzMjNIMzguNjE2MlpNMzguNjE2MiA2Ni41MjIyVjY2LjUzMjNINDAuMTE2MlY2Ni41MjIySDM4LjYxNjJaTTM4LjYxNjIgNjYuNTEyVjY2LjUyMjJINDAuMTE2MlY2Ni41MTJIMzguNjE2MlpNMzguNjE2MiA2Ni41MDE5VjY2LjUxMkg0MC4xMTYyVjY2LjUwMTlIMzguNjE2MlpNMzguNjE2MiA2Ni40OTE4VjY2LjUwMTlINDAuMTE2MlY2Ni40OTE4SDM4LjYxNjJaTTM4LjYxNjIgNjYuNDgxN1Y2Ni40OTE4SDQwLjExNjJWNjYuNDgxN0gzOC42MTYyWk0zOC42MTYyIDY2LjQ3MTZWNjYuNDgxN0g0MC4xMTYyVjY2LjQ3MTZIMzguNjE2MlpNMzguNjE2MiA2Ni40NjE1VjY2LjQ3MTZINDAuMTE2MlY2Ni40NjE1SDM4LjYxNjJaTTM4LjYxNjIgNjYuNDUxNFY2Ni40NjE1SDQwLjExNjJWNjYuNDUxNEgzOC42MTYyWk0zOC42MTYyIDY2LjQ0MTNWNjYuNDUxNEg0MC4xMTYyVjY2LjQ0MTNIMzguNjE2MlpNMzguNjE2MiA2Ni40MzEyVjY2LjQ0MTNINDAuMTE2MlY2Ni40MzEySDM4LjYxNjJaTTM4LjYxNjIgNjYuNDIxMVY2Ni40MzEySDQwLjExNjJWNjYuNDIxMUgzOC42MTYyWk0zOC42MTYyIDY2LjQxMTFWNjYuNDIxMUg0MC4xMTYyVjY2LjQxMTFIMzguNjE2MlpNMzguNjE2MiA2Ni40MDFWNjYuNDExMUg0MC4xMTYyVjY2LjQwMUgzOC42MTYyWk0zOC42MTYyIDY2LjM5MVY2Ni40MDFINDAuMTE2MlY2Ni4zOTFIMzguNjE2MlpNMzguNjE2MiA2Ni4zODA5VjY2LjM5MUg0MC4xMTYyVjY2LjM4MDlIMzguNjE2MlpNMzguNjE2MiA2Ni4zNzA5VjY2LjM4MDlINDAuMTE2MlY2Ni4zNzA5SDM4LjYxNjJaTTM4LjYxNjIgNjYuMzYwOFY2Ni4zNzA5SDQwLjExNjJWNjYuMzYwOEgzOC42MTYyWk0zOC42MTYyIDY2LjM1MDhWNjYuMzYwOEg0MC4xMTYyVjY2LjM1MDhIMzguNjE2MlpNMzguNjE2MiA2Ni4zNDA4VjY2LjM1MDhINDAuMTE2MlY2Ni4zNDA4SDM4LjYxNjJaTTM4LjYxNjIgNjYuMzMwN1Y2Ni4zNDA4SDQwLjExNjJWNjYuMzMwN0gzOC42MTYyWk0zOC42MTYyIDY2LjMyMDdWNjYuMzMwN0g0MC4xMTYyVjY2LjMyMDdIMzguNjE2MlpNMzguNjE2MiA2Ni4zMTA3VjY2LjMyMDdINDAuMTE2MlY2Ni4zMTA3SDM4LjYxNjJaTTM4LjYxNjIgNjYuMzAwN1Y2Ni4zMTA3SDQwLjExNjJWNjYuMzAwN0gzOC42MTYyWk0zOC42MTYyIDY2LjI5MDdWNjYuMzAwN0g0MC4xMTYyVjY2LjI5MDdIMzguNjE2MlpNNDAuODY2MiA2NS41NDA3SDM5LjM2NjJWNjcuMDQwN0g0MC44NjYyVjY1LjU0MDdaTTQxLjYxNjIgNjYuMzAwN1Y2Ni4yOTA3SDQwLjExNjJWNjYuMzAwN0g0MS42MTYyWk00MS42MTYyIDY2LjMxMDdWNjYuMzAwN0g0MC4xMTYyVjY2LjMxMDdINDEuNjE2MlpNNDEuNjE2MiA2Ni4zMjA3VjY2LjMxMDdINDAuMTE2MlY2Ni4zMjA3SDQxLjYxNjJaTTQxLjYxNjIgNjYuMzMwN1Y2Ni4zMjA3SDQwLjExNjJWNjYuMzMwN0g0MS42MTYyWk00MS42MTYyIDY2LjM0MDhWNjYuMzMwN0g0MC4xMTYyVjY2LjM0MDhINDEuNjE2MlpNNDEuNjE2MiA2Ni4zNTA4VjY2LjM0MDhINDAuMTE2MlY2Ni4zNTA4SDQxLjYxNjJaTTQxLjYxNjIgNjYuMzYwOFY2Ni4zNTA4SDQwLjExNjJWNjYuMzYwOEg0MS42MTYyWk00MS42MTYyIDY2LjM3MDlWNjYuMzYwOEg0MC4xMTYyVjY2LjM3MDlINDEuNjE2MlpNNDEuNjE2MiA2Ni4zODA5VjY2LjM3MDlINDAuMTE2MlY2Ni4zODA5SDQxLjYxNjJaTTQxLjYxNjIgNjYuMzkxVjY2LjM4MDlINDAuMTE2MlY2Ni4zOTFINDEuNjE2MlpNNDEuNjE2MiA2Ni40MDFWNjYuMzkxSDQwLjExNjJWNjYuNDAxSDQxLjYxNjJaTTQxLjYxNjIgNjYuNDExMVY2Ni40MDFINDAuMTE2MlY2Ni40MTExSDQxLjYxNjJaTTQxLjYxNjIgNjYuNDIxMVY2Ni40MTExSDQwLjExNjJWNjYuNDIxMUg0MS42MTYyWk00MS42MTYyIDY2LjQzMTJWNjYuNDIxMUg0MC4xMTYyVjY2LjQzMTJINDEuNjE2MlpNNDEuNjE2MiA2Ni40NDEzVjY2LjQzMTJINDAuMTE2MlY2Ni40NDEzSDQxLjYxNjJaTTQxLjYxNjIgNjYuNDUxNFY2Ni40NDEzSDQwLjExNjJWNjYuNDUxNEg0MS42MTYyWk00MS42MTYyIDY2LjQ2MTVWNjYuNDUxNEg0MC4xMTYyVjY2LjQ2MTVINDEuNjE2MlpNNDEuNjE2MiA2Ni40NzE2VjY2LjQ2MTVINDAuMTE2MlY2Ni40NzE2SDQxLjYxNjJaTTQxLjYxNjIgNjYuNDgxN1Y2Ni40NzE2SDQwLjExNjJWNjYuNDgxN0g0MS42MTYyWk00MS42MTYyIDY2LjQ5MThWNjYuNDgxN0g0MC4xMTYyVjY2LjQ5MThINDEuNjE2MlpNNDEuNjE2MiA2Ni41MDE5VjY2LjQ5MThINDAuMTE2MlY2Ni41MDE5SDQxLjYxNjJaTTQxLjYxNjIgNjYuNTEyVjY2LjUwMTlINDAuMTE2MlY2Ni41MTJINDEuNjE2MlpNNDEuNjE2MiA2Ni41MjIyVjY2LjUxMkg0MC4xMTYyVjY2LjUyMjJINDEuNjE2MlpNNDEuNjE2MiA2Ni41MzIzVjY2LjUyMjJINDAuMTE2MlY2Ni41MzIzSDQxLjYxNjJaTTQxLjYxNjIgNjYuNTQyNFY2Ni41MzIzSDQwLjExNjJWNjYuNTQyNEg0MS42MTYyWk00MS42MTYyIDY2LjU1MjZWNjYuNTQyNEg0MC4xMTYyVjY2LjU1MjZINDEuNjE2MlpNNDEuNjE2MiA2Ni41NjI3VjY2LjU1MjZINDAuMTE2MlY2Ni41NjI3SDQxLjYxNjJaTTQxLjYxNjIgNjYuNTcyOVY2Ni41NjI3SDQwLjExNjJWNjYuNTcyOUg0MS42MTYyWk00MS42MTYyIDY2LjU4MzFWNjYuNTcyOUg0MC4xMTYyVjY2LjU4MzFINDEuNjE2MlpNNDEuNjE2MiA2Ni41OTMzVjY2LjU4MzFINDAuMTE2MlY2Ni41OTMzSDQxLjYxNjJaTTQxLjYxNjIgNjYuNjAzNFY2Ni41OTMzSDQwLjExNjJWNjYuNjAzNEg0MS42MTYyWk00MS42MTYyIDY2LjYxMzZWNjYuNjAzNEg0MC4xMTYyVjY2LjYxMzZINDEuNjE2MlpNNDEuNjE2MiA2Ni42MjM4VjY2LjYxMzZINDAuMTE2MlY2Ni42MjM4SDQxLjYxNjJaTTQxLjYxNjIgNjYuNjM0VjY2LjYyMzhINDAuMTE2MlY2Ni42MzRINDEuNjE2MlpNNDEuNjE2MiA2Ni42NDQyVjY2LjYzNEg0MC4xMTYyVjY2LjY0NDJINDEuNjE2MlpNNDEuNjE2MiA2Ni42NTQ0VjY2LjY0NDJINDAuMTE2MlY2Ni42NTQ0SDQxLjYxNjJaTTQxLjYxNjIgNjYuNjY0NlY2Ni42NTQ0SDQwLjExNjJWNjYuNjY0Nkg0MS42MTYyWk00MS42MTYyIDY2LjY3NDlWNjYuNjY0Nkg0MC4xMTYyVjY2LjY3NDlINDEuNjE2MlpNNDEuNjE2MiA2Ni42ODUxVjY2LjY3NDlINDAuMTE2MlY2Ni42ODUxSDQxLjYxNjJaTTQxLjYxNjIgNjYuNjk1M1Y2Ni42ODUxSDQwLjExNjJWNjYuNjk1M0g0MS42MTYyWk00MS42MTYyIDY2LjcwNTZWNjYuNjk1M0g0MC4xMTYyVjY2LjcwNTZINDEuNjE2MlpNNDEuNjE2MiA2Ni43MTU4VjY2LjcwNTZINDAuMTE2MlY2Ni43MTU4SDQxLjYxNjJaTTQxLjYxNjIgNjYuNzI2MVY2Ni43MTU4SDQwLjExNjJWNjYuNzI2MUg0MS42MTYyWk00MS42MTYyIDY2LjczNjNWNjYuNzI2MUg0MC4xMTYyVjY2LjczNjNINDEuNjE2MlpNNDEuNjE2MiA2Ni43NDY2VjY2LjczNjNINDAuMTE2MlY2Ni43NDY2SDQxLjYxNjJaTTQxLjYxNjIgNjYuNzU2OVY2Ni43NDY2SDQwLjExNjJWNjYuNzU2OUg0MS42MTYyWk00MS42MTYyIDY2Ljc2NzJWNjYuNzU2OUg0MC4xMTYyVjY2Ljc2NzJINDEuNjE2MlpNNDEuNjE2MiA2Ni43Nzc0VjY2Ljc2NzJINDAuMTE2MlY2Ni43Nzc0SDQxLjYxNjJaTTQxLjYxNjIgNjYuNzg3N1Y2Ni43Nzc0SDQwLjExNjJWNjYuNzg3N0g0MS42MTYyWk00MS42MTYyIDY2Ljc5OFY2Ni43ODc3SDQwLjExNjJWNjYuNzk4SDQxLjYxNjJaTTQxLjYxNjIgNjYuODA4M1Y2Ni43OThINDAuMTE2MlY2Ni44MDgzSDQxLjYxNjJaTTQxLjYxNjIgNjYuODE4NlY2Ni44MDgzSDQwLjExNjJWNjYuODE4Nkg0MS42MTYyWk00MS42MTYyIDY2LjgyOVY2Ni44MTg2SDQwLjExNjJWNjYuODI5SDQxLjYxNjJaTTQxLjYxNjIgNjYuODM5M1Y2Ni44MjlINDAuMTE2MlY2Ni44MzkzSDQxLjYxNjJaTTQxLjYxNjIgNjYuODQ5NlY2Ni44MzkzSDQwLjExNjJWNjYuODQ5Nkg0MS42MTYyWk00MS42MTYyIDY2Ljg2VjY2Ljg0OTZINDAuMTE2MlY2Ni44Nkg0MS42MTYyWk00MS42MTYyIDY2Ljg3MDNWNjYuODZINDAuMTE2MlY2Ni44NzAzSDQxLjYxNjJaTTQxLjYxNjIgNjYuODgwNlY2Ni44NzAzSDQwLjExNjJWNjYuODgwNkg0MS42MTYyWk00MS42MTYyIDY2Ljg5MVY2Ni44ODA2SDQwLjExNjJWNjYuODkxSDQxLjYxNjJaTTQxLjYxNjIgNjYuOTAxNFY2Ni44OTFINDAuMTE2MlY2Ni45MDE0SDQxLjYxNjJaTTQxLjYxNjIgNjYuOTExN1Y2Ni45MDE0SDQwLjExNjJWNjYuOTExN0g0MS42MTYyWk00MS42MTYyIDY2LjkyMjFWNjYuOTExN0g0MC4xMTYyVjY2LjkyMjFINDEuNjE2MlpNNDEuNjE2MiA2Ni45MzI1VjY2LjkyMjFINDAuMTE2MlY2Ni45MzI1SDQxLjYxNjJaTTQxLjYxNjIgNjYuOTQyOVY2Ni45MzI1SDQwLjExNjJWNjYuOTQyOUg0MS42MTYyWk00MS42MTYyIDY2Ljk1MzJWNjYuOTQyOUg0MC4xMTYyVjY2Ljk1MzJINDEuNjE2MlpNNDEuNjE2MiA2Ni45NjM2VjY2Ljk1MzJINDAuMTE2MlY2Ni45NjM2SDQxLjYxNjJaTTQxLjYxNjIgNjYuOTc0VjY2Ljk2MzZINDAuMTE2MlY2Ni45NzRINDEuNjE2MlpNNDEuNjE2MiA2Ni45ODQ1VjY2Ljk3NEg0MC4xMTYyVjY2Ljk4NDVINDEuNjE2MlpNNDEuNjE2MiA2Ni45OTQ5VjY2Ljk4NDVINDAuMTE2MlY2Ni45OTQ5SDQxLjYxNjJaTTQxLjYxNjIgNjcuMDA1M1Y2Ni45OTQ5SDQwLjExNjJWNjcuMDA1M0g0MS42MTYyWk00MS42MTYyIDY3LjAxNTdWNjcuMDA1M0g0MC4xMTYyVjY3LjAxNTdINDEuNjE2MlpNNDEuNjE2MiA2Ny4wMjYyVjY3LjAxNTdINDAuMTE2MlY2Ny4wMjYySDQxLjYxNjJaTTQxLjYxNjIgNjcuMDM2NlY2Ny4wMjYySDQwLjExNjJWNjcuMDM2Nkg0MS42MTYyWk00MS42MTYyIDY3LjA0N1Y2Ny4wMzY2SDQwLjExNjJWNjcuMDQ3SDQxLjYxNjJaTTQxLjYxNjIgNjcuMDU3NVY2Ny4wNDdINDAuMTE2MlY2Ny4wNTc1SDQxLjYxNjJaTTQxLjYxNjIgNjcuMDY4VjY3LjA1NzVINDAuMTE2MlY2Ny4wNjhINDEuNjE2MlpNNDEuNjE2MiA2Ny4wNzg0VjY3LjA2OEg0MC4xMTYyVjY3LjA3ODRINDEuNjE2MlpNNDEuNjE2MiA2Ny4wODg5VjY3LjA3ODRINDAuMTE2MlY2Ny4wODg5SDQxLjYxNjJaTTQxLjYxNjIgNjcuMDk5NFY2Ny4wODg5SDQwLjExNjJWNjcuMDk5NEg0MS42MTYyWk00MS42MTYyIDY3LjEwOTlWNjcuMDk5NEg0MC4xMTYyVjY3LjEwOTlINDEuNjE2MlpNNDEuNjE2MiA2Ny4xMjAzVjY3LjEwOTlINDAuMTE2MlY2Ny4xMjAzSDQxLjYxNjJaTTQxLjYxNjIgNjcuMTMwOFY2Ny4xMjAzSDQwLjExNjJWNjcuMTMwOEg0MS42MTYyWk00MS42MTYyIDY3LjE0MTNWNjcuMTMwOEg0MC4xMTYyVjY3LjE0MTNINDEuNjE2MlpNNDEuNjE2MiA2Ny4xNTE5VjY3LjE0MTNINDAuMTE2MlY2Ny4xNTE5SDQxLjYxNjJaTTQxLjYxNjIgNjcuMTYyNFY2Ny4xNTE5SDQwLjExNjJWNjcuMTYyNEg0MS42MTYyWk00MS42MTYyIDY3LjE3MjlWNjcuMTYyNEg0MC4xMTYyVjY3LjE3MjlINDEuNjE2MlpNNDEuNjE2MiA2Ny4xODM0VjY3LjE3MjlINDAuMTE2MlY2Ny4xODM0SDQxLjYxNjJaTTQxLjYxNjIgNjcuMTk0VjY3LjE4MzRINDAuMTE2MlY2Ny4xOTRINDEuNjE2MlpNNDEuNjE2MiA2Ny4yMDQ1VjY3LjE5NEg0MC4xMTYyVjY3LjIwNDVINDEuNjE2MlpNNDEuNjE2MiA2Ny4yMTVWNjcuMjA0NUg0MC4xMTYyVjY3LjIxNUg0MS42MTYyWk00MS42MTYyIDY3LjIyNTZWNjcuMjE1SDQwLjExNjJWNjcuMjI1Nkg0MS42MTYyWk00MS42MTYyIDY3LjIzNjFWNjcuMjI1Nkg0MC4xMTYyVjY3LjIzNjFINDEuNjE2MlpNNDEuNjE2MiA2Ny4yNDY3VjY3LjIzNjFINDAuMTE2MlY2Ny4yNDY3SDQxLjYxNjJaTTQxLjYxNjIgNjcuMjU3M1Y2Ny4yNDY3SDQwLjExNjJWNjcuMjU3M0g0MS42MTYyWk00MS42MTYyIDY3LjI2NzlWNjcuMjU3M0g0MC4xMTYyVjY3LjI2NzlINDEuNjE2MlpNNDEuNjE2MiA2Ny4yNzg0VjY3LjI2NzlINDAuMTE2MlY2Ny4yNzg0SDQxLjYxNjJaTTQxLjYxNjIgNjcuMjg5VjY3LjI3ODRINDAuMTE2MlY2Ny4yODlINDEuNjE2MlpNNDEuNjE2MiA2Ny4yOTk2VjY3LjI4OUg0MC4xMTYyVjY3LjI5OTZINDEuNjE2MlpNNDEuNjE2MiA2Ny4zMTAyVjY3LjI5OTZINDAuMTE2MlY2Ny4zMTAySDQxLjYxNjJaTTQxLjYxNjIgNjcuMzIwOFY2Ny4zMTAySDQwLjExNjJWNjcuMzIwOEg0MS42MTYyWk00MS42MTYyIDY3LjMzMTVWNjcuMzIwOEg0MC4xMTYyVjY3LjMzMTVINDEuNjE2MlpNNDEuNjE2MiA2Ny4zNDIxVjY3LjMzMTVINDAuMTE2MlY2Ny4zNDIxSDQxLjYxNjJaTTQxLjYxNjIgNjcuMzUyN1Y2Ny4zNDIxSDQwLjExNjJWNjcuMzUyN0g0MS42MTYyWk00MS42MTYyIDY3LjM2MzNWNjcuMzUyN0g0MC4xMTYyVjY3LjM2MzNINDEuNjE2MlpNNDEuNjE2MiA2Ny4zNzRWNjcuMzYzM0g0MC4xMTYyVjY3LjM3NEg0MS42MTYyWk00MS42MTYyIDY3LjM4NDZWNjcuMzc0SDQwLjExNjJWNjcuMzg0Nkg0MS42MTYyWk00MS42MTYyIDY3LjM5NTNWNjcuMzg0Nkg0MC4xMTYyVjY3LjM5NTNINDEuNjE2MlpNNDEuNjE2MiA2Ny40MDU5VjY3LjM5NTNINDAuMTE2MlY2Ny40MDU5SDQxLjYxNjJaTTQxLjYxNjIgNjcuNDE2NlY2Ny40MDU5SDQwLjExNjJWNjcuNDE2Nkg0MS42MTYyWk00MS42MTYyIDY3LjQyNzNWNjcuNDE2Nkg0MC4xMTYyVjY3LjQyNzNINDEuNjE2MlpNNDEuNjE2MiA2Ny40Mzc5VjY3LjQyNzNINDAuMTE2MlY2Ny40Mzc5SDQxLjYxNjJaTTQxLjYxNjIgNjcuNDQ4NlY2Ny40Mzc5SDQwLjExNjJWNjcuNDQ4Nkg0MS42MTYyWk00MS42MTYyIDY3LjQ1OTNWNjcuNDQ4Nkg0MC4xMTYyVjY3LjQ1OTNINDEuNjE2MlpNNDEuNjE2MiA2Ny40N1Y2Ny40NTkzSDQwLjExNjJWNjcuNDdINDEuNjE2MlpNNDEuNjE2MiA2Ny40ODA3VjY3LjQ3SDQwLjExNjJWNjcuNDgwN0g0MS42MTYyWk00MS42MTYyIDY3LjQ5MTRWNjcuNDgwN0g0MC4xMTYyVjY3LjQ5MTRINDEuNjE2MlpNNDEuNjE2MiA2Ny41MDIxVjY3LjQ5MTRINDAuMTE2MlY2Ny41MDIxSDQxLjYxNjJaTTQxLjYxNjIgNjcuNTEyOFY2Ny41MDIxSDQwLjExNjJWNjcuNTEyOEg0MS42MTYyWk00MS42MTYyIDY3LjUyMzZWNjcuNTEyOEg0MC4xMTYyVjY3LjUyMzZINDEuNjE2MlpNNDEuNjE2MiA2Ny41MzQzVjY3LjUyMzZINDAuMTE2MlY2Ny41MzQzSDQxLjYxNjJaTTQxLjYxNjIgNjcuNTQ1VjY3LjUzNDNINDAuMTE2MlY2Ny41NDVINDEuNjE2MlpNNDEuNjE2MiA2Ny41NTU4VjY3LjU0NUg0MC4xMTYyVjY3LjU1NThINDEuNjE2MlpNNDEuNjE2MiA2Ny41NjY1VjY3LjU1NThINDAuMTE2MlY2Ny41NjY1SDQxLjYxNjJaTTQxLjYxNjIgNjcuNTc3M1Y2Ny41NjY1SDQwLjExNjJWNjcuNTc3M0g0MS42MTYyWk00MS42MTYyIDY3LjU4ODFWNjcuNTc3M0g0MC4xMTYyVjY3LjU4ODFINDEuNjE2MlpNNDEuNjE2MiA2Ny41OTg4VjY3LjU4ODFINDAuMTE2MlY2Ny41OTg4SDQxLjYxNjJaTTQxLjYxNjIgNjcuNjA5NlY2Ny41OTg4SDQwLjExNjJWNjcuNjA5Nkg0MS42MTYyWk00MS42MTYyIDY3LjYyMDRWNjcuNjA5Nkg0MC4xMTYyVjY3LjYyMDRINDEuNjE2MlpNNDEuNjE2MiA2Ny42MzEyVjY3LjYyMDRINDAuMTE2MlY2Ny42MzEySDQxLjYxNjJaTTQxLjYxNjIgNjcuNjQyVjY3LjYzMTJINDAuMTE2MlY2Ny42NDJINDEuNjE2MlpNNDEuNjE2MiA2Ny42NTI4VjY3LjY0Mkg0MC4xMTYyVjY3LjY1MjhINDEuNjE2MlpNNDEuNjE2MiA2Ny42NjM2VjY3LjY1MjhINDAuMTE2MlY2Ny42NjM2SDQxLjYxNjJaTTQxLjYxNjIgNjcuNjc0NFY2Ny42NjM2SDQwLjExNjJWNjcuNjc0NEg0MS42MTYyWk00MS42MTYyIDY3LjY4NTJWNjcuNjc0NEg0MC4xMTYyVjY3LjY4NTJINDEuNjE2MlpNNDEuNjE2MiA2Ny42OTZWNjcuNjg1Mkg0MC4xMTYyVjY3LjY5Nkg0MS42MTYyWk00MS42MTYyIDY3LjcwNjlWNjcuNjk2SDQwLjExNjJWNjcuNzA2OUg0MS42MTYyWk00MS42MTYyIDY3LjcxNzdWNjcuNzA2OUg0MC4xMTYyVjY3LjcxNzdINDEuNjE2MlpNNDEuNjE2MiA2Ny43Mjg1VjY3LjcxNzdINDAuMTE2MlY2Ny43Mjg1SDQxLjYxNjJaTTQxLjYxNjIgNjcuNzM5NFY2Ny43Mjg1SDQwLjExNjJWNjcuNzM5NEg0MS42MTYyWk00MS42MTYyIDY3Ljc1MDNWNjcuNzM5NEg0MC4xMTYyVjY3Ljc1MDNINDEuNjE2MlpNNDEuNjE2MiA2Ny43NjExVjY3Ljc1MDNINDAuMTE2MlY2Ny43NjExSDQxLjYxNjJaTTQxLjYxNjIgNjcuNzcyVjY3Ljc2MTFINDAuMTE2MlY2Ny43NzJINDEuNjE2MlpNNDEuNjE2MiA2Ny43ODI5VjY3Ljc3Mkg0MC4xMTYyVjY3Ljc4MjlINDEuNjE2MlpNNDEuNjE2MiA2Ny43OTM3VjY3Ljc4MjlINDAuMTE2MlY2Ny43OTM3SDQxLjYxNjJaTTQxLjYxNjIgNjcuODA0NlY2Ny43OTM3SDQwLjExNjJWNjcuODA0Nkg0MS42MTYyWk00MS42MTYyIDY3LjgxNTVWNjcuODA0Nkg0MC4xMTYyVjY3LjgxNTVINDEuNjE2MlpNNDEuNjE2MiA2Ny44MjY0VjY3LjgxNTVINDAuMTE2MlY2Ny44MjY0SDQxLjYxNjJaTTQxLjYxNjIgNjcuODM3M1Y2Ny44MjY0SDQwLjExNjJWNjcuODM3M0g0MS42MTYyWk00MS42MTYyIDY3Ljg0ODJWNjcuODM3M0g0MC4xMTYyVjY3Ljg0ODJINDEuNjE2MlpNNDEuNjE2MiA2Ny44NTkyVjY3Ljg0ODJINDAuMTE2MlY2Ny44NTkySDQxLjYxNjJaTTQxLjYxNjIgNjcuODcwMVY2Ny44NTkySDQwLjExNjJWNjcuODcwMUg0MS42MTYyWk00MS42MTYyIDY3Ljg4MVY2Ny44NzAxSDQwLjExNjJWNjcuODgxSDQxLjYxNjJaTTQxLjYxNjIgNjcuODkxOVY2Ny44ODFINDAuMTE2MlY2Ny44OTE5SDQxLjYxNjJaTTQxLjYxNjIgNjcuOTAyOVY2Ny44OTE5SDQwLjExNjJWNjcuOTAyOUg0MS42MTYyWk00MS42MTYyIDY3LjkxMzhWNjcuOTAyOUg0MC4xMTYyVjY3LjkxMzhINDEuNjE2MlpNNDEuNjE2MiA2Ny45MjQ4VjY3LjkxMzhINDAuMTE2MlY2Ny45MjQ4SDQxLjYxNjJaTTQxLjYxNjIgNjcuOTM1OFY2Ny45MjQ4SDQwLjExNjJWNjcuOTM1OEg0MS42MTYyWk00MS42MTYyIDY3Ljk0NjdWNjcuOTM1OEg0MC4xMTYyVjY3Ljk0NjdINDEuNjE2MlpNNDEuNjE2MiA2Ny45NTc3VjY3Ljk0NjdINDAuMTE2MlY2Ny45NTc3SDQxLjYxNjJaTTQxLjYxNjIgNjcuOTY4N1Y2Ny45NTc3SDQwLjExNjJWNjcuOTY4N0g0MS42MTYyWk00MS42MTYyIDY3Ljk3OTdWNjcuOTY4N0g0MC4xMTYyVjY3Ljk3OTdINDEuNjE2MlpNNDEuNjE2MiA2Ny45OTA3VjY3Ljk3OTdINDAuMTE2MlY2Ny45OTA3SDQxLjYxNjJaTTQxLjYxNjIgNjguMDAxN1Y2Ny45OTA3SDQwLjExNjJWNjguMDAxN0g0MS42MTYyWk00MS42MTYyIDY4LjAxMjdWNjguMDAxN0g0MC4xMTYyVjY4LjAxMjdINDEuNjE2MlpNNDEuNjE2MiA2OC4wMjM3VjY4LjAxMjdINDAuMTE2MlY2OC4wMjM3SDQxLjYxNjJaTTQxLjYxNjIgNjguMDM0N1Y2OC4wMjM3SDQwLjExNjJWNjguMDM0N0g0MS42MTYyWk00MS42MTYyIDY4LjA0NTdWNjguMDM0N0g0MC4xMTYyVjY4LjA0NTdINDEuNjE2MlpNNDEuNjE2MiA2OC4wNTY3VjY4LjA0NTdINDAuMTE2MlY2OC4wNTY3SDQxLjYxNjJaTTQxLjYxNjIgNjguMDY3OFY2OC4wNTY3SDQwLjExNjJWNjguMDY3OEg0MS42MTYyWk00MS42MTYyIDY4LjA3ODhWNjguMDY3OEg0MC4xMTYyVjY4LjA3ODhINDEuNjE2MlpNNDEuNjE2MiA2OC4wODk5VjY4LjA3ODhINDAuMTE2MlY2OC4wODk5SDQxLjYxNjJaTTQxLjYxNjIgNjguMTAwOVY2OC4wODk5SDQwLjExNjJWNjguMTAwOUg0MS42MTYyWk00MS42MTYyIDY4LjExMlY2OC4xMDA5SDQwLjExNjJWNjguMTEySDQxLjYxNjJaTTQxLjYxNjIgNjguMTIzMVY2OC4xMTJINDAuMTE2MlY2OC4xMjMxSDQxLjYxNjJaTTQxLjYxNjIgNjguMTM0MVY2OC4xMjMxSDQwLjExNjJWNjguMTM0MUg0MS42MTYyWk00MS42MTYyIDY4LjE0NTJWNjguMTM0MUg0MC4xMTYyVjY4LjE0NTJINDEuNjE2MlpNNDEuNjE2MiA2OC4xNTYzVjY4LjE0NTJINDAuMTE2MlY2OC4xNTYzSDQxLjYxNjJaTTQxLjYxNjIgNjguMTY3NFY2OC4xNTYzSDQwLjExNjJWNjguMTY3NEg0MS42MTYyWk00MS42MTYyIDY4LjE3ODVWNjguMTY3NEg0MC4xMTYyVjY4LjE3ODVINDEuNjE2MlpNNDEuNjE2MiA2OC4xODk2VjY4LjE3ODVINDAuMTE2MlY2OC4xODk2SDQxLjYxNjJaTTQxLjYxNjIgNjguMjAwN1Y2OC4xODk2SDQwLjExNjJWNjguMjAwN0g0MS42MTYyWk00MS42MTYyIDY4LjIxMThWNjguMjAwN0g0MC4xMTYyVjY4LjIxMThINDEuNjE2MlpNNDEuNjE2MiA2OC4yMjI5VjY4LjIxMThINDAuMTE2MlY2OC4yMjI5SDQxLjYxNjJaTTQxLjYxNjIgNjguMjM0MVY2OC4yMjI5SDQwLjExNjJWNjguMjM0MUg0MS42MTYyWk00MS42MTYyIDY4LjI0NTJWNjguMjM0MUg0MC4xMTYyVjY4LjI0NTJINDEuNjE2MlpNNDEuNjE2MiA2OC4yNTYzVjY4LjI0NTJINDAuMTE2MlY2OC4yNTYzSDQxLjYxNjJaTTQxLjYxNjIgNjguMjY3NVY2OC4yNTYzSDQwLjExNjJWNjguMjY3NUg0MS42MTYyWk00MS42MTYyIDY4LjI3ODZWNjguMjY3NUg0MC4xMTYyVjY4LjI3ODZINDEuNjE2MlpNNDEuNjE2MiA2OC4yODk4VjY4LjI3ODZINDAuMTE2MlY2OC4yODk4SDQxLjYxNjJaTTQxLjYxNjIgNjguMzAxVjY4LjI4OThINDAuMTE2MlY2OC4zMDFINDEuNjE2MlpNNDEuNjE2MiA2OC4zMTIxVjY4LjMwMUg0MC4xMTYyVjY4LjMxMjFINDEuNjE2MlpNNDEuNjE2MiA2OC4zMjMzVjY4LjMxMjFINDAuMTE2MlY2OC4zMjMzSDQxLjYxNjJaTTQxLjYxNjIgNjguMzM0NVY2OC4zMjMzSDQwLjExNjJWNjguMzM0NUg0MS42MTYyWk00MS42MTYyIDY4LjM0NTdWNjguMzM0NUg0MC4xMTYyVjY4LjM0NTdINDEuNjE2MlpNNDEuNjE2MiA2OC4zNTY5VjY4LjM0NTdINDAuMTE2MlY2OC4zNTY5SDQxLjYxNjJaTTQxLjYxNjIgNjguMzY4MVY2OC4zNTY5SDQwLjExNjJWNjguMzY4MUg0MS42MTYyWk00MS42MTYyIDY4LjM3OTNWNjguMzY4MUg0MC4xMTYyVjY4LjM3OTNINDEuNjE2MlpNNDEuNjE2MiA2OC4zOTA1VjY4LjM3OTNINDAuMTE2MlY2OC4zOTA1SDQxLjYxNjJaTTQxLjYxNjIgNjguNDAxOFY2OC4zOTA1SDQwLjExNjJWNjguNDAxOEg0MS42MTYyWk00MS42MTYyIDY4LjQxM1Y2OC40MDE4SDQwLjExNjJWNjguNDEzSDQxLjYxNjJaTTQxLjYxNjIgNjguNDI0MlY2OC40MTNINDAuMTE2MlY2OC40MjQySDQxLjYxNjJaTTQxLjYxNjIgNjguNDM1NVY2OC40MjQySDQwLjExNjJWNjguNDM1NUg0MS42MTYyWk00MS42MTYyIDY4LjQ0NjdWNjguNDM1NUg0MC4xMTYyVjY4LjQ0NjdINDEuNjE2MlpNNDEuNjE2MiA2OC40NThWNjguNDQ2N0g0MC4xMTYyVjY4LjQ1OEg0MS42MTYyWk00MS42MTYyIDY4LjQ2OTJWNjguNDU4SDQwLjExNjJWNjguNDY5Mkg0MS42MTYyWk00MS42MTYyIDY4LjQ4MDVWNjguNDY5Mkg0MC4xMTYyVjY4LjQ4MDVINDEuNjE2MlpNNDEuNjE2MiA2OC40OTE4VjY4LjQ4MDVINDAuMTE2MlY2OC40OTE4SDQxLjYxNjJaTTQxLjYxNjIgNjguNTAzVjY4LjQ5MThINDAuMTE2MlY2OC41MDNINDEuNjE2MlpNNDEuNjE2MiA2OC41MTQzVjY4LjUwM0g0MC4xMTYyVjY4LjUxNDNINDEuNjE2MlpNNDEuNjE2MiA2OC41MjU2VjY4LjUxNDNINDAuMTE2MlY2OC41MjU2SDQxLjYxNjJaTTQxLjYxNjIgNjguNTM2OVY2OC41MjU2SDQwLjExNjJWNjguNTM2OUg0MS42MTYyWk00MS42MTYyIDY4LjU0ODJWNjguNTM2OUg0MC4xMTYyVjY4LjU0ODJINDEuNjE2MlpNNDEuNjE2MiA2OC41NTk1VjY4LjU0ODJINDAuMTE2MlY2OC41NTk1SDQxLjYxNjJaTTQxLjYxNjIgNjguNTcwOFY2OC41NTk1SDQwLjExNjJWNjguNTcwOEg0MS42MTYyWk00MS42MTYyIDY4LjU4MjJWNjguNTcwOEg0MC4xMTYyVjY4LjU4MjJINDEuNjE2MlpNNDEuNjE2MiA2OC41OTM1VjY4LjU4MjJINDAuMTE2MlY2OC41OTM1SDQxLjYxNjJaTTQxLjYxNjIgNjguNjA0OFY2OC41OTM1SDQwLjExNjJWNjguNjA0OEg0MS42MTYyWk00MS42MTYyIDY4LjYxNjJWNjguNjA0OEg0MC4xMTYyVjY4LjYxNjJINDEuNjE2MlpNNDEuNjE2MiA2OC42Mjc1VjY4LjYxNjJINDAuMTE2MlY2OC42Mjc1SDQxLjYxNjJaTTQxLjYxNjIgNjguNjM4OVY2OC42Mjc1SDQwLjExNjJWNjguNjM4OUg0MS42MTYyWk00MS42MTYyIDY4LjY1MDJWNjguNjM4OUg0MC4xMTYyVjY4LjY1MDJINDEuNjE2MlpNNDEuNjE2MiA2OC42NjE2VjY4LjY1MDJINDAuMTE2MlY2OC42NjE2SDQxLjYxNjJaTTQxLjYxNjIgNjguNjcyOVY2OC42NjE2SDQwLjExNjJWNjguNjcyOUg0MS42MTYyWk00MS42MTYyIDY4LjY4NDNWNjguNjcyOUg0MC4xMTYyVjY4LjY4NDNINDEuNjE2MlpNNDEuNjE2MiA2OC42OTU3VjY4LjY4NDNINDAuMTE2MlY2OC42OTU3SDQxLjYxNjJaTTQxLjYxNjIgNjguNzA3MVY2OC42OTU3SDQwLjExNjJWNjguNzA3MUg0MS42MTYyWk00MS42MTYyIDY4LjcxODVWNjguNzA3MUg0MC4xMTYyVjY4LjcxODVINDEuNjE2MlpNNDEuNjE2MiA2OC43Mjk5VjY4LjcxODVINDAuMTE2MlY2OC43Mjk5SDQxLjYxNjJaTTQxLjYxNjIgNjguNzQxM1Y2OC43Mjk5SDQwLjExNjJWNjguNzQxM0g0MS42MTYyWk00MS42MTYyIDY4Ljc1MjdWNjguNzQxM0g0MC4xMTYyVjY4Ljc1MjdINDEuNjE2MlpNNDEuNjE2MiA2OC43NjQxVjY4Ljc1MjdINDAuMTE2MlY2OC43NjQxSDQxLjYxNjJaTTQxLjYxNjIgNjguNzc1NlY2OC43NjQxSDQwLjExNjJWNjguNzc1Nkg0MS42MTYyWk00MS42MTYyIDY4Ljc4N1Y2OC43NzU2SDQwLjExNjJWNjguNzg3SDQxLjYxNjJaTTQxLjYxNjIgNjguNzk4NFY2OC43ODdINDAuMTE2MlY2OC43OTg0SDQxLjYxNjJaTTQxLjYxNjIgNjguODA5OVY2OC43OTg0SDQwLjExNjJWNjguODA5OUg0MS42MTYyWk00MS42MTYyIDY4LjgyMTNWNjguODA5OUg0MC4xMTYyVjY4LjgyMTNINDEuNjE2MlpNNDEuNjE2MiA2OC44MzI4VjY4LjgyMTNINDAuMTE2MlY2OC44MzI4SDQxLjYxNjJaTTQxLjYxNjIgNjguODQ0M1Y2OC44MzI4SDQwLjExNjJWNjguODQ0M0g0MS42MTYyWk00MS42MTYyIDY4Ljg1NTdWNjguODQ0M0g0MC4xMTYyVjY4Ljg1NTdINDEuNjE2MlpNNDEuNjE2MiA2OC44NjcyVjY4Ljg1NTdINDAuMTE2MlY2OC44NjcySDQxLjYxNjJaTTQxLjYxNjIgNjguODc4N1Y2OC44NjcySDQwLjExNjJWNjguODc4N0g0MS42MTYyWk00MS42MTYyIDY4Ljg5MDJWNjguODc4N0g0MC4xMTYyVjY4Ljg5MDJINDEuNjE2MlpNNDEuNjE2MiA2OC45MDE3VjY4Ljg5MDJINDAuMTE2MlY2OC45MDE3SDQxLjYxNjJaTTQxLjYxNjIgNjguOTEzMlY2OC45MDE3SDQwLjExNjJWNjguOTEzMkg0MS42MTYyWk00MS42MTYyIDY4LjkyNDdWNjguOTEzMkg0MC4xMTYyVjY4LjkyNDdINDEuNjE2MlpNNDEuNjE2MiA2OC45MzYyVjY4LjkyNDdINDAuMTE2MlY2OC45MzYySDQxLjYxNjJaTTQxLjYxNjIgNjguOTQ3N1Y2OC45MzYySDQwLjExNjJWNjguOTQ3N0g0MS42MTYyWk00MS42MTYyIDY4Ljk1OTJWNjguOTQ3N0g0MC4xMTYyVjY4Ljk1OTJINDEuNjE2MlpNNDEuNjE2MiA2OC45NzA4VjY4Ljk1OTJINDAuMTE2MlY2OC45NzA4SDQxLjYxNjJaTTQxLjYxNjIgNjguOTgyM1Y2OC45NzA4SDQwLjExNjJWNjguOTgyM0g0MS42MTYyWk00MS42MTYyIDY4Ljk5MzlWNjguOTgyM0g0MC4xMTYyVjY4Ljk5MzlINDEuNjE2MlpNNDEuNjE2MiA2OS4wMDU0VjY4Ljk5MzlINDAuMTE2MlY2OS4wMDU0SDQxLjYxNjJaTTQxLjYxNjIgNjkuMDE3VjY5LjAwNTRINDAuMTE2MlY2OS4wMTdINDEuNjE2MlpNNDEuNjE2MiA2OS4wMjg1VjY5LjAxN0g0MC4xMTYyVjY5LjAyODVINDEuNjE2MlpNNDEuNjE2MiA2OS4wNDAxVjY5LjAyODVINDAuMTE2MlY2OS4wNDAxSDQxLjYxNjJaTTQxLjYxNjIgNjkuMDUxN1Y2OS4wNDAxSDQwLjExNjJWNjkuMDUxN0g0MS42MTYyWk00MS42MTYyIDY5LjA2MzNWNjkuMDUxN0g0MC4xMTYyVjY5LjA2MzNINDEuNjE2MlpNNDEuNjE2MiA2OS4wNzQ4VjY5LjA2MzNINDAuMTE2MlY2OS4wNzQ4SDQxLjYxNjJaTTQxLjYxNjIgNjkuMDg2NFY2OS4wNzQ4SDQwLjExNjJWNjkuMDg2NEg0MS42MTYyWk00MS42MTYyIDY5LjA5OFY2OS4wODY0SDQwLjExNjJWNjkuMDk4SDQxLjYxNjJaTTQxLjYxNjIgNjkuMTA5NlY2OS4wOThINDAuMTE2MlY2OS4xMDk2SDQxLjYxNjJaTTQxLjYxNjIgNjkuMTIxM1Y2OS4xMDk2SDQwLjExNjJWNjkuMTIxM0g0MS42MTYyWk00MS42MTYyIDY5LjEzMjlWNjkuMTIxM0g0MC4xMTYyVjY5LjEzMjlINDEuNjE2MlpNNDEuNjE2MiA2OS4xNDQ1VjY5LjEzMjlINDAuMTE2MlY2OS4xNDQ1SDQxLjYxNjJaTTQxLjYxNjIgNjkuMTU2MVY2OS4xNDQ1SDQwLjExNjJWNjkuMTU2MUg0MS42MTYyWk00MS42MTYyIDY5LjE2NzhWNjkuMTU2MUg0MC4xMTYyVjY5LjE2NzhINDEuNjE2MlpNNDEuNjE2MiA2OS4xNzk0VjY5LjE2NzhINDAuMTE2MlY2OS4xNzk0SDQxLjYxNjJaTTQxLjYxNjIgNjkuMTkxMVY2OS4xNzk0SDQwLjExNjJWNjkuMTkxMUg0MS42MTYyWk00MS42MTYyIDY5LjIwMjdWNjkuMTkxMUg0MC4xMTYyVjY5LjIwMjdINDEuNjE2MlpNNDEuNjE2MiA2OS4yMTQ0VjY5LjIwMjdINDAuMTE2MlY2OS4yMTQ0SDQxLjYxNjJaTTQxLjYxNjIgNjkuMjI2MVY2OS4yMTQ0SDQwLjExNjJWNjkuMjI2MUg0MS42MTYyWk00MS42MTYyIDY5LjIzNzdWNjkuMjI2MUg0MC4xMTYyVjY5LjIzNzdINDEuNjE2MlpNNDEuNjE2MiA2OS4yNDk0VjY5LjIzNzdINDAuMTE2MlY2OS4yNDk0SDQxLjYxNjJaTTQxLjYxNjIgNjkuMjYxMVY2OS4yNDk0SDQwLjExNjJWNjkuMjYxMUg0MS42MTYyWk00MS42MTYyIDY5LjI3MjhWNjkuMjYxMUg0MC4xMTYyVjY5LjI3MjhINDEuNjE2MlpNNDEuNjE2MiA2OS4yODQ1VjY5LjI3MjhINDAuMTE2MlY2OS4yODQ1SDQxLjYxNjJaTTQxLjYxNjIgNjkuMjk2MlY2OS4yODQ1SDQwLjExNjJWNjkuMjk2Mkg0MS42MTYyWk00MS42MTYyIDY5LjMwNzlWNjkuMjk2Mkg0MC4xMTYyVjY5LjMwNzlINDEuNjE2MlpNNDEuNjE2MiA2OS4zMTk2VjY5LjMwNzlINDAuMTE2MlY2OS4zMTk2SDQxLjYxNjJaTTQxLjYxNjIgNjkuMzMxNFY2OS4zMTk2SDQwLjExNjJWNjkuMzMxNEg0MS42MTYyWk00MS42MTYyIDY5LjM0MzFWNjkuMzMxNEg0MC4xMTYyVjY5LjM0MzFINDEuNjE2MlpNNDEuNjE2MiA2OS4zNTQ4VjY5LjM0MzFINDAuMTE2MlY2OS4zNTQ4SDQxLjYxNjJaTTQxLjYxNjIgNjkuMzY2NlY2OS4zNTQ4SDQwLjExNjJWNjkuMzY2Nkg0MS42MTYyWk00MS42MTYyIDY5LjM3ODNWNjkuMzY2Nkg0MC4xMTYyVjY5LjM3ODNINDEuNjE2MlpNNDEuNjE2MiA2OS4zOTAxVjY5LjM3ODNINDAuMTE2MlY2OS4zOTAxSDQxLjYxNjJaTTQxLjYxNjIgNjkuNDAxOFY2OS4zOTAxSDQwLjExNjJWNjkuNDAxOEg0MS42MTYyWk00MS42MTYyIDY5LjQxMzZWNjkuNDAxOEg0MC4xMTYyVjY5LjQxMzZINDEuNjE2MlpNNDEuNjE2MiA2OS40MjU0VjY5LjQxMzZINDAuMTE2MlY2OS40MjU0SDQxLjYxNjJaTTQxLjYxNjIgNjkuNDM3MlY2OS40MjU0SDQwLjExNjJWNjkuNDM3Mkg0MS42MTYyWk00MS42MTYyIDY5LjQ0ODlWNjkuNDM3Mkg0MC4xMTYyVjY5LjQ0ODlINDEuNjE2MlpNNDEuNjE2MiA2OS40NjA3VjY5LjQ0ODlINDAuMTE2MlY2OS40NjA3SDQxLjYxNjJaTTQxLjYxNjIgNjkuNDcyNVY2OS40NjA3SDQwLjExNjJWNjkuNDcyNUg0MS42MTYyWk00MS42MTYyIDY5LjQ4NDNWNjkuNDcyNUg0MC4xMTYyVjY5LjQ4NDNINDEuNjE2MlpNNDEuNjE2MiA2OS40OTYyVjY5LjQ4NDNINDAuMTE2MlY2OS40OTYySDQxLjYxNjJaTTQxLjYxNjIgNjkuNTA4VjY5LjQ5NjJINDAuMTE2MlY2OS41MDhINDEuNjE2MlpNNDEuNjE2MiA2OS41MTk4VjY5LjUwOEg0MC4xMTYyVjY5LjUxOThINDEuNjE2MlpNNDEuNjE2MiA2OS41MzE2VjY5LjUxOThINDAuMTE2MlY2OS41MzE2SDQxLjYxNjJaTTQxLjYxNjIgNjkuNTQzNVY2OS41MzE2SDQwLjExNjJWNjkuNTQzNUg0MS42MTYyWk00MS42MTYyIDY5LjU1NTNWNjkuNTQzNUg0MC4xMTYyVjY5LjU1NTNINDEuNjE2MlpNNDEuNjE2MiA2OS41NjcyVjY5LjU1NTNINDAuMTE2MlY2OS41NjcySDQxLjYxNjJaTTQxLjYxNjIgNjkuNTc5VjY5LjU2NzJINDAuMTE2MlY2OS41NzlINDEuNjE2MlpNNDEuNjE2MiA2OS41OTA5VjY5LjU3OUg0MC4xMTYyVjY5LjU5MDlINDEuNjE2MlpNNDEuNjE2MiA2OS42MDI3VjY5LjU5MDlINDAuMTE2MlY2OS42MDI3SDQxLjYxNjJaTTQxLjYxNjIgNjkuNjE0NlY2OS42MDI3SDQwLjExNjJWNjkuNjE0Nkg0MS42MTYyWk00MS42MTYyIDY5LjYyNjVWNjkuNjE0Nkg0MC4xMTYyVjY5LjYyNjVINDEuNjE2MlpNNDEuNjE2MiA2OS42Mzg0VjY5LjYyNjVINDAuMTE2MlY2OS42Mzg0SDQxLjYxNjJaTTQxLjYxNjIgNjkuNjUwM1Y2OS42Mzg0SDQwLjExNjJWNjkuNjUwM0g0MS42MTYyWk00MS42MTYyIDY5LjY2MjJWNjkuNjUwM0g0MC4xMTYyVjY5LjY2MjJINDEuNjE2MlpNNDEuNjE2MiA2OS42NzQxVjY5LjY2MjJINDAuMTE2MlY2OS42NzQxSDQxLjYxNjJaTTQxLjYxNjIgNjkuNjg2VjY5LjY3NDFINDAuMTE2MlY2OS42ODZINDEuNjE2MlpNNDEuNjE2MiA2OS42OTc5VjY5LjY4Nkg0MC4xMTYyVjY5LjY5NzlINDEuNjE2MlpNNDEuNjE2MiA2OS43MDk4VjY5LjY5NzlINDAuMTE2MlY2OS43MDk4SDQxLjYxNjJaTTQxLjYxNjIgNjkuNzIxOFY2OS43MDk4SDQwLjExNjJWNjkuNzIxOEg0MS42MTYyWk00MS42MTYyIDY5LjczMzdWNjkuNzIxOEg0MC4xMTYyVjY5LjczMzdINDEuNjE2MlpNNDEuNjE2MiA2OS43NDU2VjY5LjczMzdINDAuMTE2MlY2OS43NDU2SDQxLjYxNjJaTTQxLjYxNjIgNjkuNzU3NlY2OS43NDU2SDQwLjExNjJWNjkuNzU3Nkg0MS42MTYyWk00MS42MTYyIDY5Ljc2OTVWNjkuNzU3Nkg0MC4xMTYyVjY5Ljc2OTVINDEuNjE2MlpNNDEuNjE2MiA2OS43ODE1VjY5Ljc2OTVINDAuMTE2MlY2OS43ODE1SDQxLjYxNjJaTTQxLjYxNjIgNjkuNzkzNVY2OS43ODE1SDQwLjExNjJWNjkuNzkzNUg0MS42MTYyWk00MS42MTYyIDY5LjgwNTRWNjkuNzkzNUg0MC4xMTYyVjY5LjgwNTRINDEuNjE2MlpNNDEuNjE2MiA2OS44MTc0VjY5LjgwNTRINDAuMTE2MlY2OS44MTc0SDQxLjYxNjJaTTQxLjYxNjIgNjkuODI5NFY2OS44MTc0SDQwLjExNjJWNjkuODI5NEg0MS42MTYyWk00MS42MTYyIDY5Ljg0MTRWNjkuODI5NEg0MC4xMTYyVjY5Ljg0MTRINDEuNjE2MlpNNDEuNjE2MiA2OS44NTM0VjY5Ljg0MTRINDAuMTE2MlY2OS44NTM0SDQxLjYxNjJaTTQxLjYxNjIgNjkuODY1NFY2OS44NTM0SDQwLjExNjJWNjkuODY1NEg0MS42MTYyWk00MS42MTYyIDY5Ljg3NzRWNjkuODY1NEg0MC4xMTYyVjY5Ljg3NzRINDEuNjE2MlpNNDEuNjE2MiA2OS44ODk0VjY5Ljg3NzRINDAuMTE2MlY2OS44ODk0SDQxLjYxNjJaTTQxLjYxNjIgNjkuOTAxNFY2OS44ODk0SDQwLjExNjJWNjkuOTAxNEg0MS42MTYyWk00MS42MTYyIDY5LjkxMzVWNjkuOTAxNEg0MC4xMTYyVjY5LjkxMzVINDEuNjE2MlpNNDEuNjE2MiA2OS45MjU1VjY5LjkxMzVINDAuMTE2MlY2OS45MjU1SDQxLjYxNjJaTTQxLjYxNjIgNjkuOTM3NVY2OS45MjU1SDQwLjExNjJWNjkuOTM3NUg0MS42MTYyWk00MS42MTYyIDY5Ljk0OTZWNjkuOTM3NUg0MC4xMTYyVjY5Ljk0OTZINDEuNjE2MlpNNDEuNjE2MiA2OS45NjE2VjY5Ljk0OTZINDAuMTE2MlY2OS45NjE2SDQxLjYxNjJaTTQxLjYxNjIgNjkuOTczN1Y2OS45NjE2SDQwLjExNjJWNjkuOTczN0g0MS42MTYyWk00MS42MTYyIDY5Ljk4NThWNjkuOTczN0g0MC4xMTYyVjY5Ljk4NThINDEuNjE2MlpNNDEuNjE2MiA2OS45OTc4VjY5Ljk4NThINDAuMTE2MlY2OS45OTc4SDQxLjYxNjJaTTQxLjYxNjIgNzAuMDA5OVY2OS45OTc4SDQwLjExNjJWNzAuMDA5OUg0MS42MTYyWk00MS42MTYyIDcwLjAyMlY3MC4wMDk5SDQwLjExNjJWNzAuMDIySDQxLjYxNjJaTTQxLjYxNjIgNzAuMDM0MVY3MC4wMjJINDAuMTE2MlY3MC4wMzQxSDQxLjYxNjJaTTQxLjYxNjIgNzAuMDQ2MlY3MC4wMzQxSDQwLjExNjJWNzAuMDQ2Mkg0MS42MTYyWk00MS42MTYyIDcwLjA1ODNWNzAuMDQ2Mkg0MC4xMTYyVjcwLjA1ODNINDEuNjE2MlpNNDEuNjE2MiA3MC4wNzA0VjcwLjA1ODNINDAuMTE2MlY3MC4wNzA0SDQxLjYxNjJaTTQxLjYxNjIgNzAuMDgyNVY3MC4wNzA0SDQwLjExNjJWNzAuMDgyNUg0MS42MTYyWk00MS42MTYyIDcwLjA5NDZWNzAuMDgyNUg0MC4xMTYyVjcwLjA5NDZINDEuNjE2MlpNNDEuNjE2MiA3MC4xMDY4VjcwLjA5NDZINDAuMTE2MlY3MC4xMDY4SDQxLjYxNjJaTTQxLjYxNjIgNzAuMTE4OVY3MC4xMDY4SDQwLjExNjJWNzAuMTE4OUg0MS42MTYyWk00MS42MTYyIDcwLjEzMVY3MC4xMTg5SDQwLjExNjJWNzAuMTMxSDQxLjYxNjJaTTQxLjYxNjIgNzAuMTQzMlY3MC4xMzFINDAuMTE2MlY3MC4xNDMySDQxLjYxNjJaTTQxLjYxNjIgNzAuMTU1M1Y3MC4xNDMySDQwLjExNjJWNzAuMTU1M0g0MS42MTYyWk00MS42MTYyIDcwLjE2NzVWNzAuMTU1M0g0MC4xMTYyVjcwLjE2NzVINDEuNjE2MlpNNDEuNjE2MiA3MC4xNzk3VjcwLjE2NzVINDAuMTE2MlY3MC4xNzk3SDQxLjYxNjJaTTQxLjYxNjIgNzAuMTkxOFY3MC4xNzk3SDQwLjExNjJWNzAuMTkxOEg0MS42MTYyWk00MS42MTYyIDcwLjIwNFY3MC4xOTE4SDQwLjExNjJWNzAuMjA0SDQxLjYxNjJaTTQxLjYxNjIgNzAuMjE2MlY3MC4yMDRINDAuMTE2MlY3MC4yMTYySDQxLjYxNjJaTTQxLjYxNjIgNzAuMjI4NFY3MC4yMTYySDQwLjExNjJWNzAuMjI4NEg0MS42MTYyWk00MS42MTYyIDcwLjI0MDZWNzAuMjI4NEg0MC4xMTYyVjcwLjI0MDZINDEuNjE2MlpNNDEuNjE2MiA3MC4yNTI4VjcwLjI0MDZINDAuMTE2MlY3MC4yNTI4SDQxLjYxNjJaTTQxLjYxNjIgNzAuMjY1VjcwLjI1MjhINDAuMTE2MlY3MC4yNjVINDEuNjE2MlpNNDEuNjE2MiA3MC4yNzcyVjcwLjI2NUg0MC4xMTYyVjcwLjI3NzJINDEuNjE2MlpNNDEuNjE2MiA3MC4yODk0VjcwLjI3NzJINDAuMTE2MlY3MC4yODk0SDQxLjYxNjJaTTQxLjYxNjIgNzAuMzAxN1Y3MC4yODk0SDQwLjExNjJWNzAuMzAxN0g0MS42MTYyWk00MS42MTYyIDcwLjMxMzlWNzAuMzAxN0g0MC4xMTYyVjcwLjMxMzlINDEuNjE2MlpNNDEuNjE2MiA3MC4zMjYxVjcwLjMxMzlINDAuMTE2MlY3MC4zMjYxSDQxLjYxNjJaTTQxLjYxNjIgNzAuMzM4NFY3MC4zMjYxSDQwLjExNjJWNzAuMzM4NEg0MS42MTYyWk00MS42MTYyIDcwLjM1MDZWNzAuMzM4NEg0MC4xMTYyVjcwLjM1MDZINDEuNjE2MlpNNDEuNjE2MiA3MC4zNjI5VjcwLjM1MDZINDAuMTE2MlY3MC4zNjI5SDQxLjYxNjJaTTQxLjYxNjIgNzAuMzc1MlY3MC4zNjI5SDQwLjExNjJWNzAuMzc1Mkg0MS42MTYyWk00MS42MTYyIDcwLjM4NzRWNzAuMzc1Mkg0MC4xMTYyVjcwLjM4NzRINDEuNjE2MlpNNDEuNjE2MiA3MC4zOTk3VjcwLjM4NzRINDAuMTE2MlY3MC4zOTk3SDQxLjYxNjJaTTQxLjYxNjIgNzAuNDEyVjcwLjM5OTdINDAuMTE2MlY3MC40MTJINDEuNjE2MlpNNDEuNjE2MiA3MC40MjQzVjcwLjQxMkg0MC4xMTYyVjcwLjQyNDNINDEuNjE2MlpNNDEuNjE2MiA3MC40MzY2VjcwLjQyNDNINDAuMTE2MlY3MC40MzY2SDQxLjYxNjJaTTQxLjYxNjIgNzAuNDQ4OVY3MC40MzY2SDQwLjExNjJWNzAuNDQ4OUg0MS42MTYyWk00MS42MTYyIDcwLjQ2MTJWNzAuNDQ4OUg0MC4xMTYyVjcwLjQ2MTJINDEuNjE2MlpNNDEuNjE2MiA3MC40NzM1VjcwLjQ2MTJINDAuMTE2MlY3MC40NzM1SDQxLjYxNjJaTTQxLjYxNjIgNzAuNDg1OFY3MC40NzM1SDQwLjExNjJWNzAuNDg1OEg0MS42MTYyWk00MS42MTYyIDcwLjQ5ODFWNzAuNDg1OEg0MC4xMTYyVjcwLjQ5ODFINDEuNjE2MlpNNDEuNjE2MiA3MC41MTA1VjcwLjQ5ODFINDAuMTE2MlY3MC41MTA1SDQxLjYxNjJaTTQxLjYxNjIgNzAuNTIyOFY3MC41MTA1SDQwLjExNjJWNzAuNTIyOEg0MS42MTYyWk00MS42MTYyIDcwLjUzNTJWNzAuNTIyOEg0MC4xMTYyVjcwLjUzNTJINDEuNjE2MlpNNDEuNjE2MiA3MC41NDc1VjcwLjUzNTJINDAuMTE2MlY3MC41NDc1SDQxLjYxNjJaTTQxLjYxNjIgNzAuNTU5OVY3MC41NDc1SDQwLjExNjJWNzAuNTU5OUg0MS42MTYyWk00MS42MTYyIDcwLjU3MjJWNzAuNTU5OUg0MC4xMTYyVjcwLjU3MjJINDEuNjE2MlpNNDEuNjE2MiA3MC41ODQ2VjcwLjU3MjJINDAuMTE2MlY3MC41ODQ2SDQxLjYxNjJaTTQxLjYxNjIgNzAuNTk3VjcwLjU4NDZINDAuMTE2MlY3MC41OTdINDEuNjE2MlpNNDEuNjE2MiA3MC42MDk0VjcwLjU5N0g0MC4xMTYyVjcwLjYwOTRINDEuNjE2MlpNNDEuNjE2MiA3MC42MjE3VjcwLjYwOTRINDAuMTE2MlY3MC42MjE3SDQxLjYxNjJaTTQxLjYxNjIgNzAuNjM0MVY3MC42MjE3SDQwLjExNjJWNzAuNjM0MUg0MS42MTYyWk00MS42MTYyIDcwLjY0NjVWNzAuNjM0MUg0MC4xMTYyVjcwLjY0NjVINDEuNjE2MlpNNDEuNjE2MiA3MC42NTlWNzAuNjQ2NUg0MC4xMTYyVjcwLjY1OUg0MS42MTYyWk00MS42MTYyIDcwLjY3MTRWNzAuNjU5SDQwLjExNjJWNzAuNjcxNEg0MS42MTYyWk00MS42MTYyIDcwLjY4MzhWNzAuNjcxNEg0MC4xMTYyVjcwLjY4MzhINDEuNjE2MlpNNDEuNjE2MiA3MC42OTYyVjcwLjY4MzhINDAuMTE2MlY3MC42OTYySDQxLjYxNjJaTTQxLjYxNjIgNzAuNzA4NlY3MC42OTYySDQwLjExNjJWNzAuNzA4Nkg0MS42MTYyWk00MS42MTYyIDcwLjcyMTFWNzAuNzA4Nkg0MC4xMTYyVjcwLjcyMTFINDEuNjE2MlpNNDEuNjE2MiA3MC43MzM1VjcwLjcyMTFINDAuMTE2MlY3MC43MzM1SDQxLjYxNjJaTTQxLjYxNjIgNzAuNzQ2VjcwLjczMzVINDAuMTE2MlY3MC43NDZINDEuNjE2MlpNNDEuNjE2MiA3MC43NTg0VjcwLjc0Nkg0MC4xMTYyVjcwLjc1ODRINDEuNjE2MlpNNDEuNjE2MiA3MC43NzA5VjcwLjc1ODRINDAuMTE2MlY3MC43NzA5SDQxLjYxNjJaTTQxLjYxNjIgNzAuNzgzNFY3MC43NzA5SDQwLjExNjJWNzAuNzgzNEg0MS42MTYyWk00MS42MTYyIDcwLjc5NThWNzAuNzgzNEg0MC4xMTYyVjcwLjc5NThINDEuNjE2MlpNNDEuNjE2MiA3MC44MDgzVjcwLjc5NThINDAuMTE2MlY3MC44MDgzSDQxLjYxNjJaTTQxLjYxNjIgNzAuODIwOFY3MC44MDgzSDQwLjExNjJWNzAuODIwOEg0MS42MTYyWk00MS42MTYyIDcwLjgzMzNWNzAuODIwOEg0MC4xMTYyVjcwLjgzMzNINDEuNjE2MlpNNDEuNjE2MiA3MC44NDU4VjcwLjgzMzNINDAuMTE2MlY3MC44NDU4SDQxLjYxNjJaTTQxLjYxNjIgNzAuODU4M1Y3MC44NDU4SDQwLjExNjJWNzAuODU4M0g0MS42MTYyWk00MS42MTYyIDcwLjg3MDhWNzAuODU4M0g0MC4xMTYyVjcwLjg3MDhINDEuNjE2MlpNNDEuNjE2MiA3MC44ODMzVjcwLjg3MDhINDAuMTE2MlY3MC44ODMzSDQxLjYxNjJaTTQxLjYxNjIgNzAuODk1OVY3MC44ODMzSDQwLjExNjJWNzAuODk1OUg0MS42MTYyWk00MS42MTYyIDcwLjkwODRWNzAuODk1OUg0MC4xMTYyVjcwLjkwODRINDEuNjE2MlpNNDEuNjE2MiA3MC45MjA5VjcwLjkwODRINDAuMTE2MlY3MC45MjA5SDQxLjYxNjJaTTQxLjYxNjIgNzAuOTMzNVY3MC45MjA5SDQwLjExNjJWNzAuOTMzNUg0MS42MTYyWk00MS42MTYyIDcwLjk0NlY3MC45MzM1SDQwLjExNjJWNzAuOTQ2SDQxLjYxNjJaTTQxLjYxNjIgNzAuOTU4NlY3MC45NDZINDAuMTE2MlY3MC45NTg2SDQxLjYxNjJaTTQxLjYxNjIgNzAuOTcxMVY3MC45NTg2SDQwLjExNjJWNzAuOTcxMUg0MS42MTYyWk00MS42MTYyIDcwLjk4MzdWNzAuOTcxMUg0MC4xMTYyVjcwLjk4MzdINDEuNjE2MlpNNDEuNjE2MiA3MC45OTYzVjcwLjk4MzdINDAuMTE2MlY3MC45OTYzSDQxLjYxNjJaTTQxLjYxNjIgNzEuMDA4OVY3MC45OTYzSDQwLjExNjJWNzEuMDA4OUg0MS42MTYyWk00MS42MTYyIDcxLjAyMTVWNzEuMDA4OUg0MC4xMTYyVjcxLjAyMTVINDEuNjE2MlpNNDEuNjE2MiA3MS4wMzRWNzEuMDIxNUg0MC4xMTYyVjcxLjAzNEg0MS42MTYyWk00MS42MTYyIDcxLjA0NjZWNzEuMDM0SDQwLjExNjJWNzEuMDQ2Nkg0MS42MTYyWk00MS42MTYyIDcxLjA1OTNWNzEuMDQ2Nkg0MC4xMTYyVjcxLjA1OTNINDEuNjE2MlpNNDEuNjE2MiA3MS4wNzE5VjcxLjA1OTNINDAuMTE2MlY3MS4wNzE5SDQxLjYxNjJaTTQxLjYxNjIgNzEuMDg0NVY3MS4wNzE5SDQwLjExNjJWNzEuMDg0NUg0MS42MTYyWk00MS42MTYyIDcxLjA5NzFWNzEuMDg0NUg0MC4xMTYyVjcxLjA5NzFINDEuNjE2MlpNNDEuNjE2MiA3MS4xMDk3VjcxLjA5NzFINDAuMTE2MlY3MS4xMDk3SDQxLjYxNjJaTTQxLjYxNjIgNzEuMTIyNFY3MS4xMDk3SDQwLjExNjJWNzEuMTIyNEg0MS42MTYyWk00MS42MTYyIDcxLjEzNVY3MS4xMjI0SDQwLjExNjJWNzEuMTM1SDQxLjYxNjJaTTQxLjYxNjIgNzEuMTQ3N1Y3MS4xMzVINDAuMTE2MlY3MS4xNDc3SDQxLjYxNjJaTTQxLjYxNjIgNzEuMTYwM1Y3MS4xNDc3SDQwLjExNjJWNzEuMTYwM0g0MS42MTYyWk00MS42MTYyIDcxLjE3M1Y3MS4xNjAzSDQwLjExNjJWNzEuMTczSDQxLjYxNjJaTTQxLjYxNjIgNzEuMTg1N1Y3MS4xNzNINDAuMTE2MlY3MS4xODU3SDQxLjYxNjJaTTQxLjYxNjIgNzEuMTk4M1Y3MS4xODU3SDQwLjExNjJWNzEuMTk4M0g0MS42MTYyWk00MS42MTYyIDcxLjIxMVY3MS4xOTgzSDQwLjExNjJWNzEuMjExSDQxLjYxNjJaTTQxLjYxNjIgNzEuMjIzN1Y3MS4yMTFINDAuMTE2MlY3MS4yMjM3SDQxLjYxNjJaTTQxLjYxNjIgNzEuMjM2NFY3MS4yMjM3SDQwLjExNjJWNzEuMjM2NEg0MS42MTYyWk00MS42MTYyIDcxLjI0OTFWNzEuMjM2NEg0MC4xMTYyVjcxLjI0OTFINDEuNjE2MlpNNDEuNjE2MiA3MS4yNjE4VjcxLjI0OTFINDAuMTE2MlY3MS4yNjE4SDQxLjYxNjJaTTQxLjYxNjIgNzEuMjc0NVY3MS4yNjE4SDQwLjExNjJWNzEuMjc0NUg0MS42MTYyWk00MS42MTYyIDcxLjI4NzJWNzEuMjc0NUg0MC4xMTYyVjcxLjI4NzJINDEuNjE2MlpNNDEuNjE2MiA3MS4yOTk5VjcxLjI4NzJINDAuMTE2MlY3MS4yOTk5SDQxLjYxNjJaTTQxLjYxNjIgNzEuMzEyN1Y3MS4yOTk5SDQwLjExNjJWNzEuMzEyN0g0MS42MTYyWk00MS42MTYyIDcxLjMyNTRWNzEuMzEyN0g0MC4xMTYyVjcxLjMyNTRINDEuNjE2MlpNNDEuNjE2MiA3MS4zMzgxVjcxLjMyNTRINDAuMTE2MlY3MS4zMzgxSDQxLjYxNjJaTTQxLjYxNjIgNzEuMzUwOVY3MS4zMzgxSDQwLjExNjJWNzEuMzUwOUg0MS42MTYyWk00MS42MTYyIDcxLjM2MzZWNzEuMzUwOUg0MC4xMTYyVjcxLjM2MzZINDEuNjE2MlpNNDEuNjE2MiA3MS4zNzY0VjcxLjM2MzZINDAuMTE2MlY3MS4zNzY0SDQxLjYxNjJaTTQxLjYxNjIgNzEuMzg5MlY3MS4zNzY0SDQwLjExNjJWNzEuMzg5Mkg0MS42MTYyWk00MS42MTYyIDcxLjQwMlY3MS4zODkySDQwLjExNjJWNzEuNDAySDQxLjYxNjJaTTQxLjYxNjIgNzEuNDE0N1Y3MS40MDJINDAuMTE2MlY3MS40MTQ3SDQxLjYxNjJaTTQxLjYxNjIgNzEuNDI3NVY3MS40MTQ3SDQwLjExNjJWNzEuNDI3NUg0MS42MTYyWk00MS42MTYyIDcxLjQ0MDNWNzEuNDI3NUg0MC4xMTYyVjcxLjQ0MDNINDEuNjE2MlpNNDEuNjE2MiA3MS40NTMxVjcxLjQ0MDNINDAuMTE2MlY3MS40NTMxSDQxLjYxNjJaTTQxLjYxNjIgNzEuNDY1OVY3MS40NTMxSDQwLjExNjJWNzEuNDY1OUg0MS42MTYyWk00MS42MTYyIDcxLjQ3ODdWNzEuNDY1OUg0MC4xMTYyVjcxLjQ3ODdINDEuNjE2MlpNNDEuNjE2MiA3MS40OTE1VjcxLjQ3ODdINDAuMTE2MlY3MS40OTE1SDQxLjYxNjJaTTQxLjYxNjIgNzEuNTA0NFY3MS40OTE1SDQwLjExNjJWNzEuNTA0NEg0MS42MTYyWk00MS42MTYyIDcxLjUxNzJWNzEuNTA0NEg0MC4xMTYyVjcxLjUxNzJINDEuNjE2MlpNNDEuNjE2MiA3MS41M1Y3MS41MTcySDQwLjExNjJWNzEuNTNINDEuNjE2MlpNNDEuNjE2MiA3MS41NDI5VjcxLjUzSDQwLjExNjJWNzEuNTQyOUg0MS42MTYyWk00MS42MTYyIDcxLjU1NTdWNzEuNTQyOUg0MC4xMTYyVjcxLjU1NTdINDEuNjE2MlpNNDEuNjE2MiA3MS41Njg2VjcxLjU1NTdINDAuMTE2MlY3MS41Njg2SDQxLjYxNjJaTTQxLjYxNjIgNzEuNTgxNFY3MS41Njg2SDQwLjExNjJWNzEuNTgxNEg0MS42MTYyWk00MS42MTYyIDcxLjU5NDNWNzEuNTgxNEg0MC4xMTYyVjcxLjU5NDNINDEuNjE2MlpNNDEuNjE2MiA3MS42MDcyVjcxLjU5NDNINDAuMTE2MlY3MS42MDcySDQxLjYxNjJaTTQxLjYxNjIgNzEuNjJWNzEuNjA3Mkg0MC4xMTYyVjcxLjYySDQxLjYxNjJaTTQxLjYxNjIgNzEuNjMyOVY3MS42Mkg0MC4xMTYyVjcxLjYzMjlINDEuNjE2MlpNNDEuNjE2MiA3MS42NDU4VjcxLjYzMjlINDAuMTE2MlY3MS42NDU4SDQxLjYxNjJaTTQxLjYxNjIgNzEuNjU4N1Y3MS42NDU4SDQwLjExNjJWNzEuNjU4N0g0MS42MTYyWk00MS42MTYyIDcxLjY3MTZWNzEuNjU4N0g0MC4xMTYyVjcxLjY3MTZINDEuNjE2MlpNNDEuNjE2MiA3MS42ODQ1VjcxLjY3MTZINDAuMTE2MlY3MS42ODQ1SDQxLjYxNjJaTTQxLjYxNjIgNzEuNjk3NFY3MS42ODQ1SDQwLjExNjJWNzEuNjk3NEg0MS42MTYyWk00MS42MTYyIDcxLjcxMDRWNzEuNjk3NEg0MC4xMTYyVjcxLjcxMDRINDEuNjE2MlpNNDEuNjE2MiA3MS43MjMzVjcxLjcxMDRINDAuMTE2MlY3MS43MjMzSDQxLjYxNjJaTTQxLjYxNjIgNzEuNzM2MlY3MS43MjMzSDQwLjExNjJWNzEuNzM2Mkg0MS42MTYyWk00MS42MTYyIDcxLjc0OTJWNzEuNzM2Mkg0MC4xMTYyVjcxLjc0OTJINDEuNjE2MlpNNDEuNjE2MiA3MS43NjIxVjcxLjc0OTJINDAuMTE2MlY3MS43NjIxSDQxLjYxNjJaTTQxLjYxNjIgNzEuNzc1MVY3MS43NjIxSDQwLjExNjJWNzEuNzc1MUg0MS42MTYyWk00MS42MTYyIDcxLjc4OFY3MS43NzUxSDQwLjExNjJWNzEuNzg4SDQxLjYxNjJaTTQxLjYxNjIgNzEuODAxVjcxLjc4OEg0MC4xMTYyVjcxLjgwMUg0MS42MTYyWk00MS42MTYyIDcxLjgxNFY3MS44MDFINDAuMTE2MlY3MS44MTRINDEuNjE2MlpNNDEuNjE2MiA3MS44MjY5VjcxLjgxNEg0MC4xMTYyVjcxLjgyNjlINDEuNjE2MlpNNDEuNjE2MiA3MS44Mzk5VjcxLjgyNjlINDAuMTE2MlY3MS44Mzk5SDQxLjYxNjJaTTQxLjYxNjIgNzEuODUyOVY3MS44Mzk5SDQwLjExNjJWNzEuODUyOUg0MS42MTYyWk00MS42MTYyIDcxLjg2NTlWNzEuODUyOUg0MC4xMTYyVjcxLjg2NTlINDEuNjE2MlpNNDEuNjE2MiA3MS44Nzg5VjcxLjg2NTlINDAuMTE2MlY3MS44Nzg5SDQxLjYxNjJaTTQxLjYxNjIgNzEuODkxOVY3MS44Nzg5SDQwLjExNjJWNzEuODkxOUg0MS42MTYyWk00MS42MTYyIDcxLjkwNDlWNzEuODkxOUg0MC4xMTYyVjcxLjkwNDlINDEuNjE2MlpNNDEuNjE2MiA3MS45MThWNzEuOTA0OUg0MC4xMTYyVjcxLjkxOEg0MS42MTYyWk00MS42MTYyIDcxLjkzMVY3MS45MThINDAuMTE2MlY3MS45MzFINDEuNjE2MlpNNDEuNjE2MiA3MS45NDRWNzEuOTMxSDQwLjExNjJWNzEuOTQ0SDQxLjYxNjJaTTQxLjYxNjIgNzEuOTU3MVY3MS45NDRINDAuMTE2MlY3MS45NTcxSDQxLjYxNjJaTTQxLjYxNjIgNzEuOTcwMVY3MS45NTcxSDQwLjExNjJWNzEuOTcwMUg0MS42MTYyWk00MS42MTYyIDcxLjk4MzJWNzEuOTcwMUg0MC4xMTYyVjcxLjk4MzJINDEuNjE2MlpNNDEuNjE2MiA3MS45OTYyVjcxLjk4MzJINDAuMTE2MlY3MS45OTYySDQxLjYxNjJaTTQxLjYxNjIgNzIuMDA5M1Y3MS45OTYySDQwLjExNjJWNzIuMDA5M0g0MS42MTYyWk00MS42MTYyIDcyLjAyMjRWNzIuMDA5M0g0MC4xMTYyVjcyLjAyMjRINDEuNjE2MlpNNDEuNjE2MiA3Mi4wMzU0VjcyLjAyMjRINDAuMTE2MlY3Mi4wMzU0SDQxLjYxNjJaTTQxLjYxNjIgNzIuMDQ4NVY3Mi4wMzU0SDQwLjExNjJWNzIuMDQ4NUg0MS42MTYyWk00MS42MTYyIDcyLjA2MTZWNzIuMDQ4NUg0MC4xMTYyVjcyLjA2MTZINDEuNjE2MlpNNDEuNjE2MiA3Mi4wNzQ3VjcyLjA2MTZINDAuMTE2MlY3Mi4wNzQ3SDQxLjYxNjJaTTQxLjYxNjIgNzIuMDg3OFY3Mi4wNzQ3SDQwLjExNjJWNzIuMDg3OEg0MS42MTYyWk00MS42MTYyIDcyLjEwMDlWNzIuMDg3OEg0MC4xMTYyVjcyLjEwMDlINDEuNjE2MlpNNDEuNjE2MiA3Mi4xMTRWNzIuMTAwOUg0MC4xMTYyVjcyLjExNEg0MS42MTYyWk00MS42MTYyIDcyLjEyNzFWNzIuMTE0SDQwLjExNjJWNzIuMTI3MUg0MS42MTYyWk00MS42MTYyIDcyLjE0MDNWNzIuMTI3MUg0MC4xMTYyVjcyLjE0MDNINDEuNjE2MlpNNDEuNjE2MiA3Mi4xNTM0VjcyLjE0MDNINDAuMTE2MlY3Mi4xNTM0SDQxLjYxNjJaTTQxLjYxNjIgNzIuMTY2NVY3Mi4xNTM0SDQwLjExNjJWNzIuMTY2NUg0MS42MTYyWk00MS42MTYyIDcyLjE3OTdWNzIuMTY2NUg0MC4xMTYyVjcyLjE3OTdINDEuNjE2MlpNNDEuNjE2MiA3Mi4xOTI4VjcyLjE3OTdINDAuMTE2MlY3Mi4xOTI4SDQxLjYxNjJaTTQxLjYxNjIgNzIuMjA2VjcyLjE5MjhINDAuMTE2MlY3Mi4yMDZINDEuNjE2MlpNNDEuNjE2MiA1OS4wMDEyQzQxLjYxNjIgNTIuNzUwOSA0My43NDM0IDQ2LjY4NjYgNDcuNjQ4IDQxLjgwNkw0Ni40NzY3IDQwLjg2ODlDNDIuMzU5MyA0Ni4wMTU2IDQwLjExNjIgNTIuNDEwMyA0MC4xMTYyIDU5LjAwMTJINDEuNjE2MlpNNDEuNjE2MiA1OS4wMDk0VjU5LjAwMTJINDAuMTE2MlY1OS4wMDk0SDQxLjYxNjJaTTQxLjYxNjIgNTkuMDE3NlY1OS4wMDk0SDQwLjExNjJWNTkuMDE3Nkg0MS42MTYyWk00MS42MTYyIDU5LjAyNTdWNTkuMDE3Nkg0MC4xMTYyVjU5LjAyNTdINDEuNjE2MlpNNDEuNjE2MiA1OS4wMzM5VjU5LjAyNTdINDAuMTE2MlY1OS4wMzM5SDQxLjYxNjJaTTQxLjYxNjIgNTkuMDQyVjU5LjAzMzlINDAuMTE2MlY1OS4wNDJINDEuNjE2MlpNNDEuNjE2MiA1OS4wNTAyVjU5LjA0Mkg0MC4xMTYyVjU5LjA1MDJINDEuNjE2MlpNNDEuNjE2MiA1OS4wNTgzVjU5LjA1MDJINDAuMTE2MlY1OS4wNTgzSDQxLjYxNjJaTTQxLjYxNjIgNTkuMDY2NVY1OS4wNTgzSDQwLjExNjJWNTkuMDY2NUg0MS42MTYyWk00MS42MTYyIDU5LjA3NDZWNTkuMDY2NUg0MC4xMTYyVjU5LjA3NDZINDEuNjE2MlpNNDEuNjE2MiA1OS4wODI3VjU5LjA3NDZINDAuMTE2MlY1OS4wODI3SDQxLjYxNjJaTTQxLjYxNjIgNTkuMDkwOFY1OS4wODI3SDQwLjExNjJWNTkuMDkwOEg0MS42MTYyWk00MS42MTYyIDU5LjA5ODlWNTkuMDkwOEg0MC4xMTYyVjU5LjA5ODlINDEuNjE2MlpNNDEuNjE2MiA1OS4xMDdWNTkuMDk4OUg0MC4xMTYyVjU5LjEwN0g0MS42MTYyWk00MS42MTYyIDU5LjExNTFWNTkuMTA3SDQwLjExNjJWNTkuMTE1MUg0MS42MTYyWk00MS42MTYyIDU5LjEyMzFWNTkuMTE1MUg0MC4xMTYyVjU5LjEyMzFINDEuNjE2MlpNNDEuNjE2MiA1OS4xMzEyVjU5LjEyMzFINDAuMTE2MlY1OS4xMzEySDQxLjYxNjJaTTQxLjYxNjIgNTkuMTM5M1Y1OS4xMzEySDQwLjExNjJWNTkuMTM5M0g0MS42MTYyWk00MS42MTYyIDU5LjE0NzNWNTkuMTM5M0g0MC4xMTYyVjU5LjE0NzNINDEuNjE2MlpNNDEuNjE2MiA1OS4xNTUzVjU5LjE0NzNINDAuMTE2MlY1OS4xNTUzSDQxLjYxNjJaTTQxLjYxNjIgNTkuMTYzNFY1OS4xNTUzSDQwLjExNjJWNTkuMTYzNEg0MS42MTYyWk00MS42MTYyIDU5LjE3MTRWNTkuMTYzNEg0MC4xMTYyVjU5LjE3MTRINDEuNjE2MlpNNDEuNjE2MiA1OS4xNzk0VjU5LjE3MTRINDAuMTE2MlY1OS4xNzk0SDQxLjYxNjJaTTQxLjYxNjIgNTkuMTg3NFY1OS4xNzk0SDQwLjExNjJWNTkuMTg3NEg0MS42MTYyWk00MS42MTYyIDU5LjE5NTRWNTkuMTg3NEg0MC4xMTYyVjU5LjE5NTRINDEuNjE2MlpNNDEuNjE2MiA1OS4yMDM0VjU5LjE5NTRINDAuMTE2MlY1OS4yMDM0SDQxLjYxNjJaTTQxLjYxNjIgNTkuMjExNFY1OS4yMDM0SDQwLjExNjJWNTkuMjExNEg0MS42MTYyWk00MS42MTYyIDU5LjIxOTRWNTkuMjExNEg0MC4xMTYyVjU5LjIxOTRINDEuNjE2MlpNNDEuNjE2MiA1OS4yMjc0VjU5LjIxOTRINDAuMTE2MlY1OS4yMjc0SDQxLjYxNjJaTTQxLjYxNjIgNTkuMjM1M1Y1OS4yMjc0SDQwLjExNjJWNTkuMjM1M0g0MS42MTYyWk00MS42MTYyIDU5LjI0MzNWNTkuMjM1M0g0MC4xMTYyVjU5LjI0MzNINDEuNjE2MlpNNDEuNjE2MiA1OS4yNTEyVjU5LjI0MzNINDAuMTE2MlY1OS4yNTEySDQxLjYxNjJaTTQxLjYxNjIgNTkuMjU5MVY1OS4yNTEySDQwLjExNjJWNTkuMjU5MUg0MS42MTYyWk00MS42MTYyIDU5LjI2NzFWNTkuMjU5MUg0MC4xMTYyVjU5LjI2NzFINDEuNjE2MlpNNDEuNjE2MiA1OS4yNzVWNTkuMjY3MUg0MC4xMTYyVjU5LjI3NUg0MS42MTYyWk00MS42MTYyIDU5LjI4MjlWNTkuMjc1SDQwLjExNjJWNTkuMjgyOUg0MS42MTYyWk00MS42MTYyIDU5LjI5MDhWNTkuMjgyOUg0MC4xMTYyVjU5LjI5MDhINDEuNjE2MlpNNDEuNjE2MiA1OS4yOTg3VjU5LjI5MDhINDAuMTE2MlY1OS4yOTg3SDQxLjYxNjJaTTQxLjYxNjIgNTkuMzA2NlY1OS4yOTg3SDQwLjExNjJWNTkuMzA2Nkg0MS42MTYyWk00MS42MTYyIDU5LjMxNDVWNTkuMzA2Nkg0MC4xMTYyVjU5LjMxNDVINDEuNjE2MlpNNDEuNjE2MiA1OS4zMjI0VjU5LjMxNDVINDAuMTE2MlY1OS4zMjI0SDQxLjYxNjJaTTQxLjYxNjIgNTkuMzMwMlY1OS4zMjI0SDQwLjExNjJWNTkuMzMwMkg0MS42MTYyWk00MS42MTYyIDU5LjMzODFWNTkuMzMwMkg0MC4xMTYyVjU5LjMzODFINDEuNjE2MlpNNDEuNjE2MiA1OS4zNDU5VjU5LjMzODFINDAuMTE2MlY1OS4zNDU5SDQxLjYxNjJaTTQxLjYxNjIgNTkuMzUzOFY1OS4zNDU5SDQwLjExNjJWNTkuMzUzOEg0MS42MTYyWk00MS42MTYyIDU5LjM2MTZWNTkuMzUzOEg0MC4xMTYyVjU5LjM2MTZINDEuNjE2MlpNNDEuNjE2MiA1OS4zNjk0VjU5LjM2MTZINDAuMTE2MlY1OS4zNjk0SDQxLjYxNjJaTTQxLjYxNjIgNTkuMzc3MlY1OS4zNjk0SDQwLjExNjJWNTkuMzc3Mkg0MS42MTYyWk00MS42MTYyIDU5LjM4NTFWNTkuMzc3Mkg0MC4xMTYyVjU5LjM4NTFINDEuNjE2MlpNNDEuNjE2MiA1OS4zOTI5VjU5LjM4NTFINDAuMTE2MlY1OS4zOTI5SDQxLjYxNjJaTTQxLjYxNjIgNTkuNDAwNlY1OS4zOTI5SDQwLjExNjJWNTkuNDAwNkg0MS42MTYyWk00MS42MTYyIDU5LjQwODRWNTkuNDAwNkg0MC4xMTYyVjU5LjQwODRINDEuNjE2MlpNNDEuNjE2MiA1OS40MTYyVjU5LjQwODRINDAuMTE2MlY1OS40MTYySDQxLjYxNjJaTTQxLjYxNjIgNTkuNDI0VjU5LjQxNjJINDAuMTE2MlY1OS40MjRINDEuNjE2MlpNNDEuNjE2MiA1OS40MzE3VjU5LjQyNEg0MC4xMTYyVjU5LjQzMTdINDEuNjE2MlpNNDEuNjE2MiA1OS40Mzk1VjU5LjQzMTdINDAuMTE2MlY1OS40Mzk1SDQxLjYxNjJaTTQxLjYxNjIgNTkuNDQ3MlY1OS40Mzk1SDQwLjExNjJWNTkuNDQ3Mkg0MS42MTYyWk00MS42MTYyIDU5LjQ1NVY1OS40NDcySDQwLjExNjJWNTkuNDU1SDQxLjYxNjJaTTQxLjYxNjIgNTkuNDYyN1Y1OS40NTVINDAuMTE2MlY1OS40NjI3SDQxLjYxNjJaTTQxLjYxNjIgNTkuNDcwNFY1OS40NjI3SDQwLjExNjJWNTkuNDcwNEg0MS42MTYyWk00MS42MTYyIDU5LjQ3ODFWNTkuNDcwNEg0MC4xMTYyVjU5LjQ3ODFINDEuNjE2MlpNNDEuNjE2MiA1OS40ODU4VjU5LjQ3ODFINDAuMTE2MlY1OS40ODU4SDQxLjYxNjJaTTQxLjYxNjIgNTkuNDkzNVY1OS40ODU4SDQwLjExNjJWNTkuNDkzNUg0MS42MTYyWk00MS42MTYyIDU5LjUwMTJWNTkuNDkzNUg0MC4xMTYyVjU5LjUwMTJINDEuNjE2MlpNNDEuNjE2MiA1OS41MDg5VjU5LjUwMTJINDAuMTE2MlY1OS41MDg5SDQxLjYxNjJaTTQxLjYxNjIgNTkuNTE2NlY1OS41MDg5SDQwLjExNjJWNTkuNTE2Nkg0MS42MTYyWk00MS42MTYyIDU5LjUyNDJWNTkuNTE2Nkg0MC4xMTYyVjU5LjUyNDJINDEuNjE2MlpNNDEuNjE2MiA1OS41MzE5VjU5LjUyNDJINDAuMTE2MlY1OS41MzE5SDQxLjYxNjJaTTQxLjYxNjIgNTkuNTM5NlY1OS41MzE5SDQwLjExNjJWNTkuNTM5Nkg0MS42MTYyWk00MS42MTYyIDU5LjU0NzJWNTkuNTM5Nkg0MC4xMTYyVjU5LjU0NzJINDEuNjE2MlpNNDEuNjE2MiA1OS41NTQ4VjU5LjU0NzJINDAuMTE2MlY1OS41NTQ4SDQxLjYxNjJaTTQxLjYxNjIgNTkuNTYyNFY1OS41NTQ4SDQwLjExNjJWNTkuNTYyNEg0MS42MTYyWk00MS42MTYyIDU5LjU3MDFWNTkuNTYyNEg0MC4xMTYyVjU5LjU3MDFINDEuNjE2MlpNNDEuNjE2MiA1OS41Nzc3VjU5LjU3MDFINDAuMTE2MlY1OS41Nzc3SDQxLjYxNjJaTTQxLjYxNjIgNTkuNTg1M1Y1OS41Nzc3SDQwLjExNjJWNTkuNTg1M0g0MS42MTYyWk00MS42MTYyIDU5LjU5MjlWNTkuNTg1M0g0MC4xMTYyVjU5LjU5MjlINDEuNjE2MlpNNDEuNjE2MiA1OS42MDA1VjU5LjU5MjlINDAuMTE2MlY1OS42MDA1SDQxLjYxNjJaTTQxLjYxNjIgNTkuNjA4VjU5LjYwMDVINDAuMTE2MlY1OS42MDhINDEuNjE2MlpNNDEuNjE2MiA1OS42MTU2VjU5LjYwOEg0MC4xMTYyVjU5LjYxNTZINDEuNjE2MlpNNDEuNjE2MiA1OS42MjMyVjU5LjYxNTZINDAuMTE2MlY1OS42MjMySDQxLjYxNjJaTTQxLjYxNjIgNTkuNjMwN1Y1OS42MjMySDQwLjExNjJWNTkuNjMwN0g0MS42MTYyWk00MS42MTYyIDU5LjYzODNWNTkuNjMwN0g0MC4xMTYyVjU5LjYzODNINDEuNjE2MlpNNDEuNjE2MiA1OS42NDU4VjU5LjYzODNINDAuMTE2MlY1OS42NDU4SDQxLjYxNjJaTTQxLjYxNjIgNTkuNjUzM1Y1OS42NDU4SDQwLjExNjJWNTkuNjUzM0g0MS42MTYyWk00MS42MTYyIDU5LjY2MDhWNTkuNjUzM0g0MC4xMTYyVjU5LjY2MDhINDEuNjE2MlpNNDEuNjE2MiA1OS42Njg0VjU5LjY2MDhINDAuMTE2MlY1OS42Njg0SDQxLjYxNjJaTTQxLjYxNjIgNTkuNjc1OVY1OS42Njg0SDQwLjExNjJWNTkuNjc1OUg0MS42MTYyWk00MS42MTYyIDU5LjY4MzRWNTkuNjc1OUg0MC4xMTYyVjU5LjY4MzRINDEuNjE2MlpNNDEuNjE2MiA1OS42OTA4VjU5LjY4MzRINDAuMTE2MlY1OS42OTA4SDQxLjYxNjJaTTQxLjYxNjIgNTkuNjk4M1Y1OS42OTA4SDQwLjExNjJWNTkuNjk4M0g0MS42MTYyWk00MS42MTYyIDU5LjcwNThWNTkuNjk4M0g0MC4xMTYyVjU5LjcwNThINDEuNjE2MlpNNDEuNjE2MiA1OS43MTMzVjU5LjcwNThINDAuMTE2MlY1OS43MTMzSDQxLjYxNjJaTTQxLjYxNjIgNTkuNzIwN1Y1OS43MTMzSDQwLjExNjJWNTkuNzIwN0g0MS42MTYyWk00MS42MTYyIDU5LjcyODJWNTkuNzIwN0g0MC4xMTYyVjU5LjcyODJINDEuNjE2MlpNNDEuNjE2MiA1OS43MzU2VjU5LjcyODJINDAuMTE2MlY1OS43MzU2SDQxLjYxNjJaTTQxLjYxNjIgNTkuNzQzVjU5LjczNTZINDAuMTE2MlY1OS43NDNINDEuNjE2MlpNNDEuNjE2MiA1OS43NTA1VjU5Ljc0M0g0MC4xMTYyVjU5Ljc1MDVINDEuNjE2MlpNNDEuNjE2MiA1OS43NTc5VjU5Ljc1MDVINDAuMTE2MlY1OS43NTc5SDQxLjYxNjJaTTQxLjYxNjIgNTkuNzY1M1Y1OS43NTc5SDQwLjExNjJWNTkuNzY1M0g0MS42MTYyWk00MS42MTYyIDU5Ljc3MjdWNTkuNzY1M0g0MC4xMTYyVjU5Ljc3MjdINDEuNjE2MlpNNDEuNjE2MiA1OS43ODAxVjU5Ljc3MjdINDAuMTE2MlY1OS43ODAxSDQxLjYxNjJaTTQxLjYxNjIgNTkuNzg3NVY1OS43ODAxSDQwLjExNjJWNTkuNzg3NUg0MS42MTYyWk00MS42MTYyIDU5Ljc5NDlWNTkuNzg3NUg0MC4xMTYyVjU5Ljc5NDlINDEuNjE2MlpNNDEuNjE2MiA1OS44MDIyVjU5Ljc5NDlINDAuMTE2MlY1OS44MDIySDQxLjYxNjJaTTQxLjYxNjIgNTkuODA5NlY1OS44MDIySDQwLjExNjJWNTkuODA5Nkg0MS42MTYyWk00MS42MTYyIDU5LjgxNjlWNTkuODA5Nkg0MC4xMTYyVjU5LjgxNjlINDEuNjE2MlpNNDEuNjE2MiA1OS44MjQzVjU5LjgxNjlINDAuMTE2MlY1OS44MjQzSDQxLjYxNjJaTTQxLjYxNjIgNTkuODMxNlY1OS44MjQzSDQwLjExNjJWNTkuODMxNkg0MS42MTYyWk00MS42MTYyIDU5LjgzOVY1OS44MzE2SDQwLjExNjJWNTkuODM5SDQxLjYxNjJaTTQxLjYxNjIgNTkuODQ2M1Y1OS44MzlINDAuMTE2MlY1OS44NDYzSDQxLjYxNjJaTTQxLjYxNjIgNTkuODUzNlY1OS44NDYzSDQwLjExNjJWNTkuODUzNkg0MS42MTYyWk00MS42MTYyIDU5Ljg2MDlWNTkuODUzNkg0MC4xMTYyVjU5Ljg2MDlINDEuNjE2MlpNNDEuNjE2MiA1OS44NjgyVjU5Ljg2MDlINDAuMTE2MlY1OS44NjgySDQxLjYxNjJaTTQxLjYxNjIgNTkuODc1NVY1OS44NjgySDQwLjExNjJWNTkuODc1NUg0MS42MTYyWk00MS42MTYyIDU5Ljg4MjhWNTkuODc1NUg0MC4xMTYyVjU5Ljg4MjhINDEuNjE2MlpNNDEuNjE2MiA1OS44OVY1OS44ODI4SDQwLjExNjJWNTkuODlINDEuNjE2MlpNNDEuNjE2MiA1OS44OTczVjU5Ljg5SDQwLjExNjJWNTkuODk3M0g0MS42MTYyWk00MS42MTYyIDU5LjkwNDZWNTkuODk3M0g0MC4xMTYyVjU5LjkwNDZINDEuNjE2MlpNNDEuNjE2MiA1OS45MTE4VjU5LjkwNDZINDAuMTE2MlY1OS45MTE4SDQxLjYxNjJaTTQxLjYxNjIgNTkuOTE5VjU5LjkxMThINDAuMTE2MlY1OS45MTlINDEuNjE2MlpNNDEuNjE2MiA1OS45MjYzVjU5LjkxOUg0MC4xMTYyVjU5LjkyNjNINDEuNjE2MlpNNDEuNjE2MiA1OS45MzM1VjU5LjkyNjNINDAuMTE2MlY1OS45MzM1SDQxLjYxNjJaTTQxLjYxNjIgNTkuOTQwN1Y1OS45MzM1SDQwLjExNjJWNTkuOTQwN0g0MS42MTYyWk00MS42MTYyIDU5Ljk0NzlWNTkuOTQwN0g0MC4xMTYyVjU5Ljk0NzlINDEuNjE2MlpNNDEuNjE2MiA1OS45NTUxVjU5Ljk0NzlINDAuMTE2MlY1OS45NTUxSDQxLjYxNjJaTTQxLjYxNjIgNTkuOTYyM1Y1OS45NTUxSDQwLjExNjJWNTkuOTYyM0g0MS42MTYyWk00MS42MTYyIDU5Ljk2OTVWNTkuOTYyM0g0MC4xMTYyVjU5Ljk2OTVINDEuNjE2MlpNNDEuNjE2MiA1OS45NzY3VjU5Ljk2OTVINDAuMTE2MlY1OS45NzY3SDQxLjYxNjJaTTQxLjYxNjIgNTkuOTgzOVY1OS45NzY3SDQwLjExNjJWNTkuOTgzOUg0MS42MTYyWk00MS42MTYyIDU5Ljk5MVY1OS45ODM5SDQwLjExNjJWNTkuOTkxSDQxLjYxNjJaTTQxLjYxNjIgNTkuOTk4MlY1OS45OTFINDAuMTE2MlY1OS45OTgySDQxLjYxNjJaTTQxLjYxNjIgNjAuMDA1M1Y1OS45OTgySDQwLjExNjJWNjAuMDA1M0g0MS42MTYyWk00MS42MTYyIDYwLjAxMjRWNjAuMDA1M0g0MC4xMTYyVjYwLjAxMjRINDEuNjE2MlpNNDEuNjE2MiA2MC4wMTk2VjYwLjAxMjRINDAuMTE2MlY2MC4wMTk2SDQxLjYxNjJaTTQxLjYxNjIgNjAuMDI2N1Y2MC4wMTk2SDQwLjExNjJWNjAuMDI2N0g0MS42MTYyWk00MS42MTYyIDYwLjAzMzhWNjAuMDI2N0g0MC4xMTYyVjYwLjAzMzhINDEuNjE2MlpNNDEuNjE2MiA2MC4wNDA5VjYwLjAzMzhINDAuMTE2MlY2MC4wNDA5SDQxLjYxNjJaTTQxLjYxNjIgNjAuMDQ4VjYwLjA0MDlINDAuMTE2MlY2MC4wNDhINDEuNjE2MlpNNDEuNjE2MiA2MC4wNTUxVjYwLjA0OEg0MC4xMTYyVjYwLjA1NTFINDEuNjE2MlpNNDEuNjE2MiA2MC4wNjIyVjYwLjA1NTFINDAuMTE2MlY2MC4wNjIySDQxLjYxNjJaTTQxLjYxNjIgNjAuMDY5M1Y2MC4wNjIySDQwLjExNjJWNjAuMDY5M0g0MS42MTYyWk00MS42MTYyIDYwLjA3NjNWNjAuMDY5M0g0MC4xMTYyVjYwLjA3NjNINDEuNjE2MlpNNDEuNjE2MiA2MC4wODM0VjYwLjA3NjNINDAuMTE2MlY2MC4wODM0SDQxLjYxNjJaTTQxLjYxNjIgNjAuMDkwNFY2MC4wODM0SDQwLjExNjJWNjAuMDkwNEg0MS42MTYyWk00MS42MTYyIDYwLjA5NzVWNjAuMDkwNEg0MC4xMTYyVjYwLjA5NzVINDEuNjE2MlpNNDEuNjE2MiA2MC4xMDQ1VjYwLjA5NzVINDAuMTE2MlY2MC4xMDQ1SDQxLjYxNjJaTTQxLjYxNjIgNjAuMTExNVY2MC4xMDQ1SDQwLjExNjJWNjAuMTExNUg0MS42MTYyWk00MS42MTYyIDYwLjExODVWNjAuMTExNUg0MC4xMTYyVjYwLjExODVINDEuNjE2MlpNNDEuNjE2MiA2MC4xMjU2VjYwLjExODVINDAuMTE2MlY2MC4xMjU2SDQxLjYxNjJaTTQxLjYxNjIgNjAuMTMyNlY2MC4xMjU2SDQwLjExNjJWNjAuMTMyNkg0MS42MTYyWk00MS42MTYyIDYwLjEzOTZWNjAuMTMyNkg0MC4xMTYyVjYwLjEzOTZINDEuNjE2MlpNNDEuNjE2MiA2MC4xNDY1VjYwLjEzOTZINDAuMTE2MlY2MC4xNDY1SDQxLjYxNjJaTTQxLjYxNjIgNjAuMTUzNVY2MC4xNDY1SDQwLjExNjJWNjAuMTUzNUg0MS42MTYyWk00MS42MTYyIDYwLjE2MDVWNjAuMTUzNUg0MC4xMTYyVjYwLjE2MDVINDEuNjE2MlpNNDEuNjE2MiA2MC4xNjc0VjYwLjE2MDVINDAuMTE2MlY2MC4xNjc0SDQxLjYxNjJaTTQxLjYxNjIgNjAuMTc0NFY2MC4xNjc0SDQwLjExNjJWNjAuMTc0NEg0MS42MTYyWk00MS42MTYyIDYwLjE4MTNWNjAuMTc0NEg0MC4xMTYyVjYwLjE4MTNINDEuNjE2MlpNNDEuNjE2MiA2MC4xODgzVjYwLjE4MTNINDAuMTE2MlY2MC4xODgzSDQxLjYxNjJaTTQxLjYxNjIgNjAuMTk1MlY2MC4xODgzSDQwLjExNjJWNjAuMTk1Mkg0MS42MTYyWk00MS42MTYyIDYwLjIwMjFWNjAuMTk1Mkg0MC4xMTYyVjYwLjIwMjFINDEuNjE2MlpNNDEuNjE2MiA2MC4yMDlWNjAuMjAyMUg0MC4xMTYyVjYwLjIwOUg0MS42MTYyWk00MS42MTYyIDYwLjIxNTlWNjAuMjA5SDQwLjExNjJWNjAuMjE1OUg0MS42MTYyWk00MS42MTYyIDYwLjIyMjhWNjAuMjE1OUg0MC4xMTYyVjYwLjIyMjhINDEuNjE2MlpNNDEuNjE2MiA2MC4yMjk3VjYwLjIyMjhINDAuMTE2MlY2MC4yMjk3SDQxLjYxNjJaTTQxLjYxNjIgNjAuMjM2NlY2MC4yMjk3SDQwLjExNjJWNjAuMjM2Nkg0MS42MTYyWk00MS42MTYyIDYwLjI0MzVWNjAuMjM2Nkg0MC4xMTYyVjYwLjI0MzVINDEuNjE2MlpNNDEuNjE2MiA2MC4yNTA0VjYwLjI0MzVINDAuMTE2MlY2MC4yNTA0SDQxLjYxNjJaTTQxLjYxNjIgNjAuMjU3MlY2MC4yNTA0SDQwLjExNjJWNjAuMjU3Mkg0MS42MTYyWk00MS42MTYyIDYwLjI2NDFWNjAuMjU3Mkg0MC4xMTYyVjYwLjI2NDFINDEuNjE2MlpNNDEuNjE2MiA2MC4yNzA5VjYwLjI2NDFINDAuMTE2MlY2MC4yNzA5SDQxLjYxNjJaTTQxLjYxNjIgNjAuMjc3N1Y2MC4yNzA5SDQwLjExNjJWNjAuMjc3N0g0MS42MTYyWk00MS42MTYyIDYwLjI4NDZWNjAuMjc3N0g0MC4xMTYyVjYwLjI4NDZINDEuNjE2MlpNNDEuNjE2MiA2MC4yOTE0VjYwLjI4NDZINDAuMTE2MlY2MC4yOTE0SDQxLjYxNjJaTTQxLjYxNjIgNjAuMjk4MlY2MC4yOTE0SDQwLjExNjJWNjAuMjk4Mkg0MS42MTYyWk00MS42MTYyIDYwLjMwNVY2MC4yOTgySDQwLjExNjJWNjAuMzA1SDQxLjYxNjJaTTQxLjYxNjIgNjAuMzExOFY2MC4zMDVINDAuMTE2MlY2MC4zMTE4SDQxLjYxNjJaTTQxLjYxNjIgNjAuMzE4NlY2MC4zMTE4SDQwLjExNjJWNjAuMzE4Nkg0MS42MTYyWk00MS42MTYyIDYwLjMyNTNWNjAuMzE4Nkg0MC4xMTYyVjYwLjMyNTNINDEuNjE2MlpNNDEuNjE2MiA2MC4zMzIxVjYwLjMyNTNINDAuMTE2MlY2MC4zMzIxSDQxLjYxNjJaTTQxLjYxNjIgNjAuMzM4OVY2MC4zMzIxSDQwLjExNjJWNjAuMzM4OUg0MS42MTYyWk00MS42MTYyIDYwLjM0NTZWNjAuMzM4OUg0MC4xMTYyVjYwLjM0NTZINDEuNjE2MlpNNDEuNjE2MiA2MC4zNTI0VjYwLjM0NTZINDAuMTE2MlY2MC4zNTI0SDQxLjYxNjJaTTQxLjYxNjIgNjAuMzU5MVY2MC4zNTI0SDQwLjExNjJWNjAuMzU5MUg0MS42MTYyWk00MS42MTYyIDYwLjM2NThWNjAuMzU5MUg0MC4xMTYyVjYwLjM2NThINDEuNjE2MlpNNDEuNjE2MiA2MC4zNzI2VjYwLjM2NThINDAuMTE2MlY2MC4zNzI2SDQxLjYxNjJaTTQxLjYxNjIgNjAuMzc5M1Y2MC4zNzI2SDQwLjExNjJWNjAuMzc5M0g0MS42MTYyWk00MS42MTYyIDYwLjM4NlY2MC4zNzkzSDQwLjExNjJWNjAuMzg2SDQxLjYxNjJaTTQxLjYxNjIgNjAuMzkyN1Y2MC4zODZINDAuMTE2MlY2MC4zOTI3SDQxLjYxNjJaTTQxLjYxNjIgNjAuMzk5NFY2MC4zOTI3SDQwLjExNjJWNjAuMzk5NEg0MS42MTYyWk00MS42MTYyIDYwLjQwNlY2MC4zOTk0SDQwLjExNjJWNjAuNDA2SDQxLjYxNjJaTTQxLjYxNjIgNjAuNDEyN1Y2MC40MDZINDAuMTE2MlY2MC40MTI3SDQxLjYxNjJaTTQxLjYxNjIgNjAuNDE5NFY2MC40MTI3SDQwLjExNjJWNjAuNDE5NEg0MS42MTYyWk00MS42MTYyIDYwLjQyNlY2MC40MTk0SDQwLjExNjJWNjAuNDI2SDQxLjYxNjJaTTQxLjYxNjIgNjAuNDMyN1Y2MC40MjZINDAuMTE2MlY2MC40MzI3SDQxLjYxNjJaTTQxLjYxNjIgNjAuNDM5M1Y2MC40MzI3SDQwLjExNjJWNjAuNDM5M0g0MS42MTYyWk00MS42MTYyIDYwLjQ0NlY2MC40MzkzSDQwLjExNjJWNjAuNDQ2SDQxLjYxNjJaTTQxLjYxNjIgNjAuNDUyNlY2MC40NDZINDAuMTE2MlY2MC40NTI2SDQxLjYxNjJaTTQxLjYxNjIgNjAuNDU5MlY2MC40NTI2SDQwLjExNjJWNjAuNDU5Mkg0MS42MTYyWk00MS42MTYyIDYwLjQ2NThWNjAuNDU5Mkg0MC4xMTYyVjYwLjQ2NThINDEuNjE2MlpNNDEuNjE2MiA2MC40NzI0VjYwLjQ2NThINDAuMTE2MlY2MC40NzI0SDQxLjYxNjJaTTQxLjYxNjIgNjAuNDc5VjYwLjQ3MjRINDAuMTE2MlY2MC40NzlINDEuNjE2MlpNNDEuNjE2MiA2MC40ODU2VjYwLjQ3OUg0MC4xMTYyVjYwLjQ4NTZINDEuNjE2MlpNNDEuNjE2MiA2MC40OTIyVjYwLjQ4NTZINDAuMTE2MlY2MC40OTIySDQxLjYxNjJaTTQxLjYxNjIgNjAuNDk4N1Y2MC40OTIySDQwLjExNjJWNjAuNDk4N0g0MS42MTYyWk00MS42MTYyIDYwLjUwNTNWNjAuNDk4N0g0MC4xMTYyVjYwLjUwNTNINDEuNjE2MlpNNDEuNjE2MiA2MC41MTE5VjYwLjUwNTNINDAuMTE2MlY2MC41MTE5SDQxLjYxNjJaTTQxLjYxNjIgNjAuNTE4NFY2MC41MTE5SDQwLjExNjJWNjAuNTE4NEg0MS42MTYyWk00MS42MTYyIDYwLjUyNDlWNjAuNTE4NEg0MC4xMTYyVjYwLjUyNDlINDEuNjE2MlpNNDEuNjE2MiA2MC41MzE1VjYwLjUyNDlINDAuMTE2MlY2MC41MzE1SDQxLjYxNjJaTTQxLjYxNjIgNjAuNTM4VjYwLjUzMTVINDAuMTE2MlY2MC41MzhINDEuNjE2MlpNNDEuNjE2MiA2MC41NDQ1VjYwLjUzOEg0MC4xMTYyVjYwLjU0NDVINDEuNjE2MlpNNDEuNjE2MiA2MC41NTFWNjAuNTQ0NUg0MC4xMTYyVjYwLjU1MUg0MS42MTYyWk00MS42MTYyIDYwLjU1NzVWNjAuNTUxSDQwLjExNjJWNjAuNTU3NUg0MS42MTYyWk00MS42MTYyIDYwLjU2NFY2MC41NTc1SDQwLjExNjJWNjAuNTY0SDQxLjYxNjJaTTQxLjYxNjIgNjAuNTcwNVY2MC41NjRINDAuMTE2MlY2MC41NzA1SDQxLjYxNjJaTTQxLjYxNjIgNjAuNTc3VjYwLjU3MDVINDAuMTE2MlY2MC41NzdINDEuNjE2MlpNNDEuNjE2MiA2MC41ODM0VjYwLjU3N0g0MC4xMTYyVjYwLjU4MzRINDEuNjE2MlpNNDEuNjE2MiA2MC41ODk5VjYwLjU4MzRINDAuMTE2MlY2MC41ODk5SDQxLjYxNjJaTTQxLjYxNjIgNjAuNTk2M1Y2MC41ODk5SDQwLjExNjJWNjAuNTk2M0g0MS42MTYyWk00MS42MTYyIDYwLjYwMjhWNjAuNTk2M0g0MC4xMTYyVjYwLjYwMjhINDEuNjE2MlpNNDEuNjE2MiA2MC42MDkyVjYwLjYwMjhINDAuMTE2MlY2MC42MDkySDQxLjYxNjJaTTQxLjYxNjIgNjAuNjE1NlY2MC42MDkySDQwLjExNjJWNjAuNjE1Nkg0MS42MTYyWk00MS42MTYyIDYwLjYyMlY2MC42MTU2SDQwLjExNjJWNjAuNjIySDQxLjYxNjJaTTQxLjYxNjIgNjAuNjI4NVY2MC42MjJINDAuMTE2MlY2MC42Mjg1SDQxLjYxNjJaTTQxLjYxNjIgNjAuNjM0OVY2MC42Mjg1SDQwLjExNjJWNjAuNjM0OUg0MS42MTYyWk00MS42MTYyIDYwLjY0MTNWNjAuNjM0OUg0MC4xMTYyVjYwLjY0MTNINDEuNjE2MlpNNDEuNjE2MiA2MC42NDc2VjYwLjY0MTNINDAuMTE2MlY2MC42NDc2SDQxLjYxNjJaTTQxLjYxNjIgNjAuNjU0VjYwLjY0NzZINDAuMTE2MlY2MC42NTRINDEuNjE2MlpNNDEuNjE2MiA2MC42NjA0VjYwLjY1NEg0MC4xMTYyVjYwLjY2MDRINDEuNjE2MlpNNDEuNjE2MiA2MC42NjY3VjYwLjY2MDRINDAuMTE2MlY2MC42NjY3SDQxLjYxNjJaTTQxLjYxNjIgNjAuNjczMVY2MC42NjY3SDQwLjExNjJWNjAuNjczMUg0MS42MTYyWk00MS42MTYyIDYwLjY3OTRWNjAuNjczMUg0MC4xMTYyVjYwLjY3OTRINDEuNjE2MlpNNDEuNjE2MiA2MC42ODU4VjYwLjY3OTRINDAuMTE2MlY2MC42ODU4SDQxLjYxNjJaTTQxLjYxNjIgNjAuNjkyMVY2MC42ODU4SDQwLjExNjJWNjAuNjkyMUg0MS42MTYyWk00MS42MTYyIDYwLjY5ODRWNjAuNjkyMUg0MC4xMTYyVjYwLjY5ODRINDEuNjE2MlpNNDEuNjE2MiA2MC43MDQ3VjYwLjY5ODRINDAuMTE2MlY2MC43MDQ3SDQxLjYxNjJaTTQxLjYxNjIgNjAuNzExMVY2MC43MDQ3SDQwLjExNjJWNjAuNzExMUg0MS42MTYyWk00MS42MTYyIDYwLjcxNzNWNjAuNzExMUg0MC4xMTYyVjYwLjcxNzNINDEuNjE2MlpNNDEuNjE2MiA2MC43MjM2VjYwLjcxNzNINDAuMTE2MlY2MC43MjM2SDQxLjYxNjJaTTQxLjYxNjIgNjAuNzI5OVY2MC43MjM2SDQwLjExNjJWNjAuNzI5OUg0MS42MTYyWk00MS42MTYyIDYwLjczNjJWNjAuNzI5OUg0MC4xMTYyVjYwLjczNjJINDEuNjE2MlpNNDEuNjE2MiA2MC43NDI1VjYwLjczNjJINDAuMTE2MlY2MC43NDI1SDQxLjYxNjJaTTQxLjYxNjIgNjAuNzQ4N1Y2MC43NDI1SDQwLjExNjJWNjAuNzQ4N0g0MS42MTYyWk00MS42MTYyIDYwLjc1NVY2MC43NDg3SDQwLjExNjJWNjAuNzU1SDQxLjYxNjJaTTQxLjYxNjIgNjAuNzYxMlY2MC43NTVINDAuMTE2MlY2MC43NjEySDQxLjYxNjJaTTQxLjYxNjIgNjAuNzY3NFY2MC43NjEySDQwLjExNjJWNjAuNzY3NEg0MS42MTYyWk00MS42MTYyIDYwLjc3MzdWNjAuNzY3NEg0MC4xMTYyVjYwLjc3MzdINDEuNjE2MlpNNDEuNjE2MiA2MC43Nzk5VjYwLjc3MzdINDAuMTE2MlY2MC43Nzk5SDQxLjYxNjJaTTQxLjYxNjIgNjAuNzg2MVY2MC43Nzk5SDQwLjExNjJWNjAuNzg2MUg0MS42MTYyWk00MS42MTYyIDYwLjc5MjNWNjAuNzg2MUg0MC4xMTYyVjYwLjc5MjNINDEuNjE2MlpNNDEuNjE2MiA2MC43OTg1VjYwLjc5MjNINDAuMTE2MlY2MC43OTg1SDQxLjYxNjJaTTQxLjYxNjIgNjAuODA0N1Y2MC43OTg1SDQwLjExNjJWNjAuODA0N0g0MS42MTYyWk00MS42MTYyIDYwLjgxMDlWNjAuODA0N0g0MC4xMTYyVjYwLjgxMDlINDEuNjE2MlpNNDEuNjE2MiA2MC44MTdWNjAuODEwOUg0MC4xMTYyVjYwLjgxN0g0MS42MTYyWk00MS42MTYyIDYwLjgyMzJWNjAuODE3SDQwLjExNjJWNjAuODIzMkg0MS42MTYyWk00MS42MTYyIDYwLjgyOTNWNjAuODIzMkg0MC4xMTYyVjYwLjgyOTNINDEuNjE2MlpNNDEuNjE2MiA2MC44MzU1VjYwLjgyOTNINDAuMTE2MlY2MC44MzU1SDQxLjYxNjJaTTQxLjYxNjIgNjAuODQxNlY2MC44MzU1SDQwLjExNjJWNjAuODQxNkg0MS42MTYyWk00MS42MTYyIDYwLjg0NzdWNjAuODQxNkg0MC4xMTYyVjYwLjg0NzdINDEuNjE2MlpNNDEuNjE2MiA2MC44NTM5VjYwLjg0NzdINDAuMTE2MlY2MC44NTM5SDQxLjYxNjJaTTQxLjYxNjIgNjAuODZWNjAuODUzOUg0MC4xMTYyVjYwLjg2SDQxLjYxNjJaTTQxLjYxNjIgNjAuODY2MVY2MC44Nkg0MC4xMTYyVjYwLjg2NjFINDEuNjE2MlpNNDEuNjE2MiA2MC44NzIyVjYwLjg2NjFINDAuMTE2MlY2MC44NzIySDQxLjYxNjJaTTQxLjYxNjIgNjAuODc4M1Y2MC44NzIySDQwLjExNjJWNjAuODc4M0g0MS42MTYyWk00MS42MTYyIDYwLjg4NDRWNjAuODc4M0g0MC4xMTYyVjYwLjg4NDRINDEuNjE2MlpNNDEuNjE2MiA2MC44OTA0VjYwLjg4NDRINDAuMTE2MlY2MC44OTA0SDQxLjYxNjJaTTQxLjYxNjIgNjAuODk2NVY2MC44OTA0SDQwLjExNjJWNjAuODk2NUg0MS42MTYyWk00MS42MTYyIDYwLjkwMjZWNjAuODk2NUg0MC4xMTYyVjYwLjkwMjZINDEuNjE2MlpNNDEuNjE2MiA2MC45MDg2VjYwLjkwMjZINDAuMTE2MlY2MC45MDg2SDQxLjYxNjJaTTQxLjYxNjIgNjAuOTE0NlY2MC45MDg2SDQwLjExNjJWNjAuOTE0Nkg0MS42MTYyWk00MS42MTYyIDYwLjkyMDdWNjAuOTE0Nkg0MC4xMTYyVjYwLjkyMDdINDEuNjE2MlpNNDEuNjE2MiA2MC45MjY3VjYwLjkyMDdINDAuMTE2MlY2MC45MjY3SDQxLjYxNjJaTTQxLjYxNjIgNjAuOTMyN1Y2MC45MjY3SDQwLjExNjJWNjAuOTMyN0g0MS42MTYyWk00MS42MTYyIDYwLjkzODdWNjAuOTMyN0g0MC4xMTYyVjYwLjkzODdINDEuNjE2MlpNNDEuNjE2MiA2MC45NDQ3VjYwLjkzODdINDAuMTE2MlY2MC45NDQ3SDQxLjYxNjJaTTQxLjYxNjIgNjAuOTUwN1Y2MC45NDQ3SDQwLjExNjJWNjAuOTUwN0g0MS42MTYyWk00MS42MTYyIDYwLjk1NjdWNjAuOTUwN0g0MC4xMTYyVjYwLjk1NjdINDEuNjE2MlpNNDEuNjE2MiA2MC45NjI3VjYwLjk1NjdINDAuMTE2MlY2MC45NjI3SDQxLjYxNjJaTTQxLjYxNjIgNjAuOTY4N1Y2MC45NjI3SDQwLjExNjJWNjAuOTY4N0g0MS42MTYyWk00MS42MTYyIDYwLjk3NDZWNjAuOTY4N0g0MC4xMTYyVjYwLjk3NDZINDEuNjE2MlpNNDEuNjE2MiA2MC45ODA2VjYwLjk3NDZINDAuMTE2MlY2MC45ODA2SDQxLjYxNjJaTTQxLjYxNjIgNjAuOTg2NVY2MC45ODA2SDQwLjExNjJWNjAuOTg2NUg0MS42MTYyWk00MS42MTYyIDYwLjk5MjVWNjAuOTg2NUg0MC4xMTYyVjYwLjk5MjVINDEuNjE2MlpNNDEuNjE2MiA2MC45OTg0VjYwLjk5MjVINDAuMTE2MlY2MC45OTg0SDQxLjYxNjJaTTQxLjYxNjIgNjEuMDA0M1Y2MC45OTg0SDQwLjExNjJWNjEuMDA0M0g0MS42MTYyWk00MS42MTYyIDYxLjAxMDJWNjEuMDA0M0g0MC4xMTYyVjYxLjAxMDJINDEuNjE2MlpNNDEuNjE2MiA2MS4wMTYxVjYxLjAxMDJINDAuMTE2MlY2MS4wMTYxSDQxLjYxNjJaTTQxLjYxNjIgNjEuMDIyVjYxLjAxNjFINDAuMTE2MlY2MS4wMjJINDEuNjE2MlpNNDEuNjE2MiA2MS4wMjc5VjYxLjAyMkg0MC4xMTYyVjYxLjAyNzlINDEuNjE2MlpNNDEuNjE2MiA2MS4wMzM4VjYxLjAyNzlINDAuMTE2MlY2MS4wMzM4SDQxLjYxNjJaTTQxLjYxNjIgNjEuMDM5N1Y2MS4wMzM4SDQwLjExNjJWNjEuMDM5N0g0MS42MTYyWk00MS42MTYyIDYxLjA0NTVWNjEuMDM5N0g0MC4xMTYyVjYxLjA0NTVINDEuNjE2MlpNNDEuNjE2MiA2MS4wNTE0VjYxLjA0NTVINDAuMTE2MlY2MS4wNTE0SDQxLjYxNjJaTTQxLjYxNjIgNjEuMDU3MlY2MS4wNTE0SDQwLjExNjJWNjEuMDU3Mkg0MS42MTYyWk00MS42MTYyIDYxLjA2MzFWNjEuMDU3Mkg0MC4xMTYyVjYxLjA2MzFINDEuNjE2MlpNNDEuNjE2MiA2MS4wNjg5VjYxLjA2MzFINDAuMTE2MlY2MS4wNjg5SDQxLjYxNjJaTTQxLjYxNjIgNjEuMDc0N1Y2MS4wNjg5SDQwLjExNjJWNjEuMDc0N0g0MS42MTYyWk00MS42MTYyIDYxLjA4MDZWNjEuMDc0N0g0MC4xMTYyVjYxLjA4MDZINDEuNjE2MlpNNDEuNjE2MiA2MS4wODY0VjYxLjA4MDZINDAuMTE2MlY2MS4wODY0SDQxLjYxNjJaTTQxLjYxNjIgNjEuMDkyMlY2MS4wODY0SDQwLjExNjJWNjEuMDkyMkg0MS42MTYyWk00MS42MTYyIDYxLjA5OFY2MS4wOTIySDQwLjExNjJWNjEuMDk4SDQxLjYxNjJaTTQxLjYxNjIgNjEuMTAzOFY2MS4wOThINDAuMTE2MlY2MS4xMDM4SDQxLjYxNjJaTTQxLjYxNjIgNjEuMTA5NVY2MS4xMDM4SDQwLjExNjJWNjEuMTA5NUg0MS42MTYyWk00MS42MTYyIDYxLjExNTNWNjEuMTA5NUg0MC4xMTYyVjYxLjExNTNINDEuNjE2MlpNNDEuNjE2MiA2MS4xMjExVjYxLjExNTNINDAuMTE2MlY2MS4xMjExSDQxLjYxNjJaTTQxLjYxNjIgNjEuMTI2OFY2MS4xMjExSDQwLjExNjJWNjEuMTI2OEg0MS42MTYyWk00MS42MTYyIDYxLjEzMjZWNjEuMTI2OEg0MC4xMTYyVjYxLjEzMjZINDEuNjE2MlpNNDEuNjE2MiA2MS4xMzgzVjYxLjEzMjZINDAuMTE2MlY2MS4xMzgzSDQxLjYxNjJaTTQxLjYxNjIgNjEuMTQ0VjYxLjEzODNINDAuMTE2MlY2MS4xNDRINDEuNjE2MlpNNDEuNjE2MiA2MS4xNDk4VjYxLjE0NEg0MC4xMTYyVjYxLjE0OThINDEuNjE2MlpNNDEuNjE2MiA2MS4xNTU1VjYxLjE0OThINDAuMTE2MlY2MS4xNTU1SDQxLjYxNjJaTTQxLjYxNjIgNjEuMTYxMlY2MS4xNTU1SDQwLjExNjJWNjEuMTYxMkg0MS42MTYyWk00MS42MTYyIDYxLjE2NjlWNjEuMTYxMkg0MC4xMTYyVjYxLjE2NjlINDEuNjE2MlpNNDEuNjE2MiA2MS4xNzI2VjYxLjE2NjlINDAuMTE2MlY2MS4xNzI2SDQxLjYxNjJaTTQxLjYxNjIgNjEuMTc4MlY2MS4xNzI2SDQwLjExNjJWNjEuMTc4Mkg0MS42MTYyWk00MS42MTYyIDYxLjE4MzlWNjEuMTc4Mkg0MC4xMTYyVjYxLjE4MzlINDEuNjE2MlpNNDEuNjE2MiA2MS4xODk2VjYxLjE4MzlINDAuMTE2MlY2MS4xODk2SDQxLjYxNjJaTTQxLjYxNjIgNjEuMTk1MlY2MS4xODk2SDQwLjExNjJWNjEuMTk1Mkg0MS42MTYyWk00MS42MTYyIDYxLjIwMDlWNjEuMTk1Mkg0MC4xMTYyVjYxLjIwMDlINDEuNjE2MlpNNDEuNjE2MiA2MS4yMDY1VjYxLjIwMDlINDAuMTE2MlY2MS4yMDY1SDQxLjYxNjJaTTQxLjYxNjIgNjEuMjEyMlY2MS4yMDY1SDQwLjExNjJWNjEuMjEyMkg0MS42MTYyWk00MS42MTYyIDYxLjIxNzhWNjEuMjEyMkg0MC4xMTYyVjYxLjIxNzhINDEuNjE2MlpNNDEuNjE2MiA2MS4yMjM0VjYxLjIxNzhINDAuMTE2MlY2MS4yMjM0SDQxLjYxNjJaTTQxLjYxNjIgNjEuMjI5VjYxLjIyMzRINDAuMTE2MlY2MS4yMjlINDEuNjE2MlpNNDEuNjE2MiA2MS4yMzQ2VjYxLjIyOUg0MC4xMTYyVjYxLjIzNDZINDEuNjE2MlpNNDEuNjE2MiA2MS4yNDAyVjYxLjIzNDZINDAuMTE2MlY2MS4yNDAySDQxLjYxNjJaTTQxLjYxNjIgNjEuMjQ1OFY2MS4yNDAySDQwLjExNjJWNjEuMjQ1OEg0MS42MTYyWk00MS42MTYyIDYxLjI1MTRWNjEuMjQ1OEg0MC4xMTYyVjYxLjI1MTRINDEuNjE2MlpNNDEuNjE2MiA2MS4yNTY5VjYxLjI1MTRINDAuMTE2MlY2MS4yNTY5SDQxLjYxNjJaTTQxLjYxNjIgNjEuMjYyNVY2MS4yNTY5SDQwLjExNjJWNjEuMjYyNUg0MS42MTYyWk00MS42MTYyIDYxLjI2ODFWNjEuMjYyNUg0MC4xMTYyVjYxLjI2ODFINDEuNjE2MlpNNDEuNjE2MiA2MS4yNzM2VjYxLjI2ODFINDAuMTE2MlY2MS4yNzM2SDQxLjYxNjJaTTQxLjYxNjIgNjEuMjc5MVY2MS4yNzM2SDQwLjExNjJWNjEuMjc5MUg0MS42MTYyWk00MS42MTYyIDYxLjI4NDdWNjEuMjc5MUg0MC4xMTYyVjYxLjI4NDdINDEuNjE2MlpNNDEuNjE2MiA2MS4yOTAyVjYxLjI4NDdINDAuMTE2MlY2MS4yOTAySDQxLjYxNjJaTTQxLjYxNjIgNjEuMjk1N1Y2MS4yOTAySDQwLjExNjJWNjEuMjk1N0g0MS42MTYyWk00MS42MTYyIDYxLjMwMTJWNjEuMjk1N0g0MC4xMTYyVjYxLjMwMTJINDEuNjE2MlpNNDEuNjE2MiA2MS4zMDY3VjYxLjMwMTJINDAuMTE2MlY2MS4zMDY3SDQxLjYxNjJaTTQxLjYxNjIgNjEuMzEyMlY2MS4zMDY3SDQwLjExNjJWNjEuMzEyMkg0MS42MTYyWk00MS42MTYyIDYxLjMxNzdWNjEuMzEyMkg0MC4xMTYyVjYxLjMxNzdINDEuNjE2MlpNNDEuNjE2MiA2MS4zMjMyVjYxLjMxNzdINDAuMTE2MlY2MS4zMjMySDQxLjYxNjJaTTQxLjYxNjIgNjEuMzI4NlY2MS4zMjMySDQwLjExNjJWNjEuMzI4Nkg0MS42MTYyWk00MS42MTYyIDYxLjMzNDFWNjEuMzI4Nkg0MC4xMTYyVjYxLjMzNDFINDEuNjE2MlpNNDEuNjE2MiA2MS4zMzk1VjYxLjMzNDFINDAuMTE2MlY2MS4zMzk1SDQxLjYxNjJaTTQxLjYxNjIgNjEuMzQ1VjYxLjMzOTVINDAuMTE2MlY2MS4zNDVINDEuNjE2MlpNNDEuNjE2MiA2MS4zNTA0VjYxLjM0NUg0MC4xMTYyVjYxLjM1MDRINDEuNjE2MlpNNDEuNjE2MiA2MS4zNTU4VjYxLjM1MDRINDAuMTE2MlY2MS4zNTU4SDQxLjYxNjJaTTQxLjYxNjIgNjEuMzYxMlY2MS4zNTU4SDQwLjExNjJWNjEuMzYxMkg0MS42MTYyWk00MS42MTYyIDYxLjM2NjdWNjEuMzYxMkg0MC4xMTYyVjYxLjM2NjdINDEuNjE2MlpNNDEuNjE2MiA2MS4zNzIxVjYxLjM2NjdINDAuMTE2MlY2MS4zNzIxSDQxLjYxNjJaTTQxLjYxNjIgNjEuMzc3NVY2MS4zNzIxSDQwLjExNjJWNjEuMzc3NUg0MS42MTYyWk00MS42MTYyIDYxLjM4MjhWNjEuMzc3NUg0MC4xMTYyVjYxLjM4MjhINDEuNjE2MlpNNDEuNjE2MiA2MS4zODgyVjYxLjM4MjhINDAuMTE2MlY2MS4zODgySDQxLjYxNjJaTTQxLjYxNjIgNjEuMzkzNlY2MS4zODgySDQwLjExNjJWNjEuMzkzNkg0MS42MTYyWk00MS42MTYyIDYxLjM5OVY2MS4zOTM2SDQwLjExNjJWNjEuMzk5SDQxLjYxNjJaTTQxLjYxNjIgNjEuNDA0M1Y2MS4zOTlINDAuMTE2MlY2MS40MDQzSDQxLjYxNjJaTTQxLjYxNjIgNjEuNDA5N1Y2MS40MDQzSDQwLjExNjJWNjEuNDA5N0g0MS42MTYyWk00MS42MTYyIDYxLjQxNVY2MS40MDk3SDQwLjExNjJWNjEuNDE1SDQxLjYxNjJaTTQxLjYxNjIgNjEuNDIwM1Y2MS40MTVINDAuMTE2MlY2MS40MjAzSDQxLjYxNjJaTTQxLjYxNjIgNjEuNDI1NlY2MS40MjAzSDQwLjExNjJWNjEuNDI1Nkg0MS42MTYyWk00MS42MTYyIDYxLjQzMVY2MS40MjU2SDQwLjExNjJWNjEuNDMxSDQxLjYxNjJaTTQxLjYxNjIgNjEuNDM2M1Y2MS40MzFINDAuMTE2MlY2MS40MzYzSDQxLjYxNjJaTTQxLjYxNjIgNjEuNDQxNlY2MS40MzYzSDQwLjExNjJWNjEuNDQxNkg0MS42MTYyWk00MS42MTYyIDYxLjQ0NjhWNjEuNDQxNkg0MC4xMTYyVjYxLjQ0NjhINDEuNjE2MlpNNDEuNjE2MiA2MS40NTIxVjYxLjQ0NjhINDAuMTE2MlY2MS40NTIxSDQxLjYxNjJaTTQxLjYxNjIgNjEuNDU3NFY2MS40NTIxSDQwLjExNjJWNjEuNDU3NEg0MS42MTYyWk00MS42MTYyIDYxLjQ2MjdWNjEuNDU3NEg0MC4xMTYyVjYxLjQ2MjdINDEuNjE2MlpNNDEuNjE2MiA2MS40Njc5VjYxLjQ2MjdINDAuMTE2MlY2MS40Njc5SDQxLjYxNjJaTTQxLjYxNjIgNjEuNDczMlY2MS40Njc5SDQwLjExNjJWNjEuNDczMkg0MS42MTYyWk00MS42MTYyIDYxLjQ3ODRWNjEuNDczMkg0MC4xMTYyVjYxLjQ3ODRINDEuNjE2MlpNNDEuNjE2MiA2MS40ODM3VjYxLjQ3ODRINDAuMTE2MlY2MS40ODM3SDQxLjYxNjJaTTQxLjYxNjIgNjEuNDg4OVY2MS40ODM3SDQwLjExNjJWNjEuNDg4OUg0MS42MTYyWk00MS42MTYyIDYxLjQ5NDFWNjEuNDg4OUg0MC4xMTYyVjYxLjQ5NDFINDEuNjE2MlpNNDEuNjE2MiA2MS40OTkzVjYxLjQ5NDFINDAuMTE2MlY2MS40OTkzSDQxLjYxNjJaTTQxLjYxNjIgNjEuNTA0NVY2MS40OTkzSDQwLjExNjJWNjEuNTA0NUg0MS42MTYyWk00MS42MTYyIDYxLjUwOTdWNjEuNTA0NUg0MC4xMTYyVjYxLjUwOTdINDEuNjE2MlpNNDEuNjE2MiA2MS41MTQ5VjYxLjUwOTdINDAuMTE2MlY2MS41MTQ5SDQxLjYxNjJaTTQxLjYxNjIgNjEuNTIwMVY2MS41MTQ5SDQwLjExNjJWNjEuNTIwMUg0MS42MTYyWk00MS42MTYyIDYxLjUyNTJWNjEuNTIwMUg0MC4xMTYyVjYxLjUyNTJINDEuNjE2MlpNNDEuNjE2MiA2MS41MzA0VjYxLjUyNTJINDAuMTE2MlY2MS41MzA0SDQxLjYxNjJaTTQxLjYxNjIgNjEuNTM1NlY2MS41MzA0SDQwLjExNjJWNjEuNTM1Nkg0MS42MTYyWk00MS42MTYyIDYxLjU0MDdWNjEuNTM1Nkg0MC4xMTYyVjYxLjU0MDdINDEuNjE2MlpNNDEuNjE2MiA2MS41NDU4VjYxLjU0MDdINDAuMTE2MlY2MS41NDU4SDQxLjYxNjJaTTQxLjYxNjIgNjEuNTUxVjYxLjU0NThINDAuMTE2MlY2MS41NTFINDEuNjE2MlpNNDEuNjE2MiA2MS41NTYxVjYxLjU1MUg0MC4xMTYyVjYxLjU1NjFINDEuNjE2MlpNNDEuNjE2MiA2MS41NjEyVjYxLjU1NjFINDAuMTE2MlY2MS41NjEySDQxLjYxNjJaTTQxLjYxNjIgNjEuNTY2M1Y2MS41NjEySDQwLjExNjJWNjEuNTY2M0g0MS42MTYyWk00MS42MTYyIDYxLjU3MTRWNjEuNTY2M0g0MC4xMTYyVjYxLjU3MTRINDEuNjE2MlpNNDEuNjE2MiA2MS41NzY1VjYxLjU3MTRINDAuMTE2MlY2MS41NzY1SDQxLjYxNjJaTTQxLjYxNjIgNjEuNTgxNlY2MS41NzY1SDQwLjExNjJWNjEuNTgxNkg0MS42MTYyWk00MS42MTYyIDYxLjU4NjdWNjEuNTgxNkg0MC4xMTYyVjYxLjU4NjdINDEuNjE2MlpNNDEuNjE2MiA2MS41OTE3VjYxLjU4NjdINDAuMTE2MlY2MS41OTE3SDQxLjYxNjJaTTQxLjYxNjIgNjEuNTk2OFY2MS41OTE3SDQwLjExNjJWNjEuNTk2OEg0MS42MTYyWk00MS42MTYyIDYxLjYwMThWNjEuNTk2OEg0MC4xMTYyVjYxLjYwMThINDEuNjE2MlpNNDEuNjE2MiA2MS42MDY5VjYxLjYwMThINDAuMTE2MlY2MS42MDY5SDQxLjYxNjJaTTQxLjYxNjIgNjEuNjExOVY2MS42MDY5SDQwLjExNjJWNjEuNjExOUg0MS42MTYyWk00MS42MTYyIDYxLjYxNjlWNjEuNjExOUg0MC4xMTYyVjYxLjYxNjlINDEuNjE2MlpNNDEuNjE2MiA2MS42MjE5VjYxLjYxNjlINDAuMTE2MlY2MS42MjE5SDQxLjYxNjJaTTQxLjYxNjIgNjEuNjI3VjYxLjYyMTlINDAuMTE2MlY2MS42MjdINDEuNjE2MlpNNDEuNjE2MiA2MS42MzJWNjEuNjI3SDQwLjExNjJWNjEuNjMySDQxLjYxNjJaTTQxLjYxNjIgNjEuNjM3VjYxLjYzMkg0MC4xMTYyVjYxLjYzN0g0MS42MTYyWk00MS42MTYyIDYxLjY0MTlWNjEuNjM3SDQwLjExNjJWNjEuNjQxOUg0MS42MTYyWk00MS42MTYyIDYxLjY0NjlWNjEuNjQxOUg0MC4xMTYyVjYxLjY0NjlINDEuNjE2MlpNNDEuNjE2MiA2MS42NTE5VjYxLjY0NjlINDAuMTE2MlY2MS42NTE5SDQxLjYxNjJaTTQxLjYxNjIgNjEuNjU2OFY2MS42NTE5SDQwLjExNjJWNjEuNjU2OEg0MS42MTYyWk00MS42MTYyIDYxLjY2MThWNjEuNjU2OEg0MC4xMTYyVjYxLjY2MThINDEuNjE2MlpNNDEuNjE2MiA2MS42NjY3VjYxLjY2MThINDAuMTE2MlY2MS42NjY3SDQxLjYxNjJaTTQxLjYxNjIgNjEuNjcxN1Y2MS42NjY3SDQwLjExNjJWNjEuNjcxN0g0MS42MTYyWk00MS42MTYyIDYxLjY3NjZWNjEuNjcxN0g0MC4xMTYyVjYxLjY3NjZINDEuNjE2MlpNNDEuNjE2MiA2MS42ODE1VjYxLjY3NjZINDAuMTE2MlY2MS42ODE1SDQxLjYxNjJaTTQxLjYxNjIgNjEuNjg2NVY2MS42ODE1SDQwLjExNjJWNjEuNjg2NUg0MS42MTYyWk00MS42MTYyIDYxLjY5MTRWNjEuNjg2NUg0MC4xMTYyVjYxLjY5MTRINDEuNjE2MlpNNDEuNjE2MiA2MS42OTYzVjYxLjY5MTRINDAuMTE2MlY2MS42OTYzSDQxLjYxNjJaTTQxLjYxNjIgNjEuNzAxMVY2MS42OTYzSDQwLjExNjJWNjEuNzAxMUg0MS42MTYyWk00MS42MTYyIDYxLjcwNlY2MS43MDExSDQwLjExNjJWNjEuNzA2SDQxLjYxNjJaTTQxLjYxNjIgNjEuNzEwOVY2MS43MDZINDAuMTE2MlY2MS43MTA5SDQxLjYxNjJaTTQxLjYxNjIgNjEuNzE1OFY2MS43MTA5SDQwLjExNjJWNjEuNzE1OEg0MS42MTYyWk00MS42MTYyIDYxLjcyMDZWNjEuNzE1OEg0MC4xMTYyVjYxLjcyMDZINDEuNjE2MlpNNDEuNjE2MiA2MS43MjU1VjYxLjcyMDZINDAuMTE2MlY2MS43MjU1SDQxLjYxNjJaTTQxLjYxNjIgNjEuNzMwM1Y2MS43MjU1SDQwLjExNjJWNjEuNzMwM0g0MS42MTYyWk00MS42MTYyIDYxLjczNTJWNjEuNzMwM0g0MC4xMTYyVjYxLjczNTJINDEuNjE2MlpNNDEuNjE2MiA2MS43NFY2MS43MzUySDQwLjExNjJWNjEuNzRINDEuNjE2MlpNNDEuNjE2MiA2MS43NDQ4VjYxLjc0SDQwLjExNjJWNjEuNzQ0OEg0MS42MTYyWk00MS42MTYyIDYxLjc0OTZWNjEuNzQ0OEg0MC4xMTYyVjYxLjc0OTZINDEuNjE2MlpNNDEuNjE2MiA2MS43NTQ0VjYxLjc0OTZINDAuMTE2MlY2MS43NTQ0SDQxLjYxNjJaTTQxLjYxNjIgNjEuNzU5MlY2MS43NTQ0SDQwLjExNjJWNjEuNzU5Mkg0MS42MTYyWk00MS42MTYyIDYxLjc2NFY2MS43NTkySDQwLjExNjJWNjEuNzY0SDQxLjYxNjJaTTQxLjYxNjIgNjEuNzY4OFY2MS43NjRINDAuMTE2MlY2MS43Njg4SDQxLjYxNjJaTTQxLjYxNjIgNjEuNzczNVY2MS43Njg4SDQwLjExNjJWNjEuNzczNUg0MS42MTYyWk00MS42MTYyIDYxLjc3ODNWNjEuNzczNUg0MC4xMTYyVjYxLjc3ODNINDEuNjE2MlpNNDEuNjE2MiA2MS43ODMxVjYxLjc3ODNINDAuMTE2MlY2MS43ODMxSDQxLjYxNjJaTTQxLjYxNjIgNjEuNzg3OFY2MS43ODMxSDQwLjExNjJWNjEuNzg3OEg0MS42MTYyWk00MS42MTYyIDYxLjc5MjVWNjEuNzg3OEg0MC4xMTYyVjYxLjc5MjVINDEuNjE2MlpNNDEuNjE2MiA2MS43OTczVjYxLjc5MjVINDAuMTE2MlY2MS43OTczSDQxLjYxNjJaTTQxLjYxNjIgNjEuODAyVjYxLjc5NzNINDAuMTE2MlY2MS44MDJINDEuNjE2MlpNNDEuNjE2MiA2MS44MDY3VjYxLjgwMkg0MC4xMTYyVjYxLjgwNjdINDEuNjE2MlpNNDEuNjE2MiA2MS44MTE0VjYxLjgwNjdINDAuMTE2MlY2MS44MTE0SDQxLjYxNjJaTTQxLjYxNjIgNjEuODE2MVY2MS44MTE0SDQwLjExNjJWNjEuODE2MUg0MS42MTYyWk00MS42MTYyIDYxLjgyMDhWNjEuODE2MUg0MC4xMTYyVjYxLjgyMDhINDEuNjE2MlpNNDEuNjE2MiA2MS44MjU1VjYxLjgyMDhINDAuMTE2MlY2MS44MjU1SDQxLjYxNjJaTTQxLjYxNjIgNjEuODMwMlY2MS44MjU1SDQwLjExNjJWNjEuODMwMkg0MS42MTYyWk00MS42MTYyIDYxLjgzNDhWNjEuODMwMkg0MC4xMTYyVjYxLjgzNDhINDEuNjE2MlpNNDEuNjE2MiA2MS44Mzk1VjYxLjgzNDhINDAuMTE2MlY2MS44Mzk1SDQxLjYxNjJaTTQxLjYxNjIgNjEuODQ0MVY2MS44Mzk1SDQwLjExNjJWNjEuODQ0MUg0MS42MTYyWk00MS42MTYyIDYxLjg0ODhWNjEuODQ0MUg0MC4xMTYyVjYxLjg0ODhINDEuNjE2MlpNNDEuNjE2MiA2MS44NTM0VjYxLjg0ODhINDAuMTE2MlY2MS44NTM0SDQxLjYxNjJaTTQxLjYxNjIgNjEuODU4VjYxLjg1MzRINDAuMTE2MlY2MS44NThINDEuNjE2MlpNNDEuNjE2MiA2MS44NjI2VjYxLjg1OEg0MC4xMTYyVjYxLjg2MjZINDEuNjE2MlpNNDEuNjE2MiA2MS44NjczVjYxLjg2MjZINDAuMTE2MlY2MS44NjczSDQxLjYxNjJaTTQxLjYxNjIgNjEuODcxOVY2MS44NjczSDQwLjExNjJWNjEuODcxOUg0MS42MTYyWk00MS42MTYyIDYxLjg3NjVWNjEuODcxOUg0MC4xMTYyVjYxLjg3NjVINDEuNjE2MlpNNDEuNjE2MiA2MS44ODFWNjEuODc2NUg0MC4xMTYyVjYxLjg4MUg0MS42MTYyWk00MS42MTYyIDYxLjg4NTZWNjEuODgxSDQwLjExNjJWNjEuODg1Nkg0MS42MTYyWk00MS42MTYyIDYxLjg5MDJWNjEuODg1Nkg0MC4xMTYyVjYxLjg5MDJINDEuNjE2MlpNNDEuNjE2MiA2MS44OTQ4VjYxLjg5MDJINDAuMTE2MlY2MS44OTQ4SDQxLjYxNjJaTTQxLjYxNjIgNjEuODk5M1Y2MS44OTQ4SDQwLjExNjJWNjEuODk5M0g0MS42MTYyWk00MS42MTYyIDYxLjkwMzlWNjEuODk5M0g0MC4xMTYyVjYxLjkwMzlINDEuNjE2MlpNNDEuNjE2MiA2MS45MDg0VjYxLjkwMzlINDAuMTE2MlY2MS45MDg0SDQxLjYxNjJaTTQxLjYxNjIgNjEuOTEyOVY2MS45MDg0SDQwLjExNjJWNjEuOTEyOUg0MS42MTYyWk00MS42MTYyIDYxLjkxNzRWNjEuOTEyOUg0MC4xMTYyVjYxLjkxNzRINDEuNjE2MlpNNDEuNjE2MiA2MS45MjJWNjEuOTE3NEg0MC4xMTYyVjYxLjkyMkg0MS42MTYyWk00MS42MTYyIDYxLjkyNjVWNjEuOTIySDQwLjExNjJWNjEuOTI2NUg0MS42MTYyWk00MS42MTYyIDYxLjkzMVY2MS45MjY1SDQwLjExNjJWNjEuOTMxSDQxLjYxNjJaTTQxLjYxNjIgNjEuOTM1NVY2MS45MzFINDAuMTE2MlY2MS45MzU1SDQxLjYxNjJaTTQxLjYxNjIgNjEuOTM5OVY2MS45MzU1SDQwLjExNjJWNjEuOTM5OUg0MS42MTYyWk00MS42MTYyIDYxLjk0NDRWNjEuOTM5OUg0MC4xMTYyVjYxLjk0NDRINDEuNjE2MlpNNDEuNjE2MiA2MS45NDg5VjYxLjk0NDRINDAuMTE2MlY2MS45NDg5SDQxLjYxNjJaTTQxLjYxNjIgNjEuOTUzM1Y2MS45NDg5SDQwLjExNjJWNjEuOTUzM0g0MS42MTYyWk00MS42MTYyIDYxLjk1NzhWNjEuOTUzM0g0MC4xMTYyVjYxLjk1NzhINDEuNjE2MlpNNDEuNjE2MiA2MS45NjIyVjYxLjk1NzhINDAuMTE2MlY2MS45NjIySDQxLjYxNjJaTTQxLjYxNjIgNjEuOTY2N1Y2MS45NjIySDQwLjExNjJWNjEuOTY2N0g0MS42MTYyWk00MS42MTYyIDYxLjk3MTFWNjEuOTY2N0g0MC4xMTYyVjYxLjk3MTFINDEuNjE2MlpNNDEuNjE2MiA2MS45NzU1VjYxLjk3MTFINDAuMTE2MlY2MS45NzU1SDQxLjYxNjJaTTQxLjYxNjIgNjEuOTc5OVY2MS45NzU1SDQwLjExNjJWNjEuOTc5OUg0MS42MTYyWk00MS42MTYyIDYxLjk4NDNWNjEuOTc5OUg0MC4xMTYyVjYxLjk4NDNINDEuNjE2MlpNNDEuNjE2MiA2MS45ODg3VjYxLjk4NDNINDAuMTE2MlY2MS45ODg3SDQxLjYxNjJaTTQxLjYxNjIgNjEuOTkzMVY2MS45ODg3SDQwLjExNjJWNjEuOTkzMUg0MS42MTYyWk00MS42MTYyIDYxLjk5NzVWNjEuOTkzMUg0MC4xMTYyVjYxLjk5NzVINDEuNjE2MlpNNDEuNjE2MiA2Mi4wMDE4VjYxLjk5NzVINDAuMTE2MlY2Mi4wMDE4SDQxLjYxNjJaTTQxLjYxNjIgNjIuMDA2MlY2Mi4wMDE4SDQwLjExNjJWNjIuMDA2Mkg0MS42MTYyWk00MS42MTYyIDYyLjAxMDZWNjIuMDA2Mkg0MC4xMTYyVjYyLjAxMDZINDEuNjE2MlpNNDEuNjE2MiA2Mi4wMTQ5VjYyLjAxMDZINDAuMTE2MlY2Mi4wMTQ5SDQxLjYxNjJaTTQxLjYxNjIgNjIuMDE5MlY2Mi4wMTQ5SDQwLjExNjJWNjIuMDE5Mkg0MS42MTYyWk00MS42MTYyIDYyLjAyMzZWNjIuMDE5Mkg0MC4xMTYyVjYyLjAyMzZINDEuNjE2MlpNNDEuNjE2MiA2Mi4wMjc5VjYyLjAyMzZINDAuMTE2MlY2Mi4wMjc5SDQxLjYxNjJaTTQxLjYxNjIgNjIuMDMyMlY2Mi4wMjc5SDQwLjExNjJWNjIuMDMyMkg0MS42MTYyWk00MS42MTYyIDYyLjAzNjVWNjIuMDMyMkg0MC4xMTYyVjYyLjAzNjVINDEuNjE2MlpNNDEuNjE2MiA2Mi4wNDA4VjYyLjAzNjVINDAuMTE2MlY2Mi4wNDA4SDQxLjYxNjJaTTQxLjYxNjIgNjIuMDQ1MVY2Mi4wNDA4SDQwLjExNjJWNjIuMDQ1MUg0MS42MTYyWk00MS42MTYyIDYyLjA0OTRWNjIuMDQ1MUg0MC4xMTYyVjYyLjA0OTRINDEuNjE2MlpNNDEuNjE2MiA2Mi4wNTM3VjYyLjA0OTRINDAuMTE2MlY2Mi4wNTM3SDQxLjYxNjJaTTQxLjYxNjIgNjIuMDU3OVY2Mi4wNTM3SDQwLjExNjJWNjIuMDU3OUg0MS42MTYyWk00MS42MTYyIDYyLjA2MjJWNjIuMDU3OUg0MC4xMTYyVjYyLjA2MjJINDEuNjE2MlpNNDEuNjE2MiA2Mi4wNjY0VjYyLjA2MjJINDAuMTE2MlY2Mi4wNjY0SDQxLjYxNjJaTTQxLjYxNjIgNjIuMDcwN1Y2Mi4wNjY0SDQwLjExNjJWNjIuMDcwN0g0MS42MTYyWk00MS42MTYyIDYyLjA3NDlWNjIuMDcwN0g0MC4xMTYyVjYyLjA3NDlINDEuNjE2MlpNNDEuNjE2MiA2Mi4wNzkxVjYyLjA3NDlINDAuMTE2MlY2Mi4wNzkxSDQxLjYxNjJaTTQxLjYxNjIgNjIuMDgzNFY2Mi4wNzkxSDQwLjExNjJWNjIuMDgzNEg0MS42MTYyWk00MS42MTYyIDYyLjA4NzZWNjIuMDgzNEg0MC4xMTYyVjYyLjA4NzZINDEuNjE2MlpNNDEuNjE2MiA2Mi4wOTE4VjYyLjA4NzZINDAuMTE2MlY2Mi4wOTE4SDQxLjYxNjJaTTQxLjYxNjIgNjIuMDk2VjYyLjA5MThINDAuMTE2MlY2Mi4wOTZINDEuNjE2MlpNNDEuNjE2MiA2Mi4xMDAyVjYyLjA5Nkg0MC4xMTYyVjYyLjEwMDJINDEuNjE2MlpNNDEuNjE2MiA2Mi4xMDQzVjYyLjEwMDJINDAuMTE2MlY2Mi4xMDQzSDQxLjYxNjJaTTQxLjYxNjIgNjIuMTA4NVY2Mi4xMDQzSDQwLjExNjJWNjIuMTA4NUg0MS42MTYyWk00MS42MTYyIDYyLjExMjdWNjIuMTA4NUg0MC4xMTYyVjYyLjExMjdINDEuNjE2MlpNNDEuNjE2MiA2Mi4xMTY4VjYyLjExMjdINDAuMTE2MlY2Mi4xMTY4SDQxLjYxNjJaTTQxLjYxNjIgNjIuMTIxVjYyLjExNjhINDAuMTE2MlY2Mi4xMjFINDEuNjE2MlpNNDEuNjE2MiA2Mi4xMjUxVjYyLjEyMUg0MC4xMTYyVjYyLjEyNTFINDEuNjE2MlpNNDEuNjE2MiA2Mi4xMjkyVjYyLjEyNTFINDAuMTE2MlY2Mi4xMjkySDQxLjYxNjJaTTQxLjYxNjIgNjIuMTMzNFY2Mi4xMjkySDQwLjExNjJWNjIuMTMzNEg0MS42MTYyWk00MS42MTYyIDYyLjEzNzVWNjIuMTMzNEg0MC4xMTYyVjYyLjEzNzVINDEuNjE2MlpNNDEuNjE2MiA2Mi4xNDE2VjYyLjEzNzVINDAuMTE2MlY2Mi4xNDE2SDQxLjYxNjJaTTQxLjYxNjIgNjIuMTQ1N1Y2Mi4xNDE2SDQwLjExNjJWNjIuMTQ1N0g0MS42MTYyWk0zOS4zNjYyIDYyLjg5NTdINDAuODY2MlY2MS4zOTU3SDM5LjM2NjJWNjIuODk1N1pNMzguNjE2MiA2Mi4xNDE2VjYyLjE0NTdINDAuMTE2MlY2Mi4xNDE2SDM4LjYxNjJaTTM4LjYxNjIgNjIuMTM3NVY2Mi4xNDE2SDQwLjExNjJWNjIuMTM3NUgzOC42MTYyWk0zOC42MTYyIDYyLjEzMzRWNjIuMTM3NUg0MC4xMTYyVjYyLjEzMzRIMzguNjE2MlpNMzguNjE2MiA2Mi4xMjkyVjYyLjEzMzRINDAuMTE2MlY2Mi4xMjkySDM4LjYxNjJaTTM4LjYxNjIgNjIuMTI1MVY2Mi4xMjkySDQwLjExNjJWNjIuMTI1MUgzOC42MTYyWk0zOC42MTYyIDYyLjEyMVY2Mi4xMjUxSDQwLjExNjJWNjIuMTIxSDM4LjYxNjJaTTM4LjYxNjIgNjIuMTE2OFY2Mi4xMjFINDAuMTE2MlY2Mi4xMTY4SDM4LjYxNjJaTTM4LjYxNjIgNjIuMTEyN1Y2Mi4xMTY4SDQwLjExNjJWNjIuMTEyN0gzOC42MTYyWk0zOC42MTYyIDYyLjEwODVWNjIuMTEyN0g0MC4xMTYyVjYyLjEwODVIMzguNjE2MlpNMzguNjE2MiA2Mi4xMDQzVjYyLjEwODVINDAuMTE2MlY2Mi4xMDQzSDM4LjYxNjJaTTM4LjYxNjIgNjIuMTAwMlY2Mi4xMDQzSDQwLjExNjJWNjIuMTAwMkgzOC42MTYyWk0zOC42MTYyIDYyLjA5NlY2Mi4xMDAySDQwLjExNjJWNjIuMDk2SDM4LjYxNjJaTTM4LjYxNjIgNjIuMDkxOFY2Mi4wOTZINDAuMTE2MlY2Mi4wOTE4SDM4LjYxNjJaTTM4LjYxNjIgNjIuMDg3NlY2Mi4wOTE4SDQwLjExNjJWNjIuMDg3NkgzOC42MTYyWk0zOC42MTYyIDYyLjA4MzRWNjIuMDg3Nkg0MC4xMTYyVjYyLjA4MzRIMzguNjE2MlpNMzguNjE2MiA2Mi4wNzkxVjYyLjA4MzRINDAuMTE2MlY2Mi4wNzkxSDM4LjYxNjJaTTM4LjYxNjIgNjIuMDc0OVY2Mi4wNzkxSDQwLjExNjJWNjIuMDc0OUgzOC42MTYyWk0zOC42MTYyIDYyLjA3MDdWNjIuMDc0OUg0MC4xMTYyVjYyLjA3MDdIMzguNjE2MlpNMzguNjE2MiA2Mi4wNjY0VjYyLjA3MDdINDAuMTE2MlY2Mi4wNjY0SDM4LjYxNjJaTTM4LjYxNjIgNjIuMDYyMlY2Mi4wNjY0SDQwLjExNjJWNjIuMDYyMkgzOC42MTYyWk0zOC42MTYyIDYyLjA1NzlWNjIuMDYyMkg0MC4xMTYyVjYyLjA1NzlIMzguNjE2MlpNMzguNjE2MiA2Mi4wNTM3VjYyLjA1NzlINDAuMTE2MlY2Mi4wNTM3SDM4LjYxNjJaTTM4LjYxNjIgNjIuMDQ5NFY2Mi4wNTM3SDQwLjExNjJWNjIuMDQ5NEgzOC42MTYyWk0zOC42MTYyIDYyLjA0NTFWNjIuMDQ5NEg0MC4xMTYyVjYyLjA0NTFIMzguNjE2MlpNMzguNjE2MiA2Mi4wNDA4VjYyLjA0NTFINDAuMTE2MlY2Mi4wNDA4SDM4LjYxNjJaTTM4LjYxNjIgNjIuMDM2NVY2Mi4wNDA4SDQwLjExNjJWNjIuMDM2NUgzOC42MTYyWk0zOC42MTYyIDYyLjAzMjJWNjIuMDM2NUg0MC4xMTYyVjYyLjAzMjJIMzguNjE2MlpNMzguNjE2MiA2Mi4wMjc5VjYyLjAzMjJINDAuMTE2MlY2Mi4wMjc5SDM4LjYxNjJaTTM4LjYxNjIgNjIuMDIzNlY2Mi4wMjc5SDQwLjExNjJWNjIuMDIzNkgzOC42MTYyWk0zOC42MTYyIDYyLjAxOTJWNjIuMDIzNkg0MC4xMTYyVjYyLjAxOTJIMzguNjE2MlpNMzguNjE2MiA2Mi4wMTQ5VjYyLjAxOTJINDAuMTE2MlY2Mi4wMTQ5SDM4LjYxNjJaTTM4LjYxNjIgNjIuMDEwNlY2Mi4wMTQ5SDQwLjExNjJWNjIuMDEwNkgzOC42MTYyWk0zOC42MTYyIDYyLjAwNjJWNjIuMDEwNkg0MC4xMTYyVjYyLjAwNjJIMzguNjE2MlpNMzguNjE2MiA2Mi4wMDE4VjYyLjAwNjJINDAuMTE2MlY2Mi4wMDE4SDM4LjYxNjJaTTM4LjYxNjIgNjEuOTk3NVY2Mi4wMDE4SDQwLjExNjJWNjEuOTk3NUgzOC42MTYyWk0zOC42MTYyIDYxLjk5MzFWNjEuOTk3NUg0MC4xMTYyVjYxLjk5MzFIMzguNjE2MlpNMzguNjE2MiA2MS45ODg3VjYxLjk5MzFINDAuMTE2MlY2MS45ODg3SDM4LjYxNjJaTTM4LjYxNjIgNjEuOTg0M1Y2MS45ODg3SDQwLjExNjJWNjEuOTg0M0gzOC42MTYyWk0zOC42MTYyIDYxLjk3OTlWNjEuOTg0M0g0MC4xMTYyVjYxLjk3OTlIMzguNjE2MlpNMzguNjE2MiA2MS45NzU1VjYxLjk3OTlINDAuMTE2MlY2MS45NzU1SDM4LjYxNjJaTTM4LjYxNjIgNjEuOTcxMVY2MS45NzU1SDQwLjExNjJWNjEuOTcxMUgzOC42MTYyWk0zOC42MTYyIDYxLjk2NjdWNjEuOTcxMUg0MC4xMTYyVjYxLjk2NjdIMzguNjE2MlpNMzguNjE2MiA2MS45NjIyVjYxLjk2NjdINDAuMTE2MlY2MS45NjIySDM4LjYxNjJaTTM4LjYxNjIgNjEuOTU3OFY2MS45NjIySDQwLjExNjJWNjEuOTU3OEgzOC42MTYyWk0zOC42MTYyIDYxLjk1MzNWNjEuOTU3OEg0MC4xMTYyVjYxLjk1MzNIMzguNjE2MlpNMzguNjE2MiA2MS45NDg5VjYxLjk1MzNINDAuMTE2MlY2MS45NDg5SDM4LjYxNjJaTTM4LjYxNjIgNjEuOTQ0NFY2MS45NDg5SDQwLjExNjJWNjEuOTQ0NEgzOC42MTYyWk0zOC42MTYyIDYxLjkzOTlWNjEuOTQ0NEg0MC4xMTYyVjYxLjkzOTlIMzguNjE2MlpNMzguNjE2MiA2MS45MzU1VjYxLjkzOTlINDAuMTE2MlY2MS45MzU1SDM4LjYxNjJaTTM4LjYxNjIgNjEuOTMxVjYxLjkzNTVINDAuMTE2MlY2MS45MzFIMzguNjE2MlpNMzguNjE2MiA2MS45MjY1VjYxLjkzMUg0MC4xMTYyVjYxLjkyNjVIMzguNjE2MlpNMzguNjE2MiA2MS45MjJWNjEuOTI2NUg0MC4xMTYyVjYxLjkyMkgzOC42MTYyWk0zOC42MTYyIDYxLjkxNzRWNjEuOTIySDQwLjExNjJWNjEuOTE3NEgzOC42MTYyWk0zOC42MTYyIDYxLjkxMjlWNjEuOTE3NEg0MC4xMTYyVjYxLjkxMjlIMzguNjE2MlpNMzguNjE2MiA2MS45MDg0VjYxLjkxMjlINDAuMTE2MlY2MS45MDg0SDM4LjYxNjJaTTM4LjYxNjIgNjEuOTAzOVY2MS45MDg0SDQwLjExNjJWNjEuOTAzOUgzOC42MTYyWk0zOC42MTYyIDYxLjg5OTNWNjEuOTAzOUg0MC4xMTYyVjYxLjg5OTNIMzguNjE2MlpNMzguNjE2MiA2MS44OTQ4VjYxLjg5OTNINDAuMTE2MlY2MS44OTQ4SDM4LjYxNjJaTTM4LjYxNjIgNjEuODkwMlY2MS44OTQ4SDQwLjExNjJWNjEuODkwMkgzOC42MTYyWk0zOC42MTYyIDYxLjg4NTZWNjEuODkwMkg0MC4xMTYyVjYxLjg4NTZIMzguNjE2MlpNMzguNjE2MiA2MS44ODFWNjEuODg1Nkg0MC4xMTYyVjYxLjg4MUgzOC42MTYyWk0zOC42MTYyIDYxLjg3NjVWNjEuODgxSDQwLjExNjJWNjEuODc2NUgzOC42MTYyWk0zOC42MTYyIDYxLjg3MTlWNjEuODc2NUg0MC4xMTYyVjYxLjg3MTlIMzguNjE2MlpNMzguNjE2MiA2MS44NjczVjYxLjg3MTlINDAuMTE2MlY2MS44NjczSDM4LjYxNjJaTTM4LjYxNjIgNjEuODYyNlY2MS44NjczSDQwLjExNjJWNjEuODYyNkgzOC42MTYyWk0zOC42MTYyIDYxLjg1OFY2MS44NjI2SDQwLjExNjJWNjEuODU4SDM4LjYxNjJaTTM4LjYxNjIgNjEuODUzNFY2MS44NThINDAuMTE2MlY2MS44NTM0SDM4LjYxNjJaTTM4LjYxNjIgNjEuODQ4OFY2MS44NTM0SDQwLjExNjJWNjEuODQ4OEgzOC42MTYyWk0zOC42MTYyIDYxLjg0NDFWNjEuODQ4OEg0MC4xMTYyVjYxLjg0NDFIMzguNjE2MlpNMzguNjE2MiA2MS44Mzk1VjYxLjg0NDFINDAuMTE2MlY2MS44Mzk1SDM4LjYxNjJaTTM4LjYxNjIgNjEuODM0OFY2MS44Mzk1SDQwLjExNjJWNjEuODM0OEgzOC42MTYyWk0zOC42MTYyIDYxLjgzMDJWNjEuODM0OEg0MC4xMTYyVjYxLjgzMDJIMzguNjE2MlpNMzguNjE2MiA2MS44MjU1VjYxLjgzMDJINDAuMTE2MlY2MS44MjU1SDM4LjYxNjJaTTM4LjYxNjIgNjEuODIwOFY2MS44MjU1SDQwLjExNjJWNjEuODIwOEgzOC42MTYyWk0zOC42MTYyIDYxLjgxNjFWNjEuODIwOEg0MC4xMTYyVjYxLjgxNjFIMzguNjE2MlpNMzguNjE2MiA2MS44MTE0VjYxLjgxNjFINDAuMTE2MlY2MS44MTE0SDM4LjYxNjJaTTM4LjYxNjIgNjEuODA2N1Y2MS44MTE0SDQwLjExNjJWNjEuODA2N0gzOC42MTYyWk0zOC42MTYyIDYxLjgwMlY2MS44MDY3SDQwLjExNjJWNjEuODAySDM4LjYxNjJaTTM4LjYxNjIgNjEuNzk3M1Y2MS44MDJINDAuMTE2MlY2MS43OTczSDM4LjYxNjJaTTM4LjYxNjIgNjEuNzkyNVY2MS43OTczSDQwLjExNjJWNjEuNzkyNUgzOC42MTYyWk0zOC42MTYyIDYxLjc4NzhWNjEuNzkyNUg0MC4xMTYyVjYxLjc4NzhIMzguNjE2MlpNMzguNjE2MiA2MS43ODMxVjYxLjc4NzhINDAuMTE2MlY2MS43ODMxSDM4LjYxNjJaTTM4LjYxNjIgNjEuNzc4M1Y2MS43ODMxSDQwLjExNjJWNjEuNzc4M0gzOC42MTYyWk0zOC42MTYyIDYxLjc3MzVWNjEuNzc4M0g0MC4xMTYyVjYxLjc3MzVIMzguNjE2MlpNMzguNjE2MiA2MS43Njg4VjYxLjc3MzVINDAuMTE2MlY2MS43Njg4SDM4LjYxNjJaTTM4LjYxNjIgNjEuNzY0VjYxLjc2ODhINDAuMTE2MlY2MS43NjRIMzguNjE2MlpNMzguNjE2MiA2MS43NTkyVjYxLjc2NEg0MC4xMTYyVjYxLjc1OTJIMzguNjE2MlpNMzguNjE2MiA2MS43NTQ0VjYxLjc1OTJINDAuMTE2MlY2MS43NTQ0SDM4LjYxNjJaTTM4LjYxNjIgNjEuNzQ5NlY2MS43NTQ0SDQwLjExNjJWNjEuNzQ5NkgzOC42MTYyWk0zOC42MTYyIDYxLjc0NDhWNjEuNzQ5Nkg0MC4xMTYyVjYxLjc0NDhIMzguNjE2MlpNMzguNjE2MiA2MS43NFY2MS43NDQ4SDQwLjExNjJWNjEuNzRIMzguNjE2MlpNMzguNjE2MiA2MS43MzUyVjYxLjc0SDQwLjExNjJWNjEuNzM1MkgzOC42MTYyWk0zOC42MTYyIDYxLjczMDNWNjEuNzM1Mkg0MC4xMTYyVjYxLjczMDNIMzguNjE2MlpNMzguNjE2MiA2MS43MjU1VjYxLjczMDNINDAuMTE2MlY2MS43MjU1SDM4LjYxNjJaTTM4LjYxNjIgNjEuNzIwNlY2MS43MjU1SDQwLjExNjJWNjEuNzIwNkgzOC42MTYyWk0zOC42MTYyIDYxLjcxNThWNjEuNzIwNkg0MC4xMTYyVjYxLjcxNThIMzguNjE2MlpNMzguNjE2MiA2MS43MTA5VjYxLjcxNThINDAuMTE2MlY2MS43MTA5SDM4LjYxNjJaTTM4LjYxNjIgNjEuNzA2VjYxLjcxMDlINDAuMTE2MlY2MS43MDZIMzguNjE2MlpNMzguNjE2MiA2MS43MDExVjYxLjcwNkg0MC4xMTYyVjYxLjcwMTFIMzguNjE2MlpNMzguNjE2MiA2MS42OTYzVjYxLjcwMTFINDAuMTE2MlY2MS42OTYzSDM4LjYxNjJaTTM4LjYxNjIgNjEuNjkxNFY2MS42OTYzSDQwLjExNjJWNjEuNjkxNEgzOC42MTYyWk0zOC42MTYyIDYxLjY4NjVWNjEuNjkxNEg0MC4xMTYyVjYxLjY4NjVIMzguNjE2MlpNMzguNjE2MiA2MS42ODE1VjYxLjY4NjVINDAuMTE2MlY2MS42ODE1SDM4LjYxNjJaTTM4LjYxNjIgNjEuNjc2NlY2MS42ODE1SDQwLjExNjJWNjEuNjc2NkgzOC42MTYyWk0zOC42MTYyIDYxLjY3MTdWNjEuNjc2Nkg0MC4xMTYyVjYxLjY3MTdIMzguNjE2MlpNMzguNjE2MiA2MS42NjY3VjYxLjY3MTdINDAuMTE2MlY2MS42NjY3SDM4LjYxNjJaTTM4LjYxNjIgNjEuNjYxOFY2MS42NjY3SDQwLjExNjJWNjEuNjYxOEgzOC42MTYyWk0zOC42MTYyIDYxLjY1NjhWNjEuNjYxOEg0MC4xMTYyVjYxLjY1NjhIMzguNjE2MlpNMzguNjE2MiA2MS42NTE5VjYxLjY1NjhINDAuMTE2MlY2MS42NTE5SDM4LjYxNjJaTTM4LjYxNjIgNjEuNjQ2OVY2MS42NTE5SDQwLjExNjJWNjEuNjQ2OUgzOC42MTYyWk0zOC42MTYyIDYxLjY0MTlWNjEuNjQ2OUg0MC4xMTYyVjYxLjY0MTlIMzguNjE2MlpNMzguNjE2MiA2MS42MzdWNjEuNjQxOUg0MC4xMTYyVjYxLjYzN0gzOC42MTYyWk0zOC42MTYyIDYxLjYzMlY2MS42MzdINDAuMTE2MlY2MS42MzJIMzguNjE2MlpNMzguNjE2MiA2MS42MjdWNjEuNjMySDQwLjExNjJWNjEuNjI3SDM4LjYxNjJaTTM4LjYxNjIgNjEuNjIxOVY2MS42MjdINDAuMTE2MlY2MS42MjE5SDM4LjYxNjJaTTM4LjYxNjIgNjEuNjE2OVY2MS42MjE5SDQwLjExNjJWNjEuNjE2OUgzOC42MTYyWk0zOC42MTYyIDYxLjYxMTlWNjEuNjE2OUg0MC4xMTYyVjYxLjYxMTlIMzguNjE2MlpNMzguNjE2MiA2MS42MDY5VjYxLjYxMTlINDAuMTE2MlY2MS42MDY5SDM4LjYxNjJaTTM4LjYxNjIgNjEuNjAxOFY2MS42MDY5SDQwLjExNjJWNjEuNjAxOEgzOC42MTYyWk0zOC42MTYyIDYxLjU5NjhWNjEuNjAxOEg0MC4xMTYyVjYxLjU5NjhIMzguNjE2MlpNMzguNjE2MiA2MS41OTE3VjYxLjU5NjhINDAuMTE2MlY2MS41OTE3SDM4LjYxNjJaTTM4LjYxNjIgNjEuNTg2N1Y2MS41OTE3SDQwLjExNjJWNjEuNTg2N0gzOC42MTYyWk0zOC42MTYyIDYxLjU4MTZWNjEuNTg2N0g0MC4xMTYyVjYxLjU4MTZIMzguNjE2MlpNMzguNjE2MiA2MS41NzY1VjYxLjU4MTZINDAuMTE2MlY2MS41NzY1SDM4LjYxNjJaTTM4LjYxNjIgNjEuNTcxNFY2MS41NzY1SDQwLjExNjJWNjEuNTcxNEgzOC42MTYyWk0zOC42MTYyIDYxLjU2NjNWNjEuNTcxNEg0MC4xMTYyVjYxLjU2NjNIMzguNjE2MlpNMzguNjE2MiA2MS41NjEyVjYxLjU2NjNINDAuMTE2MlY2MS41NjEySDM4LjYxNjJaTTM4LjYxNjIgNjEuNTU2MVY2MS41NjEySDQwLjExNjJWNjEuNTU2MUgzOC42MTYyWk0zOC42MTYyIDYxLjU1MVY2MS41NTYxSDQwLjExNjJWNjEuNTUxSDM4LjYxNjJaTTM4LjYxNjIgNjEuNTQ1OFY2MS41NTFINDAuMTE2MlY2MS41NDU4SDM4LjYxNjJaTTM4LjYxNjIgNjEuNTQwN1Y2MS41NDU4SDQwLjExNjJWNjEuNTQwN0gzOC42MTYyWk0zOC42MTYyIDYxLjUzNTZWNjEuNTQwN0g0MC4xMTYyVjYxLjUzNTZIMzguNjE2MlpNMzguNjE2MiA2MS41MzA0VjYxLjUzNTZINDAuMTE2MlY2MS41MzA0SDM4LjYxNjJaTTM4LjYxNjIgNjEuNTI1MlY2MS41MzA0SDQwLjExNjJWNjEuNTI1MkgzOC42MTYyWk0zOC42MTYyIDYxLjUyMDFWNjEuNTI1Mkg0MC4xMTYyVjYxLjUyMDFIMzguNjE2MlpNMzguNjE2MiA2MS41MTQ5VjYxLjUyMDFINDAuMTE2MlY2MS41MTQ5SDM4LjYxNjJaTTM4LjYxNjIgNjEuNTA5N1Y2MS41MTQ5SDQwLjExNjJWNjEuNTA5N0gzOC42MTYyWk0zOC42MTYyIDYxLjUwNDVWNjEuNTA5N0g0MC4xMTYyVjYxLjUwNDVIMzguNjE2MlpNMzguNjE2MiA2MS40OTkzVjYxLjUwNDVINDAuMTE2MlY2MS40OTkzSDM4LjYxNjJaTTM4LjYxNjIgNjEuNDk0MVY2MS40OTkzSDQwLjExNjJWNjEuNDk0MUgzOC42MTYyWk0zOC42MTYyIDYxLjQ4ODlWNjEuNDk0MUg0MC4xMTYyVjYxLjQ4ODlIMzguNjE2MlpNMzguNjE2MiA2MS40ODM3VjYxLjQ4ODlINDAuMTE2MlY2MS40ODM3SDM4LjYxNjJaTTM4LjYxNjIgNjEuNDc4NFY2MS40ODM3SDQwLjExNjJWNjEuNDc4NEgzOC42MTYyWk0zOC42MTYyIDYxLjQ3MzJWNjEuNDc4NEg0MC4xMTYyVjYxLjQ3MzJIMzguNjE2MlpNMzguNjE2MiA2MS40Njc5VjYxLjQ3MzJINDAuMTE2MlY2MS40Njc5SDM4LjYxNjJaTTM4LjYxNjIgNjEuNDYyN1Y2MS40Njc5SDQwLjExNjJWNjEuNDYyN0gzOC42MTYyWk0zOC42MTYyIDYxLjQ1NzRWNjEuNDYyN0g0MC4xMTYyVjYxLjQ1NzRIMzguNjE2MlpNMzguNjE2MiA2MS40NTIxVjYxLjQ1NzRINDAuMTE2MlY2MS40NTIxSDM4LjYxNjJaTTM4LjYxNjIgNjEuNDQ2OFY2MS40NTIxSDQwLjExNjJWNjEuNDQ2OEgzOC42MTYyWk0zOC42MTYyIDYxLjQ0MTZWNjEuNDQ2OEg0MC4xMTYyVjYxLjQ0MTZIMzguNjE2MlpNMzguNjE2MiA2MS40MzYzVjYxLjQ0MTZINDAuMTE2MlY2MS40MzYzSDM4LjYxNjJaTTM4LjYxNjIgNjEuNDMxVjYxLjQzNjNINDAuMTE2MlY2MS40MzFIMzguNjE2MlpNMzguNjE2MiA2MS40MjU2VjYxLjQzMUg0MC4xMTYyVjYxLjQyNTZIMzguNjE2MlpNMzguNjE2MiA2MS40MjAzVjYxLjQyNTZINDAuMTE2MlY2MS40MjAzSDM4LjYxNjJaTTM4LjYxNjIgNjEuNDE1VjYxLjQyMDNINDAuMTE2MlY2MS40MTVIMzguNjE2MlpNMzguNjE2MiA2MS40MDk3VjYxLjQxNUg0MC4xMTYyVjYxLjQwOTdIMzguNjE2MlpNMzguNjE2MiA2MS40MDQzVjYxLjQwOTdINDAuMTE2MlY2MS40MDQzSDM4LjYxNjJaTTM4LjYxNjIgNjEuMzk5VjYxLjQwNDNINDAuMTE2MlY2MS4zOTlIMzguNjE2MlpNMzguNjE2MiA2MS4zOTM2VjYxLjM5OUg0MC4xMTYyVjYxLjM5MzZIMzguNjE2MlpNMzguNjE2MiA2MS4zODgyVjYxLjM5MzZINDAuMTE2MlY2MS4zODgySDM4LjYxNjJaTTM4LjYxNjIgNjEuMzgyOFY2MS4zODgySDQwLjExNjJWNjEuMzgyOEgzOC42MTYyWk0zOC42MTYyIDYxLjM3NzVWNjEuMzgyOEg0MC4xMTYyVjYxLjM3NzVIMzguNjE2MlpNMzguNjE2MiA2MS4zNzIxVjYxLjM3NzVINDAuMTE2MlY2MS4zNzIxSDM4LjYxNjJaTTM4LjYxNjIgNjEuMzY2N1Y2MS4zNzIxSDQwLjExNjJWNjEuMzY2N0gzOC42MTYyWk0zOC42MTYyIDYxLjM2MTJWNjEuMzY2N0g0MC4xMTYyVjYxLjM2MTJIMzguNjE2MlpNMzguNjE2MiA2MS4zNTU4VjYxLjM2MTJINDAuMTE2MlY2MS4zNTU4SDM4LjYxNjJaTTM4LjYxNjIgNjEuMzUwNFY2MS4zNTU4SDQwLjExNjJWNjEuMzUwNEgzOC42MTYyWk0zOC42MTYyIDYxLjM0NVY2MS4zNTA0SDQwLjExNjJWNjEuMzQ1SDM4LjYxNjJaTTM4LjYxNjIgNjEuMzM5NVY2MS4zNDVINDAuMTE2MlY2MS4zMzk1SDM4LjYxNjJaTTM4LjYxNjIgNjEuMzM0MVY2MS4zMzk1SDQwLjExNjJWNjEuMzM0MUgzOC42MTYyWk0zOC42MTYyIDYxLjMyODZWNjEuMzM0MUg0MC4xMTYyVjYxLjMyODZIMzguNjE2MlpNMzguNjE2MiA2MS4zMjMyVjYxLjMyODZINDAuMTE2MlY2MS4zMjMySDM4LjYxNjJaTTM4LjYxNjIgNjEuMzE3N1Y2MS4zMjMySDQwLjExNjJWNjEuMzE3N0gzOC42MTYyWk0zOC42MTYyIDYxLjMxMjJWNjEuMzE3N0g0MC4xMTYyVjYxLjMxMjJIMzguNjE2MlpNMzguNjE2MiA2MS4zMDY3VjYxLjMxMjJINDAuMTE2MlY2MS4zMDY3SDM4LjYxNjJaTTM4LjYxNjIgNjEuMzAxMlY2MS4zMDY3SDQwLjExNjJWNjEuMzAxMkgzOC42MTYyWk0zOC42MTYyIDYxLjI5NTdWNjEuMzAxMkg0MC4xMTYyVjYxLjI5NTdIMzguNjE2MlpNMzguNjE2MiA2MS4yOTAyVjYxLjI5NTdINDAuMTE2MlY2MS4yOTAySDM4LjYxNjJaTTM4LjYxNjIgNjEuMjg0N1Y2MS4yOTAySDQwLjExNjJWNjEuMjg0N0gzOC42MTYyWk0zOC42MTYyIDYxLjI3OTFWNjEuMjg0N0g0MC4xMTYyVjYxLjI3OTFIMzguNjE2MlpNMzguNjE2MiA2MS4yNzM2VjYxLjI3OTFINDAuMTE2MlY2MS4yNzM2SDM4LjYxNjJaTTM4LjYxNjIgNjEuMjY4MVY2MS4yNzM2SDQwLjExNjJWNjEuMjY4MUgzOC42MTYyWk0zOC42MTYyIDYxLjI2MjVWNjEuMjY4MUg0MC4xMTYyVjYxLjI2MjVIMzguNjE2MlpNMzguNjE2MiA2MS4yNTY5VjYxLjI2MjVINDAuMTE2MlY2MS4yNTY5SDM4LjYxNjJaTTM4LjYxNjIgNjEuMjUxNFY2MS4yNTY5SDQwLjExNjJWNjEuMjUxNEgzOC42MTYyWk0zOC42MTYyIDYxLjI0NThWNjEuMjUxNEg0MC4xMTYyVjYxLjI0NThIMzguNjE2MlpNMzguNjE2MiA2MS4yNDAyVjYxLjI0NThINDAuMTE2MlY2MS4yNDAySDM4LjYxNjJaTTM4LjYxNjIgNjEuMjM0NlY2MS4yNDAySDQwLjExNjJWNjEuMjM0NkgzOC42MTYyWk0zOC42MTYyIDYxLjIyOVY2MS4yMzQ2SDQwLjExNjJWNjEuMjI5SDM4LjYxNjJaTTM4LjYxNjIgNjEuMjIzNFY2MS4yMjlINDAuMTE2MlY2MS4yMjM0SDM4LjYxNjJaTTM4LjYxNjIgNjEuMjE3OFY2MS4yMjM0SDQwLjExNjJWNjEuMjE3OEgzOC42MTYyWk0zOC42MTYyIDYxLjIxMjJWNjEuMjE3OEg0MC4xMTYyVjYxLjIxMjJIMzguNjE2MlpNMzguNjE2MiA2MS4yMDY1VjYxLjIxMjJINDAuMTE2MlY2MS4yMDY1SDM4LjYxNjJaTTM4LjYxNjIgNjEuMjAwOVY2MS4yMDY1SDQwLjExNjJWNjEuMjAwOUgzOC42MTYyWk0zOC42MTYyIDYxLjE5NTJWNjEuMjAwOUg0MC4xMTYyVjYxLjE5NTJIMzguNjE2MlpNMzguNjE2MiA2MS4xODk2VjYxLjE5NTJINDAuMTE2MlY2MS4xODk2SDM4LjYxNjJaTTM4LjYxNjIgNjEuMTgzOVY2MS4xODk2SDQwLjExNjJWNjEuMTgzOUgzOC42MTYyWk0zOC42MTYyIDYxLjE3ODJWNjEuMTgzOUg0MC4xMTYyVjYxLjE3ODJIMzguNjE2MlpNMzguNjE2MiA2MS4xNzI2VjYxLjE3ODJINDAuMTE2MlY2MS4xNzI2SDM4LjYxNjJaTTM4LjYxNjIgNjEuMTY2OVY2MS4xNzI2SDQwLjExNjJWNjEuMTY2OUgzOC42MTYyWk0zOC42MTYyIDYxLjE2MTJWNjEuMTY2OUg0MC4xMTYyVjYxLjE2MTJIMzguNjE2MlpNMzguNjE2MiA2MS4xNTU1VjYxLjE2MTJINDAuMTE2MlY2MS4xNTU1SDM4LjYxNjJaTTM4LjYxNjIgNjEuMTQ5OFY2MS4xNTU1SDQwLjExNjJWNjEuMTQ5OEgzOC42MTYyWk0zOC42MTYyIDYxLjE0NFY2MS4xNDk4SDQwLjExNjJWNjEuMTQ0SDM4LjYxNjJaTTM4LjYxNjIgNjEuMTM4M1Y2MS4xNDRINDAuMTE2MlY2MS4xMzgzSDM4LjYxNjJaTTM4LjYxNjIgNjEuMTMyNlY2MS4xMzgzSDQwLjExNjJWNjEuMTMyNkgzOC42MTYyWk0zOC42MTYyIDYxLjEyNjhWNjEuMTMyNkg0MC4xMTYyVjYxLjEyNjhIMzguNjE2MlpNMzguNjE2MiA2MS4xMjExVjYxLjEyNjhINDAuMTE2MlY2MS4xMjExSDM4LjYxNjJaTTM4LjYxNjIgNjEuMTE1M1Y2MS4xMjExSDQwLjExNjJWNjEuMTE1M0gzOC42MTYyWk0zOC42MTYyIDYxLjEwOTVWNjEuMTE1M0g0MC4xMTYyVjYxLjEwOTVIMzguNjE2MlpNMzguNjE2MiA2MS4xMDM4VjYxLjEwOTVINDAuMTE2MlY2MS4xMDM4SDM4LjYxNjJaTTM4LjYxNjIgNjEuMDk4VjYxLjEwMzhINDAuMTE2MlY2MS4wOThIMzguNjE2MlpNMzguNjE2MiA2MS4wOTIyVjYxLjA5OEg0MC4xMTYyVjYxLjA5MjJIMzguNjE2MlpNMzguNjE2MiA2MS4wODY0VjYxLjA5MjJINDAuMTE2MlY2MS4wODY0SDM4LjYxNjJaTTM4LjYxNjIgNjEuMDgwNlY2MS4wODY0SDQwLjExNjJWNjEuMDgwNkgzOC42MTYyWk0zOC42MTYyIDYxLjA3NDdWNjEuMDgwNkg0MC4xMTYyVjYxLjA3NDdIMzguNjE2MlpNMzguNjE2MiA2MS4wNjg5VjYxLjA3NDdINDAuMTE2MlY2MS4wNjg5SDM4LjYxNjJaTTM4LjYxNjIgNjEuMDYzMVY2MS4wNjg5SDQwLjExNjJWNjEuMDYzMUgzOC42MTYyWk0zOC42MTYyIDYxLjA1NzJWNjEuMDYzMUg0MC4xMTYyVjYxLjA1NzJIMzguNjE2MlpNMzguNjE2MiA2MS4wNTE0VjYxLjA1NzJINDAuMTE2MlY2MS4wNTE0SDM4LjYxNjJaTTM4LjYxNjIgNjEuMDQ1NVY2MS4wNTE0SDQwLjExNjJWNjEuMDQ1NUgzOC42MTYyWk0zOC42MTYyIDYxLjAzOTdWNjEuMDQ1NUg0MC4xMTYyVjYxLjAzOTdIMzguNjE2MlpNMzguNjE2MiA2MS4wMzM4VjYxLjAzOTdINDAuMTE2MlY2MS4wMzM4SDM4LjYxNjJaTTM4LjYxNjIgNjEuMDI3OVY2MS4wMzM4SDQwLjExNjJWNjEuMDI3OUgzOC42MTYyWk0zOC42MTYyIDYxLjAyMlY2MS4wMjc5SDQwLjExNjJWNjEuMDIySDM4LjYxNjJaTTM4LjYxNjIgNjEuMDE2MVY2MS4wMjJINDAuMTE2MlY2MS4wMTYxSDM4LjYxNjJaTTM4LjYxNjIgNjEuMDEwMlY2MS4wMTYxSDQwLjExNjJWNjEuMDEwMkgzOC42MTYyWk0zOC42MTYyIDYxLjAwNDNWNjEuMDEwMkg0MC4xMTYyVjYxLjAwNDNIMzguNjE2MlpNMzguNjE2MiA2MC45OTg0VjYxLjAwNDNINDAuMTE2MlY2MC45OTg0SDM4LjYxNjJaTTM4LjYxNjIgNjAuOTkyNVY2MC45OTg0SDQwLjExNjJWNjAuOTkyNUgzOC42MTYyWk0zOC42MTYyIDYwLjk4NjVWNjAuOTkyNUg0MC4xMTYyVjYwLjk4NjVIMzguNjE2MlpNMzguNjE2MiA2MC45ODA2VjYwLjk4NjVINDAuMTE2MlY2MC45ODA2SDM4LjYxNjJaTTM4LjYxNjIgNjAuOTc0NlY2MC45ODA2SDQwLjExNjJWNjAuOTc0NkgzOC42MTYyWk0zOC42MTYyIDYwLjk2ODdWNjAuOTc0Nkg0MC4xMTYyVjYwLjk2ODdIMzguNjE2MlpNMzguNjE2MiA2MC45NjI3VjYwLjk2ODdINDAuMTE2MlY2MC45NjI3SDM4LjYxNjJaTTM4LjYxNjIgNjAuOTU2N1Y2MC45NjI3SDQwLjExNjJWNjAuOTU2N0gzOC42MTYyWk0zOC42MTYyIDYwLjk1MDdWNjAuOTU2N0g0MC4xMTYyVjYwLjk1MDdIMzguNjE2MlpNMzguNjE2MiA2MC45NDQ3VjYwLjk1MDdINDAuMTE2MlY2MC45NDQ3SDM4LjYxNjJaTTM4LjYxNjIgNjAuOTM4N1Y2MC45NDQ3SDQwLjExNjJWNjAuOTM4N0gzOC42MTYyWk0zOC42MTYyIDYwLjkzMjdWNjAuOTM4N0g0MC4xMTYyVjYwLjkzMjdIMzguNjE2MlpNMzguNjE2MiA2MC45MjY3VjYwLjkzMjdINDAuMTE2MlY2MC45MjY3SDM4LjYxNjJaTTM4LjYxNjIgNjAuOTIwN1Y2MC45MjY3SDQwLjExNjJWNjAuOTIwN0gzOC42MTYyWk0zOC42MTYyIDYwLjkxNDZWNjAuOTIwN0g0MC4xMTYyVjYwLjkxNDZIMzguNjE2MlpNMzguNjE2MiA2MC45MDg2VjYwLjkxNDZINDAuMTE2MlY2MC45MDg2SDM4LjYxNjJaTTM4LjYxNjIgNjAuOTAyNlY2MC45MDg2SDQwLjExNjJWNjAuOTAyNkgzOC42MTYyWk0zOC42MTYyIDYwLjg5NjVWNjAuOTAyNkg0MC4xMTYyVjYwLjg5NjVIMzguNjE2MlpNMzguNjE2MiA2MC44OTA0VjYwLjg5NjVINDAuMTE2MlY2MC44OTA0SDM4LjYxNjJaTTM4LjYxNjIgNjAuODg0NFY2MC44OTA0SDQwLjExNjJWNjAuODg0NEgzOC42MTYyWk0zOC42MTYyIDYwLjg3ODNWNjAuODg0NEg0MC4xMTYyVjYwLjg3ODNIMzguNjE2MlpNMzguNjE2MiA2MC44NzIyVjYwLjg3ODNINDAuMTE2MlY2MC44NzIySDM4LjYxNjJaTTM4LjYxNjIgNjAuODY2MVY2MC44NzIySDQwLjExNjJWNjAuODY2MUgzOC42MTYyWk0zOC42MTYyIDYwLjg2VjYwLjg2NjFINDAuMTE2MlY2MC44NkgzOC42MTYyWk0zOC42MTYyIDYwLjg1MzlWNjAuODZINDAuMTE2MlY2MC44NTM5SDM4LjYxNjJaTTM4LjYxNjIgNjAuODQ3N1Y2MC44NTM5SDQwLjExNjJWNjAuODQ3N0gzOC42MTYyWk0zOC42MTYyIDYwLjg0MTZWNjAuODQ3N0g0MC4xMTYyVjYwLjg0MTZIMzguNjE2MlpNMzguNjE2MiA2MC44MzU1VjYwLjg0MTZINDAuMTE2MlY2MC44MzU1SDM4LjYxNjJaTTM4LjYxNjIgNjAuODI5M1Y2MC44MzU1SDQwLjExNjJWNjAuODI5M0gzOC42MTYyWk0zOC42MTYyIDYwLjgyMzJWNjAuODI5M0g0MC4xMTYyVjYwLjgyMzJIMzguNjE2MlpNMzguNjE2MiA2MC44MTdWNjAuODIzMkg0MC4xMTYyVjYwLjgxN0gzOC42MTYyWk0zOC42MTYyIDYwLjgxMDlWNjAuODE3SDQwLjExNjJWNjAuODEwOUgzOC42MTYyWk0zOC42MTYyIDYwLjgwNDdWNjAuODEwOUg0MC4xMTYyVjYwLjgwNDdIMzguNjE2MlpNMzguNjE2MiA2MC43OTg1VjYwLjgwNDdINDAuMTE2MlY2MC43OTg1SDM4LjYxNjJaTTM4LjYxNjIgNjAuNzkyM1Y2MC43OTg1SDQwLjExNjJWNjAuNzkyM0gzOC42MTYyWk0zOC42MTYyIDYwLjc4NjFWNjAuNzkyM0g0MC4xMTYyVjYwLjc4NjFIMzguNjE2MlpNMzguNjE2MiA2MC43Nzk5VjYwLjc4NjFINDAuMTE2MlY2MC43Nzk5SDM4LjYxNjJaTTM4LjYxNjIgNjAuNzczN1Y2MC43Nzk5SDQwLjExNjJWNjAuNzczN0gzOC42MTYyWk0zOC42MTYyIDYwLjc2NzRWNjAuNzczN0g0MC4xMTYyVjYwLjc2NzRIMzguNjE2MlpNMzguNjE2MiA2MC43NjEyVjYwLjc2NzRINDAuMTE2MlY2MC43NjEySDM4LjYxNjJaTTM4LjYxNjIgNjAuNzU1VjYwLjc2MTJINDAuMTE2MlY2MC43NTVIMzguNjE2MlpNMzguNjE2MiA2MC43NDg3VjYwLjc1NUg0MC4xMTYyVjYwLjc0ODdIMzguNjE2MlpNMzguNjE2MiA2MC43NDI1VjYwLjc0ODdINDAuMTE2MlY2MC43NDI1SDM4LjYxNjJaTTM4LjYxNjIgNjAuNzM2MlY2MC43NDI1SDQwLjExNjJWNjAuNzM2MkgzOC42MTYyWk0zOC42MTYyIDYwLjcyOTlWNjAuNzM2Mkg0MC4xMTYyVjYwLjcyOTlIMzguNjE2MlpNMzguNjE2MiA2MC43MjM2VjYwLjcyOTlINDAuMTE2MlY2MC43MjM2SDM4LjYxNjJaTTM4LjYxNjIgNjAuNzE3M1Y2MC43MjM2SDQwLjExNjJWNjAuNzE3M0gzOC42MTYyWk0zOC42MTYyIDYwLjcxMTFWNjAuNzE3M0g0MC4xMTYyVjYwLjcxMTFIMzguNjE2MlpNMzguNjE2MiA2MC43MDQ3VjYwLjcxMTFINDAuMTE2MlY2MC43MDQ3SDM4LjYxNjJaTTM4LjYxNjIgNjAuNjk4NFY2MC43MDQ3SDQwLjExNjJWNjAuNjk4NEgzOC42MTYyWk0zOC42MTYyIDYwLjY5MjFWNjAuNjk4NEg0MC4xMTYyVjYwLjY5MjFIMzguNjE2MlpNMzguNjE2MiA2MC42ODU4VjYwLjY5MjFINDAuMTE2MlY2MC42ODU4SDM4LjYxNjJaTTM4LjYxNjIgNjAuNjc5NFY2MC42ODU4SDQwLjExNjJWNjAuNjc5NEgzOC42MTYyWk0zOC42MTYyIDYwLjY3MzFWNjAuNjc5NEg0MC4xMTYyVjYwLjY3MzFIMzguNjE2MlpNMzguNjE2MiA2MC42NjY3VjYwLjY3MzFINDAuMTE2MlY2MC42NjY3SDM4LjYxNjJaTTM4LjYxNjIgNjAuNjYwNFY2MC42NjY3SDQwLjExNjJWNjAuNjYwNEgzOC42MTYyWk0zOC42MTYyIDYwLjY1NFY2MC42NjA0SDQwLjExNjJWNjAuNjU0SDM4LjYxNjJaTTM4LjYxNjIgNjAuNjQ3NlY2MC42NTRINDAuMTE2MlY2MC42NDc2SDM4LjYxNjJaTTM4LjYxNjIgNjAuNjQxM1Y2MC42NDc2SDQwLjExNjJWNjAuNjQxM0gzOC42MTYyWk0zOC42MTYyIDYwLjYzNDlWNjAuNjQxM0g0MC4xMTYyVjYwLjYzNDlIMzguNjE2MlpNMzguNjE2MiA2MC42Mjg1VjYwLjYzNDlINDAuMTE2MlY2MC42Mjg1SDM4LjYxNjJaTTM4LjYxNjIgNjAuNjIyVjYwLjYyODVINDAuMTE2MlY2MC42MjJIMzguNjE2MlpNMzguNjE2MiA2MC42MTU2VjYwLjYyMkg0MC4xMTYyVjYwLjYxNTZIMzguNjE2MlpNMzguNjE2MiA2MC42MDkyVjYwLjYxNTZINDAuMTE2MlY2MC42MDkySDM4LjYxNjJaTTM4LjYxNjIgNjAuNjAyOFY2MC42MDkySDQwLjExNjJWNjAuNjAyOEgzOC42MTYyWk0zOC42MTYyIDYwLjU5NjNWNjAuNjAyOEg0MC4xMTYyVjYwLjU5NjNIMzguNjE2MlpNMzguNjE2MiA2MC41ODk5VjYwLjU5NjNINDAuMTE2MlY2MC41ODk5SDM4LjYxNjJaTTM4LjYxNjIgNjAuNTgzNFY2MC41ODk5SDQwLjExNjJWNjAuNTgzNEgzOC42MTYyWk0zOC42MTYyIDYwLjU3N1Y2MC41ODM0SDQwLjExNjJWNjAuNTc3SDM4LjYxNjJaTTM4LjYxNjIgNjAuNTcwNVY2MC41NzdINDAuMTE2MlY2MC41NzA1SDM4LjYxNjJaTTM4LjYxNjIgNjAuNTY0VjYwLjU3MDVINDAuMTE2MlY2MC41NjRIMzguNjE2MlpNMzguNjE2MiA2MC41NTc1VjYwLjU2NEg0MC4xMTYyVjYwLjU1NzVIMzguNjE2MlpNMzguNjE2MiA2MC41NTFWNjAuNTU3NUg0MC4xMTYyVjYwLjU1MUgzOC42MTYyWk0zOC42MTYyIDYwLjU0NDVWNjAuNTUxSDQwLjExNjJWNjAuNTQ0NUgzOC42MTYyWk0zOC42MTYyIDYwLjUzOFY2MC41NDQ1SDQwLjExNjJWNjAuNTM4SDM4LjYxNjJaTTM4LjYxNjIgNjAuNTMxNVY2MC41MzhINDAuMTE2MlY2MC41MzE1SDM4LjYxNjJaTTM4LjYxNjIgNjAuNTI0OVY2MC41MzE1SDQwLjExNjJWNjAuNTI0OUgzOC42MTYyWk0zOC42MTYyIDYwLjUxODRWNjAuNTI0OUg0MC4xMTYyVjYwLjUxODRIMzguNjE2MlpNMzguNjE2MiA2MC41MTE5VjYwLjUxODRINDAuMTE2MlY2MC41MTE5SDM4LjYxNjJaTTM4LjYxNjIgNjAuNTA1M1Y2MC41MTE5SDQwLjExNjJWNjAuNTA1M0gzOC42MTYyWk0zOC42MTYyIDYwLjQ5ODdWNjAuNTA1M0g0MC4xMTYyVjYwLjQ5ODdIMzguNjE2MlpNMzguNjE2MiA2MC40OTIyVjYwLjQ5ODdINDAuMTE2MlY2MC40OTIySDM4LjYxNjJaTTM4LjYxNjIgNjAuNDg1NlY2MC40OTIySDQwLjExNjJWNjAuNDg1NkgzOC42MTYyWk0zOC42MTYyIDYwLjQ3OVY2MC40ODU2SDQwLjExNjJWNjAuNDc5SDM4LjYxNjJaTTM4LjYxNjIgNjAuNDcyNFY2MC40NzlINDAuMTE2MlY2MC40NzI0SDM4LjYxNjJaTTM4LjYxNjIgNjAuNDY1OFY2MC40NzI0SDQwLjExNjJWNjAuNDY1OEgzOC42MTYyWk0zOC42MTYyIDYwLjQ1OTJWNjAuNDY1OEg0MC4xMTYyVjYwLjQ1OTJIMzguNjE2MlpNMzguNjE2MiA2MC40NTI2VjYwLjQ1OTJINDAuMTE2MlY2MC40NTI2SDM4LjYxNjJaTTM4LjYxNjIgNjAuNDQ2VjYwLjQ1MjZINDAuMTE2MlY2MC40NDZIMzguNjE2MlpNMzguNjE2MiA2MC40MzkzVjYwLjQ0Nkg0MC4xMTYyVjYwLjQzOTNIMzguNjE2MlpNMzguNjE2MiA2MC40MzI3VjYwLjQzOTNINDAuMTE2MlY2MC40MzI3SDM4LjYxNjJaTTM4LjYxNjIgNjAuNDI2VjYwLjQzMjdINDAuMTE2MlY2MC40MjZIMzguNjE2MlpNMzguNjE2MiA2MC40MTk0VjYwLjQyNkg0MC4xMTYyVjYwLjQxOTRIMzguNjE2MlpNMzguNjE2MiA2MC40MTI3VjYwLjQxOTRINDAuMTE2MlY2MC40MTI3SDM4LjYxNjJaTTM4LjYxNjIgNjAuNDA2VjYwLjQxMjdINDAuMTE2MlY2MC40MDZIMzguNjE2MlpNMzguNjE2MiA2MC4zOTk0VjYwLjQwNkg0MC4xMTYyVjYwLjM5OTRIMzguNjE2MlpNMzguNjE2MiA2MC4zOTI3VjYwLjM5OTRINDAuMTE2MlY2MC4zOTI3SDM4LjYxNjJaTTM4LjYxNjIgNjAuMzg2VjYwLjM5MjdINDAuMTE2MlY2MC4zODZIMzguNjE2MlpNMzguNjE2MiA2MC4zNzkzVjYwLjM4Nkg0MC4xMTYyVjYwLjM3OTNIMzguNjE2MlpNMzguNjE2MiA2MC4zNzI2VjYwLjM3OTNINDAuMTE2MlY2MC4zNzI2SDM4LjYxNjJaTTM4LjYxNjIgNjAuMzY1OFY2MC4zNzI2SDQwLjExNjJWNjAuMzY1OEgzOC42MTYyWk0zOC42MTYyIDYwLjM1OTFWNjAuMzY1OEg0MC4xMTYyVjYwLjM1OTFIMzguNjE2MlpNMzguNjE2MiA2MC4zNTI0VjYwLjM1OTFINDAuMTE2MlY2MC4zNTI0SDM4LjYxNjJaTTM4LjYxNjIgNjAuMzQ1NlY2MC4zNTI0SDQwLjExNjJWNjAuMzQ1NkgzOC42MTYyWk0zOC42MTYyIDYwLjMzODlWNjAuMzQ1Nkg0MC4xMTYyVjYwLjMzODlIMzguNjE2MlpNMzguNjE2MiA2MC4zMzIxVjYwLjMzODlINDAuMTE2MlY2MC4zMzIxSDM4LjYxNjJaTTM4LjYxNjIgNjAuMzI1M1Y2MC4zMzIxSDQwLjExNjJWNjAuMzI1M0gzOC42MTYyWk0zOC42MTYyIDYwLjMxODZWNjAuMzI1M0g0MC4xMTYyVjYwLjMxODZIMzguNjE2MlpNMzguNjE2MiA2MC4zMTE4VjYwLjMxODZINDAuMTE2MlY2MC4zMTE4SDM4LjYxNjJaTTM4LjYxNjIgNjAuMzA1VjYwLjMxMThINDAuMTE2MlY2MC4zMDVIMzguNjE2MlpNMzguNjE2MiA2MC4yOTgyVjYwLjMwNUg0MC4xMTYyVjYwLjI5ODJIMzguNjE2MlpNMzguNjE2MiA2MC4yOTE0VjYwLjI5ODJINDAuMTE2MlY2MC4yOTE0SDM4LjYxNjJaTTM4LjYxNjIgNjAuMjg0NlY2MC4yOTE0SDQwLjExNjJWNjAuMjg0NkgzOC42MTYyWk0zOC42MTYyIDYwLjI3NzdWNjAuMjg0Nkg0MC4xMTYyVjYwLjI3NzdIMzguNjE2MlpNMzguNjE2MiA2MC4yNzA5VjYwLjI3NzdINDAuMTE2MlY2MC4yNzA5SDM4LjYxNjJaTTM4LjYxNjIgNjAuMjY0MVY2MC4yNzA5SDQwLjExNjJWNjAuMjY0MUgzOC42MTYyWk0zOC42MTYyIDYwLjI1NzJWNjAuMjY0MUg0MC4xMTYyVjYwLjI1NzJIMzguNjE2MlpNMzguNjE2MiA2MC4yNTA0VjYwLjI1NzJINDAuMTE2MlY2MC4yNTA0SDM4LjYxNjJaTTM4LjYxNjIgNjAuMjQzNVY2MC4yNTA0SDQwLjExNjJWNjAuMjQzNUgzOC42MTYyWk0zOC42MTYyIDYwLjIzNjZWNjAuMjQzNUg0MC4xMTYyVjYwLjIzNjZIMzguNjE2MlpNMzguNjE2MiA2MC4yMjk3VjYwLjIzNjZINDAuMTE2MlY2MC4yMjk3SDM4LjYxNjJaTTM4LjYxNjIgNjAuMjIyOFY2MC4yMjk3SDQwLjExNjJWNjAuMjIyOEgzOC42MTYyWk0zOC42MTYyIDYwLjIxNTlWNjAuMjIyOEg0MC4xMTYyVjYwLjIxNTlIMzguNjE2MlpNMzguNjE2MiA2MC4yMDlWNjAuMjE1OUg0MC4xMTYyVjYwLjIwOUgzOC42MTYyWk0zOC42MTYyIDYwLjIwMjFWNjAuMjA5SDQwLjExNjJWNjAuMjAyMUgzOC42MTYyWk0zOC42MTYyIDYwLjE5NTJWNjAuMjAyMUg0MC4xMTYyVjYwLjE5NTJIMzguNjE2MlpNMzguNjE2MiA2MC4xODgzVjYwLjE5NTJINDAuMTE2MlY2MC4xODgzSDM4LjYxNjJaTTM4LjYxNjIgNjAuMTgxM1Y2MC4xODgzSDQwLjExNjJWNjAuMTgxM0gzOC42MTYyWk0zOC42MTYyIDYwLjE3NDRWNjAuMTgxM0g0MC4xMTYyVjYwLjE3NDRIMzguNjE2MlpNMzguNjE2MiA2MC4xNjc0VjYwLjE3NDRINDAuMTE2MlY2MC4xNjc0SDM4LjYxNjJaTTM4LjYxNjIgNjAuMTYwNVY2MC4xNjc0SDQwLjExNjJWNjAuMTYwNUgzOC42MTYyWk0zOC42MTYyIDYwLjE1MzVWNjAuMTYwNUg0MC4xMTYyVjYwLjE1MzVIMzguNjE2MlpNMzguNjE2MiA2MC4xNDY1VjYwLjE1MzVINDAuMTE2MlY2MC4xNDY1SDM4LjYxNjJaTTM4LjYxNjIgNjAuMTM5NlY2MC4xNDY1SDQwLjExNjJWNjAuMTM5NkgzOC42MTYyWk0zOC42MTYyIDYwLjEzMjZWNjAuMTM5Nkg0MC4xMTYyVjYwLjEzMjZIMzguNjE2MlpNMzguNjE2MiA2MC4xMjU2VjYwLjEzMjZINDAuMTE2MlY2MC4xMjU2SDM4LjYxNjJaTTM4LjYxNjIgNjAuMTE4NVY2MC4xMjU2SDQwLjExNjJWNjAuMTE4NUgzOC42MTYyWk0zOC42MTYyIDYwLjExMTVWNjAuMTE4NUg0MC4xMTYyVjYwLjExMTVIMzguNjE2MlpNMzguNjE2MiA2MC4xMDQ1VjYwLjExMTVINDAuMTE2MlY2MC4xMDQ1SDM4LjYxNjJaTTM4LjYxNjIgNjAuMDk3NVY2MC4xMDQ1SDQwLjExNjJWNjAuMDk3NUgzOC42MTYyWk0zOC42MTYyIDYwLjA5MDRWNjAuMDk3NUg0MC4xMTYyVjYwLjA5MDRIMzguNjE2MlpNMzguNjE2MiA2MC4wODM0VjYwLjA5MDRINDAuMTE2MlY2MC4wODM0SDM4LjYxNjJaTTM4LjYxNjIgNjAuMDc2M1Y2MC4wODM0SDQwLjExNjJWNjAuMDc2M0gzOC42MTYyWk0zOC42MTYyIDYwLjA2OTNWNjAuMDc2M0g0MC4xMTYyVjYwLjA2OTNIMzguNjE2MlpNMzguNjE2MiA2MC4wNjIyVjYwLjA2OTNINDAuMTE2MlY2MC4wNjIySDM4LjYxNjJaTTM4LjYxNjIgNjAuMDU1MVY2MC4wNjIySDQwLjExNjJWNjAuMDU1MUgzOC42MTYyWk0zOC42MTYyIDYwLjA0OFY2MC4wNTUxSDQwLjExNjJWNjAuMDQ4SDM4LjYxNjJaTTM4LjYxNjIgNjAuMDQwOVY2MC4wNDhINDAuMTE2MlY2MC4wNDA5SDM4LjYxNjJaTTM4LjYxNjIgNjAuMDMzOFY2MC4wNDA5SDQwLjExNjJWNjAuMDMzOEgzOC42MTYyWk0zOC42MTYyIDYwLjAyNjdWNjAuMDMzOEg0MC4xMTYyVjYwLjAyNjdIMzguNjE2MlpNMzguNjE2MiA2MC4wMTk2VjYwLjAyNjdINDAuMTE2MlY2MC4wMTk2SDM4LjYxNjJaTTM4LjYxNjIgNjAuMDEyNFY2MC4wMTk2SDQwLjExNjJWNjAuMDEyNEgzOC42MTYyWk0zOC42MTYyIDYwLjAwNTNWNjAuMDEyNEg0MC4xMTYyVjYwLjAwNTNIMzguNjE2MlpNMzguNjE2MiA1OS45OTgyVjYwLjAwNTNINDAuMTE2MlY1OS45OTgySDM4LjYxNjJaTTM4LjYxNjIgNTkuOTkxVjU5Ljk5ODJINDAuMTE2MlY1OS45OTFIMzguNjE2MlpNMzguNjE2MiA1OS45ODM5VjU5Ljk5MUg0MC4xMTYyVjU5Ljk4MzlIMzguNjE2MlpNMzguNjE2MiA1OS45NzY3VjU5Ljk4MzlINDAuMTE2MlY1OS45NzY3SDM4LjYxNjJaTTM4LjYxNjIgNTkuOTY5NVY1OS45NzY3SDQwLjExNjJWNTkuOTY5NUgzOC42MTYyWk0zOC42MTYyIDU5Ljk2MjNWNTkuOTY5NUg0MC4xMTYyVjU5Ljk2MjNIMzguNjE2MlpNMzguNjE2MiA1OS45NTUxVjU5Ljk2MjNINDAuMTE2MlY1OS45NTUxSDM4LjYxNjJaTTM4LjYxNjIgNTkuOTQ3OVY1OS45NTUxSDQwLjExNjJWNTkuOTQ3OUgzOC42MTYyWk0zOC42MTYyIDU5Ljk0MDdWNTkuOTQ3OUg0MC4xMTYyVjU5Ljk0MDdIMzguNjE2MlpNMzguNjE2MiA1OS45MzM1VjU5Ljk0MDdINDAuMTE2MlY1OS45MzM1SDM4LjYxNjJaTTM4LjYxNjIgNTkuOTI2M1Y1OS45MzM1SDQwLjExNjJWNTkuOTI2M0gzOC42MTYyWk0zOC42MTYyIDU5LjkxOVY1OS45MjYzSDQwLjExNjJWNTkuOTE5SDM4LjYxNjJaTTM4LjYxNjIgNTkuOTExOFY1OS45MTlINDAuMTE2MlY1OS45MTE4SDM4LjYxNjJaTTM4LjYxNjIgNTkuOTA0NlY1OS45MTE4SDQwLjExNjJWNTkuOTA0NkgzOC42MTYyWk0zOC42MTYyIDU5Ljg5NzNWNTkuOTA0Nkg0MC4xMTYyVjU5Ljg5NzNIMzguNjE2MlpNMzguNjE2MiA1OS44OVY1OS44OTczSDQwLjExNjJWNTkuODlIMzguNjE2MlpNMzguNjE2MiA1OS44ODI4VjU5Ljg5SDQwLjExNjJWNTkuODgyOEgzOC42MTYyWk0zOC42MTYyIDU5Ljg3NTVWNTkuODgyOEg0MC4xMTYyVjU5Ljg3NTVIMzguNjE2MlpNMzguNjE2MiA1OS44NjgyVjU5Ljg3NTVINDAuMTE2MlY1OS44NjgySDM4LjYxNjJaTTM4LjYxNjIgNTkuODYwOVY1OS44NjgySDQwLjExNjJWNTkuODYwOUgzOC42MTYyWk0zOC42MTYyIDU5Ljg1MzZWNTkuODYwOUg0MC4xMTYyVjU5Ljg1MzZIMzguNjE2MlpNMzguNjE2MiA1OS44NDYzVjU5Ljg1MzZINDAuMTE2MlY1OS44NDYzSDM4LjYxNjJaTTM4LjYxNjIgNTkuODM5VjU5Ljg0NjNINDAuMTE2MlY1OS44MzlIMzguNjE2MlpNMzguNjE2MiA1OS44MzE2VjU5LjgzOUg0MC4xMTYyVjU5LjgzMTZIMzguNjE2MlpNMzguNjE2MiA1OS44MjQzVjU5LjgzMTZINDAuMTE2MlY1OS44MjQzSDM4LjYxNjJaTTM4LjYxNjIgNTkuODE2OVY1OS44MjQzSDQwLjExNjJWNTkuODE2OUgzOC42MTYyWk0zOC42MTYyIDU5LjgwOTZWNTkuODE2OUg0MC4xMTYyVjU5LjgwOTZIMzguNjE2MlpNMzguNjE2MiA1OS44MDIyVjU5LjgwOTZINDAuMTE2MlY1OS44MDIySDM4LjYxNjJaTTM4LjYxNjIgNTkuNzk0OVY1OS44MDIySDQwLjExNjJWNTkuNzk0OUgzOC42MTYyWk0zOC42MTYyIDU5Ljc4NzVWNTkuNzk0OUg0MC4xMTYyVjU5Ljc4NzVIMzguNjE2MlpNMzguNjE2MiA1OS43ODAxVjU5Ljc4NzVINDAuMTE2MlY1OS43ODAxSDM4LjYxNjJaTTM4LjYxNjIgNTkuNzcyN1Y1OS43ODAxSDQwLjExNjJWNTkuNzcyN0gzOC42MTYyWk0zOC42MTYyIDU5Ljc2NTNWNTkuNzcyN0g0MC4xMTYyVjU5Ljc2NTNIMzguNjE2MlpNMzguNjE2MiA1OS43NTc5VjU5Ljc2NTNINDAuMTE2MlY1OS43NTc5SDM4LjYxNjJaTTM4LjYxNjIgNTkuNzUwNVY1OS43NTc5SDQwLjExNjJWNTkuNzUwNUgzOC42MTYyWk0zOC42MTYyIDU5Ljc0M1Y1OS43NTA1SDQwLjExNjJWNTkuNzQzSDM4LjYxNjJaTTM4LjYxNjIgNTkuNzM1NlY1OS43NDNINDAuMTE2MlY1OS43MzU2SDM4LjYxNjJaTTM4LjYxNjIgNTkuNzI4MlY1OS43MzU2SDQwLjExNjJWNTkuNzI4MkgzOC42MTYyWk0zOC42MTYyIDU5LjcyMDdWNTkuNzI4Mkg0MC4xMTYyVjU5LjcyMDdIMzguNjE2MlpNMzguNjE2MiA1OS43MTMzVjU5LjcyMDdINDAuMTE2MlY1OS43MTMzSDM4LjYxNjJaTTM4LjYxNjIgNTkuNzA1OFY1OS43MTMzSDQwLjExNjJWNTkuNzA1OEgzOC42MTYyWk0zOC42MTYyIDU5LjY5ODNWNTkuNzA1OEg0MC4xMTYyVjU5LjY5ODNIMzguNjE2MlpNMzguNjE2MiA1OS42OTA4VjU5LjY5ODNINDAuMTE2MlY1OS42OTA4SDM4LjYxNjJaTTM4LjYxNjIgNTkuNjgzNFY1OS42OTA4SDQwLjExNjJWNTkuNjgzNEgzOC42MTYyWk0zOC42MTYyIDU5LjY3NTlWNTkuNjgzNEg0MC4xMTYyVjU5LjY3NTlIMzguNjE2MlpNMzguNjE2MiA1OS42Njg0VjU5LjY3NTlINDAuMTE2MlY1OS42Njg0SDM4LjYxNjJaTTM4LjYxNjIgNTkuNjYwOFY1OS42Njg0SDQwLjExNjJWNTkuNjYwOEgzOC42MTYyWk0zOC42MTYyIDU5LjY1MzNWNTkuNjYwOEg0MC4xMTYyVjU5LjY1MzNIMzguNjE2MlpNMzguNjE2MiA1OS42NDU4VjU5LjY1MzNINDAuMTE2MlY1OS42NDU4SDM4LjYxNjJaTTM4LjYxNjIgNTkuNjM4M1Y1OS42NDU4SDQwLjExNjJWNTkuNjM4M0gzOC42MTYyWk0zOC42MTYyIDU5LjYzMDdWNTkuNjM4M0g0MC4xMTYyVjU5LjYzMDdIMzguNjE2MlpNMzguNjE2MiA1OS42MjMyVjU5LjYzMDdINDAuMTE2MlY1OS42MjMySDM4LjYxNjJaTTM4LjYxNjIgNTkuNjE1NlY1OS42MjMySDQwLjExNjJWNTkuNjE1NkgzOC42MTYyWk0zOC42MTYyIDU5LjYwOFY1OS42MTU2SDQwLjExNjJWNTkuNjA4SDM4LjYxNjJaTTM4LjYxNjIgNTkuNjAwNVY1OS42MDhINDAuMTE2MlY1OS42MDA1SDM4LjYxNjJaTTM4LjYxNjIgNTkuNTkyOVY1OS42MDA1SDQwLjExNjJWNTkuNTkyOUgzOC42MTYyWk0zOC42MTYyIDU5LjU4NTNWNTkuNTkyOUg0MC4xMTYyVjU5LjU4NTNIMzguNjE2MlpNMzguNjE2MiA1OS41Nzc3VjU5LjU4NTNINDAuMTE2MlY1OS41Nzc3SDM4LjYxNjJaTTM4LjYxNjIgNTkuNTcwMVY1OS41Nzc3SDQwLjExNjJWNTkuNTcwMUgzOC42MTYyWk0zOC42MTYyIDU5LjU2MjRWNTkuNTcwMUg0MC4xMTYyVjU5LjU2MjRIMzguNjE2MlpNMzguNjE2MiA1OS41NTQ4VjU5LjU2MjRINDAuMTE2MlY1OS41NTQ4SDM4LjYxNjJaTTM4LjYxNjIgNTkuNTQ3MlY1OS41NTQ4SDQwLjExNjJWNTkuNTQ3MkgzOC42MTYyWk0zOC42MTYyIDU5LjUzOTZWNTkuNTQ3Mkg0MC4xMTYyVjU5LjUzOTZIMzguNjE2MlpNMzguNjE2MiA1OS41MzE5VjU5LjUzOTZINDAuMTE2MlY1OS41MzE5SDM4LjYxNjJaTTM4LjYxNjIgNTkuNTI0MlY1OS41MzE5SDQwLjExNjJWNTkuNTI0MkgzOC42MTYyWk0zOC42MTYyIDU5LjUxNjZWNTkuNTI0Mkg0MC4xMTYyVjU5LjUxNjZIMzguNjE2MlpNMzguNjE2MiA1OS41MDg5VjU5LjUxNjZINDAuMTE2MlY1OS41MDg5SDM4LjYxNjJaTTM4LjYxNjIgNTkuNTAxMlY1OS41MDg5SDQwLjExNjJWNTkuNTAxMkgzOC42MTYyWk0zOC42MTYyIDU5LjQ5MzVWNTkuNTAxMkg0MC4xMTYyVjU5LjQ5MzVIMzguNjE2MlpNMzguNjE2MiA1OS40ODU4VjU5LjQ5MzVINDAuMTE2MlY1OS40ODU4SDM4LjYxNjJaTTM4LjYxNjIgNTkuNDc4MVY1OS40ODU4SDQwLjExNjJWNTkuNDc4MUgzOC42MTYyWk0zOC42MTYyIDU5LjQ3MDRWNTkuNDc4MUg0MC4xMTYyVjU5LjQ3MDRIMzguNjE2MlpNMzguNjE2MiA1OS40NjI3VjU5LjQ3MDRINDAuMTE2MlY1OS40NjI3SDM4LjYxNjJaTTM4LjYxNjIgNTkuNDU1VjU5LjQ2MjdINDAuMTE2MlY1OS40NTVIMzguNjE2MlpNMzguNjE2MiA1OS40NDcyVjU5LjQ1NUg0MC4xMTYyVjU5LjQ0NzJIMzguNjE2MlpNMzguNjE2MiA1OS40Mzk1VjU5LjQ0NzJINDAuMTE2MlY1OS40Mzk1SDM4LjYxNjJaTTM4LjYxNjIgNTkuNDMxN1Y1OS40Mzk1SDQwLjExNjJWNTkuNDMxN0gzOC42MTYyWk0zOC42MTYyIDU5LjQyNFY1OS40MzE3SDQwLjExNjJWNTkuNDI0SDM4LjYxNjJaTTM4LjYxNjIgNTkuNDE2MlY1OS40MjRINDAuMTE2MlY1OS40MTYySDM4LjYxNjJaTTM4LjYxNjIgNTkuNDA4NFY1OS40MTYySDQwLjExNjJWNTkuNDA4NEgzOC42MTYyWk0zOC42MTYyIDU5LjQwMDZWNTkuNDA4NEg0MC4xMTYyVjU5LjQwMDZIMzguNjE2MlpNMzguNjE2MiA1OS4zOTI5VjU5LjQwMDZINDAuMTE2MlY1OS4zOTI5SDM4LjYxNjJaTTM4LjYxNjIgNTkuMzg1MVY1OS4zOTI5SDQwLjExNjJWNTkuMzg1MUgzOC42MTYyWk0zOC42MTYyIDU5LjM3NzJWNTkuMzg1MUg0MC4xMTYyVjU5LjM3NzJIMzguNjE2MlpNMzguNjE2MiA1OS4zNjk0VjU5LjM3NzJINDAuMTE2MlY1OS4zNjk0SDM4LjYxNjJaTTM4LjYxNjIgNTkuMzYxNlY1OS4zNjk0SDQwLjExNjJWNTkuMzYxNkgzOC42MTYyWk0zOC42MTYyIDU5LjM1MzhWNTkuMzYxNkg0MC4xMTYyVjU5LjM1MzhIMzguNjE2MlpNMzguNjE2MiA1OS4zNDU5VjU5LjM1MzhINDAuMTE2MlY1OS4zNDU5SDM4LjYxNjJaTTM4LjYxNjIgNTkuMzM4MVY1OS4zNDU5SDQwLjExNjJWNTkuMzM4MUgzOC42MTYyWk0zOC42MTYyIDU5LjMzMDJWNTkuMzM4MUg0MC4xMTYyVjU5LjMzMDJIMzguNjE2MlpNMzguNjE2MiA1OS4zMjI0VjU5LjMzMDJINDAuMTE2MlY1OS4zMjI0SDM4LjYxNjJaTTM4LjYxNjIgNTkuMzE0NVY1OS4zMjI0SDQwLjExNjJWNTkuMzE0NUgzOC42MTYyWk0zOC42MTYyIDU5LjMwNjZWNTkuMzE0NUg0MC4xMTYyVjU5LjMwNjZIMzguNjE2MlpNMzguNjE2MiA1OS4yOTg3VjU5LjMwNjZINDAuMTE2MlY1OS4yOTg3SDM4LjYxNjJaTTM4LjYxNjIgNTkuMjkwOFY1OS4yOTg3SDQwLjExNjJWNTkuMjkwOEgzOC42MTYyWk0zOC42MTYyIDU5LjI4MjlWNTkuMjkwOEg0MC4xMTYyVjU5LjI4MjlIMzguNjE2MlpNMzguNjE2MiA1OS4yNzVWNTkuMjgyOUg0MC4xMTYyVjU5LjI3NUgzOC42MTYyWk0zOC42MTYyIDU5LjI2NzFWNTkuMjc1SDQwLjExNjJWNTkuMjY3MUgzOC42MTYyWk0zOC42MTYyIDU5LjI1OTFWNTkuMjY3MUg0MC4xMTYyVjU5LjI1OTFIMzguNjE2MlpNMzguNjE2MiA1OS4yNTEyVjU5LjI1OTFINDAuMTE2MlY1OS4yNTEySDM4LjYxNjJaTTM4LjYxNjIgNTkuMjQzM1Y1OS4yNTEySDQwLjExNjJWNTkuMjQzM0gzOC42MTYyWk0zOC42MTYyIDU5LjIzNTNWNTkuMjQzM0g0MC4xMTYyVjU5LjIzNTNIMzguNjE2MlpNMzguNjE2MiA1OS4yMjc0VjU5LjIzNTNINDAuMTE2MlY1OS4yMjc0SDM4LjYxNjJaTTM4LjYxNjIgNTkuMjE5NFY1OS4yMjc0SDQwLjExNjJWNTkuMjE5NEgzOC42MTYyWk0zOC42MTYyIDU5LjIxMTRWNTkuMjE5NEg0MC4xMTYyVjU5LjIxMTRIMzguNjE2MlpNMzguNjE2MiA1OS4yMDM0VjU5LjIxMTRINDAuMTE2MlY1OS4yMDM0SDM4LjYxNjJaTTM4LjYxNjIgNTkuMTk1NFY1OS4yMDM0SDQwLjExNjJWNTkuMTk1NEgzOC42MTYyWk0zOC42MTYyIDU5LjE4NzRWNTkuMTk1NEg0MC4xMTYyVjU5LjE4NzRIMzguNjE2MlpNMzguNjE2MiA1OS4xNzk0VjU5LjE4NzRINDAuMTE2MlY1OS4xNzk0SDM4LjYxNjJaTTM4LjYxNjIgNTkuMTcxNFY1OS4xNzk0SDQwLjExNjJWNTkuMTcxNEgzOC42MTYyWk0zOC42MTYyIDU5LjE2MzRWNTkuMTcxNEg0MC4xMTYyVjU5LjE2MzRIMzguNjE2MlpNMzguNjE2MiA1OS4xNTUzVjU5LjE2MzRINDAuMTE2MlY1OS4xNTUzSDM4LjYxNjJaTTM4LjYxNjIgNTkuMTQ3M1Y1OS4xNTUzSDQwLjExNjJWNTkuMTQ3M0gzOC42MTYyWk0zOC42MTYyIDU5LjEzOTNWNTkuMTQ3M0g0MC4xMTYyVjU5LjEzOTNIMzguNjE2MlpNMzguNjE2MiA1OS4xMzEyVjU5LjEzOTNINDAuMTE2MlY1OS4xMzEySDM4LjYxNjJaTTM4LjYxNjIgNTkuMTIzMVY1OS4xMzEySDQwLjExNjJWNTkuMTIzMUgzOC42MTYyWk0zOC42MTYyIDU5LjExNTFWNTkuMTIzMUg0MC4xMTYyVjU5LjExNTFIMzguNjE2MlpNMzguNjE2MiA1OS4xMDdWNTkuMTE1MUg0MC4xMTYyVjU5LjEwN0gzOC42MTYyWk0zOC42MTYyIDU5LjA5ODlWNTkuMTA3SDQwLjExNjJWNTkuMDk4OUgzOC42MTYyWk0zOC42MTYyIDU5LjA5MDhWNTkuMDk4OUg0MC4xMTYyVjU5LjA5MDhIMzguNjE2MlpNMzguNjE2MiA1OS4wODI3VjU5LjA5MDhINDAuMTE2MlY1OS4wODI3SDM4LjYxNjJaTTM4LjYxNjIgNTkuMDc0NlY1OS4wODI3SDQwLjExNjJWNTkuMDc0NkgzOC42MTYyWk0zOC42MTYyIDU5LjA2NjVWNTkuMDc0Nkg0MC4xMTYyVjU5LjA2NjVIMzguNjE2MlpNMzguNjE2MiA1OS4wNTgzVjU5LjA2NjVINDAuMTE2MlY1OS4wNTgzSDM4LjYxNjJaTTM4LjYxNjIgNTkuMDUwMlY1OS4wNTgzSDQwLjExNjJWNTkuMDUwMkgzOC42MTYyWk0zOC42MTYyIDU5LjA0MlY1OS4wNTAySDQwLjExNjJWNTkuMDQySDM4LjYxNjJaTTM4LjYxNjIgNTkuMDMzOVY1OS4wNDJINDAuMTE2MlY1OS4wMzM5SDM4LjYxNjJaTTM4LjYxNjIgNTkuMDI1N1Y1OS4wMzM5SDQwLjExNjJWNTkuMDI1N0gzOC42MTYyWk0zOC42MTYyIDU5LjAxNzZWNTkuMDI1N0g0MC4xMTYyVjU5LjAxNzZIMzguNjE2MlpNMzguNjE2MiA1OS4wMDk0VjU5LjAxNzZINDAuMTE2MlY1OS4wMDk0SDM4LjYxNjJaTTM4LjYxNjIgNTkuMDAxMlY1OS4wMDk0SDQwLjExNjJWNTkuMDAxMkgzOC42MTYyWk00NS4zMDU0IDM5LjkzMTlDNDAuOTc1MyA0NS4zNDQ1IDM4LjYxNjIgNTIuMDY5NyAzOC42MTYyIDU5LjAwMTJINDAuMTE2MkM0MC4xMTYyIDUyLjQxMDMgNDIuMzU5MyA0Ni4wMTU2IDQ2LjQ3NjcgNDAuODY4OUw0NS4zMDU0IDM5LjkzMTlaTTQ3LjUzMDggNDAuNzUxOEw0Ni4zNTk1IDM5LjgxNDdMNDUuNDIyNSA0MC45ODZMNDYuNTkzOCA0MS45MjMxTDQ3LjUzMDggNDAuNzUxOFpcIixcbiAgZmlsbDogXCIjM0IzNTUyXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk01MC45NTkxIDEyNy4zNjNMNDkuMzU3NSAxMTYuMDE4SDU2LjMxNjlMNTQuNzE1MiAxMjcuMzYzQzU0LjU4MzEgMTI4LjI5OSA1My43ODIyIDEyOC45OTQgNTIuODM3MiAxMjguOTk0QzUxLjg5MjEgMTI4Ljk5NCA1MS4wOTEyIDEyOC4yOTkgNTAuOTU5MSAxMjcuMzYzWlwiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNDcuOTEyNCAxMTQuNDEyTDQ5LjA3OTMgMTA5Ljc0NEg1Ni41OTQyTDU3Ljc2MTEgMTE0LjQxMkM1Ny45NTgzIDExNS4yMDEgNTcuMzYxNiAxMTUuOTY1IDU2LjU0ODQgMTE1Ljk2NUg0OS4xMjVDNDguMzExOCAxMTUuOTY1IDQ3LjcxNTEgMTE1LjIwMSA0Ny45MTI0IDExNC40MTJaXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0zNy4xNTk5IDEwNS43MTlDNDEuMDkyOCA5NS43MDIzIDQ2Ljc3NjIgODYuNDY0NyA1My45NDQ2IDc4LjQzODNMNTkuODA4MSA3MS44NzI5VjEwOS42OTJIMzkuODY4MUMzNy44MTc3IDEwOS42OTIgMzYuNDEwNiAxMDcuNjI4IDM3LjE1OTkgMTA1LjcxOVpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTExNC44NCAxMDUuNzE5QzExMC45MDcgOTUuNzAyMyAxMDUuMjI0IDg2LjQ2NDcgOTguMDU1NCA3OC40MzgzTDkyLjE5MTkgNzEuODcyOVYxMDkuNjkySDExMi4xMzJDMTE0LjE4MiAxMDkuNjkyIDExNS41ODkgMTA3LjYyOCAxMTQuODQgMTA1LjcxOVpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk05NS4zNjIzIDg1LjY4MzJDOTUuMzYyMyA4My44NDY1IDk3LjYzMDUgODIuOTgxMSA5OC44NTQgODQuMzUxTDEwMC4wMjEgODUuNjU3M0MxMDMuNDE5IDg5LjQ2MjQgMTA2LjE0NCA5My44MTY4IDEwOC4wOCA5OC41MzMxTDEwOC4zNCA5OS4xNzg1TDExMC4yNTIgMTA0LjA0OUMxMTAuMzQgMTA0LjI3NCAxMTAuMzg1IDEwNC41MTMgMTEwLjM4NSAxMDQuNzU1QzExMC4zODUgMTA1Ljc3MiAxMDkuNTk4IDEwNi42MDYgMTA4LjU5OSAxMDYuNjhMMTA4LjQ1NSAxMDYuNjg1TDk3LjM2MjMgMTA2LjY4NUM5Ni4yNTc3IDEwNi42ODUgOTUuMzYyMyAxMDUuNzg5IDk1LjM2MjMgMTA0LjY4NVY4NS42ODMyWlwiLFxuICBmaWxsOiBcIiMzMDQwRDZcIixcbiAgZmlsbE9wYWNpdHk6IFwiMC4wNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNzAuNSA3OC41VjkwLjVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTcwLjUgOTUuMTUzOFY5OC44NDYyXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCJcbn0pKTtcbmV4cG9ydCBkZWZhdWx0IFJvY2tldE5ldzsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGNvbnN0IFNsYWNrID0gKHtcbiAgd2lkdGggPSA3MixcbiAgaGVpZ2h0ID0gNzJcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgd2lkdGg6IHdpZHRoLFxuICBoZWlnaHQ6IGhlaWdodCxcbiAgdmlld0JveDogXCI3MCA3MCAxNDAgMTQwXCIsXG4gIHZlcnNpb246IFwiMS4xXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgc3R5bGU6IHtcbiAgICBmaWxsOiAnI0UwMUU1QSdcbiAgfSxcbiAgZDogXCJNOTkuNCwxNTEuMmMwLDcuMS01LjgsMTIuOS0xMi45LDEyLjljLTcuMSwwLTEyLjktNS44LTEyLjktMTIuOWMwLTcuMSw1LjgtMTIuOSwxMi45LTEyLjloMTIuOVYxNTEuMnpcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIHN0eWxlOiB7XG4gICAgZmlsbDogJyNFMDFFNUEnXG4gIH0sXG4gIGQ6IFwiTTEwNS45LDE1MS4yYzAtNy4xLDUuOC0xMi45LDEyLjktMTIuOXMxMi45LDUuOCwxMi45LDEyLjl2MzIuM2MwLDcuMS01LjgsMTIuOS0xMi45LDEyLjlzLTEyLjktNS44LTEyLjktMTIuOVYxNTEuMnpcIlxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgc3R5bGU6IHtcbiAgICBmaWxsOiAnIzM2QzVGMCdcbiAgfSxcbiAgZDogXCJNMTE4LjgsOTkuNGMtNy4xLDAtMTIuOS01LjgtMTIuOS0xMi45YzAtNy4xLDUuOC0xMi45LDEyLjktMTIuOXMxMi45LDUuOCwxMi45LDEyLjl2MTIuOUgxMTguOHpcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIHN0eWxlOiB7XG4gICAgZmlsbDogJyMzNkM1RjAnXG4gIH0sXG4gIGQ6IFwiTTExOC44LDEwNS45YzcuMSwwLDEyLjksNS44LDEyLjksMTIuOXMtNS44LDEyLjktMTIuOSwxMi45SDg2LjVjLTcuMSwwLTEyLjktNS44LTEyLjktMTIuOXM1LjgtMTIuOSwxMi45LTEyLjlIMTE4Ljh6XCJcbn0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIHN0eWxlOiB7XG4gICAgZmlsbDogJyMyRUI2N0QnXG4gIH0sXG4gIGQ6IFwiTTE3MC42LDExOC44YzAtNy4xLDUuOC0xMi45LDEyLjktMTIuOWM3LjEsMCwxMi45LDUuOCwxMi45LDEyLjlzLTUuOCwxMi45LTEyLjksMTIuOWgtMTIuOVYxMTguOHpcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIHN0eWxlOiB7XG4gICAgZmlsbDogJyMyRUI2N0QnXG4gIH0sXG4gIGQ6IFwiTTE2NC4xLDExOC44YzAsNy4xLTUuOCwxMi45LTEyLjksMTIuOWMtNy4xLDAtMTIuOS01LjgtMTIuOS0xMi45Vjg2LjVjMC03LjEsNS44LTEyLjksMTIuOS0xMi45YzcuMSwwLDEyLjksNS44LDEyLjksMTIuOVYxMTguOHpcIlxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgc3R5bGU6IHtcbiAgICBmaWxsOiAnI0VDQjIyRSdcbiAgfSxcbiAgZDogXCJNMTUxLjIsMTcwLjZjNy4xLDAsMTIuOSw1LjgsMTIuOSwxMi45YzAsNy4xLTUuOCwxMi45LTEyLjksMTIuOWMtNy4xLDAtMTIuOS01LjgtMTIuOS0xMi45di0xMi45SDE1MS4yelwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgc3R5bGU6IHtcbiAgICBmaWxsOiAnI0VDQjIyRSdcbiAgfSxcbiAgZDogXCJNMTUxLjIsMTY0LjFjLTcuMSwwLTEyLjktNS44LTEyLjktMTIuOWMwLTcuMSw1LjgtMTIuOSwxMi45LTEyLjloMzIuM2M3LjEsMCwxMi45LDUuOCwxMi45LDEyLjljMCw3LjEtNS44LDEyLjktMTIuOSwxMi45SDE1MS4yelwiXG59KSkpKTtcbmV4cG9ydCBkZWZhdWx0IFNsYWNrOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgY29uc3QgVGFncyA9ICh7XG4gIHdpZHRoID0gMTUyLFxuICBoZWlnaHQgPSAxNTJcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgd2lkdGg6IHdpZHRoLFxuICBoZWlnaHQ6IGhlaWdodCxcbiAgdmlld0JveDogXCIwIDAgMTUyIDE1MlwiLFxuICBmaWxsOiBcIm5vbmVcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCI3NlwiLFxuICBjeTogXCI3NlwiLFxuICByOiBcIjc2XCIsXG4gIGZpbGw6IFwid2hpdGVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTMzLjA0NTEgNDguMDg1N0w4Mi44MDk2IDM0Ljc1MTNDODQuNTQzNCAzNC4yODY3IDg2LjMyNTUgMzUuMzE1NiA4Ni43OSAzNy4wNDk0TDEwMS44MzIgOTMuMTg4QzEwMi4xMDMgOTQuMTk4NiAxMDEuODcxIDk1LjI3NzcgMTAxLjIwOCA5Ni4wODc0TDgxLjExODEgMTIwLjYzOUM4MC4yMzQyIDEyMS43MTkgNzguNzU5MyAxMjIuMTE0IDc3LjQ1MzcgMTIxLjYyMUw0Ny43Nzk0IDExMC40MDRDNDYuODAwOCAxMTAuMDM0IDQ2LjA2MDEgMTA5LjIxNSA0NS43ODkzIDEwOC4yMDVMMzAuNzQ3IDUyLjA2NjFDMzAuMjgyNSA1MC4zMzIzIDMxLjMxMTQgNDguNTUwMiAzMy4wNDUxIDQ4LjA4NTdaXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMS41XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgZDogXCJNMzQuMTU1MyA1My4xMTg0QzMzLjg2OTUgNTIuMDUxNCAzNC41MDI2IDUwLjk1NDggMzUuNTY5NSA1MC42Njg5TDgyLjkwOTYgMzcuOTg0MkM4My45NzY1IDM3LjY5ODMgODUuMDczMiAzOC4zMzE0IDg1LjM1OTEgMzkuMzk4NEw5OS4zNjc5IDkxLjY4Qzk5LjUzNDUgOTIuMzAxOSA5OS4zOTE2IDkyLjk2NTkgOTguOTgzOCA5My40NjQyTDc5Ljg3MjQgMTE2LjgxOUM3OS4zMjg1IDExNy40ODQgNzguNDIwOCAxMTcuNzI3IDc3LjYxNzQgMTE3LjQyNEw0OS4zODg4IDEwNi43NTNDNDguNzg2NiAxMDYuNTI1IDQ4LjMzMDggMTA2LjAyMiA0OC4xNjQxIDEwNS40TDM0LjE1NTMgNTMuMTE4NFpcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMDVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiMTA2Ljc5MVwiLFxuICBjeTogXCIxMDIuNDI1XCIsXG4gIHI6IFwiMTQuNTYzNlwiLFxuICBmaWxsOiBcIiMzMDQwRDZcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTU0LjUyMjUgMzkuMjFIMTA2LjA0MkMxMDcuODM3IDM5LjIxIDEwOS4yOTIgNDAuNjY1IDEwOS4yOTIgNDIuNDZWMTAwLjU3OUMxMDkuMjkyIDEwMS42MjUgMTA4Ljc4OSAxMDIuNjA3IDEwNy45MzkgMTAzLjIxOEw4Mi4xNzkzIDEyMS43MzNDODEuMDQ1OSAxMjIuNTQ4IDc5LjUxOSAxMjIuNTQ4IDc4LjM4NTYgMTIxLjczM0w1Mi42MjU2IDEwMy4yMThDNTEuNzc2MSAxMDIuNjA3IDUxLjI3MjUgMTAxLjYyNSA1MS4yNzI1IDEwMC41NzlWNDIuNDZDNTEuMjcyNSA0MC42NjUgNTIuNzI3NSAzOS4yMSA1NC41MjI1IDM5LjIxWlwiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHN0cm9rZTogXCIjM0IzNTUyXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjEuNVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTA3LjA0MyAzNC4yMUgxMDYuMjkzVjM0Ljk2SDEwNy4wNDNWMzQuMjFaTTEwNy4wNDMgMzIuNzFWMzEuOTZIMTA2LjI5M1YzMi43MUgxMDcuMDQzWk0xMTUuNzkzIDUwLjYzNDdWNTEuMzg0N0gxMTYuNTQzVjUwLjYzNDdIMTE1Ljc5M1pNMTE0LjI5MyA1MC42MzQ3SDExMy41NDNWNTEuMzg0N0gxMTQuMjkzVjUwLjYzNDdaTTExNC4yOTMgNTUuMjAzMVY1NC40NTMxSDExMy41NDNWNTUuMjAzMUgxMTQuMjkzWk0xMTUuNzkzIDU1LjIwMzFIMTE2LjU0M1Y1NC40NTMxSDExNS43OTNWNTUuMjAzMVpNMTE1Ljc5MyA2Mi4wMDMzVjYyLjc1MzNIMTE2LjU0M1Y2Mi4wMDMzSDExNS43OTNaTTExNC4yOTMgNjIuMDAzM0gxMTMuNTQzVjYyLjc1MzNIMTE0LjI5M1Y2Mi4wMDMzWk0xMDcuMDQzIDM0Ljk2QzExMC42MzMgMzQuOTYgMTEzLjU0MyAzNy44NzAxIDExMy41NDMgNDEuNDZIMTE1LjA0M0MxMTUuMDQzIDM3LjA0MTcgMTExLjQ2MSAzMy40NiAxMDcuMDQzIDMzLjQ2VjM0Ljk2Wk0xMDYuMjkzIDMyLjcxVjM0LjIxSDEwNy43OTNWMzIuNzFIMTA2LjI5M1pNMTE2LjU0MyA0MS40NkMxMTYuNTQzIDM2LjIxMzMgMTEyLjI5IDMxLjk2IDEwNy4wNDMgMzEuOTZWMzMuNDZDMTExLjQ2MSAzMy40NiAxMTUuMDQzIDM3LjA0MTcgMTE1LjA0MyA0MS40NkgxMTYuNTQzWk0xMTYuNTQzIDQxLjQ4MzhWNDEuNDZIMTE1LjA0M1Y0MS40ODM4SDExNi41NDNaTTExNi41NDMgNDEuNTA3N1Y0MS40ODM4SDExNS4wNDNWNDEuNTA3N0gxMTYuNTQzWk0xMTYuNTQzIDQxLjUzMTVWNDEuNTA3N0gxMTUuMDQzVjQxLjUzMTVIMTE2LjU0M1pNMTE2LjU0MyA0MS41NTUzVjQxLjUzMTVIMTE1LjA0M1Y0MS41NTUzSDExNi41NDNaTTExNi41NDMgNDEuNTc5MVY0MS41NTUzSDExNS4wNDNWNDEuNTc5MUgxMTYuNTQzWk0xMTYuNTQzIDQxLjYwMjlWNDEuNTc5MUgxMTUuMDQzVjQxLjYwMjlIMTE2LjU0M1pNMTE2LjU0MyA0MS42MjY2VjQxLjYwMjlIMTE1LjA0M1Y0MS42MjY2SDExNi41NDNaTTExNi41NDMgNDEuNjUwNFY0MS42MjY2SDExNS4wNDNWNDEuNjUwNEgxMTYuNTQzWk0xMTYuNTQzIDQxLjY3NFY0MS42NTA0SDExNS4wNDNWNDEuNjc0SDExNi41NDNaTTExNi41NDMgNDEuNjk3N1Y0MS42NzRIMTE1LjA0M1Y0MS42OTc3SDExNi41NDNaTTExNi41NDMgNDEuNzIxNFY0MS42OTc3SDExNS4wNDNWNDEuNzIxNEgxMTYuNTQzWk0xMTYuNTQzIDQxLjc0NVY0MS43MjE0SDExNS4wNDNWNDEuNzQ1SDExNi41NDNaTTExNi41NDMgNDEuNzY4NlY0MS43NDVIMTE1LjA0M1Y0MS43Njg2SDExNi41NDNaTTExNi41NDMgNDEuNzkyMlY0MS43Njg2SDExNS4wNDNWNDEuNzkyMkgxMTYuNTQzWk0xMTYuNTQzIDQxLjgxNTdWNDEuNzkyMkgxMTUuMDQzVjQxLjgxNTdIMTE2LjU0M1pNMTE2LjU0MyA0MS44MzkzVjQxLjgxNTdIMTE1LjA0M1Y0MS44MzkzSDExNi41NDNaTTExNi41NDMgNDEuODYyOFY0MS44MzkzSDExNS4wNDNWNDEuODYyOEgxMTYuNTQzWk0xMTYuNTQzIDQxLjg4NjJWNDEuODYyOEgxMTUuMDQzVjQxLjg4NjJIMTE2LjU0M1pNMTE2LjU0MyA0MS45MDk3VjQxLjg4NjJIMTE1LjA0M1Y0MS45MDk3SDExNi41NDNaTTExNi41NDMgNDEuOTMzMVY0MS45MDk3SDExNS4wNDNWNDEuOTMzMUgxMTYuNTQzWk0xMTYuNTQzIDQxLjk1NjZWNDEuOTMzMUgxMTUuMDQzVjQxLjk1NjZIMTE2LjU0M1pNMTE2LjU0MyA0MS45OFY0MS45NTY2SDExNS4wNDNWNDEuOThIMTE2LjU0M1pNMTE2LjU0MyA0Mi4wMDMzVjQxLjk4SDExNS4wNDNWNDIuMDAzM0gxMTYuNTQzWk0xMTYuNTQzIDQyLjAyNjdWNDIuMDAzM0gxMTUuMDQzVjQyLjAyNjdIMTE2LjU0M1pNMTE2LjU0MyA0Mi4wNVY0Mi4wMjY3SDExNS4wNDNWNDIuMDVIMTE2LjU0M1pNMTE2LjU0MyA0Mi4wNzMzVjQyLjA1SDExNS4wNDNWNDIuMDczM0gxMTYuNTQzWk0xMTYuNTQzIDQyLjA5NjZWNDIuMDczM0gxMTUuMDQzVjQyLjA5NjZIMTE2LjU0M1pNMTE2LjU0MyA0Mi4xMTk4VjQyLjA5NjZIMTE1LjA0M1Y0Mi4xMTk4SDExNi41NDNaTTExNi41NDMgNDIuMTQzVjQyLjExOThIMTE1LjA0M1Y0Mi4xNDNIMTE2LjU0M1pNMTE2LjU0MyA0Mi4xNjYyVjQyLjE0M0gxMTUuMDQzVjQyLjE2NjJIMTE2LjU0M1pNMTE2LjU0MyA0Mi4xODk0VjQyLjE2NjJIMTE1LjA0M1Y0Mi4xODk0SDExNi41NDNaTTExNi41NDMgNDIuMjEyNlY0Mi4xODk0SDExNS4wNDNWNDIuMjEyNkgxMTYuNTQzWk0xMTYuNTQzIDQyLjIzNTdWNDIuMjEyNkgxMTUuMDQzVjQyLjIzNTdIMTE2LjU0M1pNMTE2LjU0MyA0Mi4yNTg4VjQyLjIzNTdIMTE1LjA0M1Y0Mi4yNTg4SDExNi41NDNaTTExNi41NDMgNDIuMjgxOVY0Mi4yNTg4SDExNS4wNDNWNDIuMjgxOUgxMTYuNTQzWk0xMTYuNTQzIDQyLjMwNVY0Mi4yODE5SDExNS4wNDNWNDIuMzA1SDExNi41NDNaTTExNi41NDMgNDIuMzI4VjQyLjMwNUgxMTUuMDQzVjQyLjMyOEgxMTYuNTQzWk0xMTYuNTQzIDQyLjM1MVY0Mi4zMjhIMTE1LjA0M1Y0Mi4zNTFIMTE2LjU0M1pNMTE2LjU0MyA0Mi4zNzRWNDIuMzUxSDExNS4wNDNWNDIuMzc0SDExNi41NDNaTTExNi41NDMgNDIuMzk3VjQyLjM3NEgxMTUuMDQzVjQyLjM5N0gxMTYuNTQzWk0xMTYuNTQzIDQyLjQxOTlWNDIuMzk3SDExNS4wNDNWNDIuNDE5OUgxMTYuNTQzWk0xMTYuNTQzIDQyLjQ0MjlWNDIuNDE5OUgxMTUuMDQzVjQyLjQ0MjlIMTE2LjU0M1pNMTE2LjU0MyA0Mi40NjU4VjQyLjQ0MjlIMTE1LjA0M1Y0Mi40NjU4SDExNi41NDNaTTExNi41NDMgNDIuNDg4N1Y0Mi40NjU4SDExNS4wNDNWNDIuNDg4N0gxMTYuNTQzWk0xMTYuNTQzIDQyLjUxMTVWNDIuNDg4N0gxMTUuMDQzVjQyLjUxMTVIMTE2LjU0M1pNMTE2LjU0MyA0Mi41MzQzVjQyLjUxMTVIMTE1LjA0M1Y0Mi41MzQzSDExNi41NDNaTTExNi41NDMgNDIuNTU3MVY0Mi41MzQzSDExNS4wNDNWNDIuNTU3MUgxMTYuNTQzWk0xMTYuNTQzIDQyLjU3OTlWNDIuNTU3MUgxMTUuMDQzVjQyLjU3OTlIMTE2LjU0M1pNMTE2LjU0MyA0Mi42MDI3VjQyLjU3OTlIMTE1LjA0M1Y0Mi42MDI3SDExNi41NDNaTTExNi41NDMgNDIuNjI1NFY0Mi42MDI3SDExNS4wNDNWNDIuNjI1NEgxMTYuNTQzWk0xMTYuNTQzIDQyLjY0ODFWNDIuNjI1NEgxMTUuMDQzVjQyLjY0ODFIMTE2LjU0M1pNMTE2LjU0MyA0Mi42NzA4VjQyLjY0ODFIMTE1LjA0M1Y0Mi42NzA4SDExNi41NDNaTTExNi41NDMgNDIuNjkzNVY0Mi42NzA4SDExNS4wNDNWNDIuNjkzNUgxMTYuNTQzWk0xMTYuNTQzIDQyLjcxNjFWNDIuNjkzNUgxMTUuMDQzVjQyLjcxNjFIMTE2LjU0M1pNMTE2LjU0MyA0Mi43Mzg4VjQyLjcxNjFIMTE1LjA0M1Y0Mi43Mzg4SDExNi41NDNaTTExNi41NDMgNDIuNzYxNFY0Mi43Mzg4SDExNS4wNDNWNDIuNzYxNEgxMTYuNTQzWk0xMTYuNTQzIDQyLjc4MzlWNDIuNzYxNEgxMTUuMDQzVjQyLjc4MzlIMTE2LjU0M1pNMTE2LjU0MyA0Mi44MDY1VjQyLjc4MzlIMTE1LjA0M1Y0Mi44MDY1SDExNi41NDNaTTExNi41NDMgNDIuODI5VjQyLjgwNjVIMTE1LjA0M1Y0Mi44MjlIMTE2LjU0M1pNMTE2LjU0MyA0Mi44NTE1VjQyLjgyOUgxMTUuMDQzVjQyLjg1MTVIMTE2LjU0M1pNMTE2LjU0MyA0Mi44NzRWNDIuODUxNUgxMTUuMDQzVjQyLjg3NEgxMTYuNTQzWk0xMTYuNTQzIDQyLjg5NjVWNDIuODc0SDExNS4wNDNWNDIuODk2NUgxMTYuNTQzWk0xMTYuNTQzIDQyLjkxODlWNDIuODk2NUgxMTUuMDQzVjQyLjkxODlIMTE2LjU0M1pNMTE2LjU0MyA0Mi45NDEzVjQyLjkxODlIMTE1LjA0M1Y0Mi45NDEzSDExNi41NDNaTTExNi41NDMgNDIuOTYzN1Y0Mi45NDEzSDExNS4wNDNWNDIuOTYzN0gxMTYuNTQzWk0xMTYuNTQzIDQyLjk4NjFWNDIuOTYzN0gxMTUuMDQzVjQyLjk4NjFIMTE2LjU0M1pNMTE2LjU0MyA0My4wMDg0VjQyLjk4NjFIMTE1LjA0M1Y0My4wMDg0SDExNi41NDNaTTExNi41NDMgNDMuMDMwN1Y0My4wMDg0SDExNS4wNDNWNDMuMDMwN0gxMTYuNTQzWk0xMTYuNTQzIDQzLjA1M1Y0My4wMzA3SDExNS4wNDNWNDMuMDUzSDExNi41NDNaTTExNi41NDMgNDMuMDc1M1Y0My4wNTNIMTE1LjA0M1Y0My4wNzUzSDExNi41NDNaTTExNi41NDMgNDMuMDk3NVY0My4wNzUzSDExNS4wNDNWNDMuMDk3NUgxMTYuNTQzWk0xMTYuNTQzIDQzLjExOThWNDMuMDk3NUgxMTUuMDQzVjQzLjExOThIMTE2LjU0M1pNMTE2LjU0MyA0My4xNDJWNDMuMTE5OEgxMTUuMDQzVjQzLjE0MkgxMTYuNTQzWk0xMTYuNTQzIDQzLjE2NDFWNDMuMTQySDExNS4wNDNWNDMuMTY0MUgxMTYuNTQzWk0xMTYuNTQzIDQzLjE4NjNWNDMuMTY0MUgxMTUuMDQzVjQzLjE4NjNIMTE2LjU0M1pNMTE2LjU0MyA0My4yMDg0VjQzLjE4NjNIMTE1LjA0M1Y0My4yMDg0SDExNi41NDNaTTExNi41NDMgNDMuMjMwNVY0My4yMDg0SDExNS4wNDNWNDMuMjMwNUgxMTYuNTQzWk0xMTYuNTQzIDQzLjI1MjZWNDMuMjMwNUgxMTUuMDQzVjQzLjI1MjZIMTE2LjU0M1pNMTE2LjU0MyA0My4yNzQ3VjQzLjI1MjZIMTE1LjA0M1Y0My4yNzQ3SDExNi41NDNaTTExNi41NDMgNDMuMjk2N1Y0My4yNzQ3SDExNS4wNDNWNDMuMjk2N0gxMTYuNTQzWk0xMTYuNTQzIDQzLjMxODdWNDMuMjk2N0gxMTUuMDQzVjQzLjMxODdIMTE2LjU0M1pNMTE2LjU0MyA0My4zNDA3VjQzLjMxODdIMTE1LjA0M1Y0My4zNDA3SDExNi41NDNaTTExNi41NDMgNDMuMzYyN1Y0My4zNDA3SDExNS4wNDNWNDMuMzYyN0gxMTYuNTQzWk0xMTYuNTQzIDQzLjM4NDZWNDMuMzYyN0gxMTUuMDQzVjQzLjM4NDZIMTE2LjU0M1pNMTE2LjU0MyA0My40MDY1VjQzLjM4NDZIMTE1LjA0M1Y0My40MDY1SDExNi41NDNaTTExNi41NDMgNDMuNDI4NFY0My40MDY1SDExNS4wNDNWNDMuNDI4NEgxMTYuNTQzWk0xMTYuNTQzIDQzLjQ1MDNWNDMuNDI4NEgxMTUuMDQzVjQzLjQ1MDNIMTE2LjU0M1pNMTE2LjU0MyA0My40NzIyVjQzLjQ1MDNIMTE1LjA0M1Y0My40NzIySDExNi41NDNaTTExNi41NDMgNDMuNDk0VjQzLjQ3MjJIMTE1LjA0M1Y0My40OTRIMTE2LjU0M1pNMTE2LjU0MyA0My41MTU4VjQzLjQ5NEgxMTUuMDQzVjQzLjUxNThIMTE2LjU0M1pNMTE2LjU0MyA0My41Mzc2VjQzLjUxNThIMTE1LjA0M1Y0My41Mzc2SDExNi41NDNaTTExNi41NDMgNDMuNTU5M1Y0My41Mzc2SDExNS4wNDNWNDMuNTU5M0gxMTYuNTQzWk0xMTYuNTQzIDQzLjU4MTFWNDMuNTU5M0gxMTUuMDQzVjQzLjU4MTFIMTE2LjU0M1pNMTE2LjU0MyA0My42MDI4VjQzLjU4MTFIMTE1LjA0M1Y0My42MDI4SDExNi41NDNaTTExNi41NDMgNDMuNjI0NVY0My42MDI4SDExNS4wNDNWNDMuNjI0NUgxMTYuNTQzWk0xMTYuNTQzIDQzLjY0NjFWNDMuNjI0NUgxMTUuMDQzVjQzLjY0NjFIMTE2LjU0M1pNMTE2LjU0MyA0My42Njc4VjQzLjY0NjFIMTE1LjA0M1Y0My42Njc4SDExNi41NDNaTTExNi41NDMgNDMuNjg5NFY0My42Njc4SDExNS4wNDNWNDMuNjg5NEgxMTYuNTQzWk0xMTYuNTQzIDQzLjcxMVY0My42ODk0SDExNS4wNDNWNDMuNzExSDExNi41NDNaTTExNi41NDMgNDMuNzMyNlY0My43MTFIMTE1LjA0M1Y0My43MzI2SDExNi41NDNaTTExNi41NDMgNDMuNzU0MVY0My43MzI2SDExNS4wNDNWNDMuNzU0MUgxMTYuNTQzWk0xMTYuNTQzIDQzLjc3NTZWNDMuNzU0MUgxMTUuMDQzVjQzLjc3NTZIMTE2LjU0M1pNMTE2LjU0MyA0My43OTcxVjQzLjc3NTZIMTE1LjA0M1Y0My43OTcxSDExNi41NDNaTTExNi41NDMgNDMuODE4NlY0My43OTcxSDExNS4wNDNWNDMuODE4NkgxMTYuNTQzWk0xMTYuNTQzIDQzLjg0MDFWNDMuODE4NkgxMTUuMDQzVjQzLjg0MDFIMTE2LjU0M1pNMTE2LjU0MyA0My44NjE1VjQzLjg0MDFIMTE1LjA0M1Y0My44NjE1SDExNi41NDNaTTExNi41NDMgNDMuODgyOVY0My44NjE1SDExNS4wNDNWNDMuODgyOUgxMTYuNTQzWk0xMTYuNTQzIDQzLjkwNDNWNDMuODgyOUgxMTUuMDQzVjQzLjkwNDNIMTE2LjU0M1pNMTE2LjU0MyA0My45MjU3VjQzLjkwNDNIMTE1LjA0M1Y0My45MjU3SDExNi41NDNaTTExNi41NDMgNDMuOTQ3VjQzLjkyNTdIMTE1LjA0M1Y0My45NDdIMTE2LjU0M1pNMTE2LjU0MyA0My45NjgzVjQzLjk0N0gxMTUuMDQzVjQzLjk2ODNIMTE2LjU0M1pNMTE2LjU0MyA0My45ODk2VjQzLjk2ODNIMTE1LjA0M1Y0My45ODk2SDExNi41NDNaTTExNi41NDMgNDQuMDEwOVY0My45ODk2SDExNS4wNDNWNDQuMDEwOUgxMTYuNTQzWk0xMTYuNTQzIDQ0LjAzMjFWNDQuMDEwOUgxMTUuMDQzVjQ0LjAzMjFIMTE2LjU0M1pNMTE2LjU0MyA0NC4wNTMzVjQ0LjAzMjFIMTE1LjA0M1Y0NC4wNTMzSDExNi41NDNaTTExNi41NDMgNDQuMDc0NVY0NC4wNTMzSDExNS4wNDNWNDQuMDc0NUgxMTYuNTQzWk0xMTYuNTQzIDQ0LjA5NTdWNDQuMDc0NUgxMTUuMDQzVjQ0LjA5NTdIMTE2LjU0M1pNMTE2LjU0MyA0NC4xMTY5VjQ0LjA5NTdIMTE1LjA0M1Y0NC4xMTY5SDExNi41NDNaTTExNi41NDMgNDQuMTM4VjQ0LjExNjlIMTE1LjA0M1Y0NC4xMzhIMTE2LjU0M1pNMTE2LjU0MyA0NC4xNTkxVjQ0LjEzOEgxMTUuMDQzVjQ0LjE1OTFIMTE2LjU0M1pNMTE2LjU0MyA0NC4xODAyVjQ0LjE1OTFIMTE1LjA0M1Y0NC4xODAySDExNi41NDNaTTExNi41NDMgNDQuMjAxMlY0NC4xODAySDExNS4wNDNWNDQuMjAxMkgxMTYuNTQzWk0xMTYuNTQzIDQ0LjIyMjNWNDQuMjAxMkgxMTUuMDQzVjQ0LjIyMjNIMTE2LjU0M1pNMTE2LjU0MyA0NC4yNDMzVjQ0LjIyMjNIMTE1LjA0M1Y0NC4yNDMzSDExNi41NDNaTTExNi41NDMgNDQuMjY0M1Y0NC4yNDMzSDExNS4wNDNWNDQuMjY0M0gxMTYuNTQzWk0xMTYuNTQzIDQ0LjI4NTJWNDQuMjY0M0gxMTUuMDQzVjQ0LjI4NTJIMTE2LjU0M1pNMTE2LjU0MyA0NC4zMDYyVjQ0LjI4NTJIMTE1LjA0M1Y0NC4zMDYySDExNi41NDNaTTExNi41NDMgNDQuMzI3MVY0NC4zMDYySDExNS4wNDNWNDQuMzI3MUgxMTYuNTQzWk0xMTYuNTQzIDQ0LjM0OFY0NC4zMjcxSDExNS4wNDNWNDQuMzQ4SDExNi41NDNaTTExNi41NDMgNDQuMzY4OFY0NC4zNDhIMTE1LjA0M1Y0NC4zNjg4SDExNi41NDNaTTExNi41NDMgNDQuMzg5N1Y0NC4zNjg4SDExNS4wNDNWNDQuMzg5N0gxMTYuNTQzWk0xMTYuNTQzIDQ0LjQxMDVWNDQuMzg5N0gxMTUuMDQzVjQ0LjQxMDVIMTE2LjU0M1pNMTE2LjU0MyA0NC40MzEzVjQ0LjQxMDVIMTE1LjA0M1Y0NC40MzEzSDExNi41NDNaTTExNi41NDMgNDQuNDUyMVY0NC40MzEzSDExNS4wNDNWNDQuNDUyMUgxMTYuNTQzWk0xMTYuNTQzIDQ0LjQ3MjhWNDQuNDUyMUgxMTUuMDQzVjQ0LjQ3MjhIMTE2LjU0M1pNMTE2LjU0MyA0NC40OTM2VjQ0LjQ3MjhIMTE1LjA0M1Y0NC40OTM2SDExNi41NDNaTTExNi41NDMgNDQuNTE0M1Y0NC40OTM2SDExNS4wNDNWNDQuNTE0M0gxMTYuNTQzWk0xMTYuNTQzIDQ0LjUzNVY0NC41MTQzSDExNS4wNDNWNDQuNTM1SDExNi41NDNaTTExNi41NDMgNDQuNTU1NlY0NC41MzVIMTE1LjA0M1Y0NC41NTU2SDExNi41NDNaTTExNi41NDMgNDQuNTc2M1Y0NC41NTU2SDExNS4wNDNWNDQuNTc2M0gxMTYuNTQzWk0xMTYuNTQzIDQ0LjU5NjlWNDQuNTc2M0gxMTUuMDQzVjQ0LjU5NjlIMTE2LjU0M1pNMTE2LjU0MyA0NC42MTc1VjQ0LjU5NjlIMTE1LjA0M1Y0NC42MTc1SDExNi41NDNaTTExNi41NDMgNDQuNjM4VjQ0LjYxNzVIMTE1LjA0M1Y0NC42MzhIMTE2LjU0M1pNMTE2LjU0MyA0NC42NTg2VjQ0LjYzOEgxMTUuMDQzVjQ0LjY1ODZIMTE2LjU0M1pNMTE2LjU0MyA0NC42NzkxVjQ0LjY1ODZIMTE1LjA0M1Y0NC42NzkxSDExNi41NDNaTTExNi41NDMgNDQuNjk5NlY0NC42NzkxSDExNS4wNDNWNDQuNjk5NkgxMTYuNTQzWk0xMTYuNTQzIDQ0LjcyMDFWNDQuNjk5NkgxMTUuMDQzVjQ0LjcyMDFIMTE2LjU0M1pNMTE2LjU0MyA0NC43NDA1VjQ0LjcyMDFIMTE1LjA0M1Y0NC43NDA1SDExNi41NDNaTTExNi41NDMgNDQuNzYxVjQ0Ljc0MDVIMTE1LjA0M1Y0NC43NjFIMTE2LjU0M1pNMTE2LjU0MyA0NC43ODE0VjQ0Ljc2MUgxMTUuMDQzVjQ0Ljc4MTRIMTE2LjU0M1pNMTE2LjU0MyA0NC44MDE3VjQ0Ljc4MTRIMTE1LjA0M1Y0NC44MDE3SDExNi41NDNaTTExNi41NDMgNDQuODIyMVY0NC44MDE3SDExNS4wNDNWNDQuODIyMUgxMTYuNTQzWk0xMTYuNTQzIDQ0Ljg0MjRWNDQuODIyMUgxMTUuMDQzVjQ0Ljg0MjRIMTE2LjU0M1pNMTE2LjU0MyA0NC44NjI4VjQ0Ljg0MjRIMTE1LjA0M1Y0NC44NjI4SDExNi41NDNaTTExNi41NDMgNDQuODgzVjQ0Ljg2MjhIMTE1LjA0M1Y0NC44ODNIMTE2LjU0M1pNMTE2LjU0MyA0NC45MDMzVjQ0Ljg4M0gxMTUuMDQzVjQ0LjkwMzNIMTE2LjU0M1pNMTE2LjU0MyA0NC45MjM1VjQ0LjkwMzNIMTE1LjA0M1Y0NC45MjM1SDExNi41NDNaTTExNi41NDMgNDQuOTQzOFY0NC45MjM1SDExNS4wNDNWNDQuOTQzOEgxMTYuNTQzWk0xMTYuNTQzIDQ0Ljk2NFY0NC45NDM4SDExNS4wNDNWNDQuOTY0SDExNi41NDNaTTExNi41NDMgNDQuOTg0MVY0NC45NjRIMTE1LjA0M1Y0NC45ODQxSDExNi41NDNaTTExNi41NDMgNDUuMDA0M1Y0NC45ODQxSDExNS4wNDNWNDUuMDA0M0gxMTYuNTQzWk0xMTYuNTQzIDQ1LjAyNDRWNDUuMDA0M0gxMTUuMDQzVjQ1LjAyNDRIMTE2LjU0M1pNMTE2LjU0MyA0NS4wNDQ1VjQ1LjAyNDRIMTE1LjA0M1Y0NS4wNDQ1SDExNi41NDNaTTExNi41NDMgNDUuMDY0NlY0NS4wNDQ1SDExNS4wNDNWNDUuMDY0NkgxMTYuNTQzWk0xMTYuNTQzIDQ1LjA4NDZWNDUuMDY0NkgxMTUuMDQzVjQ1LjA4NDZIMTE2LjU0M1pNMTE2LjU0MyA0NS4xMDQ3VjQ1LjA4NDZIMTE1LjA0M1Y0NS4xMDQ3SDExNi41NDNaTTExNi41NDMgNDUuMTI0N1Y0NS4xMDQ3SDExNS4wNDNWNDUuMTI0N0gxMTYuNTQzWk0xMTYuNTQzIDQ1LjE0NDdWNDUuMTI0N0gxMTUuMDQzVjQ1LjE0NDdIMTE2LjU0M1pNMTE2LjU0MyA0NS4xNjQ2VjQ1LjE0NDdIMTE1LjA0M1Y0NS4xNjQ2SDExNi41NDNaTTExNi41NDMgNDUuMTg0NlY0NS4xNjQ2SDExNS4wNDNWNDUuMTg0NkgxMTYuNTQzWk0xMTYuNTQzIDQ1LjIwNDVWNDUuMTg0NkgxMTUuMDQzVjQ1LjIwNDVIMTE2LjU0M1pNMTE2LjU0MyA0NS4yMjQ0VjQ1LjIwNDVIMTE1LjA0M1Y0NS4yMjQ0SDExNi41NDNaTTExNi41NDMgNDUuMjQ0MlY0NS4yMjQ0SDExNS4wNDNWNDUuMjQ0MkgxMTYuNTQzWk0xMTYuNTQzIDQ1LjI2NDFWNDUuMjQ0MkgxMTUuMDQzVjQ1LjI2NDFIMTE2LjU0M1pNMTE2LjU0MyA0NS4yODM5VjQ1LjI2NDFIMTE1LjA0M1Y0NS4yODM5SDExNi41NDNaTTExNi41NDMgNDUuMzAzN1Y0NS4yODM5SDExNS4wNDNWNDUuMzAzN0gxMTYuNTQzWk0xMTYuNTQzIDQ1LjMyMzVWNDUuMzAzN0gxMTUuMDQzVjQ1LjMyMzVIMTE2LjU0M1pNMTE2LjU0MyA0NS4zNDMyVjQ1LjMyMzVIMTE1LjA0M1Y0NS4zNDMySDExNi41NDNaTTExNi41NDMgNDUuMzYyOVY0NS4zNDMySDExNS4wNDNWNDUuMzYyOUgxMTYuNTQzWk0xMTYuNTQzIDQ1LjM4MjZWNDUuMzYyOUgxMTUuMDQzVjQ1LjM4MjZIMTE2LjU0M1pNMTE2LjU0MyA0NS40MDIzVjQ1LjM4MjZIMTE1LjA0M1Y0NS40MDIzSDExNi41NDNaTTExNi41NDMgNDUuNDIyVjQ1LjQwMjNIMTE1LjA0M1Y0NS40MjJIMTE2LjU0M1pNMTE2LjU0MyA0NS40NDE2VjQ1LjQyMkgxMTUuMDQzVjQ1LjQ0MTZIMTE2LjU0M1pNMTE2LjU0MyA0NS40NjEyVjQ1LjQ0MTZIMTE1LjA0M1Y0NS40NjEySDExNi41NDNaTTExNi41NDMgNDUuNDgwOFY0NS40NjEySDExNS4wNDNWNDUuNDgwOEgxMTYuNTQzWk0xMTYuNTQzIDQ1LjUwMDRWNDUuNDgwOEgxMTUuMDQzVjQ1LjUwMDRIMTE2LjU0M1pNMTE2LjU0MyA0NS41MTk5VjQ1LjUwMDRIMTE1LjA0M1Y0NS41MTk5SDExNi41NDNaTTExNi41NDMgNDUuNTM5NFY0NS41MTk5SDExNS4wNDNWNDUuNTM5NEgxMTYuNTQzWk0xMTYuNTQzIDQ1LjU1ODlWNDUuNTM5NEgxMTUuMDQzVjQ1LjU1ODlIMTE2LjU0M1pNMTE2LjU0MyA0NS41Nzg0VjQ1LjU1ODlIMTE1LjA0M1Y0NS41Nzg0SDExNi41NDNaTTExNi41NDMgNDUuNTk3OVY0NS41Nzg0SDExNS4wNDNWNDUuNTk3OUgxMTYuNTQzWk0xMTYuNTQzIDQ1LjYxNzNWNDUuNTk3OUgxMTUuMDQzVjQ1LjYxNzNIMTE2LjU0M1pNMTE2LjU0MyA0NS42MzY3VjQ1LjYxNzNIMTE1LjA0M1Y0NS42MzY3SDExNi41NDNaTTExNi41NDMgNDUuNjU2MVY0NS42MzY3SDExNS4wNDNWNDUuNjU2MUgxMTYuNTQzWk0xMTYuNTQzIDQ1LjY3NTRWNDUuNjU2MUgxMTUuMDQzVjQ1LjY3NTRIMTE2LjU0M1pNMTE2LjU0MyA0NS42OTQ3VjQ1LjY3NTRIMTE1LjA0M1Y0NS42OTQ3SDExNi41NDNaTTExNi41NDMgNDUuNzE0MVY0NS42OTQ3SDExNS4wNDNWNDUuNzE0MUgxMTYuNTQzWk0xMTYuNTQzIDQ1LjczMzNWNDUuNzE0MUgxMTUuMDQzVjQ1LjczMzNIMTE2LjU0M1pNMTE2LjU0MyA0NS43NTI2VjQ1LjczMzNIMTE1LjA0M1Y0NS43NTI2SDExNi41NDNaTTExNi41NDMgNDUuNzcxOFY0NS43NTI2SDExNS4wNDNWNDUuNzcxOEgxMTYuNTQzWk0xMTYuNTQzIDQ1Ljc5MTFWNDUuNzcxOEgxMTUuMDQzVjQ1Ljc5MTFIMTE2LjU0M1pNMTE2LjU0MyA0NS44MTAyVjQ1Ljc5MTFIMTE1LjA0M1Y0NS44MTAySDExNi41NDNaTTExNi41NDMgNDUuODI5NFY0NS44MTAySDExNS4wNDNWNDUuODI5NEgxMTYuNTQzWk0xMTYuNTQzIDQ1Ljg0ODZWNDUuODI5NEgxMTUuMDQzVjQ1Ljg0ODZIMTE2LjU0M1pNMTE2LjU0MyA0NS44Njc3VjQ1Ljg0ODZIMTE1LjA0M1Y0NS44Njc3SDExNi41NDNaTTExNi41NDMgNDUuODg2OFY0NS44Njc3SDExNS4wNDNWNDUuODg2OEgxMTYuNTQzWk0xMTYuNTQzIDQ1LjkwNThWNDUuODg2OEgxMTUuMDQzVjQ1LjkwNThIMTE2LjU0M1pNMTE2LjU0MyA0NS45MjQ5VjQ1LjkwNThIMTE1LjA0M1Y0NS45MjQ5SDExNi41NDNaTTExNi41NDMgNDUuOTQzOVY0NS45MjQ5SDExNS4wNDNWNDUuOTQzOUgxMTYuNTQzWk0xMTYuNTQzIDQ1Ljk2MjlWNDUuOTQzOUgxMTUuMDQzVjQ1Ljk2MjlIMTE2LjU0M1pNMTE2LjU0MyA0NS45ODE5VjQ1Ljk2MjlIMTE1LjA0M1Y0NS45ODE5SDExNi41NDNaTTExNi41NDMgNDYuMDAwOVY0NS45ODE5SDExNS4wNDNWNDYuMDAwOUgxMTYuNTQzWk0xMTYuNTQzIDQ2LjAxOThWNDYuMDAwOUgxMTUuMDQzVjQ2LjAxOThIMTE2LjU0M1pNMTE2LjU0MyA0Ni4wMzg3VjQ2LjAxOThIMTE1LjA0M1Y0Ni4wMzg3SDExNi41NDNaTTExNi41NDMgNDYuMDU3NlY0Ni4wMzg3SDExNS4wNDNWNDYuMDU3NkgxMTYuNTQzWk0xMTYuNTQzIDQ2LjA3NjVWNDYuMDU3NkgxMTUuMDQzVjQ2LjA3NjVIMTE2LjU0M1pNMTE2LjU0MyA0Ni4wOTUzVjQ2LjA3NjVIMTE1LjA0M1Y0Ni4wOTUzSDExNi41NDNaTTExNi41NDMgNDYuMTE0MVY0Ni4wOTUzSDExNS4wNDNWNDYuMTE0MUgxMTYuNTQzWk0xMTYuNTQzIDQ2LjEzMjlWNDYuMTE0MUgxMTUuMDQzVjQ2LjEzMjlIMTE2LjU0M1pNMTE2LjU0MyA0Ni4xNTE3VjQ2LjEzMjlIMTE1LjA0M1Y0Ni4xNTE3SDExNi41NDNaTTExNi41NDMgNDYuMTcwNFY0Ni4xNTE3SDExNS4wNDNWNDYuMTcwNEgxMTYuNTQzWk0xMTYuNTQzIDQ2LjE4OTJWNDYuMTcwNEgxMTUuMDQzVjQ2LjE4OTJIMTE2LjU0M1pNMTE2LjU0MyA0Ni4yMDc5VjQ2LjE4OTJIMTE1LjA0M1Y0Ni4yMDc5SDExNi41NDNaTTExNi41NDMgNDYuMjI2NVY0Ni4yMDc5SDExNS4wNDNWNDYuMjI2NUgxMTYuNTQzWk0xMTYuNTQzIDQ2LjI0NTJWNDYuMjI2NUgxMTUuMDQzVjQ2LjI0NTJIMTE2LjU0M1pNMTE2LjU0MyA0Ni4yNjM4VjQ2LjI0NTJIMTE1LjA0M1Y0Ni4yNjM4SDExNi41NDNaTTExNi41NDMgNDYuMjgyNFY0Ni4yNjM4SDExNS4wNDNWNDYuMjgyNEgxMTYuNTQzWk0xMTYuNTQzIDQ2LjMwMVY0Ni4yODI0SDExNS4wNDNWNDYuMzAxSDExNi41NDNaTTExNi41NDMgNDYuMzE5NlY0Ni4zMDFIMTE1LjA0M1Y0Ni4zMTk2SDExNi41NDNaTTExNi41NDMgNDYuMzM4MVY0Ni4zMTk2SDExNS4wNDNWNDYuMzM4MUgxMTYuNTQzWk0xMTYuNTQzIDQ2LjM1NjZWNDYuMzM4MUgxMTUuMDQzVjQ2LjM1NjZIMTE2LjU0M1pNMTE2LjU0MyA0Ni4zNzUxVjQ2LjM1NjZIMTE1LjA0M1Y0Ni4zNzUxSDExNi41NDNaTTExNi41NDMgNDYuMzkzNlY0Ni4zNzUxSDExNS4wNDNWNDYuMzkzNkgxMTYuNTQzWk0xMTYuNTQzIDQ2LjQxMlY0Ni4zOTM2SDExNS4wNDNWNDYuNDEySDExNi41NDNaTTExNi41NDMgNDYuNDMwNVY0Ni40MTJIMTE1LjA0M1Y0Ni40MzA1SDExNi41NDNaTTExNi41NDMgNDYuNDQ4OVY0Ni40MzA1SDExNS4wNDNWNDYuNDQ4OUgxMTYuNTQzWk0xMTYuNTQzIDQ2LjQ2NzJWNDYuNDQ4OUgxMTUuMDQzVjQ2LjQ2NzJIMTE2LjU0M1pNMTE2LjU0MyA0Ni40ODU2VjQ2LjQ2NzJIMTE1LjA0M1Y0Ni40ODU2SDExNi41NDNaTTExNi41NDMgNDYuNTAzOVY0Ni40ODU2SDExNS4wNDNWNDYuNTAzOUgxMTYuNTQzWk0xMTYuNTQzIDQ2LjUyMjJWNDYuNTAzOUgxMTUuMDQzVjQ2LjUyMjJIMTE2LjU0M1pNMTE2LjU0MyA0Ni41NDA1VjQ2LjUyMjJIMTE1LjA0M1Y0Ni41NDA1SDExNi41NDNaTTExNi41NDMgNDYuNTU4OFY0Ni41NDA1SDExNS4wNDNWNDYuNTU4OEgxMTYuNTQzWk0xMTYuNTQzIDQ2LjU3N1Y0Ni41NTg4SDExNS4wNDNWNDYuNTc3SDExNi41NDNaTTExNi41NDMgNDYuNTk1MlY0Ni41NzdIMTE1LjA0M1Y0Ni41OTUySDExNi41NDNaTTExNi41NDMgNDYuNjEzNFY0Ni41OTUySDExNS4wNDNWNDYuNjEzNEgxMTYuNTQzWk0xMTYuNTQzIDQ2LjYzMTZWNDYuNjEzNEgxMTUuMDQzVjQ2LjYzMTZIMTE2LjU0M1pNMTE2LjU0MyA0Ni42NDk3VjQ2LjYzMTZIMTE1LjA0M1Y0Ni42NDk3SDExNi41NDNaTTExNi41NDMgNDYuNjY3OFY0Ni42NDk3SDExNS4wNDNWNDYuNjY3OEgxMTYuNTQzWk0xMTYuNTQzIDQ2LjY4NTlWNDYuNjY3OEgxMTUuMDQzVjQ2LjY4NTlIMTE2LjU0M1pNMTE2LjU0MyA0Ni43MDRWNDYuNjg1OUgxMTUuMDQzVjQ2LjcwNEgxMTYuNTQzWk0xMTYuNTQzIDQ2LjcyMlY0Ni43MDRIMTE1LjA0M1Y0Ni43MjJIMTE2LjU0M1pNMTE2LjU0MyA0Ni43NDAxVjQ2LjcyMkgxMTUuMDQzVjQ2Ljc0MDFIMTE2LjU0M1pNMTE2LjU0MyA0Ni43NTgxVjQ2Ljc0MDFIMTE1LjA0M1Y0Ni43NTgxSDExNi41NDNaTTExNi41NDMgNDYuNzc2VjQ2Ljc1ODFIMTE1LjA0M1Y0Ni43NzZIMTE2LjU0M1pNMTE2LjU0MyA0Ni43OTRWNDYuNzc2SDExNS4wNDNWNDYuNzk0SDExNi41NDNaTTExNi41NDMgNDYuODExOVY0Ni43OTRIMTE1LjA0M1Y0Ni44MTE5SDExNi41NDNaTTExNi41NDMgNDYuODI5OFY0Ni44MTE5SDExNS4wNDNWNDYuODI5OEgxMTYuNTQzWk0xMTYuNTQzIDQ2Ljg0NzdWNDYuODI5OEgxMTUuMDQzVjQ2Ljg0NzdIMTE2LjU0M1pNMTE2LjU0MyA0Ni44NjU2VjQ2Ljg0NzdIMTE1LjA0M1Y0Ni44NjU2SDExNi41NDNaTTExNi41NDMgNDYuODgzNFY0Ni44NjU2SDExNS4wNDNWNDYuODgzNEgxMTYuNTQzWk0xMTYuNTQzIDQ2LjkwMTJWNDYuODgzNEgxMTUuMDQzVjQ2LjkwMTJIMTE2LjU0M1pNMTE2LjU0MyA0Ni45MTlWNDYuOTAxMkgxMTUuMDQzVjQ2LjkxOUgxMTYuNTQzWk0xMTYuNTQzIDQ2LjkzNjhWNDYuOTE5SDExNS4wNDNWNDYuOTM2OEgxMTYuNTQzWk0xMTYuNTQzIDQ2Ljk1NDVWNDYuOTM2OEgxMTUuMDQzVjQ2Ljk1NDVIMTE2LjU0M1pNMTE2LjU0MyA0Ni45NzIyVjQ2Ljk1NDVIMTE1LjA0M1Y0Ni45NzIySDExNi41NDNaTTExNi41NDMgNDYuOTg5OVY0Ni45NzIySDExNS4wNDNWNDYuOTg5OUgxMTYuNTQzWk0xMTYuNTQzIDQ3LjAwNzZWNDYuOTg5OUgxMTUuMDQzVjQ3LjAwNzZIMTE2LjU0M1pNMTE2LjU0MyA0Ny4wMjUzVjQ3LjAwNzZIMTE1LjA0M1Y0Ny4wMjUzSDExNi41NDNaTTExNi41NDMgNDcuMDQyOVY0Ny4wMjUzSDExNS4wNDNWNDcuMDQyOUgxMTYuNTQzWk0xMTYuNTQzIDQ3LjA2MDVWNDcuMDQyOUgxMTUuMDQzVjQ3LjA2MDVIMTE2LjU0M1pNMTE2LjU0MyA0Ny4wNzgxVjQ3LjA2MDVIMTE1LjA0M1Y0Ny4wNzgxSDExNi41NDNaTTExNi41NDMgNDcuMDk1NlY0Ny4wNzgxSDExNS4wNDNWNDcuMDk1NkgxMTYuNTQzWk0xMTYuNTQzIDQ3LjExMzJWNDcuMDk1NkgxMTUuMDQzVjQ3LjExMzJIMTE2LjU0M1pNMTE2LjU0MyA0Ny4xMzA3VjQ3LjExMzJIMTE1LjA0M1Y0Ny4xMzA3SDExNi41NDNaTTExNi41NDMgNDcuMTQ4MlY0Ny4xMzA3SDExNS4wNDNWNDcuMTQ4MkgxMTYuNTQzWk0xMTYuNTQzIDQ3LjE2NTZWNDcuMTQ4MkgxMTUuMDQzVjQ3LjE2NTZIMTE2LjU0M1pNMTE2LjU0MyA0Ny4xODMxVjQ3LjE2NTZIMTE1LjA0M1Y0Ny4xODMxSDExNi41NDNaTTExNi41NDMgNDcuMjAwNVY0Ny4xODMxSDExNS4wNDNWNDcuMjAwNUgxMTYuNTQzWk0xMTYuNTQzIDQ3LjIxNzlWNDcuMjAwNUgxMTUuMDQzVjQ3LjIxNzlIMTE2LjU0M1pNMTE2LjU0MyA0Ny4yMzUzVjQ3LjIxNzlIMTE1LjA0M1Y0Ny4yMzUzSDExNi41NDNaTTExNi41NDMgNDcuMjUyNlY0Ny4yMzUzSDExNS4wNDNWNDcuMjUyNkgxMTYuNTQzWk0xMTYuNTQzIDQ3LjI2OTlWNDcuMjUyNkgxMTUuMDQzVjQ3LjI2OTlIMTE2LjU0M1pNMTE2LjU0MyA0Ny4yODcyVjQ3LjI2OTlIMTE1LjA0M1Y0Ny4yODcySDExNi41NDNaTTExNi41NDMgNDcuMzA0NVY0Ny4yODcySDExNS4wNDNWNDcuMzA0NUgxMTYuNTQzWk0xMTYuNTQzIDQ3LjMyMThWNDcuMzA0NUgxMTUuMDQzVjQ3LjMyMThIMTE2LjU0M1pNMTE2LjU0MyA0Ny4zMzlWNDcuMzIxOEgxMTUuMDQzVjQ3LjMzOUgxMTYuNTQzWk0xMTYuNTQzIDQ3LjM1NjJWNDcuMzM5SDExNS4wNDNWNDcuMzU2MkgxMTYuNTQzWk0xMTYuNTQzIDQ3LjM3MzRWNDcuMzU2MkgxMTUuMDQzVjQ3LjM3MzRIMTE2LjU0M1pNMTE2LjU0MyA0Ny4zOTA2VjQ3LjM3MzRIMTE1LjA0M1Y0Ny4zOTA2SDExNi41NDNaTTExNi41NDMgNDcuNDA3N1Y0Ny4zOTA2SDExNS4wNDNWNDcuNDA3N0gxMTYuNTQzWk0xMTYuNTQzIDQ3LjQyNDhWNDcuNDA3N0gxMTUuMDQzVjQ3LjQyNDhIMTE2LjU0M1pNMTE2LjU0MyA0Ny40NDE5VjQ3LjQyNDhIMTE1LjA0M1Y0Ny40NDE5SDExNi41NDNaTTExNi41NDMgNDcuNDU5VjQ3LjQ0MTlIMTE1LjA0M1Y0Ny40NTlIMTE2LjU0M1pNMTE2LjU0MyA0Ny40NzZWNDcuNDU5SDExNS4wNDNWNDcuNDc2SDExNi41NDNaTTExNi41NDMgNDcuNDkzVjQ3LjQ3NkgxMTUuMDQzVjQ3LjQ5M0gxMTYuNTQzWk0xMTYuNTQzIDQ3LjUxVjQ3LjQ5M0gxMTUuMDQzVjQ3LjUxSDExNi41NDNaTTExNi41NDMgNDcuNTI3VjQ3LjUxSDExNS4wNDNWNDcuNTI3SDExNi41NDNaTTExNi41NDMgNDcuNTQ0VjQ3LjUyN0gxMTUuMDQzVjQ3LjU0NEgxMTYuNTQzWk0xMTYuNTQzIDQ3LjU2MDlWNDcuNTQ0SDExNS4wNDNWNDcuNTYwOUgxMTYuNTQzWk0xMTYuNTQzIDQ3LjU3NzhWNDcuNTYwOUgxMTUuMDQzVjQ3LjU3NzhIMTE2LjU0M1pNMTE2LjU0MyA0Ny41OTQ3VjQ3LjU3NzhIMTE1LjA0M1Y0Ny41OTQ3SDExNi41NDNaTTExNi41NDMgNDcuNjExNVY0Ny41OTQ3SDExNS4wNDNWNDcuNjExNUgxMTYuNTQzWk0xMTYuNTQzIDQ3LjYyODRWNDcuNjExNUgxMTUuMDQzVjQ3LjYyODRIMTE2LjU0M1pNMTE2LjU0MyA0Ny42NDUyVjQ3LjYyODRIMTE1LjA0M1Y0Ny42NDUySDExNi41NDNaTTExNi41NDMgNDcuNjYyVjQ3LjY0NTJIMTE1LjA0M1Y0Ny42NjJIMTE2LjU0M1pNMTE2LjU0MyA0Ny42Nzg3VjQ3LjY2MkgxMTUuMDQzVjQ3LjY3ODdIMTE2LjU0M1pNMTE2LjU0MyA0Ny42OTU1VjQ3LjY3ODdIMTE1LjA0M1Y0Ny42OTU1SDExNi41NDNaTTExNi41NDMgNDcuNzEyMlY0Ny42OTU1SDExNS4wNDNWNDcuNzEyMkgxMTYuNTQzWk0xMTYuNTQzIDQ3LjcyODlWNDcuNzEyMkgxMTUuMDQzVjQ3LjcyODlIMTE2LjU0M1pNMTE2LjU0MyA0Ny43NDU1VjQ3LjcyODlIMTE1LjA0M1Y0Ny43NDU1SDExNi41NDNaTTExNi41NDMgNDcuNzYyMlY0Ny43NDU1SDExNS4wNDNWNDcuNzYyMkgxMTYuNTQzWk0xMTYuNTQzIDQ3Ljc3ODhWNDcuNzYyMkgxMTUuMDQzVjQ3Ljc3ODhIMTE2LjU0M1pNMTE2LjU0MyA0Ny43OTU0VjQ3Ljc3ODhIMTE1LjA0M1Y0Ny43OTU0SDExNi41NDNaTTExNi41NDMgNDcuODEyVjQ3Ljc5NTRIMTE1LjA0M1Y0Ny44MTJIMTE2LjU0M1pNMTE2LjU0MyA0Ny44Mjg2VjQ3LjgxMkgxMTUuMDQzVjQ3LjgyODZIMTE2LjU0M1pNMTE2LjU0MyA0Ny44NDUxVjQ3LjgyODZIMTE1LjA0M1Y0Ny44NDUxSDExNi41NDNaTTExNi41NDMgNDcuODYxNlY0Ny44NDUxSDExNS4wNDNWNDcuODYxNkgxMTYuNTQzWk0xMTYuNTQzIDQ3Ljg3ODFWNDcuODYxNkgxMTUuMDQzVjQ3Ljg3ODFIMTE2LjU0M1pNMTE2LjU0MyA0Ny44OTQ1VjQ3Ljg3ODFIMTE1LjA0M1Y0Ny44OTQ1SDExNi41NDNaTTExNi41NDMgNDcuOTExVjQ3Ljg5NDVIMTE1LjA0M1Y0Ny45MTFIMTE2LjU0M1pNMTE2LjU0MyA0Ny45Mjc0VjQ3LjkxMUgxMTUuMDQzVjQ3LjkyNzRIMTE2LjU0M1pNMTE2LjU0MyA0Ny45NDM4VjQ3LjkyNzRIMTE1LjA0M1Y0Ny45NDM4SDExNi41NDNaTTExNi41NDMgNDcuOTYwMlY0Ny45NDM4SDExNS4wNDNWNDcuOTYwMkgxMTYuNTQzWk0xMTYuNTQzIDQ3Ljk3NjVWNDcuOTYwMkgxMTUuMDQzVjQ3Ljk3NjVIMTE2LjU0M1pNMTE2LjU0MyA0Ny45OTI4VjQ3Ljk3NjVIMTE1LjA0M1Y0Ny45OTI4SDExNi41NDNaTTExNi41NDMgNDguMDA5MVY0Ny45OTI4SDExNS4wNDNWNDguMDA5MUgxMTYuNTQzWk0xMTYuNTQzIDQ4LjAyNTRWNDguMDA5MUgxMTUuMDQzVjQ4LjAyNTRIMTE2LjU0M1pNMTE2LjU0MyA0OC4wNDE2VjQ4LjAyNTRIMTE1LjA0M1Y0OC4wNDE2SDExNi41NDNaTTExNi41NDMgNDguMDU3OVY0OC4wNDE2SDExNS4wNDNWNDguMDU3OUgxMTYuNTQzWk0xMTYuNTQzIDQ4LjA3NDFWNDguMDU3OUgxMTUuMDQzVjQ4LjA3NDFIMTE2LjU0M1pNMTE2LjU0MyA0OC4wOTAzVjQ4LjA3NDFIMTE1LjA0M1Y0OC4wOTAzSDExNi41NDNaTTExNi41NDMgNDguMTA2NFY0OC4wOTAzSDExNS4wNDNWNDguMTA2NEgxMTYuNTQzWk0xMTYuNTQzIDQ4LjEyMjVWNDguMTA2NEgxMTUuMDQzVjQ4LjEyMjVIMTE2LjU0M1pNMTE2LjU0MyA0OC4xMzg3VjQ4LjEyMjVIMTE1LjA0M1Y0OC4xMzg3SDExNi41NDNaTTExNi41NDMgNDguMTU0N1Y0OC4xMzg3SDExNS4wNDNWNDguMTU0N0gxMTYuNTQzWk0xMTYuNTQzIDQ4LjE3MDhWNDguMTU0N0gxMTUuMDQzVjQ4LjE3MDhIMTE2LjU0M1pNMTE2LjU0MyA0OC4xODY5VjQ4LjE3MDhIMTE1LjA0M1Y0OC4xODY5SDExNi41NDNaTTExNi41NDMgNDguMjAyOVY0OC4xODY5SDExNS4wNDNWNDguMjAyOUgxMTYuNTQzWk0xMTYuNTQzIDQ4LjIxODlWNDguMjAyOUgxMTUuMDQzVjQ4LjIxODlIMTE2LjU0M1pNMTE2LjU0MyA0OC4yMzQ4VjQ4LjIxODlIMTE1LjA0M1Y0OC4yMzQ4SDExNi41NDNaTTExNi41NDMgNDguMjUwOFY0OC4yMzQ4SDExNS4wNDNWNDguMjUwOEgxMTYuNTQzWk0xMTYuNTQzIDQ4LjI2NjdWNDguMjUwOEgxMTUuMDQzVjQ4LjI2NjdIMTE2LjU0M1pNMTE2LjU0MyA0OC4yODI2VjQ4LjI2NjdIMTE1LjA0M1Y0OC4yODI2SDExNi41NDNaTTExNi41NDMgNDguMjk4NVY0OC4yODI2SDExNS4wNDNWNDguMjk4NUgxMTYuNTQzWk0xMTYuNTQzIDQ4LjMxNDNWNDguMjk4NUgxMTUuMDQzVjQ4LjMxNDNIMTE2LjU0M1pNMTE2LjU0MyA0OC4zMzAyVjQ4LjMxNDNIMTE1LjA0M1Y0OC4zMzAySDExNi41NDNaTTExNi41NDMgNDguMzQ2VjQ4LjMzMDJIMTE1LjA0M1Y0OC4zNDZIMTE2LjU0M1pNMTE2LjU0MyA0OC4zNjE4VjQ4LjM0NkgxMTUuMDQzVjQ4LjM2MThIMTE2LjU0M1pNMTE2LjU0MyA0OC4zNzc1VjQ4LjM2MThIMTE1LjA0M1Y0OC4zNzc1SDExNi41NDNaTTExNi41NDMgNDguMzkzM1Y0OC4zNzc1SDExNS4wNDNWNDguMzkzM0gxMTYuNTQzWk0xMTYuNTQzIDQ4LjQwOVY0OC4zOTMzSDExNS4wNDNWNDguNDA5SDExNi41NDNaTTExNi41NDMgNDguNDI0N1Y0OC40MDlIMTE1LjA0M1Y0OC40MjQ3SDExNi41NDNaTTExNi41NDMgNDguNDQwM1Y0OC40MjQ3SDExNS4wNDNWNDguNDQwM0gxMTYuNTQzWk0xMTYuNTQzIDQ4LjQ1NlY0OC40NDAzSDExNS4wNDNWNDguNDU2SDExNi41NDNaTTExNi41NDMgNDguNDcxNlY0OC40NTZIMTE1LjA0M1Y0OC40NzE2SDExNi41NDNaTTExNi41NDMgNDguNDg3MlY0OC40NzE2SDExNS4wNDNWNDguNDg3MkgxMTYuNTQzWk0xMTYuNTQzIDQ4LjUwMjhWNDguNDg3MkgxMTUuMDQzVjQ4LjUwMjhIMTE2LjU0M1pNMTE2LjU0MyA0OC41MTgzVjQ4LjUwMjhIMTE1LjA0M1Y0OC41MTgzSDExNi41NDNaTTExNi41NDMgNDguNTMzOVY0OC41MTgzSDExNS4wNDNWNDguNTMzOUgxMTYuNTQzWk0xMTYuNTQzIDQ4LjU0OTRWNDguNTMzOUgxMTUuMDQzVjQ4LjU0OTRIMTE2LjU0M1pNMTE2LjU0MyA0OC41NjQ4VjQ4LjU0OTRIMTE1LjA0M1Y0OC41NjQ4SDExNi41NDNaTTExNi41NDMgNDguNTgwM1Y0OC41NjQ4SDExNS4wNDNWNDguNTgwM0gxMTYuNTQzWk0xMTYuNTQzIDQ4LjU5NTdWNDguNTgwM0gxMTUuMDQzVjQ4LjU5NTdIMTE2LjU0M1pNMTE2LjU0MyA0OC42MTExVjQ4LjU5NTdIMTE1LjA0M1Y0OC42MTExSDExNi41NDNaTTExNi41NDMgNDguNjI2NVY0OC42MTExSDExNS4wNDNWNDguNjI2NUgxMTYuNTQzWk0xMTYuNTQzIDQ4LjY0MTlWNDguNjI2NUgxMTUuMDQzVjQ4LjY0MTlIMTE2LjU0M1pNMTE2LjU0MyA0OC42NTcyVjQ4LjY0MTlIMTE1LjA0M1Y0OC42NTcySDExNi41NDNaTTExNi41NDMgNDguNjcyNlY0OC42NTcySDExNS4wNDNWNDguNjcyNkgxMTYuNTQzWk0xMTYuNTQzIDQ4LjY4NzhWNDguNjcyNkgxMTUuMDQzVjQ4LjY4NzhIMTE2LjU0M1pNMTE2LjU0MyA0OC43MDMxVjQ4LjY4NzhIMTE1LjA0M1Y0OC43MDMxSDExNi41NDNaTTExNi41NDMgNDguNzE4NFY0OC43MDMxSDExNS4wNDNWNDguNzE4NEgxMTYuNTQzWk0xMTYuNTQzIDQ4LjczMzZWNDguNzE4NEgxMTUuMDQzVjQ4LjczMzZIMTE2LjU0M1pNMTE2LjU0MyA0OC43NDg4VjQ4LjczMzZIMTE1LjA0M1Y0OC43NDg4SDExNi41NDNaTTExNi41NDMgNDguNzY0VjQ4Ljc0ODhIMTE1LjA0M1Y0OC43NjRIMTE2LjU0M1pNMTE2LjU0MyA0OC43NzkxVjQ4Ljc2NEgxMTUuMDQzVjQ4Ljc3OTFIMTE2LjU0M1pNMTE2LjU0MyA0OC43OTQzVjQ4Ljc3OTFIMTE1LjA0M1Y0OC43OTQzSDExNi41NDNaTTExNi41NDMgNDguODA5NFY0OC43OTQzSDExNS4wNDNWNDguODA5NEgxMTYuNTQzWk0xMTYuNTQzIDQ4LjgyNDVWNDguODA5NEgxMTUuMDQzVjQ4LjgyNDVIMTE2LjU0M1pNMTE2LjU0MyA0OC44Mzk1VjQ4LjgyNDVIMTE1LjA0M1Y0OC44Mzk1SDExNi41NDNaTTExNi41NDMgNDguODU0NVY0OC44Mzk1SDExNS4wNDNWNDguODU0NUgxMTYuNTQzWk0xMTYuNTQzIDQ4Ljg2OTZWNDguODU0NUgxMTUuMDQzVjQ4Ljg2OTZIMTE2LjU0M1pNMTE2LjU0MyA0OC44ODQ2VjQ4Ljg2OTZIMTE1LjA0M1Y0OC44ODQ2SDExNi41NDNaTTExNi41NDMgNDguODk5NVY0OC44ODQ2SDExNS4wNDNWNDguODk5NUgxMTYuNTQzWk0xMTYuNTQzIDQ4LjkxNDVWNDguODk5NUgxMTUuMDQzVjQ4LjkxNDVIMTE2LjU0M1pNMTE2LjU0MyA0OC45Mjk0VjQ4LjkxNDVIMTE1LjA0M1Y0OC45Mjk0SDExNi41NDNaTTExNi41NDMgNDguOTQ0M1Y0OC45Mjk0SDExNS4wNDNWNDguOTQ0M0gxMTYuNTQzWk0xMTYuNTQzIDQ4Ljk1OTJWNDguOTQ0M0gxMTUuMDQzVjQ4Ljk1OTJIMTE2LjU0M1pNMTE2LjU0MyA0OC45NzRWNDguOTU5MkgxMTUuMDQzVjQ4Ljk3NEgxMTYuNTQzWk0xMTYuNTQzIDQ4Ljk4ODhWNDguOTc0SDExNS4wNDNWNDguOTg4OEgxMTYuNTQzWk0xMTYuNTQzIDQ5LjAwMzZWNDguOTg4OEgxMTUuMDQzVjQ5LjAwMzZIMTE2LjU0M1pNMTE2LjU0MyA0OS4wMTg0VjQ5LjAwMzZIMTE1LjA0M1Y0OS4wMTg0SDExNi41NDNaTTExNi41NDMgNDkuMDMzMlY0OS4wMTg0SDExNS4wNDNWNDkuMDMzMkgxMTYuNTQzWk0xMTYuNTQzIDQ5LjA0NzlWNDkuMDMzMkgxMTUuMDQzVjQ5LjA0NzlIMTE2LjU0M1pNMTE2LjU0MyA0OS4wNjI2VjQ5LjA0NzlIMTE1LjA0M1Y0OS4wNjI2SDExNi41NDNaTTExNi41NDMgNDkuMDc3M1Y0OS4wNjI2SDExNS4wNDNWNDkuMDc3M0gxMTYuNTQzWk0xMTYuNTQzIDQ5LjA5MlY0OS4wNzczSDExNS4wNDNWNDkuMDkySDExNi41NDNaTTExNi41NDMgNDkuMTA2NlY0OS4wOTJIMTE1LjA0M1Y0OS4xMDY2SDExNi41NDNaTTExNi41NDMgNDkuMTIxMlY0OS4xMDY2SDExNS4wNDNWNDkuMTIxMkgxMTYuNTQzWk0xMTYuNTQzIDQ5LjEzNThWNDkuMTIxMkgxMTUuMDQzVjQ5LjEzNThIMTE2LjU0M1pNMTE2LjU0MyA0OS4xNTA0VjQ5LjEzNThIMTE1LjA0M1Y0OS4xNTA0SDExNi41NDNaTTExNi41NDMgNDkuMTY1VjQ5LjE1MDRIMTE1LjA0M1Y0OS4xNjVIMTE2LjU0M1pNMTE2LjU0MyA0OS4xNzk1VjQ5LjE2NUgxMTUuMDQzVjQ5LjE3OTVIMTE2LjU0M1pNMTE2LjU0MyA0OS4xOTRWNDkuMTc5NUgxMTUuMDQzVjQ5LjE5NEgxMTYuNTQzWk0xMTYuNTQzIDQ5LjIwODVWNDkuMTk0SDExNS4wNDNWNDkuMjA4NUgxMTYuNTQzWk0xMTYuNTQzIDQ5LjIyMjlWNDkuMjA4NUgxMTUuMDQzVjQ5LjIyMjlIMTE2LjU0M1pNMTE2LjU0MyA0OS4yMzczVjQ5LjIyMjlIMTE1LjA0M1Y0OS4yMzczSDExNi41NDNaTTExNi41NDMgNDkuMjUxOFY0OS4yMzczSDExNS4wNDNWNDkuMjUxOEgxMTYuNTQzWk0xMTYuNTQzIDQ5LjI2NjFWNDkuMjUxOEgxMTUuMDQzVjQ5LjI2NjFIMTE2LjU0M1pNMTE2LjU0MyA0OS4yODA1VjQ5LjI2NjFIMTE1LjA0M1Y0OS4yODA1SDExNi41NDNaTTExNi41NDMgNDkuMjk0OFY0OS4yODA1SDExNS4wNDNWNDkuMjk0OEgxMTYuNTQzWk0xMTYuNTQzIDQ5LjMwOTJWNDkuMjk0OEgxMTUuMDQzVjQ5LjMwOTJIMTE2LjU0M1pNMTE2LjU0MyA0OS4zMjM0VjQ5LjMwOTJIMTE1LjA0M1Y0OS4zMjM0SDExNi41NDNaTTExNi41NDMgNDkuMzM3N1Y0OS4zMjM0SDExNS4wNDNWNDkuMzM3N0gxMTYuNTQzWk0xMTYuNTQzIDQ5LjM1MlY0OS4zMzc3SDExNS4wNDNWNDkuMzUySDExNi41NDNaTTExNi41NDMgNDkuMzY2MlY0OS4zNTJIMTE1LjA0M1Y0OS4zNjYySDExNi41NDNaTTExNi41NDMgNDkuMzgwNFY0OS4zNjYySDExNS4wNDNWNDkuMzgwNEgxMTYuNTQzWk0xMTYuNTQzIDQ5LjM5NDZWNDkuMzgwNEgxMTUuMDQzVjQ5LjM5NDZIMTE2LjU0M1pNMTE2LjU0MyA0OS40MDg3VjQ5LjM5NDZIMTE1LjA0M1Y0OS40MDg3SDExNi41NDNaTTExNi41NDMgNDkuNDIyOFY0OS40MDg3SDExNS4wNDNWNDkuNDIyOEgxMTYuNTQzWk0xMTYuNTQzIDQ5LjQzNjlWNDkuNDIyOEgxMTUuMDQzVjQ5LjQzNjlIMTE2LjU0M1pNMTE2LjU0MyA0OS40NTFWNDkuNDM2OUgxMTUuMDQzVjQ5LjQ1MUgxMTYuNTQzWk0xMTYuNTQzIDQ5LjQ2NTFWNDkuNDUxSDExNS4wNDNWNDkuNDY1MUgxMTYuNTQzWk0xMTYuNTQzIDQ5LjQ3OTFWNDkuNDY1MUgxMTUuMDQzVjQ5LjQ3OTFIMTE2LjU0M1pNMTE2LjU0MyA0OS40OTMxVjQ5LjQ3OTFIMTE1LjA0M1Y0OS40OTMxSDExNi41NDNaTTExNi41NDMgNDkuNTA3MVY0OS40OTMxSDExNS4wNDNWNDkuNTA3MUgxMTYuNTQzWk0xMTYuNTQzIDQ5LjUyMTFWNDkuNTA3MUgxMTUuMDQzVjQ5LjUyMTFIMTE2LjU0M1pNMTE2LjU0MyA0OS41MzVWNDkuNTIxMUgxMTUuMDQzVjQ5LjUzNUgxMTYuNTQzWk0xMTYuNTQzIDQ5LjU0ODlWNDkuNTM1SDExNS4wNDNWNDkuNTQ4OUgxMTYuNTQzWk0xMTYuNTQzIDQ5LjU2MjhWNDkuNTQ4OUgxMTUuMDQzVjQ5LjU2MjhIMTE2LjU0M1pNMTE2LjU0MyA0OS41NzY3VjQ5LjU2MjhIMTE1LjA0M1Y0OS41NzY3SDExNi41NDNaTTExNi41NDMgNDkuNTkwNVY0OS41NzY3SDExNS4wNDNWNDkuNTkwNUgxMTYuNTQzWk0xMTYuNTQzIDQ5LjYwNDRWNDkuNTkwNUgxMTUuMDQzVjQ5LjYwNDRIMTE2LjU0M1pNMTE2LjU0MyA0OS42MTgyVjQ5LjYwNDRIMTE1LjA0M1Y0OS42MTgySDExNi41NDNaTTExNi41NDMgNDkuNjMxOVY0OS42MTgySDExNS4wNDNWNDkuNjMxOUgxMTYuNTQzWk0xMTYuNTQzIDQ5LjY0NTdWNDkuNjMxOUgxMTUuMDQzVjQ5LjY0NTdIMTE2LjU0M1pNMTE2LjU0MyA0OS42NTk0VjQ5LjY0NTdIMTE1LjA0M1Y0OS42NTk0SDExNi41NDNaTTExNi41NDMgNDkuNjczMVY0OS42NTk0SDExNS4wNDNWNDkuNjczMUgxMTYuNTQzWk0xMTYuNTQzIDQ5LjY4NjhWNDkuNjczMUgxMTUuMDQzVjQ5LjY4NjhIMTE2LjU0M1pNMTE2LjU0MyA0OS43MDA1VjQ5LjY4NjhIMTE1LjA0M1Y0OS43MDA1SDExNi41NDNaTTExNi41NDMgNDkuNzE0MVY0OS43MDA1SDExNS4wNDNWNDkuNzE0MUgxMTYuNTQzWk0xMTYuNTQzIDQ5LjcyNzdWNDkuNzE0MUgxMTUuMDQzVjQ5LjcyNzdIMTE2LjU0M1pNMTE2LjU0MyA0OS43NDEzVjQ5LjcyNzdIMTE1LjA0M1Y0OS43NDEzSDExNi41NDNaTTExNi41NDMgNDkuNzU0OVY0OS43NDEzSDExNS4wNDNWNDkuNzU0OUgxMTYuNTQzWk0xMTYuNTQzIDQ5Ljc2ODRWNDkuNzU0OUgxMTUuMDQzVjQ5Ljc2ODRIMTE2LjU0M1pNMTE2LjU0MyA0OS43ODJWNDkuNzY4NEgxMTUuMDQzVjQ5Ljc4MkgxMTYuNTQzWk0xMTYuNTQzIDQ5Ljc5NTVWNDkuNzgySDExNS4wNDNWNDkuNzk1NUgxMTYuNTQzWk0xMTYuNTQzIDQ5LjgwODlWNDkuNzk1NUgxMTUuMDQzVjQ5LjgwODlIMTE2LjU0M1pNMTE2LjU0MyA0OS44MjI0VjQ5LjgwODlIMTE1LjA0M1Y0OS44MjI0SDExNi41NDNaTTExNi41NDMgNDkuODM1OFY0OS44MjI0SDExNS4wNDNWNDkuODM1OEgxMTYuNTQzWk0xMTYuNTQzIDQ5Ljg0OTJWNDkuODM1OEgxMTUuMDQzVjQ5Ljg0OTJIMTE2LjU0M1pNMTE2LjU0MyA0OS44NjI2VjQ5Ljg0OTJIMTE1LjA0M1Y0OS44NjI2SDExNi41NDNaTTExNi41NDMgNDkuODc2VjQ5Ljg2MjZIMTE1LjA0M1Y0OS44NzZIMTE2LjU0M1pNMTE2LjU0MyA0OS44ODkzVjQ5Ljg3NkgxMTUuMDQzVjQ5Ljg4OTNIMTE2LjU0M1pNMTE2LjU0MyA0OS45MDI2VjQ5Ljg4OTNIMTE1LjA0M1Y0OS45MDI2SDExNi41NDNaTTExNi41NDMgNDkuOTE1OVY0OS45MDI2SDExNS4wNDNWNDkuOTE1OUgxMTYuNTQzWk0xMTYuNTQzIDQ5LjkyOTJWNDkuOTE1OUgxMTUuMDQzVjQ5LjkyOTJIMTE2LjU0M1pNMTE2LjU0MyA0OS45NDI0VjQ5LjkyOTJIMTE1LjA0M1Y0OS45NDI0SDExNi41NDNaTTExNi41NDMgNDkuOTU1NlY0OS45NDI0SDExNS4wNDNWNDkuOTU1NkgxMTYuNTQzWk0xMTYuNTQzIDQ5Ljk2ODhWNDkuOTU1NkgxMTUuMDQzVjQ5Ljk2ODhIMTE2LjU0M1pNMTE2LjU0MyA0OS45ODJWNDkuOTY4OEgxMTUuMDQzVjQ5Ljk4MkgxMTYuNTQzWk0xMTYuNTQzIDQ5Ljk5NTFWNDkuOTgySDExNS4wNDNWNDkuOTk1MUgxMTYuNTQzWk0xMTYuNTQzIDUwLjAwODNWNDkuOTk1MUgxMTUuMDQzVjUwLjAwODNIMTE2LjU0M1pNMTE2LjU0MyA1MC4wMjE0VjUwLjAwODNIMTE1LjA0M1Y1MC4wMjE0SDExNi41NDNaTTExNi41NDMgNTAuMDM0NFY1MC4wMjE0SDExNS4wNDNWNTAuMDM0NEgxMTYuNTQzWk0xMTYuNTQzIDUwLjA0NzVWNTAuMDM0NEgxMTUuMDQzVjUwLjA0NzVIMTE2LjU0M1pNMTE2LjU0MyA1MC4wNjA1VjUwLjA0NzVIMTE1LjA0M1Y1MC4wNjA1SDExNi41NDNaTTExNi41NDMgNTAuMDczNVY1MC4wNjA1SDExNS4wNDNWNTAuMDczNUgxMTYuNTQzWk0xMTYuNTQzIDUwLjA4NjVWNTAuMDczNUgxMTUuMDQzVjUwLjA4NjVIMTE2LjU0M1pNMTE2LjU0MyA1MC4wOTk1VjUwLjA4NjVIMTE1LjA0M1Y1MC4wOTk1SDExNi41NDNaTTExNi41NDMgNTAuMTEyNFY1MC4wOTk1SDExNS4wNDNWNTAuMTEyNEgxMTYuNTQzWk0xMTYuNTQzIDUwLjEyNTNWNTAuMTEyNEgxMTUuMDQzVjUwLjEyNTNIMTE2LjU0M1pNMTE2LjU0MyA1MC4xMzgyVjUwLjEyNTNIMTE1LjA0M1Y1MC4xMzgySDExNi41NDNaTTExNi41NDMgNTAuMTUxMVY1MC4xMzgySDExNS4wNDNWNTAuMTUxMUgxMTYuNTQzWk0xMTYuNTQzIDUwLjE2MzlWNTAuMTUxMUgxMTUuMDQzVjUwLjE2MzlIMTE2LjU0M1pNMTE2LjU0MyA1MC4xNzY4VjUwLjE2MzlIMTE1LjA0M1Y1MC4xNzY4SDExNi41NDNaTTExNi41NDMgNTAuMTg5NlY1MC4xNzY4SDExNS4wNDNWNTAuMTg5NkgxMTYuNTQzWk0xMTYuNTQzIDUwLjIwMjNWNTAuMTg5NkgxMTUuMDQzVjUwLjIwMjNIMTE2LjU0M1pNMTE2LjU0MyA1MC4yMTUxVjUwLjIwMjNIMTE1LjA0M1Y1MC4yMTUxSDExNi41NDNaTTExNi41NDMgNTAuMjI3OFY1MC4yMTUxSDExNS4wNDNWNTAuMjI3OEgxMTYuNTQzWk0xMTYuNTQzIDUwLjI0MDVWNTAuMjI3OEgxMTUuMDQzVjUwLjI0MDVIMTE2LjU0M1pNMTE2LjU0MyA1MC4yNTMyVjUwLjI0MDVIMTE1LjA0M1Y1MC4yNTMySDExNi41NDNaTTExNi41NDMgNTAuMjY1OVY1MC4yNTMySDExNS4wNDNWNTAuMjY1OUgxMTYuNTQzWk0xMTYuNTQzIDUwLjI3ODVWNTAuMjY1OUgxMTUuMDQzVjUwLjI3ODVIMTE2LjU0M1pNMTE2LjU0MyA1MC4yOTExVjUwLjI3ODVIMTE1LjA0M1Y1MC4yOTExSDExNi41NDNaTTExNi41NDMgNTAuMzAzN1Y1MC4yOTExSDExNS4wNDNWNTAuMzAzN0gxMTYuNTQzWk0xMTYuNTQzIDUwLjMxNjJWNTAuMzAzN0gxMTUuMDQzVjUwLjMxNjJIMTE2LjU0M1pNMTE2LjU0MyA1MC4zMjg4VjUwLjMxNjJIMTE1LjA0M1Y1MC4zMjg4SDExNi41NDNaTTExNi41NDMgNTAuMzQxM1Y1MC4zMjg4SDExNS4wNDNWNTAuMzQxM0gxMTYuNTQzWk0xMTYuNTQzIDUwLjM1MzhWNTAuMzQxM0gxMTUuMDQzVjUwLjM1MzhIMTE2LjU0M1pNMTE2LjU0MyA1MC4zNjYzVjUwLjM1MzhIMTE1LjA0M1Y1MC4zNjYzSDExNi41NDNaTTExNi41NDMgNTAuMzc4N1Y1MC4zNjYzSDExNS4wNDNWNTAuMzc4N0gxMTYuNTQzWk0xMTYuNTQzIDUwLjM5MTFWNTAuMzc4N0gxMTUuMDQzVjUwLjM5MTFIMTE2LjU0M1pNMTE2LjU0MyA1MC40MDM1VjUwLjM5MTFIMTE1LjA0M1Y1MC40MDM1SDExNi41NDNaTTExNi41NDMgNTAuNDE1OVY1MC40MDM1SDExNS4wNDNWNTAuNDE1OUgxMTYuNTQzWk0xMTYuNTQzIDUwLjQyODNWNTAuNDE1OUgxMTUuMDQzVjUwLjQyODNIMTE2LjU0M1pNMTE2LjU0MyA1MC40NDA2VjUwLjQyODNIMTE1LjA0M1Y1MC40NDA2SDExNi41NDNaTTExNi41NDMgNTAuNDUyOVY1MC40NDA2SDExNS4wNDNWNTAuNDUyOUgxMTYuNTQzWk0xMTYuNTQzIDUwLjQ2NTJWNTAuNDUyOUgxMTUuMDQzVjUwLjQ2NTJIMTE2LjU0M1pNMTE2LjU0MyA1MC40Nzc1VjUwLjQ2NTJIMTE1LjA0M1Y1MC40Nzc1SDExNi41NDNaTTExNi41NDMgNTAuNDg5N1Y1MC40Nzc1SDExNS4wNDNWNTAuNDg5N0gxMTYuNTQzWk0xMTYuNTQzIDUwLjUwMTlWNTAuNDg5N0gxMTUuMDQzVjUwLjUwMTlIMTE2LjU0M1pNMTE2LjU0MyA1MC41MTQxVjUwLjUwMTlIMTE1LjA0M1Y1MC41MTQxSDExNi41NDNaTTExNi41NDMgNTAuNTI2M1Y1MC41MTQxSDExNS4wNDNWNTAuNTI2M0gxMTYuNTQzWk0xMTYuNTQzIDUwLjUzODRWNTAuNTI2M0gxMTUuMDQzVjUwLjUzODRIMTE2LjU0M1pNMTE2LjU0MyA1MC41NTA1VjUwLjUzODRIMTE1LjA0M1Y1MC41NTA1SDExNi41NDNaTTExNi41NDMgNTAuNTYyNlY1MC41NTA1SDExNS4wNDNWNTAuNTYyNkgxMTYuNTQzWk0xMTYuNTQzIDUwLjU3NDdWNTAuNTYyNkgxMTUuMDQzVjUwLjU3NDdIMTE2LjU0M1pNMTE2LjU0MyA1MC41ODY4VjUwLjU3NDdIMTE1LjA0M1Y1MC41ODY4SDExNi41NDNaTTExNi41NDMgNTAuNTk4OFY1MC41ODY4SDExNS4wNDNWNTAuNTk4OEgxMTYuNTQzWk0xMTYuNTQzIDUwLjYxMDhWNTAuNTk4OEgxMTUuMDQzVjUwLjYxMDhIMTE2LjU0M1pNMTE2LjU0MyA1MC42MjI4VjUwLjYxMDhIMTE1LjA0M1Y1MC42MjI4SDExNi41NDNaTTExNi41NDMgNTAuNjM0N1Y1MC42MjI4SDExNS4wNDNWNTAuNjM0N0gxMTYuNTQzWk0xMTQuMjkzIDUxLjM4NDdIMTE1Ljc5M1Y0OS44ODQ3SDExNC4yOTNWNTEuMzg0N1pNMTEzLjU0MyA1MC42MjI4VjUwLjYzNDdIMTE1LjA0M1Y1MC42MjI4SDExMy41NDNaTTExMy41NDMgNTAuNjEwOFY1MC42MjI4SDExNS4wNDNWNTAuNjEwOEgxMTMuNTQzWk0xMTMuNTQzIDUwLjU5ODhWNTAuNjEwOEgxMTUuMDQzVjUwLjU5ODhIMTEzLjU0M1pNMTEzLjU0MyA1MC41ODY4VjUwLjU5ODhIMTE1LjA0M1Y1MC41ODY4SDExMy41NDNaTTExMy41NDMgNTAuNTc0N1Y1MC41ODY4SDExNS4wNDNWNTAuNTc0N0gxMTMuNTQzWk0xMTMuNTQzIDUwLjU2MjZWNTAuNTc0N0gxMTUuMDQzVjUwLjU2MjZIMTEzLjU0M1pNMTEzLjU0MyA1MC41NTA1VjUwLjU2MjZIMTE1LjA0M1Y1MC41NTA1SDExMy41NDNaTTExMy41NDMgNTAuNTM4NFY1MC41NTA1SDExNS4wNDNWNTAuNTM4NEgxMTMuNTQzWk0xMTMuNTQzIDUwLjUyNjNWNTAuNTM4NEgxMTUuMDQzVjUwLjUyNjNIMTEzLjU0M1pNMTEzLjU0MyA1MC41MTQxVjUwLjUyNjNIMTE1LjA0M1Y1MC41MTQxSDExMy41NDNaTTExMy41NDMgNTAuNTAxOVY1MC41MTQxSDExNS4wNDNWNTAuNTAxOUgxMTMuNTQzWk0xMTMuNTQzIDUwLjQ4OTdWNTAuNTAxOUgxMTUuMDQzVjUwLjQ4OTdIMTEzLjU0M1pNMTEzLjU0MyA1MC40Nzc1VjUwLjQ4OTdIMTE1LjA0M1Y1MC40Nzc1SDExMy41NDNaTTExMy41NDMgNTAuNDY1MlY1MC40Nzc1SDExNS4wNDNWNTAuNDY1MkgxMTMuNTQzWk0xMTMuNTQzIDUwLjQ1MjlWNTAuNDY1MkgxMTUuMDQzVjUwLjQ1MjlIMTEzLjU0M1pNMTEzLjU0MyA1MC40NDA2VjUwLjQ1MjlIMTE1LjA0M1Y1MC40NDA2SDExMy41NDNaTTExMy41NDMgNTAuNDI4M1Y1MC40NDA2SDExNS4wNDNWNTAuNDI4M0gxMTMuNTQzWk0xMTMuNTQzIDUwLjQxNTlWNTAuNDI4M0gxMTUuMDQzVjUwLjQxNTlIMTEzLjU0M1pNMTEzLjU0MyA1MC40MDM1VjUwLjQxNTlIMTE1LjA0M1Y1MC40MDM1SDExMy41NDNaTTExMy41NDMgNTAuMzkxMVY1MC40MDM1SDExNS4wNDNWNTAuMzkxMUgxMTMuNTQzWk0xMTMuNTQzIDUwLjM3ODdWNTAuMzkxMUgxMTUuMDQzVjUwLjM3ODdIMTEzLjU0M1pNMTEzLjU0MyA1MC4zNjYzVjUwLjM3ODdIMTE1LjA0M1Y1MC4zNjYzSDExMy41NDNaTTExMy41NDMgNTAuMzUzOFY1MC4zNjYzSDExNS4wNDNWNTAuMzUzOEgxMTMuNTQzWk0xMTMuNTQzIDUwLjM0MTNWNTAuMzUzOEgxMTUuMDQzVjUwLjM0MTNIMTEzLjU0M1pNMTEzLjU0MyA1MC4zMjg4VjUwLjM0MTNIMTE1LjA0M1Y1MC4zMjg4SDExMy41NDNaTTExMy41NDMgNTAuMzE2MlY1MC4zMjg4SDExNS4wNDNWNTAuMzE2MkgxMTMuNTQzWk0xMTMuNTQzIDUwLjMwMzdWNTAuMzE2MkgxMTUuMDQzVjUwLjMwMzdIMTEzLjU0M1pNMTEzLjU0MyA1MC4yOTExVjUwLjMwMzdIMTE1LjA0M1Y1MC4yOTExSDExMy41NDNaTTExMy41NDMgNTAuMjc4NVY1MC4yOTExSDExNS4wNDNWNTAuMjc4NUgxMTMuNTQzWk0xMTMuNTQzIDUwLjI2NTlWNTAuMjc4NUgxMTUuMDQzVjUwLjI2NTlIMTEzLjU0M1pNMTEzLjU0MyA1MC4yNTMyVjUwLjI2NTlIMTE1LjA0M1Y1MC4yNTMySDExMy41NDNaTTExMy41NDMgNTAuMjQwNVY1MC4yNTMySDExNS4wNDNWNTAuMjQwNUgxMTMuNTQzWk0xMTMuNTQzIDUwLjIyNzhWNTAuMjQwNUgxMTUuMDQzVjUwLjIyNzhIMTEzLjU0M1pNMTEzLjU0MyA1MC4yMTUxVjUwLjIyNzhIMTE1LjA0M1Y1MC4yMTUxSDExMy41NDNaTTExMy41NDMgNTAuMjAyM1Y1MC4yMTUxSDExNS4wNDNWNTAuMjAyM0gxMTMuNTQzWk0xMTMuNTQzIDUwLjE4OTZWNTAuMjAyM0gxMTUuMDQzVjUwLjE4OTZIMTEzLjU0M1pNMTEzLjU0MyA1MC4xNzY4VjUwLjE4OTZIMTE1LjA0M1Y1MC4xNzY4SDExMy41NDNaTTExMy41NDMgNTAuMTYzOVY1MC4xNzY4SDExNS4wNDNWNTAuMTYzOUgxMTMuNTQzWk0xMTMuNTQzIDUwLjE1MTFWNTAuMTYzOUgxMTUuMDQzVjUwLjE1MTFIMTEzLjU0M1pNMTEzLjU0MyA1MC4xMzgyVjUwLjE1MTFIMTE1LjA0M1Y1MC4xMzgySDExMy41NDNaTTExMy41NDMgNTAuMTI1M1Y1MC4xMzgySDExNS4wNDNWNTAuMTI1M0gxMTMuNTQzWk0xMTMuNTQzIDUwLjExMjRWNTAuMTI1M0gxMTUuMDQzVjUwLjExMjRIMTEzLjU0M1pNMTEzLjU0MyA1MC4wOTk1VjUwLjExMjRIMTE1LjA0M1Y1MC4wOTk1SDExMy41NDNaTTExMy41NDMgNTAuMDg2NVY1MC4wOTk1SDExNS4wNDNWNTAuMDg2NUgxMTMuNTQzWk0xMTMuNTQzIDUwLjA3MzVWNTAuMDg2NUgxMTUuMDQzVjUwLjA3MzVIMTEzLjU0M1pNMTEzLjU0MyA1MC4wNjA1VjUwLjA3MzVIMTE1LjA0M1Y1MC4wNjA1SDExMy41NDNaTTExMy41NDMgNTAuMDQ3NVY1MC4wNjA1SDExNS4wNDNWNTAuMDQ3NUgxMTMuNTQzWk0xMTMuNTQzIDUwLjAzNDRWNTAuMDQ3NUgxMTUuMDQzVjUwLjAzNDRIMTEzLjU0M1pNMTEzLjU0MyA1MC4wMjE0VjUwLjAzNDRIMTE1LjA0M1Y1MC4wMjE0SDExMy41NDNaTTExMy41NDMgNTAuMDA4M1Y1MC4wMjE0SDExNS4wNDNWNTAuMDA4M0gxMTMuNTQzWk0xMTMuNTQzIDQ5Ljk5NTFWNTAuMDA4M0gxMTUuMDQzVjQ5Ljk5NTFIMTEzLjU0M1pNMTEzLjU0MyA0OS45ODJWNDkuOTk1MUgxMTUuMDQzVjQ5Ljk4MkgxMTMuNTQzWk0xMTMuNTQzIDQ5Ljk2ODhWNDkuOTgySDExNS4wNDNWNDkuOTY4OEgxMTMuNTQzWk0xMTMuNTQzIDQ5Ljk1NTZWNDkuOTY4OEgxMTUuMDQzVjQ5Ljk1NTZIMTEzLjU0M1pNMTEzLjU0MyA0OS45NDI0VjQ5Ljk1NTZIMTE1LjA0M1Y0OS45NDI0SDExMy41NDNaTTExMy41NDMgNDkuOTI5MlY0OS45NDI0SDExNS4wNDNWNDkuOTI5MkgxMTMuNTQzWk0xMTMuNTQzIDQ5LjkxNTlWNDkuOTI5MkgxMTUuMDQzVjQ5LjkxNTlIMTEzLjU0M1pNMTEzLjU0MyA0OS45MDI2VjQ5LjkxNTlIMTE1LjA0M1Y0OS45MDI2SDExMy41NDNaTTExMy41NDMgNDkuODg5M1Y0OS45MDI2SDExNS4wNDNWNDkuODg5M0gxMTMuNTQzWk0xMTMuNTQzIDQ5Ljg3NlY0OS44ODkzSDExNS4wNDNWNDkuODc2SDExMy41NDNaTTExMy41NDMgNDkuODYyNlY0OS44NzZIMTE1LjA0M1Y0OS44NjI2SDExMy41NDNaTTExMy41NDMgNDkuODQ5MlY0OS44NjI2SDExNS4wNDNWNDkuODQ5MkgxMTMuNTQzWk0xMTMuNTQzIDQ5LjgzNThWNDkuODQ5MkgxMTUuMDQzVjQ5LjgzNThIMTEzLjU0M1pNMTEzLjU0MyA0OS44MjI0VjQ5LjgzNThIMTE1LjA0M1Y0OS44MjI0SDExMy41NDNaTTExMy41NDMgNDkuODA4OVY0OS44MjI0SDExNS4wNDNWNDkuODA4OUgxMTMuNTQzWk0xMTMuNTQzIDQ5Ljc5NTVWNDkuODA4OUgxMTUuMDQzVjQ5Ljc5NTVIMTEzLjU0M1pNMTEzLjU0MyA0OS43ODJWNDkuNzk1NUgxMTUuMDQzVjQ5Ljc4MkgxMTMuNTQzWk0xMTMuNTQzIDQ5Ljc2ODRWNDkuNzgySDExNS4wNDNWNDkuNzY4NEgxMTMuNTQzWk0xMTMuNTQzIDQ5Ljc1NDlWNDkuNzY4NEgxMTUuMDQzVjQ5Ljc1NDlIMTEzLjU0M1pNMTEzLjU0MyA0OS43NDEzVjQ5Ljc1NDlIMTE1LjA0M1Y0OS43NDEzSDExMy41NDNaTTExMy41NDMgNDkuNzI3N1Y0OS43NDEzSDExNS4wNDNWNDkuNzI3N0gxMTMuNTQzWk0xMTMuNTQzIDQ5LjcxNDFWNDkuNzI3N0gxMTUuMDQzVjQ5LjcxNDFIMTEzLjU0M1pNMTEzLjU0MyA0OS43MDA1VjQ5LjcxNDFIMTE1LjA0M1Y0OS43MDA1SDExMy41NDNaTTExMy41NDMgNDkuNjg2OFY0OS43MDA1SDExNS4wNDNWNDkuNjg2OEgxMTMuNTQzWk0xMTMuNTQzIDQ5LjY3MzFWNDkuNjg2OEgxMTUuMDQzVjQ5LjY3MzFIMTEzLjU0M1pNMTEzLjU0MyA0OS42NTk0VjQ5LjY3MzFIMTE1LjA0M1Y0OS42NTk0SDExMy41NDNaTTExMy41NDMgNDkuNjQ1N1Y0OS42NTk0SDExNS4wNDNWNDkuNjQ1N0gxMTMuNTQzWk0xMTMuNTQzIDQ5LjYzMTlWNDkuNjQ1N0gxMTUuMDQzVjQ5LjYzMTlIMTEzLjU0M1pNMTEzLjU0MyA0OS42MTgyVjQ5LjYzMTlIMTE1LjA0M1Y0OS42MTgySDExMy41NDNaTTExMy41NDMgNDkuNjA0NFY0OS42MTgySDExNS4wNDNWNDkuNjA0NEgxMTMuNTQzWk0xMTMuNTQzIDQ5LjU5MDVWNDkuNjA0NEgxMTUuMDQzVjQ5LjU5MDVIMTEzLjU0M1pNMTEzLjU0MyA0OS41NzY3VjQ5LjU5MDVIMTE1LjA0M1Y0OS41NzY3SDExMy41NDNaTTExMy41NDMgNDkuNTYyOFY0OS41NzY3SDExNS4wNDNWNDkuNTYyOEgxMTMuNTQzWk0xMTMuNTQzIDQ5LjU0ODlWNDkuNTYyOEgxMTUuMDQzVjQ5LjU0ODlIMTEzLjU0M1pNMTEzLjU0MyA0OS41MzVWNDkuNTQ4OUgxMTUuMDQzVjQ5LjUzNUgxMTMuNTQzWk0xMTMuNTQzIDQ5LjUyMTFWNDkuNTM1SDExNS4wNDNWNDkuNTIxMUgxMTMuNTQzWk0xMTMuNTQzIDQ5LjUwNzFWNDkuNTIxMUgxMTUuMDQzVjQ5LjUwNzFIMTEzLjU0M1pNMTEzLjU0MyA0OS40OTMxVjQ5LjUwNzFIMTE1LjA0M1Y0OS40OTMxSDExMy41NDNaTTExMy41NDMgNDkuNDc5MVY0OS40OTMxSDExNS4wNDNWNDkuNDc5MUgxMTMuNTQzWk0xMTMuNTQzIDQ5LjQ2NTFWNDkuNDc5MUgxMTUuMDQzVjQ5LjQ2NTFIMTEzLjU0M1pNMTEzLjU0MyA0OS40NTFWNDkuNDY1MUgxMTUuMDQzVjQ5LjQ1MUgxMTMuNTQzWk0xMTMuNTQzIDQ5LjQzNjlWNDkuNDUxSDExNS4wNDNWNDkuNDM2OUgxMTMuNTQzWk0xMTMuNTQzIDQ5LjQyMjhWNDkuNDM2OUgxMTUuMDQzVjQ5LjQyMjhIMTEzLjU0M1pNMTEzLjU0MyA0OS40MDg3VjQ5LjQyMjhIMTE1LjA0M1Y0OS40MDg3SDExMy41NDNaTTExMy41NDMgNDkuMzk0NlY0OS40MDg3SDExNS4wNDNWNDkuMzk0NkgxMTMuNTQzWk0xMTMuNTQzIDQ5LjM4MDRWNDkuMzk0NkgxMTUuMDQzVjQ5LjM4MDRIMTEzLjU0M1pNMTEzLjU0MyA0OS4zNjYyVjQ5LjM4MDRIMTE1LjA0M1Y0OS4zNjYySDExMy41NDNaTTExMy41NDMgNDkuMzUyVjQ5LjM2NjJIMTE1LjA0M1Y0OS4zNTJIMTEzLjU0M1pNMTEzLjU0MyA0OS4zMzc3VjQ5LjM1MkgxMTUuMDQzVjQ5LjMzNzdIMTEzLjU0M1pNMTEzLjU0MyA0OS4zMjM0VjQ5LjMzNzdIMTE1LjA0M1Y0OS4zMjM0SDExMy41NDNaTTExMy41NDMgNDkuMzA5MlY0OS4zMjM0SDExNS4wNDNWNDkuMzA5MkgxMTMuNTQzWk0xMTMuNTQzIDQ5LjI5NDhWNDkuMzA5MkgxMTUuMDQzVjQ5LjI5NDhIMTEzLjU0M1pNMTEzLjU0MyA0OS4yODA1VjQ5LjI5NDhIMTE1LjA0M1Y0OS4yODA1SDExMy41NDNaTTExMy41NDMgNDkuMjY2MVY0OS4yODA1SDExNS4wNDNWNDkuMjY2MUgxMTMuNTQzWk0xMTMuNTQzIDQ5LjI1MThWNDkuMjY2MUgxMTUuMDQzVjQ5LjI1MThIMTEzLjU0M1pNMTEzLjU0MyA0OS4yMzczVjQ5LjI1MThIMTE1LjA0M1Y0OS4yMzczSDExMy41NDNaTTExMy41NDMgNDkuMjIyOVY0OS4yMzczSDExNS4wNDNWNDkuMjIyOUgxMTMuNTQzWk0xMTMuNTQzIDQ5LjIwODVWNDkuMjIyOUgxMTUuMDQzVjQ5LjIwODVIMTEzLjU0M1pNMTEzLjU0MyA0OS4xOTRWNDkuMjA4NUgxMTUuMDQzVjQ5LjE5NEgxMTMuNTQzWk0xMTMuNTQzIDQ5LjE3OTVWNDkuMTk0SDExNS4wNDNWNDkuMTc5NUgxMTMuNTQzWk0xMTMuNTQzIDQ5LjE2NVY0OS4xNzk1SDExNS4wNDNWNDkuMTY1SDExMy41NDNaTTExMy41NDMgNDkuMTUwNFY0OS4xNjVIMTE1LjA0M1Y0OS4xNTA0SDExMy41NDNaTTExMy41NDMgNDkuMTM1OFY0OS4xNTA0SDExNS4wNDNWNDkuMTM1OEgxMTMuNTQzWk0xMTMuNTQzIDQ5LjEyMTJWNDkuMTM1OEgxMTUuMDQzVjQ5LjEyMTJIMTEzLjU0M1pNMTEzLjU0MyA0OS4xMDY2VjQ5LjEyMTJIMTE1LjA0M1Y0OS4xMDY2SDExMy41NDNaTTExMy41NDMgNDkuMDkyVjQ5LjEwNjZIMTE1LjA0M1Y0OS4wOTJIMTEzLjU0M1pNMTEzLjU0MyA0OS4wNzczVjQ5LjA5MkgxMTUuMDQzVjQ5LjA3NzNIMTEzLjU0M1pNMTEzLjU0MyA0OS4wNjI2VjQ5LjA3NzNIMTE1LjA0M1Y0OS4wNjI2SDExMy41NDNaTTExMy41NDMgNDkuMDQ3OVY0OS4wNjI2SDExNS4wNDNWNDkuMDQ3OUgxMTMuNTQzWk0xMTMuNTQzIDQ5LjAzMzJWNDkuMDQ3OUgxMTUuMDQzVjQ5LjAzMzJIMTEzLjU0M1pNMTEzLjU0MyA0OS4wMTg0VjQ5LjAzMzJIMTE1LjA0M1Y0OS4wMTg0SDExMy41NDNaTTExMy41NDMgNDkuMDAzNlY0OS4wMTg0SDExNS4wNDNWNDkuMDAzNkgxMTMuNTQzWk0xMTMuNTQzIDQ4Ljk4ODhWNDkuMDAzNkgxMTUuMDQzVjQ4Ljk4ODhIMTEzLjU0M1pNMTEzLjU0MyA0OC45NzRWNDguOTg4OEgxMTUuMDQzVjQ4Ljk3NEgxMTMuNTQzWk0xMTMuNTQzIDQ4Ljk1OTJWNDguOTc0SDExNS4wNDNWNDguOTU5MkgxMTMuNTQzWk0xMTMuNTQzIDQ4Ljk0NDNWNDguOTU5MkgxMTUuMDQzVjQ4Ljk0NDNIMTEzLjU0M1pNMTEzLjU0MyA0OC45Mjk0VjQ4Ljk0NDNIMTE1LjA0M1Y0OC45Mjk0SDExMy41NDNaTTExMy41NDMgNDguOTE0NVY0OC45Mjk0SDExNS4wNDNWNDguOTE0NUgxMTMuNTQzWk0xMTMuNTQzIDQ4Ljg5OTVWNDguOTE0NUgxMTUuMDQzVjQ4Ljg5OTVIMTEzLjU0M1pNMTEzLjU0MyA0OC44ODQ2VjQ4Ljg5OTVIMTE1LjA0M1Y0OC44ODQ2SDExMy41NDNaTTExMy41NDMgNDguODY5NlY0OC44ODQ2SDExNS4wNDNWNDguODY5NkgxMTMuNTQzWk0xMTMuNTQzIDQ4Ljg1NDVWNDguODY5NkgxMTUuMDQzVjQ4Ljg1NDVIMTEzLjU0M1pNMTEzLjU0MyA0OC44Mzk1VjQ4Ljg1NDVIMTE1LjA0M1Y0OC44Mzk1SDExMy41NDNaTTExMy41NDMgNDguODI0NVY0OC44Mzk1SDExNS4wNDNWNDguODI0NUgxMTMuNTQzWk0xMTMuNTQzIDQ4LjgwOTRWNDguODI0NUgxMTUuMDQzVjQ4LjgwOTRIMTEzLjU0M1pNMTEzLjU0MyA0OC43OTQzVjQ4LjgwOTRIMTE1LjA0M1Y0OC43OTQzSDExMy41NDNaTTExMy41NDMgNDguNzc5MVY0OC43OTQzSDExNS4wNDNWNDguNzc5MUgxMTMuNTQzWk0xMTMuNTQzIDQ4Ljc2NFY0OC43NzkxSDExNS4wNDNWNDguNzY0SDExMy41NDNaTTExMy41NDMgNDguNzQ4OFY0OC43NjRIMTE1LjA0M1Y0OC43NDg4SDExMy41NDNaTTExMy41NDMgNDguNzMzNlY0OC43NDg4SDExNS4wNDNWNDguNzMzNkgxMTMuNTQzWk0xMTMuNTQzIDQ4LjcxODRWNDguNzMzNkgxMTUuMDQzVjQ4LjcxODRIMTEzLjU0M1pNMTEzLjU0MyA0OC43MDMxVjQ4LjcxODRIMTE1LjA0M1Y0OC43MDMxSDExMy41NDNaTTExMy41NDMgNDguNjg3OFY0OC43MDMxSDExNS4wNDNWNDguNjg3OEgxMTMuNTQzWk0xMTMuNTQzIDQ4LjY3MjZWNDguNjg3OEgxMTUuMDQzVjQ4LjY3MjZIMTEzLjU0M1pNMTEzLjU0MyA0OC42NTcyVjQ4LjY3MjZIMTE1LjA0M1Y0OC42NTcySDExMy41NDNaTTExMy41NDMgNDguNjQxOVY0OC42NTcySDExNS4wNDNWNDguNjQxOUgxMTMuNTQzWk0xMTMuNTQzIDQ4LjYyNjVWNDguNjQxOUgxMTUuMDQzVjQ4LjYyNjVIMTEzLjU0M1pNMTEzLjU0MyA0OC42MTExVjQ4LjYyNjVIMTE1LjA0M1Y0OC42MTExSDExMy41NDNaTTExMy41NDMgNDguNTk1N1Y0OC42MTExSDExNS4wNDNWNDguNTk1N0gxMTMuNTQzWk0xMTMuNTQzIDQ4LjU4MDNWNDguNTk1N0gxMTUuMDQzVjQ4LjU4MDNIMTEzLjU0M1pNMTEzLjU0MyA0OC41NjQ4VjQ4LjU4MDNIMTE1LjA0M1Y0OC41NjQ4SDExMy41NDNaTTExMy41NDMgNDguNTQ5NFY0OC41NjQ4SDExNS4wNDNWNDguNTQ5NEgxMTMuNTQzWk0xMTMuNTQzIDQ4LjUzMzlWNDguNTQ5NEgxMTUuMDQzVjQ4LjUzMzlIMTEzLjU0M1pNMTEzLjU0MyA0OC41MTgzVjQ4LjUzMzlIMTE1LjA0M1Y0OC41MTgzSDExMy41NDNaTTExMy41NDMgNDguNTAyOFY0OC41MTgzSDExNS4wNDNWNDguNTAyOEgxMTMuNTQzWk0xMTMuNTQzIDQ4LjQ4NzJWNDguNTAyOEgxMTUuMDQzVjQ4LjQ4NzJIMTEzLjU0M1pNMTEzLjU0MyA0OC40NzE2VjQ4LjQ4NzJIMTE1LjA0M1Y0OC40NzE2SDExMy41NDNaTTExMy41NDMgNDguNDU2VjQ4LjQ3MTZIMTE1LjA0M1Y0OC40NTZIMTEzLjU0M1pNMTEzLjU0MyA0OC40NDAzVjQ4LjQ1NkgxMTUuMDQzVjQ4LjQ0MDNIMTEzLjU0M1pNMTEzLjU0MyA0OC40MjQ3VjQ4LjQ0MDNIMTE1LjA0M1Y0OC40MjQ3SDExMy41NDNaTTExMy41NDMgNDguNDA5VjQ4LjQyNDdIMTE1LjA0M1Y0OC40MDlIMTEzLjU0M1pNMTEzLjU0MyA0OC4zOTMzVjQ4LjQwOUgxMTUuMDQzVjQ4LjM5MzNIMTEzLjU0M1pNMTEzLjU0MyA0OC4zNzc1VjQ4LjM5MzNIMTE1LjA0M1Y0OC4zNzc1SDExMy41NDNaTTExMy41NDMgNDguMzYxOFY0OC4zNzc1SDExNS4wNDNWNDguMzYxOEgxMTMuNTQzWk0xMTMuNTQzIDQ4LjM0NlY0OC4zNjE4SDExNS4wNDNWNDguMzQ2SDExMy41NDNaTTExMy41NDMgNDguMzMwMlY0OC4zNDZIMTE1LjA0M1Y0OC4zMzAySDExMy41NDNaTTExMy41NDMgNDguMzE0M1Y0OC4zMzAySDExNS4wNDNWNDguMzE0M0gxMTMuNTQzWk0xMTMuNTQzIDQ4LjI5ODVWNDguMzE0M0gxMTUuMDQzVjQ4LjI5ODVIMTEzLjU0M1pNMTEzLjU0MyA0OC4yODI2VjQ4LjI5ODVIMTE1LjA0M1Y0OC4yODI2SDExMy41NDNaTTExMy41NDMgNDguMjY2N1Y0OC4yODI2SDExNS4wNDNWNDguMjY2N0gxMTMuNTQzWk0xMTMuNTQzIDQ4LjI1MDhWNDguMjY2N0gxMTUuMDQzVjQ4LjI1MDhIMTEzLjU0M1pNMTEzLjU0MyA0OC4yMzQ4VjQ4LjI1MDhIMTE1LjA0M1Y0OC4yMzQ4SDExMy41NDNaTTExMy41NDMgNDguMjE4OVY0OC4yMzQ4SDExNS4wNDNWNDguMjE4OUgxMTMuNTQzWk0xMTMuNTQzIDQ4LjIwMjlWNDguMjE4OUgxMTUuMDQzVjQ4LjIwMjlIMTEzLjU0M1pNMTEzLjU0MyA0OC4xODY5VjQ4LjIwMjlIMTE1LjA0M1Y0OC4xODY5SDExMy41NDNaTTExMy41NDMgNDguMTcwOFY0OC4xODY5SDExNS4wNDNWNDguMTcwOEgxMTMuNTQzWk0xMTMuNTQzIDQ4LjE1NDdWNDguMTcwOEgxMTUuMDQzVjQ4LjE1NDdIMTEzLjU0M1pNMTEzLjU0MyA0OC4xMzg3VjQ4LjE1NDdIMTE1LjA0M1Y0OC4xMzg3SDExMy41NDNaTTExMy41NDMgNDguMTIyNVY0OC4xMzg3SDExNS4wNDNWNDguMTIyNUgxMTMuNTQzWk0xMTMuNTQzIDQ4LjEwNjRWNDguMTIyNUgxMTUuMDQzVjQ4LjEwNjRIMTEzLjU0M1pNMTEzLjU0MyA0OC4wOTAzVjQ4LjEwNjRIMTE1LjA0M1Y0OC4wOTAzSDExMy41NDNaTTExMy41NDMgNDguMDc0MVY0OC4wOTAzSDExNS4wNDNWNDguMDc0MUgxMTMuNTQzWk0xMTMuNTQzIDQ4LjA1NzlWNDguMDc0MUgxMTUuMDQzVjQ4LjA1NzlIMTEzLjU0M1pNMTEzLjU0MyA0OC4wNDE2VjQ4LjA1NzlIMTE1LjA0M1Y0OC4wNDE2SDExMy41NDNaTTExMy41NDMgNDguMDI1NFY0OC4wNDE2SDExNS4wNDNWNDguMDI1NEgxMTMuNTQzWk0xMTMuNTQzIDQ4LjAwOTFWNDguMDI1NEgxMTUuMDQzVjQ4LjAwOTFIMTEzLjU0M1pNMTEzLjU0MyA0Ny45OTI4VjQ4LjAwOTFIMTE1LjA0M1Y0Ny45OTI4SDExMy41NDNaTTExMy41NDMgNDcuOTc2NVY0Ny45OTI4SDExNS4wNDNWNDcuOTc2NUgxMTMuNTQzWk0xMTMuNTQzIDQ3Ljk2MDJWNDcuOTc2NUgxMTUuMDQzVjQ3Ljk2MDJIMTEzLjU0M1pNMTEzLjU0MyA0Ny45NDM4VjQ3Ljk2MDJIMTE1LjA0M1Y0Ny45NDM4SDExMy41NDNaTTExMy41NDMgNDcuOTI3NFY0Ny45NDM4SDExNS4wNDNWNDcuOTI3NEgxMTMuNTQzWk0xMTMuNTQzIDQ3LjkxMVY0Ny45Mjc0SDExNS4wNDNWNDcuOTExSDExMy41NDNaTTExMy41NDMgNDcuODk0NVY0Ny45MTFIMTE1LjA0M1Y0Ny44OTQ1SDExMy41NDNaTTExMy41NDMgNDcuODc4MVY0Ny44OTQ1SDExNS4wNDNWNDcuODc4MUgxMTMuNTQzWk0xMTMuNTQzIDQ3Ljg2MTZWNDcuODc4MUgxMTUuMDQzVjQ3Ljg2MTZIMTEzLjU0M1pNMTEzLjU0MyA0Ny44NDUxVjQ3Ljg2MTZIMTE1LjA0M1Y0Ny44NDUxSDExMy41NDNaTTExMy41NDMgNDcuODI4NlY0Ny44NDUxSDExNS4wNDNWNDcuODI4NkgxMTMuNTQzWk0xMTMuNTQzIDQ3LjgxMlY0Ny44Mjg2SDExNS4wNDNWNDcuODEySDExMy41NDNaTTExMy41NDMgNDcuNzk1NFY0Ny44MTJIMTE1LjA0M1Y0Ny43OTU0SDExMy41NDNaTTExMy41NDMgNDcuNzc4OFY0Ny43OTU0SDExNS4wNDNWNDcuNzc4OEgxMTMuNTQzWk0xMTMuNTQzIDQ3Ljc2MjJWNDcuNzc4OEgxMTUuMDQzVjQ3Ljc2MjJIMTEzLjU0M1pNMTEzLjU0MyA0Ny43NDU1VjQ3Ljc2MjJIMTE1LjA0M1Y0Ny43NDU1SDExMy41NDNaTTExMy41NDMgNDcuNzI4OVY0Ny43NDU1SDExNS4wNDNWNDcuNzI4OUgxMTMuNTQzWk0xMTMuNTQzIDQ3LjcxMjJWNDcuNzI4OUgxMTUuMDQzVjQ3LjcxMjJIMTEzLjU0M1pNMTEzLjU0MyA0Ny42OTU1VjQ3LjcxMjJIMTE1LjA0M1Y0Ny42OTU1SDExMy41NDNaTTExMy41NDMgNDcuNjc4N1Y0Ny42OTU1SDExNS4wNDNWNDcuNjc4N0gxMTMuNTQzWk0xMTMuNTQzIDQ3LjY2MlY0Ny42Nzg3SDExNS4wNDNWNDcuNjYySDExMy41NDNaTTExMy41NDMgNDcuNjQ1MlY0Ny42NjJIMTE1LjA0M1Y0Ny42NDUySDExMy41NDNaTTExMy41NDMgNDcuNjI4NFY0Ny42NDUySDExNS4wNDNWNDcuNjI4NEgxMTMuNTQzWk0xMTMuNTQzIDQ3LjYxMTVWNDcuNjI4NEgxMTUuMDQzVjQ3LjYxMTVIMTEzLjU0M1pNMTEzLjU0MyA0Ny41OTQ3VjQ3LjYxMTVIMTE1LjA0M1Y0Ny41OTQ3SDExMy41NDNaTTExMy41NDMgNDcuNTc3OFY0Ny41OTQ3SDExNS4wNDNWNDcuNTc3OEgxMTMuNTQzWk0xMTMuNTQzIDQ3LjU2MDlWNDcuNTc3OEgxMTUuMDQzVjQ3LjU2MDlIMTEzLjU0M1pNMTEzLjU0MyA0Ny41NDRWNDcuNTYwOUgxMTUuMDQzVjQ3LjU0NEgxMTMuNTQzWk0xMTMuNTQzIDQ3LjUyN1Y0Ny41NDRIMTE1LjA0M1Y0Ny41MjdIMTEzLjU0M1pNMTEzLjU0MyA0Ny41MVY0Ny41MjdIMTE1LjA0M1Y0Ny41MUgxMTMuNTQzWk0xMTMuNTQzIDQ3LjQ5M1Y0Ny41MUgxMTUuMDQzVjQ3LjQ5M0gxMTMuNTQzWk0xMTMuNTQzIDQ3LjQ3NlY0Ny40OTNIMTE1LjA0M1Y0Ny40NzZIMTEzLjU0M1pNMTEzLjU0MyA0Ny40NTlWNDcuNDc2SDExNS4wNDNWNDcuNDU5SDExMy41NDNaTTExMy41NDMgNDcuNDQxOVY0Ny40NTlIMTE1LjA0M1Y0Ny40NDE5SDExMy41NDNaTTExMy41NDMgNDcuNDI0OFY0Ny40NDE5SDExNS4wNDNWNDcuNDI0OEgxMTMuNTQzWk0xMTMuNTQzIDQ3LjQwNzdWNDcuNDI0OEgxMTUuMDQzVjQ3LjQwNzdIMTEzLjU0M1pNMTEzLjU0MyA0Ny4zOTA2VjQ3LjQwNzdIMTE1LjA0M1Y0Ny4zOTA2SDExMy41NDNaTTExMy41NDMgNDcuMzczNFY0Ny4zOTA2SDExNS4wNDNWNDcuMzczNEgxMTMuNTQzWk0xMTMuNTQzIDQ3LjM1NjJWNDcuMzczNEgxMTUuMDQzVjQ3LjM1NjJIMTEzLjU0M1pNMTEzLjU0MyA0Ny4zMzlWNDcuMzU2MkgxMTUuMDQzVjQ3LjMzOUgxMTMuNTQzWk0xMTMuNTQzIDQ3LjMyMThWNDcuMzM5SDExNS4wNDNWNDcuMzIxOEgxMTMuNTQzWk0xMTMuNTQzIDQ3LjMwNDVWNDcuMzIxOEgxMTUuMDQzVjQ3LjMwNDVIMTEzLjU0M1pNMTEzLjU0MyA0Ny4yODcyVjQ3LjMwNDVIMTE1LjA0M1Y0Ny4yODcySDExMy41NDNaTTExMy41NDMgNDcuMjY5OVY0Ny4yODcySDExNS4wNDNWNDcuMjY5OUgxMTMuNTQzWk0xMTMuNTQzIDQ3LjI1MjZWNDcuMjY5OUgxMTUuMDQzVjQ3LjI1MjZIMTEzLjU0M1pNMTEzLjU0MyA0Ny4yMzUzVjQ3LjI1MjZIMTE1LjA0M1Y0Ny4yMzUzSDExMy41NDNaTTExMy41NDMgNDcuMjE3OVY0Ny4yMzUzSDExNS4wNDNWNDcuMjE3OUgxMTMuNTQzWk0xMTMuNTQzIDQ3LjIwMDVWNDcuMjE3OUgxMTUuMDQzVjQ3LjIwMDVIMTEzLjU0M1pNMTEzLjU0MyA0Ny4xODMxVjQ3LjIwMDVIMTE1LjA0M1Y0Ny4xODMxSDExMy41NDNaTTExMy41NDMgNDcuMTY1NlY0Ny4xODMxSDExNS4wNDNWNDcuMTY1NkgxMTMuNTQzWk0xMTMuNTQzIDQ3LjE0ODJWNDcuMTY1NkgxMTUuMDQzVjQ3LjE0ODJIMTEzLjU0M1pNMTEzLjU0MyA0Ny4xMzA3VjQ3LjE0ODJIMTE1LjA0M1Y0Ny4xMzA3SDExMy41NDNaTTExMy41NDMgNDcuMTEzMlY0Ny4xMzA3SDExNS4wNDNWNDcuMTEzMkgxMTMuNTQzWk0xMTMuNTQzIDQ3LjA5NTZWNDcuMTEzMkgxMTUuMDQzVjQ3LjA5NTZIMTEzLjU0M1pNMTEzLjU0MyA0Ny4wNzgxVjQ3LjA5NTZIMTE1LjA0M1Y0Ny4wNzgxSDExMy41NDNaTTExMy41NDMgNDcuMDYwNVY0Ny4wNzgxSDExNS4wNDNWNDcuMDYwNUgxMTMuNTQzWk0xMTMuNTQzIDQ3LjA0MjlWNDcuMDYwNUgxMTUuMDQzVjQ3LjA0MjlIMTEzLjU0M1pNMTEzLjU0MyA0Ny4wMjUzVjQ3LjA0MjlIMTE1LjA0M1Y0Ny4wMjUzSDExMy41NDNaTTExMy41NDMgNDcuMDA3NlY0Ny4wMjUzSDExNS4wNDNWNDcuMDA3NkgxMTMuNTQzWk0xMTMuNTQzIDQ2Ljk4OTlWNDcuMDA3NkgxMTUuMDQzVjQ2Ljk4OTlIMTEzLjU0M1pNMTEzLjU0MyA0Ni45NzIyVjQ2Ljk4OTlIMTE1LjA0M1Y0Ni45NzIySDExMy41NDNaTTExMy41NDMgNDYuOTU0NVY0Ni45NzIySDExNS4wNDNWNDYuOTU0NUgxMTMuNTQzWk0xMTMuNTQzIDQ2LjkzNjhWNDYuOTU0NUgxMTUuMDQzVjQ2LjkzNjhIMTEzLjU0M1pNMTEzLjU0MyA0Ni45MTlWNDYuOTM2OEgxMTUuMDQzVjQ2LjkxOUgxMTMuNTQzWk0xMTMuNTQzIDQ2LjkwMTJWNDYuOTE5SDExNS4wNDNWNDYuOTAxMkgxMTMuNTQzWk0xMTMuNTQzIDQ2Ljg4MzRWNDYuOTAxMkgxMTUuMDQzVjQ2Ljg4MzRIMTEzLjU0M1pNMTEzLjU0MyA0Ni44NjU2VjQ2Ljg4MzRIMTE1LjA0M1Y0Ni44NjU2SDExMy41NDNaTTExMy41NDMgNDYuODQ3N1Y0Ni44NjU2SDExNS4wNDNWNDYuODQ3N0gxMTMuNTQzWk0xMTMuNTQzIDQ2LjgyOThWNDYuODQ3N0gxMTUuMDQzVjQ2LjgyOThIMTEzLjU0M1pNMTEzLjU0MyA0Ni44MTE5VjQ2LjgyOThIMTE1LjA0M1Y0Ni44MTE5SDExMy41NDNaTTExMy41NDMgNDYuNzk0VjQ2LjgxMTlIMTE1LjA0M1Y0Ni43OTRIMTEzLjU0M1pNMTEzLjU0MyA0Ni43NzZWNDYuNzk0SDExNS4wNDNWNDYuNzc2SDExMy41NDNaTTExMy41NDMgNDYuNzU4MVY0Ni43NzZIMTE1LjA0M1Y0Ni43NTgxSDExMy41NDNaTTExMy41NDMgNDYuNzQwMVY0Ni43NTgxSDExNS4wNDNWNDYuNzQwMUgxMTMuNTQzWk0xMTMuNTQzIDQ2LjcyMlY0Ni43NDAxSDExNS4wNDNWNDYuNzIySDExMy41NDNaTTExMy41NDMgNDYuNzA0VjQ2LjcyMkgxMTUuMDQzVjQ2LjcwNEgxMTMuNTQzWk0xMTMuNTQzIDQ2LjY4NTlWNDYuNzA0SDExNS4wNDNWNDYuNjg1OUgxMTMuNTQzWk0xMTMuNTQzIDQ2LjY2NzhWNDYuNjg1OUgxMTUuMDQzVjQ2LjY2NzhIMTEzLjU0M1pNMTEzLjU0MyA0Ni42NDk3VjQ2LjY2NzhIMTE1LjA0M1Y0Ni42NDk3SDExMy41NDNaTTExMy41NDMgNDYuNjMxNlY0Ni42NDk3SDExNS4wNDNWNDYuNjMxNkgxMTMuNTQzWk0xMTMuNTQzIDQ2LjYxMzRWNDYuNjMxNkgxMTUuMDQzVjQ2LjYxMzRIMTEzLjU0M1pNMTEzLjU0MyA0Ni41OTUyVjQ2LjYxMzRIMTE1LjA0M1Y0Ni41OTUySDExMy41NDNaTTExMy41NDMgNDYuNTc3VjQ2LjU5NTJIMTE1LjA0M1Y0Ni41NzdIMTEzLjU0M1pNMTEzLjU0MyA0Ni41NTg4VjQ2LjU3N0gxMTUuMDQzVjQ2LjU1ODhIMTEzLjU0M1pNMTEzLjU0MyA0Ni41NDA1VjQ2LjU1ODhIMTE1LjA0M1Y0Ni41NDA1SDExMy41NDNaTTExMy41NDMgNDYuNTIyMlY0Ni41NDA1SDExNS4wNDNWNDYuNTIyMkgxMTMuNTQzWk0xMTMuNTQzIDQ2LjUwMzlWNDYuNTIyMkgxMTUuMDQzVjQ2LjUwMzlIMTEzLjU0M1pNMTEzLjU0MyA0Ni40ODU2VjQ2LjUwMzlIMTE1LjA0M1Y0Ni40ODU2SDExMy41NDNaTTExMy41NDMgNDYuNDY3MlY0Ni40ODU2SDExNS4wNDNWNDYuNDY3MkgxMTMuNTQzWk0xMTMuNTQzIDQ2LjQ0ODlWNDYuNDY3MkgxMTUuMDQzVjQ2LjQ0ODlIMTEzLjU0M1pNMTEzLjU0MyA0Ni40MzA1VjQ2LjQ0ODlIMTE1LjA0M1Y0Ni40MzA1SDExMy41NDNaTTExMy41NDMgNDYuNDEyVjQ2LjQzMDVIMTE1LjA0M1Y0Ni40MTJIMTEzLjU0M1pNMTEzLjU0MyA0Ni4zOTM2VjQ2LjQxMkgxMTUuMDQzVjQ2LjM5MzZIMTEzLjU0M1pNMTEzLjU0MyA0Ni4zNzUxVjQ2LjM5MzZIMTE1LjA0M1Y0Ni4zNzUxSDExMy41NDNaTTExMy41NDMgNDYuMzU2NlY0Ni4zNzUxSDExNS4wNDNWNDYuMzU2NkgxMTMuNTQzWk0xMTMuNTQzIDQ2LjMzODFWNDYuMzU2NkgxMTUuMDQzVjQ2LjMzODFIMTEzLjU0M1pNMTEzLjU0MyA0Ni4zMTk2VjQ2LjMzODFIMTE1LjA0M1Y0Ni4zMTk2SDExMy41NDNaTTExMy41NDMgNDYuMzAxVjQ2LjMxOTZIMTE1LjA0M1Y0Ni4zMDFIMTEzLjU0M1pNMTEzLjU0MyA0Ni4yODI0VjQ2LjMwMUgxMTUuMDQzVjQ2LjI4MjRIMTEzLjU0M1pNMTEzLjU0MyA0Ni4yNjM4VjQ2LjI4MjRIMTE1LjA0M1Y0Ni4yNjM4SDExMy41NDNaTTExMy41NDMgNDYuMjQ1MlY0Ni4yNjM4SDExNS4wNDNWNDYuMjQ1MkgxMTMuNTQzWk0xMTMuNTQzIDQ2LjIyNjVWNDYuMjQ1MkgxMTUuMDQzVjQ2LjIyNjVIMTEzLjU0M1pNMTEzLjU0MyA0Ni4yMDc5VjQ2LjIyNjVIMTE1LjA0M1Y0Ni4yMDc5SDExMy41NDNaTTExMy41NDMgNDYuMTg5MlY0Ni4yMDc5SDExNS4wNDNWNDYuMTg5MkgxMTMuNTQzWk0xMTMuNTQzIDQ2LjE3MDRWNDYuMTg5MkgxMTUuMDQzVjQ2LjE3MDRIMTEzLjU0M1pNMTEzLjU0MyA0Ni4xNTE3VjQ2LjE3MDRIMTE1LjA0M1Y0Ni4xNTE3SDExMy41NDNaTTExMy41NDMgNDYuMTMyOVY0Ni4xNTE3SDExNS4wNDNWNDYuMTMyOUgxMTMuNTQzWk0xMTMuNTQzIDQ2LjExNDFWNDYuMTMyOUgxMTUuMDQzVjQ2LjExNDFIMTEzLjU0M1pNMTEzLjU0MyA0Ni4wOTUzVjQ2LjExNDFIMTE1LjA0M1Y0Ni4wOTUzSDExMy41NDNaTTExMy41NDMgNDYuMDc2NVY0Ni4wOTUzSDExNS4wNDNWNDYuMDc2NUgxMTMuNTQzWk0xMTMuNTQzIDQ2LjA1NzZWNDYuMDc2NUgxMTUuMDQzVjQ2LjA1NzZIMTEzLjU0M1pNMTEzLjU0MyA0Ni4wMzg3VjQ2LjA1NzZIMTE1LjA0M1Y0Ni4wMzg3SDExMy41NDNaTTExMy41NDMgNDYuMDE5OFY0Ni4wMzg3SDExNS4wNDNWNDYuMDE5OEgxMTMuNTQzWk0xMTMuNTQzIDQ2LjAwMDlWNDYuMDE5OEgxMTUuMDQzVjQ2LjAwMDlIMTEzLjU0M1pNMTEzLjU0MyA0NS45ODE5VjQ2LjAwMDlIMTE1LjA0M1Y0NS45ODE5SDExMy41NDNaTTExMy41NDMgNDUuOTYyOVY0NS45ODE5SDExNS4wNDNWNDUuOTYyOUgxMTMuNTQzWk0xMTMuNTQzIDQ1Ljk0MzlWNDUuOTYyOUgxMTUuMDQzVjQ1Ljk0MzlIMTEzLjU0M1pNMTEzLjU0MyA0NS45MjQ5VjQ1Ljk0MzlIMTE1LjA0M1Y0NS45MjQ5SDExMy41NDNaTTExMy41NDMgNDUuOTA1OFY0NS45MjQ5SDExNS4wNDNWNDUuOTA1OEgxMTMuNTQzWk0xMTMuNTQzIDQ1Ljg4NjhWNDUuOTA1OEgxMTUuMDQzVjQ1Ljg4NjhIMTEzLjU0M1pNMTEzLjU0MyA0NS44Njc3VjQ1Ljg4NjhIMTE1LjA0M1Y0NS44Njc3SDExMy41NDNaTTExMy41NDMgNDUuODQ4NlY0NS44Njc3SDExNS4wNDNWNDUuODQ4NkgxMTMuNTQzWk0xMTMuNTQzIDQ1LjgyOTRWNDUuODQ4NkgxMTUuMDQzVjQ1LjgyOTRIMTEzLjU0M1pNMTEzLjU0MyA0NS44MTAyVjQ1LjgyOTRIMTE1LjA0M1Y0NS44MTAySDExMy41NDNaTTExMy41NDMgNDUuNzkxMVY0NS44MTAySDExNS4wNDNWNDUuNzkxMUgxMTMuNTQzWk0xMTMuNTQzIDQ1Ljc3MThWNDUuNzkxMUgxMTUuMDQzVjQ1Ljc3MThIMTEzLjU0M1pNMTEzLjU0MyA0NS43NTI2VjQ1Ljc3MThIMTE1LjA0M1Y0NS43NTI2SDExMy41NDNaTTExMy41NDMgNDUuNzMzM1Y0NS43NTI2SDExNS4wNDNWNDUuNzMzM0gxMTMuNTQzWk0xMTMuNTQzIDQ1LjcxNDFWNDUuNzMzM0gxMTUuMDQzVjQ1LjcxNDFIMTEzLjU0M1pNMTEzLjU0MyA0NS42OTQ3VjQ1LjcxNDFIMTE1LjA0M1Y0NS42OTQ3SDExMy41NDNaTTExMy41NDMgNDUuNjc1NFY0NS42OTQ3SDExNS4wNDNWNDUuNjc1NEgxMTMuNTQzWk0xMTMuNTQzIDQ1LjY1NjFWNDUuNjc1NEgxMTUuMDQzVjQ1LjY1NjFIMTEzLjU0M1pNMTEzLjU0MyA0NS42MzY3VjQ1LjY1NjFIMTE1LjA0M1Y0NS42MzY3SDExMy41NDNaTTExMy41NDMgNDUuNjE3M1Y0NS42MzY3SDExNS4wNDNWNDUuNjE3M0gxMTMuNTQzWk0xMTMuNTQzIDQ1LjU5NzlWNDUuNjE3M0gxMTUuMDQzVjQ1LjU5NzlIMTEzLjU0M1pNMTEzLjU0MyA0NS41Nzg0VjQ1LjU5NzlIMTE1LjA0M1Y0NS41Nzg0SDExMy41NDNaTTExMy41NDMgNDUuNTU4OVY0NS41Nzg0SDExNS4wNDNWNDUuNTU4OUgxMTMuNTQzWk0xMTMuNTQzIDQ1LjUzOTRWNDUuNTU4OUgxMTUuMDQzVjQ1LjUzOTRIMTEzLjU0M1pNMTEzLjU0MyA0NS41MTk5VjQ1LjUzOTRIMTE1LjA0M1Y0NS41MTk5SDExMy41NDNaTTExMy41NDMgNDUuNTAwNFY0NS41MTk5SDExNS4wNDNWNDUuNTAwNEgxMTMuNTQzWk0xMTMuNTQzIDQ1LjQ4MDhWNDUuNTAwNEgxMTUuMDQzVjQ1LjQ4MDhIMTEzLjU0M1pNMTEzLjU0MyA0NS40NjEyVjQ1LjQ4MDhIMTE1LjA0M1Y0NS40NjEySDExMy41NDNaTTExMy41NDMgNDUuNDQxNlY0NS40NjEySDExNS4wNDNWNDUuNDQxNkgxMTMuNTQzWk0xMTMuNTQzIDQ1LjQyMlY0NS40NDE2SDExNS4wNDNWNDUuNDIySDExMy41NDNaTTExMy41NDMgNDUuNDAyM1Y0NS40MjJIMTE1LjA0M1Y0NS40MDIzSDExMy41NDNaTTExMy41NDMgNDUuMzgyNlY0NS40MDIzSDExNS4wNDNWNDUuMzgyNkgxMTMuNTQzWk0xMTMuNTQzIDQ1LjM2MjlWNDUuMzgyNkgxMTUuMDQzVjQ1LjM2MjlIMTEzLjU0M1pNMTEzLjU0MyA0NS4zNDMyVjQ1LjM2MjlIMTE1LjA0M1Y0NS4zNDMySDExMy41NDNaTTExMy41NDMgNDUuMzIzNVY0NS4zNDMySDExNS4wNDNWNDUuMzIzNUgxMTMuNTQzWk0xMTMuNTQzIDQ1LjMwMzdWNDUuMzIzNUgxMTUuMDQzVjQ1LjMwMzdIMTEzLjU0M1pNMTEzLjU0MyA0NS4yODM5VjQ1LjMwMzdIMTE1LjA0M1Y0NS4yODM5SDExMy41NDNaTTExMy41NDMgNDUuMjY0MVY0NS4yODM5SDExNS4wNDNWNDUuMjY0MUgxMTMuNTQzWk0xMTMuNTQzIDQ1LjI0NDJWNDUuMjY0MUgxMTUuMDQzVjQ1LjI0NDJIMTEzLjU0M1pNMTEzLjU0MyA0NS4yMjQ0VjQ1LjI0NDJIMTE1LjA0M1Y0NS4yMjQ0SDExMy41NDNaTTExMy41NDMgNDUuMjA0NVY0NS4yMjQ0SDExNS4wNDNWNDUuMjA0NUgxMTMuNTQzWk0xMTMuNTQzIDQ1LjE4NDZWNDUuMjA0NUgxMTUuMDQzVjQ1LjE4NDZIMTEzLjU0M1pNMTEzLjU0MyA0NS4xNjQ2VjQ1LjE4NDZIMTE1LjA0M1Y0NS4xNjQ2SDExMy41NDNaTTExMy41NDMgNDUuMTQ0N1Y0NS4xNjQ2SDExNS4wNDNWNDUuMTQ0N0gxMTMuNTQzWk0xMTMuNTQzIDQ1LjEyNDdWNDUuMTQ0N0gxMTUuMDQzVjQ1LjEyNDdIMTEzLjU0M1pNMTEzLjU0MyA0NS4xMDQ3VjQ1LjEyNDdIMTE1LjA0M1Y0NS4xMDQ3SDExMy41NDNaTTExMy41NDMgNDUuMDg0NlY0NS4xMDQ3SDExNS4wNDNWNDUuMDg0NkgxMTMuNTQzWk0xMTMuNTQzIDQ1LjA2NDZWNDUuMDg0NkgxMTUuMDQzVjQ1LjA2NDZIMTEzLjU0M1pNMTEzLjU0MyA0NS4wNDQ1VjQ1LjA2NDZIMTE1LjA0M1Y0NS4wNDQ1SDExMy41NDNaTTExMy41NDMgNDUuMDI0NFY0NS4wNDQ1SDExNS4wNDNWNDUuMDI0NEgxMTMuNTQzWk0xMTMuNTQzIDQ1LjAwNDNWNDUuMDI0NEgxMTUuMDQzVjQ1LjAwNDNIMTEzLjU0M1pNMTEzLjU0MyA0NC45ODQxVjQ1LjAwNDNIMTE1LjA0M1Y0NC45ODQxSDExMy41NDNaTTExMy41NDMgNDQuOTY0VjQ0Ljk4NDFIMTE1LjA0M1Y0NC45NjRIMTEzLjU0M1pNMTEzLjU0MyA0NC45NDM4VjQ0Ljk2NEgxMTUuMDQzVjQ0Ljk0MzhIMTEzLjU0M1pNMTEzLjU0MyA0NC45MjM1VjQ0Ljk0MzhIMTE1LjA0M1Y0NC45MjM1SDExMy41NDNaTTExMy41NDMgNDQuOTAzM1Y0NC45MjM1SDExNS4wNDNWNDQuOTAzM0gxMTMuNTQzWk0xMTMuNTQzIDQ0Ljg4M1Y0NC45MDMzSDExNS4wNDNWNDQuODgzSDExMy41NDNaTTExMy41NDMgNDQuODYyOFY0NC44ODNIMTE1LjA0M1Y0NC44NjI4SDExMy41NDNaTTExMy41NDMgNDQuODQyNFY0NC44NjI4SDExNS4wNDNWNDQuODQyNEgxMTMuNTQzWk0xMTMuNTQzIDQ0LjgyMjFWNDQuODQyNEgxMTUuMDQzVjQ0LjgyMjFIMTEzLjU0M1pNMTEzLjU0MyA0NC44MDE3VjQ0LjgyMjFIMTE1LjA0M1Y0NC44MDE3SDExMy41NDNaTTExMy41NDMgNDQuNzgxNFY0NC44MDE3SDExNS4wNDNWNDQuNzgxNEgxMTMuNTQzWk0xMTMuNTQzIDQ0Ljc2MVY0NC43ODE0SDExNS4wNDNWNDQuNzYxSDExMy41NDNaTTExMy41NDMgNDQuNzQwNVY0NC43NjFIMTE1LjA0M1Y0NC43NDA1SDExMy41NDNaTTExMy41NDMgNDQuNzIwMVY0NC43NDA1SDExNS4wNDNWNDQuNzIwMUgxMTMuNTQzWk0xMTMuNTQzIDQ0LjY5OTZWNDQuNzIwMUgxMTUuMDQzVjQ0LjY5OTZIMTEzLjU0M1pNMTEzLjU0MyA0NC42NzkxVjQ0LjY5OTZIMTE1LjA0M1Y0NC42NzkxSDExMy41NDNaTTExMy41NDMgNDQuNjU4NlY0NC42NzkxSDExNS4wNDNWNDQuNjU4NkgxMTMuNTQzWk0xMTMuNTQzIDQ0LjYzOFY0NC42NTg2SDExNS4wNDNWNDQuNjM4SDExMy41NDNaTTExMy41NDMgNDQuNjE3NVY0NC42MzhIMTE1LjA0M1Y0NC42MTc1SDExMy41NDNaTTExMy41NDMgNDQuNTk2OVY0NC42MTc1SDExNS4wNDNWNDQuNTk2OUgxMTMuNTQzWk0xMTMuNTQzIDQ0LjU3NjNWNDQuNTk2OUgxMTUuMDQzVjQ0LjU3NjNIMTEzLjU0M1pNMTEzLjU0MyA0NC41NTU2VjQ0LjU3NjNIMTE1LjA0M1Y0NC41NTU2SDExMy41NDNaTTExMy41NDMgNDQuNTM1VjQ0LjU1NTZIMTE1LjA0M1Y0NC41MzVIMTEzLjU0M1pNMTEzLjU0MyA0NC41MTQzVjQ0LjUzNUgxMTUuMDQzVjQ0LjUxNDNIMTEzLjU0M1pNMTEzLjU0MyA0NC40OTM2VjQ0LjUxNDNIMTE1LjA0M1Y0NC40OTM2SDExMy41NDNaTTExMy41NDMgNDQuNDcyOFY0NC40OTM2SDExNS4wNDNWNDQuNDcyOEgxMTMuNTQzWk0xMTMuNTQzIDQ0LjQ1MjFWNDQuNDcyOEgxMTUuMDQzVjQ0LjQ1MjFIMTEzLjU0M1pNMTEzLjU0MyA0NC40MzEzVjQ0LjQ1MjFIMTE1LjA0M1Y0NC40MzEzSDExMy41NDNaTTExMy41NDMgNDQuNDEwNVY0NC40MzEzSDExNS4wNDNWNDQuNDEwNUgxMTMuNTQzWk0xMTMuNTQzIDQ0LjM4OTdWNDQuNDEwNUgxMTUuMDQzVjQ0LjM4OTdIMTEzLjU0M1pNMTEzLjU0MyA0NC4zNjg4VjQ0LjM4OTdIMTE1LjA0M1Y0NC4zNjg4SDExMy41NDNaTTExMy41NDMgNDQuMzQ4VjQ0LjM2ODhIMTE1LjA0M1Y0NC4zNDhIMTEzLjU0M1pNMTEzLjU0MyA0NC4zMjcxVjQ0LjM0OEgxMTUuMDQzVjQ0LjMyNzFIMTEzLjU0M1pNMTEzLjU0MyA0NC4zMDYyVjQ0LjMyNzFIMTE1LjA0M1Y0NC4zMDYySDExMy41NDNaTTExMy41NDMgNDQuMjg1MlY0NC4zMDYySDExNS4wNDNWNDQuMjg1MkgxMTMuNTQzWk0xMTMuNTQzIDQ0LjI2NDNWNDQuMjg1MkgxMTUuMDQzVjQ0LjI2NDNIMTEzLjU0M1pNMTEzLjU0MyA0NC4yNDMzVjQ0LjI2NDNIMTE1LjA0M1Y0NC4yNDMzSDExMy41NDNaTTExMy41NDMgNDQuMjIyM1Y0NC4yNDMzSDExNS4wNDNWNDQuMjIyM0gxMTMuNTQzWk0xMTMuNTQzIDQ0LjIwMTJWNDQuMjIyM0gxMTUuMDQzVjQ0LjIwMTJIMTEzLjU0M1pNMTEzLjU0MyA0NC4xODAyVjQ0LjIwMTJIMTE1LjA0M1Y0NC4xODAySDExMy41NDNaTTExMy41NDMgNDQuMTU5MVY0NC4xODAySDExNS4wNDNWNDQuMTU5MUgxMTMuNTQzWk0xMTMuNTQzIDQ0LjEzOFY0NC4xNTkxSDExNS4wNDNWNDQuMTM4SDExMy41NDNaTTExMy41NDMgNDQuMTE2OVY0NC4xMzhIMTE1LjA0M1Y0NC4xMTY5SDExMy41NDNaTTExMy41NDMgNDQuMDk1N1Y0NC4xMTY5SDExNS4wNDNWNDQuMDk1N0gxMTMuNTQzWk0xMTMuNTQzIDQ0LjA3NDVWNDQuMDk1N0gxMTUuMDQzVjQ0LjA3NDVIMTEzLjU0M1pNMTEzLjU0MyA0NC4wNTMzVjQ0LjA3NDVIMTE1LjA0M1Y0NC4wNTMzSDExMy41NDNaTTExMy41NDMgNDQuMDMyMVY0NC4wNTMzSDExNS4wNDNWNDQuMDMyMUgxMTMuNTQzWk0xMTMuNTQzIDQ0LjAxMDlWNDQuMDMyMUgxMTUuMDQzVjQ0LjAxMDlIMTEzLjU0M1pNMTEzLjU0MyA0My45ODk2VjQ0LjAxMDlIMTE1LjA0M1Y0My45ODk2SDExMy41NDNaTTExMy41NDMgNDMuOTY4M1Y0My45ODk2SDExNS4wNDNWNDMuOTY4M0gxMTMuNTQzWk0xMTMuNTQzIDQzLjk0N1Y0My45NjgzSDExNS4wNDNWNDMuOTQ3SDExMy41NDNaTTExMy41NDMgNDMuOTI1N1Y0My45NDdIMTE1LjA0M1Y0My45MjU3SDExMy41NDNaTTExMy41NDMgNDMuOTA0M1Y0My45MjU3SDExNS4wNDNWNDMuOTA0M0gxMTMuNTQzWk0xMTMuNTQzIDQzLjg4MjlWNDMuOTA0M0gxMTUuMDQzVjQzLjg4MjlIMTEzLjU0M1pNMTEzLjU0MyA0My44NjE1VjQzLjg4MjlIMTE1LjA0M1Y0My44NjE1SDExMy41NDNaTTExMy41NDMgNDMuODQwMVY0My44NjE1SDExNS4wNDNWNDMuODQwMUgxMTMuNTQzWk0xMTMuNTQzIDQzLjgxODZWNDMuODQwMUgxMTUuMDQzVjQzLjgxODZIMTEzLjU0M1pNMTEzLjU0MyA0My43OTcxVjQzLjgxODZIMTE1LjA0M1Y0My43OTcxSDExMy41NDNaTTExMy41NDMgNDMuNzc1NlY0My43OTcxSDExNS4wNDNWNDMuNzc1NkgxMTMuNTQzWk0xMTMuNTQzIDQzLjc1NDFWNDMuNzc1NkgxMTUuMDQzVjQzLjc1NDFIMTEzLjU0M1pNMTEzLjU0MyA0My43MzI2VjQzLjc1NDFIMTE1LjA0M1Y0My43MzI2SDExMy41NDNaTTExMy41NDMgNDMuNzExVjQzLjczMjZIMTE1LjA0M1Y0My43MTFIMTEzLjU0M1pNMTEzLjU0MyA0My42ODk0VjQzLjcxMUgxMTUuMDQzVjQzLjY4OTRIMTEzLjU0M1pNMTEzLjU0MyA0My42Njc4VjQzLjY4OTRIMTE1LjA0M1Y0My42Njc4SDExMy41NDNaTTExMy41NDMgNDMuNjQ2MVY0My42Njc4SDExNS4wNDNWNDMuNjQ2MUgxMTMuNTQzWk0xMTMuNTQzIDQzLjYyNDVWNDMuNjQ2MUgxMTUuMDQzVjQzLjYyNDVIMTEzLjU0M1pNMTEzLjU0MyA0My42MDI4VjQzLjYyNDVIMTE1LjA0M1Y0My42MDI4SDExMy41NDNaTTExMy41NDMgNDMuNTgxMVY0My42MDI4SDExNS4wNDNWNDMuNTgxMUgxMTMuNTQzWk0xMTMuNTQzIDQzLjU1OTNWNDMuNTgxMUgxMTUuMDQzVjQzLjU1OTNIMTEzLjU0M1pNMTEzLjU0MyA0My41Mzc2VjQzLjU1OTNIMTE1LjA0M1Y0My41Mzc2SDExMy41NDNaTTExMy41NDMgNDMuNTE1OFY0My41Mzc2SDExNS4wNDNWNDMuNTE1OEgxMTMuNTQzWk0xMTMuNTQzIDQzLjQ5NFY0My41MTU4SDExNS4wNDNWNDMuNDk0SDExMy41NDNaTTExMy41NDMgNDMuNDcyMlY0My40OTRIMTE1LjA0M1Y0My40NzIySDExMy41NDNaTTExMy41NDMgNDMuNDUwM1Y0My40NzIySDExNS4wNDNWNDMuNDUwM0gxMTMuNTQzWk0xMTMuNTQzIDQzLjQyODRWNDMuNDUwM0gxMTUuMDQzVjQzLjQyODRIMTEzLjU0M1pNMTEzLjU0MyA0My40MDY1VjQzLjQyODRIMTE1LjA0M1Y0My40MDY1SDExMy41NDNaTTExMy41NDMgNDMuMzg0NlY0My40MDY1SDExNS4wNDNWNDMuMzg0NkgxMTMuNTQzWk0xMTMuNTQzIDQzLjM2MjdWNDMuMzg0NkgxMTUuMDQzVjQzLjM2MjdIMTEzLjU0M1pNMTEzLjU0MyA0My4zNDA3VjQzLjM2MjdIMTE1LjA0M1Y0My4zNDA3SDExMy41NDNaTTExMy41NDMgNDMuMzE4N1Y0My4zNDA3SDExNS4wNDNWNDMuMzE4N0gxMTMuNTQzWk0xMTMuNTQzIDQzLjI5NjdWNDMuMzE4N0gxMTUuMDQzVjQzLjI5NjdIMTEzLjU0M1pNMTEzLjU0MyA0My4yNzQ3VjQzLjI5NjdIMTE1LjA0M1Y0My4yNzQ3SDExMy41NDNaTTExMy41NDMgNDMuMjUyNlY0My4yNzQ3SDExNS4wNDNWNDMuMjUyNkgxMTMuNTQzWk0xMTMuNTQzIDQzLjIzMDVWNDMuMjUyNkgxMTUuMDQzVjQzLjIzMDVIMTEzLjU0M1pNMTEzLjU0MyA0My4yMDg0VjQzLjIzMDVIMTE1LjA0M1Y0My4yMDg0SDExMy41NDNaTTExMy41NDMgNDMuMTg2M1Y0My4yMDg0SDExNS4wNDNWNDMuMTg2M0gxMTMuNTQzWk0xMTMuNTQzIDQzLjE2NDFWNDMuMTg2M0gxMTUuMDQzVjQzLjE2NDFIMTEzLjU0M1pNMTEzLjU0MyA0My4xNDJWNDMuMTY0MUgxMTUuMDQzVjQzLjE0MkgxMTMuNTQzWk0xMTMuNTQzIDQzLjExOThWNDMuMTQySDExNS4wNDNWNDMuMTE5OEgxMTMuNTQzWk0xMTMuNTQzIDQzLjA5NzVWNDMuMTE5OEgxMTUuMDQzVjQzLjA5NzVIMTEzLjU0M1pNMTEzLjU0MyA0My4wNzUzVjQzLjA5NzVIMTE1LjA0M1Y0My4wNzUzSDExMy41NDNaTTExMy41NDMgNDMuMDUzVjQzLjA3NTNIMTE1LjA0M1Y0My4wNTNIMTEzLjU0M1pNMTEzLjU0MyA0My4wMzA3VjQzLjA1M0gxMTUuMDQzVjQzLjAzMDdIMTEzLjU0M1pNMTEzLjU0MyA0My4wMDg0VjQzLjAzMDdIMTE1LjA0M1Y0My4wMDg0SDExMy41NDNaTTExMy41NDMgNDIuOTg2MVY0My4wMDg0SDExNS4wNDNWNDIuOTg2MUgxMTMuNTQzWk0xMTMuNTQzIDQyLjk2MzdWNDIuOTg2MUgxMTUuMDQzVjQyLjk2MzdIMTEzLjU0M1pNMTEzLjU0MyA0Mi45NDEzVjQyLjk2MzdIMTE1LjA0M1Y0Mi45NDEzSDExMy41NDNaTTExMy41NDMgNDIuOTE4OVY0Mi45NDEzSDExNS4wNDNWNDIuOTE4OUgxMTMuNTQzWk0xMTMuNTQzIDQyLjg5NjVWNDIuOTE4OUgxMTUuMDQzVjQyLjg5NjVIMTEzLjU0M1pNMTEzLjU0MyA0Mi44NzRWNDIuODk2NUgxMTUuMDQzVjQyLjg3NEgxMTMuNTQzWk0xMTMuNTQzIDQyLjg1MTVWNDIuODc0SDExNS4wNDNWNDIuODUxNUgxMTMuNTQzWk0xMTMuNTQzIDQyLjgyOVY0Mi44NTE1SDExNS4wNDNWNDIuODI5SDExMy41NDNaTTExMy41NDMgNDIuODA2NVY0Mi44MjlIMTE1LjA0M1Y0Mi44MDY1SDExMy41NDNaTTExMy41NDMgNDIuNzgzOVY0Mi44MDY1SDExNS4wNDNWNDIuNzgzOUgxMTMuNTQzWk0xMTMuNTQzIDQyLjc2MTRWNDIuNzgzOUgxMTUuMDQzVjQyLjc2MTRIMTEzLjU0M1pNMTEzLjU0MyA0Mi43Mzg4VjQyLjc2MTRIMTE1LjA0M1Y0Mi43Mzg4SDExMy41NDNaTTExMy41NDMgNDIuNzE2MVY0Mi43Mzg4SDExNS4wNDNWNDIuNzE2MUgxMTMuNTQzWk0xMTMuNTQzIDQyLjY5MzVWNDIuNzE2MUgxMTUuMDQzVjQyLjY5MzVIMTEzLjU0M1pNMTEzLjU0MyA0Mi42NzA4VjQyLjY5MzVIMTE1LjA0M1Y0Mi42NzA4SDExMy41NDNaTTExMy41NDMgNDIuNjQ4MVY0Mi42NzA4SDExNS4wNDNWNDIuNjQ4MUgxMTMuNTQzWk0xMTMuNTQzIDQyLjYyNTRWNDIuNjQ4MUgxMTUuMDQzVjQyLjYyNTRIMTEzLjU0M1pNMTEzLjU0MyA0Mi42MDI3VjQyLjYyNTRIMTE1LjA0M1Y0Mi42MDI3SDExMy41NDNaTTExMy41NDMgNDIuNTc5OVY0Mi42MDI3SDExNS4wNDNWNDIuNTc5OUgxMTMuNTQzWk0xMTMuNTQzIDQyLjU1NzFWNDIuNTc5OUgxMTUuMDQzVjQyLjU1NzFIMTEzLjU0M1pNMTEzLjU0MyA0Mi41MzQzVjQyLjU1NzFIMTE1LjA0M1Y0Mi41MzQzSDExMy41NDNaTTExMy41NDMgNDIuNTExNVY0Mi41MzQzSDExNS4wNDNWNDIuNTExNUgxMTMuNTQzWk0xMTMuNTQzIDQyLjQ4ODdWNDIuNTExNUgxMTUuMDQzVjQyLjQ4ODdIMTEzLjU0M1pNMTEzLjU0MyA0Mi40NjU4VjQyLjQ4ODdIMTE1LjA0M1Y0Mi40NjU4SDExMy41NDNaTTExMy41NDMgNDIuNDQyOVY0Mi40NjU4SDExNS4wNDNWNDIuNDQyOUgxMTMuNTQzWk0xMTMuNTQzIDQyLjQxOTlWNDIuNDQyOUgxMTUuMDQzVjQyLjQxOTlIMTEzLjU0M1pNMTEzLjU0MyA0Mi4zOTdWNDIuNDE5OUgxMTUuMDQzVjQyLjM5N0gxMTMuNTQzWk0xMTMuNTQzIDQyLjM3NFY0Mi4zOTdIMTE1LjA0M1Y0Mi4zNzRIMTEzLjU0M1pNMTEzLjU0MyA0Mi4zNTFWNDIuMzc0SDExNS4wNDNWNDIuMzUxSDExMy41NDNaTTExMy41NDMgNDIuMzI4VjQyLjM1MUgxMTUuMDQzVjQyLjMyOEgxMTMuNTQzWk0xMTMuNTQzIDQyLjMwNVY0Mi4zMjhIMTE1LjA0M1Y0Mi4zMDVIMTEzLjU0M1pNMTEzLjU0MyA0Mi4yODE5VjQyLjMwNUgxMTUuMDQzVjQyLjI4MTlIMTEzLjU0M1pNMTEzLjU0MyA0Mi4yNTg4VjQyLjI4MTlIMTE1LjA0M1Y0Mi4yNTg4SDExMy41NDNaTTExMy41NDMgNDIuMjM1N1Y0Mi4yNTg4SDExNS4wNDNWNDIuMjM1N0gxMTMuNTQzWk0xMTMuNTQzIDQyLjIxMjZWNDIuMjM1N0gxMTUuMDQzVjQyLjIxMjZIMTEzLjU0M1pNMTEzLjU0MyA0Mi4xODk0VjQyLjIxMjZIMTE1LjA0M1Y0Mi4xODk0SDExMy41NDNaTTExMy41NDMgNDIuMTY2MlY0Mi4xODk0SDExNS4wNDNWNDIuMTY2MkgxMTMuNTQzWk0xMTMuNTQzIDQyLjE0M1Y0Mi4xNjYySDExNS4wNDNWNDIuMTQzSDExMy41NDNaTTExMy41NDMgNDIuMTE5OFY0Mi4xNDNIMTE1LjA0M1Y0Mi4xMTk4SDExMy41NDNaTTExMy41NDMgNDIuMDk2NlY0Mi4xMTk4SDExNS4wNDNWNDIuMDk2NkgxMTMuNTQzWk0xMTMuNTQzIDQyLjA3MzNWNDIuMDk2NkgxMTUuMDQzVjQyLjA3MzNIMTEzLjU0M1pNMTEzLjU0MyA0Mi4wNVY0Mi4wNzMzSDExNS4wNDNWNDIuMDVIMTEzLjU0M1pNMTEzLjU0MyA0Mi4wMjY3VjQyLjA1SDExNS4wNDNWNDIuMDI2N0gxMTMuNTQzWk0xMTMuNTQzIDQyLjAwMzNWNDIuMDI2N0gxMTUuMDQzVjQyLjAwMzNIMTEzLjU0M1pNMTEzLjU0MyA0MS45OFY0Mi4wMDMzSDExNS4wNDNWNDEuOThIMTEzLjU0M1pNMTEzLjU0MyA0MS45NTY2VjQxLjk4SDExNS4wNDNWNDEuOTU2NkgxMTMuNTQzWk0xMTMuNTQzIDQxLjkzMzFWNDEuOTU2NkgxMTUuMDQzVjQxLjkzMzFIMTEzLjU0M1pNMTEzLjU0MyA0MS45MDk3VjQxLjkzMzFIMTE1LjA0M1Y0MS45MDk3SDExMy41NDNaTTExMy41NDMgNDEuODg2MlY0MS45MDk3SDExNS4wNDNWNDEuODg2MkgxMTMuNTQzWk0xMTMuNTQzIDQxLjg2MjhWNDEuODg2MkgxMTUuMDQzVjQxLjg2MjhIMTEzLjU0M1pNMTEzLjU0MyA0MS44MzkzVjQxLjg2MjhIMTE1LjA0M1Y0MS44MzkzSDExMy41NDNaTTExMy41NDMgNDEuODE1N1Y0MS44MzkzSDExNS4wNDNWNDEuODE1N0gxMTMuNTQzWk0xMTMuNTQzIDQxLjc5MjJWNDEuODE1N0gxMTUuMDQzVjQxLjc5MjJIMTEzLjU0M1pNMTEzLjU0MyA0MS43Njg2VjQxLjc5MjJIMTE1LjA0M1Y0MS43Njg2SDExMy41NDNaTTExMy41NDMgNDEuNzQ1VjQxLjc2ODZIMTE1LjA0M1Y0MS43NDVIMTEzLjU0M1pNMTEzLjU0MyA0MS43MjE0VjQxLjc0NUgxMTUuMDQzVjQxLjcyMTRIMTEzLjU0M1pNMTEzLjU0MyA0MS42OTc3VjQxLjcyMTRIMTE1LjA0M1Y0MS42OTc3SDExMy41NDNaTTExMy41NDMgNDEuNjc0VjQxLjY5NzdIMTE1LjA0M1Y0MS42NzRIMTEzLjU0M1pNMTEzLjU0MyA0MS42NTA0VjQxLjY3NEgxMTUuMDQzVjQxLjY1MDRIMTEzLjU0M1pNMTEzLjU0MyA0MS42MjY2VjQxLjY1MDRIMTE1LjA0M1Y0MS42MjY2SDExMy41NDNaTTExMy41NDMgNDEuNjAyOVY0MS42MjY2SDExNS4wNDNWNDEuNjAyOUgxMTMuNTQzWk0xMTMuNTQzIDQxLjU3OTFWNDEuNjAyOUgxMTUuMDQzVjQxLjU3OTFIMTEzLjU0M1pNMTEzLjU0MyA0MS41NTUzVjQxLjU3OTFIMTE1LjA0M1Y0MS41NTUzSDExMy41NDNaTTExMy41NDMgNDEuNTMxNVY0MS41NTUzSDExNS4wNDNWNDEuNTMxNUgxMTMuNTQzWk0xMTMuNTQzIDQxLjUwNzdWNDEuNTMxNUgxMTUuMDQzVjQxLjUwNzdIMTEzLjU0M1pNMTEzLjU0MyA0MS40ODM4VjQxLjUwNzdIMTE1LjA0M1Y0MS40ODM4SDExMy41NDNaTTExMy41NDMgNDEuNDZWNDEuNDgzOEgxMTUuMDQzVjQxLjQ2SDExMy41NDNaTTExMy41NDMgNTUuMjAzMVY1NS4yMTM1SDExNS4wNDNWNTUuMjAzMUgxMTMuNTQzWk0xMTUuNzkzIDU0LjQ1MzFIMTE0LjI5M1Y1NS45NTMxSDExNS43OTNWNTQuNDUzMVpNMTE2LjU0MyA1NS4yMTM1VjU1LjIwMzFIMTE1LjA0M1Y1NS4yMTM1SDExNi41NDNaTTExNi41NDMgNTUuMjIzOVY1NS4yMTM1SDExNS4wNDNWNTUuMjIzOUgxMTYuNTQzWk0xMTYuNTQzIDU1LjIzNDNWNTUuMjIzOUgxMTUuMDQzVjU1LjIzNDNIMTE2LjU0M1pNMTE2LjU0MyA1NS4yNDQ4VjU1LjIzNDNIMTE1LjA0M1Y1NS4yNDQ4SDExNi41NDNaTTExNi41NDMgNTUuMjU1MlY1NS4yNDQ4SDExNS4wNDNWNTUuMjU1MkgxMTYuNTQzWk0xMTYuNTQzIDU1LjI2NTdWNTUuMjU1MkgxMTUuMDQzVjU1LjI2NTdIMTE2LjU0M1pNMTE2LjU0MyA1NS4yNzYyVjU1LjI2NTdIMTE1LjA0M1Y1NS4yNzYySDExNi41NDNaTTExNi41NDMgNTUuMjg2N1Y1NS4yNzYySDExNS4wNDNWNTUuMjg2N0gxMTYuNTQzWk0xMTYuNTQzIDU1LjI5NzJWNTUuMjg2N0gxMTUuMDQzVjU1LjI5NzJIMTE2LjU0M1pNMTE2LjU0MyA1NS4zMDc3VjU1LjI5NzJIMTE1LjA0M1Y1NS4zMDc3SDExNi41NDNaTTExNi41NDMgNTUuMzE4MlY1NS4zMDc3SDExNS4wNDNWNTUuMzE4MkgxMTYuNTQzWk0xMTYuNTQzIDU1LjMyODdWNTUuMzE4MkgxMTUuMDQzVjU1LjMyODdIMTE2LjU0M1pNMTE2LjU0MyA1NS4zMzkzVjU1LjMyODdIMTE1LjA0M1Y1NS4zMzkzSDExNi41NDNaTTExNi41NDMgNTUuMzQ5OFY1NS4zMzkzSDExNS4wNDNWNTUuMzQ5OEgxMTYuNTQzWk0xMTYuNTQzIDU1LjM2MDRWNTUuMzQ5OEgxMTUuMDQzVjU1LjM2MDRIMTE2LjU0M1pNMTE2LjU0MyA1NS4zNzFWNTUuMzYwNEgxMTUuMDQzVjU1LjM3MUgxMTYuNTQzWk0xMTYuNTQzIDU1LjM4MTVWNTUuMzcxSDExNS4wNDNWNTUuMzgxNUgxMTYuNTQzWk0xMTYuNTQzIDU1LjM5MjFWNTUuMzgxNUgxMTUuMDQzVjU1LjM5MjFIMTE2LjU0M1pNMTE2LjU0MyA1NS40MDI4VjU1LjM5MjFIMTE1LjA0M1Y1NS40MDI4SDExNi41NDNaTTExNi41NDMgNTUuNDEzNFY1NS40MDI4SDExNS4wNDNWNTUuNDEzNEgxMTYuNTQzWk0xMTYuNTQzIDU1LjQyNFY1NS40MTM0SDExNS4wNDNWNTUuNDI0SDExNi41NDNaTTExNi41NDMgNTUuNDM0N1Y1NS40MjRIMTE1LjA0M1Y1NS40MzQ3SDExNi41NDNaTTExNi41NDMgNTUuNDQ1M1Y1NS40MzQ3SDExNS4wNDNWNTUuNDQ1M0gxMTYuNTQzWk0xMTYuNTQzIDU1LjQ1NlY1NS40NDUzSDExNS4wNDNWNTUuNDU2SDExNi41NDNaTTExNi41NDMgNTUuNDY2N1Y1NS40NTZIMTE1LjA0M1Y1NS40NjY3SDExNi41NDNaTTExNi41NDMgNTUuNDc3M1Y1NS40NjY3SDExNS4wNDNWNTUuNDc3M0gxMTYuNTQzWk0xMTYuNTQzIDU1LjQ4OFY1NS40NzczSDExNS4wNDNWNTUuNDg4SDExNi41NDNaTTExNi41NDMgNTUuNDk4OFY1NS40ODhIMTE1LjA0M1Y1NS40OTg4SDExNi41NDNaTTExNi41NDMgNTUuNTA5NVY1NS40OTg4SDExNS4wNDNWNTUuNTA5NUgxMTYuNTQzWk0xMTYuNTQzIDU1LjUyMDJWNTUuNTA5NUgxMTUuMDQzVjU1LjUyMDJIMTE2LjU0M1pNMTE2LjU0MyA1NS41MzFWNTUuNTIwMkgxMTUuMDQzVjU1LjUzMUgxMTYuNTQzWk0xMTYuNTQzIDU1LjU0MTdWNTUuNTMxSDExNS4wNDNWNTUuNTQxN0gxMTYuNTQzWk0xMTYuNTQzIDU1LjU1MjVWNTUuNTQxN0gxMTUuMDQzVjU1LjU1MjVIMTE2LjU0M1pNMTE2LjU0MyA1NS41NjMzVjU1LjU1MjVIMTE1LjA0M1Y1NS41NjMzSDExNi41NDNaTTExNi41NDMgNTUuNTc0VjU1LjU2MzNIMTE1LjA0M1Y1NS41NzRIMTE2LjU0M1pNMTE2LjU0MyA1NS41ODQ4VjU1LjU3NEgxMTUuMDQzVjU1LjU4NDhIMTE2LjU0M1pNMTE2LjU0MyA1NS41OTU3VjU1LjU4NDhIMTE1LjA0M1Y1NS41OTU3SDExNi41NDNaTTExNi41NDMgNTUuNjA2NVY1NS41OTU3SDExNS4wNDNWNTUuNjA2NUgxMTYuNTQzWk0xMTYuNTQzIDU1LjYxNzNWNTUuNjA2NUgxMTUuMDQzVjU1LjYxNzNIMTE2LjU0M1pNMTE2LjU0MyA1NS42MjgyVjU1LjYxNzNIMTE1LjA0M1Y1NS42MjgySDExNi41NDNaTTExNi41NDMgNTUuNjM5VjU1LjYyODJIMTE1LjA0M1Y1NS42MzlIMTE2LjU0M1pNMTE2LjU0MyA1NS42NDk5VjU1LjYzOUgxMTUuMDQzVjU1LjY0OTlIMTE2LjU0M1pNMTE2LjU0MyA1NS42NjA4VjU1LjY0OTlIMTE1LjA0M1Y1NS42NjA4SDExNi41NDNaTTExNi41NDMgNTUuNjcxN1Y1NS42NjA4SDExNS4wNDNWNTUuNjcxN0gxMTYuNTQzWk0xMTYuNTQzIDU1LjY4MjZWNTUuNjcxN0gxMTUuMDQzVjU1LjY4MjZIMTE2LjU0M1pNMTE2LjU0MyA1NS42OTM1VjU1LjY4MjZIMTE1LjA0M1Y1NS42OTM1SDExNi41NDNaTTExNi41NDMgNTUuNzA0NFY1NS42OTM1SDExNS4wNDNWNTUuNzA0NEgxMTYuNTQzWk0xMTYuNTQzIDU1LjcxNTNWNTUuNzA0NEgxMTUuMDQzVjU1LjcxNTNIMTE2LjU0M1pNMTE2LjU0MyA1NS43MjYzVjU1LjcxNTNIMTE1LjA0M1Y1NS43MjYzSDExNi41NDNaTTExNi41NDMgNTUuNzM3MlY1NS43MjYzSDExNS4wNDNWNTUuNzM3MkgxMTYuNTQzWk0xMTYuNTQzIDU1Ljc0ODJWNTUuNzM3MkgxMTUuMDQzVjU1Ljc0ODJIMTE2LjU0M1pNMTE2LjU0MyA1NS43NTkyVjU1Ljc0ODJIMTE1LjA0M1Y1NS43NTkySDExNi41NDNaTTExNi41NDMgNTUuNzcwMlY1NS43NTkySDExNS4wNDNWNTUuNzcwMkgxMTYuNTQzWk0xMTYuNTQzIDU1Ljc4MTJWNTUuNzcwMkgxMTUuMDQzVjU1Ljc4MTJIMTE2LjU0M1pNMTE2LjU0MyA1NS43OTIyVjU1Ljc4MTJIMTE1LjA0M1Y1NS43OTIySDExNi41NDNaTTExNi41NDMgNTUuODAzMlY1NS43OTIySDExNS4wNDNWNTUuODAzMkgxMTYuNTQzWk0xMTYuNTQzIDU1LjgxNDNWNTUuODAzMkgxMTUuMDQzVjU1LjgxNDNIMTE2LjU0M1pNMTE2LjU0MyA1NS44MjUzVjU1LjgxNDNIMTE1LjA0M1Y1NS44MjUzSDExNi41NDNaTTExNi41NDMgNTUuODM2NFY1NS44MjUzSDExNS4wNDNWNTUuODM2NEgxMTYuNTQzWk0xMTYuNTQzIDU1Ljg0NzRWNTUuODM2NEgxMTUuMDQzVjU1Ljg0NzRIMTE2LjU0M1pNMTE2LjU0MyA1NS44NTg1VjU1Ljg0NzRIMTE1LjA0M1Y1NS44NTg1SDExNi41NDNaTTExNi41NDMgNTUuODY5NlY1NS44NTg1SDExNS4wNDNWNTUuODY5NkgxMTYuNTQzWk0xMTYuNTQzIDU1Ljg4MDdWNTUuODY5NkgxMTUuMDQzVjU1Ljg4MDdIMTE2LjU0M1pNMTE2LjU0MyA1NS44OTE4VjU1Ljg4MDdIMTE1LjA0M1Y1NS44OTE4SDExNi41NDNaTTExNi41NDMgNTUuOTAzVjU1Ljg5MThIMTE1LjA0M1Y1NS45MDNIMTE2LjU0M1pNMTE2LjU0MyA1NS45MTQxVjU1LjkwM0gxMTUuMDQzVjU1LjkxNDFIMTE2LjU0M1pNMTE2LjU0MyA1NS45MjUzVjU1LjkxNDFIMTE1LjA0M1Y1NS45MjUzSDExNi41NDNaTTExNi41NDMgNTUuOTM2NFY1NS45MjUzSDExNS4wNDNWNTUuOTM2NEgxMTYuNTQzWk0xMTYuNTQzIDU1Ljk0NzZWNTUuOTM2NEgxMTUuMDQzVjU1Ljk0NzZIMTE2LjU0M1pNMTE2LjU0MyA1NS45NTg4VjU1Ljk0NzZIMTE1LjA0M1Y1NS45NTg4SDExNi41NDNaTTExNi41NDMgNTUuOTdWNTUuOTU4OEgxMTUuMDQzVjU1Ljk3SDExNi41NDNaTTExNi41NDMgNTUuOTgxMlY1NS45N0gxMTUuMDQzVjU1Ljk4MTJIMTE2LjU0M1pNMTE2LjU0MyA1NS45OTI0VjU1Ljk4MTJIMTE1LjA0M1Y1NS45OTI0SDExNi41NDNaTTExNi41NDMgNTYuMDAzNlY1NS45OTI0SDExNS4wNDNWNTYuMDAzNkgxMTYuNTQzWk0xMTYuNTQzIDU2LjAxNDlWNTYuMDAzNkgxMTUuMDQzVjU2LjAxNDlIMTE2LjU0M1pNMTE2LjU0MyA1Ni4wMjYxVjU2LjAxNDlIMTE1LjA0M1Y1Ni4wMjYxSDExNi41NDNaTTExNi41NDMgNTYuMDM3NFY1Ni4wMjYxSDExNS4wNDNWNTYuMDM3NEgxMTYuNTQzWk0xMTYuNTQzIDU2LjA0ODdWNTYuMDM3NEgxMTUuMDQzVjU2LjA0ODdIMTE2LjU0M1pNMTE2LjU0MyA1Ni4wNTk5VjU2LjA0ODdIMTE1LjA0M1Y1Ni4wNTk5SDExNi41NDNaTTExNi41NDMgNTYuMDcxMlY1Ni4wNTk5SDExNS4wNDNWNTYuMDcxMkgxMTYuNTQzWk0xMTYuNTQzIDU2LjA4MjVWNTYuMDcxMkgxMTUuMDQzVjU2LjA4MjVIMTE2LjU0M1pNMTE2LjU0MyA1Ni4wOTM5VjU2LjA4MjVIMTE1LjA0M1Y1Ni4wOTM5SDExNi41NDNaTTExNi41NDMgNTYuMTA1MlY1Ni4wOTM5SDExNS4wNDNWNTYuMTA1MkgxMTYuNTQzWk0xMTYuNTQzIDU2LjExNjVWNTYuMTA1MkgxMTUuMDQzVjU2LjExNjVIMTE2LjU0M1pNMTE2LjU0MyA1Ni4xMjc5VjU2LjExNjVIMTE1LjA0M1Y1Ni4xMjc5SDExNi41NDNaTTExNi41NDMgNTYuMTM5MlY1Ni4xMjc5SDExNS4wNDNWNTYuMTM5MkgxMTYuNTQzWk0xMTYuNTQzIDU2LjE1MDZWNTYuMTM5MkgxMTUuMDQzVjU2LjE1MDZIMTE2LjU0M1pNMTE2LjU0MyA1Ni4xNjJWNTYuMTUwNkgxMTUuMDQzVjU2LjE2MkgxMTYuNTQzWk0xMTYuNTQzIDU2LjE3MzRWNTYuMTYySDExNS4wNDNWNTYuMTczNEgxMTYuNTQzWk0xMTYuNTQzIDU2LjE4NDhWNTYuMTczNEgxMTUuMDQzVjU2LjE4NDhIMTE2LjU0M1pNMTE2LjU0MyA1Ni4xOTYyVjU2LjE4NDhIMTE1LjA0M1Y1Ni4xOTYySDExNi41NDNaTTExNi41NDMgNTYuMjA3N1Y1Ni4xOTYySDExNS4wNDNWNTYuMjA3N0gxMTYuNTQzWk0xMTYuNTQzIDU2LjIxOTFWNTYuMjA3N0gxMTUuMDQzVjU2LjIxOTFIMTE2LjU0M1pNMTE2LjU0MyA1Ni4yMzA2VjU2LjIxOTFIMTE1LjA0M1Y1Ni4yMzA2SDExNi41NDNaTTExNi41NDMgNTYuMjQyVjU2LjIzMDZIMTE1LjA0M1Y1Ni4yNDJIMTE2LjU0M1pNMTE2LjU0MyA1Ni4yNTM1VjU2LjI0MkgxMTUuMDQzVjU2LjI1MzVIMTE2LjU0M1pNMTE2LjU0MyA1Ni4yNjVWNTYuMjUzNUgxMTUuMDQzVjU2LjI2NUgxMTYuNTQzWk0xMTYuNTQzIDU2LjI3NjVWNTYuMjY1SDExNS4wNDNWNTYuMjc2NUgxMTYuNTQzWk0xMTYuNTQzIDU2LjI4OFY1Ni4yNzY1SDExNS4wNDNWNTYuMjg4SDExNi41NDNaTTExNi41NDMgNTYuMjk5NVY1Ni4yODhIMTE1LjA0M1Y1Ni4yOTk1SDExNi41NDNaTTExNi41NDMgNTYuMzExVjU2LjI5OTVIMTE1LjA0M1Y1Ni4zMTFIMTE2LjU0M1pNMTE2LjU0MyA1Ni4zMjI2VjU2LjMxMUgxMTUuMDQzVjU2LjMyMjZIMTE2LjU0M1pNMTE2LjU0MyA1Ni4zMzQxVjU2LjMyMjZIMTE1LjA0M1Y1Ni4zMzQxSDExNi41NDNaTTExNi41NDMgNTYuMzQ1N1Y1Ni4zMzQxSDExNS4wNDNWNTYuMzQ1N0gxMTYuNTQzWk0xMTYuNTQzIDU2LjM1NzNWNTYuMzQ1N0gxMTUuMDQzVjU2LjM1NzNIMTE2LjU0M1pNMTE2LjU0MyA1Ni4zNjg5VjU2LjM1NzNIMTE1LjA0M1Y1Ni4zNjg5SDExNi41NDNaTTExNi41NDMgNTYuMzgwNVY1Ni4zNjg5SDExNS4wNDNWNTYuMzgwNUgxMTYuNTQzWk0xMTYuNTQzIDU2LjM5MjFWNTYuMzgwNUgxMTUuMDQzVjU2LjM5MjFIMTE2LjU0M1pNMTE2LjU0MyA1Ni40MDM3VjU2LjM5MjFIMTE1LjA0M1Y1Ni40MDM3SDExNi41NDNaTTExNi41NDMgNTYuNDE1M1Y1Ni40MDM3SDExNS4wNDNWNTYuNDE1M0gxMTYuNTQzWk0xMTYuNTQzIDU2LjQyN1Y1Ni40MTUzSDExNS4wNDNWNTYuNDI3SDExNi41NDNaTTExNi41NDMgNTYuNDM4NlY1Ni40MjdIMTE1LjA0M1Y1Ni40Mzg2SDExNi41NDNaTTExNi41NDMgNTYuNDUwM1Y1Ni40Mzg2SDExNS4wNDNWNTYuNDUwM0gxMTYuNTQzWk0xMTYuNTQzIDU2LjQ2MlY1Ni40NTAzSDExNS4wNDNWNTYuNDYySDExNi41NDNaTTExNi41NDMgNTYuNDczN1Y1Ni40NjJIMTE1LjA0M1Y1Ni40NzM3SDExNi41NDNaTTExNi41NDMgNTYuNDg1NFY1Ni40NzM3SDExNS4wNDNWNTYuNDg1NEgxMTYuNTQzWk0xMTYuNTQzIDU2LjQ5NzFWNTYuNDg1NEgxMTUuMDQzVjU2LjQ5NzFIMTE2LjU0M1pNMTE2LjU0MyA1Ni41MDg4VjU2LjQ5NzFIMTE1LjA0M1Y1Ni41MDg4SDExNi41NDNaTTExNi41NDMgNTYuNTIwNlY1Ni41MDg4SDExNS4wNDNWNTYuNTIwNkgxMTYuNTQzWk0xMTYuNTQzIDU2LjUzMjNWNTYuNTIwNkgxMTUuMDQzVjU2LjUzMjNIMTE2LjU0M1pNMTE2LjU0MyA1Ni41NDQxVjU2LjUzMjNIMTE1LjA0M1Y1Ni41NDQxSDExNi41NDNaTTExNi41NDMgNTYuNTU1OFY1Ni41NDQxSDExNS4wNDNWNTYuNTU1OEgxMTYuNTQzWk0xMTYuNTQzIDU2LjU2NzZWNTYuNTU1OEgxMTUuMDQzVjU2LjU2NzZIMTE2LjU0M1pNMTE2LjU0MyA1Ni41Nzk0VjU2LjU2NzZIMTE1LjA0M1Y1Ni41Nzk0SDExNi41NDNaTTExNi41NDMgNTYuNTkxMlY1Ni41Nzk0SDExNS4wNDNWNTYuNTkxMkgxMTYuNTQzWk0xMTYuNTQzIDU2LjYwM1Y1Ni41OTEySDExNS4wNDNWNTYuNjAzSDExNi41NDNaTTExNi41NDMgNTYuNjE0OFY1Ni42MDNIMTE1LjA0M1Y1Ni42MTQ4SDExNi41NDNaTTExNi41NDMgNTYuNjI2N1Y1Ni42MTQ4SDExNS4wNDNWNTYuNjI2N0gxMTYuNTQzWk0xMTYuNTQzIDU2LjYzODVWNTYuNjI2N0gxMTUuMDQzVjU2LjYzODVIMTE2LjU0M1pNMTE2LjU0MyA1Ni42NTA0VjU2LjYzODVIMTE1LjA0M1Y1Ni42NTA0SDExNi41NDNaTTExNi41NDMgNTYuNjYyM1Y1Ni42NTA0SDExNS4wNDNWNTYuNjYyM0gxMTYuNTQzWk0xMTYuNTQzIDU2LjY3NDFWNTYuNjYyM0gxMTUuMDQzVjU2LjY3NDFIMTE2LjU0M1pNMTE2LjU0MyA1Ni42ODZWNTYuNjc0MUgxMTUuMDQzVjU2LjY4NkgxMTYuNTQzWk0xMTYuNTQzIDU2LjY5NzlWNTYuNjg2SDExNS4wNDNWNTYuNjk3OUgxMTYuNTQzWk0xMTYuNTQzIDU2LjcwOThWNTYuNjk3OUgxMTUuMDQzVjU2LjcwOThIMTE2LjU0M1pNMTE2LjU0MyA1Ni43MjE4VjU2LjcwOThIMTE1LjA0M1Y1Ni43MjE4SDExNi41NDNaTTExNi41NDMgNTYuNzMzN1Y1Ni43MjE4SDExNS4wNDNWNTYuNzMzN0gxMTYuNTQzWk0xMTYuNTQzIDU2Ljc0NTdWNTYuNzMzN0gxMTUuMDQzVjU2Ljc0NTdIMTE2LjU0M1pNMTE2LjU0MyA1Ni43NTc2VjU2Ljc0NTdIMTE1LjA0M1Y1Ni43NTc2SDExNi41NDNaTTExNi41NDMgNTYuNzY5NlY1Ni43NTc2SDExNS4wNDNWNTYuNzY5NkgxMTYuNTQzWk0xMTYuNTQzIDU2Ljc4MTZWNTYuNzY5NkgxMTUuMDQzVjU2Ljc4MTZIMTE2LjU0M1pNMTE2LjU0MyA1Ni43OTM2VjU2Ljc4MTZIMTE1LjA0M1Y1Ni43OTM2SDExNi41NDNaTTExNi41NDMgNTYuODA1NlY1Ni43OTM2SDExNS4wNDNWNTYuODA1NkgxMTYuNTQzWk0xMTYuNTQzIDU2LjgxNzZWNTYuODA1NkgxMTUuMDQzVjU2LjgxNzZIMTE2LjU0M1pNMTE2LjU0MyA1Ni44Mjk2VjU2LjgxNzZIMTE1LjA0M1Y1Ni44Mjk2SDExNi41NDNaTTExNi41NDMgNTYuODQxNlY1Ni44Mjk2SDExNS4wNDNWNTYuODQxNkgxMTYuNTQzWk0xMTYuNTQzIDU2Ljg1MzdWNTYuODQxNkgxMTUuMDQzVjU2Ljg1MzdIMTE2LjU0M1pNMTE2LjU0MyA1Ni44NjU4VjU2Ljg1MzdIMTE1LjA0M1Y1Ni44NjU4SDExNi41NDNaTTExNi41NDMgNTYuODc3OFY1Ni44NjU4SDExNS4wNDNWNTYuODc3OEgxMTYuNTQzWk0xMTYuNTQzIDU2Ljg4OTlWNTYuODc3OEgxMTUuMDQzVjU2Ljg4OTlIMTE2LjU0M1pNMTE2LjU0MyA1Ni45MDJWNTYuODg5OUgxMTUuMDQzVjU2LjkwMkgxMTYuNTQzWk0xMTYuNTQzIDU2LjkxNDFWNTYuOTAySDExNS4wNDNWNTYuOTE0MUgxMTYuNTQzWk0xMTYuNTQzIDU2LjkyNjJWNTYuOTE0MUgxMTUuMDQzVjU2LjkyNjJIMTE2LjU0M1pNMTE2LjU0MyA1Ni45Mzg0VjU2LjkyNjJIMTE1LjA0M1Y1Ni45Mzg0SDExNi41NDNaTTExNi41NDMgNTYuOTUwNVY1Ni45Mzg0SDExNS4wNDNWNTYuOTUwNUgxMTYuNTQzWk0xMTYuNTQzIDU2Ljk2MjdWNTYuOTUwNUgxMTUuMDQzVjU2Ljk2MjdIMTE2LjU0M1pNMTE2LjU0MyA1Ni45NzQ4VjU2Ljk2MjdIMTE1LjA0M1Y1Ni45NzQ4SDExNi41NDNaTTExNi41NDMgNTYuOTg3VjU2Ljk3NDhIMTE1LjA0M1Y1Ni45ODdIMTE2LjU0M1pNMTE2LjU0MyA1Ni45OTkyVjU2Ljk4N0gxMTUuMDQzVjU2Ljk5OTJIMTE2LjU0M1pNMTE2LjU0MyA1Ny4wMTE0VjU2Ljk5OTJIMTE1LjA0M1Y1Ny4wMTE0SDExNi41NDNaTTExNi41NDMgNTcuMDIzNlY1Ny4wMTE0SDExNS4wNDNWNTcuMDIzNkgxMTYuNTQzWk0xMTYuNTQzIDU3LjAzNThWNTcuMDIzNkgxMTUuMDQzVjU3LjAzNThIMTE2LjU0M1pNMTE2LjU0MyA1Ny4wNDhWNTcuMDM1OEgxMTUuMDQzVjU3LjA0OEgxMTYuNTQzWk0xMTYuNTQzIDU3LjA2MDNWNTcuMDQ4SDExNS4wNDNWNTcuMDYwM0gxMTYuNTQzWk0xMTYuNTQzIDU3LjA3MjVWNTcuMDYwM0gxMTUuMDQzVjU3LjA3MjVIMTE2LjU0M1pNMTE2LjU0MyA1Ny4wODQ4VjU3LjA3MjVIMTE1LjA0M1Y1Ny4wODQ4SDExNi41NDNaTTExNi41NDMgNTcuMDk3MVY1Ny4wODQ4SDExNS4wNDNWNTcuMDk3MUgxMTYuNTQzWk0xMTYuNTQzIDU3LjEwOTNWNTcuMDk3MUgxMTUuMDQzVjU3LjEwOTNIMTE2LjU0M1pNMTE2LjU0MyA1Ny4xMjE2VjU3LjEwOTNIMTE1LjA0M1Y1Ny4xMjE2SDExNi41NDNaTTExNi41NDMgNTcuMTMzOVY1Ny4xMjE2SDExNS4wNDNWNTcuMTMzOUgxMTYuNTQzWk0xMTYuNTQzIDU3LjE0NjNWNTcuMTMzOUgxMTUuMDQzVjU3LjE0NjNIMTE2LjU0M1pNMTE2LjU0MyA1Ny4xNTg2VjU3LjE0NjNIMTE1LjA0M1Y1Ny4xNTg2SDExNi41NDNaTTExNi41NDMgNTcuMTcwOVY1Ny4xNTg2SDExNS4wNDNWNTcuMTcwOUgxMTYuNTQzWk0xMTYuNTQzIDU3LjE4MzNWNTcuMTcwOUgxMTUuMDQzVjU3LjE4MzNIMTE2LjU0M1pNMTE2LjU0MyA1Ny4xOTU3VjU3LjE4MzNIMTE1LjA0M1Y1Ny4xOTU3SDExNi41NDNaTTExNi41NDMgNTcuMjA4VjU3LjE5NTdIMTE1LjA0M1Y1Ny4yMDhIMTE2LjU0M1pNMTE2LjU0MyA1Ny4yMjA0VjU3LjIwOEgxMTUuMDQzVjU3LjIyMDRIMTE2LjU0M1pNMTE2LjU0MyA1Ny4yMzI4VjU3LjIyMDRIMTE1LjA0M1Y1Ny4yMzI4SDExNi41NDNaTTExNi41NDMgNTcuMjQ1MlY1Ny4yMzI4SDExNS4wNDNWNTcuMjQ1MkgxMTYuNTQzWk0xMTYuNTQzIDU3LjI1NzdWNTcuMjQ1MkgxMTUuMDQzVjU3LjI1NzdIMTE2LjU0M1pNMTE2LjU0MyA1Ny4yNzAxVjU3LjI1NzdIMTE1LjA0M1Y1Ny4yNzAxSDExNi41NDNaTTExNi41NDMgNTcuMjgyNVY1Ny4yNzAxSDExNS4wNDNWNTcuMjgyNUgxMTYuNTQzWk0xMTYuNTQzIDU3LjI5NVY1Ny4yODI1SDExNS4wNDNWNTcuMjk1SDExNi41NDNaTTExNi41NDMgNTcuMzA3NFY1Ny4yOTVIMTE1LjA0M1Y1Ny4zMDc0SDExNi41NDNaTTExNi41NDMgNTcuMzE5OVY1Ny4zMDc0SDExNS4wNDNWNTcuMzE5OUgxMTYuNTQzWk0xMTYuNTQzIDU3LjMzMjRWNTcuMzE5OUgxMTUuMDQzVjU3LjMzMjRIMTE2LjU0M1pNMTE2LjU0MyA1Ny4zNDQ5VjU3LjMzMjRIMTE1LjA0M1Y1Ny4zNDQ5SDExNi41NDNaTTExNi41NDMgNTcuMzU3NFY1Ny4zNDQ5SDExNS4wNDNWNTcuMzU3NEgxMTYuNTQzWk0xMTYuNTQzIDU3LjM2OTlWNTcuMzU3NEgxMTUuMDQzVjU3LjM2OTlIMTE2LjU0M1pNMTE2LjU0MyA1Ny4zODI1VjU3LjM2OTlIMTE1LjA0M1Y1Ny4zODI1SDExNi41NDNaTTExNi41NDMgNTcuMzk1VjU3LjM4MjVIMTE1LjA0M1Y1Ny4zOTVIMTE2LjU0M1pNMTE2LjU0MyA1Ny40MDc2VjU3LjM5NUgxMTUuMDQzVjU3LjQwNzZIMTE2LjU0M1pNMTE2LjU0MyA1Ny40MjAxVjU3LjQwNzZIMTE1LjA0M1Y1Ny40MjAxSDExNi41NDNaTTExNi41NDMgNTcuNDMyN1Y1Ny40MjAxSDExNS4wNDNWNTcuNDMyN0gxMTYuNTQzWk0xMTYuNTQzIDU3LjQ0NTNWNTcuNDMyN0gxMTUuMDQzVjU3LjQ0NTNIMTE2LjU0M1pNMTE2LjU0MyA1Ny40NTc5VjU3LjQ0NTNIMTE1LjA0M1Y1Ny40NTc5SDExNi41NDNaTTExNi41NDMgNTcuNDcwNVY1Ny40NTc5SDExNS4wNDNWNTcuNDcwNUgxMTYuNTQzWk0xMTYuNTQzIDU3LjQ4MzJWNTcuNDcwNUgxMTUuMDQzVjU3LjQ4MzJIMTE2LjU0M1pNMTE2LjU0MyA1Ny40OTU4VjU3LjQ4MzJIMTE1LjA0M1Y1Ny40OTU4SDExNi41NDNaTTExNi41NDMgNTcuNTA4NFY1Ny40OTU4SDExNS4wNDNWNTcuNTA4NEgxMTYuNTQzWk0xMTYuNTQzIDU3LjUyMTFWNTcuNTA4NEgxMTUuMDQzVjU3LjUyMTFIMTE2LjU0M1pNMTE2LjU0MyA1Ny41MzM4VjU3LjUyMTFIMTE1LjA0M1Y1Ny41MzM4SDExNi41NDNaTTExNi41NDMgNTcuNTQ2NFY1Ny41MzM4SDExNS4wNDNWNTcuNTQ2NEgxMTYuNTQzWk0xMTYuNTQzIDU3LjU1OTFWNTcuNTQ2NEgxMTUuMDQzVjU3LjU1OTFIMTE2LjU0M1pNMTE2LjU0MyA1Ny41NzE4VjU3LjU1OTFIMTE1LjA0M1Y1Ny41NzE4SDExNi41NDNaTTExNi41NDMgNTcuNTg0NVY1Ny41NzE4SDExNS4wNDNWNTcuNTg0NUgxMTYuNTQzWk0xMTYuNTQzIDU3LjU5NzNWNTcuNTg0NUgxMTUuMDQzVjU3LjU5NzNIMTE2LjU0M1pNMTE2LjU0MyA1Ny42MVY1Ny41OTczSDExNS4wNDNWNTcuNjFIMTE2LjU0M1pNMTE2LjU0MyA1Ny42MjI4VjU3LjYxSDExNS4wNDNWNTcuNjIyOEgxMTYuNTQzWk0xMTYuNTQzIDU3LjYzNTVWNTcuNjIyOEgxMTUuMDQzVjU3LjYzNTVIMTE2LjU0M1pNMTE2LjU0MyA1Ny42NDgzVjU3LjYzNTVIMTE1LjA0M1Y1Ny42NDgzSDExNi41NDNaTTExNi41NDMgNTcuNjYxMVY1Ny42NDgzSDExNS4wNDNWNTcuNjYxMUgxMTYuNTQzWk0xMTYuNTQzIDU3LjY3MzlWNTcuNjYxMUgxMTUuMDQzVjU3LjY3MzlIMTE2LjU0M1pNMTE2LjU0MyA1Ny42ODY3VjU3LjY3MzlIMTE1LjA0M1Y1Ny42ODY3SDExNi41NDNaTTExNi41NDMgNTcuNjk5NVY1Ny42ODY3SDExNS4wNDNWNTcuNjk5NUgxMTYuNTQzWk0xMTYuNTQzIDU3LjcxMjNWNTcuNjk5NUgxMTUuMDQzVjU3LjcxMjNIMTE2LjU0M1pNMTE2LjU0MyA1Ny43MjUxVjU3LjcxMjNIMTE1LjA0M1Y1Ny43MjUxSDExNi41NDNaTTExNi41NDMgNTcuNzM4VjU3LjcyNTFIMTE1LjA0M1Y1Ny43MzhIMTE2LjU0M1pNMTE2LjU0MyA1Ny43NTA4VjU3LjczOEgxMTUuMDQzVjU3Ljc1MDhIMTE2LjU0M1pNMTE2LjU0MyA1Ny43NjM3VjU3Ljc1MDhIMTE1LjA0M1Y1Ny43NjM3SDExNi41NDNaTTExNi41NDMgNTcuNzc2NlY1Ny43NjM3SDExNS4wNDNWNTcuNzc2NkgxMTYuNTQzWk0xMTYuNTQzIDU3Ljc4OTVWNTcuNzc2NkgxMTUuMDQzVjU3Ljc4OTVIMTE2LjU0M1pNMTE2LjU0MyA1Ny44MDI0VjU3Ljc4OTVIMTE1LjA0M1Y1Ny44MDI0SDExNi41NDNaTTExNi41NDMgNTcuODE1M1Y1Ny44MDI0SDExNS4wNDNWNTcuODE1M0gxMTYuNTQzWk0xMTYuNTQzIDU3LjgyODJWNTcuODE1M0gxMTUuMDQzVjU3LjgyODJIMTE2LjU0M1pNMTE2LjU0MyA1Ny44NDEyVjU3LjgyODJIMTE1LjA0M1Y1Ny44NDEySDExNi41NDNaTTExNi41NDMgNTcuODU0MVY1Ny44NDEySDExNS4wNDNWNTcuODU0MUgxMTYuNTQzWk0xMTYuNTQzIDU3Ljg2NzFWNTcuODU0MUgxMTUuMDQzVjU3Ljg2NzFIMTE2LjU0M1pNMTE2LjU0MyA1Ny44ODAxVjU3Ljg2NzFIMTE1LjA0M1Y1Ny44ODAxSDExNi41NDNaTTExNi41NDMgNTcuODkzVjU3Ljg4MDFIMTE1LjA0M1Y1Ny44OTNIMTE2LjU0M1pNMTE2LjU0MyA1Ny45MDZWNTcuODkzSDExNS4wNDNWNTcuOTA2SDExNi41NDNaTTExNi41NDMgNTcuOTE5VjU3LjkwNkgxMTUuMDQzVjU3LjkxOUgxMTYuNTQzWk0xMTYuNTQzIDU3LjkzMjFWNTcuOTE5SDExNS4wNDNWNTcuOTMyMUgxMTYuNTQzWk0xMTYuNTQzIDU3Ljk0NTFWNTcuOTMyMUgxMTUuMDQzVjU3Ljk0NTFIMTE2LjU0M1pNMTE2LjU0MyA1Ny45NTgxVjU3Ljk0NTFIMTE1LjA0M1Y1Ny45NTgxSDExNi41NDNaTTExNi41NDMgNTcuOTcxMlY1Ny45NTgxSDExNS4wNDNWNTcuOTcxMkgxMTYuNTQzWk0xMTYuNTQzIDU3Ljk4NDJWNTcuOTcxMkgxMTUuMDQzVjU3Ljk4NDJIMTE2LjU0M1pNMTE2LjU0MyA1Ny45OTczVjU3Ljk4NDJIMTE1LjA0M1Y1Ny45OTczSDExNi41NDNaTTExNi41NDMgNTguMDEwNFY1Ny45OTczSDExNS4wNDNWNTguMDEwNEgxMTYuNTQzWk0xMTYuNTQzIDU4LjAyMzVWNTguMDEwNEgxMTUuMDQzVjU4LjAyMzVIMTE2LjU0M1pNMTE2LjU0MyA1OC4wMzY2VjU4LjAyMzVIMTE1LjA0M1Y1OC4wMzY2SDExNi41NDNaTTExNi41NDMgNTguMDQ5N1Y1OC4wMzY2SDExNS4wNDNWNTguMDQ5N0gxMTYuNTQzWk0xMTYuNTQzIDU4LjA2MjlWNTguMDQ5N0gxMTUuMDQzVjU4LjA2MjlIMTE2LjU0M1pNMTE2LjU0MyA1OC4wNzZWNTguMDYyOUgxMTUuMDQzVjU4LjA3NkgxMTYuNTQzWk0xMTYuNTQzIDU4LjA4OTFWNTguMDc2SDExNS4wNDNWNTguMDg5MUgxMTYuNTQzWk0xMTYuNTQzIDU4LjEwMjNWNTguMDg5MUgxMTUuMDQzVjU4LjEwMjNIMTE2LjU0M1pNMTE2LjU0MyA1OC4xMTU1VjU4LjEwMjNIMTE1LjA0M1Y1OC4xMTU1SDExNi41NDNaTTExNi41NDMgNTguMTI4N1Y1OC4xMTU1SDExNS4wNDNWNTguMTI4N0gxMTYuNTQzWk0xMTYuNTQzIDU4LjE0MTlWNTguMTI4N0gxMTUuMDQzVjU4LjE0MTlIMTE2LjU0M1pNMTE2LjU0MyA1OC4xNTUxVjU4LjE0MTlIMTE1LjA0M1Y1OC4xNTUxSDExNi41NDNaTTExNi41NDMgNTguMTY4M1Y1OC4xNTUxSDExNS4wNDNWNTguMTY4M0gxMTYuNTQzWk0xMTYuNTQzIDU4LjE4MTVWNTguMTY4M0gxMTUuMDQzVjU4LjE4MTVIMTE2LjU0M1pNMTE2LjU0MyA1OC4xOTQ4VjU4LjE4MTVIMTE1LjA0M1Y1OC4xOTQ4SDExNi41NDNaTTExNi41NDMgNTguMjA4VjU4LjE5NDhIMTE1LjA0M1Y1OC4yMDhIMTE2LjU0M1pNMTE2LjU0MyA1OC4yMjEzVjU4LjIwOEgxMTUuMDQzVjU4LjIyMTNIMTE2LjU0M1pNMTE2LjU0MyA1OC4yMzQ2VjU4LjIyMTNIMTE1LjA0M1Y1OC4yMzQ2SDExNi41NDNaTTExNi41NDMgNTguMjQ3OVY1OC4yMzQ2SDExNS4wNDNWNTguMjQ3OUgxMTYuNTQzWk0xMTYuNTQzIDU4LjI2MTJWNTguMjQ3OUgxMTUuMDQzVjU4LjI2MTJIMTE2LjU0M1pNMTE2LjU0MyA1OC4yNzQ1VjU4LjI2MTJIMTE1LjA0M1Y1OC4yNzQ1SDExNi41NDNaTTExNi41NDMgNTguMjg3OFY1OC4yNzQ1SDExNS4wNDNWNTguMjg3OEgxMTYuNTQzWk0xMTYuNTQzIDU4LjMwMTFWNTguMjg3OEgxMTUuMDQzVjU4LjMwMTFIMTE2LjU0M1pNMTE2LjU0MyA1OC4zMTQ1VjU4LjMwMTFIMTE1LjA0M1Y1OC4zMTQ1SDExNi41NDNaTTExNi41NDMgNTguMzI3OFY1OC4zMTQ1SDExNS4wNDNWNTguMzI3OEgxMTYuNTQzWk0xMTYuNTQzIDU4LjM0MTJWNTguMzI3OEgxMTUuMDQzVjU4LjM0MTJIMTE2LjU0M1pNMTE2LjU0MyA1OC4zNTQ2VjU4LjM0MTJIMTE1LjA0M1Y1OC4zNTQ2SDExNi41NDNaTTExNi41NDMgNTguMzY3OVY1OC4zNTQ2SDExNS4wNDNWNTguMzY3OUgxMTYuNTQzWk0xMTYuNTQzIDU4LjM4MTNWNTguMzY3OUgxMTUuMDQzVjU4LjM4MTNIMTE2LjU0M1pNMTE2LjU0MyA1OC4zOTQ4VjU4LjM4MTNIMTE1LjA0M1Y1OC4zOTQ4SDExNi41NDNaTTExNi41NDMgNTguNDA4MlY1OC4zOTQ4SDExNS4wNDNWNTguNDA4MkgxMTYuNTQzWk0xMTYuNTQzIDU4LjQyMTZWNTguNDA4MkgxMTUuMDQzVjU4LjQyMTZIMTE2LjU0M1pNMTE2LjU0MyA1OC40MzUxVjU4LjQyMTZIMTE1LjA0M1Y1OC40MzUxSDExNi41NDNaTTExNi41NDMgNTguNDQ4NVY1OC40MzUxSDExNS4wNDNWNTguNDQ4NUgxMTYuNTQzWk0xMTYuNTQzIDU4LjQ2MlY1OC40NDg1SDExNS4wNDNWNTguNDYySDExNi41NDNaTTExNi41NDMgNTguNDc1NVY1OC40NjJIMTE1LjA0M1Y1OC40NzU1SDExNi41NDNaTTExNi41NDMgNTguNDg4OVY1OC40NzU1SDExNS4wNDNWNTguNDg4OUgxMTYuNTQzWk0xMTYuNTQzIDU4LjUwMjRWNTguNDg4OUgxMTUuMDQzVjU4LjUwMjRIMTE2LjU0M1pNMTE2LjU0MyA1OC41MTZWNTguNTAyNEgxMTUuMDQzVjU4LjUxNkgxMTYuNTQzWk0xMTYuNTQzIDU4LjUyOTVWNTguNTE2SDExNS4wNDNWNTguNTI5NUgxMTYuNTQzWk0xMTYuNTQzIDU4LjU0M1Y1OC41Mjk1SDExNS4wNDNWNTguNTQzSDExNi41NDNaTTExNi41NDMgNTguNTU2NlY1OC41NDNIMTE1LjA0M1Y1OC41NTY2SDExNi41NDNaTTExNi41NDMgNTguNTcwMVY1OC41NTY2SDExNS4wNDNWNTguNTcwMUgxMTYuNTQzWk0xMTYuNTQzIDU4LjU4MzdWNTguNTcwMUgxMTUuMDQzVjU4LjU4MzdIMTE2LjU0M1pNMTE2LjU0MyA1OC41OTczVjU4LjU4MzdIMTE1LjA0M1Y1OC41OTczSDExNi41NDNaTTExNi41NDMgNTguNjEwOVY1OC41OTczSDExNS4wNDNWNTguNjEwOUgxMTYuNTQzWk0xMTYuNTQzIDU4LjYyNDVWNTguNjEwOUgxMTUuMDQzVjU4LjYyNDVIMTE2LjU0M1pNMTE2LjU0MyA1OC42MzgxVjU4LjYyNDVIMTE1LjA0M1Y1OC42MzgxSDExNi41NDNaTTExNi41NDMgNTguNjUxN1Y1OC42MzgxSDExNS4wNDNWNTguNjUxN0gxMTYuNTQzWk0xMTYuNTQzIDU4LjY2NTNWNTguNjUxN0gxMTUuMDQzVjU4LjY2NTNIMTE2LjU0M1pNMTE2LjU0MyA1OC42NzlWNTguNjY1M0gxMTUuMDQzVjU4LjY3OUgxMTYuNTQzWk0xMTYuNTQzIDU4LjY5MjZWNTguNjc5SDExNS4wNDNWNTguNjkyNkgxMTYuNTQzWk0xMTYuNTQzIDU4LjcwNjNWNTguNjkyNkgxMTUuMDQzVjU4LjcwNjNIMTE2LjU0M1pNMTE2LjU0MyA1OC43MlY1OC43MDYzSDExNS4wNDNWNTguNzJIMTE2LjU0M1pNMTE2LjU0MyA1OC43MzM3VjU4LjcySDExNS4wNDNWNTguNzMzN0gxMTYuNTQzWk0xMTYuNTQzIDU4Ljc0NzRWNTguNzMzN0gxMTUuMDQzVjU4Ljc0NzRIMTE2LjU0M1pNMTE2LjU0MyA1OC43NjExVjU4Ljc0NzRIMTE1LjA0M1Y1OC43NjExSDExNi41NDNaTTExNi41NDMgNTguNzc0OFY1OC43NjExSDExNS4wNDNWNTguNzc0OEgxMTYuNTQzWk0xMTYuNTQzIDU4Ljc4ODZWNTguNzc0OEgxMTUuMDQzVjU4Ljc4ODZIMTE2LjU0M1pNMTE2LjU0MyA1OC44MDIzVjU4Ljc4ODZIMTE1LjA0M1Y1OC44MDIzSDExNi41NDNaTTExNi41NDMgNTguODE2MVY1OC44MDIzSDExNS4wNDNWNTguODE2MUgxMTYuNTQzWk0xMTYuNTQzIDU4LjgyOThWNTguODE2MUgxMTUuMDQzVjU4LjgyOThIMTE2LjU0M1pNMTE2LjU0MyA1OC44NDM2VjU4LjgyOThIMTE1LjA0M1Y1OC44NDM2SDExNi41NDNaTTExNi41NDMgNTguODU3NFY1OC44NDM2SDExNS4wNDNWNTguODU3NEgxMTYuNTQzWk0xMTYuNTQzIDU4Ljg3MTJWNTguODU3NEgxMTUuMDQzVjU4Ljg3MTJIMTE2LjU0M1pNMTE2LjU0MyA1OC44ODVWNTguODcxMkgxMTUuMDQzVjU4Ljg4NUgxMTYuNTQzWk0xMTYuNTQzIDU4Ljg5ODlWNTguODg1SDExNS4wNDNWNTguODk4OUgxMTYuNTQzWk0xMTYuNTQzIDU4LjkxMjdWNTguODk4OUgxMTUuMDQzVjU4LjkxMjdIMTE2LjU0M1pNMTE2LjU0MyA1OC45MjY2VjU4LjkxMjdIMTE1LjA0M1Y1OC45MjY2SDExNi41NDNaTTExNi41NDMgNTguOTQwNFY1OC45MjY2SDExNS4wNDNWNTguOTQwNEgxMTYuNTQzWk0xMTYuNTQzIDU4Ljk1NDNWNTguOTQwNEgxMTUuMDQzVjU4Ljk1NDNIMTE2LjU0M1pNMTE2LjU0MyA1OC45NjgyVjU4Ljk1NDNIMTE1LjA0M1Y1OC45NjgySDExNi41NDNaTTExNi41NDMgNTguOTgyMVY1OC45NjgySDExNS4wNDNWNTguOTgyMUgxMTYuNTQzWk0xMTYuNTQzIDU4Ljk5NlY1OC45ODIxSDExNS4wNDNWNTguOTk2SDExNi41NDNaTTExNi41NDMgNTkuMDA5OVY1OC45OTZIMTE1LjA0M1Y1OS4wMDk5SDExNi41NDNaTTExNi41NDMgNTkuMDIzOFY1OS4wMDk5SDExNS4wNDNWNTkuMDIzOEgxMTYuNTQzWk0xMTYuNTQzIDU5LjAzNzhWNTkuMDIzOEgxMTUuMDQzVjU5LjAzNzhIMTE2LjU0M1pNMTE2LjU0MyA1OS4wNTE3VjU5LjAzNzhIMTE1LjA0M1Y1OS4wNTE3SDExNi41NDNaTTExNi41NDMgNTkuMDY1N1Y1OS4wNTE3SDExNS4wNDNWNTkuMDY1N0gxMTYuNTQzWk0xMTYuNTQzIDU5LjA3OTZWNTkuMDY1N0gxMTUuMDQzVjU5LjA3OTZIMTE2LjU0M1pNMTE2LjU0MyA1OS4wOTM2VjU5LjA3OTZIMTE1LjA0M1Y1OS4wOTM2SDExNi41NDNaTTExNi41NDMgNTkuMTA3NlY1OS4wOTM2SDExNS4wNDNWNTkuMTA3NkgxMTYuNTQzWk0xMTYuNTQzIDU5LjEyMTZWNTkuMTA3NkgxMTUuMDQzVjU5LjEyMTZIMTE2LjU0M1pNMTE2LjU0MyA1OS4xMzU3VjU5LjEyMTZIMTE1LjA0M1Y1OS4xMzU3SDExNi41NDNaTTExNi41NDMgNTkuMTQ5N1Y1OS4xMzU3SDExNS4wNDNWNTkuMTQ5N0gxMTYuNTQzWk0xMTYuNTQzIDU5LjE2MzdWNTkuMTQ5N0gxMTUuMDQzVjU5LjE2MzdIMTE2LjU0M1pNMTE2LjU0MyA1OS4xNzc4VjU5LjE2MzdIMTE1LjA0M1Y1OS4xNzc4SDExNi41NDNaTTExNi41NDMgNTkuMTkxOFY1OS4xNzc4SDExNS4wNDNWNTkuMTkxOEgxMTYuNTQzWk0xMTYuNTQzIDU5LjIwNTlWNTkuMTkxOEgxMTUuMDQzVjU5LjIwNTlIMTE2LjU0M1pNMTE2LjU0MyA1OS4yMlY1OS4yMDU5SDExNS4wNDNWNTkuMjJIMTE2LjU0M1pNMTE2LjU0MyA1OS4yMzQxVjU5LjIySDExNS4wNDNWNTkuMjM0MUgxMTYuNTQzWk0xMTYuNTQzIDU5LjI0ODJWNTkuMjM0MUgxMTUuMDQzVjU5LjI0ODJIMTE2LjU0M1pNMTE2LjU0MyA1OS4yNjIzVjU5LjI0ODJIMTE1LjA0M1Y1OS4yNjIzSDExNi41NDNaTTExNi41NDMgNTkuMjc2NVY1OS4yNjIzSDExNS4wNDNWNTkuMjc2NUgxMTYuNTQzWk0xMTYuNTQzIDU5LjI5MDZWNTkuMjc2NUgxMTUuMDQzVjU5LjI5MDZIMTE2LjU0M1pNMTE2LjU0MyA1OS4zMDQ4VjU5LjI5MDZIMTE1LjA0M1Y1OS4zMDQ4SDExNi41NDNaTTExNi41NDMgNTkuMzE4OVY1OS4zMDQ4SDExNS4wNDNWNTkuMzE4OUgxMTYuNTQzWk0xMTYuNTQzIDU5LjMzMzFWNTkuMzE4OUgxMTUuMDQzVjU5LjMzMzFIMTE2LjU0M1pNMTE2LjU0MyA1OS4zNDczVjU5LjMzMzFIMTE1LjA0M1Y1OS4zNDczSDExNi41NDNaTTExNi41NDMgNTkuMzYxNVY1OS4zNDczSDExNS4wNDNWNTkuMzYxNUgxMTYuNTQzWk0xMTYuNTQzIDU5LjM3NTdWNTkuMzYxNUgxMTUuMDQzVjU5LjM3NTdIMTE2LjU0M1pNMTE2LjU0MyA1OS4zODk5VjU5LjM3NTdIMTE1LjA0M1Y1OS4zODk5SDExNi41NDNaTTExNi41NDMgNTkuNDA0MVY1OS4zODk5SDExNS4wNDNWNTkuNDA0MUgxMTYuNTQzWk0xMTYuNTQzIDU5LjQxODRWNTkuNDA0MUgxMTUuMDQzVjU5LjQxODRIMTE2LjU0M1pNMTE2LjU0MyA1OS40MzI2VjU5LjQxODRIMTE1LjA0M1Y1OS40MzI2SDExNi41NDNaTTExNi41NDMgNTkuNDQ2OVY1OS40MzI2SDExNS4wNDNWNTkuNDQ2OUgxMTYuNTQzWk0xMTYuNTQzIDU5LjQ2MTJWNTkuNDQ2OUgxMTUuMDQzVjU5LjQ2MTJIMTE2LjU0M1pNMTE2LjU0MyA1OS40NzU1VjU5LjQ2MTJIMTE1LjA0M1Y1OS40NzU1SDExNi41NDNaTTExNi41NDMgNTkuNDg5OFY1OS40NzU1SDExNS4wNDNWNTkuNDg5OEgxMTYuNTQzWk0xMTYuNTQzIDU5LjUwNDFWNTkuNDg5OEgxMTUuMDQzVjU5LjUwNDFIMTE2LjU0M1pNMTE2LjU0MyA1OS41MTg0VjU5LjUwNDFIMTE1LjA0M1Y1OS41MTg0SDExNi41NDNaTTExNi41NDMgNTkuNTMyN1Y1OS41MTg0SDExNS4wNDNWNTkuNTMyN0gxMTYuNTQzWk0xMTYuNTQzIDU5LjU0NzFWNTkuNTMyN0gxMTUuMDQzVjU5LjU0NzFIMTE2LjU0M1pNMTE2LjU0MyA1OS41NjE0VjU5LjU0NzFIMTE1LjA0M1Y1OS41NjE0SDExNi41NDNaTTExNi41NDMgNTkuNTc1OFY1OS41NjE0SDExNS4wNDNWNTkuNTc1OEgxMTYuNTQzWk0xMTYuNTQzIDU5LjU5MDJWNTkuNTc1OEgxMTUuMDQzVjU5LjU5MDJIMTE2LjU0M1pNMTE2LjU0MyA1OS42MDQ2VjU5LjU5MDJIMTE1LjA0M1Y1OS42MDQ2SDExNi41NDNaTTExNi41NDMgNTkuNjE5VjU5LjYwNDZIMTE1LjA0M1Y1OS42MTlIMTE2LjU0M1pNMTE2LjU0MyA1OS42MzM0VjU5LjYxOUgxMTUuMDQzVjU5LjYzMzRIMTE2LjU0M1pNMTE2LjU0MyA1OS42NDc4VjU5LjYzMzRIMTE1LjA0M1Y1OS42NDc4SDExNi41NDNaTTExNi41NDMgNTkuNjYyMlY1OS42NDc4SDExNS4wNDNWNTkuNjYyMkgxMTYuNTQzWk0xMTYuNTQzIDU5LjY3NjdWNTkuNjYyMkgxMTUuMDQzVjU5LjY3NjdIMTE2LjU0M1pNMTE2LjU0MyA1OS42OTExVjU5LjY3NjdIMTE1LjA0M1Y1OS42OTExSDExNi41NDNaTTExNi41NDMgNTkuNzA1NlY1OS42OTExSDExNS4wNDNWNTkuNzA1NkgxMTYuNTQzWk0xMTYuNTQzIDU5LjcyMDFWNTkuNzA1NkgxMTUuMDQzVjU5LjcyMDFIMTE2LjU0M1pNMTE2LjU0MyA1OS43MzQ2VjU5LjcyMDFIMTE1LjA0M1Y1OS43MzQ2SDExNi41NDNaTTExNi41NDMgNTkuNzQ5MVY1OS43MzQ2SDExNS4wNDNWNTkuNzQ5MUgxMTYuNTQzWk0xMTYuNTQzIDU5Ljc2MzZWNTkuNzQ5MUgxMTUuMDQzVjU5Ljc2MzZIMTE2LjU0M1pNMTE2LjU0MyA1OS43NzgxVjU5Ljc2MzZIMTE1LjA0M1Y1OS43NzgxSDExNi41NDNaTTExNi41NDMgNTkuNzkyN1Y1OS43NzgxSDExNS4wNDNWNTkuNzkyN0gxMTYuNTQzWk0xMTYuNTQzIDU5LjgwNzJWNTkuNzkyN0gxMTUuMDQzVjU5LjgwNzJIMTE2LjU0M1pNMTE2LjU0MyA1OS44MjE4VjU5LjgwNzJIMTE1LjA0M1Y1OS44MjE4SDExNi41NDNaTTExNi41NDMgNTkuODM2M1Y1OS44MjE4SDExNS4wNDNWNTkuODM2M0gxMTYuNTQzWk0xMTYuNTQzIDU5Ljg1MDlWNTkuODM2M0gxMTUuMDQzVjU5Ljg1MDlIMTE2LjU0M1pNMTE2LjU0MyA1OS44NjU1VjU5Ljg1MDlIMTE1LjA0M1Y1OS44NjU1SDExNi41NDNaTTExNi41NDMgNTkuODgwMVY1OS44NjU1SDExNS4wNDNWNTkuODgwMUgxMTYuNTQzWk0xMTYuNTQzIDU5Ljg5NDdWNTkuODgwMUgxMTUuMDQzVjU5Ljg5NDdIMTE2LjU0M1pNMTE2LjU0MyA1OS45MDk0VjU5Ljg5NDdIMTE1LjA0M1Y1OS45MDk0SDExNi41NDNaTTExNi41NDMgNTkuOTI0VjU5LjkwOTRIMTE1LjA0M1Y1OS45MjRIMTE2LjU0M1pNMTE2LjU0MyA1OS45Mzg2VjU5LjkyNEgxMTUuMDQzVjU5LjkzODZIMTE2LjU0M1pNMTE2LjU0MyA1OS45NTMzVjU5LjkzODZIMTE1LjA0M1Y1OS45NTMzSDExNi41NDNaTTExNi41NDMgNTkuOTY4VjU5Ljk1MzNIMTE1LjA0M1Y1OS45NjhIMTE2LjU0M1pNMTE2LjU0MyA1OS45ODI3VjU5Ljk2OEgxMTUuMDQzVjU5Ljk4MjdIMTE2LjU0M1pNMTE2LjU0MyA1OS45OTczVjU5Ljk4MjdIMTE1LjA0M1Y1OS45OTczSDExNi41NDNaTTExNi41NDMgNjAuMDEyMVY1OS45OTczSDExNS4wNDNWNjAuMDEyMUgxMTYuNTQzWk0xMTYuNTQzIDYwLjAyNjhWNjAuMDEyMUgxMTUuMDQzVjYwLjAyNjhIMTE2LjU0M1pNMTE2LjU0MyA2MC4wNDE1VjYwLjAyNjhIMTE1LjA0M1Y2MC4wNDE1SDExNi41NDNaTTExNi41NDMgNjAuMDU2MlY2MC4wNDE1SDExNS4wNDNWNjAuMDU2MkgxMTYuNTQzWk0xMTYuNTQzIDYwLjA3MVY2MC4wNTYySDExNS4wNDNWNjAuMDcxSDExNi41NDNaTTExNi41NDMgNjAuMDg1N1Y2MC4wNzFIMTE1LjA0M1Y2MC4wODU3SDExNi41NDNaTTExNi41NDMgNjAuMTAwNVY2MC4wODU3SDExNS4wNDNWNjAuMTAwNUgxMTYuNTQzWk0xMTYuNTQzIDYwLjExNTNWNjAuMTAwNUgxMTUuMDQzVjYwLjExNTNIMTE2LjU0M1pNMTE2LjU0MyA2MC4xMzAxVjYwLjExNTNIMTE1LjA0M1Y2MC4xMzAxSDExNi41NDNaTTExNi41NDMgNjAuMTQ0OVY2MC4xMzAxSDExNS4wNDNWNjAuMTQ0OUgxMTYuNTQzWk0xMTYuNTQzIDYwLjE1OTdWNjAuMTQ0OUgxMTUuMDQzVjYwLjE1OTdIMTE2LjU0M1pNMTE2LjU0MyA2MC4xNzQ1VjYwLjE1OTdIMTE1LjA0M1Y2MC4xNzQ1SDExNi41NDNaTTExNi41NDMgNjAuMTg5NFY2MC4xNzQ1SDExNS4wNDNWNjAuMTg5NEgxMTYuNTQzWk0xMTYuNTQzIDYwLjIwNDJWNjAuMTg5NEgxMTUuMDQzVjYwLjIwNDJIMTE2LjU0M1pNMTE2LjU0MyA2MC4yMTkxVjYwLjIwNDJIMTE1LjA0M1Y2MC4yMTkxSDExNi41NDNaTTExNi41NDMgNjAuMjM0VjYwLjIxOTFIMTE1LjA0M1Y2MC4yMzRIMTE2LjU0M1pNMTE2LjU0MyA2MC4yNDg5VjYwLjIzNEgxMTUuMDQzVjYwLjI0ODlIMTE2LjU0M1pNMTE2LjU0MyA2MC4yNjM4VjYwLjI0ODlIMTE1LjA0M1Y2MC4yNjM4SDExNi41NDNaTTExNi41NDMgNjAuMjc4N1Y2MC4yNjM4SDExNS4wNDNWNjAuMjc4N0gxMTYuNTQzWk0xMTYuNTQzIDYwLjI5MzZWNjAuMjc4N0gxMTUuMDQzVjYwLjI5MzZIMTE2LjU0M1pNMTE2LjU0MyA2MC4zMDg1VjYwLjI5MzZIMTE1LjA0M1Y2MC4zMDg1SDExNi41NDNaTTExNi41NDMgNjAuMzIzNFY2MC4zMDg1SDExNS4wNDNWNjAuMzIzNEgxMTYuNTQzWk0xMTYuNTQzIDYwLjMzODRWNjAuMzIzNEgxMTUuMDQzVjYwLjMzODRIMTE2LjU0M1pNMTE2LjU0MyA2MC4zNTM0VjYwLjMzODRIMTE1LjA0M1Y2MC4zNTM0SDExNi41NDNaTTExNi41NDMgNjAuMzY4M1Y2MC4zNTM0SDExNS4wNDNWNjAuMzY4M0gxMTYuNTQzWk0xMTYuNTQzIDYwLjM4MzNWNjAuMzY4M0gxMTUuMDQzVjYwLjM4MzNIMTE2LjU0M1pNMTE2LjU0MyA2MC4zOTgzVjYwLjM4MzNIMTE1LjA0M1Y2MC4zOTgzSDExNi41NDNaTTExNi41NDMgNjAuNDEzM1Y2MC4zOTgzSDExNS4wNDNWNjAuNDEzM0gxMTYuNTQzWk0xMTYuNTQzIDYwLjQyODNWNjAuNDEzM0gxMTUuMDQzVjYwLjQyODNIMTE2LjU0M1pNMTE2LjU0MyA2MC40NDM0VjYwLjQyODNIMTE1LjA0M1Y2MC40NDM0SDExNi41NDNaTTExNi41NDMgNjAuNDU4NFY2MC40NDM0SDExNS4wNDNWNjAuNDU4NEgxMTYuNTQzWk0xMTYuNTQzIDYwLjQ3MzVWNjAuNDU4NEgxMTUuMDQzVjYwLjQ3MzVIMTE2LjU0M1pNMTE2LjU0MyA2MC40ODg1VjYwLjQ3MzVIMTE1LjA0M1Y2MC40ODg1SDExNi41NDNaTTExNi41NDMgNjAuNTAzNlY2MC40ODg1SDExNS4wNDNWNjAuNTAzNkgxMTYuNTQzWk0xMTYuNTQzIDYwLjUxODdWNjAuNTAzNkgxMTUuMDQzVjYwLjUxODdIMTE2LjU0M1pNMTE2LjU0MyA2MC41MzM4VjYwLjUxODdIMTE1LjA0M1Y2MC41MzM4SDExNi41NDNaTTExNi41NDMgNjAuNTQ4OVY2MC41MzM4SDExNS4wNDNWNjAuNTQ4OUgxMTYuNTQzWk0xMTYuNTQzIDYwLjU2NFY2MC41NDg5SDExNS4wNDNWNjAuNTY0SDExNi41NDNaTTExNi41NDMgNjAuNTc5MlY2MC41NjRIMTE1LjA0M1Y2MC41NzkySDExNi41NDNaTTExNi41NDMgNjAuNTk0M1Y2MC41NzkySDExNS4wNDNWNjAuNTk0M0gxMTYuNTQzWk0xMTYuNTQzIDYwLjYwOTVWNjAuNTk0M0gxMTUuMDQzVjYwLjYwOTVIMTE2LjU0M1pNMTE2LjU0MyA2MC42MjQ2VjYwLjYwOTVIMTE1LjA0M1Y2MC42MjQ2SDExNi41NDNaTTExNi41NDMgNjAuNjM5OFY2MC42MjQ2SDExNS4wNDNWNjAuNjM5OEgxMTYuNTQzWk0xMTYuNTQzIDYwLjY1NVY2MC42Mzk4SDExNS4wNDNWNjAuNjU1SDExNi41NDNaTTExNi41NDMgNjAuNjcwMlY2MC42NTVIMTE1LjA0M1Y2MC42NzAySDExNi41NDNaTTExNi41NDMgNjAuNjg1NFY2MC42NzAySDExNS4wNDNWNjAuNjg1NEgxMTYuNTQzWk0xMTYuNTQzIDYwLjcwMDZWNjAuNjg1NEgxMTUuMDQzVjYwLjcwMDZIMTE2LjU0M1pNMTE2LjU0MyA2MC43MTU5VjYwLjcwMDZIMTE1LjA0M1Y2MC43MTU5SDExNi41NDNaTTExNi41NDMgNjAuNzMxMVY2MC43MTU5SDExNS4wNDNWNjAuNzMxMUgxMTYuNTQzWk0xMTYuNTQzIDYwLjc0NjRWNjAuNzMxMUgxMTUuMDQzVjYwLjc0NjRIMTE2LjU0M1pNMTE2LjU0MyA2MC43NjE2VjYwLjc0NjRIMTE1LjA0M1Y2MC43NjE2SDExNi41NDNaTTExNi41NDMgNjAuNzc2OVY2MC43NjE2SDExNS4wNDNWNjAuNzc2OUgxMTYuNTQzWk0xMTYuNTQzIDYwLjc5MjJWNjAuNzc2OUgxMTUuMDQzVjYwLjc5MjJIMTE2LjU0M1pNMTE2LjU0MyA2MC44MDc1VjYwLjc5MjJIMTE1LjA0M1Y2MC44MDc1SDExNi41NDNaTTExNi41NDMgNjAuODIyOFY2MC44MDc1SDExNS4wNDNWNjAuODIyOEgxMTYuNTQzWk0xMTYuNTQzIDYwLjgzODFWNjAuODIyOEgxMTUuMDQzVjYwLjgzODFIMTE2LjU0M1pNMTE2LjU0MyA2MC44NTM1VjYwLjgzODFIMTE1LjA0M1Y2MC44NTM1SDExNi41NDNaTTExNi41NDMgNjAuODY4OFY2MC44NTM1SDExNS4wNDNWNjAuODY4OEgxMTYuNTQzWk0xMTYuNTQzIDYwLjg4NDJWNjAuODY4OEgxMTUuMDQzVjYwLjg4NDJIMTE2LjU0M1pNMTE2LjU0MyA2MC44OTk1VjYwLjg4NDJIMTE1LjA0M1Y2MC44OTk1SDExNi41NDNaTTExNi41NDMgNjAuOTE0OVY2MC44OTk1SDExNS4wNDNWNjAuOTE0OUgxMTYuNTQzWk0xMTYuNTQzIDYwLjkzMDNWNjAuOTE0OUgxMTUuMDQzVjYwLjkzMDNIMTE2LjU0M1pNMTE2LjU0MyA2MC45NDU3VjYwLjkzMDNIMTE1LjA0M1Y2MC45NDU3SDExNi41NDNaTTExNi41NDMgNjAuOTYxMVY2MC45NDU3SDExNS4wNDNWNjAuOTYxMUgxMTYuNTQzWk0xMTYuNTQzIDYwLjk3NjVWNjAuOTYxMUgxMTUuMDQzVjYwLjk3NjVIMTE2LjU0M1pNMTE2LjU0MyA2MC45OTJWNjAuOTc2NUgxMTUuMDQzVjYwLjk5MkgxMTYuNTQzWk0xMTYuNTQzIDYxLjAwNzRWNjAuOTkySDExNS4wNDNWNjEuMDA3NEgxMTYuNTQzWk0xMTYuNTQzIDYxLjAyMjlWNjEuMDA3NEgxMTUuMDQzVjYxLjAyMjlIMTE2LjU0M1pNMTE2LjU0MyA2MS4wMzg0VjYxLjAyMjlIMTE1LjA0M1Y2MS4wMzg0SDExNi41NDNaTTExNi41NDMgNjEuMDUzOFY2MS4wMzg0SDExNS4wNDNWNjEuMDUzOEgxMTYuNTQzWk0xMTYuNTQzIDYxLjA2OTNWNjEuMDUzOEgxMTUuMDQzVjYxLjA2OTNIMTE2LjU0M1pNMTE2LjU0MyA2MS4wODQ4VjYxLjA2OTNIMTE1LjA0M1Y2MS4wODQ4SDExNi41NDNaTTExNi41NDMgNjEuMTAwM1Y2MS4wODQ4SDExNS4wNDNWNjEuMTAwM0gxMTYuNTQzWk0xMTYuNTQzIDYxLjExNTlWNjEuMTAwM0gxMTUuMDQzVjYxLjExNTlIMTE2LjU0M1pNMTE2LjU0MyA2MS4xMzE0VjYxLjExNTlIMTE1LjA0M1Y2MS4xMzE0SDExNi41NDNaTTExNi41NDMgNjEuMTQ3VjYxLjEzMTRIMTE1LjA0M1Y2MS4xNDdIMTE2LjU0M1pNMTE2LjU0MyA2MS4xNjI1VjYxLjE0N0gxMTUuMDQzVjYxLjE2MjVIMTE2LjU0M1pNMTE2LjU0MyA2MS4xNzgxVjYxLjE2MjVIMTE1LjA0M1Y2MS4xNzgxSDExNi41NDNaTTExNi41NDMgNjEuMTkzN1Y2MS4xNzgxSDExNS4wNDNWNjEuMTkzN0gxMTYuNTQzWk0xMTYuNTQzIDYxLjIwOTNWNjEuMTkzN0gxMTUuMDQzVjYxLjIwOTNIMTE2LjU0M1pNMTE2LjU0MyA2MS4yMjQ5VjYxLjIwOTNIMTE1LjA0M1Y2MS4yMjQ5SDExNi41NDNaTTExNi41NDMgNjEuMjQwNVY2MS4yMjQ5SDExNS4wNDNWNjEuMjQwNUgxMTYuNTQzWk0xMTYuNTQzIDYxLjI1NjFWNjEuMjQwNUgxMTUuMDQzVjYxLjI1NjFIMTE2LjU0M1pNMTE2LjU0MyA2MS4yNzE4VjYxLjI1NjFIMTE1LjA0M1Y2MS4yNzE4SDExNi41NDNaTTExNi41NDMgNjEuMjg3NFY2MS4yNzE4SDExNS4wNDNWNjEuMjg3NEgxMTYuNTQzWk0xMTYuNTQzIDYxLjMwMzFWNjEuMjg3NEgxMTUuMDQzVjYxLjMwMzFIMTE2LjU0M1pNMTE2LjU0MyA2MS4zMTg3VjYxLjMwMzFIMTE1LjA0M1Y2MS4zMTg3SDExNi41NDNaTTExNi41NDMgNjEuMzM0NFY2MS4zMTg3SDExNS4wNDNWNjEuMzM0NEgxMTYuNTQzWk0xMTYuNTQzIDYxLjM1MDFWNjEuMzM0NEgxMTUuMDQzVjYxLjM1MDFIMTE2LjU0M1pNMTE2LjU0MyA2MS4zNjU4VjYxLjM1MDFIMTE1LjA0M1Y2MS4zNjU4SDExNi41NDNaTTExNi41NDMgNjEuMzgxNVY2MS4zNjU4SDExNS4wNDNWNjEuMzgxNUgxMTYuNTQzWk0xMTYuNTQzIDYxLjM5NzNWNjEuMzgxNUgxMTUuMDQzVjYxLjM5NzNIMTE2LjU0M1pNMTE2LjU0MyA2MS40MTNWNjEuMzk3M0gxMTUuMDQzVjYxLjQxM0gxMTYuNTQzWk0xMTYuNTQzIDYxLjQyODhWNjEuNDEzSDExNS4wNDNWNjEuNDI4OEgxMTYuNTQzWk0xMTYuNTQzIDYxLjQ0NDVWNjEuNDI4OEgxMTUuMDQzVjYxLjQ0NDVIMTE2LjU0M1pNMTE2LjU0MyA2MS40NjAzVjYxLjQ0NDVIMTE1LjA0M1Y2MS40NjAzSDExNi41NDNaTTExNi41NDMgNjEuNDc2MVY2MS40NjAzSDExNS4wNDNWNjEuNDc2MUgxMTYuNTQzWk0xMTYuNTQzIDYxLjQ5MTlWNjEuNDc2MUgxMTUuMDQzVjYxLjQ5MTlIMTE2LjU0M1pNMTE2LjU0MyA2MS41MDc3VjYxLjQ5MTlIMTE1LjA0M1Y2MS41MDc3SDExNi41NDNaTTExNi41NDMgNjEuNTIzNVY2MS41MDc3SDExNS4wNDNWNjEuNTIzNUgxMTYuNTQzWk0xMTYuNTQzIDYxLjUzOTNWNjEuNTIzNUgxMTUuMDQzVjYxLjUzOTNIMTE2LjU0M1pNMTE2LjU0MyA2MS41NTUyVjYxLjUzOTNIMTE1LjA0M1Y2MS41NTUySDExNi41NDNaTTExNi41NDMgNjEuNTcxVjYxLjU1NTJIMTE1LjA0M1Y2MS41NzFIMTE2LjU0M1pNMTE2LjU0MyA2MS41ODY5VjYxLjU3MUgxMTUuMDQzVjYxLjU4NjlIMTE2LjU0M1pNMTE2LjU0MyA2MS42MDI4VjYxLjU4NjlIMTE1LjA0M1Y2MS42MDI4SDExNi41NDNaTTExNi41NDMgNjEuNjE4NlY2MS42MDI4SDExNS4wNDNWNjEuNjE4NkgxMTYuNTQzWk0xMTYuNTQzIDYxLjYzNDVWNjEuNjE4NkgxMTUuMDQzVjYxLjYzNDVIMTE2LjU0M1pNMTE2LjU0MyA2MS42NTA0VjYxLjYzNDVIMTE1LjA0M1Y2MS42NTA0SDExNi41NDNaTTExNi41NDMgNjEuNjY2NFY2MS42NTA0SDExNS4wNDNWNjEuNjY2NEgxMTYuNTQzWk0xMTYuNTQzIDYxLjY4MjNWNjEuNjY2NEgxMTUuMDQzVjYxLjY4MjNIMTE2LjU0M1pNMTE2LjU0MyA2MS42OTgyVjYxLjY4MjNIMTE1LjA0M1Y2MS42OTgySDExNi41NDNaTTExNi41NDMgNjEuNzE0MlY2MS42OTgySDExNS4wNDNWNjEuNzE0MkgxMTYuNTQzWk0xMTYuNTQzIDYxLjczMDJWNjEuNzE0MkgxMTUuMDQzVjYxLjczMDJIMTE2LjU0M1pNMTE2LjU0MyA2MS43NDYxVjYxLjczMDJIMTE1LjA0M1Y2MS43NDYxSDExNi41NDNaTTExNi41NDMgNjEuNzYyMVY2MS43NDYxSDExNS4wNDNWNjEuNzYyMUgxMTYuNTQzWk0xMTYuNTQzIDYxLjc3ODFWNjEuNzYyMUgxMTUuMDQzVjYxLjc3ODFIMTE2LjU0M1pNMTE2LjU0MyA2MS43OTQxVjYxLjc3ODFIMTE1LjA0M1Y2MS43OTQxSDExNi41NDNaTTExNi41NDMgNjEuODEwMVY2MS43OTQxSDExNS4wNDNWNjEuODEwMUgxMTYuNTQzWk0xMTYuNTQzIDYxLjgyNjJWNjEuODEwMUgxMTUuMDQzVjYxLjgyNjJIMTE2LjU0M1pNMTE2LjU0MyA2MS44NDIyVjYxLjgyNjJIMTE1LjA0M1Y2MS44NDIySDExNi41NDNaTTExNi41NDMgNjEuODU4M1Y2MS44NDIySDExNS4wNDNWNjEuODU4M0gxMTYuNTQzWk0xMTYuNTQzIDYxLjg3NDNWNjEuODU4M0gxMTUuMDQzVjYxLjg3NDNIMTE2LjU0M1pNMTE2LjU0MyA2MS44OTA0VjYxLjg3NDNIMTE1LjA0M1Y2MS44OTA0SDExNi41NDNaTTExNi41NDMgNjEuOTA2NVY2MS44OTA0SDExNS4wNDNWNjEuOTA2NUgxMTYuNTQzWk0xMTYuNTQzIDYxLjkyMjZWNjEuOTA2NUgxMTUuMDQzVjYxLjkyMjZIMTE2LjU0M1pNMTE2LjU0MyA2MS45Mzg3VjYxLjkyMjZIMTE1LjA0M1Y2MS45Mzg3SDExNi41NDNaTTExNi41NDMgNjEuOTU0OFY2MS45Mzg3SDExNS4wNDNWNjEuOTU0OEgxMTYuNTQzWk0xMTYuNTQzIDYxLjk3MVY2MS45NTQ4SDExNS4wNDNWNjEuOTcxSDExNi41NDNaTTExNi41NDMgNjEuOTg3MVY2MS45NzFIMTE1LjA0M1Y2MS45ODcxSDExNi41NDNaTTExNi41NDMgNjIuMDAzM1Y2MS45ODcxSDExNS4wNDNWNjIuMDAzM0gxMTYuNTQzWk0xMTQuMjkzIDYyLjc1MzNIMTE1Ljc5M1Y2MS4yNTMzSDExNC4yOTNWNjIuNzUzM1pNMTEzLjU0MyA2MS45ODcxVjYyLjAwMzNIMTE1LjA0M1Y2MS45ODcxSDExMy41NDNaTTExMy41NDMgNjEuOTcxVjYxLjk4NzFIMTE1LjA0M1Y2MS45NzFIMTEzLjU0M1pNMTEzLjU0MyA2MS45NTQ4VjYxLjk3MUgxMTUuMDQzVjYxLjk1NDhIMTEzLjU0M1pNMTEzLjU0MyA2MS45Mzg3VjYxLjk1NDhIMTE1LjA0M1Y2MS45Mzg3SDExMy41NDNaTTExMy41NDMgNjEuOTIyNlY2MS45Mzg3SDExNS4wNDNWNjEuOTIyNkgxMTMuNTQzWk0xMTMuNTQzIDYxLjkwNjVWNjEuOTIyNkgxMTUuMDQzVjYxLjkwNjVIMTEzLjU0M1pNMTEzLjU0MyA2MS44OTA0VjYxLjkwNjVIMTE1LjA0M1Y2MS44OTA0SDExMy41NDNaTTExMy41NDMgNjEuODc0M1Y2MS44OTA0SDExNS4wNDNWNjEuODc0M0gxMTMuNTQzWk0xMTMuNTQzIDYxLjg1ODNWNjEuODc0M0gxMTUuMDQzVjYxLjg1ODNIMTEzLjU0M1pNMTEzLjU0MyA2MS44NDIyVjYxLjg1ODNIMTE1LjA0M1Y2MS44NDIySDExMy41NDNaTTExMy41NDMgNjEuODI2MlY2MS44NDIySDExNS4wNDNWNjEuODI2MkgxMTMuNTQzWk0xMTMuNTQzIDYxLjgxMDFWNjEuODI2MkgxMTUuMDQzVjYxLjgxMDFIMTEzLjU0M1pNMTEzLjU0MyA2MS43OTQxVjYxLjgxMDFIMTE1LjA0M1Y2MS43OTQxSDExMy41NDNaTTExMy41NDMgNjEuNzc4MVY2MS43OTQxSDExNS4wNDNWNjEuNzc4MUgxMTMuNTQzWk0xMTMuNTQzIDYxLjc2MjFWNjEuNzc4MUgxMTUuMDQzVjYxLjc2MjFIMTEzLjU0M1pNMTEzLjU0MyA2MS43NDYxVjYxLjc2MjFIMTE1LjA0M1Y2MS43NDYxSDExMy41NDNaTTExMy41NDMgNjEuNzMwMlY2MS43NDYxSDExNS4wNDNWNjEuNzMwMkgxMTMuNTQzWk0xMTMuNTQzIDYxLjcxNDJWNjEuNzMwMkgxMTUuMDQzVjYxLjcxNDJIMTEzLjU0M1pNMTEzLjU0MyA2MS42OTgyVjYxLjcxNDJIMTE1LjA0M1Y2MS42OTgySDExMy41NDNaTTExMy41NDMgNjEuNjgyM1Y2MS42OTgySDExNS4wNDNWNjEuNjgyM0gxMTMuNTQzWk0xMTMuNTQzIDYxLjY2NjRWNjEuNjgyM0gxMTUuMDQzVjYxLjY2NjRIMTEzLjU0M1pNMTEzLjU0MyA2MS42NTA0VjYxLjY2NjRIMTE1LjA0M1Y2MS42NTA0SDExMy41NDNaTTExMy41NDMgNjEuNjM0NVY2MS42NTA0SDExNS4wNDNWNjEuNjM0NUgxMTMuNTQzWk0xMTMuNTQzIDYxLjYxODZWNjEuNjM0NUgxMTUuMDQzVjYxLjYxODZIMTEzLjU0M1pNMTEzLjU0MyA2MS42MDI4VjYxLjYxODZIMTE1LjA0M1Y2MS42MDI4SDExMy41NDNaTTExMy41NDMgNjEuNTg2OVY2MS42MDI4SDExNS4wNDNWNjEuNTg2OUgxMTMuNTQzWk0xMTMuNTQzIDYxLjU3MVY2MS41ODY5SDExNS4wNDNWNjEuNTcxSDExMy41NDNaTTExMy41NDMgNjEuNTU1MlY2MS41NzFIMTE1LjA0M1Y2MS41NTUySDExMy41NDNaTTExMy41NDMgNjEuNTM5M1Y2MS41NTUySDExNS4wNDNWNjEuNTM5M0gxMTMuNTQzWk0xMTMuNTQzIDYxLjUyMzVWNjEuNTM5M0gxMTUuMDQzVjYxLjUyMzVIMTEzLjU0M1pNMTEzLjU0MyA2MS41MDc3VjYxLjUyMzVIMTE1LjA0M1Y2MS41MDc3SDExMy41NDNaTTExMy41NDMgNjEuNDkxOVY2MS41MDc3SDExNS4wNDNWNjEuNDkxOUgxMTMuNTQzWk0xMTMuNTQzIDYxLjQ3NjFWNjEuNDkxOUgxMTUuMDQzVjYxLjQ3NjFIMTEzLjU0M1pNMTEzLjU0MyA2MS40NjAzVjYxLjQ3NjFIMTE1LjA0M1Y2MS40NjAzSDExMy41NDNaTTExMy41NDMgNjEuNDQ0NVY2MS40NjAzSDExNS4wNDNWNjEuNDQ0NUgxMTMuNTQzWk0xMTMuNTQzIDYxLjQyODhWNjEuNDQ0NUgxMTUuMDQzVjYxLjQyODhIMTEzLjU0M1pNMTEzLjU0MyA2MS40MTNWNjEuNDI4OEgxMTUuMDQzVjYxLjQxM0gxMTMuNTQzWk0xMTMuNTQzIDYxLjM5NzNWNjEuNDEzSDExNS4wNDNWNjEuMzk3M0gxMTMuNTQzWk0xMTMuNTQzIDYxLjM4MTVWNjEuMzk3M0gxMTUuMDQzVjYxLjM4MTVIMTEzLjU0M1pNMTEzLjU0MyA2MS4zNjU4VjYxLjM4MTVIMTE1LjA0M1Y2MS4zNjU4SDExMy41NDNaTTExMy41NDMgNjEuMzUwMVY2MS4zNjU4SDExNS4wNDNWNjEuMzUwMUgxMTMuNTQzWk0xMTMuNTQzIDYxLjMzNDRWNjEuMzUwMUgxMTUuMDQzVjYxLjMzNDRIMTEzLjU0M1pNMTEzLjU0MyA2MS4zMTg3VjYxLjMzNDRIMTE1LjA0M1Y2MS4zMTg3SDExMy41NDNaTTExMy41NDMgNjEuMzAzMVY2MS4zMTg3SDExNS4wNDNWNjEuMzAzMUgxMTMuNTQzWk0xMTMuNTQzIDYxLjI4NzRWNjEuMzAzMUgxMTUuMDQzVjYxLjI4NzRIMTEzLjU0M1pNMTEzLjU0MyA2MS4yNzE4VjYxLjI4NzRIMTE1LjA0M1Y2MS4yNzE4SDExMy41NDNaTTExMy41NDMgNjEuMjU2MVY2MS4yNzE4SDExNS4wNDNWNjEuMjU2MUgxMTMuNTQzWk0xMTMuNTQzIDYxLjI0MDVWNjEuMjU2MUgxMTUuMDQzVjYxLjI0MDVIMTEzLjU0M1pNMTEzLjU0MyA2MS4yMjQ5VjYxLjI0MDVIMTE1LjA0M1Y2MS4yMjQ5SDExMy41NDNaTTExMy41NDMgNjEuMjA5M1Y2MS4yMjQ5SDExNS4wNDNWNjEuMjA5M0gxMTMuNTQzWk0xMTMuNTQzIDYxLjE5MzdWNjEuMjA5M0gxMTUuMDQzVjYxLjE5MzdIMTEzLjU0M1pNMTEzLjU0MyA2MS4xNzgxVjYxLjE5MzdIMTE1LjA0M1Y2MS4xNzgxSDExMy41NDNaTTExMy41NDMgNjEuMTYyNVY2MS4xNzgxSDExNS4wNDNWNjEuMTYyNUgxMTMuNTQzWk0xMTMuNTQzIDYxLjE0N1Y2MS4xNjI1SDExNS4wNDNWNjEuMTQ3SDExMy41NDNaTTExMy41NDMgNjEuMTMxNFY2MS4xNDdIMTE1LjA0M1Y2MS4xMzE0SDExMy41NDNaTTExMy41NDMgNjEuMTE1OVY2MS4xMzE0SDExNS4wNDNWNjEuMTE1OUgxMTMuNTQzWk0xMTMuNTQzIDYxLjEwMDNWNjEuMTE1OUgxMTUuMDQzVjYxLjEwMDNIMTEzLjU0M1pNMTEzLjU0MyA2MS4wODQ4VjYxLjEwMDNIMTE1LjA0M1Y2MS4wODQ4SDExMy41NDNaTTExMy41NDMgNjEuMDY5M1Y2MS4wODQ4SDExNS4wNDNWNjEuMDY5M0gxMTMuNTQzWk0xMTMuNTQzIDYxLjA1MzhWNjEuMDY5M0gxMTUuMDQzVjYxLjA1MzhIMTEzLjU0M1pNMTEzLjU0MyA2MS4wMzg0VjYxLjA1MzhIMTE1LjA0M1Y2MS4wMzg0SDExMy41NDNaTTExMy41NDMgNjEuMDIyOVY2MS4wMzg0SDExNS4wNDNWNjEuMDIyOUgxMTMuNTQzWk0xMTMuNTQzIDYxLjAwNzRWNjEuMDIyOUgxMTUuMDQzVjYxLjAwNzRIMTEzLjU0M1pNMTEzLjU0MyA2MC45OTJWNjEuMDA3NEgxMTUuMDQzVjYwLjk5MkgxMTMuNTQzWk0xMTMuNTQzIDYwLjk3NjVWNjAuOTkySDExNS4wNDNWNjAuOTc2NUgxMTMuNTQzWk0xMTMuNTQzIDYwLjk2MTFWNjAuOTc2NUgxMTUuMDQzVjYwLjk2MTFIMTEzLjU0M1pNMTEzLjU0MyA2MC45NDU3VjYwLjk2MTFIMTE1LjA0M1Y2MC45NDU3SDExMy41NDNaTTExMy41NDMgNjAuOTMwM1Y2MC45NDU3SDExNS4wNDNWNjAuOTMwM0gxMTMuNTQzWk0xMTMuNTQzIDYwLjkxNDlWNjAuOTMwM0gxMTUuMDQzVjYwLjkxNDlIMTEzLjU0M1pNMTEzLjU0MyA2MC44OTk1VjYwLjkxNDlIMTE1LjA0M1Y2MC44OTk1SDExMy41NDNaTTExMy41NDMgNjAuODg0MlY2MC44OTk1SDExNS4wNDNWNjAuODg0MkgxMTMuNTQzWk0xMTMuNTQzIDYwLjg2ODhWNjAuODg0MkgxMTUuMDQzVjYwLjg2ODhIMTEzLjU0M1pNMTEzLjU0MyA2MC44NTM1VjYwLjg2ODhIMTE1LjA0M1Y2MC44NTM1SDExMy41NDNaTTExMy41NDMgNjAuODM4MVY2MC44NTM1SDExNS4wNDNWNjAuODM4MUgxMTMuNTQzWk0xMTMuNTQzIDYwLjgyMjhWNjAuODM4MUgxMTUuMDQzVjYwLjgyMjhIMTEzLjU0M1pNMTEzLjU0MyA2MC44MDc1VjYwLjgyMjhIMTE1LjA0M1Y2MC44MDc1SDExMy41NDNaTTExMy41NDMgNjAuNzkyMlY2MC44MDc1SDExNS4wNDNWNjAuNzkyMkgxMTMuNTQzWk0xMTMuNTQzIDYwLjc3NjlWNjAuNzkyMkgxMTUuMDQzVjYwLjc3NjlIMTEzLjU0M1pNMTEzLjU0MyA2MC43NjE2VjYwLjc3NjlIMTE1LjA0M1Y2MC43NjE2SDExMy41NDNaTTExMy41NDMgNjAuNzQ2NFY2MC43NjE2SDExNS4wNDNWNjAuNzQ2NEgxMTMuNTQzWk0xMTMuNTQzIDYwLjczMTFWNjAuNzQ2NEgxMTUuMDQzVjYwLjczMTFIMTEzLjU0M1pNMTEzLjU0MyA2MC43MTU5VjYwLjczMTFIMTE1LjA0M1Y2MC43MTU5SDExMy41NDNaTTExMy41NDMgNjAuNzAwNlY2MC43MTU5SDExNS4wNDNWNjAuNzAwNkgxMTMuNTQzWk0xMTMuNTQzIDYwLjY4NTRWNjAuNzAwNkgxMTUuMDQzVjYwLjY4NTRIMTEzLjU0M1pNMTEzLjU0MyA2MC42NzAyVjYwLjY4NTRIMTE1LjA0M1Y2MC42NzAySDExMy41NDNaTTExMy41NDMgNjAuNjU1VjYwLjY3MDJIMTE1LjA0M1Y2MC42NTVIMTEzLjU0M1pNMTEzLjU0MyA2MC42Mzk4VjYwLjY1NUgxMTUuMDQzVjYwLjYzOThIMTEzLjU0M1pNMTEzLjU0MyA2MC42MjQ2VjYwLjYzOThIMTE1LjA0M1Y2MC42MjQ2SDExMy41NDNaTTExMy41NDMgNjAuNjA5NVY2MC42MjQ2SDExNS4wNDNWNjAuNjA5NUgxMTMuNTQzWk0xMTMuNTQzIDYwLjU5NDNWNjAuNjA5NUgxMTUuMDQzVjYwLjU5NDNIMTEzLjU0M1pNMTEzLjU0MyA2MC41NzkyVjYwLjU5NDNIMTE1LjA0M1Y2MC41NzkySDExMy41NDNaTTExMy41NDMgNjAuNTY0VjYwLjU3OTJIMTE1LjA0M1Y2MC41NjRIMTEzLjU0M1pNMTEzLjU0MyA2MC41NDg5VjYwLjU2NEgxMTUuMDQzVjYwLjU0ODlIMTEzLjU0M1pNMTEzLjU0MyA2MC41MzM4VjYwLjU0ODlIMTE1LjA0M1Y2MC41MzM4SDExMy41NDNaTTExMy41NDMgNjAuNTE4N1Y2MC41MzM4SDExNS4wNDNWNjAuNTE4N0gxMTMuNTQzWk0xMTMuNTQzIDYwLjUwMzZWNjAuNTE4N0gxMTUuMDQzVjYwLjUwMzZIMTEzLjU0M1pNMTEzLjU0MyA2MC40ODg1VjYwLjUwMzZIMTE1LjA0M1Y2MC40ODg1SDExMy41NDNaTTExMy41NDMgNjAuNDczNVY2MC40ODg1SDExNS4wNDNWNjAuNDczNUgxMTMuNTQzWk0xMTMuNTQzIDYwLjQ1ODRWNjAuNDczNUgxMTUuMDQzVjYwLjQ1ODRIMTEzLjU0M1pNMTEzLjU0MyA2MC40NDM0VjYwLjQ1ODRIMTE1LjA0M1Y2MC40NDM0SDExMy41NDNaTTExMy41NDMgNjAuNDI4M1Y2MC40NDM0SDExNS4wNDNWNjAuNDI4M0gxMTMuNTQzWk0xMTMuNTQzIDYwLjQxMzNWNjAuNDI4M0gxMTUuMDQzVjYwLjQxMzNIMTEzLjU0M1pNMTEzLjU0MyA2MC4zOTgzVjYwLjQxMzNIMTE1LjA0M1Y2MC4zOTgzSDExMy41NDNaTTExMy41NDMgNjAuMzgzM1Y2MC4zOTgzSDExNS4wNDNWNjAuMzgzM0gxMTMuNTQzWk0xMTMuNTQzIDYwLjM2ODNWNjAuMzgzM0gxMTUuMDQzVjYwLjM2ODNIMTEzLjU0M1pNMTEzLjU0MyA2MC4zNTM0VjYwLjM2ODNIMTE1LjA0M1Y2MC4zNTM0SDExMy41NDNaTTExMy41NDMgNjAuMzM4NFY2MC4zNTM0SDExNS4wNDNWNjAuMzM4NEgxMTMuNTQzWk0xMTMuNTQzIDYwLjMyMzRWNjAuMzM4NEgxMTUuMDQzVjYwLjMyMzRIMTEzLjU0M1pNMTEzLjU0MyA2MC4zMDg1VjYwLjMyMzRIMTE1LjA0M1Y2MC4zMDg1SDExMy41NDNaTTExMy41NDMgNjAuMjkzNlY2MC4zMDg1SDExNS4wNDNWNjAuMjkzNkgxMTMuNTQzWk0xMTMuNTQzIDYwLjI3ODdWNjAuMjkzNkgxMTUuMDQzVjYwLjI3ODdIMTEzLjU0M1pNMTEzLjU0MyA2MC4yNjM4VjYwLjI3ODdIMTE1LjA0M1Y2MC4yNjM4SDExMy41NDNaTTExMy41NDMgNjAuMjQ4OVY2MC4yNjM4SDExNS4wNDNWNjAuMjQ4OUgxMTMuNTQzWk0xMTMuNTQzIDYwLjIzNFY2MC4yNDg5SDExNS4wNDNWNjAuMjM0SDExMy41NDNaTTExMy41NDMgNjAuMjE5MVY2MC4yMzRIMTE1LjA0M1Y2MC4yMTkxSDExMy41NDNaTTExMy41NDMgNjAuMjA0MlY2MC4yMTkxSDExNS4wNDNWNjAuMjA0MkgxMTMuNTQzWk0xMTMuNTQzIDYwLjE4OTRWNjAuMjA0MkgxMTUuMDQzVjYwLjE4OTRIMTEzLjU0M1pNMTEzLjU0MyA2MC4xNzQ1VjYwLjE4OTRIMTE1LjA0M1Y2MC4xNzQ1SDExMy41NDNaTTExMy41NDMgNjAuMTU5N1Y2MC4xNzQ1SDExNS4wNDNWNjAuMTU5N0gxMTMuNTQzWk0xMTMuNTQzIDYwLjE0NDlWNjAuMTU5N0gxMTUuMDQzVjYwLjE0NDlIMTEzLjU0M1pNMTEzLjU0MyA2MC4xMzAxVjYwLjE0NDlIMTE1LjA0M1Y2MC4xMzAxSDExMy41NDNaTTExMy41NDMgNjAuMTE1M1Y2MC4xMzAxSDExNS4wNDNWNjAuMTE1M0gxMTMuNTQzWk0xMTMuNTQzIDYwLjEwMDVWNjAuMTE1M0gxMTUuMDQzVjYwLjEwMDVIMTEzLjU0M1pNMTEzLjU0MyA2MC4wODU3VjYwLjEwMDVIMTE1LjA0M1Y2MC4wODU3SDExMy41NDNaTTExMy41NDMgNjAuMDcxVjYwLjA4NTdIMTE1LjA0M1Y2MC4wNzFIMTEzLjU0M1pNMTEzLjU0MyA2MC4wNTYyVjYwLjA3MUgxMTUuMDQzVjYwLjA1NjJIMTEzLjU0M1pNMTEzLjU0MyA2MC4wNDE1VjYwLjA1NjJIMTE1LjA0M1Y2MC4wNDE1SDExMy41NDNaTTExMy41NDMgNjAuMDI2OFY2MC4wNDE1SDExNS4wNDNWNjAuMDI2OEgxMTMuNTQzWk0xMTMuNTQzIDYwLjAxMjFWNjAuMDI2OEgxMTUuMDQzVjYwLjAxMjFIMTEzLjU0M1pNMTEzLjU0MyA1OS45OTczVjYwLjAxMjFIMTE1LjA0M1Y1OS45OTczSDExMy41NDNaTTExMy41NDMgNTkuOTgyN1Y1OS45OTczSDExNS4wNDNWNTkuOTgyN0gxMTMuNTQzWk0xMTMuNTQzIDU5Ljk2OFY1OS45ODI3SDExNS4wNDNWNTkuOTY4SDExMy41NDNaTTExMy41NDMgNTkuOTUzM1Y1OS45NjhIMTE1LjA0M1Y1OS45NTMzSDExMy41NDNaTTExMy41NDMgNTkuOTM4NlY1OS45NTMzSDExNS4wNDNWNTkuOTM4NkgxMTMuNTQzWk0xMTMuNTQzIDU5LjkyNFY1OS45Mzg2SDExNS4wNDNWNTkuOTI0SDExMy41NDNaTTExMy41NDMgNTkuOTA5NFY1OS45MjRIMTE1LjA0M1Y1OS45MDk0SDExMy41NDNaTTExMy41NDMgNTkuODk0N1Y1OS45MDk0SDExNS4wNDNWNTkuODk0N0gxMTMuNTQzWk0xMTMuNTQzIDU5Ljg4MDFWNTkuODk0N0gxMTUuMDQzVjU5Ljg4MDFIMTEzLjU0M1pNMTEzLjU0MyA1OS44NjU1VjU5Ljg4MDFIMTE1LjA0M1Y1OS44NjU1SDExMy41NDNaTTExMy41NDMgNTkuODUwOVY1OS44NjU1SDExNS4wNDNWNTkuODUwOUgxMTMuNTQzWk0xMTMuNTQzIDU5LjgzNjNWNTkuODUwOUgxMTUuMDQzVjU5LjgzNjNIMTEzLjU0M1pNMTEzLjU0MyA1OS44MjE4VjU5LjgzNjNIMTE1LjA0M1Y1OS44MjE4SDExMy41NDNaTTExMy41NDMgNTkuODA3MlY1OS44MjE4SDExNS4wNDNWNTkuODA3MkgxMTMuNTQzWk0xMTMuNTQzIDU5Ljc5MjdWNTkuODA3MkgxMTUuMDQzVjU5Ljc5MjdIMTEzLjU0M1pNMTEzLjU0MyA1OS43NzgxVjU5Ljc5MjdIMTE1LjA0M1Y1OS43NzgxSDExMy41NDNaTTExMy41NDMgNTkuNzYzNlY1OS43NzgxSDExNS4wNDNWNTkuNzYzNkgxMTMuNTQzWk0xMTMuNTQzIDU5Ljc0OTFWNTkuNzYzNkgxMTUuMDQzVjU5Ljc0OTFIMTEzLjU0M1pNMTEzLjU0MyA1OS43MzQ2VjU5Ljc0OTFIMTE1LjA0M1Y1OS43MzQ2SDExMy41NDNaTTExMy41NDMgNTkuNzIwMVY1OS43MzQ2SDExNS4wNDNWNTkuNzIwMUgxMTMuNTQzWk0xMTMuNTQzIDU5LjcwNTZWNTkuNzIwMUgxMTUuMDQzVjU5LjcwNTZIMTEzLjU0M1pNMTEzLjU0MyA1OS42OTExVjU5LjcwNTZIMTE1LjA0M1Y1OS42OTExSDExMy41NDNaTTExMy41NDMgNTkuNjc2N1Y1OS42OTExSDExNS4wNDNWNTkuNjc2N0gxMTMuNTQzWk0xMTMuNTQzIDU5LjY2MjJWNTkuNjc2N0gxMTUuMDQzVjU5LjY2MjJIMTEzLjU0M1pNMTEzLjU0MyA1OS42NDc4VjU5LjY2MjJIMTE1LjA0M1Y1OS42NDc4SDExMy41NDNaTTExMy41NDMgNTkuNjMzNFY1OS42NDc4SDExNS4wNDNWNTkuNjMzNEgxMTMuNTQzWk0xMTMuNTQzIDU5LjYxOVY1OS42MzM0SDExNS4wNDNWNTkuNjE5SDExMy41NDNaTTExMy41NDMgNTkuNjA0NlY1OS42MTlIMTE1LjA0M1Y1OS42MDQ2SDExMy41NDNaTTExMy41NDMgNTkuNTkwMlY1OS42MDQ2SDExNS4wNDNWNTkuNTkwMkgxMTMuNTQzWk0xMTMuNTQzIDU5LjU3NThWNTkuNTkwMkgxMTUuMDQzVjU5LjU3NThIMTEzLjU0M1pNMTEzLjU0MyA1OS41NjE0VjU5LjU3NThIMTE1LjA0M1Y1OS41NjE0SDExMy41NDNaTTExMy41NDMgNTkuNTQ3MVY1OS41NjE0SDExNS4wNDNWNTkuNTQ3MUgxMTMuNTQzWk0xMTMuNTQzIDU5LjUzMjdWNTkuNTQ3MUgxMTUuMDQzVjU5LjUzMjdIMTEzLjU0M1pNMTEzLjU0MyA1OS41MTg0VjU5LjUzMjdIMTE1LjA0M1Y1OS41MTg0SDExMy41NDNaTTExMy41NDMgNTkuNTA0MVY1OS41MTg0SDExNS4wNDNWNTkuNTA0MUgxMTMuNTQzWk0xMTMuNTQzIDU5LjQ4OThWNTkuNTA0MUgxMTUuMDQzVjU5LjQ4OThIMTEzLjU0M1pNMTEzLjU0MyA1OS40NzU1VjU5LjQ4OThIMTE1LjA0M1Y1OS40NzU1SDExMy41NDNaTTExMy41NDMgNTkuNDYxMlY1OS40NzU1SDExNS4wNDNWNTkuNDYxMkgxMTMuNTQzWk0xMTMuNTQzIDU5LjQ0NjlWNTkuNDYxMkgxMTUuMDQzVjU5LjQ0NjlIMTEzLjU0M1pNMTEzLjU0MyA1OS40MzI2VjU5LjQ0NjlIMTE1LjA0M1Y1OS40MzI2SDExMy41NDNaTTExMy41NDMgNTkuNDE4NFY1OS40MzI2SDExNS4wNDNWNTkuNDE4NEgxMTMuNTQzWk0xMTMuNTQzIDU5LjQwNDFWNTkuNDE4NEgxMTUuMDQzVjU5LjQwNDFIMTEzLjU0M1pNMTEzLjU0MyA1OS4zODk5VjU5LjQwNDFIMTE1LjA0M1Y1OS4zODk5SDExMy41NDNaTTExMy41NDMgNTkuMzc1N1Y1OS4zODk5SDExNS4wNDNWNTkuMzc1N0gxMTMuNTQzWk0xMTMuNTQzIDU5LjM2MTVWNTkuMzc1N0gxMTUuMDQzVjU5LjM2MTVIMTEzLjU0M1pNMTEzLjU0MyA1OS4zNDczVjU5LjM2MTVIMTE1LjA0M1Y1OS4zNDczSDExMy41NDNaTTExMy41NDMgNTkuMzMzMVY1OS4zNDczSDExNS4wNDNWNTkuMzMzMUgxMTMuNTQzWk0xMTMuNTQzIDU5LjMxODlWNTkuMzMzMUgxMTUuMDQzVjU5LjMxODlIMTEzLjU0M1pNMTEzLjU0MyA1OS4zMDQ4VjU5LjMxODlIMTE1LjA0M1Y1OS4zMDQ4SDExMy41NDNaTTExMy41NDMgNTkuMjkwNlY1OS4zMDQ4SDExNS4wNDNWNTkuMjkwNkgxMTMuNTQzWk0xMTMuNTQzIDU5LjI3NjVWNTkuMjkwNkgxMTUuMDQzVjU5LjI3NjVIMTEzLjU0M1pNMTEzLjU0MyA1OS4yNjIzVjU5LjI3NjVIMTE1LjA0M1Y1OS4yNjIzSDExMy41NDNaTTExMy41NDMgNTkuMjQ4MlY1OS4yNjIzSDExNS4wNDNWNTkuMjQ4MkgxMTMuNTQzWk0xMTMuNTQzIDU5LjIzNDFWNTkuMjQ4MkgxMTUuMDQzVjU5LjIzNDFIMTEzLjU0M1pNMTEzLjU0MyA1OS4yMlY1OS4yMzQxSDExNS4wNDNWNTkuMjJIMTEzLjU0M1pNMTEzLjU0MyA1OS4yMDU5VjU5LjIySDExNS4wNDNWNTkuMjA1OUgxMTMuNTQzWk0xMTMuNTQzIDU5LjE5MThWNTkuMjA1OUgxMTUuMDQzVjU5LjE5MThIMTEzLjU0M1pNMTEzLjU0MyA1OS4xNzc4VjU5LjE5MThIMTE1LjA0M1Y1OS4xNzc4SDExMy41NDNaTTExMy41NDMgNTkuMTYzN1Y1OS4xNzc4SDExNS4wNDNWNTkuMTYzN0gxMTMuNTQzWk0xMTMuNTQzIDU5LjE0OTdWNTkuMTYzN0gxMTUuMDQzVjU5LjE0OTdIMTEzLjU0M1pNMTEzLjU0MyA1OS4xMzU3VjU5LjE0OTdIMTE1LjA0M1Y1OS4xMzU3SDExMy41NDNaTTExMy41NDMgNTkuMTIxNlY1OS4xMzU3SDExNS4wNDNWNTkuMTIxNkgxMTMuNTQzWk0xMTMuNTQzIDU5LjEwNzZWNTkuMTIxNkgxMTUuMDQzVjU5LjEwNzZIMTEzLjU0M1pNMTEzLjU0MyA1OS4wOTM2VjU5LjEwNzZIMTE1LjA0M1Y1OS4wOTM2SDExMy41NDNaTTExMy41NDMgNTkuMDc5NlY1OS4wOTM2SDExNS4wNDNWNTkuMDc5NkgxMTMuNTQzWk0xMTMuNTQzIDU5LjA2NTdWNTkuMDc5NkgxMTUuMDQzVjU5LjA2NTdIMTEzLjU0M1pNMTEzLjU0MyA1OS4wNTE3VjU5LjA2NTdIMTE1LjA0M1Y1OS4wNTE3SDExMy41NDNaTTExMy41NDMgNTkuMDM3OFY1OS4wNTE3SDExNS4wNDNWNTkuMDM3OEgxMTMuNTQzWk0xMTMuNTQzIDU5LjAyMzhWNTkuMDM3OEgxMTUuMDQzVjU5LjAyMzhIMTEzLjU0M1pNMTEzLjU0MyA1OS4wMDk5VjU5LjAyMzhIMTE1LjA0M1Y1OS4wMDk5SDExMy41NDNaTTExMy41NDMgNTguOTk2VjU5LjAwOTlIMTE1LjA0M1Y1OC45OTZIMTEzLjU0M1pNMTEzLjU0MyA1OC45ODIxVjU4Ljk5NkgxMTUuMDQzVjU4Ljk4MjFIMTEzLjU0M1pNMTEzLjU0MyA1OC45NjgyVjU4Ljk4MjFIMTE1LjA0M1Y1OC45NjgySDExMy41NDNaTTExMy41NDMgNTguOTU0M1Y1OC45NjgySDExNS4wNDNWNTguOTU0M0gxMTMuNTQzWk0xMTMuNTQzIDU4Ljk0MDRWNTguOTU0M0gxMTUuMDQzVjU4Ljk0MDRIMTEzLjU0M1pNMTEzLjU0MyA1OC45MjY2VjU4Ljk0MDRIMTE1LjA0M1Y1OC45MjY2SDExMy41NDNaTTExMy41NDMgNTguOTEyN1Y1OC45MjY2SDExNS4wNDNWNTguOTEyN0gxMTMuNTQzWk0xMTMuNTQzIDU4Ljg5ODlWNTguOTEyN0gxMTUuMDQzVjU4Ljg5ODlIMTEzLjU0M1pNMTEzLjU0MyA1OC44ODVWNTguODk4OUgxMTUuMDQzVjU4Ljg4NUgxMTMuNTQzWk0xMTMuNTQzIDU4Ljg3MTJWNTguODg1SDExNS4wNDNWNTguODcxMkgxMTMuNTQzWk0xMTMuNTQzIDU4Ljg1NzRWNTguODcxMkgxMTUuMDQzVjU4Ljg1NzRIMTEzLjU0M1pNMTEzLjU0MyA1OC44NDM2VjU4Ljg1NzRIMTE1LjA0M1Y1OC44NDM2SDExMy41NDNaTTExMy41NDMgNTguODI5OFY1OC44NDM2SDExNS4wNDNWNTguODI5OEgxMTMuNTQzWk0xMTMuNTQzIDU4LjgxNjFWNTguODI5OEgxMTUuMDQzVjU4LjgxNjFIMTEzLjU0M1pNMTEzLjU0MyA1OC44MDIzVjU4LjgxNjFIMTE1LjA0M1Y1OC44MDIzSDExMy41NDNaTTExMy41NDMgNTguNzg4NlY1OC44MDIzSDExNS4wNDNWNTguNzg4NkgxMTMuNTQzWk0xMTMuNTQzIDU4Ljc3NDhWNTguNzg4NkgxMTUuMDQzVjU4Ljc3NDhIMTEzLjU0M1pNMTEzLjU0MyA1OC43NjExVjU4Ljc3NDhIMTE1LjA0M1Y1OC43NjExSDExMy41NDNaTTExMy41NDMgNTguNzQ3NFY1OC43NjExSDExNS4wNDNWNTguNzQ3NEgxMTMuNTQzWk0xMTMuNTQzIDU4LjczMzdWNTguNzQ3NEgxMTUuMDQzVjU4LjczMzdIMTEzLjU0M1pNMTEzLjU0MyA1OC43MlY1OC43MzM3SDExNS4wNDNWNTguNzJIMTEzLjU0M1pNMTEzLjU0MyA1OC43MDYzVjU4LjcySDExNS4wNDNWNTguNzA2M0gxMTMuNTQzWk0xMTMuNTQzIDU4LjY5MjZWNTguNzA2M0gxMTUuMDQzVjU4LjY5MjZIMTEzLjU0M1pNMTEzLjU0MyA1OC42NzlWNTguNjkyNkgxMTUuMDQzVjU4LjY3OUgxMTMuNTQzWk0xMTMuNTQzIDU4LjY2NTNWNTguNjc5SDExNS4wNDNWNTguNjY1M0gxMTMuNTQzWk0xMTMuNTQzIDU4LjY1MTdWNTguNjY1M0gxMTUuMDQzVjU4LjY1MTdIMTEzLjU0M1pNMTEzLjU0MyA1OC42MzgxVjU4LjY1MTdIMTE1LjA0M1Y1OC42MzgxSDExMy41NDNaTTExMy41NDMgNTguNjI0NVY1OC42MzgxSDExNS4wNDNWNTguNjI0NUgxMTMuNTQzWk0xMTMuNTQzIDU4LjYxMDlWNTguNjI0NUgxMTUuMDQzVjU4LjYxMDlIMTEzLjU0M1pNMTEzLjU0MyA1OC41OTczVjU4LjYxMDlIMTE1LjA0M1Y1OC41OTczSDExMy41NDNaTTExMy41NDMgNTguNTgzN1Y1OC41OTczSDExNS4wNDNWNTguNTgzN0gxMTMuNTQzWk0xMTMuNTQzIDU4LjU3MDFWNTguNTgzN0gxMTUuMDQzVjU4LjU3MDFIMTEzLjU0M1pNMTEzLjU0MyA1OC41NTY2VjU4LjU3MDFIMTE1LjA0M1Y1OC41NTY2SDExMy41NDNaTTExMy41NDMgNTguNTQzVjU4LjU1NjZIMTE1LjA0M1Y1OC41NDNIMTEzLjU0M1pNMTEzLjU0MyA1OC41Mjk1VjU4LjU0M0gxMTUuMDQzVjU4LjUyOTVIMTEzLjU0M1pNMTEzLjU0MyA1OC41MTZWNTguNTI5NUgxMTUuMDQzVjU4LjUxNkgxMTMuNTQzWk0xMTMuNTQzIDU4LjUwMjRWNTguNTE2SDExNS4wNDNWNTguNTAyNEgxMTMuNTQzWk0xMTMuNTQzIDU4LjQ4ODlWNTguNTAyNEgxMTUuMDQzVjU4LjQ4ODlIMTEzLjU0M1pNMTEzLjU0MyA1OC40NzU1VjU4LjQ4ODlIMTE1LjA0M1Y1OC40NzU1SDExMy41NDNaTTExMy41NDMgNTguNDYyVjU4LjQ3NTVIMTE1LjA0M1Y1OC40NjJIMTEzLjU0M1pNMTEzLjU0MyA1OC40NDg1VjU4LjQ2MkgxMTUuMDQzVjU4LjQ0ODVIMTEzLjU0M1pNMTEzLjU0MyA1OC40MzUxVjU4LjQ0ODVIMTE1LjA0M1Y1OC40MzUxSDExMy41NDNaTTExMy41NDMgNTguNDIxNlY1OC40MzUxSDExNS4wNDNWNTguNDIxNkgxMTMuNTQzWk0xMTMuNTQzIDU4LjQwODJWNTguNDIxNkgxMTUuMDQzVjU4LjQwODJIMTEzLjU0M1pNMTEzLjU0MyA1OC4zOTQ4VjU4LjQwODJIMTE1LjA0M1Y1OC4zOTQ4SDExMy41NDNaTTExMy41NDMgNTguMzgxM1Y1OC4zOTQ4SDExNS4wNDNWNTguMzgxM0gxMTMuNTQzWk0xMTMuNTQzIDU4LjM2NzlWNTguMzgxM0gxMTUuMDQzVjU4LjM2NzlIMTEzLjU0M1pNMTEzLjU0MyA1OC4zNTQ2VjU4LjM2NzlIMTE1LjA0M1Y1OC4zNTQ2SDExMy41NDNaTTExMy41NDMgNTguMzQxMlY1OC4zNTQ2SDExNS4wNDNWNTguMzQxMkgxMTMuNTQzWk0xMTMuNTQzIDU4LjMyNzhWNTguMzQxMkgxMTUuMDQzVjU4LjMyNzhIMTEzLjU0M1pNMTEzLjU0MyA1OC4zMTQ1VjU4LjMyNzhIMTE1LjA0M1Y1OC4zMTQ1SDExMy41NDNaTTExMy41NDMgNTguMzAxMVY1OC4zMTQ1SDExNS4wNDNWNTguMzAxMUgxMTMuNTQzWk0xMTMuNTQzIDU4LjI4NzhWNTguMzAxMUgxMTUuMDQzVjU4LjI4NzhIMTEzLjU0M1pNMTEzLjU0MyA1OC4yNzQ1VjU4LjI4NzhIMTE1LjA0M1Y1OC4yNzQ1SDExMy41NDNaTTExMy41NDMgNTguMjYxMlY1OC4yNzQ1SDExNS4wNDNWNTguMjYxMkgxMTMuNTQzWk0xMTMuNTQzIDU4LjI0NzlWNTguMjYxMkgxMTUuMDQzVjU4LjI0NzlIMTEzLjU0M1pNMTEzLjU0MyA1OC4yMzQ2VjU4LjI0NzlIMTE1LjA0M1Y1OC4yMzQ2SDExMy41NDNaTTExMy41NDMgNTguMjIxM1Y1OC4yMzQ2SDExNS4wNDNWNTguMjIxM0gxMTMuNTQzWk0xMTMuNTQzIDU4LjIwOFY1OC4yMjEzSDExNS4wNDNWNTguMjA4SDExMy41NDNaTTExMy41NDMgNTguMTk0OFY1OC4yMDhIMTE1LjA0M1Y1OC4xOTQ4SDExMy41NDNaTTExMy41NDMgNTguMTgxNVY1OC4xOTQ4SDExNS4wNDNWNTguMTgxNUgxMTMuNTQzWk0xMTMuNTQzIDU4LjE2ODNWNTguMTgxNUgxMTUuMDQzVjU4LjE2ODNIMTEzLjU0M1pNMTEzLjU0MyA1OC4xNTUxVjU4LjE2ODNIMTE1LjA0M1Y1OC4xNTUxSDExMy41NDNaTTExMy41NDMgNTguMTQxOVY1OC4xNTUxSDExNS4wNDNWNTguMTQxOUgxMTMuNTQzWk0xMTMuNTQzIDU4LjEyODdWNTguMTQxOUgxMTUuMDQzVjU4LjEyODdIMTEzLjU0M1pNMTEzLjU0MyA1OC4xMTU1VjU4LjEyODdIMTE1LjA0M1Y1OC4xMTU1SDExMy41NDNaTTExMy41NDMgNTguMTAyM1Y1OC4xMTU1SDExNS4wNDNWNTguMTAyM0gxMTMuNTQzWk0xMTMuNTQzIDU4LjA4OTFWNTguMTAyM0gxMTUuMDQzVjU4LjA4OTFIMTEzLjU0M1pNMTEzLjU0MyA1OC4wNzZWNTguMDg5MUgxMTUuMDQzVjU4LjA3NkgxMTMuNTQzWk0xMTMuNTQzIDU4LjA2MjlWNTguMDc2SDExNS4wNDNWNTguMDYyOUgxMTMuNTQzWk0xMTMuNTQzIDU4LjA0OTdWNTguMDYyOUgxMTUuMDQzVjU4LjA0OTdIMTEzLjU0M1pNMTEzLjU0MyA1OC4wMzY2VjU4LjA0OTdIMTE1LjA0M1Y1OC4wMzY2SDExMy41NDNaTTExMy41NDMgNTguMDIzNVY1OC4wMzY2SDExNS4wNDNWNTguMDIzNUgxMTMuNTQzWk0xMTMuNTQzIDU4LjAxMDRWNTguMDIzNUgxMTUuMDQzVjU4LjAxMDRIMTEzLjU0M1pNMTEzLjU0MyA1Ny45OTczVjU4LjAxMDRIMTE1LjA0M1Y1Ny45OTczSDExMy41NDNaTTExMy41NDMgNTcuOTg0MlY1Ny45OTczSDExNS4wNDNWNTcuOTg0MkgxMTMuNTQzWk0xMTMuNTQzIDU3Ljk3MTJWNTcuOTg0MkgxMTUuMDQzVjU3Ljk3MTJIMTEzLjU0M1pNMTEzLjU0MyA1Ny45NTgxVjU3Ljk3MTJIMTE1LjA0M1Y1Ny45NTgxSDExMy41NDNaTTExMy41NDMgNTcuOTQ1MVY1Ny45NTgxSDExNS4wNDNWNTcuOTQ1MUgxMTMuNTQzWk0xMTMuNTQzIDU3LjkzMjFWNTcuOTQ1MUgxMTUuMDQzVjU3LjkzMjFIMTEzLjU0M1pNMTEzLjU0MyA1Ny45MTlWNTcuOTMyMUgxMTUuMDQzVjU3LjkxOUgxMTMuNTQzWk0xMTMuNTQzIDU3LjkwNlY1Ny45MTlIMTE1LjA0M1Y1Ny45MDZIMTEzLjU0M1pNMTEzLjU0MyA1Ny44OTNWNTcuOTA2SDExNS4wNDNWNTcuODkzSDExMy41NDNaTTExMy41NDMgNTcuODgwMVY1Ny44OTNIMTE1LjA0M1Y1Ny44ODAxSDExMy41NDNaTTExMy41NDMgNTcuODY3MVY1Ny44ODAxSDExNS4wNDNWNTcuODY3MUgxMTMuNTQzWk0xMTMuNTQzIDU3Ljg1NDFWNTcuODY3MUgxMTUuMDQzVjU3Ljg1NDFIMTEzLjU0M1pNMTEzLjU0MyA1Ny44NDEyVjU3Ljg1NDFIMTE1LjA0M1Y1Ny44NDEySDExMy41NDNaTTExMy41NDMgNTcuODI4MlY1Ny44NDEySDExNS4wNDNWNTcuODI4MkgxMTMuNTQzWk0xMTMuNTQzIDU3LjgxNTNWNTcuODI4MkgxMTUuMDQzVjU3LjgxNTNIMTEzLjU0M1pNMTEzLjU0MyA1Ny44MDI0VjU3LjgxNTNIMTE1LjA0M1Y1Ny44MDI0SDExMy41NDNaTTExMy41NDMgNTcuNzg5NVY1Ny44MDI0SDExNS4wNDNWNTcuNzg5NUgxMTMuNTQzWk0xMTMuNTQzIDU3Ljc3NjZWNTcuNzg5NUgxMTUuMDQzVjU3Ljc3NjZIMTEzLjU0M1pNMTEzLjU0MyA1Ny43NjM3VjU3Ljc3NjZIMTE1LjA0M1Y1Ny43NjM3SDExMy41NDNaTTExMy41NDMgNTcuNzUwOFY1Ny43NjM3SDExNS4wNDNWNTcuNzUwOEgxMTMuNTQzWk0xMTMuNTQzIDU3LjczOFY1Ny43NTA4SDExNS4wNDNWNTcuNzM4SDExMy41NDNaTTExMy41NDMgNTcuNzI1MVY1Ny43MzhIMTE1LjA0M1Y1Ny43MjUxSDExMy41NDNaTTExMy41NDMgNTcuNzEyM1Y1Ny43MjUxSDExNS4wNDNWNTcuNzEyM0gxMTMuNTQzWk0xMTMuNTQzIDU3LjY5OTVWNTcuNzEyM0gxMTUuMDQzVjU3LjY5OTVIMTEzLjU0M1pNMTEzLjU0MyA1Ny42ODY3VjU3LjY5OTVIMTE1LjA0M1Y1Ny42ODY3SDExMy41NDNaTTExMy41NDMgNTcuNjczOVY1Ny42ODY3SDExNS4wNDNWNTcuNjczOUgxMTMuNTQzWk0xMTMuNTQzIDU3LjY2MTFWNTcuNjczOUgxMTUuMDQzVjU3LjY2MTFIMTEzLjU0M1pNMTEzLjU0MyA1Ny42NDgzVjU3LjY2MTFIMTE1LjA0M1Y1Ny42NDgzSDExMy41NDNaTTExMy41NDMgNTcuNjM1NVY1Ny42NDgzSDExNS4wNDNWNTcuNjM1NUgxMTMuNTQzWk0xMTMuNTQzIDU3LjYyMjhWNTcuNjM1NUgxMTUuMDQzVjU3LjYyMjhIMTEzLjU0M1pNMTEzLjU0MyA1Ny42MVY1Ny42MjI4SDExNS4wNDNWNTcuNjFIMTEzLjU0M1pNMTEzLjU0MyA1Ny41OTczVjU3LjYxSDExNS4wNDNWNTcuNTk3M0gxMTMuNTQzWk0xMTMuNTQzIDU3LjU4NDVWNTcuNTk3M0gxMTUuMDQzVjU3LjU4NDVIMTEzLjU0M1pNMTEzLjU0MyA1Ny41NzE4VjU3LjU4NDVIMTE1LjA0M1Y1Ny41NzE4SDExMy41NDNaTTExMy41NDMgNTcuNTU5MVY1Ny41NzE4SDExNS4wNDNWNTcuNTU5MUgxMTMuNTQzWk0xMTMuNTQzIDU3LjU0NjRWNTcuNTU5MUgxMTUuMDQzVjU3LjU0NjRIMTEzLjU0M1pNMTEzLjU0MyA1Ny41MzM4VjU3LjU0NjRIMTE1LjA0M1Y1Ny41MzM4SDExMy41NDNaTTExMy41NDMgNTcuNTIxMVY1Ny41MzM4SDExNS4wNDNWNTcuNTIxMUgxMTMuNTQzWk0xMTMuNTQzIDU3LjUwODRWNTcuNTIxMUgxMTUuMDQzVjU3LjUwODRIMTEzLjU0M1pNMTEzLjU0MyA1Ny40OTU4VjU3LjUwODRIMTE1LjA0M1Y1Ny40OTU4SDExMy41NDNaTTExMy41NDMgNTcuNDgzMlY1Ny40OTU4SDExNS4wNDNWNTcuNDgzMkgxMTMuNTQzWk0xMTMuNTQzIDU3LjQ3MDVWNTcuNDgzMkgxMTUuMDQzVjU3LjQ3MDVIMTEzLjU0M1pNMTEzLjU0MyA1Ny40NTc5VjU3LjQ3MDVIMTE1LjA0M1Y1Ny40NTc5SDExMy41NDNaTTExMy41NDMgNTcuNDQ1M1Y1Ny40NTc5SDExNS4wNDNWNTcuNDQ1M0gxMTMuNTQzWk0xMTMuNTQzIDU3LjQzMjdWNTcuNDQ1M0gxMTUuMDQzVjU3LjQzMjdIMTEzLjU0M1pNMTEzLjU0MyA1Ny40MjAxVjU3LjQzMjdIMTE1LjA0M1Y1Ny40MjAxSDExMy41NDNaTTExMy41NDMgNTcuNDA3NlY1Ny40MjAxSDExNS4wNDNWNTcuNDA3NkgxMTMuNTQzWk0xMTMuNTQzIDU3LjM5NVY1Ny40MDc2SDExNS4wNDNWNTcuMzk1SDExMy41NDNaTTExMy41NDMgNTcuMzgyNVY1Ny4zOTVIMTE1LjA0M1Y1Ny4zODI1SDExMy41NDNaTTExMy41NDMgNTcuMzY5OVY1Ny4zODI1SDExNS4wNDNWNTcuMzY5OUgxMTMuNTQzWk0xMTMuNTQzIDU3LjM1NzRWNTcuMzY5OUgxMTUuMDQzVjU3LjM1NzRIMTEzLjU0M1pNMTEzLjU0MyA1Ny4zNDQ5VjU3LjM1NzRIMTE1LjA0M1Y1Ny4zNDQ5SDExMy41NDNaTTExMy41NDMgNTcuMzMyNFY1Ny4zNDQ5SDExNS4wNDNWNTcuMzMyNEgxMTMuNTQzWk0xMTMuNTQzIDU3LjMxOTlWNTcuMzMyNEgxMTUuMDQzVjU3LjMxOTlIMTEzLjU0M1pNMTEzLjU0MyA1Ny4zMDc0VjU3LjMxOTlIMTE1LjA0M1Y1Ny4zMDc0SDExMy41NDNaTTExMy41NDMgNTcuMjk1VjU3LjMwNzRIMTE1LjA0M1Y1Ny4yOTVIMTEzLjU0M1pNMTEzLjU0MyA1Ny4yODI1VjU3LjI5NUgxMTUuMDQzVjU3LjI4MjVIMTEzLjU0M1pNMTEzLjU0MyA1Ny4yNzAxVjU3LjI4MjVIMTE1LjA0M1Y1Ny4yNzAxSDExMy41NDNaTTExMy41NDMgNTcuMjU3N1Y1Ny4yNzAxSDExNS4wNDNWNTcuMjU3N0gxMTMuNTQzWk0xMTMuNTQzIDU3LjI0NTJWNTcuMjU3N0gxMTUuMDQzVjU3LjI0NTJIMTEzLjU0M1pNMTEzLjU0MyA1Ny4yMzI4VjU3LjI0NTJIMTE1LjA0M1Y1Ny4yMzI4SDExMy41NDNaTTExMy41NDMgNTcuMjIwNFY1Ny4yMzI4SDExNS4wNDNWNTcuMjIwNEgxMTMuNTQzWk0xMTMuNTQzIDU3LjIwOFY1Ny4yMjA0SDExNS4wNDNWNTcuMjA4SDExMy41NDNaTTExMy41NDMgNTcuMTk1N1Y1Ny4yMDhIMTE1LjA0M1Y1Ny4xOTU3SDExMy41NDNaTTExMy41NDMgNTcuMTgzM1Y1Ny4xOTU3SDExNS4wNDNWNTcuMTgzM0gxMTMuNTQzWk0xMTMuNTQzIDU3LjE3MDlWNTcuMTgzM0gxMTUuMDQzVjU3LjE3MDlIMTEzLjU0M1pNMTEzLjU0MyA1Ny4xNTg2VjU3LjE3MDlIMTE1LjA0M1Y1Ny4xNTg2SDExMy41NDNaTTExMy41NDMgNTcuMTQ2M1Y1Ny4xNTg2SDExNS4wNDNWNTcuMTQ2M0gxMTMuNTQzWk0xMTMuNTQzIDU3LjEzMzlWNTcuMTQ2M0gxMTUuMDQzVjU3LjEzMzlIMTEzLjU0M1pNMTEzLjU0MyA1Ny4xMjE2VjU3LjEzMzlIMTE1LjA0M1Y1Ny4xMjE2SDExMy41NDNaTTExMy41NDMgNTcuMTA5M1Y1Ny4xMjE2SDExNS4wNDNWNTcuMTA5M0gxMTMuNTQzWk0xMTMuNTQzIDU3LjA5NzFWNTcuMTA5M0gxMTUuMDQzVjU3LjA5NzFIMTEzLjU0M1pNMTEzLjU0MyA1Ny4wODQ4VjU3LjA5NzFIMTE1LjA0M1Y1Ny4wODQ4SDExMy41NDNaTTExMy41NDMgNTcuMDcyNVY1Ny4wODQ4SDExNS4wNDNWNTcuMDcyNUgxMTMuNTQzWk0xMTMuNTQzIDU3LjA2MDNWNTcuMDcyNUgxMTUuMDQzVjU3LjA2MDNIMTEzLjU0M1pNMTEzLjU0MyA1Ny4wNDhWNTcuMDYwM0gxMTUuMDQzVjU3LjA0OEgxMTMuNTQzWk0xMTMuNTQzIDU3LjAzNThWNTcuMDQ4SDExNS4wNDNWNTcuMDM1OEgxMTMuNTQzWk0xMTMuNTQzIDU3LjAyMzZWNTcuMDM1OEgxMTUuMDQzVjU3LjAyMzZIMTEzLjU0M1pNMTEzLjU0MyA1Ny4wMTE0VjU3LjAyMzZIMTE1LjA0M1Y1Ny4wMTE0SDExMy41NDNaTTExMy41NDMgNTYuOTk5MlY1Ny4wMTE0SDExNS4wNDNWNTYuOTk5MkgxMTMuNTQzWk0xMTMuNTQzIDU2Ljk4N1Y1Ni45OTkySDExNS4wNDNWNTYuOTg3SDExMy41NDNaTTExMy41NDMgNTYuOTc0OFY1Ni45ODdIMTE1LjA0M1Y1Ni45NzQ4SDExMy41NDNaTTExMy41NDMgNTYuOTYyN1Y1Ni45NzQ4SDExNS4wNDNWNTYuOTYyN0gxMTMuNTQzWk0xMTMuNTQzIDU2Ljk1MDVWNTYuOTYyN0gxMTUuMDQzVjU2Ljk1MDVIMTEzLjU0M1pNMTEzLjU0MyA1Ni45Mzg0VjU2Ljk1MDVIMTE1LjA0M1Y1Ni45Mzg0SDExMy41NDNaTTExMy41NDMgNTYuOTI2MlY1Ni45Mzg0SDExNS4wNDNWNTYuOTI2MkgxMTMuNTQzWk0xMTMuNTQzIDU2LjkxNDFWNTYuOTI2MkgxMTUuMDQzVjU2LjkxNDFIMTEzLjU0M1pNMTEzLjU0MyA1Ni45MDJWNTYuOTE0MUgxMTUuMDQzVjU2LjkwMkgxMTMuNTQzWk0xMTMuNTQzIDU2Ljg4OTlWNTYuOTAySDExNS4wNDNWNTYuODg5OUgxMTMuNTQzWk0xMTMuNTQzIDU2Ljg3NzhWNTYuODg5OUgxMTUuMDQzVjU2Ljg3NzhIMTEzLjU0M1pNMTEzLjU0MyA1Ni44NjU4VjU2Ljg3NzhIMTE1LjA0M1Y1Ni44NjU4SDExMy41NDNaTTExMy41NDMgNTYuODUzN1Y1Ni44NjU4SDExNS4wNDNWNTYuODUzN0gxMTMuNTQzWk0xMTMuNTQzIDU2Ljg0MTZWNTYuODUzN0gxMTUuMDQzVjU2Ljg0MTZIMTEzLjU0M1pNMTEzLjU0MyA1Ni44Mjk2VjU2Ljg0MTZIMTE1LjA0M1Y1Ni44Mjk2SDExMy41NDNaTTExMy41NDMgNTYuODE3NlY1Ni44Mjk2SDExNS4wNDNWNTYuODE3NkgxMTMuNTQzWk0xMTMuNTQzIDU2LjgwNTZWNTYuODE3NkgxMTUuMDQzVjU2LjgwNTZIMTEzLjU0M1pNMTEzLjU0MyA1Ni43OTM2VjU2LjgwNTZIMTE1LjA0M1Y1Ni43OTM2SDExMy41NDNaTTExMy41NDMgNTYuNzgxNlY1Ni43OTM2SDExNS4wNDNWNTYuNzgxNkgxMTMuNTQzWk0xMTMuNTQzIDU2Ljc2OTZWNTYuNzgxNkgxMTUuMDQzVjU2Ljc2OTZIMTEzLjU0M1pNMTEzLjU0MyA1Ni43NTc2VjU2Ljc2OTZIMTE1LjA0M1Y1Ni43NTc2SDExMy41NDNaTTExMy41NDMgNTYuNzQ1N1Y1Ni43NTc2SDExNS4wNDNWNTYuNzQ1N0gxMTMuNTQzWk0xMTMuNTQzIDU2LjczMzdWNTYuNzQ1N0gxMTUuMDQzVjU2LjczMzdIMTEzLjU0M1pNMTEzLjU0MyA1Ni43MjE4VjU2LjczMzdIMTE1LjA0M1Y1Ni43MjE4SDExMy41NDNaTTExMy41NDMgNTYuNzA5OFY1Ni43MjE4SDExNS4wNDNWNTYuNzA5OEgxMTMuNTQzWk0xMTMuNTQzIDU2LjY5NzlWNTYuNzA5OEgxMTUuMDQzVjU2LjY5NzlIMTEzLjU0M1pNMTEzLjU0MyA1Ni42ODZWNTYuNjk3OUgxMTUuMDQzVjU2LjY4NkgxMTMuNTQzWk0xMTMuNTQzIDU2LjY3NDFWNTYuNjg2SDExNS4wNDNWNTYuNjc0MUgxMTMuNTQzWk0xMTMuNTQzIDU2LjY2MjNWNTYuNjc0MUgxMTUuMDQzVjU2LjY2MjNIMTEzLjU0M1pNMTEzLjU0MyA1Ni42NTA0VjU2LjY2MjNIMTE1LjA0M1Y1Ni42NTA0SDExMy41NDNaTTExMy41NDMgNTYuNjM4NVY1Ni42NTA0SDExNS4wNDNWNTYuNjM4NUgxMTMuNTQzWk0xMTMuNTQzIDU2LjYyNjdWNTYuNjM4NUgxMTUuMDQzVjU2LjYyNjdIMTEzLjU0M1pNMTEzLjU0MyA1Ni42MTQ4VjU2LjYyNjdIMTE1LjA0M1Y1Ni42MTQ4SDExMy41NDNaTTExMy41NDMgNTYuNjAzVjU2LjYxNDhIMTE1LjA0M1Y1Ni42MDNIMTEzLjU0M1pNMTEzLjU0MyA1Ni41OTEyVjU2LjYwM0gxMTUuMDQzVjU2LjU5MTJIMTEzLjU0M1pNMTEzLjU0MyA1Ni41Nzk0VjU2LjU5MTJIMTE1LjA0M1Y1Ni41Nzk0SDExMy41NDNaTTExMy41NDMgNTYuNTY3NlY1Ni41Nzk0SDExNS4wNDNWNTYuNTY3NkgxMTMuNTQzWk0xMTMuNTQzIDU2LjU1NThWNTYuNTY3NkgxMTUuMDQzVjU2LjU1NThIMTEzLjU0M1pNMTEzLjU0MyA1Ni41NDQxVjU2LjU1NThIMTE1LjA0M1Y1Ni41NDQxSDExMy41NDNaTTExMy41NDMgNTYuNTMyM1Y1Ni41NDQxSDExNS4wNDNWNTYuNTMyM0gxMTMuNTQzWk0xMTMuNTQzIDU2LjUyMDZWNTYuNTMyM0gxMTUuMDQzVjU2LjUyMDZIMTEzLjU0M1pNMTEzLjU0MyA1Ni41MDg4VjU2LjUyMDZIMTE1LjA0M1Y1Ni41MDg4SDExMy41NDNaTTExMy41NDMgNTYuNDk3MVY1Ni41MDg4SDExNS4wNDNWNTYuNDk3MUgxMTMuNTQzWk0xMTMuNTQzIDU2LjQ4NTRWNTYuNDk3MUgxMTUuMDQzVjU2LjQ4NTRIMTEzLjU0M1pNMTEzLjU0MyA1Ni40NzM3VjU2LjQ4NTRIMTE1LjA0M1Y1Ni40NzM3SDExMy41NDNaTTExMy41NDMgNTYuNDYyVjU2LjQ3MzdIMTE1LjA0M1Y1Ni40NjJIMTEzLjU0M1pNMTEzLjU0MyA1Ni40NTAzVjU2LjQ2MkgxMTUuMDQzVjU2LjQ1MDNIMTEzLjU0M1pNMTEzLjU0MyA1Ni40Mzg2VjU2LjQ1MDNIMTE1LjA0M1Y1Ni40Mzg2SDExMy41NDNaTTExMy41NDMgNTYuNDI3VjU2LjQzODZIMTE1LjA0M1Y1Ni40MjdIMTEzLjU0M1pNMTEzLjU0MyA1Ni40MTUzVjU2LjQyN0gxMTUuMDQzVjU2LjQxNTNIMTEzLjU0M1pNMTEzLjU0MyA1Ni40MDM3VjU2LjQxNTNIMTE1LjA0M1Y1Ni40MDM3SDExMy41NDNaTTExMy41NDMgNTYuMzkyMVY1Ni40MDM3SDExNS4wNDNWNTYuMzkyMUgxMTMuNTQzWk0xMTMuNTQzIDU2LjM4MDVWNTYuMzkyMUgxMTUuMDQzVjU2LjM4MDVIMTEzLjU0M1pNMTEzLjU0MyA1Ni4zNjg5VjU2LjM4MDVIMTE1LjA0M1Y1Ni4zNjg5SDExMy41NDNaTTExMy41NDMgNTYuMzU3M1Y1Ni4zNjg5SDExNS4wNDNWNTYuMzU3M0gxMTMuNTQzWk0xMTMuNTQzIDU2LjM0NTdWNTYuMzU3M0gxMTUuMDQzVjU2LjM0NTdIMTEzLjU0M1pNMTEzLjU0MyA1Ni4zMzQxVjU2LjM0NTdIMTE1LjA0M1Y1Ni4zMzQxSDExMy41NDNaTTExMy41NDMgNTYuMzIyNlY1Ni4zMzQxSDExNS4wNDNWNTYuMzIyNkgxMTMuNTQzWk0xMTMuNTQzIDU2LjMxMVY1Ni4zMjI2SDExNS4wNDNWNTYuMzExSDExMy41NDNaTTExMy41NDMgNTYuMjk5NVY1Ni4zMTFIMTE1LjA0M1Y1Ni4yOTk1SDExMy41NDNaTTExMy41NDMgNTYuMjg4VjU2LjI5OTVIMTE1LjA0M1Y1Ni4yODhIMTEzLjU0M1pNMTEzLjU0MyA1Ni4yNzY1VjU2LjI4OEgxMTUuMDQzVjU2LjI3NjVIMTEzLjU0M1pNMTEzLjU0MyA1Ni4yNjVWNTYuMjc2NUgxMTUuMDQzVjU2LjI2NUgxMTMuNTQzWk0xMTMuNTQzIDU2LjI1MzVWNTYuMjY1SDExNS4wNDNWNTYuMjUzNUgxMTMuNTQzWk0xMTMuNTQzIDU2LjI0MlY1Ni4yNTM1SDExNS4wNDNWNTYuMjQySDExMy41NDNaTTExMy41NDMgNTYuMjMwNlY1Ni4yNDJIMTE1LjA0M1Y1Ni4yMzA2SDExMy41NDNaTTExMy41NDMgNTYuMjE5MVY1Ni4yMzA2SDExNS4wNDNWNTYuMjE5MUgxMTMuNTQzWk0xMTMuNTQzIDU2LjIwNzdWNTYuMjE5MUgxMTUuMDQzVjU2LjIwNzdIMTEzLjU0M1pNMTEzLjU0MyA1Ni4xOTYyVjU2LjIwNzdIMTE1LjA0M1Y1Ni4xOTYySDExMy41NDNaTTExMy41NDMgNTYuMTg0OFY1Ni4xOTYySDExNS4wNDNWNTYuMTg0OEgxMTMuNTQzWk0xMTMuNTQzIDU2LjE3MzRWNTYuMTg0OEgxMTUuMDQzVjU2LjE3MzRIMTEzLjU0M1pNMTEzLjU0MyA1Ni4xNjJWNTYuMTczNEgxMTUuMDQzVjU2LjE2MkgxMTMuNTQzWk0xMTMuNTQzIDU2LjE1MDZWNTYuMTYySDExNS4wNDNWNTYuMTUwNkgxMTMuNTQzWk0xMTMuNTQzIDU2LjEzOTJWNTYuMTUwNkgxMTUuMDQzVjU2LjEzOTJIMTEzLjU0M1pNMTEzLjU0MyA1Ni4xMjc5VjU2LjEzOTJIMTE1LjA0M1Y1Ni4xMjc5SDExMy41NDNaTTExMy41NDMgNTYuMTE2NVY1Ni4xMjc5SDExNS4wNDNWNTYuMTE2NUgxMTMuNTQzWk0xMTMuNTQzIDU2LjEwNTJWNTYuMTE2NUgxMTUuMDQzVjU2LjEwNTJIMTEzLjU0M1pNMTEzLjU0MyA1Ni4wOTM5VjU2LjEwNTJIMTE1LjA0M1Y1Ni4wOTM5SDExMy41NDNaTTExMy41NDMgNTYuMDgyNVY1Ni4wOTM5SDExNS4wNDNWNTYuMDgyNUgxMTMuNTQzWk0xMTMuNTQzIDU2LjA3MTJWNTYuMDgyNUgxMTUuMDQzVjU2LjA3MTJIMTEzLjU0M1pNMTEzLjU0MyA1Ni4wNTk5VjU2LjA3MTJIMTE1LjA0M1Y1Ni4wNTk5SDExMy41NDNaTTExMy41NDMgNTYuMDQ4N1Y1Ni4wNTk5SDExNS4wNDNWNTYuMDQ4N0gxMTMuNTQzWk0xMTMuNTQzIDU2LjAzNzRWNTYuMDQ4N0gxMTUuMDQzVjU2LjAzNzRIMTEzLjU0M1pNMTEzLjU0MyA1Ni4wMjYxVjU2LjAzNzRIMTE1LjA0M1Y1Ni4wMjYxSDExMy41NDNaTTExMy41NDMgNTYuMDE0OVY1Ni4wMjYxSDExNS4wNDNWNTYuMDE0OUgxMTMuNTQzWk0xMTMuNTQzIDU2LjAwMzZWNTYuMDE0OUgxMTUuMDQzVjU2LjAwMzZIMTEzLjU0M1pNMTEzLjU0MyA1NS45OTI0VjU2LjAwMzZIMTE1LjA0M1Y1NS45OTI0SDExMy41NDNaTTExMy41NDMgNTUuOTgxMlY1NS45OTI0SDExNS4wNDNWNTUuOTgxMkgxMTMuNTQzWk0xMTMuNTQzIDU1Ljk3VjU1Ljk4MTJIMTE1LjA0M1Y1NS45N0gxMTMuNTQzWk0xMTMuNTQzIDU1Ljk1ODhWNTUuOTdIMTE1LjA0M1Y1NS45NTg4SDExMy41NDNaTTExMy41NDMgNTUuOTQ3NlY1NS45NTg4SDExNS4wNDNWNTUuOTQ3NkgxMTMuNTQzWk0xMTMuNTQzIDU1LjkzNjRWNTUuOTQ3NkgxMTUuMDQzVjU1LjkzNjRIMTEzLjU0M1pNMTEzLjU0MyA1NS45MjUzVjU1LjkzNjRIMTE1LjA0M1Y1NS45MjUzSDExMy41NDNaTTExMy41NDMgNTUuOTE0MVY1NS45MjUzSDExNS4wNDNWNTUuOTE0MUgxMTMuNTQzWk0xMTMuNTQzIDU1LjkwM1Y1NS45MTQxSDExNS4wNDNWNTUuOTAzSDExMy41NDNaTTExMy41NDMgNTUuODkxOFY1NS45MDNIMTE1LjA0M1Y1NS44OTE4SDExMy41NDNaTTExMy41NDMgNTUuODgwN1Y1NS44OTE4SDExNS4wNDNWNTUuODgwN0gxMTMuNTQzWk0xMTMuNTQzIDU1Ljg2OTZWNTUuODgwN0gxMTUuMDQzVjU1Ljg2OTZIMTEzLjU0M1pNMTEzLjU0MyA1NS44NTg1VjU1Ljg2OTZIMTE1LjA0M1Y1NS44NTg1SDExMy41NDNaTTExMy41NDMgNTUuODQ3NFY1NS44NTg1SDExNS4wNDNWNTUuODQ3NEgxMTMuNTQzWk0xMTMuNTQzIDU1LjgzNjRWNTUuODQ3NEgxMTUuMDQzVjU1LjgzNjRIMTEzLjU0M1pNMTEzLjU0MyA1NS44MjUzVjU1LjgzNjRIMTE1LjA0M1Y1NS44MjUzSDExMy41NDNaTTExMy41NDMgNTUuODE0M1Y1NS44MjUzSDExNS4wNDNWNTUuODE0M0gxMTMuNTQzWk0xMTMuNTQzIDU1LjgwMzJWNTUuODE0M0gxMTUuMDQzVjU1LjgwMzJIMTEzLjU0M1pNMTEzLjU0MyA1NS43OTIyVjU1LjgwMzJIMTE1LjA0M1Y1NS43OTIySDExMy41NDNaTTExMy41NDMgNTUuNzgxMlY1NS43OTIySDExNS4wNDNWNTUuNzgxMkgxMTMuNTQzWk0xMTMuNTQzIDU1Ljc3MDJWNTUuNzgxMkgxMTUuMDQzVjU1Ljc3MDJIMTEzLjU0M1pNMTEzLjU0MyA1NS43NTkyVjU1Ljc3MDJIMTE1LjA0M1Y1NS43NTkySDExMy41NDNaTTExMy41NDMgNTUuNzQ4MlY1NS43NTkySDExNS4wNDNWNTUuNzQ4MkgxMTMuNTQzWk0xMTMuNTQzIDU1LjczNzJWNTUuNzQ4MkgxMTUuMDQzVjU1LjczNzJIMTEzLjU0M1pNMTEzLjU0MyA1NS43MjYzVjU1LjczNzJIMTE1LjA0M1Y1NS43MjYzSDExMy41NDNaTTExMy41NDMgNTUuNzE1M1Y1NS43MjYzSDExNS4wNDNWNTUuNzE1M0gxMTMuNTQzWk0xMTMuNTQzIDU1LjcwNDRWNTUuNzE1M0gxMTUuMDQzVjU1LjcwNDRIMTEzLjU0M1pNMTEzLjU0MyA1NS42OTM1VjU1LjcwNDRIMTE1LjA0M1Y1NS42OTM1SDExMy41NDNaTTExMy41NDMgNTUuNjgyNlY1NS42OTM1SDExNS4wNDNWNTUuNjgyNkgxMTMuNTQzWk0xMTMuNTQzIDU1LjY3MTdWNTUuNjgyNkgxMTUuMDQzVjU1LjY3MTdIMTEzLjU0M1pNMTEzLjU0MyA1NS42NjA4VjU1LjY3MTdIMTE1LjA0M1Y1NS42NjA4SDExMy41NDNaTTExMy41NDMgNTUuNjQ5OVY1NS42NjA4SDExNS4wNDNWNTUuNjQ5OUgxMTMuNTQzWk0xMTMuNTQzIDU1LjYzOVY1NS42NDk5SDExNS4wNDNWNTUuNjM5SDExMy41NDNaTTExMy41NDMgNTUuNjI4MlY1NS42MzlIMTE1LjA0M1Y1NS42MjgySDExMy41NDNaTTExMy41NDMgNTUuNjE3M1Y1NS42MjgySDExNS4wNDNWNTUuNjE3M0gxMTMuNTQzWk0xMTMuNTQzIDU1LjYwNjVWNTUuNjE3M0gxMTUuMDQzVjU1LjYwNjVIMTEzLjU0M1pNMTEzLjU0MyA1NS41OTU3VjU1LjYwNjVIMTE1LjA0M1Y1NS41OTU3SDExMy41NDNaTTExMy41NDMgNTUuNTg0OFY1NS41OTU3SDExNS4wNDNWNTUuNTg0OEgxMTMuNTQzWk0xMTMuNTQzIDU1LjU3NFY1NS41ODQ4SDExNS4wNDNWNTUuNTc0SDExMy41NDNaTTExMy41NDMgNTUuNTYzM1Y1NS41NzRIMTE1LjA0M1Y1NS41NjMzSDExMy41NDNaTTExMy41NDMgNTUuNTUyNVY1NS41NjMzSDExNS4wNDNWNTUuNTUyNUgxMTMuNTQzWk0xMTMuNTQzIDU1LjU0MTdWNTUuNTUyNUgxMTUuMDQzVjU1LjU0MTdIMTEzLjU0M1pNMTEzLjU0MyA1NS41MzFWNTUuNTQxN0gxMTUuMDQzVjU1LjUzMUgxMTMuNTQzWk0xMTMuNTQzIDU1LjUyMDJWNTUuNTMxSDExNS4wNDNWNTUuNTIwMkgxMTMuNTQzWk0xMTMuNTQzIDU1LjUwOTVWNTUuNTIwMkgxMTUuMDQzVjU1LjUwOTVIMTEzLjU0M1pNMTEzLjU0MyA1NS40OTg4VjU1LjUwOTVIMTE1LjA0M1Y1NS40OTg4SDExMy41NDNaTTExMy41NDMgNTUuNDg4VjU1LjQ5ODhIMTE1LjA0M1Y1NS40ODhIMTEzLjU0M1pNMTEzLjU0MyA1NS40NzczVjU1LjQ4OEgxMTUuMDQzVjU1LjQ3NzNIMTEzLjU0M1pNMTEzLjU0MyA1NS40NjY3VjU1LjQ3NzNIMTE1LjA0M1Y1NS40NjY3SDExMy41NDNaTTExMy41NDMgNTUuNDU2VjU1LjQ2NjdIMTE1LjA0M1Y1NS40NTZIMTEzLjU0M1pNMTEzLjU0MyA1NS40NDUzVjU1LjQ1NkgxMTUuMDQzVjU1LjQ0NTNIMTEzLjU0M1pNMTEzLjU0MyA1NS40MzQ3VjU1LjQ0NTNIMTE1LjA0M1Y1NS40MzQ3SDExMy41NDNaTTExMy41NDMgNTUuNDI0VjU1LjQzNDdIMTE1LjA0M1Y1NS40MjRIMTEzLjU0M1pNMTEzLjU0MyA1NS40MTM0VjU1LjQyNEgxMTUuMDQzVjU1LjQxMzRIMTEzLjU0M1pNMTEzLjU0MyA1NS40MDI4VjU1LjQxMzRIMTE1LjA0M1Y1NS40MDI4SDExMy41NDNaTTExMy41NDMgNTUuMzkyMVY1NS40MDI4SDExNS4wNDNWNTUuMzkyMUgxMTMuNTQzWk0xMTMuNTQzIDU1LjM4MTVWNTUuMzkyMUgxMTUuMDQzVjU1LjM4MTVIMTEzLjU0M1pNMTEzLjU0MyA1NS4zNzFWNTUuMzgxNUgxMTUuMDQzVjU1LjM3MUgxMTMuNTQzWk0xMTMuNTQzIDU1LjM2MDRWNTUuMzcxSDExNS4wNDNWNTUuMzYwNEgxMTMuNTQzWk0xMTMuNTQzIDU1LjM0OThWNTUuMzYwNEgxMTUuMDQzVjU1LjM0OThIMTEzLjU0M1pNMTEzLjU0MyA1NS4zMzkzVjU1LjM0OThIMTE1LjA0M1Y1NS4zMzkzSDExMy41NDNaTTExMy41NDMgNTUuMzI4N1Y1NS4zMzkzSDExNS4wNDNWNTUuMzI4N0gxMTMuNTQzWk0xMTMuNTQzIDU1LjMxODJWNTUuMzI4N0gxMTUuMDQzVjU1LjMxODJIMTEzLjU0M1pNMTEzLjU0MyA1NS4zMDc3VjU1LjMxODJIMTE1LjA0M1Y1NS4zMDc3SDExMy41NDNaTTExMy41NDMgNTUuMjk3MlY1NS4zMDc3SDExNS4wNDNWNTUuMjk3MkgxMTMuNTQzWk0xMTMuNTQzIDU1LjI4NjdWNTUuMjk3MkgxMTUuMDQzVjU1LjI4NjdIMTEzLjU0M1pNMTEzLjU0MyA1NS4yNzYyVjU1LjI4NjdIMTE1LjA0M1Y1NS4yNzYySDExMy41NDNaTTExMy41NDMgNTUuMjY1N1Y1NS4yNzYySDExNS4wNDNWNTUuMjY1N0gxMTMuNTQzWk0xMTMuNTQzIDU1LjI1NTJWNTUuMjY1N0gxMTUuMDQzVjU1LjI1NTJIMTEzLjU0M1pNMTEzLjU0MyA1NS4yNDQ4VjU1LjI1NTJIMTE1LjA0M1Y1NS4yNDQ4SDExMy41NDNaTTExMy41NDMgNTUuMjM0M1Y1NS4yNDQ4SDExNS4wNDNWNTUuMjM0M0gxMTMuNTQzWk0xMTMuNTQzIDU1LjIyMzlWNTUuMjM0M0gxMTUuMDQzVjU1LjIyMzlIMTEzLjU0M1pNMTEzLjU0MyA1NS4yMTM1VjU1LjIyMzlIMTE1LjA0M1Y1NS4yMTM1SDExMy41NDNaXCIsXG4gIGZpbGw6IFwiIzNCMzU1MlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICBjeDogXCI4MC4yODMxXCIsXG4gIGN5OiBcIjEwNC40OVwiLFxuICByOiBcIjQuODNcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTgwLjYzMzkgNzguMjE5Nkw4MC4yODU1IDc4LjAzNjlMNzkuOTM3MiA3OC4yMTk2TDcyLjAyNzkgODIuMzY3NUM3MS4xMTA3IDgyLjg0ODUgNzAuMDM5OSA4Mi4wNjk0IDcwLjIxNTQgODEuMDQ4N0w3MS43MjQ3IDcyLjI3MDZMNzEuNzkxNiA3MS44ODEzTDcxLjUwODQgNzEuNjA1OEw2NS4xMTk2IDY1LjM5MzZDNjQuMzc2MSA2NC42NzA3IDY0Ljc4NTQgNjMuNDA5MSA2NS44MTE3IDYzLjI2MDNMNzQuNjQ1NCA2MS45Nzk5TDc1LjAzNTMgNjEuOTIzM0w3NS4yMTAxIDYxLjU3MDJMNzkuMTY1MiA1My41NzZDNzkuNjI0MSA1Mi42NDg0IDgwLjk0NyA1Mi42NDg0IDgxLjQwNTkgNTMuNTc2TDg1LjM2MSA2MS41NzAyTDg1LjUzNTcgNjEuOTIzM0w4NS45MjU3IDYxLjk3OTlMOTQuNzU5NCA2My4yNjAzQzk1Ljc4NTcgNjMuNDA5MSA5Ni4xOTUgNjQuNjcwNyA5NS40NTE1IDY1LjM5MzZMODkuMDYyNyA3MS42MDU4TDg4Ljc3OTQgNzEuODgxM0w4OC44NDY0IDcyLjI3MDZMOTAuMzU1NyA4MS4wNDg3QzkwLjUzMTIgODIuMDY5NCA4OS40NjA0IDgyLjg0ODUgODguNTQzMiA4Mi4zNjc1TDgwLjYzMzkgNzguMjE5NlpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICBzdHJva2U6IFwiIzNCMzU1MlwiLFxuICBzdHJva2VXaWR0aDogXCIxLjVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTg0LjI5ODggNDkuMzhMODMuOTY2MiA0OC43MDc4TDgzLjI5NCA0OS4wNDA0TDgzLjYyNjYgNDkuNzEyNkw4NC4yOTg4IDQ5LjM4Wk04Ni4wMTczIDUyLjg1MzVMODUuMzQ1MSA1My4xODYxTDg1LjY3NzcgNTMuODU4M0w4Ni4zNDk5IDUzLjUyNTdMODYuMDE3MyA1Mi44NTM1Wk04NS42NDMzIDQ4LjcxNDhMODYuMzE1NSA0OC4zODIzTDg1Ljk4MjkgNDcuNzFMODUuMzEwNyA0OC4wNDI2TDg1LjY0MzMgNDguNzE0OFpNODcuMzYxOCA1Mi4xODgzTDg3LjY5NDQgNTIuODYwNUw4OC4zNjY2IDUyLjUyOEw4OC4wMzQgNTEuODU1N0w4Ny4zNjE4IDUyLjE4ODNaTTg3LjE4OTcgNTUuMjIzMkw4Ni44NTcxIDU0LjU1MDlMODYuMTg0OSA1NC44ODM1TDg2LjUxNzUgNTUuNTU1OEw4Ny4xODk3IDU1LjIyMzJaTTg4LjQ0MDYgNTcuNzUxNUw4OS4xMTI4IDU3LjQxODlWNTcuNDE4OUw4OC40NDA2IDU3Ljc1MTVaTTg4LjUzNDIgNTQuNTU4TDg5LjIwNjQgNTQuMjI1NEw4OC44NzM4IDUzLjU1MzJMODguMjAxNiA1My44ODU4TDg4LjUzNDIgNTQuNTU4Wk04OS43ODUgNTcuMDg2M0w4OS4xMTI4IDU3LjQxODlMODkuNzg1IDU3LjA4NjNaTTkwLjcyNjEgNTcuNzY5MUw5MC44MzM3IDU3LjAyNjhIOTAuODMzN0w5MC43MjYxIDU3Ljc2OTFaTTk2LjEzMzcgNTguNTUyOUw5Ni44NzYgNTguNjYwNUw5Ni45ODM2IDU3LjkxODNMOTYuMjQxMyA1Ny44MTA3TDk2LjEzMzcgNTguNTUyOVpNOTUuOTE4NiA2MC4wMzc0TDk1LjgxMSA2MC43Nzk3TDk2LjU1MzIgNjAuODg3Mkw5Ni42NjA4IDYwLjE0NUw5NS45MTg2IDYwLjAzNzRaTTkwLjUxMDkgNTkuMjUzNkw5MC42MTg1IDU4LjUxMTNMOTAuNTEwOSA1OS4yNTM2Wk04My42MjY2IDQ5LjcxMjZMODUuMzQ1MSA1My4xODYxTDg2LjY4OTUgNTIuNTIwOUw4NC45NzExIDQ5LjA0NzRMODMuNjI2NiA0OS43MTI2Wk04NS4zMTA3IDQ4LjA0MjZMODMuOTY2MiA0OC43MDc4TDg0LjYzMTQgNTAuMDUyMkw4NS45NzU5IDQ5LjM4NzFMODUuMzEwNyA0OC4wNDI2Wk04OC4wMzQgNTEuODU1N0w4Ni4zMTU1IDQ4LjM4MjNMODQuOTcxMSA0OS4wNDc0TDg2LjY4OTUgNTIuNTIwOUw4OC4wMzQgNTEuODU1N1pNODYuMzQ5OSA1My41MjU3TDg3LjY5NDQgNTIuODYwNUw4Ny4wMjkyIDUxLjUxNjFMODUuNjg0NyA1Mi4xODEzTDg2LjM0OTkgNTMuNTI1N1pNODYuNTE3NSA1NS41NTU4TDg3Ljc2ODMgNTguMDg0MUw4OS4xMTI4IDU3LjQxODlMODcuODYxOSA1NC44OTA2TDg2LjUxNzUgNTUuNTU1OFpNODguMjAxNiA1My44ODU4TDg2Ljg1NzEgNTQuNTUwOUw4Ny41MjIzIDU1Ljg5NTRMODguODY2NyA1NS4yMzAyTDg4LjIwMTYgNTMuODg1OFpNOTAuNDU3MyA1Ni43NTM3TDg5LjIwNjQgNTQuMjI1NEw4Ny44NjE5IDU0Ljg5MDZMODkuMTEyOCA1Ny40MTg5TDkwLjQ1NzMgNTYuNzUzN1pNOTAuODMzNyA1Ny4wMjY4QzkwLjY3MDkgNTcuMDAzMiA5MC41MzAyIDU2LjkwMTEgOTAuNDU3MyA1Ni43NTM3TDg5LjExMjggNTcuNDE4OUM4OS40MDQ1IDU4LjAwODUgODkuOTY3NSA1OC40MTcgOTAuNjE4NSA1OC41MTEzTDkwLjgzMzcgNTcuMDI2OFpNOTYuMjQxMyA1Ny44MTA3TDkwLjgzMzcgNTcuMDI2OEw5MC42MTg1IDU4LjUxMTNMOTYuMDI2MiA1OS4yOTUyTDk2LjI0MTMgNTcuODEwN1pNOTYuNjYwOCA2MC4xNDVMOTYuODc2IDU4LjY2MDVMOTUuMzkxNSA1OC40NDUzTDk1LjE3NjMgNTkuOTI5OEw5Ni42NjA4IDYwLjE0NVpNOTAuNDAzMyA1OS45OTU4TDk1LjgxMSA2MC43Nzk3TDk2LjAyNjIgNTkuMjk1Mkw5MC42MTg1IDU4LjUxMTNMOTAuNDAzMyA1OS45OTU4Wk04Ny43NjgzIDU4LjA4NDFDODguMjc4OCA1OS4xMTU5IDg5LjI2NDEgNTkuODMwNyA5MC40MDMzIDU5Ljk5NThMOTAuNjE4NSA1OC41MTEzQzg5Ljk2NzUgNTguNDE3IDg5LjQwNDUgNTguMDA4NSA4OS4xMTI4IDU3LjQxODlMODcuNzY4MyA1OC4wODQxWlwiLFxuICBmaWxsOiBcIiMzQjM1NTJcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk04NS44NjU4IDY1LjU4NjFDODYuNDc2OSA2NC40NzI4IDg3LjY5OSA2My44MjQgODguOTU1OSA2NC4wMDYxVjY0LjAwNjFDODkuNzgzMSA2NC4xMjYgOTEuNDM3NSA2NC4zNjU3IDkxLjQzNzUgNjQuMzY1N0M5MS45NDU4IDY0LjQzOTMgOTIuMjk4MSA2NC45MTExIDkyLjIyNDUgNjUuNDE5NEM5Mi4xOTUxIDY1LjYyMjQgOTIuMDk5NCA2NS44MDk5IDkxLjk1MjQgNjUuOTUyOEw4Ni43OTYxIDcwLjk2NjZMODguMDEzOCA3OC4wNDkxQzg4LjEwMDkgNzguNTU1MyA4Ny43NjExIDc5LjAzNjIgODcuMjU0OSA3OS4xMjMyQzg3LjA1MzUgNzkuMTU3OCA4Ni44NDYzIDc5LjEyNTIgODYuNjY1NCA3OS4wMzAzTDgwLjI4NjEgNzUuNjg0OEw3My45MDY5IDc5LjAzMDNDNzMuNDUyIDc5LjI2ODggNzIuODg5OSA3OS4wOTM1IDcyLjY1MTMgNzguNjM4NkM3Mi41NTY0IDc4LjQ1NzYgNzIuNTIzNyA3OC4yNTA1IDcyLjU1ODQgNzguMDQ5MVY3OC4wNDkxQzcyLjYzNTMgNzcuNjAzNiA3Mi45MzAzIDc3LjIyNjkgNzMuMzQyIDc3LjA0MDJDNzMuNjI5MiA3Ni45MDk5IDczLjk0OSA3Ni43NjI0IDc0LjE2NjcgNzYuNjU0NUM3OC44NzQ0IDc0LjMyMiA4Mi44MTY4IDcwLjY3NzggODUuNTE2MSA2Ni4xOTk3Qzg1LjYyIDY2LjAyNzIgODUuNzQwNSA2NS44MTQzIDg1Ljg2NTggNjUuNTg2MVpcIixcbiAgZmlsbDogXCIjMzA0MEQ2XCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMDVcIlxufSkpO1xuZXhwb3J0IGRlZmF1bHQgVGFnczsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuaW1wb3J0IHsgY3NzQ2xhc3MgfSBmcm9tIFwiLi4vLi4vdXRpbHMvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIElsbHVzdHJhdGlvbnMgZnJvbSBcIi4uL2lsbHVzdHJhdGlvbnMvaW5kZXguanNcIjtcblxuLyoqXG4gKiBAbWVtYmVyb2YgSWxsdXN0cmF0aW9uXG4gKiBAYWxpYXMgSWxsdXN0cmF0aW9uUHJvcHNcbiAqL1xuXG5jb25zdCBXcmFwcGVyID0gc3R5bGVkLmRpdi5hdHRycyhwcm9wcyA9PiAoe1xuICBjbGFzc05hbWU6IGNzc0NsYXNzKCdJbGx1c3RyYXRpb24nLCBwcm9wcy5jbGFzc05hbWUpXG59KSlgXG4gIFtmaWxsPScjMzA0MEQ2J10ge1xuICAgIGZpbGw6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5wcmltYXJ5MTAwfTtcbiAgfVxuXG4gIFtzdHJva2U9JyMzQjM1NTInXSB7XG4gICAgc3Ryb2tlOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMuYWNjZW50fTtcbiAgfVxuYDtcbmNvbnN0IFJhd0lsbHVzdHJhdGlvbiA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHZhcmlhbnQsXG4gICAgLi4ub3RoZXJcbiAgfSA9IHByb3BzO1xuICBjb25zdCBJbGx1c3RyYXRpb25Db21wb25lbnQgPSBJbGx1c3RyYXRpb25zW3ZhcmlhbnRdO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoV3JhcHBlciwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWxsdXN0cmF0aW9uQ29tcG9uZW50LCBvdGhlcikpO1xufTtcblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKlxuICogPGltZyBzcmM9XCJjb21wb25lbnRzL2lsbHVzdHJhdGlvbi5wbmdcIiAvPlxuICpcbiAqIEF3ZXNvbWUgZGF0YWJhc2Ugd2l0aCBhbGwgdGhlIGlsbHVzdHJhdGlvbnMgcHJvdmlkZWQgd2l0aCBBZG1pbkpTLlxuICpcbiAqXG4gKiAjIyMgVXNhZ2VcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBJbGx1c3RyYXRpb24sIElsbHVzdHJhdGlvblByb3BzIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSdcbiAqIGBgYFxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBzdWJjYXRlZ29yeSBBdG9tc1xuICogQHNlZSBJbGx1c3RyYXRpb25Qcm9wc1xuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9zdG9yeWJvb2suYWRtaW5qcy5jby8/cGF0aD0vc3RvcnkvZGVzaWduc3lzdGVtLWF0b21zLWlsbHVzdHJhdGlvbi0tZGVmYXVsdCBTdG9yeWJvb2t9XG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+Rm9sZGVyczwvY2FwdGlvbj5cbiAqIHJldHVybiAoXG4gKiAgIDxJbGx1c3RyYXRpb24gdmFyaWFudD1cIkZvbGRlcnNcIiAvPlxuICogKVxuICogQGV4YW1wbGUgPGNhcHRpb24+RG9jdW1lbnRTZWFyY2g8L2NhcHRpb24+XG4gKiByZXR1cm4gKFxuICogICA8SWxsdXN0cmF0aW9uIHZhcmlhbnQ9XCJEb2N1bWVudFNlYXJjaFwiIC8+XG4gKiApXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Sb2NrZXQ8L2NhcHRpb24+XG4gKiByZXR1cm4gKFxuICogICA8Qm94IGJnPVwiZ3JleTEwMFwiIHA9XCJ4eGxcIj48SWxsdXN0cmF0aW9uIHZhcmlhbnQ9XCJSb2NrZXRcIiAvPjwvQm94PlxuICogKVxuICogQHNlY3Rpb24gZGVzaWduLXN5c3RlbVxuICovXG5leHBvcnQgY29uc3QgSWxsdXN0cmF0aW9uID0gUmF3SWxsdXN0cmF0aW9uO1xuSWxsdXN0cmF0aW9uLmRpc3BsYXlOYW1lID0gJ0lsbHVzdHJhdGlvbic7XG5leHBvcnQgZGVmYXVsdCBJbGx1c3RyYXRpb247IiwiaW1wb3J0IHsgY29sb3IsIHNwYWNlLCB2YXJpYW50IH0gZnJvbSAnc3R5bGVkLXN5c3RlbSc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgeyBjc3NDbGFzcyB9IGZyb20gXCIuLi8uLi91dGlscy9jc3MtY2xhc3MuanNcIjtcbmNvbnN0IHNpemVWYXJpYW50cyA9IHZhcmlhbnQoe1xuICBwcm9wOiAnc2l6ZScsXG4gIHZhcmlhbnRzOiB7XG4gICAgc206IHtcbiAgICAgIGZvbnRTaXplOiAneHMnLFxuICAgICAgcHk6ICdzbSdcbiAgICB9LFxuICAgIGxnOiB7XG4gICAgICBmb250U2l6ZTogJ2RlZmF1bHQnXG4gICAgfVxuICB9XG59KTtcbmNvbnN0IHZhcmlhbnRzID0gdmFyaWFudCh7XG4gIHZhcmlhbnRzOiB7XG4gICAgcHJpbWFyeToge1xuICAgICAgY29sb3I6ICdwcmltYXJ5MTAwJ1xuICAgIH0sXG4gICAgZGFuZ2VyOiB7XG4gICAgICBjb2xvcjogJ2Vycm9yJ1xuICAgIH0sXG4gICAgc3VjY2Vzczoge1xuICAgICAgY29sb3I6ICdzdWNjZXNzJ1xuICAgIH0sXG4gICAgaW5mbzoge1xuICAgICAgY29sb3I6ICdwcmltYXJ5NjAnXG4gICAgfSxcbiAgICBzZWNvbmRhcnk6IHtcbiAgICAgIGNvbG9yOiAnYWNjZW50J1xuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogUHJvcCBUeXBlcyBvZiBhIExpbmsgY29tcG9uZW50LlxuICogQXBhcnQgZnJvbSB0aG9zZSBleHBsaWNpdGx5IHNwZWNpZmllZCBiZWxvdyBpdCBleHRlbmRzIGFsbCB7QGxpbmsgQ29sb3JQcm9wc30sXG4gKiBhbmQge0BsaW5rIFNwYWNlUHJvcHN9XG4gKlxuICogQG1lbWJlcm9mIExpbmtcbiAqIEBhbGlhcyBMaW5rUHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbLi4uXSBBbGwgcHJvcHMgZGVmYXVsdCB0byBfYV8gaHRtbCBjb21wb25lbnQgbGlrZSBgaHJlZmAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYG9uQ2xpY2tgIGV0Yy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbLi4uXSBPdGhlciBwcm9wcyBmcm9tIHtAbGluayBDb2xvclByb3BzfSBhbmQge0BsaW5rIFNwYWNlUHJvcHN9XG4gKi9cblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKlxuICogPGltZyBzcmM9XCJjb21wb25lbnRzL2xpbmsucG5nXCIgLz5cbiAqXG4gKiBTdHlsZWQgZm9ybSBvZiBMaW5rIGVsZW1lbnQuXG4gKlxuICogIyMjIFVzYWdlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgTGluaywgTGlua1Byb3BzIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSdcbiAqIGBgYFxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBzdWJjYXRlZ29yeSBBdG9tc1xuICogQHNlZSBMaW5rUHJvcHNcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vc3Rvcnlib29rLmFkbWluanMuY28vP3BhdGg9L3N0b3J5L2Rlc2lnbnN5c3RlbS1hdG9tcy1saW5rLS1kZWZhdWx0IFN0b3J5Ym9va31cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkFsbCBjb2xvciB2YXJpYW50czwvY2FwdGlvbj5cbiAqIGNvbnN0IHZhcmlhbnRzID0gWydwcmltYXJ5JywgJ2RhbmdlcicsICdzdWNjZXNzJywgJ2luZm8nLCAnc2Vjb25kYXJ5J11cbiAqIHJldHVybiAoXG4gKiA8Qm94IHB5PVwieGxcIj5cbiAqICAge3ZhcmlhbnRzLm1hcCh2YXJpYW50ID0+IChcbiAqICAgICAgPExpbmsgaHJlZj1cIiNcIiB2YXJpYW50PXt2YXJpYW50fSBtcj1cInhsXCI+e3ZhcmlhbnR9PC9MaW5rPlxuICogICApKX1cbiAqIDwvQm94PlxuICogKVxuICogQGV4YW1wbGUgPGNhcHRpb24+V2l0aCBpY29uczwvY2FwdGlvbj5cbiAqIHJldHVybiAoXG4gKiA8Qm94IHB5PVwieGxcIj5cbiAqICAgPExpbmsgaHJlZj1cIiNcIiBtcj1cInhsXCI+XG4gKiAgICAgPEljb24gaWNvbj1cIlBsdXNcIiAvPlxuICogICAgIFdpdGggYW4gaWNvblxuICogICA8L0xpbms+XG4gKiA8L0JveD5cbiAqIClcbiAqIEBzZWN0aW9uIGRlc2lnbi1zeXN0ZW1cbiAqL1xuY29uc3QgTGluayA9IHN0eWxlZC5hYFxuICBmb250LWZhbWlseTogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuZm9udH07XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICY6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG4gICYgc3ZnIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5zcGFjZS5kZWZhdWx0fTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7XG4gIH1cbiAgJHsoe1xuICB1cHBlcmNhc2Vcbn0pID0+IHVwcGVyY2FzZSA/ICd0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOycgOiAnJ31cbiAgJHtjb2xvcn07XG4gICR7c3BhY2V9O1xuICAke3NpemVWYXJpYW50c307XG4gICR7dmFyaWFudHN9O1xuYDtcbkxpbmsuZGVmYXVsdFByb3BzID0ge1xuICB2YXJpYW50OiAncHJpbWFyeScsXG4gIGNvbG9yOiAnZ3JleTYwJyxcbiAgY2xhc3NOYW1lOiBjc3NDbGFzcygnTGluaycpXG59O1xuTGluay5kaXNwbGF5TmFtZSA9ICdMaW5rJztcbmV4cG9ydCB7IExpbmsgfTtcbmV4cG9ydCBkZWZhdWx0IExpbms7IiwiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9ydCAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IEJveCB9IGZyb20gXCIuLi9ib3gvaW5kZXguanNcIjtcbmltcG9ydCB7IGNzc0NsYXNzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2Nzcy1jbGFzcy5qc1wiO1xuY29uc3QgU3Bpbm5lciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdsZHMtZmFjZWJvb2snXG59KWBcbiAgJiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogNjRweDtcbiAgICBoZWlnaHQ6IDY0cHg7XG4gIH1cbiAgJiBkaXYge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogNnB4O1xuICAgIHdpZHRoOiAxM3B4O1xuICAgIGJhY2tncm91bmQ6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5wcmltYXJ5MTAwfTtcbiAgICBhbmltYXRpb246IGxkcy1mYWNlYm9vayAxcyBjdWJpYy1iZXppZXIoMCwgMC41LCAwLjUsIDEpIGluZmluaXRlO1xuICB9XG4gICYgZGl2Om50aC1jaGlsZCgxKSB7XG4gICAgbGVmdDogNnB4O1xuICAgIGFuaW1hdGlvbi1kZWxheTogLTAuMjRzO1xuICB9XG4gICYgZGl2Om50aC1jaGlsZCgyKSB7XG4gICAgbGVmdDogMjZweDtcbiAgICBhbmltYXRpb24tZGVsYXk6IC0wLjEycztcbiAgfVxuICAmIGRpdjpudGgtY2hpbGQoMykge1xuICAgIGxlZnQ6IDQ1cHg7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAwO1xuICB9XG4gIEBrZXlmcmFtZXMgbGRzLWZhY2Vib29rIHtcbiAgICAwJSwgODAlLCAxMDAlIHtcbiAgICAgIHRvcDogNnB4O1xuICAgICAgaGVpZ2h0OiA1MXB4O1xuICAgIH1cbiAgICA0MCUge1xuICAgICAgdG9wOiAxOXB4O1xuICAgICAgaGVpZ2h0OiAyNnB4O1xuICAgIH1cbiAgfVxuXG5gO1xuXG4vKipcbiAqIEBjbGFzc2Rlc2NcbiAqXG4gKiA8aW1nIHNyYz1cImNvbXBvbmVudHMvbG9hZGVyLnBuZ1wiIC8+XG4gKlxuICogU2ltcGxlIGxvYWRlclxuICpcbiAqICMjIyBVc2FnZVxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IExvYWRlciB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nXG4gKiBgYGBcbiAqXG4gKiBAY29tcG9uZW50XG4gKiBAc2VlIHtAbGluayBodHRwczovL3N0b3J5Ym9vay5hZG1pbmpzLmNvLz9wYXRoPS9zdG9yeS9kZXNpZ25zeXN0ZW0tYXRvbXMtbG9hZGVyLS1kZWZhdWx0IFN0b3J5Ym9va31cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBzdWJjYXRlZ29yeSBBdG9tc1xuICogQGV4YW1wbGVcbiAqIHJldHVybiAoXG4gKiAgIDxMb2FkZXIvPlxuICogKVxuICogQHNlY3Rpb24gZGVzaWduLXN5c3RlbVxuICovXG5jb25zdCBMb2FkZXIgPSAoKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgcDogXCJ4M1wiLFxuICBzdHlsZToge1xuICAgIHRleHRBbGlnbjogJ2NlbnRlcidcbiAgfSxcbiAgXCJkYXRhLXRlc3RpZFwiOiBcIkxvYWRlclwiLFxuICBjbGFzc05hbWU6IGNzc0NsYXNzKCdMb2FkZXInKVxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3Bpbm5lciwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgbnVsbCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIG51bGwpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsKSkpO1xuTG9hZGVyLmRpc3BsYXlOYW1lID0gJ0xvYWRlcic7XG5leHBvcnQgeyBMb2FkZXIgfTtcbmV4cG9ydCBkZWZhdWx0IExvYWRlcjsiLCJpbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgeyB6SW5kZXggfSBmcm9tICdzdHlsZWQtc3lzdGVtJztcbmltcG9ydCB7IGNzc0NsYXNzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2Nzcy1jbGFzcy5qc1wiO1xuZXhwb3J0IGNvbnN0IE92ZXJsYXkgPSBzdHlsZWQuZGl2YFxuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiA5OTk7XG5cbiAgJHt6SW5kZXh9XG5gO1xuT3ZlcmxheS5kZWZhdWx0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZTogY3NzQ2xhc3MoJ092ZXJsYXknKVxufTtcbk92ZXJsYXkuZGlzcGxheU5hbWUgPSAnT3ZlcmxheSc7XG5leHBvcnQgZGVmYXVsdCBPdmVybGF5OyIsIm1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIHIobil7aWYodFtuXSlyZXR1cm4gdFtuXS5leHBvcnRzO3ZhciBhPXRbbl09e2k6bixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW25dLmNhbGwoYS5leHBvcnRzLGEsYS5leHBvcnRzLHIpLGEubD0hMCxhLmV4cG9ydHN9cmV0dXJuIHIubT1lLHIuYz10LHIuZD1mdW5jdGlvbihlLHQsbil7ci5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0Om59KX0sci5yPWZ1bmN0aW9uKGUpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LHIudD1mdW5jdGlvbihlLHQpe2lmKDEmdCYmKGU9cihlKSksOCZ0KXJldHVybiBlO2lmKDQmdCYmXCJvYmplY3RcIj09dHlwZW9mIGUmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHIucihuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSksMiZ0JiZcInN0cmluZ1wiIT10eXBlb2YgZSlmb3IodmFyIGEgaW4gZSlyLmQobixhLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfS5iaW5kKG51bGwsYSkpO3JldHVybiBufSxyLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIHIuZCh0LFwiYVwiLHQpLHR9LHIubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sci5wPVwiXCIscihyLnM9OSl9KFtmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1yZXF1aXJlKFwicmVhY3RcIil9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbjtcbi8qIVxuICBDb3B5cmlnaHQgKGMpIDIwMTcgSmVkIFdhdHNvbi5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcbiAgaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi8hZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgcj17fS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBhKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07aWYobil7dmFyIG89dHlwZW9mIG47aWYoXCJzdHJpbmdcIj09PW98fFwibnVtYmVyXCI9PT1vKWUucHVzaChuKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoKXt2YXIgaT1hLmFwcGx5KG51bGwsbik7aSYmZS5wdXNoKGkpfWVsc2UgaWYoXCJvYmplY3RcIj09PW8pZm9yKHZhciB1IGluIG4pci5jYWxsKG4sdSkmJm5bdV0mJmUucHVzaCh1KX19cmV0dXJuIGUuam9pbihcIiBcIil9ZS5leHBvcnRzPyhhLmRlZmF1bHQ9YSxlLmV4cG9ydHM9YSk6dm9pZCAwPT09KG49ZnVuY3Rpb24oKXtyZXR1cm4gYX0uYXBwbHkodCxbXSkpfHwoZS5leHBvcnRzPW4pfSgpfSxmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHQpe3ZhciByPS9eXFxzK3xcXHMrJC9nLG49L15bLStdMHhbMC05YS1mXSskL2ksYT0vXjBiWzAxXSskL2ksbz0vXjBvWzAtN10rJC9pLGk9cGFyc2VJbnQsdT1cIm9iamVjdFwiPT10eXBlb2YgdCYmdCYmdC5PYmplY3Q9PT1PYmplY3QmJnQsYz1cIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYscz11fHxjfHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksbD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGY9cy5TeW1ib2wsZD1mP2YucHJvdG90eXBlOnZvaWQgMCxwPWQ/ZC50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gaChlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gZTtpZih5KGUpKXJldHVybiBwP3AuY2FsbChlKTpcIlwiO3ZhciB0PWUrXCJcIjtyZXR1cm5cIjBcIj09dCYmMS9lPT0tMS8wP1wiLTBcIjp0fWZ1bmN0aW9uIG0oZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuISFlJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX1mdW5jdGlvbiB5KGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfHxmdW5jdGlvbihlKXtyZXR1cm4hIWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfShlKSYmXCJbb2JqZWN0IFN5bWJvbF1cIj09bC5jYWxsKGUpfWZ1bmN0aW9uIGIoZSl7cmV0dXJuIGU/KGU9ZnVuY3Rpb24oZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoeShlKSlyZXR1cm4gTmFOO2lmKG0oZSkpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGUudmFsdWVPZj9lLnZhbHVlT2YoKTplO2U9bSh0KT90K1wiXCI6dH1pZihcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm4gMD09PWU/ZTorZTtlPWUucmVwbGFjZShyLFwiXCIpO3ZhciB1PWEudGVzdChlKTtyZXR1cm4gdXx8by50ZXN0KGUpP2koZS5zbGljZSgyKSx1PzI6OCk6bi50ZXN0KGUpP05hTjorZX0oZSkpPT09MS8wfHxlPT09LTEvMD8xNzk3NjkzMTM0ODYyMzE1N2UyOTIqKGU8MD8tMToxKTplPT1lP2U6MDowPT09ZT9lOjB9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLG8saTtyZXR1cm4gZT1udWxsPT0obj1lKT9cIlwiOmgobiksYT1mdW5jdGlvbihlKXt2YXIgdD1iKGUpLHI9dCUxO3JldHVybiB0PT10P3I/dC1yOnQ6MH0ociksbz0wLGk9ZS5sZW5ndGgsYT09YSYmKHZvaWQgMCE9PWkmJihhPWE8PWk/YTppKSx2b2lkIDAhPT1vJiYoYT1hPj1vP2E6bykpLHI9YSx0PWgodCksZS5zbGljZShyLHIrdC5sZW5ndGgpPT10fX0pLmNhbGwodGhpcyxyKDMpKX0sZnVuY3Rpb24oZSx0KXt2YXIgcjtyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCk7dHJ5e3I9cnx8bmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChlKXtcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiYocj13aW5kb3cpfWUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHQpe3ZhciByPS9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC8sbj1cIm9iamVjdFwiPT10eXBlb2YgdCYmdCYmdC5PYmplY3Q9PT1PYmplY3QmJnQsYT1cIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsbz1ufHxhfHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7dmFyIGksdT1BcnJheS5wcm90b3R5cGUsYz1GdW5jdGlvbi5wcm90b3R5cGUscz1PYmplY3QucHJvdG90eXBlLGw9b1tcIl9fY29yZS1qc19zaGFyZWRfX1wiXSxmPShpPS9bXi5dKyQvLmV4ZWMobCYmbC5rZXlzJiZsLmtleXMuSUVfUFJPVE98fFwiXCIpKT9cIlN5bWJvbChzcmMpXzEuXCIraTpcIlwiLGQ9Yy50b1N0cmluZyxwPXMuaGFzT3duUHJvcGVydHksaD1zLnRvU3RyaW5nLG09UmVnRXhwKFwiXlwiK2QuY2FsbChwKS5yZXBsYWNlKC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLFwiJDEuKj9cIikrXCIkXCIpLHk9dS5zcGxpY2UsYj14KG8sXCJNYXBcIiksZz14KE9iamVjdCxcImNyZWF0ZVwiKTtmdW5jdGlvbiB2KGUpe3ZhciB0PS0xLHI9ZT9lLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PHI7KXt2YXIgbj1lW3RdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIEMoZSl7dmFyIHQ9LTEscj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8cjspe3ZhciBuPWVbdF07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gXyhlKXt2YXIgdD0tMSxyPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX1mdW5jdGlvbiB3KGUsdCl7Zm9yKHZhciByLG4sYT1lLmxlbmd0aDthLS07KWlmKChyPWVbYV1bMF0pPT09KG49dCl8fHIhPXImJm4hPW4pcmV0dXJuIGE7cmV0dXJuLTF9ZnVuY3Rpb24gUyhlKXtyZXR1cm4hKCFPKGUpfHwodD1lLGYmJmYgaW4gdCkpJiYoZnVuY3Rpb24oZSl7dmFyIHQ9TyhlKT9oLmNhbGwoZSk6XCJcIjtyZXR1cm5cIltvYmplY3QgRnVuY3Rpb25dXCI9PXR8fFwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIj09dH0oZSl8fGZ1bmN0aW9uKGUpe3ZhciB0PSExO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUudG9TdHJpbmcpdHJ5e3Q9ISEoZStcIlwiKX1jYXRjaChlKXt9cmV0dXJuIHR9KGUpP206cikudGVzdChmdW5jdGlvbihlKXtpZihudWxsIT1lKXt0cnl7cmV0dXJuIGQuY2FsbChlKX1jYXRjaChlKXt9dHJ5e3JldHVybiBlK1wiXCJ9Y2F0Y2goZSl7fX1yZXR1cm5cIlwifShlKSk7dmFyIHR9ZnVuY3Rpb24gaihlLHQpe3ZhciByLG4sYT1lLl9fZGF0YV9fO3JldHVybihcInN0cmluZ1wiPT0obj10eXBlb2Yocj10KSl8fFwibnVtYmVyXCI9PW58fFwic3ltYm9sXCI9PW58fFwiYm9vbGVhblwiPT1uP1wiX19wcm90b19fXCIhPT1yOm51bGw9PT1yKT9hW1wic3RyaW5nXCI9PXR5cGVvZiB0P1wic3RyaW5nXCI6XCJoYXNoXCJdOmEubWFwfWZ1bmN0aW9uIHgoZSx0KXt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfShlLHQpO3JldHVybiBTKHIpP3I6dm9pZCAwfWZ1bmN0aW9uIE4oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlfHx0JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLGE9dD90LmFwcGx5KHRoaXMsbik6blswXSxvPXIuY2FjaGU7aWYoby5oYXMoYSkpcmV0dXJuIG8uZ2V0KGEpO3ZhciBpPWUuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1vLnNldChhLGkpLGl9O3JldHVybiByLmNhY2hlPW5ldyhOLkNhY2hlfHxfKSxyfWZ1bmN0aW9uIE8oZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuISFlJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX12LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189Zz9nKG51bGwpOnt9fSx2LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXX0sdi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187aWYoZyl7dmFyIHI9dFtlXTtyZXR1cm5cIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19cIj09PXI/dm9pZCAwOnJ9cmV0dXJuIHAuY2FsbCh0LGUpP3RbZV06dm9pZCAwfSx2LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gZz92b2lkIDAhPT10W2VdOnAuY2FsbCh0LGUpfSx2LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fX2RhdGFfX1tlXT1nJiZ2b2lkIDA9PT10P1wiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfX1wiOnQsdGhpc30sQy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdfSxDLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxyPXcodCxlKTtyZXR1cm4hKHI8MCkmJihyPT10Lmxlbmd0aC0xP3QucG9wKCk6eS5jYWxsKHQsciwxKSwhMCl9LEMucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLHI9dyh0LGUpO3JldHVybiByPDA/dm9pZCAwOnRbcl1bMV19LEMucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdyh0aGlzLl9fZGF0YV9fLGUpPi0xfSxDLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9fZGF0YV9fLG49dyhyLGUpO3JldHVybiBuPDA/ci5wdXNoKFtlLHRdKTpyW25dWzFdPXQsdGhpc30sXy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyB2LG1hcDpuZXcoYnx8Qyksc3RyaW5nOm5ldyB2fX0sXy5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiBqKHRoaXMsZSkuZGVsZXRlKGUpfSxfLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGoodGhpcyxlKS5nZXQoZSl9LF8ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gaih0aGlzLGUpLmhhcyhlKX0sXy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGoodGhpcyxlKS5zZXQoZSx0KSx0aGlzfSxOLkNhY2hlPV8sZS5leHBvcnRzPU59KS5jYWxsKHRoaXMscigzKSl9LGZ1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24odCl7dmFyIHI9L15cXHMrfFxccyskL2csbj0vXlstK10weFswLTlhLWZdKyQvaSxhPS9eMGJbMDFdKyQvaSxvPS9eMG9bMC03XSskL2ksaT1wYXJzZUludCx1PVwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0JiZ0Lk9iamVjdD09PU9iamVjdCYmdCxjPVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixzPXV8fGN8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxsPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsZj1NYXRoLm1heCxkPU1hdGgubWluLHA9ZnVuY3Rpb24oKXtyZXR1cm4gcy5EYXRlLm5vdygpfTtmdW5jdGlvbiBoKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiEhZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9ZnVuY3Rpb24gbShlKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4gZTtpZihmdW5jdGlvbihlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZXx8ZnVuY3Rpb24oZSl7cmV0dXJuISFlJiZcIm9iamVjdFwiPT10eXBlb2YgZX0oZSkmJlwiW29iamVjdCBTeW1ib2xdXCI9PWwuY2FsbChlKX0oZSkpcmV0dXJuIE5hTjtpZihoKGUpKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnZhbHVlT2Y/ZS52YWx1ZU9mKCk6ZTtlPWgodCk/dCtcIlwiOnR9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIDA9PT1lP2U6K2U7ZT1lLnJlcGxhY2UocixcIlwiKTt2YXIgdT1hLnRlc3QoZSk7cmV0dXJuIHV8fG8udGVzdChlKT9pKGUuc2xpY2UoMiksdT8yOjgpOm4udGVzdChlKT9OYU46K2V9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLG8saSx1LGMscz0wLGw9ITEseT0hMSxiPSEwO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgZnVuY3Rpb25cIik7ZnVuY3Rpb24gZyh0KXt2YXIgcj1uLG89YTtyZXR1cm4gbj1hPXZvaWQgMCxzPXQsaT1lLmFwcGx5KG8scil9ZnVuY3Rpb24gdihlKXtyZXR1cm4gcz1lLHU9c2V0VGltZW91dChfLHQpLGw/ZyhlKTppfWZ1bmN0aW9uIEMoZSl7dmFyIHI9ZS1jO3JldHVybiB2b2lkIDA9PT1jfHxyPj10fHxyPDB8fHkmJmUtcz49b31mdW5jdGlvbiBfKCl7dmFyIGU9cCgpO2lmKEMoZSkpcmV0dXJuIHcoZSk7dT1zZXRUaW1lb3V0KF8sZnVuY3Rpb24oZSl7dmFyIHI9dC0oZS1jKTtyZXR1cm4geT9kKHIsby0oZS1zKSk6cn0oZSkpfWZ1bmN0aW9uIHcoZSl7cmV0dXJuIHU9dm9pZCAwLGImJm4/ZyhlKToobj1hPXZvaWQgMCxpKX1mdW5jdGlvbiBTKCl7dmFyIGU9cCgpLHI9QyhlKTtpZihuPWFyZ3VtZW50cyxhPXRoaXMsYz1lLHIpe2lmKHZvaWQgMD09PXUpcmV0dXJuIHYoYyk7aWYoeSlyZXR1cm4gdT1zZXRUaW1lb3V0KF8sdCksZyhjKX1yZXR1cm4gdm9pZCAwPT09dSYmKHU9c2V0VGltZW91dChfLHQpKSxpfXJldHVybiB0PW0odCl8fDAsaChyKSYmKGw9ISFyLmxlYWRpbmcsbz0oeT1cIm1heFdhaXRcImluIHIpP2YobShyLm1heFdhaXQpfHwwLHQpOm8sYj1cInRyYWlsaW5nXCJpbiByPyEhci50cmFpbGluZzpiKSxTLmNhbmNlbD1mdW5jdGlvbigpe3ZvaWQgMCE9PXUmJmNsZWFyVGltZW91dCh1KSxzPTAsbj1jPWE9dT12b2lkIDB9LFMuZmx1c2g9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dT9pOncocCgpKX0sU319KS5jYWxsKHRoaXMscigzKSl9LGZ1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24oZSxyKXt2YXIgbj1cIltvYmplY3QgQXJndW1lbnRzXVwiLGE9XCJbb2JqZWN0IE1hcF1cIixvPVwiW29iamVjdCBPYmplY3RdXCIsaT1cIltvYmplY3QgU2V0XVwiLHU9L1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxjPS9eXFx3KiQvLHM9L15cXC4vLGw9L1teLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCQpKS9nLGY9L1xcXFwoXFxcXCk/L2csZD0vXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvLHA9L14oPzowfFsxLTldXFxkKikkLyxoPXt9O2hbXCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIl09aFtcIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiXT1oW1wiW29iamVjdCBJbnQ4QXJyYXldXCJdPWhbXCJbb2JqZWN0IEludDE2QXJyYXldXCJdPWhbXCJbb2JqZWN0IEludDMyQXJyYXldXCJdPWhbXCJbb2JqZWN0IFVpbnQ4QXJyYXldXCJdPWhbXCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiXT1oW1wiW29iamVjdCBVaW50MTZBcnJheV1cIl09aFtcIltvYmplY3QgVWludDMyQXJyYXldXCJdPSEwLGhbbl09aFtcIltvYmplY3QgQXJyYXldXCJdPWhbXCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiXT1oW1wiW29iamVjdCBCb29sZWFuXVwiXT1oW1wiW29iamVjdCBEYXRhVmlld11cIl09aFtcIltvYmplY3QgRGF0ZV1cIl09aFtcIltvYmplY3QgRXJyb3JdXCJdPWhbXCJbb2JqZWN0IEZ1bmN0aW9uXVwiXT1oW2FdPWhbXCJbb2JqZWN0IE51bWJlcl1cIl09aFtvXT1oW1wiW29iamVjdCBSZWdFeHBdXCJdPWhbaV09aFtcIltvYmplY3QgU3RyaW5nXVwiXT1oW1wiW29iamVjdCBXZWFrTWFwXVwiXT0hMTt2YXIgbT1cIm9iamVjdFwiPT10eXBlb2YgZSYmZSYmZS5PYmplY3Q9PT1PYmplY3QmJmUseT1cIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsYj1tfHx5fHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksZz10JiYhdC5ub2RlVHlwZSYmdCx2PWcmJlwib2JqZWN0XCI9PXR5cGVvZiByJiZyJiYhci5ub2RlVHlwZSYmcixDPXYmJnYuZXhwb3J0cz09PWcmJm0ucHJvY2VzcyxfPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBDJiZDLmJpbmRpbmcoXCJ1dGlsXCIpfWNhdGNoKGUpe319KCksdz1fJiZfLmlzVHlwZWRBcnJheTtmdW5jdGlvbiBTKGUsdCxyLG4pe3ZhciBhPS0xLG89ZT9lLmxlbmd0aDowO2ZvcihuJiZvJiYocj1lWysrYV0pOysrYTxvOylyPXQocixlW2FdLGEsZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gaihlLHQpe2Zvcih2YXIgcj0tMSxuPWU/ZS5sZW5ndGg6MDsrK3I8bjspaWYodChlW3JdLHIsZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24geChlLHQscixuLGEpe3JldHVybiBhKGUsKGZ1bmN0aW9uKGUsYSxvKXtyPW4/KG49ITEsZSk6dChyLGUsYSxvKX0pKSxyfWZ1bmN0aW9uIE4oZSl7dmFyIHQ9ITE7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZS50b1N0cmluZyl0cnl7dD0hIShlK1wiXCIpfWNhdGNoKGUpe31yZXR1cm4gdH1mdW5jdGlvbiBPKGUpe3ZhciB0PS0xLHI9QXJyYXkoZS5zaXplKTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlLG4pe3JbKyt0XT1bbixlXX0pKSxyfWZ1bmN0aW9uIGsoZSl7dmFyIHQ9LTEscj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JbKyt0XT1lfSkpLHJ9dmFyIEUsVCxJLEE9QXJyYXkucHJvdG90eXBlLEQ9RnVuY3Rpb24ucHJvdG90eXBlLFA9T2JqZWN0LnByb3RvdHlwZSxGPWJbXCJfX2NvcmUtanNfc2hhcmVkX19cIl0sTT0oRT0vW14uXSskLy5leGVjKEYmJkYua2V5cyYmRi5rZXlzLklFX1BST1RPfHxcIlwiKSk/XCJTeW1ib2woc3JjKV8xLlwiK0U6XCJcIixSPUQudG9TdHJpbmcsTD1QLmhhc093blByb3BlcnR5LHo9UC50b1N0cmluZyxCPVJlZ0V4cChcIl5cIitSLmNhbGwoTCkucmVwbGFjZSgvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csXCJcXFxcJCZcIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZyxcIiQxLio/XCIpK1wiJFwiKSxHPWIuU3ltYm9sLCQ9Yi5VaW50OEFycmF5LFY9UC5wcm9wZXJ0eUlzRW51bWVyYWJsZSxLPUEuc3BsaWNlLFU9KFQ9T2JqZWN0LmtleXMsST1PYmplY3QsZnVuY3Rpb24oZSl7cmV0dXJuIFQoSShlKSl9KSxxPU5lKGIsXCJEYXRhVmlld1wiKSxIPU5lKGIsXCJNYXBcIiksVz1OZShiLFwiUHJvbWlzZVwiKSxKPU5lKGIsXCJTZXRcIiksWj1OZShiLFwiV2Vha01hcFwiKSxRPU5lKE9iamVjdCxcImNyZWF0ZVwiKSxZPVBlKHEpLFg9UGUoSCksZWU9UGUoVyksdGU9UGUoSikscmU9UGUoWiksbmU9Rz9HLnByb3RvdHlwZTp2b2lkIDAsYWU9bmU/bmUudmFsdWVPZjp2b2lkIDAsb2U9bmU/bmUudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIGllKGUpe3ZhciB0PS0xLHI9ZT9lLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PHI7KXt2YXIgbj1lW3RdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIHVlKGUpe3ZhciB0PS0xLHI9ZT9lLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PHI7KXt2YXIgbj1lW3RdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIGNlKGUpe3ZhciB0PS0xLHI9ZT9lLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PHI7KXt2YXIgbj1lW3RdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIHNlKGUpe3ZhciB0PS0xLHI9ZT9lLmxlbmd0aDowO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBjZTsrK3Q8cjspdGhpcy5hZGQoZVt0XSl9ZnVuY3Rpb24gbGUoZSl7dGhpcy5fX2RhdGFfXz1uZXcgdWUoZSl9ZnVuY3Rpb24gZmUoZSx0KXt2YXIgcj1MZShlKXx8UmUoZSk/ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9LTEsbj1BcnJheShlKTsrK3I8ZTspbltyXT10KHIpO3JldHVybiBufShlLmxlbmd0aCxTdHJpbmcpOltdLG49ci5sZW5ndGgsYT0hIW47Zm9yKHZhciBvIGluIGUpIXQmJiFMLmNhbGwoZSxvKXx8YSYmKFwibGVuZ3RoXCI9PW98fGtlKG8sbikpfHxyLnB1c2gobyk7cmV0dXJuIHJ9ZnVuY3Rpb24gZGUoZSx0KXtmb3IodmFyIHI9ZS5sZW5ndGg7ci0tOylpZihNZShlW3JdWzBdLHQpKXJldHVybiByO3JldHVybi0xfWllLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189UT9RKG51bGwpOnt9fSxpZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV19LGllLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztpZihRKXt2YXIgcj10W2VdO3JldHVyblwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfX1wiPT09cj92b2lkIDA6cn1yZXR1cm4gTC5jYWxsKHQsZSk/dFtlXTp2b2lkIDB9LGllLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gUT92b2lkIDAhPT10W2VdOkwuY2FsbCh0LGUpfSxpZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX19kYXRhX19bZV09USYmdm9pZCAwPT09dD9cIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19cIjp0LHRoaXN9LHVlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W119LHVlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxyPWRlKHQsZSk7cmV0dXJuIShyPDApJiYocj09dC5sZW5ndGgtMT90LnBvcCgpOksuY2FsbCh0LHIsMSksITApfSx1ZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18scj1kZSh0LGUpO3JldHVybiByPDA/dm9pZCAwOnRbcl1bMV19LHVlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGRlKHRoaXMuX19kYXRhX18sZSk+LTF9LHVlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9fZGF0YV9fLG49ZGUocixlKTtyZXR1cm4gbjwwP3IucHVzaChbZSx0XSk6cltuXVsxXT10LHRoaXN9LGNlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189e2hhc2g6bmV3IGllLG1hcDpuZXcoSHx8dWUpLHN0cmluZzpuZXcgaWV9fSxjZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiB4ZSh0aGlzLGUpLmRlbGV0ZShlKX0sY2UucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4geGUodGhpcyxlKS5nZXQoZSl9LGNlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHhlKHRoaXMsZSkuaGFzKGUpfSxjZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHhlKHRoaXMsZSkuc2V0KGUsdCksdGhpc30sc2UucHJvdG90eXBlLmFkZD1zZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQoZSxcIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19cIiksdGhpc30sc2UucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9LGxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IHVlfSxsZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmRlbGV0ZShlKX0sbGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoZSl9LGxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfSxsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fX2RhdGFfXztpZihyIGluc3RhbmNlb2YgdWUpe3ZhciBuPXIuX19kYXRhX187aWYoIUh8fG4ubGVuZ3RoPDE5OSlyZXR1cm4gbi5wdXNoKFtlLHRdKSx0aGlzO3I9dGhpcy5fX2RhdGFfXz1uZXcgY2Uobil9cmV0dXJuIHIuc2V0KGUsdCksdGhpc307dmFyIHBlLGhlLG1lPShwZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZ5ZShlLHQscWUpfSxmdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJuIGU7aWYoIXplKGUpKXJldHVybiBwZShlLHQpO2Zvcih2YXIgcj1lLmxlbmd0aCxuPWhlP3I6LTEsYT1PYmplY3QoZSk7KGhlP24tLTorK248cikmJiExIT09dChhW25dLG4sYSk7KTtyZXR1cm4gZX0pLHllPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7Zm9yKHZhciBhPS0xLG89T2JqZWN0KHQpLGk9bih0KSx1PWkubGVuZ3RoO3UtLTspe3ZhciBjPWlbZT91OisrYV07aWYoITE9PT1yKG9bY10sYyxvKSlicmVha31yZXR1cm4gdH19KCk7ZnVuY3Rpb24gYmUoZSx0KXtmb3IodmFyIHI9MCxuPSh0PUVlKHQsZSk/W3RdOlNlKHQpKS5sZW5ndGg7bnVsbCE9ZSYmcjxuOyllPWVbRGUodFtyKytdKV07cmV0dXJuIHImJnI9PW4/ZTp2b2lkIDB9ZnVuY3Rpb24gZ2UoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmdCBpbiBPYmplY3QoZSl9ZnVuY3Rpb24gdmUoZSx0LHIsdSxjKXtyZXR1cm4gZT09PXR8fChudWxsPT1lfHxudWxsPT10fHwhJGUoZSkmJiFWZSh0KT9lIT1lJiZ0IT10OmZ1bmN0aW9uKGUsdCxyLHUsYyxzKXt2YXIgbD1MZShlKSxmPUxlKHQpLGQ9XCJbb2JqZWN0IEFycmF5XVwiLHA9XCJbb2JqZWN0IEFycmF5XVwiO2x8fChkPShkPU9lKGUpKT09bj9vOmQpO2Z8fChwPShwPU9lKHQpKT09bj9vOnApO3ZhciBoPWQ9PW8mJiFOKGUpLG09cD09byYmIU4odCkseT1kPT1wO2lmKHkmJiFoKXJldHVybiBzfHwocz1uZXcgbGUpLGx8fFVlKGUpP2plKGUsdCxyLHUsYyxzKTpmdW5jdGlvbihlLHQscixuLG8sdSxjKXtzd2l0Y2gocil7Y2FzZVwiW29iamVjdCBEYXRhVmlld11cIjppZihlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8ZS5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpcmV0dXJuITE7ZT1lLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2VcIltvYmplY3QgQXJyYXlCdWZmZXJdXCI6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IW4obmV3ICQoZSksbmV3ICQodCkpKTtjYXNlXCJbb2JqZWN0IEJvb2xlYW5dXCI6Y2FzZVwiW29iamVjdCBEYXRlXVwiOmNhc2VcIltvYmplY3QgTnVtYmVyXVwiOnJldHVybiBNZSgrZSwrdCk7Y2FzZVwiW29iamVjdCBFcnJvcl1cIjpyZXR1cm4gZS5uYW1lPT10Lm5hbWUmJmUubWVzc2FnZT09dC5tZXNzYWdlO2Nhc2VcIltvYmplY3QgUmVnRXhwXVwiOmNhc2VcIltvYmplY3QgU3RyaW5nXVwiOnJldHVybiBlPT10K1wiXCI7Y2FzZSBhOnZhciBzPU87Y2FzZSBpOnZhciBsPTImdTtpZihzfHwocz1rKSxlLnNpemUhPXQuc2l6ZSYmIWwpcmV0dXJuITE7dmFyIGY9Yy5nZXQoZSk7aWYoZilyZXR1cm4gZj09dDt1fD0xLGMuc2V0KGUsdCk7dmFyIGQ9amUocyhlKSxzKHQpLG4sbyx1LGMpO3JldHVybiBjLmRlbGV0ZShlKSxkO2Nhc2VcIltvYmplY3QgU3ltYm9sXVwiOmlmKGFlKXJldHVybiBhZS5jYWxsKGUpPT1hZS5jYWxsKHQpfXJldHVybiExfShlLHQsZCxyLHUsYyxzKTtpZighKDImYykpe3ZhciBiPWgmJkwuY2FsbChlLFwiX193cmFwcGVkX19cIiksZz1tJiZMLmNhbGwodCxcIl9fd3JhcHBlZF9fXCIpO2lmKGJ8fGcpe3ZhciB2PWI/ZS52YWx1ZSgpOmUsQz1nP3QudmFsdWUoKTp0O3JldHVybiBzfHwocz1uZXcgbGUpLHIodixDLHUsYyxzKX19aWYoIXkpcmV0dXJuITE7cmV0dXJuIHN8fChzPW5ldyBsZSksZnVuY3Rpb24oZSx0LHIsbixhLG8pe3ZhciBpPTImYSx1PXFlKGUpLGM9dS5sZW5ndGgscz1xZSh0KS5sZW5ndGg7aWYoYyE9cyYmIWkpcmV0dXJuITE7dmFyIGw9Yztmb3IoO2wtLTspe3ZhciBmPXVbbF07aWYoIShpP2YgaW4gdDpMLmNhbGwodCxmKSkpcmV0dXJuITF9dmFyIGQ9by5nZXQoZSk7aWYoZCYmby5nZXQodCkpcmV0dXJuIGQ9PXQ7dmFyIHA9ITA7by5zZXQoZSx0KSxvLnNldCh0LGUpO3ZhciBoPWk7Zm9yKDsrK2w8Yzspe2Y9dVtsXTt2YXIgbT1lW2ZdLHk9dFtmXTtpZihuKXZhciBiPWk/bih5LG0sZix0LGUsbyk6bihtLHksZixlLHQsbyk7aWYoISh2b2lkIDA9PT1iP209PT15fHxyKG0seSxuLGEsbyk6Yikpe3A9ITE7YnJlYWt9aHx8KGg9XCJjb25zdHJ1Y3RvclwiPT1mKX1pZihwJiYhaCl7dmFyIGc9ZS5jb25zdHJ1Y3Rvcix2PXQuY29uc3RydWN0b3I7Zz09dnx8IShcImNvbnN0cnVjdG9yXCJpbiBlKXx8IShcImNvbnN0cnVjdG9yXCJpbiB0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZyYmZyBpbnN0YW5jZW9mIGcmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHYmJnYgaW5zdGFuY2VvZiB2fHwocD0hMSl9cmV0dXJuIG8uZGVsZXRlKGUpLG8uZGVsZXRlKHQpLHB9KGUsdCxyLHUsYyxzKX0oZSx0LHZlLHIsdSxjKSl9ZnVuY3Rpb24gQ2UoZSl7cmV0dXJuISghJGUoZSl8fGZ1bmN0aW9uKGUpe3JldHVybiEhTSYmTSBpbiBlfShlKSkmJihCZShlKXx8TihlKT9COmQpLnRlc3QoUGUoZSkpfWZ1bmN0aW9uIF9lKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpudWxsPT1lP0hlOlwib2JqZWN0XCI9PXR5cGVvZiBlP0xlKGUpP2Z1bmN0aW9uKGUsdCl7aWYoRWUoZSkmJlRlKHQpKXJldHVybiBJZShEZShlKSx0KTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPW51bGw9PWU/dm9pZCAwOmJlKGUsdCk7cmV0dXJuIHZvaWQgMD09PW4/cjpufShyLGUpO3JldHVybiB2b2lkIDA9PT1uJiZuPT09dD9mdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT1lJiZmdW5jdGlvbihlLHQscil7dD1FZSh0LGUpP1t0XTpTZSh0KTt2YXIgbixhPS0xLG89dC5sZW5ndGg7Zm9yKDsrK2E8bzspe3ZhciBpPURlKHRbYV0pO2lmKCEobj1udWxsIT1lJiZyKGUsaSkpKWJyZWFrO2U9ZVtpXX1pZihuKXJldHVybiBuO3JldHVybiEhKG89ZT9lLmxlbmd0aDowKSYmR2UobykmJmtlKGksbykmJihMZShlKXx8UmUoZSkpfShlLHQsZ2UpfShyLGUpOnZlKHQsbix2b2lkIDAsMyl9fShlWzBdLGVbMV0pOmZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUpe3ZhciB0PXFlKGUpLHI9dC5sZW5ndGg7Zm9yKDtyLS07KXt2YXIgbj10W3JdLGE9ZVtuXTt0W3JdPVtuLGEsVGUoYSldfXJldHVybiB0fShlKTtpZigxPT10Lmxlbmd0aCYmdFswXVsyXSlyZXR1cm4gSWUodFswXVswXSx0WzBdWzFdKTtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHI9PT1lfHxmdW5jdGlvbihlLHQscixuKXt2YXIgYT1yLmxlbmd0aCxvPWEsaT0hbjtpZihudWxsPT1lKXJldHVybiFvO2ZvcihlPU9iamVjdChlKTthLS07KXt2YXIgdT1yW2FdO2lmKGkmJnVbMl0/dVsxXSE9PWVbdVswXV06ISh1WzBdaW4gZSkpcmV0dXJuITF9Zm9yKDsrK2E8bzspe3ZhciBjPSh1PXJbYV0pWzBdLHM9ZVtjXSxsPXVbMV07aWYoaSYmdVsyXSl7aWYodm9pZCAwPT09cyYmIShjIGluIGUpKXJldHVybiExfWVsc2V7dmFyIGY9bmV3IGxlO2lmKG4pdmFyIGQ9bihzLGwsYyxlLHQsZik7aWYoISh2b2lkIDA9PT1kP3ZlKGwscyxuLDMsZik6ZCkpcmV0dXJuITF9fXJldHVybiEwfShyLGUsdCl9fShlKTpFZSh0PWUpPyhyPURlKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3JdfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBiZSh0LGUpfX0odCk7dmFyIHQscn1mdW5jdGlvbiB3ZShlKXtpZihyPSh0PWUpJiZ0LmNvbnN0cnVjdG9yLG49XCJmdW5jdGlvblwiPT10eXBlb2YgciYmci5wcm90b3R5cGV8fFAsdCE9PW4pcmV0dXJuIFUoZSk7dmFyIHQscixuLGE9W107Zm9yKHZhciBvIGluIE9iamVjdChlKSlMLmNhbGwoZSxvKSYmXCJjb25zdHJ1Y3RvclwiIT1vJiZhLnB1c2gobyk7cmV0dXJuIGF9ZnVuY3Rpb24gU2UoZSl7cmV0dXJuIExlKGUpP2U6QWUoZSl9ZnVuY3Rpb24gamUoZSx0LHIsbixhLG8pe3ZhciBpPTImYSx1PWUubGVuZ3RoLGM9dC5sZW5ndGg7aWYodSE9YyYmIShpJiZjPnUpKXJldHVybiExO3ZhciBzPW8uZ2V0KGUpO2lmKHMmJm8uZ2V0KHQpKXJldHVybiBzPT10O3ZhciBsPS0xLGY9ITAsZD0xJmE/bmV3IHNlOnZvaWQgMDtmb3Ioby5zZXQoZSx0KSxvLnNldCh0LGUpOysrbDx1Oyl7dmFyIHA9ZVtsXSxoPXRbbF07aWYobil2YXIgbT1pP24oaCxwLGwsdCxlLG8pOm4ocCxoLGwsZSx0LG8pO2lmKHZvaWQgMCE9PW0pe2lmKG0pY29udGludWU7Zj0hMTticmVha31pZihkKXtpZighaih0LChmdW5jdGlvbihlLHQpe2lmKCFkLmhhcyh0KSYmKHA9PT1lfHxyKHAsZSxuLGEsbykpKXJldHVybiBkLmFkZCh0KX0pKSl7Zj0hMTticmVha319ZWxzZSBpZihwIT09aCYmIXIocCxoLG4sYSxvKSl7Zj0hMTticmVha319cmV0dXJuIG8uZGVsZXRlKGUpLG8uZGVsZXRlKHQpLGZ9ZnVuY3Rpb24geGUoZSx0KXt2YXIgcixuLGE9ZS5fX2RhdGFfXztyZXR1cm4oXCJzdHJpbmdcIj09KG49dHlwZW9mKHI9dCkpfHxcIm51bWJlclwiPT1ufHxcInN5bWJvbFwiPT1ufHxcImJvb2xlYW5cIj09bj9cIl9fcHJvdG9fX1wiIT09cjpudWxsPT09cik/YVtcInN0cmluZ1wiPT10eXBlb2YgdD9cInN0cmluZ1wiOlwiaGFzaFwiXTphLm1hcH1mdW5jdGlvbiBOZShlLHQpe3ZhciByPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmVbdF19KGUsdCk7cmV0dXJuIENlKHIpP3I6dm9pZCAwfXZhciBPZT1mdW5jdGlvbihlKXtyZXR1cm4gei5jYWxsKGUpfTtmdW5jdGlvbiBrZShlLHQpe3JldHVybiEhKHQ9bnVsbD09dD85MDA3MTk5MjU0NzQwOTkxOnQpJiYoXCJudW1iZXJcIj09dHlwZW9mIGV8fHAudGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fWZ1bmN0aW9uIEVlKGUsdCl7aWYoTGUoZSkpcmV0dXJuITE7dmFyIHI9dHlwZW9mIGU7cmV0dXJuIShcIm51bWJlclwiIT1yJiZcInN5bWJvbFwiIT1yJiZcImJvb2xlYW5cIiE9ciYmbnVsbCE9ZSYmIUtlKGUpKXx8KGMudGVzdChlKXx8IXUudGVzdChlKXx8bnVsbCE9dCYmZSBpbiBPYmplY3QodCkpfWZ1bmN0aW9uIFRlKGUpe3JldHVybiBlPT1lJiYhJGUoZSl9ZnVuY3Rpb24gSWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIG51bGwhPXImJihyW2VdPT09dCYmKHZvaWQgMCE9PXR8fGUgaW4gT2JqZWN0KHIpKSl9fShxJiZcIltvYmplY3QgRGF0YVZpZXddXCIhPU9lKG5ldyBxKG5ldyBBcnJheUJ1ZmZlcigxKSkpfHxIJiZPZShuZXcgSCkhPWF8fFcmJlwiW29iamVjdCBQcm9taXNlXVwiIT1PZShXLnJlc29sdmUoKSl8fEomJk9lKG5ldyBKKSE9aXx8WiYmXCJbb2JqZWN0IFdlYWtNYXBdXCIhPU9lKG5ldyBaKSkmJihPZT1mdW5jdGlvbihlKXt2YXIgdD16LmNhbGwoZSkscj10PT1vP2UuY29uc3RydWN0b3I6dm9pZCAwLG49cj9QZShyKTp2b2lkIDA7aWYobilzd2l0Y2gobil7Y2FzZSBZOnJldHVyblwiW29iamVjdCBEYXRhVmlld11cIjtjYXNlIFg6cmV0dXJuIGE7Y2FzZSBlZTpyZXR1cm5cIltvYmplY3QgUHJvbWlzZV1cIjtjYXNlIHRlOnJldHVybiBpO2Nhc2UgcmU6cmV0dXJuXCJbb2JqZWN0IFdlYWtNYXBdXCJ9cmV0dXJuIHR9KTt2YXIgQWU9RmUoKGZ1bmN0aW9uKGUpe3ZhciB0O2U9bnVsbD09KHQ9ZSk/XCJcIjpmdW5jdGlvbihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gZTtpZihLZShlKSlyZXR1cm4gb2U/b2UuY2FsbChlKTpcIlwiO3ZhciB0PWUrXCJcIjtyZXR1cm5cIjBcIj09dCYmMS9lPT0tMS8wP1wiLTBcIjp0fSh0KTt2YXIgcj1bXTtyZXR1cm4gcy50ZXN0KGUpJiZyLnB1c2goXCJcIiksZS5yZXBsYWNlKGwsKGZ1bmN0aW9uKGUsdCxuLGEpe3IucHVzaChuP2EucmVwbGFjZShmLFwiJDFcIik6dHx8ZSl9KSkscn0pKTtmdW5jdGlvbiBEZShlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZXx8S2UoZSkpcmV0dXJuIGU7dmFyIHQ9ZStcIlwiO3JldHVyblwiMFwiPT10JiYxL2U9PS0xLzA/XCItMFwiOnR9ZnVuY3Rpb24gUGUoZSl7aWYobnVsbCE9ZSl7dHJ5e3JldHVybiBSLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZStcIlwifWNhdGNoKGUpe319cmV0dXJuXCJcIn1mdW5jdGlvbiBGZShlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGV8fHQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgZnVuY3Rpb25cIik7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHMsYT10P3QuYXBwbHkodGhpcyxuKTpuWzBdLG89ci5jYWNoZTtpZihvLmhhcyhhKSlyZXR1cm4gby5nZXQoYSk7dmFyIGk9ZS5hcHBseSh0aGlzLG4pO3JldHVybiByLmNhY2hlPW8uc2V0KGEsaSksaX07cmV0dXJuIHIuY2FjaGU9bmV3KEZlLkNhY2hlfHxjZSkscn1mdW5jdGlvbiBNZShlLHQpe3JldHVybiBlPT09dHx8ZSE9ZSYmdCE9dH1mdW5jdGlvbiBSZShlKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFZlKGUpJiZ6ZShlKX0oZSkmJkwuY2FsbChlLFwiY2FsbGVlXCIpJiYoIVYuY2FsbChlLFwiY2FsbGVlXCIpfHx6LmNhbGwoZSk9PW4pfUZlLkNhY2hlPWNlO3ZhciBMZT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIHplKGUpe3JldHVybiBudWxsIT1lJiZHZShlLmxlbmd0aCkmJiFCZShlKX1mdW5jdGlvbiBCZShlKXt2YXIgdD0kZShlKT96LmNhbGwoZSk6XCJcIjtyZXR1cm5cIltvYmplY3QgRnVuY3Rpb25dXCI9PXR8fFwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIj09dH1mdW5jdGlvbiBHZShlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmZT4tMSYmZSUxPT0wJiZlPD05MDA3MTk5MjU0NzQwOTkxfWZ1bmN0aW9uICRlKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiEhZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9ZnVuY3Rpb24gVmUoZSl7cmV0dXJuISFlJiZcIm9iamVjdFwiPT10eXBlb2YgZX1mdW5jdGlvbiBLZShlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZXx8VmUoZSkmJlwiW29iamVjdCBTeW1ib2xdXCI9PXouY2FsbChlKX12YXIgVWU9dz9mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9fSh3KTpmdW5jdGlvbihlKXtyZXR1cm4gVmUoZSkmJkdlKGUubGVuZ3RoKSYmISFoW3ouY2FsbChlKV19O2Z1bmN0aW9uIHFlKGUpe3JldHVybiB6ZShlKT9mZShlKTp3ZShlKX1mdW5jdGlvbiBIZShlKXtyZXR1cm4gZX1yLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPUxlKGUpP1M6eCxhPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gbihlLF9lKHQpLHIsYSxtZSl9fSkuY2FsbCh0aGlzLHIoMykscig3KShlKSl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlLndlYnBhY2tQb2x5ZmlsbHx8KGUuZGVwcmVjYXRlPWZ1bmN0aW9uKCl7fSxlLnBhdGhzPVtdLGUuY2hpbGRyZW58fChlLmNoaWxkcmVuPVtdKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImxvYWRlZFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLmx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJpZFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLml9fSksZS53ZWJwYWNrUG9seWZpbGw9MSksZX19LGZ1bmN0aW9uKGUsdCl7U3RyaW5nLnByb3RvdHlwZS5wYWRFbmR8fChTdHJpbmcucHJvdG90eXBlLnBhZEVuZD1mdW5jdGlvbihlLHQpe3JldHVybiBlPj49MCx0PVN0cmluZyh2b2lkIDAhPT10P3Q6XCIgXCIpLHRoaXMubGVuZ3RoPmU/U3RyaW5nKHRoaXMpOigoZS09dGhpcy5sZW5ndGgpPnQubGVuZ3RoJiYodCs9dC5yZXBlYXQoZS90Lmxlbmd0aCkpLFN0cmluZyh0aGlzKSt0LnNsaWNlKDAsZSkpfSl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBhKGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fFwiW29iamVjdCBBcmd1bWVudHNdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIEFycmF5LmZyb20oZSl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PTAscj1uZXcgQXJyYXkoZS5sZW5ndGgpO3Q8ZS5sZW5ndGg7dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn19KGUpfHxhKGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKX0oKX1mdW5jdGlvbiBpKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9ZnVuY3Rpb24gdSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpfWZ1bmN0aW9uIGMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIGwoZSl7cmV0dXJuKGw9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuKGY9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT09bChTeW1ib2wuaXRlcmF0b3IpP2Z1bmN0aW9uKGUpe3JldHVybiBsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOmwoZSl9KShlKX1mdW5jdGlvbiBkKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiBlfWZ1bmN0aW9uIHAoZSl7cmV0dXJuKHA9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4oaD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9ci5yKHQpO3ZhciBtPXIoMCkseT1yLm4obSksYj1yKDUpLGc9ci5uKGIpLHY9cig0KSxDPXIubih2KSxfPXIoNiksdz1yLm4oXyksUz1yKDIpLGo9ci5uKFMpLHg9cigxKSxOPXIubih4KTtyKDgpO2Z1bmN0aW9uIE8oZSx0KXtyZXR1cm4gaShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1bXSxuPSEwLGE9ITEsbz12b2lkIDA7dHJ5e2Zvcih2YXIgaSx1PWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0oaT11Lm5leHQoKSkuZG9uZSkmJihyLnB1c2goaS52YWx1ZSksIXR8fHIubGVuZ3RoIT09dCk7bj0hMCk7fWNhdGNoKGUpe2E9ITAsbz1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXUucmV0dXJufHx1LnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBvfX1yZXR1cm4gcn0oZSx0KXx8dSgpfXZhciBrPVtbXCJBZmdoYW5pc3RhblwiLFtcImFzaWFcIl0sXCJhZlwiLFwiOTNcIl0sW1wiQWxiYW5pYVwiLFtcImV1cm9wZVwiXSxcImFsXCIsXCIzNTVcIl0sW1wiQWxnZXJpYVwiLFtcImFmcmljYVwiLFwibm9ydGgtYWZyaWNhXCJdLFwiZHpcIixcIjIxM1wiXSxbXCJBbmRvcnJhXCIsW1wiZXVyb3BlXCJdLFwiYWRcIixcIjM3NlwiXSxbXCJBbmdvbGFcIixbXCJhZnJpY2FcIl0sXCJhb1wiLFwiMjQ0XCJdLFtcIkFudGlndWEgYW5kIEJhcmJ1ZGFcIixbXCJhbWVyaWNhXCIsXCJjYXJyaWJlYW5cIl0sXCJhZ1wiLFwiMTI2OFwiXSxbXCJBcmdlbnRpbmFcIixbXCJhbWVyaWNhXCIsXCJzb3V0aC1hbWVyaWNhXCJdLFwiYXJcIixcIjU0XCIsXCIoLi4pIC4uLi4uLi4uXCIsMCxbXCIxMVwiLFwiMjIxXCIsXCIyMjNcIixcIjI2MVwiLFwiMjY0XCIsXCIyNjUyXCIsXCIyODBcIixcIjI5MDVcIixcIjI5MVwiLFwiMjkyMFwiLFwiMjk2NlwiLFwiMjk5XCIsXCIzNDFcIixcIjM0MlwiLFwiMzQzXCIsXCIzNTFcIixcIjM3NlwiLFwiMzc5XCIsXCIzODFcIixcIjM4MzNcIixcIjM4NVwiLFwiMzg3XCIsXCIzODhcIl1dLFtcIkFybWVuaWFcIixbXCJhc2lhXCIsXCJleC11c3NyXCJdLFwiYW1cIixcIjM3NFwiLFwiLi4gLi4uLi4uXCJdLFtcIkFydWJhXCIsW1wiYW1lcmljYVwiLFwiY2FycmliZWFuXCJdLFwiYXdcIixcIjI5N1wiXSxbXCJBdXN0cmFsaWFcIixbXCJvY2VhbmlhXCJdLFwiYXVcIixcIjYxXCIsXCIoLi4pIC4uLi4gLi4uLlwiLDAsW1wiMlwiLFwiM1wiLFwiNFwiLFwiN1wiLFwiOFwiLFwiMDJcIixcIjAzXCIsXCIwNFwiLFwiMDdcIixcIjA4XCJdXSxbXCJBdXN0cmlhXCIsW1wiZXVyb3BlXCIsXCJldS11bmlvblwiXSxcImF0XCIsXCI0M1wiXSxbXCJBemVyYmFpamFuXCIsW1wiYXNpYVwiLFwiZXgtdXNzclwiXSxcImF6XCIsXCI5OTRcIixcIiguLikgLi4uIC4uIC4uXCJdLFtcIkJhaGFtYXNcIixbXCJhbWVyaWNhXCIsXCJjYXJyaWJlYW5cIl0sXCJic1wiLFwiMTI0MlwiXSxbXCJCYWhyYWluXCIsW1wibWlkZGxlLWVhc3RcIl0sXCJiaFwiLFwiOTczXCJdLFtcIkJhbmdsYWRlc2hcIixbXCJhc2lhXCJdLFwiYmRcIixcIjg4MFwiXSxbXCJCYXJiYWRvc1wiLFtcImFtZXJpY2FcIixcImNhcnJpYmVhblwiXSxcImJiXCIsXCIxMjQ2XCJdLFtcIkJlbGFydXNcIixbXCJldXJvcGVcIixcImV4LXVzc3JcIl0sXCJieVwiLFwiMzc1XCIsXCIoLi4pIC4uLiAuLiAuLlwiXSxbXCJCZWxnaXVtXCIsW1wiZXVyb3BlXCIsXCJldS11bmlvblwiXSxcImJlXCIsXCIzMlwiLFwiLi4uIC4uIC4uIC4uXCJdLFtcIkJlbGl6ZVwiLFtcImFtZXJpY2FcIixcImNlbnRyYWwtYW1lcmljYVwiXSxcImJ6XCIsXCI1MDFcIl0sW1wiQmVuaW5cIixbXCJhZnJpY2FcIl0sXCJialwiLFwiMjI5XCJdLFtcIkJodXRhblwiLFtcImFzaWFcIl0sXCJidFwiLFwiOTc1XCJdLFtcIkJvbGl2aWFcIixbXCJhbWVyaWNhXCIsXCJzb3V0aC1hbWVyaWNhXCJdLFwiYm9cIixcIjU5MVwiXSxbXCJCb3NuaWEgYW5kIEhlcnplZ292aW5hXCIsW1wiZXVyb3BlXCIsXCJleC15dWdvc1wiXSxcImJhXCIsXCIzODdcIl0sW1wiQm90c3dhbmFcIixbXCJhZnJpY2FcIl0sXCJid1wiLFwiMjY3XCJdLFtcIkJyYXppbFwiLFtcImFtZXJpY2FcIixcInNvdXRoLWFtZXJpY2FcIl0sXCJiclwiLFwiNTVcIixcIiguLikgLi4uLi4uLi4uXCJdLFtcIkJyaXRpc2ggSW5kaWFuIE9jZWFuIFRlcnJpdG9yeVwiLFtcImFzaWFcIl0sXCJpb1wiLFwiMjQ2XCJdLFtcIkJydW5laVwiLFtcImFzaWFcIl0sXCJiblwiLFwiNjczXCJdLFtcIkJ1bGdhcmlhXCIsW1wiZXVyb3BlXCIsXCJldS11bmlvblwiXSxcImJnXCIsXCIzNTlcIl0sW1wiQnVya2luYSBGYXNvXCIsW1wiYWZyaWNhXCJdLFwiYmZcIixcIjIyNlwiXSxbXCJCdXJ1bmRpXCIsW1wiYWZyaWNhXCJdLFwiYmlcIixcIjI1N1wiXSxbXCJDYW1ib2RpYVwiLFtcImFzaWFcIl0sXCJraFwiLFwiODU1XCJdLFtcIkNhbWVyb29uXCIsW1wiYWZyaWNhXCJdLFwiY21cIixcIjIzN1wiXSxbXCJDYW5hZGFcIixbXCJhbWVyaWNhXCIsXCJub3J0aC1hbWVyaWNhXCJdLFwiY2FcIixcIjFcIixcIiguLi4pIC4uLi0uLi4uXCIsMSxbXCIyMDRcIixcIjIyNlwiLFwiMjM2XCIsXCIyNDlcIixcIjI1MFwiLFwiMjg5XCIsXCIzMDZcIixcIjM0M1wiLFwiMzY1XCIsXCIzODdcIixcIjQwM1wiLFwiNDE2XCIsXCI0MThcIixcIjQzMVwiLFwiNDM3XCIsXCI0MzhcIixcIjQ1MFwiLFwiNTA2XCIsXCI1MTRcIixcIjUxOVwiLFwiNTQ4XCIsXCI1NzlcIixcIjU4MVwiLFwiNTg3XCIsXCI2MDRcIixcIjYxM1wiLFwiNjM5XCIsXCI2NDdcIixcIjY3MlwiLFwiNzA1XCIsXCI3MDlcIixcIjc0MlwiLFwiNzc4XCIsXCI3ODBcIixcIjc4MlwiLFwiODA3XCIsXCI4MTlcIixcIjgyNVwiLFwiODY3XCIsXCI4NzNcIixcIjkwMlwiLFwiOTA1XCJdXSxbXCJDYXBlIFZlcmRlXCIsW1wiYWZyaWNhXCJdLFwiY3ZcIixcIjIzOFwiXSxbXCJDYXJpYmJlYW4gTmV0aGVybGFuZHNcIixbXCJhbWVyaWNhXCIsXCJjYXJyaWJlYW5cIl0sXCJicVwiLFwiNTk5XCIsXCJcIiwxXSxbXCJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWNcIixbXCJhZnJpY2FcIl0sXCJjZlwiLFwiMjM2XCJdLFtcIkNoYWRcIixbXCJhZnJpY2FcIl0sXCJ0ZFwiLFwiMjM1XCJdLFtcIkNoaWxlXCIsW1wiYW1lcmljYVwiLFwic291dGgtYW1lcmljYVwiXSxcImNsXCIsXCI1NlwiXSxbXCJDaGluYVwiLFtcImFzaWFcIl0sXCJjblwiLFwiODZcIixcIi4uLS4uLi4uLi4uLlwiXSxbXCJDb2xvbWJpYVwiLFtcImFtZXJpY2FcIixcInNvdXRoLWFtZXJpY2FcIl0sXCJjb1wiLFwiNTdcIixcIi4uLiAuLi4gLi4uLlwiXSxbXCJDb21vcm9zXCIsW1wiYWZyaWNhXCJdLFwia21cIixcIjI2OVwiXSxbXCJDb25nb1wiLFtcImFmcmljYVwiXSxcImNkXCIsXCIyNDNcIl0sW1wiQ29uZ29cIixbXCJhZnJpY2FcIl0sXCJjZ1wiLFwiMjQyXCJdLFtcIkNvc3RhIFJpY2FcIixbXCJhbWVyaWNhXCIsXCJjZW50cmFsLWFtZXJpY2FcIl0sXCJjclwiLFwiNTA2XCIsXCIuLi4uLS4uLi5cIl0sW1wiQ8O0dGUgZOKAmUl2b2lyZVwiLFtcImFmcmljYVwiXSxcImNpXCIsXCIyMjVcIixcIi4uIC4uIC4uIC4uXCJdLFtcIkNyb2F0aWFcIixbXCJldXJvcGVcIixcImV1LXVuaW9uXCIsXCJleC15dWdvc1wiXSxcImhyXCIsXCIzODVcIl0sW1wiQ3ViYVwiLFtcImFtZXJpY2FcIixcImNhcnJpYmVhblwiXSxcImN1XCIsXCI1M1wiXSxbXCJDdXJhw6dhb1wiLFtcImFtZXJpY2FcIixcImNhcnJpYmVhblwiXSxcImN3XCIsXCI1OTlcIixcIlwiLDBdLFtcIkN5cHJ1c1wiLFtcImV1cm9wZVwiLFwiZXUtdW5pb25cIl0sXCJjeVwiLFwiMzU3XCIsXCIuLiAuLi4uLi5cIl0sW1wiQ3plY2ggUmVwdWJsaWNcIixbXCJldXJvcGVcIixcImV1LXVuaW9uXCJdLFwiY3pcIixcIjQyMFwiLFwiLi4uIC4uLiAuLi5cIl0sW1wiRGVubWFya1wiLFtcImV1cm9wZVwiLFwiZXUtdW5pb25cIixcImJhbHRpY1wiXSxcImRrXCIsXCI0NVwiLFwiLi4gLi4gLi4gLi5cIl0sW1wiRGppYm91dGlcIixbXCJhZnJpY2FcIl0sXCJkalwiLFwiMjUzXCJdLFtcIkRvbWluaWNhXCIsW1wiYW1lcmljYVwiLFwiY2FycmliZWFuXCJdLFwiZG1cIixcIjE3NjdcIl0sW1wiRG9taW5pY2FuIFJlcHVibGljXCIsW1wiYW1lcmljYVwiLFwiY2FycmliZWFuXCJdLFwiZG9cIixcIjFcIixcIlwiLDIsW1wiODA5XCIsXCI4MjlcIixcIjg0OVwiXV0sW1wiRWN1YWRvclwiLFtcImFtZXJpY2FcIixcInNvdXRoLWFtZXJpY2FcIl0sXCJlY1wiLFwiNTkzXCJdLFtcIkVneXB0XCIsW1wiYWZyaWNhXCIsXCJub3J0aC1hZnJpY2FcIl0sXCJlZ1wiLFwiMjBcIl0sW1wiRWwgU2FsdmFkb3JcIixbXCJhbWVyaWNhXCIsXCJjZW50cmFsLWFtZXJpY2FcIl0sXCJzdlwiLFwiNTAzXCIsXCIuLi4uLS4uLi5cIl0sW1wiRXF1YXRvcmlhbCBHdWluZWFcIixbXCJhZnJpY2FcIl0sXCJncVwiLFwiMjQwXCJdLFtcIkVyaXRyZWFcIixbXCJhZnJpY2FcIl0sXCJlclwiLFwiMjkxXCJdLFtcIkVzdG9uaWFcIixbXCJldXJvcGVcIixcImV1LXVuaW9uXCIsXCJleC11c3NyXCIsXCJiYWx0aWNcIl0sXCJlZVwiLFwiMzcyXCIsXCIuLi4uIC4uLi4uLlwiXSxbXCJFdGhpb3BpYVwiLFtcImFmcmljYVwiXSxcImV0XCIsXCIyNTFcIl0sW1wiRmlqaVwiLFtcIm9jZWFuaWFcIl0sXCJmalwiLFwiNjc5XCJdLFtcIkZpbmxhbmRcIixbXCJldXJvcGVcIixcImV1LXVuaW9uXCIsXCJiYWx0aWNcIl0sXCJmaVwiLFwiMzU4XCIsXCIuLiAuLi4gLi4gLi5cIl0sW1wiRnJhbmNlXCIsW1wiZXVyb3BlXCIsXCJldS11bmlvblwiXSxcImZyXCIsXCIzM1wiLFwiLiAuLiAuLiAuLiAuLlwiXSxbXCJGcmVuY2ggR3VpYW5hXCIsW1wiYW1lcmljYVwiLFwic291dGgtYW1lcmljYVwiXSxcImdmXCIsXCI1OTRcIl0sW1wiRnJlbmNoIFBvbHluZXNpYVwiLFtcIm9jZWFuaWFcIl0sXCJwZlwiLFwiNjg5XCJdLFtcIkdhYm9uXCIsW1wiYWZyaWNhXCJdLFwiZ2FcIixcIjI0MVwiXSxbXCJHYW1iaWFcIixbXCJhZnJpY2FcIl0sXCJnbVwiLFwiMjIwXCJdLFtcIkdlb3JnaWFcIixbXCJhc2lhXCIsXCJleC11c3NyXCJdLFwiZ2VcIixcIjk5NVwiXSxbXCJHZXJtYW55XCIsW1wiZXVyb3BlXCIsXCJldS11bmlvblwiLFwiYmFsdGljXCJdLFwiZGVcIixcIjQ5XCIsXCIuLi4uIC4uLi4uLi4uXCJdLFtcIkdoYW5hXCIsW1wiYWZyaWNhXCJdLFwiZ2hcIixcIjIzM1wiXSxbXCJHcmVlY2VcIixbXCJldXJvcGVcIixcImV1LXVuaW9uXCJdLFwiZ3JcIixcIjMwXCJdLFtcIkdyZW5hZGFcIixbXCJhbWVyaWNhXCIsXCJjYXJyaWJlYW5cIl0sXCJnZFwiLFwiMTQ3M1wiXSxbXCJHdWFkZWxvdXBlXCIsW1wiYW1lcmljYVwiLFwiY2FycmliZWFuXCJdLFwiZ3BcIixcIjU5MFwiLFwiXCIsMF0sW1wiR3VhbVwiLFtcIm9jZWFuaWFcIl0sXCJndVwiLFwiMTY3MVwiXSxbXCJHdWF0ZW1hbGFcIixbXCJhbWVyaWNhXCIsXCJjZW50cmFsLWFtZXJpY2FcIl0sXCJndFwiLFwiNTAyXCIsXCIuLi4uLS4uLi5cIl0sW1wiR3VpbmVhXCIsW1wiYWZyaWNhXCJdLFwiZ25cIixcIjIyNFwiXSxbXCJHdWluZWEtQmlzc2F1XCIsW1wiYWZyaWNhXCJdLFwiZ3dcIixcIjI0NVwiXSxbXCJHdXlhbmFcIixbXCJhbWVyaWNhXCIsXCJzb3V0aC1hbWVyaWNhXCJdLFwiZ3lcIixcIjU5MlwiXSxbXCJIYWl0aVwiLFtcImFtZXJpY2FcIixcImNhcnJpYmVhblwiXSxcImh0XCIsXCI1MDlcIixcIi4uLi4tLi4uLlwiXSxbXCJIb25kdXJhc1wiLFtcImFtZXJpY2FcIixcImNlbnRyYWwtYW1lcmljYVwiXSxcImhuXCIsXCI1MDRcIl0sW1wiSG9uZyBLb25nXCIsW1wiYXNpYVwiXSxcImhrXCIsXCI4NTJcIixcIi4uLi4gLi4uLlwiXSxbXCJIdW5nYXJ5XCIsW1wiZXVyb3BlXCIsXCJldS11bmlvblwiXSxcImh1XCIsXCIzNlwiXSxbXCJJY2VsYW5kXCIsW1wiZXVyb3BlXCJdLFwiaXNcIixcIjM1NFwiLFwiLi4uIC4uLi5cIl0sW1wiSW5kaWFcIixbXCJhc2lhXCJdLFwiaW5cIixcIjkxXCIsXCIuLi4uLi0uLi4uLlwiXSxbXCJJbmRvbmVzaWFcIixbXCJhc2lhXCJdLFwiaWRcIixcIjYyXCJdLFtcIklyYW5cIixbXCJtaWRkbGUtZWFzdFwiXSxcImlyXCIsXCI5OFwiLFwiLi4uIC4uLiAuLi4uXCJdLFtcIklyYXFcIixbXCJtaWRkbGUtZWFzdFwiXSxcImlxXCIsXCI5NjRcIl0sW1wiSXJlbGFuZFwiLFtcImV1cm9wZVwiLFwiZXUtdW5pb25cIl0sXCJpZVwiLFwiMzUzXCIsXCIuLiAuLi4uLi4uXCJdLFtcIklzcmFlbFwiLFtcIm1pZGRsZS1lYXN0XCJdLFwiaWxcIixcIjk3MlwiLFwiLi4uIC4uLiAuLi4uXCJdLFtcIkl0YWx5XCIsW1wiZXVyb3BlXCIsXCJldS11bmlvblwiXSxcIml0XCIsXCIzOVwiLFwiLi4uIC4uLi4uLi5cIiwwXSxbXCJKYW1haWNhXCIsW1wiYW1lcmljYVwiLFwiY2FycmliZWFuXCJdLFwiam1cIixcIjE4NzZcIl0sW1wiSmFwYW5cIixbXCJhc2lhXCJdLFwianBcIixcIjgxXCIsXCIuLiAuLi4uIC4uLi5cIl0sW1wiSm9yZGFuXCIsW1wibWlkZGxlLWVhc3RcIl0sXCJqb1wiLFwiOTYyXCJdLFtcIkthemFraHN0YW5cIixbXCJhc2lhXCIsXCJleC11c3NyXCJdLFwia3pcIixcIjdcIixcIi4uLiAuLi4tLi4tLi5cIiwxLFtcIjMxMFwiLFwiMzExXCIsXCIzMTJcIixcIjMxM1wiLFwiMzE1XCIsXCIzMThcIixcIjMyMVwiLFwiMzI0XCIsXCIzMjVcIixcIjMyNlwiLFwiMzI3XCIsXCIzMzZcIixcIjcxNzJcIixcIjczNjIyXCJdXSxbXCJLZW55YVwiLFtcImFmcmljYVwiXSxcImtlXCIsXCIyNTRcIl0sW1wiS2lyaWJhdGlcIixbXCJvY2VhbmlhXCJdLFwia2lcIixcIjY4NlwiXSxbXCJLb3Nvdm9cIixbXCJldXJvcGVcIixcImV4LXl1Z29zXCJdLFwieGtcIixcIjM4M1wiXSxbXCJLdXdhaXRcIixbXCJtaWRkbGUtZWFzdFwiXSxcImt3XCIsXCI5NjVcIl0sW1wiS3lyZ3l6c3RhblwiLFtcImFzaWFcIixcImV4LXVzc3JcIl0sXCJrZ1wiLFwiOTk2XCIsXCIuLi4gLi4uIC4uLlwiXSxbXCJMYW9zXCIsW1wiYXNpYVwiXSxcImxhXCIsXCI4NTZcIl0sW1wiTGF0dmlhXCIsW1wiZXVyb3BlXCIsXCJldS11bmlvblwiLFwiZXgtdXNzclwiLFwiYmFsdGljXCJdLFwibHZcIixcIjM3MVwiLFwiLi4gLi4uIC4uLlwiXSxbXCJMZWJhbm9uXCIsW1wibWlkZGxlLWVhc3RcIl0sXCJsYlwiLFwiOTYxXCJdLFtcIkxlc290aG9cIixbXCJhZnJpY2FcIl0sXCJsc1wiLFwiMjY2XCJdLFtcIkxpYmVyaWFcIixbXCJhZnJpY2FcIl0sXCJsclwiLFwiMjMxXCJdLFtcIkxpYnlhXCIsW1wiYWZyaWNhXCIsXCJub3J0aC1hZnJpY2FcIl0sXCJseVwiLFwiMjE4XCJdLFtcIkxpZWNodGVuc3RlaW5cIixbXCJldXJvcGVcIl0sXCJsaVwiLFwiNDIzXCJdLFtcIkxpdGh1YW5pYVwiLFtcImV1cm9wZVwiLFwiZXUtdW5pb25cIixcImV4LXVzc3JcIixcImJhbHRpY1wiXSxcImx0XCIsXCIzNzBcIl0sW1wiTHV4ZW1ib3VyZ1wiLFtcImV1cm9wZVwiLFwiZXUtdW5pb25cIl0sXCJsdVwiLFwiMzUyXCJdLFtcIk1hY2F1XCIsW1wiYXNpYVwiXSxcIm1vXCIsXCI4NTNcIl0sW1wiTWFjZWRvbmlhXCIsW1wiZXVyb3BlXCIsXCJleC15dWdvc1wiXSxcIm1rXCIsXCIzODlcIl0sW1wiTWFkYWdhc2NhclwiLFtcImFmcmljYVwiXSxcIm1nXCIsXCIyNjFcIl0sW1wiTWFsYXdpXCIsW1wiYWZyaWNhXCJdLFwibXdcIixcIjI2NVwiXSxbXCJNYWxheXNpYVwiLFtcImFzaWFcIl0sXCJteVwiLFwiNjBcIixcIi4uLS4uLi4tLi4uLlwiXSxbXCJNYWxkaXZlc1wiLFtcImFzaWFcIl0sXCJtdlwiLFwiOTYwXCJdLFtcIk1hbGlcIixbXCJhZnJpY2FcIl0sXCJtbFwiLFwiMjIzXCJdLFtcIk1hbHRhXCIsW1wiZXVyb3BlXCIsXCJldS11bmlvblwiXSxcIm10XCIsXCIzNTZcIl0sW1wiTWFyc2hhbGwgSXNsYW5kc1wiLFtcIm9jZWFuaWFcIl0sXCJtaFwiLFwiNjkyXCJdLFtcIk1hcnRpbmlxdWVcIixbXCJhbWVyaWNhXCIsXCJjYXJyaWJlYW5cIl0sXCJtcVwiLFwiNTk2XCJdLFtcIk1hdXJpdGFuaWFcIixbXCJhZnJpY2FcIl0sXCJtclwiLFwiMjIyXCJdLFtcIk1hdXJpdGl1c1wiLFtcImFmcmljYVwiXSxcIm11XCIsXCIyMzBcIl0sW1wiTWV4aWNvXCIsW1wiYW1lcmljYVwiLFwiY2VudHJhbC1hbWVyaWNhXCJdLFwibXhcIixcIjUyXCIsXCIuLi4gLi4uIC4uLi5cIiwwLFtcIjU1XCIsXCI4MVwiLFwiMzNcIixcIjY1NlwiLFwiNjY0XCIsXCI5OThcIixcIjc3NFwiLFwiMjI5XCJdXSxbXCJNaWNyb25lc2lhXCIsW1wib2NlYW5pYVwiXSxcImZtXCIsXCI2OTFcIl0sW1wiTW9sZG92YVwiLFtcImV1cm9wZVwiXSxcIm1kXCIsXCIzNzNcIixcIiguLikgLi4tLi4tLi5cIl0sW1wiTW9uYWNvXCIsW1wiZXVyb3BlXCJdLFwibWNcIixcIjM3N1wiXSxbXCJNb25nb2xpYVwiLFtcImFzaWFcIl0sXCJtblwiLFwiOTc2XCJdLFtcIk1vbnRlbmVncm9cIixbXCJldXJvcGVcIixcImV4LXl1Z29zXCJdLFwibWVcIixcIjM4MlwiXSxbXCJNb3JvY2NvXCIsW1wiYWZyaWNhXCIsXCJub3J0aC1hZnJpY2FcIl0sXCJtYVwiLFwiMjEyXCJdLFtcIk1vemFtYmlxdWVcIixbXCJhZnJpY2FcIl0sXCJtelwiLFwiMjU4XCJdLFtcIk15YW5tYXJcIixbXCJhc2lhXCJdLFwibW1cIixcIjk1XCJdLFtcIk5hbWliaWFcIixbXCJhZnJpY2FcIl0sXCJuYVwiLFwiMjY0XCJdLFtcIk5hdXJ1XCIsW1wiYWZyaWNhXCJdLFwibnJcIixcIjY3NFwiXSxbXCJOZXBhbFwiLFtcImFzaWFcIl0sXCJucFwiLFwiOTc3XCJdLFtcIk5ldGhlcmxhbmRzXCIsW1wiZXVyb3BlXCIsXCJldS11bmlvblwiXSxcIm5sXCIsXCIzMVwiLFwiLi4gLi4uLi4uLi5cIl0sW1wiTmV3IENhbGVkb25pYVwiLFtcIm9jZWFuaWFcIl0sXCJuY1wiLFwiNjg3XCJdLFtcIk5ldyBaZWFsYW5kXCIsW1wib2NlYW5pYVwiXSxcIm56XCIsXCI2NFwiLFwiLi4uLS4uLi0uLi4uXCJdLFtcIk5pY2FyYWd1YVwiLFtcImFtZXJpY2FcIixcImNlbnRyYWwtYW1lcmljYVwiXSxcIm5pXCIsXCI1MDVcIl0sW1wiTmlnZXJcIixbXCJhZnJpY2FcIl0sXCJuZVwiLFwiMjI3XCJdLFtcIk5pZ2VyaWFcIixbXCJhZnJpY2FcIl0sXCJuZ1wiLFwiMjM0XCJdLFtcIk5vcnRoIEtvcmVhXCIsW1wiYXNpYVwiXSxcImtwXCIsXCI4NTBcIl0sW1wiTm9yd2F5XCIsW1wiZXVyb3BlXCIsXCJiYWx0aWNcIl0sXCJub1wiLFwiNDdcIixcIi4uLiAuLiAuLi5cIl0sW1wiT21hblwiLFtcIm1pZGRsZS1lYXN0XCJdLFwib21cIixcIjk2OFwiXSxbXCJQYWtpc3RhblwiLFtcImFzaWFcIl0sXCJwa1wiLFwiOTJcIixcIi4uLi0uLi4uLi4uXCJdLFtcIlBhbGF1XCIsW1wib2NlYW5pYVwiXSxcInB3XCIsXCI2ODBcIl0sW1wiUGFsZXN0aW5lXCIsW1wibWlkZGxlLWVhc3RcIl0sXCJwc1wiLFwiOTcwXCJdLFtcIlBhbmFtYVwiLFtcImFtZXJpY2FcIixcImNlbnRyYWwtYW1lcmljYVwiXSxcInBhXCIsXCI1MDdcIl0sW1wiUGFwdWEgTmV3IEd1aW5lYVwiLFtcIm9jZWFuaWFcIl0sXCJwZ1wiLFwiNjc1XCJdLFtcIlBhcmFndWF5XCIsW1wiYW1lcmljYVwiLFwic291dGgtYW1lcmljYVwiXSxcInB5XCIsXCI1OTVcIl0sW1wiUGVydVwiLFtcImFtZXJpY2FcIixcInNvdXRoLWFtZXJpY2FcIl0sXCJwZVwiLFwiNTFcIl0sW1wiUGhpbGlwcGluZXNcIixbXCJhc2lhXCJdLFwicGhcIixcIjYzXCIsXCIuLi4uIC4uLi4uLi5cIl0sW1wiUG9sYW5kXCIsW1wiZXVyb3BlXCIsXCJldS11bmlvblwiLFwiYmFsdGljXCJdLFwicGxcIixcIjQ4XCIsXCIuLi4tLi4uLS4uLlwiXSxbXCJQb3J0dWdhbFwiLFtcImV1cm9wZVwiLFwiZXUtdW5pb25cIl0sXCJwdFwiLFwiMzUxXCJdLFtcIlB1ZXJ0byBSaWNvXCIsW1wiYW1lcmljYVwiLFwiY2FycmliZWFuXCJdLFwicHJcIixcIjFcIixcIlwiLDMsW1wiNzg3XCIsXCI5MzlcIl1dLFtcIlFhdGFyXCIsW1wibWlkZGxlLWVhc3RcIl0sXCJxYVwiLFwiOTc0XCJdLFtcIlLDqXVuaW9uXCIsW1wiYWZyaWNhXCJdLFwicmVcIixcIjI2MlwiXSxbXCJSb21hbmlhXCIsW1wiZXVyb3BlXCIsXCJldS11bmlvblwiXSxcInJvXCIsXCI0MFwiXSxbXCJSdXNzaWFcIixbXCJldXJvcGVcIixcImFzaWFcIixcImV4LXVzc3JcIixcImJhbHRpY1wiXSxcInJ1XCIsXCI3XCIsXCIoLi4uKSAuLi4tLi4tLi5cIiwwXSxbXCJSd2FuZGFcIixbXCJhZnJpY2FcIl0sXCJyd1wiLFwiMjUwXCJdLFtcIlNhaW50IEtpdHRzIGFuZCBOZXZpc1wiLFtcImFtZXJpY2FcIixcImNhcnJpYmVhblwiXSxcImtuXCIsXCIxODY5XCJdLFtcIlNhaW50IEx1Y2lhXCIsW1wiYW1lcmljYVwiLFwiY2FycmliZWFuXCJdLFwibGNcIixcIjE3NThcIl0sW1wiU2FpbnQgVmluY2VudCBhbmQgdGhlIEdyZW5hZGluZXNcIixbXCJhbWVyaWNhXCIsXCJjYXJyaWJlYW5cIl0sXCJ2Y1wiLFwiMTc4NFwiXSxbXCJTYW1vYVwiLFtcIm9jZWFuaWFcIl0sXCJ3c1wiLFwiNjg1XCJdLFtcIlNhbiBNYXJpbm9cIixbXCJldXJvcGVcIl0sXCJzbVwiLFwiMzc4XCJdLFtcIlPDo28gVG9tw6kgYW5kIFByw61uY2lwZVwiLFtcImFmcmljYVwiXSxcInN0XCIsXCIyMzlcIl0sW1wiU2F1ZGkgQXJhYmlhXCIsW1wibWlkZGxlLWVhc3RcIl0sXCJzYVwiLFwiOTY2XCJdLFtcIlNlbmVnYWxcIixbXCJhZnJpY2FcIl0sXCJzblwiLFwiMjIxXCJdLFtcIlNlcmJpYVwiLFtcImV1cm9wZVwiLFwiZXgteXVnb3NcIl0sXCJyc1wiLFwiMzgxXCJdLFtcIlNleWNoZWxsZXNcIixbXCJhZnJpY2FcIl0sXCJzY1wiLFwiMjQ4XCJdLFtcIlNpZXJyYSBMZW9uZVwiLFtcImFmcmljYVwiXSxcInNsXCIsXCIyMzJcIl0sW1wiU2luZ2Fwb3JlXCIsW1wiYXNpYVwiXSxcInNnXCIsXCI2NVwiLFwiLi4uLi0uLi4uXCJdLFtcIlNsb3Zha2lhXCIsW1wiZXVyb3BlXCIsXCJldS11bmlvblwiXSxcInNrXCIsXCI0MjFcIl0sW1wiU2xvdmVuaWFcIixbXCJldXJvcGVcIixcImV1LXVuaW9uXCIsXCJleC15dWdvc1wiXSxcInNpXCIsXCIzODZcIl0sW1wiU29sb21vbiBJc2xhbmRzXCIsW1wib2NlYW5pYVwiXSxcInNiXCIsXCI2NzdcIl0sW1wiU29tYWxpYVwiLFtcImFmcmljYVwiXSxcInNvXCIsXCIyNTJcIl0sW1wiU291dGggQWZyaWNhXCIsW1wiYWZyaWNhXCJdLFwiemFcIixcIjI3XCJdLFtcIlNvdXRoIEtvcmVhXCIsW1wiYXNpYVwiXSxcImtyXCIsXCI4MlwiLFwiLi4uIC4uLi4gLi4uLlwiXSxbXCJTb3V0aCBTdWRhblwiLFtcImFmcmljYVwiLFwibm9ydGgtYWZyaWNhXCJdLFwic3NcIixcIjIxMVwiXSxbXCJTcGFpblwiLFtcImV1cm9wZVwiLFwiZXUtdW5pb25cIl0sXCJlc1wiLFwiMzRcIixcIi4uLiAuLi4gLi4uXCJdLFtcIlNyaSBMYW5rYVwiLFtcImFzaWFcIl0sXCJsa1wiLFwiOTRcIl0sW1wiU3VkYW5cIixbXCJhZnJpY2FcIl0sXCJzZFwiLFwiMjQ5XCJdLFtcIlN1cmluYW1lXCIsW1wiYW1lcmljYVwiLFwic291dGgtYW1lcmljYVwiXSxcInNyXCIsXCI1OTdcIl0sW1wiU3dhemlsYW5kXCIsW1wiYWZyaWNhXCJdLFwic3pcIixcIjI2OFwiXSxbXCJTd2VkZW5cIixbXCJldXJvcGVcIixcImV1LXVuaW9uXCIsXCJiYWx0aWNcIl0sXCJzZVwiLFwiNDZcIixcIiguLi4pIC4uLi0uLi5cIl0sW1wiU3dpdHplcmxhbmRcIixbXCJldXJvcGVcIl0sXCJjaFwiLFwiNDFcIixcIi4uIC4uLiAuLiAuLlwiXSxbXCJTeXJpYVwiLFtcIm1pZGRsZS1lYXN0XCJdLFwic3lcIixcIjk2M1wiXSxbXCJUYWl3YW5cIixbXCJhc2lhXCJdLFwidHdcIixcIjg4NlwiXSxbXCJUYWppa2lzdGFuXCIsW1wiYXNpYVwiLFwiZXgtdXNzclwiXSxcInRqXCIsXCI5OTJcIl0sW1wiVGFuemFuaWFcIixbXCJhZnJpY2FcIl0sXCJ0elwiLFwiMjU1XCJdLFtcIlRoYWlsYW5kXCIsW1wiYXNpYVwiXSxcInRoXCIsXCI2NlwiXSxbXCJUaW1vci1MZXN0ZVwiLFtcImFzaWFcIl0sXCJ0bFwiLFwiNjcwXCJdLFtcIlRvZ29cIixbXCJhZnJpY2FcIl0sXCJ0Z1wiLFwiMjI4XCJdLFtcIlRvbmdhXCIsW1wib2NlYW5pYVwiXSxcInRvXCIsXCI2NzZcIl0sW1wiVHJpbmlkYWQgYW5kIFRvYmFnb1wiLFtcImFtZXJpY2FcIixcImNhcnJpYmVhblwiXSxcInR0XCIsXCIxODY4XCJdLFtcIlR1bmlzaWFcIixbXCJhZnJpY2FcIixcIm5vcnRoLWFmcmljYVwiXSxcInRuXCIsXCIyMTZcIl0sW1wiVHVya2V5XCIsW1wiZXVyb3BlXCJdLFwidHJcIixcIjkwXCIsXCIuLi4gLi4uIC4uIC4uXCJdLFtcIlR1cmttZW5pc3RhblwiLFtcImFzaWFcIixcImV4LXVzc3JcIl0sXCJ0bVwiLFwiOTkzXCJdLFtcIlR1dmFsdVwiLFtcImFzaWFcIl0sXCJ0dlwiLFwiNjg4XCJdLFtcIlVnYW5kYVwiLFtcImFmcmljYVwiXSxcInVnXCIsXCIyNTZcIl0sW1wiVWtyYWluZVwiLFtcImV1cm9wZVwiLFwiZXgtdXNzclwiXSxcInVhXCIsXCIzODBcIixcIiguLikgLi4uIC4uIC4uXCJdLFtcIlVuaXRlZCBBcmFiIEVtaXJhdGVzXCIsW1wibWlkZGxlLWVhc3RcIl0sXCJhZVwiLFwiOTcxXCJdLFtcIlVuaXRlZCBLaW5nZG9tXCIsW1wiZXVyb3BlXCIsXCJldS11bmlvblwiXSxcImdiXCIsXCI0NFwiLFwiLi4uLiAuLi4uLi5cIl0sW1wiVW5pdGVkIFN0YXRlc1wiLFtcImFtZXJpY2FcIixcIm5vcnRoLWFtZXJpY2FcIl0sXCJ1c1wiLFwiMVwiLFwiKC4uLikgLi4uLS4uLi5cIiwwLFtcIjkwN1wiLFwiMjA1XCIsXCIyNTFcIixcIjI1NlwiLFwiMzM0XCIsXCI0NzlcIixcIjUwMVwiLFwiODcwXCIsXCI0ODBcIixcIjUyMFwiLFwiNjAyXCIsXCI2MjNcIixcIjkyOFwiLFwiMjA5XCIsXCIyMTNcIixcIjMxMFwiLFwiMzIzXCIsXCI0MDhcIixcIjQxNVwiLFwiNTEwXCIsXCI1MzBcIixcIjU1OVwiLFwiNTYyXCIsXCI2MTlcIixcIjYyNlwiLFwiNjUwXCIsXCI2NjFcIixcIjcwN1wiLFwiNzE0XCIsXCI3NjBcIixcIjgwNVwiLFwiODE4XCIsXCI4MzFcIixcIjg1OFwiLFwiOTA5XCIsXCI5MTZcIixcIjkyNVwiLFwiOTQ5XCIsXCI5NTFcIixcIjMwM1wiLFwiNzE5XCIsXCI5NzBcIixcIjIwM1wiLFwiODYwXCIsXCIyMDJcIixcIjMwMlwiLFwiMjM5XCIsXCIzMDVcIixcIjMyMVwiLFwiMzUyXCIsXCIzODZcIixcIjQwN1wiLFwiNTYxXCIsXCI3MjdcIixcIjc3MlwiLFwiODEzXCIsXCI4NTBcIixcIjg2M1wiLFwiOTA0XCIsXCI5NDFcIixcIjk1NFwiLFwiMjI5XCIsXCI0MDRcIixcIjQ3OFwiLFwiNzA2XCIsXCI3NzBcIixcIjkxMlwiLFwiODA4XCIsXCIzMTlcIixcIjUxNVwiLFwiNTYzXCIsXCI2NDFcIixcIjcxMlwiLFwiMjA4XCIsXCIyMTdcIixcIjMwOVwiLFwiMzEyXCIsXCI2MThcIixcIjYzMFwiLFwiNzA4XCIsXCI3NzNcIixcIjgxNVwiLFwiODQ3XCIsXCIyMTlcIixcIjI2MFwiLFwiMzE3XCIsXCI1NzRcIixcIjc2NVwiLFwiODEyXCIsXCIzMTZcIixcIjYyMFwiLFwiNzg1XCIsXCI5MTNcIixcIjI3MFwiLFwiNTAyXCIsXCI2MDZcIixcIjg1OVwiLFwiMjI1XCIsXCIzMThcIixcIjMzN1wiLFwiNTA0XCIsXCI5ODVcIixcIjQxM1wiLFwiNTA4XCIsXCI2MTdcIixcIjc4MVwiLFwiOTc4XCIsXCIzMDFcIixcIjQxMFwiLFwiMjA3XCIsXCIyMzFcIixcIjI0OFwiLFwiMjY5XCIsXCIzMTNcIixcIjUxN1wiLFwiNTg2XCIsXCI2MTZcIixcIjczNFwiLFwiODEwXCIsXCI5MDZcIixcIjk4OVwiLFwiMjE4XCIsXCIzMjBcIixcIjUwN1wiLFwiNjEyXCIsXCI2NTFcIixcIjc2M1wiLFwiOTUyXCIsXCIzMTRcIixcIjQxN1wiLFwiNTczXCIsXCI2MzZcIixcIjY2MFwiLFwiODE2XCIsXCIyMjhcIixcIjYwMVwiLFwiNjYyXCIsXCI0MDZcIixcIjI1MlwiLFwiMzM2XCIsXCI3MDRcIixcIjgyOFwiLFwiOTEwXCIsXCI5MTlcIixcIjcwMVwiLFwiMzA4XCIsXCI0MDJcIixcIjYwM1wiLFwiMjAxXCIsXCI2MDlcIixcIjczMlwiLFwiODU2XCIsXCI5MDhcIixcIjk3M1wiLFwiNTA1XCIsXCI1NzVcIixcIjcwMlwiLFwiNzc1XCIsXCIyMTJcIixcIjMxNVwiLFwiNTE2XCIsXCI1MThcIixcIjU4NVwiLFwiNjA3XCIsXCI2MzFcIixcIjcxNlwiLFwiNzE4XCIsXCI4NDVcIixcIjkxNFwiLFwiMjE2XCIsXCIzMzBcIixcIjQxOVwiLFwiNDQwXCIsXCI1MTNcIixcIjYxNFwiLFwiNzQwXCIsXCI5MzdcIixcIjQwNVwiLFwiNTgwXCIsXCI5MThcIixcIjUwM1wiLFwiNTQxXCIsXCIyMTVcIixcIjQxMlwiLFwiNTcwXCIsXCI2MTBcIixcIjcxN1wiLFwiNzI0XCIsXCI4MTRcIixcIjQwMVwiLFwiODAzXCIsXCI4NDNcIixcIjg2NFwiLFwiNjA1XCIsXCI0MjNcIixcIjYxNVwiLFwiNzMxXCIsXCI4NjVcIixcIjkwMVwiLFwiOTMxXCIsXCIyMTBcIixcIjIxNFwiLFwiMjU0XCIsXCIyODFcIixcIjMyNVwiLFwiMzYxXCIsXCI0MDlcIixcIjQzMlwiLFwiNTEyXCIsXCI3MTNcIixcIjgwNlwiLFwiODE3XCIsXCI4MzBcIixcIjkwM1wiLFwiOTE1XCIsXCI5MzZcIixcIjk0MFwiLFwiOTU2XCIsXCI5NzJcIixcIjk3OVwiLFwiNDM1XCIsXCI4MDFcIixcIjI3NlwiLFwiNDM0XCIsXCI1NDBcIixcIjcwM1wiLFwiNzU3XCIsXCI4MDRcIixcIjgwMlwiLFwiMjA2XCIsXCIyNTNcIixcIjM2MFwiLFwiNDI1XCIsXCI1MDlcIixcIjI2MlwiLFwiNDE0XCIsXCI2MDhcIixcIjcxNVwiLFwiOTIwXCIsXCIzMDRcIixcIjMwN1wiXV0sW1wiVXJ1Z3VheVwiLFtcImFtZXJpY2FcIixcInNvdXRoLWFtZXJpY2FcIl0sXCJ1eVwiLFwiNTk4XCJdLFtcIlV6YmVraXN0YW5cIixbXCJhc2lhXCIsXCJleC11c3NyXCJdLFwidXpcIixcIjk5OFwiLFwiLi4gLi4uIC4uIC4uXCJdLFtcIlZhbnVhdHVcIixbXCJvY2VhbmlhXCJdLFwidnVcIixcIjY3OFwiXSxbXCJWYXRpY2FuIENpdHlcIixbXCJldXJvcGVcIl0sXCJ2YVwiLFwiMzlcIixcIi4uIC4uLi4gLi4uLlwiLDFdLFtcIlZlbmV6dWVsYVwiLFtcImFtZXJpY2FcIixcInNvdXRoLWFtZXJpY2FcIl0sXCJ2ZVwiLFwiNThcIl0sW1wiVmlldG5hbVwiLFtcImFzaWFcIl0sXCJ2blwiLFwiODRcIl0sW1wiWWVtZW5cIixbXCJtaWRkbGUtZWFzdFwiXSxcInllXCIsXCI5NjdcIl0sW1wiWmFtYmlhXCIsW1wiYWZyaWNhXCJdLFwiem1cIixcIjI2MFwiXSxbXCJaaW1iYWJ3ZVwiLFtcImFmcmljYVwiXSxcInp3XCIsXCIyNjNcIl1dLEU9W1tcIkFtZXJpY2FuIFNhbW9hXCIsW1wib2NlYW5pYVwiXSxcImFzXCIsXCIxNjg0XCJdLFtcIkFuZ3VpbGxhXCIsW1wiYW1lcmljYVwiLFwiY2FycmliZWFuXCJdLFwiYWlcIixcIjEyNjRcIl0sW1wiQmVybXVkYVwiLFtcImFtZXJpY2FcIixcIm5vcnRoLWFtZXJpY2FcIl0sXCJibVwiLFwiMTQ0MVwiXSxbXCJCcml0aXNoIFZpcmdpbiBJc2xhbmRzXCIsW1wiYW1lcmljYVwiLFwiY2FycmliZWFuXCJdLFwidmdcIixcIjEyODRcIl0sW1wiQ2F5bWFuIElzbGFuZHNcIixbXCJhbWVyaWNhXCIsXCJjYXJyaWJlYW5cIl0sXCJreVwiLFwiMTM0NVwiXSxbXCJDb29rIElzbGFuZHNcIixbXCJvY2VhbmlhXCJdLFwiY2tcIixcIjY4MlwiXSxbXCJGYWxrbGFuZCBJc2xhbmRzXCIsW1wiYW1lcmljYVwiLFwic291dGgtYW1lcmljYVwiXSxcImZrXCIsXCI1MDBcIl0sW1wiRmFyb2UgSXNsYW5kc1wiLFtcImV1cm9wZVwiXSxcImZvXCIsXCIyOThcIl0sW1wiR2licmFsdGFyXCIsW1wiZXVyb3BlXCJdLFwiZ2lcIixcIjM1MFwiXSxbXCJHcmVlbmxhbmRcIixbXCJhbWVyaWNhXCJdLFwiZ2xcIixcIjI5OVwiXSxbXCJKZXJzZXlcIixbXCJldXJvcGVcIixcImV1LXVuaW9uXCJdLFwiamVcIixcIjQ0XCIsXCIuLi4uIC4uLi4uLlwiXSxbXCJNb250c2VycmF0XCIsW1wiYW1lcmljYVwiLFwiY2FycmliZWFuXCJdLFwibXNcIixcIjE2NjRcIl0sW1wiTml1ZVwiLFtcImFzaWFcIl0sXCJudVwiLFwiNjgzXCJdLFtcIk5vcmZvbGsgSXNsYW5kXCIsW1wib2NlYW5pYVwiXSxcIm5mXCIsXCI2NzJcIl0sW1wiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXCIsW1wib2NlYW5pYVwiXSxcIm1wXCIsXCIxNjcwXCJdLFtcIlNhaW50IEJhcnRow6lsZW15XCIsW1wiYW1lcmljYVwiLFwiY2FycmliZWFuXCJdLFwiYmxcIixcIjU5MFwiLFwiXCIsMV0sW1wiU2FpbnQgSGVsZW5hXCIsW1wiYWZyaWNhXCJdLFwic2hcIixcIjI5MFwiXSxbXCJTYWludCBNYXJ0aW5cIixbXCJhbWVyaWNhXCIsXCJjYXJyaWJlYW5cIl0sXCJtZlwiLFwiNTkwXCIsXCJcIiwyXSxbXCJTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uXCIsW1wiYW1lcmljYVwiLFwibm9ydGgtYW1lcmljYVwiXSxcInBtXCIsXCI1MDhcIl0sW1wiU2ludCBNYWFydGVuXCIsW1wiYW1lcmljYVwiLFwiY2FycmliZWFuXCJdLFwic3hcIixcIjE3MjFcIl0sW1wiVG9rZWxhdVwiLFtcIm9jZWFuaWFcIl0sXCJ0a1wiLFwiNjkwXCJdLFtcIlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kc1wiLFtcImFtZXJpY2FcIixcImNhcnJpYmVhblwiXSxcInRjXCIsXCIxNjQ5XCJdLFtcIlUuUy4gVmlyZ2luIElzbGFuZHNcIixbXCJhbWVyaWNhXCIsXCJjYXJyaWJlYW5cIl0sXCJ2aVwiLFwiMTM0MFwiXSxbXCJXYWxsaXMgYW5kIEZ1dHVuYVwiLFtcIm9jZWFuaWFcIl0sXCJ3ZlwiLFwiNjgxXCJdXTtmdW5jdGlvbiBUKGUsdCxyLG4sYSl7cmV0dXJuIXJ8fGE/ZStcIlwiLnBhZEVuZCh0Lmxlbmd0aCxcIi5cIikrXCIgXCIrbjplK1wiXCIucGFkRW5kKHQubGVuZ3RoLFwiLlwiKStcIiBcIityfWZ1bmN0aW9uIEkoZSx0LHIsYSxpKXt2YXIgdSxjLHM9W107cmV0dXJuIGM9ITA9PT10LFsodT1bXSkuY29uY2F0LmFwcGx5KHUsbyhlLm1hcCgoZnVuY3Rpb24oZSl7dmFyIG89e25hbWU6ZVswXSxyZWdpb25zOmVbMV0saXNvMjplWzJdLGNvdW50cnlDb2RlOmVbM10sZGlhbENvZGU6ZVszXSxmb3JtYXQ6VChyLGVbM10sZVs0XSxhLGkpLHByaW9yaXR5OmVbNV18fDB9LHU9W107cmV0dXJuIGVbNl0mJmVbNl0ubWFwKChmdW5jdGlvbih0KXt2YXIgcj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LGE9T2JqZWN0LmtleXMocik7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKGE9YS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSkpLGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7bihlLHQsclt0XSl9KSl9cmV0dXJuIGV9KHt9LG8pO3IuZGlhbENvZGU9ZVszXSt0LHIuaXNBcmVhQ29kZT0hMCxyLmFyZWFDb2RlTGVuZ3RoPXQubGVuZ3RoLHUucHVzaChyKX0pKSx1Lmxlbmd0aD4wPyhvLm1haW5Db2RlPSEwLGN8fFwiQXJyYXlcIj09PXQuY29uc3RydWN0b3IubmFtZSYmdC5pbmNsdWRlcyhlWzJdKT8oby5oYXNBcmVhQ29kZXM9ITAsW29dLmNvbmNhdCh1KSk6KHM9cy5jb25jYXQodSksW29dKSk6W29dfSkpKSksc119ZnVuY3Rpb24gQShlLHQscixuKXtpZihudWxsIT09cil7dmFyIGE9T2JqZWN0LmtleXMociksbz1PYmplY3QudmFsdWVzKHIpO2EuZm9yRWFjaCgoZnVuY3Rpb24ocixhKXtpZihuKXJldHVybiBlLnB1c2goW3Isb1thXV0pO3ZhciBpPWUuZmluZEluZGV4KChmdW5jdGlvbihlKXtyZXR1cm4gZVswXT09PXJ9KSk7aWYoLTE9PT1pKXt2YXIgdT1bcl07dVt0XT1vW2FdLGUucHVzaCh1KX1lbHNlIGVbaV1bdF09b1thXX0pKX19ZnVuY3Rpb24gRChlLHQpe3JldHVybiAwPT09dC5sZW5ndGg/ZTplLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHI9dC5maW5kSW5kZXgoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09ZVsyXX0pKTtpZigtMT09PXIpcmV0dXJuIGU7dmFyIG49dFtyXTtyZXR1cm4gblsxXSYmKGVbNF09blsxXSksblszXSYmKGVbNV09blszXSksblsyXSYmKGVbNl09blsyXSksZX0pKX12YXIgUD1mdW5jdGlvbiBlKHQscixuLGEsaSx1LHMsbCxmLGQscCxoLG0seSl7Yyh0aGlzLGUpLHRoaXMuZmlsdGVyUmVnaW9ucz1mdW5jdGlvbihlLHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXt2YXIgcj1lO3JldHVybiB0LmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVnaW9ucy5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZT09PXJ9KSl9KSl9cmV0dXJuIHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LnJlZ2lvbnMuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lfSkpfSkpLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpfSkpfSx0aGlzLnNvcnRUZXJyaXRvcmllcz1mdW5jdGlvbihlLHQpe3ZhciByPVtdLmNvbmNhdChvKGUpLG8odCkpO3JldHVybiByLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubmFtZTx0Lm5hbWU/LTE6ZS5uYW1lPnQubmFtZT8xOjB9KSkscn0sdGhpcy5nZXRGaWx0ZXJlZENvdW50cnlMaXN0PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gMD09PWUubGVuZ3RoP3Q6cj9lLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHI9dC5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pc28yPT09ZX0pKTtpZihyKXJldHVybiByfSkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSk6dC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dC5pc28yfSkpfSkpfSx0aGlzLmxvY2FsaXplQ291bnRyaWVzPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl2b2lkIDAhPT10W2Vbbl0uaXNvMl0/ZVtuXS5sb2NhbE5hbWU9dFtlW25dLmlzbzJdOnZvaWQgMCE9PXRbZVtuXS5uYW1lXSYmKGVbbl0ubG9jYWxOYW1lPXRbZVtuXS5uYW1lXSk7cmV0dXJuIHJ8fGUuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5sb2NhbE5hbWU8dC5sb2NhbE5hbWU/LTE6ZS5sb2NhbE5hbWU+dC5sb2NhbE5hbWU/MTowfSkpLGV9LHRoaXMuZ2V0Q3VzdG9tQXJlYXM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgYT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGUpKTthLmRpYWxDb2RlKz10W25dLHIucHVzaChhKX1yZXR1cm4gcn0sdGhpcy5leGNsdWRlQ291bnRyaWVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDA9PT10Lmxlbmd0aD9lOmUuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hdC5pbmNsdWRlcyhlLmlzbzIpfSkpfTt2YXIgYj1mdW5jdGlvbihlLHQscil7dmFyIG49W107cmV0dXJuIEEobiwxLGUsITApLEEobiwzLHQpLEEobiwyLHIpLG59KGwsZixkKSxnPUQoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShrKSksYiksdj1EKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoRSkpLGIpLEM9TyhJKGcsdCxoLG0seSksMiksXz1DWzBdLHc9Q1sxXTtpZihyKXt2YXIgUz1PKEkodix0LGgsbSx5KSwyKSxqPVNbMF07U1sxXTtfPXRoaXMuc29ydFRlcnJpdG9yaWVzKGosXyl9biYmKF89dGhpcy5maWx0ZXJSZWdpb25zKG4sXykpLHRoaXMub25seUNvdW50cmllcz10aGlzLmxvY2FsaXplQ291bnRyaWVzKHRoaXMuZXhjbHVkZUNvdW50cmllcyh0aGlzLmdldEZpbHRlcmVkQ291bnRyeUxpc3QoYSxfLHMuaW5jbHVkZXMoXCJvbmx5Q291bnRyaWVzXCIpKSx1KSxwLHMuaW5jbHVkZXMoXCJvbmx5Q291bnRyaWVzXCIpKSx0aGlzLnByZWZlcnJlZENvdW50cmllcz0wPT09aS5sZW5ndGg/W106dGhpcy5sb2NhbGl6ZUNvdW50cmllcyh0aGlzLmdldEZpbHRlcmVkQ291bnRyeUxpc3QoaSxfLHMuaW5jbHVkZXMoXCJwcmVmZXJyZWRDb3VudHJpZXNcIikpLHAscy5pbmNsdWRlcyhcInByZWZlcnJlZENvdW50cmllc1wiKSksdGhpcy5oaWRkZW5BcmVhQ29kZXM9dGhpcy5leGNsdWRlQ291bnRyaWVzKHRoaXMuZ2V0RmlsdGVyZWRDb3VudHJ5TGlzdChhLHcpLHUpfSxGPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7Yyh0aGlzLHQpLChyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIXR8fFwib2JqZWN0XCIhPT1mKHQpJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0P2QoZSk6dH0odGhpcyxwKHQpLmNhbGwodGhpcyxlKSkpLmdldFByb2JhYmxlQ2FuZGlkYXRlPUMoKSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUmJjAhPT1lLmxlbmd0aD9yLnN0YXRlLm9ubHlDb3VudHJpZXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gaigpKHQubmFtZS50b0xvd2VyQ2FzZSgpLGUudG9Mb3dlckNhc2UoKSl9KSxkKGQocikpKVswXTpudWxsfSkpLHIuZ3Vlc3NTZWxlY3RlZENvdW50cnk9QygpKChmdW5jdGlvbihlLHQsbixhKXt2YXIgbztpZighMT09PXIucHJvcHMuZW5hYmxlQXJlYUNvZGVzJiYoYS5zb21lKChmdW5jdGlvbih0KXtpZihqKCkoZSx0LmRpYWxDb2RlKSlyZXR1cm4gbi5zb21lKChmdW5jdGlvbihlKXtpZih0LmlzbzI9PT1lLmlzbzImJmUubWFpbkNvZGUpcmV0dXJuIG89ZSwhMH0pKSwhMH0pKSxvKSlyZXR1cm4gbzt2YXIgaT1uLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzbzI9PXR9KSk7aWYoXCJcIj09PWUudHJpbSgpKXJldHVybiBpO3ZhciB1PW4ucmVkdWNlKChmdW5jdGlvbih0LHIpe2lmKGooKShlLHIuZGlhbENvZGUpKXtpZihyLmRpYWxDb2RlLmxlbmd0aD50LmRpYWxDb2RlLmxlbmd0aClyZXR1cm4gcjtpZihyLmRpYWxDb2RlLmxlbmd0aD09PXQuZGlhbENvZGUubGVuZ3RoJiZyLnByaW9yaXR5PHQucHJpb3JpdHkpcmV0dXJuIHJ9cmV0dXJuIHR9KSx7ZGlhbENvZGU6XCJcIixwcmlvcml0eToxMDAwMX0sZChkKHIpKSk7cmV0dXJuIHUubmFtZT91Oml9KSksci51cGRhdGVDb3VudHJ5PWZ1bmN0aW9uKGUpe3ZhciB0LG49ci5zdGF0ZS5vbmx5Q291bnRyaWVzOyh0PWUuaW5kZXhPZigwKT49XCIwXCImJmUuaW5kZXhPZigwKTw9XCI5XCI/bi5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaWFsQ29kZT09K2V9KSk6bi5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pc28yPT1lfSkpKSYmdC5kaWFsQ29kZSYmci5zZXRTdGF0ZSh7c2VsZWN0ZWRDb3VudHJ5OnQsZm9ybWF0dGVkTnVtYmVyOnIucHJvcHMuZGlzYWJsZUNvdW50cnlDb2RlP1wiXCI6ci5mb3JtYXROdW1iZXIodC5kaWFsQ29kZSx0KX0pfSxyLnNjcm9sbFRvPWZ1bmN0aW9uKGUsdCl7aWYoZSl7dmFyIG49ci5kcm9wZG93blJlZjtpZihuJiZkb2N1bWVudC5ib2R5KXt2YXIgYT1uLm9mZnNldEhlaWdodCxvPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wK2RvY3VtZW50LmJvZHkuc2Nyb2xsVG9wLGk9bythLHU9ZSxjPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz11Lm9mZnNldEhlaWdodCxsPWMudG9wK2RvY3VtZW50LmJvZHkuc2Nyb2xsVG9wLGY9bCtzLGQ9bC1vK24uc2Nyb2xsVG9wLHA9YS8yLXMvMjtpZihyLnByb3BzLmVuYWJsZVNlYXJjaD9sPG8rMzI6bDxvKXQmJihkLT1wKSxuLnNjcm9sbFRvcD1kO2Vsc2UgaWYoZj5pKXt0JiYoZCs9cCk7dmFyIGg9YS1zO24uc2Nyb2xsVG9wPWQtaH19fX0sci5zY3JvbGxUb1RvcD1mdW5jdGlvbigpe3ZhciBlPXIuZHJvcGRvd25SZWY7ZSYmZG9jdW1lbnQuYm9keSYmKGUuc2Nyb2xsVG9wPTApfSxyLmZvcm1hdE51bWJlcj1mdW5jdGlvbihlLHQpe2lmKCF0KXJldHVybiBlO3ZhciBuLG89dC5mb3JtYXQsYz1yLnByb3BzLHM9Yy5kaXNhYmxlQ291bnRyeUNvZGUsbD1jLmVuYWJsZUFyZWFDb2RlU3RyZXRjaCxmPWMuZW5hYmxlTG9uZ051bWJlcnMsZD1jLmF1dG9Gb3JtYXQ7aWYocz8oKG49by5zcGxpdChcIiBcIikpLnNoaWZ0KCksbj1uLmpvaW4oXCIgXCIpKTpsJiZ0LmlzQXJlYUNvZGU/KChuPW8uc3BsaXQoXCIgXCIpKVsxXT1uWzFdLnJlcGxhY2UoL1xcLisvLFwiXCIucGFkRW5kKHQuYXJlYUNvZGVMZW5ndGgsXCIuXCIpKSxuPW4uam9pbihcIiBcIikpOm49bywhZXx8MD09PWUubGVuZ3RoKXJldHVybiBzP1wiXCI6ci5wcm9wcy5wcmVmaXg7aWYoZSYmZS5sZW5ndGg8Mnx8IW58fCFkKXJldHVybiBzP2U6ci5wcm9wcy5wcmVmaXgrZTt2YXIgcCxoPXcoKShuLChmdW5jdGlvbihlLHQpe2lmKDA9PT1lLnJlbWFpbmluZ1RleHQubGVuZ3RoKXJldHVybiBlO2lmKFwiLlwiIT09dClyZXR1cm57Zm9ybWF0dGVkVGV4dDplLmZvcm1hdHRlZFRleHQrdCxyZW1haW5pbmdUZXh0OmUucmVtYWluaW5nVGV4dH07dmFyIHIsbj1pKHI9ZS5yZW1haW5pbmdUZXh0KXx8YShyKXx8dSgpLG89blswXSxjPW4uc2xpY2UoMSk7cmV0dXJue2Zvcm1hdHRlZFRleHQ6ZS5mb3JtYXR0ZWRUZXh0K28scmVtYWluaW5nVGV4dDpjfX0pLHtmb3JtYXR0ZWRUZXh0OlwiXCIscmVtYWluaW5nVGV4dDplLnNwbGl0KFwiXCIpfSk7cmV0dXJuKHA9Zj9oLmZvcm1hdHRlZFRleHQraC5yZW1haW5pbmdUZXh0LmpvaW4oXCJcIik6aC5mb3JtYXR0ZWRUZXh0KS5pbmNsdWRlcyhcIihcIikmJiFwLmluY2x1ZGVzKFwiKVwiKSYmKHArPVwiKVwiKSxwfSxyLmN1cnNvclRvRW5kPWZ1bmN0aW9uKCl7dmFyIGU9ci5udW1iZXJJbnB1dFJlZjtpZihkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09ZSl7ZS5mb2N1cygpO3ZhciB0PWUudmFsdWUubGVuZ3RoO1wiKVwiPT09ZS52YWx1ZS5jaGFyQXQodC0xKSYmKHQtPTEpLGUuc2V0U2VsZWN0aW9uUmFuZ2UodCx0KX19LHIuZ2V0RWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gcltcImZsYWdfbm9fXCIuY29uY2F0KGUpXX0sci5nZXRDb3VudHJ5RGF0YT1mdW5jdGlvbigpe3JldHVybiByLnN0YXRlLnNlbGVjdGVkQ291bnRyeT97bmFtZTpyLnN0YXRlLnNlbGVjdGVkQ291bnRyeS5uYW1lfHxcIlwiLGRpYWxDb2RlOnIuc3RhdGUuc2VsZWN0ZWRDb3VudHJ5LmRpYWxDb2RlfHxcIlwiLGNvdW50cnlDb2RlOnIuc3RhdGUuc2VsZWN0ZWRDb3VudHJ5LmlzbzJ8fFwiXCIsZm9ybWF0OnIuc3RhdGUuc2VsZWN0ZWRDb3VudHJ5LmZvcm1hdHx8XCJcIn06e319LHIuaGFuZGxlRmxhZ0Ryb3Bkb3duQ2xpY2s9ZnVuY3Rpb24oZSl7aWYoZS5wcmV2ZW50RGVmYXVsdCgpLHIuc3RhdGUuc2hvd0Ryb3Bkb3dufHwhci5wcm9wcy5kaXNhYmxlZCl7dmFyIHQ9ci5zdGF0ZSxuPXQucHJlZmVycmVkQ291bnRyaWVzLGE9dC5vbmx5Q291bnRyaWVzLG89dC5zZWxlY3RlZENvdW50cnksaT1yLmNvbmNhdFByZWZlcnJlZENvdW50cmllcyhuLGEpLmZpbmRJbmRleCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlhbENvZGU9PT1vLmRpYWxDb2RlJiZlLmlzbzI9PT1vLmlzbzJ9KSk7ci5zZXRTdGF0ZSh7c2hvd0Ryb3Bkb3duOiFyLnN0YXRlLnNob3dEcm9wZG93bixoaWdobGlnaHRDb3VudHJ5SW5kZXg6aX0sKGZ1bmN0aW9uKCl7ci5zdGF0ZS5zaG93RHJvcGRvd24mJnIuc2Nyb2xsVG8oci5nZXRFbGVtZW50KHIuc3RhdGUuaGlnaGxpZ2h0Q291bnRyeUluZGV4KSl9KSl9fSxyLmhhbmRsZUlucHV0PWZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0LnZhbHVlLG49ci5wcm9wcyxhPW4ucHJlZml4LG89bi5vbkNoYW5nZSxpPXIucHJvcHMuZGlzYWJsZUNvdW50cnlDb2RlP1wiXCI6YSx1PXIuc3RhdGUuc2VsZWN0ZWRDb3VudHJ5LGM9ci5zdGF0ZS5mcmVlemVTZWxlY3Rpb247aWYoIXIucHJvcHMuY291bnRyeUNvZGVFZGl0YWJsZSl7dmFyIHM9YSsodS5oYXNBcmVhQ29kZXM/ci5zdGF0ZS5vbmx5Q291bnRyaWVzLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzbzI9PT11LmlzbzImJmUubWFpbkNvZGV9KSkuZGlhbENvZGU6dS5kaWFsQ29kZSk7aWYodC5zbGljZSgwLHMubGVuZ3RoKSE9PXMpcmV0dXJufWlmKHQ9PT1hKXJldHVybiBvJiZvKFwiXCIsci5nZXRDb3VudHJ5RGF0YSgpLGUsXCJcIiksci5zZXRTdGF0ZSh7Zm9ybWF0dGVkTnVtYmVyOlwiXCJ9KTtpZih0LnJlcGxhY2UoL1xcRC9nLFwiXCIpLmxlbmd0aD4xNSl7aWYoITE9PT1yLnByb3BzLmVuYWJsZUxvbmdOdW1iZXJzKXJldHVybjtpZihcIm51bWJlclwiPT10eXBlb2Ygci5wcm9wcy5lbmFibGVMb25nTnVtYmVycyYmdC5yZXBsYWNlKC9cXEQvZyxcIlwiKS5sZW5ndGg+ci5wcm9wcy5lbmFibGVMb25nTnVtYmVycylyZXR1cm59aWYodCE9PXIuc3RhdGUuZm9ybWF0dGVkTnVtYmVyKXtlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1bHQoKTplLnJldHVyblZhbHVlPSExO3ZhciBsPXIucHJvcHMuY291bnRyeSxmPXIuc3RhdGUsZD1mLm9ubHlDb3VudHJpZXMscD1mLnNlbGVjdGVkQ291bnRyeSxoPWYuaGlkZGVuQXJlYUNvZGVzO2lmKG8mJmUucGVyc2lzdCgpLHQubGVuZ3RoPjApe3ZhciBtPXQucmVwbGFjZSgvXFxEL2csXCJcIik7KCFyLnN0YXRlLmZyZWV6ZVNlbGVjdGlvbnx8cCYmcC5kaWFsQ29kZS5sZW5ndGg+bS5sZW5ndGgpJiYodT1yLnByb3BzLmRpc2FibGVDb3VudHJ5R3Vlc3M/cDpyLmd1ZXNzU2VsZWN0ZWRDb3VudHJ5KG0uc3Vic3RyaW5nKDAsNiksbCxkLGgpfHxwLGM9ITEpLGk9ci5mb3JtYXROdW1iZXIobSx1KSx1PXUuZGlhbENvZGU/dTpwfXZhciB5PWUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0LGI9ZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQsZz1yLnN0YXRlLmZvcm1hdHRlZE51bWJlcix2PWkubGVuZ3RoLWcubGVuZ3RoO3Iuc2V0U3RhdGUoe2Zvcm1hdHRlZE51bWJlcjppLGZyZWV6ZVNlbGVjdGlvbjpjLHNlbGVjdGVkQ291bnRyeTp1fSwoZnVuY3Rpb24oKXt2PjAmJihiLT12KSxcIilcIj09aS5jaGFyQXQoaS5sZW5ndGgtMSk/ci5udW1iZXJJbnB1dFJlZi5zZXRTZWxlY3Rpb25SYW5nZShpLmxlbmd0aC0xLGkubGVuZ3RoLTEpOmI+MCYmZy5sZW5ndGg+PWkubGVuZ3RoP3IubnVtYmVySW5wdXRSZWYuc2V0U2VsZWN0aW9uUmFuZ2UoYixiKTp5PGcubGVuZ3RoJiZyLm51bWJlcklucHV0UmVmLnNldFNlbGVjdGlvblJhbmdlKHkseSksbyYmbyhpLnJlcGxhY2UoL1teMC05XSsvZyxcIlwiKSxyLmdldENvdW50cnlEYXRhKCksZSxpKX0pKX19LHIuaGFuZGxlSW5wdXRDbGljaz1mdW5jdGlvbihlKXtyLnNldFN0YXRlKHtzaG93RHJvcGRvd246ITF9KSxyLnByb3BzLm9uQ2xpY2smJnIucHJvcHMub25DbGljayhlLHIuZ2V0Q291bnRyeURhdGEoKSl9LHIuaGFuZGxlRG91YmxlQ2xpY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQudmFsdWUubGVuZ3RoO2UudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKDAsdCl9LHIuaGFuZGxlRmxhZ0l0ZW1DbGljaz1mdW5jdGlvbihlLHQpe3ZhciBuPXIuc3RhdGUuc2VsZWN0ZWRDb3VudHJ5LGE9ci5zdGF0ZS5vbmx5Q291bnRyaWVzLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0PT1lfSkpO2lmKGEpe3ZhciBvPXIuc3RhdGUuZm9ybWF0dGVkTnVtYmVyLnJlcGxhY2UoXCIgXCIsXCJcIikucmVwbGFjZShcIihcIixcIlwiKS5yZXBsYWNlKFwiKVwiLFwiXCIpLnJlcGxhY2UoXCItXCIsXCJcIiksaT1vLmxlbmd0aD4xP28ucmVwbGFjZShuLmRpYWxDb2RlLGEuZGlhbENvZGUpOmEuZGlhbENvZGUsdT1yLmZvcm1hdE51bWJlcihpLnJlcGxhY2UoL1xcRC9nLFwiXCIpLGEpO3Iuc2V0U3RhdGUoe3Nob3dEcm9wZG93bjohMSxzZWxlY3RlZENvdW50cnk6YSxmcmVlemVTZWxlY3Rpb246ITAsZm9ybWF0dGVkTnVtYmVyOnUsc2VhcmNoVmFsdWU6XCJcIn0sKGZ1bmN0aW9uKCl7ci5jdXJzb3JUb0VuZCgpLHIucHJvcHMub25DaGFuZ2UmJnIucHJvcHMub25DaGFuZ2UodS5yZXBsYWNlKC9bXjAtOV0rL2csXCJcIiksci5nZXRDb3VudHJ5RGF0YSgpLHQsdSl9KSl9fSxyLmhhbmRsZUlucHV0Rm9jdXM9ZnVuY3Rpb24oZSl7ci5udW1iZXJJbnB1dFJlZiYmci5udW1iZXJJbnB1dFJlZi52YWx1ZT09PXIucHJvcHMucHJlZml4JiZyLnN0YXRlLnNlbGVjdGVkQ291bnRyeSYmIXIucHJvcHMuZGlzYWJsZUNvdW50cnlDb2RlJiZyLnNldFN0YXRlKHtmb3JtYXR0ZWROdW1iZXI6ci5wcm9wcy5wcmVmaXgrci5zdGF0ZS5zZWxlY3RlZENvdW50cnkuZGlhbENvZGV9LChmdW5jdGlvbigpe3IucHJvcHMuanVtcEN1cnNvclRvRW5kJiZzZXRUaW1lb3V0KHIuY3Vyc29yVG9FbmQsMCl9KSksci5zZXRTdGF0ZSh7cGxhY2Vob2xkZXI6XCJcIn0pLHIucHJvcHMub25Gb2N1cyYmci5wcm9wcy5vbkZvY3VzKGUsci5nZXRDb3VudHJ5RGF0YSgpKSxyLnByb3BzLmp1bXBDdXJzb3JUb0VuZCYmc2V0VGltZW91dChyLmN1cnNvclRvRW5kLDApfSxyLmhhbmRsZUlucHV0Qmx1cj1mdW5jdGlvbihlKXtlLnRhcmdldC52YWx1ZXx8ci5zZXRTdGF0ZSh7cGxhY2Vob2xkZXI6ci5wcm9wcy5wbGFjZWhvbGRlcn0pLHIucHJvcHMub25CbHVyJiZyLnByb3BzLm9uQmx1cihlLHIuZ2V0Q291bnRyeURhdGEoKSl9LHIuaGFuZGxlSW5wdXRDb3B5PWZ1bmN0aW9uKGUpe2lmKHIucHJvcHMuY29weU51bWJlcnNPbmx5KXt2YXIgdD13aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKS5yZXBsYWNlKC9bXjAtOV0rL2csXCJcIik7ZS5jbGlwYm9hcmREYXRhLnNldERhdGEoXCJ0ZXh0L3BsYWluXCIsdCksZS5wcmV2ZW50RGVmYXVsdCgpfX0sci5nZXRIaWdobGlnaHRDb3VudHJ5SW5kZXg9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5zdGF0ZS5oaWdobGlnaHRDb3VudHJ5SW5kZXgrZTtyZXR1cm4gdDwwfHx0Pj1yLnN0YXRlLm9ubHlDb3VudHJpZXMubGVuZ3RoK3Iuc3RhdGUucHJlZmVycmVkQ291bnRyaWVzLmxlbmd0aD90LWU6ci5wcm9wcy5lbmFibGVTZWFyY2gmJnQ+ci5nZXRTZWFyY2hGaWx0ZXJlZENvdW50cmllcygpLmxlbmd0aD8wOnR9LHIuc2VhcmNoQ291bnRyeT1mdW5jdGlvbigpe3ZhciBlPXIuZ2V0UHJvYmFibGVDYW5kaWRhdGUoci5zdGF0ZS5xdWVyeVN0cmluZyl8fHIuc3RhdGUub25seUNvdW50cmllc1swXSx0PXIuc3RhdGUub25seUNvdW50cmllcy5maW5kSW5kZXgoKGZ1bmN0aW9uKHQpe3JldHVybiB0PT1lfSkpK3Iuc3RhdGUucHJlZmVycmVkQ291bnRyaWVzLmxlbmd0aDtyLnNjcm9sbFRvKHIuZ2V0RWxlbWVudCh0KSwhMCksci5zZXRTdGF0ZSh7cXVlcnlTdHJpbmc6XCJcIixoaWdobGlnaHRDb3VudHJ5SW5kZXg6dH0pfSxyLmhhbmRsZUtleWRvd249ZnVuY3Rpb24oZSl7dmFyIHQ9ci5wcm9wcy5rZXlzLG49ZS50YXJnZXQuY2xhc3NOYW1lO2lmKG4uaW5jbHVkZXMoXCJzZWxlY3RlZC1mbGFnXCIpJiZlLndoaWNoPT09dC5FTlRFUiYmIXIuc3RhdGUuc2hvd0Ryb3Bkb3duKXJldHVybiByLmhhbmRsZUZsYWdEcm9wZG93bkNsaWNrKGUpO2lmKG4uaW5jbHVkZXMoXCJmb3JtLWNvbnRyb2xcIikmJihlLndoaWNoPT09dC5FTlRFUnx8ZS53aGljaD09PXQuRVNDKSlyZXR1cm4gZS50YXJnZXQuYmx1cigpO2lmKHIuc3RhdGUuc2hvd0Ryb3Bkb3duJiYhci5wcm9wcy5kaXNhYmxlZCYmKCFuLmluY2x1ZGVzKFwic2VhcmNoLWJveFwiKXx8ZS53aGljaD09PXQuVVB8fGUud2hpY2g9PT10LkRPV058fGUud2hpY2g9PT10LkVOVEVSfHxlLndoaWNoPT09dC5FU0MmJlwiXCI9PT1lLnRhcmdldC52YWx1ZSkpe2UucHJldmVudERlZmF1bHQ/ZS5wcmV2ZW50RGVmYXVsdCgpOmUucmV0dXJuVmFsdWU9ITE7dmFyIGE9ZnVuY3Rpb24oZSl7ci5zZXRTdGF0ZSh7aGlnaGxpZ2h0Q291bnRyeUluZGV4OnIuZ2V0SGlnaGxpZ2h0Q291bnRyeUluZGV4KGUpfSwoZnVuY3Rpb24oKXtyLnNjcm9sbFRvKHIuZ2V0RWxlbWVudChyLnN0YXRlLmhpZ2hsaWdodENvdW50cnlJbmRleCksITApfSkpfTtzd2l0Y2goZS53aGljaCl7Y2FzZSB0LkRPV046YSgxKTticmVhaztjYXNlIHQuVVA6YSgtMSk7YnJlYWs7Y2FzZSB0LkVOVEVSOnIucHJvcHMuZW5hYmxlU2VhcmNoP3IuaGFuZGxlRmxhZ0l0ZW1DbGljayhyLmdldFNlYXJjaEZpbHRlcmVkQ291bnRyaWVzKClbci5zdGF0ZS5oaWdobGlnaHRDb3VudHJ5SW5kZXhdfHxyLmdldFNlYXJjaEZpbHRlcmVkQ291bnRyaWVzKClbMF0sZSk6ci5oYW5kbGVGbGFnSXRlbUNsaWNrKFtdLmNvbmNhdChvKHIuc3RhdGUucHJlZmVycmVkQ291bnRyaWVzKSxvKHIuc3RhdGUub25seUNvdW50cmllcykpW3Iuc3RhdGUuaGlnaGxpZ2h0Q291bnRyeUluZGV4XSxlKTticmVhaztjYXNlIHQuRVNDOmNhc2UgdC5UQUI6ci5zZXRTdGF0ZSh7c2hvd0Ryb3Bkb3duOiExfSxyLmN1cnNvclRvRW5kKTticmVhaztkZWZhdWx0OihlLndoaWNoPj10LkEmJmUud2hpY2g8PXQuWnx8ZS53aGljaD09PXQuU1BBQ0UpJiZyLnNldFN0YXRlKHtxdWVyeVN0cmluZzpyLnN0YXRlLnF1ZXJ5U3RyaW5nK1N0cmluZy5mcm9tQ2hhckNvZGUoZS53aGljaCl9LHIuc3RhdGUuZGVib3VuY2VkUXVlcnlTdGluZ1NlYXJjaGVyKX19fSxyLmhhbmRsZUlucHV0S2V5RG93bj1mdW5jdGlvbihlKXt2YXIgdD1yLnByb3BzLG49dC5rZXlzLGE9dC5vbkVudGVyS2V5UHJlc3Msbz10Lm9uS2V5RG93bjtlLndoaWNoPT09bi5FTlRFUiYmYSYmYShlKSxvJiZvKGUpfSxyLmhhbmRsZUNsaWNrT3V0c2lkZT1mdW5jdGlvbihlKXtyLmRyb3Bkb3duUmVmJiYhci5kcm9wZG93bkNvbnRhaW5lclJlZi5jb250YWlucyhlLnRhcmdldCkmJnIuc3RhdGUuc2hvd0Ryb3Bkb3duJiZyLnNldFN0YXRlKHtzaG93RHJvcGRvd246ITF9KX0sci5oYW5kbGVTZWFyY2hDaGFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jdXJyZW50VGFyZ2V0LnZhbHVlLG49ci5zdGF0ZSxhPW4ucHJlZmVycmVkQ291bnRyaWVzLG89bi5zZWxlY3RlZENvdW50cnksaT0wO2lmKFwiXCI9PT10JiZvKXt2YXIgdT1yLnN0YXRlLm9ubHlDb3VudHJpZXM7aT1yLmNvbmNhdFByZWZlcnJlZENvdW50cmllcyhhLHUpLmZpbmRJbmRleCgoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW99KSksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gci5zY3JvbGxUbyhyLmdldEVsZW1lbnQoaSkpfSksMTAwKX1yLnNldFN0YXRlKHtzZWFyY2hWYWx1ZTp0LGhpZ2hsaWdodENvdW50cnlJbmRleDppfSl9LHIuY29uY2F0UHJlZmVycmVkQ291bnRyaWVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubGVuZ3RoPjA/byhuZXcgU2V0KGUuY29uY2F0KHQpKSk6dH0sci5nZXREcm9wZG93bkNvdW50cnlOYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBlLmxvY2FsTmFtZXx8ZS5uYW1lfSxyLmdldFNlYXJjaEZpbHRlcmVkQ291bnRyaWVzPWZ1bmN0aW9uKCl7dmFyIGU9ci5zdGF0ZSx0PWUucHJlZmVycmVkQ291bnRyaWVzLG49ZS5vbmx5Q291bnRyaWVzLGE9ZS5zZWFyY2hWYWx1ZSxpPXIucHJvcHMuZW5hYmxlU2VhcmNoLHU9ci5jb25jYXRQcmVmZXJyZWRDb3VudHJpZXModCxuKSxjPWEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShcIitcIixcIlwiKTtpZihpJiZjKXtpZigvXlxcZCskLy50ZXN0KGMpKXJldHVybiB1LmZpbHRlcigoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kaWFsQ29kZTtyZXR1cm5bXCJcIi5jb25jYXQodCldLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoYyl9KSl9KSk7dmFyIHM9dS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuaXNvMjtyZXR1cm5bXCJcIi5jb25jYXQodCldLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoYyl9KSl9KSksbD11LmZpbHRlcigoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLHI9ZS5sb2NhbE5hbWU7ZS5pc28yO3JldHVybltcIlwiLmNvbmNhdCh0KSxcIlwiLmNvbmNhdChyfHxcIlwiKV0uc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjKX0pKX0pKTtyZXR1cm4gci5zY3JvbGxUb1RvcCgpLG8obmV3IFNldChbXS5jb25jYXQocyxsKSkpfXJldHVybiB1fSxyLmdldENvdW50cnlEcm9wZG93bkxpc3Q9ZnVuY3Rpb24oKXt2YXIgZT1yLnN0YXRlLHQ9ZS5wcmVmZXJyZWRDb3VudHJpZXMsYT1lLmhpZ2hsaWdodENvdW50cnlJbmRleCxvPWUuc2hvd0Ryb3Bkb3duLGk9ZS5zZWFyY2hWYWx1ZSx1PXIucHJvcHMsYz11LmRpc2FibGVEcm9wZG93bixzPXUucHJlZml4LGw9ci5wcm9wcyxmPWwuZW5hYmxlU2VhcmNoLGQ9bC5zZWFyY2hOb3RGb3VuZCxwPWwuZGlzYWJsZVNlYXJjaEljb24saD1sLnNlYXJjaENsYXNzLG09bC5zZWFyY2hTdHlsZSxiPWwuc2VhcmNoUGxhY2Vob2xkZXIsZz1sLmF1dG9jb21wbGV0ZVNlYXJjaCx2PXIuZ2V0U2VhcmNoRmlsdGVyZWRDb3VudHJpZXMoKS5tYXAoKGZ1bmN0aW9uKGUsdCl7dmFyIG49YT09PXQsbz1OKCkoe2NvdW50cnk6ITAscHJlZmVycmVkOlwidXNcIj09PWUuaXNvMnx8XCJnYlwiPT09ZS5pc28yLGFjdGl2ZTpcInVzXCI9PT1lLmlzbzIsaGlnaGxpZ2h0Om59KSxpPVwiZmxhZyBcIi5jb25jYXQoZS5pc28yKTtyZXR1cm4geS5hLmNyZWF0ZUVsZW1lbnQoXCJsaVwiLE9iamVjdC5hc3NpZ24oe3JlZjpmdW5jdGlvbihlKXtyZXR1cm4gcltcImZsYWdfbm9fXCIuY29uY2F0KHQpXT1lfSxrZXk6XCJmbGFnX25vX1wiLmNvbmNhdCh0KSxcImRhdGEtZmxhZy1rZXlcIjpcImZsYWdfbm9fXCIuY29uY2F0KHQpLGNsYXNzTmFtZTpvLFwiZGF0YS1kaWFsLWNvZGVcIjpcIjFcIix0YWJJbmRleDpjP1wiLTFcIjpcIjBcIixcImRhdGEtY291bnRyeS1jb2RlXCI6ZS5pc28yLG9uQ2xpY2s6ZnVuY3Rpb24odCl7cmV0dXJuIHIuaGFuZGxlRmxhZ0l0ZW1DbGljayhlLHQpfSxyb2xlOlwib3B0aW9uXCJ9LG4/e1wiYXJpYS1zZWxlY3RlZFwiOiEwfTp7fSkseS5hLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOml9KSx5LmEuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwiY291bnRyeS1uYW1lXCJ9LHIuZ2V0RHJvcGRvd25Db3VudHJ5TmFtZShlKSkseS5hLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcImRpYWwtY29kZVwifSxlLmZvcm1hdD9yLmZvcm1hdE51bWJlcihlLmRpYWxDb2RlLGUpOnMrZS5kaWFsQ29kZSkpfSkpLEM9eS5hLmNyZWF0ZUVsZW1lbnQoXCJsaVwiLHtrZXk6XCJkYXNoZXNcIixjbGFzc05hbWU6XCJkaXZpZGVyXCJ9KTt0Lmxlbmd0aD4wJiYoIWZ8fGYmJiFpLnRyaW0oKSkmJnYuc3BsaWNlKHQubGVuZ3RoLDAsQyk7dmFyIF89TigpKG4oe1wiY291bnRyeS1saXN0XCI6ITAsaGlkZTohb30sci5wcm9wcy5kcm9wZG93bkNsYXNzLCEwKSk7cmV0dXJuIHkuYS5jcmVhdGVFbGVtZW50KFwidWxcIix7cmVmOmZ1bmN0aW9uKGUpe3JldHVybiFmJiZlJiZlLmZvY3VzKCksci5kcm9wZG93blJlZj1lfSxjbGFzc05hbWU6XyxzdHlsZTpyLnByb3BzLmRyb3Bkb3duU3R5bGUscm9sZTpcImxpc3Rib3hcIix0YWJJbmRleDpcIjBcIn0sZiYmeS5hLmNyZWF0ZUVsZW1lbnQoXCJsaVwiLHtjbGFzc05hbWU6TigpKG4oe3NlYXJjaDohMH0saCxoKSl9LCFwJiZ5LmEuY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOk4oKShuKHtcInNlYXJjaC1lbW9qaVwiOiEwfSxcIlwiLmNvbmNhdChoLFwiLWVtb2ppXCIpLGgpKSxyb2xlOlwiaW1nXCIsXCJhcmlhLWxhYmVsXCI6XCJNYWduaWZ5aW5nIGdsYXNzXCJ9LFwi8J+UjlwiKSx5LmEuY3JlYXRlRWxlbWVudChcImlucHV0XCIse2NsYXNzTmFtZTpOKCkobih7XCJzZWFyY2gtYm94XCI6ITB9LFwiXCIuY29uY2F0KGgsXCItYm94XCIpLGgpKSxzdHlsZTptLHR5cGU6XCJzZWFyY2hcIixwbGFjZWhvbGRlcjpiLGF1dG9Gb2N1czohMCxhdXRvQ29tcGxldGU6Zz9cIm9uXCI6XCJvZmZcIix2YWx1ZTppLG9uQ2hhbmdlOnIuaGFuZGxlU2VhcmNoQ2hhbmdlfSkpLHYubGVuZ3RoPjA/djp5LmEuY3JlYXRlRWxlbWVudChcImxpXCIse2NsYXNzTmFtZTpcIm5vLWVudHJpZXMtbWVzc2FnZVwifSx5LmEuY3JlYXRlRWxlbWVudChcInNwYW5cIixudWxsLGQpKSl9O3ZhciBzLGw9bmV3IFAoZS5lbmFibGVBcmVhQ29kZXMsZS5lbmFibGVUZXJyaXRvcmllcyxlLnJlZ2lvbnMsZS5vbmx5Q291bnRyaWVzLGUucHJlZmVycmVkQ291bnRyaWVzLGUuZXhjbHVkZUNvdW50cmllcyxlLnByZXNlcnZlT3JkZXIsZS5tYXNrcyxlLnByaW9yaXR5LGUuYXJlYUNvZGVzLGUubG9jYWxpemF0aW9uLGUucHJlZml4LGUuZGVmYXVsdE1hc2ssZS5hbHdheXNEZWZhdWx0TWFzayksaD1sLm9ubHlDb3VudHJpZXMsbT1sLnByZWZlcnJlZENvdW50cmllcyxiPWwuaGlkZGVuQXJlYUNvZGVzLHY9ZS52YWx1ZT9lLnZhbHVlLnJlcGxhY2UoL1xcRC9nLFwiXCIpOlwiXCI7cz1lLmRpc2FibGVJbml0aWFsQ291bnRyeUd1ZXNzPzA6di5sZW5ndGg+MT9yLmd1ZXNzU2VsZWN0ZWRDb3VudHJ5KHYuc3Vic3RyaW5nKDAsNiksZS5jb3VudHJ5LGgsYil8fDA6ZS5jb3VudHJ5JiZoLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlzbzI9PWUuY291bnRyeX0pKXx8MDt2YXIgXyxTPXYubGVuZ3RoPDImJnMmJiFqKCkodixzLmRpYWxDb2RlKT9zLmRpYWxDb2RlOlwiXCI7Xz1cIlwiPT09diYmMD09PXM/XCJcIjpyLmZvcm1hdE51bWJlcigoZS5kaXNhYmxlQ291bnRyeUNvZGU/XCJcIjpTKSt2LHMubmFtZT9zOnZvaWQgMCk7dmFyIHg9aC5maW5kSW5kZXgoKGZ1bmN0aW9uKGUpe3JldHVybiBlPT1zfSkpO3JldHVybiByLnN0YXRlPXtzaG93RHJvcGRvd246ZS5zaG93RHJvcGRvd24sZm9ybWF0dGVkTnVtYmVyOl8sb25seUNvdW50cmllczpoLHByZWZlcnJlZENvdW50cmllczptLGhpZGRlbkFyZWFDb2RlczpiLHNlbGVjdGVkQ291bnRyeTpzLGhpZ2hsaWdodENvdW50cnlJbmRleDp4LHF1ZXJ5U3RyaW5nOlwiXCIsZnJlZXplU2VsZWN0aW9uOiExLGRlYm91bmNlZFF1ZXJ5U3RpbmdTZWFyY2hlcjpnKCkoci5zZWFyY2hDb3VudHJ5LDI1MCksc2VhcmNoVmFsdWU6XCJcIn0scn12YXIgcixsLG07cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZoKGUsdCl9KHQsZSkscj10LChsPVt7a2V5OlwiY29tcG9uZW50RGlkTW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXImJnRoaXMucHJvcHMuZW5hYmxlQ2xpY2tPdXRzaWRlJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsdGhpcy5oYW5kbGVDbGlja091dHNpZGUpLHRoaXMucHJvcHMub25Nb3VudCYmdGhpcy5wcm9wcy5vbk1vdW50KHRoaXMuc3RhdGUuZm9ybWF0dGVkTnVtYmVyLnJlcGxhY2UoL1teMC05XSsvZyxcIlwiKSx0aGlzLmdldENvdW50cnlEYXRhKCksdGhpcy5zdGF0ZS5mb3JtYXR0ZWROdW1iZXIpfX0se2tleTpcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsdmFsdWU6ZnVuY3Rpb24oKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyJiZ0aGlzLnByb3BzLmVuYWJsZUNsaWNrT3V0c2lkZSYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKX19LHtrZXk6XCJjb21wb25lbnREaWRVcGRhdGVcIix2YWx1ZTpmdW5jdGlvbihlLHQscil7ZS5jb3VudHJ5IT09dGhpcy5wcm9wcy5jb3VudHJ5P3RoaXMudXBkYXRlQ291bnRyeSh0aGlzLnByb3BzLmNvdW50cnkpOmUudmFsdWUhPT10aGlzLnByb3BzLnZhbHVlJiZ0aGlzLnVwZGF0ZUZvcm1hdHRlZE51bWJlcih0aGlzLnByb3BzLnZhbHVlKX19LHtrZXk6XCJ1cGRhdGVGb3JtYXR0ZWROdW1iZXJcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihudWxsPT09ZSlyZXR1cm4gdGhpcy5zZXRTdGF0ZSh7c2VsZWN0ZWRDb3VudHJ5OjAsZm9ybWF0dGVkTnVtYmVyOlwiXCJ9KTt2YXIgdD10aGlzLnN0YXRlLHI9dC5vbmx5Q291bnRyaWVzLG49dC5zZWxlY3RlZENvdW50cnksYT10LmhpZGRlbkFyZWFDb2RlcyxvPXRoaXMucHJvcHMsaT1vLmNvdW50cnksdT1vLnByZWZpeDtpZihcIlwiPT09ZSlyZXR1cm4gdGhpcy5zZXRTdGF0ZSh7c2VsZWN0ZWRDb3VudHJ5Om4sZm9ybWF0dGVkTnVtYmVyOlwiXCJ9KTt2YXIgYyxzLGw9ZS5yZXBsYWNlKC9cXEQvZyxcIlwiKTtpZihuJiZqKCkoZSx1K24uZGlhbENvZGUpKXM9dGhpcy5mb3JtYXROdW1iZXIobCxuKSx0aGlzLnNldFN0YXRlKHtmb3JtYXR0ZWROdW1iZXI6c30pO2Vsc2V7dmFyIGY9KGM9dGhpcy5wcm9wcy5kaXNhYmxlQ291bnRyeUd1ZXNzP246dGhpcy5ndWVzc1NlbGVjdGVkQ291bnRyeShsLnN1YnN0cmluZygwLDYpLGkscixhKXx8bikmJmooKShsLHUrYy5kaWFsQ29kZSk/Yy5kaWFsQ29kZTpcIlwiO3M9dGhpcy5mb3JtYXROdW1iZXIoKHRoaXMucHJvcHMuZGlzYWJsZUNvdW50cnlDb2RlP1wiXCI6ZikrbCxjfHx2b2lkIDApLHRoaXMuc2V0U3RhdGUoe3NlbGVjdGVkQ291bnRyeTpjLGZvcm1hdHRlZE51bWJlcjpzfSl9fX0se2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxyLGE9dGhpcyxvPXRoaXMuc3RhdGUsaT1vLm9ubHlDb3VudHJpZXMsdT1vLnNlbGVjdGVkQ291bnRyeSxjPW8uc2hvd0Ryb3Bkb3duLHM9by5mb3JtYXR0ZWROdW1iZXIsbD1vLmhpZGRlbkFyZWFDb2RlcyxmPXRoaXMucHJvcHMsZD1mLmRpc2FibGVEcm9wZG93bixwPWYucmVuZGVyU3RyaW5nQXNGbGFnLGg9Zi5pc1ZhbGlkLG09Zi5kZWZhdWx0RXJyb3JNZXNzYWdlLGI9Zi5zcGVjaWFsTGFiZWw7aWYoXCJib29sZWFuXCI9PXR5cGVvZiBoKXQ9aDtlbHNle3ZhciBnPWgocy5yZXBsYWNlKC9cXEQvZyxcIlwiKSx1LGksbCk7XCJib29sZWFuXCI9PXR5cGVvZiBnPyExPT09KHQ9ZykmJihyPW0pOih0PSExLHI9Zyl9dmFyIHY9TigpKChuKGU9e30sdGhpcy5wcm9wcy5jb250YWluZXJDbGFzcywhMCksbihlLFwicmVhY3QtdGVsLWlucHV0XCIsITApLGUpKSxDPU4oKSh7YXJyb3c6ITAsdXA6Y30pLF89TigpKG4oe1wiZm9ybS1jb250cm9sXCI6ITAsXCJpbnZhbGlkLW51bWJlclwiOiF0LG9wZW46Y30sdGhpcy5wcm9wcy5pbnB1dENsYXNzLCEwKSksdz1OKCkoe1wic2VsZWN0ZWQtZmxhZ1wiOiEwLG9wZW46Y30pLFM9TigpKG4oe1wiZmxhZy1kcm9wZG93blwiOiEwLFwiaW52YWxpZC1udW1iZXJcIjohdCxvcGVuOmN9LHRoaXMucHJvcHMuYnV0dG9uQ2xhc3MsITApKSxqPVwiZmxhZyBcIi5jb25jYXQodSYmdS5pc28yKTtyZXR1cm4geS5hLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwiXCIuY29uY2F0KHYsXCIgXCIpLmNvbmNhdCh0aGlzLnByb3BzLmNsYXNzTmFtZSksc3R5bGU6dGhpcy5wcm9wcy5zdHlsZXx8dGhpcy5wcm9wcy5jb250YWluZXJTdHlsZSxvbktleURvd246dGhpcy5oYW5kbGVLZXlkb3dufSxiJiZ5LmEuY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJzcGVjaWFsLWxhYmVsXCJ9LGIpLHImJnkuYS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcImludmFsaWQtbnVtYmVyLW1lc3NhZ2VcIn0scikseS5hLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLE9iamVjdC5hc3NpZ24oe2NsYXNzTmFtZTpfLHN0eWxlOnRoaXMucHJvcHMuaW5wdXRTdHlsZSxvbkNoYW5nZTp0aGlzLmhhbmRsZUlucHV0LG9uQ2xpY2s6dGhpcy5oYW5kbGVJbnB1dENsaWNrLG9uRG91YmxlQ2xpY2s6dGhpcy5oYW5kbGVEb3VibGVDbGljayxvbkZvY3VzOnRoaXMuaGFuZGxlSW5wdXRGb2N1cyxvbkJsdXI6dGhpcy5oYW5kbGVJbnB1dEJsdXIsb25Db3B5OnRoaXMuaGFuZGxlSW5wdXRDb3B5LHZhbHVlOnMsb25LZXlEb3duOnRoaXMuaGFuZGxlSW5wdXRLZXlEb3duLHBsYWNlaG9sZGVyOnRoaXMucHJvcHMucGxhY2Vob2xkZXIsZGlzYWJsZWQ6dGhpcy5wcm9wcy5kaXNhYmxlZCx0eXBlOlwidGVsXCJ9LHRoaXMucHJvcHMuaW5wdXRQcm9wcyx7cmVmOmZ1bmN0aW9uKGUpe2EubnVtYmVySW5wdXRSZWY9ZSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLnByb3BzLmlucHV0UHJvcHMucmVmP2EucHJvcHMuaW5wdXRQcm9wcy5yZWYoZSk6XCJvYmplY3RcIj09dHlwZW9mIGEucHJvcHMuaW5wdXRQcm9wcy5yZWYmJihhLnByb3BzLmlucHV0UHJvcHMucmVmLmN1cnJlbnQ9ZSl9fSkpLHkuYS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpTLHN0eWxlOnRoaXMucHJvcHMuYnV0dG9uU3R5bGUscmVmOmZ1bmN0aW9uKGUpe3JldHVybiBhLmRyb3Bkb3duQ29udGFpbmVyUmVmPWV9fSxwP3kuYS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTp3fSxwKTp5LmEuY3JlYXRlRWxlbWVudChcImRpdlwiLHtvbkNsaWNrOmQ/dm9pZCAwOnRoaXMuaGFuZGxlRmxhZ0Ryb3Bkb3duQ2xpY2ssY2xhc3NOYW1lOncsdGl0bGU6dT9cIlwiLmNvbmNhdCh1LmxvY2FsTmFtZXx8dS5uYW1lLFwiOiArIFwiKS5jb25jYXQodS5kaWFsQ29kZSk6XCJcIix0YWJJbmRleDpkP1wiLTFcIjpcIjBcIixyb2xlOlwiYnV0dG9uXCIsXCJhcmlhLWhhc3BvcHVwXCI6XCJsaXN0Ym94XCIsXCJhcmlhLWV4cGFuZGVkXCI6ISFjfHx2b2lkIDB9LHkuYS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpqfSwhZCYmeS5hLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOkN9KSkpLGMmJnRoaXMuZ2V0Q291bnRyeURyb3Bkb3duTGlzdCgpKSl9fV0pJiZzKHIucHJvdG90eXBlLGwpLG0mJnMocixtKSx0fSh5LmEuQ29tcG9uZW50KTtGLmRlZmF1bHRQcm9wcz17Y291bnRyeTpcIlwiLHZhbHVlOlwiXCIsb25seUNvdW50cmllczpbXSxwcmVmZXJyZWRDb3VudHJpZXM6W10sZXhjbHVkZUNvdW50cmllczpbXSxwbGFjZWhvbGRlcjpcIjEgKDcwMikgMTIzLTQ1NjdcIixzZWFyY2hQbGFjZWhvbGRlcjpcInNlYXJjaFwiLHNlYXJjaE5vdEZvdW5kOlwiTm8gZW50cmllcyB0byBzaG93XCIsZmxhZ3NJbWFnZVBhdGg6XCIuL2ZsYWdzLnBuZ1wiLGRpc2FibGVkOiExLGNvbnRhaW5lclN0eWxlOnt9LGlucHV0U3R5bGU6e30sYnV0dG9uU3R5bGU6e30sZHJvcGRvd25TdHlsZTp7fSxzZWFyY2hTdHlsZTp7fSxjb250YWluZXJDbGFzczpcIlwiLGlucHV0Q2xhc3M6XCJcIixidXR0b25DbGFzczpcIlwiLGRyb3Bkb3duQ2xhc3M6XCJcIixzZWFyY2hDbGFzczpcIlwiLGNsYXNzTmFtZTpcIlwiLGF1dG9Gb3JtYXQ6ITAsZW5hYmxlQXJlYUNvZGVzOiExLGVuYWJsZVRlcnJpdG9yaWVzOiExLGRpc2FibGVDb3VudHJ5Q29kZTohMSxkaXNhYmxlRHJvcGRvd246ITEsZW5hYmxlTG9uZ051bWJlcnM6ITEsY291bnRyeUNvZGVFZGl0YWJsZTohMCxlbmFibGVTZWFyY2g6ITEsZGlzYWJsZVNlYXJjaEljb246ITEsZGlzYWJsZUluaXRpYWxDb3VudHJ5R3Vlc3M6ITEsZGlzYWJsZUNvdW50cnlHdWVzczohMSxyZWdpb25zOlwiXCIsaW5wdXRQcm9wczp7fSxsb2NhbGl6YXRpb246e30sbWFza3M6bnVsbCxwcmlvcml0eTpudWxsLGFyZWFDb2RlczpudWxsLHByZXNlcnZlT3JkZXI6W10sZGVmYXVsdE1hc2s6XCIuLi4gLi4uIC4uLiAuLi4gLi5cIixhbHdheXNEZWZhdWx0TWFzazohMSxwcmVmaXg6XCIrXCIsY29weU51bWJlcnNPbmx5OiEwLHJlbmRlclN0cmluZ0FzRmxhZzpcIlwiLGF1dG9jb21wbGV0ZVNlYXJjaDohMSxqdW1wQ3Vyc29yVG9FbmQ6ITAsZW5hYmxlQXJlYUNvZGVTdHJldGNoOiExLGVuYWJsZUNsaWNrT3V0c2lkZTohMCxzaG93RHJvcGRvd246ITEsaXNWYWxpZDohMCxkZWZhdWx0RXJyb3JNZXNzYWdlOlwiXCIsc3BlY2lhbExhYmVsOlwiUGhvbmVcIixvbkVudGVyS2V5UHJlc3M6bnVsbCxrZXlzOntVUDozOCxET1dOOjQwLFJJR0hUOjM5LExFRlQ6MzcsRU5URVI6MTMsRVNDOjI3LFBMVVM6NDMsQTo2NSxaOjkwLFNQQUNFOjMyLFRBQjo5fX07dC5kZWZhdWx0PUZ9XSk7IiwiaW1wb3J0IHsgY3NzIH0gZnJvbSBcIi4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuY29uc3QgcGhvbmVJbnB1dFN0eWxlcyA9IGNzc2BcbntcbiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDE1cHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbn1cblxuOmRpc2FibGVkIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZFxufVxuXG4uZmxhZyB7XG4gIHdpZHRoOiAxNnB4O1xuICBoZWlnaHQ6IDExcHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBQ21DQU1BQUFBQ25xRVRBQUFEQUZCTVZFVUFBQUQzMGdRQ0tuMEdKSjRNUDRrTWxENDNXR2Y5L2YzMjl2Y0JBUUhoQUFEeDh2SHZBd0w4QVFMN1VsTDRSVVV6cURQMk1qTHA2dW4ySnlqMEdobjJQVHI5Zkh2aTVPSll1bG43WGw3NStVUHBOelhVQVFIMjlqSDZjWEMrQUFJQUp3Qk50RS8yM0ZmNWFHZERyMFRKQVFIc1pWM3FSMElBT1FCM3gzZmRSRC9aMk52dVdGTGtjRzdmVmxINGtJNEFBbFhPME04QkFUc2RTNk1DYWdJQmZRRUFTZ1BvS1NjNFZLTDQ0MnE0eGVRQWlnRDQ2ZWV0QUFCWWQ5anZmM25aTWl3QUFvRDMweno1NVg1bmc5dFBiS1pud0dYejh4NzcrbFk3T1Rqenppa0FCR3Nlbmg3MnBLTlBsZEVBV2dIZ0dCZ0FBQ0g4OC9HcXQ5NUpSME9XQXdQM3VMZC9xZHI1M2tNQkJKSjNkM1hNUFRwV2VyOE5uQXdBQktQSDFPMVZWRkl1TFN6MTNOdFpubGYya0VoOWtlTG43dmZaNHZOa1pHSHp2d0pJWFpSZlpMdUR3ZnY0eTh0dms3OUxsVWJsenN4b3JHY0NCdXNGS3VZQ0NjZG1mcTVqcXZseHQvdHprdEVBQkxiOC9ITDJ0bFRBdzhTTGxNRnBqL1pscE5oQlo4MUJZYlFjR3h1VG9OOVNZZGpYWTJMejdsRDBkQ1E2UzlEbTBFVUNZUGREbHZXV3ZkMkFudmlYcWMxMWVNWlRxUGMzY1BNQ1JldjE2WnJSVUUwSGYvdE5UN0hJSnlUcHREVlRmZlNzVGt2aHRnUTBUNGppZ29GVXgvZytoc1g5L1FVSHpRWTFkYko3c0hWMDJQZHV2ZDBsZWlLMVhtYVRyZnBDUVBnRUxycmRzclkxTmFtZ3lQcmgwM2lQeG9zdlg5MnlzYkNnb1p6azVrUDFZRDd0NkFJTG51KzQ1THlrTlM0MHF2WERkSG5SNnRCZW5uejZ1M1RTeFUxT3I5U3d6NndxekNzUFpLemdsSmJJcUVZOGhEaHlBZ0Z6Ykp4dU9DK0xpNGQ5c0pMRnNuaHdidkgyZDFBM2t6QXFQWlFJVHNONzZucTJkemFaZEtKZjRGNlJKa2IwNzhZRmlNK3RuV1pHaDJGK2REaWJ5a1lvTWNzbmVrZEkxVWhDQXdXYjI1cVZrRXE0M2ttOXlCcmNsUU1Hd2Z5WjMveloyUUs5Z0p4c0pXQ0JVazMyUXdxT1NZS1J4aDZYZG0zQjRvTVcyMkVQWnphd25SNzJrZ1psdENxUHhyZEgxZGtCa3FEZFd3d013TU85TzJzcUtYSHZpcFBHSmt6bFJWTGhKalZJczlLckFBQUFCM1JTVGxNQS92MysvUG45RmswNXFBQUFVVTlKUkVGVWVOcDBuQWxZVk5jVnh6SGF6b3JvR0JrWGhBZ0NDak1zcm9Eb0tJZ0tkRkFCQndRVW5TQW9DcUxSRkJmY0NCSU00a2JxU2hPMWhsU3JDSnFRUW1Oc3NWRnFqQmFyc2RqRkpXbE1UT0xYSkRadDgvWDcrai9uM3BrM3ZOcS9iYjgrM25iUDc5MTM3LytkZDk1NHFUVnQ4dVRKTDczT01ocU5lcjAzYWR5NGNXT2hXYk5talYrMEZmS0dqTWIzNlk5LzFmWFVzdDljYjJ5OC9scGI3OTd6NWsyZE9qWFZEOUxqbjU5ZmNIQndRRURBZ0djaDNsOW9uNmZlZWVlZG4wcjlrdlQyMjIrL3NFclJndmNEQXJ3VjhmNXROL3JjdlBuTVoyMnBxVkZSU1ZHalIzOGs5UnNwOWZMcWwvTVhMajIwVkdqdDJyVmVhazJPZy9hdUkva0hCUTNXZS90Q28wWk5od1lOR2o1OC9OYVdscGJPeU1oSVgxLy8yL2pUcklDdmNraFhydVFzV2JKdzRjTDN0emhQT1J5blNrNWxaV1Z0Z2xMOUlrbWREUTA1TnF2VkdoTHdiS1NVTCtUdmI5eUgvMnNqK2VOMElaWjNmdnEzSG5wNzFadENPeW9mZG5UWVN6cTl4WDdVdHNGOSsvWTFGcGVaVDU0c2MyYVVscTZKeTg5WU0vcWoyb1phb2VPa01SOGRWL1RlZSsrTldiMDRyckE1TVJZS0RBeWMvTktDcHdESXlLaEU5TEV6Wi9yNERMUUFBRTZFeUVlTTZBY05IN20xcFRNbkIrZkhYN3RHOUJzMFh0K0d3TS9mcnFtNXR6OTUwYUtEazZyc2lBMHhiVXJiUkFpaS9CRGVWOWJHaFFzUFJseU9DQXVaOUd5a1p3VCsrbjJSSFBuVllRVStvYUZEUFFEOGpFUUFQaURkYUxQYUhHVlhibi9PN1lIUXVJSDlCL2dZZ3p0czFpcXJ0U29wS1dsTlJrelM2SThhckZhT0Z2VGZldzhBZmlZaWwvck42c1dUS3d0YkFyT3pFeElTVWw3K3Z3Q3VRTnQ4Qmc3MUFRQ2NUd05wV2VGYlczSUlRRW1KcjA4WGdJelgyeERjdlpyczdKcnU1RVdYd3dLU3doMlJrUTc3dzdRMGJYcDZZUm9EYUtPK2tabDhNQ3dzWXBKM3BFZjhsaUFBb1BoRGhxVU1RL3dBa0Yrb3FLaW9zSllBN0h4b3RkblR0VmU2UHIvUzBoK0FJOTBRZmZVM1Q5b2JHdXdkRDVQcWttSmlNdGJNK2FqV0kvNjBUWDBDT2hvYXJBQUUxZGZYVjgwRmdNbUxpMW9TS1A3L0I2QVNBR3lCVjRZTTdEL0J4OC9iRjdnNWZnbWdFd0NDU2lKdEpRUmd4RWk5elpxVmRZVXU5cFcwdExDSWdPdnhkUjBkcHh4NWFXbDdFelY3Q1lEVit0WG5Dek16a3pNdkU0QUZsVHVoWmFTZi9PUW55MUwzMlJDK0pjSGlrekowNk5BSm9lK1lOS1Jic2JHM3hQbFdaVHhzc05tZE9QL0oyN2ZmdWRMSjYwVjdEQWFUMWx4UlZ2ZndZZTNKbHJxNHVKaUtqQXdBY0lXUCtCa0FoVi9pN0hBMHVBRzhCQUlVZjhxZnp2d3ZnSmNRZitYTUs0R1dpOE9HVHBnUTZ1ZnR6d0MwTElNMldnY0FTd2FYT0J3bEE3djYvWWdBaEZSdDJwUkdldTAvVXlJbWJhbDc3ZUhEbzJrVkFKQWVLd0UwZmw2UDYzLzVuU2xUQUtCQ2lSOEFvdmJaRUw5bGY4STVBTUQ1Ym9vQUU3T3pZOFg1ZmhHSmkwL25UelRjTWgrODBpSUJhRjBBUHF2SXUzRWpxZlJHY1YzUzRhU0tZazhBYVc0QURVNGdPRmxmbjhzQVhub0pCRHBUQ01ETDg3elUya3dBVGwreDFOdytQMkhDaEtIQkJNREhGVDhEd0dqWDExRlNZdS9mL2FNZjlYdE9qd0FhY2YyaG14Umc3eXdYRHJyMzBrYjdOVmhEcXVvL3oweStuSnM3WlVvWUE1RHhNNEJGbWNuSnlWOTNQempidlFoSzN1cnFBWUY3eGZsV1ZUNXNzRGFVNE94N1Q5KzZFaTRCYU4wQVVrdlhKRUV4TVRHSEQ5Y2RGZ0EyeWZnWlFBUDFmMGRKdzBscmZTNEJtSWI0ejV5WkJnTC9IOERpYmJlaEdST2VuUTBBUVJodlpQd1FBR0RROHdscXNGa21kUDlvZnIvbi9PZ0sybWwxeHhRRUNBQXkvdGRlZSsrOTF3Q0ExbWZXSnkvS1hVVHI1MzZUK082Nzc2NFgycjkvL1QrM0prUGREeDUwZjdxSXREWGZmZit6ZUF4WTFsWVYwVkNtUFYxVHM1ZkdBR1VZRGJIcG8wcVQ2dktUaWduQXRXdlhpdWYwU3R3R1paUFF5Yk1QQVlDOC94Ri9iajBBVVB3dnZ6eXRLQ2RsNmRNQXZKeFJ1WGp4a0NIbkw4NllNWHMyQThCNG00eVdRVHJkSXAwdUJ5TWFqY0FUSnJ3elh3Q0lpSWpBRlNyYkp3R0krRmxIMDBZSDgvclF5NWVuUVBzWWdCSy9CTENJMWMwQWZvbmhuL1hqSDhNTkxQOW8xWTRQZmc3OTVOOWhZUTIzYnQxcTRmYjA3eitBL0lUUjJKOEFGSm5xT1A3aXVqN0ZjMzVUSys5L2JrUGFNK05HaVNuc0I2d1JJd0dBNG4vNVQ1UHpjNWFlZUFxQVAxVkNNNG5pV1JxVmdyMXAxc0VZbHNrTkpRQzRCUVpiTEppME1BZ0NnQlVLcVlvM1ZFVkVoSVdGVFpxWHRZbVZ4aUlBdEI0UWVEVUF2TXVTRkJnQUpDa3dBS0hsTEFLdzR3TUlGRzVVUlZnZExkd2VkRXE2QnVDZ2oxcXpwaTR1aVZTY1lhNkkwZldLSlFWQzJhUkRZMGVOV3JseUVDd01NSUREYzJ2WjZVRjBGN3o4dEI1dzRrVHZ0Wit5Z2tsR2trNGx2WjZzbmU0NVNEZzhhSklRMnorNE1tZzBxY2ZhdVhQbmZ2UE5OOVhWLzFTMFZTV3lmMUxzNEZaNWFJSHUvYmxHS2IyVU9NMGNrcTRQbXNaMmI4eVlNYjJsNEZiaFg4ZVBId21odVNQWGtoYVE1cTB0WHpCdm50ZFVVcTllU3lGdTlualh4cEE3NExlZzE5OHlrdFJXVkk0T2tBa3ltdzJRM1dPOTArbm5OM3UySDBRa0hJNkpwSEhqMkd2VFlkc3VwZDY4R2ZWWjR5VEpxSmVVYU5LaFErcnpDVXZPTVhFci8vNHZEMzMzM1hkTGUrclJKeDRpcXVtRG5UMk81elcxSElJMWhQTHk4cEpHano5R1dnazlENjFBbDRmV2tXYXk5VlJiVWExR0VWQ1lEUm9vbnUwZHIrK24wWlEwZE1DTmREUllIVnJ0dUltaldIUTgwbHZmbDRXZmhKZXR3MUNGbTZoK3JrYXpkMjhpSkh2eUllL0lIdDdaT0JZN280R1BINHNtUHFmN25Sd3ovc0g2Ym1taTJIdHZZaUJVWVB4RWNaYWt0NzAxUGRzUEFJaGIzREJiWW1JSUFPSytGOUhYSjZ6N3Q3OTlBd0RJNDgrY09RUmk2Nm0yb2dvQVlWd0lRRWtRYjhEckp6YTFhelJXcTlOcGpValh0ZythTlhIVTlFRVFIVy9Zc0dGRDN0b0hNRlpiZ3pVc0ROUGtQZ0FncFNjRzF2QTRUZ0I4UFpBVEFBb2M2SWFzV1BIaGh3Q1FreU5DZHdNSUpDVnFEYWJBOCtjQUFKRkxZVkQ5MmR2cGp2UWU3WmNBN3AwLzM1MGRFek5teStpUkFIQlByTzkrQXdCNDFPZjRoMkhvRmRaWWhzZkw3ZWo3UW1iU0JkRUQvR2tEWHYranU5UHY0aTltTStnMDlSczFkdUtvUVNRUi80d2hiN21zYkZodWZIeThNMnh1cDZBWjNzSHpXT0NoYXZlSVdRQ3RuMDBBN3MvODRNRHVENGJkK2ZCRGNZRXVrclZuYTVmd01RUEFzcW5RWk9xcUx0QnplenlzdkhkNnovWUxBTm5kVUVMTUdBbWdYcXpQZmVPTjMrSUU4UEhidUwyWWVnWUNBTysvZnovaW8yVk1NKzVIcFIvQkdYSVBHQ3ppeDNvQWFCbzEzYUFwSzlNYWhnOGZOQW85QU5zUEdpN2lCNEJMWlJVUEg5YWR2SkdiNnp4KzNKazdGd0Z0Q05la056UVVhYlczY0F2MEVrOXVVQTBVK1BHc1k0Tm16cnhRVkJTM2U4MndHUURBN2J2SThTc0FzZ05QN3kyNkhWNEdBTHllSnpHYVk1SjE4Zlo0R1QrM0R3Qks4L0syWkYvczd2NDZaWXdFc01KSHJKL2dBcEJKOFFQQXM5Z2gyQllCblQwNzdPd1VudmNCd0IwL25DRUFRUEZCZEFEZWZ2NWRQRXUzcDJ1MThlMzlCZzJhUG91Mmg5d05tUDN3aTdiR0w5cXN1Vk9jaXpvQmdNL1gwQkJ0YW1nZ0syd0dBQm4rV1NMdzhhd205UDREdTNlY3lzK2FNV1BHdDZKOW1lZEYvRXNCSUJieEp4U0ZtNHZNNW1vSkFPR0wrQUhBTzkwamZnbGd5NWJzaE83dUZBSVFNMmZreWhVcjZzWDZmVytNSlFEWVgxd3ZXSS8rdU9JYzc5bXppSmVjNEVTeERQR3k2QUY5UmZ6WUhnQncwMnM3eXN3TmhmMUdESjgrbHZjZlBnS3J4Zm9BYTBTOXVQOUhUVjk1TEhkdXI4VHp1RjdXNU9TcURkRUdBRmlhaUlqazlVOGhBTWR3KzFUczNyMzdWUE9NR1IvSzlsM2srQ1VBOVA5YjRjNnk4TEtDNnVwcUFpRGozd3B4RDFEaXgvbTlVa3UzS0FENnhNeDVEZ0M2eGZyTFl3bkFFdXcvak9KbkFNSGpwbnZFQ3dBOGFLNVlzZUszRUEyYW9nZjBwUU5JQUlPYVhJOFMwL3NCQVBhSGFMVUVJT0pIUG1qVXNXQUNBQ043L3FMVm1vejJaamFidjN4OFgrb0JkUC9EV2VpaDk0ZDlzSHYzQnpPK2ZPT05ENmw5QzkzeEwwMEJnT3k5N2RIby9aSG02RWNBd004T0hsWitZTHBGdEY5ZVFBR0E5KzgxcGc4RFFDemRVM0Q5RWYvWU4zQUM4T1A0WjVEMURCZzdYWW1mQUtpdHFZbDdBQThBdkR4eFZMdEdXMVZWVmhZUlpqQzBqaGcvVHV6djNqNmdDdUVqZmdoR1lkL2NYckZrNUJOcWFpNEs2MzNrOTM4aC9acDE1QzhUeDY4RTdYN0R0bTJiOFFaRUFINzQzajhnWVFRd0M4VEdscDA4WjdaV0Mray80ZUZmNnBjLy9TamUzK1RaL3BGZXFYa1E3aG9JaGhvQW52ZThvZ1JnQ1FaQk1Rc2dUZ0JnWHlrcEFvREttcG9JdUpQL3dNdnp3YU9LSGtpc1ZmVW5EWVpaMkovazNuNFNULzk0VWlIdDIvZCtMeDd5dHRGQVhuUCs2MFc2K1g5Z2dRRnpHRGRlT0pUNzkxZlFOQWdBdi9xSEZGTUFBSm91N0FXUUJDQWtLWHprblc3MWJEOTZBUG5XUTRjK2h0aFJzdjFUeTJXTkE0SW53WVlwemhKU1cxTVQrbG1reHg5YXd5Zk5oUVZtdmY5K2M5TTRrVnQxYnk4dHNtdUx1YjNJL2luNmVyN1VSR2toMVNaMXpuZmsveFI5bzJvUDdGOFBheDF2Yk84UmdKY3doWXA4QnZwTWNEMXQrMEdmZlBKN3hVbytDQTU0WWMrRFBYdjJ2R0EwdmtCYXZmcUlXK3hlSDNrcjhpSjlReEplZ1FOcHUvVE16WnVwbnpYT2tRNytPa3VtZUNDT1UrU2kyU3I3a1I2UmtRWi9pQTB5NjJQV1ZLbFVpTHk4ZnN6MU1TZDZzK1loTHoxdnUwdDdJTFM0VDFScW4yY1U5ZkY2WVFkcE1aSUFHNmRObXpaNWJYKzdQWktHc1hpMENNOXh3WiswRG11Vm5lanhzSE1ESnUzWnUyNHZrclQrUVR0WXE0LzhudldIUHp5ZUNhMkhVeVNSYnpNS0FPOUNHaFoxNVBrdTY3dUdsYVM3ZnJ6b2VGYXQyNnVZMkNwemlqaUlyYktmTGRIMmJ1eTdlS0xrUjhvQWFYV2hRTkxIOCtxRUtpckt5MHRMUzZPOGJYVlpRcHZnOGRQbWJWL08rakgwSXZSQ2xMWTA2aGtQQWNCR3FMYTE5Y2tCekMwSFZnKzBSOXJRRnBxRnRXRVIxb0JQaHIzK2V1dFBvY2V2UHpJYUJ3VHNlVE9SQXUvclE3c2QyQWdBNGc2OVQxUGxmbUdWc1g5Zm44RVNBTGs0RVI1R3NiL01ueTJ0YnpHa1BRd0FTSDFzMmlUREJ3QzJ5aFllVmRncSt5WE9EQXdwQ0N6QW96VDdEbWwxMmZxUjhWR2NPTXRrOUEwcGtVdnNJN1l2UitEUXJsMnZRTHRXcGRiRlBBVkFxOGxnTXJjeWdLRUVvS1FzSktUTVlRZ0xEUW40Wk4zcjYwVDQzbmdTckg1ZzFyQmNXYUlOQW9DTVgxcGxYcThHb0JVQVhOWVg0UmNmUHF6VlhhOHRxazNicEFUQVZ0bkNWcHl0c3A4dHNDQmlmY0pWaWw4Qm9GaGZ1N09FNVJDeUduMEhXeHdlUUxZdmYvSEYydHAxVDU2OElnRDBHZjJNSmlsS0JTQ3JQZjVDYzNoNzZlNHp1d21BdjhacVE1Y0xNd3dOQTREV24rSWZ3b2VxWDMvOGtRdkFRQzJyR1FDVStOa3F5d3VpQXFBVkFDYTZyTy9oWXNSL3VCaTN3S1pkN3dHQTFnUEFjRXZmaEFRQW1FRUE0RHdMRWdvNC90bXp3eVlkWXF1cldGKzl6V0t4aENLbFRqblYyV0VCeGtoSFg1L0c4alNaRVpvS0FMV0pXYnV5WWdXQlZSZ0E2dnFrOWhnRE5oNTRZdEkydDJqYm41d0JnQWwybTFYVFlBbXhoRm9OVTVERy91Um5IdUcvZC95akVhMFg3a0lEKzk5dGd1Nk94VHl0eEs4QTBLb0FhQ0dleHorcldIUHBVdEthRzRlMWh3bkFoaE5abEx0TWh3eUcrSGhER1Z2bDBQWFoyZnY3dzNvTWU4dlBpanVmNG9mMkFRQ3l1dERteldkSTF6Y3YwUHNyOFNPRkYyQXMwVGg4UXI4NENpRXpjalNLbmkwOWI0bDVDK2FsNHI5dUFjQ0JBMW50aHVZS2Mzc3BBNGkwaFdnTmRGYXpnYks4bjNpRWp6Y3QzODBTMXJkL2YrbWtBRUNKSDg3TzIxLzJ2NzZlQUxRTTRNaVJYMCtNS3FYc0ZYU1lBZWk4L2QzV1hMSGFvUU5UVWdhNEFZU0dpZXNQVFNFQVN2d0V3Q3JpbjRENEdZQXY0bTlNUzVNNXlhbEdYMXVpeGNjbnRDRHdLcWY1bjVGU2JvR05CdzRjYUcwM20xdGJ6NXpaczN2MWJBQUFLdnRKREF1ekFlRDFjMHI0REVCWTRmNERLSDRDOEFjbGZnWVF4RmwwZXRSV0FBaitSd2pBNkRVeWZ1b0MzeHQwMkY2Sm53RFE4VU5wZVFBQitEVFk2b3AvSHhKTFUrYXUzamo1SllSUHd2UjVab0ZOM3YxMm9WeGprRStvWGJHKzRvNzFXSDVkSmE5VkFMRDd3QlBNQXJ2UDdBRUFmYVRWZ20zTlpremNzekhvQkN2aE00QnZoVGNmTU9DQjhPWkgvc0R4cDBockN3QThQdktqTnFrYUFQYUw4MHNBeXZVM2ZGK3NVMXRwdHNwRGFSa0EzZ0tBRUlvZm9yd2FBUGhaM2YyZGU0UldlVXZBQVJxREtINjVaREtFNy9ueHJpZXhtMTdadE8wSnh2aFhYMW4xUTVVQVlDTVFUQ3N2bjd5YkV1WUw5SkUycTlqZlpKb1NCZ0FERVA1eHQ3NTdNSk0weE1jSFVVT2Z6cjlQeXdsdWErdnRUaGhKQU92ZFBZRGMvTGpSYXlDK0N4aURUbTJsMlNwYmVKbVBIeXd6eWhMRFhIMUlDSTk2d0VBY0FsSXI0QUJLU1RodVh0NGM3NUJ5eUoyWmo5cURXYkQyU1NKbUFkYXFCU3A1Q2RQb0I1ZnJ4OUxEZEVWREc2QzVjS25CL3h6MWtkQjNyQWNQMkJiNytYMHE5R3RPWGlyV1U3SEdFZ0JTd0kvQ29laG9zcklUMmY3cEZLbXRORnZsWUY0Vy9qdkFJNmtNb1gyeTFrQklaS0JIdTFQRHdmTkk3QTFaYlArVUlnUE1BbjA4aEZuQUlPUk9hbDNQNnBubHpTUWxLOHBIZjRGMnMrQXdqU1JOdkRzQ2FkbDc2YlFpZjl0YnFEQmROdnpQZnhjeTgrbkN3MU9VTEREck91a0VpN1BYbm5nbytJRExZOFVaWk1tR09tc01uMDl5UFRJOFZ3amhXRVVrWElZNG1ZVnUyLzdxcTl0Slh1cXNMb3hKaitYTVpxRVdVbWRuc2thYmY4b2xXT0k5Umw5SWswN3ZxZWgxaWQvRXBxWlJVR0tPaGtzcXh2ZXVaR20wSWR4M2cvLytCUHJkNzM0bjc5M3dYbnVGRW9VT1hjK0NsSmNyQzR3aUk4cnYwT240R05VYmJoOFRCUnR3RE9QVldlcnh2MlA5U3VpUHVrS2NCd2QweFJQdXN1TFNIKy94VW1kMXI5ZG01WHN1WnpaMzVrQkx4Q3QrQU5Cb2loQTVDWTZZQU9ERW1uUzhLUnBJcjdjQmdKcDJ1eURrYWhjbWkrRUFVRTdTcHZQUUZScnc5eWZjdms1blBIVXlBcERva1FXUEJRQ09YTjdEYWZQbytBQkgxUk44ZkwwdDZPclZxMVgzZUM3QzhkVlo2dkh1MlAvNHh6Ly9XUURBUTQ0cm5taFhGbHJZWXhlQVcrbUo2YmNTRXlVQUVGQ3lxSmRQZmtYNkhMcDgrZkpYQkVCVHlBUjJ1QUQwdFdqU2ZiaDlCR0FVeFgvMXppOEhWWGNwQUhacTAzbTlCTkJwdFhZNEVUOERVT0tYQU5Kay9BeEFGRVRZYk8vYXlKM2FBQ0F3Y0gzZ2VwL1FydTRQVVo4dy9uVzhYOWdXT01TZFpSN2JSRzgxamtPVTFYamVEVUFyRk9leTRpKytXRlcxdnI0TkFNVExhRmpMdmVrdUFKdnlsWUtJWEljdkZjUUl0ekxCOW81RzQ0Q3p5bGNBK1BlMStHalMrZm9qd0dETzRoYmNPZnVYWDM1Ym5aMGRlSWdCN055cDFRcXJ5Z0IrMVdiOWxiT0JBVVFUQU9WMVh1d2hkUlpYSTdRM1VWcGxmU0tTNDVhRWMwTUg5cC95VHZlS2tRQ3c3V3JJWG5lV21ZRE1yRDMrK01ueDQ3eDhJcXQ4R2lUczQrYko4eTZWM1hqNHNPTGtqVjI3cWpBOUFZQ0J2R0pzUWtMZ1hyYUtCQUFFT3NDZFpQZkxkYmpqUndRQVVPSnZ4eTd0L0JLK05LdVBocVZZVFg2UEVISjEwMStxcThNV0xjclVxZGYvbmU1UGErT3ZNTFBSUEIzZEJ3K3ljaGFEU2tlcnM3Z2FGaUFsaXYzMXNTSHIxNGV1djBvOG4zMjJYb2VBSFhod095dXlkc01Zd0pEYXgwK2VQRDVPeXdDQThOTTRmQUl3ZFdmZHRJcUt2S3lNWGJ1S0RQV0ZSUzh3QUczcjNsdnRGMFJCQXZlQU51cXY3SzJEYyszSzlaL2c3Z0d0bEtSamE5c2pQalNRRjYvZXFjNys5dHR6dEt6M1o2dWFybDIyQmNxTCtqdmRvMVVSdnlxekdiU1VwT1RYNlhsa1cwbXZwYXF6dUJMQTZkT3hPRDRES01BN2tvUnphTXlVZjMreGN6VUN2bFZnaWMrbStDV0FJVU5xano5NXZFa0J3SmRmQW5pVmhqNisveHVSakd5VEFPNDJYUmpWeEpNZkFDanhFNEN1dmVSbEMyU083ZDEzTkpENTl5SkZTUUQwUVJqK3RQSHU3ZmxocHF2NnkrcHYvOWxGN3duMFFleFo0ZzFiQklCWkJDQW5Jc0phRW0rUUFKVDRmL05hcXJtbmRkMndDRk1QaHVIVHAzT1dRRGs2dlMxaGZjTCs2djZJL2lVOHZnUEFrQXMxKzV2UEluNjJ6dDYrNTZBc2ROQ2hqeDQ5T3FjdndzRVFQeDJPandjQUl2NWQrWVc1aGZrU2dOWjgxNHdOR0FESFAwSEVvNThROFBYZTJGangvSmtDeGQ3VDh1WG4rQ1VBM1A0QUlMY1BGdThOdXFyRHppRitsTkQ0aGZDamlnQVFzeXdLb3pRTjBFc2M4ZUo4OUxUSExrOCs3Wm1WK0xuQm5KWDJLTkFBOEt2VlEvLzl4V1RZa0RObkpxOVZXMm01WEY4dmwybFN4L1gzQU1EaFUzNWtlZTd5WFM5NG1maDhTdDc4Uk5aRE9ldEFFd0JBbWFSam9TNnQ0YTdNMFRLRmNXeE50ZkUrY3Z2Z3NXS0NqczNVOGp3RkFHeGQwdzE1MERJQWtITzBRU2phU1BNM1BhNkJJK1JuVnRvakFQQUVyQlJvNkFlSHROMVlEUDh1UnJhMWFpdXRYZ1lBTFRaMUgyODdwbitTeEFBQTBwRkIwYVFUN3d1ektiT1F3Vjkza2ZDL1F0MTNqL1RJMGs1a2cyWXFveDFZWTBWQndsS2RXWGd4NlZ2THpLbFJyUEVqUlU1M1E3UVFkcGVuRS9iVzdHN0pCcFpPcFVtZkxWaTlhclhRV2todHBkWExaUDhXekZzUUZ4M0hoMnZtL0NqckJaYVg5VWJ2bXplbm90WldXbXBaM0FPSlVndkN0a3EvMnUyVnkwbG1iaU9mWmh4THFTV3V5Qy9GcFM1cWJDeWlXLzZMVW0vb20ycnY2bXJ2UjlWR3lDUmtORXJzNnVPcHJTMmJjcGFaOTFCYmQwQ1Rtc1RpUGQvaThndHV6eEdWUHBvSWViVFk2MXFKK2FUOXBKT3l0RW5RNk5maVNCbHhjYldzTVRSRzdMQnRkRnZKOG54STlGQXlLRWhna0pSYTRqcUhwaWdqUXhNWnFhbXJ5L2ZWMUhrM2VXUngxOTh6bWpUcG1FWm92U2JlN3RSR3E0K250cmFHbmxZOW5KZlQ0N1d1NVlBR1ZJS1NaSUVGN3k4S09yZzlSNUMrK3IyaUk2L1c5bXl2RjJwMy9ZTnd5cVFZY2wvRmMxNFRrY05BaytyNjBBa1BoQnpnMHdrQTRHTmkyZnlEQ01BZzVWVVJLa2Z6NHV3T3pXSk4wR0JOdVIwUXJuazNqVHJycWxoNjhPMXd2RGx5TkNCcDZSK2swVHFxN0FDZ09wN0sya29BNmI3eFNnRkdldVRndmtFbFdCWUFFRGdpZHhWWThQNWMwREdNcmJMVGd4OTA4dFZUUGRvNzN1dW13KzRiYVc5NFdCeVRscCtmRnVNQ2tKR2hCcUQxQUNDZUZQMnBUZy9XVnprZ1RwaVhVVjZHdENDZUQ0TGk4Mk4yOXZZR29EczEvTHJ2eTM3OW5nY0FEYVd0ZzBKd01BZTh1ZnA0NmdJTSticmRZbkVLTDQvbFNGNWZJdHFqRkU2bXM2L2cvVVZCQjE4UWIxeGdlbm80eDdxcWYvWFVLZHI4MWkyWklmSmFVMUxSMFlFc2JVeE1XbW5GVVFFZ1A1L3NZRnhjZVhsV24xWElHUjZ3MEp6RFdvc0daMlNJQmdlRndKdkRlQkJ2dHhXVno1SW9yMlhsZTQ4Nmk0S0lPMWZQM2FFWGtpdjBRUTQ3cGE5Q1FvVFRuUDMwNDIyN2QwOGVqd01zc3pSYXlsd0FaSUdEdndDdy9SUThPYlJSYUJVWGNJaUNEcHdQQU42TnZRb041dmdIbmdPQTVYVDdORFZKYSszMVdVWFNqUnN4YTI3RVhFdUxhd0dBbzNIVS8rT3lzbkJqbHBkbVBlTm5FeGtZVjE2K0hPM05FS01RSmpnckdpempsMWEwTVRMSTR4TDJ2ZWs5S3JCZytJaXVoQlJVRmhNQWZyb2ppYWU3NEtjZjcxNW04ajArbmdEZ2ovdkJSOVFPQXlBclVtajJuamM1Y0pta09MQ0thNXU1UFRPNFlNTTdjUjBSRVBFTEFNdHh4QTBicERYM1NzWFlGd05kdTViV21aTjBiYzdSak5yYU9NU1BIcEJSQ2dDcktXY1lLcS8vbmpOcnA0a0dteUNRQ1FsR2c1WDQwV0RaQTN6NnUzdkFuVUVqUnR3NWQrNUxBSmkvUW05eGNPc3RGaHQ5SnhIcDkvVGpEZXRlS0p5ZDdBRmh1VlBLaEZYMzl2Y1hYZDRoc3NqYnVRTzRJR3hrQUQ2aVBaeTFSZzlZai9nNS9JR1BBR0Q1OGtKNDJRMGJ3bkU4QVVERzM5bVpsNWVUb3lNQWlMNjJGb2syQWtEMzRPN1FNMjZqbEljRzE0b3VpNnNZRWp5bXJweGV5dVVKbGFadXFWaVduejVZMHg4QVFwdDdKNlY2SHhzKzRrNE4yY2hEMzg2Zi82RWVSc2VCOWxzbzg5b0JZNkkrM2xoVkFRWURTSGZ1ZDVxRWtVRVdHZnRqNTc0aWkyeFdVcUp5UFRxZktPamcvV2xRNVA3djR3SndTZ3Vob0pFVjdoVzFodU9IS08xeERRRDQ1YUpXV3lvQVVBUE9oQkVBZ3d0QWJaMlloQzJoYURBL2Jia2ZOdktteG1Sb2JKRjVtZ0VETkwvUTJFUEtVNzJuRDdyUFBocTVyd2Y5Q0lEZGFnZUFVSzJob2Q0R0FLcmovVThCUmlRL2p1OC9SLzdVSjRTc2JsOUh1dGJwTDYzdVV3czJSSC9rNWJLZTF2cktxOHRkMW5zZmxEc1hBRVM1T1hRWTlkYTYzOVNTNnVRc3dBQzBCeXlUbFI2UUFRa2JFZ0lCUU5iaWNnZ1k4cUNwZFJwYjNNNmROQWd1UzRyVFdDNFpqd1ZDWElBQkNpdGdkWjJSR05CRE1BczRiU1VBb0RyZS94UmdzQ0ZZdng1aGtia1ZWamZJdjYvTDZqNjFZSU1MT3M3eXN1dnR0ZFNSVit2Y25xRWVjeWNBaUZwYkZ0VWJpRXBienBpeTZOS3NEbGhML3BTMVpRdXE2VFp3a2pDWUpPdHVTVk5KcFo4bklRZWFmL05tUGxLeXo5UitiNFQrK2NqNDZKRis5aU05SksydW41KzB1dXJqa1gyVDVRc3NvNURmLzdPNnNtQ2o1L2E5M29JKzVlVWpLdTBKVnBMTUpLL3IxOFBEWlJhV3E0aTNrMHlrY0hiTEttY3Fhb1ZsQ3ZjUXRHakVqeVo2ZW1GMUZyZTNDcERhNnZLWmhiSG44d2RMdWV5dG5xVThuN0NURlNsbHVnZU1pazBXYUpkNkNyVVpEVGZtd2VwL2NZM1M1TS9obXFqUDczVjlNajB1S2puQTdaUXRGZWJpUldpVnQ4eC95ckhXNkdFMVNZZjhIcmFhMnBzVWEybTBRV1JsUTBRV2Q4RmlVcmtyTDVYSyt5dG0xM2lpVW9nM216WnRRYkFOc3JwTDdDZnB5U0N6K0c4QlhFQ2hZUlZBeGoxdlNzbUNEVlVCeFRmRlRxM3pwRE8rTGk1L1E5T0Zscmc2dGRYMk1vdlpDbjZNdFhNN1BTOExBUFErSFFBNDhJY1BlYXJkcUZlc0p0ZjZIdkwyYmJ5OTd0YXQ5dW5DQ1FJQXovT1JrV0tlQndCM1BnYWZLV3hPRlZZWENZdmp3dXFlNE5BbG5wY0lnSWhjRmtRQUFBZk9md3dOSXdBQUxSNElrS0VwTUpwNlpyV2oxUVVVZ3gyWWRlMzJHL2hJQitWVng2TFVWbHNDY0YyRHl0NE1RQnp2RlFnQUtQNjJwdkEyQ1VCYVRabUYvUmpMRVYrZG43bnVWdnVvNGZRUkZRQllvSFJIMzFES0FnZFg1RU1TYjBaR1hJeTB1aVUrSmNMcUVvQnBydmdaZ0JLL0JLREVIeFlCQUlNRUFHMTZOUURvSllBZE83UUNRQUtuTDA0M041K21icEI0cU5FWjc3Q1hsRlJrNUZNSmZGT2QvT3lPeEovZGVaMUE5OSs4V2V1ZTVnakFMcGhGTEwreWV6Y0IyQWhabXk1WTJXbmg5ZmVTQ0dFMUVUOERBTTJEM1dlSERLRnVNR2k4MFIvaGwrQ2pxdmdTQnNCbGM1VjB2TXBDcWlnUkY0dmlON0FWWFYyNTJCMytTOGphS3RkVFpvSDVxN0lJYVVVakpuRUJoWUhXeHlzQTN0eTQ0ODJOYjJyNStLeU11dnc2NGZRcW5Ca25UMmFVN2FRZTBQWDhNcW9YYUtVc2FDdml2V3ZRbWlRQTdxSFE1dDdia1N0NVJjdFdZemNEMk1FQXdzTkRKSUN2Rmk3c2V3ZjZrblJuSWx0UG44dmR4R05ZdkdrY0FQajQyT1B0OWhKZlRxcHlBd3MxR1JuYUltUkJYUUFRZjRtQkc3aTJzbnduYXhscDUxUjFGam5FWVJmcWdCbzY5bkhPMFlEMW5nQUtOeGJpUDdTOUJGQVhWMUVobk43RDhLTHc1cmlpaXJxNGxYVUhLNDdWSWY2bUM2M3RUVTN0clUzVDc4SUppbEpTcFFjQXdLNVhlTGxRQVhDZzZvTWJWWWlmZThEQ2VwOFJTcWtwQUNEK2UwaEw3MFVQR0Q1UzcwL3BMWFE2cHloWTRCemZZaTIwdU5EZ0JvRDRCeGk0Z1F5UVpuVlpQSzNPTXF1WE9lY0lkZ1FBMHZNR3VQd2JEK3lnOVJJQTRvOFQyMCt0QUZ2eGxWNTlUZTZ5MFZoNXdXUXl0TFlhVE9nQkFGQ3AzS05pRVB6eHJsZFVBREQ4VlYwNi93VVdmdzRBWkRVVnF6b1N5MkdYSHd5WmlUR2dId0doTEhHb2o3TWswam1VQVZTNEQ1NEJ4Y1ZjcjkwRTVmVWZrSlRHYjM2b3g0Z1NEd2c5aGt0aFA0UlFDRHR1M0ljNmRZRURGMUNZUEFId2Vvd0J3Z3FQYlZvSnlYSlhmRkN4ckNnakR2OEpyNHVyTzUxYmsxR0JMRE9VUStJc3N4ZXNLS2xTcXZlZUg3K2lCbkFBcW8vWVRUb2dzcTQ5ck9mQjdtMjNiclVPcDJVR1FOSDRESjFnRVZubGVkUDQ3cEt2ZkxkRXFkLzlvY2NvOFRNQUpYNENvRlhpbHdCZytsUUE1SG9GQUljdnZpaVpXc0hYSDRxNW5WRHprOUhxTExOWFVhRkxKbE9ScWFodXo0dVFPQ0RQQWtibFVZdmt4MWJUdzNvR3QzWGk0aXZMc29EQm5WV2V5Z05jM21ZU3NvUUE0UG55RndESU1DZ2xEOEVqWGMzL2tBUUFQYlBFNFd4OVBXNkJGNlJEa1cxY2kyK0srSnNuZ1FFOUFCMlFPd0V1ZEdOZFJvVTZ5K3psL29oTW1qV3lmNnVpeWZkdVdFVlNuSjB3Wkx3NFV2a01UYWViQ0N1cUxPdFZGUXhLR2FzUWR3U1laZGNaUFd3ZVN5a0ZGdUt3bFp4b09CZFFYSWlHbXZVa1Z4SjVnNVRhU2l2bkhzM1NxZVExVVpVbDdRMXA5QnAza1FXdkZpY1hOdnZRZkdYN2NSOGZtcXM2b1Bvek9wMUtBcWdDbFN5dzFBS1NucVZBL1BiVFhqM0U3Uldubi84MWpyY2I0bG9IbWU3K24vUHo1a3JXdXUzR001K2hWbm1PZkFJQ0FGVld0emRWRTlnMDVWQXBIdk5UUGF3blc4ZkxpWW1QZVh2b2ZtQ056dHYybFJ4UnVHL3AxQVVYT2w2cnJEZDZXRkd5eXFzWFE0b1huS2Uzc1JJVDJmNVlBc1kyUFY0bk5KUFVTMm52L2E5d1FKM3lld1BpVzJPY1Azd0ROOExRdklIUDN6Tys3L2tYSjhJdnJZR3VKQlVEZ0VocXlydWFBSlNYYTBJMGVhU2pSd0dBMW90dzJEcnFPczhIQnQ2aHpiK3RTYmk0UkFkbjE3akUvVUk3VXdKdytQbzZ4TE9Gam1zcm9qLy9mRU1tcitlQ0Nvdmw2bFVmZXFIdTQ3ZDJzY3NHMFdBNWVTcU1qMUFvdk0vUWlBQjhKWFpublJ2QnVsNnU5azQvdjlDY21ienduOFpJZ1JPd3dEUEVUNnN4ZGVhRWE1eE9UZmlTbkhBKy8vT2VXZXRjZTBjRFZBemw1QndHZ05iMjlsYjU3MEw3M2ZaK0FGQ3FzV2c0ZmdDSVl1c3BMaWRiVnh6d05nZ2d6Wk9RMG8yQXlOcEcySldIS1FaZ0o2c2R5Y3ZSM0NHZERiWXlFNmtGQUJELyt1eUVnb0ZjVUJIUUVBSFZWMVh4WnlOaGN3VUF5L3IxRlArVWlJQlpvMHptWSsyZXRjUWMvLzN1ekU1VDU0UDFldlNva3ZqNFNCL3c3SS9qQVVCNFozTjZaRjhmMy9UbUpSc1l3TUlMcmFRTFVPdnd6OG9jSFIyT0RsU281VjY1c2c4QU5LeDBCN0lzSkdHdExhcmFYWEYrTmlyMC9yNzdmUGI1OHdrWE0xSEFBQUNVcGJaanZRSkFmSlkwMEVuTFJ0OGdkUFhQSXlJdWl3b1JMcWk0bWxCUWtGSTlnUUZRVVdwRGhOTlpid1dBWEFEZytBTUQ5dzhkT21WS2FNQXNnMkZRKzNCWUZzLzJUTCsvRUlONFo4cWpnWHFqZjRrZHBvUDdrd0NnTVdrZE1HTkRJMDNoT0QrMTEreGhyV1d0OHVIaXd5ZmJHays2QWRqdGpraGhQVjNGeDJGMC90bnlzeml4UDljQ3k4L1VzaFAyeTgvUTdCcmc5c0hlSW12TFg0MkpsTEFEeStFNEhyeHhabGhZOGdTdUVHR3JqT3JuYWdBZzR3TUE5Ukg0bEN1K3c1bExBRHBRK21seHhtOEx2RlV5dEtURWNuQ1dvZlY1Zk9WenpBbVZsRGs3eUFuZVA0LzRNNzlHY1NvQmNKYjRsOFNISUg0K0hqOG9Ob2VHTHR2OGtOb2pBU2pXR2xud1M1ZUsxNkJNTTZlaWRNbGhGd0J0cEsvQnczcUdxcXluMkorU2tBU0FQdE02Zno3bDYyUUc0TzhSdndRUUw5NXFPR25aRGVDeUxHYUdWZVllc0w4YXl4S0FObDZMdDEyNSsvRFYyQ1ZUWlpHemNySFpQRG12YlBMbThPL1JBNGEzOSt1dXgrV1FGMlQ2L1paTXhKL3lEYmNIUGNCR1BZRGpGd0JNMmxQTDhqYWZ5VENGNC96VVhyT0hsWTdpU3RYREVEbFVBUENOZHpnZGVIcXo4ejlId3p4OFNRb0FSNC9TNi95WW8xRnNQYlVLQURpcGV3blplTXZ4WmNyUzdxMkx1TlkzVE1ZUEFRQVVTZkhiZURtYS8xeG10ZElZWU1ZWVFFNXlZRUZLeWpkb0x3TUlDNHNIQVB6SFNRQXFLb3ZpOEw1dzJ1VDh5cno4dVBMaVdTdE43U3U2MENPbmtBRGc4ZmtXVTJkbVprci9ad1dBb0NDTUFVRVUvN000bnA5QkU1N1RyTTNhdkxtOHNIbmhCa00wZmZiWDRTNG1kb1NOWGlQaXYzYjd5cElsdDIvcnZOamFZbndYRlFiOTlRUkFPNVFCNEZ2aW82UFplb3I0T0F1cnk3bVlYZk10V2VGdkQvWDZPcE5xZmJ0a1hwWUxJa1RCaFgxdzMwZ0RBNkQ5TWZwMmQvY1RuNmtaZzdnUW9McGFGbFFzS0gvSjlTajZwMS84WWt0cTc2TEZJREF0UDM5eVhuNWRYdjR6czVERnFGQjA2VXM4allabjd2L0dWUkNCVzRxckM0YUtNUUE5d0p5ekpGcWJuMitJWHJna21nSGtEcVJWOG53RTRERFU1M0RPN2R0MEM2Z0xDcVppK3RkYXRIbHlHaGpOMWxQTDR2VmJBd1B2dTJhVk95bjdkZDRoOTJSZVZoUkVxQXN1eGs2WHF5RnBsVDBMTUlMWHlrbFFVcGlhVkpsZldSa1h0N2c4UDZNOEkyTmExS3lWcFR0MnZQamlSZ2pPL01BcTNSS29wc0RkM2xORmJ1VkRXVGovaG1ZVGozY3R6UVlDRUlGUlZ6a2ZpclVoZVJkY0F3QjFscFhzbnlIQUZPVnlqMnc5aGRQazlVc1BqVk0rT3h2LzljZHp4NDlWbGlGMXdjVlkxUzg0ZUJnOUphdk1MbHlxZU9yaHc2bXBsNHFqb29xZmlTcnVNK3NFckxtSFlQNysrc2lqdmR1VllnZmE3Z1gxK1hWNlk0OFR6b0Y2V09GUERpbGZ4WkhVV1dCMVZsWStGZTEycVRlMHdDT0lRS2tFK1NhQVFjcDZFMUp2bFpSU1lhSCtBeUNQbjFzVG54TXFtcTJTT3N1clhsNUw2dlVXbllGYjRLWFdKM3YzOXZpRkJYWFdWRnBUL0VGWTB3T2lTamcvLzAzV21kNVpkUmNTTDlTSmR5TjRNUks0Y3VYNjliSHZ0ald5TG40Y2xhSE5xRkNzc2ZOL0FDU1NsRitNR0tDOCtmU0ZqSFBiV09KNEJ3LysxVnNsZFh2Vnkyc1hRK3VnMkZneTEwOER3SUhYUHI0Z2ZtSGhzNGZRRGVnTDBnMmRQaEkyMC8ySVN3QTRCNTJmdjVFZVFuY0F3R2swL0hSZUhqL3U1cVVHcm55K29DQldOUGhnNDhHdUtLM0djTWtLY1IyRGRkSThJZlFZSWZmdkE4aGZqRURCQmtsRzRBOEFIRGowRG5Ud3I2NTZtQUFwZFpaWHZjeFdlK2JNMjdlM2JRdWpuL0o2Q29ESC9GRmtRczFkQm5DaWtsTDRpekVSYmViU1VtRU1URTNIek9Jek9RYXc0MitkblgvYkNCR0FGalMvaGVOWEFEUTI3dSs2ZUxIcklBQmtHT291S1ZtZHNneWhpb29Nb1UvNTgvZ2Exdm56TlYvajliZVVxQjk0djAySm53RG9wRnhQek9xQ0N2VXlBWmk4clFhL2Q1Zjlmd0FrY2cvQVBYdGVBcGdHRldxMGhaTTlBTng5ZmtXVEo0Q2l6T1FpQVdEQlluUjhjZjFCWUhOcTRQTUFFQWdBQ2ZzUGdrQlhWTVdsUytnQnNvNmxhcEpHcUtWRkk2VCtCUXBUejZ5d3VTemVLVlZHNnRDeHRyWnNkUVBnZUx1NjVDOVc4TEx5Q3hFQWdGbG0yKzJJaUhzQU1PV3BBS2dIWEtBZThBUUUzajVCeE1ycC9OTzR0SlFCdEZPS3BwMnNKQVBZc1R3dU9UbnVSUWJ3ZmNXTkc1ZUVNTGRjMGtrQUJ4TXU3dCtmMG5Xeks3NW5scmRNeHBlOFNBR2d4QThmWVZKbGhmK25GcGtWdlVTbjZSUUFPQ3RkMzlXVmkzZ0pRS1M0ZjBSOWJ4QUFUQWFBZXdVRkFERGxxUUQrVzl5MWhrVlJSbUd5eSs2eWdyWWxlTVZDTTRzUW9SdlFLaUZTQmxHNTZDWmlZWWlnRUlnRmxjSldoSUowWVV1VUNMTWJUMW1oUzRDbGFSSlBFUVJFbGhiaHBSRDFxU3loSW52cTZmNmU4MzJ6TXp0YS9hcmVibTR6T3p2bm5XOW4zajNmT2U5SDhmL2dldjZISDU3dnBQWnlNQWJLMHBFU3BBZnovWUtBNVl1V3ZiOXNrZG5NQkdDcTZQTzJscGJNejZsMTlwV2hVWmRnOGgxbGp2TEhTT0NpWlV4QVN4eXcvZU05RjdDYm4xTEhOR1d1Z1lIeXYzcEpnSWNEaFNSQWxhNUIvelFDWk52ZG5qMnk3VTczL2xBaVlGVkozLzMzOTgwakpYa3FBc0RBODRlK2Fhb3JxNU1FWUNhTGxCamlWd2d3NzN6Ly9lYWRaZ0FFSUFWM082WUI5cU40Q0FTUTF0L0tNa1A4MkJFRTRNdS81K2llb3lEQTZwblZ6ZDNHNk5pM3IwUDhhVnF3TkE5NG5KRGNldGZuV3lSdUI3WjgwcnFEdnY4TVBBKzM2eTFNOVcxM2VzY0lFQUNWTlc5ZVg5Kzh2eUlnaHIwRm5xL3IvSUVkRm5xL3hQMWZ3YkhqcHJGcVp5WUN2SERhWXpSWEdCa0hKQW9DQXJieTVxdEphNEtBR2N0QXdJenFUUjkvdlAzajdYdTIwd2hRNjlnd0FzN1VnYlBJZkd5UlJVWXhzMUxNQ3p5NnRuV1RHajhSOENrRG5VZnlEeWM1V09peXhDdG1RbVRPR3hjWGQyMGNtN21kVElBTEk0RHd2SEJZR09vcGpjZU85Y3phZ2dEY0EwVEJBKzRCSUdDU3NwMW1yOFlJQWdLcnFxcy9CcmJ2T1dyMWxNYTVlZ0owV1dRUUFJaHFYZ0FFcUU5QlF1KzNPdWlsdkw3VytGWktPQW1Idll1Qmt3bDRyVjgxV0NCNENtTnRnbmNhZytYZkt5cjBiV3lpcTdrSzJNRFFkYjJkUEFMVXR6UFd5d3puV29sV29GY0QvZnYxVWw2cEUxREtqVm1raWxvR1BnTXZQVGgvcXBHT1dqc0dvUGVaVWxGOSt5cHYvL3BWVHNweUxlNVMzbi9wYVI1WXludmZ3ZUR0K3F6ekVBbjVDV2hrZHlTR1IyTktNRDQrMW9IL2M1V0FzdjlsTzlxU3FKWjVrNUxiTmd1a0t1ZXJyeFVtS3JTWHp5VFEybW9TdUpFZ2lpb3VJS0JmQVBCVHBXTzBJekpTOXJBc1dOQVdQTFIwWlF3OVZ5SWlzSDFVUWNuWG5KVmRTWWpnL1UvVHdjZHZsNS9mZXd6ZWp2MFpTbFoyU0RtaHNMczd0NXcrSTJ5SW96d2p3d0d4akZjWmtmbGgraXoxTDdWQnRXK2p6YzNwek04Q3dveUdVTTdoQmNqejVZSUtxVFNCYVdyV1diVHhjVlo2SUhoZ1lOTUFaNlZ2N0FERWs0SjlqZ1VCRTFUcGlDb25RemxzNVdKamkySUhTdE4rOHZFckNFenpwU3FsRVZ0blZHMGR5bG5aRWlvUW1NZjd5N2puelhNVEVEakJGL2FIQUcvbi9ZSEQ1NHVzOHhERTdXanVyTFZYdVBERGxBaklpVXpQeVRjWThJbVJLU0JBWkgwUEhKQUZGNCsvamZEd2Qyd2w1YzVqdzh4QjljU0F6VmVlTDB0bGVaOGdwWWlrNnlSbFFwMEtNU2tyWGIzdXEyRVh2cHY4TG1XbHVXTkZFSUFxQkRjQnFuU01UaVFDRUg3Ui9EMmx1MUl0a0paZEJXbSthV2tqMHFxMllqdG5aYmtLYXdidmY0VFEzOS9kM2QvUGYvVFpGVmpnK3hJRDIybC9qdjZhaXlZT1A0REVDQk5RWDlIZ0tNeDNWUkFCMFE1azluTmlpWUNVSUNhQTRwODRlalRDcC8yNXpRMjF6Q0Nndkh4bUpVWkFvWUVKa09jTEx6UU1ERTVmc1JjYUxEUStCQTV0bzhJd0ltQ0E0cWNuN2NlUFg2Y1NBRzh6STBuajhXSjZmSlFxSGVNZGlaSDVkUGszSVh5ak9mL3JrQzVmaEY5UVVGcDY5amtvTk9Tc0xCZEl6T0Q5U2NHY2YrZ2lvL0dpUStkZmp4Y1lNVjJTQU42Ty9ZR0p6Y2FKUXVvU0FSWGZGRGtpd3p0aVlqUHp3OG9wTlpjU2FUQkdScFlud2h3VCs1OS9XRWlqZnV4L2hlSTRVUmsrOCthYW1aV3p6VEtOUFV5ZWJ4S1p3UlVSd3NrTGJTcWF0Q2orblRzUENRSjgvRHluMzVrQVkyN25WN1ZhQWlaZERBalQwM2dVZmRMbDc5clZiY3h3NU0rbXZqeWtNRWVQU3l1dGlrUHBLa3ZYRXRreHp3UUEyd3pBTnY2alQwUkJZSmNnZ0xmVC9vZnJvS0syTlNPaTRaT0hPRUJBYUU2NTBWRVVrd2tDK0xHTmY1U2tKUkZ3eldpYUdtMDhRYlcreHh4WmUvZFdPdmRtaHM5MDFFelAxQkFncE85VVI3NFU0c0JaYlNZbTRLTnRPejhpSUFsTFNsR1ZTZ29CL3ZVRFFXYitiU0FJR01ublRsTDBpdmdjWFA2MlRidTZ6WkU1NGJEVyt0b1BJNkNyTkM2dXRQUWNHZ0VzWFJFL0NHRGx4ZTFUdDhBeThOQXR6OUtmZldCbXRwWEN2L05PMVJGaXA5RzgwK2hmaCtNVEFmbUZGYkdPMEFVZE1abmhzYlBMVXpMU01RalEwNWtZNUo4WUdVdjdMMnNjZmFCL1hPTUx0SCs4TXlzV1U5dEFUMHRmWDdna3dHZ2RJYVd2dmxaWkVQQWhqNERQUUlET29ZSUoyR2RzUUZraURETGNCSnl2Rmp6RTUrRG10eXM3cUR3VzFaSWdBRkp6YTBIYUNJUmYrdjNYaXNNRDErSUtBb1JJc2FSbXAyL25QL3BFelBBa2dNM1RjQWVjT0Z3YzM1R2Y3M0M1Q3V1Ylk5ckRRUUNNa1ZQZ0NtczA0a1ZrZnZoczN2LzkvbkhqK2hFL0UxQ0UrTG1ZdDY5dnR5UUFPV1NZMVVrQ1pQeXliUTdLa3VwQ1A5eUcrSW1BRzJ2VXlYWXlpTHlDQ2ZCdmFQRFhFR0E4WHkxNGlNOXY2N1RqNHUrK2RQZHVKaUNnWUY3cDJXZFhWWjE3N3RlbmZUOUNPRHp3NThXeDlPUU1scS85cHB2c3Z1ZlNuL0VWbUFFQ0tFR25Pa0lNUDdUTi85QTFmSHdpSUwram9yNCtwaDdGdVV4QWVVbytFd0J2Y0JEQSs3Ly9QcDhQRXlEaVo0QUFQbDhpUUVyZkU0Y1BjOEdTQk5yNGhESy9XcmI5aWVPcDhZR0FmZnZFRjA3OE5tRHBlSTFhNERDMXZqWXhKNVlRRHVBck1DdXdDNE1JdGphWTdLcTZsbXR6NVZPQXBTY3IyREUzUWN2alA0QVBQWjlmWXB5eWxqZGV0TWtXRm5KMmxnaElzVmdjK1VZam5vTCtRZUd6OWZ0UDVjZC9iQ3hZSUpoazF0bjZGN1hDK3F6emVQMzJLOTRBQkFFWEF5Q0FwT09Oa3dHUnRUMXJTTHhhUFF6QVA0cXdkS2szNHd2T0VuL3hLbkRVbXpCR0I5NDc3dzRnajdmcmZYMDFoZzhNdk1iZllSWkxtSEFYNC8zNURmeU95ZGpibzVwWkpuMXp2U1hVVW1FQlZiNEw2RCtmL3lNS1FLWVJ2UEtTQmdlVFVLcDdnZFQwYzNYU05TbGFacXpqbzR1cHNlMERBVkZjREh5dGdtdDNyd0RxTE5RWGJla3dBYUxBd2t5MXgzdzhvZlJWdWEvUDRpSW13d2NHTlExOThPQkJMeTJtTWxRU25RR0xGL3ZPbkQ1c2N5Q2pUUEVwVm5aaEZqUnRka3JiSFg4VTRKVlVVVkZmVWVGNHoyd2pXSE45TnRaNVNORm9wOFBCWlh6RjZkbWpJRDAvZVBqaDR2THlZc1huNGRhdmQwbUkvdUtoOENXbTJXd3o1dU4ya2k4eFMxdFJzTURIUXkyeXRuZnpUbjN0TUxMUWhvY05BY0VUcE9QRXdhSGVCejBJUUxNNVE1aXh6WDRpSXpWalpVWjJ5cjBsczhnUXZFdzZSTkNkWm04K3ZtTGpiWFpqc0dmYm5UR2R1bkJFZ1lhMzEvNktlaGRLUzlkTWtWbGZINzlKZmRvdXNDU25LN0FOUHZpUmxnQkl6NFRtRHg3K3hsVXlxNlQrdnBrelVlTTBFd1NrS1NpbDJsMnkyQVFCTlRXb3hpU0xUWmEyZ2dBK0hpcFJBZjY1RHhBQk9CTjNIcE1JbUdTNDJjQ2xjK3c0c1htb05mVmxEd0k0Y0RtN0V6dDdVbXBNUWtSSVJNTHFFa1laSENKWU9tZUdIOTl4ZkRjSVNEV2tUdkh3UFU3bnBwbGhza0FEQkRoY2FFNWZZN0V5Y2ltcm1xdnhDVTV5Qm9JQVowWXFiRUtINVc2NzhWZ0Zjc3o3UjQvdTNNc0l5N1paRmFRQ3RaTUZBWXNXR1kzYlhtQUNSZ29DakdhV3RnOGgwNk1hM04zKzREbGF1L3hSQWQ2Q0FKbUNJUUpzcWFuVzB6VUU1R2ppaHh2ZHNPeVlrRUMvaUxlbnNCOThTWmwwaU5pTEcrYngzY2N6WjQ4MzJnMVRaUHh5QktSc1lUTTA0WGlCcjBDTTArVnlycm1ZU3dLbWpCKzZvMkNTNzdxRkM1V1NsMmhuVzF0bG9pVUU5OXlRb0l1b0RXM1dyUDE5ZUFZTUd3WTE2dXVOMklEc1hidGtTUXdSRUdyWXR1eWREaUxnSFpOYTIydG1LYXdZUXNSVWlJSUZzMmNXT01nQTNLeSt0dXkyVzYzZVk0ZDRqZ0NLWDVxeFBaRmhENW9WYVg5eGVpUGlCd0dLUTBUNHBzemR4emNkbnowK1dHMnJwUG9ENWZNb2ZpWWd6NEhMRHlnallLaHJmcUR2c0dURndRRUVWR2JoOG84NGU1aDk1MFJ1UTV2VnR4OE1qRVA4UklBNFlFSlg2UzdoUUVHK3hLR0dtbmZlV1c1c0pnTFUybDRMWlgwVkFwbzNTa2NJc3paK2FlQ3crRDVnSnE4UWNlc3YzdDZiZHlOOW9CQ3dvY0tsb0ttcHlUVzRLbUh4NG1HTG5WT3lFRDlRZG14dlpsdmJrMjBnWU5QdTNjZkRtUUFaUHhPd2Zvc1lmVFRiUlo0a1hoZFEvejZBRVVmQ1lMejNRR0R3c0dTKy9BOElBb290Q2ZoMitnVWRJcWxNSTJCMEgrS2ZRZkZUWjZjNkFqZ0xTNzdFb2MzTDMzbG5VVWN6K1JLcnRiMFdlcjg2QW1LRTlqZnJzcmowNmo1TlFjTXZZemR1NU9zdlFTdEt1R2QzejhnMEJjN0N6WS9SeUFTb2JZQVFja1BDVGRLM21KdWtxUDZBNzBHNEF5bWY1MlcxRVpSdnNUV1h0SE0yMGhVU25kRVpWclF0NHZLUEZGSjU4amROZlhQbTlJMDd3Wm5KZmFadDhtYXhVNkQ1UENLZ2Joa3Vma2N6K1JLVHRKVUU4UHZsUGVENTUva3hjUGZhMCsrUk0vRUEyZDlCeVJudVk4Y1Y0UlUyTlNvMWRjcFVMUUhsaG94WUVmNFpnZ0FaL2p5RTMxZzFOVitOLzlpUTNhWnA1RnM4bkNET245c0JSRGwwU0JTeXhsNWpneS9SWm5XblFmdW53ZFdjZ1BSRzNORWdLdmlaa05zOFhFckp5Vzhjb0pvNGpoK3BXWk5IMjlwVnc4OGpYMkkwMGVCR0VOUk12c1FzUlFVQi9INHF4bWFzQjJCdUZwMGpnK2RtcmVmQ3hrNGlBamhMVE81eDA4SmdURDlwV3BpYkFIaVJXU0lSdnlEZ1NSREE4U044aXA4SWNNZGZYWDBNQkpCdnNjWkhHTjVpaUo4SXlMNXdURFlJU0xVQjZuMjhGdHBmdHJreEMwZDk4SkN5KzllNXBlUjU3RkVrOFNrSTBFbE44aVZHYVZ4TmpkRmNDRjlpc1YwUXdOdlhxa2x2Z0FqSWtVT0FBUUltR1c4MktsVmFJT0FDT0ttT0J3TXFBVG5LVXdBOHlCRWdLV0FDc2hRZG4za2NiWURzVzZ3NXY3VVllUVNhcVU2bEVVQnVuTFVDYnhPR2ZyOTBBNXF0amlxQVl1cXN1MHlWa3FqajlZQmVhdExtR21SbEM0TkNGN20zaHdiUi96bVB0cThGdFBabTBicGFYc2cvODhzV05jdUovODFRR0ZDVzAxREE4aytpQ3NEK0hydHdPaG9ucUloOXBaZ0NZcGdoZklYRjFSY05lZ0x1MXJWZWIwK3AycERrbVRjbVdlbk80UUkyQlhKSVhSWVZkVVdTNWgxNTA4YXFXWFpBWDJzc3pORFV6MXV2Z3ZYektaZjQwTXdYNlIwcHVDWHZWZUMwMDlUMHVTWkdMNWFpbWxyZ3NicTJOZFBBUnFGU0FncDQrK2p1WXFkbXNhd3dlc1JycGJQTnMxWTROY3BpeWNidUxxY0x2N096S3FmZThkNlhHMFVXRjREamc3N1dHRklhVUxQVTZrUUpwbTBlZlhUdHFaZjRHRkQ4dmt4NlJ3cXVSZFlzRWVJOWFSU3lwcHcySll3SEFUaVFwaFo0cks1dERWblY2a3Q4Z2JRWmNWdXhIUUVtSW5CZ015QUl1SVpxZDZVamcwMGJQaFBnYjgvS2FpcXJiR3JMYk5rTkFwQXZwL2RJNU9wcmpTR2xseDlvS2lpUVdWOFFnTUIvK09hYkgxNG5nSUJUTGZHQjBJWFhHUWpRT1ZMazBXU3ZjSlRnL2IxSGpSbVQzTldWZkRXRENjRHhOTFhBY3FrclYweTNVR0tVVnY0S1MwNms0YTVJdnNGR2c4Mlc0cFR4bnk0SVFQekkrRTFzbmdpbDV5WkFCdmhDdHIybXNyS3NyTDJzSmJOcFNXd1lDSGpwdlF4MXU3N1dHQVEwbFhWdExhaVNXVjhpNEJDbVljWUpCdGJ5OGNrdWduMW96ZjVpQkhEOFRJRGVrU0tQSm5zMVM0U01SVTNweFN0WGFna0FuWnBhWU5HdUhqRWxMY0lxQ1ZoWTJEQ25ldGpXcmFqdVJVYkkyTDF5cGMzczNNenhuNzVaRWxEblAzTDR5SjNOVUhvS0Fjb1ZEc0taVkZhMnRjTXZQNjVsU2N2VU94NUp3ZHBSZTFlem96d21TMzBDUnNsYVk1V0FydFRjTHJtRUJ4TXc3aG1na1ZZZ2VuMnRDRGcxSkNSVlU1dzl3UEV6QVhwSENuYWgxU3dSTWdRUDNJVGtaRHNldXNCejhWNmNOVlZyZ1FVQkZZR3Jkd1JXU0hPMHdvVno2dWU4bTN6Mk9hVkxVWnhzNjU0MXE5dXdzdUg0TWNKeGs1bCs1MDZzSTlQK2tjTkpLb2ZJTHlqUFdJN0NYQjBJYUkvdG1VRUU3RzhKdXlQU2tJRnMwWEVwVFZ1SkFHMnRzU0FnSTdpS3M1NGdBTi85WndqakJBSHBRbm5XT2JPRjlCWktFdkZMQXZTT0ZBb0JTT0xoZUlJQUZERm5YNm9sUUs0bXA4NnZtOHYzN2kySFl3RVQwREJuem54OFA3ZWZjMjRwdG1NRVZOaHNJZTRzS3hGdy9zU0x6SWRrZ1lNK0N4dEtCTFMwTk0zdncxMXVNQk5mZ1VoYU5rdXVnTFlhSTBDTlgwcnBBeTFkVVdWeDR2MGc0TkZIcnhVajREVVFjS2NnSURVcUNnU1lGUUlHWlB5dDc1cjBqaFJVSUhGL2licEVDQkVBNDVtTmwzS1BQQWdRcThucENEQm13QVJJdEtsUnJlMmNCdnBsMFBzNEIyenJ0bVZQa1BGSkFwQlRiVGJYMVRXUEJBSDZnb1doV0krd01oTUZVQzB0UndhWGJBWUJ1UDRaNm5TNXJ0YVlmMHNjYUtxcUtzWDdGUUxvSG5CdHgydUNBR1ZQYnZOS1p3S01SaGwrNzdzbXZTUEZpcG1vOU9ENEJRRkdJRGs3TjVtUGdRc3Nhb1UxdGNCNkgxOFFVTjlPOFFOemgzTEFDY1BVZ2dRbWdCNEFkVHY5cnhsKzFjbExibmgzcHEzYnZIbCtTOHNnc0dUemJCQ3d5dUp1NnpIWDZtdU5KOU1TSCsvakFQeCtJZ0Mzdmg4T0gwYjhUQURmMVFGYUxnMW1hcmN5QVFOTVFHOHJDTkE3VXF5Z1VpZU8vMVUrSHQrWWR1eklOUXY0aTFwaHRSWVlCRXp4OFBGRmJXNzdFcVhON04ycnZhL3REdEV2cVdIK3V5VTNRTURxckVyRzV2RE5STUJlN1pvYXJmcGFZN0hFaC9yKzlmVDRCMTVuRUFHQTZMWUdtQUNjdW5nTUFpYTlJd1hYSW5NV2V4NGZ6NndXVHdnQ2hoSnlHZDZFQzdRcURUQjVvalZOVjVCQVZOK29kM0FBTkpQMGM4TlVlVG83cjNVOGpxc3VxYUdyTlpaYVczMy9lcDM3V1I1QjAyYW1iMDNUTzFMUVhpczJjSUdFUEY4bXh3MHZvNFRTTzZsUm5neWNtOGY2YzNtTDg5NVR6MkQ3SUdSdVV2UVI4aTZUdnI0NnFYb0dnQUlOTG9tWUNnejE5cXcvR2VNTXYybDh1UE54eFFoWjMvWm10Q2t3UTFwYkxNKzZjUXZES09EdUhMdWNjQnJqbEZMNktrRGJSNmYzRmM1WXp3VmFBaTdYM1dzaFRSbXlFOU5VYkZ4c1NId1B3SmV3d2VYYUh3MmRXNzhTU0JQUzlLbzZUNmw2QnJMSHFBVE9FWGc2ekR2YlpzZXl2QUV5Nnp1Mk1pRWxJU1RGbnVoMGt0MWcxbFNlS0ZYUHg2SnZ3NE1waXRZVzVSYjkrYk81R3l0ZklYM1ZlSVNQc0Zxd0lYeUo5YjdDL2tnWktWbnJ6ckl5Rndod055UGo3clRNbEZlY1FyR3ZBVHJMbXBZaFk1U1Y1WUxVVEdOcFNnVVJOVnFwQ2dKeWN2Q0RUVnIwZ1FDYlBjQU9GNlVMcFpNVUNoc25UQUFkWW9hL0NBVGd0NFo2UGhhYmdXdG0rYlVnUUxQdURsYXMwSjAvQ0VCZ210WHgxSGlFajdCbkJzcTgwK3NsdDBjd3JXMzV5QjE0ZzdML2ZVMU41U0JnVWQyMjVwcm1adnpUOFFJSVdKeUJxNC93OXphVkhYaUJDV2dYOFordEZFUXMxMlFZY2tIQURjZ3Y1Q04rU1VEcUpWaTJXY1FQQWk1SXdIanhpOXBSVk5RQ0ZFMkZvVUlHdHhLdUlreFBlaVV4YWxTcTM2aml4WXppRlo5dE93UW9vK0REWnlVQkxwZFJJUUFYVmlOOVJUeDNiZG55S0tVaDdscnJFOEoxcEFVRlVxaDU0YkhFRUJPNkw5MnhYc2FQM2VrTmR4SUJ6YzExelhVZHk1bUFOY1pWeG1KeCtWOUEzb3NJY0xuanY4U2VTMW5nNVdyYlNPaFMvWklZZGxzQ0h0RFNJdi9DOFVVSmlWRWJFemM2aXNLWmdMQVZNKzFtK3hyQ1FXQk5kTjRqQWNpOCt6cUpFSlR1M3FwK1BUUlN1SzRDK2RIbC9Cb0UwRnAyQnc0STZRc0NFTTJXbEl3TVVQRG9ReUNBQ3labTRJUllhbXNKb0N6RlMzZGd2aDFRWnB4THZrQ1d0M2xuYzBkSDNhTGxOY3NRY0Y3a3F1SlZ1UHhOQjE2UUJMVEwrTStlWUlldzRDendJcVZTRHdSRXFQRVRBVU54QlRUbDl4Zk1qU3plc2NOWnZpTThmTUNSNGdnSEFaaHRVT0ovR1FRc0RoNlZHdUk3Y3hVUnNNWk5nSEw4SUw1Z0QzZis4RU5QQTdKTWQ5M0puejhhTlNhSHhlcDQ0b0xpQjNJSzRnY0JvbUFpYmR5NFVzU3ZKK0FPRUtBdk9KaXNMcWJHQWEvQStIZlN0NS9pdjR3SWNISDhJd0t5M1cxMnkvM2wrVEVCRkwrNkdwek5Nd3VjaXhIRVgzOFFNTEJzRVJHQUc0d0hBYUhPbWM3YTZSdy9FNkI5dnlSZ2VXZGRUYyt5aDRnQVdjRFIzeStsci9BUnZqMDkvZmFIZUx1UTNqTlF5UzFYbTV1MjhXZkNid0kvdCtvTERraWFOak1LbXdVQmF4bzZjZms1ZmlLZ2dlSWZSai9PY0V0cHZoeFo0RVdhUjIzaGtKeW5uMGI4MHFQMHVUQW1RT01IRU8xRS9KVlU0VlMwYkZsUmVOamNMMzhXK0pqd2MrLzRqVy9uVGcvRnV1RjhmdXZtSHBTT1F3Qzd6ckJQOEgwM2Q3YmNkd05QdGJFWm0wYjZDaDloM0FpMktGTnhicVhHYVgwdnZYUkZBQjdMMFJFQll0MjF1a1YweGZQcWNma1h5ZmlSOVkxMnBRM3pUYkNpQnViUVJjT3gvK1hYTEpxamRXZ0FBYy9oK2lOK0ptQzJUWTJmZ0JHZ1ZIanR4bEs1NFdHbjhBa09zRWVwcjFlczR0RUI1QUVIbzBXZWYwdHM3TzBpUU01U3E2dmpnUUIxS3BLMm13M3lzeTJNMEpQYTVrN0s4cm9OS2Q0aG1PWjBsblZxVjZNTDIrVm45OS9aWERkeW90ai9zdVdlRGcxVUVJRzdBQjRDak5sbVhlMXd2SlBMM0FCUmtQRlBQc0czcmlJbzN4RVFJR2NaUlpoRWdQb1VvUDMxMnk5M3QvSEoxZVpPTWlmVEZSd0FKaTJPRHI3ZzhmcmRkOSsvNmpMczd5NUFNSG1DNUIreXpPNFNCNUp6MGd3aWwwQUNrSFBDRXYva0U2enZzbE9Gc2dDWFZ5QUhpdFU1ZEZKYWJzY08yaXkyMTFrbVQ0elhGVWlvQXB5eG9pRjRVckNLS1ZmcnM3VHdSdkZ3SnQ3UmR2cXhqNGNjMjZTa3ZybTBnbDBoTnJBV2x1KzlTcEdtK3VPTkI3VDExbmtFRnZqNEIyalY3VDk1OHVQVDVrNCs3enZsdXVtUFp4WlF6ZFNlZkVWbmNSSGxLUlh2aExYTUk4V1BLSGVlRmZXcFU2NisySTJieHV1enREZW9wamtQQTIrZElXdDl4U0l3c1dGc25pWVcxU0E1UEZZV1NMZy9UMTh3b2ZjTjVsK0Q1SlBscWlkdGtHVHEzT1h4K1pNN01Ma0IrKzdRRHA3Qk1aM3NVNXpxQjZ0ZDVUVUllSDI5UnllbFQ5UWtqZkV1Q1BEdytnSUJXRVlaaTJsTFBMNWRuNlg5dmtLN3V2cXVuMFN0NzhiZzJLTDg5dlpZSWdCNWU5RW9DQ0ZBQkNSa0I0d2FGU2dlbFdWeTlUaFZDdXQ5Z3lrZmtKN1RpUVZQbW5xSzF0eWZaSnJmRTlpbGZqNEkyTEZ4ZGNlK2puMytiL0FTRzN4KzJaai9zdnRKbitKUnRCeWVzajhJd0sra3lGU0xnb1UrZmwxcEpjRG9ScnFUTnZhbnBLdXR1VUJ4dlhWWGR3Z1lVQWpRTDJ4TXhjdnJxaGN1dE5xcnVjM3RtRnpTSXJhb0tiQ3FwV2cyRVRCVE5FcXlFUExCOVVnZDVldDJmNnRrU3lNSDRBUWMwZUs1SDFOUkVXSGo0M09PTDMxNko5RFVmcEFJV05KWFVxRFdPay91d0ZqWlY3Z3YxUExHcDVJQVg3dmR6emZBSGpKQitCUm5qNEt4c2Jydzhoa1BiWHZvMGV3UUJlOUNLbmFsalI1ZE1vajRCNjhkZmNUZ3FiVXQ5ZlZMMmczWjV5aGZLellzTURhVCtkZ2hpeVFnclFXUGdWQnJia3Z1dTlXOStiTFd0Nmlvb3R0TkFEdTlCVUlPRXdGMnE5M1g5NFFFYXBJNGZlTE9PaHM1L3U2S0NtdU1Ra0JEdy9UMCs5ZTBkN2IzSEx3LzJ0UVF0SEIveWJ3MFdUc01BbFp2V3IzdkRmK2dqbjFNQUVsZnUxK0MxYzh2ZFFKdGx4ZE1YWGo1akllZktYeHcvYzgrRXIxUVNsMWJZZXg3M2VDNC9iY05qcE1FcE5UVXBJaUNodnI2NXgyMUJzc3hCWFJBcks2TitNKy9pS1J2NjQ3T3pvVU5EWE1LbDdUWDd0bURFZUJZd0t2TGhZZTNOTFdBQUc3TWRIRzM2QmdtSUlTeXdyN3V0cmxvSjhldnB0MHBmdVNwa2FOMmtmU0ZVblExZEM1WXM2YW9wNzBGdnhWTUZxeUVnNHFWTkZrTGZCNFRzRy9mR3hRL3B1OUorZGw5clg3RDdOWlJ0RjFYT3d3Q0hxMTQ5TUV2OFVvQUJQQUlhQndjZCsycmc5Y3lBWHlObTJYQlFrUG5senRpVXFCWkJJYndDR0NManpwL014UGdLSytHQ2lqMHI5L2Vsck85TjU2cUxsbnB0Qnc0TUJnK201ZThjRkg4SUVDdDVqN0JHSDdpaW5pbmV2MVBUOW9zYTRQeGl5cEdTR3NRME5sUTFnNENzRVk2cERLUGdNWjVhVW9XK3J3M1ZnK3N3N3kxbkw0WEJBU0VXQlA4VW4xcHV6NXI3WFhXYXc4K21OSnRWYkRRWjhMV05FVUp2L3BxWTMrayt2MFg5NER1bUFwSHRMcGlvYjVOamR2Y1ByN3V0c0phYXZPU0JJUVRBWmt0TFdlRnp6NmRabXBjRkg4WkYwRXRqYUNlWVZtUWdJV1RrNG8xTTQrVldWUE51dU9EZ1BiT3BpYmNBZmN0MjBjRXpKK3p2MFRNb2lnRVZLL20rQ1VCeURvbkpFd1lBV2ZKUzJpN0xtc05BaDVjLzYwR1YvZ0VZNEVralZzYzMzU2d2YkRFSGRUWHFsdnhGRmdRUFVTRjNwenNlOXorR1ZXRWdwOUFnSWovMGllQmNOUHA5MHhmc01ERi9jSlhFZ0ViSXNvQThsMG14QTNxemRONEllaDNWT21OTEc5V1QxTjdUMC9Qdm1VdkV3RkwrbWFVcXRJWkJMeTllcU1JWHhLQWVPMnBWbXZDS042dWw5cGV2NnovOWxrdEFkNDcxQnd0Y0Y2ZTZ2SUVIa0JBeXU1NFRmenhlbk15T0ZNenlnV0dUT1hIUDBIVSt0NTZqM0lUZEYwSW9KYlg4L044OE1pV0Uwc0ViLzFDMExmaVBKd05yc0N5cHZZM3lISEMxRk13U2lPVlFRQWVnN0o4QXpEOWc3VEdDUGlPY1lXQ2FicUNCOVh4VnFBdDNtUFIxbDlNT2tEK2FaMkp6OUNXK3RMMjA1T0FRVjQzbUJQUWVtbXFsNzc2aGFDbEZJNlBqeGJvMWUxdk1zMzFxRG40SjJudHBaZUtWZ3prQjZ5Kzd0ZXRFcjJNN2Iwdk0yQjZKcmVyV2RiTFR4ekJCK3F6eW5xQ3NoVDRCZkFNdlg3SmpQakVsS3lwVXhNZGlaSTN4VjNDSXJQRWREbE9reURtWGoxeWhNc2ZGT3hvdS9YWXgwbVEzc0JVUUg5OGZieGVlcWw0anExaC92d0dtMTE1M2JwRHdhWk8xNmFlM3BkcDRRRzRhU3ZiM1cxdUZ6V1c5S0hBQVFVTmdGclFZRklOSEFtbUxNTVcrc3Y0b3ZpbU41aHRGVmpqNjJIQ3pjRHA4VVlraU9tMksrNkNzM2sxT3BSVktsbmh2UGU0M29IVHZsU1E4WDdVeWtQeU5XRnBrcERleGU0Q2pncXJyYnZDVUlHL3U3dTdLMXo2ZUVXQlJFS0M2c0JndDdVdlhEamZsaUJmNjZYcHl6Y1h3NFVYNWRseXUySnVkcmdSMWxxMzdSK2s2V3dPWFJZMGNJcE45U0YrTld1TGRDREJyREQ4eHFaWVVIcGJ3ZmU4ZEVKa2ZFYTZJeU15SXpJb2ZETTFTSUFBSVJ0dHN0WTM3NzNwcTVUamtUbmErNHVuZjZNNS9sTFpacmZhWGNCUkVSR0Q2Q05LYkxhSXdMTEdUaW5kdTdvVUtjeFMwV3ExcXc0TUNXQmd6bnhyaUhnTnkxYXMydlFtZ01MTnVJNGhnb0RwMHk5VXM4Qms3dFhZdUIvM3dNSEdmaENnbmNwYWU1cFlLRmxLM1hsSHM3WVlIek0rWm41c1BZM0xXZVpDRUZDeUVpMWpXN2J3eWg1dnRYNnB0QUYrREZTYmxNWFliT2J1enM1dUt3aFl0UXJGMnFOSnFwT1A4V2xFc09wenZFRkk3NDE3S3pjdnduMFFCRUJEbEpRc2R1eDl6elh1U0ZsM0VNVUxGTXhRcERDRWlKL05iMWpBQ09zd3hZRWh3VFovRGpIQXIvRitRNHFNLyttT04wRUExaWVGUithRlFrb3lBYmo4VFhQUWxIZWs4ZEFIVE1CVE1uNU1aZ3FoazkxZ3RJdjlzN1k4UmxqL2xpOG9QOGR2bmRrYUUyTTFTcGRSZUl6cXNyNkZJQ0NDWU16bzZXdzZVaUVJT0h6ZzhPRVRoNitsMnVNOG5xVkl4d0RpTEhKU0ZrbnY0dHE5bXpmdnEybGV0am5NYVF4MUJaWTRzVk5abzZzaXNaRFBaOTZNMGFQajRzNW1LUXhsWkxkaFBDT3BwVWhGTUlDQ2dDWFdFSHB0YUc3R0lCRHhQeDNYRVgzNnpld1J1Z0JuTDl2aTZQTDM0Um5ZMTlqNDV1dHJQM240ZWNLYkVwZENHQUhHaGlWR2FvRGZqbnNBTHIvbFFmOFArTDZVWG0raGlTQ2N2a1Nocm5hNGNLa3dXY0ZQSVhOUGo5a29DRGd3c2JGeGVQKzFKSjN4R3ZFWHJ6bFluSUVzMlpxa1k4NUtWSGRuRVFGMXplK0FnSXhJZ3lIQ0ZweTd1cXk1T0FNRXNJMHZqWmNST0g4bUFQRUdRQ2o1Wlovcmxvb2gxaVczM2JiRUdvWFhNUlV4M1JrY2YwOGNMV1Y5OGtMSkIranlYNGZMWDBmVDE2ZDVacFZwL1VBU3hzYUw2OFhxY1R3Q0huenJnNWVaUWIvcUcxSjQrQ3Q0SzEwYnY0WUFZNFdydHJZK05IU0ZHQUVuVHZRZnVaWnlsbmpOOFI4RUE1UWpqSFpMNlgzTFFNRHM0c2dVdzdKQUlxQXgwdUVQQXZqOFM1RVdsMUtZcEtFZDlYdzBJYTlLUlREd3dBTUxVNlBPOWpaMGQzUDRsT21KZXdNRTZLVGtWYTZTUG1pZ3ZzYkRiNzRtQ0ZEakp3SUdYVTNBRVFYNzBVbWkrcVFHcGJhL2ZMTnFza3NFOTdLVWRzTzBJVWE0N0dDdXFiYldiQW1sZ0ZId2NXSTRqazZsdDcxdXZ3ZFJzaE9mcGZ5VTZPenJhOXJNWFdhTkJ5cWFXcHBjY1VHUTB1TDh4MjBkZ2FTeEpJRGlEYUg0dFZJeHhMcndnUWZtcElaNDY2V3BYa3ArNFZvb0xqOHFXQ1FCYXZ5dmp0dndqT2ZyTC95eS9haFZXM3lEZkFLcU0vait6NENycjZWUTV5dk1CQVFDWmxvTUdnRlFWcmdFWFlYOU9Cb1JvRDhmRUNCL1N2VUFnZ0J6czZVc3psVmNhR1lDZUswS2F2YkQva3pBcWFVaXhzQjF0eTFKOWU1VmJzcDdxdllndzNHU3RDUXAzTmRZOHZ6ckRCQ2dQdlVJRzN5NkJMWUtlQWVwYkZyUy9mMjdYbFpzaG05Z1JGL2g2U3NNQXVSVGdON0RCT0FySUk3ZmVLcUNqSGloSCtRd1lBTDQ4N3FScG1NQzlGTDRyNlZpcmdtbzdXVkFZUDdVZTBwcGlmKzEvNHNUSDdpenJtNWpzQTBDK3YybkVMaEVwSnJocjF0ZVRpbEVVQ0NPY3ZSb3J0eHB4WXFrSk9Yb3B5ckkwTGZsV2R4clR3aWNKSVVmMkdDYXE1V0dTVEM0bnpadG5kdnlJZ3pnbzJHN0IyU053MVZYalF3OVIvTisvZXB6UVpNMU9XWmduaHN6R0pmcThNY2tUYkd0YmRJZlh2ODJURDB4QXpzMDBqREppYXhuY0lJc1kxczNOeXkvUE1nUkNUc291UjBPRFZGK3FwUHQyUDY2dWtPV0JQWDlsOWNwNkNrb2FFazd6MmlvK1lhQURsZkNWYU5IcUVCS3FFckdIYTRRa0QzbDkyeGVaWldxQVgrZmt1MzFiOE0wdnk4UXBiQ0tGR1lDVnE5N2U5MDZ0dlloQWlMYjJzcFJteSsyZ3dCRWZvbmk0bmpKMk1HWWk1WmZ0RE5oZ253L0NMaEl1bnVQWEo2V1ZqTVpOOUZPclJTZU44TGRJZ2t3QVVWRk9RdHluQXZ1S1NyQ0M0UGgxejkrdFJtNnVndzIvTUZnOFBxM1FWblZzcStxM1ZsU0ltQWRDRWhlbDJ0TVRVNXVSWU5DWm5rYmVoUGs5cEJzdXdMeTZMelExQmx4emZLUk95M3lmd2VEQU1SL2pTd3JXVDdadURMQk1DQnZnai85dEhVOENLRG9xNnE4Q1JjekFVNk1BQXlCQlF2d2dpLzg3OWxSVWZSdnczOUJnQ3V3cWE5TVdlaDRqa2tTa0p5Y20xeUx2MEJBWm1JNTlXWkk2YXN2VUtDOFBGV0xpNnpHeUN0QWdEUjNIM1BPYlEra2VVZkZ6QXFKcWw1WG5aek1ibkN0ODBZZy9MUnpxNnB1U3NQRUVBZ1FHT2pKRkg4d0VINGRFeHg4TVM3L2YwSkE1NUt5T2Z0bHY4V0dzajNKWWkyTDVHUmo3ZU52bTBGQVcyWWJ4ZitMbEw0NnFVcSt2WDJCMTV4UEZpbHc5Wmw0M3VWMWlybTlJTUFlTW11VzNTajVoUklVQkZTOTlWWlYybGczQVprb3BKUU1TSi9qbTI1S01QeEhCUFMwTk8wdmsrZUhFNXdXTEsyOVVwUGZmaHdqUUM5OTlXMXV1SWVVMWNEMVJFd2xuVDhaQk1qaGYrVzVENEFBYzhpc0FuTTFINUw3OW9nQTc5S3FIeGRWL2FRU2dQakJRTGdrZ0c4RCtQcy9JbUFKcnYrYzk5MExLVTliTFU4MnVkWmNpMnB1dmZSdEw5U3V4MTkvbmFtekVSVUZPLzNGZEdCa2xsamlZcVJLQUh5V3Y4SXM0azgvL2NRTkdDREFHNmlxYWptR3BoVkpRSGdQQ0JoUVJrQXFmL3YvczN2QUVqVitRUURIVDBERzd2Rld2ZFRFa0ZkdUdEeGlCaU9vWFdMeEdxVmdRVjNpNHFaekh6Q1ZnZ0J6enppTkZKNDNodU12cmZxcENrMDdJSUNSMlRNd0h3TkFmUW9BLzlWVG9NKzE1SHpOUXNwejhmZ0hraVVOcmFlUXZ1NDhNR0RxcDZmZ1luZkZRclM2eE1XRlk2NjdyZFRiYUs0NXdCQkdGNWZOR0tOMXVVMEdBWXo1Ymgxd0NTNDg0VC9UQVVkTms3VUxLU3VGdkswU0owbGZIUzY3N016eUZaclYxTlFsTGk2QWo5ZFliMytUNTVJWE05Q3hvZ0FjVi8zdlN2Qy9CajF1dFBENm4vRW5uYVFicmY2QkNYMEFBQUFBU1VWT1JLNUNZSUk9KVxufVxuXG4uYWQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAwXG59XG5cbi5hZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IDBcbn1cblxuLmFmIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggMFxufVxuXG4uYWcge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAwXG59XG5cbi5haSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IDBcbn1cblxuLmFsIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggMFxufVxuXG4uYW0ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggMFxufVxuXG4uYW8ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggMFxufVxuXG4uYXIge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggMFxufVxuXG4uYXMge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggMFxufVxuXG4uYXQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggMFxufVxuXG4uYXUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggMFxufVxuXG4uYXcge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggMFxufVxuXG4uYXoge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggMFxufVxuXG4uYmEge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggMFxufVxuXG4uYmIge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMXB4XG59XG5cbi5iZCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xMXB4XG59XG5cbi5iZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xMXB4XG59XG5cbi5iZiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xMXB4XG59XG5cbi5iZyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xMXB4XG59XG5cbi5iaCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xMXB4XG59XG5cbi5iaSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xMXB4XG59XG5cbi5iaiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTFweFxufVxuXG4uYm0ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTExcHhcbn1cblxuLmJuIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xMXB4XG59XG5cbi5ibyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTFweFxufVxuXG4uYnIge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTExcHhcbn1cblxuLmJzIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xMXB4XG59XG5cbi5idCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTFweFxufVxuXG4uYncge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTExcHhcbn1cblxuLmJ5IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0xMXB4XG59XG5cbi5ieiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTIycHhcbn1cblxuLmNhIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTIycHhcbn1cblxuLmNkIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTIycHhcbn1cblxuLmNmIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTIycHhcbn1cblxuLmNnIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTIycHhcbn1cblxuLmNoIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTIycHhcbn1cblxuLmNpIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTIycHhcbn1cblxuLmNrIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0yMnB4XG59XG5cbi5jbCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMjJweFxufVxuXG4uY20ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTIycHhcbn1cblxuLmNuIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0yMnB4XG59XG5cbi5jbyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMjJweFxufVxuXG4uY3Ige1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTIycHhcbn1cblxuLmN1IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0yMnB4XG59XG5cbi5jdiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMjJweFxufVxuXG4uY3cge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTIycHhcbn1cblxuLmN5IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzNweFxufVxuXG4uY3oge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMzNweFxufVxuXG4uZGUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMzNweFxufVxuXG4uZGoge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMzNweFxufVxuXG4uZGsge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMzNweFxufVxuXG4uZG0ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMzNweFxufVxuXG4uZG8ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMzNweFxufVxuXG4uZHoge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTMzcHhcbn1cblxuLmVjIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0zM3B4XG59XG5cbi5lZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMzNweFxufVxuXG4uZWcge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTMzcHhcbn1cblxuLmVyIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0zM3B4XG59XG5cbi5lcyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMzNweFxufVxuXG4uZXQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTMzcHhcbn1cblxuLmZpIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0zM3B4XG59XG5cbi5maiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMzNweFxufVxuXG4uZmsge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00NHB4XG59XG5cbi5mbSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC00NHB4XG59XG5cbi5mbyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC00NHB4XG59XG5cbi5mcixcbi5ibCxcbi5tZiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC00NHB4XG59XG5cbi5nYSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC00NHB4XG59XG5cbi5nYiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC00NHB4XG59XG5cbi5nZCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC00NHB4XG59XG5cbi5nZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtNDRweFxufVxuXG4uZ2Yge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTQ0cHhcbn1cblxuLmdoIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC00NHB4XG59XG5cbi5naSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtNDRweFxufVxuXG4uZ2wge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTQ0cHhcbn1cblxuLmdtIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC00NHB4XG59XG5cbi5nbiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtNDRweFxufVxuXG4uZ3Age1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTQ0cHhcbn1cblxuLmdxIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC00NHB4XG59XG5cbi5nciB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTU1cHhcbn1cblxuLmd0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTU1cHhcbn1cblxuLmd1IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTU1cHhcbn1cblxuLmd3IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTU1cHhcbn1cblxuLmd5IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTU1cHhcbn1cblxuLmhrIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTU1cHhcbn1cblxuLmhuIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTU1cHhcbn1cblxuLmhyIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC01NXB4XG59XG5cbi5odCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtNTVweFxufVxuXG4uaHUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTU1cHhcbn1cblxuLmlkIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC01NXB4XG59XG5cbi5pZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtNTVweFxufVxuXG4uaWwge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTU1cHhcbn1cblxuLmluIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC01NXB4XG59XG5cbi5pbyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtNTVweFxufVxuXG4uaXEge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTU1cHhcbn1cblxuLmlyIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNjZweFxufVxuXG4uaXMge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtNjZweFxufVxuXG4uaXQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtNjZweFxufVxuXG4uamUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE1NHB4XG59XG5cbi5qbSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC02NnB4XG59XG5cbi5qbyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC02NnB4XG59XG5cbi5qcCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC02NnB4XG59XG5cbi5rZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC02NnB4XG59XG5cbi5rZyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtNjZweFxufVxuXG4ua2gge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTY2cHhcbn1cblxuLmtpIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC02NnB4XG59XG5cbi54ayB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTU0cHhcbn1cblxuLmttIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC02NnB4XG59XG5cbi5rbiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtNjZweFxufVxuXG4ua3Age1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTY2cHhcbn1cblxuLmtyIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC02NnB4XG59XG5cbi5rdyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtNjZweFxufVxuXG4ua3kge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTY2cHhcbn1cblxuLmt6IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNzdweFxufVxuXG4ubGEge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtNzdweFxufVxuXG4ubGIge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtNzdweFxufVxuXG4ubGMge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtNzdweFxufVxuXG4ubGkge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtNzdweFxufVxuXG4ubGsge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtNzdweFxufVxuXG4ubHIge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtNzdweFxufVxuXG4ubHMge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTc3cHhcbn1cblxuLmx0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC03N3B4XG59XG5cbi5sdSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNzdweFxufVxuXG4ubHYge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTc3cHhcbn1cblxuLmx5IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC03N3B4XG59XG5cbi5tYSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtNzdweFxufVxuXG4ubWMge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTc3cHhcbn1cblxuLm1kIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC03N3B4XG59XG5cbi5tZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTU0cHg7XG4gIGhlaWdodDogMTJweFxufVxuXG4ubWcge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04OHB4XG59XG5cbi5taCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC04OHB4XG59XG5cbi5tayB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC04OHB4XG59XG5cbi5tbCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC04OHB4XG59XG5cbi5tbSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC04OHB4XG59XG5cbi5tbiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC04OHB4XG59XG5cbi5tbyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC04OHB4XG59XG5cbi5tcCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtODhweFxufVxuXG4ubXEge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTg4cHhcbn1cblxuLm1yIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC04OHB4XG59XG5cbi5tcyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtODhweFxufVxuXG4ubXQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTg4cHhcbn1cblxuLm11IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC04OHB4XG59XG5cbi5tdiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtODhweFxufVxuXG4ubXcge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTg4cHhcbn1cblxuLm14IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC04OHB4XG59XG5cbi5teSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTk5cHhcbn1cblxuLm16IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTk5cHhcbn1cblxuLm5hIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTk5cHhcbn1cblxuLm5jIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTk5cHhcbn1cblxuLm5lIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTk5cHhcbn1cblxuLm5mIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTk5cHhcbn1cblxuLm5nIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTk5cHhcbn1cblxuLm5pIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC05OXB4XG59XG5cbi5ubCxcbi5icSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtOTlweFxufVxuXG4ubm8ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTk5cHhcbn1cblxuLm5wIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC05OXB4XG59XG5cbi5uciB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtOTlweFxufVxuXG4ubnUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTk5cHhcbn1cblxuLm56IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC05OXB4XG59XG5cbi5vbSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtOTlweFxufVxuXG4ucGEge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTk5cHhcbn1cblxuLnBlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTEwcHhcbn1cblxuLnBmIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTExMHB4XG59XG5cbi5wZyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xMTBweFxufVxuXG4ucGgge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTEwcHhcbn1cblxuLnBrIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTExMHB4XG59XG5cbi5wbCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xMTBweFxufVxuXG4ucG0ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTEwcHhcbn1cblxuLnByIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMTBweFxufVxuXG4ucHMge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTExMHB4XG59XG5cbi5wdCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTEwcHhcbn1cblxuLnB3IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xMTBweFxufVxuXG4ucHkge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTExMHB4XG59XG5cbi5xYSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTEwcHhcbn1cblxuLnJlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xMTBweFxufVxuXG4ucm8ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTExMHB4XG59XG5cbi5ycyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMTEwcHhcbn1cblxuLnJ1IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTIxcHhcbn1cblxuLnJ3IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTEyMXB4XG59XG5cbi5zYSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xMjFweFxufVxuXG4uc2Ige1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTIxcHhcbn1cblxuLnNjIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTEyMXB4XG59XG5cbi5zZCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xMjFweFxufVxuXG4uc2Uge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTIxcHhcbn1cblxuLnNnIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMjFweFxufVxuXG4uc2gge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTEyMXB4XG59XG5cbi5zaSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTIxcHhcbn1cblxuLnNrIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xMjFweFxufVxuXG4uc2wge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTEyMXB4XG59XG5cbi5zbSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTIxcHhcbn1cblxuLnNuIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xMjFweFxufVxuXG4uc28ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTEyMXB4XG59XG5cbi5zciB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMTIxcHhcbn1cblxuLnNzIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTMycHhcbn1cblxuLnN0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTEzMnB4XG59XG5cbi5zdiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xMzJweFxufVxuXG4uc3gge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTMycHhcbn1cblxuLnN5IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTEzMnB4XG59XG5cbi5zeiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xMzJweFxufVxuXG4udGMge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTMycHhcbn1cblxuLnRkIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMzJweFxufVxuXG4udGcge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTEzMnB4XG59XG5cbi50aCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTMycHhcbn1cblxuLnRqIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xMzJweFxufVxuXG4udGsge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTEzMnB4XG59XG5cbi50bCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTMycHhcbn1cblxuLnRtIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xMzJweFxufVxuXG4udG4ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTEzMnB4XG59XG5cbi50byB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMTMycHhcbn1cblxuLnRyIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQzcHhcbn1cblxuLnR0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE0M3B4XG59XG5cbi50diB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNDNweFxufVxuXG4udHcge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTQzcHhcbn1cblxuLnR6IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE0M3B4XG59XG5cbi51YSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNDNweFxufVxuXG4udWcge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTQzcHhcbn1cblxuLnVzIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNDNweFxufVxuXG4udXkge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE0M3B4XG59XG5cbi51eiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTQzcHhcbn1cblxuLnZhIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xNDNweFxufVxuXG4udmMge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTE0M3B4XG59XG5cbi52ZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTQzcHhcbn1cblxuLnZnIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xNDNweFxufVxuXG4udmkge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTE0M3B4XG59XG5cbi52biB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMTQzcHhcbn1cblxuLnZ1IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTU0cHhcbn1cblxuLndmIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE1NHB4XG59XG5cbi53cyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNTRweFxufVxuXG4ueWUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTU0cHhcbn1cblxuLnphIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE1NHB4XG59XG5cbi56bSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNTRweFxufVxuXG4uencge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTU0cHhcbn1cblxuKiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveFxufVxuXG4uaGlkZSB7XG4gIGRpc3BsYXk6IG5vbmVcbn1cblxuLnYtaGlkZSB7XG4gIHZpc2liaWxpdHk6IGhpZGRlblxufVxuXG4uZm9ybS1jb250cm9sIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxldHRlci1zcGFjaW5nOiAuMDFyZW07XG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcbiAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICBwYWRkaW5nLWxlZnQ6IDQ4cHg7XG4gIG1hcmdpbi1sZWZ0OiAwO1xuICBiYWNrZ3JvdW5kOiAjRkZGRkZGO1xuICBib3JkZXI6IDFweCBzb2xpZCAjQ0FDQUNBO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIGxpbmUtaGVpZ2h0OiAyNXB4O1xuICBoZWlnaHQ6IDM1cHg7XG4gIHdpZHRoOiAzMDBweDtcbiAgb3V0bGluZTogbm9uZVxufVxuXG4uZm9ybS1jb250cm9sLmludmFsaWQtbnVtYmVyIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2Q3OWY5ZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0ZBRjBGMDtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNjYWNhY2Fcbn1cblxuLmZvcm0tY29udHJvbC5pbnZhbGlkLW51bWJlcjpmb2N1cyB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkNzlmOWY7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjY2FjYWNhO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkFGMEYwXG59XG5cbi5mbGFnLWRyb3Bkb3duIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGJvdHRvbTogMDtcbiAgcGFkZGluZzogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NhY2FjYTtcbiAgYm9yZGVyLXJhZGl1czogM3B4IDAgMCAzcHhcbn1cblxuLmZsYWctZHJvcGRvd246aG92ZXIsXG4uZmxhZy1kcm9wZG93bjpmb2N1cyB7XG4gIGN1cnNvcjogcG9pbnRlclxufVxuXG4uZmxhZy1kcm9wZG93bi5pbnZhbGlkLW51bWJlciB7XG4gIGJvcmRlci1jb2xvcjogI2Q3OWY5ZlxufVxuXG4uZmxhZy1kcm9wZG93bi5vcGVuIHtcbiAgei1pbmRleDogMjtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgYm9yZGVyLXJhZGl1czogM3B4IDAgMCAwXG59XG5cbi5mbGFnLWRyb3Bkb3duLm9wZW4gLnNlbGVjdGVkLWZsYWcge1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICBib3JkZXItcmFkaXVzOiAzcHggMCAwIDBcbn1cblxuaW5wdXRbZGlzYWJsZWRdKy5mbGFnLWRyb3Bkb3duOmhvdmVyIHtcbiAgY3Vyc29yOiBkZWZhdWx0XG59XG5cbmlucHV0W2Rpc2FibGVkXSsuZmxhZy1kcm9wZG93bjpob3ZlciAuc2VsZWN0ZWQtZmxhZyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50XG59XG5cbi5zZWxlY3RlZC1mbGFnIHtcbiAgb3V0bGluZTogbm9uZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMzhweDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwYWRkaW5nOiAwIDAgMCA4cHg7XG4gIGJvcmRlci1yYWRpdXM6IDNweCAwIDAgM3B4XG59XG5cbi5zZWxlY3RlZC1mbGFnOmhvdmVyLFxuLnNlbGVjdGVkLWZsYWc6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG59XG5cbi5zZWxlY3RlZC1mbGFnIC5mbGFnIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgbWFyZ2luLXRvcDogLTVweFxufVxuXG4uc2VsZWN0ZWQtZmxhZyAuYXJyb3cge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogNTAlO1xuICBtYXJnaW4tdG9wOiAtMnB4O1xuICBsZWZ0OiAyMHB4O1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmlnaHQ6IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXRvcDogNHB4IHNvbGlkICM1NTVcbn1cblxuLnNlbGVjdGVkLWZsYWcgLmFycm93LnVwIHtcbiAgYm9yZGVyLXRvcDogbm9uZTtcbiAgYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkICM1NTVcbn1cblxuLmNvdW50cnktbGlzdCB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAxMHB4IDAgMTBweCAtMXB4O1xuICBib3gtc2hhZG93OiAxcHggMnB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjM1KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHdpZHRoOiAzMDBweDtcbiAgbWF4LWhlaWdodDogMjAwcHg7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgYm9yZGVyLXJhZGl1czogMCAwIDNweCAzcHhcbn1cblxuLmNvdW50cnktbGlzdCAuZmxhZyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9ja1xufVxuXG4uY291bnRyeS1saXN0IC5kaXZpZGVyIHtcbiAgcGFkZGluZy1ib3R0b206IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjY1xufVxuXG4uY291bnRyeS1saXN0IC5jb3VudHJ5IHtcbiAgcGFkZGluZzogN3B4IDlweFxufVxuXG4uY291bnRyeS1saXN0IC5jb3VudHJ5IC5kaWFsLWNvZGUge1xuICBjb2xvcjogIzZiNmI2YlxufVxuXG4uY291bnRyeS1saXN0IC5jb3VudHJ5OmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjFmMVxufVxuXG4uY291bnRyeS1saXN0IC5jb3VudHJ5LmhpZ2hsaWdodCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMWYxZjFcbn1cblxuLmNvdW50cnktbGlzdCAuZmxhZyB7XG4gIG1hcmdpbi1yaWdodDogN3B4O1xuICBtYXJnaW4tdG9wOiAycHhcbn1cblxuLmNvdW50cnktbGlzdCAuY291bnRyeS1uYW1lIHtcbiAgbWFyZ2luLXJpZ2h0OiA2cHhcbn1cblxuLmNvdW50cnktbGlzdCAuc2VhcmNoIHtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgdG9wOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBwYWRkaW5nOiAxMHB4IDAgNnB4IDEwcHhcbn1cblxuLmNvdW50cnktbGlzdCAuc2VhcmNoLWVtb2ppIHtcbiAgZm9udC1zaXplOiAxNXB4XG59XG5cbi5jb3VudHJ5LWxpc3QgLnNlYXJjaC1ib3gge1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2FjYWNhO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbGluZS1oZWlnaHQ6IDE1cHg7XG4gIG1hcmdpbi1sZWZ0OiA2cHg7XG4gIHBhZGRpbmc6IDNweCA4cHggNXB4O1xuICBvdXRsaW5lOiBub25lXG59XG5cbi5jb3VudHJ5LWxpc3QgLm5vLWVudHJpZXMtbWVzc2FnZSB7XG4gIHBhZGRpbmc6IDdweCAxMHB4IDExcHg7XG4gIG9wYWNpdHk6IC43XG59XG5cbi5pbnZhbGlkLW51bWJlci1tZXNzYWdlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxlZnQ6IDQ2cHg7XG4gIHRvcDogLThweDtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgcGFkZGluZzogMCAycHg7XG4gIGNvbG9yOiAjZGUwMDAwXG59XG5cbi5zcGVjaWFsLWxhYmVsIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxlZnQ6IDQ2cHg7XG4gIHRvcDogLThweDtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgcGFkZGluZzogMCAycHg7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXBcbn1gO1xuZXhwb3J0IGRlZmF1bHQgcGhvbmVJbnB1dFN0eWxlczsiLCJpbXBvcnQgUmVhY3RQaG9uZUlucHV0TGliIGZyb20gJ3JlYWN0LXBob25lLWlucHV0LTInO1xuaW1wb3J0IHsgc3BhY2UsIHR5cG9ncmFwaHksIGxheW91dCB9IGZyb20gJ3N0eWxlZC1zeXN0ZW0nO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuaW1wb3J0IHsgSW5wdXRDU1MgfSBmcm9tIFwiLi4vaW5wdXQvaW5kZXguanNcIjtcbmltcG9ydCBQaG9uZUlucHV0U3R5bGVzIGZyb20gXCIuLi8uLi91dGlscy9waG9uZS1pbnB1dC5zdHlsZXMuanNcIjtcbmltcG9ydCB7IGNzc0NsYXNzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2Nzcy1jbGFzcy5qc1wiO1xuY29uc3QgUmVhY3RQaG9uZUlucHV0ID0gUmVhY3RQaG9uZUlucHV0TGliLmRlZmF1bHQgPz8gUmVhY3RQaG9uZUlucHV0TGliO1xuY29uc3QgUmVhY3RQaG9uZUlucHV0Q29tcG9uZW50ID0gUmVhY3RQaG9uZUlucHV0LmRlZmF1bHQgPz8gUmVhY3RQaG9uZUlucHV0O1xuXG4vKipcbiAqIFByb3AgVHlwZXMgb2YgYSBQaG9uZUlucHV0IGNvbXBvbmVudC5cbiAqIEN1cnJlbmN5SW5wdXQgaXMgYmFzZWQgb24gYHJlYWN0LWN1cnJlbmN5LWlucHV0LWZpZWxkYCBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYmwwMG1iZXIvcmVhY3QtcGhvbmUtaW5wdXQtMiBSZWFjdCBQaG9uZSBJbnB1dCBGaWVsZCBDb21wb25lbnR9XG4gKiBJdCBleHRlbmRzIGFsbCB7QGxpbmsgU3BhY2VQcm9wc30sIHtAbGluayBUeXBvZ3JhcGh5UHJvcHN9IGFuZCB7QGxpbmsgTGF5b3V0UHJvcHN9IGFuZCB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2JsMDBtYmVyL3JlYWN0LXBob25lLWlucHV0LTIjb3B0aW9ucyBSZWFjdCBQaG9uZSBJbnB1dCBGaWVsZCBDb21wb25lbnQgUHJvcHN9XG4gKiBAbWVtYmVyb2YgUGhvbmVJbnB1dFxuICogQGFsaWFzIFBob25lSW5wdXRQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFsuLi5dIEFsbCBwcm9wcyBkZWZhdWx0IHRvIF9waG9uZWlucHV0XyBodG1sIGNvbXBvbmVudCBsaWtlIGBvbkNoYW5nZWAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYHZhbHVlYCBldGMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWy4uLl0gUHJvcHMgZnJvbSB7QGxpbmsgU3BhY2VQcm9wc30sIHtAbGluayBUeXBvZ3JhcGh5UHJvcHN9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHtAbGluayBMYXlvdXRQcm9wc30gKyB0aGV5IGV4dGVuZCB7QGxpbmsgSW5wdXRQcm9wc31cbiAqL1xuXG4vKipcbiAqIEBjbGFzc2Rlc2NcbiAqXG4gKiBXcmFwcGVkIGBwaG9uZWlucHV0YCBodG1sIGVsZW1lbnQuXG4gKlxuICogIyMjIFVzYWdlXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IFBob25lSW5wdXQsIFBob25lSW5wdXRQcm9wcyB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nXG4gKiBgYGBcbiAqXG4gKiBAY29tcG9uZW50XG4gKiBAc3ViY2F0ZWdvcnkgQXRvbXNcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vc3Rvcnlib29rLmFkbWluanMuY28vP3BhdGg9L3N0b3J5L2Rlc2lnbnN5c3RlbS1hdG9tcy1waG9uZWlucHV0LS1kZWZhdWx0IFN0b3J5Ym9va31cbiAqIEBzZWUgUGhvbmVJbnB1dFByb3BzXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAZXhhbXBsZVxuICogcmV0dXJuIChcbiAqICAgPEJveCBwPVwieGxcIj5cbiAqICAgICAgPExhYmVsIGh0bWxGb3I9XCJwaG9uZWlucHV0MVwiPlNvbWUgZXhhbXBsZSBsYWJlbDwvTGFiZWw+XG4gKiAgICAgIDxQaG9uZUlucHV0IGlkPVwicGhvbmVpbnB1dDFcIiBvbkNoYW5nZT17Li4ufSAvPjtcbiAqICAgPC9Cb3g+XG4gKiApXG4gKiBAc2VjdGlvbiBkZXNpZ24tc3lzdGVtXG4gKi9cbmNvbnN0IFBob25lSW5wdXQgPSBzdHlsZWQoUmVhY3RQaG9uZUlucHV0Q29tcG9uZW50KWBcbiAgJHtQaG9uZUlucHV0U3R5bGVzfVxuICB3aWR0aDogMTAwJTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAmID4gaW5wdXQge1xuICAgICR7SW5wdXRDU1N9XG4gICAgJHtzcGFjZX1cbiAgICAke3R5cG9ncmFwaHl9XG4gICAgJHtsYXlvdXR9XG4gIH1cblxuICAuZm9ybS1jb250cm9sLCAuZmxhZy1kcm9wZG93biB7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICB9XG5gO1xuUGhvbmVJbnB1dC5kZWZhdWx0UHJvcHMgPSB7XG4gIHB4OiAnZGVmYXVsdCcsXG4gIHB5OiAnc20nLFxuICBjbGFzc05hbWU6IGNzc0NsYXNzKCdQaG9uZUlucHV0Jylcbn07XG5QaG9uZUlucHV0LmRpc3BsYXlOYW1lID0gJ1Bob25lSW5wdXQnO1xuZXhwb3J0IHsgUGhvbmVJbnB1dCB9O1xuZXhwb3J0IGRlZmF1bHQgUGhvbmVJbnB1dDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGxheW91dCB9IGZyb20gJ3N0eWxlZC1zeXN0ZW0nO1xuaW1wb3J0IHsgZGFya2VuIH0gZnJvbSAncG9saXNoZWQnO1xuaW1wb3J0IHsgc3R5bGVkLCBrZXlmcmFtZXMgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgeyBjc3NDbGFzcyB9IGZyb20gXCIuLi8uLi91dGlscy9jc3MtY2xhc3MuanNcIjtcbmNvbnN0IHdhdmVLZXlmcmFtZSA9IGtleWZyYW1lc2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XG4gIH1cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xuICB9XG5gO1xuY29uc3QgU3R5bGVkUGxhY2Vob2xkZXIgPSBzdHlsZWQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIC13ZWJraXQtbWFzay1pbWFnZTogLXdlYmtpdC1yYWRpYWwtZ3JhZGllbnQod2hpdGUsIGJsYWNrKTtcblxuICAmOjphZnRlciB7XG4gICAgYW5pbWF0aW9uOiAke3dhdmVLZXlmcmFtZX0gMS42cyBsaW5lYXIgMC41cyBpbmZpbml0ZTtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoXG4gICAgICA5MGRlZyxcbiAgICAgIHRyYW5zcGFyZW50LFxuICAgICAgJHsoe1xuICB0aGVtZVxufSkgPT4gZGFya2VuKDAuMDMsIHRoZW1lLmNvbG9ycy5ib3JkZXIpfSxcbiAgICAgIHRyYW5zcGFyZW50XG4gICAgKTtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICB0b3A6IDA7XG4gIH1cbiAgXG4gIGJhY2tncm91bmQ6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5ib3JkZXJ9O1xuICBiYWNrZ3JvdW5kLXNpemU6IDEwMDBweCAxMDRweDtcbiAgaGVpZ2h0OiAzMzhweDtcbiAgYm9yZGVyLXJhZGl1czogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuc3BhY2Uuc219O1xuICAke2xheW91dH07XG5gO1xuXG4vKipcbiAqIFByb3AgVHlwZXMgb2YgYSBQbGFjZWhvbGRlciBjb21wb25lbnQuXG4gKiBBcGFydCBmcm9tIHN0YW5kYXJkIGh0bWwgcHJvcHMgaXQgZXh0ZW5kcyB7QGxpbmsgTGF5b3V0UHJvcHN9XG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQbGFjZWhvbGRlclByb3BzXG4gKiBAbWVtYmVyb2YgUGxhY2Vob2xkZXJcbiAqIEBhbGlhcyBQbGFjZWhvbGRlclByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWy4uLl0gQWxsIHByb3BzIGRlZmF1bHQgdG8gX2Rpdl8gaHRtbCBjb21wb25lbnQgbGlrZSBgc3R5bGVgLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGBpZGAgZXRjLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFsuLi5dIFByb3BzIGZyb20ge0BsaW5rIExheW91dFByb3BzfVxuICovXG5cbi8qKlxuICogQGNsYXNzZGVzY1xuICpcbiAqIDxpbWcgc3JjPVwiY29tcG9uZW50cy9wbGFjZWhvbGRlci5wbmdcIiAvPlxuICpcbiAqIFJlbmRlcnMgcGxhY2Vob2xkZXJcbiAqXG4gKiAjIyMgVXNhZ2VcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBQbGFjZWhvbGRlciwgUGxhY2Vob2xkZXJQcm9wcyB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nXG4gKiBgYGBcbiAqXG4gKiBAY29tcG9uZW50XG4gKiBAc3ViY2F0ZWdvcnkgQXRvbXNcbiAqIEBzZWUgUGxhY2Vob2xkZXJQcm9wc1xuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9zdG9yeWJvb2suYWRtaW5qcy5jby8/cGF0aD0vc3RvcnkvZGVzaWduc3lzdGVtLWF0b21zLXBsYWNlaG9sZGVyLS1kZWZhdWx0IFN0b3J5Ym9va31cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkltYWdlIHBsYWNlaG9sZGVyPC9jYXB0aW9uPlxuICogcmV0dXJuIChcbiAqICAgPEJveD5cbiAqICAgICA8UGxhY2Vob2xkZXIgd2lkdGg9ezEwMH0gaGVpZ2h0PXsyMDB9IC8+XG4gKiAgIDwvQm94PlxuICogKVxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlRleHQgcGxhY2Vob2xkZXI8L2NhcHRpb24+XG4gKiByZXR1cm4gKFxuICogICA8Qm94PlxuICogICAgIDxMYWJlbD5Tb21lIG5hbWU8L0xhYmVsPlxuICogICAgIDxQbGFjZWhvbGRlciB3aWR0aD17NDAwfSBoZWlnaHQ9ezE0fSAvPlxuICogICA8L0JveD5cbiAqIClcbiAqIEBzZWN0aW9uIGRlc2lnbi1zeXN0ZW1cbiAqL1xuY29uc3QgUGxhY2Vob2xkZXIgPSAoe1xuICBhczogaHRtbEFzLFxuICByZWYsXG4gIC4uLm90aGVyXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRQbGFjZWhvbGRlciwgX2V4dGVuZHMoe1xuICBhczogaHRtbEFzXG59LCBvdGhlciwge1xuICBjbGFzc05hbWU6IGNzc0NsYXNzKCdQbGFjZWhvbGRlcicpXG59KSk7XG5QbGFjZWhvbGRlci5kaXNwbGF5TmFtZSA9ICdQbGFjZWhvbGRlcic7XG5leHBvcnQgeyBQbGFjZWhvbGRlciB9O1xuZXhwb3J0IGRlZmF1bHQgUGxhY2Vob2xkZXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgZm9jdXNTaGFkb3dTdHlsZSBmcm9tIFwiLi4vLi4vdXRpbHMvZm9jdXMtc2hhZG93LnN0eWxlLmpzXCI7XG5pbXBvcnQgeyBDaGVja2JveFJhZGlvQ29udGFpbmVyIH0gZnJvbSBcIi4uL2NoZWNrLWJveC9pbmRleC5qc1wiO1xuY29uc3QgQ2lyY2xlID0gc3R5bGVkLnNwYW5gXG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogOHB4O1xuICBoZWlnaHQ6IDhweDtcbiAgbWFyZ2luLWxlZnQ6IC00cHg7XG4gIG1hcmdpbi10b3A6IC00cHg7XG4gIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgYmFja2dyb3VuZDogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLndoaXRlfTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuYDtcblxuLy8gSGlkZSBjaGVja2JveCB2aXN1YWxseSBidXQgcmVtYWluIGFjY2Vzc2libGUgdG8gc2NyZWVuIHJlYWRlcnMuXG4vLyBTb3VyY2U6IGh0dHBzOi8vcG9saXNoZWQuanMub3JnL2RvY3MvI2hpZGV2aXN1YWxseVxuY29uc3QgSGlkZGVuUmFkaW8gPSBzdHlsZWQuaW5wdXQuYXR0cnMoe1xuICB0eXBlOiAncmFkaW8nXG59KWBcbiAgYm9yZGVyOiAwO1xuICBjbGlwOiByZWN0KDAgMCAwIDApO1xuICBoZWlnaHQ6IDFweDtcbiAgbWFyZ2luOiAtMXB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwYWRkaW5nOiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHdpZHRoOiAxcHg7XG5gO1xuY29uc3QgcmFkaW9CYWNrZ3JvdW5kID0gKHRoZW1lLCBjaGVja2VkLCBkaXNhYmxlZCkgPT4ge1xuICBpZiAoY2hlY2tlZCkge1xuICAgIHJldHVybiBkaXNhYmxlZCA/IHRoZW1lLmNvbG9ycy5ncmV5NDAgOiB0aGVtZS5jb2xvcnMucHJpbWFyeTEwMDtcbiAgfVxuICByZXR1cm4gdGhlbWUuY29sb3JzLndoaXRlO1xufTtcbmNvbnN0IFN0eWxlZFJhZGlvID0gc3R5bGVkLnNwYW5gXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDE2cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYm9yZGVyOiAxcHggc29saWQgJHsoe1xuICB0aGVtZSxcbiAgY2hlY2tlZCxcbiAgZGlzYWJsZWRcbn0pID0+IGNoZWNrZWQgJiYgIWRpc2FibGVkID8gdGhlbWUuY29sb3JzLnByaW1hcnkxMDAgOiB0aGVtZS5jb2xvcnMuZ3JleTQwfTtcbiAgYm9yZGVyLXJhZGl1czogMTAwMHB4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIHRyYW5zaXRpb246IGFsbCAxNTBtcztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICR7SGlkZGVuUmFkaW99OmZvY3VzICsgJiB7XG4gICAgJHsoe1xuICB0aGVtZVxufSkgPT4gYGJveC1zaGFkb3c6ICR7Zm9jdXNTaGFkb3dTdHlsZSh0aGVtZSl9YH07XG4gIH1cbiAgJHtIaWRkZW5SYWRpb306aG92ZXIgKyAmIHtcbiAgICBib3JkZXItY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5ncmV5NjB9O1xuICB9XG4gICR7Q2lyY2xlfSB7XG4gICAgdmlzaWJpbGl0eTogJHsoe1xuICBjaGVja2VkXG59KSA9PiBjaGVja2VkID8gJ3Zpc2libGUnIDogJ2hpZGRlbid9O1xuICB9XG5cbiAgYmFja2dyb3VuZDogJHsoe1xuICBjaGVja2VkLFxuICB0aGVtZSxcbiAgZGlzYWJsZWRcbn0pID0+IHJhZGlvQmFja2dyb3VuZCh0aGVtZSwgY2hlY2tlZCwgZGlzYWJsZWQpfTtcbmA7XG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJhZGlvUHJvcHNcbiAqIEBhbGlhcyBSYWRpb1Byb3BzXG4gKiBAbWVtYmVyb2YgUmFkaW9cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbLi4uXSBBbGwgcHJvcHMgZGVmYXVsdCB0byBfcmFkaW9fIGh0bWwgaW5wdXQgbGlrZSBgb25DaGFuZ2VgLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGBjaGVja2VkYCBldGMuXG4gKi9cbi8qKlxuIC8qKlxuICogQGNsYXNzZGVzY1xuICpcbiAqIDxpbWcgc3JjPVwiY29tcG9uZW50cy9yYWRpby5wbmdcIiAvPlxuICpcbiAqIEhUTUwgUmFkaW9cbiAqXG4gKiAjIyMgVXNhZ2VcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBSYWRpbywgUmFkaW9Qcm9wcyB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nXG4gKiBgYGBcbiAqXG4gKiBAY29tcG9uZW50XG4gKiBAc2VlIFJhZGlvUHJvcHNcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vc3Rvcnlib29rLmFkbWluanMuY28vP3BhdGg9L3N0b3J5L2Rlc2lnbnN5c3RlbS1hdG9tcy1yYWRpby0tZGVmYXVsdCBTdG9yeUJvb2t9XG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAc3ViY2F0ZWdvcnkgQXRvbXNcbiAqIEBleGFtcGxlXG4gKiByZXR1cm4gKFxuICogICA8Qm94IHA9XCJ4bFwiPlxuICogICAgICA8UmFkaW8gaWQ9XCJyYWRpbzFcIi8+XG4gKiAgICAgIDxMYWJlbCBpbmxpbmUgaHRtbEZvcj1cInJhZGlvMVwiIG1sPVwiZGVmYXVsdFwiPlNvbWUgZXhhbXBsZSBsYWJlbDwvTGFiZWw+XG4gKiAgIDwvQm94PlxuICogKVxuICogQHNlY3Rpb24gZGVzaWduLXN5c3RlbVxuICovXG5jb25zdCBSYWRpbyA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBjaGVja2VkLFxuICAgIG9uQ2hhbmdlLFxuICAgIGRpc2FibGVkLFxuICAgIC4uLnJlc3RQcm9wc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtpc0NoZWNrZWQsIHNldENoZWNrZWRdID0gdXNlU3RhdGUoY2hlY2tlZCA/PyBmYWxzZSk7XG4gIGNvbnN0IGFjdHVhbGx5Q2hlY2tlZCA9IGNoZWNrZWQgPz8gaXNDaGVja2VkO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSBldmVudCA9PiB7XG4gICAgc2V0Q2hlY2tlZCghZXZlbnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2UoZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94UmFkaW9Db250YWluZXIsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChIaWRkZW5SYWRpbywgX2V4dGVuZHMoe1xuICAgIGNoZWNrZWQ6IGFjdHVhbGx5Q2hlY2tlZCxcbiAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbiAgfSwgcmVzdFByb3BzLCB7XG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkUmFkaW8sIHtcbiAgICBjaGVja2VkOiBhY3R1YWxseUNoZWNrZWQsXG4gICAgb25DbGljazogZXZlbnQgPT4gaGFuZGxlQ2hhbmdlICYmIGhhbmRsZUNoYW5nZShldmVudCksXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENpcmNsZSwgbnVsbCkpKTtcbn07XG5SYWRpby5kaXNwbGF5TmFtZSA9ICdSYWRpbyc7XG5leHBvcnQgeyBSYWRpbyB9O1xuZXhwb3J0IGRlZmF1bHQgUmFkaW87IiwiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9ydCAqL1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuaW1wb3J0IHsgQm94IH0gZnJvbSBcIi4uL2JveC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgdGhlbWVHZXQsIGNzc0NsYXNzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2luZGV4LmpzXCI7XG5cbi8qKlxuICogQGNsYXNzZGVzY1xuICpcbiAqIDxpbWcgc3JjPVwiY29tcG9uZW50cy9zZWN0aW9uLnBuZ1wiIC8+XG4gKlxuICogTWFya3MgZ3JvdXAgb2YgZmllbGRzIGFzIGEgc2VjdGlvbi4gSGFzIHRoZSBzYW1lIHByb3BzIGFzIFtCb3hde0BsaW5rIEJveFByb3BzfVxuICpcbiAqICMjIyBVc2FnZVxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IFNlY3Rpb24gfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJ1xuICogYGBgXG4gKlxuICogQGNvbXBvbmVudFxuICogQHN1YmNhdGVnb3J5IEF0b21zXG4gKiBAc2VlIHtAbGluayBodHRwczovL3N0b3J5Ym9vay5hZG1pbmpzLmNvLz9wYXRoPS9zdG9yeS9kZXNpZ25zeXN0ZW0tYXRvbXMtc2VjdGlvbi0tZGVmYXVsdCBTdG9yeWJvb2t9XG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAZXhhbXBsZVxuICogcmV0dXJuIChcbiAqICAgPFNlY3Rpb24+XG4gKiAgICAgPFRleHQ+U29tZSB0ZXh0IHdpdGhpbiBhIHNlY3Rpb248L1RleHQ+XG4gKiAgICAgPFNlY3Rpb24+XG4gKiAgICAgICA8VGV4dD5TZWN0aW9uIGNhbiBiZSBuZXN0ZWQ8L1RleHQ+XG4gKiAgICAgPC9TZWN0aW9uPlxuICogICA8L1NlY3Rpb24+XG4gKiApXG4gKiBAc2VjdGlvbiBkZXNpZ24tc3lzdGVtXG4gKi9cbmNvbnN0IFNlY3Rpb24gPSBzdHlsZWQoQm94KWBcbiAgYm9yZGVyOiAxcHggZGFzaGVkICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5pbnB1dEJvcmRlcn07XG4gIHBhZGRpbmc6ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ2xnJyl9O1xuYDtcblNlY3Rpb24uZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6IGNzc0NsYXNzKCdTZWN0aW9uJylcbn07XG5TZWN0aW9uLmRpc3BsYXlOYW1lID0gJ1NlY3Rpb24nO1xuZXhwb3J0IHsgU2VjdGlvbiB9O1xuZXhwb3J0IGRlZmF1bHQgU2VjdGlvbjsiLCJpbXBvcnQgeyBsYXlvdXQgfSBmcm9tICdzdHlsZWQtc3lzdGVtJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IGNzc0NsYXNzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2Nzcy1jbGFzcy5qc1wiO1xuXG4vKipcbiAqIEBjbGFzc2Rlc2NcbiAqXG4gKiA8aW1nIHNyYz1cImNvbXBvbmVudHMvdGFibGUucG5nXCIgLz5cbiAqXG4gKiBNYWluIFRhYmxlIHdyYXBwZXIuIEFsb25nIHdpdGggX1RhYmxlUm93XywgX1RhYmxlQ2VsbF8sIF9UYWJsZUNhcHRpb25fLFxuICogX1RhYmxlSGVhZF8gYW5kIF9UYWJsZUJvZHlfIGdpdmVzIHlvdSB0aGUgcG93ZXJmdWwgdG9vbCBmb3IgYnVpbGRpbmcgdGFibGVzLlxuICpcbiAqICMjIyBSZWxhdGVkIENvbXBvbmVudHNcbiAqXG4gKiAtIF9UYWJsZV86IHtAbGluayBMYXlvdXRQcm9wc30gJiBzdGFuZGFyZCB0YWJsZSBodG1sIHByb3BzXG4gKiAtIF9UYWJsZUJvZHlfOiBzdGFuZGFyZCB0Ym9keSBodG1sIHByb3BzXG4gKiAtIF9UYWJsZUNlbGxfOiB7QGxpbmsgU3BhY2VQcm9wc30gJiB7QGxpbmsgQ29sb3JQcm9wc30gJiBzdGFuZGFyZCB0ZCBodG1sIHByb3BzXG4gKiAtIF9UYWJsZUhlYWRfOiBzdGFuZGFyZCB0aGVhZCBodG1sIHByb3BzXG4gKiAtIF9UYWJsZVJvd186ICBzdGFuZGFyZCB0ciBodG1sIHByb3BzXG4gKlxuICogIyMjIFVzYWdlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHtcbiAqICAgVGFibGUsXG4gKiAgIFRhYmxlUm93LFxuICogICBUYWJsZUNlbGwsXG4gKiAgIFRhYmxlQ2FwdGlvbixcbiAqICAgVGFibGVIZWFkLFxuICogICBUYWJsZUJvZHksXG4gKiB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nXG4gKiBgYGBcbiAqXG4gKiBAY29tcG9uZW50XG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAc3ViY2F0ZWdvcnkgQXRvbXNcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vc3Rvcnlib29rLmFkbWluanMuY28vP3BhdGg9L3N0b3J5L2Rlc2lnbnN5c3RlbS1hdG9tcy10YWJsZS0tZGVmYXVsdCBTdG9yeWJvb2t9XG4gKiBAZXhhbXBsZVxuICogcmV0dXJuIChcbiAqIDxCb3ggcHQ9XCJ4NFwiPlxuICogPFRhYmxlPlxuICogICA8VGFibGVDYXB0aW9uPlxuICogICAgIDxUZXh0IGFzPVwic3BhblwiPk1vbnRobHkgc2F2aW5nczwvVGV4dD5cbiAqICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJ0ZXh0XCIgc2l6ZT1cInNtXCI+XG4gKiAgICAgICA8SWNvbiBpY29uPVwiVHJhc2hcIiAvPlxuICogICAgICAgUmVtb3ZlXG4gKiAgICAgPC9CdXR0b24+XG4gKiAgIDwvVGFibGVDYXB0aW9uPlxuICogICA8VGFibGVIZWFkPlxuICogICAgIDxUYWJsZVJvdz5cbiAqICAgICAgIDxUYWJsZUNlbGw+PENoZWNrQm94IC8+PC9UYWJsZUNlbGw+XG4gKiAgICAgICA8VGFibGVDZWxsPlxuICogICAgICAgICA8TGluayBocmVmPVwiI1wiPlxuICogICAgICAgICAgIE5hbWVcbiAqICAgICAgICAgICA8SWNvbiBpY29uPVwiQ2hldnJvblVwXCIgLz5cbiAqICAgICAgICAgPC9MaW5rPlxuICogICAgICAgPC9UYWJsZUNlbGw+XG4gKiAgICAgICA8VGFibGVDZWxsPlxuICogICAgICAgICA8TGluayBocmVmPVwiI1wiPlxuICogICAgICAgICAgIExhc3RcbiAqICAgICAgICAgICA8SWNvbiBpY29uPVwiQ2hldnJvbkRvd25cIiAvPlxuICogICAgICAgICA8L0xpbms+XG4gKiAgICAgICA8L1RhYmxlQ2VsbD5cbiAqICAgICAgIDxUYWJsZUNlbGw+U3VybmFtZTwvVGFibGVDZWxsPlxuICogICAgICAgPFRhYmxlQ2VsbD5HZW5kZXI8L1RhYmxlQ2VsbD5cbiAqICAgICAgIDxUYWJsZUNlbGw+QWdlPC9UYWJsZUNlbGw+XG4gKiAgICAgPC9UYWJsZVJvdz5cbiAqICAgPC9UYWJsZUhlYWQ+XG4gKiAgIDxUYWJsZUJvZHk+XG4gKiAgICAgPFRhYmxlUm93PlxuICogICAgICAgPFRhYmxlQ2VsbD48Q2hlY2tCb3ggLz48L1RhYmxlQ2VsbD5cbiAqICAgICAgIDxUYWJsZUNlbGw+VmFsdWUgMTwvVGFibGVDZWxsPlxuICogICAgICAgPFRhYmxlQ2VsbD5WYWx1ZSAyPC9UYWJsZUNlbGw+XG4gKiAgICAgICA8VGFibGVDZWxsPlZhbHVlIDI8L1RhYmxlQ2VsbD5cbiAqICAgICAgIDxUYWJsZUNlbGw+VmFsdWUgMjwvVGFibGVDZWxsPlxuICogICAgICAgPFRhYmxlQ2VsbD5WYWx1ZSAyPC9UYWJsZUNlbGw+XG4gKiAgICAgPC9UYWJsZVJvdz5cbiAqICAgICA8VGFibGVSb3c+XG4gKiAgICAgICA8VGFibGVDZWxsPjxDaGVja0JveCAvPjwvVGFibGVDZWxsPlxuICogICAgICAgPFRhYmxlQ2VsbD5WYWx1ZSAxPC9UYWJsZUNlbGw+XG4gKiAgICAgICA8VGFibGVDZWxsPlZhbHVlIDI8L1RhYmxlQ2VsbD5cbiAqICAgICAgIDxUYWJsZUNlbGw+VmFsdWUgMjwvVGFibGVDZWxsPlxuICogICAgICAgPFRhYmxlQ2VsbD5WYWx1ZSAyPC9UYWJsZUNlbGw+XG4gKiAgICAgICA8VGFibGVDZWxsPlZhbHVlIDI8L1RhYmxlQ2VsbD5cbiAqICAgICA8L1RhYmxlUm93PlxuICogICA8L1RhYmxlQm9keT5cbiAqIDwvVGFibGU+XG4gKiA8L0JveD5cbiAqIClcbiAqIEBzZWN0aW9uIGRlc2lnbi1zeXN0ZW1cbiAqL1xuY29uc3QgVGFibGUgPSBzdHlsZWQudGFibGVgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZm9udC1mYW1pbHk6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmZvbnR9O1xuICBjb2xvcjogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLnRleHR9O1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5ib3JkZXJ9O1xuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMuYm9yZGVyfTtcblxuICAke2xheW91dH07XG5gO1xuVGFibGUuZGlzcGxheU5hbWUgPSAnVGFibGUnO1xuVGFibGUuZGVmYXVsdFByb3BzID0ge1xuICB3aWR0aDogMSxcbiAgY2xhc3NOYW1lOiBjc3NDbGFzcygnVGFibGUnKVxufTtcbmV4cG9ydCBkZWZhdWx0IFRhYmxlOyIsImltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IGNzc0NsYXNzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2Nzcy1jbGFzcy5qc1wiO1xuXG4vKipcbiAqIEBjb21wb25lbnRcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IFRhYmxlSGVhZCA9IHN0eWxlZC50aGVhZGBcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAxKTtcbiAgXG4gICYgdGQsICYgYSB7XG4gICAgY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy50ZXh0fTtcbiAgICBmb250LXNpemU6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmZvbnRTaXplcy5zbX07XG4gICAgZm9udC13ZWlnaHQ6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmZvbnRXZWlnaHRzLmJvbGR9O1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIFxuICAgICY6aG92ZXIge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cbiAgfVxuYDtcblRhYmxlSGVhZC5kZWZhdWx0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZTogY3NzQ2xhc3MoJ1RhYmxlSGVhZCcpXG59O1xuVGFibGVIZWFkLmRpc3BsYXlOYW1lID0gJ1RhYmxlSGVhZCc7XG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWQ7IiwiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuaW1wb3J0IHsgY3NzQ2xhc3MgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY3NzLWNsYXNzLmpzXCI7XG5cbi8qKlxuICogQGNvbXBvbmVudFxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgVGFibGVCb2R5ID0gc3R5bGVkLnRib2R5YFxuXG5gO1xuVGFibGVCb2R5LmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiBjc3NDbGFzcygnVGFibGVCb2R5Jylcbn07XG5UYWJsZUJvZHkuZGlzcGxheU5hbWUgPSAnVGFibGVCb2R5JztcbmV4cG9ydCBkZWZhdWx0IFRhYmxlQm9keTsiLCJpbXBvcnQgeyBjb2xvciwgbGF5b3V0LCBzcGFjZSB9IGZyb20gJ3N0eWxlZC1zeXN0ZW0nO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuaW1wb3J0IHsgY3NzQ2xhc3MgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY3NzLWNsYXNzLmpzXCI7XG5cbi8qKlxuICogQGNvbXBvbmVudFxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgVGFibGVDZWxsID0gc3R5bGVkLnRkYFxuICBib3JkZXItdG9wOiAxcHggc29saWQgJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLmJvcmRlcn07XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMuYm9yZGVyfTtcbiAgZm9udC1zaXplOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5mb250U2l6ZXMuZGVmYXVsdH07XG4gIGxpbmUtaGVpZ2h0OiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5saW5lSGVpZ2h0cy5kZWZhdWx0fTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgJHtjb2xvcn07IFxuICAke3NwYWNlfTtcbiAgJHtsYXlvdXR9O1xuXG4gICYub3B0aW9ucyB7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIH1cbmA7XG5UYWJsZUNlbGwuZGVmYXVsdFByb3BzID0ge1xuICBwOiAnbGcnLFxuICBjb2xvcjogJ3RleHQnLFxuICBjbGFzc05hbWU6IGNzc0NsYXNzKCdUYWJsZUNlbGwnKVxufTtcblRhYmxlQ2VsbC5kaXNwbGF5TmFtZSA9ICdUYWJsZUNlbGwnO1xuZXhwb3J0IGRlZmF1bHQgVGFibGVDZWxsOyIsImltcG9ydCB7IHJnYmEgfSBmcm9tICdwb2xpc2hlZCc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgeyBjc3NDbGFzcyB9IGZyb20gXCIuLi8uLi91dGlscy9jc3MtY2xhc3MuanNcIjtcblxuLyoqXG4gKiBAY29tcG9uZW50XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBUYWJsZVJvdyA9IHN0eWxlZC50cmBcbiAgJi5zZWxlY3RlZCB7XG4gICAgYmFja2dyb3VuZDogJHsoe1xuICB0aGVtZVxufSkgPT4gcmdiYSh0aGVtZS5jb2xvcnMucHJpbWFyeTEwMCwgMC4wMyl9O1xuICB9XG5cbiAgJjpub3QoLnNlbGVjdGVkKTpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAxKTtcbiAgfVxuYDtcblRhYmxlUm93LmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiBjc3NDbGFzcygnVGFibGVSb3cnKVxufTtcblRhYmxlUm93LmRpc3BsYXlOYW1lID0gJ1RhYmxlUm93JztcbmV4cG9ydCBkZWZhdWx0IFRhYmxlUm93OyIsImltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9idXR0b24vaW5kZXguanNcIjtcbmltcG9ydCB7IHRoZW1lR2V0LCBjc3NDbGFzcyB9IGZyb20gXCIuLi8uLi91dGlscy9pbmRleC5qc1wiO1xuXG4vKipcbiAqIEBjb21wb25lbnRcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IFRhYmxlQ2FwdGlvbiA9IHN0eWxlZC5jYXB0aW9uYFxuICBmb250LWZhbWlseTogJHt0aGVtZUdldCgnZm9udCcpfTtcbiAgcGFkZGluZzogJHt0aGVtZUdldCgnc3BhY2UnLCAnc20nKX0gJHt0aGVtZUdldCgnc3BhY2UnLCAnbGcnKX07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGNvbG9yOiAke3RoZW1lR2V0KCdjb2xvcnMnLCAnd2hpdGUnKX07XG4gIGZvbnQtc2l6ZTogJHt0aGVtZUdldCgnZm9udFNpemVzJywgJ2RlZmF1bHQnKX07XG4gIGxpbmUtaGVpZ2h0OiAke3RoZW1lR2V0KCdsaW5lSGVpZ2h0cycsICdkZWZhdWx0Jyl9O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICB0b3A6IC00cHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTAwJSk7XG4gIGJhY2tncm91bmQ6ICR7dGhlbWVHZXQoJ2NvbG9ycycsICdwcmltYXJ5MTAwJyl9O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cbiAgJjpmaXJzdC1jaGlsZCB7XG4gICAgZmxleC1ncm93OiAxO1xuICB9XG5cbiAgJiAke0J1dHRvbn0ge1xuICAgIGNvbG9yOiAke3RoZW1lR2V0KCdjb2xvcnMnLCAnd2hpdGUnKX07XG4gICAgYm9yZGVyLWNvbG9yOiAke3RoZW1lR2V0KCdjb2xvcnMnLCAnd2hpdGUnKX07XG4gIH1cbmA7XG5UYWJsZUNhcHRpb24uZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6IGNzc0NsYXNzKCdUYWJsZUNhcHRpb24nKVxufTtcblRhYmxlQ2FwdGlvbi5kaXNwbGF5TmFtZSA9ICdUYWJsZUNhcHRpb24nO1xuZXhwb3J0IGRlZmF1bHQgVGFibGVDYXB0aW9uOyIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbXNnKSB7XG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IGFzc2VydDsiLCJpbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVkLCBjc3MgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgYXNzZXJ0IGZyb20gXCIuLi8uLi91dGlscy9hc3NlcnQuanNcIjtcbmNvbnN0IFN0eWxlZEJ1dHRvbiA9IHN0eWxlZC5idXR0b25gXG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgcGFkZGluZzogJHsoe1xuICB0aGVtZVxufSkgPT4gYCR7dGhlbWUuc3BhY2UubGd9ICR7dGhlbWUuc3BhY2UueGx9YH07XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5ib3JkZXJ9O1xuICBjb2xvcjogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLmdyZXk2MH07XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICAkeyh7XG4gIHRoZW1lXG59KSA9PiAoe1xuICBmb250RmFtaWx5OiB0aGVtZS5mb250LFxuICBmb250U2l6ZTogdGhlbWUuZm9udFNpemVzLm1kLFxuICBsaW5lSGVpZ2h0OiB0aGVtZS5saW5lSGVpZ2h0cy5sZ1xufSl9O1xuXG4gICR7KHtcbiAgYWN0aXZlLFxuICB0aGVtZVxufSkgPT4gYWN0aXZlICYmIGNzc2BcbiAgICBib3JkZXItY29sb3I6ICR7dGhlbWUuY29sb3JzLnByaW1hcnkxMDB9O1xuICAgIGNvbG9yOiAke3RoZW1lLmNvbG9ycy5wcmltYXJ5MTAwfTtcbiAgYH1cbmA7XG5jb25zdCBTdHlsZWRDb250ZW50ID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbmA7XG5jb25zdCBTdHlsZWRIZWFkZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuYDtcbmNvbnN0IFN0eWxlZFNwYWNlciA9IHN0eWxlZC5kaXZgXG4gIGZsZXgtZ3JvdzogMTtcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5ib3JkZXJ9O1xuYDtcblxuLyoqXG4gKiBUYWJzIGNvbXBvbmVudCByZW5kZXJzIGEgdGFiIG5hdmlnYXRpb24gYmFyIHRoYXQgbGV0cyB0aGUgdXNlciBzZWxlY3QgYSBUYWJcbiAqIHRvIGRpc3BsYXkgYmVsb3cuIENoaWxkcmVuIG9mIHRoZSBzZWxlY3RlZCBUYWIgYXJlIHRoZW4gcmVuZGVyZWQgYmVsb3cgdGhlXG4gKiBuYXZpZ2F0aW9uIGJhci5cbiAqL1xuZXhwb3J0IGNvbnN0IFRhYnMgPSAoe1xuICBjdXJyZW50VGFiLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uQ2hhbmdlID0gKCkgPT4ge30sXG4gIGNoaWxkcmVuLFxuICBmdWxsV2lkdGggPSB0cnVlLFxuICBoZWFkZXJDb21wb25lbnQ6IEhlYWRlciA9IFN0eWxlZEhlYWRlcixcbiAgYnV0dG9uQ29tcG9uZW50OiBCdXR0b24gPSBTdHlsZWRCdXR0b24sXG4gIGNvbnRlbnRDb21wb25lbnQ6IENvbnRlbnQgPSBTdHlsZWRDb250ZW50XG59KSA9PiB7XG4gIGNvbnN0IFt0YWJzLCBzZXRUYWJzXSA9IHVzZVN0YXRlKFtdKTtcbiAgY29uc3QgcmVnaXN0ZXJUYWIgPSB1c2VDYWxsYmFjaygoaWQsIHRpdGxlKSA9PiB7XG4gICAgc2V0VGFicyhjdXJyZW50VGFicyA9PiB7XG4gICAgICBpZiAoY3VycmVudFRhYnMuZmluZCh0ID0+IHQuaWQgPT09IGlkKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKGBUaGVyZSBhcmUgbXVsdGlwbGUgVGFiIGNvbXBvbmVudHMgd2l0aCBJRCAnJHtpZH0nYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gWy4uLmN1cnJlbnRUYWJzLCB7XG4gICAgICAgIGlkLFxuICAgICAgICB0aXRsZVxuICAgICAgfV07XG4gICAgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5yZWdpc3RlclRhYiA9IHVzZUNhbGxiYWNrKGlkID0+IHNldFRhYnMobmV3VGFicyA9PiBuZXdUYWJzLmZpbHRlcih0ID0+IHQuaWQgIT09IGlkKSksIFtdKTtcbiAgY29uc3QgbWVtb2l6ZWRDb250ZXh0ID0gdXNlTWVtbygoKSA9PiAoe1xuICAgIGN1cnJlbnRUYWIsXG4gICAgcmVnaXN0ZXJUYWIsXG4gICAgdW5yZWdpc3RlclRhYlxuICB9KSwgW2N1cnJlbnRUYWIsIHJlZ2lzdGVyVGFiLCB1bnJlZ2lzdGVyVGFiXSk7XG4gIHJldHVybiAoXG4gICAgLyojX19QVVJFX18qL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IG1lbW9pemVkQ29udGV4dFxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZENvbnRlbnQsIHtcbiAgICAgIHJvbGU6IFwidGFibGlzdFwiXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSGVhZGVyLCBudWxsLCB0YWJzLm1hcCgoe1xuICAgICAgaWQsXG4gICAgICB0aXRsZVxuICAgIH0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJ1dHRvbiwge1xuICAgICAgcm9sZTogXCJ0YWJcIixcbiAgICAgIGFjdGl2ZTogaWQgPT09IGN1cnJlbnRUYWIsXG4gICAgICBrZXk6IGlkLFxuICAgICAgb25DbGljazogKCkgPT4gb25DaGFuZ2UoaWQpLFxuICAgICAgdGFiSWQ6IGlkXG4gICAgfSwgdGl0bGUpKSwgZnVsbFdpZHRoICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZFNwYWNlciwgbnVsbCkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZW50LCB7XG4gICAgICByb2xlOiBcInRhYnBhbmVsXCJcbiAgICB9LCBjaGlsZHJlbikpKVxuICApO1xufTtcbmV4cG9ydCBjb25zdCBUYWJDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoe1xuICByZWdpc3RlclRhYjogKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5lcnJvcignVGFiIHVzZWQgb3V0c2lkZSBvZiBUYWJzIGNvbXBvbmVudC4gVGFiIG5lZWRzIHRvIGJlIGEgY2hpbGQgb2YgVGFicy4nKTtcbiAgfSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICB1bnJlZ2lzdGVyVGFiOiAoKSA9PiB7fSxcbiAgY3VycmVudFRhYjogJydcbn0pO1xuZXhwb3J0IGNvbnN0IHVzZVRhYnMgPSAoKSA9PiB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoVGFiQ29udGV4dCk7XG4gIGFzc2VydChUYWJDb250ZXh0LCAndXNlVGFicyBpcyB1c2VkIG91dHNpZGUgVGFiQ29udGV4dCcpO1xuICByZXR1cm4gY3R4O1xufTtcblRhYnMuZGlzcGxheU5hbWUgPSAnVGFicyc7XG5leHBvcnQgZGVmYXVsdCBUYWJzOyIsImltcG9ydCBSZWFjdCwgeyB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUYWJzIH0gZnJvbSBcIi4vdGFicy5qc1wiO1xuLyoqXG4gKiBSZW5kZXJzIGNoaWxkcmVuIGluc2lkZSBUYWJzIGNvbXBvbmVudC4gRWFjaCBUYWIgd2lsbCBhZGQgYSBzaW5nbGUgdGFiIGluXG4gKiB0aGUgbmF2aWdhdGlvbiBiYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBUYWIgPSAoe1xuICBpZCxcbiAgbGFiZWwsXG4gIGNoaWxkcmVuXG59KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjdXJyZW50VGFiLFxuICAgIHJlZ2lzdGVyVGFiLFxuICAgIHVucmVnaXN0ZXJUYWJcbiAgfSA9IHVzZVRhYnMoKTtcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICByZWdpc3RlclRhYihpZCwgbGFiZWwpO1xuICAgIHJldHVybiAoKSA9PiB1bnJlZ2lzdGVyVGFiKGlkKTtcbiAgfSk7XG4gIGlmIChpZCAhPT0gY3VycmVudFRhYikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2pzeC1uby11c2VsZXNzLWZyYWdtZW50XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pO1xufTtcblRhYi5kaXNwbGF5TmFtZSA9ICdUYWInO1xuZXhwb3J0IGRlZmF1bHQgVGFiOyIsImltcG9ydCB7IGNzcyB9IGZyb20gXCIuLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB0aGVtZUdldCBmcm9tIFwiLi90aGVtZS1nZXQuanNcIjtcblxuLyoqXG4gKlxuICogR2l2ZXMgeW91IHRoZSBkZWZhdWx0IHN0eWxlcyBmb3IgYWxsIFwiY29udGVudFwiIGVsZW1lbnRzIGxpa2U6XG4gKiB1bCwgbGksIGgxLWg1IGV0Yy5cbiAqXG4gKiAjIyMgRXhhbXBsZVxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BzdHlsZWQtY29tcG9uZW50cydcbiAqIGltcG9ydCB7IGNvbnRlbnRDU1MgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJ1xuICpcbiAqIGNvbnN0IG15Q29tcG9uZW50ID0gc3R5bGVkYFxuICogICAke2NvbnRlbnRDU1N9O1xuICogYFxuICogYGBgXG4gKlxuICogQG1lbWJlcm9mIG1vZHVsZTpAYWRtaW5qcy9kZXNpZ24tc3lzdGVtXG4gKi9cbmNvbnN0IGNvbnRlbnRDU1MgPSBjc3NgXG4gIGZvbnQtZmFtaWx5OiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5mb250fTtcbiAgZm9udC1zaXplOiAke3RoZW1lR2V0KCdmb250U2l6ZXMnLCAnbWQnKX07XG4gIGxpbmUtaGVpZ2h0OiAke3RoZW1lR2V0KCdsaW5lSGVpZ2h0cycsICdsZycpfTtcbiAgZm9udC13ZWlnaHQ6ICR7dGhlbWVHZXQoJ2ZvbnRXZWlnaHRzJywgJ2xpZ2h0Jyl9O1xuICBkaXYsIHNwYW4sIGFwcGxldCwgb2JqZWN0LCBpZnJhbWUsXG4gIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSxcbiAgYSwgYWJiciwgYWNyb255bSwgYWRkcmVzcywgYmlnLCBjaXRlLCBjb2RlLFxuICBkZWwsIGRmbiwgZW0sIGltZywgaW5zLCBrYmQsIHEsIHMsIHNhbXAsXG4gIHNtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLCBzdXAsIHR0LCB2YXIsXG4gIGIsIHUsIGksIGNlbnRlcixcbiAgZGwsIGR0LCBkZCwgb2wsIHVsLCBsaSxcbiAgZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsXG4gIHRhYmxlLCBjYXB0aW9uLCB0Ym9keSwgdGZvb3QsIHRoZWFkLCB0ciwgdGgsIHRkLFxuICBhcnRpY2xlLCBhc2lkZSwgY2FudmFzLCBkZXRhaWxzLCBlbWJlZCxcbiAgZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLFxuICBtYWluLCBtZW51LCBuYXYsIG91dHB1dCwgcnVieSwgc2VjdGlvbiwgc3VtbWFyeSxcbiAgdGltZSwgbWFyaywgYXVkaW8sIHZpZGVvIHtcbiAgICAmOm5vdChbY2xhc3MqPVwiYWRtaW5qc19cIl0pIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgfVxuICB9XG5cbiAgaW1nIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIH1cblxuICBwLCBkaXYge1xuICAgIG1hcmdpbi1ib3R0b206ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ3hsJyl9O1xuICAgIGZvbnQtc2l6ZTogJHt0aGVtZUdldCgnZm9udFNpemVzJywgJ21kJyl9O1xuICAgIGZvbnQtd2VpZ2h0OiAke3RoZW1lR2V0KCdmb250V2VpZ2h0cycsICdsaWdodCcpfTtcbiAgfVxuXG4gIHN0cm9uZywgYiB7XG4gICAgZm9udC13ZWlnaHQ6ICR7dGhlbWVHZXQoJ2ZvbnRXZWlnaHRzJywgJ2JvbGRlcicpfVxuICB9XG5cbiAgbGkgKyBsaSB7XG4gICAgbWFyZ2luLXRvcDogJHt0aGVtZUdldCgnc3BhY2UnLCAnbWQnKX07XG4gIH1cblxuICBwOm5vdCg6bGFzdC1jaGlsZCksXG4gIGRsOm5vdCg6bGFzdC1jaGlsZCksXG4gIG9sOm5vdCg6bGFzdC1jaGlsZCksXG4gIHVsOm5vdCg6bGFzdC1jaGlsZCksXG4gIGJsb2NrcXVvdGU6bm90KDpsYXN0LWNoaWxkKSxcbiAgcHJlOm5vdCg6bGFzdC1jaGlsZCksXG4gIHRhYmxlOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgIG1hcmdpbi1ib3R0b206ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ3hsJyl9O1xuICB9XG5cbiAgcHJlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3RoZW1lR2V0KCdjb2xvcnMnLCAnZ3JleTIwJyl9O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICR7dGhlbWVHZXQoJ2NvbG9ycycsICdncmV5NDAnKX07XG4gICAgcGFkZGluZzogJHt0aGVtZUdldCgnc3BhY2UnLCAneGwnKX07XG4gICAgbWFyZ2luOiAke3RoZW1lR2V0KCdzcGFjZScsICd4bCcpfSAwICR7dGhlbWVHZXQoJ3NwYWNlJywgJ3h4bCcpfTtcbiAgICB3aGl0ZS1zcGFjZTogcHJlO1xuICAgIGZvbnQtZmFtaWx5OiAnQ291cmllciBOZXcnLCBDb3VyaWVyLCBtb25vc3BhY2U7XG4gIH1cblxuICBoMSxcbiAgaDIsXG4gIGgzLFxuICBoNCxcbiAgaDUsXG4gIGg2IHtcbiAgICBmb250LXdlaWdodDogJHt0aGVtZUdldCgnZm9udFdlaWdodHMnLCAnbGlnaHQnKX07XG4gICAgbGluZS1oZWlnaHQ6ICR7dGhlbWVHZXQoJ2xpbmVIZWlnaHRzJywgJ3hsJyl9O1xuICAgIGZvbnQtc2l6ZTogJHt0aGVtZUdldCgnZm9udFNpemVzJywgJ2gzJyl9O1xuICAgIG1hcmdpbi10b3A6ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ3h4bCcpfTtcbiAgICBtYXJnaW4tYm90dG9tOiAke3RoZW1lR2V0KCdzcGFjZScsICd4bCcpfTtcbiAgfVxuXG4gIGgxOmZpcnN0LWNoaWxkLFxuICBoMjpmaXJzdC1jaGlsZCxcbiAgaDM6Zmlyc3QtY2hpbGQsXG4gIGg0OmZpcnN0LWNoaWxkLFxuICBoNTpmaXJzdC1jaGlsZCxcbiAgaDY6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi10b3A6ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ3NtJyl9O1xuICB9XG5cbiAgaDEge1xuICAgIGZvbnQtc2l6ZTogJHt0aGVtZUdldCgnZm9udFNpemVzJywgJ2gxJyl9O1xuICAgIGxpbmUtaGVpZ2h0OiAke3RoZW1lR2V0KCdsaW5lSGVpZ2h0cycsICd4eGwnKX07XG4gICAgbWFyZ2luLXRvcDogJHt0aGVtZUdldCgnc3BhY2UnLCAneDQnKX07XG4gICAgbWFyZ2luLWJvdHRvbTogJHt0aGVtZUdldCgnc3BhY2UnLCAneDMnKX07XG4gIH1cblxuICBoMiB7XG4gICAgZm9udC1zaXplOiAke3RoZW1lR2V0KCdmb250U2l6ZXMnLCAnaDInKX07XG4gICAgbGluZS1oZWlnaHQ6ICR7dGhlbWVHZXQoJ2xpbmVIZWlnaHRzJywgJ3h4bCcpfTtcbiAgICBtYXJnaW4tdG9wOiAke3RoZW1lR2V0KCdzcGFjZScsICd4MycpfTtcbiAgICBtYXJnaW4tYm90dG9tOiAke3RoZW1lR2V0KCdzcGFjZScsICd4eGwnKX07XG4gIH1cblxuICBoMyB7XG5cbiAgfVxuXG4gIGg0IHtcbiAgICBmb250LXNpemU6ICR7dGhlbWVHZXQoJ2ZvbnRTaXplcycsICdoNCcpfTtcbiAgICBsaW5lLWhlaWdodDogJHt0aGVtZUdldCgnbGluZUhlaWdodHMnLCAneGwnKX07XG4gICAgbWFyZ2luLXRvcDogJHt0aGVtZUdldCgnc3BhY2UnLCAneHhsJyl9O1xuICAgIG1hcmdpbi1ib3R0b206ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ3hsJyl9O1xuICB9XG5cbiAgaDUge1xuICAgIGZvbnQtc2l6ZTogJHt0aGVtZUdldCgnZm9udFNpemVzJywgJ3hsJyl9O1xuICAgIGxpbmUtaGVpZ2h0OiAke3RoZW1lR2V0KCdsaW5lSGVpZ2h0cycsICdsZycpfTtcbiAgICBtYXJnaW4tdG9wOiAke3RoZW1lR2V0KCdzcGFjZScsICd4bCcpfTtcbiAgICBtYXJnaW4tYm90dG9tOiAke3RoZW1lR2V0KCdzcGFjZScsICdsZycpfTtcbiAgICBmb250LXdlaWdodDogJHt0aGVtZUdldCgnZm9udFdlaWdodHMnLCAnbm9ybWFsJyl9O1xuICB9XG5cbiAgaDYge1xuICAgIGZvbnQtc2l6ZTogJHt0aGVtZUdldCgnZm9udFNpemVzJywgJ2xnJyl9O1xuICAgIGxpbmUtaGVpZ2h0OiAke3RoZW1lR2V0KCdsaW5lSGVpZ2h0cycsICdsZycpfTtcbiAgICBtYXJnaW4tdG9wOiAke3RoZW1lR2V0KCdzcGFjZScsICdsZycpfTtcbiAgICBtYXJnaW4tYm90dG9tOiAke3RoZW1lR2V0KCdzcGFjZScsICdkZWZhdWx0Jyl9O1xuICAgIGZvbnQtd2VpZ2h0OiAke3RoZW1lR2V0KCdmb250V2VpZ2h0cycsICdub3JtYWwnKX07XG4gIH1cblxuICBibG9ja3F1b3RlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3RoZW1lR2V0KCdjb2xvcnMnLCAnZ3JleTIwJyl9O1xuICAgIGJvcmRlci1sZWZ0OiAke3RoZW1lR2V0KCdzcGFjZScsICdzbScpfSBzb2xpZCAke3RoZW1lR2V0KCdjb2xvcnMnLCAncHJpbWFyeTIwJyl9O1xuICAgIHBhZGRpbmc6ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ3hsJyl9O1xuICAgIG1hcmdpbjogJHt0aGVtZUdldCgnc3BhY2UnLCAneHhsJyl9IDA7XG4gIH1cblxuICBvbCB7XG4gICAgbGlzdC1zdHlsZS1wb3NpdGlvbjogb3V0c2lkZTtcbiAgICBtYXJnaW4tdG9wOiAke3RoZW1lR2V0KCdzcGFjZScsICdsZycpfTtcbiAgICBtYXJnaW4tbGVmdDogJHt0aGVtZUdldCgnc3BhY2UnLCAneGwnKX07XG4gIH1cbiAgb2w6bm90KFt0eXBlXSkge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbDtcbiAgfVxuICBvbDpub3QoW3R5cGVdKS5pcy1sb3dlci1hbHBoYSB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBsb3dlci1hbHBoYTtcbiAgfVxuICBvbDpub3QoW3R5cGVdKS5pcy1sb3dlci1yb21hbiB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBsb3dlci1yb21hbjtcbiAgfVxuICBvbDpub3QoW3R5cGVdKS5pcy11cHBlci1hbHBoYSB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiB1cHBlci1hbHBoYTtcbiAgfVxuICBvbDpub3QoW3R5cGVdKS5pcy11cHBlci1yb21hbiB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiB1cHBlci1yb21hbjtcbiAgfVxuXG4gIHVsIHtcbiAgICBsaXN0LXN0eWxlOiBkaXNjIG91dHNpZGU7XG4gICAgbWFyZ2luLWxlZnQ6ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ3hsJyl9O1xuICAgIG1hcmdpbi10b3A6ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ2xnJyl9O1xuICB9XG4gIHVsIHVsIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IGNpcmNsZTtcbiAgICBtYXJnaW4tdG9wOiAke3RoZW1lR2V0KCdzcGFjZScsICdzbScpfTtcbiAgfVxuICB1bCB1bCB1bCB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBzcXVhcmU7XG4gIH1cblxuICBlbSB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICB9XG5cbiAgZGQge1xuICAgIG1hcmdpbi1sZWZ0OiAke3RoZW1lR2V0KCdzcGFjZScsICd4bCcpfTtcbiAgfVxuXG4gIGZpZ3VyZSB7XG4gICAgbWFyZ2luLWxlZnQ6ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ21kJyl9O1xuICAgIG1hcmdpbi1yaWdodDogJHt0aGVtZUdldCgnc3BhY2UnLCAnbWQnKX07XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIGZpZ3VyZTpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgbWFyZ2luLXRvcDogJHt0aGVtZUdldCgnc3BhY2UnLCAnbWQnKX07XG4gIH1cbiAgZmlndXJlOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgIG1hcmdpbi1ib3R0b206ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ21kJyl9O1xuICB9XG4gIGZpZ3VyZSBpbWcge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxuICBmaWd1cmUgZmlnY2FwdGlvbiB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICB9XG5cbiAgc3VwLFxuICBzdWIge1xuICAgIGZvbnQtc2l6ZTogNzUlO1xuICB9XG5cbiAgdGFibGUge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbjogJHt0aGVtZUdldCgnc3BhY2UnLCAneGwnKX0gMDtcbiAgfVxuICB0YWJsZSB0ZCxcbiAgdGFibGUgdGgge1xuICAgIHBhZGRpbmc6ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ2xnJyl9O1xuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIH1cbiAgdGFibGUgdGgge1xuICAgIGNvbG9yOiAke3RoZW1lR2V0KCdjb2xvcnMnLCAnZ3JleTYwJyl9O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3RoZW1lR2V0KCdjb2xvcnMnLCAnZ3JleTQwJyl9O1xuICB9XG5cbiAgdGFibGUgdGQge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3RoZW1lR2V0KCdjb2xvcnMnLCAnZ3JleTIwJyl9O1xuICB9XG4gIHRhYmxlIHRoOm5vdChbYWxpZ25dKSB7XG4gICAgdGV4dC1hbGlnbjogaW5oZXJpdDtcbiAgfVxuICB0YWJsZSB0aGVhZCB0ZCxcbiAgdGFibGUgdGhlYWQgdGgge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3RoZW1lR2V0KCdjb2xvcnMnLCAnZ3JleTQwJyl9O1xuICAgIGNvbG9yOiAke3RoZW1lR2V0KCdjb2xvcnMnLCAnZ3JleTYwJyl9O1xuICB9XG4gIHRhYmxlIHRmb290IHRkLFxuICB0YWJsZSB0Zm9vdCB0aCB7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7dGhlbWVHZXQoJ2NvbG9ycycsICdncmV5NDAnKX07XG4gICAgY29sb3I6ICR7dGhlbWVHZXQoJ2NvbG9ycycsICdncmV5NjAnKX07XG4gIH1cbiAgdGFibGUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZCxcbiAgdGFibGUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0aCB7XG4gICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgfVxuXG4gIC50YWJzIGxpICsgbGkge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cblxuICAqOm5vdChwcmUpID4gY29kZSB7XG4gICAgY29sb3I6IHJlZCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmc6IDAuMmVtIDAuNGVtICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luOiAwO1xuICAgIGZvbnQtc2l6ZTogODUlO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNhZmI4YzEzMztcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIH1cbmA7XG5leHBvcnQgZGVmYXVsdCBjb250ZW50Q1NTOyIsImltcG9ydCB7IHR5cG9ncmFwaHksIHNwYWNlLCB2YXJpYW50LCBjb2xvciwgbGF5b3V0IH0gZnJvbSAnc3R5bGVkLXN5c3RlbSc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgY29udGVudENTUyBmcm9tIFwiLi4vLi4vdXRpbHMvY29udGVudC1zdHlsZXMuanNcIjtcbmltcG9ydCB7IGNzc0NsYXNzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2Nzcy1jbGFzcy5qc1wiO1xuY29uc3QgdmFyaWFudHMgPSB2YXJpYW50KHtcbiAgdmFyaWFudHM6IHtcbiAgICB4czoge1xuICAgICAgZm9udFNpemU6ICd4cydcbiAgICB9LFxuICAgIHNtOiB7XG4gICAgICBmb250U2l6ZTogJ3NtJ1xuICAgIH0sXG4gICAgbGc6IHtcbiAgICAgIGZvbnRTaXplOiAnbGcnXG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBQcm9wIFR5cGVzIG9mIGEgVGV4dCBjb21wb25lbnQuXG4gKiBBcGFydCBmcm9tIHZhcmlhbnQgaXQgZXh0ZW5kcyBhbGwge0BsaW5rIENvbG9yUHJvcHN9LCB7QGxpbmsgU3BhY2VQcm9wc30gYW5kXG4gKiB7QGxpbmsgVHlwb2dyYXBoeVByb3BzfVxuICpcbiAqIEBtZW1iZXJvZiBUZXh0XG4gKiBAYWxpYXMgVGV4dFByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWy4uLl0gT3RoZXIgcHJvcHMgZnJvbSB7QGxpbmsgQ29sb3JQcm9wc30sIHtAbGluayBTcGFjZVByb3BzfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB7QGxpbmsgVHlwb2dyYXBoeVByb3BzfVxuICovXG5cbi8qKlxuICogQGNsYXNzZGVzY1xuICpcbiAqIDxpbWcgc3JjPVwiY29tcG9uZW50cy90ZXh0LnBuZ1wiIC8+XG4gKlxuICogVXNlIHRoZSBUZXh0IGNvbXBvbmVudCB0byBjb250cm9sIGZvbnQgc2l6ZSwgd2VpZ2h0LCBhbGlnbm1lbnQsIGFuZCBjb2xvci5cbiAqIEJ5IGRlZmF1bHQgaXQgaXMgcmVuZGVyZWQgYXMgYSBgZGl2YCBidXQgeW91IGNhbiBjaGFuZ2UgdGhpcyB0byBvdGhlciAobGlrZSBgc3BhbmApXG4gKiBieSB1c2luZyBgYXNgIHByb3AsXG4gKlxuICogIyMjIFVzYWdlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgVGV4dCwgVGV4dFByb3BzIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSdcbiAqIGBgYFxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBzdWJjYXRlZ29yeSBBdG9tc1xuICogQHNlZSBUZXh0UHJvcHNcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vc3Rvcnlib29rLmFkbWluanMuY28vP3BhdGg9L3N0b3J5L2Rlc2lnbnN5c3RlbS1hdG9tcy10ZXh0LS1kZWZhdWx0IFN0b3J5Ym9va31cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkxvcmVtIGlwc3VtPC9jYXB0aW9uPlxuICogcmV0dXJuIChcbiAqIDxCb3g+XG4gKiAgIDxUZXh0PlxuICogICAgSW4gcHVibGlzaGluZyBhbmQgZ3JhcGhpYyBkZXNpZ24sXG4gKiAgICBMb3JlbSBpcHN1bSBpcyBhIDxiPnBsYWNlaG9sZGVyPC9iPiB0ZXh0IGNvbW1vbmx5IHVzZWQgdG8gZGVtb25zdHJhdGUgdGhlXG4gKiAgICB2aXN1YWwgZm9ybSBvZiBhIGRvY3VtZW50IG9yIGEgdHlwZWZhY2Ugd2l0aG91dCByZWx5aW5nIG9uIG1lYW5pbmdmdWxcbiAqICAgIGNvbnRlbnQuXG4gKiAgIDwvVGV4dD5cbiAqICAgPFRleHQgbXQ9XCJkZWZhdWx0XCIgdmFyaWFudD1cInNtXCI+VGhpcyB0ZXh0IHdhcyBmcm9tIFdpa2lwZWRpYTwvVGV4dD5cbiAqIDwvQm94PlxuICogKVxuICogQHNlY3Rpb24gZGVzaWduLXN5c3RlbVxuICovXG5jb25zdCBUZXh0ID0gc3R5bGVkLmRpdmBcbiAgJHtjb250ZW50Q1NTfTtcbiAgJHt0eXBvZ3JhcGh5fTtcbiAgJHtzcGFjZX07XG4gICR7bGF5b3V0fTtcbiAgJHtjb2xvcn07XG4gICR7dmFyaWFudHN9O1xuYDtcblRleHQuZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6IGNzc0NsYXNzKCdUZXh0Jylcbn07XG5UZXh0LmRpc3BsYXlOYW1lID0gJ1RleHQnO1xuZXhwb3J0IHsgVGV4dCB9O1xuZXhwb3J0IGRlZmF1bHQgVGV4dDsiLCJpbXBvcnQgeyBzcGFjZSwgdHlwb2dyYXBoeSwgbGF5b3V0IH0gZnJvbSAnc3R5bGVkLXN5c3RlbSc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgeyBJbnB1dENTUyB9IGZyb20gXCIuLi9pbnB1dC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgY3NzQ2xhc3MgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY3NzLWNsYXNzLmpzXCI7XG5cbi8qKlxuICogUHJvcCBUeXBlcyBvZiBhIFRleHRBcmVhIGNvbXBvbmVudC5cbiAqIEl0IGV4dGVuZHMgYWxsIHtAbGluayBTcGFjZVByb3BzfSwge0BsaW5rIFR5cG9ncmFwaHlQcm9wc30gYW5kIHtAbGluayBMYXlvdXRQcm9wc31cbiAqIEBtZW1iZXJvZiBUZXh0QXJlYVxuICogQGFsaWFzIFRleHRBcmVhUHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbLi4uXSBBbGwgcHJvcHMgZGVmYXVsdCB0byBfdGV4dGFyZWFfIGh0bWwgY29tcG9uZW50IGxpa2UgYG9uQ2hhbmdlYCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBgdmFsdWVgIGV0Yy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbLi4uXSBQcm9wcyBmcm9tIHtAbGluayBTcGFjZVByb3BzfSwge0BsaW5rIFR5cG9ncmFwaHlQcm9wc31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQge0BsaW5rIExheW91dFByb3BzfSArIHRoZXkgZXh0ZW5kIHtAbGluayBJbnB1dFByb3BzfVxuICovXG5cbi8qKlxuICogQGNsYXNzZGVzY1xuICpcbiAqIDxpbWcgc3JjPVwiY29tcG9uZW50cy90ZXh0YXJlYS5wbmdcIiAvPlxuICpcbiAqIFdyYXBwZWQgYHRleHRhcmVhYCBodG1sIGVsZW1lbnQuXG4gKlxuICogIyMjIFVzYWdlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgVGV4dEFyZWEsIFRleHRBcmVhUHJvcHMgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJ1xuICogYGBgXG4gKlxuICogQGNvbXBvbmVudFxuICogQHN1YmNhdGVnb3J5IEF0b21zXG4gKiBAc2VlIHtAbGluayBodHRwczovL3N0b3J5Ym9vay5hZG1pbmpzLmNvLz9wYXRoPS9zdG9yeS9kZXNpZ25zeXN0ZW0tYXRvbXMtdGV4dGFyZWEtLWRlZmF1bHQgU3Rvcnlib29rfVxuICogQHNlZSBUZXh0QXJlYVByb3BzXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAZXhhbXBsZVxuICogcmV0dXJuIChcbiAqICAgPEJveCBwPVwieGxcIj5cbiAqICAgICAgPExhYmVsIGh0bWxGb3I9XCJ0ZXh0YXJlYTFcIj5Tb21lIGV4YW1wbGUgbGFiZWw8L0xhYmVsPlxuICogICAgICA8VGV4dEFyZWEgaWQ9XCJ0ZXh0YXJlYTFcIiB3aWR0aD17MS8yfSAvPlxuICogICA8L0JveD5cbiAqIClcbiAqIEBzZWN0aW9uIGRlc2lnbi1zeXN0ZW1cbiAqL1xuY29uc3QgVGV4dEFyZWEgPSBzdHlsZWQudGV4dGFyZWFgXG4gICR7SW5wdXRDU1N9XG4gICR7c3BhY2V9O1xuICAke2xheW91dH07XG4gICR7dHlwb2dyYXBoeX07XG5gO1xuVGV4dEFyZWEuZGVmYXVsdFByb3BzID0ge1xuICBweDogJ2RlZmF1bHQnLFxuICBweTogJ2RlZmF1bHQnLFxuICBmb250U2l6ZTogJ2RlZmF1bHQnLFxuICBjbGFzc05hbWU6IGNzc0NsYXNzKCdUZXh0QXJlYScpXG59O1xuVGV4dEFyZWEuZGlzcGxheU5hbWUgPSAnVGV4dEFyZWEnO1xuZXhwb3J0IHsgVGV4dEFyZWEgfTtcbmV4cG9ydCBkZWZhdWx0IFRleHRBcmVhOyIsImltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5jb25zdCB1c2VXaW5kb3dTaXplID0gKCkgPT4ge1xuICAvLyBJbml0aWFsaXplIHN0YXRlIHdpdGggdW5kZWZpbmVkIHdpZHRoL2hlaWdodCBzbyBzZXJ2ZXIgYW5kIGNsaWVudCByZW5kZXJzIG1hdGNoXG4gIC8vIExlYXJuIG1vcmUgaGVyZTogaHR0cHM6Ly9qb3Nod2NvbWVhdS5jb20vcmVhY3QvdGhlLXBlcmlscy1vZi1yZWh5ZHJhdGlvbi9cbiAgY29uc3QgW3dpbmRvd1NpemUsIHNldFdpbmRvd1NpemVdID0gdXNlU3RhdGUoKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBIYW5kbGVyIHRvIGNhbGwgb24gd2luZG93IHJlc2l6ZVxuICAgIGNvbnN0IGhhbmRsZVJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIC8vIFNldCB3aW5kb3cgd2lkdGgvaGVpZ2h0IHRvIHN0YXRlXG4gICAgICBzZXRXaW5kb3dTaXplKHtcbiAgICAgICAgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLFxuICAgICAgICBoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVSZXNpemUpO1xuXG4gICAgLy8gQ2FsbCBoYW5kbGVyIHJpZ2h0IGF3YXkgc28gc3RhdGUgZ2V0cyB1cGRhdGVkIHdpdGggaW5pdGlhbCB3aW5kb3cgc2l6ZVxuICAgIGhhbmRsZVJlc2l6ZSgpO1xuXG4gICAgLy8gUmVtb3ZlIGV2ZW50IGxpc3RlbmVyIG9uIGNsZWFudXBcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gIH0sIFtdKTsgLy8gRW1wdHkgYXJyYXkgZW5zdXJlcyB0aGF0IGVmZmVjdCBpcyBvbmx5IHJ1biBvbiBtb3VudFxuXG4gIHJldHVybiB3aW5kb3dTaXplIHx8IG51bGw7XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlV2luZG93U2l6ZTsiLCJpbXBvcnQgeyBzdHlsZWQsIGNzcyB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB0aGVtZUdldCBmcm9tIFwiLi4vLi4vdXRpbHMvdGhlbWUtZ2V0LmpzXCI7XG5pbXBvcnQgeyBCb3ggfSBmcm9tIFwiLi4vYm94L2luZGV4LmpzXCI7XG5jb25zdCBBUlJPV19XSURUSCA9IDc7XG5jb25zdCB0b3BDU1MgPSBjc3NgXG4gIG1hcmdpbi10b3A6IC0ke3Byb3BzID0+IHByb3BzLmlzVmlzaWJsZSA/IHRoZW1lR2V0KCdzcGFjZScsICdsZycpKHByb3BzKSA6ICcwcHgnfTtcblxuICAmOjphZnRlciwgJjo6YmVmb3JlIHtcbiAgICB0b3A6IDEwMCU7XG4gICAgbGVmdDogNTAlO1xuICB9XG5cbiAgJjo6YWZ0ZXIge1xuICAgIG1hcmdpbi1sZWZ0OiAtJHtBUlJPV19XSURUSH1weDtcbiAgICBib3JkZXItY29sb3I6ICR7dGhlbWVHZXQoJ2NvbG9ycycsICdncmV5MjAnKX0gdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gIH1cblxuICAmOjpiZWZvcmUge1xuICAgIG1hcmdpbi1sZWZ0OiAtJHtBUlJPV19XSURUSCAtIDF9cHg7XG4gICAgYm9yZGVyLWNvbG9yOiAke3RoZW1lR2V0KCdjb2xvcnMnLCAnaGlnaGxpZ2h0Jyl9IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICB9XG5gO1xuY29uc3QgYm90dG9tQ1NTID0gY3NzYFxuICBtYXJnaW4tdG9wOiAke3Byb3BzID0+IHByb3BzLmlzVmlzaWJsZSA/IHRoZW1lR2V0KCdzcGFjZScsICdsZycpKHByb3BzKSA6ICcwcHgnfTtcblxuICAmOjphZnRlciwgJjo6YmVmb3JlIHtcbiAgICBib3R0b206IDEwMCU7XG4gICAgbGVmdDogNTAlO1xuICB9XG5cbiAgJjo6YWZ0ZXIge1xuICAgIG1hcmdpbi1sZWZ0OiAtJHtBUlJPV19XSURUSH1weDtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICR7dGhlbWVHZXQoJ2NvbG9ycycsICdncmV5MjAnKX0gdHJhbnNwYXJlbnQ7XG4gIH1cblxuICAmOjpiZWZvcmUge1xuICAgIG1hcmdpbi1sZWZ0OiAtJHtBUlJPV19XSURUSCAtIDF9cHg7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAke3RoZW1lR2V0KCdjb2xvcnMnLCAnaGlnaGxpZ2h0Jyl9IHRyYW5zcGFyZW50O1xuICB9XG5gO1xuY29uc3QgbGVmdENTUyA9IGNzc2BcbiAgbWFyZ2luLWxlZnQ6IC0ke3Byb3BzID0+IHByb3BzLmlzVmlzaWJsZSA/IHRoZW1lR2V0KCdzcGFjZScsICdsZycpKHByb3BzKSA6ICcwcHgnfTtcblxuICAmOjphZnRlciwgJjo6YmVmb3JlIHtcbiAgICBsZWZ0OiAxMDAlO1xuICAgIHRvcDogNTAlO1xuICB9XG5cbiAgJjo6YWZ0ZXIge1xuICAgIG1hcmdpbi1yaWdodDogLSR7QVJST1dfV0lEVEh9cHg7XG4gICAgbWFyZ2luLXRvcDogLSR7QVJST1dfV0lEVEh9cHg7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAke3RoZW1lR2V0KCdjb2xvcnMnLCAnZ3JleTIwJyl9O1xuICB9XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IC0ke0FSUk9XX1dJRFRIIC0gMX1weDtcbiAgICBtYXJnaW4tdG9wOiAtJHtBUlJPV19XSURUSCAtIDF9cHg7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAke3RoZW1lR2V0KCdjb2xvcnMnLCAnaGlnaGxpZ2h0Jyl9O1xuICB9XG5gO1xuY29uc3QgcmlnaHRDU1MgPSBjc3NgXG4gIG1hcmdpbi1sZWZ0OiAke3Byb3BzID0+IHByb3BzLmlzVmlzaWJsZSA/IHRoZW1lR2V0KCdzcGFjZScsICdsZycpKHByb3BzKSA6ICcwcHgnfTtcblxuICAmOjphZnRlciwgJjo6YmVmb3JlIHtcbiAgICByaWdodDogMTAwJTtcbiAgICB0b3A6IDUwJTtcbiAgfVxuXG4gICY6OmFmdGVyIHtcbiAgICBtYXJnaW4tbGVmdDogLSR7QVJST1dfV0lEVEh9cHg7XG4gICAgbWFyZ2luLXRvcDogLSR7QVJST1dfV0lEVEh9cHg7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCAke3RoZW1lR2V0KCdjb2xvcnMnLCAnZ3JleTIwJyl9IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICB9XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBtYXJnaW4tbGVmdDogLSR7QVJST1dfV0lEVEggLSAxfXB4O1xuICAgIG1hcmdpbi10b3A6IC0ke0FSUk9XX1dJRFRIIC0gMX1weDtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50ICR7dGhlbWVHZXQoJ2NvbG9ycycsICdoaWdobGlnaHQnKX0gdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gIH1cbmA7XG5jb25zdCBnZXRQYWRkaW5nID0gcHJvcHMgPT4ge1xuICBjb25zdCBweCA9IHByb3BzLnNpemUgPT09ICdsZycgPyAneGwnIDogJ21kJztcbiAgY29uc3QgcHkgPSBwcm9wcy5zaXplID09PSAnbGcnID8gJ2xnJyA6ICdzbSc7XG4gIHJldHVybiBgJHt0aGVtZUdldCgnc3BhY2UnLCBweSkocHJvcHMpfSAke3RoZW1lR2V0KCdzcGFjZScsIHB4KShwcm9wcyl9YDtcbn07XG5jb25zdCBTdHlsZWRUb29sdGlwID0gc3R5bGVkKEJveClgXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycywgbWFyZ2luIDAuMnM7XG5cbiAgcG9zaXRpb246IGFic29sdXRlO1xuXG4gIG9wYWNpdHk6ICR7KHtcbiAgaXNWaXNpYmxlXG59KSA9PiBpc1Zpc2libGUgPyAnMScgOiAnMCd9O1xuICBcbiAgcGFkZGluZzogJHtwcm9wcyA9PiBnZXRQYWRkaW5nKHByb3BzKX07XG5cbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIFxuICAmOjphZnRlciB7XG4gICAgY29udGVudDogXCIgXCI7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLXdpZHRoOiA3cHg7XG4gICAgei1pbmRleDogMTtcbiAgfVxuICAmOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci13aWR0aDogNnB4O1xuICAgIHotaW5kZXg6IDI7XG4gIH1cblxuICAke3Byb3BzID0+ICh7XG4gIHRvcDogdG9wQ1NTLFxuICBib3R0b206IGJvdHRvbUNTUyxcbiAgbGVmdDogbGVmdENTUyxcbiAgcmlnaHQ6IHJpZ2h0Q1NTXG59KVtwcm9wcy5kaXJlY3Rpb25dfVxuYDtcblN0eWxlZFRvb2x0aXAuZGVmYXVsdFByb3BzID0ge1xuICBib3JkZXJDb2xvcjogJ2dyZXkyMCcsXG4gIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICBib3JkZXJXaWR0aDogJzFweCcsXG4gIGJnOiAnaGlnaGxpZ2h0JyxcbiAgYm9yZGVyUmFkaXVzOiAnM3B4J1xufTtcbmV4cG9ydCBkZWZhdWx0IFN0eWxlZFRvb2x0aXA7XG5leHBvcnQgeyBTdHlsZWRUb29sdGlwIH07IiwiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VXaW5kb3dTaXplIGZyb20gXCIuLi8uLi9ob29rcy91c2Utd2luZG93LXNpemUuanNcIjtcbmltcG9ydCB7IFN0eWxlZFRvb2x0aXAgfSBmcm9tIFwiLi90b29sdGlwLXN0eWxlZC5qc1wiO1xuLyoqXG4gKiBAY29tcG9uZW50XG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFRvb2x0aXBcbiAqL1xuZXhwb3J0IGNvbnN0IFRvb2x0aXBDb250cm9sID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgdGl0bGUsXG4gICAgY2hpbGRSZWYsXG4gICAgZGlyZWN0aW9uID0gJ2JvdHRvbScsXG4gICAgQ29udGVudEVsZW1lbnQsXG4gICAgc2l6ZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHRvb2x0aXBSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IFtkaW1lbnNpb24sIHNldERpbWVuc2lvbl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3Bvc2l0aW9uLCBzZXRQb3NpdGlvbl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2VsZW1lbnRQb3NpdGlvbiwgc2V0RWxlbWVudFBvc2l0aW9uXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB3aW5kb3dTaXplID0gdXNlV2luZG93U2l6ZSgpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaGlsZFJlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHdpZHRoOiBjbGllbnRXaWR0aCxcbiAgICAgICAgdG9wOiBvZmZzZXRUb3AsXG4gICAgICAgIGxlZnQ6IG9mZnNldExlZnQsXG4gICAgICAgIGhlaWdodDogY2xpZW50SGVpZ2h0XG4gICAgICB9ID0gY2hpbGRSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHNldEVsZW1lbnRQb3NpdGlvbih7XG4gICAgICAgIHdpZHRoOiBjbGllbnRXaWR0aCxcbiAgICAgICAgdG9wOiBvZmZzZXRUb3AsXG4gICAgICAgIGxlZnQ6IG9mZnNldExlZnQsXG4gICAgICAgIGhlaWdodDogY2xpZW50SGVpZ2h0XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtjaGlsZFJlZiwgd2luZG93U2l6ZT8ud2lkdGgsIHdpbmRvd1NpemU/LmhlaWdodF0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0b29sdGlwUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xpZW50V2lkdGgsXG4gICAgICAgIGNsaWVudEhlaWdodFxuICAgICAgfSA9IHRvb2x0aXBSZWYuY3VycmVudDtcbiAgICAgIHNldERpbWVuc2lvbih7XG4gICAgICAgIHdpZHRoOiBjbGllbnRXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBjbGllbnRIZWlnaHRcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW3Rvb2x0aXBSZWY/LmN1cnJlbnQ/LmNsaWVudFdpZHRoLCB0b29sdGlwUmVmPy5jdXJyZW50Py5jbGllbnRIZWlnaHQsIHRpdGxlXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFlbGVtZW50UG9zaXRpb24gfHwgIWRpbWVuc2lvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2VcbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAge1xuICAgICAgICAgIHNldFBvc2l0aW9uKHtcbiAgICAgICAgICAgIHRvcDogZWxlbWVudFBvc2l0aW9uLnRvcCArIGVsZW1lbnRQb3NpdGlvbi5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBlbGVtZW50UG9zaXRpb24ubGVmdCArIGVsZW1lbnRQb3NpdGlvbi53aWR0aCAvIDIgLSBkaW1lbnNpb24ud2lkdGggLyAyXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHtcbiAgICAgICAgICBzZXRQb3NpdGlvbih7XG4gICAgICAgICAgICB0b3A6IGVsZW1lbnRQb3NpdGlvbi50b3AgLSBkaW1lbnNpb24uaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogZWxlbWVudFBvc2l0aW9uLmxlZnQgKyBlbGVtZW50UG9zaXRpb24ud2lkdGggLyAyIC0gZGltZW5zaW9uLndpZHRoIC8gMlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAge1xuICAgICAgICAgIHNldFBvc2l0aW9uKHtcbiAgICAgICAgICAgIHRvcDogZWxlbWVudFBvc2l0aW9uLnRvcCArIGVsZW1lbnRQb3NpdGlvbi5oZWlnaHQgLyAyIC0gZGltZW5zaW9uLmhlaWdodCAvIDIsXG4gICAgICAgICAgICBsZWZ0OiBlbGVtZW50UG9zaXRpb24ubGVmdCAtIGRpbWVuc2lvbi53aWR0aFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIHtcbiAgICAgICAgICBzZXRQb3NpdGlvbih7XG4gICAgICAgICAgICB0b3A6IGVsZW1lbnRQb3NpdGlvbi50b3AgKyBlbGVtZW50UG9zaXRpb24uaGVpZ2h0IC8gMiAtIGRpbWVuc2lvbi5oZWlnaHQgLyAyLFxuICAgICAgICAgICAgbGVmdDogZWxlbWVudFBvc2l0aW9uLmxlZnQgKyBlbGVtZW50UG9zaXRpb24ud2lkdGhcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgfSwgW2VsZW1lbnRQb3NpdGlvbiwgZGltZW5zaW9uLCBkaXJlY3Rpb25dKTtcbiAgY29uc3QgaXNWaXNpYmxlID0gISEoZGltZW5zaW9uICYmIHBvc2l0aW9uKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZFRvb2x0aXAsIHtcbiAgICByZWY6IHRvb2x0aXBSZWYsXG4gICAgbGVmdDogcG9zaXRpb24/LmxlZnQgfHwgJy0xMTEwcHgnLFxuICAgIHRvcDogcG9zaXRpb24/LnRvcCB8fCAnLTExMTBweCcsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICBkaXJlY3Rpb246IGRpcmVjdGlvbixcbiAgICBpc1Zpc2libGU6IGlzVmlzaWJsZVxuICB9LCBDb250ZW50RWxlbWVudCB8fCB0aXRsZSk7XG59O1xuVG9vbHRpcENvbnRyb2wuZGlzcGxheU5hbWUgPSAnVG9vbHRpcENvbnRyb2wnO1xuZXhwb3J0IGRlZmF1bHQgVG9vbHRpcENvbnRyb2w7IiwiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VSZWYsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUG9ydGFsVXRpbHMgZnJvbSBcIi4uLy4uL3V0aWxzL3BvcnRhbC11dGlscy5qc1wiO1xuaW1wb3J0IHsgVG9vbHRpcENvbnRyb2wgfSBmcm9tIFwiLi90b29sdGlwLWNvbnRyb2wuanNcIjtcbmNvbnN0IFRvb2x0aXBQb3J0YWwgPSBQb3J0YWxVdGlscy5jcmVhdGVQb3J0YWxGb3JLZXkoJ1RPT0xUSVAnLCBUb29sdGlwQ29udHJvbCk7XG5cbi8qKlxuICogQGxvYWQgLi90b29sdGlwLmRvYy5tZFxuICogQGNvbXBvbmVudFxuICogQHN1YmNhdGVnb3J5IEF0b21zXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAbmV3IEluIHZlcnNpb24gMy4zXG4gKiBAc2VjdGlvbiBkZXNpZ24tc3lzdGVtXG4gKi9cbmV4cG9ydCBjb25zdCBUb29sdGlwID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgZGlyZWN0aW9uLFxuICAgIHRpdGxlLFxuICAgIGNoaWxkcmVuLFxuICAgIHNpemVcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjaGlsZFJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgW2lzVmlzaWJsZSwgc2V0SXNWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgbGV0IFRyaWdnZXJFbGVtZW50O1xuICBsZXQgQ29udGVudEVsZW1lbnQ7XG4gIGNvbnN0IGNoaWxkcmVuQ291bnQgPSBSZWFjdC5DaGlsZHJlbi5jb3VudChjaGlsZHJlbik7XG4gIGlmIChjaGlsZHJlbkNvdW50ID09PSAxKSB7XG4gICAgVHJpZ2dlckVsZW1lbnQgPSBjaGlsZHJlbjtcbiAgfSBlbHNlIGlmIChjaGlsZHJlbkNvdW50ID09PSAyKSB7XG4gICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IGNoaWxkLnR5cGU/LmRpc3BsYXlOYW1lO1xuICAgICAgaWYgKHR5cGUgPT09ICdUb29sdGlwQ29udGVudCcpIHtcbiAgICAgICAgQ29udGVudEVsZW1lbnQgPSBjaGlsZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFRyaWdnZXJFbGVtZW50ID0gY2hpbGQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgY29uc3Qgb25FbnRlciA9ICgpID0+IHtcbiAgICBzZXRJc1Zpc2libGUodHJ1ZSk7XG4gIH07XG4gIGNvbnN0IG9uTGVhdmUgPSAoKSA9PiB7XG4gICAgc2V0SXNWaXNpYmxlKGZhbHNlKTtcbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tdW5zdGFibGUtbmVzdGVkLWNvbXBvbmVudHNcbiAgY29uc3QgQ2hpbGRXaXRoUmVmID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoKHRyaWdnZXJQcm9wcywgcmVmKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KFRyaWdnZXJFbGVtZW50LCB7XG4gICAgLi4udHJpZ2dlclByb3BzLFxuICAgIGRpc3BsYXlOYW1lOiAnVG9vbHRpcFRyaWdnZXInLFxuICAgIHJlZlxuICB9KSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hpbGRXaXRoUmVmLCB7XG4gICAgcmVmOiBjaGlsZFJlZixcbiAgICBvbk1vdXNlRW50ZXI6IG9uRW50ZXIsXG4gICAgb25Nb3VzZUxlYXZlOiBvbkxlYXZlXG4gIH0pLCBpc1Zpc2libGUgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFBvcnRhbCwge1xuICAgIHRpdGxlOiB0aXRsZSxcbiAgICBjaGlsZFJlZjogY2hpbGRSZWYsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICBkaXJlY3Rpb246IGRpcmVjdGlvbixcbiAgICBDb250ZW50RWxlbWVudDogQ29udGVudEVsZW1lbnRcbiAgfSkpO1xufTtcblRvb2x0aXAuZGlzcGxheU5hbWUgPSAnVG9vbHRpcCc7XG5leHBvcnQgZGVmYXVsdCBUb29sdGlwOyIsImltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IEJveCB9IGZyb20gXCIuLi9ib3gvaW5kZXguanNcIjtcblxuLyoqXG4gKiBAY29tcG9uZW50XG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY29uc3QgVG9vbHRpcENvbnRlbnQgPSBzdHlsZWQoQm94KWBgO1xuVG9vbHRpcENvbnRlbnQuZGlzcGxheU5hbWUgPSAnVG9vbHRpcENvbnRlbnQnO1xuZXhwb3J0IGRlZmF1bHQgVG9vbHRpcENvbnRlbnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdHlwb2dyYXBoeSwgc3BhY2UgfSBmcm9tICdzdHlsZWQtc3lzdGVtJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9idXR0b24vaW5kZXguanNcIjtcbmltcG9ydCB7IEJhZGdlIH0gZnJvbSBcIi4uL2JhZGdlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBjc3NDbGFzcyB9IGZyb20gXCIuLi8uLi91dGlscy9jc3MtY2xhc3MuanNcIjtcbmltcG9ydCB0aGVtZUdldCBmcm9tIFwiLi4vLi4vdXRpbHMvdGhlbWUtZ2V0LmpzXCI7XG5cbi8qKlxuICogUHJvcCBUeXBlcyBvZiBhbiBIZWFkZXIgY29tcG9uZW50cy5cbiAqIEFwYXJ0IGZyb20gYWxsIHByb3BzIGZvciBhIHN0YW5kYXJkIGh4IGVsZW1lbnRzIGl0IGV4dGVuZHNcbiAqIHtAbGluayBUeXBvZ3JhcGh5UHJvcHN9IGFuZCB7QGxpbmsgU3BhY2VQcm9wc31cbiAqXG4gKiBAbWVtYmVyb2YgSGVhZGVyXG4gKiBAYWxpYXMgSGVhZGVyUHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbLi4uXSBPdGhlciBwcm9wcyBmcm9tIHtAbGluayBUeXBvZ3JhcGh5UHJvcHN9LCB7QGxpbmsgU3BhY2VQcm9wc31cbiAqL1xuXG5jb25zdCBCYXNlID0gc3R5bGVkLmgzYFxuICBmb250LWZhbWlseTogJHt0aGVtZUdldCgnZm9udCcpfTtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgcGFkZGluZzogMDtcbiAgKiB7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAmICR7QnV0dG9ufSwgYSB7XG4gICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgfVxuICAqID4gJjpmaXJzdC1jaGlsZCB7XG4gICAgbWFyZ2luLXRvcDogJHt0aGVtZUdldCgnc3BhY2UnLCAnc20nKX07XG4gIH1cbiAgJHtCYWRnZX0ge1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIH1cblxuICAke3R5cG9ncmFwaHl9O1xuICAke3NwYWNlfTtcbmA7XG5CYXNlLmRlZmF1bHRQcm9wcyA9IHtcbiAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gIGZvbnRTaXplOiAnaDMnLFxuICBsaW5lSGVpZ2h0OiAneGwnLFxuICBjbGFzc05hbWU6IGNzc0NsYXNzKFsnSGVhZGVyJywgJ0gzJ10pLFxuICBtYXJnaW5Ub3A6ICd4eGwnLFxuICBtYXJnaW5Cb3R0b206ICd4bCdcbn07XG5leHBvcnQgY29uc3QgSDEgPSBzdHlsZWQocHJvcHMgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZSwgX2V4dGVuZHMoe1xuICBhczogXCJoMVwiXG59LCBwcm9wcykpKWBgO1xuSDEuZGVmYXVsdFByb3BzID0ge1xuICBmb250U2l6ZTogJ2gxJyxcbiAgbGluZUhlaWdodDogJ3h4bCcsXG4gIGNsYXNzTmFtZTogY3NzQ2xhc3MoWydIZWFkZXInLCAnSDEnXSksXG4gIG1hcmdpblRvcDogJ3g0JyxcbiAgbWFyZ2luQm90dG9tOiAneDMnXG59O1xuSDEuZGlzcGxheU5hbWUgPSAnSDEnO1xuZXhwb3J0IGNvbnN0IEgyID0gc3R5bGVkKHByb3BzID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJhc2UsIF9leHRlbmRzKHtcbiAgYXM6IFwiaDJcIlxufSwgcHJvcHMpKSlgXG4gICYgJHtCdXR0b259LCBhIHtcbiAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gIH1cbmA7XG5IMi5kZWZhdWx0UHJvcHMgPSB7XG4gIGZvbnRTaXplOiAnaDInLFxuICBsaW5lSGVpZ2h0OiAneHhsJyxcbiAgY2xhc3NOYW1lOiBjc3NDbGFzcyhbJ0hlYWRlcicsICdIMiddKSxcbiAgbWFyZ2luVG9wOiAneDMnLFxuICBtYXJnaW5Cb3R0b206ICd4eGwnXG59O1xuSDIuZGlzcGxheU5hbWUgPSAnSDInO1xuZXhwb3J0IGNvbnN0IEgzID0gQmFzZTtcbkgzLmRpc3BsYXlOYW1lID0gJ0gzJztcbmV4cG9ydCBjb25zdCBINCA9IHN0eWxlZChwcm9wcyA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlLCBfZXh0ZW5kcyh7XG4gIGFzOiBcImg0XCJcbn0sIHByb3BzKSkpYGA7XG5INC5kZWZhdWx0UHJvcHMgPSB7XG4gIGZvbnRTaXplOiAnaDQnLFxuICBsaW5lSGVpZ2h0OiAneGwnLFxuICBjbGFzc05hbWU6IGNzc0NsYXNzKFsnSGVhZGVyJywgJ0g0J10pLFxuICBtYXJnaW5Ub3A6ICd4eGwnLFxuICBtYXJnaW5Cb3R0b206ICd4bCdcbn07XG5INC5kaXNwbGF5TmFtZSA9ICdINCc7XG5leHBvcnQgY29uc3QgSDUgPSBzdHlsZWQocHJvcHMgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZSwgX2V4dGVuZHMoe1xuICBhczogXCJoNVwiXG59LCBwcm9wcykpKWBgO1xuSDUuZGVmYXVsdFByb3BzID0ge1xuICBmb250U2l6ZTogJ3hsJyxcbiAgbGluZUhlaWdodDogJ2xnJyxcbiAgY2xhc3NOYW1lOiBjc3NDbGFzcyhbJ0hlYWRlcicsICdINSddKSxcbiAgbWFyZ2luVG9wOiAneGwnLFxuICBtYXJnaW5Cb3R0b206ICdkZWZhdWx0JyxcbiAgZm9udFdlaWdodDogJ25vcm1hbCdcbn07XG5INS5kaXNwbGF5TmFtZSA9ICdINSc7XG5leHBvcnQgY29uc3QgSDYgPSBzdHlsZWQocHJvcHMgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZSwgX2V4dGVuZHMoe1xuICBhczogXCJoNlwiXG59LCBwcm9wcykpKWBgO1xuSDYuZGVmYXVsdFByb3BzID0ge1xuICBmb250U2l6ZTogJ2xnJyxcbiAgbGluZUhlaWdodDogJ2xnJyxcbiAgY2xhc3NOYW1lOiBjc3NDbGFzcyhbJ0hlYWRlcicsICdINiddKSxcbiAgbWFyZ2luVG9wOiAnbGcnLFxuICBtYXJnaW5Cb3R0b206ICdkZWZhdWx0JyxcbiAgZm9udFdlaWdodDogJ25vcm1hbCdcbn07XG5INi5kaXNwbGF5TmFtZSA9ICdINic7XG5cbi8qKlxuICogQGxvYWQgLi9oZWFkZXIuZG9jLm1kXG4gKiBAY29tcG9uZW50XG4gKiBAc3ViY2F0ZWdvcnkgQXRvbXNcbiAqIEBzZWUgSGVhZGVyUHJvcHNcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vc3Rvcnlib29rLmFkbWluanMuY28vP3BhdGg9L3N0b3J5L2Rlc2lnbnN5c3RlbS1hdG9tcy1oZWFkZXItLWRlZmF1bHQgU3Rvcnlib29rfVxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHNlY3Rpb24gZGVzaWduLXN5c3RlbVxuICovXG5leHBvcnQgY29uc3QgSGVhZGVyID0gSDM7XG5IZWFkZXIuSDEgPSBIMTtcbkhlYWRlci5IMiA9IEgyO1xuSGVhZGVyLkgzID0gSDM7XG5IZWFkZXIuSDQgPSBINDtcbkhlYWRlci5INSA9IEg1O1xuSGVhZGVyLkg2ID0gSDY7XG5leHBvcnQgZGVmYXVsdCBIZWFkZXI7IiwiaW1wb3J0IHsgdHlwb2dyYXBoeSwgc3BhY2UgfSBmcm9tICdzdHlsZWQtc3lzdGVtJztcbmltcG9ydCB7IGNzcyB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB0aGVtZUdldCBmcm9tIFwiLi4vLi4vdXRpbHMvdGhlbWUtZ2V0LmpzXCI7XG5leHBvcnQgY29uc3QgQ2FwdGlvblNoYXJlZCA9IGNzc2BcbiAgZm9udC1mYW1pbHk6ICR7dGhlbWVHZXQoJ2ZvbnQnKX07XG4gIGZvbnQtd2VpZ2h0OiAke3RoZW1lR2V0KCdmb250V2VpZ2h0cycsICdub3JtYWwnKX07XG4gICR7dHlwb2dyYXBoeX07XG4gICR7c3BhY2V9O1xuYDtcbmV4cG9ydCBkZWZhdWx0IENhcHRpb25TaGFyZWQ7IiwiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuaW1wb3J0IHRoZW1lR2V0IGZyb20gXCIuLi8uLi91dGlscy90aGVtZS1nZXQuanNcIjtcbmltcG9ydCBDYXB0aW9uU2hhcmVkIGZyb20gXCIuL2NhcHRpb24tc2hhcmVkLmpzXCI7XG5leHBvcnQgY29uc3QgQ2FwdGlvbiA9IHN0eWxlZCgnZGl2JylgXG4gICR7Q2FwdGlvblNoYXJlZH07XG4gIGZvbnQtc2l6ZTogJHt0aGVtZUdldCgnZm9udFNpemVzJywgJ3NtJyl9O1xuICBsaW5lLWhlaWdodDogJHt0aGVtZUdldCgnbGluZUhlaWdodHMnLCAnbWQnKX07XG5gO1xuQ2FwdGlvbi5kaXNwbGF5TmFtZSA9ICdDYXB0aW9uJztcbmV4cG9ydCBkZWZhdWx0IENhcHRpb247IiwiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuaW1wb3J0IHRoZW1lR2V0IGZyb20gXCIuLi8uLi91dGlscy90aGVtZS1nZXQuanNcIjtcbmltcG9ydCBDYXB0aW9uU2hhcmVkIGZyb20gXCIuL2NhcHRpb24tc2hhcmVkLmpzXCI7XG5leHBvcnQgY29uc3QgQ2FyZFRpdGxlID0gc3R5bGVkKCdkaXYnKWBcbiAgJHtDYXB0aW9uU2hhcmVkfTtcbiAgZm9udC1zaXplOiAke3RoZW1lR2V0KCdmb250U2l6ZXMnLCAnbWQnKX07XG4gIGxpbmUtaGVpZ2h0OiAke3RoZW1lR2V0KCdsaW5lSGVpZ2h0cycsICdsZycpfTtcbiAgbWFyZ2luOiAke3RoZW1lR2V0KCdzcGFjZScsICdsZycpfSAwO1xuICAqID4gJjpmaXJzdC1jaGlsZCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxuYDtcbkNhcmRUaXRsZS5kaXNwbGF5TmFtZSA9ICdDYXJkVGl0bGUnO1xuZXhwb3J0IGRlZmF1bHQgQ2FyZFRpdGxlOyIsImltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB0aGVtZUdldCBmcm9tIFwiLi4vLi4vdXRpbHMvdGhlbWUtZ2V0LmpzXCI7XG5pbXBvcnQgQ2FwdGlvblNoYXJlZCBmcm9tIFwiLi9jYXB0aW9uLXNoYXJlZC5qc1wiO1xuZXhwb3J0IGNvbnN0IFNtYWxsVGV4dCA9IHN0eWxlZCgnZGl2JylgXG4gICR7Q2FwdGlvblNoYXJlZH07XG4gIGZvbnQtc2l6ZTogJHt0aGVtZUdldCgnZm9udFNpemVzJywgJ3hzJyl9O1xuICBsaW5lLWhlaWdodDogJHt0aGVtZUdldCgnbGluZUhlaWdodHMnLCAnc20nKX07XG5gO1xuU21hbGxUZXh0LmRpc3BsYXlOYW1lID0gJ1NtYWxsVGV4dCc7XG5leHBvcnQgZGVmYXVsdCBTbWFsbFRleHQ7IiwiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuaW1wb3J0IHRoZW1lR2V0IGZyb20gXCIuLi8uLi91dGlscy90aGVtZS1nZXQuanNcIjtcbmltcG9ydCBDYXB0aW9uU2hhcmVkIGZyb20gXCIuL2NhcHRpb24tc2hhcmVkLmpzXCI7XG5leHBvcnQgY29uc3QgVGl0bGUgPSBzdHlsZWQoJ2RpdicpYFxuICAke0NhcHRpb25TaGFyZWR9O1xuICBmb250LXNpemU6ICR7dGhlbWVHZXQoJ2ZvbnRTaXplcycsICdtZCcpfTtcbiAgbGluZS1oZWlnaHQ6ICR7dGhlbWVHZXQoJ2xpbmVIZWlnaHRzJywgJ2xnJyl9O1xuYDtcblRpdGxlLmRpc3BsYXlOYW1lID0gJ1RpdGxlJztcbmV4cG9ydCBkZWZhdWx0IFRpdGxlOyIsIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQocmVxdWlyZShcInJlYWN0XCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcInJlYWN0XCJdLHQpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMucmVhY3RUZXh0TWFzaz10KHJlcXVpcmUoXCJyZWFjdFwiKSk6ZS5yZWFjdFRleHRNYXNrPXQoZS5SZWFjdCl9KHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7aWYocltuXSlyZXR1cm4gcltuXS5leHBvcnRzO3ZhciBvPXJbbl09e2V4cG9ydHM6e30saWQ6bixsb2FkZWQ6ITF9O3JldHVybiBlW25dLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLHQpLG8ubG9hZGVkPSEwLG8uZXhwb3J0c312YXIgcj17fTtyZXR1cm4gdC5tPWUsdC5jPXIsdC5wPVwiXCIsdCgwKX0oW2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBvKGUsdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIGUpdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHJbbl09ZVtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gaShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gYShlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hdHx8XCJvYmplY3RcIiE9dHlwZW9mIHQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIHUoZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmNvbmZvcm1Ub01hc2s9dm9pZCAwO3ZhciBzPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9LGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24odCxyLG4pe3JldHVybiByJiZlKHQucHJvdG90eXBlLHIpLG4mJmUodCxuKSx0fX0oKSxmPXIoMyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJjb25mb3JtVG9NYXNrXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4oZikuZGVmYXVsdH19KTt2YXIgYz1yKDExKSxwPW4oYyksZD1yKDkpLGg9bihkKSx2PXIoNSkseT1uKHYpLG09cigyKSxiPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZTtpKHRoaXMsdCk7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheShyKSxvPTA7bzxyO28rKyluW29dPWFyZ3VtZW50c1tvXTt2YXIgdT1hKHRoaXMsKGU9dC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQobikpKTtyZXR1cm4gdS5zZXRSZWY9dS5zZXRSZWYuYmluZCh1KSx1Lm9uQmx1cj11Lm9uQmx1ci5iaW5kKHUpLHUub25DaGFuZ2U9dS5vbkNoYW5nZS5iaW5kKHUpLHV9cmV0dXJuIHUodCxlKSxsKHQsW3trZXk6XCJzZXRSZWZcIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmlucHV0RWxlbWVudD1lfX0se2tleTpcImluaXRUZXh0TWFza1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PXRoaXMucHJvcHMudmFsdWU7dGhpcy50ZXh0TWFza0lucHV0RWxlbWVudD0oMCx5LmRlZmF1bHQpKHMoe2lucHV0RWxlbWVudDp0aGlzLmlucHV0RWxlbWVudH0sZSkpLHRoaXMudGV4dE1hc2tJbnB1dEVsZW1lbnQudXBkYXRlKHQpfX0se2tleTpcImNvbXBvbmVudERpZE1vdW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmluaXRUZXh0TWFzaygpfX0se2tleTpcImNvbXBvbmVudERpZFVwZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMscj10LnZhbHVlLG49dC5waXBlLG89dC5tYXNrLGk9dC5ndWlkZSxhPXQucGxhY2Vob2xkZXJDaGFyLHU9dC5zaG93TWFzayxzPXtndWlkZTppLHBsYWNlaG9sZGVyQ2hhcjphLHNob3dNYXNrOnV9LGw9XCJmdW5jdGlvblwiPT10eXBlb2YgbiYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5waXBlP24udG9TdHJpbmcoKSE9PWUucGlwZS50b1N0cmluZygpOigwLG0uaXNOaWwpKG4pJiYhKDAsbS5pc05pbCkoZS5waXBlKXx8ISgwLG0uaXNOaWwpKG4pJiYoMCxtLmlzTmlsKShlLnBpcGUpLGY9by50b1N0cmluZygpIT09ZS5tYXNrLnRvU3RyaW5nKCksYz1PYmplY3Qua2V5cyhzKS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiBzW3RdIT09ZVt0XX0pfHxmfHxsLHA9ciE9PXRoaXMuaW5wdXRFbGVtZW50LnZhbHVlOyhwfHxjKSYmdGhpcy5pbml0VGV4dE1hc2soKX19LHtrZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbiBlKCl7dmFyIHQ9dGhpcy5wcm9wcyxlPXQucmVuZGVyLHI9byh0LFtcInJlbmRlclwiXSk7cmV0dXJuIGRlbGV0ZSByLm1hc2ssZGVsZXRlIHIuZ3VpZGUsZGVsZXRlIHIucGlwZSxkZWxldGUgci5wbGFjZWhvbGRlckNoYXIsZGVsZXRlIHIua2VlcENoYXJQb3NpdGlvbnMsZGVsZXRlIHIudmFsdWUsZGVsZXRlIHIub25CbHVyLGRlbGV0ZSByLm9uQ2hhbmdlLGRlbGV0ZSByLnNob3dNYXNrLGUodGhpcy5zZXRSZWYscyh7b25CbHVyOnRoaXMub25CbHVyLG9uQ2hhbmdlOnRoaXMub25DaGFuZ2UsZGVmYXVsdFZhbHVlOnRoaXMucHJvcHMudmFsdWV9LHIpKX19LHtrZXk6XCJvbkNoYW5nZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMudGV4dE1hc2tJbnB1dEVsZW1lbnQudXBkYXRlKCksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5wcm9wcy5vbkNoYW5nZSYmdGhpcy5wcm9wcy5vbkNoYW5nZShlKX19LHtrZXk6XCJvbkJsdXJcIix2YWx1ZTpmdW5jdGlvbihlKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLnByb3BzLm9uQmx1ciYmdGhpcy5wcm9wcy5vbkJsdXIoZSl9fV0pLHR9KHAuZGVmYXVsdC5QdXJlQ29tcG9uZW50KTt0LmRlZmF1bHQ9YixiLnByb3BUeXBlcz17bWFzazpoLmRlZmF1bHQub25lT2ZUeXBlKFtoLmRlZmF1bHQuYXJyYXksaC5kZWZhdWx0LmZ1bmMsaC5kZWZhdWx0LmJvb2wsaC5kZWZhdWx0LnNoYXBlKHttYXNrOmguZGVmYXVsdC5vbmVPZlR5cGUoW2guZGVmYXVsdC5hcnJheSxoLmRlZmF1bHQuZnVuY10pLHBpcGU6aC5kZWZhdWx0LmZ1bmN9KV0pLmlzUmVxdWlyZWQsZ3VpZGU6aC5kZWZhdWx0LmJvb2wsdmFsdWU6aC5kZWZhdWx0Lm9uZU9mVHlwZShbaC5kZWZhdWx0LnN0cmluZyxoLmRlZmF1bHQubnVtYmVyXSkscGlwZTpoLmRlZmF1bHQuZnVuYyxwbGFjZWhvbGRlckNoYXI6aC5kZWZhdWx0LnN0cmluZyxrZWVwQ2hhclBvc2l0aW9uczpoLmRlZmF1bHQuYm9vbCxzaG93TWFzazpoLmRlZmF1bHQuYm9vbH0sYi5kZWZhdWx0UHJvcHM9e3JlbmRlcjpmdW5jdGlvbihlLHQpe3JldHVybiBwLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImlucHV0XCIscyh7cmVmOmV9LHQpKX19fSxmdW5jdGlvbihlLHQpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQucGxhY2Vob2xkZXJDaGFyPVwiX1wiLHQuc3RyRnVuY3Rpb249XCJmdW5jdGlvblwifSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpmLHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwucGxhY2Vob2xkZXJDaGFyO2lmKCFvKGUpKXRocm93IG5ldyBFcnJvcihcIlRleHQtbWFzazpjb252ZXJ0TWFza1RvUGxhY2Vob2xkZXI7IFRoZSBtYXNrIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXkuXCIpO2lmKGUuaW5kZXhPZih0KSE9PS0xKXRocm93IG5ldyBFcnJvcihcIlBsYWNlaG9sZGVyIGNoYXJhY3RlciBtdXN0IG5vdCBiZSB1c2VkIGFzIHBhcnQgb2YgdGhlIG1hc2suIFBsZWFzZSBzcGVjaWZ5IGEgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHByZXNlbnQgaW4geW91ciBtYXNrIGFzIHlvdXIgcGxhY2Vob2xkZXIgY2hhcmFjdGVyLlxcblxcblwiKyhcIlRoZSBwbGFjZWhvbGRlciBjaGFyYWN0ZXIgdGhhdCB3YXMgcmVjZWl2ZWQgaXM6IFwiK0pTT04uc3RyaW5naWZ5KHQpK1wiXFxuXFxuXCIpKyhcIlRoZSBtYXNrIHRoYXQgd2FzIHJlY2VpdmVkIGlzOiBcIitKU09OLnN0cmluZ2lmeShlKSkpO3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFJlZ0V4cD90OmV9KS5qb2luKFwiXCIpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkoZSl8fGUgaW5zdGFuY2VvZiBBcnJheX1mdW5jdGlvbiBpKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfHxlIGluc3RhbmNlb2YgU3RyaW5nfWZ1bmN0aW9uIGEoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJnZvaWQgMD09PWUubGVuZ3RoJiYhaXNOYU4oZSl9ZnVuY3Rpb24gdShlKXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgZXx8bnVsbD09PWV9ZnVuY3Rpb24gcyhlKXtmb3IodmFyIHQ9W10scj12b2lkIDA7cj1lLmluZGV4T2YoYyksciE9PS0xOyl0LnB1c2gociksZS5zcGxpY2UociwxKTtyZXR1cm57bWFza1dpdGhvdXRDYXJldFRyYXBzOmUsaW5kZXhlczp0fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmNvbnZlcnRNYXNrVG9QbGFjZWhvbGRlcj1uLHQuaXNBcnJheT1vLHQuaXNTdHJpbmc9aSx0LmlzTnVtYmVyPWEsdC5pc05pbD11LHQucHJvY2Vzc0NhcmV0VHJhcHM9czt2YXIgbD1yKDEpLGY9W10sYz1cIltdXCJ9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnMsdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dSxyPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtpZighKDAsaS5pc0FycmF5KSh0KSl7aWYoKFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0P1widW5kZWZpbmVkXCI6byh0KSkhPT1hLnN0ckZ1bmN0aW9uKXRocm93IG5ldyBFcnJvcihcIlRleHQtbWFzazpjb25mb3JtVG9NYXNrOyBUaGUgbWFzayBwcm9wZXJ0eSBtdXN0IGJlIGFuIGFycmF5LlwiKTt0PXQoZSxyKSx0PSgwLGkucHJvY2Vzc0NhcmV0VHJhcHMpKHQpLm1hc2tXaXRob3V0Q2FyZXRUcmFwc312YXIgbj1yLmd1aWRlLGw9dm9pZCAwPT09bnx8bixmPXIucHJldmlvdXNDb25mb3JtZWRWYWx1ZSxjPXZvaWQgMD09PWY/czpmLHA9ci5wbGFjZWhvbGRlckNoYXIsZD12b2lkIDA9PT1wP2EucGxhY2Vob2xkZXJDaGFyOnAsaD1yLnBsYWNlaG9sZGVyLHY9dm9pZCAwPT09aD8oMCxpLmNvbnZlcnRNYXNrVG9QbGFjZWhvbGRlcikodCxkKTpoLHk9ci5jdXJyZW50Q2FyZXRQb3NpdGlvbixtPXIua2VlcENoYXJQb3NpdGlvbnMsYj1sPT09ITEmJnZvaWQgMCE9PWMsZz1lLmxlbmd0aCxrPWMubGVuZ3RoLEM9di5sZW5ndGgsTz10Lmxlbmd0aCxUPWctayxQPVQ+MCx4PXkrKFA/LVQ6MCksdz14K01hdGguYWJzKFQpO2lmKG09PT0hMCYmIVApe2Zvcih2YXIgUz1zLF89eDtfPHc7XysrKXZbX109PT1kJiYoUys9ZCk7ZT1lLnNsaWNlKDAseCkrUytlLnNsaWNlKHgsZyl9Zm9yKHZhciBNPWUuc3BsaXQocykubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJue2NoYXI6ZSxpc05ldzp0Pj14JiZ0PHd9fSksaj1nLTE7aj49MDtqLS0pe3ZhciBFPU1bal0uY2hhcjtpZihFIT09ZCl7dmFyIFI9aj49eCYmaz09PU87RT09PXZbUj9qLVQ6al0mJk0uc3BsaWNlKGosMSl9fXZhciBWPXMsTj0hMTtlOmZvcih2YXIgQT0wO0E8QztBKyspe3ZhciBCPXZbQV07aWYoQj09PWQpe2lmKE0ubGVuZ3RoPjApZm9yKDtNLmxlbmd0aD4wOyl7dmFyIEk9TS5zaGlmdCgpLEY9SS5jaGFyLHE9SS5pc05ldztpZihGPT09ZCYmYiE9PSEwKXtWKz1kO2NvbnRpbnVlIGV9aWYodFtBXS50ZXN0KEYpKXtpZihtPT09ITAmJnEhPT0hMSYmYyE9PXMmJmwhPT0hMSYmUCl7Zm9yKHZhciBEPU0ubGVuZ3RoLEw9bnVsbCxXPTA7VzxEO1crKyl7dmFyIEo9TVtXXTtpZihKLmNoYXIhPT1kJiZKLmlzTmV3PT09ITEpYnJlYWs7aWYoSi5jaGFyPT09ZCl7TD1XO2JyZWFrfX1udWxsIT09TD8oVis9RixNLnNwbGljZShMLDEpKTpBLS19ZWxzZSBWKz1GO2NvbnRpbnVlIGV9Tj0hMH1iPT09ITEmJihWKz12LnN1YnN0cihBLEMpKTticmVha31WKz1CfWlmKGImJlA9PT0hMSl7Zm9yKHZhciBVPW51bGwsSD0wO0g8Vi5sZW5ndGg7SCsrKXZbSF09PT1kJiYoVT1IKTtWPW51bGwhPT1VP1Yuc3Vic3RyKDAsVSsxKTpzfXJldHVybntjb25mb3JtZWRWYWx1ZTpWLG1ldGE6e3NvbWVDaGFyc1JlamVjdGVkOk59fX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfTt0LmRlZmF1bHQ9bjt2YXIgaT1yKDIpLGE9cigxKSx1PVtdLHM9XCJcIn0sZnVuY3Rpb24oZSx0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKGUpe3ZhciB0PWUucHJldmlvdXNDb25mb3JtZWRWYWx1ZSxyPXZvaWQgMD09PXQ/bzp0LGk9ZS5wcmV2aW91c1BsYWNlaG9sZGVyLGE9dm9pZCAwPT09aT9vOmksdT1lLmN1cnJlbnRDYXJldFBvc2l0aW9uLHM9dm9pZCAwPT09dT8wOnUsbD1lLmNvbmZvcm1lZFZhbHVlLGY9ZS5yYXdWYWx1ZSxjPWUucGxhY2Vob2xkZXJDaGFyLHA9ZS5wbGFjZWhvbGRlcixkPWUuaW5kZXhlc09mUGlwZWRDaGFycyxoPXZvaWQgMD09PWQ/bjpkLHY9ZS5jYXJldFRyYXBJbmRleGVzLHk9dm9pZCAwPT09dj9uOnY7aWYoMD09PXN8fCFmLmxlbmd0aClyZXR1cm4gMDt2YXIgbT1mLmxlbmd0aCxiPXIubGVuZ3RoLGc9cC5sZW5ndGgsaz1sLmxlbmd0aCxDPW0tYixPPUM+MCxUPTA9PT1iLFA9Qz4xJiYhTyYmIVQ7aWYoUClyZXR1cm4gczt2YXIgeD1PJiYocj09PWx8fGw9PT1wKSx3PTAsUz12b2lkIDAsXz12b2lkIDA7aWYoeCl3PXMtQztlbHNle3ZhciBNPWwudG9Mb3dlckNhc2UoKSxqPWYudG9Mb3dlckNhc2UoKSxFPWouc3Vic3RyKDAscykuc3BsaXQobyksUj1FLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gTS5pbmRleE9mKGUpIT09LTF9KTtfPVJbUi5sZW5ndGgtMV07dmFyIFY9YS5zdWJzdHIoMCxSLmxlbmd0aCkuc3BsaXQobykuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09Y30pLmxlbmd0aCxOPXAuc3Vic3RyKDAsUi5sZW5ndGgpLnNwbGl0KG8pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PWN9KS5sZW5ndGgsQT1OIT09VixCPXZvaWQgMCE9PWFbUi5sZW5ndGgtMV0mJnZvaWQgMCE9PXBbUi5sZW5ndGgtMl0mJmFbUi5sZW5ndGgtMV0hPT1jJiZhW1IubGVuZ3RoLTFdIT09cFtSLmxlbmd0aC0xXSYmYVtSLmxlbmd0aC0xXT09PXBbUi5sZW5ndGgtMl07IU8mJihBfHxCKSYmVj4wJiZwLmluZGV4T2YoXyk+LTEmJnZvaWQgMCE9PWZbc10mJihTPSEwLF89ZltzXSk7Zm9yKHZhciBJPWgubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBNW2VdfSksRj1JLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZT09PV99KS5sZW5ndGgscT1SLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZT09PV99KS5sZW5ndGgsRD1wLnN1YnN0cigwLHAuaW5kZXhPZihjKSkuc3BsaXQobykuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT1fJiZmW3RdIT09ZX0pLmxlbmd0aCxMPUQrcStGKyhTPzE6MCksVz0wLEo9MDtKPGs7SisrKXt2YXIgVT1NW0pdO2lmKHc9SisxLFU9PT1fJiZXKyssVz49TClicmVha319aWYoTyl7Zm9yKHZhciBIPXcsWT13O1k8PWc7WSsrKWlmKHBbWV09PT1jJiYoSD1ZKSxwW1ldPT09Y3x8eS5pbmRleE9mKFkpIT09LTF8fFk9PT1nKXJldHVybiBIfWVsc2UgaWYoUyl7Zm9yKHZhciB6PXctMTt6Pj0wO3otLSlpZihsW3pdPT09X3x8eS5pbmRleE9mKHopIT09LTF8fDA9PT16KXJldHVybiB6fWVsc2UgZm9yKHZhciBHPXc7Rz49MDtHLS0paWYocFtHLTFdPT09Y3x8eS5pbmRleE9mKEcpIT09LTF8fDA9PT1HKXJldHVybiBHfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yO3ZhciBuPVtdLG89XCJcIn0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIG8oZSl7dmFyIHQ9e3ByZXZpb3VzQ29uZm9ybWVkVmFsdWU6dm9pZCAwLHByZXZpb3VzUGxhY2Vob2xkZXI6dm9pZCAwfTtyZXR1cm57c3RhdGU6dCx1cGRhdGU6ZnVuY3Rpb24ocil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmUsbz1uLmlucHV0RWxlbWVudCxsPW4ubWFzayxjPW4uZ3VpZGUseT1uLnBpcGUsYj1uLnBsYWNlaG9sZGVyQ2hhcixnPXZvaWQgMD09PWI/aC5wbGFjZWhvbGRlckNoYXI6YixrPW4ua2VlcENoYXJQb3NpdGlvbnMsQz12b2lkIDAhPT1rJiZrLE89bi5zaG93TWFzayxUPXZvaWQgMCE9PU8mJk87aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHImJihyPW8udmFsdWUpLHIhPT10LnByZXZpb3VzQ29uZm9ybWVkVmFsdWUpeyhcInVuZGVmaW5lZFwiPT10eXBlb2YgbD9cInVuZGVmaW5lZFwiOnMobCkpPT09bSYmdm9pZCAwIT09bC5waXBlJiZ2b2lkIDAhPT1sLm1hc2smJih5PWwucGlwZSxsPWwubWFzayk7dmFyIFA9dm9pZCAwLHg9dm9pZCAwO2lmKGwgaW5zdGFuY2VvZiBBcnJheSYmKFA9KDAsZC5jb252ZXJ0TWFza1RvUGxhY2Vob2xkZXIpKGwsZykpLGwhPT0hMSl7dmFyIHc9YShyKSxTPW8uc2VsZWN0aW9uRW5kLF89dC5wcmV2aW91c0NvbmZvcm1lZFZhbHVlLE09dC5wcmV2aW91c1BsYWNlaG9sZGVyLGo9dm9pZCAwO2lmKChcInVuZGVmaW5lZFwiPT10eXBlb2YgbD9cInVuZGVmaW5lZFwiOnMobCkpPT09aC5zdHJGdW5jdGlvbil7aWYoeD1sKHcse2N1cnJlbnRDYXJldFBvc2l0aW9uOlMscHJldmlvdXNDb25mb3JtZWRWYWx1ZTpfLHBsYWNlaG9sZGVyQ2hhcjpnfSkseD09PSExKXJldHVybjt2YXIgRT0oMCxkLnByb2Nlc3NDYXJldFRyYXBzKSh4KSxSPUUubWFza1dpdGhvdXRDYXJldFRyYXBzLFY9RS5pbmRleGVzO3g9UixqPVYsUD0oMCxkLmNvbnZlcnRNYXNrVG9QbGFjZWhvbGRlcikoeCxnKX1lbHNlIHg9bDt2YXIgTj17cHJldmlvdXNDb25mb3JtZWRWYWx1ZTpfLGd1aWRlOmMscGxhY2Vob2xkZXJDaGFyOmcscGlwZTp5LHBsYWNlaG9sZGVyOlAsY3VycmVudENhcmV0UG9zaXRpb246UyxrZWVwQ2hhclBvc2l0aW9uczpDfSxBPSgwLHAuZGVmYXVsdCkodyx4LE4pLEI9QS5jb25mb3JtZWRWYWx1ZSxJPShcInVuZGVmaW5lZFwiPT10eXBlb2YgeT9cInVuZGVmaW5lZFwiOnMoeSkpPT09aC5zdHJGdW5jdGlvbixGPXt9O0kmJihGPXkoQix1KHtyYXdWYWx1ZTp3fSxOKSksRj09PSExP0Y9e3ZhbHVlOl8scmVqZWN0ZWQ6ITB9OigwLGQuaXNTdHJpbmcpKEYpJiYoRj17dmFsdWU6Rn0pKTt2YXIgcT1JP0YudmFsdWU6QixEPSgwLGYuZGVmYXVsdCkoe3ByZXZpb3VzQ29uZm9ybWVkVmFsdWU6XyxwcmV2aW91c1BsYWNlaG9sZGVyOk0sY29uZm9ybWVkVmFsdWU6cSxwbGFjZWhvbGRlcjpQLHJhd1ZhbHVlOncsY3VycmVudENhcmV0UG9zaXRpb246UyxwbGFjZWhvbGRlckNoYXI6ZyxpbmRleGVzT2ZQaXBlZENoYXJzOkYuaW5kZXhlc09mUGlwZWRDaGFycyxjYXJldFRyYXBJbmRleGVzOmp9KSxMPXE9PT1QJiYwPT09RCxXPVQ/UDp2LEo9TD9XOnE7dC5wcmV2aW91c0NvbmZvcm1lZFZhbHVlPUosdC5wcmV2aW91c1BsYWNlaG9sZGVyPVAsby52YWx1ZSE9PUomJihvLnZhbHVlPUosaShvLEQpKX19fX19ZnVuY3Rpb24gaShlLHQpe2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1lJiYoYj9nKGZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0U2VsZWN0aW9uUmFuZ2UodCx0LHkpfSwwKTplLnNldFNlbGVjdGlvblJhbmdlKHQsdCx5KSl9ZnVuY3Rpb24gYShlKXtpZigoMCxkLmlzU3RyaW5nKShlKSlyZXR1cm4gZTtpZigoMCxkLmlzTnVtYmVyKShlKSlyZXR1cm4gU3RyaW5nKGUpO2lmKHZvaWQgMD09PWV8fG51bGw9PT1lKXJldHVybiB2O3Rocm93IG5ldyBFcnJvcihcIlRoZSAndmFsdWUnIHByb3ZpZGVkIHRvIFRleHQgTWFzayBuZWVkcyB0byBiZSBhIHN0cmluZyBvciBhIG51bWJlci4gVGhlIHZhbHVlIHJlY2VpdmVkIHdhczpcXG5cXG4gXCIrSlNPTi5zdHJpbmdpZnkoZSkpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciB1PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9LHM9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX07dC5kZWZhdWx0PW87dmFyIGw9cig0KSxmPW4obCksYz1yKDMpLHA9bihjKSxkPXIoMiksaD1yKDEpLHY9XCJcIix5PVwibm9uZVwiLG09XCJvYmplY3RcIixiPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9BbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxnPVwidW5kZWZpbmVkXCIhPXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/cmVxdWVzdEFuaW1hdGlvbkZyYW1lOnNldFRpbWVvdXR9LGZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIG49ZnVuY3Rpb24oKXt9O24udGhhdFJldHVybnM9cixuLnRoYXRSZXR1cm5zRmFsc2U9cighMSksbi50aGF0UmV0dXJuc1RydWU9cighMCksbi50aGF0UmV0dXJuc051bGw9cihudWxsKSxuLnRoYXRSZXR1cm5zVGhpcz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxuLnRoYXRSZXR1cm5zQXJndW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGUuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbihlLHQscixuLGksYSx1LHMpe2lmKG8odCksIWUpe3ZhciBsO2lmKHZvaWQgMD09PXQpbD1uZXcgRXJyb3IoXCJNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgdGhlIGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwiKTtlbHNle3ZhciBmPVtyLG4saSxhLHUsc10sYz0wO2w9bmV3IEVycm9yKHQucmVwbGFjZSgvJXMvZyxmdW5jdGlvbigpe3JldHVybiBmW2MrK119KSksbC5uYW1lPVwiSW52YXJpYW50IFZpb2xhdGlvblwifXRocm93IGwuZnJhbWVzVG9Qb3A9MSxsfX12YXIgbz1mdW5jdGlvbihlKXt9O2UuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig2KSxvPXIoNyksaT1yKDEwKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSx1KXt1IT09aSYmbyghMSxcIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXNcIil9ZnVuY3Rpb24gdCgpe3JldHVybiBlfWUuaXNSZXF1aXJlZD1lO3ZhciByPXthcnJheTplLGJvb2w6ZSxmdW5jOmUsbnVtYmVyOmUsb2JqZWN0OmUsc3RyaW5nOmUsc3ltYm9sOmUsYW55OmUsYXJyYXlPZjp0LGVsZW1lbnQ6ZSxpbnN0YW5jZU9mOnQsbm9kZTplLG9iamVjdE9mOnQsb25lT2Y6dCxvbmVPZlR5cGU6dCxzaGFwZTp0LGV4YWN0OnR9O3JldHVybiByLmNoZWNrUHJvcFR5cGVzPW4sci5Qcm9wVHlwZXM9cixyfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO1wiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LGUuZXhwb3J0cz1yKDgpKCl9LGZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9XCJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRFwiO2UuZXhwb3J0cz1yfSxmdW5jdGlvbih0LHIpe3QuZXhwb3J0cz1lfV0pfSk7IiwiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sdCk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0cy5jcmVhdGVBdXRvQ29ycmVjdGVkRGF0ZVBpcGU9dCgpOmUuY3JlYXRlQXV0b0NvcnJlY3RlZERhdGVQaXBlPXQoKX0odGhpcyxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe2lmKHJbbl0pcmV0dXJuIHJbbl0uZXhwb3J0czt2YXIgbz1yW25dPXtleHBvcnRzOnt9LGlkOm4sbG9hZGVkOiExfTtyZXR1cm4gZVtuXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyx0KSxvLmxvYWRlZD0hMCxvLmV4cG9ydHN9dmFyIHI9e307cmV0dXJuIHQubT1lLHQuYz1yLHQucD1cIlwiLHQoMCl9KFtmdW5jdGlvbihlLHQscil7ZS5leHBvcnRzPXIoMSl9LGZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpcIm1tIGRkIHl5eXlcIix0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxyPXQubWluWWVhcixpPXZvaWQgMD09PXI/MTpyLGQ9dC5tYXhZZWFyLHU9dm9pZCAwPT09ZD85OTk5OmQscz1lLnNwbGl0KC9bXmRteUhNU10rLykuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBvLmluZGV4T2YoZSktby5pbmRleE9mKHQpfSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPVtdLG89e2RkOjMxLG1tOjEyLHl5Ojk5LHl5eXk6dSxISDoyMyxNTTo1OSxTUzo1OX0sZD17ZGQ6MSxtbToxLHl5OjAseXl5eTppLEhIOjAsTU06MCxTUzowfSxhPXQuc3BsaXQoXCJcIik7cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPWUuaW5kZXhPZih0KSxpPXBhcnNlSW50KG9bdF0udG9TdHJpbmcoKS5zdWJzdHIoMCwxKSwxMCk7cGFyc2VJbnQoYVtuXSwxMCk+aSYmKGFbbisxXT1hW25dLGFbbl09MCxyLnB1c2gobikpfSk7dmFyIHk9MCxmPXMuc29tZShmdW5jdGlvbihyKXt2YXIgcz1lLmluZGV4T2YociksYT1yLmxlbmd0aCxmPXQuc3Vic3RyKHMsYSkucmVwbGFjZSgvXFxEL2csXCJcIikscD1wYXJzZUludChmLDEwKTtcIm1tXCI9PT1yJiYoeT1wfHwwKTt2YXIgYz1cImRkXCI9PT1yP25beV06b1tyXTtpZihcInl5eXlcIj09PXImJigxIT09aXx8OTk5OSE9PXUpKXt2YXIgbD1wYXJzZUludChvW3JdLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsZi5sZW5ndGgpLDEwKSxtPXBhcnNlSW50KGRbcl0udG9TdHJpbmcoKS5zdWJzdHJpbmcoMCxmLmxlbmd0aCksMTApO3JldHVybiBwPG18fHA+bH1yZXR1cm4gcD5jfHxmLmxlbmd0aD09PWEmJnA8ZFtyXX0pO3JldHVybiFmJiZ7dmFsdWU6YS5qb2luKFwiXCIpLGluZGV4ZXNPZlBpcGVkQ2hhcnM6cn19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1yO3ZhciBuPVszMSwzMSwyOSwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0sbz1bXCJ5eXl5XCIsXCJ5eVwiLFwibW1cIixcImRkXCIsXCJISFwiLFwiTU1cIixcIlNTXCJdfV0pfSk7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCBSZWFjdERhdGVQaWNrZXIgZnJvbSAncmVhY3QtZGF0ZXBpY2tlcic7XG5pbXBvcnQgTWFza2VkSW5wdXQgZnJvbSAncmVhY3QtdGV4dC1tYXNrJztcbmltcG9ydCBjcmVhdGVBdXRvQ29ycmVjdGVkRGF0ZVBpcGUgZnJvbSAndGV4dC1tYXNrLWFkZG9ucy9kaXN0L2NyZWF0ZUF1dG9Db3JyZWN0ZWREYXRlUGlwZS5qcyc7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi8uLi91dGlscy9kYXRlcGlja2VyLnN0eWxlcy5qc1wiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi8uLi9hdG9tcy9pY29uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBCb3ggfSBmcm9tIFwiLi4vLi4vYXRvbXMvYm94L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBjc3NDbGFzcyB9IGZyb20gXCIuLi8uLi91dGlscy9jc3MtY2xhc3MuanNcIjtcbmNvbnN0IE1hc2sgPSBNYXNrZWRJbnB1dC5kZWZhdWx0ID8/IE1hc2tlZElucHV0O1xuY29uc3QgYXV0b2NvcnJlY3RlZERhdGVQaXBlID0gY3JlYXRlQXV0b0NvcnJlY3RlZERhdGVQaXBlLmRlZmF1bHQgPz8gY3JlYXRlQXV0b0NvcnJlY3RlZERhdGVQaXBlO1xuY29uc3QgRGF0ZVBpY2tlckljb24gPSBzdHlsZWQoSWNvbilgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTsgIFxuICBjb2xvcjogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLnByaW1hcnkxMDB9O1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtaW4td2lkdGg6IDM0cHg7XG4gIHdpZHRoOiBhdXRvO1xuYDtcbmNvbnN0IFN0eWxlZERhdGVQaWNrZXIgPSBzdHlsZWQoQm94KWBcbiAgJHtzdHlsZXN9O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJiAucmVhY3QtZGF0ZXBpY2tlci13cmFwcGVyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJvcmRlcjogJHsoe1xuICB0aGVtZVxufSkgPT4gYDFweCBzb2xpZCAke3RoZW1lLmNvbG9ycy5ncmV5NDB9YH07XG4gICAgcGFkZGluZzogNHB4IDhweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICB9XG5cbiAgJiAucmVhY3QtZGF0ZXBpY2tlci13cmFwcGVyIGlucHV0IHtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGNvbG9yOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMuZ3JleTEwMH07XG5cbiAgICAmOmZvY3VzLXZpc2libGUge1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAmIC5yZWFjdC1kYXRlcGlja2VyIHtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIHBhZGRpbmc6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnNwYWNlLmRlZmF1bHR9O1xuICAgIGZvbnQtZmFtaWx5OiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5mb250fTtcbiAgICB6LWluZGV4OiAxMDE7XG5cbiAgICAmOmZvY3VzLXZpc2libGUge1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAmIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0IHtcbiAgICBib3JkZXItbGVmdC1jb2xvcjogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLnByaW1hcnk2MH07XG4gICAgdG9wOiAxNnB4O1xuICB9XG5cbiAgJiAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dDpob3ZlciB7XG4gICAgYm9yZGVyLWxlZnQtY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5wcmltYXJ5MTAwfTtcbiAgfVxuXG4gICYgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzIHtcbiAgICBib3JkZXItcmlnaHQtY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5wcmltYXJ5NjB9O1xuICAgIHRvcDogMTZweDtcbiAgfVxuXG4gICYgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzOmhvdmVyIHtcbiAgICBib3JkZXItcmlnaHQtY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5wcmltYXJ5MTAwfTtcbiAgfVxuXG4gICYgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24ge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cblxuICAmIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyB7XG4gICAgdG9wOiA1cHg7XG4gIH1cblxuICAmIC5yZWFjdC1kYXRlcGlja2VyX19oZWFkZXIge1xuICAgIGJhY2tncm91bmQ6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy53aGl0ZX07XG4gICAgZm9udC1zaXplOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5mb250U2l6ZXMuZGVmYXVsdH07XG4gICAgYm9yZGVyOiBub25lO1xuICB9XG5cbiAgJiAucmVhY3QtZGF0ZXBpY2tlcl9fY3VycmVudC1tb250aCB7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuc3BhY2UubGd9O1xuICB9XG5cbiAgJiAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cblxuICAmIC5yZWFjdC1kYXRlcGlja2VyX19kYXktbmFtZSB7XG4gICAgY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5wcmltYXJ5NjB9O1xuICB9XG5cbiAgJiAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1vdXRzaWRlLW1vbnRoIHtcbiAgICBjb2xvcjogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLmdyZXk0MH07XG4gIH1cblxuICAmIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLXRvZGF5LnJlYWN0LWRhdGVwaWNrZXJfX2RheS0ta2V5Ym9hcmQtc2VsZWN0ZWQge1xuICAgIGNvbG9yOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMud2hpdGV9O1xuICB9XG5cbiAgJiAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1zZWxlY3RlZCB7XG4gICAgY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy53aGl0ZX07XG4gIH1cblxuICAmIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWtleWJvYXJkLXNlbGVjdGVkOm5vdCgucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS10b2RheSkge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5ncmV5MTAwfTtcbiAgfVxuXG4gICYgLnJlYWN0LWRhdGVwaWNrZXJfX2RheTpob3ZlcixcbiAgJiAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5IHtcbiAgICBib3JkZXItcmFkaXVzOiAxNXB4O1xuICB9XG5cbiAgJiAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1zZWxlY3RlZCB7XG4gICAgYmFja2dyb3VuZDogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLnByaW1hcnkxMDB9O1xuICAgIGJvcmRlci1yYWRpdXM6IDE1cHg7XG4gICAgY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy53aGl0ZX07XG4gIH1cbmA7XG5jb25zdCBwYXJzZURhdGVTYWZlbHkgPSBuZXdEYXRlID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5wYXJzZShuZXdEYXRlKTtcbiAgaWYgKCFOdW1iZXIuaXNOYU4odGltZXN0YW1wKSkge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXApO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RleHQtbWFzay90ZXh0LW1hc2svaXNzdWVzLzk1MVxuY29uc3QgY29udmVydERhdGVGbnNGb3JtYXRUb0RhdGVQaXBlRm9ybWF0ID0gZm9ybWF0ID0+IHtcbiAgY29uc3QgdG9rZW5zID0gZm9ybWF0LnNwbGl0KCcnKTtcbiAgcmV0dXJuIHRva2Vucy5tYXAoY2hhciA9PiB7XG4gICAgaWYgKGNoYXIgPT09ICdNJykgcmV0dXJuICdtJztcbiAgICBpZiAoY2hhciA9PT0gJ20nKSByZXR1cm4gJ00nO1xuICAgIHJldHVybiBjaGFyO1xuICB9KS5qb2luKCcnKTtcbn07XG5jb25zdCBkZWZhdWx0RGF0ZVByb3BzID0ge1xuICBkYXRlOiB7XG4gICAgZm9ybWF0OiAneXl5eS9NTS9kZCcsXG4gICAgcGxhY2Vob2xkZXI6ICdZWVlZL01NL0REJyxcbiAgICBpbnB1dE1hc2s6IFsvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy8nLCAvXFxkLywgL1xcZC8sICcvJywgL1xcZC8sIC9cXGQvXVxuICB9LFxuICBkYXRldGltZToge1xuICAgIGZvcm1hdDogJ3l5eXkvTU0vZGQgSEg6bW0nLFxuICAgIHBsYWNlaG9sZGVyOiAnWVlZWS9NTS9ERCBISDptbScsXG4gICAgaW5wdXRNYXNrOiBbL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sICcvJywgL1xcZC8sIC9cXGQvLCAnLycsIC9cXGQvLCAvXFxkLywgJyAnLCAvXFxkLywgL1xcZC8sICc6JywgL1xcZC8sIC9cXGQvXVxuICB9XG59O1xuXG4vKipcbiAqIFByb3BzIGZvciBEYXRlUGlja2VyXG4gKlxuICogQG1lbWJlcm9mIERhdGVQaWNrZXJcbiAqIEBhbGlhcyBEYXRlUGlja2VyUHJvcHNcbiAqIEBwcm9wZXJ0eSB7YW55fSB7Li4ufSAgICBBbnkgY3VzdG9tIHByb3BzIHRvIHBhc3MgZG93biB0byB0aGUgUmVhY3REYXRlUGlja2VyXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3RkYXRlcGlja2VyLmNvbS9cbiAqL1xuXG5jb25zdCBwYXJzZUN1c3RvbU1hc2sgPSBtYXNrID0+IG1hc2subWFwKGVsID0+IHtcbiAgaWYgKHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpIHJldHVybiBlbDtcbiAgaWYgKGVsLnJhdykgcmV0dXJuIGVsLnJhdztcbiAgaWYgKCFlbC5yZWdleCkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0IG1hc2snKTtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoZWwucmVnZXgpO1xufSk7XG5jb25zdCBnZXREYXRlSW5wdXRQcm9wcyA9IChcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LXBhcmFtLWxhc3RcbnByb3BlcnR5VHlwZSA9ICdkYXRldGltZScsIHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBkYXRlRm9ybWF0LFxuICAgIHBsYWNlaG9sZGVyVGV4dCxcbiAgICBpbnB1dE1hc2tcbiAgfSA9IHByb3BzO1xuICBjb25zdCBkZWZhdWx0UHJvcHMgPSBkZWZhdWx0RGF0ZVByb3BzW3Byb3BlcnR5VHlwZV07XG4gIGNvbnN0IGZvcm1hdCA9IGRhdGVGb3JtYXQgPz8gZGVmYXVsdFByb3BzLmZvcm1hdDtcbiAgY29uc3QgcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlclRleHQgPz8gZGVmYXVsdFByb3BzLnBsYWNlaG9sZGVyO1xuICBjb25zdCBtYXNrID0gaW5wdXRNYXNrPy5tYXNrID8gcGFyc2VDdXN0b21NYXNrKGlucHV0TWFzay5tYXNrKSA6IGRlZmF1bHRQcm9wcy5pbnB1dE1hc2s7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gIGNvbnN0IGRhdGVGb3JtYXRQaXBlID0gYXV0b2NvcnJlY3RlZERhdGVQaXBlKGNvbnZlcnREYXRlRm5zRm9ybWF0VG9EYXRlUGlwZUZvcm1hdChmb3JtYXQpKTtcbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQsXG4gICAgZGF0ZUZvcm1hdFBpcGUsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgcGFyc2VkTWFzazogbWFza1xuICB9O1xufTtcblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKlxuICogPGltZyBzcmM9XCJjb21wb25lbnRzL2RhdGUtcGlja2VyLnBuZ1wiIC8+XG4gKlxuICpcbiAqIENvbXBvbmVudCByZXNwb25zaWJsZSBmb3Igc2hvd2luZyBkYXRlcy4gSXQgaXMgYSB3cmFwcGVyIHRvXG4gKiBbcmVhY3QgZGF0ZXBpY2tlcl17QGxpbmsgaHR0cHM6Ly9yZWFjdGRhdGVwaWNrZXIuY29tL30uXG4gKlxuICogIyMjIFVzYWdlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgRGF0ZVBpY2tlciwgRGF0ZVBpY2tlclByb3BzIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSdcbiAqIGBgYFxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBzdWJjYXRlZ29yeSBNb2xlY3VsZXNcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdGRhdGVwaWNrZXIuY29tL1xuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9zdG9yeWJvb2suYWRtaW5qcy5jby8/cGF0aD0vc3RvcnkvZGVzaWduc3lzdGVtLW1vbGVjdWxlcy1kYXRlcGlja2VyLS1kZWZhdWx0IFN0b3J5Ym9va31cbiAqIEBzZWUgRGF0ZVBpY2tlclByb3BzXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKlxuICogQGV4YW1wbGVcbiAqIHJldHVybiAoXG4gKiA8Qm94IHdpZHRoPXsxLzJ9IGhlaWdodD1cIjMwMHB4XCI+XG4gKiAgIDxEYXRlUGlja2VyIG9uQ2hhbmdlPXsoZGF0ZSkgPT4gY29uc29sZS5sb2coZGF0ZSl9Lz5cbiAqIDwvQm94PlxuICogKVxuICogQHNlY3Rpb24gZGVzaWduLXN5c3RlbVxuICovXG5jb25zdCBEYXRlUGlja2VyID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgdmFsdWUsXG4gICAgb25DaGFuZ2UsXG4gICAgZGlzYWJsZWQsXG4gICAgcHJvcGVydHlUeXBlLFxuICAgIGlucHV0TWFzayA9IHt9LFxuICAgIHBsYWNlaG9sZGVyVGV4dCxcbiAgICBkYXRlRm9ybWF0LFxuICAgIC4uLm90aGVyXG4gIH0gPSBwcm9wcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBjb25zdCB7XG4gICAgbWFzazogX21hc2ssXG4gICAgLi4ub3RoZXJJbnB1dE1hc2tQcm9wc1xuICB9ID0gaW5wdXRNYXNrO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSBuZXdEYXRlID0+IHtcbiAgICBvbkNoYW5nZShwYXJzZURhdGVTYWZlbHkobmV3RGF0ZSk/LnRvSVNPU3RyaW5nPy4oKSB8fCAnJyk7XG4gIH07XG4gIGNvbnN0IGRhdGVWYWx1ZSA9IHVzZU1lbW8oKCkgPT4gcGFyc2VEYXRlU2FmZWx5KHZhbHVlKSwgW3ZhbHVlXSk7XG4gIGNvbnN0IHtcbiAgICBkYXRlRm9ybWF0UGlwZSxcbiAgICBmb3JtYXQsXG4gICAgcGFyc2VkTWFzayxcbiAgICBwbGFjZWhvbGRlclxuICB9ID0gZ2V0RGF0ZUlucHV0UHJvcHMocHJvcGVydHlUeXBlLCB7XG4gICAgZGF0ZUZvcm1hdCxcbiAgICBpbnB1dE1hc2ssXG4gICAgcGxhY2Vob2xkZXJUZXh0XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRGF0ZVBpY2tlciwge1xuICAgIGNsYXNzTmFtZTogY3NzQ2xhc3MoJ0RhdGVQaWNrZXInKVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdERhdGVQaWNrZXIsIF9leHRlbmRzKHtcbiAgICBjdXN0b21JbnB1dDogLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWFzaywgX2V4dGVuZHMoe1xuICAgICAgcGlwZTogZGF0ZUZvcm1hdFBpcGUsXG4gICAgICBtYXNrOiBwYXJzZWRNYXNrLFxuICAgICAga2VlcENoYXJQb3NpdGlvbnM6IHRydWUsXG4gICAgICBndWlkZTogdHJ1ZSxcbiAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICAgIH0sIG90aGVySW5wdXRNYXNrUHJvcHMpKSxcbiAgICBzZWxlY3RlZDogZGF0ZVZhbHVlLFxuICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgc2hvd1RpbWVJbnB1dDogcHJvcGVydHlUeXBlID09PSAnZGF0ZXRpbWUnLFxuICAgIGRhdGVGb3JtYXQ6IGZvcm1hdCxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgfSwgb3RoZXIpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRGF0ZVBpY2tlckljb24sIHtcbiAgICBpY29uOiBcIkNhbGVuZGFyXCIsXG4gICAgY29sb3I6IFwicHJpbWFyeTEwMFwiXG4gIH0pKTtcbn07XG5EYXRlUGlja2VyLmRpc3BsYXlOYW1lID0gJ0RhdGVQaWNrZXInO1xuZXhwb3J0IHsgRGF0ZVBpY2tlciB9O1xuZXhwb3J0IGRlZmF1bHQgRGF0ZVBpY2tlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2Vjb25kc0luWWVhciA9IGV4cG9ydHMuc2Vjb25kc0luV2VlayA9IGV4cG9ydHMuc2Vjb25kc0luUXVhcnRlciA9IGV4cG9ydHMuc2Vjb25kc0luTW9udGggPSBleHBvcnRzLnNlY29uZHNJbk1pbnV0ZSA9IGV4cG9ydHMuc2Vjb25kc0luSG91ciA9IGV4cG9ydHMuc2Vjb25kc0luRGF5ID0gZXhwb3J0cy5xdWFydGVyc0luWWVhciA9IGV4cG9ydHMubW9udGhzSW5ZZWFyID0gZXhwb3J0cy5tb250aHNJblF1YXJ0ZXIgPSBleHBvcnRzLm1pbnV0ZXNJbkhvdXIgPSBleHBvcnRzLm1pblRpbWUgPSBleHBvcnRzLm1pbGxpc2Vjb25kc0luU2Vjb25kID0gZXhwb3J0cy5taWxsaXNlY29uZHNJbk1pbnV0ZSA9IGV4cG9ydHMubWlsbGlzZWNvbmRzSW5Ib3VyID0gZXhwb3J0cy5tYXhUaW1lID0gZXhwb3J0cy5kYXlzSW5ZZWFyID0gZXhwb3J0cy5kYXlzSW5XZWVrID0gdm9pZCAwO1xuXG4vKipcbiAqIERheXMgaW4gMSB3ZWVrLlxuICpcbiAqIEBuYW1lIGRheXNJbldlZWtcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cbnZhciBkYXlzSW5XZWVrID0gNztcbi8qKlxuICogRGF5cyBpbiAxIHllYXJcbiAqIE9uZSB5ZWFycyBlcXVhbHMgMzY1LjI0MjUgZGF5cyBhY2NvcmRpbmcgdG8gdGhlIGZvcm11bGE6XG4gKlxuICogPiBMZWFwIHllYXIgb2NjdXJlcyBldmVyeSA0IHllYXJzLCBleGNlcHQgZm9yIHllYXJzIHRoYXQgYXJlIGRpdmlzYWJsZSBieSAxMDAgYW5kIG5vdCBkaXZpc2FibGUgYnkgNDAwLlxuICogPiAxIG1lYW4geWVhciA9ICgzNjUrMS80LTEvMTAwKzEvNDAwKSBkYXlzID0gMzY1LjI0MjUgZGF5c1xuICpcbiAqIEBuYW1lIGRheXNJblllYXJcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0cy5kYXlzSW5XZWVrID0gZGF5c0luV2VlaztcbnZhciBkYXlzSW5ZZWFyID0gMzY1LjI0MjU7XG4vKipcbiAqIE1heGltdW0gYWxsb3dlZCB0aW1lLlxuICpcbiAqIEBuYW1lIG1heFRpbWVcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0cy5kYXlzSW5ZZWFyID0gZGF5c0luWWVhcjtcbnZhciBtYXhUaW1lID0gTWF0aC5wb3coMTAsIDgpICogMjQgKiA2MCAqIDYwICogMTAwMDtcbi8qKlxuICogTWlsbGlzZWNvbmRzIGluIDEgbWludXRlXG4gKlxuICogQG5hbWUgbWlsbGlzZWNvbmRzSW5NaW51dGVcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0cy5tYXhUaW1lID0gbWF4VGltZTtcbnZhciBtaWxsaXNlY29uZHNJbk1pbnV0ZSA9IDYwMDAwO1xuLyoqXG4gKiBNaWxsaXNlY29uZHMgaW4gMSBob3VyXG4gKlxuICogQG5hbWUgbWlsbGlzZWNvbmRzSW5Ib3VyXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5cbmV4cG9ydHMubWlsbGlzZWNvbmRzSW5NaW51dGUgPSBtaWxsaXNlY29uZHNJbk1pbnV0ZTtcbnZhciBtaWxsaXNlY29uZHNJbkhvdXIgPSAzNjAwMDAwO1xuLyoqXG4gKiBNaWxsaXNlY29uZHMgaW4gMSBzZWNvbmRcbiAqXG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJblNlY29uZFxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnRzLm1pbGxpc2Vjb25kc0luSG91ciA9IG1pbGxpc2Vjb25kc0luSG91cjtcbnZhciBtaWxsaXNlY29uZHNJblNlY29uZCA9IDEwMDA7XG4vKipcbiAqIE1pbmltdW0gYWxsb3dlZCB0aW1lLlxuICpcbiAqIEBuYW1lIG1pblRpbWVcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0cy5taWxsaXNlY29uZHNJblNlY29uZCA9IG1pbGxpc2Vjb25kc0luU2Vjb25kO1xudmFyIG1pblRpbWUgPSAtbWF4VGltZTtcbi8qKlxuICogTWludXRlcyBpbiAxIGhvdXJcbiAqXG4gKiBAbmFtZSBtaW51dGVzSW5Ib3VyXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5cbmV4cG9ydHMubWluVGltZSA9IG1pblRpbWU7XG52YXIgbWludXRlc0luSG91ciA9IDYwO1xuLyoqXG4gKiBNb250aHMgaW4gMSBxdWFydGVyXG4gKlxuICogQG5hbWUgbW9udGhzSW5RdWFydGVyXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5cbmV4cG9ydHMubWludXRlc0luSG91ciA9IG1pbnV0ZXNJbkhvdXI7XG52YXIgbW9udGhzSW5RdWFydGVyID0gMztcbi8qKlxuICogTW9udGhzIGluIDEgeWVhclxuICpcbiAqIEBuYW1lIG1vbnRoc0luWWVhclxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnRzLm1vbnRoc0luUXVhcnRlciA9IG1vbnRoc0luUXVhcnRlcjtcbnZhciBtb250aHNJblllYXIgPSAxMjtcbi8qKlxuICogUXVhcnRlcnMgaW4gMSB5ZWFyXG4gKlxuICogQG5hbWUgcXVhcnRlcnNJblllYXJcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0cy5tb250aHNJblllYXIgPSBtb250aHNJblllYXI7XG52YXIgcXVhcnRlcnNJblllYXIgPSA0O1xuLyoqXG4gKiBTZWNvbmRzIGluIDEgaG91clxuICpcbiAqIEBuYW1lIHNlY29uZHNJbkhvdXJcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0cy5xdWFydGVyc0luWWVhciA9IHF1YXJ0ZXJzSW5ZZWFyO1xudmFyIHNlY29uZHNJbkhvdXIgPSAzNjAwO1xuLyoqXG4gKiBTZWNvbmRzIGluIDEgbWludXRlXG4gKlxuICogQG5hbWUgc2Vjb25kc0luTWludXRlXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdFxuICovXG5cbmV4cG9ydHMuc2Vjb25kc0luSG91ciA9IHNlY29uZHNJbkhvdXI7XG52YXIgc2Vjb25kc0luTWludXRlID0gNjA7XG4vKipcbiAqIFNlY29uZHMgaW4gMSBkYXlcbiAqXG4gKiBAbmFtZSBzZWNvbmRzSW5EYXlcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0cy5zZWNvbmRzSW5NaW51dGUgPSBzZWNvbmRzSW5NaW51dGU7XG52YXIgc2Vjb25kc0luRGF5ID0gc2Vjb25kc0luSG91ciAqIDI0O1xuLyoqXG4gKiBTZWNvbmRzIGluIDEgd2Vla1xuICpcbiAqIEBuYW1lIHNlY29uZHNJbldlZWtcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0cy5zZWNvbmRzSW5EYXkgPSBzZWNvbmRzSW5EYXk7XG52YXIgc2Vjb25kc0luV2VlayA9IHNlY29uZHNJbkRheSAqIDc7XG4vKipcbiAqIFNlY29uZHMgaW4gMSB5ZWFyXG4gKlxuICogQG5hbWUgc2Vjb25kc0luWWVhclxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnRzLnNlY29uZHNJbldlZWsgPSBzZWNvbmRzSW5XZWVrO1xudmFyIHNlY29uZHNJblllYXIgPSBzZWNvbmRzSW5EYXkgKiBkYXlzSW5ZZWFyO1xuLyoqXG4gKiBTZWNvbmRzIGluIDEgbW9udGhcbiAqXG4gKiBAbmFtZSBzZWNvbmRzSW5Nb250aFxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQGRlZmF1bHRcbiAqL1xuXG5leHBvcnRzLnNlY29uZHNJblllYXIgPSBzZWNvbmRzSW5ZZWFyO1xudmFyIHNlY29uZHNJbk1vbnRoID0gc2Vjb25kc0luWWVhciAvIDEyO1xuLyoqXG4gKiBTZWNvbmRzIGluIDEgcXVhcnRlclxuICpcbiAqIEBuYW1lIHNlY29uZHNJblF1YXJ0ZXJcbiAqIEBjb25zdGFudFxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0XG4gKi9cblxuZXhwb3J0cy5zZWNvbmRzSW5Nb250aCA9IHNlY29uZHNJbk1vbnRoO1xudmFyIHNlY29uZHNJblF1YXJ0ZXIgPSBzZWNvbmRzSW5Nb250aCAqIDM7XG5leHBvcnRzLnNlY29uZHNJblF1YXJ0ZXIgPSBzZWNvbmRzSW5RdWFydGVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gcmVxdWlyZWRBcmdzO1xuXG5mdW5jdGlvbiByZXF1aXJlZEFyZ3MocmVxdWlyZWQsIGFyZ3MpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoIDwgcmVxdWlyZWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHJlcXVpcmVkICsgJyBhcmd1bWVudCcgKyAocmVxdWlyZWQgPiAxID8gJ3MnIDogJycpICsgJyByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3MubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB0b0ludGVnZXI7XG5cbmZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuXG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgcmV0dXJuIG51bWJlcjtcbiAgfVxuXG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gcGFyc2VJU087XG5cbnZhciBfaW5kZXggPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzL2luZGV4LmpzXCIpO1xuXG52YXIgX2luZGV4MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCIpKTtcblxudmFyIF9pbmRleDMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQG5hbWUgcGFyc2VJU09cbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgUGFyc2UgSVNPIHN0cmluZ1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUGFyc2UgdGhlIGdpdmVuIHN0cmluZyBpbiBJU08gODYwMSBmb3JtYXQgYW5kIHJldHVybiBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEZ1bmN0aW9uIGFjY2VwdHMgY29tcGxldGUgSVNPIDg2MDEgZm9ybWF0cyBhcyB3ZWxsIGFzIHBhcnRpYWwgaW1wbGVtZW50YXRpb25zLlxuICogSVNPIDg2MDE6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDFcbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXNuJ3QgYSBzdHJpbmcsIHRoZSBmdW5jdGlvbiBjYW5ub3QgcGFyc2UgdGhlIHN0cmluZyBvclxuICogdGhlIHZhbHVlcyBhcmUgaW52YWxpZCwgaXQgcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHswfDF8Mn0gW29wdGlvbnMuYWRkaXRpb25hbERpZ2l0cz0yXSAtIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGV4dGVuZGVkIHllYXIgZm9ybWF0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0c2AgbXVzdCBiZSAwLCAxIG9yIDJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJzIwMTQtMDItMTFUMTE6MzA6MzAnIHRvIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBwYXJzZUlTTygnMjAxNC0wMi0xMVQxMTozMDozMCcpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHN0cmluZyAnKzAyMDE0MTAxJyB0byBkYXRlLFxuICogLy8gaWYgdGhlIGFkZGl0aW9uYWwgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgZXh0ZW5kZWQgeWVhciBmb3JtYXQgaXMgMTpcbiAqIGNvbnN0IHJlc3VsdCA9IHBhcnNlSVNPKCcrMDIwMTQxMDEnLCB7IGFkZGl0aW9uYWxEaWdpdHM6IDEgfSlcbiAqIC8vPT4gRnJpIEFwciAxMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSVNPKGFyZ3VtZW50LCBvcHRpb25zKSB7XG4gIHZhciBfb3B0aW9ucyRhZGRpdGlvbmFsRGk7XG5cbiAgKDAsIF9pbmRleDIuZGVmYXVsdCkoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGFkZGl0aW9uYWxEaWdpdHMgPSAoMCwgX2luZGV4My5kZWZhdWx0KSgoX29wdGlvbnMkYWRkaXRpb25hbERpID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHMpICE9PSBudWxsICYmIF9vcHRpb25zJGFkZGl0aW9uYWxEaSAhPT0gdm9pZCAwID8gX29wdGlvbnMkYWRkaXRpb25hbERpIDogMik7XG5cbiAgaWYgKGFkZGl0aW9uYWxEaWdpdHMgIT09IDIgJiYgYWRkaXRpb25hbERpZ2l0cyAhPT0gMSAmJiBhZGRpdGlvbmFsRGlnaXRzICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2FkZGl0aW9uYWxEaWdpdHMgbXVzdCBiZSAwLCAxIG9yIDInKTtcbiAgfVxuXG4gIGlmICghKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KSA9PT0gJ1tvYmplY3QgU3RyaW5nXScpKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cblxuICB2YXIgZGF0ZVN0cmluZ3MgPSBzcGxpdERhdGVTdHJpbmcoYXJndW1lbnQpO1xuICB2YXIgZGF0ZTtcblxuICBpZiAoZGF0ZVN0cmluZ3MuZGF0ZSkge1xuICAgIHZhciBwYXJzZVllYXJSZXN1bHQgPSBwYXJzZVllYXIoZGF0ZVN0cmluZ3MuZGF0ZSwgYWRkaXRpb25hbERpZ2l0cyk7XG4gICAgZGF0ZSA9IHBhcnNlRGF0ZShwYXJzZVllYXJSZXN1bHQucmVzdERhdGVTdHJpbmcsIHBhcnNlWWVhclJlc3VsdC55ZWFyKTtcbiAgfVxuXG4gIGlmICghZGF0ZSB8fCBpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxuXG4gIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIHRpbWUgPSAwO1xuICB2YXIgb2Zmc2V0O1xuXG4gIGlmIChkYXRlU3RyaW5ncy50aW1lKSB7XG4gICAgdGltZSA9IHBhcnNlVGltZShkYXRlU3RyaW5ncy50aW1lKTtcblxuICAgIGlmIChpc05hTih0aW1lKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRhdGVTdHJpbmdzLnRpbWV6b25lKSB7XG4gICAgb2Zmc2V0ID0gcGFyc2VUaW1lem9uZShkYXRlU3RyaW5ncy50aW1lem9uZSk7XG5cbiAgICBpZiAoaXNOYU4ob2Zmc2V0KSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBkaXJ0eURhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lKTsgLy8ganMgcGFyc2VkIHN0cmluZyBhc3N1bWluZyBpdCdzIGluIFVUQyB0aW1lem9uZVxuICAgIC8vIGJ1dCB3ZSBuZWVkIGl0IHRvIGJlIHBhcnNlZCBpbiBvdXIgdGltZXpvbmVcbiAgICAvLyBzbyB3ZSB1c2UgdXRjIHZhbHVlcyB0byBidWlsZCBkYXRlIGluIG91ciB0aW1lem9uZS5cbiAgICAvLyBZZWFyIHZhbHVlcyBmcm9tIDAgdG8gOTkgbWFwIHRvIHRoZSB5ZWFycyAxOTAwIHRvIDE5OTlcbiAgICAvLyBzbyBzZXQgeWVhciBleHBsaWNpdGx5IHdpdGggc2V0RnVsbFllYXIuXG5cbiAgICB2YXIgcmVzdWx0ID0gbmV3IERhdGUoMCk7XG4gICAgcmVzdWx0LnNldEZ1bGxZZWFyKGRpcnR5RGF0ZS5nZXRVVENGdWxsWWVhcigpLCBkaXJ0eURhdGUuZ2V0VVRDTW9udGgoKSwgZGlydHlEYXRlLmdldFVUQ0RhdGUoKSk7XG4gICAgcmVzdWx0LnNldEhvdXJzKGRpcnR5RGF0ZS5nZXRVVENIb3VycygpLCBkaXJ0eURhdGUuZ2V0VVRDTWludXRlcygpLCBkaXJ0eURhdGUuZ2V0VVRDU2Vjb25kcygpLCBkaXJ0eURhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgdGltZSArIG9mZnNldCk7XG59XG5cbnZhciBwYXR0ZXJucyA9IHtcbiAgZGF0ZVRpbWVEZWxpbWl0ZXI6IC9bVCBdLyxcbiAgdGltZVpvbmVEZWxpbWl0ZXI6IC9bWiBdL2ksXG4gIHRpbWV6b25lOiAvKFtaKy1dLiopJC9cbn07XG52YXIgZGF0ZVJlZ2V4ID0gL14tPyg/OihcXGR7M30pfChcXGR7Mn0pKD86LT8oXFxkezJ9KSk/fFcoXFxkezJ9KSg/Oi0/KFxcZHsxfSkpP3wpJC87XG52YXIgdGltZVJlZ2V4ID0gL14oXFxkezJ9KD86Wy4sXVxcZCopPykoPzo6PyhcXGR7Mn0oPzpbLixdXFxkKik/KSk/KD86Oj8oXFxkezJ9KD86Wy4sXVxcZCopPykpPyQvO1xudmFyIHRpbWV6b25lUmVnZXggPSAvXihbKy1dKShcXGR7Mn0pKD86Oj8oXFxkezJ9KSk/JC87XG5cbmZ1bmN0aW9uIHNwbGl0RGF0ZVN0cmluZyhkYXRlU3RyaW5nKSB7XG4gIHZhciBkYXRlU3RyaW5ncyA9IHt9O1xuICB2YXIgYXJyYXkgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLmRhdGVUaW1lRGVsaW1pdGVyKTtcbiAgdmFyIHRpbWVTdHJpbmc7IC8vIFRoZSByZWdleCBtYXRjaCBzaG91bGQgb25seSByZXR1cm4gYXQgbWF4aW11bSB0d28gYXJyYXkgZWxlbWVudHMuXG4gIC8vIFtkYXRlXSwgW3RpbWVdLCBvciBbZGF0ZSwgdGltZV0uXG5cbiAgaWYgKGFycmF5Lmxlbmd0aCA+IDIpIHtcbiAgICByZXR1cm4gZGF0ZVN0cmluZ3M7XG4gIH1cblxuICBpZiAoLzovLnRlc3QoYXJyYXlbMF0pKSB7XG4gICAgdGltZVN0cmluZyA9IGFycmF5WzBdO1xuICB9IGVsc2Uge1xuICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBhcnJheVswXTtcbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMV07XG5cbiAgICBpZiAocGF0dGVybnMudGltZVpvbmVEZWxpbWl0ZXIudGVzdChkYXRlU3RyaW5ncy5kYXRlKSkge1xuICAgICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMudGltZVpvbmVEZWxpbWl0ZXIpWzBdO1xuICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmcuc3Vic3RyKGRhdGVTdHJpbmdzLmRhdGUubGVuZ3RoLCBkYXRlU3RyaW5nLmxlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRpbWVTdHJpbmcpIHtcbiAgICB2YXIgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZS5leGVjKHRpbWVTdHJpbmcpO1xuXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZy5yZXBsYWNlKHRva2VuWzFdLCAnJyk7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IHRva2VuWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0ZVN0cmluZ3M7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkYXRlU3RyaW5nLCBhZGRpdGlvbmFsRGlnaXRzKSB7XG4gIHZhciByZWdleCA9IG5ldyBSZWdFeHAoJ14oPzooXFxcXGR7NH18WystXVxcXFxkeycgKyAoNCArIGFkZGl0aW9uYWxEaWdpdHMpICsgJ30pfChcXFxcZHsyfXxbKy1dXFxcXGR7JyArICgyICsgYWRkaXRpb25hbERpZ2l0cykgKyAnfSkkKScpO1xuICB2YXIgY2FwdHVyZXMgPSBkYXRlU3RyaW5nLm1hdGNoKHJlZ2V4KTsgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcblxuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4ge1xuICAgIHllYXI6IE5hTixcbiAgICByZXN0RGF0ZVN0cmluZzogJydcbiAgfTtcbiAgdmFyIHllYXIgPSBjYXB0dXJlc1sxXSA/IHBhcnNlSW50KGNhcHR1cmVzWzFdKSA6IG51bGw7XG4gIHZhciBjZW50dXJ5ID0gY2FwdHVyZXNbMl0gPyBwYXJzZUludChjYXB0dXJlc1syXSkgOiBudWxsOyAvLyBlaXRoZXIgeWVhciBvciBjZW50dXJ5IGlzIG51bGwsIG5vdCBib3RoXG5cbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBjZW50dXJ5ID09PSBudWxsID8geWVhciA6IGNlbnR1cnkgKiAxMDAsXG4gICAgcmVzdERhdGVTdHJpbmc6IGRhdGVTdHJpbmcuc2xpY2UoKGNhcHR1cmVzWzFdIHx8IGNhcHR1cmVzWzJdKS5sZW5ndGgpXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF0ZShkYXRlU3RyaW5nLCB5ZWFyKSB7XG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB5ZWFyXG4gIGlmICh5ZWFyID09PSBudWxsKSByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgdmFyIGNhcHR1cmVzID0gZGF0ZVN0cmluZy5tYXRjaChkYXRlUmVnZXgpOyAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgc3RyaW5nXG5cbiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIHZhciBpc1dlZWtEYXRlID0gISFjYXB0dXJlc1s0XTtcbiAgdmFyIGRheU9mWWVhciA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbMV0pO1xuICB2YXIgbW9udGggPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzJdKSAtIDE7XG4gIHZhciBkYXkgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzNdKTtcbiAgdmFyIHdlZWsgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzRdKTtcbiAgdmFyIGRheU9mV2VlayA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbNV0pIC0gMTtcblxuICBpZiAoaXNXZWVrRGF0ZSkge1xuICAgIGlmICghdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXlPZldlZWspKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF5T2ZJU09XZWVrWWVhcih5ZWFyLCB3ZWVrLCBkYXlPZldlZWspO1xuICB9IGVsc2Uge1xuICAgIHZhciBkYXRlID0gbmV3IERhdGUoMCk7XG5cbiAgICBpZiAoIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF5KSB8fCAhdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICAgIH1cblxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgbW9udGgsIE1hdGgubWF4KGRheU9mWWVhciwgZGF5KSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VEYXRlVW5pdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBwYXJzZUludCh2YWx1ZSkgOiAxO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRpbWUodGltZVN0cmluZykge1xuICB2YXIgY2FwdHVyZXMgPSB0aW1lU3RyaW5nLm1hdGNoKHRpbWVSZWdleCk7XG4gIGlmICghY2FwdHVyZXMpIHJldHVybiBOYU47IC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB0aW1lXG5cbiAgdmFyIGhvdXJzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1sxXSk7XG4gIHZhciBtaW51dGVzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1syXSk7XG4gIHZhciBzZWNvbmRzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1szXSk7XG5cbiAgaWYgKCF2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuXG4gIHJldHVybiBob3VycyAqIF9pbmRleC5taWxsaXNlY29uZHNJbkhvdXIgKyBtaW51dGVzICogX2luZGV4Lm1pbGxpc2Vjb25kc0luTWludXRlICsgc2Vjb25kcyAqIDEwMDA7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVGltZVVuaXQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICYmIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgnLCcsICcuJykpIHx8IDA7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVGltZXpvbmUodGltZXpvbmVTdHJpbmcpIHtcbiAgaWYgKHRpbWV6b25lU3RyaW5nID09PSAnWicpIHJldHVybiAwO1xuICB2YXIgY2FwdHVyZXMgPSB0aW1lem9uZVN0cmluZy5tYXRjaCh0aW1lem9uZVJlZ2V4KTtcbiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIDA7XG4gIHZhciBzaWduID0gY2FwdHVyZXNbMV0gPT09ICcrJyA/IC0xIDogMTtcbiAgdmFyIGhvdXJzID0gcGFyc2VJbnQoY2FwdHVyZXNbMl0pO1xuICB2YXIgbWludXRlcyA9IGNhcHR1cmVzWzNdICYmIHBhcnNlSW50KGNhcHR1cmVzWzNdKSB8fCAwO1xuXG4gIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgcmV0dXJuIHNpZ24gKiAoaG91cnMgKiBfaW5kZXgubWlsbGlzZWNvbmRzSW5Ib3VyICsgbWludXRlcyAqIF9pbmRleC5taWxsaXNlY29uZHNJbk1pbnV0ZSk7XG59XG5cbmZ1bmN0aW9uIGRheU9mSVNPV2Vla1llYXIoaXNvV2Vla1llYXIsIHdlZWssIGRheSkge1xuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKDApO1xuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGlzb1dlZWtZZWFyLCAwLCA0KTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeURheSA9IGRhdGUuZ2V0VVRDRGF5KCkgfHwgNztcbiAgdmFyIGRpZmYgPSAod2VlayAtIDEpICogNyArIGRheSArIDEgLSBmb3VydGhPZkphbnVhcnlEYXk7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIGRpZmYpO1xuICByZXR1cm4gZGF0ZTtcbn0gLy8gVmFsaWRhdGlvbiBmdW5jdGlvbnNcbi8vIEZlYnJ1YXJ5IGlzIG51bGwgdG8gaGFuZGxlIHRoZSBsZWFwIHllYXIgKHVzaW5nIHx8KVxuXG5cbnZhciBkYXlzSW5Nb250aHMgPSBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTtcblxuZnVuY3Rpb24gaXNMZWFwWWVhckluZGV4KHllYXIpIHtcbiAgcmV0dXJuIHllYXIgJSA0MDAgPT09IDAgfHwgeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXRlKSB7XG4gIHJldHVybiBtb250aCA+PSAwICYmIG1vbnRoIDw9IDExICYmIGRhdGUgPj0gMSAmJiBkYXRlIDw9IChkYXlzSW5Nb250aHNbbW9udGhdIHx8IChpc0xlYXBZZWFySW5kZXgoeWVhcikgPyAyOSA6IDI4KSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpIHtcbiAgcmV0dXJuIGRheU9mWWVhciA+PSAxICYmIGRheU9mWWVhciA8PSAoaXNMZWFwWWVhckluZGV4KHllYXIpID8gMzY2IDogMzY1KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXZWVrRGF0ZShfeWVhciwgd2VlaywgZGF5KSB7XG4gIHJldHVybiB3ZWVrID49IDEgJiYgd2VlayA8PSA1MyAmJiBkYXkgPj0gMCAmJiBkYXkgPD0gNjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XG4gIGlmIChob3VycyA9PT0gMjQpIHtcbiAgICByZXR1cm4gbWludXRlcyA9PT0gMCAmJiBzZWNvbmRzID09PSAwO1xuICB9XG5cbiAgcmV0dXJuIHNlY29uZHMgPj0gMCAmJiBzZWNvbmRzIDwgNjAgJiYgbWludXRlcyA+PSAwICYmIG1pbnV0ZXMgPCA2MCAmJiBob3VycyA+PSAwICYmIGhvdXJzIDwgMjU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGltZXpvbmUoX2hvdXJzLCBtaW51dGVzKSB7XG4gIHJldHVybiBtaW51dGVzID49IDAgJiYgbWludXRlcyA8PSA1OTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7IiwiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgcGFyc2VJU08gZnJvbSAnZGF0ZS1mbnMvcGFyc2VJU08vaW5kZXguanMnO1xuaW1wb3J0IHsgZm9ybWF0RGF0ZVByb3BlcnR5IH0gZnJvbSBcIi4uLy4uL3V0aWxzL2luZGV4LmpzXCI7XG5leHBvcnQgY29uc3QgdXNlRGF0ZVBpY2tlciA9ICh7XG4gIHZhbHVlLFxuICBwcm9wZXJ0eVR5cGUsXG4gIGRpc2FibGVkLFxuICBvbkNoYW5nZVxufSkgPT4ge1xuICBjb25zdCBbaXNDYWxlbmRhclZpc2libGUsIHNldENhbGVuZGFyVmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGxldCBkYXRlO1xuICBsZXQgZGF0ZVN0cmluZztcbiAgaWYgKHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgIT09ICdEYXRlJykge1xuICAgIGNvbnN0IGRhdGVTdHJpbmdWYWx1ZSA9IHZhbHVlO1xuICAgIGxldCBkYXRlTnVtID0gcGFyc2VJU08oZGF0ZVN0cmluZ1ZhbHVlKTtcbiAgICBpZiAoZGF0ZU51bS50b1N0cmluZygpID09PSAnSW52YWxpZCBEYXRlJykgZGF0ZU51bSA9IHVuZGVmaW5lZDtcbiAgICBpZiAoZGF0ZU51bSkge1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGVOdW0pO1xuICAgICAgZGF0ZVN0cmluZyA9IGZvcm1hdERhdGVQcm9wZXJ0eShkYXRlLCBwcm9wZXJ0eVR5cGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lID09PSAnRGF0ZScpIHtcbiAgICBkYXRlU3RyaW5nID0gZm9ybWF0RGF0ZVByb3BlcnR5KHZhbHVlLCBwcm9wZXJ0eVR5cGUpO1xuICB9XG4gIGNvbnN0IG9uRGF0ZUNoYW5nZSA9IG5ld0RhdGUgPT4ge1xuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIG9uQ2hhbmdlKG5ld0RhdGUpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBkYXRlU3RyaW5nLFxuICAgIGRhdGUsXG4gICAgaXNDYWxlbmRhclZpc2libGUsXG4gICAgc2V0Q2FsZW5kYXJWaXNpYmxlLFxuICAgIG9uRGF0ZUNoYW5nZVxuICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IHVzZURhdGVQaWNrZXI7IiwiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9ydCAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFJBV0VSX1dJRFRIID0gJzUwMHB4JzsiLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1zaGFkb3cgKi9cbmltcG9ydCB7IHNwYWNlLCB2YXJpYW50LCBsYXlvdXQsIGNvbG9yIH0gZnJvbSAnc3R5bGVkLXN5c3RlbSc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgeyBjc3NDbGFzcyB9IGZyb20gXCIuLi8uLi91dGlscy9jc3MtY2xhc3MuanNcIjtcbmltcG9ydCB7IERFRkFVTFRfRFJBV0VSX1dJRFRIIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5qc1wiO1xuXG4vKipcbiAqIFByb3BzIGZvciBEcmF3ZXIgY29tcG9uZW50LiBBcGFydCBmcm9tIHRob3NlIGRlc2NyaWJlZCBiZWxvdyBpdCBhbHNvIGV4dGVuZHMgYWxsXG4gKiB7QGxpbmsgU3BhY2VQcm9wc30uXG4gKlxuICogQGFsaWFzIERyYXdlclByb3BzXG4gKiBAZXh0ZW5kcyBTcGFjZVByb3BzXG4gKiBAZXh0ZW5kcyBMYXlvdXRQcm9wc1xuICogQGV4dGVuZHMgQ29sb3JQcm9wc1xuICogQG1lbWJlcm9mIERyYXdlclxuICovXG5cbmNvbnN0IHZhcmlhbnRzID0gdmFyaWFudCh7XG4gIHZhcmlhbnRzOiB7XG4gICAgZmlsdGVyOiB7XG4gICAgICBiZzogJ2ZpbHRlckJnJyxcbiAgICAgIHdpZHRoOiAnNDAwcHgnLFxuICAgICAgY2xhc3NOYW1lOiBjc3NDbGFzcyhbJ0RyYXdlcicsICdEcmF3ZXJfRmlsdGVyJ10pXG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKlxuICogPGltZyBzcmM9XCJjb21wb25lbnRzL2RyYXdlci5wbmdcIiAvPlxuICpcbiAqIERyYXdlciBjb21wb25lbnQgcmVuZGVycyBhIGh1Z2Ugc2lkZSBhcmVhIHdoZXJlIHtAbGluayBCYXNlQWN0aW9uQ29tcG9uZW50fSByZW5kZXJzXG4gKiBhbGwgYWN0aW9ucyB3aGVyZSB7QGxpbmsgQWN0aW9uLnNob3dJbkRyYXdlcn0gaXMgc2V0IHRvIHRydWUuXG4gKlxuICogWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gdXNlIGl0IGRpcmVjdGx5IGluIHlvdXIgYWN0aW9ucywgYnV0IGlmIHlvdSBkZWNpZGUgdG8gc2V0XG4gKiBgc2hvd0luRHJhd2VyYCB0byB0cnVlIHlvdSB3aWxsIHByb2JhYmx5IHdhbnQgdG8gdXNlIGBEcmF3ZXJDb250ZW50YCBvciBgRHJhd2VyRm9vdGVyYFxuICogY29tcG9uZW50cy5cbiAqXG4gKiBBbGwgdGhlc2UgY29tcG9uZW50czogRHJhd2VyLCBEcmF3ZXJDb250ZW50IGFuZCBEcmF3ZXIgRm9vdGVyIGV4dGVuZHMge0BsaW5rIFNwYWNlUHJvcHN9LlxuICpcbiAqICMjIyBVc2FnZVxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IERyYXdlciwgRHJhd2VyUHJvcHMsIERyYXdlckNvbnRlbnQsIERyYXdlckZvb3RlciB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nXG4gKiBgYGBcbiAqXG4gKiBAY29tcG9uZW50XG4gKiBAc3ViY2F0ZWdvcnkgTW9sZWN1bGVzXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAc2VlIERyYXdlclByb3BzXG4gKiBAc2VlIHtAbGluayBodHRwczovL3N0b3J5Ym9vay5hZG1pbmpzLmNvLz9wYXRoPS9zdG9yeS9kZXNpZ25zeXN0ZW0tbW9sZWN1bGVzLWRyYXdlci0tZGVmYXVsdCBTdG9yeWJvb2t9XG4gKiBAZXhhbXBsZVxuICogcmV0dXJuIChcbiAqIDxCb3ggaGVpZ2h0PVwiNTAwcHhcIj5cbiAqICAgPERyYXdlcj5cbiAqICAgICA8RHJhd2VyQ29udGVudD5cbiAqICAgICAgIDxIZWFkZXIuSDM+XG4gKiAgICAgICAgIDxCdXR0b24gc2l6ZT1cImljb25cIiByb3VuZGVkIG1yPVwibGdcIj5cbiAqICAgICAgICAgICA8SWNvbiBpY29uPVwiQ2hldnJvblJpZ2h0XCIgLz5cbiAqICAgICAgICAgPC9CdXR0b24+XG4gKiAgICAgICAgIEVkaXRcbiAqICAgICAgIDwvSGVhZGVyLkgzPlxuICogICAgICAgPEJveCBteT1cIngzXCIgcD17MH0+XG4gKiAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtXCI+XG4gKiAgICAgICAgICAgPEljb24gaWNvbj1cIkluZm9cIiAvPlxuICogICAgICAgICAgIEluZm9cbiAqICAgICAgICAgPC9CdXR0b24+XG4gKiAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtXCIgbWw9XCJsZ1wiPlxuICogICAgICAgICAgIDxJY29uIGljb249XCJUcmFzaFwiIC8+XG4gKiAgICAgICAgICAgRGVsZXRlXG4gKiAgICAgICAgIDwvQnV0dG9uPlxuICogICAgICAgPC9Cb3g+XG4gKlxuICogICAgIDwvRHJhd2VyQ29udGVudD5cbiAqICAgICA8RHJhd2VyRm9vdGVyPlxuICogICAgICAgPEJ1dHRvbiB2YXJpYW50PVwiY29udGFpbmVkXCI+XG4gKiAgICAgICAgIFNhdmVcbiAqICAgICAgIDwvQnV0dG9uPlxuICogICAgIDwvRHJhd2VyRm9vdGVyPlxuICogICA8L0RyYXdlcj5cbiAqIDwvQm94PlxuICogKVxuICpcbiAqIEBzZWN0aW9uIGRlc2lnbi1zeXN0ZW1cbiAqL1xuY29uc3QgRHJhd2VyID0gc3R5bGVkLnNlY3Rpb25gXG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIHotaW5kZXg6IDEwMDtcblxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoJHsoe1xuICBpc0hpZGRlblxufSkgPT4gaXNIaWRkZW4gPyAnMTAwJScgOiAnMCUnfSk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1cyBlYXNlLWluLW91dDtcblxuICBib3gtc2hhZG93OiAtMXB4IDBweCAwcHggI0VFRUVFRiwgLTRweCAwcHggMTZweCByZ2JhKDEwNywgMTE5LCAxMjksIDAuMSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5jb250YWluZXJ9O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIFxuICAke3NwYWNlfTtcbiAgJHtjb2xvcn07XG4gICR7bGF5b3V0fTtcbiAgJHt2YXJpYW50c307XG5gO1xuRHJhd2VyLmRlZmF1bHRQcm9wcyA9IHtcbiAgd2lkdGg6IERFRkFVTFRfRFJBV0VSX1dJRFRILFxuICBjbGFzc05hbWU6IGNzc0NsYXNzKCdEcmF3ZXInKVxufTtcbkRyYXdlci5kaXNwbGF5TmFtZSA9ICdEcmF3ZXInO1xuZXhwb3J0IHsgRHJhd2VyIH07XG5leHBvcnQgZGVmYXVsdCBEcmF3ZXI7IiwiaW1wb3J0IHsgc3BhY2UgfSBmcm9tICdzdHlsZWQtc3lzdGVtJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcblxuLyoqXG4gKiBAY29tcG9uZW50XG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY29uc3QgRHJhd2VyQ29udGVudCA9IHN0eWxlZC5zZWN0aW9uYFxuICBmbGV4LWdyb3c6IDE7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBwYWRkaW5nOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5zcGFjZS54M30gJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuc3BhY2UueHhsfSAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5zcGFjZS54bH07XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICR7c3BhY2V9O1xuYDtcbkRyYXdlckNvbnRlbnQuZGlzcGxheU5hbWUgPSAnRHJhd2VyQ29udGVudCc7XG5leHBvcnQgZGVmYXVsdCBEcmF3ZXJDb250ZW50OyIsImltcG9ydCB7IHNwYWNlIH0gZnJvbSAnc3R5bGVkLXN5c3RlbSc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5cbi8qKlxuICogQGNvbXBvbmVudFxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IERyYXdlckZvb3RlciA9IHN0eWxlZC5zZWN0aW9uYFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbiAgcGFkZGluZzogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuc3BhY2UueHhsfSAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5zcGFjZS5sZ307XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZmxleC1zaHJpbms6IDA7XG4gICR7c3BhY2V9O1xuYDtcbkRyYXdlckZvb3Rlci5kaXNwbGF5TmFtZSA9ICdEcmF3ZXJGb290ZXInO1xuZXhwb3J0IGRlZmF1bHQgRHJhd2VyRm9vdGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuLyogZXNsaW50LWRpc2FibGUgZGVmYXVsdC1jYXNlICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlTGF5b3V0RWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuY29uc3QgU3R5bGVkRHJvcERvd24gPSBzdHlsZWQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbmA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9TVElDSyA9ICdsZWZ0JztcblxuLyoqXG4gKiBBdmFpbGFibGUgdmFsdWVzIGZvciB7QGxpbmsgRHJvcERvd259LnN0aWNrIHByb3BcbiAqIEBtZW1iZXJvZiBEcm9wRG93blxuICovXG5cbi8qKlxuICogUHJvcHMgcGFzc2VkIHRvIERyb3BEb3duIGVsZW1lbnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWy4uLl0gT3RoZXIgcHJvcHMgZnJvbSB7QGxpbmsgQm94UHJvcHN9XG4gKiBAbWVtYmVyb2YgRHJvcERvd25cbiAqIEBleHRlbmRzIEJveFByb3BzXG4gKi9cblxuLyoqXG4gKiBAbG9hZCAuL2Ryb3AtZG93bi5kb2MubWRcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vc3Rvcnlib29rLmFkbWluanMuY28vP3BhdGg9L3N0b3J5L2Rlc2lnbnN5c3RlbS1tb2xlY3VsZXMtZHJvcGRvd24tLWRlZmF1bHQgU3Rvcnlib29rfVxuICogQGNvbXBvbmVudFxuICogQHN1YmNhdGVnb3J5IE1vbGVjdWxlc1xuICogQHNlY3Rpb24gZGVzaWduLXN5c3RlbVxuICovXG5jb25zdCBEcm9wRG93biA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIHN0aWNrID0gREVGQVVMVF9TVElDSyxcbiAgICAuLi5ib3hQcm9wc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtpc1Zpc2libGUsIHNldElzVmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpbml0aWFsSGVpZ2h0LCBzZXRJbml0aWFsSGVpZ2h0XSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCByZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IFttZW51UG9zaXRpb24sIHNldE1lbnVQb3NpdGlvbl0gPSB1c2VTdGF0ZSgpO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyZWYuY3VycmVudCAmJiAhaW5pdGlhbEhlaWdodCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBvZmZzZXRIZWlnaHRcbiAgICAgIH0gPSByZWYuY3VycmVudDtcbiAgICAgIHNldEluaXRpYWxIZWlnaHQob2Zmc2V0SGVpZ2h0KTtcbiAgICAgIHN3aXRjaCAoc3RpY2spIHtcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgc2V0TWVudVBvc2l0aW9uKHtcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICB0b3A6IG9mZnNldEhlaWdodFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgc2V0TWVudVBvc2l0aW9uKHtcbiAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgdG9wOiBvZmZzZXRIZWlnaHRcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtyZWYuY3VycmVudF0pO1xuICBjb25zdCBlbGVtZW50cyA9IFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSBjaGlsZCAmJiBjaGlsZC50eXBlICYmIGNoaWxkLnR5cGUuZGlzcGxheU5hbWU7XG4gICAgaWYgKHR5cGUgPT09ICdEcm9wRG93blRyaWdnZXInKSB7XG4gICAgICAvLyBnZXR0aW5nIHJpZCBvZiBEcm9wRG93blRyaWdnZXIgYW5kIHJlbmRlciBqdXN0IHdoYXQgd2FzIGluc2lkZVxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQucHJvcHMuY2hpbGRyZW4pO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ0Ryb3BEb3duTWVudScpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIGlzVmlzaWJsZSxcbiAgICAgICAgc3RpY2ssXG4gICAgICAgIC4uLm1lbnVQb3NpdGlvblxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjaGlsZDtcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWREcm9wRG93biwgX2V4dGVuZHMoe30sIGJveFByb3BzLCB7XG4gICAgb25Nb3VzZUVudGVyOiAoKSA9PiBzZXRJc1Zpc2libGUodHJ1ZSksXG4gICAgb25Nb3VzZUxlYXZlOiAoKSA9PiBzZXRJc1Zpc2libGUoZmFsc2UpLFxuICAgIHJlZjogcmVmXG4gIH0pLCBlbGVtZW50cyk7XG59O1xuRHJvcERvd24uZGlzcGxheU5hbWUgPSAnRHJvcERvd24nO1xuZXhwb3J0IHsgRHJvcERvd24gfTtcbmV4cG9ydCBkZWZhdWx0IERyb3BEb3duOyIsImltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IEJveCB9IGZyb20gXCIuLi8uLi9hdG9tcy9ib3gvaW5kZXguanNcIjtcbmltcG9ydCB7IERFRkFVTFRfU1RJQ0sgfSBmcm9tIFwiLi9kcm9wLWRvd24uanNcIjtcbmltcG9ydCB7IGNzc0NsYXNzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2luZGV4LmpzXCI7XG5cbi8qKlxuICogUHJvcHMgcGFzc2VkIHRvIERyb3BEb3duTWVudSBlbGVtZW50LlxuICogRXh0ZW5kcyB7QGxpbmsgQm94UHJvcHN9XG4gKlxuICogQG1lbWJlcm9mIERyb3BEb3duXG4gKi9cblxuLyoqXG4gKiBAY29tcG9uZW50XG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY29uc3QgRHJvcERvd25NZW51ID0gc3R5bGVkKEJveCkuYXR0cnMocHJvcHMgPT4gKHtcbiAgY2xhc3NOYW1lOiBjc3NDbGFzcyhbYERyb3BEb3duLVN0aWNrLSR7cHJvcHMuc3RpY2sgfHwgREVGQVVMVF9TVElDS31gLCAnRHJvcERvd25NZW51J10sIHByb3BzLmNsYXNzTmFtZSlcbn0pKWBcbiAgYmFja2dyb3VuZDogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLmNvbnRhaW5lcn07XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiA0MDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYm94LXNoYWRvdzogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuc2hhZG93cy5jYXJkfTtcbiAgYm9yZGVyLXJhZGl1czogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuc3BhY2Uuc219O1xuICAkeyh7XG4gIGlzVmlzaWJsZVxufSkgPT4gaXNWaXNpYmxlICE9PSBmYWxzZSA/ICcnIDogJ2Rpc3BsYXk6IG5vbmU7J307XG5cbiAgJi4ke2Nzc0NsYXNzKCdEcm9wRG93bi1TdGljay1sZWZ0Jyl9IC4ke2Nzc0NsYXNzKCdEcm9wRG93bk1lbnUnKX0ge1xuICAgIGxlZnQ6IDEwMCU7XG4gIH1cbiAgJi4ke2Nzc0NsYXNzKCdEcm9wRG93bi1TdGljay1yaWdodCcpfSAuJHtjc3NDbGFzcygnRHJvcERvd25NZW51Jyl9IHtcbiAgICByaWdodDogMTAwJTtcbiAgfVxuYDtcbkRyb3BEb3duTWVudS5kaXNwbGF5TmFtZSA9ICdEcm9wRG93bk1lbnUnO1xuZXhwb3J0IGRlZmF1bHQgRHJvcERvd25NZW51OyIsImltcG9ydCB7IHJnYmEgfSBmcm9tICdwb2xpc2hlZCc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgeyBzcGFjZSwgdmFyaWFudCB9IGZyb20gJ3N0eWxlZC1zeXN0ZW0nO1xuaW1wb3J0IHsgQm94IH0gZnJvbSBcIi4uLy4uL2F0b21zL2JveC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgY3NzQ2xhc3MgfSBmcm9tIFwiLi4vLi4vdXRpbHMvaW5kZXguanNcIjtcbmltcG9ydCBEcm9wRG93bk1lbnUgZnJvbSBcIi4vZHJvcC1kb3duLW1lbnUuanNcIjtcbmNvbnN0IHZhcmlhbnRzU2hhcmVkID0gKHRoZW1lLCBjb2xvcikgPT4gKHtcbiAgY29sb3IsXG4gIFtgJiAuJHtjc3NDbGFzcygnRHJvcERvd25JdGVtQWN0aW9uJyl9YF06IHtcbiAgICBjb2xvclxuICB9LFxuICAnJjpob3Zlcic6IHtcbiAgICBiZzogcmdiYSh0aGVtZS5jb2xvcnNbY29sb3JdLCAwLjAzKVxuICB9XG59KTtcbmNvbnN0IGNvbG9yVmFyaWFudHMgPSB2YXJpYW50KHtcbiAgcHJvcDogJ2NvbG9yVmFyaWFudCcsXG4gIHZhcmlhbnRzOiB7XG4gICAgcHJpbWFyeTogdGhlbWUgPT4gdmFyaWFudHNTaGFyZWQodGhlbWUsICdwcmltYXJ5MTAwJyksXG4gICAgZGFuZ2VyOiB0aGVtZSA9PiB2YXJpYW50c1NoYXJlZCh0aGVtZSwgJ2Vycm9yJyksXG4gICAgc3VjY2VzczogdGhlbWUgPT4gdmFyaWFudHNTaGFyZWQodGhlbWUsICdzdWNjZXNzJyksXG4gICAgaW5mbzogdGhlbWUgPT4gdmFyaWFudHNTaGFyZWQodGhlbWUsICdpbmZvJyksXG4gICAgc2Vjb25kYXJ5OiB0aGVtZSA9PiB2YXJpYW50c1NoYXJlZCh0aGVtZSwgJ2FjY2VudCcpLFxuICAgIGxpZ2h0OiB0aGVtZSA9PiB2YXJpYW50c1NoYXJlZCh0aGVtZSwgJ2dyZXk4MCcpLFxuICAgIGRlZmF1bHQ6IHRoZW1lID0+IHZhcmlhbnRzU2hhcmVkKHRoZW1lLCAndGV4dCcpXG4gIH1cbn0pO1xuXG4vKipcbiAqIFByb3BzIHBhc3NlZCB0byBEcm9wRG93bkl0ZW1cbiAqIEV4dGVuZHMge0BsaW5rIEJveFByb3BzfVxuICpcbiAqIEBtZW1iZXJvZiBEcm9wRG93blxuICogQGV4dGVuZHMgQm94UHJvcHNcbiAqL1xuXG4vKipcbiAqIEBjb21wb25lbnRcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBEcm9wRG93bkl0ZW0gPSBzdHlsZWQoQm94KWBcbiAgY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy50ZXh0fTtcbiAgZm9udC1mYW1pbHk6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmZvbnR9O1xuICAkeyh7XG4gIG9uQ2xpY2tcbn0pID0+IG9uQ2xpY2sgPyAnY3Vyc29yOiBwb2ludGVyOycgOiAnJ307XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAkeyh7XG4gIHRoZW1lXG59KSA9PiByZ2JhKHRoZW1lLmNvbG9ycy50ZXh0LCAwLjAzKX07XG4gIH1cblxuICAmIC4ke2Nzc0NsYXNzKCdJY29uJyl9IHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5zcGFjZS5kZWZhdWx0fTtcbiAgICBmbGV4LWdyb3c6IDA7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gIH1cblxuICAmID4gJHtEcm9wRG93bk1lbnV9IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAmOmhvdmVyID4gJHtEcm9wRG93bk1lbnV9IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG5cbiAgJiBhIHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cblxuICBwYWRkaW5nOiAkeyh7XG4gIHRoZW1lXG59KSA9PiBgJHt0aGVtZS5zcGFjZS5sZ30gJHt0aGVtZS5zcGFjZS54eGx9YH07XG5cbiAgJHtzcGFjZX07XG4gICR7Y29sb3JWYXJpYW50c307XG5gO1xuRHJvcERvd25JdGVtLmRpc3BsYXlOYW1lID0gJ0Ryb3BEb3duSXRlbSc7XG5leHBvcnQgZGVmYXVsdCBEcm9wRG93bkl0ZW07IiwiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuaW1wb3J0IHsgQm94IH0gZnJvbSBcIi4uLy4uL2F0b21zL2JveC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgY3NzQ2xhc3MgfSBmcm9tIFwiLi4vLi4vdXRpbHMvaW5kZXguanNcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuZXhwb3J0IGNvbnN0IERyb3BEb3duSXRlbUFjdGlvbiA9IHN0eWxlZChCb3gpLmF0dHJzKHByb3BzID0+ICh7XG4gIGNsYXNzTmFtZTogY3NzQ2xhc3MoJ0Ryb3BEb3duSXRlbUFjdGlvbicsIHByb3BzLmNsYXNzTmFtZSlcbn0pKWBcbiAgJHsoe1xuICBvbkNsaWNrXG59KSA9PiBvbkNsaWNrID8gJ2N1cnNvcjogcG9pbnRlcjsnIDogJyd9O1xuYDtcbkRyb3BEb3duSXRlbUFjdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIHdpZHRoOiAxLFxuICBweDogJ3h4bCcsXG4gIHB5OiAnbGcnXG59O1xuRHJvcERvd25JdGVtQWN0aW9uLmRpc3BsYXlOYW1lID0gJ0Ryb3BEb3duSXRlbUFjdGlvbic7XG5leHBvcnQgZGVmYXVsdCBEcm9wRG93bkl0ZW1BY3Rpb247IiwiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuXG4vKipcbiAqIEBjb21wb25lbnRcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBEcm9wRG93blRyaWdnZXIgPSBzdHlsZWQuc3BhbmBcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuYDtcbkRyb3BEb3duVHJpZ2dlci5kaXNwbGF5TmFtZSA9ICdEcm9wRG93blRyaWdnZXInO1xuZXhwb3J0IGRlZmF1bHQgRHJvcERvd25UcmlnZ2VyOyIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGNyZWF0ZUFzc2lnbmVyID0gcmVxdWlyZSgnLi9fY3JlYXRlQXNzaWduZXInKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduSW5gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgXG4gKiB3aGljaCBpcyBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIGFzc2lnbmVkIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnNcbiAqIGB1bmRlZmluZWRgLCBhc3NpZ25tZW50IGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgXG4gKiBpcyBpbnZva2VkIHdpdGggZml2ZSBhcmd1bWVudHM6IChvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UpLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBhbGlhcyBleHRlbmRXaXRoXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gc291cmNlcyBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmFzc2lnbldpdGhcbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUpIHtcbiAqICAgcmV0dXJuIF8uaXNVbmRlZmluZWQob2JqVmFsdWUpID8gc3JjVmFsdWUgOiBvYmpWYWx1ZTtcbiAqIH1cbiAqXG4gKiB2YXIgZGVmYXVsdHMgPSBfLnBhcnRpYWxSaWdodChfLmFzc2lnbkluV2l0aCwgY3VzdG9taXplcik7XG4gKlxuICogZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqL1xudmFyIGFzc2lnbkluV2l0aCA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcikge1xuICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCwgY3VzdG9taXplcik7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25JbldpdGg7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpLFxuICAgIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGRvbUV4Y1RhZyA9ICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBgRXJyb3JgLCBgRXZhbEVycm9yYCwgYFJhbmdlRXJyb3JgLCBgUmVmZXJlbmNlRXJyb3JgLFxuICogYFN5bnRheEVycm9yYCwgYFR5cGVFcnJvcmAsIG9yIGBVUklFcnJvcmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGVycm9yIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRXJyb3IobmV3IEVycm9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRXJyb3IoRXJyb3IpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGVycm9yVGFnIHx8IHRhZyA9PSBkb21FeGNUYWcgfHxcbiAgICAodHlwZW9mIHZhbHVlLm1lc3NhZ2UgPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlLm5hbWUgPT0gJ3N0cmluZycgJiYgIWlzUGxhaW5PYmplY3QodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Vycm9yO1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKSxcbiAgICBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgaXNFcnJvciA9IHJlcXVpcmUoJy4vaXNFcnJvcicpO1xuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGludm9rZSBgZnVuY2AsIHJldHVybmluZyBlaXRoZXIgdGhlIHJlc3VsdCBvciB0aGUgY2F1Z2h0IGVycm9yXG4gKiBvYmplY3QuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8gYGZ1bmNgIHdoZW4gaXQncyBpbnZva2VkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhdHRlbXB0LlxuICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYGZ1bmNgIHJlc3VsdCBvciBlcnJvciBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIEF2b2lkIHRocm93aW5nIGVycm9ycyBmb3IgaW52YWxpZCBzZWxlY3RvcnMuXG4gKiB2YXIgZWxlbWVudHMgPSBfLmF0dGVtcHQoZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAqICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICogfSwgJz5fPicpO1xuICpcbiAqIGlmIChfLmlzRXJyb3IoZWxlbWVudHMpKSB7XG4gKiAgIGVsZW1lbnRzID0gW107XG4gKiB9XG4gKi9cbnZhciBhdHRlbXB0ID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgYXJncykge1xuICB0cnkge1xuICAgIHJldHVybiBhcHBseShmdW5jLCB1bmRlZmluZWQsIGFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGlzRXJyb3IoZSkgPyBlIDogbmV3IEVycm9yKGUpO1xuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBhdHRlbXB0O1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheU1hcDtcbiIsInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udmFsdWVzYCBhbmQgYF8udmFsdWVzSW5gIHdoaWNoIGNyZWF0ZXMgYW5cbiAqIGFycmF5IG9mIGBvYmplY3RgIHByb3BlcnR5IHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSBuYW1lc1xuICogb2YgYHByb3BzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGdldCB2YWx1ZXMgZm9yLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlVmFsdWVzKG9iamVjdCwgcHJvcHMpIHtcbiAgcmV0dXJuIGFycmF5TWFwKHByb3BzLCBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gb2JqZWN0W2tleV07XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VWYWx1ZXM7XG4iLCJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCBieSBgXy5kZWZhdWx0c2AgdG8gY3VzdG9taXplIGl0cyBgXy5hc3NpZ25JbmAgdXNlIHRvIGFzc2lnbiBwcm9wZXJ0aWVzXG4gKiBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllc1xuICogdGhhdCByZXNvbHZlIHRvIGB1bmRlZmluZWRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IG9ialZhbHVlIFRoZSBkZXN0aW5hdGlvbiB2YWx1ZS5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHNvdXJjZSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgcGFyZW50IG9iamVjdCBvZiBgb2JqVmFsdWVgLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gY3VzdG9tRGVmYXVsdHNBc3NpZ25JbihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAoZXEob2JqVmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpIHtcbiAgICByZXR1cm4gc3JjVmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9ialZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGN1c3RvbURlZmF1bHRzQXNzaWduSW47XG4iLCIvKiogVXNlZCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbnZhciBzdHJpbmdFc2NhcGVzID0ge1xuICAnXFxcXCc6ICdcXFxcJyxcbiAgXCInXCI6IFwiJ1wiLFxuICAnXFxuJzogJ24nLFxuICAnXFxyJzogJ3InLFxuICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICdcXHUyMDI5JzogJ3UyMDI5J1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLnRlbXBsYXRlYCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZ0NoYXIoY2hyKSB7XG4gIHJldHVybiAnXFxcXCcgKyBzdHJpbmdFc2NhcGVzW2Nocl07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXNjYXBlU3RyaW5nQ2hhcjtcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsInZhciBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5cyA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXMnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZUludGVycG9sYXRlID0gLzwlPShbXFxzXFxTXSs/KSU+L2c7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVJbnRlcnBvbGF0ZTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHJvcGVydHlPZmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5T2Yob2JqZWN0KSB7XG4gIHJldHVybiBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUHJvcGVydHlPZjtcbiIsInZhciBiYXNlUHJvcGVydHlPZiA9IHJlcXVpcmUoJy4vX2Jhc2VQcm9wZXJ0eU9mJyk7XG5cbi8qKiBVc2VkIHRvIG1hcCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuICovXG52YXIgaHRtbEVzY2FwZXMgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmIzM5Oydcbn07XG5cbi8qKlxuICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAqL1xudmFyIGVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVzY2FwZUh0bWxDaGFyO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3ltYm9sO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRvU3RyaW5nO1xuIiwidmFyIGJhc2VUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VUb1N0cmluZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TdHJpbmcobnVsbCk7XG4gKiAvLyA9PiAnJ1xuICpcbiAqIF8udG9TdHJpbmcoLTApO1xuICogLy8gPT4gJy0wJ1xuICpcbiAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAqIC8vID0+ICcxLDIsMydcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9TdHJpbmc7XG4iLCJ2YXIgZXNjYXBlSHRtbENoYXIgPSByZXF1aXJlKCcuL19lc2NhcGVIdG1sQ2hhcicpLFxuICAgIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBIVE1MIGVudGl0aWVzIGFuZCBIVE1MIGNoYXJhY3RlcnMuICovXG52YXIgcmVVbmVzY2FwZWRIdG1sID0gL1smPD5cIiddL2csXG4gICAgcmVIYXNVbmVzY2FwZWRIdG1sID0gUmVnRXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBjaGFyYWN0ZXJzIFwiJlwiLCBcIjxcIiwgXCI+XCIsICdcIicsIGFuZCBcIidcIiBpbiBgc3RyaW5nYCB0byB0aGVpclxuICogY29ycmVzcG9uZGluZyBIVE1MIGVudGl0aWVzLlxuICpcbiAqICoqTm90ZToqKiBObyBvdGhlciBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkLiBUbyBlc2NhcGUgYWRkaXRpb25hbFxuICogY2hhcmFjdGVycyB1c2UgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5IGxpa2UgW19oZV9dKGh0dHBzOi8vbXRocy5iZS9oZSkuXG4gKlxuICogVGhvdWdoIHRoZSBcIj5cIiBjaGFyYWN0ZXIgaXMgZXNjYXBlZCBmb3Igc3ltbWV0cnksIGNoYXJhY3RlcnMgbGlrZVxuICogXCI+XCIgYW5kIFwiL1wiIGRvbid0IG5lZWQgZXNjYXBpbmcgaW4gSFRNTCBhbmQgaGF2ZSBubyBzcGVjaWFsIG1lYW5pbmdcbiAqIHVubGVzcyB0aGV5J3JlIHBhcnQgb2YgYSB0YWcgb3IgdW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlLiBTZWVcbiAqIFtNYXRoaWFzIEJ5bmVucydzIGFydGljbGVdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9hbWJpZ3VvdXMtYW1wZXJzYW5kcylcbiAqICh1bmRlciBcInNlbWktcmVsYXRlZCBmdW4gZmFjdFwiKSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFdoZW4gd29ya2luZyB3aXRoIEhUTUwgeW91IHNob3VsZCBhbHdheXNcbiAqIFtxdW90ZSBhdHRyaWJ1dGUgdmFsdWVzXShodHRwOi8vd29ua28uY29tL3Bvc3QvaHRtbC1lc2NhcGluZykgdG8gcmVkdWNlXG4gKiBYU1MgdmVjdG9ycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gKiAvLyA9PiAnZnJlZCwgYmFybmV5LCAmYW1wOyBwZWJibGVzJ1xuICovXG5mdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIHJldHVybiAoc3RyaW5nICYmIHJlSGFzVW5lc2NhcGVkSHRtbC50ZXN0KHN0cmluZykpXG4gICAgPyBzdHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsIGVzY2FwZUh0bWxDaGFyKVxuICAgIDogc3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVzY2FwZTtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVFc2NhcGUgPSAvPCUtKFtcXHNcXFNdKz8pJT4vZztcblxubW9kdWxlLmV4cG9ydHMgPSByZUVzY2FwZTtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVFdmFsdWF0ZSA9IC88JShbXFxzXFxTXSs/KSU+L2c7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVFdmFsdWF0ZTtcbiIsInZhciBlc2NhcGUgPSByZXF1aXJlKCcuL2VzY2FwZScpLFxuICAgIHJlRXNjYXBlID0gcmVxdWlyZSgnLi9fcmVFc2NhcGUnKSxcbiAgICByZUV2YWx1YXRlID0gcmVxdWlyZSgnLi9fcmVFdmFsdWF0ZScpLFxuICAgIHJlSW50ZXJwb2xhdGUgPSByZXF1aXJlKCcuL19yZUludGVycG9sYXRlJyk7XG5cbi8qKlxuICogQnkgZGVmYXVsdCwgdGhlIHRlbXBsYXRlIGRlbGltaXRlcnMgdXNlZCBieSBsb2Rhc2ggYXJlIGxpa2UgdGhvc2UgaW5cbiAqIGVtYmVkZGVkIFJ1YnkgKEVSQikgYXMgd2VsbCBhcyBFUzIwMTUgdGVtcGxhdGUgc3RyaW5ncy4gQ2hhbmdlIHRoZVxuICogZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG52YXIgdGVtcGxhdGVTZXR0aW5ncyA9IHtcblxuICAvKipcbiAgICogVXNlZCB0byBkZXRlY3QgYGRhdGFgIHByb3BlcnR5IHZhbHVlcyB0byBiZSBIVE1MLWVzY2FwZWQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge1JlZ0V4cH1cbiAgICovXG4gICdlc2NhcGUnOiByZUVzY2FwZSxcblxuICAvKipcbiAgICogVXNlZCB0byBkZXRlY3QgY29kZSB0byBiZSBldmFsdWF0ZWQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge1JlZ0V4cH1cbiAgICovXG4gICdldmFsdWF0ZSc6IHJlRXZhbHVhdGUsXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gaW5qZWN0LlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnaW50ZXJwb2xhdGUnOiByZUludGVycG9sYXRlLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHJlZmVyZW5jZSB0aGUgZGF0YSBvYmplY3QgaW4gdGhlIHRlbXBsYXRlIHRleHQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gICd2YXJpYWJsZSc6ICcnLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGltcG9ydCB2YXJpYWJsZXMgaW50byB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gICdpbXBvcnRzJzoge1xuXG4gICAgLyoqXG4gICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgICdfJzogeyAnZXNjYXBlJzogZXNjYXBlIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB0ZW1wbGF0ZVNldHRpbmdzO1xuIiwidmFyIGFzc2lnbkluV2l0aCA9IHJlcXVpcmUoJy4vYXNzaWduSW5XaXRoJyksXG4gICAgYXR0ZW1wdCA9IHJlcXVpcmUoJy4vYXR0ZW1wdCcpLFxuICAgIGJhc2VWYWx1ZXMgPSByZXF1aXJlKCcuL19iYXNlVmFsdWVzJyksXG4gICAgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiA9IHJlcXVpcmUoJy4vX2N1c3RvbURlZmF1bHRzQXNzaWduSW4nKSxcbiAgICBlc2NhcGVTdHJpbmdDaGFyID0gcmVxdWlyZSgnLi9fZXNjYXBlU3RyaW5nQ2hhcicpLFxuICAgIGlzRXJyb3IgPSByZXF1aXJlKCcuL2lzRXJyb3InKSxcbiAgICBpc0l0ZXJhdGVlQ2FsbCA9IHJlcXVpcmUoJy4vX2lzSXRlcmF0ZWVDYWxsJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpLFxuICAgIHJlSW50ZXJwb2xhdGUgPSByZXF1aXJlKCcuL19yZUludGVycG9sYXRlJyksXG4gICAgdGVtcGxhdGVTZXR0aW5ncyA9IHJlcXVpcmUoJy4vdGVtcGxhdGVTZXR0aW5ncycpLFxuICAgIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgSU5WQUxJRF9URU1QTF9WQVJfRVJST1JfVEVYVCA9ICdJbnZhbGlkIGB2YXJpYWJsZWAgb3B0aW9uIHBhc3NlZCBpbnRvIGBfLnRlbXBsYXRlYCc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGVtcHR5IHN0cmluZyBsaXRlcmFscyBpbiBjb21waWxlZCB0ZW1wbGF0ZSBzb3VyY2UuICovXG52YXIgcmVFbXB0eVN0cmluZ0xlYWRpbmcgPSAvXFxiX19wIFxcKz0gJyc7L2csXG4gICAgcmVFbXB0eVN0cmluZ01pZGRsZSA9IC9cXGIoX19wIFxcKz0pICcnIFxcKy9nLFxuICAgIHJlRW1wdHlTdHJpbmdUcmFpbGluZyA9IC8oX19lXFwoLio/XFwpfFxcYl9fdFxcKSkgXFwrXFxuJyc7L2c7XG5cbi8qKlxuICogVXNlZCB0byB2YWxpZGF0ZSB0aGUgYHZhbGlkYXRlYCBvcHRpb24gaW4gYF8udGVtcGxhdGVgIHZhcmlhYmxlLlxuICpcbiAqIEZvcmJpZHMgY2hhcmFjdGVycyB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50IGRlZmluaXRpb246XG4gKiAtIFwiKCksXCIgKG1vZGlmaWNhdGlvbiBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzKVxuICogLSBcIj1cIiAoZGVmYXVsdCB2YWx1ZSlcbiAqIC0gXCJbXXt9XCIgKGRlc3RydWN0dXJpbmcgb2YgZnVuY3Rpb24gcGFyYW1ldGVycylcbiAqIC0gXCIvXCIgKGJlZ2lubmluZyBvZiBhIGNvbW1lbnQpXG4gKiAtIHdoaXRlc3BhY2VcbiAqL1xudmFyIHJlRm9yYmlkZGVuSWRlbnRpZmllckNoYXJzID0gL1soKT0se31cXFtcXF1cXC9cXHNdLztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoXG4gKiBbRVMgdGVtcGxhdGUgZGVsaW1pdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMpLlxuICovXG52YXIgcmVFc1RlbXBsYXRlID0gL1xcJFxceyhbXlxcXFx9XSooPzpcXFxcLlteXFxcXH1dKikqKVxcfS9nO1xuXG4vKiogVXNlZCB0byBlbnN1cmUgY2FwdHVyaW5nIG9yZGVyIG9mIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVOb01hdGNoID0gLygkXikvO1xuXG4vKiogVXNlZCB0byBtYXRjaCB1bmVzY2FwZWQgY2hhcmFjdGVycyBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG52YXIgcmVVbmVzY2FwZWRTdHJpbmcgPSAvWydcXG5cXHJcXHUyMDI4XFx1MjAyOVxcXFxdL2c7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGludGVycG9sYXRlIGRhdGEgcHJvcGVydGllc1xuICogaW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlcnMsIEhUTUwtZXNjYXBlIGludGVycG9sYXRlZCBkYXRhIHByb3BlcnRpZXMgaW5cbiAqIFwiZXNjYXBlXCIgZGVsaW1pdGVycywgYW5kIGV4ZWN1dGUgSmF2YVNjcmlwdCBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy4gRGF0YVxuICogcHJvcGVydGllcyBtYXkgYmUgYWNjZXNzZWQgYXMgZnJlZSB2YXJpYWJsZXMgaW4gdGhlIHRlbXBsYXRlLiBJZiBhIHNldHRpbmdcbiAqIG9iamVjdCBpcyBnaXZlbiwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBfLnRlbXBsYXRlU2V0dGluZ3NgIHZhbHVlcy5cbiAqXG4gKiAqKk5vdGU6KiogSW4gdGhlIGRldmVsb3BtZW50IGJ1aWxkIGBfLnRlbXBsYXRlYCB1dGlsaXplc1xuICogW3NvdXJjZVVSTHNdKGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL2RldmVsb3BlcnRvb2xzL3NvdXJjZW1hcHMvI3RvYy1zb3VyY2V1cmwpXG4gKiBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwcmVjb21waWxpbmcgdGVtcGxhdGVzIHNlZVxuICogW2xvZGFzaCdzIGN1c3RvbSBidWlsZHMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9sb2Rhc2guY29tL2N1c3RvbS1idWlsZHMpLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIENocm9tZSBleHRlbnNpb24gc2FuZGJveGVzIHNlZVxuICogW0Nocm9tZSdzIGV4dGVuc2lvbnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9leHRlbnNpb25zL3NhbmRib3hpbmdFdmFsKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHRlbXBsYXRlIHN0cmluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmVzY2FwZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXNjYXBlXVxuICogIFRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmV2YWx1YXRlPV8udGVtcGxhdGVTZXR0aW5ncy5ldmFsdWF0ZV1cbiAqICBUaGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5pbXBvcnRzPV8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXVxuICogIEFuIG9iamVjdCB0byBpbXBvcnQgaW50byB0aGUgdGVtcGxhdGUgYXMgZnJlZSB2YXJpYWJsZXMuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuaW50ZXJwb2xhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlXVxuICogIFRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNvdXJjZVVSTD0ndGVtcGxhdGVTb3VyY2VzW25dJ11cbiAqICBUaGUgc291cmNlVVJMIG9mIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy52YXJpYWJsZT0nb2JqJ11cbiAqICBUaGUgZGF0YSBvYmplY3QgdmFyaWFibGUgbmFtZS5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBVc2UgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIgdG8gY3JlYXRlIGEgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gKiAvLyA9PiAnaGVsbG8gZnJlZCEnXG4gKlxuICogLy8gVXNlIHRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyIHRvIGVzY2FwZSBkYXRhIHByb3BlcnR5IHZhbHVlcy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzxiPjwlLSB2YWx1ZSAlPjwvYj4nKTtcbiAqIGNvbXBpbGVkKHsgJ3ZhbHVlJzogJzxzY3JpcHQ+JyB9KTtcbiAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gKlxuICogLy8gVXNlIHRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdCBhbmQgZ2VuZXJhdGUgSFRNTC5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIF8uZm9yRWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+Jyk7XG4gKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICpcbiAqIC8vIFVzZSB0aGUgaW50ZXJuYWwgYHByaW50YCBmdW5jdGlvbiBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIHByaW50KFwiaGVsbG8gXCIgKyB1c2VyKTsgJT4hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ2Jhcm5leScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gYmFybmV5ISdcbiAqXG4gKiAvLyBVc2UgdGhlIEVTIHRlbXBsYXRlIGxpdGVyYWwgZGVsaW1pdGVyIGFzIGFuIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiAvLyBEaXNhYmxlIHN1cHBvcnQgYnkgcmVwbGFjaW5nIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gJHsgdXNlciB9IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdwZWJibGVzJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBwZWJibGVzISdcbiAqXG4gKiAvLyBVc2UgYmFja3NsYXNoZXMgdG8gdHJlYXQgZGVsaW1pdGVycyBhcyBwbGFpbiB0ZXh0LlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCU9IFwiXFxcXDwlLSB2YWx1ZSAlXFxcXD5cIiAlPicpO1xuICogY29tcGlsZWQoeyAndmFsdWUnOiAnaWdub3JlZCcgfSk7XG4gKiAvLyA9PiAnPCUtIHZhbHVlICU+J1xuICpcbiAqIC8vIFVzZSB0aGUgYGltcG9ydHNgIG9wdGlvbiB0byBpbXBvcnQgYGpRdWVyeWAgYXMgYGpxYC5cbiAqIHZhciB0ZXh0ID0gJzwlIGpxLmVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPic7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKHRleHQsIHsgJ2ltcG9ydHMnOiB7ICdqcSc6IGpRdWVyeSB9IH0pO1xuICogY29tcGlsZWQoeyAndXNlcnMnOiBbJ2ZyZWQnLCAnYmFybmV5J10gfSk7XG4gKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAqXG4gKiAvLyBVc2UgdGhlIGBzb3VyY2VVUkxgIG9wdGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9tIHNvdXJjZVVSTCBmb3IgdGhlIHRlbXBsYXRlLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICogY29tcGlsZWQoZGF0YSk7XG4gKiAvLyA9PiBGaW5kIHRoZSBzb3VyY2Ugb2YgXCJncmVldGluZy5qc3RcIiB1bmRlciB0aGUgU291cmNlcyB0YWIgb3IgUmVzb3VyY2VzIHBhbmVsIG9mIHRoZSB3ZWIgaW5zcGVjdG9yLlxuICpcbiAqIC8vIFVzZSB0aGUgYHZhcmlhYmxlYCBvcHRpb24gdG8gZW5zdXJlIGEgd2l0aC1zdGF0ZW1lbnQgaXNuJ3QgdXNlZCBpbiB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoaSA8JT0gZGF0YS51c2VyICU+IScsIHsgJ3ZhcmlhYmxlJzogJ2RhdGEnIH0pO1xuICogY29tcGlsZWQuc291cmNlO1xuICogLy8gPT4gZnVuY3Rpb24oZGF0YSkge1xuICogLy8gICB2YXIgX190LCBfX3AgPSAnJztcbiAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICogLy8gICByZXR1cm4gX19wO1xuICogLy8gfVxuICpcbiAqIC8vIFVzZSBjdXN0b20gdGVtcGxhdGUgZGVsaW1pdGVycy5cbiAqIF8udGVtcGxhdGVTZXR0aW5ncy5pbnRlcnBvbGF0ZSA9IC97eyhbXFxzXFxTXSs/KX19L2c7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdtdXN0YWNoZScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gbXVzdGFjaGUhJ1xuICpcbiAqIC8vIFVzZSB0aGUgYHNvdXJjZWAgcHJvcGVydHkgdG8gaW5saW5lIGNvbXBpbGVkIHRlbXBsYXRlcyBmb3IgbWVhbmluZ2Z1bFxuICogLy8gbGluZSBudW1iZXJzIGluIGVycm9yIG1lc3NhZ2VzIGFuZCBzdGFjayB0cmFjZXMuXG4gKiBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnanN0LmpzJyksICdcXFxuICogICB2YXIgSlNUID0ge1xcXG4gKiAgICAgXCJtYWluXCI6ICcgKyBfLnRlbXBsYXRlKG1haW5UZXh0KS5zb3VyY2UgKyAnXFxcbiAqICAgfTtcXFxuICogJyk7XG4gKi9cbmZ1bmN0aW9uIHRlbXBsYXRlKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpIHtcbiAgLy8gQmFzZWQgb24gSm9obiBSZXNpZydzIGB0bXBsYCBpbXBsZW1lbnRhdGlvblxuICAvLyAoaHR0cDovL2Vqb2huLm9yZy9ibG9nL2phdmFzY3JpcHQtbWljcm8tdGVtcGxhdGluZy8pXG4gIC8vIGFuZCBMYXVyYSBEb2t0b3JvdmEncyBkb1QuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vbGFkby9kb1QpLlxuICB2YXIgc2V0dGluZ3MgPSB0ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHMuXy50ZW1wbGF0ZVNldHRpbmdzIHx8IHRlbXBsYXRlU2V0dGluZ3M7XG5cbiAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpKSB7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBvcHRpb25zID0gYXNzaWduSW5XaXRoKHt9LCBvcHRpb25zLCBzZXR0aW5ncywgY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbik7XG5cbiAgdmFyIGltcG9ydHMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMuaW1wb3J0cywgc2V0dGluZ3MuaW1wb3J0cywgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiksXG4gICAgICBpbXBvcnRzS2V5cyA9IGtleXMoaW1wb3J0cyksXG4gICAgICBpbXBvcnRzVmFsdWVzID0gYmFzZVZhbHVlcyhpbXBvcnRzLCBpbXBvcnRzS2V5cyk7XG5cbiAgdmFyIGlzRXNjYXBpbmcsXG4gICAgICBpc0V2YWx1YXRpbmcsXG4gICAgICBpbmRleCA9IDAsXG4gICAgICBpbnRlcnBvbGF0ZSA9IG9wdGlvbnMuaW50ZXJwb2xhdGUgfHwgcmVOb01hdGNoLFxuICAgICAgc291cmNlID0gXCJfX3AgKz0gJ1wiO1xuXG4gIC8vIENvbXBpbGUgdGhlIHJlZ2V4cCB0byBtYXRjaCBlYWNoIGRlbGltaXRlci5cbiAgdmFyIHJlRGVsaW1pdGVycyA9IFJlZ0V4cChcbiAgICAob3B0aW9ucy5lc2NhcGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIGludGVycG9sYXRlLnNvdXJjZSArICd8JyArXG4gICAgKGludGVycG9sYXRlID09PSByZUludGVycG9sYXRlID8gcmVFc1RlbXBsYXRlIDogcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIChvcHRpb25zLmV2YWx1YXRlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wkJ1xuICAsICdnJyk7XG5cbiAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAvLyBUaGUgc291cmNlVVJMIGdldHMgaW5qZWN0ZWQgaW50byB0aGUgc291cmNlIHRoYXQncyBldmFsLWVkLCBzbyBiZSBjYXJlZnVsXG4gIC8vIHRvIG5vcm1hbGl6ZSBhbGwga2luZHMgb2Ygd2hpdGVzcGFjZSwgc28gZS5nLiBuZXdsaW5lcyAoYW5kIHVuaWNvZGUgdmVyc2lvbnMgb2YgaXQpIGNhbid0IHNuZWFrIGluXG4gIC8vIGFuZCBlc2NhcGUgdGhlIGNvbW1lbnQsIHRodXMgaW5qZWN0aW5nIGNvZGUgdGhhdCBnZXRzIGV2YWxlZC5cbiAgdmFyIHNvdXJjZVVSTCA9IGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NvdXJjZVVSTCcpXG4gICAgPyAoJy8vIyBzb3VyY2VVUkw9JyArXG4gICAgICAgKG9wdGlvbnMuc291cmNlVVJMICsgJycpLnJlcGxhY2UoL1xccy9nLCAnICcpICtcbiAgICAgICAnXFxuJylcbiAgICA6ICcnO1xuXG4gIHN0cmluZy5yZXBsYWNlKHJlRGVsaW1pdGVycywgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZVZhbHVlLCBpbnRlcnBvbGF0ZVZhbHVlLCBlc1RlbXBsYXRlVmFsdWUsIGV2YWx1YXRlVmFsdWUsIG9mZnNldCkge1xuICAgIGludGVycG9sYXRlVmFsdWUgfHwgKGludGVycG9sYXRlVmFsdWUgPSBlc1RlbXBsYXRlVmFsdWUpO1xuXG4gICAgLy8gRXNjYXBlIGNoYXJhY3RlcnMgdGhhdCBjYW4ndCBiZSBpbmNsdWRlZCBpbiBzdHJpbmcgbGl0ZXJhbHMuXG4gICAgc291cmNlICs9IHN0cmluZy5zbGljZShpbmRleCwgb2Zmc2V0KS5yZXBsYWNlKHJlVW5lc2NhcGVkU3RyaW5nLCBlc2NhcGVTdHJpbmdDaGFyKTtcblxuICAgIC8vIFJlcGxhY2UgZGVsaW1pdGVycyB3aXRoIHNuaXBwZXRzLlxuICAgIGlmIChlc2NhcGVWYWx1ZSkge1xuICAgICAgaXNFc2NhcGluZyA9IHRydWU7XG4gICAgICBzb3VyY2UgKz0gXCInICtcXG5fX2UoXCIgKyBlc2NhcGVWYWx1ZSArIFwiKSArXFxuJ1wiO1xuICAgIH1cbiAgICBpZiAoZXZhbHVhdGVWYWx1ZSkge1xuICAgICAgaXNFdmFsdWF0aW5nID0gdHJ1ZTtcbiAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZVZhbHVlICsgXCI7XFxuX19wICs9ICdcIjtcbiAgICB9XG4gICAgaWYgKGludGVycG9sYXRlVmFsdWUpIHtcbiAgICAgIHNvdXJjZSArPSBcIicgK1xcbigoX190ID0gKFwiICsgaW50ZXJwb2xhdGVWYWx1ZSArIFwiKSkgPT0gbnVsbCA/ICcnIDogX190KSArXFxuJ1wiO1xuICAgIH1cbiAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgIC8vIFRoZSBKUyBlbmdpbmUgZW1iZWRkZWQgaW4gQWRvYmUgcHJvZHVjdHMgbmVlZHMgYG1hdGNoYCByZXR1cm5lZCBpblxuICAgIC8vIG9yZGVyIHRvIHByb2R1Y2UgdGhlIGNvcnJlY3QgYG9mZnNldGAgdmFsdWUuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9KTtcblxuICBzb3VyY2UgKz0gXCInO1xcblwiO1xuXG4gIC8vIElmIGB2YXJpYWJsZWAgaXMgbm90IHNwZWNpZmllZCB3cmFwIGEgd2l0aC1zdGF0ZW1lbnQgYXJvdW5kIHRoZSBnZW5lcmF0ZWRcbiAgLy8gY29kZSB0byBhZGQgdGhlIGRhdGEgb2JqZWN0IHRvIHRoZSB0b3Agb2YgdGhlIHNjb3BlIGNoYWluLlxuICB2YXIgdmFyaWFibGUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICd2YXJpYWJsZScpICYmIG9wdGlvbnMudmFyaWFibGU7XG4gIGlmICghdmFyaWFibGUpIHtcbiAgICBzb3VyY2UgPSAnd2l0aCAob2JqKSB7XFxuJyArIHNvdXJjZSArICdcXG59XFxuJztcbiAgfVxuICAvLyBUaHJvdyBhbiBlcnJvciBpZiBhIGZvcmJpZGRlbiBjaGFyYWN0ZXIgd2FzIGZvdW5kIGluIGB2YXJpYWJsZWAsIHRvIHByZXZlbnRcbiAgLy8gcG90ZW50aWFsIGNvbW1hbmQgaW5qZWN0aW9uIGF0dGFja3MuXG4gIGVsc2UgaWYgKHJlRm9yYmlkZGVuSWRlbnRpZmllckNoYXJzLnRlc3QodmFyaWFibGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKElOVkFMSURfVEVNUExfVkFSX0VSUk9SX1RFWFQpO1xuICB9XG5cbiAgLy8gQ2xlYW51cCBjb2RlIGJ5IHN0cmlwcGluZyBlbXB0eSBzdHJpbmdzLlxuICBzb3VyY2UgPSAoaXNFdmFsdWF0aW5nID8gc291cmNlLnJlcGxhY2UocmVFbXB0eVN0cmluZ0xlYWRpbmcsICcnKSA6IHNvdXJjZSlcbiAgICAucmVwbGFjZShyZUVtcHR5U3RyaW5nTWlkZGxlLCAnJDEnKVxuICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdUcmFpbGluZywgJyQxOycpO1xuXG4gIC8vIEZyYW1lIGNvZGUgYXMgdGhlIGZ1bmN0aW9uIGJvZHkuXG4gIHNvdXJjZSA9ICdmdW5jdGlvbignICsgKHZhcmlhYmxlIHx8ICdvYmonKSArICcpIHtcXG4nICtcbiAgICAodmFyaWFibGVcbiAgICAgID8gJydcbiAgICAgIDogJ29iaiB8fCAob2JqID0ge30pO1xcbidcbiAgICApICtcbiAgICBcInZhciBfX3QsIF9fcCA9ICcnXCIgK1xuICAgIChpc0VzY2FwaW5nXG4gICAgICAgPyAnLCBfX2UgPSBfLmVzY2FwZSdcbiAgICAgICA6ICcnXG4gICAgKSArXG4gICAgKGlzRXZhbHVhdGluZ1xuICAgICAgPyAnLCBfX2ogPSBBcnJheS5wcm90b3R5cGUuam9pbjtcXG4nICtcbiAgICAgICAgXCJmdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH1cXG5cIlxuICAgICAgOiAnO1xcbidcbiAgICApICtcbiAgICBzb3VyY2UgK1xuICAgICdyZXR1cm4gX19wXFxufSc7XG5cbiAgdmFyIHJlc3VsdCA9IGF0dGVtcHQoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uKGltcG9ydHNLZXlzLCBzb3VyY2VVUkwgKyAncmV0dXJuICcgKyBzb3VyY2UpXG4gICAgICAuYXBwbHkodW5kZWZpbmVkLCBpbXBvcnRzVmFsdWVzKTtcbiAgfSk7XG5cbiAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24ncyBzb3VyY2UgYnkgaXRzIGB0b1N0cmluZ2AgbWV0aG9kIG9yXG4gIC8vIHRoZSBgc291cmNlYCBwcm9wZXJ0eSBhcyBhIGNvbnZlbmllbmNlIGZvciBpbmxpbmluZyBjb21waWxlZCB0ZW1wbGF0ZXMuXG4gIHJlc3VsdC5zb3VyY2UgPSBzb3VyY2U7XG4gIGlmIChpc0Vycm9yKHJlc3VsdCkpIHtcbiAgICB0aHJvdyByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0ZW1wbGF0ZTtcbiIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHZhcmlhbnQgYXMgc3R5bGVkVmFyaWFudCB9IGZyb20gJ3N0eWxlZC1zeXN0ZW0nO1xuaW1wb3J0IHsgQm94IH0gZnJvbSBcIi4uLy4uL2F0b21zL2JveC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uLy4uL2F0b21zL2J1dHRvbi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi8uLi9hdG9tcy9pY29uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBUZXh0IH0gZnJvbSBcIi4uLy4uL2F0b21zL3RleHQvaW5kZXguanNcIjtcbmltcG9ydCB7IGNzc0NsYXNzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2Nzcy1jbGFzcy5qc1wiO1xuXG4vKipcbiAqIFByb3AgVHlwZXMgb2YgYSBNZXNzYWdlQm94IGNvbXBvbmVudC5cbiAqIEFwYXJ0IGZyb20gdGhvc2UgZGVmaW5lZCBiZWxvdyBpdCBleHRlbmRzIGFsbCB7QGxpbmsgU3BhY2VQcm9wc31cbiAqXG4gKiBAbWVtYmVyb2YgTWVzc2FnZUJveFxuICogQGFsaWFzIE1lc3NhZ2VCb3hQcm9wc1xuICovXG5cbmNvbnN0IHNpemVWYXJpYW50cyA9IHN0eWxlZFZhcmlhbnQoe1xuICBwcm9wOiAnc2l6ZScsXG4gIHZhcmlhbnRzOiB7XG4gICAgc206IHtcbiAgICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgICAgW2AmID4gJHtjc3NDbGFzcygnQnV0dG9uJyl9YF06IHtcbiAgICAgICAgbWFyZ2luOiAnMHB4J1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5jb25zdCBTdHlsZWRNZXNzYWdlQm94ID0gc3R5bGVkKEJveClgXG4gIGxpbmUtaGVpZ2h0OiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5saW5lSGVpZ2h0cy5kZWZhdWx0fTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBjb2xvcjogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLnRleHR9O1xuICBwYWRkaW5nOiAxMnB4IDIycHg7XG4gIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcblxuICAmIC4ke2Nzc0NsYXNzKCdJY29uJyl9IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG5cbiAgJHtzaXplVmFyaWFudHN9O1xuYDtcblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKlxuICogPGltZyBzcmM9XCJjb21wb25lbnRzL21lc3NhZ2UtYm94LnBuZ1wiIC8+XG4gKlxuICogQ29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciByZW5kZXJpbmcgc3RhbmRhcmQgZGFuZ2VyL2luZm8vc3VjY2Vzc1xuICogbWVzc2FnZXMuXG4gKlxuICogSXQgaGFzIDIgc2l6ZSB2ZXJzaW9uczogZGVmYXVsdCBhbmQgc21hbGwuIEFsc28gaXQgY2FuIGVpdGhlciBjb250YWluIG9yXG4gKiBkb24ndCBjb250YWluIGNoaWxkcmVuLCB3aGljaCBjYXVzZXMgZGlmZmVyZW50IGxvb2suXG4gKlxuICogIyMjIFVzYWdlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgTWVzc2FnZUJveCwgTWVzc2FnZUJveFByb3BzIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSdcbiAqIGBgYFxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBzdWJjYXRlZ29yeSBNb2xlY3VsZXNcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBzZWUgTWVzc2FnZUJveFByb3BzXG4gKiBAc2VlIHtAbGluayBodHRwczovL3N0b3J5Ym9vay5hZG1pbmpzLmNvLz9wYXRoPS9zdG9yeS9kZXNpZ25zeXN0ZW0tbW9sZWN1bGVzLW1lc3NhZ2Vib3gtLWRlZmF1bHQgU3Rvcnlib29rfVxuICogQGV4YW1wbGUgPGNhcHRpb24+RGlmZmVyZW50IHZhcmlhbnRzPC9jYXB0aW9uPlxuICogcmV0dXJuIChcbiAqICA8Qm94IHB5PVwibGdcIj5cbiAqICAgPE1lc3NhZ2VCb3ggbWVzc2FnZT1cIlNvbWUgZGVmYXVsdCBtZXNzYWdlXCIgb25DbG9zZUNsaWNrPXsoKSA9PiBhbGVydCgnY2xvc2UgY2xpY2tlZCcpfSAvPlxuICogICA8TWVzc2FnZUJveCBtZXNzYWdlPVwiRXJyb3IgbWVzc2FnZVwiIG10PVwiZGVmYXVsdFwiIHZhcmlhbnQ9XCJkYW5nZXJcIiBvbkNsb3NlQ2xpY2s9eygpID0+IGFsZXJ0KCdjbG9zZSBjbGlja2VkJyl9IC8+XG4gKiAgIDxNZXNzYWdlQm94IG1lc3NhZ2U9XCJJbmZvIG1lc3NhZ2VcIiBtdD1cImRlZmF1bHRcIiB2YXJpYW50PVwiaW5mb1wiIG9uQ2xvc2VDbGljaz17KCkgPT4gYWxlcnQoJ2Nsb3NlIGNsaWNrZWQnKX0gLz5cbiAqICA8L0JveD5cbiAqIClcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkRpZmZlcmVudCB2YXJpYW50cyB3aXRoIGNoaWxkcmVuPC9jYXB0aW9uPlxuICogcmV0dXJuIChcbiAqICA8Qm94IHB5PVwibGdcIj5cbiAqICAgPE1lc3NhZ2VCb3ggbWVzc2FnZT1cIlNvbWUgZGVmYXVsdCBtZXNzYWdlXCIgb25DbG9zZUNsaWNrPXsoKSA9PiBhbGVydCgnY2xvc2UgY2xpY2tlZCcpfT5cbiAqICAgICBXaXRoIGluc2lkZSB0ZXh0XG4gKiAgIDwvTWVzc2FnZUJveD5cbiAqICAgPE1lc3NhZ2VCb3ggbWVzc2FnZT1cIkVycm9yIG1lc3NhZ2VcIiBtdD1cImRlZmF1bHRcIiB2YXJpYW50PVwiZGFuZ2VyXCIgb25DbG9zZUNsaWNrPXsoKSA9PiBhbGVydCgnY2xvc2UgY2xpY2tlZCcpfT5cbiAqICAgICBXaXRoIGluc2lkZSB0ZXh0XG4gKiAgIDwvTWVzc2FnZUJveD5cbiAqICAgPE1lc3NhZ2VCb3ggbWVzc2FnZT1cIkluZm8gbWVzc2FnZVwiIG10PVwiZGVmYXVsdFwiIHZhcmlhbnQ9XCJpbmZvXCIgb25DbG9zZUNsaWNrPXsoKSA9PiBhbGVydCgnY2xvc2UgY2xpY2tlZCcpfT5cbiAqICAgICBXaXRoIGluc2lkZSB0ZXh0XG4gKiAgIDwvTWVzc2FnZUJveD5cbiAqICA8L0JveD5cbiAqIClcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlNtYWxsIHdpdGggYW4gaWNvbiBhbmQgaW5zaWRlIHRleHQ8L2NhcHRpb24+XG4gKiByZXR1cm4gKFxuICogIDxCb3ggcHk9XCJsZ1wiPlxuICogICA8TWVzc2FnZUJveFxuICogICAgIHNpemU9XCJzbVwiXG4gKiAgICAgbWVzc2FnZT1cIkluZm8gbWVzc2FnZVwiXG4gKiAgICAgbXQ9XCJkZWZhdWx0XCJcbiAqICAgICB2YXJpYW50PVwiaW5mb1wiXG4gKiAgICAgaWNvbj1cIk1lc3NhZ2VDaXJjbGVcIlxuICogICAgIG9uQ2xvc2VDbGljaz17KCkgPT4gYWxlcnQoJ2Nsb3NlIGNsaWNrZWQnKX1cbiAqICAgPlxuICogICAgIFdpdGggaW5zaWRlIHRleHRcbiAqICAgPC9NZXNzYWdlQm94PlxuICogIDwvQm94PlxuICogKVxuICogQHNlY3Rpb24gZGVzaWduLXN5c3RlbVxuICovXG5leHBvcnQgY29uc3QgTWVzc2FnZUJveCA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIG9uQ2xvc2VDbGljayxcbiAgICBtZXNzYWdlLFxuICAgIGljb24sXG4gICAgY2hpbGRyZW4sXG4gICAgdmFyaWFudCA9ICdpbmZvJyxcbiAgICBzaXplLFxuICAgIC4uLm90aGVyXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgdmFyaWFudEljb24gPSB7XG4gICAgc3VjY2VzczogJ0NoZWNrJyxcbiAgICBkYW5nZXI6ICdYQ2lyY2xlJyxcbiAgICBpbmZvOiAnSW5mbycsXG4gICAgd2FybmluZzogJ0FsZXJ0Q2lyY2xlJ1xuICB9O1xuICBjb25zdCB2YXJpYW50QmcgPSB7XG4gICAgc3VjY2VzczogJ3N1Y2Nlc3NMaWdodCcsXG4gICAgZGFuZ2VyOiAnZXJyb3JMaWdodCcsXG4gICAgaW5mbzogJ2luZm9MaWdodCcsXG4gICAgd2FybmluZzogJ3dhcm5pbmdMaWdodCdcbiAgfTtcbiAgY29uc3QgdmFyaWFudEljb25CZyA9IHtcbiAgICBzdWNjZXNzOiAnc3VjY2VzcycsXG4gICAgZGFuZ2VyOiAnZXJyb3InLFxuICAgIGluZm86ICdpbmZvJyxcbiAgICB3YXJuaW5nOiAnd2FybmluZydcbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY3NzQ2xhc3MoJ01lc3NhZ2VCb3gnKVxuICB9LCBvdGhlciksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZE1lc3NhZ2VCb3gsIHtcbiAgICBhczogXCJkaXZcIixcbiAgICBiZzogdmFyaWFudEJnW3ZhcmlhbnRdLFxuICAgIHNpemU6IHNpemVcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgZmxleDogdHJ1ZSxcbiAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiXG4gIH0sIHZhcmlhbnRJY29uICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHtcbiAgICBpY29uOiBpY29uIHx8IHZhcmlhbnRJY29uW3ZhcmlhbnRdLFxuICAgIGJnOiB2YXJpYW50SWNvbkJnW3ZhcmlhbnRdLFxuICAgIGNvbG9yOiBcIndoaXRlXCIsXG4gICAgcDogXCJzbVwiLFxuICAgIG1hcmdpblJpZ2h0OiBcInhsXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjUwJVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBhczogXCJkaXZcIixcbiAgICBmbGV4R3JvdzogMVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7XG4gICAgZm9udFdlaWdodDogY2hpbGRyZW4gPyA1MDAgOiA0MDBcbiAgfSwgbWVzc2FnZSkpLCBvbkNsb3NlQ2xpY2sgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7XG4gICAgdmFyaWFudDogXCJ0ZXh0XCIsXG4gICAgc2l6ZTogXCJpY29uXCIsXG4gICAgb25DbGljazogb25DbG9zZUNsaWNrLFxuICAgIHJvdW5kZWQ6IHRydWUsXG4gICAgY29sb3I6IHZhcmlhbnQsXG4gICAgbWw6IFwieGxcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgaWNvbjogXCJYXCJcbiAgfSkpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgbWFyZ2luTGVmdDogXCJ4M1wiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIG51bGwsIGNoaWxkcmVuKSkpKTtcbn07XG5NZXNzYWdlQm94LmRpc3BsYXlOYW1lID0gJ01lc3NhZ2VCb3gnO1xuZXhwb3J0IGRlZmF1bHQgTWVzc2FnZUJveDsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuaW1wb3J0IHsgQm94IH0gZnJvbSBcIi4uLy4uL2F0b21zL2JveC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi8uLi9hdG9tcy9pY29uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vLi4vYXRvbXMvYnV0dG9uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBUZXh0IH0gZnJvbSBcIi4uLy4uL2F0b21zL3RleHQvaW5kZXguanNcIjtcbmltcG9ydCB7IGh1bWFuRmlsZVNpemUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvaW5kZXguanNcIjtcbmNvbnN0IERyb3Bab25lSW1nID0gc3R5bGVkLmRpdmBcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCckeyh7XG4gIHNyY1xufSkgPT4gc3JjfScpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlO1xuICBib3JkZXItcmFkaXVzOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5zcGFjZS5zbX07XG5gO1xuY29uc3QgV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gIHBhZGRpbmc6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnNwYWNlLm1kfTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLXRvcDogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuc3BhY2UubGd9O1xuICBnYXA6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnNwYWNlLmxnfTtcblxuICBib3JkZXI6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmJvcmRlcnMuZGVmYXVsdH07XG4gIGJvcmRlci1jb2xvcjogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLmdyZXk0MH07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnNwYWNlLnNtfTtcbmA7XG5cbi8qKlxuICogQG1lbWJlcm9mIERyb3Bab25lSXRlbVxuICogQGFsaWFzIERyb3Bab25lSXRlbVByb3BzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKlxuICogPGltZyBzcmM9XCJjb21wb25lbnRzL2Ryb3Atem9uZS1pdGVtLnBuZ1wiIC8+XG4gKlxuICogU2luZ2xlIHVwbG9hZGVkIGZpbGUuIFVzdWFsbHkgaXQgaXMgdXNlZCB3aXRoaW4ge0BsaW5rIERyb3Bab25lfSwgYnV0IGl0IGNhbiBhbHNvIGJlXG4gKiByZXVzZWQgYW55d2hlcmVcbiAqXG4gKiAjIyMgVXNhZ2VcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBEcm9wWm9uZUl0ZW0sIERyb3Bab25lSXRlbVByb3BzIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSdcbiAqIGBgYFxuICpcbiAqIEBzZWUgRHJvcFpvbmVJdGVtXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAc2VlIERyb3Bab25lSXRlbVByb3BzXG4gKiBAZXhhbXBsZVxuICogcmV0dXJuIChcbiAqICA8RHJvcFpvbmVJdGVtXG4gKiAgICBzcmM9XCJodHRwczovL3d3dy5nb29nbGUuY29tL3VybD9zYT1pJnVybD1odHRwcyUzQSUyRiUyRnd3dy5ucHIub3JnJTJGMjAxOSUyRjA1JTJGMTclMkY3MjQyNjIwMTklMkZncnVtcHktY2F0LWRpZXMtaGVyLXNwaXJpdC13aWxsLWxpdmUtb24tZmFtaWx5LXNheXMmcHNpZz1BT3ZWYXcyWkt0VEVacjhONDNmeDl4LWxUSVRhJnVzdD0xNTgxMDgzMjc0MzY4MDAwJnNvdXJjZT1pbWFnZXMmY2Q9dmZlJnZlZD0wQ0FJUWpSeHFGd29UQ0tpZHFxeUl2ZWNDRlFBQUFBQWRBQUFBQUJBRFwiXG4gKiAgICBmaWxlbmFtZT1cInNodXQtdXAtaXQtd29ya3MucG5nXCJcbiAqICAvPlxuICogKVxuICogQGNvbXBvbmVudFxuICogQHN1YmNhdGVnb3J5IE1vbGVjdWxlc1xuICogQHNlY3Rpb24gZGVzaWduLXN5c3RlbVxuICovXG5jb25zdCBEcm9wWm9uZUl0ZW0gPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBmaWxlLFxuICAgIG9uUmVtb3ZlLFxuICAgIGZpbGVuYW1lXG4gIH0gPSBwcm9wcztcbiAgbGV0IHtcbiAgICBzcmNcbiAgfSA9IHByb3BzO1xuICBpZiAoZmlsZSAmJiBbJ2ltYWdlL3BuZycsICdpbWFnZS9qcGVnJywgJ2ltYWdlL2dpZiddLmluY2x1ZGVzKGZpbGUudHlwZSkpIHtcbiAgICBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVyLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBmbGV4OiB0cnVlLFxuICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgd2lkdGg6IDQwLFxuICAgIGhlaWdodDogNDBcbiAgfSwgc3JjID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRHJvcFpvbmVJbWcsIHtcbiAgICBzcmM6IHNyY1xuICB9KSA6IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHtcbiAgICBpY29uOiBcIlBhcGVyY2xpcFwiXG4gIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgZmxleDogdHJ1ZSxcbiAgICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICAgIHN0eWxlOiB7XG4gICAgICBnYXA6IDRcbiAgICB9XG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIHtcbiAgICB2YXJpYW50OiBcInNtXCIsXG4gICAgZm9udFdlaWdodDogNTAwLFxuICAgIGxpbmVIZWlnaHQ6IFwiZGVmYXVsdFwiXG4gIH0sIGZpbGU/Lm5hbWUgfHwgZmlsZW5hbWUpLCBmaWxlICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIHtcbiAgICB2YXJpYW50OiBcInNtXCIsXG4gICAgY29sb3I6IFwiZ3JleTgwXCIsXG4gICAgbGluZUhlaWdodDogXCJkZWZhdWx0XCJcbiAgfSwgbmV3IERhdGUoZmlsZS5sYXN0TW9kaWZpZWQpLnRvTG9jYWxlU3RyaW5nKCksIFwiIFwiLCBodW1hbkZpbGVTaXplKGZpbGUuc2l6ZSwgJ01CJykpKSwgb25SZW1vdmUgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7XG4gICAgbWw6IFwiYXV0b1wiLFxuICAgIG1yOiBcIm1kXCIsXG4gICAgdmFyaWFudDogXCJsaWdodFwiLFxuICAgIHNpemU6IFwiaWNvblwiLFxuICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgcm91bmRlZDogdHJ1ZSxcbiAgICBvbkNsaWNrOiBvblJlbW92ZVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgaWNvbjogXCJYXCJcbiAgfSkpKTtcbn07XG5Ecm9wWm9uZUl0ZW0uZGlzcGxheU5hbWUgPSAnRHJvcFpvbmVJdGVtJztcbmV4cG9ydCB7IERyb3Bab25lSXRlbSB9O1xuZXhwb3J0IGRlZmF1bHQgRHJvcFpvbmVJdGVtOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5jb25zdCBEcm9wWm9uZUltYWdlID0gKCkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB3aWR0aDogXCI4MFwiLFxuICBoZWlnaHQ6IFwiNzJcIixcbiAgdmlld0JveDogXCIwIDAgODAgNzJcIixcbiAgZmlsbDogXCJub25lXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gIHg6IFwiNS44NVwiLFxuICB5OiBcIjkuMzVcIixcbiAgd2lkdGg6IFwiNjguM1wiLFxuICBoZWlnaHQ6IFwiNTUuM1wiLFxuICByeDogXCIxLjY1XCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMC43XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICB4OiBcIjguNVwiLFxuICB5OiBcIjEyXCIsXG4gIHdpZHRoOiBcIjYzXCIsXG4gIGhlaWdodDogXCIzOFwiLFxuICByeDogXCIxXCIsXG4gIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gIGZpbGxPcGFjaXR5OiBcIjAuMDVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgY3g6IFwiMjMuNVwiLFxuICBjeTogXCIyN1wiLFxuICByOiBcIjhcIixcbiAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk0zMCAxNkw0OS41IDUwSDEwLjVMMzAgMTZaXCIsXG4gIGZpbGw6IFwiIzNCMzU1MlwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTUzIDI1TDY5LjUgNTBIMzYuNUw1MyAyNVpcIixcbiAgZmlsbDogXCIjM0IzNTUyXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0yLjUgNTJWMTBDMi41IDcuNzkwODYgNC4yOTA4NiA2IDYuNSA2SDYxLjVcIixcbiAgc3Ryb2tlOiBcIiMzQjM1NTJcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMC43XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIlxufSkpO1xuZXhwb3J0IGRlZmF1bHQgRHJvcFpvbmVJbWFnZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0ZW1wbGF0ZSBmcm9tICdsb2Rhc2gvdGVtcGxhdGUuanMnO1xuaW1wb3J0IHsgcmdiYSB9IGZyb20gJ3BvbGlzaGVkJztcbmltcG9ydCB7IHN0eWxlZCwgY3NzIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuaW1wb3J0IHsgQm94IH0gZnJvbSBcIi4uLy4uL2F0b21zL2JveC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vLi4vYXRvbXMvbGFiZWwvaW5kZXguanNcIjtcbmltcG9ydCB7IFRleHQgfSBmcm9tIFwiLi4vLi4vYXRvbXMvdGV4dC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgaHVtYW5GaWxlU2l6ZSB9IGZyb20gXCIuLi8uLi91dGlscy9odW1hbi1maWxlLXNpemUuanNcIjtcbmltcG9ydCB7IE1lc3NhZ2VCb3ggfSBmcm9tIFwiLi4vbWVzc2FnZS1ib3gvaW5kZXguanNcIjtcbmltcG9ydCB7IERyb3Bab25lSXRlbSB9IGZyb20gXCIuL2Ryb3Atem9uZS1pdGVtLmpzXCI7XG5pbXBvcnQgSW1hZ2UgZnJvbSBcIi4vZHJvcC16b25lLWltYWdlLmpzXCI7XG5cbi8qKlxuICogQG1lbWJlcm9mIERyb3Bab25lXG4gKiBAYWxpYXMgRmlsZVNpemVVbml0XG4gKi9cblxuY29uc3QgdmFsaWRhdGVDb250ZW50VHlwZSA9IChtaW1lVHlwZXMsIG1pbWVUeXBlKSA9PiB7XG4gIGlmICghbWltZVR5cGVzIHx8ICFtaW1lVHlwZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG1pbWVUeXBlcy5pbmNsdWRlcyhtaW1lVHlwZSk7XG59O1xuY29uc3QgdmFsaWRhdGVTaXplID0gKG1heFNpemUsIHNpemUpID0+IHtcbiAgaWYgKCFtYXhTaXplKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKCFzaXplKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuICttYXhTaXplID49ICtzaXplO1xufTtcbmNvbnN0IGluVW5pdCA9IChzaXplLCB1bml0KSA9PiB7XG4gIGlmICghc2l6ZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gaHVtYW5GaWxlU2l6ZShzaXplLCB1bml0KTtcbn07XG5leHBvcnQgY29uc3QgRFJPUFpPTkVfREVGQVVMVF9UUkFOU0xBVElPTlMgPSB7XG4gIHBsYWNlaG9sZGVyOiAnRHJvcCB5b3VyIGZpbGUgaGVyZSwgb3IgY2xpY2sgdG8gYnJvd3NlJyxcbiAgYWNjZXB0ZWRTaXplOiAnTWF4IHNpemU6IHt7bWF4U2l6ZX19JyxcbiAgYWNjZXB0ZWRUeXBlOiAnU3VwcG9ydHM6IHt7bWltZVR5cGVzfX0nLFxuICB1bnN1cHBvcnRlZFNpemU6ICdGaWxlIHt7ZmlsZU5hbWV9fSBpcyB0b28gYmlnJyxcbiAgdW5zdXBwb3J0ZWRUeXBlOiAnRmlsZSB7e2ZpbGVOYW1lfX0gaGFzIHVuc3VwcG9ydGVkIHR5cGU6IHt7ZmlsZVR5cGV9fSdcbn07XG5jb25zdCB0cmFuc2xhdGUgPSAoc3RyLCBwYXJhbXMpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGVtcGxhdGUoc3RyLCB7XG4gICAgICBpbnRlcnBvbGF0ZTogL1xce1xceyhcXHcrKVxcfVxcfS9nXG4gICAgfSkocGFyYW1zKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn07XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAbWVtYmVyb2YgRHJvcFpvbmVcbiAqIEBhbGlhcyBPbkRyb3BEb3duQ2hhbmdlXG4gKi9cblxuLyoqXG4gKiBAbWVtYmVyb2YgRHJvcFpvbmVcbiAqIEBhbGlhcyBEcm9wWm9uZVByb3BzXG4gKi9cblxuY29uc3QgVXBsb2FkSW5wdXQgPSBzdHlsZWQuaW5wdXRgXG4gIGZvbnQtc2l6ZTogMTAwcHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICBvcGFjaXR5OiAwO1xuICBib3R0b206IDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG5gO1xuY29uc3QgU3R5bGVkRHJvcFpvbmUgPSBzdHlsZWQoQm94KWBcbiAgYm9yZGVyOiAxcHggZGFzaGVkICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5pbnB1dEJvcmRlcn07XG4gIGJvcmRlci1yYWRpdXM6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnNwYWNlLnNtfTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgJjpob3ZlciB7XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMucHJpbWFyeTEwMH07XG4gIH1cblxuICAkeyh7XG4gIGlzRHJhZ2dpbmdcbn0pID0+IGlzRHJhZ2dpbmcgJiYgY3NzYFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHsoe1xuICB0aGVtZVxufSkgPT4gcmdiYSh0aGVtZS5jb2xvcnMucHJpbWFyeTEwMCwgMC4wNSl9O1xuICAgIGB9XG5cbiAgJiAke0xhYmVsfSB7XG4gICAgY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5ncmV5NjB9O1xuICAgIGZvbnQtc2l6ZTogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuZm9udFNpemVzLnhzfTtcbiAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDFweDtcbiAgfVxuYDtcblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKlxuICogPGltZyBzcmM9XCJjb21wb25lbnRzL2Ryb3Atem9uZS5wbmdcIiAvPlxuICpcbiAqIERyb3Bab25lIHdoaWNoIGNhbiBiZSB1c2VkIGZvciB1cGxvYWRpbmcgZmlsZXMuXG4gKlxuICogIyMjIHVzYWdlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgRHJvcFpvbmUsIERyb3Bab25lUHJvcHMgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJ1xuICogYGBgXG4gKlxuICogaG93IHRvIHVzZSBpdCBpbiB5b3VyIGN1c3RvbSBjb21wb25lbnQudHN4IChUeXBlc1NjcmlwdCk6XG4gKiBgYGBcbiAqIGltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuICogaW1wb3J0IHsgRHJvcFpvbmUsIExhYmVsLCBCYXNlUHJvcGVydHlQcm9wcyB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nXG4gKiBpbXBvcnQgeyB1bmZsYXR0ZW4gfSBmcm9tICdmbGF0J1xuICpcbiAqIGNvbnN0IFVwbG9hZFBob3RvOiBSZWFjdC5GQzxCYXNlUHJvcGVydHlQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAqICAgY29uc3QgeyBwcm9wZXJ0eSwgcmVjb3JkLCBvbkNoYW5nZSB9ID0gcHJvcHNcbiAqXG4gKiAgIGNvbnN0IG9uVXBsb2FkID0gKGZpbGVzOiBGaWxlTGlzdCkgPT4ge1xuICogICAgIGNvbnN0IG5ld1JlY29yZCA9IHsuLi5yZWNvcmR9XG4gKiAgICAgY29uc3QgZmlsZSA9IGZpbGVzLmxlbmd0aCAmJiBmaWxlc1swXVxuICpcbiAqICAgICBvbkNoYW5nZSh7XG4gKiAgICAgICAuLi5uZXdSZWNvcmQsXG4gKiAgICAgICBwYXJhbXM6IHtcbiAqICAgICAgICAgLi4ubmV3UmVjb3JkLnBhcmFtcyxcbiAqICAgICAgICAgW3Byb3BlcnR5Lm5hbWVdOiBmaWxlLFxuICogICAgICAgfVxuICogICAgIH0pXG4gKiAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICogICB9XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxCb3g+XG4gKiAgICAgICA8TGFiZWw+e3Byb3BlcnR5LmxhYmVsfTwvTGFiZWw+XG4gKiAgICAgICA8RHJvcFpvbmUgb25DaGFuZ2U9e29uVXBsb2FkfSAvPlxuICogICAgIDwvQm94PlxuICogICApXG4gKiB9XG4gKiBgYGBcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBjb21wb25lbnRcbiAqIEBzdWJjYXRlZ29yeSBNb2xlY3VsZXNcbiAqIEBzZWUgRmlsZVNpemVVbml0XG4gKiBAc2VlIE9uRHJvcERvd25DaGFuZ2VcbiAqIEBzZWUgRHJvcFpvbmVQcm9wc1xuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9zdG9yeWJvb2suYWRtaW5qcy5jby8/cGF0aD0vc3RvcnkvZGVzaWduc3lzdGVtLW1vbGVjdWxlcy1kcm9wem9uZS0tZGVmYXVsdCBTdG9yeWJvb2t9XG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5TaW5nbGUgZmlsZSB3aXRoIHZhbGlkYXRpb248L2NhcHRpb24+XG4gKiBjb25zdCBtYXhTaXplID0gMTAyNCAqIDEwMFxuICogY29uc3QgbWltZVR5cGVzID0gWydhcHBsaWNhdGlvbi9wZGYnXVxuICogY29uc3Qgb25VcGxvYWQgPSAoZmlsZXMpID0+IHsgYWxlcnQoZmlsZXMsbGVuZ3RoID8gZmlsZXNbMF0ubmFtZSA6ICdubyBmaWxlcycgKSB9XG4gKiByZXR1cm4gKFxuICogPEJveD5cbiAqICAgPERyb3Bab25lXG4gKiAgICAgb25DaGFuZ2U9e29uVXBsb2FkfVxuICogICAgIHZhbGlkYXRlPSB7IHsgbWF4U2l6ZSwgbWltZVR5cGVzIH0gfVxuICogICAvPlxuICogPC9Cb3g+XG4gKiApXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+TXVsdGkgZmlsZSBvZiBwaG90b3M8L2NhcHRpb24+XG4gKiBjb25zdCBtaW1lVHlwZXMgPSBbJ2ltYWdlL3BuZyddXG4gKiBjb25zdCBvblVwbG9hZCA9IChmaWxlcykgPT4geyBhbGVydChmaWxlcy5sZW5ndGggPyBmaWxlcy5sZW5ndGggOiAnbm8gZmlsZXMnICkgfVxuICogcmV0dXJuIChcbiAqIDxCb3g+XG4gKiAgIDxEcm9wWm9uZVxuICogICAgIG11bHRpcGxlXG4gKiAgICAgb25DaGFuZ2U9e29uVXBsb2FkfVxuICogICAgIHZhbGlkYXRlPSB7IHsgbWltZVR5cGVzIH0gfVxuICogICAvPlxuICogPC9Cb3g+XG4gKiApXG4gKiBAc2VjdGlvbiBkZXNpZ24tc3lzdGVtXG4gKi9cbmNvbnN0IERyb3Bab25lID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgdmFsaWRhdGUsXG4gICAgb25DaGFuZ2UsXG4gICAgbXVsdGlwbGUsXG4gICAgZmlsZXM6IGZpbGVzRnJvbVByb3BzLFxuICAgIHVwbG9hZExpbWl0SW4sXG4gICAgdHJhbnNsYXRpb25zLFxuICAgIC4uLm90aGVyXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgW2lzRHJhZ2dpbmcsIHNldElzRHJhZ2dpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbZmlsZXNUb1VwbG9hZCwgc2V0RmlsZXNUb1VwbG9hZF0gPSB1c2VTdGF0ZShmaWxlc0Zyb21Qcm9wcyA/PyBbXSk7XG4gIGNvbnN0IHQgPSB7XG4gICAgLi4uRFJPUFpPTkVfREVGQVVMVF9UUkFOU0xBVElPTlMsXG4gICAgLi4udHJhbnNsYXRpb25zXG4gIH07XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGZpbGVzRnJvbVByb3BzKSB7XG4gICAgICBzZXRGaWxlc1RvVXBsb2FkKGZpbGVzRnJvbVByb3BzKTtcbiAgICB9XG4gIH0sIFtmaWxlc0Zyb21Qcm9wc10pO1xuICBjb25zdCBvbkRyYWdFbnRlciA9ICgpID0+IHNldElzRHJhZ2dpbmcodHJ1ZSk7XG4gIGNvbnN0IG9uRHJhZ0xlYXZlID0gKCkgPT4gc2V0SXNEcmFnZ2luZyhmYWxzZSk7XG4gIGNvbnN0IG9uRHJhZ092ZXIgPSAoKSA9PiBzZXRJc0RyYWdnaW5nKHRydWUpO1xuICBjb25zdCByZW1vdmVJdGVtID0gdXNlQ2FsbGJhY2soaW5kZXggPT4ge1xuICAgIGNvbnN0IG5ld0l0ZW1zID0gWy4uLmZpbGVzVG9VcGxvYWRdO1xuICAgIG5ld0l0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZShuZXdJdGVtcyk7XG4gICAgfVxuICAgIHNldEZpbGVzVG9VcGxvYWQobmV3SXRlbXMpO1xuICB9LCBbZmlsZXNUb1VwbG9hZCwgc2V0RmlsZXNUb1VwbG9hZCwgb25DaGFuZ2VdKTtcbiAgY29uc3Qgb25Ecm9wID0gdXNlQ2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgc2V0SXNEcmFnZ2luZyhmYWxzZSk7XG4gICAgY29uc3Qge1xuICAgICAgZmlsZXNcbiAgICB9ID0gZXZlbnQuZGF0YVRyYW5zZmVyIHx8IGV2ZW50LnRhcmdldDtcbiAgICBjb25zdCB2YWxpZGF0ZWRGaWxlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlcy5pdGVtKGkpO1xuICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWxpZGF0ZSAmJiAhdmFsaWRhdGVDb250ZW50VHlwZSh2YWxpZGF0ZS5taW1lVHlwZXMsIGZpbGUudHlwZSkpIHtcbiAgICAgICAgc2V0RXJyb3IodHJhbnNsYXRlKHQudW5zdXBwb3J0ZWRUeXBlLCB7XG4gICAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICBmaWxlVHlwZTogZmlsZS50eXBlXG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHZhbGlkYXRlICYmICF2YWxpZGF0ZVNpemUodmFsaWRhdGUubWF4U2l6ZSwgZmlsZSAmJiBmaWxlLnNpemUpKSB7XG4gICAgICAgIHNldEVycm9yKHRyYW5zbGF0ZSh0LnVuc3VwcG9ydGVkU2l6ZSwge1xuICAgICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWVcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YWxpZGF0ZWRGaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgfVxuICAgIGxldCBuZXdGaWxlcztcbiAgICBpZiAoIW11bHRpcGxlICYmIHZhbGlkYXRlZEZpbGVzLmxlbmd0aCkge1xuICAgICAgbmV3RmlsZXMgPSBbdmFsaWRhdGVkRmlsZXNbMF1dO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdGaWxlcyA9IFsuLi5maWxlc1RvVXBsb2FkLCAuLi52YWxpZGF0ZWRGaWxlc107XG4gICAgfVxuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2UobmV3RmlsZXMpO1xuICAgIH1cbiAgICBzZXRGaWxlc1RvVXBsb2FkKG5ld0ZpbGVzKTtcbiAgfSwgW29uQ2hhbmdlLCBzZXRGaWxlc1RvVXBsb2FkLCBzZXRJc0RyYWdnaW5nXSk7XG4gIGNvbnN0IGRpc3BsYXlVcGxvYWRMaW1pdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodmFsaWRhdGUgJiYgdmFsaWRhdGUubWF4U2l6ZSkge1xuICAgICAgcmV0dXJuIGluVW5pdCh2YWxpZGF0ZS5tYXhTaXplLCB1cGxvYWRMaW1pdEluKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9LCBbdmFsaWRhdGVdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRHJvcFpvbmUsIF9leHRlbmRzKHtcbiAgICBvbkRyYWdFbnRlcjogb25EcmFnRW50ZXIsXG4gICAgb25EcmFnT3Zlcjogb25EcmFnT3ZlcixcbiAgICBvbkRyYWdMZWF2ZTogb25EcmFnTGVhdmUsXG4gICAgb25Ecm9wOiBvbkRyb3AsXG4gICAgaXNEcmFnZ2luZzogaXNEcmFnZ2luZ1xuICB9LCBvdGhlciwge1xuICAgIHA6IFwieGxcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVXBsb2FkSW5wdXQsIHtcbiAgICB0eXBlOiBcImZpbGVcIixcbiAgICBvbkNoYW5nZTogZXZlbnQgPT4gb25Ecm9wKGV2ZW50KSxcbiAgICBtdWx0aXBsZTogbXVsdGlwbGVcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgY29sb3I6IFwicHJpbWFyeTEwMFwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEltYWdlLCBudWxsKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIHtcbiAgICBmb250U2l6ZTogXCJzbVwiXG4gIH0sIHQucGxhY2Vob2xkZXIpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIG51bGwsIHZhbGlkYXRlICYmIHZhbGlkYXRlLm1heFNpemUgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7XG4gICAgdmFyaWFudDogXCJ4c1wiLFxuICAgIGNvbG9yOiBcImdyZXk2MFwiLFxuICAgIGxpbmVIZWlnaHQ6IFwiZGVmYXVsdFwiLFxuICAgIG10OiBcInNtXCJcbiAgfSwgdHJhbnNsYXRlKHQuYWNjZXB0ZWRTaXplLCB7XG4gICAgbWF4U2l6ZTogZGlzcGxheVVwbG9hZExpbWl0KClcbiAgfSkpIDogJycsIHZhbGlkYXRlICYmIHZhbGlkYXRlLm1pbWVUeXBlcyAmJiB2YWxpZGF0ZS5taW1lVHlwZXMubGVuZ3RoID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwge1xuICAgIHZhcmlhbnQ6IFwieHNcIixcbiAgICBjb2xvcjogXCJncmV5NjBcIixcbiAgICBsaW5lSGVpZ2h0OiBcImRlZmF1bHRcIixcbiAgICBtdDogXCJzbVwiXG4gIH0sIHRyYW5zbGF0ZSh0LmFjY2VwdGVkVHlwZSwge1xuICAgIG1pbWVUeXBlczogdmFsaWRhdGUubWltZVR5cGVzLmpvaW4oJywgJylcbiAgfSkpIDogJycpKSksIGVycm9yICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lc3NhZ2VCb3gsIHtcbiAgICBtdDogXCJkZWZhdWx0XCIsXG4gICAgdmFyaWFudDogXCJkYW5nZXJcIixcbiAgICBzaXplOiBcInNtXCIsXG4gICAgaWNvbjogXCJBbGVydENpcmNsZVwiLFxuICAgIG1lc3NhZ2U6IGVycm9yLFxuICAgIG9uQ2xvc2VDbGljazogKCkgPT4gc2V0RXJyb3IobnVsbClcbiAgfSksIGZpbGVzVG9VcGxvYWQubWFwKChmaWxlLCBpbmRleCkgPT5cbiAgLyojX19QVVJFX18qL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5XG4gIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRHJvcFpvbmVJdGVtLCB7XG4gICAgZmlsZTogZmlsZSxcbiAgICBrZXk6IGluZGV4LFxuICAgIG9uUmVtb3ZlOiAoKSA9PiByZW1vdmVJdGVtKGluZGV4KVxuICB9KSkpO1xufTtcbkRyb3Bab25lLmRpc3BsYXlOYW1lID0gJ0Ryb3Bab25lJztcbmV4cG9ydCB7IERyb3Bab25lIH07XG5leHBvcnQgZGVmYXVsdCBEcm9wWm9uZTsiLCJpbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vLi4vYXRvbXMvYnV0dG9uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gXCIuLi8uLi9hdG9tcy9pbnB1dC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vLi4vYXRvbXMvbGFiZWwvaW5kZXguanNcIjtcbmltcG9ydCB7IExpbmsgfSBmcm9tIFwiLi4vLi4vYXRvbXMvbGluay9pbmRleC5qc1wiO1xuXG4vKipcbiAqIEBjb21wb25lbnRcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IElucHV0R3JvdXAgPSBzdHlsZWQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHdpZHRoOiAxMDAlO1xuICAke0lucHV0fSB7XG4gICAgZmxleC1ncm93OiAxO1xuICB9XG4gICR7SW5wdXR9Om5vdCg6bGFzdC1jaGlsZCkge1xuICAgIGJvcmRlci1yaWdodDogbm9uZTtcbiAgfVxuICAke0xhYmVsfSwgJiA+ICR7QnV0dG9ufSwgJiA+ICR7TGlua306bGFzdC1jaGlsZCB7XG4gICAgcGFkZGluZzogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuc3BhY2Uuc219O1xuICAgIGJvcmRlcjogc29saWQgJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLmlucHV0Qm9yZGVyfTtcbiAgICBib3JkZXItd2lkdGg6IDFweCAxcHggMXB4IDA7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgIG1hcmdpbjogMDtcbiAgICBjb2xvcjogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLmdyZXk0MH07XG4gIH1cblxuICAke0xhYmVsfSwgJHtCdXR0b259LCAke0xpbmt9IHtcbiAgICBmbGV4LXNocmluazogMDtcbiAgICBmbGV4LWdyb3c6IDA7XG4gIH1cblxuICAke0xhYmVsfSwgJHtMaW5rfSB7XG4gICAgbGluZS1oZWlnaHQ6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmxpbmVIZWlnaHRzLmxnfTtcbiAgfVxuXG4gICR7QnV0dG9ufTpmaXJzdC1jaGlsZCwgJHtMaW5rfTpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICB9XG5cbiAgJHtJbnB1dH06aG92ZXIge1xuICAgICYgKyAke0xhYmVsfSwgJiArICR7QnV0dG9ufSwgJiArICR7TGlua30ge1xuICAgICAgYm9yZGVyLWNvbG9yOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMuZ3JleTYwfTtcbiAgICB9XG4gIH0gXG4gICR7SW5wdXR9OmZvY3VzIHtcbiAgICAmICsgJHtMYWJlbH0sICYgKyAke0J1dHRvbn0sICYgKyAke0xpbmt9IHtcbiAgICAgIGJvcmRlci1jb2xvcjogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLnByaW1hcnkxMDB9O1xuICAgIH1cbiAgfVxuYDtcbklucHV0R3JvdXAuZGlzcGxheU5hbWUgPSAnSW5wdXRHcm91cCc7XG5leHBvcnQgZGVmYXVsdCBJbnB1dEdyb3VwOyIsImltcG9ydCB7IHNwYWNlIH0gZnJvbSAnc3R5bGVkLXN5c3RlbSc7XG5pbXBvcnQgeyBzdHlsZWQsIGNzcyB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uLy4uL2F0b21zL2xhYmVsL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vLi4vYXRvbXMvYnV0dG9uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gXCIuLi8uLi9hdG9tcy9pbnB1dC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgQ3VycmVuY3lJbnB1dCB9IGZyb20gXCIuLi8uLi9hdG9tcy9jdXJyZW5jeS1pbnB1dC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgTGluayB9IGZyb20gXCIuLi8uLi9hdG9tcy9saW5rL2luZGV4LmpzXCI7XG5pbXBvcnQgSW5wdXRHcm91cCBmcm9tIFwiLi9pbnB1dC1ncm91cC5qc1wiO1xuY29uc3QgZm9ybUdyb3VwRGlzYWJsZWRDU1MgPSBjc3NgXG4gIGNvbG9yOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMuZ3JleTQwfTtcbmA7XG5jb25zdCBmb3JtR3JvdXBXaXRoRXJyb3JDU1MgPSBjc3NgXG4gIGNvbG9yOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMuZXJyb3J9O1xuICAke0lucHV0fSwgJHtDdXJyZW5jeUlucHV0fSB7XG4gICAgY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5lcnJvcn07XG4gICAgYm9yZGVyLWNvbG9yOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMuZXJyb3J9O1xuICB9XG4gICYmJiAke0xhYmVsfSB7XG4gICAgY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5lcnJvcn07XG4gICAgJjpiZWZvcmUge1xuICAgICAgY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5lcnJvcn07XG4gICAgfVxuICB9XG4gICYmJiAke0xhYmVsfSwgJiYmICR7QnV0dG9ufSwgJiYmICR7TGlua30ge1xuICAgIGJvcmRlci1jb2xvcjogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLmVycm9yfTtcbiAgfVxuYDtcblxuLyoqXG4gKiBQcm9wcyBmb3IgRm9ybUdyb3VwLiBBcGFydCBmcm9tIHByb3BzIGRlZmluZWQgaGVyZSBGb3JtR3JvdXAgc3VwcG9ydHMgYWxzbyBhbGwge0BsaW5rIFNwYWNlUHJvcHN9XG4gKiBAYWxpYXMgRm9ybUdyb3VwUHJvcHNcbiAqIEBtZW1iZXJvZiBGb3JtR3JvdXBcbiAqL1xuXG4vKipcbiAqIEBjbGFzc2Rlc2NcbiAqXG4gKiA8aW1nIHNyYz1cImNvbXBvbmVudHMvZm9ybS1ncm91cC5wbmdcIiAvPlxuICpcbiAqIEZvcm1Hcm91cCBjb21lcyB3aXRoIG90aGVyLCBmcm9tLXJlbGF0ZWQgY29tcG9uZW50cyBsaWtlOiBGb3JtTWVzc2FnZSBhbmQgSW5wdXRHcm91cC5cbiAqIFRvZ2V0aGVyIHRoZXkgYWxsb3cgeW91IHRvIGJ1aWxkIGZvcm0gZWxlbWVudHMuXG4gKlxuICogIyMjIFVzYWdlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtR3JvdXBQcm9wcywgSW5wdXRHcm91cCwgRm9ybU1lc3NhZ2UgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJ1xuICogYGBgXG4gKlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQGNvbXBvbmVudFxuICogQHNlZSBGb3JtR3JvdXBQcm9wc1xuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9zdG9yeWJvb2suYWRtaW5qcy5jby8/cGF0aD0vc3RvcnkvZGVzaWduc3lzdGVtLW1vbGVjdWxlcy1mb3JtZ3JvdXAtLWRlZmF1bHQgU3Rvcnlib29rfVxuICogQHN1YmNhdGVnb3J5IE1vbGVjdWxlc1xuICogQGV4YW1wbGUgPGNhcHRpb24+RXhhbXBsZSAxOiBpbnB1dCB3aXRoIGFsbCBzb3J0cyBvZiBidXR0b25zPC9jYXB0aW9uPlxuICogcmV0dXJuIChcbiAqIDxCb3ggcHk9XCJ4bFwiPlxuICogICA8Rm9ybUdyb3VwPlxuICogICAgIDxMYWJlbCByZXF1aXJlZD5OYW1lPC9MYWJlbD5cbiAqICAgICA8SW5wdXRHcm91cD5cbiAqICAgICAgIDxCdXR0b24gdmFyaWFudD1cImNvbnRhaW5lZFwiIHNpemU9XCJpY29uXCI+XG4gKiAgICAgICAgIDxJY29uIGljb249XCJDaGV2cm9uUmlnaHRcIiAvPlxuICogICAgICAgPC9CdXR0b24+XG4gKiAgICAgICA8SW5wdXQgLz5cbiAqICAgICAgIDxMYWJlbD4xMDAgS008L0xhYmVsPlxuICogICAgICAgPEJ1dHRvbiB2YXJpYW50PVwiY29udGFpbmVkXCIgc2l6ZT1cImljb25cIj5cbiAqICAgICAgICAgPEljb24gaWNvbj1cIkNoZXZyb25SaWdodFwiIC8+XG4gKiAgICAgICA8L0J1dHRvbj5cbiAqICAgICA8L0lucHV0R3JvdXA+XG4gKiAgICAgPEZvcm1NZXNzYWdlPkFuZCB0aGUgb3B0aW9uYWwgbWVzc2FnZTwvRm9ybU1lc3NhZ2U+XG4gKiAgIDwvRm9ybUdyb3VwPlxuICogPC9Cb3g+XG4gKiApXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FeGFtcGxlIDI6IHRoZSBzYW1lIGlucHV0IHdpdGggZXJyb3JzPC9jYXB0aW9uPlxuICogcmV0dXJuIChcbiAqIDxCb3ggcHk9XCJ4bFwiPlxuICogICA8Rm9ybUdyb3VwIGVycm9yPlxuICogICAgIDxMYWJlbCByZXF1aXJlZD5OYW1lPC9MYWJlbD5cbiAqICAgICA8SW5wdXRHcm91cD5cbiAqICAgICAgIDxCdXR0b24gdmFyaWFudD1cImNvbnRhaW5lZFwiIHNpemU9XCJpY29uXCI+XG4gKiAgICAgICAgIDxJY29uIGljb249XCJDaGV2cm9uUmlnaHRcIiAvPlxuICogICAgICAgPC9CdXR0b24+XG4gKiAgICAgICA8SW5wdXQgLz5cbiAqICAgICAgIDxMYWJlbD4xMDAgS008L0xhYmVsPlxuICogICAgICAgPEJ1dHRvbiB2YXJpYW50PVwiY29udGFpbmVkXCIgc2l6ZT1cImljb25cIj5cbiAqICAgICAgICAgPEljb24gaWNvbj1cIkNoZXZyb25SaWdodFwiIC8+XG4gKiAgICAgICA8L0J1dHRvbj5cbiAqICAgICA8L0lucHV0R3JvdXA+XG4gKiAgICAgPEZvcm1NZXNzYWdlPkFuZCB0aGUgb3B0aW9uYWwgbWVzc2FnZTwvRm9ybU1lc3NhZ2U+XG4gKiAgIDwvRm9ybUdyb3VwPlxuICogPC9Cb3g+XG4gKiApXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FeGFtcGxlIDM6IGRpc2FibGVkIGZpZWxkPC9jYXB0aW9uPlxuICogcmV0dXJuIChcbiAqIDxCb3ggcHk9XCJ4bFwiPlxuICogICA8Rm9ybUdyb3VwIGRpc2FibGVkPlxuICogICAgIDxMYWJlbD5EaXNhYmxlZCBmaWVsZDwvTGFiZWw+XG4gKiAgICAgPElucHV0R3JvdXA+XG4gKiAgICAgICA8SW5wdXQgZGlzYWJsZWQgLz5cbiAqICAgICA8L0lucHV0R3JvdXA+XG4gKiAgICAgPEZvcm1NZXNzYWdlIC8+XG4gKiAgIDwvRm9ybUdyb3VwPlxuICogPC9Cb3g+XG4gKiApXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FeGFtcGxlIDQ6IHdpdGggYSBsaW5rPC9jYXB0aW9uPlxuICogcmV0dXJuIChcbiAqIDxCb3ggcHk9XCJ4bFwiPlxuICogICA8Rm9ybUdyb3VwPlxuICogICAgIDxMYWJlbD5Tb21lIGZvcm0gZGF0YSB3aXRoIGJ1dHRvbiBsaW5rPC9MYWJlbD5cbiAqICAgICA8SW5wdXRHcm91cD5cbiAqICAgICAgIDxJbnB1dCAvPlxuICogICAgICAgPExpbmsgaHJlZj1cIiNzb21lSHJlZlwiPlRoaXMgaXMgbGluazwvTGluaz5cbiAqICAgICA8L0lucHV0R3JvdXA+XG4gKiAgICAgPEZvcm1NZXNzYWdlIC8+XG4gKiAgIDwvRm9ybUdyb3VwPlxuICogPC9Cb3g+XG4gKiApXG4gKiBAc2VjdGlvbiBkZXNpZ24tc3lzdGVtXG4gKi9cbmV4cG9ydCBjb25zdCBGb3JtR3JvdXAgPSBzdHlsZWQuZGl2YFxuICB3aWR0aDogMTAwJTtcbiAgJHsoe1xuICBlcnJvclxufSkgPT4gZXJyb3IgPyBmb3JtR3JvdXBXaXRoRXJyb3JDU1MgOiAnJ307XG4gICR7KHtcbiAgZGlzYWJsZWRcbn0pID0+IGRpc2FibGVkID8gZm9ybUdyb3VwRGlzYWJsZWRDU1MgOiAnJ307XG4gICR7c3BhY2V9O1xuXG4gICYgPiAke0lucHV0fSwgJiA+ICR7Q3VycmVuY3lJbnB1dH0ge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgJiAke0lucHV0fSwgJiAke0N1cnJlbmN5SW5wdXR9IHtcbiAgICAkeyh7XG4gIHZhcmlhbnQsXG4gIHRoZW1lXG59KSA9PiB2YXJpYW50ID09PSAnZmlsdGVyJyA/IGBib3JkZXItY29sb3I6ICR7dGhlbWUuY29sb3JzLmlucHV0Qm9yZGVyfWAgOiAnJ307XG4gICAgJHsoe1xuICB2YXJpYW50LFxuICB0aGVtZVxufSkgPT4gdmFyaWFudCA9PT0gJ2ZpbHRlcicgPyBgY29sb3I6ICR7dGhlbWUuY29sb3JzLnRleHR9YCA6ICcnfTtcbiAgfVxuXG4gICYgJHtJbnB1dEdyb3VwfSB7XG4gICAgJHtMYWJlbH0sICR7QnV0dG9ufTpsYXN0LWNoaWxkLCAke0xpbmt9Omxhc3QtY2hpbGQge1xuICAgICAgJHsoe1xuICB2YXJpYW50LFxuICB0aGVtZVxufSkgPT4gdmFyaWFudCA9PT0gJ2ZpbHRlcicgPyBgYm9yZGVyLWNvbG9yOiAke3RoZW1lLmNvbG9ycy5pbnB1dEJvcmRlcn1gIDogJyd9O1xuICAgIH1cbiAgfVxuXG4gICYgW2NsYXNzKj1cIkRhdGVQaWNrZXJcIl0gPiAucmVhY3QtZGF0ZXBpY2tlci13cmFwcGVyIHtcbiAgICAkeyh7XG4gIHZhcmlhbnQsXG4gIHRoZW1lXG59KSA9PiB2YXJpYW50ID09PSAnZmlsdGVyJyA/IGBib3JkZXItY29sb3I6ICR7dGhlbWUuY29sb3JzLmlucHV0Qm9yZGVyfWAgOiAnJ307XG4gIH1cbiAgJiBbY2xhc3MqPVwiRGF0ZVBpY2tlclwiXSA+IC5yZWFjdC1kYXRlcGlja2VyLXdyYXBwZXIgaW5wdXQge1xuICAgICR7KHtcbiAgdmFyaWFudCxcbiAgdGhlbWVcbn0pID0+IHZhcmlhbnQgPT09ICdmaWx0ZXInID8gYGNvbG9yOiAke3RoZW1lLmNvbG9ycy50ZXh0fWAgOiAnJ307XG4gIH1cbmA7XG5Gb3JtR3JvdXAuZGVmYXVsdFByb3BzID0ge1xuICBtYjogJ2xnJ1xufTtcbkZvcm1Hcm91cC5kaXNwbGF5TmFtZSA9ICdGb3JtR3JvdXAnO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUdyb3VwOyIsImltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IFRleHQgfSBmcm9tIFwiLi4vLi4vYXRvbXMvdGV4dC9pbmRleC5qc1wiO1xuXG4vKipcbiAqIEBjb21wb25lbnRcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IEZvcm1NZXNzYWdlID0gc3R5bGVkKFRleHQpYFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBoZWlnaHQ6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnNwYWNlLnhsfTtcbiAgbWFyZ2luOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5zcGFjZS5zbX0gMCAwO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXNpemU6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmZvbnRTaXplcy5zbX07XG5gO1xuRm9ybU1lc3NhZ2UuZGlzcGxheU5hbWUgPSAnRm9ybU1lc3NhZ2UnO1xuZXhwb3J0IGRlZmF1bHQgRm9ybU1lc3NhZ2U7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IElsbHVzdHJhdGlvbiB9IGZyb20gXCIuLi8uLi9hdG9tcy9pbGx1c3RyYXRpb24vaW5kZXguanNcIjtcbmltcG9ydCB7IEJveCB9IGZyb20gXCIuLi8uLi9hdG9tcy9ib3gvaW5kZXguanNcIjtcbmltcG9ydCB7IEg0IH0gZnJvbSBcIi4uLy4uL2F0b21zL3R5cG9ncmFwaHkvaW5kZXguanNcIjtcbmltcG9ydCB7IGNzc0NsYXNzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2Nzcy1jbGFzcy5qc1wiO1xuY29uc3QgU3R5bGVkSW5mb0JveCA9IHN0eWxlZChCb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5gO1xuXG4vKipcbiAqIEBtZW1iZXJvZiBJbmZvQm94XG4gKiBAYWxpYXMgSW5mb0JveFByb3BzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKlxuICogPGltZyBzcmM9XCJjb21wb25lbnRzL2luZm8tYm94LnBuZ1wiIC8+XG4gKlxuICogVXNlZCBmb3IgYWxsIHR5cGUgb2YgaW5mb3JtYXRpb24gbGlrZTpcbiAqXG4gKiA+IHlvdSBkb24ndCBoYXZlIHggLSBwbGVhc2UgYWRkIGZpcnN0IG9uZVwiXG4gKlxuICogaW4gdGhlIHN5c3RlbS5cbiAqXG4gKiAjIyMgVXNhZ2VcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBJbmZvQm94LCBJbmZvQm94UHJvcHMgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJ1xuICogYGBgXG4gKlxuICogQGNvbXBvbmVudFxuICogQHN1YmNhdGVnb3J5IE1vbGVjdWxlc1xuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9zdG9yeWJvb2suYWRtaW5qcy5jby8/cGF0aD0vc3RvcnkvZGVzaWduc3lzdGVtLW1vbGVjdWxlcy1pbmZvYm94LS1kZWZhdWx0IFN0b3J5Ym9va31cbiAqIEBzZWUgSW5mb0JveFByb3BzXG4gKiBAZXhhbXBsZVxuICogcmV0dXJuIChcbiAqIDxJbmZvQm94IHRpdGxlPVwiVGhlcmUgYXJlIG5vIGNhcnMgaW4gdGhlIHN5c3RlbVwiPlxuICogICA8VGV4dD5DdXJyZW50bHkgdGhlcmUgYXJlIG5vIGNhcnMgaW4gdGhlIHN5c3RlbTwvVGV4dD5cbiAqICAgPFRleHQ+VG8gY3JlYXRlIGZpcnN0IGNsaWNrPC9UZXh0PlxuICogICA8QnV0dG9uIG10PVwibGdcIj48SWNvbiBpY29uPVwiUGx1c1wiIC8+Q3JlYXRlPC9CdXR0b24+XG4gKiA8L0luZm9Cb3g+XG4gKiApXG4gKiBAc2VjdGlvbiBkZXNpZ24tc3lzdGVtXG4gKi9cbmNvbnN0IEluZm9Cb3ggPSAoe1xuICBjaGlsZHJlbixcbiAgdGl0bGUsXG4gIGlsbHVzdHJhdGlvbixcbiAgdmFyaWFudCA9ICd0cmFuc3BhcmVudCcsXG4gIHRlc3RJZFxufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkSW5mb0JveCwge1xuICBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCxcbiAgdmFyaWFudDogdmFyaWFudCxcbiAgY2xhc3NOYW1lOiBjc3NDbGFzcygnSW5mb0JveCcpXG59LCBpbGx1c3RyYXRpb24gJiYgdHlwZW9mIGlsbHVzdHJhdGlvbiA9PT0gJ3N0cmluZycgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbGx1c3RyYXRpb24sIHtcbiAgdmFyaWFudDogaWxsdXN0cmF0aW9uXG59KSA6IGlsbHVzdHJhdGlvbiwgdGl0bGUgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSDQsIHtcbiAgbWI6IFwibGdcIlxufSwgdGl0bGUpLCBjaGlsZHJlbik7XG5JbmZvQm94LmRpc3BsYXlOYW1lID0gJ0luZm9Cb3gnO1xuZXhwb3J0IHsgSW5mb0JveCB9O1xuZXhwb3J0IGRlZmF1bHQgSW5mb0JveDsiLCJpbXBvcnQgeyBnZXRWYWx1ZUFuZFVuaXQgfSBmcm9tICdwb2xpc2hlZCc7XG5pbXBvcnQgeyB2YXJpYW50IGFzIHN0eWxlZFZhcmlhbnQgfSBmcm9tICdzdHlsZWQtc3lzdGVtJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IEJveCB9IGZyb20gXCIuLi8uLi9hdG9tcy9ib3gvaW5kZXguanNcIjtcbmltcG9ydCB0aGVtZUdldCBmcm9tIFwiLi4vLi4vdXRpbHMvdGhlbWUtZ2V0LmpzXCI7XG5jb25zdCBERUZBVUxUX1dJRFRIID0gNTQwO1xuY29uc3QgVkFSSUFOVF9CT1JERVJfV0lEVEggPSA4O1xuY29uc3QgdmFyaWFudFN0eWxlID0gKGNvbG9yLCBwcm9wcykgPT4ge1xuICBjb25zdCBuZXdQYWRkaW5nID0gZ2V0VmFsdWVBbmRVbml0KHRoZW1lR2V0KCdzcGFjZScsICd4eGwnKShwcm9wcykpWzBdIC0gVkFSSUFOVF9CT1JERVJfV0lEVEg7XG4gIHJldHVybiB7XG4gICAgYm9yZGVyTGVmdFdpZHRoOiBWQVJJQU5UX0JPUkRFUl9XSURUSCxcbiAgICBib3JkZXJMZWZ0U3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyTGVmdENvbG9yOiBjb2xvcixcbiAgICBwYWRkaW5nTGVmdDogbmV3UGFkZGluZ1xuICB9O1xufTtcbmNvbnN0IHZhcmlhbnRzID0gcHJvcHMgPT4gc3R5bGVkVmFyaWFudCh7XG4gIHByb3A6ICd2YXJpYW50JyxcbiAgdmFyaWFudHM6IHtcbiAgICBwcmltYXJ5OiB2YXJpYW50U3R5bGUoJ3ByaW1hcnkxMDAnLCBwcm9wcyksXG4gICAgZGFuZ2VyOiB2YXJpYW50U3R5bGUoJ2Vycm9yJywgcHJvcHMpLFxuICAgIHN1Y2Nlc3M6IHZhcmlhbnRTdHlsZSgnc3VjY2VzcycsIHByb3BzKSxcbiAgICBpbmZvOiB2YXJpYW50U3R5bGUoJ2luZm8nLCBwcm9wcyksXG4gICAgc2Vjb25kYXJ5OiB2YXJpYW50U3R5bGUoJ2FjY2VudCcsIHByb3BzKSxcbiAgICBsaWdodDogdmFyaWFudFN0eWxlKCdncmV5NjAnLCBwcm9wcyksXG4gICAgZGVmYXVsdDoge31cbiAgfVxufSk7XG5leHBvcnQgY29uc3QgTW9kYWxTdHlsZWQgPSBzdHlsZWQoQm94KWBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAmID4gLmNsb3NlLWJ1dHRvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogJHt0aGVtZUdldCgnc3BhY2UnLCAnbWQnKX07XG4gICAgcmlnaHQ6ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ21kJyl9O1xuICB9XG4gICYgPiAubW9kYWwtbGFiZWwge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgbWFyZ2luLXRvcDogLSR7dGhlbWVHZXQoJ3NwYWNlJywgJ3h4bCcpfTtcbiAgICBwYWRkaW5nLXRvcDogJHt0aGVtZUdldCgnc3BhY2UnLCAnc20nKX07XG4gIH1cbiAgJHtwcm9wcyA9PiB2YXJpYW50cyhwcm9wcyl9O1xuYDtcbk1vZGFsU3R5bGVkLmRlZmF1bHRQcm9wcyA9IHtcbiAgcGw6ICd4eGwnLFxuICBwcjogJ3hsJyxcbiAgcHQ6ICd4MycsXG4gIHBiOiAneHhsJyxcbiAgYmc6ICdmaWx0ZXJCZycsXG4gIGNvbG9yOiAndGV4dCcsXG4gIHdpZHRoOiBbMSwgREVGQVVMVF9XSURUSF1cbn07XG5leHBvcnQgZGVmYXVsdCBNb2RhbFN0eWxlZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb3ggfSBmcm9tIFwiLi4vLi4vYXRvbXMvYm94L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vLi4vYXRvbXMvYnV0dG9uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uLy4uL2F0b21zL2ljb24vaW5kZXguanNcIjtcbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uLy4uL2F0b21zL2xhYmVsL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBUZXh0IH0gZnJvbSBcIi4uLy4uL2F0b21zL3RleHQvaW5kZXguanNcIjtcbmltcG9ydCB7IEg1IH0gZnJvbSBcIi4uLy4uL2F0b21zL3R5cG9ncmFwaHkvaW5kZXguanNcIjtcbmltcG9ydCB7IE1vZGFsU3R5bGVkIH0gZnJvbSBcIi4vbW9kYWwtc3R5bGVkLmpzXCI7XG5cbi8qKlxuICogTW9kYWwgd2hpY2ggY2FuIGJlIHJlbmRlcmVkIGlubGluZSBpbnN0ZWFkIG9mIGEgXCJtb2RhbFwiXG4gKlxuICogQG1lbWJlcm9mIE1vZGFsXG4gKiBAY29tcG9uZW50XG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICogQHNlY3Rpb24gZGVzaWduLXN5c3RlbVxuICovXG5leHBvcnQgY29uc3QgTW9kYWxJbmxpbmUgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICB0aXRsZSxcbiAgICBzdWJUaXRsZSxcbiAgICB2YXJpYW50LFxuICAgIG9uQ2xvc2UsXG4gICAgY2hpbGRyZW4sXG4gICAgYnV0dG9ucyxcbiAgICBsYWJlbCxcbiAgICBpY29uLFxuICAgIC4uLmJveFByb3BzXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1vZGFsU3R5bGVkLCBfZXh0ZW5kcyh7XG4gICAgdmFyaWFudDogdmFyaWFudFxuICB9LCBib3hQcm9wcyksIGxhYmVsICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExhYmVsLCB7XG4gICAgc2l6ZTogXCJsZ1wiLFxuICAgIHZhcmlhbnQ6IHZhcmlhbnQsXG4gICAgY2xhc3NOYW1lOiBcIm1vZGFsLWxhYmVsXCJcbiAgfSwgaWNvbiAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgaWNvbjogaWNvblxuICB9KSwgbGFiZWwpLCB0aXRsZSAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChINSwgbnVsbCwgdGl0bGUpLCBvbkNsb3NlICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJ1dHRvbiwge1xuICAgIGNsYXNzTmFtZTogXCJjbG9zZS1idXR0b25cIixcbiAgICBzaXplOiBcImljb25cIixcbiAgICB2YXJpYW50OiBcInRleHRcIixcbiAgICBvbkNsaWNrOiBvbkNsb3NlLFxuICAgIHJvdW5kZWQ6IHRydWVcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIGljb246IFwiWFwiXG4gIH0pKSwgc3ViVGl0bGUgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwgbnVsbCwgc3ViVGl0bGUpLCBjaGlsZHJlbiwgYnV0dG9ucyAmJiBidXR0b25zLmxlbmd0aCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBmbGV4OiB0cnVlLFxuICAgIGZsZXhEaXJlY3Rpb246IFwicm93XCIsXG4gICAganVzdGlmeUNvbnRlbnQ6IFwiZmxleC1lbmRcIixcbiAgICBtdDogXCJ4bFwiXG4gIH0sIGJ1dHRvbnMubWFwKChidXR0b25Qcm9wcywga2V5KSA9PlxuICAvKiNfX1BVUkVfXyovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXlcbiAgUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b24sIF9leHRlbmRzKHtcbiAgICBrZXk6IGtleSxcbiAgICBtcjogXCJtZFwiLFxuICAgIG10OiBcInNtXCJcbiAgfSwgYnV0dG9uUHJvcHMpKSkpKTtcbn07XG5Nb2RhbElubGluZS5kaXNwbGF5TmFtZSA9ICdNb2RhbElubGluZSc7XG5leHBvcnQgZGVmYXVsdCBNb2RhbElubGluZTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuaW1wb3J0IHsgTW9kYWxJbmxpbmUgfSBmcm9tIFwiLi9tb2RhbC1pbmxpbmUuanNcIjtcbmltcG9ydCB7IE1vZGFsU3R5bGVkIH0gZnJvbSBcIi4vbW9kYWwtc3R5bGVkLmpzXCI7XG5pbXBvcnQgeyBCb3ggfSBmcm9tIFwiLi4vLi4vYXRvbXMvYm94L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBPdmVybGF5IH0gZnJvbSBcIi4uLy4uL2F0b21zL292ZXJsYXkvaW5kZXguanNcIjtcbmNvbnN0IFdyYXBwZXIgPSBzdHlsZWQoQm94KWBcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgcmlnaHQ6IDA7XG5cbiAgJiA+ICR7TW9kYWxTdHlsZWR9IHtcbiAgICB6LWluZGV4OiAxMDAxO1xuICB9XG5gO1xuZXhwb3J0IGNvbnN0IE1vZGFsV3JhcHBlciA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIG9uT3ZlcmxheUNsaWNrLFxuICAgIC4uLm90aGVyUHJvcHNcbiAgfSA9IHByb3BzO1xuICBjb25zdCBoYW5kbGVPdmVybGF5Q2xpY2sgPSBvbk92ZXJsYXlDbGljayB8fCAoKCkgPT4gdHJ1ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVyLCB7XG4gICAgZmxleDogdHJ1ZSxcbiAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE92ZXJsYXksIHtcbiAgICBvbkNsaWNrOiBoYW5kbGVPdmVybGF5Q2xpY2tcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1vZGFsSW5saW5lLCBvdGhlclByb3BzKSk7XG59O1xuTW9kYWxXcmFwcGVyLmRpc3BsYXlOYW1lID0gJ01vZGFsV3JhcHBlcic7XG5leHBvcnQgZGVmYXVsdCBNb2RhbFdyYXBwZXI7IiwiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQb3J0YWxVdGlscyBmcm9tIFwiLi4vLi4vdXRpbHMvcG9ydGFsLXV0aWxzLmpzXCI7XG5pbXBvcnQgTW9kYWxXcmFwcGVyIGZyb20gXCIuL21vZGFsLXdyYXBwZXIuanNcIjtcbmNvbnN0IE1vZGFsUG9ydGFsID0gUG9ydGFsVXRpbHMuY3JlYXRlUG9ydGFsRm9yS2V5KCdNT0RBTCcsIE1vZGFsV3JhcHBlcik7XG5cbi8qKlxuICogQGxvYWQgLi9tb2RhbC5kb2MubWRcbiAqIEBjb21wb25lbnRcbiAqIEBzdWJjYXRlZ29yeSBNb2xlY3VsZXNcbiAqIEBzZWN0aW9uIGRlc2lnbi1zeXN0ZW1cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBuZXcgSW4gdmVyc2lvbiAzLjNcbiAqL1xuZXhwb3J0IGNvbnN0IE1vZGFsID0gcHJvcHMgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTW9kYWxQb3J0YWwsIHByb3BzKTtcbk1vZGFsLmRpc3BsYXlOYW1lID0gJ01vZGFsJztcbmV4cG9ydCBkZWZhdWx0IE1vZGFsOyIsImltcG9ydCB7IHJnYmEgfSBmcm9tICdwb2xpc2hlZCc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgeyBCb3ggfSBmcm9tIFwiLi4vLi4vYXRvbXMvYm94L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gXCIuLi8uLi9hdG9tcy90eXBvZ3JhcGh5L2luZGV4LmpzXCI7XG5pbXBvcnQgeyB0aGVtZUdldCB9IGZyb20gXCIuLi8uLi91dGlscy9pbmRleC5qc1wiO1xuZXhwb3J0IGNvbnN0IFN0eWxlZE5hdmlnYXRpb25FbGVtZW50ID0gc3R5bGVkKEJveClgXG4gIHBhZGRpbmc6ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ21kJywgJy0xcHgnKX0gJHt0aGVtZUdldCgnc3BhY2UnLCAnbGcnKX07XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy50ZXh0fTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICB0cmFuc2l0aW9uOiBhbGwgMC4xcyBlYXNlLWluO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAmID4gKiB7XG4gICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICB9XG5cbiAgJiA+IC5pY29uLWJveCwgJiA+IC5hcnJvdy1ib3gge1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIGNvbG9yOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMuZ3JleTYwfTtcbiAgfVxuXG4gICYgPiAuaWNvbi1ib3gge1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ2xnJyl9O1xuICB9XG5cbiAgJiA+ICR7VGl0bGV9IHtcbiAgICBmbGV4LWdyb3c6IDE7XG4gICAgbWluLXdpZHRoOiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgJHsoe1xuICBpc1NlbGVjdGVkXG59KSA9PiBpc1NlbGVjdGVkICYmIHtcbiAgZm9udFdlaWdodDogNTAwXG59fVxuICB9XG4gXG4gICR7KHtcbiAgdGhlbWUsXG4gIGlzU2VsZWN0ZWRcbn0pID0+IGlzU2VsZWN0ZWQgJiYge1xuICBiYWNrZ3JvdW5kQ29sb3I6IHJnYmEodGhlbWUuY29sb3JzLnByaW1hcnkxMDAsIDAuMiksXG4gIGNvbG9yOiB0aGVtZS5jb2xvcnMucHJpbWFyeTEwMCxcbiAgJyYgPiAuaWNvbi1ib3gnOiB7XG4gICAgY29sb3I6ICdpbmhlcml0J1xuICB9XG59fVxuXG4gICR7KHtcbiAgdGhlbWUsXG4gIGlzU2VsZWN0ZWRcbn0pID0+ICFpc1NlbGVjdGVkICYmIHtcbiAgJyY6aG92ZXInOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiByZ2JhKHRoZW1lLmNvbG9ycy50ZXh0LCAwLjIpXG4gIH1cbn19O1xuXG4gIFxuYDsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94IH0gZnJvbSBcIi4uLy4uL2F0b21zL2JveC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi8uLi9hdG9tcy9pY29uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gXCIuLi8uLi9hdG9tcy90eXBvZ3JhcGh5L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTdHlsZWROYXZpZ2F0aW9uRWxlbWVudCB9IGZyb20gXCIuL25hdmlnYXRpb24tZWxlbWVudC1zdHlsZWQuanNcIjtcblxuLy8gVGhlIGxvbmdlc3QgcGFydCBvZiB0aGUgbGFiZWwgd2hpY2ggbWFrZXMgaXQgbm8td3JhcDogZWxsaXBzaXNcbi8vIGV4YW1wbGU6IGBNb25nb29zZVdpdGhMb25nTmFtZUFuZCB3aXRoIHNwYWNlYCBzaG91bGQgYmUgdHJ1bmNhdGVkIGJlY2F1c2UgMTUgbGluZXMgZG9lc24ndCBmaXRcbi8vIHRoZSB3aWR0aCBvZiB0aGUgbmF2YmFyLiBCdXQgXCJQb3N0Z3JlcyB3aXRoIGxvbmcgbmFtZSBhbmQgc3BhY2VzXCIgc2hvdWxkbid0IGJlIHRydW5jYXRlZCBiZWNhdXNlXG4vLyBpdHMgXCJwYXJ0c1wiIGRvZXNuJ3QgZXhjZWVkIDE1IGNoYXJzIGVhY2guXG5jb25zdCBQQVJUX0xFTkdUSF9UT19FTExJUFNJUyA9IDE1O1xuXG4vKipcbiAqIEBsb2FkIC4vbmF2aWdhdGlvbi1lbGVtZW50LmRvYy5tZFxuICogQGNvbXBvbmVudFxuICogQHN1YmNhdGVnb3J5IE1vbGVjdWxlc1xuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHNlZSBOYXZpZ2F0aW9uRWxlbWVudFByb3BzXG4gKiBAc2VlIHtAbGluayBodHRwczovL3N0b3J5Ym9vay5hZG1pbmpzLmNvLz9wYXRoPS9zdG9yeS9kZXNpZ25zeXN0ZW0tbW9sZWN1bGVzLW5hdmlnYXRpb24tZWxlbWVudC0tZGVmYXVsdCBTdG9yeWJvb2t9XG4gKiBAc2VjdGlvbiBkZXNpZ24tc3lzdGVtXG4gKiBAbmV3IEluIHZlcnNpb24gMy4zXG4gKi9cbmV4cG9ydCBjb25zdCBOYXZpZ2F0aW9uRWxlbWVudCA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIGlzT3BlbixcbiAgICBpY29uLFxuICAgIG9uQ2xpY2ssXG4gICAgbGFiZWwsXG4gICAgaXNTZWxlY3RlZCxcbiAgICBocmVmXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZXhwYW5kYWJsZSA9IHR5cGVvZiBpc09wZW4gIT09ICd1bmRlZmluZWQnO1xuICBjb25zdCBjaGV2cm9uID0gaXNPcGVuID8gJ0NoZXZyb25VcCcgOiAnQ2hldnJvbkRvd24nO1xuICBjb25zdCBoYXNMb25nTmFtZSA9IGxhYmVsLnNwbGl0KCcgJykucmVkdWNlKChtZW1vLCBwYXJ0KSA9PiBtZW1vLmxlbmd0aCA+IHBhcnQubGVuZ3RoID8gbWVtbyA6IHBhcnQsICcnKS5sZW5ndGggPiBQQVJUX0xFTkdUSF9UT19FTExJUFNJUztcbiAgY29uc3QgaGFuZGxlTmF2aWdhdGlvbkNsaWNrID0gZXZlbnQgPT4gb25DbGljayA/IG9uQ2xpY2soZXZlbnQsIHByb3BzKSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZE5hdmlnYXRpb25FbGVtZW50LCB7XG4gICAgZmxleDogdHJ1ZSxcbiAgICBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLFxuICAgIGFzOiBcImFcIixcbiAgICBpc1NlbGVjdGVkOiBpc1NlbGVjdGVkLFxuICAgIGlzT3BlbjogaXNPcGVuLFxuICAgIGhyZWY6IGhyZWYsXG4gICAgb25DbGljazogaGFuZGxlTmF2aWdhdGlvbkNsaWNrXG4gIH0sIGljb24gJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgY2xhc3NOYW1lOiBcImljb24tYm94XCIsXG4gICAgYXM6IFwic3BhblwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHtcbiAgICBpY29uOiBpY29uXG4gIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGl0bGUsIHtcbiAgICBzdHlsZToge1xuICAgICAgd2hpdGVTcGFjZTogaGFzTG9uZ05hbWUgPyAnbm93cmFwJyA6ICdub3JtYWwnXG4gICAgfVxuICB9LCBsYWJlbCksIGV4cGFuZGFibGUgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgY2xhc3NOYW1lOiBcImFycm93LWJveFwiLFxuICAgIGFzOiBcInNwYW5cIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgaWNvbjogY2hldnJvblxuICB9KSkpO1xufTtcbk5hdmlnYXRpb25FbGVtZW50LmRpc3BsYXlOYW1lID0gJ05hdmlnYXRpb25FbGVtZW50JztcbmV4cG9ydCBkZWZhdWx0IE5hdmlnYXRpb25FbGVtZW50OyIsIlwidXNlIHN0cmljdFwiO1xuZnVuY3Rpb24gcGFnaW5hdGUodG90YWxJdGVtcywgY3VycmVudFBhZ2UsIHBhZ2VTaXplLCBtYXhQYWdlcykge1xuICAgIGlmIChjdXJyZW50UGFnZSA9PT0gdm9pZCAwKSB7IGN1cnJlbnRQYWdlID0gMTsgfVxuICAgIGlmIChwYWdlU2l6ZSA9PT0gdm9pZCAwKSB7IHBhZ2VTaXplID0gMTA7IH1cbiAgICBpZiAobWF4UGFnZXMgPT09IHZvaWQgMCkgeyBtYXhQYWdlcyA9IDEwOyB9XG4gICAgLy8gY2FsY3VsYXRlIHRvdGFsIHBhZ2VzXG4gICAgdmFyIHRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodG90YWxJdGVtcyAvIHBhZ2VTaXplKTtcbiAgICAvLyBlbnN1cmUgY3VycmVudCBwYWdlIGlzbid0IG91dCBvZiByYW5nZVxuICAgIGlmIChjdXJyZW50UGFnZSA8IDEpIHtcbiAgICAgICAgY3VycmVudFBhZ2UgPSAxO1xuICAgIH1cbiAgICBlbHNlIGlmIChjdXJyZW50UGFnZSA+IHRvdGFsUGFnZXMpIHtcbiAgICAgICAgY3VycmVudFBhZ2UgPSB0b3RhbFBhZ2VzO1xuICAgIH1cbiAgICB2YXIgc3RhcnRQYWdlLCBlbmRQYWdlO1xuICAgIGlmICh0b3RhbFBhZ2VzIDw9IG1heFBhZ2VzKSB7XG4gICAgICAgIC8vIHRvdGFsIHBhZ2VzIGxlc3MgdGhhbiBtYXggc28gc2hvdyBhbGwgcGFnZXNcbiAgICAgICAgc3RhcnRQYWdlID0gMTtcbiAgICAgICAgZW5kUGFnZSA9IHRvdGFsUGFnZXM7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyB0b3RhbCBwYWdlcyBtb3JlIHRoYW4gbWF4IHNvIGNhbGN1bGF0ZSBzdGFydCBhbmQgZW5kIHBhZ2VzXG4gICAgICAgIHZhciBtYXhQYWdlc0JlZm9yZUN1cnJlbnRQYWdlID0gTWF0aC5mbG9vcihtYXhQYWdlcyAvIDIpO1xuICAgICAgICB2YXIgbWF4UGFnZXNBZnRlckN1cnJlbnRQYWdlID0gTWF0aC5jZWlsKG1heFBhZ2VzIC8gMikgLSAxO1xuICAgICAgICBpZiAoY3VycmVudFBhZ2UgPD0gbWF4UGFnZXNCZWZvcmVDdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgLy8gY3VycmVudCBwYWdlIG5lYXIgdGhlIHN0YXJ0XG4gICAgICAgICAgICBzdGFydFBhZ2UgPSAxO1xuICAgICAgICAgICAgZW5kUGFnZSA9IG1heFBhZ2VzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGN1cnJlbnRQYWdlICsgbWF4UGFnZXNBZnRlckN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXMpIHtcbiAgICAgICAgICAgIC8vIGN1cnJlbnQgcGFnZSBuZWFyIHRoZSBlbmRcbiAgICAgICAgICAgIHN0YXJ0UGFnZSA9IHRvdGFsUGFnZXMgLSBtYXhQYWdlcyArIDE7XG4gICAgICAgICAgICBlbmRQYWdlID0gdG90YWxQYWdlcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGN1cnJlbnQgcGFnZSBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZVxuICAgICAgICAgICAgc3RhcnRQYWdlID0gY3VycmVudFBhZ2UgLSBtYXhQYWdlc0JlZm9yZUN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgZW5kUGFnZSA9IGN1cnJlbnRQYWdlICsgbWF4UGFnZXNBZnRlckN1cnJlbnRQYWdlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGNhbGN1bGF0ZSBzdGFydCBhbmQgZW5kIGl0ZW0gaW5kZXhlc1xuICAgIHZhciBzdGFydEluZGV4ID0gKGN1cnJlbnRQYWdlIC0gMSkgKiBwYWdlU2l6ZTtcbiAgICB2YXIgZW5kSW5kZXggPSBNYXRoLm1pbihzdGFydEluZGV4ICsgcGFnZVNpemUgLSAxLCB0b3RhbEl0ZW1zIC0gMSk7XG4gICAgLy8gY3JlYXRlIGFuIGFycmF5IG9mIHBhZ2VzIHRvIG5nLXJlcGVhdCBpbiB0aGUgcGFnZXIgY29udHJvbFxuICAgIHZhciBwYWdlcyA9IEFycmF5LmZyb20oQXJyYXkoKGVuZFBhZ2UgKyAxKSAtIHN0YXJ0UGFnZSkua2V5cygpKS5tYXAoZnVuY3Rpb24gKGkpIHsgcmV0dXJuIHN0YXJ0UGFnZSArIGk7IH0pO1xuICAgIC8vIHJldHVybiBvYmplY3Qgd2l0aCBhbGwgcGFnZXIgcHJvcGVydGllcyByZXF1aXJlZCBieSB0aGUgdmlld1xuICAgIHJldHVybiB7XG4gICAgICAgIHRvdGFsSXRlbXM6IHRvdGFsSXRlbXMsXG4gICAgICAgIGN1cnJlbnRQYWdlOiBjdXJyZW50UGFnZSxcbiAgICAgICAgcGFnZVNpemU6IHBhZ2VTaXplLFxuICAgICAgICB0b3RhbFBhZ2VzOiB0b3RhbFBhZ2VzLFxuICAgICAgICBzdGFydFBhZ2U6IHN0YXJ0UGFnZSxcbiAgICAgICAgZW5kUGFnZTogZW5kUGFnZSxcbiAgICAgICAgc3RhcnRJbmRleDogc3RhcnRJbmRleCxcbiAgICAgICAgZW5kSW5kZXg6IGVuZEluZGV4LFxuICAgICAgICBwYWdlczogcGFnZXNcbiAgICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBwYWdpbmF0ZTtcbiIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuaW1wb3J0IEpXUGFnaW5hdGUgZnJvbSAnanctcGFnaW5hdGUnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IEJveCB9IGZyb20gXCIuLi8uLi9hdG9tcy9ib3gvaW5kZXguanNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi8uLi9hdG9tcy9idXR0b24vaW5kZXguanNcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vLi4vYXRvbXMvaWNvbi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgY3NzQ2xhc3MgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY3NzLWNsYXNzLmpzXCI7XG5jb25zdCBNSU5fUEFHRVNfRk9SX0ZJUlNUX1BBR0VfQlVUVE9OID0gMztcbmNvbnN0IEZJUlNUX1BBR0UgPSAxO1xuXG4vKipcbiAqIEBhbGlhcyBQYWdpbmF0aW9uUHJvcHNcbiAqIEBtZW1iZXJvZiBQYWdpbmF0aW9uXG4gKi9cblxuY29uc3QgUGFnaW5hdGlvbkJ1dHRvbiA9IHByb3BzID0+ICh7XG4gIHNpemU6ICdpY29uJyxcbiAgdmFyaWFudDogcHJvcHMudmFyaWFudCB8fCAndGV4dCdcbn0pO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLWlnbm9yZVxuY29uc3QgUGFnaW5hdGlvbkxpbmsgPSBzdHlsZWQoQnV0dG9uKS5hdHRycyhQYWdpbmF0aW9uQnV0dG9uKWBcbiAgbWluLXdpZHRoOiAyOHB4O1xuICBoZWlnaHQ6IDI4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxMnB4O1xuICBwYWRkaW5nOiAzcHggNnB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5gO1xuUGFnaW5hdGlvbkxpbmsuZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6IGNzc0NsYXNzKCdQYWdpbmF0aW9uTGluaycpXG59O1xuY29uc3QgUGFnaW5hdGlvbldyYXBwZXIgPSBzdHlsZWQoQm94KWBcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAycHg7XG4gXG4gIGJvcmRlcjogMXB4IHNvbGlkICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5ib3JkZXJ9O1xuICAmID4gOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cbiAgJiA+IDpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLmJvcmRlcn07XG4gIH1cbiAgJiA+IDpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5ib3JkZXJ9O1xuICB9XG5gO1xuXG4vKipcbiAqIEBjbGFzc2Rlc2NcbiAqXG4gKiA8aW1nIHNyYz1cImNvbXBvbmVudHMvcGFnaW5hdGlvbi5wbmdcIiAvPlxuICpcbiAqIFBhZ2luYXRpb24gY29tcG9uZW50XG4gKlxuICogIyMjIFVzYWdlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgUGFnaW5hdGlvbiwgUGFnaW5hdGlvblByb3BzIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSdcbiAqIGBgYFxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBzdWJjYXRlZ29yeSBNb2xlY3VsZXNcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBzZWUgUGFnaW5hdGlvblByb3BzXG4gKiBAc2VlIHtAbGluayBodHRwczovL3N0b3J5Ym9vay5hZG1pbmpzLmNvLz9wYXRoPS9zdG9yeS9kZXNpZ25zeXN0ZW0tbW9sZWN1bGVzLXBhZ2luYXRpb24tLWRlZmF1bHQgU3Rvcnlib29rfVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGxvY2F0aW9uID0geyBzZWFyY2g6ICcnfVxuICogcmV0dXJuIChcbiAqICAgPFRleHQgcHk9XCJ4bFwiIHRleHRBbGlnbj1cImNlbnRlclwiPlxuICogICAgIDxQYWdpbmF0aW9uXG4gKiAgICAgIHRvdGFsPXsxMDB9XG4gKiAgICAgIHBhZ2U9ezR9XG4gKiAgICAgIHBlclBhZ2U9ezEwfVxuICogICAgICBsb2NhdGlvbj17bG9jYXRpb259XG4gKiAgICAgIG9uQ2hhbmdlPXsoaXRlbSkgPT4gYWxlcnQoYGNsaWNrZWQgJHtpdGVtfWApfVxuICogICAvPlxuICogICA8L1RleHQ+XG4gKiApXG4gKiBAc2VjdGlvbiBkZXNpZ24tc3lzdGVtXG4gKi9cbmNvbnN0IFBhZ2luYXRpb24gPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICB0b3RhbCxcbiAgICBwYWdlLFxuICAgIHBlclBhZ2UsXG4gICAgb25DaGFuZ2UsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGN1cnJlbnRQYWdlID0gcGFnZSB8fCBGSVJTVF9QQUdFO1xuICBjb25zdCBwYWdpbmF0ZSA9IEpXUGFnaW5hdGUodG90YWwsIGN1cnJlbnRQYWdlLCBwZXJQYWdlKTtcbiAgY29uc3QgaXNGaXJzdFBhZ2UgPSBjdXJyZW50UGFnZSA9PT0gcGFnaW5hdGUuc3RhcnRQYWdlO1xuICBjb25zdCBpc0xhc3RQYWdlID0gY3VycmVudFBhZ2UgPT09IHBhZ2luYXRlLmVuZFBhZ2U7XG4gIGNvbnN0IHByZXZQYWdlID0gaXNGaXJzdFBhZ2UgPyBjdXJyZW50UGFnZSA6IGN1cnJlbnRQYWdlIC0gMTtcbiAgY29uc3QgbmV4dFBhZ2UgPSBpc0xhc3RQYWdlID8gY3VycmVudFBhZ2UgOiBjdXJyZW50UGFnZSArIDE7XG4gIGlmIChwYWdpbmF0ZS50b3RhbFBhZ2VzID09PSBGSVJTVF9QQUdFIHx8IHRvdGFsID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBhZ2luYXRpb25XcmFwcGVyLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjc3NDbGFzcygnUGFnaW5hdGlvbicpXG4gIH0sIHJlc3QpLCB0b3RhbCA+PSBNSU5fUEFHRVNfRk9SX0ZJUlNUX1BBR0VfQlVUVE9OID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFnaW5hdGlvbkxpbmssIHtcbiAgICBcImRhdGEtdGVzdGlkXCI6IFwiZmlyc3RcIixcbiAgICB2YXJpYW50OiBcInRleHRcIixcbiAgICBvbkNsaWNrOiAoKSA9PiAhaXNGaXJzdFBhZ2UgPyBvbkNoYW5nZShGSVJTVF9QQUdFKSA6IHVuZGVmaW5lZFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgaWNvbjogXCJTa2lwQmFja1wiXG4gIH0pKSA6IG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBhZ2luYXRpb25MaW5rLCB7XG4gICAgXCJkYXRhLXRlc3RpZFwiOiBcInByZXZpb3VzXCIsXG4gICAgdmFyaWFudDogXCJ0ZXh0XCIsXG4gICAgb25DbGljazogKCkgPT4gIWlzRmlyc3RQYWdlID8gb25DaGFuZ2UocHJldlBhZ2UpIDogdW5kZWZpbmVkXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHtcbiAgICBpY29uOiBcIkNoZXZyb25MZWZ0XCJcbiAgfSkpLCBwYWdpbmF0ZS5wYWdlcy5tYXAocCA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQYWdpbmF0aW9uTGluaywge1xuICAgIGtleTogcCxcbiAgICBvbkNsaWNrOiAoKSA9PiBvbkNoYW5nZShwKSxcbiAgICB2YXJpYW50OiBwID09PSBjdXJyZW50UGFnZSA/ICdjb250YWluZWQnIDogJ3RleHQnLFxuICAgIGNsYXNzTmFtZTogY3NzQ2xhc3MoJ1BhZ2luYXRpb25MaW5rJywgcCA9PT0gY3VycmVudFBhZ2UgPyAnY3VycmVudCcgOiAnJyksXG4gICAgXCJkYXRhLXRlc3RpZFwiOiBgcGFnZS0ke3B9YFxuICB9LCBwKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBhZ2luYXRpb25MaW5rLCB7XG4gICAgXCJkYXRhLXRlc3RpZFwiOiBcIm5leHRcIixcbiAgICB2YXJpYW50OiBcInRleHRcIixcbiAgICBvbkNsaWNrOiAoKSA9PiAhaXNMYXN0UGFnZSA/IG9uQ2hhbmdlKG5leHRQYWdlKSA6IHVuZGVmaW5lZFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgaWNvbjogXCJDaGV2cm9uUmlnaHRcIlxuICB9KSksIHRvdGFsID49IE1JTl9QQUdFU19GT1JfRklSU1RfUEFHRV9CVVRUT04gPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQYWdpbmF0aW9uTGluaywge1xuICAgIFwiZGF0YS10ZXN0aWRcIjogXCJsYXN0XCIsXG4gICAgdmFyaWFudDogXCJ0ZXh0XCIsXG4gICAgb25DbGljazogKCkgPT4gIWlzTGFzdFBhZ2UgPyBvbkNoYW5nZShwYWdpbmF0ZS50b3RhbFBhZ2VzKSA6IHVuZGVmaW5lZFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgaWNvbjogXCJTa2lwRm9yd2FyZFwiXG4gIH0pKSA6IG51bGwpO1xufTtcblBhZ2luYXRpb24uZGlzcGxheU5hbWUgPSAnUGFnaW5hdGlvbic7XG5leHBvcnQgeyBQYWdpbmF0aW9uIH07XG5leHBvcnQgZGVmYXVsdCBQYWdpbmF0aW9uOyIsIi8vIDo6LSBQZXJzaXN0ZW50IGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudGluZyBhbiBvcmRlcmVkIG1hcHBpbmcgZnJvbVxuLy8gc3RyaW5ncyB0byB2YWx1ZXMsIHdpdGggc29tZSBjb252ZW5pZW50IHVwZGF0ZSBtZXRob2RzLlxuZnVuY3Rpb24gT3JkZXJlZE1hcChjb250ZW50KSB7XG4gIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG59XG5cbk9yZGVyZWRNYXAucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogT3JkZXJlZE1hcCxcblxuICBmaW5kOiBmdW5jdGlvbihrZXkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29udGVudC5sZW5ndGg7IGkgKz0gMilcbiAgICAgIGlmICh0aGlzLmNvbnRlbnRbaV0gPT09IGtleSkgcmV0dXJuIGlcbiAgICByZXR1cm4gLTFcbiAgfSxcblxuICAvLyA6OiAoc3RyaW5nKSDihpIgP2FueVxuICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWUgc3RvcmVkIHVuZGVyIGBrZXlgLCBvciByZXR1cm4gdW5kZWZpbmVkIHdoZW5cbiAgLy8gbm8gc3VjaCBrZXkgZXhpc3RzLlxuICBnZXQ6IGZ1bmN0aW9uKGtleSkge1xuICAgIHZhciBmb3VuZCA9IHRoaXMuZmluZChrZXkpO1xuICAgIHJldHVybiBmb3VuZCA9PSAtMSA/IHVuZGVmaW5lZCA6IHRoaXMuY29udGVudFtmb3VuZCArIDFdXG4gIH0sXG5cbiAgLy8gOjogKHN0cmluZywgYW55LCA/c3RyaW5nKSDihpIgT3JkZXJlZE1hcFxuICAvLyBDcmVhdGUgYSBuZXcgbWFwIGJ5IHJlcGxhY2luZyB0aGUgdmFsdWUgb2YgYGtleWAgd2l0aCBhIG5ld1xuICAvLyB2YWx1ZSwgb3IgYWRkaW5nIGEgYmluZGluZyB0byB0aGUgZW5kIG9mIHRoZSBtYXAuIElmIGBuZXdLZXlgIGlzXG4gIC8vIGdpdmVuLCB0aGUga2V5IG9mIHRoZSBiaW5kaW5nIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGF0IGtleS5cbiAgdXBkYXRlOiBmdW5jdGlvbihrZXksIHZhbHVlLCBuZXdLZXkpIHtcbiAgICB2YXIgc2VsZiA9IG5ld0tleSAmJiBuZXdLZXkgIT0ga2V5ID8gdGhpcy5yZW1vdmUobmV3S2V5KSA6IHRoaXM7XG4gICAgdmFyIGZvdW5kID0gc2VsZi5maW5kKGtleSksIGNvbnRlbnQgPSBzZWxmLmNvbnRlbnQuc2xpY2UoKTtcbiAgICBpZiAoZm91bmQgPT0gLTEpIHtcbiAgICAgIGNvbnRlbnQucHVzaChuZXdLZXkgfHwga2V5LCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnRbZm91bmQgKyAxXSA9IHZhbHVlO1xuICAgICAgaWYgKG5ld0tleSkgY29udGVudFtmb3VuZF0gPSBuZXdLZXk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgT3JkZXJlZE1hcChjb250ZW50KVxuICB9LFxuXG4gIC8vIDo6IChzdHJpbmcpIOKGkiBPcmRlcmVkTWFwXG4gIC8vIFJldHVybiBhIG1hcCB3aXRoIHRoZSBnaXZlbiBrZXkgcmVtb3ZlZCwgaWYgaXQgZXhpc3RlZC5cbiAgcmVtb3ZlOiBmdW5jdGlvbihrZXkpIHtcbiAgICB2YXIgZm91bmQgPSB0aGlzLmZpbmQoa2V5KTtcbiAgICBpZiAoZm91bmQgPT0gLTEpIHJldHVybiB0aGlzXG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQuc2xpY2UoKTtcbiAgICBjb250ZW50LnNwbGljZShmb3VuZCwgMik7XG4gICAgcmV0dXJuIG5ldyBPcmRlcmVkTWFwKGNvbnRlbnQpXG4gIH0sXG5cbiAgLy8gOjogKHN0cmluZywgYW55KSDihpIgT3JkZXJlZE1hcFxuICAvLyBBZGQgYSBuZXcga2V5IHRvIHRoZSBzdGFydCBvZiB0aGUgbWFwLlxuICBhZGRUb1N0YXJ0OiBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIG5ldyBPcmRlcmVkTWFwKFtrZXksIHZhbHVlXS5jb25jYXQodGhpcy5yZW1vdmUoa2V5KS5jb250ZW50KSlcbiAgfSxcblxuICAvLyA6OiAoc3RyaW5nLCBhbnkpIOKGkiBPcmRlcmVkTWFwXG4gIC8vIEFkZCBhIG5ldyBrZXkgdG8gdGhlIGVuZCBvZiB0aGUgbWFwLlxuICBhZGRUb0VuZDogZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgIHZhciBjb250ZW50ID0gdGhpcy5yZW1vdmUoa2V5KS5jb250ZW50LnNsaWNlKCk7XG4gICAgY29udGVudC5wdXNoKGtleSwgdmFsdWUpO1xuICAgIHJldHVybiBuZXcgT3JkZXJlZE1hcChjb250ZW50KVxuICB9LFxuXG4gIC8vIDo6IChzdHJpbmcsIHN0cmluZywgYW55KSDihpIgT3JkZXJlZE1hcFxuICAvLyBBZGQgYSBrZXkgYWZ0ZXIgdGhlIGdpdmVuIGtleS4gSWYgYHBsYWNlYCBpcyBub3QgZm91bmQsIHRoZSBuZXdcbiAgLy8ga2V5IGlzIGFkZGVkIHRvIHRoZSBlbmQuXG4gIGFkZEJlZm9yZTogZnVuY3Rpb24ocGxhY2UsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgd2l0aG91dCA9IHRoaXMucmVtb3ZlKGtleSksIGNvbnRlbnQgPSB3aXRob3V0LmNvbnRlbnQuc2xpY2UoKTtcbiAgICB2YXIgZm91bmQgPSB3aXRob3V0LmZpbmQocGxhY2UpO1xuICAgIGNvbnRlbnQuc3BsaWNlKGZvdW5kID09IC0xID8gY29udGVudC5sZW5ndGggOiBmb3VuZCwgMCwga2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIG5ldyBPcmRlcmVkTWFwKGNvbnRlbnQpXG4gIH0sXG5cbiAgLy8gOjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkpXG4gIC8vIENhbGwgdGhlIGdpdmVuIGZ1bmN0aW9uIGZvciBlYWNoIGtleS92YWx1ZSBwYWlyIGluIHRoZSBtYXAsIGluXG4gIC8vIG9yZGVyLlxuICBmb3JFYWNoOiBmdW5jdGlvbihmKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbnRlbnQubGVuZ3RoOyBpICs9IDIpXG4gICAgICBmKHRoaXMuY29udGVudFtpXSwgdGhpcy5jb250ZW50W2kgKyAxXSk7XG4gIH0sXG5cbiAgLy8gOjogKHVuaW9uPE9iamVjdCwgT3JkZXJlZE1hcD4pIOKGkiBPcmRlcmVkTWFwXG4gIC8vIENyZWF0ZSBhIG5ldyBtYXAgYnkgcHJlcGVuZGluZyB0aGUga2V5cyBpbiB0aGlzIG1hcCB0aGF0IGRvbid0XG4gIC8vIGFwcGVhciBpbiBgbWFwYCBiZWZvcmUgdGhlIGtleXMgaW4gYG1hcGAuXG4gIHByZXBlbmQ6IGZ1bmN0aW9uKG1hcCkge1xuICAgIG1hcCA9IE9yZGVyZWRNYXAuZnJvbShtYXApO1xuICAgIGlmICghbWFwLnNpemUpIHJldHVybiB0aGlzXG4gICAgcmV0dXJuIG5ldyBPcmRlcmVkTWFwKG1hcC5jb250ZW50LmNvbmNhdCh0aGlzLnN1YnRyYWN0KG1hcCkuY29udGVudCkpXG4gIH0sXG5cbiAgLy8gOjogKHVuaW9uPE9iamVjdCwgT3JkZXJlZE1hcD4pIOKGkiBPcmRlcmVkTWFwXG4gIC8vIENyZWF0ZSBhIG5ldyBtYXAgYnkgYXBwZW5kaW5nIHRoZSBrZXlzIGluIHRoaXMgbWFwIHRoYXQgZG9uJ3RcbiAgLy8gYXBwZWFyIGluIGBtYXBgIGFmdGVyIHRoZSBrZXlzIGluIGBtYXBgLlxuICBhcHBlbmQ6IGZ1bmN0aW9uKG1hcCkge1xuICAgIG1hcCA9IE9yZGVyZWRNYXAuZnJvbShtYXApO1xuICAgIGlmICghbWFwLnNpemUpIHJldHVybiB0aGlzXG4gICAgcmV0dXJuIG5ldyBPcmRlcmVkTWFwKHRoaXMuc3VidHJhY3QobWFwKS5jb250ZW50LmNvbmNhdChtYXAuY29udGVudCkpXG4gIH0sXG5cbiAgLy8gOjogKHVuaW9uPE9iamVjdCwgT3JkZXJlZE1hcD4pIOKGkiBPcmRlcmVkTWFwXG4gIC8vIENyZWF0ZSBhIG1hcCBjb250YWluaW5nIGFsbCB0aGUga2V5cyBpbiB0aGlzIG1hcCB0aGF0IGRvbid0XG4gIC8vIGFwcGVhciBpbiBgbWFwYC5cbiAgc3VidHJhY3Q6IGZ1bmN0aW9uKG1hcCkge1xuICAgIHZhciByZXN1bHQgPSB0aGlzO1xuICAgIG1hcCA9IE9yZGVyZWRNYXAuZnJvbShtYXApO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwLmNvbnRlbnQubGVuZ3RoOyBpICs9IDIpXG4gICAgICByZXN1bHQgPSByZXN1bHQucmVtb3ZlKG1hcC5jb250ZW50W2ldKTtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH0sXG5cbiAgLy8gOjogKCkg4oaSIE9iamVjdFxuICAvLyBUdXJuIG9yZGVyZWQgbWFwIGludG8gYSBwbGFpbiBvYmplY3QuXG4gIHRvT2JqZWN0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsgcmVzdWx0W2tleV0gPSB2YWx1ZTsgfSk7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9LFxuXG4gIC8vIDo6IG51bWJlclxuICAvLyBUaGUgYW1vdW50IG9mIGtleXMgaW4gdGhpcyBtYXAuXG4gIGdldCBzaXplKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQubGVuZ3RoID4+IDFcbiAgfVxufTtcblxuLy8gOjogKD91bmlvbjxPYmplY3QsIE9yZGVyZWRNYXA+KSDihpIgT3JkZXJlZE1hcFxuLy8gUmV0dXJuIGEgbWFwIHdpdGggdGhlIGdpdmVuIGNvbnRlbnQuIElmIG51bGwsIGNyZWF0ZSBhbiBlbXB0eVxuLy8gbWFwLiBJZiBnaXZlbiBhbiBvcmRlcmVkIG1hcCwgcmV0dXJuIHRoYXQgbWFwIGl0c2VsZi4gSWYgZ2l2ZW4gYW5cbi8vIG9iamVjdCwgY3JlYXRlIGEgbWFwIGZyb20gdGhlIG9iamVjdCdzIHByb3BlcnRpZXMuXG5PcmRlcmVkTWFwLmZyb20gPSBmdW5jdGlvbih2YWx1ZSkge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPcmRlcmVkTWFwKSByZXR1cm4gdmFsdWVcbiAgdmFyIGNvbnRlbnQgPSBbXTtcbiAgaWYgKHZhbHVlKSBmb3IgKHZhciBwcm9wIGluIHZhbHVlKSBjb250ZW50LnB1c2gocHJvcCwgdmFsdWVbcHJvcF0pO1xuICByZXR1cm4gbmV3IE9yZGVyZWRNYXAoY29udGVudClcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE9yZGVyZWRNYXA7XG4iLCJpbXBvcnQgT3JkZXJlZE1hcCBmcm9tICdvcmRlcmVkbWFwJztcblxuZnVuY3Rpb24gZmluZERpZmZTdGFydChhLCBiLCBwb3MpIHtcbiAgICBmb3IgKGxldCBpID0gMDs7IGkrKykge1xuICAgICAgICBpZiAoaSA9PSBhLmNoaWxkQ291bnQgfHwgaSA9PSBiLmNoaWxkQ291bnQpXG4gICAgICAgICAgICByZXR1cm4gYS5jaGlsZENvdW50ID09IGIuY2hpbGRDb3VudCA/IG51bGwgOiBwb3M7XG4gICAgICAgIGxldCBjaGlsZEEgPSBhLmNoaWxkKGkpLCBjaGlsZEIgPSBiLmNoaWxkKGkpO1xuICAgICAgICBpZiAoY2hpbGRBID09IGNoaWxkQikge1xuICAgICAgICAgICAgcG9zICs9IGNoaWxkQS5ub2RlU2l6ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hpbGRBLnNhbWVNYXJrdXAoY2hpbGRCKSlcbiAgICAgICAgICAgIHJldHVybiBwb3M7XG4gICAgICAgIGlmIChjaGlsZEEuaXNUZXh0ICYmIGNoaWxkQS50ZXh0ICE9IGNoaWxkQi50ZXh0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgY2hpbGRBLnRleHRbal0gPT0gY2hpbGRCLnRleHRbal07IGorKylcbiAgICAgICAgICAgICAgICBwb3MrKztcbiAgICAgICAgICAgIHJldHVybiBwb3M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkQS5jb250ZW50LnNpemUgfHwgY2hpbGRCLmNvbnRlbnQuc2l6ZSkge1xuICAgICAgICAgICAgbGV0IGlubmVyID0gZmluZERpZmZTdGFydChjaGlsZEEuY29udGVudCwgY2hpbGRCLmNvbnRlbnQsIHBvcyArIDEpO1xuICAgICAgICAgICAgaWYgKGlubmVyICE9IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGlubmVyO1xuICAgICAgICB9XG4gICAgICAgIHBvcyArPSBjaGlsZEEubm9kZVNpemU7XG4gICAgfVxufVxuZnVuY3Rpb24gZmluZERpZmZFbmQoYSwgYiwgcG9zQSwgcG9zQikge1xuICAgIGZvciAobGV0IGlBID0gYS5jaGlsZENvdW50LCBpQiA9IGIuY2hpbGRDb3VudDs7KSB7XG4gICAgICAgIGlmIChpQSA9PSAwIHx8IGlCID09IDApXG4gICAgICAgICAgICByZXR1cm4gaUEgPT0gaUIgPyBudWxsIDogeyBhOiBwb3NBLCBiOiBwb3NCIH07XG4gICAgICAgIGxldCBjaGlsZEEgPSBhLmNoaWxkKC0taUEpLCBjaGlsZEIgPSBiLmNoaWxkKC0taUIpLCBzaXplID0gY2hpbGRBLm5vZGVTaXplO1xuICAgICAgICBpZiAoY2hpbGRBID09IGNoaWxkQikge1xuICAgICAgICAgICAgcG9zQSAtPSBzaXplO1xuICAgICAgICAgICAgcG9zQiAtPSBzaXplO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjaGlsZEEuc2FtZU1hcmt1cChjaGlsZEIpKVxuICAgICAgICAgICAgcmV0dXJuIHsgYTogcG9zQSwgYjogcG9zQiB9O1xuICAgICAgICBpZiAoY2hpbGRBLmlzVGV4dCAmJiBjaGlsZEEudGV4dCAhPSBjaGlsZEIudGV4dCkge1xuICAgICAgICAgICAgbGV0IHNhbWUgPSAwLCBtaW5TaXplID0gTWF0aC5taW4oY2hpbGRBLnRleHQubGVuZ3RoLCBjaGlsZEIudGV4dC5sZW5ndGgpO1xuICAgICAgICAgICAgd2hpbGUgKHNhbWUgPCBtaW5TaXplICYmIGNoaWxkQS50ZXh0W2NoaWxkQS50ZXh0Lmxlbmd0aCAtIHNhbWUgLSAxXSA9PSBjaGlsZEIudGV4dFtjaGlsZEIudGV4dC5sZW5ndGggLSBzYW1lIC0gMV0pIHtcbiAgICAgICAgICAgICAgICBzYW1lKys7XG4gICAgICAgICAgICAgICAgcG9zQS0tO1xuICAgICAgICAgICAgICAgIHBvc0ItLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGE6IHBvc0EsIGI6IHBvc0IgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGRBLmNvbnRlbnQuc2l6ZSB8fCBjaGlsZEIuY29udGVudC5zaXplKSB7XG4gICAgICAgICAgICBsZXQgaW5uZXIgPSBmaW5kRGlmZkVuZChjaGlsZEEuY29udGVudCwgY2hpbGRCLmNvbnRlbnQsIHBvc0EgLSAxLCBwb3NCIC0gMSk7XG4gICAgICAgICAgICBpZiAoaW5uZXIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGlubmVyO1xuICAgICAgICB9XG4gICAgICAgIHBvc0EgLT0gc2l6ZTtcbiAgICAgICAgcG9zQiAtPSBzaXplO1xuICAgIH1cbn1cblxuLyoqXG5BIGZyYWdtZW50IHJlcHJlc2VudHMgYSBub2RlJ3MgY29sbGVjdGlvbiBvZiBjaGlsZCBub2Rlcy5cblxuTGlrZSBub2RlcywgZnJhZ21lbnRzIGFyZSBwZXJzaXN0ZW50IGRhdGEgc3RydWN0dXJlcywgYW5kIHlvdVxuc2hvdWxkIG5vdCBtdXRhdGUgdGhlbSBvciB0aGVpciBjb250ZW50LiBSYXRoZXIsIHlvdSBjcmVhdGUgbmV3XG5pbnN0YW5jZXMgd2hlbmV2ZXIgbmVlZGVkLiBUaGUgQVBJIHRyaWVzIHRvIG1ha2UgdGhpcyBlYXN5LlxuKi9cbmNsYXNzIEZyYWdtZW50IHtcbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgY29udGVudCwgc2l6ZSkge1xuICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICB0aGlzLnNpemUgPSBzaXplIHx8IDA7XG4gICAgICAgIGlmIChzaXplID09IG51bGwpXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRlbnQubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgdGhpcy5zaXplICs9IGNvbnRlbnRbaV0ubm9kZVNpemU7XG4gICAgfVxuICAgIC8qKlxuICAgIEludm9rZSBhIGNhbGxiYWNrIGZvciBhbGwgZGVzY2VuZGFudCBub2RlcyBiZXR3ZWVuIHRoZSBnaXZlbiB0d29cbiAgICBwb3NpdGlvbnMgKHJlbGF0aXZlIHRvIHN0YXJ0IG9mIHRoaXMgZnJhZ21lbnQpLiBEb2Vzbid0IGRlc2NlbmRcbiAgICBpbnRvIGEgbm9kZSB3aGVuIHRoZSBjYWxsYmFjayByZXR1cm5zIGBmYWxzZWAuXG4gICAgKi9cbiAgICBub2Rlc0JldHdlZW4oZnJvbSwgdG8sIGYsIG5vZGVTdGFydCA9IDAsIHBhcmVudCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgcG9zID0gMDsgcG9zIDwgdG87IGkrKykge1xuICAgICAgICAgICAgbGV0IGNoaWxkID0gdGhpcy5jb250ZW50W2ldLCBlbmQgPSBwb3MgKyBjaGlsZC5ub2RlU2l6ZTtcbiAgICAgICAgICAgIGlmIChlbmQgPiBmcm9tICYmIGYoY2hpbGQsIG5vZGVTdGFydCArIHBvcywgcGFyZW50IHx8IG51bGwsIGkpICE9PSBmYWxzZSAmJiBjaGlsZC5jb250ZW50LnNpemUpIHtcbiAgICAgICAgICAgICAgICBsZXQgc3RhcnQgPSBwb3MgKyAxO1xuICAgICAgICAgICAgICAgIGNoaWxkLm5vZGVzQmV0d2VlbihNYXRoLm1heCgwLCBmcm9tIC0gc3RhcnQpLCBNYXRoLm1pbihjaGlsZC5jb250ZW50LnNpemUsIHRvIC0gc3RhcnQpLCBmLCBub2RlU3RhcnQgKyBzdGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb3MgPSBlbmQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgQ2FsbCB0aGUgZ2l2ZW4gY2FsbGJhY2sgZm9yIGV2ZXJ5IGRlc2NlbmRhbnQgbm9kZS4gYHBvc2Agd2lsbCBiZVxuICAgIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgZnJhZ21lbnQuIFRoZSBjYWxsYmFjayBtYXkgcmV0dXJuXG4gICAgYGZhbHNlYCB0byBwcmV2ZW50IHRyYXZlcnNhbCBvZiBhIGdpdmVuIG5vZGUncyBjaGlsZHJlbi5cbiAgICAqL1xuICAgIGRlc2NlbmRhbnRzKGYpIHtcbiAgICAgICAgdGhpcy5ub2Rlc0JldHdlZW4oMCwgdGhpcy5zaXplLCBmKTtcbiAgICB9XG4gICAgLyoqXG4gICAgRXh0cmFjdCB0aGUgdGV4dCBiZXR3ZWVuIGBmcm9tYCBhbmQgYHRvYC4gU2VlIHRoZSBzYW1lIG1ldGhvZCBvblxuICAgIFtgTm9kZWBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNtb2RlbC5Ob2RlLnRleHRCZXR3ZWVuKS5cbiAgICAqL1xuICAgIHRleHRCZXR3ZWVuKGZyb20sIHRvLCBibG9ja1NlcGFyYXRvciwgbGVhZlRleHQpIHtcbiAgICAgICAgbGV0IHRleHQgPSBcIlwiLCBzZXBhcmF0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm5vZGVzQmV0d2Vlbihmcm9tLCB0bywgKG5vZGUsIHBvcykgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUuaXNUZXh0KSB7XG4gICAgICAgICAgICAgICAgdGV4dCArPSBub2RlLnRleHQuc2xpY2UoTWF0aC5tYXgoZnJvbSwgcG9zKSAtIHBvcywgdG8gLSBwb3MpO1xuICAgICAgICAgICAgICAgIHNlcGFyYXRlZCA9ICFibG9ja1NlcGFyYXRvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUuaXNMZWFmKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxlYWZUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgKz0gdHlwZW9mIGxlYWZUZXh0ID09PSBcImZ1bmN0aW9uXCIgPyBsZWFmVGV4dChub2RlKSA6IGxlYWZUZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLnR5cGUuc3BlYy5sZWFmVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9IG5vZGUudHlwZS5zcGVjLmxlYWZUZXh0KG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXBhcmF0ZWQgPSAhYmxvY2tTZXBhcmF0b3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghc2VwYXJhdGVkICYmIG5vZGUuaXNCbG9jaykge1xuICAgICAgICAgICAgICAgIHRleHQgKz0gYmxvY2tTZXBhcmF0b3I7XG4gICAgICAgICAgICAgICAgc2VwYXJhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMCk7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICAvKipcbiAgICBDcmVhdGUgYSBuZXcgZnJhZ21lbnQgY29udGFpbmluZyB0aGUgY29tYmluZWQgY29udGVudCBvZiB0aGlzXG4gICAgZnJhZ21lbnQgYW5kIHRoZSBvdGhlci5cbiAgICAqL1xuICAgIGFwcGVuZChvdGhlcikge1xuICAgICAgICBpZiAoIW90aGVyLnNpemUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgaWYgKCF0aGlzLnNpemUpXG4gICAgICAgICAgICByZXR1cm4gb3RoZXI7XG4gICAgICAgIGxldCBsYXN0ID0gdGhpcy5sYXN0Q2hpbGQsIGZpcnN0ID0gb3RoZXIuZmlyc3RDaGlsZCwgY29udGVudCA9IHRoaXMuY29udGVudC5zbGljZSgpLCBpID0gMDtcbiAgICAgICAgaWYgKGxhc3QuaXNUZXh0ICYmIGxhc3Quc2FtZU1hcmt1cChmaXJzdCkpIHtcbiAgICAgICAgICAgIGNvbnRlbnRbY29udGVudC5sZW5ndGggLSAxXSA9IGxhc3Qud2l0aFRleHQobGFzdC50ZXh0ICsgZmlyc3QudGV4dCk7XG4gICAgICAgICAgICBpID0gMTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKDsgaSA8IG90aGVyLmNvbnRlbnQubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBjb250ZW50LnB1c2gob3RoZXIuY29udGVudFtpXSk7XG4gICAgICAgIHJldHVybiBuZXcgRnJhZ21lbnQoY29udGVudCwgdGhpcy5zaXplICsgb3RoZXIuc2l6ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgIEN1dCBvdXQgdGhlIHN1Yi1mcmFnbWVudCBiZXR3ZWVuIHRoZSB0d28gZ2l2ZW4gcG9zaXRpb25zLlxuICAgICovXG4gICAgY3V0KGZyb20sIHRvID0gdGhpcy5zaXplKSB7XG4gICAgICAgIGlmIChmcm9tID09IDAgJiYgdG8gPT0gdGhpcy5zaXplKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXSwgc2l6ZSA9IDA7XG4gICAgICAgIGlmICh0byA+IGZyb20pXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgcG9zID0gMDsgcG9zIDwgdG87IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBjaGlsZCA9IHRoaXMuY29udGVudFtpXSwgZW5kID0gcG9zICsgY2hpbGQubm9kZVNpemU7XG4gICAgICAgICAgICAgICAgaWYgKGVuZCA+IGZyb20pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyA8IGZyb20gfHwgZW5kID4gdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5pc1RleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC5jdXQoTWF0aC5tYXgoMCwgZnJvbSAtIHBvcyksIE1hdGgubWluKGNoaWxkLnRleHQubGVuZ3RoLCB0byAtIHBvcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQuY3V0KE1hdGgubWF4KDAsIGZyb20gLSBwb3MgLSAxKSwgTWF0aC5taW4oY2hpbGQuY29udGVudC5zaXplLCB0byAtIHBvcyAtIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIHNpemUgKz0gY2hpbGQubm9kZVNpemU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBvcyA9IGVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBGcmFnbWVudChyZXN1bHQsIHNpemUpO1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIGN1dEJ5SW5kZXgoZnJvbSwgdG8pIHtcbiAgICAgICAgaWYgKGZyb20gPT0gdG8pXG4gICAgICAgICAgICByZXR1cm4gRnJhZ21lbnQuZW1wdHk7XG4gICAgICAgIGlmIChmcm9tID09IDAgJiYgdG8gPT0gdGhpcy5jb250ZW50Lmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICByZXR1cm4gbmV3IEZyYWdtZW50KHRoaXMuY29udGVudC5zbGljZShmcm9tLCB0bykpO1xuICAgIH1cbiAgICAvKipcbiAgICBDcmVhdGUgYSBuZXcgZnJhZ21lbnQgaW4gd2hpY2ggdGhlIG5vZGUgYXQgdGhlIGdpdmVuIGluZGV4IGlzXG4gICAgcmVwbGFjZWQgYnkgdGhlIGdpdmVuIG5vZGUuXG4gICAgKi9cbiAgICByZXBsYWNlQ2hpbGQoaW5kZXgsIG5vZGUpIHtcbiAgICAgICAgbGV0IGN1cnJlbnQgPSB0aGlzLmNvbnRlbnRbaW5kZXhdO1xuICAgICAgICBpZiAoY3VycmVudCA9PSBub2RlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIGxldCBjb3B5ID0gdGhpcy5jb250ZW50LnNsaWNlKCk7XG4gICAgICAgIGxldCBzaXplID0gdGhpcy5zaXplICsgbm9kZS5ub2RlU2l6ZSAtIGN1cnJlbnQubm9kZVNpemU7XG4gICAgICAgIGNvcHlbaW5kZXhdID0gbm9kZTtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFnbWVudChjb3B5LCBzaXplKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQ3JlYXRlIGEgbmV3IGZyYWdtZW50IGJ5IHByZXBlbmRpbmcgdGhlIGdpdmVuIG5vZGUgdG8gdGhpc1xuICAgIGZyYWdtZW50LlxuICAgICovXG4gICAgYWRkVG9TdGFydChub2RlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhZ21lbnQoW25vZGVdLmNvbmNhdCh0aGlzLmNvbnRlbnQpLCB0aGlzLnNpemUgKyBub2RlLm5vZGVTaXplKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQ3JlYXRlIGEgbmV3IGZyYWdtZW50IGJ5IGFwcGVuZGluZyB0aGUgZ2l2ZW4gbm9kZSB0byB0aGlzXG4gICAgZnJhZ21lbnQuXG4gICAgKi9cbiAgICBhZGRUb0VuZChub2RlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhZ21lbnQodGhpcy5jb250ZW50LmNvbmNhdChub2RlKSwgdGhpcy5zaXplICsgbm9kZS5ub2RlU2l6ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgIENvbXBhcmUgdGhpcyBmcmFnbWVudCB0byBhbm90aGVyIG9uZS5cbiAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnQubGVuZ3RoICE9IG90aGVyLmNvbnRlbnQubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29udGVudC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250ZW50W2ldLmVxKG90aGVyLmNvbnRlbnRbaV0pKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgIFRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgZnJhZ21lbnQsIG9yIGBudWxsYCBpZiBpdCBpcyBlbXB0eS5cbiAgICAqL1xuICAgIGdldCBmaXJzdENoaWxkKCkgeyByZXR1cm4gdGhpcy5jb250ZW50Lmxlbmd0aCA/IHRoaXMuY29udGVudFswXSA6IG51bGw7IH1cbiAgICAvKipcbiAgICBUaGUgbGFzdCBjaGlsZCBvZiB0aGUgZnJhZ21lbnQsIG9yIGBudWxsYCBpZiBpdCBpcyBlbXB0eS5cbiAgICAqL1xuICAgIGdldCBsYXN0Q2hpbGQoKSB7IHJldHVybiB0aGlzLmNvbnRlbnQubGVuZ3RoID8gdGhpcy5jb250ZW50W3RoaXMuY29udGVudC5sZW5ndGggLSAxXSA6IG51bGw7IH1cbiAgICAvKipcbiAgICBUaGUgbnVtYmVyIG9mIGNoaWxkIG5vZGVzIGluIHRoaXMgZnJhZ21lbnQuXG4gICAgKi9cbiAgICBnZXQgY2hpbGRDb3VudCgpIHsgcmV0dXJuIHRoaXMuY29udGVudC5sZW5ndGg7IH1cbiAgICAvKipcbiAgICBHZXQgdGhlIGNoaWxkIG5vZGUgYXQgdGhlIGdpdmVuIGluZGV4LiBSYWlzZSBhbiBlcnJvciB3aGVuIHRoZVxuICAgIGluZGV4IGlzIG91dCBvZiByYW5nZS5cbiAgICAqL1xuICAgIGNoaWxkKGluZGV4KSB7XG4gICAgICAgIGxldCBmb3VuZCA9IHRoaXMuY29udGVudFtpbmRleF07XG4gICAgICAgIGlmICghZm91bmQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IFwiICsgaW5kZXggKyBcIiBvdXQgb2YgcmFuZ2UgZm9yIFwiICsgdGhpcyk7XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9XG4gICAgLyoqXG4gICAgR2V0IHRoZSBjaGlsZCBub2RlIGF0IHRoZSBnaXZlbiBpbmRleCwgaWYgaXQgZXhpc3RzLlxuICAgICovXG4gICAgbWF5YmVDaGlsZChpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50W2luZGV4XSB8fCBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICBDYWxsIGBmYCBmb3IgZXZlcnkgY2hpbGQgbm9kZSwgcGFzc2luZyB0aGUgbm9kZSwgaXRzIG9mZnNldFxuICAgIGludG8gdGhpcyBwYXJlbnQgbm9kZSwgYW5kIGl0cyBpbmRleC5cbiAgICAqL1xuICAgIGZvckVhY2goZikge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgcCA9IDA7IGkgPCB0aGlzLmNvbnRlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBjaGlsZCA9IHRoaXMuY29udGVudFtpXTtcbiAgICAgICAgICAgIGYoY2hpbGQsIHAsIGkpO1xuICAgICAgICAgICAgcCArPSBjaGlsZC5ub2RlU2l6ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICBGaW5kIHRoZSBmaXJzdCBwb3NpdGlvbiBhdCB3aGljaCB0aGlzIGZyYWdtZW50IGFuZCBhbm90aGVyXG4gICAgZnJhZ21lbnQgZGlmZmVyLCBvciBgbnVsbGAgaWYgdGhleSBhcmUgdGhlIHNhbWUuXG4gICAgKi9cbiAgICBmaW5kRGlmZlN0YXJ0KG90aGVyLCBwb3MgPSAwKSB7XG4gICAgICAgIHJldHVybiBmaW5kRGlmZlN0YXJ0KHRoaXMsIG90aGVyLCBwb3MpO1xuICAgIH1cbiAgICAvKipcbiAgICBGaW5kIHRoZSBmaXJzdCBwb3NpdGlvbiwgc2VhcmNoaW5nIGZyb20gdGhlIGVuZCwgYXQgd2hpY2ggdGhpc1xuICAgIGZyYWdtZW50IGFuZCB0aGUgZ2l2ZW4gZnJhZ21lbnQgZGlmZmVyLCBvciBgbnVsbGAgaWYgdGhleSBhcmVcbiAgICB0aGUgc2FtZS4gU2luY2UgdGhpcyBwb3NpdGlvbiB3aWxsIG5vdCBiZSB0aGUgc2FtZSBpbiBib3RoXG4gICAgbm9kZXMsIGFuIG9iamVjdCB3aXRoIHR3byBzZXBhcmF0ZSBwb3NpdGlvbnMgaXMgcmV0dXJuZWQuXG4gICAgKi9cbiAgICBmaW5kRGlmZkVuZChvdGhlciwgcG9zID0gdGhpcy5zaXplLCBvdGhlclBvcyA9IG90aGVyLnNpemUpIHtcbiAgICAgICAgcmV0dXJuIGZpbmREaWZmRW5kKHRoaXMsIG90aGVyLCBwb3MsIG90aGVyUG9zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgRmluZCB0aGUgaW5kZXggYW5kIGlubmVyIG9mZnNldCBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gcmVsYXRpdmVcbiAgICBwb3NpdGlvbiBpbiB0aGlzIGZyYWdtZW50LiBUaGUgcmVzdWx0IG9iamVjdCB3aWxsIGJlIHJldXNlZFxuICAgIChvdmVyd3JpdHRlbikgdGhlIG5leHQgdGltZSB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiAoTm90IHB1YmxpYy4pXG4gICAgKi9cbiAgICBmaW5kSW5kZXgocG9zLCByb3VuZCA9IC0xKSB7XG4gICAgICAgIGlmIChwb3MgPT0gMClcbiAgICAgICAgICAgIHJldHVybiByZXRJbmRleCgwLCBwb3MpO1xuICAgICAgICBpZiAocG9zID09IHRoaXMuc2l6ZSlcbiAgICAgICAgICAgIHJldHVybiByZXRJbmRleCh0aGlzLmNvbnRlbnQubGVuZ3RoLCBwb3MpO1xuICAgICAgICBpZiAocG9zID4gdGhpcy5zaXplIHx8IHBvcyA8IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgUG9zaXRpb24gJHtwb3N9IG91dHNpZGUgb2YgZnJhZ21lbnQgKCR7dGhpc30pYCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjdXJQb3MgPSAwOzsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgY3VyID0gdGhpcy5jaGlsZChpKSwgZW5kID0gY3VyUG9zICsgY3VyLm5vZGVTaXplO1xuICAgICAgICAgICAgaWYgKGVuZCA+PSBwb3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW5kID09IHBvcyB8fCByb3VuZCA+IDApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRJbmRleChpICsgMSwgZW5kKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0SW5kZXgoaSwgY3VyUG9zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1clBvcyA9IGVuZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICBSZXR1cm4gYSBkZWJ1Z2dpbmcgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHRoaXMgZnJhZ21lbnQuXG4gICAgKi9cbiAgICB0b1N0cmluZygpIHsgcmV0dXJuIFwiPFwiICsgdGhpcy50b1N0cmluZ0lubmVyKCkgKyBcIj5cIjsgfVxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgdG9TdHJpbmdJbm5lcigpIHsgcmV0dXJuIHRoaXMuY29udGVudC5qb2luKFwiLCBcIik7IH1cbiAgICAvKipcbiAgICBDcmVhdGUgYSBKU09OLXNlcmlhbGl6ZWFibGUgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBmcmFnbWVudC5cbiAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudC5sZW5ndGggPyB0aGlzLmNvbnRlbnQubWFwKG4gPT4gbi50b0pTT04oKSkgOiBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICBEZXNlcmlhbGl6ZSBhIGZyYWdtZW50IGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb24uXG4gICAgKi9cbiAgICBzdGF0aWMgZnJvbUpTT04oc2NoZW1hLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuIEZyYWdtZW50LmVtcHR5O1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIGlucHV0IGZvciBGcmFnbWVudC5mcm9tSlNPTlwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFnbWVudCh2YWx1ZS5tYXAoc2NoZW1hLm5vZGVGcm9tSlNPTikpO1xuICAgIH1cbiAgICAvKipcbiAgICBCdWlsZCBhIGZyYWdtZW50IGZyb20gYW4gYXJyYXkgb2Ygbm9kZXMuIEVuc3VyZXMgdGhhdCBhZGphY2VudFxuICAgIHRleHQgbm9kZXMgd2l0aCB0aGUgc2FtZSBtYXJrcyBhcmUgam9pbmVkIHRvZ2V0aGVyLlxuICAgICovXG4gICAgc3RhdGljIGZyb21BcnJheShhcnJheSkge1xuICAgICAgICBpZiAoIWFycmF5Lmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBGcmFnbWVudC5lbXB0eTtcbiAgICAgICAgbGV0IGpvaW5lZCwgc2l6ZSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBub2RlID0gYXJyYXlbaV07XG4gICAgICAgICAgICBzaXplICs9IG5vZGUubm9kZVNpemU7XG4gICAgICAgICAgICBpZiAoaSAmJiBub2RlLmlzVGV4dCAmJiBhcnJheVtpIC0gMV0uc2FtZU1hcmt1cChub2RlKSkge1xuICAgICAgICAgICAgICAgIGlmICgham9pbmVkKVxuICAgICAgICAgICAgICAgICAgICBqb2luZWQgPSBhcnJheS5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgICAgICBqb2luZWRbam9pbmVkLmxlbmd0aCAtIDFdID0gbm9kZVxuICAgICAgICAgICAgICAgICAgICAud2l0aFRleHQoam9pbmVkW2pvaW5lZC5sZW5ndGggLSAxXS50ZXh0ICsgbm9kZS50ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGpvaW5lZCkge1xuICAgICAgICAgICAgICAgIGpvaW5lZC5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRnJhZ21lbnQoam9pbmVkIHx8IGFycmF5LCBzaXplKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQ3JlYXRlIGEgZnJhZ21lbnQgZnJvbSBzb21ldGhpbmcgdGhhdCBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgYVxuICAgIHNldCBvZiBub2Rlcy4gRm9yIGBudWxsYCwgaXQgcmV0dXJucyB0aGUgZW1wdHkgZnJhZ21lbnQuIEZvciBhXG4gICAgZnJhZ21lbnQsIHRoZSBmcmFnbWVudCBpdHNlbGYuIEZvciBhIG5vZGUgb3IgYXJyYXkgb2Ygbm9kZXMsIGFcbiAgICBmcmFnbWVudCBjb250YWluaW5nIHRob3NlIG5vZGVzLlxuICAgICovXG4gICAgc3RhdGljIGZyb20obm9kZXMpIHtcbiAgICAgICAgaWYgKCFub2RlcylcbiAgICAgICAgICAgIHJldHVybiBGcmFnbWVudC5lbXB0eTtcbiAgICAgICAgaWYgKG5vZGVzIGluc3RhbmNlb2YgRnJhZ21lbnQpXG4gICAgICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGVzKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21BcnJheShub2Rlcyk7XG4gICAgICAgIGlmIChub2Rlcy5hdHRycylcbiAgICAgICAgICAgIHJldHVybiBuZXcgRnJhZ21lbnQoW25vZGVzXSwgbm9kZXMubm9kZVNpemUpO1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNhbiBub3QgY29udmVydCBcIiArIG5vZGVzICsgXCIgdG8gYSBGcmFnbWVudFwiICtcbiAgICAgICAgICAgIChub2Rlcy5ub2Rlc0JldHdlZW4gPyBcIiAobG9va3MgbGlrZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBwcm9zZW1pcnJvci1tb2RlbCB3ZXJlIGxvYWRlZClcIiA6IFwiXCIpKTtcbiAgICB9XG59XG4vKipcbkFuIGVtcHR5IGZyYWdtZW50LiBJbnRlbmRlZCB0byBiZSByZXVzZWQgd2hlbmV2ZXIgYSBub2RlIGRvZXNuJ3RcbmNvbnRhaW4gYW55dGhpbmcgKHJhdGhlciB0aGFuIGFsbG9jYXRpbmcgYSBuZXcgZW1wdHkgZnJhZ21lbnQgZm9yXG5lYWNoIGxlYWYgbm9kZSkuXG4qL1xuRnJhZ21lbnQuZW1wdHkgPSBuZXcgRnJhZ21lbnQoW10sIDApO1xuY29uc3QgZm91bmQgPSB7IGluZGV4OiAwLCBvZmZzZXQ6IDAgfTtcbmZ1bmN0aW9uIHJldEluZGV4KGluZGV4LCBvZmZzZXQpIHtcbiAgICBmb3VuZC5pbmRleCA9IGluZGV4O1xuICAgIGZvdW5kLm9mZnNldCA9IG9mZnNldDtcbiAgICByZXR1cm4gZm91bmQ7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVEZWVwKGEsIGIpIHtcbiAgICBpZiAoYSA9PT0gYilcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKCEoYSAmJiB0eXBlb2YgYSA9PSBcIm9iamVjdFwiKSB8fFxuICAgICAgICAhKGIgJiYgdHlwZW9mIGIgPT0gXCJvYmplY3RcIikpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsZXQgYXJyYXkgPSBBcnJheS5pc0FycmF5KGEpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGIpICE9IGFycmF5KVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGFycmF5KSB7XG4gICAgICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgaWYgKCFjb21wYXJlRGVlcChhW2ldLCBiW2ldKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBwIGluIGEpXG4gICAgICAgICAgICBpZiAoIShwIGluIGIpIHx8ICFjb21wYXJlRGVlcChhW3BdLCBiW3BdKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IHAgaW4gYilcbiAgICAgICAgICAgIGlmICghKHAgaW4gYSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG5BIG1hcmsgaXMgYSBwaWVjZSBvZiBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhIG5vZGUsXG5zdWNoIGFzIGl0IGJlaW5nIGVtcGhhc2l6ZWQsIGluIGNvZGUgZm9udCwgb3IgYSBsaW5rLiBJdCBoYXMgYVxudHlwZSBhbmQgb3B0aW9uYWxseSBhIHNldCBvZiBhdHRyaWJ1dGVzIHRoYXQgcHJvdmlkZSBmdXJ0aGVyXG5pbmZvcm1hdGlvbiAoc3VjaCBhcyB0aGUgdGFyZ2V0IG9mIHRoZSBsaW5rKS4gTWFya3MgYXJlIGNyZWF0ZWRcbnRocm91Z2ggYSBgU2NoZW1hYCwgd2hpY2ggY29udHJvbHMgd2hpY2ggdHlwZXMgZXhpc3QgYW5kIHdoaWNoXG5hdHRyaWJ1dGVzIHRoZXkgaGF2ZS5cbiovXG5jbGFzcyBNYXJrIHtcbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgIC8qKlxuICAgIFRoZSB0eXBlIG9mIHRoaXMgbWFyay5cbiAgICAqL1xuICAgIHR5cGUsIFxuICAgIC8qKlxuICAgIFRoZSBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hcmsuXG4gICAgKi9cbiAgICBhdHRycykge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLmF0dHJzID0gYXR0cnM7XG4gICAgfVxuICAgIC8qKlxuICAgIEdpdmVuIGEgc2V0IG9mIG1hcmtzLCBjcmVhdGUgYSBuZXcgc2V0IHdoaWNoIGNvbnRhaW5zIHRoaXMgb25lIGFzXG4gICAgd2VsbCwgaW4gdGhlIHJpZ2h0IHBvc2l0aW9uLiBJZiB0aGlzIG1hcmsgaXMgYWxyZWFkeSBpbiB0aGUgc2V0LFxuICAgIHRoZSBzZXQgaXRzZWxmIGlzIHJldHVybmVkLiBJZiBhbnkgbWFya3MgdGhhdCBhcmUgc2V0IHRvIGJlXG4gICAgW2V4Y2x1c2l2ZV0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI21vZGVsLk1hcmtTcGVjLmV4Y2x1ZGVzKSB3aXRoIHRoaXMgbWFyayBhcmUgcHJlc2VudCxcbiAgICB0aG9zZSBhcmUgcmVwbGFjZWQgYnkgdGhpcyBvbmUuXG4gICAgKi9cbiAgICBhZGRUb1NldChzZXQpIHtcbiAgICAgICAgbGV0IGNvcHksIHBsYWNlZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IG90aGVyID0gc2V0W2ldO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXEob3RoZXIpKVxuICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICBpZiAodGhpcy50eXBlLmV4Y2x1ZGVzKG90aGVyLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb3B5KVxuICAgICAgICAgICAgICAgICAgICBjb3B5ID0gc2V0LnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAob3RoZXIudHlwZS5leGNsdWRlcyh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghcGxhY2VkICYmIG90aGVyLnR5cGUucmFuayA+IHRoaXMudHlwZS5yYW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29weSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkgPSBzZXQuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICAgICAgICAgIGNvcHkucHVzaCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvcHkpXG4gICAgICAgICAgICAgICAgICAgIGNvcHkucHVzaChvdGhlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb3B5KVxuICAgICAgICAgICAgY29weSA9IHNldC5zbGljZSgpO1xuICAgICAgICBpZiAoIXBsYWNlZClcbiAgICAgICAgICAgIGNvcHkucHVzaCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxuICAgIC8qKlxuICAgIFJlbW92ZSB0aGlzIG1hcmsgZnJvbSB0aGUgZ2l2ZW4gc2V0LCByZXR1cm5pbmcgYSBuZXcgc2V0LiBJZiB0aGlzXG4gICAgbWFyayBpcyBub3QgaW4gdGhlIHNldCwgdGhlIHNldCBpdHNlbGYgaXMgcmV0dXJuZWQuXG4gICAgKi9cbiAgICByZW1vdmVGcm9tU2V0KHNldCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGlmICh0aGlzLmVxKHNldFtpXSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldC5zbGljZSgwLCBpKS5jb25jYXQoc2V0LnNsaWNlKGkgKyAxKSk7XG4gICAgICAgIHJldHVybiBzZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgIFRlc3Qgd2hldGhlciB0aGlzIG1hcmsgaXMgaW4gdGhlIGdpdmVuIHNldCBvZiBtYXJrcy5cbiAgICAqL1xuICAgIGlzSW5TZXQoc2V0KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0Lmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgaWYgKHRoaXMuZXEoc2V0W2ldKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICBUZXN0IHdoZXRoZXIgdGhpcyBtYXJrIGhhcyB0aGUgc2FtZSB0eXBlIGFuZCBhdHRyaWJ1dGVzIGFzXG4gICAgYW5vdGhlciBtYXJrLlxuICAgICovXG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMgPT0gb3RoZXIgfHxcbiAgICAgICAgICAgICh0aGlzLnR5cGUgPT0gb3RoZXIudHlwZSAmJiBjb21wYXJlRGVlcCh0aGlzLmF0dHJzLCBvdGhlci5hdHRycykpO1xuICAgIH1cbiAgICAvKipcbiAgICBDb252ZXJ0IHRoaXMgbWFyayB0byBhIEpTT04tc2VyaWFsaXplYWJsZSByZXByZXNlbnRhdGlvbi5cbiAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgbGV0IG9iaiA9IHsgdHlwZTogdGhpcy50eXBlLm5hbWUgfTtcbiAgICAgICAgZm9yIChsZXQgXyBpbiB0aGlzLmF0dHJzKSB7XG4gICAgICAgICAgICBvYmouYXR0cnMgPSB0aGlzLmF0dHJzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gICAgLyoqXG4gICAgRGVzZXJpYWxpemUgYSBtYXJrIGZyb20gSlNPTi5cbiAgICAqL1xuICAgIHN0YXRpYyBmcm9tSlNPTihzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIGlucHV0IGZvciBNYXJrLmZyb21KU09OXCIpO1xuICAgICAgICBsZXQgdHlwZSA9IHNjaGVtYS5tYXJrc1tqc29uLnR5cGVdO1xuICAgICAgICBpZiAoIXR5cGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlcmUgaXMgbm8gbWFyayB0eXBlICR7anNvbi50eXBlfSBpbiB0aGlzIHNjaGVtYWApO1xuICAgICAgICByZXR1cm4gdHlwZS5jcmVhdGUoanNvbi5hdHRycyk7XG4gICAgfVxuICAgIC8qKlxuICAgIFRlc3Qgd2hldGhlciB0d28gc2V0cyBvZiBtYXJrcyBhcmUgaWRlbnRpY2FsLlxuICAgICovXG4gICAgc3RhdGljIHNhbWVTZXQoYSwgYikge1xuICAgICAgICBpZiAoYSA9PSBiKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgaWYgKCFhW2ldLmVxKGJbaV0pKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgIENyZWF0ZSBhIHByb3Blcmx5IHNvcnRlZCBtYXJrIHNldCBmcm9tIG51bGwsIGEgc2luZ2xlIG1hcmssIG9yIGFuXG4gICAgdW5zb3J0ZWQgYXJyYXkgb2YgbWFya3MuXG4gICAgKi9cbiAgICBzdGF0aWMgc2V0RnJvbShtYXJrcykge1xuICAgICAgICBpZiAoIW1hcmtzIHx8IEFycmF5LmlzQXJyYXkobWFya3MpICYmIG1hcmtzLmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIE1hcmsubm9uZTtcbiAgICAgICAgaWYgKG1hcmtzIGluc3RhbmNlb2YgTWFyaylcbiAgICAgICAgICAgIHJldHVybiBbbWFya3NdO1xuICAgICAgICBsZXQgY29weSA9IG1hcmtzLnNsaWNlKCk7XG4gICAgICAgIGNvcHkuc29ydCgoYSwgYikgPT4gYS50eXBlLnJhbmsgLSBiLnR5cGUucmFuayk7XG4gICAgICAgIHJldHVybiBjb3B5O1xuICAgIH1cbn1cbi8qKlxuVGhlIGVtcHR5IHNldCBvZiBtYXJrcy5cbiovXG5NYXJrLm5vbmUgPSBbXTtcblxuLyoqXG5FcnJvciB0eXBlIHJhaXNlZCBieSBbYE5vZGUucmVwbGFjZWBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNtb2RlbC5Ob2RlLnJlcGxhY2UpIHdoZW5cbmdpdmVuIGFuIGludmFsaWQgcmVwbGFjZW1lbnQuXG4qL1xuY2xhc3MgUmVwbGFjZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuLypcblJlcGxhY2VFcnJvciA9IGZ1bmN0aW9uKHRoaXM6IGFueSwgbWVzc2FnZTogc3RyaW5nKSB7XG4gIGxldCBlcnIgPSBFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UpXG4gIDsoZXJyIGFzIGFueSkuX19wcm90b19fID0gUmVwbGFjZUVycm9yLnByb3RvdHlwZVxuICByZXR1cm4gZXJyXG59IGFzIGFueVxuXG5SZXBsYWNlRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpXG5SZXBsYWNlRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVwbGFjZUVycm9yXG5SZXBsYWNlRXJyb3IucHJvdG90eXBlLm5hbWUgPSBcIlJlcGxhY2VFcnJvclwiXG4qL1xuLyoqXG5BIHNsaWNlIHJlcHJlc2VudHMgYSBwaWVjZSBjdXQgb3V0IG9mIGEgbGFyZ2VyIGRvY3VtZW50LiBJdFxuc3RvcmVzIG5vdCBvbmx5IGEgZnJhZ21lbnQsIGJ1dCBhbHNvIHRoZSBkZXB0aCB1cCB0byB3aGljaCBub2RlcyBvblxuYm90aCBzaWRlIGFyZSDigJhvcGVu4oCZIChjdXQgdGhyb3VnaCkuXG4qL1xuY2xhc3MgU2xpY2Uge1xuICAgIC8qKlxuICAgIENyZWF0ZSBhIHNsaWNlLiBXaGVuIHNwZWNpZnlpbmcgYSBub24temVybyBvcGVuIGRlcHRoLCB5b3UgbXVzdFxuICAgIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGFyZSBub2RlcyBvZiBhdCBsZWFzdCB0aGF0IGRlcHRoIGF0IHRoZVxuICAgIGFwcHJvcHJpYXRlIHNpZGUgb2YgdGhlIGZyYWdtZW504oCUaS5lLiBpZiB0aGUgZnJhZ21lbnQgaXMgYW5cbiAgICBlbXB0eSBwYXJhZ3JhcGggbm9kZSwgYG9wZW5TdGFydGAgYW5kIGBvcGVuRW5kYCBjYW4ndCBiZSBncmVhdGVyXG4gICAgdGhhbiAxLlxuICAgIFxuICAgIEl0IGlzIG5vdCBuZWNlc3NhcnkgZm9yIHRoZSBjb250ZW50IG9mIG9wZW4gbm9kZXMgdG8gY29uZm9ybSB0b1xuICAgIHRoZSBzY2hlbWEncyBjb250ZW50IGNvbnN0cmFpbnRzLCB0aG91Z2ggaXQgc2hvdWxkIGJlIGEgdmFsaWRcbiAgICBzdGFydC9lbmQvbWlkZGxlIGZvciBzdWNoIGEgbm9kZSwgZGVwZW5kaW5nIG9uIHdoaWNoIHNpZGVzIGFyZVxuICAgIG9wZW4uXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICBUaGUgc2xpY2UncyBjb250ZW50LlxuICAgICovXG4gICAgY29udGVudCwgXG4gICAgLyoqXG4gICAgVGhlIG9wZW4gZGVwdGggYXQgdGhlIHN0YXJ0IG9mIHRoZSBmcmFnbWVudC5cbiAgICAqL1xuICAgIG9wZW5TdGFydCwgXG4gICAgLyoqXG4gICAgVGhlIG9wZW4gZGVwdGggYXQgdGhlIGVuZC5cbiAgICAqL1xuICAgIG9wZW5FbmQpIHtcbiAgICAgICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICAgICAgdGhpcy5vcGVuU3RhcnQgPSBvcGVuU3RhcnQ7XG4gICAgICAgIHRoaXMub3BlbkVuZCA9IG9wZW5FbmQ7XG4gICAgfVxuICAgIC8qKlxuICAgIFRoZSBzaXplIHRoaXMgc2xpY2Ugd291bGQgYWRkIHdoZW4gaW5zZXJ0ZWQgaW50byBhIGRvY3VtZW50LlxuICAgICovXG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnQuc2l6ZSAtIHRoaXMub3BlblN0YXJ0IC0gdGhpcy5vcGVuRW5kO1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIGluc2VydEF0KHBvcywgZnJhZ21lbnQpIHtcbiAgICAgICAgbGV0IGNvbnRlbnQgPSBpbnNlcnRJbnRvKHRoaXMuY29udGVudCwgcG9zICsgdGhpcy5vcGVuU3RhcnQsIGZyYWdtZW50KTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQgJiYgbmV3IFNsaWNlKGNvbnRlbnQsIHRoaXMub3BlblN0YXJ0LCB0aGlzLm9wZW5FbmQpO1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHJlbW92ZUJldHdlZW4oZnJvbSwgdG8pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTbGljZShyZW1vdmVSYW5nZSh0aGlzLmNvbnRlbnQsIGZyb20gKyB0aGlzLm9wZW5TdGFydCwgdG8gKyB0aGlzLm9wZW5TdGFydCksIHRoaXMub3BlblN0YXJ0LCB0aGlzLm9wZW5FbmQpO1xuICAgIH1cbiAgICAvKipcbiAgICBUZXN0cyB3aGV0aGVyIHRoaXMgc2xpY2UgaXMgZXF1YWwgdG8gYW5vdGhlciBzbGljZS5cbiAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnQuZXEob3RoZXIuY29udGVudCkgJiYgdGhpcy5vcGVuU3RhcnQgPT0gb3RoZXIub3BlblN0YXJ0ICYmIHRoaXMub3BlbkVuZCA9PSBvdGhlci5vcGVuRW5kO1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50ICsgXCIoXCIgKyB0aGlzLm9wZW5TdGFydCArIFwiLFwiICsgdGhpcy5vcGVuRW5kICsgXCIpXCI7XG4gICAgfVxuICAgIC8qKlxuICAgIENvbnZlcnQgYSBzbGljZSB0byBhIEpTT04tc2VyaWFsaXphYmxlIHJlcHJlc2VudGF0aW9uLlxuICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICBpZiAoIXRoaXMuY29udGVudC5zaXplKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGxldCBqc29uID0geyBjb250ZW50OiB0aGlzLmNvbnRlbnQudG9KU09OKCkgfTtcbiAgICAgICAgaWYgKHRoaXMub3BlblN0YXJ0ID4gMClcbiAgICAgICAgICAgIGpzb24ub3BlblN0YXJ0ID0gdGhpcy5vcGVuU3RhcnQ7XG4gICAgICAgIGlmICh0aGlzLm9wZW5FbmQgPiAwKVxuICAgICAgICAgICAganNvbi5vcGVuRW5kID0gdGhpcy5vcGVuRW5kO1xuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgRGVzZXJpYWxpemUgYSBzbGljZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uLlxuICAgICovXG4gICAgc3RhdGljIGZyb21KU09OKHNjaGVtYSwganNvbikge1xuICAgICAgICBpZiAoIWpzb24pXG4gICAgICAgICAgICByZXR1cm4gU2xpY2UuZW1wdHk7XG4gICAgICAgIGxldCBvcGVuU3RhcnQgPSBqc29uLm9wZW5TdGFydCB8fCAwLCBvcGVuRW5kID0ganNvbi5vcGVuRW5kIHx8IDA7XG4gICAgICAgIGlmICh0eXBlb2Ygb3BlblN0YXJ0ICE9IFwibnVtYmVyXCIgfHwgdHlwZW9mIG9wZW5FbmQgIT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBpbnB1dCBmb3IgU2xpY2UuZnJvbUpTT05cIik7XG4gICAgICAgIHJldHVybiBuZXcgU2xpY2UoRnJhZ21lbnQuZnJvbUpTT04oc2NoZW1hLCBqc29uLmNvbnRlbnQpLCBvcGVuU3RhcnQsIG9wZW5FbmQpO1xuICAgIH1cbiAgICAvKipcbiAgICBDcmVhdGUgYSBzbGljZSBmcm9tIGEgZnJhZ21lbnQgYnkgdGFraW5nIHRoZSBtYXhpbXVtIHBvc3NpYmxlXG4gICAgb3BlbiB2YWx1ZSBvbiBib3RoIHNpZGUgb2YgdGhlIGZyYWdtZW50LlxuICAgICovXG4gICAgc3RhdGljIG1heE9wZW4oZnJhZ21lbnQsIG9wZW5Jc29sYXRpbmcgPSB0cnVlKSB7XG4gICAgICAgIGxldCBvcGVuU3RhcnQgPSAwLCBvcGVuRW5kID0gMDtcbiAgICAgICAgZm9yIChsZXQgbiA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7IG4gJiYgIW4uaXNMZWFmICYmIChvcGVuSXNvbGF0aW5nIHx8ICFuLnR5cGUuc3BlYy5pc29sYXRpbmcpOyBuID0gbi5maXJzdENoaWxkKVxuICAgICAgICAgICAgb3BlblN0YXJ0Kys7XG4gICAgICAgIGZvciAobGV0IG4gPSBmcmFnbWVudC5sYXN0Q2hpbGQ7IG4gJiYgIW4uaXNMZWFmICYmIChvcGVuSXNvbGF0aW5nIHx8ICFuLnR5cGUuc3BlYy5pc29sYXRpbmcpOyBuID0gbi5sYXN0Q2hpbGQpXG4gICAgICAgICAgICBvcGVuRW5kKys7XG4gICAgICAgIHJldHVybiBuZXcgU2xpY2UoZnJhZ21lbnQsIG9wZW5TdGFydCwgb3BlbkVuZCk7XG4gICAgfVxufVxuLyoqXG5UaGUgZW1wdHkgc2xpY2UuXG4qL1xuU2xpY2UuZW1wdHkgPSBuZXcgU2xpY2UoRnJhZ21lbnQuZW1wdHksIDAsIDApO1xuZnVuY3Rpb24gcmVtb3ZlUmFuZ2UoY29udGVudCwgZnJvbSwgdG8pIHtcbiAgICBsZXQgeyBpbmRleCwgb2Zmc2V0IH0gPSBjb250ZW50LmZpbmRJbmRleChmcm9tKSwgY2hpbGQgPSBjb250ZW50Lm1heWJlQ2hpbGQoaW5kZXgpO1xuICAgIGxldCB7IGluZGV4OiBpbmRleFRvLCBvZmZzZXQ6IG9mZnNldFRvIH0gPSBjb250ZW50LmZpbmRJbmRleCh0byk7XG4gICAgaWYgKG9mZnNldCA9PSBmcm9tIHx8IGNoaWxkLmlzVGV4dCkge1xuICAgICAgICBpZiAob2Zmc2V0VG8gIT0gdG8gJiYgIWNvbnRlbnQuY2hpbGQoaW5kZXhUbykuaXNUZXh0KVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJSZW1vdmluZyBub24tZmxhdCByYW5nZVwiKTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQuY3V0KDAsIGZyb20pLmFwcGVuZChjb250ZW50LmN1dCh0bykpO1xuICAgIH1cbiAgICBpZiAoaW5kZXggIT0gaW5kZXhUbylcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJSZW1vdmluZyBub24tZmxhdCByYW5nZVwiKTtcbiAgICByZXR1cm4gY29udGVudC5yZXBsYWNlQ2hpbGQoaW5kZXgsIGNoaWxkLmNvcHkocmVtb3ZlUmFuZ2UoY2hpbGQuY29udGVudCwgZnJvbSAtIG9mZnNldCAtIDEsIHRvIC0gb2Zmc2V0IC0gMSkpKTtcbn1cbmZ1bmN0aW9uIGluc2VydEludG8oY29udGVudCwgZGlzdCwgaW5zZXJ0LCBwYXJlbnQpIHtcbiAgICBsZXQgeyBpbmRleCwgb2Zmc2V0IH0gPSBjb250ZW50LmZpbmRJbmRleChkaXN0KSwgY2hpbGQgPSBjb250ZW50Lm1heWJlQ2hpbGQoaW5kZXgpO1xuICAgIGlmIChvZmZzZXQgPT0gZGlzdCB8fCBjaGlsZC5pc1RleHQpIHtcbiAgICAgICAgaWYgKHBhcmVudCAmJiAhcGFyZW50LmNhblJlcGxhY2UoaW5kZXgsIGluZGV4LCBpbnNlcnQpKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBjb250ZW50LmN1dCgwLCBkaXN0KS5hcHBlbmQoaW5zZXJ0KS5hcHBlbmQoY29udGVudC5jdXQoZGlzdCkpO1xuICAgIH1cbiAgICBsZXQgaW5uZXIgPSBpbnNlcnRJbnRvKGNoaWxkLmNvbnRlbnQsIGRpc3QgLSBvZmZzZXQgLSAxLCBpbnNlcnQpO1xuICAgIHJldHVybiBpbm5lciAmJiBjb250ZW50LnJlcGxhY2VDaGlsZChpbmRleCwgY2hpbGQuY29weShpbm5lcikpO1xufVxuZnVuY3Rpb24gcmVwbGFjZSgkZnJvbSwgJHRvLCBzbGljZSkge1xuICAgIGlmIChzbGljZS5vcGVuU3RhcnQgPiAkZnJvbS5kZXB0aClcbiAgICAgICAgdGhyb3cgbmV3IFJlcGxhY2VFcnJvcihcIkluc2VydGVkIGNvbnRlbnQgZGVlcGVyIHRoYW4gaW5zZXJ0aW9uIHBvc2l0aW9uXCIpO1xuICAgIGlmICgkZnJvbS5kZXB0aCAtIHNsaWNlLm9wZW5TdGFydCAhPSAkdG8uZGVwdGggLSBzbGljZS5vcGVuRW5kKVxuICAgICAgICB0aHJvdyBuZXcgUmVwbGFjZUVycm9yKFwiSW5jb25zaXN0ZW50IG9wZW4gZGVwdGhzXCIpO1xuICAgIHJldHVybiByZXBsYWNlT3V0ZXIoJGZyb20sICR0bywgc2xpY2UsIDApO1xufVxuZnVuY3Rpb24gcmVwbGFjZU91dGVyKCRmcm9tLCAkdG8sIHNsaWNlLCBkZXB0aCkge1xuICAgIGxldCBpbmRleCA9ICRmcm9tLmluZGV4KGRlcHRoKSwgbm9kZSA9ICRmcm9tLm5vZGUoZGVwdGgpO1xuICAgIGlmIChpbmRleCA9PSAkdG8uaW5kZXgoZGVwdGgpICYmIGRlcHRoIDwgJGZyb20uZGVwdGggLSBzbGljZS5vcGVuU3RhcnQpIHtcbiAgICAgICAgbGV0IGlubmVyID0gcmVwbGFjZU91dGVyKCRmcm9tLCAkdG8sIHNsaWNlLCBkZXB0aCArIDEpO1xuICAgICAgICByZXR1cm4gbm9kZS5jb3B5KG5vZGUuY29udGVudC5yZXBsYWNlQ2hpbGQoaW5kZXgsIGlubmVyKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFzbGljZS5jb250ZW50LnNpemUpIHtcbiAgICAgICAgcmV0dXJuIGNsb3NlKG5vZGUsIHJlcGxhY2VUd29XYXkoJGZyb20sICR0bywgZGVwdGgpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNsaWNlLm9wZW5TdGFydCAmJiAhc2xpY2Uub3BlbkVuZCAmJiAkZnJvbS5kZXB0aCA9PSBkZXB0aCAmJiAkdG8uZGVwdGggPT0gZGVwdGgpIHsgLy8gU2ltcGxlLCBmbGF0IGNhc2VcbiAgICAgICAgbGV0IHBhcmVudCA9ICRmcm9tLnBhcmVudCwgY29udGVudCA9IHBhcmVudC5jb250ZW50O1xuICAgICAgICByZXR1cm4gY2xvc2UocGFyZW50LCBjb250ZW50LmN1dCgwLCAkZnJvbS5wYXJlbnRPZmZzZXQpLmFwcGVuZChzbGljZS5jb250ZW50KS5hcHBlbmQoY29udGVudC5jdXQoJHRvLnBhcmVudE9mZnNldCkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCB7IHN0YXJ0LCBlbmQgfSA9IHByZXBhcmVTbGljZUZvclJlcGxhY2Uoc2xpY2UsICRmcm9tKTtcbiAgICAgICAgcmV0dXJuIGNsb3NlKG5vZGUsIHJlcGxhY2VUaHJlZVdheSgkZnJvbSwgc3RhcnQsIGVuZCwgJHRvLCBkZXB0aCkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrSm9pbihtYWluLCBzdWIpIHtcbiAgICBpZiAoIXN1Yi50eXBlLmNvbXBhdGlibGVDb250ZW50KG1haW4udHlwZSkpXG4gICAgICAgIHRocm93IG5ldyBSZXBsYWNlRXJyb3IoXCJDYW5ub3Qgam9pbiBcIiArIHN1Yi50eXBlLm5hbWUgKyBcIiBvbnRvIFwiICsgbWFpbi50eXBlLm5hbWUpO1xufVxuZnVuY3Rpb24gam9pbmFibGUoJGJlZm9yZSwgJGFmdGVyLCBkZXB0aCkge1xuICAgIGxldCBub2RlID0gJGJlZm9yZS5ub2RlKGRlcHRoKTtcbiAgICBjaGVja0pvaW4obm9kZSwgJGFmdGVyLm5vZGUoZGVwdGgpKTtcbiAgICByZXR1cm4gbm9kZTtcbn1cbmZ1bmN0aW9uIGFkZE5vZGUoY2hpbGQsIHRhcmdldCkge1xuICAgIGxldCBsYXN0ID0gdGFyZ2V0Lmxlbmd0aCAtIDE7XG4gICAgaWYgKGxhc3QgPj0gMCAmJiBjaGlsZC5pc1RleHQgJiYgY2hpbGQuc2FtZU1hcmt1cCh0YXJnZXRbbGFzdF0pKVxuICAgICAgICB0YXJnZXRbbGFzdF0gPSBjaGlsZC53aXRoVGV4dCh0YXJnZXRbbGFzdF0udGV4dCArIGNoaWxkLnRleHQpO1xuICAgIGVsc2VcbiAgICAgICAgdGFyZ2V0LnB1c2goY2hpbGQpO1xufVxuZnVuY3Rpb24gYWRkUmFuZ2UoJHN0YXJ0LCAkZW5kLCBkZXB0aCwgdGFyZ2V0KSB7XG4gICAgbGV0IG5vZGUgPSAoJGVuZCB8fCAkc3RhcnQpLm5vZGUoZGVwdGgpO1xuICAgIGxldCBzdGFydEluZGV4ID0gMCwgZW5kSW5kZXggPSAkZW5kID8gJGVuZC5pbmRleChkZXB0aCkgOiBub2RlLmNoaWxkQ291bnQ7XG4gICAgaWYgKCRzdGFydCkge1xuICAgICAgICBzdGFydEluZGV4ID0gJHN0YXJ0LmluZGV4KGRlcHRoKTtcbiAgICAgICAgaWYgKCRzdGFydC5kZXB0aCA+IGRlcHRoKSB7XG4gICAgICAgICAgICBzdGFydEluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoJHN0YXJ0LnRleHRPZmZzZXQpIHtcbiAgICAgICAgICAgIGFkZE5vZGUoJHN0YXJ0Lm5vZGVBZnRlciwgdGFyZ2V0KTtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXgrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZEluZGV4OyBpKyspXG4gICAgICAgIGFkZE5vZGUobm9kZS5jaGlsZChpKSwgdGFyZ2V0KTtcbiAgICBpZiAoJGVuZCAmJiAkZW5kLmRlcHRoID09IGRlcHRoICYmICRlbmQudGV4dE9mZnNldClcbiAgICAgICAgYWRkTm9kZSgkZW5kLm5vZGVCZWZvcmUsIHRhcmdldCk7XG59XG5mdW5jdGlvbiBjbG9zZShub2RlLCBjb250ZW50KSB7XG4gICAgbm9kZS50eXBlLmNoZWNrQ29udGVudChjb250ZW50KTtcbiAgICByZXR1cm4gbm9kZS5jb3B5KGNvbnRlbnQpO1xufVxuZnVuY3Rpb24gcmVwbGFjZVRocmVlV2F5KCRmcm9tLCAkc3RhcnQsICRlbmQsICR0bywgZGVwdGgpIHtcbiAgICBsZXQgb3BlblN0YXJ0ID0gJGZyb20uZGVwdGggPiBkZXB0aCAmJiBqb2luYWJsZSgkZnJvbSwgJHN0YXJ0LCBkZXB0aCArIDEpO1xuICAgIGxldCBvcGVuRW5kID0gJHRvLmRlcHRoID4gZGVwdGggJiYgam9pbmFibGUoJGVuZCwgJHRvLCBkZXB0aCArIDEpO1xuICAgIGxldCBjb250ZW50ID0gW107XG4gICAgYWRkUmFuZ2UobnVsbCwgJGZyb20sIGRlcHRoLCBjb250ZW50KTtcbiAgICBpZiAob3BlblN0YXJ0ICYmIG9wZW5FbmQgJiYgJHN0YXJ0LmluZGV4KGRlcHRoKSA9PSAkZW5kLmluZGV4KGRlcHRoKSkge1xuICAgICAgICBjaGVja0pvaW4ob3BlblN0YXJ0LCBvcGVuRW5kKTtcbiAgICAgICAgYWRkTm9kZShjbG9zZShvcGVuU3RhcnQsIHJlcGxhY2VUaHJlZVdheSgkZnJvbSwgJHN0YXJ0LCAkZW5kLCAkdG8sIGRlcHRoICsgMSkpLCBjb250ZW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChvcGVuU3RhcnQpXG4gICAgICAgICAgICBhZGROb2RlKGNsb3NlKG9wZW5TdGFydCwgcmVwbGFjZVR3b1dheSgkZnJvbSwgJHN0YXJ0LCBkZXB0aCArIDEpKSwgY29udGVudCk7XG4gICAgICAgIGFkZFJhbmdlKCRzdGFydCwgJGVuZCwgZGVwdGgsIGNvbnRlbnQpO1xuICAgICAgICBpZiAob3BlbkVuZClcbiAgICAgICAgICAgIGFkZE5vZGUoY2xvc2Uob3BlbkVuZCwgcmVwbGFjZVR3b1dheSgkZW5kLCAkdG8sIGRlcHRoICsgMSkpLCBjb250ZW50KTtcbiAgICB9XG4gICAgYWRkUmFuZ2UoJHRvLCBudWxsLCBkZXB0aCwgY29udGVudCk7XG4gICAgcmV0dXJuIG5ldyBGcmFnbWVudChjb250ZW50KTtcbn1cbmZ1bmN0aW9uIHJlcGxhY2VUd29XYXkoJGZyb20sICR0bywgZGVwdGgpIHtcbiAgICBsZXQgY29udGVudCA9IFtdO1xuICAgIGFkZFJhbmdlKG51bGwsICRmcm9tLCBkZXB0aCwgY29udGVudCk7XG4gICAgaWYgKCRmcm9tLmRlcHRoID4gZGVwdGgpIHtcbiAgICAgICAgbGV0IHR5cGUgPSBqb2luYWJsZSgkZnJvbSwgJHRvLCBkZXB0aCArIDEpO1xuICAgICAgICBhZGROb2RlKGNsb3NlKHR5cGUsIHJlcGxhY2VUd29XYXkoJGZyb20sICR0bywgZGVwdGggKyAxKSksIGNvbnRlbnQpO1xuICAgIH1cbiAgICBhZGRSYW5nZSgkdG8sIG51bGwsIGRlcHRoLCBjb250ZW50KTtcbiAgICByZXR1cm4gbmV3IEZyYWdtZW50KGNvbnRlbnQpO1xufVxuZnVuY3Rpb24gcHJlcGFyZVNsaWNlRm9yUmVwbGFjZShzbGljZSwgJGFsb25nKSB7XG4gICAgbGV0IGV4dHJhID0gJGFsb25nLmRlcHRoIC0gc2xpY2Uub3BlblN0YXJ0LCBwYXJlbnQgPSAkYWxvbmcubm9kZShleHRyYSk7XG4gICAgbGV0IG5vZGUgPSBwYXJlbnQuY29weShzbGljZS5jb250ZW50KTtcbiAgICBmb3IgKGxldCBpID0gZXh0cmEgLSAxOyBpID49IDA7IGktLSlcbiAgICAgICAgbm9kZSA9ICRhbG9uZy5ub2RlKGkpLmNvcHkoRnJhZ21lbnQuZnJvbShub2RlKSk7XG4gICAgcmV0dXJuIHsgc3RhcnQ6IG5vZGUucmVzb2x2ZU5vQ2FjaGUoc2xpY2Uub3BlblN0YXJ0ICsgZXh0cmEpLFxuICAgICAgICBlbmQ6IG5vZGUucmVzb2x2ZU5vQ2FjaGUobm9kZS5jb250ZW50LnNpemUgLSBzbGljZS5vcGVuRW5kIC0gZXh0cmEpIH07XG59XG5cbi8qKlxuWW91IGNhbiBbX3Jlc29sdmVfXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jbW9kZWwuTm9kZS5yZXNvbHZlKSBhIHBvc2l0aW9uIHRvIGdldCBtb3JlXG5pbmZvcm1hdGlvbiBhYm91dCBpdC4gT2JqZWN0cyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBzdWNoIGFcbnJlc29sdmVkIHBvc2l0aW9uLCBwcm92aWRpbmcgdmFyaW91cyBwaWVjZXMgb2YgY29udGV4dFxuaW5mb3JtYXRpb24sIGFuZCBzb21lIGhlbHBlciBtZXRob2RzLlxuXG5UaHJvdWdob3V0IHRoaXMgaW50ZXJmYWNlLCBtZXRob2RzIHRoYXQgdGFrZSBhbiBvcHRpb25hbCBgZGVwdGhgXG5wYXJhbWV0ZXIgd2lsbCBpbnRlcnByZXQgdW5kZWZpbmVkIGFzIGB0aGlzLmRlcHRoYCBhbmQgbmVnYXRpdmVcbm51bWJlcnMgYXMgYHRoaXMuZGVwdGggKyB2YWx1ZWAuXG4qL1xuY2xhc3MgUmVzb2x2ZWRQb3Mge1xuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgVGhlIHBvc2l0aW9uIHRoYXQgd2FzIHJlc29sdmVkLlxuICAgICovXG4gICAgcG9zLCBcbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHBhdGgsIFxuICAgIC8qKlxuICAgIFRoZSBvZmZzZXQgdGhpcyBwb3NpdGlvbiBoYXMgaW50byBpdHMgcGFyZW50IG5vZGUuXG4gICAgKi9cbiAgICBwYXJlbnRPZmZzZXQpIHtcbiAgICAgICAgdGhpcy5wb3MgPSBwb3M7XG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgICAgIHRoaXMucGFyZW50T2Zmc2V0ID0gcGFyZW50T2Zmc2V0O1xuICAgICAgICB0aGlzLmRlcHRoID0gcGF0aC5sZW5ndGggLyAzIC0gMTtcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICByZXNvbHZlRGVwdGgodmFsKSB7XG4gICAgICAgIGlmICh2YWwgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlcHRoO1xuICAgICAgICBpZiAodmFsIDwgMClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlcHRoICsgdmFsO1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICAvKipcbiAgICBUaGUgcGFyZW50IG5vZGUgdGhhdCB0aGUgcG9zaXRpb24gcG9pbnRzIGludG8uIE5vdGUgdGhhdCBldmVuIGlmXG4gICAgYSBwb3NpdGlvbiBwb2ludHMgaW50byBhIHRleHQgbm9kZSwgdGhhdCBub2RlIGlzIG5vdCBjb25zaWRlcmVkXG4gICAgdGhlIHBhcmVudOKAlHRleHQgbm9kZXMgYXJlIOKAmGZsYXTigJkgaW4gdGhpcyBtb2RlbCwgYW5kIGhhdmUgbm8gY29udGVudC5cbiAgICAqL1xuICAgIGdldCBwYXJlbnQoKSB7IHJldHVybiB0aGlzLm5vZGUodGhpcy5kZXB0aCk7IH1cbiAgICAvKipcbiAgICBUaGUgcm9vdCBub2RlIGluIHdoaWNoIHRoZSBwb3NpdGlvbiB3YXMgcmVzb2x2ZWQuXG4gICAgKi9cbiAgICBnZXQgZG9jKCkgeyByZXR1cm4gdGhpcy5ub2RlKDApOyB9XG4gICAgLyoqXG4gICAgVGhlIGFuY2VzdG9yIG5vZGUgYXQgdGhlIGdpdmVuIGxldmVsLiBgcC5ub2RlKHAuZGVwdGgpYCBpcyB0aGVcbiAgICBzYW1lIGFzIGBwLnBhcmVudGAuXG4gICAgKi9cbiAgICBub2RlKGRlcHRoKSB7IHJldHVybiB0aGlzLnBhdGhbdGhpcy5yZXNvbHZlRGVwdGgoZGVwdGgpICogM107IH1cbiAgICAvKipcbiAgICBUaGUgaW5kZXggaW50byB0aGUgYW5jZXN0b3IgYXQgdGhlIGdpdmVuIGxldmVsLiBJZiB0aGlzIHBvaW50c1xuICAgIGF0IHRoZSAzcmQgbm9kZSBpbiB0aGUgMm5kIHBhcmFncmFwaCBvbiB0aGUgdG9wIGxldmVsLCBmb3JcbiAgICBleGFtcGxlLCBgcC5pbmRleCgwKWAgaXMgMSBhbmQgYHAuaW5kZXgoMSlgIGlzIDIuXG4gICAgKi9cbiAgICBpbmRleChkZXB0aCkgeyByZXR1cm4gdGhpcy5wYXRoW3RoaXMucmVzb2x2ZURlcHRoKGRlcHRoKSAqIDMgKyAxXTsgfVxuICAgIC8qKlxuICAgIFRoZSBpbmRleCBwb2ludGluZyBhZnRlciB0aGlzIHBvc2l0aW9uIGludG8gdGhlIGFuY2VzdG9yIGF0IHRoZVxuICAgIGdpdmVuIGxldmVsLlxuICAgICovXG4gICAgaW5kZXhBZnRlcihkZXB0aCkge1xuICAgICAgICBkZXB0aCA9IHRoaXMucmVzb2x2ZURlcHRoKGRlcHRoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXgoZGVwdGgpICsgKGRlcHRoID09IHRoaXMuZGVwdGggJiYgIXRoaXMudGV4dE9mZnNldCA/IDAgOiAxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgVGhlIChhYnNvbHV0ZSkgcG9zaXRpb24gYXQgdGhlIHN0YXJ0IG9mIHRoZSBub2RlIGF0IHRoZSBnaXZlblxuICAgIGxldmVsLlxuICAgICovXG4gICAgc3RhcnQoZGVwdGgpIHtcbiAgICAgICAgZGVwdGggPSB0aGlzLnJlc29sdmVEZXB0aChkZXB0aCk7XG4gICAgICAgIHJldHVybiBkZXB0aCA9PSAwID8gMCA6IHRoaXMucGF0aFtkZXB0aCAqIDMgLSAxXSArIDE7XG4gICAgfVxuICAgIC8qKlxuICAgIFRoZSAoYWJzb2x1dGUpIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIG5vZGUgYXQgdGhlIGdpdmVuXG4gICAgbGV2ZWwuXG4gICAgKi9cbiAgICBlbmQoZGVwdGgpIHtcbiAgICAgICAgZGVwdGggPSB0aGlzLnJlc29sdmVEZXB0aChkZXB0aCk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0KGRlcHRoKSArIHRoaXMubm9kZShkZXB0aCkuY29udGVudC5zaXplO1xuICAgIH1cbiAgICAvKipcbiAgICBUaGUgKGFic29sdXRlKSBwb3NpdGlvbiBkaXJlY3RseSBiZWZvcmUgdGhlIHdyYXBwaW5nIG5vZGUgYXQgdGhlXG4gICAgZ2l2ZW4gbGV2ZWwsIG9yLCB3aGVuIGBkZXB0aGAgaXMgYHRoaXMuZGVwdGggKyAxYCwgdGhlIG9yaWdpbmFsXG4gICAgcG9zaXRpb24uXG4gICAgKi9cbiAgICBiZWZvcmUoZGVwdGgpIHtcbiAgICAgICAgZGVwdGggPSB0aGlzLnJlc29sdmVEZXB0aChkZXB0aCk7XG4gICAgICAgIGlmICghZGVwdGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZXJlIGlzIG5vIHBvc2l0aW9uIGJlZm9yZSB0aGUgdG9wLWxldmVsIG5vZGVcIik7XG4gICAgICAgIHJldHVybiBkZXB0aCA9PSB0aGlzLmRlcHRoICsgMSA/IHRoaXMucG9zIDogdGhpcy5wYXRoW2RlcHRoICogMyAtIDFdO1xuICAgIH1cbiAgICAvKipcbiAgICBUaGUgKGFic29sdXRlKSBwb3NpdGlvbiBkaXJlY3RseSBhZnRlciB0aGUgd3JhcHBpbmcgbm9kZSBhdCB0aGVcbiAgICBnaXZlbiBsZXZlbCwgb3IgdGhlIG9yaWdpbmFsIHBvc2l0aW9uIHdoZW4gYGRlcHRoYCBpcyBgdGhpcy5kZXB0aCArIDFgLlxuICAgICovXG4gICAgYWZ0ZXIoZGVwdGgpIHtcbiAgICAgICAgZGVwdGggPSB0aGlzLnJlc29sdmVEZXB0aChkZXB0aCk7XG4gICAgICAgIGlmICghZGVwdGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZXJlIGlzIG5vIHBvc2l0aW9uIGFmdGVyIHRoZSB0b3AtbGV2ZWwgbm9kZVwiKTtcbiAgICAgICAgcmV0dXJuIGRlcHRoID09IHRoaXMuZGVwdGggKyAxID8gdGhpcy5wb3MgOiB0aGlzLnBhdGhbZGVwdGggKiAzIC0gMV0gKyB0aGlzLnBhdGhbZGVwdGggKiAzXS5ub2RlU2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgV2hlbiB0aGlzIHBvc2l0aW9uIHBvaW50cyBpbnRvIGEgdGV4dCBub2RlLCB0aGlzIHJldHVybnMgdGhlXG4gICAgZGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9zaXRpb24gYW5kIHRoZSBzdGFydCBvZiB0aGUgdGV4dCBub2RlLlxuICAgIFdpbGwgYmUgemVybyBmb3IgcG9zaXRpb25zIHRoYXQgcG9pbnQgYmV0d2VlbiBub2Rlcy5cbiAgICAqL1xuICAgIGdldCB0ZXh0T2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5wb3MgLSB0aGlzLnBhdGhbdGhpcy5wYXRoLmxlbmd0aCAtIDFdOyB9XG4gICAgLyoqXG4gICAgR2V0IHRoZSBub2RlIGRpcmVjdGx5IGFmdGVyIHRoZSBwb3NpdGlvbiwgaWYgYW55LiBJZiB0aGUgcG9zaXRpb25cbiAgICBwb2ludHMgaW50byBhIHRleHQgbm9kZSwgb25seSB0aGUgcGFydCBvZiB0aGF0IG5vZGUgYWZ0ZXIgdGhlXG4gICAgcG9zaXRpb24gaXMgcmV0dXJuZWQuXG4gICAgKi9cbiAgICBnZXQgbm9kZUFmdGVyKCkge1xuICAgICAgICBsZXQgcGFyZW50ID0gdGhpcy5wYXJlbnQsIGluZGV4ID0gdGhpcy5pbmRleCh0aGlzLmRlcHRoKTtcbiAgICAgICAgaWYgKGluZGV4ID09IHBhcmVudC5jaGlsZENvdW50KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGxldCBkT2ZmID0gdGhpcy5wb3MgLSB0aGlzLnBhdGhbdGhpcy5wYXRoLmxlbmd0aCAtIDFdLCBjaGlsZCA9IHBhcmVudC5jaGlsZChpbmRleCk7XG4gICAgICAgIHJldHVybiBkT2ZmID8gcGFyZW50LmNoaWxkKGluZGV4KS5jdXQoZE9mZikgOiBjaGlsZDtcbiAgICB9XG4gICAgLyoqXG4gICAgR2V0IHRoZSBub2RlIGRpcmVjdGx5IGJlZm9yZSB0aGUgcG9zaXRpb24sIGlmIGFueS4gSWYgdGhlXG4gICAgcG9zaXRpb24gcG9pbnRzIGludG8gYSB0ZXh0IG5vZGUsIG9ubHkgdGhlIHBhcnQgb2YgdGhhdCBub2RlXG4gICAgYmVmb3JlIHRoZSBwb3NpdGlvbiBpcyByZXR1cm5lZC5cbiAgICAqL1xuICAgIGdldCBub2RlQmVmb3JlKCkge1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmluZGV4KHRoaXMuZGVwdGgpO1xuICAgICAgICBsZXQgZE9mZiA9IHRoaXMucG9zIC0gdGhpcy5wYXRoW3RoaXMucGF0aC5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKGRPZmYpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuY2hpbGQoaW5kZXgpLmN1dCgwLCBkT2ZmKTtcbiAgICAgICAgcmV0dXJuIGluZGV4ID09IDAgPyBudWxsIDogdGhpcy5wYXJlbnQuY2hpbGQoaW5kZXggLSAxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgR2V0IHRoZSBwb3NpdGlvbiBhdCB0aGUgZ2l2ZW4gaW5kZXggaW4gdGhlIHBhcmVudCBub2RlIGF0IHRoZVxuICAgIGdpdmVuIGRlcHRoICh3aGljaCBkZWZhdWx0cyB0byBgdGhpcy5kZXB0aGApLlxuICAgICovXG4gICAgcG9zQXRJbmRleChpbmRleCwgZGVwdGgpIHtcbiAgICAgICAgZGVwdGggPSB0aGlzLnJlc29sdmVEZXB0aChkZXB0aCk7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy5wYXRoW2RlcHRoICogM10sIHBvcyA9IGRlcHRoID09IDAgPyAwIDogdGhpcy5wYXRoW2RlcHRoICogMyAtIDFdICsgMTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKVxuICAgICAgICAgICAgcG9zICs9IG5vZGUuY2hpbGQoaSkubm9kZVNpemU7XG4gICAgICAgIHJldHVybiBwb3M7XG4gICAgfVxuICAgIC8qKlxuICAgIEdldCB0aGUgbWFya3MgYXQgdGhpcyBwb3NpdGlvbiwgZmFjdG9yaW5nIGluIHRoZSBzdXJyb3VuZGluZ1xuICAgIG1hcmtzJyBbYGluY2x1c2l2ZWBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNtb2RlbC5NYXJrU3BlYy5pbmNsdXNpdmUpIHByb3BlcnR5LiBJZiB0aGVcbiAgICBwb3NpdGlvbiBpcyBhdCB0aGUgc3RhcnQgb2YgYSBub24tZW1wdHkgbm9kZSwgdGhlIG1hcmtzIG9mIHRoZVxuICAgIG5vZGUgYWZ0ZXIgaXQgKGlmIGFueSkgYXJlIHJldHVybmVkLlxuICAgICovXG4gICAgbWFya3MoKSB7XG4gICAgICAgIGxldCBwYXJlbnQgPSB0aGlzLnBhcmVudCwgaW5kZXggPSB0aGlzLmluZGV4KCk7XG4gICAgICAgIC8vIEluIGFuIGVtcHR5IHBhcmVudCwgcmV0dXJuIHRoZSBlbXB0eSBhcnJheVxuICAgICAgICBpZiAocGFyZW50LmNvbnRlbnQuc2l6ZSA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIE1hcmsubm9uZTtcbiAgICAgICAgLy8gV2hlbiBpbnNpZGUgYSB0ZXh0IG5vZGUsIGp1c3QgcmV0dXJuIHRoZSB0ZXh0IG5vZGUncyBtYXJrc1xuICAgICAgICBpZiAodGhpcy50ZXh0T2Zmc2V0KVxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5jaGlsZChpbmRleCkubWFya3M7XG4gICAgICAgIGxldCBtYWluID0gcGFyZW50Lm1heWJlQ2hpbGQoaW5kZXggLSAxKSwgb3RoZXIgPSBwYXJlbnQubWF5YmVDaGlsZChpbmRleCk7XG4gICAgICAgIC8vIElmIHRoZSBgYWZ0ZXJgIGZsYWcgaXMgdHJ1ZSBvZiB0aGVyZSBpcyBubyBub2RlIGJlZm9yZSwgbWFrZVxuICAgICAgICAvLyB0aGUgbm9kZSBhZnRlciB0aGlzIHBvc2l0aW9uIHRoZSBtYWluIHJlZmVyZW5jZS5cbiAgICAgICAgaWYgKCFtYWluKSB7XG4gICAgICAgICAgICBsZXQgdG1wID0gbWFpbjtcbiAgICAgICAgICAgIG1haW4gPSBvdGhlcjtcbiAgICAgICAgICAgIG90aGVyID0gdG1wO1xuICAgICAgICB9XG4gICAgICAgIC8vIFVzZSBhbGwgbWFya3MgaW4gdGhlIG1haW4gbm9kZSwgZXhjZXB0IHRob3NlIHRoYXQgaGF2ZVxuICAgICAgICAvLyBgaW5jbHVzaXZlYCBzZXQgdG8gZmFsc2UgYW5kIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3RoZXIgbm9kZS5cbiAgICAgICAgbGV0IG1hcmtzID0gbWFpbi5tYXJrcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGlmIChtYXJrc1tpXS50eXBlLnNwZWMuaW5jbHVzaXZlID09PSBmYWxzZSAmJiAoIW90aGVyIHx8ICFtYXJrc1tpXS5pc0luU2V0KG90aGVyLm1hcmtzKSkpXG4gICAgICAgICAgICAgICAgbWFya3MgPSBtYXJrc1tpLS1dLnJlbW92ZUZyb21TZXQobWFya3MpO1xuICAgICAgICByZXR1cm4gbWFya3M7XG4gICAgfVxuICAgIC8qKlxuICAgIEdldCB0aGUgbWFya3MgYWZ0ZXIgdGhlIGN1cnJlbnQgcG9zaXRpb24sIGlmIGFueSwgZXhjZXB0IHRob3NlXG4gICAgdGhhdCBhcmUgbm9uLWluY2x1c2l2ZSBhbmQgbm90IHByZXNlbnQgYXQgcG9zaXRpb24gYCRlbmRgLiBUaGlzXG4gICAgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgZ2V0dGluZyB0aGUgc2V0IG9mIG1hcmtzIHRvIHByZXNlcnZlIGFmdGVyIGFcbiAgICBkZWxldGlvbi4gV2lsbCByZXR1cm4gYG51bGxgIGlmIHRoaXMgcG9zaXRpb24gaXMgYXQgdGhlIGVuZCBvZlxuICAgIGl0cyBwYXJlbnQgbm9kZSBvciBpdHMgcGFyZW50IG5vZGUgaXNuJ3QgYSB0ZXh0YmxvY2sgKGluIHdoaWNoXG4gICAgY2FzZSBubyBtYXJrcyBzaG91bGQgYmUgcHJlc2VydmVkKS5cbiAgICAqL1xuICAgIG1hcmtzQWNyb3NzKCRlbmQpIHtcbiAgICAgICAgbGV0IGFmdGVyID0gdGhpcy5wYXJlbnQubWF5YmVDaGlsZCh0aGlzLmluZGV4KCkpO1xuICAgICAgICBpZiAoIWFmdGVyIHx8ICFhZnRlci5pc0lubGluZSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBsZXQgbWFya3MgPSBhZnRlci5tYXJrcywgbmV4dCA9ICRlbmQucGFyZW50Lm1heWJlQ2hpbGQoJGVuZC5pbmRleCgpKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGlmIChtYXJrc1tpXS50eXBlLnNwZWMuaW5jbHVzaXZlID09PSBmYWxzZSAmJiAoIW5leHQgfHwgIW1hcmtzW2ldLmlzSW5TZXQobmV4dC5tYXJrcykpKVxuICAgICAgICAgICAgICAgIG1hcmtzID0gbWFya3NbaS0tXS5yZW1vdmVGcm9tU2V0KG1hcmtzKTtcbiAgICAgICAgcmV0dXJuIG1hcmtzO1xuICAgIH1cbiAgICAvKipcbiAgICBUaGUgZGVwdGggdXAgdG8gd2hpY2ggdGhpcyBwb3NpdGlvbiBhbmQgdGhlIGdpdmVuIChub24tcmVzb2x2ZWQpXG4gICAgcG9zaXRpb24gc2hhcmUgdGhlIHNhbWUgcGFyZW50IG5vZGVzLlxuICAgICovXG4gICAgc2hhcmVkRGVwdGgocG9zKSB7XG4gICAgICAgIGZvciAobGV0IGRlcHRoID0gdGhpcy5kZXB0aDsgZGVwdGggPiAwOyBkZXB0aC0tKVxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhcnQoZGVwdGgpIDw9IHBvcyAmJiB0aGlzLmVuZChkZXB0aCkgPj0gcG9zKVxuICAgICAgICAgICAgICAgIHJldHVybiBkZXB0aDtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIC8qKlxuICAgIFJldHVybnMgYSByYW5nZSBiYXNlZCBvbiB0aGUgcGxhY2Ugd2hlcmUgdGhpcyBwb3NpdGlvbiBhbmQgdGhlXG4gICAgZ2l2ZW4gcG9zaXRpb24gZGl2ZXJnZSBhcm91bmQgYmxvY2sgY29udGVudC4gSWYgYm90aCBwb2ludCBpbnRvXG4gICAgdGhlIHNhbWUgdGV4dGJsb2NrLCBmb3IgZXhhbXBsZSwgYSByYW5nZSBhcm91bmQgdGhhdCB0ZXh0YmxvY2tcbiAgICB3aWxsIGJlIHJldHVybmVkLiBJZiB0aGV5IHBvaW50IGludG8gZGlmZmVyZW50IGJsb2NrcywgdGhlIHJhbmdlXG4gICAgYXJvdW5kIHRob3NlIGJsb2NrcyBpbiB0aGVpciBzaGFyZWQgYW5jZXN0b3IgaXMgcmV0dXJuZWQuIFlvdSBjYW5cbiAgICBwYXNzIGluIGFuIG9wdGlvbmFsIHByZWRpY2F0ZSB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggYSBwYXJlbnRcbiAgICBub2RlIHRvIHNlZSBpZiBhIHJhbmdlIGludG8gdGhhdCBwYXJlbnQgaXMgYWNjZXB0YWJsZS5cbiAgICAqL1xuICAgIGJsb2NrUmFuZ2Uob3RoZXIgPSB0aGlzLCBwcmVkKSB7XG4gICAgICAgIGlmIChvdGhlci5wb3MgPCB0aGlzLnBvcylcbiAgICAgICAgICAgIHJldHVybiBvdGhlci5ibG9ja1JhbmdlKHRoaXMpO1xuICAgICAgICBmb3IgKGxldCBkID0gdGhpcy5kZXB0aCAtICh0aGlzLnBhcmVudC5pbmxpbmVDb250ZW50IHx8IHRoaXMucG9zID09IG90aGVyLnBvcyA/IDEgOiAwKTsgZCA+PSAwOyBkLS0pXG4gICAgICAgICAgICBpZiAob3RoZXIucG9zIDw9IHRoaXMuZW5kKGQpICYmICghcHJlZCB8fCBwcmVkKHRoaXMubm9kZShkKSkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTm9kZVJhbmdlKHRoaXMsIG90aGVyLCBkKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgIFF1ZXJ5IHdoZXRoZXIgdGhlIGdpdmVuIHBvc2l0aW9uIHNoYXJlcyB0aGUgc2FtZSBwYXJlbnQgbm9kZS5cbiAgICAqL1xuICAgIHNhbWVQYXJlbnQob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zIC0gdGhpcy5wYXJlbnRPZmZzZXQgPT0gb3RoZXIucG9zIC0gb3RoZXIucGFyZW50T2Zmc2V0O1xuICAgIH1cbiAgICAvKipcbiAgICBSZXR1cm4gdGhlIGdyZWF0ZXIgb2YgdGhpcyBhbmQgdGhlIGdpdmVuIHBvc2l0aW9uLlxuICAgICovXG4gICAgbWF4KG90aGVyKSB7XG4gICAgICAgIHJldHVybiBvdGhlci5wb3MgPiB0aGlzLnBvcyA/IG90aGVyIDogdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgUmV0dXJuIHRoZSBzbWFsbGVyIG9mIHRoaXMgYW5kIHRoZSBnaXZlbiBwb3NpdGlvbi5cbiAgICAqL1xuICAgIG1pbihvdGhlcikge1xuICAgICAgICByZXR1cm4gb3RoZXIucG9zIDwgdGhpcy5wb3MgPyBvdGhlciA6IHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGxldCBzdHIgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLmRlcHRoOyBpKyspXG4gICAgICAgICAgICBzdHIgKz0gKHN0ciA/IFwiL1wiIDogXCJcIikgKyB0aGlzLm5vZGUoaSkudHlwZS5uYW1lICsgXCJfXCIgKyB0aGlzLmluZGV4KGkgLSAxKTtcbiAgICAgICAgcmV0dXJuIHN0ciArIFwiOlwiICsgdGhpcy5wYXJlbnRPZmZzZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgc3RhdGljIHJlc29sdmUoZG9jLCBwb3MpIHtcbiAgICAgICAgaWYgKCEocG9zID49IDAgJiYgcG9zIDw9IGRvYy5jb250ZW50LnNpemUpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJQb3NpdGlvbiBcIiArIHBvcyArIFwiIG91dCBvZiByYW5nZVwiKTtcbiAgICAgICAgbGV0IHBhdGggPSBbXTtcbiAgICAgICAgbGV0IHN0YXJ0ID0gMCwgcGFyZW50T2Zmc2V0ID0gcG9zO1xuICAgICAgICBmb3IgKGxldCBub2RlID0gZG9jOzspIHtcbiAgICAgICAgICAgIGxldCB7IGluZGV4LCBvZmZzZXQgfSA9IG5vZGUuY29udGVudC5maW5kSW5kZXgocGFyZW50T2Zmc2V0KTtcbiAgICAgICAgICAgIGxldCByZW0gPSBwYXJlbnRPZmZzZXQgLSBvZmZzZXQ7XG4gICAgICAgICAgICBwYXRoLnB1c2gobm9kZSwgaW5kZXgsIHN0YXJ0ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgIGlmICghcmVtKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKG5vZGUuaXNUZXh0KVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgcGFyZW50T2Zmc2V0ID0gcmVtIC0gMTtcbiAgICAgICAgICAgIHN0YXJ0ICs9IG9mZnNldCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBSZXNvbHZlZFBvcyhwb3MsIHBhdGgsIHBhcmVudE9mZnNldCk7XG4gICAgfVxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgc3RhdGljIHJlc29sdmVDYWNoZWQoZG9jLCBwb3MpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlQ2FjaGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBjYWNoZWQgPSByZXNvbHZlQ2FjaGVbaV07XG4gICAgICAgICAgICBpZiAoY2FjaGVkLnBvcyA9PSBwb3MgJiYgY2FjaGVkLmRvYyA9PSBkb2MpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0ID0gcmVzb2x2ZUNhY2hlW3Jlc29sdmVDYWNoZVBvc10gPSBSZXNvbHZlZFBvcy5yZXNvbHZlKGRvYywgcG9zKTtcbiAgICAgICAgcmVzb2x2ZUNhY2hlUG9zID0gKHJlc29sdmVDYWNoZVBvcyArIDEpICUgcmVzb2x2ZUNhY2hlU2l6ZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5sZXQgcmVzb2x2ZUNhY2hlID0gW10sIHJlc29sdmVDYWNoZVBvcyA9IDAsIHJlc29sdmVDYWNoZVNpemUgPSAxMjtcbi8qKlxuUmVwcmVzZW50cyBhIGZsYXQgcmFuZ2Ugb2YgY29udGVudCwgaS5lLiBvbmUgdGhhdCBzdGFydHMgYW5kXG5lbmRzIGluIHRoZSBzYW1lIG5vZGUuXG4qL1xuY2xhc3MgTm9kZVJhbmdlIHtcbiAgICAvKipcbiAgICBDb25zdHJ1Y3QgYSBub2RlIHJhbmdlLiBgJGZyb21gIGFuZCBgJHRvYCBzaG91bGQgcG9pbnQgaW50byB0aGVcbiAgICBzYW1lIG5vZGUgdW50aWwgYXQgbGVhc3QgdGhlIGdpdmVuIGBkZXB0aGAsIHNpbmNlIGEgbm9kZSByYW5nZVxuICAgIGRlbm90ZXMgYW4gYWRqYWNlbnQgc2V0IG9mIG5vZGVzIGluIGEgc2luZ2xlIHBhcmVudCBub2RlLlxuICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgQSByZXNvbHZlZCBwb3NpdGlvbiBhbG9uZyB0aGUgc3RhcnQgb2YgdGhlIGNvbnRlbnQuIE1heSBoYXZlIGFcbiAgICBgZGVwdGhgIGdyZWF0ZXIgdGhhbiB0aGlzIG9iamVjdCdzIGBkZXB0aGAgcHJvcGVydHksIHNpbmNlXG4gICAgdGhlc2UgYXJlIHRoZSBwb3NpdGlvbnMgdGhhdCB3ZXJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgcmFuZ2UsXG4gICAgbm90IHJlLXJlc29sdmVkIHBvc2l0aW9ucyBkaXJlY3RseSBhdCBpdHMgYm91bmRhcmllcy5cbiAgICAqL1xuICAgICRmcm9tLCBcbiAgICAvKipcbiAgICBBIHBvc2l0aW9uIGFsb25nIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQuIFNlZVxuICAgIGNhdmVhdCBmb3IgW2AkZnJvbWBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNtb2RlbC5Ob2RlUmFuZ2UuJGZyb20pLlxuICAgICovXG4gICAgJHRvLCBcbiAgICAvKipcbiAgICBUaGUgZGVwdGggb2YgdGhlIG5vZGUgdGhhdCB0aGlzIHJhbmdlIHBvaW50cyBpbnRvLlxuICAgICovXG4gICAgZGVwdGgpIHtcbiAgICAgICAgdGhpcy4kZnJvbSA9ICRmcm9tO1xuICAgICAgICB0aGlzLiR0byA9ICR0bztcbiAgICAgICAgdGhpcy5kZXB0aCA9IGRlcHRoO1xuICAgIH1cbiAgICAvKipcbiAgICBUaGUgcG9zaXRpb24gYXQgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAgICAqL1xuICAgIGdldCBzdGFydCgpIHsgcmV0dXJuIHRoaXMuJGZyb20uYmVmb3JlKHRoaXMuZGVwdGggKyAxKTsgfVxuICAgIC8qKlxuICAgIFRoZSBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSByYW5nZS5cbiAgICAqL1xuICAgIGdldCBlbmQoKSB7IHJldHVybiB0aGlzLiR0by5hZnRlcih0aGlzLmRlcHRoICsgMSk7IH1cbiAgICAvKipcbiAgICBUaGUgcGFyZW50IG5vZGUgdGhhdCB0aGUgcmFuZ2UgcG9pbnRzIGludG8uXG4gICAgKi9cbiAgICBnZXQgcGFyZW50KCkgeyByZXR1cm4gdGhpcy4kZnJvbS5ub2RlKHRoaXMuZGVwdGgpOyB9XG4gICAgLyoqXG4gICAgVGhlIHN0YXJ0IGluZGV4IG9mIHRoZSByYW5nZSBpbiB0aGUgcGFyZW50IG5vZGUuXG4gICAgKi9cbiAgICBnZXQgc3RhcnRJbmRleCgpIHsgcmV0dXJuIHRoaXMuJGZyb20uaW5kZXgodGhpcy5kZXB0aCk7IH1cbiAgICAvKipcbiAgICBUaGUgZW5kIGluZGV4IG9mIHRoZSByYW5nZSBpbiB0aGUgcGFyZW50IG5vZGUuXG4gICAgKi9cbiAgICBnZXQgZW5kSW5kZXgoKSB7IHJldHVybiB0aGlzLiR0by5pbmRleEFmdGVyKHRoaXMuZGVwdGgpOyB9XG59XG5cbmNvbnN0IGVtcHR5QXR0cnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqXG5UaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBub2RlIGluIHRoZSB0cmVlIHRoYXQgbWFrZXMgdXAgYVxuUHJvc2VNaXJyb3IgZG9jdW1lbnQuIFNvIGEgZG9jdW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgYE5vZGVgLCB3aXRoXG5jaGlsZHJlbiB0aGF0IGFyZSBhbHNvIGluc3RhbmNlcyBvZiBgTm9kZWAuXG5cbk5vZGVzIGFyZSBwZXJzaXN0ZW50IGRhdGEgc3RydWN0dXJlcy4gSW5zdGVhZCBvZiBjaGFuZ2luZyB0aGVtLCB5b3VcbmNyZWF0ZSBuZXcgb25lcyB3aXRoIHRoZSBjb250ZW50IHlvdSB3YW50LiBPbGQgb25lcyBrZWVwIHBvaW50aW5nXG5hdCB0aGUgb2xkIGRvY3VtZW50IHNoYXBlLiBUaGlzIGlzIG1hZGUgY2hlYXBlciBieSBzaGFyaW5nXG5zdHJ1Y3R1cmUgYmV0d2VlbiB0aGUgb2xkIGFuZCBuZXcgZGF0YSBhcyBtdWNoIGFzIHBvc3NpYmxlLCB3aGljaCBhXG50cmVlIHNoYXBlIGxpa2UgdGhpcyAod2l0aG91dCBiYWNrIHBvaW50ZXJzKSBtYWtlcyBlYXN5LlxuXG4qKkRvIG5vdCoqIGRpcmVjdGx5IG11dGF0ZSB0aGUgcHJvcGVydGllcyBvZiBhIGBOb2RlYCBvYmplY3QuIFNlZVxuW3RoZSBndWlkZV0oL2RvY3MvZ3VpZGUvI2RvYykgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4qL1xuY2xhc3MgTm9kZSB7XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICBUaGUgdHlwZSBvZiBub2RlIHRoYXQgdGhpcyBpcy5cbiAgICAqL1xuICAgIHR5cGUsIFxuICAgIC8qKlxuICAgIEFuIG9iamVjdCBtYXBwaW5nIGF0dHJpYnV0ZSBuYW1lcyB0byB2YWx1ZXMuIFRoZSBraW5kIG9mXG4gICAgYXR0cmlidXRlcyBhbGxvd2VkIGFuZCByZXF1aXJlZCBhcmVcbiAgICBbZGV0ZXJtaW5lZF0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI21vZGVsLk5vZGVTcGVjLmF0dHJzKSBieSB0aGUgbm9kZSB0eXBlLlxuICAgICovXG4gICAgYXR0cnMsIFxuICAgIC8vIEEgZnJhZ21lbnQgaG9sZGluZyB0aGUgbm9kZSdzIGNoaWxkcmVuLlxuICAgIGNvbnRlbnQsIFxuICAgIC8qKlxuICAgIFRoZSBtYXJrcyAodGhpbmdzIGxpa2Ugd2hldGhlciBpdCBpcyBlbXBoYXNpemVkIG9yIHBhcnQgb2YgYVxuICAgIGxpbmspIGFwcGxpZWQgdG8gdGhpcyBub2RlLlxuICAgICovXG4gICAgbWFya3MgPSBNYXJrLm5vbmUpIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5hdHRycyA9IGF0dHJzO1xuICAgICAgICB0aGlzLm1hcmtzID0gbWFya3M7XG4gICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQgfHwgRnJhZ21lbnQuZW1wdHk7XG4gICAgfVxuICAgIC8qKlxuICAgIFRoZSBzaXplIG9mIHRoaXMgbm9kZSwgYXMgZGVmaW5lZCBieSB0aGUgaW50ZWdlci1iYXNlZCBbaW5kZXhpbmdcbiAgICBzY2hlbWVdKC9kb2NzL2d1aWRlLyNkb2MuaW5kZXhpbmcpLiBGb3IgdGV4dCBub2RlcywgdGhpcyBpcyB0aGVcbiAgICBhbW91bnQgb2YgY2hhcmFjdGVycy4gRm9yIG90aGVyIGxlYWYgbm9kZXMsIGl0IGlzIG9uZS4gRm9yXG4gICAgbm9uLWxlYWYgbm9kZXMsIGl0IGlzIHRoZSBzaXplIG9mIHRoZSBjb250ZW50IHBsdXMgdHdvICh0aGVcbiAgICBzdGFydCBhbmQgZW5kIHRva2VuKS5cbiAgICAqL1xuICAgIGdldCBub2RlU2l6ZSgpIHsgcmV0dXJuIHRoaXMuaXNMZWFmID8gMSA6IDIgKyB0aGlzLmNvbnRlbnQuc2l6ZTsgfVxuICAgIC8qKlxuICAgIFRoZSBudW1iZXIgb2YgY2hpbGRyZW4gdGhhdCB0aGUgbm9kZSBoYXMuXG4gICAgKi9cbiAgICBnZXQgY2hpbGRDb3VudCgpIHsgcmV0dXJuIHRoaXMuY29udGVudC5jaGlsZENvdW50OyB9XG4gICAgLyoqXG4gICAgR2V0IHRoZSBjaGlsZCBub2RlIGF0IHRoZSBnaXZlbiBpbmRleC4gUmFpc2VzIGFuIGVycm9yIHdoZW4gdGhlXG4gICAgaW5kZXggaXMgb3V0IG9mIHJhbmdlLlxuICAgICovXG4gICAgY2hpbGQoaW5kZXgpIHsgcmV0dXJuIHRoaXMuY29udGVudC5jaGlsZChpbmRleCk7IH1cbiAgICAvKipcbiAgICBHZXQgdGhlIGNoaWxkIG5vZGUgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBpdCBleGlzdHMuXG4gICAgKi9cbiAgICBtYXliZUNoaWxkKGluZGV4KSB7IHJldHVybiB0aGlzLmNvbnRlbnQubWF5YmVDaGlsZChpbmRleCk7IH1cbiAgICAvKipcbiAgICBDYWxsIGBmYCBmb3IgZXZlcnkgY2hpbGQgbm9kZSwgcGFzc2luZyB0aGUgbm9kZSwgaXRzIG9mZnNldFxuICAgIGludG8gdGhpcyBwYXJlbnQgbm9kZSwgYW5kIGl0cyBpbmRleC5cbiAgICAqL1xuICAgIGZvckVhY2goZikgeyB0aGlzLmNvbnRlbnQuZm9yRWFjaChmKTsgfVxuICAgIC8qKlxuICAgIEludm9rZSBhIGNhbGxiYWNrIGZvciBhbGwgZGVzY2VuZGFudCBub2RlcyByZWN1cnNpdmVseSBiZXR3ZWVuXG4gICAgdGhlIGdpdmVuIHR3byBwb3NpdGlvbnMgdGhhdCBhcmUgcmVsYXRpdmUgdG8gc3RhcnQgb2YgdGhpc1xuICAgIG5vZGUncyBjb250ZW50LiBUaGUgY2FsbGJhY2sgaXMgaW52b2tlZCB3aXRoIHRoZSBub2RlLCBpdHNcbiAgICBwYXJlbnQtcmVsYXRpdmUgcG9zaXRpb24sIGl0cyBwYXJlbnQgbm9kZSwgYW5kIGl0cyBjaGlsZCBpbmRleC5cbiAgICBXaGVuIHRoZSBjYWxsYmFjayByZXR1cm5zIGZhbHNlIGZvciBhIGdpdmVuIG5vZGUsIHRoYXQgbm9kZSdzXG4gICAgY2hpbGRyZW4gd2lsbCBub3QgYmUgcmVjdXJzZWQgb3Zlci4gVGhlIGxhc3QgcGFyYW1ldGVyIGNhbiBiZVxuICAgIHVzZWQgdG8gc3BlY2lmeSBhIHN0YXJ0aW5nIHBvc2l0aW9uIHRvIGNvdW50IGZyb20uXG4gICAgKi9cbiAgICBub2Rlc0JldHdlZW4oZnJvbSwgdG8sIGYsIHN0YXJ0UG9zID0gMCkge1xuICAgICAgICB0aGlzLmNvbnRlbnQubm9kZXNCZXR3ZWVuKGZyb20sIHRvLCBmLCBzdGFydFBvcywgdGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgIENhbGwgdGhlIGdpdmVuIGNhbGxiYWNrIGZvciBldmVyeSBkZXNjZW5kYW50IG5vZGUuIERvZXNuJ3RcbiAgICBkZXNjZW5kIGludG8gYSBub2RlIHdoZW4gdGhlIGNhbGxiYWNrIHJldHVybnMgYGZhbHNlYC5cbiAgICAqL1xuICAgIGRlc2NlbmRhbnRzKGYpIHtcbiAgICAgICAgdGhpcy5ub2Rlc0JldHdlZW4oMCwgdGhpcy5jb250ZW50LnNpemUsIGYpO1xuICAgIH1cbiAgICAvKipcbiAgICBDb25jYXRlbmF0ZXMgYWxsIHRoZSB0ZXh0IG5vZGVzIGZvdW5kIGluIHRoaXMgZnJhZ21lbnQgYW5kIGl0c1xuICAgIGNoaWxkcmVuLlxuICAgICovXG4gICAgZ2V0IHRleHRDb250ZW50KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuaXNMZWFmICYmIHRoaXMudHlwZS5zcGVjLmxlYWZUZXh0KVxuICAgICAgICAgICAgPyB0aGlzLnR5cGUuc3BlYy5sZWFmVGV4dCh0aGlzKVxuICAgICAgICAgICAgOiB0aGlzLnRleHRCZXR3ZWVuKDAsIHRoaXMuY29udGVudC5zaXplLCBcIlwiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgR2V0IGFsbCB0ZXh0IGJldHdlZW4gcG9zaXRpb25zIGBmcm9tYCBhbmQgYHRvYC4gV2hlblxuICAgIGBibG9ja1NlcGFyYXRvcmAgaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgaW5zZXJ0ZWQgdG8gc2VwYXJhdGUgdGV4dFxuICAgIGZyb20gZGlmZmVyZW50IGJsb2NrIG5vZGVzLiBJZiBgbGVhZlRleHRgIGlzIGdpdmVuLCBpdCdsbCBiZVxuICAgIGluc2VydGVkIGZvciBldmVyeSBub24tdGV4dCBsZWFmIG5vZGUgZW5jb3VudGVyZWQsIG90aGVyd2lzZVxuICAgIFtgbGVhZlRleHRgXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jbW9kZWwuTm9kZVNwZWNebGVhZlRleHQpIHdpbGwgYmUgdXNlZC5cbiAgICAqL1xuICAgIHRleHRCZXR3ZWVuKGZyb20sIHRvLCBibG9ja1NlcGFyYXRvciwgbGVhZlRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudC50ZXh0QmV0d2Vlbihmcm9tLCB0bywgYmxvY2tTZXBhcmF0b3IsIGxlYWZUZXh0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgUmV0dXJucyB0aGlzIG5vZGUncyBmaXJzdCBjaGlsZCwgb3IgYG51bGxgIGlmIHRoZXJlIGFyZSBub1xuICAgIGNoaWxkcmVuLlxuICAgICovXG4gICAgZ2V0IGZpcnN0Q2hpbGQoKSB7IHJldHVybiB0aGlzLmNvbnRlbnQuZmlyc3RDaGlsZDsgfVxuICAgIC8qKlxuICAgIFJldHVybnMgdGhpcyBub2RlJ3MgbGFzdCBjaGlsZCwgb3IgYG51bGxgIGlmIHRoZXJlIGFyZSBub1xuICAgIGNoaWxkcmVuLlxuICAgICovXG4gICAgZ2V0IGxhc3RDaGlsZCgpIHsgcmV0dXJuIHRoaXMuY29udGVudC5sYXN0Q2hpbGQ7IH1cbiAgICAvKipcbiAgICBUZXN0IHdoZXRoZXIgdHdvIG5vZGVzIHJlcHJlc2VudCB0aGUgc2FtZSBwaWVjZSBvZiBkb2N1bWVudC5cbiAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzID09IG90aGVyIHx8ICh0aGlzLnNhbWVNYXJrdXAob3RoZXIpICYmIHRoaXMuY29udGVudC5lcShvdGhlci5jb250ZW50KSk7XG4gICAgfVxuICAgIC8qKlxuICAgIENvbXBhcmUgdGhlIG1hcmt1cCAodHlwZSwgYXR0cmlidXRlcywgYW5kIG1hcmtzKSBvZiB0aGlzIG5vZGUgdG9cbiAgICB0aG9zZSBvZiBhbm90aGVyLiBSZXR1cm5zIGB0cnVlYCBpZiBib3RoIGhhdmUgdGhlIHNhbWUgbWFya3VwLlxuICAgICovXG4gICAgc2FtZU1hcmt1cChvdGhlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNNYXJrdXAob3RoZXIudHlwZSwgb3RoZXIuYXR0cnMsIG90aGVyLm1hcmtzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQ2hlY2sgd2hldGhlciB0aGlzIG5vZGUncyBtYXJrdXAgY29ycmVzcG9uZCB0byB0aGUgZ2l2ZW4gdHlwZSxcbiAgICBhdHRyaWJ1dGVzLCBhbmQgbWFya3MuXG4gICAgKi9cbiAgICBoYXNNYXJrdXAodHlwZSwgYXR0cnMsIG1hcmtzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT0gdHlwZSAmJlxuICAgICAgICAgICAgY29tcGFyZURlZXAodGhpcy5hdHRycywgYXR0cnMgfHwgdHlwZS5kZWZhdWx0QXR0cnMgfHwgZW1wdHlBdHRycykgJiZcbiAgICAgICAgICAgIE1hcmsuc2FtZVNldCh0aGlzLm1hcmtzLCBtYXJrcyB8fCBNYXJrLm5vbmUpO1xuICAgIH1cbiAgICAvKipcbiAgICBDcmVhdGUgYSBuZXcgbm9kZSB3aXRoIHRoZSBzYW1lIG1hcmt1cCBhcyB0aGlzIG5vZGUsIGNvbnRhaW5pbmdcbiAgICB0aGUgZ2l2ZW4gY29udGVudCAob3IgZW1wdHksIGlmIG5vIGNvbnRlbnQgaXMgZ2l2ZW4pLlxuICAgICovXG4gICAgY29weShjb250ZW50ID0gbnVsbCkge1xuICAgICAgICBpZiAoY29udGVudCA9PSB0aGlzLmNvbnRlbnQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBOb2RlKHRoaXMudHlwZSwgdGhpcy5hdHRycywgY29udGVudCwgdGhpcy5tYXJrcyk7XG4gICAgfVxuICAgIC8qKlxuICAgIENyZWF0ZSBhIGNvcHkgb2YgdGhpcyBub2RlLCB3aXRoIHRoZSBnaXZlbiBzZXQgb2YgbWFya3MgaW5zdGVhZFxuICAgIG9mIHRoZSBub2RlJ3Mgb3duIG1hcmtzLlxuICAgICovXG4gICAgbWFyayhtYXJrcykge1xuICAgICAgICByZXR1cm4gbWFya3MgPT0gdGhpcy5tYXJrcyA/IHRoaXMgOiBuZXcgTm9kZSh0aGlzLnR5cGUsIHRoaXMuYXR0cnMsIHRoaXMuY29udGVudCwgbWFya3MpO1xuICAgIH1cbiAgICAvKipcbiAgICBDcmVhdGUgYSBjb3B5IG9mIHRoaXMgbm9kZSB3aXRoIG9ubHkgdGhlIGNvbnRlbnQgYmV0d2VlbiB0aGVcbiAgICBnaXZlbiBwb3NpdGlvbnMuIElmIGB0b2AgaXMgbm90IGdpdmVuLCBpdCBkZWZhdWx0cyB0byB0aGUgZW5kIG9mXG4gICAgdGhlIG5vZGUuXG4gICAgKi9cbiAgICBjdXQoZnJvbSwgdG8gPSB0aGlzLmNvbnRlbnQuc2l6ZSkge1xuICAgICAgICBpZiAoZnJvbSA9PSAwICYmIHRvID09IHRoaXMuY29udGVudC5zaXplKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIHJldHVybiB0aGlzLmNvcHkodGhpcy5jb250ZW50LmN1dChmcm9tLCB0bykpO1xuICAgIH1cbiAgICAvKipcbiAgICBDdXQgb3V0IHRoZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBiZXR3ZWVuIHRoZSBnaXZlbiBwb3NpdGlvbnMsIGFuZFxuICAgIHJldHVybiBpdCBhcyBhIGBTbGljZWAgb2JqZWN0LlxuICAgICovXG4gICAgc2xpY2UoZnJvbSwgdG8gPSB0aGlzLmNvbnRlbnQuc2l6ZSwgaW5jbHVkZVBhcmVudHMgPSBmYWxzZSkge1xuICAgICAgICBpZiAoZnJvbSA9PSB0bylcbiAgICAgICAgICAgIHJldHVybiBTbGljZS5lbXB0eTtcbiAgICAgICAgbGV0ICRmcm9tID0gdGhpcy5yZXNvbHZlKGZyb20pLCAkdG8gPSB0aGlzLnJlc29sdmUodG8pO1xuICAgICAgICBsZXQgZGVwdGggPSBpbmNsdWRlUGFyZW50cyA/IDAgOiAkZnJvbS5zaGFyZWREZXB0aCh0byk7XG4gICAgICAgIGxldCBzdGFydCA9ICRmcm9tLnN0YXJ0KGRlcHRoKSwgbm9kZSA9ICRmcm9tLm5vZGUoZGVwdGgpO1xuICAgICAgICBsZXQgY29udGVudCA9IG5vZGUuY29udGVudC5jdXQoJGZyb20ucG9zIC0gc3RhcnQsICR0by5wb3MgLSBzdGFydCk7XG4gICAgICAgIHJldHVybiBuZXcgU2xpY2UoY29udGVudCwgJGZyb20uZGVwdGggLSBkZXB0aCwgJHRvLmRlcHRoIC0gZGVwdGgpO1xuICAgIH1cbiAgICAvKipcbiAgICBSZXBsYWNlIHRoZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBiZXR3ZWVuIHRoZSBnaXZlbiBwb3NpdGlvbnMgd2l0aFxuICAgIHRoZSBnaXZlbiBzbGljZS4gVGhlIHNsaWNlIG11c3QgJ2ZpdCcsIG1lYW5pbmcgaXRzIG9wZW4gc2lkZXNcbiAgICBtdXN0IGJlIGFibGUgdG8gY29ubmVjdCB0byB0aGUgc3Vycm91bmRpbmcgY29udGVudCwgYW5kIGl0c1xuICAgIGNvbnRlbnQgbm9kZXMgbXVzdCBiZSB2YWxpZCBjaGlsZHJlbiBmb3IgdGhlIG5vZGUgdGhleSBhcmUgcGxhY2VkXG4gICAgaW50by4gSWYgYW55IG9mIHRoaXMgaXMgdmlvbGF0ZWQsIGFuIGVycm9yIG9mIHR5cGVcbiAgICBbYFJlcGxhY2VFcnJvcmBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNtb2RlbC5SZXBsYWNlRXJyb3IpIGlzIHRocm93bi5cbiAgICAqL1xuICAgIHJlcGxhY2UoZnJvbSwgdG8sIHNsaWNlKSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlKHRoaXMucmVzb2x2ZShmcm9tKSwgdGhpcy5yZXNvbHZlKHRvKSwgc2xpY2UpO1xuICAgIH1cbiAgICAvKipcbiAgICBGaW5kIHRoZSBub2RlIGRpcmVjdGx5IGFmdGVyIHRoZSBnaXZlbiBwb3NpdGlvbi5cbiAgICAqL1xuICAgIG5vZGVBdChwb3MpIHtcbiAgICAgICAgZm9yIChsZXQgbm9kZSA9IHRoaXM7Oykge1xuICAgICAgICAgICAgbGV0IHsgaW5kZXgsIG9mZnNldCB9ID0gbm9kZS5jb250ZW50LmZpbmRJbmRleChwb3MpO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubWF5YmVDaGlsZChpbmRleCk7XG4gICAgICAgICAgICBpZiAoIW5vZGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBpZiAob2Zmc2V0ID09IHBvcyB8fCBub2RlLmlzVGV4dClcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIHBvcyAtPSBvZmZzZXQgKyAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgIEZpbmQgdGhlIChkaXJlY3QpIGNoaWxkIG5vZGUgYWZ0ZXIgdGhlIGdpdmVuIG9mZnNldCwgaWYgYW55LFxuICAgIGFuZCByZXR1cm4gaXQgYWxvbmcgd2l0aCBpdHMgaW5kZXggYW5kIG9mZnNldCByZWxhdGl2ZSB0byB0aGlzXG4gICAgbm9kZS5cbiAgICAqL1xuICAgIGNoaWxkQWZ0ZXIocG9zKSB7XG4gICAgICAgIGxldCB7IGluZGV4LCBvZmZzZXQgfSA9IHRoaXMuY29udGVudC5maW5kSW5kZXgocG9zKTtcbiAgICAgICAgcmV0dXJuIHsgbm9kZTogdGhpcy5jb250ZW50Lm1heWJlQ2hpbGQoaW5kZXgpLCBpbmRleCwgb2Zmc2V0IH07XG4gICAgfVxuICAgIC8qKlxuICAgIEZpbmQgdGhlIChkaXJlY3QpIGNoaWxkIG5vZGUgYmVmb3JlIHRoZSBnaXZlbiBvZmZzZXQsIGlmIGFueSxcbiAgICBhbmQgcmV0dXJuIGl0IGFsb25nIHdpdGggaXRzIGluZGV4IGFuZCBvZmZzZXQgcmVsYXRpdmUgdG8gdGhpc1xuICAgIG5vZGUuXG4gICAgKi9cbiAgICBjaGlsZEJlZm9yZShwb3MpIHtcbiAgICAgICAgaWYgKHBvcyA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHsgbm9kZTogbnVsbCwgaW5kZXg6IDAsIG9mZnNldDogMCB9O1xuICAgICAgICBsZXQgeyBpbmRleCwgb2Zmc2V0IH0gPSB0aGlzLmNvbnRlbnQuZmluZEluZGV4KHBvcyk7XG4gICAgICAgIGlmIChvZmZzZXQgPCBwb3MpXG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiB0aGlzLmNvbnRlbnQuY2hpbGQoaW5kZXgpLCBpbmRleCwgb2Zmc2V0IH07XG4gICAgICAgIGxldCBub2RlID0gdGhpcy5jb250ZW50LmNoaWxkKGluZGV4IC0gMSk7XG4gICAgICAgIHJldHVybiB7IG5vZGUsIGluZGV4OiBpbmRleCAtIDEsIG9mZnNldDogb2Zmc2V0IC0gbm9kZS5ub2RlU2l6ZSB9O1xuICAgIH1cbiAgICAvKipcbiAgICBSZXNvbHZlIHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0aGUgZG9jdW1lbnQsIHJldHVybmluZyBhblxuICAgIFtvYmplY3RdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNtb2RlbC5SZXNvbHZlZFBvcykgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBpdHMgY29udGV4dC5cbiAgICAqL1xuICAgIHJlc29sdmUocG9zKSB7IHJldHVybiBSZXNvbHZlZFBvcy5yZXNvbHZlQ2FjaGVkKHRoaXMsIHBvcyk7IH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHJlc29sdmVOb0NhY2hlKHBvcykgeyByZXR1cm4gUmVzb2x2ZWRQb3MucmVzb2x2ZSh0aGlzLCBwb3MpOyB9XG4gICAgLyoqXG4gICAgVGVzdCB3aGV0aGVyIGEgZ2l2ZW4gbWFyayBvciBtYXJrIHR5cGUgb2NjdXJzIGluIHRoaXMgZG9jdW1lbnRcbiAgICBiZXR3ZWVuIHRoZSB0d28gZ2l2ZW4gcG9zaXRpb25zLlxuICAgICovXG4gICAgcmFuZ2VIYXNNYXJrKGZyb20sIHRvLCB0eXBlKSB7XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICBpZiAodG8gPiBmcm9tKVxuICAgICAgICAgICAgdGhpcy5ub2Rlc0JldHdlZW4oZnJvbSwgdG8sIG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlLmlzSW5TZXQobm9kZS5tYXJrcykpXG4gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gIWZvdW5kO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9XG4gICAgLyoqXG4gICAgVHJ1ZSB3aGVuIHRoaXMgaXMgYSBibG9jayAobm9uLWlubGluZSBub2RlKVxuICAgICovXG4gICAgZ2V0IGlzQmxvY2soKSB7IHJldHVybiB0aGlzLnR5cGUuaXNCbG9jazsgfVxuICAgIC8qKlxuICAgIFRydWUgd2hlbiB0aGlzIGlzIGEgdGV4dGJsb2NrIG5vZGUsIGEgYmxvY2sgbm9kZSB3aXRoIGlubGluZVxuICAgIGNvbnRlbnQuXG4gICAgKi9cbiAgICBnZXQgaXNUZXh0YmxvY2soKSB7IHJldHVybiB0aGlzLnR5cGUuaXNUZXh0YmxvY2s7IH1cbiAgICAvKipcbiAgICBUcnVlIHdoZW4gdGhpcyBub2RlIGFsbG93cyBpbmxpbmUgY29udGVudC5cbiAgICAqL1xuICAgIGdldCBpbmxpbmVDb250ZW50KCkgeyByZXR1cm4gdGhpcy50eXBlLmlubGluZUNvbnRlbnQ7IH1cbiAgICAvKipcbiAgICBUcnVlIHdoZW4gdGhpcyBpcyBhbiBpbmxpbmUgbm9kZSAoYSB0ZXh0IG5vZGUgb3IgYSBub2RlIHRoYXQgY2FuXG4gICAgYXBwZWFyIGFtb25nIHRleHQpLlxuICAgICovXG4gICAgZ2V0IGlzSW5saW5lKCkgeyByZXR1cm4gdGhpcy50eXBlLmlzSW5saW5lOyB9XG4gICAgLyoqXG4gICAgVHJ1ZSB3aGVuIHRoaXMgaXMgYSB0ZXh0IG5vZGUuXG4gICAgKi9cbiAgICBnZXQgaXNUZXh0KCkgeyByZXR1cm4gdGhpcy50eXBlLmlzVGV4dDsgfVxuICAgIC8qKlxuICAgIFRydWUgd2hlbiB0aGlzIGlzIGEgbGVhZiBub2RlLlxuICAgICovXG4gICAgZ2V0IGlzTGVhZigpIHsgcmV0dXJuIHRoaXMudHlwZS5pc0xlYWY7IH1cbiAgICAvKipcbiAgICBUcnVlIHdoZW4gdGhpcyBpcyBhbiBhdG9tLCBpLmUuIHdoZW4gaXQgZG9lcyBub3QgaGF2ZSBkaXJlY3RseVxuICAgIGVkaXRhYmxlIGNvbnRlbnQuIFRoaXMgaXMgdXN1YWxseSB0aGUgc2FtZSBhcyBgaXNMZWFmYCwgYnV0IGNhblxuICAgIGJlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgW2BhdG9tYCBwcm9wZXJ0eV0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI21vZGVsLk5vZGVTcGVjLmF0b20pXG4gICAgb24gYSBub2RlJ3Mgc3BlYyAodHlwaWNhbGx5IHVzZWQgd2hlbiB0aGUgbm9kZSBpcyBkaXNwbGF5ZWQgYXNcbiAgICBhbiB1bmVkaXRhYmxlIFtub2RlIHZpZXddKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyN2aWV3Lk5vZGVWaWV3KSkuXG4gICAgKi9cbiAgICBnZXQgaXNBdG9tKCkgeyByZXR1cm4gdGhpcy50eXBlLmlzQXRvbTsgfVxuICAgIC8qKlxuICAgIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIG5vZGUgZm9yIGRlYnVnZ2luZ1xuICAgIHB1cnBvc2VzLlxuICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUuc3BlYy50b0RlYnVnU3RyaW5nKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHlwZS5zcGVjLnRvRGVidWdTdHJpbmcodGhpcyk7XG4gICAgICAgIGxldCBuYW1lID0gdGhpcy50eXBlLm5hbWU7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnQuc2l6ZSlcbiAgICAgICAgICAgIG5hbWUgKz0gXCIoXCIgKyB0aGlzLmNvbnRlbnQudG9TdHJpbmdJbm5lcigpICsgXCIpXCI7XG4gICAgICAgIHJldHVybiB3cmFwTWFya3ModGhpcy5tYXJrcywgbmFtZSk7XG4gICAgfVxuICAgIC8qKlxuICAgIEdldCB0aGUgY29udGVudCBtYXRjaCBpbiB0aGlzIG5vZGUgYXQgdGhlIGdpdmVuIGluZGV4LlxuICAgICovXG4gICAgY29udGVudE1hdGNoQXQoaW5kZXgpIHtcbiAgICAgICAgbGV0IG1hdGNoID0gdGhpcy50eXBlLmNvbnRlbnRNYXRjaC5tYXRjaEZyYWdtZW50KHRoaXMuY29udGVudCwgMCwgaW5kZXgpO1xuICAgICAgICBpZiAoIW1hdGNoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGVkIGNvbnRlbnRNYXRjaEF0IG9uIGEgbm9kZSB3aXRoIGludmFsaWQgY29udGVudFwiKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH1cbiAgICAvKipcbiAgICBUZXN0IHdoZXRoZXIgcmVwbGFjaW5nIHRoZSByYW5nZSBiZXR3ZWVuIGBmcm9tYCBhbmQgYHRvYCAoYnlcbiAgICBjaGlsZCBpbmRleCkgd2l0aCB0aGUgZ2l2ZW4gcmVwbGFjZW1lbnQgZnJhZ21lbnQgKHdoaWNoIGRlZmF1bHRzXG4gICAgdG8gdGhlIGVtcHR5IGZyYWdtZW50KSB3b3VsZCBsZWF2ZSB0aGUgbm9kZSdzIGNvbnRlbnQgdmFsaWQuIFlvdVxuICAgIGNhbiBvcHRpb25hbGx5IHBhc3MgYHN0YXJ0YCBhbmQgYGVuZGAgaW5kaWNlcyBpbnRvIHRoZVxuICAgIHJlcGxhY2VtZW50IGZyYWdtZW50LlxuICAgICovXG4gICAgY2FuUmVwbGFjZShmcm9tLCB0bywgcmVwbGFjZW1lbnQgPSBGcmFnbWVudC5lbXB0eSwgc3RhcnQgPSAwLCBlbmQgPSByZXBsYWNlbWVudC5jaGlsZENvdW50KSB7XG4gICAgICAgIGxldCBvbmUgPSB0aGlzLmNvbnRlbnRNYXRjaEF0KGZyb20pLm1hdGNoRnJhZ21lbnQocmVwbGFjZW1lbnQsIHN0YXJ0LCBlbmQpO1xuICAgICAgICBsZXQgdHdvID0gb25lICYmIG9uZS5tYXRjaEZyYWdtZW50KHRoaXMuY29udGVudCwgdG8pO1xuICAgICAgICBpZiAoIXR3byB8fCAhdHdvLnZhbGlkRW5kKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKylcbiAgICAgICAgICAgIGlmICghdGhpcy50eXBlLmFsbG93c01hcmtzKHJlcGxhY2VtZW50LmNoaWxkKGkpLm1hcmtzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICBUZXN0IHdoZXRoZXIgcmVwbGFjaW5nIHRoZSByYW5nZSBgZnJvbWAgdG8gYHRvYCAoYnkgaW5kZXgpIHdpdGhcbiAgICBhIG5vZGUgb2YgdGhlIGdpdmVuIHR5cGUgd291bGQgbGVhdmUgdGhlIG5vZGUncyBjb250ZW50IHZhbGlkLlxuICAgICovXG4gICAgY2FuUmVwbGFjZVdpdGgoZnJvbSwgdG8sIHR5cGUsIG1hcmtzKSB7XG4gICAgICAgIGlmIChtYXJrcyAmJiAhdGhpcy50eXBlLmFsbG93c01hcmtzKG1hcmtzKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5jb250ZW50TWF0Y2hBdChmcm9tKS5tYXRjaFR5cGUodHlwZSk7XG4gICAgICAgIGxldCBlbmQgPSBzdGFydCAmJiBzdGFydC5tYXRjaEZyYWdtZW50KHRoaXMuY29udGVudCwgdG8pO1xuICAgICAgICByZXR1cm4gZW5kID8gZW5kLnZhbGlkRW5kIDogZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgIFRlc3Qgd2hldGhlciB0aGUgZ2l2ZW4gbm9kZSdzIGNvbnRlbnQgY291bGQgYmUgYXBwZW5kZWQgdG8gdGhpc1xuICAgIG5vZGUuIElmIHRoYXQgbm9kZSBpcyBlbXB0eSwgdGhpcyB3aWxsIG9ubHkgcmV0dXJuIHRydWUgaWYgdGhlcmVcbiAgICBpcyBhdCBsZWFzdCBvbmUgbm9kZSB0eXBlIHRoYXQgY2FuIGFwcGVhciBpbiBib3RoIG5vZGVzICh0byBhdm9pZFxuICAgIG1lcmdpbmcgY29tcGxldGVseSBpbmNvbXBhdGlibGUgbm9kZXMpLlxuICAgICovXG4gICAgY2FuQXBwZW5kKG90aGVyKSB7XG4gICAgICAgIGlmIChvdGhlci5jb250ZW50LnNpemUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW5SZXBsYWNlKHRoaXMuY2hpbGRDb3VudCwgdGhpcy5jaGlsZENvdW50LCBvdGhlci5jb250ZW50KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHlwZS5jb21wYXRpYmxlQ29udGVudChvdGhlci50eXBlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQ2hlY2sgd2hldGhlciB0aGlzIG5vZGUgYW5kIGl0cyBkZXNjZW5kYW50cyBjb25mb3JtIHRvIHRoZVxuICAgIHNjaGVtYSwgYW5kIHJhaXNlIGVycm9yIHdoZW4gdGhleSBkbyBub3QuXG4gICAgKi9cbiAgICBjaGVjaygpIHtcbiAgICAgICAgdGhpcy50eXBlLmNoZWNrQ29udGVudCh0aGlzLmNvbnRlbnQpO1xuICAgICAgICBsZXQgY29weSA9IE1hcmsubm9uZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1hcmtzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgY29weSA9IHRoaXMubWFya3NbaV0uYWRkVG9TZXQoY29weSk7XG4gICAgICAgIGlmICghTWFyay5zYW1lU2V0KGNvcHksIHRoaXMubWFya3MpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgY29sbGVjdGlvbiBvZiBtYXJrcyBmb3Igbm9kZSAke3RoaXMudHlwZS5uYW1lfTogJHt0aGlzLm1hcmtzLm1hcChtID0+IG0udHlwZS5uYW1lKX1gKTtcbiAgICAgICAgdGhpcy5jb250ZW50LmZvckVhY2gobm9kZSA9PiBub2RlLmNoZWNrKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICBSZXR1cm4gYSBKU09OLXNlcmlhbGl6ZWFibGUgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBub2RlLlxuICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICBsZXQgb2JqID0geyB0eXBlOiB0aGlzLnR5cGUubmFtZSB9O1xuICAgICAgICBmb3IgKGxldCBfIGluIHRoaXMuYXR0cnMpIHtcbiAgICAgICAgICAgIG9iai5hdHRycyA9IHRoaXMuYXR0cnM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250ZW50LnNpemUpXG4gICAgICAgICAgICBvYmouY29udGVudCA9IHRoaXMuY29udGVudC50b0pTT04oKTtcbiAgICAgICAgaWYgKHRoaXMubWFya3MubGVuZ3RoKVxuICAgICAgICAgICAgb2JqLm1hcmtzID0gdGhpcy5tYXJrcy5tYXAobiA9PiBuLnRvSlNPTigpKTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gICAgLyoqXG4gICAgRGVzZXJpYWxpemUgYSBub2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb24uXG4gICAgKi9cbiAgICBzdGF0aWMgZnJvbUpTT04oc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIGlmICghanNvbilcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBpbnB1dCBmb3IgTm9kZS5mcm9tSlNPTlwiKTtcbiAgICAgICAgbGV0IG1hcmtzID0gbnVsbDtcbiAgICAgICAgaWYgKGpzb24ubWFya3MpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShqc29uLm1hcmtzKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgbWFyayBkYXRhIGZvciBOb2RlLmZyb21KU09OXCIpO1xuICAgICAgICAgICAgbWFya3MgPSBqc29uLm1hcmtzLm1hcChzY2hlbWEubWFya0Zyb21KU09OKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoanNvbi50eXBlID09IFwidGV4dFwiKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGpzb24udGV4dCAhPSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCB0ZXh0IG5vZGUgaW4gSlNPTlwiKTtcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWEudGV4dChqc29uLnRleHQsIG1hcmtzKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY29udGVudCA9IEZyYWdtZW50LmZyb21KU09OKHNjaGVtYSwganNvbi5jb250ZW50KTtcbiAgICAgICAgcmV0dXJuIHNjaGVtYS5ub2RlVHlwZShqc29uLnR5cGUpLmNyZWF0ZShqc29uLmF0dHJzLCBjb250ZW50LCBtYXJrcyk7XG4gICAgfVxufVxuTm9kZS5wcm90b3R5cGUudGV4dCA9IHVuZGVmaW5lZDtcbmNsYXNzIFRleHROb2RlIGV4dGVuZHMgTm9kZSB7XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih0eXBlLCBhdHRycywgY29udGVudCwgbWFya3MpIHtcbiAgICAgICAgc3VwZXIodHlwZSwgYXR0cnMsIG51bGwsIG1hcmtzKTtcbiAgICAgICAgaWYgKCFjb250ZW50KVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJFbXB0eSB0ZXh0IG5vZGVzIGFyZSBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgdGhpcy50ZXh0ID0gY29udGVudDtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUuc3BlYy50b0RlYnVnU3RyaW5nKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHlwZS5zcGVjLnRvRGVidWdTdHJpbmcodGhpcyk7XG4gICAgICAgIHJldHVybiB3cmFwTWFya3ModGhpcy5tYXJrcywgSlNPTi5zdHJpbmdpZnkodGhpcy50ZXh0KSk7XG4gICAgfVxuICAgIGdldCB0ZXh0Q29udGVudCgpIHsgcmV0dXJuIHRoaXMudGV4dDsgfVxuICAgIHRleHRCZXR3ZWVuKGZyb20sIHRvKSB7IHJldHVybiB0aGlzLnRleHQuc2xpY2UoZnJvbSwgdG8pOyB9XG4gICAgZ2V0IG5vZGVTaXplKCkgeyByZXR1cm4gdGhpcy50ZXh0Lmxlbmd0aDsgfVxuICAgIG1hcmsobWFya3MpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtzID09IHRoaXMubWFya3MgPyB0aGlzIDogbmV3IFRleHROb2RlKHRoaXMudHlwZSwgdGhpcy5hdHRycywgdGhpcy50ZXh0LCBtYXJrcyk7XG4gICAgfVxuICAgIHdpdGhUZXh0KHRleHQpIHtcbiAgICAgICAgaWYgKHRleHQgPT0gdGhpcy50ZXh0KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIHJldHVybiBuZXcgVGV4dE5vZGUodGhpcy50eXBlLCB0aGlzLmF0dHJzLCB0ZXh0LCB0aGlzLm1hcmtzKTtcbiAgICB9XG4gICAgY3V0KGZyb20gPSAwLCB0byA9IHRoaXMudGV4dC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGZyb20gPT0gMCAmJiB0byA9PSB0aGlzLnRleHQubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhUZXh0KHRoaXMudGV4dC5zbGljZShmcm9tLCB0bykpO1xuICAgIH1cbiAgICBlcShvdGhlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5zYW1lTWFya3VwKG90aGVyKSAmJiB0aGlzLnRleHQgPT0gb3RoZXIudGV4dDtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBsZXQgYmFzZSA9IHN1cGVyLnRvSlNPTigpO1xuICAgICAgICBiYXNlLnRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHdyYXBNYXJrcyhtYXJrcywgc3RyKSB7XG4gICAgZm9yIChsZXQgaSA9IG1hcmtzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxuICAgICAgICBzdHIgPSBtYXJrc1tpXS50eXBlLm5hbWUgKyBcIihcIiArIHN0ciArIFwiKVwiO1xuICAgIHJldHVybiBzdHI7XG59XG5cbi8qKlxuSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGEgbWF0Y2ggc3RhdGUgb2YgYSBub2RlIHR5cGUnc1xuW2NvbnRlbnQgZXhwcmVzc2lvbl0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI21vZGVsLk5vZGVTcGVjLmNvbnRlbnQpLCBhbmQgY2FuIGJlIHVzZWQgdG9cbmZpbmQgb3V0IHdoZXRoZXIgZnVydGhlciBjb250ZW50IG1hdGNoZXMgaGVyZSwgYW5kIHdoZXRoZXIgYSBnaXZlblxucG9zaXRpb24gaXMgYSB2YWxpZCBlbmQgb2YgdGhlIG5vZGUuXG4qL1xuY2xhc3MgQ29udGVudE1hdGNoIHtcbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgIC8qKlxuICAgIFRydWUgd2hlbiB0aGlzIG1hdGNoIHN0YXRlIHJlcHJlc2VudHMgYSB2YWxpZCBlbmQgb2YgdGhlIG5vZGUuXG4gICAgKi9cbiAgICB2YWxpZEVuZCkge1xuICAgICAgICB0aGlzLnZhbGlkRW5kID0gdmFsaWRFbmQ7XG4gICAgICAgIC8qKlxuICAgICAgICBAaW50ZXJuYWxcbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy5uZXh0ID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICBAaW50ZXJuYWxcbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy53cmFwQ2FjaGUgPSBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBzdGF0aWMgcGFyc2Uoc3RyaW5nLCBub2RlVHlwZXMpIHtcbiAgICAgICAgbGV0IHN0cmVhbSA9IG5ldyBUb2tlblN0cmVhbShzdHJpbmcsIG5vZGVUeXBlcyk7XG4gICAgICAgIGlmIChzdHJlYW0ubmV4dCA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRNYXRjaC5lbXB0eTtcbiAgICAgICAgbGV0IGV4cHIgPSBwYXJzZUV4cHIoc3RyZWFtKTtcbiAgICAgICAgaWYgKHN0cmVhbS5uZXh0KVxuICAgICAgICAgICAgc3RyZWFtLmVycihcIlVuZXhwZWN0ZWQgdHJhaWxpbmcgdGV4dFwiKTtcbiAgICAgICAgbGV0IG1hdGNoID0gZGZhKG5mYShleHByKSk7XG4gICAgICAgIGNoZWNrRm9yRGVhZEVuZHMobWF0Y2gsIHN0cmVhbSk7XG4gICAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9XG4gICAgLyoqXG4gICAgTWF0Y2ggYSBub2RlIHR5cGUsIHJldHVybmluZyBhIG1hdGNoIGFmdGVyIHRoYXQgbm9kZSBpZlxuICAgIHN1Y2Nlc3NmdWwuXG4gICAgKi9cbiAgICBtYXRjaFR5cGUodHlwZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubmV4dC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGlmICh0aGlzLm5leHRbaV0udHlwZSA9PSB0eXBlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5leHRbaV0ubmV4dDtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgIFRyeSB0byBtYXRjaCBhIGZyYWdtZW50LiBSZXR1cm5zIHRoZSByZXN1bHRpbmcgbWF0Y2ggd2hlblxuICAgIHN1Y2Nlc3NmdWwuXG4gICAgKi9cbiAgICBtYXRjaEZyYWdtZW50KGZyYWcsIHN0YXJ0ID0gMCwgZW5kID0gZnJhZy5jaGlsZENvdW50KSB7XG4gICAgICAgIGxldCBjdXIgPSB0aGlzO1xuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGN1ciAmJiBpIDwgZW5kOyBpKyspXG4gICAgICAgICAgICBjdXIgPSBjdXIubWF0Y2hUeXBlKGZyYWcuY2hpbGQoaSkudHlwZSk7XG4gICAgICAgIHJldHVybiBjdXI7XG4gICAgfVxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgZ2V0IGlubGluZUNvbnRlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQubGVuZ3RoICE9IDAgJiYgdGhpcy5uZXh0WzBdLnR5cGUuaXNJbmxpbmU7XG4gICAgfVxuICAgIC8qKlxuICAgIEdldCB0aGUgZmlyc3QgbWF0Y2hpbmcgbm9kZSB0eXBlIGF0IHRoaXMgbWF0Y2ggcG9zaXRpb24gdGhhdCBjYW5cbiAgICBiZSBnZW5lcmF0ZWQuXG4gICAgKi9cbiAgICBnZXQgZGVmYXVsdFR5cGUoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5uZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgeyB0eXBlIH0gPSB0aGlzLm5leHRbaV07XG4gICAgICAgICAgICBpZiAoISh0eXBlLmlzVGV4dCB8fCB0eXBlLmhhc1JlcXVpcmVkQXR0cnMoKSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgY29tcGF0aWJsZShvdGhlcikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubmV4dC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgb3RoZXIubmV4dC5sZW5ndGg7IGorKylcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0W2ldLnR5cGUgPT0gb3RoZXIubmV4dFtqXS50eXBlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICBUcnkgdG8gbWF0Y2ggdGhlIGdpdmVuIGZyYWdtZW50LCBhbmQgaWYgdGhhdCBmYWlscywgc2VlIGlmIGl0IGNhblxuICAgIGJlIG1hZGUgdG8gbWF0Y2ggYnkgaW5zZXJ0aW5nIG5vZGVzIGluIGZyb250IG9mIGl0LiBXaGVuXG4gICAgc3VjY2Vzc2Z1bCwgcmV0dXJuIGEgZnJhZ21lbnQgb2YgaW5zZXJ0ZWQgbm9kZXMgKHdoaWNoIG1heSBiZVxuICAgIGVtcHR5IGlmIG5vdGhpbmcgaGFkIHRvIGJlIGluc2VydGVkKS4gV2hlbiBgdG9FbmRgIGlzIHRydWUsIG9ubHlcbiAgICByZXR1cm4gYSBmcmFnbWVudCBpZiB0aGUgcmVzdWx0aW5nIG1hdGNoIGdvZXMgdG8gdGhlIGVuZCBvZiB0aGVcbiAgICBjb250ZW50IGV4cHJlc3Npb24uXG4gICAgKi9cbiAgICBmaWxsQmVmb3JlKGFmdGVyLCB0b0VuZCA9IGZhbHNlLCBzdGFydEluZGV4ID0gMCkge1xuICAgICAgICBsZXQgc2VlbiA9IFt0aGlzXTtcbiAgICAgICAgZnVuY3Rpb24gc2VhcmNoKG1hdGNoLCB0eXBlcykge1xuICAgICAgICAgICAgbGV0IGZpbmlzaGVkID0gbWF0Y2gubWF0Y2hGcmFnbWVudChhZnRlciwgc3RhcnRJbmRleCk7XG4gICAgICAgICAgICBpZiAoZmluaXNoZWQgJiYgKCF0b0VuZCB8fCBmaW5pc2hlZC52YWxpZEVuZCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIEZyYWdtZW50LmZyb20odHlwZXMubWFwKHRwID0+IHRwLmNyZWF0ZUFuZEZpbGwoKSkpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRjaC5uZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHsgdHlwZSwgbmV4dCB9ID0gbWF0Y2gubmV4dFtpXTtcbiAgICAgICAgICAgICAgICBpZiAoISh0eXBlLmlzVGV4dCB8fCB0eXBlLmhhc1JlcXVpcmVkQXR0cnMoKSkgJiYgc2Vlbi5pbmRleE9mKG5leHQpID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW4ucHVzaChuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gc2VhcmNoKG5leHQsIHR5cGVzLmNvbmNhdCh0eXBlKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VhcmNoKHRoaXMsIFtdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgRmluZCBhIHNldCBvZiB3cmFwcGluZyBub2RlIHR5cGVzIHRoYXQgd291bGQgYWxsb3cgYSBub2RlIG9mIHRoZVxuICAgIGdpdmVuIHR5cGUgdG8gYXBwZWFyIGF0IHRoaXMgcG9zaXRpb24uIFRoZSByZXN1bHQgbWF5IGJlIGVtcHR5XG4gICAgKHdoZW4gaXQgZml0cyBkaXJlY3RseSkgYW5kIHdpbGwgYmUgbnVsbCB3aGVuIG5vIHN1Y2ggd3JhcHBpbmdcbiAgICBleGlzdHMuXG4gICAgKi9cbiAgICBmaW5kV3JhcHBpbmcodGFyZ2V0KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy53cmFwQ2FjaGUubGVuZ3RoOyBpICs9IDIpXG4gICAgICAgICAgICBpZiAodGhpcy53cmFwQ2FjaGVbaV0gPT0gdGFyZ2V0KVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXBDYWNoZVtpICsgMV07XG4gICAgICAgIGxldCBjb21wdXRlZCA9IHRoaXMuY29tcHV0ZVdyYXBwaW5nKHRhcmdldCk7XG4gICAgICAgIHRoaXMud3JhcENhY2hlLnB1c2godGFyZ2V0LCBjb21wdXRlZCk7XG4gICAgICAgIHJldHVybiBjb21wdXRlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBjb21wdXRlV3JhcHBpbmcodGFyZ2V0KSB7XG4gICAgICAgIGxldCBzZWVuID0gT2JqZWN0LmNyZWF0ZShudWxsKSwgYWN0aXZlID0gW3sgbWF0Y2g6IHRoaXMsIHR5cGU6IG51bGwsIHZpYTogbnVsbCB9XTtcbiAgICAgICAgd2hpbGUgKGFjdGl2ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50ID0gYWN0aXZlLnNoaWZ0KCksIG1hdGNoID0gY3VycmVudC5tYXRjaDtcbiAgICAgICAgICAgIGlmIChtYXRjaC5tYXRjaFR5cGUodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBvYmogPSBjdXJyZW50OyBvYmoudHlwZTsgb2JqID0gb2JqLnZpYSlcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gob2JqLnR5cGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQucmV2ZXJzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRjaC5uZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHsgdHlwZSwgbmV4dCB9ID0gbWF0Y2gubmV4dFtpXTtcbiAgICAgICAgICAgICAgICBpZiAoIXR5cGUuaXNMZWFmICYmICF0eXBlLmhhc1JlcXVpcmVkQXR0cnMoKSAmJiAhKHR5cGUubmFtZSBpbiBzZWVuKSAmJiAoIWN1cnJlbnQudHlwZSB8fCBuZXh0LnZhbGlkRW5kKSkge1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmUucHVzaCh7IG1hdGNoOiB0eXBlLmNvbnRlbnRNYXRjaCwgdHlwZSwgdmlhOiBjdXJyZW50IH0pO1xuICAgICAgICAgICAgICAgICAgICBzZWVuW3R5cGUubmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgVGhlIG51bWJlciBvZiBvdXRnb2luZyBlZGdlcyB0aGlzIG5vZGUgaGFzIGluIHRoZSBmaW5pdGVcbiAgICBhdXRvbWF0b24gdGhhdCBkZXNjcmliZXMgdGhlIGNvbnRlbnQgZXhwcmVzc2lvbi5cbiAgICAqL1xuICAgIGdldCBlZGdlQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQubGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICBHZXQgdGhlIF9uX+KAi3RoIG91dGdvaW5nIGVkZ2UgZnJvbSB0aGlzIG5vZGUgaW4gdGhlIGZpbml0ZVxuICAgIGF1dG9tYXRvbiB0aGF0IGRlc2NyaWJlcyB0aGUgY29udGVudCBleHByZXNzaW9uLlxuICAgICovXG4gICAgZWRnZShuKSB7XG4gICAgICAgIGlmIChuID49IHRoaXMubmV4dC5sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlcmUncyBubyAke259dGggZWRnZSBpbiB0aGlzIGNvbnRlbnQgbWF0Y2hgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dFtuXTtcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgbGV0IHNlZW4gPSBbXTtcbiAgICAgICAgZnVuY3Rpb24gc2NhbihtKSB7XG4gICAgICAgICAgICBzZWVuLnB1c2gobSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG0ubmV4dC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICBpZiAoc2Vlbi5pbmRleE9mKG0ubmV4dFtpXS5uZXh0KSA9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgc2NhbihtLm5leHRbaV0ubmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgc2Nhbih0aGlzKTtcbiAgICAgICAgcmV0dXJuIHNlZW4ubWFwKChtLCBpKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3V0ID0gaSArIChtLnZhbGlkRW5kID8gXCIqXCIgOiBcIiBcIikgKyBcIiBcIjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbS5uZXh0Lmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIG91dCArPSAoaSA/IFwiLCBcIiA6IFwiXCIpICsgbS5uZXh0W2ldLnR5cGUubmFtZSArIFwiLT5cIiArIHNlZW4uaW5kZXhPZihtLm5leHRbaV0ubmV4dCk7XG4gICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICB9KS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbn1cbi8qKlxuQGludGVybmFsXG4qL1xuQ29udGVudE1hdGNoLmVtcHR5ID0gbmV3IENvbnRlbnRNYXRjaCh0cnVlKTtcbmNsYXNzIFRva2VuU3RyZWFtIHtcbiAgICBjb25zdHJ1Y3RvcihzdHJpbmcsIG5vZGVUeXBlcykge1xuICAgICAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICAgICAgdGhpcy5ub2RlVHlwZXMgPSBub2RlVHlwZXM7XG4gICAgICAgIHRoaXMuaW5saW5lID0gbnVsbDtcbiAgICAgICAgdGhpcy5wb3MgPSAwO1xuICAgICAgICB0aGlzLnRva2VucyA9IHN0cmluZy5zcGxpdCgvXFxzKig/PVxcYnxcXFd8JCkvKTtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5zW3RoaXMudG9rZW5zLmxlbmd0aCAtIDFdID09IFwiXCIpXG4gICAgICAgICAgICB0aGlzLnRva2Vucy5wb3AoKTtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5zWzBdID09IFwiXCIpXG4gICAgICAgICAgICB0aGlzLnRva2Vucy5zaGlmdCgpO1xuICAgIH1cbiAgICBnZXQgbmV4dCgpIHsgcmV0dXJuIHRoaXMudG9rZW5zW3RoaXMucG9zXTsgfVxuICAgIGVhdCh0b2spIHsgcmV0dXJuIHRoaXMubmV4dCA9PSB0b2sgJiYgKHRoaXMucG9zKysgfHwgdHJ1ZSk7IH1cbiAgICBlcnIoc3RyKSB7IHRocm93IG5ldyBTeW50YXhFcnJvcihzdHIgKyBcIiAoaW4gY29udGVudCBleHByZXNzaW9uICdcIiArIHRoaXMuc3RyaW5nICsgXCInKVwiKTsgfVxufVxuZnVuY3Rpb24gcGFyc2VFeHByKHN0cmVhbSkge1xuICAgIGxldCBleHBycyA9IFtdO1xuICAgIGRvIHtcbiAgICAgICAgZXhwcnMucHVzaChwYXJzZUV4cHJTZXEoc3RyZWFtKSk7XG4gICAgfSB3aGlsZSAoc3RyZWFtLmVhdChcInxcIikpO1xuICAgIHJldHVybiBleHBycy5sZW5ndGggPT0gMSA/IGV4cHJzWzBdIDogeyB0eXBlOiBcImNob2ljZVwiLCBleHBycyB9O1xufVxuZnVuY3Rpb24gcGFyc2VFeHByU2VxKHN0cmVhbSkge1xuICAgIGxldCBleHBycyA9IFtdO1xuICAgIGRvIHtcbiAgICAgICAgZXhwcnMucHVzaChwYXJzZUV4cHJTdWJzY3JpcHQoc3RyZWFtKSk7XG4gICAgfSB3aGlsZSAoc3RyZWFtLm5leHQgJiYgc3RyZWFtLm5leHQgIT0gXCIpXCIgJiYgc3RyZWFtLm5leHQgIT0gXCJ8XCIpO1xuICAgIHJldHVybiBleHBycy5sZW5ndGggPT0gMSA/IGV4cHJzWzBdIDogeyB0eXBlOiBcInNlcVwiLCBleHBycyB9O1xufVxuZnVuY3Rpb24gcGFyc2VFeHByU3Vic2NyaXB0KHN0cmVhbSkge1xuICAgIGxldCBleHByID0gcGFyc2VFeHByQXRvbShzdHJlYW0pO1xuICAgIGZvciAoOzspIHtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXQoXCIrXCIpKVxuICAgICAgICAgICAgZXhwciA9IHsgdHlwZTogXCJwbHVzXCIsIGV4cHIgfTtcbiAgICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdChcIipcIikpXG4gICAgICAgICAgICBleHByID0geyB0eXBlOiBcInN0YXJcIiwgZXhwciB9O1xuICAgICAgICBlbHNlIGlmIChzdHJlYW0uZWF0KFwiP1wiKSlcbiAgICAgICAgICAgIGV4cHIgPSB7IHR5cGU6IFwib3B0XCIsIGV4cHIgfTtcbiAgICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdChcIntcIikpXG4gICAgICAgICAgICBleHByID0gcGFyc2VFeHByUmFuZ2Uoc3RyZWFtLCBleHByKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBleHByO1xufVxuZnVuY3Rpb24gcGFyc2VOdW0oc3RyZWFtKSB7XG4gICAgaWYgKC9cXEQvLnRlc3Qoc3RyZWFtLm5leHQpKVxuICAgICAgICBzdHJlYW0uZXJyKFwiRXhwZWN0ZWQgbnVtYmVyLCBnb3QgJ1wiICsgc3RyZWFtLm5leHQgKyBcIidcIik7XG4gICAgbGV0IHJlc3VsdCA9IE51bWJlcihzdHJlYW0ubmV4dCk7XG4gICAgc3RyZWFtLnBvcysrO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBwYXJzZUV4cHJSYW5nZShzdHJlYW0sIGV4cHIpIHtcbiAgICBsZXQgbWluID0gcGFyc2VOdW0oc3RyZWFtKSwgbWF4ID0gbWluO1xuICAgIGlmIChzdHJlYW0uZWF0KFwiLFwiKSkge1xuICAgICAgICBpZiAoc3RyZWFtLm5leHQgIT0gXCJ9XCIpXG4gICAgICAgICAgICBtYXggPSBwYXJzZU51bShzdHJlYW0pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBtYXggPSAtMTtcbiAgICB9XG4gICAgaWYgKCFzdHJlYW0uZWF0KFwifVwiKSlcbiAgICAgICAgc3RyZWFtLmVycihcIlVuY2xvc2VkIGJyYWNlZCByYW5nZVwiKTtcbiAgICByZXR1cm4geyB0eXBlOiBcInJhbmdlXCIsIG1pbiwgbWF4LCBleHByIH07XG59XG5mdW5jdGlvbiByZXNvbHZlTmFtZShzdHJlYW0sIG5hbWUpIHtcbiAgICBsZXQgdHlwZXMgPSBzdHJlYW0ubm9kZVR5cGVzLCB0eXBlID0gdHlwZXNbbmFtZV07XG4gICAgaWYgKHR5cGUpXG4gICAgICAgIHJldHVybiBbdHlwZV07XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAobGV0IHR5cGVOYW1lIGluIHR5cGVzKSB7XG4gICAgICAgIGxldCB0eXBlID0gdHlwZXNbdHlwZU5hbWVdO1xuICAgICAgICBpZiAodHlwZS5ncm91cHMuaW5kZXhPZihuYW1lKSA+IC0xKVxuICAgICAgICAgICAgcmVzdWx0LnB1c2godHlwZSk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQubGVuZ3RoID09IDApXG4gICAgICAgIHN0cmVhbS5lcnIoXCJObyBub2RlIHR5cGUgb3IgZ3JvdXAgJ1wiICsgbmFtZSArIFwiJyBmb3VuZFwiKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gcGFyc2VFeHByQXRvbShzdHJlYW0pIHtcbiAgICBpZiAoc3RyZWFtLmVhdChcIihcIikpIHtcbiAgICAgICAgbGV0IGV4cHIgPSBwYXJzZUV4cHIoc3RyZWFtKTtcbiAgICAgICAgaWYgKCFzdHJlYW0uZWF0KFwiKVwiKSlcbiAgICAgICAgICAgIHN0cmVhbS5lcnIoXCJNaXNzaW5nIGNsb3NpbmcgcGFyZW5cIik7XG4gICAgICAgIHJldHVybiBleHByO1xuICAgIH1cbiAgICBlbHNlIGlmICghL1xcVy8udGVzdChzdHJlYW0ubmV4dCkpIHtcbiAgICAgICAgbGV0IGV4cHJzID0gcmVzb2x2ZU5hbWUoc3RyZWFtLCBzdHJlYW0ubmV4dCkubWFwKHR5cGUgPT4ge1xuICAgICAgICAgICAgaWYgKHN0cmVhbS5pbmxpbmUgPT0gbnVsbClcbiAgICAgICAgICAgICAgICBzdHJlYW0uaW5saW5lID0gdHlwZS5pc0lubGluZTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHN0cmVhbS5pbmxpbmUgIT0gdHlwZS5pc0lubGluZSlcbiAgICAgICAgICAgICAgICBzdHJlYW0uZXJyKFwiTWl4aW5nIGlubGluZSBhbmQgYmxvY2sgY29udGVudFwiKTtcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6IFwibmFtZVwiLCB2YWx1ZTogdHlwZSB9O1xuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtLnBvcysrO1xuICAgICAgICByZXR1cm4gZXhwcnMubGVuZ3RoID09IDEgPyBleHByc1swXSA6IHsgdHlwZTogXCJjaG9pY2VcIiwgZXhwcnMgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHN0cmVhbS5lcnIoXCJVbmV4cGVjdGVkIHRva2VuICdcIiArIHN0cmVhbS5uZXh0ICsgXCInXCIpO1xuICAgIH1cbn1cbi8qKlxuQ29uc3RydWN0IGFuIE5GQSBmcm9tIGFuIGV4cHJlc3Npb24gYXMgcmV0dXJuZWQgYnkgdGhlIHBhcnNlci4gVGhlXG5ORkEgaXMgcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkgb2Ygc3RhdGVzLCB3aGljaCBhcmUgdGhlbXNlbHZlc1xuYXJyYXlzIG9mIGVkZ2VzLCB3aGljaCBhcmUgYHt0ZXJtLCB0b31gIG9iamVjdHMuIFRoZSBmaXJzdCBzdGF0ZSBpc1xudGhlIGVudHJ5IHN0YXRlIGFuZCB0aGUgbGFzdCBub2RlIGlzIHRoZSBzdWNjZXNzIHN0YXRlLlxuXG5Ob3RlIHRoYXQgdW5saWtlIHR5cGljYWwgTkZBcywgdGhlIGVkZ2Ugb3JkZXJpbmcgaW4gdGhpcyBvbmUgaXNcbnNpZ25pZmljYW50LCBpbiB0aGF0IGl0IGlzIHVzZWQgdG8gY29udHJ1Y3QgZmlsbGVyIGNvbnRlbnQgd2hlblxubmVjZXNzYXJ5LlxuKi9cbmZ1bmN0aW9uIG5mYShleHByKSB7XG4gICAgbGV0IG5mYSA9IFtbXV07XG4gICAgY29ubmVjdChjb21waWxlKGV4cHIsIDApLCBub2RlKCkpO1xuICAgIHJldHVybiBuZmE7XG4gICAgZnVuY3Rpb24gbm9kZSgpIHsgcmV0dXJuIG5mYS5wdXNoKFtdKSAtIDE7IH1cbiAgICBmdW5jdGlvbiBlZGdlKGZyb20sIHRvLCB0ZXJtKSB7XG4gICAgICAgIGxldCBlZGdlID0geyB0ZXJtLCB0byB9O1xuICAgICAgICBuZmFbZnJvbV0ucHVzaChlZGdlKTtcbiAgICAgICAgcmV0dXJuIGVkZ2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbm5lY3QoZWRnZXMsIHRvKSB7XG4gICAgICAgIGVkZ2VzLmZvckVhY2goZWRnZSA9PiBlZGdlLnRvID0gdG8pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21waWxlKGV4cHIsIGZyb20pIHtcbiAgICAgICAgaWYgKGV4cHIudHlwZSA9PSBcImNob2ljZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwci5leHBycy5yZWR1Y2UoKG91dCwgZXhwcikgPT4gb3V0LmNvbmNhdChjb21waWxlKGV4cHIsIGZyb20pKSwgW10pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV4cHIudHlwZSA9PSBcInNlcVwiKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDs7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBuZXh0ID0gY29tcGlsZShleHByLmV4cHJzW2ldLCBmcm9tKTtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PSBleHByLmV4cHJzLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgICAgIGNvbm5lY3QobmV4dCwgZnJvbSA9IG5vZGUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXhwci50eXBlID09IFwic3RhclwiKSB7XG4gICAgICAgICAgICBsZXQgbG9vcCA9IG5vZGUoKTtcbiAgICAgICAgICAgIGVkZ2UoZnJvbSwgbG9vcCk7XG4gICAgICAgICAgICBjb25uZWN0KGNvbXBpbGUoZXhwci5leHByLCBsb29wKSwgbG9vcCk7XG4gICAgICAgICAgICByZXR1cm4gW2VkZ2UobG9vcCldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV4cHIudHlwZSA9PSBcInBsdXNcIikge1xuICAgICAgICAgICAgbGV0IGxvb3AgPSBub2RlKCk7XG4gICAgICAgICAgICBjb25uZWN0KGNvbXBpbGUoZXhwci5leHByLCBmcm9tKSwgbG9vcCk7XG4gICAgICAgICAgICBjb25uZWN0KGNvbXBpbGUoZXhwci5leHByLCBsb29wKSwgbG9vcCk7XG4gICAgICAgICAgICByZXR1cm4gW2VkZ2UobG9vcCldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV4cHIudHlwZSA9PSBcIm9wdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gW2VkZ2UoZnJvbSldLmNvbmNhdChjb21waWxlKGV4cHIuZXhwciwgZnJvbSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV4cHIudHlwZSA9PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgIGxldCBjdXIgPSBmcm9tO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHByLm1pbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5leHQgPSBub2RlKCk7XG4gICAgICAgICAgICAgICAgY29ubmVjdChjb21waWxlKGV4cHIuZXhwciwgY3VyKSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgY3VyID0gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChleHByLm1heCA9PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbm5lY3QoY29tcGlsZShleHByLmV4cHIsIGN1ciksIGN1cik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gZXhwci5taW47IGkgPCBleHByLm1heDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBuZXh0ID0gbm9kZSgpO1xuICAgICAgICAgICAgICAgICAgICBlZGdlKGN1ciwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbm5lY3QoY29tcGlsZShleHByLmV4cHIsIGN1ciksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICBjdXIgPSBuZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbZWRnZShjdXIpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChleHByLnR5cGUgPT0gXCJuYW1lXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBbZWRnZShmcm9tLCB1bmRlZmluZWQsIGV4cHIudmFsdWUpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZXhwciB0eXBlXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gY21wKGEsIGIpIHsgcmV0dXJuIGIgLSBhOyB9XG4vLyBHZXQgdGhlIHNldCBvZiBub2RlcyByZWFjaGFibGUgYnkgbnVsbCBlZGdlcyBmcm9tIGBub2RlYC4gT21pdFxuLy8gbm9kZXMgd2l0aCBvbmx5IGEgc2luZ2xlIG51bGwtb3V0LWVkZ2UsIHNpbmNlIHRoZXkgbWF5IGxlYWQgdG9cbi8vIG5lZWRsZXNzIGR1cGxpY2F0ZWQgbm9kZXMuXG5mdW5jdGlvbiBudWxsRnJvbShuZmEsIG5vZGUpIHtcbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgc2Nhbihub2RlKTtcbiAgICByZXR1cm4gcmVzdWx0LnNvcnQoY21wKTtcbiAgICBmdW5jdGlvbiBzY2FuKG5vZGUpIHtcbiAgICAgICAgbGV0IGVkZ2VzID0gbmZhW25vZGVdO1xuICAgICAgICBpZiAoZWRnZXMubGVuZ3RoID09IDEgJiYgIWVkZ2VzWzBdLnRlcm0pXG4gICAgICAgICAgICByZXR1cm4gc2NhbihlZGdlc1swXS50byk7XG4gICAgICAgIHJlc3VsdC5wdXNoKG5vZGUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgeyB0ZXJtLCB0byB9ID0gZWRnZXNbaV07XG4gICAgICAgICAgICBpZiAoIXRlcm0gJiYgcmVzdWx0LmluZGV4T2YodG8pID09IC0xKVxuICAgICAgICAgICAgICAgIHNjYW4odG8pO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8gQ29tcGlsZXMgYW4gTkZBIGFzIHByb2R1Y2VkIGJ5IGBuZmFgIGludG8gYSBERkEsIG1vZGVsZWQgYXMgYSBzZXRcbi8vIG9mIHN0YXRlIG9iamVjdHMgKGBDb250ZW50TWF0Y2hgIGluc3RhbmNlcykgd2l0aCB0cmFuc2l0aW9uc1xuLy8gYmV0d2VlbiB0aGVtLlxuZnVuY3Rpb24gZGZhKG5mYSkge1xuICAgIGxldCBsYWJlbGVkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICByZXR1cm4gZXhwbG9yZShudWxsRnJvbShuZmEsIDApKTtcbiAgICBmdW5jdGlvbiBleHBsb3JlKHN0YXRlcykge1xuICAgICAgICBsZXQgb3V0ID0gW107XG4gICAgICAgIHN0YXRlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgbmZhW25vZGVdLmZvckVhY2goKHsgdGVybSwgdG8gfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGVybSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGxldCBzZXQ7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXQubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGlmIChvdXRbaV1bMF0gPT0gdGVybSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IG91dFtpXVsxXTtcbiAgICAgICAgICAgICAgICBudWxsRnJvbShuZmEsIHRvKS5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNldClcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wdXNoKFt0ZXJtLCBzZXQgPSBbXV0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0LmluZGV4T2Yobm9kZSkgPT0gLTEpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHN0YXRlID0gbGFiZWxlZFtzdGF0ZXMuam9pbihcIixcIildID0gbmV3IENvbnRlbnRNYXRjaChzdGF0ZXMuaW5kZXhPZihuZmEubGVuZ3RoIC0gMSkgPiAtMSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgc3RhdGVzID0gb3V0W2ldWzFdLnNvcnQoY21wKTtcbiAgICAgICAgICAgIHN0YXRlLm5leHQucHVzaCh7IHR5cGU6IG91dFtpXVswXSwgbmV4dDogbGFiZWxlZFtzdGF0ZXMuam9pbihcIixcIildIHx8IGV4cGxvcmUoc3RhdGVzKSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxufVxuZnVuY3Rpb24gY2hlY2tGb3JEZWFkRW5kcyhtYXRjaCwgc3RyZWFtKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIHdvcmsgPSBbbWF0Y2hdOyBpIDwgd29yay5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgc3RhdGUgPSB3b3JrW2ldLCBkZWFkID0gIXN0YXRlLnZhbGlkRW5kLCBub2RlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHN0YXRlLm5leHQubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB7IHR5cGUsIG5leHQgfSA9IHN0YXRlLm5leHRbal07XG4gICAgICAgICAgICBub2Rlcy5wdXNoKHR5cGUubmFtZSk7XG4gICAgICAgICAgICBpZiAoZGVhZCAmJiAhKHR5cGUuaXNUZXh0IHx8IHR5cGUuaGFzUmVxdWlyZWRBdHRycygpKSlcbiAgICAgICAgICAgICAgICBkZWFkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAod29yay5pbmRleE9mKG5leHQpID09IC0xKVxuICAgICAgICAgICAgICAgIHdvcmsucHVzaChuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVhZClcbiAgICAgICAgICAgIHN0cmVhbS5lcnIoXCJPbmx5IG5vbi1nZW5lcmF0YWJsZSBub2RlcyAoXCIgKyBub2Rlcy5qb2luKFwiLCBcIikgKyBcIikgaW4gYSByZXF1aXJlZCBwb3NpdGlvbiAoc2VlIGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvZ3VpZGUvI2dlbmVyYXRhYmxlKVwiKTtcbiAgICB9XG59XG5cbi8vIEZvciBub2RlIHR5cGVzIHdoZXJlIGFsbCBhdHRycyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAob3Igd2hpY2ggZG9uJ3Rcbi8vIGhhdmUgYW55IGF0dHJpYnV0ZXMpLCBidWlsZCB1cCBhIHNpbmdsZSByZXVzYWJsZSBkZWZhdWx0IGF0dHJpYnV0ZVxuLy8gb2JqZWN0LCBhbmQgdXNlIGl0IGZvciBhbGwgbm9kZXMgdGhhdCBkb24ndCBzcGVjaWZ5IHNwZWNpZmljXG4vLyBhdHRyaWJ1dGVzLlxuZnVuY3Rpb24gZGVmYXVsdEF0dHJzKGF0dHJzKSB7XG4gICAgbGV0IGRlZmF1bHRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGxldCBhdHRyTmFtZSBpbiBhdHRycykge1xuICAgICAgICBsZXQgYXR0ciA9IGF0dHJzW2F0dHJOYW1lXTtcbiAgICAgICAgaWYgKCFhdHRyLmhhc0RlZmF1bHQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgZGVmYXVsdHNbYXR0ck5hbWVdID0gYXR0ci5kZWZhdWx0O1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdHM7XG59XG5mdW5jdGlvbiBjb21wdXRlQXR0cnMoYXR0cnMsIHZhbHVlKSB7XG4gICAgbGV0IGJ1aWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGxldCBuYW1lIGluIGF0dHJzKSB7XG4gICAgICAgIGxldCBnaXZlbiA9IHZhbHVlICYmIHZhbHVlW25hbWVdO1xuICAgICAgICBpZiAoZ2l2ZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IGF0dHIgPSBhdHRyc1tuYW1lXTtcbiAgICAgICAgICAgIGlmIChhdHRyLmhhc0RlZmF1bHQpXG4gICAgICAgICAgICAgICAgZ2l2ZW4gPSBhdHRyLmRlZmF1bHQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJObyB2YWx1ZSBzdXBwbGllZCBmb3IgYXR0cmlidXRlIFwiICsgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnVpbHRbbmFtZV0gPSBnaXZlbjtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWx0O1xufVxuZnVuY3Rpb24gaW5pdEF0dHJzKGF0dHJzKSB7XG4gICAgbGV0IHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgaWYgKGF0dHJzKVxuICAgICAgICBmb3IgKGxldCBuYW1lIGluIGF0dHJzKVxuICAgICAgICAgICAgcmVzdWx0W25hbWVdID0gbmV3IEF0dHJpYnV0ZShhdHRyc1tuYW1lXSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuTm9kZSB0eXBlcyBhcmUgb2JqZWN0cyBhbGxvY2F0ZWQgb25jZSBwZXIgYFNjaGVtYWAgYW5kIHVzZWQgdG9cblt0YWddKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNtb2RlbC5Ob2RlLnR5cGUpIGBOb2RlYCBpbnN0YW5jZXMuIFRoZXkgY29udGFpbiBpbmZvcm1hdGlvblxuYWJvdXQgdGhlIG5vZGUgdHlwZSwgc3VjaCBhcyBpdHMgbmFtZSBhbmQgd2hhdCBraW5kIG9mIG5vZGUgaXRcbnJlcHJlc2VudHMuXG4qL1xuY2xhc3MgTm9kZVR5cGUge1xuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgVGhlIG5hbWUgdGhlIG5vZGUgdHlwZSBoYXMgaW4gdGhpcyBzY2hlbWEuXG4gICAgKi9cbiAgICBuYW1lLCBcbiAgICAvKipcbiAgICBBIGxpbmsgYmFjayB0byB0aGUgYFNjaGVtYWAgdGhlIG5vZGUgdHlwZSBiZWxvbmdzIHRvLlxuICAgICovXG4gICAgc2NoZW1hLCBcbiAgICAvKipcbiAgICBUaGUgc3BlYyB0aGF0IHRoaXMgdHlwZSBpcyBiYXNlZCBvblxuICAgICovXG4gICAgc3BlYykge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcbiAgICAgICAgdGhpcy5zcGVjID0gc3BlYztcbiAgICAgICAgLyoqXG4gICAgICAgIFRoZSBzZXQgb2YgbWFya3MgYWxsb3dlZCBpbiB0aGlzIG5vZGUuIGBudWxsYCBtZWFucyBhbGwgbWFya3NcbiAgICAgICAgYXJlIGFsbG93ZWQuXG4gICAgICAgICovXG4gICAgICAgIHRoaXMubWFya1NldCA9IG51bGw7XG4gICAgICAgIHRoaXMuZ3JvdXBzID0gc3BlYy5ncm91cCA/IHNwZWMuZ3JvdXAuc3BsaXQoXCIgXCIpIDogW107XG4gICAgICAgIHRoaXMuYXR0cnMgPSBpbml0QXR0cnMoc3BlYy5hdHRycyk7XG4gICAgICAgIHRoaXMuZGVmYXVsdEF0dHJzID0gZGVmYXVsdEF0dHJzKHRoaXMuYXR0cnMpO1xuICAgICAgICB0aGlzLmNvbnRlbnRNYXRjaCA9IG51bGw7XG4gICAgICAgIHRoaXMuaW5saW5lQ29udGVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuaXNCbG9jayA9ICEoc3BlYy5pbmxpbmUgfHwgbmFtZSA9PSBcInRleHRcIik7XG4gICAgICAgIHRoaXMuaXNUZXh0ID0gbmFtZSA9PSBcInRleHRcIjtcbiAgICB9XG4gICAgLyoqXG4gICAgVHJ1ZSBpZiB0aGlzIGlzIGFuIGlubGluZSB0eXBlLlxuICAgICovXG4gICAgZ2V0IGlzSW5saW5lKCkgeyByZXR1cm4gIXRoaXMuaXNCbG9jazsgfVxuICAgIC8qKlxuICAgIFRydWUgaWYgdGhpcyBpcyBhIHRleHRibG9jayB0eXBlLCBhIGJsb2NrIHRoYXQgY29udGFpbnMgaW5saW5lXG4gICAgY29udGVudC5cbiAgICAqL1xuICAgIGdldCBpc1RleHRibG9jaygpIHsgcmV0dXJuIHRoaXMuaXNCbG9jayAmJiB0aGlzLmlubGluZUNvbnRlbnQ7IH1cbiAgICAvKipcbiAgICBUcnVlIGZvciBub2RlIHR5cGVzIHRoYXQgYWxsb3cgbm8gY29udGVudC5cbiAgICAqL1xuICAgIGdldCBpc0xlYWYoKSB7IHJldHVybiB0aGlzLmNvbnRlbnRNYXRjaCA9PSBDb250ZW50TWF0Y2guZW1wdHk7IH1cbiAgICAvKipcbiAgICBUcnVlIHdoZW4gdGhpcyBub2RlIGlzIGFuIGF0b20sIGkuZS4gd2hlbiBpdCBkb2VzIG5vdCBoYXZlXG4gICAgZGlyZWN0bHkgZWRpdGFibGUgY29udGVudC5cbiAgICAqL1xuICAgIGdldCBpc0F0b20oKSB7IHJldHVybiB0aGlzLmlzTGVhZiB8fCAhIXRoaXMuc3BlYy5hdG9tOyB9XG4gICAgLyoqXG4gICAgVGhlIG5vZGUgdHlwZSdzIFt3aGl0ZXNwYWNlXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jbW9kZWwuTm9kZVNwZWMud2hpdGVzcGFjZSkgb3B0aW9uLlxuICAgICovXG4gICAgZ2V0IHdoaXRlc3BhY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNwZWMud2hpdGVzcGFjZSB8fCAodGhpcy5zcGVjLmNvZGUgPyBcInByZVwiIDogXCJub3JtYWxcIik7XG4gICAgfVxuICAgIC8qKlxuICAgIFRlbGxzIHlvdSB3aGV0aGVyIHRoaXMgbm9kZSB0eXBlIGhhcyBhbnkgcmVxdWlyZWQgYXR0cmlidXRlcy5cbiAgICAqL1xuICAgIGhhc1JlcXVpcmVkQXR0cnMoKSB7XG4gICAgICAgIGZvciAobGV0IG4gaW4gdGhpcy5hdHRycylcbiAgICAgICAgICAgIGlmICh0aGlzLmF0dHJzW25dLmlzUmVxdWlyZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBub2RlIGFsbG93cyBzb21lIG9mIHRoZSBzYW1lIGNvbnRlbnQgYXNcbiAgICB0aGUgZ2l2ZW4gbm9kZSB0eXBlLlxuICAgICovXG4gICAgY29tcGF0aWJsZUNvbnRlbnQob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMgPT0gb3RoZXIgfHwgdGhpcy5jb250ZW50TWF0Y2guY29tcGF0aWJsZShvdGhlci5jb250ZW50TWF0Y2gpO1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIGNvbXB1dGVBdHRycyhhdHRycykge1xuICAgICAgICBpZiAoIWF0dHJzICYmIHRoaXMuZGVmYXVsdEF0dHJzKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEF0dHJzO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gY29tcHV0ZUF0dHJzKHRoaXMuYXR0cnMsIGF0dHJzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQ3JlYXRlIGEgYE5vZGVgIG9mIHRoaXMgdHlwZS4gVGhlIGdpdmVuIGF0dHJpYnV0ZXMgYXJlXG4gICAgY2hlY2tlZCBhbmQgZGVmYXVsdGVkICh5b3UgY2FuIHBhc3MgYG51bGxgIHRvIHVzZSB0aGUgdHlwZSdzXG4gICAgZGVmYXVsdHMgZW50aXJlbHksIGlmIG5vIHJlcXVpcmVkIGF0dHJpYnV0ZXMgZXhpc3QpLiBgY29udGVudGBcbiAgICBtYXkgYmUgYSBgRnJhZ21lbnRgLCBhIG5vZGUsIGFuIGFycmF5IG9mIG5vZGVzLCBvclxuICAgIGBudWxsYC4gU2ltaWxhcmx5IGBtYXJrc2AgbWF5IGJlIGBudWxsYCB0byBkZWZhdWx0IHRvIHRoZSBlbXB0eVxuICAgIHNldCBvZiBtYXJrcy5cbiAgICAqL1xuICAgIGNyZWF0ZShhdHRycyA9IG51bGwsIGNvbnRlbnQsIG1hcmtzKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVGV4dClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vZGVUeXBlLmNyZWF0ZSBjYW4ndCBjb25zdHJ1Y3QgdGV4dCBub2Rlc1wiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBOb2RlKHRoaXMsIHRoaXMuY29tcHV0ZUF0dHJzKGF0dHJzKSwgRnJhZ21lbnQuZnJvbShjb250ZW50KSwgTWFyay5zZXRGcm9tKG1hcmtzKSk7XG4gICAgfVxuICAgIC8qKlxuICAgIExpa2UgW2BjcmVhdGVgXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jbW9kZWwuTm9kZVR5cGUuY3JlYXRlKSwgYnV0IGNoZWNrIHRoZSBnaXZlbiBjb250ZW50XG4gICAgYWdhaW5zdCB0aGUgbm9kZSB0eXBlJ3MgY29udGVudCByZXN0cmljdGlvbnMsIGFuZCB0aHJvdyBhbiBlcnJvclxuICAgIGlmIGl0IGRvZXNuJ3QgbWF0Y2guXG4gICAgKi9cbiAgICBjcmVhdGVDaGVja2VkKGF0dHJzID0gbnVsbCwgY29udGVudCwgbWFya3MpIHtcbiAgICAgICAgY29udGVudCA9IEZyYWdtZW50LmZyb20oY29udGVudCk7XG4gICAgICAgIHRoaXMuY2hlY2tDb250ZW50KGNvbnRlbnQpO1xuICAgICAgICByZXR1cm4gbmV3IE5vZGUodGhpcywgdGhpcy5jb21wdXRlQXR0cnMoYXR0cnMpLCBjb250ZW50LCBNYXJrLnNldEZyb20obWFya3MpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgTGlrZSBbYGNyZWF0ZWBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNtb2RlbC5Ob2RlVHlwZS5jcmVhdGUpLCBidXQgc2VlIGlmIGl0IGlzXG4gICAgbmVjZXNzYXJ5IHRvIGFkZCBub2RlcyB0byB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSBnaXZlbiBmcmFnbWVudFxuICAgIHRvIG1ha2UgaXQgZml0IHRoZSBub2RlLiBJZiBubyBmaXR0aW5nIHdyYXBwaW5nIGNhbiBiZSBmb3VuZCxcbiAgICByZXR1cm4gbnVsbC4gTm90ZSB0aGF0LCBkdWUgdG8gdGhlIGZhY3QgdGhhdCByZXF1aXJlZCBub2RlcyBjYW5cbiAgICBhbHdheXMgYmUgY3JlYXRlZCwgdGhpcyB3aWxsIGFsd2F5cyBzdWNjZWVkIGlmIHlvdSBwYXNzIG51bGwgb3JcbiAgICBgRnJhZ21lbnQuZW1wdHlgIGFzIGNvbnRlbnQuXG4gICAgKi9cbiAgICBjcmVhdGVBbmRGaWxsKGF0dHJzID0gbnVsbCwgY29udGVudCwgbWFya3MpIHtcbiAgICAgICAgYXR0cnMgPSB0aGlzLmNvbXB1dGVBdHRycyhhdHRycyk7XG4gICAgICAgIGNvbnRlbnQgPSBGcmFnbWVudC5mcm9tKGNvbnRlbnQpO1xuICAgICAgICBpZiAoY29udGVudC5zaXplKSB7XG4gICAgICAgICAgICBsZXQgYmVmb3JlID0gdGhpcy5jb250ZW50TWF0Y2guZmlsbEJlZm9yZShjb250ZW50KTtcbiAgICAgICAgICAgIGlmICghYmVmb3JlKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29udGVudCA9IGJlZm9yZS5hcHBlbmQoY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1hdGNoZWQgPSB0aGlzLmNvbnRlbnRNYXRjaC5tYXRjaEZyYWdtZW50KGNvbnRlbnQpO1xuICAgICAgICBsZXQgYWZ0ZXIgPSBtYXRjaGVkICYmIG1hdGNoZWQuZmlsbEJlZm9yZShGcmFnbWVudC5lbXB0eSwgdHJ1ZSk7XG4gICAgICAgIGlmICghYWZ0ZXIpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIG5ldyBOb2RlKHRoaXMsIGF0dHJzLCBjb250ZW50LmFwcGVuZChhZnRlciksIE1hcmsuc2V0RnJvbShtYXJrcykpO1xuICAgIH1cbiAgICAvKipcbiAgICBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGZyYWdtZW50IGlzIHZhbGlkIGNvbnRlbnQgZm9yIHRoaXMgbm9kZVxuICAgIHR5cGUgd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRlcy5cbiAgICAqL1xuICAgIHZhbGlkQ29udGVudChjb250ZW50KSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLmNvbnRlbnRNYXRjaC5tYXRjaEZyYWdtZW50KGNvbnRlbnQpO1xuICAgICAgICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0LnZhbGlkRW5kKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRlbnQuY2hpbGRDb3VudDsgaSsrKVxuICAgICAgICAgICAgaWYgKCF0aGlzLmFsbG93c01hcmtzKGNvbnRlbnQuY2hpbGQoaSkubWFya3MpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgIFRocm93cyBhIFJhbmdlRXJyb3IgaWYgdGhlIGdpdmVuIGZyYWdtZW50IGlzIG5vdCB2YWxpZCBjb250ZW50IGZvciB0aGlzXG4gICAgbm9kZSB0eXBlLlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgY2hlY2tDb250ZW50KGNvbnRlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkQ29udGVudChjb250ZW50KSlcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIGNvbnRlbnQgZm9yIG5vZGUgJHt0aGlzLm5hbWV9OiAke2NvbnRlbnQudG9TdHJpbmcoKS5zbGljZSgwLCA1MCl9YCk7XG4gICAgfVxuICAgIC8qKlxuICAgIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIG1hcmsgdHlwZSBpcyBhbGxvd2VkIGluIHRoaXMgbm9kZS5cbiAgICAqL1xuICAgIGFsbG93c01hcmtUeXBlKG1hcmtUeXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcmtTZXQgPT0gbnVsbCB8fCB0aGlzLm1hcmtTZXQuaW5kZXhPZihtYXJrVHlwZSkgPiAtMTtcbiAgICB9XG4gICAgLyoqXG4gICAgVGVzdCB3aGV0aGVyIHRoZSBnaXZlbiBzZXQgb2YgbWFya3MgYXJlIGFsbG93ZWQgaW4gdGhpcyBub2RlLlxuICAgICovXG4gICAgYWxsb3dzTWFya3MobWFya3MpIHtcbiAgICAgICAgaWYgKHRoaXMubWFya1NldCA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFya3MubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dzTWFya1R5cGUobWFya3NbaV0udHlwZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgUmVtb3ZlcyB0aGUgbWFya3MgdGhhdCBhcmUgbm90IGFsbG93ZWQgaW4gdGhpcyBub2RlIGZyb20gdGhlIGdpdmVuIHNldC5cbiAgICAqL1xuICAgIGFsbG93ZWRNYXJrcyhtYXJrcykge1xuICAgICAgICBpZiAodGhpcy5tYXJrU2V0ID09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gbWFya3M7XG4gICAgICAgIGxldCBjb3B5O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dzTWFya1R5cGUobWFya3NbaV0udHlwZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvcHkpXG4gICAgICAgICAgICAgICAgICAgIGNvcHkgPSBtYXJrcy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvcHkpIHtcbiAgICAgICAgICAgICAgICBjb3B5LnB1c2gobWFya3NbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhY29weSA/IG1hcmtzIDogY29weS5sZW5ndGggPyBjb3B5IDogTWFyay5ub25lO1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHN0YXRpYyBjb21waWxlKG5vZGVzLCBzY2hlbWEpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG5hbWUsIHNwZWMpID0+IHJlc3VsdFtuYW1lXSA9IG5ldyBOb2RlVHlwZShuYW1lLCBzY2hlbWEsIHNwZWMpKTtcbiAgICAgICAgbGV0IHRvcFR5cGUgPSBzY2hlbWEuc3BlYy50b3BOb2RlIHx8IFwiZG9jXCI7XG4gICAgICAgIGlmICghcmVzdWx0W3RvcFR5cGVdKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJTY2hlbWEgaXMgbWlzc2luZyBpdHMgdG9wIG5vZGUgdHlwZSAoJ1wiICsgdG9wVHlwZSArIFwiJylcIik7XG4gICAgICAgIGlmICghcmVzdWx0LnRleHQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkV2ZXJ5IHNjaGVtYSBuZWVkcyBhICd0ZXh0JyB0eXBlXCIpO1xuICAgICAgICBmb3IgKGxldCBfIGluIHJlc3VsdC50ZXh0LmF0dHJzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgdGV4dCBub2RlIHR5cGUgc2hvdWxkIG5vdCBoYXZlIGF0dHJpYnV0ZXNcIik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8gQXR0cmlidXRlIGRlc2NyaXB0b3JzXG5jbGFzcyBBdHRyaWJ1dGUge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5oYXNEZWZhdWx0ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsIFwiZGVmYXVsdFwiKTtcbiAgICAgICAgdGhpcy5kZWZhdWx0ID0gb3B0aW9ucy5kZWZhdWx0O1xuICAgIH1cbiAgICBnZXQgaXNSZXF1aXJlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmhhc0RlZmF1bHQ7XG4gICAgfVxufVxuLy8gTWFya3Ncbi8qKlxuTGlrZSBub2RlcywgbWFya3MgKHdoaWNoIGFyZSBhc3NvY2lhdGVkIHdpdGggbm9kZXMgdG8gc2lnbmlmeVxudGhpbmdzIGxpa2UgZW1waGFzaXMgb3IgYmVpbmcgcGFydCBvZiBhIGxpbmspIGFyZVxuW3RhZ2dlZF0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI21vZGVsLk1hcmsudHlwZSkgd2l0aCB0eXBlIG9iamVjdHMsIHdoaWNoIGFyZVxuaW5zdGFudGlhdGVkIG9uY2UgcGVyIGBTY2hlbWFgLlxuKi9cbmNsYXNzIE1hcmtUeXBlIHtcbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgIC8qKlxuICAgIFRoZSBuYW1lIG9mIHRoZSBtYXJrIHR5cGUuXG4gICAgKi9cbiAgICBuYW1lLCBcbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHJhbmssIFxuICAgIC8qKlxuICAgIFRoZSBzY2hlbWEgdGhhdCB0aGlzIG1hcmsgdHlwZSBpbnN0YW5jZSBpcyBwYXJ0IG9mLlxuICAgICovXG4gICAgc2NoZW1hLCBcbiAgICAvKipcbiAgICBUaGUgc3BlYyBvbiB3aGljaCB0aGUgdHlwZSBpcyBiYXNlZC5cbiAgICAqL1xuICAgIHNwZWMpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5yYW5rID0gcmFuaztcbiAgICAgICAgdGhpcy5zY2hlbWEgPSBzY2hlbWE7XG4gICAgICAgIHRoaXMuc3BlYyA9IHNwZWM7XG4gICAgICAgIHRoaXMuYXR0cnMgPSBpbml0QXR0cnMoc3BlYy5hdHRycyk7XG4gICAgICAgIHRoaXMuZXhjbHVkZWQgPSBudWxsO1xuICAgICAgICBsZXQgZGVmYXVsdHMgPSBkZWZhdWx0QXR0cnModGhpcy5hdHRycyk7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSBkZWZhdWx0cyA/IG5ldyBNYXJrKHRoaXMsIGRlZmF1bHRzKSA6IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgIENyZWF0ZSBhIG1hcmsgb2YgdGhpcyB0eXBlLiBgYXR0cnNgIG1heSBiZSBgbnVsbGAgb3IgYW4gb2JqZWN0XG4gICAgY29udGFpbmluZyBvbmx5IHNvbWUgb2YgdGhlIG1hcmsncyBhdHRyaWJ1dGVzLiBUaGUgb3RoZXJzLCBpZlxuICAgIHRoZXkgaGF2ZSBkZWZhdWx0cywgd2lsbCBiZSBhZGRlZC5cbiAgICAqL1xuICAgIGNyZWF0ZShhdHRycyA9IG51bGwpIHtcbiAgICAgICAgaWYgKCFhdHRycyAmJiB0aGlzLmluc3RhbmNlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2U7XG4gICAgICAgIHJldHVybiBuZXcgTWFyayh0aGlzLCBjb21wdXRlQXR0cnModGhpcy5hdHRycywgYXR0cnMpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBzdGF0aWMgY29tcGlsZShtYXJrcywgc2NoZW1hKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpLCByYW5rID0gMDtcbiAgICAgICAgbWFya3MuZm9yRWFjaCgobmFtZSwgc3BlYykgPT4gcmVzdWx0W25hbWVdID0gbmV3IE1hcmtUeXBlKG5hbWUsIHJhbmsrKywgc2NoZW1hLCBzcGVjKSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgIFdoZW4gdGhlcmUgaXMgYSBtYXJrIG9mIHRoaXMgdHlwZSBpbiB0aGUgZ2l2ZW4gc2V0LCBhIG5ldyBzZXRcbiAgICB3aXRob3V0IGl0IGlzIHJldHVybmVkLiBPdGhlcndpc2UsIHRoZSBpbnB1dCBzZXQgaXMgcmV0dXJuZWQuXG4gICAgKi9cbiAgICByZW1vdmVGcm9tU2V0KHNldCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGlmIChzZXRbaV0udHlwZSA9PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgc2V0ID0gc2V0LnNsaWNlKDAsIGkpLmNvbmNhdChzZXQuc2xpY2UoaSArIDEpKTtcbiAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgIFRlc3RzIHdoZXRoZXIgdGhlcmUgaXMgYSBtYXJrIG9mIHRoaXMgdHlwZSBpbiB0aGUgZ2l2ZW4gc2V0LlxuICAgICovXG4gICAgaXNJblNldChzZXQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBpZiAoc2V0W2ldLnR5cGUgPT0gdGhpcylcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0W2ldO1xuICAgIH1cbiAgICAvKipcbiAgICBRdWVyaWVzIHdoZXRoZXIgYSBnaXZlbiBtYXJrIHR5cGUgaXNcbiAgICBbZXhjbHVkZWRdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNtb2RlbC5NYXJrU3BlYy5leGNsdWRlcykgYnkgdGhpcyBvbmUuXG4gICAgKi9cbiAgICBleGNsdWRlcyhvdGhlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5leGNsdWRlZC5pbmRleE9mKG90aGVyKSA+IC0xO1xuICAgIH1cbn1cbi8qKlxuQSBkb2N1bWVudCBzY2hlbWEuIEhvbGRzIFtub2RlXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jbW9kZWwuTm9kZVR5cGUpIGFuZCBbbWFya1xudHlwZV0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI21vZGVsLk1hcmtUeXBlKSBvYmplY3RzIGZvciB0aGUgbm9kZXMgYW5kIG1hcmtzIHRoYXQgbWF5XG5vY2N1ciBpbiBjb25mb3JtaW5nIGRvY3VtZW50cywgYW5kIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgZm9yXG5jcmVhdGluZyBhbmQgZGVzZXJpYWxpemluZyBzdWNoIGRvY3VtZW50cy5cblxuV2hlbiBnaXZlbiwgdGhlIHR5cGUgcGFyYW1ldGVycyBwcm92aWRlIHRoZSBuYW1lcyBvZiB0aGUgbm9kZXMgYW5kXG5tYXJrcyBpbiB0aGlzIHNjaGVtYS5cbiovXG5jbGFzcyBTY2hlbWEge1xuICAgIC8qKlxuICAgIENvbnN0cnVjdCBhIHNjaGVtYSBmcm9tIGEgc2NoZW1hIFtzcGVjaWZpY2F0aW9uXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jbW9kZWwuU2NoZW1hU3BlYykuXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcihzcGVjKSB7XG4gICAgICAgIC8qKlxuICAgICAgICBBbiBvYmplY3QgZm9yIHN0b3Jpbmcgd2hhdGV2ZXIgdmFsdWVzIG1vZHVsZXMgbWF5IHdhbnQgdG9cbiAgICAgICAgY29tcHV0ZSBhbmQgY2FjaGUgcGVyIHNjaGVtYS4gKElmIHlvdSB3YW50IHRvIHN0b3JlIHNvbWV0aGluZ1xuICAgICAgICBpbiBpdCwgdHJ5IHRvIHVzZSBwcm9wZXJ0eSBuYW1lcyB1bmxpa2VseSB0byBjbGFzaC4pXG4gICAgICAgICovXG4gICAgICAgIHRoaXMuY2FjaGVkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgbGV0IGluc3RhbmNlU3BlYyA9IHRoaXMuc3BlYyA9IHt9O1xuICAgICAgICBmb3IgKGxldCBwcm9wIGluIHNwZWMpXG4gICAgICAgICAgICBpbnN0YW5jZVNwZWNbcHJvcF0gPSBzcGVjW3Byb3BdO1xuICAgICAgICBpbnN0YW5jZVNwZWMubm9kZXMgPSBPcmRlcmVkTWFwLmZyb20oc3BlYy5ub2RlcyksXG4gICAgICAgICAgICBpbnN0YW5jZVNwZWMubWFya3MgPSBPcmRlcmVkTWFwLmZyb20oc3BlYy5tYXJrcyB8fCB7fSksXG4gICAgICAgICAgICB0aGlzLm5vZGVzID0gTm9kZVR5cGUuY29tcGlsZSh0aGlzLnNwZWMubm9kZXMsIHRoaXMpO1xuICAgICAgICB0aGlzLm1hcmtzID0gTWFya1R5cGUuY29tcGlsZSh0aGlzLnNwZWMubWFya3MsIHRoaXMpO1xuICAgICAgICBsZXQgY29udGVudEV4cHJDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGZvciAobGV0IHByb3AgaW4gdGhpcy5ub2Rlcykge1xuICAgICAgICAgICAgaWYgKHByb3AgaW4gdGhpcy5tYXJrcylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihwcm9wICsgXCIgY2FuIG5vdCBiZSBib3RoIGEgbm9kZSBhbmQgYSBtYXJrXCIpO1xuICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLm5vZGVzW3Byb3BdLCBjb250ZW50RXhwciA9IHR5cGUuc3BlYy5jb250ZW50IHx8IFwiXCIsIG1hcmtFeHByID0gdHlwZS5zcGVjLm1hcmtzO1xuICAgICAgICAgICAgdHlwZS5jb250ZW50TWF0Y2ggPSBjb250ZW50RXhwckNhY2hlW2NvbnRlbnRFeHByXSB8fFxuICAgICAgICAgICAgICAgIChjb250ZW50RXhwckNhY2hlW2NvbnRlbnRFeHByXSA9IENvbnRlbnRNYXRjaC5wYXJzZShjb250ZW50RXhwciwgdGhpcy5ub2RlcykpO1xuICAgICAgICAgICAgdHlwZS5pbmxpbmVDb250ZW50ID0gdHlwZS5jb250ZW50TWF0Y2guaW5saW5lQ29udGVudDtcbiAgICAgICAgICAgIHR5cGUubWFya1NldCA9IG1hcmtFeHByID09IFwiX1wiID8gbnVsbCA6XG4gICAgICAgICAgICAgICAgbWFya0V4cHIgPyBnYXRoZXJNYXJrcyh0aGlzLCBtYXJrRXhwci5zcGxpdChcIiBcIikpIDpcbiAgICAgICAgICAgICAgICAgICAgbWFya0V4cHIgPT0gXCJcIiB8fCAhdHlwZS5pbmxpbmVDb250ZW50ID8gW10gOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IHByb3AgaW4gdGhpcy5tYXJrcykge1xuICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLm1hcmtzW3Byb3BdLCBleGNsID0gdHlwZS5zcGVjLmV4Y2x1ZGVzO1xuICAgICAgICAgICAgdHlwZS5leGNsdWRlZCA9IGV4Y2wgPT0gbnVsbCA/IFt0eXBlXSA6IGV4Y2wgPT0gXCJcIiA/IFtdIDogZ2F0aGVyTWFya3ModGhpcywgZXhjbC5zcGxpdChcIiBcIikpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm9kZUZyb21KU09OID0gdGhpcy5ub2RlRnJvbUpTT04uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5tYXJrRnJvbUpTT04gPSB0aGlzLm1hcmtGcm9tSlNPTi5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnRvcE5vZGVUeXBlID0gdGhpcy5ub2Rlc1t0aGlzLnNwZWMudG9wTm9kZSB8fCBcImRvY1wiXTtcbiAgICAgICAgdGhpcy5jYWNoZWQud3JhcHBpbmdzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQ3JlYXRlIGEgbm9kZSBpbiB0aGlzIHNjaGVtYS4gVGhlIGB0eXBlYCBtYXkgYmUgYSBzdHJpbmcgb3IgYVxuICAgIGBOb2RlVHlwZWAgaW5zdGFuY2UuIEF0dHJpYnV0ZXMgd2lsbCBiZSBleHRlbmRlZCB3aXRoIGRlZmF1bHRzLFxuICAgIGBjb250ZW50YCBtYXkgYmUgYSBgRnJhZ21lbnRgLCBgbnVsbGAsIGEgYE5vZGVgLCBvciBhbiBhcnJheSBvZlxuICAgIG5vZGVzLlxuICAgICovXG4gICAgbm9kZSh0eXBlLCBhdHRycyA9IG51bGwsIGNvbnRlbnQsIG1hcmtzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgdHlwZSA9IHRoaXMubm9kZVR5cGUodHlwZSk7XG4gICAgICAgIGVsc2UgaWYgKCEodHlwZSBpbnN0YW5jZW9mIE5vZGVUeXBlKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBub2RlIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUuc2NoZW1hICE9IHRoaXMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk5vZGUgdHlwZSBmcm9tIGRpZmZlcmVudCBzY2hlbWEgdXNlZCAoXCIgKyB0eXBlLm5hbWUgKyBcIilcIik7XG4gICAgICAgIHJldHVybiB0eXBlLmNyZWF0ZUNoZWNrZWQoYXR0cnMsIGNvbnRlbnQsIG1hcmtzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQ3JlYXRlIGEgdGV4dCBub2RlIGluIHRoZSBzY2hlbWEuIEVtcHR5IHRleHQgbm9kZXMgYXJlIG5vdFxuICAgIGFsbG93ZWQuXG4gICAgKi9cbiAgICB0ZXh0KHRleHQsIG1hcmtzKSB7XG4gICAgICAgIGxldCB0eXBlID0gdGhpcy5ub2Rlcy50ZXh0O1xuICAgICAgICByZXR1cm4gbmV3IFRleHROb2RlKHR5cGUsIHR5cGUuZGVmYXVsdEF0dHJzLCB0ZXh0LCBNYXJrLnNldEZyb20obWFya3MpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQ3JlYXRlIGEgbWFyayB3aXRoIHRoZSBnaXZlbiB0eXBlIGFuZCBhdHRyaWJ1dGVzLlxuICAgICovXG4gICAgbWFyayh0eXBlLCBhdHRycykge1xuICAgICAgICBpZiAodHlwZW9mIHR5cGUgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHR5cGUgPSB0aGlzLm1hcmtzW3R5cGVdO1xuICAgICAgICByZXR1cm4gdHlwZS5jcmVhdGUoYXR0cnMpO1xuICAgIH1cbiAgICAvKipcbiAgICBEZXNlcmlhbGl6ZSBhIG5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvbi4gVGhpcyBtZXRob2QgaXNcbiAgICBib3VuZC5cbiAgICAqL1xuICAgIG5vZGVGcm9tSlNPTihqc29uKSB7XG4gICAgICAgIHJldHVybiBOb2RlLmZyb21KU09OKHRoaXMsIGpzb24pO1xuICAgIH1cbiAgICAvKipcbiAgICBEZXNlcmlhbGl6ZSBhIG1hcmsgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvbi4gVGhpcyBtZXRob2QgaXNcbiAgICBib3VuZC5cbiAgICAqL1xuICAgIG1hcmtGcm9tSlNPTihqc29uKSB7XG4gICAgICAgIHJldHVybiBNYXJrLmZyb21KU09OKHRoaXMsIGpzb24pO1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIG5vZGVUeXBlKG5hbWUpIHtcbiAgICAgICAgbGV0IGZvdW5kID0gdGhpcy5ub2Rlc1tuYW1lXTtcbiAgICAgICAgaWYgKCFmb3VuZClcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVW5rbm93biBub2RlIHR5cGU6IFwiICsgbmFtZSk7XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9XG59XG5mdW5jdGlvbiBnYXRoZXJNYXJrcyhzY2hlbWEsIG1hcmtzKSB7XG4gICAgbGV0IGZvdW5kID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXJrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgbmFtZSA9IG1hcmtzW2ldLCBtYXJrID0gc2NoZW1hLm1hcmtzW25hbWVdLCBvayA9IG1hcms7XG4gICAgICAgIGlmIChtYXJrKSB7XG4gICAgICAgICAgICBmb3VuZC5wdXNoKG1hcmspO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgcHJvcCBpbiBzY2hlbWEubWFya3MpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWFyayA9IHNjaGVtYS5tYXJrc1twcm9wXTtcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSBcIl9cIiB8fCAobWFyay5zcGVjLmdyb3VwICYmIG1hcmsuc3BlYy5ncm91cC5zcGxpdChcIiBcIikuaW5kZXhPZihuYW1lKSA+IC0xKSlcbiAgICAgICAgICAgICAgICAgICAgZm91bmQucHVzaChvayA9IG1hcmspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghb2spXG4gICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJVbmtub3duIG1hcmsgdHlwZTogJ1wiICsgbWFya3NbaV0gKyBcIidcIik7XG4gICAgfVxuICAgIHJldHVybiBmb3VuZDtcbn1cblxuLyoqXG5BIERPTSBwYXJzZXIgcmVwcmVzZW50cyBhIHN0cmF0ZWd5IGZvciBwYXJzaW5nIERPTSBjb250ZW50IGludG8gYVxuUHJvc2VNaXJyb3IgZG9jdW1lbnQgY29uZm9ybWluZyB0byBhIGdpdmVuIHNjaGVtYS4gSXRzIGJlaGF2aW9yIGlzXG5kZWZpbmVkIGJ5IGFuIGFycmF5IG9mIFtydWxlc10oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI21vZGVsLlBhcnNlUnVsZSkuXG4qL1xuY2xhc3MgRE9NUGFyc2VyIHtcbiAgICAvKipcbiAgICBDcmVhdGUgYSBwYXJzZXIgdGhhdCB0YXJnZXRzIHRoZSBnaXZlbiBzY2hlbWEsIHVzaW5nIHRoZSBnaXZlblxuICAgIHBhcnNpbmcgcnVsZXMuXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICBUaGUgc2NoZW1hIGludG8gd2hpY2ggdGhlIHBhcnNlciBwYXJzZXMuXG4gICAgKi9cbiAgICBzY2hlbWEsIFxuICAgIC8qKlxuICAgIFRoZSBzZXQgb2YgW3BhcnNlIHJ1bGVzXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jbW9kZWwuUGFyc2VSdWxlKSB0aGF0IHRoZSBwYXJzZXJcbiAgICB1c2VzLCBpbiBvcmRlciBvZiBwcmVjZWRlbmNlLlxuICAgICovXG4gICAgcnVsZXMpIHtcbiAgICAgICAgdGhpcy5zY2hlbWEgPSBzY2hlbWE7XG4gICAgICAgIHRoaXMucnVsZXMgPSBydWxlcztcbiAgICAgICAgLyoqXG4gICAgICAgIEBpbnRlcm5hbFxuICAgICAgICAqL1xuICAgICAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICAgICAgLyoqXG4gICAgICAgIEBpbnRlcm5hbFxuICAgICAgICAqL1xuICAgICAgICB0aGlzLnN0eWxlcyA9IFtdO1xuICAgICAgICBydWxlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgICAgICAgICAgaWYgKHJ1bGUudGFnKVxuICAgICAgICAgICAgICAgIHRoaXMudGFncy5wdXNoKHJ1bGUpO1xuICAgICAgICAgICAgZWxzZSBpZiAocnVsZS5zdHlsZSlcbiAgICAgICAgICAgICAgICB0aGlzLnN0eWxlcy5wdXNoKHJ1bGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gT25seSBub3JtYWxpemUgbGlzdCBlbGVtZW50cyB3aGVuIGxpc3RzIGluIHRoZSBzY2hlbWEgY2FuJ3QgZGlyZWN0bHkgY29udGFpbiB0aGVtc2VsdmVzXG4gICAgICAgIHRoaXMubm9ybWFsaXplTGlzdHMgPSAhdGhpcy50YWdzLnNvbWUociA9PiB7XG4gICAgICAgICAgICBpZiAoIS9eKHVsfG9sKVxcYi8udGVzdChyLnRhZykgfHwgIXIubm9kZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBsZXQgbm9kZSA9IHNjaGVtYS5ub2Rlc1tyLm5vZGVdO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuY29udGVudE1hdGNoLm1hdGNoVHlwZShub2RlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgIFBhcnNlIGEgZG9jdW1lbnQgZnJvbSB0aGUgY29udGVudCBvZiBhIERPTSBub2RlLlxuICAgICovXG4gICAgcGFyc2UoZG9tLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgbGV0IGNvbnRleHQgPSBuZXcgUGFyc2VDb250ZXh0KHRoaXMsIG9wdGlvbnMsIGZhbHNlKTtcbiAgICAgICAgY29udGV4dC5hZGRBbGwoZG9tLCBvcHRpb25zLmZyb20sIG9wdGlvbnMudG8pO1xuICAgICAgICByZXR1cm4gY29udGV4dC5maW5pc2goKTtcbiAgICB9XG4gICAgLyoqXG4gICAgUGFyc2VzIHRoZSBjb250ZW50IG9mIHRoZSBnaXZlbiBET00gbm9kZSwgbGlrZVxuICAgIFtgcGFyc2VgXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jbW9kZWwuRE9NUGFyc2VyLnBhcnNlKSwgYW5kIHRha2VzIHRoZSBzYW1lIHNldCBvZlxuICAgIG9wdGlvbnMuIEJ1dCB1bmxpa2UgdGhhdCBtZXRob2QsIHdoaWNoIHByb2R1Y2VzIGEgd2hvbGUgbm9kZSxcbiAgICB0aGlzIG9uZSByZXR1cm5zIGEgc2xpY2UgdGhhdCBpcyBvcGVuIGF0IHRoZSBzaWRlcywgbWVhbmluZyB0aGF0XG4gICAgdGhlIHNjaGVtYSBjb25zdHJhaW50cyBhcmVuJ3QgYXBwbGllZCB0byB0aGUgc3RhcnQgb2Ygbm9kZXMgdG9cbiAgICB0aGUgbGVmdCBvZiB0aGUgaW5wdXQgYW5kIHRoZSBlbmQgb2Ygbm9kZXMgYXQgdGhlIGVuZC5cbiAgICAqL1xuICAgIHBhcnNlU2xpY2UoZG9tLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgbGV0IGNvbnRleHQgPSBuZXcgUGFyc2VDb250ZXh0KHRoaXMsIG9wdGlvbnMsIHRydWUpO1xuICAgICAgICBjb250ZXh0LmFkZEFsbChkb20sIG9wdGlvbnMuZnJvbSwgb3B0aW9ucy50byk7XG4gICAgICAgIHJldHVybiBTbGljZS5tYXhPcGVuKGNvbnRleHQuZmluaXNoKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIG1hdGNoVGFnKGRvbSwgY29udGV4dCwgYWZ0ZXIpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGFmdGVyID8gdGhpcy50YWdzLmluZGV4T2YoYWZ0ZXIpICsgMSA6IDA7IGkgPCB0aGlzLnRhZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBydWxlID0gdGhpcy50YWdzW2ldO1xuICAgICAgICAgICAgaWYgKG1hdGNoZXMoZG9tLCBydWxlLnRhZykgJiZcbiAgICAgICAgICAgICAgICAocnVsZS5uYW1lc3BhY2UgPT09IHVuZGVmaW5lZCB8fCBkb20ubmFtZXNwYWNlVVJJID09IHJ1bGUubmFtZXNwYWNlKSAmJlxuICAgICAgICAgICAgICAgICghcnVsZS5jb250ZXh0IHx8IGNvbnRleHQubWF0Y2hlc0NvbnRleHQocnVsZS5jb250ZXh0KSkpIHtcbiAgICAgICAgICAgICAgICBpZiAocnVsZS5nZXRBdHRycykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gcnVsZS5nZXRBdHRycyhkb20pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBydWxlLmF0dHJzID0gcmVzdWx0IHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBtYXRjaFN0eWxlKHByb3AsIHZhbHVlLCBjb250ZXh0LCBhZnRlcikge1xuICAgICAgICBmb3IgKGxldCBpID0gYWZ0ZXIgPyB0aGlzLnN0eWxlcy5pbmRleE9mKGFmdGVyKSArIDEgOiAwOyBpIDwgdGhpcy5zdHlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBydWxlID0gdGhpcy5zdHlsZXNbaV0sIHN0eWxlID0gcnVsZS5zdHlsZTtcbiAgICAgICAgICAgIGlmIChzdHlsZS5pbmRleE9mKHByb3ApICE9IDAgfHxcbiAgICAgICAgICAgICAgICBydWxlLmNvbnRleHQgJiYgIWNvbnRleHQubWF0Y2hlc0NvbnRleHQocnVsZS5jb250ZXh0KSB8fFxuICAgICAgICAgICAgICAgIC8vIFRlc3QgdGhhdCB0aGUgc3R5bGUgc3RyaW5nIGVpdGhlciBwcmVjaXNlbHkgbWF0Y2hlcyB0aGUgcHJvcCxcbiAgICAgICAgICAgICAgICAvLyBvciBoYXMgYW4gJz0nIHNpZ24gYWZ0ZXIgdGhlIHByb3AsIGZvbGxvd2VkIGJ5IHRoZSBnaXZlblxuICAgICAgICAgICAgICAgIC8vIHZhbHVlLlxuICAgICAgICAgICAgICAgIHN0eWxlLmxlbmd0aCA+IHByb3AubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgIChzdHlsZS5jaGFyQ29kZUF0KHByb3AubGVuZ3RoKSAhPSA2MSB8fCBzdHlsZS5zbGljZShwcm9wLmxlbmd0aCArIDEpICE9IHZhbHVlKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChydWxlLmdldEF0dHJzKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHJ1bGUuZ2V0QXR0cnModmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBydWxlLmF0dHJzID0gcmVzdWx0IHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBydWxlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgc3RhdGljIHNjaGVtYVJ1bGVzKHNjaGVtYSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgICAgICAgICBsZXQgcHJpb3JpdHkgPSBydWxlLnByaW9yaXR5ID09IG51bGwgPyA1MCA6IHJ1bGUucHJpb3JpdHksIGkgPSAwO1xuICAgICAgICAgICAgZm9yICg7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IHJlc3VsdFtpXSwgbmV4dFByaW9yaXR5ID0gbmV4dC5wcmlvcml0eSA9PSBudWxsID8gNTAgOiBuZXh0LnByaW9yaXR5O1xuICAgICAgICAgICAgICAgIGlmIChuZXh0UHJpb3JpdHkgPCBwcmlvcml0eSlcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQuc3BsaWNlKGksIDAsIHJ1bGUpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IG5hbWUgaW4gc2NoZW1hLm1hcmtzKSB7XG4gICAgICAgICAgICBsZXQgcnVsZXMgPSBzY2hlbWEubWFya3NbbmFtZV0uc3BlYy5wYXJzZURPTTtcbiAgICAgICAgICAgIGlmIChydWxlcylcbiAgICAgICAgICAgICAgICBydWxlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpbnNlcnQocnVsZSA9IGNvcHkocnVsZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShydWxlLm1hcmsgfHwgcnVsZS5pZ25vcmUgfHwgcnVsZS5jbGVhck1hcmspKVxuICAgICAgICAgICAgICAgICAgICAgICAgcnVsZS5tYXJrID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBuYW1lIGluIHNjaGVtYS5ub2Rlcykge1xuICAgICAgICAgICAgbGV0IHJ1bGVzID0gc2NoZW1hLm5vZGVzW25hbWVdLnNwZWMucGFyc2VET007XG4gICAgICAgICAgICBpZiAocnVsZXMpXG4gICAgICAgICAgICAgICAgcnVsZXMuZm9yRWFjaChydWxlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0KHJ1bGUgPSBjb3B5KHJ1bGUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEocnVsZS5ub2RlIHx8IHJ1bGUuaWdub3JlIHx8IHJ1bGUubWFyaykpXG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlLm5vZGUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgIENvbnN0cnVjdCBhIERPTSBwYXJzZXIgdXNpbmcgdGhlIHBhcnNpbmcgcnVsZXMgbGlzdGVkIGluIGFcbiAgICBzY2hlbWEncyBbbm9kZSBzcGVjc10oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI21vZGVsLk5vZGVTcGVjLnBhcnNlRE9NKSwgcmVvcmRlcmVkIGJ5XG4gICAgW3ByaW9yaXR5XShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jbW9kZWwuUGFyc2VSdWxlLnByaW9yaXR5KS5cbiAgICAqL1xuICAgIHN0YXRpYyBmcm9tU2NoZW1hKHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gc2NoZW1hLmNhY2hlZC5kb21QYXJzZXIgfHxcbiAgICAgICAgICAgIChzY2hlbWEuY2FjaGVkLmRvbVBhcnNlciA9IG5ldyBET01QYXJzZXIoc2NoZW1hLCBET01QYXJzZXIuc2NoZW1hUnVsZXMoc2NoZW1hKSkpO1xuICAgIH1cbn1cbmNvbnN0IGJsb2NrVGFncyA9IHtcbiAgICBhZGRyZXNzOiB0cnVlLCBhcnRpY2xlOiB0cnVlLCBhc2lkZTogdHJ1ZSwgYmxvY2txdW90ZTogdHJ1ZSwgY2FudmFzOiB0cnVlLFxuICAgIGRkOiB0cnVlLCBkaXY6IHRydWUsIGRsOiB0cnVlLCBmaWVsZHNldDogdHJ1ZSwgZmlnY2FwdGlvbjogdHJ1ZSwgZmlndXJlOiB0cnVlLFxuICAgIGZvb3RlcjogdHJ1ZSwgZm9ybTogdHJ1ZSwgaDE6IHRydWUsIGgyOiB0cnVlLCBoMzogdHJ1ZSwgaDQ6IHRydWUsIGg1OiB0cnVlLFxuICAgIGg2OiB0cnVlLCBoZWFkZXI6IHRydWUsIGhncm91cDogdHJ1ZSwgaHI6IHRydWUsIGxpOiB0cnVlLCBub3NjcmlwdDogdHJ1ZSwgb2w6IHRydWUsXG4gICAgb3V0cHV0OiB0cnVlLCBwOiB0cnVlLCBwcmU6IHRydWUsIHNlY3Rpb246IHRydWUsIHRhYmxlOiB0cnVlLCB0Zm9vdDogdHJ1ZSwgdWw6IHRydWVcbn07XG5jb25zdCBpZ25vcmVUYWdzID0ge1xuICAgIGhlYWQ6IHRydWUsIG5vc2NyaXB0OiB0cnVlLCBvYmplY3Q6IHRydWUsIHNjcmlwdDogdHJ1ZSwgc3R5bGU6IHRydWUsIHRpdGxlOiB0cnVlXG59O1xuY29uc3QgbGlzdFRhZ3MgPSB7IG9sOiB0cnVlLCB1bDogdHJ1ZSB9O1xuLy8gVXNpbmcgYSBiaXRmaWVsZCBmb3Igbm9kZSBjb250ZXh0IG9wdGlvbnNcbmNvbnN0IE9QVF9QUkVTRVJWRV9XUyA9IDEsIE9QVF9QUkVTRVJWRV9XU19GVUxMID0gMiwgT1BUX09QRU5fTEVGVCA9IDQ7XG5mdW5jdGlvbiB3c09wdGlvbnNGb3IodHlwZSwgcHJlc2VydmVXaGl0ZXNwYWNlLCBiYXNlKSB7XG4gICAgaWYgKHByZXNlcnZlV2hpdGVzcGFjZSAhPSBudWxsKVxuICAgICAgICByZXR1cm4gKHByZXNlcnZlV2hpdGVzcGFjZSA/IE9QVF9QUkVTRVJWRV9XUyA6IDApIHxcbiAgICAgICAgICAgIChwcmVzZXJ2ZVdoaXRlc3BhY2UgPT09IFwiZnVsbFwiID8gT1BUX1BSRVNFUlZFX1dTX0ZVTEwgOiAwKTtcbiAgICByZXR1cm4gdHlwZSAmJiB0eXBlLndoaXRlc3BhY2UgPT0gXCJwcmVcIiA/IE9QVF9QUkVTRVJWRV9XUyB8IE9QVF9QUkVTRVJWRV9XU19GVUxMIDogYmFzZSAmIH5PUFRfT1BFTl9MRUZUO1xufVxuY2xhc3MgTm9kZUNvbnRleHQge1xuICAgIGNvbnN0cnVjdG9yKHR5cGUsIGF0dHJzLCBcbiAgICAvLyBNYXJrcyBhcHBsaWVkIHRvIHRoaXMgbm9kZSBpdHNlbGZcbiAgICBtYXJrcywgXG4gICAgLy8gTWFya3MgdGhhdCBjYW4ndCBhcHBseSBoZXJlLCBidXQgd2lsbCBiZSB1c2VkIGluIGNoaWxkcmVuIGlmIHBvc3NpYmxlXG4gICAgcGVuZGluZ01hcmtzLCBzb2xpZCwgbWF0Y2gsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5hdHRycyA9IGF0dHJzO1xuICAgICAgICB0aGlzLm1hcmtzID0gbWFya3M7XG4gICAgICAgIHRoaXMucGVuZGluZ01hcmtzID0gcGVuZGluZ01hcmtzO1xuICAgICAgICB0aGlzLnNvbGlkID0gc29saWQ7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMuY29udGVudCA9IFtdO1xuICAgICAgICAvLyBNYXJrcyBhcHBsaWVkIHRvIHRoZSBub2RlJ3MgY2hpbGRyZW5cbiAgICAgICAgdGhpcy5hY3RpdmVNYXJrcyA9IE1hcmsubm9uZTtcbiAgICAgICAgLy8gTmVzdGVkIE1hcmtzIHdpdGggc2FtZSB0eXBlXG4gICAgICAgIHRoaXMuc3Rhc2hNYXJrcyA9IFtdO1xuICAgICAgICB0aGlzLm1hdGNoID0gbWF0Y2ggfHwgKG9wdGlvbnMgJiBPUFRfT1BFTl9MRUZUID8gbnVsbCA6IHR5cGUuY29udGVudE1hdGNoKTtcbiAgICB9XG4gICAgZmluZFdyYXBwaW5nKG5vZGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLm1hdGNoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudHlwZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICBsZXQgZmlsbCA9IHRoaXMudHlwZS5jb250ZW50TWF0Y2guZmlsbEJlZm9yZShGcmFnbWVudC5mcm9tKG5vZGUpKTtcbiAgICAgICAgICAgIGlmIChmaWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMudHlwZS5jb250ZW50TWF0Y2gubWF0Y2hGcmFnbWVudChmaWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBzdGFydCA9IHRoaXMudHlwZS5jb250ZW50TWF0Y2gsIHdyYXA7XG4gICAgICAgICAgICAgICAgaWYgKHdyYXAgPSBzdGFydC5maW5kV3JhcHBpbmcobm9kZS50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoID0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm1hdGNoLmZpbmRXcmFwcGluZyhub2RlLnR5cGUpO1xuICAgIH1cbiAgICBmaW5pc2gob3BlbkVuZCkge1xuICAgICAgICBpZiAoISh0aGlzLm9wdGlvbnMgJiBPUFRfUFJFU0VSVkVfV1MpKSB7IC8vIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2VcbiAgICAgICAgICAgIGxldCBsYXN0ID0gdGhpcy5jb250ZW50W3RoaXMuY29udGVudC5sZW5ndGggLSAxXSwgbTtcbiAgICAgICAgICAgIGlmIChsYXN0ICYmIGxhc3QuaXNUZXh0ICYmIChtID0gL1sgXFx0XFxyXFxuXFx1MDAwY10rJC8uZXhlYyhsYXN0LnRleHQpKSkge1xuICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0gbGFzdDtcbiAgICAgICAgICAgICAgICBpZiAobGFzdC50ZXh0Lmxlbmd0aCA9PSBtWzBdLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50LnBvcCgpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50W3RoaXMuY29udGVudC5sZW5ndGggLSAxXSA9IHRleHQud2l0aFRleHQodGV4dC50ZXh0LnNsaWNlKDAsIHRleHQudGV4dC5sZW5ndGggLSBtWzBdLmxlbmd0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBjb250ZW50ID0gRnJhZ21lbnQuZnJvbSh0aGlzLmNvbnRlbnQpO1xuICAgICAgICBpZiAoIW9wZW5FbmQgJiYgdGhpcy5tYXRjaClcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LmFwcGVuZCh0aGlzLm1hdGNoLmZpbGxCZWZvcmUoRnJhZ21lbnQuZW1wdHksIHRydWUpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA/IHRoaXMudHlwZS5jcmVhdGUodGhpcy5hdHRycywgY29udGVudCwgdGhpcy5tYXJrcykgOiBjb250ZW50O1xuICAgIH1cbiAgICBwb3BGcm9tU3Rhc2hNYXJrKG1hcmspIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc3Rhc2hNYXJrcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcbiAgICAgICAgICAgIGlmIChtYXJrLmVxKHRoaXMuc3Rhc2hNYXJrc1tpXSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3Rhc2hNYXJrcy5zcGxpY2UoaSwgMSlbMF07XG4gICAgfVxuICAgIGFwcGx5UGVuZGluZyhuZXh0VHlwZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgcGVuZGluZyA9IHRoaXMucGVuZGluZ01hcmtzOyBpIDwgcGVuZGluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IG1hcmsgPSBwZW5kaW5nW2ldO1xuICAgICAgICAgICAgaWYgKCh0aGlzLnR5cGUgPyB0aGlzLnR5cGUuYWxsb3dzTWFya1R5cGUobWFyay50eXBlKSA6IG1hcmtNYXlBcHBseShtYXJrLnR5cGUsIG5leHRUeXBlKSkgJiZcbiAgICAgICAgICAgICAgICAhbWFyay5pc0luU2V0KHRoaXMuYWN0aXZlTWFya3MpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVNYXJrcyA9IG1hcmsuYWRkVG9TZXQodGhpcy5hY3RpdmVNYXJrcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nTWFya3MgPSBtYXJrLnJlbW92ZUZyb21TZXQodGhpcy5wZW5kaW5nTWFya3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlubGluZUNvbnRleHQobm9kZSkge1xuICAgICAgICBpZiAodGhpcy50eXBlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHlwZS5pbmxpbmVDb250ZW50O1xuICAgICAgICBpZiAodGhpcy5jb250ZW50Lmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRbMF0uaXNJbmxpbmU7XG4gICAgICAgIHJldHVybiBub2RlLnBhcmVudE5vZGUgJiYgIWJsb2NrVGFncy5oYXNPd25Qcm9wZXJ0eShub2RlLnBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxufVxuY2xhc3MgUGFyc2VDb250ZXh0IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvLyBUaGUgcGFyc2VyIHdlIGFyZSB1c2luZy5cbiAgICBwYXJzZXIsIFxuICAgIC8vIFRoZSBvcHRpb25zIHBhc3NlZCB0byB0aGlzIHBhcnNlLlxuICAgIG9wdGlvbnMsIGlzT3Blbikge1xuICAgICAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5pc09wZW4gPSBpc09wZW47XG4gICAgICAgIHRoaXMub3BlbiA9IDA7XG4gICAgICAgIGxldCB0b3BOb2RlID0gb3B0aW9ucy50b3BOb2RlLCB0b3BDb250ZXh0O1xuICAgICAgICBsZXQgdG9wT3B0aW9ucyA9IHdzT3B0aW9uc0ZvcihudWxsLCBvcHRpb25zLnByZXNlcnZlV2hpdGVzcGFjZSwgMCkgfCAoaXNPcGVuID8gT1BUX09QRU5fTEVGVCA6IDApO1xuICAgICAgICBpZiAodG9wTm9kZSlcbiAgICAgICAgICAgIHRvcENvbnRleHQgPSBuZXcgTm9kZUNvbnRleHQodG9wTm9kZS50eXBlLCB0b3BOb2RlLmF0dHJzLCBNYXJrLm5vbmUsIE1hcmsubm9uZSwgdHJ1ZSwgb3B0aW9ucy50b3BNYXRjaCB8fCB0b3BOb2RlLnR5cGUuY29udGVudE1hdGNoLCB0b3BPcHRpb25zKTtcbiAgICAgICAgZWxzZSBpZiAoaXNPcGVuKVxuICAgICAgICAgICAgdG9wQ29udGV4dCA9IG5ldyBOb2RlQ29udGV4dChudWxsLCBudWxsLCBNYXJrLm5vbmUsIE1hcmsubm9uZSwgdHJ1ZSwgbnVsbCwgdG9wT3B0aW9ucyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRvcENvbnRleHQgPSBuZXcgTm9kZUNvbnRleHQocGFyc2VyLnNjaGVtYS50b3BOb2RlVHlwZSwgbnVsbCwgTWFyay5ub25lLCBNYXJrLm5vbmUsIHRydWUsIG51bGwsIHRvcE9wdGlvbnMpO1xuICAgICAgICB0aGlzLm5vZGVzID0gW3RvcENvbnRleHRdO1xuICAgICAgICB0aGlzLmZpbmQgPSBvcHRpb25zLmZpbmRQb3NpdGlvbnM7XG4gICAgICAgIHRoaXMubmVlZHNCbG9jayA9IGZhbHNlO1xuICAgIH1cbiAgICBnZXQgdG9wKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2Rlc1t0aGlzLm9wZW5dO1xuICAgIH1cbiAgICAvLyBBZGQgYSBET00gbm9kZSB0byB0aGUgY29udGVudC4gVGV4dCBpcyBpbnNlcnRlZCBhcyB0ZXh0IG5vZGUsXG4gICAgLy8gb3RoZXJ3aXNlLCB0aGUgbm9kZSBpcyBwYXNzZWQgdG8gYGFkZEVsZW1lbnRgIG9yLCBpZiBpdCBoYXMgYVxuICAgIC8vIGBzdHlsZWAgYXR0cmlidXRlLCBgYWRkRWxlbWVudFdpdGhTdHlsZXNgLlxuICAgIGFkZERPTShkb20pIHtcbiAgICAgICAgaWYgKGRvbS5ub2RlVHlwZSA9PSAzKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFRleHROb2RlKGRvbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZG9tLm5vZGVUeXBlID09IDEpIHtcbiAgICAgICAgICAgIGxldCBzdHlsZSA9IGRvbS5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcbiAgICAgICAgICAgIGlmICghc3R5bGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEVsZW1lbnQoZG9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBtYXJrcyA9IHRoaXMucmVhZFN0eWxlcyhwYXJzZVN0eWxlcyhzdHlsZSkpO1xuICAgICAgICAgICAgICAgIGlmICghbWFya3MpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gQSBzdHlsZSB3aXRoIGlnbm9yZTogdHJ1ZVxuICAgICAgICAgICAgICAgIGxldCBbYWRkTWFya3MsIHJlbW92ZU1hcmtzXSA9IG1hcmtzLCB0b3AgPSB0aGlzLnRvcDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbW92ZU1hcmtzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVBlbmRpbmdNYXJrKHJlbW92ZU1hcmtzW2ldLCB0b3ApO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWRkTWFya3MubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkUGVuZGluZ01hcmsoYWRkTWFya3NbaV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRWxlbWVudChkb20pO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWRkTWFya3MubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlUGVuZGluZ01hcmsoYWRkTWFya3NbaV0sIHRvcCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW1vdmVNYXJrcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRQZW5kaW5nTWFyayhyZW1vdmVNYXJrc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRkVGV4dE5vZGUoZG9tKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGRvbS5ub2RlVmFsdWU7XG4gICAgICAgIGxldCB0b3AgPSB0aGlzLnRvcDtcbiAgICAgICAgaWYgKHRvcC5vcHRpb25zICYgT1BUX1BSRVNFUlZFX1dTX0ZVTEwgfHxcbiAgICAgICAgICAgIHRvcC5pbmxpbmVDb250ZXh0KGRvbSkgfHxcbiAgICAgICAgICAgIC9bXiBcXHRcXHJcXG5cXHUwMDBjXS8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICghKHRvcC5vcHRpb25zICYgT1BUX1BSRVNFUlZFX1dTKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvWyBcXHRcXHJcXG5cXHUwMDBjXSsvZywgXCIgXCIpO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgc3RhcnRzIHdpdGggd2hpdGVzcGFjZSwgYW5kIHRoZXJlIGlzIG5vIG5vZGUgYmVmb3JlIGl0LCBvclxuICAgICAgICAgICAgICAgIC8vIGEgaGFyZCBicmVhaywgb3IgYSB0ZXh0IG5vZGUgdGhhdCBlbmRzIHdpdGggd2hpdGVzcGFjZSwgc3RyaXAgdGhlXG4gICAgICAgICAgICAgICAgLy8gbGVhZGluZyBzcGFjZS5cbiAgICAgICAgICAgICAgICBpZiAoL15bIFxcdFxcclxcblxcdTAwMGNdLy50ZXN0KHZhbHVlKSAmJiB0aGlzLm9wZW4gPT0gdGhpcy5ub2Rlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBub2RlQmVmb3JlID0gdG9wLmNvbnRlbnRbdG9wLmNvbnRlbnQubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGxldCBkb21Ob2RlQmVmb3JlID0gZG9tLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlQmVmb3JlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoZG9tTm9kZUJlZm9yZSAmJiBkb21Ob2RlQmVmb3JlLm5vZGVOYW1lID09ICdCUicpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAobm9kZUJlZm9yZS5pc1RleHQgJiYgL1sgXFx0XFxyXFxuXFx1MDAwY10kLy50ZXN0KG5vZGVCZWZvcmUudGV4dCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghKHRvcC5vcHRpb25zICYgT1BUX1BSRVNFUlZFX1dTX0ZVTEwpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXHI/XFxufFxcci9nLCBcIiBcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcclxcbj8vZywgXCJcXG5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnROb2RlKHRoaXMucGFyc2VyLnNjaGVtYS50ZXh0KHZhbHVlKSk7XG4gICAgICAgICAgICB0aGlzLmZpbmRJblRleHQoZG9tKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmluZEluc2lkZShkb20pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFRyeSB0byBmaW5kIGEgaGFuZGxlciBmb3IgdGhlIGdpdmVuIHRhZyBhbmQgdXNlIHRoYXQgdG8gcGFyc2UuIElmXG4gICAgLy8gbm9uZSBpcyBmb3VuZCwgdGhlIGVsZW1lbnQncyBjb250ZW50IG5vZGVzIGFyZSBhZGRlZCBkaXJlY3RseS5cbiAgICBhZGRFbGVtZW50KGRvbSwgbWF0Y2hBZnRlcikge1xuICAgICAgICBsZXQgbmFtZSA9IGRvbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBydWxlSUQ7XG4gICAgICAgIGlmIChsaXN0VGFncy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB0aGlzLnBhcnNlci5ub3JtYWxpemVMaXN0cylcbiAgICAgICAgICAgIG5vcm1hbGl6ZUxpc3QoZG9tKTtcbiAgICAgICAgbGV0IHJ1bGUgPSAodGhpcy5vcHRpb25zLnJ1bGVGcm9tTm9kZSAmJiB0aGlzLm9wdGlvbnMucnVsZUZyb21Ob2RlKGRvbSkpIHx8XG4gICAgICAgICAgICAocnVsZUlEID0gdGhpcy5wYXJzZXIubWF0Y2hUYWcoZG9tLCB0aGlzLCBtYXRjaEFmdGVyKSk7XG4gICAgICAgIGlmIChydWxlID8gcnVsZS5pZ25vcmUgOiBpZ25vcmVUYWdzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmZpbmRJbnNpZGUoZG9tKTtcbiAgICAgICAgICAgIHRoaXMuaWdub3JlRmFsbGJhY2soZG9tKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghcnVsZSB8fCBydWxlLnNraXAgfHwgcnVsZS5jbG9zZVBhcmVudCkge1xuICAgICAgICAgICAgaWYgKHJ1bGUgJiYgcnVsZS5jbG9zZVBhcmVudClcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW4gPSBNYXRoLm1heCgwLCB0aGlzLm9wZW4gLSAxKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHJ1bGUgJiYgcnVsZS5za2lwLm5vZGVUeXBlKVxuICAgICAgICAgICAgICAgIGRvbSA9IHJ1bGUuc2tpcDtcbiAgICAgICAgICAgIGxldCBzeW5jLCB0b3AgPSB0aGlzLnRvcCwgb2xkTmVlZHNCbG9jayA9IHRoaXMubmVlZHNCbG9jaztcbiAgICAgICAgICAgIGlmIChibG9ja1RhZ3MuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodG9wLmNvbnRlbnQubGVuZ3RoICYmIHRvcC5jb250ZW50WzBdLmlzSW5saW5lICYmIHRoaXMub3Blbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW4tLTtcbiAgICAgICAgICAgICAgICAgICAgdG9wID0gdGhpcy50b3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICghdG9wLnR5cGUpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmVlZHNCbG9jayA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghZG9tLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxlYWZGYWxsYmFjayhkb20pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWRkQWxsKGRvbSk7XG4gICAgICAgICAgICBpZiAoc3luYylcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmModG9wKTtcbiAgICAgICAgICAgIHRoaXMubmVlZHNCbG9jayA9IG9sZE5lZWRzQmxvY2s7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFkZEVsZW1lbnRCeVJ1bGUoZG9tLCBydWxlLCBydWxlLmNvbnN1bWluZyA9PT0gZmFsc2UgPyBydWxlSUQgOiB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENhbGxlZCBmb3IgbGVhZiBET00gbm9kZXMgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgaWdub3JlZFxuICAgIGxlYWZGYWxsYmFjayhkb20pIHtcbiAgICAgICAgaWYgKGRvbS5ub2RlTmFtZSA9PSBcIkJSXCIgJiYgdGhpcy50b3AudHlwZSAmJiB0aGlzLnRvcC50eXBlLmlubGluZUNvbnRlbnQpXG4gICAgICAgICAgICB0aGlzLmFkZFRleHROb2RlKGRvbS5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXFxuXCIpKTtcbiAgICB9XG4gICAgLy8gQ2FsbGVkIGZvciBpZ25vcmVkIG5vZGVzXG4gICAgaWdub3JlRmFsbGJhY2soZG9tKSB7XG4gICAgICAgIC8vIElnbm9yZWQgQlIgbm9kZXMgc2hvdWxkIGF0IGxlYXN0IGNyZWF0ZSBhbiBpbmxpbmUgY29udGV4dFxuICAgICAgICBpZiAoZG9tLm5vZGVOYW1lID09IFwiQlJcIiAmJiAoIXRoaXMudG9wLnR5cGUgfHwgIXRoaXMudG9wLnR5cGUuaW5saW5lQ29udGVudCkpXG4gICAgICAgICAgICB0aGlzLmZpbmRQbGFjZSh0aGlzLnBhcnNlci5zY2hlbWEudGV4dChcIi1cIikpO1xuICAgIH1cbiAgICAvLyBSdW4gYW55IHN0eWxlIHBhcnNlciBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUncyBzdHlsZXMuIEVpdGhlclxuICAgIC8vIHJldHVybiBhbiBhcnJheSBvZiBtYXJrcywgb3IgbnVsbCB0byBpbmRpY2F0ZSBzb21lIG9mIHRoZSBzdHlsZXNcbiAgICAvLyBoYWQgYSBydWxlIHdpdGggYGlnbm9yZWAgc2V0LlxuICAgIHJlYWRTdHlsZXMoc3R5bGVzKSB7XG4gICAgICAgIGxldCBhZGQgPSBNYXJrLm5vbmUsIHJlbW92ZSA9IE1hcmsubm9uZTtcbiAgICAgICAgc3R5bGU6IGZvciAobGV0IGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBhZnRlciA9IHVuZGVmaW5lZDs7KSB7XG4gICAgICAgICAgICAgICAgbGV0IHJ1bGUgPSB0aGlzLnBhcnNlci5tYXRjaFN0eWxlKHN0eWxlc1tpXSwgc3R5bGVzW2kgKyAxXSwgdGhpcywgYWZ0ZXIpO1xuICAgICAgICAgICAgICAgIGlmICghcnVsZSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWUgc3R5bGU7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUuaWdub3JlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAocnVsZS5jbGVhck1hcmspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3AucGVuZGluZ01hcmtzLmZvckVhY2gobSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5jbGVhck1hcmsobSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gbS5hZGRUb1NldChyZW1vdmUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZCA9IHRoaXMucGFyc2VyLnNjaGVtYS5tYXJrc1tydWxlLm1hcmtdLmNyZWF0ZShydWxlLmF0dHJzKS5hZGRUb1NldChhZGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocnVsZS5jb25zdW1pbmcgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICBhZnRlciA9IHJ1bGU7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2FkZCwgcmVtb3ZlXTtcbiAgICB9XG4gICAgLy8gTG9vayB1cCBhIGhhbmRsZXIgZm9yIHRoZSBnaXZlbiBub2RlLiBJZiBub25lIGFyZSBmb3VuZCwgcmV0dXJuXG4gICAgLy8gZmFsc2UuIE90aGVyd2lzZSwgYXBwbHkgaXQsIHVzZSBpdHMgcmV0dXJuIHZhbHVlIHRvIGRyaXZlIHRoZSB3YXlcbiAgICAvLyB0aGUgbm9kZSdzIGNvbnRlbnQgaXMgd3JhcHBlZCwgYW5kIHJldHVybiB0cnVlLlxuICAgIGFkZEVsZW1lbnRCeVJ1bGUoZG9tLCBydWxlLCBjb250aW51ZUFmdGVyKSB7XG4gICAgICAgIGxldCBzeW5jLCBub2RlVHlwZSwgbWFyaztcbiAgICAgICAgaWYgKHJ1bGUubm9kZSkge1xuICAgICAgICAgICAgbm9kZVR5cGUgPSB0aGlzLnBhcnNlci5zY2hlbWEubm9kZXNbcnVsZS5ub2RlXTtcbiAgICAgICAgICAgIGlmICghbm9kZVR5cGUuaXNMZWFmKSB7XG4gICAgICAgICAgICAgICAgc3luYyA9IHRoaXMuZW50ZXIobm9kZVR5cGUsIHJ1bGUuYXR0cnMgfHwgbnVsbCwgcnVsZS5wcmVzZXJ2ZVdoaXRlc3BhY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuaW5zZXJ0Tm9kZShub2RlVHlwZS5jcmVhdGUocnVsZS5hdHRycykpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWFmRmFsbGJhY2soZG9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBtYXJrVHlwZSA9IHRoaXMucGFyc2VyLnNjaGVtYS5tYXJrc1tydWxlLm1hcmtdO1xuICAgICAgICAgICAgbWFyayA9IG1hcmtUeXBlLmNyZWF0ZShydWxlLmF0dHJzKTtcbiAgICAgICAgICAgIHRoaXMuYWRkUGVuZGluZ01hcmsobWFyayk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0YXJ0SW4gPSB0aGlzLnRvcDtcbiAgICAgICAgaWYgKG5vZGVUeXBlICYmIG5vZGVUeXBlLmlzTGVhZikge1xuICAgICAgICAgICAgdGhpcy5maW5kSW5zaWRlKGRvbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29udGludWVBZnRlcikge1xuICAgICAgICAgICAgdGhpcy5hZGRFbGVtZW50KGRvbSwgY29udGludWVBZnRlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocnVsZS5nZXRDb250ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmZpbmRJbnNpZGUoZG9tKTtcbiAgICAgICAgICAgIHJ1bGUuZ2V0Q29udGVudChkb20sIHRoaXMucGFyc2VyLnNjaGVtYSkuZm9yRWFjaChub2RlID0+IHRoaXMuaW5zZXJ0Tm9kZShub2RlKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgY29udGVudERPTSA9IGRvbTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZS5jb250ZW50RWxlbWVudCA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIGNvbnRlbnRET00gPSBkb20ucXVlcnlTZWxlY3RvcihydWxlLmNvbnRlbnRFbGVtZW50KTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBydWxlLmNvbnRlbnRFbGVtZW50ID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICBjb250ZW50RE9NID0gcnVsZS5jb250ZW50RWxlbWVudChkb20pO1xuICAgICAgICAgICAgZWxzZSBpZiAocnVsZS5jb250ZW50RWxlbWVudClcbiAgICAgICAgICAgICAgICBjb250ZW50RE9NID0gcnVsZS5jb250ZW50RWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuZmluZEFyb3VuZChkb20sIGNvbnRlbnRET00sIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5hZGRBbGwoY29udGVudERPTSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN5bmMgJiYgdGhpcy5zeW5jKHN0YXJ0SW4pKVxuICAgICAgICAgICAgdGhpcy5vcGVuLS07XG4gICAgICAgIGlmIChtYXJrKVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVQZW5kaW5nTWFyayhtYXJrLCBzdGFydEluKTtcbiAgICB9XG4gICAgLy8gQWRkIGFsbCBjaGlsZCBub2RlcyBiZXR3ZWVuIGBzdGFydEluZGV4YCBhbmQgYGVuZEluZGV4YCAob3IgdGhlXG4gICAgLy8gd2hvbGUgbm9kZSwgaWYgbm90IGdpdmVuKS4gSWYgYHN5bmNgIGlzIHBhc3NlZCwgdXNlIGl0IHRvXG4gICAgLy8gc3luY2hyb25pemUgYWZ0ZXIgZXZlcnkgYmxvY2sgZWxlbWVudC5cbiAgICBhZGRBbGwocGFyZW50LCBzdGFydEluZGV4LCBlbmRJbmRleCkge1xuICAgICAgICBsZXQgaW5kZXggPSBzdGFydEluZGV4IHx8IDA7XG4gICAgICAgIGZvciAobGV0IGRvbSA9IHN0YXJ0SW5kZXggPyBwYXJlbnQuY2hpbGROb2Rlc1tzdGFydEluZGV4XSA6IHBhcmVudC5maXJzdENoaWxkLCBlbmQgPSBlbmRJbmRleCA9PSBudWxsID8gbnVsbCA6IHBhcmVudC5jaGlsZE5vZGVzW2VuZEluZGV4XTsgZG9tICE9IGVuZDsgZG9tID0gZG9tLm5leHRTaWJsaW5nLCArK2luZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmZpbmRBdFBvaW50KHBhcmVudCwgaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5hZGRET00oZG9tKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbmRBdFBvaW50KHBhcmVudCwgaW5kZXgpO1xuICAgIH1cbiAgICAvLyBUcnkgdG8gZmluZCBhIHdheSB0byBmaXQgdGhlIGdpdmVuIG5vZGUgdHlwZSBpbnRvIHRoZSBjdXJyZW50XG4gICAgLy8gY29udGV4dC4gTWF5IGFkZCBpbnRlcm1lZGlhdGUgd3JhcHBlcnMgYW5kL29yIGxlYXZlIG5vbi1zb2xpZFxuICAgIC8vIG5vZGVzIHRoYXQgd2UncmUgaW4uXG4gICAgZmluZFBsYWNlKG5vZGUpIHtcbiAgICAgICAgbGV0IHJvdXRlLCBzeW5jO1xuICAgICAgICBmb3IgKGxldCBkZXB0aCA9IHRoaXMub3BlbjsgZGVwdGggPj0gMDsgZGVwdGgtLSkge1xuICAgICAgICAgICAgbGV0IGN4ID0gdGhpcy5ub2Rlc1tkZXB0aF07XG4gICAgICAgICAgICBsZXQgZm91bmQgPSBjeC5maW5kV3JhcHBpbmcobm9kZSk7XG4gICAgICAgICAgICBpZiAoZm91bmQgJiYgKCFyb3V0ZSB8fCByb3V0ZS5sZW5ndGggPiBmb3VuZC5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgcm91dGUgPSBmb3VuZDtcbiAgICAgICAgICAgICAgICBzeW5jID0gY3g7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3VuZC5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN4LnNvbGlkKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcm91dGUpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuc3luYyhzeW5jKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3V0ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuZW50ZXJJbm5lcihyb3V0ZVtpXSwgbnVsbCwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gVHJ5IHRvIGluc2VydCB0aGUgZ2l2ZW4gbm9kZSwgYWRqdXN0aW5nIHRoZSBjb250ZXh0IHdoZW4gbmVlZGVkLlxuICAgIGluc2VydE5vZGUobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5pc0lubGluZSAmJiB0aGlzLm5lZWRzQmxvY2sgJiYgIXRoaXMudG9wLnR5cGUpIHtcbiAgICAgICAgICAgIGxldCBibG9jayA9IHRoaXMudGV4dGJsb2NrRnJvbUNvbnRleHQoKTtcbiAgICAgICAgICAgIGlmIChibG9jaylcbiAgICAgICAgICAgICAgICB0aGlzLmVudGVySW5uZXIoYmxvY2spO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbmRQbGFjZShub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUV4dHJhKCk7XG4gICAgICAgICAgICBsZXQgdG9wID0gdGhpcy50b3A7XG4gICAgICAgICAgICB0b3AuYXBwbHlQZW5kaW5nKG5vZGUudHlwZSk7XG4gICAgICAgICAgICBpZiAodG9wLm1hdGNoKVxuICAgICAgICAgICAgICAgIHRvcC5tYXRjaCA9IHRvcC5tYXRjaC5tYXRjaFR5cGUobm9kZS50eXBlKTtcbiAgICAgICAgICAgIGxldCBtYXJrcyA9IHRvcC5hY3RpdmVNYXJrcztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5tYXJrcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICBpZiAoIXRvcC50eXBlIHx8IHRvcC50eXBlLmFsbG93c01hcmtUeXBlKG5vZGUubWFya3NbaV0udHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIG1hcmtzID0gbm9kZS5tYXJrc1tpXS5hZGRUb1NldChtYXJrcyk7XG4gICAgICAgICAgICB0b3AuY29udGVudC5wdXNoKG5vZGUubWFyayhtYXJrcykpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBUcnkgdG8gc3RhcnQgYSBub2RlIG9mIHRoZSBnaXZlbiB0eXBlLCBhZGp1c3RpbmcgdGhlIGNvbnRleHQgd2hlblxuICAgIC8vIG5lY2Vzc2FyeS5cbiAgICBlbnRlcih0eXBlLCBhdHRycywgcHJlc2VydmVXUykge1xuICAgICAgICBsZXQgb2sgPSB0aGlzLmZpbmRQbGFjZSh0eXBlLmNyZWF0ZShhdHRycykpO1xuICAgICAgICBpZiAob2spXG4gICAgICAgICAgICB0aGlzLmVudGVySW5uZXIodHlwZSwgYXR0cnMsIHRydWUsIHByZXNlcnZlV1MpO1xuICAgICAgICByZXR1cm4gb2s7XG4gICAgfVxuICAgIC8vIE9wZW4gYSBub2RlIG9mIHRoZSBnaXZlbiB0eXBlXG4gICAgZW50ZXJJbm5lcih0eXBlLCBhdHRycyA9IG51bGwsIHNvbGlkID0gZmFsc2UsIHByZXNlcnZlV1MpIHtcbiAgICAgICAgdGhpcy5jbG9zZUV4dHJhKCk7XG4gICAgICAgIGxldCB0b3AgPSB0aGlzLnRvcDtcbiAgICAgICAgdG9wLmFwcGx5UGVuZGluZyh0eXBlKTtcbiAgICAgICAgdG9wLm1hdGNoID0gdG9wLm1hdGNoICYmIHRvcC5tYXRjaC5tYXRjaFR5cGUodHlwZSk7XG4gICAgICAgIGxldCBvcHRpb25zID0gd3NPcHRpb25zRm9yKHR5cGUsIHByZXNlcnZlV1MsIHRvcC5vcHRpb25zKTtcbiAgICAgICAgaWYgKCh0b3Aub3B0aW9ucyAmIE9QVF9PUEVOX0xFRlQpICYmIHRvcC5jb250ZW50Lmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgb3B0aW9ucyB8PSBPUFRfT1BFTl9MRUZUO1xuICAgICAgICB0aGlzLm5vZGVzLnB1c2gobmV3IE5vZGVDb250ZXh0KHR5cGUsIGF0dHJzLCB0b3AuYWN0aXZlTWFya3MsIHRvcC5wZW5kaW5nTWFya3MsIHNvbGlkLCBudWxsLCBvcHRpb25zKSk7XG4gICAgICAgIHRoaXMub3BlbisrO1xuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgYWxsIG5vZGVzIGFib3ZlIHRoaXMub3BlbiBhcmUgZmluaXNoZWQgYW5kIGFkZGVkIHRvXG4gICAgLy8gdGhlaXIgcGFyZW50c1xuICAgIGNsb3NlRXh0cmEob3BlbkVuZCA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBpID0gdGhpcy5ub2Rlcy5sZW5ndGggLSAxO1xuICAgICAgICBpZiAoaSA+IHRoaXMub3Blbikge1xuICAgICAgICAgICAgZm9yICg7IGkgPiB0aGlzLm9wZW47IGktLSlcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzW2kgLSAxXS5jb250ZW50LnB1c2godGhpcy5ub2Rlc1tpXS5maW5pc2gob3BlbkVuZCkpO1xuICAgICAgICAgICAgdGhpcy5ub2Rlcy5sZW5ndGggPSB0aGlzLm9wZW4gKyAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZpbmlzaCgpIHtcbiAgICAgICAgdGhpcy5vcGVuID0gMDtcbiAgICAgICAgdGhpcy5jbG9zZUV4dHJhKHRoaXMuaXNPcGVuKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZXNbMF0uZmluaXNoKHRoaXMuaXNPcGVuIHx8IHRoaXMub3B0aW9ucy50b3BPcGVuKTtcbiAgICB9XG4gICAgc3luYyh0bykge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5vcGVuOyBpID49IDA7IGktLSlcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGVzW2ldID09IHRvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuID0gaTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBnZXQgY3VycmVudFBvcygpIHtcbiAgICAgICAgdGhpcy5jbG9zZUV4dHJhKCk7XG4gICAgICAgIGxldCBwb3MgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5vcGVuOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSB0aGlzLm5vZGVzW2ldLmNvbnRlbnQ7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gY29udGVudC5sZW5ndGggLSAxOyBqID49IDA7IGotLSlcbiAgICAgICAgICAgICAgICBwb3MgKz0gY29udGVudFtqXS5ub2RlU2l6ZTtcbiAgICAgICAgICAgIGlmIChpKVxuICAgICAgICAgICAgICAgIHBvcysrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3M7XG4gICAgfVxuICAgIGZpbmRBdFBvaW50KHBhcmVudCwgb2Zmc2V0KSB7XG4gICAgICAgIGlmICh0aGlzLmZpbmQpXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmluZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbmRbaV0ubm9kZSA9PSBwYXJlbnQgJiYgdGhpcy5maW5kW2ldLm9mZnNldCA9PSBvZmZzZXQpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZFtpXS5wb3MgPSB0aGlzLmN1cnJlbnRQb3M7XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIGZpbmRJbnNpZGUocGFyZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmZpbmQpXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmluZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbmRbaV0ucG9zID09IG51bGwgJiYgcGFyZW50Lm5vZGVUeXBlID09IDEgJiYgcGFyZW50LmNvbnRhaW5zKHRoaXMuZmluZFtpXS5ub2RlKSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kW2ldLnBvcyA9IHRoaXMuY3VycmVudFBvcztcbiAgICAgICAgICAgIH1cbiAgICB9XG4gICAgZmluZEFyb3VuZChwYXJlbnQsIGNvbnRlbnQsIGJlZm9yZSkge1xuICAgICAgICBpZiAocGFyZW50ICE9IGNvbnRlbnQgJiYgdGhpcy5maW5kKVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZpbmQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5maW5kW2ldLnBvcyA9PSBudWxsICYmIHBhcmVudC5ub2RlVHlwZSA9PSAxICYmIHBhcmVudC5jb250YWlucyh0aGlzLmZpbmRbaV0ubm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvcyA9IGNvbnRlbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcy5maW5kW2ldLm5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9zICYgKGJlZm9yZSA/IDIgOiA0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZFtpXS5wb3MgPSB0aGlzLmN1cnJlbnRQb3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgIH1cbiAgICBmaW5kSW5UZXh0KHRleHROb2RlKSB7XG4gICAgICAgIGlmICh0aGlzLmZpbmQpXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmluZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbmRbaV0ubm9kZSA9PSB0ZXh0Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kW2ldLnBvcyA9IHRoaXMuY3VycmVudFBvcyAtICh0ZXh0Tm9kZS5ub2RlVmFsdWUubGVuZ3RoIC0gdGhpcy5maW5kW2ldLm9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIC8vIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gY29udGV4dCBzdHJpbmcgbWF0Y2hlcyB0aGlzIGNvbnRleHQuXG4gICAgbWF0Y2hlc0NvbnRleHQoY29udGV4dCkge1xuICAgICAgICBpZiAoY29udGV4dC5pbmRleE9mKFwifFwiKSA+IC0xKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuc3BsaXQoL1xccypcXHxcXHMqLykuc29tZSh0aGlzLm1hdGNoZXNDb250ZXh0LCB0aGlzKTtcbiAgICAgICAgbGV0IHBhcnRzID0gY29udGV4dC5zcGxpdChcIi9cIik7XG4gICAgICAgIGxldCBvcHRpb24gPSB0aGlzLm9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgbGV0IHVzZVJvb3QgPSAhdGhpcy5pc09wZW4gJiYgKCFvcHRpb24gfHwgb3B0aW9uLnBhcmVudC50eXBlID09IHRoaXMubm9kZXNbMF0udHlwZSk7XG4gICAgICAgIGxldCBtaW5EZXB0aCA9IC0ob3B0aW9uID8gb3B0aW9uLmRlcHRoICsgMSA6IDApICsgKHVzZVJvb3QgPyAwIDogMSk7XG4gICAgICAgIGxldCBtYXRjaCA9IChpLCBkZXB0aCkgPT4ge1xuICAgICAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnQgPSBwYXJ0c1tpXTtcbiAgICAgICAgICAgICAgICBpZiAocGFydCA9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09IHBhcnRzLmxlbmd0aCAtIDEgfHwgaSA9PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyBkZXB0aCA+PSBtaW5EZXB0aDsgZGVwdGgtLSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaChpIC0gMSwgZGVwdGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IGRlcHRoID4gMCB8fCAoZGVwdGggPT0gMCAmJiB1c2VSb290KSA/IHRoaXMubm9kZXNbZGVwdGhdLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogb3B0aW9uICYmIGRlcHRoID49IG1pbkRlcHRoID8gb3B0aW9uLm5vZGUoZGVwdGggLSBtaW5EZXB0aCkudHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0IHx8IChuZXh0Lm5hbWUgIT0gcGFydCAmJiBuZXh0Lmdyb3Vwcy5pbmRleE9mKHBhcnQpID09IC0xKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1hdGNoKHBhcnRzLmxlbmd0aCAtIDEsIHRoaXMub3Blbik7XG4gICAgfVxuICAgIHRleHRibG9ja0Zyb21Db250ZXh0KCkge1xuICAgICAgICBsZXQgJGNvbnRleHQgPSB0aGlzLm9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKCRjb250ZXh0KVxuICAgICAgICAgICAgZm9yIChsZXQgZCA9ICRjb250ZXh0LmRlcHRoOyBkID49IDA7IGQtLSkge1xuICAgICAgICAgICAgICAgIGxldCBkZWZsdCA9ICRjb250ZXh0Lm5vZGUoZCkuY29udGVudE1hdGNoQXQoJGNvbnRleHQuaW5kZXhBZnRlcihkKSkuZGVmYXVsdFR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmx0ICYmIGRlZmx0LmlzVGV4dGJsb2NrICYmIGRlZmx0LmRlZmF1bHRBdHRycylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmx0O1xuICAgICAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBuYW1lIGluIHRoaXMucGFyc2VyLnNjaGVtYS5ub2Rlcykge1xuICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLnBhcnNlci5zY2hlbWEubm9kZXNbbmFtZV07XG4gICAgICAgICAgICBpZiAodHlwZS5pc1RleHRibG9jayAmJiB0eXBlLmRlZmF1bHRBdHRycylcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhZGRQZW5kaW5nTWFyayhtYXJrKSB7XG4gICAgICAgIGxldCBmb3VuZCA9IGZpbmRTYW1lTWFya0luU2V0KG1hcmssIHRoaXMudG9wLnBlbmRpbmdNYXJrcyk7XG4gICAgICAgIGlmIChmb3VuZClcbiAgICAgICAgICAgIHRoaXMudG9wLnN0YXNoTWFya3MucHVzaChmb3VuZCk7XG4gICAgICAgIHRoaXMudG9wLnBlbmRpbmdNYXJrcyA9IG1hcmsuYWRkVG9TZXQodGhpcy50b3AucGVuZGluZ01hcmtzKTtcbiAgICB9XG4gICAgcmVtb3ZlUGVuZGluZ01hcmsobWFyaywgdXB0bykge1xuICAgICAgICBmb3IgKGxldCBkZXB0aCA9IHRoaXMub3BlbjsgZGVwdGggPj0gMDsgZGVwdGgtLSkge1xuICAgICAgICAgICAgbGV0IGxldmVsID0gdGhpcy5ub2Rlc1tkZXB0aF07XG4gICAgICAgICAgICBsZXQgZm91bmQgPSBsZXZlbC5wZW5kaW5nTWFya3MubGFzdEluZGV4T2YobWFyayk7XG4gICAgICAgICAgICBpZiAoZm91bmQgPiAtMSkge1xuICAgICAgICAgICAgICAgIGxldmVsLnBlbmRpbmdNYXJrcyA9IG1hcmsucmVtb3ZlRnJvbVNldChsZXZlbC5wZW5kaW5nTWFya3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV2ZWwuYWN0aXZlTWFya3MgPSBtYXJrLnJlbW92ZUZyb21TZXQobGV2ZWwuYWN0aXZlTWFya3MpO1xuICAgICAgICAgICAgICAgIGxldCBzdGFzaE1hcmsgPSBsZXZlbC5wb3BGcm9tU3Rhc2hNYXJrKG1hcmspO1xuICAgICAgICAgICAgICAgIGlmIChzdGFzaE1hcmsgJiYgbGV2ZWwudHlwZSAmJiBsZXZlbC50eXBlLmFsbG93c01hcmtUeXBlKHN0YXNoTWFyay50eXBlKSlcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWwuYWN0aXZlTWFya3MgPSBzdGFzaE1hcmsuYWRkVG9TZXQobGV2ZWwuYWN0aXZlTWFya3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxldmVsID09IHVwdG8pXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBLbHVkZ2UgdG8gd29yayBhcm91bmQgZGlyZWN0bHkgbmVzdGVkIGxpc3Qgbm9kZXMgcHJvZHVjZWQgYnkgc29tZVxuLy8gdG9vbHMgYW5kIGFsbG93ZWQgYnkgYnJvd3NlcnMgdG8gbWVhbiB0aGF0IHRoZSBuZXN0ZWQgbGlzdCBpc1xuLy8gYWN0dWFsbHkgcGFydCBvZiB0aGUgbGlzdCBpdGVtIGFib3ZlIGl0LlxuZnVuY3Rpb24gbm9ybWFsaXplTGlzdChkb20pIHtcbiAgICBmb3IgKGxldCBjaGlsZCA9IGRvbS5maXJzdENoaWxkLCBwcmV2SXRlbSA9IG51bGw7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nKSB7XG4gICAgICAgIGxldCBuYW1lID0gY2hpbGQubm9kZVR5cGUgPT0gMSA/IGNoaWxkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xuICAgICAgICBpZiAobmFtZSAmJiBsaXN0VGFncy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiBwcmV2SXRlbSkge1xuICAgICAgICAgICAgcHJldkl0ZW0uYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgICAgICAgY2hpbGQgPSBwcmV2SXRlbTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChuYW1lID09IFwibGlcIikge1xuICAgICAgICAgICAgcHJldkl0ZW0gPSBjaGlsZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBwcmV2SXRlbSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBBcHBseSBhIENTUyBzZWxlY3Rvci5cbmZ1bmN0aW9uIG1hdGNoZXMoZG9tLCBzZWxlY3Rvcikge1xuICAgIHJldHVybiAoZG9tLm1hdGNoZXMgfHwgZG9tLm1zTWF0Y2hlc1NlbGVjdG9yIHx8IGRvbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwgZG9tLm1vek1hdGNoZXNTZWxlY3RvcikuY2FsbChkb20sIHNlbGVjdG9yKTtcbn1cbi8vIFRva2VuaXplIGEgc3R5bGUgYXR0cmlidXRlIGludG8gcHJvcGVydHkvdmFsdWUgcGFpcnMuXG5mdW5jdGlvbiBwYXJzZVN0eWxlcyhzdHlsZSkge1xuICAgIGxldCByZSA9IC9cXHMqKFtcXHctXSspXFxzKjpcXHMqKFteO10rKS9nLCBtLCByZXN1bHQgPSBbXTtcbiAgICB3aGlsZSAobSA9IHJlLmV4ZWMoc3R5bGUpKVxuICAgICAgICByZXN1bHQucHVzaChtWzFdLCBtWzJdLnRyaW0oKSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGNvcHkob2JqKSB7XG4gICAgbGV0IGNvcHkgPSB7fTtcbiAgICBmb3IgKGxldCBwcm9wIGluIG9iailcbiAgICAgICAgY29weVtwcm9wXSA9IG9ialtwcm9wXTtcbiAgICByZXR1cm4gY29weTtcbn1cbi8vIFVzZWQgd2hlbiBmaW5kaW5nIGEgbWFyayBhdCB0aGUgdG9wIGxldmVsIG9mIGEgZnJhZ21lbnQgcGFyc2UuXG4vLyBDaGVja3Mgd2hldGhlciBpdCB3b3VsZCBiZSByZWFzb25hYmxlIHRvIGFwcGx5IGEgZ2l2ZW4gbWFyayB0eXBlIHRvXG4vLyBhIGdpdmVuIG5vZGUsIGJ5IGxvb2tpbmcgYXQgdGhlIHdheSB0aGUgbWFyayBvY2N1cnMgaW4gdGhlIHNjaGVtYS5cbmZ1bmN0aW9uIG1hcmtNYXlBcHBseShtYXJrVHlwZSwgbm9kZVR5cGUpIHtcbiAgICBsZXQgbm9kZXMgPSBub2RlVHlwZS5zY2hlbWEubm9kZXM7XG4gICAgZm9yIChsZXQgbmFtZSBpbiBub2Rlcykge1xuICAgICAgICBsZXQgcGFyZW50ID0gbm9kZXNbbmFtZV07XG4gICAgICAgIGlmICghcGFyZW50LmFsbG93c01hcmtUeXBlKG1hcmtUeXBlKSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBsZXQgc2VlbiA9IFtdLCBzY2FuID0gKG1hdGNoKSA9PiB7XG4gICAgICAgICAgICBzZWVuLnB1c2gobWF0Y2gpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRjaC5lZGdlQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCB7IHR5cGUsIG5leHQgfSA9IG1hdGNoLmVkZ2UoaSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gbm9kZVR5cGUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChzZWVuLmluZGV4T2YobmV4dCkgPCAwICYmIHNjYW4obmV4dCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAoc2NhbihwYXJlbnQuY29udGVudE1hdGNoKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGZpbmRTYW1lTWFya0luU2V0KG1hcmssIHNldCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChtYXJrLmVxKHNldFtpXSkpXG4gICAgICAgICAgICByZXR1cm4gc2V0W2ldO1xuICAgIH1cbn1cblxuLyoqXG5BIERPTSBzZXJpYWxpemVyIGtub3dzIGhvdyB0byBjb252ZXJ0IFByb3NlTWlycm9yIG5vZGVzIGFuZFxubWFya3Mgb2YgdmFyaW91cyB0eXBlcyB0byBET00gbm9kZXMuXG4qL1xuY2xhc3MgRE9NU2VyaWFsaXplciB7XG4gICAgLyoqXG4gICAgQ3JlYXRlIGEgc2VyaWFsaXplci4gYG5vZGVzYCBzaG91bGQgbWFwIG5vZGUgbmFtZXMgdG8gZnVuY3Rpb25zXG4gICAgdGhhdCB0YWtlIGEgbm9kZSBhbmQgcmV0dXJuIGEgZGVzY3JpcHRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmdcbiAgICBET00uIGBtYXJrc2AgZG9lcyB0aGUgc2FtZSBmb3IgbWFyayBuYW1lcywgYnV0IGFsc28gZ2V0cyBhblxuICAgIGFyZ3VtZW50IHRoYXQgdGVsbHMgaXQgd2hldGhlciB0aGUgbWFyaydzIGNvbnRlbnQgaXMgYmxvY2sgb3JcbiAgICBpbmxpbmUgY29udGVudCAoZm9yIHR5cGljYWwgdXNlLCBpdCdsbCBhbHdheXMgYmUgaW5saW5lKS4gQSBtYXJrXG4gICAgc2VyaWFsaXplciBtYXkgYmUgYG51bGxgIHRvIGluZGljYXRlIHRoYXQgbWFya3Mgb2YgdGhhdCB0eXBlXG4gICAgc2hvdWxkIG5vdCBiZSBzZXJpYWxpemVkLlxuICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgVGhlIG5vZGUgc2VyaWFsaXphdGlvbiBmdW5jdGlvbnMuXG4gICAgKi9cbiAgICBub2RlcywgXG4gICAgLyoqXG4gICAgVGhlIG1hcmsgc2VyaWFsaXphdGlvbiBmdW5jdGlvbnMuXG4gICAgKi9cbiAgICBtYXJrcykge1xuICAgICAgICB0aGlzLm5vZGVzID0gbm9kZXM7XG4gICAgICAgIHRoaXMubWFya3MgPSBtYXJrcztcbiAgICB9XG4gICAgLyoqXG4gICAgU2VyaWFsaXplIHRoZSBjb250ZW50IG9mIHRoaXMgZnJhZ21lbnQgdG8gYSBET00gZnJhZ21lbnQuIFdoZW5cbiAgICBub3QgaW4gdGhlIGJyb3dzZXIsIHRoZSBgZG9jdW1lbnRgIG9wdGlvbiwgY29udGFpbmluZyBhIERPTVxuICAgIGRvY3VtZW50LCBzaG91bGQgYmUgcGFzc2VkIHNvIHRoYXQgdGhlIHNlcmlhbGl6ZXIgY2FuIGNyZWF0ZVxuICAgIG5vZGVzLlxuICAgICovXG4gICAgc2VyaWFsaXplRnJhZ21lbnQoZnJhZ21lbnQsIG9wdGlvbnMgPSB7fSwgdGFyZ2V0KSB7XG4gICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgdGFyZ2V0ID0gZG9jKG9wdGlvbnMpLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgbGV0IHRvcCA9IHRhcmdldCwgYWN0aXZlID0gW107XG4gICAgICAgIGZyYWdtZW50LmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICBpZiAoYWN0aXZlLmxlbmd0aCB8fCBub2RlLm1hcmtzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGxldCBrZWVwID0gMCwgcmVuZGVyZWQgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlIChrZWVwIDwgYWN0aXZlLmxlbmd0aCAmJiByZW5kZXJlZCA8IG5vZGUubWFya3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBuZXh0ID0gbm9kZS5tYXJrc1tyZW5kZXJlZF07XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXJrc1tuZXh0LnR5cGUubmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVkKys7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHQuZXEoYWN0aXZlW2tlZXBdWzBdKSB8fCBuZXh0LnR5cGUuc3BlYy5zcGFubmluZyA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAga2VlcCsrO1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJlZCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoa2VlcCA8IGFjdGl2ZS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIHRvcCA9IGFjdGl2ZS5wb3AoKVsxXTtcbiAgICAgICAgICAgICAgICB3aGlsZSAocmVuZGVyZWQgPCBub2RlLm1hcmtzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYWRkID0gbm9kZS5tYXJrc1tyZW5kZXJlZCsrXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1hcmtET00gPSB0aGlzLnNlcmlhbGl6ZU1hcmsoYWRkLCBub2RlLmlzSW5saW5lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hcmtET00pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZS5wdXNoKFthZGQsIHRvcF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wLmFwcGVuZENoaWxkKG1hcmtET00uZG9tKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcCA9IG1hcmtET00uY29udGVudERPTSB8fCBtYXJrRE9NLmRvbTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvcC5hcHBlbmRDaGlsZCh0aGlzLnNlcmlhbGl6ZU5vZGVJbm5lcihub2RlLCBvcHRpb25zKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHNlcmlhbGl6ZU5vZGVJbm5lcihub2RlLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCB7IGRvbSwgY29udGVudERPTSB9ID0gRE9NU2VyaWFsaXplci5yZW5kZXJTcGVjKGRvYyhvcHRpb25zKSwgdGhpcy5ub2Rlc1tub2RlLnR5cGUubmFtZV0obm9kZSkpO1xuICAgICAgICBpZiAoY29udGVudERPTSkge1xuICAgICAgICAgICAgaWYgKG5vZGUuaXNMZWFmKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQ29udGVudCBob2xlIG5vdCBhbGxvd2VkIGluIGEgbGVhZiBub2RlIHNwZWNcIik7XG4gICAgICAgICAgICB0aGlzLnNlcmlhbGl6ZUZyYWdtZW50KG5vZGUuY29udGVudCwgb3B0aW9ucywgY29udGVudERPTSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRvbTtcbiAgICB9XG4gICAgLyoqXG4gICAgU2VyaWFsaXplIHRoaXMgbm9kZSB0byBhIERPTSBub2RlLiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiB5b3VcbiAgICBuZWVkIHRvIHNlcmlhbGl6ZSBhIHBhcnQgb2YgYSBkb2N1bWVudCwgYXMgb3Bwb3NlZCB0byB0aGUgd2hvbGVcbiAgICBkb2N1bWVudC4gVG8gc2VyaWFsaXplIGEgd2hvbGUgZG9jdW1lbnQsIHVzZVxuICAgIFtgc2VyaWFsaXplRnJhZ21lbnRgXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jbW9kZWwuRE9NU2VyaWFsaXplci5zZXJpYWxpemVGcmFnbWVudCkgb25cbiAgICBpdHMgW2NvbnRlbnRdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNtb2RlbC5Ob2RlLmNvbnRlbnQpLlxuICAgICovXG4gICAgc2VyaWFsaXplTm9kZShub2RlLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgbGV0IGRvbSA9IHRoaXMuc2VyaWFsaXplTm9kZUlubmVyKG5vZGUsIG9wdGlvbnMpO1xuICAgICAgICBmb3IgKGxldCBpID0gbm9kZS5tYXJrcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgbGV0IHdyYXAgPSB0aGlzLnNlcmlhbGl6ZU1hcmsobm9kZS5tYXJrc1tpXSwgbm9kZS5pc0lubGluZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAod3JhcCkge1xuICAgICAgICAgICAgICAgICh3cmFwLmNvbnRlbnRET00gfHwgd3JhcC5kb20pLmFwcGVuZENoaWxkKGRvbSk7XG4gICAgICAgICAgICAgICAgZG9tID0gd3JhcC5kb207XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRvbTtcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBzZXJpYWxpemVNYXJrKG1hcmssIGlubGluZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGxldCB0b0RPTSA9IHRoaXMubWFya3NbbWFyay50eXBlLm5hbWVdO1xuICAgICAgICByZXR1cm4gdG9ET00gJiYgRE9NU2VyaWFsaXplci5yZW5kZXJTcGVjKGRvYyhvcHRpb25zKSwgdG9ET00obWFyaywgaW5saW5lKSk7XG4gICAgfVxuICAgIC8qKlxuICAgIFJlbmRlciBhbiBbb3V0cHV0IHNwZWNdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNtb2RlbC5ET01PdXRwdXRTcGVjKSB0byBhIERPTSBub2RlLiBJZlxuICAgIHRoZSBzcGVjIGhhcyBhIGhvbGUgKHplcm8pIGluIGl0LCBgY29udGVudERPTWAgd2lsbCBwb2ludCBhdCB0aGVcbiAgICBub2RlIHdpdGggdGhlIGhvbGUuXG4gICAgKi9cbiAgICBzdGF0aWMgcmVuZGVyU3BlYyhkb2MsIHN0cnVjdHVyZSwgeG1sTlMgPSBudWxsKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RydWN0dXJlID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICByZXR1cm4geyBkb206IGRvYy5jcmVhdGVUZXh0Tm9kZShzdHJ1Y3R1cmUpIH07XG4gICAgICAgIGlmIChzdHJ1Y3R1cmUubm9kZVR5cGUgIT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiB7IGRvbTogc3RydWN0dXJlIH07XG4gICAgICAgIGlmIChzdHJ1Y3R1cmUuZG9tICYmIHN0cnVjdHVyZS5kb20ubm9kZVR5cGUgIT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7XG4gICAgICAgIGxldCB0YWdOYW1lID0gc3RydWN0dXJlWzBdLCBzcGFjZSA9IHRhZ05hbWUuaW5kZXhPZihcIiBcIik7XG4gICAgICAgIGlmIChzcGFjZSA+IDApIHtcbiAgICAgICAgICAgIHhtbE5TID0gdGFnTmFtZS5zbGljZSgwLCBzcGFjZSk7XG4gICAgICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS5zbGljZShzcGFjZSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb250ZW50RE9NO1xuICAgICAgICBsZXQgZG9tID0gKHhtbE5TID8gZG9jLmNyZWF0ZUVsZW1lbnROUyh4bWxOUywgdGFnTmFtZSkgOiBkb2MuY3JlYXRlRWxlbWVudCh0YWdOYW1lKSk7XG4gICAgICAgIGxldCBhdHRycyA9IHN0cnVjdHVyZVsxXSwgc3RhcnQgPSAxO1xuICAgICAgICBpZiAoYXR0cnMgJiYgdHlwZW9mIGF0dHJzID09IFwib2JqZWN0XCIgJiYgYXR0cnMubm9kZVR5cGUgPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShhdHRycykpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gMjtcbiAgICAgICAgICAgIGZvciAobGV0IG5hbWUgaW4gYXR0cnMpXG4gICAgICAgICAgICAgICAgaWYgKGF0dHJzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNwYWNlID0gbmFtZS5pbmRleE9mKFwiIFwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNwYWNlID4gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGVOUyhuYW1lLnNsaWNlKDAsIHNwYWNlKSwgbmFtZS5zbGljZShzcGFjZSArIDEpLCBhdHRyc1tuYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUobmFtZSwgYXR0cnNbbmFtZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBzdHJ1Y3R1cmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBjaGlsZCA9IHN0cnVjdHVyZVtpXTtcbiAgICAgICAgICAgIGlmIChjaGlsZCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChpIDwgc3RydWN0dXJlLmxlbmd0aCAtIDEgfHwgaSA+IHN0YXJ0KVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNvbnRlbnQgaG9sZSBtdXN0IGJlIHRoZSBvbmx5IGNoaWxkIG9mIGl0cyBwYXJlbnQgbm9kZVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkb20sIGNvbnRlbnRET006IGRvbSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IHsgZG9tOiBpbm5lciwgY29udGVudERPTTogaW5uZXJDb250ZW50IH0gPSBET01TZXJpYWxpemVyLnJlbmRlclNwZWMoZG9jLCBjaGlsZCwgeG1sTlMpO1xuICAgICAgICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChpbm5lcik7XG4gICAgICAgICAgICAgICAgaWYgKGlubmVyQ29udGVudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudERPTSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTXVsdGlwbGUgY29udGVudCBob2xlc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudERPTSA9IGlubmVyQ29udGVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9tLCBjb250ZW50RE9NIH07XG4gICAgfVxuICAgIC8qKlxuICAgIEJ1aWxkIGEgc2VyaWFsaXplciB1c2luZyB0aGUgW2B0b0RPTWBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNtb2RlbC5Ob2RlU3BlYy50b0RPTSlcbiAgICBwcm9wZXJ0aWVzIGluIGEgc2NoZW1hJ3Mgbm9kZSBhbmQgbWFyayBzcGVjcy5cbiAgICAqL1xuICAgIHN0YXRpYyBmcm9tU2NoZW1hKHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gc2NoZW1hLmNhY2hlZC5kb21TZXJpYWxpemVyIHx8XG4gICAgICAgICAgICAoc2NoZW1hLmNhY2hlZC5kb21TZXJpYWxpemVyID0gbmV3IERPTVNlcmlhbGl6ZXIodGhpcy5ub2Rlc0Zyb21TY2hlbWEoc2NoZW1hKSwgdGhpcy5tYXJrc0Zyb21TY2hlbWEoc2NoZW1hKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICBHYXRoZXIgdGhlIHNlcmlhbGl6ZXJzIGluIGEgc2NoZW1hJ3Mgbm9kZSBzcGVjcyBpbnRvIGFuIG9iamVjdC5cbiAgICBUaGlzIGNhbiBiZSB1c2VmdWwgYXMgYSBiYXNlIHRvIGJ1aWxkIGEgY3VzdG9tIHNlcmlhbGl6ZXIgZnJvbS5cbiAgICAqL1xuICAgIHN0YXRpYyBub2Rlc0Zyb21TY2hlbWEoc2NoZW1hKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBnYXRoZXJUb0RPTShzY2hlbWEubm9kZXMpO1xuICAgICAgICBpZiAoIXJlc3VsdC50ZXh0KVxuICAgICAgICAgICAgcmVzdWx0LnRleHQgPSBub2RlID0+IG5vZGUudGV4dDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgR2F0aGVyIHRoZSBzZXJpYWxpemVycyBpbiBhIHNjaGVtYSdzIG1hcmsgc3BlY3MgaW50byBhbiBvYmplY3QuXG4gICAgKi9cbiAgICBzdGF0aWMgbWFya3NGcm9tU2NoZW1hKHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gZ2F0aGVyVG9ET00oc2NoZW1hLm1hcmtzKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnYXRoZXJUb0RPTShvYmopIHtcbiAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgZm9yIChsZXQgbmFtZSBpbiBvYmopIHtcbiAgICAgICAgbGV0IHRvRE9NID0gb2JqW25hbWVdLnNwZWMudG9ET007XG4gICAgICAgIGlmICh0b0RPTSlcbiAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IHRvRE9NO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gZG9jKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5kb2N1bWVudCB8fCB3aW5kb3cuZG9jdW1lbnQ7XG59XG5cbmV4cG9ydCB7IENvbnRlbnRNYXRjaCwgRE9NUGFyc2VyLCBET01TZXJpYWxpemVyLCBGcmFnbWVudCwgTWFyaywgTWFya1R5cGUsIE5vZGUsIE5vZGVSYW5nZSwgTm9kZVR5cGUsIFJlcGxhY2VFcnJvciwgUmVzb2x2ZWRQb3MsIFNjaGVtYSwgU2xpY2UgfTtcbiIsImltcG9ydCB7IFJlcGxhY2VFcnJvciwgU2xpY2UsIEZyYWdtZW50LCBNYXJrVHlwZSwgTWFyayB9IGZyb20gJ3Byb3NlbWlycm9yLW1vZGVsJztcblxuLy8gUmVjb3ZlcnkgdmFsdWVzIGVuY29kZSBhIHJhbmdlIGluZGV4IGFuZCBhbiBvZmZzZXQuIFRoZXkgYXJlXG4vLyByZXByZXNlbnRlZCBhcyBudW1iZXJzLCBiZWNhdXNlIHRvbnMgb2YgdGhlbSB3aWxsIGJlIGNyZWF0ZWQgd2hlblxuLy8gbWFwcGluZywgZm9yIGV4YW1wbGUsIGEgbGFyZ2UgbnVtYmVyIG9mIGRlY29yYXRpb25zLiBUaGUgbnVtYmVyJ3Ncbi8vIGxvd2VyIDE2IGJpdHMgcHJvdmlkZSB0aGUgaW5kZXgsIHRoZSByZW1haW5pbmcgYml0cyB0aGUgb2Zmc2V0LlxuLy9cbi8vIE5vdGU6IFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGJpdCBzaGlmdCBvcGVyYXRvcnMgdG8gZW4tIGFuZFxuLy8gZGVjb2RlIHRoZXNlLCBzaW5jZSB0aG9zZSBjbGlwIHRvIDMyIGJpdHMsIHdoaWNoIHdlIG1pZ2h0IGluIHJhcmVcbi8vIGNhc2VzIHdhbnQgdG8gb3ZlcmZsb3cuIEEgNjQtYml0IGZsb2F0IGNhbiByZXByZXNlbnQgNDgtYml0XG4vLyBpbnRlZ2VycyBwcmVjaXNlbHkuXG5jb25zdCBsb3dlcjE2ID0gMHhmZmZmO1xuY29uc3QgZmFjdG9yMTYgPSBNYXRoLnBvdygyLCAxNik7XG5mdW5jdGlvbiBtYWtlUmVjb3ZlcihpbmRleCwgb2Zmc2V0KSB7IHJldHVybiBpbmRleCArIG9mZnNldCAqIGZhY3RvcjE2OyB9XG5mdW5jdGlvbiByZWNvdmVySW5kZXgodmFsdWUpIHsgcmV0dXJuIHZhbHVlICYgbG93ZXIxNjsgfVxuZnVuY3Rpb24gcmVjb3Zlck9mZnNldCh2YWx1ZSkgeyByZXR1cm4gKHZhbHVlIC0gKHZhbHVlICYgbG93ZXIxNikpIC8gZmFjdG9yMTY7IH1cbmNvbnN0IERFTF9CRUZPUkUgPSAxLCBERUxfQUZURVIgPSAyLCBERUxfQUNST1NTID0gNCwgREVMX1NJREUgPSA4O1xuLyoqXG5BbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgbWFwcGVkIHBvc2l0aW9uIHdpdGggZXh0cmFcbmluZm9ybWF0aW9uLlxuKi9cbmNsYXNzIE1hcFJlc3VsdCB7XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICBUaGUgbWFwcGVkIHZlcnNpb24gb2YgdGhlIHBvc2l0aW9uLlxuICAgICovXG4gICAgcG9zLCBcbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIGRlbEluZm8sIFxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgcmVjb3Zlcikge1xuICAgICAgICB0aGlzLnBvcyA9IHBvcztcbiAgICAgICAgdGhpcy5kZWxJbmZvID0gZGVsSW5mbztcbiAgICAgICAgdGhpcy5yZWNvdmVyID0gcmVjb3ZlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgVGVsbHMgeW91IHdoZXRoZXIgdGhlIHBvc2l0aW9uIHdhcyBkZWxldGVkLCB0aGF0IGlzLCB3aGV0aGVyIHRoZVxuICAgIHN0ZXAgcmVtb3ZlZCB0aGUgdG9rZW4gb24gdGhlIHNpZGUgcXVlcmllZCAodmlhIHRoZSBgYXNzb2NgKVxuICAgIGFyZ3VtZW50IGZyb20gdGhlIGRvY3VtZW50LlxuICAgICovXG4gICAgZ2V0IGRlbGV0ZWQoKSB7IHJldHVybiAodGhpcy5kZWxJbmZvICYgREVMX1NJREUpID4gMDsgfVxuICAgIC8qKlxuICAgIFRlbGxzIHlvdSB3aGV0aGVyIHRoZSB0b2tlbiBiZWZvcmUgdGhlIG1hcHBlZCBwb3NpdGlvbiB3YXMgZGVsZXRlZC5cbiAgICAqL1xuICAgIGdldCBkZWxldGVkQmVmb3JlKCkgeyByZXR1cm4gKHRoaXMuZGVsSW5mbyAmIChERUxfQkVGT1JFIHwgREVMX0FDUk9TUykpID4gMDsgfVxuICAgIC8qKlxuICAgIFRydWUgd2hlbiB0aGUgdG9rZW4gYWZ0ZXIgdGhlIG1hcHBlZCBwb3NpdGlvbiB3YXMgZGVsZXRlZC5cbiAgICAqL1xuICAgIGdldCBkZWxldGVkQWZ0ZXIoKSB7IHJldHVybiAodGhpcy5kZWxJbmZvICYgKERFTF9BRlRFUiB8IERFTF9BQ1JPU1MpKSA+IDA7IH1cbiAgICAvKipcbiAgICBUZWxscyB3aGV0aGVyIGFueSBvZiB0aGUgc3RlcHMgbWFwcGVkIHRocm91Z2ggZGVsZXRlcyBhY3Jvc3MgdGhlXG4gICAgcG9zaXRpb24gKGluY2x1ZGluZyBib3RoIHRoZSB0b2tlbiBiZWZvcmUgYW5kIGFmdGVyIHRoZVxuICAgIHBvc2l0aW9uKS5cbiAgICAqL1xuICAgIGdldCBkZWxldGVkQWNyb3NzKCkgeyByZXR1cm4gKHRoaXMuZGVsSW5mbyAmIERFTF9BQ1JPU1MpID4gMDsgfVxufVxuLyoqXG5BIG1hcCBkZXNjcmliaW5nIHRoZSBkZWxldGlvbnMgYW5kIGluc2VydGlvbnMgbWFkZSBieSBhIHN0ZXAsIHdoaWNoXG5jYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIHBvc2l0aW9ucyBpbiB0aGVcbnByZS1zdGVwIHZlcnNpb24gb2YgYSBkb2N1bWVudCBhbmQgdGhlIHNhbWUgcG9zaXRpb24gaW4gdGhlXG5wb3N0LXN0ZXAgdmVyc2lvbi5cbiovXG5jbGFzcyBTdGVwTWFwIHtcbiAgICAvKipcbiAgICBDcmVhdGUgYSBwb3NpdGlvbiBtYXAuIFRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBkb2N1bWVudCBhcmVcbiAgICByZXByZXNlbnRlZCBhcyBhbiBhcnJheSBvZiBudW1iZXJzLCBpbiB3aGljaCBlYWNoIGdyb3VwIG9mIHRocmVlXG4gICAgcmVwcmVzZW50cyBhIG1vZGlmaWVkIGNodW5rIGFzIGBbc3RhcnQsIG9sZFNpemUsIG5ld1NpemVdYC5cbiAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgcmFuZ2VzLCBcbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIGludmVydGVkID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5yYW5nZXMgPSByYW5nZXM7XG4gICAgICAgIHRoaXMuaW52ZXJ0ZWQgPSBpbnZlcnRlZDtcbiAgICAgICAgaWYgKCFyYW5nZXMubGVuZ3RoICYmIFN0ZXBNYXAuZW1wdHkpXG4gICAgICAgICAgICByZXR1cm4gU3RlcE1hcC5lbXB0eTtcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICByZWNvdmVyKHZhbHVlKSB7XG4gICAgICAgIGxldCBkaWZmID0gMCwgaW5kZXggPSByZWNvdmVySW5kZXgodmFsdWUpO1xuICAgICAgICBpZiAoIXRoaXMuaW52ZXJ0ZWQpXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4OyBpKyspXG4gICAgICAgICAgICAgICAgZGlmZiArPSB0aGlzLnJhbmdlc1tpICogMyArIDJdIC0gdGhpcy5yYW5nZXNbaSAqIDMgKyAxXTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VzW2luZGV4ICogM10gKyBkaWZmICsgcmVjb3Zlck9mZnNldCh2YWx1ZSk7XG4gICAgfVxuICAgIG1hcFJlc3VsdChwb3MsIGFzc29jID0gMSkgeyByZXR1cm4gdGhpcy5fbWFwKHBvcywgYXNzb2MsIGZhbHNlKTsgfVxuICAgIG1hcChwb3MsIGFzc29jID0gMSkgeyByZXR1cm4gdGhpcy5fbWFwKHBvcywgYXNzb2MsIHRydWUpOyB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBfbWFwKHBvcywgYXNzb2MsIHNpbXBsZSkge1xuICAgICAgICBsZXQgZGlmZiA9IDAsIG9sZEluZGV4ID0gdGhpcy5pbnZlcnRlZCA/IDIgOiAxLCBuZXdJbmRleCA9IHRoaXMuaW52ZXJ0ZWQgPyAxIDogMjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5yYW5nZXNbaV0gLSAodGhpcy5pbnZlcnRlZCA/IGRpZmYgOiAwKTtcbiAgICAgICAgICAgIGlmIChzdGFydCA+IHBvcylcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGxldCBvbGRTaXplID0gdGhpcy5yYW5nZXNbaSArIG9sZEluZGV4XSwgbmV3U2l6ZSA9IHRoaXMucmFuZ2VzW2kgKyBuZXdJbmRleF0sIGVuZCA9IHN0YXJ0ICsgb2xkU2l6ZTtcbiAgICAgICAgICAgIGlmIChwb3MgPD0gZW5kKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNpZGUgPSAhb2xkU2l6ZSA/IGFzc29jIDogcG9zID09IHN0YXJ0ID8gLTEgOiBwb3MgPT0gZW5kID8gMSA6IGFzc29jO1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBzdGFydCArIGRpZmYgKyAoc2lkZSA8IDAgPyAwIDogbmV3U2l6ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHNpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICBsZXQgcmVjb3ZlciA9IHBvcyA9PSAoYXNzb2MgPCAwID8gc3RhcnQgOiBlbmQpID8gbnVsbCA6IG1ha2VSZWNvdmVyKGkgLyAzLCBwb3MgLSBzdGFydCk7XG4gICAgICAgICAgICAgICAgbGV0IGRlbCA9IHBvcyA9PSBzdGFydCA/IERFTF9BRlRFUiA6IHBvcyA9PSBlbmQgPyBERUxfQkVGT1JFIDogREVMX0FDUk9TUztcbiAgICAgICAgICAgICAgICBpZiAoYXNzb2MgPCAwID8gcG9zICE9IHN0YXJ0IDogcG9zICE9IGVuZClcbiAgICAgICAgICAgICAgICAgICAgZGVsIHw9IERFTF9TSURFO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWFwUmVzdWx0KHJlc3VsdCwgZGVsLCByZWNvdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpZmYgKz0gbmV3U2l6ZSAtIG9sZFNpemU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNpbXBsZSA/IHBvcyArIGRpZmYgOiBuZXcgTWFwUmVzdWx0KHBvcyArIGRpZmYsIDAsIG51bGwpO1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHRvdWNoZXMocG9zLCByZWNvdmVyKSB7XG4gICAgICAgIGxldCBkaWZmID0gMCwgaW5kZXggPSByZWNvdmVySW5kZXgocmVjb3Zlcik7XG4gICAgICAgIGxldCBvbGRJbmRleCA9IHRoaXMuaW52ZXJ0ZWQgPyAyIDogMSwgbmV3SW5kZXggPSB0aGlzLmludmVydGVkID8gMSA6IDI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgICAgIGxldCBzdGFydCA9IHRoaXMucmFuZ2VzW2ldIC0gKHRoaXMuaW52ZXJ0ZWQgPyBkaWZmIDogMCk7XG4gICAgICAgICAgICBpZiAoc3RhcnQgPiBwb3MpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBsZXQgb2xkU2l6ZSA9IHRoaXMucmFuZ2VzW2kgKyBvbGRJbmRleF0sIGVuZCA9IHN0YXJ0ICsgb2xkU2l6ZTtcbiAgICAgICAgICAgIGlmIChwb3MgPD0gZW5kICYmIGkgPT0gaW5kZXggKiAzKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZGlmZiArPSB0aGlzLnJhbmdlc1tpICsgbmV3SW5kZXhdIC0gb2xkU2l6ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgIENhbGxzIHRoZSBnaXZlbiBmdW5jdGlvbiBvbiBlYWNoIG9mIHRoZSBjaGFuZ2VkIHJhbmdlcyBpbmNsdWRlZCBpblxuICAgIHRoaXMgbWFwLlxuICAgICovXG4gICAgZm9yRWFjaChmKSB7XG4gICAgICAgIGxldCBvbGRJbmRleCA9IHRoaXMuaW52ZXJ0ZWQgPyAyIDogMSwgbmV3SW5kZXggPSB0aGlzLmludmVydGVkID8gMSA6IDI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBkaWZmID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgICAgICBsZXQgc3RhcnQgPSB0aGlzLnJhbmdlc1tpXSwgb2xkU3RhcnQgPSBzdGFydCAtICh0aGlzLmludmVydGVkID8gZGlmZiA6IDApLCBuZXdTdGFydCA9IHN0YXJ0ICsgKHRoaXMuaW52ZXJ0ZWQgPyAwIDogZGlmZik7XG4gICAgICAgICAgICBsZXQgb2xkU2l6ZSA9IHRoaXMucmFuZ2VzW2kgKyBvbGRJbmRleF0sIG5ld1NpemUgPSB0aGlzLnJhbmdlc1tpICsgbmV3SW5kZXhdO1xuICAgICAgICAgICAgZihvbGRTdGFydCwgb2xkU3RhcnQgKyBvbGRTaXplLCBuZXdTdGFydCwgbmV3U3RhcnQgKyBuZXdTaXplKTtcbiAgICAgICAgICAgIGRpZmYgKz0gbmV3U2l6ZSAtIG9sZFNpemU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgQ3JlYXRlIGFuIGludmVydGVkIHZlcnNpb24gb2YgdGhpcyBtYXAuIFRoZSByZXN1bHQgY2FuIGJlIHVzZWQgdG9cbiAgICBtYXAgcG9zaXRpb25zIGluIHRoZSBwb3N0LXN0ZXAgZG9jdW1lbnQgdG8gdGhlIHByZS1zdGVwIGRvY3VtZW50LlxuICAgICovXG4gICAgaW52ZXJ0KCkge1xuICAgICAgICByZXR1cm4gbmV3IFN0ZXBNYXAodGhpcy5yYW5nZXMsICF0aGlzLmludmVydGVkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmludmVydGVkID8gXCItXCIgOiBcIlwiKSArIEpTT04uc3RyaW5naWZ5KHRoaXMucmFuZ2VzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQ3JlYXRlIGEgbWFwIHRoYXQgbW92ZXMgYWxsIHBvc2l0aW9ucyBieSBvZmZzZXQgYG5gICh3aGljaCBtYXkgYmVcbiAgICBuZWdhdGl2ZSkuIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIGFwcGx5aW5nIHN0ZXBzIG1lYW50IGZvciBhXG4gICAgc3ViLWRvY3VtZW50IHRvIGEgbGFyZ2VyIGRvY3VtZW50LCBvciB2aWNlLXZlcnNhLlxuICAgICovXG4gICAgc3RhdGljIG9mZnNldChuKSB7XG4gICAgICAgIHJldHVybiBuID09IDAgPyBTdGVwTWFwLmVtcHR5IDogbmV3IFN0ZXBNYXAobiA8IDAgPyBbMCwgLW4sIDBdIDogWzAsIDAsIG5dKTtcbiAgICB9XG59XG4vKipcbkEgU3RlcE1hcCB0aGF0IGNvbnRhaW5zIG5vIGNoYW5nZWQgcmFuZ2VzLlxuKi9cblN0ZXBNYXAuZW1wdHkgPSBuZXcgU3RlcE1hcChbXSk7XG4vKipcbkEgbWFwcGluZyByZXByZXNlbnRzIGEgcGlwZWxpbmUgb2YgemVybyBvciBtb3JlIFtzdGVwXG5tYXBzXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jdHJhbnNmb3JtLlN0ZXBNYXApLiBJdCBoYXMgc3BlY2lhbCBwcm92aXNpb25zIGZvciBsb3NzbGVzc2x5XG5oYW5kbGluZyBtYXBwaW5nIHBvc2l0aW9ucyB0aHJvdWdoIGEgc2VyaWVzIG9mIHN0ZXBzIGluIHdoaWNoIHNvbWVcbnN0ZXBzIGFyZSBpbnZlcnRlZCB2ZXJzaW9ucyBvZiBlYXJsaWVyIHN0ZXBzLiAoVGhpcyBjb21lcyB1cCB3aGVuXG7igJhbcmViYXNpbmddKC9kb2NzL2d1aWRlLyN0cmFuc2Zvcm0ucmViYXNpbmcp4oCZIHN0ZXBzIGZvclxuY29sbGFib3JhdGlvbiBvciBoaXN0b3J5IG1hbmFnZW1lbnQuKVxuKi9cbmNsYXNzIE1hcHBpbmcge1xuICAgIC8qKlxuICAgIENyZWF0ZSBhIG5ldyBtYXBwaW5nIHdpdGggdGhlIGdpdmVuIHBvc2l0aW9uIG1hcHMuXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICBUaGUgc3RlcCBtYXBzIGluIHRoaXMgbWFwcGluZy5cbiAgICAqL1xuICAgIG1hcHMgPSBbXSwgXG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBtaXJyb3IsIFxuICAgIC8qKlxuICAgIFRoZSBzdGFydGluZyBwb3NpdGlvbiBpbiB0aGUgYG1hcHNgIGFycmF5LCB1c2VkIHdoZW4gYG1hcGAgb3JcbiAgICBgbWFwUmVzdWx0YCBpcyBjYWxsZWQuXG4gICAgKi9cbiAgICBmcm9tID0gMCwgXG4gICAgLyoqXG4gICAgVGhlIGVuZCBwb3NpdGlvbiBpbiB0aGUgYG1hcHNgIGFycmF5LlxuICAgICovXG4gICAgdG8gPSBtYXBzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLm1hcHMgPSBtYXBzO1xuICAgICAgICB0aGlzLm1pcnJvciA9IG1pcnJvcjtcbiAgICAgICAgdGhpcy5mcm9tID0gZnJvbTtcbiAgICAgICAgdGhpcy50byA9IHRvO1xuICAgIH1cbiAgICAvKipcbiAgICBDcmVhdGUgYSBtYXBwaW5nIHRoYXQgbWFwcyBvbmx5IHRocm91Z2ggYSBwYXJ0IG9mIHRoaXMgb25lLlxuICAgICovXG4gICAgc2xpY2UoZnJvbSA9IDAsIHRvID0gdGhpcy5tYXBzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbmV3IE1hcHBpbmcodGhpcy5tYXBzLCB0aGlzLm1pcnJvciwgZnJvbSwgdG8pO1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIGNvcHkoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWFwcGluZyh0aGlzLm1hcHMuc2xpY2UoKSwgdGhpcy5taXJyb3IgJiYgdGhpcy5taXJyb3Iuc2xpY2UoKSwgdGhpcy5mcm9tLCB0aGlzLnRvKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQWRkIGEgc3RlcCBtYXAgdG8gdGhlIGVuZCBvZiB0aGlzIG1hcHBpbmcuIElmIGBtaXJyb3JzYCBpc1xuICAgIGdpdmVuLCBpdCBzaG91bGQgYmUgdGhlIGluZGV4IG9mIHRoZSBzdGVwIG1hcCB0aGF0IGlzIHRoZSBtaXJyb3JcbiAgICBpbWFnZSBvZiB0aGlzIG9uZS5cbiAgICAqL1xuICAgIGFwcGVuZE1hcChtYXAsIG1pcnJvcnMpIHtcbiAgICAgICAgdGhpcy50byA9IHRoaXMubWFwcy5wdXNoKG1hcCk7XG4gICAgICAgIGlmIChtaXJyb3JzICE9IG51bGwpXG4gICAgICAgICAgICB0aGlzLnNldE1pcnJvcih0aGlzLm1hcHMubGVuZ3RoIC0gMSwgbWlycm9ycyk7XG4gICAgfVxuICAgIC8qKlxuICAgIEFkZCBhbGwgdGhlIHN0ZXAgbWFwcyBpbiBhIGdpdmVuIG1hcHBpbmcgdG8gdGhpcyBvbmUgKHByZXNlcnZpbmdcbiAgICBtaXJyb3JpbmcgaW5mb3JtYXRpb24pLlxuICAgICovXG4gICAgYXBwZW5kTWFwcGluZyhtYXBwaW5nKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBzdGFydFNpemUgPSB0aGlzLm1hcHMubGVuZ3RoOyBpIDwgbWFwcGluZy5tYXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgbWlyciA9IG1hcHBpbmcuZ2V0TWlycm9yKGkpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRNYXAobWFwcGluZy5tYXBzW2ldLCBtaXJyICE9IG51bGwgJiYgbWlyciA8IGkgPyBzdGFydFNpemUgKyBtaXJyIDogdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICBGaW5kcyB0aGUgb2Zmc2V0IG9mIHRoZSBzdGVwIG1hcCB0aGF0IG1pcnJvcnMgdGhlIG1hcCBhdCB0aGVcbiAgICBnaXZlbiBvZmZzZXQsIGluIHRoaXMgbWFwcGluZyAoYXMgcGVyIHRoZSBzZWNvbmQgYXJndW1lbnQgdG9cbiAgICBgYXBwZW5kTWFwYCkuXG4gICAgKi9cbiAgICBnZXRNaXJyb3Iobikge1xuICAgICAgICBpZiAodGhpcy5taXJyb3IpXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubWlycm9yLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pcnJvcltpXSA9PSBuKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5taXJyb3JbaSArIChpICUgMiA/IC0xIDogMSldO1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHNldE1pcnJvcihuLCBtKSB7XG4gICAgICAgIGlmICghdGhpcy5taXJyb3IpXG4gICAgICAgICAgICB0aGlzLm1pcnJvciA9IFtdO1xuICAgICAgICB0aGlzLm1pcnJvci5wdXNoKG4sIG0pO1xuICAgIH1cbiAgICAvKipcbiAgICBBcHBlbmQgdGhlIGludmVyc2Ugb2YgdGhlIGdpdmVuIG1hcHBpbmcgdG8gdGhpcyBvbmUuXG4gICAgKi9cbiAgICBhcHBlbmRNYXBwaW5nSW52ZXJ0ZWQobWFwcGluZykge1xuICAgICAgICBmb3IgKGxldCBpID0gbWFwcGluZy5tYXBzLmxlbmd0aCAtIDEsIHRvdGFsU2l6ZSA9IHRoaXMubWFwcy5sZW5ndGggKyBtYXBwaW5nLm1hcHMubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgbGV0IG1pcnIgPSBtYXBwaW5nLmdldE1pcnJvcihpKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kTWFwKG1hcHBpbmcubWFwc1tpXS5pbnZlcnQoKSwgbWlyciAhPSBudWxsICYmIG1pcnIgPiBpID8gdG90YWxTaXplIC0gbWlyciAtIDEgOiB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgIENyZWF0ZSBhbiBpbnZlcnRlZCB2ZXJzaW9uIG9mIHRoaXMgbWFwcGluZy5cbiAgICAqL1xuICAgIGludmVydCgpIHtcbiAgICAgICAgbGV0IGludmVyc2UgPSBuZXcgTWFwcGluZztcbiAgICAgICAgaW52ZXJzZS5hcHBlbmRNYXBwaW5nSW52ZXJ0ZWQodGhpcyk7XG4gICAgICAgIHJldHVybiBpbnZlcnNlO1xuICAgIH1cbiAgICAvKipcbiAgICBNYXAgYSBwb3NpdGlvbiB0aHJvdWdoIHRoaXMgbWFwcGluZy5cbiAgICAqL1xuICAgIG1hcChwb3MsIGFzc29jID0gMSkge1xuICAgICAgICBpZiAodGhpcy5taXJyb3IpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFwKHBvcywgYXNzb2MsIHRydWUpO1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5mcm9tOyBpIDwgdGhpcy50bzsgaSsrKVxuICAgICAgICAgICAgcG9zID0gdGhpcy5tYXBzW2ldLm1hcChwb3MsIGFzc29jKTtcbiAgICAgICAgcmV0dXJuIHBvcztcbiAgICB9XG4gICAgLyoqXG4gICAgTWFwIGEgcG9zaXRpb24gdGhyb3VnaCB0aGlzIG1hcHBpbmcsIHJldHVybmluZyBhIG1hcHBpbmdcbiAgICByZXN1bHQuXG4gICAgKi9cbiAgICBtYXBSZXN1bHQocG9zLCBhc3NvYyA9IDEpIHsgcmV0dXJuIHRoaXMuX21hcChwb3MsIGFzc29jLCBmYWxzZSk7IH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIF9tYXAocG9zLCBhc3NvYywgc2ltcGxlKSB7XG4gICAgICAgIGxldCBkZWxJbmZvID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuZnJvbTsgaSA8IHRoaXMudG87IGkrKykge1xuICAgICAgICAgICAgbGV0IG1hcCA9IHRoaXMubWFwc1tpXSwgcmVzdWx0ID0gbWFwLm1hcFJlc3VsdChwb3MsIGFzc29jKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQucmVjb3ZlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvcnIgPSB0aGlzLmdldE1pcnJvcihpKTtcbiAgICAgICAgICAgICAgICBpZiAoY29yciAhPSBudWxsICYmIGNvcnIgPiBpICYmIGNvcnIgPCB0aGlzLnRvKSB7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBjb3JyO1xuICAgICAgICAgICAgICAgICAgICBwb3MgPSB0aGlzLm1hcHNbY29ycl0ucmVjb3ZlcihyZXN1bHQucmVjb3Zlcik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbEluZm8gfD0gcmVzdWx0LmRlbEluZm87XG4gICAgICAgICAgICBwb3MgPSByZXN1bHQucG9zO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaW1wbGUgPyBwb3MgOiBuZXcgTWFwUmVzdWx0KHBvcywgZGVsSW5mbywgbnVsbCk7XG4gICAgfVxufVxuXG5jb25zdCBzdGVwc0J5SUQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqXG5BIHN0ZXAgb2JqZWN0IHJlcHJlc2VudHMgYW4gYXRvbWljIGNoYW5nZS4gSXQgZ2VuZXJhbGx5IGFwcGxpZXNcbm9ubHkgdG8gdGhlIGRvY3VtZW50IGl0IHdhcyBjcmVhdGVkIGZvciwgc2luY2UgdGhlIHBvc2l0aW9uc1xuc3RvcmVkIGluIGl0IHdpbGwgb25seSBtYWtlIHNlbnNlIGZvciB0aGF0IGRvY3VtZW50LlxuXG5OZXcgc3RlcHMgYXJlIGRlZmluZWQgYnkgY3JlYXRpbmcgY2xhc3NlcyB0aGF0IGV4dGVuZCBgU3RlcGAsXG5vdmVycmlkaW5nIHRoZSBgYXBwbHlgLCBgaW52ZXJ0YCwgYG1hcGAsIGBnZXRNYXBgIGFuZCBgZnJvbUpTT05gXG5tZXRob2RzLCBhbmQgcmVnaXN0ZXJpbmcgeW91ciBjbGFzcyB3aXRoIGEgdW5pcXVlXG5KU09OLXNlcmlhbGl6YXRpb24gaWRlbnRpZmllciB1c2luZ1xuW2BTdGVwLmpzb25JRGBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyN0cmFuc2Zvcm0uU3RlcF5qc29uSUQpLlxuKi9cbmNsYXNzIFN0ZXAge1xuICAgIC8qKlxuICAgIEdldCB0aGUgc3RlcCBtYXAgdGhhdCByZXByZXNlbnRzIHRoZSBjaGFuZ2VzIG1hZGUgYnkgdGhpcyBzdGVwLFxuICAgIGFuZCB3aGljaCBjYW4gYmUgdXNlZCB0byB0cmFuc2Zvcm0gYmV0d2VlbiBwb3NpdGlvbnMgaW4gdGhlIG9sZFxuICAgIGFuZCB0aGUgbmV3IGRvY3VtZW50LlxuICAgICovXG4gICAgZ2V0TWFwKCkgeyByZXR1cm4gU3RlcE1hcC5lbXB0eTsgfVxuICAgIC8qKlxuICAgIFRyeSB0byBtZXJnZSB0aGlzIHN0ZXAgd2l0aCBhbm90aGVyIG9uZSwgdG8gYmUgYXBwbGllZCBkaXJlY3RseVxuICAgIGFmdGVyIGl0LiBSZXR1cm5zIHRoZSBtZXJnZWQgc3RlcCB3aGVuIHBvc3NpYmxlLCBudWxsIGlmIHRoZVxuICAgIHN0ZXBzIGNhbid0IGJlIG1lcmdlZC5cbiAgICAqL1xuICAgIG1lcmdlKG90aGVyKSB7IHJldHVybiBudWxsOyB9XG4gICAgLyoqXG4gICAgRGVzZXJpYWxpemUgYSBzdGVwIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb24uIFdpbGwgY2FsbFxuICAgIHRocm91Z2ggdG8gdGhlIHN0ZXAgY2xhc3MnIG93biBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZC5cbiAgICAqL1xuICAgIHN0YXRpYyBmcm9tSlNPTihzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uIHx8ICFqc29uLnN0ZXBUeXBlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIGlucHV0IGZvciBTdGVwLmZyb21KU09OXCIpO1xuICAgICAgICBsZXQgdHlwZSA9IHN0ZXBzQnlJRFtqc29uLnN0ZXBUeXBlXTtcbiAgICAgICAgaWYgKCF0eXBlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5vIHN0ZXAgdHlwZSAke2pzb24uc3RlcFR5cGV9IGRlZmluZWRgKTtcbiAgICAgICAgcmV0dXJuIHR5cGUuZnJvbUpTT04oc2NoZW1hLCBqc29uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgVG8gYmUgYWJsZSB0byBzZXJpYWxpemUgc3RlcHMgdG8gSlNPTiwgZWFjaCBzdGVwIG5lZWRzIGEgc3RyaW5nXG4gICAgSUQgdG8gYXR0YWNoIHRvIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uLiBVc2UgdGhpcyBtZXRob2QgdG9cbiAgICByZWdpc3RlciBhbiBJRCBmb3IgeW91ciBzdGVwIGNsYXNzZXMuIFRyeSB0byBwaWNrIHNvbWV0aGluZ1xuICAgIHRoYXQncyB1bmxpa2VseSB0byBjbGFzaCB3aXRoIHN0ZXBzIGZyb20gb3RoZXIgbW9kdWxlcy5cbiAgICAqL1xuICAgIHN0YXRpYyBqc29uSUQoaWQsIHN0ZXBDbGFzcykge1xuICAgICAgICBpZiAoaWQgaW4gc3RlcHNCeUlEKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJEdXBsaWNhdGUgdXNlIG9mIHN0ZXAgSlNPTiBJRCBcIiArIGlkKTtcbiAgICAgICAgc3RlcHNCeUlEW2lkXSA9IHN0ZXBDbGFzcztcbiAgICAgICAgc3RlcENsYXNzLnByb3RvdHlwZS5qc29uSUQgPSBpZDtcbiAgICAgICAgcmV0dXJuIHN0ZXBDbGFzcztcbiAgICB9XG59XG4vKipcblRoZSByZXN1bHQgb2YgW2FwcGx5aW5nXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jdHJhbnNmb3JtLlN0ZXAuYXBwbHkpIGEgc3RlcC4gQ29udGFpbnMgZWl0aGVyIGFcbm5ldyBkb2N1bWVudCBvciBhIGZhaWx1cmUgdmFsdWUuXG4qL1xuY2xhc3MgU3RlcFJlc3VsdCB7XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICBUaGUgdHJhbnNmb3JtZWQgZG9jdW1lbnQsIGlmIHN1Y2Nlc3NmdWwuXG4gICAgKi9cbiAgICBkb2MsIFxuICAgIC8qKlxuICAgIFRoZSBmYWlsdXJlIG1lc3NhZ2UsIGlmIHVuc3VjY2Vzc2Z1bC5cbiAgICAqL1xuICAgIGZhaWxlZCkge1xuICAgICAgICB0aGlzLmRvYyA9IGRvYztcbiAgICAgICAgdGhpcy5mYWlsZWQgPSBmYWlsZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgIENyZWF0ZSBhIHN1Y2Nlc3NmdWwgc3RlcCByZXN1bHQuXG4gICAgKi9cbiAgICBzdGF0aWMgb2soZG9jKSB7IHJldHVybiBuZXcgU3RlcFJlc3VsdChkb2MsIG51bGwpOyB9XG4gICAgLyoqXG4gICAgQ3JlYXRlIGEgZmFpbGVkIHN0ZXAgcmVzdWx0LlxuICAgICovXG4gICAgc3RhdGljIGZhaWwobWVzc2FnZSkgeyByZXR1cm4gbmV3IFN0ZXBSZXN1bHQobnVsbCwgbWVzc2FnZSk7IH1cbiAgICAvKipcbiAgICBDYWxsIFtgTm9kZS5yZXBsYWNlYF0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI21vZGVsLk5vZGUucmVwbGFjZSkgd2l0aCB0aGUgZ2l2ZW5cbiAgICBhcmd1bWVudHMuIENyZWF0ZSBhIHN1Y2Nlc3NmdWwgcmVzdWx0IGlmIGl0IHN1Y2NlZWRzLCBhbmQgYVxuICAgIGZhaWxlZCBvbmUgaWYgaXQgdGhyb3dzIGEgYFJlcGxhY2VFcnJvcmAuXG4gICAgKi9cbiAgICBzdGF0aWMgZnJvbVJlcGxhY2UoZG9jLCBmcm9tLCB0bywgc2xpY2UpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBTdGVwUmVzdWx0Lm9rKGRvYy5yZXBsYWNlKGZyb20sIHRvLCBzbGljZSkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFJlcGxhY2VFcnJvcilcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RlcFJlc3VsdC5mYWlsKGUubWVzc2FnZSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBtYXBGcmFnbWVudChmcmFnbWVudCwgZiwgcGFyZW50KSB7XG4gICAgbGV0IG1hcHBlZCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhZ21lbnQuY2hpbGRDb3VudDsgaSsrKSB7XG4gICAgICAgIGxldCBjaGlsZCA9IGZyYWdtZW50LmNoaWxkKGkpO1xuICAgICAgICBpZiAoY2hpbGQuY29udGVudC5zaXplKVxuICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC5jb3B5KG1hcEZyYWdtZW50KGNoaWxkLmNvbnRlbnQsIGYsIGNoaWxkKSk7XG4gICAgICAgIGlmIChjaGlsZC5pc0lubGluZSlcbiAgICAgICAgICAgIGNoaWxkID0gZihjaGlsZCwgcGFyZW50LCBpKTtcbiAgICAgICAgbWFwcGVkLnB1c2goY2hpbGQpO1xuICAgIH1cbiAgICByZXR1cm4gRnJhZ21lbnQuZnJvbUFycmF5KG1hcHBlZCk7XG59XG4vKipcbkFkZCBhIG1hcmsgdG8gYWxsIGlubGluZSBjb250ZW50IGJldHdlZW4gdHdvIHBvc2l0aW9ucy5cbiovXG5jbGFzcyBBZGRNYXJrU3RlcCBleHRlbmRzIFN0ZXAge1xuICAgIC8qKlxuICAgIENyZWF0ZSBhIG1hcmsgc3RlcC5cbiAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgIC8qKlxuICAgIFRoZSBzdGFydCBvZiB0aGUgbWFya2VkIHJhbmdlLlxuICAgICovXG4gICAgZnJvbSwgXG4gICAgLyoqXG4gICAgVGhlIGVuZCBvZiB0aGUgbWFya2VkIHJhbmdlLlxuICAgICovXG4gICAgdG8sIFxuICAgIC8qKlxuICAgIFRoZSBtYXJrIHRvIGFkZC5cbiAgICAqL1xuICAgIG1hcmspIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5mcm9tID0gZnJvbTtcbiAgICAgICAgdGhpcy50byA9IHRvO1xuICAgICAgICB0aGlzLm1hcmsgPSBtYXJrO1xuICAgIH1cbiAgICBhcHBseShkb2MpIHtcbiAgICAgICAgbGV0IG9sZFNsaWNlID0gZG9jLnNsaWNlKHRoaXMuZnJvbSwgdGhpcy50byksICRmcm9tID0gZG9jLnJlc29sdmUodGhpcy5mcm9tKTtcbiAgICAgICAgbGV0IHBhcmVudCA9ICRmcm9tLm5vZGUoJGZyb20uc2hhcmVkRGVwdGgodGhpcy50bykpO1xuICAgICAgICBsZXQgc2xpY2UgPSBuZXcgU2xpY2UobWFwRnJhZ21lbnQob2xkU2xpY2UuY29udGVudCwgKG5vZGUsIHBhcmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFub2RlLmlzQXRvbSB8fCAhcGFyZW50LnR5cGUuYWxsb3dzTWFya1R5cGUodGhpcy5tYXJrLnR5cGUpKVxuICAgICAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUubWFyayh0aGlzLm1hcmsuYWRkVG9TZXQobm9kZS5tYXJrcykpO1xuICAgICAgICB9LCBwYXJlbnQpLCBvbGRTbGljZS5vcGVuU3RhcnQsIG9sZFNsaWNlLm9wZW5FbmQpO1xuICAgICAgICByZXR1cm4gU3RlcFJlc3VsdC5mcm9tUmVwbGFjZShkb2MsIHRoaXMuZnJvbSwgdGhpcy50bywgc2xpY2UpO1xuICAgIH1cbiAgICBpbnZlcnQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVtb3ZlTWFya1N0ZXAodGhpcy5mcm9tLCB0aGlzLnRvLCB0aGlzLm1hcmspO1xuICAgIH1cbiAgICBtYXAobWFwcGluZykge1xuICAgICAgICBsZXQgZnJvbSA9IG1hcHBpbmcubWFwUmVzdWx0KHRoaXMuZnJvbSwgMSksIHRvID0gbWFwcGluZy5tYXBSZXN1bHQodGhpcy50bywgLTEpO1xuICAgICAgICBpZiAoZnJvbS5kZWxldGVkICYmIHRvLmRlbGV0ZWQgfHwgZnJvbS5wb3MgPj0gdG8ucG9zKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBuZXcgQWRkTWFya1N0ZXAoZnJvbS5wb3MsIHRvLnBvcywgdGhpcy5tYXJrKTtcbiAgICB9XG4gICAgbWVyZ2Uob3RoZXIpIHtcbiAgICAgICAgaWYgKG90aGVyIGluc3RhbmNlb2YgQWRkTWFya1N0ZXAgJiZcbiAgICAgICAgICAgIG90aGVyLm1hcmsuZXEodGhpcy5tYXJrKSAmJlxuICAgICAgICAgICAgdGhpcy5mcm9tIDw9IG90aGVyLnRvICYmIHRoaXMudG8gPj0gb3RoZXIuZnJvbSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWRkTWFya1N0ZXAoTWF0aC5taW4odGhpcy5mcm9tLCBvdGhlci5mcm9tKSwgTWF0aC5tYXgodGhpcy50bywgb3RoZXIudG8pLCB0aGlzLm1hcmspO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4geyBzdGVwVHlwZTogXCJhZGRNYXJrXCIsIG1hcms6IHRoaXMubWFyay50b0pTT04oKSxcbiAgICAgICAgICAgIGZyb206IHRoaXMuZnJvbSwgdG86IHRoaXMudG8gfTtcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBzdGF0aWMgZnJvbUpTT04oc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIGlmICh0eXBlb2YganNvbi5mcm9tICE9IFwibnVtYmVyXCIgfHwgdHlwZW9mIGpzb24udG8gIT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBpbnB1dCBmb3IgQWRkTWFya1N0ZXAuZnJvbUpTT05cIik7XG4gICAgICAgIHJldHVybiBuZXcgQWRkTWFya1N0ZXAoanNvbi5mcm9tLCBqc29uLnRvLCBzY2hlbWEubWFya0Zyb21KU09OKGpzb24ubWFyaykpO1xuICAgIH1cbn1cblN0ZXAuanNvbklEKFwiYWRkTWFya1wiLCBBZGRNYXJrU3RlcCk7XG4vKipcblJlbW92ZSBhIG1hcmsgZnJvbSBhbGwgaW5saW5lIGNvbnRlbnQgYmV0d2VlbiB0d28gcG9zaXRpb25zLlxuKi9cbmNsYXNzIFJlbW92ZU1hcmtTdGVwIGV4dGVuZHMgU3RlcCB7XG4gICAgLyoqXG4gICAgQ3JlYXRlIGEgbWFyay1yZW1vdmluZyBzdGVwLlxuICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgVGhlIHN0YXJ0IG9mIHRoZSB1bm1hcmtlZCByYW5nZS5cbiAgICAqL1xuICAgIGZyb20sIFxuICAgIC8qKlxuICAgIFRoZSBlbmQgb2YgdGhlIHVubWFya2VkIHJhbmdlLlxuICAgICovXG4gICAgdG8sIFxuICAgIC8qKlxuICAgIFRoZSBtYXJrIHRvIHJlbW92ZS5cbiAgICAqL1xuICAgIG1hcmspIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5mcm9tID0gZnJvbTtcbiAgICAgICAgdGhpcy50byA9IHRvO1xuICAgICAgICB0aGlzLm1hcmsgPSBtYXJrO1xuICAgIH1cbiAgICBhcHBseShkb2MpIHtcbiAgICAgICAgbGV0IG9sZFNsaWNlID0gZG9jLnNsaWNlKHRoaXMuZnJvbSwgdGhpcy50byk7XG4gICAgICAgIGxldCBzbGljZSA9IG5ldyBTbGljZShtYXBGcmFnbWVudChvbGRTbGljZS5jb250ZW50LCBub2RlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLm1hcmsodGhpcy5tYXJrLnJlbW92ZUZyb21TZXQobm9kZS5tYXJrcykpO1xuICAgICAgICB9LCBkb2MpLCBvbGRTbGljZS5vcGVuU3RhcnQsIG9sZFNsaWNlLm9wZW5FbmQpO1xuICAgICAgICByZXR1cm4gU3RlcFJlc3VsdC5mcm9tUmVwbGFjZShkb2MsIHRoaXMuZnJvbSwgdGhpcy50bywgc2xpY2UpO1xuICAgIH1cbiAgICBpbnZlcnQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWRkTWFya1N0ZXAodGhpcy5mcm9tLCB0aGlzLnRvLCB0aGlzLm1hcmspO1xuICAgIH1cbiAgICBtYXAobWFwcGluZykge1xuICAgICAgICBsZXQgZnJvbSA9IG1hcHBpbmcubWFwUmVzdWx0KHRoaXMuZnJvbSwgMSksIHRvID0gbWFwcGluZy5tYXBSZXN1bHQodGhpcy50bywgLTEpO1xuICAgICAgICBpZiAoZnJvbS5kZWxldGVkICYmIHRvLmRlbGV0ZWQgfHwgZnJvbS5wb3MgPj0gdG8ucG9zKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBuZXcgUmVtb3ZlTWFya1N0ZXAoZnJvbS5wb3MsIHRvLnBvcywgdGhpcy5tYXJrKTtcbiAgICB9XG4gICAgbWVyZ2Uob3RoZXIpIHtcbiAgICAgICAgaWYgKG90aGVyIGluc3RhbmNlb2YgUmVtb3ZlTWFya1N0ZXAgJiZcbiAgICAgICAgICAgIG90aGVyLm1hcmsuZXEodGhpcy5tYXJrKSAmJlxuICAgICAgICAgICAgdGhpcy5mcm9tIDw9IG90aGVyLnRvICYmIHRoaXMudG8gPj0gb3RoZXIuZnJvbSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVtb3ZlTWFya1N0ZXAoTWF0aC5taW4odGhpcy5mcm9tLCBvdGhlci5mcm9tKSwgTWF0aC5tYXgodGhpcy50bywgb3RoZXIudG8pLCB0aGlzLm1hcmspO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4geyBzdGVwVHlwZTogXCJyZW1vdmVNYXJrXCIsIG1hcms6IHRoaXMubWFyay50b0pTT04oKSxcbiAgICAgICAgICAgIGZyb206IHRoaXMuZnJvbSwgdG86IHRoaXMudG8gfTtcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBzdGF0aWMgZnJvbUpTT04oc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIGlmICh0eXBlb2YganNvbi5mcm9tICE9IFwibnVtYmVyXCIgfHwgdHlwZW9mIGpzb24udG8gIT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBpbnB1dCBmb3IgUmVtb3ZlTWFya1N0ZXAuZnJvbUpTT05cIik7XG4gICAgICAgIHJldHVybiBuZXcgUmVtb3ZlTWFya1N0ZXAoanNvbi5mcm9tLCBqc29uLnRvLCBzY2hlbWEubWFya0Zyb21KU09OKGpzb24ubWFyaykpO1xuICAgIH1cbn1cblN0ZXAuanNvbklEKFwicmVtb3ZlTWFya1wiLCBSZW1vdmVNYXJrU3RlcCk7XG4vKipcbkFkZCBhIG1hcmsgdG8gYSBzcGVjaWZpYyBub2RlLlxuKi9cbmNsYXNzIEFkZE5vZGVNYXJrU3RlcCBleHRlbmRzIFN0ZXAge1xuICAgIC8qKlxuICAgIENyZWF0ZSBhIG5vZGUgbWFyayBzdGVwLlxuICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgVGhlIHBvc2l0aW9uIG9mIHRoZSB0YXJnZXQgbm9kZS5cbiAgICAqL1xuICAgIHBvcywgXG4gICAgLyoqXG4gICAgVGhlIG1hcmsgdG8gYWRkLlxuICAgICovXG4gICAgbWFyaykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnBvcyA9IHBvcztcbiAgICAgICAgdGhpcy5tYXJrID0gbWFyaztcbiAgICB9XG4gICAgYXBwbHkoZG9jKSB7XG4gICAgICAgIGxldCBub2RlID0gZG9jLm5vZGVBdCh0aGlzLnBvcyk7XG4gICAgICAgIGlmICghbm9kZSlcbiAgICAgICAgICAgIHJldHVybiBTdGVwUmVzdWx0LmZhaWwoXCJObyBub2RlIGF0IG1hcmsgc3RlcCdzIHBvc2l0aW9uXCIpO1xuICAgICAgICBsZXQgdXBkYXRlZCA9IG5vZGUudHlwZS5jcmVhdGUobm9kZS5hdHRycywgbnVsbCwgdGhpcy5tYXJrLmFkZFRvU2V0KG5vZGUubWFya3MpKTtcbiAgICAgICAgcmV0dXJuIFN0ZXBSZXN1bHQuZnJvbVJlcGxhY2UoZG9jLCB0aGlzLnBvcywgdGhpcy5wb3MgKyAxLCBuZXcgU2xpY2UoRnJhZ21lbnQuZnJvbSh1cGRhdGVkKSwgMCwgbm9kZS5pc0xlYWYgPyAwIDogMSkpO1xuICAgIH1cbiAgICBpbnZlcnQoZG9jKSB7XG4gICAgICAgIGxldCBub2RlID0gZG9jLm5vZGVBdCh0aGlzLnBvcyk7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBsZXQgbmV3U2V0ID0gdGhpcy5tYXJrLmFkZFRvU2V0KG5vZGUubWFya3MpO1xuICAgICAgICAgICAgaWYgKG5ld1NldC5sZW5ndGggPT0gbm9kZS5tYXJrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUubWFya3MubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5tYXJrc1tpXS5pc0luU2V0KG5ld1NldCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFkZE5vZGVNYXJrU3RlcCh0aGlzLnBvcywgbm9kZS5tYXJrc1tpXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBZGROb2RlTWFya1N0ZXAodGhpcy5wb3MsIHRoaXMubWFyayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBSZW1vdmVOb2RlTWFya1N0ZXAodGhpcy5wb3MsIHRoaXMubWFyayk7XG4gICAgfVxuICAgIG1hcChtYXBwaW5nKSB7XG4gICAgICAgIGxldCBwb3MgPSBtYXBwaW5nLm1hcFJlc3VsdCh0aGlzLnBvcywgMSk7XG4gICAgICAgIHJldHVybiBwb3MuZGVsZXRlZEFmdGVyID8gbnVsbCA6IG5ldyBBZGROb2RlTWFya1N0ZXAocG9zLnBvcywgdGhpcy5tYXJrKTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4geyBzdGVwVHlwZTogXCJhZGROb2RlTWFya1wiLCBwb3M6IHRoaXMucG9zLCBtYXJrOiB0aGlzLm1hcmsudG9KU09OKCkgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBzdGF0aWMgZnJvbUpTT04oc2NoZW1hLCBqc29uKSB7XG4gICAgICAgIGlmICh0eXBlb2YganNvbi5wb3MgIT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBpbnB1dCBmb3IgQWRkTm9kZU1hcmtTdGVwLmZyb21KU09OXCIpO1xuICAgICAgICByZXR1cm4gbmV3IEFkZE5vZGVNYXJrU3RlcChqc29uLnBvcywgc2NoZW1hLm1hcmtGcm9tSlNPTihqc29uLm1hcmspKTtcbiAgICB9XG59XG5TdGVwLmpzb25JRChcImFkZE5vZGVNYXJrXCIsIEFkZE5vZGVNYXJrU3RlcCk7XG4vKipcblJlbW92ZSBhIG1hcmsgZnJvbSBhIHNwZWNpZmljIG5vZGUuXG4qL1xuY2xhc3MgUmVtb3ZlTm9kZU1hcmtTdGVwIGV4dGVuZHMgU3RlcCB7XG4gICAgLyoqXG4gICAgQ3JlYXRlIGEgbWFyay1yZW1vdmluZyBzdGVwLlxuICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgVGhlIHBvc2l0aW9uIG9mIHRoZSB0YXJnZXQgbm9kZS5cbiAgICAqL1xuICAgIHBvcywgXG4gICAgLyoqXG4gICAgVGhlIG1hcmsgdG8gcmVtb3ZlLlxuICAgICovXG4gICAgbWFyaykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnBvcyA9IHBvcztcbiAgICAgICAgdGhpcy5tYXJrID0gbWFyaztcbiAgICB9XG4gICAgYXBwbHkoZG9jKSB7XG4gICAgICAgIGxldCBub2RlID0gZG9jLm5vZGVBdCh0aGlzLnBvcyk7XG4gICAgICAgIGlmICghbm9kZSlcbiAgICAgICAgICAgIHJldHVybiBTdGVwUmVzdWx0LmZhaWwoXCJObyBub2RlIGF0IG1hcmsgc3RlcCdzIHBvc2l0aW9uXCIpO1xuICAgICAgICBsZXQgdXBkYXRlZCA9IG5vZGUudHlwZS5jcmVhdGUobm9kZS5hdHRycywgbnVsbCwgdGhpcy5tYXJrLnJlbW92ZUZyb21TZXQobm9kZS5tYXJrcykpO1xuICAgICAgICByZXR1cm4gU3RlcFJlc3VsdC5mcm9tUmVwbGFjZShkb2MsIHRoaXMucG9zLCB0aGlzLnBvcyArIDEsIG5ldyBTbGljZShGcmFnbWVudC5mcm9tKHVwZGF0ZWQpLCAwLCBub2RlLmlzTGVhZiA/IDAgOiAxKSk7XG4gICAgfVxuICAgIGludmVydChkb2MpIHtcbiAgICAgICAgbGV0IG5vZGUgPSBkb2Mubm9kZUF0KHRoaXMucG9zKTtcbiAgICAgICAgaWYgKCFub2RlIHx8ICF0aGlzLm1hcmsuaXNJblNldChub2RlLm1hcmtzKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICByZXR1cm4gbmV3IEFkZE5vZGVNYXJrU3RlcCh0aGlzLnBvcywgdGhpcy5tYXJrKTtcbiAgICB9XG4gICAgbWFwKG1hcHBpbmcpIHtcbiAgICAgICAgbGV0IHBvcyA9IG1hcHBpbmcubWFwUmVzdWx0KHRoaXMucG9zLCAxKTtcbiAgICAgICAgcmV0dXJuIHBvcy5kZWxldGVkQWZ0ZXIgPyBudWxsIDogbmV3IFJlbW92ZU5vZGVNYXJrU3RlcChwb3MucG9zLCB0aGlzLm1hcmspO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB7IHN0ZXBUeXBlOiBcInJlbW92ZU5vZGVNYXJrXCIsIHBvczogdGhpcy5wb3MsIG1hcms6IHRoaXMubWFyay50b0pTT04oKSB9O1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHN0YXRpYyBmcm9tSlNPTihzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uLnBvcyAhPSBcIm51bWJlclwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIGlucHV0IGZvciBSZW1vdmVOb2RlTWFya1N0ZXAuZnJvbUpTT05cIik7XG4gICAgICAgIHJldHVybiBuZXcgUmVtb3ZlTm9kZU1hcmtTdGVwKGpzb24ucG9zLCBzY2hlbWEubWFya0Zyb21KU09OKGpzb24ubWFyaykpO1xuICAgIH1cbn1cblN0ZXAuanNvbklEKFwicmVtb3ZlTm9kZU1hcmtcIiwgUmVtb3ZlTm9kZU1hcmtTdGVwKTtcblxuLyoqXG5SZXBsYWNlIGEgcGFydCBvZiB0aGUgZG9jdW1lbnQgd2l0aCBhIHNsaWNlIG9mIG5ldyBjb250ZW50LlxuKi9cbmNsYXNzIFJlcGxhY2VTdGVwIGV4dGVuZHMgU3RlcCB7XG4gICAgLyoqXG4gICAgVGhlIGdpdmVuIGBzbGljZWAgc2hvdWxkIGZpdCB0aGUgJ2dhcCcgYmV0d2VlbiBgZnJvbWAgYW5kXG4gICAgYHRvYOKAlHRoZSBkZXB0aHMgbXVzdCBsaW5lIHVwLCBhbmQgdGhlIHN1cnJvdW5kaW5nIG5vZGVzIG11c3QgYmVcbiAgICBhYmxlIHRvIGJlIGpvaW5lZCB3aXRoIHRoZSBvcGVuIHNpZGVzIG9mIHRoZSBzbGljZS4gV2hlblxuICAgIGBzdHJ1Y3R1cmVgIGlzIHRydWUsIHRoZSBzdGVwIHdpbGwgZmFpbCBpZiB0aGUgY29udGVudCBiZXR3ZWVuXG4gICAgZnJvbSBhbmQgdG8gaXMgbm90IGp1c3QgYSBzZXF1ZW5jZSBvZiBjbG9zaW5nIGFuZCB0aGVuIG9wZW5pbmdcbiAgICB0b2tlbnMgKHRoaXMgaXMgdG8gZ3VhcmQgYWdhaW5zdCByZWJhc2VkIHJlcGxhY2Ugc3RlcHNcbiAgICBvdmVyd3JpdGluZyBzb21ldGhpbmcgdGhleSB3ZXJlbid0IHN1cHBvc2VkIHRvKS5cbiAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgIC8qKlxuICAgIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVwbGFjZWQgcmFuZ2UuXG4gICAgKi9cbiAgICBmcm9tLCBcbiAgICAvKipcbiAgICBUaGUgZW5kIHBvc2l0aW9uIG9mIHRoZSByZXBsYWNlZCByYW5nZS5cbiAgICAqL1xuICAgIHRvLCBcbiAgICAvKipcbiAgICBUaGUgc2xpY2UgdG8gaW5zZXJ0LlxuICAgICovXG4gICAgc2xpY2UsIFxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgc3RydWN0dXJlID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5mcm9tID0gZnJvbTtcbiAgICAgICAgdGhpcy50byA9IHRvO1xuICAgICAgICB0aGlzLnNsaWNlID0gc2xpY2U7XG4gICAgICAgIHRoaXMuc3RydWN0dXJlID0gc3RydWN0dXJlO1xuICAgIH1cbiAgICBhcHBseShkb2MpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RydWN0dXJlICYmIGNvbnRlbnRCZXR3ZWVuKGRvYywgdGhpcy5mcm9tLCB0aGlzLnRvKSlcbiAgICAgICAgICAgIHJldHVybiBTdGVwUmVzdWx0LmZhaWwoXCJTdHJ1Y3R1cmUgcmVwbGFjZSB3b3VsZCBvdmVyd3JpdGUgY29udGVudFwiKTtcbiAgICAgICAgcmV0dXJuIFN0ZXBSZXN1bHQuZnJvbVJlcGxhY2UoZG9jLCB0aGlzLmZyb20sIHRoaXMudG8sIHRoaXMuc2xpY2UpO1xuICAgIH1cbiAgICBnZXRNYXAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RlcE1hcChbdGhpcy5mcm9tLCB0aGlzLnRvIC0gdGhpcy5mcm9tLCB0aGlzLnNsaWNlLnNpemVdKTtcbiAgICB9XG4gICAgaW52ZXJ0KGRvYykge1xuICAgICAgICByZXR1cm4gbmV3IFJlcGxhY2VTdGVwKHRoaXMuZnJvbSwgdGhpcy5mcm9tICsgdGhpcy5zbGljZS5zaXplLCBkb2Muc2xpY2UodGhpcy5mcm9tLCB0aGlzLnRvKSk7XG4gICAgfVxuICAgIG1hcChtYXBwaW5nKSB7XG4gICAgICAgIGxldCBmcm9tID0gbWFwcGluZy5tYXBSZXN1bHQodGhpcy5mcm9tLCAxKSwgdG8gPSBtYXBwaW5nLm1hcFJlc3VsdCh0aGlzLnRvLCAtMSk7XG4gICAgICAgIGlmIChmcm9tLmRlbGV0ZWRBY3Jvc3MgJiYgdG8uZGVsZXRlZEFjcm9zcylcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gbmV3IFJlcGxhY2VTdGVwKGZyb20ucG9zLCBNYXRoLm1heChmcm9tLnBvcywgdG8ucG9zKSwgdGhpcy5zbGljZSk7XG4gICAgfVxuICAgIG1lcmdlKG90aGVyKSB7XG4gICAgICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgUmVwbGFjZVN0ZXApIHx8IG90aGVyLnN0cnVjdHVyZSB8fCB0aGlzLnN0cnVjdHVyZSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBpZiAodGhpcy5mcm9tICsgdGhpcy5zbGljZS5zaXplID09IG90aGVyLmZyb20gJiYgIXRoaXMuc2xpY2Uub3BlbkVuZCAmJiAhb3RoZXIuc2xpY2Uub3BlblN0YXJ0KSB7XG4gICAgICAgICAgICBsZXQgc2xpY2UgPSB0aGlzLnNsaWNlLnNpemUgKyBvdGhlci5zbGljZS5zaXplID09IDAgPyBTbGljZS5lbXB0eVxuICAgICAgICAgICAgICAgIDogbmV3IFNsaWNlKHRoaXMuc2xpY2UuY29udGVudC5hcHBlbmQob3RoZXIuc2xpY2UuY29udGVudCksIHRoaXMuc2xpY2Uub3BlblN0YXJ0LCBvdGhlci5zbGljZS5vcGVuRW5kKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVwbGFjZVN0ZXAodGhpcy5mcm9tLCB0aGlzLnRvICsgKG90aGVyLnRvIC0gb3RoZXIuZnJvbSksIHNsaWNlLCB0aGlzLnN0cnVjdHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3RoZXIudG8gPT0gdGhpcy5mcm9tICYmICF0aGlzLnNsaWNlLm9wZW5TdGFydCAmJiAhb3RoZXIuc2xpY2Uub3BlbkVuZCkge1xuICAgICAgICAgICAgbGV0IHNsaWNlID0gdGhpcy5zbGljZS5zaXplICsgb3RoZXIuc2xpY2Uuc2l6ZSA9PSAwID8gU2xpY2UuZW1wdHlcbiAgICAgICAgICAgICAgICA6IG5ldyBTbGljZShvdGhlci5zbGljZS5jb250ZW50LmFwcGVuZCh0aGlzLnNsaWNlLmNvbnRlbnQpLCBvdGhlci5zbGljZS5vcGVuU3RhcnQsIHRoaXMuc2xpY2Uub3BlbkVuZCk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlcGxhY2VTdGVwKG90aGVyLmZyb20sIHRoaXMudG8sIHNsaWNlLCB0aGlzLnN0cnVjdHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGxldCBqc29uID0geyBzdGVwVHlwZTogXCJyZXBsYWNlXCIsIGZyb206IHRoaXMuZnJvbSwgdG86IHRoaXMudG8gfTtcbiAgICAgICAgaWYgKHRoaXMuc2xpY2Uuc2l6ZSlcbiAgICAgICAgICAgIGpzb24uc2xpY2UgPSB0aGlzLnNsaWNlLnRvSlNPTigpO1xuICAgICAgICBpZiAodGhpcy5zdHJ1Y3R1cmUpXG4gICAgICAgICAgICBqc29uLnN0cnVjdHVyZSA9IHRydWU7XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHN0YXRpYyBmcm9tSlNPTihzY2hlbWEsIGpzb24pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uLmZyb20gIT0gXCJudW1iZXJcIiB8fCB0eXBlb2YganNvbi50byAhPSBcIm51bWJlclwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIGlucHV0IGZvciBSZXBsYWNlU3RlcC5mcm9tSlNPTlwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXBsYWNlU3RlcChqc29uLmZyb20sIGpzb24udG8sIFNsaWNlLmZyb21KU09OKHNjaGVtYSwganNvbi5zbGljZSksICEhanNvbi5zdHJ1Y3R1cmUpO1xuICAgIH1cbn1cblN0ZXAuanNvbklEKFwicmVwbGFjZVwiLCBSZXBsYWNlU3RlcCk7XG4vKipcblJlcGxhY2UgYSBwYXJ0IG9mIHRoZSBkb2N1bWVudCB3aXRoIGEgc2xpY2Ugb2YgY29udGVudCwgYnV0XG5wcmVzZXJ2ZSBhIHJhbmdlIG9mIHRoZSByZXBsYWNlZCBjb250ZW50IGJ5IG1vdmluZyBpdCBpbnRvIHRoZVxuc2xpY2UuXG4qL1xuY2xhc3MgUmVwbGFjZUFyb3VuZFN0ZXAgZXh0ZW5kcyBTdGVwIHtcbiAgICAvKipcbiAgICBDcmVhdGUgYSByZXBsYWNlLWFyb3VuZCBzdGVwIHdpdGggdGhlIGdpdmVuIHJhbmdlIGFuZCBnYXAuXG4gICAgYGluc2VydGAgc2hvdWxkIGJlIHRoZSBwb2ludCBpbiB0aGUgc2xpY2UgaW50byB3aGljaCB0aGUgY29udGVudFxuICAgIG9mIHRoZSBnYXAgc2hvdWxkIGJlIG1vdmVkLiBgc3RydWN0dXJlYCBoYXMgdGhlIHNhbWUgbWVhbmluZyBhc1xuICAgIGl0IGhhcyBpbiB0aGUgW2BSZXBsYWNlU3RlcGBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyN0cmFuc2Zvcm0uUmVwbGFjZVN0ZXApIGNsYXNzLlxuICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXBsYWNlZCByYW5nZS5cbiAgICAqL1xuICAgIGZyb20sIFxuICAgIC8qKlxuICAgIFRoZSBlbmQgcG9zaXRpb24gb2YgdGhlIHJlcGxhY2VkIHJhbmdlLlxuICAgICovXG4gICAgdG8sIFxuICAgIC8qKlxuICAgIFRoZSBzdGFydCBvZiBwcmVzZXJ2ZWQgcmFuZ2UuXG4gICAgKi9cbiAgICBnYXBGcm9tLCBcbiAgICAvKipcbiAgICBUaGUgZW5kIG9mIHByZXNlcnZlZCByYW5nZS5cbiAgICAqL1xuICAgIGdhcFRvLCBcbiAgICAvKipcbiAgICBUaGUgc2xpY2UgdG8gaW5zZXJ0LlxuICAgICovXG4gICAgc2xpY2UsIFxuICAgIC8qKlxuICAgIFRoZSBwb3NpdGlvbiBpbiB0aGUgc2xpY2Ugd2hlcmUgdGhlIHByZXNlcnZlZCByYW5nZSBzaG91bGQgYmVcbiAgICBpbnNlcnRlZC5cbiAgICAqL1xuICAgIGluc2VydCwgXG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBzdHJ1Y3R1cmUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmZyb20gPSBmcm9tO1xuICAgICAgICB0aGlzLnRvID0gdG87XG4gICAgICAgIHRoaXMuZ2FwRnJvbSA9IGdhcEZyb207XG4gICAgICAgIHRoaXMuZ2FwVG8gPSBnYXBUbztcbiAgICAgICAgdGhpcy5zbGljZSA9IHNsaWNlO1xuICAgICAgICB0aGlzLmluc2VydCA9IGluc2VydDtcbiAgICAgICAgdGhpcy5zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7XG4gICAgfVxuICAgIGFwcGx5KGRvYykge1xuICAgICAgICBpZiAodGhpcy5zdHJ1Y3R1cmUgJiYgKGNvbnRlbnRCZXR3ZWVuKGRvYywgdGhpcy5mcm9tLCB0aGlzLmdhcEZyb20pIHx8XG4gICAgICAgICAgICBjb250ZW50QmV0d2Vlbihkb2MsIHRoaXMuZ2FwVG8sIHRoaXMudG8pKSlcbiAgICAgICAgICAgIHJldHVybiBTdGVwUmVzdWx0LmZhaWwoXCJTdHJ1Y3R1cmUgZ2FwLXJlcGxhY2Ugd291bGQgb3ZlcndyaXRlIGNvbnRlbnRcIik7XG4gICAgICAgIGxldCBnYXAgPSBkb2Muc2xpY2UodGhpcy5nYXBGcm9tLCB0aGlzLmdhcFRvKTtcbiAgICAgICAgaWYgKGdhcC5vcGVuU3RhcnQgfHwgZ2FwLm9wZW5FbmQpXG4gICAgICAgICAgICByZXR1cm4gU3RlcFJlc3VsdC5mYWlsKFwiR2FwIGlzIG5vdCBhIGZsYXQgcmFuZ2VcIik7XG4gICAgICAgIGxldCBpbnNlcnRlZCA9IHRoaXMuc2xpY2UuaW5zZXJ0QXQodGhpcy5pbnNlcnQsIGdhcC5jb250ZW50KTtcbiAgICAgICAgaWYgKCFpbnNlcnRlZClcbiAgICAgICAgICAgIHJldHVybiBTdGVwUmVzdWx0LmZhaWwoXCJDb250ZW50IGRvZXMgbm90IGZpdCBpbiBnYXBcIik7XG4gICAgICAgIHJldHVybiBTdGVwUmVzdWx0LmZyb21SZXBsYWNlKGRvYywgdGhpcy5mcm9tLCB0aGlzLnRvLCBpbnNlcnRlZCk7XG4gICAgfVxuICAgIGdldE1hcCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdGVwTWFwKFt0aGlzLmZyb20sIHRoaXMuZ2FwRnJvbSAtIHRoaXMuZnJvbSwgdGhpcy5pbnNlcnQsXG4gICAgICAgICAgICB0aGlzLmdhcFRvLCB0aGlzLnRvIC0gdGhpcy5nYXBUbywgdGhpcy5zbGljZS5zaXplIC0gdGhpcy5pbnNlcnRdKTtcbiAgICB9XG4gICAgaW52ZXJ0KGRvYykge1xuICAgICAgICBsZXQgZ2FwID0gdGhpcy5nYXBUbyAtIHRoaXMuZ2FwRnJvbTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXBsYWNlQXJvdW5kU3RlcCh0aGlzLmZyb20sIHRoaXMuZnJvbSArIHRoaXMuc2xpY2Uuc2l6ZSArIGdhcCwgdGhpcy5mcm9tICsgdGhpcy5pbnNlcnQsIHRoaXMuZnJvbSArIHRoaXMuaW5zZXJ0ICsgZ2FwLCBkb2Muc2xpY2UodGhpcy5mcm9tLCB0aGlzLnRvKS5yZW1vdmVCZXR3ZWVuKHRoaXMuZ2FwRnJvbSAtIHRoaXMuZnJvbSwgdGhpcy5nYXBUbyAtIHRoaXMuZnJvbSksIHRoaXMuZ2FwRnJvbSAtIHRoaXMuZnJvbSwgdGhpcy5zdHJ1Y3R1cmUpO1xuICAgIH1cbiAgICBtYXAobWFwcGluZykge1xuICAgICAgICBsZXQgZnJvbSA9IG1hcHBpbmcubWFwUmVzdWx0KHRoaXMuZnJvbSwgMSksIHRvID0gbWFwcGluZy5tYXBSZXN1bHQodGhpcy50bywgLTEpO1xuICAgICAgICBsZXQgZ2FwRnJvbSA9IG1hcHBpbmcubWFwKHRoaXMuZ2FwRnJvbSwgLTEpLCBnYXBUbyA9IG1hcHBpbmcubWFwKHRoaXMuZ2FwVG8sIDEpO1xuICAgICAgICBpZiAoKGZyb20uZGVsZXRlZEFjcm9zcyAmJiB0by5kZWxldGVkQWNyb3NzKSB8fCBnYXBGcm9tIDwgZnJvbS5wb3MgfHwgZ2FwVG8gPiB0by5wb3MpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXBsYWNlQXJvdW5kU3RlcChmcm9tLnBvcywgdG8ucG9zLCBnYXBGcm9tLCBnYXBUbywgdGhpcy5zbGljZSwgdGhpcy5pbnNlcnQsIHRoaXMuc3RydWN0dXJlKTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBsZXQganNvbiA9IHsgc3RlcFR5cGU6IFwicmVwbGFjZUFyb3VuZFwiLCBmcm9tOiB0aGlzLmZyb20sIHRvOiB0aGlzLnRvLFxuICAgICAgICAgICAgZ2FwRnJvbTogdGhpcy5nYXBGcm9tLCBnYXBUbzogdGhpcy5nYXBUbywgaW5zZXJ0OiB0aGlzLmluc2VydCB9O1xuICAgICAgICBpZiAodGhpcy5zbGljZS5zaXplKVxuICAgICAgICAgICAganNvbi5zbGljZSA9IHRoaXMuc2xpY2UudG9KU09OKCk7XG4gICAgICAgIGlmICh0aGlzLnN0cnVjdHVyZSlcbiAgICAgICAgICAgIGpzb24uc3RydWN0dXJlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgc3RhdGljIGZyb21KU09OKHNjaGVtYSwganNvbikge1xuICAgICAgICBpZiAodHlwZW9mIGpzb24uZnJvbSAhPSBcIm51bWJlclwiIHx8IHR5cGVvZiBqc29uLnRvICE9IFwibnVtYmVyXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBqc29uLmdhcEZyb20gIT0gXCJudW1iZXJcIiB8fCB0eXBlb2YganNvbi5nYXBUbyAhPSBcIm51bWJlclwiIHx8IHR5cGVvZiBqc29uLmluc2VydCAhPSBcIm51bWJlclwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIGlucHV0IGZvciBSZXBsYWNlQXJvdW5kU3RlcC5mcm9tSlNPTlwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXBsYWNlQXJvdW5kU3RlcChqc29uLmZyb20sIGpzb24udG8sIGpzb24uZ2FwRnJvbSwganNvbi5nYXBUbywgU2xpY2UuZnJvbUpTT04oc2NoZW1hLCBqc29uLnNsaWNlKSwganNvbi5pbnNlcnQsICEhanNvbi5zdHJ1Y3R1cmUpO1xuICAgIH1cbn1cblN0ZXAuanNvbklEKFwicmVwbGFjZUFyb3VuZFwiLCBSZXBsYWNlQXJvdW5kU3RlcCk7XG5mdW5jdGlvbiBjb250ZW50QmV0d2Vlbihkb2MsIGZyb20sIHRvKSB7XG4gICAgbGV0ICRmcm9tID0gZG9jLnJlc29sdmUoZnJvbSksIGRpc3QgPSB0byAtIGZyb20sIGRlcHRoID0gJGZyb20uZGVwdGg7XG4gICAgd2hpbGUgKGRpc3QgPiAwICYmIGRlcHRoID4gMCAmJiAkZnJvbS5pbmRleEFmdGVyKGRlcHRoKSA9PSAkZnJvbS5ub2RlKGRlcHRoKS5jaGlsZENvdW50KSB7XG4gICAgICAgIGRlcHRoLS07XG4gICAgICAgIGRpc3QtLTtcbiAgICB9XG4gICAgaWYgKGRpc3QgPiAwKSB7XG4gICAgICAgIGxldCBuZXh0ID0gJGZyb20ubm9kZShkZXB0aCkubWF5YmVDaGlsZCgkZnJvbS5pbmRleEFmdGVyKGRlcHRoKSk7XG4gICAgICAgIHdoaWxlIChkaXN0ID4gMCkge1xuICAgICAgICAgICAgaWYgKCFuZXh0IHx8IG5leHQuaXNMZWFmKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgbmV4dCA9IG5leHQuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGRpc3QtLTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGFkZE1hcmsodHIsIGZyb20sIHRvLCBtYXJrKSB7XG4gICAgbGV0IHJlbW92ZWQgPSBbXSwgYWRkZWQgPSBbXTtcbiAgICBsZXQgcmVtb3ZpbmcsIGFkZGluZztcbiAgICB0ci5kb2Mubm9kZXNCZXR3ZWVuKGZyb20sIHRvLCAobm9kZSwgcG9zLCBwYXJlbnQpID0+IHtcbiAgICAgICAgaWYgKCFub2RlLmlzSW5saW5lKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBsZXQgbWFya3MgPSBub2RlLm1hcmtzO1xuICAgICAgICBpZiAoIW1hcmsuaXNJblNldChtYXJrcykgJiYgcGFyZW50LnR5cGUuYWxsb3dzTWFya1R5cGUobWFyay50eXBlKSkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gTWF0aC5tYXgocG9zLCBmcm9tKSwgZW5kID0gTWF0aC5taW4ocG9zICsgbm9kZS5ub2RlU2l6ZSwgdG8pO1xuICAgICAgICAgICAgbGV0IG5ld1NldCA9IG1hcmsuYWRkVG9TZXQobWFya3MpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXJrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghbWFya3NbaV0uaXNJblNldChuZXdTZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmluZyAmJiByZW1vdmluZy50byA9PSBzdGFydCAmJiByZW1vdmluZy5tYXJrLmVxKG1hcmtzW2ldKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92aW5nLnRvID0gZW5kO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2gocmVtb3ZpbmcgPSBuZXcgUmVtb3ZlTWFya1N0ZXAoc3RhcnQsIGVuZCwgbWFya3NbaV0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWRkaW5nICYmIGFkZGluZy50byA9PSBzdGFydClcbiAgICAgICAgICAgICAgICBhZGRpbmcudG8gPSBlbmQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYWRkZWQucHVzaChhZGRpbmcgPSBuZXcgQWRkTWFya1N0ZXAoc3RhcnQsIGVuZCwgbWFyaykpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmVtb3ZlZC5mb3JFYWNoKHMgPT4gdHIuc3RlcChzKSk7XG4gICAgYWRkZWQuZm9yRWFjaChzID0+IHRyLnN0ZXAocykpO1xufVxuZnVuY3Rpb24gcmVtb3ZlTWFyayh0ciwgZnJvbSwgdG8sIG1hcmspIHtcbiAgICBsZXQgbWF0Y2hlZCA9IFtdLCBzdGVwID0gMDtcbiAgICB0ci5kb2Mubm9kZXNCZXR3ZWVuKGZyb20sIHRvLCAobm9kZSwgcG9zKSA9PiB7XG4gICAgICAgIGlmICghbm9kZS5pc0lubGluZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc3RlcCsrO1xuICAgICAgICBsZXQgdG9SZW1vdmUgPSBudWxsO1xuICAgICAgICBpZiAobWFyayBpbnN0YW5jZW9mIE1hcmtUeXBlKSB7XG4gICAgICAgICAgICBsZXQgc2V0ID0gbm9kZS5tYXJrcywgZm91bmQ7XG4gICAgICAgICAgICB3aGlsZSAoZm91bmQgPSBtYXJrLmlzSW5TZXQoc2V0KSkge1xuICAgICAgICAgICAgICAgICh0b1JlbW92ZSB8fCAodG9SZW1vdmUgPSBbXSkpLnB1c2goZm91bmQpO1xuICAgICAgICAgICAgICAgIHNldCA9IGZvdW5kLnJlbW92ZUZyb21TZXQoc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXJrKSB7XG4gICAgICAgICAgICBpZiAobWFyay5pc0luU2V0KG5vZGUubWFya3MpKVxuICAgICAgICAgICAgICAgIHRvUmVtb3ZlID0gW21hcmtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdG9SZW1vdmUgPSBub2RlLm1hcmtzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b1JlbW92ZSAmJiB0b1JlbW92ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBlbmQgPSBNYXRoLm1pbihwb3MgKyBub2RlLm5vZGVTaXplLCB0byk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvUmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN0eWxlID0gdG9SZW1vdmVbaV0sIGZvdW5kO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0Y2hlZC5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbSA9IG1hdGNoZWRbal07XG4gICAgICAgICAgICAgICAgICAgIGlmIChtLnN0ZXAgPT0gc3RlcCAtIDEgJiYgc3R5bGUuZXEobWF0Y2hlZFtqXS5zdHlsZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3VuZC50byA9IGVuZDtcbiAgICAgICAgICAgICAgICAgICAgZm91bmQuc3RlcCA9IHN0ZXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLnB1c2goeyBzdHlsZSwgZnJvbTogTWF0aC5tYXgocG9zLCBmcm9tKSwgdG86IGVuZCwgc3RlcCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBtYXRjaGVkLmZvckVhY2gobSA9PiB0ci5zdGVwKG5ldyBSZW1vdmVNYXJrU3RlcChtLmZyb20sIG0udG8sIG0uc3R5bGUpKSk7XG59XG5mdW5jdGlvbiBjbGVhckluY29tcGF0aWJsZSh0ciwgcG9zLCBwYXJlbnRUeXBlLCBtYXRjaCA9IHBhcmVudFR5cGUuY29udGVudE1hdGNoKSB7XG4gICAgbGV0IG5vZGUgPSB0ci5kb2Mubm9kZUF0KHBvcyk7XG4gICAgbGV0IGRlbFN0ZXBzID0gW10sIGN1ciA9IHBvcyArIDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmNoaWxkQ291bnQ7IGkrKykge1xuICAgICAgICBsZXQgY2hpbGQgPSBub2RlLmNoaWxkKGkpLCBlbmQgPSBjdXIgKyBjaGlsZC5ub2RlU2l6ZTtcbiAgICAgICAgbGV0IGFsbG93ZWQgPSBtYXRjaC5tYXRjaFR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgIGlmICghYWxsb3dlZCkge1xuICAgICAgICAgICAgZGVsU3RlcHMucHVzaChuZXcgUmVwbGFjZVN0ZXAoY3VyLCBlbmQsIFNsaWNlLmVtcHR5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtYXRjaCA9IGFsbG93ZWQ7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNoaWxkLm1hcmtzLmxlbmd0aDsgaisrKVxuICAgICAgICAgICAgICAgIGlmICghcGFyZW50VHlwZS5hbGxvd3NNYXJrVHlwZShjaGlsZC5tYXJrc1tqXS50eXBlKSlcbiAgICAgICAgICAgICAgICAgICAgdHIuc3RlcChuZXcgUmVtb3ZlTWFya1N0ZXAoY3VyLCBlbmQsIGNoaWxkLm1hcmtzW2pdKSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VyID0gZW5kO1xuICAgIH1cbiAgICBpZiAoIW1hdGNoLnZhbGlkRW5kKSB7XG4gICAgICAgIGxldCBmaWxsID0gbWF0Y2guZmlsbEJlZm9yZShGcmFnbWVudC5lbXB0eSwgdHJ1ZSk7XG4gICAgICAgIHRyLnJlcGxhY2UoY3VyLCBjdXIsIG5ldyBTbGljZShmaWxsLCAwLCAwKSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBkZWxTdGVwcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcbiAgICAgICAgdHIuc3RlcChkZWxTdGVwc1tpXSk7XG59XG5cbmZ1bmN0aW9uIGNhbkN1dChub2RlLCBzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChzdGFydCA9PSAwIHx8IG5vZGUuY2FuUmVwbGFjZShzdGFydCwgbm9kZS5jaGlsZENvdW50KSkgJiZcbiAgICAgICAgKGVuZCA9PSBub2RlLmNoaWxkQ291bnQgfHwgbm9kZS5jYW5SZXBsYWNlKDAsIGVuZCkpO1xufVxuLyoqXG5UcnkgdG8gZmluZCBhIHRhcmdldCBkZXB0aCB0byB3aGljaCB0aGUgY29udGVudCBpbiB0aGUgZ2l2ZW4gcmFuZ2VcbmNhbiBiZSBsaWZ0ZWQuIFdpbGwgbm90IGdvIGFjcm9zc1xuW2lzb2xhdGluZ10oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI21vZGVsLk5vZGVTcGVjLmlzb2xhdGluZykgcGFyZW50IG5vZGVzLlxuKi9cbmZ1bmN0aW9uIGxpZnRUYXJnZXQocmFuZ2UpIHtcbiAgICBsZXQgcGFyZW50ID0gcmFuZ2UucGFyZW50O1xuICAgIGxldCBjb250ZW50ID0gcGFyZW50LmNvbnRlbnQuY3V0QnlJbmRleChyYW5nZS5zdGFydEluZGV4LCByYW5nZS5lbmRJbmRleCk7XG4gICAgZm9yIChsZXQgZGVwdGggPSByYW5nZS5kZXB0aDs7IC0tZGVwdGgpIHtcbiAgICAgICAgbGV0IG5vZGUgPSByYW5nZS4kZnJvbS5ub2RlKGRlcHRoKTtcbiAgICAgICAgbGV0IGluZGV4ID0gcmFuZ2UuJGZyb20uaW5kZXgoZGVwdGgpLCBlbmRJbmRleCA9IHJhbmdlLiR0by5pbmRleEFmdGVyKGRlcHRoKTtcbiAgICAgICAgaWYgKGRlcHRoIDwgcmFuZ2UuZGVwdGggJiYgbm9kZS5jYW5SZXBsYWNlKGluZGV4LCBlbmRJbmRleCwgY29udGVudCkpXG4gICAgICAgICAgICByZXR1cm4gZGVwdGg7XG4gICAgICAgIGlmIChkZXB0aCA9PSAwIHx8IG5vZGUudHlwZS5zcGVjLmlzb2xhdGluZyB8fCAhY2FuQ3V0KG5vZGUsIGluZGV4LCBlbmRJbmRleCkpXG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBsaWZ0KHRyLCByYW5nZSwgdGFyZ2V0KSB7XG4gICAgbGV0IHsgJGZyb20sICR0bywgZGVwdGggfSA9IHJhbmdlO1xuICAgIGxldCBnYXBTdGFydCA9ICRmcm9tLmJlZm9yZShkZXB0aCArIDEpLCBnYXBFbmQgPSAkdG8uYWZ0ZXIoZGVwdGggKyAxKTtcbiAgICBsZXQgc3RhcnQgPSBnYXBTdGFydCwgZW5kID0gZ2FwRW5kO1xuICAgIGxldCBiZWZvcmUgPSBGcmFnbWVudC5lbXB0eSwgb3BlblN0YXJ0ID0gMDtcbiAgICBmb3IgKGxldCBkID0gZGVwdGgsIHNwbGl0dGluZyA9IGZhbHNlOyBkID4gdGFyZ2V0OyBkLS0pXG4gICAgICAgIGlmIChzcGxpdHRpbmcgfHwgJGZyb20uaW5kZXgoZCkgPiAwKSB7XG4gICAgICAgICAgICBzcGxpdHRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgYmVmb3JlID0gRnJhZ21lbnQuZnJvbSgkZnJvbS5ub2RlKGQpLmNvcHkoYmVmb3JlKSk7XG4gICAgICAgICAgICBvcGVuU3RhcnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN0YXJ0LS07XG4gICAgICAgIH1cbiAgICBsZXQgYWZ0ZXIgPSBGcmFnbWVudC5lbXB0eSwgb3BlbkVuZCA9IDA7XG4gICAgZm9yIChsZXQgZCA9IGRlcHRoLCBzcGxpdHRpbmcgPSBmYWxzZTsgZCA+IHRhcmdldDsgZC0tKVxuICAgICAgICBpZiAoc3BsaXR0aW5nIHx8ICR0by5hZnRlcihkICsgMSkgPCAkdG8uZW5kKGQpKSB7XG4gICAgICAgICAgICBzcGxpdHRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgYWZ0ZXIgPSBGcmFnbWVudC5mcm9tKCR0by5ub2RlKGQpLmNvcHkoYWZ0ZXIpKTtcbiAgICAgICAgICAgIG9wZW5FbmQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVuZCsrO1xuICAgICAgICB9XG4gICAgdHIuc3RlcChuZXcgUmVwbGFjZUFyb3VuZFN0ZXAoc3RhcnQsIGVuZCwgZ2FwU3RhcnQsIGdhcEVuZCwgbmV3IFNsaWNlKGJlZm9yZS5hcHBlbmQoYWZ0ZXIpLCBvcGVuU3RhcnQsIG9wZW5FbmQpLCBiZWZvcmUuc2l6ZSAtIG9wZW5TdGFydCwgdHJ1ZSkpO1xufVxuLyoqXG5UcnkgdG8gZmluZCBhIHZhbGlkIHdheSB0byB3cmFwIHRoZSBjb250ZW50IGluIHRoZSBnaXZlbiByYW5nZSBpbiBhXG5ub2RlIG9mIHRoZSBnaXZlbiB0eXBlLiBNYXkgaW50cm9kdWNlIGV4dHJhIG5vZGVzIGFyb3VuZCBhbmQgaW5zaWRlXG50aGUgd3JhcHBlciBub2RlLCBpZiBuZWNlc3NhcnkuIFJldHVybnMgbnVsbCBpZiBubyB2YWxpZCB3cmFwcGluZ1xuY291bGQgYmUgZm91bmQuIFdoZW4gYGlubmVyUmFuZ2VgIGlzIGdpdmVuLCB0aGF0IHJhbmdlJ3MgY29udGVudCBpc1xudXNlZCBhcyB0aGUgY29udGVudCB0byBmaXQgaW50byB0aGUgd3JhcHBpbmcsIGluc3RlYWQgb2YgdGhlXG5jb250ZW50IG9mIGByYW5nZWAuXG4qL1xuZnVuY3Rpb24gZmluZFdyYXBwaW5nKHJhbmdlLCBub2RlVHlwZSwgYXR0cnMgPSBudWxsLCBpbm5lclJhbmdlID0gcmFuZ2UpIHtcbiAgICBsZXQgYXJvdW5kID0gZmluZFdyYXBwaW5nT3V0c2lkZShyYW5nZSwgbm9kZVR5cGUpO1xuICAgIGxldCBpbm5lciA9IGFyb3VuZCAmJiBmaW5kV3JhcHBpbmdJbnNpZGUoaW5uZXJSYW5nZSwgbm9kZVR5cGUpO1xuICAgIGlmICghaW5uZXIpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiBhcm91bmQubWFwKHdpdGhBdHRycylcbiAgICAgICAgLmNvbmNhdCh7IHR5cGU6IG5vZGVUeXBlLCBhdHRycyB9KS5jb25jYXQoaW5uZXIubWFwKHdpdGhBdHRycykpO1xufVxuZnVuY3Rpb24gd2l0aEF0dHJzKHR5cGUpIHsgcmV0dXJuIHsgdHlwZSwgYXR0cnM6IG51bGwgfTsgfVxuZnVuY3Rpb24gZmluZFdyYXBwaW5nT3V0c2lkZShyYW5nZSwgdHlwZSkge1xuICAgIGxldCB7IHBhcmVudCwgc3RhcnRJbmRleCwgZW5kSW5kZXggfSA9IHJhbmdlO1xuICAgIGxldCBhcm91bmQgPSBwYXJlbnQuY29udGVudE1hdGNoQXQoc3RhcnRJbmRleCkuZmluZFdyYXBwaW5nKHR5cGUpO1xuICAgIGlmICghYXJvdW5kKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBsZXQgb3V0ZXIgPSBhcm91bmQubGVuZ3RoID8gYXJvdW5kWzBdIDogdHlwZTtcbiAgICByZXR1cm4gcGFyZW50LmNhblJlcGxhY2VXaXRoKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBvdXRlcikgPyBhcm91bmQgOiBudWxsO1xufVxuZnVuY3Rpb24gZmluZFdyYXBwaW5nSW5zaWRlKHJhbmdlLCB0eXBlKSB7XG4gICAgbGV0IHsgcGFyZW50LCBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gcmFuZ2U7XG4gICAgbGV0IGlubmVyID0gcGFyZW50LmNoaWxkKHN0YXJ0SW5kZXgpO1xuICAgIGxldCBpbnNpZGUgPSB0eXBlLmNvbnRlbnRNYXRjaC5maW5kV3JhcHBpbmcoaW5uZXIudHlwZSk7XG4gICAgaWYgKCFpbnNpZGUpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGxldCBsYXN0VHlwZSA9IGluc2lkZS5sZW5ndGggPyBpbnNpZGVbaW5zaWRlLmxlbmd0aCAtIDFdIDogdHlwZTtcbiAgICBsZXQgaW5uZXJNYXRjaCA9IGxhc3RUeXBlLmNvbnRlbnRNYXRjaDtcbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaW5uZXJNYXRjaCAmJiBpIDwgZW5kSW5kZXg7IGkrKylcbiAgICAgICAgaW5uZXJNYXRjaCA9IGlubmVyTWF0Y2gubWF0Y2hUeXBlKHBhcmVudC5jaGlsZChpKS50eXBlKTtcbiAgICBpZiAoIWlubmVyTWF0Y2ggfHwgIWlubmVyTWF0Y2gudmFsaWRFbmQpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiBpbnNpZGU7XG59XG5mdW5jdGlvbiB3cmFwKHRyLCByYW5nZSwgd3JhcHBlcnMpIHtcbiAgICBsZXQgY29udGVudCA9IEZyYWdtZW50LmVtcHR5O1xuICAgIGZvciAobGV0IGkgPSB3cmFwcGVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAoY29udGVudC5zaXplKSB7XG4gICAgICAgICAgICBsZXQgbWF0Y2ggPSB3cmFwcGVyc1tpXS50eXBlLmNvbnRlbnRNYXRjaC5tYXRjaEZyYWdtZW50KGNvbnRlbnQpO1xuICAgICAgICAgICAgaWYgKCFtYXRjaCB8fCAhbWF0Y2gudmFsaWRFbmQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJXcmFwcGVyIHR5cGUgZ2l2ZW4gdG8gVHJhbnNmb3JtLndyYXAgZG9lcyBub3QgZm9ybSB2YWxpZCBjb250ZW50IG9mIGl0cyBwYXJlbnQgd3JhcHBlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZW50ID0gRnJhZ21lbnQuZnJvbSh3cmFwcGVyc1tpXS50eXBlLmNyZWF0ZSh3cmFwcGVyc1tpXS5hdHRycywgY29udGVudCkpO1xuICAgIH1cbiAgICBsZXQgc3RhcnQgPSByYW5nZS5zdGFydCwgZW5kID0gcmFuZ2UuZW5kO1xuICAgIHRyLnN0ZXAobmV3IFJlcGxhY2VBcm91bmRTdGVwKHN0YXJ0LCBlbmQsIHN0YXJ0LCBlbmQsIG5ldyBTbGljZShjb250ZW50LCAwLCAwKSwgd3JhcHBlcnMubGVuZ3RoLCB0cnVlKSk7XG59XG5mdW5jdGlvbiBzZXRCbG9ja1R5cGUodHIsIGZyb20sIHRvLCB0eXBlLCBhdHRycykge1xuICAgIGlmICghdHlwZS5pc1RleHRibG9jaylcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUeXBlIGdpdmVuIHRvIHNldEJsb2NrVHlwZSBzaG91bGQgYmUgYSB0ZXh0YmxvY2tcIik7XG4gICAgbGV0IG1hcEZyb20gPSB0ci5zdGVwcy5sZW5ndGg7XG4gICAgdHIuZG9jLm5vZGVzQmV0d2Vlbihmcm9tLCB0bywgKG5vZGUsIHBvcykgPT4ge1xuICAgICAgICBpZiAobm9kZS5pc1RleHRibG9jayAmJiAhbm9kZS5oYXNNYXJrdXAodHlwZSwgYXR0cnMpICYmIGNhbkNoYW5nZVR5cGUodHIuZG9jLCB0ci5tYXBwaW5nLnNsaWNlKG1hcEZyb20pLm1hcChwb3MpLCB0eXBlKSkge1xuICAgICAgICAgICAgLy8gRW5zdXJlIGFsbCBtYXJrdXAgdGhhdCBpc24ndCBhbGxvd2VkIGluIHRoZSBuZXcgbm9kZSB0eXBlIGlzIGNsZWFyZWRcbiAgICAgICAgICAgIHRyLmNsZWFySW5jb21wYXRpYmxlKHRyLm1hcHBpbmcuc2xpY2UobWFwRnJvbSkubWFwKHBvcywgMSksIHR5cGUpO1xuICAgICAgICAgICAgbGV0IG1hcHBpbmcgPSB0ci5tYXBwaW5nLnNsaWNlKG1hcEZyb20pO1xuICAgICAgICAgICAgbGV0IHN0YXJ0TSA9IG1hcHBpbmcubWFwKHBvcywgMSksIGVuZE0gPSBtYXBwaW5nLm1hcChwb3MgKyBub2RlLm5vZGVTaXplLCAxKTtcbiAgICAgICAgICAgIHRyLnN0ZXAobmV3IFJlcGxhY2VBcm91bmRTdGVwKHN0YXJ0TSwgZW5kTSwgc3RhcnRNICsgMSwgZW5kTSAtIDEsIG5ldyBTbGljZShGcmFnbWVudC5mcm9tKHR5cGUuY3JlYXRlKGF0dHJzLCBudWxsLCBub2RlLm1hcmtzKSksIDAsIDApLCAxLCB0cnVlKSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGNhbkNoYW5nZVR5cGUoZG9jLCBwb3MsIHR5cGUpIHtcbiAgICBsZXQgJHBvcyA9IGRvYy5yZXNvbHZlKHBvcyksIGluZGV4ID0gJHBvcy5pbmRleCgpO1xuICAgIHJldHVybiAkcG9zLnBhcmVudC5jYW5SZXBsYWNlV2l0aChpbmRleCwgaW5kZXggKyAxLCB0eXBlKTtcbn1cbi8qKlxuQ2hhbmdlIHRoZSB0eXBlLCBhdHRyaWJ1dGVzLCBhbmQvb3IgbWFya3Mgb2YgdGhlIG5vZGUgYXQgYHBvc2AuXG5XaGVuIGB0eXBlYCBpc24ndCBnaXZlbiwgdGhlIGV4aXN0aW5nIG5vZGUgdHlwZSBpcyBwcmVzZXJ2ZWQsXG4qL1xuZnVuY3Rpb24gc2V0Tm9kZU1hcmt1cCh0ciwgcG9zLCB0eXBlLCBhdHRycywgbWFya3MpIHtcbiAgICBsZXQgbm9kZSA9IHRyLmRvYy5ub2RlQXQocG9zKTtcbiAgICBpZiAoIW5vZGUpXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTm8gbm9kZSBhdCBnaXZlbiBwb3NpdGlvblwiKTtcbiAgICBpZiAoIXR5cGUpXG4gICAgICAgIHR5cGUgPSBub2RlLnR5cGU7XG4gICAgbGV0IG5ld05vZGUgPSB0eXBlLmNyZWF0ZShhdHRycywgbnVsbCwgbWFya3MgfHwgbm9kZS5tYXJrcyk7XG4gICAgaWYgKG5vZGUuaXNMZWFmKVxuICAgICAgICByZXR1cm4gdHIucmVwbGFjZVdpdGgocG9zLCBwb3MgKyBub2RlLm5vZGVTaXplLCBuZXdOb2RlKTtcbiAgICBpZiAoIXR5cGUudmFsaWRDb250ZW50KG5vZGUuY29udGVudCkpXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBjb250ZW50IGZvciBub2RlIHR5cGUgXCIgKyB0eXBlLm5hbWUpO1xuICAgIHRyLnN0ZXAobmV3IFJlcGxhY2VBcm91bmRTdGVwKHBvcywgcG9zICsgbm9kZS5ub2RlU2l6ZSwgcG9zICsgMSwgcG9zICsgbm9kZS5ub2RlU2l6ZSAtIDEsIG5ldyBTbGljZShGcmFnbWVudC5mcm9tKG5ld05vZGUpLCAwLCAwKSwgMSwgdHJ1ZSkpO1xufVxuLyoqXG5DaGVjayB3aGV0aGVyIHNwbGl0dGluZyBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gaXMgYWxsb3dlZC5cbiovXG5mdW5jdGlvbiBjYW5TcGxpdChkb2MsIHBvcywgZGVwdGggPSAxLCB0eXBlc0FmdGVyKSB7XG4gICAgbGV0ICRwb3MgPSBkb2MucmVzb2x2ZShwb3MpLCBiYXNlID0gJHBvcy5kZXB0aCAtIGRlcHRoO1xuICAgIGxldCBpbm5lclR5cGUgPSAodHlwZXNBZnRlciAmJiB0eXBlc0FmdGVyW3R5cGVzQWZ0ZXIubGVuZ3RoIC0gMV0pIHx8ICRwb3MucGFyZW50O1xuICAgIGlmIChiYXNlIDwgMCB8fCAkcG9zLnBhcmVudC50eXBlLnNwZWMuaXNvbGF0aW5nIHx8XG4gICAgICAgICEkcG9zLnBhcmVudC5jYW5SZXBsYWNlKCRwb3MuaW5kZXgoKSwgJHBvcy5wYXJlbnQuY2hpbGRDb3VudCkgfHxcbiAgICAgICAgIWlubmVyVHlwZS50eXBlLnZhbGlkQ29udGVudCgkcG9zLnBhcmVudC5jb250ZW50LmN1dEJ5SW5kZXgoJHBvcy5pbmRleCgpLCAkcG9zLnBhcmVudC5jaGlsZENvdW50KSkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBkID0gJHBvcy5kZXB0aCAtIDEsIGkgPSBkZXB0aCAtIDI7IGQgPiBiYXNlOyBkLS0sIGktLSkge1xuICAgICAgICBsZXQgbm9kZSA9ICRwb3Mubm9kZShkKSwgaW5kZXggPSAkcG9zLmluZGV4KGQpO1xuICAgICAgICBpZiAobm9kZS50eXBlLnNwZWMuaXNvbGF0aW5nKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBsZXQgcmVzdCA9IG5vZGUuY29udGVudC5jdXRCeUluZGV4KGluZGV4LCBub2RlLmNoaWxkQ291bnQpO1xuICAgICAgICBsZXQgYWZ0ZXIgPSAodHlwZXNBZnRlciAmJiB0eXBlc0FmdGVyW2ldKSB8fCBub2RlO1xuICAgICAgICBpZiAoYWZ0ZXIgIT0gbm9kZSlcbiAgICAgICAgICAgIHJlc3QgPSByZXN0LnJlcGxhY2VDaGlsZCgwLCBhZnRlci50eXBlLmNyZWF0ZShhZnRlci5hdHRycykpO1xuICAgICAgICBpZiAoIW5vZGUuY2FuUmVwbGFjZShpbmRleCArIDEsIG5vZGUuY2hpbGRDb3VudCkgfHwgIWFmdGVyLnR5cGUudmFsaWRDb250ZW50KHJlc3QpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgaW5kZXggPSAkcG9zLmluZGV4QWZ0ZXIoYmFzZSk7XG4gICAgbGV0IGJhc2VUeXBlID0gdHlwZXNBZnRlciAmJiB0eXBlc0FmdGVyWzBdO1xuICAgIHJldHVybiAkcG9zLm5vZGUoYmFzZSkuY2FuUmVwbGFjZVdpdGgoaW5kZXgsIGluZGV4LCBiYXNlVHlwZSA/IGJhc2VUeXBlLnR5cGUgOiAkcG9zLm5vZGUoYmFzZSArIDEpLnR5cGUpO1xufVxuZnVuY3Rpb24gc3BsaXQodHIsIHBvcywgZGVwdGggPSAxLCB0eXBlc0FmdGVyKSB7XG4gICAgbGV0ICRwb3MgPSB0ci5kb2MucmVzb2x2ZShwb3MpLCBiZWZvcmUgPSBGcmFnbWVudC5lbXB0eSwgYWZ0ZXIgPSBGcmFnbWVudC5lbXB0eTtcbiAgICBmb3IgKGxldCBkID0gJHBvcy5kZXB0aCwgZSA9ICRwb3MuZGVwdGggLSBkZXB0aCwgaSA9IGRlcHRoIC0gMTsgZCA+IGU7IGQtLSwgaS0tKSB7XG4gICAgICAgIGJlZm9yZSA9IEZyYWdtZW50LmZyb20oJHBvcy5ub2RlKGQpLmNvcHkoYmVmb3JlKSk7XG4gICAgICAgIGxldCB0eXBlQWZ0ZXIgPSB0eXBlc0FmdGVyICYmIHR5cGVzQWZ0ZXJbaV07XG4gICAgICAgIGFmdGVyID0gRnJhZ21lbnQuZnJvbSh0eXBlQWZ0ZXIgPyB0eXBlQWZ0ZXIudHlwZS5jcmVhdGUodHlwZUFmdGVyLmF0dHJzLCBhZnRlcikgOiAkcG9zLm5vZGUoZCkuY29weShhZnRlcikpO1xuICAgIH1cbiAgICB0ci5zdGVwKG5ldyBSZXBsYWNlU3RlcChwb3MsIHBvcywgbmV3IFNsaWNlKGJlZm9yZS5hcHBlbmQoYWZ0ZXIpLCBkZXB0aCwgZGVwdGgpLCB0cnVlKSk7XG59XG4vKipcblRlc3Qgd2hldGhlciB0aGUgYmxvY2tzIGJlZm9yZSBhbmQgYWZ0ZXIgYSBnaXZlbiBwb3NpdGlvbiBjYW4gYmVcbmpvaW5lZC5cbiovXG5mdW5jdGlvbiBjYW5Kb2luKGRvYywgcG9zKSB7XG4gICAgbGV0ICRwb3MgPSBkb2MucmVzb2x2ZShwb3MpLCBpbmRleCA9ICRwb3MuaW5kZXgoKTtcbiAgICByZXR1cm4gam9pbmFibGUoJHBvcy5ub2RlQmVmb3JlLCAkcG9zLm5vZGVBZnRlcikgJiZcbiAgICAgICAgJHBvcy5wYXJlbnQuY2FuUmVwbGFjZShpbmRleCwgaW5kZXggKyAxKTtcbn1cbmZ1bmN0aW9uIGpvaW5hYmxlKGEsIGIpIHtcbiAgICByZXR1cm4gISEoYSAmJiBiICYmICFhLmlzTGVhZiAmJiBhLmNhbkFwcGVuZChiKSk7XG59XG4vKipcbkZpbmQgYW4gYW5jZXN0b3Igb2YgdGhlIGdpdmVuIHBvc2l0aW9uIHRoYXQgY2FuIGJlIGpvaW5lZCB0byB0aGVcbmJsb2NrIGJlZm9yZSAob3IgYWZ0ZXIgaWYgYGRpcmAgaXMgcG9zaXRpdmUpLiBSZXR1cm5zIHRoZSBqb2luYWJsZVxucG9pbnQsIGlmIGFueS5cbiovXG5mdW5jdGlvbiBqb2luUG9pbnQoZG9jLCBwb3MsIGRpciA9IC0xKSB7XG4gICAgbGV0ICRwb3MgPSBkb2MucmVzb2x2ZShwb3MpO1xuICAgIGZvciAobGV0IGQgPSAkcG9zLmRlcHRoOzsgZC0tKSB7XG4gICAgICAgIGxldCBiZWZvcmUsIGFmdGVyLCBpbmRleCA9ICRwb3MuaW5kZXgoZCk7XG4gICAgICAgIGlmIChkID09ICRwb3MuZGVwdGgpIHtcbiAgICAgICAgICAgIGJlZm9yZSA9ICRwb3Mubm9kZUJlZm9yZTtcbiAgICAgICAgICAgIGFmdGVyID0gJHBvcy5ub2RlQWZ0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGlyID4gMCkge1xuICAgICAgICAgICAgYmVmb3JlID0gJHBvcy5ub2RlKGQgKyAxKTtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICBhZnRlciA9ICRwb3Mubm9kZShkKS5tYXliZUNoaWxkKGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGJlZm9yZSA9ICRwb3Mubm9kZShkKS5tYXliZUNoaWxkKGluZGV4IC0gMSk7XG4gICAgICAgICAgICBhZnRlciA9ICRwb3Mubm9kZShkICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJlZm9yZSAmJiAhYmVmb3JlLmlzVGV4dGJsb2NrICYmIGpvaW5hYmxlKGJlZm9yZSwgYWZ0ZXIpICYmXG4gICAgICAgICAgICAkcG9zLm5vZGUoZCkuY2FuUmVwbGFjZShpbmRleCwgaW5kZXggKyAxKSlcbiAgICAgICAgICAgIHJldHVybiBwb3M7XG4gICAgICAgIGlmIChkID09IDApXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgcG9zID0gZGlyIDwgMCA/ICRwb3MuYmVmb3JlKGQpIDogJHBvcy5hZnRlcihkKTtcbiAgICB9XG59XG5mdW5jdGlvbiBqb2luKHRyLCBwb3MsIGRlcHRoKSB7XG4gICAgbGV0IHN0ZXAgPSBuZXcgUmVwbGFjZVN0ZXAocG9zIC0gZGVwdGgsIHBvcyArIGRlcHRoLCBTbGljZS5lbXB0eSwgdHJ1ZSk7XG4gICAgdHIuc3RlcChzdGVwKTtcbn1cbi8qKlxuVHJ5IHRvIGZpbmQgYSBwb2ludCB3aGVyZSBhIG5vZGUgb2YgdGhlIGdpdmVuIHR5cGUgY2FuIGJlIGluc2VydGVkXG5uZWFyIGBwb3NgLCBieSBzZWFyY2hpbmcgdXAgdGhlIG5vZGUgaGllcmFyY2h5IHdoZW4gYHBvc2AgaXRzZWxmXG5pc24ndCBhIHZhbGlkIHBsYWNlIGJ1dCBpcyBhdCB0aGUgc3RhcnQgb3IgZW5kIG9mIGEgbm9kZS4gUmV0dXJuXG5udWxsIGlmIG5vIHBvc2l0aW9uIHdhcyBmb3VuZC5cbiovXG5mdW5jdGlvbiBpbnNlcnRQb2ludChkb2MsIHBvcywgbm9kZVR5cGUpIHtcbiAgICBsZXQgJHBvcyA9IGRvYy5yZXNvbHZlKHBvcyk7XG4gICAgaWYgKCRwb3MucGFyZW50LmNhblJlcGxhY2VXaXRoKCRwb3MuaW5kZXgoKSwgJHBvcy5pbmRleCgpLCBub2RlVHlwZSkpXG4gICAgICAgIHJldHVybiBwb3M7XG4gICAgaWYgKCRwb3MucGFyZW50T2Zmc2V0ID09IDApXG4gICAgICAgIGZvciAobGV0IGQgPSAkcG9zLmRlcHRoIC0gMTsgZCA+PSAwOyBkLS0pIHtcbiAgICAgICAgICAgIGxldCBpbmRleCA9ICRwb3MuaW5kZXgoZCk7XG4gICAgICAgICAgICBpZiAoJHBvcy5ub2RlKGQpLmNhblJlcGxhY2VXaXRoKGluZGV4LCBpbmRleCwgbm9kZVR5cGUpKVxuICAgICAgICAgICAgICAgIHJldHVybiAkcG9zLmJlZm9yZShkICsgMSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgaWYgKCRwb3MucGFyZW50T2Zmc2V0ID09ICRwb3MucGFyZW50LmNvbnRlbnQuc2l6ZSlcbiAgICAgICAgZm9yIChsZXQgZCA9ICRwb3MuZGVwdGggLSAxOyBkID49IDA7IGQtLSkge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gJHBvcy5pbmRleEFmdGVyKGQpO1xuICAgICAgICAgICAgaWYgKCRwb3Mubm9kZShkKS5jYW5SZXBsYWNlV2l0aChpbmRleCwgaW5kZXgsIG5vZGVUeXBlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gJHBvcy5hZnRlcihkICsgMSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCAkcG9zLm5vZGUoZCkuY2hpbGRDb3VudClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuLyoqXG5GaW5kcyBhIHBvc2l0aW9uIGF0IG9yIGFyb3VuZCB0aGUgZ2l2ZW4gcG9zaXRpb24gd2hlcmUgdGhlIGdpdmVuXG5zbGljZSBjYW4gYmUgaW5zZXJ0ZWQuIFdpbGwgbG9vayBhdCBwYXJlbnQgbm9kZXMnIG5lYXJlc3QgYm91bmRhcnlcbmFuZCB0cnkgdGhlcmUsIGV2ZW4gaWYgdGhlIG9yaWdpbmFsIHBvc2l0aW9uIHdhc24ndCBkaXJlY3RseSBhdCB0aGVcbnN0YXJ0IG9yIGVuZCBvZiB0aGF0IG5vZGUuIFJldHVybnMgbnVsbCB3aGVuIG5vIHBvc2l0aW9uIHdhcyBmb3VuZC5cbiovXG5mdW5jdGlvbiBkcm9wUG9pbnQoZG9jLCBwb3MsIHNsaWNlKSB7XG4gICAgbGV0ICRwb3MgPSBkb2MucmVzb2x2ZShwb3MpO1xuICAgIGlmICghc2xpY2UuY29udGVudC5zaXplKVxuICAgICAgICByZXR1cm4gcG9zO1xuICAgIGxldCBjb250ZW50ID0gc2xpY2UuY29udGVudDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlLm9wZW5TdGFydDsgaSsrKVxuICAgICAgICBjb250ZW50ID0gY29udGVudC5maXJzdENoaWxkLmNvbnRlbnQ7XG4gICAgZm9yIChsZXQgcGFzcyA9IDE7IHBhc3MgPD0gKHNsaWNlLm9wZW5TdGFydCA9PSAwICYmIHNsaWNlLnNpemUgPyAyIDogMSk7IHBhc3MrKykge1xuICAgICAgICBmb3IgKGxldCBkID0gJHBvcy5kZXB0aDsgZCA+PSAwOyBkLS0pIHtcbiAgICAgICAgICAgIGxldCBiaWFzID0gZCA9PSAkcG9zLmRlcHRoID8gMCA6ICRwb3MucG9zIDw9ICgkcG9zLnN0YXJ0KGQgKyAxKSArICRwb3MuZW5kKGQgKyAxKSkgLyAyID8gLTEgOiAxO1xuICAgICAgICAgICAgbGV0IGluc2VydFBvcyA9ICRwb3MuaW5kZXgoZCkgKyAoYmlhcyA+IDAgPyAxIDogMCk7XG4gICAgICAgICAgICBsZXQgcGFyZW50ID0gJHBvcy5ub2RlKGQpLCBmaXRzID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAocGFzcyA9PSAxKSB7XG4gICAgICAgICAgICAgICAgZml0cyA9IHBhcmVudC5jYW5SZXBsYWNlKGluc2VydFBvcywgaW5zZXJ0UG9zLCBjb250ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCB3cmFwcGluZyA9IHBhcmVudC5jb250ZW50TWF0Y2hBdChpbnNlcnRQb3MpLmZpbmRXcmFwcGluZyhjb250ZW50LmZpcnN0Q2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgZml0cyA9IHdyYXBwaW5nICYmIHBhcmVudC5jYW5SZXBsYWNlV2l0aChpbnNlcnRQb3MsIGluc2VydFBvcywgd3JhcHBpbmdbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpdHMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJpYXMgPT0gMCA/ICRwb3MucG9zIDogYmlhcyA8IDAgPyAkcG9zLmJlZm9yZShkICsgMSkgOiAkcG9zLmFmdGVyKGQgKyAxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG7igJhGaXTigJkgYSBzbGljZSBpbnRvIGEgZ2l2ZW4gcG9zaXRpb24gaW4gdGhlIGRvY3VtZW50LCBwcm9kdWNpbmcgYVxuW3N0ZXBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyN0cmFuc2Zvcm0uU3RlcCkgdGhhdCBpbnNlcnRzIGl0LiBXaWxsIHJldHVybiBudWxsIGlmXG50aGVyZSdzIG5vIG1lYW5pbmdmdWwgd2F5IHRvIGluc2VydCB0aGUgc2xpY2UgaGVyZSwgb3IgaW5zZXJ0aW5nIGl0XG53b3VsZCBiZSBhIG5vLW9wIChhbiBlbXB0eSBzbGljZSBvdmVyIGFuIGVtcHR5IHJhbmdlKS5cbiovXG5mdW5jdGlvbiByZXBsYWNlU3RlcChkb2MsIGZyb20sIHRvID0gZnJvbSwgc2xpY2UgPSBTbGljZS5lbXB0eSkge1xuICAgIGlmIChmcm9tID09IHRvICYmICFzbGljZS5zaXplKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBsZXQgJGZyb20gPSBkb2MucmVzb2x2ZShmcm9tKSwgJHRvID0gZG9jLnJlc29sdmUodG8pO1xuICAgIC8vIE9wdGltaXphdGlvbiAtLSBhdm9pZCB3b3JrIGlmIGl0J3Mgb2J2aW91cyB0aGF0IGl0J3Mgbm90IG5lZWRlZC5cbiAgICBpZiAoZml0c1RyaXZpYWxseSgkZnJvbSwgJHRvLCBzbGljZSkpXG4gICAgICAgIHJldHVybiBuZXcgUmVwbGFjZVN0ZXAoZnJvbSwgdG8sIHNsaWNlKTtcbiAgICByZXR1cm4gbmV3IEZpdHRlcigkZnJvbSwgJHRvLCBzbGljZSkuZml0KCk7XG59XG5mdW5jdGlvbiBmaXRzVHJpdmlhbGx5KCRmcm9tLCAkdG8sIHNsaWNlKSB7XG4gICAgcmV0dXJuICFzbGljZS5vcGVuU3RhcnQgJiYgIXNsaWNlLm9wZW5FbmQgJiYgJGZyb20uc3RhcnQoKSA9PSAkdG8uc3RhcnQoKSAmJlxuICAgICAgICAkZnJvbS5wYXJlbnQuY2FuUmVwbGFjZSgkZnJvbS5pbmRleCgpLCAkdG8uaW5kZXgoKSwgc2xpY2UuY29udGVudCk7XG59XG4vLyBBbGdvcml0aG0gZm9yICdwbGFjaW5nJyB0aGUgZWxlbWVudHMgb2YgYSBzbGljZSBpbnRvIGEgZ2FwOlxuLy9cbi8vIFdlIGNvbnNpZGVyIHRoZSBjb250ZW50IG9mIGVhY2ggbm9kZSB0aGF0IGlzIG9wZW4gdG8gdGhlIGxlZnQgdG8gYmVcbi8vIGluZGVwZW5kZW50bHkgcGxhY2VhYmxlLiBJLmUuIGluIDxwKFwiZm9vXCIpLCBwKFwiYmFyXCIpPiwgd2hlbiB0aGVcbi8vIHBhcmFncmFwaCBvbiB0aGUgbGVmdCBpcyBvcGVuLCBcImZvb1wiIGNhbiBiZSBwbGFjZWQgKHNvbWV3aGVyZSBvblxuLy8gdGhlIGxlZnQgc2lkZSBvZiB0aGUgcmVwbGFjZW1lbnQgZ2FwKSBpbmRlcGVuZGVudGx5IGZyb20gcChcImJhclwiKS5cbi8vXG4vLyBUaGlzIGNsYXNzIHRyYWNrcyB0aGUgc3RhdGUgb2YgdGhlIHBsYWNlbWVudCBwcm9ncmVzcyBpbiB0aGVcbi8vIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuLy9cbi8vICAtIGBmcm9udGllcmAgaG9sZHMgYSBzdGFjayBvZiBge3R5cGUsIG1hdGNofWAgb2JqZWN0cyB0aGF0XG4vLyAgICByZXByZXNlbnQgdGhlIG9wZW4gc2lkZSBvZiB0aGUgcmVwbGFjZW1lbnQuIEl0IHN0YXJ0cyBhdFxuLy8gICAgYCRmcm9tYCwgdGhlbiBtb3ZlcyBmb3J3YXJkIGFzIGNvbnRlbnQgaXMgcGxhY2VkLCBhbmQgaXMgZmluYWxseVxuLy8gICAgcmVjb25jaWxlZCB3aXRoIGAkdG9gLlxuLy9cbi8vICAtIGB1bnBsYWNlZGAgaXMgYSBzbGljZSB0aGF0IHJlcHJlc2VudHMgdGhlIGNvbnRlbnQgdGhhdCBoYXNuJ3Rcbi8vICAgIGJlZW4gcGxhY2VkIHlldC5cbi8vXG4vLyAgLSBgcGxhY2VkYCBpcyBhIGZyYWdtZW50IG9mIHBsYWNlZCBjb250ZW50LiBJdHMgb3Blbi1zdGFydCB2YWx1ZVxuLy8gICAgaXMgaW1wbGljaXQgaW4gYCRmcm9tYCwgYW5kIGl0cyBvcGVuLWVuZCB2YWx1ZSBpbiBgZnJvbnRpZXJgLlxuY2xhc3MgRml0dGVyIHtcbiAgICBjb25zdHJ1Y3RvcigkZnJvbSwgJHRvLCB1bnBsYWNlZCkge1xuICAgICAgICB0aGlzLiRmcm9tID0gJGZyb207XG4gICAgICAgIHRoaXMuJHRvID0gJHRvO1xuICAgICAgICB0aGlzLnVucGxhY2VkID0gdW5wbGFjZWQ7XG4gICAgICAgIHRoaXMuZnJvbnRpZXIgPSBbXTtcbiAgICAgICAgdGhpcy5wbGFjZWQgPSBGcmFnbWVudC5lbXB0eTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gJGZyb20uZGVwdGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IG5vZGUgPSAkZnJvbS5ub2RlKGkpO1xuICAgICAgICAgICAgdGhpcy5mcm9udGllci5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBub2RlLnR5cGUsXG4gICAgICAgICAgICAgICAgbWF0Y2g6IG5vZGUuY29udGVudE1hdGNoQXQoJGZyb20uaW5kZXhBZnRlcihpKSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAkZnJvbS5kZXB0aDsgaSA+IDA7IGktLSlcbiAgICAgICAgICAgIHRoaXMucGxhY2VkID0gRnJhZ21lbnQuZnJvbSgkZnJvbS5ub2RlKGkpLmNvcHkodGhpcy5wbGFjZWQpKTtcbiAgICB9XG4gICAgZ2V0IGRlcHRoKCkgeyByZXR1cm4gdGhpcy5mcm9udGllci5sZW5ndGggLSAxOyB9XG4gICAgZml0KCkge1xuICAgICAgICAvLyBBcyBsb25nIGFzIHRoZXJlJ3MgdW5wbGFjZWQgY29udGVudCwgdHJ5IHRvIHBsYWNlIHNvbWUgb2YgaXQuXG4gICAgICAgIC8vIElmIHRoYXQgZmFpbHMsIGVpdGhlciBpbmNyZWFzZSB0aGUgb3BlbiBzY29yZSBvZiB0aGUgdW5wbGFjZWRcbiAgICAgICAgLy8gc2xpY2UsIG9yIGRyb3Agbm9kZXMgZnJvbSBpdCwgYW5kIHRoZW4gdHJ5IGFnYWluLlxuICAgICAgICB3aGlsZSAodGhpcy51bnBsYWNlZC5zaXplKSB7XG4gICAgICAgICAgICBsZXQgZml0ID0gdGhpcy5maW5kRml0dGFibGUoKTtcbiAgICAgICAgICAgIGlmIChmaXQpXG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZU5vZGVzKGZpdCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuTW9yZSgpIHx8IHRoaXMuZHJvcE5vZGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXaGVuIHRoZXJlJ3MgaW5saW5lIGNvbnRlbnQgZGlyZWN0bHkgYWZ0ZXIgdGhlIGZyb250aWVyIF9hbmRfXG4gICAgICAgIC8vIGRpcmVjdGx5IGFmdGVyIGB0aGlzLiR0b2AsIHdlIG11c3QgZ2VuZXJhdGUgYSBgUmVwbGFjZUFyb3VuZGBcbiAgICAgICAgLy8gc3RlcCB0aGF0IHB1bGxzIHRoYXQgY29udGVudCBpbnRvIHRoZSBub2RlIGFmdGVyIHRoZSBmcm9udGllci5cbiAgICAgICAgLy8gVGhhdCBtZWFucyB0aGUgZml0dGluZyBtdXN0IGJlIGRvbmUgdG8gdGhlIGVuZCBvZiB0aGUgdGV4dGJsb2NrXG4gICAgICAgIC8vIG5vZGUgYWZ0ZXIgYHRoaXMuJHRvYCwgbm90IGB0aGlzLiR0b2AgaXRzZWxmLlxuICAgICAgICBsZXQgbW92ZUlubGluZSA9IHRoaXMubXVzdE1vdmVJbmxpbmUoKSwgcGxhY2VkU2l6ZSA9IHRoaXMucGxhY2VkLnNpemUgLSB0aGlzLmRlcHRoIC0gdGhpcy4kZnJvbS5kZXB0aDtcbiAgICAgICAgbGV0ICRmcm9tID0gdGhpcy4kZnJvbSwgJHRvID0gdGhpcy5jbG9zZShtb3ZlSW5saW5lIDwgMCA/IHRoaXMuJHRvIDogJGZyb20uZG9jLnJlc29sdmUobW92ZUlubGluZSkpO1xuICAgICAgICBpZiAoISR0bylcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAvLyBJZiBjbG9zaW5nIHRvIGAkdG9gIHN1Y2NlZWRlZCwgY3JlYXRlIGEgc3RlcFxuICAgICAgICBsZXQgY29udGVudCA9IHRoaXMucGxhY2VkLCBvcGVuU3RhcnQgPSAkZnJvbS5kZXB0aCwgb3BlbkVuZCA9ICR0by5kZXB0aDtcbiAgICAgICAgd2hpbGUgKG9wZW5TdGFydCAmJiBvcGVuRW5kICYmIGNvbnRlbnQuY2hpbGRDb3VudCA9PSAxKSB7IC8vIE5vcm1hbGl6ZSBieSBkcm9wcGluZyBvcGVuIHBhcmVudCBub2Rlc1xuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuZmlyc3RDaGlsZC5jb250ZW50O1xuICAgICAgICAgICAgb3BlblN0YXJ0LS07XG4gICAgICAgICAgICBvcGVuRW5kLS07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNsaWNlID0gbmV3IFNsaWNlKGNvbnRlbnQsIG9wZW5TdGFydCwgb3BlbkVuZCk7XG4gICAgICAgIGlmIChtb3ZlSW5saW5lID4gLTEpXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlcGxhY2VBcm91bmRTdGVwKCRmcm9tLnBvcywgbW92ZUlubGluZSwgdGhpcy4kdG8ucG9zLCB0aGlzLiR0by5lbmQoKSwgc2xpY2UsIHBsYWNlZFNpemUpO1xuICAgICAgICBpZiAoc2xpY2Uuc2l6ZSB8fCAkZnJvbS5wb3MgIT0gdGhpcy4kdG8ucG9zKSAvLyBEb24ndCBnZW5lcmF0ZSBuby1vcCBzdGVwc1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXBsYWNlU3RlcCgkZnJvbS5wb3MsICR0by5wb3MsIHNsaWNlKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vIEZpbmQgYSBwb3NpdGlvbiBvbiB0aGUgc3RhcnQgc3BpbmUgb2YgYHRoaXMudW5wbGFjZWRgIHRoYXQgaGFzXG4gICAgLy8gY29udGVudCB0aGF0IGNhbiBiZSBtb3ZlZCBzb21ld2hlcmUgb24gdGhlIGZyb250aWVyLiBSZXR1cm5zIHR3b1xuICAgIC8vIGRlcHRocywgb25lIGZvciB0aGUgc2xpY2UgYW5kIG9uZSBmb3IgdGhlIGZyb250aWVyLlxuICAgIGZpbmRGaXR0YWJsZSgpIHtcbiAgICAgICAgbGV0IHN0YXJ0RGVwdGggPSB0aGlzLnVucGxhY2VkLm9wZW5TdGFydDtcbiAgICAgICAgZm9yIChsZXQgY3VyID0gdGhpcy51bnBsYWNlZC5jb250ZW50LCBkID0gMCwgb3BlbkVuZCA9IHRoaXMudW5wbGFjZWQub3BlbkVuZDsgZCA8IHN0YXJ0RGVwdGg7IGQrKykge1xuICAgICAgICAgICAgbGV0IG5vZGUgPSBjdXIuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGlmIChjdXIuY2hpbGRDb3VudCA+IDEpXG4gICAgICAgICAgICAgICAgb3BlbkVuZCA9IDA7XG4gICAgICAgICAgICBpZiAobm9kZS50eXBlLnNwZWMuaXNvbGF0aW5nICYmIG9wZW5FbmQgPD0gZCkge1xuICAgICAgICAgICAgICAgIHN0YXJ0RGVwdGggPSBkO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VyID0gbm9kZS5jb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIC8vIE9ubHkgdHJ5IHdyYXBwaW5nIG5vZGVzIChwYXNzIDIpIGFmdGVyIGZpbmRpbmcgYSBwbGFjZSB3aXRob3V0XG4gICAgICAgIC8vIHdyYXBwaW5nIGZhaWxlZC5cbiAgICAgICAgZm9yIChsZXQgcGFzcyA9IDE7IHBhc3MgPD0gMjsgcGFzcysrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBzbGljZURlcHRoID0gcGFzcyA9PSAxID8gc3RhcnREZXB0aCA6IHRoaXMudW5wbGFjZWQub3BlblN0YXJ0OyBzbGljZURlcHRoID49IDA7IHNsaWNlRGVwdGgtLSkge1xuICAgICAgICAgICAgICAgIGxldCBmcmFnbWVudCwgcGFyZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoc2xpY2VEZXB0aCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBjb250ZW50QXQodGhpcy51bnBsYWNlZC5jb250ZW50LCBzbGljZURlcHRoIC0gMSkuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBwYXJlbnQuY29udGVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gdGhpcy51bnBsYWNlZC5jb250ZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgZmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGZyb250aWVyRGVwdGggPSB0aGlzLmRlcHRoOyBmcm9udGllckRlcHRoID49IDA7IGZyb250aWVyRGVwdGgtLSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgeyB0eXBlLCBtYXRjaCB9ID0gdGhpcy5mcm9udGllcltmcm9udGllckRlcHRoXSwgd3JhcCwgaW5qZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW4gcGFzcyAxLCBpZiB0aGUgbmV4dCBub2RlIG1hdGNoZXMsIG9yIHRoZXJlIGlzIG5vIG5leHRcbiAgICAgICAgICAgICAgICAgICAgLy8gbm9kZSBidXQgdGhlIHBhcmVudHMgbG9vayBjb21wYXRpYmxlLCB3ZSd2ZSBmb3VuZCBhXG4gICAgICAgICAgICAgICAgICAgIC8vIHBsYWNlLlxuICAgICAgICAgICAgICAgICAgICBpZiAocGFzcyA9PSAxICYmIChmaXJzdCA/IG1hdGNoLm1hdGNoVHlwZShmaXJzdC50eXBlKSB8fCAoaW5qZWN0ID0gbWF0Y2guZmlsbEJlZm9yZShGcmFnbWVudC5mcm9tKGZpcnN0KSwgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBwYXJlbnQgJiYgdHlwZS5jb21wYXRpYmxlQ29udGVudChwYXJlbnQudHlwZSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgc2xpY2VEZXB0aCwgZnJvbnRpZXJEZXB0aCwgcGFyZW50LCBpbmplY3QgfTtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW4gcGFzcyAyLCBsb29rIGZvciBhIHNldCBvZiB3cmFwcGluZyBub2RlcyB0aGF0IG1ha2VcbiAgICAgICAgICAgICAgICAgICAgLy8gYGZpcnN0YCBmaXQgaGVyZS5cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGFzcyA9PSAyICYmIGZpcnN0ICYmICh3cmFwID0gbWF0Y2guZmluZFdyYXBwaW5nKGZpcnN0LnR5cGUpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHNsaWNlRGVwdGgsIGZyb250aWVyRGVwdGgsIHBhcmVudCwgd3JhcCB9O1xuICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBjb250aW51ZSBsb29raW5nIGZ1cnRoZXIgdXAgaWYgdGhlIHBhcmVudCBub2RlXG4gICAgICAgICAgICAgICAgICAgIC8vIHdvdWxkIGZpdCBoZXJlLlxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50ICYmIG1hdGNoLm1hdGNoVHlwZShwYXJlbnQudHlwZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgb3Blbk1vcmUoKSB7XG4gICAgICAgIGxldCB7IGNvbnRlbnQsIG9wZW5TdGFydCwgb3BlbkVuZCB9ID0gdGhpcy51bnBsYWNlZDtcbiAgICAgICAgbGV0IGlubmVyID0gY29udGVudEF0KGNvbnRlbnQsIG9wZW5TdGFydCk7XG4gICAgICAgIGlmICghaW5uZXIuY2hpbGRDb3VudCB8fCBpbm5lci5maXJzdENoaWxkLmlzTGVhZilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy51bnBsYWNlZCA9IG5ldyBTbGljZShjb250ZW50LCBvcGVuU3RhcnQgKyAxLCBNYXRoLm1heChvcGVuRW5kLCBpbm5lci5zaXplICsgb3BlblN0YXJ0ID49IGNvbnRlbnQuc2l6ZSAtIG9wZW5FbmQgPyBvcGVuU3RhcnQgKyAxIDogMCkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZHJvcE5vZGUoKSB7XG4gICAgICAgIGxldCB7IGNvbnRlbnQsIG9wZW5TdGFydCwgb3BlbkVuZCB9ID0gdGhpcy51bnBsYWNlZDtcbiAgICAgICAgbGV0IGlubmVyID0gY29udGVudEF0KGNvbnRlbnQsIG9wZW5TdGFydCk7XG4gICAgICAgIGlmIChpbm5lci5jaGlsZENvdW50IDw9IDEgJiYgb3BlblN0YXJ0ID4gMCkge1xuICAgICAgICAgICAgbGV0IG9wZW5BdEVuZCA9IGNvbnRlbnQuc2l6ZSAtIG9wZW5TdGFydCA8PSBvcGVuU3RhcnQgKyBpbm5lci5zaXplO1xuICAgICAgICAgICAgdGhpcy51bnBsYWNlZCA9IG5ldyBTbGljZShkcm9wRnJvbUZyYWdtZW50KGNvbnRlbnQsIG9wZW5TdGFydCAtIDEsIDEpLCBvcGVuU3RhcnQgLSAxLCBvcGVuQXRFbmQgPyBvcGVuU3RhcnQgLSAxIDogb3BlbkVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVucGxhY2VkID0gbmV3IFNsaWNlKGRyb3BGcm9tRnJhZ21lbnQoY29udGVudCwgb3BlblN0YXJ0LCAxKSwgb3BlblN0YXJ0LCBvcGVuRW5kKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBNb3ZlIGNvbnRlbnQgZnJvbSB0aGUgdW5wbGFjZWQgc2xpY2UgYXQgYHNsaWNlRGVwdGhgIHRvIHRoZVxuICAgIC8vIGZyb250aWVyIG5vZGUgYXQgYGZyb250aWVyRGVwdGhgLiBDbG9zZSB0aGF0IGZyb250aWVyIG5vZGUgd2hlblxuICAgIC8vIGFwcGxpY2FibGUuXG4gICAgcGxhY2VOb2Rlcyh7IHNsaWNlRGVwdGgsIGZyb250aWVyRGVwdGgsIHBhcmVudCwgaW5qZWN0LCB3cmFwIH0pIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuZGVwdGggPiBmcm9udGllckRlcHRoKVxuICAgICAgICAgICAgdGhpcy5jbG9zZUZyb250aWVyTm9kZSgpO1xuICAgICAgICBpZiAod3JhcClcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd3JhcC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5Gcm9udGllck5vZGUod3JhcFtpXSk7XG4gICAgICAgIGxldCBzbGljZSA9IHRoaXMudW5wbGFjZWQsIGZyYWdtZW50ID0gcGFyZW50ID8gcGFyZW50LmNvbnRlbnQgOiBzbGljZS5jb250ZW50O1xuICAgICAgICBsZXQgb3BlblN0YXJ0ID0gc2xpY2Uub3BlblN0YXJ0IC0gc2xpY2VEZXB0aDtcbiAgICAgICAgbGV0IHRha2VuID0gMCwgYWRkID0gW107XG4gICAgICAgIGxldCB7IG1hdGNoLCB0eXBlIH0gPSB0aGlzLmZyb250aWVyW2Zyb250aWVyRGVwdGhdO1xuICAgICAgICBpZiAoaW5qZWN0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluamVjdC5jaGlsZENvdW50OyBpKyspXG4gICAgICAgICAgICAgICAgYWRkLnB1c2goaW5qZWN0LmNoaWxkKGkpKTtcbiAgICAgICAgICAgIG1hdGNoID0gbWF0Y2gubWF0Y2hGcmFnbWVudChpbmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENvbXB1dGVzIHRoZSBhbW91bnQgb2YgKGVuZCkgb3BlbiBub2RlcyBhdCB0aGUgZW5kIG9mIHRoZVxuICAgICAgICAvLyBmcmFnbWVudC4gV2hlbiAwLCB0aGUgcGFyZW50IGlzIG9wZW4sIGJ1dCBubyBtb3JlLiBXaGVuXG4gICAgICAgIC8vIG5lZ2F0aXZlLCBub3RoaW5nIGlzIG9wZW4uXG4gICAgICAgIGxldCBvcGVuRW5kQ291bnQgPSAoZnJhZ21lbnQuc2l6ZSArIHNsaWNlRGVwdGgpIC0gKHNsaWNlLmNvbnRlbnQuc2l6ZSAtIHNsaWNlLm9wZW5FbmQpO1xuICAgICAgICAvLyBTY2FuIG92ZXIgdGhlIGZyYWdtZW50LCBmaXR0aW5nIGFzIG1hbnkgY2hpbGQgbm9kZXMgYXNcbiAgICAgICAgLy8gcG9zc2libGUuXG4gICAgICAgIHdoaWxlICh0YWtlbiA8IGZyYWdtZW50LmNoaWxkQ291bnQpIHtcbiAgICAgICAgICAgIGxldCBuZXh0ID0gZnJhZ21lbnQuY2hpbGQodGFrZW4pLCBtYXRjaGVzID0gbWF0Y2gubWF0Y2hUeXBlKG5leHQudHlwZSk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoZXMpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB0YWtlbisrO1xuICAgICAgICAgICAgaWYgKHRha2VuID4gMSB8fCBvcGVuU3RhcnQgPT0gMCB8fCBuZXh0LmNvbnRlbnQuc2l6ZSkgeyAvLyBEcm9wIGVtcHR5IG9wZW4gbm9kZXNcbiAgICAgICAgICAgICAgICBtYXRjaCA9IG1hdGNoZXM7XG4gICAgICAgICAgICAgICAgYWRkLnB1c2goY2xvc2VOb2RlU3RhcnQobmV4dC5tYXJrKHR5cGUuYWxsb3dlZE1hcmtzKG5leHQubWFya3MpKSwgdGFrZW4gPT0gMSA/IG9wZW5TdGFydCA6IDAsIHRha2VuID09IGZyYWdtZW50LmNoaWxkQ291bnQgPyBvcGVuRW5kQ291bnQgOiAtMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCB0b0VuZCA9IHRha2VuID09IGZyYWdtZW50LmNoaWxkQ291bnQ7XG4gICAgICAgIGlmICghdG9FbmQpXG4gICAgICAgICAgICBvcGVuRW5kQ291bnQgPSAtMTtcbiAgICAgICAgdGhpcy5wbGFjZWQgPSBhZGRUb0ZyYWdtZW50KHRoaXMucGxhY2VkLCBmcm9udGllckRlcHRoLCBGcmFnbWVudC5mcm9tKGFkZCkpO1xuICAgICAgICB0aGlzLmZyb250aWVyW2Zyb250aWVyRGVwdGhdLm1hdGNoID0gbWF0Y2g7XG4gICAgICAgIC8vIElmIHRoZSBwYXJlbnQgdHlwZXMgbWF0Y2gsIGFuZCB0aGUgZW50aXJlIG5vZGUgd2FzIG1vdmVkLCBhbmRcbiAgICAgICAgLy8gaXQncyBub3Qgb3BlbiwgY2xvc2UgdGhpcyBmcm9udGllciBub2RlIHJpZ2h0IGF3YXkuXG4gICAgICAgIGlmICh0b0VuZCAmJiBvcGVuRW5kQ291bnQgPCAwICYmIHBhcmVudCAmJiBwYXJlbnQudHlwZSA9PSB0aGlzLmZyb250aWVyW3RoaXMuZGVwdGhdLnR5cGUgJiYgdGhpcy5mcm9udGllci5sZW5ndGggPiAxKVxuICAgICAgICAgICAgdGhpcy5jbG9zZUZyb250aWVyTm9kZSgpO1xuICAgICAgICAvLyBBZGQgbmV3IGZyb250aWVyIG5vZGVzIGZvciBhbnkgb3BlbiBub2RlcyBhdCB0aGUgZW5kLlxuICAgICAgICBmb3IgKGxldCBpID0gMCwgY3VyID0gZnJhZ21lbnQ7IGkgPCBvcGVuRW5kQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgbGV0IG5vZGUgPSBjdXIubGFzdENoaWxkO1xuICAgICAgICAgICAgdGhpcy5mcm9udGllci5wdXNoKHsgdHlwZTogbm9kZS50eXBlLCBtYXRjaDogbm9kZS5jb250ZW50TWF0Y2hBdChub2RlLmNoaWxkQ291bnQpIH0pO1xuICAgICAgICAgICAgY3VyID0gbm9kZS5jb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIC8vIFVwZGF0ZSBgdGhpcy51bnBsYWNlZGAuIERyb3AgdGhlIGVudGlyZSBub2RlIGZyb20gd2hpY2ggd2VcbiAgICAgICAgLy8gcGxhY2VkIGl0IHdlIGdvdCB0byBpdHMgZW5kLCBvdGhlcndpc2UganVzdCBkcm9wIHRoZSBwbGFjZWRcbiAgICAgICAgLy8gbm9kZXMuXG4gICAgICAgIHRoaXMudW5wbGFjZWQgPSAhdG9FbmQgPyBuZXcgU2xpY2UoZHJvcEZyb21GcmFnbWVudChzbGljZS5jb250ZW50LCBzbGljZURlcHRoLCB0YWtlbiksIHNsaWNlLm9wZW5TdGFydCwgc2xpY2Uub3BlbkVuZClcbiAgICAgICAgICAgIDogc2xpY2VEZXB0aCA9PSAwID8gU2xpY2UuZW1wdHlcbiAgICAgICAgICAgICAgICA6IG5ldyBTbGljZShkcm9wRnJvbUZyYWdtZW50KHNsaWNlLmNvbnRlbnQsIHNsaWNlRGVwdGggLSAxLCAxKSwgc2xpY2VEZXB0aCAtIDEsIG9wZW5FbmRDb3VudCA8IDAgPyBzbGljZS5vcGVuRW5kIDogc2xpY2VEZXB0aCAtIDEpO1xuICAgIH1cbiAgICBtdXN0TW92ZUlubGluZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLiR0by5wYXJlbnQuaXNUZXh0YmxvY2spXG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIGxldCB0b3AgPSB0aGlzLmZyb250aWVyW3RoaXMuZGVwdGhdLCBsZXZlbDtcbiAgICAgICAgaWYgKCF0b3AudHlwZS5pc1RleHRibG9jayB8fCAhY29udGVudEFmdGVyRml0cyh0aGlzLiR0bywgdGhpcy4kdG8uZGVwdGgsIHRvcC50eXBlLCB0b3AubWF0Y2gsIGZhbHNlKSB8fFxuICAgICAgICAgICAgKHRoaXMuJHRvLmRlcHRoID09IHRoaXMuZGVwdGggJiYgKGxldmVsID0gdGhpcy5maW5kQ2xvc2VMZXZlbCh0aGlzLiR0bykpICYmIGxldmVsLmRlcHRoID09IHRoaXMuZGVwdGgpKVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICBsZXQgeyBkZXB0aCB9ID0gdGhpcy4kdG8sIGFmdGVyID0gdGhpcy4kdG8uYWZ0ZXIoZGVwdGgpO1xuICAgICAgICB3aGlsZSAoZGVwdGggPiAxICYmIGFmdGVyID09IHRoaXMuJHRvLmVuZCgtLWRlcHRoKSlcbiAgICAgICAgICAgICsrYWZ0ZXI7XG4gICAgICAgIHJldHVybiBhZnRlcjtcbiAgICB9XG4gICAgZmluZENsb3NlTGV2ZWwoJHRvKSB7XG4gICAgICAgIHNjYW46IGZvciAobGV0IGkgPSBNYXRoLm1pbih0aGlzLmRlcHRoLCAkdG8uZGVwdGgpOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgbGV0IHsgbWF0Y2gsIHR5cGUgfSA9IHRoaXMuZnJvbnRpZXJbaV07XG4gICAgICAgICAgICBsZXQgZHJvcElubmVyID0gaSA8ICR0by5kZXB0aCAmJiAkdG8uZW5kKGkgKyAxKSA9PSAkdG8ucG9zICsgKCR0by5kZXB0aCAtIChpICsgMSkpO1xuICAgICAgICAgICAgbGV0IGZpdCA9IGNvbnRlbnRBZnRlckZpdHMoJHRvLCBpLCB0eXBlLCBtYXRjaCwgZHJvcElubmVyKTtcbiAgICAgICAgICAgIGlmICghZml0KVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgZm9yIChsZXQgZCA9IGkgLSAxOyBkID49IDA7IGQtLSkge1xuICAgICAgICAgICAgICAgIGxldCB7IG1hdGNoLCB0eXBlIH0gPSB0aGlzLmZyb250aWVyW2RdO1xuICAgICAgICAgICAgICAgIGxldCBtYXRjaGVzID0gY29udGVudEFmdGVyRml0cygkdG8sIGQsIHR5cGUsIG1hdGNoLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMgfHwgbWF0Y2hlcy5jaGlsZENvdW50KVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBzY2FuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgZGVwdGg6IGksIGZpdCwgbW92ZTogZHJvcElubmVyID8gJHRvLmRvYy5yZXNvbHZlKCR0by5hZnRlcihpICsgMSkpIDogJHRvIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xvc2UoJHRvKSB7XG4gICAgICAgIGxldCBjbG9zZSA9IHRoaXMuZmluZENsb3NlTGV2ZWwoJHRvKTtcbiAgICAgICAgaWYgKCFjbG9zZSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB3aGlsZSAodGhpcy5kZXB0aCA+IGNsb3NlLmRlcHRoKVxuICAgICAgICAgICAgdGhpcy5jbG9zZUZyb250aWVyTm9kZSgpO1xuICAgICAgICBpZiAoY2xvc2UuZml0LmNoaWxkQ291bnQpXG4gICAgICAgICAgICB0aGlzLnBsYWNlZCA9IGFkZFRvRnJhZ21lbnQodGhpcy5wbGFjZWQsIGNsb3NlLmRlcHRoLCBjbG9zZS5maXQpO1xuICAgICAgICAkdG8gPSBjbG9zZS5tb3ZlO1xuICAgICAgICBmb3IgKGxldCBkID0gY2xvc2UuZGVwdGggKyAxOyBkIDw9ICR0by5kZXB0aDsgZCsrKSB7XG4gICAgICAgICAgICBsZXQgbm9kZSA9ICR0by5ub2RlKGQpLCBhZGQgPSBub2RlLnR5cGUuY29udGVudE1hdGNoLmZpbGxCZWZvcmUobm9kZS5jb250ZW50LCB0cnVlLCAkdG8uaW5kZXgoZCkpO1xuICAgICAgICAgICAgdGhpcy5vcGVuRnJvbnRpZXJOb2RlKG5vZGUudHlwZSwgbm9kZS5hdHRycywgYWRkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJHRvO1xuICAgIH1cbiAgICBvcGVuRnJvbnRpZXJOb2RlKHR5cGUsIGF0dHJzID0gbnVsbCwgY29udGVudCkge1xuICAgICAgICBsZXQgdG9wID0gdGhpcy5mcm9udGllclt0aGlzLmRlcHRoXTtcbiAgICAgICAgdG9wLm1hdGNoID0gdG9wLm1hdGNoLm1hdGNoVHlwZSh0eXBlKTtcbiAgICAgICAgdGhpcy5wbGFjZWQgPSBhZGRUb0ZyYWdtZW50KHRoaXMucGxhY2VkLCB0aGlzLmRlcHRoLCBGcmFnbWVudC5mcm9tKHR5cGUuY3JlYXRlKGF0dHJzLCBjb250ZW50KSkpO1xuICAgICAgICB0aGlzLmZyb250aWVyLnB1c2goeyB0eXBlLCBtYXRjaDogdHlwZS5jb250ZW50TWF0Y2ggfSk7XG4gICAgfVxuICAgIGNsb3NlRnJvbnRpZXJOb2RlKCkge1xuICAgICAgICBsZXQgb3BlbiA9IHRoaXMuZnJvbnRpZXIucG9wKCk7XG4gICAgICAgIGxldCBhZGQgPSBvcGVuLm1hdGNoLmZpbGxCZWZvcmUoRnJhZ21lbnQuZW1wdHksIHRydWUpO1xuICAgICAgICBpZiAoYWRkLmNoaWxkQ291bnQpXG4gICAgICAgICAgICB0aGlzLnBsYWNlZCA9IGFkZFRvRnJhZ21lbnQodGhpcy5wbGFjZWQsIHRoaXMuZnJvbnRpZXIubGVuZ3RoLCBhZGQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRyb3BGcm9tRnJhZ21lbnQoZnJhZ21lbnQsIGRlcHRoLCBjb3VudCkge1xuICAgIGlmIChkZXB0aCA9PSAwKVxuICAgICAgICByZXR1cm4gZnJhZ21lbnQuY3V0QnlJbmRleChjb3VudCwgZnJhZ21lbnQuY2hpbGRDb3VudCk7XG4gICAgcmV0dXJuIGZyYWdtZW50LnJlcGxhY2VDaGlsZCgwLCBmcmFnbWVudC5maXJzdENoaWxkLmNvcHkoZHJvcEZyb21GcmFnbWVudChmcmFnbWVudC5maXJzdENoaWxkLmNvbnRlbnQsIGRlcHRoIC0gMSwgY291bnQpKSk7XG59XG5mdW5jdGlvbiBhZGRUb0ZyYWdtZW50KGZyYWdtZW50LCBkZXB0aCwgY29udGVudCkge1xuICAgIGlmIChkZXB0aCA9PSAwKVxuICAgICAgICByZXR1cm4gZnJhZ21lbnQuYXBwZW5kKGNvbnRlbnQpO1xuICAgIHJldHVybiBmcmFnbWVudC5yZXBsYWNlQ2hpbGQoZnJhZ21lbnQuY2hpbGRDb3VudCAtIDEsIGZyYWdtZW50Lmxhc3RDaGlsZC5jb3B5KGFkZFRvRnJhZ21lbnQoZnJhZ21lbnQubGFzdENoaWxkLmNvbnRlbnQsIGRlcHRoIC0gMSwgY29udGVudCkpKTtcbn1cbmZ1bmN0aW9uIGNvbnRlbnRBdChmcmFnbWVudCwgZGVwdGgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlcHRoOyBpKyspXG4gICAgICAgIGZyYWdtZW50ID0gZnJhZ21lbnQuZmlyc3RDaGlsZC5jb250ZW50O1xuICAgIHJldHVybiBmcmFnbWVudDtcbn1cbmZ1bmN0aW9uIGNsb3NlTm9kZVN0YXJ0KG5vZGUsIG9wZW5TdGFydCwgb3BlbkVuZCkge1xuICAgIGlmIChvcGVuU3RhcnQgPD0gMClcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgbGV0IGZyYWcgPSBub2RlLmNvbnRlbnQ7XG4gICAgaWYgKG9wZW5TdGFydCA+IDEpXG4gICAgICAgIGZyYWcgPSBmcmFnLnJlcGxhY2VDaGlsZCgwLCBjbG9zZU5vZGVTdGFydChmcmFnLmZpcnN0Q2hpbGQsIG9wZW5TdGFydCAtIDEsIGZyYWcuY2hpbGRDb3VudCA9PSAxID8gb3BlbkVuZCAtIDEgOiAwKSk7XG4gICAgaWYgKG9wZW5TdGFydCA+IDApIHtcbiAgICAgICAgZnJhZyA9IG5vZGUudHlwZS5jb250ZW50TWF0Y2guZmlsbEJlZm9yZShmcmFnKS5hcHBlbmQoZnJhZyk7XG4gICAgICAgIGlmIChvcGVuRW5kIDw9IDApXG4gICAgICAgICAgICBmcmFnID0gZnJhZy5hcHBlbmQobm9kZS50eXBlLmNvbnRlbnRNYXRjaC5tYXRjaEZyYWdtZW50KGZyYWcpLmZpbGxCZWZvcmUoRnJhZ21lbnQuZW1wdHksIHRydWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGUuY29weShmcmFnKTtcbn1cbmZ1bmN0aW9uIGNvbnRlbnRBZnRlckZpdHMoJHRvLCBkZXB0aCwgdHlwZSwgbWF0Y2gsIG9wZW4pIHtcbiAgICBsZXQgbm9kZSA9ICR0by5ub2RlKGRlcHRoKSwgaW5kZXggPSBvcGVuID8gJHRvLmluZGV4QWZ0ZXIoZGVwdGgpIDogJHRvLmluZGV4KGRlcHRoKTtcbiAgICBpZiAoaW5kZXggPT0gbm9kZS5jaGlsZENvdW50ICYmICF0eXBlLmNvbXBhdGlibGVDb250ZW50KG5vZGUudHlwZSkpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGxldCBmaXQgPSBtYXRjaC5maWxsQmVmb3JlKG5vZGUuY29udGVudCwgdHJ1ZSwgaW5kZXgpO1xuICAgIHJldHVybiBmaXQgJiYgIWludmFsaWRNYXJrcyh0eXBlLCBub2RlLmNvbnRlbnQsIGluZGV4KSA/IGZpdCA6IG51bGw7XG59XG5mdW5jdGlvbiBpbnZhbGlkTWFya3ModHlwZSwgZnJhZ21lbnQsIHN0YXJ0KSB7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZnJhZ21lbnQuY2hpbGRDb3VudDsgaSsrKVxuICAgICAgICBpZiAoIXR5cGUuYWxsb3dzTWFya3MoZnJhZ21lbnQuY2hpbGQoaSkubWFya3MpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZGVmaW5lc0NvbnRlbnQodHlwZSkge1xuICAgIHJldHVybiB0eXBlLnNwZWMuZGVmaW5pbmcgfHwgdHlwZS5zcGVjLmRlZmluaW5nRm9yQ29udGVudDtcbn1cbmZ1bmN0aW9uIHJlcGxhY2VSYW5nZSh0ciwgZnJvbSwgdG8sIHNsaWNlKSB7XG4gICAgaWYgKCFzbGljZS5zaXplKVxuICAgICAgICByZXR1cm4gdHIuZGVsZXRlUmFuZ2UoZnJvbSwgdG8pO1xuICAgIGxldCAkZnJvbSA9IHRyLmRvYy5yZXNvbHZlKGZyb20pLCAkdG8gPSB0ci5kb2MucmVzb2x2ZSh0byk7XG4gICAgaWYgKGZpdHNUcml2aWFsbHkoJGZyb20sICR0bywgc2xpY2UpKVxuICAgICAgICByZXR1cm4gdHIuc3RlcChuZXcgUmVwbGFjZVN0ZXAoZnJvbSwgdG8sIHNsaWNlKSk7XG4gICAgbGV0IHRhcmdldERlcHRocyA9IGNvdmVyZWREZXB0aHMoJGZyb20sIHRyLmRvYy5yZXNvbHZlKHRvKSk7XG4gICAgLy8gQ2FuJ3QgcmVwbGFjZSB0aGUgd2hvbGUgZG9jdW1lbnQsIHNvIHJlbW92ZSAwIGlmIGl0J3MgcHJlc2VudFxuICAgIGlmICh0YXJnZXREZXB0aHNbdGFyZ2V0RGVwdGhzLmxlbmd0aCAtIDFdID09IDApXG4gICAgICAgIHRhcmdldERlcHRocy5wb3AoKTtcbiAgICAvLyBOZWdhdGl2ZSBudW1iZXJzIHJlcHJlc2VudCBub3QgZXhwYW5zaW9uIG92ZXIgdGhlIHdob2xlIG5vZGUgYXRcbiAgICAvLyB0aGF0IGRlcHRoLCBidXQgcmVwbGFjaW5nIGZyb20gJGZyb20uYmVmb3JlKC1EKSB0byAkdG8ucG9zLlxuICAgIGxldCBwcmVmZXJyZWRUYXJnZXQgPSAtKCRmcm9tLmRlcHRoICsgMSk7XG4gICAgdGFyZ2V0RGVwdGhzLnVuc2hpZnQocHJlZmVycmVkVGFyZ2V0KTtcbiAgICAvLyBUaGlzIGxvb3AgcGlja3MgYSBwcmVmZXJyZWQgdGFyZ2V0IGRlcHRoLCBpZiBvbmUgb2YgdGhlIGNvdmVyaW5nXG4gICAgLy8gZGVwdGhzIGlzIG5vdCBvdXRzaWRlIG9mIGEgZGVmaW5pbmcgbm9kZSwgYW5kIGFkZHMgbmVnYXRpdmVcbiAgICAvLyBkZXB0aHMgZm9yIGFueSBkZXB0aCB0aGF0IGhhcyAkZnJvbSBhdCBpdHMgc3RhcnQgYW5kIGRvZXMgbm90XG4gICAgLy8gY3Jvc3MgYSBkZWZpbmluZyBub2RlLlxuICAgIGZvciAobGV0IGQgPSAkZnJvbS5kZXB0aCwgcG9zID0gJGZyb20ucG9zIC0gMTsgZCA+IDA7IGQtLSwgcG9zLS0pIHtcbiAgICAgICAgbGV0IHNwZWMgPSAkZnJvbS5ub2RlKGQpLnR5cGUuc3BlYztcbiAgICAgICAgaWYgKHNwZWMuZGVmaW5pbmcgfHwgc3BlYy5kZWZpbmluZ0FzQ29udGV4dCB8fCBzcGVjLmlzb2xhdGluZylcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBpZiAodGFyZ2V0RGVwdGhzLmluZGV4T2YoZCkgPiAtMSlcbiAgICAgICAgICAgIHByZWZlcnJlZFRhcmdldCA9IGQ7XG4gICAgICAgIGVsc2UgaWYgKCRmcm9tLmJlZm9yZShkKSA9PSBwb3MpXG4gICAgICAgICAgICB0YXJnZXREZXB0aHMuc3BsaWNlKDEsIDAsIC1kKTtcbiAgICB9XG4gICAgLy8gVHJ5IHRvIGZpdCBlYWNoIHBvc3NpYmxlIGRlcHRoIG9mIHRoZSBzbGljZSBpbnRvIGVhY2ggcG9zc2libGVcbiAgICAvLyB0YXJnZXQgZGVwdGgsIHN0YXJ0aW5nIHdpdGggdGhlIHByZWZlcnJlZCBkZXB0aHMuXG4gICAgbGV0IHByZWZlcnJlZFRhcmdldEluZGV4ID0gdGFyZ2V0RGVwdGhzLmluZGV4T2YocHJlZmVycmVkVGFyZ2V0KTtcbiAgICBsZXQgbGVmdE5vZGVzID0gW10sIHByZWZlcnJlZERlcHRoID0gc2xpY2Uub3BlblN0YXJ0O1xuICAgIGZvciAobGV0IGNvbnRlbnQgPSBzbGljZS5jb250ZW50LCBpID0gMDs7IGkrKykge1xuICAgICAgICBsZXQgbm9kZSA9IGNvbnRlbnQuZmlyc3RDaGlsZDtcbiAgICAgICAgbGVmdE5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIGlmIChpID09IHNsaWNlLm9wZW5TdGFydClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjb250ZW50ID0gbm9kZS5jb250ZW50O1xuICAgIH1cbiAgICAvLyBCYWNrIHVwIHByZWZlcnJlZERlcHRoIHRvIGNvdmVyIGRlZmluaW5nIHRleHRibG9ja3MgZGlyZWN0bHlcbiAgICAvLyBhYm92ZSBpdCwgcG9zc2libHkgc2tpcHBpbmcgYSBub24tZGVmaW5pbmcgdGV4dGJsb2NrLlxuICAgIGZvciAobGV0IGQgPSBwcmVmZXJyZWREZXB0aCAtIDE7IGQgPj0gMDsgZC0tKSB7XG4gICAgICAgIGxldCB0eXBlID0gbGVmdE5vZGVzW2RdLnR5cGUsIGRlZiA9IGRlZmluZXNDb250ZW50KHR5cGUpO1xuICAgICAgICBpZiAoZGVmICYmICRmcm9tLm5vZGUocHJlZmVycmVkVGFyZ2V0SW5kZXgpLnR5cGUgIT0gdHlwZSlcbiAgICAgICAgICAgIHByZWZlcnJlZERlcHRoID0gZDtcbiAgICAgICAgZWxzZSBpZiAoZGVmIHx8ICF0eXBlLmlzVGV4dGJsb2NrKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGZvciAobGV0IGogPSBzbGljZS5vcGVuU3RhcnQ7IGogPj0gMDsgai0tKSB7XG4gICAgICAgIGxldCBvcGVuRGVwdGggPSAoaiArIHByZWZlcnJlZERlcHRoICsgMSkgJSAoc2xpY2Uub3BlblN0YXJ0ICsgMSk7XG4gICAgICAgIGxldCBpbnNlcnQgPSBsZWZ0Tm9kZXNbb3BlbkRlcHRoXTtcbiAgICAgICAgaWYgKCFpbnNlcnQpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YXJnZXREZXB0aHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIC8vIExvb3Agb3ZlciBwb3NzaWJsZSBleHBhbnNpb24gbGV2ZWxzLCBzdGFydGluZyB3aXRoIHRoZVxuICAgICAgICAgICAgLy8gcHJlZmVycmVkIG9uZVxuICAgICAgICAgICAgbGV0IHRhcmdldERlcHRoID0gdGFyZ2V0RGVwdGhzWyhpICsgcHJlZmVycmVkVGFyZ2V0SW5kZXgpICUgdGFyZ2V0RGVwdGhzLmxlbmd0aF0sIGV4cGFuZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGFyZ2V0RGVwdGggPCAwKSB7XG4gICAgICAgICAgICAgICAgZXhwYW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGFyZ2V0RGVwdGggPSAtdGFyZ2V0RGVwdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcGFyZW50ID0gJGZyb20ubm9kZSh0YXJnZXREZXB0aCAtIDEpLCBpbmRleCA9ICRmcm9tLmluZGV4KHRhcmdldERlcHRoIC0gMSk7XG4gICAgICAgICAgICBpZiAocGFyZW50LmNhblJlcGxhY2VXaXRoKGluZGV4LCBpbmRleCwgaW5zZXJ0LnR5cGUsIGluc2VydC5tYXJrcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyLnJlcGxhY2UoJGZyb20uYmVmb3JlKHRhcmdldERlcHRoKSwgZXhwYW5kID8gJHRvLmFmdGVyKHRhcmdldERlcHRoKSA6IHRvLCBuZXcgU2xpY2UoY2xvc2VGcmFnbWVudChzbGljZS5jb250ZW50LCAwLCBzbGljZS5vcGVuU3RhcnQsIG9wZW5EZXB0aCksIG9wZW5EZXB0aCwgc2xpY2Uub3BlbkVuZCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBzdGFydFN0ZXBzID0gdHIuc3RlcHMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSB0YXJnZXREZXB0aHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdHIucmVwbGFjZShmcm9tLCB0bywgc2xpY2UpO1xuICAgICAgICBpZiAodHIuc3RlcHMubGVuZ3RoID4gc3RhcnRTdGVwcylcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBsZXQgZGVwdGggPSB0YXJnZXREZXB0aHNbaV07XG4gICAgICAgIGlmIChkZXB0aCA8IDApXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZnJvbSA9ICRmcm9tLmJlZm9yZShkZXB0aCk7XG4gICAgICAgIHRvID0gJHRvLmFmdGVyKGRlcHRoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjbG9zZUZyYWdtZW50KGZyYWdtZW50LCBkZXB0aCwgb2xkT3BlbiwgbmV3T3BlbiwgcGFyZW50KSB7XG4gICAgaWYgKGRlcHRoIDwgb2xkT3Blbikge1xuICAgICAgICBsZXQgZmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuICAgICAgICBmcmFnbWVudCA9IGZyYWdtZW50LnJlcGxhY2VDaGlsZCgwLCBmaXJzdC5jb3B5KGNsb3NlRnJhZ21lbnQoZmlyc3QuY29udGVudCwgZGVwdGggKyAxLCBvbGRPcGVuLCBuZXdPcGVuLCBmaXJzdCkpKTtcbiAgICB9XG4gICAgaWYgKGRlcHRoID4gbmV3T3Blbikge1xuICAgICAgICBsZXQgbWF0Y2ggPSBwYXJlbnQuY29udGVudE1hdGNoQXQoMCk7XG4gICAgICAgIGxldCBzdGFydCA9IG1hdGNoLmZpbGxCZWZvcmUoZnJhZ21lbnQpLmFwcGVuZChmcmFnbWVudCk7XG4gICAgICAgIGZyYWdtZW50ID0gc3RhcnQuYXBwZW5kKG1hdGNoLm1hdGNoRnJhZ21lbnQoc3RhcnQpLmZpbGxCZWZvcmUoRnJhZ21lbnQuZW1wdHksIHRydWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50O1xufVxuZnVuY3Rpb24gcmVwbGFjZVJhbmdlV2l0aCh0ciwgZnJvbSwgdG8sIG5vZGUpIHtcbiAgICBpZiAoIW5vZGUuaXNJbmxpbmUgJiYgZnJvbSA9PSB0byAmJiB0ci5kb2MucmVzb2x2ZShmcm9tKS5wYXJlbnQuY29udGVudC5zaXplKSB7XG4gICAgICAgIGxldCBwb2ludCA9IGluc2VydFBvaW50KHRyLmRvYywgZnJvbSwgbm9kZS50eXBlKTtcbiAgICAgICAgaWYgKHBvaW50ICE9IG51bGwpXG4gICAgICAgICAgICBmcm9tID0gdG8gPSBwb2ludDtcbiAgICB9XG4gICAgdHIucmVwbGFjZVJhbmdlKGZyb20sIHRvLCBuZXcgU2xpY2UoRnJhZ21lbnQuZnJvbShub2RlKSwgMCwgMCkpO1xufVxuZnVuY3Rpb24gZGVsZXRlUmFuZ2UodHIsIGZyb20sIHRvKSB7XG4gICAgbGV0ICRmcm9tID0gdHIuZG9jLnJlc29sdmUoZnJvbSksICR0byA9IHRyLmRvYy5yZXNvbHZlKHRvKTtcbiAgICBsZXQgY292ZXJlZCA9IGNvdmVyZWREZXB0aHMoJGZyb20sICR0byk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3ZlcmVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBkZXB0aCA9IGNvdmVyZWRbaV0sIGxhc3QgPSBpID09IGNvdmVyZWQubGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKChsYXN0ICYmIGRlcHRoID09IDApIHx8ICRmcm9tLm5vZGUoZGVwdGgpLnR5cGUuY29udGVudE1hdGNoLnZhbGlkRW5kKVxuICAgICAgICAgICAgcmV0dXJuIHRyLmRlbGV0ZSgkZnJvbS5zdGFydChkZXB0aCksICR0by5lbmQoZGVwdGgpKTtcbiAgICAgICAgaWYgKGRlcHRoID4gMCAmJiAobGFzdCB8fCAkZnJvbS5ub2RlKGRlcHRoIC0gMSkuY2FuUmVwbGFjZSgkZnJvbS5pbmRleChkZXB0aCAtIDEpLCAkdG8uaW5kZXhBZnRlcihkZXB0aCAtIDEpKSkpXG4gICAgICAgICAgICByZXR1cm4gdHIuZGVsZXRlKCRmcm9tLmJlZm9yZShkZXB0aCksICR0by5hZnRlcihkZXB0aCkpO1xuICAgIH1cbiAgICBmb3IgKGxldCBkID0gMTsgZCA8PSAkZnJvbS5kZXB0aCAmJiBkIDw9ICR0by5kZXB0aDsgZCsrKSB7XG4gICAgICAgIGlmIChmcm9tIC0gJGZyb20uc3RhcnQoZCkgPT0gJGZyb20uZGVwdGggLSBkICYmIHRvID4gJGZyb20uZW5kKGQpICYmICR0by5lbmQoZCkgLSB0byAhPSAkdG8uZGVwdGggLSBkKVxuICAgICAgICAgICAgcmV0dXJuIHRyLmRlbGV0ZSgkZnJvbS5iZWZvcmUoZCksIHRvKTtcbiAgICB9XG4gICAgdHIuZGVsZXRlKGZyb20sIHRvKTtcbn1cbi8vIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGRlcHRocyBmb3Igd2hpY2ggJGZyb20gLSAkdG8gc3BhbnMgdGhlXG4vLyB3aG9sZSBjb250ZW50IG9mIHRoZSBub2RlcyBhdCB0aGF0IGRlcHRoLlxuZnVuY3Rpb24gY292ZXJlZERlcHRocygkZnJvbSwgJHRvKSB7XG4gICAgbGV0IHJlc3VsdCA9IFtdLCBtaW5EZXB0aCA9IE1hdGgubWluKCRmcm9tLmRlcHRoLCAkdG8uZGVwdGgpO1xuICAgIGZvciAobGV0IGQgPSBtaW5EZXB0aDsgZCA+PSAwOyBkLS0pIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gJGZyb20uc3RhcnQoZCk7XG4gICAgICAgIGlmIChzdGFydCA8ICRmcm9tLnBvcyAtICgkZnJvbS5kZXB0aCAtIGQpIHx8XG4gICAgICAgICAgICAkdG8uZW5kKGQpID4gJHRvLnBvcyArICgkdG8uZGVwdGggLSBkKSB8fFxuICAgICAgICAgICAgJGZyb20ubm9kZShkKS50eXBlLnNwZWMuaXNvbGF0aW5nIHx8XG4gICAgICAgICAgICAkdG8ubm9kZShkKS50eXBlLnNwZWMuaXNvbGF0aW5nKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGlmIChzdGFydCA9PSAkdG8uc3RhcnQoZCkgfHxcbiAgICAgICAgICAgIChkID09ICRmcm9tLmRlcHRoICYmIGQgPT0gJHRvLmRlcHRoICYmICRmcm9tLnBhcmVudC5pbmxpbmVDb250ZW50ICYmICR0by5wYXJlbnQuaW5saW5lQ29udGVudCAmJlxuICAgICAgICAgICAgICAgIGQgJiYgJHRvLnN0YXJ0KGQgLSAxKSA9PSBzdGFydCAtIDEpKVxuICAgICAgICAgICAgcmVzdWx0LnB1c2goZCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuVXBkYXRlIGFuIGF0dHJpYnV0ZSBpbiBhIHNwZWNpZmljIG5vZGUuXG4qL1xuY2xhc3MgQXR0clN0ZXAgZXh0ZW5kcyBTdGVwIHtcbiAgICAvKipcbiAgICBDb25zdHJ1Y3QgYW4gYXR0cmlidXRlIHN0ZXAuXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICBUaGUgcG9zaXRpb24gb2YgdGhlIHRhcmdldCBub2RlLlxuICAgICovXG4gICAgcG9zLCBcbiAgICAvKipcbiAgICBUaGUgYXR0cmlidXRlIHRvIHNldC5cbiAgICAqL1xuICAgIGF0dHIsIFxuICAgIC8vIFRoZSBhdHRyaWJ1dGUncyBuZXcgdmFsdWUuXG4gICAgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wb3MgPSBwb3M7XG4gICAgICAgIHRoaXMuYXR0ciA9IGF0dHI7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgYXBwbHkoZG9jKSB7XG4gICAgICAgIGxldCBub2RlID0gZG9jLm5vZGVBdCh0aGlzLnBvcyk7XG4gICAgICAgIGlmICghbm9kZSlcbiAgICAgICAgICAgIHJldHVybiBTdGVwUmVzdWx0LmZhaWwoXCJObyBub2RlIGF0IGF0dHJpYnV0ZSBzdGVwJ3MgcG9zaXRpb25cIik7XG4gICAgICAgIGxldCBhdHRycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGZvciAobGV0IG5hbWUgaW4gbm9kZS5hdHRycylcbiAgICAgICAgICAgIGF0dHJzW25hbWVdID0gbm9kZS5hdHRyc1tuYW1lXTtcbiAgICAgICAgYXR0cnNbdGhpcy5hdHRyXSA9IHRoaXMudmFsdWU7XG4gICAgICAgIGxldCB1cGRhdGVkID0gbm9kZS50eXBlLmNyZWF0ZShhdHRycywgbnVsbCwgbm9kZS5tYXJrcyk7XG4gICAgICAgIHJldHVybiBTdGVwUmVzdWx0LmZyb21SZXBsYWNlKGRvYywgdGhpcy5wb3MsIHRoaXMucG9zICsgMSwgbmV3IFNsaWNlKEZyYWdtZW50LmZyb20odXBkYXRlZCksIDAsIG5vZGUuaXNMZWFmID8gMCA6IDEpKTtcbiAgICB9XG4gICAgZ2V0TWFwKCkge1xuICAgICAgICByZXR1cm4gU3RlcE1hcC5lbXB0eTtcbiAgICB9XG4gICAgaW52ZXJ0KGRvYykge1xuICAgICAgICByZXR1cm4gbmV3IEF0dHJTdGVwKHRoaXMucG9zLCB0aGlzLmF0dHIsIGRvYy5ub2RlQXQodGhpcy5wb3MpLmF0dHJzW3RoaXMuYXR0cl0pO1xuICAgIH1cbiAgICBtYXAobWFwcGluZykge1xuICAgICAgICBsZXQgcG9zID0gbWFwcGluZy5tYXBSZXN1bHQodGhpcy5wb3MsIDEpO1xuICAgICAgICByZXR1cm4gcG9zLmRlbGV0ZWRBZnRlciA/IG51bGwgOiBuZXcgQXR0clN0ZXAocG9zLnBvcywgdGhpcy5hdHRyLCB0aGlzLnZhbHVlKTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4geyBzdGVwVHlwZTogXCJhdHRyXCIsIHBvczogdGhpcy5wb3MsIGF0dHI6IHRoaXMuYXR0ciwgdmFsdWU6IHRoaXMudmFsdWUgfTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21KU09OKHNjaGVtYSwganNvbikge1xuICAgICAgICBpZiAodHlwZW9mIGpzb24ucG9zICE9IFwibnVtYmVyXCIgfHwgdHlwZW9mIGpzb24uYXR0ciAhPSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIGlucHV0IGZvciBBdHRyU3RlcC5mcm9tSlNPTlwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBdHRyU3RlcChqc29uLnBvcywganNvbi5hdHRyLCBqc29uLnZhbHVlKTtcbiAgICB9XG59XG5TdGVwLmpzb25JRChcImF0dHJcIiwgQXR0clN0ZXApO1xuXG4vKipcbkBpbnRlcm5hbFxuKi9cbmxldCBUcmFuc2Zvcm1FcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3Ige1xufTtcblRyYW5zZm9ybUVycm9yID0gZnVuY3Rpb24gVHJhbnNmb3JtRXJyb3IobWVzc2FnZSkge1xuICAgIGxldCBlcnIgPSBFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuICAgIGVyci5fX3Byb3RvX18gPSBUcmFuc2Zvcm1FcnJvci5wcm90b3R5cGU7XG4gICAgcmV0dXJuIGVycjtcbn07XG5UcmFuc2Zvcm1FcnJvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5UcmFuc2Zvcm1FcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFuc2Zvcm1FcnJvcjtcblRyYW5zZm9ybUVycm9yLnByb3RvdHlwZS5uYW1lID0gXCJUcmFuc2Zvcm1FcnJvclwiO1xuLyoqXG5BYnN0cmFjdGlvbiB0byBidWlsZCB1cCBhbmQgdHJhY2sgYW4gYXJyYXkgb2ZcbltzdGVwc10oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI3RyYW5zZm9ybS5TdGVwKSByZXByZXNlbnRpbmcgYSBkb2N1bWVudCB0cmFuc2Zvcm1hdGlvbi5cblxuTW9zdCB0cmFuc2Zvcm1pbmcgbWV0aG9kcyByZXR1cm4gdGhlIGBUcmFuc2Zvcm1gIG9iamVjdCBpdHNlbGYsIHNvXG50aGF0IHRoZXkgY2FuIGJlIGNoYWluZWQuXG4qL1xuY2xhc3MgVHJhbnNmb3JtIHtcbiAgICAvKipcbiAgICBDcmVhdGUgYSB0cmFuc2Zvcm0gdGhhdCBzdGFydHMgd2l0aCB0aGUgZ2l2ZW4gZG9jdW1lbnQuXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICBUaGUgY3VycmVudCBkb2N1bWVudCAodGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgc3RlcHMgaW4gdGhlXG4gICAgdHJhbnNmb3JtKS5cbiAgICAqL1xuICAgIGRvYykge1xuICAgICAgICB0aGlzLmRvYyA9IGRvYztcbiAgICAgICAgLyoqXG4gICAgICAgIFRoZSBzdGVwcyBpbiB0aGlzIHRyYW5zZm9ybS5cbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdGVwcyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgVGhlIGRvY3VtZW50cyBiZWZvcmUgZWFjaCBvZiB0aGUgc3RlcHMuXG4gICAgICAgICovXG4gICAgICAgIHRoaXMuZG9jcyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgQSBtYXBwaW5nIHdpdGggdGhlIG1hcHMgZm9yIGVhY2ggb2YgdGhlIHN0ZXBzIGluIHRoaXMgdHJhbnNmb3JtLlxuICAgICAgICAqL1xuICAgICAgICB0aGlzLm1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICB9XG4gICAgLyoqXG4gICAgVGhlIHN0YXJ0aW5nIGRvY3VtZW50LlxuICAgICovXG4gICAgZ2V0IGJlZm9yZSgpIHsgcmV0dXJuIHRoaXMuZG9jcy5sZW5ndGggPyB0aGlzLmRvY3NbMF0gOiB0aGlzLmRvYzsgfVxuICAgIC8qKlxuICAgIEFwcGx5IGEgbmV3IHN0ZXAgaW4gdGhpcyB0cmFuc2Zvcm0sIHNhdmluZyB0aGUgcmVzdWx0LiBUaHJvd3MgYW5cbiAgICBlcnJvciB3aGVuIHRoZSBzdGVwIGZhaWxzLlxuICAgICovXG4gICAgc3RlcChzdGVwKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLm1heWJlU3RlcChzdGVwKTtcbiAgICAgICAgaWYgKHJlc3VsdC5mYWlsZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHJhbnNmb3JtRXJyb3IocmVzdWx0LmZhaWxlZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICBUcnkgdG8gYXBwbHkgYSBzdGVwIGluIHRoaXMgdHJhbnNmb3JtYXRpb24sIGlnbm9yaW5nIGl0IGlmIGl0XG4gICAgZmFpbHMuIFJldHVybnMgdGhlIHN0ZXAgcmVzdWx0LlxuICAgICovXG4gICAgbWF5YmVTdGVwKHN0ZXApIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHN0ZXAuYXBwbHkodGhpcy5kb2MpO1xuICAgICAgICBpZiAoIXJlc3VsdC5mYWlsZWQpXG4gICAgICAgICAgICB0aGlzLmFkZFN0ZXAoc3RlcCwgcmVzdWx0LmRvYyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgIFRydWUgd2hlbiB0aGUgZG9jdW1lbnQgaGFzIGJlZW4gY2hhbmdlZCAod2hlbiB0aGVyZSBhcmUgYW55XG4gICAgc3RlcHMpLlxuICAgICovXG4gICAgZ2V0IGRvY0NoYW5nZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBzLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgYWRkU3RlcChzdGVwLCBkb2MpIHtcbiAgICAgICAgdGhpcy5kb2NzLnB1c2godGhpcy5kb2MpO1xuICAgICAgICB0aGlzLnN0ZXBzLnB1c2goc3RlcCk7XG4gICAgICAgIHRoaXMubWFwcGluZy5hcHBlbmRNYXAoc3RlcC5nZXRNYXAoKSk7XG4gICAgICAgIHRoaXMuZG9jID0gZG9jO1xuICAgIH1cbiAgICAvKipcbiAgICBSZXBsYWNlIHRoZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBiZXR3ZWVuIGBmcm9tYCBhbmQgYHRvYCB3aXRoIHRoZVxuICAgIGdpdmVuIGBzbGljZWAuXG4gICAgKi9cbiAgICByZXBsYWNlKGZyb20sIHRvID0gZnJvbSwgc2xpY2UgPSBTbGljZS5lbXB0eSkge1xuICAgICAgICBsZXQgc3RlcCA9IHJlcGxhY2VTdGVwKHRoaXMuZG9jLCBmcm9tLCB0bywgc2xpY2UpO1xuICAgICAgICBpZiAoc3RlcClcbiAgICAgICAgICAgIHRoaXMuc3RlcChzdGVwKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgIFJlcGxhY2UgdGhlIGdpdmVuIHJhbmdlIHdpdGggdGhlIGdpdmVuIGNvbnRlbnQsIHdoaWNoIG1heSBiZSBhXG4gICAgZnJhZ21lbnQsIG5vZGUsIG9yIGFycmF5IG9mIG5vZGVzLlxuICAgICovXG4gICAgcmVwbGFjZVdpdGgoZnJvbSwgdG8sIGNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwbGFjZShmcm9tLCB0bywgbmV3IFNsaWNlKEZyYWdtZW50LmZyb20oY29udGVudCksIDAsIDApKTtcbiAgICB9XG4gICAgLyoqXG4gICAgRGVsZXRlIHRoZSBjb250ZW50IGJldHdlZW4gdGhlIGdpdmVuIHBvc2l0aW9ucy5cbiAgICAqL1xuICAgIGRlbGV0ZShmcm9tLCB0bykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXBsYWNlKGZyb20sIHRvLCBTbGljZS5lbXB0eSk7XG4gICAgfVxuICAgIC8qKlxuICAgIEluc2VydCB0aGUgZ2l2ZW4gY29udGVudCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24uXG4gICAgKi9cbiAgICBpbnNlcnQocG9zLCBjb250ZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcGxhY2VXaXRoKHBvcywgcG9zLCBjb250ZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgUmVwbGFjZSBhIHJhbmdlIG9mIHRoZSBkb2N1bWVudCB3aXRoIGEgZ2l2ZW4gc2xpY2UsIHVzaW5nXG4gICAgYGZyb21gLCBgdG9gLCBhbmQgdGhlIHNsaWNlJ3NcbiAgICBbYG9wZW5TdGFydGBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNtb2RlbC5TbGljZS5vcGVuU3RhcnQpIHByb3BlcnR5IGFzIGhpbnRzLCByYXRoZXJcbiAgICB0aGFuIGZpeGVkIHN0YXJ0IGFuZCBlbmQgcG9pbnRzLiBUaGlzIG1ldGhvZCBtYXkgZ3JvdyB0aGVcbiAgICByZXBsYWNlZCBhcmVhIG9yIGNsb3NlIG9wZW4gbm9kZXMgaW4gdGhlIHNsaWNlIGluIG9yZGVyIHRvIGdldCBhXG4gICAgZml0IHRoYXQgaXMgbW9yZSBpbiBsaW5lIHdpdGggV1lTSVdZRyBleHBlY3RhdGlvbnMsIGJ5IGRyb3BwaW5nXG4gICAgZnVsbHkgY292ZXJlZCBwYXJlbnQgbm9kZXMgb2YgdGhlIHJlcGxhY2VkIHJlZ2lvbiB3aGVuIHRoZXkgYXJlXG4gICAgbWFya2VkIFtub24tZGVmaW5pbmcgYXNcbiAgICBjb250ZXh0XShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jbW9kZWwuTm9kZVNwZWMuZGVmaW5pbmdBc0NvbnRleHQpLCBvciBpbmNsdWRpbmcgYW5cbiAgICBvcGVuIHBhcmVudCBub2RlIGZyb20gdGhlIHNsaWNlIHRoYXQgX2lzXyBtYXJrZWQgYXMgW2RlZmluaW5nXG4gICAgaXRzIGNvbnRlbnRdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNtb2RlbC5Ob2RlU3BlYy5kZWZpbmluZ0ZvckNvbnRlbnQpLlxuICAgIFxuICAgIFRoaXMgaXMgdGhlIG1ldGhvZCwgZm9yIGV4YW1wbGUsIHRvIGhhbmRsZSBwYXN0ZS4gVGhlIHNpbWlsYXJcbiAgICBbYHJlcGxhY2VgXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jdHJhbnNmb3JtLlRyYW5zZm9ybS5yZXBsYWNlKSBtZXRob2QgaXMgYSBtb3JlXG4gICAgcHJpbWl0aXZlIHRvb2wgd2hpY2ggd2lsbCBfbm90XyBtb3ZlIHRoZSBzdGFydCBhbmQgZW5kIG9mIGl0cyBnaXZlblxuICAgIHJhbmdlLCBhbmQgaXMgdXNlZnVsIGluIHNpdHVhdGlvbnMgd2hlcmUgeW91IG5lZWQgbW9yZSBwcmVjaXNlXG4gICAgY29udHJvbCBvdmVyIHdoYXQgaGFwcGVucy5cbiAgICAqL1xuICAgIHJlcGxhY2VSYW5nZShmcm9tLCB0bywgc2xpY2UpIHtcbiAgICAgICAgcmVwbGFjZVJhbmdlKHRoaXMsIGZyb20sIHRvLCBzbGljZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICBSZXBsYWNlIHRoZSBnaXZlbiByYW5nZSB3aXRoIGEgbm9kZSwgYnV0IHVzZSBgZnJvbWAgYW5kIGB0b2AgYXNcbiAgICBoaW50cywgcmF0aGVyIHRoYW4gcHJlY2lzZSBwb3NpdGlvbnMuIFdoZW4gZnJvbSBhbmQgdG8gYXJlIHRoZSBzYW1lXG4gICAgYW5kIGFyZSBhdCB0aGUgc3RhcnQgb3IgZW5kIG9mIGEgcGFyZW50IG5vZGUgaW4gd2hpY2ggdGhlIGdpdmVuXG4gICAgbm9kZSBkb2Vzbid0IGZpdCwgdGhpcyBtZXRob2QgbWF5IF9tb3ZlXyB0aGVtIG91dCB0b3dhcmRzIGEgcGFyZW50XG4gICAgdGhhdCBkb2VzIGFsbG93IHRoZSBnaXZlbiBub2RlIHRvIGJlIHBsYWNlZC4gV2hlbiB0aGUgZ2l2ZW4gcmFuZ2VcbiAgICBjb21wbGV0ZWx5IGNvdmVycyBhIHBhcmVudCBub2RlLCB0aGlzIG1ldGhvZCBtYXkgY29tcGxldGVseSByZXBsYWNlXG4gICAgdGhhdCBwYXJlbnQgbm9kZS5cbiAgICAqL1xuICAgIHJlcGxhY2VSYW5nZVdpdGgoZnJvbSwgdG8sIG5vZGUpIHtcbiAgICAgICAgcmVwbGFjZVJhbmdlV2l0aCh0aGlzLCBmcm9tLCB0bywgbm9kZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICBEZWxldGUgdGhlIGdpdmVuIHJhbmdlLCBleHBhbmRpbmcgaXQgdG8gY292ZXIgZnVsbHkgY292ZXJlZFxuICAgIHBhcmVudCBub2RlcyB1bnRpbCBhIHZhbGlkIHJlcGxhY2UgaXMgZm91bmQuXG4gICAgKi9cbiAgICBkZWxldGVSYW5nZShmcm9tLCB0bykge1xuICAgICAgICBkZWxldGVSYW5nZSh0aGlzLCBmcm9tLCB0byk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICBTcGxpdCB0aGUgY29udGVudCBpbiB0aGUgZ2l2ZW4gcmFuZ2Ugb2ZmIGZyb20gaXRzIHBhcmVudCwgaWYgdGhlcmVcbiAgICBpcyBzaWJsaW5nIGNvbnRlbnQgYmVmb3JlIG9yIGFmdGVyIGl0LCBhbmQgbW92ZSBpdCB1cCB0aGUgdHJlZSB0b1xuICAgIHRoZSBkZXB0aCBzcGVjaWZpZWQgYnkgYHRhcmdldGAuIFlvdSdsbCBwcm9iYWJseSB3YW50IHRvIHVzZVxuICAgIFtgbGlmdFRhcmdldGBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyN0cmFuc2Zvcm0ubGlmdFRhcmdldCkgdG8gY29tcHV0ZSBgdGFyZ2V0YCwgdG8gbWFrZVxuICAgIHN1cmUgdGhlIGxpZnQgaXMgdmFsaWQuXG4gICAgKi9cbiAgICBsaWZ0KHJhbmdlLCB0YXJnZXQpIHtcbiAgICAgICAgbGlmdCh0aGlzLCByYW5nZSwgdGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgIEpvaW4gdGhlIGJsb2NrcyBhcm91bmQgdGhlIGdpdmVuIHBvc2l0aW9uLiBJZiBkZXB0aCBpcyAyLCB0aGVpclxuICAgIGxhc3QgYW5kIGZpcnN0IHNpYmxpbmdzIGFyZSBhbHNvIGpvaW5lZCwgYW5kIHNvIG9uLlxuICAgICovXG4gICAgam9pbihwb3MsIGRlcHRoID0gMSkge1xuICAgICAgICBqb2luKHRoaXMsIHBvcywgZGVwdGgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgV3JhcCB0aGUgZ2l2ZW4gW3JhbmdlXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jbW9kZWwuTm9kZVJhbmdlKSBpbiB0aGUgZ2l2ZW4gc2V0IG9mIHdyYXBwZXJzLlxuICAgIFRoZSB3cmFwcGVycyBhcmUgYXNzdW1lZCB0byBiZSB2YWxpZCBpbiB0aGlzIHBvc2l0aW9uLCBhbmQgc2hvdWxkXG4gICAgcHJvYmFibHkgYmUgY29tcHV0ZWQgd2l0aCBbYGZpbmRXcmFwcGluZ2BdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyN0cmFuc2Zvcm0uZmluZFdyYXBwaW5nKS5cbiAgICAqL1xuICAgIHdyYXAocmFuZ2UsIHdyYXBwZXJzKSB7XG4gICAgICAgIHdyYXAodGhpcywgcmFuZ2UsIHdyYXBwZXJzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgIFNldCB0aGUgdHlwZSBvZiBhbGwgdGV4dGJsb2NrcyAocGFydGx5KSBiZXR3ZWVuIGBmcm9tYCBhbmQgYHRvYCB0b1xuICAgIHRoZSBnaXZlbiBub2RlIHR5cGUgd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRlcy5cbiAgICAqL1xuICAgIHNldEJsb2NrVHlwZShmcm9tLCB0byA9IGZyb20sIHR5cGUsIGF0dHJzID0gbnVsbCkge1xuICAgICAgICBzZXRCbG9ja1R5cGUodGhpcywgZnJvbSwgdG8sIHR5cGUsIGF0dHJzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgIENoYW5nZSB0aGUgdHlwZSwgYXR0cmlidXRlcywgYW5kL29yIG1hcmtzIG9mIHRoZSBub2RlIGF0IGBwb3NgLlxuICAgIFdoZW4gYHR5cGVgIGlzbid0IGdpdmVuLCB0aGUgZXhpc3Rpbmcgbm9kZSB0eXBlIGlzIHByZXNlcnZlZCxcbiAgICAqL1xuICAgIHNldE5vZGVNYXJrdXAocG9zLCB0eXBlLCBhdHRycyA9IG51bGwsIG1hcmtzKSB7XG4gICAgICAgIHNldE5vZGVNYXJrdXAodGhpcywgcG9zLCB0eXBlLCBhdHRycywgbWFya3MpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgU2V0IGEgc2luZ2xlIGF0dHJpYnV0ZSBvbiBhIGdpdmVuIG5vZGUgdG8gYSBuZXcgdmFsdWUuXG4gICAgKi9cbiAgICBzZXROb2RlQXR0cmlidXRlKHBvcywgYXR0ciwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5zdGVwKG5ldyBBdHRyU3RlcChwb3MsIGF0dHIsIHZhbHVlKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICBBZGQgYSBtYXJrIHRvIHRoZSBub2RlIGF0IHBvc2l0aW9uIGBwb3NgLlxuICAgICovXG4gICAgYWRkTm9kZU1hcmsocG9zLCBtYXJrKSB7XG4gICAgICAgIHRoaXMuc3RlcChuZXcgQWRkTm9kZU1hcmtTdGVwKHBvcywgbWFyaykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgUmVtb3ZlIGEgbWFyayAob3IgYSBtYXJrIG9mIHRoZSBnaXZlbiB0eXBlKSBmcm9tIHRoZSBub2RlIGF0XG4gICAgcG9zaXRpb24gYHBvc2AuXG4gICAgKi9cbiAgICByZW1vdmVOb2RlTWFyayhwb3MsIG1hcmspIHtcbiAgICAgICAgaWYgKCEobWFyayBpbnN0YW5jZW9mIE1hcmspKSB7XG4gICAgICAgICAgICBsZXQgbm9kZSA9IHRoaXMuZG9jLm5vZGVBdChwb3MpO1xuICAgICAgICAgICAgaWYgKCFub2RlKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTm8gbm9kZSBhdCBwb3NpdGlvbiBcIiArIHBvcyk7XG4gICAgICAgICAgICBtYXJrID0gbWFyay5pc0luU2V0KG5vZGUubWFya3MpO1xuICAgICAgICAgICAgaWYgKCFtYXJrKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RlcChuZXcgUmVtb3ZlTm9kZU1hcmtTdGVwKHBvcywgbWFyaykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgU3BsaXQgdGhlIG5vZGUgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLCBhbmQgb3B0aW9uYWxseSwgaWYgYGRlcHRoYCBpc1xuICAgIGdyZWF0ZXIgdGhhbiBvbmUsIGFueSBudW1iZXIgb2Ygbm9kZXMgYWJvdmUgdGhhdC4gQnkgZGVmYXVsdCwgdGhlXG4gICAgcGFydHMgc3BsaXQgb2ZmIHdpbGwgaW5oZXJpdCB0aGUgbm9kZSB0eXBlIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgIFRoaXMgY2FuIGJlIGNoYW5nZWQgYnkgcGFzc2luZyBhbiBhcnJheSBvZiB0eXBlcyBhbmQgYXR0cmlidXRlcyB0b1xuICAgIHVzZSBhZnRlciB0aGUgc3BsaXQuXG4gICAgKi9cbiAgICBzcGxpdChwb3MsIGRlcHRoID0gMSwgdHlwZXNBZnRlcikge1xuICAgICAgICBzcGxpdCh0aGlzLCBwb3MsIGRlcHRoLCB0eXBlc0FmdGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgIEFkZCB0aGUgZ2l2ZW4gbWFyayB0byB0aGUgaW5saW5lIGNvbnRlbnQgYmV0d2VlbiBgZnJvbWAgYW5kIGB0b2AuXG4gICAgKi9cbiAgICBhZGRNYXJrKGZyb20sIHRvLCBtYXJrKSB7XG4gICAgICAgIGFkZE1hcmsodGhpcywgZnJvbSwgdG8sIG1hcmspO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgUmVtb3ZlIG1hcmtzIGZyb20gaW5saW5lIG5vZGVzIGJldHdlZW4gYGZyb21gIGFuZCBgdG9gLiBXaGVuXG4gICAgYG1hcmtgIGlzIGEgc2luZ2xlIG1hcmssIHJlbW92ZSBwcmVjaXNlbHkgdGhhdCBtYXJrLiBXaGVuIGl0IGlzXG4gICAgYSBtYXJrIHR5cGUsIHJlbW92ZSBhbGwgbWFya3Mgb2YgdGhhdCB0eXBlLiBXaGVuIGl0IGlzIG51bGwsXG4gICAgcmVtb3ZlIGFsbCBtYXJrcyBvZiBhbnkgdHlwZS5cbiAgICAqL1xuICAgIHJlbW92ZU1hcmsoZnJvbSwgdG8sIG1hcmspIHtcbiAgICAgICAgcmVtb3ZlTWFyayh0aGlzLCBmcm9tLCB0bywgbWFyayk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICBSZW1vdmVzIGFsbCBtYXJrcyBhbmQgbm9kZXMgZnJvbSB0aGUgY29udGVudCBvZiB0aGUgbm9kZSBhdFxuICAgIGBwb3NgIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGdpdmVuIG5ldyBwYXJlbnQgbm9kZSB0eXBlLiBBY2NlcHRzXG4gICAgYW4gb3B0aW9uYWwgc3RhcnRpbmcgW2NvbnRlbnQgbWF0Y2hdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNtb2RlbC5Db250ZW50TWF0Y2gpIGFzXG4gICAgdGhpcmQgYXJndW1lbnQuXG4gICAgKi9cbiAgICBjbGVhckluY29tcGF0aWJsZShwb3MsIHBhcmVudFR5cGUsIG1hdGNoKSB7XG4gICAgICAgIGNsZWFySW5jb21wYXRpYmxlKHRoaXMsIHBvcywgcGFyZW50VHlwZSwgbWF0Y2gpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmV4cG9ydCB7IEFkZE1hcmtTdGVwLCBBZGROb2RlTWFya1N0ZXAsIEF0dHJTdGVwLCBNYXBSZXN1bHQsIE1hcHBpbmcsIFJlbW92ZU1hcmtTdGVwLCBSZW1vdmVOb2RlTWFya1N0ZXAsIFJlcGxhY2VBcm91bmRTdGVwLCBSZXBsYWNlU3RlcCwgU3RlcCwgU3RlcE1hcCwgU3RlcFJlc3VsdCwgVHJhbnNmb3JtLCBUcmFuc2Zvcm1FcnJvciwgY2FuSm9pbiwgY2FuU3BsaXQsIGRyb3BQb2ludCwgZmluZFdyYXBwaW5nLCBpbnNlcnRQb2ludCwgam9pblBvaW50LCBsaWZ0VGFyZ2V0LCByZXBsYWNlU3RlcCB9O1xuIiwiaW1wb3J0IHsgU2xpY2UsIEZyYWdtZW50LCBNYXJrLCBOb2RlIH0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuaW1wb3J0IHsgUmVwbGFjZVN0ZXAsIFJlcGxhY2VBcm91bmRTdGVwLCBUcmFuc2Zvcm0gfSBmcm9tICdwcm9zZW1pcnJvci10cmFuc2Zvcm0nO1xuXG5jb25zdCBjbGFzc2VzQnlJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKipcblN1cGVyY2xhc3MgZm9yIGVkaXRvciBzZWxlY3Rpb25zLiBFdmVyeSBzZWxlY3Rpb24gdHlwZSBzaG91bGRcbmV4dGVuZCB0aGlzLiBTaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseS5cbiovXG5jbGFzcyBTZWxlY3Rpb24ge1xuICAgIC8qKlxuICAgIEluaXRpYWxpemUgYSBzZWxlY3Rpb24gd2l0aCB0aGUgaGVhZCBhbmQgYW5jaG9yIGFuZCByYW5nZXMuIElmIG5vXG4gICAgcmFuZ2VzIGFyZSBnaXZlbiwgY29uc3RydWN0cyBhIHNpbmdsZSByYW5nZSBhY3Jvc3MgYCRhbmNob3JgIGFuZFxuICAgIGAkaGVhZGAuXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICBUaGUgcmVzb2x2ZWQgYW5jaG9yIG9mIHRoZSBzZWxlY3Rpb24gKHRoZSBzaWRlIHRoYXQgc3RheXMgaW5cbiAgICBwbGFjZSB3aGVuIHRoZSBzZWxlY3Rpb24gaXMgbW9kaWZpZWQpLlxuICAgICovXG4gICAgJGFuY2hvciwgXG4gICAgLyoqXG4gICAgVGhlIHJlc29sdmVkIGhlYWQgb2YgdGhlIHNlbGVjdGlvbiAodGhlIHNpZGUgdGhhdCBtb3ZlcyB3aGVuXG4gICAgdGhlIHNlbGVjdGlvbiBpcyBtb2RpZmllZCkuXG4gICAgKi9cbiAgICAkaGVhZCwgcmFuZ2VzKSB7XG4gICAgICAgIHRoaXMuJGFuY2hvciA9ICRhbmNob3I7XG4gICAgICAgIHRoaXMuJGhlYWQgPSAkaGVhZDtcbiAgICAgICAgdGhpcy5yYW5nZXMgPSByYW5nZXMgfHwgW25ldyBTZWxlY3Rpb25SYW5nZSgkYW5jaG9yLm1pbigkaGVhZCksICRhbmNob3IubWF4KCRoZWFkKSldO1xuICAgIH1cbiAgICAvKipcbiAgICBUaGUgc2VsZWN0aW9uJ3MgYW5jaG9yLCBhcyBhbiB1bnJlc29sdmVkIHBvc2l0aW9uLlxuICAgICovXG4gICAgZ2V0IGFuY2hvcigpIHsgcmV0dXJuIHRoaXMuJGFuY2hvci5wb3M7IH1cbiAgICAvKipcbiAgICBUaGUgc2VsZWN0aW9uJ3MgaGVhZC5cbiAgICAqL1xuICAgIGdldCBoZWFkKCkgeyByZXR1cm4gdGhpcy4kaGVhZC5wb3M7IH1cbiAgICAvKipcbiAgICBUaGUgbG93ZXIgYm91bmQgb2YgdGhlIHNlbGVjdGlvbidzIG1haW4gcmFuZ2UuXG4gICAgKi9cbiAgICBnZXQgZnJvbSgpIHsgcmV0dXJuIHRoaXMuJGZyb20ucG9zOyB9XG4gICAgLyoqXG4gICAgVGhlIHVwcGVyIGJvdW5kIG9mIHRoZSBzZWxlY3Rpb24ncyBtYWluIHJhbmdlLlxuICAgICovXG4gICAgZ2V0IHRvKCkgeyByZXR1cm4gdGhpcy4kdG8ucG9zOyB9XG4gICAgLyoqXG4gICAgVGhlIHJlc29sdmVkIGxvd2VyICBib3VuZCBvZiB0aGUgc2VsZWN0aW9uJ3MgbWFpbiByYW5nZS5cbiAgICAqL1xuICAgIGdldCAkZnJvbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VzWzBdLiRmcm9tO1xuICAgIH1cbiAgICAvKipcbiAgICBUaGUgcmVzb2x2ZWQgdXBwZXIgYm91bmQgb2YgdGhlIHNlbGVjdGlvbidzIG1haW4gcmFuZ2UuXG4gICAgKi9cbiAgICBnZXQgJHRvKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYW5nZXNbMF0uJHRvO1xuICAgIH1cbiAgICAvKipcbiAgICBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc2VsZWN0aW9uIGNvbnRhaW5zIGFueSBjb250ZW50LlxuICAgICovXG4gICAgZ2V0IGVtcHR5KCkge1xuICAgICAgICBsZXQgcmFuZ2VzID0gdGhpcy5yYW5nZXM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgaWYgKHJhbmdlc1tpXS4kZnJvbS5wb3MgIT0gcmFuZ2VzW2ldLiR0by5wb3MpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgR2V0IHRoZSBjb250ZW50IG9mIHRoaXMgc2VsZWN0aW9uIGFzIGEgc2xpY2UuXG4gICAgKi9cbiAgICBjb250ZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kZnJvbS5kb2Muc2xpY2UodGhpcy5mcm9tLCB0aGlzLnRvLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgUmVwbGFjZSB0aGUgc2VsZWN0aW9uIHdpdGggYSBzbGljZSBvciwgaWYgbm8gc2xpY2UgaXMgZ2l2ZW4sXG4gICAgZGVsZXRlIHRoZSBzZWxlY3Rpb24uIFdpbGwgYXBwZW5kIHRvIHRoZSBnaXZlbiB0cmFuc2FjdGlvbi5cbiAgICAqL1xuICAgIHJlcGxhY2UodHIsIGNvbnRlbnQgPSBTbGljZS5lbXB0eSkge1xuICAgICAgICAvLyBQdXQgdGhlIG5ldyBzZWxlY3Rpb24gYXQgdGhlIHBvc2l0aW9uIGFmdGVyIHRoZSBpbnNlcnRlZFxuICAgICAgICAvLyBjb250ZW50LiBXaGVuIHRoYXQgZW5kZWQgaW4gYW4gaW5saW5lIG5vZGUsIHNlYXJjaCBiYWNrd2FyZHMsXG4gICAgICAgIC8vIHRvIGdldCB0aGUgcG9zaXRpb24gYWZ0ZXIgdGhhdCBub2RlLiBJZiBub3QsIHNlYXJjaCBmb3J3YXJkLlxuICAgICAgICBsZXQgbGFzdE5vZGUgPSBjb250ZW50LmNvbnRlbnQubGFzdENoaWxkLCBsYXN0UGFyZW50ID0gbnVsbDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250ZW50Lm9wZW5FbmQ7IGkrKykge1xuICAgICAgICAgICAgbGFzdFBhcmVudCA9IGxhc3ROb2RlO1xuICAgICAgICAgICAgbGFzdE5vZGUgPSBsYXN0Tm9kZS5sYXN0Q2hpbGQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1hcEZyb20gPSB0ci5zdGVwcy5sZW5ndGgsIHJhbmdlcyA9IHRoaXMucmFuZ2VzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHsgJGZyb20sICR0byB9ID0gcmFuZ2VzW2ldLCBtYXBwaW5nID0gdHIubWFwcGluZy5zbGljZShtYXBGcm9tKTtcbiAgICAgICAgICAgIHRyLnJlcGxhY2VSYW5nZShtYXBwaW5nLm1hcCgkZnJvbS5wb3MpLCBtYXBwaW5nLm1hcCgkdG8ucG9zKSwgaSA/IFNsaWNlLmVtcHR5IDogY29udGVudCk7XG4gICAgICAgICAgICBpZiAoaSA9PSAwKVxuICAgICAgICAgICAgICAgIHNlbGVjdGlvblRvSW5zZXJ0aW9uRW5kKHRyLCBtYXBGcm9tLCAobGFzdE5vZGUgPyBsYXN0Tm9kZS5pc0lubGluZSA6IGxhc3RQYXJlbnQgJiYgbGFzdFBhcmVudC5pc1RleHRibG9jaykgPyAtMSA6IDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgIFJlcGxhY2UgdGhlIHNlbGVjdGlvbiB3aXRoIHRoZSBnaXZlbiBub2RlLCBhcHBlbmRpbmcgdGhlIGNoYW5nZXNcbiAgICB0byB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24uXG4gICAgKi9cbiAgICByZXBsYWNlV2l0aCh0ciwgbm9kZSkge1xuICAgICAgICBsZXQgbWFwRnJvbSA9IHRyLnN0ZXBzLmxlbmd0aCwgcmFuZ2VzID0gdGhpcy5yYW5nZXM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgeyAkZnJvbSwgJHRvIH0gPSByYW5nZXNbaV0sIG1hcHBpbmcgPSB0ci5tYXBwaW5nLnNsaWNlKG1hcEZyb20pO1xuICAgICAgICAgICAgbGV0IGZyb20gPSBtYXBwaW5nLm1hcCgkZnJvbS5wb3MpLCB0byA9IG1hcHBpbmcubWFwKCR0by5wb3MpO1xuICAgICAgICAgICAgaWYgKGkpIHtcbiAgICAgICAgICAgICAgICB0ci5kZWxldGVSYW5nZShmcm9tLCB0byk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ci5yZXBsYWNlUmFuZ2VXaXRoKGZyb20sIHRvLCBub2RlKTtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Ub0luc2VydGlvbkVuZCh0ciwgbWFwRnJvbSwgbm9kZS5pc0lubGluZSA/IC0xIDogMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgRmluZCBhIHZhbGlkIGN1cnNvciBvciBsZWFmIG5vZGUgc2VsZWN0aW9uIHN0YXJ0aW5nIGF0IHRoZSBnaXZlblxuICAgIHBvc2l0aW9uIGFuZCBzZWFyY2hpbmcgYmFjayBpZiBgZGlyYCBpcyBuZWdhdGl2ZSwgYW5kIGZvcndhcmQgaWZcbiAgICBwb3NpdGl2ZS4gV2hlbiBgdGV4dE9ubHlgIGlzIHRydWUsIG9ubHkgY29uc2lkZXIgY3Vyc29yXG4gICAgc2VsZWN0aW9ucy4gV2lsbCByZXR1cm4gbnVsbCB3aGVuIG5vIHZhbGlkIHNlbGVjdGlvbiBwb3NpdGlvbiBpc1xuICAgIGZvdW5kLlxuICAgICovXG4gICAgc3RhdGljIGZpbmRGcm9tKCRwb3MsIGRpciwgdGV4dE9ubHkgPSBmYWxzZSkge1xuICAgICAgICBsZXQgaW5uZXIgPSAkcG9zLnBhcmVudC5pbmxpbmVDb250ZW50ID8gbmV3IFRleHRTZWxlY3Rpb24oJHBvcylcbiAgICAgICAgICAgIDogZmluZFNlbGVjdGlvbkluKCRwb3Mubm9kZSgwKSwgJHBvcy5wYXJlbnQsICRwb3MucG9zLCAkcG9zLmluZGV4KCksIGRpciwgdGV4dE9ubHkpO1xuICAgICAgICBpZiAoaW5uZXIpXG4gICAgICAgICAgICByZXR1cm4gaW5uZXI7XG4gICAgICAgIGZvciAobGV0IGRlcHRoID0gJHBvcy5kZXB0aCAtIDE7IGRlcHRoID49IDA7IGRlcHRoLS0pIHtcbiAgICAgICAgICAgIGxldCBmb3VuZCA9IGRpciA8IDBcbiAgICAgICAgICAgICAgICA/IGZpbmRTZWxlY3Rpb25JbigkcG9zLm5vZGUoMCksICRwb3Mubm9kZShkZXB0aCksICRwb3MuYmVmb3JlKGRlcHRoICsgMSksICRwb3MuaW5kZXgoZGVwdGgpLCBkaXIsIHRleHRPbmx5KVxuICAgICAgICAgICAgICAgIDogZmluZFNlbGVjdGlvbkluKCRwb3Mubm9kZSgwKSwgJHBvcy5ub2RlKGRlcHRoKSwgJHBvcy5hZnRlcihkZXB0aCArIDEpLCAkcG9zLmluZGV4KGRlcHRoKSArIDEsIGRpciwgdGV4dE9ubHkpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKVxuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgRmluZCBhIHZhbGlkIGN1cnNvciBvciBsZWFmIG5vZGUgc2VsZWN0aW9uIG5lYXIgdGhlIGdpdmVuXG4gICAgcG9zaXRpb24uIFNlYXJjaGVzIGZvcndhcmQgZmlyc3QgYnkgZGVmYXVsdCwgYnV0IGlmIGBiaWFzYCBpc1xuICAgIG5lZ2F0aXZlLCBpdCB3aWxsIHNlYXJjaCBiYWNrd2FyZHMgZmlyc3QuXG4gICAgKi9cbiAgICBzdGF0aWMgbmVhcigkcG9zLCBiaWFzID0gMSkge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kRnJvbSgkcG9zLCBiaWFzKSB8fCB0aGlzLmZpbmRGcm9tKCRwb3MsIC1iaWFzKSB8fCBuZXcgQWxsU2VsZWN0aW9uKCRwb3Mubm9kZSgwKSk7XG4gICAgfVxuICAgIC8qKlxuICAgIEZpbmQgdGhlIGN1cnNvciBvciBsZWFmIG5vZGUgc2VsZWN0aW9uIGNsb3Nlc3QgdG8gdGhlIHN0YXJ0IG9mXG4gICAgdGhlIGdpdmVuIGRvY3VtZW50LiBXaWxsIHJldHVybiBhblxuICAgIFtgQWxsU2VsZWN0aW9uYF0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI3N0YXRlLkFsbFNlbGVjdGlvbikgaWYgbm8gdmFsaWQgcG9zaXRpb25cbiAgICBleGlzdHMuXG4gICAgKi9cbiAgICBzdGF0aWMgYXRTdGFydChkb2MpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRTZWxlY3Rpb25Jbihkb2MsIGRvYywgMCwgMCwgMSkgfHwgbmV3IEFsbFNlbGVjdGlvbihkb2MpO1xuICAgIH1cbiAgICAvKipcbiAgICBGaW5kIHRoZSBjdXJzb3Igb3IgbGVhZiBub2RlIHNlbGVjdGlvbiBjbG9zZXN0IHRvIHRoZSBlbmQgb2YgdGhlXG4gICAgZ2l2ZW4gZG9jdW1lbnQuXG4gICAgKi9cbiAgICBzdGF0aWMgYXRFbmQoZG9jKSB7XG4gICAgICAgIHJldHVybiBmaW5kU2VsZWN0aW9uSW4oZG9jLCBkb2MsIGRvYy5jb250ZW50LnNpemUsIGRvYy5jaGlsZENvdW50LCAtMSkgfHwgbmV3IEFsbFNlbGVjdGlvbihkb2MpO1xuICAgIH1cbiAgICAvKipcbiAgICBEZXNlcmlhbGl6ZSB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIHNlbGVjdGlvbi4gTXVzdCBiZVxuICAgIGltcGxlbWVudGVkIGZvciBjdXN0b20gY2xhc3NlcyAoYXMgYSBzdGF0aWMgY2xhc3MgbWV0aG9kKS5cbiAgICAqL1xuICAgIHN0YXRpYyBmcm9tSlNPTihkb2MsIGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uIHx8ICFqc29uLnR5cGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgaW5wdXQgZm9yIFNlbGVjdGlvbi5mcm9tSlNPTlwiKTtcbiAgICAgICAgbGV0IGNscyA9IGNsYXNzZXNCeUlkW2pzb24udHlwZV07XG4gICAgICAgIGlmICghY2xzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5vIHNlbGVjdGlvbiB0eXBlICR7anNvbi50eXBlfSBkZWZpbmVkYCk7XG4gICAgICAgIHJldHVybiBjbHMuZnJvbUpTT04oZG9jLCBqc29uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgVG8gYmUgYWJsZSB0byBkZXNlcmlhbGl6ZSBzZWxlY3Rpb25zIGZyb20gSlNPTiwgY3VzdG9tIHNlbGVjdGlvblxuICAgIGNsYXNzZXMgbXVzdCByZWdpc3RlciB0aGVtc2VsdmVzIHdpdGggYW4gSUQgc3RyaW5nLCBzbyB0aGF0IHRoZXlcbiAgICBjYW4gYmUgZGlzYW1iaWd1YXRlZC4gVHJ5IHRvIHBpY2sgc29tZXRoaW5nIHRoYXQncyB1bmxpa2VseSB0b1xuICAgIGNsYXNoIHdpdGggY2xhc3NlcyBmcm9tIG90aGVyIG1vZHVsZXMuXG4gICAgKi9cbiAgICBzdGF0aWMganNvbklEKGlkLCBzZWxlY3Rpb25DbGFzcykge1xuICAgICAgICBpZiAoaWQgaW4gY2xhc3Nlc0J5SWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkR1cGxpY2F0ZSB1c2Ugb2Ygc2VsZWN0aW9uIEpTT04gSUQgXCIgKyBpZCk7XG4gICAgICAgIGNsYXNzZXNCeUlkW2lkXSA9IHNlbGVjdGlvbkNsYXNzO1xuICAgICAgICBzZWxlY3Rpb25DbGFzcy5wcm90b3R5cGUuanNvbklEID0gaWQ7XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb25DbGFzcztcbiAgICB9XG4gICAgLyoqXG4gICAgR2V0IGEgW2Jvb2ttYXJrXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jc3RhdGUuU2VsZWN0aW9uQm9va21hcmspIGZvciB0aGlzIHNlbGVjdGlvbixcbiAgICB3aGljaCBpcyBhIHZhbHVlIHRoYXQgY2FuIGJlIG1hcHBlZCB3aXRob3V0IGhhdmluZyBhY2Nlc3MgdG8gYVxuICAgIGN1cnJlbnQgZG9jdW1lbnQsIGFuZCBsYXRlciByZXNvbHZlZCB0byBhIHJlYWwgc2VsZWN0aW9uIGZvciBhXG4gICAgZ2l2ZW4gZG9jdW1lbnQgYWdhaW4uIChUaGlzIGlzIHVzZWQgbW9zdGx5IGJ5IHRoZSBoaXN0b3J5IHRvXG4gICAgdHJhY2sgYW5kIHJlc3RvcmUgb2xkIHNlbGVjdGlvbnMuKSBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZlxuICAgIHRoaXMgbWV0aG9kIGp1c3QgY29udmVydHMgdGhlIHNlbGVjdGlvbiB0byBhIHRleHQgc2VsZWN0aW9uIGFuZFxuICAgIHJldHVybnMgdGhlIGJvb2ttYXJrIGZvciB0aGF0LlxuICAgICovXG4gICAgZ2V0Qm9va21hcmsoKSB7XG4gICAgICAgIHJldHVybiBUZXh0U2VsZWN0aW9uLmJldHdlZW4odGhpcy4kYW5jaG9yLCB0aGlzLiRoZWFkKS5nZXRCb29rbWFyaygpO1xuICAgIH1cbn1cblNlbGVjdGlvbi5wcm90b3R5cGUudmlzaWJsZSA9IHRydWU7XG4vKipcblJlcHJlc2VudHMgYSBzZWxlY3RlZCByYW5nZSBpbiBhIGRvY3VtZW50LlxuKi9cbmNsYXNzIFNlbGVjdGlvblJhbmdlIHtcbiAgICAvKipcbiAgICBDcmVhdGUgYSByYW5nZS5cbiAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgIC8qKlxuICAgIFRoZSBsb3dlciBib3VuZCBvZiB0aGUgcmFuZ2UuXG4gICAgKi9cbiAgICAkZnJvbSwgXG4gICAgLyoqXG4gICAgVGhlIHVwcGVyIGJvdW5kIG9mIHRoZSByYW5nZS5cbiAgICAqL1xuICAgICR0bykge1xuICAgICAgICB0aGlzLiRmcm9tID0gJGZyb207XG4gICAgICAgIHRoaXMuJHRvID0gJHRvO1xuICAgIH1cbn1cbmxldCB3YXJuZWRBYm91dFRleHRTZWxlY3Rpb24gPSBmYWxzZTtcbmZ1bmN0aW9uIGNoZWNrVGV4dFNlbGVjdGlvbigkcG9zKSB7XG4gICAgaWYgKCF3YXJuZWRBYm91dFRleHRTZWxlY3Rpb24gJiYgISRwb3MucGFyZW50LmlubGluZUNvbnRlbnQpIHtcbiAgICAgICAgd2FybmVkQWJvdXRUZXh0U2VsZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgY29uc29sZVtcIndhcm5cIl0oXCJUZXh0U2VsZWN0aW9uIGVuZHBvaW50IG5vdCBwb2ludGluZyBpbnRvIGEgbm9kZSB3aXRoIGlubGluZSBjb250ZW50IChcIiArICRwb3MucGFyZW50LnR5cGUubmFtZSArIFwiKVwiKTtcbiAgICB9XG59XG4vKipcbkEgdGV4dCBzZWxlY3Rpb24gcmVwcmVzZW50cyBhIGNsYXNzaWNhbCBlZGl0b3Igc2VsZWN0aW9uLCB3aXRoIGFcbmhlYWQgKHRoZSBtb3Zpbmcgc2lkZSkgYW5kIGFuY2hvciAoaW1tb2JpbGUgc2lkZSksIGJvdGggb2Ygd2hpY2hcbnBvaW50IGludG8gdGV4dGJsb2NrIG5vZGVzLiBJdCBjYW4gYmUgZW1wdHkgKGEgcmVndWxhciBjdXJzb3JcbnBvc2l0aW9uKS5cbiovXG5jbGFzcyBUZXh0U2VsZWN0aW9uIGV4dGVuZHMgU2VsZWN0aW9uIHtcbiAgICAvKipcbiAgICBDb25zdHJ1Y3QgYSB0ZXh0IHNlbGVjdGlvbiBiZXR3ZWVuIHRoZSBnaXZlbiBwb2ludHMuXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcigkYW5jaG9yLCAkaGVhZCA9ICRhbmNob3IpIHtcbiAgICAgICAgY2hlY2tUZXh0U2VsZWN0aW9uKCRhbmNob3IpO1xuICAgICAgICBjaGVja1RleHRTZWxlY3Rpb24oJGhlYWQpO1xuICAgICAgICBzdXBlcigkYW5jaG9yLCAkaGVhZCk7XG4gICAgfVxuICAgIC8qKlxuICAgIFJldHVybnMgYSByZXNvbHZlZCBwb3NpdGlvbiBpZiB0aGlzIGlzIGEgY3Vyc29yIHNlbGVjdGlvbiAoYW5cbiAgICBlbXB0eSB0ZXh0IHNlbGVjdGlvbiksIGFuZCBudWxsIG90aGVyd2lzZS5cbiAgICAqL1xuICAgIGdldCAkY3Vyc29yKCkgeyByZXR1cm4gdGhpcy4kYW5jaG9yLnBvcyA9PSB0aGlzLiRoZWFkLnBvcyA/IHRoaXMuJGhlYWQgOiBudWxsOyB9XG4gICAgbWFwKGRvYywgbWFwcGluZykge1xuICAgICAgICBsZXQgJGhlYWQgPSBkb2MucmVzb2x2ZShtYXBwaW5nLm1hcCh0aGlzLmhlYWQpKTtcbiAgICAgICAgaWYgKCEkaGVhZC5wYXJlbnQuaW5saW5lQ29udGVudClcbiAgICAgICAgICAgIHJldHVybiBTZWxlY3Rpb24ubmVhcigkaGVhZCk7XG4gICAgICAgIGxldCAkYW5jaG9yID0gZG9jLnJlc29sdmUobWFwcGluZy5tYXAodGhpcy5hbmNob3IpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0U2VsZWN0aW9uKCRhbmNob3IucGFyZW50LmlubGluZUNvbnRlbnQgPyAkYW5jaG9yIDogJGhlYWQsICRoZWFkKTtcbiAgICB9XG4gICAgcmVwbGFjZSh0ciwgY29udGVudCA9IFNsaWNlLmVtcHR5KSB7XG4gICAgICAgIHN1cGVyLnJlcGxhY2UodHIsIGNvbnRlbnQpO1xuICAgICAgICBpZiAoY29udGVudCA9PSBTbGljZS5lbXB0eSkge1xuICAgICAgICAgICAgbGV0IG1hcmtzID0gdGhpcy4kZnJvbS5tYXJrc0Fjcm9zcyh0aGlzLiR0byk7XG4gICAgICAgICAgICBpZiAobWFya3MpXG4gICAgICAgICAgICAgICAgdHIuZW5zdXJlTWFya3MobWFya3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIHJldHVybiBvdGhlciBpbnN0YW5jZW9mIFRleHRTZWxlY3Rpb24gJiYgb3RoZXIuYW5jaG9yID09IHRoaXMuYW5jaG9yICYmIG90aGVyLmhlYWQgPT0gdGhpcy5oZWFkO1xuICAgIH1cbiAgICBnZXRCb29rbWFyaygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0Qm9va21hcmsodGhpcy5hbmNob3IsIHRoaXMuaGVhZCk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0ZXh0XCIsIGFuY2hvcjogdGhpcy5hbmNob3IsIGhlYWQ6IHRoaXMuaGVhZCB9O1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHN0YXRpYyBmcm9tSlNPTihkb2MsIGpzb24pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uLmFuY2hvciAhPSBcIm51bWJlclwiIHx8IHR5cGVvZiBqc29uLmhlYWQgIT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBpbnB1dCBmb3IgVGV4dFNlbGVjdGlvbi5mcm9tSlNPTlwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0U2VsZWN0aW9uKGRvYy5yZXNvbHZlKGpzb24uYW5jaG9yKSwgZG9jLnJlc29sdmUoanNvbi5oZWFkKSk7XG4gICAgfVxuICAgIC8qKlxuICAgIENyZWF0ZSBhIHRleHQgc2VsZWN0aW9uIGZyb20gbm9uLXJlc29sdmVkIHBvc2l0aW9ucy5cbiAgICAqL1xuICAgIHN0YXRpYyBjcmVhdGUoZG9jLCBhbmNob3IsIGhlYWQgPSBhbmNob3IpIHtcbiAgICAgICAgbGV0ICRhbmNob3IgPSBkb2MucmVzb2x2ZShhbmNob3IpO1xuICAgICAgICByZXR1cm4gbmV3IHRoaXMoJGFuY2hvciwgaGVhZCA9PSBhbmNob3IgPyAkYW5jaG9yIDogZG9jLnJlc29sdmUoaGVhZCkpO1xuICAgIH1cbiAgICAvKipcbiAgICBSZXR1cm4gYSB0ZXh0IHNlbGVjdGlvbiB0aGF0IHNwYW5zIHRoZSBnaXZlbiBwb3NpdGlvbnMgb3IsIGlmXG4gICAgdGhleSBhcmVuJ3QgdGV4dCBwb3NpdGlvbnMsIGZpbmQgYSB0ZXh0IHNlbGVjdGlvbiBuZWFyIHRoZW0uXG4gICAgYGJpYXNgIGRldGVybWluZXMgd2hldGhlciB0aGUgbWV0aG9kIHNlYXJjaGVzIGZvcndhcmQgKGRlZmF1bHQpXG4gICAgb3IgYmFja3dhcmRzIChuZWdhdGl2ZSBudW1iZXIpIGZpcnN0LiBXaWxsIGZhbGwgYmFjayB0byBjYWxsaW5nXG4gICAgW2BTZWxlY3Rpb24ubmVhcmBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNzdGF0ZS5TZWxlY3Rpb25ebmVhcikgd2hlbiB0aGUgZG9jdW1lbnRcbiAgICBkb2Vzbid0IGNvbnRhaW4gYSB2YWxpZCB0ZXh0IHBvc2l0aW9uLlxuICAgICovXG4gICAgc3RhdGljIGJldHdlZW4oJGFuY2hvciwgJGhlYWQsIGJpYXMpIHtcbiAgICAgICAgbGV0IGRQb3MgPSAkYW5jaG9yLnBvcyAtICRoZWFkLnBvcztcbiAgICAgICAgaWYgKCFiaWFzIHx8IGRQb3MpXG4gICAgICAgICAgICBiaWFzID0gZFBvcyA+PSAwID8gMSA6IC0xO1xuICAgICAgICBpZiAoISRoZWFkLnBhcmVudC5pbmxpbmVDb250ZW50KSB7XG4gICAgICAgICAgICBsZXQgZm91bmQgPSBTZWxlY3Rpb24uZmluZEZyb20oJGhlYWQsIGJpYXMsIHRydWUpIHx8IFNlbGVjdGlvbi5maW5kRnJvbSgkaGVhZCwgLWJpYXMsIHRydWUpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKVxuICAgICAgICAgICAgICAgICRoZWFkID0gZm91bmQuJGhlYWQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdGlvbi5uZWFyKCRoZWFkLCBiaWFzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISRhbmNob3IucGFyZW50LmlubGluZUNvbnRlbnQpIHtcbiAgICAgICAgICAgIGlmIChkUG9zID09IDApIHtcbiAgICAgICAgICAgICAgICAkYW5jaG9yID0gJGhlYWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAkYW5jaG9yID0gKFNlbGVjdGlvbi5maW5kRnJvbSgkYW5jaG9yLCAtYmlhcywgdHJ1ZSkgfHwgU2VsZWN0aW9uLmZpbmRGcm9tKCRhbmNob3IsIGJpYXMsIHRydWUpKS4kYW5jaG9yO1xuICAgICAgICAgICAgICAgIGlmICgoJGFuY2hvci5wb3MgPCAkaGVhZC5wb3MpICE9IChkUG9zIDwgMCkpXG4gICAgICAgICAgICAgICAgICAgICRhbmNob3IgPSAkaGVhZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFRleHRTZWxlY3Rpb24oJGFuY2hvciwgJGhlYWQpO1xuICAgIH1cbn1cblNlbGVjdGlvbi5qc29uSUQoXCJ0ZXh0XCIsIFRleHRTZWxlY3Rpb24pO1xuY2xhc3MgVGV4dEJvb2ttYXJrIHtcbiAgICBjb25zdHJ1Y3RvcihhbmNob3IsIGhlYWQpIHtcbiAgICAgICAgdGhpcy5hbmNob3IgPSBhbmNob3I7XG4gICAgICAgIHRoaXMuaGVhZCA9IGhlYWQ7XG4gICAgfVxuICAgIG1hcChtYXBwaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgVGV4dEJvb2ttYXJrKG1hcHBpbmcubWFwKHRoaXMuYW5jaG9yKSwgbWFwcGluZy5tYXAodGhpcy5oZWFkKSk7XG4gICAgfVxuICAgIHJlc29sdmUoZG9jKSB7XG4gICAgICAgIHJldHVybiBUZXh0U2VsZWN0aW9uLmJldHdlZW4oZG9jLnJlc29sdmUodGhpcy5hbmNob3IpLCBkb2MucmVzb2x2ZSh0aGlzLmhlYWQpKTtcbiAgICB9XG59XG4vKipcbkEgbm9kZSBzZWxlY3Rpb24gaXMgYSBzZWxlY3Rpb24gdGhhdCBwb2ludHMgYXQgYSBzaW5nbGUgbm9kZS4gQWxsXG5ub2RlcyBtYXJrZWQgW3NlbGVjdGFibGVdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNtb2RlbC5Ob2RlU3BlYy5zZWxlY3RhYmxlKSBjYW4gYmUgdGhlXG50YXJnZXQgb2YgYSBub2RlIHNlbGVjdGlvbi4gSW4gc3VjaCBhIHNlbGVjdGlvbiwgYGZyb21gIGFuZCBgdG9gXG5wb2ludCBkaXJlY3RseSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzZWxlY3RlZCBub2RlLCBgYW5jaG9yYCBlcXVhbHNcbmBmcm9tYCwgYW5kIGBoZWFkYCBlcXVhbHMgYHRvYC4uXG4qL1xuY2xhc3MgTm9kZVNlbGVjdGlvbiBleHRlbmRzIFNlbGVjdGlvbiB7XG4gICAgLyoqXG4gICAgQ3JlYXRlIGEgbm9kZSBzZWxlY3Rpb24uIERvZXMgbm90IHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgaXRzXG4gICAgYXJndW1lbnQuXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcigkcG9zKSB7XG4gICAgICAgIGxldCBub2RlID0gJHBvcy5ub2RlQWZ0ZXI7XG4gICAgICAgIGxldCAkZW5kID0gJHBvcy5ub2RlKDApLnJlc29sdmUoJHBvcy5wb3MgKyBub2RlLm5vZGVTaXplKTtcbiAgICAgICAgc3VwZXIoJHBvcywgJGVuZCk7XG4gICAgICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgfVxuICAgIG1hcChkb2MsIG1hcHBpbmcpIHtcbiAgICAgICAgbGV0IHsgZGVsZXRlZCwgcG9zIH0gPSBtYXBwaW5nLm1hcFJlc3VsdCh0aGlzLmFuY2hvcik7XG4gICAgICAgIGxldCAkcG9zID0gZG9jLnJlc29sdmUocG9zKTtcbiAgICAgICAgaWYgKGRlbGV0ZWQpXG4gICAgICAgICAgICByZXR1cm4gU2VsZWN0aW9uLm5lYXIoJHBvcyk7XG4gICAgICAgIHJldHVybiBuZXcgTm9kZVNlbGVjdGlvbigkcG9zKTtcbiAgICB9XG4gICAgY29udGVudCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTbGljZShGcmFnbWVudC5mcm9tKHRoaXMubm9kZSksIDAsIDApO1xuICAgIH1cbiAgICBlcShvdGhlcikge1xuICAgICAgICByZXR1cm4gb3RoZXIgaW5zdGFuY2VvZiBOb2RlU2VsZWN0aW9uICYmIG90aGVyLmFuY2hvciA9PSB0aGlzLmFuY2hvcjtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcIm5vZGVcIiwgYW5jaG9yOiB0aGlzLmFuY2hvciB9O1xuICAgIH1cbiAgICBnZXRCb29rbWFyaygpIHsgcmV0dXJuIG5ldyBOb2RlQm9va21hcmsodGhpcy5hbmNob3IpOyB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBzdGF0aWMgZnJvbUpTT04oZG9jLCBqc29uKSB7XG4gICAgICAgIGlmICh0eXBlb2YganNvbi5hbmNob3IgIT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBpbnB1dCBmb3IgTm9kZVNlbGVjdGlvbi5mcm9tSlNPTlwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBOb2RlU2VsZWN0aW9uKGRvYy5yZXNvbHZlKGpzb24uYW5jaG9yKSk7XG4gICAgfVxuICAgIC8qKlxuICAgIENyZWF0ZSBhIG5vZGUgc2VsZWN0aW9uIGZyb20gbm9uLXJlc29sdmVkIHBvc2l0aW9ucy5cbiAgICAqL1xuICAgIHN0YXRpYyBjcmVhdGUoZG9jLCBmcm9tKSB7XG4gICAgICAgIHJldHVybiBuZXcgTm9kZVNlbGVjdGlvbihkb2MucmVzb2x2ZShmcm9tKSk7XG4gICAgfVxuICAgIC8qKlxuICAgIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gbm9kZSBtYXkgYmUgc2VsZWN0ZWQgYXMgYSBub2RlXG4gICAgc2VsZWN0aW9uLlxuICAgICovXG4gICAgc3RhdGljIGlzU2VsZWN0YWJsZShub2RlKSB7XG4gICAgICAgIHJldHVybiAhbm9kZS5pc1RleHQgJiYgbm9kZS50eXBlLnNwZWMuc2VsZWN0YWJsZSAhPT0gZmFsc2U7XG4gICAgfVxufVxuTm9kZVNlbGVjdGlvbi5wcm90b3R5cGUudmlzaWJsZSA9IGZhbHNlO1xuU2VsZWN0aW9uLmpzb25JRChcIm5vZGVcIiwgTm9kZVNlbGVjdGlvbik7XG5jbGFzcyBOb2RlQm9va21hcmsge1xuICAgIGNvbnN0cnVjdG9yKGFuY2hvcikge1xuICAgICAgICB0aGlzLmFuY2hvciA9IGFuY2hvcjtcbiAgICB9XG4gICAgbWFwKG1hcHBpbmcpIHtcbiAgICAgICAgbGV0IHsgZGVsZXRlZCwgcG9zIH0gPSBtYXBwaW5nLm1hcFJlc3VsdCh0aGlzLmFuY2hvcik7XG4gICAgICAgIHJldHVybiBkZWxldGVkID8gbmV3IFRleHRCb29rbWFyayhwb3MsIHBvcykgOiBuZXcgTm9kZUJvb2ttYXJrKHBvcyk7XG4gICAgfVxuICAgIHJlc29sdmUoZG9jKSB7XG4gICAgICAgIGxldCAkcG9zID0gZG9jLnJlc29sdmUodGhpcy5hbmNob3IpLCBub2RlID0gJHBvcy5ub2RlQWZ0ZXI7XG4gICAgICAgIGlmIChub2RlICYmIE5vZGVTZWxlY3Rpb24uaXNTZWxlY3RhYmxlKG5vZGUpKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb2RlU2VsZWN0aW9uKCRwb3MpO1xuICAgICAgICByZXR1cm4gU2VsZWN0aW9uLm5lYXIoJHBvcyk7XG4gICAgfVxufVxuLyoqXG5BIHNlbGVjdGlvbiB0eXBlIHRoYXQgcmVwcmVzZW50cyBzZWxlY3RpbmcgdGhlIHdob2xlIGRvY3VtZW50XG4od2hpY2ggY2FuIG5vdCBuZWNlc3NhcmlseSBiZSBleHByZXNzZWQgd2l0aCBhIHRleHQgc2VsZWN0aW9uLCB3aGVuXG50aGVyZSBhcmUgZm9yIGV4YW1wbGUgbGVhZiBibG9jayBub2RlcyBhdCB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZVxuZG9jdW1lbnQpLlxuKi9cbmNsYXNzIEFsbFNlbGVjdGlvbiBleHRlbmRzIFNlbGVjdGlvbiB7XG4gICAgLyoqXG4gICAgQ3JlYXRlIGFuIGFsbC1zZWxlY3Rpb24gb3ZlciB0aGUgZ2l2ZW4gZG9jdW1lbnQuXG4gICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihkb2MpIHtcbiAgICAgICAgc3VwZXIoZG9jLnJlc29sdmUoMCksIGRvYy5yZXNvbHZlKGRvYy5jb250ZW50LnNpemUpKTtcbiAgICB9XG4gICAgcmVwbGFjZSh0ciwgY29udGVudCA9IFNsaWNlLmVtcHR5KSB7XG4gICAgICAgIGlmIChjb250ZW50ID09IFNsaWNlLmVtcHR5KSB7XG4gICAgICAgICAgICB0ci5kZWxldGUoMCwgdHIuZG9jLmNvbnRlbnQuc2l6ZSk7XG4gICAgICAgICAgICBsZXQgc2VsID0gU2VsZWN0aW9uLmF0U3RhcnQodHIuZG9jKTtcbiAgICAgICAgICAgIGlmICghc2VsLmVxKHRyLnNlbGVjdGlvbikpXG4gICAgICAgICAgICAgICAgdHIuc2V0U2VsZWN0aW9uKHNlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5yZXBsYWNlKHRyLCBjb250ZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7IHJldHVybiB7IHR5cGU6IFwiYWxsXCIgfTsgfVxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgc3RhdGljIGZyb21KU09OKGRvYykgeyByZXR1cm4gbmV3IEFsbFNlbGVjdGlvbihkb2MpOyB9XG4gICAgbWFwKGRvYykgeyByZXR1cm4gbmV3IEFsbFNlbGVjdGlvbihkb2MpOyB9XG4gICAgZXEob3RoZXIpIHsgcmV0dXJuIG90aGVyIGluc3RhbmNlb2YgQWxsU2VsZWN0aW9uOyB9XG4gICAgZ2V0Qm9va21hcmsoKSB7IHJldHVybiBBbGxCb29rbWFyazsgfVxufVxuU2VsZWN0aW9uLmpzb25JRChcImFsbFwiLCBBbGxTZWxlY3Rpb24pO1xuY29uc3QgQWxsQm9va21hcmsgPSB7XG4gICAgbWFwKCkgeyByZXR1cm4gdGhpczsgfSxcbiAgICByZXNvbHZlKGRvYykgeyByZXR1cm4gbmV3IEFsbFNlbGVjdGlvbihkb2MpOyB9XG59O1xuLy8gRklYTUUgd2UnbGwgbmVlZCBzb21lIGF3YXJlbmVzcyBvZiB0ZXh0IGRpcmVjdGlvbiB3aGVuIHNjYW5uaW5nIGZvciBzZWxlY3Rpb25zXG4vLyBUcnkgdG8gZmluZCBhIHNlbGVjdGlvbiBpbnNpZGUgdGhlIGdpdmVuIG5vZGUuIGBwb3NgIHBvaW50cyBhdCB0aGVcbi8vIHBvc2l0aW9uIHdoZXJlIHRoZSBzZWFyY2ggc3RhcnRzLiBXaGVuIGB0ZXh0YCBpcyB0cnVlLCBvbmx5IHJldHVyblxuLy8gdGV4dCBzZWxlY3Rpb25zLlxuZnVuY3Rpb24gZmluZFNlbGVjdGlvbkluKGRvYywgbm9kZSwgcG9zLCBpbmRleCwgZGlyLCB0ZXh0ID0gZmFsc2UpIHtcbiAgICBpZiAobm9kZS5pbmxpbmVDb250ZW50KVxuICAgICAgICByZXR1cm4gVGV4dFNlbGVjdGlvbi5jcmVhdGUoZG9jLCBwb3MpO1xuICAgIGZvciAobGV0IGkgPSBpbmRleCAtIChkaXIgPiAwID8gMCA6IDEpOyBkaXIgPiAwID8gaSA8IG5vZGUuY2hpbGRDb3VudCA6IGkgPj0gMDsgaSArPSBkaXIpIHtcbiAgICAgICAgbGV0IGNoaWxkID0gbm9kZS5jaGlsZChpKTtcbiAgICAgICAgaWYgKCFjaGlsZC5pc0F0b20pIHtcbiAgICAgICAgICAgIGxldCBpbm5lciA9IGZpbmRTZWxlY3Rpb25Jbihkb2MsIGNoaWxkLCBwb3MgKyBkaXIsIGRpciA8IDAgPyBjaGlsZC5jaGlsZENvdW50IDogMCwgZGlyLCB0ZXh0KTtcbiAgICAgICAgICAgIGlmIChpbm5lcilcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5uZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXRleHQgJiYgTm9kZVNlbGVjdGlvbi5pc1NlbGVjdGFibGUoY2hpbGQpKSB7XG4gICAgICAgICAgICByZXR1cm4gTm9kZVNlbGVjdGlvbi5jcmVhdGUoZG9jLCBwb3MgLSAoZGlyIDwgMCA/IGNoaWxkLm5vZGVTaXplIDogMCkpO1xuICAgICAgICB9XG4gICAgICAgIHBvcyArPSBjaGlsZC5ub2RlU2l6ZSAqIGRpcjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBzZWxlY3Rpb25Ub0luc2VydGlvbkVuZCh0ciwgc3RhcnRMZW4sIGJpYXMpIHtcbiAgICBsZXQgbGFzdCA9IHRyLnN0ZXBzLmxlbmd0aCAtIDE7XG4gICAgaWYgKGxhc3QgPCBzdGFydExlbilcbiAgICAgICAgcmV0dXJuO1xuICAgIGxldCBzdGVwID0gdHIuc3RlcHNbbGFzdF07XG4gICAgaWYgKCEoc3RlcCBpbnN0YW5jZW9mIFJlcGxhY2VTdGVwIHx8IHN0ZXAgaW5zdGFuY2VvZiBSZXBsYWNlQXJvdW5kU3RlcCkpXG4gICAgICAgIHJldHVybjtcbiAgICBsZXQgbWFwID0gdHIubWFwcGluZy5tYXBzW2xhc3RdLCBlbmQ7XG4gICAgbWFwLmZvckVhY2goKF9mcm9tLCBfdG8sIF9uZXdGcm9tLCBuZXdUbykgPT4geyBpZiAoZW5kID09IG51bGwpXG4gICAgICAgIGVuZCA9IG5ld1RvOyB9KTtcbiAgICB0ci5zZXRTZWxlY3Rpb24oU2VsZWN0aW9uLm5lYXIodHIuZG9jLnJlc29sdmUoZW5kKSwgYmlhcykpO1xufVxuXG5jb25zdCBVUERBVEVEX1NFTCA9IDEsIFVQREFURURfTUFSS1MgPSAyLCBVUERBVEVEX1NDUk9MTCA9IDQ7XG4vKipcbkFuIGVkaXRvciBzdGF0ZSB0cmFuc2FjdGlvbiwgd2hpY2ggY2FuIGJlIGFwcGxpZWQgdG8gYSBzdGF0ZSB0b1xuY3JlYXRlIGFuIHVwZGF0ZWQgc3RhdGUuIFVzZVxuW2BFZGl0b3JTdGF0ZS50cmBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNzdGF0ZS5FZGl0b3JTdGF0ZS50cikgdG8gY3JlYXRlIGFuIGluc3RhbmNlLlxuXG5UcmFuc2FjdGlvbnMgdHJhY2sgY2hhbmdlcyB0byB0aGUgZG9jdW1lbnQgKHRoZXkgYXJlIGEgc3ViY2xhc3Mgb2ZcbltgVHJhbnNmb3JtYF0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI3RyYW5zZm9ybS5UcmFuc2Zvcm0pKSwgYnV0IGFsc28gb3RoZXIgc3RhdGUgY2hhbmdlcyxcbmxpa2Ugc2VsZWN0aW9uIHVwZGF0ZXMgYW5kIGFkanVzdG1lbnRzIG9mIHRoZSBzZXQgb2YgW3N0b3JlZFxubWFya3NdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNzdGF0ZS5FZGl0b3JTdGF0ZS5zdG9yZWRNYXJrcykuIEluIGFkZGl0aW9uLCB5b3UgY2FuIHN0b3JlXG5tZXRhZGF0YSBwcm9wZXJ0aWVzIGluIGEgdHJhbnNhY3Rpb24sIHdoaWNoIGFyZSBleHRyYSBwaWVjZXMgb2ZcbmluZm9ybWF0aW9uIHRoYXQgY2xpZW50IGNvZGUgb3IgcGx1Z2lucyBjYW4gdXNlIHRvIGRlc2NyaWJlIHdoYXQgYVxudHJhbnNhY3Rpb24gcmVwcmVzZW50cywgc28gdGhhdCB0aGV5IGNhbiB1cGRhdGUgdGhlaXIgW293blxuc3RhdGVdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNzdGF0ZS5TdGF0ZUZpZWxkKSBhY2NvcmRpbmdseS5cblxuVGhlIFtlZGl0b3Igdmlld10oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI3ZpZXcuRWRpdG9yVmlldykgdXNlcyBhIGZldyBtZXRhZGF0YSBwcm9wZXJ0aWVzOlxuaXQgd2lsbCBhdHRhY2ggYSBwcm9wZXJ0eSBgXCJwb2ludGVyXCJgIHdpdGggdGhlIHZhbHVlIGB0cnVlYCB0b1xuc2VsZWN0aW9uIHRyYW5zYWN0aW9ucyBkaXJlY3RseSBjYXVzZWQgYnkgbW91c2Ugb3IgdG91Y2ggaW5wdXQsIGFuZFxuYSBgXCJ1aUV2ZW50XCJgIHByb3BlcnR5IG9mIHRoYXQgbWF5IGJlIGBcInBhc3RlXCJgLCBgXCJjdXRcImAsIG9yIGBcImRyb3BcImAuXG4qL1xuY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgY29uc3RydWN0b3Ioc3RhdGUpIHtcbiAgICAgICAgc3VwZXIoc3RhdGUuZG9jKTtcbiAgICAgICAgLy8gVGhlIHN0ZXAgY291bnQgZm9yIHdoaWNoIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpcyB2YWxpZC5cbiAgICAgICAgdGhpcy5jdXJTZWxlY3Rpb25Gb3IgPSAwO1xuICAgICAgICAvLyBCaXRmaWVsZCB0byB0cmFjayB3aGljaCBhc3BlY3RzIG9mIHRoZSBzdGF0ZSB3ZXJlIHVwZGF0ZWQgYnlcbiAgICAgICAgLy8gdGhpcyB0cmFuc2FjdGlvbi5cbiAgICAgICAgdGhpcy51cGRhdGVkID0gMDtcbiAgICAgICAgLy8gT2JqZWN0IHVzZWQgdG8gc3RvcmUgbWV0YWRhdGEgcHJvcGVydGllcyBmb3IgdGhlIHRyYW5zYWN0aW9uLlxuICAgICAgICB0aGlzLm1ldGEgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLnRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICB0aGlzLmN1clNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbjtcbiAgICAgICAgdGhpcy5zdG9yZWRNYXJrcyA9IHN0YXRlLnN0b3JlZE1hcmtzO1xuICAgIH1cbiAgICAvKipcbiAgICBUaGUgdHJhbnNhY3Rpb24ncyBjdXJyZW50IHNlbGVjdGlvbi4gVGhpcyBkZWZhdWx0cyB0byB0aGUgZWRpdG9yXG4gICAgc2VsZWN0aW9uIFttYXBwZWRdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNzdGF0ZS5TZWxlY3Rpb24ubWFwKSB0aHJvdWdoIHRoZSBzdGVwcyBpbiB0aGVcbiAgICB0cmFuc2FjdGlvbiwgYnV0IGNhbiBiZSBvdmVyd3JpdHRlbiB3aXRoXG4gICAgW2BzZXRTZWxlY3Rpb25gXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jc3RhdGUuVHJhbnNhY3Rpb24uc2V0U2VsZWN0aW9uKS5cbiAgICAqL1xuICAgIGdldCBzZWxlY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmN1clNlbGVjdGlvbkZvciA8IHRoaXMuc3RlcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmN1clNlbGVjdGlvbiA9IHRoaXMuY3VyU2VsZWN0aW9uLm1hcCh0aGlzLmRvYywgdGhpcy5tYXBwaW5nLnNsaWNlKHRoaXMuY3VyU2VsZWN0aW9uRm9yKSk7XG4gICAgICAgICAgICB0aGlzLmN1clNlbGVjdGlvbkZvciA9IHRoaXMuc3RlcHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmN1clNlbGVjdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgVXBkYXRlIHRoZSB0cmFuc2FjdGlvbidzIGN1cnJlbnQgc2VsZWN0aW9uLiBXaWxsIGRldGVybWluZSB0aGVcbiAgICBzZWxlY3Rpb24gdGhhdCB0aGUgZWRpdG9yIGdldHMgd2hlbiB0aGUgdHJhbnNhY3Rpb24gaXMgYXBwbGllZC5cbiAgICAqL1xuICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pIHtcbiAgICAgICAgaWYgKHNlbGVjdGlvbi4kZnJvbS5kb2MgIT0gdGhpcy5kb2MpXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlNlbGVjdGlvbiBwYXNzZWQgdG8gc2V0U2VsZWN0aW9uIG11c3QgcG9pbnQgYXQgdGhlIGN1cnJlbnQgZG9jdW1lbnRcIik7XG4gICAgICAgIHRoaXMuY3VyU2VsZWN0aW9uID0gc2VsZWN0aW9uO1xuICAgICAgICB0aGlzLmN1clNlbGVjdGlvbkZvciA9IHRoaXMuc3RlcHMubGVuZ3RoO1xuICAgICAgICB0aGlzLnVwZGF0ZWQgPSAodGhpcy51cGRhdGVkIHwgVVBEQVRFRF9TRUwpICYgflVQREFURURfTUFSS1M7XG4gICAgICAgIHRoaXMuc3RvcmVkTWFya3MgPSBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgV2hldGhlciB0aGUgc2VsZWN0aW9uIHdhcyBleHBsaWNpdGx5IHVwZGF0ZWQgYnkgdGhpcyB0cmFuc2FjdGlvbi5cbiAgICAqL1xuICAgIGdldCBzZWxlY3Rpb25TZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy51cGRhdGVkICYgVVBEQVRFRF9TRUwpID4gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgU2V0IHRoZSBjdXJyZW50IHN0b3JlZCBtYXJrcy5cbiAgICAqL1xuICAgIHNldFN0b3JlZE1hcmtzKG1hcmtzKSB7XG4gICAgICAgIHRoaXMuc3RvcmVkTWFya3MgPSBtYXJrcztcbiAgICAgICAgdGhpcy51cGRhdGVkIHw9IFVQREFURURfTUFSS1M7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICBNYWtlIHN1cmUgdGhlIGN1cnJlbnQgc3RvcmVkIG1hcmtzIG9yLCBpZiB0aGF0IGlzIG51bGwsIHRoZSBtYXJrc1xuICAgIGF0IHRoZSBzZWxlY3Rpb24sIG1hdGNoIHRoZSBnaXZlbiBzZXQgb2YgbWFya3MuIERvZXMgbm90aGluZyBpZlxuICAgIHRoaXMgaXMgYWxyZWFkeSB0aGUgY2FzZS5cbiAgICAqL1xuICAgIGVuc3VyZU1hcmtzKG1hcmtzKSB7XG4gICAgICAgIGlmICghTWFyay5zYW1lU2V0KHRoaXMuc3RvcmVkTWFya3MgfHwgdGhpcy5zZWxlY3Rpb24uJGZyb20ubWFya3MoKSwgbWFya3MpKVxuICAgICAgICAgICAgdGhpcy5zZXRTdG9yZWRNYXJrcyhtYXJrcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICBBZGQgYSBtYXJrIHRvIHRoZSBzZXQgb2Ygc3RvcmVkIG1hcmtzLlxuICAgICovXG4gICAgYWRkU3RvcmVkTWFyayhtYXJrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVuc3VyZU1hcmtzKG1hcmsuYWRkVG9TZXQodGhpcy5zdG9yZWRNYXJrcyB8fCB0aGlzLnNlbGVjdGlvbi4kaGVhZC5tYXJrcygpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgIFJlbW92ZSBhIG1hcmsgb3IgbWFyayB0eXBlIGZyb20gdGhlIHNldCBvZiBzdG9yZWQgbWFya3MuXG4gICAgKi9cbiAgICByZW1vdmVTdG9yZWRNYXJrKG1hcmspIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5zdXJlTWFya3MobWFyay5yZW1vdmVGcm9tU2V0KHRoaXMuc3RvcmVkTWFya3MgfHwgdGhpcy5zZWxlY3Rpb24uJGhlYWQubWFya3MoKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICBXaGV0aGVyIHRoZSBzdG9yZWQgbWFya3Mgd2VyZSBleHBsaWNpdGx5IHNldCBmb3IgdGhpcyB0cmFuc2FjdGlvbi5cbiAgICAqL1xuICAgIGdldCBzdG9yZWRNYXJrc1NldCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnVwZGF0ZWQgJiBVUERBVEVEX01BUktTKSA+IDA7XG4gICAgfVxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgYWRkU3RlcChzdGVwLCBkb2MpIHtcbiAgICAgICAgc3VwZXIuYWRkU3RlcChzdGVwLCBkb2MpO1xuICAgICAgICB0aGlzLnVwZGF0ZWQgPSB0aGlzLnVwZGF0ZWQgJiB+VVBEQVRFRF9NQVJLUztcbiAgICAgICAgdGhpcy5zdG9yZWRNYXJrcyA9IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgIFVwZGF0ZSB0aGUgdGltZXN0YW1wIGZvciB0aGUgdHJhbnNhY3Rpb24uXG4gICAgKi9cbiAgICBzZXRUaW1lKHRpbWUpIHtcbiAgICAgICAgdGhpcy50aW1lID0gdGltZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgIFJlcGxhY2UgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHdpdGggdGhlIGdpdmVuIHNsaWNlLlxuICAgICovXG4gICAgcmVwbGFjZVNlbGVjdGlvbihzbGljZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5yZXBsYWNlKHRoaXMsIHNsaWNlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgIFJlcGxhY2UgdGhlIHNlbGVjdGlvbiB3aXRoIHRoZSBnaXZlbiBub2RlLiBXaGVuIGBpbmhlcml0TWFya3NgIGlzXG4gICAgdHJ1ZSBhbmQgdGhlIGNvbnRlbnQgaXMgaW5saW5lLCBpdCBpbmhlcml0cyB0aGUgbWFya3MgZnJvbSB0aGVcbiAgICBwbGFjZSB3aGVyZSBpdCBpcyBpbnNlcnRlZC5cbiAgICAqL1xuICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoKG5vZGUsIGluaGVyaXRNYXJrcyA9IHRydWUpIHtcbiAgICAgICAgbGV0IHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uO1xuICAgICAgICBpZiAoaW5oZXJpdE1hcmtzKVxuICAgICAgICAgICAgbm9kZSA9IG5vZGUubWFyayh0aGlzLnN0b3JlZE1hcmtzIHx8IChzZWxlY3Rpb24uZW1wdHkgPyBzZWxlY3Rpb24uJGZyb20ubWFya3MoKSA6IChzZWxlY3Rpb24uJGZyb20ubWFya3NBY3Jvc3Moc2VsZWN0aW9uLiR0bykgfHwgTWFyay5ub25lKSkpO1xuICAgICAgICBzZWxlY3Rpb24ucmVwbGFjZVdpdGgodGhpcywgbm9kZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICBEZWxldGUgdGhlIHNlbGVjdGlvbi5cbiAgICAqL1xuICAgIGRlbGV0ZVNlbGVjdGlvbigpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmVwbGFjZSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgIFJlcGxhY2UgdGhlIGdpdmVuIHJhbmdlLCBvciB0aGUgc2VsZWN0aW9uIGlmIG5vIHJhbmdlIGlzIGdpdmVuLFxuICAgIHdpdGggYSB0ZXh0IG5vZGUgY29udGFpbmluZyB0aGUgZ2l2ZW4gc3RyaW5nLlxuICAgICovXG4gICAgaW5zZXJ0VGV4dCh0ZXh0LCBmcm9tLCB0bykge1xuICAgICAgICBsZXQgc2NoZW1hID0gdGhpcy5kb2MudHlwZS5zY2hlbWE7XG4gICAgICAgIGlmIChmcm9tID09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghdGV4dClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcGxhY2VTZWxlY3Rpb25XaXRoKHNjaGVtYS50ZXh0KHRleHQpLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0byA9PSBudWxsKVxuICAgICAgICAgICAgICAgIHRvID0gZnJvbTtcbiAgICAgICAgICAgIHRvID0gdG8gPT0gbnVsbCA/IGZyb20gOiB0bztcbiAgICAgICAgICAgIGlmICghdGV4dClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVSYW5nZShmcm9tLCB0byk7XG4gICAgICAgICAgICBsZXQgbWFya3MgPSB0aGlzLnN0b3JlZE1hcmtzO1xuICAgICAgICAgICAgaWYgKCFtYXJrcykge1xuICAgICAgICAgICAgICAgIGxldCAkZnJvbSA9IHRoaXMuZG9jLnJlc29sdmUoZnJvbSk7XG4gICAgICAgICAgICAgICAgbWFya3MgPSB0byA9PSBmcm9tID8gJGZyb20ubWFya3MoKSA6ICRmcm9tLm1hcmtzQWNyb3NzKHRoaXMuZG9jLnJlc29sdmUodG8pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZVJhbmdlV2l0aChmcm9tLCB0bywgc2NoZW1hLnRleHQodGV4dCwgbWFya3MpKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uZW1wdHkpXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oU2VsZWN0aW9uLm5lYXIodGhpcy5zZWxlY3Rpb24uJHRvKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICBTdG9yZSBhIG1ldGFkYXRhIHByb3BlcnR5IGluIHRoaXMgdHJhbnNhY3Rpb24sIGtleWVkIGVpdGhlciBieVxuICAgIG5hbWUgb3IgYnkgcGx1Z2luLlxuICAgICovXG4gICAgc2V0TWV0YShrZXksIHZhbHVlKSB7XG4gICAgICAgIHRoaXMubWV0YVt0eXBlb2Yga2V5ID09IFwic3RyaW5nXCIgPyBrZXkgOiBrZXkua2V5XSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgUmV0cmlldmUgYSBtZXRhZGF0YSBwcm9wZXJ0eSBmb3IgYSBnaXZlbiBuYW1lIG9yIHBsdWdpbi5cbiAgICAqL1xuICAgIGdldE1ldGEoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGFbdHlwZW9mIGtleSA9PSBcInN0cmluZ1wiID8ga2V5IDoga2V5LmtleV07XG4gICAgfVxuICAgIC8qKlxuICAgIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHRyYW5zYWN0aW9uIGRvZXNuJ3QgY29udGFpbiBhbnkgbWV0YWRhdGEsXG4gICAgYW5kIGNhbiB0aHVzIHNhZmVseSBiZSBleHRlbmRlZC5cbiAgICAqL1xuICAgIGdldCBpc0dlbmVyaWMoKSB7XG4gICAgICAgIGZvciAobGV0IF8gaW4gdGhpcy5tZXRhKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgSW5kaWNhdGUgdGhhdCB0aGUgZWRpdG9yIHNob3VsZCBzY3JvbGwgdGhlIHNlbGVjdGlvbiBpbnRvIHZpZXdcbiAgICB3aGVuIHVwZGF0ZWQgdG8gdGhlIHN0YXRlIHByb2R1Y2VkIGJ5IHRoaXMgdHJhbnNhY3Rpb24uXG4gICAgKi9cbiAgICBzY3JvbGxJbnRvVmlldygpIHtcbiAgICAgICAgdGhpcy51cGRhdGVkIHw9IFVQREFURURfU0NST0xMO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgVHJ1ZSB3aGVuIHRoaXMgdHJhbnNhY3Rpb24gaGFzIGhhZCBgc2Nyb2xsSW50b1ZpZXdgIGNhbGxlZCBvbiBpdC5cbiAgICAqL1xuICAgIGdldCBzY3JvbGxlZEludG9WaWV3KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMudXBkYXRlZCAmIFVQREFURURfU0NST0xMKSA+IDA7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBiaW5kKGYsIHNlbGYpIHtcbiAgICByZXR1cm4gIXNlbGYgfHwgIWYgPyBmIDogZi5iaW5kKHNlbGYpO1xufVxuY2xhc3MgRmllbGREZXNjIHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBkZXNjLCBzZWxmKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuaW5pdCA9IGJpbmQoZGVzYy5pbml0LCBzZWxmKTtcbiAgICAgICAgdGhpcy5hcHBseSA9IGJpbmQoZGVzYy5hcHBseSwgc2VsZik7XG4gICAgfVxufVxuY29uc3QgYmFzZUZpZWxkcyA9IFtcbiAgICBuZXcgRmllbGREZXNjKFwiZG9jXCIsIHtcbiAgICAgICAgaW5pdChjb25maWcpIHsgcmV0dXJuIGNvbmZpZy5kb2MgfHwgY29uZmlnLnNjaGVtYS50b3BOb2RlVHlwZS5jcmVhdGVBbmRGaWxsKCk7IH0sXG4gICAgICAgIGFwcGx5KHRyKSB7IHJldHVybiB0ci5kb2M7IH1cbiAgICB9KSxcbiAgICBuZXcgRmllbGREZXNjKFwic2VsZWN0aW9uXCIsIHtcbiAgICAgICAgaW5pdChjb25maWcsIGluc3RhbmNlKSB7IHJldHVybiBjb25maWcuc2VsZWN0aW9uIHx8IFNlbGVjdGlvbi5hdFN0YXJ0KGluc3RhbmNlLmRvYyk7IH0sXG4gICAgICAgIGFwcGx5KHRyKSB7IHJldHVybiB0ci5zZWxlY3Rpb247IH1cbiAgICB9KSxcbiAgICBuZXcgRmllbGREZXNjKFwic3RvcmVkTWFya3NcIiwge1xuICAgICAgICBpbml0KGNvbmZpZykgeyByZXR1cm4gY29uZmlnLnN0b3JlZE1hcmtzIHx8IG51bGw7IH0sXG4gICAgICAgIGFwcGx5KHRyLCBfbWFya3MsIF9vbGQsIHN0YXRlKSB7IHJldHVybiBzdGF0ZS5zZWxlY3Rpb24uJGN1cnNvciA/IHRyLnN0b3JlZE1hcmtzIDogbnVsbDsgfVxuICAgIH0pLFxuICAgIG5ldyBGaWVsZERlc2MoXCJzY3JvbGxUb1NlbGVjdGlvblwiLCB7XG4gICAgICAgIGluaXQoKSB7IHJldHVybiAwOyB9LFxuICAgICAgICBhcHBseSh0ciwgcHJldikgeyByZXR1cm4gdHIuc2Nyb2xsZWRJbnRvVmlldyA/IHByZXYgKyAxIDogcHJldjsgfVxuICAgIH0pXG5dO1xuLy8gT2JqZWN0IHdyYXBwaW5nIHRoZSBwYXJ0IG9mIGEgc3RhdGUgb2JqZWN0IHRoYXQgc3RheXMgdGhlIHNhbWVcbi8vIGFjcm9zcyB0cmFuc2FjdGlvbnMuIFN0b3JlZCBpbiB0aGUgc3RhdGUncyBgY29uZmlnYCBwcm9wZXJ0eS5cbmNsYXNzIENvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSwgcGx1Z2lucykge1xuICAgICAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gW107XG4gICAgICAgIHRoaXMucGx1Z2luc0J5S2V5ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5maWVsZHMgPSBiYXNlRmllbGRzLnNsaWNlKCk7XG4gICAgICAgIGlmIChwbHVnaW5zKVxuICAgICAgICAgICAgcGx1Z2lucy5mb3JFYWNoKHBsdWdpbiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGx1Z2luc0J5S2V5W3BsdWdpbi5rZXldKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkFkZGluZyBkaWZmZXJlbnQgaW5zdGFuY2VzIG9mIGEga2V5ZWQgcGx1Z2luIChcIiArIHBsdWdpbi5rZXkgKyBcIilcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnB1c2gocGx1Z2luKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnNCeUtleVtwbHVnaW4ua2V5XSA9IHBsdWdpbjtcbiAgICAgICAgICAgICAgICBpZiAocGx1Z2luLnNwZWMuc3RhdGUpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGRzLnB1c2gobmV3IEZpZWxkRGVzYyhwbHVnaW4ua2V5LCBwbHVnaW4uc3BlYy5zdGF0ZSwgcGx1Z2luKSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59XG4vKipcblRoZSBzdGF0ZSBvZiBhIFByb3NlTWlycm9yIGVkaXRvciBpcyByZXByZXNlbnRlZCBieSBhbiBvYmplY3Qgb2ZcbnRoaXMgdHlwZS4gQSBzdGF0ZSBpcyBhIHBlcnNpc3RlbnQgZGF0YSBzdHJ1Y3R1cmXigJRpdCBpc24ndFxudXBkYXRlZCwgYnV0IHJhdGhlciBhIG5ldyBzdGF0ZSB2YWx1ZSBpcyBjb21wdXRlZCBmcm9tIGFuIG9sZCBvbmVcbnVzaW5nIHRoZSBbYGFwcGx5YF0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI3N0YXRlLkVkaXRvclN0YXRlLmFwcGx5KSBtZXRob2QuXG5cbkEgc3RhdGUgaG9sZHMgYSBudW1iZXIgb2YgYnVpbHQtaW4gZmllbGRzLCBhbmQgcGx1Z2lucyBjYW5cbltkZWZpbmVdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNzdGF0ZS5QbHVnaW5TcGVjLnN0YXRlKSBhZGRpdGlvbmFsIGZpZWxkcy5cbiovXG5jbGFzcyBFZGl0b3JTdGF0ZSB7XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIGNvbmZpZykge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB9XG4gICAgLyoqXG4gICAgVGhlIHNjaGVtYSBvZiB0aGUgc3RhdGUncyBkb2N1bWVudC5cbiAgICAqL1xuICAgIGdldCBzY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5zY2hlbWE7XG4gICAgfVxuICAgIC8qKlxuICAgIFRoZSBwbHVnaW5zIHRoYXQgYXJlIGFjdGl2ZSBpbiB0aGlzIHN0YXRlLlxuICAgICovXG4gICAgZ2V0IHBsdWdpbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5wbHVnaW5zO1xuICAgIH1cbiAgICAvKipcbiAgICBBcHBseSB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24gdG8gcHJvZHVjZSBhIG5ldyBzdGF0ZS5cbiAgICAqL1xuICAgIGFwcGx5KHRyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcGx5VHJhbnNhY3Rpb24odHIpLnN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIGZpbHRlclRyYW5zYWN0aW9uKHRyLCBpZ25vcmUgPSAtMSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29uZmlnLnBsdWdpbnMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBpZiAoaSAhPSBpZ25vcmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGx1Z2luID0gdGhpcy5jb25maWcucGx1Z2luc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAocGx1Z2luLnNwZWMuZmlsdGVyVHJhbnNhY3Rpb24gJiYgIXBsdWdpbi5zcGVjLmZpbHRlclRyYW5zYWN0aW9uLmNhbGwocGx1Z2luLCB0ciwgdGhpcykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgIFZlcmJvc2UgdmFyaWFudCBvZiBbYGFwcGx5YF0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI3N0YXRlLkVkaXRvclN0YXRlLmFwcGx5KSB0aGF0XG4gICAgcmV0dXJucyB0aGUgcHJlY2lzZSB0cmFuc2FjdGlvbnMgdGhhdCB3ZXJlIGFwcGxpZWQgKHdoaWNoIG1pZ2h0XG4gICAgYmUgaW5mbHVlbmNlZCBieSB0aGUgW3RyYW5zYWN0aW9uXG4gICAgaG9va3NdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNzdGF0ZS5QbHVnaW5TcGVjLmZpbHRlclRyYW5zYWN0aW9uKSBvZlxuICAgIHBsdWdpbnMpIGFsb25nIHdpdGggdGhlIG5ldyBzdGF0ZS5cbiAgICAqL1xuICAgIGFwcGx5VHJhbnNhY3Rpb24ocm9vdFRyKSB7XG4gICAgICAgIGlmICghdGhpcy5maWx0ZXJUcmFuc2FjdGlvbihyb290VHIpKVxuICAgICAgICAgICAgcmV0dXJuIHsgc3RhdGU6IHRoaXMsIHRyYW5zYWN0aW9uczogW10gfTtcbiAgICAgICAgbGV0IHRycyA9IFtyb290VHJdLCBuZXdTdGF0ZSA9IHRoaXMuYXBwbHlJbm5lcihyb290VHIpLCBzZWVuID0gbnVsbDtcbiAgICAgICAgLy8gVGhpcyBsb29wIHJlcGVhdGVkbHkgZ2l2ZXMgcGx1Z2lucyBhIGNoYW5jZSB0byByZXNwb25kIHRvXG4gICAgICAgIC8vIHRyYW5zYWN0aW9ucyBhcyBuZXcgdHJhbnNhY3Rpb25zIGFyZSBhZGRlZCwgbWFraW5nIHN1cmUgdG8gb25seVxuICAgICAgICAvLyBwYXNzIHRoZSB0cmFuc2FjdGlvbnMgdGhlIHBsdWdpbiBkaWQgbm90IHNlZSBiZWZvcmUuXG4gICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgIGxldCBoYXZlTmV3ID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29uZmlnLnBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgcGx1Z2luID0gdGhpcy5jb25maWcucGx1Z2luc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAocGx1Z2luLnNwZWMuYXBwZW5kVHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG4gPSBzZWVuID8gc2VlbltpXS5uIDogMCwgb2xkU3RhdGUgPSBzZWVuID8gc2VlbltpXS5zdGF0ZSA6IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0ciA9IG4gPCB0cnMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4uc3BlYy5hcHBlbmRUcmFuc2FjdGlvbi5jYWxsKHBsdWdpbiwgbiA/IHRycy5zbGljZShuKSA6IHRycywgb2xkU3RhdGUsIG5ld1N0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyICYmIG5ld1N0YXRlLmZpbHRlclRyYW5zYWN0aW9uKHRyLCBpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHIuc2V0TWV0YShcImFwcGVuZGVkVHJhbnNhY3Rpb25cIiwgcm9vdFRyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2Vlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZW4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29uZmlnLnBsdWdpbnMubGVuZ3RoOyBqKyspXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZW4ucHVzaChqIDwgaSA/IHsgc3RhdGU6IG5ld1N0YXRlLCBuOiB0cnMubGVuZ3RoIH0gOiB7IHN0YXRlOiB0aGlzLCBuOiAwIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHJzLnB1c2godHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUgPSBuZXdTdGF0ZS5hcHBseUlubmVyKHRyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVOZXcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWVuKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VlbltpXSA9IHsgc3RhdGU6IG5ld1N0YXRlLCBuOiB0cnMubGVuZ3RoIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoYXZlTmV3KVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXRlOiBuZXdTdGF0ZSwgdHJhbnNhY3Rpb25zOiB0cnMgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIGFwcGx5SW5uZXIodHIpIHtcbiAgICAgICAgaWYgKCF0ci5iZWZvcmUuZXEodGhpcy5kb2MpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBcHBseWluZyBhIG1pc21hdGNoZWQgdHJhbnNhY3Rpb25cIik7XG4gICAgICAgIGxldCBuZXdJbnN0YW5jZSA9IG5ldyBFZGl0b3JTdGF0ZSh0aGlzLmNvbmZpZyksIGZpZWxkcyA9IHRoaXMuY29uZmlnLmZpZWxkcztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgIG5ld0luc3RhbmNlW2ZpZWxkLm5hbWVdID0gZmllbGQuYXBwbHkodHIsIHRoaXNbZmllbGQubmFtZV0sIHRoaXMsIG5ld0luc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3SW5zdGFuY2U7XG4gICAgfVxuICAgIC8qKlxuICAgIFN0YXJ0IGEgW3RyYW5zYWN0aW9uXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jc3RhdGUuVHJhbnNhY3Rpb24pIGZyb20gdGhpcyBzdGF0ZS5cbiAgICAqL1xuICAgIGdldCB0cigpIHsgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbih0aGlzKTsgfVxuICAgIC8qKlxuICAgIENyZWF0ZSBhIG5ldyBzdGF0ZS5cbiAgICAqL1xuICAgIHN0YXRpYyBjcmVhdGUoY29uZmlnKSB7XG4gICAgICAgIGxldCAkY29uZmlnID0gbmV3IENvbmZpZ3VyYXRpb24oY29uZmlnLmRvYyA/IGNvbmZpZy5kb2MudHlwZS5zY2hlbWEgOiBjb25maWcuc2NoZW1hLCBjb25maWcucGx1Z2lucyk7XG4gICAgICAgIGxldCBpbnN0YW5jZSA9IG5ldyBFZGl0b3JTdGF0ZSgkY29uZmlnKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAkY29uZmlnLmZpZWxkcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGluc3RhbmNlWyRjb25maWcuZmllbGRzW2ldLm5hbWVdID0gJGNvbmZpZy5maWVsZHNbaV0uaW5pdChjb25maWcsIGluc3RhbmNlKTtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cbiAgICAvKipcbiAgICBDcmVhdGUgYSBuZXcgc3RhdGUgYmFzZWQgb24gdGhpcyBvbmUsIGJ1dCB3aXRoIGFuIGFkanVzdGVkIHNldFxuICAgIG9mIGFjdGl2ZSBwbHVnaW5zLiBTdGF0ZSBmaWVsZHMgdGhhdCBleGlzdCBpbiBib3RoIHNldHMgb2ZcbiAgICBwbHVnaW5zIGFyZSBrZXB0IHVuY2hhbmdlZC4gVGhvc2UgdGhhdCBubyBsb25nZXIgZXhpc3QgYXJlXG4gICAgZHJvcHBlZCwgYW5kIHRob3NlIHRoYXQgYXJlIG5ldyBhcmUgaW5pdGlhbGl6ZWQgdXNpbmcgdGhlaXJcbiAgICBbYGluaXRgXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jc3RhdGUuU3RhdGVGaWVsZC5pbml0KSBtZXRob2QsIHBhc3NpbmcgaW4gdGhlIG5ld1xuICAgIGNvbmZpZ3VyYXRpb24gb2JqZWN0Li5cbiAgICAqL1xuICAgIHJlY29uZmlndXJlKGNvbmZpZykge1xuICAgICAgICBsZXQgJGNvbmZpZyA9IG5ldyBDb25maWd1cmF0aW9uKHRoaXMuc2NoZW1hLCBjb25maWcucGx1Z2lucyk7XG4gICAgICAgIGxldCBmaWVsZHMgPSAkY29uZmlnLmZpZWxkcywgaW5zdGFuY2UgPSBuZXcgRWRpdG9yU3RhdGUoJGNvbmZpZyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgbmFtZSA9IGZpZWxkc1tpXS5uYW1lO1xuICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSB0aGlzLmhhc093blByb3BlcnR5KG5hbWUpID8gdGhpc1tuYW1lXSA6IGZpZWxkc1tpXS5pbml0KGNvbmZpZywgaW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG4gICAgLyoqXG4gICAgU2VyaWFsaXplIHRoaXMgc3RhdGUgdG8gSlNPTi4gSWYgeW91IHdhbnQgdG8gc2VyaWFsaXplIHRoZSBzdGF0ZVxuICAgIG9mIHBsdWdpbnMsIHBhc3MgYW4gb2JqZWN0IG1hcHBpbmcgcHJvcGVydHkgbmFtZXMgdG8gdXNlIGluIHRoZVxuICAgIHJlc3VsdGluZyBKU09OIG9iamVjdCB0byBwbHVnaW4gb2JqZWN0cy4gVGhlIGFyZ3VtZW50IG1heSBhbHNvIGJlXG4gICAgYSBzdHJpbmcgb3IgbnVtYmVyLCBpbiB3aGljaCBjYXNlIGl0IGlzIGlnbm9yZWQsIHRvIHN1cHBvcnQgdGhlXG4gICAgd2F5IGBKU09OLnN0cmluZ2lmeWAgY2FsbHMgYHRvU3RyaW5nYCBtZXRob2RzLlxuICAgICovXG4gICAgdG9KU09OKHBsdWdpbkZpZWxkcykge1xuICAgICAgICBsZXQgcmVzdWx0ID0geyBkb2M6IHRoaXMuZG9jLnRvSlNPTigpLCBzZWxlY3Rpb246IHRoaXMuc2VsZWN0aW9uLnRvSlNPTigpIH07XG4gICAgICAgIGlmICh0aGlzLnN0b3JlZE1hcmtzKVxuICAgICAgICAgICAgcmVzdWx0LnN0b3JlZE1hcmtzID0gdGhpcy5zdG9yZWRNYXJrcy5tYXAobSA9PiBtLnRvSlNPTigpKTtcbiAgICAgICAgaWYgKHBsdWdpbkZpZWxkcyAmJiB0eXBlb2YgcGx1Z2luRmllbGRzID09ICdvYmplY3QnKVxuICAgICAgICAgICAgZm9yIChsZXQgcHJvcCBpbiBwbHVnaW5GaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcCA9PSBcImRvY1wiIHx8IHByb3AgPT0gXCJzZWxlY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgSlNPTiBmaWVsZHMgYGRvY2AgYW5kIGBzZWxlY3Rpb25gIGFyZSByZXNlcnZlZFwiKTtcbiAgICAgICAgICAgICAgICBsZXQgcGx1Z2luID0gcGx1Z2luRmllbGRzW3Byb3BdLCBzdGF0ZSA9IHBsdWdpbi5zcGVjLnN0YXRlO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS50b0pTT04pXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtwcm9wXSA9IHN0YXRlLnRvSlNPTi5jYWxsKHBsdWdpbiwgdGhpc1twbHVnaW4ua2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgIERlc2VyaWFsaXplIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIHN0YXRlLiBgY29uZmlnYCBzaG91bGRcbiAgICBoYXZlIGF0IGxlYXN0IGEgYHNjaGVtYWAgZmllbGQsIGFuZCBzaG91bGQgY29udGFpbiBhcnJheSBvZlxuICAgIHBsdWdpbnMgdG8gaW5pdGlhbGl6ZSB0aGUgc3RhdGUgd2l0aC4gYHBsdWdpbkZpZWxkc2AgY2FuIGJlIHVzZWRcbiAgICB0byBkZXNlcmlhbGl6ZSB0aGUgc3RhdGUgb2YgcGx1Z2lucywgYnkgYXNzb2NpYXRpbmcgcGx1Z2luXG4gICAgaW5zdGFuY2VzIHdpdGggdGhlIHByb3BlcnR5IG5hbWVzIHRoZXkgdXNlIGluIHRoZSBKU09OIG9iamVjdC5cbiAgICAqL1xuICAgIHN0YXRpYyBmcm9tSlNPTihjb25maWcsIGpzb24sIHBsdWdpbkZpZWxkcykge1xuICAgICAgICBpZiAoIWpzb24pXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgaW5wdXQgZm9yIEVkaXRvclN0YXRlLmZyb21KU09OXCIpO1xuICAgICAgICBpZiAoIWNvbmZpZy5zY2hlbWEpXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlJlcXVpcmVkIGNvbmZpZyBmaWVsZCAnc2NoZW1hJyBtaXNzaW5nXCIpO1xuICAgICAgICBsZXQgJGNvbmZpZyA9IG5ldyBDb25maWd1cmF0aW9uKGNvbmZpZy5zY2hlbWEsIGNvbmZpZy5wbHVnaW5zKTtcbiAgICAgICAgbGV0IGluc3RhbmNlID0gbmV3IEVkaXRvclN0YXRlKCRjb25maWcpO1xuICAgICAgICAkY29uZmlnLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5uYW1lID09IFwiZG9jXCIpIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5kb2MgPSBOb2RlLmZyb21KU09OKGNvbmZpZy5zY2hlbWEsIGpzb24uZG9jKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGZpZWxkLm5hbWUgPT0gXCJzZWxlY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlLnNlbGVjdGlvbiA9IFNlbGVjdGlvbi5mcm9tSlNPTihpbnN0YW5jZS5kb2MsIGpzb24uc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGZpZWxkLm5hbWUgPT0gXCJzdG9yZWRNYXJrc1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGpzb24uc3RvcmVkTWFya3MpXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnN0b3JlZE1hcmtzID0ganNvbi5zdG9yZWRNYXJrcy5tYXAoY29uZmlnLnNjaGVtYS5tYXJrRnJvbUpTT04pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBsdWdpbkZpZWxkcylcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcHJvcCBpbiBwbHVnaW5GaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwbHVnaW4gPSBwbHVnaW5GaWVsZHNbcHJvcF0sIHN0YXRlID0gcGx1Z2luLnNwZWMuc3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLmtleSA9PSBmaWVsZC5uYW1lICYmIHN0YXRlICYmIHN0YXRlLmZyb21KU09OICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGpzb24sIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbZmllbGQubmFtZV0gPSBzdGF0ZS5mcm9tSlNPTi5jYWxsKHBsdWdpbiwgY29uZmlnLCBqc29uW3Byb3BdLCBpbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VbZmllbGQubmFtZV0gPSBmaWVsZC5pbml0KGNvbmZpZywgaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYmluZFByb3BzKG9iaiwgc2VsZiwgdGFyZ2V0KSB7XG4gICAgZm9yIChsZXQgcHJvcCBpbiBvYmopIHtcbiAgICAgICAgbGV0IHZhbCA9IG9ialtwcm9wXTtcbiAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIEZ1bmN0aW9uKVxuICAgICAgICAgICAgdmFsID0gdmFsLmJpbmQoc2VsZik7XG4gICAgICAgIGVsc2UgaWYgKHByb3AgPT0gXCJoYW5kbGVET01FdmVudHNcIilcbiAgICAgICAgICAgIHZhbCA9IGJpbmRQcm9wcyh2YWwsIHNlbGYsIHt9KTtcbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuLyoqXG5QbHVnaW5zIGJ1bmRsZSBmdW5jdGlvbmFsaXR5IHRoYXQgY2FuIGJlIGFkZGVkIHRvIGFuIGVkaXRvci5cblRoZXkgYXJlIHBhcnQgb2YgdGhlIFtlZGl0b3Igc3RhdGVdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNzdGF0ZS5FZGl0b3JTdGF0ZSkgYW5kXG5tYXkgaW5mbHVlbmNlIHRoYXQgc3RhdGUgYW5kIHRoZSB2aWV3IHRoYXQgY29udGFpbnMgaXQuXG4qL1xuY2xhc3MgUGx1Z2luIHtcbiAgICAvKipcbiAgICBDcmVhdGUgYSBwbHVnaW4uXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICBUaGUgcGx1Z2luJ3MgW3NwZWMgb2JqZWN0XShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jc3RhdGUuUGx1Z2luU3BlYykuXG4gICAgKi9cbiAgICBzcGVjKSB7XG4gICAgICAgIHRoaXMuc3BlYyA9IHNwZWM7XG4gICAgICAgIC8qKlxuICAgICAgICBUaGUgW3Byb3BzXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jdmlldy5FZGl0b3JQcm9wcykgZXhwb3J0ZWQgYnkgdGhpcyBwbHVnaW4uXG4gICAgICAgICovXG4gICAgICAgIHRoaXMucHJvcHMgPSB7fTtcbiAgICAgICAgaWYgKHNwZWMucHJvcHMpXG4gICAgICAgICAgICBiaW5kUHJvcHMoc3BlYy5wcm9wcywgdGhpcywgdGhpcy5wcm9wcyk7XG4gICAgICAgIHRoaXMua2V5ID0gc3BlYy5rZXkgPyBzcGVjLmtleS5rZXkgOiBjcmVhdGVLZXkoXCJwbHVnaW5cIik7XG4gICAgfVxuICAgIC8qKlxuICAgIEV4dHJhY3QgdGhlIHBsdWdpbidzIHN0YXRlIGZpZWxkIGZyb20gYW4gZWRpdG9yIHN0YXRlLlxuICAgICovXG4gICAgZ2V0U3RhdGUoc3RhdGUpIHsgcmV0dXJuIHN0YXRlW3RoaXMua2V5XTsgfVxufVxuY29uc3Qga2V5cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5mdW5jdGlvbiBjcmVhdGVLZXkobmFtZSkge1xuICAgIGlmIChuYW1lIGluIGtleXMpXG4gICAgICAgIHJldHVybiBuYW1lICsgXCIkXCIgKyArK2tleXNbbmFtZV07XG4gICAga2V5c1tuYW1lXSA9IDA7XG4gICAgcmV0dXJuIG5hbWUgKyBcIiRcIjtcbn1cbi8qKlxuQSBrZXkgaXMgdXNlZCB0byBbdGFnXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jc3RhdGUuUGx1Z2luU3BlYy5rZXkpIHBsdWdpbnMgaW4gYSB3YXlcbnRoYXQgbWFrZXMgaXQgcG9zc2libGUgdG8gZmluZCB0aGVtLCBnaXZlbiBhbiBlZGl0b3Igc3RhdGUuXG5Bc3NpZ25pbmcgYSBrZXkgZG9lcyBtZWFuIG9ubHkgb25lIHBsdWdpbiBvZiB0aGF0IHR5cGUgY2FuIGJlXG5hY3RpdmUgaW4gYSBzdGF0ZS5cbiovXG5jbGFzcyBQbHVnaW5LZXkge1xuICAgIC8qKlxuICAgIENyZWF0ZSBhIHBsdWdpbiBrZXkuXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYW1lID0gXCJrZXlcIikgeyB0aGlzLmtleSA9IGNyZWF0ZUtleShuYW1lKTsgfVxuICAgIC8qKlxuICAgIEdldCB0aGUgYWN0aXZlIHBsdWdpbiB3aXRoIHRoaXMga2V5LCBpZiBhbnksIGZyb20gYW4gZWRpdG9yXG4gICAgc3RhdGUuXG4gICAgKi9cbiAgICBnZXQoc3RhdGUpIHsgcmV0dXJuIHN0YXRlLmNvbmZpZy5wbHVnaW5zQnlLZXlbdGhpcy5rZXldOyB9XG4gICAgLyoqXG4gICAgR2V0IHRoZSBwbHVnaW4ncyBzdGF0ZSBmcm9tIGFuIGVkaXRvciBzdGF0ZS5cbiAgICAqL1xuICAgIGdldFN0YXRlKHN0YXRlKSB7IHJldHVybiBzdGF0ZVt0aGlzLmtleV07IH1cbn1cblxuZXhwb3J0IHsgQWxsU2VsZWN0aW9uLCBFZGl0b3JTdGF0ZSwgTm9kZVNlbGVjdGlvbiwgUGx1Z2luLCBQbHVnaW5LZXksIFNlbGVjdGlvbiwgU2VsZWN0aW9uUmFuZ2UsIFRleHRTZWxlY3Rpb24sIFRyYW5zYWN0aW9uIH07XG4iLCJpbXBvcnQgeyBUZXh0U2VsZWN0aW9uLCBOb2RlU2VsZWN0aW9uLCBTZWxlY3Rpb24sIEFsbFNlbGVjdGlvbiB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcbmltcG9ydCB7IERPTVNlcmlhbGl6ZXIsIEZyYWdtZW50LCBNYXJrLCBTbGljZSwgRE9NUGFyc2VyIH0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuaW1wb3J0IHsgZHJvcFBvaW50IH0gZnJvbSAncHJvc2VtaXJyb3ItdHJhbnNmb3JtJztcblxuY29uc3QgZG9tSW5kZXggPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGZvciAodmFyIGluZGV4ID0gMDs7IGluZGV4KyspIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICBpZiAoIW5vZGUpXG4gICAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxufTtcbmNvbnN0IHBhcmVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGxldCBwYXJlbnQgPSBub2RlLmFzc2lnbmVkU2xvdCB8fCBub2RlLnBhcmVudE5vZGU7XG4gICAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT0gMTEgPyBwYXJlbnQuaG9zdCA6IHBhcmVudDtcbn07XG5sZXQgcmV1c2VkUmFuZ2UgPSBudWxsO1xuLy8gTm90ZSB0aGF0IHRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJhbmdlLCBiZWNhdXNlIERPTSByYW5nZVxuLy8gb2JqZWN0cyBhcmUgZXZlcnkgZXhwZW5zaXZlLCBhbmQga2VlcCBzbG93aW5nIGRvd24gc3Vic2VxdWVudCBET01cbi8vIHVwZGF0ZXMsIGZvciBzb21lIHJlYXNvbi5cbmNvbnN0IHRleHRSYW5nZSA9IGZ1bmN0aW9uIChub2RlLCBmcm9tLCB0bykge1xuICAgIGxldCByYW5nZSA9IHJldXNlZFJhbmdlIHx8IChyZXVzZWRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkpO1xuICAgIHJhbmdlLnNldEVuZChub2RlLCB0byA9PSBudWxsID8gbm9kZS5ub2RlVmFsdWUubGVuZ3RoIDogdG8pO1xuICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIGZyb20gfHwgMCk7XG4gICAgcmV0dXJuIHJhbmdlO1xufTtcbi8vIFNjYW5zIGZvcndhcmQgYW5kIGJhY2t3YXJkIHRocm91Z2ggRE9NIHBvc2l0aW9ucyBlcXVpdmFsZW50IHRvIHRoZVxuLy8gZ2l2ZW4gb25lIHRvIHNlZSBpZiB0aGUgdHdvIGFyZSBpbiB0aGUgc2FtZSBwbGFjZSAoaS5lLiBhZnRlciBhXG4vLyB0ZXh0IG5vZGUgdnMgYXQgdGhlIGVuZCBvZiB0aGF0IHRleHQgbm9kZSlcbmNvbnN0IGlzRXF1aXZhbGVudFBvc2l0aW9uID0gZnVuY3Rpb24gKG5vZGUsIG9mZiwgdGFyZ2V0Tm9kZSwgdGFyZ2V0T2ZmKSB7XG4gICAgcmV0dXJuIHRhcmdldE5vZGUgJiYgKHNjYW5Gb3Iobm9kZSwgb2ZmLCB0YXJnZXROb2RlLCB0YXJnZXRPZmYsIC0xKSB8fFxuICAgICAgICBzY2FuRm9yKG5vZGUsIG9mZiwgdGFyZ2V0Tm9kZSwgdGFyZ2V0T2ZmLCAxKSk7XG59O1xuY29uc3QgYXRvbUVsZW1lbnRzID0gL14oaW1nfGJyfGlucHV0fHRleHRhcmVhfGhyKSQvaTtcbmZ1bmN0aW9uIHNjYW5Gb3Iobm9kZSwgb2ZmLCB0YXJnZXROb2RlLCB0YXJnZXRPZmYsIGRpcikge1xuICAgIGZvciAoOzspIHtcbiAgICAgICAgaWYgKG5vZGUgPT0gdGFyZ2V0Tm9kZSAmJiBvZmYgPT0gdGFyZ2V0T2ZmKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChvZmYgPT0gKGRpciA8IDAgPyAwIDogbm9kZVNpemUobm9kZSkpKSB7XG4gICAgICAgICAgICBsZXQgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgaWYgKCFwYXJlbnQgfHwgcGFyZW50Lm5vZGVUeXBlICE9IDEgfHwgaGFzQmxvY2tEZXNjKG5vZGUpIHx8IGF0b21FbGVtZW50cy50ZXN0KG5vZGUubm9kZU5hbWUpIHx8XG4gICAgICAgICAgICAgICAgbm9kZS5jb250ZW50RWRpdGFibGUgPT0gXCJmYWxzZVwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIG9mZiA9IGRvbUluZGV4KG5vZGUpICsgKGRpciA8IDAgPyAwIDogMSk7XG4gICAgICAgICAgICBub2RlID0gcGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSkge1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGROb2Rlc1tvZmYgKyAoZGlyIDwgMCA/IC0xIDogMCldO1xuICAgICAgICAgICAgaWYgKG5vZGUuY29udGVudEVkaXRhYmxlID09IFwiZmFsc2VcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBvZmYgPSBkaXIgPCAwID8gbm9kZVNpemUobm9kZSkgOiAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gbm9kZVNpemUobm9kZSkge1xuICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09IDMgPyBub2RlLm5vZGVWYWx1ZS5sZW5ndGggOiBub2RlLmNoaWxkTm9kZXMubGVuZ3RoO1xufVxuZnVuY3Rpb24gaXNPbkVkZ2Uobm9kZSwgb2Zmc2V0LCBwYXJlbnQpIHtcbiAgICBmb3IgKGxldCBhdFN0YXJ0ID0gb2Zmc2V0ID09IDAsIGF0RW5kID0gb2Zmc2V0ID09IG5vZGVTaXplKG5vZGUpOyBhdFN0YXJ0IHx8IGF0RW5kOykge1xuICAgICAgICBpZiAobm9kZSA9PSBwYXJlbnQpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgbGV0IGluZGV4ID0gZG9tSW5kZXgobm9kZSk7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICAgIGlmICghbm9kZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgYXRTdGFydCA9IGF0U3RhcnQgJiYgaW5kZXggPT0gMDtcbiAgICAgICAgYXRFbmQgPSBhdEVuZCAmJiBpbmRleCA9PSBub2RlU2l6ZShub2RlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYXNCbG9ja0Rlc2MoZG9tKSB7XG4gICAgbGV0IGRlc2M7XG4gICAgZm9yIChsZXQgY3VyID0gZG9tOyBjdXI7IGN1ciA9IGN1ci5wYXJlbnROb2RlKVxuICAgICAgICBpZiAoZGVzYyA9IGN1ci5wbVZpZXdEZXNjKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgcmV0dXJuIGRlc2MgJiYgZGVzYy5ub2RlICYmIGRlc2Mubm9kZS5pc0Jsb2NrICYmIChkZXNjLmRvbSA9PSBkb20gfHwgZGVzYy5jb250ZW50RE9NID09IGRvbSk7XG59XG4vLyBXb3JrIGFyb3VuZCBDaHJvbWUgaXNzdWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ3NTIzXG4vLyAoaXNDb2xsYXBzZWQgaW5hcHByb3ByaWF0ZWx5IHJldHVybnMgdHJ1ZSBpbiBzaGFkb3cgZG9tKVxuY29uc3Qgc2VsZWN0aW9uQ29sbGFwc2VkID0gZnVuY3Rpb24gKGRvbVNlbCkge1xuICAgIHJldHVybiBkb21TZWwuZm9jdXNOb2RlICYmIGlzRXF1aXZhbGVudFBvc2l0aW9uKGRvbVNlbC5mb2N1c05vZGUsIGRvbVNlbC5mb2N1c09mZnNldCwgZG9tU2VsLmFuY2hvck5vZGUsIGRvbVNlbC5hbmNob3JPZmZzZXQpO1xufTtcbmZ1bmN0aW9uIGtleUV2ZW50KGtleUNvZGUsIGtleSkge1xuICAgIGxldCBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgZXZlbnQuaW5pdEV2ZW50KFwia2V5ZG93blwiLCB0cnVlLCB0cnVlKTtcbiAgICBldmVudC5rZXlDb2RlID0ga2V5Q29kZTtcbiAgICBldmVudC5rZXkgPSBldmVudC5jb2RlID0ga2V5O1xuICAgIHJldHVybiBldmVudDtcbn1cbmZ1bmN0aW9uIGRlZXBBY3RpdmVFbGVtZW50KGRvYykge1xuICAgIGxldCBlbHQgPSBkb2MuYWN0aXZlRWxlbWVudDtcbiAgICB3aGlsZSAoZWx0ICYmIGVsdC5zaGFkb3dSb290KVxuICAgICAgICBlbHQgPSBlbHQuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50O1xuICAgIHJldHVybiBlbHQ7XG59XG5cbmNvbnN0IG5hdiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT0gXCJ1bmRlZmluZWRcIiA/IG5hdmlnYXRvciA6IG51bGw7XG5jb25zdCBkb2MgPSB0eXBlb2YgZG9jdW1lbnQgIT0gXCJ1bmRlZmluZWRcIiA/IGRvY3VtZW50IDogbnVsbDtcbmNvbnN0IGFnZW50ID0gKG5hdiAmJiBuYXYudXNlckFnZW50KSB8fCBcIlwiO1xuY29uc3QgaWVfZWRnZSA9IC9FZGdlXFwvKFxcZCspLy5leGVjKGFnZW50KTtcbmNvbnN0IGllX3VwdG8xMCA9IC9NU0lFIFxcZC8uZXhlYyhhZ2VudCk7XG5jb25zdCBpZV8xMXVwID0gL1RyaWRlbnRcXC8oPzpbNy05XXxcXGR7Mix9KVxcLi4qcnY6KFxcZCspLy5leGVjKGFnZW50KTtcbmNvbnN0IGllID0gISEoaWVfdXB0bzEwIHx8IGllXzExdXAgfHwgaWVfZWRnZSk7XG5jb25zdCBpZV92ZXJzaW9uID0gaWVfdXB0bzEwID8gZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDogaWVfMTF1cCA/ICtpZV8xMXVwWzFdIDogaWVfZWRnZSA/ICtpZV9lZGdlWzFdIDogMDtcbmNvbnN0IGdlY2tvID0gIWllICYmIC9nZWNrb1xcLyhcXGQrKS9pLnRlc3QoYWdlbnQpO1xuZ2Vja28gJiYgKygvRmlyZWZveFxcLyhcXGQrKS8uZXhlYyhhZ2VudCkgfHwgWzAsIDBdKVsxXTtcbmNvbnN0IF9jaHJvbWUgPSAhaWUgJiYgL0Nocm9tZVxcLyhcXGQrKS8uZXhlYyhhZ2VudCk7XG5jb25zdCBjaHJvbWUgPSAhIV9jaHJvbWU7XG5jb25zdCBjaHJvbWVfdmVyc2lvbiA9IF9jaHJvbWUgPyArX2Nocm9tZVsxXSA6IDA7XG5jb25zdCBzYWZhcmkgPSAhaWUgJiYgISFuYXYgJiYgL0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdi52ZW5kb3IpO1xuLy8gSXMgdHJ1ZSBmb3IgYm90aCBpT1MgYW5kIGlQYWRPUyBmb3IgY29udmVuaWVuY2VcbmNvbnN0IGlvcyA9IHNhZmFyaSAmJiAoL01vYmlsZVxcL1xcdysvLnRlc3QoYWdlbnQpIHx8ICEhbmF2ICYmIG5hdi5tYXhUb3VjaFBvaW50cyA+IDIpO1xuY29uc3QgbWFjID0gaW9zIHx8IChuYXYgPyAvTWFjLy50ZXN0KG5hdi5wbGF0Zm9ybSkgOiBmYWxzZSk7XG5jb25zdCBhbmRyb2lkID0gL0FuZHJvaWQgXFxkLy50ZXN0KGFnZW50KTtcbmNvbnN0IHdlYmtpdCA9ICEhZG9jICYmIFwid2Via2l0Rm9udFNtb290aGluZ1wiIGluIGRvYy5kb2N1bWVudEVsZW1lbnQuc3R5bGU7XG5jb25zdCB3ZWJraXRfdmVyc2lvbiA9IHdlYmtpdCA/ICsoL1xcYkFwcGxlV2ViS2l0XFwvKFxcZCspLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpIHx8IFswLCAwXSlbMV0gOiAwO1xuXG5mdW5jdGlvbiB3aW5kb3dSZWN0KGRvYykge1xuICAgIHJldHVybiB7IGxlZnQ6IDAsIHJpZ2h0OiBkb2MuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLFxuICAgICAgICB0b3A6IDAsIGJvdHRvbTogZG9jLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfTtcbn1cbmZ1bmN0aW9uIGdldFNpZGUodmFsdWUsIHNpZGUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIgPyB2YWx1ZSA6IHZhbHVlW3NpZGVdO1xufVxuZnVuY3Rpb24gY2xpZW50UmVjdChub2RlKSB7XG4gICAgbGV0IHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIC8vIEFkanVzdCBmb3IgZWxlbWVudHMgd2l0aCBzdHlsZSBcInRyYW5zZm9ybTogc2NhbGUoKVwiXG4gICAgbGV0IHNjYWxlWCA9IChyZWN0LndpZHRoIC8gbm9kZS5vZmZzZXRXaWR0aCkgfHwgMTtcbiAgICBsZXQgc2NhbGVZID0gKHJlY3QuaGVpZ2h0IC8gbm9kZS5vZmZzZXRIZWlnaHQpIHx8IDE7XG4gICAgLy8gTWFrZSBzdXJlIHNjcm9sbGJhciB3aWR0aCBpc24ndCBpbmNsdWRlZCBpbiB0aGUgcmVjdGFuZ2xlXG4gICAgcmV0dXJuIHsgbGVmdDogcmVjdC5sZWZ0LCByaWdodDogcmVjdC5sZWZ0ICsgbm9kZS5jbGllbnRXaWR0aCAqIHNjYWxlWCxcbiAgICAgICAgdG9wOiByZWN0LnRvcCwgYm90dG9tOiByZWN0LnRvcCArIG5vZGUuY2xpZW50SGVpZ2h0ICogc2NhbGVZIH07XG59XG5mdW5jdGlvbiBzY3JvbGxSZWN0SW50b1ZpZXcodmlldywgcmVjdCwgc3RhcnRET00pIHtcbiAgICBsZXQgc2Nyb2xsVGhyZXNob2xkID0gdmlldy5zb21lUHJvcChcInNjcm9sbFRocmVzaG9sZFwiKSB8fCAwLCBzY3JvbGxNYXJnaW4gPSB2aWV3LnNvbWVQcm9wKFwic2Nyb2xsTWFyZ2luXCIpIHx8IDU7XG4gICAgbGV0IGRvYyA9IHZpZXcuZG9tLm93bmVyRG9jdW1lbnQ7XG4gICAgZm9yIChsZXQgcGFyZW50ID0gc3RhcnRET00gfHwgdmlldy5kb207OyBwYXJlbnQgPSBwYXJlbnROb2RlKHBhcmVudCkpIHtcbiAgICAgICAgaWYgKCFwYXJlbnQpXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgaWYgKHBhcmVudC5ub2RlVHlwZSAhPSAxKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGxldCBlbHQgPSBwYXJlbnQ7XG4gICAgICAgIGxldCBhdFRvcCA9IGVsdCA9PSBkb2MuYm9keTtcbiAgICAgICAgbGV0IGJvdW5kaW5nID0gYXRUb3AgPyB3aW5kb3dSZWN0KGRvYykgOiBjbGllbnRSZWN0KGVsdCk7XG4gICAgICAgIGxldCBtb3ZlWCA9IDAsIG1vdmVZID0gMDtcbiAgICAgICAgaWYgKHJlY3QudG9wIDwgYm91bmRpbmcudG9wICsgZ2V0U2lkZShzY3JvbGxUaHJlc2hvbGQsIFwidG9wXCIpKVxuICAgICAgICAgICAgbW92ZVkgPSAtKGJvdW5kaW5nLnRvcCAtIHJlY3QudG9wICsgZ2V0U2lkZShzY3JvbGxNYXJnaW4sIFwidG9wXCIpKTtcbiAgICAgICAgZWxzZSBpZiAocmVjdC5ib3R0b20gPiBib3VuZGluZy5ib3R0b20gLSBnZXRTaWRlKHNjcm9sbFRocmVzaG9sZCwgXCJib3R0b21cIikpXG4gICAgICAgICAgICBtb3ZlWSA9IHJlY3QuYm90dG9tIC0gYm91bmRpbmcuYm90dG9tICsgZ2V0U2lkZShzY3JvbGxNYXJnaW4sIFwiYm90dG9tXCIpO1xuICAgICAgICBpZiAocmVjdC5sZWZ0IDwgYm91bmRpbmcubGVmdCArIGdldFNpZGUoc2Nyb2xsVGhyZXNob2xkLCBcImxlZnRcIikpXG4gICAgICAgICAgICBtb3ZlWCA9IC0oYm91bmRpbmcubGVmdCAtIHJlY3QubGVmdCArIGdldFNpZGUoc2Nyb2xsTWFyZ2luLCBcImxlZnRcIikpO1xuICAgICAgICBlbHNlIGlmIChyZWN0LnJpZ2h0ID4gYm91bmRpbmcucmlnaHQgLSBnZXRTaWRlKHNjcm9sbFRocmVzaG9sZCwgXCJyaWdodFwiKSlcbiAgICAgICAgICAgIG1vdmVYID0gcmVjdC5yaWdodCAtIGJvdW5kaW5nLnJpZ2h0ICsgZ2V0U2lkZShzY3JvbGxNYXJnaW4sIFwicmlnaHRcIik7XG4gICAgICAgIGlmIChtb3ZlWCB8fCBtb3ZlWSkge1xuICAgICAgICAgICAgaWYgKGF0VG9wKSB7XG4gICAgICAgICAgICAgICAgZG9jLmRlZmF1bHRWaWV3LnNjcm9sbEJ5KG1vdmVYLCBtb3ZlWSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgc3RhcnRYID0gZWx0LnNjcm9sbExlZnQsIHN0YXJ0WSA9IGVsdC5zY3JvbGxUb3A7XG4gICAgICAgICAgICAgICAgaWYgKG1vdmVZKVxuICAgICAgICAgICAgICAgICAgICBlbHQuc2Nyb2xsVG9wICs9IG1vdmVZO1xuICAgICAgICAgICAgICAgIGlmIChtb3ZlWClcbiAgICAgICAgICAgICAgICAgICAgZWx0LnNjcm9sbExlZnQgKz0gbW92ZVg7XG4gICAgICAgICAgICAgICAgbGV0IGRYID0gZWx0LnNjcm9sbExlZnQgLSBzdGFydFgsIGRZID0gZWx0LnNjcm9sbFRvcCAtIHN0YXJ0WTtcbiAgICAgICAgICAgICAgICByZWN0ID0geyBsZWZ0OiByZWN0LmxlZnQgLSBkWCwgdG9wOiByZWN0LnRvcCAtIGRZLCByaWdodDogcmVjdC5yaWdodCAtIGRYLCBib3R0b206IHJlY3QuYm90dG9tIC0gZFkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYXRUb3ApXG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59XG4vLyBTdG9yZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIG9mIHRoZSBlZGl0b3IncyBwYXJlbnQgbm9kZXMsIGFsb25nIHdpdGhcbi8vIHRoZSB0b3AgcG9zaXRpb24gb2YgYW4gZWxlbWVudCBuZWFyIHRoZSB0b3Agb2YgdGhlIGVkaXRvciwgd2hpY2hcbi8vIHdpbGwgYmUgdXNlZCB0byBtYWtlIHN1cmUgdGhlIHZpc2libGUgdmlld3BvcnQgcmVtYWlucyBzdGFibGUgZXZlblxuLy8gd2hlbiB0aGUgc2l6ZSBvZiB0aGUgY29udGVudCBhYm92ZSBjaGFuZ2VzLlxuZnVuY3Rpb24gc3RvcmVTY3JvbGxQb3Modmlldykge1xuICAgIGxldCByZWN0ID0gdmlldy5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIHN0YXJ0WSA9IE1hdGgubWF4KDAsIHJlY3QudG9wKTtcbiAgICBsZXQgcmVmRE9NLCByZWZUb3A7XG4gICAgZm9yIChsZXQgeCA9IChyZWN0LmxlZnQgKyByZWN0LnJpZ2h0KSAvIDIsIHkgPSBzdGFydFkgKyAxOyB5IDwgTWF0aC5taW4oaW5uZXJIZWlnaHQsIHJlY3QuYm90dG9tKTsgeSArPSA1KSB7XG4gICAgICAgIGxldCBkb20gPSB2aWV3LnJvb3QuZWxlbWVudEZyb21Qb2ludCh4LCB5KTtcbiAgICAgICAgaWYgKCFkb20gfHwgZG9tID09IHZpZXcuZG9tIHx8ICF2aWV3LmRvbS5jb250YWlucyhkb20pKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGxldCBsb2NhbFJlY3QgPSBkb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGlmIChsb2NhbFJlY3QudG9wID49IHN0YXJ0WSAtIDIwKSB7XG4gICAgICAgICAgICByZWZET00gPSBkb207XG4gICAgICAgICAgICByZWZUb3AgPSBsb2NhbFJlY3QudG9wO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgcmVmRE9NOiByZWZET00sIHJlZlRvcDogcmVmVG9wLCBzdGFjazogc2Nyb2xsU3RhY2sodmlldy5kb20pIH07XG59XG5mdW5jdGlvbiBzY3JvbGxTdGFjayhkb20pIHtcbiAgICBsZXQgc3RhY2sgPSBbXSwgZG9jID0gZG9tLm93bmVyRG9jdW1lbnQ7XG4gICAgZm9yIChsZXQgY3VyID0gZG9tOyBjdXI7IGN1ciA9IHBhcmVudE5vZGUoY3VyKSkge1xuICAgICAgICBzdGFjay5wdXNoKHsgZG9tOiBjdXIsIHRvcDogY3VyLnNjcm9sbFRvcCwgbGVmdDogY3VyLnNjcm9sbExlZnQgfSk7XG4gICAgICAgIGlmIChkb20gPT0gZG9jKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBzdGFjaztcbn1cbi8vIFJlc2V0IHRoZSBzY3JvbGwgcG9zaXRpb24gb2YgdGhlIGVkaXRvcidzIHBhcmVudCBub2RlcyB0byB0aGF0IHdoYXRcbi8vIGl0IHdhcyBiZWZvcmUsIHdoZW4gc3RvcmVTY3JvbGxQb3Mgd2FzIGNhbGxlZC5cbmZ1bmN0aW9uIHJlc2V0U2Nyb2xsUG9zKHsgcmVmRE9NLCByZWZUb3AsIHN0YWNrIH0pIHtcbiAgICBsZXQgbmV3UmVmVG9wID0gcmVmRE9NID8gcmVmRE9NLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCA6IDA7XG4gICAgcmVzdG9yZVNjcm9sbFN0YWNrKHN0YWNrLCBuZXdSZWZUb3AgPT0gMCA/IDAgOiBuZXdSZWZUb3AgLSByZWZUb3ApO1xufVxuZnVuY3Rpb24gcmVzdG9yZVNjcm9sbFN0YWNrKHN0YWNrLCBkVG9wKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgeyBkb20sIHRvcCwgbGVmdCB9ID0gc3RhY2tbaV07XG4gICAgICAgIGlmIChkb20uc2Nyb2xsVG9wICE9IHRvcCArIGRUb3ApXG4gICAgICAgICAgICBkb20uc2Nyb2xsVG9wID0gdG9wICsgZFRvcDtcbiAgICAgICAgaWYgKGRvbS5zY3JvbGxMZWZ0ICE9IGxlZnQpXG4gICAgICAgICAgICBkb20uc2Nyb2xsTGVmdCA9IGxlZnQ7XG4gICAgfVxufVxubGV0IHByZXZlbnRTY3JvbGxTdXBwb3J0ZWQgPSBudWxsO1xuLy8gRmVhdHVyZS1kZXRlY3RzIHN1cHBvcnQgZm9yIC5mb2N1cyh7cHJldmVudFNjcm9sbDogdHJ1ZX0pLCBhbmQgdXNlc1xuLy8gYSBmYWxsYmFjayBrbHVkZ2Ugd2hlbiBub3Qgc3VwcG9ydGVkLlxuZnVuY3Rpb24gZm9jdXNQcmV2ZW50U2Nyb2xsKGRvbSkge1xuICAgIGlmIChkb20uc2V0QWN0aXZlKVxuICAgICAgICByZXR1cm4gZG9tLnNldEFjdGl2ZSgpOyAvLyBpbiBJRVxuICAgIGlmIChwcmV2ZW50U2Nyb2xsU3VwcG9ydGVkKVxuICAgICAgICByZXR1cm4gZG9tLmZvY3VzKHByZXZlbnRTY3JvbGxTdXBwb3J0ZWQpO1xuICAgIGxldCBzdG9yZWQgPSBzY3JvbGxTdGFjayhkb20pO1xuICAgIGRvbS5mb2N1cyhwcmV2ZW50U2Nyb2xsU3VwcG9ydGVkID09IG51bGwgPyB7XG4gICAgICAgIGdldCBwcmV2ZW50U2Nyb2xsKCkge1xuICAgICAgICAgICAgcHJldmVudFNjcm9sbFN1cHBvcnRlZCA9IHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9O1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9IDogdW5kZWZpbmVkKTtcbiAgICBpZiAoIXByZXZlbnRTY3JvbGxTdXBwb3J0ZWQpIHtcbiAgICAgICAgcHJldmVudFNjcm9sbFN1cHBvcnRlZCA9IGZhbHNlO1xuICAgICAgICByZXN0b3JlU2Nyb2xsU3RhY2soc3RvcmVkLCAwKTtcbiAgICB9XG59XG5mdW5jdGlvbiBmaW5kT2Zmc2V0SW5Ob2RlKG5vZGUsIGNvb3Jkcykge1xuICAgIGxldCBjbG9zZXN0LCBkeENsb3Nlc3QgPSAyZTgsIGNvb3Jkc0Nsb3Nlc3QsIG9mZnNldCA9IDA7XG4gICAgbGV0IHJvd0JvdCA9IGNvb3Jkcy50b3AsIHJvd1RvcCA9IGNvb3Jkcy50b3A7XG4gICAgZm9yIChsZXQgY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQsIGNoaWxkSW5kZXggPSAwOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZywgY2hpbGRJbmRleCsrKSB7XG4gICAgICAgIGxldCByZWN0cztcbiAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09IDEpXG4gICAgICAgICAgICByZWN0cyA9IGNoaWxkLmdldENsaWVudFJlY3RzKCk7XG4gICAgICAgIGVsc2UgaWYgKGNoaWxkLm5vZGVUeXBlID09IDMpXG4gICAgICAgICAgICByZWN0cyA9IHRleHRSYW5nZShjaGlsZCkuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCByZWN0ID0gcmVjdHNbaV07XG4gICAgICAgICAgICBpZiAocmVjdC50b3AgPD0gcm93Qm90ICYmIHJlY3QuYm90dG9tID49IHJvd1RvcCkge1xuICAgICAgICAgICAgICAgIHJvd0JvdCA9IE1hdGgubWF4KHJlY3QuYm90dG9tLCByb3dCb3QpO1xuICAgICAgICAgICAgICAgIHJvd1RvcCA9IE1hdGgubWluKHJlY3QudG9wLCByb3dUb3ApO1xuICAgICAgICAgICAgICAgIGxldCBkeCA9IHJlY3QubGVmdCA+IGNvb3Jkcy5sZWZ0ID8gcmVjdC5sZWZ0IC0gY29vcmRzLmxlZnRcbiAgICAgICAgICAgICAgICAgICAgOiByZWN0LnJpZ2h0IDwgY29vcmRzLmxlZnQgPyBjb29yZHMubGVmdCAtIHJlY3QucmlnaHQgOiAwO1xuICAgICAgICAgICAgICAgIGlmIChkeCA8IGR4Q2xvc2VzdCkge1xuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0ID0gY2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgIGR4Q2xvc2VzdCA9IGR4O1xuICAgICAgICAgICAgICAgICAgICBjb29yZHNDbG9zZXN0ID0gZHggJiYgY2xvc2VzdC5ub2RlVHlwZSA9PSAzID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogcmVjdC5yaWdodCA8IGNvb3Jkcy5sZWZ0ID8gcmVjdC5yaWdodCA6IHJlY3QubGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogY29vcmRzLnRvcFxuICAgICAgICAgICAgICAgICAgICB9IDogY29vcmRzO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT0gMSAmJiBkeClcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGNoaWxkSW5kZXggKyAoY29vcmRzLmxlZnQgPj0gKHJlY3QubGVmdCArIHJlY3QucmlnaHQpIC8gMiA/IDEgOiAwKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjbG9zZXN0ICYmIChjb29yZHMubGVmdCA+PSByZWN0LnJpZ2h0ICYmIGNvb3Jkcy50b3AgPj0gcmVjdC50b3AgfHxcbiAgICAgICAgICAgICAgICBjb29yZHMubGVmdCA+PSByZWN0LmxlZnQgJiYgY29vcmRzLnRvcCA+PSByZWN0LmJvdHRvbSkpXG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gY2hpbGRJbmRleCArIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNsb3Nlc3QgJiYgY2xvc2VzdC5ub2RlVHlwZSA9PSAzKVxuICAgICAgICByZXR1cm4gZmluZE9mZnNldEluVGV4dChjbG9zZXN0LCBjb29yZHNDbG9zZXN0KTtcbiAgICBpZiAoIWNsb3Nlc3QgfHwgKGR4Q2xvc2VzdCAmJiBjbG9zZXN0Lm5vZGVUeXBlID09IDEpKVxuICAgICAgICByZXR1cm4geyBub2RlLCBvZmZzZXQgfTtcbiAgICByZXR1cm4gZmluZE9mZnNldEluTm9kZShjbG9zZXN0LCBjb29yZHNDbG9zZXN0KTtcbn1cbmZ1bmN0aW9uIGZpbmRPZmZzZXRJblRleHQobm9kZSwgY29vcmRzKSB7XG4gICAgbGV0IGxlbiA9IG5vZGUubm9kZVZhbHVlLmxlbmd0aDtcbiAgICBsZXQgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIGkgKyAxKTtcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgaSk7XG4gICAgICAgIGxldCByZWN0ID0gc2luZ2xlUmVjdChyYW5nZSwgMSk7XG4gICAgICAgIGlmIChyZWN0LnRvcCA9PSByZWN0LmJvdHRvbSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoaW5SZWN0KGNvb3JkcywgcmVjdCkpXG4gICAgICAgICAgICByZXR1cm4geyBub2RlLCBvZmZzZXQ6IGkgKyAoY29vcmRzLmxlZnQgPj0gKHJlY3QubGVmdCArIHJlY3QucmlnaHQpIC8gMiA/IDEgOiAwKSB9O1xuICAgIH1cbiAgICByZXR1cm4geyBub2RlLCBvZmZzZXQ6IDAgfTtcbn1cbmZ1bmN0aW9uIGluUmVjdChjb29yZHMsIHJlY3QpIHtcbiAgICByZXR1cm4gY29vcmRzLmxlZnQgPj0gcmVjdC5sZWZ0IC0gMSAmJiBjb29yZHMubGVmdCA8PSByZWN0LnJpZ2h0ICsgMSAmJlxuICAgICAgICBjb29yZHMudG9wID49IHJlY3QudG9wIC0gMSAmJiBjb29yZHMudG9wIDw9IHJlY3QuYm90dG9tICsgMTtcbn1cbmZ1bmN0aW9uIHRhcmdldEtsdWRnZShkb20sIGNvb3Jkcykge1xuICAgIGxldCBwYXJlbnQgPSBkb20ucGFyZW50Tm9kZTtcbiAgICBpZiAocGFyZW50ICYmIC9ebGkkL2kudGVzdChwYXJlbnQubm9kZU5hbWUpICYmIGNvb3Jkcy5sZWZ0IDwgZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpXG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgcmV0dXJuIGRvbTtcbn1cbmZ1bmN0aW9uIHBvc0Zyb21FbGVtZW50KHZpZXcsIGVsdCwgY29vcmRzKSB7XG4gICAgbGV0IHsgbm9kZSwgb2Zmc2V0IH0gPSBmaW5kT2Zmc2V0SW5Ob2RlKGVsdCwgY29vcmRzKSwgYmlhcyA9IC0xO1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEgJiYgIW5vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICBsZXQgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGJpYXMgPSByZWN0LmxlZnQgIT0gcmVjdC5yaWdodCAmJiBjb29yZHMubGVmdCA+IChyZWN0LmxlZnQgKyByZWN0LnJpZ2h0KSAvIDIgPyAxIDogLTE7XG4gICAgfVxuICAgIHJldHVybiB2aWV3LmRvY1ZpZXcucG9zRnJvbURPTShub2RlLCBvZmZzZXQsIGJpYXMpO1xufVxuZnVuY3Rpb24gcG9zRnJvbUNhcmV0KHZpZXcsIG5vZGUsIG9mZnNldCwgY29vcmRzKSB7XG4gICAgLy8gQnJvd3NlciAoaW4gY2FyZXRQb3NpdGlvbi9SYW5nZUZyb21Qb2ludCkgd2lsbCBhZ3Jlc3NpdmVseVxuICAgIC8vIG5vcm1hbGl6ZSB0b3dhcmRzIG5lYXJieSBpbmxpbmUgbm9kZXMuIFNpbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluXG4gICAgLy8gcG9zaXRpb25zIGJldHdlZW4gYmxvY2sgbm9kZXMgdG9vLCB3ZSBmaXJzdCB3YWxrIHVwIHRoZSBoaWVyYXJjaHlcbiAgICAvLyBvZiBub2RlcyB0byBzZWUgaWYgdGhlcmUgYXJlIGJsb2NrIG5vZGVzIHRoYXQgdGhlIGNvb3JkaW5hdGVzXG4gICAgLy8gZmFsbCBvdXRzaWRlIG9mLiBJZiBzbywgd2UgdGFrZSB0aGUgcG9zaXRpb24gYmVmb3JlL2FmdGVyIHRoYXRcbiAgICAvLyBibG9jay4gSWYgbm90LCB3ZSBjYWxsIGBwb3NGcm9tRE9NYCBvbiB0aGUgcmF3IG5vZGUvb2Zmc2V0LlxuICAgIGxldCBvdXRzaWRlQmxvY2sgPSAtMTtcbiAgICBmb3IgKGxldCBjdXIgPSBub2RlLCBzYXdCbG9jayA9IGZhbHNlOzspIHtcbiAgICAgICAgaWYgKGN1ciA9PSB2aWV3LmRvbSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBsZXQgZGVzYyA9IHZpZXcuZG9jVmlldy5uZWFyZXN0RGVzYyhjdXIsIHRydWUpO1xuICAgICAgICBpZiAoIWRlc2MpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKGRlc2MuZG9tLm5vZGVUeXBlID09IDEgJiYgKGRlc2Mubm9kZS5pc0Jsb2NrICYmIGRlc2MucGFyZW50ICYmICFzYXdCbG9jayB8fCAhZGVzYy5jb250ZW50RE9NKSkge1xuICAgICAgICAgICAgbGV0IHJlY3QgPSBkZXNjLmRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGlmIChkZXNjLm5vZGUuaXNCbG9jayAmJiBkZXNjLnBhcmVudCAmJiAhc2F3QmxvY2spIHtcbiAgICAgICAgICAgICAgICBzYXdCbG9jayA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKHJlY3QubGVmdCA+IGNvb3Jkcy5sZWZ0IHx8IHJlY3QudG9wID4gY29vcmRzLnRvcClcbiAgICAgICAgICAgICAgICAgICAgb3V0c2lkZUJsb2NrID0gZGVzYy5wb3NCZWZvcmU7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVjdC5yaWdodCA8IGNvb3Jkcy5sZWZ0IHx8IHJlY3QuYm90dG9tIDwgY29vcmRzLnRvcClcbiAgICAgICAgICAgICAgICAgICAgb3V0c2lkZUJsb2NrID0gZGVzYy5wb3NBZnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZGVzYy5jb250ZW50RE9NICYmIG91dHNpZGVCbG9jayA8IDApIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW5zaWRlIGEgbGVhZiwgcmV0dXJuIHRoZSBzaWRlIG9mIHRoZSBsZWFmIGNsb3NlciB0byB0aGUgY29vcmRzXG4gICAgICAgICAgICAgICAgbGV0IGJlZm9yZSA9IGRlc2Mubm9kZS5pc0Jsb2NrID8gY29vcmRzLnRvcCA8IChyZWN0LnRvcCArIHJlY3QuYm90dG9tKSAvIDJcbiAgICAgICAgICAgICAgICAgICAgOiBjb29yZHMubGVmdCA8IChyZWN0LmxlZnQgKyByZWN0LnJpZ2h0KSAvIDI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJlZm9yZSA/IGRlc2MucG9zQmVmb3JlIDogZGVzYy5wb3NBZnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdXIgPSBkZXNjLmRvbS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gb3V0c2lkZUJsb2NrID4gLTEgPyBvdXRzaWRlQmxvY2sgOiB2aWV3LmRvY1ZpZXcucG9zRnJvbURPTShub2RlLCBvZmZzZXQsIC0xKTtcbn1cbmZ1bmN0aW9uIGVsZW1lbnRGcm9tUG9pbnQoZWxlbWVudCwgY29vcmRzLCBib3gpIHtcbiAgICBsZXQgbGVuID0gZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDtcbiAgICBpZiAobGVuICYmIGJveC50b3AgPCBib3guYm90dG9tKSB7XG4gICAgICAgIGZvciAobGV0IHN0YXJ0SSA9IE1hdGgubWF4KDAsIE1hdGgubWluKGxlbiAtIDEsIE1hdGguZmxvb3IobGVuICogKGNvb3Jkcy50b3AgLSBib3gudG9wKSAvIChib3guYm90dG9tIC0gYm94LnRvcCkpIC0gMikpLCBpID0gc3RhcnRJOzspIHtcbiAgICAgICAgICAgIGxldCBjaGlsZCA9IGVsZW1lbnQuY2hpbGROb2Rlc1tpXTtcbiAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PSAxKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlY3RzID0gY2hpbGQuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZWN0ID0gcmVjdHNbal07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpblJlY3QoY29vcmRzLCByZWN0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50RnJvbVBvaW50KGNoaWxkLCBjb29yZHMsIHJlY3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoaSA9IChpICsgMSkgJSBsZW4pID09IHN0YXJ0SSlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudDtcbn1cbi8vIEdpdmVuIGFuIHgseSBwb3NpdGlvbiBvbiB0aGUgZWRpdG9yLCBnZXQgdGhlIHBvc2l0aW9uIGluIHRoZSBkb2N1bWVudC5cbmZ1bmN0aW9uIHBvc0F0Q29vcmRzKHZpZXcsIGNvb3Jkcykge1xuICAgIGxldCBkb2MgPSB2aWV3LmRvbS5vd25lckRvY3VtZW50LCBub2RlLCBvZmZzZXQgPSAwO1xuICAgIGlmIChkb2MuY2FyZXRQb3NpdGlvbkZyb21Qb2ludCkge1xuICAgICAgICB0cnkgeyAvLyBGaXJlZm94IHRocm93cyBmb3IgdGhpcyBjYWxsIGluIGhhcmQtdG8tcHJlZGljdCBjaXJjdW1zdGFuY2VzICgjOTk0KVxuICAgICAgICAgICAgbGV0IHBvcyA9IGRvYy5jYXJldFBvc2l0aW9uRnJvbVBvaW50KGNvb3Jkcy5sZWZ0LCBjb29yZHMudG9wKTtcbiAgICAgICAgICAgIGlmIChwb3MpXG4gICAgICAgICAgICAgICAgKHsgb2Zmc2V0Tm9kZTogbm9kZSwgb2Zmc2V0IH0gPSBwb3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfKSB7IH1cbiAgICB9XG4gICAgaWYgKCFub2RlICYmIGRvYy5jYXJldFJhbmdlRnJvbVBvaW50KSB7XG4gICAgICAgIGxldCByYW5nZSA9IGRvYy5jYXJldFJhbmdlRnJvbVBvaW50KGNvb3Jkcy5sZWZ0LCBjb29yZHMudG9wKTtcbiAgICAgICAgaWYgKHJhbmdlKVxuICAgICAgICAgICAgKHsgc3RhcnRDb250YWluZXI6IG5vZGUsIHN0YXJ0T2Zmc2V0OiBvZmZzZXQgfSA9IHJhbmdlKTtcbiAgICB9XG4gICAgbGV0IGVsdCA9ICh2aWV3LnJvb3QuZWxlbWVudEZyb21Qb2ludCA/IHZpZXcucm9vdCA6IGRvYylcbiAgICAgICAgLmVsZW1lbnRGcm9tUG9pbnQoY29vcmRzLmxlZnQsIGNvb3Jkcy50b3ApO1xuICAgIGxldCBwb3M7XG4gICAgaWYgKCFlbHQgfHwgIXZpZXcuZG9tLmNvbnRhaW5zKGVsdC5ub2RlVHlwZSAhPSAxID8gZWx0LnBhcmVudE5vZGUgOiBlbHQpKSB7XG4gICAgICAgIGxldCBib3ggPSB2aWV3LmRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKCFpblJlY3QoY29vcmRzLCBib3gpKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGVsdCA9IGVsZW1lbnRGcm9tUG9pbnQodmlldy5kb20sIGNvb3JkcywgYm94KTtcbiAgICAgICAgaWYgKCFlbHQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gU2FmYXJpJ3MgY2FyZXRSYW5nZUZyb21Qb2ludCByZXR1cm5zIG5vbnNlbnNlIHdoZW4gb24gYSBkcmFnZ2FibGUgZWxlbWVudFxuICAgIGlmIChzYWZhcmkpIHtcbiAgICAgICAgZm9yIChsZXQgcCA9IGVsdDsgbm9kZSAmJiBwOyBwID0gcGFyZW50Tm9kZShwKSlcbiAgICAgICAgICAgIGlmIChwLmRyYWdnYWJsZSlcbiAgICAgICAgICAgICAgICBub2RlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbHQgPSB0YXJnZXRLbHVkZ2UoZWx0LCBjb29yZHMpO1xuICAgIGlmIChub2RlKSB7XG4gICAgICAgIGlmIChnZWNrbyAmJiBub2RlLm5vZGVUeXBlID09IDEpIHtcbiAgICAgICAgICAgIC8vIEZpcmVmb3ggd2lsbCBzb21ldGltZXMgcmV0dXJuIG9mZnNldHMgaW50byA8aW5wdXQ+IG5vZGVzLCB3aGljaFxuICAgICAgICAgICAgLy8gaGF2ZSBubyBhY3R1YWwgY2hpbGRyZW4sIGZyb20gY2FyZXRQb3NpdGlvbkZyb21Qb2ludCAoIzk1MylcbiAgICAgICAgICAgIG9mZnNldCA9IE1hdGgubWluKG9mZnNldCwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCk7XG4gICAgICAgICAgICAvLyBJdCdsbCBhbHNvIG1vdmUgdGhlIHJldHVybmVkIHBvc2l0aW9uIGJlZm9yZSBpbWFnZSBub2RlcyxcbiAgICAgICAgICAgIC8vIGV2ZW4gaWYgdGhvc2UgYXJlIGJlaGluZCBpdC5cbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5leHQgPSBub2RlLmNoaWxkTm9kZXNbb2Zmc2V0XSwgYm94O1xuICAgICAgICAgICAgICAgIGlmIChuZXh0Lm5vZGVOYW1lID09IFwiSU1HXCIgJiYgKGJveCA9IG5leHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLnJpZ2h0IDw9IGNvb3Jkcy5sZWZ0ICYmXG4gICAgICAgICAgICAgICAgICAgIGJveC5ib3R0b20gPiBjb29yZHMudG9wKVxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBTdXNwaWNpb3VzbHkgc3BlY2lmaWMga2x1ZGdlIHRvIHdvcmsgYXJvdW5kIGNhcmV0KkZyb21Qb2ludFxuICAgICAgICAvLyBuZXZlciByZXR1cm5pbmcgYSBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudFxuICAgICAgICBpZiAobm9kZSA9PSB2aWV3LmRvbSAmJiBvZmZzZXQgPT0gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEgJiYgbm9kZS5sYXN0Q2hpbGQubm9kZVR5cGUgPT0gMSAmJlxuICAgICAgICAgICAgY29vcmRzLnRvcCA+IG5vZGUubGFzdENoaWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSlcbiAgICAgICAgICAgIHBvcyA9IHZpZXcuc3RhdGUuZG9jLmNvbnRlbnQuc2l6ZTtcbiAgICAgICAgLy8gSWdub3JlIHBvc2l0aW9ucyBkaXJlY3RseSBhZnRlciBhIEJSLCBzaW5jZSBjYXJldCpGcm9tUG9pbnRcbiAgICAgICAgLy8gJ3JvdW5kIHVwJyBwb3NpdGlvbnMgdGhhdCB3b3VsZCBiZSBtb3JlIGFjY3VyYXRlbHkgcGxhY2VkXG4gICAgICAgIC8vIGJlZm9yZSB0aGUgQlIgbm9kZS5cbiAgICAgICAgZWxzZSBpZiAob2Zmc2V0ID09IDAgfHwgbm9kZS5ub2RlVHlwZSAhPSAxIHx8IG5vZGUuY2hpbGROb2Rlc1tvZmZzZXQgLSAxXS5ub2RlTmFtZSAhPSBcIkJSXCIpXG4gICAgICAgICAgICBwb3MgPSBwb3NGcm9tQ2FyZXQodmlldywgbm9kZSwgb2Zmc2V0LCBjb29yZHMpO1xuICAgIH1cbiAgICBpZiAocG9zID09IG51bGwpXG4gICAgICAgIHBvcyA9IHBvc0Zyb21FbGVtZW50KHZpZXcsIGVsdCwgY29vcmRzKTtcbiAgICBsZXQgZGVzYyA9IHZpZXcuZG9jVmlldy5uZWFyZXN0RGVzYyhlbHQsIHRydWUpO1xuICAgIHJldHVybiB7IHBvcywgaW5zaWRlOiBkZXNjID8gZGVzYy5wb3NBdFN0YXJ0IC0gZGVzYy5ib3JkZXIgOiAtMSB9O1xufVxuZnVuY3Rpb24gc2luZ2xlUmVjdCh0YXJnZXQsIGJpYXMpIHtcbiAgICBsZXQgcmVjdHMgPSB0YXJnZXQuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgICByZXR1cm4gIXJlY3RzLmxlbmd0aCA/IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IHJlY3RzW2JpYXMgPCAwID8gMCA6IHJlY3RzLmxlbmd0aCAtIDFdO1xufVxuY29uc3QgQklESSA9IC9bXFx1MDU5MC1cXHUwNWY0XFx1MDYwMC1cXHUwNmZmXFx1MDcwMC1cXHUwOGFjXS87XG4vLyBHaXZlbiBhIHBvc2l0aW9uIGluIHRoZSBkb2N1bWVudCBtb2RlbCwgZ2V0IGEgYm91bmRpbmcgYm94IG9mIHRoZVxuLy8gY2hhcmFjdGVyIGF0IHRoYXQgcG9zaXRpb24sIHJlbGF0aXZlIHRvIHRoZSB3aW5kb3cuXG5mdW5jdGlvbiBjb29yZHNBdFBvcyh2aWV3LCBwb3MsIHNpZGUpIHtcbiAgICBsZXQgeyBub2RlLCBvZmZzZXQsIGF0b20gfSA9IHZpZXcuZG9jVmlldy5kb21Gcm9tUG9zKHBvcywgc2lkZSA8IDAgPyAtMSA6IDEpO1xuICAgIGxldCBzdXBwb3J0RW1wdHlSYW5nZSA9IHdlYmtpdCB8fCBnZWNrbztcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAzKSB7XG4gICAgICAgIC8vIFRoZXNlIGJyb3dzZXJzIHN1cHBvcnQgcXVlcnlpbmcgZW1wdHkgdGV4dCByYW5nZXMuIFByZWZlciB0aGF0IGluXG4gICAgICAgIC8vIGJpZGkgY29udGV4dCBvciB3aGVuIGF0IHRoZSBlbmQgb2YgYSBub2RlLlxuICAgICAgICBpZiAoc3VwcG9ydEVtcHR5UmFuZ2UgJiYgKEJJREkudGVzdChub2RlLm5vZGVWYWx1ZSkgfHwgKHNpZGUgPCAwID8gIW9mZnNldCA6IG9mZnNldCA9PSBub2RlLm5vZGVWYWx1ZS5sZW5ndGgpKSkge1xuICAgICAgICAgICAgbGV0IHJlY3QgPSBzaW5nbGVSZWN0KHRleHRSYW5nZShub2RlLCBvZmZzZXQsIG9mZnNldCksIHNpZGUpO1xuICAgICAgICAgICAgLy8gRmlyZWZveCByZXR1cm5zIGJhZCByZXN1bHRzICh0aGUgcG9zaXRpb24gYmVmb3JlIHRoZSBzcGFjZSlcbiAgICAgICAgICAgIC8vIHdoZW4gcXVlcnlpbmcgYSBwb3NpdGlvbiBkaXJlY3RseSBhZnRlciBsaW5lLWJyb2tlblxuICAgICAgICAgICAgLy8gd2hpdGVzcGFjZS4gRGV0ZWN0IHRoaXMgc2l0dWF0aW9uIGFuZCBhbmQga2x1ZGdlIGFyb3VuZCBpdFxuICAgICAgICAgICAgaWYgKGdlY2tvICYmIG9mZnNldCAmJiAvXFxzLy50ZXN0KG5vZGUubm9kZVZhbHVlW29mZnNldCAtIDFdKSAmJiBvZmZzZXQgPCBub2RlLm5vZGVWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVjdEJlZm9yZSA9IHNpbmdsZVJlY3QodGV4dFJhbmdlKG5vZGUsIG9mZnNldCAtIDEsIG9mZnNldCAtIDEpLCAtMSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlY3RCZWZvcmUudG9wID09IHJlY3QudG9wKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZWN0QWZ0ZXIgPSBzaW5nbGVSZWN0KHRleHRSYW5nZShub2RlLCBvZmZzZXQsIG9mZnNldCArIDEpLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWN0QWZ0ZXIudG9wICE9IHJlY3QudG9wKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsYXR0ZW5WKHJlY3RBZnRlciwgcmVjdEFmdGVyLmxlZnQgPCByZWN0QmVmb3JlLmxlZnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZWN0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGZyb20gPSBvZmZzZXQsIHRvID0gb2Zmc2V0LCB0YWtlU2lkZSA9IHNpZGUgPCAwID8gMSA6IC0xO1xuICAgICAgICAgICAgaWYgKHNpZGUgPCAwICYmICFvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICB0bysrO1xuICAgICAgICAgICAgICAgIHRha2VTaWRlID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzaWRlID49IDAgJiYgb2Zmc2V0ID09IG5vZGUubm9kZVZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZyb20tLTtcbiAgICAgICAgICAgICAgICB0YWtlU2lkZSA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzaWRlIDwgMCkge1xuICAgICAgICAgICAgICAgIGZyb20tLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRvKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmxhdHRlblYoc2luZ2xlUmVjdCh0ZXh0UmFuZ2Uobm9kZSwgZnJvbSwgdG8pLCAxKSwgdGFrZVNpZGUgPCAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgJGRvbSA9IHZpZXcuc3RhdGUuZG9jLnJlc29sdmUocG9zIC0gKGF0b20gfHwgMCkpO1xuICAgIC8vIFJldHVybiBhIGhvcml6b250YWwgbGluZSBpbiBibG9jayBjb250ZXh0XG4gICAgaWYgKCEkZG9tLnBhcmVudC5pbmxpbmVDb250ZW50KSB7XG4gICAgICAgIGlmIChhdG9tID09IG51bGwgJiYgb2Zmc2V0ICYmIChzaWRlIDwgMCB8fCBvZmZzZXQgPT0gbm9kZVNpemUobm9kZSkpKSB7XG4gICAgICAgICAgICBsZXQgYmVmb3JlID0gbm9kZS5jaGlsZE5vZGVzW29mZnNldCAtIDFdO1xuICAgICAgICAgICAgaWYgKGJlZm9yZS5ub2RlVHlwZSA9PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBmbGF0dGVuSChiZWZvcmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXRvbSA9PSBudWxsICYmIG9mZnNldCA8IG5vZGVTaXplKG5vZGUpKSB7XG4gICAgICAgICAgICBsZXQgYWZ0ZXIgPSBub2RlLmNoaWxkTm9kZXNbb2Zmc2V0XTtcbiAgICAgICAgICAgIGlmIChhZnRlci5ub2RlVHlwZSA9PSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBmbGF0dGVuSChhZnRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZsYXR0ZW5IKG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIHNpZGUgPj0gMCk7XG4gICAgfVxuICAgIC8vIElubGluZSwgbm90IGluIHRleHQgbm9kZSAodGhpcyBpcyBub3QgQmlkaS1zYWZlKVxuICAgIGlmIChhdG9tID09IG51bGwgJiYgb2Zmc2V0ICYmIChzaWRlIDwgMCB8fCBvZmZzZXQgPT0gbm9kZVNpemUobm9kZSkpKSB7XG4gICAgICAgIGxldCBiZWZvcmUgPSBub2RlLmNoaWxkTm9kZXNbb2Zmc2V0IC0gMV07XG4gICAgICAgIGxldCB0YXJnZXQgPSBiZWZvcmUubm9kZVR5cGUgPT0gMyA/IHRleHRSYW5nZShiZWZvcmUsIG5vZGVTaXplKGJlZm9yZSkgLSAoc3VwcG9ydEVtcHR5UmFuZ2UgPyAwIDogMSkpXG4gICAgICAgICAgICAvLyBCUiBub2RlcyB0ZW5kIHRvIG9ubHkgcmV0dXJuIHRoZSByZWN0YW5nbGUgYmVmb3JlIHRoZW0uXG4gICAgICAgICAgICAvLyBPbmx5IHVzZSB0aGVtIGlmIHRoZXkgYXJlIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlaXIgcGFyZW50XG4gICAgICAgICAgICA6IGJlZm9yZS5ub2RlVHlwZSA9PSAxICYmIChiZWZvcmUubm9kZU5hbWUgIT0gXCJCUlwiIHx8ICFiZWZvcmUubmV4dFNpYmxpbmcpID8gYmVmb3JlIDogbnVsbDtcbiAgICAgICAgaWYgKHRhcmdldClcbiAgICAgICAgICAgIHJldHVybiBmbGF0dGVuVihzaW5nbGVSZWN0KHRhcmdldCwgMSksIGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKGF0b20gPT0gbnVsbCAmJiBvZmZzZXQgPCBub2RlU2l6ZShub2RlKSkge1xuICAgICAgICBsZXQgYWZ0ZXIgPSBub2RlLmNoaWxkTm9kZXNbb2Zmc2V0XTtcbiAgICAgICAgd2hpbGUgKGFmdGVyLnBtVmlld0Rlc2MgJiYgYWZ0ZXIucG1WaWV3RGVzYy5pZ25vcmVGb3JDb29yZHMpXG4gICAgICAgICAgICBhZnRlciA9IGFmdGVyLm5leHRTaWJsaW5nO1xuICAgICAgICBsZXQgdGFyZ2V0ID0gIWFmdGVyID8gbnVsbCA6IGFmdGVyLm5vZGVUeXBlID09IDMgPyB0ZXh0UmFuZ2UoYWZ0ZXIsIDAsIChzdXBwb3J0RW1wdHlSYW5nZSA/IDAgOiAxKSlcbiAgICAgICAgICAgIDogYWZ0ZXIubm9kZVR5cGUgPT0gMSA/IGFmdGVyIDogbnVsbDtcbiAgICAgICAgaWYgKHRhcmdldClcbiAgICAgICAgICAgIHJldHVybiBmbGF0dGVuVihzaW5nbGVSZWN0KHRhcmdldCwgLTEpLCB0cnVlKTtcbiAgICB9XG4gICAgLy8gQWxsIGVsc2UgZmFpbGVkLCBqdXN0IHRyeSB0byBnZXQgYSByZWN0YW5nbGUgZm9yIHRoZSB0YXJnZXQgbm9kZVxuICAgIHJldHVybiBmbGF0dGVuVihzaW5nbGVSZWN0KG5vZGUubm9kZVR5cGUgPT0gMyA/IHRleHRSYW5nZShub2RlKSA6IG5vZGUsIC1zaWRlKSwgc2lkZSA+PSAwKTtcbn1cbmZ1bmN0aW9uIGZsYXR0ZW5WKHJlY3QsIGxlZnQpIHtcbiAgICBpZiAocmVjdC53aWR0aCA9PSAwKVxuICAgICAgICByZXR1cm4gcmVjdDtcbiAgICBsZXQgeCA9IGxlZnQgPyByZWN0LmxlZnQgOiByZWN0LnJpZ2h0O1xuICAgIHJldHVybiB7IHRvcDogcmVjdC50b3AsIGJvdHRvbTogcmVjdC5ib3R0b20sIGxlZnQ6IHgsIHJpZ2h0OiB4IH07XG59XG5mdW5jdGlvbiBmbGF0dGVuSChyZWN0LCB0b3ApIHtcbiAgICBpZiAocmVjdC5oZWlnaHQgPT0gMClcbiAgICAgICAgcmV0dXJuIHJlY3Q7XG4gICAgbGV0IHkgPSB0b3AgPyByZWN0LnRvcCA6IHJlY3QuYm90dG9tO1xuICAgIHJldHVybiB7IHRvcDogeSwgYm90dG9tOiB5LCBsZWZ0OiByZWN0LmxlZnQsIHJpZ2h0OiByZWN0LnJpZ2h0IH07XG59XG5mdW5jdGlvbiB3aXRoRmx1c2hlZFN0YXRlKHZpZXcsIHN0YXRlLCBmKSB7XG4gICAgbGV0IHZpZXdTdGF0ZSA9IHZpZXcuc3RhdGUsIGFjdGl2ZSA9IHZpZXcucm9vdC5hY3RpdmVFbGVtZW50O1xuICAgIGlmICh2aWV3U3RhdGUgIT0gc3RhdGUpXG4gICAgICAgIHZpZXcudXBkYXRlU3RhdGUoc3RhdGUpO1xuICAgIGlmIChhY3RpdmUgIT0gdmlldy5kb20pXG4gICAgICAgIHZpZXcuZm9jdXMoKTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZigpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHZpZXdTdGF0ZSAhPSBzdGF0ZSlcbiAgICAgICAgICAgIHZpZXcudXBkYXRlU3RhdGUodmlld1N0YXRlKTtcbiAgICAgICAgaWYgKGFjdGl2ZSAhPSB2aWV3LmRvbSAmJiBhY3RpdmUpXG4gICAgICAgICAgICBhY3RpdmUuZm9jdXMoKTtcbiAgICB9XG59XG4vLyBXaGV0aGVyIHZlcnRpY2FsIHBvc2l0aW9uIG1vdGlvbiBpbiBhIGdpdmVuIGRpcmVjdGlvblxuLy8gZnJvbSBhIHBvc2l0aW9uIHdvdWxkIGxlYXZlIGEgdGV4dCBibG9jay5cbmZ1bmN0aW9uIGVuZE9mVGV4dGJsb2NrVmVydGljYWwodmlldywgc3RhdGUsIGRpcikge1xuICAgIGxldCBzZWwgPSBzdGF0ZS5zZWxlY3Rpb247XG4gICAgbGV0ICRwb3MgPSBkaXIgPT0gXCJ1cFwiID8gc2VsLiRmcm9tIDogc2VsLiR0bztcbiAgICByZXR1cm4gd2l0aEZsdXNoZWRTdGF0ZSh2aWV3LCBzdGF0ZSwgKCkgPT4ge1xuICAgICAgICBsZXQgeyBub2RlOiBkb20gfSA9IHZpZXcuZG9jVmlldy5kb21Gcm9tUG9zKCRwb3MucG9zLCBkaXIgPT0gXCJ1cFwiID8gLTEgOiAxKTtcbiAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgbGV0IG5lYXJlc3QgPSB2aWV3LmRvY1ZpZXcubmVhcmVzdERlc2MoZG9tLCB0cnVlKTtcbiAgICAgICAgICAgIGlmICghbmVhcmVzdClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGlmIChuZWFyZXN0Lm5vZGUuaXNCbG9jaykge1xuICAgICAgICAgICAgICAgIGRvbSA9IG5lYXJlc3QuY29udGVudERPTSB8fCBuZWFyZXN0LmRvbTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvbSA9IG5lYXJlc3QuZG9tLnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvb3JkcyA9IGNvb3Jkc0F0UG9zKHZpZXcsICRwb3MucG9zLCAxKTtcbiAgICAgICAgZm9yIChsZXQgY2hpbGQgPSBkb20uZmlyc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICAgIGxldCBib3hlcztcbiAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PSAxKVxuICAgICAgICAgICAgICAgIGJveGVzID0gY2hpbGQuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkLm5vZGVUeXBlID09IDMpXG4gICAgICAgICAgICAgICAgYm94ZXMgPSB0ZXh0UmFuZ2UoY2hpbGQsIDAsIGNoaWxkLm5vZGVWYWx1ZS5sZW5ndGgpLmdldENsaWVudFJlY3RzKCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJveGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGJveCA9IGJveGVzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChib3guYm90dG9tID4gYm94LnRvcCArIDEgJiZcbiAgICAgICAgICAgICAgICAgICAgKGRpciA9PSBcInVwXCIgPyBjb29yZHMudG9wIC0gYm94LnRvcCA+IChib3guYm90dG9tIC0gY29vcmRzLnRvcCkgKiAyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGJveC5ib3R0b20gLSBjb29yZHMuYm90dG9tID4gKGNvb3Jkcy5ib3R0b20gLSBib3gudG9wKSAqIDIpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG59XG5jb25zdCBtYXliZVJUTCA9IC9bXFx1MDU5MC1cXHUwOGFjXS87XG5mdW5jdGlvbiBlbmRPZlRleHRibG9ja0hvcml6b250YWwodmlldywgc3RhdGUsIGRpcikge1xuICAgIGxldCB7ICRoZWFkIH0gPSBzdGF0ZS5zZWxlY3Rpb247XG4gICAgaWYgKCEkaGVhZC5wYXJlbnQuaXNUZXh0YmxvY2spXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsZXQgb2Zmc2V0ID0gJGhlYWQucGFyZW50T2Zmc2V0LCBhdFN0YXJ0ID0gIW9mZnNldCwgYXRFbmQgPSBvZmZzZXQgPT0gJGhlYWQucGFyZW50LmNvbnRlbnQuc2l6ZTtcbiAgICBsZXQgc2VsID0gdmlldy5kb21TZWxlY3Rpb24oKTtcbiAgICAvLyBJZiB0aGUgdGV4dGJsb2NrIGlzIGFsbCBMVFIsIG9yIHRoZSBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydFxuICAgIC8vIFNlbGVjdGlvbi5tb2RpZnkgKEVkZ2UpLCBmYWxsIGJhY2sgdG8gYSBwcmltaXRpdmUgYXBwcm9hY2hcbiAgICBpZiAoIW1heWJlUlRMLnRlc3QoJGhlYWQucGFyZW50LnRleHRDb250ZW50KSB8fCAhc2VsLm1vZGlmeSlcbiAgICAgICAgcmV0dXJuIGRpciA9PSBcImxlZnRcIiB8fCBkaXIgPT0gXCJiYWNrd2FyZFwiID8gYXRTdGFydCA6IGF0RW5kO1xuICAgIHJldHVybiB3aXRoRmx1c2hlZFN0YXRlKHZpZXcsIHN0YXRlLCAoKSA9PiB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBodWdlIGhhY2ssIGJ1dCBhcHBlYXJzIHRvIGJlIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBjdXJyZW50bHkgZG86IHVzZSBgU2VsZWN0aW9uLm1vZGlmeWAgdG8gbW92ZSB0aGUgc2VsZWN0aW9uIGJ5XG4gICAgICAgIC8vIG9uZSBjaGFyYWN0ZXIsIGFuZCBzZWUgaWYgdGhhdCBtb3ZlcyB0aGUgY3Vyc29yIG91dCBvZiB0aGVcbiAgICAgICAgLy8gdGV4dGJsb2NrIChvciBkb2Vzbid0IG1vdmUgaXQgYXQgYWxsLCB3aGVuIGF0IHRoZSBzdGFydC9lbmQgb2ZcbiAgICAgICAgLy8gdGhlIGRvY3VtZW50KS5cbiAgICAgICAgbGV0IHsgZm9jdXNOb2RlOiBvbGROb2RlLCBmb2N1c09mZnNldDogb2xkT2ZmLCBhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQgfSA9IHZpZXcuZG9tU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgbGV0IG9sZEJpZGlMZXZlbCA9IHNlbC5jYXJldEJpZGlMZXZlbCAvLyBPbmx5IGZvciBGaXJlZm94XG4gICAgICAgIDtcbiAgICAgICAgc2VsLm1vZGlmeShcIm1vdmVcIiwgZGlyLCBcImNoYXJhY3RlclwiKTtcbiAgICAgICAgbGV0IHBhcmVudERPTSA9ICRoZWFkLmRlcHRoID8gdmlldy5kb2NWaWV3LmRvbUFmdGVyUG9zKCRoZWFkLmJlZm9yZSgpKSA6IHZpZXcuZG9tO1xuICAgICAgICBsZXQgeyBmb2N1c05vZGU6IG5ld05vZGUsIGZvY3VzT2Zmc2V0OiBuZXdPZmYgfSA9IHZpZXcuZG9tU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ld05vZGUgJiYgIXBhcmVudERPTS5jb250YWlucyhuZXdOb2RlLm5vZGVUeXBlID09IDEgPyBuZXdOb2RlIDogbmV3Tm9kZS5wYXJlbnROb2RlKSB8fFxuICAgICAgICAgICAgKG9sZE5vZGUgPT0gbmV3Tm9kZSAmJiBvbGRPZmYgPT0gbmV3T2ZmKTtcbiAgICAgICAgLy8gUmVzdG9yZSB0aGUgcHJldmlvdXMgc2VsZWN0aW9uXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzZWwuY29sbGFwc2UoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0KTtcbiAgICAgICAgICAgIGlmIChvbGROb2RlICYmIChvbGROb2RlICE9IGFuY2hvck5vZGUgfHwgb2xkT2ZmICE9IGFuY2hvck9mZnNldCkgJiYgc2VsLmV4dGVuZClcbiAgICAgICAgICAgICAgICBzZWwuZXh0ZW5kKG9sZE5vZGUsIG9sZE9mZik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF8pIHsgfVxuICAgICAgICBpZiAob2xkQmlkaUxldmVsICE9IG51bGwpXG4gICAgICAgICAgICBzZWwuY2FyZXRCaWRpTGV2ZWwgPSBvbGRCaWRpTGV2ZWw7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG59XG5sZXQgY2FjaGVkU3RhdGUgPSBudWxsO1xubGV0IGNhY2hlZERpciA9IG51bGw7XG5sZXQgY2FjaGVkUmVzdWx0ID0gZmFsc2U7XG5mdW5jdGlvbiBlbmRPZlRleHRibG9jayh2aWV3LCBzdGF0ZSwgZGlyKSB7XG4gICAgaWYgKGNhY2hlZFN0YXRlID09IHN0YXRlICYmIGNhY2hlZERpciA9PSBkaXIpXG4gICAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgY2FjaGVkU3RhdGUgPSBzdGF0ZTtcbiAgICBjYWNoZWREaXIgPSBkaXI7XG4gICAgcmV0dXJuIGNhY2hlZFJlc3VsdCA9IGRpciA9PSBcInVwXCIgfHwgZGlyID09IFwiZG93blwiXG4gICAgICAgID8gZW5kT2ZUZXh0YmxvY2tWZXJ0aWNhbCh2aWV3LCBzdGF0ZSwgZGlyKVxuICAgICAgICA6IGVuZE9mVGV4dGJsb2NrSG9yaXpvbnRhbCh2aWV3LCBzdGF0ZSwgZGlyKTtcbn1cblxuLy8gVmlldyBkZXNjcmlwdGlvbnMgYXJlIGRhdGEgc3RydWN0dXJlcyB0aGF0IGRlc2NyaWJlIHRoZSBET00gdGhhdCBpc1xuLy8gdXNlZCB0byByZXByZXNlbnQgdGhlIGVkaXRvcidzIGNvbnRlbnQuIFRoZXkgYXJlIHVzZWQgZm9yOlxuLy9cbi8vIC0gSW5jcmVtZW50YWwgcmVkcmF3aW5nIHdoZW4gdGhlIGRvY3VtZW50IGNoYW5nZXNcbi8vXG4vLyAtIEZpZ3VyaW5nIG91dCB3aGF0IHBhcnQgb2YgdGhlIGRvY3VtZW50IGEgZ2l2ZW4gRE9NIHBvc2l0aW9uXG4vLyAgIGNvcnJlc3BvbmRzIHRvXG4vL1xuLy8gLSBXaXJpbmcgaW4gY3VzdG9tIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgZWRpdGluZyBpbnRlcmZhY2UgZm9yIGFcbi8vICAgZ2l2ZW4gbm9kZVxuLy9cbi8vIFRoZXkgZm9ybSBhIGRvdWJseS1saW5rZWQgbXV0YWJsZSB0cmVlLCBzdGFydGluZyBhdCBgdmlldy5kb2NWaWV3YC5cbmNvbnN0IE5PVF9ESVJUWSA9IDAsIENISUxEX0RJUlRZID0gMSwgQ09OVEVOVF9ESVJUWSA9IDIsIE5PREVfRElSVFkgPSAzO1xuLy8gU3VwZXJjbGFzcyBmb3IgdGhlIHZhcmlvdXMga2luZHMgb2YgZGVzY3JpcHRpb25zLiBEZWZpbmVzIHRoZWlyXG4vLyBiYXNpYyBzdHJ1Y3R1cmUgYW5kIHNoYXJlZCBtZXRob2RzLlxuY2xhc3MgVmlld0Rlc2Mge1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudCwgY2hpbGRyZW4sIGRvbSwgXG4gICAgLy8gVGhpcyBpcyB0aGUgbm9kZSB0aGF0IGhvbGRzIHRoZSBjaGlsZCB2aWV3cy4gSXQgbWF5IGJlIG51bGwgZm9yXG4gICAgLy8gZGVzY3MgdGhhdCBkb24ndCBoYXZlIGNoaWxkcmVuLlxuICAgIGNvbnRlbnRET00pIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgdGhpcy5kb20gPSBkb207XG4gICAgICAgIHRoaXMuY29udGVudERPTSA9IGNvbnRlbnRET007XG4gICAgICAgIHRoaXMuZGlydHkgPSBOT1RfRElSVFk7XG4gICAgICAgIC8vIEFuIGV4cGFuZG8gcHJvcGVydHkgb24gdGhlIERPTSBub2RlIHByb3ZpZGVzIGEgbGluayBiYWNrIHRvIGl0c1xuICAgICAgICAvLyBkZXNjcmlwdGlvbi5cbiAgICAgICAgZG9tLnBtVmlld0Rlc2MgPSB0aGlzO1xuICAgIH1cbiAgICAvLyBVc2VkIHRvIGNoZWNrIHdoZXRoZXIgYSBnaXZlbiBkZXNjcmlwdGlvbiBjb3JyZXNwb25kcyB0byBhXG4gICAgLy8gd2lkZ2V0L21hcmsvbm9kZS5cbiAgICBtYXRjaGVzV2lkZ2V0KHdpZGdldCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBtYXRjaGVzTWFyayhtYXJrKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIG1hdGNoZXNOb2RlKG5vZGUsIG91dGVyRGVjbywgaW5uZXJEZWNvKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIG1hdGNoZXNIYWNrKG5vZGVOYW1lKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIC8vIFdoZW4gcGFyc2luZyBpbi1lZGl0b3IgY29udGVudCAoaW4gZG9tY2hhbmdlLmpzKSwgd2UgYWxsb3dcbiAgICAvLyBkZXNjcmlwdGlvbnMgdG8gZGV0ZXJtaW5lIHRoZSBwYXJzZSBydWxlcyB0aGF0IHNob3VsZCBiZSB1c2VkIHRvXG4gICAgLy8gcGFyc2UgdGhlbS5cbiAgICBwYXJzZVJ1bGUoKSB7IHJldHVybiBudWxsOyB9XG4gICAgLy8gVXNlZCBieSB0aGUgZWRpdG9yJ3MgZXZlbnQgaGFuZGxlciB0byBpZ25vcmUgZXZlbnRzIHRoYXQgY29tZVxuICAgIC8vIGZyb20gY2VydGFpbiBkZXNjcy5cbiAgICBzdG9wRXZlbnQoZXZlbnQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgLy8gVGhlIHNpemUgb2YgdGhlIGNvbnRlbnQgcmVwcmVzZW50ZWQgYnkgdGhpcyBkZXNjLlxuICAgIGdldCBzaXplKCkge1xuICAgICAgICBsZXQgc2l6ZSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHNpemUgKz0gdGhpcy5jaGlsZHJlbltpXS5zaXplO1xuICAgICAgICByZXR1cm4gc2l6ZTtcbiAgICB9XG4gICAgLy8gRm9yIGJsb2NrIG5vZGVzLCB0aGlzIHJlcHJlc2VudHMgdGhlIHNwYWNlIHRha2VuIHVwIGJ5IHRoZWlyXG4gICAgLy8gc3RhcnQvZW5kIHRva2Vucy5cbiAgICBnZXQgYm9yZGVyKCkgeyByZXR1cm4gMDsgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5kb20ucG1WaWV3RGVzYyA9PSB0aGlzKVxuICAgICAgICAgICAgdGhpcy5kb20ucG1WaWV3RGVzYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KCk7XG4gICAgfVxuICAgIHBvc0JlZm9yZUNoaWxkKGNoaWxkKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBwb3MgPSB0aGlzLnBvc0F0U3RhcnQ7OyBpKyspIHtcbiAgICAgICAgICAgIGxldCBjdXIgPSB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgaWYgKGN1ciA9PSBjaGlsZClcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9zO1xuICAgICAgICAgICAgcG9zICs9IGN1ci5zaXplO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBwb3NCZWZvcmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5wb3NCZWZvcmVDaGlsZCh0aGlzKTtcbiAgICB9XG4gICAgZ2V0IHBvc0F0U3RhcnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudCA/IHRoaXMucGFyZW50LnBvc0JlZm9yZUNoaWxkKHRoaXMpICsgdGhpcy5ib3JkZXIgOiAwO1xuICAgIH1cbiAgICBnZXQgcG9zQWZ0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc0JlZm9yZSArIHRoaXMuc2l6ZTtcbiAgICB9XG4gICAgZ2V0IHBvc0F0RW5kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3NBdFN0YXJ0ICsgdGhpcy5zaXplIC0gMiAqIHRoaXMuYm9yZGVyO1xuICAgIH1cbiAgICBsb2NhbFBvc0Zyb21ET00oZG9tLCBvZmZzZXQsIGJpYXMpIHtcbiAgICAgICAgLy8gSWYgdGhlIERPTSBwb3NpdGlvbiBpcyBpbiB0aGUgY29udGVudCwgdXNlIHRoZSBjaGlsZCBkZXNjIGFmdGVyXG4gICAgICAgIC8vIGl0IHRvIGZpZ3VyZSBvdXQgYSBwb3NpdGlvbi5cbiAgICAgICAgaWYgKHRoaXMuY29udGVudERPTSAmJiB0aGlzLmNvbnRlbnRET00uY29udGFpbnMoZG9tLm5vZGVUeXBlID09IDEgPyBkb20gOiBkb20ucGFyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgIGlmIChiaWFzIDwgMCkge1xuICAgICAgICAgICAgICAgIGxldCBkb21CZWZvcmUsIGRlc2M7XG4gICAgICAgICAgICAgICAgaWYgKGRvbSA9PSB0aGlzLmNvbnRlbnRET00pIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tQmVmb3JlID0gZG9tLmNoaWxkTm9kZXNbb2Zmc2V0IC0gMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZG9tLnBhcmVudE5vZGUgIT0gdGhpcy5jb250ZW50RE9NKVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tID0gZG9tLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIGRvbUJlZm9yZSA9IGRvbS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChkb21CZWZvcmUgJiYgISgoZGVzYyA9IGRvbUJlZm9yZS5wbVZpZXdEZXNjKSAmJiBkZXNjLnBhcmVudCA9PSB0aGlzKSlcbiAgICAgICAgICAgICAgICAgICAgZG9tQmVmb3JlID0gZG9tQmVmb3JlLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9tQmVmb3JlID8gdGhpcy5wb3NCZWZvcmVDaGlsZChkZXNjKSArIGRlc2Muc2l6ZSA6IHRoaXMucG9zQXRTdGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBkb21BZnRlciwgZGVzYztcbiAgICAgICAgICAgICAgICBpZiAoZG9tID09IHRoaXMuY29udGVudERPTSkge1xuICAgICAgICAgICAgICAgICAgICBkb21BZnRlciA9IGRvbS5jaGlsZE5vZGVzW29mZnNldF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZG9tLnBhcmVudE5vZGUgIT0gdGhpcy5jb250ZW50RE9NKVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tID0gZG9tLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIGRvbUFmdGVyID0gZG9tLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoZG9tQWZ0ZXIgJiYgISgoZGVzYyA9IGRvbUFmdGVyLnBtVmlld0Rlc2MpICYmIGRlc2MucGFyZW50ID09IHRoaXMpKVxuICAgICAgICAgICAgICAgICAgICBkb21BZnRlciA9IGRvbUFmdGVyLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIHJldHVybiBkb21BZnRlciA/IHRoaXMucG9zQmVmb3JlQ2hpbGQoZGVzYykgOiB0aGlzLnBvc0F0RW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyd2lzZSwgdXNlIHZhcmlvdXMgaGV1cmlzdGljcywgZmFsbGluZyBiYWNrIG9uIHRoZSBiaWFzXG4gICAgICAgIC8vIHBhcmFtZXRlciwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcmV0dXJuIHRoZSBwb3NpdGlvbiBhdCB0aGVcbiAgICAgICAgLy8gc3RhcnQgb3IgYXQgdGhlIGVuZCBvZiB0aGlzIHZpZXcgZGVzYy5cbiAgICAgICAgbGV0IGF0RW5kO1xuICAgICAgICBpZiAoZG9tID09IHRoaXMuZG9tICYmIHRoaXMuY29udGVudERPTSkge1xuICAgICAgICAgICAgYXRFbmQgPSBvZmZzZXQgPiBkb21JbmRleCh0aGlzLmNvbnRlbnRET00pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGVudERPTSAmJiB0aGlzLmNvbnRlbnRET00gIT0gdGhpcy5kb20gJiYgdGhpcy5kb20uY29udGFpbnModGhpcy5jb250ZW50RE9NKSkge1xuICAgICAgICAgICAgYXRFbmQgPSBkb20uY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcy5jb250ZW50RE9NKSAmIDI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5kb20uZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAwKVxuICAgICAgICAgICAgICAgIGZvciAobGV0IHNlYXJjaCA9IGRvbTs7IHNlYXJjaCA9IHNlYXJjaC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2ggPT0gdGhpcy5kb20pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0RW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoLnByZXZpb3VzU2libGluZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhdEVuZCA9PSBudWxsICYmIG9mZnNldCA9PSBkb20uY2hpbGROb2Rlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgc2VhcmNoID0gZG9tOzsgc2VhcmNoID0gc2VhcmNoLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaCA9PSB0aGlzLmRvbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXRFbmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaC5uZXh0U2libGluZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGF0RW5kID09IG51bGwgPyBiaWFzID4gMCA6IGF0RW5kKSA/IHRoaXMucG9zQXRFbmQgOiB0aGlzLnBvc0F0U3RhcnQ7XG4gICAgfVxuICAgIG5lYXJlc3REZXNjKGRvbSwgb25seU5vZGVzID0gZmFsc2UpIHtcbiAgICAgICAgZm9yIChsZXQgZmlyc3QgPSB0cnVlLCBjdXIgPSBkb207IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIGxldCBkZXNjID0gdGhpcy5nZXREZXNjKGN1ciksIG5vZGVET007XG4gICAgICAgICAgICBpZiAoZGVzYyAmJiAoIW9ubHlOb2RlcyB8fCBkZXNjLm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgZG9tIGlzIG91dHNpZGUgb2YgdGhpcyBkZXNjJ3Mgbm9kZURPTSwgZG9uJ3QgY291bnQgaXQuXG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0ICYmIChub2RlRE9NID0gZGVzYy5ub2RlRE9NKSAmJlxuICAgICAgICAgICAgICAgICAgICAhKG5vZGVET00ubm9kZVR5cGUgPT0gMSA/IG5vZGVET00uY29udGFpbnMoZG9tLm5vZGVUeXBlID09IDEgPyBkb20gOiBkb20ucGFyZW50Tm9kZSkgOiBub2RlRE9NID09IGRvbSkpXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVzYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXREZXNjKGRvbSkge1xuICAgICAgICBsZXQgZGVzYyA9IGRvbS5wbVZpZXdEZXNjO1xuICAgICAgICBmb3IgKGxldCBjdXIgPSBkZXNjOyBjdXI7IGN1ciA9IGN1ci5wYXJlbnQpXG4gICAgICAgICAgICBpZiAoY3VyID09IHRoaXMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2M7XG4gICAgfVxuICAgIHBvc0Zyb21ET00oZG9tLCBvZmZzZXQsIGJpYXMpIHtcbiAgICAgICAgZm9yIChsZXQgc2NhbiA9IGRvbTsgc2Nhbjsgc2NhbiA9IHNjYW4ucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgbGV0IGRlc2MgPSB0aGlzLmdldERlc2Moc2Nhbik7XG4gICAgICAgICAgICBpZiAoZGVzYylcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzYy5sb2NhbFBvc0Zyb21ET00oZG9tLCBvZmZzZXQsIGJpYXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgLy8gRmluZCB0aGUgZGVzYyBmb3IgdGhlIG5vZGUgYWZ0ZXIgdGhlIGdpdmVuIHBvcywgaWYgYW55LiAoV2hlbiBhXG4gICAgLy8gcGFyZW50IG5vZGUgb3ZlcnJvZGUgcmVuZGVyaW5nLCB0aGVyZSBtaWdodCBub3QgYmUgb25lLilcbiAgICBkZXNjQXQocG9zKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBvZmZzZXQgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXSwgZW5kID0gb2Zmc2V0ICsgY2hpbGQuc2l6ZTtcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gcG9zICYmIGVuZCAhPSBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAoIWNoaWxkLmJvcmRlciAmJiBjaGlsZC5jaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQuY2hpbGRyZW5bMF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBvcyA8IGVuZClcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQuZGVzY0F0KHBvcyAtIG9mZnNldCAtIGNoaWxkLmJvcmRlcik7XG4gICAgICAgICAgICBvZmZzZXQgPSBlbmQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZG9tRnJvbVBvcyhwb3MsIHNpZGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRlbnRET00pXG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiB0aGlzLmRvbSwgb2Zmc2V0OiAwLCBhdG9tOiBwb3MgKyAxIH07XG4gICAgICAgIC8vIEZpcnN0IGZpbmQgdGhlIHBvc2l0aW9uIGluIHRoZSBjaGlsZCBhcnJheVxuICAgICAgICBsZXQgaSA9IDAsIG9mZnNldCA9IDA7XG4gICAgICAgIGZvciAobGV0IGN1clBvcyA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldLCBlbmQgPSBjdXJQb3MgKyBjaGlsZC5zaXplO1xuICAgICAgICAgICAgaWYgKGVuZCA+IHBvcyB8fCBjaGlsZCBpbnN0YW5jZW9mIFRyYWlsaW5nSGFja1ZpZXdEZXNjKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gcG9zIC0gY3VyUG9zO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VyUG9zID0gZW5kO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoaXMgcG9pbnRzIGludG8gdGhlIG1pZGRsZSBvZiBhIGNoaWxkLCBjYWxsIHRocm91Z2hcbiAgICAgICAgaWYgKG9mZnNldClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldLmRvbUZyb21Qb3Mob2Zmc2V0IC0gdGhpcy5jaGlsZHJlbltpXS5ib3JkZXIsIHNpZGUpO1xuICAgICAgICAvLyBHbyBiYWNrIGlmIHRoZXJlIHdlcmUgYW55IHplcm8tbGVuZ3RoIHdpZGdldHMgd2l0aCBzaWRlID49IDAgYmVmb3JlIHRoaXMgcG9pbnRcbiAgICAgICAgZm9yIChsZXQgcHJldjsgaSAmJiAhKHByZXYgPSB0aGlzLmNoaWxkcmVuW2kgLSAxXSkuc2l6ZSAmJiBwcmV2IGluc3RhbmNlb2YgV2lkZ2V0Vmlld0Rlc2MgJiYgcHJldi5zaWRlID49IDA7IGktLSkgeyB9XG4gICAgICAgIC8vIFNjYW4gdG93YXJkcyB0aGUgZmlyc3QgdXNlYWJsZSBub2RlXG4gICAgICAgIGlmIChzaWRlIDw9IDApIHtcbiAgICAgICAgICAgIGxldCBwcmV2LCBlbnRlciA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKDs7IGktLSwgZW50ZXIgPSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHByZXYgPSBpID8gdGhpcy5jaGlsZHJlbltpIC0gMV0gOiBudWxsO1xuICAgICAgICAgICAgICAgIGlmICghcHJldiB8fCBwcmV2LmRvbS5wYXJlbnROb2RlID09IHRoaXMuY29udGVudERPTSlcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJldiAmJiBzaWRlICYmIGVudGVyICYmICFwcmV2LmJvcmRlciAmJiAhcHJldi5kb21BdG9tKVxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2LmRvbUZyb21Qb3MocHJldi5zaXplLCBzaWRlKTtcbiAgICAgICAgICAgIHJldHVybiB7IG5vZGU6IHRoaXMuY29udGVudERPTSwgb2Zmc2V0OiBwcmV2ID8gZG9tSW5kZXgocHJldi5kb20pICsgMSA6IDAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBuZXh0LCBlbnRlciA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKDs7IGkrKywgZW50ZXIgPSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIG5leHQgPSBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGggPyB0aGlzLmNoaWxkcmVuW2ldIDogbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoIW5leHQgfHwgbmV4dC5kb20ucGFyZW50Tm9kZSA9PSB0aGlzLmNvbnRlbnRET00pXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5leHQgJiYgZW50ZXIgJiYgIW5leHQuYm9yZGVyICYmICFuZXh0LmRvbUF0b20pXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQuZG9tRnJvbVBvcygwLCBzaWRlKTtcbiAgICAgICAgICAgIHJldHVybiB7IG5vZGU6IHRoaXMuY29udGVudERPTSwgb2Zmc2V0OiBuZXh0ID8gZG9tSW5kZXgobmV4dC5kb20pIDogdGhpcy5jb250ZW50RE9NLmNoaWxkTm9kZXMubGVuZ3RoIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVXNlZCB0byBmaW5kIGEgRE9NIHJhbmdlIGluIGEgc2luZ2xlIHBhcmVudCBmb3IgYSBnaXZlbiBjaGFuZ2VkXG4gICAgLy8gcmFuZ2UuXG4gICAgcGFyc2VSYW5nZShmcm9tLCB0bywgYmFzZSA9IDApIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09IDApXG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiB0aGlzLmNvbnRlbnRET00sIGZyb20sIHRvLCBmcm9tT2Zmc2V0OiAwLCB0b09mZnNldDogdGhpcy5jb250ZW50RE9NLmNoaWxkTm9kZXMubGVuZ3RoIH07XG4gICAgICAgIGxldCBmcm9tT2Zmc2V0ID0gLTEsIHRvT2Zmc2V0ID0gLTE7XG4gICAgICAgIGZvciAobGV0IG9mZnNldCA9IGJhc2UsIGkgPSAwOzsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldLCBlbmQgPSBvZmZzZXQgKyBjaGlsZC5zaXplO1xuICAgICAgICAgICAgaWYgKGZyb21PZmZzZXQgPT0gLTEgJiYgZnJvbSA8PSBlbmQpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGRCYXNlID0gb2Zmc2V0ICsgY2hpbGQuYm9yZGVyO1xuICAgICAgICAgICAgICAgIC8vIEZJWE1FIG1heWJlIGRlc2NlbmQgbWFyayB2aWV3cyB0byBwYXJzZSBhIG5hcnJvd2VyIHJhbmdlP1xuICAgICAgICAgICAgICAgIGlmIChmcm9tID49IGNoaWxkQmFzZSAmJiB0byA8PSBlbmQgLSBjaGlsZC5ib3JkZXIgJiYgY2hpbGQubm9kZSAmJlxuICAgICAgICAgICAgICAgICAgICBjaGlsZC5jb250ZW50RE9NICYmIHRoaXMuY29udGVudERPTS5jb250YWlucyhjaGlsZC5jb250ZW50RE9NKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLnBhcnNlUmFuZ2UoZnJvbSwgdG8sIGNoaWxkQmFzZSk7XG4gICAgICAgICAgICAgICAgZnJvbSA9IG9mZnNldDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gaTsgaiA+IDA7IGotLSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJldiA9IHRoaXMuY2hpbGRyZW5baiAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldi5zaXplICYmIHByZXYuZG9tLnBhcmVudE5vZGUgPT0gdGhpcy5jb250ZW50RE9NICYmICFwcmV2LmVtcHR5Q2hpbGRBdCgxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbU9mZnNldCA9IGRvbUluZGV4KHByZXYuZG9tKSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmcm9tIC09IHByZXYuc2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGZyb21PZmZzZXQgPT0gLTEpXG4gICAgICAgICAgICAgICAgICAgIGZyb21PZmZzZXQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZyb21PZmZzZXQgPiAtMSAmJiAoZW5kID4gdG8gfHwgaSA9PSB0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDEpKSB7XG4gICAgICAgICAgICAgICAgdG8gPSBlbmQ7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IHRoaXMuY2hpbGRyZW5bal07XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0LnNpemUgJiYgbmV4dC5kb20ucGFyZW50Tm9kZSA9PSB0aGlzLmNvbnRlbnRET00gJiYgIW5leHQuZW1wdHlDaGlsZEF0KC0xKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9PZmZzZXQgPSBkb21JbmRleChuZXh0LmRvbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0byArPSBuZXh0LnNpemU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0b09mZnNldCA9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgdG9PZmZzZXQgPSB0aGlzLmNvbnRlbnRET00uY2hpbGROb2Rlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvZmZzZXQgPSBlbmQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbm9kZTogdGhpcy5jb250ZW50RE9NLCBmcm9tLCB0bywgZnJvbU9mZnNldCwgdG9PZmZzZXQgfTtcbiAgICB9XG4gICAgZW1wdHlDaGlsZEF0KHNpZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuYm9yZGVyIHx8ICF0aGlzLmNvbnRlbnRET00gfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBsZXQgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW3NpZGUgPCAwID8gMCA6IHRoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gICAgICAgIHJldHVybiBjaGlsZC5zaXplID09IDAgfHwgY2hpbGQuZW1wdHlDaGlsZEF0KHNpZGUpO1xuICAgIH1cbiAgICBkb21BZnRlclBvcyhwb3MpIHtcbiAgICAgICAgbGV0IHsgbm9kZSwgb2Zmc2V0IH0gPSB0aGlzLmRvbUZyb21Qb3MocG9zLCAwKTtcbiAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT0gMSB8fCBvZmZzZXQgPT0gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTm8gbm9kZSBhZnRlciBwb3MgXCIgKyBwb3MpO1xuICAgICAgICByZXR1cm4gbm9kZS5jaGlsZE5vZGVzW29mZnNldF07XG4gICAgfVxuICAgIC8vIFZpZXcgZGVzY3MgYXJlIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIGFueSBzZWxlY3Rpb24gdGhhdCBmYWxsc1xuICAgIC8vIGVudGlyZWx5IGluc2lkZSBvZiB0aGVtLCBzbyB0aGF0IGN1c3RvbSBpbXBsZW1lbnRhdGlvbnMgY2FuIGRvXG4gICAgLy8gY3VzdG9tIHRoaW5ncyB3aXRoIHRoZSBzZWxlY3Rpb24uIE5vdGUgdGhhdCB0aGlzIGZhbGxzIGFwYXJ0IHdoZW5cbiAgICAvLyBhIHNlbGVjdGlvbiBzdGFydHMgaW4gc3VjaCBhIG5vZGUgYW5kIGVuZHMgaW4gYW5vdGhlciwgaW4gd2hpY2hcbiAgICAvLyBjYXNlIHdlIGp1c3QgdXNlIHdoYXRldmVyIGRvbUZyb21Qb3MgcHJvZHVjZXMgYXMgYSBiZXN0IGVmZm9ydC5cbiAgICBzZXRTZWxlY3Rpb24oYW5jaG9yLCBoZWFkLCByb290LCBmb3JjZSA9IGZhbHNlKSB7XG4gICAgICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gZmFsbHMgZW50aXJlbHkgaW4gYSBjaGlsZCwgZ2l2ZSBpdCB0byB0aGF0IGNoaWxkXG4gICAgICAgIGxldCBmcm9tID0gTWF0aC5taW4oYW5jaG9yLCBoZWFkKSwgdG8gPSBNYXRoLm1heChhbmNob3IsIGhlYWQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgb2Zmc2V0ID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV0sIGVuZCA9IG9mZnNldCArIGNoaWxkLnNpemU7XG4gICAgICAgICAgICBpZiAoZnJvbSA+IG9mZnNldCAmJiB0byA8IGVuZClcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQuc2V0U2VsZWN0aW9uKGFuY2hvciAtIG9mZnNldCAtIGNoaWxkLmJvcmRlciwgaGVhZCAtIG9mZnNldCAtIGNoaWxkLmJvcmRlciwgcm9vdCwgZm9yY2UpO1xuICAgICAgICAgICAgb2Zmc2V0ID0gZW5kO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhbmNob3JET00gPSB0aGlzLmRvbUZyb21Qb3MoYW5jaG9yLCBhbmNob3IgPyAtMSA6IDEpO1xuICAgICAgICBsZXQgaGVhZERPTSA9IGhlYWQgPT0gYW5jaG9yID8gYW5jaG9yRE9NIDogdGhpcy5kb21Gcm9tUG9zKGhlYWQsIGhlYWQgPyAtMSA6IDEpO1xuICAgICAgICBsZXQgZG9tU2VsID0gcm9vdC5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgbGV0IGJyS2x1ZGdlID0gZmFsc2U7XG4gICAgICAgIC8vIE9uIEZpcmVmb3gsIHVzaW5nIFNlbGVjdGlvbi5jb2xsYXBzZSB0byBwdXQgdGhlIGN1cnNvciBhZnRlciBhXG4gICAgICAgIC8vIEJSIG5vZGUgZm9yIHNvbWUgcmVhc29uIGRvZXNuJ3QgYWx3YXlzIHdvcmsgKCMxMDczKS4gT24gU2FmYXJpLFxuICAgICAgICAvLyB0aGUgY3Vyc29yIHNvbWV0aW1lcyBpbmV4cGxpY2FibGUgdmlzdWFsbHkgbGFncyBiZWhpbmQgaXRzXG4gICAgICAgIC8vIHJlcG9ydGVkIHBvc2l0aW9uIGluIHN1Y2ggc2l0dWF0aW9ucyAoIzEwOTIpLlxuICAgICAgICBpZiAoKGdlY2tvIHx8IHNhZmFyaSkgJiYgYW5jaG9yID09IGhlYWQpIHtcbiAgICAgICAgICAgIGxldCB7IG5vZGUsIG9mZnNldCB9ID0gYW5jaG9yRE9NO1xuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMykge1xuICAgICAgICAgICAgICAgIGJyS2x1ZGdlID0gISEob2Zmc2V0ICYmIG5vZGUubm9kZVZhbHVlW29mZnNldCAtIDFdID09IFwiXFxuXCIpO1xuICAgICAgICAgICAgICAgIC8vIElzc3VlICMxMTI4XG4gICAgICAgICAgICAgICAgaWYgKGJyS2x1ZGdlICYmIG9mZnNldCA9PSBub2RlLm5vZGVWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc2NhbiA9IG5vZGUsIGFmdGVyOyBzY2FuOyBzY2FuID0gc2Nhbi5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWZ0ZXIgPSBzY2FuLm5leHRTaWJsaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFmdGVyLm5vZGVOYW1lID09IFwiQlJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yRE9NID0gaGVhZERPTSA9IHsgbm9kZTogYWZ0ZXIucGFyZW50Tm9kZSwgb2Zmc2V0OiBkb21JbmRleChhZnRlcikgKyAxIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGVzYyA9IHNjYW4ucG1WaWV3RGVzYztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXNjICYmIGRlc2Mubm9kZSAmJiBkZXNjLm5vZGUuaXNCbG9jaylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gbm9kZS5jaGlsZE5vZGVzW29mZnNldCAtIDFdO1xuICAgICAgICAgICAgICAgIGJyS2x1ZGdlID0gcHJldiAmJiAocHJldi5ub2RlTmFtZSA9PSBcIkJSXCIgfHwgcHJldi5jb250ZW50RWRpdGFibGUgPT0gXCJmYWxzZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBGaXJlZm94IGNhbiBhY3Qgc3RyYW5nZWx5IHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBpbiBmcm9udCBvZiBhblxuICAgICAgICAvLyB1bmVkaXRhYmxlIG5vZGUuIFNlZSAjMTE2MyBhbmQgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTUzNlxuICAgICAgICBpZiAoZ2Vja28gJiYgZG9tU2VsLmZvY3VzTm9kZSAmJiBkb21TZWwuZm9jdXNOb2RlICE9IGhlYWRET00ubm9kZSAmJiBkb21TZWwuZm9jdXNOb2RlLm5vZGVUeXBlID09IDEpIHtcbiAgICAgICAgICAgIGxldCBhZnRlciA9IGRvbVNlbC5mb2N1c05vZGUuY2hpbGROb2Rlc1tkb21TZWwuZm9jdXNPZmZzZXRdO1xuICAgICAgICAgICAgaWYgKGFmdGVyICYmIGFmdGVyLmNvbnRlbnRFZGl0YWJsZSA9PSBcImZhbHNlXCIpXG4gICAgICAgICAgICAgICAgZm9yY2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKGZvcmNlIHx8IGJyS2x1ZGdlICYmIHNhZmFyaSkgJiZcbiAgICAgICAgICAgIGlzRXF1aXZhbGVudFBvc2l0aW9uKGFuY2hvckRPTS5ub2RlLCBhbmNob3JET00ub2Zmc2V0LCBkb21TZWwuYW5jaG9yTm9kZSwgZG9tU2VsLmFuY2hvck9mZnNldCkgJiZcbiAgICAgICAgICAgIGlzRXF1aXZhbGVudFBvc2l0aW9uKGhlYWRET00ubm9kZSwgaGVhZERPTS5vZmZzZXQsIGRvbVNlbC5mb2N1c05vZGUsIGRvbVNlbC5mb2N1c09mZnNldCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vIFNlbGVjdGlvbi5leHRlbmQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGFuICdpbnZlcnRlZCcgc2VsZWN0aW9uXG4gICAgICAgIC8vIChvbmUgd2hlcmUgdGhlIGZvY3VzIGlzIGJlZm9yZSB0aGUgYW5jaG9yKSwgYnV0IG5vdCBhbGxcbiAgICAgICAgLy8gYnJvd3NlcnMgc3VwcG9ydCBpdCB5ZXQuXG4gICAgICAgIGxldCBkb21TZWxFeHRlbmRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoKGRvbVNlbC5leHRlbmQgfHwgYW5jaG9yID09IGhlYWQpICYmICFicktsdWRnZSkge1xuICAgICAgICAgICAgZG9tU2VsLmNvbGxhcHNlKGFuY2hvckRPTS5ub2RlLCBhbmNob3JET00ub2Zmc2V0KTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGFuY2hvciAhPSBoZWFkKVxuICAgICAgICAgICAgICAgICAgICBkb21TZWwuZXh0ZW5kKGhlYWRET00ubm9kZSwgaGVhZERPTS5vZmZzZXQpO1xuICAgICAgICAgICAgICAgIGRvbVNlbEV4dGVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfKSB7XG4gICAgICAgICAgICAgICAgLy8gSW4gc29tZSBjYXNlcyB3aXRoIENocm9tZSB0aGUgc2VsZWN0aW9uIGlzIGVtcHR5IGFmdGVyIGNhbGxpbmdcbiAgICAgICAgICAgICAgICAvLyBjb2xsYXBzZSwgZXZlbiB3aGVuIGl0IHNob3VsZCBiZSB2YWxpZC4gVGhpcyBhcHBlYXJzIHRvIGJlIGEgYnVnLCBidXRcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyBkaWZmaWN1bHQgdG8gaXNvbGF0ZS4gSWYgdGhpcyBoYXBwZW5zIGZhbGxiYWNrIHRvIHRoZSBvbGQgcGF0aFxuICAgICAgICAgICAgICAgIC8vIHdpdGhvdXQgdXNpbmcgZXh0ZW5kLlxuICAgICAgICAgICAgICAgIC8vIFNpbWlsYXJseSwgdGhpcyBjb3VsZCBjcmFzaCBvbiBTYWZhcmkgaWYgdGhlIGVkaXRvciBpcyBoaWRkZW4sIGFuZFxuICAgICAgICAgICAgICAgIC8vIHRoZXJlIHdhcyBubyBzZWxlY3Rpb24uXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkb21TZWxFeHRlbmRlZCkge1xuICAgICAgICAgICAgaWYgKGFuY2hvciA+IGhlYWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgdG1wID0gYW5jaG9yRE9NO1xuICAgICAgICAgICAgICAgIGFuY2hvckRPTSA9IGhlYWRET007XG4gICAgICAgICAgICAgICAgaGVhZERPTSA9IHRtcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgICAgICByYW5nZS5zZXRFbmQoaGVhZERPTS5ub2RlLCBoZWFkRE9NLm9mZnNldCk7XG4gICAgICAgICAgICByYW5nZS5zZXRTdGFydChhbmNob3JET00ubm9kZSwgYW5jaG9yRE9NLm9mZnNldCk7XG4gICAgICAgICAgICBkb21TZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgICBkb21TZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlnbm9yZU11dGF0aW9uKG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb250ZW50RE9NICYmIG11dGF0aW9uLnR5cGUgIT0gXCJzZWxlY3Rpb25cIjtcbiAgICB9XG4gICAgZ2V0IGNvbnRlbnRMb3N0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50RE9NICYmIHRoaXMuY29udGVudERPTSAhPSB0aGlzLmRvbSAmJiAhdGhpcy5kb20uY29udGFpbnModGhpcy5jb250ZW50RE9NKTtcbiAgICB9XG4gICAgLy8gUmVtb3ZlIGEgc3VidHJlZSBvZiB0aGUgZWxlbWVudCB0cmVlIHRoYXQgaGFzIGJlZW4gdG91Y2hlZFxuICAgIC8vIGJ5IGEgRE9NIGNoYW5nZSwgc28gdGhhdCB0aGUgbmV4dCB1cGRhdGUgd2lsbCByZWRyYXcgaXQuXG4gICAgbWFya0RpcnR5KGZyb20sIHRvKSB7XG4gICAgICAgIGZvciAobGV0IG9mZnNldCA9IDAsIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXSwgZW5kID0gb2Zmc2V0ICsgY2hpbGQuc2l6ZTtcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gZW5kID8gZnJvbSA8PSBlbmQgJiYgdG8gPj0gb2Zmc2V0IDogZnJvbSA8IGVuZCAmJiB0byA+IG9mZnNldCkge1xuICAgICAgICAgICAgICAgIGxldCBzdGFydEluc2lkZSA9IG9mZnNldCArIGNoaWxkLmJvcmRlciwgZW5kSW5zaWRlID0gZW5kIC0gY2hpbGQuYm9yZGVyO1xuICAgICAgICAgICAgICAgIGlmIChmcm9tID49IHN0YXJ0SW5zaWRlICYmIHRvIDw9IGVuZEluc2lkZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpcnR5ID0gZnJvbSA9PSBvZmZzZXQgfHwgdG8gPT0gZW5kID8gQ09OVEVOVF9ESVJUWSA6IENISUxEX0RJUlRZO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZnJvbSA9PSBzdGFydEluc2lkZSAmJiB0byA9PSBlbmRJbnNpZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGlsZC5jb250ZW50TG9zdCB8fCBjaGlsZC5kb20ucGFyZW50Tm9kZSAhPSB0aGlzLmNvbnRlbnRET00pKVxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuZGlydHkgPSBOT0RFX0RJUlRZO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5tYXJrRGlydHkoZnJvbSAtIHN0YXJ0SW5zaWRlLCB0byAtIHN0YXJ0SW5zaWRlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuZGlydHkgPSBjaGlsZC5kb20gPT0gY2hpbGQuY29udGVudERPTSAmJiBjaGlsZC5kb20ucGFyZW50Tm9kZSA9PSB0aGlzLmNvbnRlbnRET00gJiYgIWNoaWxkLmNoaWxkcmVuLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBDT05URU5UX0RJUlRZIDogTk9ERV9ESVJUWTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvZmZzZXQgPSBlbmQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXJ0eSA9IENPTlRFTlRfRElSVFk7XG4gICAgfVxuICAgIG1hcmtQYXJlbnRzRGlydHkoKSB7XG4gICAgICAgIGxldCBsZXZlbCA9IDE7XG4gICAgICAgIGZvciAobGV0IG5vZGUgPSB0aGlzLnBhcmVudDsgbm9kZTsgbm9kZSA9IG5vZGUucGFyZW50LCBsZXZlbCsrKSB7XG4gICAgICAgICAgICBsZXQgZGlydHkgPSBsZXZlbCA9PSAxID8gQ09OVEVOVF9ESVJUWSA6IENISUxEX0RJUlRZO1xuICAgICAgICAgICAgaWYgKG5vZGUuZGlydHkgPCBkaXJ0eSlcbiAgICAgICAgICAgICAgICBub2RlLmRpcnR5ID0gZGlydHk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGRvbUF0b20oKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGdldCBpZ25vcmVGb3JDb29yZHMoKSB7IHJldHVybiBmYWxzZTsgfVxufVxuLy8gQSB3aWRnZXQgZGVzYyByZXByZXNlbnRzIGEgd2lkZ2V0IGRlY29yYXRpb24sIHdoaWNoIGlzIGEgRE9NIG5vZGVcbi8vIGRyYXduIGJldHdlZW4gdGhlIGRvY3VtZW50IG5vZGVzLlxuY2xhc3MgV2lkZ2V0Vmlld0Rlc2MgZXh0ZW5kcyBWaWV3RGVzYyB7XG4gICAgY29uc3RydWN0b3IocGFyZW50LCB3aWRnZXQsIHZpZXcsIHBvcykge1xuICAgICAgICBsZXQgc2VsZiwgZG9tID0gd2lkZ2V0LnR5cGUudG9ET007XG4gICAgICAgIGlmICh0eXBlb2YgZG9tID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIGRvbSA9IGRvbSh2aWV3LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWxmKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLnBhcmVudClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyZW50LnBvc0JlZm9yZUNoaWxkKHNlbGYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGlmICghd2lkZ2V0LnR5cGUuc3BlYy5yYXcpIHtcbiAgICAgICAgICAgIGlmIChkb20ubm9kZVR5cGUgIT0gMSkge1xuICAgICAgICAgICAgICAgIGxldCB3cmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICAgICAgICAgICAgd3JhcC5hcHBlbmRDaGlsZChkb20pO1xuICAgICAgICAgICAgICAgIGRvbSA9IHdyYXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkb20uY29udGVudEVkaXRhYmxlID0gXCJmYWxzZVwiO1xuICAgICAgICAgICAgZG9tLmNsYXNzTGlzdC5hZGQoXCJQcm9zZU1pcnJvci13aWRnZXRcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIocGFyZW50LCBbXSwgZG9tLCBudWxsKTtcbiAgICAgICAgdGhpcy53aWRnZXQgPSB3aWRnZXQ7XG4gICAgICAgIHRoaXMud2lkZ2V0ID0gd2lkZ2V0O1xuICAgICAgICBzZWxmID0gdGhpcztcbiAgICB9XG4gICAgbWF0Y2hlc1dpZGdldCh3aWRnZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlydHkgPT0gTk9UX0RJUlRZICYmIHdpZGdldC50eXBlLmVxKHRoaXMud2lkZ2V0LnR5cGUpO1xuICAgIH1cbiAgICBwYXJzZVJ1bGUoKSB7IHJldHVybiB7IGlnbm9yZTogdHJ1ZSB9OyB9XG4gICAgc3RvcEV2ZW50KGV2ZW50KSB7XG4gICAgICAgIGxldCBzdG9wID0gdGhpcy53aWRnZXQuc3BlYy5zdG9wRXZlbnQ7XG4gICAgICAgIHJldHVybiBzdG9wID8gc3RvcChldmVudCkgOiBmYWxzZTtcbiAgICB9XG4gICAgaWdub3JlTXV0YXRpb24obXV0YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIG11dGF0aW9uLnR5cGUgIT0gXCJzZWxlY3Rpb25cIiB8fCB0aGlzLndpZGdldC5zcGVjLmlnbm9yZVNlbGVjdGlvbjtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy53aWRnZXQudHlwZS5kZXN0cm95KHRoaXMuZG9tKTtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICBnZXQgZG9tQXRvbSgpIHsgcmV0dXJuIHRydWU7IH1cbiAgICBnZXQgc2lkZSgpIHsgcmV0dXJuIHRoaXMud2lkZ2V0LnR5cGUuc2lkZTsgfVxufVxuY2xhc3MgQ29tcG9zaXRpb25WaWV3RGVzYyBleHRlbmRzIFZpZXdEZXNjIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQsIGRvbSwgdGV4dERPTSwgdGV4dCkge1xuICAgICAgICBzdXBlcihwYXJlbnQsIFtdLCBkb20sIG51bGwpO1xuICAgICAgICB0aGlzLnRleHRET00gPSB0ZXh0RE9NO1xuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHsgcmV0dXJuIHRoaXMudGV4dC5sZW5ndGg7IH1cbiAgICBsb2NhbFBvc0Zyb21ET00oZG9tLCBvZmZzZXQpIHtcbiAgICAgICAgaWYgKGRvbSAhPSB0aGlzLnRleHRET00pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3NBdFN0YXJ0ICsgKG9mZnNldCA/IHRoaXMuc2l6ZSA6IDApO1xuICAgICAgICByZXR1cm4gdGhpcy5wb3NBdFN0YXJ0ICsgb2Zmc2V0O1xuICAgIH1cbiAgICBkb21Gcm9tUG9zKHBvcykge1xuICAgICAgICByZXR1cm4geyBub2RlOiB0aGlzLnRleHRET00sIG9mZnNldDogcG9zIH07XG4gICAgfVxuICAgIGlnbm9yZU11dGF0aW9uKG11dCkge1xuICAgICAgICByZXR1cm4gbXV0LnR5cGUgPT09ICdjaGFyYWN0ZXJEYXRhJyAmJiBtdXQudGFyZ2V0Lm5vZGVWYWx1ZSA9PSBtdXQub2xkVmFsdWU7XG4gICAgfVxufVxuLy8gQSBtYXJrIGRlc2MgcmVwcmVzZW50cyBhIG1hcmsuIE1heSBoYXZlIG11bHRpcGxlIGNoaWxkcmVuLFxuLy8gZGVwZW5kaW5nIG9uIGhvdyB0aGUgbWFyayBpcyBzcGxpdC4gTm90ZSB0aGF0IG1hcmtzIGFyZSBkcmF3biB1c2luZ1xuLy8gYSBmaXhlZCBuZXN0aW5nIG9yZGVyLCBmb3Igc2ltcGxpY2l0eSBhbmQgcHJlZGljdGFiaWxpdHksIHNvIGluXG4vLyBzb21lIGNhc2VzIHRoZXkgd2lsbCBiZSBzcGxpdCBtb3JlIG9mdGVuIHRoYW4gd291bGQgYXBwZWFyXG4vLyBuZWNlc3NhcnkuXG5jbGFzcyBNYXJrVmlld0Rlc2MgZXh0ZW5kcyBWaWV3RGVzYyB7XG4gICAgY29uc3RydWN0b3IocGFyZW50LCBtYXJrLCBkb20sIGNvbnRlbnRET00pIHtcbiAgICAgICAgc3VwZXIocGFyZW50LCBbXSwgZG9tLCBjb250ZW50RE9NKTtcbiAgICAgICAgdGhpcy5tYXJrID0gbWFyaztcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZShwYXJlbnQsIG1hcmssIGlubGluZSwgdmlldykge1xuICAgICAgICBsZXQgY3VzdG9tID0gdmlldy5ub2RlVmlld3NbbWFyay50eXBlLm5hbWVdO1xuICAgICAgICBsZXQgc3BlYyA9IGN1c3RvbSAmJiBjdXN0b20obWFyaywgdmlldywgaW5saW5lKTtcbiAgICAgICAgaWYgKCFzcGVjIHx8ICFzcGVjLmRvbSlcbiAgICAgICAgICAgIHNwZWMgPSBET01TZXJpYWxpemVyLnJlbmRlclNwZWMoZG9jdW1lbnQsIG1hcmsudHlwZS5zcGVjLnRvRE9NKG1hcmssIGlubGluZSkpO1xuICAgICAgICByZXR1cm4gbmV3IE1hcmtWaWV3RGVzYyhwYXJlbnQsIG1hcmssIHNwZWMuZG9tLCBzcGVjLmNvbnRlbnRET00gfHwgc3BlYy5kb20pO1xuICAgIH1cbiAgICBwYXJzZVJ1bGUoKSB7XG4gICAgICAgIGlmICgodGhpcy5kaXJ0eSAmIE5PREVfRElSVFkpIHx8IHRoaXMubWFyay50eXBlLnNwZWMucmVwYXJzZUluVmlldylcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4geyBtYXJrOiB0aGlzLm1hcmsudHlwZS5uYW1lLCBhdHRyczogdGhpcy5tYXJrLmF0dHJzLCBjb250ZW50RWxlbWVudDogdGhpcy5jb250ZW50RE9NIHx8IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICBtYXRjaGVzTWFyayhtYXJrKSB7IHJldHVybiB0aGlzLmRpcnR5ICE9IE5PREVfRElSVFkgJiYgdGhpcy5tYXJrLmVxKG1hcmspOyB9XG4gICAgbWFya0RpcnR5KGZyb20sIHRvKSB7XG4gICAgICAgIHN1cGVyLm1hcmtEaXJ0eShmcm9tLCB0byk7XG4gICAgICAgIC8vIE1vdmUgZGlydHkgaW5mbyB0byBuZWFyZXN0IG5vZGUgdmlld1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSAhPSBOT1RfRElSVFkpIHtcbiAgICAgICAgICAgIGxldCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgICAgIHdoaWxlICghcGFyZW50Lm5vZGUpXG4gICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICAgICAgICAgIGlmIChwYXJlbnQuZGlydHkgPCB0aGlzLmRpcnR5KVxuICAgICAgICAgICAgICAgIHBhcmVudC5kaXJ0eSA9IHRoaXMuZGlydHk7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gTk9UX0RJUlRZO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNsaWNlKGZyb20sIHRvLCB2aWV3KSB7XG4gICAgICAgIGxldCBjb3B5ID0gTWFya1ZpZXdEZXNjLmNyZWF0ZSh0aGlzLnBhcmVudCwgdGhpcy5tYXJrLCB0cnVlLCB2aWV3KTtcbiAgICAgICAgbGV0IG5vZGVzID0gdGhpcy5jaGlsZHJlbiwgc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICAgICAgaWYgKHRvIDwgc2l6ZSlcbiAgICAgICAgICAgIG5vZGVzID0gcmVwbGFjZU5vZGVzKG5vZGVzLCB0bywgc2l6ZSwgdmlldyk7XG4gICAgICAgIGlmIChmcm9tID4gMClcbiAgICAgICAgICAgIG5vZGVzID0gcmVwbGFjZU5vZGVzKG5vZGVzLCAwLCBmcm9tLCB2aWV3KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIG5vZGVzW2ldLnBhcmVudCA9IGNvcHk7XG4gICAgICAgIGNvcHkuY2hpbGRyZW4gPSBub2RlcztcbiAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxufVxuLy8gTm9kZSB2aWV3IGRlc2NzIGFyZSB0aGUgbWFpbiwgbW9zdCBjb21tb24gdHlwZSBvZiB2aWV3IGRlc2MsIGFuZFxuLy8gY29ycmVzcG9uZCB0byBhbiBhY3R1YWwgbm9kZSBpbiB0aGUgZG9jdW1lbnQuIFVubGlrZSBtYXJrIGRlc2NzLFxuLy8gdGhleSBwb3B1bGF0ZSB0aGVpciBjaGlsZCBhcnJheSB0aGVtc2VsdmVzLlxuY2xhc3MgTm9kZVZpZXdEZXNjIGV4dGVuZHMgVmlld0Rlc2Mge1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudCwgbm9kZSwgb3V0ZXJEZWNvLCBpbm5lckRlY28sIGRvbSwgY29udGVudERPTSwgbm9kZURPTSwgdmlldywgcG9zKSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCwgW10sIGRvbSwgY29udGVudERPTSk7XG4gICAgICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgICAgIHRoaXMub3V0ZXJEZWNvID0gb3V0ZXJEZWNvO1xuICAgICAgICB0aGlzLmlubmVyRGVjbyA9IGlubmVyRGVjbztcbiAgICAgICAgdGhpcy5ub2RlRE9NID0gbm9kZURPTTtcbiAgICAgICAgaWYgKGNvbnRlbnRET00pXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKHZpZXcsIHBvcyk7XG4gICAgfVxuICAgIC8vIEJ5IGRlZmF1bHQsIGEgbm9kZSBpcyByZW5kZXJlZCB1c2luZyB0aGUgYHRvRE9NYCBtZXRob2QgZnJvbSB0aGVcbiAgICAvLyBub2RlIHR5cGUgc3BlYy4gQnV0IGNsaWVudCBjb2RlIGNhbiB1c2UgdGhlIGBub2RlVmlld3NgIHNwZWMgdG9cbiAgICAvLyBzdXBwbHkgYSBjdXN0b20gbm9kZSB2aWV3LCB3aGljaCBjYW4gaW5mbHVlbmNlIHZhcmlvdXMgYXNwZWN0cyBvZlxuICAgIC8vIHRoZSB3YXkgdGhlIG5vZGUgd29ya3MuXG4gICAgLy9cbiAgICAvLyAoVXNpbmcgc3ViY2xhc3NpbmcgZm9yIHRoaXMgd2FzIGludGVudGlvbmFsbHkgZGVjaWRlZCBhZ2FpbnN0LFxuICAgIC8vIHNpbmNlIGl0J2QgcmVxdWlyZSBleHBvc2luZyBhIHdob2xlIHNsZXcgb2YgZmluaWNreVxuICAgIC8vIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdG8gdGhlIHVzZXIgY29kZSB0aGF0IHRoZXkgcHJvYmFibHkgd2lsbFxuICAgIC8vIG5ldmVyIG5lZWQuKVxuICAgIHN0YXRpYyBjcmVhdGUocGFyZW50LCBub2RlLCBvdXRlckRlY28sIGlubmVyRGVjbywgdmlldywgcG9zKSB7XG4gICAgICAgIGxldCBjdXN0b20gPSB2aWV3Lm5vZGVWaWV3c1tub2RlLnR5cGUubmFtZV0sIGRlc2NPYmo7XG4gICAgICAgIGxldCBzcGVjID0gY3VzdG9tICYmIGN1c3RvbShub2RlLCB2aWV3LCAoKSA9PiB7XG4gICAgICAgICAgICAvLyAoVGhpcyBpcyBhIGZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRoZSBjdXN0b20gdmlldyB0byBmaW5kIGl0c1xuICAgICAgICAgICAgLy8gb3duIHBvc2l0aW9uKVxuICAgICAgICAgICAgaWYgKCFkZXNjT2JqKVxuICAgICAgICAgICAgICAgIHJldHVybiBwb3M7XG4gICAgICAgICAgICBpZiAoZGVzY09iai5wYXJlbnQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NPYmoucGFyZW50LnBvc0JlZm9yZUNoaWxkKGRlc2NPYmopO1xuICAgICAgICB9LCBvdXRlckRlY28sIGlubmVyRGVjbyk7XG4gICAgICAgIGxldCBkb20gPSBzcGVjICYmIHNwZWMuZG9tLCBjb250ZW50RE9NID0gc3BlYyAmJiBzcGVjLmNvbnRlbnRET007XG4gICAgICAgIGlmIChub2RlLmlzVGV4dCkge1xuICAgICAgICAgICAgaWYgKCFkb20pXG4gICAgICAgICAgICAgICAgZG9tID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobm9kZS50ZXh0KTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGRvbS5ub2RlVHlwZSAhPSAzKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVGV4dCBtdXN0IGJlIHJlbmRlcmVkIGFzIGEgRE9NIHRleHQgbm9kZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghZG9tKSB7XG4gICAgICAgICAgICAoeyBkb20sIGNvbnRlbnRET00gfSA9IERPTVNlcmlhbGl6ZXIucmVuZGVyU3BlYyhkb2N1bWVudCwgbm9kZS50eXBlLnNwZWMudG9ET00obm9kZSkpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbnRlbnRET00gJiYgIW5vZGUuaXNUZXh0ICYmIGRvbS5ub2RlTmFtZSAhPSBcIkJSXCIpIHsgLy8gQ2hyb21lIGdldHMgY29uZnVzZWQgYnkgPGJyIGNvbnRlbnRlZGl0YWJsZT1mYWxzZT5cbiAgICAgICAgICAgIGlmICghZG9tLmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSlcbiAgICAgICAgICAgICAgICBkb20uY29udGVudEVkaXRhYmxlID0gXCJmYWxzZVwiO1xuICAgICAgICAgICAgaWYgKG5vZGUudHlwZS5zcGVjLmRyYWdnYWJsZSlcbiAgICAgICAgICAgICAgICBkb20uZHJhZ2dhYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbm9kZURPTSA9IGRvbTtcbiAgICAgICAgZG9tID0gYXBwbHlPdXRlckRlY28oZG9tLCBvdXRlckRlY28sIG5vZGUpO1xuICAgICAgICBpZiAoc3BlYylcbiAgICAgICAgICAgIHJldHVybiBkZXNjT2JqID0gbmV3IEN1c3RvbU5vZGVWaWV3RGVzYyhwYXJlbnQsIG5vZGUsIG91dGVyRGVjbywgaW5uZXJEZWNvLCBkb20sIGNvbnRlbnRET00gfHwgbnVsbCwgbm9kZURPTSwgc3BlYywgdmlldywgcG9zICsgMSk7XG4gICAgICAgIGVsc2UgaWYgKG5vZGUuaXNUZXh0KVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0Vmlld0Rlc2MocGFyZW50LCBub2RlLCBvdXRlckRlY28sIGlubmVyRGVjbywgZG9tLCBub2RlRE9NLCB2aWV3KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb2RlVmlld0Rlc2MocGFyZW50LCBub2RlLCBvdXRlckRlY28sIGlubmVyRGVjbywgZG9tLCBjb250ZW50RE9NIHx8IG51bGwsIG5vZGVET00sIHZpZXcsIHBvcyArIDEpO1xuICAgIH1cbiAgICBwYXJzZVJ1bGUoKSB7XG4gICAgICAgIC8vIEV4cGVyaW1lbnRhbCBrbHVkZ2UgdG8gYWxsb3cgb3B0LWluIHJlLXBhcnNpbmcgb2Ygbm9kZXNcbiAgICAgICAgaWYgKHRoaXMubm9kZS50eXBlLnNwZWMucmVwYXJzZUluVmlldylcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAvLyBGSVhNRSB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgY2FuIGFsd2F5cyByZXR1cm4gdGhlIGN1cnJlbnRcbiAgICAgICAgLy8gYXR0cnMgbWVhbnMgdGhhdCBpZiB0aGUgdXNlciBzb21laG93IG1hbmFnZXMgdG8gY2hhbmdlIHRoZVxuICAgICAgICAvLyBhdHRycyBpbiB0aGUgZG9tLCB0aGF0IHdvbid0IGJlIHBpY2tlZCB1cC4gTm90IGVudGlyZWx5IHN1cmVcbiAgICAgICAgLy8gd2hldGhlciB0aGlzIGlzIGEgcHJvYmxlbVxuICAgICAgICBsZXQgcnVsZSA9IHsgbm9kZTogdGhpcy5ub2RlLnR5cGUubmFtZSwgYXR0cnM6IHRoaXMubm9kZS5hdHRycyB9O1xuICAgICAgICBpZiAodGhpcy5ub2RlLnR5cGUud2hpdGVzcGFjZSA9PSBcInByZVwiKVxuICAgICAgICAgICAgcnVsZS5wcmVzZXJ2ZVdoaXRlc3BhY2UgPSBcImZ1bGxcIjtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRlbnRET00pIHtcbiAgICAgICAgICAgIHJ1bGUuZ2V0Q29udGVudCA9ICgpID0+IHRoaXMubm9kZS5jb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLmNvbnRlbnRMb3N0KSB7XG4gICAgICAgICAgICBydWxlLmNvbnRlbnRFbGVtZW50ID0gdGhpcy5jb250ZW50RE9NO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2hyb21lIGxpa2VzIHRvIHJhbmRvbWx5IHJlY3JlYXRlIHBhcmVudCBub2RlcyB3aGVuXG4gICAgICAgICAgICAvLyBiYWNrc3BhY2luZyB0aGluZ3MuIFdoZW4gdGhhdCBoYXBwZW5zLCB0aGlzIHRyaWVzIHRvIGZpbmQgdGhlXG4gICAgICAgICAgICAvLyBuZXcgcGFyZW50LlxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRvbS5jb250YWlucyhjaGlsZC5kb20ucGFyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVsZS5jb250ZW50RWxlbWVudCA9IGNoaWxkLmRvbS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJ1bGUuY29udGVudEVsZW1lbnQpXG4gICAgICAgICAgICAgICAgcnVsZS5nZXRDb250ZW50ID0gKCkgPT4gRnJhZ21lbnQuZW1wdHk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgfVxuICAgIG1hdGNoZXNOb2RlKG5vZGUsIG91dGVyRGVjbywgaW5uZXJEZWNvKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcnR5ID09IE5PVF9ESVJUWSAmJiBub2RlLmVxKHRoaXMubm9kZSkgJiZcbiAgICAgICAgICAgIHNhbWVPdXRlckRlY28ob3V0ZXJEZWNvLCB0aGlzLm91dGVyRGVjbykgJiYgaW5uZXJEZWNvLmVxKHRoaXMuaW5uZXJEZWNvKTtcbiAgICB9XG4gICAgZ2V0IHNpemUoKSB7IHJldHVybiB0aGlzLm5vZGUubm9kZVNpemU7IH1cbiAgICBnZXQgYm9yZGVyKCkgeyByZXR1cm4gdGhpcy5ub2RlLmlzTGVhZiA/IDAgOiAxOyB9XG4gICAgLy8gU3luY3MgYHRoaXMuY2hpbGRyZW5gIHRvIG1hdGNoIGB0aGlzLm5vZGUuY29udGVudGAgYW5kIHRoZSBsb2NhbFxuICAgIC8vIGRlY29yYXRpb25zLCBwb3NzaWJseSBpbnRyb2R1Y2luZyBuZXN0aW5nIGZvciBtYXJrcy4gVGhlbiwgaW4gYVxuICAgIC8vIHNlcGFyYXRlIHN0ZXAsIHN5bmNzIHRoZSBET00gaW5zaWRlIGB0aGlzLmNvbnRlbnRET01gIHRvXG4gICAgLy8gYHRoaXMuY2hpbGRyZW5gLlxuICAgIHVwZGF0ZUNoaWxkcmVuKHZpZXcsIHBvcykge1xuICAgICAgICBsZXQgaW5saW5lID0gdGhpcy5ub2RlLmlubGluZUNvbnRlbnQsIG9mZiA9IHBvcztcbiAgICAgICAgbGV0IGNvbXBvc2l0aW9uID0gdmlldy5jb21wb3NpbmcgPyB0aGlzLmxvY2FsQ29tcG9zaXRpb25JbmZvKHZpZXcsIHBvcykgOiBudWxsO1xuICAgICAgICBsZXQgbG9jYWxDb21wb3NpdGlvbiA9IGNvbXBvc2l0aW9uICYmIGNvbXBvc2l0aW9uLnBvcyA+IC0xID8gY29tcG9zaXRpb24gOiBudWxsO1xuICAgICAgICBsZXQgY29tcG9zaXRpb25JbkNoaWxkID0gY29tcG9zaXRpb24gJiYgY29tcG9zaXRpb24ucG9zIDwgMDtcbiAgICAgICAgbGV0IHVwZGF0ZXIgPSBuZXcgVmlld1RyZWVVcGRhdGVyKHRoaXMsIGxvY2FsQ29tcG9zaXRpb24gJiYgbG9jYWxDb21wb3NpdGlvbi5ub2RlLCB2aWV3KTtcbiAgICAgICAgaXRlckRlY28odGhpcy5ub2RlLCB0aGlzLmlubmVyRGVjbywgKHdpZGdldCwgaSwgaW5zaWRlTm9kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHdpZGdldC5zcGVjLm1hcmtzKVxuICAgICAgICAgICAgICAgIHVwZGF0ZXIuc3luY1RvTWFya3Mod2lkZ2V0LnNwZWMubWFya3MsIGlubGluZSwgdmlldyk7XG4gICAgICAgICAgICBlbHNlIGlmICh3aWRnZXQudHlwZS5zaWRlID49IDAgJiYgIWluc2lkZU5vZGUpXG4gICAgICAgICAgICAgICAgdXBkYXRlci5zeW5jVG9NYXJrcyhpID09IHRoaXMubm9kZS5jaGlsZENvdW50ID8gTWFyay5ub25lIDogdGhpcy5ub2RlLmNoaWxkKGkpLm1hcmtzLCBpbmxpbmUsIHZpZXcpO1xuICAgICAgICAgICAgLy8gSWYgdGhlIG5leHQgbm9kZSBpcyBhIGRlc2MgbWF0Y2hpbmcgdGhpcyB3aWRnZXQsIHJldXNlIGl0LFxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGluc2VydCB0aGUgd2lkZ2V0IGFzIGEgbmV3IHZpZXcgZGVzYy5cbiAgICAgICAgICAgIHVwZGF0ZXIucGxhY2VXaWRnZXQod2lkZ2V0LCB2aWV3LCBvZmYpO1xuICAgICAgICB9LCAoY2hpbGQsIG91dGVyRGVjbywgaW5uZXJEZWNvLCBpKSA9PiB7XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHdyYXBwaW5nIG1hcmsgZGVzY3MgbWF0Y2ggdGhlIG5vZGUncyBtYXJrcy5cbiAgICAgICAgICAgIHVwZGF0ZXIuc3luY1RvTWFya3MoY2hpbGQubWFya3MsIGlubGluZSwgdmlldyk7XG4gICAgICAgICAgICAvLyBUcnkgc2V2ZXJhbCBzdHJhdGVnaWVzIGZvciBkcmF3aW5nIHRoaXMgbm9kZVxuICAgICAgICAgICAgbGV0IGNvbXBJbmRleDtcbiAgICAgICAgICAgIGlmICh1cGRhdGVyLmZpbmROb2RlTWF0Y2goY2hpbGQsIG91dGVyRGVjbywgaW5uZXJEZWNvLCBpKSkgO1xuICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9zaXRpb25JbkNoaWxkICYmIHZpZXcuc3RhdGUuc2VsZWN0aW9uLmZyb20gPiBvZmYgJiZcbiAgICAgICAgICAgICAgICB2aWV3LnN0YXRlLnNlbGVjdGlvbi50byA8IG9mZiArIGNoaWxkLm5vZGVTaXplICYmXG4gICAgICAgICAgICAgICAgKGNvbXBJbmRleCA9IHVwZGF0ZXIuZmluZEluZGV4V2l0aENoaWxkKGNvbXBvc2l0aW9uLm5vZGUpKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgdXBkYXRlci51cGRhdGVOb2RlQXQoY2hpbGQsIG91dGVyRGVjbywgaW5uZXJEZWNvLCBjb21wSW5kZXgsIHZpZXcpKSA7XG4gICAgICAgICAgICBlbHNlIGlmICh1cGRhdGVyLnVwZGF0ZU5leHROb2RlKGNoaWxkLCBvdXRlckRlY28sIGlubmVyRGVjbywgdmlldywgaSkpIDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEFkZCBpdCBhcyBhIG5ldyB2aWV3XG4gICAgICAgICAgICAgICAgdXBkYXRlci5hZGROb2RlKGNoaWxkLCBvdXRlckRlY28sIGlubmVyRGVjbywgdmlldywgb2ZmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9mZiArPSBjaGlsZC5ub2RlU2l6ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIERyb3AgYWxsIHJlbWFpbmluZyBkZXNjcyBhZnRlciB0aGUgY3VycmVudCBwb3NpdGlvbi5cbiAgICAgICAgdXBkYXRlci5zeW5jVG9NYXJrcyhbXSwgaW5saW5lLCB2aWV3KTtcbiAgICAgICAgaWYgKHRoaXMubm9kZS5pc1RleHRibG9jaylcbiAgICAgICAgICAgIHVwZGF0ZXIuYWRkVGV4dGJsb2NrSGFja3MoKTtcbiAgICAgICAgdXBkYXRlci5kZXN0cm95UmVzdCgpO1xuICAgICAgICAvLyBTeW5jIHRoZSBET00gaWYgYW55dGhpbmcgY2hhbmdlZFxuICAgICAgICBpZiAodXBkYXRlci5jaGFuZ2VkIHx8IHRoaXMuZGlydHkgPT0gQ09OVEVOVF9ESVJUWSkge1xuICAgICAgICAgICAgLy8gTWF5IGhhdmUgdG8gcHJvdGVjdCBmb2N1c2VkIERPTSBmcm9tIGJlaW5nIGNoYW5nZWQgaWYgYSBjb21wb3NpdGlvbiBpcyBhY3RpdmVcbiAgICAgICAgICAgIGlmIChsb2NhbENvbXBvc2l0aW9uKVxuICAgICAgICAgICAgICAgIHRoaXMucHJvdGVjdExvY2FsQ29tcG9zaXRpb24odmlldywgbG9jYWxDb21wb3NpdGlvbik7XG4gICAgICAgICAgICByZW5kZXJEZXNjcyh0aGlzLmNvbnRlbnRET00sIHRoaXMuY2hpbGRyZW4sIHZpZXcpO1xuICAgICAgICAgICAgaWYgKGlvcylcbiAgICAgICAgICAgICAgICBpb3NIYWNrcyh0aGlzLmRvbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbG9jYWxDb21wb3NpdGlvbkluZm8odmlldywgcG9zKSB7XG4gICAgICAgIC8vIE9ubHkgZG8gc29tZXRoaW5nIGlmIGJvdGggdGhlIHNlbGVjdGlvbiBhbmQgYSBmb2N1c2VkIHRleHQgbm9kZVxuICAgICAgICAvLyBhcmUgaW5zaWRlIG9mIHRoaXMgbm9kZVxuICAgICAgICBsZXQgeyBmcm9tLCB0byB9ID0gdmlldy5zdGF0ZS5zZWxlY3Rpb247XG4gICAgICAgIGlmICghKHZpZXcuc3RhdGUuc2VsZWN0aW9uIGluc3RhbmNlb2YgVGV4dFNlbGVjdGlvbikgfHwgZnJvbSA8IHBvcyB8fCB0byA+IHBvcyArIHRoaXMubm9kZS5jb250ZW50LnNpemUpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgbGV0IHNlbCA9IHZpZXcuZG9tU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgbGV0IHRleHROb2RlID0gbmVhcmJ5VGV4dE5vZGUoc2VsLmZvY3VzTm9kZSwgc2VsLmZvY3VzT2Zmc2V0KTtcbiAgICAgICAgaWYgKCF0ZXh0Tm9kZSB8fCAhdGhpcy5kb20uY29udGFpbnModGV4dE5vZGUucGFyZW50Tm9kZSkpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMubm9kZS5pbmxpbmVDb250ZW50KSB7XG4gICAgICAgICAgICAvLyBGaW5kIHRoZSB0ZXh0IGluIHRoZSBmb2N1c2VkIG5vZGUgaW4gdGhlIG5vZGUsIHN0b3AgaWYgaXQncyBub3RcbiAgICAgICAgICAgIC8vIHRoZXJlIChtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIHRocm91Z2ggb3RoZXIgbWVhbnMsIGluIHdoaWNoXG4gICAgICAgICAgICAvLyBjYXNlIGl0IHNob3VsZCBvdmVyd3JpdHRlbilcbiAgICAgICAgICAgIGxldCB0ZXh0ID0gdGV4dE5vZGUubm9kZVZhbHVlO1xuICAgICAgICAgICAgbGV0IHRleHRQb3MgPSBmaW5kVGV4dEluRnJhZ21lbnQodGhpcy5ub2RlLmNvbnRlbnQsIHRleHQsIGZyb20gLSBwb3MsIHRvIC0gcG9zKTtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0UG9zIDwgMCA/IG51bGwgOiB7IG5vZGU6IHRleHROb2RlLCBwb3M6IHRleHRQb3MsIHRleHQgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IG5vZGU6IHRleHROb2RlLCBwb3M6IC0xLCB0ZXh0OiBcIlwiIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdExvY2FsQ29tcG9zaXRpb24odmlldywgeyBub2RlLCBwb3MsIHRleHQgfSkge1xuICAgICAgICAvLyBUaGUgbm9kZSBpcyBhbHJlYWR5IHBhcnQgb2YgYSBsb2NhbCB2aWV3IGRlc2MsIGxlYXZlIGl0IHRoZXJlXG4gICAgICAgIGlmICh0aGlzLmdldERlc2Mobm9kZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vIENyZWF0ZSBhIGNvbXBvc2l0aW9uIHZpZXcgZm9yIHRoZSBvcnBoYW5lZCBub2Rlc1xuICAgICAgICBsZXQgdG9wTm9kZSA9IG5vZGU7XG4gICAgICAgIGZvciAoOzsgdG9wTm9kZSA9IHRvcE5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgaWYgKHRvcE5vZGUucGFyZW50Tm9kZSA9PSB0aGlzLmNvbnRlbnRET00pXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB3aGlsZSAodG9wTm9kZS5wcmV2aW91c1NpYmxpbmcpXG4gICAgICAgICAgICAgICAgdG9wTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRvcE5vZGUucHJldmlvdXNTaWJsaW5nKTtcbiAgICAgICAgICAgIHdoaWxlICh0b3BOb2RlLm5leHRTaWJsaW5nKVxuICAgICAgICAgICAgICAgIHRvcE5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0b3BOb2RlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIGlmICh0b3BOb2RlLnBtVmlld0Rlc2MpXG4gICAgICAgICAgICAgICAgdG9wTm9kZS5wbVZpZXdEZXNjID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkZXNjID0gbmV3IENvbXBvc2l0aW9uVmlld0Rlc2ModGhpcywgdG9wTm9kZSwgbm9kZSwgdGV4dCk7XG4gICAgICAgIHZpZXcuaW5wdXQuY29tcG9zaXRpb25Ob2Rlcy5wdXNoKGRlc2MpO1xuICAgICAgICAvLyBQYXRjaCB1cCB0aGlzLmNoaWxkcmVuIHRvIGNvbnRhaW4gdGhlIGNvbXBvc2l0aW9uIHZpZXdcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IHJlcGxhY2VOb2Rlcyh0aGlzLmNoaWxkcmVuLCBwb3MsIHBvcyArIHRleHQubGVuZ3RoLCB2aWV3LCBkZXNjKTtcbiAgICB9XG4gICAgLy8gSWYgdGhpcyBkZXNjIG11c3QgYmUgdXBkYXRlZCB0byBtYXRjaCB0aGUgZ2l2ZW4gbm9kZSBkZWNvcmF0aW9uLFxuICAgIC8vIGRvIHNvIGFuZCByZXR1cm4gdHJ1ZS5cbiAgICB1cGRhdGUobm9kZSwgb3V0ZXJEZWNvLCBpbm5lckRlY28sIHZpZXcpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlydHkgPT0gTk9ERV9ESVJUWSB8fFxuICAgICAgICAgICAgIW5vZGUuc2FtZU1hcmt1cCh0aGlzLm5vZGUpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLnVwZGF0ZUlubmVyKG5vZGUsIG91dGVyRGVjbywgaW5uZXJEZWNvLCB2aWV3KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHVwZGF0ZUlubmVyKG5vZGUsIG91dGVyRGVjbywgaW5uZXJEZWNvLCB2aWV3KSB7XG4gICAgICAgIHRoaXMudXBkYXRlT3V0ZXJEZWNvKG91dGVyRGVjbyk7XG4gICAgICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgICAgIHRoaXMuaW5uZXJEZWNvID0gaW5uZXJEZWNvO1xuICAgICAgICBpZiAodGhpcy5jb250ZW50RE9NKVxuICAgICAgICAgICAgdGhpcy51cGRhdGVDaGlsZHJlbih2aWV3LCB0aGlzLnBvc0F0U3RhcnQpO1xuICAgICAgICB0aGlzLmRpcnR5ID0gTk9UX0RJUlRZO1xuICAgIH1cbiAgICB1cGRhdGVPdXRlckRlY28ob3V0ZXJEZWNvKSB7XG4gICAgICAgIGlmIChzYW1lT3V0ZXJEZWNvKG91dGVyRGVjbywgdGhpcy5vdXRlckRlY28pKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBsZXQgbmVlZHNXcmFwID0gdGhpcy5ub2RlRE9NLm5vZGVUeXBlICE9IDE7XG4gICAgICAgIGxldCBvbGRET00gPSB0aGlzLmRvbTtcbiAgICAgICAgdGhpcy5kb20gPSBwYXRjaE91dGVyRGVjbyh0aGlzLmRvbSwgdGhpcy5ub2RlRE9NLCBjb21wdXRlT3V0ZXJEZWNvKHRoaXMub3V0ZXJEZWNvLCB0aGlzLm5vZGUsIG5lZWRzV3JhcCksIGNvbXB1dGVPdXRlckRlY28ob3V0ZXJEZWNvLCB0aGlzLm5vZGUsIG5lZWRzV3JhcCkpO1xuICAgICAgICBpZiAodGhpcy5kb20gIT0gb2xkRE9NKSB7XG4gICAgICAgICAgICBvbGRET00ucG1WaWV3RGVzYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuZG9tLnBtVmlld0Rlc2MgPSB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3V0ZXJEZWNvID0gb3V0ZXJEZWNvO1xuICAgIH1cbiAgICAvLyBNYXJrIHRoaXMgbm9kZSBhcyBiZWluZyB0aGUgc2VsZWN0ZWQgbm9kZS5cbiAgICBzZWxlY3ROb2RlKCkge1xuICAgICAgICBpZiAodGhpcy5ub2RlRE9NLm5vZGVUeXBlID09IDEpXG4gICAgICAgICAgICB0aGlzLm5vZGVET00uY2xhc3NMaXN0LmFkZChcIlByb3NlTWlycm9yLXNlbGVjdGVkbm9kZVwiKTtcbiAgICAgICAgaWYgKHRoaXMuY29udGVudERPTSB8fCAhdGhpcy5ub2RlLnR5cGUuc3BlYy5kcmFnZ2FibGUpXG4gICAgICAgICAgICB0aGlzLmRvbS5kcmFnZ2FibGUgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBSZW1vdmUgc2VsZWN0ZWQgbm9kZSBtYXJraW5nIGZyb20gdGhpcyBub2RlLlxuICAgIGRlc2VsZWN0Tm9kZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubm9kZURPTS5ub2RlVHlwZSA9PSAxKVxuICAgICAgICAgICAgdGhpcy5ub2RlRE9NLmNsYXNzTGlzdC5yZW1vdmUoXCJQcm9zZU1pcnJvci1zZWxlY3RlZG5vZGVcIik7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRET00gfHwgIXRoaXMubm9kZS50eXBlLnNwZWMuZHJhZ2dhYmxlKVxuICAgICAgICAgICAgdGhpcy5kb20ucmVtb3ZlQXR0cmlidXRlKFwiZHJhZ2dhYmxlXCIpO1xuICAgIH1cbiAgICBnZXQgZG9tQXRvbSgpIHsgcmV0dXJuIHRoaXMubm9kZS5pc0F0b207IH1cbn1cbi8vIENyZWF0ZSBhIHZpZXcgZGVzYyBmb3IgdGhlIHRvcC1sZXZlbCBkb2N1bWVudCBub2RlLCB0byBiZSBleHBvcnRlZFxuLy8gYW5kIHVzZWQgYnkgdGhlIHZpZXcgY2xhc3MuXG5mdW5jdGlvbiBkb2NWaWV3RGVzYyhkb2MsIG91dGVyRGVjbywgaW5uZXJEZWNvLCBkb20sIHZpZXcpIHtcbiAgICBhcHBseU91dGVyRGVjbyhkb20sIG91dGVyRGVjbywgZG9jKTtcbiAgICByZXR1cm4gbmV3IE5vZGVWaWV3RGVzYyh1bmRlZmluZWQsIGRvYywgb3V0ZXJEZWNvLCBpbm5lckRlY28sIGRvbSwgZG9tLCBkb20sIHZpZXcsIDApO1xufVxuY2xhc3MgVGV4dFZpZXdEZXNjIGV4dGVuZHMgTm9kZVZpZXdEZXNjIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQsIG5vZGUsIG91dGVyRGVjbywgaW5uZXJEZWNvLCBkb20sIG5vZGVET00sIHZpZXcpIHtcbiAgICAgICAgc3VwZXIocGFyZW50LCBub2RlLCBvdXRlckRlY28sIGlubmVyRGVjbywgZG9tLCBudWxsLCBub2RlRE9NLCB2aWV3LCAwKTtcbiAgICB9XG4gICAgcGFyc2VSdWxlKCkge1xuICAgICAgICBsZXQgc2tpcCA9IHRoaXMubm9kZURPTS5wYXJlbnROb2RlO1xuICAgICAgICB3aGlsZSAoc2tpcCAmJiBza2lwICE9IHRoaXMuZG9tICYmICFza2lwLnBtSXNEZWNvKVxuICAgICAgICAgICAgc2tpcCA9IHNraXAucGFyZW50Tm9kZTtcbiAgICAgICAgcmV0dXJuIHsgc2tpcDogKHNraXAgfHwgdHJ1ZSkgfTtcbiAgICB9XG4gICAgdXBkYXRlKG5vZGUsIG91dGVyRGVjbywgaW5uZXJEZWNvLCB2aWV3KSB7XG4gICAgICAgIGlmICh0aGlzLmRpcnR5ID09IE5PREVfRElSVFkgfHwgKHRoaXMuZGlydHkgIT0gTk9UX0RJUlRZICYmICF0aGlzLmluUGFyZW50KCkpIHx8XG4gICAgICAgICAgICAhbm9kZS5zYW1lTWFya3VwKHRoaXMubm9kZSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMudXBkYXRlT3V0ZXJEZWNvKG91dGVyRGVjbyk7XG4gICAgICAgIGlmICgodGhpcy5kaXJ0eSAhPSBOT1RfRElSVFkgfHwgbm9kZS50ZXh0ICE9IHRoaXMubm9kZS50ZXh0KSAmJiBub2RlLnRleHQgIT0gdGhpcy5ub2RlRE9NLm5vZGVWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5ub2RlRE9NLm5vZGVWYWx1ZSA9IG5vZGUudGV4dDtcbiAgICAgICAgICAgIGlmICh2aWV3LnRyYWNrV3JpdGVzID09IHRoaXMubm9kZURPTSlcbiAgICAgICAgICAgICAgICB2aWV3LnRyYWNrV3JpdGVzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgICAgICB0aGlzLmRpcnR5ID0gTk9UX0RJUlRZO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaW5QYXJlbnQoKSB7XG4gICAgICAgIGxldCBwYXJlbnRET00gPSB0aGlzLnBhcmVudC5jb250ZW50RE9NO1xuICAgICAgICBmb3IgKGxldCBuID0gdGhpcy5ub2RlRE9NOyBuOyBuID0gbi5wYXJlbnROb2RlKVxuICAgICAgICAgICAgaWYgKG4gPT0gcGFyZW50RE9NKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGRvbUZyb21Qb3MocG9zKSB7XG4gICAgICAgIHJldHVybiB7IG5vZGU6IHRoaXMubm9kZURPTSwgb2Zmc2V0OiBwb3MgfTtcbiAgICB9XG4gICAgbG9jYWxQb3NGcm9tRE9NKGRvbSwgb2Zmc2V0LCBiaWFzKSB7XG4gICAgICAgIGlmIChkb20gPT0gdGhpcy5ub2RlRE9NKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zQXRTdGFydCArIE1hdGgubWluKG9mZnNldCwgdGhpcy5ub2RlLnRleHQubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmxvY2FsUG9zRnJvbURPTShkb20sIG9mZnNldCwgYmlhcyk7XG4gICAgfVxuICAgIGlnbm9yZU11dGF0aW9uKG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBtdXRhdGlvbi50eXBlICE9IFwiY2hhcmFjdGVyRGF0YVwiICYmIG11dGF0aW9uLnR5cGUgIT0gXCJzZWxlY3Rpb25cIjtcbiAgICB9XG4gICAgc2xpY2UoZnJvbSwgdG8sIHZpZXcpIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLm5vZGUuY3V0KGZyb20sIHRvKSwgZG9tID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobm9kZS50ZXh0KTtcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0Vmlld0Rlc2ModGhpcy5wYXJlbnQsIG5vZGUsIHRoaXMub3V0ZXJEZWNvLCB0aGlzLmlubmVyRGVjbywgZG9tLCBkb20sIHZpZXcpO1xuICAgIH1cbiAgICBtYXJrRGlydHkoZnJvbSwgdG8pIHtcbiAgICAgICAgc3VwZXIubWFya0RpcnR5KGZyb20sIHRvKTtcbiAgICAgICAgaWYgKHRoaXMuZG9tICE9IHRoaXMubm9kZURPTSAmJiAoZnJvbSA9PSAwIHx8IHRvID09IHRoaXMubm9kZURPTS5ub2RlVmFsdWUubGVuZ3RoKSlcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSBOT0RFX0RJUlRZO1xuICAgIH1cbiAgICBnZXQgZG9tQXRvbSgpIHsgcmV0dXJuIGZhbHNlOyB9XG59XG4vLyBBIGR1bW15IGRlc2MgdXNlZCB0byB0YWcgdHJhaWxpbmcgQlIgb3IgSU1HIG5vZGVzIGNyZWF0ZWQgdG8gd29ya1xuLy8gYXJvdW5kIGNvbnRlbnRFZGl0YWJsZSB0ZXJyaWJsZW5lc3MuXG5jbGFzcyBUcmFpbGluZ0hhY2tWaWV3RGVzYyBleHRlbmRzIFZpZXdEZXNjIHtcbiAgICBwYXJzZVJ1bGUoKSB7IHJldHVybiB7IGlnbm9yZTogdHJ1ZSB9OyB9XG4gICAgbWF0Y2hlc0hhY2sobm9kZU5hbWUpIHsgcmV0dXJuIHRoaXMuZGlydHkgPT0gTk9UX0RJUlRZICYmIHRoaXMuZG9tLm5vZGVOYW1lID09IG5vZGVOYW1lOyB9XG4gICAgZ2V0IGRvbUF0b20oKSB7IHJldHVybiB0cnVlOyB9XG4gICAgZ2V0IGlnbm9yZUZvckNvb3JkcygpIHsgcmV0dXJuIHRoaXMuZG9tLm5vZGVOYW1lID09IFwiSU1HXCI7IH1cbn1cbi8vIEEgc2VwYXJhdGUgc3ViY2xhc3MgaXMgdXNlZCBmb3IgY3VzdG9taXplZCBub2RlIHZpZXdzLCBzbyB0aGF0IHRoZVxuLy8gZXh0cmEgY2hlY2tzIG9ubHkgaGF2ZSB0byBiZSBtYWRlIGZvciBub2RlcyB0aGF0IGFyZSBhY3R1YWxseVxuLy8gY3VzdG9taXplZC5cbmNsYXNzIEN1c3RvbU5vZGVWaWV3RGVzYyBleHRlbmRzIE5vZGVWaWV3RGVzYyB7XG4gICAgY29uc3RydWN0b3IocGFyZW50LCBub2RlLCBvdXRlckRlY28sIGlubmVyRGVjbywgZG9tLCBjb250ZW50RE9NLCBub2RlRE9NLCBzcGVjLCB2aWV3LCBwb3MpIHtcbiAgICAgICAgc3VwZXIocGFyZW50LCBub2RlLCBvdXRlckRlY28sIGlubmVyRGVjbywgZG9tLCBjb250ZW50RE9NLCBub2RlRE9NLCB2aWV3LCBwb3MpO1xuICAgICAgICB0aGlzLnNwZWMgPSBzcGVjO1xuICAgIH1cbiAgICAvLyBBIGN1c3RvbSBgdXBkYXRlYCBtZXRob2QgZ2V0cyB0byBkZWNpZGUgd2hldGhlciB0aGUgdXBkYXRlIGdvZXNcbiAgICAvLyB0aHJvdWdoLiBJZiBpdCBkb2VzLCBhbmQgdGhlcmUncyBhIGBjb250ZW50RE9NYCBub2RlLCBvdXIgbG9naWNcbiAgICAvLyB1cGRhdGVzIHRoZSBjaGlsZHJlbi5cbiAgICB1cGRhdGUobm9kZSwgb3V0ZXJEZWNvLCBpbm5lckRlY28sIHZpZXcpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlydHkgPT0gTk9ERV9ESVJUWSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc3BlYy51cGRhdGUpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnNwZWMudXBkYXRlKG5vZGUsIG91dGVyRGVjbywgaW5uZXJEZWNvKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJbm5lcihub2RlLCBvdXRlckRlY28sIGlubmVyRGVjbywgdmlldyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLmNvbnRlbnRET00gJiYgIW5vZGUuaXNMZWFmKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIudXBkYXRlKG5vZGUsIG91dGVyRGVjbywgaW5uZXJEZWNvLCB2aWV3KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZWxlY3ROb2RlKCkge1xuICAgICAgICB0aGlzLnNwZWMuc2VsZWN0Tm9kZSA/IHRoaXMuc3BlYy5zZWxlY3ROb2RlKCkgOiBzdXBlci5zZWxlY3ROb2RlKCk7XG4gICAgfVxuICAgIGRlc2VsZWN0Tm9kZSgpIHtcbiAgICAgICAgdGhpcy5zcGVjLmRlc2VsZWN0Tm9kZSA/IHRoaXMuc3BlYy5kZXNlbGVjdE5vZGUoKSA6IHN1cGVyLmRlc2VsZWN0Tm9kZSgpO1xuICAgIH1cbiAgICBzZXRTZWxlY3Rpb24oYW5jaG9yLCBoZWFkLCByb290LCBmb3JjZSkge1xuICAgICAgICB0aGlzLnNwZWMuc2V0U2VsZWN0aW9uID8gdGhpcy5zcGVjLnNldFNlbGVjdGlvbihhbmNob3IsIGhlYWQsIHJvb3QpXG4gICAgICAgICAgICA6IHN1cGVyLnNldFNlbGVjdGlvbihhbmNob3IsIGhlYWQsIHJvb3QsIGZvcmNlKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3BlYy5kZXN0cm95KVxuICAgICAgICAgICAgdGhpcy5zcGVjLmRlc3Ryb3koKTtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICBzdG9wRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3BlYy5zdG9wRXZlbnQgPyB0aGlzLnNwZWMuc3RvcEV2ZW50KGV2ZW50KSA6IGZhbHNlO1xuICAgIH1cbiAgICBpZ25vcmVNdXRhdGlvbihtdXRhdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5zcGVjLmlnbm9yZU11dGF0aW9uID8gdGhpcy5zcGVjLmlnbm9yZU11dGF0aW9uKG11dGF0aW9uKSA6IHN1cGVyLmlnbm9yZU11dGF0aW9uKG11dGF0aW9uKTtcbiAgICB9XG59XG4vLyBTeW5jIHRoZSBjb250ZW50IG9mIHRoZSBnaXZlbiBET00gbm9kZSB3aXRoIHRoZSBub2RlcyBhc3NvY2lhdGVkXG4vLyB3aXRoIHRoZSBnaXZlbiBhcnJheSBvZiB2aWV3IGRlc2NzLCByZWN1cnNpbmcgaW50byBtYXJrIGRlc2NzXG4vLyBiZWNhdXNlIHRoaXMgc2hvdWxkIHN5bmMgdGhlIHN1YnRyZWUgZm9yIGEgd2hvbGUgbm9kZSBhdCBhIHRpbWUuXG5mdW5jdGlvbiByZW5kZXJEZXNjcyhwYXJlbnRET00sIGRlc2NzLCB2aWV3KSB7XG4gICAgbGV0IGRvbSA9IHBhcmVudERPTS5maXJzdENoaWxkLCB3cml0dGVuID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXNjcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgZGVzYyA9IGRlc2NzW2ldLCBjaGlsZERPTSA9IGRlc2MuZG9tO1xuICAgICAgICBpZiAoY2hpbGRET00ucGFyZW50Tm9kZSA9PSBwYXJlbnRET00pIHtcbiAgICAgICAgICAgIHdoaWxlIChjaGlsZERPTSAhPSBkb20pIHtcbiAgICAgICAgICAgICAgICBkb20gPSBybShkb20pO1xuICAgICAgICAgICAgICAgIHdyaXR0ZW4gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG9tID0gZG9tLm5leHRTaWJsaW5nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd3JpdHRlbiA9IHRydWU7XG4gICAgICAgICAgICBwYXJlbnRET00uaW5zZXJ0QmVmb3JlKGNoaWxkRE9NLCBkb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZXNjIGluc3RhbmNlb2YgTWFya1ZpZXdEZXNjKSB7XG4gICAgICAgICAgICBsZXQgcG9zID0gZG9tID8gZG9tLnByZXZpb3VzU2libGluZyA6IHBhcmVudERPTS5sYXN0Q2hpbGQ7XG4gICAgICAgICAgICByZW5kZXJEZXNjcyhkZXNjLmNvbnRlbnRET00sIGRlc2MuY2hpbGRyZW4sIHZpZXcpO1xuICAgICAgICAgICAgZG9tID0gcG9zID8gcG9zLm5leHRTaWJsaW5nIDogcGFyZW50RE9NLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgd2hpbGUgKGRvbSkge1xuICAgICAgICBkb20gPSBybShkb20pO1xuICAgICAgICB3cml0dGVuID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHdyaXR0ZW4gJiYgdmlldy50cmFja1dyaXRlcyA9PSBwYXJlbnRET00pXG4gICAgICAgIHZpZXcudHJhY2tXcml0ZXMgPSBudWxsO1xufVxuY29uc3QgT3V0ZXJEZWNvTGV2ZWwgPSBmdW5jdGlvbiAobm9kZU5hbWUpIHtcbiAgICBpZiAobm9kZU5hbWUpXG4gICAgICAgIHRoaXMubm9kZU5hbWUgPSBub2RlTmFtZTtcbn07XG5PdXRlckRlY29MZXZlbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuY29uc3Qgbm9EZWNvID0gW25ldyBPdXRlckRlY29MZXZlbF07XG5mdW5jdGlvbiBjb21wdXRlT3V0ZXJEZWNvKG91dGVyRGVjbywgbm9kZSwgbmVlZHNXcmFwKSB7XG4gICAgaWYgKG91dGVyRGVjby5sZW5ndGggPT0gMClcbiAgICAgICAgcmV0dXJuIG5vRGVjbztcbiAgICBsZXQgdG9wID0gbmVlZHNXcmFwID8gbm9EZWNvWzBdIDogbmV3IE91dGVyRGVjb0xldmVsLCByZXN1bHQgPSBbdG9wXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dGVyRGVjby5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgYXR0cnMgPSBvdXRlckRlY29baV0udHlwZS5hdHRycztcbiAgICAgICAgaWYgKCFhdHRycylcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoYXR0cnMubm9kZU5hbWUpXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0b3AgPSBuZXcgT3V0ZXJEZWNvTGV2ZWwoYXR0cnMubm9kZU5hbWUpKTtcbiAgICAgICAgZm9yIChsZXQgbmFtZSBpbiBhdHRycykge1xuICAgICAgICAgICAgbGV0IHZhbCA9IGF0dHJzW25hbWVdO1xuICAgICAgICAgICAgaWYgKHZhbCA9PSBudWxsKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKG5lZWRzV3JhcCAmJiByZXN1bHQubGVuZ3RoID09IDEpXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godG9wID0gbmV3IE91dGVyRGVjb0xldmVsKG5vZGUuaXNJbmxpbmUgPyBcInNwYW5cIiA6IFwiZGl2XCIpKTtcbiAgICAgICAgICAgIGlmIChuYW1lID09IFwiY2xhc3NcIilcbiAgICAgICAgICAgICAgICB0b3AuY2xhc3MgPSAodG9wLmNsYXNzID8gdG9wLmNsYXNzICsgXCIgXCIgOiBcIlwiKSArIHZhbDtcbiAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gXCJzdHlsZVwiKVxuICAgICAgICAgICAgICAgIHRvcC5zdHlsZSA9ICh0b3Auc3R5bGUgPyB0b3Auc3R5bGUgKyBcIjtcIiA6IFwiXCIpICsgdmFsO1xuICAgICAgICAgICAgZWxzZSBpZiAobmFtZSAhPSBcIm5vZGVOYW1lXCIpXG4gICAgICAgICAgICAgICAgdG9wW25hbWVdID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBwYXRjaE91dGVyRGVjbyhvdXRlckRPTSwgbm9kZURPTSwgcHJldkNvbXB1dGVkLCBjdXJDb21wdXRlZCkge1xuICAgIC8vIFNob3J0Y3V0IGZvciB0cml2aWFsIGNhc2VcbiAgICBpZiAocHJldkNvbXB1dGVkID09IG5vRGVjbyAmJiBjdXJDb21wdXRlZCA9PSBub0RlY28pXG4gICAgICAgIHJldHVybiBub2RlRE9NO1xuICAgIGxldCBjdXJET00gPSBub2RlRE9NO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VyQ29tcHV0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGRlY28gPSBjdXJDb21wdXRlZFtpXSwgcHJldiA9IHByZXZDb21wdXRlZFtpXTtcbiAgICAgICAgaWYgKGkpIHtcbiAgICAgICAgICAgIGxldCBwYXJlbnQ7XG4gICAgICAgICAgICBpZiAocHJldiAmJiBwcmV2Lm5vZGVOYW1lID09IGRlY28ubm9kZU5hbWUgJiYgY3VyRE9NICE9IG91dGVyRE9NICYmXG4gICAgICAgICAgICAgICAgKHBhcmVudCA9IGN1ckRPTS5wYXJlbnROb2RlKSAmJiBwYXJlbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSBkZWNvLm5vZGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgY3VyRE9NID0gcGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChkZWNvLm5vZGVOYW1lKTtcbiAgICAgICAgICAgICAgICBwYXJlbnQucG1Jc0RlY28gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChjdXJET00pO1xuICAgICAgICAgICAgICAgIHByZXYgPSBub0RlY29bMF07XG4gICAgICAgICAgICAgICAgY3VyRE9NID0gcGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBhdGNoQXR0cmlidXRlcyhjdXJET00sIHByZXYgfHwgbm9EZWNvWzBdLCBkZWNvKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1ckRPTTtcbn1cbmZ1bmN0aW9uIHBhdGNoQXR0cmlidXRlcyhkb20sIHByZXYsIGN1cikge1xuICAgIGZvciAobGV0IG5hbWUgaW4gcHJldilcbiAgICAgICAgaWYgKG5hbWUgIT0gXCJjbGFzc1wiICYmIG5hbWUgIT0gXCJzdHlsZVwiICYmIG5hbWUgIT0gXCJub2RlTmFtZVwiICYmICEobmFtZSBpbiBjdXIpKVxuICAgICAgICAgICAgZG9tLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICBmb3IgKGxldCBuYW1lIGluIGN1cilcbiAgICAgICAgaWYgKG5hbWUgIT0gXCJjbGFzc1wiICYmIG5hbWUgIT0gXCJzdHlsZVwiICYmIG5hbWUgIT0gXCJub2RlTmFtZVwiICYmIGN1cltuYW1lXSAhPSBwcmV2W25hbWVdKVxuICAgICAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShuYW1lLCBjdXJbbmFtZV0pO1xuICAgIGlmIChwcmV2LmNsYXNzICE9IGN1ci5jbGFzcykge1xuICAgICAgICBsZXQgcHJldkxpc3QgPSBwcmV2LmNsYXNzID8gcHJldi5jbGFzcy5zcGxpdChcIiBcIikuZmlsdGVyKEJvb2xlYW4pIDogW107XG4gICAgICAgIGxldCBjdXJMaXN0ID0gY3VyLmNsYXNzID8gY3VyLmNsYXNzLnNwbGl0KFwiIFwiKS5maWx0ZXIoQm9vbGVhbikgOiBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2TGlzdC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGlmIChjdXJMaXN0LmluZGV4T2YocHJldkxpc3RbaV0pID09IC0xKVxuICAgICAgICAgICAgICAgIGRvbS5jbGFzc0xpc3QucmVtb3ZlKHByZXZMaXN0W2ldKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJMaXN0Lmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgaWYgKHByZXZMaXN0LmluZGV4T2YoY3VyTGlzdFtpXSkgPT0gLTEpXG4gICAgICAgICAgICAgICAgZG9tLmNsYXNzTGlzdC5hZGQoY3VyTGlzdFtpXSk7XG4gICAgICAgIGlmIChkb20uY2xhc3NMaXN0Lmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgZG9tLnJlbW92ZUF0dHJpYnV0ZShcImNsYXNzXCIpO1xuICAgIH1cbiAgICBpZiAocHJldi5zdHlsZSAhPSBjdXIuc3R5bGUpIHtcbiAgICAgICAgaWYgKHByZXYuc3R5bGUpIHtcbiAgICAgICAgICAgIGxldCBwcm9wID0gL1xccyooW1xcd1xcLVxceGExLVxcdWZmZmZdKylcXHMqOig/OlwiKD86XFxcXC58W15cIl0pKlwifCcoPzpcXFxcLnxbXiddKSonfFxcKC4qP1xcKXxbXjtdKSovZywgbTtcbiAgICAgICAgICAgIHdoaWxlIChtID0gcHJvcC5leGVjKHByZXYuc3R5bGUpKVxuICAgICAgICAgICAgICAgIGRvbS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShtWzFdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VyLnN0eWxlKVxuICAgICAgICAgICAgZG9tLnN0eWxlLmNzc1RleHQgKz0gY3VyLnN0eWxlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFwcGx5T3V0ZXJEZWNvKGRvbSwgZGVjbywgbm9kZSkge1xuICAgIHJldHVybiBwYXRjaE91dGVyRGVjbyhkb20sIGRvbSwgbm9EZWNvLCBjb21wdXRlT3V0ZXJEZWNvKGRlY28sIG5vZGUsIGRvbS5ub2RlVHlwZSAhPSAxKSk7XG59XG5mdW5jdGlvbiBzYW1lT3V0ZXJEZWNvKGEsIGIpIHtcbiAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspXG4gICAgICAgIGlmICghYVtpXS50eXBlLmVxKGJbaV0udHlwZSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBSZW1vdmUgYSBET00gbm9kZSBhbmQgcmV0dXJuIGl0cyBuZXh0IHNpYmxpbmcuXG5mdW5jdGlvbiBybShkb20pIHtcbiAgICBsZXQgbmV4dCA9IGRvbS5uZXh0U2libGluZztcbiAgICBkb20ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkb20pO1xuICAgIHJldHVybiBuZXh0O1xufVxuLy8gSGVscGVyIGNsYXNzIGZvciBpbmNyZW1lbnRhbGx5IHVwZGF0aW5nIGEgdHJlZSBvZiBtYXJrIGRlc2NzIGFuZFxuLy8gdGhlIHdpZGdldCBhbmQgbm9kZSBkZXNjcyBpbnNpZGUgb2YgdGhlbS5cbmNsYXNzIFZpZXdUcmVlVXBkYXRlciB7XG4gICAgY29uc3RydWN0b3IodG9wLCBsb2NrLCB2aWV3KSB7XG4gICAgICAgIHRoaXMubG9jayA9IGxvY2s7XG4gICAgICAgIHRoaXMudmlldyA9IHZpZXc7XG4gICAgICAgIC8vIEluZGV4IGludG8gYHRoaXMudG9wYCdzIGNoaWxkIGFycmF5LCByZXByZXNlbnRzIHRoZSBjdXJyZW50XG4gICAgICAgIC8vIHVwZGF0ZSBwb3NpdGlvbi5cbiAgICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgICAgIC8vIFdoZW4gZW50ZXJpbmcgYSBtYXJrLCB0aGUgY3VycmVudCB0b3AgYW5kIGluZGV4IGFyZSBwdXNoZWRcbiAgICAgICAgLy8gb250byB0aGlzLlxuICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgIC8vIFRyYWNrcyB3aGV0aGVyIGFueXRoaW5nIHdhcyBjaGFuZ2VkXG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvcCA9IHRvcDtcbiAgICAgICAgdGhpcy5wcmVNYXRjaCA9IHByZU1hdGNoKHRvcC5ub2RlLmNvbnRlbnQsIHRvcCk7XG4gICAgfVxuICAgIC8vIERlc3Ryb3kgYW5kIHJlbW92ZSB0aGUgY2hpbGRyZW4gYmV0d2VlbiB0aGUgZ2l2ZW4gaW5kaWNlcyBpblxuICAgIC8vIGB0aGlzLnRvcGAuXG4gICAgZGVzdHJveUJldHdlZW4oc3RhcnQsIGVuZCkge1xuICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKylcbiAgICAgICAgICAgIHRoaXMudG9wLmNoaWxkcmVuW2ldLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy50b3AuY2hpbGRyZW4uc3BsaWNlKHN0YXJ0LCBlbmQgLSBzdGFydCk7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgIC8vIERlc3Ryb3kgYWxsIHJlbWFpbmluZyBjaGlsZHJlbiBpbiBgdGhpcy50b3BgLlxuICAgIGRlc3Ryb3lSZXN0KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lCZXR3ZWVuKHRoaXMuaW5kZXgsIHRoaXMudG9wLmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgfVxuICAgIC8vIFN5bmMgdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFyayBkZXNjcyB3aXRoIHRoZSBnaXZlbiBhcnJheSBvZlxuICAgIC8vIG1hcmtzLCByZXVzaW5nIGV4aXN0aW5nIG1hcmsgZGVzY3Mgd2hlbiBwb3NzaWJsZS5cbiAgICBzeW5jVG9NYXJrcyhtYXJrcywgaW5saW5lLCB2aWV3KSB7XG4gICAgICAgIGxldCBrZWVwID0gMCwgZGVwdGggPSB0aGlzLnN0YWNrLmxlbmd0aCA+PiAxO1xuICAgICAgICBsZXQgbWF4S2VlcCA9IE1hdGgubWluKGRlcHRoLCBtYXJrcy5sZW5ndGgpO1xuICAgICAgICB3aGlsZSAoa2VlcCA8IG1heEtlZXAgJiZcbiAgICAgICAgICAgIChrZWVwID09IGRlcHRoIC0gMSA/IHRoaXMudG9wIDogdGhpcy5zdGFja1soa2VlcCArIDEpIDw8IDFdKVxuICAgICAgICAgICAgICAgIC5tYXRjaGVzTWFyayhtYXJrc1trZWVwXSkgJiYgbWFya3Nba2VlcF0udHlwZS5zcGVjLnNwYW5uaW5nICE9PSBmYWxzZSlcbiAgICAgICAgICAgIGtlZXArKztcbiAgICAgICAgd2hpbGUgKGtlZXAgPCBkZXB0aCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95UmVzdCgpO1xuICAgICAgICAgICAgdGhpcy50b3AuZGlydHkgPSBOT1RfRElSVFk7XG4gICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHRoaXMudG9wID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGRlcHRoIDwgbWFya3MubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2godGhpcy50b3AsIHRoaXMuaW5kZXggKyAxKTtcbiAgICAgICAgICAgIGxldCBmb3VuZCA9IC0xO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuaW5kZXg7IGkgPCBNYXRoLm1pbih0aGlzLmluZGV4ICsgMywgdGhpcy50b3AuY2hpbGRyZW4ubGVuZ3RoKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5leHQgPSB0aGlzLnRvcC5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dC5tYXRjaGVzTWFyayhtYXJrc1tkZXB0aF0pICYmICF0aGlzLmlzTG9ja2VkKG5leHQuZG9tKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb3VuZCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kID4gdGhpcy5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3lCZXR3ZWVuKHRoaXMuaW5kZXgsIGZvdW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50b3AgPSB0aGlzLnRvcC5jaGlsZHJlblt0aGlzLmluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBtYXJrRGVzYyA9IE1hcmtWaWV3RGVzYy5jcmVhdGUodGhpcy50b3AsIG1hcmtzW2RlcHRoXSwgaW5saW5lLCB2aWV3KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvcC5jaGlsZHJlbi5zcGxpY2UodGhpcy5pbmRleCwgMCwgbWFya0Rlc2MpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9wID0gbWFya0Rlc2M7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgICAgICAgZGVwdGgrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBUcnkgdG8gZmluZCBhIG5vZGUgZGVzYyBtYXRjaGluZyB0aGUgZ2l2ZW4gZGF0YS4gU2tpcCBvdmVyIGl0IGFuZFxuICAgIC8vIHJldHVybiB0cnVlIHdoZW4gc3VjY2Vzc2Z1bC5cbiAgICBmaW5kTm9kZU1hdGNoKG5vZGUsIG91dGVyRGVjbywgaW5uZXJEZWNvLCBpbmRleCkge1xuICAgICAgICBsZXQgZm91bmQgPSAtMSwgdGFyZ2V0RGVzYztcbiAgICAgICAgaWYgKGluZGV4ID49IHRoaXMucHJlTWF0Y2guaW5kZXggJiZcbiAgICAgICAgICAgICh0YXJnZXREZXNjID0gdGhpcy5wcmVNYXRjaC5tYXRjaGVzW2luZGV4IC0gdGhpcy5wcmVNYXRjaC5pbmRleF0pLnBhcmVudCA9PSB0aGlzLnRvcCAmJlxuICAgICAgICAgICAgdGFyZ2V0RGVzYy5tYXRjaGVzTm9kZShub2RlLCBvdXRlckRlY28sIGlubmVyRGVjbykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdGhpcy50b3AuY2hpbGRyZW4uaW5kZXhPZih0YXJnZXREZXNjLCB0aGlzLmluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmluZGV4LCBlID0gTWF0aC5taW4odGhpcy50b3AuY2hpbGRyZW4ubGVuZ3RoLCBpICsgNSk7IGkgPCBlOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGQgPSB0aGlzLnRvcC5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQubWF0Y2hlc05vZGUobm9kZSwgb3V0ZXJEZWNvLCBpbm5lckRlY28pICYmICF0aGlzLnByZU1hdGNoLm1hdGNoZWQuaGFzKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZm91bmQgPCAwKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLmRlc3Ryb3lCZXR3ZWVuKHRoaXMuaW5kZXgsIGZvdW5kKTtcbiAgICAgICAgdGhpcy5pbmRleCsrO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdXBkYXRlTm9kZUF0KG5vZGUsIG91dGVyRGVjbywgaW5uZXJEZWNvLCBpbmRleCwgdmlldykge1xuICAgICAgICBsZXQgY2hpbGQgPSB0aGlzLnRvcC5jaGlsZHJlbltpbmRleF07XG4gICAgICAgIGlmIChjaGlsZC5kaXJ0eSA9PSBOT0RFX0RJUlRZICYmIGNoaWxkLmRvbSA9PSBjaGlsZC5jb250ZW50RE9NKVxuICAgICAgICAgICAgY2hpbGQuZGlydHkgPSBDT05URU5UX0RJUlRZO1xuICAgICAgICBpZiAoIWNoaWxkLnVwZGF0ZShub2RlLCBvdXRlckRlY28sIGlubmVyRGVjbywgdmlldykpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuZGVzdHJveUJldHdlZW4odGhpcy5pbmRleCwgaW5kZXgpO1xuICAgICAgICB0aGlzLmluZGV4Kys7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmaW5kSW5kZXhXaXRoQ2hpbGQoZG9tTm9kZSkge1xuICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgICBsZXQgcGFyZW50ID0gZG9tTm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgaWYgKCFwYXJlbnQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgaWYgKHBhcmVudCA9PSB0aGlzLnRvcC5jb250ZW50RE9NKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRlc2MgPSBkb21Ob2RlLnBtVmlld0Rlc2M7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2MpXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmluZGV4OyBpIDwgdGhpcy50b3AuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRvcC5jaGlsZHJlbltpXSA9PSBkZXNjKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG9tTm9kZSA9IHBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBUcnkgdG8gdXBkYXRlIHRoZSBuZXh0IG5vZGUsIGlmIGFueSwgdG8gdGhlIGdpdmVuIGRhdGEuIENoZWNrc1xuICAgIC8vIHByZS1tYXRjaGVzIHRvIGF2b2lkIG92ZXJ3cml0aW5nIG5vZGVzIHRoYXQgY291bGQgc3RpbGwgYmUgdXNlZC5cbiAgICB1cGRhdGVOZXh0Tm9kZShub2RlLCBvdXRlckRlY28sIGlubmVyRGVjbywgdmlldywgaW5kZXgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuaW5kZXg7IGkgPCB0aGlzLnRvcC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IG5leHQgPSB0aGlzLnRvcC5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGlmIChuZXh0IGluc3RhbmNlb2YgTm9kZVZpZXdEZXNjKSB7XG4gICAgICAgICAgICAgICAgbGV0IHByZU1hdGNoID0gdGhpcy5wcmVNYXRjaC5tYXRjaGVkLmdldChuZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAocHJlTWF0Y2ggIT0gbnVsbCAmJiBwcmVNYXRjaCAhPSBpbmRleClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCBuZXh0RE9NID0gbmV4dC5kb207XG4gICAgICAgICAgICAgICAgLy8gQ2FuJ3QgdXBkYXRlIGlmIG5leHRET00gaXMgb3IgY29udGFpbnMgdGhpcy5sb2NrLCBleGNlcHQgaWZcbiAgICAgICAgICAgICAgICAvLyBpdCdzIGEgdGV4dCBub2RlIHdob3NlIGNvbnRlbnQgYWxyZWFkeSBtYXRjaGVzIHRoZSBuZXcgdGV4dFxuICAgICAgICAgICAgICAgIC8vIGFuZCB3aG9zZSBkZWNvcmF0aW9ucyBtYXRjaCB0aGUgbmV3IG9uZXMuXG4gICAgICAgICAgICAgICAgbGV0IGxvY2tlZCA9IHRoaXMuaXNMb2NrZWQobmV4dERPTSkgJiZcbiAgICAgICAgICAgICAgICAgICAgIShub2RlLmlzVGV4dCAmJiBuZXh0Lm5vZGUgJiYgbmV4dC5ub2RlLmlzVGV4dCAmJiBuZXh0Lm5vZGVET00ubm9kZVZhbHVlID09IG5vZGUudGV4dCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5kaXJ0eSAhPSBOT0RFX0RJUlRZICYmIHNhbWVPdXRlckRlY28ob3V0ZXJEZWNvLCBuZXh0Lm91dGVyRGVjbykpO1xuICAgICAgICAgICAgICAgIGlmICghbG9ja2VkICYmIG5leHQudXBkYXRlKG5vZGUsIG91dGVyRGVjbywgaW5uZXJEZWNvLCB2aWV3KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3lCZXR3ZWVuKHRoaXMuaW5kZXgsIGkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dC5kb20gIT0gbmV4dERPTSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gSW5zZXJ0IHRoZSBub2RlIGFzIGEgbmV3bHkgY3JlYXRlZCBub2RlIGRlc2MuXG4gICAgYWRkTm9kZShub2RlLCBvdXRlckRlY28sIGlubmVyRGVjbywgdmlldywgcG9zKSB7XG4gICAgICAgIHRoaXMudG9wLmNoaWxkcmVuLnNwbGljZSh0aGlzLmluZGV4KyssIDAsIE5vZGVWaWV3RGVzYy5jcmVhdGUodGhpcy50b3AsIG5vZGUsIG91dGVyRGVjbywgaW5uZXJEZWNvLCB2aWV3LCBwb3MpKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgcGxhY2VXaWRnZXQod2lkZ2V0LCB2aWV3LCBwb3MpIHtcbiAgICAgICAgbGV0IG5leHQgPSB0aGlzLmluZGV4IDwgdGhpcy50b3AuY2hpbGRyZW4ubGVuZ3RoID8gdGhpcy50b3AuY2hpbGRyZW5bdGhpcy5pbmRleF0gOiBudWxsO1xuICAgICAgICBpZiAobmV4dCAmJiBuZXh0Lm1hdGNoZXNXaWRnZXQod2lkZ2V0KSAmJlxuICAgICAgICAgICAgKHdpZGdldCA9PSBuZXh0LndpZGdldCB8fCAhbmV4dC53aWRnZXQudHlwZS50b0RPTS5wYXJlbnROb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGRlc2MgPSBuZXcgV2lkZ2V0Vmlld0Rlc2ModGhpcy50b3AsIHdpZGdldCwgdmlldywgcG9zKTtcbiAgICAgICAgICAgIHRoaXMudG9wLmNoaWxkcmVuLnNwbGljZSh0aGlzLmluZGV4KyssIDAsIGRlc2MpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgYSB0ZXh0YmxvY2sgbG9va3MgYW5kIGJlaGF2ZXMgY29ycmVjdGx5IGluXG4gICAgLy8gY29udGVudEVkaXRhYmxlLlxuICAgIGFkZFRleHRibG9ja0hhY2tzKCkge1xuICAgICAgICBsZXQgbGFzdENoaWxkID0gdGhpcy50b3AuY2hpbGRyZW5bdGhpcy5pbmRleCAtIDFdLCBwYXJlbnQgPSB0aGlzLnRvcDtcbiAgICAgICAgd2hpbGUgKGxhc3RDaGlsZCBpbnN0YW5jZW9mIE1hcmtWaWV3RGVzYykge1xuICAgICAgICAgICAgcGFyZW50ID0gbGFzdENoaWxkO1xuICAgICAgICAgICAgbGFzdENoaWxkID0gcGFyZW50LmNoaWxkcmVuW3BhcmVudC5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWxhc3RDaGlsZCB8fCAvLyBFbXB0eSB0ZXh0YmxvY2tcbiAgICAgICAgICAgICEobGFzdENoaWxkIGluc3RhbmNlb2YgVGV4dFZpZXdEZXNjKSB8fFxuICAgICAgICAgICAgL1xcbiQvLnRlc3QobGFzdENoaWxkLm5vZGUudGV4dCkgfHxcbiAgICAgICAgICAgICh0aGlzLnZpZXcucmVxdWlyZXNHZWNrb0hhY2tOb2RlICYmIC9cXHMkLy50ZXN0KGxhc3RDaGlsZC5ub2RlLnRleHQpKSkge1xuICAgICAgICAgICAgLy8gQXZvaWQgYnVncyBpbiBTYWZhcmkncyBjdXJzb3IgZHJhd2luZyAoIzExNjUpIGFuZCBDaHJvbWUncyBtb3VzZSBzZWxlY3Rpb24gKCMxMTUyKVxuICAgICAgICAgICAgaWYgKChzYWZhcmkgfHwgY2hyb21lKSAmJiBsYXN0Q2hpbGQgJiYgbGFzdENoaWxkLmRvbS5jb250ZW50RWRpdGFibGUgPT0gXCJmYWxzZVwiKVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkSGFja05vZGUoXCJJTUdcIiwgcGFyZW50KTtcbiAgICAgICAgICAgIHRoaXMuYWRkSGFja05vZGUoXCJCUlwiLCB0aGlzLnRvcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRkSGFja05vZGUobm9kZU5hbWUsIHBhcmVudCkge1xuICAgICAgICBpZiAocGFyZW50ID09IHRoaXMudG9wICYmIHRoaXMuaW5kZXggPCBwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoICYmIHBhcmVudC5jaGlsZHJlblt0aGlzLmluZGV4XS5tYXRjaGVzSGFjayhub2RlTmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5vZGVOYW1lKTtcbiAgICAgICAgICAgIGlmIChub2RlTmFtZSA9PSBcIklNR1wiKSB7XG4gICAgICAgICAgICAgICAgZG9tLmNsYXNzTmFtZSA9IFwiUHJvc2VNaXJyb3Itc2VwYXJhdG9yXCI7XG4gICAgICAgICAgICAgICAgZG9tLmFsdCA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9kZU5hbWUgPT0gXCJCUlwiKVxuICAgICAgICAgICAgICAgIGRvbS5jbGFzc05hbWUgPSBcIlByb3NlTWlycm9yLXRyYWlsaW5nQnJlYWtcIjtcbiAgICAgICAgICAgIGxldCBoYWNrID0gbmV3IFRyYWlsaW5nSGFja1ZpZXdEZXNjKHRoaXMudG9wLCBbXSwgZG9tLCBudWxsKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQgIT0gdGhpcy50b3ApXG4gICAgICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2goaGFjayk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnNwbGljZSh0aGlzLmluZGV4KyssIDAsIGhhY2spO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpc0xvY2tlZChub2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2sgJiYgKG5vZGUgPT0gdGhpcy5sb2NrIHx8IG5vZGUubm9kZVR5cGUgPT0gMSAmJiBub2RlLmNvbnRhaW5zKHRoaXMubG9jay5wYXJlbnROb2RlKSk7XG4gICAgfVxufVxuLy8gSXRlcmF0ZSBmcm9tIHRoZSBlbmQgb2YgdGhlIGZyYWdtZW50IGFuZCBhcnJheSBvZiBkZXNjcyB0byBmaW5kXG4vLyBkaXJlY3RseSBtYXRjaGluZyBvbmVzLCBpbiBvcmRlciB0byBhdm9pZCBvdmVyZWFnZXJseSByZXVzaW5nIHRob3NlXG4vLyBmb3Igb3RoZXIgbm9kZXMuIFJldHVybnMgdGhlIGZyYWdtZW50IGluZGV4IG9mIHRoZSBmaXJzdCBub2RlIHRoYXRcbi8vIGlzIHBhcnQgb2YgdGhlIHNlcXVlbmNlIG9mIG1hdGNoZWQgbm9kZXMgYXQgdGhlIGVuZCBvZiB0aGVcbi8vIGZyYWdtZW50LlxuZnVuY3Rpb24gcHJlTWF0Y2goZnJhZywgcGFyZW50RGVzYykge1xuICAgIGxldCBjdXJEZXNjID0gcGFyZW50RGVzYywgZGVzY0kgPSBjdXJEZXNjLmNoaWxkcmVuLmxlbmd0aDtcbiAgICBsZXQgZkkgPSBmcmFnLmNoaWxkQ291bnQsIG1hdGNoZWQgPSBuZXcgTWFwLCBtYXRjaGVzID0gW107XG4gICAgb3V0ZXI6IHdoaWxlIChmSSA+IDApIHtcbiAgICAgICAgbGV0IGRlc2M7XG4gICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgIGlmIChkZXNjSSkge1xuICAgICAgICAgICAgICAgIGxldCBuZXh0ID0gY3VyRGVzYy5jaGlsZHJlbltkZXNjSSAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChuZXh0IGluc3RhbmNlb2YgTWFya1ZpZXdEZXNjKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1ckRlc2MgPSBuZXh0O1xuICAgICAgICAgICAgICAgICAgICBkZXNjSSA9IG5leHQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzYyA9IG5leHQ7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NJLS07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGN1ckRlc2MgPT0gcGFyZW50RGVzYykge1xuICAgICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRklYTUVcbiAgICAgICAgICAgICAgICBkZXNjSSA9IGN1ckRlc2MucGFyZW50LmNoaWxkcmVuLmluZGV4T2YoY3VyRGVzYyk7XG4gICAgICAgICAgICAgICAgY3VyRGVzYyA9IGN1ckRlc2MucGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBub2RlID0gZGVzYy5ub2RlO1xuICAgICAgICBpZiAoIW5vZGUpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKG5vZGUgIT0gZnJhZy5jaGlsZChmSSAtIDEpKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIC0tZkk7XG4gICAgICAgIG1hdGNoZWQuc2V0KGRlc2MsIGZJKTtcbiAgICAgICAgbWF0Y2hlcy5wdXNoKGRlc2MpO1xuICAgIH1cbiAgICByZXR1cm4geyBpbmRleDogZkksIG1hdGNoZWQsIG1hdGNoZXM6IG1hdGNoZXMucmV2ZXJzZSgpIH07XG59XG5mdW5jdGlvbiBjb21wYXJlU2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGEudHlwZS5zaWRlIC0gYi50eXBlLnNpZGU7XG59XG4vLyBUaGlzIGZ1bmN0aW9uIGFic3RyYWN0cyBpdGVyYXRpbmcgb3ZlciB0aGUgbm9kZXMgYW5kIGRlY29yYXRpb25zIGluXG4vLyBhIGZyYWdtZW50LiBDYWxscyBgb25Ob2RlYCBmb3IgZWFjaCBub2RlLCB3aXRoIGl0cyBsb2NhbCBhbmQgY2hpbGRcbi8vIGRlY29yYXRpb25zLiBTcGxpdHMgdGV4dCBub2RlcyB3aGVuIHRoZXJlIGlzIGEgZGVjb3JhdGlvbiBzdGFydGluZ1xuLy8gb3IgZW5kaW5nIGluc2lkZSBvZiB0aGVtLiBDYWxscyBgb25XaWRnZXRgIGZvciBlYWNoIHdpZGdldC5cbmZ1bmN0aW9uIGl0ZXJEZWNvKHBhcmVudCwgZGVjbywgb25XaWRnZXQsIG9uTm9kZSkge1xuICAgIGxldCBsb2NhbHMgPSBkZWNvLmxvY2FscyhwYXJlbnQpLCBvZmZzZXQgPSAwO1xuICAgIC8vIFNpbXBsZSwgY2hlYXAgdmFyaWFudCBmb3Igd2hlbiB0aGVyZSBhcmUgbm8gbG9jYWwgZGVjb3JhdGlvbnNcbiAgICBpZiAobG9jYWxzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50LmNoaWxkQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgbGV0IGNoaWxkID0gcGFyZW50LmNoaWxkKGkpO1xuICAgICAgICAgICAgb25Ob2RlKGNoaWxkLCBsb2NhbHMsIGRlY28uZm9yQ2hpbGQob2Zmc2V0LCBjaGlsZCksIGkpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IGNoaWxkLm5vZGVTaXplO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGRlY29JbmRleCA9IDAsIGFjdGl2ZSA9IFtdLCByZXN0Tm9kZSA9IG51bGw7XG4gICAgZm9yIChsZXQgcGFyZW50SW5kZXggPSAwOzspIHtcbiAgICAgICAgaWYgKGRlY29JbmRleCA8IGxvY2Fscy5sZW5ndGggJiYgbG9jYWxzW2RlY29JbmRleF0udG8gPT0gb2Zmc2V0KSB7XG4gICAgICAgICAgICBsZXQgd2lkZ2V0ID0gbG9jYWxzW2RlY29JbmRleCsrXSwgd2lkZ2V0cztcbiAgICAgICAgICAgIHdoaWxlIChkZWNvSW5kZXggPCBsb2NhbHMubGVuZ3RoICYmIGxvY2Fsc1tkZWNvSW5kZXhdLnRvID09IG9mZnNldClcbiAgICAgICAgICAgICAgICAod2lkZ2V0cyB8fCAod2lkZ2V0cyA9IFt3aWRnZXRdKSkucHVzaChsb2NhbHNbZGVjb0luZGV4KytdKTtcbiAgICAgICAgICAgIGlmICh3aWRnZXRzKSB7XG4gICAgICAgICAgICAgICAgd2lkZ2V0cy5zb3J0KGNvbXBhcmVTaWRlKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdpZGdldHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIG9uV2lkZ2V0KHdpZGdldHNbaV0sIHBhcmVudEluZGV4LCAhIXJlc3ROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG9uV2lkZ2V0KHdpZGdldCwgcGFyZW50SW5kZXgsICEhcmVzdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBjaGlsZCwgaW5kZXg7XG4gICAgICAgIGlmIChyZXN0Tm9kZSkge1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNoaWxkID0gcmVzdE5vZGU7XG4gICAgICAgICAgICByZXN0Tm9kZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGFyZW50SW5kZXggPCBwYXJlbnQuY2hpbGRDb3VudCkge1xuICAgICAgICAgICAgaW5kZXggPSBwYXJlbnRJbmRleDtcbiAgICAgICAgICAgIGNoaWxkID0gcGFyZW50LmNoaWxkKHBhcmVudEluZGV4KyspO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3RpdmUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBpZiAoYWN0aXZlW2ldLnRvIDw9IG9mZnNldClcbiAgICAgICAgICAgICAgICBhY3RpdmUuc3BsaWNlKGktLSwgMSk7XG4gICAgICAgIHdoaWxlIChkZWNvSW5kZXggPCBsb2NhbHMubGVuZ3RoICYmIGxvY2Fsc1tkZWNvSW5kZXhdLmZyb20gPD0gb2Zmc2V0ICYmIGxvY2Fsc1tkZWNvSW5kZXhdLnRvID4gb2Zmc2V0KVxuICAgICAgICAgICAgYWN0aXZlLnB1c2gobG9jYWxzW2RlY29JbmRleCsrXSk7XG4gICAgICAgIGxldCBlbmQgPSBvZmZzZXQgKyBjaGlsZC5ub2RlU2l6ZTtcbiAgICAgICAgaWYgKGNoaWxkLmlzVGV4dCkge1xuICAgICAgICAgICAgbGV0IGN1dEF0ID0gZW5kO1xuICAgICAgICAgICAgaWYgKGRlY29JbmRleCA8IGxvY2Fscy5sZW5ndGggJiYgbG9jYWxzW2RlY29JbmRleF0uZnJvbSA8IGN1dEF0KVxuICAgICAgICAgICAgICAgIGN1dEF0ID0gbG9jYWxzW2RlY29JbmRleF0uZnJvbTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aXZlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVbaV0udG8gPCBjdXRBdClcbiAgICAgICAgICAgICAgICAgICAgY3V0QXQgPSBhY3RpdmVbaV0udG87XG4gICAgICAgICAgICBpZiAoY3V0QXQgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICByZXN0Tm9kZSA9IGNoaWxkLmN1dChjdXRBdCAtIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC5jdXQoMCwgY3V0QXQgLSBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIGVuZCA9IGN1dEF0O1xuICAgICAgICAgICAgICAgIGluZGV4ID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG91dGVyRGVjbyA9IGNoaWxkLmlzSW5saW5lICYmICFjaGlsZC5pc0xlYWYgPyBhY3RpdmUuZmlsdGVyKGQgPT4gIWQuaW5saW5lKSA6IGFjdGl2ZS5zbGljZSgpO1xuICAgICAgICBvbk5vZGUoY2hpbGQsIG91dGVyRGVjbywgZGVjby5mb3JDaGlsZChvZmZzZXQsIGNoaWxkKSwgaW5kZXgpO1xuICAgICAgICBvZmZzZXQgPSBlbmQ7XG4gICAgfVxufVxuLy8gTGlzdCBtYXJrZXJzIGluIE1vYmlsZSBTYWZhcmkgd2lsbCBteXN0ZXJpb3VzbHkgZGlzYXBwZWFyXG4vLyBzb21ldGltZXMuIFRoaXMgd29ya3MgYXJvdW5kIHRoYXQuXG5mdW5jdGlvbiBpb3NIYWNrcyhkb20pIHtcbiAgICBpZiAoZG9tLm5vZGVOYW1lID09IFwiVUxcIiB8fCBkb20ubm9kZU5hbWUgPT0gXCJPTFwiKSB7XG4gICAgICAgIGxldCBvbGRDU1MgPSBkb20uc3R5bGUuY3NzVGV4dDtcbiAgICAgICAgZG9tLnN0eWxlLmNzc1RleHQgPSBvbGRDU1MgKyBcIjsgbGlzdC1zdHlsZTogc3F1YXJlICFpbXBvcnRhbnRcIjtcbiAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9tKS5saXN0U3R5bGU7XG4gICAgICAgIGRvbS5zdHlsZS5jc3NUZXh0ID0gb2xkQ1NTO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG5lYXJieVRleHROb2RlKG5vZGUsIG9mZnNldCkge1xuICAgIGZvciAoOzspIHtcbiAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMylcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAxICYmIG9mZnNldCA+IDApIHtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gb2Zmc2V0ICYmIG5vZGUuY2hpbGROb2Rlc1tvZmZzZXRdLm5vZGVUeXBlID09IDMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlc1tvZmZzZXRdO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGROb2Rlc1tvZmZzZXQgLSAxXTtcbiAgICAgICAgICAgIG9mZnNldCA9IG5vZGVTaXplKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSAmJiBvZmZzZXQgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5jaGlsZE5vZGVzW29mZnNldF07XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBGaW5kIGEgcGllY2Ugb2YgdGV4dCBpbiBhbiBpbmxpbmUgZnJhZ21lbnQsIG92ZXJsYXBwaW5nIGZyb20tdG9cbmZ1bmN0aW9uIGZpbmRUZXh0SW5GcmFnbWVudChmcmFnLCB0ZXh0LCBmcm9tLCB0bykge1xuICAgIGZvciAobGV0IGkgPSAwLCBwb3MgPSAwOyBpIDwgZnJhZy5jaGlsZENvdW50ICYmIHBvcyA8PSB0bzspIHtcbiAgICAgICAgbGV0IGNoaWxkID0gZnJhZy5jaGlsZChpKyspLCBjaGlsZFN0YXJ0ID0gcG9zO1xuICAgICAgICBwb3MgKz0gY2hpbGQubm9kZVNpemU7XG4gICAgICAgIGlmICghY2hpbGQuaXNUZXh0KVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGxldCBzdHIgPSBjaGlsZC50ZXh0O1xuICAgICAgICB3aGlsZSAoaSA8IGZyYWcuY2hpbGRDb3VudCkge1xuICAgICAgICAgICAgbGV0IG5leHQgPSBmcmFnLmNoaWxkKGkrKyk7XG4gICAgICAgICAgICBwb3MgKz0gbmV4dC5ub2RlU2l6ZTtcbiAgICAgICAgICAgIGlmICghbmV4dC5pc1RleHQpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBzdHIgKz0gbmV4dC50ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3MgPj0gZnJvbSkge1xuICAgICAgICAgICAgbGV0IGZvdW5kID0gY2hpbGRTdGFydCA8IHRvID8gc3RyLmxhc3RJbmRleE9mKHRleHQsIHRvIC0gY2hpbGRTdGFydCAtIDEpIDogLTE7XG4gICAgICAgICAgICBpZiAoZm91bmQgPj0gMCAmJiBmb3VuZCArIHRleHQubGVuZ3RoICsgY2hpbGRTdGFydCA+PSBmcm9tKVxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZFN0YXJ0ICsgZm91bmQ7XG4gICAgICAgICAgICBpZiAoZnJvbSA9PSB0byAmJiBzdHIubGVuZ3RoID49ICh0byArIHRleHQubGVuZ3RoKSAtIGNoaWxkU3RhcnQgJiZcbiAgICAgICAgICAgICAgICBzdHIuc2xpY2UodG8gLSBjaGlsZFN0YXJ0LCB0byAtIGNoaWxkU3RhcnQgKyB0ZXh0Lmxlbmd0aCkgPT0gdGV4dClcbiAgICAgICAgICAgICAgICByZXR1cm4gdG87XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xufVxuLy8gUmVwbGFjZSByYW5nZSBmcm9tLXRvIGluIGFuIGFycmF5IG9mIHZpZXcgZGVzY3Mgd2l0aCByZXBsYWNlbWVudFxuLy8gKG1heSBiZSBudWxsIHRvIGp1c3QgZGVsZXRlKS4gVGhpcyBnb2VzIHZlcnkgbXVjaCBhZ2FpbnN0IHRoZSBncmFpblxuLy8gb2YgdGhlIHJlc3Qgb2YgdGhpcyBjb2RlLCB3aGljaCB0ZW5kcyB0byBjcmVhdGUgbm9kZXMgd2l0aCB0aGVcbi8vIHJpZ2h0IHNoYXBlIGluIG9uZSBnbywgcmF0aGVyIHRoYW4gbWVzc2luZyB3aXRoIHRoZW0gYWZ0ZXJcbi8vIGNyZWF0aW9uLCBidXQgaXMgbmVjZXNzYXJ5IGluIHRoZSBjb21wb3NpdGlvbiBoYWNrLlxuZnVuY3Rpb24gcmVwbGFjZU5vZGVzKG5vZGVzLCBmcm9tLCB0bywgdmlldywgcmVwbGFjZW1lbnQpIHtcbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIG9mZiA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgY2hpbGQgPSBub2Rlc1tpXSwgc3RhcnQgPSBvZmYsIGVuZCA9IG9mZiArPSBjaGlsZC5zaXplO1xuICAgICAgICBpZiAoc3RhcnQgPj0gdG8gfHwgZW5kIDw9IGZyb20pIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdGFydCA8IGZyb20pXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpbGQuc2xpY2UoMCwgZnJvbSAtIHN0YXJ0LCB2aWV3KSk7XG4gICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChyZXBsYWNlbWVudCk7XG4gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZW5kID4gdG8pXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpbGQuc2xpY2UodG8gLSBzdGFydCwgY2hpbGQuc2l6ZSwgdmlldykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbkZyb21ET00odmlldywgb3JpZ2luID0gbnVsbCkge1xuICAgIGxldCBkb21TZWwgPSB2aWV3LmRvbVNlbGVjdGlvblJhbmdlKCksIGRvYyA9IHZpZXcuc3RhdGUuZG9jO1xuICAgIGlmICghZG9tU2VsLmZvY3VzTm9kZSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgbGV0IG5lYXJlc3REZXNjID0gdmlldy5kb2NWaWV3Lm5lYXJlc3REZXNjKGRvbVNlbC5mb2N1c05vZGUpLCBpbldpZGdldCA9IG5lYXJlc3REZXNjICYmIG5lYXJlc3REZXNjLnNpemUgPT0gMDtcbiAgICBsZXQgaGVhZCA9IHZpZXcuZG9jVmlldy5wb3NGcm9tRE9NKGRvbVNlbC5mb2N1c05vZGUsIGRvbVNlbC5mb2N1c09mZnNldCwgMSk7XG4gICAgaWYgKGhlYWQgPCAwKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBsZXQgJGhlYWQgPSBkb2MucmVzb2x2ZShoZWFkKSwgJGFuY2hvciwgc2VsZWN0aW9uO1xuICAgIGlmIChzZWxlY3Rpb25Db2xsYXBzZWQoZG9tU2VsKSkge1xuICAgICAgICAkYW5jaG9yID0gJGhlYWQ7XG4gICAgICAgIHdoaWxlIChuZWFyZXN0RGVzYyAmJiAhbmVhcmVzdERlc2Mubm9kZSlcbiAgICAgICAgICAgIG5lYXJlc3REZXNjID0gbmVhcmVzdERlc2MucGFyZW50O1xuICAgICAgICBsZXQgbmVhcmVzdERlc2NOb2RlID0gbmVhcmVzdERlc2Mubm9kZTtcbiAgICAgICAgaWYgKG5lYXJlc3REZXNjICYmIG5lYXJlc3REZXNjTm9kZS5pc0F0b20gJiYgTm9kZVNlbGVjdGlvbi5pc1NlbGVjdGFibGUobmVhcmVzdERlc2NOb2RlKSAmJiBuZWFyZXN0RGVzYy5wYXJlbnRcbiAgICAgICAgICAgICYmICEobmVhcmVzdERlc2NOb2RlLmlzSW5saW5lICYmIGlzT25FZGdlKGRvbVNlbC5mb2N1c05vZGUsIGRvbVNlbC5mb2N1c09mZnNldCwgbmVhcmVzdERlc2MuZG9tKSkpIHtcbiAgICAgICAgICAgIGxldCBwb3MgPSBuZWFyZXN0RGVzYy5wb3NCZWZvcmU7XG4gICAgICAgICAgICBzZWxlY3Rpb24gPSBuZXcgTm9kZVNlbGVjdGlvbihoZWFkID09IHBvcyA/ICRoZWFkIDogZG9jLnJlc29sdmUocG9zKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBhbmNob3IgPSB2aWV3LmRvY1ZpZXcucG9zRnJvbURPTShkb21TZWwuYW5jaG9yTm9kZSwgZG9tU2VsLmFuY2hvck9mZnNldCwgMSk7XG4gICAgICAgIGlmIChhbmNob3IgPCAwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICRhbmNob3IgPSBkb2MucmVzb2x2ZShhbmNob3IpO1xuICAgIH1cbiAgICBpZiAoIXNlbGVjdGlvbikge1xuICAgICAgICBsZXQgYmlhcyA9IG9yaWdpbiA9PSBcInBvaW50ZXJcIiB8fCAodmlldy5zdGF0ZS5zZWxlY3Rpb24uaGVhZCA8ICRoZWFkLnBvcyAmJiAhaW5XaWRnZXQpID8gMSA6IC0xO1xuICAgICAgICBzZWxlY3Rpb24gPSBzZWxlY3Rpb25CZXR3ZWVuKHZpZXcsICRhbmNob3IsICRoZWFkLCBiaWFzKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcbn1cbmZ1bmN0aW9uIGVkaXRvck93bnNTZWxlY3Rpb24odmlldykge1xuICAgIHJldHVybiB2aWV3LmVkaXRhYmxlID8gdmlldy5oYXNGb2N1cygpIDpcbiAgICAgICAgaGFzU2VsZWN0aW9uKHZpZXcpICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5jb250YWlucyh2aWV3LmRvbSk7XG59XG5mdW5jdGlvbiBzZWxlY3Rpb25Ub0RPTSh2aWV3LCBmb3JjZSA9IGZhbHNlKSB7XG4gICAgbGV0IHNlbCA9IHZpZXcuc3RhdGUuc2VsZWN0aW9uO1xuICAgIHN5bmNOb2RlU2VsZWN0aW9uKHZpZXcsIHNlbCk7XG4gICAgaWYgKCFlZGl0b3JPd25zU2VsZWN0aW9uKHZpZXcpKVxuICAgICAgICByZXR1cm47XG4gICAgLy8gVGhlIGRlbGF5ZWQgZHJhZyBzZWxlY3Rpb24gY2F1c2VzIGlzc3VlcyB3aXRoIENlbGwgU2VsZWN0aW9uc1xuICAgIC8vIGluIFNhZmFyaS4gQW5kIHRoZSBkcmFnIHNlbGVjdGlvbiBkZWxheSBpcyB0byB3b3JrYXJvbmQgaXNzdWVzXG4gICAgLy8gd2hpY2ggb25seSBwcmVzZW50IGluIENocm9tZS5cbiAgICBpZiAoIWZvcmNlICYmIHZpZXcuaW5wdXQubW91c2VEb3duICYmIHZpZXcuaW5wdXQubW91c2VEb3duLmFsbG93RGVmYXVsdCAmJiBjaHJvbWUpIHtcbiAgICAgICAgbGV0IGRvbVNlbCA9IHZpZXcuZG9tU2VsZWN0aW9uUmFuZ2UoKSwgY3VyU2VsID0gdmlldy5kb21PYnNlcnZlci5jdXJyZW50U2VsZWN0aW9uO1xuICAgICAgICBpZiAoZG9tU2VsLmFuY2hvck5vZGUgJiYgY3VyU2VsLmFuY2hvck5vZGUgJiZcbiAgICAgICAgICAgIGlzRXF1aXZhbGVudFBvc2l0aW9uKGRvbVNlbC5hbmNob3JOb2RlLCBkb21TZWwuYW5jaG9yT2Zmc2V0LCBjdXJTZWwuYW5jaG9yTm9kZSwgY3VyU2VsLmFuY2hvck9mZnNldCkpIHtcbiAgICAgICAgICAgIHZpZXcuaW5wdXQubW91c2VEb3duLmRlbGF5ZWRTZWxlY3Rpb25TeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIHZpZXcuZG9tT2JzZXJ2ZXIuc2V0Q3VyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlldy5kb21PYnNlcnZlci5kaXNjb25uZWN0U2VsZWN0aW9uKCk7XG4gICAgaWYgKHZpZXcuY3Vyc29yV3JhcHBlcikge1xuICAgICAgICBzZWxlY3RDdXJzb3JXcmFwcGVyKHZpZXcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGV0IHsgYW5jaG9yLCBoZWFkIH0gPSBzZWwsIHJlc2V0RWRpdGFibGVGcm9tLCByZXNldEVkaXRhYmxlVG87XG4gICAgICAgIGlmIChicm9rZW5TZWxlY3RCZXR3ZWVuVW5lZGl0YWJsZSAmJiAhKHNlbCBpbnN0YW5jZW9mIFRleHRTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICBpZiAoIXNlbC4kZnJvbS5wYXJlbnQuaW5saW5lQ29udGVudClcbiAgICAgICAgICAgICAgICByZXNldEVkaXRhYmxlRnJvbSA9IHRlbXBvcmFyaWx5RWRpdGFibGVOZWFyKHZpZXcsIHNlbC5mcm9tKTtcbiAgICAgICAgICAgIGlmICghc2VsLmVtcHR5ICYmICFzZWwuJGZyb20ucGFyZW50LmlubGluZUNvbnRlbnQpXG4gICAgICAgICAgICAgICAgcmVzZXRFZGl0YWJsZVRvID0gdGVtcG9yYXJpbHlFZGl0YWJsZU5lYXIodmlldywgc2VsLnRvKTtcbiAgICAgICAgfVxuICAgICAgICB2aWV3LmRvY1ZpZXcuc2V0U2VsZWN0aW9uKGFuY2hvciwgaGVhZCwgdmlldy5yb290LCBmb3JjZSk7XG4gICAgICAgIGlmIChicm9rZW5TZWxlY3RCZXR3ZWVuVW5lZGl0YWJsZSkge1xuICAgICAgICAgICAgaWYgKHJlc2V0RWRpdGFibGVGcm9tKVxuICAgICAgICAgICAgICAgIHJlc2V0RWRpdGFibGUocmVzZXRFZGl0YWJsZUZyb20pO1xuICAgICAgICAgICAgaWYgKHJlc2V0RWRpdGFibGVUbylcbiAgICAgICAgICAgICAgICByZXNldEVkaXRhYmxlKHJlc2V0RWRpdGFibGVUbyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbC52aXNpYmxlKSB7XG4gICAgICAgICAgICB2aWV3LmRvbS5jbGFzc0xpc3QucmVtb3ZlKFwiUHJvc2VNaXJyb3ItaGlkZXNlbGVjdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZpZXcuZG9tLmNsYXNzTGlzdC5hZGQoXCJQcm9zZU1pcnJvci1oaWRlc2VsZWN0aW9uXCIpO1xuICAgICAgICAgICAgaWYgKFwib25zZWxlY3Rpb25jaGFuZ2VcIiBpbiBkb2N1bWVudClcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzc09uU2VsZWN0aW9uQ2hhbmdlKHZpZXcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpZXcuZG9tT2JzZXJ2ZXIuc2V0Q3VyU2VsZWN0aW9uKCk7XG4gICAgdmlldy5kb21PYnNlcnZlci5jb25uZWN0U2VsZWN0aW9uKCk7XG59XG4vLyBLbHVkZ2UgdG8gd29yayBhcm91bmQgV2Via2l0IG5vdCBhbGxvd2luZyBhIHNlbGVjdGlvbiB0byBzdGFydC9lbmRcbi8vIGJldHdlZW4gbm9uLWVkaXRhYmxlIGJsb2NrIG5vZGVzLiBXZSBicmllZmx5IG1ha2Ugc29tZXRoaW5nXG4vLyBlZGl0YWJsZSwgc2V0IHRoZSBzZWxlY3Rpb24sIHRoZW4gc2V0IGl0IHVuZWRpdGFibGUgYWdhaW4uXG5jb25zdCBicm9rZW5TZWxlY3RCZXR3ZWVuVW5lZGl0YWJsZSA9IHNhZmFyaSB8fCBjaHJvbWUgJiYgY2hyb21lX3ZlcnNpb24gPCA2MztcbmZ1bmN0aW9uIHRlbXBvcmFyaWx5RWRpdGFibGVOZWFyKHZpZXcsIHBvcykge1xuICAgIGxldCB7IG5vZGUsIG9mZnNldCB9ID0gdmlldy5kb2NWaWV3LmRvbUZyb21Qb3MocG9zLCAwKTtcbiAgICBsZXQgYWZ0ZXIgPSBvZmZzZXQgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoID8gbm9kZS5jaGlsZE5vZGVzW29mZnNldF0gOiBudWxsO1xuICAgIGxldCBiZWZvcmUgPSBvZmZzZXQgPyBub2RlLmNoaWxkTm9kZXNbb2Zmc2V0IC0gMV0gOiBudWxsO1xuICAgIGlmIChzYWZhcmkgJiYgYWZ0ZXIgJiYgYWZ0ZXIuY29udGVudEVkaXRhYmxlID09IFwiZmFsc2VcIilcbiAgICAgICAgcmV0dXJuIHNldEVkaXRhYmxlKGFmdGVyKTtcbiAgICBpZiAoKCFhZnRlciB8fCBhZnRlci5jb250ZW50RWRpdGFibGUgPT0gXCJmYWxzZVwiKSAmJlxuICAgICAgICAoIWJlZm9yZSB8fCBiZWZvcmUuY29udGVudEVkaXRhYmxlID09IFwiZmFsc2VcIikpIHtcbiAgICAgICAgaWYgKGFmdGVyKVxuICAgICAgICAgICAgcmV0dXJuIHNldEVkaXRhYmxlKGFmdGVyKTtcbiAgICAgICAgZWxzZSBpZiAoYmVmb3JlKVxuICAgICAgICAgICAgcmV0dXJuIHNldEVkaXRhYmxlKGJlZm9yZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gc2V0RWRpdGFibGUoZWxlbWVudCkge1xuICAgIGVsZW1lbnQuY29udGVudEVkaXRhYmxlID0gXCJ0cnVlXCI7XG4gICAgaWYgKHNhZmFyaSAmJiBlbGVtZW50LmRyYWdnYWJsZSkge1xuICAgICAgICBlbGVtZW50LmRyYWdnYWJsZSA9IGZhbHNlO1xuICAgICAgICBlbGVtZW50Lndhc0RyYWdnYWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50O1xufVxuZnVuY3Rpb24gcmVzZXRFZGl0YWJsZShlbGVtZW50KSB7XG4gICAgZWxlbWVudC5jb250ZW50RWRpdGFibGUgPSBcImZhbHNlXCI7XG4gICAgaWYgKGVsZW1lbnQud2FzRHJhZ2dhYmxlKSB7XG4gICAgICAgIGVsZW1lbnQuZHJhZ2dhYmxlID0gdHJ1ZTtcbiAgICAgICAgZWxlbWVudC53YXNEcmFnZ2FibGUgPSBudWxsO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzT25TZWxlY3Rpb25DaGFuZ2Uodmlldykge1xuICAgIGxldCBkb2MgPSB2aWV3LmRvbS5vd25lckRvY3VtZW50O1xuICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uY2hhbmdlXCIsIHZpZXcuaW5wdXQuaGlkZVNlbGVjdGlvbkd1YXJkKTtcbiAgICBsZXQgZG9tU2VsID0gdmlldy5kb21TZWxlY3Rpb25SYW5nZSgpO1xuICAgIGxldCBub2RlID0gZG9tU2VsLmFuY2hvck5vZGUsIG9mZnNldCA9IGRvbVNlbC5hbmNob3JPZmZzZXQ7XG4gICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIiwgdmlldy5pbnB1dC5oaWRlU2VsZWN0aW9uR3VhcmQgPSAoKSA9PiB7XG4gICAgICAgIGlmIChkb21TZWwuYW5jaG9yTm9kZSAhPSBub2RlIHx8IGRvbVNlbC5hbmNob3JPZmZzZXQgIT0gb2Zmc2V0KSB7XG4gICAgICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLCB2aWV3LmlucHV0LmhpZGVTZWxlY3Rpb25HdWFyZCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVkaXRvck93bnNTZWxlY3Rpb24odmlldykgfHwgdmlldy5zdGF0ZS5zZWxlY3Rpb24udmlzaWJsZSlcbiAgICAgICAgICAgICAgICAgICAgdmlldy5kb20uY2xhc3NMaXN0LnJlbW92ZShcIlByb3NlTWlycm9yLWhpZGVzZWxlY3Rpb25cIik7XG4gICAgICAgICAgICB9LCAyMCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHNlbGVjdEN1cnNvcldyYXBwZXIodmlldykge1xuICAgIGxldCBkb21TZWwgPSB2aWV3LmRvbVNlbGVjdGlvbigpLCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgbGV0IG5vZGUgPSB2aWV3LmN1cnNvcldyYXBwZXIuZG9tLCBpbWcgPSBub2RlLm5vZGVOYW1lID09IFwiSU1HXCI7XG4gICAgaWYgKGltZylcbiAgICAgICAgcmFuZ2Uuc2V0RW5kKG5vZGUucGFyZW50Tm9kZSwgZG9tSW5kZXgobm9kZSkgKyAxKTtcbiAgICBlbHNlXG4gICAgICAgIHJhbmdlLnNldEVuZChub2RlLCAwKTtcbiAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7XG4gICAgZG9tU2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIGRvbVNlbC5hZGRSYW5nZShyYW5nZSk7XG4gICAgLy8gS2x1ZGdlIHRvIGtpbGwgJ2NvbnRyb2wgc2VsZWN0aW9uJyBpbiBJRTExIHdoZW4gc2VsZWN0aW5nIGFuXG4gICAgLy8gaW52aXNpYmxlIGN1cnNvciB3cmFwcGVyLCBzaW5jZSB0aGF0IHdvdWxkIHJlc3VsdCBpbiB0aG9zZSB3ZWlyZFxuICAgIC8vIHJlc2l6ZSBoYW5kbGVzIGFuZCBhIHNlbGVjdGlvbiB0aGF0IGNvbnNpZGVycyB0aGUgYWJzb2x1dGVseVxuICAgIC8vIHBvc2l0aW9uZWQgd3JhcHBlciwgcmF0aGVyIHRoYW4gdGhlIHJvb3QgZWRpdGFibGUgbm9kZSwgdGhlXG4gICAgLy8gZm9jdXNlZCBlbGVtZW50LlxuICAgIGlmICghaW1nICYmICF2aWV3LnN0YXRlLnNlbGVjdGlvbi52aXNpYmxlICYmIGllICYmIGllX3ZlcnNpb24gPD0gMTEpIHtcbiAgICAgICAgbm9kZS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIG5vZGUuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBzeW5jTm9kZVNlbGVjdGlvbih2aWV3LCBzZWwpIHtcbiAgICBpZiAoc2VsIGluc3RhbmNlb2YgTm9kZVNlbGVjdGlvbikge1xuICAgICAgICBsZXQgZGVzYyA9IHZpZXcuZG9jVmlldy5kZXNjQXQoc2VsLmZyb20pO1xuICAgICAgICBpZiAoZGVzYyAhPSB2aWV3Lmxhc3RTZWxlY3RlZFZpZXdEZXNjKSB7XG4gICAgICAgICAgICBjbGVhck5vZGVTZWxlY3Rpb24odmlldyk7XG4gICAgICAgICAgICBpZiAoZGVzYylcbiAgICAgICAgICAgICAgICBkZXNjLnNlbGVjdE5vZGUoKTtcbiAgICAgICAgICAgIHZpZXcubGFzdFNlbGVjdGVkVmlld0Rlc2MgPSBkZXNjO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjbGVhck5vZGVTZWxlY3Rpb24odmlldyk7XG4gICAgfVxufVxuLy8gQ2xlYXIgYWxsIERPTSBzdGF0ZWZ1bG5lc3Mgb2YgdGhlIGxhc3Qgbm9kZSBzZWxlY3Rpb24uXG5mdW5jdGlvbiBjbGVhck5vZGVTZWxlY3Rpb24odmlldykge1xuICAgIGlmICh2aWV3Lmxhc3RTZWxlY3RlZFZpZXdEZXNjKSB7XG4gICAgICAgIGlmICh2aWV3Lmxhc3RTZWxlY3RlZFZpZXdEZXNjLnBhcmVudClcbiAgICAgICAgICAgIHZpZXcubGFzdFNlbGVjdGVkVmlld0Rlc2MuZGVzZWxlY3ROb2RlKCk7XG4gICAgICAgIHZpZXcubGFzdFNlbGVjdGVkVmlld0Rlc2MgPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuZnVuY3Rpb24gc2VsZWN0aW9uQmV0d2Vlbih2aWV3LCAkYW5jaG9yLCAkaGVhZCwgYmlhcykge1xuICAgIHJldHVybiB2aWV3LnNvbWVQcm9wKFwiY3JlYXRlU2VsZWN0aW9uQmV0d2VlblwiLCBmID0+IGYodmlldywgJGFuY2hvciwgJGhlYWQpKVxuICAgICAgICB8fCBUZXh0U2VsZWN0aW9uLmJldHdlZW4oJGFuY2hvciwgJGhlYWQsIGJpYXMpO1xufVxuZnVuY3Rpb24gaGFzRm9jdXNBbmRTZWxlY3Rpb24odmlldykge1xuICAgIGlmICh2aWV3LmVkaXRhYmxlICYmICF2aWV3Lmhhc0ZvY3VzKCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gaGFzU2VsZWN0aW9uKHZpZXcpO1xufVxuZnVuY3Rpb24gaGFzU2VsZWN0aW9uKHZpZXcpIHtcbiAgICBsZXQgc2VsID0gdmlldy5kb21TZWxlY3Rpb25SYW5nZSgpO1xuICAgIGlmICghc2VsLmFuY2hvck5vZGUpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICAvLyBGaXJlZm94IHdpbGwgcmFpc2UgJ3Blcm1pc3Npb24gZGVuaWVkJyBlcnJvcnMgd2hlbiBhY2Nlc3NpbmdcbiAgICAgICAgLy8gcHJvcGVydGllcyBvZiBgc2VsLmFuY2hvck5vZGVgIHdoZW4gaXQncyBpbiBhIGdlbmVyYXRlZCBDU1NcbiAgICAgICAgLy8gZWxlbWVudC5cbiAgICAgICAgcmV0dXJuIHZpZXcuZG9tLmNvbnRhaW5zKHNlbC5hbmNob3JOb2RlLm5vZGVUeXBlID09IDMgPyBzZWwuYW5jaG9yTm9kZS5wYXJlbnROb2RlIDogc2VsLmFuY2hvck5vZGUpICYmXG4gICAgICAgICAgICAodmlldy5lZGl0YWJsZSB8fCB2aWV3LmRvbS5jb250YWlucyhzZWwuZm9jdXNOb2RlLm5vZGVUeXBlID09IDMgPyBzZWwuZm9jdXNOb2RlLnBhcmVudE5vZGUgOiBzZWwuZm9jdXNOb2RlKSk7XG4gICAgfVxuICAgIGNhdGNoIChfKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBhbmNob3JJblJpZ2h0UGxhY2Uodmlldykge1xuICAgIGxldCBhbmNob3JET00gPSB2aWV3LmRvY1ZpZXcuZG9tRnJvbVBvcyh2aWV3LnN0YXRlLnNlbGVjdGlvbi5hbmNob3IsIDApO1xuICAgIGxldCBkb21TZWwgPSB2aWV3LmRvbVNlbGVjdGlvblJhbmdlKCk7XG4gICAgcmV0dXJuIGlzRXF1aXZhbGVudFBvc2l0aW9uKGFuY2hvckRPTS5ub2RlLCBhbmNob3JET00ub2Zmc2V0LCBkb21TZWwuYW5jaG9yTm9kZSwgZG9tU2VsLmFuY2hvck9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIG1vdmVTZWxlY3Rpb25CbG9jayhzdGF0ZSwgZGlyKSB7XG4gICAgbGV0IHsgJGFuY2hvciwgJGhlYWQgfSA9IHN0YXRlLnNlbGVjdGlvbjtcbiAgICBsZXQgJHNpZGUgPSBkaXIgPiAwID8gJGFuY2hvci5tYXgoJGhlYWQpIDogJGFuY2hvci5taW4oJGhlYWQpO1xuICAgIGxldCAkc3RhcnQgPSAhJHNpZGUucGFyZW50LmlubGluZUNvbnRlbnQgPyAkc2lkZSA6ICRzaWRlLmRlcHRoID8gc3RhdGUuZG9jLnJlc29sdmUoZGlyID4gMCA/ICRzaWRlLmFmdGVyKCkgOiAkc2lkZS5iZWZvcmUoKSkgOiBudWxsO1xuICAgIHJldHVybiAkc3RhcnQgJiYgU2VsZWN0aW9uLmZpbmRGcm9tKCRzdGFydCwgZGlyKTtcbn1cbmZ1bmN0aW9uIGFwcGx5KHZpZXcsIHNlbCkge1xuICAgIHZpZXcuZGlzcGF0Y2godmlldy5zdGF0ZS50ci5zZXRTZWxlY3Rpb24oc2VsKS5zY3JvbGxJbnRvVmlldygpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHNlbGVjdEhvcml6b250YWxseSh2aWV3LCBkaXIsIG1vZHMpIHtcbiAgICBsZXQgc2VsID0gdmlldy5zdGF0ZS5zZWxlY3Rpb247XG4gICAgaWYgKHNlbCBpbnN0YW5jZW9mIFRleHRTZWxlY3Rpb24pIHtcbiAgICAgICAgaWYgKCFzZWwuZW1wdHkgfHwgbW9kcy5pbmRleE9mKFwic1wiKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmlldy5lbmRPZlRleHRibG9jayhkaXIgPiAwID8gXCJyaWdodFwiIDogXCJsZWZ0XCIpKSB7XG4gICAgICAgICAgICBsZXQgbmV4dCA9IG1vdmVTZWxlY3Rpb25CbG9jayh2aWV3LnN0YXRlLCBkaXIpO1xuICAgICAgICAgICAgaWYgKG5leHQgJiYgKG5leHQgaW5zdGFuY2VvZiBOb2RlU2VsZWN0aW9uKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHkodmlldywgbmV4dCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShtYWMgJiYgbW9kcy5pbmRleE9mKFwibVwiKSA+IC0xKSkge1xuICAgICAgICAgICAgbGV0ICRoZWFkID0gc2VsLiRoZWFkLCBub2RlID0gJGhlYWQudGV4dE9mZnNldCA/IG51bGwgOiBkaXIgPCAwID8gJGhlYWQubm9kZUJlZm9yZSA6ICRoZWFkLm5vZGVBZnRlciwgZGVzYztcbiAgICAgICAgICAgIGlmICghbm9kZSB8fCBub2RlLmlzVGV4dClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBsZXQgbm9kZVBvcyA9IGRpciA8IDAgPyAkaGVhZC5wb3MgLSBub2RlLm5vZGVTaXplIDogJGhlYWQucG9zO1xuICAgICAgICAgICAgaWYgKCEobm9kZS5pc0F0b20gfHwgKGRlc2MgPSB2aWV3LmRvY1ZpZXcuZGVzY0F0KG5vZGVQb3MpKSAmJiAhZGVzYy5jb250ZW50RE9NKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoTm9kZVNlbGVjdGlvbi5pc1NlbGVjdGFibGUobm9kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHkodmlldywgbmV3IE5vZGVTZWxlY3Rpb24oZGlyIDwgMCA/IHZpZXcuc3RhdGUuZG9jLnJlc29sdmUoJGhlYWQucG9zIC0gbm9kZS5ub2RlU2l6ZSkgOiAkaGVhZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAod2Via2l0KSB7XG4gICAgICAgICAgICAgICAgLy8gQ2hyb21lIGFuZCBTYWZhcmkgd2lsbCBpbnRyb2R1Y2UgZXh0cmEgcG9pbnRsZXNzIGN1cnNvclxuICAgICAgICAgICAgICAgIC8vIHBvc2l0aW9ucyBhcm91bmQgaW5saW5lIHVuZWRpdGFibGUgbm9kZXMsIHNvIHdlIGhhdmUgdG9cbiAgICAgICAgICAgICAgICAvLyB0YWtlIG92ZXIgYW5kIG1vdmUgdGhlIGN1cnNvciBwYXN0IHRoZW0gKCM5MzcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwcGx5KHZpZXcsIG5ldyBUZXh0U2VsZWN0aW9uKHZpZXcuc3RhdGUuZG9jLnJlc29sdmUoZGlyIDwgMCA/IG5vZGVQb3MgOiBub2RlUG9zICsgbm9kZS5ub2RlU2l6ZSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChzZWwgaW5zdGFuY2VvZiBOb2RlU2VsZWN0aW9uICYmIHNlbC5ub2RlLmlzSW5saW5lKSB7XG4gICAgICAgIHJldHVybiBhcHBseSh2aWV3LCBuZXcgVGV4dFNlbGVjdGlvbihkaXIgPiAwID8gc2VsLiR0byA6IHNlbC4kZnJvbSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGV0IG5leHQgPSBtb3ZlU2VsZWN0aW9uQmxvY2sodmlldy5zdGF0ZSwgZGlyKTtcbiAgICAgICAgaWYgKG5leHQpXG4gICAgICAgICAgICByZXR1cm4gYXBwbHkodmlldywgbmV4dCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBub2RlTGVuKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PSAzID8gbm9kZS5ub2RlVmFsdWUubGVuZ3RoIDogbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDtcbn1cbmZ1bmN0aW9uIGlzSWdub3JhYmxlKGRvbSkge1xuICAgIGxldCBkZXNjID0gZG9tLnBtVmlld0Rlc2M7XG4gICAgcmV0dXJuIGRlc2MgJiYgZGVzYy5zaXplID09IDAgJiYgKGRvbS5uZXh0U2libGluZyB8fCBkb20ubm9kZU5hbWUgIT0gXCJCUlwiKTtcbn1cbi8vIE1ha2Ugc3VyZSB0aGUgY3Vyc29yIGlzbid0IGRpcmVjdGx5IGFmdGVyIG9uZSBvciBtb3JlIGlnbm9yZWRcbi8vIG5vZGVzLCB3aGljaCB3aWxsIGNvbmZ1c2UgdGhlIGJyb3dzZXIncyBjdXJzb3IgbW90aW9uIGxvZ2ljLlxuZnVuY3Rpb24gc2tpcElnbm9yZWROb2Rlc0xlZnQodmlldykge1xuICAgIGxldCBzZWwgPSB2aWV3LmRvbVNlbGVjdGlvblJhbmdlKCk7XG4gICAgbGV0IG5vZGUgPSBzZWwuZm9jdXNOb2RlLCBvZmZzZXQgPSBzZWwuZm9jdXNPZmZzZXQ7XG4gICAgaWYgKCFub2RlKVxuICAgICAgICByZXR1cm47XG4gICAgbGV0IG1vdmVOb2RlLCBtb3ZlT2Zmc2V0LCBmb3JjZSA9IGZhbHNlO1xuICAgIC8vIEdlY2tvIHdpbGwgZG8gb2RkIHRoaW5ncyB3aGVuIHRoZSBzZWxlY3Rpb24gaXMgZGlyZWN0bHkgaW4gZnJvbnRcbiAgICAvLyBvZiBhIG5vbi1lZGl0YWJsZSBub2RlLCBzbyBpbiB0aGF0IGNhc2UsIG1vdmUgaXQgaW50byB0aGUgbmV4dFxuICAgIC8vIG5vZGUgaWYgcG9zc2libGUuIElzc3VlIHByb3NlbWlycm9yL3Byb3NlbWlycm9yIzgzMi5cbiAgICBpZiAoZ2Vja28gJiYgbm9kZS5ub2RlVHlwZSA9PSAxICYmIG9mZnNldCA8IG5vZGVMZW4obm9kZSkgJiYgaXNJZ25vcmFibGUobm9kZS5jaGlsZE5vZGVzW29mZnNldF0pKVxuICAgICAgICBmb3JjZSA9IHRydWU7XG4gICAgZm9yICg7Oykge1xuICAgICAgICBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT0gMSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGJlZm9yZSA9IG5vZGUuY2hpbGROb2Rlc1tvZmZzZXQgLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAoaXNJZ25vcmFibGUoYmVmb3JlKSkge1xuICAgICAgICAgICAgICAgICAgICBtb3ZlTm9kZSA9IG5vZGU7XG4gICAgICAgICAgICAgICAgICAgIG1vdmVPZmZzZXQgPSAtLW9mZnNldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYmVmb3JlLm5vZGVUeXBlID09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGJlZm9yZTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbm9kZS5ub2RlVmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQmxvY2tOb2RlKG5vZGUpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBwcmV2ID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgICB3aGlsZSAocHJldiAmJiBpc0lnbm9yYWJsZShwcmV2KSkge1xuICAgICAgICAgICAgICAgIG1vdmVOb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgIG1vdmVPZmZzZXQgPSBkb21JbmRleChwcmV2KTtcbiAgICAgICAgICAgICAgICBwcmV2ID0gcHJldi5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXByZXYpIHtcbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgIGlmIChub2RlID09IHZpZXcuZG9tKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZSA9IHByZXY7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gbm9kZUxlbihub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZm9yY2UpXG4gICAgICAgIHNldFNlbEZvY3VzKHZpZXcsIG5vZGUsIG9mZnNldCk7XG4gICAgZWxzZSBpZiAobW92ZU5vZGUpXG4gICAgICAgIHNldFNlbEZvY3VzKHZpZXcsIG1vdmVOb2RlLCBtb3ZlT2Zmc2V0KTtcbn1cbi8vIE1ha2Ugc3VyZSB0aGUgY3Vyc29yIGlzbid0IGRpcmVjdGx5IGJlZm9yZSBvbmUgb3IgbW9yZSBpZ25vcmVkXG4vLyBub2Rlcy5cbmZ1bmN0aW9uIHNraXBJZ25vcmVkTm9kZXNSaWdodCh2aWV3KSB7XG4gICAgbGV0IHNlbCA9IHZpZXcuZG9tU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICBsZXQgbm9kZSA9IHNlbC5mb2N1c05vZGUsIG9mZnNldCA9IHNlbC5mb2N1c09mZnNldDtcbiAgICBpZiAoIW5vZGUpXG4gICAgICAgIHJldHVybjtcbiAgICBsZXQgbGVuID0gbm9kZUxlbihub2RlKTtcbiAgICBsZXQgbW92ZU5vZGUsIG1vdmVPZmZzZXQ7XG4gICAgZm9yICg7Oykge1xuICAgICAgICBpZiAob2Zmc2V0IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSAhPSAxKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgbGV0IGFmdGVyID0gbm9kZS5jaGlsZE5vZGVzW29mZnNldF07XG4gICAgICAgICAgICBpZiAoaXNJZ25vcmFibGUoYWZ0ZXIpKSB7XG4gICAgICAgICAgICAgICAgbW92ZU5vZGUgPSBub2RlO1xuICAgICAgICAgICAgICAgIG1vdmVPZmZzZXQgPSArK29mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0Jsb2NrTm9kZShub2RlKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgbmV4dCA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB3aGlsZSAobmV4dCAmJiBpc0lnbm9yYWJsZShuZXh0KSkge1xuICAgICAgICAgICAgICAgIG1vdmVOb2RlID0gbmV4dC5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgIG1vdmVPZmZzZXQgPSBkb21JbmRleChuZXh0KSArIDE7XG4gICAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW5leHQpIHtcbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgIGlmIChub2RlID09IHZpZXcuZG9tKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBsZW4gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZSA9IG5leHQ7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICBsZW4gPSBub2RlTGVuKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChtb3ZlTm9kZSlcbiAgICAgICAgc2V0U2VsRm9jdXModmlldywgbW92ZU5vZGUsIG1vdmVPZmZzZXQpO1xufVxuZnVuY3Rpb24gaXNCbG9ja05vZGUoZG9tKSB7XG4gICAgbGV0IGRlc2MgPSBkb20ucG1WaWV3RGVzYztcbiAgICByZXR1cm4gZGVzYyAmJiBkZXNjLm5vZGUgJiYgZGVzYy5ub2RlLmlzQmxvY2s7XG59XG5mdW5jdGlvbiBzZXRTZWxGb2N1cyh2aWV3LCBub2RlLCBvZmZzZXQpIHtcbiAgICBsZXQgc2VsID0gdmlldy5kb21TZWxlY3Rpb24oKTtcbiAgICBpZiAoc2VsZWN0aW9uQ29sbGFwc2VkKHNlbCkpIHtcbiAgICAgICAgbGV0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIG9mZnNldCk7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIG9mZnNldCk7XG4gICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2VsLmV4dGVuZCkge1xuICAgICAgICBzZWwuZXh0ZW5kKG5vZGUsIG9mZnNldCk7XG4gICAgfVxuICAgIHZpZXcuZG9tT2JzZXJ2ZXIuc2V0Q3VyU2VsZWN0aW9uKCk7XG4gICAgbGV0IHsgc3RhdGUgfSA9IHZpZXc7XG4gICAgLy8gSWYgbm8gc3RhdGUgdXBkYXRlIGVuZHMgdXAgaGFwcGVuaW5nLCByZXNldCB0aGUgc2VsZWN0aW9uLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodmlldy5zdGF0ZSA9PSBzdGF0ZSlcbiAgICAgICAgICAgIHNlbGVjdGlvblRvRE9NKHZpZXcpO1xuICAgIH0sIDUwKTtcbn1cbi8vIENoZWNrIHdoZXRoZXIgdmVydGljYWwgc2VsZWN0aW9uIG1vdGlvbiB3b3VsZCBpbnZvbHZlIG5vZGVcbi8vIHNlbGVjdGlvbnMuIElmIHNvLCBhcHBseSBpdCAoaWYgbm90LCB0aGUgcmVzdWx0IGlzIGxlZnQgdG8gdGhlXG4vLyBicm93c2VyKVxuZnVuY3Rpb24gc2VsZWN0VmVydGljYWxseSh2aWV3LCBkaXIsIG1vZHMpIHtcbiAgICBsZXQgc2VsID0gdmlldy5zdGF0ZS5zZWxlY3Rpb247XG4gICAgaWYgKHNlbCBpbnN0YW5jZW9mIFRleHRTZWxlY3Rpb24gJiYgIXNlbC5lbXB0eSB8fCBtb2RzLmluZGV4T2YoXCJzXCIpID4gLTEpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAobWFjICYmIG1vZHMuaW5kZXhPZihcIm1cIikgPiAtMSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGxldCB7ICRmcm9tLCAkdG8gfSA9IHNlbDtcbiAgICBpZiAoISRmcm9tLnBhcmVudC5pbmxpbmVDb250ZW50IHx8IHZpZXcuZW5kT2ZUZXh0YmxvY2soZGlyIDwgMCA/IFwidXBcIiA6IFwiZG93blwiKSkge1xuICAgICAgICBsZXQgbmV4dCA9IG1vdmVTZWxlY3Rpb25CbG9jayh2aWV3LnN0YXRlLCBkaXIpO1xuICAgICAgICBpZiAobmV4dCAmJiAobmV4dCBpbnN0YW5jZW9mIE5vZGVTZWxlY3Rpb24pKVxuICAgICAgICAgICAgcmV0dXJuIGFwcGx5KHZpZXcsIG5leHQpO1xuICAgIH1cbiAgICBpZiAoISRmcm9tLnBhcmVudC5pbmxpbmVDb250ZW50KSB7XG4gICAgICAgIGxldCBzaWRlID0gZGlyIDwgMCA/ICRmcm9tIDogJHRvO1xuICAgICAgICBsZXQgYmV5b25kID0gc2VsIGluc3RhbmNlb2YgQWxsU2VsZWN0aW9uID8gU2VsZWN0aW9uLm5lYXIoc2lkZSwgZGlyKSA6IFNlbGVjdGlvbi5maW5kRnJvbShzaWRlLCBkaXIpO1xuICAgICAgICByZXR1cm4gYmV5b25kID8gYXBwbHkodmlldywgYmV5b25kKSA6IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBzdG9wTmF0aXZlSG9yaXpvbnRhbERlbGV0ZSh2aWV3LCBkaXIpIHtcbiAgICBpZiAoISh2aWV3LnN0YXRlLnNlbGVjdGlvbiBpbnN0YW5jZW9mIFRleHRTZWxlY3Rpb24pKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBsZXQgeyAkaGVhZCwgJGFuY2hvciwgZW1wdHkgfSA9IHZpZXcuc3RhdGUuc2VsZWN0aW9uO1xuICAgIGlmICghJGhlYWQuc2FtZVBhcmVudCgkYW5jaG9yKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKCFlbXB0eSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh2aWV3LmVuZE9mVGV4dGJsb2NrKGRpciA+IDAgPyBcImZvcndhcmRcIiA6IFwiYmFja3dhcmRcIikpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGxldCBuZXh0Tm9kZSA9ICEkaGVhZC50ZXh0T2Zmc2V0ICYmIChkaXIgPCAwID8gJGhlYWQubm9kZUJlZm9yZSA6ICRoZWFkLm5vZGVBZnRlcik7XG4gICAgaWYgKG5leHROb2RlICYmICFuZXh0Tm9kZS5pc1RleHQpIHtcbiAgICAgICAgbGV0IHRyID0gdmlldy5zdGF0ZS50cjtcbiAgICAgICAgaWYgKGRpciA8IDApXG4gICAgICAgICAgICB0ci5kZWxldGUoJGhlYWQucG9zIC0gbmV4dE5vZGUubm9kZVNpemUsICRoZWFkLnBvcyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRyLmRlbGV0ZSgkaGVhZC5wb3MsICRoZWFkLnBvcyArIG5leHROb2RlLm5vZGVTaXplKTtcbiAgICAgICAgdmlldy5kaXNwYXRjaCh0cik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBzd2l0Y2hFZGl0YWJsZSh2aWV3LCBub2RlLCBzdGF0ZSkge1xuICAgIHZpZXcuZG9tT2JzZXJ2ZXIuc3RvcCgpO1xuICAgIG5vZGUuY29udGVudEVkaXRhYmxlID0gc3RhdGU7XG4gICAgdmlldy5kb21PYnNlcnZlci5zdGFydCgpO1xufVxuLy8gSXNzdWUgIzg2NyAvICMxMDkwIC8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9OTAzODIxXG4vLyBJbiB3aGljaCBTYWZhcmkgKGFuZCBhdCBzb21lIHBvaW50IGluIHRoZSBwYXN0LCBDaHJvbWUpIGRvZXMgcmVhbGx5XG4vLyB3cm9uZyB0aGluZ3Mgd2hlbiB0aGUgZG93biBhcnJvdyBpcyBwcmVzc2VkIHdoZW4gdGhlIGN1cnNvciBpc1xuLy8gZGlyZWN0bHkgYXQgdGhlIHN0YXJ0IG9mIGEgdGV4dGJsb2NrIGFuZCBoYXMgYW4gdW5lZGl0YWJsZSBub2RlXG4vLyBhZnRlciBpdFxuZnVuY3Rpb24gc2FmYXJpRG93bkFycm93QnVnKHZpZXcpIHtcbiAgICBpZiAoIXNhZmFyaSB8fCB2aWV3LnN0YXRlLnNlbGVjdGlvbi4kaGVhZC5wYXJlbnRPZmZzZXQgPiAwKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgbGV0IHsgZm9jdXNOb2RlLCBmb2N1c09mZnNldCB9ID0gdmlldy5kb21TZWxlY3Rpb25SYW5nZSgpO1xuICAgIGlmIChmb2N1c05vZGUgJiYgZm9jdXNOb2RlLm5vZGVUeXBlID09IDEgJiYgZm9jdXNPZmZzZXQgPT0gMCAmJlxuICAgICAgICBmb2N1c05vZGUuZmlyc3RDaGlsZCAmJiBmb2N1c05vZGUuZmlyc3RDaGlsZC5jb250ZW50RWRpdGFibGUgPT0gXCJmYWxzZVwiKSB7XG4gICAgICAgIGxldCBjaGlsZCA9IGZvY3VzTm9kZS5maXJzdENoaWxkO1xuICAgICAgICBzd2l0Y2hFZGl0YWJsZSh2aWV3LCBjaGlsZCwgXCJ0cnVlXCIpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHN3aXRjaEVkaXRhYmxlKHZpZXcsIGNoaWxkLCBcImZhbHNlXCIpLCAyMCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8vIEEgYmFja2Ryb3Aga2V5IG1hcHBpbmcgdXNlZCB0byBtYWtlIHN1cmUgd2UgYWx3YXlzIHN1cHByZXNzIGtleXNcbi8vIHRoYXQgaGF2ZSBhIGRhbmdlcm91cyBkZWZhdWx0IGVmZmVjdCwgZXZlbiBpZiB0aGUgY29tbWFuZHMgdGhleSBhcmVcbi8vIGJvdW5kIHRvIHJldHVybiBmYWxzZSwgYW5kIHRvIG1ha2Ugc3VyZSB0aGF0IGN1cnNvci1tb3Rpb24ga2V5c1xuLy8gZmluZCBhIGN1cnNvciAoYXMgb3Bwb3NlZCB0byBhIG5vZGUgc2VsZWN0aW9uKSB3aGVuIHByZXNzZWQuIEZvclxuLy8gY3Vyc29yLW1vdGlvbiBrZXlzLCB0aGUgY29kZSBpbiB0aGUgaGFuZGxlcnMgYWxzbyB0YWtlcyBjYXJlIG9mXG4vLyBibG9jayBzZWxlY3Rpb25zLlxuZnVuY3Rpb24gZ2V0TW9kcyhldmVudCkge1xuICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgIGlmIChldmVudC5jdHJsS2V5KVxuICAgICAgICByZXN1bHQgKz0gXCJjXCI7XG4gICAgaWYgKGV2ZW50Lm1ldGFLZXkpXG4gICAgICAgIHJlc3VsdCArPSBcIm1cIjtcbiAgICBpZiAoZXZlbnQuYWx0S2V5KVxuICAgICAgICByZXN1bHQgKz0gXCJhXCI7XG4gICAgaWYgKGV2ZW50LnNoaWZ0S2V5KVxuICAgICAgICByZXN1bHQgKz0gXCJzXCI7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGNhcHR1cmVLZXlEb3duKHZpZXcsIGV2ZW50KSB7XG4gICAgbGV0IGNvZGUgPSBldmVudC5rZXlDb2RlLCBtb2RzID0gZ2V0TW9kcyhldmVudCk7XG4gICAgaWYgKGNvZGUgPT0gOCB8fCAobWFjICYmIGNvZGUgPT0gNzIgJiYgbW9kcyA9PSBcImNcIikpIHsgLy8gQmFja3NwYWNlLCBDdHJsLWggb24gTWFjXG4gICAgICAgIHJldHVybiBzdG9wTmF0aXZlSG9yaXpvbnRhbERlbGV0ZSh2aWV3LCAtMSkgfHwgc2tpcElnbm9yZWROb2Rlc0xlZnQodmlldyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNvZGUgPT0gNDYgfHwgKG1hYyAmJiBjb2RlID09IDY4ICYmIG1vZHMgPT0gXCJjXCIpKSB7IC8vIERlbGV0ZSwgQ3RybC1kIG9uIE1hY1xuICAgICAgICByZXR1cm4gc3RvcE5hdGl2ZUhvcml6b250YWxEZWxldGUodmlldywgMSkgfHwgc2tpcElnbm9yZWROb2Rlc1JpZ2h0KHZpZXcpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb2RlID09IDEzIHx8IGNvZGUgPT0gMjcpIHsgLy8gRW50ZXIsIEVzY1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29kZSA9PSAzNyB8fCAobWFjICYmIGNvZGUgPT0gNjYgJiYgbW9kcyA9PSBcImNcIikpIHsgLy8gTGVmdCBhcnJvdywgQ3RybC1iIG9uIE1hY1xuICAgICAgICByZXR1cm4gc2VsZWN0SG9yaXpvbnRhbGx5KHZpZXcsIC0xLCBtb2RzKSB8fCBza2lwSWdub3JlZE5vZGVzTGVmdCh2aWV3KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29kZSA9PSAzOSB8fCAobWFjICYmIGNvZGUgPT0gNzAgJiYgbW9kcyA9PSBcImNcIikpIHsgLy8gUmlnaHQgYXJyb3csIEN0cmwtZiBvbiBNYWNcbiAgICAgICAgcmV0dXJuIHNlbGVjdEhvcml6b250YWxseSh2aWV3LCAxLCBtb2RzKSB8fCBza2lwSWdub3JlZE5vZGVzUmlnaHQodmlldyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNvZGUgPT0gMzggfHwgKG1hYyAmJiBjb2RlID09IDgwICYmIG1vZHMgPT0gXCJjXCIpKSB7IC8vIFVwIGFycm93LCBDdHJsLXAgb24gTWFjXG4gICAgICAgIHJldHVybiBzZWxlY3RWZXJ0aWNhbGx5KHZpZXcsIC0xLCBtb2RzKSB8fCBza2lwSWdub3JlZE5vZGVzTGVmdCh2aWV3KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29kZSA9PSA0MCB8fCAobWFjICYmIGNvZGUgPT0gNzggJiYgbW9kcyA9PSBcImNcIikpIHsgLy8gRG93biBhcnJvdywgQ3RybC1uIG9uIE1hY1xuICAgICAgICByZXR1cm4gc2FmYXJpRG93bkFycm93QnVnKHZpZXcpIHx8IHNlbGVjdFZlcnRpY2FsbHkodmlldywgMSwgbW9kcykgfHwgc2tpcElnbm9yZWROb2Rlc1JpZ2h0KHZpZXcpO1xuICAgIH1cbiAgICBlbHNlIGlmIChtb2RzID09IChtYWMgPyBcIm1cIiA6IFwiY1wiKSAmJlxuICAgICAgICAoY29kZSA9PSA2NiB8fCBjb2RlID09IDczIHx8IGNvZGUgPT0gODkgfHwgY29kZSA9PSA5MCkpIHsgLy8gTW9kLVtiaXl6XVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVGb3JDbGlwYm9hcmQodmlldywgc2xpY2UpIHtcbiAgICB2aWV3LnNvbWVQcm9wKFwidHJhbnNmb3JtQ29waWVkXCIsIGYgPT4geyBzbGljZSA9IGYoc2xpY2UsIHZpZXcpOyB9KTtcbiAgICBsZXQgY29udGV4dCA9IFtdLCB7IGNvbnRlbnQsIG9wZW5TdGFydCwgb3BlbkVuZCB9ID0gc2xpY2U7XG4gICAgd2hpbGUgKG9wZW5TdGFydCA+IDEgJiYgb3BlbkVuZCA+IDEgJiYgY29udGVudC5jaGlsZENvdW50ID09IDEgJiYgY29udGVudC5maXJzdENoaWxkLmNoaWxkQ291bnQgPT0gMSkge1xuICAgICAgICBvcGVuU3RhcnQtLTtcbiAgICAgICAgb3BlbkVuZC0tO1xuICAgICAgICBsZXQgbm9kZSA9IGNvbnRlbnQuZmlyc3RDaGlsZDtcbiAgICAgICAgY29udGV4dC5wdXNoKG5vZGUudHlwZS5uYW1lLCBub2RlLmF0dHJzICE9IG5vZGUudHlwZS5kZWZhdWx0QXR0cnMgPyBub2RlLmF0dHJzIDogbnVsbCk7XG4gICAgICAgIGNvbnRlbnQgPSBub2RlLmNvbnRlbnQ7XG4gICAgfVxuICAgIGxldCBzZXJpYWxpemVyID0gdmlldy5zb21lUHJvcChcImNsaXBib2FyZFNlcmlhbGl6ZXJcIikgfHwgRE9NU2VyaWFsaXplci5mcm9tU2NoZW1hKHZpZXcuc3RhdGUuc2NoZW1hKTtcbiAgICBsZXQgZG9jID0gZGV0YWNoZWREb2MoKSwgd3JhcCA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHdyYXAuYXBwZW5kQ2hpbGQoc2VyaWFsaXplci5zZXJpYWxpemVGcmFnbWVudChjb250ZW50LCB7IGRvY3VtZW50OiBkb2MgfSkpO1xuICAgIGxldCBmaXJzdENoaWxkID0gd3JhcC5maXJzdENoaWxkLCBuZWVkc1dyYXAsIHdyYXBwZXJzID0gMDtcbiAgICB3aGlsZSAoZmlyc3RDaGlsZCAmJiBmaXJzdENoaWxkLm5vZGVUeXBlID09IDEgJiYgKG5lZWRzV3JhcCA9IHdyYXBNYXBbZmlyc3RDaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IG5lZWRzV3JhcC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgbGV0IHdyYXBwZXIgPSBkb2MuY3JlYXRlRWxlbWVudChuZWVkc1dyYXBbaV0pO1xuICAgICAgICAgICAgd2hpbGUgKHdyYXAuZmlyc3RDaGlsZClcbiAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHdyYXAuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICB3cmFwLmFwcGVuZENoaWxkKHdyYXBwZXIpO1xuICAgICAgICAgICAgd3JhcHBlcnMrKztcbiAgICAgICAgfVxuICAgICAgICBmaXJzdENoaWxkID0gd3JhcC5maXJzdENoaWxkO1xuICAgIH1cbiAgICBpZiAoZmlyc3RDaGlsZCAmJiBmaXJzdENoaWxkLm5vZGVUeXBlID09IDEpXG4gICAgICAgIGZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKFwiZGF0YS1wbS1zbGljZVwiLCBgJHtvcGVuU3RhcnR9ICR7b3BlbkVuZH0ke3dyYXBwZXJzID8gYCAtJHt3cmFwcGVyc31gIDogXCJcIn0gJHtKU09OLnN0cmluZ2lmeShjb250ZXh0KX1gKTtcbiAgICBsZXQgdGV4dCA9IHZpZXcuc29tZVByb3AoXCJjbGlwYm9hcmRUZXh0U2VyaWFsaXplclwiLCBmID0+IGYoc2xpY2UsIHZpZXcpKSB8fFxuICAgICAgICBzbGljZS5jb250ZW50LnRleHRCZXR3ZWVuKDAsIHNsaWNlLmNvbnRlbnQuc2l6ZSwgXCJcXG5cXG5cIik7XG4gICAgcmV0dXJuIHsgZG9tOiB3cmFwLCB0ZXh0IH07XG59XG4vLyBSZWFkIGEgc2xpY2Ugb2YgY29udGVudCBmcm9tIHRoZSBjbGlwYm9hcmQgKG9yIGRyb3AgZGF0YSkuXG5mdW5jdGlvbiBwYXJzZUZyb21DbGlwYm9hcmQodmlldywgdGV4dCwgaHRtbCwgcGxhaW5UZXh0LCAkY29udGV4dCkge1xuICAgIGxldCBpbkNvZGUgPSAkY29udGV4dC5wYXJlbnQudHlwZS5zcGVjLmNvZGU7XG4gICAgbGV0IGRvbSwgc2xpY2U7XG4gICAgaWYgKCFodG1sICYmICF0ZXh0KVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBsZXQgYXNUZXh0ID0gdGV4dCAmJiAocGxhaW5UZXh0IHx8IGluQ29kZSB8fCAhaHRtbCk7XG4gICAgaWYgKGFzVGV4dCkge1xuICAgICAgICB2aWV3LnNvbWVQcm9wKFwidHJhbnNmb3JtUGFzdGVkVGV4dFwiLCBmID0+IHsgdGV4dCA9IGYodGV4dCwgaW5Db2RlIHx8IHBsYWluVGV4dCwgdmlldyk7IH0pO1xuICAgICAgICBpZiAoaW5Db2RlKVxuICAgICAgICAgICAgcmV0dXJuIHRleHQgPyBuZXcgU2xpY2UoRnJhZ21lbnQuZnJvbSh2aWV3LnN0YXRlLnNjaGVtYS50ZXh0KHRleHQucmVwbGFjZSgvXFxyXFxuPy9nLCBcIlxcblwiKSkpLCAwLCAwKSA6IFNsaWNlLmVtcHR5O1xuICAgICAgICBsZXQgcGFyc2VkID0gdmlldy5zb21lUHJvcChcImNsaXBib2FyZFRleHRQYXJzZXJcIiwgZiA9PiBmKHRleHQsICRjb250ZXh0LCBwbGFpblRleHQsIHZpZXcpKTtcbiAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgc2xpY2UgPSBwYXJzZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgbWFya3MgPSAkY29udGV4dC5tYXJrcygpO1xuICAgICAgICAgICAgbGV0IHsgc2NoZW1hIH0gPSB2aWV3LnN0YXRlLCBzZXJpYWxpemVyID0gRE9NU2VyaWFsaXplci5mcm9tU2NoZW1hKHNjaGVtYSk7XG4gICAgICAgICAgICBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgdGV4dC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pKy8pLmZvckVhY2goYmxvY2sgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBwID0gZG9tLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpKTtcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2spXG4gICAgICAgICAgICAgICAgICAgIHAuYXBwZW5kQ2hpbGQoc2VyaWFsaXplci5zZXJpYWxpemVOb2RlKHNjaGVtYS50ZXh0KGJsb2NrLCBtYXJrcykpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2aWV3LnNvbWVQcm9wKFwidHJhbnNmb3JtUGFzdGVkSFRNTFwiLCBmID0+IHsgaHRtbCA9IGYoaHRtbCwgdmlldyk7IH0pO1xuICAgICAgICBkb20gPSByZWFkSFRNTChodG1sKTtcbiAgICAgICAgaWYgKHdlYmtpdClcbiAgICAgICAgICAgIHJlc3RvcmVSZXBsYWNlZFNwYWNlcyhkb20pO1xuICAgIH1cbiAgICBsZXQgY29udGV4dE5vZGUgPSBkb20gJiYgZG9tLnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1wbS1zbGljZV1cIik7XG4gICAgbGV0IHNsaWNlRGF0YSA9IGNvbnRleHROb2RlICYmIC9eKFxcZCspIChcXGQrKSg/OiAtKFxcZCspKT8gKC4qKS8uZXhlYyhjb250ZXh0Tm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLXBtLXNsaWNlXCIpIHx8IFwiXCIpO1xuICAgIGlmIChzbGljZURhdGEgJiYgc2xpY2VEYXRhWzNdKVxuICAgICAgICBmb3IgKGxldCBpID0gK3NsaWNlRGF0YVszXTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgbGV0IGNoaWxkID0gZG9tLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICB3aGlsZSAoY2hpbGQgJiYgY2hpbGQubm9kZVR5cGUgIT0gMSlcbiAgICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgaWYgKCFjaGlsZClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRvbSA9IGNoaWxkO1xuICAgICAgICB9XG4gICAgaWYgKCFzbGljZSkge1xuICAgICAgICBsZXQgcGFyc2VyID0gdmlldy5zb21lUHJvcChcImNsaXBib2FyZFBhcnNlclwiKSB8fCB2aWV3LnNvbWVQcm9wKFwiZG9tUGFyc2VyXCIpIHx8IERPTVBhcnNlci5mcm9tU2NoZW1hKHZpZXcuc3RhdGUuc2NoZW1hKTtcbiAgICAgICAgc2xpY2UgPSBwYXJzZXIucGFyc2VTbGljZShkb20sIHtcbiAgICAgICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZTogISEoYXNUZXh0IHx8IHNsaWNlRGF0YSksXG4gICAgICAgICAgICBjb250ZXh0OiAkY29udGV4dCxcbiAgICAgICAgICAgIHJ1bGVGcm9tTm9kZShkb20pIHtcbiAgICAgICAgICAgICAgICBpZiAoZG9tLm5vZGVOYW1lID09IFwiQlJcIiAmJiAhZG9tLm5leHRTaWJsaW5nICYmXG4gICAgICAgICAgICAgICAgICAgIGRvbS5wYXJlbnROb2RlICYmICFpbmxpbmVQYXJlbnRzLnRlc3QoZG9tLnBhcmVudE5vZGUubm9kZU5hbWUpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpZ25vcmU6IHRydWUgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChzbGljZURhdGEpIHtcbiAgICAgICAgc2xpY2UgPSBhZGRDb250ZXh0KGNsb3NlU2xpY2Uoc2xpY2UsICtzbGljZURhdGFbMV0sICtzbGljZURhdGFbMl0pLCBzbGljZURhdGFbNF0pO1xuICAgIH1cbiAgICBlbHNlIHsgLy8gSFRNTCB3YXNuJ3QgY3JlYXRlZCBieSBQcm9zZU1pcnJvci4gTWFrZSBzdXJlIHRvcC1sZXZlbCBzaWJsaW5ncyBhcmUgY29oZXJlbnRcbiAgICAgICAgc2xpY2UgPSBTbGljZS5tYXhPcGVuKG5vcm1hbGl6ZVNpYmxpbmdzKHNsaWNlLmNvbnRlbnQsICRjb250ZXh0KSwgdHJ1ZSk7XG4gICAgICAgIGlmIChzbGljZS5vcGVuU3RhcnQgfHwgc2xpY2Uub3BlbkVuZCkge1xuICAgICAgICAgICAgbGV0IG9wZW5TdGFydCA9IDAsIG9wZW5FbmQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgbm9kZSA9IHNsaWNlLmNvbnRlbnQuZmlyc3RDaGlsZDsgb3BlblN0YXJ0IDwgc2xpY2Uub3BlblN0YXJ0ICYmICFub2RlLnR5cGUuc3BlYy5pc29sYXRpbmc7IG9wZW5TdGFydCsrLCBub2RlID0gbm9kZS5maXJzdENoaWxkKSB7IH1cbiAgICAgICAgICAgIGZvciAobGV0IG5vZGUgPSBzbGljZS5jb250ZW50Lmxhc3RDaGlsZDsgb3BlbkVuZCA8IHNsaWNlLm9wZW5FbmQgJiYgIW5vZGUudHlwZS5zcGVjLmlzb2xhdGluZzsgb3BlbkVuZCsrLCBub2RlID0gbm9kZS5sYXN0Q2hpbGQpIHsgfVxuICAgICAgICAgICAgc2xpY2UgPSBjbG9zZVNsaWNlKHNsaWNlLCBvcGVuU3RhcnQsIG9wZW5FbmQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpZXcuc29tZVByb3AoXCJ0cmFuc2Zvcm1QYXN0ZWRcIiwgZiA9PiB7IHNsaWNlID0gZihzbGljZSwgdmlldyk7IH0pO1xuICAgIHJldHVybiBzbGljZTtcbn1cbmNvbnN0IGlubGluZVBhcmVudHMgPSAvXihhfGFiYnJ8YWNyb255bXxifGNpdGV8Y29kZXxkZWx8ZW18aXxpbnN8a2JkfGxhYmVsfG91dHB1dHxxfHJ1Ynl8c3xzYW1wfHNwYW58c3Ryb25nfHN1YnxzdXB8dGltZXx1fHR0fHZhcikkL2k7XG4vLyBUYWtlcyBhIHNsaWNlIHBhcnNlZCB3aXRoIHBhcnNlU2xpY2UsIHdoaWNoIG1lYW5zIHRoZXJlIGhhc24ndCBiZWVuXG4vLyBhbnkgY29udGVudC1leHByZXNzaW9uIGNoZWNraW5nIGRvbmUgb24gdGhlIHRvcCBub2RlcywgdHJpZXMgdG9cbi8vIGZpbmQgYSBwYXJlbnQgbm9kZSBpbiB0aGUgY3VycmVudCBjb250ZXh0IHRoYXQgbWlnaHQgZml0IHRoZSBub2Rlcyxcbi8vIGFuZCBpZiBzdWNjZXNzZnVsLCByZWJ1aWxkcyB0aGUgc2xpY2Ugc28gdGhhdCBpdCBmaXRzIGludG8gdGhhdCBwYXJlbnQuXG4vL1xuLy8gVGhpcyBhZGRyZXNzZXMgdGhlIHByb2JsZW0gdGhhdCBUcmFuc2Zvcm0ucmVwbGFjZSBleHBlY3RzIGFcbi8vIGNvaGVyZW50IHNsaWNlLCBhbmQgd2lsbCBmYWlsIHRvIHBsYWNlIGEgc2V0IG9mIHNpYmxpbmdzIHRoYXQgZG9uJ3Rcbi8vIGZpdCBhbnl3aGVyZSBpbiB0aGUgc2NoZW1hLlxuZnVuY3Rpb24gbm9ybWFsaXplU2libGluZ3MoZnJhZ21lbnQsICRjb250ZXh0KSB7XG4gICAgaWYgKGZyYWdtZW50LmNoaWxkQ291bnQgPCAyKVxuICAgICAgICByZXR1cm4gZnJhZ21lbnQ7XG4gICAgZm9yIChsZXQgZCA9ICRjb250ZXh0LmRlcHRoOyBkID49IDA7IGQtLSkge1xuICAgICAgICBsZXQgcGFyZW50ID0gJGNvbnRleHQubm9kZShkKTtcbiAgICAgICAgbGV0IG1hdGNoID0gcGFyZW50LmNvbnRlbnRNYXRjaEF0KCRjb250ZXh0LmluZGV4KGQpKTtcbiAgICAgICAgbGV0IGxhc3RXcmFwLCByZXN1bHQgPSBbXTtcbiAgICAgICAgZnJhZ21lbnQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzdWx0KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGxldCB3cmFwID0gbWF0Y2guZmluZFdyYXBwaW5nKG5vZGUudHlwZSksIGluTGFzdDtcbiAgICAgICAgICAgIGlmICghd3JhcClcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChpbkxhc3QgPSByZXN1bHQubGVuZ3RoICYmIGxhc3RXcmFwLmxlbmd0aCAmJiBhZGRUb1NpYmxpbmcod3JhcCwgbGFzdFdyYXAsIG5vZGUsIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0sIDApKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSA9IGluTGFzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdID0gY2xvc2VSaWdodChyZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLCBsYXN0V3JhcC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGxldCB3cmFwcGVkID0gd2l0aFdyYXBwZXJzKG5vZGUsIHdyYXApO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHdyYXBwZWQpO1xuICAgICAgICAgICAgICAgIG1hdGNoID0gbWF0Y2gubWF0Y2hUeXBlKHdyYXBwZWQudHlwZSk7XG4gICAgICAgICAgICAgICAgbGFzdFdyYXAgPSB3cmFwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJlc3VsdClcbiAgICAgICAgICAgIHJldHVybiBGcmFnbWVudC5mcm9tKHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudDtcbn1cbmZ1bmN0aW9uIHdpdGhXcmFwcGVycyhub2RlLCB3cmFwLCBmcm9tID0gMCkge1xuICAgIGZvciAobGV0IGkgPSB3cmFwLmxlbmd0aCAtIDE7IGkgPj0gZnJvbTsgaS0tKVxuICAgICAgICBub2RlID0gd3JhcFtpXS5jcmVhdGUobnVsbCwgRnJhZ21lbnQuZnJvbShub2RlKSk7XG4gICAgcmV0dXJuIG5vZGU7XG59XG4vLyBVc2VkIHRvIGdyb3VwIGFkamFjZW50IG5vZGVzIHdyYXBwZWQgaW4gc2ltaWxhciBwYXJlbnRzIGJ5XG4vLyBub3JtYWxpemVTaWJsaW5ncyBpbnRvIHRoZSBzYW1lIHBhcmVudCBub2RlXG5mdW5jdGlvbiBhZGRUb1NpYmxpbmcod3JhcCwgbGFzdFdyYXAsIG5vZGUsIHNpYmxpbmcsIGRlcHRoKSB7XG4gICAgaWYgKGRlcHRoIDwgd3JhcC5sZW5ndGggJiYgZGVwdGggPCBsYXN0V3JhcC5sZW5ndGggJiYgd3JhcFtkZXB0aF0gPT0gbGFzdFdyYXBbZGVwdGhdKSB7XG4gICAgICAgIGxldCBpbm5lciA9IGFkZFRvU2libGluZyh3cmFwLCBsYXN0V3JhcCwgbm9kZSwgc2libGluZy5sYXN0Q2hpbGQsIGRlcHRoICsgMSk7XG4gICAgICAgIGlmIChpbm5lcilcbiAgICAgICAgICAgIHJldHVybiBzaWJsaW5nLmNvcHkoc2libGluZy5jb250ZW50LnJlcGxhY2VDaGlsZChzaWJsaW5nLmNoaWxkQ291bnQgLSAxLCBpbm5lcikpO1xuICAgICAgICBsZXQgbWF0Y2ggPSBzaWJsaW5nLmNvbnRlbnRNYXRjaEF0KHNpYmxpbmcuY2hpbGRDb3VudCk7XG4gICAgICAgIGlmIChtYXRjaC5tYXRjaFR5cGUoZGVwdGggPT0gd3JhcC5sZW5ndGggLSAxID8gbm9kZS50eXBlIDogd3JhcFtkZXB0aCArIDFdKSlcbiAgICAgICAgICAgIHJldHVybiBzaWJsaW5nLmNvcHkoc2libGluZy5jb250ZW50LmFwcGVuZChGcmFnbWVudC5mcm9tKHdpdGhXcmFwcGVycyhub2RlLCB3cmFwLCBkZXB0aCArIDEpKSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNsb3NlUmlnaHQobm9kZSwgZGVwdGgpIHtcbiAgICBpZiAoZGVwdGggPT0gMClcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgbGV0IGZyYWdtZW50ID0gbm9kZS5jb250ZW50LnJlcGxhY2VDaGlsZChub2RlLmNoaWxkQ291bnQgLSAxLCBjbG9zZVJpZ2h0KG5vZGUubGFzdENoaWxkLCBkZXB0aCAtIDEpKTtcbiAgICBsZXQgZmlsbCA9IG5vZGUuY29udGVudE1hdGNoQXQobm9kZS5jaGlsZENvdW50KS5maWxsQmVmb3JlKEZyYWdtZW50LmVtcHR5LCB0cnVlKTtcbiAgICByZXR1cm4gbm9kZS5jb3B5KGZyYWdtZW50LmFwcGVuZChmaWxsKSk7XG59XG5mdW5jdGlvbiBjbG9zZVJhbmdlKGZyYWdtZW50LCBzaWRlLCBmcm9tLCB0bywgZGVwdGgsIG9wZW5FbmQpIHtcbiAgICBsZXQgbm9kZSA9IHNpZGUgPCAwID8gZnJhZ21lbnQuZmlyc3RDaGlsZCA6IGZyYWdtZW50Lmxhc3RDaGlsZCwgaW5uZXIgPSBub2RlLmNvbnRlbnQ7XG4gICAgaWYgKGRlcHRoIDwgdG8gLSAxKVxuICAgICAgICBpbm5lciA9IGNsb3NlUmFuZ2UoaW5uZXIsIHNpZGUsIGZyb20sIHRvLCBkZXB0aCArIDEsIG9wZW5FbmQpO1xuICAgIGlmIChkZXB0aCA+PSBmcm9tKVxuICAgICAgICBpbm5lciA9IHNpZGUgPCAwID8gbm9kZS5jb250ZW50TWF0Y2hBdCgwKS5maWxsQmVmb3JlKGlubmVyLCBmcmFnbWVudC5jaGlsZENvdW50ID4gMSB8fCBvcGVuRW5kIDw9IGRlcHRoKS5hcHBlbmQoaW5uZXIpXG4gICAgICAgICAgICA6IGlubmVyLmFwcGVuZChub2RlLmNvbnRlbnRNYXRjaEF0KG5vZGUuY2hpbGRDb3VudCkuZmlsbEJlZm9yZShGcmFnbWVudC5lbXB0eSwgdHJ1ZSkpO1xuICAgIHJldHVybiBmcmFnbWVudC5yZXBsYWNlQ2hpbGQoc2lkZSA8IDAgPyAwIDogZnJhZ21lbnQuY2hpbGRDb3VudCAtIDEsIG5vZGUuY29weShpbm5lcikpO1xufVxuZnVuY3Rpb24gY2xvc2VTbGljZShzbGljZSwgb3BlblN0YXJ0LCBvcGVuRW5kKSB7XG4gICAgaWYgKG9wZW5TdGFydCA8IHNsaWNlLm9wZW5TdGFydClcbiAgICAgICAgc2xpY2UgPSBuZXcgU2xpY2UoY2xvc2VSYW5nZShzbGljZS5jb250ZW50LCAtMSwgb3BlblN0YXJ0LCBzbGljZS5vcGVuU3RhcnQsIDAsIHNsaWNlLm9wZW5FbmQpLCBvcGVuU3RhcnQsIHNsaWNlLm9wZW5FbmQpO1xuICAgIGlmIChvcGVuRW5kIDwgc2xpY2Uub3BlbkVuZClcbiAgICAgICAgc2xpY2UgPSBuZXcgU2xpY2UoY2xvc2VSYW5nZShzbGljZS5jb250ZW50LCAxLCBvcGVuRW5kLCBzbGljZS5vcGVuRW5kLCAwLCAwKSwgc2xpY2Uub3BlblN0YXJ0LCBvcGVuRW5kKTtcbiAgICByZXR1cm4gc2xpY2U7XG59XG4vLyBUcmljayBmcm9tIGpRdWVyeSAtLSBzb21lIGVsZW1lbnRzIG11c3QgYmUgd3JhcHBlZCBpbiBvdGhlclxuLy8gZWxlbWVudHMgZm9yIGlubmVySFRNTCB0byB3b3JrLiBJLmUuIGlmIHlvdSBkbyBgZGl2LmlubmVySFRNTCA9XG4vLyBcIjx0ZD4uLjwvdGQ+XCJgIHRoZSB0YWJsZSBjZWxscyBhcmUgaWdub3JlZC5cbmNvbnN0IHdyYXBNYXAgPSB7XG4gICAgdGhlYWQ6IFtcInRhYmxlXCJdLFxuICAgIHRib2R5OiBbXCJ0YWJsZVwiXSxcbiAgICB0Zm9vdDogW1widGFibGVcIl0sXG4gICAgY2FwdGlvbjogW1widGFibGVcIl0sXG4gICAgY29sZ3JvdXA6IFtcInRhYmxlXCJdLFxuICAgIGNvbDogW1widGFibGVcIiwgXCJjb2xncm91cFwiXSxcbiAgICB0cjogW1widGFibGVcIiwgXCJ0Ym9keVwiXSxcbiAgICB0ZDogW1widGFibGVcIiwgXCJ0Ym9keVwiLCBcInRyXCJdLFxuICAgIHRoOiBbXCJ0YWJsZVwiLCBcInRib2R5XCIsIFwidHJcIl1cbn07XG5sZXQgX2RldGFjaGVkRG9jID0gbnVsbDtcbmZ1bmN0aW9uIGRldGFjaGVkRG9jKCkge1xuICAgIHJldHVybiBfZGV0YWNoZWREb2MgfHwgKF9kZXRhY2hlZERvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudChcInRpdGxlXCIpKTtcbn1cbmZ1bmN0aW9uIHJlYWRIVE1MKGh0bWwpIHtcbiAgICBsZXQgbWV0YXMgPSAvXihcXHMqPG1ldGEgW14+XSo+KSovLmV4ZWMoaHRtbCk7XG4gICAgaWYgKG1ldGFzKVxuICAgICAgICBodG1sID0gaHRtbC5zbGljZShtZXRhc1swXS5sZW5ndGgpO1xuICAgIGxldCBlbHQgPSBkZXRhY2hlZERvYygpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgbGV0IGZpcnN0VGFnID0gLzwoW2Etel1bXj5cXHNdKykvaS5leGVjKGh0bWwpLCB3cmFwO1xuICAgIGlmICh3cmFwID0gZmlyc3RUYWcgJiYgd3JhcE1hcFtmaXJzdFRhZ1sxXS50b0xvd2VyQ2FzZSgpXSlcbiAgICAgICAgaHRtbCA9IHdyYXAubWFwKG4gPT4gXCI8XCIgKyBuICsgXCI+XCIpLmpvaW4oXCJcIikgKyBodG1sICsgd3JhcC5tYXAobiA9PiBcIjwvXCIgKyBuICsgXCI+XCIpLnJldmVyc2UoKS5qb2luKFwiXCIpO1xuICAgIGVsdC5pbm5lckhUTUwgPSBodG1sO1xuICAgIGlmICh3cmFwKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdyYXAubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBlbHQgPSBlbHQucXVlcnlTZWxlY3Rvcih3cmFwW2ldKSB8fCBlbHQ7XG4gICAgcmV0dXJuIGVsdDtcbn1cbi8vIFdlYmtpdCBicm93c2VycyBkbyBzb21lIGhhcmQtdG8tcHJlZGljdCByZXBsYWNlbWVudCBvZiByZWd1bGFyXG4vLyBzcGFjZXMgd2l0aCBub24tYnJlYWtpbmcgc3BhY2VzIHdoZW4gcHV0dGluZyBjb250ZW50IG9uIHRoZVxuLy8gY2xpcGJvYXJkLiBUaGlzIHRyaWVzIHRvIGNvbnZlcnQgc3VjaCBub24tYnJlYWtpbmcgc3BhY2VzICh3aGljaFxuLy8gd2lsbCBiZSB3cmFwcGVkIGluIGEgcGxhaW4gc3BhbiBvbiBDaHJvbWUsIGEgc3BhbiB3aXRoIGNsYXNzXG4vLyBBcHBsZS1jb252ZXJ0ZWQtc3BhY2Ugb24gU2FmYXJpKSBiYWNrIHRvIHJlZ3VsYXIgc3BhY2VzLlxuZnVuY3Rpb24gcmVzdG9yZVJlcGxhY2VkU3BhY2VzKGRvbSkge1xuICAgIGxldCBub2RlcyA9IGRvbS5xdWVyeVNlbGVjdG9yQWxsKGNocm9tZSA/IFwic3Bhbjpub3QoW2NsYXNzXSk6bm90KFtzdHlsZV0pXCIgOiBcInNwYW4uQXBwbGUtY29udmVydGVkLXNwYWNlXCIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgaWYgKG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSAmJiBub2RlLnRleHRDb250ZW50ID09IFwiXFx1MDBhMFwiICYmIG5vZGUucGFyZW50Tm9kZSlcbiAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZG9tLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCIgXCIpLCBub2RlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRDb250ZXh0KHNsaWNlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFzbGljZS5zaXplKVxuICAgICAgICByZXR1cm4gc2xpY2U7XG4gICAgbGV0IHNjaGVtYSA9IHNsaWNlLmNvbnRlbnQuZmlyc3RDaGlsZC50eXBlLnNjaGVtYSwgYXJyYXk7XG4gICAgdHJ5IHtcbiAgICAgICAgYXJyYXkgPSBKU09OLnBhcnNlKGNvbnRleHQpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gc2xpY2U7XG4gICAgfVxuICAgIGxldCB7IGNvbnRlbnQsIG9wZW5TdGFydCwgb3BlbkVuZCB9ID0gc2xpY2U7XG4gICAgZm9yIChsZXQgaSA9IGFycmF5Lmxlbmd0aCAtIDI7IGkgPj0gMDsgaSAtPSAyKSB7XG4gICAgICAgIGxldCB0eXBlID0gc2NoZW1hLm5vZGVzW2FycmF5W2ldXTtcbiAgICAgICAgaWYgKCF0eXBlIHx8IHR5cGUuaGFzUmVxdWlyZWRBdHRycygpKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNvbnRlbnQgPSBGcmFnbWVudC5mcm9tKHR5cGUuY3JlYXRlKGFycmF5W2kgKyAxXSwgY29udGVudCkpO1xuICAgICAgICBvcGVuU3RhcnQrKztcbiAgICAgICAgb3BlbkVuZCsrO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFNsaWNlKGNvbnRlbnQsIG9wZW5TdGFydCwgb3BlbkVuZCk7XG59XG5cbi8vIEEgY29sbGVjdGlvbiBvZiBET00gZXZlbnRzIHRoYXQgb2NjdXIgd2l0aGluIHRoZSBlZGl0b3IsIGFuZCBjYWxsYmFjayBmdW5jdGlvbnNcbi8vIHRvIGludm9rZSB3aGVuIHRoZSBldmVudCBmaXJlcy5cbmNvbnN0IGhhbmRsZXJzID0ge307XG5jb25zdCBlZGl0SGFuZGxlcnMgPSB7fTtcbmNvbnN0IHBhc3NpdmVIYW5kbGVycyA9IHsgdG91Y2hzdGFydDogdHJ1ZSwgdG91Y2htb3ZlOiB0cnVlIH07XG5jbGFzcyBJbnB1dFN0YXRlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zaGlmdEtleSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1vdXNlRG93biA9IG51bGw7XG4gICAgICAgIHRoaXMubGFzdEtleUNvZGUgPSBudWxsO1xuICAgICAgICB0aGlzLmxhc3RLZXlDb2RlVGltZSA9IDA7XG4gICAgICAgIHRoaXMubGFzdENsaWNrID0geyB0aW1lOiAwLCB4OiAwLCB5OiAwLCB0eXBlOiBcIlwiIH07XG4gICAgICAgIHRoaXMubGFzdFNlbGVjdGlvbk9yaWdpbiA9IG51bGw7XG4gICAgICAgIHRoaXMubGFzdFNlbGVjdGlvblRpbWUgPSAwO1xuICAgICAgICB0aGlzLmxhc3RJT1NFbnRlciA9IDA7XG4gICAgICAgIHRoaXMubGFzdElPU0VudGVyRmFsbGJhY2tUaW1lb3V0ID0gLTE7XG4gICAgICAgIHRoaXMubGFzdEZvY3VzID0gMDtcbiAgICAgICAgdGhpcy5sYXN0VG91Y2ggPSAwO1xuICAgICAgICB0aGlzLmxhc3RBbmRyb2lkRGVsZXRlID0gMDtcbiAgICAgICAgdGhpcy5jb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21wb3NpbmdUaW1lb3V0ID0gLTE7XG4gICAgICAgIHRoaXMuY29tcG9zaXRpb25Ob2RlcyA9IFtdO1xuICAgICAgICB0aGlzLmNvbXBvc2l0aW9uRW5kZWRBdCA9IC0yZTg7XG4gICAgICAgIHRoaXMuZG9tQ2hhbmdlQ291bnQgPSAwO1xuICAgICAgICB0aGlzLmV2ZW50SGFuZGxlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLmhpZGVTZWxlY3Rpb25HdWFyZCA9IG51bGw7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5pdElucHV0KHZpZXcpIHtcbiAgICBmb3IgKGxldCBldmVudCBpbiBoYW5kbGVycykge1xuICAgICAgICBsZXQgaGFuZGxlciA9IGhhbmRsZXJzW2V2ZW50XTtcbiAgICAgICAgdmlldy5kb20uYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgdmlldy5pbnB1dC5ldmVudEhhbmRsZXJzW2V2ZW50XSA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50QmVsb25nc1RvVmlldyh2aWV3LCBldmVudCkgJiYgIXJ1bkN1c3RvbUhhbmRsZXIodmlldywgZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgKHZpZXcuZWRpdGFibGUgfHwgIShldmVudC50eXBlIGluIGVkaXRIYW5kbGVycykpKVxuICAgICAgICAgICAgICAgIGhhbmRsZXIodmlldywgZXZlbnQpO1xuICAgICAgICB9LCBwYXNzaXZlSGFuZGxlcnNbZXZlbnRdID8geyBwYXNzaXZlOiB0cnVlIH0gOiB1bmRlZmluZWQpO1xuICAgIH1cbiAgICAvLyBPbiBTYWZhcmksIGZvciByZWFzb25zIGJleW9uZCBteSB1bmRlcnN0YW5kaW5nLCBhZGRpbmcgYW4gaW5wdXRcbiAgICAvLyBldmVudCBoYW5kbGVyIG1ha2VzIGFuIGlzc3VlIHdoZXJlIHRoZSBjb21wb3NpdGlvbiB2YW5pc2hlcyB3aGVuXG4gICAgLy8geW91IHByZXNzIGVudGVyIGdvIGF3YXkuXG4gICAgaWYgKHNhZmFyaSlcbiAgICAgICAgdmlldy5kb20uYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsICgpID0+IG51bGwpO1xuICAgIGVuc3VyZUxpc3RlbmVycyh2aWV3KTtcbn1cbmZ1bmN0aW9uIHNldFNlbGVjdGlvbk9yaWdpbih2aWV3LCBvcmlnaW4pIHtcbiAgICB2aWV3LmlucHV0Lmxhc3RTZWxlY3Rpb25PcmlnaW4gPSBvcmlnaW47XG4gICAgdmlldy5pbnB1dC5sYXN0U2VsZWN0aW9uVGltZSA9IERhdGUubm93KCk7XG59XG5mdW5jdGlvbiBkZXN0cm95SW5wdXQodmlldykge1xuICAgIHZpZXcuZG9tT2JzZXJ2ZXIuc3RvcCgpO1xuICAgIGZvciAobGV0IHR5cGUgaW4gdmlldy5pbnB1dC5ldmVudEhhbmRsZXJzKVxuICAgICAgICB2aWV3LmRvbS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHZpZXcuaW5wdXQuZXZlbnRIYW5kbGVyc1t0eXBlXSk7XG4gICAgY2xlYXJUaW1lb3V0KHZpZXcuaW5wdXQuY29tcG9zaW5nVGltZW91dCk7XG4gICAgY2xlYXJUaW1lb3V0KHZpZXcuaW5wdXQubGFzdElPU0VudGVyRmFsbGJhY2tUaW1lb3V0KTtcbn1cbmZ1bmN0aW9uIGVuc3VyZUxpc3RlbmVycyh2aWV3KSB7XG4gICAgdmlldy5zb21lUHJvcChcImhhbmRsZURPTUV2ZW50c1wiLCBjdXJyZW50SGFuZGxlcnMgPT4ge1xuICAgICAgICBmb3IgKGxldCB0eXBlIGluIGN1cnJlbnRIYW5kbGVycylcbiAgICAgICAgICAgIGlmICghdmlldy5pbnB1dC5ldmVudEhhbmRsZXJzW3R5cGVdKVxuICAgICAgICAgICAgICAgIHZpZXcuZG9tLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdmlldy5pbnB1dC5ldmVudEhhbmRsZXJzW3R5cGVdID0gZXZlbnQgPT4gcnVuQ3VzdG9tSGFuZGxlcih2aWV3LCBldmVudCkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gcnVuQ3VzdG9tSGFuZGxlcih2aWV3LCBldmVudCkge1xuICAgIHJldHVybiB2aWV3LnNvbWVQcm9wKFwiaGFuZGxlRE9NRXZlbnRzXCIsIGhhbmRsZXJzID0+IHtcbiAgICAgICAgbGV0IGhhbmRsZXIgPSBoYW5kbGVyc1tldmVudC50eXBlXTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZXIgPyBoYW5kbGVyKHZpZXcsIGV2ZW50KSB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkIDogZmFsc2U7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBldmVudEJlbG9uZ3NUb1ZpZXcodmlldywgZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50LmJ1YmJsZXMpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgbm9kZSA9IGV2ZW50LnRhcmdldDsgbm9kZSAhPSB2aWV3LmRvbTsgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSlcbiAgICAgICAgaWYgKCFub2RlIHx8IG5vZGUubm9kZVR5cGUgPT0gMTEgfHxcbiAgICAgICAgICAgIChub2RlLnBtVmlld0Rlc2MgJiYgbm9kZS5wbVZpZXdEZXNjLnN0b3BFdmVudChldmVudCkpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudCh2aWV3LCBldmVudCkge1xuICAgIGlmICghcnVuQ3VzdG9tSGFuZGxlcih2aWV3LCBldmVudCkgJiYgaGFuZGxlcnNbZXZlbnQudHlwZV0gJiZcbiAgICAgICAgKHZpZXcuZWRpdGFibGUgfHwgIShldmVudC50eXBlIGluIGVkaXRIYW5kbGVycykpKVxuICAgICAgICBoYW5kbGVyc1tldmVudC50eXBlXSh2aWV3LCBldmVudCk7XG59XG5lZGl0SGFuZGxlcnMua2V5ZG93biA9ICh2aWV3LCBfZXZlbnQpID0+IHtcbiAgICBsZXQgZXZlbnQgPSBfZXZlbnQ7XG4gICAgdmlldy5pbnB1dC5zaGlmdEtleSA9IGV2ZW50LmtleUNvZGUgPT0gMTYgfHwgZXZlbnQuc2hpZnRLZXk7XG4gICAgaWYgKGluT3JOZWFyQ29tcG9zaXRpb24odmlldywgZXZlbnQpKVxuICAgICAgICByZXR1cm47XG4gICAgdmlldy5pbnB1dC5sYXN0S2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgdmlldy5pbnB1dC5sYXN0S2V5Q29kZVRpbWUgPSBEYXRlLm5vdygpO1xuICAgIC8vIFN1cHByZXNzIGVudGVyIGtleSBldmVudHMgb24gQ2hyb21lIEFuZHJvaWQsIGJlY2F1c2UgdGhvc2UgdGVuZFxuICAgIC8vIHRvIGJlIHBhcnQgb2YgYSBjb25mdXNlZCBzZXF1ZW5jZSBvZiBjb21wb3NpdGlvbiBldmVudHMgZmlyZWQsXG4gICAgLy8gYW5kIGhhbmRsaW5nIHRoZW0gZWFnZXJseSB0ZW5kcyB0byBjb3JydXB0IHRoZSBpbnB1dC5cbiAgICBpZiAoYW5kcm9pZCAmJiBjaHJvbWUgJiYgZXZlbnQua2V5Q29kZSA9PSAxMylcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChldmVudC5rZXlDb2RlICE9IDIyOSlcbiAgICAgICAgdmlldy5kb21PYnNlcnZlci5mb3JjZUZsdXNoKCk7XG4gICAgLy8gT24gaU9TLCBpZiB3ZSBwcmV2ZW50RGVmYXVsdCBlbnRlciBrZXkgcHJlc3NlcywgdGhlIHZpcnR1YWxcbiAgICAvLyBrZXlib2FyZCBnZXRzIGNvbmZ1c2VkLiBTbyB0aGUgaGFjayBoZXJlIGlzIHRvIHNldCBhIGZsYWcgdGhhdFxuICAgIC8vIG1ha2VzIHRoZSBET00gY2hhbmdlIGNvZGUgcmVjb2duaXplIHRoYXQgd2hhdCBqdXN0IGhhcHBlbnMgc2hvdWxkXG4gICAgLy8gYmUgcmVwbGFjZWQgYnkgd2hhdGV2ZXIgdGhlIEVudGVyIGtleSBoYW5kbGVycyBkby5cbiAgICBpZiAoaW9zICYmIGV2ZW50LmtleUNvZGUgPT0gMTMgJiYgIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmFsdEtleSAmJiAhZXZlbnQubWV0YUtleSkge1xuICAgICAgICBsZXQgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdmlldy5pbnB1dC5sYXN0SU9TRW50ZXIgPSBub3c7XG4gICAgICAgIHZpZXcuaW5wdXQubGFzdElPU0VudGVyRmFsbGJhY2tUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodmlldy5pbnB1dC5sYXN0SU9TRW50ZXIgPT0gbm93KSB7XG4gICAgICAgICAgICAgICAgdmlldy5zb21lUHJvcChcImhhbmRsZUtleURvd25cIiwgZiA9PiBmKHZpZXcsIGtleUV2ZW50KDEzLCBcIkVudGVyXCIpKSk7XG4gICAgICAgICAgICAgICAgdmlldy5pbnB1dC5sYXN0SU9TRW50ZXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAyMDApO1xuICAgIH1cbiAgICBlbHNlIGlmICh2aWV3LnNvbWVQcm9wKFwiaGFuZGxlS2V5RG93blwiLCBmID0+IGYodmlldywgZXZlbnQpKSB8fCBjYXB0dXJlS2V5RG93bih2aWV3LCBldmVudCkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNldFNlbGVjdGlvbk9yaWdpbih2aWV3LCBcImtleVwiKTtcbiAgICB9XG59O1xuZWRpdEhhbmRsZXJzLmtleXVwID0gKHZpZXcsIGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT0gMTYpXG4gICAgICAgIHZpZXcuaW5wdXQuc2hpZnRLZXkgPSBmYWxzZTtcbn07XG5lZGl0SGFuZGxlcnMua2V5cHJlc3MgPSAodmlldywgX2V2ZW50KSA9PiB7XG4gICAgbGV0IGV2ZW50ID0gX2V2ZW50O1xuICAgIGlmIChpbk9yTmVhckNvbXBvc2l0aW9uKHZpZXcsIGV2ZW50KSB8fCAhZXZlbnQuY2hhckNvZGUgfHxcbiAgICAgICAgZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuYWx0S2V5IHx8IG1hYyAmJiBldmVudC5tZXRhS2V5KVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKHZpZXcuc29tZVByb3AoXCJoYW5kbGVLZXlQcmVzc1wiLCBmID0+IGYodmlldywgZXZlbnQpKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBzZWwgPSB2aWV3LnN0YXRlLnNlbGVjdGlvbjtcbiAgICBpZiAoIShzZWwgaW5zdGFuY2VvZiBUZXh0U2VsZWN0aW9uKSB8fCAhc2VsLiRmcm9tLnNhbWVQYXJlbnQoc2VsLiR0bykpIHtcbiAgICAgICAgbGV0IHRleHQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKTtcbiAgICAgICAgaWYgKCEvW1xcclxcbl0vLnRlc3QodGV4dCkgJiYgIXZpZXcuc29tZVByb3AoXCJoYW5kbGVUZXh0SW5wdXRcIiwgZiA9PiBmKHZpZXcsIHNlbC4kZnJvbS5wb3MsIHNlbC4kdG8ucG9zLCB0ZXh0KSkpXG4gICAgICAgICAgICB2aWV3LmRpc3BhdGNoKHZpZXcuc3RhdGUudHIuaW5zZXJ0VGV4dCh0ZXh0KS5zY3JvbGxJbnRvVmlldygpKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG59O1xuZnVuY3Rpb24gZXZlbnRDb29yZHMoZXZlbnQpIHsgcmV0dXJuIHsgbGVmdDogZXZlbnQuY2xpZW50WCwgdG9wOiBldmVudC5jbGllbnRZIH07IH1cbmZ1bmN0aW9uIGlzTmVhcihldmVudCwgY2xpY2spIHtcbiAgICBsZXQgZHggPSBjbGljay54IC0gZXZlbnQuY2xpZW50WCwgZHkgPSBjbGljay55IC0gZXZlbnQuY2xpZW50WTtcbiAgICByZXR1cm4gZHggKiBkeCArIGR5ICogZHkgPCAxMDA7XG59XG5mdW5jdGlvbiBydW5IYW5kbGVyT25Db250ZXh0KHZpZXcsIHByb3BOYW1lLCBwb3MsIGluc2lkZSwgZXZlbnQpIHtcbiAgICBpZiAoaW5zaWRlID09IC0xKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgbGV0ICRwb3MgPSB2aWV3LnN0YXRlLmRvYy5yZXNvbHZlKGluc2lkZSk7XG4gICAgZm9yIChsZXQgaSA9ICRwb3MuZGVwdGggKyAxOyBpID4gMDsgaS0tKSB7XG4gICAgICAgIGlmICh2aWV3LnNvbWVQcm9wKHByb3BOYW1lLCBmID0+IGkgPiAkcG9zLmRlcHRoID8gZih2aWV3LCBwb3MsICRwb3Mubm9kZUFmdGVyLCAkcG9zLmJlZm9yZShpKSwgZXZlbnQsIHRydWUpXG4gICAgICAgICAgICA6IGYodmlldywgcG9zLCAkcG9zLm5vZGUoaSksICRwb3MuYmVmb3JlKGkpLCBldmVudCwgZmFsc2UpKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiB1cGRhdGVTZWxlY3Rpb24odmlldywgc2VsZWN0aW9uLCBvcmlnaW4pIHtcbiAgICBpZiAoIXZpZXcuZm9jdXNlZClcbiAgICAgICAgdmlldy5mb2N1cygpO1xuICAgIGxldCB0ciA9IHZpZXcuc3RhdGUudHIuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7XG4gICAgaWYgKG9yaWdpbiA9PSBcInBvaW50ZXJcIilcbiAgICAgICAgdHIuc2V0TWV0YShcInBvaW50ZXJcIiwgdHJ1ZSk7XG4gICAgdmlldy5kaXNwYXRjaCh0cik7XG59XG5mdW5jdGlvbiBzZWxlY3RDbGlja2VkTGVhZih2aWV3LCBpbnNpZGUpIHtcbiAgICBpZiAoaW5zaWRlID09IC0xKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgbGV0ICRwb3MgPSB2aWV3LnN0YXRlLmRvYy5yZXNvbHZlKGluc2lkZSksIG5vZGUgPSAkcG9zLm5vZGVBZnRlcjtcbiAgICBpZiAobm9kZSAmJiBub2RlLmlzQXRvbSAmJiBOb2RlU2VsZWN0aW9uLmlzU2VsZWN0YWJsZShub2RlKSkge1xuICAgICAgICB1cGRhdGVTZWxlY3Rpb24odmlldywgbmV3IE5vZGVTZWxlY3Rpb24oJHBvcyksIFwicG9pbnRlclwiKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHNlbGVjdENsaWNrZWROb2RlKHZpZXcsIGluc2lkZSkge1xuICAgIGlmIChpbnNpZGUgPT0gLTEpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsZXQgc2VsID0gdmlldy5zdGF0ZS5zZWxlY3Rpb24sIHNlbGVjdGVkTm9kZSwgc2VsZWN0QXQ7XG4gICAgaWYgKHNlbCBpbnN0YW5jZW9mIE5vZGVTZWxlY3Rpb24pXG4gICAgICAgIHNlbGVjdGVkTm9kZSA9IHNlbC5ub2RlO1xuICAgIGxldCAkcG9zID0gdmlldy5zdGF0ZS5kb2MucmVzb2x2ZShpbnNpZGUpO1xuICAgIGZvciAobGV0IGkgPSAkcG9zLmRlcHRoICsgMTsgaSA+IDA7IGktLSkge1xuICAgICAgICBsZXQgbm9kZSA9IGkgPiAkcG9zLmRlcHRoID8gJHBvcy5ub2RlQWZ0ZXIgOiAkcG9zLm5vZGUoaSk7XG4gICAgICAgIGlmIChOb2RlU2VsZWN0aW9uLmlzU2VsZWN0YWJsZShub2RlKSkge1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkTm9kZSAmJiBzZWwuJGZyb20uZGVwdGggPiAwICYmXG4gICAgICAgICAgICAgICAgaSA+PSBzZWwuJGZyb20uZGVwdGggJiYgJHBvcy5iZWZvcmUoc2VsLiRmcm9tLmRlcHRoICsgMSkgPT0gc2VsLiRmcm9tLnBvcylcbiAgICAgICAgICAgICAgICBzZWxlY3RBdCA9ICRwb3MuYmVmb3JlKHNlbC4kZnJvbS5kZXB0aCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgc2VsZWN0QXQgPSAkcG9zLmJlZm9yZShpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChzZWxlY3RBdCAhPSBudWxsKSB7XG4gICAgICAgIHVwZGF0ZVNlbGVjdGlvbih2aWV3LCBOb2RlU2VsZWN0aW9uLmNyZWF0ZSh2aWV3LnN0YXRlLmRvYywgc2VsZWN0QXQpLCBcInBvaW50ZXJcIik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZVNpbmdsZUNsaWNrKHZpZXcsIHBvcywgaW5zaWRlLCBldmVudCwgc2VsZWN0Tm9kZSkge1xuICAgIHJldHVybiBydW5IYW5kbGVyT25Db250ZXh0KHZpZXcsIFwiaGFuZGxlQ2xpY2tPblwiLCBwb3MsIGluc2lkZSwgZXZlbnQpIHx8XG4gICAgICAgIHZpZXcuc29tZVByb3AoXCJoYW5kbGVDbGlja1wiLCBmID0+IGYodmlldywgcG9zLCBldmVudCkpIHx8XG4gICAgICAgIChzZWxlY3ROb2RlID8gc2VsZWN0Q2xpY2tlZE5vZGUodmlldywgaW5zaWRlKSA6IHNlbGVjdENsaWNrZWRMZWFmKHZpZXcsIGluc2lkZSkpO1xufVxuZnVuY3Rpb24gaGFuZGxlRG91YmxlQ2xpY2sodmlldywgcG9zLCBpbnNpZGUsIGV2ZW50KSB7XG4gICAgcmV0dXJuIHJ1bkhhbmRsZXJPbkNvbnRleHQodmlldywgXCJoYW5kbGVEb3VibGVDbGlja09uXCIsIHBvcywgaW5zaWRlLCBldmVudCkgfHxcbiAgICAgICAgdmlldy5zb21lUHJvcChcImhhbmRsZURvdWJsZUNsaWNrXCIsIGYgPT4gZih2aWV3LCBwb3MsIGV2ZW50KSk7XG59XG5mdW5jdGlvbiBoYW5kbGVUcmlwbGVDbGljayh2aWV3LCBwb3MsIGluc2lkZSwgZXZlbnQpIHtcbiAgICByZXR1cm4gcnVuSGFuZGxlck9uQ29udGV4dCh2aWV3LCBcImhhbmRsZVRyaXBsZUNsaWNrT25cIiwgcG9zLCBpbnNpZGUsIGV2ZW50KSB8fFxuICAgICAgICB2aWV3LnNvbWVQcm9wKFwiaGFuZGxlVHJpcGxlQ2xpY2tcIiwgZiA9PiBmKHZpZXcsIHBvcywgZXZlbnQpKSB8fFxuICAgICAgICBkZWZhdWx0VHJpcGxlQ2xpY2sodmlldywgaW5zaWRlLCBldmVudCk7XG59XG5mdW5jdGlvbiBkZWZhdWx0VHJpcGxlQ2xpY2sodmlldywgaW5zaWRlLCBldmVudCkge1xuICAgIGlmIChldmVudC5idXR0b24gIT0gMClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGxldCBkb2MgPSB2aWV3LnN0YXRlLmRvYztcbiAgICBpZiAoaW5zaWRlID09IC0xKSB7XG4gICAgICAgIGlmIChkb2MuaW5saW5lQ29udGVudCkge1xuICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uKHZpZXcsIFRleHRTZWxlY3Rpb24uY3JlYXRlKGRvYywgMCwgZG9jLmNvbnRlbnQuc2l6ZSksIFwicG9pbnRlclwiKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0ICRwb3MgPSBkb2MucmVzb2x2ZShpbnNpZGUpO1xuICAgIGZvciAobGV0IGkgPSAkcG9zLmRlcHRoICsgMTsgaSA+IDA7IGktLSkge1xuICAgICAgICBsZXQgbm9kZSA9IGkgPiAkcG9zLmRlcHRoID8gJHBvcy5ub2RlQWZ0ZXIgOiAkcG9zLm5vZGUoaSk7XG4gICAgICAgIGxldCBub2RlUG9zID0gJHBvcy5iZWZvcmUoaSk7XG4gICAgICAgIGlmIChub2RlLmlubGluZUNvbnRlbnQpXG4gICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb24odmlldywgVGV4dFNlbGVjdGlvbi5jcmVhdGUoZG9jLCBub2RlUG9zICsgMSwgbm9kZVBvcyArIDEgKyBub2RlLmNvbnRlbnQuc2l6ZSksIFwicG9pbnRlclwiKTtcbiAgICAgICAgZWxzZSBpZiAoTm9kZVNlbGVjdGlvbi5pc1NlbGVjdGFibGUobm9kZSkpXG4gICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb24odmlldywgTm9kZVNlbGVjdGlvbi5jcmVhdGUoZG9jLCBub2RlUG9zKSwgXCJwb2ludGVyXCIpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuZnVuY3Rpb24gZm9yY2VET01GbHVzaCh2aWV3KSB7XG4gICAgcmV0dXJuIGVuZENvbXBvc2l0aW9uKHZpZXcpO1xufVxuY29uc3Qgc2VsZWN0Tm9kZU1vZGlmaWVyID0gbWFjID8gXCJtZXRhS2V5XCIgOiBcImN0cmxLZXlcIjtcbmhhbmRsZXJzLm1vdXNlZG93biA9ICh2aWV3LCBfZXZlbnQpID0+IHtcbiAgICBsZXQgZXZlbnQgPSBfZXZlbnQ7XG4gICAgdmlldy5pbnB1dC5zaGlmdEtleSA9IGV2ZW50LnNoaWZ0S2V5O1xuICAgIGxldCBmbHVzaGVkID0gZm9yY2VET01GbHVzaCh2aWV3KTtcbiAgICBsZXQgbm93ID0gRGF0ZS5ub3coKSwgdHlwZSA9IFwic2luZ2xlQ2xpY2tcIjtcbiAgICBpZiAobm93IC0gdmlldy5pbnB1dC5sYXN0Q2xpY2sudGltZSA8IDUwMCAmJiBpc05lYXIoZXZlbnQsIHZpZXcuaW5wdXQubGFzdENsaWNrKSAmJiAhZXZlbnRbc2VsZWN0Tm9kZU1vZGlmaWVyXSkge1xuICAgICAgICBpZiAodmlldy5pbnB1dC5sYXN0Q2xpY2sudHlwZSA9PSBcInNpbmdsZUNsaWNrXCIpXG4gICAgICAgICAgICB0eXBlID0gXCJkb3VibGVDbGlja1wiO1xuICAgICAgICBlbHNlIGlmICh2aWV3LmlucHV0Lmxhc3RDbGljay50eXBlID09IFwiZG91YmxlQ2xpY2tcIilcbiAgICAgICAgICAgIHR5cGUgPSBcInRyaXBsZUNsaWNrXCI7XG4gICAgfVxuICAgIHZpZXcuaW5wdXQubGFzdENsaWNrID0geyB0aW1lOiBub3csIHg6IGV2ZW50LmNsaWVudFgsIHk6IGV2ZW50LmNsaWVudFksIHR5cGUgfTtcbiAgICBsZXQgcG9zID0gdmlldy5wb3NBdENvb3JkcyhldmVudENvb3JkcyhldmVudCkpO1xuICAgIGlmICghcG9zKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKHR5cGUgPT0gXCJzaW5nbGVDbGlja1wiKSB7XG4gICAgICAgIGlmICh2aWV3LmlucHV0Lm1vdXNlRG93bilcbiAgICAgICAgICAgIHZpZXcuaW5wdXQubW91c2VEb3duLmRvbmUoKTtcbiAgICAgICAgdmlldy5pbnB1dC5tb3VzZURvd24gPSBuZXcgTW91c2VEb3duKHZpZXcsIHBvcywgZXZlbnQsICEhZmx1c2hlZCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCh0eXBlID09IFwiZG91YmxlQ2xpY2tcIiA/IGhhbmRsZURvdWJsZUNsaWNrIDogaGFuZGxlVHJpcGxlQ2xpY2spKHZpZXcsIHBvcy5wb3MsIHBvcy5pbnNpZGUsIGV2ZW50KSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2V0U2VsZWN0aW9uT3JpZ2luKHZpZXcsIFwicG9pbnRlclwiKTtcbiAgICB9XG59O1xuY2xhc3MgTW91c2VEb3duIHtcbiAgICBjb25zdHJ1Y3Rvcih2aWV3LCBwb3MsIGV2ZW50LCBmbHVzaGVkKSB7XG4gICAgICAgIHRoaXMudmlldyA9IHZpZXc7XG4gICAgICAgIHRoaXMucG9zID0gcG9zO1xuICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XG4gICAgICAgIHRoaXMuZmx1c2hlZCA9IGZsdXNoZWQ7XG4gICAgICAgIHRoaXMuZGVsYXllZFNlbGVjdGlvblN5bmMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5taWdodERyYWcgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXJ0RG9jID0gdmlldy5zdGF0ZS5kb2M7XG4gICAgICAgIHRoaXMuc2VsZWN0Tm9kZSA9ICEhZXZlbnRbc2VsZWN0Tm9kZU1vZGlmaWVyXTtcbiAgICAgICAgdGhpcy5hbGxvd0RlZmF1bHQgPSBldmVudC5zaGlmdEtleTtcbiAgICAgICAgbGV0IHRhcmdldE5vZGUsIHRhcmdldFBvcztcbiAgICAgICAgaWYgKHBvcy5pbnNpZGUgPiAtMSkge1xuICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IHZpZXcuc3RhdGUuZG9jLm5vZGVBdChwb3MuaW5zaWRlKTtcbiAgICAgICAgICAgIHRhcmdldFBvcyA9IHBvcy5pbnNpZGU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgJHBvcyA9IHZpZXcuc3RhdGUuZG9jLnJlc29sdmUocG9zLnBvcyk7XG4gICAgICAgICAgICB0YXJnZXROb2RlID0gJHBvcy5wYXJlbnQ7XG4gICAgICAgICAgICB0YXJnZXRQb3MgPSAkcG9zLmRlcHRoID8gJHBvcy5iZWZvcmUoKSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZmx1c2hlZCA/IG51bGwgOiBldmVudC50YXJnZXQ7XG4gICAgICAgIGNvbnN0IHRhcmdldERlc2MgPSB0YXJnZXQgPyB2aWV3LmRvY1ZpZXcubmVhcmVzdERlc2ModGFyZ2V0LCB0cnVlKSA6IG51bGw7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0RGVzYyA/IHRhcmdldERlc2MuZG9tIDogbnVsbDtcbiAgICAgICAgbGV0IHsgc2VsZWN0aW9uIH0gPSB2aWV3LnN0YXRlO1xuICAgICAgICBpZiAoZXZlbnQuYnV0dG9uID09IDAgJiZcbiAgICAgICAgICAgIHRhcmdldE5vZGUudHlwZS5zcGVjLmRyYWdnYWJsZSAmJiB0YXJnZXROb2RlLnR5cGUuc3BlYy5zZWxlY3RhYmxlICE9PSBmYWxzZSB8fFxuICAgICAgICAgICAgc2VsZWN0aW9uIGluc3RhbmNlb2YgTm9kZVNlbGVjdGlvbiAmJiBzZWxlY3Rpb24uZnJvbSA8PSB0YXJnZXRQb3MgJiYgc2VsZWN0aW9uLnRvID4gdGFyZ2V0UG9zKVxuICAgICAgICAgICAgdGhpcy5taWdodERyYWcgPSB7XG4gICAgICAgICAgICAgICAgbm9kZTogdGFyZ2V0Tm9kZSxcbiAgICAgICAgICAgICAgICBwb3M6IHRhcmdldFBvcyxcbiAgICAgICAgICAgICAgICBhZGRBdHRyOiAhISh0aGlzLnRhcmdldCAmJiAhdGhpcy50YXJnZXQuZHJhZ2dhYmxlKSxcbiAgICAgICAgICAgICAgICBzZXRVbmVkaXRhYmxlOiAhISh0aGlzLnRhcmdldCAmJiBnZWNrbyAmJiAhdGhpcy50YXJnZXQuaGFzQXR0cmlidXRlKFwiY29udGVudEVkaXRhYmxlXCIpKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0ICYmIHRoaXMubWlnaHREcmFnICYmICh0aGlzLm1pZ2h0RHJhZy5hZGRBdHRyIHx8IHRoaXMubWlnaHREcmFnLnNldFVuZWRpdGFibGUpKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZG9tT2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMubWlnaHREcmFnLmFkZEF0dHIpXG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXQuZHJhZ2dhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1pZ2h0RHJhZy5zZXRVbmVkaXRhYmxlKVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52aWV3LmlucHV0Lm1vdXNlRG93biA9PSB0aGlzKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXQuc2V0QXR0cmlidXRlKFwiY29udGVudEVkaXRhYmxlXCIsIFwiZmFsc2VcIik7XG4gICAgICAgICAgICAgICAgfSwgMjApO1xuICAgICAgICAgICAgdGhpcy52aWV3LmRvbU9ic2VydmVyLnN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdmlldy5yb290LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMudXAgPSB0aGlzLnVwLmJpbmQodGhpcykpO1xuICAgICAgICB2aWV3LnJvb3QuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCB0aGlzLm1vdmUgPSB0aGlzLm1vdmUuYmluZCh0aGlzKSk7XG4gICAgICAgIHNldFNlbGVjdGlvbk9yaWdpbih2aWV3LCBcInBvaW50ZXJcIik7XG4gICAgfVxuICAgIGRvbmUoKSB7XG4gICAgICAgIHRoaXMudmlldy5yb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMudXApO1xuICAgICAgICB0aGlzLnZpZXcucm9vdC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIHRoaXMubW92ZSk7XG4gICAgICAgIGlmICh0aGlzLm1pZ2h0RHJhZyAmJiB0aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy52aWV3LmRvbU9ic2VydmVyLnN0b3AoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1pZ2h0RHJhZy5hZGRBdHRyKVxuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZShcImRyYWdnYWJsZVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1pZ2h0RHJhZy5zZXRVbmVkaXRhYmxlKVxuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZShcImNvbnRlbnRFZGl0YWJsZVwiKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5kb21PYnNlcnZlci5zdGFydCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlbGF5ZWRTZWxlY3Rpb25TeW5jKVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBzZWxlY3Rpb25Ub0RPTSh0aGlzLnZpZXcpKTtcbiAgICAgICAgdGhpcy52aWV3LmlucHV0Lm1vdXNlRG93biA9IG51bGw7XG4gICAgfVxuICAgIHVwKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZG9uZSgpO1xuICAgICAgICBpZiAoIXRoaXMudmlldy5kb20uY29udGFpbnMoZXZlbnQudGFyZ2V0KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IHBvcyA9IHRoaXMucG9zO1xuICAgICAgICBpZiAodGhpcy52aWV3LnN0YXRlLmRvYyAhPSB0aGlzLnN0YXJ0RG9jKVxuICAgICAgICAgICAgcG9zID0gdGhpcy52aWV3LnBvc0F0Q29vcmRzKGV2ZW50Q29vcmRzKGV2ZW50KSk7XG4gICAgICAgIHRoaXMudXBkYXRlQWxsb3dEZWZhdWx0KGV2ZW50KTtcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dEZWZhdWx0IHx8ICFwb3MpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGlvbk9yaWdpbih0aGlzLnZpZXcsIFwicG9pbnRlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChoYW5kbGVTaW5nbGVDbGljayh0aGlzLnZpZXcsIHBvcy5wb3MsIHBvcy5pbnNpZGUsIGV2ZW50LCB0aGlzLnNlbGVjdE5vZGUpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ZW50LmJ1dHRvbiA9PSAwICYmXG4gICAgICAgICAgICAodGhpcy5mbHVzaGVkIHx8XG4gICAgICAgICAgICAgICAgLy8gU2FmYXJpIGlnbm9yZXMgY2xpY2tzIG9uIGRyYWdnYWJsZSBlbGVtZW50c1xuICAgICAgICAgICAgICAgIChzYWZhcmkgJiYgdGhpcy5taWdodERyYWcgJiYgIXRoaXMubWlnaHREcmFnLm5vZGUuaXNBdG9tKSB8fFxuICAgICAgICAgICAgICAgIC8vIENocm9tZSB3aWxsIHNvbWV0aW1lcyB0cmVhdCBhIG5vZGUgc2VsZWN0aW9uIGFzIGFcbiAgICAgICAgICAgICAgICAvLyBjdXJzb3IsIGJ1dCBzdGlsbCByZXBvcnQgdGhhdCB0aGUgbm9kZSBpcyBzZWxlY3RlZFxuICAgICAgICAgICAgICAgIC8vIHdoZW4gYXNrZWQgdGhyb3VnaCBnZXRTZWxlY3Rpb24uIFlvdSdsbCB0aGVuIGdldCBhXG4gICAgICAgICAgICAgICAgLy8gc2l0dWF0aW9uIHdoZXJlIGNsaWNraW5nIGF0IHRoZSBwb2ludCB3aGVyZSB0aGF0XG4gICAgICAgICAgICAgICAgLy8gKGhpZGRlbikgY3Vyc29yIGlzIGRvZXNuJ3QgY2hhbmdlIHRoZSBzZWxlY3Rpb24sIGFuZFxuICAgICAgICAgICAgICAgIC8vIHRodXMgZG9lc24ndCBnZXQgYSByZWFjdGlvbiBmcm9tIFByb3NlTWlycm9yLiBUaGlzXG4gICAgICAgICAgICAgICAgLy8gd29ya3MgYXJvdW5kIHRoYXQuXG4gICAgICAgICAgICAgICAgKGNocm9tZSAmJiAhdGhpcy52aWV3LnN0YXRlLnNlbGVjdGlvbi52aXNpYmxlICYmXG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWluKE1hdGguYWJzKHBvcy5wb3MgLSB0aGlzLnZpZXcuc3RhdGUuc2VsZWN0aW9uLmZyb20pLCBNYXRoLmFicyhwb3MucG9zIC0gdGhpcy52aWV3LnN0YXRlLnNlbGVjdGlvbi50bykpIDw9IDIpKSkge1xuICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uKHRoaXMudmlldywgU2VsZWN0aW9uLm5lYXIodGhpcy52aWV3LnN0YXRlLmRvYy5yZXNvbHZlKHBvcy5wb3MpKSwgXCJwb2ludGVyXCIpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGlvbk9yaWdpbih0aGlzLnZpZXcsIFwicG9pbnRlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtb3ZlKGV2ZW50KSB7XG4gICAgICAgIHRoaXMudXBkYXRlQWxsb3dEZWZhdWx0KGV2ZW50KTtcbiAgICAgICAgc2V0U2VsZWN0aW9uT3JpZ2luKHRoaXMudmlldywgXCJwb2ludGVyXCIpO1xuICAgICAgICBpZiAoZXZlbnQuYnV0dG9ucyA9PSAwKVxuICAgICAgICAgICAgdGhpcy5kb25lKCk7XG4gICAgfVxuICAgIHVwZGF0ZUFsbG93RGVmYXVsdChldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuYWxsb3dEZWZhdWx0ICYmIChNYXRoLmFicyh0aGlzLmV2ZW50LnggLSBldmVudC5jbGllbnRYKSA+IDQgfHxcbiAgICAgICAgICAgIE1hdGguYWJzKHRoaXMuZXZlbnQueSAtIGV2ZW50LmNsaWVudFkpID4gNCkpXG4gICAgICAgICAgICB0aGlzLmFsbG93RGVmYXVsdCA9IHRydWU7XG4gICAgfVxufVxuaGFuZGxlcnMudG91Y2hzdGFydCA9IHZpZXcgPT4ge1xuICAgIHZpZXcuaW5wdXQubGFzdFRvdWNoID0gRGF0ZS5ub3coKTtcbiAgICBmb3JjZURPTUZsdXNoKHZpZXcpO1xuICAgIHNldFNlbGVjdGlvbk9yaWdpbih2aWV3LCBcInBvaW50ZXJcIik7XG59O1xuaGFuZGxlcnMudG91Y2htb3ZlID0gdmlldyA9PiB7XG4gICAgdmlldy5pbnB1dC5sYXN0VG91Y2ggPSBEYXRlLm5vdygpO1xuICAgIHNldFNlbGVjdGlvbk9yaWdpbih2aWV3LCBcInBvaW50ZXJcIik7XG59O1xuaGFuZGxlcnMuY29udGV4dG1lbnUgPSB2aWV3ID0+IGZvcmNlRE9NRmx1c2godmlldyk7XG5mdW5jdGlvbiBpbk9yTmVhckNvbXBvc2l0aW9uKHZpZXcsIGV2ZW50KSB7XG4gICAgaWYgKHZpZXcuY29tcG9zaW5nKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyBTZWUgaHR0cHM6Ly93d3cuc3R1bS5kZS8yMDE2LzA2LzI0L2hhbmRsaW5nLWltZS1ldmVudHMtaW4tamF2YXNjcmlwdC8uXG4gICAgLy8gT24gSmFwYW5lc2UgaW5wdXQgbWV0aG9kIGVkaXRvcnMgKElNRXMpLCB0aGUgRW50ZXIga2V5IGlzIHVzZWQgdG8gY29uZmlybSBjaGFyYWN0ZXJcbiAgICAvLyBzZWxlY3Rpb24uIE9uIFNhZmFyaSwgd2hlbiBFbnRlciBpcyBwcmVzc2VkLCBjb21wb3NpdGlvbmVuZCBhbmQga2V5ZG93biBldmVudHMgYXJlXG4gICAgLy8gZW1pdHRlZC4gVGhlIGtleWRvd24gZXZlbnQgdHJpZ2dlcnMgbmV3bGluZSBpbnNlcnRpb24sIHdoaWNoIHdlIGRvbid0IHdhbnQuXG4gICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyB0cnVlIGlmIHRoZSBrZXlkb3duIGV2ZW50IHNob3VsZCBiZSBpZ25vcmVkLlxuICAgIC8vIFdlIG9ubHkgaWdub3JlIGl0IG9uY2UsIGFzIHByZXNzaW5nIEVudGVyIGEgc2Vjb25kIHRpbWUgKnNob3VsZCogaW5zZXJ0IGEgbmV3bGluZS5cbiAgICAvLyBGdXJ0aGVybW9yZSwgdGhlIGtleWRvd24gZXZlbnQgdGltZXN0YW1wIG11c3QgYmUgY2xvc2UgdG8gdGhlIGNvbXBvc2l0aW9uRW5kZWRBdCB0aW1lc3RhbXAuXG4gICAgLy8gVGhpcyBndWFyZHMgYWdhaW5zdCB0aGUgY2FzZSB3aGVyZSBjb21wb3NpdGlvbmVuZCBpcyB0cmlnZ2VyZWQgd2l0aG91dCB0aGUga2V5Ym9hcmRcbiAgICAvLyAoZS5nLiBjaGFyYWN0ZXIgY29uZmlybWF0aW9uIG1heSBiZSBkb25lIHdpdGggdGhlIG1vdXNlKSwgYW5kIGtleWRvd24gaXMgdHJpZ2dlcmVkXG4gICAgLy8gYWZ0ZXJ3YXJkcy0gd2Ugd291bGRuJ3Qgd2FudCB0byBpZ25vcmUgdGhlIGtleWRvd24gZXZlbnQgaW4gdGhpcyBjYXNlLlxuICAgIGlmIChzYWZhcmkgJiYgTWF0aC5hYnMoZXZlbnQudGltZVN0YW1wIC0gdmlldy5pbnB1dC5jb21wb3NpdGlvbkVuZGVkQXQpIDwgNTAwKSB7XG4gICAgICAgIHZpZXcuaW5wdXQuY29tcG9zaXRpb25FbmRlZEF0ID0gLTJlODtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8vIERyb3AgYWN0aXZlIGNvbXBvc2l0aW9uIGFmdGVyIDUgc2Vjb25kcyBvZiBpbmFjdGl2aXR5IG9uIEFuZHJvaWRcbmNvbnN0IHRpbWVvdXRDb21wb3NpdGlvbiA9IGFuZHJvaWQgPyA1MDAwIDogLTE7XG5lZGl0SGFuZGxlcnMuY29tcG9zaXRpb25zdGFydCA9IGVkaXRIYW5kbGVycy5jb21wb3NpdGlvbnVwZGF0ZSA9IHZpZXcgPT4ge1xuICAgIGlmICghdmlldy5jb21wb3NpbmcpIHtcbiAgICAgICAgdmlldy5kb21PYnNlcnZlci5mbHVzaCgpO1xuICAgICAgICBsZXQgeyBzdGF0ZSB9ID0gdmlldywgJHBvcyA9IHN0YXRlLnNlbGVjdGlvbi4kZnJvbTtcbiAgICAgICAgaWYgKHN0YXRlLnNlbGVjdGlvbi5lbXB0eSAmJlxuICAgICAgICAgICAgKHN0YXRlLnN0b3JlZE1hcmtzIHx8XG4gICAgICAgICAgICAgICAgKCEkcG9zLnRleHRPZmZzZXQgJiYgJHBvcy5wYXJlbnRPZmZzZXQgJiYgJHBvcy5ub2RlQmVmb3JlLm1hcmtzLnNvbWUobSA9PiBtLnR5cGUuc3BlYy5pbmNsdXNpdmUgPT09IGZhbHNlKSkpKSB7XG4gICAgICAgICAgICAvLyBOZWVkIHRvIHdyYXAgdGhlIGN1cnNvciBpbiBtYXJrIG5vZGVzIGRpZmZlcmVudCBmcm9tIHRoZSBvbmVzIGluIHRoZSBET00gY29udGV4dFxuICAgICAgICAgICAgdmlldy5tYXJrQ3Vyc29yID0gdmlldy5zdGF0ZS5zdG9yZWRNYXJrcyB8fCAkcG9zLm1hcmtzKCk7XG4gICAgICAgICAgICBlbmRDb21wb3NpdGlvbih2aWV3LCB0cnVlKTtcbiAgICAgICAgICAgIHZpZXcubWFya0N1cnNvciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbmRDb21wb3NpdGlvbih2aWV3KTtcbiAgICAgICAgICAgIC8vIEluIGZpcmVmb3gsIGlmIHRoZSBjdXJzb3IgaXMgYWZ0ZXIgYnV0IG91dHNpZGUgYSBtYXJrZWQgbm9kZSxcbiAgICAgICAgICAgIC8vIHRoZSBpbnNlcnRlZCB0ZXh0IHdvbid0IGluaGVyaXQgdGhlIG1hcmtzLiBTbyB0aGlzIG1vdmVzIGl0XG4gICAgICAgICAgICAvLyBpbnNpZGUgaWYgbmVjZXNzYXJ5LlxuICAgICAgICAgICAgaWYgKGdlY2tvICYmIHN0YXRlLnNlbGVjdGlvbi5lbXB0eSAmJiAkcG9zLnBhcmVudE9mZnNldCAmJiAhJHBvcy50ZXh0T2Zmc2V0ICYmICRwb3Mubm9kZUJlZm9yZS5tYXJrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2VsID0gdmlldy5kb21TZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IG5vZGUgPSBzZWwuZm9jdXNOb2RlLCBvZmZzZXQgPSBzZWwuZm9jdXNPZmZzZXQ7IG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PSAxICYmIG9mZnNldCAhPSAwOykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYmVmb3JlID0gb2Zmc2V0IDwgMCA/IG5vZGUubGFzdENoaWxkIDogbm9kZS5jaGlsZE5vZGVzW29mZnNldCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWJlZm9yZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYmVmb3JlLm5vZGVUeXBlID09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuZG9tU2VsZWN0aW9uKCkuY29sbGFwc2UoYmVmb3JlLCBiZWZvcmUubm9kZVZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBiZWZvcmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2aWV3LmlucHV0LmNvbXBvc2luZyA9IHRydWU7XG4gICAgfVxuICAgIHNjaGVkdWxlQ29tcG9zZUVuZCh2aWV3LCB0aW1lb3V0Q29tcG9zaXRpb24pO1xufTtcbmVkaXRIYW5kbGVycy5jb21wb3NpdGlvbmVuZCA9ICh2aWV3LCBldmVudCkgPT4ge1xuICAgIGlmICh2aWV3LmNvbXBvc2luZykge1xuICAgICAgICB2aWV3LmlucHV0LmNvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgICB2aWV3LmlucHV0LmNvbXBvc2l0aW9uRW5kZWRBdCA9IGV2ZW50LnRpbWVTdGFtcDtcbiAgICAgICAgc2NoZWR1bGVDb21wb3NlRW5kKHZpZXcsIDIwKTtcbiAgICB9XG59O1xuZnVuY3Rpb24gc2NoZWR1bGVDb21wb3NlRW5kKHZpZXcsIGRlbGF5KSB7XG4gICAgY2xlYXJUaW1lb3V0KHZpZXcuaW5wdXQuY29tcG9zaW5nVGltZW91dCk7XG4gICAgaWYgKGRlbGF5ID4gLTEpXG4gICAgICAgIHZpZXcuaW5wdXQuY29tcG9zaW5nVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gZW5kQ29tcG9zaXRpb24odmlldyksIGRlbGF5KTtcbn1cbmZ1bmN0aW9uIGNsZWFyQ29tcG9zaXRpb24odmlldykge1xuICAgIGlmICh2aWV3LmNvbXBvc2luZykge1xuICAgICAgICB2aWV3LmlucHV0LmNvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgICB2aWV3LmlucHV0LmNvbXBvc2l0aW9uRW5kZWRBdCA9IHRpbWVzdGFtcEZyb21DdXN0b21FdmVudCgpO1xuICAgIH1cbiAgICB3aGlsZSAodmlldy5pbnB1dC5jb21wb3NpdGlvbk5vZGVzLmxlbmd0aCA+IDApXG4gICAgICAgIHZpZXcuaW5wdXQuY29tcG9zaXRpb25Ob2Rlcy5wb3AoKS5tYXJrUGFyZW50c0RpcnR5KCk7XG59XG5mdW5jdGlvbiB0aW1lc3RhbXBGcm9tQ3VzdG9tRXZlbnQoKSB7XG4gICAgbGV0IGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgICBldmVudC5pbml0RXZlbnQoXCJldmVudFwiLCB0cnVlLCB0cnVlKTtcbiAgICByZXR1cm4gZXZlbnQudGltZVN0YW1wO1xufVxuLyoqXG5AaW50ZXJuYWxcbiovXG5mdW5jdGlvbiBlbmRDb21wb3NpdGlvbih2aWV3LCBmb3JjZVVwZGF0ZSA9IGZhbHNlKSB7XG4gICAgaWYgKGFuZHJvaWQgJiYgdmlldy5kb21PYnNlcnZlci5mbHVzaGluZ1Nvb24gPj0gMClcbiAgICAgICAgcmV0dXJuO1xuICAgIHZpZXcuZG9tT2JzZXJ2ZXIuZm9yY2VGbHVzaCgpO1xuICAgIGNsZWFyQ29tcG9zaXRpb24odmlldyk7XG4gICAgaWYgKGZvcmNlVXBkYXRlIHx8IHZpZXcuZG9jVmlldyAmJiB2aWV3LmRvY1ZpZXcuZGlydHkpIHtcbiAgICAgICAgbGV0IHNlbCA9IHNlbGVjdGlvbkZyb21ET00odmlldyk7XG4gICAgICAgIGlmIChzZWwgJiYgIXNlbC5lcSh2aWV3LnN0YXRlLnNlbGVjdGlvbikpXG4gICAgICAgICAgICB2aWV3LmRpc3BhdGNoKHZpZXcuc3RhdGUudHIuc2V0U2VsZWN0aW9uKHNlbCkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB2aWV3LnVwZGF0ZVN0YXRlKHZpZXcuc3RhdGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gY2FwdHVyZUNvcHkodmlldywgZG9tKSB7XG4gICAgLy8gVGhlIGV4dHJhIHdyYXBwZXIgaXMgc29tZWhvdyBuZWNlc3Nhcnkgb24gSUUvRWRnZSB0byBwcmV2ZW50IHRoZVxuICAgIC8vIGNvbnRlbnQgZnJvbSBiZWluZyBtYW5nbGVkIHdoZW4gaXQgaXMgcHV0IG9udG8gdGhlIGNsaXBib2FyZFxuICAgIGlmICghdmlldy5kb20ucGFyZW50Tm9kZSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGxldCB3cmFwID0gdmlldy5kb20ucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcbiAgICB3cmFwLmFwcGVuZENoaWxkKGRvbSk7XG4gICAgd3JhcC5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IC0xMDAwMHB4OyB0b3A6IDEwcHhcIjtcbiAgICBsZXQgc2VsID0gZ2V0U2VsZWN0aW9uKCksIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZG9tKTtcbiAgICAvLyBEb25lIGJlY2F1c2UgSUUgd2lsbCBmaXJlIGEgc2VsZWN0aW9uY2hhbmdlIG1vdmluZyB0aGUgc2VsZWN0aW9uXG4gICAgLy8gdG8gaXRzIHN0YXJ0IHdoZW4gcmVtb3ZlQWxsUmFuZ2VzIGlzIGNhbGxlZCBhbmQgdGhlIGVkaXRvciBzdGlsbFxuICAgIC8vIGhhcyBmb2N1cyAod2hpY2ggd2lsbCBtZXNzIHVwIHRoZSBlZGl0b3IncyBzZWxlY3Rpb24gc3RhdGUpLlxuICAgIHZpZXcuZG9tLmJsdXIoKTtcbiAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgc2VsLmFkZFJhbmdlKHJhbmdlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHdyYXAucGFyZW50Tm9kZSlcbiAgICAgICAgICAgIHdyYXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh3cmFwKTtcbiAgICAgICAgdmlldy5mb2N1cygpO1xuICAgIH0sIDUwKTtcbn1cbi8vIFRoaXMgaXMgdmVyeSBjcnVkZSwgYnV0IHVuZm9ydHVuYXRlbHkgYm90aCB0aGVzZSBicm93c2VycyBfcHJldGVuZF9cbi8vIHRoYXQgdGhleSBoYXZlIGEgY2xpcGJvYXJkIEFQSeKAlGFsbCB0aGUgb2JqZWN0cyBhbmQgbWV0aG9kcyBhcmVcbi8vIHRoZXJlLCB0aGV5IGp1c3QgZG9uJ3Qgd29yaywgYW5kIHRoZXkgYXJlIGhhcmQgdG8gdGVzdC5cbmNvbnN0IGJyb2tlbkNsaXBib2FyZEFQSSA9IChpZSAmJiBpZV92ZXJzaW9uIDwgMTUpIHx8XG4gICAgKGlvcyAmJiB3ZWJraXRfdmVyc2lvbiA8IDYwNCk7XG5oYW5kbGVycy5jb3B5ID0gZWRpdEhhbmRsZXJzLmN1dCA9ICh2aWV3LCBfZXZlbnQpID0+IHtcbiAgICBsZXQgZXZlbnQgPSBfZXZlbnQ7XG4gICAgbGV0IHNlbCA9IHZpZXcuc3RhdGUuc2VsZWN0aW9uLCBjdXQgPSBldmVudC50eXBlID09IFwiY3V0XCI7XG4gICAgaWYgKHNlbC5lbXB0eSlcbiAgICAgICAgcmV0dXJuO1xuICAgIC8vIElFIGFuZCBFZGdlJ3MgY2xpcGJvYXJkIGludGVyZmFjZSBpcyBjb21wbGV0ZWx5IGJyb2tlblxuICAgIGxldCBkYXRhID0gYnJva2VuQ2xpcGJvYXJkQVBJID8gbnVsbCA6IGV2ZW50LmNsaXBib2FyZERhdGE7XG4gICAgbGV0IHNsaWNlID0gc2VsLmNvbnRlbnQoKSwgeyBkb20sIHRleHQgfSA9IHNlcmlhbGl6ZUZvckNsaXBib2FyZCh2aWV3LCBzbGljZSk7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGF0YS5jbGVhckRhdGEoKTtcbiAgICAgICAgZGF0YS5zZXREYXRhKFwidGV4dC9odG1sXCIsIGRvbS5pbm5lckhUTUwpO1xuICAgICAgICBkYXRhLnNldERhdGEoXCJ0ZXh0L3BsYWluXCIsIHRleHQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY2FwdHVyZUNvcHkodmlldywgZG9tKTtcbiAgICB9XG4gICAgaWYgKGN1dClcbiAgICAgICAgdmlldy5kaXNwYXRjaCh2aWV3LnN0YXRlLnRyLmRlbGV0ZVNlbGVjdGlvbigpLnNjcm9sbEludG9WaWV3KCkuc2V0TWV0YShcInVpRXZlbnRcIiwgXCJjdXRcIikpO1xufTtcbmZ1bmN0aW9uIHNsaWNlU2luZ2xlTm9kZShzbGljZSkge1xuICAgIHJldHVybiBzbGljZS5vcGVuU3RhcnQgPT0gMCAmJiBzbGljZS5vcGVuRW5kID09IDAgJiYgc2xpY2UuY29udGVudC5jaGlsZENvdW50ID09IDEgPyBzbGljZS5jb250ZW50LmZpcnN0Q2hpbGQgOiBudWxsO1xufVxuZnVuY3Rpb24gY2FwdHVyZVBhc3RlKHZpZXcsIGV2ZW50KSB7XG4gICAgaWYgKCF2aWV3LmRvbS5wYXJlbnROb2RlKVxuICAgICAgICByZXR1cm47XG4gICAgbGV0IHBsYWluVGV4dCA9IHZpZXcuaW5wdXQuc2hpZnRLZXkgfHwgdmlldy5zdGF0ZS5zZWxlY3Rpb24uJGZyb20ucGFyZW50LnR5cGUuc3BlYy5jb2RlO1xuICAgIGxldCB0YXJnZXQgPSB2aWV3LmRvbS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocGxhaW5UZXh0ID8gXCJ0ZXh0YXJlYVwiIDogXCJkaXZcIikpO1xuICAgIGlmICghcGxhaW5UZXh0KVxuICAgICAgICB0YXJnZXQuY29udGVudEVkaXRhYmxlID0gXCJ0cnVlXCI7XG4gICAgdGFyZ2V0LnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogLTEwMDAwcHg7IHRvcDogMTBweFwiO1xuICAgIHRhcmdldC5mb2N1cygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB2aWV3LmZvY3VzKCk7XG4gICAgICAgIGlmICh0YXJnZXQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgIHRhcmdldC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRhcmdldCk7XG4gICAgICAgIGlmIChwbGFpblRleHQpXG4gICAgICAgICAgICBkb1Bhc3RlKHZpZXcsIHRhcmdldC52YWx1ZSwgbnVsbCwgdmlldy5pbnB1dC5zaGlmdEtleSwgZXZlbnQpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBkb1Bhc3RlKHZpZXcsIHRhcmdldC50ZXh0Q29udGVudCwgdGFyZ2V0LmlubmVySFRNTCwgdmlldy5pbnB1dC5zaGlmdEtleSwgZXZlbnQpO1xuICAgIH0sIDUwKTtcbn1cbmZ1bmN0aW9uIGRvUGFzdGUodmlldywgdGV4dCwgaHRtbCwgcHJlZmVyUGxhaW4sIGV2ZW50KSB7XG4gICAgbGV0IHNsaWNlID0gcGFyc2VGcm9tQ2xpcGJvYXJkKHZpZXcsIHRleHQsIGh0bWwsIHByZWZlclBsYWluLCB2aWV3LnN0YXRlLnNlbGVjdGlvbi4kZnJvbSk7XG4gICAgaWYgKHZpZXcuc29tZVByb3AoXCJoYW5kbGVQYXN0ZVwiLCBmID0+IGYodmlldywgZXZlbnQsIHNsaWNlIHx8IFNsaWNlLmVtcHR5KSkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICghc2xpY2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsZXQgc2luZ2xlTm9kZSA9IHNsaWNlU2luZ2xlTm9kZShzbGljZSk7XG4gICAgbGV0IHRyID0gc2luZ2xlTm9kZVxuICAgICAgICA/IHZpZXcuc3RhdGUudHIucmVwbGFjZVNlbGVjdGlvbldpdGgoc2luZ2xlTm9kZSwgdmlldy5pbnB1dC5zaGlmdEtleSlcbiAgICAgICAgOiB2aWV3LnN0YXRlLnRyLnJlcGxhY2VTZWxlY3Rpb24oc2xpY2UpO1xuICAgIHZpZXcuZGlzcGF0Y2godHIuc2Nyb2xsSW50b1ZpZXcoKS5zZXRNZXRhKFwicGFzdGVcIiwgdHJ1ZSkuc2V0TWV0YShcInVpRXZlbnRcIiwgXCJwYXN0ZVwiKSk7XG4gICAgcmV0dXJuIHRydWU7XG59XG5lZGl0SGFuZGxlcnMucGFzdGUgPSAodmlldywgX2V2ZW50KSA9PiB7XG4gICAgbGV0IGV2ZW50ID0gX2V2ZW50O1xuICAgIC8vIEhhbmRsaW5nIHBhc3RlIGZyb20gSmF2YVNjcmlwdCBkdXJpbmcgY29tcG9zaXRpb24gaXMgdmVyeSBwb29ybHlcbiAgICAvLyBoYW5kbGVkIGJ5IGJyb3dzZXJzLCBzbyBhcyBhIGRvZGd5IGJ1dCBwcmVmZXJhYmxlIGtsdWRnZSwgd2UganVzdFxuICAgIC8vIGxldCB0aGUgYnJvd3NlciBkbyBpdHMgbmF0aXZlIHRoaW5nIHRoZXJlLCBleGNlcHQgb24gQW5kcm9pZCxcbiAgICAvLyB3aGVyZSB0aGUgZWRpdG9yIGlzIGFsbW9zdCBhbHdheXMgY29tcG9zaW5nLlxuICAgIGlmICh2aWV3LmNvbXBvc2luZyAmJiAhYW5kcm9pZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGxldCBkYXRhID0gYnJva2VuQ2xpcGJvYXJkQVBJID8gbnVsbCA6IGV2ZW50LmNsaXBib2FyZERhdGE7XG4gICAgaWYgKGRhdGEgJiYgZG9QYXN0ZSh2aWV3LCBkYXRhLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpLCBkYXRhLmdldERhdGEoXCJ0ZXh0L2h0bWxcIiksIHZpZXcuaW5wdXQuc2hpZnRLZXksIGV2ZW50KSlcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBlbHNlXG4gICAgICAgIGNhcHR1cmVQYXN0ZSh2aWV3LCBldmVudCk7XG59O1xuY2xhc3MgRHJhZ2dpbmcge1xuICAgIGNvbnN0cnVjdG9yKHNsaWNlLCBtb3ZlKSB7XG4gICAgICAgIHRoaXMuc2xpY2UgPSBzbGljZTtcbiAgICAgICAgdGhpcy5tb3ZlID0gbW92ZTtcbiAgICB9XG59XG5jb25zdCBkcmFnQ29weU1vZGlmaWVyID0gbWFjID8gXCJhbHRLZXlcIiA6IFwiY3RybEtleVwiO1xuaGFuZGxlcnMuZHJhZ3N0YXJ0ID0gKHZpZXcsIF9ldmVudCkgPT4ge1xuICAgIGxldCBldmVudCA9IF9ldmVudDtcbiAgICBsZXQgbW91c2VEb3duID0gdmlldy5pbnB1dC5tb3VzZURvd247XG4gICAgaWYgKG1vdXNlRG93bilcbiAgICAgICAgbW91c2VEb3duLmRvbmUoKTtcbiAgICBpZiAoIWV2ZW50LmRhdGFUcmFuc2ZlcilcbiAgICAgICAgcmV0dXJuO1xuICAgIGxldCBzZWwgPSB2aWV3LnN0YXRlLnNlbGVjdGlvbjtcbiAgICBsZXQgcG9zID0gc2VsLmVtcHR5ID8gbnVsbCA6IHZpZXcucG9zQXRDb29yZHMoZXZlbnRDb29yZHMoZXZlbnQpKTtcbiAgICBpZiAocG9zICYmIHBvcy5wb3MgPj0gc2VsLmZyb20gJiYgcG9zLnBvcyA8PSAoc2VsIGluc3RhbmNlb2YgTm9kZVNlbGVjdGlvbiA/IHNlbC50byAtIDEgOiBzZWwudG8pKSA7XG4gICAgZWxzZSBpZiAobW91c2VEb3duICYmIG1vdXNlRG93bi5taWdodERyYWcpIHtcbiAgICAgICAgdmlldy5kaXNwYXRjaCh2aWV3LnN0YXRlLnRyLnNldFNlbGVjdGlvbihOb2RlU2VsZWN0aW9uLmNyZWF0ZSh2aWV3LnN0YXRlLmRvYywgbW91c2VEb3duLm1pZ2h0RHJhZy5wb3MpKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQubm9kZVR5cGUgPT0gMSkge1xuICAgICAgICBsZXQgZGVzYyA9IHZpZXcuZG9jVmlldy5uZWFyZXN0RGVzYyhldmVudC50YXJnZXQsIHRydWUpO1xuICAgICAgICBpZiAoZGVzYyAmJiBkZXNjLm5vZGUudHlwZS5zcGVjLmRyYWdnYWJsZSAmJiBkZXNjICE9IHZpZXcuZG9jVmlldylcbiAgICAgICAgICAgIHZpZXcuZGlzcGF0Y2godmlldy5zdGF0ZS50ci5zZXRTZWxlY3Rpb24oTm9kZVNlbGVjdGlvbi5jcmVhdGUodmlldy5zdGF0ZS5kb2MsIGRlc2MucG9zQmVmb3JlKSkpO1xuICAgIH1cbiAgICBsZXQgc2xpY2UgPSB2aWV3LnN0YXRlLnNlbGVjdGlvbi5jb250ZW50KCksIHsgZG9tLCB0ZXh0IH0gPSBzZXJpYWxpemVGb3JDbGlwYm9hcmQodmlldywgc2xpY2UpO1xuICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5jbGVhckRhdGEoKTtcbiAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShicm9rZW5DbGlwYm9hcmRBUEkgPyBcIlRleHRcIiA6IFwidGV4dC9odG1sXCIsIGRvbS5pbm5lckhUTUwpO1xuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vUHJvc2VNaXJyb3IvcHJvc2VtaXJyb3IvaXNzdWVzLzExNTZcbiAgICBldmVudC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9IFwiY29weU1vdmVcIjtcbiAgICBpZiAoIWJyb2tlbkNsaXBib2FyZEFQSSlcbiAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoXCJ0ZXh0L3BsYWluXCIsIHRleHQpO1xuICAgIHZpZXcuZHJhZ2dpbmcgPSBuZXcgRHJhZ2dpbmcoc2xpY2UsICFldmVudFtkcmFnQ29weU1vZGlmaWVyXSk7XG59O1xuaGFuZGxlcnMuZHJhZ2VuZCA9IHZpZXcgPT4ge1xuICAgIGxldCBkcmFnZ2luZyA9IHZpZXcuZHJhZ2dpbmc7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodmlldy5kcmFnZ2luZyA9PSBkcmFnZ2luZylcbiAgICAgICAgICAgIHZpZXcuZHJhZ2dpbmcgPSBudWxsO1xuICAgIH0sIDUwKTtcbn07XG5lZGl0SGFuZGxlcnMuZHJhZ292ZXIgPSBlZGl0SGFuZGxlcnMuZHJhZ2VudGVyID0gKF8sIGUpID0+IGUucHJldmVudERlZmF1bHQoKTtcbmVkaXRIYW5kbGVycy5kcm9wID0gKHZpZXcsIF9ldmVudCkgPT4ge1xuICAgIGxldCBldmVudCA9IF9ldmVudDtcbiAgICBsZXQgZHJhZ2dpbmcgPSB2aWV3LmRyYWdnaW5nO1xuICAgIHZpZXcuZHJhZ2dpbmcgPSBudWxsO1xuICAgIGlmICghZXZlbnQuZGF0YVRyYW5zZmVyKVxuICAgICAgICByZXR1cm47XG4gICAgbGV0IGV2ZW50UG9zID0gdmlldy5wb3NBdENvb3JkcyhldmVudENvb3JkcyhldmVudCkpO1xuICAgIGlmICghZXZlbnRQb3MpXG4gICAgICAgIHJldHVybjtcbiAgICBsZXQgJG1vdXNlID0gdmlldy5zdGF0ZS5kb2MucmVzb2x2ZShldmVudFBvcy5wb3MpO1xuICAgIGxldCBzbGljZSA9IGRyYWdnaW5nICYmIGRyYWdnaW5nLnNsaWNlO1xuICAgIGlmIChzbGljZSkge1xuICAgICAgICB2aWV3LnNvbWVQcm9wKFwidHJhbnNmb3JtUGFzdGVkXCIsIGYgPT4geyBzbGljZSA9IGYoc2xpY2UsIHZpZXcpOyB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNsaWNlID0gcGFyc2VGcm9tQ2xpcGJvYXJkKHZpZXcsIGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKGJyb2tlbkNsaXBib2FyZEFQSSA/IFwiVGV4dFwiIDogXCJ0ZXh0L3BsYWluXCIpLCBicm9rZW5DbGlwYm9hcmRBUEkgPyBudWxsIDogZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoXCJ0ZXh0L2h0bWxcIiksIGZhbHNlLCAkbW91c2UpO1xuICAgIH1cbiAgICBsZXQgbW92ZSA9ICEhKGRyYWdnaW5nICYmICFldmVudFtkcmFnQ29weU1vZGlmaWVyXSk7XG4gICAgaWYgKHZpZXcuc29tZVByb3AoXCJoYW5kbGVEcm9wXCIsIGYgPT4gZih2aWV3LCBldmVudCwgc2xpY2UgfHwgU2xpY2UuZW1wdHksIG1vdmUpKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghc2xpY2UpXG4gICAgICAgIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGxldCBpbnNlcnRQb3MgPSBzbGljZSA/IGRyb3BQb2ludCh2aWV3LnN0YXRlLmRvYywgJG1vdXNlLnBvcywgc2xpY2UpIDogJG1vdXNlLnBvcztcbiAgICBpZiAoaW5zZXJ0UG9zID09IG51bGwpXG4gICAgICAgIGluc2VydFBvcyA9ICRtb3VzZS5wb3M7XG4gICAgbGV0IHRyID0gdmlldy5zdGF0ZS50cjtcbiAgICBpZiAobW92ZSlcbiAgICAgICAgdHIuZGVsZXRlU2VsZWN0aW9uKCk7XG4gICAgbGV0IHBvcyA9IHRyLm1hcHBpbmcubWFwKGluc2VydFBvcyk7XG4gICAgbGV0IGlzTm9kZSA9IHNsaWNlLm9wZW5TdGFydCA9PSAwICYmIHNsaWNlLm9wZW5FbmQgPT0gMCAmJiBzbGljZS5jb250ZW50LmNoaWxkQ291bnQgPT0gMTtcbiAgICBsZXQgYmVmb3JlSW5zZXJ0ID0gdHIuZG9jO1xuICAgIGlmIChpc05vZGUpXG4gICAgICAgIHRyLnJlcGxhY2VSYW5nZVdpdGgocG9zLCBwb3MsIHNsaWNlLmNvbnRlbnQuZmlyc3RDaGlsZCk7XG4gICAgZWxzZVxuICAgICAgICB0ci5yZXBsYWNlUmFuZ2UocG9zLCBwb3MsIHNsaWNlKTtcbiAgICBpZiAodHIuZG9jLmVxKGJlZm9yZUluc2VydCkpXG4gICAgICAgIHJldHVybjtcbiAgICBsZXQgJHBvcyA9IHRyLmRvYy5yZXNvbHZlKHBvcyk7XG4gICAgaWYgKGlzTm9kZSAmJiBOb2RlU2VsZWN0aW9uLmlzU2VsZWN0YWJsZShzbGljZS5jb250ZW50LmZpcnN0Q2hpbGQpICYmXG4gICAgICAgICRwb3Mubm9kZUFmdGVyICYmICRwb3Mubm9kZUFmdGVyLnNhbWVNYXJrdXAoc2xpY2UuY29udGVudC5maXJzdENoaWxkKSkge1xuICAgICAgICB0ci5zZXRTZWxlY3Rpb24obmV3IE5vZGVTZWxlY3Rpb24oJHBvcykpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGV0IGVuZCA9IHRyLm1hcHBpbmcubWFwKGluc2VydFBvcyk7XG4gICAgICAgIHRyLm1hcHBpbmcubWFwc1t0ci5tYXBwaW5nLm1hcHMubGVuZ3RoIC0gMV0uZm9yRWFjaCgoX2Zyb20sIF90bywgX25ld0Zyb20sIG5ld1RvKSA9PiBlbmQgPSBuZXdUbyk7XG4gICAgICAgIHRyLnNldFNlbGVjdGlvbihzZWxlY3Rpb25CZXR3ZWVuKHZpZXcsICRwb3MsIHRyLmRvYy5yZXNvbHZlKGVuZCkpKTtcbiAgICB9XG4gICAgdmlldy5mb2N1cygpO1xuICAgIHZpZXcuZGlzcGF0Y2godHIuc2V0TWV0YShcInVpRXZlbnRcIiwgXCJkcm9wXCIpKTtcbn07XG5oYW5kbGVycy5mb2N1cyA9IHZpZXcgPT4ge1xuICAgIHZpZXcuaW5wdXQubGFzdEZvY3VzID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIXZpZXcuZm9jdXNlZCkge1xuICAgICAgICB2aWV3LmRvbU9ic2VydmVyLnN0b3AoKTtcbiAgICAgICAgdmlldy5kb20uY2xhc3NMaXN0LmFkZChcIlByb3NlTWlycm9yLWZvY3VzZWRcIik7XG4gICAgICAgIHZpZXcuZG9tT2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICAgICAgdmlldy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodmlldy5kb2NWaWV3ICYmIHZpZXcuaGFzRm9jdXMoKSAmJiAhdmlldy5kb21PYnNlcnZlci5jdXJyZW50U2VsZWN0aW9uLmVxKHZpZXcuZG9tU2VsZWN0aW9uUmFuZ2UoKSkpXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uVG9ET00odmlldyk7XG4gICAgICAgIH0sIDIwKTtcbiAgICB9XG59O1xuaGFuZGxlcnMuYmx1ciA9ICh2aWV3LCBfZXZlbnQpID0+IHtcbiAgICBsZXQgZXZlbnQgPSBfZXZlbnQ7XG4gICAgaWYgKHZpZXcuZm9jdXNlZCkge1xuICAgICAgICB2aWV3LmRvbU9ic2VydmVyLnN0b3AoKTtcbiAgICAgICAgdmlldy5kb20uY2xhc3NMaXN0LnJlbW92ZShcIlByb3NlTWlycm9yLWZvY3VzZWRcIik7XG4gICAgICAgIHZpZXcuZG9tT2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICAgICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgJiYgdmlldy5kb20uY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpXG4gICAgICAgICAgICB2aWV3LmRvbU9ic2VydmVyLmN1cnJlbnRTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdmlldy5mb2N1c2VkID0gZmFsc2U7XG4gICAgfVxufTtcbmhhbmRsZXJzLmJlZm9yZWlucHV0ID0gKHZpZXcsIF9ldmVudCkgPT4ge1xuICAgIGxldCBldmVudCA9IF9ldmVudDtcbiAgICAvLyBXZSBzaG91bGQgcHJvYmFibHkgZG8gbW9yZSB3aXRoIGJlZm9yZWlucHV0IGV2ZW50cywgYnV0IHN1cHBvcnRcbiAgICAvLyBpcyBzbyBzcG90dHkgdGhhdCBJJ20gc3RpbGwgd2FpdGluZyB0byBzZWUgd2hlcmUgdGhleSBhcmUgZ29pbmcuXG4gICAgLy8gVmVyeSBzcGVjaWZpYyBoYWNrIHRvIGRlYWwgd2l0aCBiYWNrc3BhY2Ugc29tZXRpbWVzIGZhaWxpbmcgb25cbiAgICAvLyBDaHJvbWUgQW5kcm9pZCB3aGVuIGFmdGVyIGFuIHVuZWRpdGFibGUgbm9kZS5cbiAgICBpZiAoY2hyb21lICYmIGFuZHJvaWQgJiYgZXZlbnQuaW5wdXRUeXBlID09IFwiZGVsZXRlQ29udGVudEJhY2t3YXJkXCIpIHtcbiAgICAgICAgdmlldy5kb21PYnNlcnZlci5mbHVzaFNvb24oKTtcbiAgICAgICAgbGV0IHsgZG9tQ2hhbmdlQ291bnQgfSA9IHZpZXcuaW5wdXQ7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHZpZXcuaW5wdXQuZG9tQ2hhbmdlQ291bnQgIT0gZG9tQ2hhbmdlQ291bnQpXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBFdmVudCBhbHJlYWR5IGhhZCBzb21lIGVmZmVjdFxuICAgICAgICAgICAgLy8gVGhpcyBidWcgdGVuZHMgdG8gY2xvc2UgdGhlIHZpcnR1YWwga2V5Ym9hcmQsIHNvIHdlIHJlZm9jdXNcbiAgICAgICAgICAgIHZpZXcuZG9tLmJsdXIoKTtcbiAgICAgICAgICAgIHZpZXcuZm9jdXMoKTtcbiAgICAgICAgICAgIGlmICh2aWV3LnNvbWVQcm9wKFwiaGFuZGxlS2V5RG93blwiLCBmID0+IGYodmlldywga2V5RXZlbnQoOCwgXCJCYWNrc3BhY2VcIikpKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBsZXQgeyAkY3Vyc29yIH0gPSB2aWV3LnN0YXRlLnNlbGVjdGlvbjtcbiAgICAgICAgICAgIC8vIENydWRlIGFwcHJveGltYXRpb24gb2YgYmFja3NwYWNlIGJlaGF2aW9yIHdoZW4gbm8gY29tbWFuZCBoYW5kbGVkIGl0XG4gICAgICAgICAgICBpZiAoJGN1cnNvciAmJiAkY3Vyc29yLnBvcyA+IDApXG4gICAgICAgICAgICAgICAgdmlldy5kaXNwYXRjaCh2aWV3LnN0YXRlLnRyLmRlbGV0ZSgkY3Vyc29yLnBvcyAtIDEsICRjdXJzb3IucG9zKS5zY3JvbGxJbnRvVmlldygpKTtcbiAgICAgICAgfSwgNTApO1xuICAgIH1cbn07XG4vLyBNYWtlIHN1cmUgYWxsIGhhbmRsZXJzIGdldCByZWdpc3RlcmVkXG5mb3IgKGxldCBwcm9wIGluIGVkaXRIYW5kbGVycylcbiAgICBoYW5kbGVyc1twcm9wXSA9IGVkaXRIYW5kbGVyc1twcm9wXTtcblxuZnVuY3Rpb24gY29tcGFyZU9ianMoYSwgYikge1xuICAgIGlmIChhID09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGZvciAobGV0IHAgaW4gYSlcbiAgICAgICAgaWYgKGFbcF0gIT09IGJbcF0pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgcCBpbiBiKVxuICAgICAgICBpZiAoIShwIGluIGEpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xufVxuY2xhc3MgV2lkZ2V0VHlwZSB7XG4gICAgY29uc3RydWN0b3IodG9ET00sIHNwZWMpIHtcbiAgICAgICAgdGhpcy50b0RPTSA9IHRvRE9NO1xuICAgICAgICB0aGlzLnNwZWMgPSBzcGVjIHx8IG5vU3BlYztcbiAgICAgICAgdGhpcy5zaWRlID0gdGhpcy5zcGVjLnNpZGUgfHwgMDtcbiAgICB9XG4gICAgbWFwKG1hcHBpbmcsIHNwYW4sIG9mZnNldCwgb2xkT2Zmc2V0KSB7XG4gICAgICAgIGxldCB7IHBvcywgZGVsZXRlZCB9ID0gbWFwcGluZy5tYXBSZXN1bHQoc3Bhbi5mcm9tICsgb2xkT2Zmc2V0LCB0aGlzLnNpZGUgPCAwID8gLTEgOiAxKTtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZWQgPyBudWxsIDogbmV3IERlY29yYXRpb24ocG9zIC0gb2Zmc2V0LCBwb3MgLSBvZmZzZXQsIHRoaXMpO1xuICAgIH1cbiAgICB2YWxpZCgpIHsgcmV0dXJuIHRydWU7IH1cbiAgICBlcShvdGhlcikge1xuICAgICAgICByZXR1cm4gdGhpcyA9PSBvdGhlciB8fFxuICAgICAgICAgICAgKG90aGVyIGluc3RhbmNlb2YgV2lkZ2V0VHlwZSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLnNwZWMua2V5ICYmIHRoaXMuc3BlYy5rZXkgPT0gb3RoZXIuc3BlYy5rZXkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b0RPTSA9PSBvdGhlci50b0RPTSAmJiBjb21wYXJlT2Jqcyh0aGlzLnNwZWMsIG90aGVyLnNwZWMpKSk7XG4gICAgfVxuICAgIGRlc3Ryb3kobm9kZSkge1xuICAgICAgICBpZiAodGhpcy5zcGVjLmRlc3Ryb3kpXG4gICAgICAgICAgICB0aGlzLnNwZWMuZGVzdHJveShub2RlKTtcbiAgICB9XG59XG5jbGFzcyBJbmxpbmVUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihhdHRycywgc3BlYykge1xuICAgICAgICB0aGlzLmF0dHJzID0gYXR0cnM7XG4gICAgICAgIHRoaXMuc3BlYyA9IHNwZWMgfHwgbm9TcGVjO1xuICAgIH1cbiAgICBtYXAobWFwcGluZywgc3Bhbiwgb2Zmc2V0LCBvbGRPZmZzZXQpIHtcbiAgICAgICAgbGV0IGZyb20gPSBtYXBwaW5nLm1hcChzcGFuLmZyb20gKyBvbGRPZmZzZXQsIHRoaXMuc3BlYy5pbmNsdXNpdmVTdGFydCA/IC0xIDogMSkgLSBvZmZzZXQ7XG4gICAgICAgIGxldCB0byA9IG1hcHBpbmcubWFwKHNwYW4udG8gKyBvbGRPZmZzZXQsIHRoaXMuc3BlYy5pbmNsdXNpdmVFbmQgPyAxIDogLTEpIC0gb2Zmc2V0O1xuICAgICAgICByZXR1cm4gZnJvbSA+PSB0byA/IG51bGwgOiBuZXcgRGVjb3JhdGlvbihmcm9tLCB0bywgdGhpcyk7XG4gICAgfVxuICAgIHZhbGlkKF8sIHNwYW4pIHsgcmV0dXJuIHNwYW4uZnJvbSA8IHNwYW4udG87IH1cbiAgICBlcShvdGhlcikge1xuICAgICAgICByZXR1cm4gdGhpcyA9PSBvdGhlciB8fFxuICAgICAgICAgICAgKG90aGVyIGluc3RhbmNlb2YgSW5saW5lVHlwZSAmJiBjb21wYXJlT2Jqcyh0aGlzLmF0dHJzLCBvdGhlci5hdHRycykgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlT2Jqcyh0aGlzLnNwZWMsIG90aGVyLnNwZWMpKTtcbiAgICB9XG4gICAgc3RhdGljIGlzKHNwYW4pIHsgcmV0dXJuIHNwYW4udHlwZSBpbnN0YW5jZW9mIElubGluZVR5cGU7IH1cbiAgICBkZXN0cm95KCkgeyB9XG59XG5jbGFzcyBOb2RlVHlwZSB7XG4gICAgY29uc3RydWN0b3IoYXR0cnMsIHNwZWMpIHtcbiAgICAgICAgdGhpcy5hdHRycyA9IGF0dHJzO1xuICAgICAgICB0aGlzLnNwZWMgPSBzcGVjIHx8IG5vU3BlYztcbiAgICB9XG4gICAgbWFwKG1hcHBpbmcsIHNwYW4sIG9mZnNldCwgb2xkT2Zmc2V0KSB7XG4gICAgICAgIGxldCBmcm9tID0gbWFwcGluZy5tYXBSZXN1bHQoc3Bhbi5mcm9tICsgb2xkT2Zmc2V0LCAxKTtcbiAgICAgICAgaWYgKGZyb20uZGVsZXRlZClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBsZXQgdG8gPSBtYXBwaW5nLm1hcFJlc3VsdChzcGFuLnRvICsgb2xkT2Zmc2V0LCAtMSk7XG4gICAgICAgIGlmICh0by5kZWxldGVkIHx8IHRvLnBvcyA8PSBmcm9tLnBvcylcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gbmV3IERlY29yYXRpb24oZnJvbS5wb3MgLSBvZmZzZXQsIHRvLnBvcyAtIG9mZnNldCwgdGhpcyk7XG4gICAgfVxuICAgIHZhbGlkKG5vZGUsIHNwYW4pIHtcbiAgICAgICAgbGV0IHsgaW5kZXgsIG9mZnNldCB9ID0gbm9kZS5jb250ZW50LmZpbmRJbmRleChzcGFuLmZyb20pLCBjaGlsZDtcbiAgICAgICAgcmV0dXJuIG9mZnNldCA9PSBzcGFuLmZyb20gJiYgIShjaGlsZCA9IG5vZGUuY2hpbGQoaW5kZXgpKS5pc1RleHQgJiYgb2Zmc2V0ICsgY2hpbGQubm9kZVNpemUgPT0gc3Bhbi50bztcbiAgICB9XG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMgPT0gb3RoZXIgfHxcbiAgICAgICAgICAgIChvdGhlciBpbnN0YW5jZW9mIE5vZGVUeXBlICYmIGNvbXBhcmVPYmpzKHRoaXMuYXR0cnMsIG90aGVyLmF0dHJzKSAmJlxuICAgICAgICAgICAgICAgIGNvbXBhcmVPYmpzKHRoaXMuc3BlYywgb3RoZXIuc3BlYykpO1xuICAgIH1cbiAgICBkZXN0cm95KCkgeyB9XG59XG4vKipcbkRlY29yYXRpb24gb2JqZWN0cyBjYW4gYmUgcHJvdmlkZWQgdG8gdGhlIHZpZXcgdGhyb3VnaCB0aGVcbltgZGVjb3JhdGlvbnNgIHByb3BdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyN2aWV3LkVkaXRvclByb3BzLmRlY29yYXRpb25zKS4gVGhleSBjb21lIGluXG5zZXZlcmFsIHZhcmlhbnRz4oCUc2VlIHRoZSBzdGF0aWMgbWVtYmVycyBvZiB0aGlzIGNsYXNzIGZvciBkZXRhaWxzLlxuKi9cbmNsYXNzIERlY29yYXRpb24ge1xuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBkZWNvcmF0aW9uLlxuICAgICovXG4gICAgZnJvbSwgXG4gICAgLyoqXG4gICAgVGhlIGVuZCBwb3NpdGlvbi4gV2lsbCBiZSB0aGUgc2FtZSBhcyBgZnJvbWAgZm9yIFt3aWRnZXRcbiAgICBkZWNvcmF0aW9uc10oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI3ZpZXcuRGVjb3JhdGlvbl53aWRnZXQpLlxuICAgICovXG4gICAgdG8sIFxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgdHlwZSkge1xuICAgICAgICB0aGlzLmZyb20gPSBmcm9tO1xuICAgICAgICB0aGlzLnRvID0gdG87XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgfVxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgY29weShmcm9tLCB0bykge1xuICAgICAgICByZXR1cm4gbmV3IERlY29yYXRpb24oZnJvbSwgdG8sIHRoaXMudHlwZSk7XG4gICAgfVxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgZXEob3RoZXIsIG9mZnNldCA9IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZS5lcShvdGhlci50eXBlKSAmJiB0aGlzLmZyb20gKyBvZmZzZXQgPT0gb3RoZXIuZnJvbSAmJiB0aGlzLnRvICsgb2Zmc2V0ID09IG90aGVyLnRvO1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIG1hcChtYXBwaW5nLCBvZmZzZXQsIG9sZE9mZnNldCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlLm1hcChtYXBwaW5nLCB0aGlzLCBvZmZzZXQsIG9sZE9mZnNldCk7XG4gICAgfVxuICAgIC8qKlxuICAgIENyZWF0ZXMgYSB3aWRnZXQgZGVjb3JhdGlvbiwgd2hpY2ggaXMgYSBET00gbm9kZSB0aGF0J3Mgc2hvd24gaW5cbiAgICB0aGUgZG9jdW1lbnQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdVxuICAgIGRlbGF5IHJlbmRlcmluZyB0aGUgd2lkZ2V0IGJ5IHBhc3NpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmVcbiAgICBjYWxsZWQgd2hlbiB0aGUgd2lkZ2V0IGlzIGFjdHVhbGx5IGRyYXduIGluIGEgdmlldywgYnV0IHlvdSBjYW5cbiAgICBhbHNvIGRpcmVjdGx5IHBhc3MgYSBET00gbm9kZS4gYGdldFBvc2AgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGVcbiAgICB3aWRnZXQncyBjdXJyZW50IGRvY3VtZW50IHBvc2l0aW9uLlxuICAgICovXG4gICAgc3RhdGljIHdpZGdldChwb3MsIHRvRE9NLCBzcGVjKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVjb3JhdGlvbihwb3MsIHBvcywgbmV3IFdpZGdldFR5cGUodG9ET00sIHNwZWMpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQ3JlYXRlcyBhbiBpbmxpbmUgZGVjb3JhdGlvbiwgd2hpY2ggYWRkcyB0aGUgZ2l2ZW4gYXR0cmlidXRlcyB0b1xuICAgIGVhY2ggaW5saW5lIG5vZGUgYmV0d2VlbiBgZnJvbWAgYW5kIGB0b2AuXG4gICAgKi9cbiAgICBzdGF0aWMgaW5saW5lKGZyb20sIHRvLCBhdHRycywgc3BlYykge1xuICAgICAgICByZXR1cm4gbmV3IERlY29yYXRpb24oZnJvbSwgdG8sIG5ldyBJbmxpbmVUeXBlKGF0dHJzLCBzcGVjKSk7XG4gICAgfVxuICAgIC8qKlxuICAgIENyZWF0ZXMgYSBub2RlIGRlY29yYXRpb24uIGBmcm9tYCBhbmQgYHRvYCBzaG91bGQgcG9pbnQgcHJlY2lzZWx5XG4gICAgYmVmb3JlIGFuZCBhZnRlciBhIG5vZGUgaW4gdGhlIGRvY3VtZW50LiBUaGF0IG5vZGUsIGFuZCBvbmx5IHRoYXRcbiAgICBub2RlLCB3aWxsIHJlY2VpdmUgdGhlIGdpdmVuIGF0dHJpYnV0ZXMuXG4gICAgKi9cbiAgICBzdGF0aWMgbm9kZShmcm9tLCB0bywgYXR0cnMsIHNwZWMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWNvcmF0aW9uKGZyb20sIHRvLCBuZXcgTm9kZVR5cGUoYXR0cnMsIHNwZWMpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgVGhlIHNwZWMgcHJvdmlkZWQgd2hlbiBjcmVhdGluZyB0aGlzIGRlY29yYXRpb24uIENhbiBiZSB1c2VmdWxcbiAgICBpZiB5b3UndmUgc3RvcmVkIGV4dHJhIGluZm9ybWF0aW9uIGluIHRoYXQgb2JqZWN0LlxuICAgICovXG4gICAgZ2V0IHNwZWMoKSB7IHJldHVybiB0aGlzLnR5cGUuc3BlYzsgfVxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgZ2V0IGlubGluZSgpIHsgcmV0dXJuIHRoaXMudHlwZSBpbnN0YW5jZW9mIElubGluZVR5cGU7IH1cbn1cbmNvbnN0IG5vbmUgPSBbXSwgbm9TcGVjID0ge307XG4vKipcbkEgY29sbGVjdGlvbiBvZiBbZGVjb3JhdGlvbnNdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyN2aWV3LkRlY29yYXRpb24pLCBvcmdhbml6ZWQgaW4gc3VjaFxuYSB3YXkgdGhhdCB0aGUgZHJhd2luZyBhbGdvcml0aG0gY2FuIGVmZmljaWVudGx5IHVzZSBhbmQgY29tcGFyZVxudGhlbS4gVGhpcyBpcyBhIHBlcnNpc3RlbnQgZGF0YSBzdHJ1Y3R1cmXigJRpdCBpcyBub3QgbW9kaWZpZWQsXG51cGRhdGVzIGNyZWF0ZSBhIG5ldyB2YWx1ZS5cbiovXG5jbGFzcyBEZWNvcmF0aW9uU2V0IHtcbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsLCBjaGlsZHJlbikge1xuICAgICAgICB0aGlzLmxvY2FsID0gbG9jYWwubGVuZ3RoID8gbG9jYWwgOiBub25lO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW4ubGVuZ3RoID8gY2hpbGRyZW4gOiBub25lO1xuICAgIH1cbiAgICAvKipcbiAgICBDcmVhdGUgYSBzZXQgb2YgZGVjb3JhdGlvbnMsIHVzaW5nIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGdpdmVuXG4gICAgZG9jdW1lbnQuXG4gICAgKi9cbiAgICBzdGF0aWMgY3JlYXRlKGRvYywgZGVjb3JhdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRlY29yYXRpb25zLmxlbmd0aCA/IGJ1aWxkVHJlZShkZWNvcmF0aW9ucywgZG9jLCAwLCBub1NwZWMpIDogZW1wdHk7XG4gICAgfVxuICAgIC8qKlxuICAgIEZpbmQgYWxsIGRlY29yYXRpb25zIGluIHRoaXMgc2V0IHdoaWNoIHRvdWNoIHRoZSBnaXZlbiByYW5nZVxuICAgIChpbmNsdWRpbmcgZGVjb3JhdGlvbnMgdGhhdCBzdGFydCBvciBlbmQgZGlyZWN0bHkgYXQgdGhlXG4gICAgYm91bmRhcmllcykgYW5kIG1hdGNoIHRoZSBnaXZlbiBwcmVkaWNhdGUgb24gdGhlaXIgc3BlYy4gV2hlblxuICAgIGBzdGFydGAgYW5kIGBlbmRgIGFyZSBvbWl0dGVkLCBhbGwgZGVjb3JhdGlvbnMgaW4gdGhlIHNldCBhcmVcbiAgICBjb25zaWRlcmVkLiBXaGVuIGBwcmVkaWNhdGVgIGlzbid0IGdpdmVuLCBhbGwgZGVjb3JhdGlvbnMgYXJlXG4gICAgYXNzdW1lZCB0byBtYXRjaC5cbiAgICAqL1xuICAgIGZpbmQoc3RhcnQsIGVuZCwgcHJlZGljYXRlKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgdGhpcy5maW5kSW5uZXIoc3RhcnQgPT0gbnVsbCA/IDAgOiBzdGFydCwgZW5kID09IG51bGwgPyAxZTkgOiBlbmQsIHJlc3VsdCwgMCwgcHJlZGljYXRlKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZmluZElubmVyKHN0YXJ0LCBlbmQsIHJlc3VsdCwgb2Zmc2V0LCBwcmVkaWNhdGUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxvY2FsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgc3BhbiA9IHRoaXMubG9jYWxbaV07XG4gICAgICAgICAgICBpZiAoc3Bhbi5mcm9tIDw9IGVuZCAmJiBzcGFuLnRvID49IHN0YXJ0ICYmICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZShzcGFuLnNwZWMpKSlcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChzcGFuLmNvcHkoc3Bhbi5mcm9tICsgb2Zmc2V0LCBzcGFuLnRvICsgb2Zmc2V0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbltpXSA8IGVuZCAmJiB0aGlzLmNoaWxkcmVuW2kgKyAxXSA+IHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkT2ZmID0gdGhpcy5jaGlsZHJlbltpXSArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpICsgMl0uZmluZElubmVyKHN0YXJ0IC0gY2hpbGRPZmYsIGVuZCAtIGNoaWxkT2ZmLCByZXN1bHQsIG9mZnNldCArIGNoaWxkT2ZmLCBwcmVkaWNhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgIE1hcCB0aGUgc2V0IG9mIGRlY29yYXRpb25zIGluIHJlc3BvbnNlIHRvIGEgY2hhbmdlIGluIHRoZVxuICAgIGRvY3VtZW50LlxuICAgICovXG4gICAgbWFwKG1hcHBpbmcsIGRvYywgb3B0aW9ucykge1xuICAgICAgICBpZiAodGhpcyA9PSBlbXB0eSB8fCBtYXBwaW5nLm1hcHMubGVuZ3RoID09IDApXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5uZXIobWFwcGluZywgZG9jLCAwLCAwLCBvcHRpb25zIHx8IG5vU3BlYyk7XG4gICAgfVxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgbWFwSW5uZXIobWFwcGluZywgbm9kZSwgb2Zmc2V0LCBvbGRPZmZzZXQsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IG5ld0xvY2FsO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubG9jYWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBtYXBwZWQgPSB0aGlzLmxvY2FsW2ldLm1hcChtYXBwaW5nLCBvZmZzZXQsIG9sZE9mZnNldCk7XG4gICAgICAgICAgICBpZiAobWFwcGVkICYmIG1hcHBlZC50eXBlLnZhbGlkKG5vZGUsIG1hcHBlZCkpXG4gICAgICAgICAgICAgICAgKG5ld0xvY2FsIHx8IChuZXdMb2NhbCA9IFtdKSkucHVzaChtYXBwZWQpO1xuICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5vblJlbW92ZSlcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9uUmVtb3ZlKHRoaXMubG9jYWxbaV0uc3BlYyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIG1hcENoaWxkcmVuKHRoaXMuY2hpbGRyZW4sIG5ld0xvY2FsIHx8IFtdLCBtYXBwaW5nLCBub2RlLCBvZmZzZXQsIG9sZE9mZnNldCwgb3B0aW9ucyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBuZXdMb2NhbCA/IG5ldyBEZWNvcmF0aW9uU2V0KG5ld0xvY2FsLnNvcnQoYnlQb3MpLCBub25lKSA6IGVtcHR5O1xuICAgIH1cbiAgICAvKipcbiAgICBBZGQgdGhlIGdpdmVuIGFycmF5IG9mIGRlY29yYXRpb25zIHRvIHRoZSBvbmVzIGluIHRoZSBzZXQsXG4gICAgcHJvZHVjaW5nIGEgbmV3IHNldC4gTmVlZHMgYWNjZXNzIHRvIHRoZSBjdXJyZW50IGRvY3VtZW50IHRvXG4gICAgY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB0cmVlIHN0cnVjdHVyZS5cbiAgICAqL1xuICAgIGFkZChkb2MsIGRlY29yYXRpb25zKSB7XG4gICAgICAgIGlmICghZGVjb3JhdGlvbnMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIGlmICh0aGlzID09IGVtcHR5KVxuICAgICAgICAgICAgcmV0dXJuIERlY29yYXRpb25TZXQuY3JlYXRlKGRvYywgZGVjb3JhdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRJbm5lcihkb2MsIGRlY29yYXRpb25zLCAwKTtcbiAgICB9XG4gICAgYWRkSW5uZXIoZG9jLCBkZWNvcmF0aW9ucywgb2Zmc2V0KSB7XG4gICAgICAgIGxldCBjaGlsZHJlbiwgY2hpbGRJbmRleCA9IDA7XG4gICAgICAgIGRvYy5mb3JFYWNoKChjaGlsZE5vZGUsIGNoaWxkT2Zmc2V0KSA9PiB7XG4gICAgICAgICAgICBsZXQgYmFzZU9mZnNldCA9IGNoaWxkT2Zmc2V0ICsgb2Zmc2V0LCBmb3VuZDtcbiAgICAgICAgICAgIGlmICghKGZvdW5kID0gdGFrZVNwYW5zRm9yTm9kZShkZWNvcmF0aW9ucywgY2hpbGROb2RlLCBiYXNlT2Zmc2V0KSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbilcbiAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHdoaWxlIChjaGlsZEluZGV4IDwgY2hpbGRyZW4ubGVuZ3RoICYmIGNoaWxkcmVuW2NoaWxkSW5kZXhdIDwgY2hpbGRPZmZzZXQpXG4gICAgICAgICAgICAgICAgY2hpbGRJbmRleCArPSAzO1xuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2NoaWxkSW5kZXhdID09IGNoaWxkT2Zmc2V0KVxuICAgICAgICAgICAgICAgIGNoaWxkcmVuW2NoaWxkSW5kZXggKyAyXSA9IGNoaWxkcmVuW2NoaWxkSW5kZXggKyAyXS5hZGRJbm5lcihjaGlsZE5vZGUsIGZvdW5kLCBiYXNlT2Zmc2V0ICsgMSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGNoaWxkSW5kZXgsIDAsIGNoaWxkT2Zmc2V0LCBjaGlsZE9mZnNldCArIGNoaWxkTm9kZS5ub2RlU2l6ZSwgYnVpbGRUcmVlKGZvdW5kLCBjaGlsZE5vZGUsIGJhc2VPZmZzZXQgKyAxLCBub1NwZWMpKTtcbiAgICAgICAgICAgIGNoaWxkSW5kZXggKz0gMztcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBsb2NhbCA9IG1vdmVTcGFucyhjaGlsZEluZGV4ID8gd2l0aG91dE51bGxzKGRlY29yYXRpb25zKSA6IGRlY29yYXRpb25zLCAtb2Zmc2V0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2NhbC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGlmICghbG9jYWxbaV0udHlwZS52YWxpZChkb2MsIGxvY2FsW2ldKSlcbiAgICAgICAgICAgICAgICBsb2NhbC5zcGxpY2UoaS0tLCAxKTtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWNvcmF0aW9uU2V0KGxvY2FsLmxlbmd0aCA/IHRoaXMubG9jYWwuY29uY2F0KGxvY2FsKS5zb3J0KGJ5UG9zKSA6IHRoaXMubG9jYWwsIGNoaWxkcmVuIHx8IHRoaXMuY2hpbGRyZW4pO1xuICAgIH1cbiAgICAvKipcbiAgICBDcmVhdGUgYSBuZXcgc2V0IHRoYXQgY29udGFpbnMgdGhlIGRlY29yYXRpb25zIGluIHRoaXMgc2V0LCBtaW51c1xuICAgIHRoZSBvbmVzIGluIHRoZSBnaXZlbiBhcnJheS5cbiAgICAqL1xuICAgIHJlbW92ZShkZWNvcmF0aW9ucykge1xuICAgICAgICBpZiAoZGVjb3JhdGlvbnMubGVuZ3RoID09IDAgfHwgdGhpcyA9PSBlbXB0eSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVJbm5lcihkZWNvcmF0aW9ucywgMCk7XG4gICAgfVxuICAgIHJlbW92ZUlubmVyKGRlY29yYXRpb25zLCBvZmZzZXQpIHtcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbiwgbG9jYWwgPSB0aGlzLmxvY2FsO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgICAgICBsZXQgZm91bmQ7XG4gICAgICAgICAgICBsZXQgZnJvbSA9IGNoaWxkcmVuW2ldICsgb2Zmc2V0LCB0byA9IGNoaWxkcmVuW2kgKyAxXSArIG9mZnNldDtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwLCBzcGFuOyBqIDwgZGVjb3JhdGlvbnMubGVuZ3RoOyBqKyspXG4gICAgICAgICAgICAgICAgaWYgKHNwYW4gPSBkZWNvcmF0aW9uc1tqXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Bhbi5mcm9tID4gZnJvbSAmJiBzcGFuLnRvIDwgdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlY29yYXRpb25zW2pdID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIChmb3VuZCB8fCAoZm91bmQgPSBbXSkpLnB1c2goc3Bhbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWZvdW5kKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKGNoaWxkcmVuID09IHRoaXMuY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuLnNsaWNlKCk7XG4gICAgICAgICAgICBsZXQgcmVtb3ZlZCA9IGNoaWxkcmVuW2kgKyAyXS5yZW1vdmVJbm5lcihmb3VuZCwgZnJvbSArIDEpO1xuICAgICAgICAgICAgaWYgKHJlbW92ZWQgIT0gZW1wdHkpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbltpICsgMl0gPSByZW1vdmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGksIDMpO1xuICAgICAgICAgICAgICAgIGkgLT0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWwubGVuZ3RoKVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIHNwYW47IGkgPCBkZWNvcmF0aW9ucy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICBpZiAoc3BhbiA9IGRlY29yYXRpb25zW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbG9jYWwubGVuZ3RoOyBqKyspXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxbal0uZXEoc3Bhbiwgb2Zmc2V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbCA9PSB0aGlzLmxvY2FsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCA9IHRoaXMubG9jYWwuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbC5zcGxpY2Uoai0tLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZHJlbiA9PSB0aGlzLmNoaWxkcmVuICYmIGxvY2FsID09IHRoaXMubG9jYWwpXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgcmV0dXJuIGxvY2FsLmxlbmd0aCB8fCBjaGlsZHJlbi5sZW5ndGggPyBuZXcgRGVjb3JhdGlvblNldChsb2NhbCwgY2hpbGRyZW4pIDogZW1wdHk7XG4gICAgfVxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgZm9yQ2hpbGQob2Zmc2V0LCBub2RlKSB7XG4gICAgICAgIGlmICh0aGlzID09IGVtcHR5KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIGlmIChub2RlLmlzTGVhZilcbiAgICAgICAgICAgIHJldHVybiBEZWNvcmF0aW9uU2V0LmVtcHR5O1xuICAgICAgICBsZXQgY2hpbGQsIGxvY2FsO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpICs9IDMpXG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbltpXSA+PSBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbltpXSA9PSBvZmZzZXQpXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpICsgMl07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIGxldCBzdGFydCA9IG9mZnNldCArIDEsIGVuZCA9IHN0YXJ0ICsgbm9kZS5jb250ZW50LnNpemU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sb2NhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGRlYyA9IHRoaXMubG9jYWxbaV07XG4gICAgICAgICAgICBpZiAoZGVjLmZyb20gPCBlbmQgJiYgZGVjLnRvID4gc3RhcnQgJiYgKGRlYy50eXBlIGluc3RhbmNlb2YgSW5saW5lVHlwZSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgZnJvbSA9IE1hdGgubWF4KHN0YXJ0LCBkZWMuZnJvbSkgLSBzdGFydCwgdG8gPSBNYXRoLm1pbihlbmQsIGRlYy50bykgLSBzdGFydDtcbiAgICAgICAgICAgICAgICBpZiAoZnJvbSA8IHRvKVxuICAgICAgICAgICAgICAgICAgICAobG9jYWwgfHwgKGxvY2FsID0gW10pKS5wdXNoKGRlYy5jb3B5KGZyb20sIHRvKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsKSB7XG4gICAgICAgICAgICBsZXQgbG9jYWxTZXQgPSBuZXcgRGVjb3JhdGlvblNldChsb2NhbC5zb3J0KGJ5UG9zKSwgbm9uZSk7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQgPyBuZXcgRGVjb3JhdGlvbkdyb3VwKFtsb2NhbFNldCwgY2hpbGRdKSA6IGxvY2FsU2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZCB8fCBlbXB0eTtcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBlcShvdGhlcikge1xuICAgICAgICBpZiAodGhpcyA9PSBvdGhlcilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIERlY29yYXRpb25TZXQpIHx8XG4gICAgICAgICAgICB0aGlzLmxvY2FsLmxlbmd0aCAhPSBvdGhlci5sb2NhbC5sZW5ndGggfHxcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4ubGVuZ3RoICE9IG90aGVyLmNoaWxkcmVuLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxvY2FsLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgaWYgKCF0aGlzLmxvY2FsW2ldLmVxKG90aGVyLmxvY2FsW2ldKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgKz0gMylcbiAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldICE9IG90aGVyLmNoaWxkcmVuW2ldIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpICsgMV0gIT0gb3RoZXIuY2hpbGRyZW5baSArIDFdIHx8XG4gICAgICAgICAgICAgICAgIXRoaXMuY2hpbGRyZW5baSArIDJdLmVxKG90aGVyLmNoaWxkcmVuW2kgKyAyXSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBsb2NhbHMobm9kZSkge1xuICAgICAgICByZXR1cm4gcmVtb3ZlT3ZlcmxhcCh0aGlzLmxvY2Fsc0lubmVyKG5vZGUpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBsb2NhbHNJbm5lcihub2RlKSB7XG4gICAgICAgIGlmICh0aGlzID09IGVtcHR5KVxuICAgICAgICAgICAgcmV0dXJuIG5vbmU7XG4gICAgICAgIGlmIChub2RlLmlubGluZUNvbnRlbnQgfHwgIXRoaXMubG9jYWwuc29tZShJbmxpbmVUeXBlLmlzKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sb2NhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCEodGhpcy5sb2NhbFtpXS50eXBlIGluc3RhbmNlb2YgSW5saW5lVHlwZSkpXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5sb2NhbFtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vKipcblRoZSBlbXB0eSBzZXQgb2YgZGVjb3JhdGlvbnMuXG4qL1xuRGVjb3JhdGlvblNldC5lbXB0eSA9IG5ldyBEZWNvcmF0aW9uU2V0KFtdLCBbXSk7XG4vKipcbkBpbnRlcm5hbFxuKi9cbkRlY29yYXRpb25TZXQucmVtb3ZlT3ZlcmxhcCA9IHJlbW92ZU92ZXJsYXA7XG5jb25zdCBlbXB0eSA9IERlY29yYXRpb25TZXQuZW1wdHk7XG4vLyBBbiBhYnN0cmFjdGlvbiB0aGF0IGFsbG93cyB0aGUgY29kZSBkZWFsaW5nIHdpdGggZGVjb3JhdGlvbnMgdG9cbi8vIHRyZWF0IG11bHRpcGxlIERlY29yYXRpb25TZXQgb2JqZWN0cyBhcyBpZiBpdCB3ZXJlIGEgc2luZ2xlIG9iamVjdFxuLy8gd2l0aCAoYSBzdWJzZXQgb2YpIHRoZSBzYW1lIGludGVyZmFjZS5cbmNsYXNzIERlY29yYXRpb25Hcm91cCB7XG4gICAgY29uc3RydWN0b3IobWVtYmVycykge1xuICAgICAgICB0aGlzLm1lbWJlcnMgPSBtZW1iZXJzO1xuICAgIH1cbiAgICBtYXAobWFwcGluZywgZG9jKSB7XG4gICAgICAgIGNvbnN0IG1hcHBlZERlY29zID0gdGhpcy5tZW1iZXJzLm1hcChtZW1iZXIgPT4gbWVtYmVyLm1hcChtYXBwaW5nLCBkb2MsIG5vU3BlYykpO1xuICAgICAgICByZXR1cm4gRGVjb3JhdGlvbkdyb3VwLmZyb20obWFwcGVkRGVjb3MpO1xuICAgIH1cbiAgICBmb3JDaGlsZChvZmZzZXQsIGNoaWxkKSB7XG4gICAgICAgIGlmIChjaGlsZC5pc0xlYWYpXG4gICAgICAgICAgICByZXR1cm4gRGVjb3JhdGlvblNldC5lbXB0eTtcbiAgICAgICAgbGV0IGZvdW5kID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5tZW1iZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5tZW1iZXJzW2ldLmZvckNoaWxkKG9mZnNldCwgY2hpbGQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBlbXB0eSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBEZWNvcmF0aW9uR3JvdXApXG4gICAgICAgICAgICAgICAgZm91bmQgPSBmb3VuZC5jb25jYXQocmVzdWx0Lm1lbWJlcnMpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGZvdW5kLnB1c2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRGVjb3JhdGlvbkdyb3VwLmZyb20oZm91bmQpO1xuICAgIH1cbiAgICBlcShvdGhlcikge1xuICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIERlY29yYXRpb25Hcm91cCkgfHxcbiAgICAgICAgICAgIG90aGVyLm1lbWJlcnMubGVuZ3RoICE9IHRoaXMubWVtYmVycy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5tZW1iZXJzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgaWYgKCF0aGlzLm1lbWJlcnNbaV0uZXEob3RoZXIubWVtYmVyc1tpXSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgbG9jYWxzKG5vZGUpIHtcbiAgICAgICAgbGV0IHJlc3VsdCwgc29ydGVkID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1lbWJlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBsb2NhbHMgPSB0aGlzLm1lbWJlcnNbaV0ubG9jYWxzSW5uZXIobm9kZSk7XG4gICAgICAgICAgICBpZiAoIWxvY2Fscy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxvY2FscztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHNvcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxvY2Fscy5sZW5ndGg7IGorKylcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobG9jYWxzW2pdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0ID8gcmVtb3ZlT3ZlcmxhcChzb3J0ZWQgPyByZXN1bHQgOiByZXN1bHQuc29ydChieVBvcykpIDogbm9uZTtcbiAgICB9XG4gICAgLy8gQ3JlYXRlIGEgZ3JvdXAgZm9yIHRoZSBnaXZlbiBhcnJheSBvZiBkZWNvcmF0aW9uIHNldHMsIG9yIHJldHVyblxuICAgIC8vIGEgc2luZ2xlIHNldCB3aGVuIHBvc3NpYmxlLlxuICAgIHN0YXRpYyBmcm9tKG1lbWJlcnMpIHtcbiAgICAgICAgc3dpdGNoIChtZW1iZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZW1wdHk7XG4gICAgICAgICAgICBjYXNlIDE6IHJldHVybiBtZW1iZXJzWzBdO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIG5ldyBEZWNvcmF0aW9uR3JvdXAobWVtYmVycy5ldmVyeShtID0+IG0gaW5zdGFuY2VvZiBEZWNvcmF0aW9uU2V0KSA/IG1lbWJlcnMgOlxuICAgICAgICAgICAgICAgIG1lbWJlcnMucmVkdWNlKChyLCBtKSA9PiByLmNvbmNhdChtIGluc3RhbmNlb2YgRGVjb3JhdGlvblNldCA/IG0gOiBtLm1lbWJlcnMpLCBbXSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gbWFwQ2hpbGRyZW4ob2xkQ2hpbGRyZW4sIG5ld0xvY2FsLCBtYXBwaW5nLCBub2RlLCBvZmZzZXQsIG9sZE9mZnNldCwgb3B0aW9ucykge1xuICAgIGxldCBjaGlsZHJlbiA9IG9sZENoaWxkcmVuLnNsaWNlKCk7XG4gICAgLy8gTWFyayB0aGUgY2hpbGRyZW4gdGhhdCBhcmUgZGlyZWN0bHkgdG91Y2hlZCBieSBjaGFuZ2VzLCBhbmRcbiAgICAvLyBtb3ZlIHRob3NlIHRoYXQgYXJlIGFmdGVyIHRoZSBjaGFuZ2VzLlxuICAgIGZvciAobGV0IGkgPSAwLCBiYXNlT2Zmc2V0ID0gb2xkT2Zmc2V0OyBpIDwgbWFwcGluZy5tYXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBtb3ZlZCA9IDA7XG4gICAgICAgIG1hcHBpbmcubWFwc1tpXS5mb3JFYWNoKChvbGRTdGFydCwgb2xkRW5kLCBuZXdTdGFydCwgbmV3RW5kKSA9PiB7XG4gICAgICAgICAgICBsZXQgZFNpemUgPSAobmV3RW5kIC0gbmV3U3RhcnQpIC0gKG9sZEVuZCAtIG9sZFN0YXJ0KTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZW5kID0gY2hpbGRyZW5baSArIDFdO1xuICAgICAgICAgICAgICAgIGlmIChlbmQgPCAwIHx8IG9sZFN0YXJ0ID4gZW5kICsgYmFzZU9mZnNldCAtIG1vdmVkKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBsZXQgc3RhcnQgPSBjaGlsZHJlbltpXSArIGJhc2VPZmZzZXQgLSBtb3ZlZDtcbiAgICAgICAgICAgICAgICBpZiAob2xkRW5kID49IHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuW2kgKyAxXSA9IG9sZFN0YXJ0IDw9IHN0YXJ0ID8gLTIgOiAtMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobmV3U3RhcnQgPj0gb2Zmc2V0ICYmIGRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldICs9IGRTaXplO1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbltpICsgMV0gKz0gZFNpemU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbW92ZWQgKz0gZFNpemU7XG4gICAgICAgIH0pO1xuICAgICAgICBiYXNlT2Zmc2V0ID0gbWFwcGluZy5tYXBzW2ldLm1hcChiYXNlT2Zmc2V0LCAtMSk7XG4gICAgfVxuICAgIC8vIEZpbmQgdGhlIGNoaWxkIG5vZGVzIHRoYXQgc3RpbGwgY29ycmVzcG9uZCB0byBhIHNpbmdsZSBub2RlLFxuICAgIC8vIHJlY3Vyc2l2ZWx5IGNhbGwgbWFwSW5uZXIgb24gdGhlbSBhbmQgdXBkYXRlIHRoZWlyIHBvc2l0aW9ucy5cbiAgICBsZXQgbXVzdFJlYnVpbGQgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSArPSAzKVxuICAgICAgICBpZiAoY2hpbGRyZW5baSArIDFdIDwgMCkgeyAvLyBUb3VjaGVkIG5vZGVzXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baSArIDFdID09IC0yKSB7XG4gICAgICAgICAgICAgICAgbXVzdFJlYnVpbGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuW2kgKyAxXSA9IC0xO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGZyb20gPSBtYXBwaW5nLm1hcChvbGRDaGlsZHJlbltpXSArIG9sZE9mZnNldCksIGZyb21Mb2NhbCA9IGZyb20gLSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoZnJvbUxvY2FsIDwgMCB8fCBmcm9tTG9jYWwgPj0gbm9kZS5jb250ZW50LnNpemUpIHtcbiAgICAgICAgICAgICAgICBtdXN0UmVidWlsZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNdXN0IHJlYWQgb2xkQ2hpbGRyZW4gYmVjYXVzZSBjaGlsZHJlbiB3YXMgdGFnZ2VkIHdpdGggLTFcbiAgICAgICAgICAgIGxldCB0byA9IG1hcHBpbmcubWFwKG9sZENoaWxkcmVuW2kgKyAxXSArIG9sZE9mZnNldCwgLTEpLCB0b0xvY2FsID0gdG8gLSBvZmZzZXQ7XG4gICAgICAgICAgICBsZXQgeyBpbmRleCwgb2Zmc2V0OiBjaGlsZE9mZnNldCB9ID0gbm9kZS5jb250ZW50LmZpbmRJbmRleChmcm9tTG9jYWwpO1xuICAgICAgICAgICAgbGV0IGNoaWxkTm9kZSA9IG5vZGUubWF5YmVDaGlsZChpbmRleCk7XG4gICAgICAgICAgICBpZiAoY2hpbGROb2RlICYmIGNoaWxkT2Zmc2V0ID09IGZyb21Mb2NhbCAmJiBjaGlsZE9mZnNldCArIGNoaWxkTm9kZS5ub2RlU2l6ZSA9PSB0b0xvY2FsKSB7XG4gICAgICAgICAgICAgICAgbGV0IG1hcHBlZCA9IGNoaWxkcmVuW2kgKyAyXVxuICAgICAgICAgICAgICAgICAgICAubWFwSW5uZXIobWFwcGluZywgY2hpbGROb2RlLCBmcm9tICsgMSwgb2xkQ2hpbGRyZW5baV0gKyBvbGRPZmZzZXQgKyAxLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAobWFwcGVkICE9IGVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldID0gZnJvbUxvY2FsO1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbltpICsgMV0gPSB0b0xvY2FsO1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbltpICsgMl0gPSBtYXBwZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbltpICsgMV0gPSAtMjtcbiAgICAgICAgICAgICAgICAgICAgbXVzdFJlYnVpbGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG11c3RSZWJ1aWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIC8vIFJlbWFpbmluZyBjaGlsZHJlbiBtdXN0IGJlIGNvbGxlY3RlZCBhbmQgcmVidWlsdCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzdHJ1Y3R1cmVcbiAgICBpZiAobXVzdFJlYnVpbGQpIHtcbiAgICAgICAgbGV0IGRlY29yYXRpb25zID0gbWFwQW5kR2F0aGVyUmVtYWluaW5nRGVjb3JhdGlvbnMoY2hpbGRyZW4sIG9sZENoaWxkcmVuLCBuZXdMb2NhbCwgbWFwcGluZywgb2Zmc2V0LCBvbGRPZmZzZXQsIG9wdGlvbnMpO1xuICAgICAgICBsZXQgYnVpbHQgPSBidWlsZFRyZWUoZGVjb3JhdGlvbnMsIG5vZGUsIDAsIG9wdGlvbnMpO1xuICAgICAgICBuZXdMb2NhbCA9IGJ1aWx0LmxvY2FsO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSArPSAzKVxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2kgKyAxXSA8IDApIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5zcGxpY2UoaSwgMyk7XG4gICAgICAgICAgICAgICAgaSAtPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMCwgaiA9IDA7IGkgPCBidWlsdC5jaGlsZHJlbi5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICAgICAgbGV0IGZyb20gPSBidWlsdC5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgIHdoaWxlIChqIDwgY2hpbGRyZW4ubGVuZ3RoICYmIGNoaWxkcmVuW2pdIDwgZnJvbSlcbiAgICAgICAgICAgICAgICBqICs9IDM7XG4gICAgICAgICAgICBjaGlsZHJlbi5zcGxpY2UoaiwgMCwgYnVpbHQuY2hpbGRyZW5baV0sIGJ1aWx0LmNoaWxkcmVuW2kgKyAxXSwgYnVpbHQuY2hpbGRyZW5baSArIDJdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IERlY29yYXRpb25TZXQobmV3TG9jYWwuc29ydChieVBvcyksIGNoaWxkcmVuKTtcbn1cbmZ1bmN0aW9uIG1vdmVTcGFucyhzcGFucywgb2Zmc2V0KSB7XG4gICAgaWYgKCFvZmZzZXQgfHwgIXNwYW5zLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIHNwYW5zO1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBzcGFuID0gc3BhbnNbaV07XG4gICAgICAgIHJlc3VsdC5wdXNoKG5ldyBEZWNvcmF0aW9uKHNwYW4uZnJvbSArIG9mZnNldCwgc3Bhbi50byArIG9mZnNldCwgc3Bhbi50eXBlKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBtYXBBbmRHYXRoZXJSZW1haW5pbmdEZWNvcmF0aW9ucyhjaGlsZHJlbiwgb2xkQ2hpbGRyZW4sIGRlY29yYXRpb25zLCBtYXBwaW5nLCBvZmZzZXQsIG9sZE9mZnNldCwgb3B0aW9ucykge1xuICAgIC8vIEdhdGhlciBhbGwgZGVjb3JhdGlvbnMgZnJvbSB0aGUgcmVtYWluaW5nIG1hcmtlZCBjaGlsZHJlblxuICAgIGZ1bmN0aW9uIGdhdGhlcihzZXQsIG9sZE9mZnNldCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNldC5sb2NhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IG1hcHBlZCA9IHNldC5sb2NhbFtpXS5tYXAobWFwcGluZywgb2Zmc2V0LCBvbGRPZmZzZXQpO1xuICAgICAgICAgICAgaWYgKG1hcHBlZClcbiAgICAgICAgICAgICAgICBkZWNvcmF0aW9ucy5wdXNoKG1hcHBlZCk7XG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zLm9uUmVtb3ZlKVxuICAgICAgICAgICAgICAgIG9wdGlvbnMub25SZW1vdmUoc2V0LmxvY2FsW2ldLnNwZWMpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0LmNoaWxkcmVuLmxlbmd0aDsgaSArPSAzKVxuICAgICAgICAgICAgZ2F0aGVyKHNldC5jaGlsZHJlbltpICsgMl0sIHNldC5jaGlsZHJlbltpXSArIG9sZE9mZnNldCArIDEpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSArPSAzKVxuICAgICAgICBpZiAoY2hpbGRyZW5baSArIDFdID09IC0xKVxuICAgICAgICAgICAgZ2F0aGVyKGNoaWxkcmVuW2kgKyAyXSwgb2xkQ2hpbGRyZW5baV0gKyBvbGRPZmZzZXQgKyAxKTtcbiAgICByZXR1cm4gZGVjb3JhdGlvbnM7XG59XG5mdW5jdGlvbiB0YWtlU3BhbnNGb3JOb2RlKHNwYW5zLCBub2RlLCBvZmZzZXQpIHtcbiAgICBpZiAobm9kZS5pc0xlYWYpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGxldCBlbmQgPSBvZmZzZXQgKyBub2RlLm5vZGVTaXplLCBmb3VuZCA9IG51bGw7XG4gICAgZm9yIChsZXQgaSA9IDAsIHNwYW47IGkgPCBzcGFucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoKHNwYW4gPSBzcGFuc1tpXSkgJiYgc3Bhbi5mcm9tID4gb2Zmc2V0ICYmIHNwYW4udG8gPCBlbmQpIHtcbiAgICAgICAgICAgIChmb3VuZCB8fCAoZm91bmQgPSBbXSkpLnB1c2goc3Bhbik7XG4gICAgICAgICAgICBzcGFuc1tpXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZvdW5kO1xufVxuZnVuY3Rpb24gd2l0aG91dE51bGxzKGFycmF5KSB7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspXG4gICAgICAgIGlmIChhcnJheVtpXSAhPSBudWxsKVxuICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJyYXlbaV0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyBCdWlsZCB1cCBhIHRyZWUgdGhhdCBjb3JyZXNwb25kcyB0byBhIHNldCBvZiBkZWNvcmF0aW9ucy4gYG9mZnNldGBcbi8vIGlzIGEgYmFzZSBvZmZzZXQgdGhhdCBzaG91bGQgYmUgc3VidHJhY3RlZCBmcm9tIHRoZSBgZnJvbWAgYW5kIGB0b2Bcbi8vIHBvc2l0aW9ucyBpbiB0aGUgc3BhbnMgKHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBhbGxvY2F0ZSBuZXcgc3BhbnNcbi8vIGZvciByZWN1cnNpdmUgY2FsbHMpLlxuZnVuY3Rpb24gYnVpbGRUcmVlKHNwYW5zLCBub2RlLCBvZmZzZXQsIG9wdGlvbnMpIHtcbiAgICBsZXQgY2hpbGRyZW4gPSBbXSwgaGFzTnVsbHMgPSBmYWxzZTtcbiAgICBub2RlLmZvckVhY2goKGNoaWxkTm9kZSwgbG9jYWxTdGFydCkgPT4ge1xuICAgICAgICBsZXQgZm91bmQgPSB0YWtlU3BhbnNGb3JOb2RlKHNwYW5zLCBjaGlsZE5vZGUsIGxvY2FsU3RhcnQgKyBvZmZzZXQpO1xuICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgIGhhc051bGxzID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBzdWJ0cmVlID0gYnVpbGRUcmVlKGZvdW5kLCBjaGlsZE5vZGUsIG9mZnNldCArIGxvY2FsU3RhcnQgKyAxLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChzdWJ0cmVlICE9IGVtcHR5KVxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gobG9jYWxTdGFydCwgbG9jYWxTdGFydCArIGNoaWxkTm9kZS5ub2RlU2l6ZSwgc3VidHJlZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgbG9jYWxzID0gbW92ZVNwYW5zKGhhc051bGxzID8gd2l0aG91dE51bGxzKHNwYW5zKSA6IHNwYW5zLCAtb2Zmc2V0KS5zb3J0KGJ5UG9zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxvY2Fscy5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKCFsb2NhbHNbaV0udHlwZS52YWxpZChub2RlLCBsb2NhbHNbaV0pKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5vblJlbW92ZSlcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9uUmVtb3ZlKGxvY2Fsc1tpXS5zcGVjKTtcbiAgICAgICAgICAgIGxvY2Fscy5zcGxpY2UoaS0tLCAxKTtcbiAgICAgICAgfVxuICAgIHJldHVybiBsb2NhbHMubGVuZ3RoIHx8IGNoaWxkcmVuLmxlbmd0aCA/IG5ldyBEZWNvcmF0aW9uU2V0KGxvY2FscywgY2hpbGRyZW4pIDogZW1wdHk7XG59XG4vLyBVc2VkIHRvIHNvcnQgZGVjb3JhdGlvbnMgc28gdGhhdCBvbmVzIHdpdGggYSBsb3cgc3RhcnQgcG9zaXRpb25cbi8vIGNvbWUgZmlyc3QsIGFuZCB3aXRoaW4gYSBzZXQgd2l0aCB0aGUgc2FtZSBzdGFydCBwb3NpdGlvbiwgdGhvc2Vcbi8vIHdpdGggYW4gc21hbGxlciBlbmQgcG9zaXRpb24gY29tZSBmaXJzdC5cbmZ1bmN0aW9uIGJ5UG9zKGEsIGIpIHtcbiAgICByZXR1cm4gYS5mcm9tIC0gYi5mcm9tIHx8IGEudG8gLSBiLnRvO1xufVxuLy8gU2NhbiBhIHNvcnRlZCBhcnJheSBvZiBkZWNvcmF0aW9ucyBmb3IgcGFydGlhbGx5IG92ZXJsYXBwaW5nIHNwYW5zLFxuLy8gYW5kIHNwbGl0IHRob3NlIHNvIHRoYXQgb25seSBmdWxseSBvdmVybGFwcGluZyBzcGFucyBhcmUgbGVmdCAodG9cbi8vIG1ha2Ugc3Vic2VxdWVudCByZW5kZXJpbmcgZWFzaWVyKS4gV2lsbCByZXR1cm4gdGhlIGlucHV0IGFycmF5IGlmXG4vLyBubyBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgc3BhbnMgYXJlIGZvdW5kICh0aGUgY29tbW9uIGNhc2UpLlxuZnVuY3Rpb24gcmVtb3ZlT3ZlcmxhcChzcGFucykge1xuICAgIGxldCB3b3JraW5nID0gc3BhbnM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3b3JraW5nLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBsZXQgc3BhbiA9IHdvcmtpbmdbaV07XG4gICAgICAgIGlmIChzcGFuLmZyb20gIT0gc3Bhbi50bylcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHdvcmtpbmcubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IHdvcmtpbmdbal07XG4gICAgICAgICAgICAgICAgaWYgKG5leHQuZnJvbSA9PSBzcGFuLmZyb20pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQudG8gIT0gc3Bhbi50bykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtpbmcgPT0gc3BhbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2luZyA9IHNwYW5zLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGb2xsb3dlZCBieSBhIHBhcnRpYWxseSBvdmVybGFwcGluZyBsYXJnZXIgc3Bhbi4gU3BsaXQgdGhhdFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Bhbi5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtpbmdbal0gPSBuZXh0LmNvcHkobmV4dC5mcm9tLCBzcGFuLnRvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEFoZWFkKHdvcmtpbmcsIGogKyAxLCBuZXh0LmNvcHkoc3Bhbi50bywgbmV4dC50bykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQuZnJvbSA8IHNwYW4udG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3b3JraW5nID09IHNwYW5zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBzcGFucy5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVuZCBvZiB0aGlzIG9uZSBvdmVybGFwcyB3aXRoIGEgc3Vic2VxdWVudCBzcGFuLiBTcGxpdFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBvbmUuXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JraW5nW2ldID0gc3Bhbi5jb3B5KHNwYW4uZnJvbSwgbmV4dC5mcm9tKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEFoZWFkKHdvcmtpbmcsIGosIHNwYW4uY29weShuZXh0LmZyb20sIHNwYW4udG8pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB3b3JraW5nO1xufVxuZnVuY3Rpb24gaW5zZXJ0QWhlYWQoYXJyYXksIGksIGRlY28pIHtcbiAgICB3aGlsZSAoaSA8IGFycmF5Lmxlbmd0aCAmJiBieVBvcyhkZWNvLCBhcnJheVtpXSkgPiAwKVxuICAgICAgICBpKys7XG4gICAgYXJyYXkuc3BsaWNlKGksIDAsIGRlY28pO1xufVxuLy8gR2V0IHRoZSBkZWNvcmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgcHJvcHMgb2YgYSB2aWV3LlxuZnVuY3Rpb24gdmlld0RlY29yYXRpb25zKHZpZXcpIHtcbiAgICBsZXQgZm91bmQgPSBbXTtcbiAgICB2aWV3LnNvbWVQcm9wKFwiZGVjb3JhdGlvbnNcIiwgZiA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBmKHZpZXcuc3RhdGUpO1xuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdCAhPSBlbXB0eSlcbiAgICAgICAgICAgIGZvdW5kLnB1c2gocmVzdWx0KTtcbiAgICB9KTtcbiAgICBpZiAodmlldy5jdXJzb3JXcmFwcGVyKVxuICAgICAgICBmb3VuZC5wdXNoKERlY29yYXRpb25TZXQuY3JlYXRlKHZpZXcuc3RhdGUuZG9jLCBbdmlldy5jdXJzb3JXcmFwcGVyLmRlY29dKSk7XG4gICAgcmV0dXJuIERlY29yYXRpb25Hcm91cC5mcm9tKGZvdW5kKTtcbn1cblxuY29uc3Qgb2JzZXJ2ZU9wdGlvbnMgPSB7XG4gICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgY2hhcmFjdGVyRGF0YU9sZFZhbHVlOiB0cnVlLFxuICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgYXR0cmlidXRlT2xkVmFsdWU6IHRydWUsXG4gICAgc3VidHJlZTogdHJ1ZVxufTtcbi8vIElFMTEgaGFzIHZlcnkgYnJva2VuIG11dGF0aW9uIG9ic2VydmVycywgc28gd2UgYWxzbyBsaXN0ZW4gdG8gRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkXG5jb25zdCB1c2VDaGFyRGF0YSA9IGllICYmIGllX3ZlcnNpb24gPD0gMTE7XG5jbGFzcyBTZWxlY3Rpb25TdGF0ZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYW5jaG9yTm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMuYW5jaG9yT2Zmc2V0ID0gMDtcbiAgICAgICAgdGhpcy5mb2N1c05vZGUgPSBudWxsO1xuICAgICAgICB0aGlzLmZvY3VzT2Zmc2V0ID0gMDtcbiAgICB9XG4gICAgc2V0KHNlbCkge1xuICAgICAgICB0aGlzLmFuY2hvck5vZGUgPSBzZWwuYW5jaG9yTm9kZTtcbiAgICAgICAgdGhpcy5hbmNob3JPZmZzZXQgPSBzZWwuYW5jaG9yT2Zmc2V0O1xuICAgICAgICB0aGlzLmZvY3VzTm9kZSA9IHNlbC5mb2N1c05vZGU7XG4gICAgICAgIHRoaXMuZm9jdXNPZmZzZXQgPSBzZWwuZm9jdXNPZmZzZXQ7XG4gICAgfVxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLmFuY2hvck5vZGUgPSB0aGlzLmZvY3VzTm9kZSA9IG51bGw7XG4gICAgfVxuICAgIGVxKHNlbCkge1xuICAgICAgICByZXR1cm4gc2VsLmFuY2hvck5vZGUgPT0gdGhpcy5hbmNob3JOb2RlICYmIHNlbC5hbmNob3JPZmZzZXQgPT0gdGhpcy5hbmNob3JPZmZzZXQgJiZcbiAgICAgICAgICAgIHNlbC5mb2N1c05vZGUgPT0gdGhpcy5mb2N1c05vZGUgJiYgc2VsLmZvY3VzT2Zmc2V0ID09IHRoaXMuZm9jdXNPZmZzZXQ7XG4gICAgfVxufVxuY2xhc3MgRE9NT2JzZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKHZpZXcsIGhhbmRsZURPTUNoYW5nZSkge1xuICAgICAgICB0aGlzLnZpZXcgPSB2aWV3O1xuICAgICAgICB0aGlzLmhhbmRsZURPTUNoYW5nZSA9IGhhbmRsZURPTUNoYW5nZTtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLmZsdXNoaW5nU29vbiA9IC0xO1xuICAgICAgICB0aGlzLm9ic2VydmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvblN0YXRlO1xuICAgICAgICB0aGlzLm9uQ2hhckRhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLnN1cHByZXNzaW5nU2VsZWN0aW9uVXBkYXRlcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9ic2VydmVyID0gd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIgJiZcbiAgICAgICAgICAgIG5ldyB3aW5kb3cuTXV0YXRpb25PYnNlcnZlcihtdXRhdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXV0YXRpb25zLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlLnB1c2gobXV0YXRpb25zW2ldKTtcbiAgICAgICAgICAgICAgICAvLyBJRTExIHdpbGwgc29tZXRpbWVzIChvbiBiYWNrc3BhY2luZyBvdXQgYSBzaW5nbGUgY2hhcmFjdGVyXG4gICAgICAgICAgICAgICAgLy8gdGV4dCBub2RlIGFmdGVyIGEgQlIgbm9kZSkgY2FsbCB0aGUgb2JzZXJ2ZXIgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAvLyBiZWZvcmUgYWN0dWFsbHkgdXBkYXRpbmcgdGhlIERPTSwgd2hpY2ggd2lsbCBjYXVzZVxuICAgICAgICAgICAgICAgIC8vIFByb3NlTWlycm9yIHRvIG1pc3MgdGhlIGNoYW5nZSAoc2VlICM5MzApXG4gICAgICAgICAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPD0gMTEgJiYgbXV0YXRpb25zLnNvbWUobSA9PiBtLnR5cGUgPT0gXCJjaGlsZExpc3RcIiAmJiBtLnJlbW92ZWROb2Rlcy5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICAgICAgbS50eXBlID09IFwiY2hhcmFjdGVyRGF0YVwiICYmIG0ub2xkVmFsdWUubGVuZ3RoID4gbS50YXJnZXQubm9kZVZhbHVlLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmx1c2hTb29uKCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgaWYgKHVzZUNoYXJEYXRhKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhckRhdGEgPSBlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlLnB1c2goeyB0YXJnZXQ6IGUudGFyZ2V0LCB0eXBlOiBcImNoYXJhY3RlckRhdGFcIiwgb2xkVmFsdWU6IGUucHJldlZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZmx1c2hTb29uKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UgPSB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuICAgIGZsdXNoU29vbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZmx1c2hpbmdTb29uIDwgMClcbiAgICAgICAgICAgIHRoaXMuZmx1c2hpbmdTb29uID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4geyB0aGlzLmZsdXNoaW5nU29vbiA9IC0xOyB0aGlzLmZsdXNoKCk7IH0sIDIwKTtcbiAgICB9XG4gICAgZm9yY2VGbHVzaCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZmx1c2hpbmdTb29uID4gLTEpIHtcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5mbHVzaGluZ1Nvb24pO1xuICAgICAgICAgICAgdGhpcy5mbHVzaGluZ1Nvb24gPSAtMTtcbiAgICAgICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXIudGFrZVJlY29yZHMoKTtcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnZpZXcuZG9tLCBvYnNlcnZlT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub25DaGFyRGF0YSlcbiAgICAgICAgICAgIHRoaXMudmlldy5kb20uYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNoYXJhY3RlckRhdGFNb2RpZmllZFwiLCB0aGlzLm9uQ2hhckRhdGEpO1xuICAgICAgICB0aGlzLmNvbm5lY3RTZWxlY3Rpb24oKTtcbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIGxldCB0YWtlID0gdGhpcy5vYnNlcnZlci50YWtlUmVjb3JkcygpO1xuICAgICAgICAgICAgaWYgKHRha2UubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWtlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlLnB1c2godGFrZVtpXSk7XG4gICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy5mbHVzaCgpLCAyMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vbkNoYXJEYXRhKVxuICAgICAgICAgICAgdGhpcy52aWV3LmRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwiRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkXCIsIHRoaXMub25DaGFyRGF0YSk7XG4gICAgICAgIHRoaXMuZGlzY29ubmVjdFNlbGVjdGlvbigpO1xuICAgIH1cbiAgICBjb25uZWN0U2VsZWN0aW9uKCkge1xuICAgICAgICB0aGlzLnZpZXcuZG9tLm93bmVyRG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLCB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKTtcbiAgICB9XG4gICAgZGlzY29ubmVjdFNlbGVjdGlvbigpIHtcbiAgICAgICAgdGhpcy52aWV3LmRvbS5vd25lckRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIiwgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSk7XG4gICAgfVxuICAgIHN1cHByZXNzU2VsZWN0aW9uVXBkYXRlcygpIHtcbiAgICAgICAgdGhpcy5zdXBwcmVzc2luZ1NlbGVjdGlvblVwZGF0ZXMgPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3VwcHJlc3NpbmdTZWxlY3Rpb25VcGRhdGVzID0gZmFsc2UsIDUwKTtcbiAgICB9XG4gICAgb25TZWxlY3Rpb25DaGFuZ2UoKSB7XG4gICAgICAgIGlmICghaGFzRm9jdXNBbmRTZWxlY3Rpb24odGhpcy52aWV3KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuc3VwcHJlc3NpbmdTZWxlY3Rpb25VcGRhdGVzKVxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvblRvRE9NKHRoaXMudmlldyk7XG4gICAgICAgIC8vIERlbGV0aW9ucyBvbiBJRTExIGZpcmUgdGhlaXIgZXZlbnRzIGluIHRoZSB3cm9uZyBvcmRlciwgZ2l2aW5nXG4gICAgICAgIC8vIHVzIGEgc2VsZWN0aW9uIGNoYW5nZSBldmVudCBiZWZvcmUgdGhlIERPTSBjaGFuZ2VzIGFyZVxuICAgICAgICAvLyByZXBvcnRlZC5cbiAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPD0gMTEgJiYgIXRoaXMudmlldy5zdGF0ZS5zZWxlY3Rpb24uZW1wdHkpIHtcbiAgICAgICAgICAgIGxldCBzZWwgPSB0aGlzLnZpZXcuZG9tU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgICAgIC8vIFNlbGVjdGlvbi5pc0NvbGxhcHNlZCBpc24ndCByZWxpYWJsZSBvbiBJRVxuICAgICAgICAgICAgaWYgKHNlbC5mb2N1c05vZGUgJiYgaXNFcXVpdmFsZW50UG9zaXRpb24oc2VsLmZvY3VzTm9kZSwgc2VsLmZvY3VzT2Zmc2V0LCBzZWwuYW5jaG9yTm9kZSwgc2VsLmFuY2hvck9mZnNldCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmx1c2hTb29uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cbiAgICBzZXRDdXJTZWxlY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvbi5zZXQodGhpcy52aWV3LmRvbVNlbGVjdGlvblJhbmdlKCkpO1xuICAgIH1cbiAgICBpZ25vcmVTZWxlY3Rpb25DaGFuZ2Uoc2VsKSB7XG4gICAgICAgIGlmICghc2VsLmZvY3VzTm9kZSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBsZXQgYW5jZXN0b3JzID0gbmV3IFNldCwgY29udGFpbmVyO1xuICAgICAgICBmb3IgKGxldCBzY2FuID0gc2VsLmZvY3VzTm9kZTsgc2Nhbjsgc2NhbiA9IHBhcmVudE5vZGUoc2NhbikpXG4gICAgICAgICAgICBhbmNlc3RvcnMuYWRkKHNjYW4pO1xuICAgICAgICBmb3IgKGxldCBzY2FuID0gc2VsLmFuY2hvck5vZGU7IHNjYW47IHNjYW4gPSBwYXJlbnROb2RlKHNjYW4pKVxuICAgICAgICAgICAgaWYgKGFuY2VzdG9ycy5oYXMoc2NhbikpIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIgPSBzY2FuO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICBsZXQgZGVzYyA9IGNvbnRhaW5lciAmJiB0aGlzLnZpZXcuZG9jVmlldy5uZWFyZXN0RGVzYyhjb250YWluZXIpO1xuICAgICAgICBpZiAoZGVzYyAmJiBkZXNjLmlnbm9yZU11dGF0aW9uKHtcbiAgICAgICAgICAgIHR5cGU6IFwic2VsZWN0aW9uXCIsXG4gICAgICAgICAgICB0YXJnZXQ6IGNvbnRhaW5lci5ub2RlVHlwZSA9PSAzID8gY29udGFpbmVyLnBhcmVudE5vZGUgOiBjb250YWluZXJcbiAgICAgICAgfSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmbHVzaCgpIHtcbiAgICAgICAgbGV0IHsgdmlldyB9ID0gdGhpcztcbiAgICAgICAgaWYgKCF2aWV3LmRvY1ZpZXcgfHwgdGhpcy5mbHVzaGluZ1Nvb24gPiAtMSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IG11dGF0aW9ucyA9IHRoaXMub2JzZXJ2ZXIgPyB0aGlzLm9ic2VydmVyLnRha2VSZWNvcmRzKCkgOiBbXTtcbiAgICAgICAgaWYgKHRoaXMucXVldWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBtdXRhdGlvbnMgPSB0aGlzLnF1ZXVlLmNvbmNhdChtdXRhdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5xdWV1ZS5sZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzZWwgPSB2aWV3LmRvbVNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIGxldCBuZXdTZWwgPSAhdGhpcy5zdXBwcmVzc2luZ1NlbGVjdGlvblVwZGF0ZXMgJiYgIXRoaXMuY3VycmVudFNlbGVjdGlvbi5lcShzZWwpICYmIGhhc0ZvY3VzQW5kU2VsZWN0aW9uKHZpZXcpICYmICF0aGlzLmlnbm9yZVNlbGVjdGlvbkNoYW5nZShzZWwpO1xuICAgICAgICBsZXQgZnJvbSA9IC0xLCB0byA9IC0xLCB0eXBlT3ZlciA9IGZhbHNlLCBhZGRlZCA9IFtdO1xuICAgICAgICBpZiAodmlldy5lZGl0YWJsZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtdXRhdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5yZWdpc3Rlck11dGF0aW9uKG11dGF0aW9uc1tpXSwgYWRkZWQpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbSA9IGZyb20gPCAwID8gcmVzdWx0LmZyb20gOiBNYXRoLm1pbihyZXN1bHQuZnJvbSwgZnJvbSk7XG4gICAgICAgICAgICAgICAgICAgIHRvID0gdG8gPCAwID8gcmVzdWx0LnRvIDogTWF0aC5tYXgocmVzdWx0LnRvLCB0byk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZU92ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlT3ZlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChnZWNrbyAmJiBhZGRlZC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBsZXQgYnJzID0gYWRkZWQuZmlsdGVyKG4gPT4gbi5ub2RlTmFtZSA9PSBcIkJSXCIpO1xuICAgICAgICAgICAgaWYgKGJycy5sZW5ndGggPT0gMikge1xuICAgICAgICAgICAgICAgIGxldCBhID0gYnJzWzBdLCBiID0gYnJzWzFdO1xuICAgICAgICAgICAgICAgIGlmIChhLnBhcmVudE5vZGUgJiYgYS5wYXJlbnROb2RlLnBhcmVudE5vZGUgPT0gYi5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICBiLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgYS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVhZFNlbCA9IG51bGw7XG4gICAgICAgIC8vIElmIGl0IGxvb2tzIGxpa2UgdGhlIGJyb3dzZXIgaGFzIHJlc2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlXG4gICAgICAgIC8vIHN0YXJ0IG9mIHRoZSBkb2N1bWVudCBhZnRlciBmb2N1cywgcmVzdG9yZSB0aGUgc2VsZWN0aW9uIGZyb21cbiAgICAgICAgLy8gdGhlIHN0YXRlXG4gICAgICAgIGlmIChmcm9tIDwgMCAmJiBuZXdTZWwgJiYgdmlldy5pbnB1dC5sYXN0Rm9jdXMgPiBEYXRlLm5vdygpIC0gMjAwICYmXG4gICAgICAgICAgICBNYXRoLm1heCh2aWV3LmlucHV0Lmxhc3RUb3VjaCwgdmlldy5pbnB1dC5sYXN0Q2xpY2sudGltZSkgPCBEYXRlLm5vdygpIC0gMzAwICYmXG4gICAgICAgICAgICBzZWxlY3Rpb25Db2xsYXBzZWQoc2VsKSAmJiAocmVhZFNlbCA9IHNlbGVjdGlvbkZyb21ET00odmlldykpICYmXG4gICAgICAgICAgICByZWFkU2VsLmVxKFNlbGVjdGlvbi5uZWFyKHZpZXcuc3RhdGUuZG9jLnJlc29sdmUoMCksIDEpKSkge1xuICAgICAgICAgICAgdmlldy5pbnB1dC5sYXN0Rm9jdXMgPSAwO1xuICAgICAgICAgICAgc2VsZWN0aW9uVG9ET00odmlldyk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWxlY3Rpb24uc2V0KHNlbCk7XG4gICAgICAgICAgICB2aWV3LnNjcm9sbFRvU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZnJvbSA+IC0xIHx8IG5ld1NlbCkge1xuICAgICAgICAgICAgaWYgKGZyb20gPiAtMSkge1xuICAgICAgICAgICAgICAgIHZpZXcuZG9jVmlldy5tYXJrRGlydHkoZnJvbSwgdG8pO1xuICAgICAgICAgICAgICAgIGNoZWNrQ1NTKHZpZXcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5oYW5kbGVET01DaGFuZ2UoZnJvbSwgdG8sIHR5cGVPdmVyLCBhZGRlZCk7XG4gICAgICAgICAgICBpZiAodmlldy5kb2NWaWV3ICYmIHZpZXcuZG9jVmlldy5kaXJ0eSlcbiAgICAgICAgICAgICAgICB2aWV3LnVwZGF0ZVN0YXRlKHZpZXcuc3RhdGUpO1xuICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuY3VycmVudFNlbGVjdGlvbi5lcShzZWwpKVxuICAgICAgICAgICAgICAgIHNlbGVjdGlvblRvRE9NKHZpZXcpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uLnNldChzZWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlZ2lzdGVyTXV0YXRpb24obXV0LCBhZGRlZCkge1xuICAgICAgICAvLyBJZ25vcmUgbXV0YXRpb25zIGluc2lkZSBub2RlcyB0aGF0IHdlcmUgYWxyZWFkeSBub3RlZCBhcyBpbnNlcnRlZFxuICAgICAgICBpZiAoYWRkZWQuaW5kZXhPZihtdXQudGFyZ2V0KSA+IC0xKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGxldCBkZXNjID0gdGhpcy52aWV3LmRvY1ZpZXcubmVhcmVzdERlc2MobXV0LnRhcmdldCk7XG4gICAgICAgIGlmIChtdXQudHlwZSA9PSBcImF0dHJpYnV0ZXNcIiAmJlxuICAgICAgICAgICAgKGRlc2MgPT0gdGhpcy52aWV3LmRvY1ZpZXcgfHwgbXV0LmF0dHJpYnV0ZU5hbWUgPT0gXCJjb250ZW50ZWRpdGFibGVcIiB8fFxuICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggc29tZXRpbWVzIGZpcmVzIHNwdXJpb3VzIGV2ZW50cyBmb3IgbnVsbC9lbXB0eSBzdHlsZXNcbiAgICAgICAgICAgICAgICAobXV0LmF0dHJpYnV0ZU5hbWUgPT0gXCJzdHlsZVwiICYmICFtdXQub2xkVmFsdWUgJiYgIW11dC50YXJnZXQuZ2V0QXR0cmlidXRlKFwic3R5bGVcIikpKSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoIWRlc2MgfHwgZGVzYy5pZ25vcmVNdXRhdGlvbihtdXQpKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmIChtdXQudHlwZSA9PSBcImNoaWxkTGlzdFwiKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG11dC5hZGRlZE5vZGVzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIGFkZGVkLnB1c2gobXV0LmFkZGVkTm9kZXNbaV0pO1xuICAgICAgICAgICAgaWYgKGRlc2MuY29udGVudERPTSAmJiBkZXNjLmNvbnRlbnRET00gIT0gZGVzYy5kb20gJiYgIWRlc2MuY29udGVudERPTS5jb250YWlucyhtdXQudGFyZ2V0KSlcbiAgICAgICAgICAgICAgICByZXR1cm4geyBmcm9tOiBkZXNjLnBvc0JlZm9yZSwgdG86IGRlc2MucG9zQWZ0ZXIgfTtcbiAgICAgICAgICAgIGxldCBwcmV2ID0gbXV0LnByZXZpb3VzU2libGluZywgbmV4dCA9IG11dC5uZXh0U2libGluZztcbiAgICAgICAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDw9IDExICYmIG11dC5hZGRlZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIElFMTEgZ2l2ZXMgdXMgaW5jb3JyZWN0IG5leHQvcHJldiBzaWJsaW5ncyBmb3Igc29tZVxuICAgICAgICAgICAgICAgIC8vIGluc2VydGlvbnMsIHNvIGlmIHRoZXJlIGFyZSBhZGRlZCBub2RlcywgcmVjb21wdXRlIHRob3NlXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtdXQuYWRkZWROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgeyBwcmV2aW91c1NpYmxpbmcsIG5leHRTaWJsaW5nIH0gPSBtdXQuYWRkZWROb2Rlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c1NpYmxpbmcgfHwgQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChtdXQuYWRkZWROb2RlcywgcHJldmlvdXNTaWJsaW5nKSA8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gcHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHRTaWJsaW5nIHx8IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwobXV0LmFkZGVkTm9kZXMsIG5leHRTaWJsaW5nKSA8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gbmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGZyb21PZmZzZXQgPSBwcmV2ICYmIHByZXYucGFyZW50Tm9kZSA9PSBtdXQudGFyZ2V0XG4gICAgICAgICAgICAgICAgPyBkb21JbmRleChwcmV2KSArIDEgOiAwO1xuICAgICAgICAgICAgbGV0IGZyb20gPSBkZXNjLmxvY2FsUG9zRnJvbURPTShtdXQudGFyZ2V0LCBmcm9tT2Zmc2V0LCAtMSk7XG4gICAgICAgICAgICBsZXQgdG9PZmZzZXQgPSBuZXh0ICYmIG5leHQucGFyZW50Tm9kZSA9PSBtdXQudGFyZ2V0XG4gICAgICAgICAgICAgICAgPyBkb21JbmRleChuZXh0KSA6IG11dC50YXJnZXQuY2hpbGROb2Rlcy5sZW5ndGg7XG4gICAgICAgICAgICBsZXQgdG8gPSBkZXNjLmxvY2FsUG9zRnJvbURPTShtdXQudGFyZ2V0LCB0b09mZnNldCwgMSk7XG4gICAgICAgICAgICByZXR1cm4geyBmcm9tLCB0byB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG11dC50eXBlID09IFwiYXR0cmlidXRlc1wiKSB7XG4gICAgICAgICAgICByZXR1cm4geyBmcm9tOiBkZXNjLnBvc0F0U3RhcnQgLSBkZXNjLmJvcmRlciwgdG86IGRlc2MucG9zQXRFbmQgKyBkZXNjLmJvcmRlciB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgeyAvLyBcImNoYXJhY3RlckRhdGFcIlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmcm9tOiBkZXNjLnBvc0F0U3RhcnQsXG4gICAgICAgICAgICAgICAgdG86IGRlc2MucG9zQXRFbmQsXG4gICAgICAgICAgICAgICAgLy8gQW4gZXZlbnQgd2FzIGdlbmVyYXRlZCBmb3IgYSB0ZXh0IGNoYW5nZSB0aGF0IGRpZG4ndCBjaGFuZ2VcbiAgICAgICAgICAgICAgICAvLyBhbnkgdGV4dC4gTWFyayB0aGUgZG9tIGNoYW5nZSB0byBmYWxsIGJhY2sgdG8gYXNzdW1pbmcgdGhlXG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0aW9uIHdhcyB0eXBlZCBvdmVyIHdpdGggYW4gaWRlbnRpY2FsIHZhbHVlIGlmIGl0IGNhbid0XG4gICAgICAgICAgICAgICAgLy8gZmluZCBhbm90aGVyIGNoYW5nZS5cbiAgICAgICAgICAgICAgICB0eXBlT3ZlcjogbXV0LnRhcmdldC5ub2RlVmFsdWUgPT0gbXV0Lm9sZFZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxufVxubGV0IGNzc0NoZWNrZWQgPSBuZXcgV2Vha01hcCgpO1xubGV0IGNzc0NoZWNrV2FybmVkID0gZmFsc2U7XG5mdW5jdGlvbiBjaGVja0NTUyh2aWV3KSB7XG4gICAgaWYgKGNzc0NoZWNrZWQuaGFzKHZpZXcpKVxuICAgICAgICByZXR1cm47XG4gICAgY3NzQ2hlY2tlZC5zZXQodmlldywgbnVsbCk7XG4gICAgaWYgKFsnbm9ybWFsJywgJ25vd3JhcCcsICdwcmUtbGluZSddLmluZGV4T2YoZ2V0Q29tcHV0ZWRTdHlsZSh2aWV3LmRvbSkud2hpdGVTcGFjZSkgIT09IC0xKSB7XG4gICAgICAgIHZpZXcucmVxdWlyZXNHZWNrb0hhY2tOb2RlID0gZ2Vja287XG4gICAgICAgIGlmIChjc3NDaGVja1dhcm5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc29sZVtcIndhcm5cIl0oXCJQcm9zZU1pcnJvciBleHBlY3RzIHRoZSBDU1Mgd2hpdGUtc3BhY2UgcHJvcGVydHkgdG8gYmUgc2V0LCBwcmVmZXJhYmx5IHRvICdwcmUtd3JhcCcuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGxvYWQgc3R5bGUvcHJvc2VtaXJyb3IuY3NzIGZyb20gdGhlIHByb3NlbWlycm9yLXZpZXcgcGFja2FnZS5cIik7XG4gICAgICAgIGNzc0NoZWNrV2FybmVkID0gdHJ1ZTtcbiAgICB9XG59XG4vLyBVc2VkIHRvIHdvcmsgYXJvdW5kIGEgU2FmYXJpIFNlbGVjdGlvbi9zaGFkb3cgRE9NIGJ1Z1xuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2NvZGVtaXJyb3IvZGV2L2lzc3Vlcy80MTQgZml4XG5mdW5jdGlvbiBzYWZhcmlTaGFkb3dTZWxlY3Rpb25SYW5nZSh2aWV3KSB7XG4gICAgbGV0IGZvdW5kO1xuICAgIGZ1bmN0aW9uIHJlYWQoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGZvdW5kID0gZXZlbnQuZ2V0VGFyZ2V0UmFuZ2VzKClbMF07XG4gICAgfVxuICAgIC8vIEJlY2F1c2UgU2FmYXJpIChhdCBsZWFzdCBpbiAyMDE4LTIwMjIpIGRvZXNuJ3QgcHJvdmlkZSByZWd1bGFyXG4gICAgLy8gYWNjZXNzIHRvIHRoZSBzZWxlY3Rpb24gaW5zaWRlIGEgc2hhZG93Um9vdCwgd2UgaGF2ZSB0byBwZXJmb3JtIGFcbiAgICAvLyByaWRpY3Vsb3VzIGhhY2sgdG8gZ2V0IGF0IGl04oCUdXNpbmcgYGV4ZWNDb21tYW5kYCB0byB0cmlnZ2VyIGFcbiAgICAvLyBgYmVmb3JlSW5wdXRgIGV2ZW50IHNvIHRoYXQgd2UgY2FuIHJlYWQgdGhlIHRhcmdldCByYW5nZSBmcm9tIHRoZVxuICAgIC8vIGV2ZW50LlxuICAgIHZpZXcuZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmVpbnB1dFwiLCByZWFkLCB0cnVlKTtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImluZGVudFwiKTtcbiAgICB2aWV3LmRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JlaW5wdXRcIiwgcmVhZCwgdHJ1ZSk7XG4gICAgbGV0IGFuY2hvck5vZGUgPSBmb3VuZC5zdGFydENvbnRhaW5lciwgYW5jaG9yT2Zmc2V0ID0gZm91bmQuc3RhcnRPZmZzZXQ7XG4gICAgbGV0IGZvY3VzTm9kZSA9IGZvdW5kLmVuZENvbnRhaW5lciwgZm9jdXNPZmZzZXQgPSBmb3VuZC5lbmRPZmZzZXQ7XG4gICAgbGV0IGN1cnJlbnRBbmNob3IgPSB2aWV3LmRvbUF0UG9zKHZpZXcuc3RhdGUuc2VsZWN0aW9uLmFuY2hvcik7XG4gICAgLy8gU2luY2Ugc3VjaCBhIHJhbmdlIGRvZXNuJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbmNob3IgYW5kIGhlYWQsXG4gICAgLy8gdXNlIGEgaGV1cmlzdGljIHRoYXQgZmxpcHMgaXQgYXJvdW5kIGlmIGl0cyBlbmQgbWF0Y2hlcyB0aGVcbiAgICAvLyBjdXJyZW50IGFuY2hvci5cbiAgICBpZiAoaXNFcXVpdmFsZW50UG9zaXRpb24oY3VycmVudEFuY2hvci5ub2RlLCBjdXJyZW50QW5jaG9yLm9mZnNldCwgZm9jdXNOb2RlLCBmb2N1c09mZnNldCkpXG4gICAgICAgIFthbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXRdID0gW2ZvY3VzTm9kZSwgZm9jdXNPZmZzZXQsIGFuY2hvck5vZGUsIGFuY2hvck9mZnNldF07XG4gICAgcmV0dXJuIHsgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0IH07XG59XG5cbi8vIE5vdGUgdGhhdCBhbGwgcmVmZXJlbmNpbmcgYW5kIHBhcnNpbmcgaXMgZG9uZSB3aXRoIHRoZVxuLy8gc3RhcnQtb2Ytb3BlcmF0aW9uIHNlbGVjdGlvbiBhbmQgZG9jdW1lbnQsIHNpbmNlIHRoYXQncyB0aGUgb25lXG4vLyB0aGF0IHRoZSBET00gcmVwcmVzZW50cy4gSWYgYW55IGNoYW5nZXMgY2FtZSBpbiBpbiB0aGUgbWVhbnRpbWUsXG4vLyB0aGUgbW9kaWZpY2F0aW9uIGlzIG1hcHBlZCBvdmVyIHRob3NlIGJlZm9yZSBpdCBpcyBhcHBsaWVkLCBpblxuLy8gcmVhZERPTUNoYW5nZS5cbmZ1bmN0aW9uIHBhcnNlQmV0d2Vlbih2aWV3LCBmcm9tXywgdG9fKSB7XG4gICAgbGV0IHsgbm9kZTogcGFyZW50LCBmcm9tT2Zmc2V0LCB0b09mZnNldCwgZnJvbSwgdG8gfSA9IHZpZXcuZG9jVmlldy5wYXJzZVJhbmdlKGZyb21fLCB0b18pO1xuICAgIGxldCBkb21TZWwgPSB2aWV3LmRvbVNlbGVjdGlvblJhbmdlKCk7XG4gICAgbGV0IGZpbmQ7XG4gICAgbGV0IGFuY2hvciA9IGRvbVNlbC5hbmNob3JOb2RlO1xuICAgIGlmIChhbmNob3IgJiYgdmlldy5kb20uY29udGFpbnMoYW5jaG9yLm5vZGVUeXBlID09IDEgPyBhbmNob3IgOiBhbmNob3IucGFyZW50Tm9kZSkpIHtcbiAgICAgICAgZmluZCA9IFt7IG5vZGU6IGFuY2hvciwgb2Zmc2V0OiBkb21TZWwuYW5jaG9yT2Zmc2V0IH1dO1xuICAgICAgICBpZiAoIXNlbGVjdGlvbkNvbGxhcHNlZChkb21TZWwpKVxuICAgICAgICAgICAgZmluZC5wdXNoKHsgbm9kZTogZG9tU2VsLmZvY3VzTm9kZSwgb2Zmc2V0OiBkb21TZWwuZm9jdXNPZmZzZXQgfSk7XG4gICAgfVxuICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIGluIENocm9tZSB3aGVyZSBiYWNrc3BhY2luZyBzb21ldGltZXMgcmVwbGFjZXNcbiAgICAvLyB0aGUgZGVsZXRlZCBjb250ZW50IHdpdGggYSByYW5kb20gQlIgbm9kZSAoaXNzdWVzICM3OTksICM4MzEpXG4gICAgaWYgKGNocm9tZSAmJiB2aWV3LmlucHV0Lmxhc3RLZXlDb2RlID09PSA4KSB7XG4gICAgICAgIGZvciAobGV0IG9mZiA9IHRvT2Zmc2V0OyBvZmYgPiBmcm9tT2Zmc2V0OyBvZmYtLSkge1xuICAgICAgICAgICAgbGV0IG5vZGUgPSBwYXJlbnQuY2hpbGROb2Rlc1tvZmYgLSAxXSwgZGVzYyA9IG5vZGUucG1WaWV3RGVzYztcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09IFwiQlJcIiAmJiAhZGVzYykge1xuICAgICAgICAgICAgICAgIHRvT2Zmc2V0ID0gb2ZmO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFkZXNjIHx8IGRlc2Muc2l6ZSlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgc3RhcnREb2MgPSB2aWV3LnN0YXRlLmRvYztcbiAgICBsZXQgcGFyc2VyID0gdmlldy5zb21lUHJvcChcImRvbVBhcnNlclwiKSB8fCBET01QYXJzZXIuZnJvbVNjaGVtYSh2aWV3LnN0YXRlLnNjaGVtYSk7XG4gICAgbGV0ICRmcm9tID0gc3RhcnREb2MucmVzb2x2ZShmcm9tKTtcbiAgICBsZXQgc2VsID0gbnVsbCwgZG9jID0gcGFyc2VyLnBhcnNlKHBhcmVudCwge1xuICAgICAgICB0b3BOb2RlOiAkZnJvbS5wYXJlbnQsXG4gICAgICAgIHRvcE1hdGNoOiAkZnJvbS5wYXJlbnQuY29udGVudE1hdGNoQXQoJGZyb20uaW5kZXgoKSksXG4gICAgICAgIHRvcE9wZW46IHRydWUsXG4gICAgICAgIGZyb206IGZyb21PZmZzZXQsXG4gICAgICAgIHRvOiB0b09mZnNldCxcbiAgICAgICAgcHJlc2VydmVXaGl0ZXNwYWNlOiAkZnJvbS5wYXJlbnQudHlwZS53aGl0ZXNwYWNlID09IFwicHJlXCIgPyBcImZ1bGxcIiA6IHRydWUsXG4gICAgICAgIGZpbmRQb3NpdGlvbnM6IGZpbmQsXG4gICAgICAgIHJ1bGVGcm9tTm9kZSxcbiAgICAgICAgY29udGV4dDogJGZyb21cbiAgICB9KTtcbiAgICBpZiAoZmluZCAmJiBmaW5kWzBdLnBvcyAhPSBudWxsKSB7XG4gICAgICAgIGxldCBhbmNob3IgPSBmaW5kWzBdLnBvcywgaGVhZCA9IGZpbmRbMV0gJiYgZmluZFsxXS5wb3M7XG4gICAgICAgIGlmIChoZWFkID09IG51bGwpXG4gICAgICAgICAgICBoZWFkID0gYW5jaG9yO1xuICAgICAgICBzZWwgPSB7IGFuY2hvcjogYW5jaG9yICsgZnJvbSwgaGVhZDogaGVhZCArIGZyb20gfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZG9jLCBzZWwsIGZyb20sIHRvIH07XG59XG5mdW5jdGlvbiBydWxlRnJvbU5vZGUoZG9tKSB7XG4gICAgbGV0IGRlc2MgPSBkb20ucG1WaWV3RGVzYztcbiAgICBpZiAoZGVzYykge1xuICAgICAgICByZXR1cm4gZGVzYy5wYXJzZVJ1bGUoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZG9tLm5vZGVOYW1lID09IFwiQlJcIiAmJiBkb20ucGFyZW50Tm9kZSkge1xuICAgICAgICAvLyBTYWZhcmkgcmVwbGFjZXMgdGhlIGxpc3QgaXRlbSBvciB0YWJsZSBjZWxsIHdpdGggYSBCUlxuICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgbGlzdCBub2RlICg/ISkgaWYgeW91IGRlbGV0ZSB0aGUgbGFzdFxuICAgICAgICAvLyBjaGFyYWN0ZXIgaW4gYSBsaXN0IGl0ZW0gb3IgdGFibGUgY2VsbCAoIzcwOCwgIzg2MilcbiAgICAgICAgaWYgKHNhZmFyaSAmJiAvXih1bHxvbCkkL2kudGVzdChkb20ucGFyZW50Tm9kZS5ub2RlTmFtZSkpIHtcbiAgICAgICAgICAgIGxldCBza2lwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICAgIHNraXAuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpXCIpKTtcbiAgICAgICAgICAgIHJldHVybiB7IHNraXAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkb20ucGFyZW50Tm9kZS5sYXN0Q2hpbGQgPT0gZG9tIHx8IHNhZmFyaSAmJiAvXih0cnx0YWJsZSkkL2kudGVzdChkb20ucGFyZW50Tm9kZS5ub2RlTmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGlnbm9yZTogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGRvbS5ub2RlTmFtZSA9PSBcIklNR1wiICYmIGRvbS5nZXRBdHRyaWJ1dGUoXCJtYXJrLXBsYWNlaG9sZGVyXCIpKSB7XG4gICAgICAgIHJldHVybiB7IGlnbm9yZTogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmNvbnN0IGlzSW5saW5lID0gL14oYXxhYmJyfGFjcm9ueW18YnxiZFtpb118YmlnfGJyfGJ1dHRvbnxjaXRlfGNvZGV8ZGF0YShsaXN0KT98ZGVsfGRmbnxlbXxpfGluc3xrYmR8bGFiZWx8bWFwfG1hcmt8bWV0ZXJ8b3V0cHV0fHF8cnVieXxzfHNhbXB8c21hbGx8c3BhbnxzdHJvbmd8c3VbYnBdfHRpbWV8dXx0dHx2YXIpJC9pO1xuZnVuY3Rpb24gcmVhZERPTUNoYW5nZSh2aWV3LCBmcm9tLCB0bywgdHlwZU92ZXIsIGFkZGVkTm9kZXMpIHtcbiAgICBpZiAoZnJvbSA8IDApIHtcbiAgICAgICAgbGV0IG9yaWdpbiA9IHZpZXcuaW5wdXQubGFzdFNlbGVjdGlvblRpbWUgPiBEYXRlLm5vdygpIC0gNTAgPyB2aWV3LmlucHV0Lmxhc3RTZWxlY3Rpb25PcmlnaW4gOiBudWxsO1xuICAgICAgICBsZXQgbmV3U2VsID0gc2VsZWN0aW9uRnJvbURPTSh2aWV3LCBvcmlnaW4pO1xuICAgICAgICBpZiAobmV3U2VsICYmICF2aWV3LnN0YXRlLnNlbGVjdGlvbi5lcShuZXdTZWwpKSB7XG4gICAgICAgICAgICBpZiAoY2hyb21lICYmIGFuZHJvaWQgJiZcbiAgICAgICAgICAgICAgICB2aWV3LmlucHV0Lmxhc3RLZXlDb2RlID09PSAxMyAmJiBEYXRlLm5vdygpIC0gMTAwIDwgdmlldy5pbnB1dC5sYXN0S2V5Q29kZVRpbWUgJiZcbiAgICAgICAgICAgICAgICB2aWV3LnNvbWVQcm9wKFwiaGFuZGxlS2V5RG93blwiLCBmID0+IGYodmlldywga2V5RXZlbnQoMTMsIFwiRW50ZXJcIikpKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBsZXQgdHIgPSB2aWV3LnN0YXRlLnRyLnNldFNlbGVjdGlvbihuZXdTZWwpO1xuICAgICAgICAgICAgaWYgKG9yaWdpbiA9PSBcInBvaW50ZXJcIilcbiAgICAgICAgICAgICAgICB0ci5zZXRNZXRhKFwicG9pbnRlclwiLCB0cnVlKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKG9yaWdpbiA9PSBcImtleVwiKVxuICAgICAgICAgICAgICAgIHRyLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgICB2aWV3LmRpc3BhdGNoKHRyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCAkYmVmb3JlID0gdmlldy5zdGF0ZS5kb2MucmVzb2x2ZShmcm9tKTtcbiAgICBsZXQgc2hhcmVkID0gJGJlZm9yZS5zaGFyZWREZXB0aCh0byk7XG4gICAgZnJvbSA9ICRiZWZvcmUuYmVmb3JlKHNoYXJlZCArIDEpO1xuICAgIHRvID0gdmlldy5zdGF0ZS5kb2MucmVzb2x2ZSh0bykuYWZ0ZXIoc2hhcmVkICsgMSk7XG4gICAgbGV0IHNlbCA9IHZpZXcuc3RhdGUuc2VsZWN0aW9uO1xuICAgIGxldCBwYXJzZSA9IHBhcnNlQmV0d2Vlbih2aWV3LCBmcm9tLCB0byk7XG4gICAgbGV0IGRvYyA9IHZpZXcuc3RhdGUuZG9jLCBjb21wYXJlID0gZG9jLnNsaWNlKHBhcnNlLmZyb20sIHBhcnNlLnRvKTtcbiAgICBsZXQgcHJlZmVycmVkUG9zLCBwcmVmZXJyZWRTaWRlO1xuICAgIC8vIFByZWZlciBhbmNob3JpbmcgdG8gZW5kIHdoZW4gQmFja3NwYWNlIGlzIHByZXNzZWRcbiAgICBpZiAodmlldy5pbnB1dC5sYXN0S2V5Q29kZSA9PT0gOCAmJiBEYXRlLm5vdygpIC0gMTAwIDwgdmlldy5pbnB1dC5sYXN0S2V5Q29kZVRpbWUpIHtcbiAgICAgICAgcHJlZmVycmVkUG9zID0gdmlldy5zdGF0ZS5zZWxlY3Rpb24udG87XG4gICAgICAgIHByZWZlcnJlZFNpZGUgPSBcImVuZFwiO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcHJlZmVycmVkUG9zID0gdmlldy5zdGF0ZS5zZWxlY3Rpb24uZnJvbTtcbiAgICAgICAgcHJlZmVycmVkU2lkZSA9IFwic3RhcnRcIjtcbiAgICB9XG4gICAgdmlldy5pbnB1dC5sYXN0S2V5Q29kZSA9IG51bGw7XG4gICAgbGV0IGNoYW5nZSA9IGZpbmREaWZmKGNvbXBhcmUuY29udGVudCwgcGFyc2UuZG9jLmNvbnRlbnQsIHBhcnNlLmZyb20sIHByZWZlcnJlZFBvcywgcHJlZmVycmVkU2lkZSk7XG4gICAgaWYgKChpb3MgJiYgdmlldy5pbnB1dC5sYXN0SU9TRW50ZXIgPiBEYXRlLm5vdygpIC0gMjI1IHx8IGFuZHJvaWQpICYmXG4gICAgICAgIGFkZGVkTm9kZXMuc29tZShuID0+IG4ubm9kZVR5cGUgPT0gMSAmJiAhaXNJbmxpbmUudGVzdChuLm5vZGVOYW1lKSkgJiZcbiAgICAgICAgKCFjaGFuZ2UgfHwgY2hhbmdlLmVuZEEgPj0gY2hhbmdlLmVuZEIpICYmXG4gICAgICAgIHZpZXcuc29tZVByb3AoXCJoYW5kbGVLZXlEb3duXCIsIGYgPT4gZih2aWV3LCBrZXlFdmVudCgxMywgXCJFbnRlclwiKSkpKSB7XG4gICAgICAgIHZpZXcuaW5wdXQubGFzdElPU0VudGVyID0gMDtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWNoYW5nZSkge1xuICAgICAgICBpZiAodHlwZU92ZXIgJiYgc2VsIGluc3RhbmNlb2YgVGV4dFNlbGVjdGlvbiAmJiAhc2VsLmVtcHR5ICYmIHNlbC4kaGVhZC5zYW1lUGFyZW50KHNlbC4kYW5jaG9yKSAmJlxuICAgICAgICAgICAgIXZpZXcuY29tcG9zaW5nICYmICEocGFyc2Uuc2VsICYmIHBhcnNlLnNlbC5hbmNob3IgIT0gcGFyc2Uuc2VsLmhlYWQpKSB7XG4gICAgICAgICAgICBjaGFuZ2UgPSB7IHN0YXJ0OiBzZWwuZnJvbSwgZW5kQTogc2VsLnRvLCBlbmRCOiBzZWwudG8gfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwYXJzZS5zZWwpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2VsID0gcmVzb2x2ZVNlbGVjdGlvbih2aWV3LCB2aWV3LnN0YXRlLmRvYywgcGFyc2Uuc2VsKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsICYmICFzZWwuZXEodmlldy5zdGF0ZS5zZWxlY3Rpb24pKVxuICAgICAgICAgICAgICAgICAgICB2aWV3LmRpc3BhdGNoKHZpZXcuc3RhdGUudHIuc2V0U2VsZWN0aW9uKHNlbCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENocm9tZSBzb21ldGltZXMgbGVhdmVzIHRoZSBjdXJzb3IgYmVmb3JlIHRoZSBpbnNlcnRlZCB0ZXh0IHdoZW5cbiAgICAvLyBjb21wb3NpbmcgYWZ0ZXIgYSBjdXJzb3Igd3JhcHBlci4gVGhpcyBtb3ZlcyBpdCBmb3J3YXJkLlxuICAgIGlmIChjaHJvbWUgJiYgdmlldy5jdXJzb3JXcmFwcGVyICYmIHBhcnNlLnNlbCAmJiBwYXJzZS5zZWwuYW5jaG9yID09IHZpZXcuY3Vyc29yV3JhcHBlci5kZWNvLmZyb20gJiZcbiAgICAgICAgcGFyc2Uuc2VsLmhlYWQgPT0gcGFyc2Uuc2VsLmFuY2hvcikge1xuICAgICAgICBsZXQgc2l6ZSA9IGNoYW5nZS5lbmRCIC0gY2hhbmdlLnN0YXJ0O1xuICAgICAgICBwYXJzZS5zZWwgPSB7IGFuY2hvcjogcGFyc2Uuc2VsLmFuY2hvciArIHNpemUsIGhlYWQ6IHBhcnNlLnNlbC5hbmNob3IgKyBzaXplIH07XG4gICAgfVxuICAgIHZpZXcuaW5wdXQuZG9tQ2hhbmdlQ291bnQrKztcbiAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgb3ZlcndyaXRpbmcgYSBzZWxlY3Rpb24gYnkgdHlwaW5nIG1hdGNoZXNcbiAgICAvLyB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSBzZWxlY3RlZCBjb250ZW50LCBjcmVhdGluZyBhIGNoYW5nZVxuICAgIC8vIHRoYXQncyBzbWFsbGVyIHRoYW4gd2hhdCB3YXMgYWN0dWFsbHkgb3ZlcndyaXR0ZW4uXG4gICAgaWYgKHZpZXcuc3RhdGUuc2VsZWN0aW9uLmZyb20gPCB2aWV3LnN0YXRlLnNlbGVjdGlvbi50byAmJlxuICAgICAgICBjaGFuZ2Uuc3RhcnQgPT0gY2hhbmdlLmVuZEIgJiZcbiAgICAgICAgdmlldy5zdGF0ZS5zZWxlY3Rpb24gaW5zdGFuY2VvZiBUZXh0U2VsZWN0aW9uKSB7XG4gICAgICAgIGlmIChjaGFuZ2Uuc3RhcnQgPiB2aWV3LnN0YXRlLnNlbGVjdGlvbi5mcm9tICYmIGNoYW5nZS5zdGFydCA8PSB2aWV3LnN0YXRlLnNlbGVjdGlvbi5mcm9tICsgMiAmJlxuICAgICAgICAgICAgdmlldy5zdGF0ZS5zZWxlY3Rpb24uZnJvbSA+PSBwYXJzZS5mcm9tKSB7XG4gICAgICAgICAgICBjaGFuZ2Uuc3RhcnQgPSB2aWV3LnN0YXRlLnNlbGVjdGlvbi5mcm9tO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNoYW5nZS5lbmRBIDwgdmlldy5zdGF0ZS5zZWxlY3Rpb24udG8gJiYgY2hhbmdlLmVuZEEgPj0gdmlldy5zdGF0ZS5zZWxlY3Rpb24udG8gLSAyICYmXG4gICAgICAgICAgICB2aWV3LnN0YXRlLnNlbGVjdGlvbi50byA8PSBwYXJzZS50bykge1xuICAgICAgICAgICAgY2hhbmdlLmVuZEIgKz0gKHZpZXcuc3RhdGUuc2VsZWN0aW9uLnRvIC0gY2hhbmdlLmVuZEEpO1xuICAgICAgICAgICAgY2hhbmdlLmVuZEEgPSB2aWV3LnN0YXRlLnNlbGVjdGlvbi50bztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJRTExIHdpbGwgaW5zZXJ0IGEgbm9uLWJyZWFraW5nIHNwYWNlIF9haGVhZF8gb2YgdGhlIHNwYWNlIGFmdGVyXG4gICAgLy8gdGhlIGN1cnNvciBzcGFjZSB3aGVuIGFkZGluZyBhIHNwYWNlIGJlZm9yZSBhbm90aGVyIHNwYWNlLiBXaGVuXG4gICAgLy8gdGhhdCBoYXBwZW5lZCwgYWRqdXN0IHRoZSBjaGFuZ2UgdG8gY292ZXIgdGhlIHNwYWNlIGluc3RlYWQuXG4gICAgaWYgKGllICYmIGllX3ZlcnNpb24gPD0gMTEgJiYgY2hhbmdlLmVuZEIgPT0gY2hhbmdlLnN0YXJ0ICsgMSAmJlxuICAgICAgICBjaGFuZ2UuZW5kQSA9PSBjaGFuZ2Uuc3RhcnQgJiYgY2hhbmdlLnN0YXJ0ID4gcGFyc2UuZnJvbSAmJlxuICAgICAgICBwYXJzZS5kb2MudGV4dEJldHdlZW4oY2hhbmdlLnN0YXJ0IC0gcGFyc2UuZnJvbSAtIDEsIGNoYW5nZS5zdGFydCAtIHBhcnNlLmZyb20gKyAxKSA9PSBcIiBcXHUwMGEwXCIpIHtcbiAgICAgICAgY2hhbmdlLnN0YXJ0LS07XG4gICAgICAgIGNoYW5nZS5lbmRBLS07XG4gICAgICAgIGNoYW5nZS5lbmRCLS07XG4gICAgfVxuICAgIGxldCAkZnJvbSA9IHBhcnNlLmRvYy5yZXNvbHZlTm9DYWNoZShjaGFuZ2Uuc3RhcnQgLSBwYXJzZS5mcm9tKTtcbiAgICBsZXQgJHRvID0gcGFyc2UuZG9jLnJlc29sdmVOb0NhY2hlKGNoYW5nZS5lbmRCIC0gcGFyc2UuZnJvbSk7XG4gICAgbGV0ICRmcm9tQSA9IGRvYy5yZXNvbHZlKGNoYW5nZS5zdGFydCk7XG4gICAgbGV0IGlubGluZUNoYW5nZSA9ICRmcm9tLnNhbWVQYXJlbnQoJHRvKSAmJiAkZnJvbS5wYXJlbnQuaW5saW5lQ29udGVudCAmJiAkZnJvbUEuZW5kKCkgPj0gY2hhbmdlLmVuZEE7XG4gICAgbGV0IG5leHRTZWw7XG4gICAgLy8gSWYgdGhpcyBsb29rcyBsaWtlIHRoZSBlZmZlY3Qgb2YgcHJlc3NpbmcgRW50ZXIgKG9yIHdhcyByZWNvcmRlZFxuICAgIC8vIGFzIGJlaW5nIGFuIGlPUyBlbnRlciBwcmVzcyksIGp1c3QgZGlzcGF0Y2ggYW4gRW50ZXIga2V5IGluc3RlYWQuXG4gICAgaWYgKCgoaW9zICYmIHZpZXcuaW5wdXQubGFzdElPU0VudGVyID4gRGF0ZS5ub3coKSAtIDIyNSAmJlxuICAgICAgICAoIWlubGluZUNoYW5nZSB8fCBhZGRlZE5vZGVzLnNvbWUobiA9PiBuLm5vZGVOYW1lID09IFwiRElWXCIgfHwgbi5ub2RlTmFtZSA9PSBcIlBcIikpKSB8fFxuICAgICAgICAoIWlubGluZUNoYW5nZSAmJiAkZnJvbS5wb3MgPCBwYXJzZS5kb2MuY29udGVudC5zaXplICYmXG4gICAgICAgICAgICAobmV4dFNlbCA9IFNlbGVjdGlvbi5maW5kRnJvbShwYXJzZS5kb2MucmVzb2x2ZSgkZnJvbS5wb3MgKyAxKSwgMSwgdHJ1ZSkpICYmXG4gICAgICAgICAgICBuZXh0U2VsLmhlYWQgPT0gJHRvLnBvcykpICYmXG4gICAgICAgIHZpZXcuc29tZVByb3AoXCJoYW5kbGVLZXlEb3duXCIsIGYgPT4gZih2aWV3LCBrZXlFdmVudCgxMywgXCJFbnRlclwiKSkpKSB7XG4gICAgICAgIHZpZXcuaW5wdXQubGFzdElPU0VudGVyID0gMDtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBTYW1lIGZvciBiYWNrc3BhY2VcbiAgICBpZiAodmlldy5zdGF0ZS5zZWxlY3Rpb24uYW5jaG9yID4gY2hhbmdlLnN0YXJ0ICYmXG4gICAgICAgIGxvb2tzTGlrZUpvaW4oZG9jLCBjaGFuZ2Uuc3RhcnQsIGNoYW5nZS5lbmRBLCAkZnJvbSwgJHRvKSAmJlxuICAgICAgICB2aWV3LnNvbWVQcm9wKFwiaGFuZGxlS2V5RG93blwiLCBmID0+IGYodmlldywga2V5RXZlbnQoOCwgXCJCYWNrc3BhY2VcIikpKSkge1xuICAgICAgICBpZiAoYW5kcm9pZCAmJiBjaHJvbWUpXG4gICAgICAgICAgICB2aWV3LmRvbU9ic2VydmVyLnN1cHByZXNzU2VsZWN0aW9uVXBkYXRlcygpOyAvLyAjODIwXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gQ2hyb21lIEFuZHJvaWQgd2lsbCBvY2Nhc2lvbmFsbHksIGR1cmluZyBjb21wb3NpdGlvbiwgZGVsZXRlIHRoZVxuICAgIC8vIGVudGlyZSBjb21wb3NpdGlvbiBhbmQgdGhlbiBpbW1lZGlhdGVseSBpbnNlcnQgaXQgYWdhaW4uIFRoaXMgaXNcbiAgICAvLyB1c2VkIHRvIGRldGVjdCB0aGF0IHNpdHVhdGlvbi5cbiAgICBpZiAoY2hyb21lICYmIGFuZHJvaWQgJiYgY2hhbmdlLmVuZEIgPT0gY2hhbmdlLnN0YXJ0KVxuICAgICAgICB2aWV3LmlucHV0Lmxhc3RBbmRyb2lkRGVsZXRlID0gRGF0ZS5ub3coKTtcbiAgICAvLyBUaGlzIHRyaWVzIHRvIGRldGVjdCBBbmRyb2lkIHZpcnR1YWwga2V5Ym9hcmRcbiAgICAvLyBlbnRlci1hbmQtcGljay1zdWdnZXN0aW9uIGFjdGlvbi4gVGhhdCBzb21ldGltZXMgKHNlZSBpc3N1ZVxuICAgIC8vICMxMDU5KSBmaXJzdCBmaXJlcyBhIERPTSBtdXRhdGlvbiwgYmVmb3JlIG1vdmluZyB0aGUgc2VsZWN0aW9uIHRvXG4gICAgLy8gdGhlIG5ld2x5IGNyZWF0ZWQgYmxvY2suIEFuZCB0aGVuLCBiZWNhdXNlIFByb3NlTWlycm9yIGNsZWFucyB1cFxuICAgIC8vIHRoZSBET00gc2VsZWN0aW9uLCBpdCBnaXZlcyB1cCBtb3ZpbmcgdGhlIHNlbGVjdGlvbiBlbnRpcmVseSxcbiAgICAvLyBsZWF2aW5nIHRoZSBjdXJzb3IgaW4gdGhlIHdyb25nIHBsYWNlLiBXaGVuIHRoYXQgaGFwcGVucywgd2UgZHJvcFxuICAgIC8vIHRoZSBuZXcgcGFyYWdyYXBoIGZyb20gdGhlIGluaXRpYWwgY2hhbmdlLCBhbmQgZmlyZSBhIHNpbXVsYXRlZFxuICAgIC8vIGVudGVyIGtleSBhZnRlcndhcmRzLlxuICAgIGlmIChhbmRyb2lkICYmICFpbmxpbmVDaGFuZ2UgJiYgJGZyb20uc3RhcnQoKSAhPSAkdG8uc3RhcnQoKSAmJiAkdG8ucGFyZW50T2Zmc2V0ID09IDAgJiYgJGZyb20uZGVwdGggPT0gJHRvLmRlcHRoICYmXG4gICAgICAgIHBhcnNlLnNlbCAmJiBwYXJzZS5zZWwuYW5jaG9yID09IHBhcnNlLnNlbC5oZWFkICYmIHBhcnNlLnNlbC5oZWFkID09IGNoYW5nZS5lbmRBKSB7XG4gICAgICAgIGNoYW5nZS5lbmRCIC09IDI7XG4gICAgICAgICR0byA9IHBhcnNlLmRvYy5yZXNvbHZlTm9DYWNoZShjaGFuZ2UuZW5kQiAtIHBhcnNlLmZyb20pO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHZpZXcuc29tZVByb3AoXCJoYW5kbGVLZXlEb3duXCIsIGZ1bmN0aW9uIChmKSB7IHJldHVybiBmKHZpZXcsIGtleUV2ZW50KDEzLCBcIkVudGVyXCIpKTsgfSk7XG4gICAgICAgIH0sIDIwKTtcbiAgICB9XG4gICAgbGV0IGNoRnJvbSA9IGNoYW5nZS5zdGFydCwgY2hUbyA9IGNoYW5nZS5lbmRBO1xuICAgIGxldCB0ciwgc3RvcmVkTWFya3MsIG1hcmtDaGFuZ2U7XG4gICAgaWYgKGlubGluZUNoYW5nZSkge1xuICAgICAgICBpZiAoJGZyb20ucG9zID09ICR0by5wb3MpIHsgLy8gRGVsZXRpb25cbiAgICAgICAgICAgIC8vIElFMTEgc29tZXRpbWVzIHdlaXJkbHkgbW92ZXMgdGhlIERPTSBzZWxlY3Rpb24gYXJvdW5kIGFmdGVyXG4gICAgICAgICAgICAvLyBiYWNrc3BhY2luZyBvdXQgdGhlIGZpcnN0IGVsZW1lbnQgaW4gYSB0ZXh0YmxvY2tcbiAgICAgICAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDw9IDExICYmICRmcm9tLnBhcmVudE9mZnNldCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgdmlldy5kb21PYnNlcnZlci5zdXBwcmVzc1NlbGVjdGlvblVwZGF0ZXMoKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHNlbGVjdGlvblRvRE9NKHZpZXcpLCAyMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ciA9IHZpZXcuc3RhdGUudHIuZGVsZXRlKGNoRnJvbSwgY2hUbyk7XG4gICAgICAgICAgICBzdG9yZWRNYXJrcyA9IGRvYy5yZXNvbHZlKGNoYW5nZS5zdGFydCkubWFya3NBY3Jvc3MoZG9jLnJlc29sdmUoY2hhbmdlLmVuZEEpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICggLy8gQWRkaW5nIG9yIHJlbW92aW5nIGEgbWFya1xuICAgICAgICBjaGFuZ2UuZW5kQSA9PSBjaGFuZ2UuZW5kQiAmJlxuICAgICAgICAgICAgKG1hcmtDaGFuZ2UgPSBpc01hcmtDaGFuZ2UoJGZyb20ucGFyZW50LmNvbnRlbnQuY3V0KCRmcm9tLnBhcmVudE9mZnNldCwgJHRvLnBhcmVudE9mZnNldCksICRmcm9tQS5wYXJlbnQuY29udGVudC5jdXQoJGZyb21BLnBhcmVudE9mZnNldCwgY2hhbmdlLmVuZEEgLSAkZnJvbUEuc3RhcnQoKSkpKSkge1xuICAgICAgICAgICAgdHIgPSB2aWV3LnN0YXRlLnRyO1xuICAgICAgICAgICAgaWYgKG1hcmtDaGFuZ2UudHlwZSA9PSBcImFkZFwiKVxuICAgICAgICAgICAgICAgIHRyLmFkZE1hcmsoY2hGcm9tLCBjaFRvLCBtYXJrQ2hhbmdlLm1hcmspO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRyLnJlbW92ZU1hcmsoY2hGcm9tLCBjaFRvLCBtYXJrQ2hhbmdlLm1hcmspO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCRmcm9tLnBhcmVudC5jaGlsZCgkZnJvbS5pbmRleCgpKS5pc1RleHQgJiYgJGZyb20uaW5kZXgoKSA9PSAkdG8uaW5kZXgoKSAtICgkdG8udGV4dE9mZnNldCA/IDAgOiAxKSkge1xuICAgICAgICAgICAgLy8gQm90aCBwb3NpdGlvbnMgaW4gdGhlIHNhbWUgdGV4dCBub2RlIC0tIHNpbXBseSBpbnNlcnQgdGV4dFxuICAgICAgICAgICAgbGV0IHRleHQgPSAkZnJvbS5wYXJlbnQudGV4dEJldHdlZW4oJGZyb20ucGFyZW50T2Zmc2V0LCAkdG8ucGFyZW50T2Zmc2V0KTtcbiAgICAgICAgICAgIGlmICh2aWV3LnNvbWVQcm9wKFwiaGFuZGxlVGV4dElucHV0XCIsIGYgPT4gZih2aWV3LCBjaEZyb20sIGNoVG8sIHRleHQpKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0ciA9IHZpZXcuc3RhdGUudHIuaW5zZXJ0VGV4dCh0ZXh0LCBjaEZyb20sIGNoVG8pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghdHIpXG4gICAgICAgIHRyID0gdmlldy5zdGF0ZS50ci5yZXBsYWNlKGNoRnJvbSwgY2hUbywgcGFyc2UuZG9jLnNsaWNlKGNoYW5nZS5zdGFydCAtIHBhcnNlLmZyb20sIGNoYW5nZS5lbmRCIC0gcGFyc2UuZnJvbSkpO1xuICAgIGlmIChwYXJzZS5zZWwpIHtcbiAgICAgICAgbGV0IHNlbCA9IHJlc29sdmVTZWxlY3Rpb24odmlldywgdHIuZG9jLCBwYXJzZS5zZWwpO1xuICAgICAgICAvLyBDaHJvbWUgQW5kcm9pZCB3aWxsIHNvbWV0aW1lcywgZHVyaW5nIGNvbXBvc2l0aW9uLCByZXBvcnQgdGhlXG4gICAgICAgIC8vIHNlbGVjdGlvbiBpbiB0aGUgd3JvbmcgcGxhY2UuIElmIGl0IGxvb2tzIGxpa2UgdGhhdCBpc1xuICAgICAgICAvLyBoYXBwZW5pbmcsIGRvbid0IHVwZGF0ZSB0aGUgc2VsZWN0aW9uLlxuICAgICAgICAvLyBFZGdlIGp1c3QgZG9lc24ndCBtb3ZlIHRoZSBjdXJzb3IgZm9yd2FyZCB3aGVuIHlvdSBzdGFydCB0eXBpbmdcbiAgICAgICAgLy8gaW4gYW4gZW1wdHkgYmxvY2sgb3IgYmV0d2VlbiBiciBub2Rlcy5cbiAgICAgICAgaWYgKHNlbCAmJiAhKGNocm9tZSAmJiBhbmRyb2lkICYmIHZpZXcuY29tcG9zaW5nICYmIHNlbC5lbXB0eSAmJlxuICAgICAgICAgICAgKGNoYW5nZS5zdGFydCAhPSBjaGFuZ2UuZW5kQiB8fCB2aWV3LmlucHV0Lmxhc3RBbmRyb2lkRGVsZXRlIDwgRGF0ZS5ub3coKSAtIDEwMCkgJiZcbiAgICAgICAgICAgIChzZWwuaGVhZCA9PSBjaEZyb20gfHwgc2VsLmhlYWQgPT0gdHIubWFwcGluZy5tYXAoY2hUbykgLSAxKSB8fFxuICAgICAgICAgICAgaWUgJiYgc2VsLmVtcHR5ICYmIHNlbC5oZWFkID09IGNoRnJvbSkpXG4gICAgICAgICAgICB0ci5zZXRTZWxlY3Rpb24oc2VsKTtcbiAgICB9XG4gICAgaWYgKHN0b3JlZE1hcmtzKVxuICAgICAgICB0ci5lbnN1cmVNYXJrcyhzdG9yZWRNYXJrcyk7XG4gICAgdmlldy5kaXNwYXRjaCh0ci5zY3JvbGxJbnRvVmlldygpKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVTZWxlY3Rpb24odmlldywgZG9jLCBwYXJzZWRTZWwpIHtcbiAgICBpZiAoTWF0aC5tYXgocGFyc2VkU2VsLmFuY2hvciwgcGFyc2VkU2VsLmhlYWQpID4gZG9jLmNvbnRlbnQuc2l6ZSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHNlbGVjdGlvbkJldHdlZW4odmlldywgZG9jLnJlc29sdmUocGFyc2VkU2VsLmFuY2hvciksIGRvYy5yZXNvbHZlKHBhcnNlZFNlbC5oZWFkKSk7XG59XG4vLyBHaXZlbiB0d28gc2FtZS1sZW5ndGgsIG5vbi1lbXB0eSBmcmFnbWVudHMgb2YgaW5saW5lIGNvbnRlbnQsXG4vLyBkZXRlcm1pbmUgd2hldGhlciB0aGUgZmlyc3QgY291bGQgYmUgY3JlYXRlZCBmcm9tIHRoZSBzZWNvbmQgYnlcbi8vIHJlbW92aW5nIG9yIGFkZGluZyBhIHNpbmdsZSBtYXJrIHR5cGUuXG5mdW5jdGlvbiBpc01hcmtDaGFuZ2UoY3VyLCBwcmV2KSB7XG4gICAgbGV0IGN1ck1hcmtzID0gY3VyLmZpcnN0Q2hpbGQubWFya3MsIHByZXZNYXJrcyA9IHByZXYuZmlyc3RDaGlsZC5tYXJrcztcbiAgICBsZXQgYWRkZWQgPSBjdXJNYXJrcywgcmVtb3ZlZCA9IHByZXZNYXJrcywgdHlwZSwgbWFyaywgdXBkYXRlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldk1hcmtzLmxlbmd0aDsgaSsrKVxuICAgICAgICBhZGRlZCA9IHByZXZNYXJrc1tpXS5yZW1vdmVGcm9tU2V0KGFkZGVkKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1ck1hcmtzLmxlbmd0aDsgaSsrKVxuICAgICAgICByZW1vdmVkID0gY3VyTWFya3NbaV0ucmVtb3ZlRnJvbVNldChyZW1vdmVkKTtcbiAgICBpZiAoYWRkZWQubGVuZ3RoID09IDEgJiYgcmVtb3ZlZC5sZW5ndGggPT0gMCkge1xuICAgICAgICBtYXJrID0gYWRkZWRbMF07XG4gICAgICAgIHR5cGUgPSBcImFkZFwiO1xuICAgICAgICB1cGRhdGUgPSAobm9kZSkgPT4gbm9kZS5tYXJrKG1hcmsuYWRkVG9TZXQobm9kZS5tYXJrcykpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhZGRlZC5sZW5ndGggPT0gMCAmJiByZW1vdmVkLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIG1hcmsgPSByZW1vdmVkWzBdO1xuICAgICAgICB0eXBlID0gXCJyZW1vdmVcIjtcbiAgICAgICAgdXBkYXRlID0gKG5vZGUpID0+IG5vZGUubWFyayhtYXJrLnJlbW92ZUZyb21TZXQobm9kZS5tYXJrcykpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGxldCB1cGRhdGVkID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2LmNoaWxkQ291bnQ7IGkrKylcbiAgICAgICAgdXBkYXRlZC5wdXNoKHVwZGF0ZShwcmV2LmNoaWxkKGkpKSk7XG4gICAgaWYgKEZyYWdtZW50LmZyb20odXBkYXRlZCkuZXEoY3VyKSlcbiAgICAgICAgcmV0dXJuIHsgbWFyaywgdHlwZSB9O1xufVxuZnVuY3Rpb24gbG9va3NMaWtlSm9pbihvbGQsIHN0YXJ0LCBlbmQsICRuZXdTdGFydCwgJG5ld0VuZCkge1xuICAgIGlmICghJG5ld1N0YXJ0LnBhcmVudC5pc1RleHRibG9jayB8fFxuICAgICAgICAvLyBUaGUgY29udGVudCBtdXN0IGhhdmUgc2hydW5rXG4gICAgICAgIGVuZCAtIHN0YXJ0IDw9ICRuZXdFbmQucG9zIC0gJG5ld1N0YXJ0LnBvcyB8fFxuICAgICAgICAvLyBuZXdFbmQgbXVzdCBwb2ludCBkaXJlY3RseSBhdCBvciBhZnRlciB0aGUgZW5kIG9mIHRoZSBibG9jayB0aGF0IG5ld1N0YXJ0IHBvaW50cyBpbnRvXG4gICAgICAgIHNraXBDbG9zaW5nQW5kT3BlbmluZygkbmV3U3RhcnQsIHRydWUsIGZhbHNlKSA8ICRuZXdFbmQucG9zKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgbGV0ICRzdGFydCA9IG9sZC5yZXNvbHZlKHN0YXJ0KTtcbiAgICAvLyBTdGFydCBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgYSBibG9ja1xuICAgIGlmICgkc3RhcnQucGFyZW50T2Zmc2V0IDwgJHN0YXJ0LnBhcmVudC5jb250ZW50LnNpemUgfHwgISRzdGFydC5wYXJlbnQuaXNUZXh0YmxvY2spXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsZXQgJG5leHQgPSBvbGQucmVzb2x2ZShza2lwQ2xvc2luZ0FuZE9wZW5pbmcoJHN0YXJ0LCB0cnVlLCB0cnVlKSk7XG4gICAgLy8gVGhlIG5leHQgdGV4dGJsb2NrIG11c3Qgc3RhcnQgYmVmb3JlIGVuZCBhbmQgZW5kIG5lYXIgaXRcbiAgICBpZiAoISRuZXh0LnBhcmVudC5pc1RleHRibG9jayB8fCAkbmV4dC5wb3MgPiBlbmQgfHxcbiAgICAgICAgc2tpcENsb3NpbmdBbmRPcGVuaW5nKCRuZXh0LCB0cnVlLCBmYWxzZSkgPCBlbmQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyBUaGUgZnJhZ21lbnRzIGFmdGVyIHRoZSBqb2luIHBvaW50IG11c3QgbWF0Y2hcbiAgICByZXR1cm4gJG5ld1N0YXJ0LnBhcmVudC5jb250ZW50LmN1dCgkbmV3U3RhcnQucGFyZW50T2Zmc2V0KS5lcSgkbmV4dC5wYXJlbnQuY29udGVudCk7XG59XG5mdW5jdGlvbiBza2lwQ2xvc2luZ0FuZE9wZW5pbmcoJHBvcywgZnJvbUVuZCwgbWF5T3Blbikge1xuICAgIGxldCBkZXB0aCA9ICRwb3MuZGVwdGgsIGVuZCA9IGZyb21FbmQgPyAkcG9zLmVuZCgpIDogJHBvcy5wb3M7XG4gICAgd2hpbGUgKGRlcHRoID4gMCAmJiAoZnJvbUVuZCB8fCAkcG9zLmluZGV4QWZ0ZXIoZGVwdGgpID09ICRwb3Mubm9kZShkZXB0aCkuY2hpbGRDb3VudCkpIHtcbiAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgZW5kKys7XG4gICAgICAgIGZyb21FbmQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG1heU9wZW4pIHtcbiAgICAgICAgbGV0IG5leHQgPSAkcG9zLm5vZGUoZGVwdGgpLm1heWJlQ2hpbGQoJHBvcy5pbmRleEFmdGVyKGRlcHRoKSk7XG4gICAgICAgIHdoaWxlIChuZXh0ICYmICFuZXh0LmlzTGVhZikge1xuICAgICAgICAgICAgbmV4dCA9IG5leHQuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGVuZCsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbmQ7XG59XG5mdW5jdGlvbiBmaW5kRGlmZihhLCBiLCBwb3MsIHByZWZlcnJlZFBvcywgcHJlZmVycmVkU2lkZSkge1xuICAgIGxldCBzdGFydCA9IGEuZmluZERpZmZTdGFydChiLCBwb3MpO1xuICAgIGlmIChzdGFydCA9PSBudWxsKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBsZXQgeyBhOiBlbmRBLCBiOiBlbmRCIH0gPSBhLmZpbmREaWZmRW5kKGIsIHBvcyArIGEuc2l6ZSwgcG9zICsgYi5zaXplKTtcbiAgICBpZiAocHJlZmVycmVkU2lkZSA9PSBcImVuZFwiKSB7XG4gICAgICAgIGxldCBhZGp1c3QgPSBNYXRoLm1heCgwLCBzdGFydCAtIE1hdGgubWluKGVuZEEsIGVuZEIpKTtcbiAgICAgICAgcHJlZmVycmVkUG9zIC09IGVuZEEgKyBhZGp1c3QgLSBzdGFydDtcbiAgICB9XG4gICAgaWYgKGVuZEEgPCBzdGFydCAmJiBhLnNpemUgPCBiLnNpemUpIHtcbiAgICAgICAgbGV0IG1vdmUgPSBwcmVmZXJyZWRQb3MgPD0gc3RhcnQgJiYgcHJlZmVycmVkUG9zID49IGVuZEEgPyBzdGFydCAtIHByZWZlcnJlZFBvcyA6IDA7XG4gICAgICAgIHN0YXJ0IC09IG1vdmU7XG4gICAgICAgIGVuZEIgPSBzdGFydCArIChlbmRCIC0gZW5kQSk7XG4gICAgICAgIGVuZEEgPSBzdGFydDtcbiAgICB9XG4gICAgZWxzZSBpZiAoZW5kQiA8IHN0YXJ0KSB7XG4gICAgICAgIGxldCBtb3ZlID0gcHJlZmVycmVkUG9zIDw9IHN0YXJ0ICYmIHByZWZlcnJlZFBvcyA+PSBlbmRCID8gc3RhcnQgLSBwcmVmZXJyZWRQb3MgOiAwO1xuICAgICAgICBzdGFydCAtPSBtb3ZlO1xuICAgICAgICBlbmRBID0gc3RhcnQgKyAoZW5kQSAtIGVuZEIpO1xuICAgICAgICBlbmRCID0gc3RhcnQ7XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXJ0LCBlbmRBLCBlbmRCIH07XG59XG5cbi8qKlxuQGludGVybmFsXG4qL1xuY29uc3QgX19zZXJpYWxpemVGb3JDbGlwYm9hcmQgPSBzZXJpYWxpemVGb3JDbGlwYm9hcmQ7XG4vKipcbkBpbnRlcm5hbFxuKi9cbmNvbnN0IF9fcGFyc2VGcm9tQ2xpcGJvYXJkID0gcGFyc2VGcm9tQ2xpcGJvYXJkO1xuLyoqXG5AaW50ZXJuYWxcbiovXG5jb25zdCBfX2VuZENvbXBvc2l0aW9uID0gZW5kQ29tcG9zaXRpb247XG4vKipcbkFuIGVkaXRvciB2aWV3IG1hbmFnZXMgdGhlIERPTSBzdHJ1Y3R1cmUgdGhhdCByZXByZXNlbnRzIGFuXG5lZGl0YWJsZSBkb2N1bWVudC4gSXRzIHN0YXRlIGFuZCBiZWhhdmlvciBhcmUgZGV0ZXJtaW5lZCBieSBpdHNcbltwcm9wc10oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI3ZpZXcuRGlyZWN0RWRpdG9yUHJvcHMpLlxuKi9cbmNsYXNzIEVkaXRvclZpZXcge1xuICAgIC8qKlxuICAgIENyZWF0ZSBhIHZpZXcuIGBwbGFjZWAgbWF5IGJlIGEgRE9NIG5vZGUgdGhhdCB0aGUgZWRpdG9yIHNob3VsZFxuICAgIGJlIGFwcGVuZGVkIHRvLCBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBwbGFjZSBpdCBpbnRvIHRoZSBkb2N1bWVudCxcbiAgICBvciBhbiBvYmplY3Qgd2hvc2UgYG1vdW50YCBwcm9wZXJ0eSBob2xkcyB0aGUgbm9kZSB0byB1c2UgYXMgdGhlXG4gICAgZG9jdW1lbnQgY29udGFpbmVyLiBJZiBpdCBpcyBgbnVsbGAsIHRoZSBlZGl0b3Igd2lsbCBub3QgYmVcbiAgICBhZGRlZCB0byB0aGUgZG9jdW1lbnQuXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwbGFjZSwgcHJvcHMpIHtcbiAgICAgICAgdGhpcy5fcm9vdCA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICBAaW50ZXJuYWxcbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICBLbHVkZ2UgdXNlZCB0byB3b3JrIGFyb3VuZCBhIENocm9tZSBidWcgQGludGVybmFsXG4gICAgICAgICovXG4gICAgICAgIHRoaXMudHJhY2tXcml0ZXMgPSBudWxsO1xuICAgICAgICB0aGlzLm1vdW50ZWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgIEBpbnRlcm5hbFxuICAgICAgICAqL1xuICAgICAgICB0aGlzLm1hcmtDdXJzb3IgPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgQGludGVybmFsXG4gICAgICAgICovXG4gICAgICAgIHRoaXMuY3Vyc29yV3JhcHBlciA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICBAaW50ZXJuYWxcbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRWaWV3RGVzYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgLyoqXG4gICAgICAgIEBpbnRlcm5hbFxuICAgICAgICAqL1xuICAgICAgICB0aGlzLmlucHV0ID0gbmV3IElucHV0U3RhdGU7XG4gICAgICAgIHRoaXMucHJldkRpcmVjdFBsdWdpbnMgPSBbXTtcbiAgICAgICAgdGhpcy5wbHVnaW5WaWV3cyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgSG9sZHMgYHRydWVgIHdoZW4gYSBoYWNrIG5vZGUgaXMgbmVlZGVkIGluIEZpcmVmb3ggdG8gcHJldmVudCB0aGVcbiAgICAgICAgW3NwYWNlIGlzIGVhdGVuIGlzc3VlXShodHRwczovL2dpdGh1Yi5jb20vUHJvc2VNaXJyb3IvcHJvc2VtaXJyb3IvaXNzdWVzLzY1MSlcbiAgICAgICAgQGludGVybmFsXG4gICAgICAgICovXG4gICAgICAgIHRoaXMucmVxdWlyZXNHZWNrb0hhY2tOb2RlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICBXaGVuIGVkaXRvciBjb250ZW50IGlzIGJlaW5nIGRyYWdnZWQsIHRoaXMgb2JqZWN0IGNvbnRhaW5zXG4gICAgICAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkcmFnZ2VkIHNsaWNlIGFuZCB3aGV0aGVyIGl0IGlzIGJlaW5nXG4gICAgICAgIGNvcGllZCBvciBtb3ZlZC4gQXQgYW55IG90aGVyIHRpbWUsIGl0IGlzIG51bGwuXG4gICAgICAgICovXG4gICAgICAgIHRoaXMuZHJhZ2dpbmcgPSBudWxsO1xuICAgICAgICB0aGlzLl9wcm9wcyA9IHByb3BzO1xuICAgICAgICB0aGlzLnN0YXRlID0gcHJvcHMuc3RhdGU7XG4gICAgICAgIHRoaXMuZGlyZWN0UGx1Z2lucyA9IHByb3BzLnBsdWdpbnMgfHwgW107XG4gICAgICAgIHRoaXMuZGlyZWN0UGx1Z2lucy5mb3JFYWNoKGNoZWNrU3RhdGVDb21wb25lbnQpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoID0gdGhpcy5kaXNwYXRjaC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmRvbSA9IChwbGFjZSAmJiBwbGFjZS5tb3VudCkgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgaWYgKHBsYWNlKSB7XG4gICAgICAgICAgICBpZiAocGxhY2UuYXBwZW5kQ2hpbGQpXG4gICAgICAgICAgICAgICAgcGxhY2UuYXBwZW5kQ2hpbGQodGhpcy5kb20pO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBsYWNlID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICBwbGFjZSh0aGlzLmRvbSk7XG4gICAgICAgICAgICBlbHNlIGlmIChwbGFjZS5tb3VudClcbiAgICAgICAgICAgICAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSBnZXRFZGl0YWJsZSh0aGlzKTtcbiAgICAgICAgdXBkYXRlQ3Vyc29yV3JhcHBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5ub2RlVmlld3MgPSBidWlsZE5vZGVWaWV3cyh0aGlzKTtcbiAgICAgICAgdGhpcy5kb2NWaWV3ID0gZG9jVmlld0Rlc2ModGhpcy5zdGF0ZS5kb2MsIGNvbXB1dGVEb2NEZWNvKHRoaXMpLCB2aWV3RGVjb3JhdGlvbnModGhpcyksIHRoaXMuZG9tLCB0aGlzKTtcbiAgICAgICAgdGhpcy5kb21PYnNlcnZlciA9IG5ldyBET01PYnNlcnZlcih0aGlzLCAoZnJvbSwgdG8sIHR5cGVPdmVyLCBhZGRlZCkgPT4gcmVhZERPTUNoYW5nZSh0aGlzLCBmcm9tLCB0bywgdHlwZU92ZXIsIGFkZGVkKSk7XG4gICAgICAgIHRoaXMuZG9tT2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICAgICAgaW5pdElucHV0KHRoaXMpO1xuICAgICAgICB0aGlzLnVwZGF0ZVBsdWdpblZpZXdzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgIEhvbGRzIGB0cnVlYCB3aGVuIGFcbiAgICBbY29tcG9zaXRpb25dKGh0dHBzOi8vdzNjLmdpdGh1Yi5pby91aWV2ZW50cy8jZXZlbnRzLWNvbXBvc2l0aW9uZXZlbnRzKVxuICAgIGlzIGFjdGl2ZS5cbiAgICAqL1xuICAgIGdldCBjb21wb3NpbmcoKSB7IHJldHVybiB0aGlzLmlucHV0LmNvbXBvc2luZzsgfVxuICAgIC8qKlxuICAgIFRoZSB2aWV3J3MgY3VycmVudCBbcHJvcHNdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyN2aWV3LkVkaXRvclByb3BzKS5cbiAgICAqL1xuICAgIGdldCBwcm9wcygpIHtcbiAgICAgICAgaWYgKHRoaXMuX3Byb3BzLnN0YXRlICE9IHRoaXMuc3RhdGUpIHtcbiAgICAgICAgICAgIGxldCBwcmV2ID0gdGhpcy5fcHJvcHM7XG4gICAgICAgICAgICB0aGlzLl9wcm9wcyA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQgbmFtZSBpbiBwcmV2KVxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb3BzW25hbWVdID0gcHJldltuYW1lXTtcbiAgICAgICAgICAgIHRoaXMuX3Byb3BzLnN0YXRlID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcHM7XG4gICAgfVxuICAgIC8qKlxuICAgIFVwZGF0ZSB0aGUgdmlldydzIHByb3BzLiBXaWxsIGltbWVkaWF0ZWx5IGNhdXNlIGFuIHVwZGF0ZSB0b1xuICAgIHRoZSBET00uXG4gICAgKi9cbiAgICB1cGRhdGUocHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3BzLmhhbmRsZURPTUV2ZW50cyAhPSB0aGlzLl9wcm9wcy5oYW5kbGVET01FdmVudHMpXG4gICAgICAgICAgICBlbnN1cmVMaXN0ZW5lcnModGhpcyk7XG4gICAgICAgIGxldCBwcmV2UHJvcHMgPSB0aGlzLl9wcm9wcztcbiAgICAgICAgdGhpcy5fcHJvcHMgPSBwcm9wcztcbiAgICAgICAgaWYgKHByb3BzLnBsdWdpbnMpIHtcbiAgICAgICAgICAgIHByb3BzLnBsdWdpbnMuZm9yRWFjaChjaGVja1N0YXRlQ29tcG9uZW50KTtcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0UGx1Z2lucyA9IHByb3BzLnBsdWdpbnM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZUlubmVyKHByb3BzLnN0YXRlLCBwcmV2UHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICBVcGRhdGUgdGhlIHZpZXcgYnkgdXBkYXRpbmcgZXhpc3RpbmcgcHJvcHMgb2JqZWN0IHdpdGggdGhlIG9iamVjdFxuICAgIGdpdmVuIGFzIGFyZ3VtZW50LiBFcXVpdmFsZW50IHRvIGB2aWV3LnVwZGF0ZShPYmplY3QuYXNzaWduKHt9LFxuICAgIHZpZXcucHJvcHMsIHByb3BzKSlgLlxuICAgICovXG4gICAgc2V0UHJvcHMocHJvcHMpIHtcbiAgICAgICAgbGV0IHVwZGF0ZWQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgbmFtZSBpbiB0aGlzLl9wcm9wcylcbiAgICAgICAgICAgIHVwZGF0ZWRbbmFtZV0gPSB0aGlzLl9wcm9wc1tuYW1lXTtcbiAgICAgICAgdXBkYXRlZC5zdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGZvciAobGV0IG5hbWUgaW4gcHJvcHMpXG4gICAgICAgICAgICB1cGRhdGVkW25hbWVdID0gcHJvcHNbbmFtZV07XG4gICAgICAgIHRoaXMudXBkYXRlKHVwZGF0ZWQpO1xuICAgIH1cbiAgICAvKipcbiAgICBVcGRhdGUgdGhlIGVkaXRvcidzIGBzdGF0ZWAgcHJvcCwgd2l0aG91dCB0b3VjaGluZyBhbnkgb2YgdGhlXG4gICAgb3RoZXIgcHJvcHMuXG4gICAgKi9cbiAgICB1cGRhdGVTdGF0ZShzdGF0ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlSW5uZXIoc3RhdGUsIHRoaXMuX3Byb3BzKTtcbiAgICB9XG4gICAgdXBkYXRlU3RhdGVJbm5lcihzdGF0ZSwgcHJldlByb3BzKSB7XG4gICAgICAgIGxldCBwcmV2ID0gdGhpcy5zdGF0ZSwgcmVkcmF3ID0gZmFsc2UsIHVwZGF0ZVNlbCA9IGZhbHNlO1xuICAgICAgICAvLyBXaGVuIHN0b3JlZCBtYXJrcyBhcmUgYWRkZWQsIHN0b3AgY29tcG9zaXRpb24sIHNvIHRoYXQgdGhleSBjYW5cbiAgICAgICAgLy8gYmUgZGlzcGxheWVkLlxuICAgICAgICBpZiAoc3RhdGUuc3RvcmVkTWFya3MgJiYgdGhpcy5jb21wb3NpbmcpIHtcbiAgICAgICAgICAgIGNsZWFyQ29tcG9zaXRpb24odGhpcyk7XG4gICAgICAgICAgICB1cGRhdGVTZWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgbGV0IHBsdWdpbnNDaGFuZ2VkID0gcHJldi5wbHVnaW5zICE9IHN0YXRlLnBsdWdpbnMgfHwgdGhpcy5fcHJvcHMucGx1Z2lucyAhPSBwcmV2UHJvcHMucGx1Z2lucztcbiAgICAgICAgaWYgKHBsdWdpbnNDaGFuZ2VkIHx8IHRoaXMuX3Byb3BzLnBsdWdpbnMgIT0gcHJldlByb3BzLnBsdWdpbnMgfHwgdGhpcy5fcHJvcHMubm9kZVZpZXdzICE9IHByZXZQcm9wcy5ub2RlVmlld3MpIHtcbiAgICAgICAgICAgIGxldCBub2RlVmlld3MgPSBidWlsZE5vZGVWaWV3cyh0aGlzKTtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VkTm9kZVZpZXdzKG5vZGVWaWV3cywgdGhpcy5ub2RlVmlld3MpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlVmlld3MgPSBub2RlVmlld3M7XG4gICAgICAgICAgICAgICAgcmVkcmF3ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGx1Z2luc0NoYW5nZWQgfHwgcHJldlByb3BzLmhhbmRsZURPTUV2ZW50cyAhPSB0aGlzLl9wcm9wcy5oYW5kbGVET01FdmVudHMpIHtcbiAgICAgICAgICAgIGVuc3VyZUxpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gZ2V0RWRpdGFibGUodGhpcyk7XG4gICAgICAgIHVwZGF0ZUN1cnNvcldyYXBwZXIodGhpcyk7XG4gICAgICAgIGxldCBpbm5lckRlY28gPSB2aWV3RGVjb3JhdGlvbnModGhpcyksIG91dGVyRGVjbyA9IGNvbXB1dGVEb2NEZWNvKHRoaXMpO1xuICAgICAgICBsZXQgc2Nyb2xsID0gcHJldi5wbHVnaW5zICE9IHN0YXRlLnBsdWdpbnMgJiYgIXByZXYuZG9jLmVxKHN0YXRlLmRvYykgPyBcInJlc2V0XCJcbiAgICAgICAgICAgIDogc3RhdGUuc2Nyb2xsVG9TZWxlY3Rpb24gPiBwcmV2LnNjcm9sbFRvU2VsZWN0aW9uID8gXCJ0byBzZWxlY3Rpb25cIiA6IFwicHJlc2VydmVcIjtcbiAgICAgICAgbGV0IHVwZGF0ZURvYyA9IHJlZHJhdyB8fCAhdGhpcy5kb2NWaWV3Lm1hdGNoZXNOb2RlKHN0YXRlLmRvYywgb3V0ZXJEZWNvLCBpbm5lckRlY28pO1xuICAgICAgICBpZiAodXBkYXRlRG9jIHx8ICFzdGF0ZS5zZWxlY3Rpb24uZXEocHJldi5zZWxlY3Rpb24pKVxuICAgICAgICAgICAgdXBkYXRlU2VsID0gdHJ1ZTtcbiAgICAgICAgbGV0IG9sZFNjcm9sbFBvcyA9IHNjcm9sbCA9PSBcInByZXNlcnZlXCIgJiYgdXBkYXRlU2VsICYmIHRoaXMuZG9tLnN0eWxlLm92ZXJmbG93QW5jaG9yID09IG51bGwgJiYgc3RvcmVTY3JvbGxQb3ModGhpcyk7XG4gICAgICAgIGlmICh1cGRhdGVTZWwpIHtcbiAgICAgICAgICAgIHRoaXMuZG9tT2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICAgICAgLy8gV29yayBhcm91bmQgYW4gaXNzdWUgaW4gQ2hyb21lLCBJRSwgYW5kIEVkZ2Ugd2hlcmUgY2hhbmdpbmdcbiAgICAgICAgICAgIC8vIHRoZSBET00gYXJvdW5kIGFuIGFjdGl2ZSBzZWxlY3Rpb24gcHV0cyBpdCBpbnRvIGEgYnJva2VuXG4gICAgICAgICAgICAvLyBzdGF0ZSB3aGVyZSB0aGUgdGhpbmcgdGhlIHVzZXIgc2VlcyBkaWZmZXJzIGZyb20gdGhlXG4gICAgICAgICAgICAvLyBzZWxlY3Rpb24gcmVwb3J0ZWQgYnkgdGhlIFNlbGVjdGlvbiBvYmplY3QgKCM3MTAsICM5NzMsXG4gICAgICAgICAgICAvLyAjMTAxMSwgIzEwMTMsICMxMDM1KS5cbiAgICAgICAgICAgIGxldCBmb3JjZVNlbFVwZGF0ZSA9IHVwZGF0ZURvYyAmJiAoaWUgfHwgY2hyb21lKSAmJiAhdGhpcy5jb21wb3NpbmcgJiZcbiAgICAgICAgICAgICAgICAhcHJldi5zZWxlY3Rpb24uZW1wdHkgJiYgIXN0YXRlLnNlbGVjdGlvbi5lbXB0eSAmJiBzZWxlY3Rpb25Db250ZXh0Q2hhbmdlZChwcmV2LnNlbGVjdGlvbiwgc3RhdGUuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGlmICh1cGRhdGVEb2MpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSB0aGF0IHRoZSBzZWxlY3Rpb24gcG9pbnRzIGludG8gaXMgd3JpdHRlbiB0byxcbiAgICAgICAgICAgICAgICAvLyBDaHJvbWUgc29tZXRpbWVzIHN0YXJ0cyBtaXNyZXBvcnRpbmcgdGhlIHNlbGVjdGlvbiwgc28gdGhpc1xuICAgICAgICAgICAgICAgIC8vIHRyYWNrcyB0aGF0IGFuZCBmb3JjZXMgYSBzZWxlY3Rpb24gcmVzZXQgd2hlbiBvdXIgdXBkYXRlXG4gICAgICAgICAgICAgICAgLy8gZGlkIHdyaXRlIHRvIHRoZSBub2RlLlxuICAgICAgICAgICAgICAgIGxldCBjaHJvbWVLbHVkZ2UgPSBjaHJvbWUgPyAodGhpcy50cmFja1dyaXRlcyA9IHRoaXMuZG9tU2VsZWN0aW9uUmFuZ2UoKS5mb2N1c05vZGUpIDogbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAocmVkcmF3IHx8ICF0aGlzLmRvY1ZpZXcudXBkYXRlKHN0YXRlLmRvYywgb3V0ZXJEZWNvLCBpbm5lckRlY28sIHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jVmlldy51cGRhdGVPdXRlckRlY28oW10pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY1ZpZXcuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY1ZpZXcgPSBkb2NWaWV3RGVzYyhzdGF0ZS5kb2MsIG91dGVyRGVjbywgaW5uZXJEZWNvLCB0aGlzLmRvbSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjaHJvbWVLbHVkZ2UgJiYgIXRoaXMudHJhY2tXcml0ZXMpXG4gICAgICAgICAgICAgICAgICAgIGZvcmNlU2VsVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdvcmsgYXJvdW5kIGZvciBhbiBpc3N1ZSB3aGVyZSBhbiB1cGRhdGUgYXJyaXZpbmcgcmlnaHQgYmV0d2VlblxuICAgICAgICAgICAgLy8gYSBET00gc2VsZWN0aW9uIGNoYW5nZSBhbmQgdGhlIFwic2VsZWN0aW9uY2hhbmdlXCIgZXZlbnQgZm9yIGl0XG4gICAgICAgICAgICAvLyBjYW4gY2F1c2UgYSBzcHVyaW91cyBET00gc2VsZWN0aW9uIHVwZGF0ZSwgZGlzcnVwdGluZyBtb3VzZVxuICAgICAgICAgICAgLy8gZHJhZyBzZWxlY3Rpb24uXG4gICAgICAgICAgICBpZiAoZm9yY2VTZWxVcGRhdGUgfHxcbiAgICAgICAgICAgICAgICAhKHRoaXMuaW5wdXQubW91c2VEb3duICYmIHRoaXMuZG9tT2JzZXJ2ZXIuY3VycmVudFNlbGVjdGlvbi5lcSh0aGlzLmRvbVNlbGVjdGlvblJhbmdlKCkpICYmXG4gICAgICAgICAgICAgICAgICAgIGFuY2hvckluUmlnaHRQbGFjZSh0aGlzKSkpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Ub0RPTSh0aGlzLCBmb3JjZVNlbFVwZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzeW5jTm9kZVNlbGVjdGlvbih0aGlzLCBzdGF0ZS5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgIHRoaXMuZG9tT2JzZXJ2ZXIuc2V0Q3VyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRvbU9ic2VydmVyLnN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVQbHVnaW5WaWV3cyhwcmV2KTtcbiAgICAgICAgaWYgKHNjcm9sbCA9PSBcInJlc2V0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuZG9tLnNjcm9sbFRvcCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2Nyb2xsID09IFwidG8gc2VsZWN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9TZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvbGRTY3JvbGxQb3MpIHtcbiAgICAgICAgICAgIHJlc2V0U2Nyb2xsUG9zKG9sZFNjcm9sbFBvcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBzY3JvbGxUb1NlbGVjdGlvbigpIHtcbiAgICAgICAgbGV0IHN0YXJ0RE9NID0gdGhpcy5kb21TZWxlY3Rpb25SYW5nZSgpLmZvY3VzTm9kZTtcbiAgICAgICAgaWYgKHRoaXMuc29tZVByb3AoXCJoYW5kbGVTY3JvbGxUb1NlbGVjdGlvblwiLCBmID0+IGYodGhpcykpKSA7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhdGUuc2VsZWN0aW9uIGluc3RhbmNlb2YgTm9kZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgbGV0IHRhcmdldCA9IHRoaXMuZG9jVmlldy5kb21BZnRlclBvcyh0aGlzLnN0YXRlLnNlbGVjdGlvbi5mcm9tKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXQubm9kZVR5cGUgPT0gMSlcbiAgICAgICAgICAgICAgICBzY3JvbGxSZWN0SW50b1ZpZXcodGhpcywgdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBzdGFydERPTSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzY3JvbGxSZWN0SW50b1ZpZXcodGhpcywgdGhpcy5jb29yZHNBdFBvcyh0aGlzLnN0YXRlLnNlbGVjdGlvbi5oZWFkLCAxKSwgc3RhcnRET00pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRlc3Ryb3lQbHVnaW5WaWV3cygpIHtcbiAgICAgICAgbGV0IHZpZXc7XG4gICAgICAgIHdoaWxlICh2aWV3ID0gdGhpcy5wbHVnaW5WaWV3cy5wb3AoKSlcbiAgICAgICAgICAgIGlmICh2aWV3LmRlc3Ryb3kpXG4gICAgICAgICAgICAgICAgdmlldy5kZXN0cm95KCk7XG4gICAgfVxuICAgIHVwZGF0ZVBsdWdpblZpZXdzKHByZXZTdGF0ZSkge1xuICAgICAgICBpZiAoIXByZXZTdGF0ZSB8fCBwcmV2U3RhdGUucGx1Z2lucyAhPSB0aGlzLnN0YXRlLnBsdWdpbnMgfHwgdGhpcy5kaXJlY3RQbHVnaW5zICE9IHRoaXMucHJldkRpcmVjdFBsdWdpbnMpIHtcbiAgICAgICAgICAgIHRoaXMucHJldkRpcmVjdFBsdWdpbnMgPSB0aGlzLmRpcmVjdFBsdWdpbnM7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lQbHVnaW5WaWV3cygpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRpcmVjdFBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgcGx1Z2luID0gdGhpcy5kaXJlY3RQbHVnaW5zW2ldO1xuICAgICAgICAgICAgICAgIGlmIChwbHVnaW4uc3BlYy52aWV3KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpblZpZXdzLnB1c2gocGx1Z2luLnNwZWMudmlldyh0aGlzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc3RhdGUucGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBwbHVnaW4gPSB0aGlzLnN0YXRlLnBsdWdpbnNbaV07XG4gICAgICAgICAgICAgICAgaWYgKHBsdWdpbi5zcGVjLnZpZXcpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luVmlld3MucHVzaChwbHVnaW4uc3BlYy52aWV3KHRoaXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wbHVnaW5WaWV3cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBwbHVnaW5WaWV3ID0gdGhpcy5wbHVnaW5WaWV3c1tpXTtcbiAgICAgICAgICAgICAgICBpZiAocGx1Z2luVmlldy51cGRhdGUpXG4gICAgICAgICAgICAgICAgICAgIHBsdWdpblZpZXcudXBkYXRlKHRoaXMsIHByZXZTdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgc29tZVByb3AocHJvcE5hbWUsIGYpIHtcbiAgICAgICAgbGV0IHByb3AgPSB0aGlzLl9wcm9wcyAmJiB0aGlzLl9wcm9wc1twcm9wTmFtZV0sIHZhbHVlO1xuICAgICAgICBpZiAocHJvcCAhPSBudWxsICYmICh2YWx1ZSA9IGYgPyBmKHByb3ApIDogcHJvcCkpXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kaXJlY3RQbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgcHJvcCA9IHRoaXMuZGlyZWN0UGx1Z2luc1tpXS5wcm9wc1twcm9wTmFtZV07XG4gICAgICAgICAgICBpZiAocHJvcCAhPSBudWxsICYmICh2YWx1ZSA9IGYgPyBmKHByb3ApIDogcHJvcCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwbHVnaW5zID0gdGhpcy5zdGF0ZS5wbHVnaW5zO1xuICAgICAgICBpZiAocGx1Z2lucylcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBwcm9wID0gcGx1Z2luc1tpXS5wcm9wc1twcm9wTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKHByb3AgIT0gbnVsbCAmJiAodmFsdWUgPSBmID8gZihwcm9wKSA6IHByb3ApKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgIFF1ZXJ5IHdoZXRoZXIgdGhlIHZpZXcgaGFzIGZvY3VzLlxuICAgICovXG4gICAgaGFzRm9jdXMoKSB7XG4gICAgICAgIC8vIFdvcmsgYXJvdW5kIElFIG5vdCBoYW5kbGluZyBmb2N1cyBjb3JyZWN0bHkgaWYgcmVzaXplIGhhbmRsZXMgYXJlIHNob3duLlxuICAgICAgICAvLyBJZiB0aGUgY3Vyc29yIGlzIGluc2lkZSBhbiBlbGVtZW50IHdpdGggcmVzaXplIGhhbmRsZXMsIGFjdGl2ZUVsZW1lbnRcbiAgICAgICAgLy8gd2lsbCBiZSB0aGF0IGVsZW1lbnQgaW5zdGVhZCBvZiB0aGlzLmRvbS5cbiAgICAgICAgaWYgKGllKSB7XG4gICAgICAgICAgICAvLyBJZiBhY3RpdmVFbGVtZW50IGlzIHdpdGhpbiB0aGlzLmRvbSwgYW5kIHRoZXJlIGFyZSBubyBvdGhlciBlbGVtZW50c1xuICAgICAgICAgICAgLy8gc2V0dGluZyBgY29udGVudGVkaXRhYmxlYCB0byBmYWxzZSBpbiBiZXR3ZWVuLCB0cmVhdCBpdCBhcyBmb2N1c2VkLlxuICAgICAgICAgICAgbGV0IG5vZGUgPSB0aGlzLnJvb3QuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChub2RlID09IHRoaXMuZG9tKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKCFub2RlIHx8ICF0aGlzLmRvbS5jb250YWlucyhub2RlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAobm9kZSAmJiB0aGlzLmRvbSAhPSBub2RlICYmIHRoaXMuZG9tLmNvbnRhaW5zKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuY29udGVudEVkaXRhYmxlID09ICdmYWxzZScpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5hY3RpdmVFbGVtZW50ID09IHRoaXMuZG9tO1xuICAgIH1cbiAgICAvKipcbiAgICBGb2N1cyB0aGUgZWRpdG9yLlxuICAgICovXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIHRoaXMuZG9tT2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICBpZiAodGhpcy5lZGl0YWJsZSlcbiAgICAgICAgICAgIGZvY3VzUHJldmVudFNjcm9sbCh0aGlzLmRvbSk7XG4gICAgICAgIHNlbGVjdGlvblRvRE9NKHRoaXMpO1xuICAgICAgICB0aGlzLmRvbU9ic2VydmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgIEdldCB0aGUgZG9jdW1lbnQgcm9vdCBpbiB3aGljaCB0aGUgZWRpdG9yIGV4aXN0cy4gVGhpcyB3aWxsXG4gICAgdXN1YWxseSBiZSB0aGUgdG9wLWxldmVsIGBkb2N1bWVudGAsIGJ1dCBtaWdodCBiZSBhIFtzaGFkb3dcbiAgICBET01dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1dlYl9Db21wb25lbnRzL1NoYWRvd19ET00pXG4gICAgcm9vdCBpZiB0aGUgZWRpdG9yIGlzIGluc2lkZSBvbmUuXG4gICAgKi9cbiAgICBnZXQgcm9vdCgpIHtcbiAgICAgICAgbGV0IGNhY2hlZCA9IHRoaXMuX3Jvb3Q7XG4gICAgICAgIGlmIChjYWNoZWQgPT0gbnVsbClcbiAgICAgICAgICAgIGZvciAobGV0IHNlYXJjaCA9IHRoaXMuZG9tLnBhcmVudE5vZGU7IHNlYXJjaDsgc2VhcmNoID0gc2VhcmNoLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VhcmNoLm5vZGVUeXBlID09IDkgfHwgKHNlYXJjaC5ub2RlVHlwZSA9PSAxMSAmJiBzZWFyY2guaG9zdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2guZ2V0U2VsZWN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHNlYXJjaCkuZ2V0U2VsZWN0aW9uID0gKCkgPT4gc2VhcmNoLm93bmVyRG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb290ID0gc2VhcmNoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhY2hlZCB8fCBkb2N1bWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgR2l2ZW4gYSBwYWlyIG9mIHZpZXdwb3J0IGNvb3JkaW5hdGVzLCByZXR1cm4gdGhlIGRvY3VtZW50XG4gICAgcG9zaXRpb24gdGhhdCBjb3JyZXNwb25kcyB0byB0aGVtLiBNYXkgcmV0dXJuIG51bGwgaWYgdGhlIGdpdmVuXG4gICAgY29vcmRpbmF0ZXMgYXJlbid0IGluc2lkZSBvZiB0aGUgZWRpdG9yLiBXaGVuIGFuIG9iamVjdCBpc1xuICAgIHJldHVybmVkLCBpdHMgYHBvc2AgcHJvcGVydHkgaXMgdGhlIHBvc2l0aW9uIG5lYXJlc3QgdG8gdGhlXG4gICAgY29vcmRpbmF0ZXMsIGFuZCBpdHMgYGluc2lkZWAgcHJvcGVydHkgaG9sZHMgdGhlIHBvc2l0aW9uIG9mIHRoZVxuICAgIGlubmVyIG5vZGUgdGhhdCB0aGUgcG9zaXRpb24gZmFsbHMgaW5zaWRlIG9mLCBvciAtMSBpZiBpdCBpcyBhdFxuICAgIHRoZSB0b3AgbGV2ZWwsIG5vdCBpbiBhbnkgbm9kZS5cbiAgICAqL1xuICAgIHBvc0F0Q29vcmRzKGNvb3Jkcykge1xuICAgICAgICByZXR1cm4gcG9zQXRDb29yZHModGhpcywgY29vcmRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgUmV0dXJucyB0aGUgdmlld3BvcnQgcmVjdGFuZ2xlIGF0IGEgZ2l2ZW4gZG9jdW1lbnQgcG9zaXRpb24uXG4gICAgYGxlZnRgIGFuZCBgcmlnaHRgIHdpbGwgYmUgdGhlIHNhbWUgbnVtYmVyLCBhcyB0aGlzIHJldHVybnMgYVxuICAgIGZsYXQgY3Vyc29yLWlzaCByZWN0YW5nbGUuIElmIHRoZSBwb3NpdGlvbiBpcyBiZXR3ZWVuIHR3byB0aGluZ3NcbiAgICB0aGF0IGFyZW4ndCBkaXJlY3RseSBhZGphY2VudCwgYHNpZGVgIGRldGVybWluZXMgd2hpY2ggZWxlbWVudFxuICAgIGlzIHVzZWQuIFdoZW4gPCAwLCB0aGUgZWxlbWVudCBiZWZvcmUgdGhlIHBvc2l0aW9uIGlzIHVzZWQsXG4gICAgb3RoZXJ3aXNlIHRoZSBlbGVtZW50IGFmdGVyLlxuICAgICovXG4gICAgY29vcmRzQXRQb3MocG9zLCBzaWRlID0gMSkge1xuICAgICAgICByZXR1cm4gY29vcmRzQXRQb3ModGhpcywgcG9zLCBzaWRlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgRmluZCB0aGUgRE9NIHBvc2l0aW9uIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGdpdmVuIGRvY3VtZW50XG4gICAgcG9zaXRpb24uIFdoZW4gYHNpZGVgIGlzIG5lZ2F0aXZlLCBmaW5kIHRoZSBwb3NpdGlvbiBhcyBjbG9zZSBhc1xuICAgIHBvc3NpYmxlIHRvIHRoZSBjb250ZW50IGJlZm9yZSB0aGUgcG9zaXRpb24uIFdoZW4gcG9zaXRpdmUsXG4gICAgcHJlZmVyIHBvc2l0aW9ucyBjbG9zZSB0byB0aGUgY29udGVudCBhZnRlciB0aGUgcG9zaXRpb24uIFdoZW5cbiAgICB6ZXJvLCBwcmVmZXIgYXMgc2hhbGxvdyBhIHBvc2l0aW9uIGFzIHBvc3NpYmxlLlxuICAgIFxuICAgIE5vdGUgdGhhdCB5b3Ugc2hvdWxkICoqbm90KiogbXV0YXRlIHRoZSBlZGl0b3IncyBpbnRlcm5hbCBET00sXG4gICAgb25seSBpbnNwZWN0IGl0IChhbmQgZXZlbiB0aGF0IGlzIHVzdWFsbHkgbm90IG5lY2Vzc2FyeSkuXG4gICAgKi9cbiAgICBkb21BdFBvcyhwb3MsIHNpZGUgPSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY1ZpZXcuZG9tRnJvbVBvcyhwb3MsIHNpZGUpO1xuICAgIH1cbiAgICAvKipcbiAgICBGaW5kIHRoZSBET00gbm9kZSB0aGF0IHJlcHJlc2VudHMgdGhlIGRvY3VtZW50IG5vZGUgYWZ0ZXIgdGhlXG4gICAgZ2l2ZW4gcG9zaXRpb24uIE1heSByZXR1cm4gYG51bGxgIHdoZW4gdGhlIHBvc2l0aW9uIGRvZXNuJ3QgcG9pbnRcbiAgICBpbiBmcm9udCBvZiBhIG5vZGUgb3IgaWYgdGhlIG5vZGUgaXMgaW5zaWRlIGFuIG9wYXF1ZSBub2RlIHZpZXcuXG4gICAgXG4gICAgVGhpcyBpcyBpbnRlbmRlZCB0byBiZSBhYmxlIHRvIGNhbGwgdGhpbmdzIGxpa2VcbiAgICBgZ2V0Qm91bmRpbmdDbGllbnRSZWN0YCBvbiB0aGF0IERPTSBub2RlLiBEbyAqKm5vdCoqIG11dGF0ZSB0aGVcbiAgICBlZGl0b3IgRE9NIGRpcmVjdGx5LCBvciBhZGQgc3R5bGluZyB0aGlzIHdheSwgc2luY2UgdGhhdCB3aWxsIGJlXG4gICAgaW1tZWRpYXRlbHkgb3ZlcnJpZGVuIGJ5IHRoZSBlZGl0b3IgYXMgaXQgcmVkcmF3cyB0aGUgbm9kZS5cbiAgICAqL1xuICAgIG5vZGVET00ocG9zKSB7XG4gICAgICAgIGxldCBkZXNjID0gdGhpcy5kb2NWaWV3LmRlc2NBdChwb3MpO1xuICAgICAgICByZXR1cm4gZGVzYyA/IGRlc2Mubm9kZURPTSA6IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgIEZpbmQgdGhlIGRvY3VtZW50IHBvc2l0aW9uIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBnaXZlbiBET01cbiAgICBwb3NpdGlvbi4gKFdoZW5ldmVyIHBvc3NpYmxlLCBpdCBpcyBwcmVmZXJhYmxlIHRvIGluc3BlY3QgdGhlXG4gICAgZG9jdW1lbnQgc3RydWN0dXJlIGRpcmVjdGx5LCByYXRoZXIgdGhhbiBwb2tpbmcgYXJvdW5kIGluIHRoZVxuICAgIERPTSwgYnV0IHNvbWV0aW1lc+KAlGZvciBleGFtcGxlIHdoZW4gaW50ZXJwcmV0aW5nIGFuIGV2ZW50XG4gICAgdGFyZ2V04oCUeW91IGRvbid0IGhhdmUgYSBjaG9pY2UuKVxuICAgIFxuICAgIFRoZSBgYmlhc2AgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIGluZmx1ZW5jZSB3aGljaCBzaWRlIG9mIGEgRE9NXG4gICAgbm9kZSB0byB1c2Ugd2hlbiB0aGUgcG9zaXRpb24gaXMgaW5zaWRlIGEgbGVhZiBub2RlLlxuICAgICovXG4gICAgcG9zQXRET00obm9kZSwgb2Zmc2V0LCBiaWFzID0gLTEpIHtcbiAgICAgICAgbGV0IHBvcyA9IHRoaXMuZG9jVmlldy5wb3NGcm9tRE9NKG5vZGUsIG9mZnNldCwgYmlhcyk7XG4gICAgICAgIGlmIChwb3MgPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiRE9NIHBvc2l0aW9uIG5vdCBpbnNpZGUgdGhlIGVkaXRvclwiKTtcbiAgICAgICAgcmV0dXJuIHBvcztcbiAgICB9XG4gICAgLyoqXG4gICAgRmluZCBvdXQgd2hldGhlciB0aGUgc2VsZWN0aW9uIGlzIGF0IHRoZSBlbmQgb2YgYSB0ZXh0YmxvY2sgd2hlblxuICAgIG1vdmluZyBpbiBhIGdpdmVuIGRpcmVjdGlvbi4gV2hlbiwgZm9yIGV4YW1wbGUsIGdpdmVuIGBcImxlZnRcImAsXG4gICAgaXQgd2lsbCByZXR1cm4gdHJ1ZSBpZiBtb3ZpbmcgbGVmdCBmcm9tIHRoZSBjdXJyZW50IGN1cnNvclxuICAgIHBvc2l0aW9uIHdvdWxkIGxlYXZlIHRoYXQgcG9zaXRpb24ncyBwYXJlbnQgdGV4dGJsb2NrLiBXaWxsIGFwcGx5XG4gICAgdG8gdGhlIHZpZXcncyBjdXJyZW50IHN0YXRlIGJ5IGRlZmF1bHQsIGJ1dCBpdCBpcyBwb3NzaWJsZSB0b1xuICAgIHBhc3MgYSBkaWZmZXJlbnQgc3RhdGUuXG4gICAgKi9cbiAgICBlbmRPZlRleHRibG9jayhkaXIsIHN0YXRlKSB7XG4gICAgICAgIHJldHVybiBlbmRPZlRleHRibG9jayh0aGlzLCBzdGF0ZSB8fCB0aGlzLnN0YXRlLCBkaXIpO1xuICAgIH1cbiAgICAvKipcbiAgICBSdW4gdGhlIGVkaXRvcidzIHBhc3RlIGxvZ2ljIHdpdGggdGhlIGdpdmVuIEhUTUwgc3RyaW5nLiBUaGVcbiAgICBgZXZlbnRgLCBpZiBnaXZlbiwgd2lsbCBiZSBwYXNzZWQgdG8gdGhlXG4gICAgW2BoYW5kbGVQYXN0ZWBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyN2aWV3LkVkaXRvclByb3BzLmhhbmRsZVBhc3RlKSBob29rLlxuICAgICovXG4gICAgcGFzdGVIVE1MKGh0bWwsIGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBkb1Bhc3RlKHRoaXMsIFwiXCIsIGh0bWwsIGZhbHNlLCBldmVudCB8fCBuZXcgQ2xpcGJvYXJkRXZlbnQoXCJwYXN0ZVwiKSk7XG4gICAgfVxuICAgIC8qKlxuICAgIFJ1biB0aGUgZWRpdG9yJ3MgcGFzdGUgbG9naWMgd2l0aCB0aGUgZ2l2ZW4gcGxhaW4tdGV4dCBpbnB1dC5cbiAgICAqL1xuICAgIHBhc3RlVGV4dCh0ZXh0LCBldmVudCkge1xuICAgICAgICByZXR1cm4gZG9QYXN0ZSh0aGlzLCB0ZXh0LCBudWxsLCB0cnVlLCBldmVudCB8fCBuZXcgQ2xpcGJvYXJkRXZlbnQoXCJwYXN0ZVwiKSk7XG4gICAgfVxuICAgIC8qKlxuICAgIFJlbW92ZXMgdGhlIGVkaXRvciBmcm9tIHRoZSBET00gYW5kIGRlc3Ryb3lzIGFsbCBbbm9kZVxuICAgIHZpZXdzXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jdmlldy5Ob2RlVmlldykuXG4gICAgKi9cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMuZG9jVmlldylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVzdHJveUlucHV0KHRoaXMpO1xuICAgICAgICB0aGlzLmRlc3Ryb3lQbHVnaW5WaWV3cygpO1xuICAgICAgICBpZiAodGhpcy5tb3VudGVkKSB7XG4gICAgICAgICAgICB0aGlzLmRvY1ZpZXcudXBkYXRlKHRoaXMuc3RhdGUuZG9jLCBbXSwgdmlld0RlY29yYXRpb25zKHRoaXMpLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZG9tLnRleHRDb250ZW50ID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmRvbS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmRvbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZG9tKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY1ZpZXcuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmRvY1ZpZXcgPSBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICBUaGlzIGlzIHRydWUgd2hlbiB0aGUgdmlldyBoYXMgYmVlblxuICAgIFtkZXN0cm95ZWRdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyN2aWV3LkVkaXRvclZpZXcuZGVzdHJveSkgKGFuZCB0aHVzIHNob3VsZCBub3QgYmVcbiAgICB1c2VkIGFueW1vcmUpLlxuICAgICovXG4gICAgZ2V0IGlzRGVzdHJveWVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2NWaWV3ID09IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgIFVzZWQgZm9yIHRlc3RpbmcuXG4gICAgKi9cbiAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgRGlzcGF0Y2ggYSB0cmFuc2FjdGlvbi4gV2lsbCBjYWxsXG4gICAgW2BkaXNwYXRjaFRyYW5zYWN0aW9uYF0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI3ZpZXcuRGlyZWN0RWRpdG9yUHJvcHMuZGlzcGF0Y2hUcmFuc2FjdGlvbilcbiAgICB3aGVuIGdpdmVuLCBhbmQgb3RoZXJ3aXNlIGRlZmF1bHRzIHRvIGFwcGx5aW5nIHRoZSB0cmFuc2FjdGlvbiB0b1xuICAgIHRoZSBjdXJyZW50IHN0YXRlIGFuZCBjYWxsaW5nXG4gICAgW2B1cGRhdGVTdGF0ZWBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyN2aWV3LkVkaXRvclZpZXcudXBkYXRlU3RhdGUpIHdpdGggdGhlIHJlc3VsdC5cbiAgICBUaGlzIG1ldGhvZCBpcyBib3VuZCB0byB0aGUgdmlldyBpbnN0YW5jZSwgc28gdGhhdCBpdCBjYW4gYmVcbiAgICBlYXNpbHkgcGFzc2VkIGFyb3VuZC5cbiAgICAqL1xuICAgIGRpc3BhdGNoKHRyKSB7XG4gICAgICAgIGxldCBkaXNwYXRjaFRyYW5zYWN0aW9uID0gdGhpcy5fcHJvcHMuZGlzcGF0Y2hUcmFuc2FjdGlvbjtcbiAgICAgICAgaWYgKGRpc3BhdGNoVHJhbnNhY3Rpb24pXG4gICAgICAgICAgICBkaXNwYXRjaFRyYW5zYWN0aW9uLmNhbGwodGhpcywgdHIpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHRoaXMuc3RhdGUuYXBwbHkodHIpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBkb21TZWxlY3Rpb25SYW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIHNhZmFyaSAmJiB0aGlzLnJvb3Qubm9kZVR5cGUgPT09IDExICYmIGRlZXBBY3RpdmVFbGVtZW50KHRoaXMuZG9tLm93bmVyRG9jdW1lbnQpID09IHRoaXMuZG9tXG4gICAgICAgICAgICA/IHNhZmFyaVNoYWRvd1NlbGVjdGlvblJhbmdlKHRoaXMpIDogdGhpcy5kb21TZWxlY3Rpb24oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBkb21TZWxlY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3QuZ2V0U2VsZWN0aW9uKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gY29tcHV0ZURvY0RlY28odmlldykge1xuICAgIGxldCBhdHRycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgYXR0cnMuY2xhc3MgPSBcIlByb3NlTWlycm9yXCI7XG4gICAgYXR0cnMuY29udGVudGVkaXRhYmxlID0gU3RyaW5nKHZpZXcuZWRpdGFibGUpO1xuICAgIGF0dHJzLnRyYW5zbGF0ZSA9IFwibm9cIjtcbiAgICB2aWV3LnNvbWVQcm9wKFwiYXR0cmlidXRlc1wiLCB2YWx1ZSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSh2aWV3LnN0YXRlKTtcbiAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAgZm9yIChsZXQgYXR0ciBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChhdHRyID09IFwiY2xhc3NcIilcbiAgICAgICAgICAgICAgICAgICAgYXR0cnMuY2xhc3MgKz0gXCIgXCIgKyB2YWx1ZVthdHRyXTtcbiAgICAgICAgICAgICAgICBpZiAoYXR0ciA9PSBcInN0eWxlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnMuc3R5bGUgPSAoYXR0cnMuc3R5bGUgPyBhdHRycy5zdHlsZSArIFwiO1wiIDogXCJcIikgKyB2YWx1ZVthdHRyXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWF0dHJzW2F0dHJdICYmIGF0dHIgIT0gXCJjb250ZW50ZWRpdGFibGVcIiAmJiBhdHRyICE9IFwibm9kZU5hbWVcIilcbiAgICAgICAgICAgICAgICAgICAgYXR0cnNbYXR0cl0gPSBTdHJpbmcodmFsdWVbYXR0cl0pO1xuICAgICAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBbRGVjb3JhdGlvbi5ub2RlKDAsIHZpZXcuc3RhdGUuZG9jLmNvbnRlbnQuc2l6ZSwgYXR0cnMpXTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUN1cnNvcldyYXBwZXIodmlldykge1xuICAgIGlmICh2aWV3Lm1hcmtDdXJzb3IpIHtcbiAgICAgICAgbGV0IGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG4gICAgICAgIGRvbS5jbGFzc05hbWUgPSBcIlByb3NlTWlycm9yLXNlcGFyYXRvclwiO1xuICAgICAgICBkb20uc2V0QXR0cmlidXRlKFwibWFyay1wbGFjZWhvbGRlclwiLCBcInRydWVcIik7XG4gICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoXCJhbHRcIiwgXCJcIik7XG4gICAgICAgIHZpZXcuY3Vyc29yV3JhcHBlciA9IHsgZG9tLCBkZWNvOiBEZWNvcmF0aW9uLndpZGdldCh2aWV3LnN0YXRlLnNlbGVjdGlvbi5oZWFkLCBkb20sIHsgcmF3OiB0cnVlLCBtYXJrczogdmlldy5tYXJrQ3Vyc29yIH0pIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2aWV3LmN1cnNvcldyYXBwZXIgPSBudWxsO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldEVkaXRhYmxlKHZpZXcpIHtcbiAgICByZXR1cm4gIXZpZXcuc29tZVByb3AoXCJlZGl0YWJsZVwiLCB2YWx1ZSA9PiB2YWx1ZSh2aWV3LnN0YXRlKSA9PT0gZmFsc2UpO1xufVxuZnVuY3Rpb24gc2VsZWN0aW9uQ29udGV4dENoYW5nZWQoc2VsMSwgc2VsMikge1xuICAgIGxldCBkZXB0aCA9IE1hdGgubWluKHNlbDEuJGFuY2hvci5zaGFyZWREZXB0aChzZWwxLmhlYWQpLCBzZWwyLiRhbmNob3Iuc2hhcmVkRGVwdGgoc2VsMi5oZWFkKSk7XG4gICAgcmV0dXJuIHNlbDEuJGFuY2hvci5zdGFydChkZXB0aCkgIT0gc2VsMi4kYW5jaG9yLnN0YXJ0KGRlcHRoKTtcbn1cbmZ1bmN0aW9uIGJ1aWxkTm9kZVZpZXdzKHZpZXcpIHtcbiAgICBsZXQgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmdW5jdGlvbiBhZGQob2JqKSB7XG4gICAgICAgIGZvciAobGV0IHByb3AgaW4gb2JqKVxuICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBwcm9wKSlcbiAgICAgICAgICAgICAgICByZXN1bHRbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgfVxuICAgIHZpZXcuc29tZVByb3AoXCJub2RlVmlld3NcIiwgYWRkKTtcbiAgICB2aWV3LnNvbWVQcm9wKFwibWFya1ZpZXdzXCIsIGFkZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGNoYW5nZWROb2RlVmlld3MoYSwgYikge1xuICAgIGxldCBuQSA9IDAsIG5CID0gMDtcbiAgICBmb3IgKGxldCBwcm9wIGluIGEpIHtcbiAgICAgICAgaWYgKGFbcHJvcF0gIT0gYltwcm9wXSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBuQSsrO1xuICAgIH1cbiAgICBmb3IgKGxldCBfIGluIGIpXG4gICAgICAgIG5CKys7XG4gICAgcmV0dXJuIG5BICE9IG5CO1xufVxuZnVuY3Rpb24gY2hlY2tTdGF0ZUNvbXBvbmVudChwbHVnaW4pIHtcbiAgICBpZiAocGx1Z2luLnNwZWMuc3RhdGUgfHwgcGx1Z2luLnNwZWMuZmlsdGVyVHJhbnNhY3Rpb24gfHwgcGx1Z2luLnNwZWMuYXBwZW5kVHJhbnNhY3Rpb24pXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiUGx1Z2lucyBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIHZpZXcgbXVzdCBub3QgaGF2ZSBhIHN0YXRlIGNvbXBvbmVudFwiKTtcbn1cblxuZXhwb3J0IHsgRGVjb3JhdGlvbiwgRGVjb3JhdGlvblNldCwgRWRpdG9yVmlldywgX19lbmRDb21wb3NpdGlvbiwgX19wYXJzZUZyb21DbGlwYm9hcmQsIF9fc2VyaWFsaXplRm9yQ2xpcGJvYXJkIH07XG4iLCJleHBvcnQgdmFyIGJhc2UgPSB7XG4gIDg6IFwiQmFja3NwYWNlXCIsXG4gIDk6IFwiVGFiXCIsXG4gIDEwOiBcIkVudGVyXCIsXG4gIDEyOiBcIk51bUxvY2tcIixcbiAgMTM6IFwiRW50ZXJcIixcbiAgMTY6IFwiU2hpZnRcIixcbiAgMTc6IFwiQ29udHJvbFwiLFxuICAxODogXCJBbHRcIixcbiAgMjA6IFwiQ2Fwc0xvY2tcIixcbiAgMjc6IFwiRXNjYXBlXCIsXG4gIDMyOiBcIiBcIixcbiAgMzM6IFwiUGFnZVVwXCIsXG4gIDM0OiBcIlBhZ2VEb3duXCIsXG4gIDM1OiBcIkVuZFwiLFxuICAzNjogXCJIb21lXCIsXG4gIDM3OiBcIkFycm93TGVmdFwiLFxuICAzODogXCJBcnJvd1VwXCIsXG4gIDM5OiBcIkFycm93UmlnaHRcIixcbiAgNDA6IFwiQXJyb3dEb3duXCIsXG4gIDQ0OiBcIlByaW50U2NyZWVuXCIsXG4gIDQ1OiBcIkluc2VydFwiLFxuICA0NjogXCJEZWxldGVcIixcbiAgNTk6IFwiO1wiLFxuICA2MTogXCI9XCIsXG4gIDkxOiBcIk1ldGFcIixcbiAgOTI6IFwiTWV0YVwiLFxuICAxMDY6IFwiKlwiLFxuICAxMDc6IFwiK1wiLFxuICAxMDg6IFwiLFwiLFxuICAxMDk6IFwiLVwiLFxuICAxMTA6IFwiLlwiLFxuICAxMTE6IFwiL1wiLFxuICAxNDQ6IFwiTnVtTG9ja1wiLFxuICAxNDU6IFwiU2Nyb2xsTG9ja1wiLFxuICAxNjA6IFwiU2hpZnRcIixcbiAgMTYxOiBcIlNoaWZ0XCIsXG4gIDE2MjogXCJDb250cm9sXCIsXG4gIDE2MzogXCJDb250cm9sXCIsXG4gIDE2NDogXCJBbHRcIixcbiAgMTY1OiBcIkFsdFwiLFxuICAxNzM6IFwiLVwiLFxuICAxODY6IFwiO1wiLFxuICAxODc6IFwiPVwiLFxuICAxODg6IFwiLFwiLFxuICAxODk6IFwiLVwiLFxuICAxOTA6IFwiLlwiLFxuICAxOTE6IFwiL1wiLFxuICAxOTI6IFwiYFwiLFxuICAyMTk6IFwiW1wiLFxuICAyMjA6IFwiXFxcXFwiLFxuICAyMjE6IFwiXVwiLFxuICAyMjI6IFwiJ1wiXG59XG5cbmV4cG9ydCB2YXIgc2hpZnQgPSB7XG4gIDQ4OiBcIilcIixcbiAgNDk6IFwiIVwiLFxuICA1MDogXCJAXCIsXG4gIDUxOiBcIiNcIixcbiAgNTI6IFwiJFwiLFxuICA1MzogXCIlXCIsXG4gIDU0OiBcIl5cIixcbiAgNTU6IFwiJlwiLFxuICA1NjogXCIqXCIsXG4gIDU3OiBcIihcIixcbiAgNTk6IFwiOlwiLFxuICA2MTogXCIrXCIsXG4gIDE3MzogXCJfXCIsXG4gIDE4NjogXCI6XCIsXG4gIDE4NzogXCIrXCIsXG4gIDE4ODogXCI8XCIsXG4gIDE4OTogXCJfXCIsXG4gIDE5MDogXCI+XCIsXG4gIDE5MTogXCI/XCIsXG4gIDE5MjogXCJ+XCIsXG4gIDIxOTogXCJ7XCIsXG4gIDIyMDogXCJ8XCIsXG4gIDIyMTogXCJ9XCIsXG4gIDIyMjogXCJcXFwiXCJcbn1cblxudmFyIGNocm9tZSA9IHR5cGVvZiBuYXZpZ2F0b3IgIT0gXCJ1bmRlZmluZWRcIiAmJiAvQ2hyb21lXFwvKFxcZCspLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpXG52YXIgZ2Vja28gPSB0eXBlb2YgbmF2aWdhdG9yICE9IFwidW5kZWZpbmVkXCIgJiYgL0dlY2tvXFwvXFxkKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KVxudmFyIG1hYyA9IHR5cGVvZiBuYXZpZ2F0b3IgIT0gXCJ1bmRlZmluZWRcIiAmJiAvTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSlcbnZhciBpZSA9IHR5cGVvZiBuYXZpZ2F0b3IgIT0gXCJ1bmRlZmluZWRcIiAmJiAvTVNJRSBcXGR8VHJpZGVudFxcLyg/Ols3LTldfFxcZHsyLH0pXFwuLipydjooXFxkKykvLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudClcbnZhciBicm9rZW5Nb2RpZmllck5hbWVzID0gbWFjIHx8IGNocm9tZSAmJiArY2hyb21lWzFdIDwgNTdcblxuLy8gRmlsbCBpbiB0aGUgZGlnaXQga2V5c1xuZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSBiYXNlWzQ4ICsgaV0gPSBiYXNlWzk2ICsgaV0gPSBTdHJpbmcoaSlcblxuLy8gVGhlIGZ1bmN0aW9uIGtleXNcbmZvciAodmFyIGkgPSAxOyBpIDw9IDI0OyBpKyspIGJhc2VbaSArIDExMV0gPSBcIkZcIiArIGlcblxuLy8gQW5kIHRoZSBhbHBoYWJldGljIGtleXNcbmZvciAodmFyIGkgPSA2NTsgaSA8PSA5MDsgaSsrKSB7XG4gIGJhc2VbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkgKyAzMilcbiAgc2hpZnRbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXG59XG5cbi8vIEZvciBlYWNoIGNvZGUgdGhhdCBkb2Vzbid0IGhhdmUgYSBzaGlmdC1lcXVpdmFsZW50LCBjb3B5IHRoZSBiYXNlIG5hbWVcbmZvciAodmFyIGNvZGUgaW4gYmFzZSkgaWYgKCFzaGlmdC5oYXNPd25Qcm9wZXJ0eShjb2RlKSkgc2hpZnRbY29kZV0gPSBiYXNlW2NvZGVdXG5cbmV4cG9ydCBmdW5jdGlvbiBrZXlOYW1lKGV2ZW50KSB7XG4gIHZhciBpZ25vcmVLZXkgPSBicm9rZW5Nb2RpZmllck5hbWVzICYmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5tZXRhS2V5KSB8fFxuICAgIGllICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSAmJiBldmVudC5rZXkubGVuZ3RoID09IDEgfHxcbiAgICBldmVudC5rZXkgPT0gXCJVbmlkZW50aWZpZWRcIlxuICB2YXIgbmFtZSA9ICghaWdub3JlS2V5ICYmIGV2ZW50LmtleSkgfHxcbiAgICAoZXZlbnQuc2hpZnRLZXkgPyBzaGlmdCA6IGJhc2UpW2V2ZW50LmtleUNvZGVdIHx8XG4gICAgZXZlbnQua2V5IHx8IFwiVW5pZGVudGlmaWVkXCJcbiAgLy8gRWRnZSBzb21ldGltZXMgcHJvZHVjZXMgd3JvbmcgbmFtZXMgKElzc3VlICMzKVxuICBpZiAobmFtZSA9PSBcIkVzY1wiKSBuYW1lID0gXCJFc2NhcGVcIlxuICBpZiAobmFtZSA9PSBcIkRlbFwiKSBuYW1lID0gXCJEZWxldGVcIlxuICAvLyBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL2VuLXVzL21pY3Jvc29mdC1lZGdlL3BsYXRmb3JtL2lzc3Vlcy84ODYwNTcxL1xuICBpZiAobmFtZSA9PSBcIkxlZnRcIikgbmFtZSA9IFwiQXJyb3dMZWZ0XCJcbiAgaWYgKG5hbWUgPT0gXCJVcFwiKSBuYW1lID0gXCJBcnJvd1VwXCJcbiAgaWYgKG5hbWUgPT0gXCJSaWdodFwiKSBuYW1lID0gXCJBcnJvd1JpZ2h0XCJcbiAgaWYgKG5hbWUgPT0gXCJEb3duXCIpIG5hbWUgPSBcIkFycm93RG93blwiXG4gIHJldHVybiBuYW1lXG59XG4iLCJpbXBvcnQgeyBrZXlOYW1lLCBiYXNlIH0gZnJvbSAndzNjLWtleW5hbWUnO1xuaW1wb3J0IHsgUGx1Z2luIH0gZnJvbSAncHJvc2VtaXJyb3Itc3RhdGUnO1xuXG5jb25zdCBtYWMgPSB0eXBlb2YgbmF2aWdhdG9yICE9IFwidW5kZWZpbmVkXCIgPyAvTWFjfGlQKGhvbmV8W29hXWQpLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSkgOiBmYWxzZTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZUtleU5hbWUobmFtZSkge1xuICAgIGxldCBwYXJ0cyA9IG5hbWUuc3BsaXQoLy0oPyEkKS8pLCByZXN1bHQgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbiAgICBpZiAocmVzdWx0ID09IFwiU3BhY2VcIilcbiAgICAgICAgcmVzdWx0ID0gXCIgXCI7XG4gICAgbGV0IGFsdCwgY3RybCwgc2hpZnQsIG1ldGE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgbGV0IG1vZCA9IHBhcnRzW2ldO1xuICAgICAgICBpZiAoL14oY21kfG1ldGF8bSkkL2kudGVzdChtb2QpKVxuICAgICAgICAgICAgbWV0YSA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYgKC9eYShsdCk/JC9pLnRlc3QobW9kKSlcbiAgICAgICAgICAgIGFsdCA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYgKC9eKGN8Y3RybHxjb250cm9sKSQvaS50ZXN0KG1vZCkpXG4gICAgICAgICAgICBjdHJsID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBpZiAoL15zKGhpZnQpPyQvaS50ZXN0KG1vZCkpXG4gICAgICAgICAgICBzaGlmdCA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYgKC9ebW9kJC9pLnRlc3QobW9kKSkge1xuICAgICAgICAgICAgaWYgKG1hYylcbiAgICAgICAgICAgICAgICBtZXRhID0gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjdHJsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgbW9kaWZpZXIgbmFtZTogXCIgKyBtb2QpO1xuICAgIH1cbiAgICBpZiAoYWx0KVxuICAgICAgICByZXN1bHQgPSBcIkFsdC1cIiArIHJlc3VsdDtcbiAgICBpZiAoY3RybClcbiAgICAgICAgcmVzdWx0ID0gXCJDdHJsLVwiICsgcmVzdWx0O1xuICAgIGlmIChtZXRhKVxuICAgICAgICByZXN1bHQgPSBcIk1ldGEtXCIgKyByZXN1bHQ7XG4gICAgaWYgKHNoaWZ0KVxuICAgICAgICByZXN1bHQgPSBcIlNoaWZ0LVwiICsgcmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBub3JtYWxpemUobWFwKSB7XG4gICAgbGV0IGNvcHkgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGZvciAobGV0IHByb3AgaW4gbWFwKVxuICAgICAgICBjb3B5W25vcm1hbGl6ZUtleU5hbWUocHJvcCldID0gbWFwW3Byb3BdO1xuICAgIHJldHVybiBjb3B5O1xufVxuZnVuY3Rpb24gbW9kaWZpZXJzKG5hbWUsIGV2ZW50LCBzaGlmdCA9IHRydWUpIHtcbiAgICBpZiAoZXZlbnQuYWx0S2V5KVxuICAgICAgICBuYW1lID0gXCJBbHQtXCIgKyBuYW1lO1xuICAgIGlmIChldmVudC5jdHJsS2V5KVxuICAgICAgICBuYW1lID0gXCJDdHJsLVwiICsgbmFtZTtcbiAgICBpZiAoZXZlbnQubWV0YUtleSlcbiAgICAgICAgbmFtZSA9IFwiTWV0YS1cIiArIG5hbWU7XG4gICAgaWYgKHNoaWZ0ICYmIGV2ZW50LnNoaWZ0S2V5KVxuICAgICAgICBuYW1lID0gXCJTaGlmdC1cIiArIG5hbWU7XG4gICAgcmV0dXJuIG5hbWU7XG59XG4vKipcbkNyZWF0ZSBhIGtleW1hcCBwbHVnaW4gZm9yIHRoZSBnaXZlbiBzZXQgb2YgYmluZGluZ3MuXG5cbkJpbmRpbmdzIHNob3VsZCBtYXAga2V5IG5hbWVzIHRvIFtjb21tYW5kXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jY29tbWFuZHMpLXN0eWxlXG5mdW5jdGlvbnMsIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdpdGggYChFZGl0b3JTdGF0ZSwgZGlzcGF0Y2gsXG5FZGl0b3JWaWV3KWAgYXJndW1lbnRzLCBhbmQgc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhleSd2ZSBoYW5kbGVkXG50aGUga2V5LiBOb3RlIHRoYXQgdGhlIHZpZXcgYXJndW1lbnQgaXNuJ3QgcGFydCBvZiB0aGUgY29tbWFuZFxucHJvdG9jb2wsIGJ1dCBjYW4gYmUgdXNlZCBhcyBhbiBlc2NhcGUgaGF0Y2ggaWYgYSBiaW5kaW5nIG5lZWRzIHRvXG5kaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoZSBVSS5cblxuS2V5IG5hbWVzIG1heSBiZSBzdHJpbmdzIGxpa2UgYFwiU2hpZnQtQ3RybC1FbnRlclwiYOKAlGEga2V5XG5pZGVudGlmaWVyIHByZWZpeGVkIHdpdGggemVybyBvciBtb3JlIG1vZGlmaWVycy4gS2V5IGlkZW50aWZpZXJzXG5hcmUgYmFzZWQgb24gdGhlIHN0cmluZ3MgdGhhdCBjYW4gYXBwZWFyIGluXG5bYEtleUV2ZW50LmtleWBdKGh0dHBzOmRldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9rZXkpLlxuVXNlIGxvd2VyY2FzZSBsZXR0ZXJzIHRvIHJlZmVyIHRvIGxldHRlciBrZXlzIChvciB1cHBlcmNhc2UgbGV0dGVyc1xuaWYgeW91IHdhbnQgc2hpZnQgdG8gYmUgaGVsZCkuIFlvdSBtYXkgdXNlIGBcIlNwYWNlXCJgIGFzIGFuIGFsaWFzXG5mb3IgdGhlIGBcIiBcImAgbmFtZS5cblxuTW9kaWZpZXJzIGNhbiBiZSBnaXZlbiBpbiBhbnkgb3JkZXIuIGBTaGlmdC1gIChvciBgcy1gKSwgYEFsdC1gIChvclxuYGEtYCksIGBDdHJsLWAgKG9yIGBjLWAgb3IgYENvbnRyb2wtYCkgYW5kIGBDbWQtYCAob3IgYG0tYCBvclxuYE1ldGEtYCkgYXJlIHJlY29nbml6ZWQuIEZvciBjaGFyYWN0ZXJzIHRoYXQgYXJlIGNyZWF0ZWQgYnkgaG9sZGluZ1xuc2hpZnQsIHRoZSBgU2hpZnQtYCBwcmVmaXggaXMgaW1wbGllZCwgYW5kIHNob3VsZCBub3QgYmUgYWRkZWRcbmV4cGxpY2l0bHkuXG5cbllvdSBjYW4gdXNlIGBNb2QtYCBhcyBhIHNob3J0aGFuZCBmb3IgYENtZC1gIG9uIE1hYyBhbmQgYEN0cmwtYCBvblxub3RoZXIgcGxhdGZvcm1zLlxuXG5Zb3UgY2FuIGFkZCBtdWx0aXBsZSBrZXltYXAgcGx1Z2lucyB0byBhbiBlZGl0b3IuIFRoZSBvcmRlciBpblxud2hpY2ggdGhleSBhcHBlYXIgZGV0ZXJtaW5lcyB0aGVpciBwcmVjZWRlbmNlICh0aGUgb25lcyBlYXJseSBpblxudGhlIGFycmF5IGdldCB0byBkaXNwYXRjaCBmaXJzdCkuXG4qL1xuZnVuY3Rpb24ga2V5bWFwKGJpbmRpbmdzKSB7XG4gICAgcmV0dXJuIG5ldyBQbHVnaW4oeyBwcm9wczogeyBoYW5kbGVLZXlEb3duOiBrZXlkb3duSGFuZGxlcihiaW5kaW5ncykgfSB9KTtcbn1cbi8qKlxuR2l2ZW4gYSBzZXQgb2YgYmluZGluZ3MgKHVzaW5nIHRoZSBzYW1lIGZvcm1hdCBhc1xuW2BrZXltYXBgXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8ja2V5bWFwLmtleW1hcCkpLCByZXR1cm4gYSBba2V5ZG93blxuaGFuZGxlcl0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI3ZpZXcuRWRpdG9yUHJvcHMuaGFuZGxlS2V5RG93bikgdGhhdCBoYW5kbGVzIHRoZW0uXG4qL1xuZnVuY3Rpb24ga2V5ZG93bkhhbmRsZXIoYmluZGluZ3MpIHtcbiAgICBsZXQgbWFwID0gbm9ybWFsaXplKGJpbmRpbmdzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHZpZXcsIGV2ZW50KSB7XG4gICAgICAgIGxldCBuYW1lID0ga2V5TmFtZShldmVudCksIGJhc2VOYW1lLCBkaXJlY3QgPSBtYXBbbW9kaWZpZXJzKG5hbWUsIGV2ZW50KV07XG4gICAgICAgIGlmIChkaXJlY3QgJiYgZGlyZWN0KHZpZXcuc3RhdGUsIHZpZXcuZGlzcGF0Y2gsIHZpZXcpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vIEEgY2hhcmFjdGVyIGtleVxuICAgICAgICBpZiAobmFtZS5sZW5ndGggPT0gMSAmJiBuYW1lICE9IFwiIFwiKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAvLyBJbiBjYXNlIHRoZSBuYW1lIHdhcyBhbHJlYWR5IG1vZGlmaWVkIGJ5IHNoaWZ0LCB0cnkgbG9va2luZ1xuICAgICAgICAgICAgICAgIC8vIGl0IHVwIHdpdGhvdXQgaXRzIHNoaWZ0IG1vZGlmaWVyXG4gICAgICAgICAgICAgICAgbGV0IG5vU2hpZnQgPSBtYXBbbW9kaWZpZXJzKG5hbWUsIGV2ZW50LCBmYWxzZSldO1xuICAgICAgICAgICAgICAgIGlmIChub1NoaWZ0ICYmIG5vU2hpZnQodmlldy5zdGF0ZSwgdmlldy5kaXNwYXRjaCwgdmlldykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChldmVudC5zaGlmdEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBuYW1lLmNoYXJDb2RlQXQoMCkgPiAxMjcpICYmXG4gICAgICAgICAgICAgICAgKGJhc2VOYW1lID0gYmFzZVtldmVudC5rZXlDb2RlXSkgJiYgYmFzZU5hbWUgIT0gbmFtZSkge1xuICAgICAgICAgICAgICAgIC8vIFRyeSBmYWxsaW5nIGJhY2sgdG8gdGhlIGtleUNvZGUgd2hlbiB0aGVyZSdzIGEgbW9kaWZpZXJcbiAgICAgICAgICAgICAgICAvLyBhY3RpdmUgb3IgdGhlIGNoYXJhY3RlciBwcm9kdWNlZCBpc24ndCBBU0NJSSwgYW5kIG91ciB0YWJsZVxuICAgICAgICAgICAgICAgIC8vIHByb2R1Y2VzIGEgZGlmZmVyZW50IG5hbWUgZnJvbSB0aGUgdGhlIGtleUNvZGUuIFNlZSAjNjY4LFxuICAgICAgICAgICAgICAgIC8vICMxMDYwXG4gICAgICAgICAgICAgICAgbGV0IGZyb21Db2RlID0gbWFwW21vZGlmaWVycyhiYXNlTmFtZSwgZXZlbnQpXTtcbiAgICAgICAgICAgICAgICBpZiAoZnJvbUNvZGUgJiYgZnJvbUNvZGUodmlldy5zdGF0ZSwgdmlldy5kaXNwYXRjaCwgdmlldykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xufVxuXG5leHBvcnQgeyBrZXlkb3duSGFuZGxlciwga2V5bWFwIH07XG4iLCJpbXBvcnQgeyBsaWZ0VGFyZ2V0LCByZXBsYWNlU3RlcCwgUmVwbGFjZVN0ZXAsIGNhbkpvaW4sIGpvaW5Qb2ludCwgY2FuU3BsaXQsIFJlcGxhY2VBcm91bmRTdGVwLCBmaW5kV3JhcHBpbmcgfSBmcm9tICdwcm9zZW1pcnJvci10cmFuc2Zvcm0nO1xuaW1wb3J0IHsgU2xpY2UsIEZyYWdtZW50IH0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuaW1wb3J0IHsgTm9kZVNlbGVjdGlvbiwgU2VsZWN0aW9uLCBUZXh0U2VsZWN0aW9uLCBBbGxTZWxlY3Rpb24gfSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XG5cbi8qKlxuRGVsZXRlIHRoZSBzZWxlY3Rpb24sIGlmIHRoZXJlIGlzIG9uZS5cbiovXG5jb25zdCBkZWxldGVTZWxlY3Rpb24gPSAoc3RhdGUsIGRpc3BhdGNoKSA9PiB7XG4gICAgaWYgKHN0YXRlLnNlbGVjdGlvbi5lbXB0eSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChkaXNwYXRjaClcbiAgICAgICAgZGlzcGF0Y2goc3RhdGUudHIuZGVsZXRlU2VsZWN0aW9uKCkuc2Nyb2xsSW50b1ZpZXcoKSk7XG4gICAgcmV0dXJuIHRydWU7XG59O1xuZnVuY3Rpb24gYXRCbG9ja1N0YXJ0KHN0YXRlLCB2aWV3KSB7XG4gICAgbGV0IHsgJGN1cnNvciB9ID0gc3RhdGUuc2VsZWN0aW9uO1xuICAgIGlmICghJGN1cnNvciB8fCAodmlldyA/ICF2aWV3LmVuZE9mVGV4dGJsb2NrKFwiYmFja3dhcmRcIiwgc3RhdGUpXG4gICAgICAgIDogJGN1cnNvci5wYXJlbnRPZmZzZXQgPiAwKSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuICRjdXJzb3I7XG59XG4vKipcbklmIHRoZSBzZWxlY3Rpb24gaXMgZW1wdHkgYW5kIGF0IHRoZSBzdGFydCBvZiBhIHRleHRibG9jaywgdHJ5IHRvXG5yZWR1Y2UgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhhdCBibG9jayBhbmQgdGhlIG9uZSBiZWZvcmUgaXTigJRpZlxudGhlcmUncyBhIGJsb2NrIGRpcmVjdGx5IGJlZm9yZSBpdCB0aGF0IGNhbiBiZSBqb2luZWQsIGpvaW4gdGhlbS5cbklmIG5vdCwgdHJ5IHRvIG1vdmUgdGhlIHNlbGVjdGVkIGJsb2NrIGNsb3NlciB0byB0aGUgbmV4dCBvbmUgaW5cbnRoZSBkb2N1bWVudCBzdHJ1Y3R1cmUgYnkgbGlmdGluZyBpdCBvdXQgb2YgaXRzIHBhcmVudCBvciBtb3ZpbmcgaXRcbmludG8gYSBwYXJlbnQgb2YgdGhlIHByZXZpb3VzIGJsb2NrLiBXaWxsIHVzZSB0aGUgdmlldyBmb3IgYWNjdXJhdGVcbihiaWRpLWF3YXJlKSBzdGFydC1vZi10ZXh0YmxvY2sgZGV0ZWN0aW9uIGlmIGdpdmVuLlxuKi9cbmNvbnN0IGpvaW5CYWNrd2FyZCA9IChzdGF0ZSwgZGlzcGF0Y2gsIHZpZXcpID0+IHtcbiAgICBsZXQgJGN1cnNvciA9IGF0QmxvY2tTdGFydChzdGF0ZSwgdmlldyk7XG4gICAgaWYgKCEkY3Vyc29yKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgbGV0ICRjdXQgPSBmaW5kQ3V0QmVmb3JlKCRjdXJzb3IpO1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIG5vZGUgYmVmb3JlIHRoaXMsIHRyeSB0byBsaWZ0XG4gICAgaWYgKCEkY3V0KSB7XG4gICAgICAgIGxldCByYW5nZSA9ICRjdXJzb3IuYmxvY2tSYW5nZSgpLCB0YXJnZXQgPSByYW5nZSAmJiBsaWZ0VGFyZ2V0KHJhbmdlKTtcbiAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoZGlzcGF0Y2gpXG4gICAgICAgICAgICBkaXNwYXRjaChzdGF0ZS50ci5saWZ0KHJhbmdlLCB0YXJnZXQpLnNjcm9sbEludG9WaWV3KCkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgbGV0IGJlZm9yZSA9ICRjdXQubm9kZUJlZm9yZTtcbiAgICAvLyBBcHBseSB0aGUgam9pbmluZyBhbGdvcml0aG1cbiAgICBpZiAoIWJlZm9yZS50eXBlLnNwZWMuaXNvbGF0aW5nICYmIGRlbGV0ZUJhcnJpZXIoc3RhdGUsICRjdXQsIGRpc3BhdGNoKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgLy8gSWYgdGhlIG5vZGUgYmVsb3cgaGFzIG5vIGNvbnRlbnQgYW5kIHRoZSBub2RlIGFib3ZlIGlzXG4gICAgLy8gc2VsZWN0YWJsZSwgZGVsZXRlIHRoZSBub2RlIGJlbG93IGFuZCBzZWxlY3QgdGhlIG9uZSBhYm92ZS5cbiAgICBpZiAoJGN1cnNvci5wYXJlbnQuY29udGVudC5zaXplID09IDAgJiZcbiAgICAgICAgKHRleHRibG9ja0F0KGJlZm9yZSwgXCJlbmRcIikgfHwgTm9kZVNlbGVjdGlvbi5pc1NlbGVjdGFibGUoYmVmb3JlKSkpIHtcbiAgICAgICAgbGV0IGRlbFN0ZXAgPSByZXBsYWNlU3RlcChzdGF0ZS5kb2MsICRjdXJzb3IuYmVmb3JlKCksICRjdXJzb3IuYWZ0ZXIoKSwgU2xpY2UuZW1wdHkpO1xuICAgICAgICBpZiAoZGVsU3RlcCAmJiBkZWxTdGVwLnNsaWNlLnNpemUgPCBkZWxTdGVwLnRvIC0gZGVsU3RlcC5mcm9tKSB7XG4gICAgICAgICAgICBpZiAoZGlzcGF0Y2gpIHtcbiAgICAgICAgICAgICAgICBsZXQgdHIgPSBzdGF0ZS50ci5zdGVwKGRlbFN0ZXApO1xuICAgICAgICAgICAgICAgIHRyLnNldFNlbGVjdGlvbih0ZXh0YmxvY2tBdChiZWZvcmUsIFwiZW5kXCIpID8gU2VsZWN0aW9uLmZpbmRGcm9tKHRyLmRvYy5yZXNvbHZlKHRyLm1hcHBpbmcubWFwKCRjdXQucG9zLCAtMSkpLCAtMSlcbiAgICAgICAgICAgICAgICAgICAgOiBOb2RlU2VsZWN0aW9uLmNyZWF0ZSh0ci5kb2MsICRjdXQucG9zIC0gYmVmb3JlLm5vZGVTaXplKSk7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2godHIuc2Nyb2xsSW50b1ZpZXcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB0aGUgbm9kZSBiZWZvcmUgaXMgYW4gYXRvbSwgZGVsZXRlIGl0XG4gICAgaWYgKGJlZm9yZS5pc0F0b20gJiYgJGN1dC5kZXB0aCA9PSAkY3Vyc29yLmRlcHRoIC0gMSkge1xuICAgICAgICBpZiAoZGlzcGF0Y2gpXG4gICAgICAgICAgICBkaXNwYXRjaChzdGF0ZS50ci5kZWxldGUoJGN1dC5wb3MgLSBiZWZvcmUubm9kZVNpemUsICRjdXQucG9zKS5zY3JvbGxJbnRvVmlldygpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG4vKipcbkEgbW9yZSBsaW1pdGVkIGZvcm0gb2YgW2Bqb2luQmFja3dhcmRgXSgkY29tbWFuZHMuam9pbkJhY2t3YXJkKVxudGhhdCBvbmx5IHRyaWVzIHRvIGpvaW4gdGhlIGN1cnJlbnQgdGV4dGJsb2NrIHRvIHRoZSBvbmUgYmVmb3JlXG5pdCwgaWYgdGhlIGN1cnNvciBpcyBhdCB0aGUgc3RhcnQgb2YgYSB0ZXh0YmxvY2suXG4qL1xuY29uc3Qgam9pblRleHRibG9ja0JhY2t3YXJkID0gKHN0YXRlLCBkaXNwYXRjaCwgdmlldykgPT4ge1xuICAgIGxldCAkY3Vyc29yID0gYXRCbG9ja1N0YXJ0KHN0YXRlLCB2aWV3KTtcbiAgICBpZiAoISRjdXJzb3IpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsZXQgJGN1dCA9IGZpbmRDdXRCZWZvcmUoJGN1cnNvcik7XG4gICAgcmV0dXJuICRjdXQgPyBqb2luVGV4dGJsb2Nrc0Fyb3VuZChzdGF0ZSwgJGN1dCwgZGlzcGF0Y2gpIDogZmFsc2U7XG59O1xuLyoqXG5BIG1vcmUgbGltaXRlZCBmb3JtIG9mIFtgam9pbkZvcndhcmRgXSgkY29tbWFuZHMuam9pbkZvcndhcmQpXG50aGF0IG9ubHkgdHJpZXMgdG8gam9pbiB0aGUgY3VycmVudCB0ZXh0YmxvY2sgdG8gdGhlIG9uZSBhZnRlclxuaXQsIGlmIHRoZSBjdXJzb3IgaXMgYXQgdGhlIGVuZCBvZiBhIHRleHRibG9jay5cbiovXG5jb25zdCBqb2luVGV4dGJsb2NrRm9yd2FyZCA9IChzdGF0ZSwgZGlzcGF0Y2gsIHZpZXcpID0+IHtcbiAgICBsZXQgJGN1cnNvciA9IGF0QmxvY2tFbmQoc3RhdGUsIHZpZXcpO1xuICAgIGlmICghJGN1cnNvcilcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGxldCAkY3V0ID0gZmluZEN1dEFmdGVyKCRjdXJzb3IpO1xuICAgIHJldHVybiAkY3V0ID8gam9pblRleHRibG9ja3NBcm91bmQoc3RhdGUsICRjdXQsIGRpc3BhdGNoKSA6IGZhbHNlO1xufTtcbmZ1bmN0aW9uIGpvaW5UZXh0YmxvY2tzQXJvdW5kKHN0YXRlLCAkY3V0LCBkaXNwYXRjaCkge1xuICAgIGxldCBiZWZvcmUgPSAkY3V0Lm5vZGVCZWZvcmUsIGJlZm9yZVRleHQgPSBiZWZvcmUsIGJlZm9yZVBvcyA9ICRjdXQucG9zIC0gMTtcbiAgICBmb3IgKDsgIWJlZm9yZVRleHQuaXNUZXh0YmxvY2s7IGJlZm9yZVBvcy0tKSB7XG4gICAgICAgIGlmIChiZWZvcmVUZXh0LnR5cGUuc3BlYy5pc29sYXRpbmcpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGxldCBjaGlsZCA9IGJlZm9yZVRleHQubGFzdENoaWxkO1xuICAgICAgICBpZiAoIWNoaWxkKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBiZWZvcmVUZXh0ID0gY2hpbGQ7XG4gICAgfVxuICAgIGxldCBhZnRlciA9ICRjdXQubm9kZUFmdGVyLCBhZnRlclRleHQgPSBhZnRlciwgYWZ0ZXJQb3MgPSAkY3V0LnBvcyArIDE7XG4gICAgZm9yICg7ICFhZnRlclRleHQuaXNUZXh0YmxvY2s7IGFmdGVyUG9zKyspIHtcbiAgICAgICAgaWYgKGFmdGVyVGV4dC50eXBlLnNwZWMuaXNvbGF0aW5nKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBsZXQgY2hpbGQgPSBhZnRlclRleHQuZmlyc3RDaGlsZDtcbiAgICAgICAgaWYgKCFjaGlsZClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgYWZ0ZXJUZXh0ID0gY2hpbGQ7XG4gICAgfVxuICAgIGxldCBzdGVwID0gcmVwbGFjZVN0ZXAoc3RhdGUuZG9jLCBiZWZvcmVQb3MsIGFmdGVyUG9zLCBTbGljZS5lbXB0eSk7XG4gICAgaWYgKCFzdGVwIHx8IHN0ZXAuZnJvbSAhPSBiZWZvcmVQb3MgfHxcbiAgICAgICAgc3RlcCBpbnN0YW5jZW9mIFJlcGxhY2VTdGVwICYmIHN0ZXAuc2xpY2Uuc2l6ZSA+PSBhZnRlclBvcyAtIGJlZm9yZVBvcylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgICBsZXQgdHIgPSBzdGF0ZS50ci5zdGVwKHN0ZXApO1xuICAgICAgICB0ci5zZXRTZWxlY3Rpb24oVGV4dFNlbGVjdGlvbi5jcmVhdGUodHIuZG9jLCBiZWZvcmVQb3MpKTtcbiAgICAgICAgZGlzcGF0Y2godHIuc2Nyb2xsSW50b1ZpZXcoKSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gdGV4dGJsb2NrQXQobm9kZSwgc2lkZSwgb25seSA9IGZhbHNlKSB7XG4gICAgZm9yIChsZXQgc2NhbiA9IG5vZGU7IHNjYW47IHNjYW4gPSAoc2lkZSA9PSBcInN0YXJ0XCIgPyBzY2FuLmZpcnN0Q2hpbGQgOiBzY2FuLmxhc3RDaGlsZCkpIHtcbiAgICAgICAgaWYgKHNjYW4uaXNUZXh0YmxvY2spXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKG9ubHkgJiYgc2Nhbi5jaGlsZENvdW50ICE9IDEpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuV2hlbiB0aGUgc2VsZWN0aW9uIGlzIGVtcHR5IGFuZCBhdCB0aGUgc3RhcnQgb2YgYSB0ZXh0YmxvY2ssIHNlbGVjdFxudGhlIG5vZGUgYmVmb3JlIHRoYXQgdGV4dGJsb2NrLCBpZiBwb3NzaWJsZS4gVGhpcyBpcyBpbnRlbmRlZCB0byBiZVxuYm91bmQgdG8ga2V5cyBsaWtlIGJhY2tzcGFjZSwgYWZ0ZXJcbltgam9pbkJhY2t3YXJkYF0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI2NvbW1hbmRzLmpvaW5CYWNrd2FyZCkgb3Igb3RoZXIgZGVsZXRpbmdcbmNvbW1hbmRzLCBhcyBhIGZhbGwtYmFjayBiZWhhdmlvciB3aGVuIHRoZSBzY2hlbWEgZG9lc24ndCBhbGxvd1xuZGVsZXRpb24gYXQgdGhlIHNlbGVjdGVkIHBvaW50LlxuKi9cbmNvbnN0IHNlbGVjdE5vZGVCYWNrd2FyZCA9IChzdGF0ZSwgZGlzcGF0Y2gsIHZpZXcpID0+IHtcbiAgICBsZXQgeyAkaGVhZCwgZW1wdHkgfSA9IHN0YXRlLnNlbGVjdGlvbiwgJGN1dCA9ICRoZWFkO1xuICAgIGlmICghZW1wdHkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoJGhlYWQucGFyZW50LmlzVGV4dGJsb2NrKSB7XG4gICAgICAgIGlmICh2aWV3ID8gIXZpZXcuZW5kT2ZUZXh0YmxvY2soXCJiYWNrd2FyZFwiLCBzdGF0ZSkgOiAkaGVhZC5wYXJlbnRPZmZzZXQgPiAwKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAkY3V0ID0gZmluZEN1dEJlZm9yZSgkaGVhZCk7XG4gICAgfVxuICAgIGxldCBub2RlID0gJGN1dCAmJiAkY3V0Lm5vZGVCZWZvcmU7XG4gICAgaWYgKCFub2RlIHx8ICFOb2RlU2VsZWN0aW9uLmlzU2VsZWN0YWJsZShub2RlKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChkaXNwYXRjaClcbiAgICAgICAgZGlzcGF0Y2goc3RhdGUudHIuc2V0U2VsZWN0aW9uKE5vZGVTZWxlY3Rpb24uY3JlYXRlKHN0YXRlLmRvYywgJGN1dC5wb3MgLSBub2RlLm5vZGVTaXplKSkuc2Nyb2xsSW50b1ZpZXcoKSk7XG4gICAgcmV0dXJuIHRydWU7XG59O1xuZnVuY3Rpb24gZmluZEN1dEJlZm9yZSgkcG9zKSB7XG4gICAgaWYgKCEkcG9zLnBhcmVudC50eXBlLnNwZWMuaXNvbGF0aW5nKVxuICAgICAgICBmb3IgKGxldCBpID0gJHBvcy5kZXB0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAoJHBvcy5pbmRleChpKSA+IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuICRwb3MuZG9jLnJlc29sdmUoJHBvcy5iZWZvcmUoaSArIDEpKTtcbiAgICAgICAgICAgIGlmICgkcG9zLm5vZGUoaSkudHlwZS5zcGVjLmlzb2xhdGluZylcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gYXRCbG9ja0VuZChzdGF0ZSwgdmlldykge1xuICAgIGxldCB7ICRjdXJzb3IgfSA9IHN0YXRlLnNlbGVjdGlvbjtcbiAgICBpZiAoISRjdXJzb3IgfHwgKHZpZXcgPyAhdmlldy5lbmRPZlRleHRibG9jayhcImZvcndhcmRcIiwgc3RhdGUpXG4gICAgICAgIDogJGN1cnNvci5wYXJlbnRPZmZzZXQgPCAkY3Vyc29yLnBhcmVudC5jb250ZW50LnNpemUpKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gJGN1cnNvcjtcbn1cbi8qKlxuSWYgdGhlIHNlbGVjdGlvbiBpcyBlbXB0eSBhbmQgdGhlIGN1cnNvciBpcyBhdCB0aGUgZW5kIG9mIGFcbnRleHRibG9jaywgdHJ5IHRvIHJlZHVjZSBvciByZW1vdmUgdGhlIGJvdW5kYXJ5IGJldHdlZW4gdGhhdCBibG9ja1xuYW5kIHRoZSBvbmUgYWZ0ZXIgaXQsIGVpdGhlciBieSBqb2luaW5nIHRoZW0gb3IgYnkgbW92aW5nIHRoZSBvdGhlclxuYmxvY2sgY2xvc2VyIHRvIHRoaXMgb25lIGluIHRoZSB0cmVlIHN0cnVjdHVyZS4gV2lsbCB1c2UgdGhlIHZpZXdcbmZvciBhY2N1cmF0ZSBzdGFydC1vZi10ZXh0YmxvY2sgZGV0ZWN0aW9uIGlmIGdpdmVuLlxuKi9cbmNvbnN0IGpvaW5Gb3J3YXJkID0gKHN0YXRlLCBkaXNwYXRjaCwgdmlldykgPT4ge1xuICAgIGxldCAkY3Vyc29yID0gYXRCbG9ja0VuZChzdGF0ZSwgdmlldyk7XG4gICAgaWYgKCEkY3Vyc29yKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgbGV0ICRjdXQgPSBmaW5kQ3V0QWZ0ZXIoJGN1cnNvcik7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gbm9kZSBhZnRlciB0aGlzLCB0aGVyZSdzIG5vdGhpbmcgdG8gZG9cbiAgICBpZiAoISRjdXQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsZXQgYWZ0ZXIgPSAkY3V0Lm5vZGVBZnRlcjtcbiAgICAvLyBUcnkgdGhlIGpvaW5pbmcgYWxnb3JpdGhtXG4gICAgaWYgKGRlbGV0ZUJhcnJpZXIoc3RhdGUsICRjdXQsIGRpc3BhdGNoKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgLy8gSWYgdGhlIG5vZGUgYWJvdmUgaGFzIG5vIGNvbnRlbnQgYW5kIHRoZSBub2RlIGJlbG93IGlzXG4gICAgLy8gc2VsZWN0YWJsZSwgZGVsZXRlIHRoZSBub2RlIGFib3ZlIGFuZCBzZWxlY3QgdGhlIG9uZSBiZWxvdy5cbiAgICBpZiAoJGN1cnNvci5wYXJlbnQuY29udGVudC5zaXplID09IDAgJiZcbiAgICAgICAgKHRleHRibG9ja0F0KGFmdGVyLCBcInN0YXJ0XCIpIHx8IE5vZGVTZWxlY3Rpb24uaXNTZWxlY3RhYmxlKGFmdGVyKSkpIHtcbiAgICAgICAgbGV0IGRlbFN0ZXAgPSByZXBsYWNlU3RlcChzdGF0ZS5kb2MsICRjdXJzb3IuYmVmb3JlKCksICRjdXJzb3IuYWZ0ZXIoKSwgU2xpY2UuZW1wdHkpO1xuICAgICAgICBpZiAoZGVsU3RlcCAmJiBkZWxTdGVwLnNsaWNlLnNpemUgPCBkZWxTdGVwLnRvIC0gZGVsU3RlcC5mcm9tKSB7XG4gICAgICAgICAgICBpZiAoZGlzcGF0Y2gpIHtcbiAgICAgICAgICAgICAgICBsZXQgdHIgPSBzdGF0ZS50ci5zdGVwKGRlbFN0ZXApO1xuICAgICAgICAgICAgICAgIHRyLnNldFNlbGVjdGlvbih0ZXh0YmxvY2tBdChhZnRlciwgXCJzdGFydFwiKSA/IFNlbGVjdGlvbi5maW5kRnJvbSh0ci5kb2MucmVzb2x2ZSh0ci5tYXBwaW5nLm1hcCgkY3V0LnBvcykpLCAxKVxuICAgICAgICAgICAgICAgICAgICA6IE5vZGVTZWxlY3Rpb24uY3JlYXRlKHRyLmRvYywgdHIubWFwcGluZy5tYXAoJGN1dC5wb3MpKSk7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2godHIuc2Nyb2xsSW50b1ZpZXcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB0aGUgbmV4dCBub2RlIGlzIGFuIGF0b20sIGRlbGV0ZSBpdFxuICAgIGlmIChhZnRlci5pc0F0b20gJiYgJGN1dC5kZXB0aCA9PSAkY3Vyc29yLmRlcHRoIC0gMSkge1xuICAgICAgICBpZiAoZGlzcGF0Y2gpXG4gICAgICAgICAgICBkaXNwYXRjaChzdGF0ZS50ci5kZWxldGUoJGN1dC5wb3MsICRjdXQucG9zICsgYWZ0ZXIubm9kZVNpemUpLnNjcm9sbEludG9WaWV3KCkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbi8qKlxuV2hlbiB0aGUgc2VsZWN0aW9uIGlzIGVtcHR5IGFuZCBhdCB0aGUgZW5kIG9mIGEgdGV4dGJsb2NrLCBzZWxlY3RcbnRoZSBub2RlIGNvbWluZyBhZnRlciB0aGF0IHRleHRibG9jaywgaWYgcG9zc2libGUuIFRoaXMgaXMgaW50ZW5kZWRcbnRvIGJlIGJvdW5kIHRvIGtleXMgbGlrZSBkZWxldGUsIGFmdGVyXG5bYGpvaW5Gb3J3YXJkYF0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI2NvbW1hbmRzLmpvaW5Gb3J3YXJkKSBhbmQgc2ltaWxhciBkZWxldGluZ1xuY29tbWFuZHMsIHRvIHByb3ZpZGUgYSBmYWxsLWJhY2sgYmVoYXZpb3Igd2hlbiB0aGUgc2NoZW1hIGRvZXNuJ3RcbmFsbG93IGRlbGV0aW9uIGF0IHRoZSBzZWxlY3RlZCBwb2ludC5cbiovXG5jb25zdCBzZWxlY3ROb2RlRm9yd2FyZCA9IChzdGF0ZSwgZGlzcGF0Y2gsIHZpZXcpID0+IHtcbiAgICBsZXQgeyAkaGVhZCwgZW1wdHkgfSA9IHN0YXRlLnNlbGVjdGlvbiwgJGN1dCA9ICRoZWFkO1xuICAgIGlmICghZW1wdHkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoJGhlYWQucGFyZW50LmlzVGV4dGJsb2NrKSB7XG4gICAgICAgIGlmICh2aWV3ID8gIXZpZXcuZW5kT2ZUZXh0YmxvY2soXCJmb3J3YXJkXCIsIHN0YXRlKSA6ICRoZWFkLnBhcmVudE9mZnNldCA8ICRoZWFkLnBhcmVudC5jb250ZW50LnNpemUpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICRjdXQgPSBmaW5kQ3V0QWZ0ZXIoJGhlYWQpO1xuICAgIH1cbiAgICBsZXQgbm9kZSA9ICRjdXQgJiYgJGN1dC5ub2RlQWZ0ZXI7XG4gICAgaWYgKCFub2RlIHx8ICFOb2RlU2VsZWN0aW9uLmlzU2VsZWN0YWJsZShub2RlKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChkaXNwYXRjaClcbiAgICAgICAgZGlzcGF0Y2goc3RhdGUudHIuc2V0U2VsZWN0aW9uKE5vZGVTZWxlY3Rpb24uY3JlYXRlKHN0YXRlLmRvYywgJGN1dC5wb3MpKS5zY3JvbGxJbnRvVmlldygpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5mdW5jdGlvbiBmaW5kQ3V0QWZ0ZXIoJHBvcykge1xuICAgIGlmICghJHBvcy5wYXJlbnQudHlwZS5zcGVjLmlzb2xhdGluZylcbiAgICAgICAgZm9yIChsZXQgaSA9ICRwb3MuZGVwdGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgbGV0IHBhcmVudCA9ICRwb3Mubm9kZShpKTtcbiAgICAgICAgICAgIGlmICgkcG9zLmluZGV4KGkpICsgMSA8IHBhcmVudC5jaGlsZENvdW50KVxuICAgICAgICAgICAgICAgIHJldHVybiAkcG9zLmRvYy5yZXNvbHZlKCRwb3MuYWZ0ZXIoaSArIDEpKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQudHlwZS5zcGVjLmlzb2xhdGluZylcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuLyoqXG5Kb2luIHRoZSBzZWxlY3RlZCBibG9jayBvciwgaWYgdGhlcmUgaXMgYSB0ZXh0IHNlbGVjdGlvbiwgdGhlXG5jbG9zZXN0IGFuY2VzdG9yIGJsb2NrIG9mIHRoZSBzZWxlY3Rpb24gdGhhdCBjYW4gYmUgam9pbmVkLCB3aXRoXG50aGUgc2libGluZyBhYm92ZSBpdC5cbiovXG5jb25zdCBqb2luVXAgPSAoc3RhdGUsIGRpc3BhdGNoKSA9PiB7XG4gICAgbGV0IHNlbCA9IHN0YXRlLnNlbGVjdGlvbiwgbm9kZVNlbCA9IHNlbCBpbnN0YW5jZW9mIE5vZGVTZWxlY3Rpb24sIHBvaW50O1xuICAgIGlmIChub2RlU2VsKSB7XG4gICAgICAgIGlmIChzZWwubm9kZS5pc1RleHRibG9jayB8fCAhY2FuSm9pbihzdGF0ZS5kb2MsIHNlbC5mcm9tKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcG9pbnQgPSBzZWwuZnJvbTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHBvaW50ID0gam9pblBvaW50KHN0YXRlLmRvYywgc2VsLmZyb20sIC0xKTtcbiAgICAgICAgaWYgKHBvaW50ID09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgICBsZXQgdHIgPSBzdGF0ZS50ci5qb2luKHBvaW50KTtcbiAgICAgICAgaWYgKG5vZGVTZWwpXG4gICAgICAgICAgICB0ci5zZXRTZWxlY3Rpb24oTm9kZVNlbGVjdGlvbi5jcmVhdGUodHIuZG9jLCBwb2ludCAtIHN0YXRlLmRvYy5yZXNvbHZlKHBvaW50KS5ub2RlQmVmb3JlLm5vZGVTaXplKSk7XG4gICAgICAgIGRpc3BhdGNoKHRyLnNjcm9sbEludG9WaWV3KCkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4vKipcbkpvaW4gdGhlIHNlbGVjdGVkIGJsb2NrLCBvciB0aGUgY2xvc2VzdCBhbmNlc3RvciBvZiB0aGUgc2VsZWN0aW9uXG50aGF0IGNhbiBiZSBqb2luZWQsIHdpdGggdGhlIHNpYmxpbmcgYWZ0ZXIgaXQuXG4qL1xuY29uc3Qgam9pbkRvd24gPSAoc3RhdGUsIGRpc3BhdGNoKSA9PiB7XG4gICAgbGV0IHNlbCA9IHN0YXRlLnNlbGVjdGlvbiwgcG9pbnQ7XG4gICAgaWYgKHNlbCBpbnN0YW5jZW9mIE5vZGVTZWxlY3Rpb24pIHtcbiAgICAgICAgaWYgKHNlbC5ub2RlLmlzVGV4dGJsb2NrIHx8ICFjYW5Kb2luKHN0YXRlLmRvYywgc2VsLnRvKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcG9pbnQgPSBzZWwudG87XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBwb2ludCA9IGpvaW5Qb2ludChzdGF0ZS5kb2MsIHNlbC50bywgMSk7XG4gICAgICAgIGlmIChwb2ludCA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZGlzcGF0Y2gpXG4gICAgICAgIGRpc3BhdGNoKHN0YXRlLnRyLmpvaW4ocG9pbnQpLnNjcm9sbEludG9WaWV3KCkpO1xuICAgIHJldHVybiB0cnVlO1xufTtcbi8qKlxuTGlmdCB0aGUgc2VsZWN0ZWQgYmxvY2ssIG9yIHRoZSBjbG9zZXN0IGFuY2VzdG9yIGJsb2NrIG9mIHRoZVxuc2VsZWN0aW9uIHRoYXQgY2FuIGJlIGxpZnRlZCwgb3V0IG9mIGl0cyBwYXJlbnQgbm9kZS5cbiovXG5jb25zdCBsaWZ0ID0gKHN0YXRlLCBkaXNwYXRjaCkgPT4ge1xuICAgIGxldCB7ICRmcm9tLCAkdG8gfSA9IHN0YXRlLnNlbGVjdGlvbjtcbiAgICBsZXQgcmFuZ2UgPSAkZnJvbS5ibG9ja1JhbmdlKCR0byksIHRhcmdldCA9IHJhbmdlICYmIGxpZnRUYXJnZXQocmFuZ2UpO1xuICAgIGlmICh0YXJnZXQgPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChkaXNwYXRjaClcbiAgICAgICAgZGlzcGF0Y2goc3RhdGUudHIubGlmdChyYW5nZSwgdGFyZ2V0KS5zY3JvbGxJbnRvVmlldygpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4vKipcbklmIHRoZSBzZWxlY3Rpb24gaXMgaW4gYSBub2RlIHdob3NlIHR5cGUgaGFzIGEgdHJ1dGh5XG5bYGNvZGVgXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jbW9kZWwuTm9kZVNwZWMuY29kZSkgcHJvcGVydHkgaW4gaXRzIHNwZWMsIHJlcGxhY2UgdGhlXG5zZWxlY3Rpb24gd2l0aCBhIG5ld2xpbmUgY2hhcmFjdGVyLlxuKi9cbmNvbnN0IG5ld2xpbmVJbkNvZGUgPSAoc3RhdGUsIGRpc3BhdGNoKSA9PiB7XG4gICAgbGV0IHsgJGhlYWQsICRhbmNob3IgfSA9IHN0YXRlLnNlbGVjdGlvbjtcbiAgICBpZiAoISRoZWFkLnBhcmVudC50eXBlLnNwZWMuY29kZSB8fCAhJGhlYWQuc2FtZVBhcmVudCgkYW5jaG9yKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChkaXNwYXRjaClcbiAgICAgICAgZGlzcGF0Y2goc3RhdGUudHIuaW5zZXJ0VGV4dChcIlxcblwiKS5zY3JvbGxJbnRvVmlldygpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5mdW5jdGlvbiBkZWZhdWx0QmxvY2tBdChtYXRjaCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0Y2guZWRnZUNvdW50OyBpKyspIHtcbiAgICAgICAgbGV0IHsgdHlwZSB9ID0gbWF0Y2guZWRnZShpKTtcbiAgICAgICAgaWYgKHR5cGUuaXNUZXh0YmxvY2sgJiYgIXR5cGUuaGFzUmVxdWlyZWRBdHRycygpKVxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuLyoqXG5XaGVuIHRoZSBzZWxlY3Rpb24gaXMgaW4gYSBub2RlIHdpdGggYSB0cnV0aHlcbltgY29kZWBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNtb2RlbC5Ob2RlU3BlYy5jb2RlKSBwcm9wZXJ0eSBpbiBpdHMgc3BlYywgY3JlYXRlIGFcbmRlZmF1bHQgYmxvY2sgYWZ0ZXIgdGhlIGNvZGUgYmxvY2ssIGFuZCBtb3ZlIHRoZSBjdXJzb3IgdGhlcmUuXG4qL1xuY29uc3QgZXhpdENvZGUgPSAoc3RhdGUsIGRpc3BhdGNoKSA9PiB7XG4gICAgbGV0IHsgJGhlYWQsICRhbmNob3IgfSA9IHN0YXRlLnNlbGVjdGlvbjtcbiAgICBpZiAoISRoZWFkLnBhcmVudC50eXBlLnNwZWMuY29kZSB8fCAhJGhlYWQuc2FtZVBhcmVudCgkYW5jaG9yKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGxldCBhYm92ZSA9ICRoZWFkLm5vZGUoLTEpLCBhZnRlciA9ICRoZWFkLmluZGV4QWZ0ZXIoLTEpLCB0eXBlID0gZGVmYXVsdEJsb2NrQXQoYWJvdmUuY29udGVudE1hdGNoQXQoYWZ0ZXIpKTtcbiAgICBpZiAoIXR5cGUgfHwgIWFib3ZlLmNhblJlcGxhY2VXaXRoKGFmdGVyLCBhZnRlciwgdHlwZSkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZGlzcGF0Y2gpIHtcbiAgICAgICAgbGV0IHBvcyA9ICRoZWFkLmFmdGVyKCksIHRyID0gc3RhdGUudHIucmVwbGFjZVdpdGgocG9zLCBwb3MsIHR5cGUuY3JlYXRlQW5kRmlsbCgpKTtcbiAgICAgICAgdHIuc2V0U2VsZWN0aW9uKFNlbGVjdGlvbi5uZWFyKHRyLmRvYy5yZXNvbHZlKHBvcyksIDEpKTtcbiAgICAgICAgZGlzcGF0Y2godHIuc2Nyb2xsSW50b1ZpZXcoKSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcbi8qKlxuSWYgYSBibG9jayBub2RlIGlzIHNlbGVjdGVkLCBjcmVhdGUgYW4gZW1wdHkgcGFyYWdyYXBoIGJlZm9yZSAoaWZcbml0IGlzIGl0cyBwYXJlbnQncyBmaXJzdCBjaGlsZCkgb3IgYWZ0ZXIgaXQuXG4qL1xuY29uc3QgY3JlYXRlUGFyYWdyYXBoTmVhciA9IChzdGF0ZSwgZGlzcGF0Y2gpID0+IHtcbiAgICBsZXQgc2VsID0gc3RhdGUuc2VsZWN0aW9uLCB7ICRmcm9tLCAkdG8gfSA9IHNlbDtcbiAgICBpZiAoc2VsIGluc3RhbmNlb2YgQWxsU2VsZWN0aW9uIHx8ICRmcm9tLnBhcmVudC5pbmxpbmVDb250ZW50IHx8ICR0by5wYXJlbnQuaW5saW5lQ29udGVudClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGxldCB0eXBlID0gZGVmYXVsdEJsb2NrQXQoJHRvLnBhcmVudC5jb250ZW50TWF0Y2hBdCgkdG8uaW5kZXhBZnRlcigpKSk7XG4gICAgaWYgKCF0eXBlIHx8ICF0eXBlLmlzVGV4dGJsb2NrKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGRpc3BhdGNoKSB7XG4gICAgICAgIGxldCBzaWRlID0gKCEkZnJvbS5wYXJlbnRPZmZzZXQgJiYgJHRvLmluZGV4KCkgPCAkdG8ucGFyZW50LmNoaWxkQ291bnQgPyAkZnJvbSA6ICR0bykucG9zO1xuICAgICAgICBsZXQgdHIgPSBzdGF0ZS50ci5pbnNlcnQoc2lkZSwgdHlwZS5jcmVhdGVBbmRGaWxsKCkpO1xuICAgICAgICB0ci5zZXRTZWxlY3Rpb24oVGV4dFNlbGVjdGlvbi5jcmVhdGUodHIuZG9jLCBzaWRlICsgMSkpO1xuICAgICAgICBkaXNwYXRjaCh0ci5zY3JvbGxJbnRvVmlldygpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuLyoqXG5JZiB0aGUgY3Vyc29yIGlzIGluIGFuIGVtcHR5IHRleHRibG9jayB0aGF0IGNhbiBiZSBsaWZ0ZWQsIGxpZnQgdGhlXG5ibG9jay5cbiovXG5jb25zdCBsaWZ0RW1wdHlCbG9jayA9IChzdGF0ZSwgZGlzcGF0Y2gpID0+IHtcbiAgICBsZXQgeyAkY3Vyc29yIH0gPSBzdGF0ZS5zZWxlY3Rpb247XG4gICAgaWYgKCEkY3Vyc29yIHx8ICRjdXJzb3IucGFyZW50LmNvbnRlbnQuc2l6ZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICgkY3Vyc29yLmRlcHRoID4gMSAmJiAkY3Vyc29yLmFmdGVyKCkgIT0gJGN1cnNvci5lbmQoLTEpKSB7XG4gICAgICAgIGxldCBiZWZvcmUgPSAkY3Vyc29yLmJlZm9yZSgpO1xuICAgICAgICBpZiAoY2FuU3BsaXQoc3RhdGUuZG9jLCBiZWZvcmUpKSB7XG4gICAgICAgICAgICBpZiAoZGlzcGF0Y2gpXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goc3RhdGUudHIuc3BsaXQoYmVmb3JlKS5zY3JvbGxJbnRvVmlldygpKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCByYW5nZSA9ICRjdXJzb3IuYmxvY2tSYW5nZSgpLCB0YXJnZXQgPSByYW5nZSAmJiBsaWZ0VGFyZ2V0KHJhbmdlKTtcbiAgICBpZiAodGFyZ2V0ID09IG51bGwpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZGlzcGF0Y2gpXG4gICAgICAgIGRpc3BhdGNoKHN0YXRlLnRyLmxpZnQocmFuZ2UsIHRhcmdldCkuc2Nyb2xsSW50b1ZpZXcoKSk7XG4gICAgcmV0dXJuIHRydWU7XG59O1xuLyoqXG5DcmVhdGUgYSB2YXJpYW50IG9mIFtgc3BsaXRCbG9ja2BdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNjb21tYW5kcy5zcGxpdEJsb2NrKSB0aGF0IHVzZXNcbmEgY3VzdG9tIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiB0aGUgbmV3bHkgc3BsaXQgb2ZmIGJsb2NrLlxuKi9cbmZ1bmN0aW9uIHNwbGl0QmxvY2tBcyhzcGxpdE5vZGUpIHtcbiAgICByZXR1cm4gKHN0YXRlLCBkaXNwYXRjaCkgPT4ge1xuICAgICAgICBsZXQgeyAkZnJvbSwgJHRvIH0gPSBzdGF0ZS5zZWxlY3Rpb247XG4gICAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24gaW5zdGFuY2VvZiBOb2RlU2VsZWN0aW9uICYmIHN0YXRlLnNlbGVjdGlvbi5ub2RlLmlzQmxvY2spIHtcbiAgICAgICAgICAgIGlmICghJGZyb20ucGFyZW50T2Zmc2V0IHx8ICFjYW5TcGxpdChzdGF0ZS5kb2MsICRmcm9tLnBvcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKGRpc3BhdGNoKVxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHN0YXRlLnRyLnNwbGl0KCRmcm9tLnBvcykuc2Nyb2xsSW50b1ZpZXcoKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISRmcm9tLnBhcmVudC5pc0Jsb2NrKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoZGlzcGF0Y2gpIHtcbiAgICAgICAgICAgIGxldCBhdEVuZCA9ICR0by5wYXJlbnRPZmZzZXQgPT0gJHRvLnBhcmVudC5jb250ZW50LnNpemU7XG4gICAgICAgICAgICBsZXQgdHIgPSBzdGF0ZS50cjtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24gaW5zdGFuY2VvZiBUZXh0U2VsZWN0aW9uIHx8IHN0YXRlLnNlbGVjdGlvbiBpbnN0YW5jZW9mIEFsbFNlbGVjdGlvbilcbiAgICAgICAgICAgICAgICB0ci5kZWxldGVTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGxldCBkZWZsdCA9ICRmcm9tLmRlcHRoID09IDAgPyBudWxsIDogZGVmYXVsdEJsb2NrQXQoJGZyb20ubm9kZSgtMSkuY29udGVudE1hdGNoQXQoJGZyb20uaW5kZXhBZnRlcigtMSkpKTtcbiAgICAgICAgICAgIGxldCBzcGxpdFR5cGUgPSBzcGxpdE5vZGUgJiYgc3BsaXROb2RlKCR0by5wYXJlbnQsIGF0RW5kKTtcbiAgICAgICAgICAgIGxldCB0eXBlcyA9IHNwbGl0VHlwZSA/IFtzcGxpdFR5cGVdIDogYXRFbmQgJiYgZGVmbHQgPyBbeyB0eXBlOiBkZWZsdCB9XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBjYW4gPSBjYW5TcGxpdCh0ci5kb2MsIHRyLm1hcHBpbmcubWFwKCRmcm9tLnBvcyksIDEsIHR5cGVzKTtcbiAgICAgICAgICAgIGlmICghdHlwZXMgJiYgIWNhbiAmJiBjYW5TcGxpdCh0ci5kb2MsIHRyLm1hcHBpbmcubWFwKCRmcm9tLnBvcyksIDEsIGRlZmx0ID8gW3sgdHlwZTogZGVmbHQgfV0gOiB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmx0KVxuICAgICAgICAgICAgICAgICAgICB0eXBlcyA9IFt7IHR5cGU6IGRlZmx0IH1dO1xuICAgICAgICAgICAgICAgIGNhbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2FuKSB7XG4gICAgICAgICAgICAgICAgdHIuc3BsaXQodHIubWFwcGluZy5tYXAoJGZyb20ucG9zKSwgMSwgdHlwZXMpO1xuICAgICAgICAgICAgICAgIGlmICghYXRFbmQgJiYgISRmcm9tLnBhcmVudE9mZnNldCAmJiAkZnJvbS5wYXJlbnQudHlwZSAhPSBkZWZsdCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmlyc3QgPSB0ci5tYXBwaW5nLm1hcCgkZnJvbS5iZWZvcmUoKSksICRmaXJzdCA9IHRyLmRvYy5yZXNvbHZlKGZpcnN0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmx0ICYmICRmcm9tLm5vZGUoLTEpLmNhblJlcGxhY2VXaXRoKCRmaXJzdC5pbmRleCgpLCAkZmlyc3QuaW5kZXgoKSArIDEsIGRlZmx0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyLnNldE5vZGVNYXJrdXAodHIubWFwcGluZy5tYXAoJGZyb20uYmVmb3JlKCkpLCBkZWZsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzcGF0Y2godHIuc2Nyb2xsSW50b1ZpZXcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbn1cbi8qKlxuU3BsaXQgdGhlIHBhcmVudCBibG9jayBvZiB0aGUgc2VsZWN0aW9uLiBJZiB0aGUgc2VsZWN0aW9uIGlzIGEgdGV4dFxuc2VsZWN0aW9uLCBhbHNvIGRlbGV0ZSBpdHMgY29udGVudC5cbiovXG5jb25zdCBzcGxpdEJsb2NrID0gc3BsaXRCbG9ja0FzKCk7XG4vKipcbkFjdHMgbGlrZSBbYHNwbGl0QmxvY2tgXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jY29tbWFuZHMuc3BsaXRCbG9jayksIGJ1dCB3aXRob3V0XG5yZXNldHRpbmcgdGhlIHNldCBvZiBhY3RpdmUgbWFya3MgYXQgdGhlIGN1cnNvci5cbiovXG5jb25zdCBzcGxpdEJsb2NrS2VlcE1hcmtzID0gKHN0YXRlLCBkaXNwYXRjaCkgPT4ge1xuICAgIHJldHVybiBzcGxpdEJsb2NrKHN0YXRlLCBkaXNwYXRjaCAmJiAodHIgPT4ge1xuICAgICAgICBsZXQgbWFya3MgPSBzdGF0ZS5zdG9yZWRNYXJrcyB8fCAoc3RhdGUuc2VsZWN0aW9uLiR0by5wYXJlbnRPZmZzZXQgJiYgc3RhdGUuc2VsZWN0aW9uLiRmcm9tLm1hcmtzKCkpO1xuICAgICAgICBpZiAobWFya3MpXG4gICAgICAgICAgICB0ci5lbnN1cmVNYXJrcyhtYXJrcyk7XG4gICAgICAgIGRpc3BhdGNoKHRyKTtcbiAgICB9KSk7XG59O1xuLyoqXG5Nb3ZlIHRoZSBzZWxlY3Rpb24gdG8gdGhlIG5vZGUgd3JhcHBpbmcgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBpZlxuYW55LiAoV2lsbCBub3Qgc2VsZWN0IHRoZSBkb2N1bWVudCBub2RlLilcbiovXG5jb25zdCBzZWxlY3RQYXJlbnROb2RlID0gKHN0YXRlLCBkaXNwYXRjaCkgPT4ge1xuICAgIGxldCB7ICRmcm9tLCB0byB9ID0gc3RhdGUuc2VsZWN0aW9uLCBwb3M7XG4gICAgbGV0IHNhbWUgPSAkZnJvbS5zaGFyZWREZXB0aCh0byk7XG4gICAgaWYgKHNhbWUgPT0gMClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHBvcyA9ICRmcm9tLmJlZm9yZShzYW1lKTtcbiAgICBpZiAoZGlzcGF0Y2gpXG4gICAgICAgIGRpc3BhdGNoKHN0YXRlLnRyLnNldFNlbGVjdGlvbihOb2RlU2VsZWN0aW9uLmNyZWF0ZShzdGF0ZS5kb2MsIHBvcykpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4vKipcblNlbGVjdCB0aGUgd2hvbGUgZG9jdW1lbnQuXG4qL1xuY29uc3Qgc2VsZWN0QWxsID0gKHN0YXRlLCBkaXNwYXRjaCkgPT4ge1xuICAgIGlmIChkaXNwYXRjaClcbiAgICAgICAgZGlzcGF0Y2goc3RhdGUudHIuc2V0U2VsZWN0aW9uKG5ldyBBbGxTZWxlY3Rpb24oc3RhdGUuZG9jKSkpO1xuICAgIHJldHVybiB0cnVlO1xufTtcbmZ1bmN0aW9uIGpvaW5NYXliZUNsZWFyKHN0YXRlLCAkcG9zLCBkaXNwYXRjaCkge1xuICAgIGxldCBiZWZvcmUgPSAkcG9zLm5vZGVCZWZvcmUsIGFmdGVyID0gJHBvcy5ub2RlQWZ0ZXIsIGluZGV4ID0gJHBvcy5pbmRleCgpO1xuICAgIGlmICghYmVmb3JlIHx8ICFhZnRlciB8fCAhYmVmb3JlLnR5cGUuY29tcGF0aWJsZUNvbnRlbnQoYWZ0ZXIudHlwZSkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIWJlZm9yZS5jb250ZW50LnNpemUgJiYgJHBvcy5wYXJlbnQuY2FuUmVwbGFjZShpbmRleCAtIDEsIGluZGV4KSkge1xuICAgICAgICBpZiAoZGlzcGF0Y2gpXG4gICAgICAgICAgICBkaXNwYXRjaChzdGF0ZS50ci5kZWxldGUoJHBvcy5wb3MgLSBiZWZvcmUubm9kZVNpemUsICRwb3MucG9zKS5zY3JvbGxJbnRvVmlldygpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICghJHBvcy5wYXJlbnQuY2FuUmVwbGFjZShpbmRleCwgaW5kZXggKyAxKSB8fCAhKGFmdGVyLmlzVGV4dGJsb2NrIHx8IGNhbkpvaW4oc3RhdGUuZG9jLCAkcG9zLnBvcykpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGRpc3BhdGNoKVxuICAgICAgICBkaXNwYXRjaChzdGF0ZS50clxuICAgICAgICAgICAgLmNsZWFySW5jb21wYXRpYmxlKCRwb3MucG9zLCBiZWZvcmUudHlwZSwgYmVmb3JlLmNvbnRlbnRNYXRjaEF0KGJlZm9yZS5jaGlsZENvdW50KSlcbiAgICAgICAgICAgIC5qb2luKCRwb3MucG9zKVxuICAgICAgICAgICAgLnNjcm9sbEludG9WaWV3KCkpO1xuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZGVsZXRlQmFycmllcihzdGF0ZSwgJGN1dCwgZGlzcGF0Y2gpIHtcbiAgICBsZXQgYmVmb3JlID0gJGN1dC5ub2RlQmVmb3JlLCBhZnRlciA9ICRjdXQubm9kZUFmdGVyLCBjb25uLCBtYXRjaDtcbiAgICBpZiAoYmVmb3JlLnR5cGUuc3BlYy5pc29sYXRpbmcgfHwgYWZ0ZXIudHlwZS5zcGVjLmlzb2xhdGluZylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChqb2luTWF5YmVDbGVhcihzdGF0ZSwgJGN1dCwgZGlzcGF0Y2gpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBsZXQgY2FuRGVsQWZ0ZXIgPSAkY3V0LnBhcmVudC5jYW5SZXBsYWNlKCRjdXQuaW5kZXgoKSwgJGN1dC5pbmRleCgpICsgMSk7XG4gICAgaWYgKGNhbkRlbEFmdGVyICYmXG4gICAgICAgIChjb25uID0gKG1hdGNoID0gYmVmb3JlLmNvbnRlbnRNYXRjaEF0KGJlZm9yZS5jaGlsZENvdW50KSkuZmluZFdyYXBwaW5nKGFmdGVyLnR5cGUpKSAmJlxuICAgICAgICBtYXRjaC5tYXRjaFR5cGUoY29ublswXSB8fCBhZnRlci50eXBlKS52YWxpZEVuZCkge1xuICAgICAgICBpZiAoZGlzcGF0Y2gpIHtcbiAgICAgICAgICAgIGxldCBlbmQgPSAkY3V0LnBvcyArIGFmdGVyLm5vZGVTaXplLCB3cmFwID0gRnJhZ21lbnQuZW1wdHk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY29ubi5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcbiAgICAgICAgICAgICAgICB3cmFwID0gRnJhZ21lbnQuZnJvbShjb25uW2ldLmNyZWF0ZShudWxsLCB3cmFwKSk7XG4gICAgICAgICAgICB3cmFwID0gRnJhZ21lbnQuZnJvbShiZWZvcmUuY29weSh3cmFwKSk7XG4gICAgICAgICAgICBsZXQgdHIgPSBzdGF0ZS50ci5zdGVwKG5ldyBSZXBsYWNlQXJvdW5kU3RlcCgkY3V0LnBvcyAtIDEsIGVuZCwgJGN1dC5wb3MsIGVuZCwgbmV3IFNsaWNlKHdyYXAsIDEsIDApLCBjb25uLmxlbmd0aCwgdHJ1ZSkpO1xuICAgICAgICAgICAgbGV0IGpvaW5BdCA9IGVuZCArIDIgKiBjb25uLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChjYW5Kb2luKHRyLmRvYywgam9pbkF0KSlcbiAgICAgICAgICAgICAgICB0ci5qb2luKGpvaW5BdCk7XG4gICAgICAgICAgICBkaXNwYXRjaCh0ci5zY3JvbGxJbnRvVmlldygpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgbGV0IHNlbEFmdGVyID0gU2VsZWN0aW9uLmZpbmRGcm9tKCRjdXQsIDEpO1xuICAgIGxldCByYW5nZSA9IHNlbEFmdGVyICYmIHNlbEFmdGVyLiRmcm9tLmJsb2NrUmFuZ2Uoc2VsQWZ0ZXIuJHRvKSwgdGFyZ2V0ID0gcmFuZ2UgJiYgbGlmdFRhcmdldChyYW5nZSk7XG4gICAgaWYgKHRhcmdldCAhPSBudWxsICYmIHRhcmdldCA+PSAkY3V0LmRlcHRoKSB7XG4gICAgICAgIGlmIChkaXNwYXRjaClcbiAgICAgICAgICAgIGRpc3BhdGNoKHN0YXRlLnRyLmxpZnQocmFuZ2UsIHRhcmdldCkuc2Nyb2xsSW50b1ZpZXcoKSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoY2FuRGVsQWZ0ZXIgJiYgdGV4dGJsb2NrQXQoYWZ0ZXIsIFwic3RhcnRcIiwgdHJ1ZSkgJiYgdGV4dGJsb2NrQXQoYmVmb3JlLCBcImVuZFwiKSkge1xuICAgICAgICBsZXQgYXQgPSBiZWZvcmUsIHdyYXAgPSBbXTtcbiAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgd3JhcC5wdXNoKGF0KTtcbiAgICAgICAgICAgIGlmIChhdC5pc1RleHRibG9jaylcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGF0ID0gYXQubGFzdENoaWxkO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhZnRlclRleHQgPSBhZnRlciwgYWZ0ZXJEZXB0aCA9IDE7XG4gICAgICAgIGZvciAoOyAhYWZ0ZXJUZXh0LmlzVGV4dGJsb2NrOyBhZnRlclRleHQgPSBhZnRlclRleHQuZmlyc3RDaGlsZClcbiAgICAgICAgICAgIGFmdGVyRGVwdGgrKztcbiAgICAgICAgaWYgKGF0LmNhblJlcGxhY2UoYXQuY2hpbGRDb3VudCwgYXQuY2hpbGRDb3VudCwgYWZ0ZXJUZXh0LmNvbnRlbnQpKSB7XG4gICAgICAgICAgICBpZiAoZGlzcGF0Y2gpIHtcbiAgICAgICAgICAgICAgICBsZXQgZW5kID0gRnJhZ21lbnQuZW1wdHk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHdyYXAubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IEZyYWdtZW50LmZyb20od3JhcFtpXS5jb3B5KGVuZCkpO1xuICAgICAgICAgICAgICAgIGxldCB0ciA9IHN0YXRlLnRyLnN0ZXAobmV3IFJlcGxhY2VBcm91bmRTdGVwKCRjdXQucG9zIC0gd3JhcC5sZW5ndGgsICRjdXQucG9zICsgYWZ0ZXIubm9kZVNpemUsICRjdXQucG9zICsgYWZ0ZXJEZXB0aCwgJGN1dC5wb3MgKyBhZnRlci5ub2RlU2l6ZSAtIGFmdGVyRGVwdGgsIG5ldyBTbGljZShlbmQsIHdyYXAubGVuZ3RoLCAwKSwgMCwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHRyLnNjcm9sbEludG9WaWV3KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc2VsZWN0VGV4dGJsb2NrU2lkZShzaWRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSwgZGlzcGF0Y2gpIHtcbiAgICAgICAgbGV0IHNlbCA9IHN0YXRlLnNlbGVjdGlvbiwgJHBvcyA9IHNpZGUgPCAwID8gc2VsLiRmcm9tIDogc2VsLiR0bztcbiAgICAgICAgbGV0IGRlcHRoID0gJHBvcy5kZXB0aDtcbiAgICAgICAgd2hpbGUgKCRwb3Mubm9kZShkZXB0aCkuaXNJbmxpbmUpIHtcbiAgICAgICAgICAgIGlmICghZGVwdGgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISRwb3Mubm9kZShkZXB0aCkuaXNUZXh0YmxvY2spXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkaXNwYXRjaClcbiAgICAgICAgICAgIGRpc3BhdGNoKHN0YXRlLnRyLnNldFNlbGVjdGlvbihUZXh0U2VsZWN0aW9uLmNyZWF0ZShzdGF0ZS5kb2MsIHNpZGUgPCAwID8gJHBvcy5zdGFydChkZXB0aCkgOiAkcG9zLmVuZChkZXB0aCkpKSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG59XG4vKipcbk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIHN0YXJ0IG9mIGN1cnJlbnQgdGV4dCBibG9jay5cbiovXG5jb25zdCBzZWxlY3RUZXh0YmxvY2tTdGFydCA9IHNlbGVjdFRleHRibG9ja1NpZGUoLTEpO1xuLyoqXG5Nb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgY3VycmVudCB0ZXh0IGJsb2NrLlxuKi9cbmNvbnN0IHNlbGVjdFRleHRibG9ja0VuZCA9IHNlbGVjdFRleHRibG9ja1NpZGUoMSk7XG4vLyBQYXJhbWV0ZXJpemVkIGNvbW1hbmRzXG4vKipcbldyYXAgdGhlIHNlbGVjdGlvbiBpbiBhIG5vZGUgb2YgdGhlIGdpdmVuIHR5cGUgd2l0aCB0aGUgZ2l2ZW5cbmF0dHJpYnV0ZXMuXG4qL1xuZnVuY3Rpb24gd3JhcEluKG5vZGVUeXBlLCBhdHRycyA9IG51bGwpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlLCBkaXNwYXRjaCkge1xuICAgICAgICBsZXQgeyAkZnJvbSwgJHRvIH0gPSBzdGF0ZS5zZWxlY3Rpb247XG4gICAgICAgIGxldCByYW5nZSA9ICRmcm9tLmJsb2NrUmFuZ2UoJHRvKSwgd3JhcHBpbmcgPSByYW5nZSAmJiBmaW5kV3JhcHBpbmcocmFuZ2UsIG5vZGVUeXBlLCBhdHRycyk7XG4gICAgICAgIGlmICghd3JhcHBpbmcpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkaXNwYXRjaClcbiAgICAgICAgICAgIGRpc3BhdGNoKHN0YXRlLnRyLndyYXAocmFuZ2UsIHdyYXBwaW5nKS5zY3JvbGxJbnRvVmlldygpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbn1cbi8qKlxuUmV0dXJucyBhIGNvbW1hbmQgdGhhdCB0cmllcyB0byBzZXQgdGhlIHNlbGVjdGVkIHRleHRibG9ja3MgdG8gdGhlXG5naXZlbiBub2RlIHR5cGUgd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRlcy5cbiovXG5mdW5jdGlvbiBzZXRCbG9ja1R5cGUobm9kZVR5cGUsIGF0dHJzID0gbnVsbCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUsIGRpc3BhdGNoKSB7XG4gICAgICAgIGxldCBhcHBsaWNhYmxlID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhdGUuc2VsZWN0aW9uLnJhbmdlcy5sZW5ndGggJiYgIWFwcGxpY2FibGU7IGkrKykge1xuICAgICAgICAgICAgbGV0IHsgJGZyb206IHsgcG9zOiBmcm9tIH0sICR0bzogeyBwb3M6IHRvIH0gfSA9IHN0YXRlLnNlbGVjdGlvbi5yYW5nZXNbaV07XG4gICAgICAgICAgICBzdGF0ZS5kb2Mubm9kZXNCZXR3ZWVuKGZyb20sIHRvLCAobm9kZSwgcG9zKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFwcGxpY2FibGUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUuaXNUZXh0YmxvY2sgfHwgbm9kZS5oYXNNYXJrdXAobm9kZVR5cGUsIGF0dHJzKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT0gbm9kZVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbGljYWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgJHBvcyA9IHN0YXRlLmRvYy5yZXNvbHZlKHBvcyksIGluZGV4ID0gJHBvcy5pbmRleCgpO1xuICAgICAgICAgICAgICAgICAgICBhcHBsaWNhYmxlID0gJHBvcy5wYXJlbnQuY2FuUmVwbGFjZVdpdGgoaW5kZXgsIGluZGV4ICsgMSwgbm9kZVR5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXBwbGljYWJsZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGRpc3BhdGNoKSB7XG4gICAgICAgICAgICBsZXQgdHIgPSBzdGF0ZS50cjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhdGUuc2VsZWN0aW9uLnJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCB7ICRmcm9tOiB7IHBvczogZnJvbSB9LCAkdG86IHsgcG9zOiB0byB9IH0gPSBzdGF0ZS5zZWxlY3Rpb24ucmFuZ2VzW2ldO1xuICAgICAgICAgICAgICAgIHRyLnNldEJsb2NrVHlwZShmcm9tLCB0bywgbm9kZVR5cGUsIGF0dHJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpc3BhdGNoKHRyLnNjcm9sbEludG9WaWV3KCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG59XG5mdW5jdGlvbiBtYXJrQXBwbGllcyhkb2MsIHJhbmdlcywgdHlwZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCB7ICRmcm9tLCAkdG8gfSA9IHJhbmdlc1tpXTtcbiAgICAgICAgbGV0IGNhbiA9ICRmcm9tLmRlcHRoID09IDAgPyBkb2MuaW5saW5lQ29udGVudCAmJiBkb2MudHlwZS5hbGxvd3NNYXJrVHlwZSh0eXBlKSA6IGZhbHNlO1xuICAgICAgICBkb2Mubm9kZXNCZXR3ZWVuKCRmcm9tLnBvcywgJHRvLnBvcywgbm9kZSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FuKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhbiA9IG5vZGUuaW5saW5lQ29udGVudCAmJiBub2RlLnR5cGUuYWxsb3dzTWFya1R5cGUodHlwZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2FuKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuQ3JlYXRlIGEgY29tbWFuZCBmdW5jdGlvbiB0aGF0IHRvZ2dsZXMgdGhlIGdpdmVuIG1hcmsgd2l0aCB0aGVcbmdpdmVuIGF0dHJpYnV0ZXMuIFdpbGwgcmV0dXJuIGBmYWxzZWAgd2hlbiB0aGUgY3VycmVudCBzZWxlY3Rpb25cbmRvZXNuJ3Qgc3VwcG9ydCB0aGF0IG1hcmsuIFRoaXMgd2lsbCByZW1vdmUgdGhlIG1hcmsgaWYgYW55IG1hcmtzXG5vZiB0aGF0IHR5cGUgZXhpc3QgaW4gdGhlIHNlbGVjdGlvbiwgb3IgYWRkIGl0IG90aGVyd2lzZS4gSWYgdGhlXG5zZWxlY3Rpb24gaXMgZW1wdHksIHRoaXMgYXBwbGllcyB0byB0aGUgW3N0b3JlZFxubWFya3NdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNzdGF0ZS5FZGl0b3JTdGF0ZS5zdG9yZWRNYXJrcykgaW5zdGVhZCBvZiBhIHJhbmdlIG9mIHRoZVxuZG9jdW1lbnQuXG4qL1xuZnVuY3Rpb24gdG9nZ2xlTWFyayhtYXJrVHlwZSwgYXR0cnMgPSBudWxsKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSwgZGlzcGF0Y2gpIHtcbiAgICAgICAgbGV0IHsgZW1wdHksICRjdXJzb3IsIHJhbmdlcyB9ID0gc3RhdGUuc2VsZWN0aW9uO1xuICAgICAgICBpZiAoKGVtcHR5ICYmICEkY3Vyc29yKSB8fCAhbWFya0FwcGxpZXMoc3RhdGUuZG9jLCByYW5nZXMsIG1hcmtUeXBlKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGRpc3BhdGNoKSB7XG4gICAgICAgICAgICBpZiAoJGN1cnNvcikge1xuICAgICAgICAgICAgICAgIGlmIChtYXJrVHlwZS5pc0luU2V0KHN0YXRlLnN0b3JlZE1hcmtzIHx8ICRjdXJzb3IubWFya3MoKSkpXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHN0YXRlLnRyLnJlbW92ZVN0b3JlZE1hcmsobWFya1R5cGUpKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHN0YXRlLnRyLmFkZFN0b3JlZE1hcmsobWFya1R5cGUuY3JlYXRlKGF0dHJzKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGhhcyA9IGZhbHNlLCB0ciA9IHN0YXRlLnRyO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyAhaGFzICYmIGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHsgJGZyb20sICR0byB9ID0gcmFuZ2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICBoYXMgPSBzdGF0ZS5kb2MucmFuZ2VIYXNNYXJrKCRmcm9tLnBvcywgJHRvLnBvcywgbWFya1R5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgeyAkZnJvbSwgJHRvIH0gPSByYW5nZXNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyLnJlbW92ZU1hcmsoJGZyb20ucG9zLCAkdG8ucG9zLCBtYXJrVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnJvbSA9ICRmcm9tLnBvcywgdG8gPSAkdG8ucG9zLCBzdGFydCA9ICRmcm9tLm5vZGVBZnRlciwgZW5kID0gJHRvLm5vZGVCZWZvcmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3BhY2VTdGFydCA9IHN0YXJ0ICYmIHN0YXJ0LmlzVGV4dCA/IC9eXFxzKi8uZXhlYyhzdGFydC50ZXh0KVswXS5sZW5ndGggOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNwYWNlRW5kID0gZW5kICYmIGVuZC5pc1RleHQgPyAvXFxzKiQvLmV4ZWMoZW5kLnRleHQpWzBdLmxlbmd0aCA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJvbSArIHNwYWNlU3RhcnQgPCB0bykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKz0gc3BhY2VTdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byAtPSBzcGFjZUVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFkZE1hcmsoZnJvbSwgdG8sIG1hcmtUeXBlLmNyZWF0ZShhdHRycykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHRyLnNjcm9sbEludG9WaWV3KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG59XG5mdW5jdGlvbiB3cmFwRGlzcGF0Y2hGb3JKb2luKGRpc3BhdGNoLCBpc0pvaW5hYmxlKSB7XG4gICAgcmV0dXJuICh0cikgPT4ge1xuICAgICAgICBpZiAoIXRyLmlzR2VuZXJpYylcbiAgICAgICAgICAgIHJldHVybiBkaXNwYXRjaCh0cik7XG4gICAgICAgIGxldCByYW5nZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ci5tYXBwaW5nLm1hcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBtYXAgPSB0ci5tYXBwaW5nLm1hcHNbaV07XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJhbmdlcy5sZW5ndGg7IGorKylcbiAgICAgICAgICAgICAgICByYW5nZXNbal0gPSBtYXAubWFwKHJhbmdlc1tqXSk7XG4gICAgICAgICAgICBtYXAuZm9yRWFjaCgoX3MsIF9lLCBmcm9tLCB0bykgPT4gcmFuZ2VzLnB1c2goZnJvbSwgdG8pKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIGpvaW5hYmxlIHBvaW50cyBleGlzdCBpbnNpZGUgdGhvc2UgcmFuZ2VzLFxuICAgICAgICAvLyBieSBjaGVja2luZyBhbGwgbm9kZSBib3VuZGFyaWVzIGluIHRoZWlyIHBhcmVudCBub2Rlcy5cbiAgICAgICAgbGV0IGpvaW5hYmxlID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBsZXQgZnJvbSA9IHJhbmdlc1tpXSwgdG8gPSByYW5nZXNbaSArIDFdO1xuICAgICAgICAgICAgbGV0ICRmcm9tID0gdHIuZG9jLnJlc29sdmUoZnJvbSksIGRlcHRoID0gJGZyb20uc2hhcmVkRGVwdGgodG8pLCBwYXJlbnQgPSAkZnJvbS5ub2RlKGRlcHRoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gJGZyb20uaW5kZXhBZnRlcihkZXB0aCksIHBvcyA9ICRmcm9tLmFmdGVyKGRlcHRoICsgMSk7IHBvcyA8PSB0bzsgKytpbmRleCkge1xuICAgICAgICAgICAgICAgIGxldCBhZnRlciA9IHBhcmVudC5tYXliZUNoaWxkKGluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoIWFmdGVyKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggJiYgam9pbmFibGUuaW5kZXhPZihwb3MpID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBiZWZvcmUgPSBwYXJlbnQuY2hpbGQoaW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJlZm9yZS50eXBlID09IGFmdGVyLnR5cGUgJiYgaXNKb2luYWJsZShiZWZvcmUsIGFmdGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvaW5hYmxlLnB1c2gocG9zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcG9zICs9IGFmdGVyLm5vZGVTaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEpvaW4gdGhlIGpvaW5hYmxlIHBvaW50c1xuICAgICAgICBqb2luYWJsZS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICAgIGZvciAobGV0IGkgPSBqb2luYWJsZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKGNhbkpvaW4odHIuZG9jLCBqb2luYWJsZVtpXSkpXG4gICAgICAgICAgICAgICAgdHIuam9pbihqb2luYWJsZVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcGF0Y2godHIpO1xuICAgIH07XG59XG4vKipcbldyYXAgYSBjb21tYW5kIHNvIHRoYXQsIHdoZW4gaXQgcHJvZHVjZXMgYSB0cmFuc2Zvcm0gdGhhdCBjYXVzZXNcbnR3byBqb2luYWJsZSBub2RlcyB0byBlbmQgdXAgbmV4dCB0byBlYWNoIG90aGVyLCB0aG9zZSBhcmUgam9pbmVkLlxuTm9kZXMgYXJlIGNvbnNpZGVyZWQgam9pbmFibGUgd2hlbiB0aGV5IGFyZSBvZiB0aGUgc2FtZSB0eXBlIGFuZFxud2hlbiB0aGUgYGlzSm9pbmFibGVgIHByZWRpY2F0ZSByZXR1cm5zIHRydWUgZm9yIHRoZW0gb3IsIGlmIGFuXG5hcnJheSBvZiBzdHJpbmdzIHdhcyBwYXNzZWQsIGlmIHRoZWlyIG5vZGUgdHlwZSBuYW1lIGlzIGluIHRoYXRcbmFycmF5LlxuKi9cbmZ1bmN0aW9uIGF1dG9Kb2luKGNvbW1hbmQsIGlzSm9pbmFibGUpIHtcbiAgICBsZXQgY2FuSm9pbiA9IEFycmF5LmlzQXJyYXkoaXNKb2luYWJsZSkgPyAobm9kZSkgPT4gaXNKb2luYWJsZS5pbmRleE9mKG5vZGUudHlwZS5uYW1lKSA+IC0xXG4gICAgICAgIDogaXNKb2luYWJsZTtcbiAgICByZXR1cm4gKHN0YXRlLCBkaXNwYXRjaCwgdmlldykgPT4gY29tbWFuZChzdGF0ZSwgZGlzcGF0Y2ggJiYgd3JhcERpc3BhdGNoRm9ySm9pbihkaXNwYXRjaCwgY2FuSm9pbiksIHZpZXcpO1xufVxuLyoqXG5Db21iaW5lIGEgbnVtYmVyIG9mIGNvbW1hbmQgZnVuY3Rpb25zIGludG8gYSBzaW5nbGUgZnVuY3Rpb24gKHdoaWNoXG5jYWxscyB0aGVtIG9uZSBieSBvbmUgdW50aWwgb25lIHJldHVybnMgdHJ1ZSkuXG4qL1xuZnVuY3Rpb24gY2hhaW5Db21tYW5kcyguLi5jb21tYW5kcykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUsIGRpc3BhdGNoLCB2aWV3KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbWFuZHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBpZiAoY29tbWFuZHNbaV0oc3RhdGUsIGRpc3BhdGNoLCB2aWV3KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG59XG5sZXQgYmFja3NwYWNlID0gY2hhaW5Db21tYW5kcyhkZWxldGVTZWxlY3Rpb24sIGpvaW5CYWNrd2FyZCwgc2VsZWN0Tm9kZUJhY2t3YXJkKTtcbmxldCBkZWwgPSBjaGFpbkNvbW1hbmRzKGRlbGV0ZVNlbGVjdGlvbiwgam9pbkZvcndhcmQsIHNlbGVjdE5vZGVGb3J3YXJkKTtcbi8qKlxuQSBiYXNpYyBrZXltYXAgY29udGFpbmluZyBiaW5kaW5ncyBub3Qgc3BlY2lmaWMgdG8gYW55IHNjaGVtYS5cbkJpbmRzIHRoZSBmb2xsb3dpbmcga2V5cyAod2hlbiBtdWx0aXBsZSBjb21tYW5kcyBhcmUgbGlzdGVkLCB0aGV5XG5hcmUgY2hhaW5lZCB3aXRoIFtgY2hhaW5Db21tYW5kc2BdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNjb21tYW5kcy5jaGFpbkNvbW1hbmRzKSk6XG5cbiogKipFbnRlcioqIHRvIGBuZXdsaW5lSW5Db2RlYCwgYGNyZWF0ZVBhcmFncmFwaE5lYXJgLCBgbGlmdEVtcHR5QmxvY2tgLCBgc3BsaXRCbG9ja2BcbiogKipNb2QtRW50ZXIqKiB0byBgZXhpdENvZGVgXG4qICoqQmFja3NwYWNlKiogYW5kICoqTW9kLUJhY2tzcGFjZSoqIHRvIGBkZWxldGVTZWxlY3Rpb25gLCBgam9pbkJhY2t3YXJkYCwgYHNlbGVjdE5vZGVCYWNrd2FyZGBcbiogKipEZWxldGUqKiBhbmQgKipNb2QtRGVsZXRlKiogdG8gYGRlbGV0ZVNlbGVjdGlvbmAsIGBqb2luRm9yd2FyZGAsIGBzZWxlY3ROb2RlRm9yd2FyZGBcbiogKipNb2QtRGVsZXRlKiogdG8gYGRlbGV0ZVNlbGVjdGlvbmAsIGBqb2luRm9yd2FyZGAsIGBzZWxlY3ROb2RlRm9yd2FyZGBcbiogKipNb2QtYSoqIHRvIGBzZWxlY3RBbGxgXG4qL1xuY29uc3QgcGNCYXNlS2V5bWFwID0ge1xuICAgIFwiRW50ZXJcIjogY2hhaW5Db21tYW5kcyhuZXdsaW5lSW5Db2RlLCBjcmVhdGVQYXJhZ3JhcGhOZWFyLCBsaWZ0RW1wdHlCbG9jaywgc3BsaXRCbG9jayksXG4gICAgXCJNb2QtRW50ZXJcIjogZXhpdENvZGUsXG4gICAgXCJCYWNrc3BhY2VcIjogYmFja3NwYWNlLFxuICAgIFwiTW9kLUJhY2tzcGFjZVwiOiBiYWNrc3BhY2UsXG4gICAgXCJTaGlmdC1CYWNrc3BhY2VcIjogYmFja3NwYWNlLFxuICAgIFwiRGVsZXRlXCI6IGRlbCxcbiAgICBcIk1vZC1EZWxldGVcIjogZGVsLFxuICAgIFwiTW9kLWFcIjogc2VsZWN0QWxsXG59O1xuLyoqXG5BIGNvcHkgb2YgYHBjQmFzZUtleW1hcGAgdGhhdCBhbHNvIGJpbmRzICoqQ3RybC1oKiogbGlrZSBCYWNrc3BhY2UsXG4qKkN0cmwtZCoqIGxpa2UgRGVsZXRlLCAqKkFsdC1CYWNrc3BhY2UqKiBsaWtlIEN0cmwtQmFja3NwYWNlLCBhbmRcbioqQ3RybC1BbHQtQmFja3NwYWNlKiosICoqQWx0LURlbGV0ZSoqLCBhbmQgKipBbHQtZCoqIGxpa2VcbkN0cmwtRGVsZXRlLlxuKi9cbmNvbnN0IG1hY0Jhc2VLZXltYXAgPSB7XG4gICAgXCJDdHJsLWhcIjogcGNCYXNlS2V5bWFwW1wiQmFja3NwYWNlXCJdLFxuICAgIFwiQWx0LUJhY2tzcGFjZVwiOiBwY0Jhc2VLZXltYXBbXCJNb2QtQmFja3NwYWNlXCJdLFxuICAgIFwiQ3RybC1kXCI6IHBjQmFzZUtleW1hcFtcIkRlbGV0ZVwiXSxcbiAgICBcIkN0cmwtQWx0LUJhY2tzcGFjZVwiOiBwY0Jhc2VLZXltYXBbXCJNb2QtRGVsZXRlXCJdLFxuICAgIFwiQWx0LURlbGV0ZVwiOiBwY0Jhc2VLZXltYXBbXCJNb2QtRGVsZXRlXCJdLFxuICAgIFwiQWx0LWRcIjogcGNCYXNlS2V5bWFwW1wiTW9kLURlbGV0ZVwiXSxcbiAgICBcIkN0cmwtYVwiOiBzZWxlY3RUZXh0YmxvY2tTdGFydCxcbiAgICBcIkN0cmwtZVwiOiBzZWxlY3RUZXh0YmxvY2tFbmRcbn07XG5mb3IgKGxldCBrZXkgaW4gcGNCYXNlS2V5bWFwKVxuICAgIG1hY0Jhc2VLZXltYXBba2V5XSA9IHBjQmFzZUtleW1hcFtrZXldO1xuY29uc3QgbWFjID0gdHlwZW9mIG5hdmlnYXRvciAhPSBcInVuZGVmaW5lZFwiID8gL01hY3xpUChob25lfFtvYV1kKS8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIDogdHlwZW9mIG9zICE9IFwidW5kZWZpbmVkXCIgJiYgb3MucGxhdGZvcm0gPyBvcy5wbGF0Zm9ybSgpID09IFwiZGFyd2luXCIgOiBmYWxzZTtcbi8qKlxuRGVwZW5kaW5nIG9uIHRoZSBkZXRlY3RlZCBwbGF0Zm9ybSwgdGhpcyB3aWxsIGhvbGRcbltgcGNCYXNla2V5bWFwYF0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI2NvbW1hbmRzLnBjQmFzZUtleW1hcCkgb3JcbltgbWFjQmFzZUtleW1hcGBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNjb21tYW5kcy5tYWNCYXNlS2V5bWFwKS5cbiovXG5jb25zdCBiYXNlS2V5bWFwID0gbWFjID8gbWFjQmFzZUtleW1hcCA6IHBjQmFzZUtleW1hcDtcblxuZXhwb3J0IHsgYXV0b0pvaW4sIGJhc2VLZXltYXAsIGNoYWluQ29tbWFuZHMsIGNyZWF0ZVBhcmFncmFwaE5lYXIsIGRlbGV0ZVNlbGVjdGlvbiwgZXhpdENvZGUsIGpvaW5CYWNrd2FyZCwgam9pbkRvd24sIGpvaW5Gb3J3YXJkLCBqb2luVGV4dGJsb2NrQmFja3dhcmQsIGpvaW5UZXh0YmxvY2tGb3J3YXJkLCBqb2luVXAsIGxpZnQsIGxpZnRFbXB0eUJsb2NrLCBtYWNCYXNlS2V5bWFwLCBuZXdsaW5lSW5Db2RlLCBwY0Jhc2VLZXltYXAsIHNlbGVjdEFsbCwgc2VsZWN0Tm9kZUJhY2t3YXJkLCBzZWxlY3ROb2RlRm9yd2FyZCwgc2VsZWN0UGFyZW50Tm9kZSwgc2VsZWN0VGV4dGJsb2NrRW5kLCBzZWxlY3RUZXh0YmxvY2tTdGFydCwgc2V0QmxvY2tUeXBlLCBzcGxpdEJsb2NrLCBzcGxpdEJsb2NrQXMsIHNwbGl0QmxvY2tLZWVwTWFya3MsIHRvZ2dsZU1hcmssIHdyYXBJbiB9O1xuIiwiaW1wb3J0IHsgZmluZFdyYXBwaW5nLCBSZXBsYWNlQXJvdW5kU3RlcCwgY2FuU3BsaXQsIGxpZnRUYXJnZXQsIGNhbkpvaW4gfSBmcm9tICdwcm9zZW1pcnJvci10cmFuc2Zvcm0nO1xuaW1wb3J0IHsgTm9kZVJhbmdlLCBGcmFnbWVudCwgU2xpY2UgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5pbXBvcnQgeyBTZWxlY3Rpb24gfSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XG5cbmNvbnN0IG9sRE9NID0gW1wib2xcIiwgMF0sIHVsRE9NID0gW1widWxcIiwgMF0sIGxpRE9NID0gW1wibGlcIiwgMF07XG4vKipcbkFuIG9yZGVyZWQgbGlzdCBbbm9kZSBzcGVjXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jbW9kZWwuTm9kZVNwZWMpLiBIYXMgYSBzaW5nbGVcbmF0dHJpYnV0ZSwgYG9yZGVyYCwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIGF0IHdoaWNoIHRoZSBsaXN0XG5zdGFydHMgY291bnRpbmcsIGFuZCBkZWZhdWx0cyB0byAxLiBSZXByZXNlbnRlZCBhcyBhbiBgPG9sPmBcbmVsZW1lbnQuXG4qL1xuY29uc3Qgb3JkZXJlZExpc3QgPSB7XG4gICAgYXR0cnM6IHsgb3JkZXI6IHsgZGVmYXVsdDogMSB9IH0sXG4gICAgcGFyc2VET006IFt7IHRhZzogXCJvbFwiLCBnZXRBdHRycyhkb20pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBvcmRlcjogZG9tLmhhc0F0dHJpYnV0ZShcInN0YXJ0XCIpID8gK2RvbS5nZXRBdHRyaWJ1dGUoXCJzdGFydFwiKSA6IDEgfTtcbiAgICAgICAgICAgIH0gfV0sXG4gICAgdG9ET00obm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5hdHRycy5vcmRlciA9PSAxID8gb2xET00gOiBbXCJvbFwiLCB7IHN0YXJ0OiBub2RlLmF0dHJzLm9yZGVyIH0sIDBdO1xuICAgIH1cbn07XG4vKipcbkEgYnVsbGV0IGxpc3Qgbm9kZSBzcGVjLCByZXByZXNlbnRlZCBpbiB0aGUgRE9NIGFzIGA8dWw+YC5cbiovXG5jb25zdCBidWxsZXRMaXN0ID0ge1xuICAgIHBhcnNlRE9NOiBbeyB0YWc6IFwidWxcIiB9XSxcbiAgICB0b0RPTSgpIHsgcmV0dXJuIHVsRE9NOyB9XG59O1xuLyoqXG5BIGxpc3QgaXRlbSAoYDxsaT5gKSBzcGVjLlxuKi9cbmNvbnN0IGxpc3RJdGVtID0ge1xuICAgIHBhcnNlRE9NOiBbeyB0YWc6IFwibGlcIiB9XSxcbiAgICB0b0RPTSgpIHsgcmV0dXJuIGxpRE9NOyB9LFxuICAgIGRlZmluaW5nOiB0cnVlXG59O1xuZnVuY3Rpb24gYWRkKG9iaiwgcHJvcHMpIHtcbiAgICBsZXQgY29weSA9IHt9O1xuICAgIGZvciAobGV0IHByb3AgaW4gb2JqKVxuICAgICAgICBjb3B5W3Byb3BdID0gb2JqW3Byb3BdO1xuICAgIGZvciAobGV0IHByb3AgaW4gcHJvcHMpXG4gICAgICAgIGNvcHlbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICByZXR1cm4gY29weTtcbn1cbi8qKlxuQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGFkZGluZyBsaXN0LXJlbGF0ZWQgbm9kZSB0eXBlcyB0byBhIG1hcFxuc3BlY2lmeWluZyB0aGUgbm9kZXMgZm9yIGEgc2NoZW1hLiBBZGRzXG5bYG9yZGVyZWRMaXN0YF0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI3NjaGVtYS1saXN0Lm9yZGVyZWRMaXN0KSBhcyBgXCJvcmRlcmVkX2xpc3RcImAsXG5bYGJ1bGxldExpc3RgXShodHRwczovL3Byb3NlbWlycm9yLm5ldC9kb2NzL3JlZi8jc2NoZW1hLWxpc3QuYnVsbGV0TGlzdCkgYXMgYFwiYnVsbGV0X2xpc3RcImAsIGFuZFxuW2BsaXN0SXRlbWBdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNzY2hlbWEtbGlzdC5saXN0SXRlbSkgYXMgYFwibGlzdF9pdGVtXCJgLlxuXG5gaXRlbUNvbnRlbnRgIGRldGVybWluZXMgdGhlIGNvbnRlbnQgZXhwcmVzc2lvbiBmb3IgdGhlIGxpc3QgaXRlbXMuXG5JZiB5b3Ugd2FudCB0aGUgY29tbWFuZHMgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZSB0byBhcHBseSB0byB5b3VyXG5saXN0IHN0cnVjdHVyZSwgaXQgc2hvdWxkIGhhdmUgYSBzaGFwZSBsaWtlIGBcInBhcmFncmFwaCBibG9jaypcImAgb3JcbmBcInBhcmFncmFwaCAob3JkZXJlZF9saXN0IHwgYnVsbGV0X2xpc3QpKlwiYC4gYGxpc3RHcm91cGAgY2FuIGJlXG5naXZlbiB0byBhc3NpZ24gYSBncm91cCBuYW1lIHRvIHRoZSBsaXN0IG5vZGUgdHlwZXMsIGZvciBleGFtcGxlXG5gXCJibG9ja1wiYC5cbiovXG5mdW5jdGlvbiBhZGRMaXN0Tm9kZXMobm9kZXMsIGl0ZW1Db250ZW50LCBsaXN0R3JvdXApIHtcbiAgICByZXR1cm4gbm9kZXMuYXBwZW5kKHtcbiAgICAgICAgb3JkZXJlZF9saXN0OiBhZGQob3JkZXJlZExpc3QsIHsgY29udGVudDogXCJsaXN0X2l0ZW0rXCIsIGdyb3VwOiBsaXN0R3JvdXAgfSksXG4gICAgICAgIGJ1bGxldF9saXN0OiBhZGQoYnVsbGV0TGlzdCwgeyBjb250ZW50OiBcImxpc3RfaXRlbStcIiwgZ3JvdXA6IGxpc3RHcm91cCB9KSxcbiAgICAgICAgbGlzdF9pdGVtOiBhZGQobGlzdEl0ZW0sIHsgY29udGVudDogaXRlbUNvbnRlbnQgfSlcbiAgICB9KTtcbn1cbi8qKlxuUmV0dXJucyBhIGNvbW1hbmQgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgc2VsZWN0aW9uIGluIGEgbGlzdCB3aXRoXG50aGUgZ2l2ZW4gdHlwZSBhbiBhdHRyaWJ1dGVzLiBJZiBgZGlzcGF0Y2hgIGlzIG51bGwsIG9ubHkgcmV0dXJuIGFcbnZhbHVlIHRvIGluZGljYXRlIHdoZXRoZXIgdGhpcyBpcyBwb3NzaWJsZSwgYnV0IGRvbid0IGFjdHVhbGx5XG5wZXJmb3JtIHRoZSBjaGFuZ2UuXG4qL1xuZnVuY3Rpb24gd3JhcEluTGlzdChsaXN0VHlwZSwgYXR0cnMgPSBudWxsKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSwgZGlzcGF0Y2gpIHtcbiAgICAgICAgbGV0IHsgJGZyb20sICR0byB9ID0gc3RhdGUuc2VsZWN0aW9uO1xuICAgICAgICBsZXQgcmFuZ2UgPSAkZnJvbS5ibG9ja1JhbmdlKCR0byksIGRvSm9pbiA9IGZhbHNlLCBvdXRlclJhbmdlID0gcmFuZ2U7XG4gICAgICAgIGlmICghcmFuZ2UpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIFRoaXMgaXMgYXQgdGhlIHRvcCBvZiBhbiBleGlzdGluZyBsaXN0IGl0ZW1cbiAgICAgICAgaWYgKHJhbmdlLmRlcHRoID49IDIgJiYgJGZyb20ubm9kZShyYW5nZS5kZXB0aCAtIDEpLnR5cGUuY29tcGF0aWJsZUNvbnRlbnQobGlzdFR5cGUpICYmIHJhbmdlLnN0YXJ0SW5kZXggPT0gMCkge1xuICAgICAgICAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhpcyBpcyB0aGUgdG9wIG9mIHRoZSBsaXN0XG4gICAgICAgICAgICBpZiAoJGZyb20uaW5kZXgocmFuZ2UuZGVwdGggLSAxKSA9PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGxldCAkaW5zZXJ0ID0gc3RhdGUuZG9jLnJlc29sdmUocmFuZ2Uuc3RhcnQgLSAyKTtcbiAgICAgICAgICAgIG91dGVyUmFuZ2UgPSBuZXcgTm9kZVJhbmdlKCRpbnNlcnQsICRpbnNlcnQsIHJhbmdlLmRlcHRoKTtcbiAgICAgICAgICAgIGlmIChyYW5nZS5lbmRJbmRleCA8IHJhbmdlLnBhcmVudC5jaGlsZENvdW50KVxuICAgICAgICAgICAgICAgIHJhbmdlID0gbmV3IE5vZGVSYW5nZSgkZnJvbSwgc3RhdGUuZG9jLnJlc29sdmUoJHRvLmVuZChyYW5nZS5kZXB0aCkpLCByYW5nZS5kZXB0aCk7XG4gICAgICAgICAgICBkb0pvaW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCB3cmFwID0gZmluZFdyYXBwaW5nKG91dGVyUmFuZ2UsIGxpc3RUeXBlLCBhdHRycywgcmFuZ2UpO1xuICAgICAgICBpZiAoIXdyYXApXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkaXNwYXRjaClcbiAgICAgICAgICAgIGRpc3BhdGNoKGRvV3JhcEluTGlzdChzdGF0ZS50ciwgcmFuZ2UsIHdyYXAsIGRvSm9pbiwgbGlzdFR5cGUpLnNjcm9sbEludG9WaWV3KCkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xufVxuZnVuY3Rpb24gZG9XcmFwSW5MaXN0KHRyLCByYW5nZSwgd3JhcHBlcnMsIGpvaW5CZWZvcmUsIGxpc3RUeXBlKSB7XG4gICAgbGV0IGNvbnRlbnQgPSBGcmFnbWVudC5lbXB0eTtcbiAgICBmb3IgKGxldCBpID0gd3JhcHBlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIGNvbnRlbnQgPSBGcmFnbWVudC5mcm9tKHdyYXBwZXJzW2ldLnR5cGUuY3JlYXRlKHdyYXBwZXJzW2ldLmF0dHJzLCBjb250ZW50KSk7XG4gICAgdHIuc3RlcChuZXcgUmVwbGFjZUFyb3VuZFN0ZXAocmFuZ2Uuc3RhcnQgLSAoam9pbkJlZm9yZSA/IDIgOiAwKSwgcmFuZ2UuZW5kLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kLCBuZXcgU2xpY2UoY29udGVudCwgMCwgMCksIHdyYXBwZXJzLmxlbmd0aCwgdHJ1ZSkpO1xuICAgIGxldCBmb3VuZCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3cmFwcGVycy5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKHdyYXBwZXJzW2ldLnR5cGUgPT0gbGlzdFR5cGUpXG4gICAgICAgICAgICBmb3VuZCA9IGkgKyAxO1xuICAgIGxldCBzcGxpdERlcHRoID0gd3JhcHBlcnMubGVuZ3RoIC0gZm91bmQ7XG4gICAgbGV0IHNwbGl0UG9zID0gcmFuZ2Uuc3RhcnQgKyB3cmFwcGVycy5sZW5ndGggLSAoam9pbkJlZm9yZSA/IDIgOiAwKSwgcGFyZW50ID0gcmFuZ2UucGFyZW50O1xuICAgIGZvciAobGV0IGkgPSByYW5nZS5zdGFydEluZGV4LCBlID0gcmFuZ2UuZW5kSW5kZXgsIGZpcnN0ID0gdHJ1ZTsgaSA8IGU7IGkrKywgZmlyc3QgPSBmYWxzZSkge1xuICAgICAgICBpZiAoIWZpcnN0ICYmIGNhblNwbGl0KHRyLmRvYywgc3BsaXRQb3MsIHNwbGl0RGVwdGgpKSB7XG4gICAgICAgICAgICB0ci5zcGxpdChzcGxpdFBvcywgc3BsaXREZXB0aCk7XG4gICAgICAgICAgICBzcGxpdFBvcyArPSAyICogc3BsaXREZXB0aDtcbiAgICAgICAgfVxuICAgICAgICBzcGxpdFBvcyArPSBwYXJlbnQuY2hpbGQoaSkubm9kZVNpemU7XG4gICAgfVxuICAgIHJldHVybiB0cjtcbn1cbi8qKlxuQnVpbGQgYSBjb21tYW5kIHRoYXQgc3BsaXRzIGEgbm9uLWVtcHR5IHRleHRibG9jayBhdCB0aGUgdG9wIGxldmVsXG5vZiBhIGxpc3QgaXRlbSBieSBhbHNvIHNwbGl0dGluZyB0aGF0IGxpc3QgaXRlbS5cbiovXG5mdW5jdGlvbiBzcGxpdExpc3RJdGVtKGl0ZW1UeXBlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSwgZGlzcGF0Y2gpIHtcbiAgICAgICAgbGV0IHsgJGZyb20sICR0bywgbm9kZSB9ID0gc3RhdGUuc2VsZWN0aW9uO1xuICAgICAgICBpZiAoKG5vZGUgJiYgbm9kZS5pc0Jsb2NrKSB8fCAkZnJvbS5kZXB0aCA8IDIgfHwgISRmcm9tLnNhbWVQYXJlbnQoJHRvKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgbGV0IGdyYW5kUGFyZW50ID0gJGZyb20ubm9kZSgtMSk7XG4gICAgICAgIGlmIChncmFuZFBhcmVudC50eXBlICE9IGl0ZW1UeXBlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoJGZyb20ucGFyZW50LmNvbnRlbnQuc2l6ZSA9PSAwICYmICRmcm9tLm5vZGUoLTEpLmNoaWxkQ291bnQgPT0gJGZyb20uaW5kZXhBZnRlcigtMSkpIHtcbiAgICAgICAgICAgIC8vIEluIGFuIGVtcHR5IGJsb2NrLiBJZiB0aGlzIGlzIGEgbmVzdGVkIGxpc3QsIHRoZSB3cmFwcGluZ1xuICAgICAgICAgICAgLy8gbGlzdCBpdGVtIHNob3VsZCBiZSBzcGxpdC4gT3RoZXJ3aXNlLCBiYWlsIG91dCBhbmQgbGV0IG5leHRcbiAgICAgICAgICAgIC8vIGNvbW1hbmQgaGFuZGxlIGxpZnRpbmcuXG4gICAgICAgICAgICBpZiAoJGZyb20uZGVwdGggPT0gMyB8fCAkZnJvbS5ub2RlKC0zKS50eXBlICE9IGl0ZW1UeXBlIHx8XG4gICAgICAgICAgICAgICAgJGZyb20uaW5kZXgoLTIpICE9ICRmcm9tLm5vZGUoLTIpLmNoaWxkQ291bnQgLSAxKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgICAgICAgICAgIGxldCB3cmFwID0gRnJhZ21lbnQuZW1wdHk7XG4gICAgICAgICAgICAgICAgbGV0IGRlcHRoQmVmb3JlID0gJGZyb20uaW5kZXgoLTEpID8gMSA6ICRmcm9tLmluZGV4KC0yKSA/IDIgOiAzO1xuICAgICAgICAgICAgICAgIC8vIEJ1aWxkIGEgZnJhZ21lbnQgY29udGFpbmluZyBlbXB0eSB2ZXJzaW9ucyBvZiB0aGUgc3RydWN0dXJlXG4gICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgb3V0ZXIgbGlzdCBpdGVtIHRvIHRoZSBwYXJlbnQgbm9kZSBvZiB0aGUgY3Vyc29yXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZCA9ICRmcm9tLmRlcHRoIC0gZGVwdGhCZWZvcmU7IGQgPj0gJGZyb20uZGVwdGggLSAzOyBkLS0pXG4gICAgICAgICAgICAgICAgICAgIHdyYXAgPSBGcmFnbWVudC5mcm9tKCRmcm9tLm5vZGUoZCkuY29weSh3cmFwKSk7XG4gICAgICAgICAgICAgICAgbGV0IGRlcHRoQWZ0ZXIgPSAkZnJvbS5pbmRleEFmdGVyKC0xKSA8ICRmcm9tLm5vZGUoLTIpLmNoaWxkQ291bnQgPyAxXG4gICAgICAgICAgICAgICAgICAgIDogJGZyb20uaW5kZXhBZnRlcigtMikgPCAkZnJvbS5ub2RlKC0zKS5jaGlsZENvdW50ID8gMiA6IDM7XG4gICAgICAgICAgICAgICAgLy8gQWRkIGEgc2Vjb25kIGxpc3QgaXRlbSB3aXRoIGFuIGVtcHR5IGRlZmF1bHQgc3RhcnQgbm9kZVxuICAgICAgICAgICAgICAgIHdyYXAgPSB3cmFwLmFwcGVuZChGcmFnbWVudC5mcm9tKGl0ZW1UeXBlLmNyZWF0ZUFuZEZpbGwoKSkpO1xuICAgICAgICAgICAgICAgIGxldCBzdGFydCA9ICRmcm9tLmJlZm9yZSgkZnJvbS5kZXB0aCAtIChkZXB0aEJlZm9yZSAtIDEpKTtcbiAgICAgICAgICAgICAgICBsZXQgdHIgPSBzdGF0ZS50ci5yZXBsYWNlKHN0YXJ0LCAkZnJvbS5hZnRlcigtZGVwdGhBZnRlciksIG5ldyBTbGljZSh3cmFwLCA0IC0gZGVwdGhCZWZvcmUsIDApKTtcbiAgICAgICAgICAgICAgICBsZXQgc2VsID0gLTE7XG4gICAgICAgICAgICAgICAgdHIuZG9jLm5vZGVzQmV0d2VlbihzdGFydCwgdHIuZG9jLmNvbnRlbnQuc2l6ZSwgKG5vZGUsIHBvcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsID4gLTEpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmlzVGV4dGJsb2NrICYmIG5vZGUuY29udGVudC5zaXplID09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWwgPSBwb3MgKyAxO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChzZWwgPiAtMSlcbiAgICAgICAgICAgICAgICAgICAgdHIuc2V0U2VsZWN0aW9uKFNlbGVjdGlvbi5uZWFyKHRyLmRvYy5yZXNvbHZlKHNlbCkpKTtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh0ci5zY3JvbGxJbnRvVmlldygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuZXh0VHlwZSA9ICR0by5wb3MgPT0gJGZyb20uZW5kKCkgPyBncmFuZFBhcmVudC5jb250ZW50TWF0Y2hBdCgwKS5kZWZhdWx0VHlwZSA6IG51bGw7XG4gICAgICAgIGxldCB0ciA9IHN0YXRlLnRyLmRlbGV0ZSgkZnJvbS5wb3MsICR0by5wb3MpO1xuICAgICAgICBsZXQgdHlwZXMgPSBuZXh0VHlwZSA/IFtudWxsLCB7IHR5cGU6IG5leHRUeXBlIH1dIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAoIWNhblNwbGl0KHRyLmRvYywgJGZyb20ucG9zLCAyLCB0eXBlcykpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkaXNwYXRjaClcbiAgICAgICAgICAgIGRpc3BhdGNoKHRyLnNwbGl0KCRmcm9tLnBvcywgMiwgdHlwZXMpLnNjcm9sbEludG9WaWV3KCkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xufVxuLyoqXG5DcmVhdGUgYSBjb21tYW5kIHRvIGxpZnQgdGhlIGxpc3QgaXRlbSBhcm91bmQgdGhlIHNlbGVjdGlvbiB1cCBpbnRvXG5hIHdyYXBwaW5nIGxpc3QuXG4qL1xuZnVuY3Rpb24gbGlmdExpc3RJdGVtKGl0ZW1UeXBlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSwgZGlzcGF0Y2gpIHtcbiAgICAgICAgbGV0IHsgJGZyb20sICR0byB9ID0gc3RhdGUuc2VsZWN0aW9uO1xuICAgICAgICBsZXQgcmFuZ2UgPSAkZnJvbS5ibG9ja1JhbmdlKCR0bywgbm9kZSA9PiBub2RlLmNoaWxkQ291bnQgPiAwICYmIG5vZGUuZmlyc3RDaGlsZC50eXBlID09IGl0ZW1UeXBlKTtcbiAgICAgICAgaWYgKCFyYW5nZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCFkaXNwYXRjaClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoJGZyb20ubm9kZShyYW5nZS5kZXB0aCAtIDEpLnR5cGUgPT0gaXRlbVR5cGUpIC8vIEluc2lkZSBhIHBhcmVudCBsaXN0XG4gICAgICAgICAgICByZXR1cm4gbGlmdFRvT3V0ZXJMaXN0KHN0YXRlLCBkaXNwYXRjaCwgaXRlbVR5cGUsIHJhbmdlKTtcbiAgICAgICAgZWxzZSAvLyBPdXRlciBsaXN0IG5vZGVcbiAgICAgICAgICAgIHJldHVybiBsaWZ0T3V0T2ZMaXN0KHN0YXRlLCBkaXNwYXRjaCwgcmFuZ2UpO1xuICAgIH07XG59XG5mdW5jdGlvbiBsaWZ0VG9PdXRlckxpc3Qoc3RhdGUsIGRpc3BhdGNoLCBpdGVtVHlwZSwgcmFuZ2UpIHtcbiAgICBsZXQgdHIgPSBzdGF0ZS50ciwgZW5kID0gcmFuZ2UuZW5kLCBlbmRPZkxpc3QgPSByYW5nZS4kdG8uZW5kKHJhbmdlLmRlcHRoKTtcbiAgICBpZiAoZW5kIDwgZW5kT2ZMaXN0KSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSBzaWJsaW5ncyBhZnRlciB0aGUgbGlmdGVkIGl0ZW1zLCB3aGljaCBtdXN0IGJlY29tZVxuICAgICAgICAvLyBjaGlsZHJlbiBvZiB0aGUgbGFzdCBpdGVtXG4gICAgICAgIHRyLnN0ZXAobmV3IFJlcGxhY2VBcm91bmRTdGVwKGVuZCAtIDEsIGVuZE9mTGlzdCwgZW5kLCBlbmRPZkxpc3QsIG5ldyBTbGljZShGcmFnbWVudC5mcm9tKGl0ZW1UeXBlLmNyZWF0ZShudWxsLCByYW5nZS5wYXJlbnQuY29weSgpKSksIDEsIDApLCAxLCB0cnVlKSk7XG4gICAgICAgIHJhbmdlID0gbmV3IE5vZGVSYW5nZSh0ci5kb2MucmVzb2x2ZShyYW5nZS4kZnJvbS5wb3MpLCB0ci5kb2MucmVzb2x2ZShlbmRPZkxpc3QpLCByYW5nZS5kZXB0aCk7XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldCA9IGxpZnRUYXJnZXQocmFuZ2UpO1xuICAgIGlmICh0YXJnZXQgPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHRyLmxpZnQocmFuZ2UsIHRhcmdldCk7XG4gICAgbGV0IGFmdGVyID0gdHIubWFwcGluZy5tYXAoZW5kLCAtMSkgLSAxO1xuICAgIGlmIChjYW5Kb2luKHRyLmRvYywgYWZ0ZXIpKVxuICAgICAgICB0ci5qb2luKGFmdGVyKTtcbiAgICBkaXNwYXRjaCh0ci5zY3JvbGxJbnRvVmlldygpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGxpZnRPdXRPZkxpc3Qoc3RhdGUsIGRpc3BhdGNoLCByYW5nZSkge1xuICAgIGxldCB0ciA9IHN0YXRlLnRyLCBsaXN0ID0gcmFuZ2UucGFyZW50O1xuICAgIC8vIE1lcmdlIHRoZSBsaXN0IGl0ZW1zIGludG8gYSBzaW5nbGUgYmlnIGl0ZW1cbiAgICBmb3IgKGxldCBwb3MgPSByYW5nZS5lbmQsIGkgPSByYW5nZS5lbmRJbmRleCAtIDEsIGUgPSByYW5nZS5zdGFydEluZGV4OyBpID4gZTsgaS0tKSB7XG4gICAgICAgIHBvcyAtPSBsaXN0LmNoaWxkKGkpLm5vZGVTaXplO1xuICAgICAgICB0ci5kZWxldGUocG9zIC0gMSwgcG9zICsgMSk7XG4gICAgfVxuICAgIGxldCAkc3RhcnQgPSB0ci5kb2MucmVzb2x2ZShyYW5nZS5zdGFydCksIGl0ZW0gPSAkc3RhcnQubm9kZUFmdGVyO1xuICAgIGlmICh0ci5tYXBwaW5nLm1hcChyYW5nZS5lbmQpICE9IHJhbmdlLnN0YXJ0ICsgJHN0YXJ0Lm5vZGVBZnRlci5ub2RlU2l6ZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGxldCBhdFN0YXJ0ID0gcmFuZ2Uuc3RhcnRJbmRleCA9PSAwLCBhdEVuZCA9IHJhbmdlLmVuZEluZGV4ID09IGxpc3QuY2hpbGRDb3VudDtcbiAgICBsZXQgcGFyZW50ID0gJHN0YXJ0Lm5vZGUoLTEpLCBpbmRleEJlZm9yZSA9ICRzdGFydC5pbmRleCgtMSk7XG4gICAgaWYgKCFwYXJlbnQuY2FuUmVwbGFjZShpbmRleEJlZm9yZSArIChhdFN0YXJ0ID8gMCA6IDEpLCBpbmRleEJlZm9yZSArIDEsIGl0ZW0uY29udGVudC5hcHBlbmQoYXRFbmQgPyBGcmFnbWVudC5lbXB0eSA6IEZyYWdtZW50LmZyb20obGlzdCkpKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGxldCBzdGFydCA9ICRzdGFydC5wb3MsIGVuZCA9IHN0YXJ0ICsgaXRlbS5ub2RlU2l6ZTtcbiAgICAvLyBTdHJpcCBvZmYgdGhlIHN1cnJvdW5kaW5nIGxpc3QuIEF0IHRoZSBzaWRlcyB3aGVyZSB3ZSdyZSBub3QgYXRcbiAgICAvLyB0aGUgZW5kIG9mIHRoZSBsaXN0LCB0aGUgZXhpc3RpbmcgbGlzdCBpcyBjbG9zZWQuIEF0IHNpZGVzIHdoZXJlXG4gICAgLy8gdGhpcyBpcyB0aGUgZW5kLCBpdCBpcyBvdmVyd3JpdHRlbiB0byBpdHMgZW5kLlxuICAgIHRyLnN0ZXAobmV3IFJlcGxhY2VBcm91bmRTdGVwKHN0YXJ0IC0gKGF0U3RhcnQgPyAxIDogMCksIGVuZCArIChhdEVuZCA/IDEgOiAwKSwgc3RhcnQgKyAxLCBlbmQgLSAxLCBuZXcgU2xpY2UoKGF0U3RhcnQgPyBGcmFnbWVudC5lbXB0eSA6IEZyYWdtZW50LmZyb20obGlzdC5jb3B5KEZyYWdtZW50LmVtcHR5KSkpXG4gICAgICAgIC5hcHBlbmQoYXRFbmQgPyBGcmFnbWVudC5lbXB0eSA6IEZyYWdtZW50LmZyb20obGlzdC5jb3B5KEZyYWdtZW50LmVtcHR5KSkpLCBhdFN0YXJ0ID8gMCA6IDEsIGF0RW5kID8gMCA6IDEpLCBhdFN0YXJ0ID8gMCA6IDEpKTtcbiAgICBkaXNwYXRjaCh0ci5zY3JvbGxJbnRvVmlldygpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuQ3JlYXRlIGEgY29tbWFuZCB0byBzaW5rIHRoZSBsaXN0IGl0ZW0gYXJvdW5kIHRoZSBzZWxlY3Rpb24gZG93blxuaW50byBhbiBpbm5lciBsaXN0LlxuKi9cbmZ1bmN0aW9uIHNpbmtMaXN0SXRlbShpdGVtVHlwZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUsIGRpc3BhdGNoKSB7XG4gICAgICAgIGxldCB7ICRmcm9tLCAkdG8gfSA9IHN0YXRlLnNlbGVjdGlvbjtcbiAgICAgICAgbGV0IHJhbmdlID0gJGZyb20uYmxvY2tSYW5nZSgkdG8sIG5vZGUgPT4gbm9kZS5jaGlsZENvdW50ID4gMCAmJiBub2RlLmZpcnN0Q2hpbGQudHlwZSA9PSBpdGVtVHlwZSk7XG4gICAgICAgIGlmICghcmFuZ2UpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGxldCBzdGFydEluZGV4ID0gcmFuZ2Uuc3RhcnRJbmRleDtcbiAgICAgICAgaWYgKHN0YXJ0SW5kZXggPT0gMClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgbGV0IHBhcmVudCA9IHJhbmdlLnBhcmVudCwgbm9kZUJlZm9yZSA9IHBhcmVudC5jaGlsZChzdGFydEluZGV4IC0gMSk7XG4gICAgICAgIGlmIChub2RlQmVmb3JlLnR5cGUgIT0gaXRlbVR5cGUpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgICAgICAgbGV0IG5lc3RlZEJlZm9yZSA9IG5vZGVCZWZvcmUubGFzdENoaWxkICYmIG5vZGVCZWZvcmUubGFzdENoaWxkLnR5cGUgPT0gcGFyZW50LnR5cGU7XG4gICAgICAgICAgICBsZXQgaW5uZXIgPSBGcmFnbWVudC5mcm9tKG5lc3RlZEJlZm9yZSA/IGl0ZW1UeXBlLmNyZWF0ZSgpIDogbnVsbCk7XG4gICAgICAgICAgICBsZXQgc2xpY2UgPSBuZXcgU2xpY2UoRnJhZ21lbnQuZnJvbShpdGVtVHlwZS5jcmVhdGUobnVsbCwgRnJhZ21lbnQuZnJvbShwYXJlbnQudHlwZS5jcmVhdGUobnVsbCwgaW5uZXIpKSkpLCBuZXN0ZWRCZWZvcmUgPyAzIDogMSwgMCk7XG4gICAgICAgICAgICBsZXQgYmVmb3JlID0gcmFuZ2Uuc3RhcnQsIGFmdGVyID0gcmFuZ2UuZW5kO1xuICAgICAgICAgICAgZGlzcGF0Y2goc3RhdGUudHIuc3RlcChuZXcgUmVwbGFjZUFyb3VuZFN0ZXAoYmVmb3JlIC0gKG5lc3RlZEJlZm9yZSA/IDMgOiAxKSwgYWZ0ZXIsIGJlZm9yZSwgYWZ0ZXIsIHNsaWNlLCAxLCB0cnVlKSlcbiAgICAgICAgICAgICAgICAuc2Nyb2xsSW50b1ZpZXcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbn1cblxuZXhwb3J0IHsgYWRkTGlzdE5vZGVzLCBidWxsZXRMaXN0LCBsaWZ0TGlzdEl0ZW0sIGxpc3RJdGVtLCBvcmRlcmVkTGlzdCwgc2lua0xpc3RJdGVtLCBzcGxpdExpc3RJdGVtLCB3cmFwSW5MaXN0IH07XG4iLCJpbXBvcnQgeyBQbHVnaW4sIFBsdWdpbktleSwgVGV4dFNlbGVjdGlvbiwgU2VsZWN0aW9uLCBOb2RlU2VsZWN0aW9uLCBFZGl0b3JTdGF0ZSB9IGZyb20gJ0B0aXB0YXAvcG0vc3RhdGUnO1xuaW1wb3J0IHsgRWRpdG9yVmlldyB9IGZyb20gJ0B0aXB0YXAvcG0vdmlldyc7XG5pbXBvcnQgeyBrZXltYXAgfSBmcm9tICdAdGlwdGFwL3BtL2tleW1hcCc7XG5pbXBvcnQgeyBTY2hlbWEsIEZyYWdtZW50LCBET01QYXJzZXIsIERPTVNlcmlhbGl6ZXIsIE5vZGUgYXMgTm9kZSQxLCBTbGljZSB9IGZyb20gJ0B0aXB0YXAvcG0vbW9kZWwnO1xuaW1wb3J0IHsgbGlmdFRhcmdldCwgUmVwbGFjZVN0ZXAsIFJlcGxhY2VBcm91bmRTdGVwLCBqb2luUG9pbnQsIFRyYW5zZm9ybSwgY2FuU3BsaXQsIGNhbkpvaW4sIGZpbmRXcmFwcGluZyB9IGZyb20gJ0B0aXB0YXAvcG0vdHJhbnNmb3JtJztcbmltcG9ydCB7IGNyZWF0ZVBhcmFncmFwaE5lYXIgYXMgY3JlYXRlUGFyYWdyYXBoTmVhciQxLCBkZWxldGVTZWxlY3Rpb24gYXMgZGVsZXRlU2VsZWN0aW9uJDEsIGV4aXRDb2RlIGFzIGV4aXRDb2RlJDEsIGpvaW5VcCBhcyBqb2luVXAkMSwgam9pbkRvd24gYXMgam9pbkRvd24kMSwgam9pbkJhY2t3YXJkIGFzIGpvaW5CYWNrd2FyZCQxLCBqb2luRm9yd2FyZCBhcyBqb2luRm9yd2FyZCQxLCBsaWZ0IGFzIGxpZnQkMSwgbGlmdEVtcHR5QmxvY2sgYXMgbGlmdEVtcHR5QmxvY2skMSwgbmV3bGluZUluQ29kZSBhcyBuZXdsaW5lSW5Db2RlJDEsIHNlbGVjdE5vZGVCYWNrd2FyZCBhcyBzZWxlY3ROb2RlQmFja3dhcmQkMSwgc2VsZWN0Tm9kZUZvcndhcmQgYXMgc2VsZWN0Tm9kZUZvcndhcmQkMSwgc2VsZWN0UGFyZW50Tm9kZSBhcyBzZWxlY3RQYXJlbnROb2RlJDEsIHNlbGVjdFRleHRibG9ja0VuZCBhcyBzZWxlY3RUZXh0YmxvY2tFbmQkMSwgc2VsZWN0VGV4dGJsb2NrU3RhcnQgYXMgc2VsZWN0VGV4dGJsb2NrU3RhcnQkMSwgc2V0QmxvY2tUeXBlLCB3cmFwSW4gYXMgd3JhcEluJDEgfSBmcm9tICdAdGlwdGFwL3BtL2NvbW1hbmRzJztcbmltcG9ydCB7IGxpZnRMaXN0SXRlbSBhcyBsaWZ0TGlzdEl0ZW0kMSwgc2lua0xpc3RJdGVtIGFzIHNpbmtMaXN0SXRlbSQxLCB3cmFwSW5MaXN0IGFzIHdyYXBJbkxpc3QkMSB9IGZyb20gJ0B0aXB0YXAvcG0vc2NoZW1hLWxpc3QnO1xuXG5mdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVTdGF0ZShjb25maWcpIHtcclxuICAgIGNvbnN0IHsgc3RhdGUsIHRyYW5zYWN0aW9uIH0gPSBjb25maWc7XHJcbiAgICBsZXQgeyBzZWxlY3Rpb24gfSA9IHRyYW5zYWN0aW9uO1xyXG4gICAgbGV0IHsgZG9jIH0gPSB0cmFuc2FjdGlvbjtcclxuICAgIGxldCB7IHN0b3JlZE1hcmtzIH0gPSB0cmFuc2FjdGlvbjtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgYXBwbHk6IHN0YXRlLmFwcGx5LmJpbmQoc3RhdGUpLFxyXG4gICAgICAgIGFwcGx5VHJhbnNhY3Rpb246IHN0YXRlLmFwcGx5VHJhbnNhY3Rpb24uYmluZChzdGF0ZSksXHJcbiAgICAgICAgZmlsdGVyVHJhbnNhY3Rpb246IHN0YXRlLmZpbHRlclRyYW5zYWN0aW9uLFxyXG4gICAgICAgIHBsdWdpbnM6IHN0YXRlLnBsdWdpbnMsXHJcbiAgICAgICAgc2NoZW1hOiBzdGF0ZS5zY2hlbWEsXHJcbiAgICAgICAgcmVjb25maWd1cmU6IHN0YXRlLnJlY29uZmlndXJlLmJpbmQoc3RhdGUpLFxyXG4gICAgICAgIHRvSlNPTjogc3RhdGUudG9KU09OLmJpbmQoc3RhdGUpLFxyXG4gICAgICAgIGdldCBzdG9yZWRNYXJrcygpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0b3JlZE1hcmtzO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ2V0IHNlbGVjdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldCBkb2MoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkb2M7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXQgdHIoKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbiA9IHRyYW5zYWN0aW9uLnNlbGVjdGlvbjtcclxuICAgICAgICAgICAgZG9jID0gdHJhbnNhY3Rpb24uZG9jO1xyXG4gICAgICAgICAgICBzdG9yZWRNYXJrcyA9IHRyYW5zYWN0aW9uLnN0b3JlZE1hcmtzO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247XHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcbn1cblxuY2xhc3MgQ29tbWFuZE1hbmFnZXIge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICB0aGlzLmVkaXRvciA9IHByb3BzLmVkaXRvcjtcclxuICAgICAgICB0aGlzLnJhd0NvbW1hbmRzID0gdGhpcy5lZGl0b3IuZXh0ZW5zaW9uTWFuYWdlci5jb21tYW5kcztcclxuICAgICAgICB0aGlzLmN1c3RvbVN0YXRlID0gcHJvcHMuc3RhdGU7XHJcbiAgICB9XHJcbiAgICBnZXQgaGFzQ3VzdG9tU3RhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jdXN0b21TdGF0ZTtcclxuICAgIH1cclxuICAgIGdldCBzdGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21TdGF0ZSB8fCB0aGlzLmVkaXRvci5zdGF0ZTtcclxuICAgIH1cclxuICAgIGdldCBjb21tYW5kcygpIHtcclxuICAgICAgICBjb25zdCB7IHJhd0NvbW1hbmRzLCBlZGl0b3IsIHN0YXRlIH0gPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IHsgdmlldyB9ID0gZWRpdG9yO1xyXG4gICAgICAgIGNvbnN0IHsgdHIgfSA9IHN0YXRlO1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5idWlsZFByb3BzKHRyKTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHJhd0NvbW1hbmRzKS5tYXAoKFtuYW1lLCBjb21tYW5kXSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2QgPSAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBjb21tYW5kKC4uLmFyZ3MpKHByb3BzKTtcclxuICAgICAgICAgICAgICAgIGlmICghdHIuZ2V0TWV0YSgncHJldmVudERpc3BhdGNoJykgJiYgIXRoaXMuaGFzQ3VzdG9tU3RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2aWV3LmRpc3BhdGNoKHRyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaztcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIFtuYW1lLCBtZXRob2RdO1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuICAgIGdldCBjaGFpbigpIHtcclxuICAgICAgICByZXR1cm4gKCkgPT4gdGhpcy5jcmVhdGVDaGFpbigpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNhbigpIHtcclxuICAgICAgICByZXR1cm4gKCkgPT4gdGhpcy5jcmVhdGVDYW4oKTtcclxuICAgIH1cclxuICAgIGNyZWF0ZUNoYWluKHN0YXJ0VHIsIHNob3VsZERpc3BhdGNoID0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IHsgcmF3Q29tbWFuZHMsIGVkaXRvciwgc3RhdGUgfSA9IHRoaXM7XHJcbiAgICAgICAgY29uc3QgeyB2aWV3IH0gPSBlZGl0b3I7XHJcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gW107XHJcbiAgICAgICAgY29uc3QgaGFzU3RhcnRUcmFuc2FjdGlvbiA9ICEhc3RhcnRUcjtcclxuICAgICAgICBjb25zdCB0ciA9IHN0YXJ0VHIgfHwgc3RhdGUudHI7XHJcbiAgICAgICAgY29uc3QgcnVuID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWhhc1N0YXJ0VHJhbnNhY3Rpb25cclxuICAgICAgICAgICAgICAgICYmIHNob3VsZERpc3BhdGNoXHJcbiAgICAgICAgICAgICAgICAmJiAhdHIuZ2V0TWV0YSgncHJldmVudERpc3BhdGNoJylcclxuICAgICAgICAgICAgICAgICYmICF0aGlzLmhhc0N1c3RvbVN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICB2aWV3LmRpc3BhdGNoKHRyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2tzLmV2ZXJ5KGNhbGxiYWNrID0+IGNhbGxiYWNrID09PSB0cnVlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGNoYWluID0ge1xyXG4gICAgICAgICAgICAuLi5PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMocmF3Q29tbWFuZHMpLm1hcCgoW25hbWUsIGNvbW1hbmRdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFpbmVkQ29tbWFuZCA9ICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLmJ1aWxkUHJvcHModHIsIHNob3VsZERpc3BhdGNoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGNvbW1hbmQoLi4uYXJncykocHJvcHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hhaW47XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtuYW1lLCBjaGFpbmVkQ29tbWFuZF07XHJcbiAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgcnVuLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGNoYWluO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlQ2FuKHN0YXJ0VHIpIHtcclxuICAgICAgICBjb25zdCB7IHJhd0NvbW1hbmRzLCBzdGF0ZSB9ID0gdGhpcztcclxuICAgICAgICBjb25zdCBkaXNwYXRjaCA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IHRyID0gc3RhcnRUciB8fCBzdGF0ZS50cjtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMuYnVpbGRQcm9wcyh0ciwgZGlzcGF0Y2gpO1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZENvbW1hbmRzID0gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHJhd0NvbW1hbmRzKS5tYXAoKFtuYW1lLCBjb21tYW5kXSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gW25hbWUsICguLi5hcmdzKSA9PiBjb21tYW5kKC4uLmFyZ3MpKHsgLi4ucHJvcHMsIGRpc3BhdGNoOiB1bmRlZmluZWQgfSldO1xyXG4gICAgICAgIH0pKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5mb3JtYXR0ZWRDb21tYW5kcyxcclxuICAgICAgICAgICAgY2hhaW46ICgpID0+IHRoaXMuY3JlYXRlQ2hhaW4odHIsIGRpc3BhdGNoKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgYnVpbGRQcm9wcyh0ciwgc2hvdWxkRGlzcGF0Y2ggPSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3QgeyByYXdDb21tYW5kcywgZWRpdG9yLCBzdGF0ZSB9ID0gdGhpcztcclxuICAgICAgICBjb25zdCB7IHZpZXcgfSA9IGVkaXRvcjtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IHtcclxuICAgICAgICAgICAgdHIsXHJcbiAgICAgICAgICAgIGVkaXRvcixcclxuICAgICAgICAgICAgdmlldyxcclxuICAgICAgICAgICAgc3RhdGU6IGNyZWF0ZUNoYWluYWJsZVN0YXRlKHtcclxuICAgICAgICAgICAgICAgIHN0YXRlLFxyXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb246IHRyLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgZGlzcGF0Y2g6IHNob3VsZERpc3BhdGNoID8gKCkgPT4gdW5kZWZpbmVkIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBjaGFpbjogKCkgPT4gdGhpcy5jcmVhdGVDaGFpbih0ciwgc2hvdWxkRGlzcGF0Y2gpLFxyXG4gICAgICAgICAgICBjYW46ICgpID0+IHRoaXMuY3JlYXRlQ2FuKHRyKSxcclxuICAgICAgICAgICAgZ2V0IGNvbW1hbmRzKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhyYXdDb21tYW5kcykubWFwKChbbmFtZSwgY29tbWFuZF0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW25hbWUsICguLi5hcmdzKSA9PiBjb21tYW5kKC4uLmFyZ3MpKHByb3BzKV07XHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gcHJvcHM7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuY2FsbGJhY2tzID0ge307XHJcbiAgICB9XHJcbiAgICBvbihldmVudCwgZm4pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2FsbGJhY2tzW2V2ZW50XSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrc1tldmVudF0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3NbZXZlbnRdLnB1c2goZm4pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgZW1pdChldmVudCwgLi4uYXJncykge1xyXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuY2FsbGJhY2tzW2V2ZW50XTtcclxuICAgICAgICBpZiAoY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrcy5mb3JFYWNoKGNhbGxiYWNrID0+IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBvZmYoZXZlbnQsIGZuKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpcy5jYWxsYmFja3NbZXZlbnRdO1xyXG4gICAgICAgIGlmIChjYWxsYmFja3MpIHtcclxuICAgICAgICAgICAgaWYgKGZuKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrc1tldmVudF0gPSBjYWxsYmFja3MuZmlsdGVyKGNhbGxiYWNrID0+IGNhbGxiYWNrICE9PSBmbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jYWxsYmFja3NbZXZlbnRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlQWxsTGlzdGVuZXJzKCkge1xyXG4gICAgICAgIHRoaXMuY2FsbGJhY2tzID0ge307XHJcbiAgICB9XHJcbn1cblxuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uRmllbGQoZXh0ZW5zaW9uLCBmaWVsZCwgY29udGV4dCkge1xyXG4gICAgaWYgKGV4dGVuc2lvbi5jb25maWdbZmllbGRdID09PSB1bmRlZmluZWQgJiYgZXh0ZW5zaW9uLnBhcmVudCkge1xyXG4gICAgICAgIHJldHVybiBnZXRFeHRlbnNpb25GaWVsZChleHRlbnNpb24ucGFyZW50LCBmaWVsZCwgY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGV4dGVuc2lvbi5jb25maWdbZmllbGRdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBleHRlbnNpb24uY29uZmlnW2ZpZWxkXS5iaW5kKHtcclxuICAgICAgICAgICAgLi4uY29udGV4dCxcclxuICAgICAgICAgICAgcGFyZW50OiBleHRlbnNpb24ucGFyZW50XHJcbiAgICAgICAgICAgICAgICA/IGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbi5wYXJlbnQsIGZpZWxkLCBjb250ZXh0KVxyXG4gICAgICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBleHRlbnNpb24uY29uZmlnW2ZpZWxkXTtcclxufVxuXG5mdW5jdGlvbiBzcGxpdEV4dGVuc2lvbnMoZXh0ZW5zaW9ucykge1xyXG4gICAgY29uc3QgYmFzZUV4dGVuc2lvbnMgPSBleHRlbnNpb25zLmZpbHRlcihleHRlbnNpb24gPT4gZXh0ZW5zaW9uLnR5cGUgPT09ICdleHRlbnNpb24nKTtcclxuICAgIGNvbnN0IG5vZGVFeHRlbnNpb25zID0gZXh0ZW5zaW9ucy5maWx0ZXIoZXh0ZW5zaW9uID0+IGV4dGVuc2lvbi50eXBlID09PSAnbm9kZScpO1xyXG4gICAgY29uc3QgbWFya0V4dGVuc2lvbnMgPSBleHRlbnNpb25zLmZpbHRlcihleHRlbnNpb24gPT4gZXh0ZW5zaW9uLnR5cGUgPT09ICdtYXJrJyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGJhc2VFeHRlbnNpb25zLFxyXG4gICAgICAgIG5vZGVFeHRlbnNpb25zLFxyXG4gICAgICAgIG1hcmtFeHRlbnNpb25zLFxyXG4gICAgfTtcclxufVxuXG4vKipcclxuICogR2V0IGEgbGlzdCBvZiBhbGwgZXh0ZW5zaW9uIGF0dHJpYnV0ZXMgZGVmaW5lZCBpbiBgYWRkQXR0cmlidXRlYCBhbmQgYGFkZEdsb2JhbEF0dHJpYnV0ZWAuXHJcbiAqIEBwYXJhbSBleHRlbnNpb25zIExpc3Qgb2YgZXh0ZW5zaW9uc1xyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QXR0cmlidXRlc0Zyb21FeHRlbnNpb25zKGV4dGVuc2lvbnMpIHtcclxuICAgIGNvbnN0IGV4dGVuc2lvbkF0dHJpYnV0ZXMgPSBbXTtcclxuICAgIGNvbnN0IHsgbm9kZUV4dGVuc2lvbnMsIG1hcmtFeHRlbnNpb25zIH0gPSBzcGxpdEV4dGVuc2lvbnMoZXh0ZW5zaW9ucyk7XHJcbiAgICBjb25zdCBub2RlQW5kTWFya0V4dGVuc2lvbnMgPSBbLi4ubm9kZUV4dGVuc2lvbnMsIC4uLm1hcmtFeHRlbnNpb25zXTtcclxuICAgIGNvbnN0IGRlZmF1bHRBdHRyaWJ1dGUgPSB7XHJcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcclxuICAgICAgICByZW5kZXJlZDogdHJ1ZSxcclxuICAgICAgICByZW5kZXJIVE1MOiBudWxsLFxyXG4gICAgICAgIHBhcnNlSFRNTDogbnVsbCxcclxuICAgICAgICBrZWVwT25TcGxpdDogdHJ1ZSxcclxuICAgICAgICBpc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgIH07XHJcbiAgICBleHRlbnNpb25zLmZvckVhY2goZXh0ZW5zaW9uID0+IHtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBleHRlbnNpb24ubmFtZSxcclxuICAgICAgICAgICAgb3B0aW9uczogZXh0ZW5zaW9uLm9wdGlvbnMsXHJcbiAgICAgICAgICAgIHN0b3JhZ2U6IGV4dGVuc2lvbi5zdG9yYWdlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgYWRkR2xvYmFsQXR0cmlidXRlcyA9IGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ2FkZEdsb2JhbEF0dHJpYnV0ZXMnLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoIWFkZEdsb2JhbEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPOiByZW1vdmUgYGFzIEdsb2JhbEF0dHJpYnV0ZXNgXHJcbiAgICAgICAgY29uc3QgZ2xvYmFsQXR0cmlidXRlcyA9IGFkZEdsb2JhbEF0dHJpYnV0ZXMoKTtcclxuICAgICAgICBnbG9iYWxBdHRyaWJ1dGVzLmZvckVhY2goZ2xvYmFsQXR0cmlidXRlID0+IHtcclxuICAgICAgICAgICAgZ2xvYmFsQXR0cmlidXRlLnR5cGVzLmZvckVhY2godHlwZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBPYmplY3RcclxuICAgICAgICAgICAgICAgICAgICAuZW50cmllcyhnbG9iYWxBdHRyaWJ1dGUuYXR0cmlidXRlcylcclxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoW25hbWUsIGF0dHJpYnV0ZV0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25BdHRyaWJ1dGVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRlZmF1bHRBdHRyaWJ1dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5hdHRyaWJ1dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIG5vZGVBbmRNYXJrRXh0ZW5zaW9ucy5mb3JFYWNoKGV4dGVuc2lvbiA9PiB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHtcclxuICAgICAgICAgICAgbmFtZTogZXh0ZW5zaW9uLm5hbWUsXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IGV4dGVuc2lvbi5vcHRpb25zLFxyXG4gICAgICAgICAgICBzdG9yYWdlOiBleHRlbnNpb24uc3RvcmFnZSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGFkZEF0dHJpYnV0ZXMgPSBnZXRFeHRlbnNpb25GaWVsZChleHRlbnNpb24sICdhZGRBdHRyaWJ1dGVzJywgY29udGV4dCk7XHJcbiAgICAgICAgaWYgKCFhZGRBdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETzogcmVtb3ZlIGBhcyBBdHRyaWJ1dGVzYFxyXG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBhZGRBdHRyaWJ1dGVzKCk7XHJcbiAgICAgICAgT2JqZWN0XHJcbiAgICAgICAgICAgIC5lbnRyaWVzKGF0dHJpYnV0ZXMpXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKChbbmFtZSwgYXR0cmlidXRlXSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXJnZWRBdHRyID0ge1xyXG4gICAgICAgICAgICAgICAgLi4uZGVmYXVsdEF0dHJpYnV0ZSxcclxuICAgICAgICAgICAgICAgIC4uLmF0dHJpYnV0ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiAobWVyZ2VkQXR0ciA9PT0gbnVsbCB8fCBtZXJnZWRBdHRyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtZXJnZWRBdHRyLmRlZmF1bHQpID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBtZXJnZWRBdHRyLmRlZmF1bHQgPSBtZXJnZWRBdHRyLmRlZmF1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoKG1lcmdlZEF0dHIgPT09IG51bGwgfHwgbWVyZ2VkQXR0ciA9PT0gdm9pZCAwID8gdm9pZCAwIDogbWVyZ2VkQXR0ci5pc1JlcXVpcmVkKSAmJiAobWVyZ2VkQXR0ciA9PT0gbnVsbCB8fCBtZXJnZWRBdHRyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtZXJnZWRBdHRyLmRlZmF1bHQpID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBtZXJnZWRBdHRyLmRlZmF1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZXh0ZW5zaW9uQXR0cmlidXRlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGV4dGVuc2lvbi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZTogbWVyZ2VkQXR0cixcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBleHRlbnNpb25BdHRyaWJ1dGVzO1xyXG59XG5cbmZ1bmN0aW9uIGdldE5vZGVUeXBlKG5hbWVPclR5cGUsIHNjaGVtYSkge1xyXG4gICAgaWYgKHR5cGVvZiBuYW1lT3JUeXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmICghc2NoZW1hLm5vZGVzW25hbWVPclR5cGVdKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBUaGVyZSBpcyBubyBub2RlIHR5cGUgbmFtZWQgJyR7bmFtZU9yVHlwZX0nLiBNYXliZSB5b3UgZm9yZ290IHRvIGFkZCB0aGUgZXh0ZW5zaW9uP2ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2NoZW1hLm5vZGVzW25hbWVPclR5cGVdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5hbWVPclR5cGU7XHJcbn1cblxuZnVuY3Rpb24gbWVyZ2VBdHRyaWJ1dGVzKC4uLm9iamVjdHMpIHtcclxuICAgIHJldHVybiBvYmplY3RzXHJcbiAgICAgICAgLmZpbHRlcihpdGVtID0+ICEhaXRlbSlcclxuICAgICAgICAucmVkdWNlKChpdGVtcywgaXRlbSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG1lcmdlZEF0dHJpYnV0ZXMgPSB7IC4uLml0ZW1zIH07XHJcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoaXRlbSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0cyA9IG1lcmdlZEF0dHJpYnV0ZXNba2V5XTtcclxuICAgICAgICAgICAgaWYgKCFleGlzdHMpIHtcclxuICAgICAgICAgICAgICAgIG1lcmdlZEF0dHJpYnV0ZXNba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdjbGFzcycpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlQ2xhc3NlcyA9IHZhbHVlID8gdmFsdWUuc3BsaXQoJyAnKSA6IFtdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdDbGFzc2VzID0gbWVyZ2VkQXR0cmlidXRlc1trZXldID8gbWVyZ2VkQXR0cmlidXRlc1trZXldLnNwbGl0KCcgJykgOiBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydENsYXNzZXMgPSB2YWx1ZUNsYXNzZXMuZmlsdGVyKHZhbHVlQ2xhc3MgPT4gIWV4aXN0aW5nQ2xhc3Nlcy5pbmNsdWRlcyh2YWx1ZUNsYXNzKSk7XHJcbiAgICAgICAgICAgICAgICBtZXJnZWRBdHRyaWJ1dGVzW2tleV0gPSBbLi4uZXhpc3RpbmdDbGFzc2VzLCAuLi5pbnNlcnRDbGFzc2VzXS5qb2luKCcgJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSAnc3R5bGUnKSB7XHJcbiAgICAgICAgICAgICAgICBtZXJnZWRBdHRyaWJ1dGVzW2tleV0gPSBbbWVyZ2VkQXR0cmlidXRlc1trZXldLCB2YWx1ZV0uam9pbignOyAnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1lcmdlZEF0dHJpYnV0ZXNba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG1lcmdlZEF0dHJpYnV0ZXM7XHJcbiAgICB9LCB7fSk7XHJcbn1cblxuZnVuY3Rpb24gZ2V0UmVuZGVyZWRBdHRyaWJ1dGVzKG5vZGVPck1hcmssIGV4dGVuc2lvbkF0dHJpYnV0ZXMpIHtcclxuICAgIHJldHVybiBleHRlbnNpb25BdHRyaWJ1dGVzXHJcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0uYXR0cmlidXRlLnJlbmRlcmVkKVxyXG4gICAgICAgIC5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgaWYgKCFpdGVtLmF0dHJpYnV0ZS5yZW5kZXJIVE1MKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBbaXRlbS5uYW1lXTogbm9kZU9yTWFyay5hdHRyc1tpdGVtLm5hbWVdLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbS5hdHRyaWJ1dGUucmVuZGVySFRNTChub2RlT3JNYXJrLmF0dHJzKSB8fCB7fTtcclxuICAgIH0pXHJcbiAgICAgICAgLnJlZHVjZSgoYXR0cmlidXRlcywgYXR0cmlidXRlKSA9PiBtZXJnZUF0dHJpYnV0ZXMoYXR0cmlidXRlcywgYXR0cmlidXRlKSwge30pO1xyXG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XHJcbn1cblxuLyoqXHJcbiAqIE9wdGlvbmFsbHkgY2FsbHMgYHZhbHVlYCBhcyBhIGZ1bmN0aW9uLlxyXG4gKiBPdGhlcndpc2UgaXQgaXMgcmV0dXJuZWQgZGlyZWN0bHkuXHJcbiAqIEBwYXJhbSB2YWx1ZSBGdW5jdGlvbiBvciBhbnkgdmFsdWUuXHJcbiAqIEBwYXJhbSBjb250ZXh0IE9wdGlvbmFsIGNvbnRleHQgdG8gYmluZCB0byBmdW5jdGlvbi5cclxuICogQHBhcmFtIHByb3BzIE9wdGlvbmFsIHByb3BzIHRvIHBhc3MgdG8gZnVuY3Rpb24uXHJcbiAqL1xyXG5mdW5jdGlvbiBjYWxsT3JSZXR1cm4odmFsdWUsIGNvbnRleHQgPSB1bmRlZmluZWQsIC4uLnByb3BzKSB7XHJcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcclxuICAgICAgICBpZiAoY29udGV4dCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuYmluZChjb250ZXh0KSguLi5wcm9wcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZSguLi5wcm9wcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cblxuZnVuY3Rpb24gaXNFbXB0eU9iamVjdCh2YWx1ZSA9IHt9KSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMCAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xyXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcodmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlLm1hdGNoKC9eWystXT8oPzpcXGQqXFwuKT9cXGQrJC8pKSB7XHJcbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59XG5cbi8qKlxyXG4gKiBUaGlzIGZ1bmN0aW9uIG1lcmdlcyBleHRlbnNpb24gYXR0cmlidXRlcyBpbnRvIHBhcnNlcnVsZSBhdHRyaWJ1dGVzIChgYXR0cnNgIG9yIGBnZXRBdHRyc2ApLlxyXG4gKiBDYW5jZWxzIHdoZW4gYGdldEF0dHJzYCByZXR1cm5lZCBgZmFsc2VgLlxyXG4gKiBAcGFyYW0gcGFyc2VSdWxlIFByb3NlTWlycm9yIFBhcnNlUnVsZVxyXG4gKiBAcGFyYW0gZXh0ZW5zaW9uQXR0cmlidXRlcyBMaXN0IG9mIGF0dHJpYnV0ZXMgdG8gaW5qZWN0XHJcbiAqL1xyXG5mdW5jdGlvbiBpbmplY3RFeHRlbnNpb25BdHRyaWJ1dGVzVG9QYXJzZVJ1bGUocGFyc2VSdWxlLCBleHRlbnNpb25BdHRyaWJ1dGVzKSB7XHJcbiAgICBpZiAocGFyc2VSdWxlLnN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlUnVsZTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4ucGFyc2VSdWxlLFxyXG4gICAgICAgIGdldEF0dHJzOiBub2RlID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgb2xkQXR0cmlidXRlcyA9IHBhcnNlUnVsZS5nZXRBdHRycyA/IHBhcnNlUnVsZS5nZXRBdHRycyhub2RlKSA6IHBhcnNlUnVsZS5hdHRycztcclxuICAgICAgICAgICAgaWYgKG9sZEF0dHJpYnV0ZXMgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbmV3QXR0cmlidXRlcyA9IGV4dGVuc2lvbkF0dHJpYnV0ZXMucmVkdWNlKChpdGVtcywgaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtLmF0dHJpYnV0ZS5wYXJzZUhUTUxcclxuICAgICAgICAgICAgICAgICAgICA/IGl0ZW0uYXR0cmlidXRlLnBhcnNlSFRNTChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIDogZnJvbVN0cmluZyhub2RlLmdldEF0dHJpYnV0ZShpdGVtLm5hbWUpKTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtcyxcclxuICAgICAgICAgICAgICAgICAgICBbaXRlbS5uYW1lXTogdmFsdWUsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9LCB7fSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IC4uLm9sZEF0dHJpYnV0ZXMsIC4uLm5ld0F0dHJpYnV0ZXMgfTtcclxuICAgICAgICB9LFxyXG4gICAgfTtcclxufVxuXG5mdW5jdGlvbiBjbGVhblVwU2NoZW1hSXRlbShkYXRhKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgT2JqZWN0LmVudHJpZXMoZGF0YSkuZmlsdGVyKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICBpZiAoa2V5ID09PSAnYXR0cnMnICYmIGlzRW1wdHlPYmplY3QodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9KSk7XHJcbn1cclxuZnVuY3Rpb24gZ2V0U2NoZW1hQnlSZXNvbHZlZEV4dGVuc2lvbnMoZXh0ZW5zaW9ucywgZWRpdG9yKSB7XHJcbiAgICB2YXIgX2E7XHJcbiAgICBjb25zdCBhbGxBdHRyaWJ1dGVzID0gZ2V0QXR0cmlidXRlc0Zyb21FeHRlbnNpb25zKGV4dGVuc2lvbnMpO1xyXG4gICAgY29uc3QgeyBub2RlRXh0ZW5zaW9ucywgbWFya0V4dGVuc2lvbnMgfSA9IHNwbGl0RXh0ZW5zaW9ucyhleHRlbnNpb25zKTtcclxuICAgIGNvbnN0IHRvcE5vZGUgPSAoX2EgPSBub2RlRXh0ZW5zaW9ucy5maW5kKGV4dGVuc2lvbiA9PiBnZXRFeHRlbnNpb25GaWVsZChleHRlbnNpb24sICd0b3BOb2RlJykpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmFtZTtcclxuICAgIGNvbnN0IG5vZGVzID0gT2JqZWN0LmZyb21FbnRyaWVzKG5vZGVFeHRlbnNpb25zLm1hcChleHRlbnNpb24gPT4ge1xyXG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbkF0dHJpYnV0ZXMgPSBhbGxBdHRyaWJ1dGVzLmZpbHRlcihhdHRyaWJ1dGUgPT4gYXR0cmlidXRlLnR5cGUgPT09IGV4dGVuc2lvbi5uYW1lKTtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBleHRlbnNpb24ubmFtZSxcclxuICAgICAgICAgICAgb3B0aW9uczogZXh0ZW5zaW9uLm9wdGlvbnMsXHJcbiAgICAgICAgICAgIHN0b3JhZ2U6IGV4dGVuc2lvbi5zdG9yYWdlLFxyXG4gICAgICAgICAgICBlZGl0b3IsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBleHRyYU5vZGVGaWVsZHMgPSBleHRlbnNpb25zLnJlZHVjZSgoZmllbGRzLCBlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZE5vZGVTY2hlbWEgPSBnZXRFeHRlbnNpb25GaWVsZChlLCAnZXh0ZW5kTm9kZVNjaGVtYScsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uZmllbGRzLFxyXG4gICAgICAgICAgICAgICAgLi4uKGV4dGVuZE5vZGVTY2hlbWEgPyBleHRlbmROb2RlU2NoZW1hKGV4dGVuc2lvbikgOiB7fSksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGNsZWFuVXBTY2hlbWFJdGVtKHtcclxuICAgICAgICAgICAgLi4uZXh0cmFOb2RlRmllbGRzLFxyXG4gICAgICAgICAgICBjb250ZW50OiBjYWxsT3JSZXR1cm4oZ2V0RXh0ZW5zaW9uRmllbGQoZXh0ZW5zaW9uLCAnY29udGVudCcsIGNvbnRleHQpKSxcclxuICAgICAgICAgICAgbWFya3M6IGNhbGxPclJldHVybihnZXRFeHRlbnNpb25GaWVsZChleHRlbnNpb24sICdtYXJrcycsIGNvbnRleHQpKSxcclxuICAgICAgICAgICAgZ3JvdXA6IGNhbGxPclJldHVybihnZXRFeHRlbnNpb25GaWVsZChleHRlbnNpb24sICdncm91cCcsIGNvbnRleHQpKSxcclxuICAgICAgICAgICAgaW5saW5lOiBjYWxsT3JSZXR1cm4oZ2V0RXh0ZW5zaW9uRmllbGQoZXh0ZW5zaW9uLCAnaW5saW5lJywgY29udGV4dCkpLFxyXG4gICAgICAgICAgICBhdG9tOiBjYWxsT3JSZXR1cm4oZ2V0RXh0ZW5zaW9uRmllbGQoZXh0ZW5zaW9uLCAnYXRvbScsIGNvbnRleHQpKSxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogY2FsbE9yUmV0dXJuKGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ3NlbGVjdGFibGUnLCBjb250ZXh0KSksXHJcbiAgICAgICAgICAgIGRyYWdnYWJsZTogY2FsbE9yUmV0dXJuKGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ2RyYWdnYWJsZScsIGNvbnRleHQpKSxcclxuICAgICAgICAgICAgY29kZTogY2FsbE9yUmV0dXJuKGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ2NvZGUnLCBjb250ZXh0KSksXHJcbiAgICAgICAgICAgIGRlZmluaW5nOiBjYWxsT3JSZXR1cm4oZ2V0RXh0ZW5zaW9uRmllbGQoZXh0ZW5zaW9uLCAnZGVmaW5pbmcnLCBjb250ZXh0KSksXHJcbiAgICAgICAgICAgIGlzb2xhdGluZzogY2FsbE9yUmV0dXJuKGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ2lzb2xhdGluZycsIGNvbnRleHQpKSxcclxuICAgICAgICAgICAgYXR0cnM6IE9iamVjdC5mcm9tRW50cmllcyhleHRlbnNpb25BdHRyaWJ1dGVzLm1hcChleHRlbnNpb25BdHRyaWJ1dGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtleHRlbnNpb25BdHRyaWJ1dGUubmFtZSwgeyBkZWZhdWx0OiAoX2EgPSBleHRlbnNpb25BdHRyaWJ1dGUgPT09IG51bGwgfHwgZXh0ZW5zaW9uQXR0cmlidXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHRlbnNpb25BdHRyaWJ1dGUuYXR0cmlidXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVmYXVsdCB9XTtcclxuICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IHBhcnNlSFRNTCA9IGNhbGxPclJldHVybihnZXRFeHRlbnNpb25GaWVsZChleHRlbnNpb24sICdwYXJzZUhUTUwnLCBjb250ZXh0KSk7XHJcbiAgICAgICAgaWYgKHBhcnNlSFRNTCkge1xyXG4gICAgICAgICAgICBzY2hlbWEucGFyc2VET00gPSBwYXJzZUhUTUwubWFwKHBhcnNlUnVsZSA9PiBpbmplY3RFeHRlbnNpb25BdHRyaWJ1dGVzVG9QYXJzZVJ1bGUocGFyc2VSdWxlLCBleHRlbnNpb25BdHRyaWJ1dGVzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlbmRlckhUTUwgPSBnZXRFeHRlbnNpb25GaWVsZChleHRlbnNpb24sICdyZW5kZXJIVE1MJywgY29udGV4dCk7XHJcbiAgICAgICAgaWYgKHJlbmRlckhUTUwpIHtcclxuICAgICAgICAgICAgc2NoZW1hLnRvRE9NID0gbm9kZSA9PiByZW5kZXJIVE1MKHtcclxuICAgICAgICAgICAgICAgIG5vZGUsXHJcbiAgICAgICAgICAgICAgICBIVE1MQXR0cmlidXRlczogZ2V0UmVuZGVyZWRBdHRyaWJ1dGVzKG5vZGUsIGV4dGVuc2lvbkF0dHJpYnV0ZXMpLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVuZGVyVGV4dCA9IGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ3JlbmRlclRleHQnLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAocmVuZGVyVGV4dCkge1xyXG4gICAgICAgICAgICBzY2hlbWEudG9UZXh0ID0gcmVuZGVyVGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFtleHRlbnNpb24ubmFtZSwgc2NoZW1hXTtcclxuICAgIH0pKTtcclxuICAgIGNvbnN0IG1hcmtzID0gT2JqZWN0LmZyb21FbnRyaWVzKG1hcmtFeHRlbnNpb25zLm1hcChleHRlbnNpb24gPT4ge1xyXG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbkF0dHJpYnV0ZXMgPSBhbGxBdHRyaWJ1dGVzLmZpbHRlcihhdHRyaWJ1dGUgPT4gYXR0cmlidXRlLnR5cGUgPT09IGV4dGVuc2lvbi5uYW1lKTtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBleHRlbnNpb24ubmFtZSxcclxuICAgICAgICAgICAgb3B0aW9uczogZXh0ZW5zaW9uLm9wdGlvbnMsXHJcbiAgICAgICAgICAgIHN0b3JhZ2U6IGV4dGVuc2lvbi5zdG9yYWdlLFxyXG4gICAgICAgICAgICBlZGl0b3IsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBleHRyYU1hcmtGaWVsZHMgPSBleHRlbnNpb25zLnJlZHVjZSgoZmllbGRzLCBlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZE1hcmtTY2hlbWEgPSBnZXRFeHRlbnNpb25GaWVsZChlLCAnZXh0ZW5kTWFya1NjaGVtYScsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uZmllbGRzLFxyXG4gICAgICAgICAgICAgICAgLi4uKGV4dGVuZE1hcmtTY2hlbWEgPyBleHRlbmRNYXJrU2NoZW1hKGV4dGVuc2lvbikgOiB7fSksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGNsZWFuVXBTY2hlbWFJdGVtKHtcclxuICAgICAgICAgICAgLi4uZXh0cmFNYXJrRmllbGRzLFxyXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGNhbGxPclJldHVybihnZXRFeHRlbnNpb25GaWVsZChleHRlbnNpb24sICdpbmNsdXNpdmUnLCBjb250ZXh0KSksXHJcbiAgICAgICAgICAgIGV4Y2x1ZGVzOiBjYWxsT3JSZXR1cm4oZ2V0RXh0ZW5zaW9uRmllbGQoZXh0ZW5zaW9uLCAnZXhjbHVkZXMnLCBjb250ZXh0KSksXHJcbiAgICAgICAgICAgIGdyb3VwOiBjYWxsT3JSZXR1cm4oZ2V0RXh0ZW5zaW9uRmllbGQoZXh0ZW5zaW9uLCAnZ3JvdXAnLCBjb250ZXh0KSksXHJcbiAgICAgICAgICAgIHNwYW5uaW5nOiBjYWxsT3JSZXR1cm4oZ2V0RXh0ZW5zaW9uRmllbGQoZXh0ZW5zaW9uLCAnc3Bhbm5pbmcnLCBjb250ZXh0KSksXHJcbiAgICAgICAgICAgIGNvZGU6IGNhbGxPclJldHVybihnZXRFeHRlbnNpb25GaWVsZChleHRlbnNpb24sICdjb2RlJywgY29udGV4dCkpLFxyXG4gICAgICAgICAgICBhdHRyczogT2JqZWN0LmZyb21FbnRyaWVzKGV4dGVuc2lvbkF0dHJpYnV0ZXMubWFwKGV4dGVuc2lvbkF0dHJpYnV0ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW2V4dGVuc2lvbkF0dHJpYnV0ZS5uYW1lLCB7IGRlZmF1bHQ6IChfYSA9IGV4dGVuc2lvbkF0dHJpYnV0ZSA9PT0gbnVsbCB8fCBleHRlbnNpb25BdHRyaWJ1dGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4dGVuc2lvbkF0dHJpYnV0ZS5hdHRyaWJ1dGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZWZhdWx0IH1dO1xyXG4gICAgICAgICAgICB9KSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgcGFyc2VIVE1MID0gY2FsbE9yUmV0dXJuKGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ3BhcnNlSFRNTCcsIGNvbnRleHQpKTtcclxuICAgICAgICBpZiAocGFyc2VIVE1MKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYS5wYXJzZURPTSA9IHBhcnNlSFRNTC5tYXAocGFyc2VSdWxlID0+IGluamVjdEV4dGVuc2lvbkF0dHJpYnV0ZXNUb1BhcnNlUnVsZShwYXJzZVJ1bGUsIGV4dGVuc2lvbkF0dHJpYnV0ZXMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVuZGVySFRNTCA9IGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ3JlbmRlckhUTUwnLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAocmVuZGVySFRNTCkge1xyXG4gICAgICAgICAgICBzY2hlbWEudG9ET00gPSBtYXJrID0+IHJlbmRlckhUTUwoe1xyXG4gICAgICAgICAgICAgICAgbWFyayxcclxuICAgICAgICAgICAgICAgIEhUTUxBdHRyaWJ1dGVzOiBnZXRSZW5kZXJlZEF0dHJpYnV0ZXMobWFyaywgZXh0ZW5zaW9uQXR0cmlidXRlcyksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gW2V4dGVuc2lvbi5uYW1lLCBzY2hlbWFdO1xyXG4gICAgfSkpO1xyXG4gICAgcmV0dXJuIG5ldyBTY2hlbWEoe1xyXG4gICAgICAgIHRvcE5vZGUsXHJcbiAgICAgICAgbm9kZXMsXHJcbiAgICAgICAgbWFya3MsXHJcbiAgICB9KTtcclxufVxuXG5mdW5jdGlvbiBnZXRTY2hlbWFUeXBlQnlOYW1lKG5hbWUsIHNjaGVtYSkge1xyXG4gICAgcmV0dXJuIHNjaGVtYS5ub2Rlc1tuYW1lXSB8fCBzY2hlbWEubWFya3NbbmFtZV0gfHwgbnVsbDtcclxufVxuXG5mdW5jdGlvbiBpc0V4dGVuc2lvblJ1bGVzRW5hYmxlZChleHRlbnNpb24sIGVuYWJsZWQpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGVuYWJsZWQpKSB7XHJcbiAgICAgICAgcmV0dXJuIGVuYWJsZWQuc29tZShlbmFibGVkRXh0ZW5zaW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHR5cGVvZiBlbmFibGVkRXh0ZW5zaW9uID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgICAgICAgPyBlbmFibGVkRXh0ZW5zaW9uXHJcbiAgICAgICAgICAgICAgICA6IGVuYWJsZWRFeHRlbnNpb24ubmFtZTtcclxuICAgICAgICAgICAgcmV0dXJuIG5hbWUgPT09IGV4dGVuc2lvbi5uYW1lO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVuYWJsZWQ7XHJcbn1cblxuY29uc3QgZ2V0VGV4dENvbnRlbnRGcm9tTm9kZXMgPSAoJGZyb20sIG1heE1hdGNoID0gNTAwKSA9PiB7XHJcbiAgICBsZXQgdGV4dEJlZm9yZSA9ICcnO1xyXG4gICAgY29uc3Qgc2xpY2VFbmRQb3MgPSAkZnJvbS5wYXJlbnRPZmZzZXQ7XHJcbiAgICAkZnJvbS5wYXJlbnQubm9kZXNCZXR3ZWVuKE1hdGgubWF4KDAsIHNsaWNlRW5kUG9zIC0gbWF4TWF0Y2gpLCBzbGljZUVuZFBvcywgKG5vZGUsIHBvcywgcGFyZW50LCBpbmRleCkgPT4ge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgY2h1bmsgPSAoKF9iID0gKF9hID0gbm9kZS50eXBlLnNwZWMpLnRvVGV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHtcclxuICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgcG9zLFxyXG4gICAgICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgICAgIGluZGV4LFxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgICAgICB8fCBub2RlLnRleHRDb250ZW50XHJcbiAgICAgICAgICAgIHx8ICclbGVhZiUnO1xyXG4gICAgICAgIHRleHRCZWZvcmUgKz0gY2h1bmsuc2xpY2UoMCwgTWF0aC5tYXgoMCwgc2xpY2VFbmRQb3MgLSBwb3MpKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRleHRCZWZvcmU7XHJcbn07XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XHJcbn1cblxuY2xhc3MgSW5wdXRSdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xyXG4gICAgICAgIHRoaXMuZmluZCA9IGNvbmZpZy5maW5kO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlciA9IGNvbmZpZy5oYW5kbGVyO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IGlucHV0UnVsZU1hdGNoZXJIYW5kbGVyID0gKHRleHQsIGZpbmQpID0+IHtcclxuICAgIGlmIChpc1JlZ0V4cChmaW5kKSkge1xyXG4gICAgICAgIHJldHVybiBmaW5kLmV4ZWModGV4dCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbnB1dFJ1bGVNYXRjaCA9IGZpbmQodGV4dCk7XHJcbiAgICBpZiAoIWlucHV0UnVsZU1hdGNoKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXN1bHQgPSBbaW5wdXRSdWxlTWF0Y2gudGV4dF07XHJcbiAgICByZXN1bHQuaW5kZXggPSBpbnB1dFJ1bGVNYXRjaC5pbmRleDtcclxuICAgIHJlc3VsdC5pbnB1dCA9IHRleHQ7XHJcbiAgICByZXN1bHQuZGF0YSA9IGlucHV0UnVsZU1hdGNoLmRhdGE7XHJcbiAgICBpZiAoaW5wdXRSdWxlTWF0Y2gucmVwbGFjZVdpdGgpIHtcclxuICAgICAgICBpZiAoIWlucHV0UnVsZU1hdGNoLnRleHQuaW5jbHVkZXMoaW5wdXRSdWxlTWF0Y2gucmVwbGFjZVdpdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW3RpcHRhcCB3YXJuXTogXCJpbnB1dFJ1bGVNYXRjaC5yZXBsYWNlV2l0aFwiIG11c3QgYmUgcGFydCBvZiBcImlucHV0UnVsZU1hdGNoLnRleHRcIi4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LnB1c2goaW5wdXRSdWxlTWF0Y2gucmVwbGFjZVdpdGgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufTtcclxuZnVuY3Rpb24gcnVuJDEoY29uZmlnKSB7XHJcbiAgICB2YXIgX2E7XHJcbiAgICBjb25zdCB7IGVkaXRvciwgZnJvbSwgdG8sIHRleHQsIHJ1bGVzLCBwbHVnaW4sIH0gPSBjb25maWc7XHJcbiAgICBjb25zdCB7IHZpZXcgfSA9IGVkaXRvcjtcclxuICAgIGlmICh2aWV3LmNvbXBvc2luZykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0ICRmcm9tID0gdmlldy5zdGF0ZS5kb2MucmVzb2x2ZShmcm9tKTtcclxuICAgIGlmIChcclxuICAgIC8vIGNoZWNrIGZvciBjb2RlIG5vZGVcclxuICAgICRmcm9tLnBhcmVudC50eXBlLnNwZWMuY29kZVxyXG4gICAgICAgIC8vIGNoZWNrIGZvciBjb2RlIG1hcmtcclxuICAgICAgICB8fCAhISgoX2EgPSAoJGZyb20ubm9kZUJlZm9yZSB8fCAkZnJvbS5ub2RlQWZ0ZXIpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWFya3MuZmluZChtYXJrID0+IG1hcmsudHlwZS5zcGVjLmNvZGUpKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGxldCBtYXRjaGVkID0gZmFsc2U7XHJcbiAgICBjb25zdCB0ZXh0QmVmb3JlID0gZ2V0VGV4dENvbnRlbnRGcm9tTm9kZXMoJGZyb20pICsgdGV4dDtcclxuICAgIHJ1bGVzLmZvckVhY2gocnVsZSA9PiB7XHJcbiAgICAgICAgaWYgKG1hdGNoZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtYXRjaCA9IGlucHV0UnVsZU1hdGNoZXJIYW5kbGVyKHRleHRCZWZvcmUsIHJ1bGUuZmluZCk7XHJcbiAgICAgICAgaWYgKCFtYXRjaCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRyID0gdmlldy5zdGF0ZS50cjtcclxuICAgICAgICBjb25zdCBzdGF0ZSA9IGNyZWF0ZUNoYWluYWJsZVN0YXRlKHtcclxuICAgICAgICAgICAgc3RhdGU6IHZpZXcuc3RhdGUsXHJcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uOiB0cixcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCByYW5nZSA9IHtcclxuICAgICAgICAgICAgZnJvbTogZnJvbSAtIChtYXRjaFswXS5sZW5ndGggLSB0ZXh0Lmxlbmd0aCksXHJcbiAgICAgICAgICAgIHRvLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgeyBjb21tYW5kcywgY2hhaW4sIGNhbiB9ID0gbmV3IENvbW1hbmRNYW5hZ2VyKHtcclxuICAgICAgICAgICAgZWRpdG9yLFxyXG4gICAgICAgICAgICBzdGF0ZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBoYW5kbGVyID0gcnVsZS5oYW5kbGVyKHtcclxuICAgICAgICAgICAgc3RhdGUsXHJcbiAgICAgICAgICAgIHJhbmdlLFxyXG4gICAgICAgICAgICBtYXRjaCxcclxuICAgICAgICAgICAgY29tbWFuZHMsXHJcbiAgICAgICAgICAgIGNoYWluLFxyXG4gICAgICAgICAgICBjYW4sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gc3RvcCBpZiB0aGVyZSBhcmUgbm8gY2hhbmdlc1xyXG4gICAgICAgIGlmIChoYW5kbGVyID09PSBudWxsIHx8ICF0ci5zdGVwcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzdG9yZSB0cmFuc2Zvcm0gYXMgbWV0YSBkYXRhXHJcbiAgICAgICAgLy8gc28gd2UgY2FuIHVuZG8gaW5wdXQgcnVsZXMgd2l0aGluIHRoZSBgdW5kb0lucHV0UnVsZXNgIGNvbW1hbmRcclxuICAgICAgICB0ci5zZXRNZXRhKHBsdWdpbiwge1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyLFxyXG4gICAgICAgICAgICBmcm9tLFxyXG4gICAgICAgICAgICB0byxcclxuICAgICAgICAgICAgdGV4dCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB2aWV3LmRpc3BhdGNoKHRyKTtcclxuICAgICAgICBtYXRjaGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1hdGNoZWQ7XHJcbn1cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBpbnB1dCBydWxlcyBwbHVnaW4uIFdoZW4gZW5hYmxlZCwgaXQgd2lsbCBjYXVzZSB0ZXh0XHJcbiAqIGlucHV0IHRoYXQgbWF0Y2hlcyBhbnkgb2YgdGhlIGdpdmVuIHJ1bGVzIHRvIHRyaWdnZXIgdGhlIHJ1bGXigJlzXHJcbiAqIGFjdGlvbi5cclxuICovXHJcbmZ1bmN0aW9uIGlucHV0UnVsZXNQbHVnaW4ocHJvcHMpIHtcclxuICAgIGNvbnN0IHsgZWRpdG9yLCBydWxlcyB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBwbHVnaW4gPSBuZXcgUGx1Z2luKHtcclxuICAgICAgICBzdGF0ZToge1xyXG4gICAgICAgICAgICBpbml0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFwcGx5KHRyLCBwcmV2KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdG9yZWQgPSB0ci5nZXRNZXRhKHBsdWdpbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RvcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JlZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0ci5zZWxlY3Rpb25TZXQgfHwgdHIuZG9jQ2hhbmdlZCA/IG51bGwgOiBwcmV2O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgICAgaGFuZGxlVGV4dElucHV0KHZpZXcsIGZyb20sIHRvLCB0ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVuJDEoe1xyXG4gICAgICAgICAgICAgICAgICAgIGVkaXRvcixcclxuICAgICAgICAgICAgICAgICAgICBmcm9tLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvLFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgcnVsZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgcGx1Z2luLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGhhbmRsZURPTUV2ZW50czoge1xyXG4gICAgICAgICAgICAgICAgY29tcG9zaXRpb25lbmQ6IHZpZXcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7ICRjdXJzb3IgfSA9IHZpZXcuc3RhdGUuc2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGN1cnNvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuJDEoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiAkY3Vyc29yLnBvcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bzogJGN1cnNvci5wb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyBhZGQgc3VwcG9ydCBmb3IgaW5wdXQgcnVsZXMgdG8gdHJpZ2dlciBvbiBlbnRlclxyXG4gICAgICAgICAgICAvLyB0aGlzIGlzIHVzZWZ1bCBmb3IgZXhhbXBsZSBmb3IgY29kZSBibG9ja3NcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bih2aWV3LCBldmVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgJGN1cnNvciB9ID0gdmlldy5zdGF0ZS5zZWxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoJGN1cnNvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBydW4kMSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbTogJGN1cnNvci5wb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvOiAkY3Vyc29yLnBvcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ1xcbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgaXNJbnB1dFJ1bGVzOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcGx1Z2luO1xyXG59XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcclxufVxuXG5jbGFzcyBQYXN0ZVJ1bGUge1xyXG4gICAgY29uc3RydWN0b3IoY29uZmlnKSB7XHJcbiAgICAgICAgdGhpcy5maW5kID0gY29uZmlnLmZpbmQ7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVyID0gY29uZmlnLmhhbmRsZXI7XHJcbiAgICB9XHJcbn1cclxuY29uc3QgcGFzdGVSdWxlTWF0Y2hlckhhbmRsZXIgPSAodGV4dCwgZmluZCkgPT4ge1xyXG4gICAgaWYgKGlzUmVnRXhwKGZpbmQpKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi50ZXh0Lm1hdGNoQWxsKGZpbmQpXTtcclxuICAgIH1cclxuICAgIGNvbnN0IG1hdGNoZXMgPSBmaW5kKHRleHQpO1xyXG4gICAgaWYgKCFtYXRjaGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1hdGNoZXMubWFwKHBhc3RlUnVsZU1hdGNoID0+IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbcGFzdGVSdWxlTWF0Y2gudGV4dF07XHJcbiAgICAgICAgcmVzdWx0LmluZGV4ID0gcGFzdGVSdWxlTWF0Y2guaW5kZXg7XHJcbiAgICAgICAgcmVzdWx0LmlucHV0ID0gdGV4dDtcclxuICAgICAgICByZXN1bHQuZGF0YSA9IHBhc3RlUnVsZU1hdGNoLmRhdGE7XHJcbiAgICAgICAgaWYgKHBhc3RlUnVsZU1hdGNoLnJlcGxhY2VXaXRoKSB7XHJcbiAgICAgICAgICAgIGlmICghcGFzdGVSdWxlTWF0Y2gudGV4dC5pbmNsdWRlcyhwYXN0ZVJ1bGVNYXRjaC5yZXBsYWNlV2l0aCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignW3RpcHRhcCB3YXJuXTogXCJwYXN0ZVJ1bGVNYXRjaC5yZXBsYWNlV2l0aFwiIG11c3QgYmUgcGFydCBvZiBcInBhc3RlUnVsZU1hdGNoLnRleHRcIi4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXN1bHQucHVzaChwYXN0ZVJ1bGVNYXRjaC5yZXBsYWNlV2l0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9KTtcclxufTtcclxuZnVuY3Rpb24gcnVuKGNvbmZpZykge1xyXG4gICAgY29uc3QgeyBlZGl0b3IsIHN0YXRlLCBmcm9tLCB0bywgcnVsZSwgcGFzdGVFdmVudCwgZHJvcEV2ZW50LCB9ID0gY29uZmlnO1xyXG4gICAgY29uc3QgeyBjb21tYW5kcywgY2hhaW4sIGNhbiB9ID0gbmV3IENvbW1hbmRNYW5hZ2VyKHtcclxuICAgICAgICBlZGl0b3IsXHJcbiAgICAgICAgc3RhdGUsXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGhhbmRsZXJzID0gW107XHJcbiAgICBzdGF0ZS5kb2Mubm9kZXNCZXR3ZWVuKGZyb20sIHRvLCAobm9kZSwgcG9zKSA9PiB7XHJcbiAgICAgICAgaWYgKCFub2RlLmlzVGV4dGJsb2NrIHx8IG5vZGUudHlwZS5zcGVjLmNvZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXNvbHZlZEZyb20gPSBNYXRoLm1heChmcm9tLCBwb3MpO1xyXG4gICAgICAgIGNvbnN0IHJlc29sdmVkVG8gPSBNYXRoLm1pbih0bywgcG9zICsgbm9kZS5jb250ZW50LnNpemUpO1xyXG4gICAgICAgIGNvbnN0IHRleHRUb01hdGNoID0gbm9kZS50ZXh0QmV0d2VlbihyZXNvbHZlZEZyb20gLSBwb3MsIHJlc29sdmVkVG8gLSBwb3MsIHVuZGVmaW5lZCwgJ1xcdWZmZmMnKTtcclxuICAgICAgICBjb25zdCBtYXRjaGVzID0gcGFzdGVSdWxlTWF0Y2hlckhhbmRsZXIodGV4dFRvTWF0Y2gsIHJ1bGUuZmluZCk7XHJcbiAgICAgICAgbWF0Y2hlcy5mb3JFYWNoKG1hdGNoID0+IHtcclxuICAgICAgICAgICAgaWYgKG1hdGNoLmluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHJlc29sdmVkRnJvbSArIG1hdGNoLmluZGV4ICsgMTtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBtYXRjaFswXS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0ge1xyXG4gICAgICAgICAgICAgICAgZnJvbTogc3RhdGUudHIubWFwcGluZy5tYXAoc3RhcnQpLFxyXG4gICAgICAgICAgICAgICAgdG86IHN0YXRlLnRyLm1hcHBpbmcubWFwKGVuZCksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBydWxlLmhhbmRsZXIoe1xyXG4gICAgICAgICAgICAgICAgc3RhdGUsXHJcbiAgICAgICAgICAgICAgICByYW5nZSxcclxuICAgICAgICAgICAgICAgIG1hdGNoLFxyXG4gICAgICAgICAgICAgICAgY29tbWFuZHMsXHJcbiAgICAgICAgICAgICAgICBjaGFpbixcclxuICAgICAgICAgICAgICAgIGNhbixcclxuICAgICAgICAgICAgICAgIHBhc3RlRXZlbnQsXHJcbiAgICAgICAgICAgICAgICBkcm9wRXZlbnQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBoYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBzdWNjZXNzID0gaGFuZGxlcnMuZXZlcnkoaGFuZGxlciA9PiBoYW5kbGVyICE9PSBudWxsKTtcclxuICAgIHJldHVybiBzdWNjZXNzO1xyXG59XHJcbi8qKlxyXG4gKiBDcmVhdGUgYW4gcGFzdGUgcnVsZXMgcGx1Z2luLiBXaGVuIGVuYWJsZWQsIGl0IHdpbGwgY2F1c2UgcGFzdGVkXHJcbiAqIHRleHQgdGhhdCBtYXRjaGVzIGFueSBvZiB0aGUgZ2l2ZW4gcnVsZXMgdG8gdHJpZ2dlciB0aGUgcnVsZeKAmXNcclxuICogYWN0aW9uLlxyXG4gKi9cclxuZnVuY3Rpb24gcGFzdGVSdWxlc1BsdWdpbihwcm9wcykge1xyXG4gICAgY29uc3QgeyBlZGl0b3IsIHJ1bGVzIH0gPSBwcm9wcztcclxuICAgIGxldCBkcmFnU291cmNlRWxlbWVudCA9IG51bGw7XHJcbiAgICBsZXQgaXNQYXN0ZWRGcm9tUHJvc2VNaXJyb3IgPSBmYWxzZTtcclxuICAgIGxldCBpc0Ryb3BwZWRGcm9tUHJvc2VNaXJyb3IgPSBmYWxzZTtcclxuICAgIGxldCBwYXN0ZUV2ZW50ID0gbmV3IENsaXBib2FyZEV2ZW50KCdwYXN0ZScpO1xyXG4gICAgbGV0IGRyb3BFdmVudCA9IG5ldyBEcmFnRXZlbnQoJ2Ryb3AnKTtcclxuICAgIGNvbnN0IHBsdWdpbnMgPSBydWxlcy5tYXAocnVsZSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQbHVnaW4oe1xyXG4gICAgICAgICAgICAvLyB3ZSByZWdpc3RlciBhIGdsb2JhbCBkcmFnIGhhbmRsZXIgdG8gdHJhY2sgdGhlIGN1cnJlbnQgZHJhZyBzb3VyY2UgZWxlbWVudFxyXG4gICAgICAgICAgICB2aWV3KHZpZXcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZURyYWdzdGFydCA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcclxuICAgICAgICAgICAgICAgICAgICBkcmFnU291cmNlRWxlbWVudCA9ICgoX2EgPSB2aWV3LmRvbS5wYXJlbnRFbGVtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29udGFpbnMoZXZlbnQudGFyZ2V0KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB2aWV3LmRvbS5wYXJlbnRFbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgaGFuZGxlRHJhZ3N0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVzdHJveSgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIGhhbmRsZURyYWdzdGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVET01FdmVudHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBkcm9wOiAodmlldywgZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNEcm9wcGVkRnJvbVByb3NlTWlycm9yID0gZHJhZ1NvdXJjZUVsZW1lbnQgPT09IHZpZXcuZG9tLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BFdmVudCA9IGV2ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBwYXN0ZTogKF92aWV3LCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSAoX2EgPSBldmVudC5jbGlwYm9hcmREYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0RGF0YSgndGV4dC9odG1sJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlRXZlbnQgPSBldmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNQYXN0ZWRGcm9tUHJvc2VNaXJyb3IgPSAhIShodG1sID09PSBudWxsIHx8IGh0bWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGh0bWwuaW5jbHVkZXMoJ2RhdGEtcG0tc2xpY2UnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYXBwZW5kVHJhbnNhY3Rpb246ICh0cmFuc2FjdGlvbnMsIG9sZFN0YXRlLCBzdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbnNbMF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc1Bhc3RlID0gdHJhbnNhY3Rpb24uZ2V0TWV0YSgndWlFdmVudCcpID09PSAncGFzdGUnICYmICFpc1Bhc3RlZEZyb21Qcm9zZU1pcnJvcjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzRHJvcCA9IHRyYW5zYWN0aW9uLmdldE1ldGEoJ3VpRXZlbnQnKSA9PT0gJ2Ryb3AnICYmICFpc0Ryb3BwZWRGcm9tUHJvc2VNaXJyb3I7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzUGFzdGUgJiYgIWlzRHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIHN0b3AgaWYgdGhlcmUgaXMgbm8gY2hhbmdlZCByYW5nZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZnJvbSA9IG9sZFN0YXRlLmRvYy5jb250ZW50LmZpbmREaWZmU3RhcnQoc3RhdGUuZG9jLmNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG8gPSBvbGRTdGF0ZS5kb2MuY29udGVudC5maW5kRGlmZkVuZChzdGF0ZS5kb2MuY29udGVudCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyKGZyb20pIHx8ICF0byB8fCBmcm9tID09PSB0by5iKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gYnVpbGQgYSBjaGFpbmFibGUgc3RhdGVcclxuICAgICAgICAgICAgICAgIC8vIHNvIHdlIGNhbiB1c2UgYSBzaW5nbGUgdHJhbnNhY3Rpb24gZm9yIGFsbCBwYXN0ZSBydWxlc1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHIgPSBzdGF0ZS50cjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoYWluYWJsZVN0YXRlID0gY3JlYXRlQ2hhaW5hYmxlU3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uOiB0cixcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHJ1bih7XHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiBjaGFpbmFibGVTdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICBmcm9tOiBNYXRoLm1heChmcm9tIC0gMSwgMCksXHJcbiAgICAgICAgICAgICAgICAgICAgdG86IHRvLmIgLSAxLFxyXG4gICAgICAgICAgICAgICAgICAgIHJ1bGUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFzdGVFdmVudCxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wRXZlbnQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIC8vIHN0b3AgaWYgdGhlcmUgYXJlIG5vIGNoYW5nZXNcclxuICAgICAgICAgICAgICAgIGlmICghaGFuZGxlciB8fCAhdHIuc3RlcHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZHJvcEV2ZW50ID0gbmV3IERyYWdFdmVudCgnZHJvcCcpO1xyXG4gICAgICAgICAgICAgICAgcGFzdGVFdmVudCA9IG5ldyBDbGlwYm9hcmRFdmVudCgncGFzdGUnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHBsdWdpbnM7XHJcbn1cblxuZnVuY3Rpb24gZmluZER1cGxpY2F0ZXMoaXRlbXMpIHtcclxuICAgIGNvbnN0IGZpbHRlcmVkID0gaXRlbXMuZmlsdGVyKChlbCwgaW5kZXgpID0+IGl0ZW1zLmluZGV4T2YoZWwpICE9PSBpbmRleCk7XHJcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQoZmlsdGVyZWQpXTtcclxufVxuXG5jbGFzcyBFeHRlbnNpb25NYW5hZ2VyIHtcclxuICAgIGNvbnN0cnVjdG9yKGV4dGVuc2lvbnMsIGVkaXRvcikge1xyXG4gICAgICAgIHRoaXMuc3BsaXR0YWJsZU1hcmtzID0gW107XHJcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XHJcbiAgICAgICAgdGhpcy5leHRlbnNpb25zID0gRXh0ZW5zaW9uTWFuYWdlci5yZXNvbHZlKGV4dGVuc2lvbnMpO1xyXG4gICAgICAgIHRoaXMuc2NoZW1hID0gZ2V0U2NoZW1hQnlSZXNvbHZlZEV4dGVuc2lvbnModGhpcy5leHRlbnNpb25zLCBlZGl0b3IpO1xyXG4gICAgICAgIHRoaXMuZXh0ZW5zaW9ucy5mb3JFYWNoKGV4dGVuc2lvbiA9PiB7XHJcbiAgICAgICAgICAgIHZhciBfYTtcclxuICAgICAgICAgICAgLy8gc3RvcmUgZXh0ZW5zaW9uIHN0b3JhZ2UgaW4gZWRpdG9yXHJcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmV4dGVuc2lvblN0b3JhZ2VbZXh0ZW5zaW9uLm5hbWVdID0gZXh0ZW5zaW9uLnN0b3JhZ2U7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBleHRlbnNpb24ubmFtZSxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV4dGVuc2lvbi5vcHRpb25zLFxyXG4gICAgICAgICAgICAgICAgc3RvcmFnZTogZXh0ZW5zaW9uLnN0b3JhZ2UsXHJcbiAgICAgICAgICAgICAgICBlZGl0b3I6IHRoaXMuZWRpdG9yLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogZ2V0U2NoZW1hVHlwZUJ5TmFtZShleHRlbnNpb24ubmFtZSwgdGhpcy5zY2hlbWEpLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uLnR5cGUgPT09ICdtYXJrJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qga2VlcE9uU3BsaXQgPSAoX2EgPSBjYWxsT3JSZXR1cm4oZ2V0RXh0ZW5zaW9uRmllbGQoZXh0ZW5zaW9uLCAna2VlcE9uU3BsaXQnLCBjb250ZXh0KSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2VlcE9uU3BsaXQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwbGl0dGFibGVNYXJrcy5wdXNoKGV4dGVuc2lvbi5uYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBvbkJlZm9yZUNyZWF0ZSA9IGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ29uQmVmb3JlQ3JlYXRlJywgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChvbkJlZm9yZUNyZWF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iub24oJ2JlZm9yZUNyZWF0ZScsIG9uQmVmb3JlQ3JlYXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBvbkNyZWF0ZSA9IGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ29uQ3JlYXRlJywgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChvbkNyZWF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iub24oJ2NyZWF0ZScsIG9uQ3JlYXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBvblVwZGF0ZSA9IGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ29uVXBkYXRlJywgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChvblVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iub24oJ3VwZGF0ZScsIG9uVXBkYXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBvblNlbGVjdGlvblVwZGF0ZSA9IGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ29uU2VsZWN0aW9uVXBkYXRlJywgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChvblNlbGVjdGlvblVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iub24oJ3NlbGVjdGlvblVwZGF0ZScsIG9uU2VsZWN0aW9uVXBkYXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBvblRyYW5zYWN0aW9uID0gZ2V0RXh0ZW5zaW9uRmllbGQoZXh0ZW5zaW9uLCAnb25UcmFuc2FjdGlvbicsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICBpZiAob25UcmFuc2FjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iub24oJ3RyYW5zYWN0aW9uJywgb25UcmFuc2FjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgb25Gb2N1cyA9IGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ29uRm9jdXMnLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgaWYgKG9uRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLm9uKCdmb2N1cycsIG9uRm9jdXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG9uQmx1ciA9IGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ29uQmx1cicsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICBpZiAob25CbHVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5vbignYmx1cicsIG9uQmx1cik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgb25EZXN0cm95ID0gZ2V0RXh0ZW5zaW9uRmllbGQoZXh0ZW5zaW9uLCAnb25EZXN0cm95JywgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChvbkRlc3Ryb3kpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLm9uKCdkZXN0cm95Jywgb25EZXN0cm95KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHJlc29sdmUoZXh0ZW5zaW9ucykge1xyXG4gICAgICAgIGNvbnN0IHJlc29sdmVkRXh0ZW5zaW9ucyA9IEV4dGVuc2lvbk1hbmFnZXIuc29ydChFeHRlbnNpb25NYW5hZ2VyLmZsYXR0ZW4oZXh0ZW5zaW9ucykpO1xyXG4gICAgICAgIGNvbnN0IGR1cGxpY2F0ZWROYW1lcyA9IGZpbmREdXBsaWNhdGVzKHJlc29sdmVkRXh0ZW5zaW9ucy5tYXAoZXh0ZW5zaW9uID0+IGV4dGVuc2lvbi5uYW1lKSk7XHJcbiAgICAgICAgaWYgKGR1cGxpY2F0ZWROYW1lcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGBbdGlwdGFwIHdhcm5dOiBEdXBsaWNhdGUgZXh0ZW5zaW9uIG5hbWVzIGZvdW5kOiBbJHtkdXBsaWNhdGVkTmFtZXNcclxuICAgICAgICAgICAgICAgIC5tYXAoaXRlbSA9PiBgJyR7aXRlbX0nYClcclxuICAgICAgICAgICAgICAgIC5qb2luKCcsICcpfV0uIFRoaXMgY2FuIGxlYWQgdG8gaXNzdWVzLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzb2x2ZWRFeHRlbnNpb25zO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZsYXR0ZW4oZXh0ZW5zaW9ucykge1xyXG4gICAgICAgIHJldHVybiAoZXh0ZW5zaW9uc1xyXG4gICAgICAgICAgICAubWFwKGV4dGVuc2lvbiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBleHRlbnNpb24ubmFtZSxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV4dGVuc2lvbi5vcHRpb25zLFxyXG4gICAgICAgICAgICAgICAgc3RvcmFnZTogZXh0ZW5zaW9uLnN0b3JhZ2UsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGFkZEV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25GaWVsZChleHRlbnNpb24sICdhZGRFeHRlbnNpb25zJywgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChhZGRFeHRlbnNpb25zKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW2V4dGVuc2lvbiwgLi4udGhpcy5mbGF0dGVuKGFkZEV4dGVuc2lvbnMoKSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBleHRlbnNpb247XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLy8gYEluZmluaXR5YCB3aWxsIGJyZWFrIFR5cGVTY3JpcHQgc28gd2Ugc2V0IGEgbnVtYmVyIHRoYXQgaXMgcHJvYmFibHkgaGlnaCBlbm91Z2hcclxuICAgICAgICAgICAgLmZsYXQoMTApKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzb3J0KGV4dGVuc2lvbnMpIHtcclxuICAgICAgICBjb25zdCBkZWZhdWx0UHJpb3JpdHkgPSAxMDA7XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbnMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcmlvcml0eUEgPSBnZXRFeHRlbnNpb25GaWVsZChhLCAncHJpb3JpdHknKSB8fCBkZWZhdWx0UHJpb3JpdHk7XHJcbiAgICAgICAgICAgIGNvbnN0IHByaW9yaXR5QiA9IGdldEV4dGVuc2lvbkZpZWxkKGIsICdwcmlvcml0eScpIHx8IGRlZmF1bHRQcmlvcml0eTtcclxuICAgICAgICAgICAgaWYgKHByaW9yaXR5QSA+IHByaW9yaXR5Qikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcmlvcml0eUEgPCBwcmlvcml0eUIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNvbW1hbmRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV4dGVuc2lvbnMucmVkdWNlKChjb21tYW5kcywgZXh0ZW5zaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBleHRlbnNpb24ubmFtZSxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV4dGVuc2lvbi5vcHRpb25zLFxyXG4gICAgICAgICAgICAgICAgc3RvcmFnZTogZXh0ZW5zaW9uLnN0b3JhZ2UsXHJcbiAgICAgICAgICAgICAgICBlZGl0b3I6IHRoaXMuZWRpdG9yLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogZ2V0U2NoZW1hVHlwZUJ5TmFtZShleHRlbnNpb24ubmFtZSwgdGhpcy5zY2hlbWEpLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBhZGRDb21tYW5kcyA9IGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ2FkZENvbW1hbmRzJywgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmICghYWRkQ29tbWFuZHMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uY29tbWFuZHMsXHJcbiAgICAgICAgICAgICAgICAuLi5hZGRDb21tYW5kcygpLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0sIHt9KTtcclxuICAgIH1cclxuICAgIGdldCBwbHVnaW5zKCkge1xyXG4gICAgICAgIGNvbnN0IHsgZWRpdG9yIH0gPSB0aGlzO1xyXG4gICAgICAgIC8vIFdpdGggUHJvc2VNaXJyb3IsIGZpcnN0IHBsdWdpbnMgd2l0aGluIGFuIGFycmF5IGFyZSBleGVjdXRlZCBmaXJzdC5cclxuICAgICAgICAvLyBJbiBUaXB0YXAsIHdlIHByb3ZpZGUgdGhlIGFiaWxpdHkgdG8gb3ZlcnJpZGUgcGx1Z2lucyxcclxuICAgICAgICAvLyBzbyBpdCBmZWVscyBtb3JlIG5hdHVyYWwgdG8gcnVuIHBsdWdpbnMgYXQgdGhlIGVuZCBvZiBhbiBhcnJheSBmaXJzdC5cclxuICAgICAgICAvLyBUaGF04oCZcyB3aHkgd2UgaGF2ZSB0byByZXZlcnNlIHRoZSBgZXh0ZW5zaW9uc2AgYXJyYXkgYW5kIHNvcnQgYWdhaW5cclxuICAgICAgICAvLyBiYXNlZCBvbiB0aGUgYHByaW9yaXR5YCBvcHRpb24uXHJcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9ucyA9IEV4dGVuc2lvbk1hbmFnZXIuc29ydChbLi4udGhpcy5leHRlbnNpb25zXS5yZXZlcnNlKCkpO1xyXG4gICAgICAgIGNvbnN0IGlucHV0UnVsZXMgPSBbXTtcclxuICAgICAgICBjb25zdCBwYXN0ZVJ1bGVzID0gW107XHJcbiAgICAgICAgY29uc3QgYWxsUGx1Z2lucyA9IGV4dGVuc2lvbnNcclxuICAgICAgICAgICAgLm1hcChleHRlbnNpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogZXh0ZW5zaW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBleHRlbnNpb24ub3B0aW9ucyxcclxuICAgICAgICAgICAgICAgIHN0b3JhZ2U6IGV4dGVuc2lvbi5zdG9yYWdlLFxyXG4gICAgICAgICAgICAgICAgZWRpdG9yLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogZ2V0U2NoZW1hVHlwZUJ5TmFtZShleHRlbnNpb24ubmFtZSwgdGhpcy5zY2hlbWEpLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBwbHVnaW5zID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGFkZEtleWJvYXJkU2hvcnRjdXRzID0gZ2V0RXh0ZW5zaW9uRmllbGQoZXh0ZW5zaW9uLCAnYWRkS2V5Ym9hcmRTaG9ydGN1dHMnLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgbGV0IGRlZmF1bHRCaW5kaW5ncyA9IHt9O1xyXG4gICAgICAgICAgICAvLyBiaW5kIGV4aXQgaGFuZGxpbmdcclxuICAgICAgICAgICAgaWYgKGV4dGVuc2lvbi50eXBlID09PSAnbWFyaycgJiYgZXh0ZW5zaW9uLmNvbmZpZy5leGl0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdEJpbmRpbmdzLkFycm93UmlnaHQgPSAoKSA9PiBNYXJrLmhhbmRsZUV4aXQoeyBlZGl0b3IsIG1hcms6IGV4dGVuc2lvbiB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYWRkS2V5Ym9hcmRTaG9ydGN1dHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJpbmRpbmdzID0gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGFkZEtleWJvYXJkU2hvcnRjdXRzKCkpLm1hcCgoW3Nob3J0Y3V0LCBtZXRob2RdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzaG9ydGN1dCwgKCkgPT4gbWV0aG9kKHsgZWRpdG9yIH0pXTtcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRCaW5kaW5ncyA9IHsgLi4uZGVmYXVsdEJpbmRpbmdzLCAuLi5iaW5kaW5ncyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGtleU1hcFBsdWdpbiA9IGtleW1hcChkZWZhdWx0QmluZGluZ3MpO1xyXG4gICAgICAgICAgICBwbHVnaW5zLnB1c2goa2V5TWFwUGx1Z2luKTtcclxuICAgICAgICAgICAgY29uc3QgYWRkSW5wdXRSdWxlcyA9IGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ2FkZElucHV0UnVsZXMnLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgaWYgKGlzRXh0ZW5zaW9uUnVsZXNFbmFibGVkKGV4dGVuc2lvbiwgZWRpdG9yLm9wdGlvbnMuZW5hYmxlSW5wdXRSdWxlcykgJiYgYWRkSW5wdXRSdWxlcykge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRSdWxlcy5wdXNoKC4uLmFkZElucHV0UnVsZXMoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYWRkUGFzdGVSdWxlcyA9IGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ2FkZFBhc3RlUnVsZXMnLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgaWYgKGlzRXh0ZW5zaW9uUnVsZXNFbmFibGVkKGV4dGVuc2lvbiwgZWRpdG9yLm9wdGlvbnMuZW5hYmxlUGFzdGVSdWxlcykgJiYgYWRkUGFzdGVSdWxlcykge1xyXG4gICAgICAgICAgICAgICAgcGFzdGVSdWxlcy5wdXNoKC4uLmFkZFBhc3RlUnVsZXMoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYWRkUHJvc2VNaXJyb3JQbHVnaW5zID0gZ2V0RXh0ZW5zaW9uRmllbGQoZXh0ZW5zaW9uLCAnYWRkUHJvc2VNaXJyb3JQbHVnaW5zJywgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChhZGRQcm9zZU1pcnJvclBsdWdpbnMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3NlTWlycm9yUGx1Z2lucyA9IGFkZFByb3NlTWlycm9yUGx1Z2lucygpO1xyXG4gICAgICAgICAgICAgICAgcGx1Z2lucy5wdXNoKC4uLnByb3NlTWlycm9yUGx1Z2lucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHBsdWdpbnM7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZsYXQoKTtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBpbnB1dFJ1bGVzUGx1Z2luKHtcclxuICAgICAgICAgICAgICAgIGVkaXRvcixcclxuICAgICAgICAgICAgICAgIHJ1bGVzOiBpbnB1dFJ1bGVzLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgLi4ucGFzdGVSdWxlc1BsdWdpbih7XHJcbiAgICAgICAgICAgICAgICBlZGl0b3IsXHJcbiAgICAgICAgICAgICAgICBydWxlczogcGFzdGVSdWxlcyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIC4uLmFsbFBsdWdpbnMsXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuICAgIGdldCBhdHRyaWJ1dGVzKCkge1xyXG4gICAgICAgIHJldHVybiBnZXRBdHRyaWJ1dGVzRnJvbUV4dGVuc2lvbnModGhpcy5leHRlbnNpb25zKTtcclxuICAgIH1cclxuICAgIGdldCBub2RlVmlld3MoKSB7XHJcbiAgICAgICAgY29uc3QgeyBlZGl0b3IgfSA9IHRoaXM7XHJcbiAgICAgICAgY29uc3QgeyBub2RlRXh0ZW5zaW9ucyB9ID0gc3BsaXRFeHRlbnNpb25zKHRoaXMuZXh0ZW5zaW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhub2RlRXh0ZW5zaW9uc1xyXG4gICAgICAgICAgICAuZmlsdGVyKGV4dGVuc2lvbiA9PiAhIWdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ2FkZE5vZGVWaWV3JykpXHJcbiAgICAgICAgICAgIC5tYXAoZXh0ZW5zaW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZXh0ZW5zaW9uQXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcy5maWx0ZXIoYXR0cmlidXRlID0+IGF0dHJpYnV0ZS50eXBlID09PSBleHRlbnNpb24ubmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBleHRlbnNpb24ubmFtZSxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV4dGVuc2lvbi5vcHRpb25zLFxyXG4gICAgICAgICAgICAgICAgc3RvcmFnZTogZXh0ZW5zaW9uLnN0b3JhZ2UsXHJcbiAgICAgICAgICAgICAgICBlZGl0b3IsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBnZXROb2RlVHlwZShleHRlbnNpb24ubmFtZSwgdGhpcy5zY2hlbWEpLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBhZGROb2RlVmlldyA9IGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ2FkZE5vZGVWaWV3JywgY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmICghYWRkTm9kZVZpZXcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBub2RldmlldyA9IChub2RlLCB2aWV3LCBnZXRQb3MsIGRlY29yYXRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBIVE1MQXR0cmlidXRlcyA9IGdldFJlbmRlcmVkQXR0cmlidXRlcyhub2RlLCBleHRlbnNpb25BdHRyaWJ1dGVzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGROb2RlVmlldygpKHtcclxuICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBnZXRQb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVjb3JhdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgSFRNTEF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBbZXh0ZW5zaW9uLm5hbWUsIG5vZGV2aWV3XTtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcbn1cblxuLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vbWVzcXVlZWIvaXMtd2hhdC9ibG9iLzg4ZDZlNGNhOTJmYjJiYWFiNjAwM2M1NGUwMmVlZGY0ZTcyOWU1YWIvc3JjL2luZGV4LnRzXHJcbmZ1bmN0aW9uIGdldFR5cGUodmFsdWUpIHtcclxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKTtcclxufVxyXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XHJcbiAgICBpZiAoZ2V0VHlwZSh2YWx1ZSkgIT09ICdPYmplY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlLmNvbnN0cnVjdG9yID09PSBPYmplY3QgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA9PT0gT2JqZWN0LnByb3RvdHlwZTtcclxufVxuXG5mdW5jdGlvbiBtZXJnZURlZXAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgIGNvbnN0IG91dHB1dCA9IHsgLi4udGFyZ2V0IH07XHJcbiAgICBpZiAoaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIGlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNQbGFpbk9iamVjdChzb3VyY2Vba2V5XSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiB0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihvdXRwdXQsIHsgW2tleV06IHNvdXJjZVtrZXldIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2tleV0gPSBtZXJnZURlZXAodGFyZ2V0W2tleV0sIHNvdXJjZVtrZXldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ob3V0cHV0LCB7IFtrZXldOiBzb3VyY2Vba2V5XSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufVxuXG5jbGFzcyBFeHRlbnNpb24ge1xyXG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcclxuICAgICAgICB0aGlzLnR5cGUgPSAnZXh0ZW5zaW9uJztcclxuICAgICAgICB0aGlzLm5hbWUgPSAnZXh0ZW5zaW9uJztcclxuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jaGlsZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICAgICAgZGVmYXVsdE9wdGlvbnM6IHt9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuY29uZmlnLFxyXG4gICAgICAgICAgICAuLi5jb25maWcsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbmZpZy5uYW1lO1xyXG4gICAgICAgIGlmIChjb25maWcuZGVmYXVsdE9wdGlvbnMpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGBbdGlwdGFwIHdhcm5dOiBCUkVBS0lORyBDSEFOR0U6IFwiZGVmYXVsdE9wdGlvbnNcIiBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIFwiYWRkT3B0aW9uc1wiIGluc3RlYWQuIEZvdW5kIGluIGV4dGVuc2lvbjogXCIke3RoaXMubmFtZX1cIi5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETzogcmVtb3ZlIGBhZGRPcHRpb25zYCBmYWxsYmFja1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuY29uZmlnLmRlZmF1bHRPcHRpb25zO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5hZGRPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IGNhbGxPclJldHVybihnZXRFeHRlbnNpb25GaWVsZCh0aGlzLCAnYWRkT3B0aW9ucycsIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0b3JhZ2UgPSBjYWxsT3JSZXR1cm4oZ2V0RXh0ZW5zaW9uRmllbGQodGhpcywgJ2FkZFN0b3JhZ2UnLCB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxyXG4gICAgICAgIH0pKSB8fCB7fTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjcmVhdGUoY29uZmlnID0ge30pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEV4dGVuc2lvbihjb25maWcpO1xyXG4gICAgfVxyXG4gICAgY29uZmlndXJlKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIC8vIHJldHVybiBhIG5ldyBpbnN0YW5jZSBzbyB3ZSBjYW4gdXNlIHRoZSBzYW1lIGV4dGVuc2lvblxyXG4gICAgICAgIC8vIHdpdGggZGlmZmVyZW50IGNhbGxzIG9mIGBjb25maWd1cmVgXHJcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gdGhpcy5leHRlbmQoKTtcclxuICAgICAgICBleHRlbnNpb24ub3B0aW9ucyA9IG1lcmdlRGVlcCh0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xyXG4gICAgICAgIGV4dGVuc2lvbi5zdG9yYWdlID0gY2FsbE9yUmV0dXJuKGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ2FkZFN0b3JhZ2UnLCB7XHJcbiAgICAgICAgICAgIG5hbWU6IGV4dGVuc2lvbi5uYW1lLFxyXG4gICAgICAgICAgICBvcHRpb25zOiBleHRlbnNpb24ub3B0aW9ucyxcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbjtcclxuICAgIH1cclxuICAgIGV4dGVuZChleHRlbmRlZENvbmZpZyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gbmV3IEV4dGVuc2lvbihleHRlbmRlZENvbmZpZyk7XHJcbiAgICAgICAgZXh0ZW5zaW9uLnBhcmVudCA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5jaGlsZCA9IGV4dGVuc2lvbjtcclxuICAgICAgICBleHRlbnNpb24ubmFtZSA9IGV4dGVuZGVkQ29uZmlnLm5hbWUgPyBleHRlbmRlZENvbmZpZy5uYW1lIDogZXh0ZW5zaW9uLnBhcmVudC5uYW1lO1xyXG4gICAgICAgIGlmIChleHRlbmRlZENvbmZpZy5kZWZhdWx0T3B0aW9ucykge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFt0aXB0YXAgd2Fybl06IEJSRUFLSU5HIENIQU5HRTogXCJkZWZhdWx0T3B0aW9uc1wiIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgXCJhZGRPcHRpb25zXCIgaW5zdGVhZC4gRm91bmQgaW4gZXh0ZW5zaW9uOiBcIiR7ZXh0ZW5zaW9uLm5hbWV9XCIuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV4dGVuc2lvbi5vcHRpb25zID0gY2FsbE9yUmV0dXJuKGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ2FkZE9wdGlvbnMnLCB7XHJcbiAgICAgICAgICAgIG5hbWU6IGV4dGVuc2lvbi5uYW1lLFxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBleHRlbnNpb24uc3RvcmFnZSA9IGNhbGxPclJldHVybihnZXRFeHRlbnNpb25GaWVsZChleHRlbnNpb24sICdhZGRTdG9yYWdlJywge1xyXG4gICAgICAgICAgICBuYW1lOiBleHRlbnNpb24ubmFtZSxcclxuICAgICAgICAgICAgb3B0aW9uczogZXh0ZW5zaW9uLm9wdGlvbnMsXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHJldHVybiBleHRlbnNpb247XHJcbiAgICB9XHJcbn1cblxuZnVuY3Rpb24gZ2V0VGV4dEJldHdlZW4oc3RhcnROb2RlLCByYW5nZSwgb3B0aW9ucykge1xyXG4gICAgY29uc3QgeyBmcm9tLCB0byB9ID0gcmFuZ2U7XHJcbiAgICBjb25zdCB7IGJsb2NrU2VwYXJhdG9yID0gJ1xcblxcbicsIHRleHRTZXJpYWxpemVycyA9IHt9IH0gPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgbGV0IHRleHQgPSAnJztcclxuICAgIGxldCBzZXBhcmF0ZWQgPSB0cnVlO1xyXG4gICAgc3RhcnROb2RlLm5vZGVzQmV0d2Vlbihmcm9tLCB0bywgKG5vZGUsIHBvcywgcGFyZW50LCBpbmRleCkgPT4ge1xyXG4gICAgICAgIHZhciBfYTtcclxuICAgICAgICBjb25zdCB0ZXh0U2VyaWFsaXplciA9IHRleHRTZXJpYWxpemVycyA9PT0gbnVsbCB8fCB0ZXh0U2VyaWFsaXplcnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTZXJpYWxpemVyc1tub2RlLnR5cGUubmFtZV07XHJcbiAgICAgICAgaWYgKHRleHRTZXJpYWxpemVyKSB7XHJcbiAgICAgICAgICAgIGlmIChub2RlLmlzQmxvY2sgJiYgIXNlcGFyYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgdGV4dCArPSBibG9ja1NlcGFyYXRvcjtcclxuICAgICAgICAgICAgICAgIHNlcGFyYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGV4dCArPSB0ZXh0U2VyaWFsaXplcih7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBwb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGluZGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobm9kZS5pc1RleHQpIHtcclxuICAgICAgICAgICAgdGV4dCArPSAoX2EgPSBub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5vZGUudGV4dCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNsaWNlKE1hdGgubWF4KGZyb20sIHBvcykgLSBwb3MsIHRvIC0gcG9zKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxyXG4gICAgICAgICAgICBzZXBhcmF0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobm9kZS5pc0Jsb2NrICYmICFzZXBhcmF0ZWQpIHtcclxuICAgICAgICAgICAgdGV4dCArPSBibG9ja1NlcGFyYXRvcjtcclxuICAgICAgICAgICAgc2VwYXJhdGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0ZXh0O1xyXG59XG5cbmZ1bmN0aW9uIGdldFRleHRTZXJpYWxpemVyc0Zyb21TY2hlbWEoc2NoZW1hKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHNjaGVtYS5ub2RlcylcclxuICAgICAgICAuZmlsdGVyKChbLCBub2RlXSkgPT4gbm9kZS5zcGVjLnRvVGV4dClcclxuICAgICAgICAubWFwKChbbmFtZSwgbm9kZV0pID0+IFtuYW1lLCBub2RlLnNwZWMudG9UZXh0XSkpO1xyXG59XG5cbmNvbnN0IENsaXBib2FyZFRleHRTZXJpYWxpemVyID0gRXh0ZW5zaW9uLmNyZWF0ZSh7XHJcbiAgICBuYW1lOiAnY2xpcGJvYXJkVGV4dFNlcmlhbGl6ZXInLFxyXG4gICAgYWRkUHJvc2VNaXJyb3JQbHVnaW5zKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIG5ldyBQbHVnaW4oe1xyXG4gICAgICAgICAgICAgICAga2V5OiBuZXcgUGx1Z2luS2V5KCdjbGlwYm9hcmRUZXh0U2VyaWFsaXplcicpLFxyXG4gICAgICAgICAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBjbGlwYm9hcmRUZXh0U2VyaWFsaXplcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGVkaXRvciB9ID0gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBzdGF0ZSwgc2NoZW1hIH0gPSBlZGl0b3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZG9jLCBzZWxlY3Rpb24gfSA9IHN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHJhbmdlcyB9ID0gc2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmcm9tID0gTWF0aC5taW4oLi4ucmFuZ2VzLm1hcChyYW5nZSA9PiByYW5nZS4kZnJvbS5wb3MpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG8gPSBNYXRoLm1heCguLi5yYW5nZXMubWFwKHJhbmdlID0+IHJhbmdlLiR0by5wb3MpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dFNlcmlhbGl6ZXJzID0gZ2V0VGV4dFNlcmlhbGl6ZXJzRnJvbVNjaGVtYShzY2hlbWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IHsgZnJvbSwgdG8gfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFRleHRCZXR3ZWVuKGRvYywgcmFuZ2UsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTZXJpYWxpemVycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG59KTtcblxuY29uc3QgYmx1ciA9ICgpID0+ICh7IGVkaXRvciwgdmlldyB9KSA9PiB7XHJcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgIHZhciBfYTtcclxuICAgICAgICBpZiAoIWVkaXRvci5pc0Rlc3Ryb3llZCkge1xyXG4gICAgICAgICAgICB2aWV3LmRvbS5ibHVyKCk7XHJcbiAgICAgICAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCByZW1vdmUgdGhlIGNhcmV0IG9uIGJsdXIgYnV0IHNhZmFyaSBkb2VzIG5vdC5cclxuICAgICAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdWViZXJkb3Npcy90aXB0YXAvaXNzdWVzLzI0MDVcclxuICAgICAgICAgICAgKF9hID0gd2luZG93ID09PSBudWxsIHx8IHdpbmRvdyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luZG93LmdldFNlbGVjdGlvbigpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcblxuY29uc3QgY2xlYXJDb250ZW50ID0gKGVtaXRVcGRhdGUgPSBmYWxzZSkgPT4gKHsgY29tbWFuZHMgfSkgPT4ge1xyXG4gICAgcmV0dXJuIGNvbW1hbmRzLnNldENvbnRlbnQoJycsIGVtaXRVcGRhdGUpO1xyXG59O1xuXG5jb25zdCBjbGVhck5vZGVzID0gKCkgPT4gKHsgc3RhdGUsIHRyLCBkaXNwYXRjaCB9KSA9PiB7XHJcbiAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gdHI7XHJcbiAgICBjb25zdCB7IHJhbmdlcyB9ID0gc2VsZWN0aW9uO1xyXG4gICAgaWYgKCFkaXNwYXRjaCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmFuZ2VzLmZvckVhY2goKHsgJGZyb20sICR0byB9KSA9PiB7XHJcbiAgICAgICAgc3RhdGUuZG9jLm5vZGVzQmV0d2VlbigkZnJvbS5wb3MsICR0by5wb3MsIChub2RlLCBwb3MpID0+IHtcclxuICAgICAgICAgICAgaWYgKG5vZGUudHlwZS5pc1RleHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB7IGRvYywgbWFwcGluZyB9ID0gdHI7XHJcbiAgICAgICAgICAgIGNvbnN0ICRtYXBwZWRGcm9tID0gZG9jLnJlc29sdmUobWFwcGluZy5tYXAocG9zKSk7XHJcbiAgICAgICAgICAgIGNvbnN0ICRtYXBwZWRUbyA9IGRvYy5yZXNvbHZlKG1hcHBpbmcubWFwKHBvcyArIG5vZGUubm9kZVNpemUpKTtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZVJhbmdlID0gJG1hcHBlZEZyb20uYmxvY2tSYW5nZSgkbWFwcGVkVG8pO1xyXG4gICAgICAgICAgICBpZiAoIW5vZGVSYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldExpZnREZXB0aCA9IGxpZnRUYXJnZXQobm9kZVJhbmdlKTtcclxuICAgICAgICAgICAgaWYgKG5vZGUudHlwZS5pc1RleHRibG9jaykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBkZWZhdWx0VHlwZSB9ID0gJG1hcHBlZEZyb20ucGFyZW50LmNvbnRlbnRNYXRjaEF0KCRtYXBwZWRGcm9tLmluZGV4KCkpO1xyXG4gICAgICAgICAgICAgICAgdHIuc2V0Tm9kZU1hcmt1cChub2RlUmFuZ2Uuc3RhcnQsIGRlZmF1bHRUeXBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0TGlmdERlcHRoIHx8IHRhcmdldExpZnREZXB0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdHIubGlmdChub2RlUmFuZ2UsIHRhcmdldExpZnREZXB0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XG5cbmNvbnN0IGNvbW1hbmQgPSBmbiA9PiBwcm9wcyA9PiB7XHJcbiAgICByZXR1cm4gZm4ocHJvcHMpO1xyXG59O1xuXG5jb25zdCBjcmVhdGVQYXJhZ3JhcGhOZWFyID0gKCkgPT4gKHsgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgIHJldHVybiBjcmVhdGVQYXJhZ3JhcGhOZWFyJDEoc3RhdGUsIGRpc3BhdGNoKTtcclxufTtcblxuY29uc3QgY3V0ID0gKG9yaWdpblJhbmdlLCB0YXJnZXRQb3MpID0+ICh7IGVkaXRvciwgdHIgfSkgPT4ge1xyXG4gICAgY29uc3QgeyBzdGF0ZSB9ID0gZWRpdG9yO1xyXG4gICAgY29uc3QgY29udGVudFNsaWNlID0gc3RhdGUuZG9jLnNsaWNlKG9yaWdpblJhbmdlLmZyb20sIG9yaWdpblJhbmdlLnRvKTtcclxuICAgIHRyLmRlbGV0ZVJhbmdlKG9yaWdpblJhbmdlLmZyb20sIG9yaWdpblJhbmdlLnRvKTtcclxuICAgIGNvbnN0IG5ld1BvcyA9IHRyLm1hcHBpbmcubWFwKHRhcmdldFBvcyk7XHJcbiAgICB0ci5pbnNlcnQobmV3UG9zLCBjb250ZW50U2xpY2UuY29udGVudCk7XHJcbiAgICB0ci5zZXRTZWxlY3Rpb24obmV3IFRleHRTZWxlY3Rpb24odHIuZG9jLnJlc29sdmUobmV3UG9zIC0gMSkpKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xuXG5jb25zdCBkZWxldGVDdXJyZW50Tm9kZSA9ICgpID0+ICh7IHRyLCBkaXNwYXRjaCB9KSA9PiB7XHJcbiAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gdHI7XHJcbiAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHNlbGVjdGlvbi4kYW5jaG9yLm5vZGUoKTtcclxuICAgIC8vIGlmIHRoZXJlIGlzIGNvbnRlbnQgaW5zaWRlIHRoZSBjdXJyZW50IG5vZGUsIGJyZWFrIG91dCBvZiB0aGlzIGNvbW1hbmRcclxuICAgIGlmIChjdXJyZW50Tm9kZS5jb250ZW50LnNpemUgPiAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgJHBvcyA9IHRyLnNlbGVjdGlvbi4kYW5jaG9yO1xyXG4gICAgZm9yIChsZXQgZGVwdGggPSAkcG9zLmRlcHRoOyBkZXB0aCA+IDA7IGRlcHRoIC09IDEpIHtcclxuICAgICAgICBjb25zdCBub2RlID0gJHBvcy5ub2RlKGRlcHRoKTtcclxuICAgICAgICBpZiAobm9kZS50eXBlID09PSBjdXJyZW50Tm9kZS50eXBlKSB7XHJcbiAgICAgICAgICAgIGlmIChkaXNwYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZnJvbSA9ICRwb3MuYmVmb3JlKGRlcHRoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRvID0gJHBvcy5hZnRlcihkZXB0aCk7XHJcbiAgICAgICAgICAgICAgICB0ci5kZWxldGUoZnJvbSwgdG8pLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59O1xuXG5jb25zdCBkZWxldGVOb2RlID0gdHlwZU9yTmFtZSA9PiAoeyB0ciwgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgIGNvbnN0IHR5cGUgPSBnZXROb2RlVHlwZSh0eXBlT3JOYW1lLCBzdGF0ZS5zY2hlbWEpO1xyXG4gICAgY29uc3QgJHBvcyA9IHRyLnNlbGVjdGlvbi4kYW5jaG9yO1xyXG4gICAgZm9yIChsZXQgZGVwdGggPSAkcG9zLmRlcHRoOyBkZXB0aCA+IDA7IGRlcHRoIC09IDEpIHtcclxuICAgICAgICBjb25zdCBub2RlID0gJHBvcy5ub2RlKGRlcHRoKTtcclxuICAgICAgICBpZiAobm9kZS50eXBlID09PSB0eXBlKSB7XHJcbiAgICAgICAgICAgIGlmIChkaXNwYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZnJvbSA9ICRwb3MuYmVmb3JlKGRlcHRoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRvID0gJHBvcy5hZnRlcihkZXB0aCk7XHJcbiAgICAgICAgICAgICAgICB0ci5kZWxldGUoZnJvbSwgdG8pLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59O1xuXG5jb25zdCBkZWxldGVSYW5nZSA9IHJhbmdlID0+ICh7IHRyLCBkaXNwYXRjaCB9KSA9PiB7XHJcbiAgICBjb25zdCB7IGZyb20sIHRvIH0gPSByYW5nZTtcclxuICAgIGlmIChkaXNwYXRjaCkge1xyXG4gICAgICAgIHRyLmRlbGV0ZShmcm9tLCB0byk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcblxuY29uc3QgZGVsZXRlU2VsZWN0aW9uID0gKCkgPT4gKHsgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgIHJldHVybiBkZWxldGVTZWxlY3Rpb24kMShzdGF0ZSwgZGlzcGF0Y2gpO1xyXG59O1xuXG5jb25zdCBlbnRlciA9ICgpID0+ICh7IGNvbW1hbmRzIH0pID0+IHtcclxuICAgIHJldHVybiBjb21tYW5kcy5rZXlib2FyZFNob3J0Y3V0KCdFbnRlcicpO1xyXG59O1xuXG5jb25zdCBleGl0Q29kZSA9ICgpID0+ICh7IHN0YXRlLCBkaXNwYXRjaCB9KSA9PiB7XHJcbiAgICByZXR1cm4gZXhpdENvZGUkMShzdGF0ZSwgZGlzcGF0Y2gpO1xyXG59O1xuXG4vKipcclxuICogQ2hlY2sgaWYgb2JqZWN0MSBpbmNsdWRlcyBvYmplY3QyXHJcbiAqIEBwYXJhbSBvYmplY3QxIE9iamVjdFxyXG4gKiBAcGFyYW0gb2JqZWN0MiBPYmplY3RcclxuICovXHJcbmZ1bmN0aW9uIG9iamVjdEluY2x1ZGVzKG9iamVjdDEsIG9iamVjdDIsIG9wdGlvbnMgPSB7IHN0cmljdDogdHJ1ZSB9KSB7XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0Mik7XHJcbiAgICBpZiAoIWtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ga2V5cy5ldmVyeShrZXkgPT4ge1xyXG4gICAgICAgIGlmIChvcHRpb25zLnN0cmljdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0MltrZXldID09PSBvYmplY3QxW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1JlZ0V4cChvYmplY3QyW2tleV0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmplY3QyW2tleV0udGVzdChvYmplY3QxW2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2JqZWN0MltrZXldID09PSBvYmplY3QxW2tleV07XHJcbiAgICB9KTtcclxufVxuXG5mdW5jdGlvbiBmaW5kTWFya0luU2V0KG1hcmtzLCB0eXBlLCBhdHRyaWJ1dGVzID0ge30pIHtcclxuICAgIHJldHVybiBtYXJrcy5maW5kKGl0ZW0gPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09IHR5cGUgJiYgb2JqZWN0SW5jbHVkZXMoaXRlbS5hdHRycywgYXR0cmlidXRlcyk7XHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiBpc01hcmtJblNldChtYXJrcywgdHlwZSwgYXR0cmlidXRlcyA9IHt9KSB7XHJcbiAgICByZXR1cm4gISFmaW5kTWFya0luU2V0KG1hcmtzLCB0eXBlLCBhdHRyaWJ1dGVzKTtcclxufVxyXG5mdW5jdGlvbiBnZXRNYXJrUmFuZ2UoJHBvcywgdHlwZSwgYXR0cmlidXRlcyA9IHt9KSB7XHJcbiAgICBpZiAoISRwb3MgfHwgIXR5cGUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgc3RhcnQgPSAkcG9zLnBhcmVudC5jaGlsZEFmdGVyKCRwb3MucGFyZW50T2Zmc2V0KTtcclxuICAgIGlmICgkcG9zLnBhcmVudE9mZnNldCA9PT0gc3RhcnQub2Zmc2V0ICYmIHN0YXJ0Lm9mZnNldCAhPT0gMCkge1xyXG4gICAgICAgIHN0YXJ0ID0gJHBvcy5wYXJlbnQuY2hpbGRCZWZvcmUoJHBvcy5wYXJlbnRPZmZzZXQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFzdGFydC5ub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWFyayA9IGZpbmRNYXJrSW5TZXQoWy4uLnN0YXJ0Lm5vZGUubWFya3NdLCB0eXBlLCBhdHRyaWJ1dGVzKTtcclxuICAgIGlmICghbWFyaykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBzdGFydEluZGV4ID0gc3RhcnQuaW5kZXg7XHJcbiAgICBsZXQgc3RhcnRQb3MgPSAkcG9zLnN0YXJ0KCkgKyBzdGFydC5vZmZzZXQ7XHJcbiAgICBsZXQgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgMTtcclxuICAgIGxldCBlbmRQb3MgPSBzdGFydFBvcyArIHN0YXJ0Lm5vZGUubm9kZVNpemU7XHJcbiAgICBmaW5kTWFya0luU2V0KFsuLi5zdGFydC5ub2RlLm1hcmtzXSwgdHlwZSwgYXR0cmlidXRlcyk7XHJcbiAgICB3aGlsZSAoc3RhcnRJbmRleCA+IDAgJiYgbWFyay5pc0luU2V0KCRwb3MucGFyZW50LmNoaWxkKHN0YXJ0SW5kZXggLSAxKS5tYXJrcykpIHtcclxuICAgICAgICBzdGFydEluZGV4IC09IDE7XHJcbiAgICAgICAgc3RhcnRQb3MgLT0gJHBvcy5wYXJlbnQuY2hpbGQoc3RhcnRJbmRleCkubm9kZVNpemU7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoZW5kSW5kZXggPCAkcG9zLnBhcmVudC5jaGlsZENvdW50XHJcbiAgICAgICAgJiYgaXNNYXJrSW5TZXQoWy4uLiRwb3MucGFyZW50LmNoaWxkKGVuZEluZGV4KS5tYXJrc10sIHR5cGUsIGF0dHJpYnV0ZXMpKSB7XHJcbiAgICAgICAgZW5kUG9zICs9ICRwb3MucGFyZW50LmNoaWxkKGVuZEluZGV4KS5ub2RlU2l6ZTtcclxuICAgICAgICBlbmRJbmRleCArPSAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBmcm9tOiBzdGFydFBvcyxcclxuICAgICAgICB0bzogZW5kUG9zLFxyXG4gICAgfTtcclxufVxuXG5mdW5jdGlvbiBnZXRNYXJrVHlwZShuYW1lT3JUeXBlLCBzY2hlbWEpIHtcclxuICAgIGlmICh0eXBlb2YgbmFtZU9yVHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBpZiAoIXNjaGVtYS5tYXJrc1tuYW1lT3JUeXBlXSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgVGhlcmUgaXMgbm8gbWFyayB0eXBlIG5hbWVkICcke25hbWVPclR5cGV9Jy4gTWF5YmUgeW91IGZvcmdvdCB0byBhZGQgdGhlIGV4dGVuc2lvbj9gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNjaGVtYS5tYXJrc1tuYW1lT3JUeXBlXTtcclxuICAgIH1cclxuICAgIHJldHVybiBuYW1lT3JUeXBlO1xyXG59XG5cbmNvbnN0IGV4dGVuZE1hcmtSYW5nZSA9ICh0eXBlT3JOYW1lLCBhdHRyaWJ1dGVzID0ge30pID0+ICh7IHRyLCBzdGF0ZSwgZGlzcGF0Y2ggfSkgPT4ge1xyXG4gICAgY29uc3QgdHlwZSA9IGdldE1hcmtUeXBlKHR5cGVPck5hbWUsIHN0YXRlLnNjaGVtYSk7XHJcbiAgICBjb25zdCB7IGRvYywgc2VsZWN0aW9uIH0gPSB0cjtcclxuICAgIGNvbnN0IHsgJGZyb20sIGZyb20sIHRvIH0gPSBzZWxlY3Rpb247XHJcbiAgICBpZiAoZGlzcGF0Y2gpIHtcclxuICAgICAgICBjb25zdCByYW5nZSA9IGdldE1hcmtSYW5nZSgkZnJvbSwgdHlwZSwgYXR0cmlidXRlcyk7XHJcbiAgICAgICAgaWYgKHJhbmdlICYmIHJhbmdlLmZyb20gPD0gZnJvbSAmJiByYW5nZS50byA+PSB0bykge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBUZXh0U2VsZWN0aW9uLmNyZWF0ZShkb2MsIHJhbmdlLmZyb20sIHJhbmdlLnRvKTtcclxuICAgICAgICAgICAgdHIuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XG5cbmNvbnN0IGZpcnN0ID0gY29tbWFuZHMgPT4gcHJvcHMgPT4ge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0eXBlb2YgY29tbWFuZHMgPT09ICdmdW5jdGlvbidcclxuICAgICAgICA/IGNvbW1hbmRzKHByb3BzKVxyXG4gICAgICAgIDogY29tbWFuZHM7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgaWYgKGl0ZW1zW2ldKHByb3BzKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn07XG5cbmZ1bmN0aW9uIGlzVGV4dFNlbGVjdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGV4dFNlbGVjdGlvbjtcclxufVxuXG5mdW5jdGlvbiBtaW5NYXgodmFsdWUgPSAwLCBtaW4gPSAwLCBtYXggPSAwKSB7XHJcbiAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgodmFsdWUsIG1pbiksIG1heCk7XHJcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUZvY3VzUG9zaXRpb24oZG9jLCBwb3NpdGlvbiA9IG51bGwpIHtcclxuICAgIGlmICghcG9zaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGlvbkF0U3RhcnQgPSBTZWxlY3Rpb24uYXRTdGFydChkb2MpO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uQXRFbmQgPSBTZWxlY3Rpb24uYXRFbmQoZG9jKTtcclxuICAgIGlmIChwb3NpdGlvbiA9PT0gJ3N0YXJ0JyB8fCBwb3NpdGlvbiA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiBzZWxlY3Rpb25BdFN0YXJ0O1xyXG4gICAgfVxyXG4gICAgaWYgKHBvc2l0aW9uID09PSAnZW5kJykge1xyXG4gICAgICAgIHJldHVybiBzZWxlY3Rpb25BdEVuZDtcclxuICAgIH1cclxuICAgIGNvbnN0IG1pblBvcyA9IHNlbGVjdGlvbkF0U3RhcnQuZnJvbTtcclxuICAgIGNvbnN0IG1heFBvcyA9IHNlbGVjdGlvbkF0RW5kLnRvO1xyXG4gICAgaWYgKHBvc2l0aW9uID09PSAnYWxsJykge1xyXG4gICAgICAgIHJldHVybiBUZXh0U2VsZWN0aW9uLmNyZWF0ZShkb2MsIG1pbk1heCgwLCBtaW5Qb3MsIG1heFBvcyksIG1pbk1heChkb2MuY29udGVudC5zaXplLCBtaW5Qb3MsIG1heFBvcykpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFRleHRTZWxlY3Rpb24uY3JlYXRlKGRvYywgbWluTWF4KHBvc2l0aW9uLCBtaW5Qb3MsIG1heFBvcyksIG1pbk1heChwb3NpdGlvbiwgbWluUG9zLCBtYXhQb3MpKTtcclxufVxuXG5mdW5jdGlvbiBpc2lPUygpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgJ2lQYWQgU2ltdWxhdG9yJyxcclxuICAgICAgICAnaVBob25lIFNpbXVsYXRvcicsXHJcbiAgICAgICAgJ2lQb2QgU2ltdWxhdG9yJyxcclxuICAgICAgICAnaVBhZCcsXHJcbiAgICAgICAgJ2lQaG9uZScsXHJcbiAgICAgICAgJ2lQb2QnLFxyXG4gICAgXS5pbmNsdWRlcyhuYXZpZ2F0b3IucGxhdGZvcm0pXHJcbiAgICAgICAgLy8gaVBhZCBvbiBpT1MgMTMgZGV0ZWN0aW9uXHJcbiAgICAgICAgfHwgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoJ01hYycpICYmICdvbnRvdWNoZW5kJyBpbiBkb2N1bWVudCk7XHJcbn1cblxuY29uc3QgZm9jdXMgPSAocG9zaXRpb24gPSBudWxsLCBvcHRpb25zID0ge30pID0+ICh7IGVkaXRvciwgdmlldywgdHIsIGRpc3BhdGNoLCB9KSA9PiB7XHJcbiAgICBvcHRpb25zID0ge1xyXG4gICAgICAgIHNjcm9sbEludG9WaWV3OiB0cnVlLFxyXG4gICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgZGVsYXllZEZvY3VzID0gKCkgPT4ge1xyXG4gICAgICAgIC8vIGZvY3VzIHdpdGhpbiBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBicmVha3MgZm9jdXMgb24gaU9TXHJcbiAgICAgICAgLy8gc28gd2UgaGF2ZSB0byBjYWxsIHRoaXNcclxuICAgICAgICBpZiAoaXNpT1MoKSkge1xyXG4gICAgICAgICAgICB2aWV3LmRvbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBGb3IgUmVhY3Qgd2UgaGF2ZSB0byBmb2N1cyBhc3luY2hyb25vdXNseS4gT3RoZXJ3aXNlIHdpbGQgdGhpbmdzIGhhcHBlbi5cclxuICAgICAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS91ZWJlcmRvc2lzL3RpcHRhcC9pc3N1ZXMvMTUyMFxyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZWRpdG9yLmlzRGVzdHJveWVkKSB7XHJcbiAgICAgICAgICAgICAgICB2aWV3LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNjcm9sbEludG9WaWV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmNvbW1hbmRzLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBpZiAoKHZpZXcuaGFzRm9jdXMoKSAmJiBwb3NpdGlvbiA9PT0gbnVsbCkgfHwgcG9zaXRpb24gPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAvLyB3ZSBkb27igJl0IHRyeSB0byByZXNvbHZlIGEgTm9kZVNlbGVjdGlvbiBvciBDZWxsU2VsZWN0aW9uXHJcbiAgICBpZiAoZGlzcGF0Y2ggJiYgcG9zaXRpb24gPT09IG51bGwgJiYgIWlzVGV4dFNlbGVjdGlvbihlZGl0b3Iuc3RhdGUuc2VsZWN0aW9uKSkge1xyXG4gICAgICAgIGRlbGF5ZWRGb2N1cygpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLy8gcGFzcyB0aHJvdWdoIHRyLmRvYyBpbnN0ZWFkIG9mIGVkaXRvci5zdGF0ZS5kb2NcclxuICAgIC8vIHNpbmNlIHRyYW5zYWN0aW9ucyBjb3VsZCBjaGFuZ2UgdGhlIGVkaXRvcnMgc3RhdGUgYmVmb3JlIHRoaXMgY29tbWFuZCBoYXMgYmVlbiBydW5cclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHJlc29sdmVGb2N1c1Bvc2l0aW9uKHRyLmRvYywgcG9zaXRpb24pIHx8IGVkaXRvci5zdGF0ZS5zZWxlY3Rpb247XHJcbiAgICBjb25zdCBpc1NhbWVTZWxlY3Rpb24gPSBlZGl0b3Iuc3RhdGUuc2VsZWN0aW9uLmVxKHNlbGVjdGlvbik7XHJcbiAgICBpZiAoZGlzcGF0Y2gpIHtcclxuICAgICAgICBpZiAoIWlzU2FtZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICB0ci5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gYHRyLnNldFNlbGVjdGlvbmAgcmVzZXRzIHRoZSBzdG9yZWQgbWFya3NcclxuICAgICAgICAvLyBzbyB3ZeKAmWxsIHJlc3RvcmUgdGhlbSBpZiB0aGUgc2VsZWN0aW9uIGlzIHRoZSBzYW1lIGFzIGJlZm9yZVxyXG4gICAgICAgIGlmIChpc1NhbWVTZWxlY3Rpb24gJiYgdHIuc3RvcmVkTWFya3MpIHtcclxuICAgICAgICAgICAgdHIuc2V0U3RvcmVkTWFya3ModHIuc3RvcmVkTWFya3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZWxheWVkRm9jdXMoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xuXG5jb25zdCBmb3JFYWNoID0gKGl0ZW1zLCBmbikgPT4gcHJvcHMgPT4ge1xyXG4gICAgcmV0dXJuIGl0ZW1zLmV2ZXJ5KChpdGVtLCBpbmRleCkgPT4gZm4oaXRlbSwgeyAuLi5wcm9wcywgaW5kZXggfSkpO1xyXG59O1xuXG5jb25zdCBpbnNlcnRDb250ZW50ID0gKHZhbHVlLCBvcHRpb25zKSA9PiAoeyB0ciwgY29tbWFuZHMgfSkgPT4ge1xyXG4gICAgcmV0dXJuIGNvbW1hbmRzLmluc2VydENvbnRlbnRBdCh7IGZyb206IHRyLnNlbGVjdGlvbi5mcm9tLCB0bzogdHIuc2VsZWN0aW9uLnRvIH0sIHZhbHVlLCBvcHRpb25zKTtcclxufTtcblxuZnVuY3Rpb24gZWxlbWVudEZyb21TdHJpbmcodmFsdWUpIHtcclxuICAgIC8vIGFkZCBhIHdyYXBwZXIgdG8gcHJlc2VydmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZVxyXG4gICAgY29uc3Qgd3JhcHBlZFZhbHVlID0gYDxib2R5PiR7dmFsdWV9PC9ib2R5PmA7XHJcbiAgICByZXR1cm4gbmV3IHdpbmRvdy5ET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcod3JhcHBlZFZhbHVlLCAndGV4dC9odG1sJykuYm9keTtcclxufVxuXG5mdW5jdGlvbiBjcmVhdGVOb2RlRnJvbUNvbnRlbnQoY29udGVudCwgc2NoZW1hLCBvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID0ge1xyXG4gICAgICAgIHNsaWNlOiB0cnVlLFxyXG4gICAgICAgIHBhcnNlT3B0aW9uczoge30sXHJcbiAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgIH07XHJcbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdvYmplY3QnICYmIGNvbnRlbnQgIT09IG51bGwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb250ZW50KSAmJiBjb250ZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBGcmFnbWVudC5mcm9tQXJyYXkoY29udGVudC5tYXAoaXRlbSA9PiBzY2hlbWEubm9kZUZyb21KU09OKGl0ZW0pKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYS5ub2RlRnJvbUpTT04oY29udGVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1t0aXB0YXAgd2Fybl06IEludmFsaWQgY29udGVudC4nLCAnUGFzc2VkIHZhbHVlOicsIGNvbnRlbnQsICdFcnJvcjonLCBlcnJvcik7XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVOb2RlRnJvbUNvbnRlbnQoJycsIHNjaGVtYSwgb3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbnN0IHBhcnNlciA9IERPTVBhcnNlci5mcm9tU2NoZW1hKHNjaGVtYSk7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2xpY2VcclxuICAgICAgICAgICAgPyBwYXJzZXIucGFyc2VTbGljZShlbGVtZW50RnJvbVN0cmluZyhjb250ZW50KSwgb3B0aW9ucy5wYXJzZU9wdGlvbnMpLmNvbnRlbnRcclxuICAgICAgICAgICAgOiBwYXJzZXIucGFyc2UoZWxlbWVudEZyb21TdHJpbmcoY29udGVudCksIG9wdGlvbnMucGFyc2VPcHRpb25zKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjcmVhdGVOb2RlRnJvbUNvbnRlbnQoJycsIHNjaGVtYSwgb3B0aW9ucyk7XHJcbn1cblxuLy8gc291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vUHJvc2VNaXJyb3IvcHJvc2VtaXJyb3Itc3RhdGUvYmxvYi9tYXN0ZXIvc3JjL3NlbGVjdGlvbi5qcyNMNDY2XHJcbmZ1bmN0aW9uIHNlbGVjdGlvblRvSW5zZXJ0aW9uRW5kKHRyLCBzdGFydExlbiwgYmlhcykge1xyXG4gICAgY29uc3QgbGFzdCA9IHRyLnN0ZXBzLmxlbmd0aCAtIDE7XHJcbiAgICBpZiAobGFzdCA8IHN0YXJ0TGVuKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RlcCA9IHRyLnN0ZXBzW2xhc3RdO1xyXG4gICAgaWYgKCEoc3RlcCBpbnN0YW5jZW9mIFJlcGxhY2VTdGVwIHx8IHN0ZXAgaW5zdGFuY2VvZiBSZXBsYWNlQXJvdW5kU3RlcCkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBtYXAgPSB0ci5tYXBwaW5nLm1hcHNbbGFzdF07XHJcbiAgICBsZXQgZW5kID0gMDtcclxuICAgIG1hcC5mb3JFYWNoKChfZnJvbSwgX3RvLCBfbmV3RnJvbSwgbmV3VG8pID0+IHtcclxuICAgICAgICBpZiAoZW5kID09PSAwKSB7XHJcbiAgICAgICAgICAgIGVuZCA9IG5ld1RvO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdHIuc2V0U2VsZWN0aW9uKFNlbGVjdGlvbi5uZWFyKHRyLmRvYy5yZXNvbHZlKGVuZCksIGJpYXMpKTtcclxufVxuXG5jb25zdCBpc0ZyYWdtZW50ID0gKG5vZGVPckZyYWdtZW50KSA9PiB7XHJcbiAgICByZXR1cm4gbm9kZU9yRnJhZ21lbnQudG9TdHJpbmcoKS5zdGFydHNXaXRoKCc8Jyk7XHJcbn07XHJcbmNvbnN0IGluc2VydENvbnRlbnRBdCA9IChwb3NpdGlvbiwgdmFsdWUsIG9wdGlvbnMpID0+ICh7IHRyLCBkaXNwYXRjaCwgZWRpdG9yIH0pID0+IHtcclxuICAgIGlmIChkaXNwYXRjaCkge1xyXG4gICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIHBhcnNlT3B0aW9uczoge30sXHJcbiAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbjogdHJ1ZSxcclxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBjcmVhdGVOb2RlRnJvbUNvbnRlbnQodmFsdWUsIGVkaXRvci5zY2hlbWEsIHtcclxuICAgICAgICAgICAgcGFyc2VPcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6ICdmdWxsJyxcclxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMucGFyc2VPcHRpb25zLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGRvbuKAmXQgZGlzcGF0Y2ggYW4gZW1wdHkgZnJhZ21lbnQgYmVjYXVzZSB0aGlzIGNhbiBsZWFkIHRvIHN0cmFuZ2UgZXJyb3JzXHJcbiAgICAgICAgaWYgKGNvbnRlbnQudG9TdHJpbmcoKSA9PT0gJzw+Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHsgZnJvbSwgdG8gfSA9IHR5cGVvZiBwb3NpdGlvbiA9PT0gJ251bWJlcicgPyB7IGZyb206IHBvc2l0aW9uLCB0bzogcG9zaXRpb24gfSA6IHsgZnJvbTogcG9zaXRpb24uZnJvbSwgdG86IHBvc2l0aW9uLnRvIH07XHJcbiAgICAgICAgbGV0IGlzT25seVRleHRDb250ZW50ID0gdHJ1ZTtcclxuICAgICAgICBsZXQgaXNPbmx5QmxvY2tDb250ZW50ID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBub2RlcyA9IGlzRnJhZ21lbnQoY29udGVudCkgPyBjb250ZW50IDogW2NvbnRlbnRdO1xyXG4gICAgICAgIG5vZGVzLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIGFkZGVkIG5vZGUgaXMgdmFsaWRcclxuICAgICAgICAgICAgbm9kZS5jaGVjaygpO1xyXG4gICAgICAgICAgICBpc09ubHlUZXh0Q29udGVudCA9IGlzT25seVRleHRDb250ZW50ID8gbm9kZS5pc1RleHQgJiYgbm9kZS5tYXJrcy5sZW5ndGggPT09IDAgOiBmYWxzZTtcclxuICAgICAgICAgICAgaXNPbmx5QmxvY2tDb250ZW50ID0gaXNPbmx5QmxvY2tDb250ZW50ID8gbm9kZS5pc0Jsb2NrIDogZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgY2FuIHJlcGxhY2UgdGhlIHdyYXBwaW5nIG5vZGUgYnlcclxuICAgICAgICAvLyB0aGUgbmV3bHkgaW5zZXJ0ZWQgY29udGVudFxyXG4gICAgICAgIC8vIGV4YW1wbGU6XHJcbiAgICAgICAgLy8gcmVwbGFjZSBhbiBlbXB0eSBwYXJhZ3JhcGggYnkgYW4gaW5zZXJ0ZWQgaW1hZ2VcclxuICAgICAgICAvLyBpbnN0ZWFkIG9mIGluc2VydGluZyB0aGUgaW1hZ2UgYmVsb3cgdGhlIHBhcmFncmFwaFxyXG4gICAgICAgIGlmIChmcm9tID09PSB0byAmJiBpc09ubHlCbG9ja0NvbnRlbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBwYXJlbnQgfSA9IHRyLmRvYy5yZXNvbHZlKGZyb20pO1xyXG4gICAgICAgICAgICBjb25zdCBpc0VtcHR5VGV4dEJsb2NrID0gcGFyZW50LmlzVGV4dGJsb2NrICYmICFwYXJlbnQudHlwZS5zcGVjLmNvZGUgJiYgIXBhcmVudC5jaGlsZENvdW50O1xyXG4gICAgICAgICAgICBpZiAoaXNFbXB0eVRleHRCbG9jaykge1xyXG4gICAgICAgICAgICAgICAgZnJvbSAtPSAxO1xyXG4gICAgICAgICAgICAgICAgdG8gKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IHBsYWluIHRleHQgd2UgaGF2ZSB0byB1c2UgYGluc2VydFRleHRgXHJcbiAgICAgICAgLy8gYmVjYXVzZSB0aGlzIHdpbGwga2VlcCB0aGUgY3VycmVudCBtYXJrc1xyXG4gICAgICAgIGlmIChpc09ubHlUZXh0Q29udGVudCkge1xyXG4gICAgICAgICAgICAvLyBpZiB2YWx1ZSBpcyBzdHJpbmcsIHdlIGNhbiB1c2UgaXQgZGlyZWN0bHlcclxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGlmIGl0IGlzIGFuIGFycmF5LCB3ZSBoYXZlIHRvIGpvaW4gaXRcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0ci5pbnNlcnRUZXh0KHZhbHVlLm1hcCh2ID0+IHYudGV4dCB8fCAnJykuam9pbignJyksIGZyb20sIHRvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICEhdmFsdWUgJiYgISF2YWx1ZS50ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICB0ci5pbnNlcnRUZXh0KHZhbHVlLnRleHQsIGZyb20sIHRvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRyLmluc2VydFRleHQodmFsdWUsIGZyb20sIHRvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdHIucmVwbGFjZVdpdGgoZnJvbSwgdG8sIGNvbnRlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzZXQgY3Vyc29yIGF0IGVuZCBvZiBpbnNlcnRlZCBjb250ZW50XHJcbiAgICAgICAgaWYgKG9wdGlvbnMudXBkYXRlU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvblRvSW5zZXJ0aW9uRW5kKHRyLCB0ci5zdGVwcy5sZW5ndGggLSAxLCAtMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XG5cbmNvbnN0IGpvaW5VcCA9ICgpID0+ICh7IHN0YXRlLCBkaXNwYXRjaCB9KSA9PiB7XHJcbiAgICByZXR1cm4gam9pblVwJDEoc3RhdGUsIGRpc3BhdGNoKTtcclxufTtcclxuY29uc3Qgam9pbkRvd24gPSAoKSA9PiAoeyBzdGF0ZSwgZGlzcGF0Y2ggfSkgPT4ge1xyXG4gICAgcmV0dXJuIGpvaW5Eb3duJDEoc3RhdGUsIGRpc3BhdGNoKTtcclxufTtcclxuY29uc3Qgam9pbkJhY2t3YXJkID0gKCkgPT4gKHsgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgIHJldHVybiBqb2luQmFja3dhcmQkMShzdGF0ZSwgZGlzcGF0Y2gpO1xyXG59O1xyXG5jb25zdCBqb2luRm9yd2FyZCA9ICgpID0+ICh7IHN0YXRlLCBkaXNwYXRjaCB9KSA9PiB7XHJcbiAgICByZXR1cm4gam9pbkZvcndhcmQkMShzdGF0ZSwgZGlzcGF0Y2gpO1xyXG59O1xuXG5jb25zdCBqb2luSXRlbUJhY2t3YXJkID0gKCkgPT4gKHsgdHIsIHN0YXRlLCBkaXNwYXRjaCwgfSkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBwb2ludCA9IGpvaW5Qb2ludChzdGF0ZS5kb2MsIHN0YXRlLnNlbGVjdGlvbi4kZnJvbS5wb3MsIC0xKTtcclxuICAgICAgICBpZiAocG9pbnQgPT09IG51bGwgfHwgcG9pbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyLmpvaW4ocG9pbnQsIDIpO1xyXG4gICAgICAgIGlmIChkaXNwYXRjaCkge1xyXG4gICAgICAgICAgICBkaXNwYXRjaCh0cik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY2F0Y2gge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufTtcblxuY29uc3Qgam9pbkl0ZW1Gb3J3YXJkID0gKCkgPT4gKHsgc3RhdGUsIGRpc3BhdGNoLCB0ciwgfSkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBwb2ludCA9IGpvaW5Qb2ludChzdGF0ZS5kb2MsIHN0YXRlLnNlbGVjdGlvbi4kZnJvbS5wb3MsICsxKTtcclxuICAgICAgICBpZiAocG9pbnQgPT09IG51bGwgfHwgcG9pbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyLmpvaW4ocG9pbnQsIDIpO1xyXG4gICAgICAgIGlmIChkaXNwYXRjaCkge1xyXG4gICAgICAgICAgICBkaXNwYXRjaCh0cik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn07XG5cbmZ1bmN0aW9uIGlzTWFjT1MoKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCdcclxuICAgICAgICA/IC9NYWMvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKVxyXG4gICAgICAgIDogZmFsc2U7XHJcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplS2V5TmFtZShuYW1lKSB7XHJcbiAgICBjb25zdCBwYXJ0cyA9IG5hbWUuc3BsaXQoLy0oPyEkKS8pO1xyXG4gICAgbGV0IHJlc3VsdCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xyXG4gICAgaWYgKHJlc3VsdCA9PT0gJ1NwYWNlJykge1xyXG4gICAgICAgIHJlc3VsdCA9ICcgJztcclxuICAgIH1cclxuICAgIGxldCBhbHQ7XHJcbiAgICBsZXQgY3RybDtcclxuICAgIGxldCBzaGlmdDtcclxuICAgIGxldCBtZXRhO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpICs9IDEpIHtcclxuICAgICAgICBjb25zdCBtb2QgPSBwYXJ0c1tpXTtcclxuICAgICAgICBpZiAoL14oY21kfG1ldGF8bSkkL2kudGVzdChtb2QpKSB7XHJcbiAgICAgICAgICAgIG1ldGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgvXmEobHQpPyQvaS50ZXN0KG1vZCkpIHtcclxuICAgICAgICAgICAgYWx0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoL14oY3xjdHJsfGNvbnRyb2wpJC9pLnRlc3QobW9kKSkge1xyXG4gICAgICAgICAgICBjdHJsID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoL15zKGhpZnQpPyQvaS50ZXN0KG1vZCkpIHtcclxuICAgICAgICAgICAgc2hpZnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgvXm1vZCQvaS50ZXN0KG1vZCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzaU9TKCkgfHwgaXNNYWNPUygpKSB7XHJcbiAgICAgICAgICAgICAgICBtZXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGN0cmwgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBtb2RpZmllciBuYW1lOiAke21vZH1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYWx0KSB7XHJcbiAgICAgICAgcmVzdWx0ID0gYEFsdC0ke3Jlc3VsdH1gO1xyXG4gICAgfVxyXG4gICAgaWYgKGN0cmwpIHtcclxuICAgICAgICByZXN1bHQgPSBgQ3RybC0ke3Jlc3VsdH1gO1xyXG4gICAgfVxyXG4gICAgaWYgKG1ldGEpIHtcclxuICAgICAgICByZXN1bHQgPSBgTWV0YS0ke3Jlc3VsdH1gO1xyXG4gICAgfVxyXG4gICAgaWYgKHNoaWZ0KSB7XHJcbiAgICAgICAgcmVzdWx0ID0gYFNoaWZ0LSR7cmVzdWx0fWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbmNvbnN0IGtleWJvYXJkU2hvcnRjdXQgPSBuYW1lID0+ICh7IGVkaXRvciwgdmlldywgdHIsIGRpc3BhdGNoLCB9KSA9PiB7XHJcbiAgICBjb25zdCBrZXlzID0gbm9ybWFsaXplS2V5TmFtZShuYW1lKS5zcGxpdCgvLSg/ISQpLyk7XHJcbiAgICBjb25zdCBrZXkgPSBrZXlzLmZpbmQoaXRlbSA9PiAhWydBbHQnLCAnQ3RybCcsICdNZXRhJywgJ1NoaWZ0J10uaW5jbHVkZXMoaXRlbSkpO1xyXG4gICAgY29uc3QgZXZlbnQgPSBuZXcgS2V5Ym9hcmRFdmVudCgna2V5ZG93bicsIHtcclxuICAgICAgICBrZXk6IGtleSA9PT0gJ1NwYWNlJ1xyXG4gICAgICAgICAgICA/ICcgJ1xyXG4gICAgICAgICAgICA6IGtleSxcclxuICAgICAgICBhbHRLZXk6IGtleXMuaW5jbHVkZXMoJ0FsdCcpLFxyXG4gICAgICAgIGN0cmxLZXk6IGtleXMuaW5jbHVkZXMoJ0N0cmwnKSxcclxuICAgICAgICBtZXRhS2V5OiBrZXlzLmluY2x1ZGVzKCdNZXRhJyksXHJcbiAgICAgICAgc2hpZnRLZXk6IGtleXMuaW5jbHVkZXMoJ1NoaWZ0JyksXHJcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcclxuICAgICAgICBjYW5jZWxhYmxlOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBjYXB0dXJlZFRyYW5zYWN0aW9uID0gZWRpdG9yLmNhcHR1cmVUcmFuc2FjdGlvbigoKSA9PiB7XHJcbiAgICAgICAgdmlldy5zb21lUHJvcCgnaGFuZGxlS2V5RG93bicsIGYgPT4gZih2aWV3LCBldmVudCkpO1xyXG4gICAgfSk7XHJcbiAgICBjYXB0dXJlZFRyYW5zYWN0aW9uID09PSBudWxsIHx8IGNhcHR1cmVkVHJhbnNhY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhcHR1cmVkVHJhbnNhY3Rpb24uc3RlcHMuZm9yRWFjaChzdGVwID0+IHtcclxuICAgICAgICBjb25zdCBuZXdTdGVwID0gc3RlcC5tYXAodHIubWFwcGluZyk7XHJcbiAgICAgICAgaWYgKG5ld1N0ZXAgJiYgZGlzcGF0Y2gpIHtcclxuICAgICAgICAgICAgdHIubWF5YmVTdGVwKG5ld1N0ZXApO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XG5cbmZ1bmN0aW9uIGlzTm9kZUFjdGl2ZShzdGF0ZSwgdHlwZU9yTmFtZSwgYXR0cmlidXRlcyA9IHt9KSB7XHJcbiAgICBjb25zdCB7IGZyb20sIHRvLCBlbXB0eSB9ID0gc3RhdGUuc2VsZWN0aW9uO1xyXG4gICAgY29uc3QgdHlwZSA9IHR5cGVPck5hbWUgPyBnZXROb2RlVHlwZSh0eXBlT3JOYW1lLCBzdGF0ZS5zY2hlbWEpIDogbnVsbDtcclxuICAgIGNvbnN0IG5vZGVSYW5nZXMgPSBbXTtcclxuICAgIHN0YXRlLmRvYy5ub2Rlc0JldHdlZW4oZnJvbSwgdG8sIChub2RlLCBwb3MpID0+IHtcclxuICAgICAgICBpZiAobm9kZS5pc1RleHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZWxhdGl2ZUZyb20gPSBNYXRoLm1heChmcm9tLCBwb3MpO1xyXG4gICAgICAgIGNvbnN0IHJlbGF0aXZlVG8gPSBNYXRoLm1pbih0bywgcG9zICsgbm9kZS5ub2RlU2l6ZSk7XHJcbiAgICAgICAgbm9kZVJhbmdlcy5wdXNoKHtcclxuICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgZnJvbTogcmVsYXRpdmVGcm9tLFxyXG4gICAgICAgICAgICB0bzogcmVsYXRpdmVUbyxcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uUmFuZ2UgPSB0byAtIGZyb207XHJcbiAgICBjb25zdCBtYXRjaGVkTm9kZVJhbmdlcyA9IG5vZGVSYW5nZXNcclxuICAgICAgICAuZmlsdGVyKG5vZGVSYW5nZSA9PiB7XHJcbiAgICAgICAgaWYgKCF0eXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHlwZS5uYW1lID09PSBub2RlUmFuZ2Uubm9kZS50eXBlLm5hbWU7XHJcbiAgICB9KVxyXG4gICAgICAgIC5maWx0ZXIobm9kZVJhbmdlID0+IG9iamVjdEluY2x1ZGVzKG5vZGVSYW5nZS5ub2RlLmF0dHJzLCBhdHRyaWJ1dGVzLCB7IHN0cmljdDogZmFsc2UgfSkpO1xyXG4gICAgaWYgKGVtcHR5KSB7XHJcbiAgICAgICAgcmV0dXJuICEhbWF0Y2hlZE5vZGVSYW5nZXMubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmFuZ2UgPSBtYXRjaGVkTm9kZVJhbmdlcy5yZWR1Y2UoKHN1bSwgbm9kZVJhbmdlKSA9PiBzdW0gKyBub2RlUmFuZ2UudG8gLSBub2RlUmFuZ2UuZnJvbSwgMCk7XHJcbiAgICByZXR1cm4gcmFuZ2UgPj0gc2VsZWN0aW9uUmFuZ2U7XHJcbn1cblxuY29uc3QgbGlmdCA9ICh0eXBlT3JOYW1lLCBhdHRyaWJ1dGVzID0ge30pID0+ICh7IHN0YXRlLCBkaXNwYXRjaCB9KSA9PiB7XHJcbiAgICBjb25zdCB0eXBlID0gZ2V0Tm9kZVR5cGUodHlwZU9yTmFtZSwgc3RhdGUuc2NoZW1hKTtcclxuICAgIGNvbnN0IGlzQWN0aXZlID0gaXNOb2RlQWN0aXZlKHN0YXRlLCB0eXBlLCBhdHRyaWJ1dGVzKTtcclxuICAgIGlmICghaXNBY3RpdmUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGlmdCQxKHN0YXRlLCBkaXNwYXRjaCk7XHJcbn07XG5cbmNvbnN0IGxpZnRFbXB0eUJsb2NrID0gKCkgPT4gKHsgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgIHJldHVybiBsaWZ0RW1wdHlCbG9jayQxKHN0YXRlLCBkaXNwYXRjaCk7XHJcbn07XG5cbmNvbnN0IGxpZnRMaXN0SXRlbSA9IHR5cGVPck5hbWUgPT4gKHsgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgIGNvbnN0IHR5cGUgPSBnZXROb2RlVHlwZSh0eXBlT3JOYW1lLCBzdGF0ZS5zY2hlbWEpO1xyXG4gICAgcmV0dXJuIGxpZnRMaXN0SXRlbSQxKHR5cGUpKHN0YXRlLCBkaXNwYXRjaCk7XHJcbn07XG5cbmNvbnN0IG5ld2xpbmVJbkNvZGUgPSAoKSA9PiAoeyBzdGF0ZSwgZGlzcGF0Y2ggfSkgPT4ge1xyXG4gICAgcmV0dXJuIG5ld2xpbmVJbkNvZGUkMShzdGF0ZSwgZGlzcGF0Y2gpO1xyXG59O1xuXG5mdW5jdGlvbiBnZXRTY2hlbWFUeXBlTmFtZUJ5TmFtZShuYW1lLCBzY2hlbWEpIHtcclxuICAgIGlmIChzY2hlbWEubm9kZXNbbmFtZV0pIHtcclxuICAgICAgICByZXR1cm4gJ25vZGUnO1xyXG4gICAgfVxyXG4gICAgaWYgKHNjaGVtYS5tYXJrc1tuYW1lXSkge1xyXG4gICAgICAgIHJldHVybiAnbWFyayc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxuXG4vKipcclxuICogUmVtb3ZlIGEgcHJvcGVydHkgb3IgYW4gYXJyYXkgb2YgcHJvcGVydGllcyBmcm9tIGFuIG9iamVjdFxyXG4gKiBAcGFyYW0gb2JqIE9iamVjdFxyXG4gKiBAcGFyYW0ga2V5IEtleSB0byByZW1vdmVcclxuICovXHJcbmZ1bmN0aW9uIGRlbGV0ZVByb3BzKG9iaiwgcHJvcE9yUHJvcHMpIHtcclxuICAgIGNvbnN0IHByb3BzID0gdHlwZW9mIHByb3BPclByb3BzID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gW3Byb3BPclByb3BzXVxyXG4gICAgICAgIDogcHJvcE9yUHJvcHM7XHJcbiAgICByZXR1cm4gT2JqZWN0XHJcbiAgICAgICAgLmtleXMob2JqKVxyXG4gICAgICAgIC5yZWR1Y2UoKG5ld09iaiwgcHJvcCkgPT4ge1xyXG4gICAgICAgIGlmICghcHJvcHMuaW5jbHVkZXMocHJvcCkpIHtcclxuICAgICAgICAgICAgbmV3T2JqW3Byb3BdID0gb2JqW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3T2JqO1xyXG4gICAgfSwge30pO1xyXG59XG5cbmNvbnN0IHJlc2V0QXR0cmlidXRlcyA9ICh0eXBlT3JOYW1lLCBhdHRyaWJ1dGVzKSA9PiAoeyB0ciwgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgIGxldCBub2RlVHlwZSA9IG51bGw7XHJcbiAgICBsZXQgbWFya1R5cGUgPSBudWxsO1xyXG4gICAgY29uc3Qgc2NoZW1hVHlwZSA9IGdldFNjaGVtYVR5cGVOYW1lQnlOYW1lKHR5cGVvZiB0eXBlT3JOYW1lID09PSAnc3RyaW5nJyA/IHR5cGVPck5hbWUgOiB0eXBlT3JOYW1lLm5hbWUsIHN0YXRlLnNjaGVtYSk7XHJcbiAgICBpZiAoIXNjaGVtYVR5cGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoc2NoZW1hVHlwZSA9PT0gJ25vZGUnKSB7XHJcbiAgICAgICAgbm9kZVR5cGUgPSBnZXROb2RlVHlwZSh0eXBlT3JOYW1lLCBzdGF0ZS5zY2hlbWEpO1xyXG4gICAgfVxyXG4gICAgaWYgKHNjaGVtYVR5cGUgPT09ICdtYXJrJykge1xyXG4gICAgICAgIG1hcmtUeXBlID0gZ2V0TWFya1R5cGUodHlwZU9yTmFtZSwgc3RhdGUuc2NoZW1hKTtcclxuICAgIH1cclxuICAgIGlmIChkaXNwYXRjaCkge1xyXG4gICAgICAgIHRyLnNlbGVjdGlvbi5yYW5nZXMuZm9yRWFjaChyYW5nZSA9PiB7XHJcbiAgICAgICAgICAgIHN0YXRlLmRvYy5ub2Rlc0JldHdlZW4ocmFuZ2UuJGZyb20ucG9zLCByYW5nZS4kdG8ucG9zLCAobm9kZSwgcG9zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZVR5cGUgJiYgbm9kZVR5cGUgPT09IG5vZGUudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyLnNldE5vZGVNYXJrdXAocG9zLCB1bmRlZmluZWQsIGRlbGV0ZVByb3BzKG5vZGUuYXR0cnMsIGF0dHJpYnV0ZXMpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChtYXJrVHlwZSAmJiBub2RlLm1hcmtzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUubWFya3MuZm9yRWFjaChtYXJrID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcmtUeXBlID09PSBtYXJrLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFkZE1hcmsocG9zLCBwb3MgKyBub2RlLm5vZGVTaXplLCBtYXJrVHlwZS5jcmVhdGUoZGVsZXRlUHJvcHMobWFyay5hdHRycywgYXR0cmlidXRlcykpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xuXG5jb25zdCBzY3JvbGxJbnRvVmlldyA9ICgpID0+ICh7IHRyLCBkaXNwYXRjaCB9KSA9PiB7XHJcbiAgICBpZiAoZGlzcGF0Y2gpIHtcclxuICAgICAgICB0ci5zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XG5cbmNvbnN0IHNlbGVjdEFsbCA9ICgpID0+ICh7IHRyLCBjb21tYW5kcyB9KSA9PiB7XHJcbiAgICByZXR1cm4gY29tbWFuZHMuc2V0VGV4dFNlbGVjdGlvbih7XHJcbiAgICAgICAgZnJvbTogMCxcclxuICAgICAgICB0bzogdHIuZG9jLmNvbnRlbnQuc2l6ZSxcclxuICAgIH0pO1xyXG59O1xuXG5jb25zdCBzZWxlY3ROb2RlQmFja3dhcmQgPSAoKSA9PiAoeyBzdGF0ZSwgZGlzcGF0Y2ggfSkgPT4ge1xyXG4gICAgcmV0dXJuIHNlbGVjdE5vZGVCYWNrd2FyZCQxKHN0YXRlLCBkaXNwYXRjaCk7XHJcbn07XG5cbmNvbnN0IHNlbGVjdE5vZGVGb3J3YXJkID0gKCkgPT4gKHsgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgIHJldHVybiBzZWxlY3ROb2RlRm9yd2FyZCQxKHN0YXRlLCBkaXNwYXRjaCk7XHJcbn07XG5cbmNvbnN0IHNlbGVjdFBhcmVudE5vZGUgPSAoKSA9PiAoeyBzdGF0ZSwgZGlzcGF0Y2ggfSkgPT4ge1xyXG4gICAgcmV0dXJuIHNlbGVjdFBhcmVudE5vZGUkMShzdGF0ZSwgZGlzcGF0Y2gpO1xyXG59O1xuXG4vLyBAdHMtaWdub3JlXHJcbmNvbnN0IHNlbGVjdFRleHRibG9ja0VuZCA9ICgpID0+ICh7IHN0YXRlLCBkaXNwYXRjaCB9KSA9PiB7XHJcbiAgICByZXR1cm4gc2VsZWN0VGV4dGJsb2NrRW5kJDEoc3RhdGUsIGRpc3BhdGNoKTtcclxufTtcblxuLy8gQHRzLWlnbm9yZVxyXG5jb25zdCBzZWxlY3RUZXh0YmxvY2tTdGFydCA9ICgpID0+ICh7IHN0YXRlLCBkaXNwYXRjaCB9KSA9PiB7XHJcbiAgICByZXR1cm4gc2VsZWN0VGV4dGJsb2NrU3RhcnQkMShzdGF0ZSwgZGlzcGF0Y2gpO1xyXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVEb2N1bWVudChjb250ZW50LCBzY2hlbWEsIHBhcnNlT3B0aW9ucyA9IHt9KSB7XHJcbiAgICByZXR1cm4gY3JlYXRlTm9kZUZyb21Db250ZW50KGNvbnRlbnQsIHNjaGVtYSwgeyBzbGljZTogZmFsc2UsIHBhcnNlT3B0aW9ucyB9KTtcclxufVxuXG5jb25zdCBzZXRDb250ZW50ID0gKGNvbnRlbnQsIGVtaXRVcGRhdGUgPSBmYWxzZSwgcGFyc2VPcHRpb25zID0ge30pID0+ICh7IHRyLCBlZGl0b3IsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgIGNvbnN0IHsgZG9jIH0gPSB0cjtcclxuICAgIGNvbnN0IGRvY3VtZW50ID0gY3JlYXRlRG9jdW1lbnQoY29udGVudCwgZWRpdG9yLnNjaGVtYSwgcGFyc2VPcHRpb25zKTtcclxuICAgIGlmIChkaXNwYXRjaCkge1xyXG4gICAgICAgIHRyLnJlcGxhY2VXaXRoKDAsIGRvYy5jb250ZW50LnNpemUsIGRvY3VtZW50KS5zZXRNZXRhKCdwcmV2ZW50VXBkYXRlJywgIWVtaXRVcGRhdGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XG5cbmZ1bmN0aW9uIGdldE1hcmtBdHRyaWJ1dGVzKHN0YXRlLCB0eXBlT3JOYW1lKSB7XHJcbiAgICBjb25zdCB0eXBlID0gZ2V0TWFya1R5cGUodHlwZU9yTmFtZSwgc3RhdGUuc2NoZW1hKTtcclxuICAgIGNvbnN0IHsgZnJvbSwgdG8sIGVtcHR5IH0gPSBzdGF0ZS5zZWxlY3Rpb247XHJcbiAgICBjb25zdCBtYXJrcyA9IFtdO1xyXG4gICAgaWYgKGVtcHR5KSB7XHJcbiAgICAgICAgaWYgKHN0YXRlLnN0b3JlZE1hcmtzKSB7XHJcbiAgICAgICAgICAgIG1hcmtzLnB1c2goLi4uc3RhdGUuc3RvcmVkTWFya3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtYXJrcy5wdXNoKC4uLnN0YXRlLnNlbGVjdGlvbi4kaGVhZC5tYXJrcygpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHN0YXRlLmRvYy5ub2Rlc0JldHdlZW4oZnJvbSwgdG8sIG5vZGUgPT4ge1xyXG4gICAgICAgICAgICBtYXJrcy5wdXNoKC4uLm5vZGUubWFya3MpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWFyayA9IG1hcmtzLmZpbmQobWFya0l0ZW0gPT4gbWFya0l0ZW0udHlwZS5uYW1lID09PSB0eXBlLm5hbWUpO1xyXG4gICAgaWYgKCFtYXJrKSB7XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgLi4ubWFyay5hdHRycyB9O1xyXG59XG5cbi8qKlxyXG4gKiBSZXR1cm5zIGEgbmV3IGBUcmFuc2Zvcm1gIGJhc2VkIG9uIGFsbCBzdGVwcyBvZiB0aGUgcGFzc2VkIHRyYW5zYWN0aW9ucy5cclxuICovXHJcbmZ1bmN0aW9uIGNvbWJpbmVUcmFuc2FjdGlvblN0ZXBzKG9sZERvYywgdHJhbnNhY3Rpb25zKSB7XHJcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKG9sZERvYyk7XHJcbiAgICB0cmFuc2FjdGlvbnMuZm9yRWFjaCh0cmFuc2FjdGlvbiA9PiB7XHJcbiAgICAgICAgdHJhbnNhY3Rpb24uc3RlcHMuZm9yRWFjaChzdGVwID0+IHtcclxuICAgICAgICAgICAgdHJhbnNmb3JtLnN0ZXAoc3RlcCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0cmFuc2Zvcm07XHJcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEJsb2NrQXQobWF0Y2gpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0Y2guZWRnZUNvdW50OyBpICs9IDEpIHtcclxuICAgICAgICBjb25zdCB7IHR5cGUgfSA9IG1hdGNoLmVkZ2UoaSk7XHJcbiAgICAgICAgaWYgKHR5cGUuaXNUZXh0YmxvY2sgJiYgIXR5cGUuaGFzUmVxdWlyZWRBdHRycygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59XG5cbmZ1bmN0aW9uIGZpbmRDaGlsZHJlbihub2RlLCBwcmVkaWNhdGUpIHtcclxuICAgIGNvbnN0IG5vZGVzV2l0aFBvcyA9IFtdO1xyXG4gICAgbm9kZS5kZXNjZW5kYW50cygoY2hpbGQsIHBvcykgPT4ge1xyXG4gICAgICAgIGlmIChwcmVkaWNhdGUoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgIG5vZGVzV2l0aFBvcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIG5vZGU6IGNoaWxkLFxyXG4gICAgICAgICAgICAgICAgcG9zLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBub2Rlc1dpdGhQb3M7XHJcbn1cblxuLyoqXHJcbiAqIFNhbWUgYXMgYGZpbmRDaGlsZHJlbmAgYnV0IHNlYXJjaGVzIG9ubHkgd2l0aGluIGEgYHJhbmdlYC5cclxuICovXHJcbmZ1bmN0aW9uIGZpbmRDaGlsZHJlbkluUmFuZ2Uobm9kZSwgcmFuZ2UsIHByZWRpY2F0ZSkge1xyXG4gICAgY29uc3Qgbm9kZXNXaXRoUG9zID0gW107XHJcbiAgICAvLyBpZiAocmFuZ2UuZnJvbSA9PT0gcmFuZ2UudG8pIHtcclxuICAgIC8vICAgY29uc3Qgbm9kZUF0ID0gbm9kZS5ub2RlQXQocmFuZ2UuZnJvbSlcclxuICAgIC8vICAgaWYgKG5vZGVBdCkge1xyXG4gICAgLy8gICAgIG5vZGVzV2l0aFBvcy5wdXNoKHtcclxuICAgIC8vICAgICAgIG5vZGU6IG5vZGVBdCxcclxuICAgIC8vICAgICAgIHBvczogcmFuZ2UuZnJvbSxcclxuICAgIC8vICAgICB9KVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgICBub2RlLm5vZGVzQmV0d2VlbihyYW5nZS5mcm9tLCByYW5nZS50bywgKGNoaWxkLCBwb3MpID0+IHtcclxuICAgICAgICBpZiAocHJlZGljYXRlKGNoaWxkKSkge1xyXG4gICAgICAgICAgICBub2Rlc1dpdGhQb3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBub2RlOiBjaGlsZCxcclxuICAgICAgICAgICAgICAgIHBvcyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbm9kZXNXaXRoUG9zO1xyXG59XG5cbmZ1bmN0aW9uIGZpbmRQYXJlbnROb2RlQ2xvc2VzdFRvUG9zKCRwb3MsIHByZWRpY2F0ZSkge1xyXG4gICAgZm9yIChsZXQgaSA9ICRwb3MuZGVwdGg7IGkgPiAwOyBpIC09IDEpIHtcclxuICAgICAgICBjb25zdCBub2RlID0gJHBvcy5ub2RlKGkpO1xyXG4gICAgICAgIGlmIChwcmVkaWNhdGUobm9kZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHBvczogaSA+IDAgPyAkcG9zLmJlZm9yZShpKSA6IDAsXHJcbiAgICAgICAgICAgICAgICBzdGFydDogJHBvcy5zdGFydChpKSxcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpLFxyXG4gICAgICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuZnVuY3Rpb24gZmluZFBhcmVudE5vZGUocHJlZGljYXRlKSB7XHJcbiAgICByZXR1cm4gKHNlbGVjdGlvbikgPT4gZmluZFBhcmVudE5vZGVDbG9zZXN0VG9Qb3Moc2VsZWN0aW9uLiRmcm9tLCBwcmVkaWNhdGUpO1xyXG59XG5cbmZ1bmN0aW9uIGdldEhUTUxGcm9tRnJhZ21lbnQoZnJhZ21lbnQsIHNjaGVtYSkge1xyXG4gICAgY29uc3QgZG9jdW1lbnRGcmFnbWVudCA9IERPTVNlcmlhbGl6ZXIuZnJvbVNjaGVtYShzY2hlbWEpLnNlcmlhbGl6ZUZyYWdtZW50KGZyYWdtZW50KTtcclxuICAgIGNvbnN0IHRlbXBvcmFyeURvY3VtZW50ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCk7XHJcbiAgICBjb25zdCBjb250YWluZXIgPSB0ZW1wb3JhcnlEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVudEZyYWdtZW50KTtcclxuICAgIHJldHVybiBjb250YWluZXIuaW5uZXJIVE1MO1xyXG59XG5cbmZ1bmN0aW9uIGdldFNjaGVtYShleHRlbnNpb25zLCBlZGl0b3IpIHtcclxuICAgIGNvbnN0IHJlc29sdmVkRXh0ZW5zaW9ucyA9IEV4dGVuc2lvbk1hbmFnZXIucmVzb2x2ZShleHRlbnNpb25zKTtcclxuICAgIHJldHVybiBnZXRTY2hlbWFCeVJlc29sdmVkRXh0ZW5zaW9ucyhyZXNvbHZlZEV4dGVuc2lvbnMsIGVkaXRvcik7XHJcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVIVE1MKGRvYywgZXh0ZW5zaW9ucykge1xyXG4gICAgY29uc3Qgc2NoZW1hID0gZ2V0U2NoZW1hKGV4dGVuc2lvbnMpO1xyXG4gICAgY29uc3QgY29udGVudE5vZGUgPSBOb2RlJDEuZnJvbUpTT04oc2NoZW1hLCBkb2MpO1xyXG4gICAgcmV0dXJuIGdldEhUTUxGcm9tRnJhZ21lbnQoY29udGVudE5vZGUuY29udGVudCwgc2NoZW1hKTtcclxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUpTT04oaHRtbCwgZXh0ZW5zaW9ucykge1xyXG4gICAgY29uc3Qgc2NoZW1hID0gZ2V0U2NoZW1hKGV4dGVuc2lvbnMpO1xyXG4gICAgY29uc3QgZG9tID0gZWxlbWVudEZyb21TdHJpbmcoaHRtbCk7XHJcbiAgICByZXR1cm4gRE9NUGFyc2VyLmZyb21TY2hlbWEoc2NoZW1hKS5wYXJzZShkb20pLnRvSlNPTigpO1xyXG59XG5cbmZ1bmN0aW9uIGdldFRleHQobm9kZSwgb3B0aW9ucykge1xyXG4gICAgY29uc3QgcmFuZ2UgPSB7XHJcbiAgICAgICAgZnJvbTogMCxcclxuICAgICAgICB0bzogbm9kZS5jb250ZW50LnNpemUsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGdldFRleHRCZXR3ZWVuKG5vZGUsIHJhbmdlLCBvcHRpb25zKTtcclxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVRleHQoZG9jLCBleHRlbnNpb25zLCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCB7IGJsb2NrU2VwYXJhdG9yID0gJ1xcblxcbicsIHRleHRTZXJpYWxpemVycyA9IHt9IH0gPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgY29uc3Qgc2NoZW1hID0gZ2V0U2NoZW1hKGV4dGVuc2lvbnMpO1xyXG4gICAgY29uc3QgY29udGVudE5vZGUgPSBOb2RlJDEuZnJvbUpTT04oc2NoZW1hLCBkb2MpO1xyXG4gICAgcmV0dXJuIGdldFRleHQoY29udGVudE5vZGUsIHtcclxuICAgICAgICBibG9ja1NlcGFyYXRvcixcclxuICAgICAgICB0ZXh0U2VyaWFsaXplcnM6IHtcclxuICAgICAgICAgICAgLi4uZ2V0VGV4dFNlcmlhbGl6ZXJzRnJvbVNjaGVtYShzY2hlbWEpLFxyXG4gICAgICAgICAgICAuLi50ZXh0U2VyaWFsaXplcnMsXHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG59XG5cbmZ1bmN0aW9uIGdldE5vZGVBdHRyaWJ1dGVzKHN0YXRlLCB0eXBlT3JOYW1lKSB7XHJcbiAgICBjb25zdCB0eXBlID0gZ2V0Tm9kZVR5cGUodHlwZU9yTmFtZSwgc3RhdGUuc2NoZW1hKTtcclxuICAgIGNvbnN0IHsgZnJvbSwgdG8gfSA9IHN0YXRlLnNlbGVjdGlvbjtcclxuICAgIGNvbnN0IG5vZGVzID0gW107XHJcbiAgICBzdGF0ZS5kb2Mubm9kZXNCZXR3ZWVuKGZyb20sIHRvLCBub2RlID0+IHtcclxuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBub2RlID0gbm9kZXMucmV2ZXJzZSgpLmZpbmQobm9kZUl0ZW0gPT4gbm9kZUl0ZW0udHlwZS5uYW1lID09PSB0eXBlLm5hbWUpO1xyXG4gICAgaWYgKCFub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgLi4ubm9kZS5hdHRycyB9O1xyXG59XG5cbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZXMoc3RhdGUsIHR5cGVPck5hbWUpIHtcclxuICAgIGNvbnN0IHNjaGVtYVR5cGUgPSBnZXRTY2hlbWFUeXBlTmFtZUJ5TmFtZSh0eXBlb2YgdHlwZU9yTmFtZSA9PT0gJ3N0cmluZycgPyB0eXBlT3JOYW1lIDogdHlwZU9yTmFtZS5uYW1lLCBzdGF0ZS5zY2hlbWEpO1xyXG4gICAgaWYgKHNjaGVtYVR5cGUgPT09ICdub2RlJykge1xyXG4gICAgICAgIHJldHVybiBnZXROb2RlQXR0cmlidXRlcyhzdGF0ZSwgdHlwZU9yTmFtZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc2NoZW1hVHlwZSA9PT0gJ21hcmsnKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldE1hcmtBdHRyaWJ1dGVzKHN0YXRlLCB0eXBlT3JOYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxufVxuXG4vKipcclxuICogUmVtb3ZlcyBkdXBsaWNhdGVkIHZhbHVlcyB3aXRoaW4gYW4gYXJyYXkuXHJcbiAqIFN1cHBvcnRzIG51bWJlcnMsIHN0cmluZ3MgYW5kIG9iamVjdHMuXHJcbiAqL1xyXG5mdW5jdGlvbiByZW1vdmVEdXBsaWNhdGVzKGFycmF5LCBieSA9IEpTT04uc3RyaW5naWZ5KSB7XHJcbiAgICBjb25zdCBzZWVuID0ge307XHJcbiAgICByZXR1cm4gYXJyYXkuZmlsdGVyKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IGJ5KGl0ZW0pO1xyXG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2Vlbiwga2V5KVxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogKHNlZW5ba2V5XSA9IHRydWUpO1xyXG4gICAgfSk7XHJcbn1cblxuLyoqXHJcbiAqIFJlbW92ZXMgZHVwbGljYXRlZCByYW5nZXMgYW5kIHJhbmdlcyB0aGF0IGFyZVxyXG4gKiBmdWxseSBjYXB0dXJlZCBieSBvdGhlciByYW5nZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBzaW1wbGlmeUNoYW5nZWRSYW5nZXMoY2hhbmdlcykge1xyXG4gICAgY29uc3QgdW5pcXVlQ2hhbmdlcyA9IHJlbW92ZUR1cGxpY2F0ZXMoY2hhbmdlcyk7XHJcbiAgICByZXR1cm4gdW5pcXVlQ2hhbmdlcy5sZW5ndGggPT09IDFcclxuICAgICAgICA/IHVuaXF1ZUNoYW5nZXNcclxuICAgICAgICA6IHVuaXF1ZUNoYW5nZXMuZmlsdGVyKChjaGFuZ2UsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3QgPSB1bmlxdWVDaGFuZ2VzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gIXJlc3Quc29tZShvdGhlckNoYW5nZSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlLm9sZFJhbmdlLmZyb20gPj0gb3RoZXJDaGFuZ2Uub2xkUmFuZ2UuZnJvbVxyXG4gICAgICAgICAgICAgICAgICAgICYmIGNoYW5nZS5vbGRSYW5nZS50byA8PSBvdGhlckNoYW5nZS5vbGRSYW5nZS50b1xyXG4gICAgICAgICAgICAgICAgICAgICYmIGNoYW5nZS5uZXdSYW5nZS5mcm9tID49IG90aGVyQ2hhbmdlLm5ld1JhbmdlLmZyb21cclxuICAgICAgICAgICAgICAgICAgICAmJiBjaGFuZ2UubmV3UmFuZ2UudG8gPD0gb3RoZXJDaGFuZ2UubmV3UmFuZ2UudG87XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG59XHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgbGlzdCBvZiBjaGFuZ2VkIHJhbmdlc1xyXG4gKiBiYXNlZCBvbiB0aGUgZmlyc3QgYW5kIGxhc3Qgc3RhdGUgb2YgYWxsIHN0ZXBzLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0Q2hhbmdlZFJhbmdlcyh0cmFuc2Zvcm0pIHtcclxuICAgIGNvbnN0IHsgbWFwcGluZywgc3RlcHMgfSA9IHRyYW5zZm9ybTtcclxuICAgIGNvbnN0IGNoYW5nZXMgPSBbXTtcclxuICAgIG1hcHBpbmcubWFwcy5mb3JFYWNoKChzdGVwTWFwLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJhbmdlcyA9IFtdO1xyXG4gICAgICAgIC8vIFRoaXMgYWNjb3VudHMgZm9yIHN0ZXAgY2hhbmdlcyB3aGVyZSBubyByYW5nZSB3YXMgYWN0dWFsbHkgYWx0ZXJlZFxyXG4gICAgICAgIC8vIGUuZy4gd2hlbiBzZXR0aW5nIGEgbWFyaywgbm9kZSBhdHRyaWJ1dGUsIGV0Yy5cclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgaWYgKCFzdGVwTWFwLnJhbmdlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBmcm9tLCB0byB9ID0gc3RlcHNbaW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZnJvbSA9PT0gdW5kZWZpbmVkIHx8IHRvID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByYW5nZXMucHVzaCh7IGZyb20sIHRvIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcE1hcC5mb3JFYWNoKChmcm9tLCB0bykgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2goeyBmcm9tLCB0byB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJhbmdlcy5mb3JFYWNoKCh7IGZyb20sIHRvIH0pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbmV3U3RhcnQgPSBtYXBwaW5nLnNsaWNlKGluZGV4KS5tYXAoZnJvbSwgLTEpO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdFbmQgPSBtYXBwaW5nLnNsaWNlKGluZGV4KS5tYXAodG8pO1xyXG4gICAgICAgICAgICBjb25zdCBvbGRTdGFydCA9IG1hcHBpbmcuaW52ZXJ0KCkubWFwKG5ld1N0YXJ0LCAtMSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG9sZEVuZCA9IG1hcHBpbmcuaW52ZXJ0KCkubWFwKG5ld0VuZCk7XHJcbiAgICAgICAgICAgIGNoYW5nZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBvbGRSYW5nZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGZyb206IG9sZFN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRvOiBvbGRFbmQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbmV3UmFuZ2U6IHtcclxuICAgICAgICAgICAgICAgICAgICBmcm9tOiBuZXdTdGFydCxcclxuICAgICAgICAgICAgICAgICAgICB0bzogbmV3RW5kLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzaW1wbGlmeUNoYW5nZWRSYW5nZXMoY2hhbmdlcyk7XHJcbn1cblxuZnVuY3Rpb24gZ2V0RGVidWdKU09OKG5vZGUsIHN0YXJ0T2Zmc2V0ID0gMCkge1xyXG4gICAgY29uc3QgaXNUb3BOb2RlID0gbm9kZS50eXBlID09PSBub2RlLnR5cGUuc2NoZW1hLnRvcE5vZGVUeXBlO1xyXG4gICAgY29uc3QgaW5jcmVtZW50ID0gaXNUb3BOb2RlID8gMCA6IDE7XHJcbiAgICBjb25zdCBmcm9tID0gc3RhcnRPZmZzZXQ7XHJcbiAgICBjb25zdCB0byA9IGZyb20gKyBub2RlLm5vZGVTaXplO1xyXG4gICAgY29uc3QgbWFya3MgPSBub2RlLm1hcmtzLm1hcChtYXJrID0+IHtcclxuICAgICAgICBjb25zdCBvdXRwdXQgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IG1hcmsudHlwZS5uYW1lLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG1hcmsuYXR0cnMpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBvdXRwdXQuYXR0cnMgPSB7IC4uLm1hcmsuYXR0cnMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYXR0cnMgPSB7IC4uLm5vZGUuYXR0cnMgfTtcclxuICAgIGNvbnN0IG91dHB1dCA9IHtcclxuICAgICAgICB0eXBlOiBub2RlLnR5cGUubmFtZSxcclxuICAgICAgICBmcm9tLFxyXG4gICAgICAgIHRvLFxyXG4gICAgfTtcclxuICAgIGlmIChPYmplY3Qua2V5cyhhdHRycykubGVuZ3RoKSB7XHJcbiAgICAgICAgb3V0cHV0LmF0dHJzID0gYXR0cnM7XHJcbiAgICB9XHJcbiAgICBpZiAobWFya3MubGVuZ3RoKSB7XHJcbiAgICAgICAgb3V0cHV0Lm1hcmtzID0gbWFya3M7XHJcbiAgICB9XHJcbiAgICBpZiAobm9kZS5jb250ZW50LmNoaWxkQ291bnQpIHtcclxuICAgICAgICBvdXRwdXQuY29udGVudCA9IFtdO1xyXG4gICAgICAgIG5vZGUuZm9yRWFjaCgoY2hpbGQsIG9mZnNldCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgIChfYSA9IG91dHB1dC5jb250ZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucHVzaChnZXREZWJ1Z0pTT04oY2hpbGQsIHN0YXJ0T2Zmc2V0ICsgb2Zmc2V0ICsgaW5jcmVtZW50KSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAobm9kZS50ZXh0KSB7XHJcbiAgICAgICAgb3V0cHV0LnRleHQgPSBub2RlLnRleHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG59XG5cbmZ1bmN0aW9uIGdldE1hcmtzQmV0d2Vlbihmcm9tLCB0bywgZG9jKSB7XHJcbiAgICBjb25zdCBtYXJrcyA9IFtdO1xyXG4gICAgLy8gZ2V0IGFsbCBpbmNsdXNpdmUgbWFya3Mgb24gZW1wdHkgc2VsZWN0aW9uXHJcbiAgICBpZiAoZnJvbSA9PT0gdG8pIHtcclxuICAgICAgICBkb2NcclxuICAgICAgICAgICAgLnJlc29sdmUoZnJvbSlcclxuICAgICAgICAgICAgLm1hcmtzKClcclxuICAgICAgICAgICAgLmZvckVhY2gobWFyayA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0ICRwb3MgPSBkb2MucmVzb2x2ZShmcm9tIC0gMSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gZ2V0TWFya1JhbmdlKCRwb3MsIG1hcmsudHlwZSk7XHJcbiAgICAgICAgICAgIGlmICghcmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtYXJrcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIG1hcmssXHJcbiAgICAgICAgICAgICAgICAuLi5yYW5nZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBkb2Mubm9kZXNCZXR3ZWVuKGZyb20sIHRvLCAobm9kZSwgcG9zKSA9PiB7XHJcbiAgICAgICAgICAgIG1hcmtzLnB1c2goLi4ubm9kZS5tYXJrcy5tYXAobWFyayA9PiAoe1xyXG4gICAgICAgICAgICAgICAgZnJvbTogcG9zLFxyXG4gICAgICAgICAgICAgICAgdG86IHBvcyArIG5vZGUubm9kZVNpemUsXHJcbiAgICAgICAgICAgICAgICBtYXJrLFxyXG4gICAgICAgICAgICB9KSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1hcmtzO1xyXG59XG5cbi8qKlxyXG4gKiBGaW5kcyB0aGUgZmlyc3Qgbm9kZSBvZiBhIGdpdmVuIHR5cGUgb3IgbmFtZSBpbiB0aGUgY3VycmVudCBzZWxlY3Rpb24uXHJcbiAqIEBwYXJhbSBzdGF0ZSBUaGUgZWRpdG9yIHN0YXRlLlxyXG4gKiBAcGFyYW0gdHlwZU9yTmFtZSBUaGUgbm9kZSB0eXBlIG9yIG5hbWUuXHJcbiAqIEBwYXJhbSBwb3MgVGhlIHBvc2l0aW9uIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLlxyXG4gKiBAcGFyYW0gbWF4RGVwdGggVGhlIG1heGltdW0gZGVwdGggdG8gc2VhcmNoLlxyXG4gKiBAcmV0dXJucyBUaGUgbm9kZSBhbmQgdGhlIGRlcHRoIGFzIGFuIGFycmF5LlxyXG4gKi9cclxuY29uc3QgZ2V0Tm9kZUF0UG9zaXRpb24gPSAoc3RhdGUsIHR5cGVPck5hbWUsIHBvcywgbWF4RGVwdGggPSAyMCkgPT4ge1xyXG4gICAgY29uc3QgJHBvcyA9IHN0YXRlLmRvYy5yZXNvbHZlKHBvcyk7XHJcbiAgICBsZXQgY3VycmVudERlcHRoID0gbWF4RGVwdGg7XHJcbiAgICBsZXQgbm9kZSA9IG51bGw7XHJcbiAgICB3aGlsZSAoY3VycmVudERlcHRoID4gMCAmJiBub2RlID09PSBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudE5vZGUgPSAkcG9zLm5vZGUoY3VycmVudERlcHRoKTtcclxuICAgICAgICBpZiAoKGN1cnJlbnROb2RlID09PSBudWxsIHx8IGN1cnJlbnROb2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXJyZW50Tm9kZS50eXBlLm5hbWUpID09PSB0eXBlT3JOYW1lKSB7XHJcbiAgICAgICAgICAgIG5vZGUgPSBjdXJyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnREZXB0aCAtPSAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbbm9kZSwgY3VycmVudERlcHRoXTtcclxufTtcblxuZnVuY3Rpb24gZ2V0U3BsaXR0ZWRBdHRyaWJ1dGVzKGV4dGVuc2lvbkF0dHJpYnV0ZXMsIHR5cGVOYW1lLCBhdHRyaWJ1dGVzKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdFxyXG4gICAgICAgIC5lbnRyaWVzKGF0dHJpYnV0ZXMpXHJcbiAgICAgICAgLmZpbHRlcigoW25hbWVdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uQXR0cmlidXRlID0gZXh0ZW5zaW9uQXR0cmlidXRlcy5maW5kKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSB0eXBlTmFtZSAmJiBpdGVtLm5hbWUgPT09IG5hbWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFleHRlbnNpb25BdHRyaWJ1dGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXh0ZW5zaW9uQXR0cmlidXRlLmF0dHJpYnV0ZS5rZWVwT25TcGxpdDtcclxuICAgIH0pKTtcclxufVxuXG5mdW5jdGlvbiBpc01hcmtBY3RpdmUoc3RhdGUsIHR5cGVPck5hbWUsIGF0dHJpYnV0ZXMgPSB7fSkge1xyXG4gICAgY29uc3QgeyBlbXB0eSwgcmFuZ2VzIH0gPSBzdGF0ZS5zZWxlY3Rpb247XHJcbiAgICBjb25zdCB0eXBlID0gdHlwZU9yTmFtZSA/IGdldE1hcmtUeXBlKHR5cGVPck5hbWUsIHN0YXRlLnNjaGVtYSkgOiBudWxsO1xyXG4gICAgaWYgKGVtcHR5KSB7XHJcbiAgICAgICAgcmV0dXJuICEhKHN0YXRlLnN0b3JlZE1hcmtzIHx8IHN0YXRlLnNlbGVjdGlvbi4kZnJvbS5tYXJrcygpKVxyXG4gICAgICAgICAgICAuZmlsdGVyKG1hcmsgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlLm5hbWUgPT09IG1hcmsudHlwZS5uYW1lO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5kKG1hcmsgPT4gb2JqZWN0SW5jbHVkZXMobWFyay5hdHRycywgYXR0cmlidXRlcywgeyBzdHJpY3Q6IGZhbHNlIH0pKTtcclxuICAgIH1cclxuICAgIGxldCBzZWxlY3Rpb25SYW5nZSA9IDA7XHJcbiAgICBjb25zdCBtYXJrUmFuZ2VzID0gW107XHJcbiAgICByYW5nZXMuZm9yRWFjaCgoeyAkZnJvbSwgJHRvIH0pID0+IHtcclxuICAgICAgICBjb25zdCBmcm9tID0gJGZyb20ucG9zO1xyXG4gICAgICAgIGNvbnN0IHRvID0gJHRvLnBvcztcclxuICAgICAgICBzdGF0ZS5kb2Mubm9kZXNCZXR3ZWVuKGZyb20sIHRvLCAobm9kZSwgcG9zKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghbm9kZS5pc1RleHQgJiYgIW5vZGUubWFya3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVsYXRpdmVGcm9tID0gTWF0aC5tYXgoZnJvbSwgcG9zKTtcclxuICAgICAgICAgICAgY29uc3QgcmVsYXRpdmVUbyA9IE1hdGgubWluKHRvLCBwb3MgKyBub2RlLm5vZGVTaXplKTtcclxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSByZWxhdGl2ZVRvIC0gcmVsYXRpdmVGcm9tO1xyXG4gICAgICAgICAgICBzZWxlY3Rpb25SYW5nZSArPSByYW5nZTtcclxuICAgICAgICAgICAgbWFya1Jhbmdlcy5wdXNoKC4uLm5vZGUubWFya3MubWFwKG1hcmsgPT4gKHtcclxuICAgICAgICAgICAgICAgIG1hcmssXHJcbiAgICAgICAgICAgICAgICBmcm9tOiByZWxhdGl2ZUZyb20sXHJcbiAgICAgICAgICAgICAgICB0bzogcmVsYXRpdmVUbyxcclxuICAgICAgICAgICAgfSkpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgaWYgKHNlbGVjdGlvblJhbmdlID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gY2FsY3VsYXRlIHJhbmdlIG9mIG1hdGNoZWQgbWFya1xyXG4gICAgY29uc3QgbWF0Y2hlZFJhbmdlID0gbWFya1Jhbmdlc1xyXG4gICAgICAgIC5maWx0ZXIobWFya1JhbmdlID0+IHtcclxuICAgICAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0eXBlLm5hbWUgPT09IG1hcmtSYW5nZS5tYXJrLnR5cGUubmFtZTtcclxuICAgIH0pXHJcbiAgICAgICAgLmZpbHRlcihtYXJrUmFuZ2UgPT4gb2JqZWN0SW5jbHVkZXMobWFya1JhbmdlLm1hcmsuYXR0cnMsIGF0dHJpYnV0ZXMsIHsgc3RyaWN0OiBmYWxzZSB9KSlcclxuICAgICAgICAucmVkdWNlKChzdW0sIG1hcmtSYW5nZSkgPT4gc3VtICsgbWFya1JhbmdlLnRvIC0gbWFya1JhbmdlLmZyb20sIDApO1xyXG4gICAgLy8gY2FsY3VsYXRlIHJhbmdlIG9mIG1hcmtzIHRoYXQgZXhjbHVkZXMgdGhlIHNlYXJjaGVkIG1hcmtcclxuICAgIC8vIGZvciBleGFtcGxlIGBjb2RlYCBkb2VzbuKAmXQgYWxsb3cgYW55IG90aGVyIG1hcmtzXHJcbiAgICBjb25zdCBleGNsdWRlZFJhbmdlID0gbWFya1Jhbmdlc1xyXG4gICAgICAgIC5maWx0ZXIobWFya1JhbmdlID0+IHtcclxuICAgICAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXJrUmFuZ2UubWFyay50eXBlICE9PSB0eXBlICYmIG1hcmtSYW5nZS5tYXJrLnR5cGUuZXhjbHVkZXModHlwZSk7XHJcbiAgICB9KVxyXG4gICAgICAgIC5yZWR1Y2UoKHN1bSwgbWFya1JhbmdlKSA9PiBzdW0gKyBtYXJrUmFuZ2UudG8gLSBtYXJrUmFuZ2UuZnJvbSwgMCk7XHJcbiAgICAvLyB3ZSBvbmx5IGluY2x1ZGUgdGhlIHJlc3VsdCBvZiBgZXhjbHVkZWRSYW5nZWBcclxuICAgIC8vIGlmIHRoZXJlIGlzIGEgbWF0Y2ggYXQgYWxsXHJcbiAgICBjb25zdCByYW5nZSA9IG1hdGNoZWRSYW5nZSA+IDAgPyBtYXRjaGVkUmFuZ2UgKyBleGNsdWRlZFJhbmdlIDogbWF0Y2hlZFJhbmdlO1xyXG4gICAgcmV0dXJuIHJhbmdlID49IHNlbGVjdGlvblJhbmdlO1xyXG59XG5cbmZ1bmN0aW9uIGlzQWN0aXZlKHN0YXRlLCBuYW1lLCBhdHRyaWJ1dGVzID0ge30pIHtcclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgIHJldHVybiBpc05vZGVBY3RpdmUoc3RhdGUsIG51bGwsIGF0dHJpYnV0ZXMpIHx8IGlzTWFya0FjdGl2ZShzdGF0ZSwgbnVsbCwgYXR0cmlidXRlcyk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzY2hlbWFUeXBlID0gZ2V0U2NoZW1hVHlwZU5hbWVCeU5hbWUobmFtZSwgc3RhdGUuc2NoZW1hKTtcclxuICAgIGlmIChzY2hlbWFUeXBlID09PSAnbm9kZScpIHtcclxuICAgICAgICByZXR1cm4gaXNOb2RlQWN0aXZlKHN0YXRlLCBuYW1lLCBhdHRyaWJ1dGVzKTtcclxuICAgIH1cclxuICAgIGlmIChzY2hlbWFUeXBlID09PSAnbWFyaycpIHtcclxuICAgICAgICByZXR1cm4gaXNNYXJrQWN0aXZlKHN0YXRlLCBuYW1lLCBhdHRyaWJ1dGVzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxuXG5jb25zdCBpc0F0RW5kT2ZOb2RlID0gKHN0YXRlLCBub2RlVHlwZSkgPT4ge1xyXG4gICAgY29uc3QgeyAkZnJvbSwgJHRvLCAkYW5jaG9yIH0gPSBzdGF0ZS5zZWxlY3Rpb247XHJcbiAgICBpZiAobm9kZVR5cGUpIHtcclxuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gZmluZFBhcmVudE5vZGUobm9kZSA9PiBub2RlLnR5cGUubmFtZSA9PT0gbm9kZVR5cGUpKHN0YXRlLnNlbGVjdGlvbik7XHJcbiAgICAgICAgaWYgKCFwYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgJHBhcmVudFBvcyA9IHN0YXRlLmRvYy5yZXNvbHZlKHBhcmVudE5vZGUucG9zICsgMSk7XHJcbiAgICAgICAgaWYgKCRhbmNob3IucG9zICsgMSA9PT0gJHBhcmVudFBvcy5lbmQoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKCR0by5wYXJlbnRPZmZzZXQgPCAkdG8ucGFyZW50Lm5vZGVTaXplIC0gMiB8fCAkZnJvbS5wb3MgIT09ICR0by5wb3MpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcblxuY29uc3QgaXNBdFN0YXJ0T2ZOb2RlID0gKHN0YXRlKSA9PiB7XHJcbiAgICBjb25zdCB7ICRmcm9tLCAkdG8gfSA9IHN0YXRlLnNlbGVjdGlvbjtcclxuICAgIGlmICgkZnJvbS5wYXJlbnRPZmZzZXQgPiAwIHx8ICRmcm9tLnBvcyAhPT0gJHRvLnBvcykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xuXG5mdW5jdGlvbiBpc0xpc3QobmFtZSwgZXh0ZW5zaW9ucykge1xyXG4gICAgY29uc3QgeyBub2RlRXh0ZW5zaW9ucyB9ID0gc3BsaXRFeHRlbnNpb25zKGV4dGVuc2lvbnMpO1xyXG4gICAgY29uc3QgZXh0ZW5zaW9uID0gbm9kZUV4dGVuc2lvbnMuZmluZChpdGVtID0+IGl0ZW0ubmFtZSA9PT0gbmFtZSk7XHJcbiAgICBpZiAoIWV4dGVuc2lvbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbnRleHQgPSB7XHJcbiAgICAgICAgbmFtZTogZXh0ZW5zaW9uLm5hbWUsXHJcbiAgICAgICAgb3B0aW9uczogZXh0ZW5zaW9uLm9wdGlvbnMsXHJcbiAgICAgICAgc3RvcmFnZTogZXh0ZW5zaW9uLnN0b3JhZ2UsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgZ3JvdXAgPSBjYWxsT3JSZXR1cm4oZ2V0RXh0ZW5zaW9uRmllbGQoZXh0ZW5zaW9uLCAnZ3JvdXAnLCBjb250ZXh0KSk7XHJcbiAgICBpZiAodHlwZW9mIGdyb3VwICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5zcGxpdCgnICcpLmluY2x1ZGVzKCdsaXN0Jyk7XHJcbn1cblxuZnVuY3Rpb24gaXNOb2RlRW1wdHkobm9kZSkge1xyXG4gICAgdmFyIF9hO1xyXG4gICAgY29uc3QgZGVmYXVsdENvbnRlbnQgPSAoX2EgPSBub2RlLnR5cGUuY3JlYXRlQW5kRmlsbCgpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9KU09OKCk7XHJcbiAgICBjb25zdCBjb250ZW50ID0gbm9kZS50b0pTT04oKTtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkZWZhdWx0Q29udGVudCkgPT09IEpTT04uc3RyaW5naWZ5KGNvbnRlbnQpO1xyXG59XG5cbmZ1bmN0aW9uIGlzTm9kZVNlbGVjdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTm9kZVNlbGVjdGlvbjtcclxufVxuXG5mdW5jdGlvbiBwb3NUb0RPTVJlY3QodmlldywgZnJvbSwgdG8pIHtcclxuICAgIGNvbnN0IG1pblBvcyA9IDA7XHJcbiAgICBjb25zdCBtYXhQb3MgPSB2aWV3LnN0YXRlLmRvYy5jb250ZW50LnNpemU7XHJcbiAgICBjb25zdCByZXNvbHZlZEZyb20gPSBtaW5NYXgoZnJvbSwgbWluUG9zLCBtYXhQb3MpO1xyXG4gICAgY29uc3QgcmVzb2x2ZWRFbmQgPSBtaW5NYXgodG8sIG1pblBvcywgbWF4UG9zKTtcclxuICAgIGNvbnN0IHN0YXJ0ID0gdmlldy5jb29yZHNBdFBvcyhyZXNvbHZlZEZyb20pO1xyXG4gICAgY29uc3QgZW5kID0gdmlldy5jb29yZHNBdFBvcyhyZXNvbHZlZEVuZCwgLTEpO1xyXG4gICAgY29uc3QgdG9wID0gTWF0aC5taW4oc3RhcnQudG9wLCBlbmQudG9wKTtcclxuICAgIGNvbnN0IGJvdHRvbSA9IE1hdGgubWF4KHN0YXJ0LmJvdHRvbSwgZW5kLmJvdHRvbSk7XHJcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5taW4oc3RhcnQubGVmdCwgZW5kLmxlZnQpO1xyXG4gICAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChzdGFydC5yaWdodCwgZW5kLnJpZ2h0KTtcclxuICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xyXG4gICAgY29uc3QgeCA9IGxlZnQ7XHJcbiAgICBjb25zdCB5ID0gdG9wO1xyXG4gICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICB0b3AsXHJcbiAgICAgICAgYm90dG9tLFxyXG4gICAgICAgIGxlZnQsXHJcbiAgICAgICAgcmlnaHQsXHJcbiAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0LFxyXG4gICAgICAgIHgsXHJcbiAgICAgICAgeSxcclxuICAgIH07XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmRhdGEsXHJcbiAgICAgICAgdG9KU09OOiAoKSA9PiBkYXRhLFxyXG4gICAgfTtcclxufVxuXG5mdW5jdGlvbiBjYW5TZXRNYXJrKHN0YXRlLCB0ciwgbmV3TWFya1R5cGUpIHtcclxuICAgIHZhciBfYTtcclxuICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSB0cjtcclxuICAgIGxldCBjdXJzb3IgPSBudWxsO1xyXG4gICAgaWYgKGlzVGV4dFNlbGVjdGlvbihzZWxlY3Rpb24pKSB7XHJcbiAgICAgICAgY3Vyc29yID0gc2VsZWN0aW9uLiRjdXJzb3I7XHJcbiAgICB9XHJcbiAgICBpZiAoY3Vyc29yKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudE1hcmtzID0gKF9hID0gc3RhdGUuc3RvcmVkTWFya3MpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGN1cnNvci5tYXJrcygpO1xyXG4gICAgICAgIC8vIFRoZXJlIGNhbiBiZSBubyBjdXJyZW50IG1hcmtzIHRoYXQgZXhjbHVkZSB0aGUgbmV3IG1hcmtcclxuICAgICAgICByZXR1cm4gKCEhbmV3TWFya1R5cGUuaXNJblNldChjdXJyZW50TWFya3MpXHJcbiAgICAgICAgICAgIHx8ICFjdXJyZW50TWFya3Muc29tZShtYXJrID0+IG1hcmsudHlwZS5leGNsdWRlcyhuZXdNYXJrVHlwZSkpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgcmFuZ2VzIH0gPSBzZWxlY3Rpb247XHJcbiAgICByZXR1cm4gcmFuZ2VzLnNvbWUoKHsgJGZyb20sICR0byB9KSA9PiB7XHJcbiAgICAgICAgbGV0IHNvbWVOb2RlU3VwcG9ydHNNYXJrID0gJGZyb20uZGVwdGggPT09IDBcclxuICAgICAgICAgICAgPyBzdGF0ZS5kb2MuaW5saW5lQ29udGVudCAmJiBzdGF0ZS5kb2MudHlwZS5hbGxvd3NNYXJrVHlwZShuZXdNYXJrVHlwZSlcclxuICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICBzdGF0ZS5kb2Mubm9kZXNCZXR3ZWVuKCRmcm9tLnBvcywgJHRvLnBvcywgKG5vZGUsIF9wb3MsIHBhcmVudCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IGZvdW5kIGEgbWFyayB0aGF0IHdlIGNhbiBlbmFibGUsIHJldHVybiBmYWxzZSB0byBieXBhc3MgdGhlIHJlbWFpbmluZyBzZWFyY2hcclxuICAgICAgICAgICAgaWYgKHNvbWVOb2RlU3VwcG9ydHNNYXJrKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5vZGUuaXNJbmxpbmUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudEFsbG93c01hcmtUeXBlID0gIXBhcmVudCB8fCBwYXJlbnQudHlwZS5hbGxvd3NNYXJrVHlwZShuZXdNYXJrVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50TWFya3NBbGxvd01hcmtUeXBlID0gISFuZXdNYXJrVHlwZS5pc0luU2V0KG5vZGUubWFya3MpXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgIW5vZGUubWFya3Muc29tZShvdGhlck1hcmsgPT4gb3RoZXJNYXJrLnR5cGUuZXhjbHVkZXMobmV3TWFya1R5cGUpKTtcclxuICAgICAgICAgICAgICAgIHNvbWVOb2RlU3VwcG9ydHNNYXJrID0gcGFyZW50QWxsb3dzTWFya1R5cGUgJiYgY3VycmVudE1hcmtzQWxsb3dNYXJrVHlwZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gIXNvbWVOb2RlU3VwcG9ydHNNYXJrO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBzb21lTm9kZVN1cHBvcnRzTWFyaztcclxuICAgIH0pO1xyXG59XHJcbmNvbnN0IHNldE1hcmsgPSAodHlwZU9yTmFtZSwgYXR0cmlidXRlcyA9IHt9KSA9PiAoeyB0ciwgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSB0cjtcclxuICAgIGNvbnN0IHsgZW1wdHksIHJhbmdlcyB9ID0gc2VsZWN0aW9uO1xyXG4gICAgY29uc3QgdHlwZSA9IGdldE1hcmtUeXBlKHR5cGVPck5hbWUsIHN0YXRlLnNjaGVtYSk7XHJcbiAgICBpZiAoZGlzcGF0Y2gpIHtcclxuICAgICAgICBpZiAoZW1wdHkpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2xkQXR0cmlidXRlcyA9IGdldE1hcmtBdHRyaWJ1dGVzKHN0YXRlLCB0eXBlKTtcclxuICAgICAgICAgICAgdHIuYWRkU3RvcmVkTWFyayh0eXBlLmNyZWF0ZSh7XHJcbiAgICAgICAgICAgICAgICAuLi5vbGRBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgLi4uYXR0cmlidXRlcyxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmFuZ2VzLmZvckVhY2gocmFuZ2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZnJvbSA9IHJhbmdlLiRmcm9tLnBvcztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRvID0gcmFuZ2UuJHRvLnBvcztcclxuICAgICAgICAgICAgICAgIHN0YXRlLmRvYy5ub2Rlc0JldHdlZW4oZnJvbSwgdG8sIChub2RlLCBwb3MpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmltbWVkRnJvbSA9IE1hdGgubWF4KHBvcywgZnJvbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJpbW1lZFRvID0gTWF0aC5taW4ocG9zICsgbm9kZS5ub2RlU2l6ZSwgdG8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvbWVIYXNNYXJrID0gbm9kZS5tYXJrcy5maW5kKG1hcmsgPT4gbWFyay50eXBlID09PSB0eXBlKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgbWFyayBvZiB0aGlzIHR5cGVcclxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSB0byBtZXJnZSBpdHMgYXR0cmlidXRlc1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSBhZGQgYSBmcmVzaCBuZXcgbWFya1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzb21lSGFzTWFyaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLm1hcmtzLmZvckVhY2gobWFyayA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gbWFyay50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHIuYWRkTWFyayh0cmltbWVkRnJvbSwgdHJpbW1lZFRvLCB0eXBlLmNyZWF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm1hcmsuYXR0cnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFkZE1hcmsodHJpbW1lZEZyb20sIHRyaW1tZWRUbywgdHlwZS5jcmVhdGUoYXR0cmlidXRlcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2FuU2V0TWFyayhzdGF0ZSwgdHIsIHR5cGUpO1xyXG59O1xuXG5jb25zdCBzZXRNZXRhID0gKGtleSwgdmFsdWUpID0+ICh7IHRyIH0pID0+IHtcclxuICAgIHRyLnNldE1ldGEoa2V5LCB2YWx1ZSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcblxuY29uc3Qgc2V0Tm9kZSA9ICh0eXBlT3JOYW1lLCBhdHRyaWJ1dGVzID0ge30pID0+ICh7IHN0YXRlLCBkaXNwYXRjaCwgY2hhaW4gfSkgPT4ge1xyXG4gICAgY29uc3QgdHlwZSA9IGdldE5vZGVUeXBlKHR5cGVPck5hbWUsIHN0YXRlLnNjaGVtYSk7XHJcbiAgICAvLyBUT0RPOiB1c2UgYSBmYWxsYmFjayBsaWtlIGluc2VydENvbnRlbnQ/XHJcbiAgICBpZiAoIXR5cGUuaXNUZXh0YmxvY2spIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ1t0aXB0YXAgd2Fybl06IEN1cnJlbnRseSBcInNldE5vZGUoKVwiIG9ubHkgc3VwcG9ydHMgdGV4dCBibG9jayBub2Rlcy4nKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKGNoYWluKClcclxuICAgICAgICAvLyB0cnkgdG8gY29udmVydCBub2RlIHRvIGRlZmF1bHQgbm9kZSBpZiBuZWVkZWRcclxuICAgICAgICAuY29tbWFuZCgoeyBjb21tYW5kcyB9KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2FuU2V0QmxvY2sgPSBzZXRCbG9ja1R5cGUodHlwZSwgYXR0cmlidXRlcykoc3RhdGUpO1xyXG4gICAgICAgIGlmIChjYW5TZXRCbG9jaykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbW1hbmRzLmNsZWFyTm9kZXMoKTtcclxuICAgIH0pXHJcbiAgICAgICAgLmNvbW1hbmQoKHsgc3RhdGU6IHVwZGF0ZWRTdGF0ZSB9KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHNldEJsb2NrVHlwZSh0eXBlLCBhdHRyaWJ1dGVzKSh1cGRhdGVkU3RhdGUsIGRpc3BhdGNoKTtcclxuICAgIH0pXHJcbiAgICAgICAgLnJ1bigpKTtcclxufTtcblxuY29uc3Qgc2V0Tm9kZVNlbGVjdGlvbiA9IHBvc2l0aW9uID0+ICh7IHRyLCBkaXNwYXRjaCB9KSA9PiB7XHJcbiAgICBpZiAoZGlzcGF0Y2gpIHtcclxuICAgICAgICBjb25zdCB7IGRvYyB9ID0gdHI7XHJcbiAgICAgICAgY29uc3QgZnJvbSA9IG1pbk1heChwb3NpdGlvbiwgMCwgZG9jLmNvbnRlbnQuc2l6ZSk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gTm9kZVNlbGVjdGlvbi5jcmVhdGUoZG9jLCBmcm9tKTtcclxuICAgICAgICB0ci5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xuXG5jb25zdCBzZXRUZXh0U2VsZWN0aW9uID0gcG9zaXRpb24gPT4gKHsgdHIsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgIGlmIChkaXNwYXRjaCkge1xyXG4gICAgICAgIGNvbnN0IHsgZG9jIH0gPSB0cjtcclxuICAgICAgICBjb25zdCB7IGZyb20sIHRvIH0gPSB0eXBlb2YgcG9zaXRpb24gPT09ICdudW1iZXInID8geyBmcm9tOiBwb3NpdGlvbiwgdG86IHBvc2l0aW9uIH0gOiBwb3NpdGlvbjtcclxuICAgICAgICBjb25zdCBtaW5Qb3MgPSBUZXh0U2VsZWN0aW9uLmF0U3RhcnQoZG9jKS5mcm9tO1xyXG4gICAgICAgIGNvbnN0IG1heFBvcyA9IFRleHRTZWxlY3Rpb24uYXRFbmQoZG9jKS50bztcclxuICAgICAgICBjb25zdCByZXNvbHZlZEZyb20gPSBtaW5NYXgoZnJvbSwgbWluUG9zLCBtYXhQb3MpO1xyXG4gICAgICAgIGNvbnN0IHJlc29sdmVkRW5kID0gbWluTWF4KHRvLCBtaW5Qb3MsIG1heFBvcyk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gVGV4dFNlbGVjdGlvbi5jcmVhdGUoZG9jLCByZXNvbHZlZEZyb20sIHJlc29sdmVkRW5kKTtcclxuICAgICAgICB0ci5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xuXG5jb25zdCBzaW5rTGlzdEl0ZW0gPSB0eXBlT3JOYW1lID0+ICh7IHN0YXRlLCBkaXNwYXRjaCB9KSA9PiB7XHJcbiAgICBjb25zdCB0eXBlID0gZ2V0Tm9kZVR5cGUodHlwZU9yTmFtZSwgc3RhdGUuc2NoZW1hKTtcclxuICAgIHJldHVybiBzaW5rTGlzdEl0ZW0kMSh0eXBlKShzdGF0ZSwgZGlzcGF0Y2gpO1xyXG59O1xuXG5mdW5jdGlvbiBlbnN1cmVNYXJrcyhzdGF0ZSwgc3BsaXR0YWJsZU1hcmtzKSB7XHJcbiAgICBjb25zdCBtYXJrcyA9IHN0YXRlLnN0b3JlZE1hcmtzIHx8IChzdGF0ZS5zZWxlY3Rpb24uJHRvLnBhcmVudE9mZnNldCAmJiBzdGF0ZS5zZWxlY3Rpb24uJGZyb20ubWFya3MoKSk7XHJcbiAgICBpZiAobWFya3MpIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJlZE1hcmtzID0gbWFya3MuZmlsdGVyKG1hcmsgPT4gc3BsaXR0YWJsZU1hcmtzID09PSBudWxsIHx8IHNwbGl0dGFibGVNYXJrcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3BsaXR0YWJsZU1hcmtzLmluY2x1ZGVzKG1hcmsudHlwZS5uYW1lKSk7XHJcbiAgICAgICAgc3RhdGUudHIuZW5zdXJlTWFya3MoZmlsdGVyZWRNYXJrcyk7XHJcbiAgICB9XHJcbn1cclxuY29uc3Qgc3BsaXRCbG9jayA9ICh7IGtlZXBNYXJrcyA9IHRydWUgfSA9IHt9KSA9PiAoeyB0ciwgc3RhdGUsIGRpc3BhdGNoLCBlZGl0b3IsIH0pID0+IHtcclxuICAgIGNvbnN0IHsgc2VsZWN0aW9uLCBkb2MgfSA9IHRyO1xyXG4gICAgY29uc3QgeyAkZnJvbSwgJHRvIH0gPSBzZWxlY3Rpb247XHJcbiAgICBjb25zdCBleHRlbnNpb25BdHRyaWJ1dGVzID0gZWRpdG9yLmV4dGVuc2lvbk1hbmFnZXIuYXR0cmlidXRlcztcclxuICAgIGNvbnN0IG5ld0F0dHJpYnV0ZXMgPSBnZXRTcGxpdHRlZEF0dHJpYnV0ZXMoZXh0ZW5zaW9uQXR0cmlidXRlcywgJGZyb20ubm9kZSgpLnR5cGUubmFtZSwgJGZyb20ubm9kZSgpLmF0dHJzKTtcclxuICAgIGlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBOb2RlU2VsZWN0aW9uICYmIHNlbGVjdGlvbi5ub2RlLmlzQmxvY2spIHtcclxuICAgICAgICBpZiAoISRmcm9tLnBhcmVudE9mZnNldCB8fCAhY2FuU3BsaXQoZG9jLCAkZnJvbS5wb3MpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRpc3BhdGNoKSB7XHJcbiAgICAgICAgICAgIGlmIChrZWVwTWFya3MpIHtcclxuICAgICAgICAgICAgICAgIGVuc3VyZU1hcmtzKHN0YXRlLCBlZGl0b3IuZXh0ZW5zaW9uTWFuYWdlci5zcGxpdHRhYmxlTWFya3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyLnNwbGl0KCRmcm9tLnBvcykuc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoISRmcm9tLnBhcmVudC5pc0Jsb2NrKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGRpc3BhdGNoKSB7XHJcbiAgICAgICAgY29uc3QgYXRFbmQgPSAkdG8ucGFyZW50T2Zmc2V0ID09PSAkdG8ucGFyZW50LmNvbnRlbnQuc2l6ZTtcclxuICAgICAgICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgVGV4dFNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICB0ci5kZWxldGVTZWxlY3Rpb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGVmbHQgPSAkZnJvbS5kZXB0aCA9PT0gMFxyXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA6IGRlZmF1bHRCbG9ja0F0KCRmcm9tLm5vZGUoLTEpLmNvbnRlbnRNYXRjaEF0KCRmcm9tLmluZGV4QWZ0ZXIoLTEpKSk7XHJcbiAgICAgICAgbGV0IHR5cGVzID0gYXRFbmQgJiYgZGVmbHRcclxuICAgICAgICAgICAgPyBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZGVmbHQsXHJcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IG5ld0F0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGxldCBjYW4gPSBjYW5TcGxpdCh0ci5kb2MsIHRyLm1hcHBpbmcubWFwKCRmcm9tLnBvcyksIDEsIHR5cGVzKTtcclxuICAgICAgICBpZiAoIXR5cGVzXHJcbiAgICAgICAgICAgICYmICFjYW5cclxuICAgICAgICAgICAgJiYgY2FuU3BsaXQodHIuZG9jLCB0ci5tYXBwaW5nLm1hcCgkZnJvbS5wb3MpLCAxLCBkZWZsdCA/IFt7IHR5cGU6IGRlZmx0IH1dIDogdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgICBjYW4gPSB0cnVlO1xyXG4gICAgICAgICAgICB0eXBlcyA9IGRlZmx0XHJcbiAgICAgICAgICAgICAgICA/IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGRlZmx0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogbmV3QXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYW4pIHtcclxuICAgICAgICAgICAgdHIuc3BsaXQodHIubWFwcGluZy5tYXAoJGZyb20ucG9zKSwgMSwgdHlwZXMpO1xyXG4gICAgICAgICAgICBpZiAoZGVmbHQgJiYgIWF0RW5kICYmICEkZnJvbS5wYXJlbnRPZmZzZXQgJiYgJGZyb20ucGFyZW50LnR5cGUgIT09IGRlZmx0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdCA9IHRyLm1hcHBpbmcubWFwKCRmcm9tLmJlZm9yZSgpKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0ICRmaXJzdCA9IHRyLmRvYy5yZXNvbHZlKGZpcnN0KTtcclxuICAgICAgICAgICAgICAgIGlmICgkZnJvbS5ub2RlKC0xKS5jYW5SZXBsYWNlV2l0aCgkZmlyc3QuaW5kZXgoKSwgJGZpcnN0LmluZGV4KCkgKyAxLCBkZWZsdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ci5zZXROb2RlTWFya3VwKHRyLm1hcHBpbmcubWFwKCRmcm9tLmJlZm9yZSgpKSwgZGVmbHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrZWVwTWFya3MpIHtcclxuICAgICAgICAgICAgZW5zdXJlTWFya3Moc3RhdGUsIGVkaXRvci5leHRlbnNpb25NYW5hZ2VyLnNwbGl0dGFibGVNYXJrcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcblxuY29uc3Qgc3BsaXRMaXN0SXRlbSA9IHR5cGVPck5hbWUgPT4gKHsgdHIsIHN0YXRlLCBkaXNwYXRjaCwgZWRpdG9yLCB9KSA9PiB7XHJcbiAgICB2YXIgX2E7XHJcbiAgICBjb25zdCB0eXBlID0gZ2V0Tm9kZVR5cGUodHlwZU9yTmFtZSwgc3RhdGUuc2NoZW1hKTtcclxuICAgIGNvbnN0IHsgJGZyb20sICR0byB9ID0gc3RhdGUuc2VsZWN0aW9uO1xyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXHJcbiAgICBjb25zdCBub2RlID0gc3RhdGUuc2VsZWN0aW9uLm5vZGU7XHJcbiAgICBpZiAoKG5vZGUgJiYgbm9kZS5pc0Jsb2NrKSB8fCAkZnJvbS5kZXB0aCA8IDIgfHwgISRmcm9tLnNhbWVQYXJlbnQoJHRvKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGdyYW5kUGFyZW50ID0gJGZyb20ubm9kZSgtMSk7XHJcbiAgICBpZiAoZ3JhbmRQYXJlbnQudHlwZSAhPT0gdHlwZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGV4dGVuc2lvbkF0dHJpYnV0ZXMgPSBlZGl0b3IuZXh0ZW5zaW9uTWFuYWdlci5hdHRyaWJ1dGVzO1xyXG4gICAgaWYgKCRmcm9tLnBhcmVudC5jb250ZW50LnNpemUgPT09IDAgJiYgJGZyb20ubm9kZSgtMSkuY2hpbGRDb3VudCA9PT0gJGZyb20uaW5kZXhBZnRlcigtMSkpIHtcclxuICAgICAgICAvLyBJbiBhbiBlbXB0eSBibG9jay4gSWYgdGhpcyBpcyBhIG5lc3RlZCBsaXN0LCB0aGUgd3JhcHBpbmdcclxuICAgICAgICAvLyBsaXN0IGl0ZW0gc2hvdWxkIGJlIHNwbGl0LiBPdGhlcndpc2UsIGJhaWwgb3V0IGFuZCBsZXQgbmV4dFxyXG4gICAgICAgIC8vIGNvbW1hbmQgaGFuZGxlIGxpZnRpbmcuXHJcbiAgICAgICAgaWYgKCRmcm9tLmRlcHRoID09PSAyXHJcbiAgICAgICAgICAgIHx8ICRmcm9tLm5vZGUoLTMpLnR5cGUgIT09IHR5cGVcclxuICAgICAgICAgICAgfHwgJGZyb20uaW5kZXgoLTIpICE9PSAkZnJvbS5ub2RlKC0yKS5jaGlsZENvdW50IC0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaXNwYXRjaCkge1xyXG4gICAgICAgICAgICBsZXQgd3JhcCA9IEZyYWdtZW50LmVtcHR5O1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgICAgICAgICAgY29uc3QgZGVwdGhCZWZvcmUgPSAkZnJvbS5pbmRleCgtMSkgPyAxIDogJGZyb20uaW5kZXgoLTIpID8gMiA6IDM7XHJcbiAgICAgICAgICAgIC8vIEJ1aWxkIGEgZnJhZ21lbnQgY29udGFpbmluZyBlbXB0eSB2ZXJzaW9ucyBvZiB0aGUgc3RydWN0dXJlXHJcbiAgICAgICAgICAgIC8vIGZyb20gdGhlIG91dGVyIGxpc3QgaXRlbSB0byB0aGUgcGFyZW50IG5vZGUgb2YgdGhlIGN1cnNvclxyXG4gICAgICAgICAgICBmb3IgKGxldCBkID0gJGZyb20uZGVwdGggLSBkZXB0aEJlZm9yZTsgZCA+PSAkZnJvbS5kZXB0aCAtIDM7IGQgLT0gMSkge1xyXG4gICAgICAgICAgICAgICAgd3JhcCA9IEZyYWdtZW50LmZyb20oJGZyb20ubm9kZShkKS5jb3B5KHdyYXApKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgICAgICAgICAgY29uc3QgZGVwdGhBZnRlciA9ICRmcm9tLmluZGV4QWZ0ZXIoLTEpIDwgJGZyb20ubm9kZSgtMikuY2hpbGRDb3VudCA/IDEgOiAkZnJvbS5pbmRleEFmdGVyKC0yKSA8ICRmcm9tLm5vZGUoLTMpLmNoaWxkQ291bnQgPyAyIDogMztcclxuICAgICAgICAgICAgLy8gQWRkIGEgc2Vjb25kIGxpc3QgaXRlbSB3aXRoIGFuIGVtcHR5IGRlZmF1bHQgc3RhcnQgbm9kZVxyXG4gICAgICAgICAgICBjb25zdCBuZXdOZXh0VHlwZUF0dHJpYnV0ZXMgPSBnZXRTcGxpdHRlZEF0dHJpYnV0ZXMoZXh0ZW5zaW9uQXR0cmlidXRlcywgJGZyb20ubm9kZSgpLnR5cGUubmFtZSwgJGZyb20ubm9kZSgpLmF0dHJzKTtcclxuICAgICAgICAgICAgY29uc3QgbmV4dFR5cGUgPSAoKF9hID0gdHlwZS5jb250ZW50TWF0Y2guZGVmYXVsdFR5cGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jcmVhdGVBbmRGaWxsKG5ld05leHRUeXBlQXR0cmlidXRlcykpIHx8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgd3JhcCA9IHdyYXAuYXBwZW5kKEZyYWdtZW50LmZyb20odHlwZS5jcmVhdGVBbmRGaWxsKG51bGwsIG5leHRUeXBlKSB8fCB1bmRlZmluZWQpKTtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAkZnJvbS5iZWZvcmUoJGZyb20uZGVwdGggLSAoZGVwdGhCZWZvcmUgLSAxKSk7XHJcbiAgICAgICAgICAgIHRyLnJlcGxhY2Uoc3RhcnQsICRmcm9tLmFmdGVyKC1kZXB0aEFmdGVyKSwgbmV3IFNsaWNlKHdyYXAsIDQgLSBkZXB0aEJlZm9yZSwgMCkpO1xyXG4gICAgICAgICAgICBsZXQgc2VsID0gLTE7XHJcbiAgICAgICAgICAgIHRyLmRvYy5ub2Rlc0JldHdlZW4oc3RhcnQsIHRyLmRvYy5jb250ZW50LnNpemUsIChuLCBwb3MpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWwgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChuLmlzVGV4dGJsb2NrICYmIG4uY29udGVudC5zaXplID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsID0gcG9zICsgMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChzZWwgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgdHIuc2V0U2VsZWN0aW9uKFRleHRTZWxlY3Rpb24ubmVhcih0ci5kb2MucmVzb2x2ZShzZWwpKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHIuc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuZXh0VHlwZSA9ICR0by5wb3MgPT09ICRmcm9tLmVuZCgpID8gZ3JhbmRQYXJlbnQuY29udGVudE1hdGNoQXQoMCkuZGVmYXVsdFR5cGUgOiBudWxsO1xyXG4gICAgY29uc3QgbmV3VHlwZUF0dHJpYnV0ZXMgPSBnZXRTcGxpdHRlZEF0dHJpYnV0ZXMoZXh0ZW5zaW9uQXR0cmlidXRlcywgZ3JhbmRQYXJlbnQudHlwZS5uYW1lLCBncmFuZFBhcmVudC5hdHRycyk7XHJcbiAgICBjb25zdCBuZXdOZXh0VHlwZUF0dHJpYnV0ZXMgPSBnZXRTcGxpdHRlZEF0dHJpYnV0ZXMoZXh0ZW5zaW9uQXR0cmlidXRlcywgJGZyb20ubm9kZSgpLnR5cGUubmFtZSwgJGZyb20ubm9kZSgpLmF0dHJzKTtcclxuICAgIHRyLmRlbGV0ZSgkZnJvbS5wb3MsICR0by5wb3MpO1xyXG4gICAgY29uc3QgdHlwZXMgPSBuZXh0VHlwZVxyXG4gICAgICAgID8gW1xyXG4gICAgICAgICAgICB7IHR5cGUsIGF0dHJzOiBuZXdUeXBlQXR0cmlidXRlcyB9LFxyXG4gICAgICAgICAgICB7IHR5cGU6IG5leHRUeXBlLCBhdHRyczogbmV3TmV4dFR5cGVBdHRyaWJ1dGVzIH0sXHJcbiAgICAgICAgXVxyXG4gICAgICAgIDogW3sgdHlwZSwgYXR0cnM6IG5ld1R5cGVBdHRyaWJ1dGVzIH1dO1xyXG4gICAgaWYgKCFjYW5TcGxpdCh0ci5kb2MsICRmcm9tLnBvcywgMikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoZGlzcGF0Y2gpIHtcclxuICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiwgc3RvcmVkTWFya3MgfSA9IHN0YXRlO1xyXG4gICAgICAgIGNvbnN0IHsgc3BsaXR0YWJsZU1hcmtzIH0gPSBlZGl0b3IuZXh0ZW5zaW9uTWFuYWdlcjtcclxuICAgICAgICBjb25zdCBtYXJrcyA9IHN0b3JlZE1hcmtzIHx8IChzZWxlY3Rpb24uJHRvLnBhcmVudE9mZnNldCAmJiBzZWxlY3Rpb24uJGZyb20ubWFya3MoKSk7XHJcbiAgICAgICAgdHIuc3BsaXQoJGZyb20ucG9zLCAyLCB0eXBlcykuc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgICAgICBpZiAoIW1hcmtzIHx8ICFkaXNwYXRjaCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRNYXJrcyA9IG1hcmtzLmZpbHRlcihtYXJrID0+IHNwbGl0dGFibGVNYXJrcy5pbmNsdWRlcyhtYXJrLnR5cGUubmFtZSkpO1xyXG4gICAgICAgIHRyLmVuc3VyZU1hcmtzKGZpbHRlcmVkTWFya3MpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XG5cbmNvbnN0IGpvaW5MaXN0QmFja3dhcmRzID0gKHRyLCBsaXN0VHlwZSkgPT4ge1xyXG4gICAgY29uc3QgbGlzdCA9IGZpbmRQYXJlbnROb2RlKG5vZGUgPT4gbm9kZS50eXBlID09PSBsaXN0VHlwZSkodHIuc2VsZWN0aW9uKTtcclxuICAgIGlmICghbGlzdCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYmVmb3JlID0gdHIuZG9jLnJlc29sdmUoTWF0aC5tYXgoMCwgbGlzdC5wb3MgLSAxKSkuYmVmb3JlKGxpc3QuZGVwdGgpO1xyXG4gICAgaWYgKGJlZm9yZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBub2RlQmVmb3JlID0gdHIuZG9jLm5vZGVBdChiZWZvcmUpO1xyXG4gICAgY29uc3QgY2FuSm9pbkJhY2t3YXJkcyA9IGxpc3Qubm9kZS50eXBlID09PSAobm9kZUJlZm9yZSA9PT0gbnVsbCB8fCBub2RlQmVmb3JlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBub2RlQmVmb3JlLnR5cGUpICYmIGNhbkpvaW4odHIuZG9jLCBsaXN0LnBvcyk7XHJcbiAgICBpZiAoIWNhbkpvaW5CYWNrd2FyZHMpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRyLmpvaW4obGlzdC5wb3MpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcbmNvbnN0IGpvaW5MaXN0Rm9yd2FyZHMgPSAodHIsIGxpc3RUeXBlKSA9PiB7XHJcbiAgICBjb25zdCBsaXN0ID0gZmluZFBhcmVudE5vZGUobm9kZSA9PiBub2RlLnR5cGUgPT09IGxpc3RUeXBlKSh0ci5zZWxlY3Rpb24pO1xyXG4gICAgaWYgKCFsaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhZnRlciA9IHRyLmRvYy5yZXNvbHZlKGxpc3Quc3RhcnQpLmFmdGVyKGxpc3QuZGVwdGgpO1xyXG4gICAgaWYgKGFmdGVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG5vZGVBZnRlciA9IHRyLmRvYy5ub2RlQXQoYWZ0ZXIpO1xyXG4gICAgY29uc3QgY2FuSm9pbkZvcndhcmRzID0gbGlzdC5ub2RlLnR5cGUgPT09IChub2RlQWZ0ZXIgPT09IG51bGwgfHwgbm9kZUFmdGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBub2RlQWZ0ZXIudHlwZSkgJiYgY2FuSm9pbih0ci5kb2MsIGFmdGVyKTtcclxuICAgIGlmICghY2FuSm9pbkZvcndhcmRzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICB0ci5qb2luKGFmdGVyKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5jb25zdCB0b2dnbGVMaXN0ID0gKGxpc3RUeXBlT3JOYW1lLCBpdGVtVHlwZU9yTmFtZSwga2VlcE1hcmtzLCBhdHRyaWJ1dGVzID0ge30pID0+ICh7IGVkaXRvciwgdHIsIHN0YXRlLCBkaXNwYXRjaCwgY2hhaW4sIGNvbW1hbmRzLCBjYW4sIH0pID0+IHtcclxuICAgIGNvbnN0IHsgZXh0ZW5zaW9ucywgc3BsaXR0YWJsZU1hcmtzIH0gPSBlZGl0b3IuZXh0ZW5zaW9uTWFuYWdlcjtcclxuICAgIGNvbnN0IGxpc3RUeXBlID0gZ2V0Tm9kZVR5cGUobGlzdFR5cGVPck5hbWUsIHN0YXRlLnNjaGVtYSk7XHJcbiAgICBjb25zdCBpdGVtVHlwZSA9IGdldE5vZGVUeXBlKGl0ZW1UeXBlT3JOYW1lLCBzdGF0ZS5zY2hlbWEpO1xyXG4gICAgY29uc3QgeyBzZWxlY3Rpb24sIHN0b3JlZE1hcmtzIH0gPSBzdGF0ZTtcclxuICAgIGNvbnN0IHsgJGZyb20sICR0byB9ID0gc2VsZWN0aW9uO1xyXG4gICAgY29uc3QgcmFuZ2UgPSAkZnJvbS5ibG9ja1JhbmdlKCR0byk7XHJcbiAgICBjb25zdCBtYXJrcyA9IHN0b3JlZE1hcmtzIHx8IChzZWxlY3Rpb24uJHRvLnBhcmVudE9mZnNldCAmJiBzZWxlY3Rpb24uJGZyb20ubWFya3MoKSk7XHJcbiAgICBpZiAoIXJhbmdlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGFyZW50TGlzdCA9IGZpbmRQYXJlbnROb2RlKG5vZGUgPT4gaXNMaXN0KG5vZGUudHlwZS5uYW1lLCBleHRlbnNpb25zKSkoc2VsZWN0aW9uKTtcclxuICAgIGlmIChyYW5nZS5kZXB0aCA+PSAxICYmIHBhcmVudExpc3QgJiYgcmFuZ2UuZGVwdGggLSBwYXJlbnRMaXN0LmRlcHRoIDw9IDEpIHtcclxuICAgICAgICAvLyByZW1vdmUgbGlzdFxyXG4gICAgICAgIGlmIChwYXJlbnRMaXN0Lm5vZGUudHlwZSA9PT0gbGlzdFR5cGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLmxpZnRMaXN0SXRlbShpdGVtVHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNoYW5nZSBsaXN0IHR5cGVcclxuICAgICAgICBpZiAoaXNMaXN0KHBhcmVudExpc3Qubm9kZS50eXBlLm5hbWUsIGV4dGVuc2lvbnMpXHJcbiAgICAgICAgICAgICYmIGxpc3RUeXBlLnZhbGlkQ29udGVudChwYXJlbnRMaXN0Lm5vZGUuY29udGVudClcclxuICAgICAgICAgICAgJiYgZGlzcGF0Y2gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNoYWluKClcclxuICAgICAgICAgICAgICAgIC5jb21tYW5kKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRyLnNldE5vZGVNYXJrdXAocGFyZW50TGlzdC5wb3MsIGxpc3RUeXBlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNvbW1hbmQoKCkgPT4gam9pbkxpc3RCYWNrd2FyZHModHIsIGxpc3RUeXBlKSlcclxuICAgICAgICAgICAgICAgIC5jb21tYW5kKCgpID0+IGpvaW5MaXN0Rm9yd2FyZHModHIsIGxpc3RUeXBlKSlcclxuICAgICAgICAgICAgICAgIC5ydW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWtlZXBNYXJrcyB8fCAhbWFya3MgfHwgIWRpc3BhdGNoKSB7XHJcbiAgICAgICAgcmV0dXJuIGNoYWluKClcclxuICAgICAgICAgICAgLy8gdHJ5IHRvIGNvbnZlcnQgbm9kZSB0byBkZWZhdWx0IG5vZGUgaWYgbmVlZGVkXHJcbiAgICAgICAgICAgIC5jb21tYW5kKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2FuV3JhcEluTGlzdCA9IGNhbigpLndyYXBJbkxpc3QobGlzdFR5cGUsIGF0dHJpYnV0ZXMpO1xyXG4gICAgICAgICAgICBpZiAoY2FuV3JhcEluTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLmNsZWFyTm9kZXMoKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAud3JhcEluTGlzdChsaXN0VHlwZSwgYXR0cmlidXRlcylcclxuICAgICAgICAgICAgLmNvbW1hbmQoKCkgPT4gam9pbkxpc3RCYWNrd2FyZHModHIsIGxpc3RUeXBlKSlcclxuICAgICAgICAgICAgLmNvbW1hbmQoKCkgPT4gam9pbkxpc3RGb3J3YXJkcyh0ciwgbGlzdFR5cGUpKVxyXG4gICAgICAgICAgICAucnVuKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKGNoYWluKClcclxuICAgICAgICAvLyB0cnkgdG8gY29udmVydCBub2RlIHRvIGRlZmF1bHQgbm9kZSBpZiBuZWVkZWRcclxuICAgICAgICAuY29tbWFuZCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2FuV3JhcEluTGlzdCA9IGNhbigpLndyYXBJbkxpc3QobGlzdFR5cGUsIGF0dHJpYnV0ZXMpO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkTWFya3MgPSBtYXJrcy5maWx0ZXIobWFyayA9PiBzcGxpdHRhYmxlTWFya3MuaW5jbHVkZXMobWFyay50eXBlLm5hbWUpKTtcclxuICAgICAgICB0ci5lbnN1cmVNYXJrcyhmaWx0ZXJlZE1hcmtzKTtcclxuICAgICAgICBpZiAoY2FuV3JhcEluTGlzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbW1hbmRzLmNsZWFyTm9kZXMoKTtcclxuICAgIH0pXHJcbiAgICAgICAgLndyYXBJbkxpc3QobGlzdFR5cGUsIGF0dHJpYnV0ZXMpXHJcbiAgICAgICAgLmNvbW1hbmQoKCkgPT4gam9pbkxpc3RCYWNrd2FyZHModHIsIGxpc3RUeXBlKSlcclxuICAgICAgICAuY29tbWFuZCgoKSA9PiBqb2luTGlzdEZvcndhcmRzKHRyLCBsaXN0VHlwZSkpXHJcbiAgICAgICAgLnJ1bigpKTtcclxufTtcblxuY29uc3QgdG9nZ2xlTWFyayA9ICh0eXBlT3JOYW1lLCBhdHRyaWJ1dGVzID0ge30sIG9wdGlvbnMgPSB7fSkgPT4gKHsgc3RhdGUsIGNvbW1hbmRzIH0pID0+IHtcclxuICAgIGNvbnN0IHsgZXh0ZW5kRW1wdHlNYXJrUmFuZ2UgPSBmYWxzZSB9ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IHR5cGUgPSBnZXRNYXJrVHlwZSh0eXBlT3JOYW1lLCBzdGF0ZS5zY2hlbWEpO1xyXG4gICAgY29uc3QgaXNBY3RpdmUgPSBpc01hcmtBY3RpdmUoc3RhdGUsIHR5cGUsIGF0dHJpYnV0ZXMpO1xyXG4gICAgaWYgKGlzQWN0aXZlKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnVuc2V0TWFyayh0eXBlLCB7IGV4dGVuZEVtcHR5TWFya1JhbmdlIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbW1hbmRzLnNldE1hcmsodHlwZSwgYXR0cmlidXRlcyk7XHJcbn07XG5cbmNvbnN0IHRvZ2dsZU5vZGUgPSAodHlwZU9yTmFtZSwgdG9nZ2xlVHlwZU9yTmFtZSwgYXR0cmlidXRlcyA9IHt9KSA9PiAoeyBzdGF0ZSwgY29tbWFuZHMgfSkgPT4ge1xyXG4gICAgY29uc3QgdHlwZSA9IGdldE5vZGVUeXBlKHR5cGVPck5hbWUsIHN0YXRlLnNjaGVtYSk7XHJcbiAgICBjb25zdCB0b2dnbGVUeXBlID0gZ2V0Tm9kZVR5cGUodG9nZ2xlVHlwZU9yTmFtZSwgc3RhdGUuc2NoZW1hKTtcclxuICAgIGNvbnN0IGlzQWN0aXZlID0gaXNOb2RlQWN0aXZlKHN0YXRlLCB0eXBlLCBhdHRyaWJ1dGVzKTtcclxuICAgIGlmIChpc0FjdGl2ZSkge1xyXG4gICAgICAgIHJldHVybiBjb21tYW5kcy5zZXROb2RlKHRvZ2dsZVR5cGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbW1hbmRzLnNldE5vZGUodHlwZSwgYXR0cmlidXRlcyk7XHJcbn07XG5cbmNvbnN0IHRvZ2dsZVdyYXAgPSAodHlwZU9yTmFtZSwgYXR0cmlidXRlcyA9IHt9KSA9PiAoeyBzdGF0ZSwgY29tbWFuZHMgfSkgPT4ge1xyXG4gICAgY29uc3QgdHlwZSA9IGdldE5vZGVUeXBlKHR5cGVPck5hbWUsIHN0YXRlLnNjaGVtYSk7XHJcbiAgICBjb25zdCBpc0FjdGl2ZSA9IGlzTm9kZUFjdGl2ZShzdGF0ZSwgdHlwZSwgYXR0cmlidXRlcyk7XHJcbiAgICBpZiAoaXNBY3RpdmUpIHtcclxuICAgICAgICByZXR1cm4gY29tbWFuZHMubGlmdCh0eXBlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb21tYW5kcy53cmFwSW4odHlwZSwgYXR0cmlidXRlcyk7XHJcbn07XG5cbmNvbnN0IHVuZG9JbnB1dFJ1bGUgPSAoKSA9PiAoeyBzdGF0ZSwgZGlzcGF0Y2ggfSkgPT4ge1xyXG4gICAgY29uc3QgcGx1Z2lucyA9IHN0YXRlLnBsdWdpbnM7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICBjb25zdCBwbHVnaW4gPSBwbHVnaW5zW2ldO1xyXG4gICAgICAgIGxldCB1bmRvYWJsZTtcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXHJcbiAgICAgICAgaWYgKHBsdWdpbi5zcGVjLmlzSW5wdXRSdWxlcyAmJiAodW5kb2FibGUgPSBwbHVnaW4uZ2V0U3RhdGUoc3RhdGUpKSkge1xyXG4gICAgICAgICAgICBpZiAoZGlzcGF0Y2gpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRyID0gc3RhdGUudHI7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0b1VuZG8gPSB1bmRvYWJsZS50cmFuc2Zvcm07XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gdG9VbmRvLnN0ZXBzLmxlbmd0aCAtIDE7IGogPj0gMDsgaiAtPSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHIuc3RlcCh0b1VuZG8uc3RlcHNbal0uaW52ZXJ0KHRvVW5kby5kb2NzW2pdKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodW5kb2FibGUudGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtzID0gdHIuZG9jLnJlc29sdmUodW5kb2FibGUuZnJvbSkubWFya3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB0ci5yZXBsYWNlV2l0aCh1bmRvYWJsZS5mcm9tLCB1bmRvYWJsZS50bywgc3RhdGUuc2NoZW1hLnRleHQodW5kb2FibGUudGV4dCwgbWFya3MpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyLmRlbGV0ZSh1bmRvYWJsZS5mcm9tLCB1bmRvYWJsZS50byk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59O1xuXG5jb25zdCB1bnNldEFsbE1hcmtzID0gKCkgPT4gKHsgdHIsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSB0cjtcclxuICAgIGNvbnN0IHsgZW1wdHksIHJhbmdlcyB9ID0gc2VsZWN0aW9uO1xyXG4gICAgaWYgKGVtcHR5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoZGlzcGF0Y2gpIHtcclxuICAgICAgICByYW5nZXMuZm9yRWFjaChyYW5nZSA9PiB7XHJcbiAgICAgICAgICAgIHRyLnJlbW92ZU1hcmsocmFuZ2UuJGZyb20ucG9zLCByYW5nZS4kdG8ucG9zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xuXG5jb25zdCB1bnNldE1hcmsgPSAodHlwZU9yTmFtZSwgb3B0aW9ucyA9IHt9KSA9PiAoeyB0ciwgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgIHZhciBfYTtcclxuICAgIGNvbnN0IHsgZXh0ZW5kRW1wdHlNYXJrUmFuZ2UgPSBmYWxzZSB9ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSB0cjtcclxuICAgIGNvbnN0IHR5cGUgPSBnZXRNYXJrVHlwZSh0eXBlT3JOYW1lLCBzdGF0ZS5zY2hlbWEpO1xyXG4gICAgY29uc3QgeyAkZnJvbSwgZW1wdHksIHJhbmdlcyB9ID0gc2VsZWN0aW9uO1xyXG4gICAgaWYgKCFkaXNwYXRjaCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKGVtcHR5ICYmIGV4dGVuZEVtcHR5TWFya1JhbmdlKSB7XHJcbiAgICAgICAgbGV0IHsgZnJvbSwgdG8gfSA9IHNlbGVjdGlvbjtcclxuICAgICAgICBjb25zdCBhdHRycyA9IChfYSA9ICRmcm9tLm1hcmtzKCkuZmluZChtYXJrID0+IG1hcmsudHlwZSA9PT0gdHlwZSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hdHRycztcclxuICAgICAgICBjb25zdCByYW5nZSA9IGdldE1hcmtSYW5nZSgkZnJvbSwgdHlwZSwgYXR0cnMpO1xyXG4gICAgICAgIGlmIChyYW5nZSkge1xyXG4gICAgICAgICAgICBmcm9tID0gcmFuZ2UuZnJvbTtcclxuICAgICAgICAgICAgdG8gPSByYW5nZS50bztcclxuICAgICAgICB9XHJcbiAgICAgICAgdHIucmVtb3ZlTWFyayhmcm9tLCB0bywgdHlwZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByYW5nZXMuZm9yRWFjaChyYW5nZSA9PiB7XHJcbiAgICAgICAgICAgIHRyLnJlbW92ZU1hcmsocmFuZ2UuJGZyb20ucG9zLCByYW5nZS4kdG8ucG9zLCB0eXBlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHRyLnJlbW92ZVN0b3JlZE1hcmsodHlwZSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcblxuY29uc3QgdXBkYXRlQXR0cmlidXRlcyA9ICh0eXBlT3JOYW1lLCBhdHRyaWJ1dGVzID0ge30pID0+ICh7IHRyLCBzdGF0ZSwgZGlzcGF0Y2ggfSkgPT4ge1xyXG4gICAgbGV0IG5vZGVUeXBlID0gbnVsbDtcclxuICAgIGxldCBtYXJrVHlwZSA9IG51bGw7XHJcbiAgICBjb25zdCBzY2hlbWFUeXBlID0gZ2V0U2NoZW1hVHlwZU5hbWVCeU5hbWUodHlwZW9mIHR5cGVPck5hbWUgPT09ICdzdHJpbmcnID8gdHlwZU9yTmFtZSA6IHR5cGVPck5hbWUubmFtZSwgc3RhdGUuc2NoZW1hKTtcclxuICAgIGlmICghc2NoZW1hVHlwZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChzY2hlbWFUeXBlID09PSAnbm9kZScpIHtcclxuICAgICAgICBub2RlVHlwZSA9IGdldE5vZGVUeXBlKHR5cGVPck5hbWUsIHN0YXRlLnNjaGVtYSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc2NoZW1hVHlwZSA9PT0gJ21hcmsnKSB7XHJcbiAgICAgICAgbWFya1R5cGUgPSBnZXRNYXJrVHlwZSh0eXBlT3JOYW1lLCBzdGF0ZS5zY2hlbWEpO1xyXG4gICAgfVxyXG4gICAgaWYgKGRpc3BhdGNoKSB7XHJcbiAgICAgICAgdHIuc2VsZWN0aW9uLnJhbmdlcy5mb3JFYWNoKHJhbmdlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZnJvbSA9IHJhbmdlLiRmcm9tLnBvcztcclxuICAgICAgICAgICAgY29uc3QgdG8gPSByYW5nZS4kdG8ucG9zO1xyXG4gICAgICAgICAgICBzdGF0ZS5kb2Mubm9kZXNCZXR3ZWVuKGZyb20sIHRvLCAobm9kZSwgcG9zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZVR5cGUgJiYgbm9kZVR5cGUgPT09IG5vZGUudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyLnNldE5vZGVNYXJrdXAocG9zLCB1bmRlZmluZWQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4ubm9kZS5hdHRycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChtYXJrVHlwZSAmJiBub2RlLm1hcmtzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUubWFya3MuZm9yRWFjaChtYXJrID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcmtUeXBlID09PSBtYXJrLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyaW1tZWRGcm9tID0gTWF0aC5tYXgocG9zLCBmcm9tKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyaW1tZWRUbyA9IE1hdGgubWluKHBvcyArIG5vZGUubm9kZVNpemUsIHRvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFkZE1hcmsodHJpbW1lZEZyb20sIHRyaW1tZWRUbywgbWFya1R5cGUuY3JlYXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5tYXJrLmF0dHJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcblxuY29uc3Qgd3JhcEluID0gKHR5cGVPck5hbWUsIGF0dHJpYnV0ZXMgPSB7fSkgPT4gKHsgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgIGNvbnN0IHR5cGUgPSBnZXROb2RlVHlwZSh0eXBlT3JOYW1lLCBzdGF0ZS5zY2hlbWEpO1xyXG4gICAgcmV0dXJuIHdyYXBJbiQxKHR5cGUsIGF0dHJpYnV0ZXMpKHN0YXRlLCBkaXNwYXRjaCk7XHJcbn07XG5cbmNvbnN0IHdyYXBJbkxpc3QgPSAodHlwZU9yTmFtZSwgYXR0cmlidXRlcyA9IHt9KSA9PiAoeyBzdGF0ZSwgZGlzcGF0Y2ggfSkgPT4ge1xyXG4gICAgY29uc3QgdHlwZSA9IGdldE5vZGVUeXBlKHR5cGVPck5hbWUsIHN0YXRlLnNjaGVtYSk7XHJcbiAgICByZXR1cm4gd3JhcEluTGlzdCQxKHR5cGUsIGF0dHJpYnV0ZXMpKHN0YXRlLCBkaXNwYXRjaCk7XHJcbn07XG5cbnZhciBjb21tYW5kcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBibHVyOiBibHVyLFxuICBjbGVhckNvbnRlbnQ6IGNsZWFyQ29udGVudCxcbiAgY2xlYXJOb2RlczogY2xlYXJOb2RlcyxcbiAgY29tbWFuZDogY29tbWFuZCxcbiAgY3JlYXRlUGFyYWdyYXBoTmVhcjogY3JlYXRlUGFyYWdyYXBoTmVhcixcbiAgY3V0OiBjdXQsXG4gIGRlbGV0ZUN1cnJlbnROb2RlOiBkZWxldGVDdXJyZW50Tm9kZSxcbiAgZGVsZXRlTm9kZTogZGVsZXRlTm9kZSxcbiAgZGVsZXRlUmFuZ2U6IGRlbGV0ZVJhbmdlLFxuICBkZWxldGVTZWxlY3Rpb246IGRlbGV0ZVNlbGVjdGlvbixcbiAgZW50ZXI6IGVudGVyLFxuICBleGl0Q29kZTogZXhpdENvZGUsXG4gIGV4dGVuZE1hcmtSYW5nZTogZXh0ZW5kTWFya1JhbmdlLFxuICBmaXJzdDogZmlyc3QsXG4gIGZvY3VzOiBmb2N1cyxcbiAgZm9yRWFjaDogZm9yRWFjaCxcbiAgaW5zZXJ0Q29udGVudDogaW5zZXJ0Q29udGVudCxcbiAgaW5zZXJ0Q29udGVudEF0OiBpbnNlcnRDb250ZW50QXQsXG4gIGpvaW5VcDogam9pblVwLFxuICBqb2luRG93bjogam9pbkRvd24sXG4gIGpvaW5CYWNrd2FyZDogam9pbkJhY2t3YXJkLFxuICBqb2luRm9yd2FyZDogam9pbkZvcndhcmQsXG4gIGpvaW5JdGVtQmFja3dhcmQ6IGpvaW5JdGVtQmFja3dhcmQsXG4gIGpvaW5JdGVtRm9yd2FyZDogam9pbkl0ZW1Gb3J3YXJkLFxuICBrZXlib2FyZFNob3J0Y3V0OiBrZXlib2FyZFNob3J0Y3V0LFxuICBsaWZ0OiBsaWZ0LFxuICBsaWZ0RW1wdHlCbG9jazogbGlmdEVtcHR5QmxvY2ssXG4gIGxpZnRMaXN0SXRlbTogbGlmdExpc3RJdGVtLFxuICBuZXdsaW5lSW5Db2RlOiBuZXdsaW5lSW5Db2RlLFxuICByZXNldEF0dHJpYnV0ZXM6IHJlc2V0QXR0cmlidXRlcyxcbiAgc2Nyb2xsSW50b1ZpZXc6IHNjcm9sbEludG9WaWV3LFxuICBzZWxlY3RBbGw6IHNlbGVjdEFsbCxcbiAgc2VsZWN0Tm9kZUJhY2t3YXJkOiBzZWxlY3ROb2RlQmFja3dhcmQsXG4gIHNlbGVjdE5vZGVGb3J3YXJkOiBzZWxlY3ROb2RlRm9yd2FyZCxcbiAgc2VsZWN0UGFyZW50Tm9kZTogc2VsZWN0UGFyZW50Tm9kZSxcbiAgc2VsZWN0VGV4dGJsb2NrRW5kOiBzZWxlY3RUZXh0YmxvY2tFbmQsXG4gIHNlbGVjdFRleHRibG9ja1N0YXJ0OiBzZWxlY3RUZXh0YmxvY2tTdGFydCxcbiAgc2V0Q29udGVudDogc2V0Q29udGVudCxcbiAgc2V0TWFyazogc2V0TWFyayxcbiAgc2V0TWV0YTogc2V0TWV0YSxcbiAgc2V0Tm9kZTogc2V0Tm9kZSxcbiAgc2V0Tm9kZVNlbGVjdGlvbjogc2V0Tm9kZVNlbGVjdGlvbixcbiAgc2V0VGV4dFNlbGVjdGlvbjogc2V0VGV4dFNlbGVjdGlvbixcbiAgc2lua0xpc3RJdGVtOiBzaW5rTGlzdEl0ZW0sXG4gIHNwbGl0QmxvY2s6IHNwbGl0QmxvY2ssXG4gIHNwbGl0TGlzdEl0ZW06IHNwbGl0TGlzdEl0ZW0sXG4gIHRvZ2dsZUxpc3Q6IHRvZ2dsZUxpc3QsXG4gIHRvZ2dsZU1hcms6IHRvZ2dsZU1hcmssXG4gIHRvZ2dsZU5vZGU6IHRvZ2dsZU5vZGUsXG4gIHRvZ2dsZVdyYXA6IHRvZ2dsZVdyYXAsXG4gIHVuZG9JbnB1dFJ1bGU6IHVuZG9JbnB1dFJ1bGUsXG4gIHVuc2V0QWxsTWFya3M6IHVuc2V0QWxsTWFya3MsXG4gIHVuc2V0TWFyazogdW5zZXRNYXJrLFxuICB1cGRhdGVBdHRyaWJ1dGVzOiB1cGRhdGVBdHRyaWJ1dGVzLFxuICB3cmFwSW46IHdyYXBJbixcbiAgd3JhcEluTGlzdDogd3JhcEluTGlzdFxufSk7XG5cbmNvbnN0IENvbW1hbmRzID0gRXh0ZW5zaW9uLmNyZWF0ZSh7XHJcbiAgICBuYW1lOiAnY29tbWFuZHMnLFxyXG4gICAgYWRkQ29tbWFuZHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uY29tbWFuZHMsXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbn0pO1xuXG5jb25zdCBFZGl0YWJsZSA9IEV4dGVuc2lvbi5jcmVhdGUoe1xyXG4gICAgbmFtZTogJ2VkaXRhYmxlJyxcclxuICAgIGFkZFByb3NlTWlycm9yUGx1Z2lucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBuZXcgUGx1Z2luKHtcclxuICAgICAgICAgICAgICAgIGtleTogbmV3IFBsdWdpbktleSgnZWRpdGFibGUnKSxcclxuICAgICAgICAgICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6ICgpID0+IHRoaXMuZWRpdG9yLm9wdGlvbnMuZWRpdGFibGUsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICBdO1xyXG4gICAgfSxcclxufSk7XG5cbmNvbnN0IEZvY3VzRXZlbnRzID0gRXh0ZW5zaW9uLmNyZWF0ZSh7XHJcbiAgICBuYW1lOiAnZm9jdXNFdmVudHMnLFxyXG4gICAgYWRkUHJvc2VNaXJyb3JQbHVnaW5zKCkge1xyXG4gICAgICAgIGNvbnN0IHsgZWRpdG9yIH0gPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIG5ldyBQbHVnaW4oe1xyXG4gICAgICAgICAgICAgICAga2V5OiBuZXcgUGx1Z2luS2V5KCdmb2N1c0V2ZW50cycpLFxyXG4gICAgICAgICAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVET01FdmVudHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXM6ICh2aWV3LCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmlzRm9jdXNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGVkaXRvci5zdGF0ZS50clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRNZXRhKCdmb2N1cycsIHsgZXZlbnQgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWV0YSgnYWRkVG9IaXN0b3J5JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5kaXNwYXRjaCh0cmFuc2FjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsdXI6ICh2aWV3LCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmlzRm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBlZGl0b3Iuc3RhdGUudHJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWV0YSgnYmx1cicsIHsgZXZlbnQgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWV0YSgnYWRkVG9IaXN0b3J5JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5kaXNwYXRjaCh0cmFuc2FjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG59KTtcblxuY29uc3QgS2V5bWFwID0gRXh0ZW5zaW9uLmNyZWF0ZSh7XHJcbiAgICBuYW1lOiAna2V5bWFwJyxcclxuICAgIGFkZEtleWJvYXJkU2hvcnRjdXRzKCkge1xyXG4gICAgICAgIGNvbnN0IGhhbmRsZUJhY2tzcGFjZSA9ICgpID0+IHRoaXMuZWRpdG9yLmNvbW1hbmRzLmZpcnN0KCh7IGNvbW1hbmRzIH0pID0+IFtcclxuICAgICAgICAgICAgKCkgPT4gY29tbWFuZHMudW5kb0lucHV0UnVsZSgpLFxyXG4gICAgICAgICAgICAvLyBtYXliZSBjb252ZXJ0IGZpcnN0IHRleHQgYmxvY2sgbm9kZSB0byBkZWZhdWx0IG5vZGVcclxuICAgICAgICAgICAgKCkgPT4gY29tbWFuZHMuY29tbWFuZCgoeyB0ciB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiwgZG9jIH0gPSB0cjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZW1wdHksICRhbmNob3IgfSA9IHNlbGVjdGlvbjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgcG9zLCBwYXJlbnQgfSA9ICRhbmNob3I7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkcGFyZW50UG9zID0gJGFuY2hvci5wYXJlbnQuaXNUZXh0YmxvY2sgPyB0ci5kb2MucmVzb2x2ZShwb3MgLSAxKSA6ICRhbmNob3I7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJc0lzb2xhdGluZyA9ICRwYXJlbnRQb3MucGFyZW50LnR5cGUuc3BlYy5pc29sYXRpbmc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRQb3MgPSAkYW5jaG9yLnBvcyAtICRhbmNob3IucGFyZW50T2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNBdFN0YXJ0ID0gKHBhcmVudElzSXNvbGF0aW5nICYmICRwYXJlbnRQb3MucGFyZW50LmNoaWxkQ291bnQgPT09IDEpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBwYXJlbnRQb3MgPT09ICRhbmNob3IucG9zXHJcbiAgICAgICAgICAgICAgICAgICAgOiBTZWxlY3Rpb24uYXRTdGFydChkb2MpLmZyb20gPT09IHBvcztcclxuICAgICAgICAgICAgICAgIGlmICghZW1wdHkgfHwgIWlzQXRTdGFydCB8fCAhcGFyZW50LnR5cGUuaXNUZXh0YmxvY2sgfHwgcGFyZW50LnRleHRDb250ZW50Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kcy5jbGVhck5vZGVzKCk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAoKSA9PiBjb21tYW5kcy5kZWxldGVTZWxlY3Rpb24oKSxcclxuICAgICAgICAgICAgKCkgPT4gY29tbWFuZHMuam9pbkJhY2t3YXJkKCksXHJcbiAgICAgICAgICAgICgpID0+IGNvbW1hbmRzLnNlbGVjdE5vZGVCYWNrd2FyZCgpLFxyXG4gICAgICAgIF0pO1xyXG4gICAgICAgIGNvbnN0IGhhbmRsZURlbGV0ZSA9ICgpID0+IHRoaXMuZWRpdG9yLmNvbW1hbmRzLmZpcnN0KCh7IGNvbW1hbmRzIH0pID0+IFtcclxuICAgICAgICAgICAgKCkgPT4gY29tbWFuZHMuZGVsZXRlU2VsZWN0aW9uKCksXHJcbiAgICAgICAgICAgICgpID0+IGNvbW1hbmRzLmRlbGV0ZUN1cnJlbnROb2RlKCksXHJcbiAgICAgICAgICAgICgpID0+IGNvbW1hbmRzLmpvaW5Gb3J3YXJkKCksXHJcbiAgICAgICAgICAgICgpID0+IGNvbW1hbmRzLnNlbGVjdE5vZGVGb3J3YXJkKCksXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgY29uc3QgaGFuZGxlRW50ZXIgPSAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy5maXJzdCgoeyBjb21tYW5kcyB9KSA9PiBbXHJcbiAgICAgICAgICAgICgpID0+IGNvbW1hbmRzLm5ld2xpbmVJbkNvZGUoKSxcclxuICAgICAgICAgICAgKCkgPT4gY29tbWFuZHMuY3JlYXRlUGFyYWdyYXBoTmVhcigpLFxyXG4gICAgICAgICAgICAoKSA9PiBjb21tYW5kcy5saWZ0RW1wdHlCbG9jaygpLFxyXG4gICAgICAgICAgICAoKSA9PiBjb21tYW5kcy5zcGxpdEJsb2NrKCksXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgY29uc3QgYmFzZUtleW1hcCA9IHtcclxuICAgICAgICAgICAgRW50ZXI6IGhhbmRsZUVudGVyLFxyXG4gICAgICAgICAgICAnTW9kLUVudGVyJzogKCkgPT4gdGhpcy5lZGl0b3IuY29tbWFuZHMuZXhpdENvZGUoKSxcclxuICAgICAgICAgICAgQmFja3NwYWNlOiBoYW5kbGVCYWNrc3BhY2UsXHJcbiAgICAgICAgICAgICdNb2QtQmFja3NwYWNlJzogaGFuZGxlQmFja3NwYWNlLFxyXG4gICAgICAgICAgICAnU2hpZnQtQmFja3NwYWNlJzogaGFuZGxlQmFja3NwYWNlLFxyXG4gICAgICAgICAgICBEZWxldGU6IGhhbmRsZURlbGV0ZSxcclxuICAgICAgICAgICAgJ01vZC1EZWxldGUnOiBoYW5kbGVEZWxldGUsXHJcbiAgICAgICAgICAgICdNb2QtYSc6ICgpID0+IHRoaXMuZWRpdG9yLmNvbW1hbmRzLnNlbGVjdEFsbCgpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgcGNLZXltYXAgPSB7XHJcbiAgICAgICAgICAgIC4uLmJhc2VLZXltYXAsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBtYWNLZXltYXAgPSB7XHJcbiAgICAgICAgICAgIC4uLmJhc2VLZXltYXAsXHJcbiAgICAgICAgICAgICdDdHJsLWgnOiBoYW5kbGVCYWNrc3BhY2UsXHJcbiAgICAgICAgICAgICdBbHQtQmFja3NwYWNlJzogaGFuZGxlQmFja3NwYWNlLFxyXG4gICAgICAgICAgICAnQ3RybC1kJzogaGFuZGxlRGVsZXRlLFxyXG4gICAgICAgICAgICAnQ3RybC1BbHQtQmFja3NwYWNlJzogaGFuZGxlRGVsZXRlLFxyXG4gICAgICAgICAgICAnQWx0LURlbGV0ZSc6IGhhbmRsZURlbGV0ZSxcclxuICAgICAgICAgICAgJ0FsdC1kJzogaGFuZGxlRGVsZXRlLFxyXG4gICAgICAgICAgICAnQ3RybC1hJzogKCkgPT4gdGhpcy5lZGl0b3IuY29tbWFuZHMuc2VsZWN0VGV4dGJsb2NrU3RhcnQoKSxcclxuICAgICAgICAgICAgJ0N0cmwtZSc6ICgpID0+IHRoaXMuZWRpdG9yLmNvbW1hbmRzLnNlbGVjdFRleHRibG9ja0VuZCgpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGlzaU9TKCkgfHwgaXNNYWNPUygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtYWNLZXltYXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwY0tleW1hcDtcclxuICAgIH0sXHJcbiAgICBhZGRQcm9zZU1pcnJvclBsdWdpbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgLy8gV2l0aCB0aGlzIHBsdWdpbiB3ZSBjaGVjayBpZiB0aGUgd2hvbGUgZG9jdW1lbnQgd2FzIHNlbGVjdGVkIGFuZCBkZWxldGVkLlxyXG4gICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2Ugd2lsbCBhZGRpdGlvbmFsbHkgY2FsbCBgY2xlYXJOb2RlcygpYCB0byBjb252ZXJ0IGUuZy4gYSBoZWFkaW5nXHJcbiAgICAgICAgICAgIC8vIHRvIGEgcGFyYWdyYXBoIGlmIG5lY2Vzc2FyeS5cclxuICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhbHRlcm5hdGl2ZSB0byBQcm9zZU1pcnJvcidzIGBBbGxTZWxlY3Rpb25gLCB3aGljaCBkb2VzbuKAmXQgd29yayB3ZWxsXHJcbiAgICAgICAgICAgIC8vIHdpdGggbWFueSBvdGhlciBjb21tYW5kcy5cclxuICAgICAgICAgICAgbmV3IFBsdWdpbih7XHJcbiAgICAgICAgICAgICAgICBrZXk6IG5ldyBQbHVnaW5LZXkoJ2NsZWFyRG9jdW1lbnQnKSxcclxuICAgICAgICAgICAgICAgIGFwcGVuZFRyYW5zYWN0aW9uOiAodHJhbnNhY3Rpb25zLCBvbGRTdGF0ZSwgbmV3U3RhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkb2NDaGFuZ2VzID0gdHJhbnNhY3Rpb25zLnNvbWUodHJhbnNhY3Rpb24gPT4gdHJhbnNhY3Rpb24uZG9jQ2hhbmdlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgIW9sZFN0YXRlLmRvYy5lcShuZXdTdGF0ZS5kb2MpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9jQ2hhbmdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZW1wdHksIGZyb20sIHRvIH0gPSBvbGRTdGF0ZS5zZWxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsRnJvbSA9IFNlbGVjdGlvbi5hdFN0YXJ0KG9sZFN0YXRlLmRvYykuZnJvbTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxFbmQgPSBTZWxlY3Rpb24uYXRFbmQob2xkU3RhdGUuZG9jKS50bztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxXYXNTZWxlY3RlZCA9IGZyb20gPT09IGFsbEZyb20gJiYgdG8gPT09IGFsbEVuZDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkgfHwgIWFsbFdhc1NlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNFbXB0eSA9IG5ld1N0YXRlLmRvYy50ZXh0QmV0d2VlbigwLCBuZXdTdGF0ZS5kb2MuY29udGVudC5zaXplLCAnICcsICcgJykubGVuZ3RoID09PSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyID0gbmV3U3RhdGUudHI7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBjcmVhdGVDaGFpbmFibGVTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiBuZXdTdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb246IHRyLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgY29tbWFuZHMgfSA9IG5ldyBDb21tYW5kTWFuYWdlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcjogdGhpcy5lZGl0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzLmNsZWFyTm9kZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRyLnN0ZXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cjtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG59KTtcblxuY29uc3QgVGFiaW5kZXggPSBFeHRlbnNpb24uY3JlYXRlKHtcclxuICAgIG5hbWU6ICd0YWJpbmRleCcsXHJcbiAgICBhZGRQcm9zZU1pcnJvclBsdWdpbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgbmV3IFBsdWdpbih7XHJcbiAgICAgICAgICAgICAgICBrZXk6IG5ldyBQbHVnaW5LZXkoJ3RhYmluZGV4JyksXHJcbiAgICAgICAgICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRoaXMuZWRpdG9yLmlzRWRpdGFibGUgPyB7IHRhYmluZGV4OiAnMCcgfSA6IHt9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgXTtcclxuICAgIH0sXHJcbn0pO1xuXG52YXIgZXh0ZW5zaW9ucyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBDbGlwYm9hcmRUZXh0U2VyaWFsaXplcjogQ2xpcGJvYXJkVGV4dFNlcmlhbGl6ZXIsXG4gIENvbW1hbmRzOiBDb21tYW5kcyxcbiAgRWRpdGFibGU6IEVkaXRhYmxlLFxuICBGb2N1c0V2ZW50czogRm9jdXNFdmVudHMsXG4gIEtleW1hcDogS2V5bWFwLFxuICBUYWJpbmRleDogVGFiaW5kZXhcbn0pO1xuXG5jb25zdCBzdHlsZSA9IGAuUHJvc2VNaXJyb3Ige1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5Qcm9zZU1pcnJvciB7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICB3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzO1xuICAtd2Via2l0LWZvbnQtdmFyaWFudC1saWdhdHVyZXM6IG5vbmU7XG4gIGZvbnQtdmFyaWFudC1saWdhdHVyZXM6IG5vbmU7XG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCJsaWdhXCIgMDsgLyogdGhlIGFib3ZlIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGluIEVkZ2UgKi9cbn1cblxuLlByb3NlTWlycm9yIFtjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiXSB7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG5cbi5Qcm9zZU1pcnJvciBbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0gW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0ge1xuICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG59XG5cbi5Qcm9zZU1pcnJvciBwcmUge1xuICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG59XG5cbmltZy5Qcm9zZU1pcnJvci1zZXBhcmF0b3Ige1xuICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbiAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG4gIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICB3aWR0aDogMXB4ICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogMXB4ICFpbXBvcnRhbnQ7XG59XG5cbi5Qcm9zZU1pcnJvci1nYXBjdXJzb3Ige1xuICBkaXNwbGF5OiBub25lO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW46IDA7XG59XG5cbi5Qcm9zZU1pcnJvci1nYXBjdXJzb3I6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC0ycHg7XG4gIHdpZHRoOiAyMHB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7XG4gIGFuaW1hdGlvbjogUHJvc2VNaXJyb3ItY3Vyc29yLWJsaW5rIDEuMXMgc3RlcHMoMiwgc3RhcnQpIGluZmluaXRlO1xufVxuXG5Aa2V5ZnJhbWVzIFByb3NlTWlycm9yLWN1cnNvci1ibGluayB7XG4gIHRvIHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIH1cbn1cblxuLlByb3NlTWlycm9yLWhpZGVzZWxlY3Rpb24gKjo6c2VsZWN0aW9uIHtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG59XG5cbi5Qcm9zZU1pcnJvci1oaWRlc2VsZWN0aW9uICo6Oi1tb3otc2VsZWN0aW9uIHtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG59XG5cbi5Qcm9zZU1pcnJvci1oaWRlc2VsZWN0aW9uICoge1xuICBjYXJldC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi5Qcm9zZU1pcnJvci1mb2N1c2VkIC5Qcm9zZU1pcnJvci1nYXBjdXJzb3Ige1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLnRpcHB5LWJveFtkYXRhLWFuaW1hdGlvbj1mYWRlXVtkYXRhLXN0YXRlPWhpZGRlbl0ge1xuICBvcGFjaXR5OiAwXG59YDtcblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVUYWcoc3R5bGUsIG5vbmNlLCBzdWZmaXgpIHtcclxuICAgIGNvbnN0IHRpcHRhcFN0eWxlVGFnID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc3R5bGVbZGF0YS10aXB0YXAtc3R5bGUke3N1ZmZpeCA/IGAtJHtzdWZmaXh9YCA6ICcnfV1gKTtcclxuICAgIGlmICh0aXB0YXBTdHlsZVRhZyAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiB0aXB0YXBTdHlsZVRhZztcclxuICAgIH1cclxuICAgIGNvbnN0IHN0eWxlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XHJcbiAgICBpZiAobm9uY2UpIHtcclxuICAgICAgICBzdHlsZU5vZGUuc2V0QXR0cmlidXRlKCdub25jZScsIG5vbmNlKTtcclxuICAgIH1cclxuICAgIHN0eWxlTm9kZS5zZXRBdHRyaWJ1dGUoYGRhdGEtdGlwdGFwLXN0eWxlJHtzdWZmaXggPyBgLSR7c3VmZml4fWAgOiAnJ31gLCAnJyk7XHJcbiAgICBzdHlsZU5vZGUuaW5uZXJIVE1MID0gc3R5bGU7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHN0eWxlTm9kZSk7XHJcbiAgICByZXR1cm4gc3R5bGVOb2RlO1xyXG59XG5cbmNsYXNzIEVkaXRvciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5leHRlbnNpb25TdG9yYWdlID0ge307XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge1xyXG4gICAgICAgICAgICBlbGVtZW50OiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcclxuICAgICAgICAgICAgY29udGVudDogJycsXHJcbiAgICAgICAgICAgIGluamVjdENTUzogdHJ1ZSxcclxuICAgICAgICAgICAgaW5qZWN0Tm9uY2U6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uczogW10sXHJcbiAgICAgICAgICAgIGF1dG9mb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBlZGl0b3JQcm9wczoge30sXHJcbiAgICAgICAgICAgIHBhcnNlT3B0aW9uczoge30sXHJcbiAgICAgICAgICAgIGVuYWJsZUlucHV0UnVsZXM6IHRydWUsXHJcbiAgICAgICAgICAgIGVuYWJsZVBhc3RlUnVsZXM6IHRydWUsXHJcbiAgICAgICAgICAgIGVuYWJsZUNvcmVFeHRlbnNpb25zOiB0cnVlLFxyXG4gICAgICAgICAgICBvbkJlZm9yZUNyZWF0ZTogKCkgPT4gbnVsbCxcclxuICAgICAgICAgICAgb25DcmVhdGU6ICgpID0+IG51bGwsXHJcbiAgICAgICAgICAgIG9uVXBkYXRlOiAoKSA9PiBudWxsLFxyXG4gICAgICAgICAgICBvblNlbGVjdGlvblVwZGF0ZTogKCkgPT4gbnVsbCxcclxuICAgICAgICAgICAgb25UcmFuc2FjdGlvbjogKCkgPT4gbnVsbCxcclxuICAgICAgICAgICAgb25Gb2N1czogKCkgPT4gbnVsbCxcclxuICAgICAgICAgICAgb25CbHVyOiAoKSA9PiBudWxsLFxyXG4gICAgICAgICAgICBvbkRlc3Ryb3k6ICgpID0+IG51bGwsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmlzQ2FwdHVyaW5nVHJhbnNhY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNhcHR1cmVkVHJhbnNhY3Rpb24gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZUV4dGVuc2lvbk1hbmFnZXIoKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZUNvbW1hbmRNYW5hZ2VyKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVTY2hlbWEoKTtcclxuICAgICAgICB0aGlzLm9uKCdiZWZvcmVDcmVhdGUnLCB0aGlzLm9wdGlvbnMub25CZWZvcmVDcmVhdGUpO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnYmVmb3JlQ3JlYXRlJywgeyBlZGl0b3I6IHRoaXMgfSk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVWaWV3KCk7XHJcbiAgICAgICAgdGhpcy5pbmplY3RDU1MoKTtcclxuICAgICAgICB0aGlzLm9uKCdjcmVhdGUnLCB0aGlzLm9wdGlvbnMub25DcmVhdGUpO1xyXG4gICAgICAgIHRoaXMub24oJ3VwZGF0ZScsIHRoaXMub3B0aW9ucy5vblVwZGF0ZSk7XHJcbiAgICAgICAgdGhpcy5vbignc2VsZWN0aW9uVXBkYXRlJywgdGhpcy5vcHRpb25zLm9uU2VsZWN0aW9uVXBkYXRlKTtcclxuICAgICAgICB0aGlzLm9uKCd0cmFuc2FjdGlvbicsIHRoaXMub3B0aW9ucy5vblRyYW5zYWN0aW9uKTtcclxuICAgICAgICB0aGlzLm9uKCdmb2N1cycsIHRoaXMub3B0aW9ucy5vbkZvY3VzKTtcclxuICAgICAgICB0aGlzLm9uKCdibHVyJywgdGhpcy5vcHRpb25zLm9uQmx1cik7XHJcbiAgICAgICAgdGhpcy5vbignZGVzdHJveScsIHRoaXMub3B0aW9ucy5vbkRlc3Ryb3kpO1xyXG4gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzLmZvY3VzKHRoaXMub3B0aW9ucy5hdXRvZm9jdXMpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2NyZWF0ZScsIHsgZWRpdG9yOiB0aGlzIH0pO1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBlZGl0b3Igc3RvcmFnZS5cclxuICAgICAqL1xyXG4gICAgZ2V0IHN0b3JhZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uU3RvcmFnZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQW4gb2JqZWN0IG9mIGFsbCByZWdpc3RlcmVkIGNvbW1hbmRzLlxyXG4gICAgICovXHJcbiAgICBnZXQgY29tbWFuZHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tbWFuZE1hbmFnZXIuY29tbWFuZHM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIGNvbW1hbmQgY2hhaW4gdG8gY2FsbCBtdWx0aXBsZSBjb21tYW5kcyBhdCBvbmNlLlxyXG4gICAgICovXHJcbiAgICBjaGFpbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21tYW5kTWFuYWdlci5jaGFpbigpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBpZiBhIGNvbW1hbmQgb3IgYSBjb21tYW5kIGNoYWluIGNhbiBiZSBleGVjdXRlZC4gV2l0aG91dCBleGVjdXRpbmcgaXQuXHJcbiAgICAgKi9cclxuICAgIGNhbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21tYW5kTWFuYWdlci5jYW4oKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSW5qZWN0IENTUyBzdHlsZXMuXHJcbiAgICAgKi9cclxuICAgIGluamVjdENTUygpIHtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmluamVjdENTUyAmJiBkb2N1bWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmNzcyA9IGNyZWF0ZVN0eWxlVGFnKHN0eWxlLCB0aGlzLm9wdGlvbnMuaW5qZWN0Tm9uY2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIGVkaXRvciBvcHRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIEEgbGlzdCBvZiBvcHRpb25zXHJcbiAgICAgKi9cclxuICAgIHNldE9wdGlvbnMob3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMsXHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoIXRoaXMudmlldyB8fCAhdGhpcy5zdGF0ZSB8fCB0aGlzLmlzRGVzdHJveWVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lZGl0b3JQcm9wcykge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXcuc2V0UHJvcHModGhpcy5vcHRpb25zLmVkaXRvclByb3BzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aWV3LnVwZGF0ZVN0YXRlKHRoaXMuc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgZWRpdGFibGUgc3RhdGUgb2YgdGhlIGVkaXRvci5cclxuICAgICAqL1xyXG4gICAgc2V0RWRpdGFibGUoZWRpdGFibGUsIGVtaXRVcGRhdGUgPSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zKHsgZWRpdGFibGUgfSk7XHJcbiAgICAgICAgaWYgKGVtaXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB7IGVkaXRvcjogdGhpcywgdHJhbnNhY3Rpb246IHRoaXMuc3RhdGUudHIgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGVkaXRvciBpcyBlZGl0YWJsZS5cclxuICAgICAqL1xyXG4gICAgZ2V0IGlzRWRpdGFibGUoKSB7XHJcbiAgICAgICAgLy8gc2luY2UgcGx1Z2lucyBhcmUgYXBwbGllZCBhZnRlciBjcmVhdGluZyB0aGUgdmlld1xyXG4gICAgICAgIC8vIGBlZGl0YWJsZWAgaXMgYWx3YXlzIGB0cnVlYCBmb3Igb25lIHRpY2suXHJcbiAgICAgICAgLy8gdGhhdOKAmXMgd2h5IHdlIGFsc28gaGF2ZSB0byBjaGVjayBmb3IgYG9wdGlvbnMuZWRpdGFibGVgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5lZGl0YWJsZSAmJiB0aGlzLnZpZXcgJiYgdGhpcy52aWV3LmVkaXRhYmxlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBlZGl0b3Igc3RhdGUuXHJcbiAgICAgKi9cclxuICAgIGdldCBzdGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3LnN0YXRlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlciBhIFByb3NlTWlycm9yIHBsdWdpbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gcGx1Z2luIEEgUHJvc2VNaXJyb3IgcGx1Z2luXHJcbiAgICAgKiBAcGFyYW0gaGFuZGxlUGx1Z2lucyBDb250cm9sIGhvdyB0byBtZXJnZSB0aGUgcGx1Z2luIGludG8gdGhlIGV4aXN0aW5nIHBsdWdpbnMuXHJcbiAgICAgKi9cclxuICAgIHJlZ2lzdGVyUGx1Z2luKHBsdWdpbiwgaGFuZGxlUGx1Z2lucykge1xyXG4gICAgICAgIGNvbnN0IHBsdWdpbnMgPSBpc0Z1bmN0aW9uKGhhbmRsZVBsdWdpbnMpXHJcbiAgICAgICAgICAgID8gaGFuZGxlUGx1Z2lucyhwbHVnaW4sIFsuLi50aGlzLnN0YXRlLnBsdWdpbnNdKVxyXG4gICAgICAgICAgICA6IFsuLi50aGlzLnN0YXRlLnBsdWdpbnMsIHBsdWdpbl07XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlLnJlY29uZmlndXJlKHsgcGx1Z2lucyB9KTtcclxuICAgICAgICB0aGlzLnZpZXcudXBkYXRlU3RhdGUoc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVbnJlZ2lzdGVyIGEgUHJvc2VNaXJyb3IgcGx1Z2luLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBuYW1lT3JQbHVnaW5LZXkgVGhlIHBsdWdpbnMgbmFtZVxyXG4gICAgICovXHJcbiAgICB1bnJlZ2lzdGVyUGx1Z2luKG5hbWVPclBsdWdpbktleSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIGNvbnN0IG5hbWUgPSB0eXBlb2YgbmFtZU9yUGx1Z2luS2V5ID09PSAnc3RyaW5nJyA/IGAke25hbWVPclBsdWdpbktleX0kYCA6IG5hbWVPclBsdWdpbktleS5rZXk7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlLnJlY29uZmlndXJlKHtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBwbHVnaW5zOiB0aGlzLnN0YXRlLnBsdWdpbnMuZmlsdGVyKHBsdWdpbiA9PiAhcGx1Z2luLmtleS5zdGFydHNXaXRoKG5hbWUpKSxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnZpZXcudXBkYXRlU3RhdGUoc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGFuIGV4dGVuc2lvbiBtYW5hZ2VyLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVFeHRlbnNpb25NYW5hZ2VyKCkge1xyXG4gICAgICAgIGNvbnN0IGNvcmVFeHRlbnNpb25zID0gdGhpcy5vcHRpb25zLmVuYWJsZUNvcmVFeHRlbnNpb25zID8gT2JqZWN0LnZhbHVlcyhleHRlbnNpb25zKSA6IFtdO1xyXG4gICAgICAgIGNvbnN0IGFsbEV4dGVuc2lvbnMgPSBbLi4uY29yZUV4dGVuc2lvbnMsIC4uLnRoaXMub3B0aW9ucy5leHRlbnNpb25zXS5maWx0ZXIoZXh0ZW5zaW9uID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFsnZXh0ZW5zaW9uJywgJ25vZGUnLCAnbWFyayddLmluY2x1ZGVzKGV4dGVuc2lvbiA9PT0gbnVsbCB8fCBleHRlbnNpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4dGVuc2lvbi50eXBlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmV4dGVuc2lvbk1hbmFnZXIgPSBuZXcgRXh0ZW5zaW9uTWFuYWdlcihhbGxFeHRlbnNpb25zLCB0aGlzKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhbiBjb21tYW5kIG1hbmFnZXIuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUNvbW1hbmRNYW5hZ2VyKCkge1xyXG4gICAgICAgIHRoaXMuY29tbWFuZE1hbmFnZXIgPSBuZXcgQ29tbWFuZE1hbmFnZXIoe1xyXG4gICAgICAgICAgICBlZGl0b3I6IHRoaXMsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBQcm9zZU1pcnJvciBzY2hlbWEuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZVNjaGVtYSgpIHtcclxuICAgICAgICB0aGlzLnNjaGVtYSA9IHRoaXMuZXh0ZW5zaW9uTWFuYWdlci5zY2hlbWE7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBQcm9zZU1pcnJvciB2aWV3LlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVWaWV3KCkge1xyXG4gICAgICAgIGNvbnN0IGRvYyA9IGNyZWF0ZURvY3VtZW50KHRoaXMub3B0aW9ucy5jb250ZW50LCB0aGlzLnNjaGVtYSwgdGhpcy5vcHRpb25zLnBhcnNlT3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gcmVzb2x2ZUZvY3VzUG9zaXRpb24oZG9jLCB0aGlzLm9wdGlvbnMuYXV0b2ZvY3VzKTtcclxuICAgICAgICB0aGlzLnZpZXcgPSBuZXcgRWRpdG9yVmlldyh0aGlzLm9wdGlvbnMuZWxlbWVudCwge1xyXG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMuZWRpdG9yUHJvcHMsXHJcbiAgICAgICAgICAgIGRpc3BhdGNoVHJhbnNhY3Rpb246IHRoaXMuZGlzcGF0Y2hUcmFuc2FjdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBzdGF0ZTogRWRpdG9yU3RhdGUuY3JlYXRlKHtcclxuICAgICAgICAgICAgICAgIGRvYyxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gYGVkaXRvci52aWV3YCBpcyBub3QgeWV0IGF2YWlsYWJsZSBhdCB0aGlzIHRpbWUuXHJcbiAgICAgICAgLy8gVGhlcmVmb3JlIHdlIHdpbGwgYWRkIGFsbCBwbHVnaW5zIGFuZCBub2RlIHZpZXdzIGRpcmVjdGx5IGFmdGVyd2FyZHMuXHJcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLnN0YXRlLnJlY29uZmlndXJlKHtcclxuICAgICAgICAgICAgcGx1Z2luczogdGhpcy5leHRlbnNpb25NYW5hZ2VyLnBsdWdpbnMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy52aWV3LnVwZGF0ZVN0YXRlKG5ld1N0YXRlKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZU5vZGVWaWV3cygpO1xyXG4gICAgICAgIHRoaXMucHJlcGVuZENsYXNzKCk7XHJcbiAgICAgICAgLy8gTGV04oCZcyBzdG9yZSB0aGUgZWRpdG9yIGluc3RhbmNlIGluIHRoZSBET00gZWxlbWVudC5cclxuICAgICAgICAvLyBTbyB3ZeKAmWxsIGhhdmUgYWNjZXNzIHRvIGl0IGZvciB0ZXN0cy5cclxuICAgICAgICBjb25zdCBkb20gPSB0aGlzLnZpZXcuZG9tO1xyXG4gICAgICAgIGRvbS5lZGl0b3IgPSB0aGlzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGFsbCBub2RlIHZpZXdzLlxyXG4gICAgICovXHJcbiAgICBjcmVhdGVOb2RlVmlld3MoKSB7XHJcbiAgICAgICAgdGhpcy52aWV3LnNldFByb3BzKHtcclxuICAgICAgICAgICAgbm9kZVZpZXdzOiB0aGlzLmV4dGVuc2lvbk1hbmFnZXIubm9kZVZpZXdzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVwZW5kIGNsYXNzIG5hbWUgdG8gZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgcHJlcGVuZENsYXNzKCkge1xyXG4gICAgICAgIHRoaXMudmlldy5kb20uY2xhc3NOYW1lID0gYHRpcHRhcCAke3RoaXMudmlldy5kb20uY2xhc3NOYW1lfWA7XHJcbiAgICB9XHJcbiAgICBjYXB0dXJlVHJhbnNhY3Rpb24oZm4pIHtcclxuICAgICAgICB0aGlzLmlzQ2FwdHVyaW5nVHJhbnNhY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIGZuKCk7XHJcbiAgICAgICAgdGhpcy5pc0NhcHR1cmluZ1RyYW5zYWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgdHIgPSB0aGlzLmNhcHR1cmVkVHJhbnNhY3Rpb247XHJcbiAgICAgICAgdGhpcy5jYXB0dXJlZFRyYW5zYWN0aW9uID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gdHI7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjYWxsYmFjayBvdmVyIHdoaWNoIHRvIHNlbmQgdHJhbnNhY3Rpb25zIChzdGF0ZSB1cGRhdGVzKSBwcm9kdWNlZCBieSB0aGUgdmlldy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdHJhbnNhY3Rpb24gQW4gZWRpdG9yIHN0YXRlIHRyYW5zYWN0aW9uXHJcbiAgICAgKi9cclxuICAgIGRpc3BhdGNoVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pIHtcclxuICAgICAgICAvLyBpZiB0aGUgZWRpdG9yIC8gdGhlIHZpZXcgb2YgdGhlIGVkaXRvciB3YXMgZGVzdHJveWVkXHJcbiAgICAgICAgLy8gdGhlIHRyYW5zYWN0aW9uIHNob3VsZCBub3QgYmUgZGlzcGF0Y2hlZCBhcyB0aGVyZSBpcyBubyB2aWV3IGFueW1vcmUuXHJcbiAgICAgICAgaWYgKHRoaXMudmlldy5pc0Rlc3Ryb3llZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzQ2FwdHVyaW5nVHJhbnNhY3Rpb24pIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhcHR1cmVkVHJhbnNhY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FwdHVyZWRUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uLnN0ZXBzLmZvckVhY2goc3RlcCA9PiB7IHZhciBfYTsgcmV0dXJuIChfYSA9IHRoaXMuY2FwdHVyZWRUcmFuc2FjdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0ZXAoc3RlcCk7IH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZS5hcHBseSh0cmFuc2FjdGlvbik7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uSGFzQ2hhbmdlZCA9ICF0aGlzLnN0YXRlLnNlbGVjdGlvbi5lcShzdGF0ZS5zZWxlY3Rpb24pO1xyXG4gICAgICAgIHRoaXMudmlldy51cGRhdGVTdGF0ZShzdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCd0cmFuc2FjdGlvbicsIHtcclxuICAgICAgICAgICAgZWRpdG9yOiB0aGlzLFxyXG4gICAgICAgICAgICB0cmFuc2FjdGlvbixcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoc2VsZWN0aW9uSGFzQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3NlbGVjdGlvblVwZGF0ZScsIHtcclxuICAgICAgICAgICAgICAgIGVkaXRvcjogdGhpcyxcclxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZm9jdXMgPSB0cmFuc2FjdGlvbi5nZXRNZXRhKCdmb2N1cycpO1xyXG4gICAgICAgIGNvbnN0IGJsdXIgPSB0cmFuc2FjdGlvbi5nZXRNZXRhKCdibHVyJyk7XHJcbiAgICAgICAgaWYgKGZvY3VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZm9jdXMnLCB7XHJcbiAgICAgICAgICAgICAgICBlZGl0b3I6IHRoaXMsXHJcbiAgICAgICAgICAgICAgICBldmVudDogZm9jdXMuZXZlbnQsXHJcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbixcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChibHVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnYmx1cicsIHtcclxuICAgICAgICAgICAgICAgIGVkaXRvcjogdGhpcyxcclxuICAgICAgICAgICAgICAgIGV2ZW50OiBibHVyLmV2ZW50LFxyXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLmRvY0NoYW5nZWQgfHwgdHJhbnNhY3Rpb24uZ2V0TWV0YSgncHJldmVudFVwZGF0ZScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB7XHJcbiAgICAgICAgICAgIGVkaXRvcjogdGhpcyxcclxuICAgICAgICAgICAgdHJhbnNhY3Rpb24sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldCBhdHRyaWJ1dGVzIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbm9kZSBvciBtYXJrLlxyXG4gICAgICovXHJcbiAgICBnZXRBdHRyaWJ1dGVzKG5hbWVPclR5cGUpIHtcclxuICAgICAgICByZXR1cm4gZ2V0QXR0cmlidXRlcyh0aGlzLnN0YXRlLCBuYW1lT3JUeXBlKTtcclxuICAgIH1cclxuICAgIGlzQWN0aXZlKG5hbWVPckF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXNPclVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSB0eXBlb2YgbmFtZU9yQXR0cmlidXRlcyA9PT0gJ3N0cmluZycgPyBuYW1lT3JBdHRyaWJ1dGVzIDogbnVsbDtcclxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gdHlwZW9mIG5hbWVPckF0dHJpYnV0ZXMgPT09ICdzdHJpbmcnID8gYXR0cmlidXRlc09yVW5kZWZpbmVkIDogbmFtZU9yQXR0cmlidXRlcztcclxuICAgICAgICByZXR1cm4gaXNBY3RpdmUodGhpcy5zdGF0ZSwgbmFtZSwgYXR0cmlidXRlcyk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgZG9jdW1lbnQgYXMgSlNPTi5cclxuICAgICAqL1xyXG4gICAgZ2V0SlNPTigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5kb2MudG9KU09OKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgZG9jdW1lbnQgYXMgSFRNTC5cclxuICAgICAqL1xyXG4gICAgZ2V0SFRNTCgpIHtcclxuICAgICAgICByZXR1cm4gZ2V0SFRNTEZyb21GcmFnbWVudCh0aGlzLnN0YXRlLmRvYy5jb250ZW50LCB0aGlzLnNjaGVtYSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgZG9jdW1lbnQgYXMgdGV4dC5cclxuICAgICAqL1xyXG4gICAgZ2V0VGV4dChvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgeyBibG9ja1NlcGFyYXRvciA9ICdcXG5cXG4nLCB0ZXh0U2VyaWFsaXplcnMgPSB7fSB9ID0gb3B0aW9ucyB8fCB7fTtcclxuICAgICAgICByZXR1cm4gZ2V0VGV4dCh0aGlzLnN0YXRlLmRvYywge1xyXG4gICAgICAgICAgICBibG9ja1NlcGFyYXRvcixcclxuICAgICAgICAgICAgdGV4dFNlcmlhbGl6ZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAuLi5nZXRUZXh0U2VyaWFsaXplcnNGcm9tU2NoZW1hKHRoaXMuc2NoZW1hKSxcclxuICAgICAgICAgICAgICAgIC4uLnRleHRTZXJpYWxpemVycyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgaWYgdGhlcmUgaXMgbm8gY29udGVudC5cclxuICAgICAqL1xyXG4gICAgZ2V0IGlzRW1wdHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzTm9kZUVtcHR5KHRoaXMuc3RhdGUuZG9jKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBmb3IgdGhlIGN1cnJlbnQgZG9jdW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQGRlcHJlY2F0ZWRcclxuICAgICAqL1xyXG4gICAgZ2V0Q2hhcmFjdGVyQ291bnQoKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdbdGlwdGFwIHdhcm5dOiBcImVkaXRvci5nZXRDaGFyYWN0ZXJDb3VudCgpXCIgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBcImVkaXRvci5zdG9yYWdlLmNoYXJhY3RlckNvdW50LmNoYXJhY3RlcnMoKVwiIGluc3RlYWQuJyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuZG9jLmNvbnRlbnQuc2l6ZSAtIDI7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3kgdGhlIGVkaXRvci5cclxuICAgICAqL1xyXG4gICAgZGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmVtaXQoJ2Rlc3Ryb3knKTtcclxuICAgICAgICBpZiAodGhpcy52aWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlldy5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIGlmIHRoZSBlZGl0b3IgaXMgYWxyZWFkeSBkZXN0cm95ZWQuXHJcbiAgICAgKi9cclxuICAgIGdldCBpc0Rlc3Ryb3llZCgpIHtcclxuICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHJldHVybiAhKChfYSA9IHRoaXMudmlldykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRvY1ZpZXcpO1xyXG4gICAgfVxyXG59XG5cbi8qKlxyXG4gKiBCdWlsZCBhbiBpbnB1dCBydWxlIHRoYXQgYWRkcyBhIG1hcmsgd2hlbiB0aGVcclxuICogbWF0Y2hlZCB0ZXh0IGlzIHR5cGVkIGludG8gaXQuXHJcbiAqL1xyXG5mdW5jdGlvbiBtYXJrSW5wdXRSdWxlKGNvbmZpZykge1xyXG4gICAgcmV0dXJuIG5ldyBJbnB1dFJ1bGUoe1xyXG4gICAgICAgIGZpbmQ6IGNvbmZpZy5maW5kLFxyXG4gICAgICAgIGhhbmRsZXI6ICh7IHN0YXRlLCByYW5nZSwgbWF0Y2ggfSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gY2FsbE9yUmV0dXJuKGNvbmZpZy5nZXRBdHRyaWJ1dGVzLCB1bmRlZmluZWQsIG1hdGNoKTtcclxuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgPT09IGZhbHNlIHx8IGF0dHJpYnV0ZXMgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHsgdHIgfSA9IHN0YXRlO1xyXG4gICAgICAgICAgICBjb25zdCBjYXB0dXJlR3JvdXAgPSBtYXRjaFttYXRjaC5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgY29uc3QgZnVsbE1hdGNoID0gbWF0Y2hbMF07XHJcbiAgICAgICAgICAgIGlmIChjYXB0dXJlR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0U3BhY2VzID0gZnVsbE1hdGNoLnNlYXJjaCgvXFxTLyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0U3RhcnQgPSByYW5nZS5mcm9tICsgZnVsbE1hdGNoLmluZGV4T2YoY2FwdHVyZUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRFbmQgPSB0ZXh0U3RhcnQgKyBjYXB0dXJlR3JvdXAubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXhjbHVkZWRNYXJrcyA9IGdldE1hcmtzQmV0d2VlbihyYW5nZS5mcm9tLCByYW5nZS50bywgc3RhdGUuZG9jKVxyXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVkID0gaXRlbS5tYXJrLnR5cGUuZXhjbHVkZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2x1ZGVkLmZpbmQodHlwZSA9PiB0eXBlID09PSBjb25maWcudHlwZSAmJiB0eXBlICE9PSBpdGVtLm1hcmsudHlwZSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnRvID4gdGV4dFN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIGlmIChleGNsdWRlZE1hcmtzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRleHRFbmQgPCByYW5nZS50bykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyLmRlbGV0ZSh0ZXh0RW5kLCByYW5nZS50byk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGV4dFN0YXJ0ID4gcmFuZ2UuZnJvbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyLmRlbGV0ZShyYW5nZS5mcm9tICsgc3RhcnRTcGFjZXMsIHRleHRTdGFydCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXJrRW5kID0gcmFuZ2UuZnJvbSArIHN0YXJ0U3BhY2VzICsgY2FwdHVyZUdyb3VwLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHRyLmFkZE1hcmsocmFuZ2UuZnJvbSArIHN0YXJ0U3BhY2VzLCBtYXJrRW5kLCBjb25maWcudHlwZS5jcmVhdGUoYXR0cmlidXRlcyB8fCB7fSkpO1xyXG4gICAgICAgICAgICAgICAgdHIucmVtb3ZlU3RvcmVkTWFyayhjb25maWcudHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgfSk7XHJcbn1cblxuLyoqXHJcbiAqIEJ1aWxkIGFuIGlucHV0IHJ1bGUgdGhhdCBhZGRzIGEgbm9kZSB3aGVuIHRoZVxyXG4gKiBtYXRjaGVkIHRleHQgaXMgdHlwZWQgaW50byBpdC5cclxuICovXHJcbmZ1bmN0aW9uIG5vZGVJbnB1dFJ1bGUoY29uZmlnKSB7XHJcbiAgICByZXR1cm4gbmV3IElucHV0UnVsZSh7XHJcbiAgICAgICAgZmluZDogY29uZmlnLmZpbmQsXHJcbiAgICAgICAgaGFuZGxlcjogKHsgc3RhdGUsIHJhbmdlLCBtYXRjaCB9KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBjYWxsT3JSZXR1cm4oY29uZmlnLmdldEF0dHJpYnV0ZXMsIHVuZGVmaW5lZCwgbWF0Y2gpIHx8IHt9O1xyXG4gICAgICAgICAgICBjb25zdCB7IHRyIH0gPSBzdGF0ZTtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSByYW5nZS5mcm9tO1xyXG4gICAgICAgICAgICBsZXQgZW5kID0gcmFuZ2UudG87XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSBjb25maWcudHlwZS5jcmVhdGUoYXR0cmlidXRlcyk7XHJcbiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gbWF0Y2hbMF0ubGFzdEluZGV4T2YobWF0Y2hbMV0pO1xyXG4gICAgICAgICAgICAgICAgbGV0IG1hdGNoU3RhcnQgPSBzdGFydCArIG9mZnNldDtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRjaFN0YXJ0ID4gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hTdGFydCA9IGVuZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1hdGNoU3RhcnQgKyBtYXRjaFsxXS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBpbnNlcnQgbGFzdCB0eXBlZCBjaGFyYWN0ZXJcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RDaGFyID0gbWF0Y2hbMF1bbWF0Y2hbMF0ubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICB0ci5pbnNlcnRUZXh0KGxhc3RDaGFyLCBzdGFydCArIG1hdGNoWzBdLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgLy8gaW5zZXJ0IG5vZGUgZnJvbSBpbnB1dCBydWxlXHJcbiAgICAgICAgICAgICAgICB0ci5yZXBsYWNlV2l0aChtYXRjaFN0YXJ0LCBlbmQsIG5ld05vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoWzBdKSB7XHJcbiAgICAgICAgICAgICAgICB0ci5pbnNlcnQoc3RhcnQgLSAxLCBjb25maWcudHlwZS5jcmVhdGUoYXR0cmlidXRlcykpLmRlbGV0ZSh0ci5tYXBwaW5nLm1hcChzdGFydCksIHRyLm1hcHBpbmcubWFwKGVuZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG59XG5cbi8qKlxyXG4gKiBCdWlsZCBhbiBpbnB1dCBydWxlIHRoYXQgY2hhbmdlcyB0aGUgdHlwZSBvZiBhIHRleHRibG9jayB3aGVuIHRoZVxyXG4gKiBtYXRjaGVkIHRleHQgaXMgdHlwZWQgaW50byBpdC4gV2hlbiB1c2luZyBhIHJlZ3VsYXIgZXhwcmVzaW9uIHlvdeKAmWxsXHJcbiAqIHByb2JhYmx5IHdhbnQgdGhlIHJlZ2V4cCB0byBzdGFydCB3aXRoIGBeYCwgc28gdGhhdCB0aGUgcGF0dGVybiBjYW5cclxuICogb25seSBvY2N1ciBhdCB0aGUgc3RhcnQgb2YgYSB0ZXh0YmxvY2suXHJcbiAqL1xyXG5mdW5jdGlvbiB0ZXh0YmxvY2tUeXBlSW5wdXRSdWxlKGNvbmZpZykge1xyXG4gICAgcmV0dXJuIG5ldyBJbnB1dFJ1bGUoe1xyXG4gICAgICAgIGZpbmQ6IGNvbmZpZy5maW5kLFxyXG4gICAgICAgIGhhbmRsZXI6ICh7IHN0YXRlLCByYW5nZSwgbWF0Y2ggfSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCAkc3RhcnQgPSBzdGF0ZS5kb2MucmVzb2x2ZShyYW5nZS5mcm9tKTtcclxuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGNhbGxPclJldHVybihjb25maWcuZ2V0QXR0cmlidXRlcywgdW5kZWZpbmVkLCBtYXRjaCkgfHwge307XHJcbiAgICAgICAgICAgIGlmICghJHN0YXJ0Lm5vZGUoLTEpLmNhblJlcGxhY2VXaXRoKCRzdGFydC5pbmRleCgtMSksICRzdGFydC5pbmRleEFmdGVyKC0xKSwgY29uZmlnLnR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdGF0ZS50clxyXG4gICAgICAgICAgICAgICAgLmRlbGV0ZShyYW5nZS5mcm9tLCByYW5nZS50bylcclxuICAgICAgICAgICAgICAgIC5zZXRCbG9ja1R5cGUocmFuZ2UuZnJvbSwgcmFuZ2UuZnJvbSwgY29uZmlnLnR5cGUsIGF0dHJpYnV0ZXMpO1xyXG4gICAgICAgIH0sXHJcbiAgICB9KTtcclxufVxuXG4vKipcclxuICogQnVpbGQgYW4gaW5wdXQgcnVsZSB0aGF0IHJlcGxhY2VzIHRleHQgd2hlbiB0aGVcclxuICogbWF0Y2hlZCB0ZXh0IGlzIHR5cGVkIGludG8gaXQuXHJcbiAqL1xyXG5mdW5jdGlvbiB0ZXh0SW5wdXRSdWxlKGNvbmZpZykge1xyXG4gICAgcmV0dXJuIG5ldyBJbnB1dFJ1bGUoe1xyXG4gICAgICAgIGZpbmQ6IGNvbmZpZy5maW5kLFxyXG4gICAgICAgIGhhbmRsZXI6ICh7IHN0YXRlLCByYW5nZSwgbWF0Y2ggfSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaW5zZXJ0ID0gY29uZmlnLnJlcGxhY2U7XHJcbiAgICAgICAgICAgIGxldCBzdGFydCA9IHJhbmdlLmZyb207XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHJhbmdlLnRvO1xyXG4gICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IG1hdGNoWzBdLmxhc3RJbmRleE9mKG1hdGNoWzFdKTtcclxuICAgICAgICAgICAgICAgIGluc2VydCArPSBtYXRjaFswXS5zbGljZShvZmZzZXQgKyBtYXRjaFsxXS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnQgKz0gb2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3V0T2ZmID0gc3RhcnQgLSBlbmQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3V0T2ZmID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluc2VydCA9IG1hdGNoWzBdLnNsaWNlKG9mZnNldCAtIGN1dE9mZiwgb2Zmc2V0KSArIGluc2VydDtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGVuZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdGF0ZS50ci5pbnNlcnRUZXh0KGluc2VydCwgc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG59XG5cbi8qKlxyXG4gKiBCdWlsZCBhbiBpbnB1dCBydWxlIGZvciBhdXRvbWF0aWNhbGx5IHdyYXBwaW5nIGEgdGV4dGJsb2NrIHdoZW4gYVxyXG4gKiBnaXZlbiBzdHJpbmcgaXMgdHlwZWQuIFdoZW4gdXNpbmcgYSByZWd1bGFyIGV4cHJlc2lvbiB5b3XigJlsbFxyXG4gKiBwcm9iYWJseSB3YW50IHRoZSByZWdleHAgdG8gc3RhcnQgd2l0aCBgXmAsIHNvIHRoYXQgdGhlIHBhdHRlcm4gY2FuXHJcbiAqIG9ubHkgb2NjdXIgYXQgdGhlIHN0YXJ0IG9mIGEgdGV4dGJsb2NrLlxyXG4gKlxyXG4gKiBgdHlwZWAgaXMgdGhlIHR5cGUgb2Ygbm9kZSB0byB3cmFwIGluLlxyXG4gKlxyXG4gKiBCeSBkZWZhdWx0LCBpZiB0aGVyZeKAmXMgYSBub2RlIHdpdGggdGhlIHNhbWUgdHlwZSBhYm92ZSB0aGUgbmV3bHlcclxuICogd3JhcHBlZCBub2RlLCB0aGUgcnVsZSB3aWxsIHRyeSB0byBqb2luIHRob3NlXHJcbiAqIHR3byBub2Rlcy4gWW91IGNhbiBwYXNzIGEgam9pbiBwcmVkaWNhdGUsIHdoaWNoIHRha2VzIGEgcmVndWxhclxyXG4gKiBleHByZXNzaW9uIG1hdGNoIGFuZCB0aGUgbm9kZSBiZWZvcmUgdGhlIHdyYXBwZWQgbm9kZSwgYW5kIGNhblxyXG4gKiByZXR1cm4gYSBib29sZWFuIHRvIGluZGljYXRlIHdoZXRoZXIgYSBqb2luIHNob3VsZCBoYXBwZW4uXHJcbiAqL1xyXG5mdW5jdGlvbiB3cmFwcGluZ0lucHV0UnVsZShjb25maWcpIHtcclxuICAgIHJldHVybiBuZXcgSW5wdXRSdWxlKHtcclxuICAgICAgICBmaW5kOiBjb25maWcuZmluZCxcclxuICAgICAgICBoYW5kbGVyOiAoeyBzdGF0ZSwgcmFuZ2UsIG1hdGNoLCBjaGFpbiwgfSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gY2FsbE9yUmV0dXJuKGNvbmZpZy5nZXRBdHRyaWJ1dGVzLCB1bmRlZmluZWQsIG1hdGNoKSB8fCB7fTtcclxuICAgICAgICAgICAgY29uc3QgdHIgPSBzdGF0ZS50ci5kZWxldGUocmFuZ2UuZnJvbSwgcmFuZ2UudG8pO1xyXG4gICAgICAgICAgICBjb25zdCAkc3RhcnQgPSB0ci5kb2MucmVzb2x2ZShyYW5nZS5mcm9tKTtcclxuICAgICAgICAgICAgY29uc3QgYmxvY2tSYW5nZSA9ICRzdGFydC5ibG9ja1JhbmdlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwaW5nID0gYmxvY2tSYW5nZSAmJiBmaW5kV3JhcHBpbmcoYmxvY2tSYW5nZSwgY29uZmlnLnR5cGUsIGF0dHJpYnV0ZXMpO1xyXG4gICAgICAgICAgICBpZiAoIXdyYXBwaW5nKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0ci53cmFwKGJsb2NrUmFuZ2UsIHdyYXBwaW5nKTtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5rZWVwTWFya3MgJiYgY29uZmlnLmVkaXRvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBzZWxlY3Rpb24sIHN0b3JlZE1hcmtzIH0gPSBzdGF0ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3BsaXR0YWJsZU1hcmtzIH0gPSBjb25maWcuZWRpdG9yLmV4dGVuc2lvbk1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXJrcyA9IHN0b3JlZE1hcmtzIHx8IChzZWxlY3Rpb24uJHRvLnBhcmVudE9mZnNldCAmJiBzZWxlY3Rpb24uJGZyb20ubWFya3MoKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobWFya3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZE1hcmtzID0gbWFya3MuZmlsdGVyKG1hcmsgPT4gc3BsaXR0YWJsZU1hcmtzLmluY2x1ZGVzKG1hcmsudHlwZS5uYW1lKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHIuZW5zdXJlTWFya3MoZmlsdGVyZWRNYXJrcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5rZWVwQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgLyoqIElmIHRoZSBub2RlVHlwZSBpcyBgYnVsbGV0TGlzdGAgb3IgYG9yZGVyZWRMaXN0YCBzZXQgdGhlIGBub2RlVHlwZWAgYXMgYGxpc3RJdGVtYCAqL1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZVR5cGUgPSBjb25maWcudHlwZS5uYW1lID09PSAnYnVsbGV0TGlzdCcgfHwgY29uZmlnLnR5cGUubmFtZSA9PT0gJ29yZGVyZWRMaXN0JyA/ICdsaXN0SXRlbScgOiAndGFza0xpc3QnO1xyXG4gICAgICAgICAgICAgICAgY2hhaW4oKS51cGRhdGVBdHRyaWJ1dGVzKG5vZGVUeXBlLCBhdHRyaWJ1dGVzKS5ydW4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBiZWZvcmUgPSB0ci5kb2MucmVzb2x2ZShyYW5nZS5mcm9tIC0gMSkubm9kZUJlZm9yZTtcclxuICAgICAgICAgICAgaWYgKGJlZm9yZVxyXG4gICAgICAgICAgICAgICAgJiYgYmVmb3JlLnR5cGUgPT09IGNvbmZpZy50eXBlXHJcbiAgICAgICAgICAgICAgICAmJiBjYW5Kb2luKHRyLmRvYywgcmFuZ2UuZnJvbSAtIDEpXHJcbiAgICAgICAgICAgICAgICAmJiAoIWNvbmZpZy5qb2luUHJlZGljYXRlIHx8IGNvbmZpZy5qb2luUHJlZGljYXRlKG1hdGNoLCBiZWZvcmUpKSkge1xyXG4gICAgICAgICAgICAgICAgdHIuam9pbihyYW5nZS5mcm9tIC0gMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgfSk7XHJcbn1cblxuY2xhc3MgTWFyayB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xyXG4gICAgICAgIHRoaXMudHlwZSA9ICdtYXJrJztcclxuICAgICAgICB0aGlzLm5hbWUgPSAnbWFyayc7XHJcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2hpbGQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY29uZmlnID0ge1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgICAgICAgIGRlZmF1bHRPcHRpb25zOiB7fSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuY29uZmlnID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLmNvbmZpZyxcclxuICAgICAgICAgICAgLi4uY29uZmlnLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25maWcubmFtZTtcclxuICAgICAgICBpZiAoY29uZmlnLmRlZmF1bHRPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgW3RpcHRhcCB3YXJuXTogQlJFQUtJTkcgQ0hBTkdFOiBcImRlZmF1bHRPcHRpb25zXCIgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBcImFkZE9wdGlvbnNcIiBpbnN0ZWFkLiBGb3VuZCBpbiBleHRlbnNpb246IFwiJHt0aGlzLm5hbWV9XCIuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IHJlbW92ZSBgYWRkT3B0aW9uc2AgZmFsbGJhY2tcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmNvbmZpZy5kZWZhdWx0T3B0aW9ucztcclxuICAgICAgICBpZiAodGhpcy5jb25maWcuYWRkT3B0aW9ucykge1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBjYWxsT3JSZXR1cm4oZ2V0RXh0ZW5zaW9uRmllbGQodGhpcywgJ2FkZE9wdGlvbnMnLCB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlID0gY2FsbE9yUmV0dXJuKGdldEV4dGVuc2lvbkZpZWxkKHRoaXMsICdhZGRTdG9yYWdlJywge1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcclxuICAgICAgICB9KSkgfHwge307XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY3JlYXRlKGNvbmZpZyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXJrKGNvbmZpZyk7XHJcbiAgICB9XHJcbiAgICBjb25maWd1cmUob3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIGEgbmV3IGluc3RhbmNlIHNvIHdlIGNhbiB1c2UgdGhlIHNhbWUgZXh0ZW5zaW9uXHJcbiAgICAgICAgLy8gd2l0aCBkaWZmZXJlbnQgY2FsbHMgb2YgYGNvbmZpZ3VyZWBcclxuICAgICAgICBjb25zdCBleHRlbnNpb24gPSB0aGlzLmV4dGVuZCgpO1xyXG4gICAgICAgIGV4dGVuc2lvbi5vcHRpb25zID0gbWVyZ2VEZWVwKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XHJcbiAgICAgICAgZXh0ZW5zaW9uLnN0b3JhZ2UgPSBjYWxsT3JSZXR1cm4oZ2V0RXh0ZW5zaW9uRmllbGQoZXh0ZW5zaW9uLCAnYWRkU3RvcmFnZScsIHtcclxuICAgICAgICAgICAgbmFtZTogZXh0ZW5zaW9uLm5hbWUsXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IGV4dGVuc2lvbi5vcHRpb25zLFxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICByZXR1cm4gZXh0ZW5zaW9uO1xyXG4gICAgfVxyXG4gICAgZXh0ZW5kKGV4dGVuZGVkQ29uZmlnID0ge30pIHtcclxuICAgICAgICBjb25zdCBleHRlbnNpb24gPSBuZXcgTWFyayhleHRlbmRlZENvbmZpZyk7XHJcbiAgICAgICAgZXh0ZW5zaW9uLnBhcmVudCA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5jaGlsZCA9IGV4dGVuc2lvbjtcclxuICAgICAgICBleHRlbnNpb24ubmFtZSA9IGV4dGVuZGVkQ29uZmlnLm5hbWUgPyBleHRlbmRlZENvbmZpZy5uYW1lIDogZXh0ZW5zaW9uLnBhcmVudC5uYW1lO1xyXG4gICAgICAgIGlmIChleHRlbmRlZENvbmZpZy5kZWZhdWx0T3B0aW9ucykge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFt0aXB0YXAgd2Fybl06IEJSRUFLSU5HIENIQU5HRTogXCJkZWZhdWx0T3B0aW9uc1wiIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgXCJhZGRPcHRpb25zXCIgaW5zdGVhZC4gRm91bmQgaW4gZXh0ZW5zaW9uOiBcIiR7ZXh0ZW5zaW9uLm5hbWV9XCIuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV4dGVuc2lvbi5vcHRpb25zID0gY2FsbE9yUmV0dXJuKGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ2FkZE9wdGlvbnMnLCB7XHJcbiAgICAgICAgICAgIG5hbWU6IGV4dGVuc2lvbi5uYW1lLFxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBleHRlbnNpb24uc3RvcmFnZSA9IGNhbGxPclJldHVybihnZXRFeHRlbnNpb25GaWVsZChleHRlbnNpb24sICdhZGRTdG9yYWdlJywge1xyXG4gICAgICAgICAgICBuYW1lOiBleHRlbnNpb24ubmFtZSxcclxuICAgICAgICAgICAgb3B0aW9uczogZXh0ZW5zaW9uLm9wdGlvbnMsXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHJldHVybiBleHRlbnNpb247XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgaGFuZGxlRXhpdCh7IGVkaXRvciwgbWFyayB9KSB7XHJcbiAgICAgICAgY29uc3QgeyB0ciB9ID0gZWRpdG9yLnN0YXRlO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRQb3MgPSBlZGl0b3Iuc3RhdGUuc2VsZWN0aW9uLiRmcm9tO1xyXG4gICAgICAgIGNvbnN0IGlzQXRFbmQgPSBjdXJyZW50UG9zLnBvcyA9PT0gY3VycmVudFBvcy5lbmQoKTtcclxuICAgICAgICBpZiAoaXNBdEVuZCkge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TWFya3MgPSBjdXJyZW50UG9zLm1hcmtzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzSW5NYXJrID0gISFjdXJyZW50TWFya3MuZmluZChtID0+IChtID09PSBudWxsIHx8IG0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG0udHlwZS5uYW1lKSA9PT0gbWFyay5uYW1lKTtcclxuICAgICAgICAgICAgaWYgKCFpc0luTWFyaykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZU1hcmsgPSBjdXJyZW50TWFya3MuZmluZChtID0+IChtID09PSBudWxsIHx8IG0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG0udHlwZS5uYW1lKSA9PT0gbWFyay5uYW1lKTtcclxuICAgICAgICAgICAgaWYgKHJlbW92ZU1hcmspIHtcclxuICAgICAgICAgICAgICAgIHRyLnJlbW92ZVN0b3JlZE1hcmsocmVtb3ZlTWFyayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHIuaW5zZXJ0VGV4dCgnICcsIGN1cnJlbnRQb3MucG9zKTtcclxuICAgICAgICAgICAgZWRpdG9yLnZpZXcuZGlzcGF0Y2godHIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIE5vZGUge1xyXG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcclxuICAgICAgICB0aGlzLnR5cGUgPSAnbm9kZSc7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gJ25vZGUnO1xyXG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNoaWxkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvbmZpZyA9IHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICBkZWZhdWx0T3B0aW9uczoge30sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNvbmZpZyA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5jb25maWcsXHJcbiAgICAgICAgICAgIC4uLmNvbmZpZyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uZmlnLm5hbWU7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5kZWZhdWx0T3B0aW9ucykge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFt0aXB0YXAgd2Fybl06IEJSRUFLSU5HIENIQU5HRTogXCJkZWZhdWx0T3B0aW9uc1wiIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgXCJhZGRPcHRpb25zXCIgaW5zdGVhZC4gRm91bmQgaW4gZXh0ZW5zaW9uOiBcIiR7dGhpcy5uYW1lfVwiLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPOiByZW1vdmUgYGFkZE9wdGlvbnNgIGZhbGxiYWNrXHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5jb25maWcuZGVmYXVsdE9wdGlvbnM7XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmFkZE9wdGlvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gY2FsbE9yUmV0dXJuKGdldEV4dGVuc2lvbkZpZWxkKHRoaXMsICdhZGRPcHRpb25zJywge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RvcmFnZSA9IGNhbGxPclJldHVybihnZXRFeHRlbnNpb25GaWVsZCh0aGlzLCAnYWRkU3RvcmFnZScsIHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXHJcbiAgICAgICAgfSkpIHx8IHt9O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGNyZWF0ZShjb25maWcgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgTm9kZShjb25maWcpO1xyXG4gICAgfVxyXG4gICAgY29uZmlndXJlKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIC8vIHJldHVybiBhIG5ldyBpbnN0YW5jZSBzbyB3ZSBjYW4gdXNlIHRoZSBzYW1lIGV4dGVuc2lvblxyXG4gICAgICAgIC8vIHdpdGggZGlmZmVyZW50IGNhbGxzIG9mIGBjb25maWd1cmVgXHJcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gdGhpcy5leHRlbmQoKTtcclxuICAgICAgICBleHRlbnNpb24ub3B0aW9ucyA9IG1lcmdlRGVlcCh0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xyXG4gICAgICAgIGV4dGVuc2lvbi5zdG9yYWdlID0gY2FsbE9yUmV0dXJuKGdldEV4dGVuc2lvbkZpZWxkKGV4dGVuc2lvbiwgJ2FkZFN0b3JhZ2UnLCB7XHJcbiAgICAgICAgICAgIG5hbWU6IGV4dGVuc2lvbi5uYW1lLFxyXG4gICAgICAgICAgICBvcHRpb25zOiBleHRlbnNpb24ub3B0aW9ucyxcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbjtcclxuICAgIH1cclxuICAgIGV4dGVuZChleHRlbmRlZENvbmZpZyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gbmV3IE5vZGUoZXh0ZW5kZWRDb25maWcpO1xyXG4gICAgICAgIGV4dGVuc2lvbi5wYXJlbnQgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuY2hpbGQgPSBleHRlbnNpb247XHJcbiAgICAgICAgZXh0ZW5zaW9uLm5hbWUgPSBleHRlbmRlZENvbmZpZy5uYW1lID8gZXh0ZW5kZWRDb25maWcubmFtZSA6IGV4dGVuc2lvbi5wYXJlbnQubmFtZTtcclxuICAgICAgICBpZiAoZXh0ZW5kZWRDb25maWcuZGVmYXVsdE9wdGlvbnMpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGBbdGlwdGFwIHdhcm5dOiBCUkVBS0lORyBDSEFOR0U6IFwiZGVmYXVsdE9wdGlvbnNcIiBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIFwiYWRkT3B0aW9uc1wiIGluc3RlYWQuIEZvdW5kIGluIGV4dGVuc2lvbjogXCIke2V4dGVuc2lvbi5uYW1lfVwiLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBleHRlbnNpb24ub3B0aW9ucyA9IGNhbGxPclJldHVybihnZXRFeHRlbnNpb25GaWVsZChleHRlbnNpb24sICdhZGRPcHRpb25zJywge1xyXG4gICAgICAgICAgICBuYW1lOiBleHRlbnNpb24ubmFtZSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgZXh0ZW5zaW9uLnN0b3JhZ2UgPSBjYWxsT3JSZXR1cm4oZ2V0RXh0ZW5zaW9uRmllbGQoZXh0ZW5zaW9uLCAnYWRkU3RvcmFnZScsIHtcclxuICAgICAgICAgICAgbmFtZTogZXh0ZW5zaW9uLm5hbWUsXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IGV4dGVuc2lvbi5vcHRpb25zLFxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICByZXR1cm4gZXh0ZW5zaW9uO1xyXG4gICAgfVxyXG59XG5cbmZ1bmN0aW9uIGlzQW5kcm9pZCgpIHtcclxuICAgIHJldHVybiBuYXZpZ2F0b3IucGxhdGZvcm0gPT09ICdBbmRyb2lkJyB8fCAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XHJcbn1cblxuY2xhc3MgTm9kZVZpZXcge1xyXG4gICAgY29uc3RydWN0b3IoY29tcG9uZW50LCBwcm9wcywgb3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xyXG4gICAgICAgIHRoaXMuZWRpdG9yID0gcHJvcHMuZWRpdG9yO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgc3RvcEV2ZW50OiBudWxsLFxyXG4gICAgICAgICAgICBpZ25vcmVNdXRhdGlvbjogbnVsbCxcclxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZXh0ZW5zaW9uID0gcHJvcHMuZXh0ZW5zaW9uO1xyXG4gICAgICAgIHRoaXMubm9kZSA9IHByb3BzLm5vZGU7XHJcbiAgICAgICAgdGhpcy5kZWNvcmF0aW9ucyA9IHByb3BzLmRlY29yYXRpb25zO1xyXG4gICAgICAgIHRoaXMuZ2V0UG9zID0gcHJvcHMuZ2V0UG9zO1xyXG4gICAgICAgIHRoaXMubW91bnQoKTtcclxuICAgIH1cclxuICAgIG1vdW50KCkge1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGdldCBkb20oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yLnZpZXcuZG9tO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNvbnRlbnRET00oKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBvbkRyYWdTdGFydChldmVudCkge1xyXG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZztcclxuICAgICAgICBjb25zdCB7IHZpZXcgfSA9IHRoaXMuZWRpdG9yO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgICAvLyBnZXQgdGhlIGRyYWcgaGFuZGxlIGVsZW1lbnRcclxuICAgICAgICAvLyBgY2xvc2VzdGAgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGV4dCBub2RlcyBzbyB3ZSBtYXkgaGF2ZSB0byB1c2UgaXRzIHBhcmVudFxyXG4gICAgICAgIGNvbnN0IGRyYWdIYW5kbGUgPSB0YXJnZXQubm9kZVR5cGUgPT09IDNcclxuICAgICAgICAgICAgPyAoX2EgPSB0YXJnZXQucGFyZW50RWxlbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNsb3Nlc3QoJ1tkYXRhLWRyYWctaGFuZGxlXScpXHJcbiAgICAgICAgICAgIDogdGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWRyYWctaGFuZGxlXScpO1xyXG4gICAgICAgIGlmICghdGhpcy5kb20gfHwgKChfYiA9IHRoaXMuY29udGVudERPTSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNvbnRhaW5zKHRhcmdldCkpIHx8ICFkcmFnSGFuZGxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHggPSAwO1xyXG4gICAgICAgIGxldCB5ID0gMDtcclxuICAgICAgICAvLyBjYWxjdWxhdGUgb2Zmc2V0IGZvciBkcmFnIGVsZW1lbnQgaWYgd2UgdXNlIGEgZGlmZmVyZW50IGRyYWcgaGFuZGxlIGVsZW1lbnRcclxuICAgICAgICBpZiAodGhpcy5kb20gIT09IGRyYWdIYW5kbGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZG9tQm94ID0gdGhpcy5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUJveCA9IGRyYWdIYW5kbGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIC8vIEluIFJlYWN0LCB3ZSBoYXZlIHRvIGdvIHRocm91Z2ggbmF0aXZlRXZlbnQgdG8gcmVhY2ggb2Zmc2V0WC9vZmZzZXRZLlxyXG4gICAgICAgICAgICBjb25zdCBvZmZzZXRYID0gKF9jID0gZXZlbnQub2Zmc2V0WCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogKF9kID0gZXZlbnQubmF0aXZlRXZlbnQpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5vZmZzZXRYO1xyXG4gICAgICAgICAgICBjb25zdCBvZmZzZXRZID0gKF9lID0gZXZlbnQub2Zmc2V0WSkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogKF9mID0gZXZlbnQubmF0aXZlRXZlbnQpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5vZmZzZXRZO1xyXG4gICAgICAgICAgICB4ID0gaGFuZGxlQm94LnggLSBkb21Cb3gueCArIG9mZnNldFg7XHJcbiAgICAgICAgICAgIHkgPSBoYW5kbGVCb3gueSAtIGRvbUJveC55ICsgb2Zmc2V0WTtcclxuICAgICAgICB9XHJcbiAgICAgICAgKF9nID0gZXZlbnQuZGF0YVRyYW5zZmVyKSA9PT0gbnVsbCB8fCBfZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2cuc2V0RHJhZ0ltYWdlKHRoaXMuZG9tLCB4LCB5KTtcclxuICAgICAgICAvLyB3ZSBuZWVkIHRvIHRlbGwgUHJvc2VNaXJyb3IgdGhhdCB3ZSB3YW50IHRvIG1vdmUgdGhlIHdob2xlIG5vZGVcclxuICAgICAgICAvLyBzbyB3ZSBjcmVhdGUgYSBOb2RlU2VsZWN0aW9uXHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gTm9kZVNlbGVjdGlvbi5jcmVhdGUodmlldy5zdGF0ZS5kb2MsIHRoaXMuZ2V0UG9zKCkpO1xyXG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdmlldy5zdGF0ZS50ci5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICAgICAgICB2aWV3LmRpc3BhdGNoKHRyYW5zYWN0aW9uKTtcclxuICAgIH1cclxuICAgIHN0b3BFdmVudChldmVudCkge1xyXG4gICAgICAgIHZhciBfYTtcclxuICAgICAgICBpZiAoIXRoaXMuZG9tKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuc3RvcEV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3RvcEV2ZW50KHsgZXZlbnQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgICBjb25zdCBpc0luRWxlbWVudCA9IHRoaXMuZG9tLmNvbnRhaW5zKHRhcmdldCkgJiYgISgoX2EgPSB0aGlzLmNvbnRlbnRET00pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb250YWlucyh0YXJnZXQpKTtcclxuICAgICAgICAvLyBhbnkgZXZlbnQgZnJvbSBjaGlsZCBub2RlcyBzaG91bGQgYmUgaGFuZGxlZCBieSBQcm9zZU1pcnJvclxyXG4gICAgICAgIGlmICghaXNJbkVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpc0RyYWdFdmVudCA9IGV2ZW50LnR5cGUuc3RhcnRzV2l0aCgnZHJhZycpO1xyXG4gICAgICAgIGNvbnN0IGlzRHJvcEV2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ2Ryb3AnO1xyXG4gICAgICAgIGNvbnN0IGlzSW5wdXQgPSBbJ0lOUFVUJywgJ0JVVFRPTicsICdTRUxFQ1QnLCAnVEVYVEFSRUEnXS5pbmNsdWRlcyh0YXJnZXQudGFnTmFtZSkgfHwgdGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlO1xyXG4gICAgICAgIC8vIGFueSBpbnB1dCBldmVudCB3aXRoaW4gbm9kZSB2aWV3cyBzaG91bGQgYmUgaWdub3JlZCBieSBQcm9zZU1pcnJvclxyXG4gICAgICAgIGlmIChpc0lucHV0ICYmICFpc0Ryb3BFdmVudCAmJiAhaXNEcmFnRXZlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHsgaXNFZGl0YWJsZSB9ID0gdGhpcy5lZGl0b3I7XHJcbiAgICAgICAgY29uc3QgeyBpc0RyYWdnaW5nIH0gPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IGlzRHJhZ2dhYmxlID0gISF0aGlzLm5vZGUudHlwZS5zcGVjLmRyYWdnYWJsZTtcclxuICAgICAgICBjb25zdCBpc1NlbGVjdGFibGUgPSBOb2RlU2VsZWN0aW9uLmlzU2VsZWN0YWJsZSh0aGlzLm5vZGUpO1xyXG4gICAgICAgIGNvbnN0IGlzQ29weUV2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ2NvcHknO1xyXG4gICAgICAgIGNvbnN0IGlzUGFzdGVFdmVudCA9IGV2ZW50LnR5cGUgPT09ICdwYXN0ZSc7XHJcbiAgICAgICAgY29uc3QgaXNDdXRFdmVudCA9IGV2ZW50LnR5cGUgPT09ICdjdXQnO1xyXG4gICAgICAgIGNvbnN0IGlzQ2xpY2tFdmVudCA9IGV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nO1xyXG4gICAgICAgIC8vIFByb3NlTWlycm9yIHRyaWVzIHRvIGRyYWcgc2VsZWN0YWJsZSBub2Rlc1xyXG4gICAgICAgIC8vIGV2ZW4gaWYgYGRyYWdnYWJsZWAgaXMgc2V0IHRvIGBmYWxzZWBcclxuICAgICAgICAvLyB0aGlzIGZpeCBwcmV2ZW50cyB0aGF0XHJcbiAgICAgICAgaWYgKCFpc0RyYWdnYWJsZSAmJiBpc1NlbGVjdGFibGUgJiYgaXNEcmFnRXZlbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzRHJhZ2dhYmxlICYmIGlzRHJhZ0V2ZW50ICYmICFpc0RyYWdnaW5nKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2UgaGF2ZSB0byBzdG9yZSB0aGF0IGRyYWdnaW5nIHN0YXJ0ZWRcclxuICAgICAgICBpZiAoaXNEcmFnZ2FibGUgJiYgaXNFZGl0YWJsZSAmJiAhaXNEcmFnZ2luZyAmJiBpc0NsaWNrRXZlbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgZHJhZ0hhbmRsZSA9IHRhcmdldC5jbG9zZXN0KCdbZGF0YS1kcmFnLWhhbmRsZV0nKTtcclxuICAgICAgICAgICAgY29uc3QgaXNWYWxpZERyYWdIYW5kbGUgPSBkcmFnSGFuZGxlICYmICh0aGlzLmRvbSA9PT0gZHJhZ0hhbmRsZSB8fCB0aGlzLmRvbS5jb250YWlucyhkcmFnSGFuZGxlKSk7XHJcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkRHJhZ0hhbmRsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9LCB7IG9uY2U6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSwgeyBvbmNlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sIHsgb25jZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0aGVzZSBldmVudHMgYXJlIGhhbmRsZWQgYnkgcHJvc2VtaXJyb3JcclxuICAgICAgICBpZiAoaXNEcmFnZ2luZ1xyXG4gICAgICAgICAgICB8fCBpc0Ryb3BFdmVudFxyXG4gICAgICAgICAgICB8fCBpc0NvcHlFdmVudFxyXG4gICAgICAgICAgICB8fCBpc1Bhc3RlRXZlbnRcclxuICAgICAgICAgICAgfHwgaXNDdXRFdmVudFxyXG4gICAgICAgICAgICB8fCAoaXNDbGlja0V2ZW50ICYmIGlzU2VsZWN0YWJsZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlnbm9yZU11dGF0aW9uKG11dGF0aW9uKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRvbSB8fCAhdGhpcy5jb250ZW50RE9NKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5pZ25vcmVNdXRhdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmlnbm9yZU11dGF0aW9uKHsgbXV0YXRpb24gfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGEgbGVhZi9hdG9tIG5vZGUgaXMgbGlrZSBhIGJsYWNrIGJveCBmb3IgUHJvc2VNaXJyb3JcclxuICAgICAgICAvLyBhbmQgc2hvdWxkIGJlIGZ1bGx5IGhhbmRsZWQgYnkgdGhlIG5vZGUgdmlld1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUuaXNMZWFmIHx8IHRoaXMubm9kZS5pc0F0b20pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFByb3NlTWlycm9yIHNob3VsZCBoYW5kbGUgYW55IHNlbGVjdGlvbnNcclxuICAgICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gJ3NlbGVjdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0cnkgdG8gcHJldmVudCBhIGJ1ZyBvbiBpT1MgYW5kIEFuZHJvaWQgdGhhdCB3aWxsIGJyZWFrIG5vZGUgdmlld3Mgb24gZW50ZXJcclxuICAgICAgICAvLyB0aGlzIGlzIGJlY2F1c2UgUHJvc2VNaXJyb3IgY2Fu4oCZdCBwcmV2ZW50RGlzcGF0Y2ggb24gZW50ZXJcclxuICAgICAgICAvLyB0aGlzIHdpbGwgbGVhZCB0byBhIHJlLXJlbmRlciBvZiB0aGUgbm9kZSB2aWV3IG9uIGVudGVyXHJcbiAgICAgICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vdWViZXJkb3Npcy90aXB0YXAvaXNzdWVzLzEyMTRcclxuICAgICAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS91ZWJlcmRvc2lzL3RpcHRhcC9pc3N1ZXMvMjUzNFxyXG4gICAgICAgIGlmICh0aGlzLmRvbS5jb250YWlucyhtdXRhdGlvbi50YXJnZXQpXHJcbiAgICAgICAgICAgICYmIG11dGF0aW9uLnR5cGUgPT09ICdjaGlsZExpc3QnXHJcbiAgICAgICAgICAgICYmIChpc2lPUygpIHx8IGlzQW5kcm9pZCgpKVxyXG4gICAgICAgICAgICAmJiB0aGlzLmVkaXRvci5pc0ZvY3VzZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgY2hhbmdlZE5vZGVzID0gW1xyXG4gICAgICAgICAgICAgICAgLi4uQXJyYXkuZnJvbShtdXRhdGlvbi5hZGRlZE5vZGVzKSxcclxuICAgICAgICAgICAgICAgIC4uLkFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKSxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgLy8gd2XigJlsbCBjaGVjayBpZiBldmVyeSBjaGFuZ2VkIG5vZGUgaXMgY29udGVudEVkaXRhYmxlXHJcbiAgICAgICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBpdOKAmXMgcHJvYmFibHkgbXV0YXRlZCBieSBQcm9zZU1pcnJvclxyXG4gICAgICAgICAgICBpZiAoY2hhbmdlZE5vZGVzLmV2ZXJ5KG5vZGUgPT4gbm9kZS5pc0NvbnRlbnRFZGl0YWJsZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB3ZSB3aWxsIGFsbG93IG11dGF0aW9uIGNvbnRlbnRET00gd2l0aCBhdHRyaWJ1dGVzXHJcbiAgICAgICAgLy8gc28gd2UgY2FuIGZvciBleGFtcGxlIGFkZGluZyBjbGFzc2VzIHdpdGhpbiBvdXIgbm9kZSB2aWV3XHJcbiAgICAgICAgaWYgKHRoaXMuY29udGVudERPTSA9PT0gbXV0YXRpb24udGFyZ2V0ICYmIG11dGF0aW9uLnR5cGUgPT09ICdhdHRyaWJ1dGVzJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUHJvc2VNaXJyb3Igc2hvdWxkIGhhbmRsZSBhbnkgY2hhbmdlcyB3aXRoaW4gY29udGVudERPTVxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRET00uY29udGFpbnMobXV0YXRpb24udGFyZ2V0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgdXBkYXRlQXR0cmlidXRlcyhhdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuY29tbWFuZHMuY29tbWFuZCgoeyB0ciB9KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0UG9zKCk7XHJcbiAgICAgICAgICAgIHRyLnNldE5vZGVNYXJrdXAocG9zLCB1bmRlZmluZWQsIHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMubm9kZS5hdHRycyxcclxuICAgICAgICAgICAgICAgIC4uLmF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGRlbGV0ZU5vZGUoKSB7XHJcbiAgICAgICAgY29uc3QgZnJvbSA9IHRoaXMuZ2V0UG9zKCk7XHJcbiAgICAgICAgY29uc3QgdG8gPSBmcm9tICsgdGhpcy5ub2RlLm5vZGVTaXplO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLmRlbGV0ZVJhbmdlKHsgZnJvbSwgdG8gfSk7XHJcbiAgICB9XHJcbn1cblxuLyoqXHJcbiAqIEJ1aWxkIGFuIHBhc3RlIHJ1bGUgdGhhdCBhZGRzIGEgbWFyayB3aGVuIHRoZVxyXG4gKiBtYXRjaGVkIHRleHQgaXMgcGFzdGVkIGludG8gaXQuXHJcbiAqL1xyXG5mdW5jdGlvbiBtYXJrUGFzdGVSdWxlKGNvbmZpZykge1xyXG4gICAgcmV0dXJuIG5ldyBQYXN0ZVJ1bGUoe1xyXG4gICAgICAgIGZpbmQ6IGNvbmZpZy5maW5kLFxyXG4gICAgICAgIGhhbmRsZXI6ICh7IHN0YXRlLCByYW5nZSwgbWF0Y2gsIHBhc3RlRXZlbnQsIH0pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGNhbGxPclJldHVybihjb25maWcuZ2V0QXR0cmlidXRlcywgdW5kZWZpbmVkLCBtYXRjaCwgcGFzdGVFdmVudCk7XHJcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzID09PSBmYWxzZSB8fCBhdHRyaWJ1dGVzID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB7IHRyIH0gPSBzdGF0ZTtcclxuICAgICAgICAgICAgY29uc3QgY2FwdHVyZUdyb3VwID0gbWF0Y2hbbWF0Y2gubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxNYXRjaCA9IG1hdGNoWzBdO1xyXG4gICAgICAgICAgICBsZXQgbWFya0VuZCA9IHJhbmdlLnRvO1xyXG4gICAgICAgICAgICBpZiAoY2FwdHVyZUdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFNwYWNlcyA9IGZ1bGxNYXRjaC5zZWFyY2goL1xcUy8pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dFN0YXJ0ID0gcmFuZ2UuZnJvbSArIGZ1bGxNYXRjaC5pbmRleE9mKGNhcHR1cmVHcm91cCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0RW5kID0gdGV4dFN0YXJ0ICsgY2FwdHVyZUdyb3VwLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVkTWFya3MgPSBnZXRNYXJrc0JldHdlZW4ocmFuZ2UuZnJvbSwgcmFuZ2UudG8sIHN0YXRlLmRvYylcclxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGNsdWRlZCA9IGl0ZW0ubWFyay50eXBlLmV4Y2x1ZGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNsdWRlZC5maW5kKHR5cGUgPT4gdHlwZSA9PT0gY29uZmlnLnR5cGUgJiYgdHlwZSAhPT0gaXRlbS5tYXJrLnR5cGUpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS50byA+IHRleHRTdGFydCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZWRNYXJrcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0ZXh0RW5kIDwgcmFuZ2UudG8pIHtcclxuICAgICAgICAgICAgICAgICAgICB0ci5kZWxldGUodGV4dEVuZCwgcmFuZ2UudG8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRleHRTdGFydCA+IHJhbmdlLmZyb20pIHtcclxuICAgICAgICAgICAgICAgICAgICB0ci5kZWxldGUocmFuZ2UuZnJvbSArIHN0YXJ0U3BhY2VzLCB0ZXh0U3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbWFya0VuZCA9IHJhbmdlLmZyb20gKyBzdGFydFNwYWNlcyArIGNhcHR1cmVHcm91cC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB0ci5hZGRNYXJrKHJhbmdlLmZyb20gKyBzdGFydFNwYWNlcywgbWFya0VuZCwgY29uZmlnLnR5cGUuY3JlYXRlKGF0dHJpYnV0ZXMgfHwge30pKTtcclxuICAgICAgICAgICAgICAgIHRyLnJlbW92ZVN0b3JlZE1hcmsoY29uZmlnLnR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG59XG5cbi8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzY5Njk0ODZcclxuZnVuY3Rpb24gZXNjYXBlRm9yUmVnRXgoc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1stL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcclxufVxuXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XHJcbn1cblxuLyoqXHJcbiAqIEJ1aWxkIGFuIHBhc3RlIHJ1bGUgdGhhdCBhZGRzIGEgbm9kZSB3aGVuIHRoZVxyXG4gKiBtYXRjaGVkIHRleHQgaXMgcGFzdGVkIGludG8gaXQuXHJcbiAqL1xyXG5mdW5jdGlvbiBub2RlUGFzdGVSdWxlKGNvbmZpZykge1xyXG4gICAgcmV0dXJuIG5ldyBQYXN0ZVJ1bGUoe1xyXG4gICAgICAgIGZpbmQ6IGNvbmZpZy5maW5kLFxyXG4gICAgICAgIGhhbmRsZXIoeyBtYXRjaCwgY2hhaW4sIHJhbmdlLCBwYXN0ZUV2ZW50LCB9KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBjYWxsT3JSZXR1cm4oY29uZmlnLmdldEF0dHJpYnV0ZXMsIHVuZGVmaW5lZCwgbWF0Y2gsIHBhc3RlRXZlbnQpO1xyXG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlcyA9PT0gZmFsc2UgfHwgYXR0cmlidXRlcyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGNoLmlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICBjaGFpbigpLmRlbGV0ZVJhbmdlKHJhbmdlKS5pbnNlcnRDb250ZW50QXQocmFuZ2UuZnJvbSwge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGNvbmZpZy50eXBlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IGF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICB9KTtcclxufVxuXG4vKipcclxuICogQnVpbGQgYW4gcGFzdGUgcnVsZSB0aGF0IHJlcGxhY2VzIHRleHQgd2hlbiB0aGVcclxuICogbWF0Y2hlZCB0ZXh0IGlzIHBhc3RlZCBpbnRvIGl0LlxyXG4gKi9cclxuZnVuY3Rpb24gdGV4dFBhc3RlUnVsZShjb25maWcpIHtcclxuICAgIHJldHVybiBuZXcgUGFzdGVSdWxlKHtcclxuICAgICAgICBmaW5kOiBjb25maWcuZmluZCxcclxuICAgICAgICBoYW5kbGVyOiAoeyBzdGF0ZSwgcmFuZ2UsIG1hdGNoIH0pID0+IHtcclxuICAgICAgICAgICAgbGV0IGluc2VydCA9IGNvbmZpZy5yZXBsYWNlO1xyXG4gICAgICAgICAgICBsZXQgc3RhcnQgPSByYW5nZS5mcm9tO1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSByYW5nZS50bztcclxuICAgICAgICAgICAgaWYgKG1hdGNoWzFdKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBtYXRjaFswXS5sYXN0SW5kZXhPZihtYXRjaFsxXSk7XHJcbiAgICAgICAgICAgICAgICBpbnNlcnQgKz0gbWF0Y2hbMF0uc2xpY2Uob2Zmc2V0ICsgbWF0Y2hbMV0ubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0ICs9IG9mZnNldDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1dE9mZiA9IHN0YXJ0IC0gZW5kO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1dE9mZiA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnNlcnQgPSBtYXRjaFswXS5zbGljZShvZmZzZXQgLSBjdXRPZmYsIG9mZnNldCkgKyBpbnNlcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBlbmQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3RhdGUudHIuaW5zZXJ0VGV4dChpbnNlcnQsIHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgIH0sXHJcbiAgICB9KTtcclxufVxuXG5jbGFzcyBUcmFja2VyIHtcclxuICAgIGNvbnN0cnVjdG9yKHRyYW5zYWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0ZXAgPSB0aGlzLnRyYW5zYWN0aW9uLnN0ZXBzLmxlbmd0aDtcclxuICAgIH1cclxuICAgIG1hcChwb3NpdGlvbikge1xyXG4gICAgICAgIGxldCBkZWxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgbWFwcGVkUG9zaXRpb24gPSB0aGlzLnRyYW5zYWN0aW9uLnN0ZXBzXHJcbiAgICAgICAgICAgIC5zbGljZSh0aGlzLmN1cnJlbnRTdGVwKVxyXG4gICAgICAgICAgICAucmVkdWNlKChuZXdQb3NpdGlvbiwgc3RlcCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtYXBSZXN1bHQgPSBzdGVwLmdldE1hcCgpLm1hcFJlc3VsdChuZXdQb3NpdGlvbik7XHJcbiAgICAgICAgICAgIGlmIChtYXBSZXN1bHQuZGVsZXRlZCkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG1hcFJlc3VsdC5wb3M7XHJcbiAgICAgICAgfSwgcG9zaXRpb24pO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBtYXBwZWRQb3NpdGlvbixcclxuICAgICAgICAgICAgZGVsZXRlZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IENvbW1hbmRNYW5hZ2VyLCBFZGl0b3IsIEV4dGVuc2lvbiwgSW5wdXRSdWxlLCBNYXJrLCBOb2RlLCBOb2RlVmlldywgUGFzdGVSdWxlLCBUcmFja2VyLCBjYWxsT3JSZXR1cm4sIGNvbWJpbmVUcmFuc2FjdGlvblN0ZXBzLCBjcmVhdGVDaGFpbmFibGVTdGF0ZSwgY3JlYXRlRG9jdW1lbnQsIGNyZWF0ZU5vZGVGcm9tQ29udGVudCwgY3JlYXRlU3R5bGVUYWcsIGRlZmF1bHRCbG9ja0F0LCBkZWxldGVQcm9wcywgZWxlbWVudEZyb21TdHJpbmcsIGVzY2FwZUZvclJlZ0V4LCBleHRlbnNpb25zLCBmaW5kQ2hpbGRyZW4sIGZpbmRDaGlsZHJlbkluUmFuZ2UsIGZpbmREdXBsaWNhdGVzLCBmaW5kUGFyZW50Tm9kZSwgZmluZFBhcmVudE5vZGVDbG9zZXN0VG9Qb3MsIGZyb21TdHJpbmcsIGdlbmVyYXRlSFRNTCwgZ2VuZXJhdGVKU09OLCBnZW5lcmF0ZVRleHQsIGdldEF0dHJpYnV0ZXMsIGdldEF0dHJpYnV0ZXNGcm9tRXh0ZW5zaW9ucywgZ2V0Q2hhbmdlZFJhbmdlcywgZ2V0RGVidWdKU09OLCBnZXRFeHRlbnNpb25GaWVsZCwgZ2V0SFRNTEZyb21GcmFnbWVudCwgZ2V0TWFya0F0dHJpYnV0ZXMsIGdldE1hcmtSYW5nZSwgZ2V0TWFya1R5cGUsIGdldE1hcmtzQmV0d2VlbiwgZ2V0Tm9kZUF0UG9zaXRpb24sIGdldE5vZGVBdHRyaWJ1dGVzLCBnZXROb2RlVHlwZSwgZ2V0UmVuZGVyZWRBdHRyaWJ1dGVzLCBnZXRTY2hlbWEsIGdldFNjaGVtYUJ5UmVzb2x2ZWRFeHRlbnNpb25zLCBnZXRTY2hlbWFUeXBlQnlOYW1lLCBnZXRTY2hlbWFUeXBlTmFtZUJ5TmFtZSwgZ2V0U3BsaXR0ZWRBdHRyaWJ1dGVzLCBnZXRUZXh0LCBnZXRUZXh0QmV0d2VlbiwgZ2V0VGV4dENvbnRlbnRGcm9tTm9kZXMsIGdldFRleHRTZXJpYWxpemVyc0Zyb21TY2hlbWEsIGluamVjdEV4dGVuc2lvbkF0dHJpYnV0ZXNUb1BhcnNlUnVsZSwgaW5wdXRSdWxlc1BsdWdpbiwgaXNBY3RpdmUsIGlzQXRFbmRPZk5vZGUsIGlzQXRTdGFydE9mTm9kZSwgaXNFbXB0eU9iamVjdCwgaXNFeHRlbnNpb25SdWxlc0VuYWJsZWQsIGlzRnVuY3Rpb24sIGlzTGlzdCwgaXNNYWNPUywgaXNNYXJrQWN0aXZlLCBpc05vZGVBY3RpdmUsIGlzTm9kZUVtcHR5LCBpc05vZGVTZWxlY3Rpb24sIGlzTnVtYmVyLCBpc1BsYWluT2JqZWN0LCBpc1JlZ0V4cCwgaXNTdHJpbmcsIGlzVGV4dFNlbGVjdGlvbiwgaXNpT1MsIG1hcmtJbnB1dFJ1bGUsIG1hcmtQYXN0ZVJ1bGUsIG1lcmdlQXR0cmlidXRlcywgbWVyZ2VEZWVwLCBtaW5NYXgsIG5vZGVJbnB1dFJ1bGUsIG5vZGVQYXN0ZVJ1bGUsIG9iamVjdEluY2x1ZGVzLCBwYXN0ZVJ1bGVzUGx1Z2luLCBwb3NUb0RPTVJlY3QsIHJlbW92ZUR1cGxpY2F0ZXMsIHJlc29sdmVGb2N1c1Bvc2l0aW9uLCBzZWxlY3Rpb25Ub0luc2VydGlvbkVuZCwgc3BsaXRFeHRlbnNpb25zLCB0ZXh0SW5wdXRSdWxlLCB0ZXh0UGFzdGVSdWxlLCB0ZXh0YmxvY2tUeXBlSW5wdXRSdWxlLCB3cmFwcGluZ0lucHV0UnVsZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLCJpbXBvcnQgeyBFeHRlbnNpb24gfSBmcm9tICdAdGlwdGFwL2NvcmUnO1xuaW1wb3J0IHsgUGx1Z2luLCBQbHVnaW5LZXkgfSBmcm9tICdAdGlwdGFwL3BtL3N0YXRlJztcblxuY29uc3QgQ2hhcmFjdGVyQ291bnQgPSBFeHRlbnNpb24uY3JlYXRlKHtcclxuICAgIG5hbWU6ICdjaGFyYWN0ZXJDb3VudCcsXHJcbiAgICBhZGRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGxpbWl0OiBudWxsLFxyXG4gICAgICAgICAgICBtb2RlOiAndGV4dFNpemUnLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgYWRkU3RvcmFnZSgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjaGFyYWN0ZXJzOiAoKSA9PiAwLFxyXG4gICAgICAgICAgICB3b3JkczogKCkgPT4gMCxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIG9uQmVmb3JlQ3JlYXRlKCkge1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZS5jaGFyYWN0ZXJzID0gb3B0aW9ucyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm5vZGUpIHx8IHRoaXMuZWRpdG9yLnN0YXRlLmRvYztcclxuICAgICAgICAgICAgY29uc3QgbW9kZSA9IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubW9kZSkgfHwgdGhpcy5vcHRpb25zLm1vZGU7XHJcbiAgICAgICAgICAgIGlmIChtb2RlID09PSAndGV4dFNpemUnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gbm9kZS50ZXh0QmV0d2VlbigwLCBub2RlLmNvbnRlbnQuc2l6ZSwgdW5kZWZpbmVkLCAnICcpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBub2RlLm5vZGVTaXplO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlLndvcmRzID0gb3B0aW9ucyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm5vZGUpIHx8IHRoaXMuZWRpdG9yLnN0YXRlLmRvYztcclxuICAgICAgICAgICAgY29uc3QgdGV4dCA9IG5vZGUudGV4dEJldHdlZW4oMCwgbm9kZS5jb250ZW50LnNpemUsICcgJywgJyAnKTtcclxuICAgICAgICAgICAgY29uc3Qgd29yZHMgPSB0ZXh0LnNwbGl0KCcgJykuZmlsdGVyKHdvcmQgPT4gd29yZCAhPT0gJycpO1xyXG4gICAgICAgICAgICByZXR1cm4gd29yZHMubGVuZ3RoO1xyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgYWRkUHJvc2VNaXJyb3JQbHVnaW5zKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIG5ldyBQbHVnaW4oe1xyXG4gICAgICAgICAgICAgICAga2V5OiBuZXcgUGx1Z2luS2V5KCdjaGFyYWN0ZXJDb3VudCcpLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyVHJhbnNhY3Rpb246ICh0cmFuc2FjdGlvbiwgc3RhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW1pdCA9IHRoaXMub3B0aW9ucy5saW1pdDtcclxuICAgICAgICAgICAgICAgICAgICAvLyBOb3RoaW5nIGhhcyBjaGFuZ2VkIG9yIG5vIGxpbWl0IGlzIGRlZmluZWQuIElnbm9yZSBpdC5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLmRvY0NoYW5nZWQgfHwgbGltaXQgPT09IDAgfHwgbGltaXQgPT09IG51bGwgfHwgbGltaXQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2xkU2l6ZSA9IHRoaXMuc3RvcmFnZS5jaGFyYWN0ZXJzKHsgbm9kZTogc3RhdGUuZG9jIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NpemUgPSB0aGlzLnN0b3JhZ2UuY2hhcmFjdGVycyh7IG5vZGU6IHRyYW5zYWN0aW9uLmRvYyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBFdmVyeXRoaW5nIGlzIGluIHRoZSBsaW1pdC4gR29vZC5cclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3U2l6ZSA8PSBsaW1pdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxpbWl0IGhhcyBhbHJlYWR5IGJlZW4gZXhjZWVkZWQgYnV0IHdpbGwgYmUgcmVkdWNlZC5cclxuICAgICAgICAgICAgICAgICAgICBpZiAob2xkU2l6ZSA+IGxpbWl0ICYmIG5ld1NpemUgPiBsaW1pdCAmJiBuZXdTaXplIDw9IG9sZFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsaW1pdCBoYXMgYWxyZWFkeSBiZWVuIGV4Y2VlZGVkIGFuZCB3aWxsIGJlIGluY3JlYXNlZCBmdXJ0aGVyLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbGRTaXplID4gbGltaXQgJiYgbmV3U2l6ZSA+IGxpbWl0ICYmIG5ld1NpemUgPiBvbGRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNQYXN0ZSA9IHRyYW5zYWN0aW9uLmdldE1ldGEoJ3Bhc3RlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQmxvY2sgYWxsIGV4Y2VlZGluZyB0cmFuc2FjdGlvbnMgdGhhdCB3ZXJlIG5vdCBwYXN0ZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1Bhc3RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIHBhc3RlZCBjb250ZW50LCB3ZSB0cnkgdG8gcmVtb3ZlIHRoZSBleGNlZWRpbmcgY29udGVudC5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSB0cmFuc2FjdGlvbi5zZWxlY3Rpb24uJGhlYWQucG9zO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG92ZXIgPSBuZXdTaXplIC0gbGltaXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJvbSA9IHBvcyAtIG92ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG8gPSBwb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSXTigJlzIHByb2JhYmx5IGEgYmFkIGlkZWEgdG8gbXV0YXRlIHRyYW5zYWN0aW9ucyB3aXRoaW4gYGZpbHRlclRyYW5zYWN0aW9uYFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBmb3Igbm93IHRoaXMgaXMgd29ya2luZyBmaW5lLlxyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLmRlbGV0ZVJhbmdlKGZyb20sIHRvKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJbiBzb21lIHNpdHVhdGlvbnMsIHRoZSBsaW1pdCB3aWxsIGNvbnRpbnVlIHRvIGJlIGV4Y2VlZGVkIGFmdGVyIHRyaW1taW5nLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaGFwcGVucyBlLmcuIHdoZW4gdHJ1bmNhdGluZyB3aXRoaW4gYSBjb21wbGV4IG5vZGUgKGUuZy4gdGFibGUpXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIFByb3NlTWlycm9yIGhhcyB0byBjbG9zZSB0aGlzIG5vZGUgYWdhaW4uXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgY2FzZSwgd2UgcHJldmVudCB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGVseS5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkU2l6ZSA9IHRoaXMuc3RvcmFnZS5jaGFyYWN0ZXJzKHsgbm9kZTogdHJhbnNhY3Rpb24uZG9jIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cGRhdGVkU2l6ZSA+IGxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICBdO1xyXG4gICAgfSxcclxufSk7XG5cbmV4cG9ydCB7IENoYXJhY3RlckNvdW50LCBDaGFyYWN0ZXJDb3VudCBhcyBkZWZhdWx0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsImltcG9ydCB7IE5vZGUsIG1lcmdlQXR0cmlidXRlcywgbm9kZUlucHV0UnVsZSB9IGZyb20gJ0B0aXB0YXAvY29yZSc7XG5cbmNvbnN0IGlucHV0UmVnZXggPSAvKD86XnxcXHMpKCFcXFsoLit8Oj8pXVxcKChcXFMrKSg/Oig/OlxccyspW1wiJ10oXFxTKylbXCInXSk/XFwpKSQvO1xyXG5jb25zdCBJbWFnZSA9IE5vZGUuY3JlYXRlKHtcclxuICAgIG5hbWU6ICdpbWFnZScsXHJcbiAgICBhZGRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlubGluZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGFsbG93QmFzZTY0OiBmYWxzZSxcclxuICAgICAgICAgICAgSFRNTEF0dHJpYnV0ZXM6IHt9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgaW5saW5lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaW5saW5lO1xyXG4gICAgfSxcclxuICAgIGdyb3VwKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaW5saW5lID8gJ2lubGluZScgOiAnYmxvY2snO1xyXG4gICAgfSxcclxuICAgIGRyYWdnYWJsZTogdHJ1ZSxcclxuICAgIGFkZEF0dHJpYnV0ZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc3JjOiB7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBudWxsLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhbHQ6IHtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBudWxsLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgcGFyc2VIVE1MKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRhZzogdGhpcy5vcHRpb25zLmFsbG93QmFzZTY0XHJcbiAgICAgICAgICAgICAgICAgICAgPyAnaW1nW3NyY10nXHJcbiAgICAgICAgICAgICAgICAgICAgOiAnaW1nW3NyY106bm90KFtzcmNePVwiZGF0YTpcIl0pJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgfSxcclxuICAgIHJlbmRlckhUTUwoeyBIVE1MQXR0cmlidXRlcyB9KSB7XHJcbiAgICAgICAgcmV0dXJuIFsnaW1nJywgbWVyZ2VBdHRyaWJ1dGVzKHRoaXMub3B0aW9ucy5IVE1MQXR0cmlidXRlcywgSFRNTEF0dHJpYnV0ZXMpXTtcclxuICAgIH0sXHJcbiAgICBhZGRDb21tYW5kcygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBzZXRJbWFnZTogb3B0aW9ucyA9PiAoeyBjb21tYW5kcyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZHMuaW5zZXJ0Q29udGVudCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiBvcHRpb25zLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBhZGRJbnB1dFJ1bGVzKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIG5vZGVJbnB1dFJ1bGUoe1xyXG4gICAgICAgICAgICAgICAgZmluZDogaW5wdXRSZWdleCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgICAgICAgICAgIGdldEF0dHJpYnV0ZXM6IG1hdGNoID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBbLCAsIGFsdCwgc3JjLCB0aXRsZV0gPSBtYXRjaDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBzcmMsIGFsdCwgdGl0bGUgfTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG59KTtcblxuZXhwb3J0IHsgSW1hZ2UsIEltYWdlIGFzIGRlZmF1bHQsIGlucHV0UmVnZXggfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwiLy8gVEhJUyBGSUxFIElTIEFVVE9NQVRJQ0FMTFkgR0VORVJBVEVEIERPIE5PVCBFRElUIERJUkVDVExZXG4vLyBTZWUgdXBkYXRlLXRsZHMuanMgZm9yIGVuY29kaW5nL2RlY29kaW5nIGZvcm1hdFxuLy8gaHR0cHM6Ly9kYXRhLmlhbmEub3JnL1RMRC90bGRzLWFscGhhLWJ5LWRvbWFpbi50eHRcbmNvbnN0IGVuY29kZWRUbGRzID0gJ2FhYTFycDNiYXJ0aDRiMG90dDN2aWU0YzFsZTJvZ2FkbzV1ZGhhYmk3YzBhZGVteTVjZW50dXJlNm91bnRhbnQwczlvMXRvcjRkMHMxdWx0NGUwZzFybzJ0bmE0ZjBsMXJpY2E1ZzBha2hhbjVlbmN5NWkwZzFyYnVzM2ZvcmNlNXRlbDVrZG4zbDBmYXJvbWVvN2liYWJhNHBheTRsZmluYW56NnN0YXRlNXkyc2FjZTN0b201bTBhem9uNGVyaWNhbmV4cHJlc3M3ZmFtaWx5MTF4MmZhbTNpY2Ezc3RlcmRhbThuYWx5dGljczdkcm9pZDVxdWFuNHoybzBsMnBhcnRtZW50czhwMGxlNHEwdWFyZWxsZThyMGFiMW1jbzRjaGkzbXkycGEydDBlM3MwZGEyaWEyc29jaWF0ZXM5dDBobGV0YTV0b3JuZXk3dTBjdGlvbjVkaTBibGUzbzNzcG9zdDV0aG9yM28wczR2aWFuY2E2dzBzMngwYTJ6MHVyZTViYTBieTJpZHUzbmFtZXgzbmFyZXB1YmxpYzExZDFrMnIwY2Vsb25hNWxheWNhcmQ0czVlZm9vdDVnYWluczZzZWJhbGw1a2V0YmFsbDh1aGF1czV5ZXJuNWIwYzF0MXZhM2NnMW4yZDFlMGF0czJ1dHk0ZXIybnRsZXk1cmxpbjRzdDBidXk1dDJmMWcxaDBhcnRpNWkwYmxlM2Qxa2UybmcwbzNvMXoyajFsYWNrMGZyaWRheTlvY2tidXN0ZXI4ZzFvbWJlcmc3dWUzbTBzMXcybjBwcGFyaWJhczlvMGF0czNlaHJpbmdlcjhmYTJtMW5kMm8wazBpbmc1c2NoMnRpazJvbjR0MXV0aXF1ZTZ4MnIwYWRlc2NvNmlkZ2VzdG9uZTlvYWR3YXk1a2VyM3RoZXI1dXNzZWxzN3MxdDF1aWxkMGVyczZzaW5lc3M2eTF6ejN2MXcxeTF6MGgzY2EwYjFmZTJsMGwxdmlua2xlaW45bTBlcmEzcDJub24zcGV0b3duNWl0YWwwb25lOHIwYXZhbjRkczJlMGVyMHM0czJzYTFlMWgxaW5vNHQwZXJpbmc1aG9saWM3YmExbjFyZTJzMmMxZDFlbnRlcjRvMXJuM2YwYTFkMmcxaDBhbmVsMm5lbDRyaXR5NHNlMnQyZWFwM2ludGFpNXJpc3RtYXM2b21lNHVyY2g1aTBwcmlhbmk2cmNsZTRzY28zdGFkZWw0aTBjMnkwZWF0czdrMWwwYWltczRlYW5pbmc2aWNrMm5pYzFxdWU2b3RoaW5nNXVkM3ViMG1lZDZtMW4xbzBhY2gzZGVzM2ZmZWU0bGxlZ2U0b2duZTVtMGNhc3Q0bWJhbms0dW5pdHk2cGFueTJyZTN1dGVyNXNlYzRuZG9zM3N0cnVjdGlvbjh1bHRpbmc3dGFjdDNyYWN0b3JzOW9raW5nMGNoYW5uZWwxMWwxcDJyc2ljYTV1bnRyeTRwb24wczRyc2VzNnBhMnIwZWRpdDBjYXJkNHVuaW9uOWlja2V0NW93bjNzMXVpc2UwczZ1MGlzaW5lbGxhOXYxdzF4MXkwbXJ1M291M3oyZGFidXIzZDFuY2UzdGExZTFpbmczc3VuNHkyY2xrM2RzMmUwYWwwZXIyczNncmVlNGxpdmVyeTVsMW9pdHRlNXRhM21vY3JhdDZudGFsMmlzdDVzaTBnbjR2MmhsMmlhbW9uZHM2ZXQyZ2l0YWw1cmVjdDBvcnk3c2NvdW50M3ZlcjVoMnkyajFrMW0xbnAybzBjczF0b3I0ZzFtYWluczV0MXdubG9hZDdyaXZlNHR2MnViYWkzbmxvcDRwb250NHJiYW41dmFnMnIyejJlYXJ0aDN0MmMwbzJkZWthM3UwY2F0aW9uOGUxZzFtYWlsM2VyY2s1bmVyZ3k0Z2luZWVyMGluZzl0ZXJwcmlzZXMxMHBzb240cXVpcG1lbnQ4cjBpY3Nzb242bmkzczBxMXRhdGU1dDBpc2FsYXQ3dTByb3Zpc2lvbjhzMnZlbnRzNXhjaGFuZ2U2cGVydDNvc2VkNHJlc3M1dHJhc3BhY2UxMGZhZ2UyaWwxcndpbmRzNnRoM21pbHk0bjBzMnJtMGVyczVzaGlvbjR0M2VkZXgzZWRiYWNrNnJyYXJpM2VybzZpMGF0MmRlbGl0eTVvMmxtMm5hbDFuY2UxaWFsN3JlMHN0b25lNm1kYWxlNnNoMGluZzV0MG5lc3M2ajFrMWxpY2tyM2dodHM0cjJvcmlzdDR3ZXJzNXkybTFvMG8wZDBuZXR3b3JrOHRiYWxsNnJkMWV4MnNhbGU0dW0zdW5kYXRpb244eDJyMGVlMXNlbml1czdsMW9nYW5zNG50ZG9vcjRpZXI3dHIydWppdHN1NW4wZDJybml0dXJlN3Rib2w1eWkzZ2EwbDBsZXJ5M28xdXA0bWUwczNwMXJkZW40eTJiMGl6M2QwbjJlMGExbnQwaW5nNW9yZ2U1ZjFnMGVlM2gxaTBmdDBzM3ZlczJpbmc1bDBhc3MzZTFvYmFsMm80bTBhaWwzYmgybzF4Mm4xb2RhZGR5NWxkMHBvaW50NmYybzBkeWVhcjVnMGxlNHAxdDF2MnAxcTFyMGFpbmdlcjVwaGljczV0aXM0ZWVuM2lwZTNvY2VyeTR1cDRzMXQxdTBhcmRpYW42Y2NpM2dlMmlkZTJ0YXJzNXJ1M3cxeTJoYWlyMm1idXJnNW5nb3V0NXVzM2JvMmRmYzBiYW5rN2VhbHRoMGNhcmU4bHAxc2lua2k2cmUxbWVzNWd0djNpcGhvcDRzYW1pdHN1N3RhY2hpNXYyazB0Mm0xbjFvY2tleTRsZGluZ3M1aWRheTVtZWRlcG90NWdvb2RzNXMwZW5zZTduZGEzcnNlM3NwaXRhbDV0MGluZzV0MGVsZXMyczNtYWlsNXVzZTN3MnIxc2JjM3QxdTBnaGVzNXlhdHQzdW5kYWk3aWJtMmNiYzJlMXUyZDFlMGVlM2ZtMmthbm80bDFtMGFtYXQ0ZGIybW8wYmlsaWVuOW4wYzFkdXN0cmllczhmaW5pdGk1bzJnMWsxc3RpdHV0ZTZ1cmFuY2U0ZTR0MGVybmF0aW9uYWwxMHVpdDR2ZXN0bWVudHMxMG8xcGlyYW5nYTdxMXIwaXNoNHMwbWFpbGk1dDBhbmJ1bDd0MGF1MnYzamFndWFyNHZhM2NiMmUwZXAydHp0M3dlbHJ5NmlvMmxsMm0wcDJuajJvMGJzMXVyZzR0MXkycDBtb3JnYW42cnMzdWVnb3M0bmlwZXI3a2F1ZmVuNWRkaTNlMHJyeWhvdGVsczZsb2dpc3RpY3M5cHJvcGVydGllczE0ZmgyZzFoMWkwYTFkczJtMW5kZXIybGU0dGNoZW41d2kzbTFuMW9lbG4zbWF0c3U1c2hlcjVwMG1nMm4ycjBkMWVkM3Vva2dyb3VwOHcxeTBvdG80ejJsYTBjYWl4YTVtYm9yZ2hpbmk4ZXIzbmNhc3RlcjVpYTNkMHJvdmVyNnhlc3M1c2FsbGU1dDBpbm8zcm9iZTV3MHllcjViMWMxZHMyZWFzZTNjbGVyYzVmcmFrNGdhbDJvMnh1czRnYnQzaTBkbDJmZTBpbnN1cmFuY2U5c3R5bGU3Z2h0aW5nNmtlMmxseTNtaXRlZDRvMm5jb2xuNGRlMmsycHN5M3ZlMWluZzVrMWxjMXAyb2FuMHMzY2tlcjN1czNsMW5kb240dHRlMW8zdmUzcGwwZmluYW5jaWFsMTFyMXMxdDBkMGEzdTBuZGJlY2s2eGUxdXJ5NXYxeTJtYTBjeXMzZHJpZDRpZjFzb240a2V1cDRuMGFnZW1lbnQ3Z28zcDFya2V0MGluZzNzNHJpb3R0NXNoYWxsczdzZXJhdGk2dHRlbDViYTJjMGtpbnNleTdkMWUwZDBpYTNldDJsYm91cm5lN21lMW9yaWFsNm4wdTJyY2ttc2Q3ZzFoMWlhbWkzY3Jvc29mdDdsMW5pMXQydDBzdWJpc2hpOWsxbDBiMXMybTBhMm4xbzBiaTBsZTRkYTJlMWkxbTFuYXNoM2V5MnN0ZXI1cm1vbjN0Z2FnZTZzY293NHRvMHJjeWNsZXM5djBpZTRwMXExcjFzMGQydDBuMXIydTBzZXVtM2ljM3R1YWw1djF3MXgxeTF6Mm5hMGIxZ295YTRtZTJ0dXJhNHZ5M2JhMmMxZTBjMXQwYmFuazRmbGl4NHdvcms1dXN0YXI1dzBzMnh0MGRpcmVjdDd1czRmMGwyZzBvMmhrMmkwY28ya2Uxb24zbmphM3NzYW4xeTVsMW8wa2lhM3J0aHdlc3Rlcm5tdXR1YWwxNG9uNHcwcnV6M3R2NHAxcjBhMXcydHQydTF5YzJ6Mm9iaTFzZXJ2ZXI3ZmZpY2U1a2luYXdhNmxheWFuMGdyb3VwOWRuYXZ5NWxvM20wZWdhNG5lMWcxbDBpbmU1b28ycGVuM3JhY2xlM25nZTRnMGFuaWM1aWdpbnM2c2FrYTR0c3VrYTR0MnZoM3BhMGdlMm5hc29uaWM3cmlzMnMxdG5lcnM0czF5M3NzYWdlbnM3eTJjY3czZTB0MmYwaXplcjVnMWgwYXJtYWN5NmQxaWxpcHM1b25lMnRvMGdyYXBoeTZzNHlzaW81aWNzMXRldDJ1cmVzNmQxbjBnMWsyb25lZXI1enphNGsxbDBhY2UyeTBzdGF0aW9uOXVtYmluZzVzM20xbjBjMm9obDJrZXIzbGl0aWU1cm4yc3QzcjBhbWVyaWNhNnhpM2VzczNpbWUzbzBkMHVjdGlvbnM4ZjFncmVzc2l2ZThtbzJwZXJ0aWVzM3k1dGVjdGlvbjh1MGRlbnRpYWw5czF0MXViMncwYzJ5MnFhMXBvbjN1ZWJlYzNzdDVyYWNpbmc0ZGlvNGUwYWQxbGVzdGF0ZTZ0b3IyeTRjaXBlczVkMHN0b25lNXVtYnJlbGxhOWhhYjNpc2UwbjN0MmxpYW5jZTZuMHQwYWxzNXBhaXIzb3J0M3VibGljYW44c3QwYXVyYW50OHZpZXcwczV4cm90aDZpY2gwYXJkbGk2b2gzbDFvMXAybzBjaGVyM2tzM2RlbzNnZXJzNG9tM3MwdnAzdTBnYnkzaHIybjJ3MGUyeXVreXU2c2EwYXJsYW5kNmZlMHR5NGt1cmE0bGUxb24zbXNjbHViNHVuZzVuZHZpazBjb3JvbWFudDEyb2ZpNHAxcmwyczF2ZTJ4bzNiMGkxczJjMGExYjFoYWVmZmxlcjdtaWR0NG9sYXJzaGlwczhvbDN1bGUzd2FyejVpZW5jZTVvdDNkMWUwYXJjaDN0MmN1cmUxaXR5NmVrMmxlY3Q0bmVyM3J2aWNlczZ2ZW4zdzF4MHkzZnIyZzFoMGFuZ3JpbGE2cnAydzJlbGwzaWExa3NoYTVvZXMycDBwaW5nNXVqaTN3MHRpbWU3aTBsazJuYTFnbGVzNXRlM2oxazBpMG4yeTBwZTRsMGluZzRtMGFydDNpbGU0bjBjZjNvMGNjZXIzaWFsNGZ0YmFuazR3YXJlNmh1MmxhcjJ1dGlvbnM3bmcxeTJ5MnBhMGNlM29ydDJ0M3IwbDJzMXQwYWRhMnBsZXM0cjF0ZWJhbms0ZmFybTdjMGdyb3VwNm9ja2hvbG02cmFnZTNlM3JlYW00dWRpbzJ5M3lsZTR1MGNrczNwcGxpZXMzeTJvcnQ1cmYxZ2VyeTV6dWtpNXYxd2F0Y2g0aXNzNHgxeTBkbmV5NHN0ZW1zNnoydGFiMWlwZWk0bGsyb2JhbzRyZ2V0NHRhbW90b3JzNnIydG9vNHgwaTNjMGkyZDBrMmVhbTJjaDBub2xvZ3k4bDFtYXNlazVubmlzNHZhM2YxZzFoMGQxZWF0ZXIycmU2aWFhMmNrZXRzNWVuZGE0ZmZhbnk1cHMycmVzMm9sNGowbWF4eDR4MmswbWF4eDVsMW0wYWxsNG4xbzBkYXkza3lvM29sczNwMXJheTNzaGliYTV0YWwzdXJzM3duMnlvdGEzczNyMGFkZTFpbmc0aW5pbmc1dmVsMGNoYW5uZWw3ZXJzMGluc3VyYW5jZTE2dXN0M3YydDF1YmUyaTFuZXMzc2h1NHYwczJ3MXoydWExYmFuazNzMmcxazFuaWNvbTN2ZXJzaXR5OG8yb2wycHMyczF5MXoydmEwY2F0aW9uczduYTFndWFyZDdjMWUwZ2FzM250dXJlczZyaXNpZ241bcO2Z2Vuc2JlcmF0ZXIydW5nMTRzaWNoZXJ1bmcxMHQyZzFpMGFqZXM0ZGVvM2cxa2luZzRsbGFzNG4xcDFyZ2luNHNhMWlvbjR2YTFvM2xhYW5kZXJlbjluMW9ka2EzbGtzd2FnZW43dm8zdGUxaW5nM28yeWFnZTV1MGVsb3M2d2FsZXMybWFydDR0ZXI0bmcwZ291NXRjaDBlczZlYXRoZXIwY2hhbm5lbDEyYmNhbTNlcjJzaXRlNWQwZGluZzVpYm8ycjNmMWhvc3dobzZpZW4ya2kybGxpYW1oaWxsOW4wZG93czRlMW5lcnM2bWUyb2x0ZXJza2x1d2VyMTFvZHNpZGU2cmswczJsZDN3MnMxdGMxZjN4Ym94M2Vyb3g0ZmluaXR5NmlodWFuNG4yeHgyeXozeWFjaHRzNGhvbzNtYXh1bjVuZGV4NWUxb2RvYmFzaGk3Z2Eya29oYW1hNnUwdHViZTZ0MXVuM3phMHBwb3M0cmEzZXJvM2lwMm0xb25lM3VlcmljaDZ3Mic7XG4vLyBJbnRlcm5hdGlvbmFsaXplZCBkb21haW4gbmFtZXMgY29udGFpbmluZyBub24tQVNDSUlcbmNvbnN0IGVuY29kZWRVdGxkcyA9ICfOtc67Mc+FMtCx0LMx0LXQuzPQtNC10YLQuDTQtdGOMtC60LDRgtC+0LvQuNC6NtC+0Lwz0LzQutC0MtC+0L0x0YHQutCy0LA20L7QvdC70LDQudC9NdGA0LMz0YDRg9GBMtGEMtGB0LDQudGCM9GA0LEz0YPQutGAM9Kb0LDQtzPVsNWh1bUz15nXqdeo15DXnDXXp9eV150z2KfYqNmI2LjYqNmKNdiq2LXYp9mE2KfYqjbYsdin2YXZg9mINdmE2KfYsdiv2YY02KjYrdix2YrZhjXYrNiy2KfYptixNdiz2LnZiNiv2YrYqTbYudmE2YrYp9mGNdmF2LrYsdioNdmF2KfYsdin2Ko124zYsdin2YY12KjYp9ix2Koy2LLYp9ixNNmK2KrZgzPavtin2LHYqjXYqtmI2YbYszTYs9mI2K/Yp9mGM9ix2YrYqTXYtNio2YPYqTTYudix2KfZgjLYqDLZhdin2YY02YHZhNiz2LfZitmGNtmC2LfYsTPZg9in2KvZiNmE2YrZgzbZiNmFM9mF2LXYsTLZhNmK2LPZitinNdmI2LHZitiq2KfZhtmK2Kc32YLYuTTZh9mF2LHYp9mHNdm+2Kfaqdiz2KrYp9mGN9qA2KfYsdiqNOCkleClieCkrjPgpKjgpYfgpJ8z4KSt4KS+4KSw4KSkMOCkruCljTPgpYvgpKQ14KS44KSC4KSX4KSg4KSoNeCmrOCmvuCmguCmsuCmvjXgpq3gpr7gprDgpqQy4Kew4KakNOCoreCovuCosOCopDTgqq3gqr7gqrDgqqQ04Kyt4Ky+4Kyw4KykNOCuh+CuqOCvjeCupOCuv+Cur+CuvjbgrrLgrpngr43grpXgr4g24K6a4K6/4K6Z4K+N4K6V4K6q4K+N4K6q4K+C4K6w4K+NMTHgsK3gsL7gsLDgsKTgsY014LKt4LK+4LKw4LKkNOC0reC0vuC0sOC0pOC0gjXgtr3gtoLgtprgt4804LiE4Lit4LihM+C5hOC4l+C4ojPguqXgurLguqcz4YOS4YOUMuOBv+OCk+OBqjPjgqLjg57jgr7jg7M044Kv44Op44Km44OJNOOCsOODvOOCsOODqzTjgrPjg6Ay44K544OI44KiM+OCu+ODvOODqzPjg5XjgqHjg4Pjgrfjg6fjg7M244Od44Kk44Oz44OINOS4lueVjDLkuK3kv6Ex5Zu9MeWcizHmlofnvZEz5Lqa6ams6YCKM+S8geS4mjLkvZvlsbEy5L+h5oGvMuWBpeW6tzLlhavljaYy5YWs5Y+4MeebijLlj7Dmub4x54GjMuWVhuWfjjHlupcx5qCHMuWYiemHjDDlpKfphZLlupc15Zyo57q/MuWkp+aLvzLlpKnkuLvmlZkz5aix5LmQMuWutumbuzLlub/kuJwy5b6u5Y2aMuaFiOWWhDLmiJHniLHkvaAz5omL5py6MuaLm+iBmDLmlL/liqEx5bqcMuaWsOWKoOWdoTLpl7sy5pe25bCaMuabuOexjTLmnLrmnoQy5reh6ams6ZShM+a4uOaIjzLmvrPploAy54K555yLMuenu+WKqDLnu4Tnu4fmnLrmnoQ0572R5Z2AMeW6lzHnq5kx57ucMuiBlOmAmjLosLfmrYwy6LSt54mpMumAmuiyqTLpm4blm6Iy6Zu76KiK55uI56eRNOmjnuWIqea1pjPpo5/lk4Ey6aSQ5Y6FMummmeagvOmHjOaLiTPmuK8y64u364S3Mey7tDLsgrzshLEy7ZWc6rWtMic7XG5cbi8qKlxuICogQHRlbXBsYXRlIEFcbiAqIEB0ZW1wbGF0ZSBCXG4gKiBAcGFyYW0ge0F9IHRhcmdldFxuICogQHBhcmFtIHtCfSBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJuIHtBICYgQn1cbiAqL1xuY29uc3QgYXNzaWduID0gKHRhcmdldCwgcHJvcGVydGllcykgPT4ge1xuICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgdGFyZ2V0W2tleV0gPSBwcm9wZXJ0aWVzW2tleV07XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbi8qKlxuICogRmluaXRlIFN0YXRlIE1hY2hpbmUgZ2VuZXJhdGlvbiB1dGlsaXRpZXNcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7eyBbZ3JvdXA6IHN0cmluZ106IFRbXSB9fSBDb2xsZWN0aW9uc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge3sgW2dyb3VwOiBzdHJpbmddOiB0cnVlIH19IEZsYWdzXG4gKi9cblxuLy8gS2V5cyBpbiBzY2FubmVyIENvbGxlY3Rpb25zIGluc3RhbmNlc1xuY29uc3QgbnVtZXJpYyA9ICdudW1lcmljJztcbmNvbnN0IGFzY2lpID0gJ2FzY2lpJztcbmNvbnN0IGFscGhhID0gJ2FscGhhJztcbmNvbnN0IGFzY2lpbnVtZXJpYyA9ICdhc2NpaW51bWVyaWMnO1xuY29uc3QgYWxwaGFudW1lcmljID0gJ2FscGhhbnVtZXJpYyc7XG5jb25zdCBkb21haW4gPSAnZG9tYWluJztcbmNvbnN0IGVtb2ppID0gJ2Vtb2ppJztcbmNvbnN0IHNjaGVtZSA9ICdzY2hlbWUnO1xuY29uc3Qgc2xhc2hzY2hlbWUgPSAnc2xhc2hzY2hlbWUnO1xuY29uc3Qgd2hpdGVzcGFjZSA9ICd3aGl0ZXNwYWNlJztcblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7Q29sbGVjdGlvbnM8VD59IGdyb3VwcyB0byByZWdpc3RlciBpblxuICogQHJldHVybnMge1RbXX0gQ3VycmVudCBsaXN0IG9mIHRva2VucyBpbiB0aGUgZ2l2ZW4gY29sbGVjdGlvblxuICovXG5mdW5jdGlvbiByZWdpc3Rlckdyb3VwKG5hbWUsIGdyb3Vwcykge1xuICBpZiAoIShuYW1lIGluIGdyb3VwcykpIHtcbiAgICBncm91cHNbbmFtZV0gPSBbXTtcbiAgfVxuICByZXR1cm4gZ3JvdXBzW25hbWVdO1xufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge1R9IHQgdG9rZW4gdG8gYWRkXG4gKiBAcGFyYW0ge0NvbGxlY3Rpb25zPFQ+fSBncm91cHNcbiAqIEBwYXJhbSB7RmxhZ3N9IGZsYWdzXG4gKi9cbmZ1bmN0aW9uIGFkZFRvR3JvdXBzKHQsIGZsYWdzLCBncm91cHMpIHtcbiAgaWYgKGZsYWdzW251bWVyaWNdKSB7XG4gICAgZmxhZ3NbYXNjaWludW1lcmljXSA9IHRydWU7XG4gICAgZmxhZ3NbYWxwaGFudW1lcmljXSA9IHRydWU7XG4gIH1cbiAgaWYgKGZsYWdzW2FzY2lpXSkge1xuICAgIGZsYWdzW2FzY2lpbnVtZXJpY10gPSB0cnVlO1xuICAgIGZsYWdzW2FscGhhXSA9IHRydWU7XG4gIH1cbiAgaWYgKGZsYWdzW2FzY2lpbnVtZXJpY10pIHtcbiAgICBmbGFnc1thbHBoYW51bWVyaWNdID0gdHJ1ZTtcbiAgfVxuICBpZiAoZmxhZ3NbYWxwaGFdKSB7XG4gICAgZmxhZ3NbYWxwaGFudW1lcmljXSA9IHRydWU7XG4gIH1cbiAgaWYgKGZsYWdzW2FscGhhbnVtZXJpY10pIHtcbiAgICBmbGFnc1tkb21haW5dID0gdHJ1ZTtcbiAgfVxuICBpZiAoZmxhZ3NbZW1vamldKSB7XG4gICAgZmxhZ3NbZG9tYWluXSA9IHRydWU7XG4gIH1cbiAgZm9yIChjb25zdCBrIGluIGZsYWdzKSB7XG4gICAgY29uc3QgZ3JvdXAgPSByZWdpc3Rlckdyb3VwKGssIGdyb3Vwcyk7XG4gICAgaWYgKGdyb3VwLmluZGV4T2YodCkgPCAwKSB7XG4gICAgICBncm91cC5wdXNoKHQpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge1R9IHQgdG9rZW4gdG8gY2hlY2tcbiAqIEBwYXJhbSB7Q29sbGVjdGlvbnM8VD59IGdyb3Vwc1xuICogQHJldHVybnMge0ZsYWdzfSBncm91cCBmbGFncyB0aGF0IGNvbnRhaW4gdGhpcyB0b2tlblxuICovXG5mdW5jdGlvbiBmbGFnc0ZvclRva2VuKHQsIGdyb3Vwcykge1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgZm9yIChjb25zdCBjIGluIGdyb3Vwcykge1xuICAgIGlmIChncm91cHNbY10uaW5kZXhPZih0KSA+PSAwKSB7XG4gICAgICByZXN1bHRbY10gPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7bnVsbCB8IFQgfSBUcmFuc2l0aW9uXG4gKi9cblxuLyoqXG4gKiBEZWZpbmUgYSBiYXNpYyBzdGF0ZSBtYWNoaW5lIHN0YXRlLiBqIGlzIHRoZSBsaXN0IG9mIGNoYXJhY3RlciB0cmFuc2l0aW9ucyxcbiAqIGpyIGlzIHRoZSBsaXN0IG9mIHJlZ2V4LW1hdGNoIHRyYW5zaXRpb25zLCBqZCBpcyB0aGUgZGVmYXVsdCBzdGF0ZSB0b1xuICogdHJhbnNpdGlvbiB0byB0IGlzIHRoZSBhY2NlcHRpbmcgdG9rZW4gdHlwZSwgaWYgYW55LiBJZiB0aGlzIGlzIHRoZSB0ZXJtaW5hbFxuICogc3RhdGUsIHRoZW4gaXQgZG9lcyBub3QgZW1pdCBhIHRva2VuLlxuICpcbiAqIFRoZSB0ZW1wbGF0ZSB0eXBlIFQgcmVwcmVzZW50cyB0aGUgdHlwZSBvZiB0aGUgdG9rZW4gdGhpcyBzdGF0ZSBhY2NlcHRzLiBUaGlzXG4gKiBzaG91bGQgYmUgYSBzdHJpbmcgKHN1Y2ggYXMgb2YgdGhlIHRva2VuIGV4cG9ydHMgaW4gYHRleHQuanNgKSBvciBhXG4gKiBNdWx0aVRva2VuIHN1YmNsYXNzIChmcm9tIGBtdWx0aS5qc2ApXG4gKlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7VH0gW3Rva2VuXSBUb2tlbiB0aGF0IHRoaXMgc3RhdGUgZW1pdHNcbiAqL1xuZnVuY3Rpb24gU3RhdGUodG9rZW4pIHtcbiAgaWYgKHRva2VuID09PSB2b2lkIDApIHtcbiAgICB0b2tlbiA9IG51bGw7XG4gIH1cbiAgLy8gdGhpcy5uID0gbnVsbDsgLy8gREVCVUc6IFN0YXRlIG5hbWVcbiAgLyoqIEB0eXBlIHt7IFtpbnB1dDogc3RyaW5nXTogU3RhdGU8VD4gfX0gaiAqL1xuICB0aGlzLmogPSB7fTsgLy8gSU1QTEVNRU5UQVRJT04gMVxuICAvLyB0aGlzLmogPSBbXTsgLy8gSU1QTEVNRU5UQVRJT04gMlxuICAvKiogQHR5cGUge1tSZWdFeHAsIFN0YXRlPFQ+XVtdfSBqciAqL1xuICB0aGlzLmpyID0gW107XG4gIC8qKiBAdHlwZSB7P1N0YXRlPFQ+fSBqZCAqL1xuICB0aGlzLmpkID0gbnVsbDtcbiAgLyoqIEB0eXBlIHs/VH0gdCAqL1xuICB0aGlzLnQgPSB0b2tlbjtcbn1cblxuLyoqXG4gKiBTY2FubmVyIHRva2VuIGdyb3Vwc1xuICogQHR5cGUgQ29sbGVjdGlvbnM8c3RyaW5nPlxuICovXG5TdGF0ZS5ncm91cHMgPSB7fTtcblN0YXRlLnByb3RvdHlwZSA9IHtcbiAgYWNjZXB0cygpIHtcbiAgICByZXR1cm4gISF0aGlzLnQ7XG4gIH0sXG4gIC8qKlxuICAgKiBGb2xsb3cgYW4gZXhpc3RpbmcgdHJhbnNpdGlvbiBmcm9tIHRoZSBnaXZlbiBpbnB1dCB0byB0aGUgbmV4dCBzdGF0ZS5cbiAgICogRG9lcyBub3QgbXV0YXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgY2hhcmFjdGVyIG9yIHRva2VuIHR5cGUgdG8gdHJhbnNpdGlvbiBvblxuICAgKiBAcmV0dXJucyB7P1N0YXRlPFQ+fSB0aGUgbmV4dCBzdGF0ZSwgaWYgYW55XG4gICAqL1xuICBnbyhpbnB1dCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcztcbiAgICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5qW2lucHV0XTtcbiAgICBpZiAobmV4dFN0YXRlKSB7XG4gICAgICByZXR1cm4gbmV4dFN0YXRlO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXRlLmpyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZWdleCA9IHN0YXRlLmpyW2ldWzBdO1xuICAgICAgY29uc3QgbmV4dFN0YXRlID0gc3RhdGUuanJbaV1bMV07IC8vIG5vdGU6IG1pZ2h0IGJlIGVtcHR5IHRvIHByZXZlbnQgZGVmYXVsdCBqdW1wXG4gICAgICBpZiAobmV4dFN0YXRlICYmIHJlZ2V4LnRlc3QoaW5wdXQpKSB7XG4gICAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIE5vd2hlcmUgbGVmdCB0byBqdW1wISBSZXR1cm4gZGVmYXVsdCwgaWYgYW55XG4gICAgcmV0dXJuIHN0YXRlLmpkO1xuICB9LFxuICAvKipcbiAgICogV2hldGhlciB0aGUgc3RhdGUgaGFzIGEgdHJhbnNpdGlvbiBmb3IgdGhlIGdpdmVuIGlucHV0LiBTZXQgdGhlIHNlY29uZFxuICAgKiBhcmd1bWVudCB0byB0cnVlIHRvIG9ubHkgbG9vayBmb3IgYW4gZXhhY3QgbWF0Y2ggKGFuZCBub3QgYSBkZWZhdWx0IG9yXG4gICAqIHJlZ3VsYXItZXhwcmVzc2lvbi1iYXNlZCB0cmFuc2l0aW9uKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAgICogQHBhcmFtIHtib29sZWFufSBleGFjdE9ubHlcbiAgICovXG4gIGhhcyhpbnB1dCwgZXhhY3RPbmx5KSB7XG4gICAgaWYgKGV4YWN0T25seSA9PT0gdm9pZCAwKSB7XG4gICAgICBleGFjdE9ubHkgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGV4YWN0T25seSA/IGlucHV0IGluIHRoaXMuaiA6ICEhdGhpcy5nbyhpbnB1dCk7XG4gIH0sXG4gIC8qKlxuICAgKiBTaG9ydCBmb3IgXCJ0cmFuc2l0aW9uIGFsbFwiOyBjcmVhdGUgYSB0cmFuc2l0aW9uIGZyb20gdGhlIGFycmF5IG9mIGl0ZW1zXG4gICAqIGluIHRoZSBnaXZlbiBsaXN0IHRvIHRoZSBzYW1lIGZpbmFsIHJlc3VsdGluZyBzdGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gaW5wdXRzIEdyb3VwIG9mIGlucHV0cyB0byB0cmFuc2l0aW9uIG9uXG4gICAqIEBwYXJhbSB7VHJhbnNpdGlvbjxUPiB8IFN0YXRlPFQ+fSBbbmV4dF0gVHJhbnNpdGlvbiBvcHRpb25zXG4gICAqIEBwYXJhbSB7RmxhZ3N9IFtmbGFnc10gQ29sbGVjdGlvbnMgZmxhZ3MgdG8gYWRkIHRva2VuIHRvXG4gICAqIEBwYXJhbSB7Q29sbGVjdGlvbnM8VD59IFtncm91cHNdIE1hc3RlciBsaXN0IG9mIHRva2VuIGdyb3Vwc1xuICAgKi9cbiAgdGEoaW5wdXRzLCBuZXh0LCBmbGFncywgZ3JvdXBzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMudHQoaW5wdXRzW2ldLCBuZXh0LCBmbGFncywgZ3JvdXBzKTtcbiAgICB9XG4gIH0sXG4gIC8qKlxuICAgKiBTaG9ydCBmb3IgXCJ0YWtlIHJlZ2V4cCB0cmFuc2l0aW9uXCI7IGRlZmluZXMgYSB0cmFuc2l0aW9uIGZvciB0aGlzIHN0YXRlXG4gICAqIHdoZW4gaXQgZW5jb3VudGVycyBhIHRva2VuIHdoaWNoIG1hdGNoZXMgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvblxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwIFJlZ3VsYXIgZXhwcmVzc2lvbiB0cmFuc2l0aW9uIChwb3B1bGF0ZSBmaXJzdClcbiAgICogQHBhcmFtIHtUIHwgU3RhdGU8VD59IFtuZXh0XSBUcmFuc2l0aW9uIG9wdGlvbnNcbiAgICogQHBhcmFtIHtGbGFnc30gW2ZsYWdzXSBDb2xsZWN0aW9ucyBmbGFncyB0byBhZGQgdG9rZW4gdG9cbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uczxUPn0gW2dyb3Vwc10gTWFzdGVyIGxpc3Qgb2YgdG9rZW4gZ3JvdXBzXG4gICAqIEByZXR1cm5zIHtTdGF0ZTxUPn0gdGFrZW4gYWZ0ZXIgdGhlIGdpdmVuIGlucHV0XG4gICAqL1xuICB0cihyZWdleHAsIG5leHQsIGZsYWdzLCBncm91cHMpIHtcbiAgICBncm91cHMgPSBncm91cHMgfHwgU3RhdGUuZ3JvdXBzO1xuICAgIGxldCBuZXh0U3RhdGU7XG4gICAgaWYgKG5leHQgJiYgbmV4dC5qKSB7XG4gICAgICBuZXh0U3RhdGUgPSBuZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUb2tlbiB3aXRoIG1heWJlIHRva2VuIGdyb3Vwc1xuICAgICAgbmV4dFN0YXRlID0gbmV3IFN0YXRlKG5leHQpO1xuICAgICAgaWYgKGZsYWdzICYmIGdyb3Vwcykge1xuICAgICAgICBhZGRUb0dyb3VwcyhuZXh0LCBmbGFncywgZ3JvdXBzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5qci5wdXNoKFtyZWdleHAsIG5leHRTdGF0ZV0pO1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH0sXG4gIC8qKlxuICAgKiBTaG9ydCBmb3IgXCJ0YWtlIHRyYW5zaXRpb25zXCIsIHdpbGwgdGFrZSBhcyBtYW55IHNlcXVlbnRpYWwgdHJhbnNpdGlvbnMgYXNcbiAgICogdGhlIGxlbmd0aCBvZiB0aGUgZ2l2ZW4gaW5wdXQgYW5kIHJldHVybnMgdGhlXG4gICAqIHJlc3VsdGluZyBmaW5hbCBzdGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gaW5wdXRcbiAgICogQHBhcmFtIHtUIHwgU3RhdGU8VD59IFtuZXh0XSBUcmFuc2l0aW9uIG9wdGlvbnNcbiAgICogQHBhcmFtIHtGbGFnc30gW2ZsYWdzXSBDb2xsZWN0aW9ucyBmbGFncyB0byBhZGQgdG9rZW4gdG9cbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uczxUPn0gW2dyb3Vwc10gTWFzdGVyIGxpc3Qgb2YgdG9rZW4gZ3JvdXBzXG4gICAqIEByZXR1cm5zIHtTdGF0ZTxUPn0gdGFrZW4gYWZ0ZXIgdGhlIGdpdmVuIGlucHV0XG4gICAqL1xuICB0cyhpbnB1dCwgbmV4dCwgZmxhZ3MsIGdyb3Vwcykge1xuICAgIGxldCBzdGF0ZSA9IHRoaXM7XG4gICAgY29uc3QgbGVuID0gaW5wdXQubGVuZ3RoO1xuICAgIGlmICghbGVuKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7XG4gICAgICBzdGF0ZSA9IHN0YXRlLnR0KGlucHV0W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlLnR0KGlucHV0W2xlbiAtIDFdLCBuZXh0LCBmbGFncywgZ3JvdXBzKTtcbiAgfSxcbiAgLyoqXG4gICAqIFNob3J0IGZvciBcInRha2UgdHJhbnNpdGlvblwiLCB0aGlzIGlzIGEgbWV0aG9kIGZvciBidWlsZGluZy93b3JraW5nIHdpdGhcbiAgICogc3RhdGUgbWFjaGluZXMuXG4gICAqXG4gICAqIElmIGEgc3RhdGUgYWxyZWFkeSBleGlzdHMgZm9yIHRoZSBnaXZlbiBpbnB1dCwgcmV0dXJucyBpdC5cbiAgICpcbiAgICogSWYgYSB0b2tlbiBpcyBzcGVjaWZpZWQsIHRoYXQgc3RhdGUgd2lsbCBlbWl0IHRoYXQgdG9rZW4gd2hlbiByZWFjaGVkIGJ5XG4gICAqIHRoZSBsaW5raWZ5IGVuZ2luZS5cbiAgICpcbiAgICogSWYgbm8gc3RhdGUgZXhpc3RzLCBpdCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggc29tZSBkZWZhdWx0IHRyYW5zaXRpb25zXG4gICAqIHRoYXQgcmVzZW1ibGUgZXhpc3RpbmcgZGVmYXVsdCB0cmFuc2l0aW9ucy5cbiAgICpcbiAgICogSWYgYSBzdGF0ZSBpcyBnaXZlbiBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCwgdGhhdCBzdGF0ZSB3aWxsIGJlXG4gICAqIHRyYW5zaXRpb25lZCB0byBvbiB0aGUgZ2l2ZW4gaW5wdXQgcmVnYXJkbGVzcyBvZiB3aGF0IHRoYXQgaW5wdXRcbiAgICogcHJldmlvdXNseSBkaWQuXG4gICAqXG4gICAqIFNwZWNpZnkgYSB0b2tlbiBncm91cCBmbGFncyB0byBkZWZpbmUgZ3JvdXBzIHRoYXQgdGhpcyB0b2tlbiBiZWxvbmdzIHRvLlxuICAgKiBUaGUgdG9rZW4gd2lsbCBiZSBhZGRlZCB0byBjb3JyZXNwb25kaW5nIGVudGlyZXMgaW4gdGhlIGdpdmVuIGdyb3Vwc1xuICAgKiBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCBjaGFyYWN0ZXIsIHRva2VuIHR5cGUgdG8gdHJhbnNpdGlvbiBvblxuICAgKiBAcGFyYW0ge1QgfCBTdGF0ZTxUPn0gW25leHRdIFRyYW5zaXRpb24gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0ZsYWdzfSBbZmxhZ3NdIENvbGxlY3Rpb25zIGZsYWdzIHRvIGFkZCB0b2tlbiB0b1xuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25zPFQ+fSBbZ3JvdXBzXSBNYXN0ZXIgbGlzdCBvZiBncm91cHNcbiAgICogQHJldHVybnMge1N0YXRlPFQ+fSB0YWtlbiBhZnRlciB0aGUgZ2l2ZW4gaW5wdXRcbiAgICovXG4gIHR0KGlucHV0LCBuZXh0LCBmbGFncywgZ3JvdXBzKSB7XG4gICAgZ3JvdXBzID0gZ3JvdXBzIHx8IFN0YXRlLmdyb3VwcztcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXM7XG5cbiAgICAvLyBDaGVjayBpZiBleGlzdGluZyBzdGF0ZSBnaXZlbiwganVzdCBhIGJhc2ljIHRyYW5zaXRpb25cbiAgICBpZiAobmV4dCAmJiBuZXh0LmopIHtcbiAgICAgIHN0YXRlLmpbaW5wdXRdID0gbmV4dDtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH1cbiAgICBjb25zdCB0ID0gbmV4dDtcblxuICAgIC8vIFRha2UgdGhlIHRyYW5zaXRpb24gd2l0aCB0aGUgdXN1YWwgZGVmYXVsdCBtZWNoYW5pc21zIGFuZCB1c2UgdGhhdCBhc1xuICAgIC8vIGEgdGVtcGxhdGUgZm9yIGNyZWF0aW5nIHRoZSBuZXh0IHN0YXRlXG4gICAgbGV0IG5leHRTdGF0ZSxcbiAgICAgIHRlbXBsYXRlU3RhdGUgPSBzdGF0ZS5nbyhpbnB1dCk7XG4gICAgaWYgKHRlbXBsYXRlU3RhdGUpIHtcbiAgICAgIG5leHRTdGF0ZSA9IG5ldyBTdGF0ZSgpO1xuICAgICAgYXNzaWduKG5leHRTdGF0ZS5qLCB0ZW1wbGF0ZVN0YXRlLmopO1xuICAgICAgbmV4dFN0YXRlLmpyLnB1c2guYXBwbHkobmV4dFN0YXRlLmpyLCB0ZW1wbGF0ZVN0YXRlLmpyKTtcbiAgICAgIG5leHRTdGF0ZS5qZCA9IHRlbXBsYXRlU3RhdGUuamQ7XG4gICAgICBuZXh0U3RhdGUudCA9IHRlbXBsYXRlU3RhdGUudDtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dFN0YXRlID0gbmV3IFN0YXRlKCk7XG4gICAgfVxuICAgIGlmICh0KSB7XG4gICAgICAvLyBFbnN1cmUgbmV3bHkgdG9rZW4gaXMgaW4gdGhlIHNhbWUgZ3JvdXBzIGFzIHRoZSBvbGQgdG9rZW5cbiAgICAgIGlmIChncm91cHMpIHtcbiAgICAgICAgaWYgKG5leHRTdGF0ZS50ICYmIHR5cGVvZiBuZXh0U3RhdGUudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBjb25zdCBhbGxGbGFncyA9IGFzc2lnbihmbGFnc0ZvclRva2VuKG5leHRTdGF0ZS50LCBncm91cHMpLCBmbGFncyk7XG4gICAgICAgICAgYWRkVG9Hcm91cHModCwgYWxsRmxhZ3MsIGdyb3Vwcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmxhZ3MpIHtcbiAgICAgICAgICBhZGRUb0dyb3Vwcyh0LCBmbGFncywgZ3JvdXBzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV4dFN0YXRlLnQgPSB0OyAvLyBvdmVyd3JpdGUgYW55dGhpbmcgdGhhdCB3YXMgcHJldmlvdXNseSB0aGVyZVxuICAgIH1cblxuICAgIHN0YXRlLmpbaW5wdXRdID0gbmV4dFN0YXRlO1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cbn07XG5cbi8vIEhlbHBlciBmdW5jdGlvbnMgdG8gaW1wcm92ZSBtaW5pZmljYXRpb24gKG5vdCBleHBvcnRlZCBvdXRzaWRlIGxpbmtpZnlqcyBtb2R1bGUpXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7U3RhdGU8VD59IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdfSBpbnB1dFxuICogQHBhcmFtIHtGbGFnc30gW2ZsYWdzXVxuICogQHBhcmFtIHtDb2xsZWN0aW9uczxUPn0gW2dyb3Vwc11cbiAqL1xuY29uc3QgdGEgPSAoc3RhdGUsIGlucHV0LCBuZXh0LCBmbGFncywgZ3JvdXBzKSA9PiBzdGF0ZS50YShpbnB1dCwgbmV4dCwgZmxhZ3MsIGdyb3Vwcyk7XG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7U3RhdGU8VD59IHN0YXRlXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwXG4gKiBAcGFyYW0ge1QgfCBTdGF0ZTxUPn0gW25leHRdXG4gKiBAcGFyYW0ge0ZsYWdzfSBbZmxhZ3NdXG4gKiBAcGFyYW0ge0NvbGxlY3Rpb25zPFQ+fSBbZ3JvdXBzXVxuICovXG5jb25zdCB0ciA9IChzdGF0ZSwgcmVnZXhwLCBuZXh0LCBmbGFncywgZ3JvdXBzKSA9PiBzdGF0ZS50cihyZWdleHAsIG5leHQsIGZsYWdzLCBncm91cHMpO1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge1N0YXRlPFQ+fSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gaW5wdXRcbiAqIEBwYXJhbSB7VCB8IFN0YXRlPFQ+fSBbbmV4dF1cbiAqIEBwYXJhbSB7RmxhZ3N9IFtmbGFnc11cbiAqIEBwYXJhbSB7Q29sbGVjdGlvbnM8VD59IFtncm91cHNdXG4gKi9cbmNvbnN0IHRzID0gKHN0YXRlLCBpbnB1dCwgbmV4dCwgZmxhZ3MsIGdyb3VwcykgPT4gc3RhdGUudHMoaW5wdXQsIG5leHQsIGZsYWdzLCBncm91cHMpO1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge1N0YXRlPFQ+fSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge1QgfCBTdGF0ZTxUPn0gW25leHRdXG4gKiBAcGFyYW0ge0NvbGxlY3Rpb25zPFQ+fSBbZ3JvdXBzXVxuICogQHBhcmFtIHtGbGFnc30gW2ZsYWdzXVxuICovXG5jb25zdCB0dCA9IChzdGF0ZSwgaW5wdXQsIG5leHQsIGZsYWdzLCBncm91cHMpID0+IHN0YXRlLnR0KGlucHV0LCBuZXh0LCBmbGFncywgZ3JvdXBzKTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuVGV4dCBUb2tlbnNcbklkZW50aWZpZXJzIGZvciB0b2tlbiBvdXRwdXRzIGZyb20gdGhlIHJlZ2V4cCBzY2FubmVyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8vIEEgdmFsaWQgd2ViIGRvbWFpbiB0b2tlblxuY29uc3QgV09SRCA9ICdXT1JEJzsgLy8gb25seSBjb250YWlucyBhLXpcbmNvbnN0IFVXT1JEID0gJ1VXT1JEJzsgLy8gY29udGFpbnMgbGV0dGVycyBvdGhlciB0aGFuIGEteiwgdXNlZCBmb3IgSUROXG5cbi8vIFNwZWNpYWwgY2FzZSBvZiB3b3JkXG5jb25zdCBMT0NBTEhPU1QgPSAnTE9DQUxIT1NUJztcblxuLy8gVmFsaWQgdG9wLWxldmVsIGRvbWFpbiwgc3BlY2lhbCBjYXNlIG9mIFdPUkQgKHNlZSB0bGRzLmpzKVxuY29uc3QgVExEID0gJ1RMRCc7XG5cbi8vIFZhbGlkIElETiBUTEQsIHNwZWNpYWwgY2FzZSBvZiBVV09SRCAoc2VlIHRsZHMuanMpXG5jb25zdCBVVExEID0gJ1VUTEQnO1xuXG4vLyBUaGUgc2NoZW1lIHBvcnRpb24gb2YgYSB3ZWIgVVJJIHByb3RvY29sLiBTdXBwb3J0ZWQgdHlwZXMgaW5jbHVkZTogYG1haWx0b2AsXG4vLyBgZmlsZWAsIGFuZCB1c2VyLWRlZmluZWQgY3VzdG9tIHByb3RvY29scy4gTGltaXRlZCB0byBzY2hlbWVzIHRoYXQgY29udGFpblxuLy8gb25seSBsZXR0ZXJzXG5jb25zdCBTQ0hFTUUgPSAnU0NIRU1FJztcblxuLy8gU2ltaWxhciB0byBTQ0hFTUUsIGV4Y2VwdCBtYWtlcyBkaXN0aW5jdGlvbiBmb3Igc2NoZW1lcyB0aGF0IG11c3QgYWx3YXlzIGJlXG4vLyBmb2xsb3dlZCBieSBgOi8vYCwgbm90IGp1c3QgYDpgLiBTdXBwb3J0ZWQgdHlwZXMgaW5jbHVkZSBgaHR0cGAsIGBodHRwc2AsXG4vLyBgZnRwYCwgYGZ0cHNgXG5jb25zdCBTTEFTSF9TQ0hFTUUgPSAnU0xBU0hfU0NIRU1FJztcblxuLy8gQW55IHNlcXVlbmNlIG9mIGRpZ2l0cyAwLTlcbmNvbnN0IE5VTSA9ICdOVU0nO1xuXG4vLyBBbnkgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgbmV3bGluZVxuY29uc3QgV1MgPSAnV1MnO1xuXG4vLyBOZXcgbGluZSAodW5peCBzdHlsZSlcbmNvbnN0IE5MJDEgPSAnTkwnOyAvLyBcXG5cblxuLy8gT3BlbmluZy9jbG9zaW5nIGJyYWNrZXQgY2xhc3Nlc1xuY29uc3QgT1BFTkJSQUNFID0gJ09QRU5CUkFDRSc7IC8vIHtcbmNvbnN0IE9QRU5CUkFDS0VUID0gJ09QRU5CUkFDS0VUJzsgLy8gW1xuY29uc3QgT1BFTkFOR0xFQlJBQ0tFVCA9ICdPUEVOQU5HTEVCUkFDS0VUJzsgLy8gPFxuY29uc3QgT1BFTlBBUkVOID0gJ09QRU5QQVJFTic7IC8vIChcbmNvbnN0IENMT1NFQlJBQ0UgPSAnQ0xPU0VCUkFDRSc7IC8vIH1cbmNvbnN0IENMT1NFQlJBQ0tFVCA9ICdDTE9TRUJSQUNLRVQnOyAvLyBdXG5jb25zdCBDTE9TRUFOR0xFQlJBQ0tFVCA9ICdDTE9TRUFOR0xFQlJBQ0tFVCc7IC8vID5cbmNvbnN0IENMT1NFUEFSRU4gPSAnQ0xPU0VQQVJFTic7IC8vIClcblxuLy8gVmFyaW91cyBzeW1ib2xzXG5jb25zdCBBTVBFUlNBTkQgPSAnQU1QRVJTQU5EJzsgLy8gJlxuY29uc3QgQVBPU1RST1BIRSA9ICdBUE9TVFJPUEhFJzsgLy8gJ1xuY29uc3QgQVNURVJJU0sgPSAnQVNURVJJU0snOyAvLyAqXG5jb25zdCBBVCA9ICdBVCc7IC8vIEBcbmNvbnN0IEJBQ0tTTEFTSCA9ICdCQUNLU0xBU0gnOyAvLyBcXFxuY29uc3QgQkFDS1RJQ0sgPSAnQkFDS1RJQ0snOyAvLyBgXG5jb25zdCBDQVJFVCA9ICdDQVJFVCc7IC8vIF5cbmNvbnN0IENPTE9OID0gJ0NPTE9OJzsgLy8gOlxuY29uc3QgQ09NTUEgPSAnQ09NTUEnOyAvLyAsXG5jb25zdCBET0xMQVIgPSAnRE9MTEFSJzsgLy8gJFxuY29uc3QgRE9UID0gJ0RPVCc7IC8vIC5cbmNvbnN0IEVRVUFMUyA9ICdFUVVBTFMnOyAvLyA9XG5jb25zdCBFWENMQU1BVElPTiA9ICdFWENMQU1BVElPTic7IC8vICFcbmNvbnN0IEhZUEhFTiA9ICdIWVBIRU4nOyAvLyAtXG5jb25zdCBQRVJDRU5UID0gJ1BFUkNFTlQnOyAvLyAlXG5jb25zdCBQSVBFID0gJ1BJUEUnOyAvLyB8XG5jb25zdCBQTFVTID0gJ1BMVVMnOyAvLyArXG5jb25zdCBQT1VORCA9ICdQT1VORCc7IC8vICNcbmNvbnN0IFFVRVJZID0gJ1FVRVJZJzsgLy8gP1xuY29uc3QgUVVPVEUgPSAnUVVPVEUnOyAvLyBcIlxuXG5jb25zdCBTRU1JID0gJ1NFTUknOyAvLyA7XG5jb25zdCBTTEFTSCA9ICdTTEFTSCc7IC8vIC9cbmNvbnN0IFRJTERFID0gJ1RJTERFJzsgLy8gflxuY29uc3QgVU5ERVJTQ09SRSA9ICdVTkRFUlNDT1JFJzsgLy8gX1xuXG4vLyBFbW9qaSBzeW1ib2xcbmNvbnN0IEVNT0pJJDEgPSAnRU1PSkknO1xuXG4vLyBEZWZhdWx0IHRva2VuIC0gYW55dGhpbmcgdGhhdCBpcyBub3Qgb25lIG9mIHRoZSBhYm92ZVxuY29uc3QgU1lNID0gJ1NZTSc7XG5cbnZhciB0ayA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcblx0X19wcm90b19fOiBudWxsLFxuXHRXT1JEOiBXT1JELFxuXHRVV09SRDogVVdPUkQsXG5cdExPQ0FMSE9TVDogTE9DQUxIT1NULFxuXHRUTEQ6IFRMRCxcblx0VVRMRDogVVRMRCxcblx0U0NIRU1FOiBTQ0hFTUUsXG5cdFNMQVNIX1NDSEVNRTogU0xBU0hfU0NIRU1FLFxuXHROVU06IE5VTSxcblx0V1M6IFdTLFxuXHROTDogTkwkMSxcblx0T1BFTkJSQUNFOiBPUEVOQlJBQ0UsXG5cdE9QRU5CUkFDS0VUOiBPUEVOQlJBQ0tFVCxcblx0T1BFTkFOR0xFQlJBQ0tFVDogT1BFTkFOR0xFQlJBQ0tFVCxcblx0T1BFTlBBUkVOOiBPUEVOUEFSRU4sXG5cdENMT1NFQlJBQ0U6IENMT1NFQlJBQ0UsXG5cdENMT1NFQlJBQ0tFVDogQ0xPU0VCUkFDS0VULFxuXHRDTE9TRUFOR0xFQlJBQ0tFVDogQ0xPU0VBTkdMRUJSQUNLRVQsXG5cdENMT1NFUEFSRU46IENMT1NFUEFSRU4sXG5cdEFNUEVSU0FORDogQU1QRVJTQU5ELFxuXHRBUE9TVFJPUEhFOiBBUE9TVFJPUEhFLFxuXHRBU1RFUklTSzogQVNURVJJU0ssXG5cdEFUOiBBVCxcblx0QkFDS1NMQVNIOiBCQUNLU0xBU0gsXG5cdEJBQ0tUSUNLOiBCQUNLVElDSyxcblx0Q0FSRVQ6IENBUkVULFxuXHRDT0xPTjogQ09MT04sXG5cdENPTU1BOiBDT01NQSxcblx0RE9MTEFSOiBET0xMQVIsXG5cdERPVDogRE9ULFxuXHRFUVVBTFM6IEVRVUFMUyxcblx0RVhDTEFNQVRJT046IEVYQ0xBTUFUSU9OLFxuXHRIWVBIRU46IEhZUEhFTixcblx0UEVSQ0VOVDogUEVSQ0VOVCxcblx0UElQRTogUElQRSxcblx0UExVUzogUExVUyxcblx0UE9VTkQ6IFBPVU5ELFxuXHRRVUVSWTogUVVFUlksXG5cdFFVT1RFOiBRVU9URSxcblx0U0VNSTogU0VNSSxcblx0U0xBU0g6IFNMQVNILFxuXHRUSUxERTogVElMREUsXG5cdFVOREVSU0NPUkU6IFVOREVSU0NPUkUsXG5cdEVNT0pJOiBFTU9KSSQxLFxuXHRTWU06IFNZTVxufSk7XG5cbi8vIE5vdGUgdGhhdCB0aGVzZSB0d28gVW5pY29kZSBvbmVzIGV4cGFuZCBpbnRvIGEgcmVhbGx5IGJpZyBvbmUgd2l0aCBCYWJlbFxuY29uc3QgQVNDSUlfTEVUVEVSID0gL1thLXpdLztcbmNvbnN0IExFVFRFUiA9IC9cXHB7TH0vdTsgLy8gQW55IFVuaWNvZGUgY2hhcmFjdGVyIHdpdGggbGV0dGVyIGRhdGEgdHlwZVxuY29uc3QgRU1PSkkgPSAvXFxwe0Vtb2ppfS91OyAvLyBBbnkgVW5pY29kZSBlbW9qaSBjaGFyYWN0ZXJcbmNvbnN0IEVNT0pJX1ZBUklBVElPTiQxID0gL1xcdWZlMGYvO1xuY29uc3QgRElHSVQgPSAvXFxkLztcbmNvbnN0IFNQQUNFID0gL1xccy87XG5cbnZhciByZWdleHAgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0QVNDSUlfTEVUVEVSOiBBU0NJSV9MRVRURVIsXG5cdExFVFRFUjogTEVUVEVSLFxuXHRFTU9KSTogRU1PSkksXG5cdEVNT0pJX1ZBUklBVElPTjogRU1PSklfVkFSSUFUSU9OJDEsXG5cdERJR0lUOiBESUdJVCxcblx0U1BBQ0U6IFNQQUNFXG59KTtcblxuLyoqXG5cdFRoZSBzY2FubmVyIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0aGF0IHRha2VzIGEgc3RyaW5nIG9mIHRleHQgYXMgaW5wdXQsIGFuZFxuXHRvdXRwdXRzIGFuIGFycmF5IG9mIHRva2VucyBpbnN0YW5jZXMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgZWFzeSBVUkwgcGFyc2luZy5cbiovXG5jb25zdCBOTCA9ICdcXG4nOyAvLyBOZXcgbGluZSBjaGFyYWN0ZXJcbmNvbnN0IEVNT0pJX1ZBUklBVElPTiA9ICdcXHVmZTBmJzsgLy8gVmFyaWF0aW9uIHNlbGVjdG9yLCBmb2xsb3dzIGhlYXJ0IGFuZCBvdGhlcnNcbmNvbnN0IEVNT0pJX0pPSU5FUiA9ICdcXHUyMDBkJzsgLy8gemVyby13aWR0aCBqb2luZXJcblxubGV0IHRsZHMgPSBudWxsLFxuICB1dGxkcyA9IG51bGw7IC8vIGRvbid0IGNoYW5nZSBzbyBvbmx5IGhhdmUgdG8gYmUgY29tcHV0ZWQgb25jZVxuXG4vKipcbiAqIFNjYW5uZXIgb3V0cHV0IHRva2VuOlxuICogLSBgdGAgaXMgdGhlIHRva2VuIG5hbWUgKGUuZy4sICdOVU0nLCAnRU1PSkknLCAnVExEJylcbiAqIC0gYHZgIGlzIHRoZSB2YWx1ZSBvZiB0aGUgdG9rZW4gKGUuZy4sICcxMjMnLCAn4p2k77iPJywgJ2NvbScpXG4gKiAtIGBzYCBpcyB0aGUgc3RhcnQgaW5kZXggb2YgdGhlIHRva2VuIGluIHRoZSBvcmlnaW5hbCBzdHJpbmdcbiAqIC0gYGVgIGlzIHRoZSBlbmQgaW5kZXggb2YgdGhlIHRva2VuIGluIHRoZSBvcmlnaW5hbCBzdHJpbmdcbiAqIEB0eXBlZGVmIHt7dDogc3RyaW5nLCB2OiBzdHJpbmcsIHM6IG51bWJlciwgZTogbnVtYmVyfX0gVG9rZW5cbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7eyBbY29sbGVjdGlvbjogc3RyaW5nXTogVFtdIH19IENvbGxlY3Rpb25zXG4gKi9cblxuLyoqXG4gKiBJbml0aWFsaXplIHRoZSBzY2FubmVyIGNoYXJhY3Rlci1iYXNlZCBzdGF0ZSBtYWNoaW5lIGZvciB0aGUgZ2l2ZW4gc3RhcnRcbiAqIHN0YXRlXG4gKiBAcGFyYW0ge1tzdHJpbmcsIGJvb2xlYW5dW119IGN1c3RvbVNjaGVtZXMgTGlzdCBvZiBjdXN0b20gc2NoZW1lcywgd2hlcmUgZWFjaFxuICogaXRlbSBpcyBhIGxlbmd0aC0yIHR1cGxlIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgc2V0IHRvIHRoZSBzdHJpbmcgc2NoZW1lLCBhbmRcbiAqIHRoZSBzZWNvbmQgZWxlbWVudCBzZXQgdG8gYHRydWVgIGlmIHRoZSBgOi8vYCBhZnRlciB0aGUgc2NoZW1lIGlzIG9wdGlvbmFsXG4gKi9cbmZ1bmN0aW9uIGluaXQkMihjdXN0b21TY2hlbWVzKSB7XG4gIGlmIChjdXN0b21TY2hlbWVzID09PSB2b2lkIDApIHtcbiAgICBjdXN0b21TY2hlbWVzID0gW107XG4gIH1cbiAgLy8gRnJlcXVlbnRseSB1c2VkIHN0YXRlcyAobmFtZSBhcmd1bWVudCByZW1vdmVkIGR1cmluZyBtaW5pZmljYXRpb24pXG4gIC8qKiBAdHlwZSBDb2xsZWN0aW9uczxzdHJpbmc+ICovXG4gIGNvbnN0IGdyb3VwcyA9IHt9OyAvLyBvZiB0b2tlbnNcbiAgU3RhdGUuZ3JvdXBzID0gZ3JvdXBzO1xuICAvKiogQHR5cGUgU3RhdGU8c3RyaW5nPiAqL1xuICBjb25zdCBTdGFydCA9IG5ldyBTdGF0ZSgpO1xuICBpZiAodGxkcyA9PSBudWxsKSB7XG4gICAgdGxkcyA9IGRlY29kZVRsZHMoZW5jb2RlZFRsZHMpO1xuICB9XG4gIGlmICh1dGxkcyA9PSBudWxsKSB7XG4gICAgdXRsZHMgPSBkZWNvZGVUbGRzKGVuY29kZWRVdGxkcyk7XG4gIH1cblxuICAvLyBTdGF0ZXMgZm9yIHNwZWNpYWwgVVJMIHN5bWJvbHMgdGhhdCBhY2NlcHQgaW1tZWRpYXRlbHkgYWZ0ZXIgc3RhcnRcbiAgdHQoU3RhcnQsIFwiJ1wiLCBBUE9TVFJPUEhFKTtcbiAgdHQoU3RhcnQsICd7JywgT1BFTkJSQUNFKTtcbiAgdHQoU3RhcnQsICdbJywgT1BFTkJSQUNLRVQpO1xuICB0dChTdGFydCwgJzwnLCBPUEVOQU5HTEVCUkFDS0VUKTtcbiAgdHQoU3RhcnQsICcoJywgT1BFTlBBUkVOKTtcbiAgdHQoU3RhcnQsICd9JywgQ0xPU0VCUkFDRSk7XG4gIHR0KFN0YXJ0LCAnXScsIENMT1NFQlJBQ0tFVCk7XG4gIHR0KFN0YXJ0LCAnPicsIENMT1NFQU5HTEVCUkFDS0VUKTtcbiAgdHQoU3RhcnQsICcpJywgQ0xPU0VQQVJFTik7XG4gIHR0KFN0YXJ0LCAnJicsIEFNUEVSU0FORCk7XG4gIHR0KFN0YXJ0LCAnKicsIEFTVEVSSVNLKTtcbiAgdHQoU3RhcnQsICdAJywgQVQpO1xuICB0dChTdGFydCwgJ2AnLCBCQUNLVElDSyk7XG4gIHR0KFN0YXJ0LCAnXicsIENBUkVUKTtcbiAgdHQoU3RhcnQsICc6JywgQ09MT04pO1xuICB0dChTdGFydCwgJywnLCBDT01NQSk7XG4gIHR0KFN0YXJ0LCAnJCcsIERPTExBUik7XG4gIHR0KFN0YXJ0LCAnLicsIERPVCk7XG4gIHR0KFN0YXJ0LCAnPScsIEVRVUFMUyk7XG4gIHR0KFN0YXJ0LCAnIScsIEVYQ0xBTUFUSU9OKTtcbiAgdHQoU3RhcnQsICctJywgSFlQSEVOKTtcbiAgdHQoU3RhcnQsICclJywgUEVSQ0VOVCk7XG4gIHR0KFN0YXJ0LCAnfCcsIFBJUEUpO1xuICB0dChTdGFydCwgJysnLCBQTFVTKTtcbiAgdHQoU3RhcnQsICcjJywgUE9VTkQpO1xuICB0dChTdGFydCwgJz8nLCBRVUVSWSk7XG4gIHR0KFN0YXJ0LCAnXCInLCBRVU9URSk7XG4gIHR0KFN0YXJ0LCAnLycsIFNMQVNIKTtcbiAgdHQoU3RhcnQsICc7JywgU0VNSSk7XG4gIHR0KFN0YXJ0LCAnficsIFRJTERFKTtcbiAgdHQoU3RhcnQsICdfJywgVU5ERVJTQ09SRSk7XG4gIHR0KFN0YXJ0LCAnXFxcXCcsIEJBQ0tTTEFTSCk7XG4gIGNvbnN0IE51bSA9IHRyKFN0YXJ0LCBESUdJVCwgTlVNLCB7XG4gICAgW251bWVyaWNdOiB0cnVlXG4gIH0pO1xuICB0cihOdW0sIERJR0lULCBOdW0pO1xuXG4gIC8vIFN0YXRlIHdoaWNoIGVtaXRzIGEgd29yZCB0b2tlblxuICBjb25zdCBXb3JkID0gdHIoU3RhcnQsIEFTQ0lJX0xFVFRFUiwgV09SRCwge1xuICAgIFthc2NpaV06IHRydWVcbiAgfSk7XG4gIHRyKFdvcmQsIEFTQ0lJX0xFVFRFUiwgV29yZCk7XG5cbiAgLy8gU2FtZSBhcyBwcmV2aW91cywgYnV0IHNwZWNpZmljIHRvIG5vbi1mc20uYXNjaWkgYWxwaGFiZXQgd29yZHNcbiAgY29uc3QgVVdvcmQgPSB0cihTdGFydCwgTEVUVEVSLCBVV09SRCwge1xuICAgIFthbHBoYV06IHRydWVcbiAgfSk7XG4gIHRyKFVXb3JkLCBBU0NJSV9MRVRURVIpOyAvLyBOb24tYWNjZXB0aW5nXG4gIHRyKFVXb3JkLCBMRVRURVIsIFVXb3JkKTtcblxuICAvLyBXaGl0ZXNwYWNlIGp1bXBzXG4gIC8vIFRva2VucyBvZiBvbmx5IG5vbi1uZXdsaW5lIHdoaXRlc3BhY2UgYXJlIGFyYml0cmFyaWx5IGxvbmdcbiAgLy8gSWYgYW55IHdoaXRlc3BhY2UgZXhjZXB0IG5ld2xpbmUsIG1vcmUgd2hpdGVzcGFjZSFcbiAgY29uc3QgV3MgPSB0cihTdGFydCwgU1BBQ0UsIFdTLCB7XG4gICAgW3doaXRlc3BhY2VdOiB0cnVlXG4gIH0pO1xuICB0dChTdGFydCwgTkwsIE5MJDEsIHtcbiAgICBbd2hpdGVzcGFjZV06IHRydWVcbiAgfSk7XG4gIHR0KFdzLCBOTCk7IC8vIG5vbi1hY2NlcHRpbmcgc3RhdGUgdG8gYXZvaWQgbWl4aW5nIHdoaXRlc3BhY2VzXG4gIHRyKFdzLCBTUEFDRSwgV3MpO1xuXG4gIC8vIEVtb2ppIHRva2Vucy4gVGhleSBhcmUgbm90IGdyb3VwZWQgYnkgdGhlIHNjYW5uZXIgZXhjZXB0IGluIGNhc2VzIHdoZXJlIGFcbiAgLy8gemVyby13aWR0aCBqb2luZXIgaXMgcHJlc2VudFxuICBjb25zdCBFbW9qaSA9IHRyKFN0YXJ0LCBFTU9KSSwgRU1PSkkkMSwge1xuICAgIFtlbW9qaV06IHRydWVcbiAgfSk7XG4gIHRyKEVtb2ppLCBFTU9KSSwgRW1vamkpO1xuICB0dChFbW9qaSwgRU1PSklfVkFSSUFUSU9OLCBFbW9qaSk7XG4gIC8vIHR0KFN0YXJ0LCBFTU9KSV9WQVJJQVRJT04sIEVtb2ppKTsgLy8gVGhpcyBvbmUgaXMgc2tldGNoeVxuXG4gIGNvbnN0IEVtb2ppSm9pbmVyID0gdHQoRW1vamksIEVNT0pJX0pPSU5FUik7XG4gIHRyKEVtb2ppSm9pbmVyLCBFTU9KSSwgRW1vamkpO1xuICAvLyB0dChFbW9qaUpvaW5lciwgRU1PSklfVkFSSUFUSU9OLCBFbW9qaSk7IC8vIGFsc28gc2tldGNoeVxuXG4gIC8vIEdlbmVyYXRlcyBzdGF0ZXMgZm9yIHRvcC1sZXZlbCBkb21haW5zXG4gIC8vIE5vdGUgdGhhdCB0aGlzIGlzIG1vc3QgYWNjdXJhdGUgd2hlbiB0bGRzIGFyZSBpbiBhbHBoYWJldGljYWwgb3JkZXJcbiAgY29uc3Qgd29yZGpyID0gW1tBU0NJSV9MRVRURVIsIFdvcmRdXTtcbiAgY29uc3QgdXdvcmRqciA9IFtbQVNDSUlfTEVUVEVSLCBudWxsXSwgW0xFVFRFUiwgVVdvcmRdXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0bGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZmFzdHRzKFN0YXJ0LCB0bGRzW2ldLCBUTEQsIFdPUkQsIHdvcmRqcik7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB1dGxkcy5sZW5ndGg7IGkrKykge1xuICAgIGZhc3R0cyhTdGFydCwgdXRsZHNbaV0sIFVUTEQsIFVXT1JELCB1d29yZGpyKTtcbiAgfVxuICBhZGRUb0dyb3VwcyhUTEQsIHtcbiAgICB0bGQ6IHRydWUsXG4gICAgYXNjaWk6IHRydWVcbiAgfSwgZ3JvdXBzKTtcbiAgYWRkVG9Hcm91cHMoVVRMRCwge1xuICAgIHV0bGQ6IHRydWUsXG4gICAgYWxwaGE6IHRydWVcbiAgfSwgZ3JvdXBzKTtcblxuICAvLyBDb2xsZWN0IHRoZSBzdGF0ZXMgZ2VuZXJhdGVkIGJ5IGRpZmZlcmVudCBwcm90b2NvbHMuIE5PVEU6IElmIGFueSBuZXcgVExEc1xuICAvLyBnZXQgYWRkZWQgdGhhdCBhcmUgYWxzbyBwcm90b2NvbHMsIHNldCB0aGUgdG9rZW4gdG8gYmUgdGhlIHNhbWUgYXMgdGhlXG4gIC8vIHByb3RvY29sIHRvIGVuc3VyZSBwYXJzaW5nIHdvcmtzIGFzIGV4cGVjdGVkLlxuICBmYXN0dHMoU3RhcnQsICdmaWxlJywgU0NIRU1FLCBXT1JELCB3b3JkanIpO1xuICBmYXN0dHMoU3RhcnQsICdtYWlsdG8nLCBTQ0hFTUUsIFdPUkQsIHdvcmRqcik7XG4gIGZhc3R0cyhTdGFydCwgJ2h0dHAnLCBTTEFTSF9TQ0hFTUUsIFdPUkQsIHdvcmRqcik7XG4gIGZhc3R0cyhTdGFydCwgJ2h0dHBzJywgU0xBU0hfU0NIRU1FLCBXT1JELCB3b3JkanIpO1xuICBmYXN0dHMoU3RhcnQsICdmdHAnLCBTTEFTSF9TQ0hFTUUsIFdPUkQsIHdvcmRqcik7XG4gIGZhc3R0cyhTdGFydCwgJ2Z0cHMnLCBTTEFTSF9TQ0hFTUUsIFdPUkQsIHdvcmRqcik7XG4gIGFkZFRvR3JvdXBzKFNDSEVNRSwge1xuICAgIHNjaGVtZTogdHJ1ZSxcbiAgICBhc2NpaTogdHJ1ZVxuICB9LCBncm91cHMpO1xuICBhZGRUb0dyb3VwcyhTTEFTSF9TQ0hFTUUsIHtcbiAgICBzbGFzaHNjaGVtZTogdHJ1ZSxcbiAgICBhc2NpaTogdHJ1ZVxuICB9LCBncm91cHMpO1xuXG4gIC8vIFJlZ2lzdGVyIGN1c3RvbSBzY2hlbWVzLiBBc3N1bWVzIGVhY2ggc2NoZW1lIGlzIGFzY2lpbnVtZXJpYyB3aXRoIGh5cGhlbnNcbiAgY3VzdG9tU2NoZW1lcyA9IGN1c3RvbVNjaGVtZXMuc29ydCgoYSwgYikgPT4gYVswXSA+IGJbMF0gPyAxIDogLTEpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGN1c3RvbVNjaGVtZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzY2ggPSBjdXN0b21TY2hlbWVzW2ldWzBdO1xuICAgIGNvbnN0IG9wdGlvbmFsU2xhc2hTbGFzaCA9IGN1c3RvbVNjaGVtZXNbaV1bMV07XG4gICAgY29uc3QgZmxhZ3MgPSBvcHRpb25hbFNsYXNoU2xhc2ggPyB7XG4gICAgICBbc2NoZW1lXTogdHJ1ZVxuICAgIH0gOiB7XG4gICAgICBbc2xhc2hzY2hlbWVdOiB0cnVlXG4gICAgfTtcbiAgICBpZiAoc2NoLmluZGV4T2YoJy0nKSA+PSAwKSB7XG4gICAgICBmbGFnc1tkb21haW5dID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCFBU0NJSV9MRVRURVIudGVzdChzY2gpKSB7XG4gICAgICBmbGFnc1tudW1lcmljXSA9IHRydWU7IC8vIG51bWJlcnMgb25seVxuICAgIH0gZWxzZSBpZiAoRElHSVQudGVzdChzY2gpKSB7XG4gICAgICBmbGFnc1thc2NpaW51bWVyaWNdID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxhZ3NbYXNjaWldID0gdHJ1ZTtcbiAgICB9XG4gICAgdHMoU3RhcnQsIHNjaCwgc2NoLCBmbGFncyk7XG4gIH1cblxuICAvLyBMb2NhbGhvc3QgdG9rZW5cbiAgdHMoU3RhcnQsICdsb2NhbGhvc3QnLCBMT0NBTEhPU1QsIHtcbiAgICBhc2NpaTogdHJ1ZVxuICB9KTtcblxuICAvLyBTZXQgZGVmYXVsdCB0cmFuc2l0aW9uIGZvciBzdGFydCBzdGF0ZSAoc29tZSBzeW1ib2wpXG4gIFN0YXJ0LmpkID0gbmV3IFN0YXRlKFNZTSk7XG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IFN0YXJ0LFxuICAgIHRva2VuczogYXNzaWduKHtcbiAgICAgIGdyb3Vwc1xuICAgIH0sIHRrKVxuICB9O1xufVxuXG4vKipcblx0R2l2ZW4gYSBzdHJpbmcsIHJldHVybnMgYW4gYXJyYXkgb2YgVE9LRU4gaW5zdGFuY2VzIHJlcHJlc2VudGluZyB0aGVcblx0Y29tcG9zaXRpb24gb2YgdGhhdCBzdHJpbmcuXG5cblx0QG1ldGhvZCBydW5cblx0QHBhcmFtIHtTdGF0ZTxzdHJpbmc+fSBzdGFydCBzY2FubmVyIHN0YXJ0aW5nIHN0YXRlXG5cdEBwYXJhbSB7c3RyaW5nfSBzdHIgaW5wdXQgc3RyaW5nIHRvIHNjYW5cblx0QHJldHVybiB7VG9rZW5bXX0gbGlzdCBvZiB0b2tlbnMsIGVhY2ggd2l0aCBhIHR5cGUgYW5kIHZhbHVlXG4qL1xuZnVuY3Rpb24gcnVuJDEoc3RhcnQsIHN0cikge1xuICAvLyBTdGF0ZSBtYWNoaW5lIGlzIG5vdCBjYXNlIHNlbnNpdGl2ZSwgc28gaW5wdXQgaXMgdG9rZW5pemVkIGluIGxvd2VyY2FzZWRcbiAgLy8gZm9ybSAoc3RpbGwgcmV0dXJucyByZWd1bGFyIGNhc2UpLiBVc2VzIHNlbGVjdGl2ZSBgdG9Mb3dlckNhc2VgIGJlY2F1c2VcbiAgLy8gbG93ZXJjYXNpbmcgdGhlIGVudGlyZSBzdHJpbmcgY2F1c2VzIHRoZSBsZW5ndGggYW5kIGNoYXJhY3RlciBwb3NpdGlvbiB0b1xuICAvLyB2YXJ5IGluIHNvbWUgbm9uLUVuZ2xpc2ggc3RyaW5ncyB3aXRoIFY4LWJhc2VkIHJ1bnRpbWVzLlxuICBjb25zdCBpdGVyYWJsZSA9IHN0cmluZ1RvQXJyYXkoc3RyLnJlcGxhY2UoL1tBLVpdL2csIGMgPT4gYy50b0xvd2VyQ2FzZSgpKSk7XG4gIGNvbnN0IGNoYXJDb3VudCA9IGl0ZXJhYmxlLmxlbmd0aDsgLy8gPD0gbGVuIGlmIHRoZXJlIGFyZSBlbW9qaXMsIGV0Y1xuICBjb25zdCB0b2tlbnMgPSBbXTsgLy8gcmV0dXJuIHZhbHVlXG5cbiAgLy8gY3Vyc29yIHRocm91Z2ggdGhlIHN0cmluZyBpdHNlbGYsIGFjY291bnRpbmcgZm9yIGNoYXJhY3RlcnMgdGhhdCBoYXZlXG4gIC8vIHdpZHRoIHdpdGggbGVuZ3RoIDIgc3VjaCBhcyBlbW9qaXNcbiAgbGV0IGN1cnNvciA9IDA7XG5cbiAgLy8gQ3Vyc29yIHRocm91Z2ggdGhlIGFycmF5LXJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdHJpbmdcbiAgbGV0IGNoYXJDdXJzb3IgPSAwO1xuXG4gIC8vIFRva2VuaXplIHRoZSBzdHJpbmdcbiAgd2hpbGUgKGNoYXJDdXJzb3IgPCBjaGFyQ291bnQpIHtcbiAgICBsZXQgc3RhdGUgPSBzdGFydDtcbiAgICBsZXQgbmV4dFN0YXRlID0gbnVsbDtcbiAgICBsZXQgdG9rZW5MZW5ndGggPSAwO1xuICAgIGxldCBsYXRlc3RBY2NlcHRpbmcgPSBudWxsO1xuICAgIGxldCBzaW5jZUFjY2VwdHMgPSAtMTtcbiAgICBsZXQgY2hhcnNTaW5jZUFjY2VwdHMgPSAtMTtcbiAgICB3aGlsZSAoY2hhckN1cnNvciA8IGNoYXJDb3VudCAmJiAobmV4dFN0YXRlID0gc3RhdGUuZ28oaXRlcmFibGVbY2hhckN1cnNvcl0pKSkge1xuICAgICAgc3RhdGUgPSBuZXh0U3RhdGU7XG5cbiAgICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIGxhdGVzdCBhY2NlcHRpbmcgc3RhdGVcbiAgICAgIGlmIChzdGF0ZS5hY2NlcHRzKCkpIHtcbiAgICAgICAgc2luY2VBY2NlcHRzID0gMDtcbiAgICAgICAgY2hhcnNTaW5jZUFjY2VwdHMgPSAwO1xuICAgICAgICBsYXRlc3RBY2NlcHRpbmcgPSBzdGF0ZTtcbiAgICAgIH0gZWxzZSBpZiAoc2luY2VBY2NlcHRzID49IDApIHtcbiAgICAgICAgc2luY2VBY2NlcHRzICs9IGl0ZXJhYmxlW2NoYXJDdXJzb3JdLmxlbmd0aDtcbiAgICAgICAgY2hhcnNTaW5jZUFjY2VwdHMrKztcbiAgICAgIH1cbiAgICAgIHRva2VuTGVuZ3RoICs9IGl0ZXJhYmxlW2NoYXJDdXJzb3JdLmxlbmd0aDtcbiAgICAgIGN1cnNvciArPSBpdGVyYWJsZVtjaGFyQ3Vyc29yXS5sZW5ndGg7XG4gICAgICBjaGFyQ3Vyc29yKys7XG4gICAgfVxuXG4gICAgLy8gUm9sbCBiYWNrIHRvIHRoZSBsYXRlc3QgYWNjZXB0aW5nIHN0YXRlXG4gICAgY3Vyc29yIC09IHNpbmNlQWNjZXB0cztcbiAgICBjaGFyQ3Vyc29yIC09IGNoYXJzU2luY2VBY2NlcHRzO1xuICAgIHRva2VuTGVuZ3RoIC09IHNpbmNlQWNjZXB0cztcblxuICAgIC8vIE5vIG1vcmUganVtcHMsIGp1c3QgbWFrZSBhIG5ldyB0b2tlbiBmcm9tIHRoZSBsYXN0IGFjY2VwdGluZyBvbmVcbiAgICB0b2tlbnMucHVzaCh7XG4gICAgICB0OiBsYXRlc3RBY2NlcHRpbmcudCxcbiAgICAgIC8vIHRva2VuIHR5cGUvbmFtZVxuICAgICAgdjogc3RyLnNsaWNlKGN1cnNvciAtIHRva2VuTGVuZ3RoLCBjdXJzb3IpLFxuICAgICAgLy8gc3RyaW5nIHZhbHVlXG4gICAgICBzOiBjdXJzb3IgLSB0b2tlbkxlbmd0aCxcbiAgICAgIC8vIHN0YXJ0IGluZGV4XG4gICAgICBlOiBjdXJzb3IgLy8gZW5kIGluZGV4IChleGNsdWRpbmcpXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBTdHJpbmcgdG8gYW4gQXJyYXkgb2YgY2hhcmFjdGVycywgdGFraW5nIGludG8gYWNjb3VudCB0aGF0IHNvbWVcbiAqIGNoYXJhY3RlcnMgbGlrZSBlbW9qaXMgdGFrZSB1cCB0d28gc3RyaW5nIGluZGV4ZXMuXG4gKlxuICogQWRhcHRlZCBmcm9tIGNvcmUtanMgKE1JVCBsaWNlbnNlKVxuICogaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi8yZDY5Y2Y1Zjk5YWIzZWEzNDYzYzM5NWRmODFlNWExNWI2OGY0OWQ5L3BhY2thZ2VzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanNcbiAqXG4gKiBAZnVuY3Rpb24gc3RyaW5nVG9BcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybnMge3N0cmluZ1tdfVxuICovXG5mdW5jdGlvbiBzdHJpbmdUb0FycmF5KHN0cikge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgY29uc3QgbGVuID0gc3RyLmxlbmd0aDtcbiAgbGV0IGluZGV4ID0gMDtcbiAgd2hpbGUgKGluZGV4IDwgbGVuKSB7XG4gICAgbGV0IGZpcnN0ID0gc3RyLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgIGxldCBzZWNvbmQ7XG4gICAgbGV0IGNoYXIgPSBmaXJzdCA8IDB4ZDgwMCB8fCBmaXJzdCA+IDB4ZGJmZiB8fCBpbmRleCArIDEgPT09IGxlbiB8fCAoc2Vjb25kID0gc3RyLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkgPCAweGRjMDAgfHwgc2Vjb25kID4gMHhkZmZmID8gc3RyW2luZGV4XSAvLyBzaW5nbGUgY2hhcmFjdGVyXG4gICAgOiBzdHIuc2xpY2UoaW5kZXgsIGluZGV4ICsgMik7IC8vIHR3by1pbmRleCBjaGFyYWN0ZXJzXG4gICAgcmVzdWx0LnB1c2goY2hhcik7XG4gICAgaW5kZXggKz0gY2hhci5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBGYXN0IHZlcnNpb24gb2YgdHMgZnVuY3Rpb24gZm9yIHdoZW4gdHJhbnNpdGlvbiBkZWZhdWx0cyBhcmUgd2VsbCBrbm93blxuICogQHBhcmFtIHtTdGF0ZTxzdHJpbmc+fSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3N0cmluZ30gdFxuICogQHBhcmFtIHtzdHJpbmd9IGRlZmF1bHR0XG4gKiBAcGFyYW0ge1tSZWdFeHAsIFN0YXRlPHN0cmluZz5dW119IGpyXG4gKiBAcmV0dXJucyB7U3RhdGU8c3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gZmFzdHRzKHN0YXRlLCBpbnB1dCwgdCwgZGVmYXVsdHQsIGpyKSB7XG4gIGxldCBuZXh0O1xuICBjb25zdCBsZW4gPSBpbnB1dC5sZW5ndGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7XG4gICAgY29uc3QgY2hhciA9IGlucHV0W2ldO1xuICAgIGlmIChzdGF0ZS5qW2NoYXJdKSB7XG4gICAgICBuZXh0ID0gc3RhdGUualtjaGFyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dCA9IG5ldyBTdGF0ZShkZWZhdWx0dCk7XG4gICAgICBuZXh0LmpyID0ganIuc2xpY2UoKTtcbiAgICAgIHN0YXRlLmpbY2hhcl0gPSBuZXh0O1xuICAgIH1cbiAgICBzdGF0ZSA9IG5leHQ7XG4gIH1cbiAgbmV4dCA9IG5ldyBTdGF0ZSh0KTtcbiAgbmV4dC5qciA9IGpyLnNsaWNlKCk7XG4gIHN0YXRlLmpbaW5wdXRbbGVuIC0gMV1dID0gbmV4dDtcbiAgcmV0dXJuIG5leHQ7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgb2YgVG9wLUxldmVsIERvbWFpbiBuYW1lcyBlbmNvZGVkIGluIHVwZGF0ZS10bGRzLmpzIGJhY2tcbiAqIGludG8gYSBsaXN0IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0ge3N0cn0gZW5jb2RlZCBlbmNvZGVkIFRMRHMgc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyW119IG9yaWdpbmFsIFRMRHMgbGlzdFxuICovXG5mdW5jdGlvbiBkZWNvZGVUbGRzKGVuY29kZWQpIHtcbiAgY29uc3Qgd29yZHMgPSBbXTtcbiAgY29uc3Qgc3RhY2sgPSBbXTtcbiAgbGV0IGkgPSAwO1xuICBsZXQgZGlnaXRzID0gJzAxMjM0NTY3ODknO1xuICB3aGlsZSAoaSA8IGVuY29kZWQubGVuZ3RoKSB7XG4gICAgbGV0IHBvcERpZ2l0Q291bnQgPSAwO1xuICAgIHdoaWxlIChkaWdpdHMuaW5kZXhPZihlbmNvZGVkW2kgKyBwb3BEaWdpdENvdW50XSkgPj0gMCkge1xuICAgICAgcG9wRGlnaXRDb3VudCsrOyAvLyBlbmNvdW50ZXJlZCBzb21lIGRpZ2l0cywgaGF2ZSB0byBwb3AgdG8gZ28gb25lIGxldmVsIHVwIHRyaWVcbiAgICB9XG5cbiAgICBpZiAocG9wRGlnaXRDb3VudCA+IDApIHtcbiAgICAgIHdvcmRzLnB1c2goc3RhY2suam9pbignJykpOyAvLyB3aGF0ZXZlciBwcmVjZWRlZCB0aGUgcG9wIGRpZ2l0cyBtdXN0IGJlIGEgd29yZFxuICAgICAgZm9yIChsZXQgcG9wQ291bnQgPSBwYXJzZUludChlbmNvZGVkLnN1YnN0cmluZyhpLCBpICsgcG9wRGlnaXRDb3VudCksIDEwKTsgcG9wQ291bnQgPiAwOyBwb3BDb3VudC0tKSB7XG4gICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgfVxuICAgICAgaSArPSBwb3BEaWdpdENvdW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFjay5wdXNoKGVuY29kZWRbaV0pOyAvLyBkcm9wIGRvd24gYSBsZXZlbCBpbnRvIHRoZSB0cmllXG4gICAgICBpKys7XG4gICAgfVxuICB9XG4gIHJldHVybiB3b3Jkcztcbn1cblxuLyoqXG4gKiBBbiBvYmplY3Qgd2hlcmUgZWFjaCBrZXkgaXMgYSB2YWxpZCBET00gRXZlbnQgTmFtZSBzdWNoIGFzIGBjbGlja2Agb3IgYGZvY3VzYFxuICogYW5kIGVhY2ggdmFsdWUgaXMgYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbi5cbiAqXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudCNldmVudHNcbiAqIEB0eXBlZGVmIHs/eyBbZXZlbnQ6IHN0cmluZ106IEZ1bmN0aW9uIH19IEV2ZW50TGlzdGVuZXJzXG4gKi9cblxuLyoqXG4gKiBBbGwgZm9ybWF0dGVkIHByb3BlcnRpZXMgcmVxdWlyZWQgdG8gcmVuZGVyIGEgbGluaywgaW5jbHVkaW5nIGB0YWdOYW1lYCxcbiAqIGBhdHRyaWJ1dGVzYCwgYGNvbnRlbnRgIGFuZCBgZXZlbnRMaXN0ZW5lcnNgLlxuICogQHR5cGVkZWYge3sgdGFnTmFtZTogYW55LCBhdHRyaWJ1dGVzOiB7W2F0dHI6IHN0cmluZ106IGFueX0sIGNvbnRlbnQ6IHN0cmluZyxcbiAqIGV2ZW50TGlzdGVuZXJzOiBFdmVudExpc3RlbmVycyB9fSBJbnRlcm1lZGlhdGVSZXByZXNlbnRhdGlvblxuICovXG5cbi8qKlxuICogU3BlY2lmeSBlaXRoZXIgYW4gb2JqZWN0IGRlc2NyaWJlZCBieSB0aGUgdGVtcGxhdGUgdHlwZSBgT2Agb3IgYSBmdW5jdGlvbi5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgdmFsdWUgKHVzdWFsbHkgdGhlIGxpbmsncyBocmVmIGF0dHJpYnV0ZSksIHRoZVxuICogbGluayB0eXBlIChgJ3VybCdgLCBgJ2hhc2h0YWdgJywgZXRjLikgYW5kIGFuIGludGVybmFsIHRva2VuIHJlcHJlc2VudGF0aW9uXG4gKiBvZiB0aGUgbGluay4gSXQgc2hvdWxkIHJldHVybiBhbiBvYmplY3Qgb2YgdGhlIHRlbXBsYXRlIHR5cGUgYE9gXG4gKiBAdGVtcGxhdGUgT1xuICogQHR5cGVkZWYge08gfCAoKHZhbHVlOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgdG9rZW46IE11bHRpVG9rZW4pID0+IE8pfSBPcHRPYmpcbiAqL1xuXG4vKipcbiAqIFNwZWNpZnkgZWl0aGVyIGEgZnVuY3Rpb24gZGVzY3JpYmVkIGJ5IHRlbXBsYXRlIHR5cGUgYEZgIG9yIGFuIG9iamVjdC5cbiAqXG4gKiBFYWNoIGtleSBpbiB0aGUgb2JqZWN0IHNob3VsZCBiZSBhIGxpbmsgdHlwZSAoYCd1cmwnYCwgYCdoYXNodGFnYCcsIGV0Yy4pLiBFYWNoXG4gKiB2YWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbiB3aXRoIHRlbXBsYXRlIHR5cGUgYEZgIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlXG4gKiBjb3JyZXNwb25kaW5nIGxpbmsgdHlwZSBpcyBlbmNvdW50ZXJlZC5cbiAqIEB0ZW1wbGF0ZSBGXG4gKiBAdHlwZWRlZiB7RiB8IHsgW3R5cGU6IHN0cmluZ106IEZ9fSBPcHRGblxuICovXG5cbi8qKlxuICogU3BlY2lmeSBlaXRoZXIgYSB2YWx1ZSB3aXRoIHRlbXBsYXRlIHR5cGUgYFZgLCBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgVmAgb3JcbiAqIGFuIG9iamVjdCB3aGVyZSBlYWNoIHZhbHVlIHJlc29sdmVzIHRvIGBWYC5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgdmFsdWUgKHVzdWFsbHkgdGhlIGxpbmsncyBocmVmIGF0dHJpYnV0ZSksIHRoZVxuICogbGluayB0eXBlIChgJ3VybCdgLCBgJ2hhc2h0YWdgJywgZXRjLikgYW5kIGFuIGludGVybmFsIHRva2VuIHJlcHJlc2VudGF0aW9uXG4gKiBvZiB0aGUgbGluay4gSXQgc2hvdWxkIHJldHVybiBhbiBvYmplY3Qgb2YgdGhlIHRlbXBsYXRlIHR5cGUgYFZgXG4gKlxuICogRm9yIHRoZSBvYmplY3QsIGVhY2gga2V5IHNob3VsZCBiZSBhIGxpbmsgdHlwZSAoYCd1cmwnYCwgYCdoYXNodGFnYCcsIGV0Yy4pLlxuICogRWFjaCB2YWx1ZSBzaG91bGQgZWl0aGVyIGhhdmUgdHlwZSBgVmAgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgVi4gVGhpc1xuICogZnVuY3Rpb24gc2ltaWxhcmx5IHRha2VzIGEgc3RyaW5nIHZhbHVlIGFuZCBhIHRva2VuLlxuICpcbiAqIEV4YW1wbGUgdmFsaWQgdHlwZXMgZm9yIGBPcHQ8c3RyaW5nPmA6XG4gKlxuICogYGBganNcbiAqICdoZWxsbydcbiAqICh2YWx1ZSwgdHlwZSwgdG9rZW4pID0+ICd3b3JsZCdcbiAqIHsgdXJsOiAnaGVsbG8nLCBlbWFpbDogKHZhbHVlLCB0b2tlbikgPT4gJ3dvcmxkJ31cbiAqIGBgYFxuICogQHRlbXBsYXRlIFZcbiAqIEB0eXBlZGVmIHtWIHwgKCh2YWx1ZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIHRva2VuOiBNdWx0aVRva2VuKSA9PiBWKSB8IHsgW3R5cGU6IHN0cmluZ106IFYgfCAoKHZhbHVlOiBzdHJpbmcsIHRva2VuOiBNdWx0aVRva2VuKSA9PiBWKSB9fSBPcHRcbiAqL1xuXG4vKipcbiAqIFNlZSBhdmFpbGFibGUgb3B0aW9uczogaHR0cHM6Ly9saW5raWZ5LmpzLm9yZy9kb2NzL29wdGlvbnMuaHRtbFxuICogQHR5cGVkZWYge3tcbiAqIFx0ZGVmYXVsdFByb3RvY29sPzogc3RyaW5nLFxuICogIGV2ZW50cz86IE9wdE9iajxFdmVudExpc3RlbmVycz4sXG4gKiBcdGZvcm1hdD86IE9wdDxzdHJpbmc+LFxuICogXHRmb3JtYXRIcmVmPzogT3B0PHN0cmluZz4sXG4gKiBcdG5sMmJyPzogYm9vbGVhbixcbiAqIFx0dGFnTmFtZT86IE9wdDxhbnk+LFxuICogXHR0YXJnZXQ/OiBPcHQ8c3RyaW5nPixcbiAqIFx0cmVsPzogT3B0PHN0cmluZz4sXG4gKiBcdHZhbGlkYXRlPzogT3B0PGJvb2xlYW4+LFxuICogXHR0cnVuY2F0ZT86IE9wdDxudW1iZXI+LFxuICogXHRjbGFzc05hbWU/OiBPcHQ8c3RyaW5nPixcbiAqIFx0YXR0cmlidXRlcz86IE9wdE9iajwoeyBbYXR0cjogc3RyaW5nXTogYW55IH0pPixcbiAqICBpZ25vcmVUYWdzPzogc3RyaW5nW10sXG4gKiBcdHJlbmRlcj86IE9wdEZuPCgoaXI6IEludGVybWVkaWF0ZVJlcHJlc2VudGF0aW9uKSA9PiBhbnkpPlxuICogfX0gT3B0c1xuICovXG5cbi8qKlxuICogQHR5cGUgUmVxdWlyZWQ8T3B0cz5cbiAqL1xuY29uc3QgZGVmYXVsdHMgPSB7XG4gIGRlZmF1bHRQcm90b2NvbDogJ2h0dHAnLFxuICBldmVudHM6IG51bGwsXG4gIGZvcm1hdDogbm9vcCxcbiAgZm9ybWF0SHJlZjogbm9vcCxcbiAgbmwyYnI6IGZhbHNlLFxuICB0YWdOYW1lOiAnYScsXG4gIHRhcmdldDogbnVsbCxcbiAgcmVsOiBudWxsLFxuICB2YWxpZGF0ZTogdHJ1ZSxcbiAgdHJ1bmNhdGU6IEluZmluaXR5LFxuICBjbGFzc05hbWU6IG51bGwsXG4gIGF0dHJpYnV0ZXM6IG51bGwsXG4gIGlnbm9yZVRhZ3M6IFtdLFxuICByZW5kZXI6IG51bGxcbn07XG5cbi8qKlxuICogVXRpbGl0eSBjbGFzcyBmb3IgbGlua2lmeSBpbnRlcmZhY2VzIHRvIGFwcGx5IHNwZWNpZmllZFxuICoge0BsaW5rIE9wdHMgZm9ybWF0dGluZyBhbmQgcmVuZGVyaW5nIG9wdGlvbnN9LlxuICpcbiAqIEBwYXJhbSB7T3B0cyB8IE9wdGlvbnN9IFtvcHRzXSBPcHRpb24gdmFsdWUgb3ZlcnJpZGVzLlxuICogQHBhcmFtIHsoaXI6IEludGVybWVkaWF0ZVJlcHJlc2VudGF0aW9uKSA9PiBhbnl9IFtkZWZhdWx0UmVuZGVyXSAoRm9yXG4gKiAgIGludGVybmFsIHVzZSkgZGVmYXVsdCByZW5kZXIgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIGhvdyB0byBnZW5lcmF0ZSBhblxuICogICBIVE1MIGVsZW1lbnQgYmFzZWQgb24gYSBsaW5rIHRva2VuJ3MgZGVyaXZlZCB0YWdOYW1lLCBhdHRyaWJ1dGVzIGFuZCBIVE1MLlxuICogICBTaW1pbGFyIHRvIHJlbmRlciBvcHRpb25cbiAqL1xuZnVuY3Rpb24gT3B0aW9ucyhvcHRzLCBkZWZhdWx0UmVuZGVyKSB7XG4gIGlmIChkZWZhdWx0UmVuZGVyID09PSB2b2lkIDApIHtcbiAgICBkZWZhdWx0UmVuZGVyID0gbnVsbDtcbiAgfVxuICBsZXQgbyA9IGFzc2lnbih7fSwgZGVmYXVsdHMpO1xuICBpZiAob3B0cykge1xuICAgIG8gPSBhc3NpZ24obywgb3B0cyBpbnN0YW5jZW9mIE9wdGlvbnMgPyBvcHRzLm8gOiBvcHRzKTtcbiAgfVxuXG4gIC8vIEVuc3VyZSBhbGwgaWdub3JlZCB0YWdzIGFyZSB1cHBlcmNhc2VcbiAgY29uc3QgaWdub3JlZFRhZ3MgPSBvLmlnbm9yZVRhZ3M7XG4gIGNvbnN0IHVwcGVyY2FzZUlnbm9yZWRUYWdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaWdub3JlZFRhZ3MubGVuZ3RoOyBpKyspIHtcbiAgICB1cHBlcmNhc2VJZ25vcmVkVGFncy5wdXNoKGlnbm9yZWRUYWdzW2ldLnRvVXBwZXJDYXNlKCkpO1xuICB9XG4gIC8qKiBAcHJvdGVjdGVkICovXG4gIHRoaXMubyA9IG87XG4gIGlmIChkZWZhdWx0UmVuZGVyKSB7XG4gICAgdGhpcy5kZWZhdWx0UmVuZGVyID0gZGVmYXVsdFJlbmRlcjtcbiAgfVxuICB0aGlzLmlnbm9yZVRhZ3MgPSB1cHBlcmNhc2VJZ25vcmVkVGFncztcbn1cbk9wdGlvbnMucHJvdG90eXBlID0ge1xuICBvOiBkZWZhdWx0cyxcbiAgLyoqXG4gICAqIEB0eXBlIHN0cmluZ1tdXG4gICAqL1xuICBpZ25vcmVUYWdzOiBbXSxcbiAgLyoqXG4gICAqIEBwYXJhbSB7SW50ZXJtZWRpYXRlUmVwcmVzZW50YXRpb259IGlyXG4gICAqIEByZXR1cm5zIHthbnl9XG4gICAqL1xuICBkZWZhdWx0UmVuZGVyKGlyKSB7XG4gICAgcmV0dXJuIGlyO1xuICB9LFxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIG9yIGZhbHNlIGJhc2VkIG9uIHdoZXRoZXIgYSB0b2tlbiBzaG91bGQgYmUgZGlzcGxheWVkIGFzIGFcbiAgICogbGluayBiYXNlZCBvbiB0aGUgdXNlciBvcHRpb25zLlxuICAgKiBAcGFyYW0ge011bHRpVG9rZW59IHRva2VuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY2hlY2sodG9rZW4pIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoJ3ZhbGlkYXRlJywgdG9rZW4udG9TdHJpbmcoKSwgdG9rZW4pO1xuICB9LFxuICAvLyBQcml2YXRlIG1ldGhvZHNcblxuICAvKipcbiAgICogUmVzb2x2ZSBhbiBvcHRpb24ncyB2YWx1ZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIG9wdGlvbiBhbmQgdGhlIGdpdmVuXG4gICAqIHBhcmFtcy4gSWYgb3BlcmF0b3IgYW5kIHRva2VuIGFyZSBzcGVjaWZpZWQgYW5kIHRoZSB0YXJnZXQgb3B0aW9uIGlzXG4gICAqIGNhbGxhYmxlLCBhdXRvbWF0aWNhbGx5IGNhbGxzIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudC5cbiAgICogQHRlbXBsYXRlIHtrZXlvZiBPcHRzfSBLXG4gICAqIEBwYXJhbSB7S30ga2V5IE5hbWUgb2Ygb3B0aW9uIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wZXJhdG9yXSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgdGFyZ2V0IG9wdGlvbiBpZiBpdCdzIGFcbiAgICogZnVuY3Rpb24uIElmIG5vdCBzcGVjaWZpZWQsIFJBVyBmdW5jdGlvbiB2YWx1ZSBnZXRzIHJldHVybmVkXG4gICAqIEBwYXJhbSB7TXVsdGlUb2tlbn0gW3Rva2VuXSBUaGUgdG9rZW4gZnJvbSBsaW5raWZ5LnRva2VuaXplXG4gICAqIEByZXR1cm5zIHtPcHRzW0tdIHwgYW55fVxuICAgKi9cbiAgZ2V0KGtleSwgb3BlcmF0b3IsIHRva2VuKSB7XG4gICAgY29uc3QgaXNDYWxsYWJsZSA9IG9wZXJhdG9yICE9IG51bGw7XG4gICAgbGV0IG9wdGlvbiA9IHRoaXMub1trZXldO1xuICAgIGlmICghb3B0aW9uKSB7XG4gICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG9wdGlvbiA9IHRva2VuLnQgaW4gb3B0aW9uID8gb3B0aW9uW3Rva2VuLnRdIDogZGVmYXVsdHNba2V5XTtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnZnVuY3Rpb24nICYmIGlzQ2FsbGFibGUpIHtcbiAgICAgICAgb3B0aW9uID0gb3B0aW9uKG9wZXJhdG9yLCB0b2tlbik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnZnVuY3Rpb24nICYmIGlzQ2FsbGFibGUpIHtcbiAgICAgIG9wdGlvbiA9IG9wdGlvbihvcGVyYXRvciwgdG9rZW4udCwgdG9rZW4pO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uO1xuICB9LFxuICAvKipcbiAgICogQHRlbXBsYXRlIHtrZXlvZiBPcHRzfSBMXG4gICAqIEBwYXJhbSB7TH0ga2V5IE5hbWUgb2Ygb3B0aW9ucyBvYmplY3QgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3BlcmF0b3JdXG4gICAqIEBwYXJhbSB7TXVsdGlUb2tlbn0gW3Rva2VuXVxuICAgKiBAcmV0dXJucyB7T3B0c1tMXSB8IGFueX1cbiAgICovXG4gIGdldE9iaihrZXksIG9wZXJhdG9yLCB0b2tlbikge1xuICAgIGxldCBvYmogPSB0aGlzLm9ba2V5XTtcbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJyAmJiBvcGVyYXRvciAhPSBudWxsKSB7XG4gICAgICBvYmogPSBvYmoob3BlcmF0b3IsIHRva2VuLnQsIHRva2VuKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIGdpdmVuIHRva2VuIHRvIGEgcmVuZGVyZWQgZWxlbWVudCB0aGF0IG1heSBiZSBhZGRlZCB0byB0aGVcbiAgICogY2FsbGluZy1pbnRlcmZhY2UncyBET01cbiAgICogQHBhcmFtIHtNdWx0aVRva2VufSB0b2tlbiBUb2tlbiB0byByZW5kZXIgdG8gYW4gSFRNTCBlbGVtZW50XG4gICAqIEByZXR1cm5zIHthbnl9IFJlbmRlciByZXN1bHQ7IGUuZy4sIEhUTUwgc3RyaW5nLCBET00gZWxlbWVudCwgUmVhY3RcbiAgICogICBDb21wb25lbnQsIGV0Yy5cbiAgICovXG4gIHJlbmRlcih0b2tlbikge1xuICAgIGNvbnN0IGlyID0gdG9rZW4ucmVuZGVyKHRoaXMpOyAvLyBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb25cbiAgICBjb25zdCByZW5kZXJGbiA9IHRoaXMuZ2V0KCdyZW5kZXInLCBudWxsLCB0b2tlbikgfHwgdGhpcy5kZWZhdWx0UmVuZGVyO1xuICAgIHJldHVybiByZW5kZXJGbihpciwgdG9rZW4udCwgdG9rZW4pO1xuICB9XG59O1xuZnVuY3Rpb24gbm9vcCh2YWwpIHtcbiAgcmV0dXJuIHZhbDtcbn1cblxudmFyIG9wdGlvbnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0ZGVmYXVsdHM6IGRlZmF1bHRzLFxuXHRPcHRpb25zOiBPcHRpb25zLFxuXHRhc3NpZ246IGFzc2lnblxufSk7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0TXVsdGktVG9rZW5zXG5cdFRva2VucyBjb21wb3NlZCBvZiBhcnJheXMgb2YgVGV4dFRva2Vuc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtUb2tlbltdfSB0b2tlbnNcbiAqL1xuZnVuY3Rpb24gTXVsdGlUb2tlbih2YWx1ZSwgdG9rZW5zKSB7XG4gIHRoaXMudCA9ICd0b2tlbic7XG4gIHRoaXMudiA9IHZhbHVlO1xuICB0aGlzLnRrID0gdG9rZW5zO1xufVxuXG4vKipcbiAqIEFic3RyYWN0IGNsYXNzIHVzZWQgZm9yIG1hbnVmYWN0dXJpbmcgdG9rZW5zIG9mIHRleHQgdG9rZW5zLiBUaGF0IGlzIHJhdGhlclxuICogdGhhbiB0aGUgdmFsdWUgZm9yIGEgdG9rZW4gYmVpbmcgYSBzbWFsbCBzdHJpbmcgb2YgdGV4dCwgaXQncyB2YWx1ZSBhbiBhcnJheVxuICogb2YgdGV4dCB0b2tlbnMuXG4gKlxuICogVXNlZCBmb3IgZ3JvdXBpbmcgdG9nZXRoZXIgVVJMcywgZW1haWxzLCBoYXNodGFncywgYW5kIG90aGVyIHBvdGVudGlhbFxuICogY3JlYXRpb25zLlxuICogQGNsYXNzIE11bHRpVG9rZW5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gdlxuICogQHByb3BlcnR5IHtUb2tlbltdfSB0a1xuICogQGFic3RyYWN0XG4gKi9cbk11bHRpVG9rZW4ucHJvdG90eXBlID0ge1xuICBpc0xpbms6IGZhbHNlLFxuICAvKipcbiAgICogUmV0dXJuIHRoZSBzdHJpbmcgdGhpcyB0b2tlbiByZXByZXNlbnRzLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy52O1xuICB9LFxuICAvKipcbiAgICogV2hhdCBzaG91bGQgdGhlIHZhbHVlIGZvciB0aGlzIHRva2VuIGJlIGluIHRoZSBgaHJlZmAgSFRNTCBhdHRyaWJ1dGU/XG4gICAqIFJldHVybnMgdGhlIGAudG9TdHJpbmdgIHZhbHVlIGJ5IGRlZmF1bHQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc2NoZW1lXVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICovXG4gIHRvSHJlZihzY2hlbWUpIHtcbiAgICByZXR1cm4gdGhpcy50b1N0cmluZygpO1xuICB9LFxuICAvKipcbiAgICogQHBhcmFtIHtPcHRpb25zfSBvcHRpb25zIEZvcm1hdHRpbmcgb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgdG9Gb3JtYXR0ZWRTdHJpbmcob3B0aW9ucykge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMudG9TdHJpbmcoKTtcbiAgICBjb25zdCB0cnVuY2F0ZSA9IG9wdGlvbnMuZ2V0KCd0cnVuY2F0ZScsIHZhbCwgdGhpcyk7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gb3B0aW9ucy5nZXQoJ2Zvcm1hdCcsIHZhbCwgdGhpcyk7XG4gICAgcmV0dXJuIHRydW5jYXRlICYmIGZvcm1hdHRlZC5sZW5ndGggPiB0cnVuY2F0ZSA/IGZvcm1hdHRlZC5zdWJzdHJpbmcoMCwgdHJ1bmNhdGUpICsgJ+KApicgOiBmb3JtYXR0ZWQ7XG4gIH0sXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbnN9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHRvRm9ybWF0dGVkSHJlZihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuZ2V0KCdmb3JtYXRIcmVmJywgdGhpcy50b0hyZWYob3B0aW9ucy5nZXQoJ2RlZmF1bHRQcm90b2NvbCcpKSwgdGhpcyk7XG4gIH0sXG4gIC8qKlxuICAgKiBUaGUgc3RhcnQgaW5kZXggb2YgdGhpcyB0b2tlbiBpbiB0aGUgb3JpZ2luYWwgaW5wdXQgc3RyaW5nXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBzdGFydEluZGV4KCkge1xuICAgIHJldHVybiB0aGlzLnRrWzBdLnM7XG4gIH0sXG4gIC8qKlxuICAgKiBUaGUgZW5kIGluZGV4IG9mIHRoaXMgdG9rZW4gaW4gdGhlIG9yaWdpbmFsIGlucHV0IHN0cmluZyAodXAgdG8gdGhpc1xuICAgKiBpbmRleCBidXQgbm90IGluY2x1ZGluZyBpdClcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGVuZEluZGV4KCkge1xuICAgIHJldHVybiB0aGlzLnRrW3RoaXMudGsubGVuZ3RoIC0gMV0uZTtcbiAgfSxcbiAgLyoqXG4gIFx0UmV0dXJucyBhbiBvYmplY3QgIG9mIHJlbGV2YW50IHZhbHVlcyBmb3IgdGhpcyB0b2tlbiwgd2hpY2ggaW5jbHVkZXMga2V5c1xuICBcdCogdHlwZSAtIEtpbmQgb2YgdG9rZW4gKCd1cmwnLCAnZW1haWwnLCBldGMuKVxuICBcdCogdmFsdWUgLSBPcmlnaW5hbCB0ZXh0XG4gIFx0KiBocmVmIC0gVGhlIHZhbHVlIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBhbmNob3IgdGFnJ3MgaHJlZlxuICBcdFx0YXR0cmlidXRlXG4gIFx0XHRAbWV0aG9kIHRvT2JqZWN0XG4gIFx0QHBhcmFtIHtzdHJpbmd9IFtwcm90b2NvbF0gYCdodHRwJ2AgYnkgZGVmYXVsdFxuICAqL1xuICB0b09iamVjdChwcm90b2NvbCkge1xuICAgIGlmIChwcm90b2NvbCA9PT0gdm9pZCAwKSB7XG4gICAgICBwcm90b2NvbCA9IGRlZmF1bHRzLmRlZmF1bHRQcm90b2NvbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHRoaXMudCxcbiAgICAgIHZhbHVlOiB0aGlzLnRvU3RyaW5nKCksXG4gICAgICBpc0xpbms6IHRoaXMuaXNMaW5rLFxuICAgICAgaHJlZjogdGhpcy50b0hyZWYocHJvdG9jb2wpLFxuICAgICAgc3RhcnQ6IHRoaXMuc3RhcnRJbmRleCgpLFxuICAgICAgZW5kOiB0aGlzLmVuZEluZGV4KClcbiAgICB9O1xuICB9LFxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb25zfSBvcHRpb25zIEZvcm1hdHRpbmcgb3B0aW9uXG4gICAqL1xuICB0b0Zvcm1hdHRlZE9iamVjdChvcHRpb25zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHRoaXMudCxcbiAgICAgIHZhbHVlOiB0aGlzLnRvRm9ybWF0dGVkU3RyaW5nKG9wdGlvbnMpLFxuICAgICAgaXNMaW5rOiB0aGlzLmlzTGluayxcbiAgICAgIGhyZWY6IHRoaXMudG9Gb3JtYXR0ZWRIcmVmKG9wdGlvbnMpLFxuICAgICAgc3RhcnQ6IHRoaXMuc3RhcnRJbmRleCgpLFxuICAgICAgZW5kOiB0aGlzLmVuZEluZGV4KClcbiAgICB9O1xuICB9LFxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHRva2VuIHNob3VsZCBiZSByZW5kZXJlZCBhcyBhIGxpbmsgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBvcHRpb25zXG4gICAqIEBwYXJhbSB7T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHZhbGlkYXRlKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5nZXQoJ3ZhbGlkYXRlJywgdGhpcy50b1N0cmluZygpLCB0aGlzKTtcbiAgfSxcbiAgLyoqXG4gICAqIFJldHVybiBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIGhvdyB0aGlzIGxpbmsgc2hvdWxkIGJlIHJlbmRlcmVkLlxuICAgKiBAcGFyYW0ge09wdGlvbnN9IG9wdGlvbnMgRm9ybWF0dGlubmcgb3B0aW9uc1xuICAgKi9cbiAgcmVuZGVyKG9wdGlvbnMpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXM7XG4gICAgY29uc3QgaHJlZiA9IHRoaXMudG9IcmVmKG9wdGlvbnMuZ2V0KCdkZWZhdWx0UHJvdG9jb2wnKSk7XG4gICAgY29uc3QgZm9ybWF0dGVkSHJlZiA9IG9wdGlvbnMuZ2V0KCdmb3JtYXRIcmVmJywgaHJlZiwgdGhpcyk7XG4gICAgY29uc3QgdGFnTmFtZSA9IG9wdGlvbnMuZ2V0KCd0YWdOYW1lJywgaHJlZiwgdG9rZW4pO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnRvRm9ybWF0dGVkU3RyaW5nKG9wdGlvbnMpO1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBvcHRpb25zLmdldCgnY2xhc3NOYW1lJywgaHJlZiwgdG9rZW4pO1xuICAgIGNvbnN0IHRhcmdldCA9IG9wdGlvbnMuZ2V0KCd0YXJnZXQnLCBocmVmLCB0b2tlbik7XG4gICAgY29uc3QgcmVsID0gb3B0aW9ucy5nZXQoJ3JlbCcsIGhyZWYsIHRva2VuKTtcbiAgICBjb25zdCBhdHRycyA9IG9wdGlvbnMuZ2V0T2JqKCdhdHRyaWJ1dGVzJywgaHJlZiwgdG9rZW4pO1xuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXJzID0gb3B0aW9ucy5nZXRPYmooJ2V2ZW50cycsIGhyZWYsIHRva2VuKTtcbiAgICBhdHRyaWJ1dGVzLmhyZWYgPSBmb3JtYXR0ZWRIcmVmO1xuICAgIGlmIChjbGFzc05hbWUpIHtcbiAgICAgIGF0dHJpYnV0ZXMuY2xhc3MgPSBjbGFzc05hbWU7XG4gICAgfVxuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGF0dHJpYnV0ZXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIH1cbiAgICBpZiAocmVsKSB7XG4gICAgICBhdHRyaWJ1dGVzLnJlbCA9IHJlbDtcbiAgICB9XG4gICAgaWYgKGF0dHJzKSB7XG4gICAgICBhc3NpZ24oYXR0cmlidXRlcywgYXR0cnMpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdGFnTmFtZSxcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBjb250ZW50LFxuICAgICAgZXZlbnRMaXN0ZW5lcnNcbiAgICB9O1xuICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyB0b2tlbiB0aGF0IGNhbiBiZSBlbWl0dGVkIGJ5IHRoZSBwYXJzZXIgc3RhdGUgbWFjaGluZVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgcmVhZGFibGUgdHlwZSBvZiB0aGUgdG9rZW5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBwcm9wZXJ0aWVzIHRvIGFzc2lnbiBvciBvdmVycmlkZSwgaW5jbHVkaW5nIGlzTGluayA9IHRydWUgb3IgZmFsc2VcbiAqIEByZXR1cm5zIHtuZXcgKHZhbHVlOiBzdHJpbmcsIHRva2VuczogVG9rZW5bXSkgPT4gTXVsdGlUb2tlbn0gbmV3IHRva2VuIGNsYXNzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRva2VuQ2xhc3ModHlwZSwgcHJvcHMpIHtcbiAgY2xhc3MgVG9rZW4gZXh0ZW5kcyBNdWx0aVRva2VuIHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSwgdG9rZW5zKSB7XG4gICAgICBzdXBlcih2YWx1ZSwgdG9rZW5zKTtcbiAgICAgIHRoaXMudCA9IHR5cGU7XG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgcCBpbiBwcm9wcykge1xuICAgIFRva2VuLnByb3RvdHlwZVtwXSA9IHByb3BzW3BdO1xuICB9XG4gIFRva2VuLnQgPSB0eXBlO1xuICByZXR1cm4gVG9rZW47XG59XG5cbi8qKlxuXHRSZXByZXNlbnRzIGEgbGlzdCBvZiB0b2tlbnMgbWFraW5nIHVwIGEgdmFsaWQgZW1haWwgYWRkcmVzc1xuKi9cbmNvbnN0IEVtYWlsID0gY3JlYXRlVG9rZW5DbGFzcygnZW1haWwnLCB7XG4gIGlzTGluazogdHJ1ZSxcbiAgdG9IcmVmKCkge1xuICAgIHJldHVybiAnbWFpbHRvOicgKyB0aGlzLnRvU3RyaW5nKCk7XG4gIH1cbn0pO1xuXG4vKipcblx0UmVwcmVzZW50cyBzb21lIHBsYWluIHRleHRcbiovXG5jb25zdCBUZXh0ID0gY3JlYXRlVG9rZW5DbGFzcygndGV4dCcpO1xuXG4vKipcblx0TXVsdGktbGluZWJyZWFrIHRva2VuIC0gcmVwcmVzZW50cyBhIGxpbmUgYnJlYWtcblx0QGNsYXNzIE5sXG4qL1xuY29uc3QgTmwgPSBjcmVhdGVUb2tlbkNsYXNzKCdubCcpO1xuXG4vKipcblx0UmVwcmVzZW50cyBhIGxpc3Qgb2YgdGV4dCB0b2tlbnMgbWFraW5nIHVwIGEgdmFsaWQgVVJMXG5cdEBjbGFzcyBVcmxcbiovXG5jb25zdCBVcmwgPSBjcmVhdGVUb2tlbkNsYXNzKCd1cmwnLCB7XG4gIGlzTGluazogdHJ1ZSxcbiAgLyoqXG4gIFx0TG93ZXJjYXNlcyByZWxldmFudCBwYXJ0cyBvZiB0aGUgZG9tYWluIGFuZCBhZGRzIHRoZSBwcm90b2NvbCBpZlxuICBcdHJlcXVpcmVkLiBOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdCBlc2NhcGUgdW5zYWZlIEhUTUwgY2hhcmFjdGVycyBpbiB0aGVcbiAgXHRVUkwuXG4gIFx0XHRAcGFyYW0ge3N0cmluZ30gW3NjaGVtZV0gZGVmYXVsdCBzY2hlbWUgKGUuZy4sICdodHRwcycpXG4gIFx0QHJldHVybiB7c3RyaW5nfSB0aGUgZnVsbCBocmVmXG4gICovXG4gIHRvSHJlZihzY2hlbWUpIHtcbiAgICBpZiAoc2NoZW1lID09PSB2b2lkIDApIHtcbiAgICAgIHNjaGVtZSA9IGRlZmF1bHRzLmRlZmF1bHRQcm90b2NvbDtcbiAgICB9XG4gICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBoYXMgYSBwcmVmaXggc2NoZW1lXG4gICAgcmV0dXJuIHRoaXMuaGFzUHJvdG9jb2woKSA/IHRoaXMudiA6IGAke3NjaGVtZX06Ly8ke3RoaXMudn1gO1xuICB9LFxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGlzIFVSTCB0b2tlbiBoYXMgYSBwcm90b2NvbFxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgaGFzUHJvdG9jb2woKSB7XG4gICAgY29uc3QgdG9rZW5zID0gdGhpcy50aztcbiAgICByZXR1cm4gdG9rZW5zLmxlbmd0aCA+PSAyICYmIHRva2Vuc1swXS50ICE9PSBMT0NBTEhPU1QgJiYgdG9rZW5zWzFdLnQgPT09IENPTE9OO1xuICB9XG59KTtcblxudmFyIG11bHRpID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuXHRfX3Byb3RvX186IG51bGwsXG5cdE11bHRpVG9rZW46IE11bHRpVG9rZW4sXG5cdEJhc2U6IE11bHRpVG9rZW4sXG5cdGNyZWF0ZVRva2VuQ2xhc3M6IGNyZWF0ZVRva2VuQ2xhc3MsXG5cdEVtYWlsOiBFbWFpbCxcblx0VGV4dDogVGV4dCxcblx0Tmw6IE5sLFxuXHRVcmw6IFVybFxufSk7XG5cbi8qKlxuXHROb3QgZXhhY3RseSBwYXJzZXIsIG1vcmUgbGlrZSB0aGUgc2Vjb25kLXN0YWdlIHNjYW5uZXIgKGFsdGhvdWdoIHdlIGNhblxuXHR0aGVvcmV0aWNhbGx5IGhvdHN3YXAgdGhlIGNvZGUgaGVyZSB3aXRoIGEgcmVhbCBwYXJzZXIgaW4gdGhlIGZ1dHVyZS4uLiBidXRcblx0Zm9yIGEgbGl0dGxlIFVSTC1maW5kaW5nIHV0aWxpdHkgYWJzdHJhY3Qgc3ludGF4IHRyZWVzIG1heSBiZSBhIGxpdHRsZVxuXHRvdmVya2lsbCkuXG5cblx0VVJMIGZvcm1hdDogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VUklfc2NoZW1lXG5cdEVtYWlsIGZvcm1hdDogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FbWFpbEFkZHJlc3MgKGxpbmtzIHRvIFJGQyBpblxuXHRyZWZlcmVuY2UpXG5cblx0QG1vZHVsZSBsaW5raWZ5XG5cdEBzdWJtb2R1bGUgcGFyc2VyXG5cdEBtYWluIHJ1blxuKi9cbmNvbnN0IG1ha2VTdGF0ZSA9IGFyZyA9PiBuZXcgU3RhdGUoYXJnKTtcblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgcGFyc2VyIG11bHRpIHRva2VuLWJhc2VkIHN0YXRlIG1hY2hpbmVcbiAqIEBwYXJhbSB7eyBncm91cHM6IENvbGxlY3Rpb25zPHN0cmluZz4gfX0gdG9rZW5zXG4gKi9cbmZ1bmN0aW9uIGluaXQkMShfcmVmKSB7XG4gIGxldCB7XG4gICAgZ3JvdXBzXG4gIH0gPSBfcmVmO1xuICAvLyBUeXBlcyBvZiBjaGFyYWN0ZXJzIHRoZSBVUkwgY2FuIGRlZmluaXRlbHkgZW5kIGluXG4gIGNvbnN0IHFzQWNjZXB0aW5nID0gZ3JvdXBzLmRvbWFpbi5jb25jYXQoW0FNUEVSU0FORCwgQVNURVJJU0ssIEFULCBCQUNLU0xBU0gsIEJBQ0tUSUNLLCBDQVJFVCwgRE9MTEFSLCBFUVVBTFMsIEhZUEhFTiwgTlVNLCBQRVJDRU5ULCBQSVBFLCBQTFVTLCBQT1VORCwgU0xBU0gsIFNZTSwgVElMREUsIFVOREVSU0NPUkVdKTtcblxuICAvLyBUeXBlcyBvZiB0b2tlbnMgdGhhdCBjYW4gZm9sbG93IGEgVVJMIGFuZCBiZSBwYXJ0IG9mIHRoZSBxdWVyeSBzdHJpbmdcbiAgLy8gYnV0IGNhbm5vdCBiZSB0aGUgdmVyeSBsYXN0IGNoYXJhY3RlcnNcbiAgLy8gQ2hhcmFjdGVycyB0aGF0IGNhbm5vdCBhcHBlYXIgaW4gdGhlIFVSTCBhdCBhbGwgc2hvdWxkIGJlIGV4Y2x1ZGVkXG4gIGNvbnN0IHFzTm9uQWNjZXB0aW5nID0gW0FQT1NUUk9QSEUsIENMT1NFQU5HTEVCUkFDS0VULCBDTE9TRUJSQUNFLCBDTE9TRUJSQUNLRVQsIENMT1NFUEFSRU4sIENPTE9OLCBDT01NQSwgRE9ULCBFWENMQU1BVElPTiwgT1BFTkFOR0xFQlJBQ0tFVCwgT1BFTkJSQUNFLCBPUEVOQlJBQ0tFVCwgT1BFTlBBUkVOLCBRVUVSWSwgUVVPVEUsIFNFTUldO1xuXG4gIC8vIEZvciBhZGRyZXNzZXMgd2l0aG91dCB0aGUgbWFpbHRvIHByZWZpeFxuICAvLyBUb2tlbnMgYWxsb3dlZCBpbiB0aGUgbG9jYWxwYXJ0IG9mIHRoZSBlbWFpbFxuICBjb25zdCBsb2NhbHBhcnRBY2NlcHRpbmcgPSBbQU1QRVJTQU5ELCBBUE9TVFJPUEhFLCBBU1RFUklTSywgQkFDS1NMQVNILCBCQUNLVElDSywgQ0FSRVQsIENMT1NFQlJBQ0UsIERPTExBUiwgRVFVQUxTLCBIWVBIRU4sIE9QRU5CUkFDRSwgUEVSQ0VOVCwgUElQRSwgUExVUywgUE9VTkQsIFFVRVJZLCBTTEFTSCwgU1lNLCBUSUxERSwgVU5ERVJTQ09SRV07XG5cbiAgLy8gVGhlIHVuaXZlcnNhbCBzdGFydGluZyBzdGF0ZS5cbiAgLyoqXG4gICAqIEB0eXBlIFN0YXRlPFRva2VuPlxuICAgKi9cbiAgY29uc3QgU3RhcnQgPSBtYWtlU3RhdGUoKTtcbiAgY29uc3QgTG9jYWxwYXJ0ID0gdHQoU3RhcnQsIFRJTERFKTsgLy8gTG9jYWwgcGFydCBvZiB0aGUgZW1haWwgYWRkcmVzc1xuICB0YShMb2NhbHBhcnQsIGxvY2FscGFydEFjY2VwdGluZywgTG9jYWxwYXJ0KTtcbiAgdGEoTG9jYWxwYXJ0LCBncm91cHMuZG9tYWluLCBMb2NhbHBhcnQpO1xuICBjb25zdCBEb21haW4gPSBtYWtlU3RhdGUoKSxcbiAgICBTY2hlbWUgPSBtYWtlU3RhdGUoKSxcbiAgICBTbGFzaFNjaGVtZSA9IG1ha2VTdGF0ZSgpO1xuICB0YShTdGFydCwgZ3JvdXBzLmRvbWFpbiwgRG9tYWluKTsgLy8gcGFyc2VkIHN0cmluZyBlbmRzIHdpdGggYSBwb3RlbnRpYWwgZG9tYWluIG5hbWUgKEEpXG4gIHRhKFN0YXJ0LCBncm91cHMuc2NoZW1lLCBTY2hlbWUpOyAvLyBlLmcuLCAnbWFpbHRvJ1xuICB0YShTdGFydCwgZ3JvdXBzLnNsYXNoc2NoZW1lLCBTbGFzaFNjaGVtZSk7IC8vIGUuZy4sICdodHRwJ1xuXG4gIHRhKERvbWFpbiwgbG9jYWxwYXJ0QWNjZXB0aW5nLCBMb2NhbHBhcnQpO1xuICB0YShEb21haW4sIGdyb3Vwcy5kb21haW4sIERvbWFpbik7XG4gIGNvbnN0IExvY2FscGFydEF0ID0gdHQoRG9tYWluLCBBVCk7IC8vIExvY2FsIHBhcnQgb2YgdGhlIGVtYWlsIGFkZHJlc3MgcGx1cyBAXG5cbiAgdHQoTG9jYWxwYXJ0LCBBVCwgTG9jYWxwYXJ0QXQpOyAvLyBjbG9zZSB0byBhbiBlbWFpbCBhZGRyZXNzIG5vd1xuXG4gIC8vIExvY2FsIHBhcnQgb2YgYW4gZW1haWwgYWRkcmVzcyBjYW4gYmUgZS5nLiAnaHR0cCcgb3IgJ21haWx0bydcbiAgdHQoU2NoZW1lLCBBVCwgTG9jYWxwYXJ0QXQpO1xuICB0dChTbGFzaFNjaGVtZSwgQVQsIExvY2FscGFydEF0KTtcbiAgY29uc3QgTG9jYWxwYXJ0RG90ID0gdHQoTG9jYWxwYXJ0LCBET1QpOyAvLyBMb2NhbCBwYXJ0IG9mIHRoZSBlbWFpbCBhZGRyZXNzIHBsdXMgJy4nIChsb2NhbHBhcnQgY2Fubm90IGVuZCBpbiAuKVxuICB0YShMb2NhbHBhcnREb3QsIGxvY2FscGFydEFjY2VwdGluZywgTG9jYWxwYXJ0KTtcbiAgdGEoTG9jYWxwYXJ0RG90LCBncm91cHMuZG9tYWluLCBMb2NhbHBhcnQpO1xuICBjb25zdCBFbWFpbERvbWFpbiA9IG1ha2VTdGF0ZSgpO1xuICB0YShMb2NhbHBhcnRBdCwgZ3JvdXBzLmRvbWFpbiwgRW1haWxEb21haW4pOyAvLyBwYXJzZWQgc3RyaW5nIHN0YXJ0cyB3aXRoIGxvY2FsIGVtYWlsIGluZm8gKyBAIHdpdGggYSBwb3RlbnRpYWwgZG9tYWluIG5hbWVcbiAgdGEoRW1haWxEb21haW4sIGdyb3Vwcy5kb21haW4sIEVtYWlsRG9tYWluKTtcbiAgY29uc3QgRW1haWxEb21haW5Eb3QgPSB0dChFbWFpbERvbWFpbiwgRE9UKTsgLy8gZG9tYWluIGZvbGxvd2VkIGJ5IERPVFxuICB0YShFbWFpbERvbWFpbkRvdCwgZ3JvdXBzLmRvbWFpbiwgRW1haWxEb21haW4pO1xuICBjb25zdCBFbWFpbCQxID0gbWFrZVN0YXRlKEVtYWlsKTsgLy8gUG9zc2libGUgZW1haWwgYWRkcmVzcyAoY291bGQgaGF2ZSBtb3JlIHRsZHMpXG4gIHRhKEVtYWlsRG9tYWluRG90LCBncm91cHMudGxkLCBFbWFpbCQxKTtcbiAgdGEoRW1haWxEb21haW5Eb3QsIGdyb3Vwcy51dGxkLCBFbWFpbCQxKTtcbiAgdHQoTG9jYWxwYXJ0QXQsIExPQ0FMSE9TVCwgRW1haWwkMSk7XG5cbiAgLy8gSHlwaGVuIGNhbiBqdW1wIGJhY2sgdG8gYSBkb21haW4gbmFtZVxuICBjb25zdCBFbWFpbERvbWFpbkh5cGhlbiA9IHR0KEVtYWlsRG9tYWluLCBIWVBIRU4pOyAvLyBwYXJzZWQgc3RyaW5nIHN0YXJ0cyB3aXRoIGxvY2FsIGVtYWlsIGluZm8gKyBAIHdpdGggYSBwb3RlbnRpYWwgZG9tYWluIG5hbWVcbiAgdGEoRW1haWxEb21haW5IeXBoZW4sIGdyb3Vwcy5kb21haW4sIEVtYWlsRG9tYWluKTtcbiAgdGEoRW1haWwkMSwgZ3JvdXBzLmRvbWFpbiwgRW1haWxEb21haW4pO1xuICB0dChFbWFpbCQxLCBET1QsIEVtYWlsRG9tYWluRG90KTtcbiAgdHQoRW1haWwkMSwgSFlQSEVOLCBFbWFpbERvbWFpbkh5cGhlbik7XG5cbiAgLy8gRmluYWwgcG9zc2libGUgZW1haWwgc3RhdGVzXG4gIGNvbnN0IEVtYWlsQ29sb24gPSB0dChFbWFpbCQxLCBDT0xPTik7IC8vIFVSTCBmb2xsb3dlZCBieSBjb2xvbiAocG90ZW50aWFsIHBvcnQgbnVtYmVyIGhlcmUpXG4gIC8qY29uc3QgRW1haWxDb2xvblBvcnQgPSAqL1xuICB0YShFbWFpbENvbG9uLCBncm91cHMubnVtZXJpYywgRW1haWwpOyAvLyBVUkwgZm9sbG93ZWQgYnkgY29sb24gYW5kIHBvcnQgbnVtbmVyXG5cbiAgLy8gQWNjb3VudCBmb3IgZG90cyBhbmQgaHlwaGVucy4gSHlwaGVucyBhcmUgdXN1YWxseSBwYXJ0cyBvZiBkb21haW4gbmFtZXNcbiAgLy8gKGJ1dCBub3QgVExEcylcbiAgY29uc3QgRG9tYWluSHlwaGVuID0gdHQoRG9tYWluLCBIWVBIRU4pOyAvLyBkb21haW4gZm9sbG93ZWQgYnkgaHlwaGVuXG4gIGNvbnN0IERvbWFpbkRvdCA9IHR0KERvbWFpbiwgRE9UKTsgLy8gZG9tYWluIGZvbGxvd2VkIGJ5IERPVFxuICB0YShEb21haW5IeXBoZW4sIGdyb3Vwcy5kb21haW4sIERvbWFpbik7XG4gIHRhKERvbWFpbkRvdCwgbG9jYWxwYXJ0QWNjZXB0aW5nLCBMb2NhbHBhcnQpO1xuICB0YShEb21haW5Eb3QsIGdyb3Vwcy5kb21haW4sIERvbWFpbik7XG4gIGNvbnN0IERvbWFpbkRvdFRsZCA9IG1ha2VTdGF0ZShVcmwpOyAvLyBTaW1wbGVzdCBwb3NzaWJsZSBVUkwgd2l0aCBubyBxdWVyeSBzdHJpbmdcbiAgdGEoRG9tYWluRG90LCBncm91cHMudGxkLCBEb21haW5Eb3RUbGQpO1xuICB0YShEb21haW5Eb3QsIGdyb3Vwcy51dGxkLCBEb21haW5Eb3RUbGQpO1xuICB0YShEb21haW5Eb3RUbGQsIGdyb3Vwcy5kb21haW4sIERvbWFpbik7XG4gIHRhKERvbWFpbkRvdFRsZCwgbG9jYWxwYXJ0QWNjZXB0aW5nLCBMb2NhbHBhcnQpO1xuICB0dChEb21haW5Eb3RUbGQsIERPVCwgRG9tYWluRG90KTtcbiAgdHQoRG9tYWluRG90VGxkLCBIWVBIRU4sIERvbWFpbkh5cGhlbik7XG4gIHR0KERvbWFpbkRvdFRsZCwgQVQsIExvY2FscGFydEF0KTtcbiAgY29uc3QgRG9tYWluRG90VGxkQ29sb24gPSB0dChEb21haW5Eb3RUbGQsIENPTE9OKTsgLy8gVVJMIGZvbGxvd2VkIGJ5IGNvbG9uIChwb3RlbnRpYWwgcG9ydCBudW1iZXIgaGVyZSlcbiAgY29uc3QgRG9tYWluRG90VGxkQ29sb25Qb3J0ID0gbWFrZVN0YXRlKFVybCk7IC8vIFRMRCBmb2xsb3dlZCBieSBhIHBvcnQgbnVtYmVyXG4gIHRhKERvbWFpbkRvdFRsZENvbG9uLCBncm91cHMubnVtZXJpYywgRG9tYWluRG90VGxkQ29sb25Qb3J0KTtcblxuICAvLyBMb25nIFVSTCB3aXRoIG9wdGlvbmFsIHBvcnQgYW5kIG1heWJlIHF1ZXJ5IHN0cmluZ1xuICBjb25zdCBVcmwkMSA9IG1ha2VTdGF0ZShVcmwpO1xuXG4gIC8vIFVSTCB3aXRoIGV4dHJhIHN5bWJvbHMgYXQgdGhlIGVuZCwgZm9sbG93ZWQgYnkgYW4gb3BlbmluZyBicmFja2V0XG4gIGNvbnN0IFVybE5vbmFjY2VwdCA9IG1ha2VTdGF0ZSgpOyAvLyBVUkwgZm9sbG93ZWQgYnkgc29tZSBzeW1ib2xzICh3aWxsIG5vdCBiZSBwYXJ0IG9mIHRoZSBmaW5hbCBVUkwpXG5cbiAgLy8gUXVlcnkgc3RyaW5nc1xuICB0YShVcmwkMSwgcXNBY2NlcHRpbmcsIFVybCQxKTtcbiAgdGEoVXJsJDEsIHFzTm9uQWNjZXB0aW5nLCBVcmxOb25hY2NlcHQpO1xuICB0YShVcmxOb25hY2NlcHQsIHFzQWNjZXB0aW5nLCBVcmwkMSk7XG4gIHRhKFVybE5vbmFjY2VwdCwgcXNOb25BY2NlcHRpbmcsIFVybE5vbmFjY2VwdCk7XG5cbiAgLy8gQmVjb21lIHJlYWwgVVJMcyBhZnRlciBgU0xBU0hgIG9yIGBDT0xPTiBOVU0gU0xBU0hgXG4gIC8vIEhlcmUgd29ya3Mgd2l0aCBvciB3aXRob3V0IHNjaGVtZTovLyBwcmVmaXhcbiAgdHQoRG9tYWluRG90VGxkLCBTTEFTSCwgVXJsJDEpO1xuICB0dChEb21haW5Eb3RUbGRDb2xvblBvcnQsIFNMQVNILCBVcmwkMSk7XG5cbiAgLy8gTm90ZSB0aGF0IGRvbWFpbnMgdGhhdCBiZWdpbiB3aXRoIHNjaGVtZXMgYXJlIHRyZWF0ZWQgc2xpZ2hseSBkaWZmZXJlbnRseVxuICBjb25zdCBTY2hlbWVDb2xvbiA9IHR0KFNjaGVtZSwgQ09MT04pOyAvLyBlLmcuLCAnbWFpbHRvOidcbiAgY29uc3QgU2xhc2hTY2hlbWVDb2xvbiA9IHR0KFNsYXNoU2NoZW1lLCBDT0xPTik7IC8vIGUuZy4sICdodHRwOidcbiAgY29uc3QgU2xhc2hTY2hlbWVDb2xvblNsYXNoID0gdHQoU2xhc2hTY2hlbWVDb2xvbiwgU0xBU0gpOyAvLyBlLmcuLCAnaHR0cDovJ1xuXG4gIGNvbnN0IFVyaVByZWZpeCA9IHR0KFNsYXNoU2NoZW1lQ29sb25TbGFzaCwgU0xBU0gpOyAvLyBlLmcuLCAnaHR0cDovLydcblxuICAvLyBTY2hlbWUgc3RhdGVzIGNhbiB0cmFuc2l0aW9uIHRvIGRvbWFpbiBzdGF0ZXNcbiAgdGEoU2NoZW1lLCBncm91cHMuZG9tYWluLCBEb21haW4pO1xuICB0dChTY2hlbWUsIERPVCwgRG9tYWluRG90KTtcbiAgdHQoU2NoZW1lLCBIWVBIRU4sIERvbWFpbkh5cGhlbik7XG4gIHRhKFNsYXNoU2NoZW1lLCBncm91cHMuZG9tYWluLCBEb21haW4pO1xuICB0dChTbGFzaFNjaGVtZSwgRE9ULCBEb21haW5Eb3QpO1xuICB0dChTbGFzaFNjaGVtZSwgSFlQSEVOLCBEb21haW5IeXBoZW4pO1xuXG4gIC8vIEZvcmNlIFVSTCB3aXRoIHNjaGVtZSBwcmVmaXggZm9sbG93ZWQgYnkgYW55dGhpbmcgc2FuZVxuICB0YShTY2hlbWVDb2xvbiwgZ3JvdXBzLmRvbWFpbiwgVXJsJDEpO1xuICB0dChTY2hlbWVDb2xvbiwgU0xBU0gsIFVybCQxKTtcbiAgdGEoVXJpUHJlZml4LCBncm91cHMuZG9tYWluLCBVcmwkMSk7XG4gIHRhKFVyaVByZWZpeCwgcXNBY2NlcHRpbmcsIFVybCQxKTtcbiAgdHQoVXJpUHJlZml4LCBTTEFTSCwgVXJsJDEpO1xuXG4gIC8vIFVSTCwgZm9sbG93ZWQgYnkgYW4gb3BlbmluZyBicmFja2V0XG4gIGNvbnN0IFVybE9wZW5icmFjZSA9IHR0KFVybCQxLCBPUEVOQlJBQ0UpOyAvLyBVUkwgZm9sbG93ZWQgYnkge1xuICBjb25zdCBVcmxPcGVuYnJhY2tldCA9IHR0KFVybCQxLCBPUEVOQlJBQ0tFVCk7IC8vIFVSTCBmb2xsb3dlZCBieSBbXG4gIGNvbnN0IFVybE9wZW5hbmdsZWJyYWNrZXQgPSB0dChVcmwkMSwgT1BFTkFOR0xFQlJBQ0tFVCk7IC8vIFVSTCBmb2xsb3dlZCBieSA8XG4gIGNvbnN0IFVybE9wZW5wYXJlbiA9IHR0KFVybCQxLCBPUEVOUEFSRU4pOyAvLyBVUkwgZm9sbG93ZWQgYnkgKFxuXG4gIHR0KFVybE5vbmFjY2VwdCwgT1BFTkJSQUNFLCBVcmxPcGVuYnJhY2UpO1xuICB0dChVcmxOb25hY2NlcHQsIE9QRU5CUkFDS0VULCBVcmxPcGVuYnJhY2tldCk7XG4gIHR0KFVybE5vbmFjY2VwdCwgT1BFTkFOR0xFQlJBQ0tFVCwgVXJsT3BlbmFuZ2xlYnJhY2tldCk7XG4gIHR0KFVybE5vbmFjY2VwdCwgT1BFTlBBUkVOLCBVcmxPcGVucGFyZW4pO1xuXG4gIC8vIENsb3NpbmcgYnJhY2tldCBjb21wb25lbnQuIFRoaXMgY2hhcmFjdGVyIFdJTEwgYmUgaW5jbHVkZWQgaW4gdGhlIFVSTFxuICB0dChVcmxPcGVuYnJhY2UsIENMT1NFQlJBQ0UsIFVybCQxKTtcbiAgdHQoVXJsT3BlbmJyYWNrZXQsIENMT1NFQlJBQ0tFVCwgVXJsJDEpO1xuICB0dChVcmxPcGVuYW5nbGVicmFja2V0LCBDTE9TRUFOR0xFQlJBQ0tFVCwgVXJsJDEpO1xuICB0dChVcmxPcGVucGFyZW4sIENMT1NFUEFSRU4sIFVybCQxKTtcbiAgdHQoVXJsT3BlbmJyYWNlLCBDTE9TRUJSQUNFLCBVcmwkMSk7XG5cbiAgLy8gVVJMIHRoYXQgYmVpbmdzIHdpdGggYW4gb3BlbmluZyBicmFja2V0LCBmb2xsb3dlZCBieSBhIHN5bWJvbHMuXG4gIC8vIE5vdGUgdGhhdCB0aGUgZmluYWwgc3RhdGUgY2FuIHN0aWxsIGJlIGBVcmxPcGVuYnJhY2VgIChpZiB0aGUgVVJMIG9ubHlcbiAgLy8gaGFzIGEgc2luZ2xlIG9wZW5pbmcgYnJhY2tldCBmb3Igc29tZSByZWFzb24pLlxuICBjb25zdCBVcmxPcGVuYnJhY2VRID0gbWFrZVN0YXRlKFVybCk7IC8vIFVSTCBmb2xsb3dlZCBieSB7IGFuZCBzb21lIHN5bWJvbHMgdGhhdCB0aGUgVVJMIGNhbiBlbmQgaXRcbiAgY29uc3QgVXJsT3BlbmJyYWNrZXRRID0gbWFrZVN0YXRlKFVybCk7IC8vIFVSTCBmb2xsb3dlZCBieSBbIGFuZCBzb21lIHN5bWJvbHMgdGhhdCB0aGUgVVJMIGNhbiBlbmQgaXRcbiAgY29uc3QgVXJsT3BlbmFuZ2xlYnJhY2tldFEgPSBtYWtlU3RhdGUoVXJsKTsgLy8gVVJMIGZvbGxvd2VkIGJ5IDwgYW5kIHNvbWUgc3ltYm9scyB0aGF0IHRoZSBVUkwgY2FuIGVuZCBpdFxuICBjb25zdCBVcmxPcGVucGFyZW5RID0gbWFrZVN0YXRlKFVybCk7IC8vIFVSTCBmb2xsb3dlZCBieSAoIGFuZCBzb21lIHN5bWJvbHMgdGhhdCB0aGUgVVJMIGNhbiBlbmQgaXRcbiAgdGEoVXJsT3BlbmJyYWNlLCBxc0FjY2VwdGluZywgVXJsT3BlbmJyYWNlUSk7XG4gIHRhKFVybE9wZW5icmFja2V0LCBxc0FjY2VwdGluZywgVXJsT3BlbmJyYWNrZXRRKTtcbiAgdGEoVXJsT3BlbmFuZ2xlYnJhY2tldCwgcXNBY2NlcHRpbmcsIFVybE9wZW5hbmdsZWJyYWNrZXRRKTtcbiAgdGEoVXJsT3BlbnBhcmVuLCBxc0FjY2VwdGluZywgVXJsT3BlbnBhcmVuUSk7XG4gIGNvbnN0IFVybE9wZW5icmFjZVN5bXMgPSBtYWtlU3RhdGUoKTsgLy8gVXJsT3BlbmJyYWNlIGZvbGxvd2VkIGJ5IHNvbWUgc3ltYm9scyBpdCBjYW5ub3QgZW5kIGl0XG4gIGNvbnN0IFVybE9wZW5icmFja2V0U3ltcyA9IG1ha2VTdGF0ZSgpOyAvLyBVcmxPcGVuYnJhY2tldFEgZm9sbG93ZWQgYnkgc29tZSBzeW1ib2xzIGl0IGNhbm5vdCBlbmQgaXRcbiAgY29uc3QgVXJsT3BlbmFuZ2xlYnJhY2tldFN5bXMgPSBtYWtlU3RhdGUoKTsgLy8gVXJsT3BlbmFuZ2xlYnJhY2tldFEgZm9sbG93ZWQgYnkgc29tZSBzeW1ib2xzIGl0IGNhbm5vdCBlbmQgaXRcbiAgY29uc3QgVXJsT3BlbnBhcmVuU3ltcyA9IG1ha2VTdGF0ZSgpOyAvLyBVcmxPcGVucGFyZW5RIGZvbGxvd2VkIGJ5IHNvbWUgc3ltYm9scyBpdCBjYW5ub3QgZW5kIGl0XG4gIHRhKFVybE9wZW5icmFjZSwgcXNOb25BY2NlcHRpbmcpO1xuICB0YShVcmxPcGVuYnJhY2tldCwgcXNOb25BY2NlcHRpbmcpO1xuICB0YShVcmxPcGVuYW5nbGVicmFja2V0LCBxc05vbkFjY2VwdGluZyk7XG4gIHRhKFVybE9wZW5wYXJlbiwgcXNOb25BY2NlcHRpbmcpO1xuXG4gIC8vIFVSTCB0aGF0IGJlZ2lucyB3aXRoIGFuIG9wZW5pbmcgYnJhY2tldCwgZm9sbG93ZWQgYnkgc29tZSBzeW1ib2xzXG4gIHRhKFVybE9wZW5icmFjZVEsIHFzQWNjZXB0aW5nLCBVcmxPcGVuYnJhY2VRKTtcbiAgdGEoVXJsT3BlbmJyYWNrZXRRLCBxc0FjY2VwdGluZywgVXJsT3BlbmJyYWNrZXRRKTtcbiAgdGEoVXJsT3BlbmFuZ2xlYnJhY2tldFEsIHFzQWNjZXB0aW5nLCBVcmxPcGVuYW5nbGVicmFja2V0USk7XG4gIHRhKFVybE9wZW5wYXJlblEsIHFzQWNjZXB0aW5nLCBVcmxPcGVucGFyZW5RKTtcbiAgdGEoVXJsT3BlbmJyYWNlUSwgcXNOb25BY2NlcHRpbmcsIFVybE9wZW5icmFjZVEpO1xuICB0YShVcmxPcGVuYnJhY2tldFEsIHFzTm9uQWNjZXB0aW5nLCBVcmxPcGVuYnJhY2tldFEpO1xuICB0YShVcmxPcGVuYW5nbGVicmFja2V0USwgcXNOb25BY2NlcHRpbmcsIFVybE9wZW5hbmdsZWJyYWNrZXRRKTtcbiAgdGEoVXJsT3BlbnBhcmVuUSwgcXNOb25BY2NlcHRpbmcsIFVybE9wZW5wYXJlblEpO1xuICB0YShVcmxPcGVuYnJhY2VTeW1zLCBxc0FjY2VwdGluZywgVXJsT3BlbmJyYWNlU3ltcyk7XG4gIHRhKFVybE9wZW5icmFja2V0U3ltcywgcXNBY2NlcHRpbmcsIFVybE9wZW5icmFja2V0USk7XG4gIHRhKFVybE9wZW5hbmdsZWJyYWNrZXRTeW1zLCBxc0FjY2VwdGluZywgVXJsT3BlbmFuZ2xlYnJhY2tldFEpO1xuICB0YShVcmxPcGVucGFyZW5TeW1zLCBxc0FjY2VwdGluZywgVXJsT3BlbnBhcmVuUSk7XG4gIHRhKFVybE9wZW5icmFjZVN5bXMsIHFzTm9uQWNjZXB0aW5nLCBVcmxPcGVuYnJhY2VTeW1zKTtcbiAgdGEoVXJsT3BlbmJyYWNrZXRTeW1zLCBxc05vbkFjY2VwdGluZywgVXJsT3BlbmJyYWNrZXRTeW1zKTtcbiAgdGEoVXJsT3BlbmFuZ2xlYnJhY2tldFN5bXMsIHFzTm9uQWNjZXB0aW5nLCBVcmxPcGVuYW5nbGVicmFja2V0U3ltcyk7XG4gIHRhKFVybE9wZW5wYXJlblN5bXMsIHFzTm9uQWNjZXB0aW5nLCBVcmxPcGVucGFyZW5TeW1zKTtcblxuICAvLyBDbG9zZSBicmFjZS9icmFja2V0IHRvIGJlY29tZSByZWd1bGFyIFVSTFxuICB0dChVcmxPcGVuYnJhY2tldFEsIENMT1NFQlJBQ0tFVCwgVXJsJDEpO1xuICB0dChVcmxPcGVuYW5nbGVicmFja2V0USwgQ0xPU0VBTkdMRUJSQUNLRVQsIFVybCQxKTtcbiAgdHQoVXJsT3BlbnBhcmVuUSwgQ0xPU0VQQVJFTiwgVXJsJDEpO1xuICB0dChVcmxPcGVuYnJhY2VRLCBDTE9TRUJSQUNFLCBVcmwkMSk7XG4gIHR0KFVybE9wZW5icmFja2V0U3ltcywgQ0xPU0VCUkFDS0VULCBVcmwkMSk7XG4gIHR0KFVybE9wZW5hbmdsZWJyYWNrZXRTeW1zLCBDTE9TRUFOR0xFQlJBQ0tFVCwgVXJsJDEpO1xuICB0dChVcmxPcGVucGFyZW5TeW1zLCBDTE9TRVBBUkVOLCBVcmwkMSk7XG4gIHR0KFVybE9wZW5icmFjZVN5bXMsIENMT1NFUEFSRU4sIFVybCQxKTtcbiAgdHQoU3RhcnQsIExPQ0FMSE9TVCwgRG9tYWluRG90VGxkKTsgLy8gbG9jYWxob3N0IGlzIGEgdmFsaWQgVVJMIHN0YXRlXG4gIHR0KFN0YXJ0LCBOTCQxLCBObCk7IC8vIHNpbmdsZSBuZXcgbGluZVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IFN0YXJ0LFxuICAgIHRva2VuczogdGtcbiAgfTtcbn1cblxuLyoqXG4gKiBSdW4gdGhlIHBhcnNlciBzdGF0ZSBtYWNoaW5lIG9uIGEgbGlzdCBvZiBzY2FubmVkIHN0cmluZy1iYXNlZCB0b2tlbnMgdG9cbiAqIGNyZWF0ZSBhIGxpc3Qgb2YgbXVsdGkgdG9rZW5zLCBlYWNoIG9mIHdoaWNoIHJlcHJlc2VudHMgYSBVUkwsIGVtYWlsIGFkZHJlc3MsXG4gKiBwbGFpbiB0ZXh0LCBldGMuXG4gKlxuICogQHBhcmFtIHtTdGF0ZTxNdWx0aVRva2VuPn0gc3RhcnQgcGFyc2VyIHN0YXJ0IHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgdGhlIG9yaWdpbmFsIGlucHV0IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGdpdmVuIHRva2Vuc1xuICogQHBhcmFtIHtUb2tlbltdfSB0b2tlbnMgbGlzdCBvZiBzY2FubmVkIHRva2Vuc1xuICogQHJldHVybnMge011bHRpVG9rZW5bXX1cbiAqL1xuZnVuY3Rpb24gcnVuKHN0YXJ0LCBpbnB1dCwgdG9rZW5zKSB7XG4gIGxldCBsZW4gPSB0b2tlbnMubGVuZ3RoO1xuICBsZXQgY3Vyc29yID0gMDtcbiAgbGV0IG11bHRpcyA9IFtdO1xuICBsZXQgdGV4dFRva2VucyA9IFtdO1xuICB3aGlsZSAoY3Vyc29yIDwgbGVuKSB7XG4gICAgbGV0IHN0YXRlID0gc3RhcnQ7XG4gICAgbGV0IHNlY29uZFN0YXRlID0gbnVsbDtcbiAgICBsZXQgbmV4dFN0YXRlID0gbnVsbDtcbiAgICBsZXQgbXVsdGlMZW5ndGggPSAwO1xuICAgIGxldCBsYXRlc3RBY2NlcHRpbmcgPSBudWxsO1xuICAgIGxldCBzaW5jZUFjY2VwdHMgPSAtMTtcbiAgICB3aGlsZSAoY3Vyc29yIDwgbGVuICYmICEoc2Vjb25kU3RhdGUgPSBzdGF0ZS5nbyh0b2tlbnNbY3Vyc29yXS50KSkpIHtcbiAgICAgIC8vIFN0YXJ0aW5nIHRva2VucyB3aXRoIG5vd2hlcmUgdG8ganVtcCB0by5cbiAgICAgIC8vIENvbnNpZGVyIHRoZXNlIHRvIGJlIGp1c3QgcGxhaW4gdGV4dFxuICAgICAgdGV4dFRva2Vucy5wdXNoKHRva2Vuc1tjdXJzb3IrK10pO1xuICAgIH1cbiAgICB3aGlsZSAoY3Vyc29yIDwgbGVuICYmIChuZXh0U3RhdGUgPSBzZWNvbmRTdGF0ZSB8fCBzdGF0ZS5nbyh0b2tlbnNbY3Vyc29yXS50KSkpIHtcbiAgICAgIC8vIEdldCB0aGUgbmV4dCBzdGF0ZVxuICAgICAgc2Vjb25kU3RhdGUgPSBudWxsO1xuICAgICAgc3RhdGUgPSBuZXh0U3RhdGU7XG5cbiAgICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIGxhdGVzdCBhY2NlcHRpbmcgc3RhdGVcbiAgICAgIGlmIChzdGF0ZS5hY2NlcHRzKCkpIHtcbiAgICAgICAgc2luY2VBY2NlcHRzID0gMDtcbiAgICAgICAgbGF0ZXN0QWNjZXB0aW5nID0gc3RhdGU7XG4gICAgICB9IGVsc2UgaWYgKHNpbmNlQWNjZXB0cyA+PSAwKSB7XG4gICAgICAgIHNpbmNlQWNjZXB0cysrO1xuICAgICAgfVxuICAgICAgY3Vyc29yKys7XG4gICAgICBtdWx0aUxlbmd0aCsrO1xuICAgIH1cbiAgICBpZiAoc2luY2VBY2NlcHRzIDwgMCkge1xuICAgICAgLy8gTm8gYWNjZXB0aW5nIHN0YXRlIHdhcyBmb3VuZCwgcGFydCBvZiBhIHJlZ3VsYXIgdGV4dCB0b2tlbiBhZGRcbiAgICAgIC8vIHRoZSBmaXJzdCB0ZXh0IHRva2VuIHRvIHRoZSB0ZXh0IHRva2VucyBhcnJheSBhbmQgdHJ5IGFnYWluIGZyb21cbiAgICAgIC8vIHRoZSBuZXh0XG4gICAgICBjdXJzb3IgLT0gbXVsdGlMZW5ndGg7XG4gICAgICBpZiAoY3Vyc29yIDwgbGVuKSB7XG4gICAgICAgIHRleHRUb2tlbnMucHVzaCh0b2tlbnNbY3Vyc29yXSk7XG4gICAgICAgIGN1cnNvcisrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBY2NlcHRpbmcgc3RhdGUhXG4gICAgICAvLyBGaXJzdCBjbG9zZSBvZmYgdGhlIHRleHRUb2tlbnMgKGlmIGF2YWlsYWJsZSlcbiAgICAgIGlmICh0ZXh0VG9rZW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbXVsdGlzLnB1c2goaW5pdE11bHRpVG9rZW4oVGV4dCwgaW5wdXQsIHRleHRUb2tlbnMpKTtcbiAgICAgICAgdGV4dFRva2VucyA9IFtdO1xuICAgICAgfVxuXG4gICAgICAvLyBSb2xsIGJhY2sgdG8gdGhlIGxhdGVzdCBhY2NlcHRpbmcgc3RhdGVcbiAgICAgIGN1cnNvciAtPSBzaW5jZUFjY2VwdHM7XG4gICAgICBtdWx0aUxlbmd0aCAtPSBzaW5jZUFjY2VwdHM7XG5cbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBtdWx0aXRva2VuXG4gICAgICBjb25zdCBNdWx0aSA9IGxhdGVzdEFjY2VwdGluZy50O1xuICAgICAgY29uc3Qgc3VidG9rZW5zID0gdG9rZW5zLnNsaWNlKGN1cnNvciAtIG11bHRpTGVuZ3RoLCBjdXJzb3IpO1xuICAgICAgbXVsdGlzLnB1c2goaW5pdE11bHRpVG9rZW4oTXVsdGksIGlucHV0LCBzdWJ0b2tlbnMpKTtcbiAgICB9XG4gIH1cblxuICAvLyBGaW5hbGx5IGNsb3NlIG9mZiB0aGUgdGV4dFRva2VucyAoaWYgYXZhaWxhYmxlKVxuICBpZiAodGV4dFRva2Vucy5sZW5ndGggPiAwKSB7XG4gICAgbXVsdGlzLnB1c2goaW5pdE11bHRpVG9rZW4oVGV4dCwgaW5wdXQsIHRleHRUb2tlbnMpKTtcbiAgfVxuICByZXR1cm4gbXVsdGlzO1xufVxuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIGluc3RhbnRpYXRpbmcgYSBuZXcgbXVsdGl0b2tlbiB3aXRoIGFsbCB0aGUgcmVsZXZhbnRcbiAqIGZpZWxkcyBkdXJpbmcgcGFyc2luZy5cbiAqIEBwYXJhbSB7bmV3ICh2YWx1ZTogc3RyaW5nLCB0b2tlbnM6IFRva2VuW10pID0+IE11bHRpVG9rZW59IE11bHRpIGNsYXNzIHRvIGluc3RhbnRpYXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgb3JpZ2luYWwgaW5wdXQgc3RyaW5nXG4gKiBAcGFyYW0ge1Rva2VuW119IHRva2VucyBjb25zZWN1dGl2ZSB0b2tlbnMgc2Nhbm5lZCBmcm9tIGlucHV0IHN0cmluZ1xuICogQHJldHVybnMge011bHRpVG9rZW59XG4gKi9cbmZ1bmN0aW9uIGluaXRNdWx0aVRva2VuKE11bHRpLCBpbnB1dCwgdG9rZW5zKSB7XG4gIGNvbnN0IHN0YXJ0SWR4ID0gdG9rZW5zWzBdLnM7XG4gIGNvbnN0IGVuZElkeCA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0uZTtcbiAgY29uc3QgdmFsdWUgPSBpbnB1dC5zbGljZShzdGFydElkeCwgZW5kSWR4KTtcbiAgcmV0dXJuIG5ldyBNdWx0aSh2YWx1ZSwgdG9rZW5zKTtcbn1cblxuY29uc3Qgd2FybiA9IHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlICYmIGNvbnNvbGUud2FybiB8fCAoKCkgPT4ge30pO1xuY29uc3Qgd2FybkFkdmljZSA9ICd1bnRpbCBtYW51YWwgY2FsbCBvZiBsaW5raWZ5LmluaXQoKS4gUmVnaXN0ZXIgYWxsIHNjaGVtZXMgYW5kIHBsdWdpbnMgYmVmb3JlIGludm9raW5nIGxpbmtpZnkgdGhlIGZpcnN0IHRpbWUuJztcblxuLy8gU2lkZS1lZmZlY3QgaW5pdGlhbGl6YXRpb24gc3RhdGVcbmNvbnN0IElOSVQgPSB7XG4gIHNjYW5uZXI6IG51bGwsXG4gIHBhcnNlcjogbnVsbCxcbiAgdG9rZW5RdWV1ZTogW10sXG4gIHBsdWdpblF1ZXVlOiBbXSxcbiAgY3VzdG9tU2NoZW1lczogW10sXG4gIGluaXRpYWxpemVkOiBmYWxzZVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7e1xuICogXHRzdGFydDogU3RhdGU8c3RyaW5nPixcbiAqIFx0dG9rZW5zOiB7IGdyb3VwczogQ29sbGVjdGlvbnM8c3RyaW5nPiB9ICYgdHlwZW9mIHRrXG4gKiB9fSBTY2FubmVySW5pdFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge3tcbiAqIFx0c3RhcnQ6IFN0YXRlPE11bHRpVG9rZW4+LFxuICogXHR0b2tlbnM6IHR5cGVvZiBtdWx0aVxuICogfX0gUGFyc2VySW5pdFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhhcmc6IHsgc2Nhbm5lcjogU2Nhbm5lckluaXQgfSkgPT4gdm9pZH0gVG9rZW5QbHVnaW5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnOiB7IHNjYW5uZXI6IFNjYW5uZXJJbml0LCBwYXJzZXI6IFBhcnNlckluaXQgfSkgPT4gdm9pZH0gUGx1Z2luXG4gKi9cblxuLyoqXG4gKiBEZS1yZWdpc3RlciBhbGwgcGx1Z2lucyBhbmQgcmVzZXQgdGhlIGludGVybmFsIHN0YXRlLW1hY2hpbmUuIFVzZWQgZm9yXG4gKiB0ZXN0aW5nOyBub3QgcmVxdWlyZWQgaW4gcHJhY3RpY2UuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXNldCgpIHtcbiAgU3RhdGUuZ3JvdXBzID0ge307XG4gIElOSVQuc2Nhbm5lciA9IG51bGw7XG4gIElOSVQucGFyc2VyID0gbnVsbDtcbiAgSU5JVC50b2tlblF1ZXVlID0gW107XG4gIElOSVQucGx1Z2luUXVldWUgPSBbXTtcbiAgSU5JVC5jdXN0b21TY2hlbWVzID0gW107XG4gIElOSVQuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIHRva2VuIHBsdWdpbiB0byBhbGxvdyB0aGUgc2Nhbm5lciB0byByZWNvZ25pemUgYWRkaXRpb25hbCB0b2tlblxuICogdHlwZXMgYmVmb3JlIHRoZSBwYXJzZXIgc3RhdGUgbWFjaGluZSBpcyBjb25zdHJ1Y3RlZCBmcm9tIHRoZSByZXN1bHRzLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgb2YgcGx1Z2luIHRvIHJlZ2lzdGVyXG4gKiBAcGFyYW0ge1Rva2VuUGx1Z2lufSBwbHVnaW4gZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSBzY2FubmVyIHN0YXRlIG1hY2hpbmVcbiAqIGFuZCBhdmFpbGFibGUgc2Nhbm5lciB0b2tlbnMgYW5kIGNvbGxlY3Rpb25zIGFuZCBleHRlbmRzIHRoZSBzdGF0ZSBtYWNoaW5lIHRvXG4gKiByZWNvZ25pemUgYWRkaXRpb25hbCB0b2tlbnMgb3IgZ3JvdXBzLlxuICovXG5mdW5jdGlvbiByZWdpc3RlclRva2VuUGx1Z2luKG5hbWUsIHBsdWdpbikge1xuICBpZiAodHlwZW9mIHBsdWdpbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgbGlua2lmeWpzOiBJbnZhbGlkIHRva2VuIHBsdWdpbiAke3BsdWdpbn0gKGV4cGVjdHMgZnVuY3Rpb24pYCk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBJTklULnRva2VuUXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobmFtZSA9PT0gSU5JVC50b2tlblF1ZXVlW2ldWzBdKSB7XG4gICAgICB3YXJuKGBsaW5raWZ5anM6IHRva2VuIHBsdWdpbiBcIiR7bmFtZX1cIiBhbHJlYWR5IHJlZ2lzdGVyZWQgLSB3aWxsIGJlIG92ZXJ3cml0dGVuYCk7XG4gICAgICBJTklULnRva2VuUXVldWVbaV0gPSBbbmFtZSwgcGx1Z2luXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgSU5JVC50b2tlblF1ZXVlLnB1c2goW25hbWUsIHBsdWdpbl0pO1xuICBpZiAoSU5JVC5pbml0aWFsaXplZCkge1xuICAgIHdhcm4oYGxpbmtpZnlqczogYWxyZWFkeSBpbml0aWFsaXplZCAtIHdpbGwgbm90IHJlZ2lzdGVyIHRva2VuIHBsdWdpbiBcIiR7bmFtZX1cIiAke3dhcm5BZHZpY2V9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIGxpbmtpZnkgcGx1Z2luXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBvZiBwbHVnaW4gdG8gcmVnaXN0ZXJcbiAqIEBwYXJhbSB7UGx1Z2lufSBwbHVnaW4gZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSBwYXJzZXIgc3RhdGUgbWFjaGluZSBhbmRcbiAqIGV4dGVuZHMgdGhlIHBhcnNlciB0byByZWNvZ25pemUgYWRkaXRpb25hbCBsaW5rIHR5cGVzXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyUGx1Z2luKG5hbWUsIHBsdWdpbikge1xuICBpZiAodHlwZW9mIHBsdWdpbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgbGlua2lmeWpzOiBJbnZhbGlkIHBsdWdpbiAke3BsdWdpbn0gKGV4cGVjdHMgZnVuY3Rpb24pYCk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBJTklULnBsdWdpblF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG5hbWUgPT09IElOSVQucGx1Z2luUXVldWVbaV1bMF0pIHtcbiAgICAgIHdhcm4oYGxpbmtpZnlqczogcGx1Z2luIFwiJHtuYW1lfVwiIGFscmVhZHkgcmVnaXN0ZXJlZCAtIHdpbGwgYmUgb3ZlcndyaXR0ZW5gKTtcbiAgICAgIElOSVQucGx1Z2luUXVldWVbaV0gPSBbbmFtZSwgcGx1Z2luXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgSU5JVC5wbHVnaW5RdWV1ZS5wdXNoKFtuYW1lLCBwbHVnaW5dKTtcbiAgaWYgKElOSVQuaW5pdGlhbGl6ZWQpIHtcbiAgICB3YXJuKGBsaW5raWZ5anM6IGFscmVhZHkgaW5pdGlhbGl6ZWQgLSB3aWxsIG5vdCByZWdpc3RlciBwbHVnaW4gXCIke25hbWV9XCIgJHt3YXJuQWR2aWNlfWApO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZWN0IFVSTHMgd2l0aCB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgcHJvdG9jb2wuIEFueXRoaW5nIHdpdGggZm9ybWF0XG4gKiBcInByb3RvY29sOi8vLi4uXCIgd2lsbCBiZSBjb25zaWRlcmVkIGEgbGluay4gSWYgYG9wdGlvbmFsU2xhc2hTbGFzaGAgaXMgc2V0IHRvXG4gKiBgdHJ1ZWAsIGFueXRoaW5nIHdpdGggZm9ybWF0IFwicHJvdG9jb2w6Li4uXCIgd2lsbCBiZSBjb25zaWRlcmVkIGEgbGluay5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm90b2NvbFxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9uYWxTbGFzaFNsYXNoXVxuICovXG5mdW5jdGlvbiByZWdpc3RlckN1c3RvbVByb3RvY29sKHNjaGVtZSwgb3B0aW9uYWxTbGFzaFNsYXNoKSB7XG4gIGlmIChvcHRpb25hbFNsYXNoU2xhc2ggPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbmFsU2xhc2hTbGFzaCA9IGZhbHNlO1xuICB9XG4gIGlmIChJTklULmluaXRpYWxpemVkKSB7XG4gICAgd2FybihgbGlua2lmeWpzOiBhbHJlYWR5IGluaXRpYWxpemVkIC0gd2lsbCBub3QgcmVnaXN0ZXIgY3VzdG9tIHNjaGVtZSBcIiR7c2NoZW1lfVwiICR7d2FybkFkdmljZX1gKTtcbiAgfVxuICBpZiAoIS9eWzAtOWEtel0rKC1bMC05YS16XSspKiQvLnRlc3Qoc2NoZW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbGlua2lmeWpzOiBpbmNvcnJlY3Qgc2NoZW1lIGZvcm1hdC5cXG4gMS4gTXVzdCBvbmx5IGNvbnRhaW4gZGlnaXRzLCBsb3dlcmNhc2UgQVNDSUkgbGV0dGVycyBvciBcIi1cIlxcbiAyLiBDYW5ub3Qgc3RhcnQgb3IgZW5kIHdpdGggXCItXCJcXG4gMy4gXCItXCIgY2Fubm90IHJlcGVhdCcpO1xuICB9XG4gIElOSVQuY3VzdG9tU2NoZW1lcy5wdXNoKFtzY2hlbWUsIG9wdGlvbmFsU2xhc2hTbGFzaF0pO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemUgdGhlIGxpbmtpZnkgc3RhdGUgbWFjaGluZS4gQ2FsbGVkIGF1dG9tYXRpY2FsbHkgdGhlIGZpcnN0IHRpbWVcbiAqIGxpbmtpZnkgaXMgY2FsbGVkIG9uIGEgc3RyaW5nLCBidXQgbWF5IGJlIGNhbGxlZCBtYW51YWxseSBhcyB3ZWxsLlxuICovXG5mdW5jdGlvbiBpbml0KCkge1xuICAvLyBJbml0aWFsaXplIHNjYW5uZXIgc3RhdGUgbWFjaGluZSBhbmQgcGx1Z2luc1xuICBJTklULnNjYW5uZXIgPSBpbml0JDIoSU5JVC5jdXN0b21TY2hlbWVzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBJTklULnRva2VuUXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICBJTklULnRva2VuUXVldWVbaV1bMV0oe1xuICAgICAgc2Nhbm5lcjogSU5JVC5zY2FubmVyXG4gICAgfSk7XG4gIH1cblxuICAvLyBJbml0aWFsaXplIHBhcnNlciBzdGF0ZSBtYWNoaW5lIGFuZCBwbHVnaW5zXG4gIElOSVQucGFyc2VyID0gaW5pdCQxKElOSVQuc2Nhbm5lci50b2tlbnMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IElOSVQucGx1Z2luUXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICBJTklULnBsdWdpblF1ZXVlW2ldWzFdKHtcbiAgICAgIHNjYW5uZXI6IElOSVQuc2Nhbm5lcixcbiAgICAgIHBhcnNlcjogSU5JVC5wYXJzZXJcbiAgICB9KTtcbiAgfVxuICBJTklULmluaXRpYWxpemVkID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyBpbnRvIHRva2VucyB0aGF0IHJlcHJlc2VudCBsaW5rYWJsZSBhbmQgbm9uLWxpbmthYmxlIHN1Yi1jb21wb25lbnRzXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtNdWx0aVRva2VuW119IHRva2Vuc1xuICovXG5mdW5jdGlvbiB0b2tlbml6ZShzdHIpIHtcbiAgaWYgKCFJTklULmluaXRpYWxpemVkKSB7XG4gICAgaW5pdCgpO1xuICB9XG4gIHJldHVybiBydW4oSU5JVC5wYXJzZXIuc3RhcnQsIHN0ciwgcnVuJDEoSU5JVC5zY2FubmVyLnN0YXJ0LCBzdHIpKTtcbn1cblxuLyoqXG4gKiBGaW5kIGEgbGlzdCBvZiBsaW5rYWJsZSBpdGVtcyBpbiB0aGUgZ2l2ZW4gc3RyaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciBzdHJpbmcgdG8gZmluZCBsaW5rcyBpblxuICogQHBhcmFtIHtzdHJpbmcgfCBPcHRzfSBbdHlwZV0gZWl0aGVyIGZvcm1hdHRpbmcgb3B0aW9ucyBvciBzcGVjaWZpYyB0eXBlIG9mXG4gKiBsaW5rcyB0byBmaW5kLCBlLmcuLCAndXJsJyBvciAnZW1haWwnXG4gKiBAcGFyYW0ge09wdHN9IFtvcHRzXSBmb3JtYXR0aW5nIG9wdGlvbnMgZm9yIGZpbmFsIG91dHB1dC4gQ2Fubm90IGJlIHNwZWNpZmllZFxuICogaWYgb3B0cyBhbHJlYWR5IHByb3ZpZGVkIGluIGB0eXBlYCBhcmd1bWVudFxuKi9cbmZ1bmN0aW9uIGZpbmQoc3RyLCB0eXBlLCBvcHRzKSB7XG4gIGlmICh0eXBlID09PSB2b2lkIDApIHtcbiAgICB0eXBlID0gbnVsbDtcbiAgfVxuICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0cyA9IG51bGw7XG4gIH1cbiAgaWYgKHR5cGUgJiYgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKG9wdHMpIHtcbiAgICAgIHRocm93IEVycm9yKGBsaW5raWZ5anM6IEludmFsaWQgbGluayB0eXBlICR7dHlwZX07IG11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICB9XG4gICAgb3B0cyA9IHR5cGU7XG4gICAgdHlwZSA9IG51bGw7XG4gIH1cbiAgY29uc3Qgb3B0aW9ucyA9IG5ldyBPcHRpb25zKG9wdHMpO1xuICBjb25zdCB0b2tlbnMgPSB0b2tlbml6ZShzdHIpO1xuICBjb25zdCBmaWx0ZXJlZCA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2ldO1xuICAgIGlmICh0b2tlbi5pc0xpbmsgJiYgKCF0eXBlIHx8IHRva2VuLnQgPT09IHR5cGUpKSB7XG4gICAgICBmaWx0ZXJlZC5wdXNoKHRva2VuLnRvRm9ybWF0dGVkT2JqZWN0KG9wdGlvbnMpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbHRlcmVkO1xufVxuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBzdHJpbmcgdmFsaWQgbGlua2FibGUgdGV4dCBvZiBzb21lIHNvcnQuIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90XG4gKiB0cmltIHRoZSB0ZXh0IGZvciB5b3UuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGEgc2Vjb25kIGB0eXBlYCBwYXJhbSwgd2hpY2ggaXMgdGhlIHR5cGUgb2YgbGluayB0byB0ZXN0XG4gKiBmb3IuXG4gKlxuICogRm9yIGV4YW1wbGUsXG4gKlxuICogICAgIGxpbmtpZnkudGVzdChzdHIsICdlbWFpbCcpO1xuICpcbiAqIFJldHVybnMgYHRydWVgIGlmIHN0ciBpcyBhIHZhbGlkIGVtYWlsLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciBzdHJpbmcgdG8gdGVzdCBmb3IgbGlua3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZV0gb3B0aW9uYWwgc3BlY2lmaWMgbGluayB0eXBlIHRvIGxvb2sgZm9yXG4gKiBAcmV0dXJucyBib29sZWFuIHRydWUvZmFsc2VcbiAqL1xuZnVuY3Rpb24gdGVzdChzdHIsIHR5cGUpIHtcbiAgaWYgKHR5cGUgPT09IHZvaWQgMCkge1xuICAgIHR5cGUgPSBudWxsO1xuICB9XG4gIGNvbnN0IHRva2VucyA9IHRva2VuaXplKHN0cik7XG4gIHJldHVybiB0b2tlbnMubGVuZ3RoID09PSAxICYmIHRva2Vuc1swXS5pc0xpbmsgJiYgKCF0eXBlIHx8IHRva2Vuc1swXS50ID09PSB0eXBlKTtcbn1cblxuZXhwb3J0IHsgTXVsdGlUb2tlbiwgT3B0aW9ucywgU3RhdGUsIGNyZWF0ZVRva2VuQ2xhc3MsIGZpbmQsIGluaXQsIG11bHRpLCBvcHRpb25zLCByZWdleHAsIHJlZ2lzdGVyQ3VzdG9tUHJvdG9jb2wsIHJlZ2lzdGVyUGx1Z2luLCByZWdpc3RlclRva2VuUGx1Z2luLCByZXNldCwgc3RyaW5nVG9BcnJheSwgdGVzdCwgdG9rZW5pemUgfTtcbiIsImltcG9ydCB7IGNvbWJpbmVUcmFuc2FjdGlvblN0ZXBzLCBnZXRDaGFuZ2VkUmFuZ2VzLCBmaW5kQ2hpbGRyZW5JblJhbmdlLCBnZXRNYXJrc0JldHdlZW4sIGdldEF0dHJpYnV0ZXMsIE1hcmssIG1lcmdlQXR0cmlidXRlcywgbWFya1Bhc3RlUnVsZSB9IGZyb20gJ0B0aXB0YXAvY29yZSc7XG5pbXBvcnQgeyBmaW5kLCByZWdpc3RlckN1c3RvbVByb3RvY29sLCByZXNldCB9IGZyb20gJ2xpbmtpZnlqcyc7XG5pbXBvcnQgeyBQbHVnaW4sIFBsdWdpbktleSB9IGZyb20gJ0B0aXB0YXAvcG0vc3RhdGUnO1xuXG5mdW5jdGlvbiBhdXRvbGluayhvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gbmV3IFBsdWdpbih7XHJcbiAgICAgICAga2V5OiBuZXcgUGx1Z2luS2V5KCdhdXRvbGluaycpLFxyXG4gICAgICAgIGFwcGVuZFRyYW5zYWN0aW9uOiAodHJhbnNhY3Rpb25zLCBvbGRTdGF0ZSwgbmV3U3RhdGUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZG9jQ2hhbmdlcyA9IHRyYW5zYWN0aW9ucy5zb21lKHRyYW5zYWN0aW9uID0+IHRyYW5zYWN0aW9uLmRvY0NoYW5nZWQpICYmICFvbGRTdGF0ZS5kb2MuZXEobmV3U3RhdGUuZG9jKTtcclxuICAgICAgICAgICAgY29uc3QgcHJldmVudEF1dG9saW5rID0gdHJhbnNhY3Rpb25zLnNvbWUodHJhbnNhY3Rpb24gPT4gdHJhbnNhY3Rpb24uZ2V0TWV0YSgncHJldmVudEF1dG9saW5rJykpO1xyXG4gICAgICAgICAgICBpZiAoIWRvY0NoYW5nZXMgfHwgcHJldmVudEF1dG9saW5rKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgeyB0ciB9ID0gbmV3U3RhdGU7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IGNvbWJpbmVUcmFuc2FjdGlvblN0ZXBzKG9sZFN0YXRlLmRvYywgWy4uLnRyYW5zYWN0aW9uc10pO1xyXG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VzID0gZ2V0Q2hhbmdlZFJhbmdlcyh0cmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICBjaGFuZ2VzLmZvckVhY2goKHsgbmV3UmFuZ2UgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gTm93IGxldOKAmXMgc2VlIGlmIHdlIGNhbiBhZGQgbmV3IGxpbmtzLlxyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZXNJbkNoYW5nZWRSYW5nZXMgPSBmaW5kQ2hpbGRyZW5JblJhbmdlKG5ld1N0YXRlLmRvYywgbmV3UmFuZ2UsIG5vZGUgPT4gbm9kZS5pc1RleHRibG9jayk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGV4dEJsb2NrO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRleHRCZWZvcmVXaGl0ZXNwYWNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGVzSW5DaGFuZ2VkUmFuZ2VzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBHcmFiIHRoZSBmaXJzdCBub2RlIHdpdGhpbiB0aGUgY2hhbmdlZCByYW5nZXMgKGV4LiB0aGUgZmlyc3Qgb2YgdHdvIHBhcmFncmFwaHMgd2hlbiBoaXR0aW5nIGVudGVyKS5cclxuICAgICAgICAgICAgICAgICAgICB0ZXh0QmxvY2sgPSBub2Rlc0luQ2hhbmdlZFJhbmdlc1swXTtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0QmVmb3JlV2hpdGVzcGFjZSA9IG5ld1N0YXRlLmRvYy50ZXh0QmV0d2Vlbih0ZXh0QmxvY2sucG9zLCB0ZXh0QmxvY2sucG9zICsgdGV4dEJsb2NrLm5vZGUubm9kZVNpemUsIHVuZGVmaW5lZCwgJyAnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGVzSW5DaGFuZ2VkUmFuZ2VzLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gbWFrZSBzdXJlIHRvIGluY2x1ZGUgdGhlIGJsb2NrIHNlcGVyYXRvciBhcmd1bWVudCB0byB0cmVhdCBoYXJkIGJyZWFrcyBsaWtlIHNwYWNlcy5cclxuICAgICAgICAgICAgICAgICAgICAmJiBuZXdTdGF0ZS5kb2MudGV4dEJldHdlZW4obmV3UmFuZ2UuZnJvbSwgbmV3UmFuZ2UudG8sICcgJywgJyAnKS5lbmRzV2l0aCgnICcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dEJsb2NrID0gbm9kZXNJbkNoYW5nZWRSYW5nZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dEJlZm9yZVdoaXRlc3BhY2UgPSBuZXdTdGF0ZS5kb2MudGV4dEJldHdlZW4odGV4dEJsb2NrLnBvcywgbmV3UmFuZ2UudG8sIHVuZGVmaW5lZCwgJyAnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0ZXh0QmxvY2sgJiYgdGV4dEJlZm9yZVdoaXRlc3BhY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3b3Jkc0JlZm9yZVdoaXRlc3BhY2UgPSB0ZXh0QmVmb3JlV2hpdGVzcGFjZS5zcGxpdCgnICcpLmZpbHRlcihzID0+IHMgIT09ICcnKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAod29yZHNCZWZvcmVXaGl0ZXNwYWNlLmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdFdvcmRCZWZvcmVTcGFjZSA9IHdvcmRzQmVmb3JlV2hpdGVzcGFjZVt3b3Jkc0JlZm9yZVdoaXRlc3BhY2UubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdFdvcmRBbmRCbG9ja09mZnNldCA9IHRleHRCbG9jay5wb3MgKyB0ZXh0QmVmb3JlV2hpdGVzcGFjZS5sYXN0SW5kZXhPZihsYXN0V29yZEJlZm9yZVNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWxhc3RXb3JkQmVmb3JlU3BhY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmaW5kKGxhc3RXb3JkQmVmb3JlU3BhY2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIobGluayA9PiBsaW5rLmlzTGluaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGxpbmsgcG9zaXRpb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAobGluayA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5saW5rLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiBsYXN0V29yZEFuZEJsb2NrT2Zmc2V0ICsgbGluay5zdGFydCArIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvOiBsYXN0V29yZEFuZEJsb2NrT2Zmc2V0ICsgbGluay5lbmQgKyAxLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgbGluayBpbnNpZGUgY29kZSBtYXJrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIobGluayA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV3U3RhdGUuc2NoZW1hLm1hcmtzLmNvZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbmV3U3RhdGUuZG9jLnJhbmdlSGFzTWFyayhsaW5rLmZyb20sIGxpbmsudG8sIG5ld1N0YXRlLnNjaGVtYS5tYXJrcy5jb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWxpZGF0ZSBsaW5rXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIobGluayA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnZhbGlkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy52YWxpZGF0ZShsaW5rLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgbGluayBtYXJrLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChsaW5rID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldE1hcmtzQmV0d2VlbihsaW5rLmZyb20sIGxpbmsudG8sIG5ld1N0YXRlLmRvYykuc29tZShpdGVtID0+IGl0ZW0ubWFyay50eXBlID09PSBvcHRpb25zLnR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdHIuYWRkTWFyayhsaW5rLmZyb20sIGxpbmsudG8sIG9wdGlvbnMudHlwZS5jcmVhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogbGluay5ocmVmLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoIXRyLnN0ZXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cjtcclxuICAgICAgICB9LFxyXG4gICAgfSk7XHJcbn1cblxuZnVuY3Rpb24gY2xpY2tIYW5kbGVyKG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBuZXcgUGx1Z2luKHtcclxuICAgICAgICBrZXk6IG5ldyBQbHVnaW5LZXkoJ2hhbmRsZUNsaWNrTGluaycpLFxyXG4gICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrOiAodmlldywgcG9zLCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudC5idXR0b24gIT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudFRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudFRhcmdldC5ub2RlTmFtZSAhPT0gJ0EnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cnMgPSBnZXRBdHRyaWJ1dGVzKHZpZXcuc3RhdGUsIG9wdGlvbnMudHlwZS5uYW1lKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBocmVmID0gKF9hID0gbGluayA9PT0gbnVsbCB8fCBsaW5rID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsaW5rLmhyZWYpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGF0dHJzLmhyZWY7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSAoX2IgPSBsaW5rID09PSBudWxsIHx8IGxpbmsgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxpbmsudGFyZ2V0KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBhdHRycy50YXJnZXQ7XHJcbiAgICAgICAgICAgICAgICBpZiAobGluayAmJiBocmVmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcuZWRpdGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4oaHJlZiwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG59XG5cbmZ1bmN0aW9uIHBhc3RlSGFuZGxlcihvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gbmV3IFBsdWdpbih7XHJcbiAgICAgICAga2V5OiBuZXcgUGx1Z2luS2V5KCdoYW5kbGVQYXN0ZUxpbmsnKSxcclxuICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgICBoYW5kbGVQYXN0ZTogKHZpZXcsIGV2ZW50LCBzbGljZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGF0ZSB9ID0gdmlldztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBzdGF0ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZW1wdHkgfSA9IHNlbGVjdGlvbjtcclxuICAgICAgICAgICAgICAgIGlmIChlbXB0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCB0ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgc2xpY2UuY29udGVudC5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50ICs9IG5vZGUudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBmaW5kKHRleHRDb250ZW50KS5maW5kKGl0ZW0gPT4gaXRlbS5pc0xpbmsgJiYgaXRlbS52YWx1ZSA9PT0gdGV4dENvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0ZXh0Q29udGVudCB8fCAhbGluaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSAoX2EgPSBldmVudC5jbGlwYm9hcmREYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0RGF0YSgndGV4dC9odG1sJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBocmVmUmVnZXggPSAvaHJlZj1cIihbXlwiXSopXCIvO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdMaW5rID0gaHRtbCA9PT0gbnVsbCB8fCBodG1sID09PSB2b2lkIDAgPyB2b2lkIDAgOiBodG1sLm1hdGNoKGhyZWZSZWdleCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBleGlzdGluZ0xpbmsgPyBleGlzdGluZ0xpbmtbMV0gOiBsaW5rLmhyZWY7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLmVkaXRvci5jb21tYW5kcy5zZXRNYXJrKG9wdGlvbnMudHlwZSwge1xyXG4gICAgICAgICAgICAgICAgICAgIGhyZWY6IHVybCxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG59XG5cbmNvbnN0IExpbmsgPSBNYXJrLmNyZWF0ZSh7XHJcbiAgICBuYW1lOiAnbGluaycsXHJcbiAgICBwcmlvcml0eTogMTAwMCxcclxuICAgIGtlZXBPblNwbGl0OiBmYWxzZSxcclxuICAgIG9uQ3JlYXRlKCkge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wcm90b2NvbHMuZm9yRWFjaChwcm90b2NvbCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvdG9jb2wgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbVByb3RvY29sKHByb3RvY29sKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZWdpc3RlckN1c3RvbVByb3RvY29sKHByb3RvY29sLnNjaGVtZSwgcHJvdG9jb2wub3B0aW9uYWxTbGFzaGVzKTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBvbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgcmVzZXQoKTtcclxuICAgIH0sXHJcbiAgICBpbmNsdXNpdmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hdXRvbGluaztcclxuICAgIH0sXHJcbiAgICBhZGRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9wZW5PbkNsaWNrOiB0cnVlLFxyXG4gICAgICAgICAgICBsaW5rT25QYXN0ZTogdHJ1ZSxcclxuICAgICAgICAgICAgYXV0b2xpbms6IHRydWUsXHJcbiAgICAgICAgICAgIHByb3RvY29sczogW10sXHJcbiAgICAgICAgICAgIEhUTUxBdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQ6ICdfYmxhbmsnLFxyXG4gICAgICAgICAgICAgICAgcmVsOiAnbm9vcGVuZXIgbm9yZWZlcnJlciBub2ZvbGxvdycsXHJcbiAgICAgICAgICAgICAgICBjbGFzczogbnVsbCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdmFsaWRhdGU6IHVuZGVmaW5lZCxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGFkZEF0dHJpYnV0ZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaHJlZjoge1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogbnVsbCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGFyZ2V0OiB7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB0aGlzLm9wdGlvbnMuSFRNTEF0dHJpYnV0ZXMudGFyZ2V0LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZWw6IHtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRoaXMub3B0aW9ucy5IVE1MQXR0cmlidXRlcy5yZWwsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNsYXNzOiB7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB0aGlzLm9wdGlvbnMuSFRNTEF0dHJpYnV0ZXMuY2xhc3MsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBwYXJzZUhUTUwoKSB7XHJcbiAgICAgICAgcmV0dXJuIFt7IHRhZzogJ2FbaHJlZl06bm90KFtocmVmICo9IFwiamF2YXNjcmlwdDpcIiBpXSknIH1dO1xyXG4gICAgfSxcclxuICAgIHJlbmRlckhUTUwoeyBIVE1MQXR0cmlidXRlcyB9KSB7XHJcbiAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgIC8vIEZhbHNlIHBvc2l0aXZlOyB3ZSdyZSBleHBsaWNpdGx5IGNoZWNraW5nIGZvciBqYXZhc2NyaXB0OiBsaW5rcyB0byBpZ25vcmUgdGhlbVxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zY3JpcHQtdXJsXHJcbiAgICAgICAgaWYgKChfYSA9IEhUTUxBdHRyaWJ1dGVzLmhyZWYpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdGFydHNXaXRoKCdqYXZhc2NyaXB0OicpKSB7XHJcbiAgICAgICAgICAgIC8vIHN0cmlwIG91dCB0aGUgaHJlZlxyXG4gICAgICAgICAgICByZXR1cm4gWydhJywgbWVyZ2VBdHRyaWJ1dGVzKHRoaXMub3B0aW9ucy5IVE1MQXR0cmlidXRlcywgeyAuLi5IVE1MQXR0cmlidXRlcywgaHJlZjogJycgfSksIDBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gWydhJywgbWVyZ2VBdHRyaWJ1dGVzKHRoaXMub3B0aW9ucy5IVE1MQXR0cmlidXRlcywgSFRNTEF0dHJpYnV0ZXMpLCAwXTtcclxuICAgIH0sXHJcbiAgICBhZGRDb21tYW5kcygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBzZXRMaW5rOiBhdHRyaWJ1dGVzID0+ICh7IGNoYWluIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGFpbigpLnNldE1hcmsodGhpcy5uYW1lLCBhdHRyaWJ1dGVzKS5zZXRNZXRhKCdwcmV2ZW50QXV0b2xpbmsnLCB0cnVlKS5ydW4oKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdG9nZ2xlTGluazogYXR0cmlidXRlcyA9PiAoeyBjaGFpbiB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hhaW4oKVxyXG4gICAgICAgICAgICAgICAgICAgIC50b2dnbGVNYXJrKHRoaXMubmFtZSwgYXR0cmlidXRlcywgeyBleHRlbmRFbXB0eU1hcmtSYW5nZTogdHJ1ZSB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXRNZXRhKCdwcmV2ZW50QXV0b2xpbmsnLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgIC5ydW4oKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdW5zZXRMaW5rOiAoKSA9PiAoeyBjaGFpbiB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hhaW4oKVxyXG4gICAgICAgICAgICAgICAgICAgIC51bnNldE1hcmsodGhpcy5uYW1lLCB7IGV4dGVuZEVtcHR5TWFya1JhbmdlOiB0cnVlIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnNldE1ldGEoJ3ByZXZlbnRBdXRvbGluaycsIHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJ1bigpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgYWRkUGFzdGVSdWxlcygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBtYXJrUGFzdGVSdWxlKHtcclxuICAgICAgICAgICAgICAgIGZpbmQ6IHRleHQgPT4gZmluZCh0ZXh0KVxyXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIobGluayA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy52YWxpZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZhbGlkYXRlKGxpbmsudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihsaW5rID0+IGxpbmsuaXNMaW5rKVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAobGluayA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGxpbmsudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGxpbmsuc3RhcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogbGluayxcclxuICAgICAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgICAgICAgICAgIGdldEF0dHJpYnV0ZXM6IChtYXRjaCwgcGFzdGVFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IChfYSA9IHBhc3RlRXZlbnQgPT09IG51bGwgfHwgcGFzdGVFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFzdGVFdmVudC5jbGlwYm9hcmREYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0RGF0YSgndGV4dC9odG1sJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaHJlZlJlZ2V4ID0gL2hyZWY9XCIoW15cIl0qKVwiLztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0xpbmsgPSBodG1sID09PSBudWxsIHx8IGh0bWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGh0bWwubWF0Y2goaHJlZlJlZ2V4KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdMaW5rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmOiBleGlzdGluZ0xpbmtbMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6IChfYiA9IG1hdGNoLmRhdGEpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5ocmVmLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICBdO1xyXG4gICAgfSxcclxuICAgIGFkZFByb3NlTWlycm9yUGx1Z2lucygpIHtcclxuICAgICAgICBjb25zdCBwbHVnaW5zID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvbGluaykge1xyXG4gICAgICAgICAgICBwbHVnaW5zLnB1c2goYXV0b2xpbmsoe1xyXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICAgICAgdmFsaWRhdGU6IHRoaXMub3B0aW9ucy52YWxpZGF0ZSxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9wZW5PbkNsaWNrKSB7XHJcbiAgICAgICAgICAgIHBsdWdpbnMucHVzaChjbGlja0hhbmRsZXIoe1xyXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlua09uUGFzdGUpIHtcclxuICAgICAgICAgICAgcGx1Z2lucy5wdXNoKHBhc3RlSGFuZGxlcih7XHJcbiAgICAgICAgICAgICAgICBlZGl0b3I6IHRoaXMuZWRpdG9yLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwbHVnaW5zO1xyXG4gICAgfSxcclxufSk7XG5cbmV4cG9ydCB7IExpbmssIExpbmsgYXMgZGVmYXVsdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLCIvLyBzcmMvaW5kZXgudHNcbmltcG9ydCB7IFBsdWdpbiBhcyBQbHVnaW4yIH0gZnJvbSBcInByb3NlbWlycm9yLXN0YXRlXCI7XG5cbi8vIHNyYy9jZWxsc2VsZWN0aW9uLnRzXG5pbXBvcnQgeyBGcmFnbWVudCwgU2xpY2UgfSBmcm9tIFwicHJvc2VtaXJyb3ItbW9kZWxcIjtcbmltcG9ydCB7XG4gIE5vZGVTZWxlY3Rpb24gYXMgTm9kZVNlbGVjdGlvbjIsXG4gIFNlbGVjdGlvbixcbiAgU2VsZWN0aW9uUmFuZ2UsXG4gIFRleHRTZWxlY3Rpb25cbn0gZnJvbSBcInByb3NlbWlycm9yLXN0YXRlXCI7XG5pbXBvcnQgeyBEZWNvcmF0aW9uLCBEZWNvcmF0aW9uU2V0IH0gZnJvbSBcInByb3NlbWlycm9yLXZpZXdcIjtcblxuLy8gc3JjL3RhYmxlbWFwLnRzXG52YXIgcmVhZEZyb21DYWNoZTtcbnZhciBhZGRUb0NhY2hlO1xuaWYgKHR5cGVvZiBXZWFrTWFwICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgbGV0IGNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG4gIHJlYWRGcm9tQ2FjaGUgPSAoa2V5KSA9PiBjYWNoZS5nZXQoa2V5KTtcbiAgYWRkVG9DYWNoZSA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgY2FjaGUuc2V0KGtleSwgdmFsdWUpO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn0gZWxzZSB7XG4gIGNvbnN0IGNhY2hlID0gW107XG4gIGNvbnN0IGNhY2hlU2l6ZSA9IDEwO1xuICBsZXQgY2FjaGVQb3MgPSAwO1xuICByZWFkRnJvbUNhY2hlID0gKGtleSkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FjaGUubGVuZ3RoOyBpICs9IDIpXG4gICAgICBpZiAoY2FjaGVbaV0gPT0ga2V5KVxuICAgICAgICByZXR1cm4gY2FjaGVbaSArIDFdO1xuICB9O1xuICBhZGRUb0NhY2hlID0gKGtleSwgdmFsdWUpID0+IHtcbiAgICBpZiAoY2FjaGVQb3MgPT0gY2FjaGVTaXplKVxuICAgICAgY2FjaGVQb3MgPSAwO1xuICAgIGNhY2hlW2NhY2hlUG9zKytdID0ga2V5O1xuICAgIHJldHVybiBjYWNoZVtjYWNoZVBvcysrXSA9IHZhbHVlO1xuICB9O1xufVxudmFyIFRhYmxlTWFwID0gY2xhc3Mge1xuICBjb25zdHJ1Y3Rvcih3aWR0aCwgaGVpZ2h0LCBtYXAsIHByb2JsZW1zKSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIHRoaXMubWFwID0gbWFwO1xuICAgIHRoaXMucHJvYmxlbXMgPSBwcm9ibGVtcztcbiAgfVxuICBmaW5kQ2VsbChwb3MpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubWFwLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJQb3MgPSB0aGlzLm1hcFtpXTtcbiAgICAgIGlmIChjdXJQb3MgIT0gcG9zKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGNvbnN0IGxlZnQgPSBpICUgdGhpcy53aWR0aDtcbiAgICAgIGNvbnN0IHRvcCA9IGkgLyB0aGlzLndpZHRoIHwgMDtcbiAgICAgIGxldCByaWdodCA9IGxlZnQgKyAxO1xuICAgICAgbGV0IGJvdHRvbSA9IHRvcCArIDE7XG4gICAgICBmb3IgKGxldCBqID0gMTsgcmlnaHQgPCB0aGlzLndpZHRoICYmIHRoaXMubWFwW2kgKyBqXSA9PSBjdXJQb3M7IGorKykge1xuICAgICAgICByaWdodCsrO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaiA9IDE7IGJvdHRvbSA8IHRoaXMuaGVpZ2h0ICYmIHRoaXMubWFwW2kgKyB0aGlzLndpZHRoICogal0gPT0gY3VyUG9zOyBqKyspIHtcbiAgICAgICAgYm90dG9tKys7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20gfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5vIGNlbGwgd2l0aCBvZmZzZXQgJHtwb3N9IGZvdW5kYCk7XG4gIH1cbiAgY29sQ291bnQocG9zKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1hcC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMubWFwW2ldID09IHBvcykge1xuICAgICAgICByZXR1cm4gaSAlIHRoaXMud2lkdGg7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBObyBjZWxsIHdpdGggb2Zmc2V0ICR7cG9zfSBmb3VuZGApO1xuICB9XG4gIG5leHRDZWxsKHBvcywgYXhpcywgZGlyKSB7XG4gICAgY29uc3QgeyBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20gfSA9IHRoaXMuZmluZENlbGwocG9zKTtcbiAgICBpZiAoYXhpcyA9PSBcImhvcml6XCIpIHtcbiAgICAgIGlmIChkaXIgPCAwID8gbGVmdCA9PSAwIDogcmlnaHQgPT0gdGhpcy53aWR0aClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gdGhpcy5tYXBbdG9wICogdGhpcy53aWR0aCArIChkaXIgPCAwID8gbGVmdCAtIDEgOiByaWdodCldO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZGlyIDwgMCA/IHRvcCA9PSAwIDogYm90dG9tID09IHRoaXMuaGVpZ2h0KVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiB0aGlzLm1hcFtsZWZ0ICsgdGhpcy53aWR0aCAqIChkaXIgPCAwID8gdG9wIC0gMSA6IGJvdHRvbSldO1xuICAgIH1cbiAgfVxuICByZWN0QmV0d2VlbihhLCBiKSB7XG4gICAgY29uc3Qge1xuICAgICAgbGVmdDogbGVmdEEsXG4gICAgICByaWdodDogcmlnaHRBLFxuICAgICAgdG9wOiB0b3BBLFxuICAgICAgYm90dG9tOiBib3R0b21BXG4gICAgfSA9IHRoaXMuZmluZENlbGwoYSk7XG4gICAgY29uc3Qge1xuICAgICAgbGVmdDogbGVmdEIsXG4gICAgICByaWdodDogcmlnaHRCLFxuICAgICAgdG9wOiB0b3BCLFxuICAgICAgYm90dG9tOiBib3R0b21CXG4gICAgfSA9IHRoaXMuZmluZENlbGwoYik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxlZnQ6IE1hdGgubWluKGxlZnRBLCBsZWZ0QiksXG4gICAgICB0b3A6IE1hdGgubWluKHRvcEEsIHRvcEIpLFxuICAgICAgcmlnaHQ6IE1hdGgubWF4KHJpZ2h0QSwgcmlnaHRCKSxcbiAgICAgIGJvdHRvbTogTWF0aC5tYXgoYm90dG9tQSwgYm90dG9tQilcbiAgICB9O1xuICB9XG4gIGNlbGxzSW5SZWN0KHJlY3QpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCBzZWVuID0ge307XG4gICAgZm9yIChsZXQgcm93ID0gcmVjdC50b3A7IHJvdyA8IHJlY3QuYm90dG9tOyByb3crKykge1xuICAgICAgZm9yIChsZXQgY29sID0gcmVjdC5sZWZ0OyBjb2wgPCByZWN0LnJpZ2h0OyBjb2wrKykge1xuICAgICAgICBjb25zdCBpbmRleCA9IHJvdyAqIHRoaXMud2lkdGggKyBjb2w7XG4gICAgICAgIGNvbnN0IHBvcyA9IHRoaXMubWFwW2luZGV4XTtcbiAgICAgICAgaWYgKHNlZW5bcG9zXSlcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgc2Vlbltwb3NdID0gdHJ1ZTtcbiAgICAgICAgaWYgKGNvbCA9PSByZWN0LmxlZnQgJiYgY29sICYmIHRoaXMubWFwW2luZGV4IC0gMV0gPT0gcG9zIHx8IHJvdyA9PSByZWN0LnRvcCAmJiByb3cgJiYgdGhpcy5tYXBbaW5kZXggLSB0aGlzLndpZHRoXSA9PSBwb3MpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaChwb3MpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHBvc2l0aW9uQXQocm93LCBjb2wsIHRhYmxlKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIHJvd1N0YXJ0ID0gMDsgOyBpKyspIHtcbiAgICAgIGNvbnN0IHJvd0VuZCA9IHJvd1N0YXJ0ICsgdGFibGUuY2hpbGQoaSkubm9kZVNpemU7XG4gICAgICBpZiAoaSA9PSByb3cpIHtcbiAgICAgICAgbGV0IGluZGV4ID0gY29sICsgcm93ICogdGhpcy53aWR0aDtcbiAgICAgICAgY29uc3Qgcm93RW5kSW5kZXggPSAocm93ICsgMSkgKiB0aGlzLndpZHRoO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCByb3dFbmRJbmRleCAmJiB0aGlzLm1hcFtpbmRleF0gPCByb3dTdGFydClcbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICByZXR1cm4gaW5kZXggPT0gcm93RW5kSW5kZXggPyByb3dFbmQgLSAxIDogdGhpcy5tYXBbaW5kZXhdO1xuICAgICAgfVxuICAgICAgcm93U3RhcnQgPSByb3dFbmQ7XG4gICAgfVxuICB9XG4gIHN0YXRpYyBnZXQodGFibGUpIHtcbiAgICByZXR1cm4gcmVhZEZyb21DYWNoZSh0YWJsZSkgfHwgYWRkVG9DYWNoZSh0YWJsZSwgY29tcHV0ZU1hcCh0YWJsZSkpO1xuICB9XG59O1xuZnVuY3Rpb24gY29tcHV0ZU1hcCh0YWJsZSkge1xuICBpZiAodGFibGUudHlwZS5zcGVjLnRhYmxlUm9sZSAhPSBcInRhYmxlXCIpXG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJOb3QgYSB0YWJsZSBub2RlOiBcIiArIHRhYmxlLnR5cGUubmFtZSk7XG4gIGNvbnN0IHdpZHRoID0gZmluZFdpZHRoKHRhYmxlKSwgaGVpZ2h0ID0gdGFibGUuY2hpbGRDb3VudDtcbiAgY29uc3QgbWFwID0gW107XG4gIGxldCBtYXBQb3MgPSAwO1xuICBsZXQgcHJvYmxlbXMgPSBudWxsO1xuICBjb25zdCBjb2xXaWR0aHMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDAsIGUgPSB3aWR0aCAqIGhlaWdodDsgaSA8IGU7IGkrKylcbiAgICBtYXBbaV0gPSAwO1xuICBmb3IgKGxldCByb3cgPSAwLCBwb3MgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdysrKSB7XG4gICAgY29uc3Qgcm93Tm9kZSA9IHRhYmxlLmNoaWxkKHJvdyk7XG4gICAgcG9zKys7XG4gICAgZm9yIChsZXQgaSA9IDA7IDsgaSsrKSB7XG4gICAgICB3aGlsZSAobWFwUG9zIDwgbWFwLmxlbmd0aCAmJiBtYXBbbWFwUG9zXSAhPSAwKVxuICAgICAgICBtYXBQb3MrKztcbiAgICAgIGlmIChpID09IHJvd05vZGUuY2hpbGRDb3VudClcbiAgICAgICAgYnJlYWs7XG4gICAgICBjb25zdCBjZWxsTm9kZSA9IHJvd05vZGUuY2hpbGQoaSk7XG4gICAgICBjb25zdCB7IGNvbHNwYW4sIHJvd3NwYW4sIGNvbHdpZHRoIH0gPSBjZWxsTm9kZS5hdHRycztcbiAgICAgIGZvciAobGV0IGggPSAwOyBoIDwgcm93c3BhbjsgaCsrKSB7XG4gICAgICAgIGlmIChoICsgcm93ID49IGhlaWdodCkge1xuICAgICAgICAgIChwcm9ibGVtcyB8fCAocHJvYmxlbXMgPSBbXSkpLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogXCJvdmVybG9uZ19yb3dzcGFuXCIsXG4gICAgICAgICAgICBwb3MsXG4gICAgICAgICAgICBuOiByb3dzcGFuIC0gaFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbWFwUG9zICsgaCAqIHdpZHRoO1xuICAgICAgICBmb3IgKGxldCB3ID0gMDsgdyA8IGNvbHNwYW47IHcrKykge1xuICAgICAgICAgIGlmIChtYXBbc3RhcnQgKyB3XSA9PSAwKVxuICAgICAgICAgICAgbWFwW3N0YXJ0ICsgd10gPSBwb3M7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgKHByb2JsZW1zIHx8IChwcm9ibGVtcyA9IFtdKSkucHVzaCh7XG4gICAgICAgICAgICAgIHR5cGU6IFwiY29sbGlzaW9uXCIsXG4gICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgcG9zLFxuICAgICAgICAgICAgICBuOiBjb2xzcGFuIC0gd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgY29sVyA9IGNvbHdpZHRoICYmIGNvbHdpZHRoW3ddO1xuICAgICAgICAgIGlmIChjb2xXKSB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aEluZGV4ID0gKHN0YXJ0ICsgdykgJSB3aWR0aCAqIDIsIHByZXYgPSBjb2xXaWR0aHNbd2lkdGhJbmRleF07XG4gICAgICAgICAgICBpZiAocHJldiA9PSBudWxsIHx8IHByZXYgIT0gY29sVyAmJiBjb2xXaWR0aHNbd2lkdGhJbmRleCArIDFdID09IDEpIHtcbiAgICAgICAgICAgICAgY29sV2lkdGhzW3dpZHRoSW5kZXhdID0gY29sVztcbiAgICAgICAgICAgICAgY29sV2lkdGhzW3dpZHRoSW5kZXggKyAxXSA9IDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByZXYgPT0gY29sVykge1xuICAgICAgICAgICAgICBjb2xXaWR0aHNbd2lkdGhJbmRleCArIDFdKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBtYXBQb3MgKz0gY29sc3BhbjtcbiAgICAgIHBvcyArPSBjZWxsTm9kZS5ub2RlU2l6ZTtcbiAgICB9XG4gICAgY29uc3QgZXhwZWN0ZWRQb3MgPSAocm93ICsgMSkgKiB3aWR0aDtcbiAgICBsZXQgbWlzc2luZyA9IDA7XG4gICAgd2hpbGUgKG1hcFBvcyA8IGV4cGVjdGVkUG9zKVxuICAgICAgaWYgKG1hcFttYXBQb3MrK10gPT0gMClcbiAgICAgICAgbWlzc2luZysrO1xuICAgIGlmIChtaXNzaW5nKVxuICAgICAgKHByb2JsZW1zIHx8IChwcm9ibGVtcyA9IFtdKSkucHVzaCh7IHR5cGU6IFwibWlzc2luZ1wiLCByb3csIG46IG1pc3NpbmcgfSk7XG4gICAgcG9zKys7XG4gIH1cbiAgY29uc3QgdGFibGVNYXAgPSBuZXcgVGFibGVNYXAod2lkdGgsIGhlaWdodCwgbWFwLCBwcm9ibGVtcyk7XG4gIGxldCBiYWRXaWR0aHMgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7ICFiYWRXaWR0aHMgJiYgaSA8IGNvbFdpZHRocy5sZW5ndGg7IGkgKz0gMilcbiAgICBpZiAoY29sV2lkdGhzW2ldICE9IG51bGwgJiYgY29sV2lkdGhzW2kgKyAxXSA8IGhlaWdodClcbiAgICAgIGJhZFdpZHRocyA9IHRydWU7XG4gIGlmIChiYWRXaWR0aHMpXG4gICAgZmluZEJhZENvbFdpZHRocyh0YWJsZU1hcCwgY29sV2lkdGhzLCB0YWJsZSk7XG4gIHJldHVybiB0YWJsZU1hcDtcbn1cbmZ1bmN0aW9uIGZpbmRXaWR0aCh0YWJsZSkge1xuICBsZXQgd2lkdGggPSAtMTtcbiAgbGV0IGhhc1Jvd1NwYW4gPSBmYWxzZTtcbiAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgdGFibGUuY2hpbGRDb3VudDsgcm93KyspIHtcbiAgICBjb25zdCByb3dOb2RlID0gdGFibGUuY2hpbGQocm93KTtcbiAgICBsZXQgcm93V2lkdGggPSAwO1xuICAgIGlmIChoYXNSb3dTcGFuKVxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3c7IGorKykge1xuICAgICAgICBjb25zdCBwcmV2Um93ID0gdGFibGUuY2hpbGQoaik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldlJvdy5jaGlsZENvdW50OyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjZWxsID0gcHJldlJvdy5jaGlsZChpKTtcbiAgICAgICAgICBpZiAoaiArIGNlbGwuYXR0cnMucm93c3BhbiA+IHJvdylcbiAgICAgICAgICAgIHJvd1dpZHRoICs9IGNlbGwuYXR0cnMuY29sc3BhbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Tm9kZS5jaGlsZENvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IGNlbGwgPSByb3dOb2RlLmNoaWxkKGkpO1xuICAgICAgcm93V2lkdGggKz0gY2VsbC5hdHRycy5jb2xzcGFuO1xuICAgICAgaWYgKGNlbGwuYXR0cnMucm93c3BhbiA+IDEpXG4gICAgICAgIGhhc1Jvd1NwYW4gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAod2lkdGggPT0gLTEpXG4gICAgICB3aWR0aCA9IHJvd1dpZHRoO1xuICAgIGVsc2UgaWYgKHdpZHRoICE9IHJvd1dpZHRoKVxuICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgcm93V2lkdGgpO1xuICB9XG4gIHJldHVybiB3aWR0aDtcbn1cbmZ1bmN0aW9uIGZpbmRCYWRDb2xXaWR0aHMobWFwLCBjb2xXaWR0aHMsIHRhYmxlKSB7XG4gIGlmICghbWFwLnByb2JsZW1zKVxuICAgIG1hcC5wcm9ibGVtcyA9IFtdO1xuICBjb25zdCBzZWVuID0ge307XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFwLm1hcC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHBvcyA9IG1hcC5tYXBbaV07XG4gICAgaWYgKHNlZW5bcG9zXSlcbiAgICAgIGNvbnRpbnVlO1xuICAgIHNlZW5bcG9zXSA9IHRydWU7XG4gICAgY29uc3Qgbm9kZSA9IHRhYmxlLm5vZGVBdChwb3MpO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5vIGNlbGwgd2l0aCBvZmZzZXQgJHtwb3N9IGZvdW5kYCk7XG4gICAgfVxuICAgIGxldCB1cGRhdGVkID0gbnVsbDtcbiAgICBjb25zdCBhdHRycyA9IG5vZGUuYXR0cnM7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBhdHRycy5jb2xzcGFuOyBqKyspIHtcbiAgICAgIGNvbnN0IGNvbCA9IChpICsgaikgJSBtYXAud2lkdGg7XG4gICAgICBjb25zdCBjb2xXaWR0aCA9IGNvbFdpZHRoc1tjb2wgKiAyXTtcbiAgICAgIGlmIChjb2xXaWR0aCAhPSBudWxsICYmICghYXR0cnMuY29sd2lkdGggfHwgYXR0cnMuY29sd2lkdGhbal0gIT0gY29sV2lkdGgpKVxuICAgICAgICAodXBkYXRlZCB8fCAodXBkYXRlZCA9IGZyZXNoQ29sV2lkdGgoYXR0cnMpKSlbal0gPSBjb2xXaWR0aDtcbiAgICB9XG4gICAgaWYgKHVwZGF0ZWQpXG4gICAgICBtYXAucHJvYmxlbXMudW5zaGlmdCh7XG4gICAgICAgIHR5cGU6IFwiY29sd2lkdGggbWlzbWF0Y2hcIixcbiAgICAgICAgcG9zLFxuICAgICAgICBjb2x3aWR0aDogdXBkYXRlZFxuICAgICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGZyZXNoQ29sV2lkdGgoYXR0cnMpIHtcbiAgaWYgKGF0dHJzLmNvbHdpZHRoKVxuICAgIHJldHVybiBhdHRycy5jb2x3aWR0aC5zbGljZSgpO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRycy5jb2xzcGFuOyBpKyspXG4gICAgcmVzdWx0LnB1c2goMCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIHNyYy91dGlsLnRzXG5pbXBvcnQgeyBQbHVnaW5LZXkgfSBmcm9tIFwicHJvc2VtaXJyb3Itc3RhdGVcIjtcblxuLy8gc3JjL3NjaGVtYS50c1xuZnVuY3Rpb24gZ2V0Q2VsbEF0dHJzKGRvbSwgZXh0cmFBdHRycykge1xuICBpZiAodHlwZW9mIGRvbSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCB3aWR0aEF0dHIgPSBkb20uZ2V0QXR0cmlidXRlKFwiZGF0YS1jb2x3aWR0aFwiKTtcbiAgY29uc3Qgd2lkdGhzID0gd2lkdGhBdHRyICYmIC9eXFxkKygsXFxkKykqJC8udGVzdCh3aWR0aEF0dHIpID8gd2lkdGhBdHRyLnNwbGl0KFwiLFwiKS5tYXAoKHMpID0+IE51bWJlcihzKSkgOiBudWxsO1xuICBjb25zdCBjb2xzcGFuID0gTnVtYmVyKGRvbS5nZXRBdHRyaWJ1dGUoXCJjb2xzcGFuXCIpIHx8IDEpO1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgY29sc3BhbixcbiAgICByb3dzcGFuOiBOdW1iZXIoZG9tLmdldEF0dHJpYnV0ZShcInJvd3NwYW5cIikgfHwgMSksXG4gICAgY29sd2lkdGg6IHdpZHRocyAmJiB3aWR0aHMubGVuZ3RoID09IGNvbHNwYW4gPyB3aWR0aHMgOiBudWxsXG4gIH07XG4gIGZvciAoY29uc3QgcHJvcCBpbiBleHRyYUF0dHJzKSB7XG4gICAgY29uc3QgZ2V0dGVyID0gZXh0cmFBdHRyc1twcm9wXS5nZXRGcm9tRE9NO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0dGVyICYmIGdldHRlcihkb20pO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICByZXN1bHRbcHJvcF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHNldENlbGxBdHRycyhub2RlLCBleHRyYUF0dHJzKSB7XG4gIGNvbnN0IGF0dHJzID0ge307XG4gIGlmIChub2RlLmF0dHJzLmNvbHNwYW4gIT0gMSlcbiAgICBhdHRycy5jb2xzcGFuID0gbm9kZS5hdHRycy5jb2xzcGFuO1xuICBpZiAobm9kZS5hdHRycy5yb3dzcGFuICE9IDEpXG4gICAgYXR0cnMucm93c3BhbiA9IG5vZGUuYXR0cnMucm93c3BhbjtcbiAgaWYgKG5vZGUuYXR0cnMuY29sd2lkdGgpXG4gICAgYXR0cnNbXCJkYXRhLWNvbHdpZHRoXCJdID0gbm9kZS5hdHRycy5jb2x3aWR0aC5qb2luKFwiLFwiKTtcbiAgZm9yIChjb25zdCBwcm9wIGluIGV4dHJhQXR0cnMpIHtcbiAgICBjb25zdCBzZXR0ZXIgPSBleHRyYUF0dHJzW3Byb3BdLnNldERPTUF0dHI7XG4gICAgaWYgKHNldHRlcilcbiAgICAgIHNldHRlcihub2RlLmF0dHJzW3Byb3BdLCBhdHRycyk7XG4gIH1cbiAgcmV0dXJuIGF0dHJzO1xufVxuZnVuY3Rpb24gdGFibGVOb2RlcyhvcHRpb25zKSB7XG4gIGNvbnN0IGV4dHJhQXR0cnMgPSBvcHRpb25zLmNlbGxBdHRyaWJ1dGVzIHx8IHt9O1xuICBjb25zdCBjZWxsQXR0cnMgPSB7XG4gICAgY29sc3BhbjogeyBkZWZhdWx0OiAxIH0sXG4gICAgcm93c3BhbjogeyBkZWZhdWx0OiAxIH0sXG4gICAgY29sd2lkdGg6IHsgZGVmYXVsdDogbnVsbCB9XG4gIH07XG4gIGZvciAoY29uc3QgcHJvcCBpbiBleHRyYUF0dHJzKVxuICAgIGNlbGxBdHRyc1twcm9wXSA9IHsgZGVmYXVsdDogZXh0cmFBdHRyc1twcm9wXS5kZWZhdWx0IH07XG4gIHJldHVybiB7XG4gICAgdGFibGU6IHtcbiAgICAgIGNvbnRlbnQ6IFwidGFibGVfcm93K1wiLFxuICAgICAgdGFibGVSb2xlOiBcInRhYmxlXCIsXG4gICAgICBpc29sYXRpbmc6IHRydWUsXG4gICAgICBncm91cDogb3B0aW9ucy50YWJsZUdyb3VwLFxuICAgICAgcGFyc2VET006IFt7IHRhZzogXCJ0YWJsZVwiIH1dLFxuICAgICAgdG9ET00oKSB7XG4gICAgICAgIHJldHVybiBbXCJ0YWJsZVwiLCBbXCJ0Ym9keVwiLCAwXV07XG4gICAgICB9XG4gICAgfSxcbiAgICB0YWJsZV9yb3c6IHtcbiAgICAgIGNvbnRlbnQ6IFwiKHRhYmxlX2NlbGwgfCB0YWJsZV9oZWFkZXIpKlwiLFxuICAgICAgdGFibGVSb2xlOiBcInJvd1wiLFxuICAgICAgcGFyc2VET006IFt7IHRhZzogXCJ0clwiIH1dLFxuICAgICAgdG9ET00oKSB7XG4gICAgICAgIHJldHVybiBbXCJ0clwiLCAwXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHRhYmxlX2NlbGw6IHtcbiAgICAgIGNvbnRlbnQ6IG9wdGlvbnMuY2VsbENvbnRlbnQsXG4gICAgICBhdHRyczogY2VsbEF0dHJzLFxuICAgICAgdGFibGVSb2xlOiBcImNlbGxcIixcbiAgICAgIGlzb2xhdGluZzogdHJ1ZSxcbiAgICAgIHBhcnNlRE9NOiBbXG4gICAgICAgIHsgdGFnOiBcInRkXCIsIGdldEF0dHJzOiAoZG9tKSA9PiBnZXRDZWxsQXR0cnMoZG9tLCBleHRyYUF0dHJzKSB9XG4gICAgICBdLFxuICAgICAgdG9ET00obm9kZSkge1xuICAgICAgICByZXR1cm4gW1widGRcIiwgc2V0Q2VsbEF0dHJzKG5vZGUsIGV4dHJhQXR0cnMpLCAwXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHRhYmxlX2hlYWRlcjoge1xuICAgICAgY29udGVudDogb3B0aW9ucy5jZWxsQ29udGVudCxcbiAgICAgIGF0dHJzOiBjZWxsQXR0cnMsXG4gICAgICB0YWJsZVJvbGU6IFwiaGVhZGVyX2NlbGxcIixcbiAgICAgIGlzb2xhdGluZzogdHJ1ZSxcbiAgICAgIHBhcnNlRE9NOiBbXG4gICAgICAgIHsgdGFnOiBcInRoXCIsIGdldEF0dHJzOiAoZG9tKSA9PiBnZXRDZWxsQXR0cnMoZG9tLCBleHRyYUF0dHJzKSB9XG4gICAgICBdLFxuICAgICAgdG9ET00obm9kZSkge1xuICAgICAgICByZXR1cm4gW1widGhcIiwgc2V0Q2VsbEF0dHJzKG5vZGUsIGV4dHJhQXR0cnMpLCAwXTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiB0YWJsZU5vZGVUeXBlcyhzY2hlbWEpIHtcbiAgbGV0IHJlc3VsdCA9IHNjaGVtYS5jYWNoZWQudGFibGVOb2RlVHlwZXM7XG4gIGlmICghcmVzdWx0KSB7XG4gICAgcmVzdWx0ID0gc2NoZW1hLmNhY2hlZC50YWJsZU5vZGVUeXBlcyA9IHt9O1xuICAgIGZvciAoY29uc3QgbmFtZSBpbiBzY2hlbWEubm9kZXMpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBzY2hlbWEubm9kZXNbbmFtZV0sIHJvbGUgPSB0eXBlLnNwZWMudGFibGVSb2xlO1xuICAgICAgaWYgKHJvbGUpXG4gICAgICAgIHJlc3VsdFtyb2xlXSA9IHR5cGU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIHNyYy91dGlsLnRzXG52YXIgdGFibGVFZGl0aW5nS2V5ID0gbmV3IFBsdWdpbktleShcInNlbGVjdGluZ0NlbGxzXCIpO1xuZnVuY3Rpb24gY2VsbEFyb3VuZCgkcG9zKSB7XG4gIGZvciAobGV0IGQgPSAkcG9zLmRlcHRoIC0gMTsgZCA+IDA7IGQtLSlcbiAgICBpZiAoJHBvcy5ub2RlKGQpLnR5cGUuc3BlYy50YWJsZVJvbGUgPT0gXCJyb3dcIilcbiAgICAgIHJldHVybiAkcG9zLm5vZGUoMCkucmVzb2x2ZSgkcG9zLmJlZm9yZShkICsgMSkpO1xuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGNlbGxXcmFwcGluZygkcG9zKSB7XG4gIGZvciAobGV0IGQgPSAkcG9zLmRlcHRoOyBkID4gMDsgZC0tKSB7XG4gICAgY29uc3Qgcm9sZSA9ICRwb3Mubm9kZShkKS50eXBlLnNwZWMudGFibGVSb2xlO1xuICAgIGlmIChyb2xlID09PSBcImNlbGxcIiB8fCByb2xlID09PSBcImhlYWRlcl9jZWxsXCIpXG4gICAgICByZXR1cm4gJHBvcy5ub2RlKGQpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gaXNJblRhYmxlKHN0YXRlKSB7XG4gIGNvbnN0ICRoZWFkID0gc3RhdGUuc2VsZWN0aW9uLiRoZWFkO1xuICBmb3IgKGxldCBkID0gJGhlYWQuZGVwdGg7IGQgPiAwOyBkLS0pXG4gICAgaWYgKCRoZWFkLm5vZGUoZCkudHlwZS5zcGVjLnRhYmxlUm9sZSA9PSBcInJvd1wiKVxuICAgICAgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHNlbGVjdGlvbkNlbGwoc3RhdGUpIHtcbiAgY29uc3Qgc2VsID0gc3RhdGUuc2VsZWN0aW9uO1xuICBpZiAoXCIkYW5jaG9yQ2VsbFwiIGluIHNlbCAmJiBzZWwuJGFuY2hvckNlbGwpIHtcbiAgICByZXR1cm4gc2VsLiRhbmNob3JDZWxsLnBvcyA+IHNlbC4kaGVhZENlbGwucG9zID8gc2VsLiRhbmNob3JDZWxsIDogc2VsLiRoZWFkQ2VsbDtcbiAgfSBlbHNlIGlmIChcIm5vZGVcIiBpbiBzZWwgJiYgc2VsLm5vZGUgJiYgc2VsLm5vZGUudHlwZS5zcGVjLnRhYmxlUm9sZSA9PSBcImNlbGxcIikge1xuICAgIHJldHVybiBzZWwuJGFuY2hvcjtcbiAgfVxuICBjb25zdCAkY2VsbCA9IGNlbGxBcm91bmQoc2VsLiRoZWFkKSB8fCBjZWxsTmVhcihzZWwuJGhlYWQpO1xuICBpZiAoJGNlbGwpIHtcbiAgICByZXR1cm4gJGNlbGw7XG4gIH1cbiAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5vIGNlbGwgZm91bmQgYXJvdW5kIHBvc2l0aW9uICR7c2VsLmhlYWR9YCk7XG59XG5mdW5jdGlvbiBjZWxsTmVhcigkcG9zKSB7XG4gIGZvciAobGV0IGFmdGVyID0gJHBvcy5ub2RlQWZ0ZXIsIHBvcyA9ICRwb3MucG9zOyBhZnRlcjsgYWZ0ZXIgPSBhZnRlci5maXJzdENoaWxkLCBwb3MrKykge1xuICAgIGNvbnN0IHJvbGUgPSBhZnRlci50eXBlLnNwZWMudGFibGVSb2xlO1xuICAgIGlmIChyb2xlID09IFwiY2VsbFwiIHx8IHJvbGUgPT0gXCJoZWFkZXJfY2VsbFwiKVxuICAgICAgcmV0dXJuICRwb3MuZG9jLnJlc29sdmUocG9zKTtcbiAgfVxuICBmb3IgKGxldCBiZWZvcmUgPSAkcG9zLm5vZGVCZWZvcmUsIHBvcyA9ICRwb3MucG9zOyBiZWZvcmU7IGJlZm9yZSA9IGJlZm9yZS5sYXN0Q2hpbGQsIHBvcy0tKSB7XG4gICAgY29uc3Qgcm9sZSA9IGJlZm9yZS50eXBlLnNwZWMudGFibGVSb2xlO1xuICAgIGlmIChyb2xlID09IFwiY2VsbFwiIHx8IHJvbGUgPT0gXCJoZWFkZXJfY2VsbFwiKVxuICAgICAgcmV0dXJuICRwb3MuZG9jLnJlc29sdmUocG9zIC0gYmVmb3JlLm5vZGVTaXplKTtcbiAgfVxufVxuZnVuY3Rpb24gcG9pbnRzQXRDZWxsKCRwb3MpIHtcbiAgcmV0dXJuICRwb3MucGFyZW50LnR5cGUuc3BlYy50YWJsZVJvbGUgPT0gXCJyb3dcIiAmJiAhISRwb3Mubm9kZUFmdGVyO1xufVxuZnVuY3Rpb24gbW92ZUNlbGxGb3J3YXJkKCRwb3MpIHtcbiAgcmV0dXJuICRwb3Mubm9kZSgwKS5yZXNvbHZlKCRwb3MucG9zICsgJHBvcy5ub2RlQWZ0ZXIubm9kZVNpemUpO1xufVxuZnVuY3Rpb24gaW5TYW1lVGFibGUoJGNlbGxBLCAkY2VsbEIpIHtcbiAgcmV0dXJuICRjZWxsQS5kZXB0aCA9PSAkY2VsbEIuZGVwdGggJiYgJGNlbGxBLnBvcyA+PSAkY2VsbEIuc3RhcnQoLTEpICYmICRjZWxsQS5wb3MgPD0gJGNlbGxCLmVuZCgtMSk7XG59XG5mdW5jdGlvbiBmaW5kQ2VsbCgkcG9zKSB7XG4gIHJldHVybiBUYWJsZU1hcC5nZXQoJHBvcy5ub2RlKC0xKSkuZmluZENlbGwoJHBvcy5wb3MgLSAkcG9zLnN0YXJ0KC0xKSk7XG59XG5mdW5jdGlvbiBjb2xDb3VudCgkcG9zKSB7XG4gIHJldHVybiBUYWJsZU1hcC5nZXQoJHBvcy5ub2RlKC0xKSkuY29sQ291bnQoJHBvcy5wb3MgLSAkcG9zLnN0YXJ0KC0xKSk7XG59XG5mdW5jdGlvbiBuZXh0Q2VsbCgkcG9zLCBheGlzLCBkaXIpIHtcbiAgY29uc3QgdGFibGUgPSAkcG9zLm5vZGUoLTEpO1xuICBjb25zdCBtYXAgPSBUYWJsZU1hcC5nZXQodGFibGUpO1xuICBjb25zdCB0YWJsZVN0YXJ0ID0gJHBvcy5zdGFydCgtMSk7XG4gIGNvbnN0IG1vdmVkID0gbWFwLm5leHRDZWxsKCRwb3MucG9zIC0gdGFibGVTdGFydCwgYXhpcywgZGlyKTtcbiAgcmV0dXJuIG1vdmVkID09IG51bGwgPyBudWxsIDogJHBvcy5ub2RlKDApLnJlc29sdmUodGFibGVTdGFydCArIG1vdmVkKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUNvbFNwYW4oYXR0cnMsIHBvcywgbiA9IDEpIHtcbiAgY29uc3QgcmVzdWx0ID0geyAuLi5hdHRycywgY29sc3BhbjogYXR0cnMuY29sc3BhbiAtIG4gfTtcbiAgaWYgKHJlc3VsdC5jb2x3aWR0aCkge1xuICAgIHJlc3VsdC5jb2x3aWR0aCA9IHJlc3VsdC5jb2x3aWR0aC5zbGljZSgpO1xuICAgIHJlc3VsdC5jb2x3aWR0aC5zcGxpY2UocG9zLCBuKTtcbiAgICBpZiAoIXJlc3VsdC5jb2x3aWR0aC5zb21lKCh3KSA9PiB3ID4gMCkpXG4gICAgICByZXN1bHQuY29sd2lkdGggPSBudWxsO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBhZGRDb2xTcGFuKGF0dHJzLCBwb3MsIG4gPSAxKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uYXR0cnMsIGNvbHNwYW46IGF0dHJzLmNvbHNwYW4gKyBuIH07XG4gIGlmIChyZXN1bHQuY29sd2lkdGgpIHtcbiAgICByZXN1bHQuY29sd2lkdGggPSByZXN1bHQuY29sd2lkdGguc2xpY2UoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKylcbiAgICAgIHJlc3VsdC5jb2x3aWR0aC5zcGxpY2UocG9zLCAwLCAwKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY29sdW1uSXNIZWFkZXIobWFwLCB0YWJsZSwgY29sKSB7XG4gIGNvbnN0IGhlYWRlckNlbGwgPSB0YWJsZU5vZGVUeXBlcyh0YWJsZS50eXBlLnNjaGVtYSkuaGVhZGVyX2NlbGw7XG4gIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IG1hcC5oZWlnaHQ7IHJvdysrKVxuICAgIGlmICh0YWJsZS5ub2RlQXQobWFwLm1hcFtjb2wgKyByb3cgKiBtYXAud2lkdGhdKS50eXBlICE9IGhlYWRlckNlbGwpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vLyBzcmMvY2VsbHNlbGVjdGlvbi50c1xudmFyIENlbGxTZWxlY3Rpb24gPSBjbGFzcyBleHRlbmRzIFNlbGVjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCRhbmNob3JDZWxsLCAkaGVhZENlbGwgPSAkYW5jaG9yQ2VsbCkge1xuICAgIGNvbnN0IHRhYmxlID0gJGFuY2hvckNlbGwubm9kZSgtMSk7XG4gICAgY29uc3QgbWFwID0gVGFibGVNYXAuZ2V0KHRhYmxlKTtcbiAgICBjb25zdCB0YWJsZVN0YXJ0ID0gJGFuY2hvckNlbGwuc3RhcnQoLTEpO1xuICAgIGNvbnN0IHJlY3QgPSBtYXAucmVjdEJldHdlZW4oXG4gICAgICAkYW5jaG9yQ2VsbC5wb3MgLSB0YWJsZVN0YXJ0LFxuICAgICAgJGhlYWRDZWxsLnBvcyAtIHRhYmxlU3RhcnRcbiAgICApO1xuICAgIGNvbnN0IGRvYyA9ICRhbmNob3JDZWxsLm5vZGUoMCk7XG4gICAgY29uc3QgY2VsbHMgPSBtYXAuY2VsbHNJblJlY3QocmVjdCkuZmlsdGVyKChwKSA9PiBwICE9ICRoZWFkQ2VsbC5wb3MgLSB0YWJsZVN0YXJ0KTtcbiAgICBjZWxscy51bnNoaWZ0KCRoZWFkQ2VsbC5wb3MgLSB0YWJsZVN0YXJ0KTtcbiAgICBjb25zdCByYW5nZXMgPSBjZWxscy5tYXAoKHBvcykgPT4ge1xuICAgICAgY29uc3QgY2VsbCA9IHRhYmxlLm5vZGVBdChwb3MpO1xuICAgICAgaWYgKCFjZWxsKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoYE5vIGNlbGwgd2l0aCBvZmZzZXQgJHtwb3N9IGZvdW5kYCk7XG4gICAgICB9XG4gICAgICBjb25zdCBmcm9tID0gdGFibGVTdGFydCArIHBvcyArIDE7XG4gICAgICByZXR1cm4gbmV3IFNlbGVjdGlvblJhbmdlKFxuICAgICAgICBkb2MucmVzb2x2ZShmcm9tKSxcbiAgICAgICAgZG9jLnJlc29sdmUoZnJvbSArIGNlbGwuY29udGVudC5zaXplKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBzdXBlcihyYW5nZXNbMF0uJGZyb20sIHJhbmdlc1swXS4kdG8sIHJhbmdlcyk7XG4gICAgdGhpcy4kYW5jaG9yQ2VsbCA9ICRhbmNob3JDZWxsO1xuICAgIHRoaXMuJGhlYWRDZWxsID0gJGhlYWRDZWxsO1xuICB9XG4gIG1hcChkb2MsIG1hcHBpbmcpIHtcbiAgICBjb25zdCAkYW5jaG9yQ2VsbCA9IGRvYy5yZXNvbHZlKG1hcHBpbmcubWFwKHRoaXMuJGFuY2hvckNlbGwucG9zKSk7XG4gICAgY29uc3QgJGhlYWRDZWxsID0gZG9jLnJlc29sdmUobWFwcGluZy5tYXAodGhpcy4kaGVhZENlbGwucG9zKSk7XG4gICAgaWYgKHBvaW50c0F0Q2VsbCgkYW5jaG9yQ2VsbCkgJiYgcG9pbnRzQXRDZWxsKCRoZWFkQ2VsbCkgJiYgaW5TYW1lVGFibGUoJGFuY2hvckNlbGwsICRoZWFkQ2VsbCkpIHtcbiAgICAgIGNvbnN0IHRhYmxlQ2hhbmdlZCA9IHRoaXMuJGFuY2hvckNlbGwubm9kZSgtMSkgIT0gJGFuY2hvckNlbGwubm9kZSgtMSk7XG4gICAgICBpZiAodGFibGVDaGFuZ2VkICYmIHRoaXMuaXNSb3dTZWxlY3Rpb24oKSlcbiAgICAgICAgcmV0dXJuIENlbGxTZWxlY3Rpb24ucm93U2VsZWN0aW9uKCRhbmNob3JDZWxsLCAkaGVhZENlbGwpO1xuICAgICAgZWxzZSBpZiAodGFibGVDaGFuZ2VkICYmIHRoaXMuaXNDb2xTZWxlY3Rpb24oKSlcbiAgICAgICAgcmV0dXJuIENlbGxTZWxlY3Rpb24uY29sU2VsZWN0aW9uKCRhbmNob3JDZWxsLCAkaGVhZENlbGwpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gbmV3IENlbGxTZWxlY3Rpb24oJGFuY2hvckNlbGwsICRoZWFkQ2VsbCk7XG4gICAgfVxuICAgIHJldHVybiBUZXh0U2VsZWN0aW9uLmJldHdlZW4oJGFuY2hvckNlbGwsICRoZWFkQ2VsbCk7XG4gIH1cbiAgY29udGVudCgpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuJGFuY2hvckNlbGwubm9kZSgtMSk7XG4gICAgY29uc3QgbWFwID0gVGFibGVNYXAuZ2V0KHRhYmxlKTtcbiAgICBjb25zdCB0YWJsZVN0YXJ0ID0gdGhpcy4kYW5jaG9yQ2VsbC5zdGFydCgtMSk7XG4gICAgY29uc3QgcmVjdCA9IG1hcC5yZWN0QmV0d2VlbihcbiAgICAgIHRoaXMuJGFuY2hvckNlbGwucG9zIC0gdGFibGVTdGFydCxcbiAgICAgIHRoaXMuJGhlYWRDZWxsLnBvcyAtIHRhYmxlU3RhcnRcbiAgICApO1xuICAgIGNvbnN0IHNlZW4gPSB7fTtcbiAgICBjb25zdCByb3dzID0gW107XG4gICAgZm9yIChsZXQgcm93ID0gcmVjdC50b3A7IHJvdyA8IHJlY3QuYm90dG9tOyByb3crKykge1xuICAgICAgY29uc3Qgcm93Q29udGVudCA9IFtdO1xuICAgICAgZm9yIChsZXQgaW5kZXggPSByb3cgKiBtYXAud2lkdGggKyByZWN0LmxlZnQsIGNvbCA9IHJlY3QubGVmdDsgY29sIDwgcmVjdC5yaWdodDsgY29sKyssIGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgcG9zID0gbWFwLm1hcFtpbmRleF07XG4gICAgICAgIGlmIChzZWVuW3Bvc10pXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIHNlZW5bcG9zXSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGNlbGxSZWN0ID0gbWFwLmZpbmRDZWxsKHBvcyk7XG4gICAgICAgIGxldCBjZWxsID0gdGFibGUubm9kZUF0KHBvcyk7XG4gICAgICAgIGlmICghY2VsbCkge1xuICAgICAgICAgIHRocm93IFJhbmdlRXJyb3IoYE5vIGNlbGwgd2l0aCBvZmZzZXQgJHtwb3N9IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXh0cmFMZWZ0ID0gcmVjdC5sZWZ0IC0gY2VsbFJlY3QubGVmdDtcbiAgICAgICAgY29uc3QgZXh0cmFSaWdodCA9IGNlbGxSZWN0LnJpZ2h0IC0gcmVjdC5yaWdodDtcbiAgICAgICAgaWYgKGV4dHJhTGVmdCA+IDAgfHwgZXh0cmFSaWdodCA+IDApIHtcbiAgICAgICAgICBsZXQgYXR0cnMgPSBjZWxsLmF0dHJzO1xuICAgICAgICAgIGlmIChleHRyYUxlZnQgPiAwKSB7XG4gICAgICAgICAgICBhdHRycyA9IHJlbW92ZUNvbFNwYW4oYXR0cnMsIDAsIGV4dHJhTGVmdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChleHRyYVJpZ2h0ID4gMCkge1xuICAgICAgICAgICAgYXR0cnMgPSByZW1vdmVDb2xTcGFuKFxuICAgICAgICAgICAgICBhdHRycyxcbiAgICAgICAgICAgICAgYXR0cnMuY29sc3BhbiAtIGV4dHJhUmlnaHQsXG4gICAgICAgICAgICAgIGV4dHJhUmlnaHRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjZWxsUmVjdC5sZWZ0IDwgcmVjdC5sZWZ0KSB7XG4gICAgICAgICAgICBjZWxsID0gY2VsbC50eXBlLmNyZWF0ZUFuZEZpbGwoYXR0cnMpO1xuICAgICAgICAgICAgaWYgKCFjZWxsKSB7XG4gICAgICAgICAgICAgIHRocm93IFJhbmdlRXJyb3IoXG4gICAgICAgICAgICAgICAgYENvdWxkIG5vdCBjcmVhdGUgY2VsbCB3aXRoIGF0dHJzICR7SlNPTi5zdHJpbmdpZnkoYXR0cnMpfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2VsbCA9IGNlbGwudHlwZS5jcmVhdGUoYXR0cnMsIGNlbGwuY29udGVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjZWxsUmVjdC50b3AgPCByZWN0LnRvcCB8fCBjZWxsUmVjdC5ib3R0b20gPiByZWN0LmJvdHRvbSkge1xuICAgICAgICAgIGNvbnN0IGF0dHJzID0ge1xuICAgICAgICAgICAgLi4uY2VsbC5hdHRycyxcbiAgICAgICAgICAgIHJvd3NwYW46IE1hdGgubWluKGNlbGxSZWN0LmJvdHRvbSwgcmVjdC5ib3R0b20pIC0gTWF0aC5tYXgoY2VsbFJlY3QudG9wLCByZWN0LnRvcClcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChjZWxsUmVjdC50b3AgPCByZWN0LnRvcCkge1xuICAgICAgICAgICAgY2VsbCA9IGNlbGwudHlwZS5jcmVhdGVBbmRGaWxsKGF0dHJzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2VsbCA9IGNlbGwudHlwZS5jcmVhdGUoYXR0cnMsIGNlbGwuY29udGVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJvd0NvbnRlbnQucHVzaChjZWxsKTtcbiAgICAgIH1cbiAgICAgIHJvd3MucHVzaCh0YWJsZS5jaGlsZChyb3cpLmNvcHkoRnJhZ21lbnQuZnJvbShyb3dDb250ZW50KSkpO1xuICAgIH1cbiAgICBjb25zdCBmcmFnbWVudCA9IHRoaXMuaXNDb2xTZWxlY3Rpb24oKSAmJiB0aGlzLmlzUm93U2VsZWN0aW9uKCkgPyB0YWJsZSA6IHJvd3M7XG4gICAgcmV0dXJuIG5ldyBTbGljZShGcmFnbWVudC5mcm9tKGZyYWdtZW50KSwgMSwgMSk7XG4gIH1cbiAgcmVwbGFjZSh0ciwgY29udGVudCA9IFNsaWNlLmVtcHR5KSB7XG4gICAgY29uc3QgbWFwRnJvbSA9IHRyLnN0ZXBzLmxlbmd0aCwgcmFuZ2VzID0gdGhpcy5yYW5nZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHsgJGZyb20sICR0byB9ID0gcmFuZ2VzW2ldLCBtYXBwaW5nID0gdHIubWFwcGluZy5zbGljZShtYXBGcm9tKTtcbiAgICAgIHRyLnJlcGxhY2UoXG4gICAgICAgIG1hcHBpbmcubWFwKCRmcm9tLnBvcyksXG4gICAgICAgIG1hcHBpbmcubWFwKCR0by5wb3MpLFxuICAgICAgICBpID8gU2xpY2UuZW1wdHkgOiBjb250ZW50XG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzZWwgPSBTZWxlY3Rpb24uZmluZEZyb20oXG4gICAgICB0ci5kb2MucmVzb2x2ZSh0ci5tYXBwaW5nLnNsaWNlKG1hcEZyb20pLm1hcCh0aGlzLnRvKSksXG4gICAgICAtMVxuICAgICk7XG4gICAgaWYgKHNlbClcbiAgICAgIHRyLnNldFNlbGVjdGlvbihzZWwpO1xuICB9XG4gIHJlcGxhY2VXaXRoKHRyLCBub2RlKSB7XG4gICAgdGhpcy5yZXBsYWNlKHRyLCBuZXcgU2xpY2UoRnJhZ21lbnQuZnJvbShub2RlKSwgMCwgMCkpO1xuICB9XG4gIGZvckVhY2hDZWxsKGYpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuJGFuY2hvckNlbGwubm9kZSgtMSk7XG4gICAgY29uc3QgbWFwID0gVGFibGVNYXAuZ2V0KHRhYmxlKTtcbiAgICBjb25zdCB0YWJsZVN0YXJ0ID0gdGhpcy4kYW5jaG9yQ2VsbC5zdGFydCgtMSk7XG4gICAgY29uc3QgY2VsbHMgPSBtYXAuY2VsbHNJblJlY3QoXG4gICAgICBtYXAucmVjdEJldHdlZW4oXG4gICAgICAgIHRoaXMuJGFuY2hvckNlbGwucG9zIC0gdGFibGVTdGFydCxcbiAgICAgICAgdGhpcy4kaGVhZENlbGwucG9zIC0gdGFibGVTdGFydFxuICAgICAgKVxuICAgICk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgZih0YWJsZS5ub2RlQXQoY2VsbHNbaV0pLCB0YWJsZVN0YXJ0ICsgY2VsbHNbaV0pO1xuICAgIH1cbiAgfVxuICBpc0NvbFNlbGVjdGlvbigpIHtcbiAgICBjb25zdCBhbmNob3JUb3AgPSB0aGlzLiRhbmNob3JDZWxsLmluZGV4KC0xKTtcbiAgICBjb25zdCBoZWFkVG9wID0gdGhpcy4kaGVhZENlbGwuaW5kZXgoLTEpO1xuICAgIGlmIChNYXRoLm1pbihhbmNob3JUb3AsIGhlYWRUb3ApID4gMClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBhbmNob3JCb3R0b20gPSBhbmNob3JUb3AgKyB0aGlzLiRhbmNob3JDZWxsLm5vZGVBZnRlci5hdHRycy5yb3dzcGFuO1xuICAgIGNvbnN0IGhlYWRCb3R0b20gPSBoZWFkVG9wICsgdGhpcy4kaGVhZENlbGwubm9kZUFmdGVyLmF0dHJzLnJvd3NwYW47XG4gICAgcmV0dXJuIE1hdGgubWF4KGFuY2hvckJvdHRvbSwgaGVhZEJvdHRvbSkgPT0gdGhpcy4kaGVhZENlbGwubm9kZSgtMSkuY2hpbGRDb3VudDtcbiAgfVxuICBzdGF0aWMgY29sU2VsZWN0aW9uKCRhbmNob3JDZWxsLCAkaGVhZENlbGwgPSAkYW5jaG9yQ2VsbCkge1xuICAgIGNvbnN0IHRhYmxlID0gJGFuY2hvckNlbGwubm9kZSgtMSk7XG4gICAgY29uc3QgbWFwID0gVGFibGVNYXAuZ2V0KHRhYmxlKTtcbiAgICBjb25zdCB0YWJsZVN0YXJ0ID0gJGFuY2hvckNlbGwuc3RhcnQoLTEpO1xuICAgIGNvbnN0IGFuY2hvclJlY3QgPSBtYXAuZmluZENlbGwoJGFuY2hvckNlbGwucG9zIC0gdGFibGVTdGFydCk7XG4gICAgY29uc3QgaGVhZFJlY3QgPSBtYXAuZmluZENlbGwoJGhlYWRDZWxsLnBvcyAtIHRhYmxlU3RhcnQpO1xuICAgIGNvbnN0IGRvYyA9ICRhbmNob3JDZWxsLm5vZGUoMCk7XG4gICAgaWYgKGFuY2hvclJlY3QudG9wIDw9IGhlYWRSZWN0LnRvcCkge1xuICAgICAgaWYgKGFuY2hvclJlY3QudG9wID4gMClcbiAgICAgICAgJGFuY2hvckNlbGwgPSBkb2MucmVzb2x2ZSh0YWJsZVN0YXJ0ICsgbWFwLm1hcFthbmNob3JSZWN0LmxlZnRdKTtcbiAgICAgIGlmIChoZWFkUmVjdC5ib3R0b20gPCBtYXAuaGVpZ2h0KVxuICAgICAgICAkaGVhZENlbGwgPSBkb2MucmVzb2x2ZShcbiAgICAgICAgICB0YWJsZVN0YXJ0ICsgbWFwLm1hcFttYXAud2lkdGggKiAobWFwLmhlaWdodCAtIDEpICsgaGVhZFJlY3QucmlnaHQgLSAxXVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGVhZFJlY3QudG9wID4gMClcbiAgICAgICAgJGhlYWRDZWxsID0gZG9jLnJlc29sdmUodGFibGVTdGFydCArIG1hcC5tYXBbaGVhZFJlY3QubGVmdF0pO1xuICAgICAgaWYgKGFuY2hvclJlY3QuYm90dG9tIDwgbWFwLmhlaWdodClcbiAgICAgICAgJGFuY2hvckNlbGwgPSBkb2MucmVzb2x2ZShcbiAgICAgICAgICB0YWJsZVN0YXJ0ICsgbWFwLm1hcFttYXAud2lkdGggKiAobWFwLmhlaWdodCAtIDEpICsgYW5jaG9yUmVjdC5yaWdodCAtIDFdXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQ2VsbFNlbGVjdGlvbigkYW5jaG9yQ2VsbCwgJGhlYWRDZWxsKTtcbiAgfVxuICBpc1Jvd1NlbGVjdGlvbigpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuJGFuY2hvckNlbGwubm9kZSgtMSk7XG4gICAgY29uc3QgbWFwID0gVGFibGVNYXAuZ2V0KHRhYmxlKTtcbiAgICBjb25zdCB0YWJsZVN0YXJ0ID0gdGhpcy4kYW5jaG9yQ2VsbC5zdGFydCgtMSk7XG4gICAgY29uc3QgYW5jaG9yTGVmdCA9IG1hcC5jb2xDb3VudCh0aGlzLiRhbmNob3JDZWxsLnBvcyAtIHRhYmxlU3RhcnQpO1xuICAgIGNvbnN0IGhlYWRMZWZ0ID0gbWFwLmNvbENvdW50KHRoaXMuJGhlYWRDZWxsLnBvcyAtIHRhYmxlU3RhcnQpO1xuICAgIGlmIChNYXRoLm1pbihhbmNob3JMZWZ0LCBoZWFkTGVmdCkgPiAwKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGFuY2hvclJpZ2h0ID0gYW5jaG9yTGVmdCArIHRoaXMuJGFuY2hvckNlbGwubm9kZUFmdGVyLmF0dHJzLmNvbHNwYW47XG4gICAgY29uc3QgaGVhZFJpZ2h0ID0gaGVhZExlZnQgKyB0aGlzLiRoZWFkQ2VsbC5ub2RlQWZ0ZXIuYXR0cnMuY29sc3BhbjtcbiAgICByZXR1cm4gTWF0aC5tYXgoYW5jaG9yUmlnaHQsIGhlYWRSaWdodCkgPT0gbWFwLndpZHRoO1xuICB9XG4gIGVxKG90aGVyKSB7XG4gICAgcmV0dXJuIG90aGVyIGluc3RhbmNlb2YgQ2VsbFNlbGVjdGlvbiAmJiBvdGhlci4kYW5jaG9yQ2VsbC5wb3MgPT0gdGhpcy4kYW5jaG9yQ2VsbC5wb3MgJiYgb3RoZXIuJGhlYWRDZWxsLnBvcyA9PSB0aGlzLiRoZWFkQ2VsbC5wb3M7XG4gIH1cbiAgc3RhdGljIHJvd1NlbGVjdGlvbigkYW5jaG9yQ2VsbCwgJGhlYWRDZWxsID0gJGFuY2hvckNlbGwpIHtcbiAgICBjb25zdCB0YWJsZSA9ICRhbmNob3JDZWxsLm5vZGUoLTEpO1xuICAgIGNvbnN0IG1hcCA9IFRhYmxlTWFwLmdldCh0YWJsZSk7XG4gICAgY29uc3QgdGFibGVTdGFydCA9ICRhbmNob3JDZWxsLnN0YXJ0KC0xKTtcbiAgICBjb25zdCBhbmNob3JSZWN0ID0gbWFwLmZpbmRDZWxsKCRhbmNob3JDZWxsLnBvcyAtIHRhYmxlU3RhcnQpO1xuICAgIGNvbnN0IGhlYWRSZWN0ID0gbWFwLmZpbmRDZWxsKCRoZWFkQ2VsbC5wb3MgLSB0YWJsZVN0YXJ0KTtcbiAgICBjb25zdCBkb2MgPSAkYW5jaG9yQ2VsbC5ub2RlKDApO1xuICAgIGlmIChhbmNob3JSZWN0LmxlZnQgPD0gaGVhZFJlY3QubGVmdCkge1xuICAgICAgaWYgKGFuY2hvclJlY3QubGVmdCA+IDApXG4gICAgICAgICRhbmNob3JDZWxsID0gZG9jLnJlc29sdmUoXG4gICAgICAgICAgdGFibGVTdGFydCArIG1hcC5tYXBbYW5jaG9yUmVjdC50b3AgKiBtYXAud2lkdGhdXG4gICAgICAgICk7XG4gICAgICBpZiAoaGVhZFJlY3QucmlnaHQgPCBtYXAud2lkdGgpXG4gICAgICAgICRoZWFkQ2VsbCA9IGRvYy5yZXNvbHZlKFxuICAgICAgICAgIHRhYmxlU3RhcnQgKyBtYXAubWFwW21hcC53aWR0aCAqIChoZWFkUmVjdC50b3AgKyAxKSAtIDFdXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoZWFkUmVjdC5sZWZ0ID4gMClcbiAgICAgICAgJGhlYWRDZWxsID0gZG9jLnJlc29sdmUodGFibGVTdGFydCArIG1hcC5tYXBbaGVhZFJlY3QudG9wICogbWFwLndpZHRoXSk7XG4gICAgICBpZiAoYW5jaG9yUmVjdC5yaWdodCA8IG1hcC53aWR0aClcbiAgICAgICAgJGFuY2hvckNlbGwgPSBkb2MucmVzb2x2ZShcbiAgICAgICAgICB0YWJsZVN0YXJ0ICsgbWFwLm1hcFttYXAud2lkdGggKiAoYW5jaG9yUmVjdC50b3AgKyAxKSAtIDFdXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQ2VsbFNlbGVjdGlvbigkYW5jaG9yQ2VsbCwgJGhlYWRDZWxsKTtcbiAgfVxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY2VsbFwiLFxuICAgICAgYW5jaG9yOiB0aGlzLiRhbmNob3JDZWxsLnBvcyxcbiAgICAgIGhlYWQ6IHRoaXMuJGhlYWRDZWxsLnBvc1xuICAgIH07XG4gIH1cbiAgc3RhdGljIGZyb21KU09OKGRvYywganNvbikge1xuICAgIHJldHVybiBuZXcgQ2VsbFNlbGVjdGlvbihkb2MucmVzb2x2ZShqc29uLmFuY2hvciksIGRvYy5yZXNvbHZlKGpzb24uaGVhZCkpO1xuICB9XG4gIHN0YXRpYyBjcmVhdGUoZG9jLCBhbmNob3JDZWxsLCBoZWFkQ2VsbCA9IGFuY2hvckNlbGwpIHtcbiAgICByZXR1cm4gbmV3IENlbGxTZWxlY3Rpb24oZG9jLnJlc29sdmUoYW5jaG9yQ2VsbCksIGRvYy5yZXNvbHZlKGhlYWRDZWxsKSk7XG4gIH1cbiAgZ2V0Qm9va21hcmsoKSB7XG4gICAgcmV0dXJuIG5ldyBDZWxsQm9va21hcmsodGhpcy4kYW5jaG9yQ2VsbC5wb3MsIHRoaXMuJGhlYWRDZWxsLnBvcyk7XG4gIH1cbn07XG5DZWxsU2VsZWN0aW9uLnByb3RvdHlwZS52aXNpYmxlID0gZmFsc2U7XG5TZWxlY3Rpb24uanNvbklEKFwiY2VsbFwiLCBDZWxsU2VsZWN0aW9uKTtcbnZhciBDZWxsQm9va21hcmsgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKGFuY2hvciwgaGVhZCkge1xuICAgIHRoaXMuYW5jaG9yID0gYW5jaG9yO1xuICAgIHRoaXMuaGVhZCA9IGhlYWQ7XG4gIH1cbiAgbWFwKG1hcHBpbmcpIHtcbiAgICByZXR1cm4gbmV3IENlbGxCb29rbWFyayhtYXBwaW5nLm1hcCh0aGlzLmFuY2hvciksIG1hcHBpbmcubWFwKHRoaXMuaGVhZCkpO1xuICB9XG4gIHJlc29sdmUoZG9jKSB7XG4gICAgY29uc3QgJGFuY2hvckNlbGwgPSBkb2MucmVzb2x2ZSh0aGlzLmFuY2hvciksICRoZWFkQ2VsbCA9IGRvYy5yZXNvbHZlKHRoaXMuaGVhZCk7XG4gICAgaWYgKCRhbmNob3JDZWxsLnBhcmVudC50eXBlLnNwZWMudGFibGVSb2xlID09IFwicm93XCIgJiYgJGhlYWRDZWxsLnBhcmVudC50eXBlLnNwZWMudGFibGVSb2xlID09IFwicm93XCIgJiYgJGFuY2hvckNlbGwuaW5kZXgoKSA8ICRhbmNob3JDZWxsLnBhcmVudC5jaGlsZENvdW50ICYmICRoZWFkQ2VsbC5pbmRleCgpIDwgJGhlYWRDZWxsLnBhcmVudC5jaGlsZENvdW50ICYmIGluU2FtZVRhYmxlKCRhbmNob3JDZWxsLCAkaGVhZENlbGwpKVxuICAgICAgcmV0dXJuIG5ldyBDZWxsU2VsZWN0aW9uKCRhbmNob3JDZWxsLCAkaGVhZENlbGwpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBTZWxlY3Rpb24ubmVhcigkaGVhZENlbGwsIDEpO1xuICB9XG59O1xuZnVuY3Rpb24gZHJhd0NlbGxTZWxlY3Rpb24oc3RhdGUpIHtcbiAgaWYgKCEoc3RhdGUuc2VsZWN0aW9uIGluc3RhbmNlb2YgQ2VsbFNlbGVjdGlvbikpXG4gICAgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGNlbGxzID0gW107XG4gIHN0YXRlLnNlbGVjdGlvbi5mb3JFYWNoQ2VsbCgobm9kZSwgcG9zKSA9PiB7XG4gICAgY2VsbHMucHVzaChcbiAgICAgIERlY29yYXRpb24ubm9kZShwb3MsIHBvcyArIG5vZGUubm9kZVNpemUsIHsgY2xhc3M6IFwic2VsZWN0ZWRDZWxsXCIgfSlcbiAgICApO1xuICB9KTtcbiAgcmV0dXJuIERlY29yYXRpb25TZXQuY3JlYXRlKHN0YXRlLmRvYywgY2VsbHMpO1xufVxuZnVuY3Rpb24gaXNDZWxsQm91bmRhcnlTZWxlY3Rpb24oeyAkZnJvbSwgJHRvIH0pIHtcbiAgaWYgKCRmcm9tLnBvcyA9PSAkdG8ucG9zIHx8ICRmcm9tLnBvcyA8ICRmcm9tLnBvcyAtIDYpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBsZXQgYWZ0ZXJGcm9tID0gJGZyb20ucG9zO1xuICBsZXQgYmVmb3JlVG8gPSAkdG8ucG9zO1xuICBsZXQgZGVwdGggPSAkZnJvbS5kZXB0aDtcbiAgZm9yICg7IGRlcHRoID49IDA7IGRlcHRoLS0sIGFmdGVyRnJvbSsrKVxuICAgIGlmICgkZnJvbS5hZnRlcihkZXB0aCArIDEpIDwgJGZyb20uZW5kKGRlcHRoKSlcbiAgICAgIGJyZWFrO1xuICBmb3IgKGxldCBkID0gJHRvLmRlcHRoOyBkID49IDA7IGQtLSwgYmVmb3JlVG8tLSlcbiAgICBpZiAoJHRvLmJlZm9yZShkICsgMSkgPiAkdG8uc3RhcnQoZCkpXG4gICAgICBicmVhaztcbiAgcmV0dXJuIGFmdGVyRnJvbSA9PSBiZWZvcmVUbyAmJiAvcm93fHRhYmxlLy50ZXN0KCRmcm9tLm5vZGUoZGVwdGgpLnR5cGUuc3BlYy50YWJsZVJvbGUpO1xufVxuZnVuY3Rpb24gaXNUZXh0U2VsZWN0aW9uQWNyb3NzQ2VsbHMoeyAkZnJvbSwgJHRvIH0pIHtcbiAgbGV0IGZyb21DZWxsQm91bmRhcnlOb2RlO1xuICBsZXQgdG9DZWxsQm91bmRhcnlOb2RlO1xuICBmb3IgKGxldCBpID0gJGZyb20uZGVwdGg7IGkgPiAwOyBpLS0pIHtcbiAgICBjb25zdCBub2RlID0gJGZyb20ubm9kZShpKTtcbiAgICBpZiAobm9kZS50eXBlLnNwZWMudGFibGVSb2xlID09PSBcImNlbGxcIiB8fCBub2RlLnR5cGUuc3BlYy50YWJsZVJvbGUgPT09IFwiaGVhZGVyX2NlbGxcIikge1xuICAgICAgZnJvbUNlbGxCb3VuZGFyeU5vZGUgPSBub2RlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGZvciAobGV0IGkgPSAkdG8uZGVwdGg7IGkgPiAwOyBpLS0pIHtcbiAgICBjb25zdCBub2RlID0gJHRvLm5vZGUoaSk7XG4gICAgaWYgKG5vZGUudHlwZS5zcGVjLnRhYmxlUm9sZSA9PT0gXCJjZWxsXCIgfHwgbm9kZS50eXBlLnNwZWMudGFibGVSb2xlID09PSBcImhlYWRlcl9jZWxsXCIpIHtcbiAgICAgIHRvQ2VsbEJvdW5kYXJ5Tm9kZSA9IG5vZGU7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZyb21DZWxsQm91bmRhcnlOb2RlICE9PSB0b0NlbGxCb3VuZGFyeU5vZGUgJiYgJHRvLnBhcmVudE9mZnNldCA9PT0gMDtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlbGVjdGlvbihzdGF0ZSwgdHIsIGFsbG93VGFibGVOb2RlU2VsZWN0aW9uKSB7XG4gIGNvbnN0IHNlbCA9ICh0ciB8fCBzdGF0ZSkuc2VsZWN0aW9uO1xuICBjb25zdCBkb2MgPSAodHIgfHwgc3RhdGUpLmRvYztcbiAgbGV0IG5vcm1hbGl6ZTtcbiAgbGV0IHJvbGU7XG4gIGlmIChzZWwgaW5zdGFuY2VvZiBOb2RlU2VsZWN0aW9uMiAmJiAocm9sZSA9IHNlbC5ub2RlLnR5cGUuc3BlYy50YWJsZVJvbGUpKSB7XG4gICAgaWYgKHJvbGUgPT0gXCJjZWxsXCIgfHwgcm9sZSA9PSBcImhlYWRlcl9jZWxsXCIpIHtcbiAgICAgIG5vcm1hbGl6ZSA9IENlbGxTZWxlY3Rpb24uY3JlYXRlKGRvYywgc2VsLmZyb20pO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBcInJvd1wiKSB7XG4gICAgICBjb25zdCAkY2VsbCA9IGRvYy5yZXNvbHZlKHNlbC5mcm9tICsgMSk7XG4gICAgICBub3JtYWxpemUgPSBDZWxsU2VsZWN0aW9uLnJvd1NlbGVjdGlvbigkY2VsbCwgJGNlbGwpO1xuICAgIH0gZWxzZSBpZiAoIWFsbG93VGFibGVOb2RlU2VsZWN0aW9uKSB7XG4gICAgICBjb25zdCBtYXAgPSBUYWJsZU1hcC5nZXQoc2VsLm5vZGUpO1xuICAgICAgY29uc3Qgc3RhcnQgPSBzZWwuZnJvbSArIDE7XG4gICAgICBjb25zdCBsYXN0Q2VsbCA9IHN0YXJ0ICsgbWFwLm1hcFttYXAud2lkdGggKiBtYXAuaGVpZ2h0IC0gMV07XG4gICAgICBub3JtYWxpemUgPSBDZWxsU2VsZWN0aW9uLmNyZWF0ZShkb2MsIHN0YXJ0ICsgMSwgbGFzdENlbGwpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChzZWwgaW5zdGFuY2VvZiBUZXh0U2VsZWN0aW9uICYmIGlzQ2VsbEJvdW5kYXJ5U2VsZWN0aW9uKHNlbCkpIHtcbiAgICBub3JtYWxpemUgPSBUZXh0U2VsZWN0aW9uLmNyZWF0ZShkb2MsIHNlbC5mcm9tKTtcbiAgfSBlbHNlIGlmIChzZWwgaW5zdGFuY2VvZiBUZXh0U2VsZWN0aW9uICYmIGlzVGV4dFNlbGVjdGlvbkFjcm9zc0NlbGxzKHNlbCkpIHtcbiAgICBub3JtYWxpemUgPSBUZXh0U2VsZWN0aW9uLmNyZWF0ZShkb2MsIHNlbC4kZnJvbS5zdGFydCgpLCBzZWwuJGZyb20uZW5kKCkpO1xuICB9XG4gIGlmIChub3JtYWxpemUpXG4gICAgKHRyIHx8ICh0ciA9IHN0YXRlLnRyKSkuc2V0U2VsZWN0aW9uKG5vcm1hbGl6ZSk7XG4gIHJldHVybiB0cjtcbn1cblxuLy8gc3JjL2ZpeHRhYmxlcy50c1xuaW1wb3J0IHsgUGx1Z2luS2V5IGFzIFBsdWdpbktleTIgfSBmcm9tIFwicHJvc2VtaXJyb3Itc3RhdGVcIjtcbnZhciBmaXhUYWJsZXNLZXkgPSBuZXcgUGx1Z2luS2V5MihcImZpeC10YWJsZXNcIik7XG5mdW5jdGlvbiBjaGFuZ2VkRGVzY2VuZGFudHMob2xkLCBjdXIsIG9mZnNldCwgZikge1xuICBjb25zdCBvbGRTaXplID0gb2xkLmNoaWxkQ291bnQsIGN1clNpemUgPSBjdXIuY2hpbGRDb3VudDtcbiAgb3V0ZXI6XG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSAwOyBpIDwgY3VyU2l6ZTsgaSsrKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IGN1ci5jaGlsZChpKTtcbiAgICAgIGZvciAobGV0IHNjYW4gPSBqLCBlID0gTWF0aC5taW4ob2xkU2l6ZSwgaSArIDMpOyBzY2FuIDwgZTsgc2NhbisrKSB7XG4gICAgICAgIGlmIChvbGQuY2hpbGQoc2NhbikgPT0gY2hpbGQpIHtcbiAgICAgICAgICBqID0gc2NhbiArIDE7XG4gICAgICAgICAgb2Zmc2V0ICs9IGNoaWxkLm5vZGVTaXplO1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmKGNoaWxkLCBvZmZzZXQpO1xuICAgICAgaWYgKGogPCBvbGRTaXplICYmIG9sZC5jaGlsZChqKS5zYW1lTWFya3VwKGNoaWxkKSlcbiAgICAgICAgY2hhbmdlZERlc2NlbmRhbnRzKG9sZC5jaGlsZChqKSwgY2hpbGQsIG9mZnNldCArIDEsIGYpO1xuICAgICAgZWxzZVxuICAgICAgICBjaGlsZC5ub2Rlc0JldHdlZW4oMCwgY2hpbGQuY29udGVudC5zaXplLCBmLCBvZmZzZXQgKyAxKTtcbiAgICAgIG9mZnNldCArPSBjaGlsZC5ub2RlU2l6ZTtcbiAgICB9XG59XG5mdW5jdGlvbiBmaXhUYWJsZXMoc3RhdGUsIG9sZFN0YXRlKSB7XG4gIGxldCB0cjtcbiAgY29uc3QgY2hlY2sgPSAobm9kZSwgcG9zKSA9PiB7XG4gICAgaWYgKG5vZGUudHlwZS5zcGVjLnRhYmxlUm9sZSA9PSBcInRhYmxlXCIpXG4gICAgICB0ciA9IGZpeFRhYmxlKHN0YXRlLCBub2RlLCBwb3MsIHRyKTtcbiAgfTtcbiAgaWYgKCFvbGRTdGF0ZSlcbiAgICBzdGF0ZS5kb2MuZGVzY2VuZGFudHMoY2hlY2spO1xuICBlbHNlIGlmIChvbGRTdGF0ZS5kb2MgIT0gc3RhdGUuZG9jKVxuICAgIGNoYW5nZWREZXNjZW5kYW50cyhvbGRTdGF0ZS5kb2MsIHN0YXRlLmRvYywgMCwgY2hlY2spO1xuICByZXR1cm4gdHI7XG59XG5mdW5jdGlvbiBmaXhUYWJsZShzdGF0ZSwgdGFibGUsIHRhYmxlUG9zLCB0cikge1xuICBjb25zdCBtYXAgPSBUYWJsZU1hcC5nZXQodGFibGUpO1xuICBpZiAoIW1hcC5wcm9ibGVtcylcbiAgICByZXR1cm4gdHI7XG4gIGlmICghdHIpXG4gICAgdHIgPSBzdGF0ZS50cjtcbiAgY29uc3QgbXVzdEFkZCA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcC5oZWlnaHQ7IGkrKylcbiAgICBtdXN0QWRkLnB1c2goMCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFwLnByb2JsZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcHJvYiA9IG1hcC5wcm9ibGVtc1tpXTtcbiAgICBpZiAocHJvYi50eXBlID09IFwiY29sbGlzaW9uXCIpIHtcbiAgICAgIGNvbnN0IGNlbGwgPSB0YWJsZS5ub2RlQXQocHJvYi5wb3MpO1xuICAgICAgaWYgKCFjZWxsKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGNvbnN0IGF0dHJzID0gY2VsbC5hdHRycztcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYXR0cnMucm93c3BhbjsgaisrKVxuICAgICAgICBtdXN0QWRkW3Byb2Iucm93ICsgal0gKz0gcHJvYi5uO1xuICAgICAgdHIuc2V0Tm9kZU1hcmt1cChcbiAgICAgICAgdHIubWFwcGluZy5tYXAodGFibGVQb3MgKyAxICsgcHJvYi5wb3MpLFxuICAgICAgICBudWxsLFxuICAgICAgICByZW1vdmVDb2xTcGFuKGF0dHJzLCBhdHRycy5jb2xzcGFuIC0gcHJvYi5uLCBwcm9iLm4pXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAocHJvYi50eXBlID09IFwibWlzc2luZ1wiKSB7XG4gICAgICBtdXN0QWRkW3Byb2Iucm93XSArPSBwcm9iLm47XG4gICAgfSBlbHNlIGlmIChwcm9iLnR5cGUgPT0gXCJvdmVybG9uZ19yb3dzcGFuXCIpIHtcbiAgICAgIGNvbnN0IGNlbGwgPSB0YWJsZS5ub2RlQXQocHJvYi5wb3MpO1xuICAgICAgaWYgKCFjZWxsKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIHRyLnNldE5vZGVNYXJrdXAodHIubWFwcGluZy5tYXAodGFibGVQb3MgKyAxICsgcHJvYi5wb3MpLCBudWxsLCB7XG4gICAgICAgIC4uLmNlbGwuYXR0cnMsXG4gICAgICAgIHJvd3NwYW46IGNlbGwuYXR0cnMucm93c3BhbiAtIHByb2IublxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChwcm9iLnR5cGUgPT0gXCJjb2x3aWR0aCBtaXNtYXRjaFwiKSB7XG4gICAgICBjb25zdCBjZWxsID0gdGFibGUubm9kZUF0KHByb2IucG9zKTtcbiAgICAgIGlmICghY2VsbClcbiAgICAgICAgY29udGludWU7XG4gICAgICB0ci5zZXROb2RlTWFya3VwKHRyLm1hcHBpbmcubWFwKHRhYmxlUG9zICsgMSArIHByb2IucG9zKSwgbnVsbCwge1xuICAgICAgICAuLi5jZWxsLmF0dHJzLFxuICAgICAgICBjb2x3aWR0aDogcHJvYi5jb2x3aWR0aFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGxldCBmaXJzdCwgbGFzdDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtdXN0QWRkLmxlbmd0aDsgaSsrKVxuICAgIGlmIChtdXN0QWRkW2ldKSB7XG4gICAgICBpZiAoZmlyc3QgPT0gbnVsbClcbiAgICAgICAgZmlyc3QgPSBpO1xuICAgICAgbGFzdCA9IGk7XG4gICAgfVxuICBmb3IgKGxldCBpID0gMCwgcG9zID0gdGFibGVQb3MgKyAxOyBpIDwgbWFwLmhlaWdodDsgaSsrKSB7XG4gICAgY29uc3Qgcm93ID0gdGFibGUuY2hpbGQoaSk7XG4gICAgY29uc3QgZW5kID0gcG9zICsgcm93Lm5vZGVTaXplO1xuICAgIGNvbnN0IGFkZCA9IG11c3RBZGRbaV07XG4gICAgaWYgKGFkZCA+IDApIHtcbiAgICAgIGxldCByb2xlID0gXCJjZWxsXCI7XG4gICAgICBpZiAocm93LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgcm9sZSA9IHJvdy5maXJzdENoaWxkLnR5cGUuc3BlYy50YWJsZVJvbGU7XG4gICAgICB9XG4gICAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBhZGQ7IGorKykge1xuICAgICAgICBjb25zdCBub2RlID0gdGFibGVOb2RlVHlwZXMoc3RhdGUuc2NoZW1hKVtyb2xlXS5jcmVhdGVBbmRGaWxsKCk7XG4gICAgICAgIGlmIChub2RlKVxuICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBzaWRlID0gKGkgPT0gMCB8fCBmaXJzdCA9PSBpIC0gMSkgJiYgbGFzdCA9PSBpID8gcG9zICsgMSA6IGVuZCAtIDE7XG4gICAgICB0ci5pbnNlcnQodHIubWFwcGluZy5tYXAoc2lkZSksIG5vZGVzKTtcbiAgICB9XG4gICAgcG9zID0gZW5kO1xuICB9XG4gIHJldHVybiB0ci5zZXRNZXRhKGZpeFRhYmxlc0tleSwgeyBmaXhUYWJsZXM6IHRydWUgfSk7XG59XG5cbi8vIHNyYy9pbnB1dC50c1xuaW1wb3J0IHsgRnJhZ21lbnQgYXMgRnJhZ21lbnQzLCBTbGljZSBhcyBTbGljZTMgfSBmcm9tIFwicHJvc2VtaXJyb3ItbW9kZWxcIjtcbmltcG9ydCB7XG4gIFNlbGVjdGlvbiBhcyBTZWxlY3Rpb24yLFxuICBUZXh0U2VsZWN0aW9uIGFzIFRleHRTZWxlY3Rpb24yXG59IGZyb20gXCJwcm9zZW1pcnJvci1zdGF0ZVwiO1xuaW1wb3J0IHsga2V5ZG93bkhhbmRsZXIgfSBmcm9tIFwicHJvc2VtaXJyb3Ita2V5bWFwXCI7XG5cbi8vIHNyYy9jb3B5cGFzdGUudHNcbmltcG9ydCB7IEZyYWdtZW50IGFzIEZyYWdtZW50MiwgU2xpY2UgYXMgU2xpY2UyIH0gZnJvbSBcInByb3NlbWlycm9yLW1vZGVsXCI7XG5pbXBvcnQgeyBUcmFuc2Zvcm0gfSBmcm9tIFwicHJvc2VtaXJyb3ItdHJhbnNmb3JtXCI7XG5mdW5jdGlvbiBwYXN0ZWRDZWxscyhzbGljZSkge1xuICBpZiAoIXNsaWNlLnNpemUpXG4gICAgcmV0dXJuIG51bGw7XG4gIGxldCB7IGNvbnRlbnQsIG9wZW5TdGFydCwgb3BlbkVuZCB9ID0gc2xpY2U7XG4gIHdoaWxlIChjb250ZW50LmNoaWxkQ291bnQgPT0gMSAmJiAob3BlblN0YXJ0ID4gMCAmJiBvcGVuRW5kID4gMCB8fCBjb250ZW50LmNoaWxkKDApLnR5cGUuc3BlYy50YWJsZVJvbGUgPT0gXCJ0YWJsZVwiKSkge1xuICAgIG9wZW5TdGFydC0tO1xuICAgIG9wZW5FbmQtLTtcbiAgICBjb250ZW50ID0gY29udGVudC5jaGlsZCgwKS5jb250ZW50O1xuICB9XG4gIGNvbnN0IGZpcnN0ID0gY29udGVudC5jaGlsZCgwKTtcbiAgY29uc3Qgcm9sZSA9IGZpcnN0LnR5cGUuc3BlYy50YWJsZVJvbGU7XG4gIGNvbnN0IHNjaGVtYSA9IGZpcnN0LnR5cGUuc2NoZW1hLCByb3dzID0gW107XG4gIGlmIChyb2xlID09IFwicm93XCIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRlbnQuY2hpbGRDb3VudDsgaSsrKSB7XG4gICAgICBsZXQgY2VsbHMgPSBjb250ZW50LmNoaWxkKGkpLmNvbnRlbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gaSA/IDAgOiBNYXRoLm1heCgwLCBvcGVuU3RhcnQgLSAxKTtcbiAgICAgIGNvbnN0IHJpZ2h0ID0gaSA8IGNvbnRlbnQuY2hpbGRDb3VudCAtIDEgPyAwIDogTWF0aC5tYXgoMCwgb3BlbkVuZCAtIDEpO1xuICAgICAgaWYgKGxlZnQgfHwgcmlnaHQpXG4gICAgICAgIGNlbGxzID0gZml0U2xpY2UoXG4gICAgICAgICAgdGFibGVOb2RlVHlwZXMoc2NoZW1hKS5yb3csXG4gICAgICAgICAgbmV3IFNsaWNlMihjZWxscywgbGVmdCwgcmlnaHQpXG4gICAgICAgICkuY29udGVudDtcbiAgICAgIHJvd3MucHVzaChjZWxscyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHJvbGUgPT0gXCJjZWxsXCIgfHwgcm9sZSA9PSBcImhlYWRlcl9jZWxsXCIpIHtcbiAgICByb3dzLnB1c2goXG4gICAgICBvcGVuU3RhcnQgfHwgb3BlbkVuZCA/IGZpdFNsaWNlKFxuICAgICAgICB0YWJsZU5vZGVUeXBlcyhzY2hlbWEpLnJvdyxcbiAgICAgICAgbmV3IFNsaWNlMihjb250ZW50LCBvcGVuU3RhcnQsIG9wZW5FbmQpXG4gICAgICApLmNvbnRlbnQgOiBjb250ZW50XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gZW5zdXJlUmVjdGFuZ3VsYXIoc2NoZW1hLCByb3dzKTtcbn1cbmZ1bmN0aW9uIGVuc3VyZVJlY3Rhbmd1bGFyKHNjaGVtYSwgcm93cykge1xuICBjb25zdCB3aWR0aHMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgcm93ID0gcm93c1tpXTtcbiAgICBmb3IgKGxldCBqID0gcm93LmNoaWxkQ291bnQgLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgY29uc3QgeyByb3dzcGFuLCBjb2xzcGFuIH0gPSByb3cuY2hpbGQoaikuYXR0cnM7XG4gICAgICBmb3IgKGxldCByID0gaTsgciA8IGkgKyByb3dzcGFuOyByKyspXG4gICAgICAgIHdpZHRoc1tyXSA9ICh3aWR0aHNbcl0gfHwgMCkgKyBjb2xzcGFuO1xuICAgIH1cbiAgfVxuICBsZXQgd2lkdGggPSAwO1xuICBmb3IgKGxldCByID0gMDsgciA8IHdpZHRocy5sZW5ndGg7IHIrKylcbiAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCB3aWR0aHNbcl0pO1xuICBmb3IgKGxldCByID0gMDsgciA8IHdpZHRocy5sZW5ndGg7IHIrKykge1xuICAgIGlmIChyID49IHJvd3MubGVuZ3RoKVxuICAgICAgcm93cy5wdXNoKEZyYWdtZW50Mi5lbXB0eSk7XG4gICAgaWYgKHdpZHRoc1tyXSA8IHdpZHRoKSB7XG4gICAgICBjb25zdCBlbXB0eSA9IHRhYmxlTm9kZVR5cGVzKHNjaGVtYSkuY2VsbC5jcmVhdGVBbmRGaWxsKCk7XG4gICAgICBjb25zdCBjZWxscyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IHdpZHRoc1tyXTsgaSA8IHdpZHRoOyBpKyspIHtcbiAgICAgICAgY2VsbHMucHVzaChlbXB0eSk7XG4gICAgICB9XG4gICAgICByb3dzW3JdID0gcm93c1tyXS5hcHBlbmQoRnJhZ21lbnQyLmZyb20oY2VsbHMpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgaGVpZ2h0OiByb3dzLmxlbmd0aCwgd2lkdGgsIHJvd3MgfTtcbn1cbmZ1bmN0aW9uIGZpdFNsaWNlKG5vZGVUeXBlLCBzbGljZSkge1xuICBjb25zdCBub2RlID0gbm9kZVR5cGUuY3JlYXRlQW5kRmlsbCgpO1xuICBjb25zdCB0ciA9IG5ldyBUcmFuc2Zvcm0obm9kZSkucmVwbGFjZSgwLCBub2RlLmNvbnRlbnQuc2l6ZSwgc2xpY2UpO1xuICByZXR1cm4gdHIuZG9jO1xufVxuZnVuY3Rpb24gY2xpcENlbGxzKHsgd2lkdGgsIGhlaWdodCwgcm93cyB9LCBuZXdXaWR0aCwgbmV3SGVpZ2h0KSB7XG4gIGlmICh3aWR0aCAhPSBuZXdXaWR0aCkge1xuICAgIGNvbnN0IGFkZGVkID0gW107XG4gICAgY29uc3QgbmV3Um93cyA9IFtdO1xuICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHJvd3MubGVuZ3RoOyByb3crKykge1xuICAgICAgY29uc3QgZnJhZyA9IHJvd3Nbcm93XSwgY2VsbHMgPSBbXTtcbiAgICAgIGZvciAobGV0IGNvbCA9IGFkZGVkW3Jvd10gfHwgMCwgaSA9IDA7IGNvbCA8IG5ld1dpZHRoOyBpKyspIHtcbiAgICAgICAgbGV0IGNlbGwgPSBmcmFnLmNoaWxkKGkgJSBmcmFnLmNoaWxkQ291bnQpO1xuICAgICAgICBpZiAoY29sICsgY2VsbC5hdHRycy5jb2xzcGFuID4gbmV3V2lkdGgpXG4gICAgICAgICAgY2VsbCA9IGNlbGwudHlwZS5jcmVhdGVDaGVja2VkKFxuICAgICAgICAgICAgcmVtb3ZlQ29sU3BhbihcbiAgICAgICAgICAgICAgY2VsbC5hdHRycyxcbiAgICAgICAgICAgICAgY2VsbC5hdHRycy5jb2xzcGFuLFxuICAgICAgICAgICAgICBjb2wgKyBjZWxsLmF0dHJzLmNvbHNwYW4gLSBuZXdXaWR0aFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGNlbGwuY29udGVudFxuICAgICAgICAgICk7XG4gICAgICAgIGNlbGxzLnB1c2goY2VsbCk7XG4gICAgICAgIGNvbCArPSBjZWxsLmF0dHJzLmNvbHNwYW47XG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgY2VsbC5hdHRycy5yb3dzcGFuOyBqKyspXG4gICAgICAgICAgYWRkZWRbcm93ICsgal0gPSAoYWRkZWRbcm93ICsgal0gfHwgMCkgKyBjZWxsLmF0dHJzLmNvbHNwYW47XG4gICAgICB9XG4gICAgICBuZXdSb3dzLnB1c2goRnJhZ21lbnQyLmZyb20oY2VsbHMpKTtcbiAgICB9XG4gICAgcm93cyA9IG5ld1Jvd3M7XG4gICAgd2lkdGggPSBuZXdXaWR0aDtcbiAgfVxuICBpZiAoaGVpZ2h0ICE9IG5ld0hlaWdodCkge1xuICAgIGNvbnN0IG5ld1Jvd3MgPSBbXTtcbiAgICBmb3IgKGxldCByb3cgPSAwLCBpID0gMDsgcm93IDwgbmV3SGVpZ2h0OyByb3crKywgaSsrKSB7XG4gICAgICBjb25zdCBjZWxscyA9IFtdLCBzb3VyY2UgPSByb3dzW2kgJSBoZWlnaHRdO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzb3VyY2UuY2hpbGRDb3VudDsgaisrKSB7XG4gICAgICAgIGxldCBjZWxsID0gc291cmNlLmNoaWxkKGopO1xuICAgICAgICBpZiAocm93ICsgY2VsbC5hdHRycy5yb3dzcGFuID4gbmV3SGVpZ2h0KVxuICAgICAgICAgIGNlbGwgPSBjZWxsLnR5cGUuY3JlYXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5jZWxsLmF0dHJzLFxuICAgICAgICAgICAgICByb3dzcGFuOiBNYXRoLm1heCgxLCBuZXdIZWlnaHQgLSBjZWxsLmF0dHJzLnJvd3NwYW4pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2VsbC5jb250ZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgY2VsbHMucHVzaChjZWxsKTtcbiAgICAgIH1cbiAgICAgIG5ld1Jvd3MucHVzaChGcmFnbWVudDIuZnJvbShjZWxscykpO1xuICAgIH1cbiAgICByb3dzID0gbmV3Um93cztcbiAgICBoZWlnaHQgPSBuZXdIZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgcm93cyB9O1xufVxuZnVuY3Rpb24gZ3Jvd1RhYmxlKHRyLCBtYXAsIHRhYmxlLCBzdGFydCwgd2lkdGgsIGhlaWdodCwgbWFwRnJvbSkge1xuICBjb25zdCBzY2hlbWEgPSB0ci5kb2MudHlwZS5zY2hlbWE7XG4gIGNvbnN0IHR5cGVzID0gdGFibGVOb2RlVHlwZXMoc2NoZW1hKTtcbiAgbGV0IGVtcHR5O1xuICBsZXQgZW1wdHlIZWFkO1xuICBpZiAod2lkdGggPiBtYXAud2lkdGgpIHtcbiAgICBmb3IgKGxldCByb3cgPSAwLCByb3dFbmQgPSAwOyByb3cgPCBtYXAuaGVpZ2h0OyByb3crKykge1xuICAgICAgY29uc3Qgcm93Tm9kZSA9IHRhYmxlLmNoaWxkKHJvdyk7XG4gICAgICByb3dFbmQgKz0gcm93Tm9kZS5ub2RlU2l6ZTtcbiAgICAgIGNvbnN0IGNlbGxzID0gW107XG4gICAgICBsZXQgYWRkO1xuICAgICAgaWYgKHJvd05vZGUubGFzdENoaWxkID09IG51bGwgfHwgcm93Tm9kZS5sYXN0Q2hpbGQudHlwZSA9PSB0eXBlcy5jZWxsKVxuICAgICAgICBhZGQgPSBlbXB0eSB8fCAoZW1wdHkgPSB0eXBlcy5jZWxsLmNyZWF0ZUFuZEZpbGwoKSk7XG4gICAgICBlbHNlXG4gICAgICAgIGFkZCA9IGVtcHR5SGVhZCB8fCAoZW1wdHlIZWFkID0gdHlwZXMuaGVhZGVyX2NlbGwuY3JlYXRlQW5kRmlsbCgpKTtcbiAgICAgIGZvciAobGV0IGkgPSBtYXAud2lkdGg7IGkgPCB3aWR0aDsgaSsrKVxuICAgICAgICBjZWxscy5wdXNoKGFkZCk7XG4gICAgICB0ci5pbnNlcnQodHIubWFwcGluZy5zbGljZShtYXBGcm9tKS5tYXAocm93RW5kIC0gMSArIHN0YXJ0KSwgY2VsbHMpO1xuICAgIH1cbiAgfVxuICBpZiAoaGVpZ2h0ID4gbWFwLmhlaWdodCkge1xuICAgIGNvbnN0IGNlbGxzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIHN0YXJ0MiA9IChtYXAuaGVpZ2h0IC0gMSkgKiBtYXAud2lkdGg7IGkgPCBNYXRoLm1heChtYXAud2lkdGgsIHdpZHRoKTsgaSsrKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBpID49IG1hcC53aWR0aCA/IGZhbHNlIDogdGFibGUubm9kZUF0KG1hcC5tYXBbc3RhcnQyICsgaV0pLnR5cGUgPT0gdHlwZXMuaGVhZGVyX2NlbGw7XG4gICAgICBjZWxscy5wdXNoKFxuICAgICAgICBoZWFkZXIgPyBlbXB0eUhlYWQgfHwgKGVtcHR5SGVhZCA9IHR5cGVzLmhlYWRlcl9jZWxsLmNyZWF0ZUFuZEZpbGwoKSkgOiBlbXB0eSB8fCAoZW1wdHkgPSB0eXBlcy5jZWxsLmNyZWF0ZUFuZEZpbGwoKSlcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGVtcHR5Um93ID0gdHlwZXMucm93LmNyZWF0ZShudWxsLCBGcmFnbWVudDIuZnJvbShjZWxscykpLCByb3dzID0gW107XG4gICAgZm9yIChsZXQgaSA9IG1hcC5oZWlnaHQ7IGkgPCBoZWlnaHQ7IGkrKylcbiAgICAgIHJvd3MucHVzaChlbXB0eVJvdyk7XG4gICAgdHIuaW5zZXJ0KHRyLm1hcHBpbmcuc2xpY2UobWFwRnJvbSkubWFwKHN0YXJ0ICsgdGFibGUubm9kZVNpemUgLSAyKSwgcm93cyk7XG4gIH1cbiAgcmV0dXJuICEhKGVtcHR5IHx8IGVtcHR5SGVhZCk7XG59XG5mdW5jdGlvbiBpc29sYXRlSG9yaXpvbnRhbCh0ciwgbWFwLCB0YWJsZSwgc3RhcnQsIGxlZnQsIHJpZ2h0LCB0b3AsIG1hcEZyb20pIHtcbiAgaWYgKHRvcCA9PSAwIHx8IHRvcCA9PSBtYXAuaGVpZ2h0KVxuICAgIHJldHVybiBmYWxzZTtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIGZvciAobGV0IGNvbCA9IGxlZnQ7IGNvbCA8IHJpZ2h0OyBjb2wrKykge1xuICAgIGNvbnN0IGluZGV4ID0gdG9wICogbWFwLndpZHRoICsgY29sLCBwb3MgPSBtYXAubWFwW2luZGV4XTtcbiAgICBpZiAobWFwLm1hcFtpbmRleCAtIG1hcC53aWR0aF0gPT0gcG9zKSB7XG4gICAgICBmb3VuZCA9IHRydWU7XG4gICAgICBjb25zdCBjZWxsID0gdGFibGUubm9kZUF0KHBvcyk7XG4gICAgICBjb25zdCB7IHRvcDogY2VsbFRvcCwgbGVmdDogY2VsbExlZnQgfSA9IG1hcC5maW5kQ2VsbChwb3MpO1xuICAgICAgdHIuc2V0Tm9kZU1hcmt1cCh0ci5tYXBwaW5nLnNsaWNlKG1hcEZyb20pLm1hcChwb3MgKyBzdGFydCksIG51bGwsIHtcbiAgICAgICAgLi4uY2VsbC5hdHRycyxcbiAgICAgICAgcm93c3BhbjogdG9wIC0gY2VsbFRvcFxuICAgICAgfSk7XG4gICAgICB0ci5pbnNlcnQoXG4gICAgICAgIHRyLm1hcHBpbmcuc2xpY2UobWFwRnJvbSkubWFwKG1hcC5wb3NpdGlvbkF0KHRvcCwgY2VsbExlZnQsIHRhYmxlKSksXG4gICAgICAgIGNlbGwudHlwZS5jcmVhdGVBbmRGaWxsKHtcbiAgICAgICAgICAuLi5jZWxsLmF0dHJzLFxuICAgICAgICAgIHJvd3NwYW46IGNlbGxUb3AgKyBjZWxsLmF0dHJzLnJvd3NwYW4gLSB0b3BcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBjb2wgKz0gY2VsbC5hdHRycy5jb2xzcGFuIC0gMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuZnVuY3Rpb24gaXNvbGF0ZVZlcnRpY2FsKHRyLCBtYXAsIHRhYmxlLCBzdGFydCwgdG9wLCBib3R0b20sIGxlZnQsIG1hcEZyb20pIHtcbiAgaWYgKGxlZnQgPT0gMCB8fCBsZWZ0ID09IG1hcC53aWR0aClcbiAgICByZXR1cm4gZmFsc2U7XG4gIGxldCBmb3VuZCA9IGZhbHNlO1xuICBmb3IgKGxldCByb3cgPSB0b3A7IHJvdyA8IGJvdHRvbTsgcm93KyspIHtcbiAgICBjb25zdCBpbmRleCA9IHJvdyAqIG1hcC53aWR0aCArIGxlZnQsIHBvcyA9IG1hcC5tYXBbaW5kZXhdO1xuICAgIGlmIChtYXAubWFwW2luZGV4IC0gMV0gPT0gcG9zKSB7XG4gICAgICBmb3VuZCA9IHRydWU7XG4gICAgICBjb25zdCBjZWxsID0gdGFibGUubm9kZUF0KHBvcyk7XG4gICAgICBjb25zdCBjZWxsTGVmdCA9IG1hcC5jb2xDb3VudChwb3MpO1xuICAgICAgY29uc3QgdXBkYXRlUG9zID0gdHIubWFwcGluZy5zbGljZShtYXBGcm9tKS5tYXAocG9zICsgc3RhcnQpO1xuICAgICAgdHIuc2V0Tm9kZU1hcmt1cChcbiAgICAgICAgdXBkYXRlUG9zLFxuICAgICAgICBudWxsLFxuICAgICAgICByZW1vdmVDb2xTcGFuKFxuICAgICAgICAgIGNlbGwuYXR0cnMsXG4gICAgICAgICAgbGVmdCAtIGNlbGxMZWZ0LFxuICAgICAgICAgIGNlbGwuYXR0cnMuY29sc3BhbiAtIChsZWZ0IC0gY2VsbExlZnQpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICB0ci5pbnNlcnQoXG4gICAgICAgIHVwZGF0ZVBvcyArIGNlbGwubm9kZVNpemUsXG4gICAgICAgIGNlbGwudHlwZS5jcmVhdGVBbmRGaWxsKFxuICAgICAgICAgIHJlbW92ZUNvbFNwYW4oY2VsbC5hdHRycywgMCwgbGVmdCAtIGNlbGxMZWZ0KVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcm93ICs9IGNlbGwuYXR0cnMucm93c3BhbiAtIDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cbmZ1bmN0aW9uIGluc2VydENlbGxzKHN0YXRlLCBkaXNwYXRjaCwgdGFibGVTdGFydCwgcmVjdCwgY2VsbHMpIHtcbiAgbGV0IHRhYmxlID0gdGFibGVTdGFydCA/IHN0YXRlLmRvYy5ub2RlQXQodGFibGVTdGFydCAtIDEpIDogc3RhdGUuZG9jO1xuICBpZiAoIXRhYmxlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdGFibGUgZm91bmRcIik7XG4gIH1cbiAgbGV0IG1hcCA9IFRhYmxlTWFwLmdldCh0YWJsZSk7XG4gIGNvbnN0IHsgdG9wLCBsZWZ0IH0gPSByZWN0O1xuICBjb25zdCByaWdodCA9IGxlZnQgKyBjZWxscy53aWR0aCwgYm90dG9tID0gdG9wICsgY2VsbHMuaGVpZ2h0O1xuICBjb25zdCB0ciA9IHN0YXRlLnRyO1xuICBsZXQgbWFwRnJvbSA9IDA7XG4gIGZ1bmN0aW9uIHJlY29tcCgpIHtcbiAgICB0YWJsZSA9IHRhYmxlU3RhcnQgPyB0ci5kb2Mubm9kZUF0KHRhYmxlU3RhcnQgLSAxKSA6IHRyLmRvYztcbiAgICBpZiAoIXRhYmxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0YWJsZSBmb3VuZFwiKTtcbiAgICB9XG4gICAgbWFwID0gVGFibGVNYXAuZ2V0KHRhYmxlKTtcbiAgICBtYXBGcm9tID0gdHIubWFwcGluZy5tYXBzLmxlbmd0aDtcbiAgfVxuICBpZiAoZ3Jvd1RhYmxlKHRyLCBtYXAsIHRhYmxlLCB0YWJsZVN0YXJ0LCByaWdodCwgYm90dG9tLCBtYXBGcm9tKSlcbiAgICByZWNvbXAoKTtcbiAgaWYgKGlzb2xhdGVIb3Jpem9udGFsKHRyLCBtYXAsIHRhYmxlLCB0YWJsZVN0YXJ0LCBsZWZ0LCByaWdodCwgdG9wLCBtYXBGcm9tKSlcbiAgICByZWNvbXAoKTtcbiAgaWYgKGlzb2xhdGVIb3Jpem9udGFsKHRyLCBtYXAsIHRhYmxlLCB0YWJsZVN0YXJ0LCBsZWZ0LCByaWdodCwgYm90dG9tLCBtYXBGcm9tKSlcbiAgICByZWNvbXAoKTtcbiAgaWYgKGlzb2xhdGVWZXJ0aWNhbCh0ciwgbWFwLCB0YWJsZSwgdGFibGVTdGFydCwgdG9wLCBib3R0b20sIGxlZnQsIG1hcEZyb20pKVxuICAgIHJlY29tcCgpO1xuICBpZiAoaXNvbGF0ZVZlcnRpY2FsKHRyLCBtYXAsIHRhYmxlLCB0YWJsZVN0YXJ0LCB0b3AsIGJvdHRvbSwgcmlnaHQsIG1hcEZyb20pKVxuICAgIHJlY29tcCgpO1xuICBmb3IgKGxldCByb3cgPSB0b3A7IHJvdyA8IGJvdHRvbTsgcm93KyspIHtcbiAgICBjb25zdCBmcm9tID0gbWFwLnBvc2l0aW9uQXQocm93LCBsZWZ0LCB0YWJsZSksIHRvID0gbWFwLnBvc2l0aW9uQXQocm93LCByaWdodCwgdGFibGUpO1xuICAgIHRyLnJlcGxhY2UoXG4gICAgICB0ci5tYXBwaW5nLnNsaWNlKG1hcEZyb20pLm1hcChmcm9tICsgdGFibGVTdGFydCksXG4gICAgICB0ci5tYXBwaW5nLnNsaWNlKG1hcEZyb20pLm1hcCh0byArIHRhYmxlU3RhcnQpLFxuICAgICAgbmV3IFNsaWNlMihjZWxscy5yb3dzW3JvdyAtIHRvcF0sIDAsIDApXG4gICAgKTtcbiAgfVxuICByZWNvbXAoKTtcbiAgdHIuc2V0U2VsZWN0aW9uKFxuICAgIG5ldyBDZWxsU2VsZWN0aW9uKFxuICAgICAgdHIuZG9jLnJlc29sdmUodGFibGVTdGFydCArIG1hcC5wb3NpdGlvbkF0KHRvcCwgbGVmdCwgdGFibGUpKSxcbiAgICAgIHRyLmRvYy5yZXNvbHZlKHRhYmxlU3RhcnQgKyBtYXAucG9zaXRpb25BdChib3R0b20gLSAxLCByaWdodCAtIDEsIHRhYmxlKSlcbiAgICApXG4gICk7XG4gIGRpc3BhdGNoKHRyKTtcbn1cblxuLy8gc3JjL2lucHV0LnRzXG52YXIgaGFuZGxlS2V5RG93biA9IGtleWRvd25IYW5kbGVyKHtcbiAgQXJyb3dMZWZ0OiBhcnJvdyhcImhvcml6XCIsIC0xKSxcbiAgQXJyb3dSaWdodDogYXJyb3coXCJob3JpelwiLCAxKSxcbiAgQXJyb3dVcDogYXJyb3coXCJ2ZXJ0XCIsIC0xKSxcbiAgQXJyb3dEb3duOiBhcnJvdyhcInZlcnRcIiwgMSksXG4gIFwiU2hpZnQtQXJyb3dMZWZ0XCI6IHNoaWZ0QXJyb3coXCJob3JpelwiLCAtMSksXG4gIFwiU2hpZnQtQXJyb3dSaWdodFwiOiBzaGlmdEFycm93KFwiaG9yaXpcIiwgMSksXG4gIFwiU2hpZnQtQXJyb3dVcFwiOiBzaGlmdEFycm93KFwidmVydFwiLCAtMSksXG4gIFwiU2hpZnQtQXJyb3dEb3duXCI6IHNoaWZ0QXJyb3coXCJ2ZXJ0XCIsIDEpLFxuICBCYWNrc3BhY2U6IGRlbGV0ZUNlbGxTZWxlY3Rpb24sXG4gIFwiTW9kLUJhY2tzcGFjZVwiOiBkZWxldGVDZWxsU2VsZWN0aW9uLFxuICBEZWxldGU6IGRlbGV0ZUNlbGxTZWxlY3Rpb24sXG4gIFwiTW9kLURlbGV0ZVwiOiBkZWxldGVDZWxsU2VsZWN0aW9uXG59KTtcbmZ1bmN0aW9uIG1heWJlU2V0U2VsZWN0aW9uKHN0YXRlLCBkaXNwYXRjaCwgc2VsZWN0aW9uKSB7XG4gIGlmIChzZWxlY3Rpb24uZXEoc3RhdGUuc2VsZWN0aW9uKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChkaXNwYXRjaClcbiAgICBkaXNwYXRjaChzdGF0ZS50ci5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKS5zY3JvbGxJbnRvVmlldygpKTtcbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBhcnJvdyhheGlzLCBkaXIpIHtcbiAgcmV0dXJuIChzdGF0ZSwgZGlzcGF0Y2gsIHZpZXcpID0+IHtcbiAgICBpZiAoIXZpZXcpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3Qgc2VsID0gc3RhdGUuc2VsZWN0aW9uO1xuICAgIGlmIChzZWwgaW5zdGFuY2VvZiBDZWxsU2VsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gbWF5YmVTZXRTZWxlY3Rpb24oXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBkaXNwYXRjaCxcbiAgICAgICAgU2VsZWN0aW9uMi5uZWFyKHNlbC4kaGVhZENlbGwsIGRpcilcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChheGlzICE9IFwiaG9yaXpcIiAmJiAhc2VsLmVtcHR5KVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGVuZCA9IGF0RW5kT2ZDZWxsKHZpZXcsIGF4aXMsIGRpcik7XG4gICAgaWYgKGVuZCA9PSBudWxsKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChheGlzID09IFwiaG9yaXpcIikge1xuICAgICAgcmV0dXJuIG1heWJlU2V0U2VsZWN0aW9uKFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgZGlzcGF0Y2gsXG4gICAgICAgIFNlbGVjdGlvbjIubmVhcihzdGF0ZS5kb2MucmVzb2x2ZShzZWwuaGVhZCArIGRpciksIGRpcilcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0ICRjZWxsID0gc3RhdGUuZG9jLnJlc29sdmUoZW5kKTtcbiAgICAgIGNvbnN0ICRuZXh0ID0gbmV4dENlbGwoJGNlbGwsIGF4aXMsIGRpcik7XG4gICAgICBsZXQgbmV3U2VsO1xuICAgICAgaWYgKCRuZXh0KVxuICAgICAgICBuZXdTZWwgPSBTZWxlY3Rpb24yLm5lYXIoJG5leHQsIDEpO1xuICAgICAgZWxzZSBpZiAoZGlyIDwgMClcbiAgICAgICAgbmV3U2VsID0gU2VsZWN0aW9uMi5uZWFyKHN0YXRlLmRvYy5yZXNvbHZlKCRjZWxsLmJlZm9yZSgtMSkpLCAtMSk7XG4gICAgICBlbHNlXG4gICAgICAgIG5ld1NlbCA9IFNlbGVjdGlvbjIubmVhcihzdGF0ZS5kb2MucmVzb2x2ZSgkY2VsbC5hZnRlcigtMSkpLCAxKTtcbiAgICAgIHJldHVybiBtYXliZVNldFNlbGVjdGlvbihzdGF0ZSwgZGlzcGF0Y2gsIG5ld1NlbCk7XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gc2hpZnRBcnJvdyhheGlzLCBkaXIpIHtcbiAgcmV0dXJuIChzdGF0ZSwgZGlzcGF0Y2gsIHZpZXcpID0+IHtcbiAgICBpZiAoIXZpZXcpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3Qgc2VsID0gc3RhdGUuc2VsZWN0aW9uO1xuICAgIGxldCBjZWxsU2VsO1xuICAgIGlmIChzZWwgaW5zdGFuY2VvZiBDZWxsU2VsZWN0aW9uKSB7XG4gICAgICBjZWxsU2VsID0gc2VsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlbmQgPSBhdEVuZE9mQ2VsbCh2aWV3LCBheGlzLCBkaXIpO1xuICAgICAgaWYgKGVuZCA9PSBudWxsKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBjZWxsU2VsID0gbmV3IENlbGxTZWxlY3Rpb24oc3RhdGUuZG9jLnJlc29sdmUoZW5kKSk7XG4gICAgfVxuICAgIGNvbnN0ICRoZWFkID0gbmV4dENlbGwoY2VsbFNlbC4kaGVhZENlbGwsIGF4aXMsIGRpcik7XG4gICAgaWYgKCEkaGVhZClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbWF5YmVTZXRTZWxlY3Rpb24oXG4gICAgICBzdGF0ZSxcbiAgICAgIGRpc3BhdGNoLFxuICAgICAgbmV3IENlbGxTZWxlY3Rpb24oY2VsbFNlbC4kYW5jaG9yQ2VsbCwgJGhlYWQpXG4gICAgKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRlbGV0ZUNlbGxTZWxlY3Rpb24oc3RhdGUsIGRpc3BhdGNoKSB7XG4gIGNvbnN0IHNlbCA9IHN0YXRlLnNlbGVjdGlvbjtcbiAgaWYgKCEoc2VsIGluc3RhbmNlb2YgQ2VsbFNlbGVjdGlvbikpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoZGlzcGF0Y2gpIHtcbiAgICBjb25zdCB0ciA9IHN0YXRlLnRyO1xuICAgIGNvbnN0IGJhc2VDb250ZW50ID0gdGFibGVOb2RlVHlwZXMoc3RhdGUuc2NoZW1hKS5jZWxsLmNyZWF0ZUFuZEZpbGwoKS5jb250ZW50O1xuICAgIHNlbC5mb3JFYWNoQ2VsbCgoY2VsbCwgcG9zKSA9PiB7XG4gICAgICBpZiAoIWNlbGwuY29udGVudC5lcShiYXNlQ29udGVudCkpXG4gICAgICAgIHRyLnJlcGxhY2UoXG4gICAgICAgICAgdHIubWFwcGluZy5tYXAocG9zICsgMSksXG4gICAgICAgICAgdHIubWFwcGluZy5tYXAocG9zICsgY2VsbC5ub2RlU2l6ZSAtIDEpLFxuICAgICAgICAgIG5ldyBTbGljZTMoYmFzZUNvbnRlbnQsIDAsIDApXG4gICAgICAgICk7XG4gICAgfSk7XG4gICAgaWYgKHRyLmRvY0NoYW5nZWQpXG4gICAgICBkaXNwYXRjaCh0cik7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBoYW5kbGVUcmlwbGVDbGljayh2aWV3LCBwb3MpIHtcbiAgY29uc3QgZG9jID0gdmlldy5zdGF0ZS5kb2MsICRjZWxsID0gY2VsbEFyb3VuZChkb2MucmVzb2x2ZShwb3MpKTtcbiAgaWYgKCEkY2VsbClcbiAgICByZXR1cm4gZmFsc2U7XG4gIHZpZXcuZGlzcGF0Y2godmlldy5zdGF0ZS50ci5zZXRTZWxlY3Rpb24obmV3IENlbGxTZWxlY3Rpb24oJGNlbGwpKSk7XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gaGFuZGxlUGFzdGUodmlldywgXywgc2xpY2UpIHtcbiAgaWYgKCFpc0luVGFibGUodmlldy5zdGF0ZSkpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBsZXQgY2VsbHMgPSBwYXN0ZWRDZWxscyhzbGljZSk7XG4gIGNvbnN0IHNlbCA9IHZpZXcuc3RhdGUuc2VsZWN0aW9uO1xuICBpZiAoc2VsIGluc3RhbmNlb2YgQ2VsbFNlbGVjdGlvbikge1xuICAgIGlmICghY2VsbHMpXG4gICAgICBjZWxscyA9IHtcbiAgICAgICAgd2lkdGg6IDEsXG4gICAgICAgIGhlaWdodDogMSxcbiAgICAgICAgcm93czogW1xuICAgICAgICAgIEZyYWdtZW50My5mcm9tKFxuICAgICAgICAgICAgZml0U2xpY2UodGFibGVOb2RlVHlwZXModmlldy5zdGF0ZS5zY2hlbWEpLmNlbGwsIHNsaWNlKVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgfTtcbiAgICBjb25zdCB0YWJsZSA9IHNlbC4kYW5jaG9yQ2VsbC5ub2RlKC0xKTtcbiAgICBjb25zdCBzdGFydCA9IHNlbC4kYW5jaG9yQ2VsbC5zdGFydCgtMSk7XG4gICAgY29uc3QgcmVjdCA9IFRhYmxlTWFwLmdldCh0YWJsZSkucmVjdEJldHdlZW4oXG4gICAgICBzZWwuJGFuY2hvckNlbGwucG9zIC0gc3RhcnQsXG4gICAgICBzZWwuJGhlYWRDZWxsLnBvcyAtIHN0YXJ0XG4gICAgKTtcbiAgICBjZWxscyA9IGNsaXBDZWxscyhjZWxscywgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCk7XG4gICAgaW5zZXJ0Q2VsbHModmlldy5zdGF0ZSwgdmlldy5kaXNwYXRjaCwgc3RhcnQsIHJlY3QsIGNlbGxzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChjZWxscykge1xuICAgIGNvbnN0ICRjZWxsID0gc2VsZWN0aW9uQ2VsbCh2aWV3LnN0YXRlKTtcbiAgICBjb25zdCBzdGFydCA9ICRjZWxsLnN0YXJ0KC0xKTtcbiAgICBpbnNlcnRDZWxscyhcbiAgICAgIHZpZXcuc3RhdGUsXG4gICAgICB2aWV3LmRpc3BhdGNoLFxuICAgICAgc3RhcnQsXG4gICAgICBUYWJsZU1hcC5nZXQoJGNlbGwubm9kZSgtMSkpLmZpbmRDZWxsKCRjZWxsLnBvcyAtIHN0YXJ0KSxcbiAgICAgIGNlbGxzXG4gICAgKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bih2aWV3LCBzdGFydEV2ZW50KSB7XG4gIHZhciBfYTtcbiAgaWYgKHN0YXJ0RXZlbnQuY3RybEtleSB8fCBzdGFydEV2ZW50Lm1ldGFLZXkpXG4gICAgcmV0dXJuO1xuICBjb25zdCBzdGFydERPTUNlbGwgPSBkb21JbkNlbGwodmlldywgc3RhcnRFdmVudC50YXJnZXQpO1xuICBsZXQgJGFuY2hvcjtcbiAgaWYgKHN0YXJ0RXZlbnQuc2hpZnRLZXkgJiYgdmlldy5zdGF0ZS5zZWxlY3Rpb24gaW5zdGFuY2VvZiBDZWxsU2VsZWN0aW9uKSB7XG4gICAgc2V0Q2VsbFNlbGVjdGlvbih2aWV3LnN0YXRlLnNlbGVjdGlvbi4kYW5jaG9yQ2VsbCwgc3RhcnRFdmVudCk7XG4gICAgc3RhcnRFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9IGVsc2UgaWYgKHN0YXJ0RXZlbnQuc2hpZnRLZXkgJiYgc3RhcnRET01DZWxsICYmICgkYW5jaG9yID0gY2VsbEFyb3VuZCh2aWV3LnN0YXRlLnNlbGVjdGlvbi4kYW5jaG9yKSkgIT0gbnVsbCAmJiAoKF9hID0gY2VsbFVuZGVyTW91c2Uodmlldywgc3RhcnRFdmVudCkpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wb3MpICE9ICRhbmNob3IucG9zKSB7XG4gICAgc2V0Q2VsbFNlbGVjdGlvbigkYW5jaG9yLCBzdGFydEV2ZW50KTtcbiAgICBzdGFydEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH0gZWxzZSBpZiAoIXN0YXJ0RE9NQ2VsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBmdW5jdGlvbiBzZXRDZWxsU2VsZWN0aW9uKCRhbmNob3IyLCBldmVudCkge1xuICAgIGxldCAkaGVhZCA9IGNlbGxVbmRlck1vdXNlKHZpZXcsIGV2ZW50KTtcbiAgICBjb25zdCBzdGFydGluZyA9IHRhYmxlRWRpdGluZ0tleS5nZXRTdGF0ZSh2aWV3LnN0YXRlKSA9PSBudWxsO1xuICAgIGlmICghJGhlYWQgfHwgIWluU2FtZVRhYmxlKCRhbmNob3IyLCAkaGVhZCkpIHtcbiAgICAgIGlmIChzdGFydGluZylcbiAgICAgICAgJGhlYWQgPSAkYW5jaG9yMjtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3Rpb24gPSBuZXcgQ2VsbFNlbGVjdGlvbigkYW5jaG9yMiwgJGhlYWQpO1xuICAgIGlmIChzdGFydGluZyB8fCAhdmlldy5zdGF0ZS5zZWxlY3Rpb24uZXEoc2VsZWN0aW9uKSkge1xuICAgICAgY29uc3QgdHIgPSB2aWV3LnN0YXRlLnRyLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pO1xuICAgICAgaWYgKHN0YXJ0aW5nKVxuICAgICAgICB0ci5zZXRNZXRhKHRhYmxlRWRpdGluZ0tleSwgJGFuY2hvcjIucG9zKTtcbiAgICAgIHZpZXcuZGlzcGF0Y2godHIpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBzdG9wKCkge1xuICAgIHZpZXcucm9vdC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBzdG9wKTtcbiAgICB2aWV3LnJvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImRyYWdzdGFydFwiLCBzdG9wKTtcbiAgICB2aWV3LnJvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBtb3ZlKTtcbiAgICBpZiAodGFibGVFZGl0aW5nS2V5LmdldFN0YXRlKHZpZXcuc3RhdGUpICE9IG51bGwpXG4gICAgICB2aWV3LmRpc3BhdGNoKHZpZXcuc3RhdGUudHIuc2V0TWV0YSh0YWJsZUVkaXRpbmdLZXksIC0xKSk7XG4gIH1cbiAgZnVuY3Rpb24gbW92ZShfZXZlbnQpIHtcbiAgICBjb25zdCBldmVudCA9IF9ldmVudDtcbiAgICBjb25zdCBhbmNob3IgPSB0YWJsZUVkaXRpbmdLZXkuZ2V0U3RhdGUodmlldy5zdGF0ZSk7XG4gICAgbGV0ICRhbmNob3IyO1xuICAgIGlmIChhbmNob3IgIT0gbnVsbCkge1xuICAgICAgJGFuY2hvcjIgPSB2aWV3LnN0YXRlLmRvYy5yZXNvbHZlKGFuY2hvcik7XG4gICAgfSBlbHNlIGlmIChkb21JbkNlbGwodmlldywgZXZlbnQudGFyZ2V0KSAhPSBzdGFydERPTUNlbGwpIHtcbiAgICAgICRhbmNob3IyID0gY2VsbFVuZGVyTW91c2Uodmlldywgc3RhcnRFdmVudCk7XG4gICAgICBpZiAoISRhbmNob3IyKVxuICAgICAgICByZXR1cm4gc3RvcCgpO1xuICAgIH1cbiAgICBpZiAoJGFuY2hvcjIpXG4gICAgICBzZXRDZWxsU2VsZWN0aW9uKCRhbmNob3IyLCBldmVudCk7XG4gIH1cbiAgdmlldy5yb290LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHN0b3ApO1xuICB2aWV3LnJvb3QuYWRkRXZlbnRMaXN0ZW5lcihcImRyYWdzdGFydFwiLCBzdG9wKTtcbiAgdmlldy5yb290LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgbW92ZSk7XG59XG5mdW5jdGlvbiBhdEVuZE9mQ2VsbCh2aWV3LCBheGlzLCBkaXIpIHtcbiAgaWYgKCEodmlldy5zdGF0ZS5zZWxlY3Rpb24gaW5zdGFuY2VvZiBUZXh0U2VsZWN0aW9uMikpXG4gICAgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHsgJGhlYWQgfSA9IHZpZXcuc3RhdGUuc2VsZWN0aW9uO1xuICBmb3IgKGxldCBkID0gJGhlYWQuZGVwdGggLSAxOyBkID49IDA7IGQtLSkge1xuICAgIGNvbnN0IHBhcmVudCA9ICRoZWFkLm5vZGUoZCksIGluZGV4ID0gZGlyIDwgMCA/ICRoZWFkLmluZGV4KGQpIDogJGhlYWQuaW5kZXhBZnRlcihkKTtcbiAgICBpZiAoaW5kZXggIT0gKGRpciA8IDAgPyAwIDogcGFyZW50LmNoaWxkQ291bnQpKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgaWYgKHBhcmVudC50eXBlLnNwZWMudGFibGVSb2xlID09IFwiY2VsbFwiIHx8IHBhcmVudC50eXBlLnNwZWMudGFibGVSb2xlID09IFwiaGVhZGVyX2NlbGxcIikge1xuICAgICAgY29uc3QgY2VsbFBvcyA9ICRoZWFkLmJlZm9yZShkKTtcbiAgICAgIGNvbnN0IGRpclN0ciA9IGF4aXMgPT0gXCJ2ZXJ0XCIgPyBkaXIgPiAwID8gXCJkb3duXCIgOiBcInVwXCIgOiBkaXIgPiAwID8gXCJyaWdodFwiIDogXCJsZWZ0XCI7XG4gICAgICByZXR1cm4gdmlldy5lbmRPZlRleHRibG9jayhkaXJTdHIpID8gY2VsbFBvcyA6IG51bGw7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZG9tSW5DZWxsKHZpZXcsIGRvbSkge1xuICBmb3IgKDsgZG9tICYmIGRvbSAhPSB2aWV3LmRvbTsgZG9tID0gZG9tLnBhcmVudE5vZGUpIHtcbiAgICBpZiAoZG9tLm5vZGVOYW1lID09IFwiVERcIiB8fCBkb20ubm9kZU5hbWUgPT0gXCJUSFwiKSB7XG4gICAgICByZXR1cm4gZG9tO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGNlbGxVbmRlck1vdXNlKHZpZXcsIGV2ZW50KSB7XG4gIGNvbnN0IG1vdXNlUG9zID0gdmlldy5wb3NBdENvb3Jkcyh7XG4gICAgbGVmdDogZXZlbnQuY2xpZW50WCxcbiAgICB0b3A6IGV2ZW50LmNsaWVudFlcbiAgfSk7XG4gIGlmICghbW91c2VQb3MpXG4gICAgcmV0dXJuIG51bGw7XG4gIHJldHVybiBtb3VzZVBvcyA/IGNlbGxBcm91bmQodmlldy5zdGF0ZS5kb2MucmVzb2x2ZShtb3VzZVBvcy5wb3MpKSA6IG51bGw7XG59XG5cbi8vIHNyYy9jb2x1bW5yZXNpemluZy50c1xuaW1wb3J0IHsgUGx1Z2luLCBQbHVnaW5LZXkgYXMgUGx1Z2luS2V5MyB9IGZyb20gXCJwcm9zZW1pcnJvci1zdGF0ZVwiO1xuaW1wb3J0IHtcbiAgRGVjb3JhdGlvbiBhcyBEZWNvcmF0aW9uMixcbiAgRGVjb3JhdGlvblNldCBhcyBEZWNvcmF0aW9uU2V0MlxufSBmcm9tIFwicHJvc2VtaXJyb3Itdmlld1wiO1xuXG4vLyBzcmMvdGFibGV2aWV3LnRzXG52YXIgVGFibGVWaWV3ID0gY2xhc3Mge1xuICBjb25zdHJ1Y3Rvcihub2RlLCBjZWxsTWluV2lkdGgpIHtcbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIHRoaXMuY2VsbE1pbldpZHRoID0gY2VsbE1pbldpZHRoO1xuICAgIHRoaXMuZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmRvbS5jbGFzc05hbWUgPSBcInRhYmxlV3JhcHBlclwiO1xuICAgIHRoaXMudGFibGUgPSB0aGlzLmRvbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGFibGVcIikpO1xuICAgIHRoaXMuY29sZ3JvdXAgPSB0aGlzLnRhYmxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjb2xncm91cFwiKSk7XG4gICAgdXBkYXRlQ29sdW1uc09uUmVzaXplKG5vZGUsIHRoaXMuY29sZ3JvdXAsIHRoaXMudGFibGUsIGNlbGxNaW5XaWR0aCk7XG4gICAgdGhpcy5jb250ZW50RE9NID0gdGhpcy50YWJsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGJvZHlcIikpO1xuICB9XG4gIHVwZGF0ZShub2RlKSB7XG4gICAgaWYgKG5vZGUudHlwZSAhPSB0aGlzLm5vZGUudHlwZSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIHVwZGF0ZUNvbHVtbnNPblJlc2l6ZShub2RlLCB0aGlzLmNvbGdyb3VwLCB0aGlzLnRhYmxlLCB0aGlzLmNlbGxNaW5XaWR0aCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWdub3JlTXV0YXRpb24ocmVjb3JkKSB7XG4gICAgcmV0dXJuIHJlY29yZC50eXBlID09IFwiYXR0cmlidXRlc1wiICYmIChyZWNvcmQudGFyZ2V0ID09IHRoaXMudGFibGUgfHwgdGhpcy5jb2xncm91cC5jb250YWlucyhyZWNvcmQudGFyZ2V0KSk7XG4gIH1cbn07XG5mdW5jdGlvbiB1cGRhdGVDb2x1bW5zT25SZXNpemUobm9kZSwgY29sZ3JvdXAsIHRhYmxlLCBjZWxsTWluV2lkdGgsIG92ZXJyaWRlQ29sLCBvdmVycmlkZVZhbHVlKSB7XG4gIHZhciBfYTtcbiAgbGV0IHRvdGFsV2lkdGggPSAwO1xuICBsZXQgZml4ZWRXaWR0aCA9IHRydWU7XG4gIGxldCBuZXh0RE9NID0gY29sZ3JvdXAuZmlyc3RDaGlsZDtcbiAgY29uc3Qgcm93ID0gbm9kZS5maXJzdENoaWxkO1xuICBpZiAoIXJvdylcbiAgICByZXR1cm47XG4gIGZvciAobGV0IGkgPSAwLCBjb2wgPSAwOyBpIDwgcm93LmNoaWxkQ291bnQ7IGkrKykge1xuICAgIGNvbnN0IHsgY29sc3BhbiwgY29sd2lkdGggfSA9IHJvdy5jaGlsZChpKS5hdHRycztcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHNwYW47IGorKywgY29sKyspIHtcbiAgICAgIGNvbnN0IGhhc1dpZHRoID0gb3ZlcnJpZGVDb2wgPT0gY29sID8gb3ZlcnJpZGVWYWx1ZSA6IGNvbHdpZHRoICYmIGNvbHdpZHRoW2pdO1xuICAgICAgY29uc3QgY3NzV2lkdGggPSBoYXNXaWR0aCA/IGhhc1dpZHRoICsgXCJweFwiIDogXCJcIjtcbiAgICAgIHRvdGFsV2lkdGggKz0gaGFzV2lkdGggfHwgY2VsbE1pbldpZHRoO1xuICAgICAgaWYgKCFoYXNXaWR0aClcbiAgICAgICAgZml4ZWRXaWR0aCA9IGZhbHNlO1xuICAgICAgaWYgKCFuZXh0RE9NKSB7XG4gICAgICAgIGNvbGdyb3VwLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjb2xcIikpLnN0eWxlLndpZHRoID0gY3NzV2lkdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobmV4dERPTS5zdHlsZS53aWR0aCAhPSBjc3NXaWR0aClcbiAgICAgICAgICBuZXh0RE9NLnN0eWxlLndpZHRoID0gY3NzV2lkdGg7XG4gICAgICAgIG5leHRET00gPSBuZXh0RE9NLm5leHRTaWJsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB3aGlsZSAobmV4dERPTSkge1xuICAgIGNvbnN0IGFmdGVyID0gbmV4dERPTS5uZXh0U2libGluZztcbiAgICAoX2EgPSBuZXh0RE9NLnBhcmVudE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYS5yZW1vdmVDaGlsZChuZXh0RE9NKTtcbiAgICBuZXh0RE9NID0gYWZ0ZXI7XG4gIH1cbiAgaWYgKGZpeGVkV2lkdGgpIHtcbiAgICB0YWJsZS5zdHlsZS53aWR0aCA9IHRvdGFsV2lkdGggKyBcInB4XCI7XG4gICAgdGFibGUuc3R5bGUubWluV2lkdGggPSBcIlwiO1xuICB9IGVsc2Uge1xuICAgIHRhYmxlLnN0eWxlLndpZHRoID0gXCJcIjtcbiAgICB0YWJsZS5zdHlsZS5taW5XaWR0aCA9IHRvdGFsV2lkdGggKyBcInB4XCI7XG4gIH1cbn1cblxuLy8gc3JjL2NvbHVtbnJlc2l6aW5nLnRzXG52YXIgY29sdW1uUmVzaXppbmdQbHVnaW5LZXkgPSBuZXcgUGx1Z2luS2V5MyhcbiAgXCJ0YWJsZUNvbHVtblJlc2l6aW5nXCJcbik7XG5mdW5jdGlvbiBjb2x1bW5SZXNpemluZyh7XG4gIGhhbmRsZVdpZHRoID0gNSxcbiAgY2VsbE1pbldpZHRoID0gMjUsXG4gIFZpZXcgPSBUYWJsZVZpZXcsXG4gIGxhc3RDb2x1bW5SZXNpemFibGUgPSB0cnVlXG59ID0ge30pIHtcbiAgY29uc3QgcGx1Z2luID0gbmV3IFBsdWdpbih7XG4gICAga2V5OiBjb2x1bW5SZXNpemluZ1BsdWdpbktleSxcbiAgICBzdGF0ZToge1xuICAgICAgaW5pdChfLCBzdGF0ZSkge1xuICAgICAgICBwbHVnaW4uc3BlYy5wcm9wcy5ub2RlVmlld3NbdGFibGVOb2RlVHlwZXMoc3RhdGUuc2NoZW1hKS50YWJsZS5uYW1lXSA9IChub2RlLCB2aWV3KSA9PiBuZXcgVmlldyhub2RlLCBjZWxsTWluV2lkdGgsIHZpZXcpO1xuICAgICAgICByZXR1cm4gbmV3IFJlc2l6ZVN0YXRlKC0xLCBmYWxzZSk7XG4gICAgICB9LFxuICAgICAgYXBwbHkodHIsIHByZXYpIHtcbiAgICAgICAgcmV0dXJuIHByZXYuYXBwbHkodHIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgIGF0dHJpYnV0ZXM6IChzdGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCBwbHVnaW5TdGF0ZSA9IGNvbHVtblJlc2l6aW5nUGx1Z2luS2V5LmdldFN0YXRlKHN0YXRlKTtcbiAgICAgICAgcmV0dXJuIHBsdWdpblN0YXRlICYmIHBsdWdpblN0YXRlLmFjdGl2ZUhhbmRsZSA+IC0xID8geyBjbGFzczogXCJyZXNpemUtY3Vyc29yXCIgfSA6IHt9O1xuICAgICAgfSxcbiAgICAgIGhhbmRsZURPTUV2ZW50czoge1xuICAgICAgICBtb3VzZW1vdmU6ICh2aWV3LCBldmVudCkgPT4ge1xuICAgICAgICAgIGhhbmRsZU1vdXNlTW92ZShcbiAgICAgICAgICAgIHZpZXcsXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGhhbmRsZVdpZHRoLFxuICAgICAgICAgICAgY2VsbE1pbldpZHRoLFxuICAgICAgICAgICAgbGFzdENvbHVtblJlc2l6YWJsZVxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIG1vdXNlbGVhdmU6ICh2aWV3KSA9PiB7XG4gICAgICAgICAgaGFuZGxlTW91c2VMZWF2ZSh2aWV3KTtcbiAgICAgICAgfSxcbiAgICAgICAgbW91c2Vkb3duOiAodmlldywgZXZlbnQpID0+IHtcbiAgICAgICAgICBoYW5kbGVNb3VzZURvd24yKHZpZXcsIGV2ZW50LCBjZWxsTWluV2lkdGgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVjb3JhdGlvbnM6IChzdGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCBwbHVnaW5TdGF0ZSA9IGNvbHVtblJlc2l6aW5nUGx1Z2luS2V5LmdldFN0YXRlKHN0YXRlKTtcbiAgICAgICAgaWYgKHBsdWdpblN0YXRlICYmIHBsdWdpblN0YXRlLmFjdGl2ZUhhbmRsZSA+IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZURlY29yYXRpb25zKHN0YXRlLCBwbHVnaW5TdGF0ZS5hY3RpdmVIYW5kbGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbm9kZVZpZXdzOiB7fVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwbHVnaW47XG59XG52YXIgUmVzaXplU3RhdGUgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKGFjdGl2ZUhhbmRsZSwgZHJhZ2dpbmcpIHtcbiAgICB0aGlzLmFjdGl2ZUhhbmRsZSA9IGFjdGl2ZUhhbmRsZTtcbiAgICB0aGlzLmRyYWdnaW5nID0gZHJhZ2dpbmc7XG4gIH1cbiAgYXBwbHkodHIpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXM7XG4gICAgY29uc3QgYWN0aW9uID0gdHIuZ2V0TWV0YShjb2x1bW5SZXNpemluZ1BsdWdpbktleSk7XG4gICAgaWYgKGFjdGlvbiAmJiBhY3Rpb24uc2V0SGFuZGxlICE9IG51bGwpXG4gICAgICByZXR1cm4gbmV3IFJlc2l6ZVN0YXRlKGFjdGlvbi5zZXRIYW5kbGUsIGZhbHNlKTtcbiAgICBpZiAoYWN0aW9uICYmIGFjdGlvbi5zZXREcmFnZ2luZyAhPT0gdm9pZCAwKVxuICAgICAgcmV0dXJuIG5ldyBSZXNpemVTdGF0ZShzdGF0ZS5hY3RpdmVIYW5kbGUsIGFjdGlvbi5zZXREcmFnZ2luZyk7XG4gICAgaWYgKHN0YXRlLmFjdGl2ZUhhbmRsZSA+IC0xICYmIHRyLmRvY0NoYW5nZWQpIHtcbiAgICAgIGxldCBoYW5kbGUgPSB0ci5tYXBwaW5nLm1hcChzdGF0ZS5hY3RpdmVIYW5kbGUsIC0xKTtcbiAgICAgIGlmICghcG9pbnRzQXRDZWxsKHRyLmRvYy5yZXNvbHZlKGhhbmRsZSkpKSB7XG4gICAgICAgIGhhbmRsZSA9IC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBSZXNpemVTdGF0ZShoYW5kbGUsIHN0YXRlLmRyYWdnaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG59O1xuZnVuY3Rpb24gaGFuZGxlTW91c2VNb3ZlKHZpZXcsIGV2ZW50LCBoYW5kbGVXaWR0aCwgY2VsbE1pbldpZHRoLCBsYXN0Q29sdW1uUmVzaXphYmxlKSB7XG4gIGNvbnN0IHBsdWdpblN0YXRlID0gY29sdW1uUmVzaXppbmdQbHVnaW5LZXkuZ2V0U3RhdGUodmlldy5zdGF0ZSk7XG4gIGlmICghcGx1Z2luU3RhdGUpXG4gICAgcmV0dXJuO1xuICBpZiAoIXBsdWdpblN0YXRlLmRyYWdnaW5nKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZG9tQ2VsbEFyb3VuZChldmVudC50YXJnZXQpO1xuICAgIGxldCBjZWxsID0gLTE7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgY29uc3QgeyBsZWZ0LCByaWdodCB9ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKGV2ZW50LmNsaWVudFggLSBsZWZ0IDw9IGhhbmRsZVdpZHRoKVxuICAgICAgICBjZWxsID0gZWRnZUNlbGwodmlldywgZXZlbnQsIFwibGVmdFwiKTtcbiAgICAgIGVsc2UgaWYgKHJpZ2h0IC0gZXZlbnQuY2xpZW50WCA8PSBoYW5kbGVXaWR0aClcbiAgICAgICAgY2VsbCA9IGVkZ2VDZWxsKHZpZXcsIGV2ZW50LCBcInJpZ2h0XCIpO1xuICAgIH1cbiAgICBpZiAoY2VsbCAhPSBwbHVnaW5TdGF0ZS5hY3RpdmVIYW5kbGUpIHtcbiAgICAgIGlmICghbGFzdENvbHVtblJlc2l6YWJsZSAmJiBjZWxsICE9PSAtMSkge1xuICAgICAgICBjb25zdCAkY2VsbCA9IHZpZXcuc3RhdGUuZG9jLnJlc29sdmUoY2VsbCk7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gJGNlbGwubm9kZSgtMSk7XG4gICAgICAgIGNvbnN0IG1hcCA9IFRhYmxlTWFwLmdldCh0YWJsZSk7XG4gICAgICAgIGNvbnN0IHRhYmxlU3RhcnQgPSAkY2VsbC5zdGFydCgtMSk7XG4gICAgICAgIGNvbnN0IGNvbCA9IG1hcC5jb2xDb3VudCgkY2VsbC5wb3MgLSB0YWJsZVN0YXJ0KSArICRjZWxsLm5vZGVBZnRlci5hdHRycy5jb2xzcGFuIC0gMTtcbiAgICAgICAgaWYgKGNvbCA9PSBtYXAud2lkdGggLSAxKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB1cGRhdGVIYW5kbGUodmlldywgY2VsbCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBoYW5kbGVNb3VzZUxlYXZlKHZpZXcpIHtcbiAgY29uc3QgcGx1Z2luU3RhdGUgPSBjb2x1bW5SZXNpemluZ1BsdWdpbktleS5nZXRTdGF0ZSh2aWV3LnN0YXRlKTtcbiAgaWYgKHBsdWdpblN0YXRlICYmIHBsdWdpblN0YXRlLmFjdGl2ZUhhbmRsZSA+IC0xICYmICFwbHVnaW5TdGF0ZS5kcmFnZ2luZylcbiAgICB1cGRhdGVIYW5kbGUodmlldywgLTEpO1xufVxuZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duMih2aWV3LCBldmVudCwgY2VsbE1pbldpZHRoKSB7XG4gIGNvbnN0IHBsdWdpblN0YXRlID0gY29sdW1uUmVzaXppbmdQbHVnaW5LZXkuZ2V0U3RhdGUodmlldy5zdGF0ZSk7XG4gIGlmICghcGx1Z2luU3RhdGUgfHwgcGx1Z2luU3RhdGUuYWN0aXZlSGFuZGxlID09IC0xIHx8IHBsdWdpblN0YXRlLmRyYWdnaW5nKVxuICAgIHJldHVybiBmYWxzZTtcbiAgY29uc3QgY2VsbCA9IHZpZXcuc3RhdGUuZG9jLm5vZGVBdChwbHVnaW5TdGF0ZS5hY3RpdmVIYW5kbGUpO1xuICBjb25zdCB3aWR0aCA9IGN1cnJlbnRDb2xXaWR0aCh2aWV3LCBwbHVnaW5TdGF0ZS5hY3RpdmVIYW5kbGUsIGNlbGwuYXR0cnMpO1xuICB2aWV3LmRpc3BhdGNoKFxuICAgIHZpZXcuc3RhdGUudHIuc2V0TWV0YShjb2x1bW5SZXNpemluZ1BsdWdpbktleSwge1xuICAgICAgc2V0RHJhZ2dpbmc6IHsgc3RhcnRYOiBldmVudC5jbGllbnRYLCBzdGFydFdpZHRoOiB3aWR0aCB9XG4gICAgfSlcbiAgKTtcbiAgZnVuY3Rpb24gZmluaXNoKGV2ZW50Mikge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBmaW5pc2gpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIG1vdmUpO1xuICAgIGNvbnN0IHBsdWdpblN0YXRlMiA9IGNvbHVtblJlc2l6aW5nUGx1Z2luS2V5LmdldFN0YXRlKHZpZXcuc3RhdGUpO1xuICAgIGlmIChwbHVnaW5TdGF0ZTIgPT0gbnVsbCA/IHZvaWQgMCA6IHBsdWdpblN0YXRlMi5kcmFnZ2luZykge1xuICAgICAgdXBkYXRlQ29sdW1uV2lkdGgoXG4gICAgICAgIHZpZXcsXG4gICAgICAgIHBsdWdpblN0YXRlMi5hY3RpdmVIYW5kbGUsXG4gICAgICAgIGRyYWdnZWRXaWR0aChwbHVnaW5TdGF0ZTIuZHJhZ2dpbmcsIGV2ZW50MiwgY2VsbE1pbldpZHRoKVxuICAgICAgKTtcbiAgICAgIHZpZXcuZGlzcGF0Y2goXG4gICAgICAgIHZpZXcuc3RhdGUudHIuc2V0TWV0YShjb2x1bW5SZXNpemluZ1BsdWdpbktleSwgeyBzZXREcmFnZ2luZzogbnVsbCB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gbW92ZShldmVudDIpIHtcbiAgICBpZiAoIWV2ZW50Mi53aGljaClcbiAgICAgIHJldHVybiBmaW5pc2goZXZlbnQyKTtcbiAgICBjb25zdCBwbHVnaW5TdGF0ZTIgPSBjb2x1bW5SZXNpemluZ1BsdWdpbktleS5nZXRTdGF0ZSh2aWV3LnN0YXRlKTtcbiAgICBpZiAoIXBsdWdpblN0YXRlMilcbiAgICAgIHJldHVybjtcbiAgICBpZiAocGx1Z2luU3RhdGUyLmRyYWdnaW5nKSB7XG4gICAgICBjb25zdCBkcmFnZ2VkID0gZHJhZ2dlZFdpZHRoKHBsdWdpblN0YXRlMi5kcmFnZ2luZywgZXZlbnQyLCBjZWxsTWluV2lkdGgpO1xuICAgICAgZGlzcGxheUNvbHVtbldpZHRoKHZpZXcsIHBsdWdpblN0YXRlMi5hY3RpdmVIYW5kbGUsIGRyYWdnZWQsIGNlbGxNaW5XaWR0aCk7XG4gICAgfVxuICB9XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBmaW5pc2gpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBtb3ZlKTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBjdXJyZW50Q29sV2lkdGgodmlldywgY2VsbFBvcywgeyBjb2xzcGFuLCBjb2x3aWR0aCB9KSB7XG4gIGNvbnN0IHdpZHRoID0gY29sd2lkdGggJiYgY29sd2lkdGhbY29sd2lkdGgubGVuZ3RoIC0gMV07XG4gIGlmICh3aWR0aClcbiAgICByZXR1cm4gd2lkdGg7XG4gIGNvbnN0IGRvbSA9IHZpZXcuZG9tQXRQb3MoY2VsbFBvcyk7XG4gIGNvbnN0IG5vZGUgPSBkb20ubm9kZS5jaGlsZE5vZGVzW2RvbS5vZmZzZXRdO1xuICBsZXQgZG9tV2lkdGggPSBub2RlLm9mZnNldFdpZHRoLCBwYXJ0cyA9IGNvbHNwYW47XG4gIGlmIChjb2x3aWR0aCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sc3BhbjsgaSsrKVxuICAgICAgaWYgKGNvbHdpZHRoW2ldKSB7XG4gICAgICAgIGRvbVdpZHRoIC09IGNvbHdpZHRoW2ldO1xuICAgICAgICBwYXJ0cy0tO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBkb21XaWR0aCAvIHBhcnRzO1xufVxuZnVuY3Rpb24gZG9tQ2VsbEFyb3VuZCh0YXJnZXQpIHtcbiAgd2hpbGUgKHRhcmdldCAmJiB0YXJnZXQubm9kZU5hbWUgIT0gXCJURFwiICYmIHRhcmdldC5ub2RlTmFtZSAhPSBcIlRIXCIpXG4gICAgdGFyZ2V0ID0gdGFyZ2V0LmNsYXNzTGlzdCAmJiB0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiUHJvc2VNaXJyb3JcIikgPyBudWxsIDogdGFyZ2V0LnBhcmVudE5vZGU7XG4gIHJldHVybiB0YXJnZXQ7XG59XG5mdW5jdGlvbiBlZGdlQ2VsbCh2aWV3LCBldmVudCwgc2lkZSkge1xuICBjb25zdCBmb3VuZCA9IHZpZXcucG9zQXRDb29yZHMoeyBsZWZ0OiBldmVudC5jbGllbnRYLCB0b3A6IGV2ZW50LmNsaWVudFkgfSk7XG4gIGlmICghZm91bmQpXG4gICAgcmV0dXJuIC0xO1xuICBjb25zdCB7IHBvcyB9ID0gZm91bmQ7XG4gIGNvbnN0ICRjZWxsID0gY2VsbEFyb3VuZCh2aWV3LnN0YXRlLmRvYy5yZXNvbHZlKHBvcykpO1xuICBpZiAoISRjZWxsKVxuICAgIHJldHVybiAtMTtcbiAgaWYgKHNpZGUgPT0gXCJyaWdodFwiKVxuICAgIHJldHVybiAkY2VsbC5wb3M7XG4gIGNvbnN0IG1hcCA9IFRhYmxlTWFwLmdldCgkY2VsbC5ub2RlKC0xKSksIHN0YXJ0ID0gJGNlbGwuc3RhcnQoLTEpO1xuICBjb25zdCBpbmRleCA9IG1hcC5tYXAuaW5kZXhPZigkY2VsbC5wb3MgLSBzdGFydCk7XG4gIHJldHVybiBpbmRleCAlIG1hcC53aWR0aCA9PSAwID8gLTEgOiBzdGFydCArIG1hcC5tYXBbaW5kZXggLSAxXTtcbn1cbmZ1bmN0aW9uIGRyYWdnZWRXaWR0aChkcmFnZ2luZywgZXZlbnQsIGNlbGxNaW5XaWR0aCkge1xuICBjb25zdCBvZmZzZXQgPSBldmVudC5jbGllbnRYIC0gZHJhZ2dpbmcuc3RhcnRYO1xuICByZXR1cm4gTWF0aC5tYXgoY2VsbE1pbldpZHRoLCBkcmFnZ2luZy5zdGFydFdpZHRoICsgb2Zmc2V0KTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUhhbmRsZSh2aWV3LCB2YWx1ZSkge1xuICB2aWV3LmRpc3BhdGNoKFxuICAgIHZpZXcuc3RhdGUudHIuc2V0TWV0YShjb2x1bW5SZXNpemluZ1BsdWdpbktleSwgeyBzZXRIYW5kbGU6IHZhbHVlIH0pXG4gICk7XG59XG5mdW5jdGlvbiB1cGRhdGVDb2x1bW5XaWR0aCh2aWV3LCBjZWxsLCB3aWR0aCkge1xuICBjb25zdCAkY2VsbCA9IHZpZXcuc3RhdGUuZG9jLnJlc29sdmUoY2VsbCk7XG4gIGNvbnN0IHRhYmxlID0gJGNlbGwubm9kZSgtMSksIG1hcCA9IFRhYmxlTWFwLmdldCh0YWJsZSksIHN0YXJ0ID0gJGNlbGwuc3RhcnQoLTEpO1xuICBjb25zdCBjb2wgPSBtYXAuY29sQ291bnQoJGNlbGwucG9zIC0gc3RhcnQpICsgJGNlbGwubm9kZUFmdGVyLmF0dHJzLmNvbHNwYW4gLSAxO1xuICBjb25zdCB0ciA9IHZpZXcuc3RhdGUudHI7XG4gIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IG1hcC5oZWlnaHQ7IHJvdysrKSB7XG4gICAgY29uc3QgbWFwSW5kZXggPSByb3cgKiBtYXAud2lkdGggKyBjb2w7XG4gICAgaWYgKHJvdyAmJiBtYXAubWFwW21hcEluZGV4XSA9PSBtYXAubWFwW21hcEluZGV4IC0gbWFwLndpZHRoXSlcbiAgICAgIGNvbnRpbnVlO1xuICAgIGNvbnN0IHBvcyA9IG1hcC5tYXBbbWFwSW5kZXhdO1xuICAgIGNvbnN0IGF0dHJzID0gdGFibGUubm9kZUF0KHBvcykuYXR0cnM7XG4gICAgY29uc3QgaW5kZXggPSBhdHRycy5jb2xzcGFuID09IDEgPyAwIDogY29sIC0gbWFwLmNvbENvdW50KHBvcyk7XG4gICAgaWYgKGF0dHJzLmNvbHdpZHRoICYmIGF0dHJzLmNvbHdpZHRoW2luZGV4XSA9PSB3aWR0aClcbiAgICAgIGNvbnRpbnVlO1xuICAgIGNvbnN0IGNvbHdpZHRoID0gYXR0cnMuY29sd2lkdGggPyBhdHRycy5jb2x3aWR0aC5zbGljZSgpIDogemVyb2VzKGF0dHJzLmNvbHNwYW4pO1xuICAgIGNvbHdpZHRoW2luZGV4XSA9IHdpZHRoO1xuICAgIHRyLnNldE5vZGVNYXJrdXAoc3RhcnQgKyBwb3MsIG51bGwsIHsgLi4uYXR0cnMsIGNvbHdpZHRoIH0pO1xuICB9XG4gIGlmICh0ci5kb2NDaGFuZ2VkKVxuICAgIHZpZXcuZGlzcGF0Y2godHIpO1xufVxuZnVuY3Rpb24gZGlzcGxheUNvbHVtbldpZHRoKHZpZXcsIGNlbGwsIHdpZHRoLCBjZWxsTWluV2lkdGgpIHtcbiAgY29uc3QgJGNlbGwgPSB2aWV3LnN0YXRlLmRvYy5yZXNvbHZlKGNlbGwpO1xuICBjb25zdCB0YWJsZSA9ICRjZWxsLm5vZGUoLTEpLCBzdGFydCA9ICRjZWxsLnN0YXJ0KC0xKTtcbiAgY29uc3QgY29sID0gVGFibGVNYXAuZ2V0KHRhYmxlKS5jb2xDb3VudCgkY2VsbC5wb3MgLSBzdGFydCkgKyAkY2VsbC5ub2RlQWZ0ZXIuYXR0cnMuY29sc3BhbiAtIDE7XG4gIGxldCBkb20gPSB2aWV3LmRvbUF0UG9zKCRjZWxsLnN0YXJ0KC0xKSkubm9kZTtcbiAgd2hpbGUgKGRvbSAmJiBkb20ubm9kZU5hbWUgIT0gXCJUQUJMRVwiKSB7XG4gICAgZG9tID0gZG9tLnBhcmVudE5vZGU7XG4gIH1cbiAgaWYgKCFkb20pXG4gICAgcmV0dXJuO1xuICB1cGRhdGVDb2x1bW5zT25SZXNpemUoXG4gICAgdGFibGUsXG4gICAgZG9tLmZpcnN0Q2hpbGQsXG4gICAgZG9tLFxuICAgIGNlbGxNaW5XaWR0aCxcbiAgICBjb2wsXG4gICAgd2lkdGhcbiAgKTtcbn1cbmZ1bmN0aW9uIHplcm9lcyhuKSB7XG4gIHJldHVybiBBcnJheShuKS5maWxsKDApO1xufVxuZnVuY3Rpb24gaGFuZGxlRGVjb3JhdGlvbnMoc3RhdGUsIGNlbGwpIHtcbiAgY29uc3QgZGVjb3JhdGlvbnMgPSBbXTtcbiAgY29uc3QgJGNlbGwgPSBzdGF0ZS5kb2MucmVzb2x2ZShjZWxsKTtcbiAgY29uc3QgdGFibGUgPSAkY2VsbC5ub2RlKC0xKTtcbiAgaWYgKCF0YWJsZSkge1xuICAgIHJldHVybiBEZWNvcmF0aW9uU2V0Mi5lbXB0eTtcbiAgfVxuICBjb25zdCBtYXAgPSBUYWJsZU1hcC5nZXQodGFibGUpO1xuICBjb25zdCBzdGFydCA9ICRjZWxsLnN0YXJ0KC0xKTtcbiAgY29uc3QgY29sID0gbWFwLmNvbENvdW50KCRjZWxsLnBvcyAtIHN0YXJ0KSArICRjZWxsLm5vZGVBZnRlci5hdHRycy5jb2xzcGFuO1xuICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBtYXAuaGVpZ2h0OyByb3crKykge1xuICAgIGNvbnN0IGluZGV4ID0gY29sICsgcm93ICogbWFwLndpZHRoIC0gMTtcbiAgICBpZiAoKGNvbCA9PSBtYXAud2lkdGggfHwgbWFwLm1hcFtpbmRleF0gIT0gbWFwLm1hcFtpbmRleCArIDFdKSAmJiAocm93ID09IDAgfHwgbWFwLm1hcFtpbmRleCAtIDFdICE9IG1hcC5tYXBbaW5kZXggLSAxIC0gbWFwLndpZHRoXSkpIHtcbiAgICAgIGNvbnN0IGNlbGxQb3MgPSBtYXAubWFwW2luZGV4XTtcbiAgICAgIGNvbnN0IHBvcyA9IHN0YXJ0ICsgY2VsbFBvcyArIHRhYmxlLm5vZGVBdChjZWxsUG9zKS5ub2RlU2l6ZSAtIDE7XG4gICAgICBjb25zdCBkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZG9tLmNsYXNzTmFtZSA9IFwiY29sdW1uLXJlc2l6ZS1oYW5kbGVcIjtcbiAgICAgIGRlY29yYXRpb25zLnB1c2goRGVjb3JhdGlvbjIud2lkZ2V0KHBvcywgZG9tKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBEZWNvcmF0aW9uU2V0Mi5jcmVhdGUoc3RhdGUuZG9jLCBkZWNvcmF0aW9ucyk7XG59XG5cbi8vIHNyYy9jb21tYW5kcy50c1xuaW1wb3J0IHsgRnJhZ21lbnQgYXMgRnJhZ21lbnQ0IH0gZnJvbSBcInByb3NlbWlycm9yLW1vZGVsXCI7XG5pbXBvcnQge1xuICBUZXh0U2VsZWN0aW9uIGFzIFRleHRTZWxlY3Rpb24zXG59IGZyb20gXCJwcm9zZW1pcnJvci1zdGF0ZVwiO1xuZnVuY3Rpb24gc2VsZWN0ZWRSZWN0KHN0YXRlKSB7XG4gIGNvbnN0IHNlbCA9IHN0YXRlLnNlbGVjdGlvbjtcbiAgY29uc3QgJHBvcyA9IHNlbGVjdGlvbkNlbGwoc3RhdGUpO1xuICBjb25zdCB0YWJsZSA9ICRwb3Mubm9kZSgtMSk7XG4gIGNvbnN0IHRhYmxlU3RhcnQgPSAkcG9zLnN0YXJ0KC0xKTtcbiAgY29uc3QgbWFwID0gVGFibGVNYXAuZ2V0KHRhYmxlKTtcbiAgY29uc3QgcmVjdCA9IHNlbCBpbnN0YW5jZW9mIENlbGxTZWxlY3Rpb24gPyBtYXAucmVjdEJldHdlZW4oXG4gICAgc2VsLiRhbmNob3JDZWxsLnBvcyAtIHRhYmxlU3RhcnQsXG4gICAgc2VsLiRoZWFkQ2VsbC5wb3MgLSB0YWJsZVN0YXJ0XG4gICkgOiBtYXAuZmluZENlbGwoJHBvcy5wb3MgLSB0YWJsZVN0YXJ0KTtcbiAgcmV0dXJuIHsgLi4ucmVjdCwgdGFibGVTdGFydCwgbWFwLCB0YWJsZSB9O1xufVxuZnVuY3Rpb24gYWRkQ29sdW1uKHRyLCB7IG1hcCwgdGFibGVTdGFydCwgdGFibGUgfSwgY29sKSB7XG4gIGxldCByZWZDb2x1bW4gPSBjb2wgPiAwID8gLTEgOiAwO1xuICBpZiAoY29sdW1uSXNIZWFkZXIobWFwLCB0YWJsZSwgY29sICsgcmVmQ29sdW1uKSkge1xuICAgIHJlZkNvbHVtbiA9IGNvbCA9PSAwIHx8IGNvbCA9PSBtYXAud2lkdGggPyBudWxsIDogMDtcbiAgfVxuICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBtYXAuaGVpZ2h0OyByb3crKykge1xuICAgIGNvbnN0IGluZGV4ID0gcm93ICogbWFwLndpZHRoICsgY29sO1xuICAgIGlmIChjb2wgPiAwICYmIGNvbCA8IG1hcC53aWR0aCAmJiBtYXAubWFwW2luZGV4IC0gMV0gPT0gbWFwLm1hcFtpbmRleF0pIHtcbiAgICAgIGNvbnN0IHBvcyA9IG1hcC5tYXBbaW5kZXhdO1xuICAgICAgY29uc3QgY2VsbCA9IHRhYmxlLm5vZGVBdChwb3MpO1xuICAgICAgdHIuc2V0Tm9kZU1hcmt1cChcbiAgICAgICAgdHIubWFwcGluZy5tYXAodGFibGVTdGFydCArIHBvcyksXG4gICAgICAgIG51bGwsXG4gICAgICAgIGFkZENvbFNwYW4oY2VsbC5hdHRycywgY29sIC0gbWFwLmNvbENvdW50KHBvcykpXG4gICAgICApO1xuICAgICAgcm93ICs9IGNlbGwuYXR0cnMucm93c3BhbiAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHR5cGUgPSByZWZDb2x1bW4gPT0gbnVsbCA/IHRhYmxlTm9kZVR5cGVzKHRhYmxlLnR5cGUuc2NoZW1hKS5jZWxsIDogdGFibGUubm9kZUF0KG1hcC5tYXBbaW5kZXggKyByZWZDb2x1bW5dKS50eXBlO1xuICAgICAgY29uc3QgcG9zID0gbWFwLnBvc2l0aW9uQXQocm93LCBjb2wsIHRhYmxlKTtcbiAgICAgIHRyLmluc2VydCh0ci5tYXBwaW5nLm1hcCh0YWJsZVN0YXJ0ICsgcG9zKSwgdHlwZS5jcmVhdGVBbmRGaWxsKCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHI7XG59XG5mdW5jdGlvbiBhZGRDb2x1bW5CZWZvcmUoc3RhdGUsIGRpc3BhdGNoKSB7XG4gIGlmICghaXNJblRhYmxlKHN0YXRlKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChkaXNwYXRjaCkge1xuICAgIGNvbnN0IHJlY3QgPSBzZWxlY3RlZFJlY3Qoc3RhdGUpO1xuICAgIGRpc3BhdGNoKGFkZENvbHVtbihzdGF0ZS50ciwgcmVjdCwgcmVjdC5sZWZ0KSk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBhZGRDb2x1bW5BZnRlcihzdGF0ZSwgZGlzcGF0Y2gpIHtcbiAgaWYgKCFpc0luVGFibGUoc3RhdGUpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKGRpc3BhdGNoKSB7XG4gICAgY29uc3QgcmVjdCA9IHNlbGVjdGVkUmVjdChzdGF0ZSk7XG4gICAgZGlzcGF0Y2goYWRkQ29sdW1uKHN0YXRlLnRyLCByZWN0LCByZWN0LnJpZ2h0KSk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiByZW1vdmVDb2x1bW4odHIsIHsgbWFwLCB0YWJsZSwgdGFibGVTdGFydCB9LCBjb2wpIHtcbiAgY29uc3QgbWFwU3RhcnQgPSB0ci5tYXBwaW5nLm1hcHMubGVuZ3RoO1xuICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBtYXAuaGVpZ2h0OyApIHtcbiAgICBjb25zdCBpbmRleCA9IHJvdyAqIG1hcC53aWR0aCArIGNvbDtcbiAgICBjb25zdCBwb3MgPSBtYXAubWFwW2luZGV4XTtcbiAgICBjb25zdCBjZWxsID0gdGFibGUubm9kZUF0KHBvcyk7XG4gICAgY29uc3QgYXR0cnMgPSBjZWxsLmF0dHJzO1xuICAgIGlmIChjb2wgPiAwICYmIG1hcC5tYXBbaW5kZXggLSAxXSA9PSBwb3MgfHwgY29sIDwgbWFwLndpZHRoIC0gMSAmJiBtYXAubWFwW2luZGV4ICsgMV0gPT0gcG9zKSB7XG4gICAgICB0ci5zZXROb2RlTWFya3VwKFxuICAgICAgICB0ci5tYXBwaW5nLnNsaWNlKG1hcFN0YXJ0KS5tYXAodGFibGVTdGFydCArIHBvcyksXG4gICAgICAgIG51bGwsXG4gICAgICAgIHJlbW92ZUNvbFNwYW4oYXR0cnMsIGNvbCAtIG1hcC5jb2xDb3VudChwb3MpKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RhcnQgPSB0ci5tYXBwaW5nLnNsaWNlKG1hcFN0YXJ0KS5tYXAodGFibGVTdGFydCArIHBvcyk7XG4gICAgICB0ci5kZWxldGUoc3RhcnQsIHN0YXJ0ICsgY2VsbC5ub2RlU2l6ZSk7XG4gICAgfVxuICAgIHJvdyArPSBhdHRycy5yb3dzcGFuO1xuICB9XG59XG5mdW5jdGlvbiBkZWxldGVDb2x1bW4oc3RhdGUsIGRpc3BhdGNoKSB7XG4gIGlmICghaXNJblRhYmxlKHN0YXRlKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChkaXNwYXRjaCkge1xuICAgIGNvbnN0IHJlY3QgPSBzZWxlY3RlZFJlY3Qoc3RhdGUpO1xuICAgIGNvbnN0IHRyID0gc3RhdGUudHI7XG4gICAgaWYgKHJlY3QubGVmdCA9PSAwICYmIHJlY3QucmlnaHQgPT0gcmVjdC5tYXAud2lkdGgpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IHJlY3QucmlnaHQgLSAxOyA7IGktLSkge1xuICAgICAgcmVtb3ZlQ29sdW1uKHRyLCByZWN0LCBpKTtcbiAgICAgIGlmIChpID09IHJlY3QubGVmdClcbiAgICAgICAgYnJlYWs7XG4gICAgICBjb25zdCB0YWJsZSA9IHJlY3QudGFibGVTdGFydCA/IHRyLmRvYy5ub2RlQXQocmVjdC50YWJsZVN0YXJ0IC0gMSkgOiB0ci5kb2M7XG4gICAgICBpZiAoIXRhYmxlKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoXCJObyB0YWJsZSBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJlY3QudGFibGUgPSB0YWJsZTtcbiAgICAgIHJlY3QubWFwID0gVGFibGVNYXAuZ2V0KHRhYmxlKTtcbiAgICB9XG4gICAgZGlzcGF0Y2godHIpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gcm93SXNIZWFkZXIobWFwLCB0YWJsZSwgcm93KSB7XG4gIHZhciBfYTtcbiAgY29uc3QgaGVhZGVyQ2VsbCA9IHRhYmxlTm9kZVR5cGVzKHRhYmxlLnR5cGUuc2NoZW1hKS5oZWFkZXJfY2VsbDtcbiAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgbWFwLndpZHRoOyBjb2wrKylcbiAgICBpZiAoKChfYSA9IHRhYmxlLm5vZGVBdChtYXAubWFwW2NvbCArIHJvdyAqIG1hcC53aWR0aF0pKSA9PSBudWxsID8gdm9pZCAwIDogX2EudHlwZSkgIT0gaGVhZGVyQ2VsbClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBhZGRSb3codHIsIHsgbWFwLCB0YWJsZVN0YXJ0LCB0YWJsZSB9LCByb3cpIHtcbiAgdmFyIF9hO1xuICBsZXQgcm93UG9zID0gdGFibGVTdGFydDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3c7IGkrKylcbiAgICByb3dQb3MgKz0gdGFibGUuY2hpbGQoaSkubm9kZVNpemU7XG4gIGNvbnN0IGNlbGxzID0gW107XG4gIGxldCByZWZSb3cgPSByb3cgPiAwID8gLTEgOiAwO1xuICBpZiAocm93SXNIZWFkZXIobWFwLCB0YWJsZSwgcm93ICsgcmVmUm93KSlcbiAgICByZWZSb3cgPSByb3cgPT0gMCB8fCByb3cgPT0gbWFwLmhlaWdodCA/IG51bGwgOiAwO1xuICBmb3IgKGxldCBjb2wgPSAwLCBpbmRleCA9IG1hcC53aWR0aCAqIHJvdzsgY29sIDwgbWFwLndpZHRoOyBjb2wrKywgaW5kZXgrKykge1xuICAgIGlmIChyb3cgPiAwICYmIHJvdyA8IG1hcC5oZWlnaHQgJiYgbWFwLm1hcFtpbmRleF0gPT0gbWFwLm1hcFtpbmRleCAtIG1hcC53aWR0aF0pIHtcbiAgICAgIGNvbnN0IHBvcyA9IG1hcC5tYXBbaW5kZXhdO1xuICAgICAgY29uc3QgYXR0cnMgPSB0YWJsZS5ub2RlQXQocG9zKS5hdHRycztcbiAgICAgIHRyLnNldE5vZGVNYXJrdXAodGFibGVTdGFydCArIHBvcywgbnVsbCwge1xuICAgICAgICAuLi5hdHRycyxcbiAgICAgICAgcm93c3BhbjogYXR0cnMucm93c3BhbiArIDFcbiAgICAgIH0pO1xuICAgICAgY29sICs9IGF0dHJzLmNvbHNwYW4gLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eXBlID0gcmVmUm93ID09IG51bGwgPyB0YWJsZU5vZGVUeXBlcyh0YWJsZS50eXBlLnNjaGVtYSkuY2VsbCA6IChfYSA9IHRhYmxlLm5vZGVBdChtYXAubWFwW2luZGV4ICsgcmVmUm93ICogbWFwLndpZHRoXSkpID09IG51bGwgPyB2b2lkIDAgOiBfYS50eXBlO1xuICAgICAgY29uc3Qgbm9kZSA9IHR5cGUgPT0gbnVsbCA/IHZvaWQgMCA6IHR5cGUuY3JlYXRlQW5kRmlsbCgpO1xuICAgICAgaWYgKG5vZGUpXG4gICAgICAgIGNlbGxzLnB1c2gobm9kZSk7XG4gICAgfVxuICB9XG4gIHRyLmluc2VydChyb3dQb3MsIHRhYmxlTm9kZVR5cGVzKHRhYmxlLnR5cGUuc2NoZW1hKS5yb3cuY3JlYXRlKG51bGwsIGNlbGxzKSk7XG4gIHJldHVybiB0cjtcbn1cbmZ1bmN0aW9uIGFkZFJvd0JlZm9yZShzdGF0ZSwgZGlzcGF0Y2gpIHtcbiAgaWYgKCFpc0luVGFibGUoc3RhdGUpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKGRpc3BhdGNoKSB7XG4gICAgY29uc3QgcmVjdCA9IHNlbGVjdGVkUmVjdChzdGF0ZSk7XG4gICAgZGlzcGF0Y2goYWRkUm93KHN0YXRlLnRyLCByZWN0LCByZWN0LnRvcCkpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gYWRkUm93QWZ0ZXIoc3RhdGUsIGRpc3BhdGNoKSB7XG4gIGlmICghaXNJblRhYmxlKHN0YXRlKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChkaXNwYXRjaCkge1xuICAgIGNvbnN0IHJlY3QgPSBzZWxlY3RlZFJlY3Qoc3RhdGUpO1xuICAgIGRpc3BhdGNoKGFkZFJvdyhzdGF0ZS50ciwgcmVjdCwgcmVjdC5ib3R0b20pKTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlbW92ZVJvdyh0ciwgeyBtYXAsIHRhYmxlLCB0YWJsZVN0YXJ0IH0sIHJvdykge1xuICBsZXQgcm93UG9zID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3c7IGkrKylcbiAgICByb3dQb3MgKz0gdGFibGUuY2hpbGQoaSkubm9kZVNpemU7XG4gIGNvbnN0IG5leHRSb3cgPSByb3dQb3MgKyB0YWJsZS5jaGlsZChyb3cpLm5vZGVTaXplO1xuICBjb25zdCBtYXBGcm9tID0gdHIubWFwcGluZy5tYXBzLmxlbmd0aDtcbiAgdHIuZGVsZXRlKHJvd1BvcyArIHRhYmxlU3RhcnQsIG5leHRSb3cgKyB0YWJsZVN0YXJ0KTtcbiAgZm9yIChsZXQgY29sID0gMCwgaW5kZXggPSByb3cgKiBtYXAud2lkdGg7IGNvbCA8IG1hcC53aWR0aDsgY29sKyssIGluZGV4KyspIHtcbiAgICBjb25zdCBwb3MgPSBtYXAubWFwW2luZGV4XTtcbiAgICBpZiAocm93ID4gMCAmJiBwb3MgPT0gbWFwLm1hcFtpbmRleCAtIG1hcC53aWR0aF0pIHtcbiAgICAgIGNvbnN0IGF0dHJzID0gdGFibGUubm9kZUF0KHBvcykuYXR0cnM7XG4gICAgICB0ci5zZXROb2RlTWFya3VwKHRyLm1hcHBpbmcuc2xpY2UobWFwRnJvbSkubWFwKHBvcyArIHRhYmxlU3RhcnQpLCBudWxsLCB7XG4gICAgICAgIC4uLmF0dHJzLFxuICAgICAgICByb3dzcGFuOiBhdHRycy5yb3dzcGFuIC0gMVxuICAgICAgfSk7XG4gICAgICBjb2wgKz0gYXR0cnMuY29sc3BhbiAtIDE7XG4gICAgfSBlbHNlIGlmIChyb3cgPCBtYXAud2lkdGggJiYgcG9zID09IG1hcC5tYXBbaW5kZXggKyBtYXAud2lkdGhdKSB7XG4gICAgICBjb25zdCBjZWxsID0gdGFibGUubm9kZUF0KHBvcyk7XG4gICAgICBjb25zdCBhdHRycyA9IGNlbGwuYXR0cnM7XG4gICAgICBjb25zdCBjb3B5ID0gY2VsbC50eXBlLmNyZWF0ZShcbiAgICAgICAgeyAuLi5hdHRycywgcm93c3BhbjogY2VsbC5hdHRycy5yb3dzcGFuIC0gMSB9LFxuICAgICAgICBjZWxsLmNvbnRlbnRcbiAgICAgICk7XG4gICAgICBjb25zdCBuZXdQb3MgPSBtYXAucG9zaXRpb25BdChyb3cgKyAxLCBjb2wsIHRhYmxlKTtcbiAgICAgIHRyLmluc2VydCh0ci5tYXBwaW5nLnNsaWNlKG1hcEZyb20pLm1hcCh0YWJsZVN0YXJ0ICsgbmV3UG9zKSwgY29weSk7XG4gICAgICBjb2wgKz0gYXR0cnMuY29sc3BhbiAtIDE7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkZWxldGVSb3coc3RhdGUsIGRpc3BhdGNoKSB7XG4gIGlmICghaXNJblRhYmxlKHN0YXRlKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChkaXNwYXRjaCkge1xuICAgIGNvbnN0IHJlY3QgPSBzZWxlY3RlZFJlY3Qoc3RhdGUpLCB0ciA9IHN0YXRlLnRyO1xuICAgIGlmIChyZWN0LnRvcCA9PSAwICYmIHJlY3QuYm90dG9tID09IHJlY3QubWFwLmhlaWdodClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gcmVjdC5ib3R0b20gLSAxOyA7IGktLSkge1xuICAgICAgcmVtb3ZlUm93KHRyLCByZWN0LCBpKTtcbiAgICAgIGlmIChpID09IHJlY3QudG9wKVxuICAgICAgICBicmVhaztcbiAgICAgIGNvbnN0IHRhYmxlID0gcmVjdC50YWJsZVN0YXJ0ID8gdHIuZG9jLm5vZGVBdChyZWN0LnRhYmxlU3RhcnQgLSAxKSA6IHRyLmRvYztcbiAgICAgIGlmICghdGFibGUpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihcIk5vIHRhYmxlIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmVjdC50YWJsZSA9IHRhYmxlO1xuICAgICAgcmVjdC5tYXAgPSBUYWJsZU1hcC5nZXQocmVjdC50YWJsZSk7XG4gICAgfVxuICAgIGRpc3BhdGNoKHRyKTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGlzRW1wdHkoY2VsbCkge1xuICBjb25zdCBjID0gY2VsbC5jb250ZW50O1xuICByZXR1cm4gYy5jaGlsZENvdW50ID09IDEgJiYgYy5jaGlsZCgwKS5pc1RleHRibG9jayAmJiBjLmNoaWxkKDApLmNoaWxkQ291bnQgPT0gMDtcbn1cbmZ1bmN0aW9uIGNlbGxzT3ZlcmxhcFJlY3RhbmdsZSh7IHdpZHRoLCBoZWlnaHQsIG1hcCB9LCByZWN0KSB7XG4gIGxldCBpbmRleFRvcCA9IHJlY3QudG9wICogd2lkdGggKyByZWN0LmxlZnQsIGluZGV4TGVmdCA9IGluZGV4VG9wO1xuICBsZXQgaW5kZXhCb3R0b20gPSAocmVjdC5ib3R0b20gLSAxKSAqIHdpZHRoICsgcmVjdC5sZWZ0LCBpbmRleFJpZ2h0ID0gaW5kZXhUb3AgKyAocmVjdC5yaWdodCAtIHJlY3QubGVmdCAtIDEpO1xuICBmb3IgKGxldCBpID0gcmVjdC50b3A7IGkgPCByZWN0LmJvdHRvbTsgaSsrKSB7XG4gICAgaWYgKHJlY3QubGVmdCA+IDAgJiYgbWFwW2luZGV4TGVmdF0gPT0gbWFwW2luZGV4TGVmdCAtIDFdIHx8IHJlY3QucmlnaHQgPCB3aWR0aCAmJiBtYXBbaW5kZXhSaWdodF0gPT0gbWFwW2luZGV4UmlnaHQgKyAxXSlcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGluZGV4TGVmdCArPSB3aWR0aDtcbiAgICBpbmRleFJpZ2h0ICs9IHdpZHRoO1xuICB9XG4gIGZvciAobGV0IGkgPSByZWN0LmxlZnQ7IGkgPCByZWN0LnJpZ2h0OyBpKyspIHtcbiAgICBpZiAocmVjdC50b3AgPiAwICYmIG1hcFtpbmRleFRvcF0gPT0gbWFwW2luZGV4VG9wIC0gd2lkdGhdIHx8IHJlY3QuYm90dG9tIDwgaGVpZ2h0ICYmIG1hcFtpbmRleEJvdHRvbV0gPT0gbWFwW2luZGV4Qm90dG9tICsgd2lkdGhdKVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgaW5kZXhUb3ArKztcbiAgICBpbmRleEJvdHRvbSsrO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIG1lcmdlQ2VsbHMoc3RhdGUsIGRpc3BhdGNoKSB7XG4gIGNvbnN0IHNlbCA9IHN0YXRlLnNlbGVjdGlvbjtcbiAgaWYgKCEoc2VsIGluc3RhbmNlb2YgQ2VsbFNlbGVjdGlvbikgfHwgc2VsLiRhbmNob3JDZWxsLnBvcyA9PSBzZWwuJGhlYWRDZWxsLnBvcylcbiAgICByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHJlY3QgPSBzZWxlY3RlZFJlY3Qoc3RhdGUpLCB7IG1hcCB9ID0gcmVjdDtcbiAgaWYgKGNlbGxzT3ZlcmxhcFJlY3RhbmdsZShtYXAsIHJlY3QpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKGRpc3BhdGNoKSB7XG4gICAgY29uc3QgdHIgPSBzdGF0ZS50cjtcbiAgICBjb25zdCBzZWVuID0ge307XG4gICAgbGV0IGNvbnRlbnQgPSBGcmFnbWVudDQuZW1wdHk7XG4gICAgbGV0IG1lcmdlZFBvcztcbiAgICBsZXQgbWVyZ2VkQ2VsbDtcbiAgICBmb3IgKGxldCByb3cgPSByZWN0LnRvcDsgcm93IDwgcmVjdC5ib3R0b207IHJvdysrKSB7XG4gICAgICBmb3IgKGxldCBjb2wgPSByZWN0LmxlZnQ7IGNvbCA8IHJlY3QucmlnaHQ7IGNvbCsrKSB7XG4gICAgICAgIGNvbnN0IGNlbGxQb3MgPSBtYXAubWFwW3JvdyAqIG1hcC53aWR0aCArIGNvbF07XG4gICAgICAgIGNvbnN0IGNlbGwgPSByZWN0LnRhYmxlLm5vZGVBdChjZWxsUG9zKTtcbiAgICAgICAgaWYgKHNlZW5bY2VsbFBvc10gfHwgIWNlbGwpXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIHNlZW5bY2VsbFBvc10gPSB0cnVlO1xuICAgICAgICBpZiAobWVyZ2VkUG9zID09IG51bGwpIHtcbiAgICAgICAgICBtZXJnZWRQb3MgPSBjZWxsUG9zO1xuICAgICAgICAgIG1lcmdlZENlbGwgPSBjZWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghaXNFbXB0eShjZWxsKSlcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LmFwcGVuZChjZWxsLmNvbnRlbnQpO1xuICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRyLm1hcHBpbmcubWFwKGNlbGxQb3MgKyByZWN0LnRhYmxlU3RhcnQpO1xuICAgICAgICAgIHRyLmRlbGV0ZShtYXBwZWQsIG1hcHBlZCArIGNlbGwubm9kZVNpemUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtZXJnZWRQb3MgPT0gbnVsbCB8fCBtZXJnZWRDZWxsID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0ci5zZXROb2RlTWFya3VwKG1lcmdlZFBvcyArIHJlY3QudGFibGVTdGFydCwgbnVsbCwge1xuICAgICAgLi4uYWRkQ29sU3BhbihcbiAgICAgICAgbWVyZ2VkQ2VsbC5hdHRycyxcbiAgICAgICAgbWVyZ2VkQ2VsbC5hdHRycy5jb2xzcGFuLFxuICAgICAgICByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0IC0gbWVyZ2VkQ2VsbC5hdHRycy5jb2xzcGFuXG4gICAgICApLFxuICAgICAgcm93c3BhbjogcmVjdC5ib3R0b20gLSByZWN0LnRvcFxuICAgIH0pO1xuICAgIGlmIChjb250ZW50LnNpemUpIHtcbiAgICAgIGNvbnN0IGVuZCA9IG1lcmdlZFBvcyArIDEgKyBtZXJnZWRDZWxsLmNvbnRlbnQuc2l6ZTtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaXNFbXB0eShtZXJnZWRDZWxsKSA/IG1lcmdlZFBvcyArIDEgOiBlbmQ7XG4gICAgICB0ci5yZXBsYWNlV2l0aChzdGFydCArIHJlY3QudGFibGVTdGFydCwgZW5kICsgcmVjdC50YWJsZVN0YXJ0LCBjb250ZW50KTtcbiAgICB9XG4gICAgdHIuc2V0U2VsZWN0aW9uKFxuICAgICAgbmV3IENlbGxTZWxlY3Rpb24odHIuZG9jLnJlc29sdmUobWVyZ2VkUG9zICsgcmVjdC50YWJsZVN0YXJ0KSlcbiAgICApO1xuICAgIGRpc3BhdGNoKHRyKTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHNwbGl0Q2VsbChzdGF0ZSwgZGlzcGF0Y2gpIHtcbiAgY29uc3Qgbm9kZVR5cGVzID0gdGFibGVOb2RlVHlwZXMoc3RhdGUuc2NoZW1hKTtcbiAgcmV0dXJuIHNwbGl0Q2VsbFdpdGhUeXBlKCh7IG5vZGUgfSkgPT4ge1xuICAgIHJldHVybiBub2RlVHlwZXNbbm9kZS50eXBlLnNwZWMudGFibGVSb2xlXTtcbiAgfSkoc3RhdGUsIGRpc3BhdGNoKTtcbn1cbmZ1bmN0aW9uIHNwbGl0Q2VsbFdpdGhUeXBlKGdldENlbGxUeXBlKSB7XG4gIHJldHVybiAoc3RhdGUsIGRpc3BhdGNoKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHNlbCA9IHN0YXRlLnNlbGVjdGlvbjtcbiAgICBsZXQgY2VsbE5vZGU7XG4gICAgbGV0IGNlbGxQb3M7XG4gICAgaWYgKCEoc2VsIGluc3RhbmNlb2YgQ2VsbFNlbGVjdGlvbikpIHtcbiAgICAgIGNlbGxOb2RlID0gY2VsbFdyYXBwaW5nKHNlbC4kZnJvbSk7XG4gICAgICBpZiAoIWNlbGxOb2RlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBjZWxsUG9zID0gKF9hID0gY2VsbEFyb3VuZChzZWwuJGZyb20pKSA9PSBudWxsID8gdm9pZCAwIDogX2EucG9zO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc2VsLiRhbmNob3JDZWxsLnBvcyAhPSBzZWwuJGhlYWRDZWxsLnBvcylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY2VsbE5vZGUgPSBzZWwuJGFuY2hvckNlbGwubm9kZUFmdGVyO1xuICAgICAgY2VsbFBvcyA9IHNlbC4kYW5jaG9yQ2VsbC5wb3M7XG4gICAgfVxuICAgIGlmIChjZWxsTm9kZSA9PSBudWxsIHx8IGNlbGxQb3MgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoY2VsbE5vZGUuYXR0cnMuY29sc3BhbiA9PSAxICYmIGNlbGxOb2RlLmF0dHJzLnJvd3NwYW4gPT0gMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZGlzcGF0Y2gpIHtcbiAgICAgIGxldCBiYXNlQXR0cnMgPSBjZWxsTm9kZS5hdHRycztcbiAgICAgIGNvbnN0IGF0dHJzID0gW107XG4gICAgICBjb25zdCBjb2x3aWR0aCA9IGJhc2VBdHRycy5jb2x3aWR0aDtcbiAgICAgIGlmIChiYXNlQXR0cnMucm93c3BhbiA+IDEpXG4gICAgICAgIGJhc2VBdHRycyA9IHsgLi4uYmFzZUF0dHJzLCByb3dzcGFuOiAxIH07XG4gICAgICBpZiAoYmFzZUF0dHJzLmNvbHNwYW4gPiAxKVxuICAgICAgICBiYXNlQXR0cnMgPSB7IC4uLmJhc2VBdHRycywgY29sc3BhbjogMSB9O1xuICAgICAgY29uc3QgcmVjdCA9IHNlbGVjdGVkUmVjdChzdGF0ZSksIHRyID0gc3RhdGUudHI7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKylcbiAgICAgICAgYXR0cnMucHVzaChcbiAgICAgICAgICBjb2x3aWR0aCA/IHtcbiAgICAgICAgICAgIC4uLmJhc2VBdHRycyxcbiAgICAgICAgICAgIGNvbHdpZHRoOiBjb2x3aWR0aCAmJiBjb2x3aWR0aFtpXSA/IFtjb2x3aWR0aFtpXV0gOiBudWxsXG4gICAgICAgICAgfSA6IGJhc2VBdHRyc1xuICAgICAgICApO1xuICAgICAgbGV0IGxhc3RDZWxsO1xuICAgICAgZm9yIChsZXQgcm93ID0gcmVjdC50b3A7IHJvdyA8IHJlY3QuYm90dG9tOyByb3crKykge1xuICAgICAgICBsZXQgcG9zID0gcmVjdC5tYXAucG9zaXRpb25BdChyb3csIHJlY3QubGVmdCwgcmVjdC50YWJsZSk7XG4gICAgICAgIGlmIChyb3cgPT0gcmVjdC50b3ApXG4gICAgICAgICAgcG9zICs9IGNlbGxOb2RlLm5vZGVTaXplO1xuICAgICAgICBmb3IgKGxldCBjb2wgPSByZWN0LmxlZnQsIGkgPSAwOyBjb2wgPCByZWN0LnJpZ2h0OyBjb2wrKywgaSsrKSB7XG4gICAgICAgICAgaWYgKGNvbCA9PSByZWN0LmxlZnQgJiYgcm93ID09IHJlY3QudG9wKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgdHIuaW5zZXJ0KFxuICAgICAgICAgICAgbGFzdENlbGwgPSB0ci5tYXBwaW5nLm1hcChwb3MgKyByZWN0LnRhYmxlU3RhcnQsIDEpLFxuICAgICAgICAgICAgZ2V0Q2VsbFR5cGUoeyBub2RlOiBjZWxsTm9kZSwgcm93LCBjb2wgfSkuY3JlYXRlQW5kRmlsbChhdHRyc1tpXSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0ci5zZXROb2RlTWFya3VwKFxuICAgICAgICBjZWxsUG9zLFxuICAgICAgICBnZXRDZWxsVHlwZSh7IG5vZGU6IGNlbGxOb2RlLCByb3c6IHJlY3QudG9wLCBjb2w6IHJlY3QubGVmdCB9KSxcbiAgICAgICAgYXR0cnNbMF1cbiAgICAgICk7XG4gICAgICBpZiAoc2VsIGluc3RhbmNlb2YgQ2VsbFNlbGVjdGlvbilcbiAgICAgICAgdHIuc2V0U2VsZWN0aW9uKFxuICAgICAgICAgIG5ldyBDZWxsU2VsZWN0aW9uKFxuICAgICAgICAgICAgdHIuZG9jLnJlc29sdmUoc2VsLiRhbmNob3JDZWxsLnBvcyksXG4gICAgICAgICAgICBsYXN0Q2VsbCA/IHRyLmRvYy5yZXNvbHZlKGxhc3RDZWxsKSA6IHZvaWQgMFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIGRpc3BhdGNoKHRyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59XG5mdW5jdGlvbiBzZXRDZWxsQXR0cihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oc3RhdGUsIGRpc3BhdGNoKSB7XG4gICAgaWYgKCFpc0luVGFibGUoc3RhdGUpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0ICRjZWxsID0gc2VsZWN0aW9uQ2VsbChzdGF0ZSk7XG4gICAgaWYgKCRjZWxsLm5vZGVBZnRlci5hdHRyc1tuYW1lXSA9PT0gdmFsdWUpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGRpc3BhdGNoKSB7XG4gICAgICBjb25zdCB0ciA9IHN0YXRlLnRyO1xuICAgICAgaWYgKHN0YXRlLnNlbGVjdGlvbiBpbnN0YW5jZW9mIENlbGxTZWxlY3Rpb24pXG4gICAgICAgIHN0YXRlLnNlbGVjdGlvbi5mb3JFYWNoQ2VsbCgobm9kZSwgcG9zKSA9PiB7XG4gICAgICAgICAgaWYgKG5vZGUuYXR0cnNbbmFtZV0gIT09IHZhbHVlKVxuICAgICAgICAgICAgdHIuc2V0Tm9kZU1hcmt1cChwb3MsIG51bGwsIHtcbiAgICAgICAgICAgICAgLi4ubm9kZS5hdHRycyxcbiAgICAgICAgICAgICAgW25hbWVdOiB2YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgZWxzZVxuICAgICAgICB0ci5zZXROb2RlTWFya3VwKCRjZWxsLnBvcywgbnVsbCwge1xuICAgICAgICAgIC4uLiRjZWxsLm5vZGVBZnRlci5hdHRycyxcbiAgICAgICAgICBbbmFtZV06IHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgZGlzcGF0Y2godHIpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGRlcHJlY2F0ZWRfdG9nZ2xlSGVhZGVyKHR5cGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0YXRlLCBkaXNwYXRjaCkge1xuICAgIGlmICghaXNJblRhYmxlKHN0YXRlKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZGlzcGF0Y2gpIHtcbiAgICAgIGNvbnN0IHR5cGVzID0gdGFibGVOb2RlVHlwZXMoc3RhdGUuc2NoZW1hKTtcbiAgICAgIGNvbnN0IHJlY3QgPSBzZWxlY3RlZFJlY3Qoc3RhdGUpLCB0ciA9IHN0YXRlLnRyO1xuICAgICAgY29uc3QgY2VsbHMgPSByZWN0Lm1hcC5jZWxsc0luUmVjdChcbiAgICAgICAgdHlwZSA9PSBcImNvbHVtblwiID8ge1xuICAgICAgICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgcmlnaHQ6IHJlY3QucmlnaHQsXG4gICAgICAgICAgYm90dG9tOiByZWN0Lm1hcC5oZWlnaHRcbiAgICAgICAgfSA6IHR5cGUgPT0gXCJyb3dcIiA/IHtcbiAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgIHRvcDogcmVjdC50b3AsXG4gICAgICAgICAgcmlnaHQ6IHJlY3QubWFwLndpZHRoLFxuICAgICAgICAgIGJvdHRvbTogcmVjdC5ib3R0b21cbiAgICAgICAgfSA6IHJlY3RcbiAgICAgICk7XG4gICAgICBjb25zdCBub2RlcyA9IGNlbGxzLm1hcCgocG9zKSA9PiByZWN0LnRhYmxlLm5vZGVBdChwb3MpKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspXG4gICAgICAgIGlmIChub2Rlc1tpXS50eXBlID09IHR5cGVzLmhlYWRlcl9jZWxsKVxuICAgICAgICAgIHRyLnNldE5vZGVNYXJrdXAoXG4gICAgICAgICAgICByZWN0LnRhYmxlU3RhcnQgKyBjZWxsc1tpXSxcbiAgICAgICAgICAgIHR5cGVzLmNlbGwsXG4gICAgICAgICAgICBub2Rlc1tpXS5hdHRyc1xuICAgICAgICAgICk7XG4gICAgICBpZiAodHIuc3RlcHMubGVuZ3RoID09IDApXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgdHIuc2V0Tm9kZU1hcmt1cChcbiAgICAgICAgICAgIHJlY3QudGFibGVTdGFydCArIGNlbGxzW2ldLFxuICAgICAgICAgICAgdHlwZXMuaGVhZGVyX2NlbGwsXG4gICAgICAgICAgICBub2Rlc1tpXS5hdHRyc1xuICAgICAgICAgICk7XG4gICAgICBkaXNwYXRjaCh0cik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuZnVuY3Rpb24gaXNIZWFkZXJFbmFibGVkQnlUeXBlKHR5cGUsIHJlY3QsIHR5cGVzKSB7XG4gIGNvbnN0IGNlbGxQb3NpdGlvbnMgPSByZWN0Lm1hcC5jZWxsc0luUmVjdCh7XG4gICAgbGVmdDogMCxcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IHR5cGUgPT0gXCJyb3dcIiA/IHJlY3QubWFwLndpZHRoIDogMSxcbiAgICBib3R0b206IHR5cGUgPT0gXCJjb2x1bW5cIiA/IHJlY3QubWFwLmhlaWdodCA6IDFcbiAgfSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2VsbFBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNlbGwgPSByZWN0LnRhYmxlLm5vZGVBdChjZWxsUG9zaXRpb25zW2ldKTtcbiAgICBpZiAoY2VsbCAmJiBjZWxsLnR5cGUgIT09IHR5cGVzLmhlYWRlcl9jZWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gdG9nZ2xlSGVhZGVyKHR5cGUsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwgeyB1c2VEZXByZWNhdGVkTG9naWM6IGZhbHNlIH07XG4gIGlmIChvcHRpb25zLnVzZURlcHJlY2F0ZWRMb2dpYylcbiAgICByZXR1cm4gZGVwcmVjYXRlZF90b2dnbGVIZWFkZXIodHlwZSk7XG4gIHJldHVybiBmdW5jdGlvbihzdGF0ZSwgZGlzcGF0Y2gpIHtcbiAgICBpZiAoIWlzSW5UYWJsZShzdGF0ZSkpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGRpc3BhdGNoKSB7XG4gICAgICBjb25zdCB0eXBlcyA9IHRhYmxlTm9kZVR5cGVzKHN0YXRlLnNjaGVtYSk7XG4gICAgICBjb25zdCByZWN0ID0gc2VsZWN0ZWRSZWN0KHN0YXRlKSwgdHIgPSBzdGF0ZS50cjtcbiAgICAgIGNvbnN0IGlzSGVhZGVyUm93RW5hYmxlZCA9IGlzSGVhZGVyRW5hYmxlZEJ5VHlwZShcInJvd1wiLCByZWN0LCB0eXBlcyk7XG4gICAgICBjb25zdCBpc0hlYWRlckNvbHVtbkVuYWJsZWQgPSBpc0hlYWRlckVuYWJsZWRCeVR5cGUoXG4gICAgICAgIFwiY29sdW1uXCIsXG4gICAgICAgIHJlY3QsXG4gICAgICAgIHR5cGVzXG4gICAgICApO1xuICAgICAgY29uc3QgaXNIZWFkZXJFbmFibGVkID0gdHlwZSA9PT0gXCJjb2x1bW5cIiA/IGlzSGVhZGVyUm93RW5hYmxlZCA6IHR5cGUgPT09IFwicm93XCIgPyBpc0hlYWRlckNvbHVtbkVuYWJsZWQgOiBmYWxzZTtcbiAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0c0F0ID0gaXNIZWFkZXJFbmFibGVkID8gMSA6IDA7XG4gICAgICBjb25zdCBjZWxsc1JlY3QgPSB0eXBlID09IFwiY29sdW1uXCIgPyB7XG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIHRvcDogc2VsZWN0aW9uU3RhcnRzQXQsXG4gICAgICAgIHJpZ2h0OiAxLFxuICAgICAgICBib3R0b206IHJlY3QubWFwLmhlaWdodFxuICAgICAgfSA6IHR5cGUgPT0gXCJyb3dcIiA/IHtcbiAgICAgICAgbGVmdDogc2VsZWN0aW9uU3RhcnRzQXQsXG4gICAgICAgIHRvcDogMCxcbiAgICAgICAgcmlnaHQ6IHJlY3QubWFwLndpZHRoLFxuICAgICAgICBib3R0b206IDFcbiAgICAgIH0gOiByZWN0O1xuICAgICAgY29uc3QgbmV3VHlwZSA9IHR5cGUgPT0gXCJjb2x1bW5cIiA/IGlzSGVhZGVyQ29sdW1uRW5hYmxlZCA/IHR5cGVzLmNlbGwgOiB0eXBlcy5oZWFkZXJfY2VsbCA6IHR5cGUgPT0gXCJyb3dcIiA/IGlzSGVhZGVyUm93RW5hYmxlZCA/IHR5cGVzLmNlbGwgOiB0eXBlcy5oZWFkZXJfY2VsbCA6IHR5cGVzLmNlbGw7XG4gICAgICByZWN0Lm1hcC5jZWxsc0luUmVjdChjZWxsc1JlY3QpLmZvckVhY2goKHJlbGF0aXZlQ2VsbFBvcykgPT4ge1xuICAgICAgICBjb25zdCBjZWxsUG9zID0gcmVsYXRpdmVDZWxsUG9zICsgcmVjdC50YWJsZVN0YXJ0O1xuICAgICAgICBjb25zdCBjZWxsID0gdHIuZG9jLm5vZGVBdChjZWxsUG9zKTtcbiAgICAgICAgaWYgKGNlbGwpIHtcbiAgICAgICAgICB0ci5zZXROb2RlTWFya3VwKGNlbGxQb3MsIG5ld1R5cGUsIGNlbGwuYXR0cnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGRpc3BhdGNoKHRyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59XG52YXIgdG9nZ2xlSGVhZGVyUm93ID0gdG9nZ2xlSGVhZGVyKFwicm93XCIsIHtcbiAgdXNlRGVwcmVjYXRlZExvZ2ljOiB0cnVlXG59KTtcbnZhciB0b2dnbGVIZWFkZXJDb2x1bW4gPSB0b2dnbGVIZWFkZXIoXCJjb2x1bW5cIiwge1xuICB1c2VEZXByZWNhdGVkTG9naWM6IHRydWVcbn0pO1xudmFyIHRvZ2dsZUhlYWRlckNlbGwgPSB0b2dnbGVIZWFkZXIoXCJjZWxsXCIsIHtcbiAgdXNlRGVwcmVjYXRlZExvZ2ljOiB0cnVlXG59KTtcbmZ1bmN0aW9uIGZpbmROZXh0Q2VsbCgkY2VsbCwgZGlyKSB7XG4gIGlmIChkaXIgPCAwKSB7XG4gICAgY29uc3QgYmVmb3JlID0gJGNlbGwubm9kZUJlZm9yZTtcbiAgICBpZiAoYmVmb3JlKVxuICAgICAgcmV0dXJuICRjZWxsLnBvcyAtIGJlZm9yZS5ub2RlU2l6ZTtcbiAgICBmb3IgKGxldCByb3cgPSAkY2VsbC5pbmRleCgtMSkgLSAxLCByb3dFbmQgPSAkY2VsbC5iZWZvcmUoKTsgcm93ID49IDA7IHJvdy0tKSB7XG4gICAgICBjb25zdCByb3dOb2RlID0gJGNlbGwubm9kZSgtMSkuY2hpbGQocm93KTtcbiAgICAgIGNvbnN0IGxhc3RDaGlsZCA9IHJvd05vZGUubGFzdENoaWxkO1xuICAgICAgaWYgKGxhc3RDaGlsZCkge1xuICAgICAgICByZXR1cm4gcm93RW5kIC0gMSAtIGxhc3RDaGlsZC5ub2RlU2l6ZTtcbiAgICAgIH1cbiAgICAgIHJvd0VuZCAtPSByb3dOb2RlLm5vZGVTaXplO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoJGNlbGwuaW5kZXgoKSA8ICRjZWxsLnBhcmVudC5jaGlsZENvdW50IC0gMSkge1xuICAgICAgcmV0dXJuICRjZWxsLnBvcyArICRjZWxsLm5vZGVBZnRlci5ub2RlU2l6ZTtcbiAgICB9XG4gICAgY29uc3QgdGFibGUgPSAkY2VsbC5ub2RlKC0xKTtcbiAgICBmb3IgKGxldCByb3cgPSAkY2VsbC5pbmRleEFmdGVyKC0xKSwgcm93U3RhcnQgPSAkY2VsbC5hZnRlcigpOyByb3cgPCB0YWJsZS5jaGlsZENvdW50OyByb3crKykge1xuICAgICAgY29uc3Qgcm93Tm9kZSA9IHRhYmxlLmNoaWxkKHJvdyk7XG4gICAgICBpZiAocm93Tm9kZS5jaGlsZENvdW50KVxuICAgICAgICByZXR1cm4gcm93U3RhcnQgKyAxO1xuICAgICAgcm93U3RhcnQgKz0gcm93Tm9kZS5ub2RlU2l6ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnb1RvTmV4dENlbGwoZGlyZWN0aW9uKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdGF0ZSwgZGlzcGF0Y2gpIHtcbiAgICBpZiAoIWlzSW5UYWJsZShzdGF0ZSkpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgY2VsbCA9IGZpbmROZXh0Q2VsbChzZWxlY3Rpb25DZWxsKHN0YXRlKSwgZGlyZWN0aW9uKTtcbiAgICBpZiAoY2VsbCA9PSBudWxsKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgY29uc3QgJGNlbGwgPSBzdGF0ZS5kb2MucmVzb2x2ZShjZWxsKTtcbiAgICAgIGRpc3BhdGNoKFxuICAgICAgICBzdGF0ZS50ci5zZXRTZWxlY3Rpb24oVGV4dFNlbGVjdGlvbjMuYmV0d2VlbigkY2VsbCwgbW92ZUNlbGxGb3J3YXJkKCRjZWxsKSkpLnNjcm9sbEludG9WaWV3KClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuZnVuY3Rpb24gZGVsZXRlVGFibGUoc3RhdGUsIGRpc3BhdGNoKSB7XG4gIGNvbnN0ICRwb3MgPSBzdGF0ZS5zZWxlY3Rpb24uJGFuY2hvcjtcbiAgZm9yIChsZXQgZCA9ICRwb3MuZGVwdGg7IGQgPiAwOyBkLS0pIHtcbiAgICBjb25zdCBub2RlID0gJHBvcy5ub2RlKGQpO1xuICAgIGlmIChub2RlLnR5cGUuc3BlYy50YWJsZVJvbGUgPT0gXCJ0YWJsZVwiKSB7XG4gICAgICBpZiAoZGlzcGF0Y2gpXG4gICAgICAgIGRpc3BhdGNoKFxuICAgICAgICAgIHN0YXRlLnRyLmRlbGV0ZSgkcG9zLmJlZm9yZShkKSwgJHBvcy5hZnRlcihkKSkuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gc3JjL2luZGV4LnRzXG5mdW5jdGlvbiB0YWJsZUVkaXRpbmcoe1xuICBhbGxvd1RhYmxlTm9kZVNlbGVjdGlvbiA9IGZhbHNlXG59ID0ge30pIHtcbiAgcmV0dXJuIG5ldyBQbHVnaW4yKHtcbiAgICBrZXk6IHRhYmxlRWRpdGluZ0tleSxcbiAgICBzdGF0ZToge1xuICAgICAgaW5pdCgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LFxuICAgICAgYXBwbHkodHIsIGN1cikge1xuICAgICAgICBjb25zdCBzZXQgPSB0ci5nZXRNZXRhKHRhYmxlRWRpdGluZ0tleSk7XG4gICAgICAgIGlmIChzZXQgIT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gc2V0ID09IC0xID8gbnVsbCA6IHNldDtcbiAgICAgICAgaWYgKGN1ciA9PSBudWxsIHx8ICF0ci5kb2NDaGFuZ2VkKVxuICAgICAgICAgIHJldHVybiBjdXI7XG4gICAgICAgIGNvbnN0IHsgZGVsZXRlZCwgcG9zIH0gPSB0ci5tYXBwaW5nLm1hcFJlc3VsdChjdXIpO1xuICAgICAgICByZXR1cm4gZGVsZXRlZCA/IG51bGwgOiBwb3M7XG4gICAgICB9XG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgZGVjb3JhdGlvbnM6IGRyYXdDZWxsU2VsZWN0aW9uLFxuICAgICAgaGFuZGxlRE9NRXZlbnRzOiB7XG4gICAgICAgIG1vdXNlZG93bjogaGFuZGxlTW91c2VEb3duXG4gICAgICB9LFxuICAgICAgY3JlYXRlU2VsZWN0aW9uQmV0d2Vlbih2aWV3KSB7XG4gICAgICAgIHJldHVybiB0YWJsZUVkaXRpbmdLZXkuZ2V0U3RhdGUodmlldy5zdGF0ZSkgIT0gbnVsbCA/IHZpZXcuc3RhdGUuc2VsZWN0aW9uIDogbnVsbDtcbiAgICAgIH0sXG4gICAgICBoYW5kbGVUcmlwbGVDbGljayxcbiAgICAgIGhhbmRsZUtleURvd24sXG4gICAgICBoYW5kbGVQYXN0ZVxuICAgIH0sXG4gICAgYXBwZW5kVHJhbnNhY3Rpb24oXywgb2xkU3RhdGUsIHN0YXRlKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplU2VsZWN0aW9uKFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgZml4VGFibGVzKHN0YXRlLCBvbGRTdGF0ZSksXG4gICAgICAgIGFsbG93VGFibGVOb2RlU2VsZWN0aW9uXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG59XG5leHBvcnQge1xuICBDZWxsQm9va21hcmssXG4gIENlbGxTZWxlY3Rpb24sXG4gIFJlc2l6ZVN0YXRlLFxuICBUYWJsZU1hcCxcbiAgVGFibGVWaWV3LFxuICBjbGlwQ2VsbHMgYXMgX19jbGlwQ2VsbHMsXG4gIGluc2VydENlbGxzIGFzIF9faW5zZXJ0Q2VsbHMsXG4gIHBhc3RlZENlbGxzIGFzIF9fcGFzdGVkQ2VsbHMsXG4gIGFkZENvbFNwYW4sXG4gIGFkZENvbHVtbixcbiAgYWRkQ29sdW1uQWZ0ZXIsXG4gIGFkZENvbHVtbkJlZm9yZSxcbiAgYWRkUm93LFxuICBhZGRSb3dBZnRlcixcbiAgYWRkUm93QmVmb3JlLFxuICBjZWxsQXJvdW5kLFxuICBjb2xDb3VudCxcbiAgY29sdW1uSXNIZWFkZXIsXG4gIGNvbHVtblJlc2l6aW5nLFxuICBjb2x1bW5SZXNpemluZ1BsdWdpbktleSxcbiAgZGVsZXRlQ29sdW1uLFxuICBkZWxldGVSb3csXG4gIGRlbGV0ZVRhYmxlLFxuICBmaW5kQ2VsbCxcbiAgZml4VGFibGVzLFxuICBmaXhUYWJsZXNLZXksXG4gIGdvVG9OZXh0Q2VsbCxcbiAgaGFuZGxlUGFzdGUsXG4gIGluU2FtZVRhYmxlLFxuICBpc0luVGFibGUsXG4gIG1lcmdlQ2VsbHMsXG4gIG1vdmVDZWxsRm9yd2FyZCxcbiAgbmV4dENlbGwsXG4gIHBvaW50c0F0Q2VsbCxcbiAgcmVtb3ZlQ29sU3BhbixcbiAgcmVtb3ZlQ29sdW1uLFxuICByZW1vdmVSb3csXG4gIHJvd0lzSGVhZGVyLFxuICBzZWxlY3RlZFJlY3QsXG4gIHNlbGVjdGlvbkNlbGwsXG4gIHNldENlbGxBdHRyLFxuICBzcGxpdENlbGwsXG4gIHNwbGl0Q2VsbFdpdGhUeXBlLFxuICB0YWJsZUVkaXRpbmcsXG4gIHRhYmxlRWRpdGluZ0tleSxcbiAgdGFibGVOb2RlVHlwZXMsXG4gIHRhYmxlTm9kZXMsXG4gIHRvZ2dsZUhlYWRlcixcbiAgdG9nZ2xlSGVhZGVyQ2VsbCxcbiAgdG9nZ2xlSGVhZGVyQ29sdW1uLFxuICB0b2dnbGVIZWFkZXJSb3csXG4gIHVwZGF0ZUNvbHVtbnNPblJlc2l6ZVxufTtcbiIsImltcG9ydCB7IGZpbmRQYXJlbnROb2RlQ2xvc2VzdFRvUG9zLCBOb2RlLCBtZXJnZUF0dHJpYnV0ZXMsIGNhbGxPclJldHVybiwgZ2V0RXh0ZW5zaW9uRmllbGQgfSBmcm9tICdAdGlwdGFwL2NvcmUnO1xuaW1wb3J0IHsgVGV4dFNlbGVjdGlvbiB9IGZyb20gJ0B0aXB0YXAvcG0vc3RhdGUnO1xuaW1wb3J0IHsgQ2VsbFNlbGVjdGlvbiwgYWRkQ29sdW1uQmVmb3JlLCBhZGRDb2x1bW5BZnRlciwgZGVsZXRlQ29sdW1uLCBhZGRSb3dCZWZvcmUsIGFkZFJvd0FmdGVyLCBkZWxldGVSb3csIGRlbGV0ZVRhYmxlLCBtZXJnZUNlbGxzLCBzcGxpdENlbGwsIHRvZ2dsZUhlYWRlciwgdG9nZ2xlSGVhZGVyQ2VsbCwgc2V0Q2VsbEF0dHIsIGdvVG9OZXh0Q2VsbCwgZml4VGFibGVzLCBjb2x1bW5SZXNpemluZywgdGFibGVFZGl0aW5nIH0gZnJvbSAnQHRpcHRhcC9wbS90YWJsZXMnO1xuXG5mdW5jdGlvbiB1cGRhdGVDb2x1bW5zKG5vZGUsIGNvbGdyb3VwLCB0YWJsZSwgY2VsbE1pbldpZHRoLCBvdmVycmlkZUNvbCwgb3ZlcnJpZGVWYWx1ZSkge1xyXG4gICAgbGV0IHRvdGFsV2lkdGggPSAwO1xyXG4gICAgbGV0IGZpeGVkV2lkdGggPSB0cnVlO1xyXG4gICAgbGV0IG5leHRET00gPSBjb2xncm91cC5maXJzdENoaWxkO1xyXG4gICAgY29uc3Qgcm93ID0gbm9kZS5maXJzdENoaWxkO1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIGNvbCA9IDA7IGkgPCByb3cuY2hpbGRDb3VudDsgaSArPSAxKSB7XHJcbiAgICAgICAgY29uc3QgeyBjb2xzcGFuLCBjb2x3aWR0aCB9ID0gcm93LmNoaWxkKGkpLmF0dHJzO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sc3BhbjsgaiArPSAxLCBjb2wgKz0gMSkge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNXaWR0aCA9IG92ZXJyaWRlQ29sID09PSBjb2wgPyBvdmVycmlkZVZhbHVlIDogY29sd2lkdGggJiYgY29sd2lkdGhbal07XHJcbiAgICAgICAgICAgIGNvbnN0IGNzc1dpZHRoID0gaGFzV2lkdGggPyBgJHtoYXNXaWR0aH1weGAgOiAnJztcclxuICAgICAgICAgICAgdG90YWxXaWR0aCArPSBoYXNXaWR0aCB8fCBjZWxsTWluV2lkdGg7XHJcbiAgICAgICAgICAgIGlmICghaGFzV2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIGZpeGVkV2lkdGggPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIW5leHRET00pIHtcclxuICAgICAgICAgICAgICAgIGNvbGdyb3VwLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NvbCcpKS5zdHlsZS53aWR0aCA9IGNzc1dpZHRoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRET00uc3R5bGUud2lkdGggIT09IGNzc1dpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dERPTS5zdHlsZS53aWR0aCA9IGNzc1dpZHRoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbmV4dERPTSA9IG5leHRET00ubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB3aGlsZSAobmV4dERPTSkge1xyXG4gICAgICAgIGNvbnN0IGFmdGVyID0gbmV4dERPTS5uZXh0U2libGluZztcclxuICAgICAgICBuZXh0RE9NLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobmV4dERPTSk7XHJcbiAgICAgICAgbmV4dERPTSA9IGFmdGVyO1xyXG4gICAgfVxyXG4gICAgaWYgKGZpeGVkV2lkdGgpIHtcclxuICAgICAgICB0YWJsZS5zdHlsZS53aWR0aCA9IGAke3RvdGFsV2lkdGh9cHhgO1xyXG4gICAgICAgIHRhYmxlLnN0eWxlLm1pbldpZHRoID0gJyc7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0YWJsZS5zdHlsZS53aWR0aCA9ICcnO1xyXG4gICAgICAgIHRhYmxlLnN0eWxlLm1pbldpZHRoID0gYCR7dG90YWxXaWR0aH1weGA7XHJcbiAgICB9XHJcbn1cclxuY2xhc3MgVGFibGVWaWV3IHtcclxuICAgIGNvbnN0cnVjdG9yKG5vZGUsIGNlbGxNaW5XaWR0aCkge1xyXG4gICAgICAgIHRoaXMubm9kZSA9IG5vZGU7XHJcbiAgICAgICAgdGhpcy5jZWxsTWluV2lkdGggPSBjZWxsTWluV2lkdGg7XHJcbiAgICAgICAgdGhpcy5kb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICB0aGlzLmRvbS5jbGFzc05hbWUgPSAndGFibGVXcmFwcGVyJztcclxuICAgICAgICB0aGlzLnRhYmxlID0gdGhpcy5kb20uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKSk7XHJcbiAgICAgICAgdGhpcy5jb2xncm91cCA9IHRoaXMudGFibGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY29sZ3JvdXAnKSk7XHJcbiAgICAgICAgdXBkYXRlQ29sdW1ucyhub2RlLCB0aGlzLmNvbGdyb3VwLCB0aGlzLnRhYmxlLCBjZWxsTWluV2lkdGgpO1xyXG4gICAgICAgIHRoaXMuY29udGVudERPTSA9IHRoaXMudGFibGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGJvZHknKSk7XHJcbiAgICB9XHJcbiAgICB1cGRhdGUobm9kZSkge1xyXG4gICAgICAgIGlmIChub2RlLnR5cGUgIT09IHRoaXMubm9kZS50eXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ub2RlID0gbm9kZTtcclxuICAgICAgICB1cGRhdGVDb2x1bW5zKG5vZGUsIHRoaXMuY29sZ3JvdXAsIHRoaXMudGFibGUsIHRoaXMuY2VsbE1pbldpZHRoKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlnbm9yZU11dGF0aW9uKG11dGF0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIChtdXRhdGlvbi50eXBlID09PSAnYXR0cmlidXRlcydcclxuICAgICAgICAgICAgJiYgKG11dGF0aW9uLnRhcmdldCA9PT0gdGhpcy50YWJsZSB8fCB0aGlzLmNvbGdyb3VwLmNvbnRhaW5zKG11dGF0aW9uLnRhcmdldCkpKTtcclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiBjcmVhdGVDZWxsKGNlbGxUeXBlLCBjZWxsQ29udGVudCkge1xyXG4gICAgaWYgKGNlbGxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGNlbGxUeXBlLmNyZWF0ZUNoZWNrZWQobnVsbCwgY2VsbENvbnRlbnQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNlbGxUeXBlLmNyZWF0ZUFuZEZpbGwoKTtcclxufVxuXG5mdW5jdGlvbiBnZXRUYWJsZU5vZGVUeXBlcyhzY2hlbWEpIHtcclxuICAgIGlmIChzY2hlbWEuY2FjaGVkLnRhYmxlTm9kZVR5cGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHNjaGVtYS5jYWNoZWQudGFibGVOb2RlVHlwZXM7XHJcbiAgICB9XHJcbiAgICBjb25zdCByb2xlcyA9IHt9O1xyXG4gICAgT2JqZWN0LmtleXMoc2NoZW1hLm5vZGVzKS5mb3JFYWNoKHR5cGUgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5vZGVUeXBlID0gc2NoZW1hLm5vZGVzW3R5cGVdO1xyXG4gICAgICAgIGlmIChub2RlVHlwZS5zcGVjLnRhYmxlUm9sZSkge1xyXG4gICAgICAgICAgICByb2xlc1tub2RlVHlwZS5zcGVjLnRhYmxlUm9sZV0gPSBub2RlVHlwZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHNjaGVtYS5jYWNoZWQudGFibGVOb2RlVHlwZXMgPSByb2xlcztcclxuICAgIHJldHVybiByb2xlcztcclxufVxuXG5mdW5jdGlvbiBjcmVhdGVUYWJsZShzY2hlbWEsIHJvd3NDb3VudCwgY29sc0NvdW50LCB3aXRoSGVhZGVyUm93LCBjZWxsQ29udGVudCkge1xyXG4gICAgY29uc3QgdHlwZXMgPSBnZXRUYWJsZU5vZGVUeXBlcyhzY2hlbWEpO1xyXG4gICAgY29uc3QgaGVhZGVyQ2VsbHMgPSBbXTtcclxuICAgIGNvbnN0IGNlbGxzID0gW107XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY29sc0NvdW50OyBpbmRleCArPSAxKSB7XHJcbiAgICAgICAgY29uc3QgY2VsbCA9IGNyZWF0ZUNlbGwodHlwZXMuY2VsbCwgY2VsbENvbnRlbnQpO1xyXG4gICAgICAgIGlmIChjZWxsKSB7XHJcbiAgICAgICAgICAgIGNlbGxzLnB1c2goY2VsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3aXRoSGVhZGVyUm93KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlckNlbGwgPSBjcmVhdGVDZWxsKHR5cGVzLmhlYWRlcl9jZWxsLCBjZWxsQ29udGVudCk7XHJcbiAgICAgICAgICAgIGlmIChoZWFkZXJDZWxsKSB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJDZWxscy5wdXNoKGhlYWRlckNlbGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3Qgcm93cyA9IFtdO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJvd3NDb3VudDsgaW5kZXggKz0gMSkge1xyXG4gICAgICAgIHJvd3MucHVzaCh0eXBlcy5yb3cuY3JlYXRlQ2hlY2tlZChudWxsLCB3aXRoSGVhZGVyUm93ICYmIGluZGV4ID09PSAwID8gaGVhZGVyQ2VsbHMgOiBjZWxscykpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHR5cGVzLnRhYmxlLmNyZWF0ZUNoZWNrZWQobnVsbCwgcm93cyk7XHJcbn1cblxuZnVuY3Rpb24gaXNDZWxsU2VsZWN0aW9uKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBDZWxsU2VsZWN0aW9uO1xyXG59XG5cbmNvbnN0IGRlbGV0ZVRhYmxlV2hlbkFsbENlbGxzU2VsZWN0ZWQgPSAoeyBlZGl0b3IgfSkgPT4ge1xyXG4gICAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGVkaXRvci5zdGF0ZTtcclxuICAgIGlmICghaXNDZWxsU2VsZWN0aW9uKHNlbGVjdGlvbikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBsZXQgY2VsbENvdW50ID0gMDtcclxuICAgIGNvbnN0IHRhYmxlID0gZmluZFBhcmVudE5vZGVDbG9zZXN0VG9Qb3Moc2VsZWN0aW9uLnJhbmdlc1swXS4kZnJvbSwgbm9kZSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUudHlwZS5uYW1lID09PSAndGFibGUnO1xyXG4gICAgfSk7XHJcbiAgICB0YWJsZSA9PT0gbnVsbCB8fCB0YWJsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGFibGUubm9kZS5kZXNjZW5kYW50cyhub2RlID0+IHtcclxuICAgICAgICBpZiAobm9kZS50eXBlLm5hbWUgPT09ICd0YWJsZScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoWyd0YWJsZUNlbGwnLCAndGFibGVIZWFkZXInXS5pbmNsdWRlcyhub2RlLnR5cGUubmFtZSkpIHtcclxuICAgICAgICAgICAgY2VsbENvdW50ICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBhbGxDZWxsc1NlbGVjdGVkID0gY2VsbENvdW50ID09PSBzZWxlY3Rpb24ucmFuZ2VzLmxlbmd0aDtcclxuICAgIGlmICghYWxsQ2VsbHNTZWxlY3RlZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVkaXRvci5jb21tYW5kcy5kZWxldGVUYWJsZSgpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XG5cbmNvbnN0IFRhYmxlID0gTm9kZS5jcmVhdGUoe1xyXG4gICAgbmFtZTogJ3RhYmxlJyxcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIGFkZE9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgSFRNTEF0dHJpYnV0ZXM6IHt9LFxyXG4gICAgICAgICAgICByZXNpemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBoYW5kbGVXaWR0aDogNSxcclxuICAgICAgICAgICAgY2VsbE1pbldpZHRoOiAyNSxcclxuICAgICAgICAgICAgLy8gVE9ETzogZml4XHJcbiAgICAgICAgICAgIFZpZXc6IFRhYmxlVmlldyxcclxuICAgICAgICAgICAgbGFzdENvbHVtblJlc2l6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgYWxsb3dUYWJsZU5vZGVTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgY29udGVudDogJ3RhYmxlUm93KycsXHJcbiAgICB0YWJsZVJvbGU6ICd0YWJsZScsXHJcbiAgICBpc29sYXRpbmc6IHRydWUsXHJcbiAgICBncm91cDogJ2Jsb2NrJyxcclxuICAgIHBhcnNlSFRNTCgpIHtcclxuICAgICAgICByZXR1cm4gW3sgdGFnOiAndGFibGUnIH1dO1xyXG4gICAgfSxcclxuICAgIHJlbmRlckhUTUwoeyBIVE1MQXR0cmlidXRlcyB9KSB7XHJcbiAgICAgICAgcmV0dXJuIFsndGFibGUnLCBtZXJnZUF0dHJpYnV0ZXModGhpcy5vcHRpb25zLkhUTUxBdHRyaWJ1dGVzLCBIVE1MQXR0cmlidXRlcyksIFsndGJvZHknLCAwXV07XHJcbiAgICB9LFxyXG4gICAgYWRkQ29tbWFuZHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaW5zZXJ0VGFibGU6ICh7IHJvd3MgPSAzLCBjb2xzID0gMywgd2l0aEhlYWRlclJvdyA9IHRydWUgfSA9IHt9KSA9PiAoeyB0ciwgZGlzcGF0Y2gsIGVkaXRvciB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gY3JlYXRlVGFibGUoZWRpdG9yLnNjaGVtYSwgcm93cywgY29scywgd2l0aEhlYWRlclJvdyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlzcGF0Y2gpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSB0ci5zZWxlY3Rpb24uYW5jaG9yICsgMTtcclxuICAgICAgICAgICAgICAgICAgICB0ci5yZXBsYWNlU2VsZWN0aW9uV2l0aChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2Nyb2xsSW50b1ZpZXcoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0U2VsZWN0aW9uKFRleHRTZWxlY3Rpb24ubmVhcih0ci5kb2MucmVzb2x2ZShvZmZzZXQpKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYWRkQ29sdW1uQmVmb3JlOiAoKSA9PiAoeyBzdGF0ZSwgZGlzcGF0Y2ggfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZENvbHVtbkJlZm9yZShzdGF0ZSwgZGlzcGF0Y2gpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhZGRDb2x1bW5BZnRlcjogKCkgPT4gKHsgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRDb2x1bW5BZnRlcihzdGF0ZSwgZGlzcGF0Y2gpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkZWxldGVDb2x1bW46ICgpID0+ICh7IHN0YXRlLCBkaXNwYXRjaCB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlQ29sdW1uKHN0YXRlLCBkaXNwYXRjaCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFkZFJvd0JlZm9yZTogKCkgPT4gKHsgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRSb3dCZWZvcmUoc3RhdGUsIGRpc3BhdGNoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYWRkUm93QWZ0ZXI6ICgpID0+ICh7IHN0YXRlLCBkaXNwYXRjaCB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkUm93QWZ0ZXIoc3RhdGUsIGRpc3BhdGNoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZGVsZXRlUm93OiAoKSA9PiAoeyBzdGF0ZSwgZGlzcGF0Y2ggfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZVJvdyhzdGF0ZSwgZGlzcGF0Y2gpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkZWxldGVUYWJsZTogKCkgPT4gKHsgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkZWxldGVUYWJsZShzdGF0ZSwgZGlzcGF0Y2gpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBtZXJnZUNlbGxzOiAoKSA9PiAoeyBzdGF0ZSwgZGlzcGF0Y2ggfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlQ2VsbHMoc3RhdGUsIGRpc3BhdGNoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3BsaXRDZWxsOiAoKSA9PiAoeyBzdGF0ZSwgZGlzcGF0Y2ggfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNwbGl0Q2VsbChzdGF0ZSwgZGlzcGF0Y2gpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b2dnbGVIZWFkZXJDb2x1bW46ICgpID0+ICh7IHN0YXRlLCBkaXNwYXRjaCB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9nZ2xlSGVhZGVyKCdjb2x1bW4nKShzdGF0ZSwgZGlzcGF0Y2gpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b2dnbGVIZWFkZXJSb3c6ICgpID0+ICh7IHN0YXRlLCBkaXNwYXRjaCB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9nZ2xlSGVhZGVyKCdyb3cnKShzdGF0ZSwgZGlzcGF0Y2gpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b2dnbGVIZWFkZXJDZWxsOiAoKSA9PiAoeyBzdGF0ZSwgZGlzcGF0Y2ggfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvZ2dsZUhlYWRlckNlbGwoc3RhdGUsIGRpc3BhdGNoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbWVyZ2VPclNwbGl0OiAoKSA9PiAoeyBzdGF0ZSwgZGlzcGF0Y2ggfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1lcmdlQ2VsbHMoc3RhdGUsIGRpc3BhdGNoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNwbGl0Q2VsbChzdGF0ZSwgZGlzcGF0Y2gpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDZWxsQXR0cmlidXRlOiAobmFtZSwgdmFsdWUpID0+ICh7IHN0YXRlLCBkaXNwYXRjaCB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0Q2VsbEF0dHIobmFtZSwgdmFsdWUpKHN0YXRlLCBkaXNwYXRjaCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGdvVG9OZXh0Q2VsbDogKCkgPT4gKHsgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBnb1RvTmV4dENlbGwoMSkoc3RhdGUsIGRpc3BhdGNoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ29Ub1ByZXZpb3VzQ2VsbDogKCkgPT4gKHsgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBnb1RvTmV4dENlbGwoLTEpKHN0YXRlLCBkaXNwYXRjaCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZpeFRhYmxlczogKCkgPT4gKHsgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChkaXNwYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpeFRhYmxlcyhzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0Q2VsbFNlbGVjdGlvbjogcG9zaXRpb24gPT4gKHsgdHIsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChkaXNwYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IENlbGxTZWxlY3Rpb24uY3JlYXRlKHRyLmRvYywgcG9zaXRpb24uYW5jaG9yQ2VsbCwgcG9zaXRpb24uaGVhZENlbGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICB0ci5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgYWRkS2V5Ym9hcmRTaG9ydGN1dHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgVGFiOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lZGl0b3IuY29tbWFuZHMuZ29Ub05leHRDZWxsKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5lZGl0b3IuY2FuKCkuYWRkUm93QWZ0ZXIoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVkaXRvci5jaGFpbigpLmFkZFJvd0FmdGVyKCkuZ29Ub05leHRDZWxsKCkucnVuKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdTaGlmdC1UYWInOiAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy5nb1RvUHJldmlvdXNDZWxsKCksXHJcbiAgICAgICAgICAgIEJhY2tzcGFjZTogZGVsZXRlVGFibGVXaGVuQWxsQ2VsbHNTZWxlY3RlZCxcclxuICAgICAgICAgICAgJ01vZC1CYWNrc3BhY2UnOiBkZWxldGVUYWJsZVdoZW5BbGxDZWxsc1NlbGVjdGVkLFxyXG4gICAgICAgICAgICBEZWxldGU6IGRlbGV0ZVRhYmxlV2hlbkFsbENlbGxzU2VsZWN0ZWQsXHJcbiAgICAgICAgICAgICdNb2QtRGVsZXRlJzogZGVsZXRlVGFibGVXaGVuQWxsQ2VsbHNTZWxlY3RlZCxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGFkZFByb3NlTWlycm9yUGx1Z2lucygpIHtcclxuICAgICAgICBjb25zdCBpc1Jlc2l6YWJsZSA9IHRoaXMub3B0aW9ucy5yZXNpemFibGUgJiYgdGhpcy5lZGl0b3IuaXNFZGl0YWJsZTtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAuLi4oaXNSZXNpemFibGVcclxuICAgICAgICAgICAgICAgID8gW1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtblJlc2l6aW5nKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlV2lkdGg6IHRoaXMub3B0aW9ucy5oYW5kbGVXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbE1pbldpZHRoOiB0aGlzLm9wdGlvbnMuY2VsbE1pbldpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIChpbmNvcnJlY3QgdHlwZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgVmlldzogdGhpcy5vcHRpb25zLlZpZXcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFBSIGZvciBAdHlwZXMvcHJvc2VtaXJyb3ItdGFibGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgKGluY29ycmVjdCB0eXBlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q29sdW1uUmVzaXphYmxlOiB0aGlzLm9wdGlvbnMubGFzdENvbHVtblJlc2l6YWJsZSxcclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgIDogW10pLFxyXG4gICAgICAgICAgICB0YWJsZUVkaXRpbmcoe1xyXG4gICAgICAgICAgICAgICAgYWxsb3dUYWJsZU5vZGVTZWxlY3Rpb246IHRoaXMub3B0aW9ucy5hbGxvd1RhYmxlTm9kZVNlbGVjdGlvbixcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgXTtcclxuICAgIH0sXHJcbiAgICBleHRlbmROb2RlU2NoZW1hKGV4dGVuc2lvbikge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IGV4dGVuc2lvbi5uYW1lLFxyXG4gICAgICAgICAgICBvcHRpb25zOiBleHRlbnNpb24ub3B0aW9ucyxcclxuICAgICAgICAgICAgc3RvcmFnZTogZXh0ZW5zaW9uLnN0b3JhZ2UsXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0YWJsZVJvbGU6IGNhbGxPclJldHVybihnZXRFeHRlbnNpb25GaWVsZChleHRlbnNpb24sICd0YWJsZVJvbGUnLCBjb250ZXh0KSksXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbn0pO1xuXG5leHBvcnQgeyBUYWJsZSwgY3JlYXRlVGFibGUsIFRhYmxlIGFzIGRlZmF1bHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwiaW1wb3J0IHsgTm9kZSwgbWVyZ2VBdHRyaWJ1dGVzIH0gZnJvbSAnQHRpcHRhcC9jb3JlJztcblxuY29uc3QgVGFibGVDZWxsID0gTm9kZS5jcmVhdGUoe1xyXG4gICAgbmFtZTogJ3RhYmxlQ2VsbCcsXHJcbiAgICBhZGRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIEhUTUxBdHRyaWJ1dGVzOiB7fSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGNvbnRlbnQ6ICdibG9jaysnLFxyXG4gICAgYWRkQXR0cmlidXRlcygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjb2xzcGFuOiB7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAxLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByb3dzcGFuOiB7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAxLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb2x3aWR0aDoge1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHBhcnNlSFRNTDogZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sd2lkdGggPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnY29sd2lkdGgnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbHdpZHRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gW3BhcnNlSW50KGNvbHdpZHRoLCAxMCldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgdGFibGVSb2xlOiAnY2VsbCcsXHJcbiAgICBpc29sYXRpbmc6IHRydWUsXHJcbiAgICBwYXJzZUhUTUwoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgeyB0YWc6ICd0ZCcgfSxcclxuICAgICAgICBdO1xyXG4gICAgfSxcclxuICAgIHJlbmRlckhUTUwoeyBIVE1MQXR0cmlidXRlcyB9KSB7XHJcbiAgICAgICAgcmV0dXJuIFsndGQnLCBtZXJnZUF0dHJpYnV0ZXModGhpcy5vcHRpb25zLkhUTUxBdHRyaWJ1dGVzLCBIVE1MQXR0cmlidXRlcyksIDBdO1xyXG4gICAgfSxcclxufSk7XG5cbmV4cG9ydCB7IFRhYmxlQ2VsbCwgVGFibGVDZWxsIGFzIGRlZmF1bHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwiaW1wb3J0IHsgTm9kZSwgbWVyZ2VBdHRyaWJ1dGVzIH0gZnJvbSAnQHRpcHRhcC9jb3JlJztcblxuY29uc3QgVGFibGVIZWFkZXIgPSBOb2RlLmNyZWF0ZSh7XHJcbiAgICBuYW1lOiAndGFibGVIZWFkZXInLFxyXG4gICAgYWRkT3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBIVE1MQXR0cmlidXRlczoge30sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBjb250ZW50OiAnYmxvY2srJyxcclxuICAgIGFkZEF0dHJpYnV0ZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY29sc3Bhbjoge1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcm93c3Bhbjoge1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29sd2lkdGg6IHtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBwYXJzZUhUTUw6IGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHdpZHRoID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2NvbHdpZHRoJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb2x3aWR0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFtwYXJzZUludChjb2x3aWR0aCwgMTApXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIHRhYmxlUm9sZTogJ2hlYWRlcl9jZWxsJyxcclxuICAgIGlzb2xhdGluZzogdHJ1ZSxcclxuICAgIHBhcnNlSFRNTCgpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7IHRhZzogJ3RoJyB9LFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG4gICAgcmVuZGVySFRNTCh7IEhUTUxBdHRyaWJ1dGVzIH0pIHtcclxuICAgICAgICByZXR1cm4gWyd0aCcsIG1lcmdlQXR0cmlidXRlcyh0aGlzLm9wdGlvbnMuSFRNTEF0dHJpYnV0ZXMsIEhUTUxBdHRyaWJ1dGVzKSwgMF07XHJcbiAgICB9LFxyXG59KTtcblxuZXhwb3J0IHsgVGFibGVIZWFkZXIsIFRhYmxlSGVhZGVyIGFzIGRlZmF1bHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwiaW1wb3J0IHsgTm9kZSwgbWVyZ2VBdHRyaWJ1dGVzIH0gZnJvbSAnQHRpcHRhcC9jb3JlJztcblxuY29uc3QgVGFibGVSb3cgPSBOb2RlLmNyZWF0ZSh7XHJcbiAgICBuYW1lOiAndGFibGVSb3cnLFxyXG4gICAgYWRkT3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBIVE1MQXR0cmlidXRlczoge30sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBjb250ZW50OiAnKHRhYmxlQ2VsbCB8IHRhYmxlSGVhZGVyKSonLFxyXG4gICAgdGFibGVSb2xlOiAncm93JyxcclxuICAgIHBhcnNlSFRNTCgpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7IHRhZzogJ3RyJyB9LFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG4gICAgcmVuZGVySFRNTCh7IEhUTUxBdHRyaWJ1dGVzIH0pIHtcclxuICAgICAgICByZXR1cm4gWyd0cicsIG1lcmdlQXR0cmlidXRlcyh0aGlzLm9wdGlvbnMuSFRNTEF0dHJpYnV0ZXMsIEhUTUxBdHRyaWJ1dGVzKSwgMF07XHJcbiAgICB9LFxyXG59KTtcblxuZXhwb3J0IHsgVGFibGVSb3csIFRhYmxlUm93IGFzIGRlZmF1bHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwiaW1wb3J0IHsgRXh0ZW5zaW9uIH0gZnJvbSAnQHRpcHRhcC9jb3JlJztcblxuY29uc3QgVGV4dEFsaWduID0gRXh0ZW5zaW9uLmNyZWF0ZSh7XHJcbiAgICBuYW1lOiAndGV4dEFsaWduJyxcclxuICAgIGFkZE9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdHlwZXM6IFtdLFxyXG4gICAgICAgICAgICBhbGlnbm1lbnRzOiBbJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0JywgJ2p1c3RpZnknXSxcclxuICAgICAgICAgICAgZGVmYXVsdEFsaWdubWVudDogJ2xlZnQnLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgYWRkR2xvYmFsQXR0cmlidXRlcygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlczogdGhpcy5vcHRpb25zLnR5cGVzLFxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB0aGlzLm9wdGlvbnMuZGVmYXVsdEFsaWdubWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VIVE1MOiBlbGVtZW50ID0+IGVsZW1lbnQuc3R5bGUudGV4dEFsaWduIHx8IHRoaXMub3B0aW9ucy5kZWZhdWx0QWxpZ25tZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJIVE1MOiBhdHRyaWJ1dGVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnRleHRBbGlnbiA9PT0gdGhpcy5vcHRpb25zLmRlZmF1bHRBbGlnbm1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBzdHlsZTogYHRleHQtYWxpZ246ICR7YXR0cmlidXRlcy50ZXh0QWxpZ259YCB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG4gICAgYWRkQ29tbWFuZHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc2V0VGV4dEFsaWduOiAoYWxpZ25tZW50KSA9PiAoeyBjb21tYW5kcyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5hbGlnbm1lbnRzLmluY2x1ZGVzKGFsaWdubWVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnR5cGVzLmV2ZXJ5KHR5cGUgPT4gY29tbWFuZHMudXBkYXRlQXR0cmlidXRlcyh0eXBlLCB7IHRleHRBbGlnbjogYWxpZ25tZW50IH0pKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdW5zZXRUZXh0QWxpZ246ICgpID0+ICh7IGNvbW1hbmRzIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMudHlwZXMuZXZlcnkodHlwZSA9PiBjb21tYW5kcy5yZXNldEF0dHJpYnV0ZXModHlwZSwgJ3RleHRBbGlnbicpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGFkZEtleWJvYXJkU2hvcnRjdXRzKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdNb2QtU2hpZnQtbCc6ICgpID0+IHRoaXMuZWRpdG9yLmNvbW1hbmRzLnNldFRleHRBbGlnbignbGVmdCcpLFxyXG4gICAgICAgICAgICAnTW9kLVNoaWZ0LWUnOiAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy5zZXRUZXh0QWxpZ24oJ2NlbnRlcicpLFxyXG4gICAgICAgICAgICAnTW9kLVNoaWZ0LXInOiAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy5zZXRUZXh0QWxpZ24oJ3JpZ2h0JyksXHJcbiAgICAgICAgICAgICdNb2QtU2hpZnQtaic6ICgpID0+IHRoaXMuZWRpdG9yLmNvbW1hbmRzLnNldFRleHRBbGlnbignanVzdGlmeScpLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG59KTtcblxuZXhwb3J0IHsgVGV4dEFsaWduLCBUZXh0QWxpZ24gYXMgZGVmYXVsdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLCJpbXBvcnQgeyBFeHRlbnNpb24sIHRleHRJbnB1dFJ1bGUgfSBmcm9tICdAdGlwdGFwL2NvcmUnO1xuXG5jb25zdCBlbURhc2ggPSAob3ZlcnJpZGUpID0+IHRleHRJbnB1dFJ1bGUoe1xyXG4gICAgZmluZDogLy0tJC8sXHJcbiAgICByZXBsYWNlOiBvdmVycmlkZSAhPT0gbnVsbCAmJiBvdmVycmlkZSAhPT0gdm9pZCAwID8gb3ZlcnJpZGUgOiAn4oCUJyxcclxufSk7XHJcbmNvbnN0IGVsbGlwc2lzID0gKG92ZXJyaWRlKSA9PiB0ZXh0SW5wdXRSdWxlKHtcclxuICAgIGZpbmQ6IC9cXC5cXC5cXC4kLyxcclxuICAgIHJlcGxhY2U6IG92ZXJyaWRlICE9PSBudWxsICYmIG92ZXJyaWRlICE9PSB2b2lkIDAgPyBvdmVycmlkZSA6ICfigKYnLFxyXG59KTtcclxuY29uc3Qgb3BlbkRvdWJsZVF1b3RlID0gKG92ZXJyaWRlKSA9PiB0ZXh0SW5wdXRSdWxlKHtcclxuICAgIGZpbmQ6IC8oPzpefFtcXHN7Wyg8J1wiXFx1MjAxOFxcdTIwMUNdKShcIikkLyxcclxuICAgIHJlcGxhY2U6IG92ZXJyaWRlICE9PSBudWxsICYmIG92ZXJyaWRlICE9PSB2b2lkIDAgPyBvdmVycmlkZSA6ICfigJwnLFxyXG59KTtcclxuY29uc3QgY2xvc2VEb3VibGVRdW90ZSA9IChvdmVycmlkZSkgPT4gdGV4dElucHV0UnVsZSh7XHJcbiAgICBmaW5kOiAvXCIkLyxcclxuICAgIHJlcGxhY2U6IG92ZXJyaWRlICE9PSBudWxsICYmIG92ZXJyaWRlICE9PSB2b2lkIDAgPyBvdmVycmlkZSA6ICfigJ0nLFxyXG59KTtcclxuY29uc3Qgb3BlblNpbmdsZVF1b3RlID0gKG92ZXJyaWRlKSA9PiB0ZXh0SW5wdXRSdWxlKHtcclxuICAgIGZpbmQ6IC8oPzpefFtcXHN7Wyg8J1wiXFx1MjAxOFxcdTIwMUNdKSgnKSQvLFxyXG4gICAgcmVwbGFjZTogb3ZlcnJpZGUgIT09IG51bGwgJiYgb3ZlcnJpZGUgIT09IHZvaWQgMCA/IG92ZXJyaWRlIDogJ+KAmCcsXHJcbn0pO1xyXG5jb25zdCBjbG9zZVNpbmdsZVF1b3RlID0gKG92ZXJyaWRlKSA9PiB0ZXh0SW5wdXRSdWxlKHtcclxuICAgIGZpbmQ6IC8nJC8sXHJcbiAgICByZXBsYWNlOiBvdmVycmlkZSAhPT0gbnVsbCAmJiBvdmVycmlkZSAhPT0gdm9pZCAwID8gb3ZlcnJpZGUgOiAn4oCZJyxcclxufSk7XHJcbmNvbnN0IGxlZnRBcnJvdyA9IChvdmVycmlkZSkgPT4gdGV4dElucHV0UnVsZSh7XHJcbiAgICBmaW5kOiAvPC0kLyxcclxuICAgIHJlcGxhY2U6IG92ZXJyaWRlICE9PSBudWxsICYmIG92ZXJyaWRlICE9PSB2b2lkIDAgPyBvdmVycmlkZSA6ICfihpAnLFxyXG59KTtcclxuY29uc3QgcmlnaHRBcnJvdyA9IChvdmVycmlkZSkgPT4gdGV4dElucHV0UnVsZSh7XHJcbiAgICBmaW5kOiAvLT4kLyxcclxuICAgIHJlcGxhY2U6IG92ZXJyaWRlICE9PSBudWxsICYmIG92ZXJyaWRlICE9PSB2b2lkIDAgPyBvdmVycmlkZSA6ICfihpInLFxyXG59KTtcclxuY29uc3QgY29weXJpZ2h0ID0gKG92ZXJyaWRlKSA9PiB0ZXh0SW5wdXRSdWxlKHtcclxuICAgIGZpbmQ6IC9cXChjXFwpJC8sXHJcbiAgICByZXBsYWNlOiBvdmVycmlkZSAhPT0gbnVsbCAmJiBvdmVycmlkZSAhPT0gdm9pZCAwID8gb3ZlcnJpZGUgOiAnwqknLFxyXG59KTtcclxuY29uc3QgdHJhZGVtYXJrID0gKG92ZXJyaWRlKSA9PiB0ZXh0SW5wdXRSdWxlKHtcclxuICAgIGZpbmQ6IC9cXCh0bVxcKSQvLFxyXG4gICAgcmVwbGFjZTogb3ZlcnJpZGUgIT09IG51bGwgJiYgb3ZlcnJpZGUgIT09IHZvaWQgMCA/IG92ZXJyaWRlIDogJ+KEoicsXHJcbn0pO1xyXG5jb25zdCBzZXJ2aWNlbWFyayA9IChvdmVycmlkZSkgPT4gdGV4dElucHV0UnVsZSh7XHJcbiAgICBmaW5kOiAvXFwoc21cXCkkLyxcclxuICAgIHJlcGxhY2U6IG92ZXJyaWRlICE9PSBudWxsICYmIG92ZXJyaWRlICE9PSB2b2lkIDAgPyBvdmVycmlkZSA6ICfihKAnLFxyXG59KTtcclxuY29uc3QgcmVnaXN0ZXJlZFRyYWRlbWFyayA9IChvdmVycmlkZSkgPT4gdGV4dElucHV0UnVsZSh7XHJcbiAgICBmaW5kOiAvXFwoclxcKSQvLFxyXG4gICAgcmVwbGFjZTogb3ZlcnJpZGUgIT09IG51bGwgJiYgb3ZlcnJpZGUgIT09IHZvaWQgMCA/IG92ZXJyaWRlIDogJ8KuJyxcclxufSk7XHJcbmNvbnN0IG9uZUhhbGYgPSAob3ZlcnJpZGUpID0+IHRleHRJbnB1dFJ1bGUoe1xyXG4gICAgZmluZDogLyg/Ol58XFxzKSgxXFwvMikkLyxcclxuICAgIHJlcGxhY2U6IG92ZXJyaWRlICE9PSBudWxsICYmIG92ZXJyaWRlICE9PSB2b2lkIDAgPyBvdmVycmlkZSA6ICfCvScsXHJcbn0pO1xyXG5jb25zdCBwbHVzTWludXMgPSAob3ZlcnJpZGUpID0+IHRleHRJbnB1dFJ1bGUoe1xyXG4gICAgZmluZDogL1xcK1xcLy0kLyxcclxuICAgIHJlcGxhY2U6IG92ZXJyaWRlICE9PSBudWxsICYmIG92ZXJyaWRlICE9PSB2b2lkIDAgPyBvdmVycmlkZSA6ICfCsScsXHJcbn0pO1xyXG5jb25zdCBub3RFcXVhbCA9IChvdmVycmlkZSkgPT4gdGV4dElucHV0UnVsZSh7XHJcbiAgICBmaW5kOiAvIT0kLyxcclxuICAgIHJlcGxhY2U6IG92ZXJyaWRlICE9PSBudWxsICYmIG92ZXJyaWRlICE9PSB2b2lkIDAgPyBvdmVycmlkZSA6ICfiiaAnLFxyXG59KTtcclxuY29uc3QgbGFxdW8gPSAob3ZlcnJpZGUpID0+IHRleHRJbnB1dFJ1bGUoe1xyXG4gICAgZmluZDogLzw8JC8sXHJcbiAgICByZXBsYWNlOiBvdmVycmlkZSAhPT0gbnVsbCAmJiBvdmVycmlkZSAhPT0gdm9pZCAwID8gb3ZlcnJpZGUgOiAnwqsnLFxyXG59KTtcclxuY29uc3QgcmFxdW8gPSAob3ZlcnJpZGUpID0+IHRleHRJbnB1dFJ1bGUoe1xyXG4gICAgZmluZDogLz4+JC8sXHJcbiAgICByZXBsYWNlOiBvdmVycmlkZSAhPT0gbnVsbCAmJiBvdmVycmlkZSAhPT0gdm9pZCAwID8gb3ZlcnJpZGUgOiAnwrsnLFxyXG59KTtcclxuY29uc3QgbXVsdGlwbGljYXRpb24gPSAob3ZlcnJpZGUpID0+IHRleHRJbnB1dFJ1bGUoe1xyXG4gICAgZmluZDogL1xcZCtcXHM/KFsqeF0pXFxzP1xcZCskLyxcclxuICAgIHJlcGxhY2U6IG92ZXJyaWRlICE9PSBudWxsICYmIG92ZXJyaWRlICE9PSB2b2lkIDAgPyBvdmVycmlkZSA6ICfDlycsXHJcbn0pO1xyXG5jb25zdCBzdXBlcnNjcmlwdFR3byA9IChvdmVycmlkZSkgPT4gdGV4dElucHV0UnVsZSh7XHJcbiAgICBmaW5kOiAvXFxeMiQvLFxyXG4gICAgcmVwbGFjZTogb3ZlcnJpZGUgIT09IG51bGwgJiYgb3ZlcnJpZGUgIT09IHZvaWQgMCA/IG92ZXJyaWRlIDogJ8KyJyxcclxufSk7XHJcbmNvbnN0IHN1cGVyc2NyaXB0VGhyZWUgPSAob3ZlcnJpZGUpID0+IHRleHRJbnB1dFJ1bGUoe1xyXG4gICAgZmluZDogL1xcXjMkLyxcclxuICAgIHJlcGxhY2U6IG92ZXJyaWRlICE9PSBudWxsICYmIG92ZXJyaWRlICE9PSB2b2lkIDAgPyBvdmVycmlkZSA6ICfCsycsXHJcbn0pO1xyXG5jb25zdCBvbmVRdWFydGVyID0gKG92ZXJyaWRlKSA9PiB0ZXh0SW5wdXRSdWxlKHtcclxuICAgIGZpbmQ6IC8oPzpefFxccykoMVxcLzQpJC8sXHJcbiAgICByZXBsYWNlOiBvdmVycmlkZSAhPT0gbnVsbCAmJiBvdmVycmlkZSAhPT0gdm9pZCAwID8gb3ZlcnJpZGUgOiAnwrwnLFxyXG59KTtcclxuY29uc3QgdGhyZWVRdWFydGVycyA9IChvdmVycmlkZSkgPT4gdGV4dElucHV0UnVsZSh7XHJcbiAgICBmaW5kOiAvKD86XnxcXHMpKDNcXC80KSQvLFxyXG4gICAgcmVwbGFjZTogb3ZlcnJpZGUgIT09IG51bGwgJiYgb3ZlcnJpZGUgIT09IHZvaWQgMCA/IG92ZXJyaWRlIDogJ8K+JyxcclxufSk7XHJcbmNvbnN0IFR5cG9ncmFwaHkgPSBFeHRlbnNpb24uY3JlYXRlKHtcclxuICAgIG5hbWU6ICd0eXBvZ3JhcGh5JyxcclxuICAgIGFkZElucHV0UnVsZXMoKSB7XHJcbiAgICAgICAgY29uc3QgcnVsZXMgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmVtRGFzaCAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcnVsZXMucHVzaChlbURhc2godGhpcy5vcHRpb25zLmVtRGFzaCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmVsbGlwc2lzICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBydWxlcy5wdXNoKGVsbGlwc2lzKHRoaXMub3B0aW9ucy5lbGxpcHNpcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9wZW5Eb3VibGVRdW90ZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcnVsZXMucHVzaChvcGVuRG91YmxlUXVvdGUodGhpcy5vcHRpb25zLm9wZW5Eb3VibGVRdW90ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlRG91YmxlUXVvdGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goY2xvc2VEb3VibGVRdW90ZSh0aGlzLm9wdGlvbnMuY2xvc2VEb3VibGVRdW90ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9wZW5TaW5nbGVRdW90ZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcnVsZXMucHVzaChvcGVuU2luZ2xlUXVvdGUodGhpcy5vcHRpb25zLm9wZW5TaW5nbGVRdW90ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlU2luZ2xlUXVvdGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goY2xvc2VTaW5nbGVRdW90ZSh0aGlzLm9wdGlvbnMuY2xvc2VTaW5nbGVRdW90ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxlZnRBcnJvdyAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcnVsZXMucHVzaChsZWZ0QXJyb3codGhpcy5vcHRpb25zLmxlZnRBcnJvdykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJpZ2h0QXJyb3cgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJ1bGVzLnB1c2gocmlnaHRBcnJvdyh0aGlzLm9wdGlvbnMucmlnaHRBcnJvdykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvcHlyaWdodCAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcnVsZXMucHVzaChjb3B5cmlnaHQodGhpcy5vcHRpb25zLmNvcHlyaWdodCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYWRlbWFyayAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcnVsZXMucHVzaCh0cmFkZW1hcmsodGhpcy5vcHRpb25zLnRyYWRlbWFyaykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlcnZpY2VtYXJrICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBydWxlcy5wdXNoKHNlcnZpY2VtYXJrKHRoaXMub3B0aW9ucy5zZXJ2aWNlbWFyaykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlZ2lzdGVyZWRUcmFkZW1hcmsgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJ1bGVzLnB1c2gocmVnaXN0ZXJlZFRyYWRlbWFyayh0aGlzLm9wdGlvbnMucmVnaXN0ZXJlZFRyYWRlbWFyaykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9uZUhhbGYgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJ1bGVzLnB1c2gob25lSGFsZih0aGlzLm9wdGlvbnMub25lSGFsZikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBsdXNNaW51cyAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcnVsZXMucHVzaChwbHVzTWludXModGhpcy5vcHRpb25zLnBsdXNNaW51cykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm5vdEVxdWFsICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBydWxlcy5wdXNoKG5vdEVxdWFsKHRoaXMub3B0aW9ucy5ub3RFcXVhbCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxhcXVvICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBydWxlcy5wdXNoKGxhcXVvKHRoaXMub3B0aW9ucy5sYXF1bykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhcXVvICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBydWxlcy5wdXNoKHJhcXVvKHRoaXMub3B0aW9ucy5yYXF1bykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxpY2F0aW9uICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBydWxlcy5wdXNoKG11bHRpcGxpY2F0aW9uKHRoaXMub3B0aW9ucy5tdWx0aXBsaWNhdGlvbikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnN1cGVyc2NyaXB0VHdvICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBydWxlcy5wdXNoKHN1cGVyc2NyaXB0VHdvKHRoaXMub3B0aW9ucy5zdXBlcnNjcmlwdFR3bykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnN1cGVyc2NyaXB0VGhyZWUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goc3VwZXJzY3JpcHRUaHJlZSh0aGlzLm9wdGlvbnMuc3VwZXJzY3JpcHRUaHJlZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9uZVF1YXJ0ZXIgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJ1bGVzLnB1c2gob25lUXVhcnRlcih0aGlzLm9wdGlvbnMub25lUXVhcnRlcikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRocmVlUXVhcnRlcnMgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJ1bGVzLnB1c2godGhyZWVRdWFydGVycyh0aGlzLm9wdGlvbnMudGhyZWVRdWFydGVycykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcnVsZXM7XHJcbiAgICB9LFxyXG59KTtcblxuZXhwb3J0IHsgVHlwb2dyYXBoeSwgY2xvc2VEb3VibGVRdW90ZSwgY2xvc2VTaW5nbGVRdW90ZSwgY29weXJpZ2h0LCBUeXBvZ3JhcGh5IGFzIGRlZmF1bHQsIGVsbGlwc2lzLCBlbURhc2gsIGxhcXVvLCBsZWZ0QXJyb3csIG11bHRpcGxpY2F0aW9uLCBub3RFcXVhbCwgb25lSGFsZiwgb25lUXVhcnRlciwgb3BlbkRvdWJsZVF1b3RlLCBvcGVuU2luZ2xlUXVvdGUsIHBsdXNNaW51cywgcmFxdW8sIHJlZ2lzdGVyZWRUcmFkZW1hcmssIHJpZ2h0QXJyb3csIHNlcnZpY2VtYXJrLCBzdXBlcnNjcmlwdFRocmVlLCBzdXBlcnNjcmlwdFR3bywgdGhyZWVRdWFydGVycywgdHJhZGVtYXJrIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsImltcG9ydCB7IEJ1YmJsZU1lbnVQbHVnaW4gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1idWJibGUtbWVudSc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0LCBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NLCB7IGZsdXNoU3luYyB9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBFZGl0b3IgYXMgRWRpdG9yJDEsIE5vZGVWaWV3IH0gZnJvbSAnQHRpcHRhcC9jb3JlJztcbmV4cG9ydCAqIGZyb20gJ0B0aXB0YXAvY29yZSc7XG5pbXBvcnQgeyBGbG9hdGluZ01lbnVQbHVnaW4gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1mbG9hdGluZy1tZW51JztcblxuY29uc3QgUG9ydGFscyA9ICh7IHJlbmRlcmVycyB9KSA9PiB7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIE9iamVjdC5lbnRyaWVzKHJlbmRlcmVycykubWFwKChba2V5LCByZW5kZXJlcl0pID0+IHtcclxuICAgICAgICByZXR1cm4gUmVhY3RET00uY3JlYXRlUG9ydGFsKHJlbmRlcmVyLnJlYWN0RWxlbWVudCwgcmVuZGVyZXIuZWxlbWVudCwga2V5KTtcclxuICAgIH0pKSk7XHJcbn07XHJcbmNsYXNzIFB1cmVFZGl0b3JDb250ZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yQ29udGVudFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICByZW5kZXJlcnM6IHt9LFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgY29uc3QgeyBlZGl0b3IgfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgaWYgKGVkaXRvciAmJiBlZGl0b3Iub3B0aW9ucy5lbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChlZGl0b3IuY29udGVudENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVkaXRvckNvbnRlbnRSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgZWxlbWVudC5hcHBlbmQoLi4uZWRpdG9yLm9wdGlvbnMuZWxlbWVudC5jaGlsZE5vZGVzKTtcclxuICAgICAgICAgICAgZWRpdG9yLnNldE9wdGlvbnMoe1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGVkaXRvci5jb250ZW50Q29tcG9uZW50ID0gdGhpcztcclxuICAgICAgICAgICAgZWRpdG9yLmNyZWF0ZU5vZGVWaWV3cygpO1xyXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBtYXliZUZsdXNoU3luYyhmbikge1xyXG4gICAgICAgIC8vIEF2b2lkIGNhbGxpbmcgZmx1c2hTeW5jIHVudGlsIHRoZSBlZGl0b3IgaXMgaW5pdGlhbGl6ZWQuXHJcbiAgICAgICAgLy8gSW5pdGlhbGl6YXRpb24gaGFwcGVucyBkdXJpbmcgdGhlIGNvbXBvbmVudERpZE1vdW50IG9yIGNvbXBvbmVudERpZFVwZGF0ZVxyXG4gICAgICAgIC8vIGxpZmVjeWNsZSBtZXRob2RzLCBhbmQgUmVhY3QgZG9lc24ndCBhbGxvdyBjYWxsaW5nIGZsdXNoU3luYyBmcm9tIGluc2lkZVxyXG4gICAgICAgIC8vIGEgbGlmZWN5Y2xlIG1ldGhvZC5cclxuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICBmbHVzaFN5bmMoZm4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZm4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzZXRSZW5kZXJlcihpZCwgcmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLm1heWJlRmx1c2hTeW5jKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSgoeyByZW5kZXJlcnMgfSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIHJlbmRlcmVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnJlbmRlcmVycyxcclxuICAgICAgICAgICAgICAgICAgICBbaWRdOiByZW5kZXJlcixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHJlbW92ZVJlbmRlcmVyKGlkKSB7XHJcbiAgICAgICAgdGhpcy5tYXliZUZsdXNoU3luYygoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoKHsgcmVuZGVyZXJzIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRSZW5kZXJlcnMgPSB7IC4uLnJlbmRlcmVycyB9O1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIG5leHRSZW5kZXJlcnNbaWRdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVuZGVyZXJzOiBuZXh0UmVuZGVyZXJzIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgY29uc3QgeyBlZGl0b3IgfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgaWYgKCFlZGl0b3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFlZGl0b3IuaXNEZXN0cm95ZWQpIHtcclxuICAgICAgICAgICAgZWRpdG9yLnZpZXcuc2V0UHJvcHMoe1xyXG4gICAgICAgICAgICAgICAgbm9kZVZpZXdzOiB7fSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVkaXRvci5jb250ZW50Q29tcG9uZW50ID0gbnVsbDtcclxuICAgICAgICBpZiAoIWVkaXRvci5vcHRpb25zLmVsZW1lbnQuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBuZXdFbGVtZW50LmFwcGVuZCguLi5lZGl0b3Iub3B0aW9ucy5lbGVtZW50LmNoaWxkTm9kZXMpO1xyXG4gICAgICAgIGVkaXRvci5zZXRPcHRpb25zKHtcclxuICAgICAgICAgICAgZWxlbWVudDogbmV3RWxlbWVudCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7IGVkaXRvciwgLi4ucmVzdCB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyByZWY6IHRoaXMuZWRpdG9yQ29udGVudFJlZiwgLi4ucmVzdCB9KSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChQb3J0YWxzLCB7IHJlbmRlcmVyczogdGhpcy5zdGF0ZS5yZW5kZXJlcnMgfSkpKTtcclxuICAgIH1cclxufVxyXG4vLyBFZGl0b3JDb250ZW50IHNob3VsZCBiZSByZS1jcmVhdGVkIHdoZW5ldmVyIHRoZSBFZGl0b3IgaW5zdGFuY2UgY2hhbmdlc1xyXG5jb25zdCBFZGl0b3JDb250ZW50V2l0aEtleSA9IChwcm9wcykgPT4ge1xyXG4gICAgY29uc3Qga2V5ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDB4RkZGRkZGRkYpLnRvU3RyaW5nKCk7XHJcbiAgICB9LCBbcHJvcHMuZWRpdG9yXSk7XHJcbiAgICAvLyBDYW4ndCB1c2UgSlNYIGhlcmUgYmVjYXVzZSBpdCBjb25mbGljdHMgd2l0aCB0aGUgdHlwZSBkZWZpbml0aW9uIG9mIFZ1ZSdzIEpTWCwgc28gdXNlIGNyZWF0ZUVsZW1lbnRcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFB1cmVFZGl0b3JDb250ZW50LCB7IGtleSwgLi4ucHJvcHMgfSk7XHJcbn07XHJcbmNvbnN0IEVkaXRvckNvbnRlbnQgPSBSZWFjdC5tZW1vKEVkaXRvckNvbnRlbnRXaXRoS2V5KTtcblxuY2xhc3MgRWRpdG9yIGV4dGVuZHMgRWRpdG9yJDEge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRDb21wb25lbnQgPSBudWxsO1xyXG4gICAgfVxyXG59XG5cbmZ1bmN0aW9uIHVzZUZvcmNlVXBkYXRlKCkge1xyXG4gICAgY29uc3QgWywgc2V0VmFsdWVdID0gdXNlU3RhdGUoMCk7XHJcbiAgICByZXR1cm4gKCkgPT4gc2V0VmFsdWUodmFsdWUgPT4gdmFsdWUgKyAxKTtcclxufVxyXG5jb25zdCB1c2VFZGl0b3IgPSAob3B0aW9ucyA9IHt9LCBkZXBzID0gW10pID0+IHtcclxuICAgIGNvbnN0IFtlZGl0b3IsIHNldEVkaXRvcl0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IGZvcmNlVXBkYXRlID0gdXNlRm9yY2VVcGRhdGUoKTtcclxuICAgIGNvbnN0IHsgb25CZWZvcmVDcmVhdGUsIG9uQmx1ciwgb25DcmVhdGUsIG9uRGVzdHJveSwgb25Gb2N1cywgb25TZWxlY3Rpb25VcGRhdGUsIG9uVHJhbnNhY3Rpb24sIG9uVXBkYXRlLCB9ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IG9uQmVmb3JlQ3JlYXRlUmVmID0gdXNlUmVmKG9uQmVmb3JlQ3JlYXRlKTtcclxuICAgIGNvbnN0IG9uQmx1clJlZiA9IHVzZVJlZihvbkJsdXIpO1xyXG4gICAgY29uc3Qgb25DcmVhdGVSZWYgPSB1c2VSZWYob25DcmVhdGUpO1xyXG4gICAgY29uc3Qgb25EZXN0cm95UmVmID0gdXNlUmVmKG9uRGVzdHJveSk7XHJcbiAgICBjb25zdCBvbkZvY3VzUmVmID0gdXNlUmVmKG9uRm9jdXMpO1xyXG4gICAgY29uc3Qgb25TZWxlY3Rpb25VcGRhdGVSZWYgPSB1c2VSZWYob25TZWxlY3Rpb25VcGRhdGUpO1xyXG4gICAgY29uc3Qgb25UcmFuc2FjdGlvblJlZiA9IHVzZVJlZihvblRyYW5zYWN0aW9uKTtcclxuICAgIGNvbnN0IG9uVXBkYXRlUmVmID0gdXNlUmVmKG9uVXBkYXRlKTtcclxuICAgIC8vIFRoaXMgZWZmZWN0IHdpbGwgaGFuZGxlIHVwZGF0aW5nIHRoZSBlZGl0b3IgaW5zdGFuY2VcclxuICAgIC8vIHdoZW4gdGhlIGV2ZW50IGhhbmRsZXJzIGNoYW5nZS5cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFlZGl0b3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob25CZWZvcmVDcmVhdGUpIHtcclxuICAgICAgICAgICAgZWRpdG9yLm9mZignYmVmb3JlQ3JlYXRlJywgb25CZWZvcmVDcmVhdGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGVkaXRvci5vbignYmVmb3JlQ3JlYXRlJywgb25CZWZvcmVDcmVhdGUpO1xyXG4gICAgICAgICAgICBvbkJlZm9yZUNyZWF0ZVJlZi5jdXJyZW50ID0gb25CZWZvcmVDcmVhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvbkJsdXIpIHtcclxuICAgICAgICAgICAgZWRpdG9yLm9mZignYmx1cicsIG9uQmx1clJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgZWRpdG9yLm9uKCdibHVyJywgb25CbHVyKTtcclxuICAgICAgICAgICAgb25CbHVyUmVmLmN1cnJlbnQgPSBvbkJsdXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvbkNyZWF0ZSkge1xyXG4gICAgICAgICAgICBlZGl0b3Iub2ZmKCdjcmVhdGUnLCBvbkNyZWF0ZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgZWRpdG9yLm9uKCdjcmVhdGUnLCBvbkNyZWF0ZSk7XHJcbiAgICAgICAgICAgIG9uQ3JlYXRlUmVmLmN1cnJlbnQgPSBvbkNyZWF0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9uRGVzdHJveSkge1xyXG4gICAgICAgICAgICBlZGl0b3Iub2ZmKCdkZXN0cm95Jywgb25EZXN0cm95UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBlZGl0b3Iub24oJ2Rlc3Ryb3knLCBvbkRlc3Ryb3kpO1xyXG4gICAgICAgICAgICBvbkRlc3Ryb3lSZWYuY3VycmVudCA9IG9uRGVzdHJveTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9uRm9jdXMpIHtcclxuICAgICAgICAgICAgZWRpdG9yLm9mZignZm9jdXMnLCBvbkZvY3VzUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBlZGl0b3Iub24oJ2ZvY3VzJywgb25Gb2N1cyk7XHJcbiAgICAgICAgICAgIG9uRm9jdXNSZWYuY3VycmVudCA9IG9uRm9jdXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvblNlbGVjdGlvblVwZGF0ZSkge1xyXG4gICAgICAgICAgICBlZGl0b3Iub2ZmKCdzZWxlY3Rpb25VcGRhdGUnLCBvblNlbGVjdGlvblVwZGF0ZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgZWRpdG9yLm9uKCdzZWxlY3Rpb25VcGRhdGUnLCBvblNlbGVjdGlvblVwZGF0ZSk7XHJcbiAgICAgICAgICAgIG9uU2VsZWN0aW9uVXBkYXRlUmVmLmN1cnJlbnQgPSBvblNlbGVjdGlvblVwZGF0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9uVHJhbnNhY3Rpb24pIHtcclxuICAgICAgICAgICAgZWRpdG9yLm9mZigndHJhbnNhY3Rpb24nLCBvblRyYW5zYWN0aW9uUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBlZGl0b3Iub24oJ3RyYW5zYWN0aW9uJywgb25UcmFuc2FjdGlvbik7XHJcbiAgICAgICAgICAgIG9uVHJhbnNhY3Rpb25SZWYuY3VycmVudCA9IG9uVHJhbnNhY3Rpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvblVwZGF0ZSkge1xyXG4gICAgICAgICAgICBlZGl0b3Iub2ZmKCd1cGRhdGUnLCBvblVwZGF0ZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgZWRpdG9yLm9uKCd1cGRhdGUnLCBvblVwZGF0ZSk7XHJcbiAgICAgICAgICAgIG9uVXBkYXRlUmVmLmN1cnJlbnQgPSBvblVwZGF0ZTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbb25CZWZvcmVDcmVhdGUsIG9uQmx1ciwgb25DcmVhdGUsIG9uRGVzdHJveSwgb25Gb2N1cywgb25TZWxlY3Rpb25VcGRhdGUsIG9uVHJhbnNhY3Rpb24sIG9uVXBkYXRlLCBlZGl0b3JdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgbGV0IGlzTW91bnRlZCA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRWRpdG9yKG9wdGlvbnMpO1xyXG4gICAgICAgIHNldEVkaXRvcihpbnN0YW5jZSk7XHJcbiAgICAgICAgaW5zdGFuY2Uub24oJ3RyYW5zYWN0aW9uJywgKCkgPT4ge1xyXG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNb3VudGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlVXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlzTW91bnRlZCA9IGZhbHNlO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBkZXBzKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgZWRpdG9yID09PSBudWxsIHx8IGVkaXRvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWRpdG9yLmRlc3Ryb3koKTtcclxuICAgICAgICB9O1xyXG4gICAgfSwgW2VkaXRvcl0pO1xyXG4gICAgcmV0dXJuIGVkaXRvcjtcclxufTtcblxuY29uc3QgRWRpdG9yQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xyXG4gICAgZWRpdG9yOiBudWxsLFxyXG59KTtcclxuY29uc3QgRWRpdG9yQ29uc3VtZXIgPSBFZGl0b3JDb250ZXh0LkNvbnN1bWVyO1xyXG5jb25zdCB1c2VDdXJyZW50RWRpdG9yID0gKCkgPT4gdXNlQ29udGV4dChFZGl0b3JDb250ZXh0KTtcclxuY29uc3QgRWRpdG9yUHJvdmlkZXIgPSAoeyBjaGlsZHJlbiwgc2xvdEFmdGVyLCBzbG90QmVmb3JlLCAuLi5lZGl0b3JPcHRpb25zIH0pID0+IHtcclxuICAgIGNvbnN0IGVkaXRvciA9IHVzZUVkaXRvcihlZGl0b3JPcHRpb25zKTtcclxuICAgIGlmICghZWRpdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRWRpdG9yQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogeyBlZGl0b3IgfSB9LFxyXG4gICAgICAgIHNsb3RCZWZvcmUsXHJcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChFZGl0b3JDb25zdW1lciwgbnVsbCwgKHsgZWRpdG9yOiBjdXJyZW50RWRpdG9yIH0pID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KEVkaXRvckNvbnRlbnQsIHsgZWRpdG9yOiBjdXJyZW50RWRpdG9yIH0pKSksXHJcbiAgICAgICAgY2hpbGRyZW4sXHJcbiAgICAgICAgc2xvdEFmdGVyKSk7XHJcbn07XG5cbmNvbnN0IEJ1YmJsZU1lbnUgPSAocHJvcHMpID0+IHtcclxuICAgIGNvbnN0IFtlbGVtZW50LCBzZXRFbGVtZW50XSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgeyBlZGl0b3I6IGN1cnJlbnRFZGl0b3IgfSA9IHVzZUN1cnJlbnRFZGl0b3IoKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgIGlmICghZWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoKF9hID0gcHJvcHMuZWRpdG9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaXNEZXN0cm95ZWQpIHx8IChjdXJyZW50RWRpdG9yID09PSBudWxsIHx8IGN1cnJlbnRFZGl0b3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1cnJlbnRFZGl0b3IuaXNEZXN0cm95ZWQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeyBwbHVnaW5LZXkgPSAnYnViYmxlTWVudScsIGVkaXRvciwgdGlwcHlPcHRpb25zID0ge30sIHVwZGF0ZURlbGF5LCBzaG91bGRTaG93ID0gbnVsbCwgfSA9IHByb3BzO1xyXG4gICAgICAgIGNvbnN0IG1lbnVFZGl0b3IgPSBlZGl0b3IgfHwgY3VycmVudEVkaXRvcjtcclxuICAgICAgICBpZiAoIW1lbnVFZGl0b3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdCdWJibGVNZW51IGNvbXBvbmVudCBpcyBub3QgcmVuZGVyZWQgaW5zaWRlIG9mIGFuIGVkaXRvciBjb21wb25lbnQgb3IgZG9lcyBub3QgaGF2ZSBlZGl0b3IgcHJvcC4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwbHVnaW4gPSBCdWJibGVNZW51UGx1Z2luKHtcclxuICAgICAgICAgICAgdXBkYXRlRGVsYXksXHJcbiAgICAgICAgICAgIGVkaXRvcjogbWVudUVkaXRvcixcclxuICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgcGx1Z2luS2V5LFxyXG4gICAgICAgICAgICBzaG91bGRTaG93LFxyXG4gICAgICAgICAgICB0aXBweU9wdGlvbnMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbWVudUVkaXRvci5yZWdpc3RlclBsdWdpbihwbHVnaW4pO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiBtZW51RWRpdG9yLnVucmVnaXN0ZXJQbHVnaW4ocGx1Z2luS2V5KTtcclxuICAgIH0sIFtwcm9wcy5lZGl0b3IsIGN1cnJlbnRFZGl0b3IsIGVsZW1lbnRdKTtcclxuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHJlZjogc2V0RWxlbWVudCwgY2xhc3NOYW1lOiBwcm9wcy5jbGFzc05hbWUsIHN0eWxlOiB7IHZpc2liaWxpdHk6ICdoaWRkZW4nIH0gfSwgcHJvcHMuY2hpbGRyZW4pKTtcclxufTtcblxuY29uc3QgRmxvYXRpbmdNZW51ID0gKHByb3BzKSA9PiB7XHJcbiAgICBjb25zdCBbZWxlbWVudCwgc2V0RWxlbWVudF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IHsgZWRpdG9yOiBjdXJyZW50RWRpdG9yIH0gPSB1c2VDdXJyZW50RWRpdG9yKCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHZhciBfYTtcclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKChfYSA9IHByb3BzLmVkaXRvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlzRGVzdHJveWVkKSB8fCAoY3VycmVudEVkaXRvciA9PT0gbnVsbCB8fCBjdXJyZW50RWRpdG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXJyZW50RWRpdG9yLmlzRGVzdHJveWVkKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHsgcGx1Z2luS2V5ID0gJ2Zsb2F0aW5nTWVudScsIGVkaXRvciwgdGlwcHlPcHRpb25zID0ge30sIHNob3VsZFNob3cgPSBudWxsLCB9ID0gcHJvcHM7XHJcbiAgICAgICAgY29uc3QgbWVudUVkaXRvciA9IGVkaXRvciB8fCBjdXJyZW50RWRpdG9yO1xyXG4gICAgICAgIGlmICghbWVudUVkaXRvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Zsb2F0aW5nTWVudSBjb21wb25lbnQgaXMgbm90IHJlbmRlcmVkIGluc2lkZSBvZiBhbiBlZGl0b3IgY29tcG9uZW50IG9yIGRvZXMgbm90IGhhdmUgZWRpdG9yIHByb3AuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcGx1Z2luID0gRmxvYXRpbmdNZW51UGx1Z2luKHtcclxuICAgICAgICAgICAgcGx1Z2luS2V5LFxyXG4gICAgICAgICAgICBlZGl0b3I6IG1lbnVFZGl0b3IsXHJcbiAgICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICAgIHRpcHB5T3B0aW9ucyxcclxuICAgICAgICAgICAgc2hvdWxkU2hvdyxcclxuICAgICAgICB9KTtcclxuICAgICAgICBtZW51RWRpdG9yLnJlZ2lzdGVyUGx1Z2luKHBsdWdpbik7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IG1lbnVFZGl0b3IudW5yZWdpc3RlclBsdWdpbihwbHVnaW5LZXkpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIHByb3BzLmVkaXRvcixcclxuICAgICAgICBjdXJyZW50RWRpdG9yLFxyXG4gICAgICAgIGVsZW1lbnQsXHJcbiAgICBdKTtcclxuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHJlZjogc2V0RWxlbWVudCwgY2xhc3NOYW1lOiBwcm9wcy5jbGFzc05hbWUsIHN0eWxlOiB7IHZpc2liaWxpdHk6ICdoaWRkZW4nIH0gfSwgcHJvcHMuY2hpbGRyZW4pKTtcclxufTtcblxuY29uc3QgUmVhY3ROb2RlVmlld0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcclxuICAgIG9uRHJhZ1N0YXJ0OiB1bmRlZmluZWQsXHJcbn0pO1xyXG5jb25zdCB1c2VSZWFjdE5vZGVWaWV3ID0gKCkgPT4gdXNlQ29udGV4dChSZWFjdE5vZGVWaWV3Q29udGV4dCk7XG5cbmNvbnN0IE5vZGVWaWV3Q29udGVudCA9IHByb3BzID0+IHtcclxuICAgIGNvbnN0IFRhZyA9IHByb3BzLmFzIHx8ICdkaXYnO1xyXG4gICAgY29uc3QgeyBub2RlVmlld0NvbnRlbnRSZWYgfSA9IHVzZVJlYWN0Tm9kZVZpZXcoKTtcclxuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChUYWcsIHsgLi4ucHJvcHMsIHJlZjogbm9kZVZpZXdDb250ZW50UmVmLCBcImRhdGEtbm9kZS12aWV3LWNvbnRlbnRcIjogXCJcIiwgc3R5bGU6IHtcclxuICAgICAgICAgICAgd2hpdGVTcGFjZTogJ3ByZS13cmFwJyxcclxuICAgICAgICAgICAgLi4ucHJvcHMuc3R5bGUsXHJcbiAgICAgICAgfSB9KSk7XHJcbn07XG5cbmNvbnN0IE5vZGVWaWV3V3JhcHBlciA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcclxuICAgIGNvbnN0IHsgb25EcmFnU3RhcnQgfSA9IHVzZVJlYWN0Tm9kZVZpZXcoKTtcclxuICAgIGNvbnN0IFRhZyA9IHByb3BzLmFzIHx8ICdkaXYnO1xyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRhZywgeyAuLi5wcm9wcywgcmVmOiByZWYsIFwiZGF0YS1ub2RlLXZpZXctd3JhcHBlclwiOiBcIlwiLCBvbkRyYWdTdGFydDogb25EcmFnU3RhcnQsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3JtYWwnLFxyXG4gICAgICAgICAgICAuLi5wcm9wcy5zdHlsZSxcclxuICAgICAgICB9IH0pKTtcclxufSk7XG5cbmZ1bmN0aW9uIGlzQ2xhc3NDb21wb25lbnQoQ29tcG9uZW50KSB7XHJcbiAgICByZXR1cm4gISEodHlwZW9mIENvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJ1xyXG4gICAgICAgICYmIENvbXBvbmVudC5wcm90b3R5cGVcclxuICAgICAgICAmJiBDb21wb25lbnQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xyXG59XHJcbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZkNvbXBvbmVudChDb21wb25lbnQpIHtcclxuICAgIHZhciBfYTtcclxuICAgIHJldHVybiAhISh0eXBlb2YgQ29tcG9uZW50ID09PSAnb2JqZWN0J1xyXG4gICAgICAgICYmICgoX2EgPSBDb21wb25lbnQuJCR0eXBlb2YpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b1N0cmluZygpKSA9PT0gJ1N5bWJvbChyZWFjdC5mb3J3YXJkX3JlZiknKTtcclxufVxyXG5jbGFzcyBSZWFjdFJlbmRlcmVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgeyBlZGl0b3IsIHByb3BzID0ge30sIGFzID0gJ2RpdicsIGNsYXNzTmFtZSA9ICcnLCBhdHRycywgfSkge1xyXG4gICAgICAgIHRoaXMucmVmID0gbnVsbDtcclxuICAgICAgICB0aGlzLmlkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMHhGRkZGRkZGRikudG9TdHJpbmcoKTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcclxuICAgICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcclxuICAgICAgICB0aGlzLnByb3BzID0gcHJvcHM7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChhcyk7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3JlYWN0LXJlbmRlcmVyJyk7XHJcbiAgICAgICAgaWYgKGNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi5jbGFzc05hbWUuc3BsaXQoJyAnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhdHRycykge1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIGF0dHJzW2tleV0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH1cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IENvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50O1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcclxuICAgICAgICBpZiAoaXNDbGFzc0NvbXBvbmVudChDb21wb25lbnQpIHx8IGlzRm9yd2FyZFJlZkNvbXBvbmVudChDb21wb25lbnQpKSB7XHJcbiAgICAgICAgICAgIHByb3BzLnJlZiA9IChyZWYpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmID0gcmVmO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlYWN0RWxlbWVudCA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCB7IC4uLnByb3BzIH0pO1xyXG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZWRpdG9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29udGVudENvbXBvbmVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnNldFJlbmRlcmVyKHRoaXMuaWQsIHRoaXMpO1xyXG4gICAgfVxyXG4gICAgdXBkYXRlUHJvcHMocHJvcHMgPSB7fSkge1xyXG4gICAgICAgIHRoaXMucHJvcHMgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMucHJvcHMsXHJcbiAgICAgICAgICAgIC4uLnByb3BzLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH1cclxuICAgIGRlc3Ryb3koKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmVkaXRvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbnRlbnRDb21wb25lbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5yZW1vdmVSZW5kZXJlcih0aGlzLmlkKTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBSZWFjdE5vZGVWaWV3IGV4dGVuZHMgTm9kZVZpZXcge1xyXG4gICAgbW91bnQoKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7XHJcbiAgICAgICAgICAgIGVkaXRvcjogdGhpcy5lZGl0b3IsXHJcbiAgICAgICAgICAgIG5vZGU6IHRoaXMubm9kZSxcclxuICAgICAgICAgICAgZGVjb3JhdGlvbnM6IHRoaXMuZGVjb3JhdGlvbnMsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiB0aGlzLmV4dGVuc2lvbixcclxuICAgICAgICAgICAgZ2V0UG9zOiAoKSA9PiB0aGlzLmdldFBvcygpLFxyXG4gICAgICAgICAgICB1cGRhdGVBdHRyaWJ1dGVzOiAoYXR0cmlidXRlcyA9IHt9KSA9PiB0aGlzLnVwZGF0ZUF0dHJpYnV0ZXMoYXR0cmlidXRlcyksXHJcbiAgICAgICAgICAgIGRlbGV0ZU5vZGU6ICgpID0+IHRoaXMuZGVsZXRlTm9kZSgpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBvbmVudC5kaXNwbGF5TmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjYXBpdGFsaXplRmlyc3RDaGFyID0gKHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmRpc3BsYXlOYW1lID0gY2FwaXRhbGl6ZUZpcnN0Q2hhcih0aGlzLmV4dGVuc2lvbi5uYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgUmVhY3ROb2RlVmlld1Byb3ZpZGVyID0gY29tcG9uZW50UHJvcHMgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBDb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudDtcclxuICAgICAgICAgICAgY29uc3Qgb25EcmFnU3RhcnQgPSB0aGlzLm9uRHJhZ1N0YXJ0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGVWaWV3Q29udGVudFJlZiA9IGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgJiYgdGhpcy5jb250ZW50RE9NRWxlbWVudCAmJiBlbGVtZW50LmZpcnN0Q2hpbGQgIT09IHRoaXMuY29udGVudERPTUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudERPTUVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0Tm9kZVZpZXdDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiB7IG9uRHJhZ1N0YXJ0LCBub2RlVmlld0NvbnRlbnRSZWYgfSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCB7IC4uLmNvbXBvbmVudFByb3BzIH0pKSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgUmVhY3ROb2RlVmlld1Byb3ZpZGVyLmRpc3BsYXlOYW1lID0gJ1JlYWN0Tm9kZVZpZXcnO1xyXG4gICAgICAgIHRoaXMuY29udGVudERPTUVsZW1lbnQgPSB0aGlzLm5vZGUuaXNMZWFmXHJcbiAgICAgICAgICAgID8gbnVsbFxyXG4gICAgICAgICAgICA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5ub2RlLmlzSW5saW5lID8gJ3NwYW4nIDogJ2RpdicpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRET01FbGVtZW50KSB7XHJcbiAgICAgICAgICAgIC8vIEZvciBzb21lIHJlYXNvbiB0aGUgd2hpdGVTcGFjZSBwcm9wIGlzIG5vdCBpbmhlcml0ZWQgcHJvcGVybHkgaW4gQ2hyb21lIGFuZCBTYWZhcmlcclxuICAgICAgICAgICAgLy8gV2l0aCB0aGlzIGZpeCBpdCBzZWVtcyB0byB3b3JrIGZpbmVcclxuICAgICAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdWViZXJkb3Npcy90aXB0YXAvaXNzdWVzLzExOTdcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50RE9NRWxlbWVudC5zdHlsZS53aGl0ZVNwYWNlID0gJ2luaGVyaXQnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgYXMgPSB0aGlzLm5vZGUuaXNJbmxpbmUgPyAnc3BhbicgOiAnZGl2JztcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFzKSB7XHJcbiAgICAgICAgICAgIGFzID0gdGhpcy5vcHRpb25zLmFzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB7IGNsYXNzTmFtZSA9ICcnIH0gPSB0aGlzLm9wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3Rpb25VcGRhdGUgPSB0aGlzLmhhbmRsZVNlbGVjdGlvblVwZGF0ZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLm9uKCdzZWxlY3Rpb25VcGRhdGUnLCB0aGlzLmhhbmRsZVNlbGVjdGlvblVwZGF0ZSk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IG5ldyBSZWFjdFJlbmRlcmVyKFJlYWN0Tm9kZVZpZXdQcm92aWRlciwge1xyXG4gICAgICAgICAgICBlZGl0b3I6IHRoaXMuZWRpdG9yLFxyXG4gICAgICAgICAgICBwcm9wcyxcclxuICAgICAgICAgICAgYXMsXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogYG5vZGUtJHt0aGlzLm5vZGUudHlwZS5uYW1lfSAke2NsYXNzTmFtZX1gLnRyaW0oKSxcclxuICAgICAgICAgICAgYXR0cnM6IHRoaXMub3B0aW9ucy5hdHRycyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGdldCBkb20oKSB7XHJcbiAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgIGlmICh0aGlzLnJlbmRlcmVyLmVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGRcclxuICAgICAgICAgICAgJiYgISgoX2EgPSB0aGlzLnJlbmRlcmVyLmVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5oYXNBdHRyaWJ1dGUoJ2RhdGEtbm9kZS12aWV3LXdyYXBwZXInKSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIE5vZGVWaWV3V3JhcHBlciBjb21wb25lbnQgZm9yIHlvdXIgbm9kZSB2aWV3LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5lbGVtZW50O1xyXG4gICAgfVxyXG4gICAgZ2V0IGNvbnRlbnRET00oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubm9kZS5pc0xlYWYpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRET01FbGVtZW50O1xyXG4gICAgfVxyXG4gICAgaGFuZGxlU2VsZWN0aW9uVXBkYXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHsgZnJvbSwgdG8gfSA9IHRoaXMuZWRpdG9yLnN0YXRlLnNlbGVjdGlvbjtcclxuICAgICAgICBpZiAoZnJvbSA8PSB0aGlzLmdldFBvcygpICYmIHRvID49IHRoaXMuZ2V0UG9zKCkgKyB0aGlzLm5vZGUubm9kZVNpemUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVuZGVyZXIucHJvcHMuc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdE5vZGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5yZW5kZXJlci5wcm9wcy5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGVzZWxlY3ROb2RlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdXBkYXRlKG5vZGUsIGRlY29yYXRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlUHJvcHMgPSAocHJvcHMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVQcm9wcyhwcm9wcyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobm9kZS50eXBlICE9PSB0aGlzLm5vZGUudHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLnVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBjb25zdCBvbGROb2RlID0gdGhpcy5ub2RlO1xyXG4gICAgICAgICAgICBjb25zdCBvbGREZWNvcmF0aW9ucyA9IHRoaXMuZGVjb3JhdGlvbnM7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZSA9IG5vZGU7XHJcbiAgICAgICAgICAgIHRoaXMuZGVjb3JhdGlvbnMgPSBkZWNvcmF0aW9ucztcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy51cGRhdGUoe1xyXG4gICAgICAgICAgICAgICAgb2xkTm9kZSxcclxuICAgICAgICAgICAgICAgIG9sZERlY29yYXRpb25zLFxyXG4gICAgICAgICAgICAgICAgbmV3Tm9kZTogbm9kZSxcclxuICAgICAgICAgICAgICAgIG5ld0RlY29yYXRpb25zOiBkZWNvcmF0aW9ucyxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZVByb3BzOiAoKSA9PiB1cGRhdGVQcm9wcyh7IG5vZGUsIGRlY29yYXRpb25zIH0pLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vZGUgPT09IHRoaXMubm9kZSAmJiB0aGlzLmRlY29yYXRpb25zID09PSBkZWNvcmF0aW9ucykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ub2RlID0gbm9kZTtcclxuICAgICAgICB0aGlzLmRlY29yYXRpb25zID0gZGVjb3JhdGlvbnM7XHJcbiAgICAgICAgdXBkYXRlUHJvcHMoeyBub2RlLCBkZWNvcmF0aW9ucyB9KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHNlbGVjdE5vZGUoKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVQcm9wcyh7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdQcm9zZU1pcnJvci1zZWxlY3RlZG5vZGUnKTtcclxuICAgIH1cclxuICAgIGRlc2VsZWN0Tm9kZSgpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVByb3BzKHtcclxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdQcm9zZU1pcnJvci1zZWxlY3RlZG5vZGUnKTtcclxuICAgIH1cclxuICAgIGRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5kZXN0cm95KCk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iub2ZmKCdzZWxlY3Rpb25VcGRhdGUnLCB0aGlzLmhhbmRsZVNlbGVjdGlvblVwZGF0ZSk7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RE9NRWxlbWVudCA9IG51bGw7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gUmVhY3ROb2RlVmlld1JlbmRlcmVyKGNvbXBvbmVudCwgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIChwcm9wcykgPT4ge1xyXG4gICAgICAgIC8vIHRyeSB0byBnZXQgdGhlIHBhcmVudCBjb21wb25lbnRcclxuICAgICAgICAvLyB0aGlzIGlzIGltcG9ydGFudCBmb3IgdnVlIGRldnRvb2xzIHRvIHNob3cgdGhlIGNvbXBvbmVudCBoaWVyYXJjaHkgY29ycmVjdGx5XHJcbiAgICAgICAgLy8gbWF5YmUgaXTigJlzIGB1bmRlZmluZWRgIGJlY2F1c2UgPGVkaXRvci1jb250ZW50PiBpc27igJl0IHJlbmRlcmVkIHlldFxyXG4gICAgICAgIGlmICghcHJvcHMuZWRpdG9yLmNvbnRlbnRDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFJlYWN0Tm9kZVZpZXcoY29tcG9uZW50LCBwcm9wcywgb3B0aW9ucyk7XHJcbiAgICB9O1xyXG59XG5cbmV4cG9ydCB7IEJ1YmJsZU1lbnUsIEVkaXRvciwgRWRpdG9yQ29uc3VtZXIsIEVkaXRvckNvbnRlbnQsIEVkaXRvckNvbnRleHQsIEVkaXRvclByb3ZpZGVyLCBGbG9hdGluZ01lbnUsIE5vZGVWaWV3Q29udGVudCwgTm9kZVZpZXdXcmFwcGVyLCBQdXJlRWRpdG9yQ29udGVudCwgUmVhY3ROb2RlVmlld1JlbmRlcmVyLCBSZWFjdFJlbmRlcmVyLCB1c2VDdXJyZW50RWRpdG9yLCB1c2VFZGl0b3IgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwiaW1wb3J0IHsgTm9kZSwgbWVyZ2VBdHRyaWJ1dGVzLCB3cmFwcGluZ0lucHV0UnVsZSB9IGZyb20gJ0B0aXB0YXAvY29yZSc7XG5cbmNvbnN0IGlucHV0UmVnZXggPSAvXlxccyo+XFxzJC87XHJcbmNvbnN0IEJsb2NrcXVvdGUgPSBOb2RlLmNyZWF0ZSh7XHJcbiAgICBuYW1lOiAnYmxvY2txdW90ZScsXHJcbiAgICBhZGRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIEhUTUxBdHRyaWJ1dGVzOiB7fSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGNvbnRlbnQ6ICdibG9jaysnLFxyXG4gICAgZ3JvdXA6ICdibG9jaycsXHJcbiAgICBkZWZpbmluZzogdHJ1ZSxcclxuICAgIHBhcnNlSFRNTCgpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7IHRhZzogJ2Jsb2NrcXVvdGUnIH0sXHJcbiAgICAgICAgXTtcclxuICAgIH0sXHJcbiAgICByZW5kZXJIVE1MKHsgSFRNTEF0dHJpYnV0ZXMgfSkge1xyXG4gICAgICAgIHJldHVybiBbJ2Jsb2NrcXVvdGUnLCBtZXJnZUF0dHJpYnV0ZXModGhpcy5vcHRpb25zLkhUTUxBdHRyaWJ1dGVzLCBIVE1MQXR0cmlidXRlcyksIDBdO1xyXG4gICAgfSxcclxuICAgIGFkZENvbW1hbmRzKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNldEJsb2NrcXVvdGU6ICgpID0+ICh7IGNvbW1hbmRzIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kcy53cmFwSW4odGhpcy5uYW1lKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdG9nZ2xlQmxvY2txdW90ZTogKCkgPT4gKHsgY29tbWFuZHMgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnRvZ2dsZVdyYXAodGhpcy5uYW1lKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdW5zZXRCbG9ja3F1b3RlOiAoKSA9PiAoeyBjb21tYW5kcyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZHMubGlmdCh0aGlzLm5hbWUpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgYWRkS2V5Ym9hcmRTaG9ydGN1dHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ01vZC1TaGlmdC1iJzogKCkgPT4gdGhpcy5lZGl0b3IuY29tbWFuZHMudG9nZ2xlQmxvY2txdW90ZSgpLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgYWRkSW5wdXRSdWxlcygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB3cmFwcGluZ0lucHV0UnVsZSh7XHJcbiAgICAgICAgICAgICAgICBmaW5kOiBpbnB1dFJlZ2V4LFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICBdO1xyXG4gICAgfSxcclxufSk7XG5cbmV4cG9ydCB7IEJsb2NrcXVvdGUsIEJsb2NrcXVvdGUgYXMgZGVmYXVsdCwgaW5wdXRSZWdleCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLCJpbXBvcnQgeyBNYXJrLCBtZXJnZUF0dHJpYnV0ZXMsIG1hcmtJbnB1dFJ1bGUsIG1hcmtQYXN0ZVJ1bGUgfSBmcm9tICdAdGlwdGFwL2NvcmUnO1xuXG5jb25zdCBzdGFySW5wdXRSZWdleCA9IC8oPzpefFxccykoKD86XFwqXFwqKSgoPzpbXipdKykpKD86XFwqXFwqKSkkLztcclxuY29uc3Qgc3RhclBhc3RlUmVnZXggPSAvKD86XnxcXHMpKCg/OlxcKlxcKikoKD86W14qXSspKSg/OlxcKlxcKikpL2c7XHJcbmNvbnN0IHVuZGVyc2NvcmVJbnB1dFJlZ2V4ID0gLyg/Ol58XFxzKSgoPzpfXykoKD86W15fX10rKSkoPzpfXykpJC87XHJcbmNvbnN0IHVuZGVyc2NvcmVQYXN0ZVJlZ2V4ID0gLyg/Ol58XFxzKSgoPzpfXykoKD86W15fX10rKSkoPzpfXykpL2c7XHJcbmNvbnN0IEJvbGQgPSBNYXJrLmNyZWF0ZSh7XHJcbiAgICBuYW1lOiAnYm9sZCcsXHJcbiAgICBhZGRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIEhUTUxBdHRyaWJ1dGVzOiB7fSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIHBhcnNlSFRNTCgpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0YWc6ICdzdHJvbmcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0YWc6ICdiJyxcclxuICAgICAgICAgICAgICAgIGdldEF0dHJzOiBub2RlID0+IG5vZGUuc3R5bGUuZm9udFdlaWdodCAhPT0gJ25vcm1hbCcgJiYgbnVsbCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3R5bGU6ICdmb250LXdlaWdodCcsXHJcbiAgICAgICAgICAgICAgICBnZXRBdHRyczogdmFsdWUgPT4gL14oYm9sZChlcik/fFs1LTldXFxkezIsfSkkLy50ZXN0KHZhbHVlKSAmJiBudWxsLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG4gICAgcmVuZGVySFRNTCh7IEhUTUxBdHRyaWJ1dGVzIH0pIHtcclxuICAgICAgICByZXR1cm4gWydzdHJvbmcnLCBtZXJnZUF0dHJpYnV0ZXModGhpcy5vcHRpb25zLkhUTUxBdHRyaWJ1dGVzLCBIVE1MQXR0cmlidXRlcyksIDBdO1xyXG4gICAgfSxcclxuICAgIGFkZENvbW1hbmRzKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNldEJvbGQ6ICgpID0+ICh7IGNvbW1hbmRzIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kcy5zZXRNYXJrKHRoaXMubmFtZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRvZ2dsZUJvbGQ6ICgpID0+ICh7IGNvbW1hbmRzIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kcy50b2dnbGVNYXJrKHRoaXMubmFtZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHVuc2V0Qm9sZDogKCkgPT4gKHsgY29tbWFuZHMgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnVuc2V0TWFyayh0aGlzLm5hbWUpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgYWRkS2V5Ym9hcmRTaG9ydGN1dHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ01vZC1iJzogKCkgPT4gdGhpcy5lZGl0b3IuY29tbWFuZHMudG9nZ2xlQm9sZCgpLFxyXG4gICAgICAgICAgICAnTW9kLUInOiAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy50b2dnbGVCb2xkKCksXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBhZGRJbnB1dFJ1bGVzKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIG1hcmtJbnB1dFJ1bGUoe1xyXG4gICAgICAgICAgICAgICAgZmluZDogc3RhcklucHV0UmVnZXgsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBtYXJrSW5wdXRSdWxlKHtcclxuICAgICAgICAgICAgICAgIGZpbmQ6IHVuZGVyc2NvcmVJbnB1dFJlZ2V4LFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICBdO1xyXG4gICAgfSxcclxuICAgIGFkZFBhc3RlUnVsZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgbWFya1Bhc3RlUnVsZSh7XHJcbiAgICAgICAgICAgICAgICBmaW5kOiBzdGFyUGFzdGVSZWdleCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG1hcmtQYXN0ZVJ1bGUoe1xyXG4gICAgICAgICAgICAgICAgZmluZDogdW5kZXJzY29yZVBhc3RlUmVnZXgsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG59KTtcblxuZXhwb3J0IHsgQm9sZCwgQm9sZCBhcyBkZWZhdWx0LCBzdGFySW5wdXRSZWdleCwgc3RhclBhc3RlUmVnZXgsIHVuZGVyc2NvcmVJbnB1dFJlZ2V4LCB1bmRlcnNjb3JlUGFzdGVSZWdleCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLCJpbXBvcnQgeyBOb2RlLCBtZXJnZUF0dHJpYnV0ZXMsIE1hcmssIGdldE1hcmtBdHRyaWJ1dGVzLCB3cmFwcGluZ0lucHV0UnVsZSB9IGZyb20gJ0B0aXB0YXAvY29yZSc7XG5cbmNvbnN0IExpc3RJdGVtID0gTm9kZS5jcmVhdGUoe1xyXG4gICAgbmFtZTogJ2xpc3RJdGVtJyxcclxuICAgIGFkZE9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgSFRNTEF0dHJpYnV0ZXM6IHt9LFxyXG4gICAgICAgICAgICBidWxsZXRMaXN0VHlwZU5hbWU6ICdidWxsZXRMaXN0JyxcclxuICAgICAgICAgICAgb3JkZXJlZExpc3RUeXBlTmFtZTogJ29yZGVyZWRMaXN0JyxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGNvbnRlbnQ6ICdwYXJhZ3JhcGggYmxvY2sqJyxcclxuICAgIGRlZmluaW5nOiB0cnVlLFxyXG4gICAgcGFyc2VIVE1MKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRhZzogJ2xpJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgfSxcclxuICAgIHJlbmRlckhUTUwoeyBIVE1MQXR0cmlidXRlcyB9KSB7XHJcbiAgICAgICAgcmV0dXJuIFsnbGknLCBtZXJnZUF0dHJpYnV0ZXModGhpcy5vcHRpb25zLkhUTUxBdHRyaWJ1dGVzLCBIVE1MQXR0cmlidXRlcyksIDBdO1xyXG4gICAgfSxcclxuICAgIGFkZEtleWJvYXJkU2hvcnRjdXRzKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIEVudGVyOiAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy5zcGxpdExpc3RJdGVtKHRoaXMubmFtZSksXHJcbiAgICAgICAgICAgIFRhYjogKCkgPT4gdGhpcy5lZGl0b3IuY29tbWFuZHMuc2lua0xpc3RJdGVtKHRoaXMubmFtZSksXHJcbiAgICAgICAgICAgICdTaGlmdC1UYWInOiAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy5saWZ0TGlzdEl0ZW0odGhpcy5uYW1lKSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxufSk7XG5cbmNvbnN0IFRleHRTdHlsZSA9IE1hcmsuY3JlYXRlKHtcclxuICAgIG5hbWU6ICd0ZXh0U3R5bGUnLFxyXG4gICAgYWRkT3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBIVE1MQXR0cmlidXRlczoge30sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBwYXJzZUhUTUwoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGFnOiAnc3BhbicsXHJcbiAgICAgICAgICAgICAgICBnZXRBdHRyczogZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzU3R5bGVzID0gZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3N0eWxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNTdHlsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge307XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG4gICAgcmVuZGVySFRNTCh7IEhUTUxBdHRyaWJ1dGVzIH0pIHtcclxuICAgICAgICByZXR1cm4gWydzcGFuJywgbWVyZ2VBdHRyaWJ1dGVzKHRoaXMub3B0aW9ucy5IVE1MQXR0cmlidXRlcywgSFRNTEF0dHJpYnV0ZXMpLCAwXTtcclxuICAgIH0sXHJcbiAgICBhZGRDb21tYW5kcygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICByZW1vdmVFbXB0eVRleHRTdHlsZTogKCkgPT4gKHsgc3RhdGUsIGNvbW1hbmRzIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBnZXRNYXJrQXR0cmlidXRlcyhzdGF0ZSwgdGhpcy50eXBlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc1N0eWxlcyA9IE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpLnNvbWUoKFssIHZhbHVlXSkgPT4gISF2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGFzU3R5bGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZHMudW5zZXRNYXJrKHRoaXMubmFtZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbn0pO1xuXG5jb25zdCBpbnB1dFJlZ2V4ID0gL15cXHMqKFstKypdKVxccyQvO1xyXG5jb25zdCBCdWxsZXRMaXN0ID0gTm9kZS5jcmVhdGUoe1xyXG4gICAgbmFtZTogJ2J1bGxldExpc3QnLFxyXG4gICAgYWRkT3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpdGVtVHlwZU5hbWU6ICdsaXN0SXRlbScsXHJcbiAgICAgICAgICAgIEhUTUxBdHRyaWJ1dGVzOiB7fSxcclxuICAgICAgICAgICAga2VlcE1hcmtzOiBmYWxzZSxcclxuICAgICAgICAgICAga2VlcEF0dHJpYnV0ZXM6IGZhbHNlLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgZ3JvdXA6ICdibG9jayBsaXN0JyxcclxuICAgIGNvbnRlbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMub3B0aW9ucy5pdGVtVHlwZU5hbWV9K2A7XHJcbiAgICB9LFxyXG4gICAgcGFyc2VIVE1MKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHsgdGFnOiAndWwnIH0sXHJcbiAgICAgICAgXTtcclxuICAgIH0sXHJcbiAgICByZW5kZXJIVE1MKHsgSFRNTEF0dHJpYnV0ZXMgfSkge1xyXG4gICAgICAgIHJldHVybiBbJ3VsJywgbWVyZ2VBdHRyaWJ1dGVzKHRoaXMub3B0aW9ucy5IVE1MQXR0cmlidXRlcywgSFRNTEF0dHJpYnV0ZXMpLCAwXTtcclxuICAgIH0sXHJcbiAgICBhZGRDb21tYW5kcygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0b2dnbGVCdWxsZXRMaXN0OiAoKSA9PiAoeyBjb21tYW5kcywgY2hhaW4gfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5rZWVwQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFpbigpLnRvZ2dsZUxpc3QodGhpcy5uYW1lLCB0aGlzLm9wdGlvbnMuaXRlbVR5cGVOYW1lLCB0aGlzLm9wdGlvbnMua2VlcE1hcmtzKS51cGRhdGVBdHRyaWJ1dGVzKExpc3RJdGVtLm5hbWUsIHRoaXMuZWRpdG9yLmdldEF0dHJpYnV0ZXMoVGV4dFN0eWxlLm5hbWUpKS5ydW4oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kcy50b2dnbGVMaXN0KHRoaXMubmFtZSwgdGhpcy5vcHRpb25zLml0ZW1UeXBlTmFtZSwgdGhpcy5vcHRpb25zLmtlZXBNYXJrcyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBhZGRLZXlib2FyZFNob3J0Y3V0cygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnTW9kLVNoaWZ0LTgnOiAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy50b2dnbGVCdWxsZXRMaXN0KCksXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBhZGRJbnB1dFJ1bGVzKCkge1xyXG4gICAgICAgIGxldCBpbnB1dFJ1bGUgPSB3cmFwcGluZ0lucHV0UnVsZSh7XHJcbiAgICAgICAgICAgIGZpbmQ6IGlucHV0UmVnZXgsXHJcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmtlZXBNYXJrcyB8fCB0aGlzLm9wdGlvbnMua2VlcEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgaW5wdXRSdWxlID0gd3JhcHBpbmdJbnB1dFJ1bGUoe1xyXG4gICAgICAgICAgICAgICAgZmluZDogaW5wdXRSZWdleCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgICAgICAgICAgIGtlZXBNYXJrczogdGhpcy5vcHRpb25zLmtlZXBNYXJrcyxcclxuICAgICAgICAgICAgICAgIGtlZXBBdHRyaWJ1dGVzOiB0aGlzLm9wdGlvbnMua2VlcEF0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICBnZXRBdHRyaWJ1dGVzOiAoKSA9PiB7IHJldHVybiB0aGlzLmVkaXRvci5nZXRBdHRyaWJ1dGVzKFRleHRTdHlsZS5uYW1lKTsgfSxcclxuICAgICAgICAgICAgICAgIGVkaXRvcjogdGhpcy5lZGl0b3IsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBpbnB1dFJ1bGUsXHJcbiAgICAgICAgXTtcclxuICAgIH0sXHJcbn0pO1xuXG5leHBvcnQgeyBCdWxsZXRMaXN0LCBCdWxsZXRMaXN0IGFzIGRlZmF1bHQsIGlucHV0UmVnZXggfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwiaW1wb3J0IHsgTWFyaywgbWVyZ2VBdHRyaWJ1dGVzLCBtYXJrSW5wdXRSdWxlLCBtYXJrUGFzdGVSdWxlIH0gZnJvbSAnQHRpcHRhcC9jb3JlJztcblxuY29uc3QgaW5wdXRSZWdleCA9IC8oPzpefFxccykoKD86YCkoKD86W15gXSspKSg/OmApKSQvO1xyXG5jb25zdCBwYXN0ZVJlZ2V4ID0gLyg/Ol58XFxzKSgoPzpgKSgoPzpbXmBdKykpKD86YCkpL2c7XHJcbmNvbnN0IENvZGUgPSBNYXJrLmNyZWF0ZSh7XHJcbiAgICBuYW1lOiAnY29kZScsXHJcbiAgICBhZGRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIEhUTUxBdHRyaWJ1dGVzOiB7fSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGV4Y2x1ZGVzOiAnXycsXHJcbiAgICBjb2RlOiB0cnVlLFxyXG4gICAgZXhpdGFibGU6IHRydWUsXHJcbiAgICBwYXJzZUhUTUwoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgeyB0YWc6ICdjb2RlJyB9LFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG4gICAgcmVuZGVySFRNTCh7IEhUTUxBdHRyaWJ1dGVzIH0pIHtcclxuICAgICAgICByZXR1cm4gWydjb2RlJywgbWVyZ2VBdHRyaWJ1dGVzKHRoaXMub3B0aW9ucy5IVE1MQXR0cmlidXRlcywgSFRNTEF0dHJpYnV0ZXMpLCAwXTtcclxuICAgIH0sXHJcbiAgICBhZGRDb21tYW5kcygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBzZXRDb2RlOiAoKSA9PiAoeyBjb21tYW5kcyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZHMuc2V0TWFyayh0aGlzLm5hbWUpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b2dnbGVDb2RlOiAoKSA9PiAoeyBjb21tYW5kcyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZHMudG9nZ2xlTWFyayh0aGlzLm5hbWUpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB1bnNldENvZGU6ICgpID0+ICh7IGNvbW1hbmRzIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kcy51bnNldE1hcmsodGhpcy5uYW1lKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGFkZEtleWJvYXJkU2hvcnRjdXRzKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdNb2QtZSc6ICgpID0+IHRoaXMuZWRpdG9yLmNvbW1hbmRzLnRvZ2dsZUNvZGUoKSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGFkZElucHV0UnVsZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgbWFya0lucHV0UnVsZSh7XHJcbiAgICAgICAgICAgICAgICBmaW5kOiBpbnB1dFJlZ2V4LFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICBdO1xyXG4gICAgfSxcclxuICAgIGFkZFBhc3RlUnVsZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgbWFya1Bhc3RlUnVsZSh7XHJcbiAgICAgICAgICAgICAgICBmaW5kOiBwYXN0ZVJlZ2V4LFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICBdO1xyXG4gICAgfSxcclxufSk7XG5cbmV4cG9ydCB7IENvZGUsIENvZGUgYXMgZGVmYXVsdCwgaW5wdXRSZWdleCwgcGFzdGVSZWdleCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLCJpbXBvcnQgeyBOb2RlLCBtZXJnZUF0dHJpYnV0ZXMsIHRleHRibG9ja1R5cGVJbnB1dFJ1bGUgfSBmcm9tICdAdGlwdGFwL2NvcmUnO1xuaW1wb3J0IHsgUGx1Z2luLCBQbHVnaW5LZXksIFRleHRTZWxlY3Rpb24gfSBmcm9tICdAdGlwdGFwL3BtL3N0YXRlJztcblxuY29uc3QgYmFja3RpY2tJbnB1dFJlZ2V4ID0gL15gYGAoW2Etel0rKT9bXFxzXFxuXSQvO1xyXG5jb25zdCB0aWxkZUlucHV0UmVnZXggPSAvXn5+fihbYS16XSspP1tcXHNcXG5dJC87XHJcbmNvbnN0IENvZGVCbG9jayA9IE5vZGUuY3JlYXRlKHtcclxuICAgIG5hbWU6ICdjb2RlQmxvY2snLFxyXG4gICAgYWRkT3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsYW5ndWFnZUNsYXNzUHJlZml4OiAnbGFuZ3VhZ2UtJyxcclxuICAgICAgICAgICAgZXhpdE9uVHJpcGxlRW50ZXI6IHRydWUsXHJcbiAgICAgICAgICAgIGV4aXRPbkFycm93RG93bjogdHJ1ZSxcclxuICAgICAgICAgICAgSFRNTEF0dHJpYnV0ZXM6IHt9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgY29udGVudDogJ3RleHQqJyxcclxuICAgIG1hcmtzOiAnJyxcclxuICAgIGdyb3VwOiAnYmxvY2snLFxyXG4gICAgY29kZTogdHJ1ZSxcclxuICAgIGRlZmluaW5nOiB0cnVlLFxyXG4gICAgYWRkQXR0cmlidXRlcygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsYW5ndWFnZToge1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHBhcnNlSFRNTDogZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGFuZ3VhZ2VDbGFzc1ByZWZpeCB9ID0gdGhpcy5vcHRpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbLi4uKCgoX2EgPSBlbGVtZW50LmZpcnN0RWxlbWVudENoaWxkKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2xhc3NMaXN0KSB8fCBbXSldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlcyA9IGNsYXNzTmFtZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjbGFzc05hbWUgPT4gY2xhc3NOYW1lLnN0YXJ0c1dpdGgobGFuZ3VhZ2VDbGFzc1ByZWZpeCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoY2xhc3NOYW1lID0+IGNsYXNzTmFtZS5yZXBsYWNlKGxhbmd1YWdlQ2xhc3NQcmVmaXgsICcnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5ndWFnZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsYW5ndWFnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhbmd1YWdlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHJlbmRlcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIHBhcnNlSFRNTCgpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0YWc6ICdwcmUnLFxyXG4gICAgICAgICAgICAgICAgcHJlc2VydmVXaGl0ZXNwYWNlOiAnZnVsbCcsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgIH0sXHJcbiAgICByZW5kZXJIVE1MKHsgbm9kZSwgSFRNTEF0dHJpYnV0ZXMgfSkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICdwcmUnLFxyXG4gICAgICAgICAgICBtZXJnZUF0dHJpYnV0ZXModGhpcy5vcHRpb25zLkhUTUxBdHRyaWJ1dGVzLCBIVE1MQXR0cmlidXRlcyksXHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICdjb2RlJyxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzczogbm9kZS5hdHRycy5sYW5ndWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMub3B0aW9ucy5sYW5ndWFnZUNsYXNzUHJlZml4ICsgbm9kZS5hdHRycy5sYW5ndWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICBdO1xyXG4gICAgfSxcclxuICAgIGFkZENvbW1hbmRzKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNldENvZGVCbG9jazogYXR0cmlidXRlcyA9PiAoeyBjb21tYW5kcyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZHMuc2V0Tm9kZSh0aGlzLm5hbWUsIGF0dHJpYnV0ZXMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b2dnbGVDb2RlQmxvY2s6IGF0dHJpYnV0ZXMgPT4gKHsgY29tbWFuZHMgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnRvZ2dsZU5vZGUodGhpcy5uYW1lLCAncGFyYWdyYXBoJywgYXR0cmlidXRlcyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBhZGRLZXlib2FyZFNob3J0Y3V0cygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnTW9kLUFsdC1jJzogKCkgPT4gdGhpcy5lZGl0b3IuY29tbWFuZHMudG9nZ2xlQ29kZUJsb2NrKCksXHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSBjb2RlIGJsb2NrIHdoZW4gYXQgc3RhcnQgb2YgZG9jdW1lbnQgb3IgY29kZSBibG9jayBpcyBlbXB0eVxyXG4gICAgICAgICAgICBCYWNrc3BhY2U6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZW1wdHksICRhbmNob3IgfSA9IHRoaXMuZWRpdG9yLnN0YXRlLnNlbGVjdGlvbjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXRTdGFydCA9ICRhbmNob3IucG9zID09PSAxO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlbXB0eSB8fCAkYW5jaG9yLnBhcmVudC50eXBlLm5hbWUgIT09IHRoaXMubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChpc0F0U3RhcnQgfHwgISRhbmNob3IucGFyZW50LnRleHRDb250ZW50Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVkaXRvci5jb21tYW5kcy5jbGVhck5vZGVzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIGV4aXQgbm9kZSBvbiB0cmlwbGUgZW50ZXJcclxuICAgICAgICAgICAgRW50ZXI6ICh7IGVkaXRvciB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5leGl0T25UcmlwbGVFbnRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhdGUgfSA9IGVkaXRvcjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBzdGF0ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgJGZyb20sIGVtcHR5IH0gPSBzZWxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5IHx8ICRmcm9tLnBhcmVudC50eXBlICE9PSB0aGlzLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F0RW5kID0gJGZyb20ucGFyZW50T2Zmc2V0ID09PSAkZnJvbS5wYXJlbnQubm9kZVNpemUgLSAyO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kc1dpdGhEb3VibGVOZXdsaW5lID0gJGZyb20ucGFyZW50LnRleHRDb250ZW50LmVuZHNXaXRoKCdcXG5cXG4nKTtcclxuICAgICAgICAgICAgICAgIGlmICghaXNBdEVuZCB8fCAhZW5kc1dpdGhEb3VibGVOZXdsaW5lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVkaXRvclxyXG4gICAgICAgICAgICAgICAgICAgIC5jaGFpbigpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNvbW1hbmQoKHsgdHIgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyLmRlbGV0ZSgkZnJvbS5wb3MgLSAyLCAkZnJvbS5wb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuZXhpdENvZGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIC5ydW4oKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8gZXhpdCBub2RlIG9uIGFycm93IGRvd25cclxuICAgICAgICAgICAgQXJyb3dEb3duOiAoeyBlZGl0b3IgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZXhpdE9uQXJyb3dEb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGF0ZSB9ID0gZWRpdG9yO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBzZWxlY3Rpb24sIGRvYyB9ID0gc3RhdGU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7ICRmcm9tLCBlbXB0eSB9ID0gc2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlbXB0eSB8fCAkZnJvbS5wYXJlbnQudHlwZSAhPT0gdGhpcy50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNBdEVuZCA9ICRmcm9tLnBhcmVudE9mZnNldCA9PT0gJGZyb20ucGFyZW50Lm5vZGVTaXplIC0gMjtcclxuICAgICAgICAgICAgICAgIGlmICghaXNBdEVuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyID0gJGZyb20uYWZ0ZXIoKTtcclxuICAgICAgICAgICAgICAgIGlmIChhZnRlciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZUFmdGVyID0gZG9jLm5vZGVBdChhZnRlcik7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZUFmdGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVkaXRvci5jb21tYW5kcy5leGl0Q29kZSgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgYWRkSW5wdXRSdWxlcygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB0ZXh0YmxvY2tUeXBlSW5wdXRSdWxlKHtcclxuICAgICAgICAgICAgICAgIGZpbmQ6IGJhY2t0aWNrSW5wdXRSZWdleCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgICAgICAgICAgIGdldEF0dHJpYnV0ZXM6IG1hdGNoID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IG1hdGNoWzFdLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB0ZXh0YmxvY2tUeXBlSW5wdXRSdWxlKHtcclxuICAgICAgICAgICAgICAgIGZpbmQ6IHRpbGRlSW5wdXRSZWdleCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgICAgICAgICAgIGdldEF0dHJpYnV0ZXM6IG1hdGNoID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IG1hdGNoWzFdLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG4gICAgYWRkUHJvc2VNaXJyb3JQbHVnaW5zKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIC8vIHRoaXMgcGx1Z2luIGNyZWF0ZXMgYSBjb2RlIGJsb2NrIGZvciBwYXN0ZWQgY29udGVudCBmcm9tIFZTIENvZGVcclxuICAgICAgICAgICAgLy8gd2UgY2FuIGFsc28gZGV0ZWN0IHRoZSBjb3BpZWQgY29kZSBsYW5ndWFnZVxyXG4gICAgICAgICAgICBuZXcgUGx1Z2luKHtcclxuICAgICAgICAgICAgICAgIGtleTogbmV3IFBsdWdpbktleSgnY29kZUJsb2NrVlNDb2RlSGFuZGxlcicpLFxyXG4gICAgICAgICAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVQYXN0ZTogKHZpZXcsIGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnQuY2xpcGJvYXJkRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbuKAmXQgY3JlYXRlIGEgbmV3IGNvZGUgYmxvY2sgd2l0aGluIGNvZGUgYmxvY2tzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvci5pc0FjdGl2ZSh0aGlzLnR5cGUubmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gZXZlbnQuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZzY29kZSA9IGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndnNjb2RlLWVkaXRvci1kYXRhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZzY29kZURhdGEgPSB2c2NvZGUgPyBKU09OLnBhcnNlKHZzY29kZSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlID0gdnNjb2RlRGF0YSA9PT0gbnVsbCB8fCB2c2NvZGVEYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2c2NvZGVEYXRhLm1vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGV4dCB8fCAhbGFuZ3VhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHRyIH0gPSB2aWV3LnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYW4gZW1wdHkgY29kZSBibG9ja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ci5yZXBsYWNlU2VsZWN0aW9uV2l0aCh0aGlzLnR5cGUuY3JlYXRlKHsgbGFuZ3VhZ2UgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwdXQgY3Vyc29yIGluc2lkZSB0aGUgbmV3bHkgY3JlYXRlZCBjb2RlIGJsb2NrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyLnNldFNlbGVjdGlvbihUZXh0U2VsZWN0aW9uLm5lYXIodHIuZG9jLnJlc29sdmUoTWF0aC5tYXgoMCwgdHIuc2VsZWN0aW9uLmZyb20gLSAyKSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHRleHQgdG8gY29kZSBibG9ja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJpcCBjYXJyaWFnZSByZXR1cm4gY2hhcnMgZnJvbSB0ZXh0IHBhc3RlZCBhcyBjb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL1Byb3NlTWlycm9yL3Byb3NlbWlycm9yLXZpZXcvY29tbWl0L2E1MGE2YmNjZWI0Y2U1MmFjOGZjYzYxNjI0ODhkODg3NTYxM2FhY2RcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHIuaW5zZXJ0VGV4dCh0ZXh0LnJlcGxhY2UoL1xcclxcbj8vZywgJ1xcbicpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmUgbWV0YSBpbmZvcm1hdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIHVzZWZ1bCBmb3Igb3RoZXIgcGx1Z2lucyB0aGF0IGRlcGVuZHMgb24gdGhlIHBhc3RlIGV2ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpa2UgdGhlIHBhc3RlIHJ1bGUgcGx1Z2luXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyLnNldE1ldGEoJ3Bhc3RlJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuZGlzcGF0Y2godHIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgXTtcclxuICAgIH0sXHJcbn0pO1xuXG5leHBvcnQgeyBDb2RlQmxvY2ssIGJhY2t0aWNrSW5wdXRSZWdleCwgQ29kZUJsb2NrIGFzIGRlZmF1bHQsIHRpbGRlSW5wdXRSZWdleCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLCJpbXBvcnQgeyBOb2RlIH0gZnJvbSAnQHRpcHRhcC9jb3JlJztcblxuY29uc3QgRG9jdW1lbnQgPSBOb2RlLmNyZWF0ZSh7XHJcbiAgICBuYW1lOiAnZG9jJyxcclxuICAgIHRvcE5vZGU6IHRydWUsXHJcbiAgICBjb250ZW50OiAnYmxvY2srJyxcclxufSk7XG5cbmV4cG9ydCB7IERvY3VtZW50LCBEb2N1bWVudCBhcyBkZWZhdWx0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsImltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcbmltcG9ydCB7IGRyb3BQb2ludCB9IGZyb20gJ3Byb3NlbWlycm9yLXRyYW5zZm9ybSc7XG5cbi8qKlxuQ3JlYXRlIGEgcGx1Z2luIHRoYXQsIHdoZW4gYWRkZWQgdG8gYSBQcm9zZU1pcnJvciBpbnN0YW5jZSxcbmNhdXNlcyBhIGRlY29yYXRpb24gdG8gc2hvdyB1cCBhdCB0aGUgZHJvcCBwb3NpdGlvbiB3aGVuIHNvbWV0aGluZ1xuaXMgZHJhZ2dlZCBvdmVyIHRoZSBlZGl0b3IuXG5cbk5vZGVzIG1heSBhZGQgYSBgZGlzYWJsZURyb3BDdXJzb3JgIHByb3BlcnR5IHRvIHRoZWlyIHNwZWMgdG9cbmNvbnRyb2wgdGhlIHNob3dpbmcgb2YgYSBkcm9wIGN1cnNvciBpbnNpZGUgdGhlbS4gVGhpcyBtYXkgYmUgYVxuYm9vbGVhbiBvciBhIGZ1bmN0aW9uLCB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aXRoIGEgdmlldyBhbmQgYVxucG9zaXRpb24sIGFuZCBzaG91bGQgcmV0dXJuIGEgYm9vbGVhbi5cbiovXG5mdW5jdGlvbiBkcm9wQ3Vyc29yKG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgUGx1Z2luKHtcbiAgICAgICAgdmlldyhlZGl0b3JWaWV3KSB7IHJldHVybiBuZXcgRHJvcEN1cnNvclZpZXcoZWRpdG9yVmlldywgb3B0aW9ucyk7IH1cbiAgICB9KTtcbn1cbmNsYXNzIERyb3BDdXJzb3JWaWV3IHtcbiAgICBjb25zdHJ1Y3RvcihlZGl0b3JWaWV3LCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5lZGl0b3JWaWV3ID0gZWRpdG9yVmlldztcbiAgICAgICAgdGhpcy5jdXJzb3JQb3MgPSBudWxsO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBudWxsO1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSAtMTtcbiAgICAgICAgdGhpcy53aWR0aCA9IChfYSA9IG9wdGlvbnMud2lkdGgpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDE7XG4gICAgICAgIHRoaXMuY29sb3IgPSBvcHRpb25zLmNvbG9yID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IChvcHRpb25zLmNvbG9yIHx8IFwiYmxhY2tcIik7XG4gICAgICAgIHRoaXMuY2xhc3MgPSBvcHRpb25zLmNsYXNzO1xuICAgICAgICB0aGlzLmhhbmRsZXJzID0gW1wiZHJhZ292ZXJcIiwgXCJkcmFnZW5kXCIsIFwiZHJvcFwiLCBcImRyYWdsZWF2ZVwiXS5tYXAobmFtZSA9PiB7XG4gICAgICAgICAgICBsZXQgaGFuZGxlciA9IChlKSA9PiB7IHRoaXNbbmFtZV0oZSk7IH07XG4gICAgICAgICAgICBlZGl0b3JWaWV3LmRvbS5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGhhbmRsZXIpO1xuICAgICAgICAgICAgcmV0dXJuIHsgbmFtZSwgaGFuZGxlciB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVycy5mb3JFYWNoKCh7IG5hbWUsIGhhbmRsZXIgfSkgPT4gdGhpcy5lZGl0b3JWaWV3LmRvbS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGhhbmRsZXIpKTtcbiAgICB9XG4gICAgdXBkYXRlKGVkaXRvclZpZXcsIHByZXZTdGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3MgIT0gbnVsbCAmJiBwcmV2U3RhdGUuZG9jICE9IGVkaXRvclZpZXcuc3RhdGUuZG9jKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3MgPiBlZGl0b3JWaWV3LnN0YXRlLmRvYy5jb250ZW50LnNpemUpXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDdXJzb3IobnVsbCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVPdmVybGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0Q3Vyc29yKHBvcykge1xuICAgICAgICBpZiAocG9zID09IHRoaXMuY3Vyc29yUG9zKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmN1cnNvclBvcyA9IHBvcztcbiAgICAgICAgaWYgKHBvcyA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT3ZlcmxheSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZU92ZXJsYXkoKSB7XG4gICAgICAgIGxldCAkcG9zID0gdGhpcy5lZGl0b3JWaWV3LnN0YXRlLmRvYy5yZXNvbHZlKHRoaXMuY3Vyc29yUG9zKTtcbiAgICAgICAgbGV0IGlzQmxvY2sgPSAhJHBvcy5wYXJlbnQuaW5saW5lQ29udGVudCwgcmVjdDtcbiAgICAgICAgaWYgKGlzQmxvY2spIHtcbiAgICAgICAgICAgIGxldCBiZWZvcmUgPSAkcG9zLm5vZGVCZWZvcmUsIGFmdGVyID0gJHBvcy5ub2RlQWZ0ZXI7XG4gICAgICAgICAgICBpZiAoYmVmb3JlIHx8IGFmdGVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5vZGUgPSB0aGlzLmVkaXRvclZpZXcubm9kZURPTSh0aGlzLmN1cnNvclBvcyAtIChiZWZvcmUgPyBiZWZvcmUubm9kZVNpemUgOiAwKSk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5vZGVSZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRvcCA9IGJlZm9yZSA/IG5vZGVSZWN0LmJvdHRvbSA6IG5vZGVSZWN0LnRvcDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJlZm9yZSAmJiBhZnRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcCA9ICh0b3AgKyB0aGlzLmVkaXRvclZpZXcubm9kZURPTSh0aGlzLmN1cnNvclBvcykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKSAvIDI7XG4gICAgICAgICAgICAgICAgICAgIHJlY3QgPSB7IGxlZnQ6IG5vZGVSZWN0LmxlZnQsIHJpZ2h0OiBub2RlUmVjdC5yaWdodCwgdG9wOiB0b3AgLSB0aGlzLndpZHRoIC8gMiwgYm90dG9tOiB0b3AgKyB0aGlzLndpZHRoIC8gMiB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlY3QpIHtcbiAgICAgICAgICAgIGxldCBjb29yZHMgPSB0aGlzLmVkaXRvclZpZXcuY29vcmRzQXRQb3ModGhpcy5jdXJzb3JQb3MpO1xuICAgICAgICAgICAgcmVjdCA9IHsgbGVmdDogY29vcmRzLmxlZnQgLSB0aGlzLndpZHRoIC8gMiwgcmlnaHQ6IGNvb3Jkcy5sZWZ0ICsgdGhpcy53aWR0aCAvIDIsIHRvcDogY29vcmRzLnRvcCwgYm90dG9tOiBjb29yZHMuYm90dG9tIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhcmVudCA9IHRoaXMuZWRpdG9yVmlldy5kb20ub2Zmc2V0UGFyZW50O1xuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gcGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xhc3MpXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuY2xhc3M7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4OiA1MDsgcG9pbnRlci1ldmVudHM6IG5vbmU7XCI7XG4gICAgICAgICAgICBpZiAodGhpcy5jb2xvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmNvbG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKFwicHJvc2VtaXJyb3ItZHJvcGN1cnNvci1ibG9ja1wiLCBpc0Jsb2NrKTtcbiAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoXCJwcm9zZW1pcnJvci1kcm9wY3Vyc29yLWlubGluZVwiLCAhaXNCbG9jayk7XG4gICAgICAgIGxldCBwYXJlbnRMZWZ0LCBwYXJlbnRUb3A7XG4gICAgICAgIGlmICghcGFyZW50IHx8IHBhcmVudCA9PSBkb2N1bWVudC5ib2R5ICYmIGdldENvbXB1dGVkU3R5bGUocGFyZW50KS5wb3NpdGlvbiA9PSBcInN0YXRpY1wiKSB7XG4gICAgICAgICAgICBwYXJlbnRMZWZ0ID0gLXBhZ2VYT2Zmc2V0O1xuICAgICAgICAgICAgcGFyZW50VG9wID0gLXBhZ2VZT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IHJlY3QgPSBwYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBwYXJlbnRMZWZ0ID0gcmVjdC5sZWZ0IC0gcGFyZW50LnNjcm9sbExlZnQ7XG4gICAgICAgICAgICBwYXJlbnRUb3AgPSByZWN0LnRvcCAtIHBhcmVudC5zY3JvbGxUb3A7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmxlZnQgPSAocmVjdC5sZWZ0IC0gcGFyZW50TGVmdCkgKyBcInB4XCI7XG4gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS50b3AgPSAocmVjdC50b3AgLSBwYXJlbnRUb3ApICsgXCJweFwiO1xuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgKyBcInB4XCI7XG4gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAocmVjdC5ib3R0b20gLSByZWN0LnRvcCkgKyBcInB4XCI7XG4gICAgfVxuICAgIHNjaGVkdWxlUmVtb3ZhbCh0aW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0Q3Vyc29yKG51bGwpLCB0aW1lb3V0KTtcbiAgICB9XG4gICAgZHJhZ292ZXIoZXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVkaXRvclZpZXcuZWRpdGFibGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBwb3MgPSB0aGlzLmVkaXRvclZpZXcucG9zQXRDb29yZHMoeyBsZWZ0OiBldmVudC5jbGllbnRYLCB0b3A6IGV2ZW50LmNsaWVudFkgfSk7XG4gICAgICAgIGxldCBub2RlID0gcG9zICYmIHBvcy5pbnNpZGUgPj0gMCAmJiB0aGlzLmVkaXRvclZpZXcuc3RhdGUuZG9jLm5vZGVBdChwb3MuaW5zaWRlKTtcbiAgICAgICAgbGV0IGRpc2FibGVEcm9wQ3Vyc29yID0gbm9kZSAmJiBub2RlLnR5cGUuc3BlYy5kaXNhYmxlRHJvcEN1cnNvcjtcbiAgICAgICAgbGV0IGRpc2FibGVkID0gdHlwZW9mIGRpc2FibGVEcm9wQ3Vyc29yID09IFwiZnVuY3Rpb25cIiA/IGRpc2FibGVEcm9wQ3Vyc29yKHRoaXMuZWRpdG9yVmlldywgcG9zLCBldmVudCkgOiBkaXNhYmxlRHJvcEN1cnNvcjtcbiAgICAgICAgaWYgKHBvcyAmJiAhZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSBwb3MucG9zO1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yVmlldy5kcmFnZ2luZyAmJiB0aGlzLmVkaXRvclZpZXcuZHJhZ2dpbmcuc2xpY2UpIHtcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQgPSBkcm9wUG9pbnQodGhpcy5lZGl0b3JWaWV3LnN0YXRlLmRvYywgdGFyZ2V0LCB0aGlzLmVkaXRvclZpZXcuZHJhZ2dpbmcuc2xpY2UpO1xuICAgICAgICAgICAgICAgIGlmIChwb2ludCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBwb2ludDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0Q3Vyc29yKHRhcmdldCk7XG4gICAgICAgICAgICB0aGlzLnNjaGVkdWxlUmVtb3ZhbCg1MDAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkcmFnZW5kKCkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlUmVtb3ZhbCgyMCk7XG4gICAgfVxuICAgIGRyb3AoKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVSZW1vdmFsKDIwKTtcbiAgICB9XG4gICAgZHJhZ2xlYXZlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQgPT0gdGhpcy5lZGl0b3JWaWV3LmRvbSB8fCAhdGhpcy5lZGl0b3JWaWV3LmRvbS5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KSlcbiAgICAgICAgICAgIHRoaXMuc2V0Q3Vyc29yKG51bGwpO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgZHJvcEN1cnNvciB9O1xuIiwiaW1wb3J0IHsgRXh0ZW5zaW9uIH0gZnJvbSAnQHRpcHRhcC9jb3JlJztcbmltcG9ydCB7IGRyb3BDdXJzb3IgfSBmcm9tICdAdGlwdGFwL3BtL2Ryb3BjdXJzb3InO1xuXG5jb25zdCBEcm9wY3Vyc29yID0gRXh0ZW5zaW9uLmNyZWF0ZSh7XHJcbiAgICBuYW1lOiAnZHJvcEN1cnNvcicsXHJcbiAgICBhZGRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAnY3VycmVudENvbG9yJyxcclxuICAgICAgICAgICAgd2lkdGg6IDEsXHJcbiAgICAgICAgICAgIGNsYXNzOiB1bmRlZmluZWQsXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBhZGRQcm9zZU1pcnJvclBsdWdpbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgZHJvcEN1cnNvcih0aGlzLm9wdGlvbnMpLFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG59KTtcblxuZXhwb3J0IHsgRHJvcGN1cnNvciwgRHJvcGN1cnNvciBhcyBkZWZhdWx0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsImltcG9ydCB7IGtleWRvd25IYW5kbGVyIH0gZnJvbSAncHJvc2VtaXJyb3Ita2V5bWFwJztcbmltcG9ydCB7IFNlbGVjdGlvbiwgTm9kZVNlbGVjdGlvbiwgVGV4dFNlbGVjdGlvbiwgUGx1Z2luIH0gZnJvbSAncHJvc2VtaXJyb3Itc3RhdGUnO1xuaW1wb3J0IHsgU2xpY2UsIEZyYWdtZW50IH0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuaW1wb3J0IHsgRGVjb3JhdGlvblNldCwgRGVjb3JhdGlvbiB9IGZyb20gJ3Byb3NlbWlycm9yLXZpZXcnO1xuXG4vKipcbkdhcCBjdXJzb3Igc2VsZWN0aW9ucyBhcmUgcmVwcmVzZW50ZWQgdXNpbmcgdGhpcyBjbGFzcy4gSXRzXG5gJGFuY2hvcmAgYW5kIGAkaGVhZGAgcHJvcGVydGllcyBib3RoIHBvaW50IGF0IHRoZSBjdXJzb3IgcG9zaXRpb24uXG4qL1xuY2xhc3MgR2FwQ3Vyc29yIGV4dGVuZHMgU2VsZWN0aW9uIHtcbiAgICAvKipcbiAgICBDcmVhdGUgYSBnYXAgY3Vyc29yLlxuICAgICovXG4gICAgY29uc3RydWN0b3IoJHBvcykge1xuICAgICAgICBzdXBlcigkcG9zLCAkcG9zKTtcbiAgICB9XG4gICAgbWFwKGRvYywgbWFwcGluZykge1xuICAgICAgICBsZXQgJHBvcyA9IGRvYy5yZXNvbHZlKG1hcHBpbmcubWFwKHRoaXMuaGVhZCkpO1xuICAgICAgICByZXR1cm4gR2FwQ3Vyc29yLnZhbGlkKCRwb3MpID8gbmV3IEdhcEN1cnNvcigkcG9zKSA6IFNlbGVjdGlvbi5uZWFyKCRwb3MpO1xuICAgIH1cbiAgICBjb250ZW50KCkgeyByZXR1cm4gU2xpY2UuZW1wdHk7IH1cbiAgICBlcShvdGhlcikge1xuICAgICAgICByZXR1cm4gb3RoZXIgaW5zdGFuY2VvZiBHYXBDdXJzb3IgJiYgb3RoZXIuaGVhZCA9PSB0aGlzLmhlYWQ7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJnYXBjdXJzb3JcIiwgcG9zOiB0aGlzLmhlYWQgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBzdGF0aWMgZnJvbUpTT04oZG9jLCBqc29uKSB7XG4gICAgICAgIGlmICh0eXBlb2YganNvbi5wb3MgIT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBpbnB1dCBmb3IgR2FwQ3Vyc29yLmZyb21KU09OXCIpO1xuICAgICAgICByZXR1cm4gbmV3IEdhcEN1cnNvcihkb2MucmVzb2x2ZShqc29uLnBvcykpO1xuICAgIH1cbiAgICAvKipcbiAgICBAaW50ZXJuYWxcbiAgICAqL1xuICAgIGdldEJvb2ttYXJrKCkgeyByZXR1cm4gbmV3IEdhcEJvb2ttYXJrKHRoaXMuYW5jaG9yKTsgfVxuICAgIC8qKlxuICAgIEBpbnRlcm5hbFxuICAgICovXG4gICAgc3RhdGljIHZhbGlkKCRwb3MpIHtcbiAgICAgICAgbGV0IHBhcmVudCA9ICRwb3MucGFyZW50O1xuICAgICAgICBpZiAocGFyZW50LmlzVGV4dGJsb2NrIHx8ICFjbG9zZWRCZWZvcmUoJHBvcykgfHwgIWNsb3NlZEFmdGVyKCRwb3MpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBsZXQgb3ZlcnJpZGUgPSBwYXJlbnQudHlwZS5zcGVjLmFsbG93R2FwQ3Vyc29yO1xuICAgICAgICBpZiAob3ZlcnJpZGUgIT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBvdmVycmlkZTtcbiAgICAgICAgbGV0IGRlZmx0ID0gcGFyZW50LmNvbnRlbnRNYXRjaEF0KCRwb3MuaW5kZXgoKSkuZGVmYXVsdFR5cGU7XG4gICAgICAgIHJldHVybiBkZWZsdCAmJiBkZWZsdC5pc1RleHRibG9jaztcbiAgICB9XG4gICAgLyoqXG4gICAgQGludGVybmFsXG4gICAgKi9cbiAgICBzdGF0aWMgZmluZEdhcEN1cnNvckZyb20oJHBvcywgZGlyLCBtdXN0TW92ZSA9IGZhbHNlKSB7XG4gICAgICAgIHNlYXJjaDogZm9yICg7Oykge1xuICAgICAgICAgICAgaWYgKCFtdXN0TW92ZSAmJiBHYXBDdXJzb3IudmFsaWQoJHBvcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuICRwb3M7XG4gICAgICAgICAgICBsZXQgcG9zID0gJHBvcy5wb3MsIG5leHQgPSBudWxsO1xuICAgICAgICAgICAgLy8gU2NhbiB1cCBmcm9tIHRoaXMgcG9zaXRpb25cbiAgICAgICAgICAgIGZvciAobGV0IGQgPSAkcG9zLmRlcHRoOzsgZC0tKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBhcmVudCA9ICRwb3Mubm9kZShkKTtcbiAgICAgICAgICAgICAgICBpZiAoZGlyID4gMCA/ICRwb3MuaW5kZXhBZnRlcihkKSA8IHBhcmVudC5jaGlsZENvdW50IDogJHBvcy5pbmRleChkKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHBhcmVudC5jaGlsZChkaXIgPiAwID8gJHBvcy5pbmRleEFmdGVyKGQpIDogJHBvcy5pbmRleChkKSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwb3MgKz0gZGlyO1xuICAgICAgICAgICAgICAgIGxldCAkY3VyID0gJHBvcy5kb2MucmVzb2x2ZShwb3MpO1xuICAgICAgICAgICAgICAgIGlmIChHYXBDdXJzb3IudmFsaWQoJGN1cikpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkY3VyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQW5kIHRoZW4gZG93biBpbnRvIHRoZSBuZXh0IG5vZGVcbiAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5zaWRlID0gZGlyID4gMCA/IG5leHQuZmlyc3RDaGlsZCA6IG5leHQubGFzdENoaWxkO1xuICAgICAgICAgICAgICAgIGlmICghaW5zaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0LmlzQXRvbSAmJiAhbmV4dC5pc1RleHQgJiYgIU5vZGVTZWxlY3Rpb24uaXNTZWxlY3RhYmxlKG5leHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkcG9zID0gJHBvcy5kb2MucmVzb2x2ZShwb3MgKyBuZXh0Lm5vZGVTaXplICogZGlyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG11c3RNb3ZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBzZWFyY2g7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5leHQgPSBpbnNpZGU7XG4gICAgICAgICAgICAgICAgcG9zICs9IGRpcjtcbiAgICAgICAgICAgICAgICBsZXQgJGN1ciA9ICRwb3MuZG9jLnJlc29sdmUocG9zKTtcbiAgICAgICAgICAgICAgICBpZiAoR2FwQ3Vyc29yLnZhbGlkKCRjdXIpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGN1cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuR2FwQ3Vyc29yLnByb3RvdHlwZS52aXNpYmxlID0gZmFsc2U7XG5HYXBDdXJzb3IuZmluZEZyb20gPSBHYXBDdXJzb3IuZmluZEdhcEN1cnNvckZyb207XG5TZWxlY3Rpb24uanNvbklEKFwiZ2FwY3Vyc29yXCIsIEdhcEN1cnNvcik7XG5jbGFzcyBHYXBCb29rbWFyayB7XG4gICAgY29uc3RydWN0b3IocG9zKSB7XG4gICAgICAgIHRoaXMucG9zID0gcG9zO1xuICAgIH1cbiAgICBtYXAobWFwcGluZykge1xuICAgICAgICByZXR1cm4gbmV3IEdhcEJvb2ttYXJrKG1hcHBpbmcubWFwKHRoaXMucG9zKSk7XG4gICAgfVxuICAgIHJlc29sdmUoZG9jKSB7XG4gICAgICAgIGxldCAkcG9zID0gZG9jLnJlc29sdmUodGhpcy5wb3MpO1xuICAgICAgICByZXR1cm4gR2FwQ3Vyc29yLnZhbGlkKCRwb3MpID8gbmV3IEdhcEN1cnNvcigkcG9zKSA6IFNlbGVjdGlvbi5uZWFyKCRwb3MpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNsb3NlZEJlZm9yZSgkcG9zKSB7XG4gICAgZm9yIChsZXQgZCA9ICRwb3MuZGVwdGg7IGQgPj0gMDsgZC0tKSB7XG4gICAgICAgIGxldCBpbmRleCA9ICRwb3MuaW5kZXgoZCksIHBhcmVudCA9ICRwb3Mubm9kZShkKTtcbiAgICAgICAgLy8gQXQgdGhlIHN0YXJ0IG9mIHRoaXMgcGFyZW50LCBsb29rIGF0IG5leHQgb25lXG4gICAgICAgIGlmIChpbmRleCA9PSAwKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50LnR5cGUuc3BlYy5pc29sYXRpbmcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZWUgaWYgdGhlIG5vZGUgYmVmb3JlIChvciBpdHMgZmlyc3QgYW5jZXN0b3IpIGlzIGNsb3NlZFxuICAgICAgICBmb3IgKGxldCBiZWZvcmUgPSBwYXJlbnQuY2hpbGQoaW5kZXggLSAxKTs7IGJlZm9yZSA9IGJlZm9yZS5sYXN0Q2hpbGQpIHtcbiAgICAgICAgICAgIGlmICgoYmVmb3JlLmNoaWxkQ291bnQgPT0gMCAmJiAhYmVmb3JlLmlubGluZUNvbnRlbnQpIHx8IGJlZm9yZS5pc0F0b20gfHwgYmVmb3JlLnR5cGUuc3BlYy5pc29sYXRpbmcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBpZiAoYmVmb3JlLmlubGluZUNvbnRlbnQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEhpdCBzdGFydCBvZiBkb2N1bWVudFxuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gY2xvc2VkQWZ0ZXIoJHBvcykge1xuICAgIGZvciAobGV0IGQgPSAkcG9zLmRlcHRoOyBkID49IDA7IGQtLSkge1xuICAgICAgICBsZXQgaW5kZXggPSAkcG9zLmluZGV4QWZ0ZXIoZCksIHBhcmVudCA9ICRwb3Mubm9kZShkKTtcbiAgICAgICAgaWYgKGluZGV4ID09IHBhcmVudC5jaGlsZENvdW50KSB7XG4gICAgICAgICAgICBpZiAocGFyZW50LnR5cGUuc3BlYy5pc29sYXRpbmcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBhZnRlciA9IHBhcmVudC5jaGlsZChpbmRleCk7OyBhZnRlciA9IGFmdGVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIGlmICgoYWZ0ZXIuY2hpbGRDb3VudCA9PSAwICYmICFhZnRlci5pbmxpbmVDb250ZW50KSB8fCBhZnRlci5pc0F0b20gfHwgYWZ0ZXIudHlwZS5zcGVjLmlzb2xhdGluZylcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChhZnRlci5pbmxpbmVDb250ZW50KVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG5DcmVhdGUgYSBnYXAgY3Vyc29yIHBsdWdpbi4gV2hlbiBlbmFibGVkLCB0aGlzIHdpbGwgY2FwdHVyZSBjbGlja3Ncbm5lYXIgYW5kIGFycm93LWtleS1tb3Rpb24gcGFzdCBwbGFjZXMgdGhhdCBkb24ndCBoYXZlIGEgbm9ybWFsbHlcbnNlbGVjdGFibGUgcG9zaXRpb24gbmVhcmJ5LCBhbmQgY3JlYXRlIGEgZ2FwIGN1cnNvciBzZWxlY3Rpb24gZm9yXG50aGVtLiBUaGUgY3Vyc29yIGlzIGRyYXduIGFzIGFuIGVsZW1lbnQgd2l0aCBjbGFzc1xuYFByb3NlTWlycm9yLWdhcGN1cnNvcmAuIFlvdSBjYW4gZWl0aGVyIGluY2x1ZGVcbmBzdHlsZS9nYXBjdXJzb3IuY3NzYCBmcm9tIHRoZSBwYWNrYWdlJ3MgZGlyZWN0b3J5IG9yIGFkZCB5b3VyIG93blxuc3R5bGVzIHRvIG1ha2UgaXQgdmlzaWJsZS5cbiovXG5mdW5jdGlvbiBnYXBDdXJzb3IoKSB7XG4gICAgcmV0dXJuIG5ldyBQbHVnaW4oe1xuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgZGVjb3JhdGlvbnM6IGRyYXdHYXBDdXJzb3IsXG4gICAgICAgICAgICBjcmVhdGVTZWxlY3Rpb25CZXR3ZWVuKF92aWV3LCAkYW5jaG9yLCAkaGVhZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkYW5jaG9yLnBvcyA9PSAkaGVhZC5wb3MgJiYgR2FwQ3Vyc29yLnZhbGlkKCRoZWFkKSA/IG5ldyBHYXBDdXJzb3IoJGhlYWQpIDogbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYW5kbGVDbGljayxcbiAgICAgICAgICAgIGhhbmRsZUtleURvd24sXG4gICAgICAgICAgICBoYW5kbGVET01FdmVudHM6IHsgYmVmb3JlaW5wdXQ6IGJlZm9yZWlucHV0IH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuY29uc3QgaGFuZGxlS2V5RG93biA9IGtleWRvd25IYW5kbGVyKHtcbiAgICBcIkFycm93TGVmdFwiOiBhcnJvdyhcImhvcml6XCIsIC0xKSxcbiAgICBcIkFycm93UmlnaHRcIjogYXJyb3coXCJob3JpelwiLCAxKSxcbiAgICBcIkFycm93VXBcIjogYXJyb3coXCJ2ZXJ0XCIsIC0xKSxcbiAgICBcIkFycm93RG93blwiOiBhcnJvdyhcInZlcnRcIiwgMSlcbn0pO1xuZnVuY3Rpb24gYXJyb3coYXhpcywgZGlyKSB7XG4gICAgY29uc3QgZGlyU3RyID0gYXhpcyA9PSBcInZlcnRcIiA/IChkaXIgPiAwID8gXCJkb3duXCIgOiBcInVwXCIpIDogKGRpciA+IDAgPyBcInJpZ2h0XCIgOiBcImxlZnRcIik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSwgZGlzcGF0Y2gsIHZpZXcpIHtcbiAgICAgICAgbGV0IHNlbCA9IHN0YXRlLnNlbGVjdGlvbjtcbiAgICAgICAgbGV0ICRzdGFydCA9IGRpciA+IDAgPyBzZWwuJHRvIDogc2VsLiRmcm9tLCBtdXN0TW92ZSA9IHNlbC5lbXB0eTtcbiAgICAgICAgaWYgKHNlbCBpbnN0YW5jZW9mIFRleHRTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICghdmlldy5lbmRPZlRleHRibG9jayhkaXJTdHIpIHx8ICRzdGFydC5kZXB0aCA9PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIG11c3RNb3ZlID0gZmFsc2U7XG4gICAgICAgICAgICAkc3RhcnQgPSBzdGF0ZS5kb2MucmVzb2x2ZShkaXIgPiAwID8gJHN0YXJ0LmFmdGVyKCkgOiAkc3RhcnQuYmVmb3JlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCAkZm91bmQgPSBHYXBDdXJzb3IuZmluZEdhcEN1cnNvckZyb20oJHN0YXJ0LCBkaXIsIG11c3RNb3ZlKTtcbiAgICAgICAgaWYgKCEkZm91bmQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkaXNwYXRjaClcbiAgICAgICAgICAgIGRpc3BhdGNoKHN0YXRlLnRyLnNldFNlbGVjdGlvbihuZXcgR2FwQ3Vyc29yKCRmb3VuZCkpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUNsaWNrKHZpZXcsIHBvcywgZXZlbnQpIHtcbiAgICBpZiAoIXZpZXcgfHwgIXZpZXcuZWRpdGFibGUpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsZXQgJHBvcyA9IHZpZXcuc3RhdGUuZG9jLnJlc29sdmUocG9zKTtcbiAgICBpZiAoIUdhcEN1cnNvci52YWxpZCgkcG9zKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGxldCBjbGlja1BvcyA9IHZpZXcucG9zQXRDb29yZHMoeyBsZWZ0OiBldmVudC5jbGllbnRYLCB0b3A6IGV2ZW50LmNsaWVudFkgfSk7XG4gICAgaWYgKGNsaWNrUG9zICYmIGNsaWNrUG9zLmluc2lkZSA+IC0xICYmIE5vZGVTZWxlY3Rpb24uaXNTZWxlY3RhYmxlKHZpZXcuc3RhdGUuZG9jLm5vZGVBdChjbGlja1Bvcy5pbnNpZGUpKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHZpZXcuZGlzcGF0Y2godmlldy5zdGF0ZS50ci5zZXRTZWxlY3Rpb24obmV3IEdhcEN1cnNvcigkcG9zKSkpO1xuICAgIHJldHVybiB0cnVlO1xufVxuLy8gVGhpcyBpcyBhIGhhY2sgdGhhdCwgd2hlbiBhIGNvbXBvc2l0aW9uIHN0YXJ0cyB3aGlsZSBhIGdhcCBjdXJzb3Jcbi8vIGlzIGFjdGl2ZSwgcXVpY2tseSBjcmVhdGVzIGFuIGlubGluZSBjb250ZXh0IGZvciB0aGUgY29tcG9zaXRpb24gdG9cbi8vIGhhcHBlbiBpbiwgdG8gYXZvaWQgaXQgYmVpbmcgYWJvcnRlZCBieSB0aGUgRE9NIHNlbGVjdGlvbiBiZWluZ1xuLy8gbW92ZWQgaW50byBhIHZhbGlkIHBvc2l0aW9uLlxuZnVuY3Rpb24gYmVmb3JlaW5wdXQodmlldywgZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuaW5wdXRUeXBlICE9IFwiaW5zZXJ0Q29tcG9zaXRpb25UZXh0XCIgfHwgISh2aWV3LnN0YXRlLnNlbGVjdGlvbiBpbnN0YW5jZW9mIEdhcEN1cnNvcikpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsZXQgeyAkZnJvbSB9ID0gdmlldy5zdGF0ZS5zZWxlY3Rpb247XG4gICAgbGV0IGluc2VydCA9ICRmcm9tLnBhcmVudC5jb250ZW50TWF0Y2hBdCgkZnJvbS5pbmRleCgpKS5maW5kV3JhcHBpbmcodmlldy5zdGF0ZS5zY2hlbWEubm9kZXMudGV4dCk7XG4gICAgaWYgKCFpbnNlcnQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBsZXQgZnJhZyA9IEZyYWdtZW50LmVtcHR5O1xuICAgIGZvciAobGV0IGkgPSBpbnNlcnQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIGZyYWcgPSBGcmFnbWVudC5mcm9tKGluc2VydFtpXS5jcmVhdGVBbmRGaWxsKG51bGwsIGZyYWcpKTtcbiAgICBsZXQgdHIgPSB2aWV3LnN0YXRlLnRyLnJlcGxhY2UoJGZyb20ucG9zLCAkZnJvbS5wb3MsIG5ldyBTbGljZShmcmFnLCAwLCAwKSk7XG4gICAgdHIuc2V0U2VsZWN0aW9uKFRleHRTZWxlY3Rpb24ubmVhcih0ci5kb2MucmVzb2x2ZSgkZnJvbS5wb3MgKyAxKSkpO1xuICAgIHZpZXcuZGlzcGF0Y2godHIpO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGRyYXdHYXBDdXJzb3Ioc3RhdGUpIHtcbiAgICBpZiAoIShzdGF0ZS5zZWxlY3Rpb24gaW5zdGFuY2VvZiBHYXBDdXJzb3IpKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBsZXQgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgbm9kZS5jbGFzc05hbWUgPSBcIlByb3NlTWlycm9yLWdhcGN1cnNvclwiO1xuICAgIHJldHVybiBEZWNvcmF0aW9uU2V0LmNyZWF0ZShzdGF0ZS5kb2MsIFtEZWNvcmF0aW9uLndpZGdldChzdGF0ZS5zZWxlY3Rpb24uaGVhZCwgbm9kZSwgeyBrZXk6IFwiZ2FwY3Vyc29yXCIgfSldKTtcbn1cblxuZXhwb3J0IHsgR2FwQ3Vyc29yLCBnYXBDdXJzb3IgfTtcbiIsImltcG9ydCB7IEV4dGVuc2lvbiwgY2FsbE9yUmV0dXJuLCBnZXRFeHRlbnNpb25GaWVsZCB9IGZyb20gJ0B0aXB0YXAvY29yZSc7XG5pbXBvcnQgeyBnYXBDdXJzb3IgfSBmcm9tICdAdGlwdGFwL3BtL2dhcGN1cnNvcic7XG5cbmNvbnN0IEdhcGN1cnNvciA9IEV4dGVuc2lvbi5jcmVhdGUoe1xyXG4gICAgbmFtZTogJ2dhcEN1cnNvcicsXHJcbiAgICBhZGRQcm9zZU1pcnJvclBsdWdpbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgZ2FwQ3Vyc29yKCksXHJcbiAgICAgICAgXTtcclxuICAgIH0sXHJcbiAgICBleHRlbmROb2RlU2NoZW1hKGV4dGVuc2lvbikge1xyXG4gICAgICAgIHZhciBfYTtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBleHRlbnNpb24ubmFtZSxcclxuICAgICAgICAgICAgb3B0aW9uczogZXh0ZW5zaW9uLm9wdGlvbnMsXHJcbiAgICAgICAgICAgIHN0b3JhZ2U6IGV4dGVuc2lvbi5zdG9yYWdlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWxsb3dHYXBDdXJzb3I6IChfYSA9IGNhbGxPclJldHVybihnZXRFeHRlbnNpb25GaWVsZChleHRlbnNpb24sICdhbGxvd0dhcEN1cnNvcicsIGNvbnRleHQpKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbCxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxufSk7XG5cbmV4cG9ydCB7IEdhcGN1cnNvciwgR2FwY3Vyc29yIGFzIGRlZmF1bHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwiaW1wb3J0IHsgTm9kZSwgbWVyZ2VBdHRyaWJ1dGVzIH0gZnJvbSAnQHRpcHRhcC9jb3JlJztcblxuY29uc3QgSGFyZEJyZWFrID0gTm9kZS5jcmVhdGUoe1xyXG4gICAgbmFtZTogJ2hhcmRCcmVhaycsXHJcbiAgICBhZGRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGtlZXBNYXJrczogdHJ1ZSxcclxuICAgICAgICAgICAgSFRNTEF0dHJpYnV0ZXM6IHt9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgaW5saW5lOiB0cnVlLFxyXG4gICAgZ3JvdXA6ICdpbmxpbmUnLFxyXG4gICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICBwYXJzZUhUTUwoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgeyB0YWc6ICdicicgfSxcclxuICAgICAgICBdO1xyXG4gICAgfSxcclxuICAgIHJlbmRlckhUTUwoeyBIVE1MQXR0cmlidXRlcyB9KSB7XHJcbiAgICAgICAgcmV0dXJuIFsnYnInLCBtZXJnZUF0dHJpYnV0ZXModGhpcy5vcHRpb25zLkhUTUxBdHRyaWJ1dGVzLCBIVE1MQXR0cmlidXRlcyldO1xyXG4gICAgfSxcclxuICAgIHJlbmRlclRleHQoKSB7XHJcbiAgICAgICAgcmV0dXJuICdcXG4nO1xyXG4gICAgfSxcclxuICAgIGFkZENvbW1hbmRzKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNldEhhcmRCcmVhazogKCkgPT4gKHsgY29tbWFuZHMsIGNoYWluLCBzdGF0ZSwgZWRpdG9yLCB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZHMuZmlyc3QoW1xyXG4gICAgICAgICAgICAgICAgICAgICgpID0+IGNvbW1hbmRzLmV4aXRDb2RlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4gY29tbWFuZHMuY29tbWFuZCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uLCBzdG9yZWRNYXJrcyB9ID0gc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24uJGZyb20ucGFyZW50LnR5cGUuc3BlYy5pc29sYXRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGtlZXBNYXJrcyB9ID0gdGhpcy5vcHRpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHNwbGl0dGFibGVNYXJrcyB9ID0gZWRpdG9yLmV4dGVuc2lvbk1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtzID0gc3RvcmVkTWFya3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChzZWxlY3Rpb24uJHRvLnBhcmVudE9mZnNldCAmJiBzZWxlY3Rpb24uJGZyb20ubWFya3MoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFpbigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5zZXJ0Q29udGVudCh7IHR5cGU6IHRoaXMubmFtZSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbW1hbmQoKHsgdHIsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXNwYXRjaCAmJiBtYXJrcyAmJiBrZWVwTWFya3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZE1hcmtzID0gbWFya3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihtYXJrID0+IHNwbGl0dGFibGVNYXJrcy5pbmNsdWRlcyhtYXJrLnR5cGUubmFtZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyLmVuc3VyZU1hcmtzKGZpbHRlcmVkTWFya3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucnVuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGFkZEtleWJvYXJkU2hvcnRjdXRzKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdNb2QtRW50ZXInOiAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy5zZXRIYXJkQnJlYWsoKSxcclxuICAgICAgICAgICAgJ1NoaWZ0LUVudGVyJzogKCkgPT4gdGhpcy5lZGl0b3IuY29tbWFuZHMuc2V0SGFyZEJyZWFrKCksXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbn0pO1xuXG5leHBvcnQgeyBIYXJkQnJlYWssIEhhcmRCcmVhayBhcyBkZWZhdWx0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsImltcG9ydCB7IE5vZGUsIG1lcmdlQXR0cmlidXRlcywgdGV4dGJsb2NrVHlwZUlucHV0UnVsZSB9IGZyb20gJ0B0aXB0YXAvY29yZSc7XG5cbmNvbnN0IEhlYWRpbmcgPSBOb2RlLmNyZWF0ZSh7XHJcbiAgICBuYW1lOiAnaGVhZGluZycsXHJcbiAgICBhZGRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGxldmVsczogWzEsIDIsIDMsIDQsIDUsIDZdLFxyXG4gICAgICAgICAgICBIVE1MQXR0cmlidXRlczoge30sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBjb250ZW50OiAnaW5saW5lKicsXHJcbiAgICBncm91cDogJ2Jsb2NrJyxcclxuICAgIGRlZmluaW5nOiB0cnVlLFxyXG4gICAgYWRkQXR0cmlidXRlcygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsZXZlbDoge1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMSxcclxuICAgICAgICAgICAgICAgIHJlbmRlcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIHBhcnNlSFRNTCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxldmVsc1xyXG4gICAgICAgICAgICAubWFwKChsZXZlbCkgPT4gKHtcclxuICAgICAgICAgICAgdGFnOiBgaCR7bGV2ZWx9YCxcclxuICAgICAgICAgICAgYXR0cnM6IHsgbGV2ZWwgfSxcclxuICAgICAgICB9KSk7XHJcbiAgICB9LFxyXG4gICAgcmVuZGVySFRNTCh7IG5vZGUsIEhUTUxBdHRyaWJ1dGVzIH0pIHtcclxuICAgICAgICBjb25zdCBoYXNMZXZlbCA9IHRoaXMub3B0aW9ucy5sZXZlbHMuaW5jbHVkZXMobm9kZS5hdHRycy5sZXZlbCk7XHJcbiAgICAgICAgY29uc3QgbGV2ZWwgPSBoYXNMZXZlbFxyXG4gICAgICAgICAgICA/IG5vZGUuYXR0cnMubGV2ZWxcclxuICAgICAgICAgICAgOiB0aGlzLm9wdGlvbnMubGV2ZWxzWzBdO1xyXG4gICAgICAgIHJldHVybiBbYGgke2xldmVsfWAsIG1lcmdlQXR0cmlidXRlcyh0aGlzLm9wdGlvbnMuSFRNTEF0dHJpYnV0ZXMsIEhUTUxBdHRyaWJ1dGVzKSwgMF07XHJcbiAgICB9LFxyXG4gICAgYWRkQ29tbWFuZHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc2V0SGVhZGluZzogYXR0cmlidXRlcyA9PiAoeyBjb21tYW5kcyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5sZXZlbHMuaW5jbHVkZXMoYXR0cmlidXRlcy5sZXZlbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZHMuc2V0Tm9kZSh0aGlzLm5hbWUsIGF0dHJpYnV0ZXMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b2dnbGVIZWFkaW5nOiBhdHRyaWJ1dGVzID0+ICh7IGNvbW1hbmRzIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLmxldmVscy5pbmNsdWRlcyhhdHRyaWJ1dGVzLmxldmVsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kcy50b2dnbGVOb2RlKHRoaXMubmFtZSwgJ3BhcmFncmFwaCcsIGF0dHJpYnV0ZXMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgYWRkS2V5Ym9hcmRTaG9ydGN1dHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sZXZlbHMucmVkdWNlKChpdGVtcywgbGV2ZWwpID0+ICh7XHJcbiAgICAgICAgICAgIC4uLml0ZW1zLFxyXG4gICAgICAgICAgICAuLi57XHJcbiAgICAgICAgICAgICAgICBbYE1vZC1BbHQtJHtsZXZlbH1gXTogKCkgPT4gdGhpcy5lZGl0b3IuY29tbWFuZHMudG9nZ2xlSGVhZGluZyh7IGxldmVsIH0pLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pLCB7fSk7XHJcbiAgICB9LFxyXG4gICAgYWRkSW5wdXRSdWxlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxldmVscy5tYXAobGV2ZWwgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dGJsb2NrVHlwZUlucHV0UnVsZSh7XHJcbiAgICAgICAgICAgICAgICBmaW5kOiBuZXcgUmVnRXhwKGBeKCN7MSwke2xldmVsfX0pXFxcXHMkYCksXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBnZXRBdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWwsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbn0pO1xuXG5leHBvcnQgeyBIZWFkaW5nLCBIZWFkaW5nIGFzIGRlZmF1bHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwidmFyIEdPT0RfTEVBRl9TSVpFID0gMjAwO1xuXG4vLyA6OiBjbGFzczxUPiBBIHJvcGUgc2VxdWVuY2UgaXMgYSBwZXJzaXN0ZW50IHNlcXVlbmNlIGRhdGEgc3RydWN0dXJlXG4vLyB0aGF0IHN1cHBvcnRzIGFwcGVuZGluZywgcHJlcGVuZGluZywgYW5kIHNsaWNpbmcgd2l0aG91dCBkb2luZyBhXG4vLyBmdWxsIGNvcHkuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGEgbW9zdGx5LWJhbGFuY2VkIHRyZWUuXG52YXIgUm9wZVNlcXVlbmNlID0gZnVuY3Rpb24gUm9wZVNlcXVlbmNlICgpIHt9O1xuXG5Sb3BlU2VxdWVuY2UucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZCAob3RoZXIpIHtcbiAgaWYgKCFvdGhlci5sZW5ndGgpIHsgcmV0dXJuIHRoaXMgfVxuICBvdGhlciA9IFJvcGVTZXF1ZW5jZS5mcm9tKG90aGVyKTtcblxuICByZXR1cm4gKCF0aGlzLmxlbmd0aCAmJiBvdGhlcikgfHxcbiAgICAob3RoZXIubGVuZ3RoIDwgR09PRF9MRUFGX1NJWkUgJiYgdGhpcy5sZWFmQXBwZW5kKG90aGVyKSkgfHxcbiAgICAodGhpcy5sZW5ndGggPCBHT09EX0xFQUZfU0laRSAmJiBvdGhlci5sZWFmUHJlcGVuZCh0aGlzKSkgfHxcbiAgICB0aGlzLmFwcGVuZElubmVyKG90aGVyKVxufTtcblxuLy8gOjogKHVuaW9uPFtUXSwgUm9wZVNlcXVlbmNlPFQ+Pikg4oaSIFJvcGVTZXF1ZW5jZTxUPlxuLy8gUHJlcGVuZCBhbiBhcnJheSBvciBvdGhlciByb3BlIHRvIHRoaXMgb25lLCByZXR1cm5pbmcgYSBuZXcgcm9wZS5cblJvcGVTZXF1ZW5jZS5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uIHByZXBlbmQgKG90aGVyKSB7XG4gIGlmICghb3RoZXIubGVuZ3RoKSB7IHJldHVybiB0aGlzIH1cbiAgcmV0dXJuIFJvcGVTZXF1ZW5jZS5mcm9tKG90aGVyKS5hcHBlbmQodGhpcylcbn07XG5cblJvcGVTZXF1ZW5jZS5wcm90b3R5cGUuYXBwZW5kSW5uZXIgPSBmdW5jdGlvbiBhcHBlbmRJbm5lciAob3RoZXIpIHtcbiAgcmV0dXJuIG5ldyBBcHBlbmQodGhpcywgb3RoZXIpXG59O1xuXG4vLyA6OiAoP251bWJlciwgP251bWJlcikg4oaSIFJvcGVTZXF1ZW5jZTxUPlxuLy8gQ3JlYXRlIGEgcm9wZSByZXBlc2VudGluZyBhIHN1Yi1zZXF1ZW5jZSBvZiB0aGlzIHJvcGUuXG5Sb3BlU2VxdWVuY2UucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKGZyb20sIHRvKSB7XG4gICAgaWYgKCBmcm9tID09PSB2b2lkIDAgKSBmcm9tID0gMDtcbiAgICBpZiAoIHRvID09PSB2b2lkIDAgKSB0byA9IHRoaXMubGVuZ3RoO1xuXG4gIGlmIChmcm9tID49IHRvKSB7IHJldHVybiBSb3BlU2VxdWVuY2UuZW1wdHkgfVxuICByZXR1cm4gdGhpcy5zbGljZUlubmVyKE1hdGgubWF4KDAsIGZyb20pLCBNYXRoLm1pbih0aGlzLmxlbmd0aCwgdG8pKVxufTtcblxuLy8gOjogKG51bWJlcikg4oaSIFRcbi8vIFJldHJpZXZlIHRoZSBlbGVtZW50IGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBmcm9tIHRoaXMgcm9wZS5cblJvcGVTZXF1ZW5jZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChpKSB7XG4gIGlmIChpIDwgMCB8fCBpID49IHRoaXMubGVuZ3RoKSB7IHJldHVybiB1bmRlZmluZWQgfVxuICByZXR1cm4gdGhpcy5nZXRJbm5lcihpKVxufTtcblxuLy8gOjogKChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyKSDihpIgP2Jvb2wsID9udW1iZXIsID9udW1iZXIpXG4vLyBDYWxsIHRoZSBnaXZlbiBmdW5jdGlvbiBmb3IgZWFjaCBlbGVtZW50IGJldHdlZW4gdGhlIGdpdmVuXG4vLyBpbmRpY2VzLiBUaGlzIHRlbmRzIHRvIGJlIG1vcmUgZWZmaWNpZW50IHRoYW4gbG9vcGluZyBvdmVyIHRoZVxuLy8gaW5kaWNlcyBhbmQgY2FsbGluZyBgZ2V0YCwgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgdG8gZGVzY2VuZCB0aGVcbi8vIHRyZWUgZm9yIGV2ZXJ5IGVsZW1lbnQuXG5Sb3BlU2VxdWVuY2UucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoIChmLCBmcm9tLCB0bykge1xuICAgIGlmICggZnJvbSA9PT0gdm9pZCAwICkgZnJvbSA9IDA7XG4gICAgaWYgKCB0byA9PT0gdm9pZCAwICkgdG8gPSB0aGlzLmxlbmd0aDtcblxuICBpZiAoZnJvbSA8PSB0bylcbiAgICB7IHRoaXMuZm9yRWFjaElubmVyKGYsIGZyb20sIHRvLCAwKTsgfVxuICBlbHNlXG4gICAgeyB0aGlzLmZvckVhY2hJbnZlcnRlZElubmVyKGYsIGZyb20sIHRvLCAwKTsgfVxufTtcblxuLy8gOjogKChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyKSDihpIgVSwgP251bWJlciwgP251bWJlcikg4oaSIFtVXVxuLy8gTWFwIHRoZSBnaXZlbiBmdW5jdGlvbnMgb3ZlciB0aGUgZWxlbWVudHMgb2YgdGhlIHJvcGUsIHByb2R1Y2luZ1xuLy8gYSBmbGF0IGFycmF5LlxuUm9wZVNlcXVlbmNlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiBtYXAgKGYsIGZyb20sIHRvKSB7XG4gICAgaWYgKCBmcm9tID09PSB2b2lkIDAgKSBmcm9tID0gMDtcbiAgICBpZiAoIHRvID09PSB2b2lkIDAgKSB0byA9IHRoaXMubGVuZ3RoO1xuXG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uIChlbHQsIGkpIHsgcmV0dXJuIHJlc3VsdC5wdXNoKGYoZWx0LCBpKSk7IH0sIGZyb20sIHRvKTtcbiAgcmV0dXJuIHJlc3VsdFxufTtcblxuLy8gOjogKD91bmlvbjxbVF0sIFJvcGVTZXF1ZW5jZTxUPj4pIOKGkiBSb3BlU2VxdWVuY2U8VD5cbi8vIENyZWF0ZSBhIHJvcGUgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBhcnJheSwgb3IgcmV0dXJuIHRoZSByb3BlXG4vLyBpdHNlbGYgaWYgYSByb3BlIHdhcyBnaXZlbi5cblJvcGVTZXF1ZW5jZS5mcm9tID0gZnVuY3Rpb24gZnJvbSAodmFsdWVzKSB7XG4gIGlmICh2YWx1ZXMgaW5zdGFuY2VvZiBSb3BlU2VxdWVuY2UpIHsgcmV0dXJuIHZhbHVlcyB9XG4gIHJldHVybiB2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCA/IG5ldyBMZWFmKHZhbHVlcykgOiBSb3BlU2VxdWVuY2UuZW1wdHlcbn07XG5cbnZhciBMZWFmID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoUm9wZVNlcXVlbmNlKSB7XG4gIGZ1bmN0aW9uIExlYWYodmFsdWVzKSB7XG4gICAgUm9wZVNlcXVlbmNlLmNhbGwodGhpcyk7XG4gICAgdGhpcy52YWx1ZXMgPSB2YWx1ZXM7XG4gIH1cblxuICBpZiAoIFJvcGVTZXF1ZW5jZSApIExlYWYuX19wcm90b19fID0gUm9wZVNlcXVlbmNlO1xuICBMZWFmLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFJvcGVTZXF1ZW5jZSAmJiBSb3BlU2VxdWVuY2UucHJvdG90eXBlICk7XG4gIExlYWYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGVhZjtcblxuICB2YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBsZW5ndGg6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sZGVwdGg6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxuICBMZWFmLnByb3RvdHlwZS5mbGF0dGVuID0gZnVuY3Rpb24gZmxhdHRlbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzXG4gIH07XG5cbiAgTGVhZi5wcm90b3R5cGUuc2xpY2VJbm5lciA9IGZ1bmN0aW9uIHNsaWNlSW5uZXIgKGZyb20sIHRvKSB7XG4gICAgaWYgKGZyb20gPT0gMCAmJiB0byA9PSB0aGlzLmxlbmd0aCkgeyByZXR1cm4gdGhpcyB9XG4gICAgcmV0dXJuIG5ldyBMZWFmKHRoaXMudmFsdWVzLnNsaWNlKGZyb20sIHRvKSlcbiAgfTtcblxuICBMZWFmLnByb3RvdHlwZS5nZXRJbm5lciA9IGZ1bmN0aW9uIGdldElubmVyIChpKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzW2ldXG4gIH07XG5cbiAgTGVhZi5wcm90b3R5cGUuZm9yRWFjaElubmVyID0gZnVuY3Rpb24gZm9yRWFjaElubmVyIChmLCBmcm9tLCB0bywgc3RhcnQpIHtcbiAgICBmb3IgKHZhciBpID0gZnJvbTsgaSA8IHRvOyBpKyspXG4gICAgICB7IGlmIChmKHRoaXMudmFsdWVzW2ldLCBzdGFydCArIGkpID09PSBmYWxzZSkgeyByZXR1cm4gZmFsc2UgfSB9XG4gIH07XG5cbiAgTGVhZi5wcm90b3R5cGUuZm9yRWFjaEludmVydGVkSW5uZXIgPSBmdW5jdGlvbiBmb3JFYWNoSW52ZXJ0ZWRJbm5lciAoZiwgZnJvbSwgdG8sIHN0YXJ0KSB7XG4gICAgZm9yICh2YXIgaSA9IGZyb20gLSAxOyBpID49IHRvOyBpLS0pXG4gICAgICB7IGlmIChmKHRoaXMudmFsdWVzW2ldLCBzdGFydCArIGkpID09PSBmYWxzZSkgeyByZXR1cm4gZmFsc2UgfSB9XG4gIH07XG5cbiAgTGVhZi5wcm90b3R5cGUubGVhZkFwcGVuZCA9IGZ1bmN0aW9uIGxlYWZBcHBlbmQgKG90aGVyKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoICsgb3RoZXIubGVuZ3RoIDw9IEdPT0RfTEVBRl9TSVpFKVxuICAgICAgeyByZXR1cm4gbmV3IExlYWYodGhpcy52YWx1ZXMuY29uY2F0KG90aGVyLmZsYXR0ZW4oKSkpIH1cbiAgfTtcblxuICBMZWFmLnByb3RvdHlwZS5sZWFmUHJlcGVuZCA9IGZ1bmN0aW9uIGxlYWZQcmVwZW5kIChvdGhlcikge1xuICAgIGlmICh0aGlzLmxlbmd0aCArIG90aGVyLmxlbmd0aCA8PSBHT09EX0xFQUZfU0laRSlcbiAgICAgIHsgcmV0dXJuIG5ldyBMZWFmKG90aGVyLmZsYXR0ZW4oKS5jb25jYXQodGhpcy52YWx1ZXMpKSB9XG4gIH07XG5cbiAgcHJvdG90eXBlQWNjZXNzb3JzLmxlbmd0aC5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnZhbHVlcy5sZW5ndGggfTtcblxuICBwcm90b3R5cGVBY2Nlc3NvcnMuZGVwdGguZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gMCB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBMZWFmLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbiAgcmV0dXJuIExlYWY7XG59KFJvcGVTZXF1ZW5jZSkpO1xuXG4vLyA6OiBSb3BlU2VxdWVuY2Vcbi8vIFRoZSBlbXB0eSByb3BlIHNlcXVlbmNlLlxuUm9wZVNlcXVlbmNlLmVtcHR5ID0gbmV3IExlYWYoW10pO1xuXG52YXIgQXBwZW5kID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoUm9wZVNlcXVlbmNlKSB7XG4gIGZ1bmN0aW9uIEFwcGVuZChsZWZ0LCByaWdodCkge1xuICAgIFJvcGVTZXF1ZW5jZS5jYWxsKHRoaXMpO1xuICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICAgIHRoaXMubGVuZ3RoID0gbGVmdC5sZW5ndGggKyByaWdodC5sZW5ndGg7XG4gICAgdGhpcy5kZXB0aCA9IE1hdGgubWF4KGxlZnQuZGVwdGgsIHJpZ2h0LmRlcHRoKSArIDE7XG4gIH1cblxuICBpZiAoIFJvcGVTZXF1ZW5jZSApIEFwcGVuZC5fX3Byb3RvX18gPSBSb3BlU2VxdWVuY2U7XG4gIEFwcGVuZC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBSb3BlU2VxdWVuY2UgJiYgUm9wZVNlcXVlbmNlLnByb3RvdHlwZSApO1xuICBBcHBlbmQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXBwZW5kO1xuXG4gIEFwcGVuZC5wcm90b3R5cGUuZmxhdHRlbiA9IGZ1bmN0aW9uIGZsYXR0ZW4gKCkge1xuICAgIHJldHVybiB0aGlzLmxlZnQuZmxhdHRlbigpLmNvbmNhdCh0aGlzLnJpZ2h0LmZsYXR0ZW4oKSlcbiAgfTtcblxuICBBcHBlbmQucHJvdG90eXBlLmdldElubmVyID0gZnVuY3Rpb24gZ2V0SW5uZXIgKGkpIHtcbiAgICByZXR1cm4gaSA8IHRoaXMubGVmdC5sZW5ndGggPyB0aGlzLmxlZnQuZ2V0KGkpIDogdGhpcy5yaWdodC5nZXQoaSAtIHRoaXMubGVmdC5sZW5ndGgpXG4gIH07XG5cbiAgQXBwZW5kLnByb3RvdHlwZS5mb3JFYWNoSW5uZXIgPSBmdW5jdGlvbiBmb3JFYWNoSW5uZXIgKGYsIGZyb20sIHRvLCBzdGFydCkge1xuICAgIHZhciBsZWZ0TGVuID0gdGhpcy5sZWZ0Lmxlbmd0aDtcbiAgICBpZiAoZnJvbSA8IGxlZnRMZW4gJiZcbiAgICAgICAgdGhpcy5sZWZ0LmZvckVhY2hJbm5lcihmLCBmcm9tLCBNYXRoLm1pbih0bywgbGVmdExlbiksIHN0YXJ0KSA9PT0gZmFsc2UpXG4gICAgICB7IHJldHVybiBmYWxzZSB9XG4gICAgaWYgKHRvID4gbGVmdExlbiAmJlxuICAgICAgICB0aGlzLnJpZ2h0LmZvckVhY2hJbm5lcihmLCBNYXRoLm1heChmcm9tIC0gbGVmdExlbiwgMCksIE1hdGgubWluKHRoaXMubGVuZ3RoLCB0bykgLSBsZWZ0TGVuLCBzdGFydCArIGxlZnRMZW4pID09PSBmYWxzZSlcbiAgICAgIHsgcmV0dXJuIGZhbHNlIH1cbiAgfTtcblxuICBBcHBlbmQucHJvdG90eXBlLmZvckVhY2hJbnZlcnRlZElubmVyID0gZnVuY3Rpb24gZm9yRWFjaEludmVydGVkSW5uZXIgKGYsIGZyb20sIHRvLCBzdGFydCkge1xuICAgIHZhciBsZWZ0TGVuID0gdGhpcy5sZWZ0Lmxlbmd0aDtcbiAgICBpZiAoZnJvbSA+IGxlZnRMZW4gJiZcbiAgICAgICAgdGhpcy5yaWdodC5mb3JFYWNoSW52ZXJ0ZWRJbm5lcihmLCBmcm9tIC0gbGVmdExlbiwgTWF0aC5tYXgodG8sIGxlZnRMZW4pIC0gbGVmdExlbiwgc3RhcnQgKyBsZWZ0TGVuKSA9PT0gZmFsc2UpXG4gICAgICB7IHJldHVybiBmYWxzZSB9XG4gICAgaWYgKHRvIDwgbGVmdExlbiAmJlxuICAgICAgICB0aGlzLmxlZnQuZm9yRWFjaEludmVydGVkSW5uZXIoZiwgTWF0aC5taW4oZnJvbSwgbGVmdExlbiksIHRvLCBzdGFydCkgPT09IGZhbHNlKVxuICAgICAgeyByZXR1cm4gZmFsc2UgfVxuICB9O1xuXG4gIEFwcGVuZC5wcm90b3R5cGUuc2xpY2VJbm5lciA9IGZ1bmN0aW9uIHNsaWNlSW5uZXIgKGZyb20sIHRvKSB7XG4gICAgaWYgKGZyb20gPT0gMCAmJiB0byA9PSB0aGlzLmxlbmd0aCkgeyByZXR1cm4gdGhpcyB9XG4gICAgdmFyIGxlZnRMZW4gPSB0aGlzLmxlZnQubGVuZ3RoO1xuICAgIGlmICh0byA8PSBsZWZ0TGVuKSB7IHJldHVybiB0aGlzLmxlZnQuc2xpY2UoZnJvbSwgdG8pIH1cbiAgICBpZiAoZnJvbSA+PSBsZWZ0TGVuKSB7IHJldHVybiB0aGlzLnJpZ2h0LnNsaWNlKGZyb20gLSBsZWZ0TGVuLCB0byAtIGxlZnRMZW4pIH1cbiAgICByZXR1cm4gdGhpcy5sZWZ0LnNsaWNlKGZyb20sIGxlZnRMZW4pLmFwcGVuZCh0aGlzLnJpZ2h0LnNsaWNlKDAsIHRvIC0gbGVmdExlbikpXG4gIH07XG5cbiAgQXBwZW5kLnByb3RvdHlwZS5sZWFmQXBwZW5kID0gZnVuY3Rpb24gbGVhZkFwcGVuZCAob3RoZXIpIHtcbiAgICB2YXIgaW5uZXIgPSB0aGlzLnJpZ2h0LmxlYWZBcHBlbmQob3RoZXIpO1xuICAgIGlmIChpbm5lcikgeyByZXR1cm4gbmV3IEFwcGVuZCh0aGlzLmxlZnQsIGlubmVyKSB9XG4gIH07XG5cbiAgQXBwZW5kLnByb3RvdHlwZS5sZWFmUHJlcGVuZCA9IGZ1bmN0aW9uIGxlYWZQcmVwZW5kIChvdGhlcikge1xuICAgIHZhciBpbm5lciA9IHRoaXMubGVmdC5sZWFmUHJlcGVuZChvdGhlcik7XG4gICAgaWYgKGlubmVyKSB7IHJldHVybiBuZXcgQXBwZW5kKGlubmVyLCB0aGlzLnJpZ2h0KSB9XG4gIH07XG5cbiAgQXBwZW5kLnByb3RvdHlwZS5hcHBlbmRJbm5lciA9IGZ1bmN0aW9uIGFwcGVuZElubmVyIChvdGhlcikge1xuICAgIGlmICh0aGlzLmxlZnQuZGVwdGggPj0gTWF0aC5tYXgodGhpcy5yaWdodC5kZXB0aCwgb3RoZXIuZGVwdGgpICsgMSlcbiAgICAgIHsgcmV0dXJuIG5ldyBBcHBlbmQodGhpcy5sZWZ0LCBuZXcgQXBwZW5kKHRoaXMucmlnaHQsIG90aGVyKSkgfVxuICAgIHJldHVybiBuZXcgQXBwZW5kKHRoaXMsIG90aGVyKVxuICB9O1xuXG4gIHJldHVybiBBcHBlbmQ7XG59KFJvcGVTZXF1ZW5jZSkpO1xuXG52YXIgcm9wZVNlcXVlbmNlID0gUm9wZVNlcXVlbmNlO1xuXG5leHBvcnQgZGVmYXVsdCByb3BlU2VxdWVuY2U7XG4iLCJpbXBvcnQgUm9wZVNlcXVlbmNlIGZyb20gJ3JvcGUtc2VxdWVuY2UnO1xuaW1wb3J0IHsgTWFwcGluZyB9IGZyb20gJ3Byb3NlbWlycm9yLXRyYW5zZm9ybSc7XG5pbXBvcnQgeyBQbHVnaW5LZXksIFBsdWdpbiB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcblxuLy8gUHJvc2VNaXJyb3IncyBoaXN0b3J5IGlzbid0IHNpbXBseSBhIHdheSB0byByb2xsIGJhY2sgdG8gYSBwcmV2aW91c1xuLy8gc3RhdGUsIGJlY2F1c2UgUHJvc2VNaXJyb3Igc3VwcG9ydHMgYXBwbHlpbmcgY2hhbmdlcyB3aXRob3V0IGFkZGluZ1xuLy8gdGhlbSB0byB0aGUgaGlzdG9yeSAoZm9yIGV4YW1wbGUgZHVyaW5nIGNvbGxhYm9yYXRpb24pLlxuLy9cbi8vIFRvIHRoaXMgZW5kLCBlYWNoICdCcmFuY2gnIChvbmUgZm9yIHRoZSB1bmRvIGhpc3RvcnkgYW5kIG9uZSBmb3Jcbi8vIHRoZSByZWRvIGhpc3RvcnkpIGtlZXBzIGFuIGFycmF5IG9mICdJdGVtcycsIHdoaWNoIGNhbiBvcHRpb25hbGx5XG4vLyBob2xkIGEgc3RlcCAoYW4gYWN0dWFsIHVuZG9hYmxlIGNoYW5nZSksIGFuZCBhbHdheXMgaG9sZCBhIHBvc2l0aW9uXG4vLyBtYXAgKHdoaWNoIGlzIG5lZWRlZCB0byBtb3ZlIGNoYW5nZXMgYmVsb3cgdGhlbSB0byBhcHBseSB0byB0aGVcbi8vIGN1cnJlbnQgZG9jdW1lbnQpLlxuLy9cbi8vIEFuIGl0ZW0gdGhhdCBoYXMgYm90aCBhIHN0ZXAgYW5kIGEgc2VsZWN0aW9uIGJvb2ttYXJrIGlzIHRoZSBzdGFydFxuLy8gb2YgYW4gJ2V2ZW50JyDigJQgYSBncm91cCBvZiBjaGFuZ2VzIHRoYXQgd2lsbCBiZSB1bmRvbmUgb3IgcmVkb25lIGF0XG4vLyBvbmNlLiAoSXQgc3RvcmVzIG9ubHkgdGhlIGJvb2ttYXJrLCBzaW5jZSB0aGF0IHdheSB3ZSBkb24ndCBoYXZlIHRvXG4vLyBwcm92aWRlIGEgZG9jdW1lbnQgdW50aWwgdGhlIHNlbGVjdGlvbiBpcyBhY3R1YWxseSBhcHBsaWVkLCB3aGljaFxuLy8gaXMgdXNlZnVsIHdoZW4gY29tcHJlc3NpbmcuKVxuLy8gVXNlZCB0byBzY2hlZHVsZSBoaXN0b3J5IGNvbXByZXNzaW9uXG5jb25zdCBtYXhfZW1wdHlfaXRlbXMgPSA1MDA7XG5jbGFzcyBCcmFuY2gge1xuICAgIGNvbnN0cnVjdG9yKGl0ZW1zLCBldmVudENvdW50KSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBpdGVtcztcbiAgICAgICAgdGhpcy5ldmVudENvdW50ID0gZXZlbnRDb3VudDtcbiAgICB9XG4gICAgLy8gUG9wIHRoZSBsYXRlc3QgZXZlbnQgb2ZmIHRoZSBicmFuY2gncyBoaXN0b3J5IGFuZCBhcHBseSBpdFxuICAgIC8vIHRvIGEgZG9jdW1lbnQgdHJhbnNmb3JtLlxuICAgIHBvcEV2ZW50KHN0YXRlLCBwcmVzZXJ2ZUl0ZW1zKSB7XG4gICAgICAgIGlmICh0aGlzLmV2ZW50Q291bnQgPT0gMClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBsZXQgZW5kID0gdGhpcy5pdGVtcy5sZW5ndGg7XG4gICAgICAgIGZvciAoOzsgZW5kLS0pIHtcbiAgICAgICAgICAgIGxldCBuZXh0ID0gdGhpcy5pdGVtcy5nZXQoZW5kIC0gMSk7XG4gICAgICAgICAgICBpZiAobmV4dC5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAtLWVuZDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVtYXAsIG1hcEZyb207XG4gICAgICAgIGlmIChwcmVzZXJ2ZUl0ZW1zKSB7XG4gICAgICAgICAgICByZW1hcCA9IHRoaXMucmVtYXBwaW5nKGVuZCwgdGhpcy5pdGVtcy5sZW5ndGgpO1xuICAgICAgICAgICAgbWFwRnJvbSA9IHJlbWFwLm1hcHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0cmFuc2Zvcm0gPSBzdGF0ZS50cjtcbiAgICAgICAgbGV0IHNlbGVjdGlvbiwgcmVtYWluaW5nO1xuICAgICAgICBsZXQgYWRkQWZ0ZXIgPSBbXSwgYWRkQmVmb3JlID0gW107XG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFpdGVtLnN0ZXApIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlbWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFwID0gdGhpcy5yZW1hcHBpbmcoZW5kLCBpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIG1hcEZyb20gPSByZW1hcC5tYXBzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWFwRnJvbS0tO1xuICAgICAgICAgICAgICAgIGFkZEJlZm9yZS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZW1hcCkge1xuICAgICAgICAgICAgICAgIGFkZEJlZm9yZS5wdXNoKG5ldyBJdGVtKGl0ZW0ubWFwKSk7XG4gICAgICAgICAgICAgICAgbGV0IHN0ZXAgPSBpdGVtLnN0ZXAubWFwKHJlbWFwLnNsaWNlKG1hcEZyb20pKSwgbWFwO1xuICAgICAgICAgICAgICAgIGlmIChzdGVwICYmIHRyYW5zZm9ybS5tYXliZVN0ZXAoc3RlcCkuZG9jKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcCA9IHRyYW5zZm9ybS5tYXBwaW5nLm1hcHNbdHJhbnNmb3JtLm1hcHBpbmcubWFwcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgYWRkQWZ0ZXIucHVzaChuZXcgSXRlbShtYXAsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhZGRBZnRlci5sZW5ndGggKyBhZGRCZWZvcmUubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1hcEZyb20tLTtcbiAgICAgICAgICAgICAgICBpZiAobWFwKVxuICAgICAgICAgICAgICAgICAgICByZW1hcC5hcHBlbmRNYXAobWFwLCBtYXBGcm9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5tYXliZVN0ZXAoaXRlbS5zdGVwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IHJlbWFwID8gaXRlbS5zZWxlY3Rpb24ubWFwKHJlbWFwLnNsaWNlKG1hcEZyb20pKSA6IGl0ZW0uc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IG5ldyBCcmFuY2godGhpcy5pdGVtcy5zbGljZSgwLCBlbmQpLmFwcGVuZChhZGRCZWZvcmUucmV2ZXJzZSgpLmNvbmNhdChhZGRBZnRlcikpLCB0aGlzLmV2ZW50Q291bnQgLSAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMuaXRlbXMubGVuZ3RoLCAwKTtcbiAgICAgICAgcmV0dXJuIHsgcmVtYWluaW5nOiByZW1haW5pbmcsIHRyYW5zZm9ybSwgc2VsZWN0aW9uOiBzZWxlY3Rpb24gfTtcbiAgICB9XG4gICAgLy8gQ3JlYXRlIGEgbmV3IGJyYW5jaCB3aXRoIHRoZSBnaXZlbiB0cmFuc2Zvcm0gYWRkZWQuXG4gICAgYWRkVHJhbnNmb3JtKHRyYW5zZm9ybSwgc2VsZWN0aW9uLCBoaXN0T3B0aW9ucywgcHJlc2VydmVJdGVtcykge1xuICAgICAgICBsZXQgbmV3SXRlbXMgPSBbXSwgZXZlbnRDb3VudCA9IHRoaXMuZXZlbnRDb3VudDtcbiAgICAgICAgbGV0IG9sZEl0ZW1zID0gdGhpcy5pdGVtcywgbGFzdEl0ZW0gPSAhcHJlc2VydmVJdGVtcyAmJiBvbGRJdGVtcy5sZW5ndGggPyBvbGRJdGVtcy5nZXQob2xkSXRlbXMubGVuZ3RoIC0gMSkgOiBudWxsO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyYW5zZm9ybS5zdGVwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHN0ZXAgPSB0cmFuc2Zvcm0uc3RlcHNbaV0uaW52ZXJ0KHRyYW5zZm9ybS5kb2NzW2ldKTtcbiAgICAgICAgICAgIGxldCBpdGVtID0gbmV3IEl0ZW0odHJhbnNmb3JtLm1hcHBpbmcubWFwc1tpXSwgc3RlcCwgc2VsZWN0aW9uKSwgbWVyZ2VkO1xuICAgICAgICAgICAgaWYgKG1lcmdlZCA9IGxhc3RJdGVtICYmIGxhc3RJdGVtLm1lcmdlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgaXRlbSA9IG1lcmdlZDtcbiAgICAgICAgICAgICAgICBpZiAoaSlcbiAgICAgICAgICAgICAgICAgICAgbmV3SXRlbXMucG9wKCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBvbGRJdGVtcyA9IG9sZEl0ZW1zLnNsaWNlKDAsIG9sZEl0ZW1zLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3SXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBldmVudENvdW50Kys7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUl0ZW1zKVxuICAgICAgICAgICAgICAgIGxhc3RJdGVtID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgb3ZlcmZsb3cgPSBldmVudENvdW50IC0gaGlzdE9wdGlvbnMuZGVwdGg7XG4gICAgICAgIGlmIChvdmVyZmxvdyA+IERFUFRIX09WRVJGTE9XKSB7XG4gICAgICAgICAgICBvbGRJdGVtcyA9IGN1dE9mZkV2ZW50cyhvbGRJdGVtcywgb3ZlcmZsb3cpO1xuICAgICAgICAgICAgZXZlbnRDb3VudCAtPSBvdmVyZmxvdztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEJyYW5jaChvbGRJdGVtcy5hcHBlbmQobmV3SXRlbXMpLCBldmVudENvdW50KTtcbiAgICB9XG4gICAgcmVtYXBwaW5nKGZyb20sIHRvKSB7XG4gICAgICAgIGxldCBtYXBzID0gbmV3IE1hcHBpbmc7XG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgbGV0IG1pcnJvclBvcyA9IGl0ZW0ubWlycm9yT2Zmc2V0ICE9IG51bGwgJiYgaSAtIGl0ZW0ubWlycm9yT2Zmc2V0ID49IGZyb21cbiAgICAgICAgICAgICAgICA/IG1hcHMubWFwcy5sZW5ndGggLSBpdGVtLm1pcnJvck9mZnNldCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIG1hcHMuYXBwZW5kTWFwKGl0ZW0ubWFwLCBtaXJyb3JQb3MpO1xuICAgICAgICB9LCBmcm9tLCB0byk7XG4gICAgICAgIHJldHVybiBtYXBzO1xuICAgIH1cbiAgICBhZGRNYXBzKGFycmF5KSB7XG4gICAgICAgIGlmICh0aGlzLmV2ZW50Q291bnQgPT0gMClcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICByZXR1cm4gbmV3IEJyYW5jaCh0aGlzLml0ZW1zLmFwcGVuZChhcnJheS5tYXAobWFwID0+IG5ldyBJdGVtKG1hcCkpKSwgdGhpcy5ldmVudENvdW50KTtcbiAgICB9XG4gICAgLy8gV2hlbiB0aGUgY29sbGFiIG1vZHVsZSByZWNlaXZlcyByZW1vdGUgY2hhbmdlcywgdGhlIGhpc3RvcnkgaGFzXG4gICAgLy8gdG8ga25vdyBhYm91dCB0aG9zZSwgc28gdGhhdCBpdCBjYW4gYWRqdXN0IHRoZSBzdGVwcyB0aGF0IHdlcmVcbiAgICAvLyByZWJhc2VkIG9uIHRvcCBvZiB0aGUgcmVtb3RlIGNoYW5nZXMsIGFuZCBpbmNsdWRlIHRoZSBwb3NpdGlvblxuICAgIC8vIG1hcHMgZm9yIHRoZSByZW1vdGUgY2hhbmdlcyBpbiBpdHMgYXJyYXkgb2YgaXRlbXMuXG4gICAgcmViYXNlZChyZWJhc2VkVHJhbnNmb3JtLCByZWJhc2VkQ291bnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmV2ZW50Q291bnQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgbGV0IHJlYmFzZWRJdGVtcyA9IFtdLCBzdGFydCA9IE1hdGgubWF4KDAsIHRoaXMuaXRlbXMubGVuZ3RoIC0gcmViYXNlZENvdW50KTtcbiAgICAgICAgbGV0IG1hcHBpbmcgPSByZWJhc2VkVHJhbnNmb3JtLm1hcHBpbmc7XG4gICAgICAgIGxldCBuZXdVbnRpbCA9IHJlYmFzZWRUcmFuc2Zvcm0uc3RlcHMubGVuZ3RoO1xuICAgICAgICBsZXQgZXZlbnRDb3VudCA9IHRoaXMuZXZlbnRDb3VudDtcbiAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4geyBpZiAoaXRlbS5zZWxlY3Rpb24pXG4gICAgICAgICAgICBldmVudENvdW50LS07IH0sIHN0YXJ0KTtcbiAgICAgICAgbGV0IGlSZWJhc2VkID0gcmViYXNlZENvdW50O1xuICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBsZXQgcG9zID0gbWFwcGluZy5nZXRNaXJyb3IoLS1pUmViYXNlZCk7XG4gICAgICAgICAgICBpZiAocG9zID09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgbmV3VW50aWwgPSBNYXRoLm1pbihuZXdVbnRpbCwgcG9zKTtcbiAgICAgICAgICAgIGxldCBtYXAgPSBtYXBwaW5nLm1hcHNbcG9zXTtcbiAgICAgICAgICAgIGlmIChpdGVtLnN0ZXApIHtcbiAgICAgICAgICAgICAgICBsZXQgc3RlcCA9IHJlYmFzZWRUcmFuc2Zvcm0uc3RlcHNbcG9zXS5pbnZlcnQocmViYXNlZFRyYW5zZm9ybS5kb2NzW3Bvc10pO1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3Rpb24gPSBpdGVtLnNlbGVjdGlvbiAmJiBpdGVtLnNlbGVjdGlvbi5tYXAobWFwcGluZy5zbGljZShpUmViYXNlZCArIDEsIHBvcykpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24pXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Q291bnQrKztcbiAgICAgICAgICAgICAgICByZWJhc2VkSXRlbXMucHVzaChuZXcgSXRlbShtYXAsIHN0ZXAsIHNlbGVjdGlvbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmViYXNlZEl0ZW1zLnB1c2gobmV3IEl0ZW0obWFwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHN0YXJ0KTtcbiAgICAgICAgbGV0IG5ld01hcHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHJlYmFzZWRDb3VudDsgaSA8IG5ld1VudGlsOyBpKyspXG4gICAgICAgICAgICBuZXdNYXBzLnB1c2gobmV3IEl0ZW0obWFwcGluZy5tYXBzW2ldKSk7XG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UoMCwgc3RhcnQpLmFwcGVuZChuZXdNYXBzKS5hcHBlbmQocmViYXNlZEl0ZW1zKTtcbiAgICAgICAgbGV0IGJyYW5jaCA9IG5ldyBCcmFuY2goaXRlbXMsIGV2ZW50Q291bnQpO1xuICAgICAgICBpZiAoYnJhbmNoLmVtcHR5SXRlbUNvdW50KCkgPiBtYXhfZW1wdHlfaXRlbXMpXG4gICAgICAgICAgICBicmFuY2ggPSBicmFuY2guY29tcHJlc3ModGhpcy5pdGVtcy5sZW5ndGggLSByZWJhc2VkSXRlbXMubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIGJyYW5jaDtcbiAgICB9XG4gICAgZW1wdHlJdGVtQ291bnQoKSB7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHsgaWYgKCFpdGVtLnN0ZXApXG4gICAgICAgICAgICBjb3VudCsrOyB9KTtcbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH1cbiAgICAvLyBDb21wcmVzc2luZyBhIGJyYW5jaCBtZWFucyByZXdyaXRpbmcgaXQgdG8gcHVzaCB0aGUgYWlyIChtYXAtb25seVxuICAgIC8vIGl0ZW1zKSBvdXQuIER1cmluZyBjb2xsYWJvcmF0aW9uLCB0aGVzZSBuYXR1cmFsbHkgYWNjdW11bGF0ZVxuICAgIC8vIGJlY2F1c2UgZWFjaCByZW1vdGUgY2hhbmdlIGFkZHMgb25lLiBUaGUgYHVwdG9gIGFyZ3VtZW50IGlzIHVzZWRcbiAgICAvLyB0byBlbnN1cmUgdGhhdCBvbmx5IHRoZSBpdGVtcyBiZWxvdyBhIGdpdmVuIGxldmVsIGFyZSBjb21wcmVzc2VkLFxuICAgIC8vIGJlY2F1c2UgYHJlYmFzZWRgIHJlbGllcyBvbiBhIGNsZWFuLCB1bnRvdWNoZWQgc2V0IG9mIGl0ZW1zIGluXG4gICAgLy8gb3JkZXIgdG8gYXNzb2NpYXRlIG9sZCBpdGVtcyB3aXRoIHJlYmFzZWQgc3RlcHMuXG4gICAgY29tcHJlc3ModXB0byA9IHRoaXMuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIGxldCByZW1hcCA9IHRoaXMucmVtYXBwaW5nKDAsIHVwdG8pLCBtYXBGcm9tID0gcmVtYXAubWFwcy5sZW5ndGg7XG4gICAgICAgIGxldCBpdGVtcyA9IFtdLCBldmVudHMgPSAwO1xuICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChpID49IHVwdG8pIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnNlbGVjdGlvbilcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpdGVtLnN0ZXApIHtcbiAgICAgICAgICAgICAgICBsZXQgc3RlcCA9IGl0ZW0uc3RlcC5tYXAocmVtYXAuc2xpY2UobWFwRnJvbSkpLCBtYXAgPSBzdGVwICYmIHN0ZXAuZ2V0TWFwKCk7XG4gICAgICAgICAgICAgICAgbWFwRnJvbS0tO1xuICAgICAgICAgICAgICAgIGlmIChtYXApXG4gICAgICAgICAgICAgICAgICAgIHJlbWFwLmFwcGVuZE1hcChtYXAsIG1hcEZyb20pO1xuICAgICAgICAgICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzZWxlY3Rpb24gPSBpdGVtLnNlbGVjdGlvbiAmJiBpdGVtLnNlbGVjdGlvbi5tYXAocmVtYXAuc2xpY2UobWFwRnJvbSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzKys7XG4gICAgICAgICAgICAgICAgICAgIGxldCBuZXdJdGVtID0gbmV3IEl0ZW0obWFwLmludmVydCgpLCBzdGVwLCBzZWxlY3Rpb24pLCBtZXJnZWQsIGxhc3QgPSBpdGVtcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWVyZ2VkID0gaXRlbXMubGVuZ3RoICYmIGl0ZW1zW2xhc3RdLm1lcmdlKG5ld0l0ZW0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNbbGFzdF0gPSBtZXJnZWQ7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2gobmV3SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5tYXApIHtcbiAgICAgICAgICAgICAgICBtYXBGcm9tLS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMuaXRlbXMubGVuZ3RoLCAwKTtcbiAgICAgICAgcmV0dXJuIG5ldyBCcmFuY2goUm9wZVNlcXVlbmNlLmZyb20oaXRlbXMucmV2ZXJzZSgpKSwgZXZlbnRzKTtcbiAgICB9XG59XG5CcmFuY2guZW1wdHkgPSBuZXcgQnJhbmNoKFJvcGVTZXF1ZW5jZS5lbXB0eSwgMCk7XG5mdW5jdGlvbiBjdXRPZmZFdmVudHMoaXRlbXMsIG4pIHtcbiAgICBsZXQgY3V0UG9pbnQ7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5zZWxlY3Rpb24gJiYgKG4tLSA9PSAwKSkge1xuICAgICAgICAgICAgY3V0UG9pbnQgPSBpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZW1zLnNsaWNlKGN1dFBvaW50KTtcbn1cbmNsYXNzIEl0ZW0ge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgIC8vIFRoZSAoZm9yd2FyZCkgc3RlcCBtYXAgZm9yIHRoaXMgaXRlbS5cbiAgICBtYXAsIFxuICAgIC8vIFRoZSBpbnZlcnRlZCBzdGVwXG4gICAgc3RlcCwgXG4gICAgLy8gSWYgdGhpcyBpcyBub24tbnVsbCwgdGhpcyBpdGVtIGlzIHRoZSBzdGFydCBvZiBhIGdyb3VwLCBhbmRcbiAgICAvLyB0aGlzIHNlbGVjdGlvbiBpcyB0aGUgc3RhcnRpbmcgc2VsZWN0aW9uIGZvciB0aGUgZ3JvdXAgKHRoZSBvbmVcbiAgICAvLyB0aGF0IHdhcyBhY3RpdmUgYmVmb3JlIHRoZSBmaXJzdCBzdGVwIHdhcyBhcHBsaWVkKVxuICAgIHNlbGVjdGlvbiwgXG4gICAgLy8gSWYgdGhpcyBpdGVtIGlzIHRoZSBpbnZlcnNlIG9mIGEgcHJldmlvdXMgbWFwcGluZyBvbiB0aGUgc3RhY2ssXG4gICAgLy8gdGhpcyBwb2ludHMgYXQgdGhlIGludmVyc2UncyBvZmZzZXRcbiAgICBtaXJyb3JPZmZzZXQpIHtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuc3RlcCA9IHN0ZXA7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uO1xuICAgICAgICB0aGlzLm1pcnJvck9mZnNldCA9IG1pcnJvck9mZnNldDtcbiAgICB9XG4gICAgbWVyZ2Uob3RoZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RlcCAmJiBvdGhlci5zdGVwICYmICFvdGhlci5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGxldCBzdGVwID0gb3RoZXIuc3RlcC5tZXJnZSh0aGlzLnN0ZXApO1xuICAgICAgICAgICAgaWYgKHN0ZXApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJdGVtKHN0ZXAuZ2V0TWFwKCkuaW52ZXJ0KCksIHN0ZXAsIHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIFRoZSB2YWx1ZSBvZiB0aGUgc3RhdGUgZmllbGQgdGhhdCB0cmFja3MgdW5kby9yZWRvIGhpc3RvcnkgZm9yIHRoYXRcbi8vIHN0YXRlLiBXaWxsIGJlIHN0b3JlZCBpbiB0aGUgcGx1Z2luIHN0YXRlIHdoZW4gdGhlIGhpc3RvcnkgcGx1Z2luXG4vLyBpcyBhY3RpdmUuXG5jbGFzcyBIaXN0b3J5U3RhdGUge1xuICAgIGNvbnN0cnVjdG9yKGRvbmUsIHVuZG9uZSwgcHJldlJhbmdlcywgcHJldlRpbWUpIHtcbiAgICAgICAgdGhpcy5kb25lID0gZG9uZTtcbiAgICAgICAgdGhpcy51bmRvbmUgPSB1bmRvbmU7XG4gICAgICAgIHRoaXMucHJldlJhbmdlcyA9IHByZXZSYW5nZXM7XG4gICAgICAgIHRoaXMucHJldlRpbWUgPSBwcmV2VGltZTtcbiAgICB9XG59XG5jb25zdCBERVBUSF9PVkVSRkxPVyA9IDIwO1xuLy8gUmVjb3JkIGEgdHJhbnNmb3JtYXRpb24gaW4gdW5kbyBoaXN0b3J5LlxuZnVuY3Rpb24gYXBwbHlUcmFuc2FjdGlvbihoaXN0b3J5LCBzdGF0ZSwgdHIsIG9wdGlvbnMpIHtcbiAgICBsZXQgaGlzdG9yeVRyID0gdHIuZ2V0TWV0YShoaXN0b3J5S2V5KSwgcmViYXNlZDtcbiAgICBpZiAoaGlzdG9yeVRyKVxuICAgICAgICByZXR1cm4gaGlzdG9yeVRyLmhpc3RvcnlTdGF0ZTtcbiAgICBpZiAodHIuZ2V0TWV0YShjbG9zZUhpc3RvcnlLZXkpKVxuICAgICAgICBoaXN0b3J5ID0gbmV3IEhpc3RvcnlTdGF0ZShoaXN0b3J5LmRvbmUsIGhpc3RvcnkudW5kb25lLCBudWxsLCAwKTtcbiAgICBsZXQgYXBwZW5kZWQgPSB0ci5nZXRNZXRhKFwiYXBwZW5kZWRUcmFuc2FjdGlvblwiKTtcbiAgICBpZiAodHIuc3RlcHMubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuIGhpc3Rvcnk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFwcGVuZGVkICYmIGFwcGVuZGVkLmdldE1ldGEoaGlzdG9yeUtleSkpIHtcbiAgICAgICAgaWYgKGFwcGVuZGVkLmdldE1ldGEoaGlzdG9yeUtleSkucmVkbylcbiAgICAgICAgICAgIHJldHVybiBuZXcgSGlzdG9yeVN0YXRlKGhpc3RvcnkuZG9uZS5hZGRUcmFuc2Zvcm0odHIsIHVuZGVmaW5lZCwgb3B0aW9ucywgbXVzdFByZXNlcnZlSXRlbXMoc3RhdGUpKSwgaGlzdG9yeS51bmRvbmUsIHJhbmdlc0Zvcih0ci5tYXBwaW5nLm1hcHNbdHIuc3RlcHMubGVuZ3RoIC0gMV0pLCBoaXN0b3J5LnByZXZUaW1lKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBIaXN0b3J5U3RhdGUoaGlzdG9yeS5kb25lLCBoaXN0b3J5LnVuZG9uZS5hZGRUcmFuc2Zvcm0odHIsIHVuZGVmaW5lZCwgb3B0aW9ucywgbXVzdFByZXNlcnZlSXRlbXMoc3RhdGUpKSwgbnVsbCwgaGlzdG9yeS5wcmV2VGltZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRyLmdldE1ldGEoXCJhZGRUb0hpc3RvcnlcIikgIT09IGZhbHNlICYmICEoYXBwZW5kZWQgJiYgYXBwZW5kZWQuZ2V0TWV0YShcImFkZFRvSGlzdG9yeVwiKSA9PT0gZmFsc2UpKSB7XG4gICAgICAgIC8vIEdyb3VwIHRyYW5zZm9ybXMgdGhhdCBvY2N1ciBpbiBxdWljayBzdWNjZXNzaW9uIGludG8gb25lIGV2ZW50LlxuICAgICAgICBsZXQgbmV3R3JvdXAgPSBoaXN0b3J5LnByZXZUaW1lID09IDAgfHwgIWFwcGVuZGVkICYmIChoaXN0b3J5LnByZXZUaW1lIDwgKHRyLnRpbWUgfHwgMCkgLSBvcHRpb25zLm5ld0dyb3VwRGVsYXkgfHxcbiAgICAgICAgICAgICFpc0FkamFjZW50VG8odHIsIGhpc3RvcnkucHJldlJhbmdlcykpO1xuICAgICAgICBsZXQgcHJldlJhbmdlcyA9IGFwcGVuZGVkID8gbWFwUmFuZ2VzKGhpc3RvcnkucHJldlJhbmdlcywgdHIubWFwcGluZykgOiByYW5nZXNGb3IodHIubWFwcGluZy5tYXBzW3RyLnN0ZXBzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBIaXN0b3J5U3RhdGUoaGlzdG9yeS5kb25lLmFkZFRyYW5zZm9ybSh0ciwgbmV3R3JvdXAgPyBzdGF0ZS5zZWxlY3Rpb24uZ2V0Qm9va21hcmsoKSA6IHVuZGVmaW5lZCwgb3B0aW9ucywgbXVzdFByZXNlcnZlSXRlbXMoc3RhdGUpKSwgQnJhbmNoLmVtcHR5LCBwcmV2UmFuZ2VzLCB0ci50aW1lKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmViYXNlZCA9IHRyLmdldE1ldGEoXCJyZWJhc2VkXCIpKSB7XG4gICAgICAgIC8vIFVzZWQgYnkgdGhlIGNvbGxhYiBtb2R1bGUgdG8gdGVsbCB0aGUgaGlzdG9yeSB0aGF0IHNvbWUgb2YgaXRzXG4gICAgICAgIC8vIGNvbnRlbnQgaGFzIGJlZW4gcmViYXNlZC5cbiAgICAgICAgcmV0dXJuIG5ldyBIaXN0b3J5U3RhdGUoaGlzdG9yeS5kb25lLnJlYmFzZWQodHIsIHJlYmFzZWQpLCBoaXN0b3J5LnVuZG9uZS5yZWJhc2VkKHRyLCByZWJhc2VkKSwgbWFwUmFuZ2VzKGhpc3RvcnkucHJldlJhbmdlcywgdHIubWFwcGluZyksIGhpc3RvcnkucHJldlRpbWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIaXN0b3J5U3RhdGUoaGlzdG9yeS5kb25lLmFkZE1hcHModHIubWFwcGluZy5tYXBzKSwgaGlzdG9yeS51bmRvbmUuYWRkTWFwcyh0ci5tYXBwaW5nLm1hcHMpLCBtYXBSYW5nZXMoaGlzdG9yeS5wcmV2UmFuZ2VzLCB0ci5tYXBwaW5nKSwgaGlzdG9yeS5wcmV2VGltZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNBZGphY2VudFRvKHRyYW5zZm9ybSwgcHJldlJhbmdlcykge1xuICAgIGlmICghcHJldlJhbmdlcylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghdHJhbnNmb3JtLmRvY0NoYW5nZWQpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGxldCBhZGphY2VudCA9IGZhbHNlO1xuICAgIHRyYW5zZm9ybS5tYXBwaW5nLm1hcHNbMF0uZm9yRWFjaCgoc3RhcnQsIGVuZCkgPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZSYW5nZXMubGVuZ3RoOyBpICs9IDIpXG4gICAgICAgICAgICBpZiAoc3RhcnQgPD0gcHJldlJhbmdlc1tpICsgMV0gJiYgZW5kID49IHByZXZSYW5nZXNbaV0pXG4gICAgICAgICAgICAgICAgYWRqYWNlbnQgPSB0cnVlO1xuICAgIH0pO1xuICAgIHJldHVybiBhZGphY2VudDtcbn1cbmZ1bmN0aW9uIHJhbmdlc0ZvcihtYXApIHtcbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgbWFwLmZvckVhY2goKF9mcm9tLCBfdG8sIGZyb20sIHRvKSA9PiByZXN1bHQucHVzaChmcm9tLCB0bykpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBtYXBSYW5nZXMocmFuZ2VzLCBtYXBwaW5nKSB7XG4gICAgaWYgKCFyYW5nZXMpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBsZXQgZnJvbSA9IG1hcHBpbmcubWFwKHJhbmdlc1tpXSwgMSksIHRvID0gbWFwcGluZy5tYXAocmFuZ2VzW2kgKyAxXSwgLTEpO1xuICAgICAgICBpZiAoZnJvbSA8PSB0bylcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZyb20sIHRvKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIEFwcGx5IHRoZSBsYXRlc3QgZXZlbnQgZnJvbSBvbmUgYnJhbmNoIHRvIHRoZSBkb2N1bWVudCBhbmQgc2hpZnQgdGhlIGV2ZW50XG4vLyBvbnRvIHRoZSBvdGhlciBicmFuY2guXG5mdW5jdGlvbiBoaXN0VHJhbnNhY3Rpb24oaGlzdG9yeSwgc3RhdGUsIGRpc3BhdGNoLCByZWRvKSB7XG4gICAgbGV0IHByZXNlcnZlSXRlbXMgPSBtdXN0UHJlc2VydmVJdGVtcyhzdGF0ZSk7XG4gICAgbGV0IGhpc3RPcHRpb25zID0gaGlzdG9yeUtleS5nZXQoc3RhdGUpLnNwZWMuY29uZmlnO1xuICAgIGxldCBwb3AgPSAocmVkbyA/IGhpc3RvcnkudW5kb25lIDogaGlzdG9yeS5kb25lKS5wb3BFdmVudChzdGF0ZSwgcHJlc2VydmVJdGVtcyk7XG4gICAgaWYgKCFwb3ApXG4gICAgICAgIHJldHVybjtcbiAgICBsZXQgc2VsZWN0aW9uID0gcG9wLnNlbGVjdGlvbi5yZXNvbHZlKHBvcC50cmFuc2Zvcm0uZG9jKTtcbiAgICBsZXQgYWRkZWQgPSAocmVkbyA/IGhpc3RvcnkuZG9uZSA6IGhpc3RvcnkudW5kb25lKS5hZGRUcmFuc2Zvcm0ocG9wLnRyYW5zZm9ybSwgc3RhdGUuc2VsZWN0aW9uLmdldEJvb2ttYXJrKCksIGhpc3RPcHRpb25zLCBwcmVzZXJ2ZUl0ZW1zKTtcbiAgICBsZXQgbmV3SGlzdCA9IG5ldyBIaXN0b3J5U3RhdGUocmVkbyA/IGFkZGVkIDogcG9wLnJlbWFpbmluZywgcmVkbyA/IHBvcC5yZW1haW5pbmcgOiBhZGRlZCwgbnVsbCwgMCk7XG4gICAgZGlzcGF0Y2gocG9wLnRyYW5zZm9ybS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKS5zZXRNZXRhKGhpc3RvcnlLZXksIHsgcmVkbywgaGlzdG9yeVN0YXRlOiBuZXdIaXN0IH0pLnNjcm9sbEludG9WaWV3KCkpO1xufVxubGV0IGNhY2hlZFByZXNlcnZlSXRlbXMgPSBmYWxzZSwgY2FjaGVkUHJlc2VydmVJdGVtc1BsdWdpbnMgPSBudWxsO1xuLy8gQ2hlY2sgd2hldGhlciBhbnkgcGx1Z2luIGluIHRoZSBnaXZlbiBzdGF0ZSBoYXMgYVxuLy8gYGhpc3RvcnlQcmVzZXJ2ZUl0ZW1zYCBwcm9wZXJ0eSBpbiBpdHMgc3BlYywgaW4gd2hpY2ggY2FzZSB3ZSBtdXN0XG4vLyBwcmVzZXJ2ZSBzdGVwcyBleGFjdGx5IGFzIHRoZXkgY2FtZSBpbiwgc28gdGhhdCB0aGV5IGNhbiBiZVxuLy8gcmViYXNlZC5cbmZ1bmN0aW9uIG11c3RQcmVzZXJ2ZUl0ZW1zKHN0YXRlKSB7XG4gICAgbGV0IHBsdWdpbnMgPSBzdGF0ZS5wbHVnaW5zO1xuICAgIGlmIChjYWNoZWRQcmVzZXJ2ZUl0ZW1zUGx1Z2lucyAhPSBwbHVnaW5zKSB7XG4gICAgICAgIGNhY2hlZFByZXNlcnZlSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgY2FjaGVkUHJlc2VydmVJdGVtc1BsdWdpbnMgPSBwbHVnaW5zO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBpZiAocGx1Z2luc1tpXS5zcGVjLmhpc3RvcnlQcmVzZXJ2ZUl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgY2FjaGVkUHJlc2VydmVJdGVtcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjYWNoZWRQcmVzZXJ2ZUl0ZW1zO1xufVxuLyoqXG5TZXQgYSBmbGFnIG9uIHRoZSBnaXZlbiB0cmFuc2FjdGlvbiB0aGF0IHdpbGwgcHJldmVudCBmdXJ0aGVyIHN0ZXBzXG5mcm9tIGJlaW5nIGFwcGVuZGVkIHRvIGFuIGV4aXN0aW5nIGhpc3RvcnkgZXZlbnQgKHNvIHRoYXQgdGhleVxucmVxdWlyZSBhIHNlcGFyYXRlIHVuZG8gY29tbWFuZCB0byB1bmRvKS5cbiovXG5mdW5jdGlvbiBjbG9zZUhpc3RvcnkodHIpIHtcbiAgICByZXR1cm4gdHIuc2V0TWV0YShjbG9zZUhpc3RvcnlLZXksIHRydWUpO1xufVxuY29uc3QgaGlzdG9yeUtleSA9IG5ldyBQbHVnaW5LZXkoXCJoaXN0b3J5XCIpO1xuY29uc3QgY2xvc2VIaXN0b3J5S2V5ID0gbmV3IFBsdWdpbktleShcImNsb3NlSGlzdG9yeVwiKTtcbi8qKlxuUmV0dXJucyBhIHBsdWdpbiB0aGF0IGVuYWJsZXMgdGhlIHVuZG8gaGlzdG9yeSBmb3IgYW4gZWRpdG9yLiBUaGVcbnBsdWdpbiB3aWxsIHRyYWNrIHVuZG8gYW5kIHJlZG8gc3RhY2tzLCB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIHRoZVxuW2B1bmRvYF0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI2hpc3RvcnkudW5kbykgYW5kIFtgcmVkb2BdKGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvcmVmLyNoaXN0b3J5LnJlZG8pIGNvbW1hbmRzLlxuXG5Zb3UgY2FuIHNldCBhbiBgXCJhZGRUb0hpc3RvcnlcImAgW21ldGFkYXRhXG5wcm9wZXJ0eV0oaHR0cHM6Ly9wcm9zZW1pcnJvci5uZXQvZG9jcy9yZWYvI3N0YXRlLlRyYW5zYWN0aW9uLnNldE1ldGEpIG9mIGBmYWxzZWAgb24gYSB0cmFuc2FjdGlvblxudG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIHJvbGxlZCBiYWNrIGJ5IHVuZG8uXG4qL1xuZnVuY3Rpb24gaGlzdG9yeShjb25maWcgPSB7fSkge1xuICAgIGNvbmZpZyA9IHsgZGVwdGg6IGNvbmZpZy5kZXB0aCB8fCAxMDAsXG4gICAgICAgIG5ld0dyb3VwRGVsYXk6IGNvbmZpZy5uZXdHcm91cERlbGF5IHx8IDUwMCB9O1xuICAgIHJldHVybiBuZXcgUGx1Z2luKHtcbiAgICAgICAga2V5OiBoaXN0b3J5S2V5LFxuICAgICAgICBzdGF0ZToge1xuICAgICAgICAgICAgaW5pdCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEhpc3RvcnlTdGF0ZShCcmFuY2guZW1wdHksIEJyYW5jaC5lbXB0eSwgbnVsbCwgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXBwbHkodHIsIGhpc3QsIHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwcGx5VHJhbnNhY3Rpb24oaGlzdCwgc3RhdGUsIHRyLCBjb25maWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBoYW5kbGVET01FdmVudHM6IHtcbiAgICAgICAgICAgICAgICBiZWZvcmVpbnB1dCh2aWV3LCBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbnB1dFR5cGUgPSBlLmlucHV0VHlwZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbW1hbmQgPSBpbnB1dFR5cGUgPT0gXCJoaXN0b3J5VW5kb1wiID8gdW5kbyA6IGlucHV0VHlwZSA9PSBcImhpc3RvcnlSZWRvXCIgPyByZWRvIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21tYW5kKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kKHZpZXcuc3RhdGUsIHZpZXcuZGlzcGF0Y2gpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG5BIGNvbW1hbmQgZnVuY3Rpb24gdGhhdCB1bmRvZXMgdGhlIGxhc3QgY2hhbmdlLCBpZiBhbnkuXG4qL1xuY29uc3QgdW5kbyA9IChzdGF0ZSwgZGlzcGF0Y2gpID0+IHtcbiAgICBsZXQgaGlzdCA9IGhpc3RvcnlLZXkuZ2V0U3RhdGUoc3RhdGUpO1xuICAgIGlmICghaGlzdCB8fCBoaXN0LmRvbmUuZXZlbnRDb3VudCA9PSAwKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGRpc3BhdGNoKVxuICAgICAgICBoaXN0VHJhbnNhY3Rpb24oaGlzdCwgc3RhdGUsIGRpc3BhdGNoLCBmYWxzZSk7XG4gICAgcmV0dXJuIHRydWU7XG59O1xuLyoqXG5BIGNvbW1hbmQgZnVuY3Rpb24gdGhhdCByZWRvZXMgdGhlIGxhc3QgdW5kb25lIGNoYW5nZSwgaWYgYW55LlxuKi9cbmNvbnN0IHJlZG8gPSAoc3RhdGUsIGRpc3BhdGNoKSA9PiB7XG4gICAgbGV0IGhpc3QgPSBoaXN0b3J5S2V5LmdldFN0YXRlKHN0YXRlKTtcbiAgICBpZiAoIWhpc3QgfHwgaGlzdC51bmRvbmUuZXZlbnRDb3VudCA9PSAwKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGRpc3BhdGNoKVxuICAgICAgICBoaXN0VHJhbnNhY3Rpb24oaGlzdCwgc3RhdGUsIGRpc3BhdGNoLCB0cnVlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4vKipcblRoZSBhbW91bnQgb2YgdW5kb2FibGUgZXZlbnRzIGF2YWlsYWJsZSBpbiBhIGdpdmVuIHN0YXRlLlxuKi9cbmZ1bmN0aW9uIHVuZG9EZXB0aChzdGF0ZSkge1xuICAgIGxldCBoaXN0ID0gaGlzdG9yeUtleS5nZXRTdGF0ZShzdGF0ZSk7XG4gICAgcmV0dXJuIGhpc3QgPyBoaXN0LmRvbmUuZXZlbnRDb3VudCA6IDA7XG59XG4vKipcblRoZSBhbW91bnQgb2YgcmVkb2FibGUgZXZlbnRzIGF2YWlsYWJsZSBpbiBhIGdpdmVuIGVkaXRvciBzdGF0ZS5cbiovXG5mdW5jdGlvbiByZWRvRGVwdGgoc3RhdGUpIHtcbiAgICBsZXQgaGlzdCA9IGhpc3RvcnlLZXkuZ2V0U3RhdGUoc3RhdGUpO1xuICAgIHJldHVybiBoaXN0ID8gaGlzdC51bmRvbmUuZXZlbnRDb3VudCA6IDA7XG59XG5cbmV4cG9ydCB7IGNsb3NlSGlzdG9yeSwgaGlzdG9yeSwgcmVkbywgcmVkb0RlcHRoLCB1bmRvLCB1bmRvRGVwdGggfTtcbiIsImltcG9ydCB7IEV4dGVuc2lvbiB9IGZyb20gJ0B0aXB0YXAvY29yZSc7XG5pbXBvcnQgeyB1bmRvLCByZWRvLCBoaXN0b3J5IH0gZnJvbSAnQHRpcHRhcC9wbS9oaXN0b3J5JztcblxuY29uc3QgSGlzdG9yeSA9IEV4dGVuc2lvbi5jcmVhdGUoe1xyXG4gICAgbmFtZTogJ2hpc3RvcnknLFxyXG4gICAgYWRkT3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkZXB0aDogMTAwLFxyXG4gICAgICAgICAgICBuZXdHcm91cERlbGF5OiA1MDAsXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBhZGRDb21tYW5kcygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB1bmRvOiAoKSA9PiAoeyBzdGF0ZSwgZGlzcGF0Y2ggfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZG8oc3RhdGUsIGRpc3BhdGNoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVkbzogKCkgPT4gKHsgc3RhdGUsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZWRvKHN0YXRlLCBkaXNwYXRjaCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBhZGRQcm9zZU1pcnJvclBsdWdpbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgaGlzdG9yeSh0aGlzLm9wdGlvbnMpLFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG4gICAgYWRkS2V5Ym9hcmRTaG9ydGN1dHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ01vZC16JzogKCkgPT4gdGhpcy5lZGl0b3IuY29tbWFuZHMudW5kbygpLFxyXG4gICAgICAgICAgICAnTW9kLVonOiAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy51bmRvKCksXHJcbiAgICAgICAgICAgICdNb2QteSc6ICgpID0+IHRoaXMuZWRpdG9yLmNvbW1hbmRzLnJlZG8oKSxcclxuICAgICAgICAgICAgJ01vZC1ZJzogKCkgPT4gdGhpcy5lZGl0b3IuY29tbWFuZHMucmVkbygpLFxyXG4gICAgICAgICAgICAnU2hpZnQtTW9kLXonOiAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy5yZWRvKCksXHJcbiAgICAgICAgICAgICdTaGlmdC1Nb2QtWic6ICgpID0+IHRoaXMuZWRpdG9yLmNvbW1hbmRzLnJlZG8oKSxcclxuICAgICAgICAgICAgLy8gUnVzc2lhbiBrZXlib2FyZCBsYXlvdXRzXHJcbiAgICAgICAgICAgICdNb2Qt0Y8nOiAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy51bmRvKCksXHJcbiAgICAgICAgICAgICdTaGlmdC1Nb2Qt0Y8nOiAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy5yZWRvKCksXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbn0pO1xuXG5leHBvcnQgeyBIaXN0b3J5LCBIaXN0b3J5IGFzIGRlZmF1bHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwiaW1wb3J0IHsgTm9kZSwgbWVyZ2VBdHRyaWJ1dGVzLCBub2RlSW5wdXRSdWxlIH0gZnJvbSAnQHRpcHRhcC9jb3JlJztcbmltcG9ydCB7IFRleHRTZWxlY3Rpb24sIE5vZGVTZWxlY3Rpb24gfSBmcm9tICdAdGlwdGFwL3BtL3N0YXRlJztcblxuY29uc3QgSG9yaXpvbnRhbFJ1bGUgPSBOb2RlLmNyZWF0ZSh7XHJcbiAgICBuYW1lOiAnaG9yaXpvbnRhbFJ1bGUnLFxyXG4gICAgYWRkT3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBIVE1MQXR0cmlidXRlczoge30sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBncm91cDogJ2Jsb2NrJyxcclxuICAgIHBhcnNlSFRNTCgpIHtcclxuICAgICAgICByZXR1cm4gW3sgdGFnOiAnaHInIH1dO1xyXG4gICAgfSxcclxuICAgIHJlbmRlckhUTUwoeyBIVE1MQXR0cmlidXRlcyB9KSB7XHJcbiAgICAgICAgcmV0dXJuIFsnaHInLCBtZXJnZUF0dHJpYnV0ZXModGhpcy5vcHRpb25zLkhUTUxBdHRyaWJ1dGVzLCBIVE1MQXR0cmlidXRlcyldO1xyXG4gICAgfSxcclxuICAgIGFkZENvbW1hbmRzKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNldEhvcml6b250YWxSdWxlOiAoKSA9PiAoeyBjaGFpbiwgc3RhdGUgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyAkdG86ICRvcmlnaW5UbyB9ID0gc3RhdGUuc2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudENoYWluID0gY2hhaW4oKTtcclxuICAgICAgICAgICAgICAgIGlmICgkb3JpZ2luVG8ucGFyZW50T2Zmc2V0ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYWluLmluc2VydENvbnRlbnRBdChNYXRoLm1heCgkb3JpZ2luVG8ucG9zIC0gMiwgMCksIHsgdHlwZTogdGhpcy5uYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYWluLmluc2VydENvbnRlbnQoeyB0eXBlOiB0aGlzLm5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKGN1cnJlbnRDaGFpblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCBjdXJzb3IgYWZ0ZXIgaG9yaXpvbnRhbCBydWxlXHJcbiAgICAgICAgICAgICAgICAgICAgLmNvbW1hbmQoKHsgdHIsIGRpc3BhdGNoIH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3BhdGNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgJHRvIH0gPSB0ci5zZWxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc0FmdGVyID0gJHRvLmVuZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRvLm5vZGVBZnRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0by5ub2RlQWZ0ZXIuaXNUZXh0YmxvY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ci5zZXRTZWxlY3Rpb24oVGV4dFNlbGVjdGlvbi5jcmVhdGUodHIuZG9jLCAkdG8ucG9zICsgMSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoJHRvLm5vZGVBZnRlci5pc0Jsb2NrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHIuc2V0U2VsZWN0aW9uKE5vZGVTZWxlY3Rpb24uY3JlYXRlKHRyLmRvYywgJHRvLnBvcykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHIuc2V0U2VsZWN0aW9uKFRleHRTZWxlY3Rpb24uY3JlYXRlKHRyLmRvYywgJHRvLnBvcykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIG5vZGUgYWZ0ZXIgaG9yaXpvbnRhbCBydWxlIGlmIGl04oCZcyB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IChfYSA9ICR0by5wYXJlbnQudHlwZS5jb250ZW50TWF0Y2guZGVmYXVsdFR5cGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHIuaW5zZXJ0KHBvc0FmdGVyLCBub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ci5zZXRTZWxlY3Rpb24oVGV4dFNlbGVjdGlvbi5jcmVhdGUodHIuZG9jLCBwb3NBZnRlciArIDEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ci5zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnJ1bigpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGFkZElucHV0UnVsZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgbm9kZUlucHV0UnVsZSh7XHJcbiAgICAgICAgICAgICAgICBmaW5kOiAvXig/Oi0tLXzigJQtfF9fX1xcc3xcXCpcXCpcXCpcXHMpJC8sXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG59KTtcblxuZXhwb3J0IHsgSG9yaXpvbnRhbFJ1bGUsIEhvcml6b250YWxSdWxlIGFzIGRlZmF1bHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwiaW1wb3J0IHsgTWFyaywgbWVyZ2VBdHRyaWJ1dGVzLCBtYXJrSW5wdXRSdWxlLCBtYXJrUGFzdGVSdWxlIH0gZnJvbSAnQHRpcHRhcC9jb3JlJztcblxuY29uc3Qgc3RhcklucHV0UmVnZXggPSAvKD86XnxcXHMpKCg/OlxcKikoKD86W14qXSspKSg/OlxcKikpJC87XHJcbmNvbnN0IHN0YXJQYXN0ZVJlZ2V4ID0gLyg/Ol58XFxzKSgoPzpcXCopKCg/OlteKl0rKSkoPzpcXCopKS9nO1xyXG5jb25zdCB1bmRlcnNjb3JlSW5wdXRSZWdleCA9IC8oPzpefFxccykoKD86XykoKD86W15fXSspKSg/Ol8pKSQvO1xyXG5jb25zdCB1bmRlcnNjb3JlUGFzdGVSZWdleCA9IC8oPzpefFxccykoKD86XykoKD86W15fXSspKSg/Ol8pKS9nO1xyXG5jb25zdCBJdGFsaWMgPSBNYXJrLmNyZWF0ZSh7XHJcbiAgICBuYW1lOiAnaXRhbGljJyxcclxuICAgIGFkZE9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgSFRNTEF0dHJpYnV0ZXM6IHt9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgcGFyc2VIVE1MKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRhZzogJ2VtJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGFnOiAnaScsXHJcbiAgICAgICAgICAgICAgICBnZXRBdHRyczogbm9kZSA9PiBub2RlLnN0eWxlLmZvbnRTdHlsZSAhPT0gJ25vcm1hbCcgJiYgbnVsbCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3R5bGU6ICdmb250LXN0eWxlPWl0YWxpYycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgIH0sXHJcbiAgICByZW5kZXJIVE1MKHsgSFRNTEF0dHJpYnV0ZXMgfSkge1xyXG4gICAgICAgIHJldHVybiBbJ2VtJywgbWVyZ2VBdHRyaWJ1dGVzKHRoaXMub3B0aW9ucy5IVE1MQXR0cmlidXRlcywgSFRNTEF0dHJpYnV0ZXMpLCAwXTtcclxuICAgIH0sXHJcbiAgICBhZGRDb21tYW5kcygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBzZXRJdGFsaWM6ICgpID0+ICh7IGNvbW1hbmRzIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kcy5zZXRNYXJrKHRoaXMubmFtZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRvZ2dsZUl0YWxpYzogKCkgPT4gKHsgY29tbWFuZHMgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnRvZ2dsZU1hcmsodGhpcy5uYW1lKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdW5zZXRJdGFsaWM6ICgpID0+ICh7IGNvbW1hbmRzIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kcy51bnNldE1hcmsodGhpcy5uYW1lKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGFkZEtleWJvYXJkU2hvcnRjdXRzKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdNb2QtaSc6ICgpID0+IHRoaXMuZWRpdG9yLmNvbW1hbmRzLnRvZ2dsZUl0YWxpYygpLFxyXG4gICAgICAgICAgICAnTW9kLUknOiAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy50b2dnbGVJdGFsaWMoKSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGFkZElucHV0UnVsZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgbWFya0lucHV0UnVsZSh7XHJcbiAgICAgICAgICAgICAgICBmaW5kOiBzdGFySW5wdXRSZWdleCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG1hcmtJbnB1dFJ1bGUoe1xyXG4gICAgICAgICAgICAgICAgZmluZDogdW5kZXJzY29yZUlucHV0UmVnZXgsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG4gICAgYWRkUGFzdGVSdWxlcygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBtYXJrUGFzdGVSdWxlKHtcclxuICAgICAgICAgICAgICAgIGZpbmQ6IHN0YXJQYXN0ZVJlZ2V4LFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbWFya1Bhc3RlUnVsZSh7XHJcbiAgICAgICAgICAgICAgICBmaW5kOiB1bmRlcnNjb3JlUGFzdGVSZWdleCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgXTtcclxuICAgIH0sXHJcbn0pO1xuXG5leHBvcnQgeyBJdGFsaWMsIEl0YWxpYyBhcyBkZWZhdWx0LCBzdGFySW5wdXRSZWdleCwgc3RhclBhc3RlUmVnZXgsIHVuZGVyc2NvcmVJbnB1dFJlZ2V4LCB1bmRlcnNjb3JlUGFzdGVSZWdleCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLCJpbXBvcnQgeyBOb2RlLCBtZXJnZUF0dHJpYnV0ZXMgfSBmcm9tICdAdGlwdGFwL2NvcmUnO1xuXG5jb25zdCBMaXN0SXRlbSA9IE5vZGUuY3JlYXRlKHtcclxuICAgIG5hbWU6ICdsaXN0SXRlbScsXHJcbiAgICBhZGRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIEhUTUxBdHRyaWJ1dGVzOiB7fSxcclxuICAgICAgICAgICAgYnVsbGV0TGlzdFR5cGVOYW1lOiAnYnVsbGV0TGlzdCcsXHJcbiAgICAgICAgICAgIG9yZGVyZWRMaXN0VHlwZU5hbWU6ICdvcmRlcmVkTGlzdCcsXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBjb250ZW50OiAncGFyYWdyYXBoIGJsb2NrKicsXHJcbiAgICBkZWZpbmluZzogdHJ1ZSxcclxuICAgIHBhcnNlSFRNTCgpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0YWc6ICdsaScsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgIH0sXHJcbiAgICByZW5kZXJIVE1MKHsgSFRNTEF0dHJpYnV0ZXMgfSkge1xyXG4gICAgICAgIHJldHVybiBbJ2xpJywgbWVyZ2VBdHRyaWJ1dGVzKHRoaXMub3B0aW9ucy5IVE1MQXR0cmlidXRlcywgSFRNTEF0dHJpYnV0ZXMpLCAwXTtcclxuICAgIH0sXHJcbiAgICBhZGRLZXlib2FyZFNob3J0Y3V0cygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBFbnRlcjogKCkgPT4gdGhpcy5lZGl0b3IuY29tbWFuZHMuc3BsaXRMaXN0SXRlbSh0aGlzLm5hbWUpLFxyXG4gICAgICAgICAgICBUYWI6ICgpID0+IHRoaXMuZWRpdG9yLmNvbW1hbmRzLnNpbmtMaXN0SXRlbSh0aGlzLm5hbWUpLFxyXG4gICAgICAgICAgICAnU2hpZnQtVGFiJzogKCkgPT4gdGhpcy5lZGl0b3IuY29tbWFuZHMubGlmdExpc3RJdGVtKHRoaXMubmFtZSksXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbn0pO1xuXG5leHBvcnQgeyBMaXN0SXRlbSwgTGlzdEl0ZW0gYXMgZGVmYXVsdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLCJpbXBvcnQgeyBOb2RlLCBtZXJnZUF0dHJpYnV0ZXMsIE1hcmssIGdldE1hcmtBdHRyaWJ1dGVzLCB3cmFwcGluZ0lucHV0UnVsZSB9IGZyb20gJ0B0aXB0YXAvY29yZSc7XG5cbmNvbnN0IExpc3RJdGVtID0gTm9kZS5jcmVhdGUoe1xyXG4gICAgbmFtZTogJ2xpc3RJdGVtJyxcclxuICAgIGFkZE9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgSFRNTEF0dHJpYnV0ZXM6IHt9LFxyXG4gICAgICAgICAgICBidWxsZXRMaXN0VHlwZU5hbWU6ICdidWxsZXRMaXN0JyxcclxuICAgICAgICAgICAgb3JkZXJlZExpc3RUeXBlTmFtZTogJ29yZGVyZWRMaXN0JyxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGNvbnRlbnQ6ICdwYXJhZ3JhcGggYmxvY2sqJyxcclxuICAgIGRlZmluaW5nOiB0cnVlLFxyXG4gICAgcGFyc2VIVE1MKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRhZzogJ2xpJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgfSxcclxuICAgIHJlbmRlckhUTUwoeyBIVE1MQXR0cmlidXRlcyB9KSB7XHJcbiAgICAgICAgcmV0dXJuIFsnbGknLCBtZXJnZUF0dHJpYnV0ZXModGhpcy5vcHRpb25zLkhUTUxBdHRyaWJ1dGVzLCBIVE1MQXR0cmlidXRlcyksIDBdO1xyXG4gICAgfSxcclxuICAgIGFkZEtleWJvYXJkU2hvcnRjdXRzKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIEVudGVyOiAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy5zcGxpdExpc3RJdGVtKHRoaXMubmFtZSksXHJcbiAgICAgICAgICAgIFRhYjogKCkgPT4gdGhpcy5lZGl0b3IuY29tbWFuZHMuc2lua0xpc3RJdGVtKHRoaXMubmFtZSksXHJcbiAgICAgICAgICAgICdTaGlmdC1UYWInOiAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy5saWZ0TGlzdEl0ZW0odGhpcy5uYW1lKSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxufSk7XG5cbmNvbnN0IFRleHRTdHlsZSA9IE1hcmsuY3JlYXRlKHtcclxuICAgIG5hbWU6ICd0ZXh0U3R5bGUnLFxyXG4gICAgYWRkT3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBIVE1MQXR0cmlidXRlczoge30sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBwYXJzZUhUTUwoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGFnOiAnc3BhbicsXHJcbiAgICAgICAgICAgICAgICBnZXRBdHRyczogZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzU3R5bGVzID0gZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3N0eWxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNTdHlsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge307XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG4gICAgcmVuZGVySFRNTCh7IEhUTUxBdHRyaWJ1dGVzIH0pIHtcclxuICAgICAgICByZXR1cm4gWydzcGFuJywgbWVyZ2VBdHRyaWJ1dGVzKHRoaXMub3B0aW9ucy5IVE1MQXR0cmlidXRlcywgSFRNTEF0dHJpYnV0ZXMpLCAwXTtcclxuICAgIH0sXHJcbiAgICBhZGRDb21tYW5kcygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICByZW1vdmVFbXB0eVRleHRTdHlsZTogKCkgPT4gKHsgc3RhdGUsIGNvbW1hbmRzIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBnZXRNYXJrQXR0cmlidXRlcyhzdGF0ZSwgdGhpcy50eXBlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc1N0eWxlcyA9IE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpLnNvbWUoKFssIHZhbHVlXSkgPT4gISF2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGFzU3R5bGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZHMudW5zZXRNYXJrKHRoaXMubmFtZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbn0pO1xuXG5jb25zdCBpbnB1dFJlZ2V4ID0gL14oXFxkKylcXC5cXHMkLztcclxuY29uc3QgT3JkZXJlZExpc3QgPSBOb2RlLmNyZWF0ZSh7XHJcbiAgICBuYW1lOiAnb3JkZXJlZExpc3QnLFxyXG4gICAgYWRkT3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpdGVtVHlwZU5hbWU6ICdsaXN0SXRlbScsXHJcbiAgICAgICAgICAgIEhUTUxBdHRyaWJ1dGVzOiB7fSxcclxuICAgICAgICAgICAga2VlcE1hcmtzOiBmYWxzZSxcclxuICAgICAgICAgICAga2VlcEF0dHJpYnV0ZXM6IGZhbHNlLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgZ3JvdXA6ICdibG9jayBsaXN0JyxcclxuICAgIGNvbnRlbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMub3B0aW9ucy5pdGVtVHlwZU5hbWV9K2A7XHJcbiAgICB9LFxyXG4gICAgYWRkQXR0cmlidXRlcygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBzdGFydDoge1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMSxcclxuICAgICAgICAgICAgICAgIHBhcnNlSFRNTDogZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKCdzdGFydCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcGFyc2VJbnQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3N0YXJ0JykgfHwgJycsIDEwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IDE7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgcGFyc2VIVE1MKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRhZzogJ29sJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgfSxcclxuICAgIHJlbmRlckhUTUwoeyBIVE1MQXR0cmlidXRlcyB9KSB7XHJcbiAgICAgICAgY29uc3QgeyBzdGFydCwgLi4uYXR0cmlidXRlc1dpdGhvdXRTdGFydCB9ID0gSFRNTEF0dHJpYnV0ZXM7XHJcbiAgICAgICAgcmV0dXJuIHN0YXJ0ID09PSAxXHJcbiAgICAgICAgICAgID8gWydvbCcsIG1lcmdlQXR0cmlidXRlcyh0aGlzLm9wdGlvbnMuSFRNTEF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXNXaXRob3V0U3RhcnQpLCAwXVxyXG4gICAgICAgICAgICA6IFsnb2wnLCBtZXJnZUF0dHJpYnV0ZXModGhpcy5vcHRpb25zLkhUTUxBdHRyaWJ1dGVzLCBIVE1MQXR0cmlidXRlcyksIDBdO1xyXG4gICAgfSxcclxuICAgIGFkZENvbW1hbmRzKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRvZ2dsZU9yZGVyZWRMaXN0OiAoKSA9PiAoeyBjb21tYW5kcywgY2hhaW4gfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5rZWVwQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFpbigpLnRvZ2dsZUxpc3QodGhpcy5uYW1lLCB0aGlzLm9wdGlvbnMuaXRlbVR5cGVOYW1lLCB0aGlzLm9wdGlvbnMua2VlcE1hcmtzKS51cGRhdGVBdHRyaWJ1dGVzKExpc3RJdGVtLm5hbWUsIHRoaXMuZWRpdG9yLmdldEF0dHJpYnV0ZXMoVGV4dFN0eWxlLm5hbWUpKS5ydW4oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kcy50b2dnbGVMaXN0KHRoaXMubmFtZSwgdGhpcy5vcHRpb25zLml0ZW1UeXBlTmFtZSwgdGhpcy5vcHRpb25zLmtlZXBNYXJrcyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBhZGRLZXlib2FyZFNob3J0Y3V0cygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnTW9kLVNoaWZ0LTcnOiAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy50b2dnbGVPcmRlcmVkTGlzdCgpLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgYWRkSW5wdXRSdWxlcygpIHtcclxuICAgICAgICBsZXQgaW5wdXRSdWxlID0gd3JhcHBpbmdJbnB1dFJ1bGUoe1xyXG4gICAgICAgICAgICBmaW5kOiBpbnB1dFJlZ2V4LFxyXG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXHJcbiAgICAgICAgICAgIGdldEF0dHJpYnV0ZXM6IG1hdGNoID0+ICh7IHN0YXJ0OiArbWF0Y2hbMV0gfSksXHJcbiAgICAgICAgICAgIGpvaW5QcmVkaWNhdGU6IChtYXRjaCwgbm9kZSkgPT4gbm9kZS5jaGlsZENvdW50ICsgbm9kZS5hdHRycy5zdGFydCA9PT0gK21hdGNoWzFdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMua2VlcE1hcmtzIHx8IHRoaXMub3B0aW9ucy5rZWVwQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICBpbnB1dFJ1bGUgPSB3cmFwcGluZ0lucHV0UnVsZSh7XHJcbiAgICAgICAgICAgICAgICBmaW5kOiBpbnB1dFJlZ2V4LFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICAgICAga2VlcE1hcmtzOiB0aGlzLm9wdGlvbnMua2VlcE1hcmtzLFxyXG4gICAgICAgICAgICAgICAga2VlcEF0dHJpYnV0ZXM6IHRoaXMub3B0aW9ucy5rZWVwQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgIGdldEF0dHJpYnV0ZXM6IG1hdGNoID0+ICh7IHN0YXJ0OiArbWF0Y2hbMV0sIC4uLnRoaXMuZWRpdG9yLmdldEF0dHJpYnV0ZXMoVGV4dFN0eWxlLm5hbWUpIH0pLFxyXG4gICAgICAgICAgICAgICAgam9pblByZWRpY2F0ZTogKG1hdGNoLCBub2RlKSA9PiBub2RlLmNoaWxkQ291bnQgKyBub2RlLmF0dHJzLnN0YXJ0ID09PSArbWF0Y2hbMV0sXHJcbiAgICAgICAgICAgICAgICBlZGl0b3I6IHRoaXMuZWRpdG9yLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgaW5wdXRSdWxlLFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG59KTtcblxuZXhwb3J0IHsgT3JkZXJlZExpc3QsIE9yZGVyZWRMaXN0IGFzIGRlZmF1bHQsIGlucHV0UmVnZXggfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwiaW1wb3J0IHsgTm9kZSwgbWVyZ2VBdHRyaWJ1dGVzIH0gZnJvbSAnQHRpcHRhcC9jb3JlJztcblxuY29uc3QgUGFyYWdyYXBoID0gTm9kZS5jcmVhdGUoe1xyXG4gICAgbmFtZTogJ3BhcmFncmFwaCcsXHJcbiAgICBwcmlvcml0eTogMTAwMCxcclxuICAgIGFkZE9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgSFRNTEF0dHJpYnV0ZXM6IHt9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgZ3JvdXA6ICdibG9jaycsXHJcbiAgICBjb250ZW50OiAnaW5saW5lKicsXHJcbiAgICBwYXJzZUhUTUwoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgeyB0YWc6ICdwJyB9LFxyXG4gICAgICAgIF07XHJcbiAgICB9LFxyXG4gICAgcmVuZGVySFRNTCh7IEhUTUxBdHRyaWJ1dGVzIH0pIHtcclxuICAgICAgICByZXR1cm4gWydwJywgbWVyZ2VBdHRyaWJ1dGVzKHRoaXMub3B0aW9ucy5IVE1MQXR0cmlidXRlcywgSFRNTEF0dHJpYnV0ZXMpLCAwXTtcclxuICAgIH0sXHJcbiAgICBhZGRDb21tYW5kcygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBzZXRQYXJhZ3JhcGg6ICgpID0+ICh7IGNvbW1hbmRzIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kcy5zZXROb2RlKHRoaXMubmFtZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBhZGRLZXlib2FyZFNob3J0Y3V0cygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnTW9kLUFsdC0wJzogKCkgPT4gdGhpcy5lZGl0b3IuY29tbWFuZHMuc2V0UGFyYWdyYXBoKCksXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbn0pO1xuXG5leHBvcnQgeyBQYXJhZ3JhcGgsIFBhcmFncmFwaCBhcyBkZWZhdWx0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsImltcG9ydCB7IE1hcmssIG1lcmdlQXR0cmlidXRlcywgaXNNYWNPUywgbWFya0lucHV0UnVsZSwgbWFya1Bhc3RlUnVsZSB9IGZyb20gJ0B0aXB0YXAvY29yZSc7XG5cbmNvbnN0IGlucHV0UmVnZXggPSAvKD86XnxcXHMpKCg/On5+KSgoPzpbXn5dKykpKD86fn4pKSQvO1xyXG5jb25zdCBwYXN0ZVJlZ2V4ID0gLyg/Ol58XFxzKSgoPzp+fikoKD86W15+XSspKSg/On5+KSkvZztcclxuY29uc3QgU3RyaWtlID0gTWFyay5jcmVhdGUoe1xyXG4gICAgbmFtZTogJ3N0cmlrZScsXHJcbiAgICBhZGRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIEhUTUxBdHRyaWJ1dGVzOiB7fSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIHBhcnNlSFRNTCgpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0YWc6ICdzJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGFnOiAnZGVsJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGFnOiAnc3RyaWtlJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3R5bGU6ICd0ZXh0LWRlY29yYXRpb24nLFxyXG4gICAgICAgICAgICAgICAgY29uc3VtaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGdldEF0dHJzOiBzdHlsZSA9PiAoc3R5bGUuaW5jbHVkZXMoJ2xpbmUtdGhyb3VnaCcpID8ge30gOiBmYWxzZSksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgIH0sXHJcbiAgICByZW5kZXJIVE1MKHsgSFRNTEF0dHJpYnV0ZXMgfSkge1xyXG4gICAgICAgIHJldHVybiBbJ3MnLCBtZXJnZUF0dHJpYnV0ZXModGhpcy5vcHRpb25zLkhUTUxBdHRyaWJ1dGVzLCBIVE1MQXR0cmlidXRlcyksIDBdO1xyXG4gICAgfSxcclxuICAgIGFkZENvbW1hbmRzKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNldFN0cmlrZTogKCkgPT4gKHsgY29tbWFuZHMgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnNldE1hcmsodGhpcy5uYW1lKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdG9nZ2xlU3RyaWtlOiAoKSA9PiAoeyBjb21tYW5kcyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZHMudG9nZ2xlTWFyayh0aGlzLm5hbWUpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB1bnNldFN0cmlrZTogKCkgPT4gKHsgY29tbWFuZHMgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnVuc2V0TWFyayh0aGlzLm5hbWUpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgYWRkS2V5Ym9hcmRTaG9ydGN1dHMoKSB7XHJcbiAgICAgICAgY29uc3Qgc2hvcnRjdXRzID0ge307XHJcbiAgICAgICAgaWYgKGlzTWFjT1MoKSkge1xyXG4gICAgICAgICAgICBzaG9ydGN1dHNbJ01vZC1TaGlmdC1zJ10gPSAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy50b2dnbGVTdHJpa2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHNob3J0Y3V0c1snQ3RybC1TaGlmdC1zJ10gPSAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy50b2dnbGVTdHJpa2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNob3J0Y3V0cztcclxuICAgIH0sXHJcbiAgICBhZGRJbnB1dFJ1bGVzKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIG1hcmtJbnB1dFJ1bGUoe1xyXG4gICAgICAgICAgICAgICAgZmluZDogaW5wdXRSZWdleCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgXTtcclxuICAgIH0sXHJcbiAgICBhZGRQYXN0ZVJ1bGVzKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIG1hcmtQYXN0ZVJ1bGUoe1xyXG4gICAgICAgICAgICAgICAgZmluZDogcGFzdGVSZWdleCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgXTtcclxuICAgIH0sXHJcbn0pO1xuXG5leHBvcnQgeyBTdHJpa2UsIFN0cmlrZSBhcyBkZWZhdWx0LCBpbnB1dFJlZ2V4LCBwYXN0ZVJlZ2V4IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsImltcG9ydCB7IE5vZGUgfSBmcm9tICdAdGlwdGFwL2NvcmUnO1xuXG5jb25zdCBUZXh0ID0gTm9kZS5jcmVhdGUoe1xyXG4gICAgbmFtZTogJ3RleHQnLFxyXG4gICAgZ3JvdXA6ICdpbmxpbmUnLFxyXG59KTtcblxuZXhwb3J0IHsgVGV4dCwgVGV4dCBhcyBkZWZhdWx0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsImltcG9ydCB7IEV4dGVuc2lvbiB9IGZyb20gJ0B0aXB0YXAvY29yZSc7XG5pbXBvcnQgeyBCbG9ja3F1b3RlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYmxvY2txdW90ZSc7XG5pbXBvcnQgeyBCb2xkIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYm9sZCc7XG5pbXBvcnQgeyBCdWxsZXRMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYnVsbGV0LWxpc3QnO1xuaW1wb3J0IHsgQ29kZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUnO1xuaW1wb3J0IHsgQ29kZUJsb2NrIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZS1ibG9jayc7XG5pbXBvcnQgeyBEb2N1bWVudCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWRvY3VtZW50JztcbmltcG9ydCB7IERyb3BjdXJzb3IgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1kcm9wY3Vyc29yJztcbmltcG9ydCB7IEdhcGN1cnNvciB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWdhcGN1cnNvcic7XG5pbXBvcnQgeyBIYXJkQnJlYWsgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oYXJkLWJyZWFrJztcbmltcG9ydCB7IEhlYWRpbmcgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oZWFkaW5nJztcbmltcG9ydCB7IEhpc3RvcnkgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oaXN0b3J5JztcbmltcG9ydCB7IEhvcml6b250YWxSdWxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taG9yaXpvbnRhbC1ydWxlJztcbmltcG9ydCB7IEl0YWxpYyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWl0YWxpYyc7XG5pbXBvcnQgeyBMaXN0SXRlbSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWxpc3QtaXRlbSc7XG5pbXBvcnQgeyBPcmRlcmVkTGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLW9yZGVyZWQtbGlzdCc7XG5pbXBvcnQgeyBQYXJhZ3JhcGggfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgU3RyaWtlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tc3RyaWtlJztcbmltcG9ydCB7IFRleHQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10ZXh0JztcblxuY29uc3QgU3RhcnRlcktpdCA9IEV4dGVuc2lvbi5jcmVhdGUoe1xyXG4gICAgbmFtZTogJ3N0YXJ0ZXJLaXQnLFxyXG4gICAgYWRkRXh0ZW5zaW9ucygpIHtcclxuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2ssIF9sLCBfbSwgX28sIF9wLCBfcSwgX3IsIF9zLCBfdDtcclxuICAgICAgICBjb25zdCBleHRlbnNpb25zID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ibG9ja3F1b3RlICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBleHRlbnNpb25zLnB1c2goQmxvY2txdW90ZS5jb25maWd1cmUoKF9hID0gdGhpcy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYmxvY2txdW90ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJvbGQgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGV4dGVuc2lvbnMucHVzaChCb2xkLmNvbmZpZ3VyZSgoX2IgPSB0aGlzLm9wdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5ib2xkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYnVsbGV0TGlzdCAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgZXh0ZW5zaW9ucy5wdXNoKEJ1bGxldExpc3QuY29uZmlndXJlKChfYyA9IHRoaXMub3B0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmJ1bGxldExpc3QpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2RlICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBleHRlbnNpb25zLnB1c2goQ29kZS5jb25maWd1cmUoKF9kID0gdGhpcy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuY29kZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvZGVCbG9jayAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgZXh0ZW5zaW9ucy5wdXNoKENvZGVCbG9jay5jb25maWd1cmUoKF9lID0gdGhpcy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuY29kZUJsb2NrKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZG9jdW1lbnQgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGV4dGVuc2lvbnMucHVzaChEb2N1bWVudC5jb25maWd1cmUoKF9mID0gdGhpcy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2YuZG9jdW1lbnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kcm9wY3Vyc29yICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBleHRlbnNpb25zLnB1c2goRHJvcGN1cnNvci5jb25maWd1cmUoKF9nID0gdGhpcy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2cuZHJvcGN1cnNvcikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmdhcGN1cnNvciAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgZXh0ZW5zaW9ucy5wdXNoKEdhcGN1cnNvci5jb25maWd1cmUoKF9oID0gdGhpcy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2guZ2FwY3Vyc29yKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGFyZEJyZWFrICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBleHRlbnNpb25zLnB1c2goSGFyZEJyZWFrLmNvbmZpZ3VyZSgoX2ogPSB0aGlzLm9wdGlvbnMpID09PSBudWxsIHx8IF9qID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfai5oYXJkQnJlYWspKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oZWFkaW5nICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBleHRlbnNpb25zLnB1c2goSGVhZGluZy5jb25maWd1cmUoKF9rID0gdGhpcy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfayA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2suaGVhZGluZykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhpc3RvcnkgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGV4dGVuc2lvbnMucHVzaChIaXN0b3J5LmNvbmZpZ3VyZSgoX2wgPSB0aGlzLm9wdGlvbnMpID09PSBudWxsIHx8IF9sID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbC5oaXN0b3J5KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaG9yaXpvbnRhbFJ1bGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGV4dGVuc2lvbnMucHVzaChIb3Jpem9udGFsUnVsZS5jb25maWd1cmUoKF9tID0gdGhpcy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX20uaG9yaXpvbnRhbFJ1bGUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pdGFsaWMgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGV4dGVuc2lvbnMucHVzaChJdGFsaWMuY29uZmlndXJlKChfbyA9IHRoaXMub3B0aW9ucykgPT09IG51bGwgfHwgX28gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vLml0YWxpYykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpc3RJdGVtICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBleHRlbnNpb25zLnB1c2goTGlzdEl0ZW0uY29uZmlndXJlKChfcCA9IHRoaXMub3B0aW9ucykgPT09IG51bGwgfHwgX3AgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wLmxpc3RJdGVtKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMub3JkZXJlZExpc3QgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGV4dGVuc2lvbnMucHVzaChPcmRlcmVkTGlzdC5jb25maWd1cmUoKF9xID0gdGhpcy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfcSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3Eub3JkZXJlZExpc3QpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wYXJhZ3JhcGggIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGV4dGVuc2lvbnMucHVzaChQYXJhZ3JhcGguY29uZmlndXJlKChfciA9IHRoaXMub3B0aW9ucykgPT09IG51bGwgfHwgX3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9yLnBhcmFncmFwaCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnN0cmlrZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgZXh0ZW5zaW9ucy5wdXNoKFN0cmlrZS5jb25maWd1cmUoKF9zID0gdGhpcy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3Muc3RyaWtlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudGV4dCAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgZXh0ZW5zaW9ucy5wdXNoKFRleHQuY29uZmlndXJlKChfdCA9IHRoaXMub3B0aW9ucykgPT09IG51bGwgfHwgX3QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90LnRleHQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbnM7XHJcbiAgICB9LFxyXG59KTtcblxuZXhwb3J0IHsgU3RhcnRlcktpdCwgU3RhcnRlcktpdCBhcyBkZWZhdWx0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsImltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IEJveCB9IGZyb20gXCIuLi8uLi9hdG9tcy9ib3gvaW5kZXguanNcIjtcbmltcG9ydCB7IElucHV0Q1NTIH0gZnJvbSBcIi4uLy4uL2F0b21zL2lucHV0L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBUZXh0IH0gZnJvbSBcIi4uLy4uL2F0b21zL3RleHQvaW5kZXguanNcIjtcbmltcG9ydCB7IGNzc0NsYXNzLCB0aGVtZUdldCB9IGZyb20gXCIuLi8uLi91dGlscy9pbmRleC5qc1wiO1xuZXhwb3J0IGNvbnN0IEVkaXRvcldyYXBwZXIgPSBzdHlsZWQoVGV4dClgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgJHtJbnB1dENTU31cblxuICAuUHJvc2VNaXJyb3ItZm9jdXNlZCB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgfVxuXG4gIC5jaGFyYWN0ZXJDb3VudCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogJHt0aGVtZUdldCgnc3BhY2UnLCAnbWQnKX07XG4gICAgcmlnaHQ6ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ2xnJyl9O1xuICAgIGNvbG9yOiAke3RoZW1lR2V0KCdjb2xvcnMnLCAnZ3JleTQwJyl9O1xuICB9XG5gO1xuRWRpdG9yV3JhcHBlci5kZWZhdWx0UHJvcHMgPSB7XG4gIHB4OiAneGwnLFxuICBweTogJ3hsJyxcbiAgY2xhc3NOYW1lOiBjc3NDbGFzcygnRWRpdG9yV3JhcHBlcicpXG59O1xuZXhwb3J0IGNvbnN0IE1lbnVCYXJXcmFwcGVyID0gc3R5bGVkKEJveClgXG4gIGJvcmRlcjogMXB4IHNvbGlkICR7dGhlbWVHZXQoJ2NvbG9ycycsICdpbnB1dEJvcmRlcicpfTtcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcblxuICAmIC4ke2Nzc0NsYXNzKCdJY29uJyl9OmhvdmVyIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAmIC4ke2Nzc0NsYXNzKCdJY29uJyl9IHtcbiAgICBzdHJva2U6ICR7dGhlbWVHZXQoJ2NvbG9ycycsICdncmV5MTAwJyl9O1xuICB9XG5cbiAgJiAuYWN0aXZlIC4ke2Nzc0NsYXNzKCdJY29uJyl9IHtcbiAgICBzdHJva2U6ICR7dGhlbWVHZXQoJ2NvbG9ycycsICdwcmltYXJ5MTAwJyl9O1xuICB9XG5gO1xuTWVudUJhcldyYXBwZXIuZGVmYXVsdFByb3BzID0ge1xuICBweDogJ21kJyxcbiAgcHk6ICdtZCcsXG4gIGNsYXNzTmFtZTogY3NzQ2xhc3MoJ01lbnVCYXJXcmFwcGVyJylcbn07IiwiY29uc3QgdXNlVGlwdGFwQ29tbWFuZHMgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBlZGl0b3JcbiAgfSA9IHByb3BzO1xuICBpZiAoIWVkaXRvcikgcmV0dXJuIFtdO1xuICBmdW5jdGlvbiBjb21tYW5kKG5hbWUsIGNhbGxiYWNrLCBpY29uKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWUsXG4gICAgICBvbkNsaWNrOiBjYWxsYmFjayxcbiAgICAgIGljb25cbiAgICB9O1xuICB9XG4gIHJldHVybiBbY29tbWFuZCgnYm9sZCcsICgpID0+IGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQm9sZCgpLnJ1bigpLCAnQm9sZCcpLCBjb21tYW5kKCdpdGFsaWMnLCAoKSA9PiBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUl0YWxpYygpLnJ1bigpLCAnSXRhbGljJyksIGNvbW1hbmQoJ3N0cmlrZScsICgpID0+IGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlU3RyaWtlKCkucnVuKCksICdTdHJpa2V0aHJvdWdoJyksIGNvbW1hbmQoJ2NvZGUnLCAoKSA9PiBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUNvZGUoKS5ydW4oKSwgJ0NvZGUnKSwgY29tbWFuZCgndGV4dEFsaWduLmxlZnQnLCAoKSA9PiBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldFRleHRBbGlnbignbGVmdCcpLnJ1bigpLCAnQWxpZ25MZWZ0JyksIGNvbW1hbmQoJ3RleHRBbGlnbi5jZW50ZXInLCAoKSA9PiBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldFRleHRBbGlnbignY2VudGVyJykucnVuKCksICdBbGlnbkNlbnRlcicpLCBjb21tYW5kKCd0ZXh0QWxpZ24ucmlnaHQnLCAoKSA9PiBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldFRleHRBbGlnbigncmlnaHQnKS5ydW4oKSwgJ0FsaWduUmlnaHQnKSwgY29tbWFuZCgndGV4dEFsaWduLmp1c3RpZnknLCAoKSA9PiBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldFRleHRBbGlnbignanVzdGlmeScpLnJ1bigpLCAnQWxpZ25KdXN0aWZ5JyksIGNvbW1hbmQoJ2J1bGxldExpc3QnLCAoKSA9PiBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUJ1bGxldExpc3QoKS5ydW4oKSwgJ0J1bGxldExpc3QnKSwgY29tbWFuZCgnb3JkZXJlZExpc3QnLCAoKSA9PiBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZU9yZGVyZWRMaXN0KCkucnVuKCksICdPcmRlcmVkTGlzdCcpLCBjb21tYW5kKCdibG9ja3F1b3RlJywgKCkgPT4gZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVCbG9ja3F1b3RlKCkucnVuKCksICdRdW90ZScpLCBjb21tYW5kKCdsaW5rJywgKCkgPT4gZWRpdG9yLmNoYWluKCkuZm9jdXMoKS51bnNldExpbmsoKS5ydW4oKSwgJ0xpbmsnKSwgY29tbWFuZCgnaGFyZCBicmVhaycsICgpID0+IGVkaXRvci5jaGFpbigpLmZvY3VzKCkuc2V0SGFyZEJyZWFrKCkucnVuKCksICdQYWdlYnJlYWsnKSwgY29tbWFuZCgndW5kbycsICgpID0+IGVkaXRvci5jaGFpbigpLmZvY3VzKCkudW5kbygpLnJ1bigpLCAnVW5kbycpLCBjb21tYW5kKCdyZWRvJywgKCkgPT4gZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5yZWRvKCkucnVuKCksICdSZWRvJyksIGNvbW1hbmQoJ2NsZWFyIG1hcmtzJywgKCkgPT4gZWRpdG9yLmNoYWluKCkuZm9jdXMoKS51bnNldEFsbE1hcmtzKCkucnVuKCksICdDbGVhcicpXTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VUaXB0YXBDb21tYW5kczsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgKCgpID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gIHZlcnNpb246IFwiMS4xXCIsXG4gIHdpZHRoOiBcIjE2XCIsXG4gIGhlaWdodDogXCIxNlwiLFxuICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsOiBcIiMwMDAwMDBcIixcbiAgZDogXCJNMCAxaDE2djJoLTE2ek0zIDRoMTB2MmgtMTB6TTMgMTBoMTB2MmgtMTB6TTAgN2gxNnYyaC0xNnpNMCAxM2gxNnYyaC0xNnpcIlxufSkpKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgKCgpID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gIHZlcnNpb246IFwiMS4xXCIsXG4gIHdpZHRoOiBcIjE2XCIsXG4gIGhlaWdodDogXCIxNlwiLFxuICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsOiBcIiMwMDAwMDBcIixcbiAgZDogXCJNMCAxaDE2djJoLTE2ek0wIDRoMTZ2MmgtMTZ6TTAgN2gxNnYyaC0xNnpNMCAxMGgxNnYyaC0xNnpNMCAxM2gxNnYyaC0xNnpcIlxufSkpKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgKCgpID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gIHZlcnNpb246IFwiMS4xXCIsXG4gIHdpZHRoOiBcIjE2XCIsXG4gIGhlaWdodDogXCIxNlwiLFxuICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsOiBcIiMwMDAwMDBcIixcbiAgZDogXCJNMCAxaDE2djJoLTE2ek0wIDRoMTB2MmgtMTB6TTAgMTBoMTB2MmgtMTB6TTAgN2gxNnYyaC0xNnpNMCAxM2gxNnYyaC0xNnpcIlxufSkpKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgKCgpID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gIHZlcnNpb246IFwiMS4xXCIsXG4gIHdpZHRoOiBcIjE2XCIsXG4gIGhlaWdodDogXCIxNlwiLFxuICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsOiBcIiMwMDAwMDBcIixcbiAgZDogXCJNMCAxaDE2djJoLTE2ek02IDRoMTB2MmgtMTB6TTYgMTBoMTB2MmgtMTB6TTAgN2gxNnYyaC0xNnpNMCAxM2gxNnYyaC0xNnpcIlxufSkpKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgKCgpID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gIHZlcnNpb246IFwiMS4xXCIsXG4gIHdpZHRoOiBcIjE2XCIsXG4gIGhlaWdodDogXCIxNlwiLFxuICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsOiBcIiMwMDAwMDBcIixcbiAgZDogXCJNMTEuMDYxIDcuNTczYzAuNTg2LTAuNjk2IDAuOTM5LTEuNTk0IDAuOTM5LTIuNTczIDAtMi4yMDYtMS43OTQtNC00LTRoLTV2MTRoNmMyLjIwNiAwIDQtMS43OTQgNC00IDAtMS40NTItMC43NzgtMi43MjYtMS45MzktMy40Mjd6TTYgM2gxLjU4NmMwLjg3NCAwIDEuNTg2IDAuODk3IDEuNTg2IDJzLTAuNzExIDItMS41ODYgMmgtMS41ODZ2LTR6TTguNDg0IDEzaC0yLjQ4NHYtNGgyLjQ4NGMwLjkxMyAwIDEuNjU2IDAuODk3IDEuNjU2IDJzLTAuNzQzIDItMS42NTYgMnpcIlxufSkpKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgKCgpID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gIHZlcnNpb246IFwiMS4xXCIsXG4gIHdpZHRoOiBcIjE2XCIsXG4gIGhlaWdodDogXCIxNlwiLFxuICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsOiBcIiMwMDAwMDBcIixcbiAgZDogXCJNMCAwaDR2NGgtNHpNNiAxaDEwdjJoLTEwek0wIDZoNHY0aC00ek02IDdoMTB2MmgtMTB6TTAgMTJoNHY0aC00ek02IDEzaDEwdjJoLTEwelwiXG59KSkpOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCAoKCkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgdmVyc2lvbjogXCIxLjFcIixcbiAgd2lkdGg6IFwiMTZcIixcbiAgaGVpZ2h0OiBcIjE2XCIsXG4gIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGw6IFwiIzAwMDAwMFwiLFxuICBkOiBcIk0wIDE0aDl2MmgtOXpNMTQgMmgtNC43MjdsLTIuODcxIDExaC0yLjA2N2wyLjg3MS0xMWgtNC4yMDV2LTJoMTF6TTE0LjUyOCAxNmwtMi4wMjgtMi4wMjgtMi4wMjggMi4wMjgtMC45NzItMC45NzIgMi4wMjgtMi4wMjgtMi4wMjgtMi4wMjggMC45NzItMC45NzIgMi4wMjggMi4wMjggMi4wMjgtMi4wMjggMC45NzIgMC45NzItMi4wMjggMi4wMjggMi4wMjggMi4wMjh6XCJcbn0pKSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0ICgoKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHhtbG5zWGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICB2ZXJzaW9uOiBcIjEuMVwiLFxuICB3aWR0aDogXCIyMFwiLFxuICBoZWlnaHQ6IFwiMTZcIixcbiAgdmlld0JveDogXCIwIDAgMjAgMTZcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbDogXCIjMDAwMDAwXCIsXG4gIGQ6IFwiTTEzIDExLjVsMS41IDEuNSA1LTUtNS01LTEuNSAxLjUgMy41IDMuNXpcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGw6IFwiIzAwMDAwMFwiLFxuICBkOiBcIk03IDQuNWwtMS41LTEuNS01IDUgNSA1IDEuNS0xLjUtMy41LTMuNXpcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGw6IFwiIzAwMDAwMFwiLFxuICBkOiBcIk0xMC45NTggMi4zNTJsMS4wODUgMC4yOTYtMyAxMS0xLjA4NS0wLjI5NiAzLTExelwiXG59KSkpOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCAoKCkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgdmVyc2lvbjogXCIxLjFcIixcbiAgd2lkdGg6IFwiMTZcIixcbiAgaGVpZ2h0OiBcIjE2XCIsXG4gIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGw6IFwiIzAwMDAwMFwiLFxuICBkOiBcIk0xIDhoNnYyaC0ydjZoLTJ2LTZoLTJ6TTE1IDRoLTMuOTM0djEyaC0yLjEzM3YtMTJoLTMuOTM0di0yaDEwelwiXG59KSkpOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCAoKCkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgdmVyc2lvbjogXCIxLjFcIixcbiAgd2lkdGg6IFwiMTZcIixcbiAgaGVpZ2h0OiBcIjE2XCIsXG4gIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGw6IFwiIzAwMDAwMFwiLFxuICBkOiBcIk0xNC45OTggMmMwLjAwMSAwLjAwMSAwLjAwMSAwLjAwMSAwLjAwMiAwLjAwMnYxMS45OTZjLTAuMDAxIDAuMDAxLTAuMDAxIDAuMDAxLTAuMDAyIDAuMDAyaC0xMy45OTZjLTAuMDAxLTAuMDAxLTAuMDAxLTAuMDAxLTAuMDAyLTAuMDAydi0xMS45OTZjMC4wMDEtMC4wMDEgMC4wMDEtMC4wMDEgMC4wMDItMC4wMDJoMTMuOTk2ek0xNSAxaC0xNGMtMC41NSAwLTEgMC40NS0xIDF2MTJjMCAwLjU1IDAuNDUgMSAxIDFoMTRjMC41NSAwIDEtMC40NSAxLTF2LTEyYzAtMC41NS0wLjQ1LTEtMS0xdjB6XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsOiBcIiMwMDAwMDBcIixcbiAgZDogXCJNMTMgNC41YzAgMC44MjgtMC42NzIgMS41LTEuNSAxLjVzLTEuNS0wLjY3Mi0xLjUtMS41IDAuNjcyLTEuNSAxLjUtMS41IDEuNSAwLjY3MiAxLjUgMS41elwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbDogXCIjMDAwMDAwXCIsXG4gIGQ6IFwiTTE0IDEzaC0xMnYtMmwzLjUtNiA0IDVoMWwzLjUtM3pcIlxufSkpKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgKCgpID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gIHZlcnNpb246IFwiMS4xXCIsXG4gIHdpZHRoOiBcIjE2XCIsXG4gIGhlaWdodDogXCIxNlwiLFxuICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsOiBcIiMwMDAwMDBcIixcbiAgZDogXCJNMTQgMXYxaC0ybC01IDEyaDJ2MWgtN3YtMWgybDUtMTJoLTJ2LTF6XCJcbn0pKSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0ICgoKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHhtbG5zWGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICB2ZXJzaW9uOiBcIjEuMVwiLFxuICB3aWR0aDogXCIxNlwiLFxuICBoZWlnaHQ6IFwiMTZcIixcbiAgdmlld0JveDogXCIwIDAgMTYgMTZcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbDogXCIjMDAwMDAwXCIsXG4gIGQ6IFwiTTYuODc5IDkuOTM0Yy0wLjIwOCAwLTAuNDE2LTAuMDc5LTAuNTc1LTAuMjM4LTEuNDg2LTEuNDg2LTEuNDg2LTMuOTA1IDAtNS4zOTJsMy0zYzAuNzItMC43MiAxLjY3OC0xLjExNyAyLjY5Ni0xLjExN3MxLjk3NiAwLjM5NyAyLjY5NiAxLjExN2MxLjQ4NiAxLjQ4NyAxLjQ4NiAzLjkwNSAwIDUuMzkybC0xLjM3MSAxLjM3MWMtMC4zMTcgMC4zMTctMC44MzIgMC4zMTctMS4xNDkgMHMtMC4zMTctMC44MzIgMC0xLjE0OWwxLjM3MS0xLjM3MWMwLjg1My0wLjg1MyAwLjg1My0yLjI0MSAwLTMuMDk0LTAuNDEzLTAuNDEzLTAuOTYzLTAuNjQxLTEuNTQ3LTAuNjQxcy0xLjEzNCAwLjIyOC0xLjU0NyAwLjY0MWwtMyAzYy0wLjg1MyAwLjg1My0wLjg1MyAyLjI0MSAwIDMuMDk0IDAuMzE3IDAuMzE3IDAuMzE3IDAuODMyIDAgMS4xNDktMC4xNTkgMC4xNTktMC4zNjcgMC4yMzgtMC41NzUgMC4yMzh6XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsOiBcIiMwMDAwMDBcIixcbiAgZDogXCJNNCAxNS44MTNjLTEuMDE4IDAtMS45NzYtMC4zOTctMi42OTYtMS4xMTctMS40ODYtMS40ODYtMS40ODYtMy45MDUgMC01LjM5MmwxLjM3MS0xLjM3MWMwLjMxNy0wLjMxNyAwLjgzMi0wLjMxNyAxLjE0OSAwczAuMzE3IDAuODMyIDAgMS4xNDlsLTEuMzcxIDEuMzcxYy0wLjg1MyAwLjg1My0wLjg1MyAyLjI0MSAwIDMuMDk0IDAuNDEzIDAuNDEzIDAuOTYyIDAuNjQxIDEuNTQ3IDAuNjQxczEuMTM0LTAuMjI4IDEuNTQ3LTAuNjQxbDMtM2MwLjg1My0wLjg1MyAwLjg1My0yLjI0MSAwLTMuMDk0LTAuMzE3LTAuMzE3LTAuMzE3LTAuODMyIDAtMS4xNDlzMC44MzItMC4zMTcgMS4xNDkgMGMxLjQ4NiAxLjQ4NiAxLjQ4NiAzLjkwNSAwIDUuMzkybC0zIDNjLTAuNzIgMC43Mi0xLjY3OCAxLjExNy0yLjY5NiAxLjExN3pcIlxufSkpKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgKCgpID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gIHZlcnNpb246IFwiMS4xXCIsXG4gIHdpZHRoOiBcIjE2XCIsXG4gIGhlaWdodDogXCIxNlwiLFxuICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsOiBcIiMwMDAwMDBcIixcbiAgZDogXCJNNiAxM2gxMHYyaC0xMHpNNiA3aDEwdjJoLTEwek02IDFoMTB2MmgtMTB6TTMgMHY0aC0xdi0zaC0xdi0xek0yIDguMjE5djAuNzgxaDJ2MWgtM3YtMi4yODFsMi0wLjkzOHYtMC43ODFoLTJ2LTFoM3YyLjI4MXpNNCAxMXY1aC0zdi0xaDJ2LTFoLTJ2LTFoMnYtMWgtMnYtMXpcIlxufSkpKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgKCgpID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gIHZlcnNpb246IFwiMS4xXCIsXG4gIHdpZHRoOiBcIjE2XCIsXG4gIGhlaWdodDogXCIxNlwiLFxuICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsOiBcIiMwMDAwMDBcIixcbiAgZDogXCJNNCA2di02aDEydjZoLTF2LTVoLTEwdjV6TTE2IDl2N2gtMTJ2LTdoMXY2aDEwdi02ek04IDdoMnYxaC0yek01IDdoMnYxaC0yek0xMSA3aDJ2MWgtMnpNMTQgN2gydjFoLTJ6TTAgNC41bDMgMy0zIDN6XCJcbn0pKSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0ICgoKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHhtbG5zWGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICB2ZXJzaW9uOiBcIjEuMVwiLFxuICB3aWR0aDogXCIxNlwiLFxuICBoZWlnaHQ6IFwiMTZcIixcbiAgdmlld0JveDogXCIwIDAgMTYgMTZcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbDogXCIjMDAwMDAwXCIsXG4gIGQ6IFwiTTYgMGg4djJoLTJ2MTRoLTJ2LTE0aC0ydjE0aC0ydi04Yy0yLjIwOSAwLTQtMS43OTEtNC00czEuNzkxLTQgNC00elwiXG59KSkpOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCAoKCkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgdmVyc2lvbjogXCIxLjFcIixcbiAgd2lkdGg6IFwiMTZcIixcbiAgaGVpZ2h0OiBcIjE2XCIsXG4gIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGw6IFwiIzAwMDAwMFwiLFxuICBkOiBcIk0zLjUxNiA3YzEuOTMzIDAgMy41IDEuNTY3IDMuNSAzLjVzLTEuNTY3IDMuNS0zLjUgMy41LTMuNS0xLjU2Ny0zLjUtMy41bC0wLjAxNi0wLjVjMC0zLjg2NiAzLjEzNC03IDctN3YyYy0xLjMzNiAwLTIuNTkxIDAuNTItMy41MzYgMS40NjQtMC4xODIgMC4xODItMC4zNDggMC4zNzUtMC40OTcgMC41NzggMC4xNzktMC4wMjggMC4zNjItMC4wNDMgMC41NDgtMC4wNDN6TTEyLjUxNiA3YzEuOTMzIDAgMy41IDEuNTY3IDMuNSAzLjVzLTEuNTY3IDMuNS0zLjUgMy41LTMuNS0xLjU2Ny0zLjUtMy41bC0wLjAxNi0wLjVjMC0zLjg2NiAzLjEzNC03IDctN3YyYy0xLjMzNiAwLTIuNTkxIDAuNTItMy41MzYgMS40NjQtMC4xODIgMC4xODItMC4zNDggMC4zNzUtMC40OTcgMC41NzggMC4xNzktMC4wMjggMC4zNjItMC4wNDMgMC41NDktMC4wNDN6XCJcbn0pKSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0ICgoKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHhtbG5zWGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICB2ZXJzaW9uOiBcIjEuMVwiLFxuICB3aWR0aDogXCIxNlwiLFxuICBoZWlnaHQ6IFwiMTZcIixcbiAgdmlld0JveDogXCIwIDAgMTYgMTZcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbDogXCIjMDAwMDAwXCIsXG4gIGQ6IFwiTTkgMy44ODF2LTMuODgxbDYgNi02IDZ2LTMuOTY2Yy02Ljk4LTAuMTY0LTYuNjgxIDQuNzQ3LTQuOTA0IDcuOTY2LTQuMzg2LTQuNzQxLTMuNDU1LTEyLjMzNyA0LjkwNC0xMi4xMTl6XCJcbn0pKSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0ICgoKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHhtbG5zWGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICB2ZXJzaW9uOiBcIjEuMVwiLFxuICB3aWR0aDogXCIxNlwiLFxuICBoZWlnaHQ6IFwiMTZcIixcbiAgdmlld0JveDogXCIwIDAgMTYgMTZcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbDogXCIjMDAwMDAwXCIsXG4gIGQ6IFwiTTE2IDh2MWgtMy42NjRjMC40MyAwLjYwMiAwLjY2NCAxLjI5MiAwLjY2NCAyIDAgMS4xMDctMC41NzMgMi4xNzItMS41NzIgMi45MjEtMC45MjcgMC42OTYtMi4xNDUgMS4wNzktMy40MjggMS4wNzlzLTIuNTAxLTAuMzgzLTMuNDI4LTEuMDc5Yy0wLjk5OS0wLjc0OS0xLjU3Mi0xLjgxNC0xLjU3Mi0yLjkyMWgyYzAgMS4wODQgMS4zNzQgMiAzIDJzMy0wLjkxNiAzLTJjMC0xLjA4NC0xLjM3NC0yLTMtMmgtOHYtMWg0LjY4Yy0wLjAzNy0wLjAyNi0wLjA3My0wLjA1Mi0wLjEwOC0wLjA3OS0wLjk5OS0wLjc0OS0xLjU3Mi0xLjgxNC0xLjU3Mi0yLjkyMXMwLjU3My0yLjE3MiAxLjU3Mi0yLjkyMWMwLjkyNy0wLjY5NiAyLjE0NS0xLjA3OSAzLjQyOC0xLjA3OXMyLjUwMSAwLjM4MyAzLjQyOCAxLjA3OWMwLjk5OSAwLjc0OSAxLjU3MiAxLjgxNCAxLjU3MiAyLjkyMWgtMmMwLTEuMDg0LTEuMzc0LTItMy0ycy0zIDAuOTE2LTMgMmMwIDEuMDg0IDEuMzc0IDIgMyAyIDEuMjM0IDAgMi40MDcgMC4zNTQgMy4zMiAxaDQuNjh6XCJcbn0pKSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0ICgoKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHhtbG5zWGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICB2ZXJzaW9uOiBcIjEuMVwiLFxuICB3aWR0aDogXCIxNlwiLFxuICBoZWlnaHQ6IFwiMTZcIixcbiAgdmlld0JveDogXCIwIDAgMTYgMTZcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbDogXCIjMDAwMDAwXCIsXG4gIGQ6IFwiTTExLjkwNCAxNmMxLjc3Ny0zLjIxOSAyLjA3Ni04LjEzLTQuOTA0LTcuOTY2djMuOTY2bC02LTYgNi02djMuODgxYzguMzU5LTAuMjE4IDkuMjkgNy4zNzggNC45MDQgMTIuMTE5elwiXG59KSkpOyIsIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9wcmVmZXItZGVmYXVsdC1leHBvcnQgKi9cbmV4cG9ydCB7IGRlZmF1bHQgYXMgQWxpZ25DZW50ZXIgfSBmcm9tIFwiLi9hbGlnbi1jZW50ZXIuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQWxpZ25KdXN0aWZ5IH0gZnJvbSBcIi4vYWxpZ24tanVzdGlmeS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBbGlnbkxlZnQgfSBmcm9tIFwiLi9hbGlnbi1sZWZ0LmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFsaWduUmlnaHQgfSBmcm9tIFwiLi9hbGlnbi1yaWdodC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb2xkIH0gZnJvbSBcIi4vYm9sZC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCdWxsZXRMaXN0IH0gZnJvbSBcIi4vYnVsbGV0LWxpc3QuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2xlYXIgfSBmcm9tIFwiLi9jbGVhci5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2RlIH0gZnJvbSBcIi4vY29kZS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGb250U2l6ZSB9IGZyb20gXCIuL2ZvbnQtc2l6ZS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBJbWFnZSB9IGZyb20gXCIuL2ltYWdlLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEl0YWxpYyB9IGZyb20gXCIuL2l0YWxpYy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaW5rIH0gZnJvbSBcIi4vbGluay5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBPcmRlcmVkTGlzdCB9IGZyb20gXCIuL29yZGVyZWQtbGlzdC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYWdlYnJlYWsgfSBmcm9tIFwiLi9wYWdlYnJlYWsuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGFyYWdyYXBoIH0gZnJvbSBcIi4vcGFyYWdyYXBoLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFF1b3RlIH0gZnJvbSBcIi4vcXVvdGUuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVkbyB9IGZyb20gXCIuL3JlZG8uanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RyaWtldGhyb3VnaCB9IGZyb20gXCIuL3N0cmlrZXRocm91Z2guanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVW5kbyB9IGZyb20gXCIuL3VuZG8uanNcIjsiLCJpbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IFRleHQgfSBmcm9tIFwiLi4vLi4vLi4vYXRvbXMvdGV4dC9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgRWRpdG9ySWNvbnMgZnJvbSBcIi4uL2ljb25zL2luZGV4LmpzXCI7XG5jb25zdCBTdHlsZWRUZXh0ID0gc3R5bGVkKFRleHQpYFxuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMuZ3JleTgwfTtcbiAgJiBzdmcgcGF0aCB7XG4gICAgZmlsbDogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLmdyZXk4MH07XG4gIH1cbmA7XG5jb25zdCBNZW51QnV0dG9uID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICBlZGl0b3IsXG4gICAgb25DbGljayxcbiAgICBpY29uLFxuICAgIGF0dHJpYnV0ZXMsXG4gICAgY2hpbGRyZW5cbiAgfSA9IHByb3BzO1xuICBjb25zdCBpc0FjdGl2ZSA9IHVzZU1lbW8oKCkgPT4gZWRpdG9yLmlzQWN0aXZlKGF0dHJpYnV0ZXMgfHwgbmFtZSkgPyAnYWN0aXZlJyA6ICcnLCBbbmFtZSwgYXR0cmlidXRlc10pO1xuXG4gIC8vIFVzaW5nIGljb25zIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9LZXlhbW9vbi9JY29Nb29uLUZyZWVcbiAgY29uc3QgSWNvbiA9IGljb24gPyBFZGl0b3JJY29uc1tpY29uXSA6IG51bGw7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRUZXh0LCB7XG4gICAgYXM6IFwic3BhblwiLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgY2xhc3NOYW1lOiBpc0FjdGl2ZSxcbiAgICBzaXplOiBcImljb25cIixcbiAgICBteDogXCJtZFwiXG4gIH0sIEljb24gPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCBudWxsKSA6IG5hbWUsIGNoaWxkcmVuKTtcbn07XG5leHBvcnQgZGVmYXVsdCBNZW51QnV0dG9uOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTWVudUJ1dHRvbiBmcm9tIFwiLi9tZW51LWJ1dHRvbi5qc1wiO1xuY29uc3QgSGVhZGluZ1NlbGVjdCA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIGVkaXRvclxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGhlYWRpbmdMZXZlbHMgPSBbMSwgMiwgMywgNCwgNSwgNl07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgaGVhZGluZ0xldmVscy5tYXAobGV2ZWwgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSBgaGVhZGluZy4ke2xldmVsfWA7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVCdXR0b24sIHtcbiAgICAgIGVkaXRvcjogZWRpdG9yLFxuICAgICAga2V5OiBuYW1lLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIG9uQ2xpY2s6ICgpID0+IGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlSGVhZGluZyh7XG4gICAgICAgIGxldmVsXG4gICAgICB9KS5ydW4oKSxcbiAgICAgIGljb246IFwiRm9udFNpemVcIixcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgbGV2ZWxcbiAgICAgIH1cbiAgICB9LCBgICR7bGV2ZWx9YCk7XG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZW51QnV0dG9uLCB7XG4gICAgZWRpdG9yOiBlZGl0b3IsXG4gICAgbmFtZTogXCJwYXJhZ3JhcGhcIixcbiAgICBvbkNsaWNrOiAoKSA9PiBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldFBhcmFncmFwaCgpLnJ1bigpLFxuICAgIGljb246IFwiUGFyYWdyYXBoXCJcbiAgfSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IEhlYWRpbmdTZWxlY3Q7IiwiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBNZW51QnV0dG9uIGZyb20gXCIuL21lbnUtYnV0dG9uLmpzXCI7XG5jb25zdCBJbWFnZUJ1dHRvbiA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIGVkaXRvclxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtpbWFnZSwgc2V0SW1hZ2VdID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgZmlsZUlucHV0ID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVJbnB1dENoYW5nZSA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBmaWxlc1xuICAgIH0gPSBldmVudC50YXJnZXQ7XG4gICAgaWYgKCFmaWxlcy5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGVzWzBdKTtcbiAgICByZWFkZXIub25sb2FkID0gZSA9PiB7XG4gICAgICBzZXRJbWFnZShlLnRhcmdldD8ucmVzdWx0KTtcbiAgICB9O1xuICB9O1xuICBjb25zdCBoYW5kbGVCdXR0b25DbGljayA9ICgpID0+IHtcbiAgICBpZiAoZmlsZUlucHV0LmN1cnJlbnQpIGZpbGVJbnB1dC5jdXJyZW50LmNsaWNrKCk7XG4gIH07XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGltYWdlICYmIHR5cGVvZiBpbWFnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkuc2V0SW1hZ2Uoe1xuICAgICAgICBzcmM6IGltYWdlXG4gICAgICB9KS5ydW4oKTtcbiAgICB9XG4gIH0sIFtpbWFnZV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVCdXR0b24sIHtcbiAgICBlZGl0b3I6IGVkaXRvcixcbiAgICBrZXk6IFwiaW1hZ2VcIixcbiAgICBuYW1lOiBcImltYWdlXCIsXG4gICAgb25DbGljazogaGFuZGxlQnV0dG9uQ2xpY2ssXG4gICAgaWNvbjogXCJJbWFnZVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICB0eXBlOiBcImZpbGVcIixcbiAgICByZWY6IGZpbGVJbnB1dCxcbiAgICBvbkNoYW5nZTogaGFuZGxlSW5wdXRDaGFuZ2UsXG4gICAgc3R5bGU6IHtcbiAgICAgIGRpc3BsYXk6ICdub25lJ1xuICAgIH1cbiAgfSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IEltYWdlQnV0dG9uOyIsIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTWVudUJhcldyYXBwZXIgfSBmcm9tIFwiLi4vcmljaC10ZXh0LWVkaXRvci5zdHlsZWQuanNcIjtcbmltcG9ydCB1c2VUaXB0YXBDb21tYW5kcyBmcm9tIFwiLi4vdXNlVGlwdGFwQ29tbWFuZHMuanNcIjtcbmltcG9ydCBIZWFkaW5nU2VsZWN0IGZyb20gXCIuL2hlYWRpbmctc2VsZWN0LmpzXCI7XG5pbXBvcnQgSW1hZ2VCdXR0b24gZnJvbSBcIi4vaW1hZ2UtYnV0dG9uLmpzXCI7XG5pbXBvcnQgTWVudUJ1dHRvbiBmcm9tIFwiLi9tZW51LWJ1dHRvbi5qc1wiO1xuY29uc3QgTWVudUJhciA9ICh7XG4gIGVkaXRvclxufSkgPT4ge1xuICBjb25zdCBjb21tYW5kcyA9IHVzZVRpcHRhcENvbW1hbmRzKHtcbiAgICBlZGl0b3JcbiAgfSk7XG4gIGlmICghZWRpdG9yKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVCYXJXcmFwcGVyLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChIZWFkaW5nU2VsZWN0LCB7XG4gICAgZWRpdG9yOiBlZGl0b3JcbiAgfSksIGNvbW1hbmRzLm1hcCgoe1xuICAgIG5hbWUsXG4gICAgb25DbGljayxcbiAgICBpY29uXG4gIH0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVCdXR0b24sIHtcbiAgICBlZGl0b3I6IGVkaXRvcixcbiAgICBrZXk6IG5hbWUsXG4gICAgbmFtZTogbmFtZSxcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIGljb246IGljb25cbiAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbWFnZUJ1dHRvbiwge1xuICAgIGVkaXRvcjogZWRpdG9yXG4gIH0pKTtcbn07XG5leHBvcnQgZGVmYXVsdCBNZW51QmFyOyIsIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuaW1wb3J0IENoYXJhY3RlckNvdW50IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNoYXJhY3Rlci1jb3VudCc7XG5pbXBvcnQgSW1hZ2UgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taW1hZ2UnO1xuaW1wb3J0IExpbmsgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbGluayc7XG5pbXBvcnQgVGFibGUgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUnO1xuaW1wb3J0IFRhYmxlQ2VsbCBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1jZWxsJztcbmltcG9ydCBUYWJsZUhlYWRlciBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1oZWFkZXInO1xuaW1wb3J0IFRhYmxlUm93IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLXJvdyc7XG5pbXBvcnQgVGV4dEFsaWduIGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQtYWxpZ24nO1xuaW1wb3J0IFR5cG9ncmFwaHkgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdHlwb2dyYXBoeSc7XG4vLyBOb3RlOiBUeXBlcyBmb3IgQHRpcHRhcC9yZWFjdCBhcmUgdGVtcG9yYXJpbHkgaWdub3JlZCBkdWUgdG86XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdWViZXJkb3Npcy90aXB0YXAvaXNzdWVzLzM0ODhcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVkaXRvckNvbnRlbnQsIHVzZUVkaXRvciB9IGZyb20gJ0B0aXB0YXAvcmVhY3QnO1xuaW1wb3J0IFN0YXJ0ZXJLaXQgZnJvbSAnQHRpcHRhcC9zdGFydGVyLWtpdCc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTWVudUJhciBmcm9tIFwiLi9jb21wb25lbnRzL21lbnUtYmFyLmpzXCI7XG5pbXBvcnQgeyBFZGl0b3JXcmFwcGVyIH0gZnJvbSBcIi4vcmljaC10ZXh0LWVkaXRvci5zdHlsZWQuanNcIjtcbmNvbnN0IFJpY2hUZXh0RWRpdG9yID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgdmFsdWUsXG4gICAgb25DaGFuZ2UsXG4gICAgb3B0aW9ucyA9IHt9XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgaGFuZGxlVXBkYXRlID0gdXNlQ2FsbGJhY2soKHtcbiAgICBlZGl0b3JcbiAgfSkgPT4ge1xuICAgIG9uQ2hhbmdlKGVkaXRvci5nZXRIVE1MKCkpO1xuICB9LCBbXSk7XG4gIGNvbnN0IHtcbiAgICBsaW1pdCxcbiAgICBleHRlbnNpb25zID0gW10sXG4gICAgLi4ucmVzdE9wdGlvbnNcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGVkaXRvciA9IHVzZUVkaXRvcih7XG4gICAgZXh0ZW5zaW9uczogW1N0YXJ0ZXJLaXQsIENoYXJhY3RlckNvdW50LmNvbmZpZ3VyZSh7XG4gICAgICBsaW1pdCxcbiAgICAgIG1vZGU6ICdub2RlU2l6ZSdcbiAgICB9KSwgSW1hZ2UsIExpbmsuY29uZmlndXJlKHtcbiAgICAgIG9wZW5PbkNsaWNrOiBmYWxzZVxuICAgIH0pLCBUYWJsZSwgVGFibGVDZWxsLCBUYWJsZUhlYWRlciwgVGFibGVSb3csIFRleHRBbGlnbi5jb25maWd1cmUoe1xuICAgICAgdHlwZXM6IFsnaGVhZGluZycsICdwYXJhZ3JhcGgnLCAnaW1hZ2UnXVxuICAgIH0pLCBUeXBvZ3JhcGh5LCAuLi5leHRlbnNpb25zXSxcbiAgICBjb250ZW50OiB2YWx1ZSxcbiAgICBvblVwZGF0ZTogaGFuZGxlVXBkYXRlLFxuICAgIGluamVjdENTUzogdHJ1ZSxcbiAgICAuLi5yZXN0T3B0aW9uc1xuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZW51QmFyLCB7XG4gICAgZWRpdG9yOiBlZGl0b3JcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEVkaXRvcldyYXBwZXIsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEVkaXRvckNvbnRlbnQsIHtcbiAgICBlZGl0b3I6IGVkaXRvclxuICB9KSwgb3B0aW9ucy5saW1pdCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJjaGFyYWN0ZXJDb3VudFwiXG4gIH0sIHZhbHVlPy5sZW5ndGgsIFwiL1wiLCBsaW1pdCkpKTtcbn07XG5SaWNoVGV4dEVkaXRvci5kaXNwbGF5TmFtZSA9ICdSaWNoVGV4dEVkaXRvcic7XG5leHBvcnQgeyBSaWNoVGV4dEVkaXRvciB9O1xuZXhwb3J0IGRlZmF1bHQgUmljaFRleHRFZGl0b3I7IiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbmltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmV4cG9ydCB2YXIgZXZlbnRQcm9wVHlwZXMgPSB7XG4gICAgb25BY3RpdmF0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25BZGRVbmRvOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkJlZm9yZUFkZFVuZG86IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQmVmb3JlRXhlY0NvbW1hbmQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQmVmb3JlR2V0Q29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25CZWZvcmVSZW5kZXJVSTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25CZWZvcmVTZXRDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkJlZm9yZVBhc3RlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkNsZWFyVW5kb3M6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQ29udGV4dE1lbnU6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQ29tbWVudENoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Db3B5OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkN1dDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25EYmxjbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25EZWFjdGl2YXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkRpcnR5OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkRyYWc6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uRHJhZ0Ryb3A6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uRHJhZ0VuZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25EcmFnR2VzdHVyZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25EcmFnT3ZlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Ecm9wOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkV4ZWNDb21tYW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkZvY3VzSW46IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uRm9jdXNPdXQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uR2V0Q29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25IaWRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkluaXQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25LZXlQcmVzczogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25LZXlVcDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Mb2FkQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Nb3VzZURvd246IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uTW91c2VFbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Nb3VzZUxlYXZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbk1vdXNlTW92ZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Nb3VzZU91dDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Nb3VzZU92ZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uTW91c2VVcDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Ob2RlQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbk9iamVjdFJlc2l6ZVN0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbk9iamVjdFJlc2l6ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uT2JqZWN0U2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uUGFzdGU6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uUG9zdFByb2Nlc3M6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uUG9zdFJlbmRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25QcmVQcm9jZXNzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvblByb2dyZXNzU3RhdGU6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uUmVkbzogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25SZW1vdmU6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uUmVzZXQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uU2F2ZUNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uU2VsZWN0aW9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvblNldEF0dHJpYjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25TZXRDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvblNob3c6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uU3VibWl0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvblVuZG86IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uVmlzdWFsQWlkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvblNraW5Mb2FkRXJyb3I6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uVGhlbWVMb2FkRXJyb3I6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uTW9kZWxMb2FkRXJyb3I6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uUGx1Z2luTG9hZEVycm9yOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkljb25zTG9hZEVycm9yOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkxhbmd1YWdlTG9hZEVycm9yOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvblNjcmlwdHNMb2FkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvblNjcmlwdHNMb2FkRXJyb3I6IFByb3BUeXBlcy5mdW5jLFxufTtcbmV4cG9ydCB2YXIgRWRpdG9yUHJvcFR5cGVzID0gX19hc3NpZ24oeyBhcGlLZXk6IFByb3BUeXBlcy5zdHJpbmcsIGlkOiBQcm9wVHlwZXMuc3RyaW5nLCBpbmxpbmU6IFByb3BUeXBlcy5ib29sLCBpbml0OiBQcm9wVHlwZXMub2JqZWN0LCBpbml0aWFsVmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsIG9uRWRpdG9yQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYywgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsIHRhZ05hbWU6IFByb3BUeXBlcy5zdHJpbmcsIGNsb3VkQ2hhbm5lbDogUHJvcFR5cGVzLnN0cmluZywgcGx1Z2luczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmFycmF5XSksIHRvb2xiYXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5hcnJheV0pLCBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsIHRleHRhcmVhTmFtZTogUHJvcFR5cGVzLnN0cmluZywgdGlueW1jZVNjcmlwdFNyYzogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICAgIFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgICAgICBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICAgICAgc3JjOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICAgICAgYXN5bmM6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAgICAgZGVmZXI6IFByb3BUeXBlcy5ib29sXG4gICAgICAgIH0pKVxuICAgIF0pLCByb2xsYmFjazogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksIHNjcmlwdExvYWRpbmc6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGFzeW5jOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgZGVmZXI6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICBkZWxheTogUHJvcFR5cGVzLm51bWJlclxuICAgIH0pIH0sIGV2ZW50UHJvcFR5cGVzKTtcbiIsImltcG9ydCB7IGV2ZW50UHJvcFR5cGVzIH0gZnJvbSAnLi9jb21wb25lbnRzL0VkaXRvclByb3BUeXBlcyc7XG5leHBvcnQgdmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiAoeCkgeyByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7IH07XG52YXIgaXNFdmVudFByb3AgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbmFtZSBpbiBldmVudFByb3BUeXBlczsgfTtcbnZhciBldmVudEF0dHJUb0V2ZW50TmFtZSA9IGZ1bmN0aW9uIChhdHRyTmFtZSkgeyByZXR1cm4gYXR0ck5hbWUuc3Vic3RyKDIpOyB9O1xuZXhwb3J0IHZhciBjb25maWdIYW5kbGVyczIgPSBmdW5jdGlvbiAoaGFuZGxlckxvb2t1cCwgb24sIG9mZiwgYWRhcHRlciwgcHJldlByb3BzLCBwcm9wcywgYm91bmRIYW5kbGVycykge1xuICAgIHZhciBwcmV2RXZlbnRLZXlzID0gT2JqZWN0LmtleXMocHJldlByb3BzKS5maWx0ZXIoaXNFdmVudFByb3ApO1xuICAgIHZhciBjdXJyRXZlbnRLZXlzID0gT2JqZWN0LmtleXMocHJvcHMpLmZpbHRlcihpc0V2ZW50UHJvcCk7XG4gICAgdmFyIHJlbW92ZWRLZXlzID0gcHJldkV2ZW50S2V5cy5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gcHJvcHNba2V5XSA9PT0gdW5kZWZpbmVkOyB9KTtcbiAgICB2YXIgYWRkZWRLZXlzID0gY3VyckV2ZW50S2V5cy5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gcHJldlByb3BzW2tleV0gPT09IHVuZGVmaW5lZDsgfSk7XG4gICAgcmVtb3ZlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIC8vIHJlbW92ZSBldmVudCBoYW5kbGVyXG4gICAgICAgIHZhciBldmVudE5hbWUgPSBldmVudEF0dHJUb0V2ZW50TmFtZShrZXkpO1xuICAgICAgICB2YXIgd3JhcHBlZEhhbmRsZXIgPSBib3VuZEhhbmRsZXJzW2V2ZW50TmFtZV07XG4gICAgICAgIG9mZihldmVudE5hbWUsIHdyYXBwZWRIYW5kbGVyKTtcbiAgICAgICAgZGVsZXRlIGJvdW5kSGFuZGxlcnNbZXZlbnROYW1lXTtcbiAgICB9KTtcbiAgICBhZGRlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB3cmFwcGVkSGFuZGxlciA9IGFkYXB0ZXIoaGFuZGxlckxvb2t1cCwga2V5KTtcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9IGV2ZW50QXR0clRvRXZlbnROYW1lKGtleSk7XG4gICAgICAgIGJvdW5kSGFuZGxlcnNbZXZlbnROYW1lXSA9IHdyYXBwZWRIYW5kbGVyO1xuICAgICAgICBvbihldmVudE5hbWUsIHdyYXBwZWRIYW5kbGVyKTtcbiAgICB9KTtcbn07XG5leHBvcnQgdmFyIGNvbmZpZ0hhbmRsZXJzID0gZnVuY3Rpb24gKGVkaXRvciwgcHJldlByb3BzLCBwcm9wcywgYm91bmRIYW5kbGVycywgbG9va3VwKSB7XG4gICAgcmV0dXJuIGNvbmZpZ0hhbmRsZXJzMihsb29rdXAsIGVkaXRvci5vbi5iaW5kKGVkaXRvciksIGVkaXRvci5vZmYuYmluZChlZGl0b3IpLCBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuICAgIGZ1bmN0aW9uIChoYW5kbGVyTG9va3VwLCBrZXkpIHsgcmV0dXJuIGZ1bmN0aW9uIChlKSB7IHZhciBfYTsgcmV0dXJuIChfYSA9IGhhbmRsZXJMb29rdXAoa2V5KSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hKGUsIGVkaXRvcik7IH07IH0sIHByZXZQcm9wcywgcHJvcHMsIGJvdW5kSGFuZGxlcnMpO1xufTtcbnZhciB1bmlxdWUgPSAwO1xuZXhwb3J0IHZhciB1dWlkID0gZnVuY3Rpb24gKHByZWZpeCkge1xuICAgIHZhciB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICB2YXIgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwMCk7XG4gICAgdW5pcXVlKys7XG4gICAgcmV0dXJuIHByZWZpeCArICdfJyArIHJhbmRvbSArIHVuaXF1ZSArIFN0cmluZyh0aW1lKTtcbn07XG5leHBvcnQgdmFyIGlzVGV4dGFyZWFPcklucHV0ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudCAhPT0gbnVsbCAmJiAoZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICd0ZXh0YXJlYScgfHwgZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcpO1xufTtcbnZhciBub3JtYWxpemVQbHVnaW5BcnJheSA9IGZ1bmN0aW9uIChwbHVnaW5zKSB7XG4gICAgaWYgKHR5cGVvZiBwbHVnaW5zID09PSAndW5kZWZpbmVkJyB8fCBwbHVnaW5zID09PSAnJykge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBsdWdpbnMpID8gcGx1Z2lucyA6IHBsdWdpbnMuc3BsaXQoJyAnKTtcbn07XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuZXhwb3J0IHZhciBtZXJnZVBsdWdpbnMgPSBmdW5jdGlvbiAoaW5pdFBsdWdpbnMsIGlucHV0UGx1Z2lucykgeyByZXR1cm4gbm9ybWFsaXplUGx1Z2luQXJyYXkoaW5pdFBsdWdpbnMpLmNvbmNhdChub3JtYWxpemVQbHVnaW5BcnJheShpbnB1dFBsdWdpbnMpKTsgfTtcbmV4cG9ydCB2YXIgaXNCZWZvcmVJbnB1dEV2ZW50QXZhaWxhYmxlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gd2luZG93LklucHV0RXZlbnQgJiYgdHlwZW9mIElucHV0RXZlbnQucHJvdG90eXBlLmdldFRhcmdldFJhbmdlcyA9PT0gJ2Z1bmN0aW9uJzsgfTtcbmV4cG9ydCB2YXIgaXNJbkRvYyA9IGZ1bmN0aW9uIChlbGVtKSB7XG4gICAgaWYgKCEoJ2lzQ29ubmVjdGVkJyBpbiBOb2RlLnByb3RvdHlwZSkpIHtcbiAgICAgICAgLy8gRmFsbGJhY2sgZm9yIElFIGFuZCBvbGQgRWRnZVxuICAgICAgICB2YXIgY3VycmVudCA9IGVsZW07XG4gICAgICAgIHZhciBwYXJlbnRfMSA9IGVsZW0ucGFyZW50Tm9kZTtcbiAgICAgICAgd2hpbGUgKHBhcmVudF8xICE9IG51bGwpIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBwYXJlbnRfMTtcbiAgICAgICAgICAgIHBhcmVudF8xID0gY3VycmVudC5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50ID09PSBlbGVtLm93bmVyRG9jdW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiBlbGVtLmlzQ29ubmVjdGVkO1xufTtcbmV4cG9ydCB2YXIgc2V0TW9kZSA9IGZ1bmN0aW9uIChlZGl0b3IsIG1vZGUpIHtcbiAgICBpZiAoZWRpdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGVkaXRvci5tb2RlICE9IG51bGwgJiYgdHlwZW9mIGVkaXRvci5tb2RlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZWRpdG9yLm1vZGUuc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBlZGl0b3IubW9kZS5zZXQobW9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7IC8vIHN1cHBvcnQgVGlueU1DRSA0XG4gICAgICAgICAgICBlZGl0b3Iuc2V0TW9kZShtb2RlKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJy4vVXRpbHMnO1xudmFyIGluamVjdFNjcmlwdFRhZyA9IGZ1bmN0aW9uIChkb2MsIGl0ZW0sIGhhbmRsZXIpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciBzY3JpcHRUYWcgPSBkb2MuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgc2NyaXB0VGFnLnJlZmVycmVyUG9saWN5ID0gJ29yaWdpbic7XG4gICAgc2NyaXB0VGFnLnR5cGUgPSAnYXBwbGljYXRpb24vamF2YXNjcmlwdCc7XG4gICAgc2NyaXB0VGFnLmlkID0gaXRlbS5pZDtcbiAgICBzY3JpcHRUYWcuc3JjID0gaXRlbS5zcmM7XG4gICAgc2NyaXB0VGFnLmFzeW5jID0gKF9hID0gaXRlbS5hc3luYykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2U7XG4gICAgc2NyaXB0VGFnLmRlZmVyID0gKF9iID0gaXRlbS5kZWZlcikgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZmFsc2U7XG4gICAgdmFyIGxvYWRIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzY3JpcHRUYWcucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIGxvYWRIYW5kbGVyKTtcbiAgICAgICAgc2NyaXB0VGFnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JIYW5kbGVyKTtcbiAgICAgICAgaGFuZGxlcihpdGVtLnNyYyk7XG4gICAgfTtcbiAgICB2YXIgZXJyb3JIYW5kbGVyID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICBzY3JpcHRUYWcucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIGxvYWRIYW5kbGVyKTtcbiAgICAgICAgc2NyaXB0VGFnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JIYW5kbGVyKTtcbiAgICAgICAgaGFuZGxlcihpdGVtLnNyYywgZXJyKTtcbiAgICB9O1xuICAgIHNjcmlwdFRhZy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgbG9hZEhhbmRsZXIpO1xuICAgIHNjcmlwdFRhZy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9ySGFuZGxlcik7XG4gICAgaWYgKGRvYy5oZWFkKSB7XG4gICAgICAgIGRvYy5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdFRhZyk7XG4gICAgfVxufTtcbnZhciBjcmVhdGVEb2N1bWVudFNjcmlwdExvYWRlciA9IGZ1bmN0aW9uIChkb2MpIHtcbiAgICB2YXIgbG9va3VwID0ge307XG4gICAgdmFyIHNjcmlwdExvYWRPckVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChzcmMsIGVycikge1xuICAgICAgICB2YXIgaXRlbSA9IGxvb2t1cFtzcmNdO1xuICAgICAgICBpdGVtLmRvbmUgPSB0cnVlO1xuICAgICAgICBpdGVtLmVycm9yID0gZXJyO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gaXRlbS5oYW5kbGVyczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIHZhciBoID0gX2FbX2ldO1xuICAgICAgICAgICAgaChzcmMsIGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbS5oYW5kbGVycyA9IFtdO1xuICAgIH07XG4gICAgdmFyIGxvYWRTY3JpcHRzID0gZnVuY3Rpb24gKGl0ZW1zLCBzdWNjZXNzLCBmYWlsdXJlKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIHZhciBmYWlsdXJlT3JMb2cgPSBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBmYWlsdXJlICE9PSB1bmRlZmluZWQgPyBmYWlsdXJlKGVycikgOiBjb25zb2xlLmVycm9yKGVycik7IH07XG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGZhaWx1cmVPckxvZyhuZXcgRXJyb3IoJ0F0IGxlYXN0IG9uZSBzY3JpcHQgbXVzdCBiZSBwcm92aWRlZCcpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc3VjY2Vzc0NvdW50ID0gMDtcbiAgICAgICAgdmFyIGZhaWxlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgbG9hZGVkID0gZnVuY3Rpb24gKF9zcmMsIGVycikge1xuICAgICAgICAgICAgaWYgKGZhaWxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZhaWx1cmVPckxvZyhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoKytzdWNjZXNzQ291bnQgPT09IGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBpdGVtc18xID0gaXRlbXM7IF9pIDwgaXRlbXNfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gaXRlbXNfMVtfaV07XG4gICAgICAgICAgICB2YXIgZXhpc3RpbmcgPSBsb29rdXBbaXRlbS5zcmNdO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVkKGl0ZW0uc3JjLCBleGlzdGluZy5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5oYW5kbGVycy5wdXNoKGxvYWRlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGVudHJ5XG4gICAgICAgICAgICAgICAgdmFyIGlkID0gdXVpZCgndGlueS0nKTtcbiAgICAgICAgICAgICAgICBsb29rdXBbaXRlbS5zcmNdID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgICAgIHNyYzogaXRlbS5zcmMsXG4gICAgICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnM6IFtsb2FkZWRdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaW5qZWN0U2NyaXB0VGFnKGRvYywgX19hc3NpZ24oeyBpZDogaWQgfSwgaXRlbSksIHNjcmlwdExvYWRPckVycm9ySGFuZGxlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBkZWxldGVTY3JpcHRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2IgPSBPYmplY3QudmFsdWVzKGxvb2t1cCk7IF9pIDwgX2IubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IF9iW19pXTtcbiAgICAgICAgICAgIHZhciBzY3JpcHRUYWcgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoaXRlbS5pZCk7XG4gICAgICAgICAgICBpZiAoc2NyaXB0VGFnICE9IG51bGwgJiYgc2NyaXB0VGFnLnRhZ05hbWUgPT09ICdTQ1JJUFQnKSB7XG4gICAgICAgICAgICAgICAgKF9hID0gc2NyaXB0VGFnLnBhcmVudE5vZGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZW1vdmVDaGlsZChzY3JpcHRUYWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvb2t1cCA9IHt9O1xuICAgIH07XG4gICAgdmFyIGdldERvY3VtZW50ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9jOyB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvYWRTY3JpcHRzOiBsb2FkU2NyaXB0cyxcbiAgICAgICAgZGVsZXRlU2NyaXB0czogZGVsZXRlU2NyaXB0cyxcbiAgICAgICAgZ2V0RG9jdW1lbnQ6IGdldERvY3VtZW50XG4gICAgfTtcbn07XG52YXIgY3JlYXRlU2NyaXB0TG9hZGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjYWNoZSA9IFtdO1xuICAgIHZhciBnZXREb2N1bWVudFNjcmlwdExvYWRlciA9IGZ1bmN0aW9uIChkb2MpIHtcbiAgICAgICAgdmFyIGxvYWRlciA9IGNhY2hlLmZpbmQoZnVuY3Rpb24gKGwpIHsgcmV0dXJuIGwuZ2V0RG9jdW1lbnQoKSA9PT0gZG9jOyB9KTtcbiAgICAgICAgaWYgKGxvYWRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2FkZXIgPSBjcmVhdGVEb2N1bWVudFNjcmlwdExvYWRlcihkb2MpO1xuICAgICAgICAgICAgY2FjaGUucHVzaChsb2FkZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2FkZXI7XG4gICAgfTtcbiAgICB2YXIgbG9hZExpc3QgPSBmdW5jdGlvbiAoZG9jLCBpdGVtcywgZGVsYXksIHN1Y2Nlc3MsIGZhaWx1cmUpIHtcbiAgICAgICAgdmFyIGRvTG9hZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldERvY3VtZW50U2NyaXB0TG9hZGVyKGRvYykubG9hZFNjcmlwdHMoaXRlbXMsIHN1Y2Nlc3MsIGZhaWx1cmUpOyB9O1xuICAgICAgICBpZiAoZGVsYXkgPiAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGRvTG9hZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZG9Mb2FkKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciByZWluaXRpYWxpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGxvYWRlciA9IGNhY2hlLnBvcCgpOyBsb2FkZXIgIT0gbnVsbDsgbG9hZGVyID0gY2FjaGUucG9wKCkpIHtcbiAgICAgICAgICAgIGxvYWRlci5kZWxldGVTY3JpcHRzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvYWRMaXN0OiBsb2FkTGlzdCxcbiAgICAgICAgcmVpbml0aWFsaXplOiByZWluaXRpYWxpemVcbiAgICB9O1xufTtcbmV4cG9ydCB2YXIgU2NyaXB0TG9hZGVyID0gY3JlYXRlU2NyaXB0TG9hZGVyKCk7XG4iLCJ2YXIgZ2V0VGlueW1jZSA9IGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgdmFyIGdsb2JhbCA9IHZpZXc7XG4gICAgcmV0dXJuIGdsb2JhbCAmJiBnbG9iYWwudGlueW1jZSA/IGdsb2JhbC50aW55bWNlIDogbnVsbDtcbn07XG5leHBvcnQgeyBnZXRUaW55bWNlIH07XG4iLCJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNjcmlwdExvYWRlciB9IGZyb20gJy4uL1NjcmlwdExvYWRlcjInO1xuaW1wb3J0IHsgZ2V0VGlueW1jZSB9IGZyb20gJy4uL1RpbnlNQ0UnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNUZXh0YXJlYU9ySW5wdXQsIG1lcmdlUGx1Z2lucywgdXVpZCwgY29uZmlnSGFuZGxlcnMsIGlzQmVmb3JlSW5wdXRFdmVudEF2YWlsYWJsZSwgaXNJbkRvYywgc2V0TW9kZSB9IGZyb20gJy4uL1V0aWxzJztcbmltcG9ydCB7IEVkaXRvclByb3BUeXBlcyB9IGZyb20gJy4vRWRpdG9yUHJvcFR5cGVzJztcbnZhciBFZGl0b3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEVkaXRvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBFZGl0b3IocHJvcHMpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5yb2xsYmFja1RpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgICBfdGhpcy52YWx1ZUN1cnNvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgX3RoaXMucm9sbGJhY2tDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZWRpdG9yID0gX3RoaXMuZWRpdG9yO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gX3RoaXMucHJvcHMudmFsdWU7XG4gICAgICAgICAgICBpZiAoZWRpdG9yICYmIHZhbHVlICYmIHZhbHVlICE9PSBfdGhpcy5jdXJyZW50Q29udGVudCkge1xuICAgICAgICAgICAgICAgIGVkaXRvci51bmRvTWFuYWdlci5pZ25vcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0Q29udGVudCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgcmVzdG9yZSBjdXJzb3Igb24gaW5saW5lIGVkaXRvcnMgd2hlbiB0aGV5IGFyZSBmb2N1c2VkXG4gICAgICAgICAgICAgICAgICAgIC8vIGFzIG90aGVyd2lzZSBpdCB3aWxsIGNhdXNlIGEgZm9jdXMgZ3JhYlxuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMudmFsdWVDdXJzb3IgJiYgKCFfdGhpcy5pbmxpbmUgfHwgZWRpdG9yLmhhc0ZvY3VzKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24ubW92ZVRvQm9va21hcmsoX3RoaXMudmFsdWVDdXJzb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMucm9sbGJhY2tUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMuaGFuZGxlQmVmb3JlSW5wdXQgPSBmdW5jdGlvbiAoX2V2dCkge1xuICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgX3RoaXMucHJvcHMudmFsdWUgPT09IF90aGlzLmN1cnJlbnRDb250ZW50ICYmIF90aGlzLmVkaXRvcikge1xuICAgICAgICAgICAgICAgIGlmICghX3RoaXMuaW5saW5lIHx8IF90aGlzLmVkaXRvci5oYXNGb2N1cygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXRCb29rbWFyayB0aHJvd3MgZXhjZXB0aW9ucyB3aGVuIHRoZSBlZGl0b3IgaGFzIG5vdCBiZWVuIGZvY3VzZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvc3NpYmx5IG9ubHkgaW4gaW5saW5lIG1vZGUgYnV0IEknbSBub3QgdGFraW5nIGNoYW5jZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnZhbHVlQ3Vyc29yID0gX3RoaXMuZWRpdG9yLnNlbGVjdGlvbi5nZXRCb29rbWFyaygzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMuaGFuZGxlQmVmb3JlSW5wdXRTcGVjaWFsID0gZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICAgICAgaWYgKGV2dC5rZXkgPT09ICdFbnRlcicgfHwgZXZ0LmtleSA9PT0gJ0JhY2tzcGFjZScgfHwgZXZ0LmtleSA9PT0gJ0RlbGV0ZScpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYW5kbGVCZWZvcmVJbnB1dChldnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5oYW5kbGVFZGl0b3JDaGFuZ2UgPSBmdW5jdGlvbiAoX2V2dCkge1xuICAgICAgICAgICAgdmFyIGVkaXRvciA9IF90aGlzLmVkaXRvcjtcbiAgICAgICAgICAgIGlmIChlZGl0b3IgJiYgZWRpdG9yLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5ld0NvbnRlbnQgPSBlZGl0b3IuZ2V0Q29udGVudCgpO1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIF90aGlzLnByb3BzLnZhbHVlICE9PSBuZXdDb250ZW50ICYmIF90aGlzLnByb3BzLnJvbGxiYWNrICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBzdGFydCBhIHRpbWVyIGFuZCByZXZlcnQgdG8gdGhlIHZhbHVlIGlmIG5vdCBhcHBsaWVkIGluIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5yb2xsYmFja1RpbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5yb2xsYmFja1RpbWVyID0gd2luZG93LnNldFRpbWVvdXQoX3RoaXMucm9sbGJhY2tDaGFuZ2UsIHR5cGVvZiBfdGhpcy5wcm9wcy5yb2xsYmFjayA9PT0gJ251bWJlcicgPyBfdGhpcy5wcm9wcy5yb2xsYmFjayA6IDIwMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5ld0NvbnRlbnQgIT09IF90aGlzLmN1cnJlbnRDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRDb250ZW50ID0gbmV3Q29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oX3RoaXMucHJvcHMub25FZGl0b3JDaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5vbkVkaXRvckNoYW5nZShuZXdDb250ZW50LCBlZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5oYW5kbGVFZGl0b3JDaGFuZ2VTcGVjaWFsID0gZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICAgICAgaWYgKGV2dC5rZXkgPT09ICdCYWNrc3BhY2UnIHx8IGV2dC5rZXkgPT09ICdEZWxldGUnKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaGFuZGxlRWRpdG9yQ2hhbmdlKGV2dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLmluaXRpYWxpc2UgPSBmdW5jdGlvbiAoYXR0ZW1wdHMpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgaWYgKGF0dGVtcHRzID09PSB2b2lkIDApIHsgYXR0ZW1wdHMgPSAwOyB9XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gX3RoaXMuZWxlbWVudFJlZi5jdXJyZW50O1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIEVkaXRvciBoYXMgYmVlbiB1bm1vdW50ZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNJbkRvYyh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBwcm9iYWJseSBzb21lb25lIHRyeWluZyB0byBoZWxwIGJ5IHJlbmRlcmluZyB1cyBvZmZzY3JlZW5cbiAgICAgICAgICAgICAgICAvLyBidXQgd2UgY2FuJ3QgZG8gdGhhdCBiZWNhdXNlIHRoZSBlZGl0b3IgaWZyYW1lIG11c3QgYmUgaW4gdGhlIGRvY3VtZW50XG4gICAgICAgICAgICAgICAgLy8gaW4gb3JkZXIgdG8gaGF2ZSBzdGF0ZVxuICAgICAgICAgICAgICAgIGlmIChhdHRlbXB0cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBwcm9iYWJseSBqdXN0IG5lZWQgdG8gd2FpdCBmb3IgdGhlIGN1cnJlbnQgZXZlbnRzIHRvIGJlIHByb2Nlc3NlZFxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmluaXRpYWxpc2UoMSk7IH0sIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRlbXB0cyA8IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0ZW4gc2Vjb25kcywgcG9sbGluZyBldmVyeSB0ZW50aCBvZiBhIHNlY29uZFxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmluaXRpYWxpc2UoYXR0ZW1wdHMgKyAxKTsgfSwgMTAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGdpdmUgdXAsIGF0IHRoaXMgcG9pbnQgaXQgc2VlbXMgdGhhdCBtb3JlIHBvbGxpbmcgaXMgdW5saWtlbHkgdG8gaGVscFxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RpbnltY2UgY2FuIG9ubHkgYmUgaW5pdGlhbGlzZWQgd2hlbiBpbiBhIGRvY3VtZW50Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB0aW55bWNlID0gZ2V0VGlueW1jZShfdGhpcy52aWV3KTtcbiAgICAgICAgICAgIGlmICghdGlueW1jZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGlueW1jZSBzaG91bGQgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIGdsb2JhbCBzY29wZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGZpbmFsSW5pdCA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBfdGhpcy5wcm9wcy5pbml0KSwgeyBzZWxlY3RvcjogdW5kZWZpbmVkLCB0YXJnZXQ6IHRhcmdldCwgcmVhZG9ubHk6IF90aGlzLnByb3BzLmRpc2FibGVkLCBpbmxpbmU6IF90aGlzLmlubGluZSwgcGx1Z2luczogbWVyZ2VQbHVnaW5zKChfYSA9IF90aGlzLnByb3BzLmluaXQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5wbHVnaW5zLCBfdGhpcy5wcm9wcy5wbHVnaW5zKSwgdG9vbGJhcjogKF9iID0gX3RoaXMucHJvcHMudG9vbGJhcikgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKF9jID0gX3RoaXMucHJvcHMuaW5pdCkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnRvb2xiYXIsIHNldHVwOiBmdW5jdGlvbiAoZWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVkaXRvciA9IGVkaXRvcjtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuYmluZEhhbmRsZXJzKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBydW5uaW5nIGluIGlubGluZSBtb2RlIHRoZSBlZGl0b3IgZ2V0cyB0aGUgaW5pdGlhbCB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBpbm5lckhUTUwgb2YgdGhlIGVsZW1lbnQgaXQgaXMgaW5pdGlhbGl6ZWQgb24uXG4gICAgICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIgd2UgZG9uJ3Qgd2FudCB0byB0YWtlIG9uIHRoZSByZXNwb25zaWJpbGl0eSBvZiBzYW5pdGl6aW5nXG4gICAgICAgICAgICAgICAgICAgIC8vIHRvIHJlbW92ZSBYU1MgaW4gdGhlIHJlYWN0IGludGVncmF0aW9uIHNvIHdlIGhhdmUgYSBjaGlja2VuIGFuZCBlZ2dcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJvYmxlbS4uLiBXZSBhdm9pZCBpdCBieSBzbmVha2luZyBpbiBhIHNldCBjb250ZW50IGJlZm9yZSB0aGUgZmlyc3RcbiAgICAgICAgICAgICAgICAgICAgLy8gXCJvZmZpY2lhbFwiIHNldENvbnRlbnQgYW5kIHVzaW5nIFRpbnlNQ0UgdG8gZG8gdGhlIHNhbml0aXphdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmlubGluZSAmJiAhaXNUZXh0YXJlYU9ySW5wdXQodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLm9uY2UoJ1Bvc3RSZW5kZXInLCBmdW5jdGlvbiAoX2V2dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5zZXRDb250ZW50KF90aGlzLmdldEluaXRpYWxWYWx1ZSgpLCB7IG5vX2V2ZW50czogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5pbml0ICYmIGlzRnVuY3Rpb24oX3RoaXMucHJvcHMuaW5pdC5zZXR1cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnByb3BzLmluaXQuc2V0dXAoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGluaXRfaW5zdGFuY2VfY2FsbGJhY2s6IGZ1bmN0aW9uIChlZGl0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGNoYW5nZXMgdGhhdCBoYXBwZW5lZCBzaW5jZSB0aW55bWNlLmluaXQoKSB3YXMgY2FsbGVkXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbml0aWFsVmFsdWUgPSBfdGhpcy5nZXRJbml0aWFsVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudENvbnRlbnQgPSAoX2EgPSBfdGhpcy5jdXJyZW50Q29udGVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZWRpdG9yLmdldENvbnRlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmN1cnJlbnRDb250ZW50ICE9PSBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRDb250ZW50ID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2FtZSBhcyByZXNldENvbnRlbnQgaW4gVGlueU1DRSA1XG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0Q29udGVudChpbml0aWFsVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLnVuZG9NYW5hZ2VyLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IudW5kb01hbmFnZXIuYWRkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0RGlydHkoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBkaXNhYmxlZCA9IChfYiA9IF90aGlzLnByb3BzLmRpc2FibGVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgc2V0TW9kZShfdGhpcy5lZGl0b3IsIGRpc2FibGVkID8gJ3JlYWRvbmx5JyA6ICdkZXNpZ24nKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlIGV4aXN0aW5nIGluaXRfaW5zdGFuY2VfY2FsbGJhY2sgaXMgY2FsbGVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5pbml0ICYmIGlzRnVuY3Rpb24oX3RoaXMucHJvcHMuaW5pdC5pbml0X2luc3RhbmNlX2NhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucHJvcHMuaW5pdC5pbml0X2luc3RhbmNlX2NhbGxiYWNrKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IH0pO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pbmxpbmUpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQuc3R5bGUudmlzaWJpbGl0eSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzVGV4dGFyZWFPcklucHV0KHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQudmFsdWUgPSBfdGhpcy5nZXRJbml0aWFsVmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRpbnltY2UuaW5pdChmaW5hbEluaXQpO1xuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5pZCA9IF90aGlzLnByb3BzLmlkIHx8IHV1aWQoJ3RpbnktcmVhY3QnKTtcbiAgICAgICAgX3RoaXMuZWxlbWVudFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgICAgICBfdGhpcy5pbmxpbmUgPSAoX2MgPSAoX2EgPSBfdGhpcy5wcm9wcy5pbmxpbmUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChfYiA9IF90aGlzLnByb3BzLmluaXQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pbmxpbmUpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGZhbHNlO1xuICAgICAgICBfdGhpcy5ib3VuZEhhbmRsZXJzID0ge307XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVkaXRvci5wcm90b3R5cGUsIFwidmlld1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLmVsZW1lbnRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHdpbmRvdztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEVkaXRvci5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gKHByZXZQcm9wcykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAodGhpcy5yb2xsYmFja1RpbWVyKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yb2xsYmFja1RpbWVyKTtcbiAgICAgICAgICAgIHRoaXMucm9sbGJhY2tUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lZGl0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuYmluZEhhbmRsZXJzKHByZXZQcm9wcyk7XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3IuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDb250ZW50ID0gKF9hID0gdGhpcy5jdXJyZW50Q29udGVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5lZGl0b3IuZ2V0Q29udGVudCgpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5pbml0aWFsVmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMucHJvcHMuaW5pdGlhbFZhbHVlICE9PSBwcmV2UHJvcHMuaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNhbWUgYXMgcmVzZXRDb250ZW50IGluIFRpbnlNQ0UgNVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50KHRoaXMucHJvcHMuaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IudW5kb01hbmFnZXIuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IudW5kb01hbmFnZXIuYWRkKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLnNldERpcnR5KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHRoaXMucHJvcHMudmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMucHJvcHMudmFsdWUgIT09IHRoaXMuY3VycmVudENvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2FsRWRpdG9yXzEgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxFZGl0b3JfMS51bmRvTWFuYWdlci50cmFuc2FjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmxpbmUgZWRpdG9ycyBncmFiIGZvY3VzIHdoZW4gcmVzdG9yaW5nIHNlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gd2UgZG9uJ3QgdHJ5IHRvIGtlZXAgdGhlaXIgc2VsZWN0aW9uIHVubGVzcyB0aGV5IGFyZSBjdXJyZW50bHkgZm9jdXNlZFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnNvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX3RoaXMuaW5saW5lIHx8IGxvY2FsRWRpdG9yXzEuaGFzRm9jdXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldEJvb2ttYXJrIHRocm93cyBleGNlcHRpb25zIHdoZW4gdGhlIGVkaXRvciBoYXMgbm90IGJlZW4gZm9jdXNlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb3NzaWJseSBvbmx5IGluIGlubGluZSBtb2RlIGJ1dCBJJ20gbm90IHRha2luZyBjaGFuY2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IGxvY2FsRWRpdG9yXzEuc2VsZWN0aW9uLmdldEJvb2ttYXJrKDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlQ3Vyc29yID0gX3RoaXMudmFsdWVDdXJzb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbEVkaXRvcl8xLnNldENvbnRlbnQoX3RoaXMucHJvcHMudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5pbmxpbmUgfHwgbG9jYWxFZGl0b3JfMS5oYXNGb2N1cygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IFtjdXJzb3IsIHZhbHVlQ3Vyc29yXTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJvb2ttYXJrID0gX2FbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9va21hcmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxFZGl0b3JfMS5zZWxlY3Rpb24ubW92ZVRvQm9va21hcmsoYm9va21hcmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnZhbHVlQ3Vyc29yID0gYm9va21hcms7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuZGlzYWJsZWQgIT09IHByZXZQcm9wcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGlzYWJsZWQgPSAoX2IgPSB0aGlzLnByb3BzLmRpc2FibGVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgc2V0TW9kZSh0aGlzLmVkaXRvciwgZGlzYWJsZWQgPyAncmVhZG9ubHknIDogJ2Rlc2lnbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgRWRpdG9yLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgaWYgKGdldFRpbnltY2UodGhpcy52aWV3KSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLnRpbnltY2VTY3JpcHRTcmMpICYmIHRoaXMucHJvcHMudGlueW1jZVNjcmlwdFNyYy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMucHJvcHMpLm9uU2NyaXB0c0xvYWRFcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIG5ldyBFcnJvcignTm8gYHRpbnltY2VgIGdsb2JhbCBpcyBwcmVzZW50IGJ1dCB0aGUgYHRpbnltY2VTY3JpcHRTcmNgIHByb3Agd2FzIGFuIGVtcHR5IGFycmF5LicpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoX2MgPSB0aGlzLmVsZW1lbnRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLm93bmVyRG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHZhciBzdWNjZXNzSGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgICAgIChfYiA9IChfYSA9IF90aGlzLnByb3BzKS5vblNjcmlwdHNMb2FkKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgICAgICAgICAgICAgX3RoaXMuaW5pdGlhbGlzZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBlcnJvckhhbmRsZXIgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgICAgICAoX2IgPSAoX2EgPSBfdGhpcy5wcm9wcykub25TY3JpcHRzTG9hZEVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZXJyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBTY3JpcHRMb2FkZXIubG9hZExpc3QodGhpcy5lbGVtZW50UmVmLmN1cnJlbnQub3duZXJEb2N1bWVudCwgdGhpcy5nZXRTY3JpcHRTb3VyY2VzKCksIChfZSA9IChfZCA9IHRoaXMucHJvcHMuc2NyaXB0TG9hZGluZykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmRlbGF5KSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiAwLCBzdWNjZXNzSGFuZGxlciwgZXJyb3JIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRWRpdG9yLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICBpZiAoZWRpdG9yKSB7XG4gICAgICAgICAgICBlZGl0b3Iub2ZmKHRoaXMuY2hhbmdlRXZlbnRzKCksIHRoaXMuaGFuZGxlRWRpdG9yQ2hhbmdlKTtcbiAgICAgICAgICAgIGVkaXRvci5vZmYodGhpcy5iZWZvcmVJbnB1dEV2ZW50KCksIHRoaXMuaGFuZGxlQmVmb3JlSW5wdXQpO1xuICAgICAgICAgICAgZWRpdG9yLm9mZigna2V5cHJlc3MnLCB0aGlzLmhhbmRsZUVkaXRvckNoYW5nZVNwZWNpYWwpO1xuICAgICAgICAgICAgZWRpdG9yLm9mZigna2V5ZG93bicsIHRoaXMuaGFuZGxlQmVmb3JlSW5wdXRTcGVjaWFsKTtcbiAgICAgICAgICAgIGVkaXRvci5vZmYoJ05ld0Jsb2NrJywgdGhpcy5oYW5kbGVFZGl0b3JDaGFuZ2UpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5ib3VuZEhhbmRsZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudE5hbWUpIHtcbiAgICAgICAgICAgICAgICBlZGl0b3Iub2ZmKGV2ZW50TmFtZSwgX3RoaXMuYm91bmRIYW5kbGVyc1tldmVudE5hbWVdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5ib3VuZEhhbmRsZXJzID0ge307XG4gICAgICAgICAgICBlZGl0b3IucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLmVkaXRvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRWRpdG9yLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubGluZSA/IHRoaXMucmVuZGVySW5saW5lKCkgOiB0aGlzLnJlbmRlcklmcmFtZSgpO1xuICAgIH07XG4gICAgRWRpdG9yLnByb3RvdHlwZS5jaGFuZ2VFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICB2YXIgaXNJRSA9IChfYyA9IChfYiA9IChfYSA9IGdldFRpbnltY2UodGhpcy52aWV3KSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLkVudikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmJyb3dzZXIpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pc0lFKCk7XG4gICAgICAgIHJldHVybiAoaXNJRVxuICAgICAgICAgICAgPyAnY2hhbmdlIGtleXVwIGNvbXBvc2l0aW9uZW5kIHNldGNvbnRlbnQgQ29tbWVudENoYW5nZSdcbiAgICAgICAgICAgIDogJ2NoYW5nZSBpbnB1dCBjb21wb3NpdGlvbmVuZCBzZXRjb250ZW50IENvbW1lbnRDaGFuZ2UnKTtcbiAgICB9O1xuICAgIEVkaXRvci5wcm90b3R5cGUuYmVmb3JlSW5wdXRFdmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGlzQmVmb3JlSW5wdXRFdmVudEF2YWlsYWJsZSgpID8gJ2JlZm9yZWlucHV0IFNlbGVjdGlvbkNoYW5nZScgOiAnU2VsZWN0aW9uQ2hhbmdlJztcbiAgICB9O1xuICAgIEVkaXRvci5wcm90b3R5cGUucmVuZGVySW5saW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLnByb3BzLnRhZ05hbWUsIHRhZ05hbWUgPSBfYSA9PT0gdm9pZCAwID8gJ2RpdicgOiBfYTtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSwge1xuICAgICAgICAgICAgcmVmOiB0aGlzLmVsZW1lbnRSZWYsXG4gICAgICAgICAgICBpZDogdGhpcy5pZFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEVkaXRvci5wcm90b3R5cGUucmVuZGVySWZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnLCB7XG4gICAgICAgICAgICByZWY6IHRoaXMuZWxlbWVudFJlZixcbiAgICAgICAgICAgIHN0eWxlOiB7IHZpc2liaWxpdHk6ICdoaWRkZW4nIH0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLnByb3BzLnRleHRhcmVhTmFtZSxcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgRWRpdG9yLnByb3RvdHlwZS5nZXRTY3JpcHRTb3VyY2VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB2YXIgYXN5bmMgPSAoX2EgPSB0aGlzLnByb3BzLnNjcmlwdExvYWRpbmcpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hc3luYztcbiAgICAgICAgdmFyIGRlZmVyID0gKF9iID0gdGhpcy5wcm9wcy5zY3JpcHRMb2FkaW5nKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZGVmZXI7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnRpbnltY2VTY3JpcHRTcmMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnRpbnltY2VTY3JpcHRTcmMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFt7IHNyYzogdGhpcy5wcm9wcy50aW55bWNlU2NyaXB0U3JjLCBhc3luYzogYXN5bmMsIGRlZmVyOiBkZWZlciB9XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG11bHRpcGxlIHNjcmlwdHMgY2FuIGJlIHNwZWNpZmllZCB3aGljaCBhbGxvd3MgZm9yIGh5YnJpZCBtb2RlXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy50aW55bWNlU2NyaXB0U3JjLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYXN5bmMgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3IgbXVsdGlwbGUgaXRlbXMgdW5sZXNzXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZXkgYXJlIG5vdCBkZXBlbmRlbnQgKHdoaWNoIHdpbGwgYmUgdW5saWtlbHkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHNyYzogaXRlbSwgYXN5bmM6IGFzeW5jLCBkZWZlcjogZGVmZXIgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZhbGxiYWNrIHRvIHRoZSBjbG91ZCB3aGVuIHRoZSB0aW55bWNlU2NyaXB0U3JjIGlzIG5vdCBzcGVjaWZpZWRcbiAgICAgICAgdmFyIGNoYW5uZWwgPSB0aGlzLnByb3BzLmNsb3VkQ2hhbm5lbDtcbiAgICAgICAgdmFyIGFwaUtleSA9IHRoaXMucHJvcHMuYXBpS2V5ID8gdGhpcy5wcm9wcy5hcGlLZXkgOiAnbm8tYXBpLWtleSc7XG4gICAgICAgIHZhciBjbG91ZFRpbnlKcyA9IFwiaHR0cHM6Ly9jZG4udGlueS5jbG91ZC8xL1wiLmNvbmNhdChhcGlLZXksIFwiL3RpbnltY2UvXCIpLmNvbmNhdChjaGFubmVsLCBcIi90aW55bWNlLm1pbi5qc1wiKTtcbiAgICAgICAgcmV0dXJuIFt7IHNyYzogY2xvdWRUaW55SnMsIGFzeW5jOiBhc3luYywgZGVmZXI6IGRlZmVyIH1dO1xuICAgIH07XG4gICAgRWRpdG9yLnByb3RvdHlwZS5nZXRJbml0aWFsVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5pbml0aWFsVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5pbml0aWFsVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHRoaXMucHJvcHMudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH07XG4gICAgRWRpdG9yLnByb3RvdHlwZS5iaW5kSGFuZGxlcnMgPSBmdW5jdGlvbiAocHJldlByb3BzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLmVkaXRvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0eXBlc2NyaXB0IGNob2tlcyB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgdHlwZSBvZiB0aGUgbG9va3VwIGZ1bmN0aW9uXG4gICAgICAgICAgICBjb25maWdIYW5kbGVycyh0aGlzLmVkaXRvciwgcHJldlByb3BzLCB0aGlzLnByb3BzLCB0aGlzLmJvdW5kSGFuZGxlcnMsIGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIF90aGlzLnByb3BzW2tleV07IH0pO1xuICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2Ugc2hvdWxkIG1vbml0b3IgZWRpdG9yIGNoYW5nZXNcbiAgICAgICAgICAgIHZhciBpc1ZhbHVlQ29udHJvbGxlZCA9IGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLm9uRWRpdG9yQ2hhbmdlICE9PSB1bmRlZmluZWQgfHwgcC52YWx1ZSAhPT0gdW5kZWZpbmVkOyB9O1xuICAgICAgICAgICAgdmFyIHdhc0NvbnRyb2xsZWQgPSBpc1ZhbHVlQ29udHJvbGxlZChwcmV2UHJvcHMpO1xuICAgICAgICAgICAgdmFyIG5vd0NvbnRyb2xsZWQgPSBpc1ZhbHVlQ29udHJvbGxlZCh0aGlzLnByb3BzKTtcbiAgICAgICAgICAgIGlmICghd2FzQ29udHJvbGxlZCAmJiBub3dDb250cm9sbGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iub24odGhpcy5jaGFuZ2VFdmVudHMoKSwgdGhpcy5oYW5kbGVFZGl0b3JDaGFuZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLm9uKHRoaXMuYmVmb3JlSW5wdXRFdmVudCgpLCB0aGlzLmhhbmRsZUJlZm9yZUlucHV0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5vbigna2V5ZG93bicsIHRoaXMuaGFuZGxlQmVmb3JlSW5wdXRTcGVjaWFsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5vbigna2V5dXAnLCB0aGlzLmhhbmRsZUVkaXRvckNoYW5nZVNwZWNpYWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLm9uKCdOZXdCbG9jaycsIHRoaXMuaGFuZGxlRWRpdG9yQ2hhbmdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHdhc0NvbnRyb2xsZWQgJiYgIW5vd0NvbnRyb2xsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5vZmYodGhpcy5jaGFuZ2VFdmVudHMoKSwgdGhpcy5oYW5kbGVFZGl0b3JDaGFuZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLm9mZih0aGlzLmJlZm9yZUlucHV0RXZlbnQoKSwgdGhpcy5oYW5kbGVCZWZvcmVJbnB1dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iub2ZmKCdrZXlkb3duJywgdGhpcy5oYW5kbGVCZWZvcmVJbnB1dFNwZWNpYWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLm9mZigna2V5dXAnLCB0aGlzLmhhbmRsZUVkaXRvckNoYW5nZVNwZWNpYWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLm9mZignTmV3QmxvY2snLCB0aGlzLmhhbmRsZUVkaXRvckNoYW5nZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEVkaXRvci5wcm9wVHlwZXMgPSBFZGl0b3JQcm9wVHlwZXM7XG4gICAgRWRpdG9yLmRlZmF1bHRQcm9wcyA9IHtcbiAgICAgICAgY2xvdWRDaGFubmVsOiAnNidcbiAgICB9O1xuICAgIHJldHVybiBFZGl0b3I7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0IHsgRWRpdG9yIH07XG4iLCJpbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgeyBUZXh0IH0gZnJvbSBcIi4uLy4uL2F0b21zL3RleHQvaW5kZXguanNcIjtcbmltcG9ydCB7IGNzc0NsYXNzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2luZGV4LmpzXCI7XG5leHBvcnQgY29uc3QgRWRpdG9yV3JhcHBlciA9IHN0eWxlZChUZXh0KWBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuXG4gICYgLnRveC10aW55bWNlIHtcbiAgICBwYWRkaW5nOiA4cHggNHB4O1xuICAgIGJvcmRlci13aWR0aDogMS41cHg7XG4gIH1cbmA7XG5FZGl0b3JXcmFwcGVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiBjc3NDbGFzcygnRWRpdG9yV3JhcHBlcicpXG59OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFZGl0b3IgfSBmcm9tICdAdGlueW1jZS90aW55bWNlLXJlYWN0JztcbmltcG9ydCB7IEVkaXRvcldyYXBwZXIgfSBmcm9tIFwiLi90aW55bWNlLWVkaXRvci5zdHlsZWQuanNcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2VcblxuY29uc3QgVGlueU1DRSA9IHByb3BzID0+IHtcbiAgY29uc3QgZWRpdG9yUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCB7XG4gICAgb25DaGFuZ2UsXG4gICAgdmFsdWUsXG4gICAgb3B0aW9ucyA9IHt9XG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIHBsdWdpbnMgPSBudWxsLFxuICAgIHRvb2xiYXIgPSBudWxsLFxuICAgIGluaXQgPSBudWxsLFxuICAgIGNvbnRlbnRTdHlsZSA9IG51bGwsXG4gICAgaGVpZ2h0ID0gbnVsbCxcbiAgICAuLi5vdGhlclByb3BzXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBoYW5kbGVVcGRhdGUgPSB1c2VDYWxsYmFjayhuZXdWYWx1ZSA9PiB7XG4gICAgb25DaGFuZ2UobmV3VmFsdWUpO1xuICB9LCBbXSk7XG4gIGNvbnN0IGhhbmRsZUluaXQgPSAoZXZ0LCBlZGl0b3IpID0+IHtcbiAgICBlZGl0b3JSZWYuY3VycmVudCA9IGVkaXRvcjtcbiAgfTtcbiAgY29uc3QgZGVmYXVsdFBsdWdpbnMgPSBbJ2ltYWdlJywgJ2NvZGUnLCAndGFibGUnLCAnbGluaycsICdtZWRpYScsICdjb2Rlc2FtcGxlJ107XG4gIGNvbnN0IGRlZmF1bHRUb29sYmFyID0gWyd1bmRvIHJlZG8gZm9ybWF0c2VsZWN0IGJvbGQgaXRhbGljIGJhY2tvbG9yIGFsaWdubGVmdCBhbGlnbmNlbnRlciBhbGlnbnJpZ2h0IGFsaWduanVzdGlmeSBidWxsaXN0IG51bWxpc3Qgb3V0ZGVudCBpbmRlbnQgcmVtb3ZlZm9ybWF0IGxpbmsgaW1hZ2UnXTtcbiAgY29uc3QgZGVmYXVsdEluaXQgPSB7XG4gICAgaGVpZ2h0OiBoZWlnaHQgIT09IG51bGwgPyBoZWlnaHQgOiA1MDAsXG4gICAgbWVudWJhcjogdHJ1ZSxcbiAgICBwbHVnaW5zOiBwbHVnaW5zICE9PSBudWxsID8gcGx1Z2lucyA6IGRlZmF1bHRQbHVnaW5zLFxuICAgIHRvb2xiYXI6IHRvb2xiYXIgIT09IG51bGwgPyB0b29sYmFyIDogZGVmYXVsdFRvb2xiYXIsXG4gICAgZmlsZV9waWNrZXJfdHlwZXM6ICdmaWxlIGltYWdlIG1lZGlhJyxcbiAgICBmaWxlX3BpY2tlcl9jYWxsYmFjayhjYiwgdmFsdWUsIG1ldGEpIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdmaWxlJyk7XG4gICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2FjY2VwdCcsICdpbWFnZS8qJyk7XG5cbiAgICAgIC8qXG4gICAgICAgIE5vdGU6IEluIG1vZGVybiBicm93c2VycyBpbnB1dFt0eXBlPVwiZmlsZVwiXSBpcyBmdW5jdGlvbmFsIHdpdGhvdXRcbiAgICAgICAgZXZlbiBhZGRpbmcgaXQgdG8gdGhlIERPTSwgYnV0IHRoYXQgbWlnaHQgbm90IGJlIHRoZSBjYXNlIGluIHNvbWUgb2xkZXJcbiAgICAgICAgb3IgcXVpcmt5IGJyb3dzZXJzIGxpa2UgSUUsIHNvIHlvdSBtaWdodCB3YW50IHRvIGFkZCBpdCB0byB0aGUgRE9NXG4gICAgICAgIGp1c3QgaW4gY2FzZSwgYW5kIHZpc3VhbGx5IGhpZGUgaXQuIEFuZCBkbyBub3QgZm9yZ2V0IGRvIHJlbW92ZSBpdFxuICAgICAgICBvbmNlIHlvdSBkbyBub3QgbmVlZCBpdCBhbnltb3JlLlxuICAgICAgKi9cblxuICAgICAgaW5wdXQub25jaGFuZ2UgPSBmdW5jdGlvbiBmcE9uQ2hhbmdlKGUpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLXRoaXMtaW4tc2ZjXG4gICAgICAgIGNvbnN0IGZpbGUgPSBlLnRhcmdldD8uZmlsZXM/LlswXTtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uIGZwT25Mb2FkKCkge1xuICAgICAgICAgIC8qXG4gICAgICAgICAgICBOb3RlOiBOb3cgd2UgbmVlZCB0byByZWdpc3RlciB0aGUgYmxvYiBpbiBUaW55TUNFcyBpbWFnZSBibG9iXG4gICAgICAgICAgICByZWdpc3RyeS4gSW4gdGhlIG5leHQgcmVsZWFzZSB0aGlzIHBhcnQgaG9wZWZ1bGx5IHdvbid0IGJlXG4gICAgICAgICAgICBuZWNlc3NhcnksIGFzIHdlIGFyZSBsb29raW5nIHRvIGhhbmRsZSBpdCBpbnRlcm5hbGx5LlxuICAgICAgICAgICovXG4gICAgICAgICAgY29uc3QgaWQgPSBgYmxvYmlkJHtuZXcgRGF0ZSgpLmdldFRpbWUoKX1gO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGJsb2JDYWNoZVxuICAgICAgICAgIH0gPSB3aW5kb3cudGlueW1jZT8uYWN0aXZlRWRpdG9yPy5lZGl0b3JVcGxvYWQgPz8ge307XG4gICAgICAgICAgY29uc3QgYmFzZTY0ID0gcmVhZGVyLnJlc3VsdD8uc3BsaXQ/LignLCcpPy5bMV07XG4gICAgICAgICAgY29uc3QgYmxvYkluZm8gPSBibG9iQ2FjaGUuY3JlYXRlKGlkLCBmaWxlLCBiYXNlNjQpO1xuICAgICAgICAgIGJsb2JDYWNoZS5hZGQoYmxvYkluZm8pO1xuXG4gICAgICAgICAgLyogY2FsbCB0aGUgY2FsbGJhY2sgYW5kIHBvcHVsYXRlIHRoZSBUaXRsZSBmaWVsZCB3aXRoIHRoZSBmaWxlIG5hbWUgKi9cbiAgICAgICAgICBjYihibG9iSW5mby5ibG9iVXJpKCksIHtcbiAgICAgICAgICAgIHRpdGxlOiBmaWxlLm5hbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgICB9O1xuICAgICAgaW5wdXQuY2xpY2soKTtcbiAgICB9LFxuICAgIGNvbnRlbnRfc3R5bGU6IGNvbnRlbnRTdHlsZSAhPT0gbnVsbCA/IGNvbnRlbnRTdHlsZSA6ICdib2R5IHsgZm9udC1mYW1pbHk6SGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZToxNHB4IH0nXG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChFZGl0b3JXcmFwcGVyLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChFZGl0b3IsIF9leHRlbmRzKHtcbiAgICB0aW55bWNlU2NyaXB0U3JjOiBcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vdGlueW1jZUA2LjguMi90aW55bWNlLm1pbi5qc1wiLFxuICAgIG9uSW5pdDogaGFuZGxlSW5pdCxcbiAgICBvbkVkaXRvckNoYW5nZTogaGFuZGxlVXBkYXRlLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBpbml0OiBpbml0ICE9PSBudWxsID8gaW5pdCA6IGRlZmF1bHRJbml0XG4gIH0sIG90aGVyUHJvcHMpKSk7XG59O1xuZXhwb3J0IHsgVGlueU1DRSB9O1xuZXhwb3J0IGRlZmF1bHQgVGlueU1DRTsiLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHVuZGVmaW5lZGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLm5vb3ApO1xuICogLy8gPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICovXG5mdW5jdGlvbiBub29wKCkge1xuICAvLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5vb3A7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgX3R5cGVvZihvYmopO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7XG4gIGlmIChfdHlwZW9mKGlucHV0KSAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0O1xuICB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwiaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gXCIuL2RlZmluZVByb3BlcnR5LmpzXCI7XG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTtcbiAgICBpICUgMiA/IG93bktleXMoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgdmFyIF9pID0gbnVsbCA9PSBhcnIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IF9pKSB7XG4gICAgdmFyIF9zLFxuICAgICAgX2UsXG4gICAgICBfeCxcbiAgICAgIF9yLFxuICAgICAgX2FyciA9IFtdLFxuICAgICAgX24gPSAhMCxcbiAgICAgIF9kID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChfeCA9IChfaSA9IF9pLmNhbGwoYXJyKSkubmV4dCwgMCA9PT0gaSkge1xuICAgICAgICBpZiAoT2JqZWN0KF9pKSAhPT0gX2kpIHJldHVybjtcbiAgICAgICAgX24gPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShfbiA9IChfcyA9IF94LmNhbGwoX2kpKS5kb25lKSAmJiAoX2Fyci5wdXNoKF9zLnZhbHVlKSwgX2Fyci5sZW5ndGggIT09IGkpOyBfbiA9ICEwKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9kID0gITAsIF9lID0gZXJyO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIV9uICYmIG51bGwgIT0gX2lbXCJyZXR1cm5cIl0gJiYgKF9yID0gX2lbXCJyZXR1cm5cIl0oKSwgT2JqZWN0KF9yKSAhPT0gX3IpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX2FycjtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufSIsImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXlMaW1pdCBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVSZXN0IGZyb20gXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufSIsImltcG9ydCBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCIuL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTtcbiAgdmFyIGtleSwgaTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTtcbiAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn0iLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyJztcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5JztcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXMnO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuXG52YXIgX2V4Y2x1ZGVkID0gW1wiZGVmYXVsdElucHV0VmFsdWVcIiwgXCJkZWZhdWx0TWVudUlzT3BlblwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImlucHV0VmFsdWVcIiwgXCJtZW51SXNPcGVuXCIsIFwib25DaGFuZ2VcIiwgXCJvbklucHV0Q2hhbmdlXCIsIFwib25NZW51Q2xvc2VcIiwgXCJvbk1lbnVPcGVuXCIsIFwidmFsdWVcIl07XG5mdW5jdGlvbiB1c2VTdGF0ZU1hbmFnZXIoX3JlZikge1xuICB2YXIgX3JlZiRkZWZhdWx0SW5wdXRWYWx1ID0gX3JlZi5kZWZhdWx0SW5wdXRWYWx1ZSxcbiAgICBkZWZhdWx0SW5wdXRWYWx1ZSA9IF9yZWYkZGVmYXVsdElucHV0VmFsdSA9PT0gdm9pZCAwID8gJycgOiBfcmVmJGRlZmF1bHRJbnB1dFZhbHUsXG4gICAgX3JlZiRkZWZhdWx0TWVudUlzT3BlID0gX3JlZi5kZWZhdWx0TWVudUlzT3BlbixcbiAgICBkZWZhdWx0TWVudUlzT3BlbiA9IF9yZWYkZGVmYXVsdE1lbnVJc09wZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGRlZmF1bHRNZW51SXNPcGUsXG4gICAgX3JlZiRkZWZhdWx0VmFsdWUgPSBfcmVmLmRlZmF1bHRWYWx1ZSxcbiAgICBkZWZhdWx0VmFsdWUgPSBfcmVmJGRlZmF1bHRWYWx1ZSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYkZGVmYXVsdFZhbHVlLFxuICAgIHByb3BzSW5wdXRWYWx1ZSA9IF9yZWYuaW5wdXRWYWx1ZSxcbiAgICBwcm9wc01lbnVJc09wZW4gPSBfcmVmLm1lbnVJc09wZW4sXG4gICAgcHJvcHNPbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXG4gICAgcHJvcHNPbklucHV0Q2hhbmdlID0gX3JlZi5vbklucHV0Q2hhbmdlLFxuICAgIHByb3BzT25NZW51Q2xvc2UgPSBfcmVmLm9uTWVudUNsb3NlLFxuICAgIHByb3BzT25NZW51T3BlbiA9IF9yZWYub25NZW51T3BlbixcbiAgICBwcm9wc1ZhbHVlID0gX3JlZi52YWx1ZSxcbiAgICByZXN0U2VsZWN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKHByb3BzSW5wdXRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gcHJvcHNJbnB1dFZhbHVlIDogZGVmYXVsdElucHV0VmFsdWUpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIHN0YXRlSW5wdXRWYWx1ZSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0U3RhdGVJbnB1dFZhbHVlID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShwcm9wc01lbnVJc09wZW4gIT09IHVuZGVmaW5lZCA/IHByb3BzTWVudUlzT3BlbiA6IGRlZmF1bHRNZW51SXNPcGVuKSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgc3RhdGVNZW51SXNPcGVuID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRTdGF0ZU1lbnVJc09wZW4gPSBfdXNlU3RhdGU0WzFdO1xuICB2YXIgX3VzZVN0YXRlNSA9IHVzZVN0YXRlKHByb3BzVmFsdWUgIT09IHVuZGVmaW5lZCA/IHByb3BzVmFsdWUgOiBkZWZhdWx0VmFsdWUpLFxuICAgIF91c2VTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU1LCAyKSxcbiAgICBzdGF0ZVZhbHVlID0gX3VzZVN0YXRlNlswXSxcbiAgICBzZXRTdGF0ZVZhbHVlID0gX3VzZVN0YXRlNlsxXTtcbiAgdmFyIG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHZhbHVlLCBhY3Rpb25NZXRhKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wc09uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9wc09uQ2hhbmdlKHZhbHVlLCBhY3Rpb25NZXRhKTtcbiAgICB9XG4gICAgc2V0U3RhdGVWYWx1ZSh2YWx1ZSk7XG4gIH0sIFtwcm9wc09uQ2hhbmdlXSk7XG4gIHZhciBvbklucHV0Q2hhbmdlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHZhbHVlLCBhY3Rpb25NZXRhKSB7XG4gICAgdmFyIG5ld1ZhbHVlO1xuICAgIGlmICh0eXBlb2YgcHJvcHNPbklucHV0Q2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBuZXdWYWx1ZSA9IHByb3BzT25JbnB1dENoYW5nZSh2YWx1ZSwgYWN0aW9uTWV0YSk7XG4gICAgfVxuICAgIHNldFN0YXRlSW5wdXRWYWx1ZShuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkID8gbmV3VmFsdWUgOiB2YWx1ZSk7XG4gIH0sIFtwcm9wc09uSW5wdXRDaGFuZ2VdKTtcbiAgdmFyIG9uTWVudU9wZW4gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wc09uTWVudU9wZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb3BzT25NZW51T3BlbigpO1xuICAgIH1cbiAgICBzZXRTdGF0ZU1lbnVJc09wZW4odHJ1ZSk7XG4gIH0sIFtwcm9wc09uTWVudU9wZW5dKTtcbiAgdmFyIG9uTWVudUNsb3NlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgcHJvcHNPbk1lbnVDbG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcHNPbk1lbnVDbG9zZSgpO1xuICAgIH1cbiAgICBzZXRTdGF0ZU1lbnVJc09wZW4oZmFsc2UpO1xuICB9LCBbcHJvcHNPbk1lbnVDbG9zZV0pO1xuICB2YXIgaW5wdXRWYWx1ZSA9IHByb3BzSW5wdXRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gcHJvcHNJbnB1dFZhbHVlIDogc3RhdGVJbnB1dFZhbHVlO1xuICB2YXIgbWVudUlzT3BlbiA9IHByb3BzTWVudUlzT3BlbiAhPT0gdW5kZWZpbmVkID8gcHJvcHNNZW51SXNPcGVuIDogc3RhdGVNZW51SXNPcGVuO1xuICB2YXIgdmFsdWUgPSBwcm9wc1ZhbHVlICE9PSB1bmRlZmluZWQgPyBwcm9wc1ZhbHVlIDogc3RhdGVWYWx1ZTtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdFNlbGVjdFByb3BzKSwge30sIHtcbiAgICBpbnB1dFZhbHVlOiBpbnB1dFZhbHVlLFxuICAgIG1lbnVJc09wZW46IG1lbnVJc09wZW4sXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgIG9uSW5wdXRDaGFuZ2U6IG9uSW5wdXRDaGFuZ2UsXG4gICAgb25NZW51Q2xvc2U6IG9uTWVudUNsb3NlLFxuICAgIG9uTWVudU9wZW46IG9uTWVudU9wZW4sXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5leHBvcnQgeyB1c2VTdGF0ZU1hbmFnZXIgYXMgdSB9O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn0iLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCB0b1Byb3BlcnR5S2V5KGRlc2NyaXB0b3Iua2V5KSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3ViQ2xhc3MsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufSIsImltcG9ydCBnZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCBmcm9tIFwiLi9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanNcIjtcbmltcG9ydCBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIGZyb20gXCIuL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7XG4gIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICB2YXIgU3VwZXIgPSBnZXRQcm90b3R5cGVPZihEZXJpdmVkKSxcbiAgICAgIHJlc3VsdDtcbiAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgdmFyIE5ld1RhcmdldCA9IGdldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTtcbiAgfTtcbn0iLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwiaW1wb3J0IGFycmF5V2l0aG91dEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVTcHJlYWQgZnJvbSBcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufSIsIi8qXG5cbkJhc2VkIG9mZiBnbGFtb3IncyBTdHlsZVNoZWV0LCB0aGFua3MgU3VuaWwg4p2k77iPXG5cbmhpZ2ggcGVyZm9ybWFuY2UgU3R5bGVTaGVldCBmb3IgY3NzLWluLWpzIHN5c3RlbXNcblxuLSB1c2VzIG11bHRpcGxlIHN0eWxlIHRhZ3MgYmVoaW5kIHRoZSBzY2VuZXMgZm9yIG1pbGxpb25zIG9mIHJ1bGVzXG4tIHVzZXMgYGluc2VydFJ1bGVgIGZvciBhcHBlbmRpbmcgaW4gcHJvZHVjdGlvbiBmb3IgKm11Y2gqIGZhc3RlciBwZXJmb3JtYW5jZVxuXG4vLyB1c2FnZVxuXG5pbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnXG5cbmxldCBzdHlsZVNoZWV0ID0gbmV3IFN0eWxlU2hlZXQoeyBrZXk6ICcnLCBjb250YWluZXI6IGRvY3VtZW50LmhlYWQgfSlcblxuc3R5bGVTaGVldC5pbnNlcnQoJyNib3ggeyBib3JkZXI6IDFweCBzb2xpZCByZWQ7IH0nKVxuLSBhcHBlbmRzIGEgY3NzIHJ1bGUgaW50byB0aGUgc3R5bGVzaGVldFxuXG5zdHlsZVNoZWV0LmZsdXNoKClcbi0gZW1wdGllcyB0aGUgc3R5bGVzaGVldCBvZiBhbGwgaXRzIGNvbnRlbnRzXG5cbiovXG4vLyAkRmxvd0ZpeE1lXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICByZXR1cm4gdGFnLnNoZWV0O1xuICB9IC8vIHRoaXMgd2VpcmRuZXNzIGJyb3VnaHQgdG8geW91IGJ5IGZpcmVmb3hcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGUgPT09IHRhZykge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgcmV0dXJuIGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvLyBVc2luZyBOb2RlIGluc3RlYWQgb2YgSFRNTEVsZW1lbnQgc2luY2UgY29udGFpbmVyIG1heSBiZSBhIFNoYWRvd1Jvb3RcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2luc2VydFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmIChfdGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoX3RoaXMuaW5zZXJ0aW9uUG9pbnQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5pbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcmVwZW5kKSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuYmVmb3JlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSBfdGhpcy50YWdzW190aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFnLCBiZWZvcmUpO1xuXG4gICAgICBfdGhpcy50YWdzLnB1c2godGFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nIDogb3B0aW9ucy5zcGVlZHk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICAgIHRoaXMubm9uY2UgPSBvcHRpb25zLm5vbmNlOyAvLyBrZXkgaXMgdGhlIHZhbHVlIG9mIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlLCBpdCdzIHVzZWQgdG8gaWRlbnRpZnkgZGlmZmVyZW50IHNoZWV0c1xuXG4gICAgdGhpcy5rZXkgPSBvcHRpb25zLmtleTtcbiAgICB0aGlzLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgIHRoaXMucHJlcGVuZCA9IG9wdGlvbnMucHJlcGVuZDtcbiAgICB0aGlzLmluc2VydGlvblBvaW50ID0gb3B0aW9ucy5pbnNlcnRpb25Qb2ludDtcbiAgICB0aGlzLmJlZm9yZSA9IG51bGw7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3R5bGVTaGVldC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmh5ZHJhdGUgPSBmdW5jdGlvbiBoeWRyYXRlKG5vZGVzKSB7XG4gICAgbm9kZXMuZm9yRWFjaCh0aGlzLl9pbnNlcnRUYWcpO1xuICB9O1xuXG4gIF9wcm90by5pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgIC8vIHRoZSBtYXggbGVuZ3RoIGlzIGhvdyBtYW55IHJ1bGVzIHdlIGhhdmUgcGVyIHN0eWxlIHRhZywgaXQncyA2NTAwMCBpbiBzcGVlZHkgbW9kZVxuICAgIC8vIGl0J3MgMSBpbiBkZXYgYmVjYXVzZSB3ZSBpbnNlcnQgc291cmNlIG1hcHMgdGhhdCBtYXAgYSBzaW5nbGUgcnVsZSB0byBhIGxvY2F0aW9uXG4gICAgLy8gYW5kIHlvdSBjYW4gb25seSBoYXZlIG9uZSBzb3VyY2UgbWFwIHBlciBzdHlsZSB0YWdcbiAgICBpZiAodGhpcy5jdHIgJSAodGhpcy5pc1NwZWVkeSA/IDY1MDAwIDogMSkgPT09IDApIHtcbiAgICAgIHRoaXMuX2luc2VydFRhZyhjcmVhdGVTdHlsZUVsZW1lbnQodGhpcykpO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSB0aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBpc0ltcG9ydFJ1bGUgPSBydWxlLmNoYXJDb2RlQXQoMCkgPT09IDY0ICYmIHJ1bGUuY2hhckNvZGVBdCgxKSA9PT0gMTA1O1xuXG4gICAgICBpZiAoaXNJbXBvcnRSdWxlICYmIHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlKSB7XG4gICAgICAgIC8vIHRoaXMgd291bGQgb25seSBjYXVzZSBwcm9ibGVtIGluIHNwZWVkeSBtb2RlXG4gICAgICAgIC8vIGJ1dCB3ZSBkb24ndCB3YW50IGVuYWJsaW5nIHNwZWVkeSB0byBhZmZlY3QgdGhlIG9ic2VydmFibGUgYmVoYXZpb3JcbiAgICAgICAgLy8gc28gd2UgcmVwb3J0IHRoaXMgZXJyb3IgYXQgYWxsIHRpbWVzXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJZb3UncmUgYXR0ZW1wdGluZyB0byBpbnNlcnQgdGhlIGZvbGxvd2luZyBydWxlOlxcblwiICsgcnVsZSArICdcXG5cXG5gQGltcG9ydGAgcnVsZXMgbXVzdCBiZSBiZWZvcmUgYWxsIG90aGVyIHR5cGVzIG9mIHJ1bGVzIGluIGEgc3R5bGVzaGVldCBidXQgb3RoZXIgcnVsZXMgaGF2ZSBhbHJlYWR5IGJlZW4gaW5zZXJ0ZWQuIFBsZWFzZSBlbnN1cmUgdGhhdCBgQGltcG9ydGAgcnVsZXMgYXJlIGJlZm9yZSBhbGwgb3RoZXIgcnVsZXMuJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSA9IHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlIHx8ICFpc0ltcG9ydFJ1bGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTcGVlZHkpIHtcbiAgICAgIHZhciBzaGVldCA9IHNoZWV0Rm9yVGFnKHRhZyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIHVsdHJhZmFzdCB2ZXJzaW9uLCB3b3JrcyBhY3Jvc3MgYnJvd3NlcnNcbiAgICAgICAgLy8gdGhlIGJpZyBkcmF3YmFjayBpcyB0aGF0IHRoZSBjc3Mgd29uJ3QgYmUgZWRpdGFibGUgaW4gZGV2dG9vbHNcbiAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShydWxlLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhLzooLW1vei1wbGFjZWhvbGRlcnwtbW96LWZvY3VzLWlubmVyfC1tb3otZm9jdXNyaW5nfC1tcy1pbnB1dC1wbGFjZWhvbGRlcnwtbW96LXJlYWQtd3JpdGV8LW1vei1yZWFkLW9ubHl8LW1zLWNsZWFyfC1tcy1leHBhbmR8LW1zLXJldmVhbCl7Ly50ZXN0KHJ1bGUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZXJlIHdhcyBhIHByb2JsZW0gaW5zZXJ0aW5nIHRoZSBmb2xsb3dpbmcgcnVsZTogXFxcIlwiICsgcnVsZSArIFwiXFxcIlwiLCBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocnVsZSkpO1xuICAgIH1cblxuICAgIHRoaXMuY3RyKys7XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHJldHVybiB0YWcucGFyZW50Tm9kZSAmJiB0YWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0YWcpO1xuICAgIH0pO1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU3R5bGVTaGVldDtcbn0oKTtcblxuZXhwb3J0IHsgU3R5bGVTaGVldCB9O1xuIiwiZXhwb3J0IHZhciBNUyA9ICctbXMtJ1xuZXhwb3J0IHZhciBNT1ogPSAnLW1vei0nXG5leHBvcnQgdmFyIFdFQktJVCA9ICctd2Via2l0LSdcblxuZXhwb3J0IHZhciBDT01NRU5UID0gJ2NvbW0nXG5leHBvcnQgdmFyIFJVTEVTRVQgPSAncnVsZSdcbmV4cG9ydCB2YXIgREVDTEFSQVRJT04gPSAnZGVjbCdcblxuZXhwb3J0IHZhciBQQUdFID0gJ0BwYWdlJ1xuZXhwb3J0IHZhciBNRURJQSA9ICdAbWVkaWEnXG5leHBvcnQgdmFyIElNUE9SVCA9ICdAaW1wb3J0J1xuZXhwb3J0IHZhciBDSEFSU0VUID0gJ0BjaGFyc2V0J1xuZXhwb3J0IHZhciBWSUVXUE9SVCA9ICdAdmlld3BvcnQnXG5leHBvcnQgdmFyIFNVUFBPUlRTID0gJ0BzdXBwb3J0cydcbmV4cG9ydCB2YXIgRE9DVU1FTlQgPSAnQGRvY3VtZW50J1xuZXhwb3J0IHZhciBOQU1FU1BBQ0UgPSAnQG5hbWVzcGFjZSdcbmV4cG9ydCB2YXIgS0VZRlJBTUVTID0gJ0BrZXlmcmFtZXMnXG5leHBvcnQgdmFyIEZPTlRfRkFDRSA9ICdAZm9udC1mYWNlJ1xuZXhwb3J0IHZhciBDT1VOVEVSX1NUWUxFID0gJ0Bjb3VudGVyLXN0eWxlJ1xuZXhwb3J0IHZhciBGT05UX0ZFQVRVUkVfVkFMVUVTID0gJ0Bmb250LWZlYXR1cmUtdmFsdWVzJ1xuZXhwb3J0IHZhciBMQVlFUiA9ICdAbGF5ZXInXG4iLCIvKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgdmFyIGFicyA9IE1hdGguYWJzXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCB2YXIgZnJvbSA9IFN0cmluZy5mcm9tQ2hhckNvZGVcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH1cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IHZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoICh2YWx1ZSwgbGVuZ3RoKSB7XG5cdHJldHVybiBjaGFyYXQodmFsdWUsIDApIF4gNDUgPyAoKCgoKCgobGVuZ3RoIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAwKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDEpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMikpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAzKSA6IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW0gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS50cmltKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7UmVnRXhwfSBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtzdHJpbmc/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2ggKHZhbHVlLCBwYXR0ZXJuKSB7XG5cdHJldHVybiAodmFsdWUgPSBwYXR0ZXJuLmV4ZWModmFsdWUpKSA/IHZhbHVlWzBdIDogdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBwYXR0ZXJuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZW1lbnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2UgKHZhbHVlLCBwYXR0ZXJuLCByZXBsYWNlbWVudCkge1xuXHRyZXR1cm4gdmFsdWUucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4b2YgKHZhbHVlLCBzZWFyY2gpIHtcblx0cmV0dXJuIHZhbHVlLmluZGV4T2Yoc2VhcmNoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyYXQgKHZhbHVlLCBpbmRleCkge1xuXHRyZXR1cm4gdmFsdWUuY2hhckNvZGVBdChpbmRleCkgfCAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0ciAodmFsdWUsIGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHZhbHVlLnNsaWNlKGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueVtdfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2l6ZW9mICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kICh2YWx1ZSwgYXJyYXkpIHtcblx0cmV0dXJuIGFycmF5LnB1c2godmFsdWUpLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSAoYXJyYXksIGNhbGxiYWNrKSB7XG5cdHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2spLmpvaW4oJycpXG59XG4iLCJpbXBvcnQge2Zyb20sIHRyaW0sIGNoYXJhdCwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgYXNzaWdufSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbmV4cG9ydCB2YXIgbGluZSA9IDFcbmV4cG9ydCB2YXIgY29sdW1uID0gMVxuZXhwb3J0IHZhciBsZW5ndGggPSAwXG5leHBvcnQgdmFyIHBvc2l0aW9uID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXIgPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlcnMgPSAnJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSByb290XG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBzdHJpbmd9IHByb3BzXG4gKiBAcGFyYW0ge29iamVjdFtdIHwgc3RyaW5nfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9kZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0cmV0dXJuIHt2YWx1ZTogdmFsdWUsIHJvb3Q6IHJvb3QsIHBhcmVudDogcGFyZW50LCB0eXBlOiB0eXBlLCBwcm9wczogcHJvcHMsIGNoaWxkcmVuOiBjaGlsZHJlbiwgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4sIGxlbmd0aDogbGVuZ3RoLCByZXR1cm46ICcnfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHJvb3QsIHByb3BzKSB7XG5cdHJldHVybiBhc3NpZ24obm9kZSgnJywgbnVsbCwgbnVsbCwgJycsIG51bGwsIG51bGwsIDApLCByb290LCB7bGVuZ3RoOiAtcm9vdC5sZW5ndGh9LCBwcm9wcylcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyICgpIHtcblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXYgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA+IDAgPyBjaGFyYXQoY2hhcmFjdGVycywgLS1wb3NpdGlvbikgOiAwXG5cblx0aWYgKGNvbHVtbi0tLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUtLVxuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPCBsZW5ndGggPyBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24rKykgOiAwXG5cblx0aWYgKGNvbHVtbisrLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUrK1xuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwZWVrICgpIHtcblx0cmV0dXJuIGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXJldCAoKSB7XG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2xpY2UgKGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHN1YnN0cihjaGFyYWN0ZXJzLCBiZWdpbiwgZW5kKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbiAodHlwZSkge1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHQvLyBcXDAgXFx0IFxcbiBcXHIgXFxzIHdoaXRlc3BhY2UgdG9rZW5cblx0XHRjYXNlIDA6IGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdHJldHVybiA1XG5cdFx0Ly8gISArICwgLyA+IEAgfiBpc29sYXRlIHRva2VuXG5cdFx0Y2FzZSAzMzogY2FzZSA0MzogY2FzZSA0NDogY2FzZSA0NzogY2FzZSA2MjogY2FzZSA2NDogY2FzZSAxMjY6XG5cdFx0Ly8gOyB7IH0gYnJlYWtwb2ludCB0b2tlblxuXHRcdGNhc2UgNTk6IGNhc2UgMTIzOiBjYXNlIDEyNTpcblx0XHRcdHJldHVybiA0XG5cdFx0Ly8gOiBhY2NvbXBhbmllZCB0b2tlblxuXHRcdGNhc2UgNTg6XG5cdFx0XHRyZXR1cm4gM1xuXHRcdC8vIFwiICcgKCBbIG9wZW5pbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgNDA6IGNhc2UgOTE6XG5cdFx0XHRyZXR1cm4gMlxuXHRcdC8vICkgXSBjbG9zaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDQxOiBjYXNlIDkzOlxuXHRcdFx0cmV0dXJuIDFcblx0fVxuXG5cdHJldHVybiAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnlbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gbGluZSA9IGNvbHVtbiA9IDEsIGxlbmd0aCA9IHN0cmxlbihjaGFyYWN0ZXJzID0gdmFsdWUpLCBwb3NpdGlvbiA9IDAsIFtdXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gY2hhcmFjdGVycyA9ICcnLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ICh0eXBlKSB7XG5cdHJldHVybiB0cmltKHNsaWNlKHBvc2l0aW9uIC0gMSwgZGVsaW1pdGVyKHR5cGUgPT09IDkxID8gdHlwZSArIDIgOiB0eXBlID09PSA0MCA/IHR5cGUgKyAxIDogdHlwZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2ModG9rZW5pemVyKGFsbG9jKHZhbHVlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoaXRlc3BhY2UgKHR5cGUpIHtcblx0d2hpbGUgKGNoYXJhY3RlciA9IHBlZWsoKSlcblx0XHRpZiAoY2hhcmFjdGVyIDwgMzMpXG5cdFx0XHRuZXh0KClcblx0XHRlbHNlXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiB0b2tlbih0eXBlKSA+IDIgfHwgdG9rZW4oY2hhcmFjdGVyKSA+IDMgPyAnJyA6ICcgJ1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplciAoY2hpbGRyZW4pIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcblx0XHRcdGNhc2UgMDogYXBwZW5kKGlkZW50aWZpZXIocG9zaXRpb24gLSAxKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlIDI6IGFwcGVuZChkZWxpbWl0KGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0ZGVmYXVsdDogYXBwZW5kKGZyb20oY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0fVxuXG5cdHJldHVybiBjaGlsZHJlblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IGNvdW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGluZyAoaW5kZXgsIGNvdW50KSB7XG5cdHdoaWxlICgtLWNvdW50ICYmIG5leHQoKSlcblx0XHQvLyBub3QgMC05IEEtRiBhLWZcblx0XHRpZiAoY2hhcmFjdGVyIDwgNDggfHwgY2hhcmFjdGVyID4gMTAyIHx8IChjaGFyYWN0ZXIgPiA1NyAmJiBjaGFyYWN0ZXIgPCA2NSkgfHwgKGNoYXJhY3RlciA+IDcwICYmIGNoYXJhY3RlciA8IDk3KSlcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBjYXJldCgpICsgKGNvdW50IDwgNiAmJiBwZWVrKCkgPT0gMzIgJiYgbmV4dCgpID09IDMyKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdGVyICh0eXBlKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdC8vIF0gKSBcIiAnXG5cdFx0XHRjYXNlIHR5cGU6XG5cdFx0XHRcdHJldHVybiBwb3NpdGlvblxuXHRcdFx0Ly8gXCIgJ1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTpcblx0XHRcdFx0aWYgKHR5cGUgIT09IDM0ICYmIHR5cGUgIT09IDM5KVxuXHRcdFx0XHRcdGRlbGltaXRlcihjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAodHlwZSA9PT0gNDEpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKHR5cGUpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0bmV4dCgpXG5cdFx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnRlciAodHlwZSwgaW5kZXgpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHQvLyAvL1xuXHRcdGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0NyArIDEwKVxuXHRcdFx0YnJlYWtcblx0XHQvLyAvKlxuXHRcdGVsc2UgaWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQyICsgNDIgJiYgcGVlaygpID09PSA0Nylcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuICcvKicgKyBzbGljZShpbmRleCwgcG9zaXRpb24gLSAxKSArICcqJyArIGZyb20odHlwZSA9PT0gNDcgPyB0eXBlIDogbmV4dCgpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllciAoaW5kZXgpIHtcblx0d2hpbGUgKCF0b2tlbihwZWVrKCkpKVxuXHRcdG5leHQoKVxuXG5cdHJldHVybiBzbGljZShpbmRleCwgcG9zaXRpb24pXG59XG4iLCJpbXBvcnQge0NPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2FicywgY2hhcmF0LCB0cmltLCBmcm9tLCBzaXplb2YsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIHJlcGxhY2UsIGluZGV4b2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7bm9kZSwgY2hhciwgcHJldiwgbmV4dCwgcGVlaywgY2FyZXQsIGFsbG9jLCBkZWFsbG9jLCBkZWxpbWl0LCB3aGl0ZXNwYWNlLCBlc2NhcGluZywgaWRlbnRpZmllciwgY29tbWVudGVyfSBmcm9tICcuL1Rva2VuaXplci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge29iamVjdFtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2MocGFyc2UoJycsIG51bGwsIG51bGwsIG51bGwsIFsnJ10sIHZhbHVlID0gYWxsb2ModmFsdWUpLCAwLCBbMF0sIHZhbHVlKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzZXRzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwc2V1ZG9cbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmdbXX0gZGVjbGFyYXRpb25zXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgcnVsZSwgcnVsZXMsIHJ1bGVzZXRzLCBwc2V1ZG8sIHBvaW50cywgZGVjbGFyYXRpb25zKSB7XG5cdHZhciBpbmRleCA9IDBcblx0dmFyIG9mZnNldCA9IDBcblx0dmFyIGxlbmd0aCA9IHBzZXVkb1xuXHR2YXIgYXRydWxlID0gMFxuXHR2YXIgcHJvcGVydHkgPSAwXG5cdHZhciBwcmV2aW91cyA9IDBcblx0dmFyIHZhcmlhYmxlID0gMVxuXHR2YXIgc2Nhbm5pbmcgPSAxXG5cdHZhciBhbXBlcnNhbmQgPSAxXG5cdHZhciBjaGFyYWN0ZXIgPSAwXG5cdHZhciB0eXBlID0gJydcblx0dmFyIHByb3BzID0gcnVsZXNcblx0dmFyIGNoaWxkcmVuID0gcnVsZXNldHNcblx0dmFyIHJlZmVyZW5jZSA9IHJ1bGVcblx0dmFyIGNoYXJhY3RlcnMgPSB0eXBlXG5cblx0d2hpbGUgKHNjYW5uaW5nKVxuXHRcdHN3aXRjaCAocHJldmlvdXMgPSBjaGFyYWN0ZXIsIGNoYXJhY3RlciA9IG5leHQoKSkge1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHByZXZpb3VzICE9IDEwOCAmJiBjaGFyYXQoY2hhcmFjdGVycywgbGVuZ3RoIC0gMSkgPT0gNTgpIHtcblx0XHRcdFx0XHRpZiAoaW5kZXhvZihjaGFyYWN0ZXJzICs9IHJlcGxhY2UoZGVsaW1pdChjaGFyYWN0ZXIpLCAnJicsICcmXFxmJyksICcmXFxmJykgIT0gLTEpXG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSAtMVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdC8vIFwiICcgW1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA5MTpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcdCBcXG4gXFxyIFxcc1xuXHRcdFx0Y2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IHdoaXRlc3BhY2UocHJldmlvdXMpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBlc2NhcGluZyhjYXJldCgpIC0gMSwgNylcblx0XHRcdFx0Y29udGludWVcblx0XHRcdC8vIC9cblx0XHRcdGNhc2UgNDc6XG5cdFx0XHRcdHN3aXRjaCAocGVlaygpKSB7XG5cdFx0XHRcdFx0Y2FzZSA0MjogY2FzZSA0Nzpcblx0XHRcdFx0XHRcdGFwcGVuZChjb21tZW50KGNvbW1lbnRlcihuZXh0KCksIGNhcmV0KCkpLCByb290LCBwYXJlbnQpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9ICcvJ1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyB7XG5cdFx0XHRjYXNlIDEyMyAqIHZhcmlhYmxlOlxuXHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSBzdHJsZW4oY2hhcmFjdGVycykgKiBhbXBlcnNhbmRcblx0XHRcdC8vIH0gOyBcXDBcblx0XHRcdGNhc2UgMTI1ICogdmFyaWFibGU6IGNhc2UgNTk6IGNhc2UgMDpcblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdFx0XHQvLyBcXDAgfVxuXHRcdFx0XHRcdGNhc2UgMDogY2FzZSAxMjU6IHNjYW5uaW5nID0gMFxuXHRcdFx0XHRcdC8vIDtcblx0XHRcdFx0XHRjYXNlIDU5ICsgb2Zmc2V0OiBpZiAoYW1wZXJzYW5kID09IC0xKSBjaGFyYWN0ZXJzID0gcmVwbGFjZShjaGFyYWN0ZXJzLCAvXFxmL2csICcnKVxuXHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5ID4gMCAmJiAoc3RybGVuKGNoYXJhY3RlcnMpIC0gbGVuZ3RoKSlcblx0XHRcdFx0XHRcdFx0YXBwZW5kKHByb3BlcnR5ID4gMzIgPyBkZWNsYXJhdGlvbihjaGFyYWN0ZXJzICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDEpIDogZGVjbGFyYXRpb24ocmVwbGFjZShjaGFyYWN0ZXJzLCAnICcsICcnKSArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAyKSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAIDtcblx0XHRcdFx0XHRjYXNlIDU5OiBjaGFyYWN0ZXJzICs9ICc7J1xuXHRcdFx0XHRcdC8vIHsgcnVsZS9hdC1ydWxlXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGFwcGVuZChyZWZlcmVuY2UgPSBydWxlc2V0KGNoYXJhY3RlcnMsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMgPSBbXSwgY2hpbGRyZW4gPSBbXSwgbGVuZ3RoKSwgcnVsZXNldHMpXG5cblx0XHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT09IDEyMylcblx0XHRcdFx0XHRcdFx0aWYgKG9mZnNldCA9PT0gMClcblx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByb290LCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcHJvcHMsIHJ1bGVzZXRzLCBsZW5ndGgsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGF0cnVsZSA9PT0gOTkgJiYgY2hhcmF0KGNoYXJhY3RlcnMsIDMpID09PSAxMTAgPyAxMDAgOiBhdHJ1bGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGQgbCBtIHNcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgMTAwOiBjYXNlIDEwODogY2FzZSAxMDk6IGNhc2UgMTE1OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZSh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJ1bGUgJiYgYXBwZW5kKHJ1bGVzZXQodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCAwLCAwLCBydWxlcywgcG9pbnRzLCB0eXBlLCBydWxlcywgcHJvcHMgPSBbXSwgbGVuZ3RoKSwgY2hpbGRyZW4pLCBydWxlcywgY2hpbGRyZW4sIGxlbmd0aCwgcG9pbnRzLCBydWxlID8gcHJvcHMgOiBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIFsnJ10sIGNoaWxkcmVuLCAwLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGluZGV4ID0gb2Zmc2V0ID0gcHJvcGVydHkgPSAwLCB2YXJpYWJsZSA9IGFtcGVyc2FuZCA9IDEsIHR5cGUgPSBjaGFyYWN0ZXJzID0gJycsIGxlbmd0aCA9IHBzZXVkb1xuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gOlxuXHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0bGVuZ3RoID0gMSArIHN0cmxlbihjaGFyYWN0ZXJzKSwgcHJvcGVydHkgPSBwcmV2aW91c1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYgKHZhcmlhYmxlIDwgMSlcblx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09IDEyMylcblx0XHRcdFx0XHRcdC0tdmFyaWFibGVcblx0XHRcdFx0XHRlbHNlIGlmIChjaGFyYWN0ZXIgPT0gMTI1ICYmIHZhcmlhYmxlKysgPT0gMCAmJiBwcmV2KCkgPT0gMTI1KVxuXHRcdFx0XHRcdFx0Y29udGludWVcblxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3RlcnMgKz0gZnJvbShjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIgKiB2YXJpYWJsZSkge1xuXHRcdFx0XHRcdC8vICZcblx0XHRcdFx0XHRjYXNlIDM4OlxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gb2Zmc2V0ID4gMCA/IDEgOiAoY2hhcmFjdGVycyArPSAnXFxmJywgLTEpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vICxcblx0XHRcdFx0XHRjYXNlIDQ0OlxuXHRcdFx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gKHN0cmxlbihjaGFyYWN0ZXJzKSAtIDEpICogYW1wZXJzYW5kLCBhbXBlcnNhbmQgPSAxXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEBcblx0XHRcdFx0XHRjYXNlIDY0OlxuXHRcdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdFx0aWYgKHBlZWsoKSA9PT0gNDUpXG5cdFx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChuZXh0KCkpXG5cblx0XHRcdFx0XHRcdGF0cnVsZSA9IHBlZWsoKSwgb2Zmc2V0ID0gbGVuZ3RoID0gc3RybGVuKHR5cGUgPSBjaGFyYWN0ZXJzICs9IGlkZW50aWZpZXIoY2FyZXQoKSkpLCBjaGFyYWN0ZXIrK1xuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0Y2FzZSA0NTpcblx0XHRcdFx0XHRcdGlmIChwcmV2aW91cyA9PT0gNDUgJiYgc3RybGVuKGNoYXJhY3RlcnMpID09IDIpXG5cdFx0XHRcdFx0XHRcdHZhcmlhYmxlID0gMFxuXHRcdFx0XHR9XG5cdFx0fVxuXG5cdHJldHVybiBydWxlc2V0c1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzZXQgKHZhbHVlLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHZhciBwb3N0ID0gb2Zmc2V0IC0gMVxuXHR2YXIgcnVsZSA9IG9mZnNldCA9PT0gMCA/IHJ1bGVzIDogWycnXVxuXHR2YXIgc2l6ZSA9IHNpemVvZihydWxlKVxuXG5cdGZvciAodmFyIGkgPSAwLCBqID0gMCwgayA9IDA7IGkgPCBpbmRleDsgKytpKVxuXHRcdGZvciAodmFyIHggPSAwLCB5ID0gc3Vic3RyKHZhbHVlLCBwb3N0ICsgMSwgcG9zdCA9IGFicyhqID0gcG9pbnRzW2ldKSksIHogPSB2YWx1ZTsgeCA8IHNpemU7ICsreClcblx0XHRcdGlmICh6ID0gdHJpbShqID4gMCA/IHJ1bGVbeF0gKyAnICcgKyB5IDogcmVwbGFjZSh5LCAvJlxcZi9nLCBydWxlW3hdKSkpXG5cdFx0XHRcdHByb3BzW2srK10gPSB6XG5cblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgb2Zmc2V0ID09PSAwID8gUlVMRVNFVCA6IHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ICh2YWx1ZSwgcm9vdCwgcGFyZW50KSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIENPTU1FTlQsIGZyb20oY2hhcigpKSwgc3Vic3RyKHZhbHVlLCAyLCAtMiksIDApXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBsZW5ndGgpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgREVDTEFSQVRJT04sIHN1YnN0cih2YWx1ZSwgMCwgbGVuZ3RoKSwgc3Vic3RyKHZhbHVlLCBsZW5ndGggKyAxLCAtMSksIGxlbmd0aClcbn1cbiIsImltcG9ydCB7SU1QT1JULCBMQVlFUiwgQ09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT04sIEtFWUZSQU1FU30gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHtzdHJsZW4sIHNpemVvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplIChjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0dmFyIG91dHB1dCA9ICcnXG5cdHZhciBsZW5ndGggPSBzaXplb2YoY2hpbGRyZW4pXG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRvdXRwdXQgKz0gY2FsbGJhY2soY2hpbGRyZW5baV0sIGksIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRyZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnkgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIExBWUVSOiBpZiAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIGJyZWFrXG5cdFx0Y2FzZSBJTVBPUlQ6IGNhc2UgREVDTEFSQVRJT046IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQucmV0dXJuIHx8IGVsZW1lbnQudmFsdWVcblx0XHRjYXNlIENPTU1FTlQ6IHJldHVybiAnJ1xuXHRcdGNhc2UgS0VZRlJBTUVTOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSArICd9J1xuXHRcdGNhc2UgUlVMRVNFVDogZWxlbWVudC52YWx1ZSA9IGVsZW1lbnQucHJvcHMuam9pbignLCcpXG5cdH1cblxuXHRyZXR1cm4gc3RybGVuKGNoaWxkcmVuID0gc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSkgPyBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBjaGlsZHJlbiArICd9JyA6ICcnXG59XG4iLCJpbXBvcnQge01TLCBNT1osIFdFQktJVCwgUlVMRVNFVCwgS0VZRlJBTUVTLCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHttYXRjaCwgY2hhcmF0LCBzdWJzdHIsIHN0cmxlbiwgc2l6ZW9mLCByZXBsYWNlLCBjb21iaW5lfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge2NvcHksIHRva2VuaXplfSBmcm9tICcuL1Rva2VuaXplci5qcydcbmltcG9ydCB7c2VyaWFsaXplfSBmcm9tICcuL1NlcmlhbGl6ZXIuanMnXG5pbXBvcnQge3ByZWZpeH0gZnJvbSAnLi9QcmVmaXhlci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uW119IGNvbGxlY3Rpb25cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWlkZGxld2FyZSAoY29sbGVjdGlvbikge1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNvbGxlY3Rpb24pXG5cblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdFx0dmFyIG91dHB1dCA9ICcnXG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0b3V0cHV0ICs9IGNvbGxlY3Rpb25baV0oZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRcdHJldHVybiBvdXRwdXRcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzaGVldCAoY2FsbGJhY2spIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0aWYgKCFlbGVtZW50LnJvb3QpXG5cdFx0XHRpZiAoZWxlbWVudCA9IGVsZW1lbnQucmV0dXJuKVxuXHRcdFx0XHRjYWxsYmFjayhlbGVtZW50KVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlciAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRpZiAoZWxlbWVudC5sZW5ndGggPiAtMSlcblx0XHRpZiAoIWVsZW1lbnQucmV0dXJuKVxuXHRcdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBERUNMQVJBVElPTjogZWxlbWVudC5yZXR1cm4gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHRjYXNlIEtFWUZSQU1FUzpcblx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHt2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVCl9KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQubGVuZ3RoKVxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnJlYWQtKG9ubHl8d3JpdGUpXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOnJlYWQtb25seSc6IGNhc2UgJzpyZWFkLXdyaXRlJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnBsYWNlaG9sZGVyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOjpwbGFjZWhvbGRlcic6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBXRUJLSVQgKyAnaW5wdXQtJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCBNUyArICdpbnB1dC0kMScpXX0pXG5cdFx0XHRcdFx0XHRcdFx0XHRdLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHJldHVybiAnJ1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICovXG5leHBvcnQgZnVuY3Rpb24gbmFtZXNwYWNlIChlbGVtZW50KSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0ZWxlbWVudC5wcm9wcyA9IGVsZW1lbnQucHJvcHMubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gY29tYmluZSh0b2tlbml6ZSh2YWx1ZSksIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNoaWxkcmVuKSB7XG5cdFx0XHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIDApKSB7XG5cdFx0XHRcdFx0XHQvLyBcXGZcblx0XHRcdFx0XHRcdGNhc2UgMTI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzdWJzdHIodmFsdWUsIDEsIHN0cmxlbih2YWx1ZSkpXG5cdFx0XHRcdFx0XHQvLyBcXDAgKCArID4gflxuXHRcdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDQwOiBjYXNlIDQzOiBjYXNlIDYyOiBjYXNlIDEyNjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHQvLyA6XG5cdFx0XHRcdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRcdFx0XHRpZiAoY2hpbGRyZW5bKytpbmRleF0gPT09ICdnbG9iYWwnKVxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuW2luZGV4XSA9ICcnLCBjaGlsZHJlblsrK2luZGV4XSA9ICdcXGYnICsgc3Vic3RyKGNoaWxkcmVuW2luZGV4XSwgaW5kZXggPSAxLCAtMSlcblx0XHRcdFx0XHRcdC8vIFxcc1xuXHRcdFx0XHRcdFx0Y2FzZSAzMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChpbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgMDogZWxlbWVudCA9IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2l6ZW9mKGNoaWxkcmVuKSA+IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBpbmRleCA9IHNpemVvZihjaGlsZHJlbikgLSAxOiBjYXNlIDI6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDIgPyB2YWx1ZSArIGVsZW1lbnQgKyBlbGVtZW50IDogdmFsdWUgKyBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fSlcblx0fVxufVxuIiwidmFyIHdlYWtNZW1vaXplID0gZnVuY3Rpb24gd2Vha01lbW9pemUoZnVuYykge1xuICAvLyAkRmxvd0ZpeE1lIGZsb3cgZG9lc24ndCBpbmNsdWRlIGFsbCBub24tcHJpbWl0aXZlIHR5cGVzIGFzIGFsbG93ZWQgZm9yIHdlYWttYXBzXG4gIHZhciBjYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlLmhhcyhhcmcpKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGFyZyk7XG4gICAgfVxuXG4gICAgdmFyIHJldCA9IGZ1bmMoYXJnKTtcbiAgICBjYWNoZS5zZXQoYXJnLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG59O1xuXG5leHBvcnQgeyB3ZWFrTWVtb2l6ZSBhcyBkZWZhdWx0IH07XG4iLCJmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlW2FyZ10gPT09IHVuZGVmaW5lZCkgY2FjaGVbYXJnXSA9IGZuKGFyZyk7XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59XG5cbmV4cG9ydCB7IG1lbW9pemUgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCB7IGRlYWxsb2MsIGFsbG9jLCBuZXh0LCB0b2tlbiwgZnJvbSwgcGVlaywgZGVsaW1pdCwgc2xpY2UsIHBvc2l0aW9uLCBSVUxFU0VULCBjb21iaW5lLCBtYXRjaCwgc2VyaWFsaXplLCBjb3B5LCByZXBsYWNlLCBXRUJLSVQsIE1PWiwgTVMsIEtFWUZSQU1FUywgREVDTEFSQVRJT04sIGhhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCBzdHJpbmdpZnksIENPTU1FTlQsIHJ1bGVzaGVldCwgbWlkZGxld2FyZSwgY29tcGlsZSB9IGZyb20gJ3N0eWxpcyc7XG5pbXBvcnQgd2Vha01lbW9pemUgZnJvbSAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nID0gZnVuY3Rpb24gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKGJlZ2luLCBwb2ludHMsIGluZGV4KSB7XG4gIHZhciBwcmV2aW91cyA9IDA7XG4gIHZhciBjaGFyYWN0ZXIgPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgcHJldmlvdXMgPSBjaGFyYWN0ZXI7XG4gICAgY2hhcmFjdGVyID0gcGVlaygpOyAvLyAmXFxmXG5cbiAgICBpZiAocHJldmlvdXMgPT09IDM4ICYmIGNoYXJhY3RlciA9PT0gMTIpIHtcbiAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgIH1cblxuICAgIGlmICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBuZXh0KCk7XG4gIH1cblxuICByZXR1cm4gc2xpY2UoYmVnaW4sIHBvc2l0aW9uKTtcbn07XG5cbnZhciB0b1J1bGVzID0gZnVuY3Rpb24gdG9SdWxlcyhwYXJzZWQsIHBvaW50cykge1xuICAvLyBwcmV0ZW5kIHdlJ3ZlIHN0YXJ0ZWQgd2l0aCBhIGNvbW1hXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgY2hhcmFjdGVyID0gNDQ7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAvLyAmXFxmXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDM4ICYmIHBlZWsoKSA9PT0gMTIpIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIG5vdCAxMDAlIGNvcnJlY3QsIHdlIGRvbid0IGFjY291bnQgZm9yIGxpdGVyYWwgc2VxdWVuY2VzIGhlcmUgLSBsaWtlIGZvciBleGFtcGxlIHF1b3RlZCBzdHJpbmdzXG4gICAgICAgICAgLy8gc3R5bGlzIGluc2VydHMgXFxmIGFmdGVyICYgdG8ga25vdyB3aGVuICYgd2hlcmUgaXQgc2hvdWxkIHJlcGxhY2UgdGhpcyBzZXF1ZW5jZSB3aXRoIHRoZSBjb250ZXh0IHNlbGVjdG9yXG4gICAgICAgICAgLy8gYW5kIHdoZW4gaXQgc2hvdWxkIGp1c3QgY29uY2F0ZW5hdGUgdGhlIG91dGVyIGFuZCBpbm5lciBzZWxlY3RvcnNcbiAgICAgICAgICAvLyBpdCdzIHZlcnkgdW5saWtlbHkgZm9yIHRoaXMgc2VxdWVuY2UgdG8gYWN0dWFsbHkgYXBwZWFyIGluIGEgZGlmZmVyZW50IGNvbnRleHQsIHNvIHdlIGp1c3QgbGV2ZXJhZ2UgdGhpcyBmYWN0IGhlcmVcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKHBvc2l0aW9uIC0gMSwgcG9pbnRzLCBpbmRleCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZGVsaW1pdChjaGFyYWN0ZXIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OlxuICAgICAgICAvLyBjb21tYVxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSA0NCkge1xuICAgICAgICAgIC8vIGNvbG9uXG4gICAgICAgICAgcGFyc2VkWysraW5kZXhdID0gcGVlaygpID09PSA1OCA/ICcmXFxmJyA6ICcnO1xuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSBwYXJzZWRbaW5kZXhdLmxlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGZyb20oY2hhcmFjdGVyKTtcbiAgICB9XG4gIH0gd2hpbGUgKGNoYXJhY3RlciA9IG5leHQoKSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbnZhciBnZXRSdWxlcyA9IGZ1bmN0aW9uIGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpIHtcbiAgcmV0dXJuIGRlYWxsb2ModG9SdWxlcyhhbGxvYyh2YWx1ZSksIHBvaW50cykpO1xufTsgLy8gV2Vha1NldCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLCBidXQgb25seSBXZWFrTWFwIGlzIHN1cHBvcnRlZCBpbiBJRTExXG5cblxudmFyIGZpeGVkRWxlbWVudHMgPSAvKiAjX19QVVJFX18gKi9uZXcgV2Vha01hcCgpO1xudmFyIGNvbXBhdCA9IGZ1bmN0aW9uIGNvbXBhdChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgIT09ICdydWxlJyB8fCAhZWxlbWVudC5wYXJlbnQgfHwgLy8gcG9zaXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgY29udGFpbnMgcHNldWRvXG4gIC8vIG5lZ2F0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGhhcyBiZWVuIGFscmVhZHkgcHJlZml4ZWRcbiAgZWxlbWVudC5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZSxcbiAgICAgIHBhcmVudCA9IGVsZW1lbnQucGFyZW50O1xuICB2YXIgaXNJbXBsaWNpdFJ1bGUgPSBlbGVtZW50LmNvbHVtbiA9PT0gcGFyZW50LmNvbHVtbiAmJiBlbGVtZW50LmxpbmUgPT09IHBhcmVudC5saW5lO1xuXG4gIHdoaWxlIChwYXJlbnQudHlwZSAhPT0gJ3J1bGUnKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICB9IC8vIHNob3J0LWNpcmN1aXQgZm9yIHRoZSBzaW1wbGVzdCBjYXNlXG5cblxuICBpZiAoZWxlbWVudC5wcm9wcy5sZW5ndGggPT09IDEgJiYgdmFsdWUuY2hhckNvZGVBdCgwKSAhPT0gNThcbiAgLyogY29sb24gKi9cbiAgJiYgIWZpeGVkRWxlbWVudHMuZ2V0KHBhcmVudCkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gaWYgdGhpcyBpcyBhbiBpbXBsaWNpdGx5IGluc2VydGVkIHJ1bGUgKHRoZSBvbmUgZWFnZXJseSBpbnNlcnRlZCBhdCB0aGUgZWFjaCBuZXcgbmVzdGVkIGxldmVsKVxuICAvLyB0aGVuIHRoZSBwcm9wcyBoYXMgYWxyZWFkeSBiZWVuIG1hbmlwdWxhdGVkIGJlZm9yZWhhbmQgYXMgdGhleSB0aGF0IGFycmF5IGlzIHNoYXJlZCBiZXR3ZWVuIGl0IGFuZCBpdHMgXCJydWxlIHBhcmVudFwiXG5cblxuICBpZiAoaXNJbXBsaWNpdFJ1bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaXhlZEVsZW1lbnRzLnNldChlbGVtZW50LCB0cnVlKTtcbiAgdmFyIHBvaW50cyA9IFtdO1xuICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKTtcbiAgdmFyIHBhcmVudFJ1bGVzID0gcGFyZW50LnByb3BzO1xuXG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJlbnRSdWxlcy5sZW5ndGg7IGorKywgaysrKSB7XG4gICAgICBlbGVtZW50LnByb3BzW2tdID0gcG9pbnRzW2ldID8gcnVsZXNbaV0ucmVwbGFjZSgvJlxcZi9nLCBwYXJlbnRSdWxlc1tqXSkgOiBwYXJlbnRSdWxlc1tqXSArIFwiIFwiICsgcnVsZXNbaV07XG4gICAgfVxuICB9XG59O1xudmFyIHJlbW92ZUxhYmVsID0gZnVuY3Rpb24gcmVtb3ZlTGFiZWwoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlID09PSAnZGVjbCcpIHtcbiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCAvLyBjaGFyY29kZSBmb3IgbFxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMCkgPT09IDEwOCAmJiAvLyBjaGFyY29kZSBmb3IgYlxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMikgPT09IDk4KSB7XG4gICAgICAvLyB0aGlzIGlnbm9yZXMgbGFiZWxcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSAnJztcbiAgICAgIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cbn07XG52YXIgaWdub3JlRmxhZyA9ICdlbW90aW9uLWRpc2FibGUtc2VydmVyLXJlbmRlcmluZy11bnNhZmUtc2VsZWN0b3Itd2FybmluZy1wbGVhc2UtZG8tbm90LXVzZS10aGlzLXRoZS13YXJuaW5nLWV4aXN0cy1mb3ItYS1yZWFzb24nO1xuXG52YXIgaXNJZ25vcmluZ0NvbW1lbnQgPSBmdW5jdGlvbiBpc0lnbm9yaW5nQ29tbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnR5cGUgPT09ICdjb21tJyAmJiBlbGVtZW50LmNoaWxkcmVuLmluZGV4T2YoaWdub3JlRmxhZykgPiAtMTtcbn07XG5cbnZhciBjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSA9IGZ1bmN0aW9uIGNyZWF0ZVVuc2FmZVNlbGVjdG9yc0FsYXJtKGNhY2hlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuKSB7XG4gICAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnIHx8IGNhY2hlLmNvbXBhdCkgcmV0dXJuO1xuICAgIHZhciB1bnNhZmVQc2V1ZG9DbGFzc2VzID0gZWxlbWVudC52YWx1ZS5tYXRjaCgvKDpmaXJzdHw6bnRofDpudGgtbGFzdCktY2hpbGQvZyk7XG5cbiAgICBpZiAodW5zYWZlUHNldWRvQ2xhc3Nlcykge1xuICAgICAgdmFyIGlzTmVzdGVkID0gISFlbGVtZW50LnBhcmVudDsgLy8gaW4gbmVzdGVkIHJ1bGVzIGNvbW1lbnRzIGJlY29tZSBjaGlsZHJlbiBvZiB0aGUgXCJhdXRvLWluc2VydGVkXCIgcnVsZSBhbmQgdGhhdCdzIGFsd2F5cyB0aGUgYGVsZW1lbnQucGFyZW50YFxuICAgICAgLy9cbiAgICAgIC8vIGNvbnNpZGVyaW5nIHRoaXMgaW5wdXQ6XG4gICAgICAvLyAuYSB7XG4gICAgICAvLyAgIC5iIC8qIGNvbW0gKi8ge31cbiAgICAgIC8vICAgY29sb3I6IGhvdHBpbms7XG4gICAgICAvLyB9XG4gICAgICAvLyB3ZSBnZXQgb3V0cHV0IGNvcnJlc3BvbmRpbmcgdG8gdGhpczpcbiAgICAgIC8vIC5hIHtcbiAgICAgIC8vICAgJiB7XG4gICAgICAvLyAgICAgLyogY29tbSAqL1xuICAgICAgLy8gICAgIGNvbG9yOiBob3RwaW5rO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIC5iIHt9XG4gICAgICAvLyB9XG5cbiAgICAgIHZhciBjb21tZW50Q29udGFpbmVyID0gaXNOZXN0ZWQgPyBlbGVtZW50LnBhcmVudC5jaGlsZHJlbiA6IC8vIGdsb2JhbCBydWxlIGF0IHRoZSByb290IGxldmVsXG4gICAgICBjaGlsZHJlbjtcblxuICAgICAgZm9yICh2YXIgaSA9IGNvbW1lbnRDb250YWluZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIG5vZGUgPSBjb21tZW50Q29udGFpbmVyW2ldO1xuXG4gICAgICAgIGlmIChub2RlLmxpbmUgPCBlbGVtZW50LmxpbmUpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBpdCBpcyBxdWl0ZSB3ZWlyZCBidXQgY29tbWVudHMgYXJlICp1c3VhbGx5KiBwdXQgYXQgYGNvbHVtbjogZWxlbWVudC5jb2x1bW4gLSAxYFxuICAgICAgICAvLyBzbyB3ZSBzZWVrICpmcm9tIHRoZSBlbmQqIGZvciB0aGUgbm9kZSB0aGF0IGlzIGVhcmxpZXIgdGhhbiB0aGUgcnVsZSdzIGBlbGVtZW50YCBhbmQgY2hlY2sgdGhhdFxuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBtYXRjaCBpbnB1dHMgbGlrZSB0aGlzOlxuICAgICAgICAvLyAuYSB7XG4gICAgICAgIC8vICAgLyogY29tbSAqL1xuICAgICAgICAvLyAgIC5iIHt9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy9cbiAgICAgICAgLy8gYnV0IHRoYXQgaXMgZmluZVxuICAgICAgICAvL1xuICAgICAgICAvLyBpdCB3b3VsZCBiZSB0aGUgZWFzaWVzdCB0byBjaGFuZ2UgdGhlIHBsYWNlbWVudCBvZiB0aGUgY29tbWVudCB0byBiZSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIHJ1bGU6XG4gICAgICAgIC8vIC5hIHtcbiAgICAgICAgLy8gICAuYiB7IC8qIGNvbW0gKi8gfVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHdpdGggc3VjaCBpbnB1dHMgd2Ugd291bGRuJ3QgaGF2ZSB0byBzZWFyY2ggZm9yIHRoZSBjb21tZW50IGF0IGFsbFxuICAgICAgICAvLyBUT0RPOiBjb25zaWRlciBjaGFuZ2luZyB0aGlzIGNvbW1lbnQgcGxhY2VtZW50IGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb25cblxuXG4gICAgICAgIGlmIChub2RlLmNvbHVtbiA8IGVsZW1lbnQuY29sdW1uKSB7XG4gICAgICAgICAgaWYgKGlzSWdub3JpbmdDb21tZW50KG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdW5zYWZlUHNldWRvQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uICh1bnNhZmVQc2V1ZG9DbGFzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIHBzZXVkbyBjbGFzcyBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcyArIFwiXFxcIiBpcyBwb3RlbnRpYWxseSB1bnNhZmUgd2hlbiBkb2luZyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIFRyeSBjaGFuZ2luZyBpdCB0byBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcy5zcGxpdCgnLWNoaWxkJylbMF0gKyBcIi1vZi10eXBlXFxcIi5cIik7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgaXNJbXBvcnRSdWxlID0gZnVuY3Rpb24gaXNJbXBvcnRSdWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQudHlwZS5jaGFyQ29kZUF0KDEpID09PSAxMDUgJiYgZWxlbWVudC50eXBlLmNoYXJDb2RlQXQoMCkgPT09IDY0O1xufTtcblxudmFyIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyA9IGZ1bmN0aW9uIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pIHtcbiAgZm9yICh2YXIgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoIWlzSW1wb3J0UnVsZShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07IC8vIHVzZSB0aGlzIHRvIHJlbW92ZSBpbmNvcnJlY3QgZWxlbWVudHMgZnJvbSBmdXJ0aGVyIHByb2Nlc3Npbmdcbi8vIHNvIHRoZXkgZG9uJ3QgZ2V0IGhhbmRlZCB0byB0aGUgYHNoZWV0YCAob3IgYW55dGhpbmcgZWxzZSlcbi8vIGFzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhZGRpdGlvbmFsIGxvZ3Mgd2hpY2ggaW4gdHVybiBjb3VsZCBiZSBvdmVyaGVsbWluZyB0byB0aGUgdXNlclxuXG5cbnZhciBudWxsaWZ5RWxlbWVudCA9IGZ1bmN0aW9uIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpIHtcbiAgZWxlbWVudC50eXBlID0gJyc7XG4gIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgZWxlbWVudFtcInJldHVyblwiXSA9ICcnO1xuICBlbGVtZW50LmNoaWxkcmVuID0gJyc7XG4gIGVsZW1lbnQucHJvcHMgPSAnJztcbn07XG5cbnZhciBpbmNvcnJlY3RJbXBvcnRBbGFybSA9IGZ1bmN0aW9uIGluY29ycmVjdEltcG9ydEFsYXJtKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbikge1xuICBpZiAoIWlzSW1wb3J0UnVsZShlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChlbGVtZW50LnBhcmVudCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJgQGltcG9ydGAgcnVsZXMgY2FuJ3QgYmUgbmVzdGVkIGluc2lkZSBvdGhlciBydWxlcy4gUGxlYXNlIG1vdmUgaXQgdG8gdGhlIHRvcCBsZXZlbCBhbmQgcHV0IGl0IGJlZm9yZSByZWd1bGFyIHJ1bGVzLiBLZWVwIGluIG1pbmQgdGhhdCB0aGV5IGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIGdsb2JhbCBzdHlsZXMuXCIpO1xuICAgIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpO1xuICB9IGVsc2UgaWYgKGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pKSB7XG4gICAgY29uc29sZS5lcnJvcihcImBAaW1wb3J0YCBydWxlcyBjYW4ndCBiZSBhZnRlciBvdGhlciBydWxlcy4gUGxlYXNlIHB1dCB5b3VyIGBAaW1wb3J0YCBydWxlcyBiZWZvcmUgeW91ciBvdGhlciBydWxlcy5cIik7XG4gICAgbnVsbGlmeUVsZW1lbnQoZWxlbWVudCk7XG4gIH1cbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWZhbGx0aHJvdWdoICovXG5cbmZ1bmN0aW9uIHByZWZpeCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHN3aXRjaCAoaGFzaCh2YWx1ZSwgbGVuZ3RoKSkge1xuICAgIC8vIGNvbG9yLWFkanVzdFxuICAgIGNhc2UgNTEwMzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAncHJpbnQtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYW5pbWF0aW9uLCBhbmltYXRpb24tKGRlbGF5fGRpcmVjdGlvbnxkdXJhdGlvbnxmaWxsLW1vZGV8aXRlcmF0aW9uLWNvdW50fG5hbWV8cGxheS1zdGF0ZXx0aW1pbmctZnVuY3Rpb24pXG5cbiAgICBjYXNlIDU3Mzc6XG4gICAgY2FzZSA0MjAxOlxuICAgIGNhc2UgMzE3NzpcbiAgICBjYXNlIDM0MzM6XG4gICAgY2FzZSAxNjQxOlxuICAgIGNhc2UgNDQ1NzpcbiAgICBjYXNlIDI5MjE6IC8vIHRleHQtZGVjb3JhdGlvbiwgZmlsdGVyLCBjbGlwLXBhdGgsIGJhY2tmYWNlLXZpc2liaWxpdHksIGNvbHVtbiwgYm94LWRlY29yYXRpb24tYnJlYWtcblxuICAgIGNhc2UgNTU3MjpcbiAgICBjYXNlIDYzNTY6XG4gICAgY2FzZSA1ODQ0OlxuICAgIGNhc2UgMzE5MTpcbiAgICBjYXNlIDY2NDU6XG4gICAgY2FzZSAzMDA1OiAvLyBtYXNrLCBtYXNrLWltYWdlLCBtYXNrLShtb2RlfGNsaXB8c2l6ZSksIG1hc2stKHJlcGVhdHxvcmlnaW4pLCBtYXNrLXBvc2l0aW9uLCBtYXNrLWNvbXBvc2l0ZSxcblxuICAgIGNhc2UgNjM5MTpcbiAgICBjYXNlIDU4Nzk6XG4gICAgY2FzZSA1NjIzOlxuICAgIGNhc2UgNjEzNTpcbiAgICBjYXNlIDQ1OTk6XG4gICAgY2FzZSA0ODU1OiAvLyBiYWNrZ3JvdW5kLWNsaXAsIGNvbHVtbnMsIGNvbHVtbi0oY291bnR8ZmlsbHxnYXB8cnVsZXxydWxlLWNvbG9yfHJ1bGUtc3R5bGV8cnVsZS13aWR0aHxzcGFufHdpZHRoKVxuXG4gICAgY2FzZSA0MjE1OlxuICAgIGNhc2UgNjM4OTpcbiAgICBjYXNlIDUxMDk6XG4gICAgY2FzZSA1MzY1OlxuICAgIGNhc2UgNTYyMTpcbiAgICBjYXNlIDM4Mjk6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhcHBlYXJhbmNlLCB1c2VyLXNlbGVjdCwgdHJhbnNmb3JtLCBoeXBoZW5zLCB0ZXh0LXNpemUtYWRqdXN0XG5cbiAgICBjYXNlIDUzNDk6XG4gICAgY2FzZSA0MjQ2OlxuICAgIGNhc2UgNDgxMDpcbiAgICBjYXNlIDY5Njg6XG4gICAgY2FzZSAyNzU2OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTU9aICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gZmxleCwgZmxleC1kaXJlY3Rpb25cblxuICAgIGNhc2UgNjgyODpcbiAgICBjYXNlIDQyNjg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gb3JkZXJcblxuICAgIGNhc2UgNjE2NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYWxpZ24taXRlbXNcblxuICAgIGNhc2UgNTE4NzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHJlcGxhY2UodmFsdWUsIC8oXFx3KykuKyg6W15dKykvLCBXRUJLSVQgKyAnYm94LSQxJDInICsgTVMgKyAnZmxleC0kMSQyJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1zZWxmXG5cbiAgICBjYXNlIDU0NDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWl0ZW0tJyArIHJlcGxhY2UodmFsdWUsIC9mbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWNvbnRlbnRcblxuICAgIGNhc2UgNDY3NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtbGluZS1wYWNrJyArIHJlcGxhY2UodmFsdWUsIC9hbGlnbi1jb250ZW50fGZsZXgtfC1zZWxmLywgJycpICsgdmFsdWU7XG4gICAgLy8gZmxleC1zaHJpbmtcblxuICAgIGNhc2UgNTU0ODpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ3NocmluaycsICduZWdhdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gZmxleC1iYXNpc1xuXG4gICAgY2FzZSA1MjkyOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnYmFzaXMnLCAncHJlZmVycmVkLXNpemUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtZ3Jvd1xuXG4gICAgY2FzZSA2MDYwOlxuICAgICAgcmV0dXJuIFdFQktJVCArICdib3gtJyArIHJlcGxhY2UodmFsdWUsICctZ3JvdycsICcnKSArIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnZ3JvdycsICdwb3NpdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gdHJhbnNpdGlvblxuXG4gICAgY2FzZSA0NTU0OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHJlcGxhY2UodmFsdWUsIC8oW14tXSkodHJhbnNmb3JtKS9nLCAnJDEnICsgV0VCS0lUICsgJyQyJykgKyB2YWx1ZTtcbiAgICAvLyBjdXJzb3JcblxuICAgIGNhc2UgNjE4NzpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyh6b29tLXxncmFiKS8sIFdFQktJVCArICckMScpLCAvKGltYWdlLXNldCkvLCBXRUJLSVQgKyAnJDEnKSwgdmFsdWUsICcnKSArIHZhbHVlO1xuICAgIC8vIGJhY2tncm91bmQsIGJhY2tncm91bmQtaW1hZ2VcblxuICAgIGNhc2UgNTQ5NTpcbiAgICBjYXNlIDM5NTk6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyhpbWFnZS1zZXRcXChbXl0qKS8sIFdFQktJVCArICckMScgKyAnJGAkMScpO1xuICAgIC8vIGp1c3RpZnktY29udGVudFxuXG4gICAgY2FzZSA0OTY4OlxuICAgICAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyguKzopKGZsZXgtKT8oLiopLywgV0VCS0lUICsgJ2JveC1wYWNrOiQzJyArIE1TICsgJ2ZsZXgtcGFjazokMycpLCAvcy4rLWJbXjtdKy8sICdqdXN0aWZ5JykgKyBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIChtYXJnaW58cGFkZGluZyktaW5saW5lLShzdGFydHxlbmQpXG5cbiAgICBjYXNlIDQwOTU6XG4gICAgY2FzZSAzNTgzOlxuICAgIGNhc2UgNDA2ODpcbiAgICBjYXNlIDI1MzI6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKyktaW5saW5lKC4rKS8sIFdFQktJVCArICckMSQyJykgKyB2YWx1ZTtcbiAgICAvLyAobWlufG1heCk/KHdpZHRofGhlaWdodHxpbmxpbmUtc2l6ZXxibG9jay1zaXplKVxuXG4gICAgY2FzZSA4MTE2OlxuICAgIGNhc2UgNzA1OTpcbiAgICBjYXNlIDU3NTM6XG4gICAgY2FzZSA1NTM1OlxuICAgIGNhc2UgNTQ0NTpcbiAgICBjYXNlIDU3MDE6XG4gICAgY2FzZSA0OTMzOlxuICAgIGNhc2UgNDY3NzpcbiAgICBjYXNlIDU1MzM6XG4gICAgY2FzZSA1Nzg5OlxuICAgIGNhc2UgNTAyMTpcbiAgICBjYXNlIDQ3NjU6XG4gICAgICAvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG4gICAgICBpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KSBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcbiAgICAgICAgLy8gKG0pYXgtY29udGVudCwgKG0paW4tY29udGVudFxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAvLyAtXG4gICAgICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNCkgIT09IDQ1KSBicmVhaztcbiAgICAgICAgLy8gKGYpaWxsLWF2YWlsYWJsZSwgKGYpaXQtY29udGVudFxuXG4gICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoLispLShbXl0rKS8sICckMScgKyBXRUJLSVQgKyAnJDItJDMnICsgJyQxJyArIE1PWiArIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDMpID09IDEwOCA/ICckMycgOiAnJDItJDMnKSkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKHMpdHJldGNoXG5cbiAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgcmV0dXJuIH5pbmRleG9mKHZhbHVlLCAnc3RyZXRjaCcpID8gcHJlZml4KHJlcGxhY2UodmFsdWUsICdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGxlbmd0aCkgKyB2YWx1ZSA6IHZhbHVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgLy8gcG9zaXRpb246IHN0aWNreVxuXG4gICAgY2FzZSA0OTQ5OlxuICAgICAgLy8gKHMpdGlja3k/XG4gICAgICBpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSAhPT0gMTE1KSBicmVhaztcbiAgICAvLyBkaXNwbGF5OiAoZmxleHxpbmxpbmUtZmxleClcblxuICAgIGNhc2UgNjQ0NDpcbiAgICAgIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBzdHJsZW4odmFsdWUpIC0gMyAtICh+aW5kZXhvZih2YWx1ZSwgJyFpbXBvcnRhbnQnKSAmJiAxMCkpKSB7XG4gICAgICAgIC8vIHN0aWMoayl5XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIFdFQktJVCkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKGlubGluZS0pP2ZsKGUpeFxuXG4gICAgICAgIGNhc2UgMTAxOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoW147IV0rKSg7fCEuKyk/LywgJyQxJyArIFdFQktJVCArIChjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAnaW5saW5lLScgOiAnJykgKyAnYm94JDMnICsgJyQxJyArIFdFQktJVCArICckMiQzJyArICckMScgKyBNUyArICckMmJveCQzJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgLy8gd3JpdGluZy1tb2RlXG5cbiAgICBjYXNlIDU5MzY6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMTEpKSB7XG4gICAgICAgIC8vIHZlcnRpY2FsLWwocilcbiAgICAgICAgY2FzZSAxMTQ6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0YicpICsgdmFsdWU7XG4gICAgICAgIC8vIHZlcnRpY2FsLXIobClcblxuICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiLXJsJykgKyB2YWx1ZTtcbiAgICAgICAgLy8gaG9yaXpvbnRhbCgtKXRiXG5cbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ2xyJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgcHJlZml4ZXIgPSBmdW5jdGlvbiBwcmVmaXhlcihlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG4gIGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKSBpZiAoIWVsZW1lbnRbXCJyZXR1cm5cIl0pIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBERUNMQVJBVElPTjpcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEtFWUZSQU1FUzpcbiAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICB2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVClcbiAgICAgIH0pXSwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSBSVUxFU0VUOlxuICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoKSByZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcbiAgICAgICAgICAvLyA6cmVhZC0ob25seXx3cml0ZSlcbiAgICAgICAgICBjYXNlICc6cmVhZC1vbmx5JzpcbiAgICAgICAgICBjYXNlICc6cmVhZC13cml0ZSc6XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgICAvLyA6cGxhY2Vob2xkZXJcblxuICAgICAgICAgIGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV1cbiAgICAgICAgICAgIH0pXSwgY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSk7XG4gIH1cbn07XG5cbnZhciBpc0Jyb3dzZXIgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xudmFyIGdldFNlcnZlclN0eWxpc0NhY2hlID0gaXNCcm93c2VyID8gdW5kZWZpbmVkIDogd2Vha01lbW9pemUoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbWVtb2l6ZShmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNhY2hlID0ge307XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICByZXR1cm4gY2FjaGVbbmFtZV07XG4gICAgfTtcbiAgfSk7XG59KTtcbnZhciBkZWZhdWx0U3R5bGlzUGx1Z2lucyA9IFtwcmVmaXhlcl07XG5cbnZhciBjcmVhdGVDYWNoZSA9IGZ1bmN0aW9uIGNyZWF0ZUNhY2hlKG9wdGlvbnMpIHtcbiAgdmFyIGtleSA9IG9wdGlvbnMua2V5O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFrZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgaGF2ZSB0byBjb25maWd1cmUgYGtleWAgZm9yIHlvdXIgY2FjaGUuIFBsZWFzZSBtYWtlIHN1cmUgaXQncyB1bmlxdWUgKGFuZCBub3QgZXF1YWwgdG8gJ2NzcycpIGFzIGl0J3MgdXNlZCBmb3IgbGlua2luZyBzdHlsZXMgdG8geW91ciBjYWNoZS5cXG5cIiArIFwiSWYgbXVsdGlwbGUgY2FjaGVzIHNoYXJlIHRoZSBzYW1lIGtleSB0aGV5IG1pZ2h0IFxcXCJmaWdodFxcXCIgZm9yIGVhY2ggb3RoZXIncyBzdHlsZSBlbGVtZW50cy5cIik7XG4gIH1cblxuICBpZiAoaXNCcm93c2VyICYmIGtleSA9PT0gJ2NzcycpIHtcbiAgICB2YXIgc3NyU3R5bGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl06bm90KFtkYXRhLXNdKVwiKTsgLy8gZ2V0IFNTUmVkIHN0eWxlcyBvdXQgb2YgdGhlIHdheSBvZiBSZWFjdCdzIGh5ZHJhdGlvblxuICAgIC8vIGRvY3VtZW50LmhlYWQgaXMgYSBzYWZlIHBsYWNlIHRvIG1vdmUgdGhlbSB0byh0aG91Z2ggbm90ZSBkb2N1bWVudC5oZWFkIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgbGFzdCBwbGFjZSB0aGV5IHdpbGwgYmUpXG4gICAgLy8gbm90ZSB0aGlzIHZlcnkgdmVyeSBpbnRlbnRpb25hbGx5IHRhcmdldHMgYWxsIHN0eWxlIGVsZW1lbnRzIHJlZ2FyZGxlc3Mgb2YgdGhlIGtleSB0byBlbnN1cmVcbiAgICAvLyB0aGF0IGNyZWF0aW5nIGEgY2FjaGUgd29ya3MgaW5zaWRlIG9mIHJlbmRlciBvZiBhIFJlYWN0IGNvbXBvbmVudFxuXG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChzc3JTdHlsZXMsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAvLyB3ZSB3YW50IHRvIG9ubHkgbW92ZSBlbGVtZW50cyB3aGljaCBoYXZlIGEgc3BhY2UgaW4gdGhlIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgIC8vIGJlY2F1c2UgdGhhdCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBhbiBFbW90aW9uIDExIHNlcnZlci1zaWRlIHJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgICAvLyB3aGlsZSB3ZSB3aWxsIGFscmVhZHkgaWdub3JlIEVtb3Rpb24gMTEgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGJlY2F1c2Ugb2YgdGhlIDpub3QoW2RhdGEtc10pIHBhcnQgaW4gdGhlIHNlbGVjdG9yXG4gICAgICAvLyBFbW90aW9uIDEwIGNsaWVudC1zaWRlIGluc2VydGVkIHN0eWxlcyBkaWQgbm90IGhhdmUgZGF0YS1zIChidXQgaW1wb3J0YW50bHkgZGlkIG5vdCBoYXZlIGEgc3BhY2UgaW4gdGhlaXIgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZXMpXG4gICAgICAvLyBzbyBjaGVja2luZyBmb3IgdGhlIHNwYWNlIGVuc3VyZXMgdGhhdCBsb2FkaW5nIEVtb3Rpb24gMTEgYWZ0ZXIgRW1vdGlvbiAxMCBoYXMgaW5zZXJ0ZWQgc29tZSBzdHlsZXNcbiAgICAgIC8vIHdpbGwgbm90IHJlc3VsdCBpbiB0aGUgRW1vdGlvbiAxMCBzdHlsZXMgYmVpbmcgZGVzdHJveWVkXG4gICAgICB2YXIgZGF0YUVtb3Rpb25BdHRyaWJ1dGUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJyk7XG5cbiAgICAgIGlmIChkYXRhRW1vdGlvbkF0dHJpYnV0ZS5pbmRleE9mKCcgJykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1zJywgJycpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIHN0eWxpc1BsdWdpbnMgPSBvcHRpb25zLnN0eWxpc1BsdWdpbnMgfHwgZGVmYXVsdFN0eWxpc1BsdWdpbnM7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgaWYgKC9bXmEtei1dLy50ZXN0KGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkVtb3Rpb24ga2V5IG11c3Qgb25seSBjb250YWluIGxvd2VyIGNhc2UgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgYW5kIC0gYnV0IFxcXCJcIiArIGtleSArIFwiXFxcIiB3YXMgcGFzc2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpbnNlcnRlZCA9IHt9O1xuICB2YXIgY29udGFpbmVyO1xuICB2YXIgbm9kZXNUb0h5ZHJhdGUgPSBbXTtcblxuICBpZiAoaXNCcm93c2VyKSB7XG4gICAgY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXIgfHwgZG9jdW1lbnQuaGVhZDtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKCAvLyB0aGlzIG1lYW5zIHdlIHdpbGwgaWdub3JlIGVsZW1lbnRzIHdoaWNoIGRvbid0IGhhdmUgYSBzcGFjZSBpbiB0aGVtIHdoaWNoXG4gICAgLy8gbWVhbnMgdGhhdCB0aGUgc3R5bGUgZWxlbWVudHMgd2UncmUgbG9va2luZyBhdCBhcmUgb25seSBFbW90aW9uIDExIHNlcnZlci1yZW5kZXJlZCBzdHlsZSBlbGVtZW50c1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWVtb3Rpb25ePVxcXCJcIiArIGtleSArIFwiIFxcXCJdXCIpLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgdmFyIGF0dHJpYiA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1lbW90aW9uXCIpLnNwbGl0KCcgJyk7IC8vICRGbG93Rml4TWVcblxuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhdHRyaWIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW5zZXJ0ZWRbYXR0cmliW2ldXSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIG5vZGVzVG9IeWRyYXRlLnB1c2gobm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgX2luc2VydDtcblxuICB2YXIgb21uaXByZXNlbnRQbHVnaW5zID0gW2NvbXBhdCwgcmVtb3ZlTGFiZWxdO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgb21uaXByZXNlbnRQbHVnaW5zLnB1c2goY3JlYXRlVW5zYWZlU2VsZWN0b3JzQWxhcm0oe1xuICAgICAgZ2V0IGNvbXBhdCgpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlLmNvbXBhdDtcbiAgICAgIH1cblxuICAgIH0pLCBpbmNvcnJlY3RJbXBvcnRBbGFybSk7XG4gIH1cblxuICBpZiAoaXNCcm93c2VyKSB7XG4gICAgdmFyIGN1cnJlbnRTaGVldDtcbiAgICB2YXIgZmluYWxpemluZ1BsdWdpbnMgPSBbc3RyaW5naWZ5LCBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIGlmICghZWxlbWVudC5yb290KSB7XG4gICAgICAgIGlmIChlbGVtZW50W1wicmV0dXJuXCJdKSB7XG4gICAgICAgICAgY3VycmVudFNoZWV0Lmluc2VydChlbGVtZW50W1wicmV0dXJuXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnZhbHVlICYmIGVsZW1lbnQudHlwZSAhPT0gQ09NTUVOVCkge1xuICAgICAgICAgIC8vIGluc2VydCBlbXB0eSBydWxlIGluIG5vbi1wcm9kdWN0aW9uIGVudmlyb25tZW50c1xuICAgICAgICAgIC8vIHNvIEBlbW90aW9uL2plc3QgY2FuIGdyYWIgYGtleWAgZnJvbSB0aGUgKEpTKURPTSBmb3IgY2FjaGVzIHdpdGhvdXQgYW55IHJ1bGVzIGluc2VydGVkIHlldFxuICAgICAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQoZWxlbWVudC52YWx1ZSArIFwie31cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IDogcnVsZXNoZWV0KGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KHJ1bGUpO1xuICAgIH0pXTtcbiAgICB2YXIgc2VyaWFsaXplciA9IG1pZGRsZXdhcmUob21uaXByZXNlbnRQbHVnaW5zLmNvbmNhdChzdHlsaXNQbHVnaW5zLCBmaW5hbGl6aW5nUGx1Z2lucykpO1xuXG4gICAgdmFyIHN0eWxpcyA9IGZ1bmN0aW9uIHN0eWxpcyhzdHlsZXMpIHtcbiAgICAgIHJldHVybiBzZXJpYWxpemUoY29tcGlsZShzdHlsZXMpLCBzZXJpYWxpemVyKTtcbiAgICB9O1xuXG4gICAgX2luc2VydCA9IGZ1bmN0aW9uIGluc2VydChzZWxlY3Rvciwgc2VyaWFsaXplZCwgc2hlZXQsIHNob3VsZENhY2hlKSB7XG4gICAgICBjdXJyZW50U2hlZXQgPSBzaGVldDtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2VyaWFsaXplZC5tYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjdXJyZW50U2hlZXQgPSB7XG4gICAgICAgICAgaW5zZXJ0OiBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgICAgICAgICAgc2hlZXQuaW5zZXJ0KHJ1bGUgKyBzZXJpYWxpemVkLm1hcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBzdHlsaXMoc2VsZWN0b3IgPyBzZWxlY3RvciArIFwie1wiICsgc2VyaWFsaXplZC5zdHlsZXMgKyBcIn1cIiA6IHNlcmlhbGl6ZWQuc3R5bGVzKTtcblxuICAgICAgaWYgKHNob3VsZENhY2hlKSB7XG4gICAgICAgIGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9maW5hbGl6aW5nUGx1Z2lucyA9IFtzdHJpbmdpZnldO1xuXG4gICAgdmFyIF9zZXJpYWxpemVyID0gbWlkZGxld2FyZShvbW5pcHJlc2VudFBsdWdpbnMuY29uY2F0KHN0eWxpc1BsdWdpbnMsIF9maW5hbGl6aW5nUGx1Z2lucykpO1xuXG4gICAgdmFyIF9zdHlsaXMgPSBmdW5jdGlvbiBfc3R5bGlzKHN0eWxlcykge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShjb21waWxlKHN0eWxlcyksIF9zZXJpYWxpemVyKTtcbiAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgIHZhciBzZXJ2ZXJTdHlsaXNDYWNoZSA9IGdldFNlcnZlclN0eWxpc0NhY2hlKHN0eWxpc1BsdWdpbnMpKGtleSk7XG5cbiAgICB2YXIgZ2V0UnVsZXMgPSBmdW5jdGlvbiBnZXRSdWxlcyhzZWxlY3Rvciwgc2VyaWFsaXplZCkge1xuICAgICAgdmFyIG5hbWUgPSBzZXJpYWxpemVkLm5hbWU7XG5cbiAgICAgIGlmIChzZXJ2ZXJTdHlsaXNDYWNoZVtuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNlcnZlclN0eWxpc0NhY2hlW25hbWVdID0gX3N0eWxpcyhzZWxlY3RvciA/IHNlbGVjdG9yICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiIDogc2VyaWFsaXplZC5zdHlsZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VydmVyU3R5bGlzQ2FjaGVbbmFtZV07XG4gICAgfTtcblxuICAgIF9pbnNlcnQgPSBmdW5jdGlvbiBfaW5zZXJ0KHNlbGVjdG9yLCBzZXJpYWxpemVkLCBzaGVldCwgc2hvdWxkQ2FjaGUpIHtcbiAgICAgIHZhciBuYW1lID0gc2VyaWFsaXplZC5uYW1lO1xuICAgICAgdmFyIHJ1bGVzID0gZ2V0UnVsZXMoc2VsZWN0b3IsIHNlcmlhbGl6ZWQpO1xuXG4gICAgICBpZiAoY2FjaGUuY29tcGF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gaW4gcmVndWxhciBtb2RlLCB3ZSBkb24ndCBzZXQgdGhlIHN0eWxlcyBvbiB0aGUgaW5zZXJ0ZWQgY2FjaGVcbiAgICAgICAgLy8gc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byBhbmQgdGhhdCB3b3VsZCBiZSB3YXN0aW5nIG1lbW9yeVxuICAgICAgICAvLyB3ZSByZXR1cm4gdGhlbSBzbyB0aGF0IHRoZXkgYXJlIHJlbmRlcmVkIGluIGEgc3R5bGUgdGFnXG4gICAgICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgICAgIGNhY2hlLmluc2VydGVkW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICggLy8gdXNpbmcgPT09IGRldmVsb3BtZW50IGluc3RlYWQgb2YgIT09IHByb2R1Y3Rpb25cbiAgICAgICAgLy8gYmVjYXVzZSBpZiBwZW9wbGUgZG8gc3NyIGluIHRlc3RzLCB0aGUgc291cmNlIG1hcHMgc2hvd2luZyB1cCB3b3VsZCBiZSBhbm5veWluZ1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyAmJiBzZXJpYWxpemVkLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJ1bGVzICsgc2VyaWFsaXplZC5tYXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcnVsZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpbiBjb21wYXQgbW9kZSwgd2UgcHV0IHRoZSBzdHlsZXMgb24gdGhlIGluc2VydGVkIGNhY2hlIHNvXG4gICAgICAgIC8vIHRoYXQgZW1vdGlvbi1zZXJ2ZXIgY2FuIHB1bGwgb3V0IHRoZSBzdHlsZXNcbiAgICAgICAgLy8gZXhjZXB0IHdoZW4gd2UgZG9uJ3Qgd2FudCB0byBjYWNoZSBpdCB3aGljaCB3YXMgaW4gR2xvYmFsIGJ1dCBub3dcbiAgICAgICAgLy8gaXMgbm93aGVyZSBidXQgd2UgZG9uJ3Qgd2FudCB0byBkbyBhIG1ham9yIHJpZ2h0IG5vd1xuICAgICAgICAvLyBhbmQganVzdCBpbiBjYXNlIHdlJ3JlIGdvaW5nIHRvIGxlYXZlIHRoZSBjYXNlIGhlcmVcbiAgICAgICAgLy8gaXQncyBhbHNvIG5vdCBhZmZlY3RpbmcgY2xpZW50IHNpZGUgYnVuZGxlIHNpemVcbiAgICAgICAgLy8gc28gaXQncyByZWFsbHkgbm90IGEgYmlnIGRlYWxcbiAgICAgICAgaWYgKHNob3VsZENhY2hlKSB7XG4gICAgICAgICAgY2FjaGUuaW5zZXJ0ZWRbbmFtZV0gPSBydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcnVsZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgdmFyIGNhY2hlID0ge1xuICAgIGtleToga2V5LFxuICAgIHNoZWV0OiBuZXcgU3R5bGVTaGVldCh7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgICBzcGVlZHk6IG9wdGlvbnMuc3BlZWR5LFxuICAgICAgcHJlcGVuZDogb3B0aW9ucy5wcmVwZW5kLFxuICAgICAgaW5zZXJ0aW9uUG9pbnQ6IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnRcbiAgICB9KSxcbiAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICBpbnNlcnRlZDogaW5zZXJ0ZWQsXG4gICAgcmVnaXN0ZXJlZDoge30sXG4gICAgaW5zZXJ0OiBfaW5zZXJ0XG4gIH07XG4gIGNhY2hlLnNoZWV0Lmh5ZHJhdGUobm9kZXNUb0h5ZHJhdGUpO1xuICByZXR1cm4gY2FjaGU7XG59O1xuXG5leHBvcnQgeyBjcmVhdGVDYWNoZSBhcyBkZWZhdWx0IH07XG4iLCJ2YXIgaXNCcm93c2VyID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lcykge1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gJyc7XG4gIGNsYXNzTmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICBpZiAocmVnaXN0ZXJlZFtjbGFzc05hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlZ2lzdGVyZWRTdHlsZXMucHVzaChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gKyBcIjtcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhd0NsYXNzTmFtZSArPSBjbGFzc05hbWUgKyBcIiBcIjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmF3Q2xhc3NOYW1lO1xufVxudmFyIHJlZ2lzdGVyU3R5bGVzID0gZnVuY3Rpb24gcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoIC8vIHdlIG9ubHkgbmVlZCB0byBhZGQgdGhlIHN0eWxlcyB0byB0aGUgcmVnaXN0ZXJlZCBjYWNoZSBpZiB0aGVcbiAgLy8gY2xhc3MgbmFtZSBjb3VsZCBiZSB1c2VkIGZ1cnRoZXIgZG93blxuICAvLyB0aGUgdHJlZSBidXQgaWYgaXQncyBhIHN0cmluZyB0YWcsIHdlIGtub3cgaXQgd29uJ3RcbiAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBhZGQgaXQgdG8gcmVnaXN0ZXJlZCBjYWNoZS5cbiAgLy8gdGhpcyBpbXByb3ZlcyBtZW1vcnkgdXNhZ2Ugc2luY2Ugd2UgY2FuIGF2b2lkIHN0b3JpbmcgdGhlIHdob2xlIHN0eWxlIHN0cmluZ1xuICAoaXNTdHJpbmdUYWcgPT09IGZhbHNlIHx8IC8vIHdlIG5lZWQgdG8gYWx3YXlzIHN0b3JlIGl0IGlmIHdlJ3JlIGluIGNvbXBhdCBtb2RlIGFuZFxuICAvLyBpbiBub2RlIHNpbmNlIGVtb3Rpb24tc2VydmVyIHJlbGllcyBvbiB3aGV0aGVyIGEgc3R5bGUgaXMgaW5cbiAgLy8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8ga25vdyB3aGV0aGVyIGEgc3R5bGUgaXMgZ2xvYmFsIG9yIG5vdFxuICAvLyBhbHNvLCBub3RlIHRoYXQgdGhpcyBjaGVjayB3aWxsIGJlIGRlYWQgY29kZSBlbGltaW5hdGVkIGluIHRoZSBicm93c2VyXG4gIGlzQnJvd3NlciA9PT0gZmFsc2UgJiYgY2FjaGUuY29tcGF0ICE9PSB1bmRlZmluZWQpICYmIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID0gc2VyaWFsaXplZC5zdHlsZXM7XG4gIH1cbn07XG52YXIgaW5zZXJ0U3R5bGVzID0gZnVuY3Rpb24gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBzdHlsZXNGb3JTU1IgPSAnJztcbiAgICB2YXIgY3VycmVudCA9IHNlcmlhbGl6ZWQ7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgbWF5YmVTdHlsZXMgPSBjYWNoZS5pbnNlcnQoc2VyaWFsaXplZCA9PT0gY3VycmVudCA/IFwiLlwiICsgY2xhc3NOYW1lIDogJycsIGN1cnJlbnQsIGNhY2hlLnNoZWV0LCB0cnVlKTtcblxuICAgICAgaWYgKCFpc0Jyb3dzZXIgJiYgbWF5YmVTdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdHlsZXNGb3JTU1IgKz0gbWF5YmVTdHlsZXM7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gICAgfSB3aGlsZSAoY3VycmVudCAhPT0gdW5kZWZpbmVkKTtcblxuICAgIGlmICghaXNCcm93c2VyICYmIHN0eWxlc0ZvclNTUi5sZW5ndGggIT09IDApIHtcbiAgICAgIHJldHVybiBzdHlsZXNGb3JTU1I7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzIH07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2dhcnljb3VydC9tdXJtdXJoYXNoLWpzXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWFwcGxlYnkvc21oYXNoZXIvYmxvYi82MWEwNTMwZjI4Mjc3ZjJlODUwYmZjMzk2MDBjZTYxZDAyYjUxOGRlL3NyYy9NdXJtdXJIYXNoMi5jcHAjTDM3LUw4NlxuZnVuY3Rpb24gbXVybXVyMihzdHIpIHtcbiAgLy8gJ20nIGFuZCAncicgYXJlIG1peGluZyBjb25zdGFudHMgZ2VuZXJhdGVkIG9mZmxpbmUuXG4gIC8vIFRoZXkncmUgbm90IHJlYWxseSAnbWFnaWMnLCB0aGV5IGp1c3QgaGFwcGVuIHRvIHdvcmsgd2VsbC5cbiAgLy8gY29uc3QgbSA9IDB4NWJkMWU5OTU7XG4gIC8vIGNvbnN0IHIgPSAyNDtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgaGFzaFxuICB2YXIgaCA9IDA7IC8vIE1peCA0IGJ5dGVzIGF0IGEgdGltZSBpbnRvIHRoZSBoYXNoXG5cbiAgdmFyIGssXG4gICAgICBpID0gMCxcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XG5cbiAgZm9yICg7IGxlbiA+PSA0OyArK2ksIGxlbiAtPSA0KSB7XG4gICAgayA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgOCB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDI0O1xuICAgIGsgPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICAgIGsgXj1cbiAgICAvKiBrID4+PiByOiAqL1xuICAgIGsgPj4+IDI0O1xuICAgIGggPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpIF5cbiAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBIYW5kbGUgdGhlIGxhc3QgZmV3IGJ5dGVzIG9mIHRoZSBpbnB1dCBhcnJheVxuXG5cbiAgc3dpdGNoIChsZW4pIHtcbiAgICBjYXNlIDM6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcblxuICAgIGNhc2UgMjpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG5cbiAgICBjYXNlIDE6XG4gICAgICBoIF49IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgICAgIGggPVxuICAgICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBEbyBhIGZldyBmaW5hbCBtaXhlcyBvZiB0aGUgaGFzaCB0byBlbnN1cmUgdGhlIGxhc3QgZmV3XG4gIC8vIGJ5dGVzIGFyZSB3ZWxsLWluY29ycG9yYXRlZC5cblxuXG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPVxuICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIHJldHVybiAoKGggXiBoID4+PiAxNSkgPj4+IDApLnRvU3RyaW5nKDM2KTtcbn1cblxuZXhwb3J0IHsgbXVybXVyMiBhcyBkZWZhdWx0IH07XG4iLCJ2YXIgdW5pdGxlc3NLZXlzID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMSxcbiAgYXNwZWN0UmF0aW86IDEsXG4gIGJvcmRlckltYWdlT3V0c2V0OiAxLFxuICBib3JkZXJJbWFnZVNsaWNlOiAxLFxuICBib3JkZXJJbWFnZVdpZHRoOiAxLFxuICBib3hGbGV4OiAxLFxuICBib3hGbGV4R3JvdXA6IDEsXG4gIGJveE9yZGluYWxHcm91cDogMSxcbiAgY29sdW1uQ291bnQ6IDEsXG4gIGNvbHVtbnM6IDEsXG4gIGZsZXg6IDEsXG4gIGZsZXhHcm93OiAxLFxuICBmbGV4UG9zaXRpdmU6IDEsXG4gIGZsZXhTaHJpbms6IDEsXG4gIGZsZXhOZWdhdGl2ZTogMSxcbiAgZmxleE9yZGVyOiAxLFxuICBncmlkUm93OiAxLFxuICBncmlkUm93RW5kOiAxLFxuICBncmlkUm93U3BhbjogMSxcbiAgZ3JpZFJvd1N0YXJ0OiAxLFxuICBncmlkQ29sdW1uOiAxLFxuICBncmlkQ29sdW1uRW5kOiAxLFxuICBncmlkQ29sdW1uU3BhbjogMSxcbiAgZ3JpZENvbHVtblN0YXJ0OiAxLFxuICBtc0dyaWRSb3c6IDEsXG4gIG1zR3JpZFJvd1NwYW46IDEsXG4gIG1zR3JpZENvbHVtbjogMSxcbiAgbXNHcmlkQ29sdW1uU3BhbjogMSxcbiAgZm9udFdlaWdodDogMSxcbiAgbGluZUhlaWdodDogMSxcbiAgb3BhY2l0eTogMSxcbiAgb3JkZXI6IDEsXG4gIG9ycGhhbnM6IDEsXG4gIHRhYlNpemU6IDEsXG4gIHdpZG93czogMSxcbiAgekluZGV4OiAxLFxuICB6b29tOiAxLFxuICBXZWJraXRMaW5lQ2xhbXA6IDEsXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IDEsXG4gIGZsb29kT3BhY2l0eTogMSxcbiAgc3RvcE9wYWNpdHk6IDEsXG4gIHN0cm9rZURhc2hhcnJheTogMSxcbiAgc3Ryb2tlRGFzaG9mZnNldDogMSxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogMSxcbiAgc3Ryb2tlT3BhY2l0eTogMSxcbiAgc3Ryb2tlV2lkdGg6IDFcbn07XG5cbmV4cG9ydCB7IHVuaXRsZXNzS2V5cyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgaGFzaFN0cmluZyBmcm9tICdAZW1vdGlvbi9oYXNoJztcbmltcG9ydCB1bml0bGVzcyBmcm9tICdAZW1vdGlvbi91bml0bGVzcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SID0gXCJZb3UgaGF2ZSBpbGxlZ2FsIGVzY2FwZSBzZXF1ZW5jZSBpbiB5b3VyIHRlbXBsYXRlIGxpdGVyYWwsIG1vc3QgbGlrZWx5IGluc2lkZSBjb250ZW50J3MgcHJvcGVydHkgdmFsdWUuXFxuQmVjYXVzZSB5b3Ugd3JpdGUgeW91ciBDU1MgaW5zaWRlIGEgSmF2YVNjcmlwdCBzdHJpbmcgeW91IGFjdHVhbGx5IGhhdmUgdG8gZG8gZG91YmxlIGVzY2FwaW5nLCBzbyBmb3IgZXhhbXBsZSBcXFwiY29udGVudDogJ1xcXFwwMGQ3JztcXFwiIHNob3VsZCBiZWNvbWUgXFxcImNvbnRlbnQ6ICdcXFxcXFxcXDAwZDcnO1xcXCIuXFxuWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdGhpcyBoZXJlOlxcbmh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1RlbXBsYXRlX2xpdGVyYWxzI0VTMjAxOF9yZXZpc2lvbl9vZl9pbGxlZ2FsX2VzY2FwZV9zZXF1ZW5jZXNcIjtcbnZhciBVTkRFRklORURfQVNfT0JKRUNUX0tFWV9FUlJPUiA9IFwiWW91IGhhdmUgcGFzc2VkIGluIGZhbHN5IHZhbHVlIGFzIHN0eWxlIG9iamVjdCdzIGtleSAoY2FuIGhhcHBlbiB3aGVuIGluIGV4YW1wbGUgeW91IHBhc3MgdW5leHBvcnRlZCBjb21wb25lbnQgYXMgY29tcHV0ZWQga2V5KS5cIjtcbnZhciBoeXBoZW5hdGVSZWdleCA9IC9bQS1aXXxebXMvZztcbnZhciBhbmltYXRpb25SZWdleCA9IC9fRU1PXyhbXl9dKz8pXyhbXl0qPylfRU1PXy9nO1xuXG52YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIGlzQ3VzdG9tUHJvcGVydHkocHJvcGVydHkpIHtcbiAgcmV0dXJuIHByb3BlcnR5LmNoYXJDb2RlQXQoMSkgPT09IDQ1O1xufTtcblxudmFyIGlzUHJvY2Vzc2FibGVWYWx1ZSA9IGZ1bmN0aW9uIGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJztcbn07XG5cbnZhciBwcm9jZXNzU3R5bGVOYW1lID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAoc3R5bGVOYW1lKSB7XG4gIHJldHVybiBpc0N1c3RvbVByb3BlcnR5KHN0eWxlTmFtZSkgPyBzdHlsZU5hbWUgOiBzdHlsZU5hbWUucmVwbGFjZShoeXBoZW5hdGVSZWdleCwgJy0kJicpLnRvTG93ZXJDYXNlKCk7XG59KTtcblxudmFyIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IHAxLFxuICAgICAgICAgICAgICBzdHlsZXM6IHAyLFxuICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcDE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGlmICh1bml0bGVzc1trZXldICE9PSAxICYmICFpc0N1c3RvbVByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgY29udGVudFZhbHVlUGF0dGVybiA9IC8odmFyfGF0dHJ8Y291bnRlcnM/fHVybHxlbGVtZW50fCgoKHJlcGVhdGluZy0pPyhsaW5lYXJ8cmFkaWFsKSl8Y29uaWMpLWdyYWRpZW50KVxcKHwobm8tKT8ob3BlbnxjbG9zZSktcXVvdGUvO1xuICB2YXIgY29udGVudFZhbHVlcyA9IFsnbm9ybWFsJywgJ25vbmUnLCAnaW5pdGlhbCcsICdpbmhlcml0JywgJ3Vuc2V0J107XG4gIHZhciBvbGRQcm9jZXNzU3R5bGVWYWx1ZSA9IHByb2Nlc3NTdHlsZVZhbHVlO1xuICB2YXIgbXNQYXR0ZXJuID0gL14tbXMtLztcbiAgdmFyIGh5cGhlblBhdHRlcm4gPSAvLSguKS9nO1xuICB2YXIgaHlwaGVuYXRlZENhY2hlID0ge307XG5cbiAgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCBjb250ZW50VmFsdWVzLmluZGV4T2YodmFsdWUpID09PSAtMSAmJiAhY29udGVudFZhbHVlUGF0dGVybi50ZXN0KHZhbHVlKSAmJiAodmFsdWUuY2hhckF0KDApICE9PSB2YWx1ZS5jaGFyQXQodmFsdWUubGVuZ3RoIC0gMSkgfHwgdmFsdWUuY2hhckF0KDApICE9PSAnXCInICYmIHZhbHVlLmNoYXJBdCgwKSAhPT0gXCInXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBzZWVtIHRvIGJlIHVzaW5nIGEgdmFsdWUgZm9yICdjb250ZW50JyB3aXRob3V0IHF1b3RlcywgdHJ5IHJlcGxhY2luZyBpdCB3aXRoIGBjb250ZW50OiAnXFxcIlwiICsgdmFsdWUgKyBcIlxcXCInYFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvY2Vzc2VkID0gb2xkUHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSk7XG5cbiAgICBpZiAocHJvY2Vzc2VkICE9PSAnJyAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIGtleS5pbmRleE9mKCctJykgIT09IC0xICYmIGh5cGhlbmF0ZWRDYWNoZVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGh5cGhlbmF0ZWRDYWNoZVtrZXldID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJVc2luZyBrZWJhYi1jYXNlIGZvciBjc3MgcHJvcGVydGllcyBpbiBvYmplY3RzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiBcIiArIGtleS5yZXBsYWNlKG1zUGF0dGVybiwgJ21zLScpLnJlcGxhY2UoaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24gKHN0ciwgX2NoYXIpIHtcbiAgICAgICAgcmV0dXJuIF9jaGFyLnRvVXBwZXJDYXNlKCk7XG4gICAgICB9KSArIFwiP1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICB9O1xufVxuXG52YXIgbm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UgPSAnQ29tcG9uZW50IHNlbGVjdG9ycyBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggJyArICdAZW1vdGlvbi9iYWJlbC1wbHVnaW4sIHRoZSBzd2MgRW1vdGlvbiBwbHVnaW4sIG9yIGFub3RoZXIgRW1vdGlvbi1hd2FyZSAnICsgJ2NvbXBpbGVyIHRyYW5zZm9ybS4nO1xuXG5mdW5jdGlvbiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKSB7XG4gIGlmIChpbnRlcnBvbGF0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoaW50ZXJwb2xhdGlvbi5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbnRlcnBvbGF0aW9uLnRvU3RyaW5nKCkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnBvbGF0aW9uO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5hbmltID09PSAxKSB7XG4gICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgbmFtZTogaW50ZXJwb2xhdGlvbi5uYW1lLFxuICAgICAgICAgICAgc3R5bGVzOiBpbnRlcnBvbGF0aW9uLnN0eWxlcyxcbiAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGludGVycG9sYXRpb24ubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBpbnRlcnBvbGF0aW9uLm5leHQ7XG5cbiAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHRoaW5nIGV2ZXIgYnV0IHRoaXMgaXMgYSBwcmV0dHkgcmFyZSBjYXNlXG4gICAgICAgICAgICAvLyBhbmQgdGhlcmUgd2lsbCBiZSB2ZXJ5IGZldyBpdGVyYXRpb25zIG9mIHRoaXMgZ2VuZXJhbGx5XG4gICAgICAgICAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuZXh0Lm5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBuZXh0LnN0eWxlcyxcbiAgICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVzID0gaW50ZXJwb2xhdGlvbi5zdHlsZXMgKyBcIjtcIjtcblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGludGVycG9sYXRpb24ubWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0eWxlcyArPSBpbnRlcnBvbGF0aW9uLm1hcDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAge1xuICAgICAgICBpZiAobWVyZ2VkUHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBwcmV2aW91c0N1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgY3Vyc29yID0gcHJldmlvdXNDdXJzb3I7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Z1bmN0aW9ucyB0aGF0IGFyZSBpbnRlcnBvbGF0ZWQgaW4gY3NzIGNhbGxzIHdpbGwgYmUgc3RyaW5naWZpZWQuXFxuJyArICdJZiB5b3Ugd2FudCB0byBoYXZlIGEgY3NzIGNhbGwgYmFzZWQgb24gcHJvcHMsIGNyZWF0ZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNzcyBjYWxsIGxpa2UgdGhpc1xcbicgKyAnbGV0IGR5bmFtaWNTdHlsZSA9IChwcm9wcykgPT4gY3NzYGNvbG9yOiAke3Byb3BzLmNvbG9yfWBcXG4nICsgJ0l0IGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgd2l0aCBwcm9wcyBvciBpbnRlcnBvbGF0ZWQgaW4gYSBzdHlsZWQgY2FsbCBsaWtlIHRoaXNcXG4nICsgXCJsZXQgU29tZUNvbXBvbmVudCA9IHN0eWxlZCgnZGl2JylgJHtkeW5hbWljU3R5bGV9YFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gW107XG4gICAgICAgIHZhciByZXBsYWNlZCA9IGludGVycG9sYXRpb24ucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICB2YXIgZmFrZVZhck5hbWUgPSBcImFuaW1hdGlvblwiICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgICAgbWF0Y2hlZC5wdXNoKFwiY29uc3QgXCIgKyBmYWtlVmFyTmFtZSArIFwiID0ga2V5ZnJhbWVzYFwiICsgcDIucmVwbGFjZSgvXkBrZXlmcmFtZXMgYW5pbWF0aW9uLVxcdysvLCAnJykgKyBcImBcIik7XG4gICAgICAgICAgcmV0dXJuIFwiJHtcIiArIGZha2VWYXJOYW1lICsgXCJ9XCI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2BrZXlmcmFtZXNgIG91dHB1dCBnb3QgaW50ZXJwb2xhdGVkIGludG8gcGxhaW4gc3RyaW5nLCBwbGVhc2Ugd3JhcCBpdCB3aXRoIGBjc3NgLlxcblxcbicgKyAnSW5zdGVhZCBvZiBkb2luZyB0aGlzOlxcblxcbicgKyBbXS5jb25jYXQobWF0Y2hlZCwgW1wiYFwiICsgcmVwbGFjZWQgKyBcImBcIl0pLmpvaW4oJ1xcbicpICsgJ1xcblxcbllvdSBzaG91bGQgd3JhcCBpdCB3aXRoIGBjc3NgIGxpa2UgdGhpczpcXG5cXG4nICsgKFwiY3NzYFwiICsgcmVwbGFjZWQgKyBcImBcIikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIGlmIChyZWdpc3RlcmVkID09IG51bGwpIHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGlvbjtcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2ludGVycG9sYXRpb25dO1xuICByZXR1cm4gY2FjaGVkICE9PSB1bmRlZmluZWQgPyBjYWNoZWQgOiBpbnRlcnBvbGF0aW9uO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmopIHtcbiAgdmFyIHN0cmluZyA9ICcnO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgc3RyaW5nICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9ialtpXSkgKyBcIjtcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2tleSBpbiBvYmopIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtfa2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW3ZhbHVlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IF9rZXkgKyBcIntcIiArIHJlZ2lzdGVyZWRbdmFsdWVdICsgXCJ9XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKF9rZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShfa2V5LCB2YWx1ZSkgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKF9rZXkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHR5cGVvZiB2YWx1ZVswXSA9PT0gJ3N0cmluZycgJiYgKHJlZ2lzdGVyZWQgPT0gbnVsbCB8fCByZWdpc3RlcmVkW3ZhbHVlWzBdXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB2YWx1ZS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWVbX2ldKSkge1xuICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoX2tleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChfa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgaW50ZXJwb2xhdGVkICsgXCI7XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIF9rZXkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFVOREVGSU5FRF9BU19PQkpFQ1RfS0VZX0VSUk9SKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gX2tleSArIFwie1wiICsgaW50ZXJwb2xhdGVkICsgXCJ9XCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG52YXIgbGFiZWxQYXR0ZXJuID0gL2xhYmVsOlxccyooW15cXHM7XFxue10rKVxccyooO3wkKS9nO1xudmFyIHNvdXJjZU1hcFBhdHRlcm47XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHNvdXJjZU1hcFBhdHRlcm4gPSAvXFwvXFwqI1xcc3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvblxcL2pzb247XFxTK1xccytcXCpcXC8vZztcbn0gLy8gdGhpcyBpcyB0aGUgY3Vyc29yIGZvciBrZXlmcmFtZXNcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cblxudmFyIGN1cnNvcjtcbnZhciBzZXJpYWxpemVTdHlsZXMgPSBmdW5jdGlvbiBzZXJpYWxpemVTdHlsZXMoYXJncywgcmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdICE9PSBudWxsICYmIGFyZ3NbMF0uc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYXJnc1swXTtcbiAgfVxuXG4gIHZhciBzdHJpbmdNb2RlID0gdHJ1ZTtcbiAgdmFyIHN0eWxlcyA9ICcnO1xuICBjdXJzb3IgPSB1bmRlZmluZWQ7XG4gIHZhciBzdHJpbmdzID0gYXJnc1swXTtcblxuICBpZiAoc3RyaW5ncyA9PSBudWxsIHx8IHN0cmluZ3MucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHJpbmdNb2RlID0gZmFsc2U7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHN0cmluZ3MpO1xuICB9IGVsc2Uge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgfVxuXG4gICAgc3R5bGVzICs9IHN0cmluZ3NbMF07XG4gIH0gLy8gd2Ugc3RhcnQgYXQgMSBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGZpcnN0IGFyZ1xuXG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGFyZ3NbaV0pO1xuXG4gICAgaWYgKHN0cmluZ01vZGUpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgc3R5bGVzICs9IHN0cmluZ3NbaV07XG4gICAgfVxuICB9XG5cbiAgdmFyIHNvdXJjZU1hcDtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHN0eWxlcyA9IHN0eWxlcy5yZXBsYWNlKHNvdXJjZU1hcFBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgc291cmNlTWFwID0gbWF0Y2g7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG4gIH0gLy8gdXNpbmcgYSBnbG9iYWwgcmVnZXggd2l0aCAuZXhlYyBpcyBzdGF0ZWZ1bCBzbyBsYXN0SW5kZXggaGFzIHRvIGJlIHJlc2V0IGVhY2ggdGltZVxuXG5cbiAgbGFiZWxQYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gIHZhciBpZGVudGlmaWVyTmFtZSA9ICcnO1xuICB2YXIgbWF0Y2g7IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWI4MDljMmNmMjk0OTgwMGEwZjYxZmI1XG5cbiAgd2hpbGUgKChtYXRjaCA9IGxhYmVsUGF0dGVybi5leGVjKHN0eWxlcykpICE9PSBudWxsKSB7XG4gICAgaWRlbnRpZmllck5hbWUgKz0gJy0nICsgLy8gJEZsb3dGaXhNZSB3ZSBrbm93IGl0J3Mgbm90IG51bGxcbiAgICBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFNlcmlhbGl6ZWRTdHlsZXMgdHlwZSBkb2Vzbid0IGhhdmUgdG9TdHJpbmcgcHJvcGVydHkgKGFuZCB3ZSBkb24ndCB3YW50IHRvIGFkZCBpdClcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHN0eWxlczogc3R5bGVzLFxuICAgICAgbWFwOiBzb3VyY2VNYXAsXG4gICAgICBuZXh0OiBjdXJzb3IsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufTtcblxuZXhwb3J0IHsgc2VyaWFsaXplU3R5bGVzIH07XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbnZhciBpc0Jyb3dzZXIgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG52YXIgc3luY0ZhbGxiYWNrID0gZnVuY3Rpb24gc3luY0ZhbGxiYWNrKGNyZWF0ZSkge1xuICByZXR1cm4gY3JlYXRlKCk7XG59O1xuXG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0ID0gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gPyBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA6IGZhbHNlO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgPSAhaXNCcm93c2VyID8gc3luY0ZhbGxiYWNrIDogdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IHN5bmNGYWxsYmFjaztcbnZhciB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgPSB1c2VJbnNlcnRpb25FZmZlY3QgfHwgdXNlTGF5b3V0RWZmZWN0O1xuXG5leHBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgfTtcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIGZvcndhcmRSZWYsIGNyZWF0ZUVsZW1lbnQsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZUNhY2hlIGZyb20gJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCB3ZWFrTWVtb2l6ZSBmcm9tICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGZyb20gJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5lc20uanMnO1xuaW1wb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGluc2VydFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgaXNCcm93c2VyID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgRW1vdGlvbkNhY2hlQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNvbnRleHQoIC8vIHdlJ3JlIGRvaW5nIHRoaXMgdG8gYXZvaWQgcHJlY29uc3RydWN0J3MgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIGluIHRoaXMgb25lIGNhc2Vcbi8vIGJlY2F1c2UgdGhpcyBtb2R1bGUgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB0aGUgYnJvd3NlciBhbmQgbm9kZVxuLy8gYnV0IGl0J3MgYWxzbyByZXF1aXJlZCBpbiByZWFjdCBuYXRpdmUgYW5kIHNpbWlsYXIgZW52aXJvbm1lbnRzIHNvbWV0aW1lc1xuLy8gYW5kIHdlIGNvdWxkIGhhdmUgYSBzcGVjaWFsIGJ1aWxkIGp1c3QgZm9yIHRoYXRcbi8vIGJ1dCB0aGlzIGlzIG11Y2ggZWFzaWVyIGFuZCB0aGUgbmF0aXZlIHBhY2thZ2VzXG4vLyBtaWdodCB1c2UgYSBkaWZmZXJlbnQgdGhlbWUgY29udGV4dCBpbiB0aGUgZnV0dXJlIGFueXdheVxudHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNhY2hlKHtcbiAga2V5OiAnY3NzJ1xufSkgOiBudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRW1vdGlvbkNhY2hlQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ2FjaGVDb250ZXh0Jztcbn1cblxudmFyIENhY2hlUHJvdmlkZXIgPSBFbW90aW9uQ2FjaGVDb250ZXh0LlByb3ZpZGVyO1xudmFyIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHVzZUVtb3Rpb25DYWNoZSgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoRW1vdGlvbkNhY2hlQ29udGV4dCk7XG59O1xuXG52YXIgd2l0aEVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHdpdGhFbW90aW9uQ2FjaGUoZnVuYykge1xuICAvLyAkRmxvd0ZpeE1lXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG5pZiAoIWlzQnJvd3Nlcikge1xuICB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZShmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgdmFyIGNhY2hlID0gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcblxuICAgICAgaWYgKGNhY2hlID09PSBudWxsKSB7XG4gICAgICAgIC8vIHllcywgd2UncmUgcG90ZW50aWFsbHkgY3JlYXRpbmcgdGhpcyBvbiBldmVyeSByZW5kZXJcbiAgICAgICAgLy8gaXQgZG9lc24ndCBhY3R1YWxseSBtYXR0ZXIgdGhvdWdoIHNpbmNlIGl0J3Mgb25seSBvbiB0aGUgc2VydmVyXG4gICAgICAgIC8vIHNvIHRoZXJlIHdpbGwgb25seSBldmVyeSBiZSBhIHNpbmdsZSByZW5kZXJcbiAgICAgICAgLy8gdGhhdCBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSBiZWNhdXNlIG9mIHN1c3BlbnNlIGFuZCBldGMuIGJ1dCBmb3Igbm93LFxuICAgICAgICAvLyB0aGlzIHdvcmtzIGFuZCBpIGRvbid0IHdhbnQgdG8gb3B0aW1pc2UgZm9yIGEgZnV0dXJlIHRoaW5nIHRoYXQgd2UgYXJlbid0IHN1cmUgYWJvdXRcbiAgICAgICAgY2FjaGUgPSBjcmVhdGVDYWNoZSh7XG4gICAgICAgICAga2V5OiAnY3NzJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jcmVhdGVFbGVtZW50KEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICB2YWx1ZTogY2FjaGVcbiAgICAgICAgfSwgZnVuYyhwcm9wcywgY2FjaGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn1cblxudmFyIFRoZW1lQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNvbnRleHQoe30pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUaGVtZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnRW1vdGlvblRoZW1lQ29udGV4dCc7XG59XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBtZXJnZWRUaGVtZSA9IHRoZW1lKG91dGVyVGhlbWUpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKG1lcmdlZFRoZW1lID09IG51bGwgfHwgdHlwZW9mIG1lcmdlZFRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG1lcmdlZFRoZW1lKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW1RoZW1lUHJvdmlkZXJdIFBsZWFzZSByZXR1cm4gYW4gb2JqZWN0IGZyb20geW91ciB0aGVtZSBmdW5jdGlvbiwgaS5lLiB0aGVtZT17KCkgPT4gKHt9KX0hJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKHRoZW1lID09IG51bGwgfHwgdHlwZW9mIHRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHRoZW1lKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tUaGVtZVByb3ZpZGVyXSBQbGVhc2UgbWFrZSB5b3VyIHRoZW1lIHByb3AgYSBwbGFpbiBvYmplY3QnKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3V0ZXJUaGVtZSwgdGhlbWUpO1xufTtcblxudmFyIGNyZWF0ZUNhY2hlV2l0aFRoZW1lID0gLyogI19fUFVSRV9fICovd2Vha01lbW9pemUoZnVuY3Rpb24gKG91dGVyVGhlbWUpIHtcbiAgcmV0dXJuIHdlYWtNZW1vaXplKGZ1bmN0aW9uICh0aGVtZSkge1xuICAgIHJldHVybiBnZXRUaGVtZShvdXRlclRoZW1lLCB0aGVtZSk7XG4gIH0pO1xufSk7XG52YXIgVGhlbWVQcm92aWRlciA9IGZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHMpIHtcbiAgdmFyIHRoZW1lID0gdXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuXG4gIGlmIChwcm9wcy50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICB0aGVtZSA9IGNyZWF0ZUNhY2hlV2l0aFRoZW1lKHRoZW1lKShwcm9wcy50aGVtZSk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnQoVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIHByb3BzLmNoaWxkcmVuKTtcbn07XG5mdW5jdGlvbiB3aXRoVGhlbWUoQ29tcG9uZW50KSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuXG4gIHZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciB0aGVtZSA9IHVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZTogdGhlbWUsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH07IC8vICRGbG93Rml4TWVcblxuXG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihyZW5kZXIpO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGdldExhc3RQYXJ0ID0gZnVuY3Rpb24gZ2V0TGFzdFBhcnQoZnVuY3Rpb25OYW1lKSB7XG4gIC8vIFRoZSBtYXRjaCBtYXkgYmUgc29tZXRoaW5nIGxpa2UgJ09iamVjdC5jcmVhdGVFbW90aW9uUHJvcHMnIG9yXG4gIC8vICdMb2FkZXIucHJvdG90eXBlLnJlbmRlcidcbiAgdmFyIHBhcnRzID0gZnVuY3Rpb25OYW1lLnNwbGl0KCcuJyk7XG4gIHJldHVybiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbn07XG5cbnZhciBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUgPSBmdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUobGluZSkge1xuICAvLyBWOFxuICB2YXIgbWF0Y2ggPSAvXlxccythdFxccysoW0EtWmEtejAtOSQuXSspXFxzLy5leGVjKGxpbmUpO1xuICBpZiAobWF0Y2gpIHJldHVybiBnZXRMYXN0UGFydChtYXRjaFsxXSk7IC8vIFNhZmFyaSAvIEZpcmVmb3hcblxuICBtYXRjaCA9IC9eKFtBLVphLXowLTkkLl0rKUAvLmV4ZWMobGluZSk7XG4gIGlmIChtYXRjaCkgcmV0dXJuIGdldExhc3RQYXJ0KG1hdGNoWzFdKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciBpbnRlcm5hbFJlYWN0RnVuY3Rpb25OYW1lcyA9IC8qICNfX1BVUkVfXyAqL25ldyBTZXQoWydyZW5kZXJXaXRoSG9va3MnLCAncHJvY2Vzc0NoaWxkJywgJ2ZpbmlzaENsYXNzQ29tcG9uZW50JywgJ3JlbmRlclRvU3RyaW5nJ10pOyAvLyBUaGVzZSBpZGVudGlmaWVycyBjb21lIGZyb20gZXJyb3Igc3RhY2tzLCBzbyB0aGV5IGhhdmUgdG8gYmUgdmFsaWQgSlNcbi8vIGlkZW50aWZpZXJzLCB0aHVzIHdlIG9ubHkgbmVlZCB0byByZXBsYWNlIHdoYXQgaXMgYSB2YWxpZCBjaGFyYWN0ZXIgZm9yIEpTLFxuLy8gYnV0IG5vdCBmb3IgQ1NTLlxuXG52YXIgc2FuaXRpemVJZGVudGlmaWVyID0gZnVuY3Rpb24gc2FuaXRpemVJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgcmV0dXJuIGlkZW50aWZpZXIucmVwbGFjZSgvXFwkL2csICctJyk7XG59O1xuXG52YXIgZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZSA9IGZ1bmN0aW9uIGdldExhYmVsRnJvbVN0YWNrVHJhY2Uoc3RhY2tUcmFjZSkge1xuICBpZiAoIXN0YWNrVHJhY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIHZhciBsaW5lcyA9IHN0YWNrVHJhY2Uuc3BsaXQoJ1xcbicpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZnVuY3Rpb25OYW1lID0gZ2V0RnVuY3Rpb25OYW1lRnJvbVN0YWNrVHJhY2VMaW5lKGxpbmVzW2ldKTsgLy8gVGhlIGZpcnN0IGxpbmUgb2YgVjggc3RhY2sgdHJhY2VzIGlzIGp1c3QgXCJFcnJvclwiXG5cbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgY29udGludWU7IC8vIElmIHdlIHJlYWNoIG9uZSBvZiB0aGVzZSwgd2UgaGF2ZSBnb25lIHRvbyBmYXIgYW5kIHNob3VsZCBxdWl0XG5cbiAgICBpZiAoaW50ZXJuYWxSZWFjdEZ1bmN0aW9uTmFtZXMuaGFzKGZ1bmN0aW9uTmFtZSkpIGJyZWFrOyAvLyBUaGUgY29tcG9uZW50IG5hbWUgaXMgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBzdGFjayB0aGF0IHN0YXJ0cyB3aXRoIGFuXG4gICAgLy8gdXBwZXJjYXNlIGxldHRlclxuXG4gICAgaWYgKC9eW0EtWl0vLnRlc3QoZnVuY3Rpb25OYW1lKSkgcmV0dXJuIHNhbml0aXplSWRlbnRpZmllcihmdW5jdGlvbk5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciB0eXBlUHJvcE5hbWUgPSAnX19FTU9USU9OX1RZUEVfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgbGFiZWxQcm9wTmFtZSA9ICdfX0VNT1RJT05fTEFCRUxfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgY3JlYXRlRW1vdGlvblByb3BzID0gZnVuY3Rpb24gY3JlYXRlRW1vdGlvblByb3BzKHR5cGUsIHByb3BzKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBwcm9wcy5jc3MgPT09ICdzdHJpbmcnICYmIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgY3NzIGRlY2xhcmF0aW9uXG4gIHByb3BzLmNzcy5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyaW5ncyBhcmUgbm90IGFsbG93ZWQgYXMgY3NzIHByb3AgdmFsdWVzLCBwbGVhc2Ugd3JhcCBpdCBpbiBhIGNzcyB0ZW1wbGF0ZSBsaXRlcmFsIGZyb20gJ0BlbW90aW9uL3JlYWN0JyBsaWtlIHRoaXM6IGNzc2BcIiArIHByb3BzLmNzcyArIFwiYFwiKTtcbiAgfVxuXG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBrZXkpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wc1t0eXBlUHJvcE5hbWVdID0gdHlwZTsgLy8gRm9yIHBlcmZvcm1hbmNlLCBvbmx5IGNhbGwgZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZSBpbiBkZXZlbG9wbWVudCBhbmQgd2hlblxuICAvLyB0aGUgbGFiZWwgaGFzbid0IGFscmVhZHkgYmVlbiBjb21wdXRlZFxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICEhcHJvcHMuY3NzICYmICh0eXBlb2YgcHJvcHMuY3NzICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgcHJvcHMuY3NzLm5hbWUgIT09ICdzdHJpbmcnIHx8IHByb3BzLmNzcy5uYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpKSB7XG4gICAgdmFyIGxhYmVsID0gZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZShuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgaWYgKGxhYmVsKSBuZXdQcm9wc1tsYWJlbFByb3BOYW1lXSA9IGxhYmVsO1xuICB9XG5cbiAgcmV0dXJuIG5ld1Byb3BzO1xufTtcblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkID0gX3JlZi5zZXJpYWxpemVkLFxuICAgICAgaXNTdHJpbmdUYWcgPSBfcmVmLmlzU3RyaW5nVGFnO1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB2YXIgcnVsZXMgPSB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIH0pO1xuXG4gIGlmICghaXNCcm93c2VyICYmIHJ1bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgX3JlZjI7XG5cbiAgICB2YXIgc2VyaWFsaXplZE5hbWVzID0gc2VyaWFsaXplZC5uYW1lO1xuICAgIHZhciBuZXh0ID0gc2VyaWFsaXplZC5uZXh0O1xuXG4gICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VyaWFsaXplZE5hbWVzICs9ICcgJyArIG5leHQubmFtZTtcbiAgICAgIG5leHQgPSBuZXh0Lm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgKF9yZWYyID0ge30sIF9yZWYyW1wiZGF0YS1lbW90aW9uXCJdID0gY2FjaGUua2V5ICsgXCIgXCIgKyBzZXJpYWxpemVkTmFtZXMsIF9yZWYyLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID0ge1xuICAgICAgX19odG1sOiBydWxlc1xuICAgIH0sIF9yZWYyLm5vbmNlID0gY2FjaGUuc2hlZXQubm9uY2UsIF9yZWYyKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBFbW90aW9uID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlLCByZWYpIHtcbiAgdmFyIGNzc1Byb3AgPSBwcm9wcy5jc3M7IC8vIHNvIHRoYXQgdXNpbmcgYGNzc2AgZnJvbSBgZW1vdGlvbmAgYW5kIHBhc3NpbmcgdGhlIHJlc3VsdCB0byB0aGUgY3NzIHByb3Agd29ya3NcbiAgLy8gbm90IHBhc3NpbmcgdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8gc2VyaWFsaXplU3R5bGVzIGJlY2F1c2UgaXQgd291bGRcbiAgLy8gbWFrZSBjZXJ0YWluIGJhYmVsIG9wdGltaXNhdGlvbnMgbm90IHBvc3NpYmxlXG5cbiAgaWYgKHR5cGVvZiBjc3NQcm9wID09PSAnc3RyaW5nJyAmJiBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdICE9PSB1bmRlZmluZWQpIHtcbiAgICBjc3NQcm9wID0gY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXTtcbiAgfVxuXG4gIHZhciBXcmFwcGVkQ29tcG9uZW50ID0gcHJvcHNbdHlwZVByb3BOYW1lXTtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbY3NzUHJvcF07XG4gIHZhciBjbGFzc05hbWUgPSAnJztcblxuICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKGNhY2hlLnJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIHByb3BzLmNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuY2xhc3NOYW1lICE9IG51bGwpIHtcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKHJlZ2lzdGVyZWRTdHlsZXMsIHVuZGVmaW5lZCwgdXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm5hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHZhciBsYWJlbEZyb21TdGFjayA9IHByb3BzW2xhYmVsUHJvcE5hbWVdO1xuXG4gICAgaWYgKGxhYmVsRnJvbVN0YWNrKSB7XG4gICAgICBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzZXJpYWxpemVkLCAnbGFiZWw6JyArIGxhYmVsRnJvbVN0YWNrICsgJzsnXSk7XG4gICAgfVxuICB9XG5cbiAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB2YXIgbmV3UHJvcHMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcywga2V5KSAmJiBrZXkgIT09ICdjc3MnICYmIGtleSAhPT0gdHlwZVByb3BOYW1lICYmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nIHx8IGtleSAhPT0gbGFiZWxQcm9wTmFtZSkpIHtcbiAgICAgIG5ld1Byb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzLnJlZiA9IHJlZjtcbiAgbmV3UHJvcHMuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICByZXR1cm4gLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9jcmVhdGVFbGVtZW50KEluc2VydGlvbiwge1xuICAgIGNhY2hlOiBjYWNoZSxcbiAgICBzZXJpYWxpemVkOiBzZXJpYWxpemVkLFxuICAgIGlzU3RyaW5nVGFnOiB0eXBlb2YgV3JhcHBlZENvbXBvbmVudCA9PT0gJ3N0cmluZydcbiAgfSksIC8qI19fUFVSRV9fKi9jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIG5ld1Byb3BzKSk7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRW1vdGlvbi5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ3NzUHJvcEludGVybmFsJztcbn1cblxuZXhwb3J0IHsgQ2FjaGVQcm92aWRlciBhcyBDLCBFbW90aW9uIGFzIEUsIFRoZW1lQ29udGV4dCBhcyBULCBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUgYXMgXywgVGhlbWVQcm92aWRlciBhcyBhLCB3aXRoVGhlbWUgYXMgYiwgY3JlYXRlRW1vdGlvblByb3BzIGFzIGMsIGhhc093blByb3BlcnR5IGFzIGgsIGlzQnJvd3NlciBhcyBpLCB1c2VUaGVtZSBhcyB1LCB3aXRoRW1vdGlvbkNhY2hlIGFzIHcgfTtcbiIsImltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIHVzZUNvbnRleHQsIHVzZVJlZiwgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCB7IGggYXMgaGFzT3duUHJvcGVydHksIEUgYXMgRW1vdGlvbiwgYyBhcyBjcmVhdGVFbW90aW9uUHJvcHMsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgVCBhcyBUaGVtZUNvbnRleHQsIGkgYXMgaXNCcm93c2VyJDEgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC0zODM4YmE5ZS5lc20uanMnO1xuZXhwb3J0IHsgQyBhcyBDYWNoZVByb3ZpZGVyLCBUIGFzIFRoZW1lQ29udGV4dCwgYSBhcyBUaGVtZVByb3ZpZGVyLCBfIGFzIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSwgdSBhcyB1c2VUaGVtZSwgdyBhcyB3aXRoRW1vdGlvbkNhY2hlLCBiIGFzIHdpdGhUaGVtZSB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LTM4MzhiYTllLmVzbS5qcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcbmltcG9ydCAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmVzbS5qcyc7XG5pbXBvcnQgeyBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBnZXRSZWdpc3RlcmVkU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjaywgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcblxudmFyIHBrZyA9IHtcblx0bmFtZTogXCJAZW1vdGlvbi9yZWFjdFwiLFxuXHR2ZXJzaW9uOiBcIjExLjEwLjZcIixcblx0bWFpbjogXCJkaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLmpzXCIsXG5cdG1vZHVsZTogXCJkaXN0L2Vtb3Rpb24tcmVhY3QuZXNtLmpzXCIsXG5cdGJyb3dzZXI6IHtcblx0XHRcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmVzbS5qc1wiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzXCJcblx0fSxcblx0ZXhwb3J0czoge1xuXHRcdFwiLlwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0Lndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmNqcy5qc1wiXG5cdFx0fSxcblx0XHRcIi4vanN4LXJ1bnRpbWVcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS53b3JrZXIuZXNtLmpzXCIsXG5cdFx0XHRcdGJyb3dzZXI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuYnJvd3Nlci5lc20uanNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImRlZmF1bHRcIjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5janMuanNcIlxuXHRcdH0sXG5cdFx0XCIuL19pc29sYXRlZC1obnJzXCI6IHtcblx0XHRcdG1vZHVsZToge1xuXHRcdFx0XHR3b3JrZXI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMud29ya2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRicm93c2VyOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmVzbS5qc1wiXG5cdFx0XHR9LFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9qc3gtZGV2LXJ1bnRpbWVcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLmJyb3dzZXIuZXNtLmpzXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImRlZmF1bHRcIjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLmNqcy5qc1wiXG5cdFx0fSxcblx0XHRcIi4vcGFja2FnZS5qc29uXCI6IFwiLi9wYWNrYWdlLmpzb25cIixcblx0XHRcIi4vdHlwZXMvY3NzLXByb3BcIjogXCIuL3R5cGVzL2Nzcy1wcm9wLmQudHNcIixcblx0XHRcIi4vbWFjcm9cIjogXCIuL21hY3JvLmpzXCJcblx0fSxcblx0dHlwZXM6IFwidHlwZXMvaW5kZXguZC50c1wiLFxuXHRmaWxlczogW1xuXHRcdFwic3JjXCIsXG5cdFx0XCJkaXN0XCIsXG5cdFx0XCJqc3gtcnVudGltZVwiLFxuXHRcdFwianN4LWRldi1ydW50aW1lXCIsXG5cdFx0XCJfaXNvbGF0ZWQtaG5yc1wiLFxuXHRcdFwidHlwZXMvKi5kLnRzXCIsXG5cdFx0XCJtYWNyby5qc1wiLFxuXHRcdFwibWFjcm8uZC50c1wiLFxuXHRcdFwibWFjcm8uanMuZmxvd1wiXG5cdF0sXG5cdHNpZGVFZmZlY3RzOiBmYWxzZSxcblx0YXV0aG9yOiBcIkVtb3Rpb24gQ29udHJpYnV0b3JzXCIsXG5cdGxpY2Vuc2U6IFwiTUlUXCIsXG5cdHNjcmlwdHM6IHtcblx0XHRcInRlc3Q6dHlwZXNjcmlwdFwiOiBcImR0c2xpbnQgdHlwZXNcIlxuXHR9LFxuXHRkZXBlbmRlbmNpZXM6IHtcblx0XHRcIkBiYWJlbC9ydW50aW1lXCI6IFwiXjcuMTguM1wiLFxuXHRcdFwiQGVtb3Rpb24vYmFiZWwtcGx1Z2luXCI6IFwiXjExLjEwLjZcIixcblx0XHRcIkBlbW90aW9uL2NhY2hlXCI6IFwiXjExLjEwLjVcIixcblx0XHRcIkBlbW90aW9uL3NlcmlhbGl6ZVwiOiBcIl4xLjEuMVwiLFxuXHRcdFwiQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3NcIjogXCJeMS4wLjBcIixcblx0XHRcIkBlbW90aW9uL3V0aWxzXCI6IFwiXjEuMi4wXCIsXG5cdFx0XCJAZW1vdGlvbi93ZWFrLW1lbW9pemVcIjogXCJeMC4zLjBcIixcblx0XHRcImhvaXN0LW5vbi1yZWFjdC1zdGF0aWNzXCI6IFwiXjMuMy4xXCJcblx0fSxcblx0cGVlckRlcGVuZGVuY2llczoge1xuXHRcdHJlYWN0OiBcIj49MTYuOC4wXCJcblx0fSxcblx0cGVlckRlcGVuZGVuY2llc01ldGE6IHtcblx0XHRcIkB0eXBlcy9yZWFjdFwiOiB7XG5cdFx0XHRvcHRpb25hbDogdHJ1ZVxuXHRcdH1cblx0fSxcblx0ZGV2RGVwZW5kZW5jaWVzOiB7XG5cdFx0XCJAZGVmaW5pdGVseXR5cGVkL2R0c2xpbnRcIjogXCIwLjAuMTEyXCIsXG5cdFx0XCJAZW1vdGlvbi9jc3NcIjogXCIxMS4xMC42XCIsXG5cdFx0XCJAZW1vdGlvbi9jc3MtcHJldHRpZmllclwiOiBcIjEuMS4xXCIsXG5cdFx0XCJAZW1vdGlvbi9zZXJ2ZXJcIjogXCIxMS4xMC4wXCIsXG5cdFx0XCJAZW1vdGlvbi9zdHlsZWRcIjogXCIxMS4xMC42XCIsXG5cdFx0XCJodG1sLXRhZy1uYW1lc1wiOiBcIl4xLjEuMlwiLFxuXHRcdHJlYWN0OiBcIjE2LjE0LjBcIixcblx0XHRcInN2Zy10YWctbmFtZXNcIjogXCJeMS4xLjFcIixcblx0XHR0eXBlc2NyaXB0OiBcIl40LjUuNVwiXG5cdH0sXG5cdHJlcG9zaXRvcnk6IFwiaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi90cmVlL21haW4vcGFja2FnZXMvcmVhY3RcIixcblx0cHVibGlzaENvbmZpZzoge1xuXHRcdGFjY2VzczogXCJwdWJsaWNcIlxuXHR9LFxuXHRcInVtZDptYWluXCI6IFwiZGlzdC9lbW90aW9uLXJlYWN0LnVtZC5taW4uanNcIixcblx0cHJlY29uc3RydWN0OiB7XG5cdFx0ZW50cnlwb2ludHM6IFtcblx0XHRcdFwiLi9pbmRleC5qc1wiLFxuXHRcdFx0XCIuL2pzeC1ydW50aW1lLmpzXCIsXG5cdFx0XHRcIi4vanN4LWRldi1ydW50aW1lLmpzXCIsXG5cdFx0XHRcIi4vX2lzb2xhdGVkLWhucnMuanNcIlxuXHRcdF0sXG5cdFx0dW1kTmFtZTogXCJlbW90aW9uUmVhY3RcIixcblx0XHRleHBvcnRzOiB7XG5cdFx0XHRlbnZDb25kaXRpb25zOiBbXG5cdFx0XHRcdFwiYnJvd3NlclwiLFxuXHRcdFx0XHRcIndvcmtlclwiXG5cdFx0XHRdLFxuXHRcdFx0ZXh0cmE6IHtcblx0XHRcdFx0XCIuL3R5cGVzL2Nzcy1wcm9wXCI6IFwiLi90eXBlcy9jc3MtcHJvcC5kLnRzXCIsXG5cdFx0XHRcdFwiLi9tYWNyb1wiOiBcIi4vbWFjcm8uanNcIlxuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxudmFyIGpzeCA9IGZ1bmN0aW9uIGpzeCh0eXBlLCBwcm9wcykge1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblxuICBpZiAocHJvcHMgPT0gbnVsbCB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcywgJ2NzcycpKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHJldHVybiBjcmVhdGVFbGVtZW50LmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgY3JlYXRlRWxlbWVudEFyZ0FycmF5ID0gbmV3IEFycmF5KGFyZ3NMZW5ndGgpO1xuICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbMF0gPSBFbW90aW9uO1xuICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbMV0gPSBjcmVhdGVFbW90aW9uUHJvcHModHlwZSwgcHJvcHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSB7XG4gICAgY3JlYXRlRWxlbWVudEFyZ0FycmF5W2ldID0gYXJnc1tpXTtcbiAgfSAvLyAkRmxvd0ZpeE1lXG5cblxuICByZXR1cm4gY3JlYXRlRWxlbWVudC5hcHBseShudWxsLCBjcmVhdGVFbGVtZW50QXJnQXJyYXkpO1xufTtcblxudmFyIHdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCA9IGZhbHNlOyAvLyBtYWludGFpbiBwbGFjZSBvdmVyIHJlcmVuZGVycy5cbi8vIGluaXRpYWwgcmVuZGVyIGZyb20gYnJvd3NlciwgaW5zZXJ0QmVmb3JlIGNvbnRleHQuc2hlZXQudGFnc1swXSBvciBpZiBhIHN0eWxlIGhhc24ndCBiZWVuIGluc2VydGVkIHRoZXJlIHlldCwgYXBwZW5kQ2hpbGRcbi8vIGluaXRpYWwgY2xpZW50LXNpZGUgcmVuZGVyIGZyb20gU1NSLCB1c2UgcGxhY2Ugb2YgaHlkcmF0aW5nIHRhZ1xuXG52YXIgR2xvYmFsID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF3YXJuZWRBYm91dENzc1Byb3BGb3JHbG9iYWwgJiYgKCAvLyBjaGVjayBmb3IgY2xhc3NOYW1lIGFzIHdlbGwgc2luY2UgdGhlIHVzZXIgaXNcbiAgLy8gcHJvYmFibHkgdXNpbmcgdGhlIGN1c3RvbSBjcmVhdGVFbGVtZW50IHdoaWNoXG4gIC8vIG1lYW5zIGl0IHdpbGwgYmUgdHVybmVkIGludG8gYSBjbGFzc05hbWUgcHJvcFxuICAvLyAkRmxvd0ZpeE1lIEkgZG9uJ3QgcmVhbGx5IHdhbnQgdG8gYWRkIGl0IHRvIHRoZSB0eXBlIHNpbmNlIGl0IHNob3VsZG4ndCBiZSB1c2VkXG4gIHByb3BzLmNsYXNzTmFtZSB8fCBwcm9wcy5jc3MpKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkl0IGxvb2tzIGxpa2UgeW91J3JlIHVzaW5nIHRoZSBjc3MgcHJvcCBvbiBHbG9iYWwsIGRpZCB5b3UgbWVhbiB0byB1c2UgdGhlIHN0eWxlcyBwcm9wIGluc3RlYWQ/XCIpO1xuICAgIHdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCA9IHRydWU7XG4gIH1cblxuICB2YXIgc3R5bGVzID0gcHJvcHMuc3R5bGVzO1xuICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhbc3R5bGVzXSwgdW5kZWZpbmVkLCB1c2VDb250ZXh0KFRoZW1lQ29udGV4dCkpO1xuXG4gIGlmICghaXNCcm93c2VyJDEpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBzZXJpYWxpemVkTmFtZXMgPSBzZXJpYWxpemVkLm5hbWU7XG4gICAgdmFyIHNlcmlhbGl6ZWRTdHlsZXMgPSBzZXJpYWxpemVkLnN0eWxlcztcbiAgICB2YXIgbmV4dCA9IHNlcmlhbGl6ZWQubmV4dDtcblxuICAgIHdoaWxlIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlcmlhbGl6ZWROYW1lcyArPSAnICcgKyBuZXh0Lm5hbWU7XG4gICAgICBzZXJpYWxpemVkU3R5bGVzICs9IG5leHQuc3R5bGVzO1xuICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICB9XG5cbiAgICB2YXIgc2hvdWxkQ2FjaGUgPSBjYWNoZS5jb21wYXQgPT09IHRydWU7XG4gICAgdmFyIHJ1bGVzID0gY2FjaGUuaW5zZXJ0KFwiXCIsIHtcbiAgICAgIG5hbWU6IHNlcmlhbGl6ZWROYW1lcyxcbiAgICAgIHN0eWxlczogc2VyaWFsaXplZFN0eWxlc1xuICAgIH0sIGNhY2hlLnNoZWV0LCBzaG91bGRDYWNoZSk7XG5cbiAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIChfcmVmID0ge30sIF9yZWZbXCJkYXRhLWVtb3Rpb25cIl0gPSBjYWNoZS5rZXkgKyBcIi1nbG9iYWwgXCIgKyBzZXJpYWxpemVkTmFtZXMsIF9yZWYuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPSB7XG4gICAgICBfX2h0bWw6IHJ1bGVzXG4gICAgfSwgX3JlZi5ub25jZSA9IGNhY2hlLnNoZWV0Lm5vbmNlLCBfcmVmKSk7XG4gIH0gLy8geWVzLCBpIGtub3cgdGhlc2UgaG9va3MgYXJlIHVzZWQgY29uZGl0aW9uYWxseVxuICAvLyBidXQgaXQgaXMgYmFzZWQgb24gYSBjb25zdGFudCB0aGF0IHdpbGwgbmV2ZXIgY2hhbmdlIGF0IHJ1bnRpbWVcbiAgLy8gaXQncyBlZmZlY3RpdmVseSBsaWtlIGhhdmluZyB0d28gaW1wbGVtZW50YXRpb25zIGFuZCBzd2l0Y2hpbmcgdGhlbSBvdXRcbiAgLy8gc28gaXQncyBub3QgYWN0dWFsbHkgYnJlYWtpbmcgYW55dGhpbmdcblxuXG4gIHZhciBzaGVldFJlZiA9IHVzZVJlZigpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBrZXkgPSBjYWNoZS5rZXkgKyBcIi1nbG9iYWxcIjsgLy8gdXNlIGNhc2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9pc3N1ZXMvMjY3NVxuXG4gICAgdmFyIHNoZWV0ID0gbmV3IGNhY2hlLnNoZWV0LmNvbnN0cnVjdG9yKHtcbiAgICAgIGtleToga2V5LFxuICAgICAgbm9uY2U6IGNhY2hlLnNoZWV0Lm5vbmNlLFxuICAgICAgY29udGFpbmVyOiBjYWNoZS5zaGVldC5jb250YWluZXIsXG4gICAgICBzcGVlZHk6IGNhY2hlLnNoZWV0LmlzU3BlZWR5XG4gICAgfSk7XG4gICAgdmFyIHJlaHlkcmF0aW5nID0gZmFsc2U7IC8vICRGbG93Rml4TWVcblxuICAgIHZhciBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInN0eWxlW2RhdGEtZW1vdGlvbj1cXFwiXCIgKyBrZXkgKyBcIiBcIiArIHNlcmlhbGl6ZWQubmFtZSArIFwiXFxcIl1cIik7XG5cbiAgICBpZiAoY2FjaGUuc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIHNoZWV0LmJlZm9yZSA9IGNhY2hlLnNoZWV0LnRhZ3NbMF07XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIHJlaHlkcmF0aW5nID0gdHJ1ZTsgLy8gY2xlYXIgdGhlIGhhc2ggc28gdGhpcyBub2RlIHdvbid0IGJlIHJlY29nbml6YWJsZSBhcyByZWh5ZHJhdGFibGUgYnkgb3RoZXIgPEdsb2JhbC8+c1xuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywga2V5KTtcbiAgICAgIHNoZWV0Lmh5ZHJhdGUoW25vZGVdKTtcbiAgICB9XG5cbiAgICBzaGVldFJlZi5jdXJyZW50ID0gW3NoZWV0LCByZWh5ZHJhdGluZ107XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNoZWV0LmZsdXNoKCk7XG4gICAgfTtcbiAgfSwgW2NhY2hlXSk7XG4gIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNoZWV0UmVmQ3VycmVudCA9IHNoZWV0UmVmLmN1cnJlbnQ7XG4gICAgdmFyIHNoZWV0ID0gc2hlZXRSZWZDdXJyZW50WzBdLFxuICAgICAgICByZWh5ZHJhdGluZyA9IHNoZWV0UmVmQ3VycmVudFsxXTtcblxuICAgIGlmIChyZWh5ZHJhdGluZykge1xuICAgICAgc2hlZXRSZWZDdXJyZW50WzFdID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNlcmlhbGl6ZWQubmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBpbnNlcnQga2V5ZnJhbWVzXG4gICAgICBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQubmV4dCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHNoZWV0LnRhZ3MubGVuZ3RoKSB7XG4gICAgICAvLyBpZiB0aGlzIGRvZXNuJ3QgZXhpc3QgdGhlbiBpdCB3aWxsIGJlIG51bGwgc28gdGhlIHN0eWxlIGVsZW1lbnQgd2lsbCBiZSBhcHBlbmRlZFxuICAgICAgdmFyIGVsZW1lbnQgPSBzaGVldC50YWdzW3NoZWV0LnRhZ3MubGVuZ3RoIC0gMV0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgc2hlZXQuYmVmb3JlID0gZWxlbWVudDtcbiAgICAgIHNoZWV0LmZsdXNoKCk7XG4gICAgfVxuXG4gICAgY2FjaGUuaW5zZXJ0KFwiXCIsIHNlcmlhbGl6ZWQsIHNoZWV0LCBmYWxzZSk7XG4gIH0sIFtjYWNoZSwgc2VyaWFsaXplZC5uYW1lXSk7XG4gIHJldHVybiBudWxsO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEdsb2JhbC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uR2xvYmFsJztcbn1cblxuZnVuY3Rpb24gY3NzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHNlcmlhbGl6ZVN0eWxlcyhhcmdzKTtcbn1cblxudmFyIGtleWZyYW1lcyA9IGZ1bmN0aW9uIGtleWZyYW1lcygpIHtcbiAgdmFyIGluc2VydGFibGUgPSBjc3MuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICB2YXIgbmFtZSA9IFwiYW5pbWF0aW9uLVwiICsgaW5zZXJ0YWJsZS5uYW1lOyAvLyAkRmxvd0ZpeE1lXG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogXCJAa2V5ZnJhbWVzIFwiICsgbmFtZSArIFwie1wiICsgaW5zZXJ0YWJsZS5zdHlsZXMgKyBcIn1cIixcbiAgICBhbmltOiAxLFxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBcIl9FTU9fXCIgKyB0aGlzLm5hbWUgKyBcIl9cIiArIHRoaXMuc3R5bGVzICsgXCJfRU1PX1wiO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb24gY2xhc3NuYW1lcyhhcmdzKSB7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2xzID0gJyc7XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFyIHRvQWRkID0gdm9pZCAwO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICB0b0FkZCA9IGNsYXNzbmFtZXMoYXJnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgYXJnLnN0eWxlcyAhPT0gdW5kZWZpbmVkICYmIGFyZy5uYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignWW91IGhhdmUgcGFzc2VkIHN0eWxlcyBjcmVhdGVkIHdpdGggYGNzc2AgZnJvbSBgQGVtb3Rpb24vcmVhY3RgIHBhY2thZ2UgdG8gdGhlIGBjeGAuXFxuJyArICdgY3hgIGlzIG1lYW50IHRvIGNvbXBvc2UgY2xhc3MgbmFtZXMgKHN0cmluZ3MpIHNvIHlvdSBzaG91bGQgY29udmVydCB0aG9zZSBzdHlsZXMgdG8gYSBjbGFzcyBuYW1lIGJ5IHBhc3NpbmcgdGhlbSB0byB0aGUgYGNzc2AgcmVjZWl2ZWQgZnJvbSA8Q2xhc3NOYW1lcy8+IGNvbXBvbmVudC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG9BZGQgPSAnJztcblxuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBhcmcpIHtcbiAgICAgICAgICAgICAgaWYgKGFyZ1trXSAmJiBrKSB7XG4gICAgICAgICAgICAgICAgdG9BZGQgJiYgKHRvQWRkICs9ICcgJyk7XG4gICAgICAgICAgICAgICAgdG9BZGQgKz0gaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICB0b0FkZCA9IGFyZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0b0FkZCkge1xuICAgICAgY2xzICYmIChjbHMgKz0gJyAnKTtcbiAgICAgIGNscyArPSB0b0FkZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xzO1xufTtcblxuZnVuY3Rpb24gbWVyZ2UocmVnaXN0ZXJlZCwgY3NzLCBjbGFzc05hbWUpIHtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbXTtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lKTtcblxuICBpZiAocmVnaXN0ZXJlZFN0eWxlcy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIHJldHVybiByYXdDbGFzc05hbWUgKyBjc3MocmVnaXN0ZXJlZFN0eWxlcyk7XG59XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZEFyciA9IF9yZWYuc2VyaWFsaXplZEFycjtcbiAgdmFyIHJ1bGVzID0gdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJ1bGVzID0gJyc7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcmlhbGl6ZWRBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByZXMgPSBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWRBcnJbaV0sIGZhbHNlKTtcblxuICAgICAgaWYgKCFpc0Jyb3dzZXIkMSAmJiByZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBydWxlcyArPSByZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc0Jyb3dzZXIkMSkge1xuICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKCFpc0Jyb3dzZXIkMSAmJiBydWxlcy5sZW5ndGggIT09IDApIHtcbiAgICB2YXIgX3JlZjI7XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCAoX3JlZjIgPSB7fSwgX3JlZjJbXCJkYXRhLWVtb3Rpb25cIl0gPSBjYWNoZS5rZXkgKyBcIiBcIiArIHNlcmlhbGl6ZWRBcnIubWFwKGZ1bmN0aW9uIChzZXJpYWxpemVkKSB7XG4gICAgICByZXR1cm4gc2VyaWFsaXplZC5uYW1lO1xuICAgIH0pLmpvaW4oJyAnKSwgX3JlZjIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPSB7XG4gICAgICBfX2h0bWw6IHJ1bGVzXG4gICAgfSwgX3JlZjIubm9uY2UgPSBjYWNoZS5zaGVldC5ub25jZSwgX3JlZjIpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIENsYXNzTmFtZXMgPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUpIHtcbiAgdmFyIGhhc1JlbmRlcmVkID0gZmFsc2U7XG4gIHZhciBzZXJpYWxpemVkQXJyID0gW107XG5cbiAgdmFyIGNzcyA9IGZ1bmN0aW9uIGNzcygpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjc3MgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgcmVuZGVyJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIGNhY2hlLnJlZ2lzdGVyZWQpO1xuICAgIHNlcmlhbGl6ZWRBcnIucHVzaChzZXJpYWxpemVkKTsgLy8gcmVnaXN0cmF0aW9uIGhhcyB0byBoYXBwZW4gaGVyZSBhcyB0aGUgcmVzdWx0IG9mIHRoaXMgbWlnaHQgZ2V0IGNvbnN1bWVkIGJ5IGBjeGBcblxuICAgIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBmYWxzZSk7XG4gICAgcmV0dXJuIGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB9O1xuXG4gIHZhciBjeCA9IGZ1bmN0aW9uIGN4KCkge1xuICAgIGlmIChoYXNSZW5kZXJlZCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2N4IGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZShjYWNoZS5yZWdpc3RlcmVkLCBjc3MsIGNsYXNzbmFtZXMoYXJncykpO1xuICB9O1xuXG4gIHZhciBjb250ZW50ID0ge1xuICAgIGNzczogY3NzLFxuICAgIGN4OiBjeCxcbiAgICB0aGVtZTogdXNlQ29udGV4dChUaGVtZUNvbnRleHQpXG4gIH07XG4gIHZhciBlbGUgPSBwcm9wcy5jaGlsZHJlbihjb250ZW50KTtcbiAgaGFzUmVuZGVyZWQgPSB0cnVlO1xuICByZXR1cm4gLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9jcmVhdGVFbGVtZW50KEluc2VydGlvbiwge1xuICAgIGNhY2hlOiBjYWNoZSxcbiAgICBzZXJpYWxpemVkQXJyOiBzZXJpYWxpemVkQXJyXG4gIH0pLCBlbGUpO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIENsYXNzTmFtZXMuZGlzcGxheU5hbWUgPSAnRW1vdGlvbkNsYXNzTmFtZXMnO1xufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgaXNCcm93c2VyID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJzsgLy8gIzE3MjcsICMyOTA1IGZvciBzb21lIHJlYXNvbiBKZXN0IGFuZCBWaXRlc3QgZXZhbHVhdGUgbW9kdWxlcyB0d2ljZSBpZiBzb21lIGNvbnN1bWluZyBtb2R1bGUgZ2V0cyBtb2NrZWRcblxuICB2YXIgaXNUZXN0RW52ID0gdHlwZW9mIGplc3QgIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB2aSAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgaWYgKGlzQnJvd3NlciAmJiAhaXNUZXN0RW52KSB7XG4gICAgLy8gZ2xvYmFsVGhpcyBoYXMgd2lkZSBicm93c2VyIHN1cHBvcnQgLSBodHRwczovL2Nhbml1c2UuY29tLz9zZWFyY2g9Z2xvYmFsVGhpcywgTm9kZS5qcyAxMiBhbmQgbGF0ZXJcbiAgICB2YXIgZ2xvYmFsQ29udGV4dCA9IC8vICRGbG93SWdub3JlXG4gICAgdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgOiBpc0Jyb3dzZXIgPyB3aW5kb3cgOiBnbG9iYWw7XG4gICAgdmFyIGdsb2JhbEtleSA9IFwiX19FTU9USU9OX1JFQUNUX1wiICsgcGtnLnZlcnNpb24uc3BsaXQoJy4nKVswXSArIFwiX19cIjtcblxuICAgIGlmIChnbG9iYWxDb250ZXh0W2dsb2JhbEtleV0pIHtcbiAgICAgIGNvbnNvbGUud2FybignWW91IGFyZSBsb2FkaW5nIEBlbW90aW9uL3JlYWN0IHdoZW4gaXQgaXMgYWxyZWFkeSBsb2FkZWQuIFJ1bm5pbmcgJyArICdtdWx0aXBsZSBpbnN0YW5jZXMgbWF5IGNhdXNlIHByb2JsZW1zLiBUaGlzIGNhbiBoYXBwZW4gaWYgbXVsdGlwbGUgJyArICd2ZXJzaW9ucyBhcmUgdXNlZCwgb3IgaWYgbXVsdGlwbGUgYnVpbGRzIG9mIHRoZSBzYW1lIHZlcnNpb24gYXJlICcgKyAndXNlZC4nKTtcbiAgICB9XG5cbiAgICBnbG9iYWxDb250ZXh0W2dsb2JhbEtleV0gPSB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCB7IENsYXNzTmFtZXMsIEdsb2JhbCwganN4IGFzIGNyZWF0ZUVsZW1lbnQsIGNzcywganN4LCBrZXlmcmFtZXMgfTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoc3RyaW5ncywgcmF3KSB7XG4gIGlmICghcmF3KSB7XG4gICAgcmF3ID0gc3RyaW5ncy5zbGljZSgwKTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdHJpbmdzLCB7XG4gICAgcmF3OiB7XG4gICAgICB2YWx1ZTogT2JqZWN0LmZyZWV6ZShyYXcpXG4gICAgfVxuICB9KSk7XG59IiwiZnVuY3Rpb24gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59XG5cbmZ1bmN0aW9uIGdldExlbmd0aEZyb21BeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbn1cblxuZnVuY3Rpb24gZ2V0U2lkZShwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufVxuXG5mdW5jdGlvbiBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmNsdWRlcyhnZXRTaWRlKHBsYWNlbWVudCkpID8gJ3gnIDogJ3knO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChfcmVmLCBwbGFjZW1lbnQsIHJ0bCkge1xuICBsZXQge1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZ1xuICB9ID0gX3JlZjtcbiAgY29uc3QgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGZsb2F0aW5nLndpZHRoIC8gMjtcbiAgY29uc3QgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBmbG9hdGluZy5oZWlnaHQgLyAyO1xuICBjb25zdCBtYWluQXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICBjb25zdCBsZW5ndGggPSBnZXRMZW5ndGhGcm9tQXhpcyhtYWluQXhpcyk7XG4gIGNvbnN0IGNvbW1vbkFsaWduID0gcmVmZXJlbmNlW2xlbmd0aF0gLyAyIC0gZmxvYXRpbmdbbGVuZ3RoXSAvIDI7XG4gIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gIGNvbnN0IGlzVmVydGljYWwgPSBtYWluQXhpcyA9PT0gJ3gnO1xuICBsZXQgY29vcmRzO1xuICBzd2l0Y2ggKHNpZGUpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGZsb2F0aW5nLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBmbG9hdGluZy53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuICBzd2l0Y2ggKGdldEFsaWdubWVudChwbGFjZW1lbnQpKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgY29vcmRzW21haW5BeGlzXSAtPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmQnOlxuICAgICAgY29vcmRzW21haW5BeGlzXSArPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gY29vcmRzO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyB0aGF0IHdpbGwgcGxhY2UgdGhlIGZsb2F0aW5nIGVsZW1lbnRcbiAqIG5leHQgdG8gYSByZWZlcmVuY2UgZWxlbWVudCB3aGVuIGl0IGlzIGdpdmVuIGEgY2VydGFpbiBwb3NpdGlvbmluZyBzdHJhdGVneS5cbiAqXG4gKiBUaGlzIGV4cG9ydCBkb2VzIG5vdCBoYXZlIGFueSBgcGxhdGZvcm1gIGludGVyZmFjZSBsb2dpYy4gWW91IHdpbGwgbmVlZCB0b1xuICogd3JpdGUgb25lIGZvciB0aGUgcGxhdGZvcm0geW91IGFyZSB1c2luZyBGbG9hdGluZyBVSSB3aXRoLlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSBhc3luYyAocmVmZXJlbmNlLCBmbG9hdGluZywgY29uZmlnKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBwbGFjZW1lbnQgPSAnYm90dG9tJyxcbiAgICBzdHJhdGVneSA9ICdhYnNvbHV0ZScsXG4gICAgbWlkZGxld2FyZSA9IFtdLFxuICAgIHBsYXRmb3JtXG4gIH0gPSBjb25maWc7XG4gIGNvbnN0IHZhbGlkTWlkZGxld2FyZSA9IG1pZGRsZXdhcmUuZmlsdGVyKEJvb2xlYW4pO1xuICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGZsb2F0aW5nKSk7XG4gIGxldCByZWN0cyA9IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgcmVmZXJlbmNlLFxuICAgIGZsb2F0aW5nLFxuICAgIHN0cmF0ZWd5XG4gIH0pO1xuICBsZXQge1xuICAgIHgsXG4gICAgeVxuICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHBsYWNlbWVudCwgcnRsKTtcbiAgbGV0IHN0YXRlZnVsUGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICBsZXQgbWlkZGxld2FyZURhdGEgPSB7fTtcbiAgbGV0IHJlc2V0Q291bnQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbGlkTWlkZGxld2FyZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHtcbiAgICAgIG5hbWUsXG4gICAgICBmblxuICAgIH0gPSB2YWxpZE1pZGRsZXdhcmVbaV07XG4gICAgY29uc3Qge1xuICAgICAgeDogbmV4dFgsXG4gICAgICB5OiBuZXh0WSxcbiAgICAgIGRhdGEsXG4gICAgICByZXNldFxuICAgIH0gPSBhd2FpdCBmbih7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIGluaXRpYWxQbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudDogc3RhdGVmdWxQbGFjZW1lbnQsXG4gICAgICBzdHJhdGVneSxcbiAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgcmVjdHMsXG4gICAgICBwbGF0Zm9ybSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgZmxvYXRpbmdcbiAgICAgIH1cbiAgICB9KTtcbiAgICB4ID0gbmV4dFggIT0gbnVsbCA/IG5leHRYIDogeDtcbiAgICB5ID0gbmV4dFkgIT0gbnVsbCA/IG5leHRZIDogeTtcbiAgICBtaWRkbGV3YXJlRGF0YSA9IHtcbiAgICAgIC4uLm1pZGRsZXdhcmVEYXRhLFxuICAgICAgW25hbWVdOiB7XG4gICAgICAgIC4uLm1pZGRsZXdhcmVEYXRhW25hbWVdLFxuICAgICAgICAuLi5kYXRhXG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAocmVzZXQgJiYgcmVzZXRDb3VudCA8PSA1MCkge1xuICAgICAgcmVzZXRDb3VudCsrO1xuICAgICAgaWYgKHR5cGVvZiByZXNldCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHJlc2V0LnBsYWNlbWVudCkge1xuICAgICAgICAgIHN0YXRlZnVsUGxhY2VtZW50ID0gcmVzZXQucGxhY2VtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNldC5yZWN0cykge1xuICAgICAgICAgIHJlY3RzID0gcmVzZXQucmVjdHMgPT09IHRydWUgPyBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgICAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICAgICAgZmxvYXRpbmcsXG4gICAgICAgICAgICBzdHJhdGVneVxuICAgICAgICAgIH0pIDogcmVzZXQucmVjdHM7XG4gICAgICAgIH1cbiAgICAgICAgKHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHlcbiAgICAgICAgfSA9IGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KHJlY3RzLCBzdGF0ZWZ1bFBsYWNlbWVudCwgcnRsKSk7XG4gICAgICB9XG4gICAgICBpID0gLTE7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICBzdHJhdGVneSxcbiAgICBtaWRkbGV3YXJlRGF0YVxuICB9O1xufTtcblxuZnVuY3Rpb24gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC4uLnBhZGRpbmdcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2lkZU9iamVjdEZyb21QYWRkaW5nKHBhZGRpbmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IGV4cGFuZFBhZGRpbmdPYmplY3QocGFkZGluZykgOiB7XG4gICAgdG9wOiBwYWRkaW5nLFxuICAgIHJpZ2h0OiBwYWRkaW5nLFxuICAgIGJvdHRvbTogcGFkZGluZyxcbiAgICBsZWZ0OiBwYWRkaW5nXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICByZXR1cm4ge1xuICAgIC4uLnJlY3QsXG4gICAgdG9wOiByZWN0LnksXG4gICAgbGVmdDogcmVjdC54LFxuICAgIHJpZ2h0OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBvZiBvdmVyZmxvdyBzaWRlIG9mZnNldHMgdGhhdCBkZXRlcm1pbmUgaG93IG11Y2ggdGhlXG4gKiBlbGVtZW50IGlzIG92ZXJmbG93aW5nIGEgZ2l2ZW4gY2xpcHBpbmcgYm91bmRhcnkgb24gZWFjaCBzaWRlLlxuICogLSBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBib3VuZGFyeSBieSB0aGF0IG51bWJlciBvZiBwaXhlbHNcbiAqIC0gbmVnYXRpdmUgPSBob3cgbWFueSBwaXhlbHMgbGVmdCBiZWZvcmUgaXQgd2lsbCBvdmVyZmxvd1xuICogLSAwID0gbGllcyBmbHVzaCB3aXRoIHRoZSBib3VuZGFyeVxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2RldGVjdE92ZXJmbG93XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIHZhciBfYXdhaXQkcGxhdGZvcm0kaXNFbGU7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGF0Zm9ybSxcbiAgICByZWN0cyxcbiAgICBlbGVtZW50cyxcbiAgICBzdHJhdGVneVxuICB9ID0gc3RhdGU7XG4gIGNvbnN0IHtcbiAgICBib3VuZGFyeSA9ICdjbGlwcGluZ0FuY2VzdG9ycycsXG4gICAgcm9vdEJvdW5kYXJ5ID0gJ3ZpZXdwb3J0JyxcbiAgICBlbGVtZW50Q29udGV4dCA9ICdmbG9hdGluZycsXG4gICAgYWx0Qm91bmRhcnkgPSBmYWxzZSxcbiAgICBwYWRkaW5nID0gMFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFNpZGVPYmplY3RGcm9tUGFkZGluZyhwYWRkaW5nKTtcbiAgY29uc3QgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8gJ3JlZmVyZW5jZScgOiAnZmxvYXRpbmcnO1xuICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICBjb25zdCBjbGlwcGluZ0NsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KGF3YWl0IHBsYXRmb3JtLmdldENsaXBwaW5nUmVjdCh7XG4gICAgZWxlbWVudDogKChfYXdhaXQkcGxhdGZvcm0kaXNFbGUgPSBhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoZWxlbWVudCkpKSAhPSBudWxsID8gX2F3YWl0JHBsYXRmb3JtJGlzRWxlIDogdHJ1ZSkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCAoYXdhaXQgKHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnRzLmZsb2F0aW5nKSkpLFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9KSk7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/IHtcbiAgICAuLi5yZWN0cy5mbG9hdGluZyxcbiAgICB4LFxuICAgIHlcbiAgfSA6IHJlY3RzLnJlZmVyZW5jZTtcbiAgY29uc3Qgb2Zmc2V0UGFyZW50ID0gYXdhaXQgKHBsYXRmb3JtLmdldE9mZnNldFBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gIGNvbnN0IG9mZnNldFNjYWxlID0gKGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSkgPyAoYXdhaXQgKHBsYXRmb3JtLmdldFNjYWxlID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRTY2FsZShvZmZzZXRQYXJlbnQpKSkgfHwge1xuICAgIHg6IDEsXG4gICAgeTogMVxuICB9IDoge1xuICAgIHg6IDEsXG4gICAgeTogMVxuICB9O1xuICBjb25zdCBlbGVtZW50Q2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QocGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QgPyBhd2FpdCBwbGF0Zm9ybS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCh7XG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSkgOiByZWN0KTtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IChjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3ApIC8gb2Zmc2V0U2NhbGUueSxcbiAgICBib3R0b206IChlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLSBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20pIC8gb2Zmc2V0U2NhbGUueSxcbiAgICBsZWZ0OiAoY2xpcHBpbmdDbGllbnRSZWN0LmxlZnQgLSBlbGVtZW50Q2xpZW50UmVjdC5sZWZ0ICsgcGFkZGluZ09iamVjdC5sZWZ0KSAvIG9mZnNldFNjYWxlLngsXG4gICAgcmlnaHQ6IChlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHQpIC8gb2Zmc2V0U2NhbGUueFxuICB9O1xufVxuXG5jb25zdCBtaW4gPSBNYXRoLm1pbjtcbmNvbnN0IG1heCA9IE1hdGgubWF4O1xuXG5mdW5jdGlvbiB3aXRoaW4obWluJDEsIHZhbHVlLCBtYXgkMSkge1xuICByZXR1cm4gbWF4KG1pbiQxLCBtaW4odmFsdWUsIG1heCQxKSk7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gb3B0aW9ucyA9PiAoe1xuICBuYW1lOiAnYXJyb3cnLFxuICBvcHRpb25zLFxuICBhc3luYyBmbihzdGF0ZSkge1xuICAgIC8vIFNpbmNlIGBlbGVtZW50YCBpcyByZXF1aXJlZCwgd2UgZG9uJ3QgUGFydGlhbDw+IHRoZSB0eXBlLlxuICAgIGNvbnN0IHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwYWRkaW5nID0gMFxuICAgIH0gPSBvcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgcGxhY2VtZW50LFxuICAgICAgcmVjdHMsXG4gICAgICBwbGF0Zm9ybSxcbiAgICAgIGVsZW1lbnRzXG4gICAgfSA9IHN0YXRlO1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFNpZGVPYmplY3RGcm9tUGFkZGluZyhwYWRkaW5nKTtcbiAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICB4LFxuICAgICAgeVxuICAgIH07XG4gICAgY29uc3QgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICAgIGNvbnN0IGxlbmd0aCA9IGdldExlbmd0aEZyb21BeGlzKGF4aXMpO1xuICAgIGNvbnN0IGFycm93RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudCk7XG4gICAgY29uc3QgaXNZQXhpcyA9IGF4aXMgPT09ICd5JztcbiAgICBjb25zdCBtaW5Qcm9wID0gaXNZQXhpcyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgIGNvbnN0IG1heFByb3AgPSBpc1lBeGlzID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgIGNvbnN0IGNsaWVudFByb3AgPSBpc1lBeGlzID8gJ2NsaWVudEhlaWdodCcgOiAnY2xpZW50V2lkdGgnO1xuICAgIGNvbnN0IGVuZERpZmYgPSByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSArIHJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIGNvb3Jkc1theGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbmd0aF07XG4gICAgY29uc3Qgc3RhcnREaWZmID0gY29vcmRzW2F4aXNdIC0gcmVjdHMucmVmZXJlbmNlW2F4aXNdO1xuICAgIGNvbnN0IGFycm93T2Zmc2V0UGFyZW50ID0gYXdhaXQgKHBsYXRmb3JtLmdldE9mZnNldFBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpKTtcbiAgICBsZXQgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXJyb3dPZmZzZXRQYXJlbnRbY2xpZW50UHJvcF0gOiAwO1xuXG4gICAgLy8gRE9NIHBsYXRmb3JtIGNhbiByZXR1cm4gYHdpbmRvd2AgYXMgdGhlIGBvZmZzZXRQYXJlbnRgLlxuICAgIGlmICghY2xpZW50U2l6ZSB8fCAhKGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChhcnJvd09mZnNldFBhcmVudCkpKSkge1xuICAgICAgY2xpZW50U2l6ZSA9IGVsZW1lbnRzLmZsb2F0aW5nW2NsaWVudFByb3BdIHx8IHJlY3RzLmZsb2F0aW5nW2xlbmd0aF07XG4gICAgfVxuICAgIGNvbnN0IGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBmbG9hdGluZyBlbGVtZW50IGlmIHRoZSBjZW50ZXJcbiAgICAvLyBwb2ludCBpcyBvdXRzaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50J3MgYm91bmRzLlxuICAgIGNvbnN0IG1pbiA9IHBhZGRpbmdPYmplY3RbbWluUHJvcF07XG4gICAgY29uc3QgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgICBjb25zdCBjZW50ZXIgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiArIGNlbnRlclRvUmVmZXJlbmNlO1xuICAgIGNvbnN0IG9mZnNldCA9IHdpdGhpbihtaW4sIGNlbnRlciwgbWF4KTtcblxuICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGwgZW5vdWdoIHRoYXQgdGhlIGFycm93J3MgcGFkZGluZyBjYXVzZXMgaXQgdG9cbiAgICAvLyB0byBwb2ludCB0byBub3RoaW5nIGZvciBhbiBhbGlnbmVkIHBsYWNlbWVudCwgYWRqdXN0IHRoZSBvZmZzZXQgb2YgdGhlXG4gICAgLy8gZmxvYXRpbmcgZWxlbWVudCBpdHNlbGYuIFRoaXMgc3RvcHMgYHNoaWZ0KClgIGZyb20gdGFraW5nIGFjdGlvbiwgYnV0IGNhblxuICAgIC8vIGJlIHdvcmtlZCBhcm91bmQgYnkgY2FsbGluZyBpdCBhZ2FpbiBhZnRlciB0aGUgYGFycm93KClgIGlmIGRlc2lyZWQuXG4gICAgY29uc3Qgc2hvdWxkQWRkT2Zmc2V0ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT0gbnVsbCAmJiBjZW50ZXIgIT0gb2Zmc2V0ICYmIHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdIC8gMiAtIChjZW50ZXIgPCBtaW4gPyBwYWRkaW5nT2JqZWN0W21pblByb3BdIDogcGFkZGluZ09iamVjdFttYXhQcm9wXSkgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgPCAwO1xuICAgIGNvbnN0IGFsaWdubWVudE9mZnNldCA9IHNob3VsZEFkZE9mZnNldCA/IGNlbnRlciA8IG1pbiA/IG1pbiAtIGNlbnRlciA6IG1heCAtIGNlbnRlciA6IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtheGlzXTogY29vcmRzW2F4aXNdIC0gYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgZGF0YToge1xuICAgICAgICBbYXhpc106IG9mZnNldCxcbiAgICAgICAgY2VudGVyT2Zmc2V0OiBjZW50ZXIgLSBvZmZzZXRcbiAgICAgIH1cbiAgICB9O1xuICB9XG59KTtcblxuY29uc3Qgc2lkZXMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xuY29uc3QgYWxsUGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9zaWRlcy5yZWR1Y2UoKGFjYywgc2lkZSkgPT4gYWNjLmNvbmNhdChzaWRlLCBzaWRlICsgXCItc3RhcnRcIiwgc2lkZSArIFwiLWVuZFwiKSwgW10pO1xuXG5jb25zdCBvcHBvc2l0ZVNpZGVNYXAgPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgc2lkZSA9PiBvcHBvc2l0ZVNpZGVNYXBbc2lkZV0pO1xufVxuXG5mdW5jdGlvbiBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpIHtcbiAgaWYgKHJ0bCA9PT0gdm9pZCAwKSB7XG4gICAgcnRsID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGNvbnN0IG1haW5BeGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIGNvbnN0IGxlbmd0aCA9IGdldExlbmd0aEZyb21BeGlzKG1haW5BeGlzKTtcbiAgbGV0IG1haW5BbGlnbm1lbnRTaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IGFsaWdubWVudCA9PT0gKHJ0bCA/ICdlbmQnIDogJ3N0YXJ0JykgPyAncmlnaHQnIDogJ2xlZnQnIDogYWxpZ25tZW50ID09PSAnc3RhcnQnID8gJ2JvdHRvbScgOiAndG9wJztcbiAgaWYgKHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdID4gcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXSkge1xuICAgIG1haW5BbGlnbm1lbnRTaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpO1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogbWFpbkFsaWdubWVudFNpZGUsXG4gICAgY3Jvc3M6IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5BbGlnbm1lbnRTaWRlKVxuICB9O1xufVxuXG5jb25zdCBvcHBvc2l0ZUFsaWdubWVudE1hcCA9IHtcbiAgc3RhcnQ6ICdlbmQnLFxuICBlbmQ6ICdzdGFydCdcbn07XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgYWxpZ25tZW50ID0+IG9wcG9zaXRlQWxpZ25tZW50TWFwW2FsaWdubWVudF0pO1xufVxuXG5mdW5jdGlvbiBnZXRQbGFjZW1lbnRMaXN0KGFsaWdubWVudCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIHtcbiAgY29uc3QgYWxsb3dlZFBsYWNlbWVudHNTb3J0ZWRCeUFsaWdubWVudCA9IGFsaWdubWVudCA/IFsuLi5hbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldEFsaWdubWVudChwbGFjZW1lbnQpID09PSBhbGlnbm1lbnQpLCAuLi5hbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldEFsaWdubWVudChwbGFjZW1lbnQpICE9PSBhbGlnbm1lbnQpXSA6IGFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0U2lkZShwbGFjZW1lbnQpID09PSBwbGFjZW1lbnQpO1xuICByZXR1cm4gYWxsb3dlZFBsYWNlbWVudHNTb3J0ZWRCeUFsaWdubWVudC5maWx0ZXIocGxhY2VtZW50ID0+IHtcbiAgICBpZiAoYWxpZ25tZW50KSB7XG4gICAgICByZXR1cm4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCB8fCAoYXV0b0FsaWdubWVudCA/IGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCkgIT09IHBsYWNlbWVudCA6IGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xufVxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgY2hvb3NpbmcgdGhlIHBsYWNlbWVudFxuICogdGhhdCBoYXMgdGhlIG1vc3Qgc3BhY2UgYXZhaWxhYmxlIGF1dG9tYXRpY2FsbHksIHdpdGhvdXQgbmVlZGluZyB0byBzcGVjaWZ5IGFcbiAqIHByZWZlcnJlZCBwbGFjZW1lbnQuIEFsdGVybmF0aXZlIHRvIGBmbGlwYC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hdXRvUGxhY2VtZW50XG4gKi9cbmNvbnN0IGF1dG9QbGFjZW1lbnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2F1dG9QbGFjZW1lbnQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXV0b1AsIF9taWRkbGV3YXJlRGF0YSRhdXRvUDIsIF9wbGFjZW1lbnRzVGhhdEZpdE9uRTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBjcm9zc0F4aXMgPSBmYWxzZSxcbiAgICAgICAgYWxpZ25tZW50LFxuICAgICAgICBhbGxvd2VkUGxhY2VtZW50cyA9IGFsbFBsYWNlbWVudHMsXG4gICAgICAgIGF1dG9BbGlnbm1lbnQgPSB0cnVlLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBvcHRpb25zO1xuICAgICAgY29uc3QgcGxhY2VtZW50cyA9IGFsaWdubWVudCAhPT0gdW5kZWZpbmVkIHx8IGFsbG93ZWRQbGFjZW1lbnRzID09PSBhbGxQbGFjZW1lbnRzID8gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQgfHwgbnVsbCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIDogYWxsb3dlZFBsYWNlbWVudHM7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gKChfbWlkZGxld2FyZURhdGEkYXV0b1AgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QLmluZGV4KSB8fCAwO1xuICAgICAgY29uc3QgY3VycmVudFBsYWNlbWVudCA9IHBsYWNlbWVudHNbY3VycmVudEluZGV4XTtcbiAgICAgIGlmIChjdXJyZW50UGxhY2VtZW50ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgY29uc3Qge1xuICAgICAgICBtYWluLFxuICAgICAgICBjcm9zc1xuICAgICAgfSA9IGdldEFsaWdubWVudFNpZGVzKGN1cnJlbnRQbGFjZW1lbnQsIHJlY3RzLCBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpO1xuXG4gICAgICAvLyBNYWtlIGBjb21wdXRlQ29vcmRzYCBzdGFydCBmcm9tIHRoZSByaWdodCBwbGFjZS5cbiAgICAgIGlmIChwbGFjZW1lbnQgIT09IGN1cnJlbnRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRzWzBdXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudE92ZXJmbG93cyA9IFtvdmVyZmxvd1tnZXRTaWRlKGN1cnJlbnRQbGFjZW1lbnQpXSwgb3ZlcmZsb3dbbWFpbl0sIG92ZXJmbG93W2Nyb3NzXV07XG4gICAgICBjb25zdCBhbGxPdmVyZmxvd3MgPSBbLi4uKCgoX21pZGRsZXdhcmVEYXRhJGF1dG9QMiA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AyLm92ZXJmbG93cykgfHwgW10pLCB7XG4gICAgICAgIHBsYWNlbWVudDogY3VycmVudFBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzOiBjdXJyZW50T3ZlcmZsb3dzXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzW2N1cnJlbnRJbmRleCArIDFdO1xuXG4gICAgICAvLyBUaGVyZSBhcmUgbW9yZSBwbGFjZW1lbnRzIHRvIGNoZWNrLlxuICAgICAgaWYgKG5leHRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBpbmRleDogY3VycmVudEluZGV4ICsgMSxcbiAgICAgICAgICAgIG92ZXJmbG93czogYWxsT3ZlcmZsb3dzXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBuZXh0UGxhY2VtZW50XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlID0gYWxsT3ZlcmZsb3dzLm1hcChkID0+IHtcbiAgICAgICAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KGQucGxhY2VtZW50KTtcbiAgICAgICAgcmV0dXJuIFtkLnBsYWNlbWVudCwgYWxpZ25tZW50ICYmIGNyb3NzQXhpcyA/XG4gICAgICAgIC8vIENoZWNrIGFsb25nIHRoZSBtYWluQXhpcyBhbmQgbWFpbiBjcm9zc0F4aXMgc2lkZS5cbiAgICAgICAgZC5vdmVyZmxvd3Muc2xpY2UoMCwgMikucmVkdWNlKChhY2MsIHYpID0+IGFjYyArIHYsIDApIDpcbiAgICAgICAgLy8gQ2hlY2sgb25seSB0aGUgbWFpbkF4aXMuXG4gICAgICAgIGQub3ZlcmZsb3dzWzBdLCBkLm92ZXJmbG93c107XG4gICAgICB9KS5zb3J0KChhLCBiKSA9PiBhWzFdIC0gYlsxXSk7XG4gICAgICBjb25zdCBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGUgPSBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UuZmlsdGVyKGQgPT4gZFsyXS5zbGljZSgwLFxuICAgICAgLy8gQWxpZ25lZCBwbGFjZW1lbnRzIHNob3VsZCBub3QgY2hlY2sgdGhlaXIgb3Bwb3NpdGUgY3Jvc3NBeGlzXG4gICAgICAvLyBzaWRlLlxuICAgICAgZ2V0QWxpZ25tZW50KGRbMF0pID8gMiA6IDMpLmV2ZXJ5KHYgPT4gdiA8PSAwKSk7XG4gICAgICBjb25zdCByZXNldFBsYWNlbWVudCA9ICgoX3BsYWNlbWVudHNUaGF0Rml0T25FID0gcGxhY2VtZW50c1RoYXRGaXRPbkVhY2hTaWRlWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX3BsYWNlbWVudHNUaGF0Rml0T25FWzBdKSB8fCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2VbMF1bMF07XG4gICAgICBpZiAocmVzZXRQbGFjZW1lbnQgIT09IHBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IHJlc2V0UGxhY2VtZW50XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGdldEV4cGFuZGVkUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgY29uc3Qgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBnZXRTaWRlTGlzdChzaWRlLCBpc1N0YXJ0LCBydGwpIHtcbiAgY29uc3QgbHIgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbiAgY29uc3QgcmwgPSBbJ3JpZ2h0JywgJ2xlZnQnXTtcbiAgY29uc3QgdGIgPSBbJ3RvcCcsICdib3R0b20nXTtcbiAgY29uc3QgYnQgPSBbJ2JvdHRvbScsICd0b3AnXTtcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgaWYgKHJ0bCkgcmV0dXJuIGlzU3RhcnQgPyBybCA6IGxyO1xuICAgICAgcmV0dXJuIGlzU3RhcnQgPyBsciA6IHJsO1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gdGIgOiBidDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKHBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZGlyZWN0aW9uLCBydGwpIHtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGxldCBsaXN0ID0gZ2V0U2lkZUxpc3QoZ2V0U2lkZShwbGFjZW1lbnQpLCBkaXJlY3Rpb24gPT09ICdzdGFydCcsIHJ0bCk7XG4gIGlmIChhbGlnbm1lbnQpIHtcbiAgICBsaXN0ID0gbGlzdC5tYXAoc2lkZSA9PiBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnQpO1xuICAgIGlmIChmbGlwQWxpZ25tZW50KSB7XG4gICAgICBsaXN0ID0gbGlzdC5jb25jYXQobGlzdC5tYXAoZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpc3Q7XG59XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGZsaXBwaW5nIHRoZSBgcGxhY2VtZW50YFxuICogaW4gb3JkZXIgdG8ga2VlcCBpdCBpbiB2aWV3IHdoZW4gdGhlIHByZWZlcnJlZCBwbGFjZW1lbnQocykgd2lsbCBvdmVyZmxvdyB0aGVcbiAqIGNsaXBwaW5nIGJvdW5kYXJ5LiBBbHRlcm5hdGl2ZSB0byBgYXV0b1BsYWNlbWVudGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZmxpcFxuICovXG5jb25zdCBmbGlwID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdmbGlwJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGZsaXA7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBpbml0aWFsUGxhY2VtZW50LFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gdHJ1ZSxcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICAgIGZhbGxiYWNrU3RyYXRlZ3kgPSAnYmVzdEZpdCcsXG4gICAgICAgIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gPSAnbm9uZScsXG4gICAgICAgIGZsaXBBbGlnbm1lbnQgPSB0cnVlLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBvcHRpb25zO1xuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzQmFzZVBsYWNlbWVudCA9IGdldFNpZGUoaW5pdGlhbFBsYWNlbWVudCkgPT09IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gICAgICBjb25zdCBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcEFsaWdubWVudCA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChpbml0aWFsUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZFBsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCkpO1xuICAgICAgaWYgKCFzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgJiYgZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiAhPT0gJ25vbmUnKSB7XG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50cy5wdXNoKC4uLmdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiwgcnRsKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzID0gW2luaXRpYWxQbGFjZW1lbnQsIC4uLmZhbGxiYWNrUGxhY2VtZW50c107XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dzID0gW107XG4gICAgICBsZXQgb3ZlcmZsb3dzRGF0YSA9ICgoX21pZGRsZXdhcmVEYXRhJGZsaXAgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAub3ZlcmZsb3dzKSB8fCBbXTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIG92ZXJmbG93cy5wdXNoKG92ZXJmbG93W3NpZGVdKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgbWFpbixcbiAgICAgICAgICBjcm9zc1xuICAgICAgICB9ID0gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKTtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbbWFpbl0sIG92ZXJmbG93W2Nyb3NzXSk7XG4gICAgICB9XG4gICAgICBvdmVyZmxvd3NEYXRhID0gWy4uLm92ZXJmbG93c0RhdGEsIHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBvdmVyZmxvd3NcbiAgICAgIH1dO1xuXG4gICAgICAvLyBPbmUgb3IgbW9yZSBzaWRlcyBpcyBvdmVyZmxvd2luZy5cbiAgICAgIGlmICghb3ZlcmZsb3dzLmV2ZXJ5KHNpZGUgPT4gc2lkZSA8PSAwKSkge1xuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGZsaXAyLCBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXI7XG4gICAgICAgIGNvbnN0IG5leHRJbmRleCA9ICgoKF9taWRkbGV3YXJlRGF0YSRmbGlwMiA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcDIuaW5kZXgpIHx8IDApICsgMTtcbiAgICAgICAgY29uc3QgbmV4dFBsYWNlbWVudCA9IHBsYWNlbWVudHNbbmV4dEluZGV4XTtcbiAgICAgICAgaWYgKG5leHRQbGFjZW1lbnQpIHtcbiAgICAgICAgICAvLyBUcnkgbmV4dCBwbGFjZW1lbnQgYW5kIHJlLXJ1biB0aGUgbGlmZWN5Y2xlLlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGluZGV4OiBuZXh0SW5kZXgsXG4gICAgICAgICAgICAgIG92ZXJmbG93czogb3ZlcmZsb3dzRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaXJzdCwgZmluZCB0aGUgY2FuZGlkYXRlcyB0aGF0IGZpdCBvbiB0aGUgbWFpbkF4aXMgc2lkZSBvZiBvdmVyZmxvdyxcbiAgICAgICAgLy8gdGhlbiBmaW5kIHRoZSBwbGFjZW1lbnQgdGhhdCBmaXRzIHRoZSBiZXN0IG9uIHRoZSBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBsZXQgcmVzZXRQbGFjZW1lbnQgPSAoX292ZXJmbG93c0RhdGEkZmlsdGVyID0gb3ZlcmZsb3dzRGF0YS5maWx0ZXIoZCA9PiBkLm92ZXJmbG93c1swXSA8PSAwKS5zb3J0KChhLCBiKSA9PiBhLm92ZXJmbG93c1sxXSAtIGIub3ZlcmZsb3dzWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJGZpbHRlci5wbGFjZW1lbnQ7XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGZhbGxiYWNrLlxuICAgICAgICBpZiAoIXJlc2V0UGxhY2VtZW50KSB7XG4gICAgICAgICAgc3dpdGNoIChmYWxsYmFja1N0cmF0ZWd5KSB7XG4gICAgICAgICAgICBjYXNlICdiZXN0Rml0JzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBfb3ZlcmZsb3dzRGF0YSRtYXAkc287XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJG1hcCRzbyA9IG92ZXJmbG93c0RhdGEubWFwKGQgPT4gW2QucGxhY2VtZW50LCBkLm92ZXJmbG93cy5maWx0ZXIob3ZlcmZsb3cgPT4gb3ZlcmZsb3cgPiAwKS5yZWR1Y2UoKGFjYywgb3ZlcmZsb3cpID0+IGFjYyArIG92ZXJmbG93LCAwKV0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJG1hcCRzb1swXTtcbiAgICAgICAgICAgICAgICBpZiAocGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2luaXRpYWxQbGFjZW1lbnQnOlxuICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhY2VtZW50ICE9PSByZXNldFBsYWNlbWVudCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICBwbGFjZW1lbnQ6IHJlc2V0UGxhY2VtZW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0KSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQsXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGhcbiAgfTtcbn1cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gc2lkZXMuc29tZShzaWRlID0+IG92ZXJmbG93W3NpZGVdID49IDApO1xufVxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2hpZGUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3RyYXRlZ3kgPSAncmVmZXJlbmNlSGlkZGVuJyxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gb3B0aW9ucztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVjdHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcbiAgICAgICAgY2FzZSAncmVmZXJlbmNlSGlkZGVuJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdHMucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW5PZmZzZXRzOiBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbjogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdlc2NhcGVkJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5mbG9hdGluZyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZE9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgZXNjYXBlZDogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3RzKSB7XG4gIGNvbnN0IG1pblggPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gIGNvbnN0IG1pblkgPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC50b3ApKTtcbiAgY29uc3QgbWF4WCA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gIGNvbnN0IG1heFkgPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5ib3R0b20pKTtcbiAgcmV0dXJuIHtcbiAgICB4OiBtaW5YLFxuICAgIHk6IG1pblksXG4gICAgd2lkdGg6IG1heFggLSBtaW5YLFxuICAgIGhlaWdodDogbWF4WSAtIG1pbllcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFJlY3RzQnlMaW5lKHJlY3RzKSB7XG4gIGNvbnN0IHNvcnRlZFJlY3RzID0gcmVjdHMuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiBhLnkgLSBiLnkpO1xuICBjb25zdCBncm91cHMgPSBbXTtcbiAgbGV0IHByZXZSZWN0ID0gbnVsbDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRSZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHJlY3QgPSBzb3J0ZWRSZWN0c1tpXTtcbiAgICBpZiAoIXByZXZSZWN0IHx8IHJlY3QueSAtIHByZXZSZWN0LnkgPiBwcmV2UmVjdC5oZWlnaHQgLyAyKSB7XG4gICAgICBncm91cHMucHVzaChbcmVjdF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cHNbZ3JvdXBzLmxlbmd0aCAtIDFdLnB1c2gocmVjdCk7XG4gICAgfVxuICAgIHByZXZSZWN0ID0gcmVjdDtcbiAgfVxuICByZXR1cm4gZ3JvdXBzLm1hcChyZWN0ID0+IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KHJlY3QpKSk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGltcHJvdmVkIHBvc2l0aW9uaW5nIGZvciBpbmxpbmUgcmVmZXJlbmNlIGVsZW1lbnRzIHRoYXQgY2FuIHNwYW5cbiAqIG92ZXIgbXVsdGlwbGUgbGluZXMsIHN1Y2ggYXMgaHlwZXJsaW5rcyBvciByYW5nZSBzZWxlY3Rpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2lubGluZVxuICovXG5jb25zdCBpbmxpbmUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2lubGluZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICAvLyBBIE1vdXNlRXZlbnQncyBjbGllbnR7WCxZfSBjb29yZHMgY2FuIGJlIHVwIHRvIDIgcGl4ZWxzIG9mZiBhXG4gICAgICAvLyBDbGllbnRSZWN0J3MgYm91bmRzLCBkZXNwaXRlIHRoZSBldmVudCBsaXN0ZW5lciBiZWluZyB0cmlnZ2VyZWQuIEFcbiAgICAgIC8vIHBhZGRpbmcgb2YgMiBzZWVtcyB0byBoYW5kbGUgdGhpcyBpc3N1ZS5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGFkZGluZyA9IDIsXG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH0gPSBvcHRpb25zO1xuICAgICAgY29uc3QgbmF0aXZlQ2xpZW50UmVjdHMgPSBBcnJheS5mcm9tKChhd2FpdCAocGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldENsaWVudFJlY3RzKGVsZW1lbnRzLnJlZmVyZW5jZSkpKSB8fCBbXSk7XG4gICAgICBjb25zdCBjbGllbnRSZWN0cyA9IGdldFJlY3RzQnlMaW5lKG5hdGl2ZUNsaWVudFJlY3RzKTtcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gcmVjdFRvQ2xpZW50UmVjdChnZXRCb3VuZGluZ1JlY3QobmF0aXZlQ2xpZW50UmVjdHMpKTtcbiAgICAgIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRTaWRlT2JqZWN0RnJvbVBhZGRpbmcocGFkZGluZyk7XG4gICAgICBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcmVjdHMgYW5kIHRoZXkgYXJlIGRpc2pvaW5lZC5cbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA9PT0gMiAmJiBjbGllbnRSZWN0c1swXS5sZWZ0ID4gY2xpZW50UmVjdHNbMV0ucmlnaHQgJiYgeCAhPSBudWxsICYmIHkgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJlY3QgaW4gd2hpY2ggdGhlIHBvaW50IGlzIGZ1bGx5IGluc2lkZS5cbiAgICAgICAgICByZXR1cm4gY2xpZW50UmVjdHMuZmluZChyZWN0ID0+IHggPiByZWN0LmxlZnQgLSBwYWRkaW5nT2JqZWN0LmxlZnQgJiYgeCA8IHJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0ICYmIHkgPiByZWN0LnRvcCAtIHBhZGRpbmdPYmplY3QudG9wICYmIHkgPCByZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSB8fCBmYWxsYmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZXJlIGFyZSAyIG9yIG1vcmUgY29ubmVjdGVkIHJlY3RzLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICBpZiAoZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkgPT09ICd4Jykge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RSZWN0ID0gY2xpZW50UmVjdHNbMF07XG4gICAgICAgICAgICBjb25zdCBsYXN0UmVjdCA9IGNsaWVudFJlY3RzW2NsaWVudFJlY3RzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29uc3QgaXNUb3AgPSBnZXRTaWRlKHBsYWNlbWVudCkgPT09ICd0b3AnO1xuICAgICAgICAgICAgY29uc3QgdG9wID0gZmlyc3RSZWN0LnRvcDtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IGxhc3RSZWN0LmJvdHRvbTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBpc1RvcCA/IGZpcnN0UmVjdC5sZWZ0IDogbGFzdFJlY3QubGVmdDtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gaXNUb3AgPyBmaXJzdFJlY3QucmlnaHQgOiBsYXN0UmVjdC5yaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICB4OiBsZWZ0LFxuICAgICAgICAgICAgICB5OiB0b3BcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGlzTGVmdFNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCkgPT09ICdsZWZ0JztcbiAgICAgICAgICBjb25zdCBtYXhSaWdodCA9IG1heCguLi5jbGllbnRSZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gICAgICAgICAgY29uc3QgbWluTGVmdCA9IG1pbiguLi5jbGllbnRSZWN0cy5tYXAocmVjdCA9PiByZWN0LmxlZnQpKTtcbiAgICAgICAgICBjb25zdCBtZWFzdXJlUmVjdHMgPSBjbGllbnRSZWN0cy5maWx0ZXIocmVjdCA9PiBpc0xlZnRTaWRlID8gcmVjdC5sZWZ0ID09PSBtaW5MZWZ0IDogcmVjdC5yaWdodCA9PT0gbWF4UmlnaHQpO1xuICAgICAgICAgIGNvbnN0IHRvcCA9IG1lYXN1cmVSZWN0c1swXS50b3A7XG4gICAgICAgICAgY29uc3QgYm90dG9tID0gbWVhc3VyZVJlY3RzW21lYXN1cmVSZWN0cy5sZW5ndGggLSAxXS5ib3R0b207XG4gICAgICAgICAgY29uc3QgbGVmdCA9IG1pbkxlZnQ7XG4gICAgICAgICAgY29uc3QgcmlnaHQgPSBtYXhSaWdodDtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgeDogbGVmdCxcbiAgICAgICAgICAgIHk6IHRvcFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzZXRSZWN0cyA9IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgICAgIHJlZmVyZW5jZToge1xuICAgICAgICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuICAgICAgICB9LFxuICAgICAgICBmbG9hdGluZzogZWxlbWVudHMuZmxvYXRpbmcsXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9KTtcbiAgICAgIGlmIChyZWN0cy5yZWZlcmVuY2UueCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UueCB8fCByZWN0cy5yZWZlcmVuY2UueSAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UueSB8fCByZWN0cy5yZWZlcmVuY2Uud2lkdGggIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLndpZHRoIHx8IHJlY3RzLnJlZmVyZW5jZS5oZWlnaHQgIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLmhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICByZWN0czogcmVzZXRSZWN0c1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgdmFsdWUpIHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCxcbiAgICBwbGF0Zm9ybSxcbiAgICBlbGVtZW50c1xuICB9ID0gc3RhdGU7XG4gIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKTtcbiAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGNvbnN0IGlzVmVydGljYWwgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gJ3gnO1xuICBjb25zdCBtYWluQXhpc011bHRpID0gWydsZWZ0JywgJ3RvcCddLmluY2x1ZGVzKHNpZGUpID8gLTEgOiAxO1xuICBjb25zdCBjcm9zc0F4aXNNdWx0aSA9IHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxO1xuICBjb25zdCByYXdWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKHN0YXRlKSA6IHZhbHVlO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgbGV0IHtcbiAgICBtYWluQXhpcyxcbiAgICBjcm9zc0F4aXMsXG4gICAgYWxpZ25tZW50QXhpc1xuICB9ID0gdHlwZW9mIHJhd1ZhbHVlID09PSAnbnVtYmVyJyA/IHtcbiAgICBtYWluQXhpczogcmF3VmFsdWUsXG4gICAgY3Jvc3NBeGlzOiAwLFxuICAgIGFsaWdubWVudEF4aXM6IG51bGxcbiAgfSA6IHtcbiAgICBtYWluQXhpczogMCxcbiAgICBjcm9zc0F4aXM6IDAsXG4gICAgYWxpZ25tZW50QXhpczogbnVsbCxcbiAgICAuLi5yYXdWYWx1ZVxuICB9O1xuICBpZiAoYWxpZ25tZW50ICYmIHR5cGVvZiBhbGlnbm1lbnRBeGlzID09PSAnbnVtYmVyJykge1xuICAgIGNyb3NzQXhpcyA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyBhbGlnbm1lbnRBeGlzICogLTEgOiBhbGlnbm1lbnRBeGlzO1xuICB9XG4gIHJldHVybiBpc1ZlcnRpY2FsID8ge1xuICAgIHg6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpLFxuICAgIHk6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aVxuICB9IDoge1xuICAgIHg6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aSxcbiAgICB5OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aVxuICB9O1xufVxuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtcbiAgICB2YWx1ZSA9IDA7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICBvcHRpb25zOiB2YWx1ZSxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCBkaWZmQ29vcmRzID0gYXdhaXQgY29udmVydFZhbHVlVG9Db29yZHMoc3RhdGUsIHZhbHVlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHggKyBkaWZmQ29vcmRzLngsXG4gICAgICAgIHk6IHkgKyBkaWZmQ29vcmRzLnksXG4gICAgICAgIGRhdGE6IGRpZmZDb29yZHNcbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0Q3Jvc3NBeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn1cblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzaGlmdCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnRcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gZmFsc2UsXG4gICAgICAgIGxpbWl0ZXIgPSB7XG4gICAgICAgICAgZm46IF9yZWYgPT4ge1xuICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfSA9IF9yZWY7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICB5XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gb3B0aW9ucztcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBtYWluQXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChnZXRTaWRlKHBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgY3Jvc3NBeGlzID0gZ2V0Q3Jvc3NBeGlzKG1haW5BeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IG1haW5BeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IG1haW5BeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gbWFpbkF4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBtYWluQXhpc0Nvb3JkID0gd2l0aGluKG1pbiwgbWFpbkF4aXNDb29yZCwgbWF4KTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICBjb25zdCBtaW5TaWRlID0gY3Jvc3NBeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IGNyb3NzQXhpcyA9PT0gJ3knID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgICAgICBjb25zdCBtaW4gPSBjcm9zc0F4aXNDb29yZCArIG92ZXJmbG93W21pblNpZGVdO1xuICAgICAgICBjb25zdCBtYXggPSBjcm9zc0F4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBjcm9zc0F4aXNDb29yZCA9IHdpdGhpbihtaW4sIGNyb3NzQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGltaXRlZENvb3JkcyA9IGxpbWl0ZXIuZm4oe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmxpbWl0ZWRDb29yZHMsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB4OiBsaW1pdGVkQ29vcmRzLnggLSB4LFxuICAgICAgICAgIHk6IGxpbWl0ZWRDb29yZHMueSAtIHlcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuLyoqXG4gKiBCdWlsdC1pbiBgbGltaXRlcmAgdGhhdCB3aWxsIHN0b3AgYHNoaWZ0KClgIGF0IGEgY2VydGFpbiBwb2ludC5cbiAqL1xuY29uc3QgbGltaXRTaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBvcHRpb25zLFxuICAgIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG9mZnNldCA9IDAsXG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWVcbiAgICAgIH0gPSBvcHRpb25zO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGNyb3NzQXhpcyA9IGdldENyb3NzQXhpcyhtYWluQXhpcyk7XG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XG4gICAgICBsZXQgY3Jvc3NBeGlzQ29vcmQgPSBjb29yZHNbY3Jvc3NBeGlzXTtcbiAgICAgIGNvbnN0IHJhd09mZnNldCA9IHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicgPyBvZmZzZXQoc3RhdGUpIDogb2Zmc2V0O1xuICAgICAgY29uc3QgY29tcHV0ZWRPZmZzZXQgPSB0eXBlb2YgcmF3T2Zmc2V0ID09PSAnbnVtYmVyJyA/IHtcbiAgICAgICAgbWFpbkF4aXM6IHJhd09mZnNldCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwXG4gICAgICB9IDoge1xuICAgICAgICBtYWluQXhpczogMCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwLFxuICAgICAgICAuLi5yYXdPZmZzZXRcbiAgICAgIH07XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICBjb25zdCBsaW1pdE1pbiA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dIC0gY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGlmIChtYWluQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAobWFpbkF4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWF4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRvZmZzZSwgX21pZGRsZXdhcmVEYXRhJG9mZnNlMjtcbiAgICAgICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICAgICAgY29uc3QgaXNPcmlnaW5TaWRlID0gWyd0b3AnLCAnbGVmdCddLmluY2x1ZGVzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgKGlzT3JpZ2luU2lkZSA/ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlW2Nyb3NzQXhpc10pIHx8IDAgOiAwKSArIChpc09yaWdpblNpZGUgPyAwIDogY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzKTtcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dICsgKGlzT3JpZ2luU2lkZSA/IDAgOiAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZTIgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2UyW2Nyb3NzQXhpc10pIHx8IDApIC0gKGlzT3JpZ2luU2lkZSA/IGNvbXB1dGVkT2Zmc2V0LmNyb3NzQXhpcyA6IDApO1xuICAgICAgICBpZiAoY3Jvc3NBeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBeGlzQ29vcmQgPiBsaW1pdE1heCkge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NpemUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGFwcGx5ID0gKCkgPT4ge30sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IG9wdGlvbnM7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNYQXhpcyA9IGF4aXMgPT09ICd4JztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IHJlY3RzLmZsb2F0aW5nO1xuICAgICAgbGV0IGhlaWdodFNpZGU7XG4gICAgICBsZXQgd2lkdGhTaWRlO1xuICAgICAgaWYgKHNpZGUgPT09ICd0b3AnIHx8IHNpZGUgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGhlaWdodFNpZGUgPSBzaWRlO1xuICAgICAgICB3aWR0aFNpZGUgPSBhbGlnbm1lbnQgPT09ICgoYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKSA/ICdzdGFydCcgOiAnZW5kJykgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGhTaWRlID0gc2lkZTtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyAndG9wJyA6ICdib3R0b20nO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQgPSBoZWlnaHQgLSBvdmVyZmxvd1toZWlnaHRTaWRlXTtcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlV2lkdGggPSB3aWR0aCAtIG92ZXJmbG93W3dpZHRoU2lkZV07XG4gICAgICBsZXQgYXZhaWxhYmxlSGVpZ2h0ID0gb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQ7XG4gICAgICBsZXQgYXZhaWxhYmxlV2lkdGggPSBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoO1xuICAgICAgaWYgKGlzWEF4aXMpIHtcbiAgICAgICAgYXZhaWxhYmxlV2lkdGggPSBtaW4oXG4gICAgICAgIC8vIE1heGltdW0gY2xpcHBpbmcgdmlld3BvcnQgd2lkdGhcbiAgICAgICAgd2lkdGggLSBvdmVyZmxvdy5yaWdodCAtIG92ZXJmbG93LmxlZnQsIG92ZXJmbG93QXZhaWxhYmxlV2lkdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gbWluKFxuICAgICAgICAvLyBNYXhpbXVtIGNsaXBwaW5nIHZpZXdwb3J0IGhlaWdodFxuICAgICAgICBoZWlnaHQgLSBvdmVyZmxvdy5ib3R0b20gLSBvdmVyZmxvdy50b3AsIG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0KTtcbiAgICAgIH1cbiAgICAgIGlmICghc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQgJiYgIWFsaWdubWVudCkge1xuICAgICAgICBjb25zdCB4TWluID0gbWF4KG92ZXJmbG93LmxlZnQsIDApO1xuICAgICAgICBjb25zdCB4TWF4ID0gbWF4KG92ZXJmbG93LnJpZ2h0LCAwKTtcbiAgICAgICAgY29uc3QgeU1pbiA9IG1heChvdmVyZmxvdy50b3AsIDApO1xuICAgICAgICBjb25zdCB5TWF4ID0gbWF4KG92ZXJmbG93LmJvdHRvbSwgMCk7XG4gICAgICAgIGlmIChpc1hBeGlzKSB7XG4gICAgICAgICAgYXZhaWxhYmxlV2lkdGggPSB3aWR0aCAtIDIgKiAoeE1pbiAhPT0gMCB8fCB4TWF4ICE9PSAwID8geE1pbiArIHhNYXggOiBtYXgob3ZlcmZsb3cubGVmdCwgb3ZlcmZsb3cucmlnaHQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBoZWlnaHQgLSAyICogKHlNaW4gIT09IDAgfHwgeU1heCAhPT0gMCA/IHlNaW4gKyB5TWF4IDogbWF4KG92ZXJmbG93LnRvcCwgb3ZlcmZsb3cuYm90dG9tKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IGFwcGx5KHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGF2YWlsYWJsZVdpZHRoLFxuICAgICAgICBhdmFpbGFibGVIZWlnaHRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbmV4dERpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnRzLmZsb2F0aW5nKTtcbiAgICAgIGlmICh3aWR0aCAhPT0gbmV4dERpbWVuc2lvbnMud2lkdGggfHwgaGVpZ2h0ICE9PSBuZXh0RGltZW5zaW9ucy5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcmVjdHM6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IHsgYXJyb3csIGF1dG9QbGFjZW1lbnQsIGNvbXB1dGVQb3NpdGlvbiwgZGV0ZWN0T3ZlcmZsb3csIGZsaXAsIGhpZGUsIGlubGluZSwgbGltaXRTaGlmdCwgb2Zmc2V0LCByZWN0VG9DbGllbnRSZWN0LCBzaGlmdCwgc2l6ZSB9O1xuIiwiaW1wb3J0IHsgcmVjdFRvQ2xpZW50UmVjdCwgY29tcHV0ZVBvc2l0aW9uIGFzIGNvbXB1dGVQb3NpdGlvbiQxIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2NvcmUnO1xuZXhwb3J0IHsgYXJyb3csIGF1dG9QbGFjZW1lbnQsIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgc2hpZnQsIHNpemUgfSBmcm9tICdAZmxvYXRpbmctdWkvY29yZSc7XG5cbmZ1bmN0aW9uIGdldFdpbmRvdyhub2RlKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50O1xuICByZXR1cm4gKChfbm9kZSRvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX25vZGUkb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgfHwgd2luZG93O1xufVxuXG5mdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGlzTm9kZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLk5vZGU7XG59XG5mdW5jdGlvbiBnZXROb2RlTmFtZShub2RlKSB7XG4gIHJldHVybiBpc05vZGUobm9kZSkgPyAobm9kZS5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA6ICcnO1xufVxuXG5sZXQgdWFTdHJpbmc7XG5mdW5jdGlvbiBnZXRVQVN0cmluZygpIHtcbiAgaWYgKHVhU3RyaW5nKSB7XG4gICAgcmV0dXJuIHVhU3RyaW5nO1xuICB9XG4gIGNvbnN0IHVhRGF0YSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuICBpZiAodWFEYXRhICYmIEFycmF5LmlzQXJyYXkodWFEYXRhLmJyYW5kcykpIHtcbiAgICB1YVN0cmluZyA9IHVhRGF0YS5icmFuZHMubWFwKGl0ZW0gPT4gaXRlbS5icmFuZCArIFwiL1wiICsgaXRlbS52ZXJzaW9uKS5qb2luKCcgJyk7XG4gICAgcmV0dXJuIHVhU3RyaW5nO1xuICB9XG4gIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50O1xufVxuXG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuSFRNTEVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5FbGVtZW50O1xufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KG5vZGUpIHtcbiAgLy8gQnJvd3NlcnMgd2l0aG91dCBgU2hhZG93Um9vdGAgc3VwcG9ydC5cbiAgaWYgKHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLlNoYWRvd1Jvb3Q7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbn1cbmZ1bmN0aW9uIGlzT3ZlcmZsb3dFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3Qge1xuICAgIG92ZXJmbG93LFxuICAgIG92ZXJmbG93WCxcbiAgICBvdmVyZmxvd1ksXG4gICAgZGlzcGxheVxuICB9ID0gZ2V0Q29tcHV0ZWRTdHlsZSQxKGVsZW1lbnQpO1xuICByZXR1cm4gL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVufGNsaXAvLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpICYmICFbJ2lubGluZScsICdjb250ZW50cyddLmluY2x1ZGVzKGRpc3BsYXkpO1xufVxuZnVuY3Rpb24gaXNUYWJsZUVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gWyd0YWJsZScsICd0ZCcsICd0aCddLmluY2x1ZGVzKGdldE5vZGVOYW1lKGVsZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGlzQ29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgLy8gVE9ETzogVHJ5IHRvIHVzZSBmZWF0dXJlIGRldGVjdGlvbiBoZXJlIGluc3RlYWQuXG4gIGNvbnN0IGlzRmlyZWZveCA9IC9maXJlZm94L2kudGVzdChnZXRVQVN0cmluZygpKTtcbiAgY29uc3QgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZSQxKGVsZW1lbnQpO1xuICBjb25zdCBiYWNrZHJvcEZpbHRlciA9IGNzcy5iYWNrZHJvcEZpbHRlciB8fCBjc3MuV2Via2l0QmFja2Ryb3BGaWx0ZXI7XG5cbiAgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gIC8vIGNyZWF0ZSBhIGNvbnRhaW5pbmcgYmxvY2suXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIHJldHVybiBjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgKGJhY2tkcm9wRmlsdGVyID8gYmFja2Ryb3BGaWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiAoY3NzLmZpbHRlciA/IGNzcy5maWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLnNvbWUodmFsdWUgPT4gY3NzLndpbGxDaGFuZ2UuaW5jbHVkZXModmFsdWUpKSB8fCBbJ3BhaW50JywgJ2xheW91dCcsICdzdHJpY3QnLCAnY29udGVudCddLnNvbWUodmFsdWUgPT4ge1xuICAgIC8vIEFkZCB0eXBlIGNoZWNrIGZvciBvbGQgYnJvd3NlcnMuXG4gICAgY29uc3QgY29udGFpbiA9IGNzcy5jb250YWluO1xuICAgIHJldHVybiBjb250YWluICE9IG51bGwgPyBjb250YWluLmluY2x1ZGVzKHZhbHVlKSA6IGZhbHNlO1xuICB9KTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClgIGlzIGFmZmVjdGVkIGJ5IHZpc3VhbFxuICogdmlld3BvcnQgb2Zmc2V0cy4gSW4gU2FmYXJpLCB0aGUgYHhgL2B5YCBvZmZzZXRzIGFyZSB2YWx1ZXMgcmVsYXRpdmUgdG8gdGhlXG4gKiB2aXN1YWwgdmlld3BvcnQsIHdoaWxlIGluIG90aGVyIGVuZ2luZXMsIHRoZXkgYXJlIHZhbHVlcyByZWxhdGl2ZSB0byB0aGVcbiAqIGxheW91dCB2aWV3cG9ydC5cbiAqL1xuZnVuY3Rpb24gaXNDbGllbnRSZWN0VmlzdWFsVmlld3BvcnRCYXNlZCgpIHtcbiAgLy8gVE9ETzogVHJ5IHRvIHVzZSBmZWF0dXJlIGRldGVjdGlvbiBoZXJlIGluc3RlYWQuIEZlYXR1cmUgZGV0ZWN0aW9uIGZvclxuICAvLyB0aGlzIGNhbiBmYWlsIGluIHZhcmlvdXMgd2F5cywgbWFraW5nIHRoZSB1c2VyQWdlbnQgY2hlY2sgdGhlIG1vc3RcbiAgLy8gcmVsaWFibGU6XG4gIC8vIOKAoiBBbHdheXMtdmlzaWJsZSBzY3JvbGxiYXIgb3Igbm90XG4gIC8vIOKAoiBXaWR0aCBvZiA8aHRtbD5cblxuICAvLyBJcyBTYWZhcmkuXG4gIHJldHVybiAvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xufVxuZnVuY3Rpb24gaXNMYXN0VHJhdmVyc2FibGVOb2RlKG5vZGUpIHtcbiAgcmV0dXJuIFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddLmluY2x1ZGVzKGdldE5vZGVOYW1lKG5vZGUpKTtcbn1cblxuY29uc3QgbWluID0gTWF0aC5taW47XG5jb25zdCBtYXggPSBNYXRoLm1heDtcbmNvbnN0IHJvdW5kID0gTWF0aC5yb3VuZDtcblxuZnVuY3Rpb24gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUkMShlbGVtZW50KTtcbiAgbGV0IHdpZHRoID0gcGFyc2VGbG9hdChjc3Mud2lkdGgpO1xuICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChjc3MuaGVpZ2h0KTtcbiAgY29uc3QgaGFzT2Zmc2V0ID0gaXNIVE1MRWxlbWVudChlbGVtZW50KTtcbiAgY29uc3Qgb2Zmc2V0V2lkdGggPSBoYXNPZmZzZXQgPyBlbGVtZW50Lm9mZnNldFdpZHRoIDogd2lkdGg7XG4gIGNvbnN0IG9mZnNldEhlaWdodCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IDogaGVpZ2h0O1xuICBjb25zdCBzaG91bGRGYWxsYmFjayA9IHJvdW5kKHdpZHRoKSAhPT0gb2Zmc2V0V2lkdGggfHwgcm91bmQoaGVpZ2h0KSAhPT0gb2Zmc2V0SGVpZ2h0O1xuICBpZiAoc2hvdWxkRmFsbGJhY2spIHtcbiAgICB3aWR0aCA9IG9mZnNldFdpZHRoO1xuICAgIGhlaWdodCA9IG9mZnNldEhlaWdodDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBmYWxsYmFjazogc2hvdWxkRmFsbGJhY2tcbiAgfTtcbn1cblxuZnVuY3Rpb24gdW53cmFwRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiAhaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5jb250ZXh0RWxlbWVudCA6IGVsZW1lbnQ7XG59XG5cbmNvbnN0IEZBTExCQUNLX1NDQUxFID0ge1xuICB4OiAxLFxuICB5OiAxXG59O1xuZnVuY3Rpb24gZ2V0U2NhbGUoZWxlbWVudCkge1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGRvbUVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIEZBTExCQUNLX1NDQUxFO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBkb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGZhbGxiYWNrXG4gIH0gPSBnZXRDc3NEaW1lbnNpb25zKGRvbUVsZW1lbnQpO1xuICBsZXQgeCA9IChmYWxsYmFjayA/IHJvdW5kKHJlY3Qud2lkdGgpIDogcmVjdC53aWR0aCkgLyB3aWR0aDtcbiAgbGV0IHkgPSAoZmFsbGJhY2sgPyByb3VuZChyZWN0LmhlaWdodCkgOiByZWN0LmhlaWdodCkgLyBoZWlnaHQ7XG5cbiAgLy8gMCwgTmFOLCBvciBJbmZpbml0eSBzaG91bGQgYWx3YXlzIGZhbGxiYWNrIHRvIDEuXG5cbiAgaWYgKCF4IHx8ICFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB4ID0gMTtcbiAgfVxuICBpZiAoIXkgfHwgIU51bWJlci5pc0Zpbml0ZSh5KSkge1xuICAgIHkgPSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSB7XG4gIHZhciBfd2luJHZpc3VhbFZpZXdwb3J0LCBfd2luJHZpc3VhbFZpZXdwb3J0MjtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBsZXQgc2NhbGUgPSBGQUxMQkFDS19TQ0FMRTtcbiAgaWYgKGluY2x1ZGVTY2FsZSkge1xuICAgIGlmIChvZmZzZXRQYXJlbnQpIHtcbiAgICAgIGlmIChpc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjYWxlID0gZ2V0U2NhbGUoZWxlbWVudCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHdpbiA9IGRvbUVsZW1lbnQgPyBnZXRXaW5kb3coZG9tRWxlbWVudCkgOiB3aW5kb3c7XG4gIGNvbnN0IGFkZFZpc3VhbE9mZnNldHMgPSBpc0NsaWVudFJlY3RWaXN1YWxWaWV3cG9ydEJhc2VkKCkgJiYgaXNGaXhlZFN0cmF0ZWd5O1xuICBsZXQgeCA9IChjbGllbnRSZWN0LmxlZnQgKyAoYWRkVmlzdWFsT2Zmc2V0cyA/ICgoX3dpbiR2aXN1YWxWaWV3cG9ydCA9IHdpbi52aXN1YWxWaWV3cG9ydCkgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW4kdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCkgfHwgMCA6IDApKSAvIHNjYWxlLng7XG4gIGxldCB5ID0gKGNsaWVudFJlY3QudG9wICsgKGFkZFZpc3VhbE9mZnNldHMgPyAoKF93aW4kdmlzdWFsVmlld3BvcnQyID0gd2luLnZpc3VhbFZpZXdwb3J0KSA9PSBudWxsID8gdm9pZCAwIDogX3dpbiR2aXN1YWxWaWV3cG9ydDIub2Zmc2V0VG9wKSB8fCAwIDogMCkpIC8gc2NhbGUueTtcbiAgbGV0IHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlLng7XG4gIGxldCBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlLnk7XG4gIGlmIChkb21FbGVtZW50KSB7XG4gICAgY29uc3Qgd2luID0gZ2V0V2luZG93KGRvbUVsZW1lbnQpO1xuICAgIGNvbnN0IG9mZnNldFdpbiA9IG9mZnNldFBhcmVudCAmJiBpc0VsZW1lbnQob2Zmc2V0UGFyZW50KSA/IGdldFdpbmRvdyhvZmZzZXRQYXJlbnQpIDogb2Zmc2V0UGFyZW50O1xuICAgIGxldCBjdXJyZW50SUZyYW1lID0gd2luLmZyYW1lRWxlbWVudDtcbiAgICB3aGlsZSAoY3VycmVudElGcmFtZSAmJiBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0V2luICE9PSB3aW4pIHtcbiAgICAgIGNvbnN0IGlmcmFtZVNjYWxlID0gZ2V0U2NhbGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBpZnJhbWVSZWN0ID0gY3VycmVudElGcmFtZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudElGcmFtZSk7XG4gICAgICBpZnJhbWVSZWN0LnggKz0gKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgaWZyYW1lUmVjdC55ICs9IChjdXJyZW50SUZyYW1lLmNsaWVudFRvcCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdUb3ApKSAqIGlmcmFtZVNjYWxlLnk7XG4gICAgICB4ICo9IGlmcmFtZVNjYWxlLng7XG4gICAgICB5ICo9IGlmcmFtZVNjYWxlLnk7XG4gICAgICB3aWR0aCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgaGVpZ2h0ICo9IGlmcmFtZVNjYWxlLnk7XG4gICAgICB4ICs9IGlmcmFtZVJlY3QueDtcbiAgICAgIHkgKz0gaWZyYW1lUmVjdC55O1xuICAgICAgY3VycmVudElGcmFtZSA9IGdldFdpbmRvdyhjdXJyZW50SUZyYW1lKS5mcmFtZUVsZW1lbnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0VG9DbGllbnRSZWN0KHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQobm9kZSkge1xuICByZXR1cm4gKChpc05vZGUobm9kZSkgPyBub2RlLm93bmVyRG9jdW1lbnQgOiBub2RlLmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KSB7XG4gIGlmIChpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnBhZ2VYT2Zmc2V0LFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5wYWdlWU9mZnNldFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgaWYgKG9mZnNldFBhcmVudCA9PT0gZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIHJlY3Q7XG4gIH1cbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBsZXQgc2NhbGUgPSB7XG4gICAgeDogMSxcbiAgICB5OiAxXG4gIH07XG4gIGNvbnN0IG9mZnNldHMgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgc3RyYXRlZ3kgIT09ICdmaXhlZCcpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQpO1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoOiByZWN0LndpZHRoICogc2NhbGUueCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0ICogc2NhbGUueSxcbiAgICB4OiByZWN0LnggKiBzY2FsZS54IC0gc2Nyb2xsLnNjcm9sbExlZnQgKiBzY2FsZS54ICsgb2Zmc2V0cy54LFxuICAgIHk6IHJlY3QueSAqIHNjYWxlLnkgLSBzY3JvbGwuc2Nyb2xsVG9wICogc2NhbGUueSArIG9mZnNldHMueVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpIHtcbiAgLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuICAvLyBpbmNvcnJlY3QgZm9yIFJUTC5cbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG59XG5cbi8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGUuXG5mdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpO1xuICBjb25zdCBib2R5ID0gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gIGNvbnN0IHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpO1xuICBjb25zdCBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgYm9keS5jbGllbnRIZWlnaHQpO1xuICBsZXQgeCA9IC1zY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIGNvbnN0IHkgPSAtc2Nyb2xsLnNjcm9sbFRvcDtcbiAgaWYgKGdldENvbXB1dGVkU3R5bGUkMShib2R5KS5kaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgeCArPSBtYXgoaHRtbC5jbGllbnRXaWR0aCwgYm9keS5jbGllbnRXaWR0aCkgLSB3aWR0aDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShub2RlKSB7XG4gIGlmIChnZXROb2RlTmFtZShub2RlKSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID1cbiAgLy8gU3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGUuXG4gIG5vZGUuYXNzaWduZWRTbG90IHx8XG4gIC8vIERPTSBFbGVtZW50IGRldGVjdGVkLlxuICBub2RlLnBhcmVudE5vZGUgfHxcbiAgLy8gU2hhZG93Um9vdCBkZXRlY3RlZC5cbiAgaXNTaGFkb3dSb290KG5vZGUpICYmIG5vZGUuaG9zdCB8fFxuICAvLyBGYWxsYmFjay5cbiAgZ2V0RG9jdW1lbnRFbGVtZW50KG5vZGUpO1xuICByZXR1cm4gaXNTaGFkb3dSb290KHJlc3VsdCkgPyByZXN1bHQuaG9zdCA6IHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3Iobm9kZSkge1xuICBjb25zdCBwYXJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShub2RlKTtcbiAgaWYgKGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIC8vIGBnZXRQYXJlbnROb2RlYCB3aWxsIG5ldmVyIHJldHVybiBhIGBEb2N1bWVudGAgZHVlIHRvIHRoZSBmYWxsYmFja1xuICAgIC8vIGNoZWNrLCBzbyBpdCdzIGVpdGhlciB0aGUgPGh0bWw+IG9yIDxib2R5PiBlbGVtZW50LlxuICAgIHJldHVybiBwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuICBpZiAoaXNIVE1MRWxlbWVudChwYXJlbnROb2RlKSAmJiBpc092ZXJmbG93RWxlbWVudChwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBwYXJlbnROb2RlO1xuICB9XG4gIHJldHVybiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvcihwYXJlbnROb2RlKTtcbn1cblxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCkge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBjb25zdCBzY3JvbGxhYmxlQW5jZXN0b3IgPSBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKTtcbiAgY29uc3QgaXNCb2R5ID0gc2Nyb2xsYWJsZUFuY2VzdG9yID09PSAoKF9ub2RlJG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50LmJvZHkpO1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsYWJsZUFuY2VzdG9yKTtcbiAgaWYgKGlzQm9keSkge1xuICAgIHJldHVybiBsaXN0LmNvbmNhdCh3aW4sIHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNPdmVyZmxvd0VsZW1lbnQoc2Nyb2xsYWJsZUFuY2VzdG9yKSA/IHNjcm9sbGFibGVBbmNlc3RvciA6IFtdKTtcbiAgfVxuICByZXR1cm4gbGlzdC5jb25jYXQoc2Nyb2xsYWJsZUFuY2VzdG9yLCBnZXRPdmVyZmxvd0FuY2VzdG9ycyhzY3JvbGxhYmxlQW5jZXN0b3IpKTtcbn1cblxuZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3QgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIGxldCB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIGxldCBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgbGV0IHggPSAwO1xuICBsZXQgeSA9IDA7XG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIGNvbnN0IHZpc3VhbFZpZXdwb3J0QmFzZWQgPSBpc0NsaWVudFJlY3RWaXN1YWxWaWV3cG9ydEJhc2VkKCk7XG4gICAgaWYgKCF2aXN1YWxWaWV3cG9ydEJhc2VkIHx8IHZpc3VhbFZpZXdwb3J0QmFzZWQgJiYgc3RyYXRlZ3kgPT09ICdmaXhlZCcpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbi8vIFJldHVybnMgdGhlIGlubmVyIGNsaWVudCByZWN0LCBzdWJ0cmFjdGluZyBzY3JvbGxiYXJzIGlmIHByZXNlbnQuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgY29uc3QgdG9wID0gY2xpZW50UmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgY29uc3QgbGVmdCA9IGNsaWVudFJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgY29uc3Qgc2NhbGUgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0U2NhbGUoZWxlbWVudCkgOiB7XG4gICAgeDogMSxcbiAgICB5OiAxXG4gIH07XG4gIGNvbnN0IHdpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aCAqIHNjYWxlLng7XG4gIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0ICogc2NhbGUueTtcbiAgY29uc3QgeCA9IGxlZnQgKiBzY2FsZS54O1xuICBjb25zdCB5ID0gdG9wICogc2NhbGUueTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpIHtcbiAgbGV0IHJlY3Q7XG4gIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAndmlld3BvcnQnKSB7XG4gICAgcmVjdCA9IGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSk7XG4gIH0gZWxzZSBpZiAoY2xpcHBpbmdBbmNlc3RvciA9PT0gJ2RvY3VtZW50Jykge1xuICAgIHJlY3QgPSBnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKTtcbiAgfSBlbHNlIGlmIChpc0VsZW1lbnQoY2xpcHBpbmdBbmNlc3RvcikpIHtcbiAgICByZWN0ID0gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IG11dGFibGVSZWN0ID0ge1xuICAgICAgLi4uY2xpcHBpbmdBbmNlc3RvclxuICAgIH07XG4gICAgaWYgKGlzQ2xpZW50UmVjdFZpc3VhbFZpZXdwb3J0QmFzZWQoKSkge1xuICAgICAgdmFyIF93aW4kdmlzdWFsVmlld3BvcnQsIF93aW4kdmlzdWFsVmlld3BvcnQyO1xuICAgICAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICAgICAgbXV0YWJsZVJlY3QueCAtPSAoKF93aW4kdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQpID09IG51bGwgPyB2b2lkIDAgOiBfd2luJHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQpIHx8IDA7XG4gICAgICBtdXRhYmxlUmVjdC55IC09ICgoX3dpbiR2aXN1YWxWaWV3cG9ydDIgPSB3aW4udmlzdWFsVmlld3BvcnQpID09IG51bGwgPyB2b2lkIDAgOiBfd2luJHZpc3VhbFZpZXdwb3J0Mi5vZmZzZXRUb3ApIHx8IDA7XG4gICAgfVxuICAgIHJlY3QgPSBtdXRhYmxlUmVjdDtcbiAgfVxuICByZXR1cm4gcmVjdFRvQ2xpZW50UmVjdChyZWN0KTtcbn1cblxuLy8gQSBcImNsaXBwaW5nIGFuY2VzdG9yXCIgaXMgYW4gYG92ZXJmbG93YCBlbGVtZW50IHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBjaGlsZCBlbGVtZW50cy4gVGhpcyByZXR1cm5zIGFsbCBjbGlwcGluZyBhbmNlc3RvcnNcbi8vIG9mIHRoZSBnaXZlbiBlbGVtZW50IHVwIHRoZSB0cmVlLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIGNhY2hlKSB7XG4gIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGNhY2hlLmdldChlbGVtZW50KTtcbiAgaWYgKGNhY2hlZFJlc3VsdCkge1xuICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gIH1cbiAgbGV0IHJlc3VsdCA9IGdldE92ZXJmbG93QW5jZXN0b3JzKGVsZW1lbnQpLmZpbHRlcihlbCA9PiBpc0VsZW1lbnQoZWwpICYmIGdldE5vZGVOYW1lKGVsKSAhPT0gJ2JvZHknKTtcbiAgbGV0IGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgY29uc3QgZWxlbWVudElzRml4ZWQgPSBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSQxKGN1cnJlbnROb2RlKTtcbiAgICBjb25zdCBjb250YWluaW5nQmxvY2sgPSBpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSk7XG4gICAgY29uc3Qgc2hvdWxkSWdub3JlQ3VycmVudE5vZGUgPSBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnO1xuICAgIGlmIChzaG91bGRJZ25vcmVDdXJyZW50Tm9kZSkge1xuICAgICAgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzaG91bGREcm9wQ3VycmVudE5vZGUgPSBlbGVtZW50SXNGaXhlZCA/ICFjb250YWluaW5nQmxvY2sgJiYgIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIDogIWNvbnRhaW5pbmdCbG9jayAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJyAmJiAhIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlICYmIFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmNsdWRlcyhjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZS5wb3NpdGlvbik7XG4gICAgICBpZiAoc2hvdWxkRHJvcEN1cnJlbnROb2RlKSB7XG4gICAgICAgIC8vIERyb3Agbm9uLWNvbnRhaW5pbmcgYmxvY2tzLlxuICAgICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKGFuY2VzdG9yID0+IGFuY2VzdG9yICE9PSBjdXJyZW50Tm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZWNvcmQgbGFzdCBjb250YWluaW5nIGJsb2NrIGZvciBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBjb21wdXRlZFN0eWxlO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpO1xuICB9XG4gIGNhY2hlLnNldChlbGVtZW50LCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBhbmNlc3RvcnMuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoX3JlZikge1xuICBsZXQge1xuICAgIGVsZW1lbnQsXG4gICAgYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5LFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBfcmVmO1xuICBjb25zdCBlbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nQW5jZXN0b3JzJyA/IGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCB0aGlzLl9jKSA6IFtdLmNvbmNhdChib3VuZGFyeSk7XG4gIGNvbnN0IGNsaXBwaW5nQW5jZXN0b3JzID0gWy4uLmVsZW1lbnRDbGlwcGluZ0FuY2VzdG9ycywgcm9vdEJvdW5kYXJ5XTtcbiAgY29uc3QgZmlyc3RDbGlwcGluZ0FuY2VzdG9yID0gY2xpcHBpbmdBbmNlc3RvcnNbMF07XG4gIGNvbnN0IGNsaXBwaW5nUmVjdCA9IGNsaXBwaW5nQW5jZXN0b3JzLnJlZHVjZSgoYWNjUmVjdCwgY2xpcHBpbmdBbmNlc3RvcikgPT4ge1xuICAgIGNvbnN0IHJlY3QgPSBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpO1xuICAgIGFjY1JlY3QudG9wID0gbWF4KHJlY3QudG9wLCBhY2NSZWN0LnRvcCk7XG4gICAgYWNjUmVjdC5yaWdodCA9IG1pbihyZWN0LnJpZ2h0LCBhY2NSZWN0LnJpZ2h0KTtcbiAgICBhY2NSZWN0LmJvdHRvbSA9IG1pbihyZWN0LmJvdHRvbSwgYWNjUmVjdC5ib3R0b20pO1xuICAgIGFjY1JlY3QubGVmdCA9IG1heChyZWN0LmxlZnQsIGFjY1JlY3QubGVmdCk7XG4gICAgcmV0dXJuIGFjY1JlY3Q7XG4gIH0sIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBmaXJzdENsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KSk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IGNsaXBwaW5nUmVjdC5yaWdodCAtIGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIGhlaWdodDogY2xpcHBpbmdSZWN0LmJvdHRvbSAtIGNsaXBwaW5nUmVjdC50b3AsXG4gICAgeDogY2xpcHBpbmdSZWN0LmxlZnQsXG4gICAgeTogY2xpcHBpbmdSZWN0LnRvcFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREaW1lbnNpb25zKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpIHtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8IGdldENvbXB1dGVkU3R5bGUkMShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChwb2x5ZmlsbCkge1xuICAgIHJldHVybiBwb2x5ZmlsbChlbGVtZW50KTtcbiAgfVxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59XG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICBsZXQgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICB3aGlsZSAoaXNIVE1MRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBpZiAoaXNDb250YWluaW5nQmxvY2soY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShjdXJyZW50Tm9kZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuICBsZXQgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCk7XG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBnZXRDb21wdXRlZFN0eWxlJDEob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCwgcG9seWZpbGwpO1xuICB9XG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdodG1sJyB8fCBnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnYm9keScgJiYgZ2V0Q29tcHV0ZWRTdHlsZSQxKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnICYmICFpc0NvbnRhaW5pbmdCbG9jayhvZmZzZXRQYXJlbnQpKSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cbiAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkgfHwgd2luZG93O1xufVxuXG5mdW5jdGlvbiBnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudChlbGVtZW50LCBvZmZzZXRQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCB0cnVlLCBzdHJhdGVneSA9PT0gJ2ZpeGVkJywgb2Zmc2V0UGFyZW50KTtcbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBjb25zdCBvZmZzZXRzID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmIHN0cmF0ZWd5ICE9PSAnZml4ZWQnKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCBpc092ZXJmbG93RWxlbWVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlKTtcbiAgICAgIG9mZnNldHMueCA9IG9mZnNldFJlY3QueCArIG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ID0gb2Zmc2V0UmVjdC55ICsgb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHg6IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54LFxuICAgIHk6IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59XG5cbmNvbnN0IHBsYXRmb3JtID0ge1xuICBnZXRDbGlwcGluZ1JlY3QsXG4gIGNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0LFxuICBpc0VsZW1lbnQsXG4gIGdldERpbWVuc2lvbnMsXG4gIGdldE9mZnNldFBhcmVudCxcbiAgZ2V0RG9jdW1lbnRFbGVtZW50LFxuICBnZXRTY2FsZSxcbiAgYXN5bmMgZ2V0RWxlbWVudFJlY3RzKF9yZWYpIHtcbiAgICBsZXQge1xuICAgICAgcmVmZXJlbmNlLFxuICAgICAgZmxvYXRpbmcsXG4gICAgICBzdHJhdGVneVxuICAgIH0gPSBfcmVmO1xuICAgIGNvbnN0IGdldE9mZnNldFBhcmVudEZuID0gdGhpcy5nZXRPZmZzZXRQYXJlbnQgfHwgZ2V0T2Zmc2V0UGFyZW50O1xuICAgIGNvbnN0IGdldERpbWVuc2lvbnNGbiA9IHRoaXMuZ2V0RGltZW5zaW9ucztcbiAgICByZXR1cm4ge1xuICAgICAgcmVmZXJlbmNlOiBnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudChyZWZlcmVuY2UsIGF3YWl0IGdldE9mZnNldFBhcmVudEZuKGZsb2F0aW5nKSwgc3RyYXRlZ3kpLFxuICAgICAgZmxvYXRpbmc6IHtcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMCxcbiAgICAgICAgLi4uKGF3YWl0IGdldERpbWVuc2lvbnNGbihmbG9hdGluZykpXG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgZ2V0Q2xpZW50UmVjdHM6IGVsZW1lbnQgPT4gQXJyYXkuZnJvbShlbGVtZW50LmdldENsaWVudFJlY3RzKCkpLFxuICBpc1JUTDogZWxlbWVudCA9PiBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkuZGlyZWN0aW9uID09PSAncnRsJ1xufTtcblxuLyoqXG4gKiBBdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHdoZW4gbmVjZXNzYXJ5LlxuICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXMgbW91bnRlZCBvbiB0aGUgRE9NIG9yXG4gKiB2aXNpYmxlIG9uIHRoZSBzY3JlZW4uXG4gKiBAcmV0dXJucyBjbGVhbnVwIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGludm9rZWQgd2hlbiB0aGUgZmxvYXRpbmcgZWxlbWVudCBpc1xuICogcmVtb3ZlZCBmcm9tIHRoZSBET00gb3IgaGlkZGVuIGZyb20gdGhlIHNjcmVlbi5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hdXRvVXBkYXRlXG4gKi9cbmZ1bmN0aW9uIGF1dG9VcGRhdGUocmVmZXJlbmNlLCBmbG9hdGluZywgdXBkYXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qge1xuICAgIGFuY2VzdG9yU2Nyb2xsOiBfYW5jZXN0b3JTY3JvbGwgPSB0cnVlLFxuICAgIGFuY2VzdG9yUmVzaXplID0gdHJ1ZSxcbiAgICBlbGVtZW50UmVzaXplID0gdHJ1ZSxcbiAgICBhbmltYXRpb25GcmFtZSA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBhbmNlc3RvclNjcm9sbCA9IF9hbmNlc3RvclNjcm9sbCAmJiAhYW5pbWF0aW9uRnJhbWU7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGFuY2VzdG9yU2Nyb2xsIHx8IGFuY2VzdG9yUmVzaXplID8gWy4uLihpc0VsZW1lbnQocmVmZXJlbmNlKSA/IGdldE92ZXJmbG93QW5jZXN0b3JzKHJlZmVyZW5jZSkgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnQgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyhyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpIDogW10pLCAuLi5nZXRPdmVyZmxvd0FuY2VzdG9ycyhmbG9hdGluZyldIDogW107XG4gIGFuY2VzdG9ycy5mb3JFYWNoKGFuY2VzdG9yID0+IHtcbiAgICBhbmNlc3RvclNjcm9sbCAmJiBhbmNlc3Rvci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB1cGRhdGUsIHtcbiAgICAgIHBhc3NpdmU6IHRydWVcbiAgICB9KTtcbiAgICBhbmNlc3RvclJlc2l6ZSAmJiBhbmNlc3Rvci5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGUpO1xuICB9KTtcbiAgbGV0IG9ic2VydmVyID0gbnVsbDtcbiAgaWYgKGVsZW1lbnRSZXNpemUpIHtcbiAgICBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9KTtcbiAgICBpc0VsZW1lbnQocmVmZXJlbmNlKSAmJiAhYW5pbWF0aW9uRnJhbWUgJiYgb2JzZXJ2ZXIub2JzZXJ2ZShyZWZlcmVuY2UpO1xuICAgIGlmICghaXNFbGVtZW50KHJlZmVyZW5jZSkgJiYgcmVmZXJlbmNlLmNvbnRleHRFbGVtZW50ICYmICFhbmltYXRpb25GcmFtZSkge1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpO1xuICAgIH1cbiAgICBvYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgfVxuICBsZXQgZnJhbWVJZDtcbiAgbGV0IHByZXZSZWZSZWN0ID0gYW5pbWF0aW9uRnJhbWUgPyBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKSA6IG51bGw7XG4gIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgIGZyYW1lTG9vcCgpO1xuICB9XG4gIGZ1bmN0aW9uIGZyYW1lTG9vcCgpIHtcbiAgICBjb25zdCBuZXh0UmVmUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpO1xuICAgIGlmIChwcmV2UmVmUmVjdCAmJiAobmV4dFJlZlJlY3QueCAhPT0gcHJldlJlZlJlY3QueCB8fCBuZXh0UmVmUmVjdC55ICE9PSBwcmV2UmVmUmVjdC55IHx8IG5leHRSZWZSZWN0LndpZHRoICE9PSBwcmV2UmVmUmVjdC53aWR0aCB8fCBuZXh0UmVmUmVjdC5oZWlnaHQgIT09IHByZXZSZWZSZWN0LmhlaWdodCkpIHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH1cbiAgICBwcmV2UmVmUmVjdCA9IG5leHRSZWZSZWN0O1xuICAgIGZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnJhbWVMb29wKTtcbiAgfVxuICB1cGRhdGUoKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICB2YXIgX29ic2VydmVyO1xuICAgIGFuY2VzdG9ycy5mb3JFYWNoKGFuY2VzdG9yID0+IHtcbiAgICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSk7XG4gICAgICBhbmNlc3RvclJlc2l6ZSAmJiBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGUpO1xuICAgIH0pO1xuICAgIChfb2JzZXJ2ZXIgPSBvYnNlcnZlcikgPT0gbnVsbCA/IHZvaWQgMCA6IF9vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXIgPSBudWxsO1xuICAgIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoZnJhbWVJZCk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyB0aGF0IHdpbGwgcGxhY2UgdGhlIGZsb2F0aW5nIGVsZW1lbnRcbiAqIG5leHQgdG8gYSByZWZlcmVuY2UgZWxlbWVudCB3aGVuIGl0IGlzIGdpdmVuIGEgY2VydGFpbiBDU1MgcG9zaXRpb25pbmdcbiAqIHN0cmF0ZWd5LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGF1dG9VcGRhdGUsIGNvbXB1dGVQb3NpdGlvbiwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIHBsYXRmb3JtIH07XG4iLCJpbXBvcnQgeyB1c2VMYXlvdXRFZmZlY3QsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxudmFyIGluZGV4ID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IHVzZUxheW91dEVmZmVjdCA6IHVzZUVmZmVjdDtcblxuZXhwb3J0IGRlZmF1bHQgaW5kZXg7XG4iLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCB7IGpzeCwga2V5ZnJhbWVzLCBjc3MgYXMgY3NzJDIgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheSc7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzJztcbmltcG9ydCBfdHlwZW9mIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZic7XG5pbXBvcnQgX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90YWdnZWRUZW1wbGF0ZUxpdGVyYWwnO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eSc7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBhdXRvVXBkYXRlIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2RvbSc7XG5pbXBvcnQgdXNlTGF5b3V0RWZmZWN0IGZyb20gJ3VzZS1pc29tb3JwaGljLWxheW91dC1lZmZlY3QnO1xuXG52YXIgX2V4Y2x1ZGVkJDQgPSBbXCJjbGFzc05hbWVcIiwgXCJjbGVhclZhbHVlXCIsIFwiY3hcIiwgXCJnZXRTdHlsZXNcIiwgXCJnZXRDbGFzc05hbWVzXCIsIFwiZ2V0VmFsdWVcIiwgXCJoYXNWYWx1ZVwiLCBcImlzTXVsdGlcIiwgXCJpc1J0bFwiLCBcIm9wdGlvbnNcIiwgXCJzZWxlY3RPcHRpb25cIiwgXCJzZWxlY3RQcm9wc1wiLCBcInNldFZhbHVlXCIsIFwidGhlbWVcIl07XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE5PIE9QXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ2xhc3MgTmFtZSBQcmVmaXhlclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBjb21wb25lbnQgc3RhdGUgZm9yIHN0eWxpbmcgd2l0aCBjbGFzcyBuYW1lcy5cblxuIEV4cGVjdHMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBPUiBhIHN0cmluZy9vYmplY3QgcGFpcjpcbiAtIGNsYXNzTmFtZShbJ2NvbXAnLCAnY29tcC1hcmcnLCAnY29tcC1hcmctMiddKVxuICAgQHJldHVybnMgJ3JlYWN0LXNlbGVjdF9fY29tcCByZWFjdC1zZWxlY3RfX2NvbXAtYXJnIHJlYWN0LXNlbGVjdF9fY29tcC1hcmctMidcbiAtIGNsYXNzTmFtZSgnY29tcCcsIHsgc29tZTogdHJ1ZSwgc3RhdGU6IGZhbHNlIH0pXG4gICBAcmV0dXJucyAncmVhY3Qtc2VsZWN0X19jb21wIHJlYWN0LXNlbGVjdF9fY29tcC0tc29tZSdcbiovXG5mdW5jdGlvbiBhcHBseVByZWZpeFRvTmFtZShwcmVmaXgsIG5hbWUpIHtcbiAgaWYgKCFuYW1lKSB7XG4gICAgcmV0dXJuIHByZWZpeDtcbiAgfSBlbHNlIGlmIChuYW1lWzBdID09PSAnLScpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgbmFtZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ19fJyArIG5hbWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNsYXNzTmFtZXMocHJlZml4LCBzdGF0ZSkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgY2xhc3NOYW1lTGlzdCA9IG5ldyBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgY2xhc3NOYW1lTGlzdFtfa2V5IC0gMl0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cbiAgdmFyIGFyciA9IFtdLmNvbmNhdChjbGFzc05hbWVMaXN0KTtcbiAgaWYgKHN0YXRlICYmIHByZWZpeCkge1xuICAgIGZvciAodmFyIGtleSBpbiBzdGF0ZSkge1xuICAgICAgaWYgKHN0YXRlLmhhc093blByb3BlcnR5KGtleSkgJiYgc3RhdGVba2V5XSkge1xuICAgICAgICBhcnIucHVzaChcIlwiLmNvbmNhdChhcHBseVByZWZpeFRvTmFtZShwcmVmaXgsIGtleSkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFyci5maWx0ZXIoZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gaTtcbiAgfSkubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgcmV0dXJuIFN0cmluZyhpKS50cmltKCk7XG4gIH0pLmpvaW4oJyAnKTtcbn1cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ2xlYW4gVmFsdWVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgY2xlYW5WYWx1ZSA9IGZ1bmN0aW9uIGNsZWFuVmFsdWUodmFsdWUpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUuZmlsdGVyKEJvb2xlYW4pO1xuICBpZiAoX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSByZXR1cm4gW3ZhbHVlXTtcbiAgcmV0dXJuIFtdO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDbGVhbiBDb21tb24gUHJvcHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgY2xlYW5Db21tb25Qcm9wcyA9IGZ1bmN0aW9uIGNsZWFuQ29tbW9uUHJvcHMocHJvcHMpIHtcbiAgLy9jbGFzc05hbWVcbiAgcHJvcHMuY2xhc3NOYW1lO1xuICAgIHByb3BzLmNsZWFyVmFsdWU7XG4gICAgcHJvcHMuY3g7XG4gICAgcHJvcHMuZ2V0U3R5bGVzO1xuICAgIHByb3BzLmdldENsYXNzTmFtZXM7XG4gICAgcHJvcHMuZ2V0VmFsdWU7XG4gICAgcHJvcHMuaGFzVmFsdWU7XG4gICAgcHJvcHMuaXNNdWx0aTtcbiAgICBwcm9wcy5pc1J0bDtcbiAgICBwcm9wcy5vcHRpb25zO1xuICAgIHByb3BzLnNlbGVjdE9wdGlvbjtcbiAgICBwcm9wcy5zZWxlY3RQcm9wcztcbiAgICBwcm9wcy5zZXRWYWx1ZTtcbiAgICBwcm9wcy50aGVtZTtcbiAgICB2YXIgaW5uZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgX2V4Y2x1ZGVkJDQpO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7fSwgaW5uZXJQcm9wcyk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEdldCBTdHlsZSBQcm9wc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBnZXRTdHlsZVByb3BzID0gZnVuY3Rpb24gZ2V0U3R5bGVQcm9wcyhwcm9wcywgbmFtZSwgY2xhc3NOYW1lc1N0YXRlKSB7XG4gIHZhciBjeCA9IHByb3BzLmN4LFxuICAgIGdldFN0eWxlcyA9IHByb3BzLmdldFN0eWxlcyxcbiAgICBnZXRDbGFzc05hbWVzID0gcHJvcHMuZ2V0Q2xhc3NOYW1lcyxcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWU7XG4gIHJldHVybiB7XG4gICAgY3NzOiBnZXRTdHlsZXMobmFtZSwgcHJvcHMpLFxuICAgIGNsYXNzTmFtZTogY3goY2xhc3NOYW1lc1N0YXRlICE9PSBudWxsICYmIGNsYXNzTmFtZXNTdGF0ZSAhPT0gdm9pZCAwID8gY2xhc3NOYW1lc1N0YXRlIDoge30sIGdldENsYXNzTmFtZXMobmFtZSwgcHJvcHMpLCBjbGFzc05hbWUpXG4gIH07XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhhbmRsZSBJbnB1dCBDaGFuZ2Vcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBoYW5kbGVJbnB1dENoYW5nZShpbnB1dFZhbHVlLCBhY3Rpb25NZXRhLCBvbklucHV0Q2hhbmdlKSB7XG4gIGlmIChvbklucHV0Q2hhbmdlKSB7XG4gICAgdmFyIF9uZXdWYWx1ZSA9IG9uSW5wdXRDaGFuZ2UoaW5wdXRWYWx1ZSwgYWN0aW9uTWV0YSk7XG4gICAgaWYgKHR5cGVvZiBfbmV3VmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gX25ld1ZhbHVlO1xuICB9XG4gIHJldHVybiBpbnB1dFZhbHVlO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNjcm9sbCBIZWxwZXJzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gaXNEb2N1bWVudEVsZW1lbnQoZWwpIHtcbiAgcmV0dXJuIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGRvY3VtZW50LmJvZHksIHdpbmRvd10uaW5kZXhPZihlbCkgPiAtMTtcbn1cblxuLy8gTm9ybWFsaXplZCBTY3JvbGwgVG9wXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gbm9ybWFsaXplZEhlaWdodChlbCkge1xuICBpZiAoaXNEb2N1bWVudEVsZW1lbnQoZWwpKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodDtcbiAgfVxuICByZXR1cm4gZWwuY2xpZW50SGVpZ2h0O1xufVxuXG4vLyBOb3JtYWxpemVkIHNjcm9sbFRvICYgc2Nyb2xsVG9wXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsVG9wKGVsKSB7XG4gIGlmIChpc0RvY3VtZW50RWxlbWVudChlbCkpIHtcbiAgICByZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0O1xuICB9XG4gIHJldHVybiBlbC5zY3JvbGxUb3A7XG59XG5mdW5jdGlvbiBzY3JvbGxUbyhlbCwgdG9wKSB7XG4gIC8vIHdpdGggYSBzY3JvbGwgZGlzdGFuY2UsIHdlIHBlcmZvcm0gc2Nyb2xsIG9uIHRoZSBlbGVtZW50XG4gIGlmIChpc0RvY3VtZW50RWxlbWVudChlbCkpIHtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgdG9wKTtcbiAgICByZXR1cm47XG4gIH1cbiAgZWwuc2Nyb2xsVG9wID0gdG9wO1xufVxuXG4vLyBHZXQgU2Nyb2xsIFBhcmVudFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIHZhciBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHZhciBleGNsdWRlU3RhdGljUGFyZW50ID0gc3R5bGUucG9zaXRpb24gPT09ICdhYnNvbHV0ZSc7XG4gIHZhciBvdmVyZmxvd1J4ID0gLyhhdXRvfHNjcm9sbCkvO1xuICBpZiAoc3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIGZvciAodmFyIHBhcmVudCA9IGVsZW1lbnQ7IHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50Oykge1xuICAgIHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpO1xuICAgIGlmIChleGNsdWRlU3RhdGljUGFyZW50ICYmIHN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChvdmVyZmxvd1J4LnRlc3Qoc3R5bGUub3ZlcmZsb3cgKyBzdHlsZS5vdmVyZmxvd1kgKyBzdHlsZS5vdmVyZmxvd1gpKSB7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xufVxuXG4vLyBBbmltYXRlZCBTY3JvbGwgVG9cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAgQHBhcmFtIHQ6IHRpbWUgKGVsYXBzZWQpXG4gIEBwYXJhbSBiOiBpbml0aWFsIHZhbHVlXG4gIEBwYXJhbSBjOiBhbW91bnQgb2YgY2hhbmdlXG4gIEBwYXJhbSBkOiBkdXJhdGlvblxuKi9cbmZ1bmN0aW9uIGVhc2VPdXRDdWJpYyh0LCBiLCBjLCBkKSB7XG4gIHJldHVybiBjICogKCh0ID0gdCAvIGQgLSAxKSAqIHQgKiB0ICsgMSkgKyBiO1xufVxuZnVuY3Rpb24gYW5pbWF0ZWRTY3JvbGxUbyhlbGVtZW50LCB0bykge1xuICB2YXIgZHVyYXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDIwMDtcbiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBub29wO1xuICB2YXIgc3RhcnQgPSBnZXRTY3JvbGxUb3AoZWxlbWVudCk7XG4gIHZhciBjaGFuZ2UgPSB0byAtIHN0YXJ0O1xuICB2YXIgaW5jcmVtZW50ID0gMTA7XG4gIHZhciBjdXJyZW50VGltZSA9IDA7XG4gIGZ1bmN0aW9uIGFuaW1hdGVTY3JvbGwoKSB7XG4gICAgY3VycmVudFRpbWUgKz0gaW5jcmVtZW50O1xuICAgIHZhciB2YWwgPSBlYXNlT3V0Q3ViaWMoY3VycmVudFRpbWUsIHN0YXJ0LCBjaGFuZ2UsIGR1cmF0aW9uKTtcbiAgICBzY3JvbGxUbyhlbGVtZW50LCB2YWwpO1xuICAgIGlmIChjdXJyZW50VGltZSA8IGR1cmF0aW9uKSB7XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGVTY3JvbGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgYW5pbWF0ZVNjcm9sbCgpO1xufVxuXG4vLyBTY3JvbGwgSW50byBWaWV3XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gc2Nyb2xsSW50b1ZpZXcobWVudUVsLCBmb2N1c2VkRWwpIHtcbiAgdmFyIG1lbnVSZWN0ID0gbWVudUVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgZm9jdXNlZFJlY3QgPSBmb2N1c2VkRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBvdmVyU2Nyb2xsID0gZm9jdXNlZEVsLm9mZnNldEhlaWdodCAvIDM7XG4gIGlmIChmb2N1c2VkUmVjdC5ib3R0b20gKyBvdmVyU2Nyb2xsID4gbWVudVJlY3QuYm90dG9tKSB7XG4gICAgc2Nyb2xsVG8obWVudUVsLCBNYXRoLm1pbihmb2N1c2VkRWwub2Zmc2V0VG9wICsgZm9jdXNlZEVsLmNsaWVudEhlaWdodCAtIG1lbnVFbC5vZmZzZXRIZWlnaHQgKyBvdmVyU2Nyb2xsLCBtZW51RWwuc2Nyb2xsSGVpZ2h0KSk7XG4gIH0gZWxzZSBpZiAoZm9jdXNlZFJlY3QudG9wIC0gb3ZlclNjcm9sbCA8IG1lbnVSZWN0LnRvcCkge1xuICAgIHNjcm9sbFRvKG1lbnVFbCwgTWF0aC5tYXgoZm9jdXNlZEVsLm9mZnNldFRvcCAtIG92ZXJTY3JvbGwsIDApKTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEdldCBib3VuZGluZyBjbGllbnQgb2JqZWN0XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gY2Fubm90IGdldCBrZXlzIHVzaW5nIGFycmF5IG5vdGF0aW9uIHdpdGggRE9NUmVjdFxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRPYmooZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tOiByZWN0LmJvdHRvbSxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICByaWdodDogcmVjdC5yaWdodCxcbiAgICB0b3A6IHJlY3QudG9wLFxuICAgIHdpZHRoOiByZWN0LndpZHRoXG4gIH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVG91Y2ggQ2FwYWJpbGl0eSBEZXRlY3RvclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmZ1bmN0aW9uIGlzVG91Y2hDYXBhYmxlKCkge1xuICB0cnkge1xuICAgIGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdUb3VjaEV2ZW50Jyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNb2JpbGUgRGV2aWNlIERldGVjdG9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gaXNNb2JpbGVEZXZpY2UoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFBhc3NpdmUgRXZlbnQgRGV0ZWN0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vcmFmZ3JhcGgvZGV0ZWN0LWl0L2Jsb2IvbWFpbi9zcmMvaW5kZXgudHMjTDE5LUwzNlxudmFyIHBhc3NpdmVPcHRpb25BY2Nlc3NlZCA9IGZhbHNlO1xudmFyIG9wdGlvbnMgPSB7XG4gIGdldCBwYXNzaXZlKCkge1xuICAgIHJldHVybiBwYXNzaXZlT3B0aW9uQWNjZXNzZWQgPSB0cnVlO1xuICB9XG59O1xuLy8gY2hlY2sgZm9yIFNTUlxudmFyIHcgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHt9O1xuaWYgKHcuYWRkRXZlbnRMaXN0ZW5lciAmJiB3LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgdy5hZGRFdmVudExpc3RlbmVyKCdwJywgbm9vcCwgb3B0aW9ucyk7XG4gIHcucmVtb3ZlRXZlbnRMaXN0ZW5lcigncCcsIG5vb3AsIGZhbHNlKTtcbn1cbnZhciBzdXBwb3J0c1Bhc3NpdmVFdmVudHMgPSBwYXNzaXZlT3B0aW9uQWNjZXNzZWQ7XG5mdW5jdGlvbiBub3ROdWxsaXNoKGl0ZW0pIHtcbiAgcmV0dXJuIGl0ZW0gIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFyZyk7XG59XG5mdW5jdGlvbiB2YWx1ZVRlcm5hcnkoaXNNdWx0aSwgbXVsdGlWYWx1ZSwgc2luZ2xlVmFsdWUpIHtcbiAgcmV0dXJuIGlzTXVsdGkgPyBtdWx0aVZhbHVlIDogc2luZ2xlVmFsdWU7XG59XG5mdW5jdGlvbiBzaW5nbGVWYWx1ZUFzVmFsdWUoc2luZ2xlVmFsdWUpIHtcbiAgcmV0dXJuIHNpbmdsZVZhbHVlO1xufVxuZnVuY3Rpb24gbXVsdGlWYWx1ZUFzVmFsdWUobXVsdGlWYWx1ZSkge1xuICByZXR1cm4gbXVsdGlWYWx1ZTtcbn1cbnZhciByZW1vdmVQcm9wcyA9IGZ1bmN0aW9uIHJlbW92ZVByb3BzKHByb3BzT2JqKSB7XG4gIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgcHJvcGVydGllcyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgcHJvcGVydGllc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgfVxuICB2YXIgcHJvcHNNYXAgPSBPYmplY3QuZW50cmllcyhwcm9wc09iaikuZmlsdGVyKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMSksXG4gICAgICBrZXkgPSBfcmVmMlswXTtcbiAgICByZXR1cm4gIXByb3BlcnRpZXMuaW5jbHVkZXMoa2V5KTtcbiAgfSk7XG4gIHJldHVybiBwcm9wc01hcC5yZWR1Y2UoZnVuY3Rpb24gKG5ld1Byb3BzLCBfcmVmMykge1xuICAgIHZhciBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCAyKSxcbiAgICAgIGtleSA9IF9yZWY0WzBdLFxuICAgICAgdmFsID0gX3JlZjRbMV07XG4gICAgbmV3UHJvcHNba2V5XSA9IHZhbDtcbiAgICByZXR1cm4gbmV3UHJvcHM7XG4gIH0sIHt9KTtcbn07XG5cbnZhciBfZXhjbHVkZWQkMyA9IFtcImNoaWxkcmVuXCIsIFwiaW5uZXJQcm9wc1wiXSxcbiAgX2V4Y2x1ZGVkMiQxID0gW1wiY2hpbGRyZW5cIiwgXCJpbm5lclByb3BzXCJdO1xuZnVuY3Rpb24gZ2V0TWVudVBsYWNlbWVudChfcmVmKSB7XG4gIHZhciBwcmVmZXJyZWRNYXhIZWlnaHQgPSBfcmVmLm1heEhlaWdodCxcbiAgICBtZW51RWwgPSBfcmVmLm1lbnVFbCxcbiAgICBtaW5IZWlnaHQgPSBfcmVmLm1pbkhlaWdodCxcbiAgICBwcmVmZXJyZWRQbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudCxcbiAgICBzaG91bGRTY3JvbGwgPSBfcmVmLnNob3VsZFNjcm9sbCxcbiAgICBpc0ZpeGVkUG9zaXRpb24gPSBfcmVmLmlzRml4ZWRQb3NpdGlvbixcbiAgICBjb250cm9sSGVpZ2h0ID0gX3JlZi5jb250cm9sSGVpZ2h0O1xuICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KG1lbnVFbCk7XG4gIHZhciBkZWZhdWx0U3RhdGUgPSB7XG4gICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICBtYXhIZWlnaHQ6IHByZWZlcnJlZE1heEhlaWdodFxuICB9O1xuXG4gIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nLCByZXR1cm4gZGVmYXVsdCBzdGF0ZVxuICBpZiAoIW1lbnVFbCB8fCAhbWVudUVsLm9mZnNldFBhcmVudCkgcmV0dXJuIGRlZmF1bHRTdGF0ZTtcblxuICAvLyB3ZSBjYW4ndCB0cnVzdCBgc2Nyb2xsUGFyZW50LnNjcm9sbEhlaWdodGAgLS0+IGl0IG1heSBpbmNyZWFzZSB3aGVuXG4gIC8vIHRoZSBtZW51IGlzIHJlbmRlcmVkXG4gIHZhciBfc2Nyb2xsUGFyZW50JGdldEJvdW4gPSBzY3JvbGxQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgc2Nyb2xsSGVpZ2h0ID0gX3Njcm9sbFBhcmVudCRnZXRCb3VuLmhlaWdodDtcbiAgdmFyIF9tZW51RWwkZ2V0Qm91bmRpbmdDbCA9IG1lbnVFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICBtZW51Qm90dG9tID0gX21lbnVFbCRnZXRCb3VuZGluZ0NsLmJvdHRvbSxcbiAgICBtZW51SGVpZ2h0ID0gX21lbnVFbCRnZXRCb3VuZGluZ0NsLmhlaWdodCxcbiAgICBtZW51VG9wID0gX21lbnVFbCRnZXRCb3VuZGluZ0NsLnRvcDtcbiAgdmFyIF9tZW51RWwkb2Zmc2V0UGFyZW50JCA9IG1lbnVFbC5vZmZzZXRQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgY29udGFpbmVyVG9wID0gX21lbnVFbCRvZmZzZXRQYXJlbnQkLnRvcDtcbiAgdmFyIHZpZXdIZWlnaHQgPSBpc0ZpeGVkUG9zaXRpb24gPyB3aW5kb3cuaW5uZXJIZWlnaHQgOiBub3JtYWxpemVkSGVpZ2h0KHNjcm9sbFBhcmVudCk7XG4gIHZhciBzY3JvbGxUb3AgPSBnZXRTY3JvbGxUb3Aoc2Nyb2xsUGFyZW50KTtcbiAgdmFyIG1hcmdpbkJvdHRvbSA9IHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUobWVudUVsKS5tYXJnaW5Cb3R0b20sIDEwKTtcbiAgdmFyIG1hcmdpblRvcCA9IHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUobWVudUVsKS5tYXJnaW5Ub3AsIDEwKTtcbiAgdmFyIHZpZXdTcGFjZUFib3ZlID0gY29udGFpbmVyVG9wIC0gbWFyZ2luVG9wO1xuICB2YXIgdmlld1NwYWNlQmVsb3cgPSB2aWV3SGVpZ2h0IC0gbWVudVRvcDtcbiAgdmFyIHNjcm9sbFNwYWNlQWJvdmUgPSB2aWV3U3BhY2VBYm92ZSArIHNjcm9sbFRvcDtcbiAgdmFyIHNjcm9sbFNwYWNlQmVsb3cgPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBtZW51VG9wO1xuICB2YXIgc2Nyb2xsRG93biA9IG1lbnVCb3R0b20gLSB2aWV3SGVpZ2h0ICsgc2Nyb2xsVG9wICsgbWFyZ2luQm90dG9tO1xuICB2YXIgc2Nyb2xsVXAgPSBzY3JvbGxUb3AgKyBtZW51VG9wIC0gbWFyZ2luVG9wO1xuICB2YXIgc2Nyb2xsRHVyYXRpb24gPSAxNjA7XG4gIHN3aXRjaCAocHJlZmVycmVkUGxhY2VtZW50KSB7XG4gICAgY2FzZSAnYXV0byc6XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIC8vIDE6IHRoZSBtZW51IHdpbGwgZml0LCBkbyBub3RoaW5nXG4gICAgICBpZiAodmlld1NwYWNlQmVsb3cgPj0gbWVudUhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICAgICAgbWF4SGVpZ2h0OiBwcmVmZXJyZWRNYXhIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gMjogdGhlIG1lbnUgd2lsbCBmaXQsIGlmIHNjcm9sbGVkXG4gICAgICBpZiAoc2Nyb2xsU3BhY2VCZWxvdyA+PSBtZW51SGVpZ2h0ICYmICFpc0ZpeGVkUG9zaXRpb24pIHtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIGFuaW1hdGVkU2Nyb2xsVG8oc2Nyb2xsUGFyZW50LCBzY3JvbGxEb3duLCBzY3JvbGxEdXJhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgICAgIG1heEhlaWdodDogcHJlZmVycmVkTWF4SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIDM6IHRoZSBtZW51IHdpbGwgZml0LCBpZiBjb25zdHJhaW5lZFxuICAgICAgaWYgKCFpc0ZpeGVkUG9zaXRpb24gJiYgc2Nyb2xsU3BhY2VCZWxvdyA+PSBtaW5IZWlnaHQgfHwgaXNGaXhlZFBvc2l0aW9uICYmIHZpZXdTcGFjZUJlbG93ID49IG1pbkhlaWdodCkge1xuICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgICAgYW5pbWF0ZWRTY3JvbGxUbyhzY3JvbGxQYXJlbnQsIHNjcm9sbERvd24sIHNjcm9sbER1cmF0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlIHdhbnQgdG8gcHJvdmlkZSBhcyBtdWNoIG9mIHRoZSBtZW51IGFzIHBvc3NpYmxlIHRvIHRoZSB1c2VyLFxuICAgICAgICAvLyBzbyBnaXZlIHRoZW0gd2hhdGV2ZXIgaXMgYXZhaWxhYmxlIGJlbG93IHJhdGhlciB0aGFuIHRoZSBtaW5IZWlnaHQuXG4gICAgICAgIHZhciBjb25zdHJhaW5lZEhlaWdodCA9IGlzRml4ZWRQb3NpdGlvbiA/IHZpZXdTcGFjZUJlbG93IC0gbWFyZ2luQm90dG9tIDogc2Nyb2xsU3BhY2VCZWxvdyAtIG1hcmdpbkJvdHRvbTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgICAgIG1heEhlaWdodDogY29uc3RyYWluZWRIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gRm9ya2VkIGJldmlvdXIgd2hlbiB0aGVyZSBpc24ndCBlbm91Z2ggc3BhY2UgYmVsb3dcblxuICAgICAgLy8gQVVUTzogZmxpcCB0aGUgbWVudSwgcmVuZGVyIGFib3ZlXG4gICAgICBpZiAocHJlZmVycmVkUGxhY2VtZW50ID09PSAnYXV0bycgfHwgaXNGaXhlZFBvc2l0aW9uKSB7XG4gICAgICAgIC8vIG1heSBuZWVkIHRvIGJlIGNvbnN0cmFpbmVkIGFmdGVyIGZsaXBwaW5nXG4gICAgICAgIHZhciBfY29uc3RyYWluZWRIZWlnaHQgPSBwcmVmZXJyZWRNYXhIZWlnaHQ7XG4gICAgICAgIHZhciBzcGFjZUFib3ZlID0gaXNGaXhlZFBvc2l0aW9uID8gdmlld1NwYWNlQWJvdmUgOiBzY3JvbGxTcGFjZUFib3ZlO1xuICAgICAgICBpZiAoc3BhY2VBYm92ZSA+PSBtaW5IZWlnaHQpIHtcbiAgICAgICAgICBfY29uc3RyYWluZWRIZWlnaHQgPSBNYXRoLm1pbihzcGFjZUFib3ZlIC0gbWFyZ2luQm90dG9tIC0gY29udHJvbEhlaWdodCwgcHJlZmVycmVkTWF4SGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYWNlbWVudDogJ3RvcCcsXG4gICAgICAgICAgbWF4SGVpZ2h0OiBfY29uc3RyYWluZWRIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gQk9UVE9NOiBhbGxvdyBicm93c2VyIHRvIGluY3JlYXNlIHNjcm9sbGFibGUgYXJlYSBhbmQgaW1tZWRpYXRlbHkgc2V0IHNjcm9sbFxuICAgICAgaWYgKHByZWZlcnJlZFBsYWNlbWVudCA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIHNjcm9sbFRvKHNjcm9sbFBhcmVudCwgc2Nyb2xsRG93bik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgICAgIG1heEhlaWdodDogcHJlZmVycmVkTWF4SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0b3AnOlxuICAgICAgLy8gMTogdGhlIG1lbnUgd2lsbCBmaXQsIGRvIG5vdGhpbmdcbiAgICAgIGlmICh2aWV3U3BhY2VBYm92ZSA+PSBtZW51SGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IHByZWZlcnJlZE1heEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyAyOiB0aGUgbWVudSB3aWxsIGZpdCwgaWYgc2Nyb2xsZWRcbiAgICAgIGlmIChzY3JvbGxTcGFjZUFib3ZlID49IG1lbnVIZWlnaHQgJiYgIWlzRml4ZWRQb3NpdGlvbikge1xuICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgICAgYW5pbWF0ZWRTY3JvbGxUbyhzY3JvbGxQYXJlbnQsIHNjcm9sbFVwLCBzY3JvbGxEdXJhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICd0b3AnLFxuICAgICAgICAgIG1heEhlaWdodDogcHJlZmVycmVkTWF4SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIDM6IHRoZSBtZW51IHdpbGwgZml0LCBpZiBjb25zdHJhaW5lZFxuICAgICAgaWYgKCFpc0ZpeGVkUG9zaXRpb24gJiYgc2Nyb2xsU3BhY2VBYm92ZSA+PSBtaW5IZWlnaHQgfHwgaXNGaXhlZFBvc2l0aW9uICYmIHZpZXdTcGFjZUFib3ZlID49IG1pbkhlaWdodCkge1xuICAgICAgICB2YXIgX2NvbnN0cmFpbmVkSGVpZ2h0MiA9IHByZWZlcnJlZE1heEhlaWdodDtcblxuICAgICAgICAvLyB3ZSB3YW50IHRvIHByb3ZpZGUgYXMgbXVjaCBvZiB0aGUgbWVudSBhcyBwb3NzaWJsZSB0byB0aGUgdXNlcixcbiAgICAgICAgLy8gc28gZ2l2ZSB0aGVtIHdoYXRldmVyIGlzIGF2YWlsYWJsZSBiZWxvdyByYXRoZXIgdGhhbiB0aGUgbWluSGVpZ2h0LlxuICAgICAgICBpZiAoIWlzRml4ZWRQb3NpdGlvbiAmJiBzY3JvbGxTcGFjZUFib3ZlID49IG1pbkhlaWdodCB8fCBpc0ZpeGVkUG9zaXRpb24gJiYgdmlld1NwYWNlQWJvdmUgPj0gbWluSGVpZ2h0KSB7XG4gICAgICAgICAgX2NvbnN0cmFpbmVkSGVpZ2h0MiA9IGlzRml4ZWRQb3NpdGlvbiA/IHZpZXdTcGFjZUFib3ZlIC0gbWFyZ2luVG9wIDogc2Nyb2xsU3BhY2VBYm92ZSAtIG1hcmdpblRvcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgICAgYW5pbWF0ZWRTY3JvbGxUbyhzY3JvbGxQYXJlbnQsIHNjcm9sbFVwLCBzY3JvbGxEdXJhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICd0b3AnLFxuICAgICAgICAgIG1heEhlaWdodDogX2NvbnN0cmFpbmVkSGVpZ2h0MlxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBub3QgZW5vdWdoIHNwYWNlLCB0aGUgYnJvd3NlciBXSUxMIE5PVCBpbmNyZWFzZSBzY3JvbGxhYmxlIGFyZWEgd2hlblxuICAgICAgLy8gYWJzb2x1dGVseSBwb3NpdGlvbmVkIGVsZW1lbnQgcmVuZGVyZWQgYWJvdmUgdGhlIHZpZXdwb3J0IChvbmx5IGJlbG93KS5cbiAgICAgIC8vIEZsaXAgdGhlIG1lbnUsIHJlbmRlciBiZWxvd1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgICAgbWF4SGVpZ2h0OiBwcmVmZXJyZWRNYXhIZWlnaHRcbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcGxhY2VtZW50IHByb3ZpZGVkIFxcXCJcIi5jb25jYXQocHJlZmVycmVkUGxhY2VtZW50LCBcIlxcXCIuXCIpKTtcbiAgfVxuICByZXR1cm4gZGVmYXVsdFN0YXRlO1xufVxuXG4vLyBNZW51IENvbXBvbmVudFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGFsaWduVG9Db250cm9sKHBsYWNlbWVudCkge1xuICB2YXIgcGxhY2VtZW50VG9DU1NQcm9wID0ge1xuICAgIGJvdHRvbTogJ3RvcCcsXG4gICAgdG9wOiAnYm90dG9tJ1xuICB9O1xuICByZXR1cm4gcGxhY2VtZW50ID8gcGxhY2VtZW50VG9DU1NQcm9wW3BsYWNlbWVudF0gOiAnYm90dG9tJztcbn1cbnZhciBjb2VyY2VQbGFjZW1lbnQgPSBmdW5jdGlvbiBjb2VyY2VQbGFjZW1lbnQocCkge1xuICByZXR1cm4gcCA9PT0gJ2F1dG8nID8gJ2JvdHRvbScgOiBwO1xufTtcbnZhciBtZW51Q1NTID0gZnVuY3Rpb24gbWVudUNTUyhfcmVmMiwgdW5zdHlsZWQpIHtcbiAgdmFyIF9vYmplY3RTcHJlYWQyO1xuICB2YXIgcGxhY2VtZW50ID0gX3JlZjIucGxhY2VtZW50LFxuICAgIF9yZWYyJHRoZW1lID0gX3JlZjIudGhlbWUsXG4gICAgYm9yZGVyUmFkaXVzID0gX3JlZjIkdGhlbWUuYm9yZGVyUmFkaXVzLFxuICAgIHNwYWNpbmcgPSBfcmVmMiR0aGVtZS5zcGFjaW5nLFxuICAgIGNvbG9ycyA9IF9yZWYyJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoKF9vYmplY3RTcHJlYWQyID0ge1xuICAgIGxhYmVsOiAnbWVudSdcbiAgfSwgX2RlZmluZVByb3BlcnR5KF9vYmplY3RTcHJlYWQyLCBhbGlnblRvQ29udHJvbChwbGFjZW1lbnQpLCAnMTAwJScpLCBfZGVmaW5lUHJvcGVydHkoX29iamVjdFNwcmVhZDIsIFwicG9zaXRpb25cIiwgJ2Fic29sdXRlJyksIF9kZWZpbmVQcm9wZXJ0eShfb2JqZWN0U3ByZWFkMiwgXCJ3aWR0aFwiLCAnMTAwJScpLCBfZGVmaW5lUHJvcGVydHkoX29iamVjdFNwcmVhZDIsIFwiekluZGV4XCIsIDEpLCBfb2JqZWN0U3ByZWFkMiksIHVuc3R5bGVkID8ge30gOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMubmV1dHJhbDAsXG4gICAgYm9yZGVyUmFkaXVzOiBib3JkZXJSYWRpdXMsXG4gICAgYm94U2hhZG93OiAnMCAwIDAgMXB4IGhzbGEoMCwgMCUsIDAlLCAwLjEpLCAwIDRweCAxMXB4IGhzbGEoMCwgMCUsIDAlLCAwLjEpJyxcbiAgICBtYXJnaW5Cb3R0b206IHNwYWNpbmcubWVudUd1dHRlcixcbiAgICBtYXJnaW5Ub3A6IHNwYWNpbmcubWVudUd1dHRlclxuICB9KTtcbn07XG52YXIgUG9ydGFsUGxhY2VtZW50Q29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KG51bGwpO1xuXG4vLyBOT1RFOiBpbnRlcm5hbCBvbmx5XG52YXIgTWVudVBsYWNlciA9IGZ1bmN0aW9uIE1lbnVQbGFjZXIocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgbWluTWVudUhlaWdodCA9IHByb3BzLm1pbk1lbnVIZWlnaHQsXG4gICAgbWF4TWVudUhlaWdodCA9IHByb3BzLm1heE1lbnVIZWlnaHQsXG4gICAgbWVudVBsYWNlbWVudCA9IHByb3BzLm1lbnVQbGFjZW1lbnQsXG4gICAgbWVudVBvc2l0aW9uID0gcHJvcHMubWVudVBvc2l0aW9uLFxuICAgIG1lbnVTaG91bGRTY3JvbGxJbnRvVmlldyA9IHByb3BzLm1lbnVTaG91bGRTY3JvbGxJbnRvVmlldyxcbiAgICB0aGVtZSA9IHByb3BzLnRoZW1lO1xuICB2YXIgX3JlZjMgPSB1c2VDb250ZXh0KFBvcnRhbFBsYWNlbWVudENvbnRleHQpIHx8IHt9LFxuICAgIHNldFBvcnRhbFBsYWNlbWVudCA9IF9yZWYzLnNldFBvcnRhbFBsYWNlbWVudDtcbiAgdmFyIHJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG1heE1lbnVIZWlnaHQpLFxuICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgIG1heEhlaWdodCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0TWF4SGVpZ2h0ID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgcGxhY2VtZW50ID0gX3VzZVN0YXRlNFswXSxcbiAgICBzZXRQbGFjZW1lbnQgPSBfdXNlU3RhdGU0WzFdO1xuICB2YXIgY29udHJvbEhlaWdodCA9IHRoZW1lLnNwYWNpbmcuY29udHJvbEhlaWdodDtcbiAgdXNlTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbWVudUVsID0gcmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFtZW51RWwpIHJldHVybjtcblxuICAgIC8vIERPIE5PVCBzY3JvbGwgaWYgcG9zaXRpb24gaXMgZml4ZWRcbiAgICB2YXIgaXNGaXhlZFBvc2l0aW9uID0gbWVudVBvc2l0aW9uID09PSAnZml4ZWQnO1xuICAgIHZhciBzaG91bGRTY3JvbGwgPSBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXcgJiYgIWlzRml4ZWRQb3NpdGlvbjtcbiAgICB2YXIgc3RhdGUgPSBnZXRNZW51UGxhY2VtZW50KHtcbiAgICAgIG1heEhlaWdodDogbWF4TWVudUhlaWdodCxcbiAgICAgIG1lbnVFbDogbWVudUVsLFxuICAgICAgbWluSGVpZ2h0OiBtaW5NZW51SGVpZ2h0LFxuICAgICAgcGxhY2VtZW50OiBtZW51UGxhY2VtZW50LFxuICAgICAgc2hvdWxkU2Nyb2xsOiBzaG91bGRTY3JvbGwsXG4gICAgICBpc0ZpeGVkUG9zaXRpb246IGlzRml4ZWRQb3NpdGlvbixcbiAgICAgIGNvbnRyb2xIZWlnaHQ6IGNvbnRyb2xIZWlnaHRcbiAgICB9KTtcbiAgICBzZXRNYXhIZWlnaHQoc3RhdGUubWF4SGVpZ2h0KTtcbiAgICBzZXRQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgICBzZXRQb3J0YWxQbGFjZW1lbnQgPT09IG51bGwgfHwgc2V0UG9ydGFsUGxhY2VtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXRQb3J0YWxQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgfSwgW21heE1lbnVIZWlnaHQsIG1lbnVQbGFjZW1lbnQsIG1lbnVQb3NpdGlvbiwgbWVudVNob3VsZFNjcm9sbEludG9WaWV3LCBtaW5NZW51SGVpZ2h0LCBzZXRQb3J0YWxQbGFjZW1lbnQsIGNvbnRyb2xIZWlnaHRdKTtcbiAgcmV0dXJuIGNoaWxkcmVuKHtcbiAgICByZWY6IHJlZixcbiAgICBwbGFjZXJQcm9wczogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCB8fCBjb2VyY2VQbGFjZW1lbnQobWVudVBsYWNlbWVudCksXG4gICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodFxuICAgIH0pXG4gIH0pO1xufTtcbnZhciBNZW51ID0gZnVuY3Rpb24gTWVudShwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpbm5lclJlZiA9IHByb3BzLmlubmVyUmVmLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnbWVudScsIHtcbiAgICBtZW51OiB0cnVlXG4gIH0pLCB7XG4gICAgcmVmOiBpbm5lclJlZlxuICB9LCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcbnZhciBNZW51JDEgPSBNZW51O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1lbnUgTGlzdFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBtZW51TGlzdENTUyA9IGZ1bmN0aW9uIG1lbnVMaXN0Q1NTKF9yZWY0LCB1bnN0eWxlZCkge1xuICB2YXIgbWF4SGVpZ2h0ID0gX3JlZjQubWF4SGVpZ2h0LFxuICAgIGJhc2VVbml0ID0gX3JlZjQudGhlbWUuc3BhY2luZy5iYXNlVW5pdDtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIG1heEhlaWdodDogbWF4SGVpZ2h0LFxuICAgIG92ZXJmbG93WTogJ2F1dG8nLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIC8vIHJlcXVpcmVkIGZvciBvZmZzZXRbSGVpZ2h0LCBUb3BdID4ga2V5Ym9hcmQgc2Nyb2xsXG4gICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCdcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBwYWRkaW5nQm90dG9tOiBiYXNlVW5pdCxcbiAgICBwYWRkaW5nVG9wOiBiYXNlVW5pdFxuICB9KTtcbn07XG52YXIgTWVudUxpc3QgPSBmdW5jdGlvbiBNZW51TGlzdChwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICBpbm5lclJlZiA9IHByb3BzLmlubmVyUmVmLFxuICAgIGlzTXVsdGkgPSBwcm9wcy5pc011bHRpO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnbWVudUxpc3QnLCB7XG4gICAgJ21lbnUtbGlzdCc6IHRydWUsXG4gICAgJ21lbnUtbGlzdC0taXMtbXVsdGknOiBpc011bHRpXG4gIH0pLCB7XG4gICAgcmVmOiBpbm5lclJlZlxuICB9LCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNZW51IE5vdGljZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgbm90aWNlQ1NTID0gZnVuY3Rpb24gbm90aWNlQ1NTKF9yZWY1LCB1bnN0eWxlZCkge1xuICB2YXIgX3JlZjUkdGhlbWUgPSBfcmVmNS50aGVtZSxcbiAgICBiYXNlVW5pdCA9IF9yZWY1JHRoZW1lLnNwYWNpbmcuYmFzZVVuaXQsXG4gICAgY29sb3JzID0gX3JlZjUkdGhlbWUuY29sb3JzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgdGV4dEFsaWduOiAnY2VudGVyJ1xuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGNvbG9yOiBjb2xvcnMubmV1dHJhbDQwLFxuICAgIHBhZGRpbmc6IFwiXCIuY29uY2F0KGJhc2VVbml0ICogMiwgXCJweCBcIikuY29uY2F0KGJhc2VVbml0ICogMywgXCJweFwiKVxuICB9KTtcbn07XG52YXIgbm9PcHRpb25zTWVzc2FnZUNTUyA9IG5vdGljZUNTUztcbnZhciBsb2FkaW5nTWVzc2FnZUNTUyA9IG5vdGljZUNTUztcbnZhciBOb09wdGlvbnNNZXNzYWdlID0gZnVuY3Rpb24gTm9PcHRpb25zTWVzc2FnZShfcmVmNikge1xuICB2YXIgX3JlZjYkY2hpbGRyZW4gPSBfcmVmNi5jaGlsZHJlbixcbiAgICBjaGlsZHJlbiA9IF9yZWY2JGNoaWxkcmVuID09PSB2b2lkIDAgPyAnTm8gb3B0aW9ucycgOiBfcmVmNiRjaGlsZHJlbixcbiAgICBpbm5lclByb3BzID0gX3JlZjYuaW5uZXJQcm9wcyxcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjYsIF9leGNsdWRlZCQzKTtcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3RQcm9wcyksIHt9LCB7XG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGlubmVyUHJvcHM6IGlubmVyUHJvcHNcbiAgfSksICdub09wdGlvbnNNZXNzYWdlJywge1xuICAgICdtZW51LW5vdGljZSc6IHRydWUsXG4gICAgJ21lbnUtbm90aWNlLS1uby1vcHRpb25zJzogdHJ1ZVxuICB9KSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG52YXIgTG9hZGluZ01lc3NhZ2UgPSBmdW5jdGlvbiBMb2FkaW5nTWVzc2FnZShfcmVmNykge1xuICB2YXIgX3JlZjckY2hpbGRyZW4gPSBfcmVmNy5jaGlsZHJlbixcbiAgICBjaGlsZHJlbiA9IF9yZWY3JGNoaWxkcmVuID09PSB2b2lkIDAgPyAnTG9hZGluZy4uLicgOiBfcmVmNyRjaGlsZHJlbixcbiAgICBpbm5lclByb3BzID0gX3JlZjcuaW5uZXJQcm9wcyxcbiAgICByZXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjcsIF9leGNsdWRlZDIkMSk7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0UHJvcHMpLCB7fSwge1xuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBpbm5lclByb3BzOiBpbm5lclByb3BzXG4gIH0pLCAnbG9hZGluZ01lc3NhZ2UnLCB7XG4gICAgJ21lbnUtbm90aWNlJzogdHJ1ZSxcbiAgICAnbWVudS1ub3RpY2UtLWxvYWRpbmcnOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNZW51IFBvcnRhbFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBtZW51UG9ydGFsQ1NTID0gZnVuY3Rpb24gbWVudVBvcnRhbENTUyhfcmVmOCkge1xuICB2YXIgcmVjdCA9IF9yZWY4LnJlY3QsXG4gICAgb2Zmc2V0ID0gX3JlZjgub2Zmc2V0LFxuICAgIHBvc2l0aW9uID0gX3JlZjgucG9zaXRpb247XG4gIHJldHVybiB7XG4gICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICB0b3A6IG9mZnNldCxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICB6SW5kZXg6IDFcbiAgfTtcbn07XG52YXIgTWVudVBvcnRhbCA9IGZ1bmN0aW9uIE1lbnVQb3J0YWwocHJvcHMpIHtcbiAgdmFyIGFwcGVuZFRvID0gcHJvcHMuYXBwZW5kVG8sXG4gICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBjb250cm9sRWxlbWVudCA9IHByb3BzLmNvbnRyb2xFbGVtZW50LFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzLFxuICAgIG1lbnVQbGFjZW1lbnQgPSBwcm9wcy5tZW51UGxhY2VtZW50LFxuICAgIG1lbnVQb3NpdGlvbiA9IHByb3BzLm1lbnVQb3NpdGlvbjtcbiAgdmFyIG1lbnVQb3J0YWxSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBjbGVhbnVwUmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgX3VzZVN0YXRlNSA9IHVzZVN0YXRlKGNvZXJjZVBsYWNlbWVudChtZW51UGxhY2VtZW50KSksXG4gICAgX3VzZVN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTUsIDIpLFxuICAgIHBsYWNlbWVudCA9IF91c2VTdGF0ZTZbMF0sXG4gICAgc2V0UG9ydGFsUGxhY2VtZW50ID0gX3VzZVN0YXRlNlsxXTtcbiAgdmFyIHBvcnRhbFBsYWNlbWVudENvbnRleHQgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2V0UG9ydGFsUGxhY2VtZW50OiBzZXRQb3J0YWxQbGFjZW1lbnRcbiAgICB9O1xuICB9LCBbXSk7XG4gIHZhciBfdXNlU3RhdGU3ID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlOCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTcsIDIpLFxuICAgIGNvbXB1dGVkUG9zaXRpb24gPSBfdXNlU3RhdGU4WzBdLFxuICAgIHNldENvbXB1dGVkUG9zaXRpb24gPSBfdXNlU3RhdGU4WzFdO1xuICB2YXIgdXBkYXRlQ29tcHV0ZWRQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWNvbnRyb2xFbGVtZW50KSByZXR1cm47XG4gICAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudE9iaihjb250cm9sRWxlbWVudCk7XG4gICAgdmFyIHNjcm9sbERpc3RhbmNlID0gbWVudVBvc2l0aW9uID09PSAnZml4ZWQnID8gMCA6IHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgICB2YXIgb2Zmc2V0ID0gcmVjdFtwbGFjZW1lbnRdICsgc2Nyb2xsRGlzdGFuY2U7XG4gICAgaWYgKG9mZnNldCAhPT0gKGNvbXB1dGVkUG9zaXRpb24gPT09IG51bGwgfHwgY29tcHV0ZWRQb3NpdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29tcHV0ZWRQb3NpdGlvbi5vZmZzZXQpIHx8IHJlY3QubGVmdCAhPT0gKGNvbXB1dGVkUG9zaXRpb24gPT09IG51bGwgfHwgY29tcHV0ZWRQb3NpdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29tcHV0ZWRQb3NpdGlvbi5yZWN0LmxlZnQpIHx8IHJlY3Qud2lkdGggIT09IChjb21wdXRlZFBvc2l0aW9uID09PSBudWxsIHx8IGNvbXB1dGVkUG9zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXB1dGVkUG9zaXRpb24ucmVjdC53aWR0aCkpIHtcbiAgICAgIHNldENvbXB1dGVkUG9zaXRpb24oe1xuICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgcmVjdDogcmVjdFxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbY29udHJvbEVsZW1lbnQsIG1lbnVQb3NpdGlvbiwgcGxhY2VtZW50LCBjb21wdXRlZFBvc2l0aW9uID09PSBudWxsIHx8IGNvbXB1dGVkUG9zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXB1dGVkUG9zaXRpb24ub2Zmc2V0LCBjb21wdXRlZFBvc2l0aW9uID09PSBudWxsIHx8IGNvbXB1dGVkUG9zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXB1dGVkUG9zaXRpb24ucmVjdC5sZWZ0LCBjb21wdXRlZFBvc2l0aW9uID09PSBudWxsIHx8IGNvbXB1dGVkUG9zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXB1dGVkUG9zaXRpb24ucmVjdC53aWR0aF0pO1xuICB1c2VMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHVwZGF0ZUNvbXB1dGVkUG9zaXRpb24oKTtcbiAgfSwgW3VwZGF0ZUNvbXB1dGVkUG9zaXRpb25dKTtcbiAgdmFyIHJ1bkF1dG9VcGRhdGUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiBjbGVhbnVwUmVmLmN1cnJlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNsZWFudXBSZWYuY3VycmVudCgpO1xuICAgICAgY2xlYW51cFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGNvbnRyb2xFbGVtZW50ICYmIG1lbnVQb3J0YWxSZWYuY3VycmVudCkge1xuICAgICAgY2xlYW51cFJlZi5jdXJyZW50ID0gYXV0b1VwZGF0ZShjb250cm9sRWxlbWVudCwgbWVudVBvcnRhbFJlZi5jdXJyZW50LCB1cGRhdGVDb21wdXRlZFBvc2l0aW9uLCB7XG4gICAgICAgIGVsZW1lbnRSZXNpemU6ICdSZXNpemVPYnNlcnZlcicgaW4gd2luZG93XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtjb250cm9sRWxlbWVudCwgdXBkYXRlQ29tcHV0ZWRQb3NpdGlvbl0pO1xuICB1c2VMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJ1bkF1dG9VcGRhdGUoKTtcbiAgfSwgW3J1bkF1dG9VcGRhdGVdKTtcbiAgdmFyIHNldE1lbnVQb3J0YWxFbGVtZW50ID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG1lbnVQb3J0YWxFbGVtZW50KSB7XG4gICAgbWVudVBvcnRhbFJlZi5jdXJyZW50ID0gbWVudVBvcnRhbEVsZW1lbnQ7XG4gICAgcnVuQXV0b1VwZGF0ZSgpO1xuICB9LCBbcnVuQXV0b1VwZGF0ZV0pO1xuXG4gIC8vIGJhaWwgZWFybHkgaWYgcmVxdWlyZWQgZWxlbWVudHMgYXJlbid0IHByZXNlbnRcbiAgaWYgKCFhcHBlbmRUbyAmJiBtZW51UG9zaXRpb24gIT09ICdmaXhlZCcgfHwgIWNvbXB1dGVkUG9zaXRpb24pIHJldHVybiBudWxsO1xuXG4gIC8vIHNhbWUgd3JhcHBlciBlbGVtZW50IHdoZXRoZXIgZml4ZWQgb3IgcG9ydGFsbGVkXG4gIHZhciBtZW51V3JhcHBlciA9IGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBzZXRNZW51UG9ydGFsRWxlbWVudFxuICB9LCBnZXRTdHlsZVByb3BzKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgIG9mZnNldDogY29tcHV0ZWRQb3NpdGlvbi5vZmZzZXQsXG4gICAgcG9zaXRpb246IG1lbnVQb3NpdGlvbixcbiAgICByZWN0OiBjb21wdXRlZFBvc2l0aW9uLnJlY3RcbiAgfSksICdtZW51UG9ydGFsJywge1xuICAgICdtZW51LXBvcnRhbCc6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG4gIHJldHVybiBqc3goUG9ydGFsUGxhY2VtZW50Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBwb3J0YWxQbGFjZW1lbnRDb250ZXh0XG4gIH0sIGFwcGVuZFRvID8gLyojX19QVVJFX18qL2NyZWF0ZVBvcnRhbChtZW51V3JhcHBlciwgYXBwZW5kVG8pIDogbWVudVdyYXBwZXIpO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSb290IENvbnRhaW5lclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBjb250YWluZXJDU1MgPSBmdW5jdGlvbiBjb250YWluZXJDU1MoX3JlZikge1xuICB2YXIgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBpc1J0bCA9IF9yZWYuaXNSdGw7XG4gIHJldHVybiB7XG4gICAgbGFiZWw6ICdjb250YWluZXInLFxuICAgIGRpcmVjdGlvbjogaXNSdGwgPyAncnRsJyA6IHVuZGVmaW5lZCxcbiAgICBwb2ludGVyRXZlbnRzOiBpc0Rpc2FibGVkID8gJ25vbmUnIDogdW5kZWZpbmVkLFxuICAgIC8vIGNhbmNlbCBtb3VzZSBldmVudHMgd2hlbiBkaXNhYmxlZFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnXG4gIH07XG59O1xudmFyIFNlbGVjdENvbnRhaW5lciA9IGZ1bmN0aW9uIFNlbGVjdENvbnRhaW5lcihwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICBpc0Rpc2FibGVkID0gcHJvcHMuaXNEaXNhYmxlZCxcbiAgICBpc1J0bCA9IHByb3BzLmlzUnRsO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnY29udGFpbmVyJywge1xuICAgICctLWlzLWRpc2FibGVkJzogaXNEaXNhYmxlZCxcbiAgICAnLS1pcy1ydGwnOiBpc1J0bFxuICB9KSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVmFsdWUgQ29udGFpbmVyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIHZhbHVlQ29udGFpbmVyQ1NTID0gZnVuY3Rpb24gdmFsdWVDb250YWluZXJDU1MoX3JlZjIsIHVuc3R5bGVkKSB7XG4gIHZhciBzcGFjaW5nID0gX3JlZjIudGhlbWUuc3BhY2luZyxcbiAgICBpc011bHRpID0gX3JlZjIuaXNNdWx0aSxcbiAgICBoYXNWYWx1ZSA9IF9yZWYyLmhhc1ZhbHVlLFxuICAgIGNvbnRyb2xTaG91bGRSZW5kZXJWYWx1ZSA9IF9yZWYyLnNlbGVjdFByb3BzLmNvbnRyb2xTaG91bGRSZW5kZXJWYWx1ZTtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGRpc3BsYXk6IGlzTXVsdGkgJiYgaGFzVmFsdWUgJiYgY29udHJvbFNob3VsZFJlbmRlclZhbHVlID8gJ2ZsZXgnIDogJ2dyaWQnLFxuICAgIGZsZXg6IDEsXG4gICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbidcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBwYWRkaW5nOiBcIlwiLmNvbmNhdChzcGFjaW5nLmJhc2VVbml0IC8gMiwgXCJweCBcIikuY29uY2F0KHNwYWNpbmcuYmFzZVVuaXQgKiAyLCBcInB4XCIpXG4gIH0pO1xufTtcbnZhciBWYWx1ZUNvbnRhaW5lciA9IGZ1bmN0aW9uIFZhbHVlQ29udGFpbmVyKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzLFxuICAgIGlzTXVsdGkgPSBwcm9wcy5pc011bHRpLFxuICAgIGhhc1ZhbHVlID0gcHJvcHMuaGFzVmFsdWU7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICd2YWx1ZUNvbnRhaW5lcicsIHtcbiAgICAndmFsdWUtY29udGFpbmVyJzogdHJ1ZSxcbiAgICAndmFsdWUtY29udGFpbmVyLS1pcy1tdWx0aSc6IGlzTXVsdGksXG4gICAgJ3ZhbHVlLWNvbnRhaW5lci0taGFzLXZhbHVlJzogaGFzVmFsdWVcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEluZGljYXRvciBDb250YWluZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgaW5kaWNhdG9yc0NvbnRhaW5lckNTUyA9IGZ1bmN0aW9uIGluZGljYXRvcnNDb250YWluZXJDU1MoKSB7XG4gIHJldHVybiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYWxpZ25TZWxmOiAnc3RyZXRjaCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhTaHJpbms6IDBcbiAgfTtcbn07XG52YXIgSW5kaWNhdG9yc0NvbnRhaW5lciA9IGZ1bmN0aW9uIEluZGljYXRvcnNDb250YWluZXIocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdpbmRpY2F0b3JzQ29udGFpbmVyJywge1xuICAgIGluZGljYXRvcnM6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xuXG52YXIgX3RlbXBsYXRlT2JqZWN0O1xudmFyIF9leGNsdWRlZCQyID0gW1wic2l6ZVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImlubmVyUHJvcHNcIiwgXCJpc1J0bFwiLCBcInNpemVcIl07XG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRHJvcGRvd24gJiBDbGVhciBJY29uc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiOG1ta2NnXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmlubGluZS1ibG9jaztmaWxsOmN1cnJlbnRDb2xvcjtsaW5lLWhlaWdodDoxO3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjBcIlxufSA6IHtcbiAgbmFtZTogXCJ0ajViZGUtU3ZnXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmlubGluZS1ibG9jaztmaWxsOmN1cnJlbnRDb2xvcjtsaW5lLWhlaWdodDoxO3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjA7bGFiZWw6U3ZnO1wiLFxuICBtYXA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW1sdVpHbGpZWFJ2Y25NdWRITjRJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRWGxDU1NJc0ltWnBiR1VpT2lKcGJtUnBZMkYwYjNKekxuUnplQ0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtpQkFhbk40SUdwemVDQXFMMXh1YVcxd2IzSjBJSHNnVW1WaFkzUk9iMlJsSUgwZ1puSnZiU0FuY21WaFkzUW5PMXh1YVcxd2IzSjBJSHNnYW5ONExDQnJaWGxtY21GdFpYTWdmU0JtY205dElDZEFaVzF2ZEdsdmJpOXlaV0ZqZENjN1hHNWNibWx0Y0c5eWRDQjdYRzRnSUVOdmJXMXZibEJ5YjNCelFXNWtRMnhoYzNOT1lXMWxMRnh1SUNCRFUxTlBZbXBsWTNSWGFYUm9UR0ZpWld3c1hHNGdJRWR5YjNWd1FtRnpaU3hjYm4wZ1puSnZiU0FuTGk0dmRIbHdaWE1uTzF4dWFXMXdiM0owSUhzZ1oyVjBVM1I1YkdWUWNtOXdjeUI5SUdaeWIyMGdKeTR1TDNWMGFXeHpKenRjYmx4dUx5OGdQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5WEc0dkx5QkVjbTl3Wkc5M2JpQW1JRU5zWldGeUlFbGpiMjV6WEc0dkx5QTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmx4dVkyOXVjM1FnVTNabklEMGdLSHRjYmlBZ2MybDZaU3hjYmlBZ0xpNHVjSEp2Y0hOY2JuMDZJRXBUV0M1SmJuUnlhVzV6YVdORmJHVnRaVzUwYzFzbmMzWm5KMTBnSmlCN0lITnBlbVU2SUc1MWJXSmxjaUI5S1NBOVBpQW9YRzRnSUR4emRtZGNiaUFnSUNCb1pXbG5hSFE5ZTNOcGVtVjlYRzRnSUNBZ2QybGtkR2c5ZTNOcGVtVjlYRzRnSUNBZ2RtbGxkMEp2ZUQxY0lqQWdNQ0F5TUNBeU1Gd2lYRzRnSUNBZ1lYSnBZUzFvYVdSa1pXNDlYQ0owY25WbFhDSmNiaUFnSUNCbWIyTjFjMkZpYkdVOVhDSm1ZV3h6WlZ3aVhHNGdJQ0FnWTNOelBYdDdYRzRnSUNBZ0lDQmthWE53YkdGNU9pQW5hVzVzYVc1bExXSnNiMk5ySnl4Y2JpQWdJQ0FnSUdacGJHdzZJQ2RqZFhKeVpXNTBRMjlzYjNJbkxGeHVJQ0FnSUNBZ2JHbHVaVWhsYVdkb2REb2dNU3hjYmlBZ0lDQWdJSE4wY205clpUb2dKMk4xY25KbGJuUkRiMnh2Y2ljc1hHNGdJQ0FnSUNCemRISnZhMlZYYVdSMGFEb2dNQ3hjYmlBZ0lDQjlmVnh1SUNBZ0lIc3VMaTV3Y205d2MzMWNiaUFnTHo1Y2JpazdYRzVjYm1WNGNHOXlkQ0IwZVhCbElFTnliM056U1dOdmJsQnliM0J6SUQwZ1NsTllMa2x1ZEhKcGJuTnBZMFZzWlcxbGJuUnpXeWR6ZG1jblhTQW1JSHNnYzJsNlpUODZJRzUxYldKbGNpQjlPMXh1Wlhod2IzSjBJR052Ym5OMElFTnliM056U1dOdmJpQTlJQ2h3Y205d2N6b2dRM0p2YzNOSlkyOXVVSEp2Y0hNcElEMCtJQ2hjYmlBZ1BGTjJaeUJ6YVhwbFBYc3lNSDBnZXk0dUxuQnliM0J6ZlQ1Y2JpQWdJQ0E4Y0dGMGFDQmtQVndpVFRFMExqTTBPQ0F4TkM0NE5EbGpMVEF1TkRZNUlEQXVORFk1TFRFdU1qSTVJREF1TkRZNUxURXVOamszSURCc0xUSXVOalV4TFRNdU1ETXdMVEl1TmpVeElETXVNREk1WXkwd0xqUTJPU0F3TGpRMk9TMHhMakl5T1NBd0xqUTJPUzB4TGpZNU55QXdMVEF1TkRZNUxUQXVORFk1TFRBdU5EWTVMVEV1TWpJNUlEQXRNUzQyT1Rkc01pNDNOVGd0TXk0eE5TMHlMamMxT1MwekxqRTFNbU10TUM0ME5qa3RNQzQwTmprdE1DNDBOamt0TVM0eU1qZ2dNQzB4TGpZNU4zTXhMakl5T0Mwd0xqUTJPU0F4TGpZNU55QXdiREl1TmpVeUlETXVNRE14SURJdU5qVXhMVE11TURNeFl6QXVORFk1TFRBdU5EWTVJREV1TWpJNExUQXVORFk1SURFdU5qazNJREJ6TUM0ME5qa2dNUzR5TWprZ01DQXhMalk1TjJ3dE1pNDNOVGdnTXk0eE5USWdNaTQzTlRnZ015NHhOV013TGpRMk9TQXdMalEyT1NBd0xqUTJPU0F4TGpJeU9TQXdJREV1TmprNGVsd2lJQzgrWEc0Z0lEd3ZVM1puUGx4dUtUdGNibVY0Y0c5eWRDQjBlWEJsSUVSdmQyNURhR1YyY205dVVISnZjSE1nUFNCS1UxZ3VTVzUwY21sdWMybGpSV3hsYldWdWRITmJKM04yWnlkZElDWWdleUJ6YVhwbFB6b2diblZ0WW1WeUlIMDdYRzVsZUhCdmNuUWdZMjl1YzNRZ1JHOTNia05vWlhaeWIyNGdQU0FvY0hKdmNITTZJRVJ2ZDI1RGFHVjJjbTl1VUhKdmNITXBJRDArSUNoY2JpQWdQRk4yWnlCemFYcGxQWHN5TUgwZ2V5NHVMbkJ5YjNCemZUNWNiaUFnSUNBOGNHRjBhQ0JrUFZ3aVRUUXVOVEUySURjdU5UUTRZekF1TkRNMkxUQXVORFEySURFdU1EUXpMVEF1TkRneElERXVOVGMySURCc015NDVNRGdnTXk0M05EY2dNeTQ1TURndE15NDNORGRqTUM0MU16TXRNQzQwT0RFZ01TNHhOREV0TUM0ME5EWWdNUzQxTnpRZ01DQXdMalF6TmlBd0xqUTBOU0F3TGpRd09DQXhMakU1TnlBd0lERXVOakUxTFRBdU5EQTJJREF1TkRFNExUUXVOamsxSURRdU5UQXlMVFF1TmprMUlEUXVOVEF5TFRBdU1qRTNJREF1TWpJekxUQXVOVEF5SURBdU16TTFMVEF1TnpnM0lEQXVNek0xY3kwd0xqVTNMVEF1TVRFeUxUQXVOemc1TFRBdU16TTFZekFnTUMwMExqSTROeTAwTGpBNE5DMDBMalk1TlMwMExqVXdNbk10TUM0ME16WXRNUzR4TnlBd0xURXVOakUxZWx3aUlDOCtYRzRnSUR3dlUzWm5QbHh1S1R0Y2JseHVMeThnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNHZMeUJFY205d1pHOTNiaUFtSUVOc1pXRnlJRUoxZEhSdmJuTmNiaTh2SUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRVJ5YjNCa2IzZHVTVzVrYVdOaGRHOXlVSEp2Y0hNOFhHNGdJRTl3ZEdsdmJpQTlJSFZ1YTI1dmQyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVJRDBnWW05dmJHVmhiaXhjYmlBZ1IzSnZkWEFnWlhoMFpXNWtjeUJIY205MWNFSmhjMlU4VDNCMGFXOXVQaUE5SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0lHVjRkR1Z1WkhNZ1EyOXRiVzl1VUhKdmNITkJibVJEYkdGemMwNWhiV1U4VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENGdlMXh1SUNBdktpb2dWR2hsSUdOb2FXeGtjbVZ1SUhSdklHSmxJSEpsYm1SbGNtVmtJR2x1YzJsa1pTQjBhR1VnYVc1a2FXTmhkRzl5TGlBcUwxeHVJQ0JqYUdsc1pISmxiajg2SUZKbFlXTjBUbTlrWlR0Y2JpQWdMeW9xSUZCeWIzQnpJSFJvWVhRZ2QybHNiQ0JpWlNCd1lYTnpaV1FnYjI0Z2RHOGdkR2hsSUdOb2FXeGtjbVZ1TGlBcUwxeHVJQ0JwYm01bGNsQnliM0J6T2lCS1UxZ3VTVzUwY21sdWMybGpSV3hsYldWdWRITmJKMlJwZGlkZE8xeHVJQ0F2S2lvZ1ZHaGxJR1p2WTNWelpXUWdjM1JoZEdVZ2IyWWdkR2hsSUhObGJHVmpkQzRnS2k5Y2JpQWdhWE5HYjJOMWMyVmtPaUJpYjI5c1pXRnVPMXh1SUNCcGMwUnBjMkZpYkdWa09pQmliMjlzWldGdU8xeHVmVnh1WEc1amIyNXpkQ0JpWVhObFExTlRJRDBnUEZ4dUlDQlBjSFJwYjI0c1hHNGdJRWx6VFhWc2RHa2daWGgwWlc1a2N5QmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K1hHNCtLRnh1SUNCN1hHNGdJQ0FnYVhOR2IyTjFjMlZrTEZ4dUlDQWdJSFJvWlcxbE9pQjdYRzRnSUNBZ0lDQnpjR0ZqYVc1bk9pQjdJR0poYzJWVmJtbDBJSDBzWEc0Z0lDQWdJQ0JqYjJ4dmNuTXNYRzRnSUNBZ2ZTeGNiaUFnZlRwY2JpQWdJQ0I4SUVSeWIzQmtiM2R1U1c1a2FXTmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q1Y2JpQWdJQ0I4SUVOc1pXRnlTVzVrYVdOaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDRzWEc0Z0lIVnVjM1I1YkdWa09pQmliMjlzWldGdVhHNHBPaUJEVTFOUFltcGxZM1JYYVhSb1RHRmlaV3dnUFQ0Z0tIdGNiaUFnYkdGaVpXdzZJQ2RwYm1ScFkyRjBiM0pEYjI1MFlXbHVaWEluTEZ4dUlDQmthWE53YkdGNU9pQW5abXhsZUNjc1hHNGdJSFJ5WVc1emFYUnBiMjQ2SUNkamIyeHZjaUF4TlRCdGN5Y3NYRzRnSUM0dUxpaDFibk4wZVd4bFpGeHVJQ0FnSUQ4Z2UzMWNiaUFnSUNBNklIdGNiaUFnSUNBZ0lDQWdZMjlzYjNJNklHbHpSbTlqZFhObFpDQS9JR052Ykc5eWN5NXVaWFYwY21Gc05qQWdPaUJqYjJ4dmNuTXVibVYxZEhKaGJESXdMRnh1SUNBZ0lDQWdJQ0J3WVdSa2FXNW5PaUJpWVhObFZXNXBkQ0FxSURJc1hHNGdJQ0FnSUNBZ0lDYzZhRzkyWlhJbk9pQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5c2IzSTZJR2x6Um05amRYTmxaQ0EvSUdOdmJHOXljeTV1WlhWMGNtRnNPREFnT2lCamIyeHZjbk11Ym1WMWRISmhiRFF3TEZ4dUlDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ2ZTa3NYRzU5S1R0Y2JseHVaWGh3YjNKMElHTnZibk4wSUdSeWIzQmtiM2R1U1c1a2FXTmhkRzl5UTFOVElEMGdZbUZ6WlVOVFV6dGNibVY0Y0c5eWRDQmpiMjV6ZENCRWNtOXdaRzkzYmtsdVpHbGpZWFJ2Y2lBOUlEeGNiaUFnVDNCMGFXOXVMRnh1SUNCSmMwMTFiSFJwSUdWNGRHVnVaSE1nWW05dmJHVmhiaXhjYmlBZ1IzSnZkWEFnWlhoMFpXNWtjeUJIY205MWNFSmhjMlU4VDNCMGFXOXVQbHh1UGloY2JpQWdjSEp2Y0hNNklFUnliM0JrYjNkdVNXNWthV05oZEc5eVVISnZjSE04VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENWNiaWtnUFQ0Z2UxeHVJQ0JqYjI1emRDQjdJR05vYVd4a2NtVnVMQ0JwYm01bGNsQnliM0J6SUgwZ1BTQndjbTl3Y3p0Y2JpQWdjbVYwZFhKdUlDaGNiaUFnSUNBOFpHbDJYRzRnSUNBZ0lDQjdMaTR1WjJWMFUzUjViR1ZRY205d2N5aHdjbTl3Y3l3Z0oyUnliM0JrYjNkdVNXNWthV05oZEc5eUp5d2dlMXh1SUNBZ0lDQWdJQ0JwYm1ScFkyRjBiM0k2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJQ2RrY205d1pHOTNiaTFwYm1ScFkyRjBiM0luT2lCMGNuVmxMRnh1SUNBZ0lDQWdmU2w5WEc0Z0lDQWdJQ0I3TGk0dWFXNXVaWEpRY205d2MzMWNiaUFnSUNBK1hHNGdJQ0FnSUNCN1kyaHBiR1J5Wlc0Z2ZId2dQRVJ2ZDI1RGFHVjJjbTl1SUM4K2ZWeHVJQ0FnSUR3dlpHbDJQbHh1SUNBcE8xeHVmVHRjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCRGJHVmhja2x1WkdsallYUnZjbEJ5YjNCelBGeHVJQ0JQY0hScGIyNGdQU0IxYm10dWIzZHVMRnh1SUNCSmMwMTFiSFJwSUdWNGRHVnVaSE1nWW05dmJHVmhiaUE5SUdKdmIyeGxZVzRzWEc0Z0lFZHliM1Z3SUdWNGRHVnVaSE1nUjNKdmRYQkNZWE5sUEU5d2RHbHZiajRnUFNCSGNtOTFjRUpoYzJVOFQzQjBhVzl1UGx4dVBpQmxlSFJsYm1SeklFTnZiVzF2YmxCeWIzQnpRVzVrUTJ4aGMzTk9ZVzFsUEU5d2RHbHZiaXdnU1hOTmRXeDBhU3dnUjNKdmRYQStJSHRjYmlBZ0x5b3FJRlJvWlNCamFHbHNaSEpsYmlCMGJ5QmlaU0J5Wlc1a1pYSmxaQ0JwYm5OcFpHVWdkR2hsSUdsdVpHbGpZWFJ2Y2k0Z0tpOWNiaUFnWTJocGJHUnlaVzQvT2lCU1pXRmpkRTV2WkdVN1hHNGdJQzhxS2lCUWNtOXdjeUIwYUdGMElIZHBiR3dnWW1VZ2NHRnpjMlZrSUc5dUlIUnZJSFJvWlNCamFHbHNaSEpsYmk0Z0tpOWNiaUFnYVc1dVpYSlFjbTl3Y3pvZ1NsTllMa2x1ZEhKcGJuTnBZMFZzWlcxbGJuUnpXeWRrYVhZblhUdGNiaUFnTHlvcUlGUm9aU0JtYjJOMWMyVmtJSE4wWVhSbElHOW1JSFJvWlNCelpXeGxZM1F1SUNvdlhHNGdJR2x6Um05amRYTmxaRG9nWW05dmJHVmhianRjYm4xY2JseHVaWGh3YjNKMElHTnZibk4wSUdOc1pXRnlTVzVrYVdOaGRHOXlRMU5USUQwZ1ltRnpaVU5UVXp0Y2JtVjRjRzl5ZENCamIyNXpkQ0JEYkdWaGNrbHVaR2xqWVhSdmNpQTlJRHhjYmlBZ1QzQjBhVzl1TEZ4dUlDQkpjMDExYkhScElHVjRkR1Z1WkhNZ1ltOXZiR1ZoYml4Y2JpQWdSM0p2ZFhBZ1pYaDBaVzVrY3lCSGNtOTFjRUpoYzJVOFQzQjBhVzl1UGx4dVBpaGNiaUFnY0hKdmNITTZJRU5zWldGeVNXNWthV05oZEc5eVVISnZjSE04VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENWNiaWtnUFQ0Z2UxeHVJQ0JqYjI1emRDQjdJR05vYVd4a2NtVnVMQ0JwYm01bGNsQnliM0J6SUgwZ1BTQndjbTl3Y3p0Y2JpQWdjbVYwZFhKdUlDaGNiaUFnSUNBOFpHbDJYRzRnSUNBZ0lDQjdMaTR1WjJWMFUzUjViR1ZRY205d2N5aHdjbTl3Y3l3Z0oyTnNaV0Z5U1c1a2FXTmhkRzl5Snl3Z2UxeHVJQ0FnSUNBZ0lDQnBibVJwWTJGMGIzSTZJSFJ5ZFdVc1hHNGdJQ0FnSUNBZ0lDZGpiR1ZoY2kxcGJtUnBZMkYwYjNJbk9pQjBjblZsTEZ4dUlDQWdJQ0FnZlNsOVhHNGdJQ0FnSUNCN0xpNHVhVzV1WlhKUWNtOXdjMzFjYmlBZ0lDQStYRzRnSUNBZ0lDQjdZMmhwYkdSeVpXNGdmSHdnUEVOeWIzTnpTV052YmlBdlBuMWNiaUFnSUNBOEwyUnBkajVjYmlBZ0tUdGNibjA3WEc1Y2JpOHZJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFZ4dUx5OGdVMlZ3WVhKaGRHOXlYRzR2THlBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMWNibHh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JKYm1ScFkyRjBiM0pUWlhCaGNtRjBiM0pRY205d2N6eGNiaUFnVDNCMGFXOXVJRDBnZFc1cmJtOTNiaXhjYmlBZ1NYTk5kV3gwYVNCbGVIUmxibVJ6SUdKdmIyeGxZVzRnUFNCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrSUQwZ1IzSnZkWEJDWVhObFBFOXdkR2x2Ymo1Y2JqNGdaWGgwWlc1a2N5QkRiMjF0YjI1UWNtOXdjMEZ1WkVOc1lYTnpUbUZ0WlR4UGNIUnBiMjRzSUVselRYVnNkR2tzSUVkeWIzVndQaUI3WEc0Z0lHbHpSR2x6WVdKc1pXUTZJR0p2YjJ4bFlXNDdYRzRnSUdselJtOWpkWE5sWkRvZ1ltOXZiR1ZoYmp0Y2JpQWdhVzV1WlhKUWNtOXdjejg2SUVwVFdDNUpiblJ5YVc1emFXTkZiR1Z0Wlc1MGMxc25jM0JoYmlkZE8xeHVmVnh1WEc1bGVIQnZjblFnWTI5dWMzUWdhVzVrYVdOaGRHOXlVMlZ3WVhKaGRHOXlRMU5USUQwZ1BGeHVJQ0JQY0hScGIyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrS0Z4dUlDQjdYRzRnSUNBZ2FYTkVhWE5oWW14bFpDeGNiaUFnSUNCMGFHVnRaVG9nZTF4dUlDQWdJQ0FnYzNCaFkybHVaem9nZXlCaVlYTmxWVzVwZENCOUxGeHVJQ0FnSUNBZ1kyOXNiM0p6TEZ4dUlDQWdJSDBzWEc0Z0lIMDZJRWx1WkdsallYUnZjbE5sY0dGeVlYUnZjbEJ5YjNCelBFOXdkR2x2Yml3Z1NYTk5kV3gwYVN3Z1IzSnZkWEErTEZ4dUlDQjFibk4wZVd4bFpEb2dZbTl2YkdWaGJseHVLVG9nUTFOVFQySnFaV04wVjJsMGFFeGhZbVZzSUQwK0lDaDdYRzRnSUd4aFltVnNPaUFuYVc1a2FXTmhkRzl5VTJWd1lYSmhkRzl5Snl4Y2JpQWdZV3hwWjI1VFpXeG1PaUFuYzNSeVpYUmphQ2NzWEc0Z0lIZHBaSFJvT2lBeExGeHVJQ0F1TGk0b2RXNXpkSGxzWldSY2JpQWdJQ0EvSUh0OVhHNGdJQ0FnT2lCN1hHNGdJQ0FnSUNBZ0lHSmhZMnRuY205MWJtUkRiMnh2Y2pvZ2FYTkVhWE5oWW14bFpDQS9JR052Ykc5eWN5NXVaWFYwY21Gc01UQWdPaUJqYjJ4dmNuTXVibVYxZEhKaGJESXdMRnh1SUNBZ0lDQWdJQ0J0WVhKbmFXNUNiM1IwYjIwNklHSmhjMlZWYm1sMElDb2dNaXhjYmlBZ0lDQWdJQ0FnYldGeVoybHVWRzl3T2lCaVlYTmxWVzVwZENBcUlESXNYRzRnSUNBZ0lDQjlLU3hjYm4wcE8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1NXNWthV05oZEc5eVUyVndZWEpoZEc5eUlEMGdQRnh1SUNCUGNIUnBiMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0tGeHVJQ0J3Y205d2N6b2dTVzVrYVdOaGRHOXlVMlZ3WVhKaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDVjYmlrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3SUdsdWJtVnlVSEp2Y0hNZ2ZTQTlJSEJ5YjNCek8xeHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lEeHpjR0Z1WEc0Z0lDQWdJQ0I3TGk0dWFXNXVaWEpRY205d2MzMWNiaUFnSUNBZ0lIc3VMaTVuWlhSVGRIbHNaVkJ5YjNCektIQnliM0J6TENBbmFXNWthV05oZEc5eVUyVndZWEpoZEc5eUp5d2dlMXh1SUNBZ0lDQWdJQ0FuYVc1a2FXTmhkRzl5TFhObGNHRnlZWFJ2Y2ljNklIUnlkV1VzWEc0Z0lDQWdJQ0I5S1gxY2JpQWdJQ0F2UGx4dUlDQXBPMXh1ZlR0Y2JseHVMeThnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNHZMeUJNYjJGa2FXNW5YRzR2THlBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMWNibHh1WTI5dWMzUWdiRzloWkdsdVowUnZkRUZ1YVcxaGRHbHZibk1nUFNCclpYbG1jbUZ0WlhOZ1hHNGdJREFsTENBNE1DVXNJREV3TUNVZ2V5QnZjR0ZqYVhSNU9pQXdPeUI5WEc0Z0lEUXdKU0I3SUc5d1lXTnBkSGs2SURFN0lIMWNibUE3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JzYjJGa2FXNW5TVzVrYVdOaGRHOXlRMU5USUQwZ1BGeHVJQ0JQY0hScGIyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrS0Z4dUlDQjdYRzRnSUNBZ2FYTkdiMk4xYzJWa0xGeHVJQ0FnSUhOcGVtVXNYRzRnSUNBZ2RHaGxiV1U2SUh0Y2JpQWdJQ0FnSUdOdmJHOXljeXhjYmlBZ0lDQWdJSE53WVdOcGJtYzZJSHNnWW1GelpWVnVhWFFnZlN4Y2JpQWdJQ0I5TEZ4dUlDQjlPaUJNYjJGa2FXNW5TVzVrYVdOaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDRzWEc0Z0lIVnVjM1I1YkdWa09pQmliMjlzWldGdVhHNHBPaUJEVTFOUFltcGxZM1JYYVhSb1RHRmlaV3dnUFQ0Z0tIdGNiaUFnYkdGaVpXdzZJQ2RzYjJGa2FXNW5TVzVrYVdOaGRHOXlKeXhjYmlBZ1pHbHpjR3hoZVRvZ0oyWnNaWGduTEZ4dUlDQjBjbUZ1YzJsMGFXOXVPaUFuWTI5c2IzSWdNVFV3YlhNbkxGeHVJQ0JoYkdsbmJsTmxiR1k2SUNkalpXNTBaWEluTEZ4dUlDQm1iMjUwVTJsNlpUb2djMmw2WlN4Y2JpQWdiR2x1WlVobGFXZG9kRG9nTVN4Y2JpQWdiV0Z5WjJsdVVtbG5hSFE2SUhOcGVtVXNYRzRnSUhSbGVIUkJiR2xuYmpvZ0oyTmxiblJsY2ljc1hHNGdJSFpsY25ScFkyRnNRV3hwWjI0NklDZHRhV1JrYkdVbkxGeHVJQ0F1TGk0b2RXNXpkSGxzWldSY2JpQWdJQ0EvSUh0OVhHNGdJQ0FnT2lCN1hHNGdJQ0FnSUNBZ0lHTnZiRzl5T2lCcGMwWnZZM1Z6WldRZ1B5QmpiMnh2Y25NdWJtVjFkSEpoYkRZd0lEb2dZMjlzYjNKekxtNWxkWFJ5WVd3eU1DeGNiaUFnSUNBZ0lDQWdjR0ZrWkdsdVp6b2dZbUZ6WlZWdWFYUWdLaUF5TEZ4dUlDQWdJQ0FnZlNrc1hHNTlLVHRjYmx4dWFXNTBaWEptWVdObElFeHZZV1JwYm1kRWIzUlFjbTl3Y3lCN1hHNGdJR1JsYkdGNU9pQnVkVzFpWlhJN1hHNGdJRzltWm5ObGREb2dZbTl2YkdWaGJqdGNibjFjYm1OdmJuTjBJRXh2WVdScGJtZEViM1FnUFNBb2V5QmtaV3hoZVN3Z2IyWm1jMlYwSUgwNklFeHZZV1JwYm1kRWIzUlFjbTl3Y3lrZ1BUNGdLRnh1SUNBOGMzQmhibHh1SUNBZ0lHTnpjejE3ZTF4dUlDQWdJQ0FnWVc1cGJXRjBhVzl1T2lCZ0pIdHNiMkZrYVc1blJHOTBRVzVwYldGMGFXOXVjMzBnTVhNZ1pXRnpaUzFwYmkxdmRYUWdKSHRrWld4aGVYMXRjeUJwYm1acGJtbDBaVHRnTEZ4dUlDQWdJQ0FnWW1GamEyZHliM1Z1WkVOdmJHOXlPaUFuWTNWeWNtVnVkRU52Ykc5eUp5eGNiaUFnSUNBZ0lHSnZjbVJsY2xKaFpHbDFjem9nSnpGbGJTY3NYRzRnSUNBZ0lDQmthWE53YkdGNU9pQW5hVzVzYVc1bExXSnNiMk5ySnl4Y2JpQWdJQ0FnSUcxaGNtZHBia3hsWm5RNklHOW1abk5sZENBL0lDY3haVzBuSURvZ2RXNWtaV1pwYm1Wa0xGeHVJQ0FnSUNBZ2FHVnBaMmgwT2lBbk1XVnRKeXhjYmlBZ0lDQWdJSFpsY25ScFkyRnNRV3hwWjI0NklDZDBiM0FuTEZ4dUlDQWdJQ0FnZDJsa2RHZzZJQ2N4WlcwbkxGeHVJQ0FnSUgxOVhHNGdJQzgrWEc0cE8xeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRXh2WVdScGJtZEpibVJwWTJGMGIzSlFjbTl3Y3p4Y2JpQWdUM0IwYVc5dUlEMGdkVzVyYm05M2JpeGNiaUFnU1hOTmRXeDBhU0JsZUhSbGJtUnpJR0p2YjJ4bFlXNGdQU0JpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtJRDBnUjNKdmRYQkNZWE5sUEU5d2RHbHZiajVjYmo0Z1pYaDBaVzVrY3lCRGIyMXRiMjVRY205d2MwRnVaRU5zWVhOelRtRnRaVHhQY0hScGIyNHNJRWx6VFhWc2RHa3NJRWR5YjNWd1BpQjdYRzRnSUM4cUtpQlFjbTl3Y3lCMGFHRjBJSGRwYkd3Z1ltVWdjR0Z6YzJWa0lHOXVJSFJ2SUhSb1pTQmphR2xzWkhKbGJpNGdLaTljYmlBZ2FXNXVaWEpRY205d2N6b2dTbE5ZTGtsdWRISnBibk5wWTBWc1pXMWxiblJ6V3lka2FYWW5YVHRjYmlBZ0x5b3FJRlJvWlNCbWIyTjFjMlZrSUhOMFlYUmxJRzltSUhSb1pTQnpaV3hsWTNRdUlDb3ZYRzRnSUdselJtOWpkWE5sWkRvZ1ltOXZiR1ZoYmp0Y2JpQWdhWE5FYVhOaFlteGxaRG9nWW05dmJHVmhianRjYmlBZ0x5b3FJRk5sZENCemFYcGxJRzltSUhSb1pTQmpiMjUwWVdsdVpYSXVJQ292WEc0Z0lITnBlbVU2SUc1MWJXSmxjanRjYm4xY2JtVjRjRzl5ZENCamIyNXpkQ0JNYjJGa2FXNW5TVzVrYVdOaGRHOXlJRDBnUEZ4dUlDQlBjSFJwYjI0c1hHNGdJRWx6VFhWc2RHa2daWGgwWlc1a2N5QmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K1hHNCtLSHRjYmlBZ2FXNXVaWEpRY205d2N5eGNiaUFnYVhOU2RHd3NYRzRnSUhOcGVtVWdQU0EwTEZ4dUlDQXVMaTV5WlhOMFVISnZjSE5jYm4wNklFeHZZV1JwYm1kSmJtUnBZMkYwYjNKUWNtOXdjenhQY0hScGIyNHNJRWx6VFhWc2RHa3NJRWR5YjNWd1Bpa2dQVDRnZTF4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUR4a2FYWmNiaUFnSUNBZ0lIc3VMaTVuWlhSVGRIbHNaVkJ5YjNCektGeHVJQ0FnSUNBZ0lDQjdJQzR1TG5KbGMzUlFjbTl3Y3l3Z2FXNXVaWEpRY205d2N5d2dhWE5TZEd3c0lITnBlbVVnZlN4Y2JpQWdJQ0FnSUNBZ0oyeHZZV1JwYm1kSmJtUnBZMkYwYjNJbkxGeHVJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnYVc1a2FXTmhkRzl5T2lCMGNuVmxMRnh1SUNBZ0lDQWdJQ0FnSUNkc2IyRmthVzVuTFdsdVpHbGpZWFJ2Y2ljNklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNsOVhHNGdJQ0FnSUNCN0xpNHVhVzV1WlhKUWNtOXdjMzFjYmlBZ0lDQStYRzRnSUNBZ0lDQThURzloWkdsdVowUnZkQ0JrWld4aGVUMTdNSDBnYjJabWMyVjBQWHRwYzFKMGJIMGdMejVjYmlBZ0lDQWdJRHhNYjJGa2FXNW5SRzkwSUdSbGJHRjVQWHN4TmpCOUlHOW1abk5sZENBdlBseHVJQ0FnSUNBZ1BFeHZZV1JwYm1kRWIzUWdaR1ZzWVhrOWV6TXlNSDBnYjJabWMyVjBQWHNoYVhOU2RHeDlJQzgrWEc0Z0lDQWdQQzlrYVhZK1hHNGdJQ2s3WEc1OU8xeHVJbDE5ICovXCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBTdmcgPSBmdW5jdGlvbiBTdmcoX3JlZikge1xuICB2YXIgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQkMik7XG4gIHJldHVybiBqc3goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIGhlaWdodDogc2l6ZSxcbiAgICB3aWR0aDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyMCAyMFwiLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgZm9jdXNhYmxlOiBcImZhbHNlXCIsXG4gICAgY3NzOiBfcmVmMlxuICB9LCBwcm9wcykpO1xufTtcbnZhciBDcm9zc0ljb24gPSBmdW5jdGlvbiBDcm9zc0ljb24ocHJvcHMpIHtcbiAgcmV0dXJuIGpzeChTdmcsIF9leHRlbmRzKHtcbiAgICBzaXplOiAyMFxuICB9LCBwcm9wcyksIGpzeChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjM0OCAxNC44NDljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDBsLTIuNjUxLTMuMDMwLTIuNjUxIDMuMDI5Yy0wLjQ2OSAwLjQ2OS0xLjIyOSAwLjQ2OS0xLjY5NyAwLTAuNDY5LTAuNDY5LTAuNDY5LTEuMjI5IDAtMS42OTdsMi43NTgtMy4xNS0yLjc1OS0zLjE1MmMtMC40NjktMC40NjktMC40NjktMS4yMjggMC0xLjY5N3MxLjIyOC0wLjQ2OSAxLjY5NyAwbDIuNjUyIDMuMDMxIDIuNjUxLTMuMDMxYzAuNDY5LTAuNDY5IDEuMjI4LTAuNDY5IDEuNjk3IDBzMC40NjkgMS4yMjkgMCAxLjY5N2wtMi43NTggMy4xNTIgMi43NTggMy4xNWMwLjQ2OSAwLjQ2OSAwLjQ2OSAxLjIyOSAwIDEuNjk4elwiXG4gIH0pKTtcbn07XG52YXIgRG93bkNoZXZyb24gPSBmdW5jdGlvbiBEb3duQ2hldnJvbihwcm9wcykge1xuICByZXR1cm4ganN4KFN2ZywgX2V4dGVuZHMoe1xuICAgIHNpemU6IDIwXG4gIH0sIHByb3BzKSwganN4KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41MTYgNy41NDhjMC40MzYtMC40NDYgMS4wNDMtMC40ODEgMS41NzYgMGwzLjkwOCAzLjc0NyAzLjkwOC0zLjc0N2MwLjUzMy0wLjQ4MSAxLjE0MS0wLjQ0NiAxLjU3NCAwIDAuNDM2IDAuNDQ1IDAuNDA4IDEuMTk3IDAgMS42MTUtMC40MDYgMC40MTgtNC42OTUgNC41MDItNC42OTUgNC41MDItMC4yMTcgMC4yMjMtMC41MDIgMC4zMzUtMC43ODcgMC4zMzVzLTAuNTctMC4xMTItMC43ODktMC4zMzVjMCAwLTQuMjg3LTQuMDg0LTQuNjk1LTQuNTAycy0wLjQzNi0xLjE3IDAtMS42MTV6XCJcbiAgfSkpO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEJ1dHRvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgYmFzZUNTUyA9IGZ1bmN0aW9uIGJhc2VDU1MoX3JlZjMsIHVuc3R5bGVkKSB7XG4gIHZhciBpc0ZvY3VzZWQgPSBfcmVmMy5pc0ZvY3VzZWQsXG4gICAgX3JlZjMkdGhlbWUgPSBfcmVmMy50aGVtZSxcbiAgICBiYXNlVW5pdCA9IF9yZWYzJHRoZW1lLnNwYWNpbmcuYmFzZVVuaXQsXG4gICAgY29sb3JzID0gX3JlZjMkdGhlbWUuY29sb3JzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdpbmRpY2F0b3JDb250YWluZXInLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgIHBhZGRpbmc6IGJhc2VVbml0ICogMixcbiAgICAnOmhvdmVyJzoge1xuICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsODAgOiBjb2xvcnMubmV1dHJhbDQwXG4gICAgfVxuICB9KTtcbn07XG52YXIgZHJvcGRvd25JbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xudmFyIERyb3Bkb3duSW5kaWNhdG9yID0gZnVuY3Rpb24gRHJvcGRvd25JbmRpY2F0b3IocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdkcm9wZG93bkluZGljYXRvcicsIHtcbiAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgJ2Ryb3Bkb3duLWluZGljYXRvcic6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbiB8fCBqc3goRG93bkNoZXZyb24sIG51bGwpKTtcbn07XG52YXIgY2xlYXJJbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xudmFyIENsZWFySW5kaWNhdG9yID0gZnVuY3Rpb24gQ2xlYXJJbmRpY2F0b3IocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdjbGVhckluZGljYXRvcicsIHtcbiAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgJ2NsZWFyLWluZGljYXRvcic6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbiB8fCBqc3goQ3Jvc3NJY29uLCBudWxsKSk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNlcGFyYXRvclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBpbmRpY2F0b3JTZXBhcmF0b3JDU1MgPSBmdW5jdGlvbiBpbmRpY2F0b3JTZXBhcmF0b3JDU1MoX3JlZjQsIHVuc3R5bGVkKSB7XG4gIHZhciBpc0Rpc2FibGVkID0gX3JlZjQuaXNEaXNhYmxlZCxcbiAgICBfcmVmNCR0aGVtZSA9IF9yZWY0LnRoZW1lLFxuICAgIGJhc2VVbml0ID0gX3JlZjQkdGhlbWUuc3BhY2luZy5iYXNlVW5pdCxcbiAgICBjb2xvcnMgPSBfcmVmNCR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBsYWJlbDogJ2luZGljYXRvclNlcGFyYXRvcicsXG4gICAgYWxpZ25TZWxmOiAnc3RyZXRjaCcsXG4gICAgd2lkdGg6IDFcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDEwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICBtYXJnaW5Cb3R0b206IGJhc2VVbml0ICogMixcbiAgICBtYXJnaW5Ub3A6IGJhc2VVbml0ICogMlxuICB9KTtcbn07XG52YXIgSW5kaWNhdG9yU2VwYXJhdG9yID0gZnVuY3Rpb24gSW5kaWNhdG9yU2VwYXJhdG9yKHByb3BzKSB7XG4gIHZhciBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcInNwYW5cIiwgX2V4dGVuZHMoe30sIGlubmVyUHJvcHMsIGdldFN0eWxlUHJvcHMocHJvcHMsICdpbmRpY2F0b3JTZXBhcmF0b3InLCB7XG4gICAgJ2luZGljYXRvci1zZXBhcmF0b3InOiB0cnVlXG4gIH0pKSk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIExvYWRpbmdcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgMCUsIDgwJSwgMTAwJSB7IG9wYWNpdHk6IDA7IH1cXG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cXG5cIl0pKSk7XG52YXIgbG9hZGluZ0luZGljYXRvckNTUyA9IGZ1bmN0aW9uIGxvYWRpbmdJbmRpY2F0b3JDU1MoX3JlZjUsIHVuc3R5bGVkKSB7XG4gIHZhciBpc0ZvY3VzZWQgPSBfcmVmNS5pc0ZvY3VzZWQsXG4gICAgc2l6ZSA9IF9yZWY1LnNpemUsXG4gICAgX3JlZjUkdGhlbWUgPSBfcmVmNS50aGVtZSxcbiAgICBjb2xvcnMgPSBfcmVmNSR0aGVtZS5jb2xvcnMsXG4gICAgYmFzZVVuaXQgPSBfcmVmNSR0aGVtZS5zcGFjaW5nLmJhc2VVbml0O1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdsb2FkaW5nSW5kaWNhdG9yJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgdHJhbnNpdGlvbjogJ2NvbG9yIDE1MG1zJyxcbiAgICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICAgIGZvbnRTaXplOiBzaXplLFxuICAgIGxpbmVIZWlnaHQ6IDEsXG4gICAgbWFyZ2luUmlnaHQ6IHNpemUsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJ1xuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDYwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICBwYWRkaW5nOiBiYXNlVW5pdCAqIDJcbiAgfSk7XG59O1xudmFyIExvYWRpbmdEb3QgPSBmdW5jdGlvbiBMb2FkaW5nRG90KF9yZWY2KSB7XG4gIHZhciBkZWxheSA9IF9yZWY2LmRlbGF5LFxuICAgIG9mZnNldCA9IF9yZWY2Lm9mZnNldDtcbiAgcmV0dXJuIGpzeChcInNwYW5cIiwge1xuICAgIGNzczogLyojX19QVVJFX18qL2NzcyQyKHtcbiAgICAgIGFuaW1hdGlvbjogXCJcIi5jb25jYXQobG9hZGluZ0RvdEFuaW1hdGlvbnMsIFwiIDFzIGVhc2UtaW4tb3V0IFwiKS5jb25jYXQoZGVsYXksIFwibXMgaW5maW5pdGU7XCIpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnY3VycmVudENvbG9yJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzFlbScsXG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIG1hcmdpbkxlZnQ6IG9mZnNldCA/ICcxZW0nIDogdW5kZWZpbmVkLFxuICAgICAgaGVpZ2h0OiAnMWVtJyxcbiAgICAgIHZlcnRpY2FsQWxpZ246ICd0b3AnLFxuICAgICAgd2lkdGg6ICcxZW0nXG4gICAgfSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiO2xhYmVsOkxvYWRpbmdEb3Q7XCIsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltbHVaR2xqWVhSdmNuTXVkSE40SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVcxUlNTSXNJbVpwYkdVaU9pSnBibVJwWTJGMGIzSnpMblJ6ZUNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLaUJBYW5ONElHcHplQ0FxTDF4dWFXMXdiM0owSUhzZ1VtVmhZM1JPYjJSbElIMGdabkp2YlNBbmNtVmhZM1FuTzF4dWFXMXdiM0owSUhzZ2FuTjRMQ0JyWlhsbWNtRnRaWE1nZlNCbWNtOXRJQ2RBWlcxdmRHbHZiaTl5WldGamRDYzdYRzVjYm1sdGNHOXlkQ0I3WEc0Z0lFTnZiVzF2YmxCeWIzQnpRVzVrUTJ4aGMzTk9ZVzFsTEZ4dUlDQkRVMU5QWW1wbFkzUlhhWFJvVEdGaVpXd3NYRzRnSUVkeWIzVndRbUZ6WlN4Y2JuMGdabkp2YlNBbkxpNHZkSGx3WlhNbk8xeHVhVzF3YjNKMElIc2daMlYwVTNSNWJHVlFjbTl3Y3lCOUlHWnliMjBnSnk0dUwzVjBhV3h6Snp0Y2JseHVMeThnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNHZMeUJFY205d1pHOTNiaUFtSUVOc1pXRnlJRWxqYjI1elhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JseHVZMjl1YzNRZ1UzWm5JRDBnS0h0Y2JpQWdjMmw2WlN4Y2JpQWdMaTR1Y0hKdmNITmNibjA2SUVwVFdDNUpiblJ5YVc1emFXTkZiR1Z0Wlc1MGMxc25jM1puSjEwZ0ppQjdJSE5wZW1VNklHNTFiV0psY2lCOUtTQTlQaUFvWEc0Z0lEeHpkbWRjYmlBZ0lDQm9aV2xuYUhROWUzTnBlbVY5WEc0Z0lDQWdkMmxrZEdnOWUzTnBlbVY5WEc0Z0lDQWdkbWxsZDBKdmVEMWNJakFnTUNBeU1DQXlNRndpWEc0Z0lDQWdZWEpwWVMxb2FXUmtaVzQ5WENKMGNuVmxYQ0pjYmlBZ0lDQm1iMk4xYzJGaWJHVTlYQ0ptWVd4elpWd2lYRzRnSUNBZ1kzTnpQWHQ3WEc0Z0lDQWdJQ0JrYVhOd2JHRjVPaUFuYVc1c2FXNWxMV0pzYjJOckp5eGNiaUFnSUNBZ0lHWnBiR3c2SUNkamRYSnlaVzUwUTI5c2IzSW5MRnh1SUNBZ0lDQWdiR2x1WlVobGFXZG9kRG9nTVN4Y2JpQWdJQ0FnSUhOMGNtOXJaVG9nSjJOMWNuSmxiblJEYjJ4dmNpY3NYRzRnSUNBZ0lDQnpkSEp2YTJWWGFXUjBhRG9nTUN4Y2JpQWdJQ0I5ZlZ4dUlDQWdJSHN1TGk1d2NtOXdjMzFjYmlBZ0x6NWNiaWs3WEc1Y2JtVjRjRzl5ZENCMGVYQmxJRU55YjNOelNXTnZibEJ5YjNCeklEMGdTbE5ZTGtsdWRISnBibk5wWTBWc1pXMWxiblJ6V3lkemRtY25YU0FtSUhzZ2MybDZaVDg2SUc1MWJXSmxjaUI5TzF4dVpYaHdiM0owSUdOdmJuTjBJRU55YjNOelNXTnZiaUE5SUNod2NtOXdjem9nUTNKdmMzTkpZMjl1VUhKdmNITXBJRDArSUNoY2JpQWdQRk4yWnlCemFYcGxQWHN5TUgwZ2V5NHVMbkJ5YjNCemZUNWNiaUFnSUNBOGNHRjBhQ0JrUFZ3aVRURTBMak0wT0NBeE5DNDRORGxqTFRBdU5EWTVJREF1TkRZNUxURXVNakk1SURBdU5EWTVMVEV1TmprM0lEQnNMVEl1TmpVeExUTXVNRE13TFRJdU5qVXhJRE11TURJNVl5MHdMalEyT1NBd0xqUTJPUzB4TGpJeU9TQXdMalEyT1MweExqWTVOeUF3TFRBdU5EWTVMVEF1TkRZNUxUQXVORFk1TFRFdU1qSTVJREF0TVM0Mk9UZHNNaTQzTlRndE15NHhOUzB5TGpjMU9TMHpMakUxTW1NdE1DNDBOamt0TUM0ME5qa3RNQzQwTmprdE1TNHlNamdnTUMweExqWTVOM014TGpJeU9DMHdMalEyT1NBeExqWTVOeUF3YkRJdU5qVXlJRE11TURNeElESXVOalV4TFRNdU1ETXhZekF1TkRZNUxUQXVORFk1SURFdU1qSTRMVEF1TkRZNUlERXVOamszSURCek1DNDBOamtnTVM0eU1qa2dNQ0F4TGpZNU4yd3RNaTQzTlRnZ015NHhOVElnTWk0M05UZ2dNeTR4TldNd0xqUTJPU0F3TGpRMk9TQXdMalEyT1NBeExqSXlPU0F3SURFdU5qazRlbHdpSUM4K1hHNGdJRHd2VTNablBseHVLVHRjYm1WNGNHOXlkQ0IwZVhCbElFUnZkMjVEYUdWMmNtOXVVSEp2Y0hNZ1BTQktVMWd1U1c1MGNtbHVjMmxqUld4bGJXVnVkSE5iSjNOMlp5ZGRJQ1lnZXlCemFYcGxQem9nYm5WdFltVnlJSDA3WEc1bGVIQnZjblFnWTI5dWMzUWdSRzkzYmtOb1pYWnliMjRnUFNBb2NISnZjSE02SUVSdmQyNURhR1YyY205dVVISnZjSE1wSUQwK0lDaGNiaUFnUEZOMlp5QnphWHBsUFhzeU1IMGdleTR1TG5CeWIzQnpmVDVjYmlBZ0lDQThjR0YwYUNCa1BWd2lUVFF1TlRFMklEY3VOVFE0WXpBdU5ETTJMVEF1TkRRMklERXVNRFF6TFRBdU5EZ3hJREV1TlRjMklEQnNNeTQ1TURnZ015NDNORGNnTXk0NU1EZ3RNeTQzTkRkak1DNDFNek10TUM0ME9ERWdNUzR4TkRFdE1DNDBORFlnTVM0MU56UWdNQ0F3TGpRek5pQXdMalEwTlNBd0xqUXdPQ0F4TGpFNU55QXdJREV1TmpFMUxUQXVOREEySURBdU5ERTRMVFF1TmprMUlEUXVOVEF5TFRRdU5qazFJRFF1TlRBeUxUQXVNakUzSURBdU1qSXpMVEF1TlRBeUlEQXVNek0xTFRBdU56ZzNJREF1TXpNMWN5MHdMalUzTFRBdU1URXlMVEF1TnpnNUxUQXVNek0xWXpBZ01DMDBMakk0TnkwMExqQTROQzAwTGpZNU5TMDBMalV3TW5NdE1DNDBNell0TVM0eE55QXdMVEV1TmpFMWVsd2lJQzgrWEc0Z0lEd3ZVM1puUGx4dUtUdGNibHh1THk4Z1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzR2THlCRWNtOXdaRzkzYmlBbUlFTnNaV0Z5SUVKMWRIUnZibk5jYmk4dklEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVnh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVSeWIzQmtiM2R1U1c1a2FXTmhkRzl5VUhKdmNITThYRzRnSUU5d2RHbHZiaUE5SUhWdWEyNXZkMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1SUQwZ1ltOXZiR1ZoYml4Y2JpQWdSM0p2ZFhBZ1pYaDBaVzVrY3lCSGNtOTFjRUpoYzJVOFQzQjBhVzl1UGlBOUlFZHliM1Z3UW1GelpUeFBjSFJwYjI0K1hHNCtJR1Y0ZEdWdVpITWdRMjl0Ylc5dVVISnZjSE5CYm1SRGJHRnpjMDVoYldVOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDRnZTF4dUlDQXZLaW9nVkdobElHTm9hV3hrY21WdUlIUnZJR0psSUhKbGJtUmxjbVZrSUdsdWMybGtaU0IwYUdVZ2FXNWthV05oZEc5eUxpQXFMMXh1SUNCamFHbHNaSEpsYmo4NklGSmxZV04wVG05a1pUdGNiaUFnTHlvcUlGQnliM0J6SUhSb1lYUWdkMmxzYkNCaVpTQndZWE56WldRZ2IyNGdkRzhnZEdobElHTm9hV3hrY21WdUxpQXFMMXh1SUNCcGJtNWxjbEJ5YjNCek9pQktVMWd1U1c1MGNtbHVjMmxqUld4bGJXVnVkSE5iSjJScGRpZGRPMXh1SUNBdktpb2dWR2hsSUdadlkzVnpaV1FnYzNSaGRHVWdiMllnZEdobElITmxiR1ZqZEM0Z0tpOWNiaUFnYVhOR2IyTjFjMlZrT2lCaWIyOXNaV0Z1TzF4dUlDQnBjMFJwYzJGaWJHVmtPaUJpYjI5c1pXRnVPMXh1ZlZ4dVhHNWpiMjV6ZENCaVlYTmxRMU5USUQwZ1BGeHVJQ0JQY0hScGIyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrS0Z4dUlDQjdYRzRnSUNBZ2FYTkdiMk4xYzJWa0xGeHVJQ0FnSUhSb1pXMWxPaUI3WEc0Z0lDQWdJQ0J6Y0dGamFXNW5PaUI3SUdKaGMyVlZibWwwSUgwc1hHNGdJQ0FnSUNCamIyeHZjbk1zWEc0Z0lDQWdmU3hjYmlBZ2ZUcGNiaUFnSUNCOElFUnliM0JrYjNkdVNXNWthV05oZEc5eVVISnZjSE04VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENWNiaUFnSUNCOElFTnNaV0Z5U1c1a2FXTmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q0c1hHNGdJSFZ1YzNSNWJHVmtPaUJpYjI5c1pXRnVYRzRwT2lCRFUxTlBZbXBsWTNSWGFYUm9UR0ZpWld3Z1BUNGdLSHRjYmlBZ2JHRmlaV3c2SUNkcGJtUnBZMkYwYjNKRGIyNTBZV2x1WlhJbkxGeHVJQ0JrYVhOd2JHRjVPaUFuWm14bGVDY3NYRzRnSUhSeVlXNXphWFJwYjI0NklDZGpiMnh2Y2lBeE5UQnRjeWNzWEc0Z0lDNHVMaWgxYm5OMGVXeGxaRnh1SUNBZ0lEOGdlMzFjYmlBZ0lDQTZJSHRjYmlBZ0lDQWdJQ0FnWTI5c2IzSTZJR2x6Um05amRYTmxaQ0EvSUdOdmJHOXljeTV1WlhWMGNtRnNOakFnT2lCamIyeHZjbk11Ym1WMWRISmhiREl3TEZ4dUlDQWdJQ0FnSUNCd1lXUmthVzVuT2lCaVlYTmxWVzVwZENBcUlESXNYRzRnSUNBZ0lDQWdJQ2M2YUc5MlpYSW5PaUI3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXNiM0k2SUdselJtOWpkWE5sWkNBL0lHTnZiRzl5Y3k1dVpYVjBjbUZzT0RBZ09pQmpiMnh2Y25NdWJtVjFkSEpoYkRRd0xGeHVJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdmU2tzWEc1OUtUdGNibHh1Wlhod2IzSjBJR052Ym5OMElHUnliM0JrYjNkdVNXNWthV05oZEc5eVExTlRJRDBnWW1GelpVTlRVenRjYm1WNGNHOXlkQ0JqYjI1emRDQkVjbTl3Wkc5M2JrbHVaR2xqWVhSdmNpQTlJRHhjYmlBZ1QzQjBhVzl1TEZ4dUlDQkpjMDExYkhScElHVjRkR1Z1WkhNZ1ltOXZiR1ZoYml4Y2JpQWdSM0p2ZFhBZ1pYaDBaVzVrY3lCSGNtOTFjRUpoYzJVOFQzQjBhVzl1UGx4dVBpaGNiaUFnY0hKdmNITTZJRVJ5YjNCa2IzZHVTVzVrYVdOaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDVjYmlrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3SUdOb2FXeGtjbVZ1TENCcGJtNWxjbEJ5YjNCeklIMGdQU0J3Y205d2N6dGNiaUFnY21WMGRYSnVJQ2hjYmlBZ0lDQThaR2wyWEc0Z0lDQWdJQ0I3TGk0dVoyVjBVM1I1YkdWUWNtOXdjeWh3Y205d2N5d2dKMlJ5YjNCa2IzZHVTVzVrYVdOaGRHOXlKeXdnZTF4dUlDQWdJQ0FnSUNCcGJtUnBZMkYwYjNJNklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUNka2NtOXdaRzkzYmkxcGJtUnBZMkYwYjNJbk9pQjBjblZsTEZ4dUlDQWdJQ0FnZlNsOVhHNGdJQ0FnSUNCN0xpNHVhVzV1WlhKUWNtOXdjMzFjYmlBZ0lDQStYRzRnSUNBZ0lDQjdZMmhwYkdSeVpXNGdmSHdnUEVSdmQyNURhR1YyY205dUlDOCtmVnh1SUNBZ0lEd3ZaR2wyUGx4dUlDQXBPMXh1ZlR0Y2JseHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQkRiR1ZoY2tsdVpHbGpZWFJ2Y2xCeWIzQnpQRnh1SUNCUGNIUnBiMjRnUFNCMWJtdHViM2R1TEZ4dUlDQkpjMDExYkhScElHVjRkR1Z1WkhNZ1ltOXZiR1ZoYmlBOUlHSnZiMnhsWVc0c1hHNGdJRWR5YjNWd0lHVjRkR1Z1WkhNZ1IzSnZkWEJDWVhObFBFOXdkR2x2Ymo0Z1BTQkhjbTkxY0VKaGMyVThUM0IwYVc5dVBseHVQaUJsZUhSbGJtUnpJRU52YlcxdmJsQnliM0J6UVc1a1EyeGhjM05PWVcxbFBFOXdkR2x2Yml3Z1NYTk5kV3gwYVN3Z1IzSnZkWEErSUh0Y2JpQWdMeW9xSUZSb1pTQmphR2xzWkhKbGJpQjBieUJpWlNCeVpXNWtaWEpsWkNCcGJuTnBaR1VnZEdobElHbHVaR2xqWVhSdmNpNGdLaTljYmlBZ1kyaHBiR1J5Wlc0L09pQlNaV0ZqZEU1dlpHVTdYRzRnSUM4cUtpQlFjbTl3Y3lCMGFHRjBJSGRwYkd3Z1ltVWdjR0Z6YzJWa0lHOXVJSFJ2SUhSb1pTQmphR2xzWkhKbGJpNGdLaTljYmlBZ2FXNXVaWEpRY205d2N6b2dTbE5ZTGtsdWRISnBibk5wWTBWc1pXMWxiblJ6V3lka2FYWW5YVHRjYmlBZ0x5b3FJRlJvWlNCbWIyTjFjMlZrSUhOMFlYUmxJRzltSUhSb1pTQnpaV3hsWTNRdUlDb3ZYRzRnSUdselJtOWpkWE5sWkRvZ1ltOXZiR1ZoYmp0Y2JuMWNibHh1Wlhod2IzSjBJR052Ym5OMElHTnNaV0Z5U1c1a2FXTmhkRzl5UTFOVElEMGdZbUZ6WlVOVFV6dGNibVY0Y0c5eWRDQmpiMjV6ZENCRGJHVmhja2x1WkdsallYUnZjaUE5SUR4Y2JpQWdUM0IwYVc5dUxGeHVJQ0JKYzAxMWJIUnBJR1Y0ZEdWdVpITWdZbTl2YkdWaGJpeGNiaUFnUjNKdmRYQWdaWGgwWlc1a2N5QkhjbTkxY0VKaGMyVThUM0IwYVc5dVBseHVQaWhjYmlBZ2NISnZjSE02SUVOc1pXRnlTVzVrYVdOaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDVjYmlrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3SUdOb2FXeGtjbVZ1TENCcGJtNWxjbEJ5YjNCeklIMGdQU0J3Y205d2N6dGNiaUFnY21WMGRYSnVJQ2hjYmlBZ0lDQThaR2wyWEc0Z0lDQWdJQ0I3TGk0dVoyVjBVM1I1YkdWUWNtOXdjeWh3Y205d2N5d2dKMk5zWldGeVNXNWthV05oZEc5eUp5d2dlMXh1SUNBZ0lDQWdJQ0JwYm1ScFkyRjBiM0k2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJQ2RqYkdWaGNpMXBibVJwWTJGMGIzSW5PaUIwY25WbExGeHVJQ0FnSUNBZ2ZTbDlYRzRnSUNBZ0lDQjdMaTR1YVc1dVpYSlFjbTl3YzMxY2JpQWdJQ0ErWEc0Z0lDQWdJQ0I3WTJocGJHUnlaVzRnZkh3Z1BFTnliM056U1dOdmJpQXZQbjFjYmlBZ0lDQThMMlJwZGo1Y2JpQWdLVHRjYm4wN1hHNWNiaTh2SUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVMeThnVTJWd1lYSmhkRzl5WEc0dkx5QTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCSmJtUnBZMkYwYjNKVFpYQmhjbUYwYjNKUWNtOXdjenhjYmlBZ1QzQjBhVzl1SUQwZ2RXNXJibTkzYml4Y2JpQWdTWE5OZFd4MGFTQmxlSFJsYm1SeklHSnZiMnhsWVc0Z1BTQmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K0lEMGdSM0p2ZFhCQ1lYTmxQRTl3ZEdsdmJqNWNiajRnWlhoMFpXNWtjeUJEYjIxdGIyNVFjbTl3YzBGdVpFTnNZWE56VG1GdFpUeFBjSFJwYjI0c0lFbHpUWFZzZEdrc0lFZHliM1Z3UGlCN1hHNGdJR2x6UkdsellXSnNaV1E2SUdKdmIyeGxZVzQ3WEc0Z0lHbHpSbTlqZFhObFpEb2dZbTl2YkdWaGJqdGNiaUFnYVc1dVpYSlFjbTl3Y3o4NklFcFRXQzVKYm5SeWFXNXphV05GYkdWdFpXNTBjMXNuYzNCaGJpZGRPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnYVc1a2FXTmhkRzl5VTJWd1lYSmhkRzl5UTFOVElEMGdQRnh1SUNCUGNIUnBiMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0tGeHVJQ0I3WEc0Z0lDQWdhWE5FYVhOaFlteGxaQ3hjYmlBZ0lDQjBhR1Z0WlRvZ2UxeHVJQ0FnSUNBZ2MzQmhZMmx1WnpvZ2V5QmlZWE5sVlc1cGRDQjlMRnh1SUNBZ0lDQWdZMjlzYjNKekxGeHVJQ0FnSUgwc1hHNGdJSDA2SUVsdVpHbGpZWFJ2Y2xObGNHRnlZWFJ2Y2xCeWIzQnpQRTl3ZEdsdmJpd2dTWE5OZFd4MGFTd2dSM0p2ZFhBK0xGeHVJQ0IxYm5OMGVXeGxaRG9nWW05dmJHVmhibHh1S1RvZ1ExTlRUMkpxWldOMFYybDBhRXhoWW1Wc0lEMCtJQ2g3WEc0Z0lHeGhZbVZzT2lBbmFXNWthV05oZEc5eVUyVndZWEpoZEc5eUp5eGNiaUFnWVd4cFoyNVRaV3htT2lBbmMzUnlaWFJqYUNjc1hHNGdJSGRwWkhSb09pQXhMRnh1SUNBdUxpNG9kVzV6ZEhsc1pXUmNiaUFnSUNBL0lIdDlYRzRnSUNBZ09pQjdYRzRnSUNBZ0lDQWdJR0poWTJ0bmNtOTFibVJEYjJ4dmNqb2dhWE5FYVhOaFlteGxaQ0EvSUdOdmJHOXljeTV1WlhWMGNtRnNNVEFnT2lCamIyeHZjbk11Ym1WMWRISmhiREl3TEZ4dUlDQWdJQ0FnSUNCdFlYSm5hVzVDYjNSMGIyMDZJR0poYzJWVmJtbDBJQ29nTWl4Y2JpQWdJQ0FnSUNBZ2JXRnlaMmx1Vkc5d09pQmlZWE5sVlc1cGRDQXFJRElzWEc0Z0lDQWdJQ0I5S1N4Y2JuMHBPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdTVzVrYVdOaGRHOXlVMlZ3WVhKaGRHOXlJRDBnUEZ4dUlDQlBjSFJwYjI0c1hHNGdJRWx6VFhWc2RHa2daWGgwWlc1a2N5QmliMjlzWldGdUxGeHVJQ0JIY205MWNDQmxlSFJsYm1SeklFZHliM1Z3UW1GelpUeFBjSFJwYjI0K1hHNCtLRnh1SUNCd2NtOXdjem9nU1c1a2FXTmhkRzl5VTJWd1lYSmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q1Y2Jpa2dQVDRnZTF4dUlDQmpiMjV6ZENCN0lHbHVibVZ5VUhKdmNITWdmU0E5SUhCeWIzQnpPMXh1SUNCeVpYUjFjbTRnS0Z4dUlDQWdJRHh6Y0dGdVhHNGdJQ0FnSUNCN0xpNHVhVzV1WlhKUWNtOXdjMzFjYmlBZ0lDQWdJSHN1TGk1blpYUlRkSGxzWlZCeWIzQnpLSEJ5YjNCekxDQW5hVzVrYVdOaGRHOXlVMlZ3WVhKaGRHOXlKeXdnZTF4dUlDQWdJQ0FnSUNBbmFXNWthV05oZEc5eUxYTmxjR0Z5WVhSdmNpYzZJSFJ5ZFdVc1hHNGdJQ0FnSUNCOUtYMWNiaUFnSUNBdlBseHVJQ0FwTzF4dWZUdGNibHh1THk4Z1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzR2THlCTWIyRmthVzVuWEc0dkx5QTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmx4dVkyOXVjM1FnYkc5aFpHbHVaMFJ2ZEVGdWFXMWhkR2x2Ym5NZ1BTQnJaWGxtY21GdFpYTmdYRzRnSURBbExDQTRNQ1VzSURFd01DVWdleUJ2Y0dGamFYUjVPaUF3T3lCOVhHNGdJRFF3SlNCN0lHOXdZV05wZEhrNklERTdJSDFjYm1BN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCc2IyRmthVzVuU1c1a2FXTmhkRzl5UTFOVElEMGdQRnh1SUNCUGNIUnBiMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0tGeHVJQ0I3WEc0Z0lDQWdhWE5HYjJOMWMyVmtMRnh1SUNBZ0lITnBlbVVzWEc0Z0lDQWdkR2hsYldVNklIdGNiaUFnSUNBZ0lHTnZiRzl5Y3l4Y2JpQWdJQ0FnSUhOd1lXTnBibWM2SUhzZ1ltRnpaVlZ1YVhRZ2ZTeGNiaUFnSUNCOUxGeHVJQ0I5T2lCTWIyRmthVzVuU1c1a2FXTmhkRzl5VUhKdmNITThUM0IwYVc5dUxDQkpjMDExYkhScExDQkhjbTkxY0Q0c1hHNGdJSFZ1YzNSNWJHVmtPaUJpYjI5c1pXRnVYRzRwT2lCRFUxTlBZbXBsWTNSWGFYUm9UR0ZpWld3Z1BUNGdLSHRjYmlBZ2JHRmlaV3c2SUNkc2IyRmthVzVuU1c1a2FXTmhkRzl5Snl4Y2JpQWdaR2x6Y0d4aGVUb2dKMlpzWlhnbkxGeHVJQ0IwY21GdWMybDBhVzl1T2lBblkyOXNiM0lnTVRVd2JYTW5MRnh1SUNCaGJHbG5ibE5sYkdZNklDZGpaVzUwWlhJbkxGeHVJQ0JtYjI1MFUybDZaVG9nYzJsNlpTeGNiaUFnYkdsdVpVaGxhV2RvZERvZ01TeGNiaUFnYldGeVoybHVVbWxuYUhRNklITnBlbVVzWEc0Z0lIUmxlSFJCYkdsbmJqb2dKMk5sYm5SbGNpY3NYRzRnSUhabGNuUnBZMkZzUVd4cFoyNDZJQ2R0YVdSa2JHVW5MRnh1SUNBdUxpNG9kVzV6ZEhsc1pXUmNiaUFnSUNBL0lIdDlYRzRnSUNBZ09pQjdYRzRnSUNBZ0lDQWdJR052Ykc5eU9pQnBjMFp2WTNWelpXUWdQeUJqYjJ4dmNuTXVibVYxZEhKaGJEWXdJRG9nWTI5c2IzSnpMbTVsZFhSeVlXd3lNQ3hjYmlBZ0lDQWdJQ0FnY0dGa1pHbHVaem9nWW1GelpWVnVhWFFnS2lBeUxGeHVJQ0FnSUNBZ2ZTa3NYRzU5S1R0Y2JseHVhVzUwWlhKbVlXTmxJRXh2WVdScGJtZEViM1JRY205d2N5QjdYRzRnSUdSbGJHRjVPaUJ1ZFcxaVpYSTdYRzRnSUc5bVpuTmxkRG9nWW05dmJHVmhianRjYm4xY2JtTnZibk4wSUV4dllXUnBibWRFYjNRZ1BTQW9leUJrWld4aGVTd2diMlptYzJWMElIMDZJRXh2WVdScGJtZEViM1JRY205d2N5a2dQVDRnS0Z4dUlDQThjM0JoYmx4dUlDQWdJR056Y3oxN2UxeHVJQ0FnSUNBZ1lXNXBiV0YwYVc5dU9pQmdKSHRzYjJGa2FXNW5SRzkwUVc1cGJXRjBhVzl1YzMwZ01YTWdaV0Z6WlMxcGJpMXZkWFFnSkh0a1pXeGhlWDF0Y3lCcGJtWnBibWwwWlR0Z0xGeHVJQ0FnSUNBZ1ltRmphMmR5YjNWdVpFTnZiRzl5T2lBblkzVnljbVZ1ZEVOdmJHOXlKeXhjYmlBZ0lDQWdJR0p2Y21SbGNsSmhaR2wxY3pvZ0p6RmxiU2NzWEc0Z0lDQWdJQ0JrYVhOd2JHRjVPaUFuYVc1c2FXNWxMV0pzYjJOckp5eGNiaUFnSUNBZ0lHMWhjbWRwYmt4bFpuUTZJRzltWm5ObGRDQS9JQ2N4WlcwbklEb2dkVzVrWldacGJtVmtMRnh1SUNBZ0lDQWdhR1ZwWjJoME9pQW5NV1Z0Snl4Y2JpQWdJQ0FnSUhabGNuUnBZMkZzUVd4cFoyNDZJQ2QwYjNBbkxGeHVJQ0FnSUNBZ2QybGtkR2c2SUNjeFpXMG5MRnh1SUNBZ0lIMTlYRzRnSUM4K1hHNHBPMXh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUV4dllXUnBibWRKYm1ScFkyRjBiM0pRY205d2N6eGNiaUFnVDNCMGFXOXVJRDBnZFc1cmJtOTNiaXhjYmlBZ1NYTk5kV3gwYVNCbGVIUmxibVJ6SUdKdmIyeGxZVzRnUFNCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrSUQwZ1IzSnZkWEJDWVhObFBFOXdkR2x2Ymo1Y2JqNGdaWGgwWlc1a2N5QkRiMjF0YjI1UWNtOXdjMEZ1WkVOc1lYTnpUbUZ0WlR4UGNIUnBiMjRzSUVselRYVnNkR2tzSUVkeWIzVndQaUI3WEc0Z0lDOHFLaUJRY205d2N5QjBhR0YwSUhkcGJHd2dZbVVnY0dGemMyVmtJRzl1SUhSdklIUm9aU0JqYUdsc1pISmxiaTRnS2k5Y2JpQWdhVzV1WlhKUWNtOXdjem9nU2xOWUxrbHVkSEpwYm5OcFkwVnNaVzFsYm5Seld5ZGthWFluWFR0Y2JpQWdMeW9xSUZSb1pTQm1iMk4xYzJWa0lITjBZWFJsSUc5bUlIUm9aU0J6Wld4bFkzUXVJQ292WEc0Z0lHbHpSbTlqZFhObFpEb2dZbTl2YkdWaGJqdGNiaUFnYVhORWFYTmhZbXhsWkRvZ1ltOXZiR1ZoYmp0Y2JpQWdMeW9xSUZObGRDQnphWHBsSUc5bUlIUm9aU0JqYjI1MFlXbHVaWEl1SUNvdlhHNGdJSE5wZW1VNklHNTFiV0psY2p0Y2JuMWNibVY0Y0c5eWRDQmpiMjV6ZENCTWIyRmthVzVuU1c1a2FXTmhkRzl5SUQwZ1BGeHVJQ0JQY0hScGIyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrS0h0Y2JpQWdhVzV1WlhKUWNtOXdjeXhjYmlBZ2FYTlNkR3dzWEc0Z0lITnBlbVVnUFNBMExGeHVJQ0F1TGk1eVpYTjBVSEp2Y0hOY2JuMDZJRXh2WVdScGJtZEpibVJwWTJGMGIzSlFjbTl3Y3p4UGNIUnBiMjRzSUVselRYVnNkR2tzSUVkeWIzVndQaWtnUFQ0Z2UxeHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lEeGthWFpjYmlBZ0lDQWdJSHN1TGk1blpYUlRkSGxzWlZCeWIzQnpLRnh1SUNBZ0lDQWdJQ0I3SUM0dUxuSmxjM1JRY205d2N5d2dhVzV1WlhKUWNtOXdjeXdnYVhOU2RHd3NJSE5wZW1VZ2ZTeGNiaUFnSUNBZ0lDQWdKMnh2WVdScGJtZEpibVJwWTJGMGIzSW5MRnh1SUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXNWthV05oZEc5eU9pQjBjblZsTEZ4dUlDQWdJQ0FnSUNBZ0lDZHNiMkZrYVc1bkxXbHVaR2xqWVhSdmNpYzZJSFJ5ZFdVc1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDbDlYRzRnSUNBZ0lDQjdMaTR1YVc1dVpYSlFjbTl3YzMxY2JpQWdJQ0ErWEc0Z0lDQWdJQ0E4VEc5aFpHbHVaMFJ2ZENCa1pXeGhlVDE3TUgwZ2IyWm1jMlYwUFh0cGMxSjBiSDBnTHo1Y2JpQWdJQ0FnSUR4TWIyRmthVzVuUkc5MElHUmxiR0Y1UFhzeE5qQjlJRzltWm5ObGRDQXZQbHh1SUNBZ0lDQWdQRXh2WVdScGJtZEViM1FnWkdWc1lYazllek15TUgwZ2IyWm1jMlYwUFhzaGFYTlNkR3g5SUM4K1hHNGdJQ0FnUEM5a2FYWStYRzRnSUNrN1hHNTlPMXh1SWwxOSAqL1wiKVxuICB9KTtcbn07XG52YXIgTG9hZGluZ0luZGljYXRvciA9IGZ1bmN0aW9uIExvYWRpbmdJbmRpY2F0b3IoX3JlZjcpIHtcbiAgdmFyIGlubmVyUHJvcHMgPSBfcmVmNy5pbm5lclByb3BzLFxuICAgIGlzUnRsID0gX3JlZjcuaXNSdGwsXG4gICAgX3JlZjckc2l6ZSA9IF9yZWY3LnNpemUsXG4gICAgc2l6ZSA9IF9yZWY3JHNpemUgPT09IHZvaWQgMCA/IDQgOiBfcmVmNyRzaXplLFxuICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmNywgX2V4Y2x1ZGVkMik7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0UHJvcHMpLCB7fSwge1xuICAgIGlubmVyUHJvcHM6IGlubmVyUHJvcHMsXG4gICAgaXNSdGw6IGlzUnRsLFxuICAgIHNpemU6IHNpemVcbiAgfSksICdsb2FkaW5nSW5kaWNhdG9yJywge1xuICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAnbG9hZGluZy1pbmRpY2F0b3InOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwganN4KExvYWRpbmdEb3QsIHtcbiAgICBkZWxheTogMCxcbiAgICBvZmZzZXQ6IGlzUnRsXG4gIH0pLCBqc3goTG9hZGluZ0RvdCwge1xuICAgIGRlbGF5OiAxNjAsXG4gICAgb2Zmc2V0OiB0cnVlXG4gIH0pLCBqc3goTG9hZGluZ0RvdCwge1xuICAgIGRlbGF5OiAzMjAsXG4gICAgb2Zmc2V0OiAhaXNSdGxcbiAgfSkpO1xufTtcblxudmFyIGNzcyQxID0gZnVuY3Rpb24gY3NzKF9yZWYsIHVuc3R5bGVkKSB7XG4gIHZhciBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgIGlzRm9jdXNlZCA9IF9yZWYuaXNGb2N1c2VkLFxuICAgIF9yZWYkdGhlbWUgPSBfcmVmLnRoZW1lLFxuICAgIGNvbG9ycyA9IF9yZWYkdGhlbWUuY29sb3JzLFxuICAgIGJvcmRlclJhZGl1cyA9IF9yZWYkdGhlbWUuYm9yZGVyUmFkaXVzLFxuICAgIHNwYWNpbmcgPSBfcmVmJHRoZW1lLnNwYWNpbmc7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBsYWJlbDogJ2NvbnRyb2wnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgbWluSGVpZ2h0OiBzcGFjaW5nLmNvbnRyb2xIZWlnaHQsXG4gICAgb3V0bGluZTogJzAgIWltcG9ydGFudCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgdHJhbnNpdGlvbjogJ2FsbCAxMDBtcydcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDUgOiBjb2xvcnMubmV1dHJhbDAsXG4gICAgYm9yZGVyQ29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDEwIDogaXNGb2N1c2VkID8gY29sb3JzLnByaW1hcnkgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgIGJvcmRlclJhZGl1czogYm9yZGVyUmFkaXVzLFxuICAgIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICAgIGJvcmRlcldpZHRoOiAxLFxuICAgIGJveFNoYWRvdzogaXNGb2N1c2VkID8gXCIwIDAgMCAxcHggXCIuY29uY2F0KGNvbG9ycy5wcmltYXJ5KSA6IHVuZGVmaW5lZCxcbiAgICAnJjpob3Zlcic6IHtcbiAgICAgIGJvcmRlckNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMucHJpbWFyeSA6IGNvbG9ycy5uZXV0cmFsMzBcbiAgICB9XG4gIH0pO1xufTtcbnZhciBDb250cm9sID0gZnVuY3Rpb24gQ29udHJvbChwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpc0Rpc2FibGVkID0gcHJvcHMuaXNEaXNhYmxlZCxcbiAgICBpc0ZvY3VzZWQgPSBwcm9wcy5pc0ZvY3VzZWQsXG4gICAgaW5uZXJSZWYgPSBwcm9wcy5pbm5lclJlZixcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICBtZW51SXNPcGVuID0gcHJvcHMubWVudUlzT3BlbjtcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBpbm5lclJlZlxuICB9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnY29udHJvbCcsIHtcbiAgICBjb250cm9sOiB0cnVlLFxuICAgICdjb250cm9sLS1pcy1kaXNhYmxlZCc6IGlzRGlzYWJsZWQsXG4gICAgJ2NvbnRyb2wtLWlzLWZvY3VzZWQnOiBpc0ZvY3VzZWQsXG4gICAgJ2NvbnRyb2wtLW1lbnUtaXMtb3Blbic6IG1lbnVJc09wZW5cbiAgfSksIGlubmVyUHJvcHMsIHtcbiAgICBcImFyaWEtZGlzYWJsZWRcIjogaXNEaXNhYmxlZCB8fCB1bmRlZmluZWRcbiAgfSksIGNoaWxkcmVuKTtcbn07XG52YXIgQ29udHJvbCQxID0gQ29udHJvbDtcblxudmFyIF9leGNsdWRlZCQxID0gW1wiZGF0YVwiXTtcbnZhciBncm91cENTUyA9IGZ1bmN0aW9uIGdyb3VwQ1NTKF9yZWYsIHVuc3R5bGVkKSB7XG4gIHZhciBzcGFjaW5nID0gX3JlZi50aGVtZS5zcGFjaW5nO1xuICByZXR1cm4gdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBwYWRkaW5nQm90dG9tOiBzcGFjaW5nLmJhc2VVbml0ICogMixcbiAgICBwYWRkaW5nVG9wOiBzcGFjaW5nLmJhc2VVbml0ICogMlxuICB9O1xufTtcbnZhciBHcm91cCA9IGZ1bmN0aW9uIEdyb3VwKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGN4ID0gcHJvcHMuY3gsXG4gICAgZ2V0U3R5bGVzID0gcHJvcHMuZ2V0U3R5bGVzLFxuICAgIGdldENsYXNzTmFtZXMgPSBwcm9wcy5nZXRDbGFzc05hbWVzLFxuICAgIEhlYWRpbmcgPSBwcm9wcy5IZWFkaW5nLFxuICAgIGhlYWRpbmdQcm9wcyA9IHByb3BzLmhlYWRpbmdQcm9wcyxcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICBsYWJlbCA9IHByb3BzLmxhYmVsLFxuICAgIHRoZW1lID0gcHJvcHMudGhlbWUsXG4gICAgc2VsZWN0UHJvcHMgPSBwcm9wcy5zZWxlY3RQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2dyb3VwJywge1xuICAgIGdyb3VwOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwganN4KEhlYWRpbmcsIF9leHRlbmRzKHt9LCBoZWFkaW5nUHJvcHMsIHtcbiAgICBzZWxlY3RQcm9wczogc2VsZWN0UHJvcHMsXG4gICAgdGhlbWU6IHRoZW1lLFxuICAgIGdldFN0eWxlczogZ2V0U3R5bGVzLFxuICAgIGdldENsYXNzTmFtZXM6IGdldENsYXNzTmFtZXMsXG4gICAgY3g6IGN4XG4gIH0pLCBsYWJlbCksIGpzeChcImRpdlwiLCBudWxsLCBjaGlsZHJlbikpO1xufTtcbnZhciBncm91cEhlYWRpbmdDU1MgPSBmdW5jdGlvbiBncm91cEhlYWRpbmdDU1MoX3JlZjIsIHVuc3R5bGVkKSB7XG4gIHZhciBfcmVmMiR0aGVtZSA9IF9yZWYyLnRoZW1lLFxuICAgIGNvbG9ycyA9IF9yZWYyJHRoZW1lLmNvbG9ycyxcbiAgICBzcGFjaW5nID0gX3JlZjIkdGhlbWUuc3BhY2luZztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIGxhYmVsOiAnZ3JvdXAnLFxuICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgIGRpc3BsYXk6ICdibG9jaydcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBjb2xvcjogY29sb3JzLm5ldXRyYWw0MCxcbiAgICBmb250U2l6ZTogJzc1JScsXG4gICAgZm9udFdlaWdodDogNTAwLFxuICAgIG1hcmdpbkJvdHRvbTogJzAuMjVlbScsXG4gICAgcGFkZGluZ0xlZnQ6IHNwYWNpbmcuYmFzZVVuaXQgKiAzLFxuICAgIHBhZGRpbmdSaWdodDogc3BhY2luZy5iYXNlVW5pdCAqIDMsXG4gICAgdGV4dFRyYW5zZm9ybTogJ3VwcGVyY2FzZSdcbiAgfSk7XG59O1xudmFyIEdyb3VwSGVhZGluZyA9IGZ1bmN0aW9uIEdyb3VwSGVhZGluZyhwcm9wcykge1xuICB2YXIgX2NsZWFuQ29tbW9uUHJvcHMgPSBjbGVhbkNvbW1vblByb3BzKHByb3BzKTtcbiAgICBfY2xlYW5Db21tb25Qcm9wcy5kYXRhO1xuICAgIHZhciBpbm5lclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9jbGVhbkNvbW1vblByb3BzLCBfZXhjbHVkZWQkMSk7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdncm91cEhlYWRpbmcnLCB7XG4gICAgJ2dyb3VwLWhlYWRpbmcnOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSk7XG59O1xudmFyIEdyb3VwJDEgPSBHcm91cDtcblxudmFyIF9leGNsdWRlZCA9IFtcImlubmVyUmVmXCIsIFwiaXNEaXNhYmxlZFwiLCBcImlzSGlkZGVuXCIsIFwiaW5wdXRDbGFzc05hbWVcIl07XG52YXIgaW5wdXRDU1MgPSBmdW5jdGlvbiBpbnB1dENTUyhfcmVmLCB1bnN0eWxlZCkge1xuICB2YXIgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICB2YWx1ZSA9IF9yZWYudmFsdWUsXG4gICAgX3JlZiR0aGVtZSA9IF9yZWYudGhlbWUsXG4gICAgc3BhY2luZyA9IF9yZWYkdGhlbWUuc3BhY2luZyxcbiAgICBjb2xvcnMgPSBfcmVmJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgdmlzaWJpbGl0eTogaXNEaXNhYmxlZCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnLFxuICAgIC8vIGZvcmNlIGNzcyB0byByZWNvbXB1dGUgd2hlbiB2YWx1ZSBjaGFuZ2UgZHVlIHRvIEBlbW90aW9uIGJ1Zy5cbiAgICAvLyBXZSBjYW4gcmVtb3ZlIGl0IHdoZW5ldmVyIHRoZSBidWcgaXMgZml4ZWQuXG4gICAgdHJhbnNmb3JtOiB2YWx1ZSA/ICd0cmFuc2xhdGVaKDApJyA6ICcnXG4gIH0sIGNvbnRhaW5lclN0eWxlKSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBtYXJnaW46IHNwYWNpbmcuYmFzZVVuaXQgLyAyLFxuICAgIHBhZGRpbmdCb3R0b206IHNwYWNpbmcuYmFzZVVuaXQgLyAyLFxuICAgIHBhZGRpbmdUb3A6IHNwYWNpbmcuYmFzZVVuaXQgLyAyLFxuICAgIGNvbG9yOiBjb2xvcnMubmV1dHJhbDgwXG4gIH0pO1xufTtcbnZhciBzcGFjaW5nU3R5bGUgPSB7XG4gIGdyaWRBcmVhOiAnMSAvIDInLFxuICBmb250OiAnaW5oZXJpdCcsXG4gIG1pbldpZHRoOiAnMnB4JyxcbiAgYm9yZGVyOiAwLFxuICBtYXJnaW46IDAsXG4gIG91dGxpbmU6IDAsXG4gIHBhZGRpbmc6IDBcbn07XG52YXIgY29udGFpbmVyU3R5bGUgPSB7XG4gIGZsZXg6ICcxIDEgYXV0bycsXG4gIGRpc3BsYXk6ICdpbmxpbmUtZ3JpZCcsXG4gIGdyaWRBcmVhOiAnMSAvIDEgLyAyIC8gMycsXG4gIGdyaWRUZW1wbGF0ZUNvbHVtbnM6ICcwIG1pbi1jb250ZW50JyxcbiAgJyY6YWZ0ZXInOiBfb2JqZWN0U3ByZWFkKHtcbiAgICBjb250ZW50OiAnYXR0cihkYXRhLXZhbHVlKSBcIiBcIicsXG4gICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgd2hpdGVTcGFjZTogJ3ByZSdcbiAgfSwgc3BhY2luZ1N0eWxlKVxufTtcbnZhciBpbnB1dFN0eWxlID0gZnVuY3Rpb24gaW5wdXRTdHlsZShpc0hpZGRlbikge1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdpbnB1dCcsXG4gICAgY29sb3I6ICdpbmhlcml0JyxcbiAgICBiYWNrZ3JvdW5kOiAwLFxuICAgIG9wYWNpdHk6IGlzSGlkZGVuID8gMCA6IDEsXG4gICAgd2lkdGg6ICcxMDAlJ1xuICB9LCBzcGFjaW5nU3R5bGUpO1xufTtcbnZhciBJbnB1dCA9IGZ1bmN0aW9uIElucHV0KHByb3BzKSB7XG4gIHZhciBjeCA9IHByb3BzLmN4LFxuICAgIHZhbHVlID0gcHJvcHMudmFsdWU7XG4gIHZhciBfY2xlYW5Db21tb25Qcm9wcyA9IGNsZWFuQ29tbW9uUHJvcHMocHJvcHMpLFxuICAgIGlubmVyUmVmID0gX2NsZWFuQ29tbW9uUHJvcHMuaW5uZXJSZWYsXG4gICAgaXNEaXNhYmxlZCA9IF9jbGVhbkNvbW1vblByb3BzLmlzRGlzYWJsZWQsXG4gICAgaXNIaWRkZW4gPSBfY2xlYW5Db21tb25Qcm9wcy5pc0hpZGRlbixcbiAgICBpbnB1dENsYXNzTmFtZSA9IF9jbGVhbkNvbW1vblByb3BzLmlucHV0Q2xhc3NOYW1lLFxuICAgIGlubmVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX2NsZWFuQ29tbW9uUHJvcHMsIF9leGNsdWRlZCk7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdpbnB1dCcsIHtcbiAgICAnaW5wdXQtY29udGFpbmVyJzogdHJ1ZVxuICB9KSwge1xuICAgIFwiZGF0YS12YWx1ZVwiOiB2YWx1ZSB8fCAnJ1xuICB9KSwganN4KFwiaW5wdXRcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY3goe1xuICAgICAgaW5wdXQ6IHRydWVcbiAgICB9LCBpbnB1dENsYXNzTmFtZSksXG4gICAgcmVmOiBpbm5lclJlZixcbiAgICBzdHlsZTogaW5wdXRTdHlsZShpc0hpZGRlbiksXG4gICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWRcbiAgfSwgaW5uZXJQcm9wcykpKTtcbn07XG52YXIgSW5wdXQkMSA9IElucHV0O1xuXG52YXIgbXVsdGlWYWx1ZUNTUyA9IGZ1bmN0aW9uIG11bHRpVmFsdWVDU1MoX3JlZiwgdW5zdHlsZWQpIHtcbiAgdmFyIF9yZWYkdGhlbWUgPSBfcmVmLnRoZW1lLFxuICAgIHNwYWNpbmcgPSBfcmVmJHRoZW1lLnNwYWNpbmcsXG4gICAgYm9yZGVyUmFkaXVzID0gX3JlZiR0aGVtZS5ib3JkZXJSYWRpdXMsXG4gICAgY29sb3JzID0gX3JlZiR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBsYWJlbDogJ211bHRpVmFsdWUnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBtaW5XaWR0aDogMFxuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogY29sb3JzLm5ldXRyYWwxMCxcbiAgICBib3JkZXJSYWRpdXM6IGJvcmRlclJhZGl1cyAvIDIsXG4gICAgbWFyZ2luOiBzcGFjaW5nLmJhc2VVbml0IC8gMlxuICB9KTtcbn07XG52YXIgbXVsdGlWYWx1ZUxhYmVsQ1NTID0gZnVuY3Rpb24gbXVsdGlWYWx1ZUxhYmVsQ1NTKF9yZWYyLCB1bnN0eWxlZCkge1xuICB2YXIgX3JlZjIkdGhlbWUgPSBfcmVmMi50aGVtZSxcbiAgICBib3JkZXJSYWRpdXMgPSBfcmVmMiR0aGVtZS5ib3JkZXJSYWRpdXMsXG4gICAgY29sb3JzID0gX3JlZjIkdGhlbWUuY29sb3JzLFxuICAgIGNyb3BXaXRoRWxsaXBzaXMgPSBfcmVmMi5jcm9wV2l0aEVsbGlwc2lzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHRleHRPdmVyZmxvdzogY3JvcFdpdGhFbGxpcHNpcyB8fCBjcm9wV2l0aEVsbGlwc2lzID09PSB1bmRlZmluZWQgPyAnZWxsaXBzaXMnIDogdW5kZWZpbmVkLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgYm9yZGVyUmFkaXVzOiBib3JkZXJSYWRpdXMgLyAyLFxuICAgIGNvbG9yOiBjb2xvcnMubmV1dHJhbDgwLFxuICAgIGZvbnRTaXplOiAnODUlJyxcbiAgICBwYWRkaW5nOiAzLFxuICAgIHBhZGRpbmdMZWZ0OiA2XG4gIH0pO1xufTtcbnZhciBtdWx0aVZhbHVlUmVtb3ZlQ1NTID0gZnVuY3Rpb24gbXVsdGlWYWx1ZVJlbW92ZUNTUyhfcmVmMywgdW5zdHlsZWQpIHtcbiAgdmFyIF9yZWYzJHRoZW1lID0gX3JlZjMudGhlbWUsXG4gICAgc3BhY2luZyA9IF9yZWYzJHRoZW1lLnNwYWNpbmcsXG4gICAgYm9yZGVyUmFkaXVzID0gX3JlZjMkdGhlbWUuYm9yZGVyUmFkaXVzLFxuICAgIGNvbG9ycyA9IF9yZWYzJHRoZW1lLmNvbG9ycyxcbiAgICBpc0ZvY3VzZWQgPSBfcmVmMy5pc0ZvY3VzZWQ7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBkaXNwbGF5OiAnZmxleCdcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBib3JkZXJSYWRpdXM6IGJvcmRlclJhZGl1cyAvIDIsXG4gICAgYmFja2dyb3VuZENvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMuZGFuZ2VyTGlnaHQgOiB1bmRlZmluZWQsXG4gICAgcGFkZGluZ0xlZnQ6IHNwYWNpbmcuYmFzZVVuaXQsXG4gICAgcGFkZGluZ1JpZ2h0OiBzcGFjaW5nLmJhc2VVbml0LFxuICAgICc6aG92ZXInOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ycy5kYW5nZXJMaWdodCxcbiAgICAgIGNvbG9yOiBjb2xvcnMuZGFuZ2VyXG4gICAgfVxuICB9KTtcbn07XG52YXIgTXVsdGlWYWx1ZUdlbmVyaWMgPSBmdW5jdGlvbiBNdWx0aVZhbHVlR2VuZXJpYyhfcmVmNCkge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmNC5jaGlsZHJlbixcbiAgICBpbm5lclByb3BzID0gX3JlZjQuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBpbm5lclByb3BzLCBjaGlsZHJlbik7XG59O1xudmFyIE11bHRpVmFsdWVDb250YWluZXIgPSBNdWx0aVZhbHVlR2VuZXJpYztcbnZhciBNdWx0aVZhbHVlTGFiZWwgPSBNdWx0aVZhbHVlR2VuZXJpYztcbmZ1bmN0aW9uIE11bHRpVmFsdWVSZW1vdmUoX3JlZjUpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjUuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IF9yZWY1LmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJvbGU6IFwiYnV0dG9uXCJcbiAgfSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuIHx8IGpzeChDcm9zc0ljb24sIHtcbiAgICBzaXplOiAxNFxuICB9KSk7XG59XG52YXIgTXVsdGlWYWx1ZSA9IGZ1bmN0aW9uIE11bHRpVmFsdWUocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgY29tcG9uZW50cyA9IHByb3BzLmNvbXBvbmVudHMsXG4gICAgZGF0YSA9IHByb3BzLmRhdGEsXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHMsXG4gICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgcmVtb3ZlUHJvcHMgPSBwcm9wcy5yZW1vdmVQcm9wcyxcbiAgICBzZWxlY3RQcm9wcyA9IHByb3BzLnNlbGVjdFByb3BzO1xuICB2YXIgQ29udGFpbmVyID0gY29tcG9uZW50cy5Db250YWluZXIsXG4gICAgTGFiZWwgPSBjb21wb25lbnRzLkxhYmVsLFxuICAgIFJlbW92ZSA9IGNvbXBvbmVudHMuUmVtb3ZlO1xuICByZXR1cm4ganN4KENvbnRhaW5lciwge1xuICAgIGRhdGE6IGRhdGEsXG4gICAgaW5uZXJQcm9wczogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnbXVsdGlWYWx1ZScsIHtcbiAgICAgICdtdWx0aS12YWx1ZSc6IHRydWUsXG4gICAgICAnbXVsdGktdmFsdWUtLWlzLWRpc2FibGVkJzogaXNEaXNhYmxlZFxuICAgIH0pKSwgaW5uZXJQcm9wcyksXG4gICAgc2VsZWN0UHJvcHM6IHNlbGVjdFByb3BzXG4gIH0sIGpzeChMYWJlbCwge1xuICAgIGRhdGE6IGRhdGEsXG4gICAgaW5uZXJQcm9wczogX29iamVjdFNwcmVhZCh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ211bHRpVmFsdWVMYWJlbCcsIHtcbiAgICAgICdtdWx0aS12YWx1ZV9fbGFiZWwnOiB0cnVlXG4gICAgfSkpLFxuICAgIHNlbGVjdFByb3BzOiBzZWxlY3RQcm9wc1xuICB9LCBjaGlsZHJlbiksIGpzeChSZW1vdmUsIHtcbiAgICBkYXRhOiBkYXRhLFxuICAgIGlubmVyUHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ211bHRpVmFsdWVSZW1vdmUnLCB7XG4gICAgICAnbXVsdGktdmFsdWVfX3JlbW92ZSc6IHRydWVcbiAgICB9KSksIHt9LCB7XG4gICAgICAnYXJpYS1sYWJlbCc6IFwiUmVtb3ZlIFwiLmNvbmNhdChjaGlsZHJlbiB8fCAnb3B0aW9uJylcbiAgICB9LCByZW1vdmVQcm9wcyksXG4gICAgc2VsZWN0UHJvcHM6IHNlbGVjdFByb3BzXG4gIH0pKTtcbn07XG52YXIgTXVsdGlWYWx1ZSQxID0gTXVsdGlWYWx1ZTtcblxudmFyIG9wdGlvbkNTUyA9IGZ1bmN0aW9uIG9wdGlvbkNTUyhfcmVmLCB1bnN0eWxlZCkge1xuICB2YXIgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBpc0ZvY3VzZWQgPSBfcmVmLmlzRm9jdXNlZCxcbiAgICBpc1NlbGVjdGVkID0gX3JlZi5pc1NlbGVjdGVkLFxuICAgIF9yZWYkdGhlbWUgPSBfcmVmLnRoZW1lLFxuICAgIHNwYWNpbmcgPSBfcmVmJHRoZW1lLnNwYWNpbmcsXG4gICAgY29sb3JzID0gX3JlZiR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBsYWJlbDogJ29wdGlvbicsXG4gICAgY3Vyc29yOiAnZGVmYXVsdCcsXG4gICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAncmdiYSgwLCAwLCAwLCAwKSdcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzU2VsZWN0ZWQgPyBjb2xvcnMucHJpbWFyeSA6IGlzRm9jdXNlZCA/IGNvbG9ycy5wcmltYXJ5MjUgOiAndHJhbnNwYXJlbnQnLFxuICAgIGNvbG9yOiBpc0Rpc2FibGVkID8gY29sb3JzLm5ldXRyYWwyMCA6IGlzU2VsZWN0ZWQgPyBjb2xvcnMubmV1dHJhbDAgOiAnaW5oZXJpdCcsXG4gICAgcGFkZGluZzogXCJcIi5jb25jYXQoc3BhY2luZy5iYXNlVW5pdCAqIDIsIFwicHggXCIpLmNvbmNhdChzcGFjaW5nLmJhc2VVbml0ICogMywgXCJweFwiKSxcbiAgICAvLyBwcm92aWRlIHNvbWUgYWZmb3JkYW5jZSBvbiB0b3VjaCBkZXZpY2VzXG4gICAgJzphY3RpdmUnOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICFpc0Rpc2FibGVkID8gaXNTZWxlY3RlZCA/IGNvbG9ycy5wcmltYXJ5IDogY29sb3JzLnByaW1hcnk1MCA6IHVuZGVmaW5lZFxuICAgIH1cbiAgfSk7XG59O1xudmFyIE9wdGlvbiA9IGZ1bmN0aW9uIE9wdGlvbihwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpc0Rpc2FibGVkID0gcHJvcHMuaXNEaXNhYmxlZCxcbiAgICBpc0ZvY3VzZWQgPSBwcm9wcy5pc0ZvY3VzZWQsXG4gICAgaXNTZWxlY3RlZCA9IHByb3BzLmlzU2VsZWN0ZWQsXG4gICAgaW5uZXJSZWYgPSBwcm9wcy5pbm5lclJlZixcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ29wdGlvbicsIHtcbiAgICBvcHRpb246IHRydWUsXG4gICAgJ29wdGlvbi0taXMtZGlzYWJsZWQnOiBpc0Rpc2FibGVkLFxuICAgICdvcHRpb24tLWlzLWZvY3VzZWQnOiBpc0ZvY3VzZWQsXG4gICAgJ29wdGlvbi0taXMtc2VsZWN0ZWQnOiBpc1NlbGVjdGVkXG4gIH0pLCB7XG4gICAgcmVmOiBpbm5lclJlZixcbiAgICBcImFyaWEtZGlzYWJsZWRcIjogaXNEaXNhYmxlZFxuICB9LCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcbnZhciBPcHRpb24kMSA9IE9wdGlvbjtcblxudmFyIHBsYWNlaG9sZGVyQ1NTID0gZnVuY3Rpb24gcGxhY2Vob2xkZXJDU1MoX3JlZiwgdW5zdHlsZWQpIHtcbiAgdmFyIF9yZWYkdGhlbWUgPSBfcmVmLnRoZW1lLFxuICAgIHNwYWNpbmcgPSBfcmVmJHRoZW1lLnNwYWNpbmcsXG4gICAgY29sb3JzID0gX3JlZiR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBsYWJlbDogJ3BsYWNlaG9sZGVyJyxcbiAgICBncmlkQXJlYTogJzEgLyAxIC8gMiAvIDMnXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgY29sb3I6IGNvbG9ycy5uZXV0cmFsNTAsXG4gICAgbWFyZ2luTGVmdDogc3BhY2luZy5iYXNlVW5pdCAvIDIsXG4gICAgbWFyZ2luUmlnaHQ6IHNwYWNpbmcuYmFzZVVuaXQgLyAyXG4gIH0pO1xufTtcbnZhciBQbGFjZWhvbGRlciA9IGZ1bmN0aW9uIFBsYWNlaG9sZGVyKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAncGxhY2Vob2xkZXInLCB7XG4gICAgcGxhY2Vob2xkZXI6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xudmFyIFBsYWNlaG9sZGVyJDEgPSBQbGFjZWhvbGRlcjtcblxudmFyIGNzcyA9IGZ1bmN0aW9uIGNzcyhfcmVmLCB1bnN0eWxlZCkge1xuICB2YXIgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICBzcGFjaW5nID0gX3JlZiR0aGVtZS5zcGFjaW5nLFxuICAgIGNvbG9ycyA9IF9yZWYkdGhlbWUuY29sb3JzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdzaW5nbGVWYWx1ZScsXG4gICAgZ3JpZEFyZWE6ICcxIC8gMSAvIDIgLyAzJyxcbiAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCdcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBjb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsNDAgOiBjb2xvcnMubmV1dHJhbDgwLFxuICAgIG1hcmdpbkxlZnQ6IHNwYWNpbmcuYmFzZVVuaXQgLyAyLFxuICAgIG1hcmdpblJpZ2h0OiBzcGFjaW5nLmJhc2VVbml0IC8gMlxuICB9KTtcbn07XG52YXIgU2luZ2xlVmFsdWUgPSBmdW5jdGlvbiBTaW5nbGVWYWx1ZShwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpc0Rpc2FibGVkID0gcHJvcHMuaXNEaXNhYmxlZCxcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ3NpbmdsZVZhbHVlJywge1xuICAgICdzaW5nbGUtdmFsdWUnOiB0cnVlLFxuICAgICdzaW5nbGUtdmFsdWUtLWlzLWRpc2FibGVkJzogaXNEaXNhYmxlZFxuICB9KSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG52YXIgU2luZ2xlVmFsdWUkMSA9IFNpbmdsZVZhbHVlO1xuXG52YXIgY29tcG9uZW50cyA9IHtcbiAgQ2xlYXJJbmRpY2F0b3I6IENsZWFySW5kaWNhdG9yLFxuICBDb250cm9sOiBDb250cm9sJDEsXG4gIERyb3Bkb3duSW5kaWNhdG9yOiBEcm9wZG93bkluZGljYXRvcixcbiAgRG93bkNoZXZyb246IERvd25DaGV2cm9uLFxuICBDcm9zc0ljb246IENyb3NzSWNvbixcbiAgR3JvdXA6IEdyb3VwJDEsXG4gIEdyb3VwSGVhZGluZzogR3JvdXBIZWFkaW5nLFxuICBJbmRpY2F0b3JzQ29udGFpbmVyOiBJbmRpY2F0b3JzQ29udGFpbmVyLFxuICBJbmRpY2F0b3JTZXBhcmF0b3I6IEluZGljYXRvclNlcGFyYXRvcixcbiAgSW5wdXQ6IElucHV0JDEsXG4gIExvYWRpbmdJbmRpY2F0b3I6IExvYWRpbmdJbmRpY2F0b3IsXG4gIE1lbnU6IE1lbnUkMSxcbiAgTWVudUxpc3Q6IE1lbnVMaXN0LFxuICBNZW51UG9ydGFsOiBNZW51UG9ydGFsLFxuICBMb2FkaW5nTWVzc2FnZTogTG9hZGluZ01lc3NhZ2UsXG4gIE5vT3B0aW9uc01lc3NhZ2U6IE5vT3B0aW9uc01lc3NhZ2UsXG4gIE11bHRpVmFsdWU6IE11bHRpVmFsdWUkMSxcbiAgTXVsdGlWYWx1ZUNvbnRhaW5lcjogTXVsdGlWYWx1ZUNvbnRhaW5lcixcbiAgTXVsdGlWYWx1ZUxhYmVsOiBNdWx0aVZhbHVlTGFiZWwsXG4gIE11bHRpVmFsdWVSZW1vdmU6IE11bHRpVmFsdWVSZW1vdmUsXG4gIE9wdGlvbjogT3B0aW9uJDEsXG4gIFBsYWNlaG9sZGVyOiBQbGFjZWhvbGRlciQxLFxuICBTZWxlY3RDb250YWluZXI6IFNlbGVjdENvbnRhaW5lcixcbiAgU2luZ2xlVmFsdWU6IFNpbmdsZVZhbHVlJDEsXG4gIFZhbHVlQ29udGFpbmVyOiBWYWx1ZUNvbnRhaW5lclxufTtcbnZhciBkZWZhdWx0Q29tcG9uZW50cyA9IGZ1bmN0aW9uIGRlZmF1bHRDb21wb25lbnRzKHByb3BzKSB7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNvbXBvbmVudHMpLCBwcm9wcy5jb21wb25lbnRzKTtcbn07XG5cbmV4cG9ydCB7IGlzTW9iaWxlRGV2aWNlIGFzIEEsIG11bHRpVmFsdWVBc1ZhbHVlIGFzIEIsIHNpbmdsZVZhbHVlQXNWYWx1ZSBhcyBDLCB2YWx1ZVRlcm5hcnkgYXMgRCwgY2xhc3NOYW1lcyBhcyBFLCBkZWZhdWx0Q29tcG9uZW50cyBhcyBGLCBpc0RvY3VtZW50RWxlbWVudCBhcyBHLCBjbGVhblZhbHVlIGFzIEgsIHNjcm9sbEludG9WaWV3IGFzIEksIG5vb3AgYXMgSiwgbm90TnVsbGlzaCBhcyBLLCBoYW5kbGVJbnB1dENoYW5nZSBhcyBMLCBNZW51UGxhY2VyIGFzIE0sIGNsZWFySW5kaWNhdG9yQ1NTIGFzIGEsIGNvbnRhaW5lckNTUyBhcyBiLCBjb21wb25lbnRzIGFzIGMsIGNzcyQxIGFzIGQsIGRyb3Bkb3duSW5kaWNhdG9yQ1NTIGFzIGUsIGdyb3VwSGVhZGluZ0NTUyBhcyBmLCBncm91cENTUyBhcyBnLCBpbmRpY2F0b3JTZXBhcmF0b3JDU1MgYXMgaCwgaW5kaWNhdG9yc0NvbnRhaW5lckNTUyBhcyBpLCBpbnB1dENTUyBhcyBqLCBsb2FkaW5nTWVzc2FnZUNTUyBhcyBrLCBsb2FkaW5nSW5kaWNhdG9yQ1NTIGFzIGwsIG1lbnVDU1MgYXMgbSwgbWVudUxpc3RDU1MgYXMgbiwgbWVudVBvcnRhbENTUyBhcyBvLCBtdWx0aVZhbHVlQ1NTIGFzIHAsIG11bHRpVmFsdWVMYWJlbENTUyBhcyBxLCByZW1vdmVQcm9wcyBhcyByLCBzdXBwb3J0c1Bhc3NpdmVFdmVudHMgYXMgcywgbXVsdGlWYWx1ZVJlbW92ZUNTUyBhcyB0LCBub09wdGlvbnNNZXNzYWdlQ1NTIGFzIHUsIG9wdGlvbkNTUyBhcyB2LCBwbGFjZWhvbGRlckNTUyBhcyB3LCBjc3MgYXMgeCwgdmFsdWVDb250YWluZXJDU1MgYXMgeSwgaXNUb3VjaENhcGFibGUgYXMgeiB9O1xuIiwidmFyIHNhZmVJc05hTiA9IE51bWJlci5pc05hTiB8fFxuICAgIGZ1bmN0aW9uIHBvbnlmaWxsKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZTtcbiAgICB9O1xuZnVuY3Rpb24gaXNFcXVhbChmaXJzdCwgc2Vjb25kKSB7XG4gICAgaWYgKGZpcnN0ID09PSBzZWNvbmQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChzYWZlSXNOYU4oZmlyc3QpICYmIHNhZmVJc05hTihzZWNvbmQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBhcmVJbnB1dHNFcXVhbChuZXdJbnB1dHMsIGxhc3RJbnB1dHMpIHtcbiAgICBpZiAobmV3SW5wdXRzLmxlbmd0aCAhPT0gbGFzdElucHV0cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0lucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWlzRXF1YWwobmV3SW5wdXRzW2ldLCBsYXN0SW5wdXRzW2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtZW1vaXplT25lKHJlc3VsdEZuLCBpc0VxdWFsKSB7XG4gICAgaWYgKGlzRXF1YWwgPT09IHZvaWQgMCkgeyBpc0VxdWFsID0gYXJlSW5wdXRzRXF1YWw7IH1cbiAgICB2YXIgY2FjaGUgPSBudWxsO1xuICAgIGZ1bmN0aW9uIG1lbW9pemVkKCkge1xuICAgICAgICB2YXIgbmV3QXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgbmV3QXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWNoZSAmJiBjYWNoZS5sYXN0VGhpcyA9PT0gdGhpcyAmJiBpc0VxdWFsKG5ld0FyZ3MsIGNhY2hlLmxhc3RBcmdzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlLmxhc3RSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxhc3RSZXN1bHQgPSByZXN1bHRGbi5hcHBseSh0aGlzLCBuZXdBcmdzKTtcbiAgICAgICAgY2FjaGUgPSB7XG4gICAgICAgICAgICBsYXN0UmVzdWx0OiBsYXN0UmVzdWx0LFxuICAgICAgICAgICAgbGFzdEFyZ3M6IG5ld0FyZ3MsXG4gICAgICAgICAgICBsYXN0VGhpczogdGhpcyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgfVxuICAgIG1lbW9pemVkLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGNhY2hlID0gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBtZW1vaXplZDtcbn1cblxuZXhwb3J0IHsgbWVtb2l6ZU9uZSBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyJztcbmltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2snO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcyc7XG5pbXBvcnQgX2luaGVyaXRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzJztcbmltcG9ydCBfY3JlYXRlU3VwZXIgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlU3VwZXInO1xuaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VNZW1vLCBGcmFnbWVudCwgdXNlUmVmLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByIGFzIHJlbW92ZVByb3BzLCBzIGFzIHN1cHBvcnRzUGFzc2l2ZUV2ZW50cywgYSBhcyBjbGVhckluZGljYXRvckNTUywgYiBhcyBjb250YWluZXJDU1MsIGQgYXMgY3NzJDEsIGUgYXMgZHJvcGRvd25JbmRpY2F0b3JDU1MsIGcgYXMgZ3JvdXBDU1MsIGYgYXMgZ3JvdXBIZWFkaW5nQ1NTLCBpIGFzIGluZGljYXRvcnNDb250YWluZXJDU1MsIGggYXMgaW5kaWNhdG9yU2VwYXJhdG9yQ1NTLCBqIGFzIGlucHV0Q1NTLCBsIGFzIGxvYWRpbmdJbmRpY2F0b3JDU1MsIGsgYXMgbG9hZGluZ01lc3NhZ2VDU1MsIG0gYXMgbWVudUNTUywgbiBhcyBtZW51TGlzdENTUywgbyBhcyBtZW51UG9ydGFsQ1NTLCBwIGFzIG11bHRpVmFsdWVDU1MsIHEgYXMgbXVsdGlWYWx1ZUxhYmVsQ1NTLCB0IGFzIG11bHRpVmFsdWVSZW1vdmVDU1MsIHUgYXMgbm9PcHRpb25zTWVzc2FnZUNTUywgdiBhcyBvcHRpb25DU1MsIHcgYXMgcGxhY2Vob2xkZXJDU1MsIHggYXMgY3NzJDIsIHkgYXMgdmFsdWVDb250YWluZXJDU1MsIHogYXMgaXNUb3VjaENhcGFibGUsIEEgYXMgaXNNb2JpbGVEZXZpY2UsIEIgYXMgbXVsdGlWYWx1ZUFzVmFsdWUsIEMgYXMgc2luZ2xlVmFsdWVBc1ZhbHVlLCBEIGFzIHZhbHVlVGVybmFyeSwgRSBhcyBjbGFzc05hbWVzLCBGIGFzIGRlZmF1bHRDb21wb25lbnRzLCBHIGFzIGlzRG9jdW1lbnRFbGVtZW50LCBIIGFzIGNsZWFuVmFsdWUsIEkgYXMgc2Nyb2xsSW50b1ZpZXcsIEogYXMgbm9vcCwgTSBhcyBNZW51UGxhY2VyLCBLIGFzIG5vdE51bGxpc2ggfSBmcm9tICcuL2luZGV4LWEzMDFmNTI2LmVzbS5qcyc7XG5pbXBvcnQgeyBqc3gsIGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBtZW1vaXplT25lIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXMnO1xuXG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyQyKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cblxuLy8gQXNzaXN0aXZlIHRleHQgdG8gZGVzY3JpYmUgdmlzdWFsIGVsZW1lbnRzLiBIaWRkZW4gZm9yIHNpZ2h0ZWQgdXNlcnMuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI3cGcwY2otYTExeVRleHRcIixcbiAgc3R5bGVzOiBcImxhYmVsOmExMXlUZXh0O3otaW5kZXg6OTk5OTtib3JkZXI6MDtjbGlwOnJlY3QoMXB4LCAxcHgsIDFweCwgMXB4KTtoZWlnaHQ6MXB4O3dpZHRoOjFweDtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3doaXRlLXNwYWNlOm5vd3JhcFwiXG59IDoge1xuICBuYW1lOiBcIjFmNDNhdnotYTExeVRleHQtQTExeVRleHRcIixcbiAgc3R5bGVzOiBcImxhYmVsOmExMXlUZXh0O3otaW5kZXg6OTk5OTtib3JkZXI6MDtjbGlwOnJlY3QoMXB4LCAxcHgsIDFweCwgMXB4KTtoZWlnaHQ6MXB4O3dpZHRoOjFweDtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3doaXRlLXNwYWNlOm5vd3JhcDtsYWJlbDpBMTF5VGV4dDtcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklrRXhNWGxVWlhoMExuUnplQ0pkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZOU1NJc0ltWnBiR1VpT2lKQk1URjVWR1Y0ZEM1MGMzZ2lMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lvZ1FHcHplQ0JxYzNnZ0tpOWNibWx0Y0c5eWRDQjdJR3B6ZUNCOUlHWnliMjBnSjBCbGJXOTBhVzl1TDNKbFlXTjBKenRjYmx4dUx5OGdRWE56YVhOMGFYWmxJSFJsZUhRZ2RHOGdaR1Z6WTNKcFltVWdkbWx6ZFdGc0lHVnNaVzFsYm5SekxpQklhV1JrWlc0Z1ptOXlJSE5wWjJoMFpXUWdkWE5sY25NdVhHNWpiMjV6ZENCQk1URjVWR1Y0ZENBOUlDaHdjbTl3Y3pvZ1NsTllMa2x1ZEhKcGJuTnBZMFZzWlcxbGJuUnpXeWR6Y0dGdUoxMHBJRDArSUNoY2JpQWdQSE53WVc1Y2JpQWdJQ0JqYzNNOWUzdGNiaUFnSUNBZ0lHeGhZbVZzT2lBbllURXhlVlJsZUhRbkxGeHVJQ0FnSUNBZ2VrbHVaR1Y0T2lBNU9UazVMRnh1SUNBZ0lDQWdZbTl5WkdWeU9pQXdMRnh1SUNBZ0lDQWdZMnhwY0RvZ0ozSmxZM1FvTVhCNExDQXhjSGdzSURGd2VDd2dNWEI0S1Njc1hHNGdJQ0FnSUNCb1pXbG5hSFE2SURFc1hHNGdJQ0FnSUNCM2FXUjBhRG9nTVN4Y2JpQWdJQ0FnSUhCdmMybDBhVzl1T2lBbllXSnpiMngxZEdVbkxGeHVJQ0FnSUNBZ2IzWmxjbVpzYjNjNklDZG9hV1JrWlc0bkxGeHVJQ0FnSUNBZ2NHRmtaR2x1WnpvZ01DeGNiaUFnSUNBZ0lIZG9hWFJsVTNCaFkyVTZJQ2R1YjNkeVlYQW5MRnh1SUNBZ0lIMTlYRzRnSUNBZ2V5NHVMbkJ5YjNCemZWeHVJQ0F2UGx4dUtUdGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdRVEV4ZVZSbGVIUTdYRzRpWFgwPSAqL1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18kMlxufTtcbnZhciBBMTF5VGV4dCA9IGZ1bmN0aW9uIEExMXlUZXh0KHByb3BzKSB7XG4gIHJldHVybiBqc3goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IF9yZWZcbiAgfSwgcHJvcHMpKTtcbn07XG52YXIgQTExeVRleHQkMSA9IEExMXlUZXh0O1xuXG52YXIgZGVmYXVsdEFyaWFMaXZlTWVzc2FnZXMgPSB7XG4gIGd1aWRhbmNlOiBmdW5jdGlvbiBndWlkYW5jZShwcm9wcykge1xuICAgIHZhciBpc1NlYXJjaGFibGUgPSBwcm9wcy5pc1NlYXJjaGFibGUsXG4gICAgICBpc011bHRpID0gcHJvcHMuaXNNdWx0aSxcbiAgICAgIHRhYlNlbGVjdHNWYWx1ZSA9IHByb3BzLnRhYlNlbGVjdHNWYWx1ZSxcbiAgICAgIGNvbnRleHQgPSBwcm9wcy5jb250ZXh0LFxuICAgICAgaXNJbml0aWFsRm9jdXMgPSBwcm9wcy5pc0luaXRpYWxGb2N1cztcbiAgICBzd2l0Y2ggKGNvbnRleHQpIHtcbiAgICAgIGNhc2UgJ21lbnUnOlxuICAgICAgICByZXR1cm4gXCJVc2UgVXAgYW5kIERvd24gdG8gY2hvb3NlIG9wdGlvbnMsIHByZXNzIEVudGVyIHRvIHNlbGVjdCB0aGUgY3VycmVudGx5IGZvY3VzZWQgb3B0aW9uLCBwcmVzcyBFc2NhcGUgdG8gZXhpdCB0aGUgbWVudVwiLmNvbmNhdCh0YWJTZWxlY3RzVmFsdWUgPyAnLCBwcmVzcyBUYWIgdG8gc2VsZWN0IHRoZSBvcHRpb24gYW5kIGV4aXQgdGhlIG1lbnUnIDogJycsIFwiLlwiKTtcbiAgICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgICAgcmV0dXJuIGlzSW5pdGlhbEZvY3VzID8gXCJcIi5jb25jYXQocHJvcHNbJ2FyaWEtbGFiZWwnXSB8fCAnU2VsZWN0JywgXCIgaXMgZm9jdXNlZCBcIikuY29uY2F0KGlzU2VhcmNoYWJsZSA/ICcsdHlwZSB0byByZWZpbmUgbGlzdCcgOiAnJywgXCIsIHByZXNzIERvd24gdG8gb3BlbiB0aGUgbWVudSwgXCIpLmNvbmNhdChpc011bHRpID8gJyBwcmVzcyBsZWZ0IHRvIGZvY3VzIHNlbGVjdGVkIHZhbHVlcycgOiAnJykgOiAnJztcbiAgICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuICdVc2UgbGVmdCBhbmQgcmlnaHQgdG8gdG9nZ2xlIGJldHdlZW4gZm9jdXNlZCB2YWx1ZXMsIHByZXNzIEJhY2tzcGFjZSB0byByZW1vdmUgdGhlIGN1cnJlbnRseSBmb2N1c2VkIHZhbHVlJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH0sXG4gIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwcm9wcykge1xuICAgIHZhciBhY3Rpb24gPSBwcm9wcy5hY3Rpb24sXG4gICAgICBfcHJvcHMkbGFiZWwgPSBwcm9wcy5sYWJlbCxcbiAgICAgIGxhYmVsID0gX3Byb3BzJGxhYmVsID09PSB2b2lkIDAgPyAnJyA6IF9wcm9wcyRsYWJlbCxcbiAgICAgIGxhYmVscyA9IHByb3BzLmxhYmVscyxcbiAgICAgIGlzRGlzYWJsZWQgPSBwcm9wcy5pc0Rpc2FibGVkO1xuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlICdkZXNlbGVjdC1vcHRpb24nOlxuICAgICAgY2FzZSAncG9wLXZhbHVlJzpcbiAgICAgIGNhc2UgJ3JlbW92ZS12YWx1ZSc6XG4gICAgICAgIHJldHVybiBcIm9wdGlvbiBcIi5jb25jYXQobGFiZWwsIFwiLCBkZXNlbGVjdGVkLlwiKTtcbiAgICAgIGNhc2UgJ2NsZWFyJzpcbiAgICAgICAgcmV0dXJuICdBbGwgc2VsZWN0ZWQgb3B0aW9ucyBoYXZlIGJlZW4gY2xlYXJlZC4nO1xuICAgICAgY2FzZSAnaW5pdGlhbC1pbnB1dC1mb2N1cyc6XG4gICAgICAgIHJldHVybiBcIm9wdGlvblwiLmNvbmNhdChsYWJlbHMubGVuZ3RoID4gMSA/ICdzJyA6ICcnLCBcIiBcIikuY29uY2F0KGxhYmVscy5qb2luKCcsJyksIFwiLCBzZWxlY3RlZC5cIik7XG4gICAgICBjYXNlICdzZWxlY3Qtb3B0aW9uJzpcbiAgICAgICAgcmV0dXJuIGlzRGlzYWJsZWQgPyBcIm9wdGlvbiBcIi5jb25jYXQobGFiZWwsIFwiIGlzIGRpc2FibGVkLiBTZWxlY3QgYW5vdGhlciBvcHRpb24uXCIpIDogXCJvcHRpb24gXCIuY29uY2F0KGxhYmVsLCBcIiwgc2VsZWN0ZWQuXCIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfSxcbiAgb25Gb2N1czogZnVuY3Rpb24gb25Gb2N1cyhwcm9wcykge1xuICAgIHZhciBjb250ZXh0ID0gcHJvcHMuY29udGV4dCxcbiAgICAgIGZvY3VzZWQgPSBwcm9wcy5mb2N1c2VkLFxuICAgICAgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMsXG4gICAgICBfcHJvcHMkbGFiZWwyID0gcHJvcHMubGFiZWwsXG4gICAgICBsYWJlbCA9IF9wcm9wcyRsYWJlbDIgPT09IHZvaWQgMCA/ICcnIDogX3Byb3BzJGxhYmVsMixcbiAgICAgIHNlbGVjdFZhbHVlID0gcHJvcHMuc2VsZWN0VmFsdWUsXG4gICAgICBpc0Rpc2FibGVkID0gcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgIGlzU2VsZWN0ZWQgPSBwcm9wcy5pc1NlbGVjdGVkLFxuICAgICAgaXNBcHBsZURldmljZSA9IHByb3BzLmlzQXBwbGVEZXZpY2U7XG4gICAgdmFyIGdldEFycmF5SW5kZXggPSBmdW5jdGlvbiBnZXRBcnJheUluZGV4KGFyciwgaXRlbSkge1xuICAgICAgcmV0dXJuIGFyciAmJiBhcnIubGVuZ3RoID8gXCJcIi5jb25jYXQoYXJyLmluZGV4T2YoaXRlbSkgKyAxLCBcIiBvZiBcIikuY29uY2F0KGFyci5sZW5ndGgpIDogJyc7XG4gICAgfTtcbiAgICBpZiAoY29udGV4dCA9PT0gJ3ZhbHVlJyAmJiBzZWxlY3RWYWx1ZSkge1xuICAgICAgcmV0dXJuIFwidmFsdWUgXCIuY29uY2F0KGxhYmVsLCBcIiBmb2N1c2VkLCBcIikuY29uY2F0KGdldEFycmF5SW5kZXgoc2VsZWN0VmFsdWUsIGZvY3VzZWQpLCBcIi5cIik7XG4gICAgfVxuICAgIGlmIChjb250ZXh0ID09PSAnbWVudScgJiYgaXNBcHBsZURldmljZSkge1xuICAgICAgdmFyIGRpc2FibGVkID0gaXNEaXNhYmxlZCA/ICcgZGlzYWJsZWQnIDogJyc7XG4gICAgICB2YXIgc3RhdHVzID0gXCJcIi5jb25jYXQoaXNTZWxlY3RlZCA/ICcgc2VsZWN0ZWQnIDogJycpLmNvbmNhdChkaXNhYmxlZCk7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQobGFiZWwpLmNvbmNhdChzdGF0dXMsIFwiLCBcIikuY29uY2F0KGdldEFycmF5SW5kZXgob3B0aW9ucywgZm9jdXNlZCksIFwiLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9LFxuICBvbkZpbHRlcjogZnVuY3Rpb24gb25GaWx0ZXIocHJvcHMpIHtcbiAgICB2YXIgaW5wdXRWYWx1ZSA9IHByb3BzLmlucHV0VmFsdWUsXG4gICAgICByZXN1bHRzTWVzc2FnZSA9IHByb3BzLnJlc3VsdHNNZXNzYWdlO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChyZXN1bHRzTWVzc2FnZSkuY29uY2F0KGlucHV0VmFsdWUgPyAnIGZvciBzZWFyY2ggdGVybSAnICsgaW5wdXRWYWx1ZSA6ICcnLCBcIi5cIik7XG4gIH1cbn07XG5cbnZhciBMaXZlUmVnaW9uID0gZnVuY3Rpb24gTGl2ZVJlZ2lvbihwcm9wcykge1xuICB2YXIgYXJpYVNlbGVjdGlvbiA9IHByb3BzLmFyaWFTZWxlY3Rpb24sXG4gICAgZm9jdXNlZE9wdGlvbiA9IHByb3BzLmZvY3VzZWRPcHRpb24sXG4gICAgZm9jdXNlZFZhbHVlID0gcHJvcHMuZm9jdXNlZFZhbHVlLFxuICAgIGZvY3VzYWJsZU9wdGlvbnMgPSBwcm9wcy5mb2N1c2FibGVPcHRpb25zLFxuICAgIGlzRm9jdXNlZCA9IHByb3BzLmlzRm9jdXNlZCxcbiAgICBzZWxlY3RWYWx1ZSA9IHByb3BzLnNlbGVjdFZhbHVlLFxuICAgIHNlbGVjdFByb3BzID0gcHJvcHMuc2VsZWN0UHJvcHMsXG4gICAgaWQgPSBwcm9wcy5pZCxcbiAgICBpc0FwcGxlRGV2aWNlID0gcHJvcHMuaXNBcHBsZURldmljZTtcbiAgdmFyIGFyaWFMaXZlTWVzc2FnZXMgPSBzZWxlY3RQcm9wcy5hcmlhTGl2ZU1lc3NhZ2VzLFxuICAgIGdldE9wdGlvbkxhYmVsID0gc2VsZWN0UHJvcHMuZ2V0T3B0aW9uTGFiZWwsXG4gICAgaW5wdXRWYWx1ZSA9IHNlbGVjdFByb3BzLmlucHV0VmFsdWUsXG4gICAgaXNNdWx0aSA9IHNlbGVjdFByb3BzLmlzTXVsdGksXG4gICAgaXNPcHRpb25EaXNhYmxlZCA9IHNlbGVjdFByb3BzLmlzT3B0aW9uRGlzYWJsZWQsXG4gICAgaXNTZWFyY2hhYmxlID0gc2VsZWN0UHJvcHMuaXNTZWFyY2hhYmxlLFxuICAgIG1lbnVJc09wZW4gPSBzZWxlY3RQcm9wcy5tZW51SXNPcGVuLFxuICAgIG9wdGlvbnMgPSBzZWxlY3RQcm9wcy5vcHRpb25zLFxuICAgIHNjcmVlblJlYWRlclN0YXR1cyA9IHNlbGVjdFByb3BzLnNjcmVlblJlYWRlclN0YXR1cyxcbiAgICB0YWJTZWxlY3RzVmFsdWUgPSBzZWxlY3RQcm9wcy50YWJTZWxlY3RzVmFsdWUsXG4gICAgaXNMb2FkaW5nID0gc2VsZWN0UHJvcHMuaXNMb2FkaW5nO1xuICB2YXIgYXJpYUxhYmVsID0gc2VsZWN0UHJvcHNbJ2FyaWEtbGFiZWwnXTtcbiAgdmFyIGFyaWFMaXZlID0gc2VsZWN0UHJvcHNbJ2FyaWEtbGl2ZSddO1xuXG4gIC8vIFVwZGF0ZSBhcmlhIGxpdmUgbWVzc2FnZSBjb25maWd1cmF0aW9uIHdoZW4gcHJvcCBjaGFuZ2VzXG4gIHZhciBtZXNzYWdlcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGRlZmF1bHRBcmlhTGl2ZU1lc3NhZ2VzKSwgYXJpYUxpdmVNZXNzYWdlcyB8fCB7fSk7XG4gIH0sIFthcmlhTGl2ZU1lc3NhZ2VzXSk7XG5cbiAgLy8gVXBkYXRlIGFyaWEgbGl2ZSBzZWxlY3RlZCBvcHRpb24gd2hlbiBwcm9wIGNoYW5nZXNcbiAgdmFyIGFyaWFTZWxlY3RlZCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciBtZXNzYWdlID0gJyc7XG4gICAgaWYgKGFyaWFTZWxlY3Rpb24gJiYgbWVzc2FnZXMub25DaGFuZ2UpIHtcbiAgICAgIHZhciBvcHRpb24gPSBhcmlhU2VsZWN0aW9uLm9wdGlvbixcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gYXJpYVNlbGVjdGlvbi5vcHRpb25zLFxuICAgICAgICByZW1vdmVkVmFsdWUgPSBhcmlhU2VsZWN0aW9uLnJlbW92ZWRWYWx1ZSxcbiAgICAgICAgcmVtb3ZlZFZhbHVlcyA9IGFyaWFTZWxlY3Rpb24ucmVtb3ZlZFZhbHVlcyxcbiAgICAgICAgdmFsdWUgPSBhcmlhU2VsZWN0aW9uLnZhbHVlO1xuICAgICAgLy8gc2VsZWN0LW9wdGlvbiB3aGVuICFpc011bHRpIGRvZXMgbm90IHJldHVybiBvcHRpb24gc28gd2UgYXNzdW1lIHNlbGVjdGVkIG9wdGlvbiBpcyB2YWx1ZVxuICAgICAgdmFyIGFzT3B0aW9uID0gZnVuY3Rpb24gYXNPcHRpb24odmFsKSB7XG4gICAgICAgIHJldHVybiAhQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsIDogbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIC8vIElmIHRoZXJlIGlzIGp1c3Qgb25lIGl0ZW0gZnJvbSB0aGUgYWN0aW9uIHRoZW4gZ2V0IGl0cyBsYWJlbFxuICAgICAgdmFyIHNlbGVjdGVkID0gcmVtb3ZlZFZhbHVlIHx8IG9wdGlvbiB8fCBhc09wdGlvbih2YWx1ZSk7XG4gICAgICB2YXIgbGFiZWwgPSBzZWxlY3RlZCA/IGdldE9wdGlvbkxhYmVsKHNlbGVjdGVkKSA6ICcnO1xuXG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgaXRlbXMgZnJvbSB0aGUgYWN0aW9uIHRoZW4gcmV0dXJuIGFuIGFycmF5IG9mIGxhYmVsc1xuICAgICAgdmFyIG11bHRpU2VsZWN0ZWQgPSBzZWxlY3RlZE9wdGlvbnMgfHwgcmVtb3ZlZFZhbHVlcyB8fCB1bmRlZmluZWQ7XG4gICAgICB2YXIgbGFiZWxzID0gbXVsdGlTZWxlY3RlZCA/IG11bHRpU2VsZWN0ZWQubWFwKGdldE9wdGlvbkxhYmVsKSA6IFtdO1xuICAgICAgdmFyIG9uQ2hhbmdlUHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgLy8gbXVsdGlTZWxlY3RlZCBpdGVtcyBhcmUgdXN1YWxseSBpdGVtcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHNlbGVjdGVkXG4gICAgICAgIC8vIG9yIHNldCBieSB0aGUgdXNlciBhcyBhIGRlZmF1bHQgdmFsdWUgc28gd2UgYXNzdW1lIHRoZXkgYXJlIG5vdCBkaXNhYmxlZFxuICAgICAgICBpc0Rpc2FibGVkOiBzZWxlY3RlZCAmJiBpc09wdGlvbkRpc2FibGVkKHNlbGVjdGVkLCBzZWxlY3RWYWx1ZSksXG4gICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgbGFiZWxzOiBsYWJlbHNcbiAgICAgIH0sIGFyaWFTZWxlY3Rpb24pO1xuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VzLm9uQ2hhbmdlKG9uQ2hhbmdlUHJvcHMpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSwgW2FyaWFTZWxlY3Rpb24sIG1lc3NhZ2VzLCBpc09wdGlvbkRpc2FibGVkLCBzZWxlY3RWYWx1ZSwgZ2V0T3B0aW9uTGFiZWxdKTtcbiAgdmFyIGFyaWFGb2N1c2VkID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGZvY3VzTXNnID0gJyc7XG4gICAgdmFyIGZvY3VzZWQgPSBmb2N1c2VkT3B0aW9uIHx8IGZvY3VzZWRWYWx1ZTtcbiAgICB2YXIgaXNTZWxlY3RlZCA9ICEhKGZvY3VzZWRPcHRpb24gJiYgc2VsZWN0VmFsdWUgJiYgc2VsZWN0VmFsdWUuaW5jbHVkZXMoZm9jdXNlZE9wdGlvbikpO1xuICAgIGlmIChmb2N1c2VkICYmIG1lc3NhZ2VzLm9uRm9jdXMpIHtcbiAgICAgIHZhciBvbkZvY3VzUHJvcHMgPSB7XG4gICAgICAgIGZvY3VzZWQ6IGZvY3VzZWQsXG4gICAgICAgIGxhYmVsOiBnZXRPcHRpb25MYWJlbChmb2N1c2VkKSxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNPcHRpb25EaXNhYmxlZChmb2N1c2VkLCBzZWxlY3RWYWx1ZSksXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICAgIG9wdGlvbnM6IGZvY3VzYWJsZU9wdGlvbnMsXG4gICAgICAgIGNvbnRleHQ6IGZvY3VzZWQgPT09IGZvY3VzZWRPcHRpb24gPyAnbWVudScgOiAndmFsdWUnLFxuICAgICAgICBzZWxlY3RWYWx1ZTogc2VsZWN0VmFsdWUsXG4gICAgICAgIGlzQXBwbGVEZXZpY2U6IGlzQXBwbGVEZXZpY2VcbiAgICAgIH07XG4gICAgICBmb2N1c01zZyA9IG1lc3NhZ2VzLm9uRm9jdXMob25Gb2N1c1Byb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvY3VzTXNnO1xuICB9LCBbZm9jdXNlZE9wdGlvbiwgZm9jdXNlZFZhbHVlLCBnZXRPcHRpb25MYWJlbCwgaXNPcHRpb25EaXNhYmxlZCwgbWVzc2FnZXMsIGZvY3VzYWJsZU9wdGlvbnMsIHNlbGVjdFZhbHVlLCBpc0FwcGxlRGV2aWNlXSk7XG4gIHZhciBhcmlhUmVzdWx0cyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHRzTXNnID0gJyc7XG4gICAgaWYgKG1lbnVJc09wZW4gJiYgb3B0aW9ucy5sZW5ndGggJiYgIWlzTG9hZGluZyAmJiBtZXNzYWdlcy5vbkZpbHRlcikge1xuICAgICAgdmFyIHJlc3VsdHNNZXNzYWdlID0gc2NyZWVuUmVhZGVyU3RhdHVzKHtcbiAgICAgICAgY291bnQ6IGZvY3VzYWJsZU9wdGlvbnMubGVuZ3RoXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdHNNc2cgPSBtZXNzYWdlcy5vbkZpbHRlcih7XG4gICAgICAgIGlucHV0VmFsdWU6IGlucHV0VmFsdWUsXG4gICAgICAgIHJlc3VsdHNNZXNzYWdlOiByZXN1bHRzTWVzc2FnZVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzTXNnO1xuICB9LCBbZm9jdXNhYmxlT3B0aW9ucywgaW5wdXRWYWx1ZSwgbWVudUlzT3BlbiwgbWVzc2FnZXMsIG9wdGlvbnMsIHNjcmVlblJlYWRlclN0YXR1cywgaXNMb2FkaW5nXSk7XG4gIHZhciBpc0luaXRpYWxGb2N1cyA9IChhcmlhU2VsZWN0aW9uID09PSBudWxsIHx8IGFyaWFTZWxlY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFyaWFTZWxlY3Rpb24uYWN0aW9uKSA9PT0gJ2luaXRpYWwtaW5wdXQtZm9jdXMnO1xuICB2YXIgYXJpYUd1aWRhbmNlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGd1aWRhbmNlTXNnID0gJyc7XG4gICAgaWYgKG1lc3NhZ2VzLmd1aWRhbmNlKSB7XG4gICAgICB2YXIgY29udGV4dCA9IGZvY3VzZWRWYWx1ZSA/ICd2YWx1ZScgOiBtZW51SXNPcGVuID8gJ21lbnUnIDogJ2lucHV0JztcbiAgICAgIGd1aWRhbmNlTXNnID0gbWVzc2FnZXMuZ3VpZGFuY2Uoe1xuICAgICAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbCxcbiAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgaXNEaXNhYmxlZDogZm9jdXNlZE9wdGlvbiAmJiBpc09wdGlvbkRpc2FibGVkKGZvY3VzZWRPcHRpb24sIHNlbGVjdFZhbHVlKSxcbiAgICAgICAgaXNNdWx0aTogaXNNdWx0aSxcbiAgICAgICAgaXNTZWFyY2hhYmxlOiBpc1NlYXJjaGFibGUsXG4gICAgICAgIHRhYlNlbGVjdHNWYWx1ZTogdGFiU2VsZWN0c1ZhbHVlLFxuICAgICAgICBpc0luaXRpYWxGb2N1czogaXNJbml0aWFsRm9jdXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZ3VpZGFuY2VNc2c7XG4gIH0sIFthcmlhTGFiZWwsIGZvY3VzZWRPcHRpb24sIGZvY3VzZWRWYWx1ZSwgaXNNdWx0aSwgaXNPcHRpb25EaXNhYmxlZCwgaXNTZWFyY2hhYmxlLCBtZW51SXNPcGVuLCBtZXNzYWdlcywgc2VsZWN0VmFsdWUsIHRhYlNlbGVjdHNWYWx1ZSwgaXNJbml0aWFsRm9jdXNdKTtcbiAgdmFyIFNjcmVlblJlYWRlclRleHQgPSBqc3goRnJhZ21lbnQsIG51bGwsIGpzeChcInNwYW5cIiwge1xuICAgIGlkOiBcImFyaWEtc2VsZWN0aW9uXCJcbiAgfSwgYXJpYVNlbGVjdGVkKSwganN4KFwic3BhblwiLCB7XG4gICAgaWQ6IFwiYXJpYS1mb2N1c2VkXCJcbiAgfSwgYXJpYUZvY3VzZWQpLCBqc3goXCJzcGFuXCIsIHtcbiAgICBpZDogXCJhcmlhLXJlc3VsdHNcIlxuICB9LCBhcmlhUmVzdWx0cyksIGpzeChcInNwYW5cIiwge1xuICAgIGlkOiBcImFyaWEtZ3VpZGFuY2VcIlxuICB9LCBhcmlhR3VpZGFuY2UpKTtcbiAgcmV0dXJuIGpzeChGcmFnbWVudCwgbnVsbCwganN4KEExMXlUZXh0JDEsIHtcbiAgICBpZDogaWRcbiAgfSwgaXNJbml0aWFsRm9jdXMgJiYgU2NyZWVuUmVhZGVyVGV4dCksIGpzeChBMTF5VGV4dCQxLCB7XG4gICAgXCJhcmlhLWxpdmVcIjogYXJpYUxpdmUsXG4gICAgXCJhcmlhLWF0b21pY1wiOiBcImZhbHNlXCIsXG4gICAgXCJhcmlhLXJlbGV2YW50XCI6IFwiYWRkaXRpb25zIHRleHRcIixcbiAgICByb2xlOiBcImxvZ1wiXG4gIH0sIGlzRm9jdXNlZCAmJiAhaXNJbml0aWFsRm9jdXMgJiYgU2NyZWVuUmVhZGVyVGV4dCkpO1xufTtcbnZhciBMaXZlUmVnaW9uJDEgPSBMaXZlUmVnaW9uO1xuXG52YXIgZGlhY3JpdGljcyA9IFt7XG4gIGJhc2U6ICdBJyxcbiAgbGV0dGVyczogXCJBXFx1MjRCNlxcdUZGMjFcXHhDMFxceEMxXFx4QzJcXHUxRUE2XFx1MUVBNFxcdTFFQUFcXHUxRUE4XFx4QzNcXHUwMTAwXFx1MDEwMlxcdTFFQjBcXHUxRUFFXFx1MUVCNFxcdTFFQjJcXHUwMjI2XFx1MDFFMFxceEM0XFx1MDFERVxcdTFFQTJcXHhDNVxcdTAxRkFcXHUwMUNEXFx1MDIwMFxcdTAyMDJcXHUxRUEwXFx1MUVBQ1xcdTFFQjZcXHUxRTAwXFx1MDEwNFxcdTAyM0FcXHUyQzZGXCJcbn0sIHtcbiAgYmFzZTogJ0FBJyxcbiAgbGV0dGVyczogXCJcXHVBNzMyXCJcbn0sIHtcbiAgYmFzZTogJ0FFJyxcbiAgbGV0dGVyczogXCJcXHhDNlxcdTAxRkNcXHUwMUUyXCJcbn0sIHtcbiAgYmFzZTogJ0FPJyxcbiAgbGV0dGVyczogXCJcXHVBNzM0XCJcbn0sIHtcbiAgYmFzZTogJ0FVJyxcbiAgbGV0dGVyczogXCJcXHVBNzM2XCJcbn0sIHtcbiAgYmFzZTogJ0FWJyxcbiAgbGV0dGVyczogXCJcXHVBNzM4XFx1QTczQVwiXG59LCB7XG4gIGJhc2U6ICdBWScsXG4gIGxldHRlcnM6IFwiXFx1QTczQ1wiXG59LCB7XG4gIGJhc2U6ICdCJyxcbiAgbGV0dGVyczogXCJCXFx1MjRCN1xcdUZGMjJcXHUxRTAyXFx1MUUwNFxcdTFFMDZcXHUwMjQzXFx1MDE4MlxcdTAxODFcIlxufSwge1xuICBiYXNlOiAnQycsXG4gIGxldHRlcnM6IFwiQ1xcdTI0QjhcXHVGRjIzXFx1MDEwNlxcdTAxMDhcXHUwMTBBXFx1MDEwQ1xceEM3XFx1MUUwOFxcdTAxODdcXHUwMjNCXFx1QTczRVwiXG59LCB7XG4gIGJhc2U6ICdEJyxcbiAgbGV0dGVyczogXCJEXFx1MjRCOVxcdUZGMjRcXHUxRTBBXFx1MDEwRVxcdTFFMENcXHUxRTEwXFx1MUUxMlxcdTFFMEVcXHUwMTEwXFx1MDE4QlxcdTAxOEFcXHUwMTg5XFx1QTc3OVwiXG59LCB7XG4gIGJhc2U6ICdEWicsXG4gIGxldHRlcnM6IFwiXFx1MDFGMVxcdTAxQzRcIlxufSwge1xuICBiYXNlOiAnRHonLFxuICBsZXR0ZXJzOiBcIlxcdTAxRjJcXHUwMUM1XCJcbn0sIHtcbiAgYmFzZTogJ0UnLFxuICBsZXR0ZXJzOiBcIkVcXHUyNEJBXFx1RkYyNVxceEM4XFx4QzlcXHhDQVxcdTFFQzBcXHUxRUJFXFx1MUVDNFxcdTFFQzJcXHUxRUJDXFx1MDExMlxcdTFFMTRcXHUxRTE2XFx1MDExNFxcdTAxMTZcXHhDQlxcdTFFQkFcXHUwMTFBXFx1MDIwNFxcdTAyMDZcXHUxRUI4XFx1MUVDNlxcdTAyMjhcXHUxRTFDXFx1MDExOFxcdTFFMThcXHUxRTFBXFx1MDE5MFxcdTAxOEVcIlxufSwge1xuICBiYXNlOiAnRicsXG4gIGxldHRlcnM6IFwiRlxcdTI0QkJcXHVGRjI2XFx1MUUxRVxcdTAxOTFcXHVBNzdCXCJcbn0sIHtcbiAgYmFzZTogJ0cnLFxuICBsZXR0ZXJzOiBcIkdcXHUyNEJDXFx1RkYyN1xcdTAxRjRcXHUwMTFDXFx1MUUyMFxcdTAxMUVcXHUwMTIwXFx1MDFFNlxcdTAxMjJcXHUwMUU0XFx1MDE5M1xcdUE3QTBcXHVBNzdEXFx1QTc3RVwiXG59LCB7XG4gIGJhc2U6ICdIJyxcbiAgbGV0dGVyczogXCJIXFx1MjRCRFxcdUZGMjhcXHUwMTI0XFx1MUUyMlxcdTFFMjZcXHUwMjFFXFx1MUUyNFxcdTFFMjhcXHUxRTJBXFx1MDEyNlxcdTJDNjdcXHUyQzc1XFx1QTc4RFwiXG59LCB7XG4gIGJhc2U6ICdJJyxcbiAgbGV0dGVyczogXCJJXFx1MjRCRVxcdUZGMjlcXHhDQ1xceENEXFx4Q0VcXHUwMTI4XFx1MDEyQVxcdTAxMkNcXHUwMTMwXFx4Q0ZcXHUxRTJFXFx1MUVDOFxcdTAxQ0ZcXHUwMjA4XFx1MDIwQVxcdTFFQ0FcXHUwMTJFXFx1MUUyQ1xcdTAxOTdcIlxufSwge1xuICBiYXNlOiAnSicsXG4gIGxldHRlcnM6IFwiSlxcdTI0QkZcXHVGRjJBXFx1MDEzNFxcdTAyNDhcIlxufSwge1xuICBiYXNlOiAnSycsXG4gIGxldHRlcnM6IFwiS1xcdTI0QzBcXHVGRjJCXFx1MUUzMFxcdTAxRThcXHUxRTMyXFx1MDEzNlxcdTFFMzRcXHUwMTk4XFx1MkM2OVxcdUE3NDBcXHVBNzQyXFx1QTc0NFxcdUE3QTJcIlxufSwge1xuICBiYXNlOiAnTCcsXG4gIGxldHRlcnM6IFwiTFxcdTI0QzFcXHVGRjJDXFx1MDEzRlxcdTAxMzlcXHUwMTNEXFx1MUUzNlxcdTFFMzhcXHUwMTNCXFx1MUUzQ1xcdTFFM0FcXHUwMTQxXFx1MDIzRFxcdTJDNjJcXHUyQzYwXFx1QTc0OFxcdUE3NDZcXHVBNzgwXCJcbn0sIHtcbiAgYmFzZTogJ0xKJyxcbiAgbGV0dGVyczogXCJcXHUwMUM3XCJcbn0sIHtcbiAgYmFzZTogJ0xqJyxcbiAgbGV0dGVyczogXCJcXHUwMUM4XCJcbn0sIHtcbiAgYmFzZTogJ00nLFxuICBsZXR0ZXJzOiBcIk1cXHUyNEMyXFx1RkYyRFxcdTFFM0VcXHUxRTQwXFx1MUU0MlxcdTJDNkVcXHUwMTlDXCJcbn0sIHtcbiAgYmFzZTogJ04nLFxuICBsZXR0ZXJzOiBcIk5cXHUyNEMzXFx1RkYyRVxcdTAxRjhcXHUwMTQzXFx4RDFcXHUxRTQ0XFx1MDE0N1xcdTFFNDZcXHUwMTQ1XFx1MUU0QVxcdTFFNDhcXHUwMjIwXFx1MDE5RFxcdUE3OTBcXHVBN0E0XCJcbn0sIHtcbiAgYmFzZTogJ05KJyxcbiAgbGV0dGVyczogXCJcXHUwMUNBXCJcbn0sIHtcbiAgYmFzZTogJ05qJyxcbiAgbGV0dGVyczogXCJcXHUwMUNCXCJcbn0sIHtcbiAgYmFzZTogJ08nLFxuICBsZXR0ZXJzOiBcIk9cXHUyNEM0XFx1RkYyRlxceEQyXFx4RDNcXHhENFxcdTFFRDJcXHUxRUQwXFx1MUVENlxcdTFFRDRcXHhENVxcdTFFNENcXHUwMjJDXFx1MUU0RVxcdTAxNENcXHUxRTUwXFx1MUU1MlxcdTAxNEVcXHUwMjJFXFx1MDIzMFxceEQ2XFx1MDIyQVxcdTFFQ0VcXHUwMTUwXFx1MDFEMVxcdTAyMENcXHUwMjBFXFx1MDFBMFxcdTFFRENcXHUxRURBXFx1MUVFMFxcdTFFREVcXHUxRUUyXFx1MUVDQ1xcdTFFRDhcXHUwMUVBXFx1MDFFQ1xceEQ4XFx1MDFGRVxcdTAxODZcXHUwMTlGXFx1QTc0QVxcdUE3NENcIlxufSwge1xuICBiYXNlOiAnT0knLFxuICBsZXR0ZXJzOiBcIlxcdTAxQTJcIlxufSwge1xuICBiYXNlOiAnT08nLFxuICBsZXR0ZXJzOiBcIlxcdUE3NEVcIlxufSwge1xuICBiYXNlOiAnT1UnLFxuICBsZXR0ZXJzOiBcIlxcdTAyMjJcIlxufSwge1xuICBiYXNlOiAnUCcsXG4gIGxldHRlcnM6IFwiUFxcdTI0QzVcXHVGRjMwXFx1MUU1NFxcdTFFNTZcXHUwMUE0XFx1MkM2M1xcdUE3NTBcXHVBNzUyXFx1QTc1NFwiXG59LCB7XG4gIGJhc2U6ICdRJyxcbiAgbGV0dGVyczogXCJRXFx1MjRDNlxcdUZGMzFcXHVBNzU2XFx1QTc1OFxcdTAyNEFcIlxufSwge1xuICBiYXNlOiAnUicsXG4gIGxldHRlcnM6IFwiUlxcdTI0QzdcXHVGRjMyXFx1MDE1NFxcdTFFNThcXHUwMTU4XFx1MDIxMFxcdTAyMTJcXHUxRTVBXFx1MUU1Q1xcdTAxNTZcXHUxRTVFXFx1MDI0Q1xcdTJDNjRcXHVBNzVBXFx1QTdBNlxcdUE3ODJcIlxufSwge1xuICBiYXNlOiAnUycsXG4gIGxldHRlcnM6IFwiU1xcdTI0QzhcXHVGRjMzXFx1MUU5RVxcdTAxNUFcXHUxRTY0XFx1MDE1Q1xcdTFFNjBcXHUwMTYwXFx1MUU2NlxcdTFFNjJcXHUxRTY4XFx1MDIxOFxcdTAxNUVcXHUyQzdFXFx1QTdBOFxcdUE3ODRcIlxufSwge1xuICBiYXNlOiAnVCcsXG4gIGxldHRlcnM6IFwiVFxcdTI0QzlcXHVGRjM0XFx1MUU2QVxcdTAxNjRcXHUxRTZDXFx1MDIxQVxcdTAxNjJcXHUxRTcwXFx1MUU2RVxcdTAxNjZcXHUwMUFDXFx1MDFBRVxcdTAyM0VcXHVBNzg2XCJcbn0sIHtcbiAgYmFzZTogJ1RaJyxcbiAgbGV0dGVyczogXCJcXHVBNzI4XCJcbn0sIHtcbiAgYmFzZTogJ1UnLFxuICBsZXR0ZXJzOiBcIlVcXHUyNENBXFx1RkYzNVxceEQ5XFx4REFcXHhEQlxcdTAxNjhcXHUxRTc4XFx1MDE2QVxcdTFFN0FcXHUwMTZDXFx4RENcXHUwMURCXFx1MDFEN1xcdTAxRDVcXHUwMUQ5XFx1MUVFNlxcdTAxNkVcXHUwMTcwXFx1MDFEM1xcdTAyMTRcXHUwMjE2XFx1MDFBRlxcdTFFRUFcXHUxRUU4XFx1MUVFRVxcdTFFRUNcXHUxRUYwXFx1MUVFNFxcdTFFNzJcXHUwMTcyXFx1MUU3NlxcdTFFNzRcXHUwMjQ0XCJcbn0sIHtcbiAgYmFzZTogJ1YnLFxuICBsZXR0ZXJzOiBcIlZcXHUyNENCXFx1RkYzNlxcdTFFN0NcXHUxRTdFXFx1MDFCMlxcdUE3NUVcXHUwMjQ1XCJcbn0sIHtcbiAgYmFzZTogJ1ZZJyxcbiAgbGV0dGVyczogXCJcXHVBNzYwXCJcbn0sIHtcbiAgYmFzZTogJ1cnLFxuICBsZXR0ZXJzOiBcIldcXHUyNENDXFx1RkYzN1xcdTFFODBcXHUxRTgyXFx1MDE3NFxcdTFFODZcXHUxRTg0XFx1MUU4OFxcdTJDNzJcIlxufSwge1xuICBiYXNlOiAnWCcsXG4gIGxldHRlcnM6IFwiWFxcdTI0Q0RcXHVGRjM4XFx1MUU4QVxcdTFFOENcIlxufSwge1xuICBiYXNlOiAnWScsXG4gIGxldHRlcnM6IFwiWVxcdTI0Q0VcXHVGRjM5XFx1MUVGMlxceEREXFx1MDE3NlxcdTFFRjhcXHUwMjMyXFx1MUU4RVxcdTAxNzhcXHUxRUY2XFx1MUVGNFxcdTAxQjNcXHUwMjRFXFx1MUVGRVwiXG59LCB7XG4gIGJhc2U6ICdaJyxcbiAgbGV0dGVyczogXCJaXFx1MjRDRlxcdUZGM0FcXHUwMTc5XFx1MUU5MFxcdTAxN0JcXHUwMTdEXFx1MUU5MlxcdTFFOTRcXHUwMUI1XFx1MDIyNFxcdTJDN0ZcXHUyQzZCXFx1QTc2MlwiXG59LCB7XG4gIGJhc2U6ICdhJyxcbiAgbGV0dGVyczogXCJhXFx1MjREMFxcdUZGNDFcXHUxRTlBXFx4RTBcXHhFMVxceEUyXFx1MUVBN1xcdTFFQTVcXHUxRUFCXFx1MUVBOVxceEUzXFx1MDEwMVxcdTAxMDNcXHUxRUIxXFx1MUVBRlxcdTFFQjVcXHUxRUIzXFx1MDIyN1xcdTAxRTFcXHhFNFxcdTAxREZcXHUxRUEzXFx4RTVcXHUwMUZCXFx1MDFDRVxcdTAyMDFcXHUwMjAzXFx1MUVBMVxcdTFFQURcXHUxRUI3XFx1MUUwMVxcdTAxMDVcXHUyQzY1XFx1MDI1MFwiXG59LCB7XG4gIGJhc2U6ICdhYScsXG4gIGxldHRlcnM6IFwiXFx1QTczM1wiXG59LCB7XG4gIGJhc2U6ICdhZScsXG4gIGxldHRlcnM6IFwiXFx4RTZcXHUwMUZEXFx1MDFFM1wiXG59LCB7XG4gIGJhc2U6ICdhbycsXG4gIGxldHRlcnM6IFwiXFx1QTczNVwiXG59LCB7XG4gIGJhc2U6ICdhdScsXG4gIGxldHRlcnM6IFwiXFx1QTczN1wiXG59LCB7XG4gIGJhc2U6ICdhdicsXG4gIGxldHRlcnM6IFwiXFx1QTczOVxcdUE3M0JcIlxufSwge1xuICBiYXNlOiAnYXknLFxuICBsZXR0ZXJzOiBcIlxcdUE3M0RcIlxufSwge1xuICBiYXNlOiAnYicsXG4gIGxldHRlcnM6IFwiYlxcdTI0RDFcXHVGRjQyXFx1MUUwM1xcdTFFMDVcXHUxRTA3XFx1MDE4MFxcdTAxODNcXHUwMjUzXCJcbn0sIHtcbiAgYmFzZTogJ2MnLFxuICBsZXR0ZXJzOiBcImNcXHUyNEQyXFx1RkY0M1xcdTAxMDdcXHUwMTA5XFx1MDEwQlxcdTAxMERcXHhFN1xcdTFFMDlcXHUwMTg4XFx1MDIzQ1xcdUE3M0ZcXHUyMTg0XCJcbn0sIHtcbiAgYmFzZTogJ2QnLFxuICBsZXR0ZXJzOiBcImRcXHUyNEQzXFx1RkY0NFxcdTFFMEJcXHUwMTBGXFx1MUUwRFxcdTFFMTFcXHUxRTEzXFx1MUUwRlxcdTAxMTFcXHUwMThDXFx1MDI1NlxcdTAyNTdcXHVBNzdBXCJcbn0sIHtcbiAgYmFzZTogJ2R6JyxcbiAgbGV0dGVyczogXCJcXHUwMUYzXFx1MDFDNlwiXG59LCB7XG4gIGJhc2U6ICdlJyxcbiAgbGV0dGVyczogXCJlXFx1MjRENFxcdUZGNDVcXHhFOFxceEU5XFx4RUFcXHUxRUMxXFx1MUVCRlxcdTFFQzVcXHUxRUMzXFx1MUVCRFxcdTAxMTNcXHUxRTE1XFx1MUUxN1xcdTAxMTVcXHUwMTE3XFx4RUJcXHUxRUJCXFx1MDExQlxcdTAyMDVcXHUwMjA3XFx1MUVCOVxcdTFFQzdcXHUwMjI5XFx1MUUxRFxcdTAxMTlcXHUxRTE5XFx1MUUxQlxcdTAyNDdcXHUwMjVCXFx1MDFERFwiXG59LCB7XG4gIGJhc2U6ICdmJyxcbiAgbGV0dGVyczogXCJmXFx1MjRENVxcdUZGNDZcXHUxRTFGXFx1MDE5MlxcdUE3N0NcIlxufSwge1xuICBiYXNlOiAnZycsXG4gIGxldHRlcnM6IFwiZ1xcdTI0RDZcXHVGRjQ3XFx1MDFGNVxcdTAxMURcXHUxRTIxXFx1MDExRlxcdTAxMjFcXHUwMUU3XFx1MDEyM1xcdTAxRTVcXHUwMjYwXFx1QTdBMVxcdTFENzlcXHVBNzdGXCJcbn0sIHtcbiAgYmFzZTogJ2gnLFxuICBsZXR0ZXJzOiBcImhcXHUyNEQ3XFx1RkY0OFxcdTAxMjVcXHUxRTIzXFx1MUUyN1xcdTAyMUZcXHUxRTI1XFx1MUUyOVxcdTFFMkJcXHUxRTk2XFx1MDEyN1xcdTJDNjhcXHUyQzc2XFx1MDI2NVwiXG59LCB7XG4gIGJhc2U6ICdodicsXG4gIGxldHRlcnM6IFwiXFx1MDE5NVwiXG59LCB7XG4gIGJhc2U6ICdpJyxcbiAgbGV0dGVyczogXCJpXFx1MjREOFxcdUZGNDlcXHhFQ1xceEVEXFx4RUVcXHUwMTI5XFx1MDEyQlxcdTAxMkRcXHhFRlxcdTFFMkZcXHUxRUM5XFx1MDFEMFxcdTAyMDlcXHUwMjBCXFx1MUVDQlxcdTAxMkZcXHUxRTJEXFx1MDI2OFxcdTAxMzFcIlxufSwge1xuICBiYXNlOiAnaicsXG4gIGxldHRlcnM6IFwialxcdTI0RDlcXHVGRjRBXFx1MDEzNVxcdTAxRjBcXHUwMjQ5XCJcbn0sIHtcbiAgYmFzZTogJ2snLFxuICBsZXR0ZXJzOiBcImtcXHUyNERBXFx1RkY0QlxcdTFFMzFcXHUwMUU5XFx1MUUzM1xcdTAxMzdcXHUxRTM1XFx1MDE5OVxcdTJDNkFcXHVBNzQxXFx1QTc0M1xcdUE3NDVcXHVBN0EzXCJcbn0sIHtcbiAgYmFzZTogJ2wnLFxuICBsZXR0ZXJzOiBcImxcXHUyNERCXFx1RkY0Q1xcdTAxNDBcXHUwMTNBXFx1MDEzRVxcdTFFMzdcXHUxRTM5XFx1MDEzQ1xcdTFFM0RcXHUxRTNCXFx1MDE3RlxcdTAxNDJcXHUwMTlBXFx1MDI2QlxcdTJDNjFcXHVBNzQ5XFx1QTc4MVxcdUE3NDdcIlxufSwge1xuICBiYXNlOiAnbGonLFxuICBsZXR0ZXJzOiBcIlxcdTAxQzlcIlxufSwge1xuICBiYXNlOiAnbScsXG4gIGxldHRlcnM6IFwibVxcdTI0RENcXHVGRjREXFx1MUUzRlxcdTFFNDFcXHUxRTQzXFx1MDI3MVxcdTAyNkZcIlxufSwge1xuICBiYXNlOiAnbicsXG4gIGxldHRlcnM6IFwiblxcdTI0RERcXHVGRjRFXFx1MDFGOVxcdTAxNDRcXHhGMVxcdTFFNDVcXHUwMTQ4XFx1MUU0N1xcdTAxNDZcXHUxRTRCXFx1MUU0OVxcdTAxOUVcXHUwMjcyXFx1MDE0OVxcdUE3OTFcXHVBN0E1XCJcbn0sIHtcbiAgYmFzZTogJ25qJyxcbiAgbGV0dGVyczogXCJcXHUwMUNDXCJcbn0sIHtcbiAgYmFzZTogJ28nLFxuICBsZXR0ZXJzOiBcIm9cXHUyNERFXFx1RkY0RlxceEYyXFx4RjNcXHhGNFxcdTFFRDNcXHUxRUQxXFx1MUVEN1xcdTFFRDVcXHhGNVxcdTFFNERcXHUwMjJEXFx1MUU0RlxcdTAxNERcXHUxRTUxXFx1MUU1M1xcdTAxNEZcXHUwMjJGXFx1MDIzMVxceEY2XFx1MDIyQlxcdTFFQ0ZcXHUwMTUxXFx1MDFEMlxcdTAyMERcXHUwMjBGXFx1MDFBMVxcdTFFRERcXHUxRURCXFx1MUVFMVxcdTFFREZcXHUxRUUzXFx1MUVDRFxcdTFFRDlcXHUwMUVCXFx1MDFFRFxceEY4XFx1MDFGRlxcdTAyNTRcXHVBNzRCXFx1QTc0RFxcdTAyNzVcIlxufSwge1xuICBiYXNlOiAnb2knLFxuICBsZXR0ZXJzOiBcIlxcdTAxQTNcIlxufSwge1xuICBiYXNlOiAnb3UnLFxuICBsZXR0ZXJzOiBcIlxcdTAyMjNcIlxufSwge1xuICBiYXNlOiAnb28nLFxuICBsZXR0ZXJzOiBcIlxcdUE3NEZcIlxufSwge1xuICBiYXNlOiAncCcsXG4gIGxldHRlcnM6IFwicFxcdTI0REZcXHVGRjUwXFx1MUU1NVxcdTFFNTdcXHUwMUE1XFx1MUQ3RFxcdUE3NTFcXHVBNzUzXFx1QTc1NVwiXG59LCB7XG4gIGJhc2U6ICdxJyxcbiAgbGV0dGVyczogXCJxXFx1MjRFMFxcdUZGNTFcXHUwMjRCXFx1QTc1N1xcdUE3NTlcIlxufSwge1xuICBiYXNlOiAncicsXG4gIGxldHRlcnM6IFwiclxcdTI0RTFcXHVGRjUyXFx1MDE1NVxcdTFFNTlcXHUwMTU5XFx1MDIxMVxcdTAyMTNcXHUxRTVCXFx1MUU1RFxcdTAxNTdcXHUxRTVGXFx1MDI0RFxcdTAyN0RcXHVBNzVCXFx1QTdBN1xcdUE3ODNcIlxufSwge1xuICBiYXNlOiAncycsXG4gIGxldHRlcnM6IFwic1xcdTI0RTJcXHVGRjUzXFx4REZcXHUwMTVCXFx1MUU2NVxcdTAxNURcXHUxRTYxXFx1MDE2MVxcdTFFNjdcXHUxRTYzXFx1MUU2OVxcdTAyMTlcXHUwMTVGXFx1MDIzRlxcdUE3QTlcXHVBNzg1XFx1MUU5QlwiXG59LCB7XG4gIGJhc2U6ICd0JyxcbiAgbGV0dGVyczogXCJ0XFx1MjRFM1xcdUZGNTRcXHUxRTZCXFx1MUU5N1xcdTAxNjVcXHUxRTZEXFx1MDIxQlxcdTAxNjNcXHUxRTcxXFx1MUU2RlxcdTAxNjdcXHUwMUFEXFx1MDI4OFxcdTJDNjZcXHVBNzg3XCJcbn0sIHtcbiAgYmFzZTogJ3R6JyxcbiAgbGV0dGVyczogXCJcXHVBNzI5XCJcbn0sIHtcbiAgYmFzZTogJ3UnLFxuICBsZXR0ZXJzOiBcInVcXHUyNEU0XFx1RkY1NVxceEY5XFx4RkFcXHhGQlxcdTAxNjlcXHUxRTc5XFx1MDE2QlxcdTFFN0JcXHUwMTZEXFx4RkNcXHUwMURDXFx1MDFEOFxcdTAxRDZcXHUwMURBXFx1MUVFN1xcdTAxNkZcXHUwMTcxXFx1MDFENFxcdTAyMTVcXHUwMjE3XFx1MDFCMFxcdTFFRUJcXHUxRUU5XFx1MUVFRlxcdTFFRURcXHUxRUYxXFx1MUVFNVxcdTFFNzNcXHUwMTczXFx1MUU3N1xcdTFFNzVcXHUwMjg5XCJcbn0sIHtcbiAgYmFzZTogJ3YnLFxuICBsZXR0ZXJzOiBcInZcXHUyNEU1XFx1RkY1NlxcdTFFN0RcXHUxRTdGXFx1MDI4QlxcdUE3NUZcXHUwMjhDXCJcbn0sIHtcbiAgYmFzZTogJ3Z5JyxcbiAgbGV0dGVyczogXCJcXHVBNzYxXCJcbn0sIHtcbiAgYmFzZTogJ3cnLFxuICBsZXR0ZXJzOiBcIndcXHUyNEU2XFx1RkY1N1xcdTFFODFcXHUxRTgzXFx1MDE3NVxcdTFFODdcXHUxRTg1XFx1MUU5OFxcdTFFODlcXHUyQzczXCJcbn0sIHtcbiAgYmFzZTogJ3gnLFxuICBsZXR0ZXJzOiBcInhcXHUyNEU3XFx1RkY1OFxcdTFFOEJcXHUxRThEXCJcbn0sIHtcbiAgYmFzZTogJ3knLFxuICBsZXR0ZXJzOiBcInlcXHUyNEU4XFx1RkY1OVxcdTFFRjNcXHhGRFxcdTAxNzdcXHUxRUY5XFx1MDIzM1xcdTFFOEZcXHhGRlxcdTFFRjdcXHUxRTk5XFx1MUVGNVxcdTAxQjRcXHUwMjRGXFx1MUVGRlwiXG59LCB7XG4gIGJhc2U6ICd6JyxcbiAgbGV0dGVyczogXCJ6XFx1MjRFOVxcdUZGNUFcXHUwMTdBXFx1MUU5MVxcdTAxN0NcXHUwMTdFXFx1MUU5M1xcdTFFOTVcXHUwMUI2XFx1MDIyNVxcdTAyNDBcXHUyQzZDXFx1QTc2M1wiXG59XTtcbnZhciBhbnlEaWFjcml0aWMgPSBuZXcgUmVnRXhwKCdbJyArIGRpYWNyaXRpY3MubWFwKGZ1bmN0aW9uIChkKSB7XG4gIHJldHVybiBkLmxldHRlcnM7XG59KS5qb2luKCcnKSArICddJywgJ2cnKTtcbnZhciBkaWFjcml0aWNUb0Jhc2UgPSB7fTtcbmZvciAodmFyIGkgPSAwOyBpIDwgZGlhY3JpdGljcy5sZW5ndGg7IGkrKykge1xuICB2YXIgZGlhY3JpdGljID0gZGlhY3JpdGljc1tpXTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBkaWFjcml0aWMubGV0dGVycy5sZW5ndGg7IGorKykge1xuICAgIGRpYWNyaXRpY1RvQmFzZVtkaWFjcml0aWMubGV0dGVyc1tqXV0gPSBkaWFjcml0aWMuYmFzZTtcbiAgfVxufVxudmFyIHN0cmlwRGlhY3JpdGljcyA9IGZ1bmN0aW9uIHN0cmlwRGlhY3JpdGljcyhzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGFueURpYWNyaXRpYywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgcmV0dXJuIGRpYWNyaXRpY1RvQmFzZVttYXRjaF07XG4gIH0pO1xufTtcblxudmFyIG1lbW9pemVkU3RyaXBEaWFjcml0aWNzRm9ySW5wdXQgPSBtZW1vaXplT25lKHN0cmlwRGlhY3JpdGljcyk7XG52YXIgdHJpbVN0cmluZyA9IGZ1bmN0aW9uIHRyaW1TdHJpbmcoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xufTtcbnZhciBkZWZhdWx0U3RyaW5naWZ5ID0gZnVuY3Rpb24gZGVmYXVsdFN0cmluZ2lmeShvcHRpb24pIHtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KG9wdGlvbi5sYWJlbCwgXCIgXCIpLmNvbmNhdChvcHRpb24udmFsdWUpO1xufTtcbnZhciBjcmVhdGVGaWx0ZXIgPSBmdW5jdGlvbiBjcmVhdGVGaWx0ZXIoY29uZmlnKSB7XG4gIHJldHVybiBmdW5jdGlvbiAob3B0aW9uLCByYXdJbnB1dCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgIGlmIChvcHRpb24uZGF0YS5fX2lzTmV3X18pIHJldHVybiB0cnVlO1xuICAgIHZhciBfaWdub3JlQ2FzZSRpZ25vcmVBY2MgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgaWdub3JlQ2FzZTogdHJ1ZSxcbiAgICAgICAgaWdub3JlQWNjZW50czogdHJ1ZSxcbiAgICAgICAgc3RyaW5naWZ5OiBkZWZhdWx0U3RyaW5naWZ5LFxuICAgICAgICB0cmltOiB0cnVlLFxuICAgICAgICBtYXRjaEZyb206ICdhbnknXG4gICAgICB9LCBjb25maWcpLFxuICAgICAgaWdub3JlQ2FzZSA9IF9pZ25vcmVDYXNlJGlnbm9yZUFjYy5pZ25vcmVDYXNlLFxuICAgICAgaWdub3JlQWNjZW50cyA9IF9pZ25vcmVDYXNlJGlnbm9yZUFjYy5pZ25vcmVBY2NlbnRzLFxuICAgICAgc3RyaW5naWZ5ID0gX2lnbm9yZUNhc2UkaWdub3JlQWNjLnN0cmluZ2lmeSxcbiAgICAgIHRyaW0gPSBfaWdub3JlQ2FzZSRpZ25vcmVBY2MudHJpbSxcbiAgICAgIG1hdGNoRnJvbSA9IF9pZ25vcmVDYXNlJGlnbm9yZUFjYy5tYXRjaEZyb207XG4gICAgdmFyIGlucHV0ID0gdHJpbSA/IHRyaW1TdHJpbmcocmF3SW5wdXQpIDogcmF3SW5wdXQ7XG4gICAgdmFyIGNhbmRpZGF0ZSA9IHRyaW0gPyB0cmltU3RyaW5nKHN0cmluZ2lmeShvcHRpb24pKSA6IHN0cmluZ2lmeShvcHRpb24pO1xuICAgIGlmIChpZ25vcmVDYXNlKSB7XG4gICAgICBpbnB1dCA9IGlucHV0LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKGlnbm9yZUFjY2VudHMpIHtcbiAgICAgIGlucHV0ID0gbWVtb2l6ZWRTdHJpcERpYWNyaXRpY3NGb3JJbnB1dChpbnB1dCk7XG4gICAgICBjYW5kaWRhdGUgPSBzdHJpcERpYWNyaXRpY3MoY2FuZGlkYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoRnJvbSA9PT0gJ3N0YXJ0JyA/IGNhbmRpZGF0ZS5zdWJzdHIoMCwgaW5wdXQubGVuZ3RoKSA9PT0gaW5wdXQgOiBjYW5kaWRhdGUuaW5kZXhPZihpbnB1dCkgPiAtMTtcbiAgfTtcbn07XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJpbm5lclJlZlwiXTtcbmZ1bmN0aW9uIER1bW15SW5wdXQoX3JlZikge1xuICB2YXIgaW5uZXJSZWYgPSBfcmVmLmlubmVyUmVmLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIC8vIFJlbW92ZSBhbmltYXRpb24gcHJvcHMgbm90IG1lYW50IGZvciBIVE1MIGVsZW1lbnRzXG4gIHZhciBmaWx0ZXJlZFByb3BzID0gcmVtb3ZlUHJvcHMocHJvcHMsICdvbkV4aXRlZCcsICdpbicsICdlbnRlcicsICdleGl0JywgJ2FwcGVhcicpO1xuICByZXR1cm4ganN4KFwiaW5wdXRcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogaW5uZXJSZWZcbiAgfSwgZmlsdGVyZWRQcm9wcywge1xuICAgIGNzczogLyojX19QVVJFX18qL2Nzcyh7XG4gICAgICBsYWJlbDogJ2R1bW15SW5wdXQnLFxuICAgICAgLy8gZ2V0IHJpZCBvZiBhbnkgZGVmYXVsdCBzdHlsZXNcbiAgICAgIGJhY2tncm91bmQ6IDAsXG4gICAgICBib3JkZXI6IDAsXG4gICAgICAvLyBpbXBvcnRhbnQhIHRoaXMgaGlkZXMgdGhlIGZsYXNoaW5nIGN1cnNvclxuICAgICAgY2FyZXRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgIGZvbnRTaXplOiAnaW5oZXJpdCcsXG4gICAgICBncmlkQXJlYTogJzEgLyAxIC8gMiAvIDMnLFxuICAgICAgb3V0bGluZTogMCxcbiAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAvLyBpbXBvcnRhbnQhIHdpdGhvdXQgYHdpZHRoYCBicm93c2VycyB3b24ndCBhbGxvdyBmb2N1c1xuICAgICAgd2lkdGg6IDEsXG4gICAgICAvLyByZW1vdmUgY3Vyc29yIG9uIGRlc2t0b3BcbiAgICAgIGNvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgLy8gcmVtb3ZlIGN1cnNvciBvbiBtb2JpbGUgd2hpbHN0IG1haW50YWluaW5nIFwic2Nyb2xsIGludG8gdmlld1wiIGJlaGF2aW91clxuICAgICAgbGVmdDogLTEwMCxcbiAgICAgIG9wYWNpdHk6IDAsXG4gICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKC4wMSknXG4gICAgfSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiO2xhYmVsOkR1bW15SW5wdXQ7XCIsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklrUjFiVzE1U1c1d2RYUXVkSE40SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVhsQ1RTSXNJbVpwYkdVaU9pSkVkVzF0ZVVsdWNIVjBMblJ6ZUNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLaUJBYW5ONElHcHplQ0FxTDF4dWFXMXdiM0owSUhzZ1VtVm1JSDBnWm5KdmJTQW5jbVZoWTNRbk8xeHVhVzF3YjNKMElIc2dhbk40SUgwZ1puSnZiU0FuUUdWdGIzUnBiMjR2Y21WaFkzUW5PMXh1YVcxd2IzSjBJSHNnY21WdGIzWmxVSEp2Y0hNZ2ZTQm1jbTl0SUNjdUxpOTFkR2xzY3ljN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHWjFibU4wYVc5dUlFUjFiVzE1U1c1d2RYUW9lMXh1SUNCcGJtNWxjbEpsWml4Y2JpQWdMaTR1Y0hKdmNITmNibjA2SUVwVFdDNUpiblJ5YVc1emFXTkZiR1Z0Wlc1MGMxc25hVzV3ZFhRblhTQW1JSHRjYmlBZ2NtVmhaRzl1YkhrZ2FXNXVaWEpTWldZNklGSmxaanhJVkUxTVNXNXdkWFJGYkdWdFpXNTBQanRjYm4wcElIdGNiaUFnTHk4Z1VtVnRiM1psSUdGdWFXMWhkR2x2YmlCd2NtOXdjeUJ1YjNRZ2JXVmhiblFnWm05eUlFaFVUVXdnWld4bGJXVnVkSE5jYmlBZ1kyOXVjM1FnWm1sc2RHVnlaV1JRY205d2N5QTlJSEpsYlc5MlpWQnliM0J6S0Z4dUlDQWdJSEJ5YjNCekxGeHVJQ0FnSUNkdmJrVjRhWFJsWkNjc1hHNGdJQ0FnSjJsdUp5eGNiaUFnSUNBblpXNTBaWEluTEZ4dUlDQWdJQ2RsZUdsMEp5eGNiaUFnSUNBbllYQndaV0Z5SjF4dUlDQXBPMXh1WEc0Z0lISmxkSFZ5YmlBb1hHNGdJQ0FnUEdsdWNIVjBYRzRnSUNBZ0lDQnlaV1k5ZTJsdWJtVnlVbVZtZlZ4dUlDQWdJQ0FnZXk0dUxtWnBiSFJsY21Wa1VISnZjSE45WEc0Z0lDQWdJQ0JqYzNNOWUzdGNiaUFnSUNBZ0lDQWdiR0ZpWld3NklDZGtkVzF0ZVVsdWNIVjBKeXhjYmlBZ0lDQWdJQ0FnTHk4Z1oyVjBJSEpwWkNCdlppQmhibmtnWkdWbVlYVnNkQ0J6ZEhsc1pYTmNiaUFnSUNBZ0lDQWdZbUZqYTJkeWIzVnVaRG9nTUN4Y2JpQWdJQ0FnSUNBZ1ltOXlaR1Z5T2lBd0xGeHVJQ0FnSUNBZ0lDQXZMeUJwYlhCdmNuUmhiblFoSUhSb2FYTWdhR2xrWlhNZ2RHaGxJR1pzWVhOb2FXNW5JR04xY25OdmNseHVJQ0FnSUNBZ0lDQmpZWEpsZEVOdmJHOXlPaUFuZEhKaGJuTndZWEpsYm5RbkxGeHVJQ0FnSUNBZ0lDQm1iMjUwVTJsNlpUb2dKMmx1YUdWeWFYUW5MRnh1SUNBZ0lDQWdJQ0JuY21sa1FYSmxZVG9nSnpFZ0x5QXhJQzhnTWlBdklETW5MRnh1SUNBZ0lDQWdJQ0J2ZFhSc2FXNWxPaUF3TEZ4dUlDQWdJQ0FnSUNCd1lXUmthVzVuT2lBd0xGeHVJQ0FnSUNBZ0lDQXZMeUJwYlhCdmNuUmhiblFoSUhkcGRHaHZkWFFnWUhkcFpIUm9ZQ0JpY205M2MyVnljeUIzYjI0bmRDQmhiR3h2ZHlCbWIyTjFjMXh1SUNBZ0lDQWdJQ0IzYVdSMGFEb2dNU3hjYmx4dUlDQWdJQ0FnSUNBdkx5QnlaVzF2ZG1VZ1kzVnljMjl5SUc5dUlHUmxjMnQwYjNCY2JpQWdJQ0FnSUNBZ1kyOXNiM0k2SUNkMGNtRnVjM0JoY21WdWRDY3NYRzVjYmlBZ0lDQWdJQ0FnTHk4Z2NtVnRiM1psSUdOMWNuTnZjaUJ2YmlCdGIySnBiR1VnZDJocGJITjBJRzFoYVc1MFlXbHVhVzVuSUZ3aWMyTnliMnhzSUdsdWRHOGdkbWxsZDF3aUlHSmxhR0YyYVc5MWNseHVJQ0FnSUNBZ0lDQnNaV1owT2lBdE1UQXdMRnh1SUNBZ0lDQWdJQ0J2Y0dGamFYUjVPaUF3TEZ4dUlDQWdJQ0FnSUNCd2IzTnBkR2x2YmpvZ0ozSmxiR0YwYVhabEp5eGNiaUFnSUNBZ0lDQWdkSEpoYm5ObWIzSnRPaUFuYzJOaGJHVW9MakF4S1Njc1hHNGdJQ0FnSUNCOWZWeHVJQ0FnSUM4K1hHNGdJQ2s3WEc1OVhHNGlYWDA9ICovXCIpXG4gIH0pKTtcbn1cblxudmFyIGNhbmNlbFNjcm9sbCA9IGZ1bmN0aW9uIGNhbmNlbFNjcm9sbChldmVudCkge1xuICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59O1xuZnVuY3Rpb24gdXNlU2Nyb2xsQ2FwdHVyZShfcmVmKSB7XG4gIHZhciBpc0VuYWJsZWQgPSBfcmVmLmlzRW5hYmxlZCxcbiAgICBvbkJvdHRvbUFycml2ZSA9IF9yZWYub25Cb3R0b21BcnJpdmUsXG4gICAgb25Cb3R0b21MZWF2ZSA9IF9yZWYub25Cb3R0b21MZWF2ZSxcbiAgICBvblRvcEFycml2ZSA9IF9yZWYub25Ub3BBcnJpdmUsXG4gICAgb25Ub3BMZWF2ZSA9IF9yZWYub25Ub3BMZWF2ZTtcbiAgdmFyIGlzQm90dG9tID0gdXNlUmVmKGZhbHNlKTtcbiAgdmFyIGlzVG9wID0gdXNlUmVmKGZhbHNlKTtcbiAgdmFyIHRvdWNoU3RhcnQgPSB1c2VSZWYoMCk7XG4gIHZhciBzY3JvbGxUYXJnZXQgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBoYW5kbGVFdmVudERlbHRhID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50LCBkZWx0YSkge1xuICAgIGlmIChzY3JvbGxUYXJnZXQuY3VycmVudCA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIHZhciBfc2Nyb2xsVGFyZ2V0JGN1cnJlbnQgPSBzY3JvbGxUYXJnZXQuY3VycmVudCxcbiAgICAgIHNjcm9sbFRvcCA9IF9zY3JvbGxUYXJnZXQkY3VycmVudC5zY3JvbGxUb3AsXG4gICAgICBzY3JvbGxIZWlnaHQgPSBfc2Nyb2xsVGFyZ2V0JGN1cnJlbnQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgY2xpZW50SGVpZ2h0ID0gX3Njcm9sbFRhcmdldCRjdXJyZW50LmNsaWVudEhlaWdodDtcbiAgICB2YXIgdGFyZ2V0ID0gc2Nyb2xsVGFyZ2V0LmN1cnJlbnQ7XG4gICAgdmFyIGlzRGVsdGFQb3NpdGl2ZSA9IGRlbHRhID4gMDtcbiAgICB2YXIgYXZhaWxhYmxlU2Nyb2xsID0gc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0IC0gc2Nyb2xsVG9wO1xuICAgIHZhciBzaG91bGRDYW5jZWxTY3JvbGwgPSBmYWxzZTtcblxuICAgIC8vIHJlc2V0IGJvdHRvbS90b3AgZmxhZ3NcbiAgICBpZiAoYXZhaWxhYmxlU2Nyb2xsID4gZGVsdGEgJiYgaXNCb3R0b20uY3VycmVudCkge1xuICAgICAgaWYgKG9uQm90dG9tTGVhdmUpIG9uQm90dG9tTGVhdmUoZXZlbnQpO1xuICAgICAgaXNCb3R0b20uY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXNEZWx0YVBvc2l0aXZlICYmIGlzVG9wLmN1cnJlbnQpIHtcbiAgICAgIGlmIChvblRvcExlYXZlKSBvblRvcExlYXZlKGV2ZW50KTtcbiAgICAgIGlzVG9wLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBib3R0b20gbGltaXRcbiAgICBpZiAoaXNEZWx0YVBvc2l0aXZlICYmIGRlbHRhID4gYXZhaWxhYmxlU2Nyb2xsKSB7XG4gICAgICBpZiAob25Cb3R0b21BcnJpdmUgJiYgIWlzQm90dG9tLmN1cnJlbnQpIHtcbiAgICAgICAgb25Cb3R0b21BcnJpdmUoZXZlbnQpO1xuICAgICAgfVxuICAgICAgdGFyZ2V0LnNjcm9sbFRvcCA9IHNjcm9sbEhlaWdodDtcbiAgICAgIHNob3VsZENhbmNlbFNjcm9sbCA9IHRydWU7XG4gICAgICBpc0JvdHRvbS5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgLy8gdG9wIGxpbWl0XG4gICAgfSBlbHNlIGlmICghaXNEZWx0YVBvc2l0aXZlICYmIC1kZWx0YSA+IHNjcm9sbFRvcCkge1xuICAgICAgaWYgKG9uVG9wQXJyaXZlICYmICFpc1RvcC5jdXJyZW50KSB7XG4gICAgICAgIG9uVG9wQXJyaXZlKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIHRhcmdldC5zY3JvbGxUb3AgPSAwO1xuICAgICAgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gdHJ1ZTtcbiAgICAgIGlzVG9wLmN1cnJlbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGNhbmNlbCBzY3JvbGxcbiAgICBpZiAoc2hvdWxkQ2FuY2VsU2Nyb2xsKSB7XG4gICAgICBjYW5jZWxTY3JvbGwoZXZlbnQpO1xuICAgIH1cbiAgfSwgW29uQm90dG9tQXJyaXZlLCBvbkJvdHRvbUxlYXZlLCBvblRvcEFycml2ZSwgb25Ub3BMZWF2ZV0pO1xuICB2YXIgb25XaGVlbCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgIGhhbmRsZUV2ZW50RGVsdGEoZXZlbnQsIGV2ZW50LmRlbHRhWSk7XG4gIH0sIFtoYW5kbGVFdmVudERlbHRhXSk7XG4gIHZhciBvblRvdWNoU3RhcnQgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBzZXQgdG91Y2ggc3RhcnQgc28gd2UgY2FuIGNhbGN1bGF0ZSB0b3VjaG1vdmUgZGVsdGFcbiAgICB0b3VjaFN0YXJ0LmN1cnJlbnQgPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICB9LCBbXSk7XG4gIHZhciBvblRvdWNoTW92ZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciBkZWx0YVkgPSB0b3VjaFN0YXJ0LmN1cnJlbnQgLSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICAgIGhhbmRsZUV2ZW50RGVsdGEoZXZlbnQsIGRlbHRhWSk7XG4gIH0sIFtoYW5kbGVFdmVudERlbHRhXSk7XG4gIHZhciBzdGFydExpc3RlbmluZyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChlbCkge1xuICAgIC8vIGJhaWwgZWFybHkgaWYgbm8gZWxlbWVudCBpcyBhdmFpbGFibGUgdG8gYXR0YWNoIHRvXG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIHZhciBub3RQYXNzaXZlID0gc3VwcG9ydHNQYXNzaXZlRXZlbnRzID8ge1xuICAgICAgcGFzc2l2ZTogZmFsc2VcbiAgICB9IDogZmFsc2U7XG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBvbldoZWVsLCBub3RQYXNzaXZlKTtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0LCBub3RQYXNzaXZlKTtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBvblRvdWNoTW92ZSwgbm90UGFzc2l2ZSk7XG4gIH0sIFtvblRvdWNoTW92ZSwgb25Ub3VjaFN0YXJ0LCBvbldoZWVsXSk7XG4gIHZhciBzdG9wTGlzdGVuaW5nID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGVsKSB7XG4gICAgLy8gYmFpbCBlYXJseSBpZiBubyBlbGVtZW50IGlzIGF2YWlsYWJsZSB0byBkZXRhY2ggZnJvbVxuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIG9uV2hlZWwsIGZhbHNlKTtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG4gICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgb25Ub3VjaE1vdmUsIGZhbHNlKTtcbiAgfSwgW29uVG91Y2hNb3ZlLCBvblRvdWNoU3RhcnQsIG9uV2hlZWxdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWlzRW5hYmxlZCkgcmV0dXJuO1xuICAgIHZhciBlbGVtZW50ID0gc2Nyb2xsVGFyZ2V0LmN1cnJlbnQ7XG4gICAgc3RhcnRMaXN0ZW5pbmcoZWxlbWVudCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHN0b3BMaXN0ZW5pbmcoZWxlbWVudCk7XG4gICAgfTtcbiAgfSwgW2lzRW5hYmxlZCwgc3RhcnRMaXN0ZW5pbmcsIHN0b3BMaXN0ZW5pbmddKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgc2Nyb2xsVGFyZ2V0LmN1cnJlbnQgPSBlbGVtZW50O1xuICB9O1xufVxuXG52YXIgU1RZTEVfS0VZUyA9IFsnYm94U2l6aW5nJywgJ2hlaWdodCcsICdvdmVyZmxvdycsICdwYWRkaW5nUmlnaHQnLCAncG9zaXRpb24nXTtcbnZhciBMT0NLX1NUWUxFUyA9IHtcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIC8vIGFjY291bnQgZm9yIHBvc3NpYmxlIGRlY2xhcmF0aW9uIGB3aWR0aDogMTAwJTtgIG9uIGJvZHlcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgaGVpZ2h0OiAnMTAwJSdcbn07XG5mdW5jdGlvbiBwcmV2ZW50VG91Y2hNb3ZlKGUpIHtcbiAgZS5wcmV2ZW50RGVmYXVsdCgpO1xufVxuZnVuY3Rpb24gYWxsb3dUb3VjaE1vdmUoZSkge1xuICBlLnN0b3BQcm9wYWdhdGlvbigpO1xufVxuZnVuY3Rpb24gcHJldmVudEluZXJ0aWFTY3JvbGwoKSB7XG4gIHZhciB0b3AgPSB0aGlzLnNjcm9sbFRvcDtcbiAgdmFyIHRvdGFsU2Nyb2xsID0gdGhpcy5zY3JvbGxIZWlnaHQ7XG4gIHZhciBjdXJyZW50U2Nyb2xsID0gdG9wICsgdGhpcy5vZmZzZXRIZWlnaHQ7XG4gIGlmICh0b3AgPT09IDApIHtcbiAgICB0aGlzLnNjcm9sbFRvcCA9IDE7XG4gIH0gZWxzZSBpZiAoY3VycmVudFNjcm9sbCA9PT0gdG90YWxTY3JvbGwpIHtcbiAgICB0aGlzLnNjcm9sbFRvcCA9IHRvcCAtIDE7XG4gIH1cbn1cblxuLy8gYG9udG91Y2hzdGFydGAgY2hlY2sgd29ya3Mgb24gbW9zdCBicm93c2Vyc1xuLy8gYG1heFRvdWNoUG9pbnRzYCB3b3JrcyBvbiBJRTEwLzExIGFuZCBTdXJmYWNlXG5mdW5jdGlvbiBpc1RvdWNoRGV2aWNlKCkge1xuICByZXR1cm4gJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cztcbn1cbnZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xudmFyIGFjdGl2ZVNjcm9sbExvY2tzID0gMDtcbnZhciBsaXN0ZW5lck9wdGlvbnMgPSB7XG4gIGNhcHR1cmU6IGZhbHNlLFxuICBwYXNzaXZlOiBmYWxzZVxufTtcbmZ1bmN0aW9uIHVzZVNjcm9sbExvY2soX3JlZikge1xuICB2YXIgaXNFbmFibGVkID0gX3JlZi5pc0VuYWJsZWQsXG4gICAgX3JlZiRhY2NvdW50Rm9yU2Nyb2xsID0gX3JlZi5hY2NvdW50Rm9yU2Nyb2xsYmFycyxcbiAgICBhY2NvdW50Rm9yU2Nyb2xsYmFycyA9IF9yZWYkYWNjb3VudEZvclNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkYWNjb3VudEZvclNjcm9sbDtcbiAgdmFyIG9yaWdpbmFsU3R5bGVzID0gdXNlUmVmKHt9KTtcbiAgdmFyIHNjcm9sbFRhcmdldCA9IHVzZVJlZihudWxsKTtcbiAgdmFyIGFkZFNjcm9sbExvY2sgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAodG91Y2hTY3JvbGxUYXJnZXQpIHtcbiAgICBpZiAoIWNhblVzZURPTSkgcmV0dXJuO1xuICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciB0YXJnZXRTdHlsZSA9IHRhcmdldCAmJiB0YXJnZXQuc3R5bGU7XG4gICAgaWYgKGFjY291bnRGb3JTY3JvbGxiYXJzKSB7XG4gICAgICAvLyBzdG9yZSBhbnkgc3R5bGVzIGFscmVhZHkgYXBwbGllZCB0byB0aGUgYm9keVxuICAgICAgU1RZTEVfS0VZUy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbCA9IHRhcmdldFN0eWxlICYmIHRhcmdldFN0eWxlW2tleV07XG4gICAgICAgIG9yaWdpbmFsU3R5bGVzLmN1cnJlbnRba2V5XSA9IHZhbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGFwcGx5IHRoZSBsb2NrIHN0eWxlcyBhbmQgcGFkZGluZyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBzY3JvbGwgbG9ja1xuICAgIGlmIChhY2NvdW50Rm9yU2Nyb2xsYmFycyAmJiBhY3RpdmVTY3JvbGxMb2NrcyA8IDEpIHtcbiAgICAgIHZhciBjdXJyZW50UGFkZGluZyA9IHBhcnNlSW50KG9yaWdpbmFsU3R5bGVzLmN1cnJlbnQucGFkZGluZ1JpZ2h0LCAxMCkgfHwgMDtcbiAgICAgIHZhciBjbGllbnRXaWR0aCA9IGRvY3VtZW50LmJvZHkgPyBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIDogMDtcbiAgICAgIHZhciBhZGp1c3RlZFBhZGRpbmcgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIGNsaWVudFdpZHRoICsgY3VycmVudFBhZGRpbmcgfHwgMDtcbiAgICAgIE9iamVjdC5rZXlzKExPQ0tfU1RZTEVTKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbCA9IExPQ0tfU1RZTEVTW2tleV07XG4gICAgICAgIGlmICh0YXJnZXRTdHlsZSkge1xuICAgICAgICAgIHRhcmdldFN0eWxlW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHRhcmdldFN0eWxlKSB7XG4gICAgICAgIHRhcmdldFN0eWxlLnBhZGRpbmdSaWdodCA9IFwiXCIuY29uY2F0KGFkanVzdGVkUGFkZGluZywgXCJweFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhY2NvdW50IGZvciB0b3VjaCBkZXZpY2VzXG4gICAgaWYgKHRhcmdldCAmJiBpc1RvdWNoRGV2aWNlKCkpIHtcbiAgICAgIC8vIE1vYmlsZSBTYWZhcmkgaWdub3JlcyB7IG92ZXJmbG93OiBoaWRkZW4gfSBkZWNsYXJhdGlvbiBvbiB0aGUgYm9keS5cbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBwcmV2ZW50VG91Y2hNb3ZlLCBsaXN0ZW5lck9wdGlvbnMpO1xuXG4gICAgICAvLyBBbGxvdyBzY3JvbGwgb24gcHJvdmlkZWQgdGFyZ2V0XG4gICAgICBpZiAodG91Y2hTY3JvbGxUYXJnZXQpIHtcbiAgICAgICAgdG91Y2hTY3JvbGxUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHByZXZlbnRJbmVydGlhU2Nyb2xsLCBsaXN0ZW5lck9wdGlvbnMpO1xuICAgICAgICB0b3VjaFNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBhbGxvd1RvdWNoTW92ZSwgbGlzdGVuZXJPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpbmNyZW1lbnQgYWN0aXZlIHNjcm9sbCBsb2Nrc1xuICAgIGFjdGl2ZVNjcm9sbExvY2tzICs9IDE7XG4gIH0sIFthY2NvdW50Rm9yU2Nyb2xsYmFyc10pO1xuICB2YXIgcmVtb3ZlU2Nyb2xsTG9jayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICh0b3VjaFNjcm9sbFRhcmdldCkge1xuICAgIGlmICghY2FuVXNlRE9NKSByZXR1cm47XG4gICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmJvZHk7XG4gICAgdmFyIHRhcmdldFN0eWxlID0gdGFyZ2V0ICYmIHRhcmdldC5zdHlsZTtcblxuICAgIC8vIHNhZmVseSBkZWNyZW1lbnQgYWN0aXZlIHNjcm9sbCBsb2Nrc1xuICAgIGFjdGl2ZVNjcm9sbExvY2tzID0gTWF0aC5tYXgoYWN0aXZlU2Nyb2xsTG9ja3MgLSAxLCAwKTtcblxuICAgIC8vIHJlYXBwbHkgb3JpZ2luYWwgYm9keSBzdHlsZXMsIGlmIGFueVxuICAgIGlmIChhY2NvdW50Rm9yU2Nyb2xsYmFycyAmJiBhY3RpdmVTY3JvbGxMb2NrcyA8IDEpIHtcbiAgICAgIFNUWUxFX0tFWVMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWwgPSBvcmlnaW5hbFN0eWxlcy5jdXJyZW50W2tleV07XG4gICAgICAgIGlmICh0YXJnZXRTdHlsZSkge1xuICAgICAgICAgIHRhcmdldFN0eWxlW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSB0b3VjaCBsaXN0ZW5lcnNcbiAgICBpZiAodGFyZ2V0ICYmIGlzVG91Y2hEZXZpY2UoKSkge1xuICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHByZXZlbnRUb3VjaE1vdmUsIGxpc3RlbmVyT3B0aW9ucyk7XG4gICAgICBpZiAodG91Y2hTY3JvbGxUYXJnZXQpIHtcbiAgICAgICAgdG91Y2hTY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHByZXZlbnRJbmVydGlhU2Nyb2xsLCBsaXN0ZW5lck9wdGlvbnMpO1xuICAgICAgICB0b3VjaFNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBhbGxvd1RvdWNoTW92ZSwgbGlzdGVuZXJPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFthY2NvdW50Rm9yU2Nyb2xsYmFyc10pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghaXNFbmFibGVkKSByZXR1cm47XG4gICAgdmFyIGVsZW1lbnQgPSBzY3JvbGxUYXJnZXQuY3VycmVudDtcbiAgICBhZGRTY3JvbGxMb2NrKGVsZW1lbnQpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZW1vdmVTY3JvbGxMb2NrKGVsZW1lbnQpO1xuICAgIH07XG4gIH0sIFtpc0VuYWJsZWQsIGFkZFNjcm9sbExvY2ssIHJlbW92ZVNjcm9sbExvY2tdKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgc2Nyb2xsVGFyZ2V0LmN1cnJlbnQgPSBlbGVtZW50O1xuICB9O1xufVxuXG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyQxKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cbnZhciBibHVyU2VsZWN0SW5wdXQgPSBmdW5jdGlvbiBibHVyU2VsZWN0SW5wdXQoZXZlbnQpIHtcbiAgdmFyIGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG4gIHJldHVybiBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG59O1xudmFyIF9yZWYyJDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWtmZGIwZVwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246Zml4ZWQ7bGVmdDowO2JvdHRvbTowO3JpZ2h0OjA7dG9wOjBcIlxufSA6IHtcbiAgbmFtZTogXCJicDhjdWEtU2Nyb2xsTWFuYWdlclwiLFxuICBzdHlsZXM6IFwicG9zaXRpb246Zml4ZWQ7bGVmdDowO2JvdHRvbTowO3JpZ2h0OjA7dG9wOjA7bGFiZWw6U2Nyb2xsTWFuYWdlcjtcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklsTmpjbTlzYkUxaGJtRm5aWEl1ZEhONElsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFXOUVWU0lzSW1acGJHVWlPaUpUWTNKdmJHeE5ZVzVoWjJWeUxuUnplQ0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtpQkFhbk40SUdwemVDQXFMMXh1YVcxd2IzSjBJSHNnYW5ONElIMGdabkp2YlNBblFHVnRiM1JwYjI0dmNtVmhZM1FuTzF4dWFXMXdiM0owSUhzZ1JuSmhaMjFsYm5Rc0lGSmxZV04wUld4bGJXVnVkQ3dnVW1WbVEyRnNiR0poWTJzc0lFMXZkWE5sUlhabGJuUWdmU0JtY205dElDZHlaV0ZqZENjN1hHNXBiWEJ2Y25RZ2RYTmxVMk55YjJ4c1EyRndkSFZ5WlNCbWNtOXRJQ2N1TDNWelpWTmpjbTlzYkVOaGNIUjFjbVVuTzF4dWFXMXdiM0owSUhWelpWTmpjbTlzYkV4dlkyc2dabkp2YlNBbkxpOTFjMlZUWTNKdmJHeE1iMk5ySnp0Y2JseHVhVzUwWlhKbVlXTmxJRkJ5YjNCeklIdGNiaUFnY21WaFpHOXViSGtnWTJocGJHUnlaVzQ2SUNoeVpXWTZJRkpsWmtOaGJHeGlZV05yUEVoVVRVeEZiR1Z0Wlc1MFBpa2dQVDRnVW1WaFkzUkZiR1Z0Wlc1ME8xeHVJQ0J5WldGa2IyNXNlU0JzYjJOclJXNWhZbXhsWkRvZ1ltOXZiR1ZoYmp0Y2JpQWdjbVZoWkc5dWJIa2dZMkZ3ZEhWeVpVVnVZV0pzWldRNklHSnZiMnhsWVc0N1hHNGdJSEpsWVdSdmJteDVJRzl1UW05MGRHOXRRWEp5YVhabFB6b2dLR1YyWlc1ME9pQlhhR1ZsYkVWMlpXNTBJSHdnVkc5MVkyaEZkbVZ1ZENrZ1BUNGdkbTlwWkR0Y2JpQWdjbVZoWkc5dWJIa2diMjVDYjNSMGIyMU1aV0YyWlQ4NklDaGxkbVZ1ZERvZ1YyaGxaV3hGZG1WdWRDQjhJRlJ2ZFdOb1JYWmxiblFwSUQwK0lIWnZhV1E3WEc0Z0lISmxZV1J2Ym14NUlHOXVWRzl3UVhKeWFYWmxQem9nS0dWMlpXNTBPaUJYYUdWbGJFVjJaVzUwSUh3Z1ZHOTFZMmhGZG1WdWRDa2dQVDRnZG05cFpEdGNiaUFnY21WaFpHOXViSGtnYjI1VWIzQk1aV0YyWlQ4NklDaGxkbVZ1ZERvZ1YyaGxaV3hGZG1WdWRDQjhJRlJ2ZFdOb1JYWmxiblFwSUQwK0lIWnZhV1E3WEc1OVhHNWNibU52Ym5OMElHSnNkWEpUWld4bFkzUkpibkIxZENBOUlDaGxkbVZ1ZERvZ1RXOTFjMlZGZG1WdWREeElWRTFNUkdsMlJXeGxiV1Z1ZEQ0cElEMCtJSHRjYmlBZ1kyOXVjM1FnWld4bGJXVnVkQ0E5SUdWMlpXNTBMblJoY21kbGRDQmhjeUJJVkUxTVJHbDJSV3hsYldWdWREdGNiaUFnY21WMGRYSnVJQ2hjYmlBZ0lDQmxiR1Z0Wlc1MExtOTNibVZ5Ukc5amRXMWxiblF1WVdOMGFYWmxSV3hsYldWdWRDQW1KbHh1SUNBZ0lDaGxiR1Z0Wlc1MExtOTNibVZ5Ukc5amRXMWxiblF1WVdOMGFYWmxSV3hsYldWdWRDQmhjeUJJVkUxTVJXeGxiV1Z1ZENrdVlteDFjaWdwWEc0Z0lDazdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCbWRXNWpkR2x2YmlCVFkzSnZiR3hOWVc1aFoyVnlLSHRjYmlBZ1kyaHBiR1J5Wlc0c1hHNGdJR3h2WTJ0RmJtRmliR1ZrTEZ4dUlDQmpZWEIwZFhKbFJXNWhZbXhsWkNBOUlIUnlkV1VzWEc0Z0lHOXVRbTkwZEc5dFFYSnlhWFpsTEZ4dUlDQnZia0p2ZEhSdmJVeGxZWFpsTEZ4dUlDQnZibFJ2Y0VGeWNtbDJaU3hjYmlBZ2IyNVViM0JNWldGMlpTeGNibjA2SUZCeWIzQnpLU0I3WEc0Z0lHTnZibk4wSUhObGRGTmpjbTlzYkVOaGNIUjFjbVZVWVhKblpYUWdQU0IxYzJWVFkzSnZiR3hEWVhCMGRYSmxLSHRjYmlBZ0lDQnBjMFZ1WVdKc1pXUTZJR05oY0hSMWNtVkZibUZpYkdWa0xGeHVJQ0FnSUc5dVFtOTBkRzl0UVhKeWFYWmxMRnh1SUNBZ0lHOXVRbTkwZEc5dFRHVmhkbVVzWEc0Z0lDQWdiMjVVYjNCQmNuSnBkbVVzWEc0Z0lDQWdiMjVVYjNCTVpXRjJaU3hjYmlBZ2ZTazdYRzRnSUdOdmJuTjBJSE5sZEZOamNtOXNiRXh2WTJ0VVlYSm5aWFFnUFNCMWMyVlRZM0p2Ykd4TWIyTnJLSHNnYVhORmJtRmliR1ZrT2lCc2IyTnJSVzVoWW14bFpDQjlLVHRjYmx4dUlDQmpiMjV6ZENCMFlYSm5aWFJTWldZNklGSmxaa05oYkd4aVlXTnJQRWhVVFV4RmJHVnRaVzUwUGlBOUlDaGxiR1Z0Wlc1MEtTQTlQaUI3WEc0Z0lDQWdjMlYwVTJOeWIyeHNRMkZ3ZEhWeVpWUmhjbWRsZENobGJHVnRaVzUwS1R0Y2JpQWdJQ0J6WlhSVFkzSnZiR3hNYjJOclZHRnlaMlYwS0dWc1pXMWxiblFwTzF4dUlDQjlPMXh1WEc0Z0lISmxkSFZ5YmlBb1hHNGdJQ0FnUEVaeVlXZHRaVzUwUGx4dUlDQWdJQ0FnZTJ4dlkydEZibUZpYkdWa0lDWW1JQ2hjYmlBZ0lDQWdJQ0FnUEdScGRseHVJQ0FnSUNBZ0lDQWdJRzl1UTJ4cFkyczllMkpzZFhKVFpXeGxZM1JKYm5CMWRIMWNiaUFnSUNBZ0lDQWdJQ0JqYzNNOWUzc2djRzl6YVhScGIyNDZJQ2RtYVhobFpDY3NJR3hsWm5RNklEQXNJR0p2ZEhSdmJUb2dNQ3dnY21sbmFIUTZJREFzSUhSdmNEb2dNQ0I5ZlZ4dUlDQWdJQ0FnSUNBdlBseHVJQ0FnSUNBZ0tYMWNiaUFnSUNBZ0lIdGphR2xzWkhKbGJpaDBZWEpuWlhSU1pXWXBmVnh1SUNBZ0lEd3ZSbkpoWjIxbGJuUStYRzRnSUNrN1hHNTlYRzRpWFgwPSAqL1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18kMVxufTtcbmZ1bmN0aW9uIFNjcm9sbE1hbmFnZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGxvY2tFbmFibGVkID0gX3JlZi5sb2NrRW5hYmxlZCxcbiAgICBfcmVmJGNhcHR1cmVFbmFibGVkID0gX3JlZi5jYXB0dXJlRW5hYmxlZCxcbiAgICBjYXB0dXJlRW5hYmxlZCA9IF9yZWYkY2FwdHVyZUVuYWJsZWQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGNhcHR1cmVFbmFibGVkLFxuICAgIG9uQm90dG9tQXJyaXZlID0gX3JlZi5vbkJvdHRvbUFycml2ZSxcbiAgICBvbkJvdHRvbUxlYXZlID0gX3JlZi5vbkJvdHRvbUxlYXZlLFxuICAgIG9uVG9wQXJyaXZlID0gX3JlZi5vblRvcEFycml2ZSxcbiAgICBvblRvcExlYXZlID0gX3JlZi5vblRvcExlYXZlO1xuICB2YXIgc2V0U2Nyb2xsQ2FwdHVyZVRhcmdldCA9IHVzZVNjcm9sbENhcHR1cmUoe1xuICAgIGlzRW5hYmxlZDogY2FwdHVyZUVuYWJsZWQsXG4gICAgb25Cb3R0b21BcnJpdmU6IG9uQm90dG9tQXJyaXZlLFxuICAgIG9uQm90dG9tTGVhdmU6IG9uQm90dG9tTGVhdmUsXG4gICAgb25Ub3BBcnJpdmU6IG9uVG9wQXJyaXZlLFxuICAgIG9uVG9wTGVhdmU6IG9uVG9wTGVhdmVcbiAgfSk7XG4gIHZhciBzZXRTY3JvbGxMb2NrVGFyZ2V0ID0gdXNlU2Nyb2xsTG9jayh7XG4gICAgaXNFbmFibGVkOiBsb2NrRW5hYmxlZFxuICB9KTtcbiAgdmFyIHRhcmdldFJlZiA9IGZ1bmN0aW9uIHRhcmdldFJlZihlbGVtZW50KSB7XG4gICAgc2V0U2Nyb2xsQ2FwdHVyZVRhcmdldChlbGVtZW50KTtcbiAgICBzZXRTY3JvbGxMb2NrVGFyZ2V0KGVsZW1lbnQpO1xuICB9O1xuICByZXR1cm4ganN4KEZyYWdtZW50LCBudWxsLCBsb2NrRW5hYmxlZCAmJiBqc3goXCJkaXZcIiwge1xuICAgIG9uQ2xpY2s6IGJsdXJTZWxlY3RJbnB1dCxcbiAgICBjc3M6IF9yZWYyJDFcbiAgfSksIGNoaWxkcmVuKHRhcmdldFJlZikpO1xufVxuXG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWEwcm80bi1yZXF1aXJlZElucHV0XCIsXG4gIHN0eWxlczogXCJsYWJlbDpyZXF1aXJlZElucHV0O29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3dpZHRoOjEwMCVcIlxufSA6IHtcbiAgbmFtZTogXCI1a2t4YjItcmVxdWlyZWRJbnB1dC1SZXF1aXJlZElucHV0XCIsXG4gIHN0eWxlczogXCJsYWJlbDpyZXF1aXJlZElucHV0O29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3dpZHRoOjEwMCU7bGFiZWw6UmVxdWlyZWRJbnB1dDtcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklsSmxjWFZwY21Wa1NXNXdkWFF1ZEhONElsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFXTkpJaXdpWm1sc1pTSTZJbEpsY1hWcGNtVmtTVzV3ZFhRdWRITjRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcUlFQnFjM2dnYW5ONElDb3ZYRzVwYlhCdmNuUWdleUJHYjJOMWMwVjJaVzUwU0dGdVpHeGxjaXdnUm5WdVkzUnBiMjVEYjIxd2IyNWxiblFnZlNCbWNtOXRJQ2R5WldGamRDYzdYRzVwYlhCdmNuUWdleUJxYzNnZ2ZTQm1jbTl0SUNkQVpXMXZkR2x2Ymk5eVpXRmpkQ2M3WEc1Y2JtTnZibk4wSUZKbGNYVnBjbVZrU1c1d2RYUTZJRVoxYm1OMGFXOXVRMjl0Y0c5dVpXNTBQSHRjYmlBZ2NtVmhaRzl1YkhrZ2JtRnRaVDg2SUhOMGNtbHVaenRjYmlBZ2NtVmhaRzl1YkhrZ2IyNUdiMk4xY3pvZ1JtOWpkWE5GZG1WdWRFaGhibVJzWlhJOFNGUk5URWx1Y0hWMFJXeGxiV1Z1ZEQ0N1hHNTlQaUE5SUNoN0lHNWhiV1VzSUc5dVJtOWpkWE1nZlNrZ1BUNGdLRnh1SUNBOGFXNXdkWFJjYmlBZ0lDQnlaWEYxYVhKbFpGeHVJQ0FnSUc1aGJXVTllMjVoYldWOVhHNGdJQ0FnZEdGaVNXNWtaWGc5ZXkweGZWeHVJQ0FnSUdGeWFXRXRhR2xrWkdWdVBWd2lkSEoxWlZ3aVhHNGdJQ0FnYjI1R2IyTjFjejE3YjI1R2IyTjFjMzFjYmlBZ0lDQmpjM005ZTN0Y2JpQWdJQ0FnSUd4aFltVnNPaUFuY21WeGRXbHlaV1JKYm5CMWRDY3NYRzRnSUNBZ0lDQnZjR0ZqYVhSNU9pQXdMRnh1SUNBZ0lDQWdjRzlwYm5SbGNrVjJaVzUwY3pvZ0oyNXZibVVuTEZ4dUlDQWdJQ0FnY0c5emFYUnBiMjQ2SUNkaFluTnZiSFYwWlNjc1hHNGdJQ0FnSUNCaWIzUjBiMjA2SURBc1hHNGdJQ0FnSUNCc1pXWjBPaUF3TEZ4dUlDQWdJQ0FnY21sbmFIUTZJREFzWEc0Z0lDQWdJQ0IzYVdSMGFEb2dKekV3TUNVbkxGeHVJQ0FnSUgxOVhHNGdJQ0FnTHk4Z1VISmxkbVZ1ZENCZ1UzZHBkR05vYVc1bklHWnliMjBnZFc1amIyNTBjbTlzYkdWa0lIUnZJR052Ym5SeWIyeHNaV1JnSUdWeWNtOXlYRzRnSUNBZ2RtRnNkV1U5WENKY0lseHVJQ0FnSUc5dVEyaGhibWRsUFhzb0tTQTlQaUI3ZlgxY2JpQWdMejVjYmlrN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElGSmxjWFZwY21Wa1NXNXdkWFE3WEc0aVhYMD0gKi9cIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xudmFyIFJlcXVpcmVkSW5wdXQgPSBmdW5jdGlvbiBSZXF1aXJlZElucHV0KF9yZWYpIHtcbiAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgb25Gb2N1cyA9IF9yZWYub25Gb2N1cztcbiAgcmV0dXJuIGpzeChcImlucHV0XCIsIHtcbiAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHRhYkluZGV4OiAtMSxcbiAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgY3NzOiBfcmVmMlxuICAgIC8vIFByZXZlbnQgYFN3aXRjaGluZyBmcm9tIHVuY29udHJvbGxlZCB0byBjb250cm9sbGVkYCBlcnJvclxuICAgICxcbiAgICB2YWx1ZTogXCJcIixcbiAgICBvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoKSB7fVxuICB9KTtcbn07XG52YXIgUmVxdWlyZWRJbnB1dCQxID0gUmVxdWlyZWRJbnB1dDtcblxuLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJ1c2VyLWFnZW50LWRhdGEtdHlwZXNcIiAvPlxuXG5mdW5jdGlvbiB0ZXN0UGxhdGZvcm0ocmUpIHtcbiAgdmFyIF93aW5kb3ckbmF2aWdhdG9yJHVzZTtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5uYXZpZ2F0b3IgIT0gbnVsbCA/IHJlLnRlc3QoKChfd2luZG93JG5hdmlnYXRvciR1c2UgPSB3aW5kb3cubmF2aWdhdG9yWyd1c2VyQWdlbnREYXRhJ10pID09PSBudWxsIHx8IF93aW5kb3ckbmF2aWdhdG9yJHVzZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3dpbmRvdyRuYXZpZ2F0b3IkdXNlLnBsYXRmb3JtKSB8fCB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtKSA6IGZhbHNlO1xufVxuZnVuY3Rpb24gaXNJUGhvbmUoKSB7XG4gIHJldHVybiB0ZXN0UGxhdGZvcm0oL15pUGhvbmUvaSk7XG59XG5mdW5jdGlvbiBpc01hYygpIHtcbiAgcmV0dXJuIHRlc3RQbGF0Zm9ybSgvXk1hYy9pKTtcbn1cbmZ1bmN0aW9uIGlzSVBhZCgpIHtcbiAgcmV0dXJuIHRlc3RQbGF0Zm9ybSgvXmlQYWQvaSkgfHxcbiAgLy8gaVBhZE9TIDEzIGxpZXMgYW5kIHNheXMgaXQncyBhIE1hYywgYnV0IHdlIGNhbiBkaXN0aW5ndWlzaCBieSBkZXRlY3RpbmcgdG91Y2ggc3VwcG9ydC5cbiAgaXNNYWMoKSAmJiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAxO1xufVxuZnVuY3Rpb24gaXNJT1MoKSB7XG4gIHJldHVybiBpc0lQaG9uZSgpIHx8IGlzSVBhZCgpO1xufVxuZnVuY3Rpb24gaXNBcHBsZURldmljZSgpIHtcbiAgcmV0dXJuIGlzTWFjKCkgfHwgaXNJT1MoKTtcbn1cblxudmFyIGZvcm1hdEdyb3VwTGFiZWwgPSBmdW5jdGlvbiBmb3JtYXRHcm91cExhYmVsKGdyb3VwKSB7XG4gIHJldHVybiBncm91cC5sYWJlbDtcbn07XG52YXIgZ2V0T3B0aW9uTGFiZWwkMSA9IGZ1bmN0aW9uIGdldE9wdGlvbkxhYmVsKG9wdGlvbikge1xuICByZXR1cm4gb3B0aW9uLmxhYmVsO1xufTtcbnZhciBnZXRPcHRpb25WYWx1ZSQxID0gZnVuY3Rpb24gZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSB7XG4gIHJldHVybiBvcHRpb24udmFsdWU7XG59O1xudmFyIGlzT3B0aW9uRGlzYWJsZWQgPSBmdW5jdGlvbiBpc09wdGlvbkRpc2FibGVkKG9wdGlvbikge1xuICByZXR1cm4gISFvcHRpb24uaXNEaXNhYmxlZDtcbn07XG5cbnZhciBkZWZhdWx0U3R5bGVzID0ge1xuICBjbGVhckluZGljYXRvcjogY2xlYXJJbmRpY2F0b3JDU1MsXG4gIGNvbnRhaW5lcjogY29udGFpbmVyQ1NTLFxuICBjb250cm9sOiBjc3MkMSxcbiAgZHJvcGRvd25JbmRpY2F0b3I6IGRyb3Bkb3duSW5kaWNhdG9yQ1NTLFxuICBncm91cDogZ3JvdXBDU1MsXG4gIGdyb3VwSGVhZGluZzogZ3JvdXBIZWFkaW5nQ1NTLFxuICBpbmRpY2F0b3JzQ29udGFpbmVyOiBpbmRpY2F0b3JzQ29udGFpbmVyQ1NTLFxuICBpbmRpY2F0b3JTZXBhcmF0b3I6IGluZGljYXRvclNlcGFyYXRvckNTUyxcbiAgaW5wdXQ6IGlucHV0Q1NTLFxuICBsb2FkaW5nSW5kaWNhdG9yOiBsb2FkaW5nSW5kaWNhdG9yQ1NTLFxuICBsb2FkaW5nTWVzc2FnZTogbG9hZGluZ01lc3NhZ2VDU1MsXG4gIG1lbnU6IG1lbnVDU1MsXG4gIG1lbnVMaXN0OiBtZW51TGlzdENTUyxcbiAgbWVudVBvcnRhbDogbWVudVBvcnRhbENTUyxcbiAgbXVsdGlWYWx1ZTogbXVsdGlWYWx1ZUNTUyxcbiAgbXVsdGlWYWx1ZUxhYmVsOiBtdWx0aVZhbHVlTGFiZWxDU1MsXG4gIG11bHRpVmFsdWVSZW1vdmU6IG11bHRpVmFsdWVSZW1vdmVDU1MsXG4gIG5vT3B0aW9uc01lc3NhZ2U6IG5vT3B0aW9uc01lc3NhZ2VDU1MsXG4gIG9wdGlvbjogb3B0aW9uQ1NTLFxuICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXJDU1MsXG4gIHNpbmdsZVZhbHVlOiBjc3MkMixcbiAgdmFsdWVDb250YWluZXI6IHZhbHVlQ29udGFpbmVyQ1NTXG59O1xuLy8gTWVyZ2UgVXRpbGl0eVxuLy8gQWxsb3dzIGNvbnN1bWVycyB0byBleHRlbmQgYSBiYXNlIFNlbGVjdCB3aXRoIGFkZGl0aW9uYWwgc3R5bGVzXG5cbmZ1bmN0aW9uIG1lcmdlU3R5bGVzKHNvdXJjZSkge1xuICB2YXIgdGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgLy8gaW5pdGlhbGl6ZSB3aXRoIHNvdXJjZSBzdHlsZXNcbiAgdmFyIHN0eWxlcyA9IF9vYmplY3RTcHJlYWQoe30sIHNvdXJjZSk7XG5cbiAgLy8gbWFzc2FnZSBpbiB0YXJnZXQgc3R5bGVzXG4gIE9iamVjdC5rZXlzKHRhcmdldCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5QXNTdHJpbmcpIHtcbiAgICB2YXIga2V5ID0ga2V5QXNTdHJpbmc7XG4gICAgaWYgKHNvdXJjZVtrZXldKSB7XG4gICAgICBzdHlsZXNba2V5XSA9IGZ1bmN0aW9uIChyc0NzcywgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldFtrZXldKHNvdXJjZVtrZXldKHJzQ3NzLCBwcm9wcyksIHByb3BzKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlc1trZXldID0gdGFyZ2V0W2tleV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHN0eWxlcztcbn1cblxudmFyIGNvbG9ycyA9IHtcbiAgcHJpbWFyeTogJyMyNjg0RkYnLFxuICBwcmltYXJ5NzU6ICcjNEM5QUZGJyxcbiAgcHJpbWFyeTUwOiAnI0IyRDRGRicsXG4gIHByaW1hcnkyNTogJyNERUVCRkYnLFxuICBkYW5nZXI6ICcjREUzNTBCJyxcbiAgZGFuZ2VyTGlnaHQ6ICcjRkZCREFEJyxcbiAgbmV1dHJhbDA6ICdoc2woMCwgMCUsIDEwMCUpJyxcbiAgbmV1dHJhbDU6ICdoc2woMCwgMCUsIDk1JSknLFxuICBuZXV0cmFsMTA6ICdoc2woMCwgMCUsIDkwJSknLFxuICBuZXV0cmFsMjA6ICdoc2woMCwgMCUsIDgwJSknLFxuICBuZXV0cmFsMzA6ICdoc2woMCwgMCUsIDcwJSknLFxuICBuZXV0cmFsNDA6ICdoc2woMCwgMCUsIDYwJSknLFxuICBuZXV0cmFsNTA6ICdoc2woMCwgMCUsIDUwJSknLFxuICBuZXV0cmFsNjA6ICdoc2woMCwgMCUsIDQwJSknLFxuICBuZXV0cmFsNzA6ICdoc2woMCwgMCUsIDMwJSknLFxuICBuZXV0cmFsODA6ICdoc2woMCwgMCUsIDIwJSknLFxuICBuZXV0cmFsOTA6ICdoc2woMCwgMCUsIDEwJSknXG59O1xudmFyIGJvcmRlclJhZGl1cyA9IDQ7XG4vLyBVc2VkIHRvIGNhbGN1bGF0ZSBjb25zaXN0ZW50IG1hcmdpbi9wYWRkaW5nIG9uIGVsZW1lbnRzXG52YXIgYmFzZVVuaXQgPSA0O1xuLy8gVGhlIG1pbmltdW0gaGVpZ2h0IG9mIHRoZSBjb250cm9sXG52YXIgY29udHJvbEhlaWdodCA9IDM4O1xuLy8gVGhlIGFtb3VudCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSBjb250cm9sIGFuZCBtZW51ICovXG52YXIgbWVudUd1dHRlciA9IGJhc2VVbml0ICogMjtcbnZhciBzcGFjaW5nID0ge1xuICBiYXNlVW5pdDogYmFzZVVuaXQsXG4gIGNvbnRyb2xIZWlnaHQ6IGNvbnRyb2xIZWlnaHQsXG4gIG1lbnVHdXR0ZXI6IG1lbnVHdXR0ZXJcbn07XG52YXIgZGVmYXVsdFRoZW1lID0ge1xuICBib3JkZXJSYWRpdXM6IGJvcmRlclJhZGl1cyxcbiAgY29sb3JzOiBjb2xvcnMsXG4gIHNwYWNpbmc6IHNwYWNpbmdcbn07XG5cbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gICdhcmlhLWxpdmUnOiAncG9saXRlJyxcbiAgYmFja3NwYWNlUmVtb3Zlc1ZhbHVlOiB0cnVlLFxuICBibHVySW5wdXRPblNlbGVjdDogaXNUb3VjaENhcGFibGUoKSxcbiAgY2FwdHVyZU1lbnVTY3JvbGw6ICFpc1RvdWNoQ2FwYWJsZSgpLFxuICBjbGFzc05hbWVzOiB7fSxcbiAgY2xvc2VNZW51T25TZWxlY3Q6IHRydWUsXG4gIGNsb3NlTWVudU9uU2Nyb2xsOiBmYWxzZSxcbiAgY29tcG9uZW50czoge30sXG4gIGNvbnRyb2xTaG91bGRSZW5kZXJWYWx1ZTogdHJ1ZSxcbiAgZXNjYXBlQ2xlYXJzVmFsdWU6IGZhbHNlLFxuICBmaWx0ZXJPcHRpb246IGNyZWF0ZUZpbHRlcigpLFxuICBmb3JtYXRHcm91cExhYmVsOiBmb3JtYXRHcm91cExhYmVsLFxuICBnZXRPcHRpb25MYWJlbDogZ2V0T3B0aW9uTGFiZWwkMSxcbiAgZ2V0T3B0aW9uVmFsdWU6IGdldE9wdGlvblZhbHVlJDEsXG4gIGlzRGlzYWJsZWQ6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBpc011bHRpOiBmYWxzZSxcbiAgaXNSdGw6IGZhbHNlLFxuICBpc1NlYXJjaGFibGU6IHRydWUsXG4gIGlzT3B0aW9uRGlzYWJsZWQ6IGlzT3B0aW9uRGlzYWJsZWQsXG4gIGxvYWRpbmdNZXNzYWdlOiBmdW5jdGlvbiBsb2FkaW5nTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gJ0xvYWRpbmcuLi4nO1xuICB9LFxuICBtYXhNZW51SGVpZ2h0OiAzMDAsXG4gIG1pbk1lbnVIZWlnaHQ6IDE0MCxcbiAgbWVudUlzT3BlbjogZmFsc2UsXG4gIG1lbnVQbGFjZW1lbnQ6ICdib3R0b20nLFxuICBtZW51UG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIG1lbnVTaG91bGRCbG9ja1Njcm9sbDogZmFsc2UsXG4gIG1lbnVTaG91bGRTY3JvbGxJbnRvVmlldzogIWlzTW9iaWxlRGV2aWNlKCksXG4gIG5vT3B0aW9uc01lc3NhZ2U6IGZ1bmN0aW9uIG5vT3B0aW9uc01lc3NhZ2UoKSB7XG4gICAgcmV0dXJuICdObyBvcHRpb25zJztcbiAgfSxcbiAgb3Blbk1lbnVPbkZvY3VzOiBmYWxzZSxcbiAgb3Blbk1lbnVPbkNsaWNrOiB0cnVlLFxuICBvcHRpb25zOiBbXSxcbiAgcGFnZVNpemU6IDUsXG4gIHBsYWNlaG9sZGVyOiAnU2VsZWN0Li4uJyxcbiAgc2NyZWVuUmVhZGVyU3RhdHVzOiBmdW5jdGlvbiBzY3JlZW5SZWFkZXJTdGF0dXMoX3JlZikge1xuICAgIHZhciBjb3VudCA9IF9yZWYuY291bnQ7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KGNvdW50LCBcIiByZXN1bHRcIikuY29uY2F0KGNvdW50ICE9PSAxID8gJ3MnIDogJycsIFwiIGF2YWlsYWJsZVwiKTtcbiAgfSxcbiAgc3R5bGVzOiB7fSxcbiAgdGFiSW5kZXg6IDAsXG4gIHRhYlNlbGVjdHNWYWx1ZTogdHJ1ZSxcbiAgdW5zdHlsZWQ6IGZhbHNlXG59O1xuZnVuY3Rpb24gdG9DYXRlZ29yaXplZE9wdGlvbihwcm9wcywgb3B0aW9uLCBzZWxlY3RWYWx1ZSwgaW5kZXgpIHtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfaXNPcHRpb25EaXNhYmxlZChwcm9wcywgb3B0aW9uLCBzZWxlY3RWYWx1ZSk7XG4gIHZhciBpc1NlbGVjdGVkID0gX2lzT3B0aW9uU2VsZWN0ZWQocHJvcHMsIG9wdGlvbiwgc2VsZWN0VmFsdWUpO1xuICB2YXIgbGFiZWwgPSBnZXRPcHRpb25MYWJlbChwcm9wcywgb3B0aW9uKTtcbiAgdmFyIHZhbHVlID0gZ2V0T3B0aW9uVmFsdWUocHJvcHMsIG9wdGlvbik7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ29wdGlvbicsXG4gICAgZGF0YTogb3B0aW9uLFxuICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgaXNTZWxlY3RlZDogaXNTZWxlY3RlZCxcbiAgICBsYWJlbDogbGFiZWwsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGluZGV4OiBpbmRleFxuICB9O1xufVxuZnVuY3Rpb24gYnVpbGRDYXRlZ29yaXplZE9wdGlvbnMocHJvcHMsIHNlbGVjdFZhbHVlKSB7XG4gIHJldHVybiBwcm9wcy5vcHRpb25zLm1hcChmdW5jdGlvbiAoZ3JvdXBPck9wdGlvbiwgZ3JvdXBPck9wdGlvbkluZGV4KSB7XG4gICAgaWYgKCdvcHRpb25zJyBpbiBncm91cE9yT3B0aW9uKSB7XG4gICAgICB2YXIgY2F0ZWdvcml6ZWRPcHRpb25zID0gZ3JvdXBPck9wdGlvbi5vcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uLCBvcHRpb25JbmRleCkge1xuICAgICAgICByZXR1cm4gdG9DYXRlZ29yaXplZE9wdGlvbihwcm9wcywgb3B0aW9uLCBzZWxlY3RWYWx1ZSwgb3B0aW9uSW5kZXgpO1xuICAgICAgfSkuZmlsdGVyKGZ1bmN0aW9uIChjYXRlZ29yaXplZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gaXNGb2N1c2FibGUocHJvcHMsIGNhdGVnb3JpemVkT3B0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNhdGVnb3JpemVkT3B0aW9ucy5sZW5ndGggPiAwID8ge1xuICAgICAgICB0eXBlOiAnZ3JvdXAnLFxuICAgICAgICBkYXRhOiBncm91cE9yT3B0aW9uLFxuICAgICAgICBvcHRpb25zOiBjYXRlZ29yaXplZE9wdGlvbnMsXG4gICAgICAgIGluZGV4OiBncm91cE9yT3B0aW9uSW5kZXhcbiAgICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBjYXRlZ29yaXplZE9wdGlvbiA9IHRvQ2F0ZWdvcml6ZWRPcHRpb24ocHJvcHMsIGdyb3VwT3JPcHRpb24sIHNlbGVjdFZhbHVlLCBncm91cE9yT3B0aW9uSW5kZXgpO1xuICAgIHJldHVybiBpc0ZvY3VzYWJsZShwcm9wcywgY2F0ZWdvcml6ZWRPcHRpb24pID8gY2F0ZWdvcml6ZWRPcHRpb24gOiB1bmRlZmluZWQ7XG4gIH0pLmZpbHRlcihub3ROdWxsaXNoKTtcbn1cbmZ1bmN0aW9uIGJ1aWxkRm9jdXNhYmxlT3B0aW9uc0Zyb21DYXRlZ29yaXplZE9wdGlvbnMoY2F0ZWdvcml6ZWRPcHRpb25zKSB7XG4gIHJldHVybiBjYXRlZ29yaXplZE9wdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChvcHRpb25zQWNjdW11bGF0b3IsIGNhdGVnb3JpemVkT3B0aW9uKSB7XG4gICAgaWYgKGNhdGVnb3JpemVkT3B0aW9uLnR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgIG9wdGlvbnNBY2N1bXVsYXRvci5wdXNoLmFwcGx5KG9wdGlvbnNBY2N1bXVsYXRvciwgX3RvQ29uc3VtYWJsZUFycmF5KGNhdGVnb3JpemVkT3B0aW9uLm9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbi5kYXRhO1xuICAgICAgfSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uc0FjY3VtdWxhdG9yLnB1c2goY2F0ZWdvcml6ZWRPcHRpb24uZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zQWNjdW11bGF0b3I7XG4gIH0sIFtdKTtcbn1cbmZ1bmN0aW9uIGJ1aWxkRm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMoY2F0ZWdvcml6ZWRPcHRpb25zLCBvcHRpb25JZCkge1xuICByZXR1cm4gY2F0ZWdvcml6ZWRPcHRpb25zLnJlZHVjZShmdW5jdGlvbiAob3B0aW9uc0FjY3VtdWxhdG9yLCBjYXRlZ29yaXplZE9wdGlvbikge1xuICAgIGlmIChjYXRlZ29yaXplZE9wdGlvbi50eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICBvcHRpb25zQWNjdW11bGF0b3IucHVzaC5hcHBseShvcHRpb25zQWNjdW11bGF0b3IsIF90b0NvbnN1bWFibGVBcnJheShjYXRlZ29yaXplZE9wdGlvbi5vcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogb3B0aW9uLmRhdGEsXG4gICAgICAgICAgaWQ6IFwiXCIuY29uY2F0KG9wdGlvbklkLCBcIi1cIikuY29uY2F0KGNhdGVnb3JpemVkT3B0aW9uLmluZGV4LCBcIi1cIikuY29uY2F0KG9wdGlvbi5pbmRleClcbiAgICAgICAgfTtcbiAgICAgIH0pKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnNBY2N1bXVsYXRvci5wdXNoKHtcbiAgICAgICAgZGF0YTogY2F0ZWdvcml6ZWRPcHRpb24uZGF0YSxcbiAgICAgICAgaWQ6IFwiXCIuY29uY2F0KG9wdGlvbklkLCBcIi1cIikuY29uY2F0KGNhdGVnb3JpemVkT3B0aW9uLmluZGV4KVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zQWNjdW11bGF0b3I7XG4gIH0sIFtdKTtcbn1cbmZ1bmN0aW9uIGJ1aWxkRm9jdXNhYmxlT3B0aW9ucyhwcm9wcywgc2VsZWN0VmFsdWUpIHtcbiAgcmV0dXJuIGJ1aWxkRm9jdXNhYmxlT3B0aW9uc0Zyb21DYXRlZ29yaXplZE9wdGlvbnMoYnVpbGRDYXRlZ29yaXplZE9wdGlvbnMocHJvcHMsIHNlbGVjdFZhbHVlKSk7XG59XG5mdW5jdGlvbiBpc0ZvY3VzYWJsZShwcm9wcywgY2F0ZWdvcml6ZWRPcHRpb24pIHtcbiAgdmFyIF9wcm9wcyRpbnB1dFZhbHVlID0gcHJvcHMuaW5wdXRWYWx1ZSxcbiAgICBpbnB1dFZhbHVlID0gX3Byb3BzJGlucHV0VmFsdWUgPT09IHZvaWQgMCA/ICcnIDogX3Byb3BzJGlucHV0VmFsdWU7XG4gIHZhciBkYXRhID0gY2F0ZWdvcml6ZWRPcHRpb24uZGF0YSxcbiAgICBpc1NlbGVjdGVkID0gY2F0ZWdvcml6ZWRPcHRpb24uaXNTZWxlY3RlZCxcbiAgICBsYWJlbCA9IGNhdGVnb3JpemVkT3B0aW9uLmxhYmVsLFxuICAgIHZhbHVlID0gY2F0ZWdvcml6ZWRPcHRpb24udmFsdWU7XG4gIHJldHVybiAoIXNob3VsZEhpZGVTZWxlY3RlZE9wdGlvbnMocHJvcHMpIHx8ICFpc1NlbGVjdGVkKSAmJiBfZmlsdGVyT3B0aW9uKHByb3BzLCB7XG4gICAgbGFiZWw6IGxhYmVsLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBkYXRhOiBkYXRhXG4gIH0sIGlucHV0VmFsdWUpO1xufVxuZnVuY3Rpb24gZ2V0TmV4dEZvY3VzZWRWYWx1ZShzdGF0ZSwgbmV4dFNlbGVjdFZhbHVlKSB7XG4gIHZhciBmb2N1c2VkVmFsdWUgPSBzdGF0ZS5mb2N1c2VkVmFsdWUsXG4gICAgbGFzdFNlbGVjdFZhbHVlID0gc3RhdGUuc2VsZWN0VmFsdWU7XG4gIHZhciBsYXN0Rm9jdXNlZEluZGV4ID0gbGFzdFNlbGVjdFZhbHVlLmluZGV4T2YoZm9jdXNlZFZhbHVlKTtcbiAgaWYgKGxhc3RGb2N1c2VkSW5kZXggPiAtMSkge1xuICAgIHZhciBuZXh0Rm9jdXNlZEluZGV4ID0gbmV4dFNlbGVjdFZhbHVlLmluZGV4T2YoZm9jdXNlZFZhbHVlKTtcbiAgICBpZiAobmV4dEZvY3VzZWRJbmRleCA+IC0xKSB7XG4gICAgICAvLyB0aGUgZm9jdXNlZCB2YWx1ZSBpcyBzdGlsbCBpbiB0aGUgc2VsZWN0VmFsdWUsIHJldHVybiBpdFxuICAgICAgcmV0dXJuIGZvY3VzZWRWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKGxhc3RGb2N1c2VkSW5kZXggPCBuZXh0U2VsZWN0VmFsdWUubGVuZ3RoKSB7XG4gICAgICAvLyB0aGUgZm9jdXNlZFZhbHVlIGlzIG5vdCBwcmVzZW50IGluIHRoZSBuZXh0IHNlbGVjdFZhbHVlIGFycmF5IGJ5XG4gICAgICAvLyByZWZlcmVuY2UsIHNvIHJldHVybiB0aGUgbmV3IHZhbHVlIGF0IHRoZSBzYW1lIGluZGV4XG4gICAgICByZXR1cm4gbmV4dFNlbGVjdFZhbHVlW2xhc3RGb2N1c2VkSW5kZXhdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldE5leHRGb2N1c2VkT3B0aW9uKHN0YXRlLCBvcHRpb25zKSB7XG4gIHZhciBsYXN0Rm9jdXNlZE9wdGlvbiA9IHN0YXRlLmZvY3VzZWRPcHRpb247XG4gIHJldHVybiBsYXN0Rm9jdXNlZE9wdGlvbiAmJiBvcHRpb25zLmluZGV4T2YobGFzdEZvY3VzZWRPcHRpb24pID4gLTEgPyBsYXN0Rm9jdXNlZE9wdGlvbiA6IG9wdGlvbnNbMF07XG59XG52YXIgZ2V0Rm9jdXNlZE9wdGlvbklkID0gZnVuY3Rpb24gZ2V0Rm9jdXNlZE9wdGlvbklkKGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzLCBmb2N1c2VkT3B0aW9uKSB7XG4gIHZhciBfZm9jdXNhYmxlT3B0aW9uc1dpdGg7XG4gIHZhciBmb2N1c2VkT3B0aW9uSWQgPSAoX2ZvY3VzYWJsZU9wdGlvbnNXaXRoID0gZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMuZmluZChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5kYXRhID09PSBmb2N1c2VkT3B0aW9uO1xuICB9KSkgPT09IG51bGwgfHwgX2ZvY3VzYWJsZU9wdGlvbnNXaXRoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZm9jdXNhYmxlT3B0aW9uc1dpdGguaWQ7XG4gIHJldHVybiBmb2N1c2VkT3B0aW9uSWQgfHwgbnVsbDtcbn07XG52YXIgZ2V0T3B0aW9uTGFiZWwgPSBmdW5jdGlvbiBnZXRPcHRpb25MYWJlbChwcm9wcywgZGF0YSkge1xuICByZXR1cm4gcHJvcHMuZ2V0T3B0aW9uTGFiZWwoZGF0YSk7XG59O1xudmFyIGdldE9wdGlvblZhbHVlID0gZnVuY3Rpb24gZ2V0T3B0aW9uVmFsdWUocHJvcHMsIGRhdGEpIHtcbiAgcmV0dXJuIHByb3BzLmdldE9wdGlvblZhbHVlKGRhdGEpO1xufTtcbmZ1bmN0aW9uIF9pc09wdGlvbkRpc2FibGVkKHByb3BzLCBvcHRpb24sIHNlbGVjdFZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgcHJvcHMuaXNPcHRpb25EaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJyA/IHByb3BzLmlzT3B0aW9uRGlzYWJsZWQob3B0aW9uLCBzZWxlY3RWYWx1ZSkgOiBmYWxzZTtcbn1cbmZ1bmN0aW9uIF9pc09wdGlvblNlbGVjdGVkKHByb3BzLCBvcHRpb24sIHNlbGVjdFZhbHVlKSB7XG4gIGlmIChzZWxlY3RWYWx1ZS5pbmRleE9mKG9wdGlvbikgPiAtMSkgcmV0dXJuIHRydWU7XG4gIGlmICh0eXBlb2YgcHJvcHMuaXNPcHRpb25TZWxlY3RlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBwcm9wcy5pc09wdGlvblNlbGVjdGVkKG9wdGlvbiwgc2VsZWN0VmFsdWUpO1xuICB9XG4gIHZhciBjYW5kaWRhdGUgPSBnZXRPcHRpb25WYWx1ZShwcm9wcywgb3B0aW9uKTtcbiAgcmV0dXJuIHNlbGVjdFZhbHVlLnNvbWUoZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gZ2V0T3B0aW9uVmFsdWUocHJvcHMsIGkpID09PSBjYW5kaWRhdGU7XG4gIH0pO1xufVxuZnVuY3Rpb24gX2ZpbHRlck9wdGlvbihwcm9wcywgb3B0aW9uLCBpbnB1dFZhbHVlKSB7XG4gIHJldHVybiBwcm9wcy5maWx0ZXJPcHRpb24gPyBwcm9wcy5maWx0ZXJPcHRpb24ob3B0aW9uLCBpbnB1dFZhbHVlKSA6IHRydWU7XG59XG52YXIgc2hvdWxkSGlkZVNlbGVjdGVkT3B0aW9ucyA9IGZ1bmN0aW9uIHNob3VsZEhpZGVTZWxlY3RlZE9wdGlvbnMocHJvcHMpIHtcbiAgdmFyIGhpZGVTZWxlY3RlZE9wdGlvbnMgPSBwcm9wcy5oaWRlU2VsZWN0ZWRPcHRpb25zLFxuICAgIGlzTXVsdGkgPSBwcm9wcy5pc011bHRpO1xuICBpZiAoaGlkZVNlbGVjdGVkT3B0aW9ucyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gaXNNdWx0aTtcbiAgcmV0dXJuIGhpZGVTZWxlY3RlZE9wdGlvbnM7XG59O1xudmFyIGluc3RhbmNlSWQgPSAxO1xudmFyIFNlbGVjdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoU2VsZWN0LCBfQ29tcG9uZW50KTtcbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTZWxlY3QpO1xuICAvLyBNaXNjLiBJbnN0YW5jZSBQcm9wZXJ0aWVzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFRPRE9cblxuICAvLyBSZWZzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIExpZmVjeWNsZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBmdW5jdGlvbiBTZWxlY3QoX3Byb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTZWxlY3QpO1xuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgX3Byb3BzKTtcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGFyaWFTZWxlY3Rpb246IG51bGwsXG4gICAgICBmb2N1c2VkT3B0aW9uOiBudWxsLFxuICAgICAgZm9jdXNlZE9wdGlvbklkOiBudWxsLFxuICAgICAgZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHM6IFtdLFxuICAgICAgZm9jdXNlZFZhbHVlOiBudWxsLFxuICAgICAgaW5wdXRJc0hpZGRlbjogZmFsc2UsXG4gICAgICBpc0ZvY3VzZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0VmFsdWU6IFtdLFxuICAgICAgY2xlYXJGb2N1c1ZhbHVlT25VcGRhdGU6IGZhbHNlLFxuICAgICAgcHJldldhc0ZvY3VzZWQ6IGZhbHNlLFxuICAgICAgaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlOiB1bmRlZmluZWQsXG4gICAgICBwcmV2UHJvcHM6IHVuZGVmaW5lZCxcbiAgICAgIGluc3RhbmNlUHJlZml4OiAnJ1xuICAgIH07XG4gICAgX3RoaXMuYmxvY2tPcHRpb25Ib3ZlciA9IGZhbHNlO1xuICAgIF90aGlzLmlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgX3RoaXMuY29tbW9uUHJvcHMgPSB2b2lkIDA7XG4gICAgX3RoaXMuaW5pdGlhbFRvdWNoWCA9IDA7XG4gICAgX3RoaXMuaW5pdGlhbFRvdWNoWSA9IDA7XG4gICAgX3RoaXMub3BlbkFmdGVyRm9jdXMgPSBmYWxzZTtcbiAgICBfdGhpcy5zY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZSA9IGZhbHNlO1xuICAgIF90aGlzLnVzZXJJc0RyYWdnaW5nID0gdm9pZCAwO1xuICAgIF90aGlzLmlzQXBwbGVEZXZpY2UgPSBpc0FwcGxlRGV2aWNlKCk7XG4gICAgX3RoaXMuY29udHJvbFJlZiA9IG51bGw7XG4gICAgX3RoaXMuZ2V0Q29udHJvbFJlZiA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmNvbnRyb2xSZWYgPSByZWY7XG4gICAgfTtcbiAgICBfdGhpcy5mb2N1c2VkT3B0aW9uUmVmID0gbnVsbDtcbiAgICBfdGhpcy5nZXRGb2N1c2VkT3B0aW9uUmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMuZm9jdXNlZE9wdGlvblJlZiA9IHJlZjtcbiAgICB9O1xuICAgIF90aGlzLm1lbnVMaXN0UmVmID0gbnVsbDtcbiAgICBfdGhpcy5nZXRNZW51TGlzdFJlZiA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLm1lbnVMaXN0UmVmID0gcmVmO1xuICAgIH07XG4gICAgX3RoaXMuaW5wdXRSZWYgPSBudWxsO1xuICAgIF90aGlzLmdldElucHV0UmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMuaW5wdXRSZWYgPSByZWY7XG4gICAgfTtcbiAgICBfdGhpcy5mb2N1cyA9IF90aGlzLmZvY3VzSW5wdXQ7XG4gICAgX3RoaXMuYmx1ciA9IF90aGlzLmJsdXJJbnB1dDtcbiAgICBfdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSwgYWN0aW9uTWV0YSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25DaGFuZ2UsXG4gICAgICAgIG5hbWUgPSBfdGhpcyRwcm9wcy5uYW1lO1xuICAgICAgYWN0aW9uTWV0YS5uYW1lID0gbmFtZTtcbiAgICAgIF90aGlzLmFyaWFPbkNoYW5nZShuZXdWYWx1ZSwgYWN0aW9uTWV0YSk7XG4gICAgICBvbkNoYW5nZShuZXdWYWx1ZSwgYWN0aW9uTWV0YSk7XG4gICAgfTtcbiAgICBfdGhpcy5zZXRWYWx1ZSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSwgYWN0aW9uLCBvcHRpb24pIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgY2xvc2VNZW51T25TZWxlY3QgPSBfdGhpcyRwcm9wczIuY2xvc2VNZW51T25TZWxlY3QsXG4gICAgICAgIGlzTXVsdGkgPSBfdGhpcyRwcm9wczIuaXNNdWx0aSxcbiAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzMi5pbnB1dFZhbHVlO1xuICAgICAgX3RoaXMub25JbnB1dENoYW5nZSgnJywge1xuICAgICAgICBhY3Rpb246ICdzZXQtdmFsdWUnLFxuICAgICAgICBwcmV2SW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuICAgICAgfSk7XG4gICAgICBpZiAoY2xvc2VNZW51T25TZWxlY3QpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogIWlzTXVsdGlcbiAgICAgICAgfSk7XG4gICAgICAgIF90aGlzLm9uTWVudUNsb3NlKCk7XG4gICAgICB9XG4gICAgICAvLyB3aGVuIHRoZSBzZWxlY3QgdmFsdWUgc2hvdWxkIGNoYW5nZSwgd2Ugc2hvdWxkIHJlc2V0IGZvY3VzZWRWYWx1ZVxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjbGVhckZvY3VzVmFsdWVPblVwZGF0ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBfdGhpcy5vbkNoYW5nZShuZXdWYWx1ZSwge1xuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgb3B0aW9uOiBvcHRpb25cbiAgICAgIH0pO1xuICAgIH07XG4gICAgX3RoaXMuc2VsZWN0T3B0aW9uID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGJsdXJJbnB1dE9uU2VsZWN0ID0gX3RoaXMkcHJvcHMzLmJsdXJJbnB1dE9uU2VsZWN0LFxuICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHMzLmlzTXVsdGksXG4gICAgICAgIG5hbWUgPSBfdGhpcyRwcm9wczMubmFtZTtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlO1xuICAgICAgdmFyIGRlc2VsZWN0ZWQgPSBpc011bHRpICYmIF90aGlzLmlzT3B0aW9uU2VsZWN0ZWQobmV3VmFsdWUsIHNlbGVjdFZhbHVlKTtcbiAgICAgIHZhciBpc0Rpc2FibGVkID0gX3RoaXMuaXNPcHRpb25EaXNhYmxlZChuZXdWYWx1ZSwgc2VsZWN0VmFsdWUpO1xuICAgICAgaWYgKGRlc2VsZWN0ZWQpIHtcbiAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IF90aGlzLmdldE9wdGlvblZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgX3RoaXMuc2V0VmFsdWUobXVsdGlWYWx1ZUFzVmFsdWUoc2VsZWN0VmFsdWUuZmlsdGVyKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLmdldE9wdGlvblZhbHVlKGkpICE9PSBjYW5kaWRhdGU7XG4gICAgICAgIH0pKSwgJ2Rlc2VsZWN0LW9wdGlvbicsIG5ld1ZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzRGlzYWJsZWQpIHtcbiAgICAgICAgLy8gU2VsZWN0IG9wdGlvbiBpZiBvcHRpb24gaXMgbm90IGRpc2FibGVkXG4gICAgICAgIGlmIChpc011bHRpKSB7XG4gICAgICAgICAgX3RoaXMuc2V0VmFsdWUobXVsdGlWYWx1ZUFzVmFsdWUoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShzZWxlY3RWYWx1ZSksIFtuZXdWYWx1ZV0pKSwgJ3NlbGVjdC1vcHRpb24nLCBuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMuc2V0VmFsdWUoc2luZ2xlVmFsdWVBc1ZhbHVlKG5ld1ZhbHVlKSwgJ3NlbGVjdC1vcHRpb24nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuYXJpYU9uQ2hhbmdlKHNpbmdsZVZhbHVlQXNWYWx1ZShuZXdWYWx1ZSksIHtcbiAgICAgICAgICBhY3Rpb246ICdzZWxlY3Qtb3B0aW9uJyxcbiAgICAgICAgICBvcHRpb246IG5ld1ZhbHVlLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChibHVySW5wdXRPblNlbGVjdCkge1xuICAgICAgICBfdGhpcy5ibHVySW5wdXQoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF90aGlzLnJlbW92ZVZhbHVlID0gZnVuY3Rpb24gKHJlbW92ZWRWYWx1ZSkge1xuICAgICAgdmFyIGlzTXVsdGkgPSBfdGhpcy5wcm9wcy5pc011bHRpO1xuICAgICAgdmFyIHNlbGVjdFZhbHVlID0gX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICB2YXIgY2FuZGlkYXRlID0gX3RoaXMuZ2V0T3B0aW9uVmFsdWUocmVtb3ZlZFZhbHVlKTtcbiAgICAgIHZhciBuZXdWYWx1ZUFycmF5ID0gc2VsZWN0VmFsdWUuZmlsdGVyKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5nZXRPcHRpb25WYWx1ZShpKSAhPT0gY2FuZGlkYXRlO1xuICAgICAgfSk7XG4gICAgICB2YXIgbmV3VmFsdWUgPSB2YWx1ZVRlcm5hcnkoaXNNdWx0aSwgbmV3VmFsdWVBcnJheSwgbmV3VmFsdWVBcnJheVswXSB8fCBudWxsKTtcbiAgICAgIF90aGlzLm9uQ2hhbmdlKG5ld1ZhbHVlLCB7XG4gICAgICAgIGFjdGlvbjogJ3JlbW92ZS12YWx1ZScsXG4gICAgICAgIHJlbW92ZWRWYWx1ZTogcmVtb3ZlZFZhbHVlXG4gICAgICB9KTtcbiAgICAgIF90aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB9O1xuICAgIF90aGlzLmNsZWFyVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc2VsZWN0VmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICAgIF90aGlzLm9uQ2hhbmdlKHZhbHVlVGVybmFyeShfdGhpcy5wcm9wcy5pc011bHRpLCBbXSwgbnVsbCksIHtcbiAgICAgICAgYWN0aW9uOiAnY2xlYXInLFxuICAgICAgICByZW1vdmVkVmFsdWVzOiBzZWxlY3RWYWx1ZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBfdGhpcy5wb3BWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBpc011bHRpID0gX3RoaXMucHJvcHMuaXNNdWx0aTtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlO1xuICAgICAgdmFyIGxhc3RTZWxlY3RlZFZhbHVlID0gc2VsZWN0VmFsdWVbc2VsZWN0VmFsdWUubGVuZ3RoIC0gMV07XG4gICAgICB2YXIgbmV3VmFsdWVBcnJheSA9IHNlbGVjdFZhbHVlLnNsaWNlKDAsIHNlbGVjdFZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgdmFyIG5ld1ZhbHVlID0gdmFsdWVUZXJuYXJ5KGlzTXVsdGksIG5ld1ZhbHVlQXJyYXksIG5ld1ZhbHVlQXJyYXlbMF0gfHwgbnVsbCk7XG4gICAgICBfdGhpcy5vbkNoYW5nZShuZXdWYWx1ZSwge1xuICAgICAgICBhY3Rpb246ICdwb3AtdmFsdWUnLFxuICAgICAgICByZW1vdmVkVmFsdWU6IGxhc3RTZWxlY3RlZFZhbHVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIF90aGlzLmdldEZvY3VzZWRPcHRpb25JZCA9IGZ1bmN0aW9uIChmb2N1c2VkT3B0aW9uKSB7XG4gICAgICByZXR1cm4gZ2V0Rm9jdXNlZE9wdGlvbklkKF90aGlzLnN0YXRlLmZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzLCBmb2N1c2VkT3B0aW9uKTtcbiAgICB9O1xuICAgIF90aGlzLmdldEZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGJ1aWxkRm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMoYnVpbGRDYXRlZ29yaXplZE9wdGlvbnMoX3RoaXMucHJvcHMsIF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlKSwgX3RoaXMuZ2V0RWxlbWVudElkKCdvcHRpb24nKSk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICB9O1xuICAgIF90aGlzLmN4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3NOYW1lcy5hcHBseSh2b2lkIDAsIFtfdGhpcy5wcm9wcy5jbGFzc05hbWVQcmVmaXhdLmNvbmNhdChhcmdzKSk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRPcHRpb25MYWJlbCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXR1cm4gZ2V0T3B0aW9uTGFiZWwoX3RoaXMucHJvcHMsIGRhdGEpO1xuICAgIH07XG4gICAgX3RoaXMuZ2V0T3B0aW9uVmFsdWUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIGdldE9wdGlvblZhbHVlKF90aGlzLnByb3BzLCBkYXRhKTtcbiAgICB9O1xuICAgIF90aGlzLmdldFN0eWxlcyA9IGZ1bmN0aW9uIChrZXksIHByb3BzKSB7XG4gICAgICB2YXIgdW5zdHlsZWQgPSBfdGhpcy5wcm9wcy51bnN0eWxlZDtcbiAgICAgIHZhciBiYXNlID0gZGVmYXVsdFN0eWxlc1trZXldKHByb3BzLCB1bnN0eWxlZCk7XG4gICAgICBiYXNlLmJveFNpemluZyA9ICdib3JkZXItYm94JztcbiAgICAgIHZhciBjdXN0b20gPSBfdGhpcy5wcm9wcy5zdHlsZXNba2V5XTtcbiAgICAgIHJldHVybiBjdXN0b20gPyBjdXN0b20oYmFzZSwgcHJvcHMpIDogYmFzZTtcbiAgICB9O1xuICAgIF90aGlzLmdldENsYXNzTmFtZXMgPSBmdW5jdGlvbiAoa2V5LCBwcm9wcykge1xuICAgICAgdmFyIF90aGlzJHByb3BzJGNsYXNzTmFtZSwgX3RoaXMkcHJvcHMkY2xhc3NOYW1lMjtcbiAgICAgIHJldHVybiAoX3RoaXMkcHJvcHMkY2xhc3NOYW1lID0gKF90aGlzJHByb3BzJGNsYXNzTmFtZTIgPSBfdGhpcy5wcm9wcy5jbGFzc05hbWVzKVtrZXldKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRjbGFzc05hbWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJGNsYXNzTmFtZS5jYWxsKF90aGlzJHByb3BzJGNsYXNzTmFtZTIsIHByb3BzKTtcbiAgICB9O1xuICAgIF90aGlzLmdldEVsZW1lbnRJZCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQoX3RoaXMuc3RhdGUuaW5zdGFuY2VQcmVmaXgsIFwiLVwiKS5jb25jYXQoZWxlbWVudCk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRDb21wb25lbnRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRDb21wb25lbnRzKF90aGlzLnByb3BzKTtcbiAgICB9O1xuICAgIF90aGlzLmJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKF90aGlzLnByb3BzLCBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZSk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRDYXRlZ29yaXplZE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMucHJvcHMubWVudUlzT3BlbiA/IF90aGlzLmJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKCkgOiBbXTtcbiAgICB9O1xuICAgIF90aGlzLmJ1aWxkRm9jdXNhYmxlT3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBidWlsZEZvY3VzYWJsZU9wdGlvbnNGcm9tQ2F0ZWdvcml6ZWRPcHRpb25zKF90aGlzLmJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKCkpO1xuICAgIH07XG4gICAgX3RoaXMuZ2V0Rm9jdXNhYmxlT3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5tZW51SXNPcGVuID8gX3RoaXMuYnVpbGRGb2N1c2FibGVPcHRpb25zKCkgOiBbXTtcbiAgICB9O1xuICAgIF90aGlzLmFyaWFPbkNoYW5nZSA9IGZ1bmN0aW9uICh2YWx1ZSwgYWN0aW9uTWV0YSkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBhcmlhU2VsZWN0aW9uOiBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSwgYWN0aW9uTWV0YSlcbiAgICAgIH0pO1xuICAgIH07XG4gICAgX3RoaXMub25NZW51TW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIF90aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB9O1xuICAgIF90aGlzLm9uTWVudU1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgX3RoaXMuYmxvY2tPcHRpb25Ib3ZlciA9IGZhbHNlO1xuICAgIH07XG4gICAgX3RoaXMub25Db250cm9sTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBFdmVudCBjYXB0dXJlZCBieSBkcm9wZG93biBpbmRpY2F0b3JcbiAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBvcGVuTWVudU9uQ2xpY2sgPSBfdGhpcy5wcm9wcy5vcGVuTWVudU9uQ2xpY2s7XG4gICAgICBpZiAoIV90aGlzLnN0YXRlLmlzRm9jdXNlZCkge1xuICAgICAgICBpZiAob3Blbk1lbnVPbkNsaWNrKSB7XG4gICAgICAgICAgX3RoaXMub3BlbkFmdGVyRm9jdXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgIH0gZWxzZSBpZiAoIV90aGlzLnByb3BzLm1lbnVJc09wZW4pIHtcbiAgICAgICAgaWYgKG9wZW5NZW51T25DbGljaykge1xuICAgICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdJTlBVVCcgJiYgZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdURVhUQVJFQScpIHtcbiAgICAgICAgICBfdGhpcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdJTlBVVCcgJiYgZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdURVhUQVJFQScpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF90aGlzLm9uRHJvcGRvd25JbmRpY2F0b3JNb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIGlnbm9yZSBtb3VzZSBldmVudHMgdGhhdCB3ZXJlbid0IHRyaWdnZXJlZCBieSB0aGUgcHJpbWFyeSBidXR0b25cbiAgICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSAnbW91c2Vkb3duJyAmJiBldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKF90aGlzLnByb3BzLmlzRGlzYWJsZWQpIHJldHVybjtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzNC5pc011bHRpLFxuICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHM0Lm1lbnVJc09wZW47XG4gICAgICBfdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlOiAhaXNNdWx0aVxuICAgICAgICB9KTtcbiAgICAgICAgX3RoaXMub25NZW51Q2xvc2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuICAgIF90aGlzLm9uQ2xlYXJJbmRpY2F0b3JNb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIGlnbm9yZSBtb3VzZSBldmVudHMgdGhhdCB3ZXJlbid0IHRyaWdnZXJlZCBieSB0aGUgcHJpbWFyeSBidXR0b25cbiAgICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSAnbW91c2Vkb3duJyAmJiBldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX3RoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIF90aGlzLm9wZW5BZnRlckZvY3VzID0gZmFsc2U7XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3RvdWNoZW5kJykge1xuICAgICAgICBfdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF90aGlzLm9uU2Nyb2xsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAodHlwZW9mIF90aGlzLnByb3BzLmNsb3NlTWVudU9uU2Nyb2xsID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGlzRG9jdW1lbnRFbGVtZW50KGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICBfdGhpcy5wcm9wcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBfdGhpcy5wcm9wcy5jbG9zZU1lbnVPblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMuY2xvc2VNZW51T25TY3JvbGwoZXZlbnQpKSB7XG4gICAgICAgICAgX3RoaXMucHJvcHMub25NZW51Q2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgX3RoaXMub25Db21wb3NpdGlvblN0YXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuaXNDb21wb3NpbmcgPSB0cnVlO1xuICAgIH07XG4gICAgX3RoaXMub25Db21wb3NpdGlvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgfTtcbiAgICBfdGhpcy5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciB0b3VjaGVzID0gX3JlZjIudG91Y2hlcztcbiAgICAgIHZhciB0b3VjaCA9IHRvdWNoZXMgJiYgdG91Y2hlcy5pdGVtKDApO1xuICAgICAgaWYgKCF0b3VjaCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBfdGhpcy5pbml0aWFsVG91Y2hYID0gdG91Y2guY2xpZW50WDtcbiAgICAgIF90aGlzLmluaXRpYWxUb3VjaFkgPSB0b3VjaC5jbGllbnRZO1xuICAgICAgX3RoaXMudXNlcklzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9O1xuICAgIF90aGlzLm9uVG91Y2hNb3ZlID0gZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICB2YXIgdG91Y2hlcyA9IF9yZWYzLnRvdWNoZXM7XG4gICAgICB2YXIgdG91Y2ggPSB0b3VjaGVzICYmIHRvdWNoZXMuaXRlbSgwKTtcbiAgICAgIGlmICghdG91Y2gpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGRlbHRhWCA9IE1hdGguYWJzKHRvdWNoLmNsaWVudFggLSBfdGhpcy5pbml0aWFsVG91Y2hYKTtcbiAgICAgIHZhciBkZWx0YVkgPSBNYXRoLmFicyh0b3VjaC5jbGllbnRZIC0gX3RoaXMuaW5pdGlhbFRvdWNoWSk7XG4gICAgICB2YXIgbW92ZVRocmVzaG9sZCA9IDU7XG4gICAgICBfdGhpcy51c2VySXNEcmFnZ2luZyA9IGRlbHRhWCA+IG1vdmVUaHJlc2hvbGQgfHwgZGVsdGFZID4gbW92ZVRocmVzaG9sZDtcbiAgICB9O1xuICAgIF90aGlzLm9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy51c2VySXNEcmFnZ2luZykgcmV0dXJuO1xuXG4gICAgICAvLyBjbG9zZSB0aGUgbWVudSBpZiB0aGUgdXNlciB0YXBzIG91dHNpZGVcbiAgICAgIC8vIHdlJ3JlIGNoZWNraW5nIG9uIGV2ZW50LnRhcmdldCBoZXJlIGluc3RlYWQgb2YgZXZlbnQuY3VycmVudFRhcmdldCwgYmVjYXVzZSB3ZSB3YW50IHRvIGFzc2VydCBpbmZvcm1hdGlvblxuICAgICAgLy8gb24gZXZlbnRzIG9uIGNoaWxkIGVsZW1lbnRzLCBub3QgdGhlIGRvY3VtZW50ICh3aGljaCB3ZSd2ZSBhdHRhY2hlZCB0aGlzIGhhbmRsZXIgdG8pLlxuICAgICAgaWYgKF90aGlzLmNvbnRyb2xSZWYgJiYgIV90aGlzLmNvbnRyb2xSZWYuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiBfdGhpcy5tZW51TGlzdFJlZiAmJiAhX3RoaXMubWVudUxpc3RSZWYuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICBfdGhpcy5ibHVySW5wdXQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gcmVzZXQgbW92ZSB2YXJzXG4gICAgICBfdGhpcy5pbml0aWFsVG91Y2hYID0gMDtcbiAgICAgIF90aGlzLmluaXRpYWxUb3VjaFkgPSAwO1xuICAgIH07XG4gICAgX3RoaXMub25Db250cm9sVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy51c2VySXNEcmFnZ2luZykgcmV0dXJuO1xuICAgICAgX3RoaXMub25Db250cm9sTW91c2VEb3duKGV2ZW50KTtcbiAgICB9O1xuICAgIF90aGlzLm9uQ2xlYXJJbmRpY2F0b3JUb3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnVzZXJJc0RyYWdnaW5nKSByZXR1cm47XG4gICAgICBfdGhpcy5vbkNsZWFySW5kaWNhdG9yTW91c2VEb3duKGV2ZW50KTtcbiAgICB9O1xuICAgIF90aGlzLm9uRHJvcGRvd25JbmRpY2F0b3JUb3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnVzZXJJc0RyYWdnaW5nKSByZXR1cm47XG4gICAgICBfdGhpcy5vbkRyb3Bkb3duSW5kaWNhdG9yTW91c2VEb3duKGV2ZW50KTtcbiAgICB9O1xuICAgIF90aGlzLmhhbmRsZUlucHV0Q2hhbmdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgcHJldklucHV0VmFsdWUgPSBfdGhpcy5wcm9wcy5pbnB1dFZhbHVlO1xuICAgICAgdmFyIGlucHV0VmFsdWUgPSBldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIF90aGlzLm9uSW5wdXRDaGFuZ2UoaW5wdXRWYWx1ZSwge1xuICAgICAgICBhY3Rpb246ICdpbnB1dC1jaGFuZ2UnLFxuICAgICAgICBwcmV2SW5wdXRWYWx1ZTogcHJldklucHV0VmFsdWVcbiAgICAgIH0pO1xuICAgICAgaWYgKCFfdGhpcy5wcm9wcy5tZW51SXNPcGVuKSB7XG4gICAgICAgIF90aGlzLm9uTWVudU9wZW4oKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF90aGlzLm9uSW5wdXRGb2N1cyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRm9jdXMpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25Gb2N1cyhldmVudCk7XG4gICAgICB9XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogZmFsc2UsXG4gICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBpZiAoX3RoaXMub3BlbkFmdGVyRm9jdXMgfHwgX3RoaXMucHJvcHMub3Blbk1lbnVPbkZvY3VzKSB7XG4gICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgfVxuICAgICAgX3RoaXMub3BlbkFmdGVyRm9jdXMgPSBmYWxzZTtcbiAgICB9O1xuICAgIF90aGlzLm9uSW5wdXRCbHVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgcHJldklucHV0VmFsdWUgPSBfdGhpcy5wcm9wcy5pbnB1dFZhbHVlO1xuICAgICAgaWYgKF90aGlzLm1lbnVMaXN0UmVmICYmIF90aGlzLm1lbnVMaXN0UmVmLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIF90aGlzLmlucHV0UmVmLmZvY3VzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25CbHVyKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIF90aGlzLm9uSW5wdXRDaGFuZ2UoJycsIHtcbiAgICAgICAgYWN0aW9uOiAnaW5wdXQtYmx1cicsXG4gICAgICAgIHByZXZJbnB1dFZhbHVlOiBwcmV2SW5wdXRWYWx1ZVxuICAgICAgfSk7XG4gICAgICBfdGhpcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkVmFsdWU6IG51bGwsXG4gICAgICAgIGlzRm9jdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH07XG4gICAgX3RoaXMub25PcHRpb25Ib3ZlciA9IGZ1bmN0aW9uIChmb2N1c2VkT3B0aW9uKSB7XG4gICAgICBpZiAoX3RoaXMuYmxvY2tPcHRpb25Ib3ZlciB8fCBfdGhpcy5zdGF0ZS5mb2N1c2VkT3B0aW9uID09PSBmb2N1c2VkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBvcHRpb25zID0gX3RoaXMuZ2V0Rm9jdXNhYmxlT3B0aW9ucygpO1xuICAgICAgdmFyIGZvY3VzZWRPcHRpb25JbmRleCA9IG9wdGlvbnMuaW5kZXhPZihmb2N1c2VkT3B0aW9uKTtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNlZE9wdGlvbixcbiAgICAgICAgZm9jdXNlZE9wdGlvbklkOiBmb2N1c2VkT3B0aW9uSW5kZXggPiAtMSA/IF90aGlzLmdldEZvY3VzZWRPcHRpb25JZChmb2N1c2VkT3B0aW9uKSA6IG51bGxcbiAgICAgIH0pO1xuICAgIH07XG4gICAgX3RoaXMuc2hvdWxkSGlkZVNlbGVjdGVkT3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBzaG91bGRIaWRlU2VsZWN0ZWRPcHRpb25zKF90aGlzLnByb3BzKTtcbiAgICB9O1xuICAgIF90aGlzLm9uVmFsdWVJbnB1dEZvY3VzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBfdGhpcy5mb2N1cygpO1xuICAgIH07XG4gICAgX3RoaXMub25LZXlEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGlzTXVsdGkgPSBfdGhpcyRwcm9wczUuaXNNdWx0aSxcbiAgICAgICAgYmFja3NwYWNlUmVtb3Zlc1ZhbHVlID0gX3RoaXMkcHJvcHM1LmJhY2tzcGFjZVJlbW92ZXNWYWx1ZSxcbiAgICAgICAgZXNjYXBlQ2xlYXJzVmFsdWUgPSBfdGhpcyRwcm9wczUuZXNjYXBlQ2xlYXJzVmFsdWUsXG4gICAgICAgIGlucHV0VmFsdWUgPSBfdGhpcyRwcm9wczUuaW5wdXRWYWx1ZSxcbiAgICAgICAgaXNDbGVhcmFibGUgPSBfdGhpcyRwcm9wczUuaXNDbGVhcmFibGUsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczUuaXNEaXNhYmxlZCxcbiAgICAgICAgbWVudUlzT3BlbiA9IF90aGlzJHByb3BzNS5tZW51SXNPcGVuLFxuICAgICAgICBvbktleURvd24gPSBfdGhpcyRwcm9wczUub25LZXlEb3duLFxuICAgICAgICB0YWJTZWxlY3RzVmFsdWUgPSBfdGhpcyRwcm9wczUudGFiU2VsZWN0c1ZhbHVlLFxuICAgICAgICBvcGVuTWVudU9uRm9jdXMgPSBfdGhpcyRwcm9wczUub3Blbk1lbnVPbkZvY3VzO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gX3RoaXMuc3RhdGUsXG4gICAgICAgIGZvY3VzZWRPcHRpb24gPSBfdGhpcyRzdGF0ZS5mb2N1c2VkT3B0aW9uLFxuICAgICAgICBmb2N1c2VkVmFsdWUgPSBfdGhpcyRzdGF0ZS5mb2N1c2VkVmFsdWUsXG4gICAgICAgIHNlbGVjdFZhbHVlID0gX3RoaXMkc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICBpZiAoaXNEaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgaWYgKHR5cGVvZiBvbktleURvd24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb25LZXlEb3duKGV2ZW50KTtcbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQmxvY2sgb3B0aW9uIGhvdmVyIGV2ZW50cyB3aGVuIHRoZSB1c2VyIGhhcyBqdXN0IHByZXNzZWQgYSBrZXlcbiAgICAgIF90aGlzLmJsb2NrT3B0aW9uSG92ZXIgPSB0cnVlO1xuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgICBpZiAoIWlzTXVsdGkgfHwgaW5wdXRWYWx1ZSkgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLmZvY3VzVmFsdWUoJ3ByZXZpb3VzJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgIGlmICghaXNNdWx0aSB8fCBpbnB1dFZhbHVlKSByZXR1cm47XG4gICAgICAgICAgX3RoaXMuZm9jdXNWYWx1ZSgnbmV4dCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdEZWxldGUnOlxuICAgICAgICBjYXNlICdCYWNrc3BhY2UnOlxuICAgICAgICAgIGlmIChpbnB1dFZhbHVlKSByZXR1cm47XG4gICAgICAgICAgaWYgKGZvY3VzZWRWYWx1ZSkge1xuICAgICAgICAgICAgX3RoaXMucmVtb3ZlVmFsdWUoZm9jdXNlZFZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFiYWNrc3BhY2VSZW1vdmVzVmFsdWUpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChpc011bHRpKSB7XG4gICAgICAgICAgICAgIF90aGlzLnBvcFZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQ2xlYXJhYmxlKSB7XG4gICAgICAgICAgICAgIF90aGlzLmNsZWFyVmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgaWYgKF90aGlzLmlzQ29tcG9zaW5nKSByZXR1cm47XG4gICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5IHx8ICFtZW51SXNPcGVuIHx8ICF0YWJTZWxlY3RzVmFsdWUgfHwgIWZvY3VzZWRPcHRpb24gfHxcbiAgICAgICAgICAvLyBkb24ndCBjYXB0dXJlIHRoZSBldmVudCBpZiB0aGUgbWVudSBvcGVucyBvbiBmb2N1cyBhbmQgdGhlIGZvY3VzZWRcbiAgICAgICAgICAvLyBvcHRpb24gaXMgYWxyZWFkeSBzZWxlY3RlZDsgaXQgYnJlYWtzIHRoZSBmbG93IG9mIG5hdmlnYXRpb25cbiAgICAgICAgICBvcGVuTWVudU9uRm9jdXMgJiYgX3RoaXMuaXNPcHRpb25TZWxlY3RlZChmb2N1c2VkT3B0aW9uLCBzZWxlY3RWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgX3RoaXMuc2VsZWN0T3B0aW9uKGZvY3VzZWRPcHRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDIyOSkge1xuICAgICAgICAgICAgLy8gaWdub3JlIHRoZSBrZXlkb3duIGV2ZW50IGZyb20gYW4gSW5wdXQgTWV0aG9kIEVkaXRvcihJTUUpXG4gICAgICAgICAgICAvLyByZWYuIGh0dHBzOi8vd3d3LnczLm9yZy9UUi91aWV2ZW50cy8jZGV0ZXJtaW5lLWtleWRvd24ta2V5dXAta2V5Q29kZVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtZW51SXNPcGVuKSB7XG4gICAgICAgICAgICBpZiAoIWZvY3VzZWRPcHRpb24pIHJldHVybjtcbiAgICAgICAgICAgIGlmIChfdGhpcy5pc0NvbXBvc2luZykgcmV0dXJuO1xuICAgICAgICAgICAgX3RoaXMuc2VsZWN0T3B0aW9uKGZvY3VzZWRPcHRpb24pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGU6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLm9uSW5wdXRDaGFuZ2UoJycsIHtcbiAgICAgICAgICAgICAgYWN0aW9uOiAnbWVudS1jbG9zZScsXG4gICAgICAgICAgICAgIHByZXZJbnB1dFZhbHVlOiBpbnB1dFZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLm9uTWVudUNsb3NlKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0NsZWFyYWJsZSAmJiBlc2NhcGVDbGVhcnNWYWx1ZSkge1xuICAgICAgICAgICAgX3RoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgLy8gc3BhY2VcbiAgICAgICAgICBpZiAoaW5wdXRWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIW1lbnVJc09wZW4pIHtcbiAgICAgICAgICAgIF90aGlzLm9wZW5NZW51KCdmaXJzdCcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZm9jdXNlZE9wdGlvbikgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLnNlbGVjdE9wdGlvbihmb2N1c2VkT3B0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgaWYgKG1lbnVJc09wZW4pIHtcbiAgICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCd1cCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5vcGVuTWVudSgnbGFzdCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICAgICAgX3RoaXMuZm9jdXNPcHRpb24oJ2Rvd24nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMub3Blbk1lbnUoJ2ZpcnN0Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQYWdlVXAnOlxuICAgICAgICAgIGlmICghbWVudUlzT3BlbikgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCdwYWdldXAnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICAgIGlmICghbWVudUlzT3BlbikgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCdwYWdlZG93bicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdIb21lJzpcbiAgICAgICAgICBpZiAoIW1lbnVJc09wZW4pIHJldHVybjtcbiAgICAgICAgICBfdGhpcy5mb2N1c09wdGlvbignZmlyc3QnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnRW5kJzpcbiAgICAgICAgICBpZiAoIW1lbnVJc09wZW4pIHJldHVybjtcbiAgICAgICAgICBfdGhpcy5mb2N1c09wdGlvbignbGFzdCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfTtcbiAgICBfdGhpcy5zdGF0ZS5pbnN0YW5jZVByZWZpeCA9ICdyZWFjdC1zZWxlY3QtJyArIChfdGhpcy5wcm9wcy5pbnN0YW5jZUlkIHx8ICsraW5zdGFuY2VJZCk7XG4gICAgX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWUgPSBjbGVhblZhbHVlKF9wcm9wcy52YWx1ZSk7XG4gICAgLy8gU2V0IGZvY3VzZWRPcHRpb24gaWYgbWVudUlzT3BlbiBpcyBzZXQgb24gaW5pdCAoZS5nLiBkZWZhdWx0TWVudUlzT3BlbilcbiAgICBpZiAoX3Byb3BzLm1lbnVJc09wZW4gJiYgX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB2YXIgZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMgPSBfdGhpcy5nZXRGb2N1c2FibGVPcHRpb25zV2l0aElkcygpO1xuICAgICAgdmFyIGZvY3VzYWJsZU9wdGlvbnMgPSBfdGhpcy5idWlsZEZvY3VzYWJsZU9wdGlvbnMoKTtcbiAgICAgIHZhciBvcHRpb25JbmRleCA9IGZvY3VzYWJsZU9wdGlvbnMuaW5kZXhPZihfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZVswXSk7XG4gICAgICBfdGhpcy5zdGF0ZS5mb2N1c2FibGVPcHRpb25zV2l0aElkcyA9IGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzO1xuICAgICAgX3RoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbiA9IGZvY3VzYWJsZU9wdGlvbnNbb3B0aW9uSW5kZXhdO1xuICAgICAgX3RoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbklkID0gZ2V0Rm9jdXNlZE9wdGlvbklkKGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzLCBmb2N1c2FibGVPcHRpb25zW29wdGlvbkluZGV4XSk7XG4gICAgfVxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfY3JlYXRlQ2xhc3MoU2VsZWN0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuc3RhcnRMaXN0ZW5pbmdDb21wb3NpdGlvbigpO1xuICAgICAgdGhpcy5zdGFydExpc3RlbmluZ1RvVG91Y2goKTtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNsb3NlTWVudU9uU2Nyb2xsICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgLy8gTGlzdGVuIHRvIGFsbCBzY3JvbGwgZXZlbnRzLCBhbmQgZmlsdGVyIHRoZW0gb3V0IGluc2lkZSBvZiAnb25TY3JvbGwnXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBTY3JvbGwgZm9jdXNlZE9wdGlvbiBpbnRvIHZpZXcgaWYgbWVudUlzT3BlbiBpcyBzZXQgb24gbW91bnQgKGUuZy4gZGVmYXVsdE1lbnVJc09wZW4pXG4gICAgICBpZiAodGhpcy5wcm9wcy5tZW51SXNPcGVuICYmIHRoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbiAmJiB0aGlzLm1lbnVMaXN0UmVmICYmIHRoaXMuZm9jdXNlZE9wdGlvblJlZikge1xuICAgICAgICBzY3JvbGxJbnRvVmlldyh0aGlzLm1lbnVMaXN0UmVmLCB0aGlzLmZvY3VzZWRPcHRpb25SZWYpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczYuaXNEaXNhYmxlZCxcbiAgICAgICAgbWVudUlzT3BlbiA9IF90aGlzJHByb3BzNi5tZW51SXNPcGVuO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgaWYgKFxuICAgICAgLy8gZW5zdXJlIGZvY3VzIGlzIHJlc3RvcmVkIGNvcnJlY3RseSB3aGVuIHRoZSBjb250cm9sIGJlY29tZXMgZW5hYmxlZFxuICAgICAgaXNGb2N1c2VkICYmICFpc0Rpc2FibGVkICYmIHByZXZQcm9wcy5pc0Rpc2FibGVkIHx8XG4gICAgICAvLyBlbnN1cmUgZm9jdXMgaXMgb24gdGhlIElucHV0IHdoZW4gdGhlIG1lbnUgb3BlbnNcbiAgICAgIGlzRm9jdXNlZCAmJiBtZW51SXNPcGVuICYmICFwcmV2UHJvcHMubWVudUlzT3Blbikge1xuICAgICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0ZvY3VzZWQgJiYgaXNEaXNhYmxlZCAmJiAhcHJldlByb3BzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgLy8gZW5zdXJlIHNlbGVjdCBzdGF0ZSBnZXRzIGJsdXJyZWQgaW4gY2FzZSBTZWxlY3QgaXMgcHJvZ3JhbW1hdGljYWxseSBkaXNhYmxlZCB3aGlsZSBmb2N1c2VkXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc0ZvY3VzZWQ6IGZhbHNlXG4gICAgICAgIH0sIHRoaXMub25NZW51Q2xvc2UpO1xuICAgICAgfSBlbHNlIGlmICghaXNGb2N1c2VkICYmICFpc0Rpc2FibGVkICYmIHByZXZQcm9wcy5pc0Rpc2FibGVkICYmIHRoaXMuaW5wdXRSZWYgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgLy8gZW5zdXJlIHNlbGVjdCBzdGF0ZSBnZXRzIGZvY3VzZWQgaW4gY2FzZSBTZWxlY3QgaXMgcHJvZ3JhbWF0aWNhbGx5IHJlLWVuYWJsZWQgd2hpbGUgZm9jdXNlZCAoRmlyZWZveClcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gc2Nyb2xsIHRoZSBmb2N1c2VkIG9wdGlvbiBpbnRvIHZpZXcgaWYgbmVjZXNzYXJ5XG4gICAgICBpZiAodGhpcy5tZW51TGlzdFJlZiAmJiB0aGlzLmZvY3VzZWRPcHRpb25SZWYgJiYgdGhpcy5zY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZSkge1xuICAgICAgICBzY3JvbGxJbnRvVmlldyh0aGlzLm1lbnVMaXN0UmVmLCB0aGlzLmZvY3VzZWRPcHRpb25SZWYpO1xuICAgICAgICB0aGlzLnNjcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nQ29tcG9zaXRpb24oKTtcbiAgICAgIHRoaXMuc3RvcExpc3RlbmluZ1RvVG91Y2goKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIENvbnN1bWVyIEhhbmRsZXJzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIH0sIHtcbiAgICBrZXk6IFwib25NZW51T3BlblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbk1lbnVPcGVuKCkge1xuICAgICAgdGhpcy5wcm9wcy5vbk1lbnVPcGVuKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uTWVudUNsb3NlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uTWVudUNsb3NlKCkge1xuICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKCcnLCB7XG4gICAgICAgIGFjdGlvbjogJ21lbnUtY2xvc2UnLFxuICAgICAgICBwcmV2SW5wdXRWYWx1ZTogdGhpcy5wcm9wcy5pbnB1dFZhbHVlXG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJvcHMub25NZW51Q2xvc2UoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25JbnB1dENoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbklucHV0Q2hhbmdlKG5ld1ZhbHVlLCBhY3Rpb25NZXRhKSB7XG4gICAgICB0aGlzLnByb3BzLm9uSW5wdXRDaGFuZ2UobmV3VmFsdWUsIGFjdGlvbk1ldGEpO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIE1ldGhvZHNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgfSwge1xuICAgIGtleTogXCJmb2N1c0lucHV0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvY3VzSW5wdXQoKSB7XG4gICAgICBpZiAoIXRoaXMuaW5wdXRSZWYpIHJldHVybjtcbiAgICAgIHRoaXMuaW5wdXRSZWYuZm9jdXMoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYmx1cklucHV0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGJsdXJJbnB1dCgpIHtcbiAgICAgIGlmICghdGhpcy5pbnB1dFJlZikgcmV0dXJuO1xuICAgICAgdGhpcy5pbnB1dFJlZi5ibHVyKCk7XG4gICAgfVxuXG4gICAgLy8gYWxpYXNlZCBmb3IgY29uc3VtZXJzXG4gIH0sIHtcbiAgICBrZXk6IFwib3Blbk1lbnVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb3Blbk1lbnUoZm9jdXNPcHRpb24pIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHN0YXRlMiA9IHRoaXMuc3RhdGUsXG4gICAgICAgIHNlbGVjdFZhbHVlID0gX3RoaXMkc3RhdGUyLnNlbGVjdFZhbHVlLFxuICAgICAgICBpc0ZvY3VzZWQgPSBfdGhpcyRzdGF0ZTIuaXNGb2N1c2VkO1xuICAgICAgdmFyIGZvY3VzYWJsZU9wdGlvbnMgPSB0aGlzLmJ1aWxkRm9jdXNhYmxlT3B0aW9ucygpO1xuICAgICAgdmFyIG9wZW5BdEluZGV4ID0gZm9jdXNPcHRpb24gPT09ICdmaXJzdCcgPyAwIDogZm9jdXNhYmxlT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgaWYgKCF0aGlzLnByb3BzLmlzTXVsdGkpIHtcbiAgICAgICAgdmFyIHNlbGVjdGVkSW5kZXggPSBmb2N1c2FibGVPcHRpb25zLmluZGV4T2Yoc2VsZWN0VmFsdWVbMF0pO1xuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgb3BlbkF0SW5kZXggPSBzZWxlY3RlZEluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIG9ubHkgc2Nyb2xsIGlmIHRoZSBtZW51IGlzbid0IGFscmVhZHkgb3BlblxuICAgICAgdGhpcy5zY3JvbGxUb0ZvY3VzZWRPcHRpb25PblVwZGF0ZSA9ICEoaXNGb2N1c2VkICYmIHRoaXMubWVudUxpc3RSZWYpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogZmFsc2UsXG4gICAgICAgIGZvY3VzZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNhYmxlT3B0aW9uc1tvcGVuQXRJbmRleF0sXG4gICAgICAgIGZvY3VzZWRPcHRpb25JZDogdGhpcy5nZXRGb2N1c2VkT3B0aW9uSWQoZm9jdXNhYmxlT3B0aW9uc1tvcGVuQXRJbmRleF0pXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIub25NZW51T3BlbigpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZvY3VzVmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXNWYWx1ZShkaXJlY3Rpb24pIHtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTMgPSB0aGlzLnN0YXRlLFxuICAgICAgICBzZWxlY3RWYWx1ZSA9IF90aGlzJHN0YXRlMy5zZWxlY3RWYWx1ZSxcbiAgICAgICAgZm9jdXNlZFZhbHVlID0gX3RoaXMkc3RhdGUzLmZvY3VzZWRWYWx1ZTtcblxuICAgICAgLy8gT25seSBtdWx0aXNlbGVjdHMgc3VwcG9ydCB2YWx1ZSBmb2N1c2luZ1xuICAgICAgaWYgKCF0aGlzLnByb3BzLmlzTXVsdGkpIHJldHVybjtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkT3B0aW9uOiBudWxsXG4gICAgICB9KTtcbiAgICAgIHZhciBmb2N1c2VkSW5kZXggPSBzZWxlY3RWYWx1ZS5pbmRleE9mKGZvY3VzZWRWYWx1ZSk7XG4gICAgICBpZiAoIWZvY3VzZWRWYWx1ZSkge1xuICAgICAgICBmb2N1c2VkSW5kZXggPSAtMTtcbiAgICAgIH1cbiAgICAgIHZhciBsYXN0SW5kZXggPSBzZWxlY3RWYWx1ZS5sZW5ndGggLSAxO1xuICAgICAgdmFyIG5leHRGb2N1cyA9IC0xO1xuICAgICAgaWYgKCFzZWxlY3RWYWx1ZS5sZW5ndGgpIHJldHVybjtcbiAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3ByZXZpb3VzJzpcbiAgICAgICAgICBpZiAoZm9jdXNlZEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBkb24ndCBjeWNsZSBmcm9tIHRoZSBzdGFydCB0byB0aGUgZW5kXG4gICAgICAgICAgICBuZXh0Rm9jdXMgPSAwO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZm9jdXNlZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgLy8gaWYgbm90aGluZyBpcyBmb2N1c2VkLCBmb2N1cyB0aGUgbGFzdCB2YWx1ZSBmaXJzdFxuICAgICAgICAgICAgbmV4dEZvY3VzID0gbGFzdEluZGV4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXh0Rm9jdXMgPSBmb2N1c2VkSW5kZXggLSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbmV4dCc6XG4gICAgICAgICAgaWYgKGZvY3VzZWRJbmRleCA+IC0xICYmIGZvY3VzZWRJbmRleCA8IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgbmV4dEZvY3VzID0gZm9jdXNlZEluZGV4ICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaW5wdXRJc0hpZGRlbjogbmV4dEZvY3VzICE9PSAtMSxcbiAgICAgICAgZm9jdXNlZFZhbHVlOiBzZWxlY3RWYWx1ZVtuZXh0Rm9jdXNdXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9jdXNPcHRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXNPcHRpb24oKSB7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnZmlyc3QnO1xuICAgICAgdmFyIHBhZ2VTaXplID0gdGhpcy5wcm9wcy5wYWdlU2l6ZTtcbiAgICAgIHZhciBmb2N1c2VkT3B0aW9uID0gdGhpcy5zdGF0ZS5mb2N1c2VkT3B0aW9uO1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLmdldEZvY3VzYWJsZU9wdGlvbnMoKTtcbiAgICAgIGlmICghb3B0aW9ucy5sZW5ndGgpIHJldHVybjtcbiAgICAgIHZhciBuZXh0Rm9jdXMgPSAwOyAvLyBoYW5kbGVzICdmaXJzdCdcbiAgICAgIHZhciBmb2N1c2VkSW5kZXggPSBvcHRpb25zLmluZGV4T2YoZm9jdXNlZE9wdGlvbik7XG4gICAgICBpZiAoIWZvY3VzZWRPcHRpb24pIHtcbiAgICAgICAgZm9jdXNlZEluZGV4ID0gLTE7XG4gICAgICB9XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAndXAnKSB7XG4gICAgICAgIG5leHRGb2N1cyA9IGZvY3VzZWRJbmRleCA+IDAgPyBmb2N1c2VkSW5kZXggLSAxIDogb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdkb3duJykge1xuICAgICAgICBuZXh0Rm9jdXMgPSAoZm9jdXNlZEluZGV4ICsgMSkgJSBvcHRpb25zLmxlbmd0aDtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAncGFnZXVwJykge1xuICAgICAgICBuZXh0Rm9jdXMgPSBmb2N1c2VkSW5kZXggLSBwYWdlU2l6ZTtcbiAgICAgICAgaWYgKG5leHRGb2N1cyA8IDApIG5leHRGb2N1cyA9IDA7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3BhZ2Vkb3duJykge1xuICAgICAgICBuZXh0Rm9jdXMgPSBmb2N1c2VkSW5kZXggKyBwYWdlU2l6ZTtcbiAgICAgICAgaWYgKG5leHRGb2N1cyA+IG9wdGlvbnMubGVuZ3RoIC0gMSkgbmV4dEZvY3VzID0gb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdsYXN0Jykge1xuICAgICAgICBuZXh0Rm9jdXMgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgICB0aGlzLnNjcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkT3B0aW9uOiBvcHRpb25zW25leHRGb2N1c10sXG4gICAgICAgIGZvY3VzZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgZm9jdXNlZE9wdGlvbklkOiB0aGlzLmdldEZvY3VzZWRPcHRpb25JZChvcHRpb25zW25leHRGb2N1c10pXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VGhlbWVcIixcbiAgICB2YWx1ZTpcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBHZXR0ZXJzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICBmdW5jdGlvbiBnZXRUaGVtZSgpIHtcbiAgICAgIC8vIFVzZSB0aGUgZGVmYXVsdCB0aGVtZSBpZiB0aGVyZSBhcmUgbm8gY3VzdG9taXNhdGlvbnMuXG4gICAgICBpZiAoIXRoaXMucHJvcHMudGhlbWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRUaGVtZTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZSB0aGVtZSBwcm9wIGlzIGEgZnVuY3Rpb24sIGFzc3VtZSB0aGUgZnVuY3Rpb25cbiAgICAgIC8vIGtub3dzIGhvdyB0byBtZXJnZSB0aGUgcGFzc2VkLWluIGRlZmF1bHQgdGhlbWUgd2l0aFxuICAgICAgLy8gaXRzIG93biBtb2RpZmljYXRpb25zLlxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnRoZW1lKGRlZmF1bHRUaGVtZSk7XG4gICAgICB9XG4gICAgICAvLyBPdGhlcndpc2UsIGlmIGEgcGxhaW4gdGhlbWUgb2JqZWN0IHdhcyBwYXNzZWQgaW4sXG4gICAgICAvLyBvdmVybGF5IGl0IHdpdGggdGhlIGRlZmF1bHQgdGhlbWUuXG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBkZWZhdWx0VGhlbWUpLCB0aGlzLnByb3BzLnRoZW1lKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0Q29tbW9uUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29tbW9uUHJvcHMoKSB7XG4gICAgICB2YXIgY2xlYXJWYWx1ZSA9IHRoaXMuY2xlYXJWYWx1ZSxcbiAgICAgICAgY3ggPSB0aGlzLmN4LFxuICAgICAgICBnZXRTdHlsZXMgPSB0aGlzLmdldFN0eWxlcyxcbiAgICAgICAgZ2V0Q2xhc3NOYW1lcyA9IHRoaXMuZ2V0Q2xhc3NOYW1lcyxcbiAgICAgICAgZ2V0VmFsdWUgPSB0aGlzLmdldFZhbHVlLFxuICAgICAgICBzZWxlY3RPcHRpb24gPSB0aGlzLnNlbGVjdE9wdGlvbixcbiAgICAgICAgc2V0VmFsdWUgPSB0aGlzLnNldFZhbHVlLFxuICAgICAgICBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgICB2YXIgaXNNdWx0aSA9IHByb3BzLmlzTXVsdGksXG4gICAgICAgIGlzUnRsID0gcHJvcHMuaXNSdGwsXG4gICAgICAgIG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zO1xuICAgICAgdmFyIGhhc1ZhbHVlID0gdGhpcy5oYXNWYWx1ZSgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xlYXJWYWx1ZTogY2xlYXJWYWx1ZSxcbiAgICAgICAgY3g6IGN4LFxuICAgICAgICBnZXRTdHlsZXM6IGdldFN0eWxlcyxcbiAgICAgICAgZ2V0Q2xhc3NOYW1lczogZ2V0Q2xhc3NOYW1lcyxcbiAgICAgICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgICAgICBoYXNWYWx1ZTogaGFzVmFsdWUsXG4gICAgICAgIGlzTXVsdGk6IGlzTXVsdGksXG4gICAgICAgIGlzUnRsOiBpc1J0bCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgc2VsZWN0T3B0aW9uOiBzZWxlY3RPcHRpb24sXG4gICAgICAgIHNlbGVjdFByb3BzOiBwcm9wcyxcbiAgICAgICAgc2V0VmFsdWU6IHNldFZhbHVlLFxuICAgICAgICB0aGVtZTogdGhpcy5nZXRUaGVtZSgpXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNWYWx1ZSgpIHtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IHRoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICByZXR1cm4gc2VsZWN0VmFsdWUubGVuZ3RoID4gMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzT3B0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNPcHRpb25zKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRGb2N1c2FibGVPcHRpb25zKCkubGVuZ3RoO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc0NsZWFyYWJsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0NsZWFyYWJsZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSB0aGlzLnByb3BzLFxuICAgICAgICBpc0NsZWFyYWJsZSA9IF90aGlzJHByb3BzNy5pc0NsZWFyYWJsZSxcbiAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzNy5pc011bHRpO1xuXG4gICAgICAvLyBzaW5nbGUgc2VsZWN0LCBieSBkZWZhdWx0LCBJUyBOT1QgY2xlYXJhYmxlXG4gICAgICAvLyBtdWx0aSBzZWxlY3QsIGJ5IGRlZmF1bHQsIElTIGNsZWFyYWJsZVxuICAgICAgaWYgKGlzQ2xlYXJhYmxlID09PSB1bmRlZmluZWQpIHJldHVybiBpc011bHRpO1xuICAgICAgcmV0dXJuIGlzQ2xlYXJhYmxlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc09wdGlvbkRpc2FibGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzT3B0aW9uRGlzYWJsZWQob3B0aW9uLCBzZWxlY3RWYWx1ZSkge1xuICAgICAgcmV0dXJuIF9pc09wdGlvbkRpc2FibGVkKHRoaXMucHJvcHMsIG9wdGlvbiwgc2VsZWN0VmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc09wdGlvblNlbGVjdGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uLCBzZWxlY3RWYWx1ZSkge1xuICAgICAgcmV0dXJuIF9pc09wdGlvblNlbGVjdGVkKHRoaXMucHJvcHMsIG9wdGlvbiwgc2VsZWN0VmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmaWx0ZXJPcHRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmlsdGVyT3B0aW9uKG9wdGlvbiwgaW5wdXRWYWx1ZSkge1xuICAgICAgcmV0dXJuIF9maWx0ZXJPcHRpb24odGhpcy5wcm9wcywgb3B0aW9uLCBpbnB1dFZhbHVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9ybWF0T3B0aW9uTGFiZWxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9ybWF0T3B0aW9uTGFiZWwoZGF0YSwgY29udGV4dCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLmZvcm1hdE9wdGlvbkxhYmVsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBfaW5wdXRWYWx1ZSA9IHRoaXMucHJvcHMuaW5wdXRWYWx1ZTtcbiAgICAgICAgdmFyIF9zZWxlY3RWYWx1ZSA9IHRoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmZvcm1hdE9wdGlvbkxhYmVsKGRhdGEsIHtcbiAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgICAgIGlucHV0VmFsdWU6IF9pbnB1dFZhbHVlLFxuICAgICAgICAgIHNlbGVjdFZhbHVlOiBfc2VsZWN0VmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25MYWJlbChkYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9ybWF0R3JvdXBMYWJlbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JtYXRHcm91cExhYmVsKGRhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmZvcm1hdEdyb3VwTGFiZWwoZGF0YSk7XG4gICAgfVxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gTW91c2UgSGFuZGxlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgfSwge1xuICAgIGtleTogXCJzdGFydExpc3RlbmluZ0NvbXBvc2l0aW9uXCIsXG4gICAgdmFsdWU6XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gQ29tcG9zaXRpb24gSGFuZGxlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0TGlzdGVuaW5nQ29tcG9zaXRpb24oKSB7XG4gICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbnN0YXJ0JywgdGhpcy5vbkNvbXBvc2l0aW9uU3RhcnQsIGZhbHNlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnLCB0aGlzLm9uQ29tcG9zaXRpb25FbmQsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic3RvcExpc3RlbmluZ0NvbXBvc2l0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0b3BMaXN0ZW5pbmdDb21wb3NpdGlvbigpIHtcbiAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCB0aGlzLm9uQ29tcG9zaXRpb25TdGFydCk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uZW5kJywgdGhpcy5vbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic3RhcnRMaXN0ZW5pbmdUb1RvdWNoXCIsXG4gICAgdmFsdWU6XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gVG91Y2ggSGFuZGxlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0TGlzdGVuaW5nVG9Ub3VjaCgpIHtcbiAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLm9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlLCBmYWxzZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vblRvdWNoRW5kLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInN0b3BMaXN0ZW5pbmdUb1RvdWNoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0b3BMaXN0ZW5pbmdUb1RvdWNoKCkge1xuICAgICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0KTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vblRvdWNoRW5kKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySW5wdXRcIixcbiAgICB2YWx1ZTpcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBSZW5kZXJlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBmdW5jdGlvbiByZW5kZXJJbnB1dCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSB0aGlzLnByb3BzLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHM4LmlzRGlzYWJsZWQsXG4gICAgICAgIGlzU2VhcmNoYWJsZSA9IF90aGlzJHByb3BzOC5pc1NlYXJjaGFibGUsXG4gICAgICAgIGlucHV0SWQgPSBfdGhpcyRwcm9wczguaW5wdXRJZCxcbiAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzOC5pbnB1dFZhbHVlLFxuICAgICAgICB0YWJJbmRleCA9IF90aGlzJHByb3BzOC50YWJJbmRleCxcbiAgICAgICAgZm9ybSA9IF90aGlzJHByb3BzOC5mb3JtLFxuICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHM4Lm1lbnVJc09wZW4sXG4gICAgICAgIHJlcXVpcmVkID0gX3RoaXMkcHJvcHM4LnJlcXVpcmVkO1xuICAgICAgdmFyIF90aGlzJGdldENvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgSW5wdXQgPSBfdGhpcyRnZXRDb21wb25lbnRzLklucHV0O1xuICAgICAgdmFyIF90aGlzJHN0YXRlNCA9IHRoaXMuc3RhdGUsXG4gICAgICAgIGlucHV0SXNIaWRkZW4gPSBfdGhpcyRzdGF0ZTQuaW5wdXRJc0hpZGRlbixcbiAgICAgICAgYXJpYVNlbGVjdGlvbiA9IF90aGlzJHN0YXRlNC5hcmlhU2VsZWN0aW9uO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBpZCA9IGlucHV0SWQgfHwgdGhpcy5nZXRFbGVtZW50SWQoJ2lucHV0Jyk7XG5cbiAgICAgIC8vIGFyaWEgYXR0cmlidXRlcyBtYWtlcyB0aGUgSlNYIFwibm9pc3lcIiwgc2VwYXJhdGVkIGZvciBjbGFyaXR5XG4gICAgICB2YXIgYXJpYUF0dHJpYnV0ZXMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdsaXN0JyxcbiAgICAgICAgJ2FyaWEtZXhwYW5kZWQnOiBtZW51SXNPcGVuLFxuICAgICAgICAnYXJpYS1oYXNwb3B1cCc6IHRydWUsXG4gICAgICAgICdhcmlhLWVycm9ybWVzc2FnZSc6IHRoaXMucHJvcHNbJ2FyaWEtZXJyb3JtZXNzYWdlJ10sXG4gICAgICAgICdhcmlhLWludmFsaWQnOiB0aGlzLnByb3BzWydhcmlhLWludmFsaWQnXSxcbiAgICAgICAgJ2FyaWEtbGFiZWwnOiB0aGlzLnByb3BzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiB0aGlzLnByb3BzWydhcmlhLWxhYmVsbGVkYnknXSxcbiAgICAgICAgJ2FyaWEtcmVxdWlyZWQnOiByZXF1aXJlZCxcbiAgICAgICAgcm9sZTogJ2NvbWJvYm94JyxcbiAgICAgICAgJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCc6IHRoaXMuaXNBcHBsZURldmljZSA/IHVuZGVmaW5lZCA6IHRoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbklkIHx8ICcnXG4gICAgICB9LCBtZW51SXNPcGVuICYmIHtcbiAgICAgICAgJ2FyaWEtY29udHJvbHMnOiB0aGlzLmdldEVsZW1lbnRJZCgnbGlzdGJveCcpXG4gICAgICB9KSwgIWlzU2VhcmNoYWJsZSAmJiB7XG4gICAgICAgICdhcmlhLXJlYWRvbmx5JzogdHJ1ZVxuICAgICAgfSksIHRoaXMuaGFzVmFsdWUoKSA/IChhcmlhU2VsZWN0aW9uID09PSBudWxsIHx8IGFyaWFTZWxlY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFyaWFTZWxlY3Rpb24uYWN0aW9uKSA9PT0gJ2luaXRpYWwtaW5wdXQtZm9jdXMnICYmIHtcbiAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiB0aGlzLmdldEVsZW1lbnRJZCgnbGl2ZS1yZWdpb24nKVxuICAgICAgfSA6IHtcbiAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiB0aGlzLmdldEVsZW1lbnRJZCgncGxhY2Vob2xkZXInKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzU2VhcmNoYWJsZSkge1xuICAgICAgICAvLyB1c2UgYSBkdW1teSBpbnB1dCB0byBtYWludGFpbiBmb2N1cy9ibHVyIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KER1bW15SW5wdXQsIF9leHRlbmRzKHtcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgaW5uZXJSZWY6IHRoaXMuZ2V0SW5wdXRSZWYsXG4gICAgICAgICAgb25CbHVyOiB0aGlzLm9uSW5wdXRCbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlOiBub29wLFxuICAgICAgICAgIG9uRm9jdXM6IHRoaXMub25JbnB1dEZvY3VzLFxuICAgICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgICAgICBpbnB1dE1vZGU6IFwibm9uZVwiLFxuICAgICAgICAgIGZvcm06IGZvcm0sXG4gICAgICAgICAgdmFsdWU6IFwiXCJcbiAgICAgICAgfSwgYXJpYUF0dHJpYnV0ZXMpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnB1dCwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGF1dG9DYXBpdGFsaXplOiBcIm5vbmVcIixcbiAgICAgICAgYXV0b0NvbXBsZXRlOiBcIm9mZlwiLFxuICAgICAgICBhdXRvQ29ycmVjdDogXCJvZmZcIixcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBpbm5lclJlZjogdGhpcy5nZXRJbnB1dFJlZixcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNIaWRkZW46IGlucHV0SXNIaWRkZW4sXG4gICAgICAgIG9uQmx1cjogdGhpcy5vbklucHV0Qmx1cixcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UsXG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25JbnB1dEZvY3VzLFxuICAgICAgICBzcGVsbENoZWNrOiBcImZhbHNlXCIsXG4gICAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgICAgZm9ybTogZm9ybSxcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHZhbHVlOiBpbnB1dFZhbHVlXG4gICAgICB9LCBhcmlhQXR0cmlidXRlcykpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJQbGFjZWhvbGRlck9yVmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyUGxhY2Vob2xkZXJPclZhbHVlKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkZ2V0Q29tcG9uZW50czIgPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgTXVsdGlWYWx1ZSA9IF90aGlzJGdldENvbXBvbmVudHMyLk11bHRpVmFsdWUsXG4gICAgICAgIE11bHRpVmFsdWVDb250YWluZXIgPSBfdGhpcyRnZXRDb21wb25lbnRzMi5NdWx0aVZhbHVlQ29udGFpbmVyLFxuICAgICAgICBNdWx0aVZhbHVlTGFiZWwgPSBfdGhpcyRnZXRDb21wb25lbnRzMi5NdWx0aVZhbHVlTGFiZWwsXG4gICAgICAgIE11bHRpVmFsdWVSZW1vdmUgPSBfdGhpcyRnZXRDb21wb25lbnRzMi5NdWx0aVZhbHVlUmVtb3ZlLFxuICAgICAgICBTaW5nbGVWYWx1ZSA9IF90aGlzJGdldENvbXBvbmVudHMyLlNpbmdsZVZhbHVlLFxuICAgICAgICBQbGFjZWhvbGRlciA9IF90aGlzJGdldENvbXBvbmVudHMyLlBsYWNlaG9sZGVyO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczkgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb250cm9sU2hvdWxkUmVuZGVyVmFsdWUgPSBfdGhpcyRwcm9wczkuY29udHJvbFNob3VsZFJlbmRlclZhbHVlLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHM5LmlzRGlzYWJsZWQsXG4gICAgICAgIGlzTXVsdGkgPSBfdGhpcyRwcm9wczkuaXNNdWx0aSxcbiAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzOS5pbnB1dFZhbHVlLFxuICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzOS5wbGFjZWhvbGRlcjtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBzZWxlY3RWYWx1ZSA9IF90aGlzJHN0YXRlNS5zZWxlY3RWYWx1ZSxcbiAgICAgICAgZm9jdXNlZFZhbHVlID0gX3RoaXMkc3RhdGU1LmZvY3VzZWRWYWx1ZSxcbiAgICAgICAgaXNGb2N1c2VkID0gX3RoaXMkc3RhdGU1LmlzRm9jdXNlZDtcbiAgICAgIGlmICghdGhpcy5oYXNWYWx1ZSgpIHx8ICFjb250cm9sU2hvdWxkUmVuZGVyVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0VmFsdWUgPyBudWxsIDogLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGxhY2Vob2xkZXIsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICAgIGtleTogXCJwbGFjZWhvbGRlclwiLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQsXG4gICAgICAgICAgaW5uZXJQcm9wczoge1xuICAgICAgICAgICAgaWQ6IHRoaXMuZ2V0RWxlbWVudElkKCdwbGFjZWhvbGRlcicpXG4gICAgICAgICAgfVxuICAgICAgICB9KSwgcGxhY2Vob2xkZXIpO1xuICAgICAgfVxuICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdFZhbHVlLm1hcChmdW5jdGlvbiAob3B0LCBpbmRleCkge1xuICAgICAgICAgIHZhciBpc09wdGlvbkZvY3VzZWQgPSBvcHQgPT09IGZvY3VzZWRWYWx1ZTtcbiAgICAgICAgICB2YXIga2V5ID0gXCJcIi5jb25jYXQoX3RoaXMzLmdldE9wdGlvbkxhYmVsKG9wdCksIFwiLVwiKS5jb25jYXQoX3RoaXMzLmdldE9wdGlvblZhbHVlKG9wdCkpO1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNdWx0aVZhbHVlLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgQ29udGFpbmVyOiBNdWx0aVZhbHVlQ29udGFpbmVyLFxuICAgICAgICAgICAgICBMYWJlbDogTXVsdGlWYWx1ZUxhYmVsLFxuICAgICAgICAgICAgICBSZW1vdmU6IE11bHRpVmFsdWVSZW1vdmVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0ZvY3VzZWQ6IGlzT3B0aW9uRm9jdXNlZCxcbiAgICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgIHJlbW92ZVByb3BzOiB7XG4gICAgICAgICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5yZW1vdmVWYWx1ZShvcHQpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvblRvdWNoRW5kOiBmdW5jdGlvbiBvblRvdWNoRW5kKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczMucmVtb3ZlVmFsdWUob3B0KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRhOiBvcHRcbiAgICAgICAgICB9KSwgX3RoaXMzLmZvcm1hdE9wdGlvbkxhYmVsKG9wdCwgJ3ZhbHVlJykpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdmFyIHNpbmdsZVZhbHVlID0gc2VsZWN0VmFsdWVbMF07XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2luZ2xlVmFsdWUsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBkYXRhOiBzaW5nbGVWYWx1ZSxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZFxuICAgICAgfSksIHRoaXMuZm9ybWF0T3B0aW9uTGFiZWwoc2luZ2xlVmFsdWUsICd2YWx1ZScpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyQ2xlYXJJbmRpY2F0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyQ2xlYXJJbmRpY2F0b3IoKSB7XG4gICAgICB2YXIgX3RoaXMkZ2V0Q29tcG9uZW50czMgPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgQ2xlYXJJbmRpY2F0b3IgPSBfdGhpcyRnZXRDb21wb25lbnRzMy5DbGVhckluZGljYXRvcjtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMCA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczEwLmlzRGlzYWJsZWQsXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMTAuaXNMb2FkaW5nO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgaWYgKCF0aGlzLmlzQ2xlYXJhYmxlKCkgfHwgIUNsZWFySW5kaWNhdG9yIHx8IGlzRGlzYWJsZWQgfHwgIXRoaXMuaGFzVmFsdWUoKSB8fCBpc0xvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB2YXIgaW5uZXJQcm9wcyA9IHtcbiAgICAgICAgb25Nb3VzZURvd246IHRoaXMub25DbGVhckluZGljYXRvck1vdXNlRG93bixcbiAgICAgICAgb25Ub3VjaEVuZDogdGhpcy5vbkNsZWFySW5kaWNhdG9yVG91Y2hFbmQsXG4gICAgICAgICdhcmlhLWhpZGRlbic6ICd0cnVlJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDbGVhckluZGljYXRvciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlubmVyUHJvcHM6IGlubmVyUHJvcHMsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkXG4gICAgICB9KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckxvYWRpbmdJbmRpY2F0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyTG9hZGluZ0luZGljYXRvcigpIHtcbiAgICAgIHZhciBfdGhpcyRnZXRDb21wb25lbnRzNCA9IHRoaXMuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBMb2FkaW5nSW5kaWNhdG9yID0gX3RoaXMkZ2V0Q29tcG9uZW50czQuTG9hZGluZ0luZGljYXRvcjtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczExLmlzRGlzYWJsZWQsXG4gICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMTEuaXNMb2FkaW5nO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgaWYgKCFMb2FkaW5nSW5kaWNhdG9yIHx8ICFpc0xvYWRpbmcpIHJldHVybiBudWxsO1xuICAgICAgdmFyIGlubmVyUHJvcHMgPSB7XG4gICAgICAgICdhcmlhLWhpZGRlbic6ICd0cnVlJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMb2FkaW5nSW5kaWNhdG9yLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaW5uZXJQcm9wczogaW5uZXJQcm9wcyxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySW5kaWNhdG9yU2VwYXJhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckluZGljYXRvclNlcGFyYXRvcigpIHtcbiAgICAgIHZhciBfdGhpcyRnZXRDb21wb25lbnRzNSA9IHRoaXMuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBEcm9wZG93bkluZGljYXRvciA9IF90aGlzJGdldENvbXBvbmVudHM1LkRyb3Bkb3duSW5kaWNhdG9yLFxuICAgICAgICBJbmRpY2F0b3JTZXBhcmF0b3IgPSBfdGhpcyRnZXRDb21wb25lbnRzNS5JbmRpY2F0b3JTZXBhcmF0b3I7XG5cbiAgICAgIC8vIHNlcGFyYXRvciBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCB0aGUgZHJvcGRvd24gaW5kaWNhdG9yXG4gICAgICBpZiAoIURyb3Bkb3duSW5kaWNhdG9yIHx8ICFJbmRpY2F0b3JTZXBhcmF0b3IpIHJldHVybiBudWxsO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBpc0Rpc2FibGVkID0gdGhpcy5wcm9wcy5pc0Rpc2FibGVkO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluZGljYXRvclNlcGFyYXRvciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkXG4gICAgICB9KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckRyb3Bkb3duSW5kaWNhdG9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckRyb3Bkb3duSW5kaWNhdG9yKCkge1xuICAgICAgdmFyIF90aGlzJGdldENvbXBvbmVudHM2ID0gdGhpcy5nZXRDb21wb25lbnRzKCksXG4gICAgICAgIERyb3Bkb3duSW5kaWNhdG9yID0gX3RoaXMkZ2V0Q29tcG9uZW50czYuRHJvcGRvd25JbmRpY2F0b3I7XG4gICAgICBpZiAoIURyb3Bkb3duSW5kaWNhdG9yKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgaXNEaXNhYmxlZCA9IHRoaXMucHJvcHMuaXNEaXNhYmxlZDtcbiAgICAgIHZhciBpc0ZvY3VzZWQgPSB0aGlzLnN0YXRlLmlzRm9jdXNlZDtcbiAgICAgIHZhciBpbm5lclByb3BzID0ge1xuICAgICAgICBvbk1vdXNlRG93bjogdGhpcy5vbkRyb3Bkb3duSW5kaWNhdG9yTW91c2VEb3duLFxuICAgICAgICBvblRvdWNoRW5kOiB0aGlzLm9uRHJvcGRvd25JbmRpY2F0b3JUb3VjaEVuZCxcbiAgICAgICAgJ2FyaWEtaGlkZGVuJzogJ3RydWUnXG4gICAgICB9O1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyb3Bkb3duSW5kaWNhdG9yLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaW5uZXJQcm9wczogaW5uZXJQcm9wcyxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTWVudVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJNZW51KCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkZ2V0Q29tcG9uZW50czcgPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgR3JvdXAgPSBfdGhpcyRnZXRDb21wb25lbnRzNy5Hcm91cCxcbiAgICAgICAgR3JvdXBIZWFkaW5nID0gX3RoaXMkZ2V0Q29tcG9uZW50czcuR3JvdXBIZWFkaW5nLFxuICAgICAgICBNZW51ID0gX3RoaXMkZ2V0Q29tcG9uZW50czcuTWVudSxcbiAgICAgICAgTWVudUxpc3QgPSBfdGhpcyRnZXRDb21wb25lbnRzNy5NZW51TGlzdCxcbiAgICAgICAgTWVudVBvcnRhbCA9IF90aGlzJGdldENvbXBvbmVudHM3Lk1lbnVQb3J0YWwsXG4gICAgICAgIExvYWRpbmdNZXNzYWdlID0gX3RoaXMkZ2V0Q29tcG9uZW50czcuTG9hZGluZ01lc3NhZ2UsXG4gICAgICAgIE5vT3B0aW9uc01lc3NhZ2UgPSBfdGhpcyRnZXRDb21wb25lbnRzNy5Ob09wdGlvbnNNZXNzYWdlLFxuICAgICAgICBPcHRpb24gPSBfdGhpcyRnZXRDb21wb25lbnRzNy5PcHRpb247XG4gICAgICB2YXIgY29tbW9uUHJvcHMgPSB0aGlzLmNvbW1vblByb3BzO1xuICAgICAgdmFyIGZvY3VzZWRPcHRpb24gPSB0aGlzLnN0YXRlLmZvY3VzZWRPcHRpb247XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNhcHR1cmVNZW51U2Nyb2xsID0gX3RoaXMkcHJvcHMxMi5jYXB0dXJlTWVudVNjcm9sbCxcbiAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzMTIuaW5wdXRWYWx1ZSxcbiAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMxMi5pc0xvYWRpbmcsXG4gICAgICAgIGxvYWRpbmdNZXNzYWdlID0gX3RoaXMkcHJvcHMxMi5sb2FkaW5nTWVzc2FnZSxcbiAgICAgICAgbWluTWVudUhlaWdodCA9IF90aGlzJHByb3BzMTIubWluTWVudUhlaWdodCxcbiAgICAgICAgbWF4TWVudUhlaWdodCA9IF90aGlzJHByb3BzMTIubWF4TWVudUhlaWdodCxcbiAgICAgICAgbWVudUlzT3BlbiA9IF90aGlzJHByb3BzMTIubWVudUlzT3BlbixcbiAgICAgICAgbWVudVBsYWNlbWVudCA9IF90aGlzJHByb3BzMTIubWVudVBsYWNlbWVudCxcbiAgICAgICAgbWVudVBvc2l0aW9uID0gX3RoaXMkcHJvcHMxMi5tZW51UG9zaXRpb24sXG4gICAgICAgIG1lbnVQb3J0YWxUYXJnZXQgPSBfdGhpcyRwcm9wczEyLm1lbnVQb3J0YWxUYXJnZXQsXG4gICAgICAgIG1lbnVTaG91bGRCbG9ja1Njcm9sbCA9IF90aGlzJHByb3BzMTIubWVudVNob3VsZEJsb2NrU2Nyb2xsLFxuICAgICAgICBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXcgPSBfdGhpcyRwcm9wczEyLm1lbnVTaG91bGRTY3JvbGxJbnRvVmlldyxcbiAgICAgICAgbm9PcHRpb25zTWVzc2FnZSA9IF90aGlzJHByb3BzMTIubm9PcHRpb25zTWVzc2FnZSxcbiAgICAgICAgb25NZW51U2Nyb2xsVG9Ub3AgPSBfdGhpcyRwcm9wczEyLm9uTWVudVNjcm9sbFRvVG9wLFxuICAgICAgICBvbk1lbnVTY3JvbGxUb0JvdHRvbSA9IF90aGlzJHByb3BzMTIub25NZW51U2Nyb2xsVG9Cb3R0b207XG4gICAgICBpZiAoIW1lbnVJc09wZW4pIHJldHVybiBudWxsO1xuXG4gICAgICAvLyBUT0RPOiBJbnRlcm5hbCBPcHRpb24gVHlwZSBoZXJlXG4gICAgICB2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKHByb3BzLCBpZCkge1xuICAgICAgICB2YXIgdHlwZSA9IHByb3BzLnR5cGUsXG4gICAgICAgICAgZGF0YSA9IHByb3BzLmRhdGEsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNTZWxlY3RlZCA9IHByb3BzLmlzU2VsZWN0ZWQsXG4gICAgICAgICAgbGFiZWwgPSBwcm9wcy5sYWJlbCxcbiAgICAgICAgICB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuICAgICAgICB2YXIgaXNGb2N1c2VkID0gZm9jdXNlZE9wdGlvbiA9PT0gZGF0YTtcbiAgICAgICAgdmFyIG9uSG92ZXIgPSBpc0Rpc2FibGVkID8gdW5kZWZpbmVkIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQub25PcHRpb25Ib3ZlcihkYXRhKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uU2VsZWN0ID0gaXNEaXNhYmxlZCA/IHVuZGVmaW5lZCA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM0LnNlbGVjdE9wdGlvbihkYXRhKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9wdGlvbklkID0gXCJcIi5jb25jYXQoX3RoaXM0LmdldEVsZW1lbnRJZCgnb3B0aW9uJyksIFwiLVwiKS5jb25jYXQoaWQpO1xuICAgICAgICB2YXIgaW5uZXJQcm9wcyA9IHtcbiAgICAgICAgICBpZDogb3B0aW9uSWQsXG4gICAgICAgICAgb25DbGljazogb25TZWxlY3QsXG4gICAgICAgICAgb25Nb3VzZU1vdmU6IG9uSG92ZXIsXG4gICAgICAgICAgb25Nb3VzZU92ZXI6IG9uSG92ZXIsXG4gICAgICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgICAgIHJvbGU6ICdvcHRpb24nLFxuICAgICAgICAgICdhcmlhLXNlbGVjdGVkJzogX3RoaXM0LmlzQXBwbGVEZXZpY2UgPyB1bmRlZmluZWQgOiBpc1NlbGVjdGVkIC8vIGlzIG5vdCBzdXBwb3J0ZWQgb24gQXBwbGUgZGV2aWNlc1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChPcHRpb24sIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICAgIGlubmVyUHJvcHM6IGlubmVyUHJvcHMsXG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICAgICAga2V5OiBvcHRpb25JZCxcbiAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQsXG4gICAgICAgICAgaW5uZXJSZWY6IGlzRm9jdXNlZCA/IF90aGlzNC5nZXRGb2N1c2VkT3B0aW9uUmVmIDogdW5kZWZpbmVkXG4gICAgICAgIH0pLCBfdGhpczQuZm9ybWF0T3B0aW9uTGFiZWwocHJvcHMuZGF0YSwgJ21lbnUnKSk7XG4gICAgICB9O1xuICAgICAgdmFyIG1lbnVVSTtcbiAgICAgIGlmICh0aGlzLmhhc09wdGlvbnMoKSkge1xuICAgICAgICBtZW51VUkgPSB0aGlzLmdldENhdGVnb3JpemVkT3B0aW9ucygpLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIHZhciBfZGF0YSA9IGl0ZW0uZGF0YSxcbiAgICAgICAgICAgICAgb3B0aW9ucyA9IGl0ZW0ub3B0aW9ucyxcbiAgICAgICAgICAgICAgZ3JvdXBJbmRleCA9IGl0ZW0uaW5kZXg7XG4gICAgICAgICAgICB2YXIgZ3JvdXBJZCA9IFwiXCIuY29uY2F0KF90aGlzNC5nZXRFbGVtZW50SWQoJ2dyb3VwJyksIFwiLVwiKS5jb25jYXQoZ3JvdXBJbmRleCk7XG4gICAgICAgICAgICB2YXIgaGVhZGluZ0lkID0gXCJcIi5jb25jYXQoZ3JvdXBJZCwgXCItaGVhZGluZ1wiKTtcbiAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChHcm91cCwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgICAgICAgIGtleTogZ3JvdXBJZCxcbiAgICAgICAgICAgICAgZGF0YTogX2RhdGEsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgICAgIEhlYWRpbmc6IEdyb3VwSGVhZGluZyxcbiAgICAgICAgICAgICAgaGVhZGluZ1Byb3BzOiB7XG4gICAgICAgICAgICAgICAgaWQ6IGhlYWRpbmdJZCxcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLmRhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbGFiZWw6IF90aGlzNC5mb3JtYXRHcm91cExhYmVsKGl0ZW0uZGF0YSlcbiAgICAgICAgICAgIH0pLCBpdGVtLm9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihvcHRpb24sIFwiXCIuY29uY2F0KGdyb3VwSW5kZXgsIFwiLVwiKS5jb25jYXQob3B0aW9uLmluZGV4KSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdvcHRpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyKGl0ZW0sIFwiXCIuY29uY2F0KGl0ZW0uaW5kZXgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBsb2FkaW5nTWVzc2FnZSh7XG4gICAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1lc3NhZ2UgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICBtZW51VUkgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMb2FkaW5nTWVzc2FnZSwgY29tbW9uUHJvcHMsIG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9tZXNzYWdlID0gbm9PcHRpb25zTWVzc2FnZSh7XG4gICAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKF9tZXNzYWdlID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgbWVudVVJID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTm9PcHRpb25zTWVzc2FnZSwgY29tbW9uUHJvcHMsIF9tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHZhciBtZW51UGxhY2VtZW50UHJvcHMgPSB7XG4gICAgICAgIG1pbk1lbnVIZWlnaHQ6IG1pbk1lbnVIZWlnaHQsXG4gICAgICAgIG1heE1lbnVIZWlnaHQ6IG1heE1lbnVIZWlnaHQsXG4gICAgICAgIG1lbnVQbGFjZW1lbnQ6IG1lbnVQbGFjZW1lbnQsXG4gICAgICAgIG1lbnVQb3NpdGlvbjogbWVudVBvc2l0aW9uLFxuICAgICAgICBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXc6IG1lbnVTaG91bGRTY3JvbGxJbnRvVmlld1xuICAgICAgfTtcbiAgICAgIHZhciBtZW51RWxlbWVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVQbGFjZXIsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywgbWVudVBsYWNlbWVudFByb3BzKSwgZnVuY3Rpb24gKF9yZWY0KSB7XG4gICAgICAgIHZhciByZWYgPSBfcmVmNC5yZWYsXG4gICAgICAgICAgX3JlZjQkcGxhY2VyUHJvcHMgPSBfcmVmNC5wbGFjZXJQcm9wcyxcbiAgICAgICAgICBwbGFjZW1lbnQgPSBfcmVmNCRwbGFjZXJQcm9wcy5wbGFjZW1lbnQsXG4gICAgICAgICAgbWF4SGVpZ2h0ID0gX3JlZjQkcGxhY2VyUHJvcHMubWF4SGVpZ2h0O1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudSwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCBtZW51UGxhY2VtZW50UHJvcHMsIHtcbiAgICAgICAgICBpbm5lclJlZjogcmVmLFxuICAgICAgICAgIGlubmVyUHJvcHM6IHtcbiAgICAgICAgICAgIG9uTW91c2VEb3duOiBfdGhpczQub25NZW51TW91c2VEb3duLFxuICAgICAgICAgICAgb25Nb3VzZU1vdmU6IF90aGlzNC5vbk1lbnVNb3VzZU1vdmVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gICAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxNYW5hZ2VyLCB7XG4gICAgICAgICAgY2FwdHVyZUVuYWJsZWQ6IGNhcHR1cmVNZW51U2Nyb2xsLFxuICAgICAgICAgIG9uVG9wQXJyaXZlOiBvbk1lbnVTY3JvbGxUb1RvcCxcbiAgICAgICAgICBvbkJvdHRvbUFycml2ZTogb25NZW51U2Nyb2xsVG9Cb3R0b20sXG4gICAgICAgICAgbG9ja0VuYWJsZWQ6IG1lbnVTaG91bGRCbG9ja1Njcm9sbFxuICAgICAgICB9LCBmdW5jdGlvbiAoc2Nyb2xsVGFyZ2V0UmVmKSB7XG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVMaXN0LCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgICAgIGlubmVyUmVmOiBmdW5jdGlvbiBpbm5lclJlZihpbnN0YW5jZSkge1xuICAgICAgICAgICAgICBfdGhpczQuZ2V0TWVudUxpc3RSZWYoaW5zdGFuY2UpO1xuICAgICAgICAgICAgICBzY3JvbGxUYXJnZXRSZWYoaW5zdGFuY2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlubmVyUHJvcHM6IHtcbiAgICAgICAgICAgICAgcm9sZTogJ2xpc3Rib3gnLFxuICAgICAgICAgICAgICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiBjb21tb25Qcm9wcy5pc011bHRpLFxuICAgICAgICAgICAgICBpZDogX3RoaXM0LmdldEVsZW1lbnRJZCgnbGlzdGJveCcpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodCxcbiAgICAgICAgICAgIGZvY3VzZWRPcHRpb246IGZvY3VzZWRPcHRpb25cbiAgICAgICAgICB9KSwgbWVudVVJKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIHBvc2l0aW9uaW5nIGJlaGF2aW91ciBpcyBhbG1vc3QgaWRlbnRpY2FsIGZvciBwb3J0YWxsZWQgYW5kIGZpeGVkLFxuICAgICAgLy8gc28gd2UgdXNlIHRoZSBzYW1lIGNvbXBvbmVudC4gdGhlIGFjdHVhbCBwb3J0YWxsaW5nIGxvZ2ljIGlzIGZvcmtlZFxuICAgICAgLy8gd2l0aGluIHRoZSBjb21wb25lbnQgYmFzZWQgb24gYG1lbnVQb3NpdGlvbmBcbiAgICAgIHJldHVybiBtZW51UG9ydGFsVGFyZ2V0IHx8IG1lbnVQb3NpdGlvbiA9PT0gJ2ZpeGVkJyA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lbnVQb3J0YWwsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBhcHBlbmRUbzogbWVudVBvcnRhbFRhcmdldCxcbiAgICAgICAgY29udHJvbEVsZW1lbnQ6IHRoaXMuY29udHJvbFJlZixcbiAgICAgICAgbWVudVBsYWNlbWVudDogbWVudVBsYWNlbWVudCxcbiAgICAgICAgbWVudVBvc2l0aW9uOiBtZW51UG9zaXRpb25cbiAgICAgIH0pLCBtZW51RWxlbWVudCkgOiBtZW51RWxlbWVudDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyRm9ybUZpZWxkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckZvcm1GaWVsZCgpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHByb3BzMTMgPSB0aGlzLnByb3BzLFxuICAgICAgICBkZWxpbWl0ZXIgPSBfdGhpcyRwcm9wczEzLmRlbGltaXRlcixcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMTMuaXNEaXNhYmxlZCxcbiAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzMTMuaXNNdWx0aSxcbiAgICAgICAgbmFtZSA9IF90aGlzJHByb3BzMTMubmFtZSxcbiAgICAgICAgcmVxdWlyZWQgPSBfdGhpcyRwcm9wczEzLnJlcXVpcmVkO1xuICAgICAgdmFyIHNlbGVjdFZhbHVlID0gdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICAgIGlmIChyZXF1aXJlZCAmJiAhdGhpcy5oYXNWYWx1ZSgpICYmICFpc0Rpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZXF1aXJlZElucHV0JDEsIHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIG9uRm9jdXM6IHRoaXMub25WYWx1ZUlucHV0Rm9jdXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIW5hbWUgfHwgaXNEaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgaWYgKGRlbGltaXRlcikge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHNlbGVjdFZhbHVlLm1hcChmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM1LmdldE9wdGlvblZhbHVlKG9wdCk7XG4gICAgICAgICAgfSkuam9pbihkZWxpbWl0ZXIpO1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICB0eXBlOiBcImhpZGRlblwiLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGlucHV0ID0gc2VsZWN0VmFsdWUubGVuZ3RoID4gMCA/IHNlbGVjdFZhbHVlLm1hcChmdW5jdGlvbiAob3B0LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgIGtleTogXCJpLVwiLmNvbmNhdChpKSxcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgdHlwZTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgICAgdmFsdWU6IF90aGlzNS5nZXRPcHRpb25WYWx1ZShvcHQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSA6IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIHR5cGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICB2YWx1ZTogXCJcIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsLCBpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBfdmFsdWUgPSBzZWxlY3RWYWx1ZVswXSA/IHRoaXMuZ2V0T3B0aW9uVmFsdWUoc2VsZWN0VmFsdWVbMF0pIDogJyc7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIHR5cGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgdmFsdWU6IF92YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTGl2ZVJlZ2lvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJMaXZlUmVnaW9uKCkge1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTYgPSB0aGlzLnN0YXRlLFxuICAgICAgICBhcmlhU2VsZWN0aW9uID0gX3RoaXMkc3RhdGU2LmFyaWFTZWxlY3Rpb24sXG4gICAgICAgIGZvY3VzZWRPcHRpb24gPSBfdGhpcyRzdGF0ZTYuZm9jdXNlZE9wdGlvbixcbiAgICAgICAgZm9jdXNlZFZhbHVlID0gX3RoaXMkc3RhdGU2LmZvY3VzZWRWYWx1ZSxcbiAgICAgICAgaXNGb2N1c2VkID0gX3RoaXMkc3RhdGU2LmlzRm9jdXNlZCxcbiAgICAgICAgc2VsZWN0VmFsdWUgPSBfdGhpcyRzdGF0ZTYuc2VsZWN0VmFsdWU7XG4gICAgICB2YXIgZm9jdXNhYmxlT3B0aW9ucyA9IHRoaXMuZ2V0Rm9jdXNhYmxlT3B0aW9ucygpO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExpdmVSZWdpb24kMSwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlkOiB0aGlzLmdldEVsZW1lbnRJZCgnbGl2ZS1yZWdpb24nKSxcbiAgICAgICAgYXJpYVNlbGVjdGlvbjogYXJpYVNlbGVjdGlvbixcbiAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNlZE9wdGlvbixcbiAgICAgICAgZm9jdXNlZFZhbHVlOiBmb2N1c2VkVmFsdWUsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkLFxuICAgICAgICBzZWxlY3RWYWx1ZTogc2VsZWN0VmFsdWUsXG4gICAgICAgIGZvY3VzYWJsZU9wdGlvbnM6IGZvY3VzYWJsZU9wdGlvbnMsXG4gICAgICAgIGlzQXBwbGVEZXZpY2U6IHRoaXMuaXNBcHBsZURldmljZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJGdldENvbXBvbmVudHM4ID0gdGhpcy5nZXRDb21wb25lbnRzKCksXG4gICAgICAgIENvbnRyb2wgPSBfdGhpcyRnZXRDb21wb25lbnRzOC5Db250cm9sLFxuICAgICAgICBJbmRpY2F0b3JzQ29udGFpbmVyID0gX3RoaXMkZ2V0Q29tcG9uZW50czguSW5kaWNhdG9yc0NvbnRhaW5lcixcbiAgICAgICAgU2VsZWN0Q29udGFpbmVyID0gX3RoaXMkZ2V0Q29tcG9uZW50czguU2VsZWN0Q29udGFpbmVyLFxuICAgICAgICBWYWx1ZUNvbnRhaW5lciA9IF90aGlzJGdldENvbXBvbmVudHM4LlZhbHVlQ29udGFpbmVyO1xuICAgICAgdmFyIF90aGlzJHByb3BzMTQgPSB0aGlzLnByb3BzLFxuICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczE0LmNsYXNzTmFtZSxcbiAgICAgICAgaWQgPSBfdGhpcyRwcm9wczE0LmlkLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMxNC5pc0Rpc2FibGVkLFxuICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHMxNC5tZW51SXNPcGVuO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcyA9IHRoaXMuZ2V0Q29tbW9uUHJvcHMoKTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTZWxlY3RDb250YWluZXIsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgaW5uZXJQcm9wczoge1xuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICBvbktleURvd246IHRoaXMub25LZXlEb3duXG4gICAgICAgIH0sXG4gICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkXG4gICAgICB9KSwgdGhpcy5yZW5kZXJMaXZlUmVnaW9uKCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRyb2wsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBpbm5lclJlZjogdGhpcy5nZXRDb250cm9sUmVmLFxuICAgICAgICBpbm5lclByb3BzOiB7XG4gICAgICAgICAgb25Nb3VzZURvd246IHRoaXMub25Db250cm9sTW91c2VEb3duLFxuICAgICAgICAgIG9uVG91Y2hFbmQ6IHRoaXMub25Db250cm9sVG91Y2hFbmRcbiAgICAgICAgfSxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQsXG4gICAgICAgIG1lbnVJc09wZW46IG1lbnVJc09wZW5cbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChWYWx1ZUNvbnRhaW5lciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWRcbiAgICAgIH0pLCB0aGlzLnJlbmRlclBsYWNlaG9sZGVyT3JWYWx1ZSgpLCB0aGlzLnJlbmRlcklucHV0KCkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbmRpY2F0b3JzQ29udGFpbmVyLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZFxuICAgICAgfSksIHRoaXMucmVuZGVyQ2xlYXJJbmRpY2F0b3IoKSwgdGhpcy5yZW5kZXJMb2FkaW5nSW5kaWNhdG9yKCksIHRoaXMucmVuZGVySW5kaWNhdG9yU2VwYXJhdG9yKCksIHRoaXMucmVuZGVyRHJvcGRvd25JbmRpY2F0b3IoKSkpLCB0aGlzLnJlbmRlck1lbnUoKSwgdGhpcy5yZW5kZXJGb3JtRmllbGQoKSk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcbiAgICAgIHZhciBwcmV2UHJvcHMgPSBzdGF0ZS5wcmV2UHJvcHMsXG4gICAgICAgIGNsZWFyRm9jdXNWYWx1ZU9uVXBkYXRlID0gc3RhdGUuY2xlYXJGb2N1c1ZhbHVlT25VcGRhdGUsXG4gICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZSA9IHN0YXRlLmlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZSxcbiAgICAgICAgYXJpYVNlbGVjdGlvbiA9IHN0YXRlLmFyaWFTZWxlY3Rpb24sXG4gICAgICAgIGlzRm9jdXNlZCA9IHN0YXRlLmlzRm9jdXNlZCxcbiAgICAgICAgcHJldldhc0ZvY3VzZWQgPSBzdGF0ZS5wcmV2V2FzRm9jdXNlZCxcbiAgICAgICAgaW5zdGFuY2VQcmVmaXggPSBzdGF0ZS5pbnN0YW5jZVByZWZpeDtcbiAgICAgIHZhciBvcHRpb25zID0gcHJvcHMub3B0aW9ucyxcbiAgICAgICAgdmFsdWUgPSBwcm9wcy52YWx1ZSxcbiAgICAgICAgbWVudUlzT3BlbiA9IHByb3BzLm1lbnVJc09wZW4sXG4gICAgICAgIGlucHV0VmFsdWUgPSBwcm9wcy5pbnB1dFZhbHVlLFxuICAgICAgICBpc011bHRpID0gcHJvcHMuaXNNdWx0aTtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IGNsZWFuVmFsdWUodmFsdWUpO1xuICAgICAgdmFyIG5ld01lbnVPcHRpb25zU3RhdGUgPSB7fTtcbiAgICAgIGlmIChwcmV2UHJvcHMgJiYgKHZhbHVlICE9PSBwcmV2UHJvcHMudmFsdWUgfHwgb3B0aW9ucyAhPT0gcHJldlByb3BzLm9wdGlvbnMgfHwgbWVudUlzT3BlbiAhPT0gcHJldlByb3BzLm1lbnVJc09wZW4gfHwgaW5wdXRWYWx1ZSAhPT0gcHJldlByb3BzLmlucHV0VmFsdWUpKSB7XG4gICAgICAgIHZhciBmb2N1c2FibGVPcHRpb25zID0gbWVudUlzT3BlbiA/IGJ1aWxkRm9jdXNhYmxlT3B0aW9ucyhwcm9wcywgc2VsZWN0VmFsdWUpIDogW107XG4gICAgICAgIHZhciBmb2N1c2FibGVPcHRpb25zV2l0aElkcyA9IG1lbnVJc09wZW4gPyBidWlsZEZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzKGJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKHByb3BzLCBzZWxlY3RWYWx1ZSksIFwiXCIuY29uY2F0KGluc3RhbmNlUHJlZml4LCBcIi1vcHRpb25cIikpIDogW107XG4gICAgICAgIHZhciBmb2N1c2VkVmFsdWUgPSBjbGVhckZvY3VzVmFsdWVPblVwZGF0ZSA/IGdldE5leHRGb2N1c2VkVmFsdWUoc3RhdGUsIHNlbGVjdFZhbHVlKSA6IG51bGw7XG4gICAgICAgIHZhciBmb2N1c2VkT3B0aW9uID0gZ2V0TmV4dEZvY3VzZWRPcHRpb24oc3RhdGUsIGZvY3VzYWJsZU9wdGlvbnMpO1xuICAgICAgICB2YXIgZm9jdXNlZE9wdGlvbklkID0gZ2V0Rm9jdXNlZE9wdGlvbklkKGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzLCBmb2N1c2VkT3B0aW9uKTtcbiAgICAgICAgbmV3TWVudU9wdGlvbnNTdGF0ZSA9IHtcbiAgICAgICAgICBzZWxlY3RWYWx1ZTogc2VsZWN0VmFsdWUsXG4gICAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNlZE9wdGlvbixcbiAgICAgICAgICBmb2N1c2VkT3B0aW9uSWQ6IGZvY3VzZWRPcHRpb25JZCxcbiAgICAgICAgICBmb2N1c2FibGVPcHRpb25zV2l0aElkczogZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMsXG4gICAgICAgICAgZm9jdXNlZFZhbHVlOiBmb2N1c2VkVmFsdWUsXG4gICAgICAgICAgY2xlYXJGb2N1c1ZhbHVlT25VcGRhdGU6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBzb21lIHVwZGF0ZXMgc2hvdWxkIHRvZ2dsZSB0aGUgc3RhdGUgb2YgdGhlIGlucHV0IHZpc2liaWxpdHlcbiAgICAgIHZhciBuZXdJbnB1dElzSGlkZGVuU3RhdGUgPSBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGUgIT0gbnVsbCAmJiBwcm9wcyAhPT0gcHJldlByb3BzID8ge1xuICAgICAgICBpbnB1dElzSGlkZGVuOiBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGUsXG4gICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogdW5kZWZpbmVkXG4gICAgICB9IDoge307XG4gICAgICB2YXIgbmV3QXJpYVNlbGVjdGlvbiA9IGFyaWFTZWxlY3Rpb247XG4gICAgICB2YXIgaGFzS2VwdEZvY3VzID0gaXNGb2N1c2VkICYmIHByZXZXYXNGb2N1c2VkO1xuICAgICAgaWYgKGlzRm9jdXNlZCAmJiAhaGFzS2VwdEZvY3VzKSB7XG4gICAgICAgIC8vIElmIGB2YWx1ZWAgb3IgYGRlZmF1bHRWYWx1ZWAgcHJvcHMgYXJlIG5vdCBlbXB0eSB0aGVuIGFubm91bmNlIHRoZW1cbiAgICAgICAgLy8gd2hlbiB0aGUgU2VsZWN0IGlzIGluaXRpYWxseSBmb2N1c2VkXG4gICAgICAgIG5ld0FyaWFTZWxlY3Rpb24gPSB7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlVGVybmFyeShpc011bHRpLCBzZWxlY3RWYWx1ZSwgc2VsZWN0VmFsdWVbMF0gfHwgbnVsbCksXG4gICAgICAgICAgb3B0aW9uczogc2VsZWN0VmFsdWUsXG4gICAgICAgICAgYWN0aW9uOiAnaW5pdGlhbC1pbnB1dC1mb2N1cydcbiAgICAgICAgfTtcbiAgICAgICAgaGFzS2VwdEZvY3VzID0gIXByZXZXYXNGb2N1c2VkO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgJ2luaXRpYWwtaW5wdXQtZm9jdXMnIGFjdGlvbiBoYXMgYmVlbiBzZXQgYWxyZWFkeVxuICAgICAgLy8gdGhlbiByZXNldCB0aGUgYXJpYVNlbGVjdGlvbiB0byBudWxsXG4gICAgICBpZiAoKGFyaWFTZWxlY3Rpb24gPT09IG51bGwgfHwgYXJpYVNlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXJpYVNlbGVjdGlvbi5hY3Rpb24pID09PSAnaW5pdGlhbC1pbnB1dC1mb2N1cycpIHtcbiAgICAgICAgbmV3QXJpYVNlbGVjdGlvbiA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG5ld01lbnVPcHRpb25zU3RhdGUpLCBuZXdJbnB1dElzSGlkZGVuU3RhdGUpLCB7fSwge1xuICAgICAgICBwcmV2UHJvcHM6IHByb3BzLFxuICAgICAgICBhcmlhU2VsZWN0aW9uOiBuZXdBcmlhU2VsZWN0aW9uLFxuICAgICAgICBwcmV2V2FzRm9jdXNlZDogaGFzS2VwdEZvY3VzXG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFNlbGVjdDtcbn0oQ29tcG9uZW50KTtcblNlbGVjdC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5cbmV4cG9ydCB7IFNlbGVjdCBhcyBTLCBkZWZhdWx0UHJvcHMgYXMgYSwgZ2V0T3B0aW9uTGFiZWwkMSBhcyBiLCBjcmVhdGVGaWx0ZXIgYXMgYywgZGVmYXVsdFRoZW1lIGFzIGQsIGdldE9wdGlvblZhbHVlJDEgYXMgZywgbWVyZ2VTdHlsZXMgYXMgbSB9O1xuIiwiaW1wb3J0IHsgdSBhcyB1c2VTdGF0ZU1hbmFnZXIgfSBmcm9tICcuL3VzZVN0YXRlTWFuYWdlci03ZTFlODQ4OS5lc20uanMnO1xuZXhwb3J0IHsgdSBhcyB1c2VTdGF0ZU1hbmFnZXIgfSBmcm9tICcuL3VzZVN0YXRlTWFuYWdlci03ZTFlODQ4OS5lc20uanMnO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFMgYXMgU2VsZWN0IH0gZnJvbSAnLi9TZWxlY3QtNDlhNjI4MzAuZXNtLmpzJztcbmV4cG9ydCB7IGMgYXMgY3JlYXRlRmlsdGVyLCBkIGFzIGRlZmF1bHRUaGVtZSwgbSBhcyBtZXJnZVN0eWxlcyB9IGZyb20gJy4vU2VsZWN0LTQ5YTYyODMwLmVzbS5qcyc7XG5pbXBvcnQgeyBDYWNoZVByb3ZpZGVyIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IGNyZWF0ZUNhY2hlIGZyb20gJ0BlbW90aW9uL2NhY2hlJztcbmV4cG9ydCB7IGMgYXMgY29tcG9uZW50cyB9IGZyb20gJy4vaW5kZXgtYTMwMWY1MjYuZXNtLmpzJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RTcHJlYWQyJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5JztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2snO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0cyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlU3VwZXInO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5JztcbmltcG9ydCAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZic7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdGFnZ2VkVGVtcGxhdGVMaXRlcmFsJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eSc7XG5pbXBvcnQgJ3JlYWN0LWRvbSc7XG5pbXBvcnQgJ0BmbG9hdGluZy11aS9kb20nO1xuaW1wb3J0ICd1c2UtaXNvbW9ycGhpYy1sYXlvdXQtZWZmZWN0JztcblxudmFyIFN0YXRlTWFuYWdlZFNlbGVjdCA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBiYXNlU2VsZWN0UHJvcHMgPSB1c2VTdGF0ZU1hbmFnZXIocHJvcHMpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2VsZWN0LCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWZcbiAgfSwgYmFzZVNlbGVjdFByb3BzKSk7XG59KTtcbnZhciBTdGF0ZU1hbmFnZWRTZWxlY3QkMSA9IFN0YXRlTWFuYWdlZFNlbGVjdDtcblxudmFyIE5vbmNlUHJvdmlkZXIgPSAoZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG5vbmNlID0gX3JlZi5ub25jZSxcbiAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2FjaGVLZXkgPSBfcmVmLmNhY2hlS2V5O1xuICB2YXIgZW1vdGlvbkNhY2hlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNhY2hlKHtcbiAgICAgIGtleTogY2FjaGVLZXksXG4gICAgICBub25jZTogbm9uY2VcbiAgICB9KTtcbiAgfSwgW2NhY2hlS2V5LCBub25jZV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ2FjaGVQcm92aWRlciwge1xuICAgIHZhbHVlOiBlbW90aW9uQ2FjaGVcbiAgfSwgY2hpbGRyZW4pO1xufSk7XG5cbmV4cG9ydCB7IE5vbmNlUHJvdmlkZXIsIFN0YXRlTWFuYWdlZFNlbGVjdCQxIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IHJnYmEgfSBmcm9tICdwb2xpc2hlZCc7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgKiBhcyBkZWZhdXRUaGVtZSBmcm9tIFwiLi4vLi4vdGhlbWUuanNcIjtcbmNvbnN0IHVzZVNlbGVjdFRoZW1lID0gKCkgPT4ge1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IFtjdXJyZW50VGhlbWUsIHNldEN1cnJlbnRUaGVtZV0gPSB1c2VTdGF0ZShkZWZhdXRUaGVtZSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRoZW1lKSB7XG4gICAgICBzZXRDdXJyZW50VGhlbWUodGhlbWUpO1xuICAgIH1cbiAgfSwgW3RoZW1lXSk7XG4gIGNvbnN0IHNlbGVjdFRoZW1lID0gY29uZmlnID0+ICh7XG4gICAgLi4uY29uZmlnLFxuICAgIGJvcmRlclJhZGl1czogMixcbiAgICBzcGFjaW5nOiB7XG4gICAgICAuLi5jb25maWcuc3BhY2luZyxcbiAgICAgIGNvbnRyb2xIZWlnaHQ6IDMyLFxuICAgICAgYmFzZVVuaXQ6IDNcbiAgICB9LFxuICAgIGNvbG9yczoge1xuICAgICAgLi4uY29uZmlnLmNvbG9ycyxcbiAgICAgIHByaW1hcnk6IGN1cnJlbnRUaGVtZS5jb2xvcnMucHJpbWFyeTEwMCxcbiAgICAgIGRhbmdlcjogY3VycmVudFRoZW1lLmNvbG9ycy5lcnJvcixcbiAgICAgIGRhbmdlckxpZ2h0OiBjdXJyZW50VGhlbWUuY29sb3JzLmVycm9yTGlnaHQsXG4gICAgICBwcmltYXJ5MjU6IHJnYmEoY3VycmVudFRoZW1lLmNvbG9ycy5ibGFjaywgMC4wNiksXG4gICAgICBwcmltYXJ5NTA6IHJnYmEoY3VycmVudFRoZW1lLmNvbG9ycy5ibGFjaywgMC4xMjUpLFxuICAgICAgcHJpbWFyeTc1OiByZ2JhKGN1cnJlbnRUaGVtZS5jb2xvcnMuYmxhY2ssIDAuMjUpXG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0aGVtZTogY3VycmVudFRoZW1lLFxuICAgIHNlbGVjdFRoZW1lXG4gIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlU2VsZWN0VGhlbWU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tbmFtZWQtZGVmYXVsdCAqL1xuaW1wb3J0IG5vb3AgZnJvbSAnbG9kYXNoL25vb3AuanMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGRlZmF1bHQgYXMgUmVhY3RTZWxlY3QgfSBmcm9tICdyZWFjdC1zZWxlY3QnO1xuaW1wb3J0IHsgY3NzQ2xhc3MsIGZpbHRlclN0eWxlcywgc2VsZWN0U3R5bGVzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2luZGV4LmpzXCI7XG5pbXBvcnQgdXNlU2VsZWN0VGhlbWUgZnJvbSBcIi4vc2VsZWN0LXRoZW1lLmpzXCI7XG5sZXQgU2VsZWN0Q29tcG9uZW50O1xuaWYgKFJlYWN0U2VsZWN0LmRlZmF1bHQpIHtcbiAgU2VsZWN0Q29tcG9uZW50ID0gUmVhY3RTZWxlY3QuZGVmYXVsdDtcbn0gZWxzZSB7XG4gIFNlbGVjdENvbXBvbmVudCA9IFJlYWN0U2VsZWN0O1xufVxuZXhwb3J0IGNvbnN0IFNlbGVjdCA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHZhbHVlLFxuICAgIG9uQ2hhbmdlLFxuICAgIHZhcmlhbnQsXG4gICAgaXNNdWx0aSxcbiAgICAuLi5zZWxlY3RQcm9wc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICB0aGVtZSxcbiAgICBzZWxlY3RUaGVtZVxuICB9ID0gdXNlU2VsZWN0VGhlbWUoKTtcbiAgY29uc3Qgc3R5bGVzID0gdmFyaWFudCA9PT0gJ2ZpbHRlcicgPyBmaWx0ZXJTdHlsZXModGhlbWUpIDogc2VsZWN0U3R5bGVzKHRoZW1lKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gc2VsZWN0ZWQgPT4ge1xuICAgIGlmICh0eXBlb2Ygb25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIG9uQ2hhbmdlKHNlbGVjdGVkKTtcbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNlbGVjdENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY3NzQ2xhc3MoJ1NlbGVjdCcpLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICB0aGVtZTogc2VsZWN0VGhlbWUsXG4gICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSxcbiAgICBpc0NsZWFyYWJsZTogdHJ1ZSxcbiAgICBpc011bHRpOiBpc011bHRpXG4gIH0sIHNlbGVjdFByb3BzKSk7XG59O1xuU2VsZWN0LmRlZmF1bHRQcm9wcyA9IHtcbiAgdmFyaWFudDogJ2RlZmF1bHQnLFxuICBvbkNoYW5nZTogbm9vcFxufTtcblNlbGVjdC5kaXNwbGF5TmFtZSA9ICdTZWxlY3QnO1xuZXhwb3J0IGRlZmF1bHQgU2VsZWN0OyIsImltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHknO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMic7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheSc7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzJztcbmltcG9ydCB7IHVzZVJlZiwgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMIGFzIGhhbmRsZUlucHV0Q2hhbmdlIH0gZnJvbSAnLi9pbmRleC1hMzAxZjUyNi5lc20uanMnO1xuXG52YXIgX2V4Y2x1ZGVkID0gW1wiZGVmYXVsdE9wdGlvbnNcIiwgXCJjYWNoZU9wdGlvbnNcIiwgXCJsb2FkT3B0aW9uc1wiLCBcIm9wdGlvbnNcIiwgXCJpc0xvYWRpbmdcIiwgXCJvbklucHV0Q2hhbmdlXCIsIFwiZmlsdGVyT3B0aW9uXCJdO1xuZnVuY3Rpb24gdXNlQXN5bmMoX3JlZikge1xuICB2YXIgX3JlZiRkZWZhdWx0T3B0aW9ucyA9IF9yZWYuZGVmYXVsdE9wdGlvbnMsXG4gICAgcHJvcHNEZWZhdWx0T3B0aW9ucyA9IF9yZWYkZGVmYXVsdE9wdGlvbnMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRkZWZhdWx0T3B0aW9ucyxcbiAgICBfcmVmJGNhY2hlT3B0aW9ucyA9IF9yZWYuY2FjaGVPcHRpb25zLFxuICAgIGNhY2hlT3B0aW9ucyA9IF9yZWYkY2FjaGVPcHRpb25zID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY2FjaGVPcHRpb25zLFxuICAgIHByb3BzTG9hZE9wdGlvbnMgPSBfcmVmLmxvYWRPcHRpb25zO1xuICAgIF9yZWYub3B0aW9ucztcbiAgICB2YXIgX3JlZiRpc0xvYWRpbmcgPSBfcmVmLmlzTG9hZGluZyxcbiAgICBwcm9wc0lzTG9hZGluZyA9IF9yZWYkaXNMb2FkaW5nID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaXNMb2FkaW5nLFxuICAgIHByb3BzT25JbnB1dENoYW5nZSA9IF9yZWYub25JbnB1dENoYW5nZSxcbiAgICBfcmVmJGZpbHRlck9wdGlvbiA9IF9yZWYuZmlsdGVyT3B0aW9uLFxuICAgIGZpbHRlck9wdGlvbiA9IF9yZWYkZmlsdGVyT3B0aW9uID09PSB2b2lkIDAgPyBudWxsIDogX3JlZiRmaWx0ZXJPcHRpb24sXG4gICAgcmVzdFNlbGVjdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBwcm9wc0lucHV0VmFsdWUgPSByZXN0U2VsZWN0UHJvcHMuaW5wdXRWYWx1ZTtcbiAgdmFyIGxhc3RSZXF1ZXN0ID0gdXNlUmVmKHVuZGVmaW5lZCk7XG4gIHZhciBtb3VudGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKEFycmF5LmlzQXJyYXkocHJvcHNEZWZhdWx0T3B0aW9ucykgPyBwcm9wc0RlZmF1bHRPcHRpb25zIDogdW5kZWZpbmVkKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBkZWZhdWx0T3B0aW9ucyA9IF91c2VTdGF0ZTJbMF0sXG4gICAgc2V0RGVmYXVsdE9wdGlvbnMgPSBfdXNlU3RhdGUyWzFdO1xuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKHR5cGVvZiBwcm9wc0lucHV0VmFsdWUgIT09ICd1bmRlZmluZWQnID8gcHJvcHNJbnB1dFZhbHVlIDogJycpLFxuICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICBzdGF0ZUlucHV0VmFsdWUgPSBfdXNlU3RhdGU0WzBdLFxuICAgIHNldFN0YXRlSW5wdXRWYWx1ZSA9IF91c2VTdGF0ZTRbMV07XG4gIHZhciBfdXNlU3RhdGU1ID0gdXNlU3RhdGUocHJvcHNEZWZhdWx0T3B0aW9ucyA9PT0gdHJ1ZSksXG4gICAgX3VzZVN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTUsIDIpLFxuICAgIGlzTG9hZGluZyA9IF91c2VTdGF0ZTZbMF0sXG4gICAgc2V0SXNMb2FkaW5nID0gX3VzZVN0YXRlNlsxXTtcbiAgdmFyIF91c2VTdGF0ZTcgPSB1c2VTdGF0ZSh1bmRlZmluZWQpLFxuICAgIF91c2VTdGF0ZTggPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU3LCAyKSxcbiAgICBsb2FkZWRJbnB1dFZhbHVlID0gX3VzZVN0YXRlOFswXSxcbiAgICBzZXRMb2FkZWRJbnB1dFZhbHVlID0gX3VzZVN0YXRlOFsxXTtcbiAgdmFyIF91c2VTdGF0ZTkgPSB1c2VTdGF0ZShbXSksXG4gICAgX3VzZVN0YXRlMTAgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU5LCAyKSxcbiAgICBsb2FkZWRPcHRpb25zID0gX3VzZVN0YXRlMTBbMF0sXG4gICAgc2V0TG9hZGVkT3B0aW9ucyA9IF91c2VTdGF0ZTEwWzFdO1xuICB2YXIgX3VzZVN0YXRlMTEgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgX3VzZVN0YXRlMTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUxMSwgMiksXG4gICAgcGFzc0VtcHR5T3B0aW9ucyA9IF91c2VTdGF0ZTEyWzBdLFxuICAgIHNldFBhc3NFbXB0eU9wdGlvbnMgPSBfdXNlU3RhdGUxMlsxXTtcbiAgdmFyIF91c2VTdGF0ZTEzID0gdXNlU3RhdGUoe30pLFxuICAgIF91c2VTdGF0ZTE0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMTMsIDIpLFxuICAgIG9wdGlvbnNDYWNoZSA9IF91c2VTdGF0ZTE0WzBdLFxuICAgIHNldE9wdGlvbnNDYWNoZSA9IF91c2VTdGF0ZTE0WzFdO1xuICB2YXIgX3VzZVN0YXRlMTUgPSB1c2VTdGF0ZSh1bmRlZmluZWQpLFxuICAgIF91c2VTdGF0ZTE2ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMTUsIDIpLFxuICAgIHByZXZEZWZhdWx0T3B0aW9ucyA9IF91c2VTdGF0ZTE2WzBdLFxuICAgIHNldFByZXZEZWZhdWx0T3B0aW9ucyA9IF91c2VTdGF0ZTE2WzFdO1xuICB2YXIgX3VzZVN0YXRlMTcgPSB1c2VTdGF0ZSh1bmRlZmluZWQpLFxuICAgIF91c2VTdGF0ZTE4ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMTcsIDIpLFxuICAgIHByZXZDYWNoZU9wdGlvbnMgPSBfdXNlU3RhdGUxOFswXSxcbiAgICBzZXRQcmV2Q2FjaGVPcHRpb25zID0gX3VzZVN0YXRlMThbMV07XG4gIGlmIChjYWNoZU9wdGlvbnMgIT09IHByZXZDYWNoZU9wdGlvbnMpIHtcbiAgICBzZXRPcHRpb25zQ2FjaGUoe30pO1xuICAgIHNldFByZXZDYWNoZU9wdGlvbnMoY2FjaGVPcHRpb25zKTtcbiAgfVxuICBpZiAocHJvcHNEZWZhdWx0T3B0aW9ucyAhPT0gcHJldkRlZmF1bHRPcHRpb25zKSB7XG4gICAgc2V0RGVmYXVsdE9wdGlvbnMoQXJyYXkuaXNBcnJheShwcm9wc0RlZmF1bHRPcHRpb25zKSA/IHByb3BzRGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQpO1xuICAgIHNldFByZXZEZWZhdWx0T3B0aW9ucyhwcm9wc0RlZmF1bHRPcHRpb25zKTtcbiAgfVxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIG1vdW50ZWQuY3VycmVudCA9IHRydWU7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vdW50ZWQuY3VycmVudCA9IGZhbHNlO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgdmFyIGxvYWRPcHRpb25zID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGlucHV0VmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFwcm9wc0xvYWRPcHRpb25zKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICB2YXIgbG9hZGVyID0gcHJvcHNMb2FkT3B0aW9ucyhpbnB1dFZhbHVlLCBjYWxsYmFjayk7XG4gICAgaWYgKGxvYWRlciAmJiB0eXBlb2YgbG9hZGVyLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGxvYWRlci50aGVuKGNhbGxiYWNrLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbcHJvcHNMb2FkT3B0aW9uc10pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChwcm9wc0RlZmF1bHRPcHRpb25zID09PSB0cnVlKSB7XG4gICAgICBsb2FkT3B0aW9ucyhzdGF0ZUlucHV0VmFsdWUsIGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIGlmICghbW91bnRlZC5jdXJyZW50KSByZXR1cm47XG4gICAgICAgIHNldERlZmF1bHRPcHRpb25zKG9wdGlvbnMgfHwgW10pO1xuICAgICAgICBzZXRJc0xvYWRpbmcoISFsYXN0UmVxdWVzdC5jdXJyZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBOT1RFOiB0aGlzIGVmZmVjdCBpcyBkZXNpZ25lZCB0byBvbmx5IHJ1biB3aGVuIHRoZSBjb21wb25lbnQgbW91bnRzLFxuICAgIC8vIHNvIHdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSBhbnkgaG9vayBkZXBlbmRlbmNpZXNcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtdKTtcbiAgdmFyIG9uSW5wdXRDaGFuZ2UgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3VmFsdWUsIGFjdGlvbk1ldGEpIHtcbiAgICB2YXIgaW5wdXRWYWx1ZSA9IGhhbmRsZUlucHV0Q2hhbmdlKG5ld1ZhbHVlLCBhY3Rpb25NZXRhLCBwcm9wc09uSW5wdXRDaGFuZ2UpO1xuICAgIGlmICghaW5wdXRWYWx1ZSkge1xuICAgICAgbGFzdFJlcXVlc3QuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICAgIHNldFN0YXRlSW5wdXRWYWx1ZSgnJyk7XG4gICAgICBzZXRMb2FkZWRJbnB1dFZhbHVlKCcnKTtcbiAgICAgIHNldExvYWRlZE9wdGlvbnMoW10pO1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldFBhc3NFbXB0eU9wdGlvbnMoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY2FjaGVPcHRpb25zICYmIG9wdGlvbnNDYWNoZVtpbnB1dFZhbHVlXSkge1xuICAgICAgc2V0U3RhdGVJbnB1dFZhbHVlKGlucHV0VmFsdWUpO1xuICAgICAgc2V0TG9hZGVkSW5wdXRWYWx1ZShpbnB1dFZhbHVlKTtcbiAgICAgIHNldExvYWRlZE9wdGlvbnMob3B0aW9uc0NhY2hlW2lucHV0VmFsdWVdKTtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICBzZXRQYXNzRW1wdHlPcHRpb25zKGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJlcXVlc3QgPSBsYXN0UmVxdWVzdC5jdXJyZW50ID0ge307XG4gICAgICBzZXRTdGF0ZUlucHV0VmFsdWUoaW5wdXRWYWx1ZSk7XG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgICBzZXRQYXNzRW1wdHlPcHRpb25zKCFsb2FkZWRJbnB1dFZhbHVlKTtcbiAgICAgIGxvYWRPcHRpb25zKGlucHV0VmFsdWUsIGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIGlmICghbW91bnRlZCkgcmV0dXJuO1xuICAgICAgICBpZiAocmVxdWVzdCAhPT0gbGFzdFJlcXVlc3QuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICBsYXN0UmVxdWVzdC5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICBzZXRMb2FkZWRJbnB1dFZhbHVlKGlucHV0VmFsdWUpO1xuICAgICAgICBzZXRMb2FkZWRPcHRpb25zKG9wdGlvbnMgfHwgW10pO1xuICAgICAgICBzZXRQYXNzRW1wdHlPcHRpb25zKGZhbHNlKTtcbiAgICAgICAgc2V0T3B0aW9uc0NhY2hlKG9wdGlvbnMgPyBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbnNDYWNoZSksIHt9LCBfZGVmaW5lUHJvcGVydHkoe30sIGlucHV0VmFsdWUsIG9wdGlvbnMpKSA6IG9wdGlvbnNDYWNoZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtjYWNoZU9wdGlvbnMsIGxvYWRPcHRpb25zLCBsb2FkZWRJbnB1dFZhbHVlLCBvcHRpb25zQ2FjaGUsIHByb3BzT25JbnB1dENoYW5nZV0pO1xuICB2YXIgb3B0aW9ucyA9IHBhc3NFbXB0eU9wdGlvbnMgPyBbXSA6IHN0YXRlSW5wdXRWYWx1ZSAmJiBsb2FkZWRJbnB1dFZhbHVlID8gbG9hZGVkT3B0aW9ucyA6IGRlZmF1bHRPcHRpb25zIHx8IFtdO1xuICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0U2VsZWN0UHJvcHMpLCB7fSwge1xuICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcgfHwgcHJvcHNJc0xvYWRpbmcsXG4gICAgb25JbnB1dENoYW5nZTogb25JbnB1dENoYW5nZSxcbiAgICBmaWx0ZXJPcHRpb246IGZpbHRlck9wdGlvblxuICB9KTtcbn1cblxuZXhwb3J0IHsgdXNlQXN5bmMgYXMgdSB9O1xuIiwiaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFMgYXMgU2VsZWN0IH0gZnJvbSAnLi4vLi4vZGlzdC9TZWxlY3QtNDlhNjI4MzAuZXNtLmpzJztcbmltcG9ydCB7IHUgYXMgdXNlU3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vZGlzdC91c2VTdGF0ZU1hbmFnZXItN2UxZTg0ODkuZXNtLmpzJztcbmltcG9ydCB7IHUgYXMgdXNlQXN5bmMgfSBmcm9tICcuLi8uLi9kaXN0L3VzZUFzeW5jLWJhN2M2Yjc3LmVzbS5qcyc7XG5leHBvcnQgeyB1IGFzIHVzZUFzeW5jIH0gZnJvbSAnLi4vLi4vZGlzdC91c2VBc3luYy1iYTdjNmI3Ny5lc20uanMnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFNwcmVhZDInO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZVN1cGVyJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheSc7XG5pbXBvcnQgJy4uLy4uL2Rpc3QvaW5kZXgtYTMwMWY1MjYuZXNtLmpzJztcbmltcG9ydCAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXknO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHknO1xuaW1wb3J0ICdyZWFjdC1kb20nO1xuaW1wb3J0ICdAZmxvYXRpbmctdWkvZG9tJztcbmltcG9ydCAndXNlLWlzb21vcnBoaWMtbGF5b3V0LWVmZmVjdCc7XG5pbXBvcnQgJ21lbW9pemUtb25lJztcblxudmFyIEFzeW5jU2VsZWN0ID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIHN0YXRlTWFuYWdlZFByb3BzID0gdXNlQXN5bmMocHJvcHMpO1xuICB2YXIgc2VsZWN0UHJvcHMgPSB1c2VTdGF0ZU1hbmFnZXIoc3RhdGVNYW5hZ2VkUHJvcHMpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2VsZWN0LCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWZcbiAgfSwgc2VsZWN0UHJvcHMpKTtcbn0pO1xudmFyIEFzeW5jU2VsZWN0JDEgPSBBc3luY1NlbGVjdDtcblxuZXhwb3J0IHsgQXN5bmNTZWxlY3QkMSBhcyBkZWZhdWx0IH07XG4iLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1uYW1lZC1kZWZhdWx0ICovXG5pbXBvcnQgbm9vcCBmcm9tICdsb2Rhc2gvbm9vcC5qcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBSZWFjdEFzeW5jU2VsZWN0IH0gZnJvbSAncmVhY3Qtc2VsZWN0L2FzeW5jJztcbmltcG9ydCB1c2VTZWxlY3RUaGVtZSBmcm9tIFwiLi9zZWxlY3QtdGhlbWUuanNcIjtcbmltcG9ydCB7IGNzc0NsYXNzLCBmaWx0ZXJTdHlsZXMsIHNlbGVjdFN0eWxlcyB9IGZyb20gXCIuLi8uLi91dGlscy9pbmRleC5qc1wiO1xubGV0IFNlbGVjdENvbXBvbmVudDtcbmlmIChSZWFjdEFzeW5jU2VsZWN0LmRlZmF1bHQpIHtcbiAgU2VsZWN0Q29tcG9uZW50ID0gUmVhY3RBc3luY1NlbGVjdC5kZWZhdWx0O1xufSBlbHNlIHtcbiAgU2VsZWN0Q29tcG9uZW50ID0gUmVhY3RBc3luY1NlbGVjdDtcbn1cbmV4cG9ydCBjb25zdCBTZWxlY3RBc3luYyA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHZhbHVlLFxuICAgIG9uQ2hhbmdlLFxuICAgIHZhcmlhbnQsXG4gICAgLi4uc2VsZWN0UHJvcHNcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgdGhlbWUsXG4gICAgc2VsZWN0VGhlbWVcbiAgfSA9IHVzZVNlbGVjdFRoZW1lKCk7XG4gIGNvbnN0IHN0eWxlcyA9IHZhcmlhbnQgPT09ICdmaWx0ZXInID8gZmlsdGVyU3R5bGVzKHRoZW1lKSA6IHNlbGVjdFN0eWxlcyh0aGVtZSk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHNlbGVjdGVkID0+IHtcbiAgICBpZiAodHlwZW9mIG9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSBvbkNoYW5nZShzZWxlY3RlZCk7XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTZWxlY3RDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNzc0NsYXNzKCdTZWxlY3QnKSxcbiAgICB0aGVtZTogc2VsZWN0VGhlbWUsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgaXNDbGVhcmFibGU6IHRydWVcbiAgfSwgc2VsZWN0UHJvcHMpKTtcbn07XG5TZWxlY3RBc3luYy5kZWZhdWx0UHJvcHMgPSB7XG4gIHZhcmlhbnQ6ICdkZWZhdWx0JyxcbiAgb25DaGFuZ2U6IG5vb3Bcbn07XG5TZWxlY3RBc3luYy5kaXNwbGF5TmFtZSA9ICdTZWxlY3RBc3luYyc7XG5leHBvcnQgZGVmYXVsdCBTZWxlY3RBc3luYzsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3BhY2UgfSBmcm9tICdzdHlsZWQtc3lzdGVtJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCIuLi8uLi8uLi9idWlsZC91dGlscy9zdHlsZWQuanNcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vLi4vYXRvbXMvaWNvbi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gXCIuLi8uLi9hdG9tcy90ZXh0L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBCb3ggfSBmcm9tIFwiLi4vLi4vYXRvbXMvYm94L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBjc3NDbGFzcyB9IGZyb20gXCIuLi8uLi91dGlscy9jc3MtY2xhc3MuanNcIjtcblxuLyoqXG4gKiBIYW5kbGVyIHdoaWNoIGlzIGludm9rZWQgd2hlbiB1c2VyIGNsaWNrcyBnaXZlbiBzdGVwXG4gKlxuICogQGFsaWFzIE9uU3RlcENsaWNrSGFuZGxlclxuICogQG1lbWJlcm9mIFN0ZXBcbiAqL1xuXG4vKipcbiAqIEBhbGlhcyBTdGVwUHJvcHNcbiAqIEBtZW1iZXJvZiBTdGVwXG4gKi9cblxuY29uc3QgQ2lyY2xlID0gc3R5bGVkKEJveClgXG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbmA7XG5DaXJjbGUuZGVmYXVsdFByb3BzID0ge1xuICBweTogJ2RlZmF1bHQnLFxuICBweDogJ2RlZmF1bHQnLFxuICBtaW5XaWR0aDogJzM0cHgnLFxuICBoZWlnaHQ6ICczNHB4J1xufTtcbmNvbnN0IFN0eWxlZFN0ZXAgPSBzdHlsZWQuZGl2YFxuICBmbGV4OiAxIDEgMHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuXG4gICYgPiAke0JveH0ge1xuICAgICR7KHtcbiAgZGlzYWJsZWRcbn0pID0+ICFkaXNhYmxlZCA/ICdjdXJzb3I6IHBvaW50ZXInIDogJyd9O1xuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAkeyh7XG4gIGFjdGl2ZSxcbiAgdGhlbWVcbn0pID0+IGFjdGl2ZSA/IHRoZW1lLmNvbG9ycy5wcmltYXJ5MTAwIDogJ3RyYW5zcGFyZW50J307XG4gIH1cbiAgXG4gICR7c3BhY2V9O1xuYDtcblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKlxuICogPGltZyBzcmM9XCJjb21wb25lbnRzL3N0ZXAucG5nXCIgLz5cbiAqXG4gKiBTdGVwIHJlcHJlc2VudHMgb25lIG9mIHRoZSB0YWIgaW4gcGxhY2VkIGluc2lkZSB7QGxpbmsgU3RlcHBlcn0gY29tcG9uZW50LlxuICogWW91IGNhbiB1c2UgaXQgYWxvbmUgb3Igd2l0aCBiZWZvcmUtbWVudGlvbmVkIHtAbGluayBTdGVwcGVyfS5cbiAqXG4gKiAjIyMgVXNhZ2VcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBTdGVwLCBTdGVwUHJvcHMgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJ1xuICogYGBgXG4gKlxuICpcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBzZWUgU3RlcHBlclxuICogQHNlZSBTdGVwUHJvcHNcbiAqIEBzZWUgT25TdGVwQ2xpY2tIYW5kbGVyXG4gKiBAc3ViY2F0ZWdvcnkgTW9sZWN1bGVzXG4gKiBAY29tcG9uZW50XG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5SZWd1bGFyIHN0ZXA8L2NhcHRpb24+XG4gKiByZXR1cm4gKFxuICogICA8Qm94IHA9XCJkZWZhdWx0XCI+XG4gKiAgICAgPFN0ZXAgbnVtYmVyPVwiMVwiPk5vcm1hbCBTdGVwPC9TdGVwPlxuICogIDwvQm94PlxuICogKVxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkFjdGl2ZSBzdGVwczwvY2FwdGlvbj5cbiAqIHJldHVybiAoXG4gKiAgIDxCb3ggcD1cImRlZmF1bHRcIj5cbiAqICAgICA8U3RlcCBudW1iZXI9XCIxXCIgYWN0aXZlPkkgYW0gYWN0aXZlPC9TdGVwPlxuICogIDwvQm94PlxuICogKVxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkFjdGl2ZSBzdGVwczwvY2FwdGlvbj5cbiAqIHJldHVybiAoXG4gKiAgIDxCb3ggcD1cImRlZmF1bHRcIj5cbiAqICAgICA8U3RlcCBudW1iZXI9XCIxXCIgY29tcGxldGVkPlRoaXMgd2FzIGRvbmUgISEhPC9TdGVwPlxuICogIDwvQm94PlxuICogKVxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkNsaWNrYWJsZSBzdGVwPC9jYXB0aW9uPlxuICogY29uc3Qgb25DbGljayA9ICgpID0+IGFsZXJ0KCdXaHkgZGlkIHlvdSBjbGljayBtZT8nKVxuICpcbiAqIHJldHVybiAoXG4gKiAgIDxCb3ggcD1cImRlZmF1bHRcIj5cbiAqICAgICA8U3RlcCBudW1iZXI9XCIxXCIgb25DbGljaz17b25DbGlja30+Q2xpY2sgbWUgaWYgeW91IGRhcmU8L1N0ZXA+XG4gKiAgPC9Cb3g+XG4gKiApXG4gKiBAc2VjdGlvbiBkZXNpZ24tc3lzdGVtXG4gKi9cbmNvbnN0IFN0ZXAgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBudW1iZXIsXG4gICAgY29tcGxldGVkLFxuICAgIGNoaWxkcmVuLFxuICAgIGFjdGl2ZSxcbiAgICBkaXNhYmxlZCxcbiAgICBvbkNsaWNrLFxuICAgIGNsYXNzTmFtZVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRTdGVwLCB7XG4gICAgYWN0aXZlOiBhY3RpdmUsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkIHx8ICFvbkNsaWNrLFxuICAgIGNsYXNzTmFtZTogY3NzQ2xhc3MoJ1N0ZXAnLCBjbGFzc05hbWUpXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIGZsZXhTaHJpbms6IDEsXG4gICAgZmxleEdyb3c6IDAsXG4gICAgZmxleDogdHJ1ZSxcbiAgICBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLFxuICAgIHB0OiBcImxnXCIsXG4gICAgcGI6IFwiZGVmYXVsdFwiLFxuICAgIG9uQ2xpY2s6ICgpID0+ICFkaXNhYmxlZCAmJiBvbkNsaWNrICYmIG9uQ2xpY2sobnVtYmVyKVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDaXJjbGUsIHtcbiAgICBiZzogY29tcGxldGVkID8gJ2dyZXk0MCcgOiAndHJhbnNwYXJlbnQnLFxuICAgIGJvcmRlckNvbG9yOiBhY3RpdmUgPyAncHJpbWFyeTEwMCcgOiAnZ3JleTQwJyxcbiAgICBjb2xvcjogYWN0aXZlID8gJ3ByaW1hcnkxMDAnIDogJ2dyZXk0MCdcbiAgfSwgY29tcGxldGVkID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIGljb246IFwiQ2hlY2tcIixcbiAgICBjb2xvcjogXCJ3aGl0ZVwiXG4gIH0pIDogbnVtYmVyKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwge1xuICAgIG15OiBcInNtXCIsXG4gICAgcGw6IFwiZGVmYXVsdFwiLFxuICAgIHB5OiBcInNtXCIsXG4gICAgY29sb3I6IGFjdGl2ZSB8fCBjb21wbGV0ZWQgPyAnZ3JleTEwMCcgOiAnZ3JleTQwJ1xuICB9LCBjaGlsZHJlbikpKTtcbn07XG5TdGVwLmRpc3BsYXlOYW1lID0gJ1N0ZXAnO1xuZXhwb3J0IHsgU3RlcCB9O1xuZXhwb3J0IGRlZmF1bHQgU3RlcDsiLCJpbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgeyBCb3ggfSBmcm9tIFwiLi4vLi4vYXRvbXMvYm94L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBjc3NDbGFzcyB9IGZyb20gXCIuLi8uLi91dGlscy9jc3MtY2xhc3MuanNcIjtcblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKlxuICogPGltZyBzcmM9XCJjb21wb25lbnRzL3N0ZXBwZXIucG5nXCIgLz5cbiAqXG4gKiBJdCBwcm92aWRlcyB3aXphcmQgd29ya2Zsb3cgd2hlcmUgdXNlciBjYW4gZ28gdGhyb3VnaCBhIGNvdXBsZSBvZiBzdGVwcy5cbiAqIFN0ZXBwZXIgbWFrZXMgc2Vuc2Ugd2hlbiB5b3UgdXNlIGl0IGFsb25nIHdpdGgge0BsaW5rIFN0ZXB9IGNvbXBvbmVudC5cbiAqXG4gKiBJdCByZWNlaXZlcyBhbGwgdGhlIHNhbWUgcHJvcHMgYXMge0BsaW5rIEJveH0gLSB7QGxpbmsgQm94UHJvcHN9LlxuICpcbiAqICMjIyBVc2FnZVxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IFN0ZXBwZXIsIFN0ZXBwZXJQcm9wcyB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nXG4gKiBgYGBcbiAqXG4gKiBAY29tcG9uZW50XG4gKiBAc3ViY2F0ZWdvcnkgTW9sZWN1bGVzXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAc2VlIHtAbGluayBodHRwczovL3N0b3J5Ym9vay5hZG1pbmpzLmNvLz9wYXRoPS9zdG9yeS9kZXNpZ25zeXN0ZW0tbW9sZWN1bGVzLXN0ZXBwZXItLWNsaWNrYWJsZS1zdGVwcyBTdG9yeWJvb2t9XG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5DbGlja2FibGUgc3RlcHM8L2NhcHRpb24+XG4gKiBjb25zdCB7IHVzZVN0YXRlIH0gPSBSZWFjdFxuICogY29uc3Qgc3RlcHMgPSBbe1xuICogICBudW1iZXI6IDEsIGxhYmVsOiBcIkRvIHRoaXMgZmlyc3RcIixcbiAqIH0sIHtcbiAqICAgbnVtYmVyOiAyLCBsYWJlbDogXCJEb24ndCBmb3JnZXQgdGhpc1wiLFxuICogfSwge1xuICogICBudW1iZXI6IDMsIGxhYmVsOiBcIkFuZCBmaW5hbGx5IHRoaXNcIixcbiAqIH1dXG4gKiBjb25zdCBDb21wb25lbnRXaXRoU3RlcHBlciA9ICgpID0+IHtcbiAqICAgY29uc3QgW2N1cnJlbnRTdGVwLCBzZXRDdXJyZW50U3RlcF0gPSB1c2VTdGF0ZSgxKVxuICogICByZXR1cm4gKFxuICogICA8Qm94PlxuICogICAgIDxTdGVwcGVyPlxuICogICAgIHtzdGVwcy5tYXAoc3RlcCA9PiAoXG4gKiAgICAgICAgPFN0ZXBcbiAqICAgICAgICAgIGFjdGl2ZT17Y3VycmVudFN0ZXAgPT09IHN0ZXAubnVtYmVyfVxuICogICAgICAgICAgY29tcGxldGVkPXtjdXJyZW50U3RlcCA+IHN0ZXAubnVtYmVyfVxuICogICAgICAgICAgb25DbGljaz17c2V0Q3VycmVudFN0ZXB9XG4gKiAgICAgICAgICBudW1iZXI9e3N0ZXAubnVtYmVyfVxuICogICAgICAgID5cbiAqICAgICAgICAgIHtzdGVwLmxhYmVsfVxuICogICAgICAgIDwvU3RlcD5cbiAqICAgICApKX1cbiAqICAgICA8L1N0ZXBwZXI+XG4gKiAgIDwvQm94PlxuICogICApXG4gKiB9XG4gKlxuICogcmV0dXJuICg8Q29tcG9uZW50V2l0aFN0ZXBwZXIgLz4pXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+U3RlcHMgd2l0aCBib3R0b20gbmF2aWdhdGlvbjwvY2FwdGlvbj5cbiAqIGNvbnN0IHsgdXNlU3RhdGUgfSA9IFJlYWN0XG4gKiBjb25zdCBzdGVwcyA9IFt7XG4gKiAgIG51bWJlcjogMSwgbGFiZWw6IFwiRG8gdGhpcyBmaXJzdFwiLFxuICogfSwge1xuICogICBudW1iZXI6IDIsIGxhYmVsOiBcIkRvbid0IGZvcmdldCB0aGlzXCIsXG4gKiB9LCB7XG4gKiAgIG51bWJlcjogMywgbGFiZWw6IFwiQW5kIGZpbmFsbHkgdGhpc1wiLFxuICogfV1cbiAqIGNvbnN0IENvbXBvbmVudFdpdGhTdGVwcGVyID0gKCkgPT4ge1xuICogICBjb25zdCBbY3VycmVudFN0ZXAsIHNldEN1cnJlbnRTdGVwXSA9IHVzZVN0YXRlKDEpXG4gKiAgIHJldHVybiAoXG4gKiAgIDxCb3g+XG4gKiAgICAgPFN0ZXBwZXI+XG4gKiAgICAge3N0ZXBzLm1hcChzdGVwID0+IChcbiAqICAgICAgICA8U3RlcFxuICogICAgICAgICAgYWN0aXZlPXtjdXJyZW50U3RlcCA9PT0gc3RlcC5udW1iZXJ9XG4gKiAgICAgICAgICBjb21wbGV0ZWQ9e2N1cnJlbnRTdGVwID4gc3RlcC5udW1iZXJ9XG4gKiAgICAgICAgICBudW1iZXI9e3N0ZXAubnVtYmVyfVxuICogICAgICAgID5cbiAqICAgICAgICAgIHtzdGVwLmxhYmVsfVxuICogICAgICAgIDwvU3RlcD5cbiAqICAgICApKX1cbiAqICAgICA8L1N0ZXBwZXI+XG4gKiAgICAgPEJveCBtdD1cInhsXCI+XG4gKiAgICAgICA8QnV0dG9uXG4gKiAgICAgICAgIGRpc2FibGVkPXtjdXJyZW50U3RlcCA9PT0gMX1cbiAqICAgICAgICAgbXI9XCJkZWZhdWx0XCJcbiAqICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Q3VycmVudFN0ZXAoY3VycmVudFN0ZXAgLSAxKX1cbiAqICAgICAgID5cbiAqICAgICAgICAgUHJldmlvdXMgU3RlcFxuICogICAgICAgPC9CdXR0b24+XG4gKiAgICAgICA8QnV0dG9uXG4gKiAgICAgICAgIGRpc2FibGVkPXtjdXJyZW50U3RlcCA9PT0gM31cbiAqICAgICAgICAgdmFyaWFudD1cInByaW1hcnlcIlxuICogICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRDdXJyZW50U3RlcChjdXJyZW50U3RlcCArIDEpfVxuICogICAgICAgPlxuICogICAgICAgICBOZXh0IFN0ZXBcbiAqICAgICAgIDwvQnV0dG9uPlxuICogICAgIDwvQm94PlxuICogICA8L0JveD5cbiAqICAgKVxuICogfVxuICpcbiAqIHJldHVybiAoPENvbXBvbmVudFdpdGhTdGVwcGVyIC8+KVxuICpcbiAqIEBzZWN0aW9uIGRlc2lnbi1zeXN0ZW1cbiAqL1xuY29uc3QgU3RlcHBlciA9IHN0eWxlZChCb3gpYFxuYDtcblN0ZXBwZXIuZGVmYXVsdFByb3BzID0ge1xuICBmbGV4OiB0cnVlLFxuICBmbGV4RGlyZWN0aW9uOiBbJ2NvbHVtbicsICdyb3cnXSxcbiAgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkJyxcbiAgYm9yZGVyQm90dG9tQ29sb3I6ICdzZXBhcmF0b3InLFxuICBjbGFzc05hbWU6IGNzc0NsYXNzKCdTdGVwcGVyJylcbn07XG5TdGVwcGVyLmRpc3BsYXlOYW1lID0gJ1N0ZXBwZXInO1xuZXhwb3J0IHsgU3RlcHBlciB9O1xuZXhwb3J0IGRlZmF1bHQgU3RlcHBlcjsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94IH0gZnJvbSBcIi4uLy4uL2F0b21zL2JveC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vLi4vYXRvbXMvbGFiZWwvaW5kZXguanNcIjtcbmltcG9ydCB7IFRleHQgfSBmcm9tIFwiLi4vLi4vYXRvbXMvdGV4dC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbG9hZCAuL3ZhbHVlLWdyb3VwLmRvYy5tZFxuICogQGNvbXBvbmVudFxuICogQHN1YmNhdGVnb3J5IE1vbGVjdWxlc1xuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHNlZSBWYWx1ZUdyb3VwUHJvcHNcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vc3Rvcnlib29rLmFkbWluanMuY28vP3BhdGg9L3N0b3J5L2Rlc2lnbnN5c3RlbS1tb2xlY3VsZXMtdmFsdWUtZ3JvdXAtLWRlZmF1bHQgU3Rvcnlib29rfVxuICogQG5ldyBJbiB2ZXJzaW9uIDMuM1xuICogQHNlY3Rpb24gZGVzaWduLXN5c3RlbVxuICovXG5leHBvcnQgY29uc3QgVmFsdWVHcm91cCA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIGxhYmVsLFxuICAgIHZhbHVlLFxuICAgIGNoaWxkcmVuXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIG1iOiBcInhsXCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGFiZWwsIHtcbiAgICB2YXJpYW50OiBcImxpZ2h0XCJcbiAgfSwgbGFiZWwpLCB2YWx1ZSA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIG51bGwsIHZhbHVlKSA6ICcnLCBjaGlsZHJlbik7XG59O1xuVmFsdWVHcm91cC5kaXNwbGF5TmFtZSA9ICdWYWx1ZUdyb3VwJztcbmV4cG9ydCBkZWZhdWx0IFZhbHVlR3JvdXA7IiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlcyAqL1xuaW1wb3J0IHsgc3R5bGVkLCBjc3MgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgeyBCb3ggfSBmcm9tIFwiLi4vLi4vYXRvbXMvYm94L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vLi4vYXRvbXMvYnV0dG9uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBjc3NDbGFzcywgdGhlbWVHZXQgfSBmcm9tIFwiLi4vLi4vdXRpbHMvaW5kZXguanNcIjtcbmltcG9ydCB7IERyb3BEb3duSXRlbUFjdGlvbiB9IGZyb20gXCIuLi8uLi9tb2xlY3VsZXMvZHJvcC1kb3duL2luZGV4LmpzXCI7XG5leHBvcnQgY29uc3QgQlVUVE9OX0lOX0dST1VQX0NMQVNTX05BTUUgPSBjc3NDbGFzcygnQnV0dG9uR3JvdXBJdGVtJyk7XG5leHBvcnQgY29uc3QgYnV0dG9uTWFyZ2luID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgc2l6ZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG1hcmdpbiA9IHNpemUgPT09ICdzbScgPyAnbWQnIDogJ2xnJztcbiAgcmV0dXJuIGNzc2BcbiAgICAmID4gLiR7QlVUVE9OX0lOX0dST1VQX0NMQVNTX05BTUV9IHtcbiAgICAgIG1hcmdpbi1yaWdodDogJHt0aGVtZUdldCgnc3BhY2UnLCBtYXJnaW4pfTtcbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIH1cbiAgICB9XG4gIGA7XG59O1xuZXhwb3J0IGNvbnN0IGhhc0hhbmRsZXIgPSBwcm9wcyA9PiB7XG4gIGlmICghcHJvcHMub25DbGljayAmJiAhcHJvcHMuaHJlZikge1xuICAgIHJldHVybiBjc3NgXG4gICAgICAmJiYge1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICB9XG4gICAgYDtcbiAgfVxuICByZXR1cm4gJyc7XG59O1xuZXhwb3J0IGNvbnN0IGhhc0xhYmVsID0gcHJvcHMgPT4ge1xuICBpZiAoIXByb3BzLmhhc0xhYmVsKSB7XG4gICAgcmV0dXJuIGNzc2BcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIHBhZGRpbmctbGVmdDogJHt0aGVtZUdldCgnc3BhY2UnLCAnbWQnKX07XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAke3RoZW1lR2V0KCdzcGFjZScsICdtZCcpfTtcbiAgICAgICYgPiAuJHtjc3NDbGFzcygnSWNvbicpfSB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIH1cbiAgICBgO1xuICB9XG4gIHJldHVybiAnJztcbn07XG5leHBvcnQgY29uc3QgU3R5bGVkU2luZ2xlQnV0dG9uID0gc3R5bGVkKEJ1dHRvbilgXG4gICR7aGFzTGFiZWx9O1xuICAke2hhc0hhbmRsZXJ9O1xuYDtcbmV4cG9ydCBjb25zdCBTdHlsZWREcm9wRG93bkl0ZW1BY3Rpb24gPSBzdHlsZWQoRHJvcERvd25JdGVtQWN0aW9uKWBcbiAgJHtoYXNMYWJlbH07XG5gO1xuZXhwb3J0IGNvbnN0IFN0eWxlZEJ1dHRvbkdyb3VwID0gc3R5bGVkKEJveClgXG4gICR7YnV0dG9uTWFyZ2lufTtcbmA7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb3ggfSBmcm9tIFwiLi4vLi4vYXRvbXMvYm94L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uLy4uL2F0b21zL2ljb24vaW5kZXguanNcIjtcbmltcG9ydCB7IFN0eWxlZFNpbmdsZUJ1dHRvbiB9IGZyb20gXCIuL2J1dHRvbi1ncm91cC5zdHlsZWQuanNcIjtcbmV4cG9ydCBjb25zdCBTaW5nbGVCdXR0b25Jbkdyb3VwID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgaWNvbixcbiAgICBsYWJlbCxcbiAgICBidXR0b25zLFxuICAgIHNvdXJjZSxcbiAgICBvbkNsaWNrLFxuICAgIC4uLmJ1dHRvblByb3BzXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBvbkNsaWNrSGFuZGxlciA9IG9uQ2xpY2sgPyBhc3luYyBldmVudCA9PiB7XG4gICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICBhd2FpdCBvbkNsaWNrKGV2ZW50LCBzb3VyY2UpO1xuICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICB9IDogdW5kZWZpbmVkO1xuICBjb25zdCBpY29uTmFtZSA9IHVzZU1lbW8oKCkgPT4gbG9hZGluZyA/ICdMb2FkZXInIDogaWNvbiwgW2xvYWRpbmddKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZFNpbmdsZUJ1dHRvbiwgX2V4dGVuZHMoe1xuICAgIGFzOiBcImFcIixcbiAgICBoYXNMYWJlbDogISFsYWJlbCxcbiAgICBvbkNsaWNrOiBvbkNsaWNrSGFuZGxlclxuICB9LCBidXR0b25Qcm9wcyksICFsb2FkaW5nICYmICFpY29uID8gJycgOiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAga2V5OiBpY29uTmFtZT8udG9TdHJpbmcoKSxcbiAgICBpY29uOiBpY29uTmFtZSxcbiAgICBzcGluOiBsb2FkaW5nXG4gIH0pLCBsYWJlbCwgYnV0dG9ucyAmJiBidXR0b25zLmxlbmd0aCAmJiBsYWJlbCA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIGFzOiBcInNwYW5cIixcbiAgICBtcjogXCItOHB4XCIsXG4gICAgbWw6IFwibWRcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgaWNvbjogXCJDaGV2cm9uRG93blwiXG4gIH0pKSA6ICcnKTtcbn07XG5TaW5nbGVCdXR0b25Jbkdyb3VwLmRpc3BsYXlOYW1lID0gJ1NpbmdsZUJ1dHRvbkluR3JvdXAnO1xuZXhwb3J0IGRlZmF1bHQgU2luZ2xlQnV0dG9uSW5Hcm91cDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vLi4vYXRvbXMvaWNvbi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgRHJvcERvd25NZW51LCBEcm9wRG93bkl0ZW0gfSBmcm9tIFwiLi4vLi4vbW9sZWN1bGVzL2Ryb3AtZG93bi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU3R5bGVkRHJvcERvd25JdGVtQWN0aW9uIH0gZnJvbSBcIi4vYnV0dG9uLWdyb3VwLnN0eWxlZC5qc1wiO1xuZXhwb3J0IGNvbnN0IERyb3BEb3duSXRlbVdpdGhCdXR0b25zID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgdmFyaWFudCxcbiAgICBvbkNsaWNrLFxuICAgIGhyZWYsXG4gICAgaWNvbixcbiAgICBsYWJlbCxcbiAgICBidXR0b25zLFxuICAgIHNvdXJjZSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBvbkNsaWNrSGFuZGxlciA9IG9uQ2xpY2sgPyBhc3luYyBldmVudCA9PiB7XG4gICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICBhd2FpdCBvbkNsaWNrKGV2ZW50LCBzb3VyY2UpO1xuICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICB9IDogdW5kZWZpbmVkO1xuICBjb25zdCBpY29uTmFtZSA9IHVzZU1lbW8oKCkgPT4gbG9hZGluZyA/ICdMb2FkZXInIDogaWNvbiwgW2xvYWRpbmddKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyb3BEb3duSXRlbSwge1xuICAgIGNvbG9yVmFyaWFudDogdmFyaWFudCxcbiAgICBwOiAwXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZERyb3BEb3duSXRlbUFjdGlvbiwgX2V4dGVuZHMoe1xuICAgIG9uQ2xpY2s6IG9uQ2xpY2tIYW5kbGVyLFxuICAgIGhyZWY6IGhyZWYsXG4gICAgYXM6IFwiYVwiLFxuICAgIGhhc0xhYmVsOiAhIWxhYmVsXG4gIH0sIHJlc3QpLCBidXR0b25zICYmIGJ1dHRvbnMubGVuZ3RoID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIGljb246IFwiQ2hldnJvbkxlZnRcIixcbiAgICBtbDogXCItMjRweFwiLFxuICAgIG1yOiBcIjBcIlxuICB9KSA6ICcnLCAhbG9hZGluZyAmJiAhaWNvbiA/ICcnIDogLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIGtleTogaWNvbk5hbWU/LnRvU3RyaW5nKCksXG4gICAgaWNvbjogaWNvbk5hbWUsXG4gICAgc3BpbjogbG9hZGluZ1xuICB9KSwgbGFiZWwpLCBidXR0b25zICYmIGJ1dHRvbnMubGVuZ3RoID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRHJvcERvd25NZW51LCBudWxsLCBidXR0b25zLm1hcChidXR0b24gPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRHJvcERvd25JdGVtV2l0aEJ1dHRvbnMsIF9leHRlbmRzKHt9LCBidXR0b24sIHtcbiAgICBrZXk6IGJ1dHRvbi5sYWJlbFxuICB9KSkpKSA6ICcnKTtcbn07XG5Ecm9wRG93bkl0ZW1XaXRoQnV0dG9ucy5kaXNwbGF5TmFtZSA9ICdEcm9wRG93bkl0ZW1XaXRoQnV0dG9ucyc7XG5leHBvcnQgZGVmYXVsdCBEcm9wRG93bkl0ZW1XaXRoQnV0dG9uczsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBEcm9wRG93biwgRHJvcERvd25NZW51LCBEcm9wRG93blRyaWdnZXIgfSBmcm9tIFwiLi4vLi4vbW9sZWN1bGVzL2Ryb3AtZG93bi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU2luZ2xlQnV0dG9uSW5Hcm91cCB9IGZyb20gXCIuL3NpbmdsZS1idXR0b24taW4tZ3JvdXAuanNcIjtcbmltcG9ydCB7IERyb3BEb3duSXRlbVdpdGhCdXR0b25zIH0gZnJvbSBcIi4vZHJvcC1kb3duLWl0ZW0td2l0aC1idXR0b25zLmpzXCI7XG5leHBvcnQgY29uc3QgQnV0dG9uSW5Hcm91cCA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIGJ1dHRvbnMsXG4gICAgY2xhc3NOYW1lLFxuICAgIC4uLmJ1dHRvblByb3BzXG4gIH0gPSBwcm9wcztcbiAgaWYgKGJ1dHRvbnMgJiYgYnV0dG9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRHJvcERvd24sIHtcbiAgICAgIHN0aWNrOiBcInJpZ2h0XCIsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyb3BEb3duVHJpZ2dlciwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2luZ2xlQnV0dG9uSW5Hcm91cCwgcHJvcHMpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRHJvcERvd25NZW51LCBudWxsLCBidXR0b25zLm1hcChidXR0b24gPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRHJvcERvd25JdGVtV2l0aEJ1dHRvbnMsIF9leHRlbmRzKHt9LCBidXR0b24sIHtcbiAgICAgIGtleTogYCR7YnV0dG9uLmxhYmVsfS0ke2J1dHRvbi5pY29ufWBcbiAgICB9KSkpKSk7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNpbmdsZUJ1dHRvbkluR3JvdXAsIF9leHRlbmRzKHt9LCBidXR0b25Qcm9wcywge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gIH0pKTtcbn07XG5CdXR0b25Jbkdyb3VwLmRpc3BsYXlOYW1lID0gJ0J1dHRvbkluR3JvdXAnO1xuZXhwb3J0IGRlZmF1bHQgQnV0dG9uSW5Hcm91cDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJVVFRPTl9JTl9HUk9VUF9DTEFTU19OQU1FLCBTdHlsZWRCdXR0b25Hcm91cCB9IGZyb20gXCIuL2J1dHRvbi1ncm91cC5zdHlsZWQuanNcIjtcbmltcG9ydCB7IEJ1dHRvbkluR3JvdXAgfSBmcm9tIFwiLi9idXR0b24taW4tZ3JvdXAuanNcIjtcblxuLyoqXG4gKiBAbG9hZCAuL2J1dHRvbi1ncm91cC5kb2MubWRcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vc3Rvcnlib29rLmFkbWluanMuY28vP3BhdGg9L3N0b3J5L2Rlc2lnbnN5c3RlbS1tb2xlY3VsZXMtYnV0dG9uLWdyb3VwLS1kZWZhdWx0IFN0b3J5Ym9va31cbiAqIEBjb21wb25lbnRcbiAqIEBzdWJjYXRlZ29yeSBPcmdhbmlzbXNcbiAqIEBzZWN0aW9uIGRlc2lnbi1zeXN0ZW1cbiAqIEBuZXcgaW4gdmVyc2lvbiAzLjNcbiAqL1xuZXhwb3J0IGNvbnN0IEJ1dHRvbkdyb3VwID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgYnV0dG9ucyxcbiAgICBzaXplLFxuICAgIHJvdW5kZWRcbiAgfSA9IHByb3BzO1xuICBpZiAoIWJ1dHRvbnMgfHwgIWJ1dHRvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZEJ1dHRvbkdyb3VwLCBwcm9wcywgYnV0dG9ucy5tYXAoKGJ1dHRvbiwgaSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uSW5Hcm91cCwgX2V4dGVuZHMoe1xuICAgIGtleTogYCR7YnV0dG9uLmxhYmVsIHx8ICcnfS0ke2l9YCxcbiAgICBzaXplOiBzaXplLFxuICAgIHJvdW5kZWQ6IHJvdW5kZWRcbiAgfSwgYnV0dG9uLCB7XG4gICAgY2xhc3NOYW1lOiBCVVRUT05fSU5fR1JPVVBfQ0xBU1NfTkFNRVxuICB9KSkpKTtcbn07XG5CdXR0b25Hcm91cC5kaXNwbGF5TmFtZSA9ICdCdXR0b25Hcm91cCc7XG5leHBvcnQgZGVmYXVsdCBCdXR0b25Hcm91cDsiLCJpbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgeyBjc3NDbGFzcywgdGhlbWVHZXQgfSBmcm9tIFwiLi4vLi4vdXRpbHMvaW5kZXguanNcIjtcbmltcG9ydCB7IEJveCB9IGZyb20gXCIuLi8uLi9hdG9tcy9ib3gvaW5kZXguanNcIjtcbmV4cG9ydCBjb25zdCBTdHlsZWRDdXJyZW50VXNlck5hdiA9IHN0eWxlZChCb3gpYFxuICB0ZXh0LWFsaWduOiByaWdodDtcblxuICAmIC5saW5lLWFjdGlvbiB7XG4gICAgLiR7Y3NzQ2xhc3MoJ0ljb24nKX0gc3ZnIHtcbiAgICAgIHN0cm9rZTogJHt0aGVtZUdldCgnY29sb3JzJywgJ2dyZXk4MCcpfTtcbiAgICB9XG4gICAgJjpob3ZlciAuJHtjc3NDbGFzcygnSWNvbicpfSBzdmcge1xuICAgICAgc3Ryb2tlOiAke3RoZW1lR2V0KCdjb2xvcnMnLCAncHJpbWFyeTEwMCcpfTtcbiAgICB9XG4gIH1cblxuICAmIGltZyB7XG4gICAgd2lkdGg6IDM2cHg7XG4gICAgaGVpZ2h0OiAzNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDQwcHg7XG4gICAgbWFyZ2luOiAtMXB4ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ21kJyl9IDA7XG4gIH1cbmA7XG5TdHlsZWRDdXJyZW50VXNlck5hdi5kZWZhdWx0UHJvcHMgPSB7XG4gIGZsZXg6IHRydWUsXG4gIGZsZXhEaXJlY3Rpb246ICdyb3cnXG59O1xuZXhwb3J0IGRlZmF1bHQgU3R5bGVkQ3VycmVudFVzZXJOYXY7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJveCB9IGZyb20gXCIuLi8uLi9hdG9tcy9ib3gvaW5kZXguanNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi8uLi9hdG9tcy9idXR0b24vaW5kZXguanNcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vLi4vYXRvbXMvaWNvbi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU21hbGxUZXh0LCBUaXRsZSB9IGZyb20gXCIuLi8uLi9hdG9tcy90eXBvZ3JhcGh5L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBEcm9wRG93biwgRHJvcERvd25JdGVtLCBEcm9wRG93bk1lbnUsIERyb3BEb3duVHJpZ2dlciB9IGZyb20gXCIuLi8uLi9tb2xlY3VsZXMvZHJvcC1kb3duL2luZGV4LmpzXCI7XG5pbXBvcnQgU3R5bGVkQ3VycmVudFVzZXJOYXYgZnJvbSBcIi4vY3VycmVudC11c2VyLW5hdi1zdHlsZWQuanNcIjtcbmltcG9ydCB7IEF2YXRhciB9IGZyb20gXCIuLi8uLi9hdG9tcy9hdmF0YXIvaW5kZXguanNcIjtcblxuLyoqXG4gKiBAbG9hZCAuL2N1cnJlbnQtdXNlci1uYXYuZG9jLm1kXG4gKiBAY29tcG9uZW50XG4gKiBAc3ViY2F0ZWdvcnkgT3JnYW5pc21zXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAc2VlIEN1cnJlbnRVc2VyTmF2UHJvcHNcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vc3Rvcnlib29rLmFkbWluanMuY28vP3BhdGg9L3N0b3J5L2Rlc2lnbnN5c3RlbS1vcmdhbmlzbXMtY3VycmVudC11c2VyLW5hdi0tZGVmYXVsdCBTdG9yeWJvb2t9XG4gKiBAbmV3IEluIHZlcnNpb24gMy4zXG4gKiBAc2VjdGlvbiBkZXNpZ24tc3lzdGVtXG4gKi9cbmV4cG9ydCBjb25zdCBDdXJyZW50VXNlck5hdiA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIG5hbWUgPSAnJyxcbiAgICB0aXRsZSA9ICcnLFxuICAgIGF2YXRhclVybCxcbiAgICBkcm9wQWN0aW9ucyxcbiAgICBsaW5lQWN0aW9uc1xuICB9ID0gcHJvcHM7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRDdXJyZW50VXNlck5hdiwgbnVsbCwgbGluZUFjdGlvbnMgJiYgbGluZUFjdGlvbnMubGVuZ3RoICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIGZsZXg6IHRydWUsXG4gICAgZmxleERpcmVjdGlvbjogXCJyb3dcIixcbiAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiXG4gIH0sIGxpbmVBY3Rpb25zLm1hcChhY3Rpb24gPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7XG4gICAgc2l6ZTogXCJpY29uXCIsXG4gICAgdmFyaWFudDogXCJ0ZXh0XCIsXG4gICAgdGl0bGU6IGFjdGlvbi5sYWJlbCxcbiAgICBrZXk6IGFjdGlvbi5sYWJlbCxcbiAgICBocmVmOiBhY3Rpb24uaHJlZixcbiAgICBhczogXCJhXCIsXG4gICAgY2xhc3NOYW1lOiBcImxpbmUtYWN0aW9uXCIsXG4gICAgb25DbGljazogYWN0aW9uLm9uQ2xpY2tcbiAgfSwgYWN0aW9uLmljb24gJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIGljb246IGFjdGlvbi5pY29uXG4gIH0pKSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEcm9wRG93biwge1xuICAgIHN0aWNrOiBcInJpZ2h0XCIsXG4gICAgZGlzcGxheTogXCJmbGV4XCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRHJvcERvd25UcmlnZ2VyLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBmbGV4OiB0cnVlLFxuICAgIGZsZXhEaXJlY3Rpb246IFwicm93XCIsXG4gICAgcHg6IFwieGxcIixcbiAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgIGhlaWdodDogXCJuYXZiYXJIZWlnaHRcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRpdGxlLCBudWxsLCBuYW1lKSwgdGl0bGUgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU21hbGxUZXh0LCBudWxsLCB0aXRsZSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBdmF0YXIsIHtcbiAgICBzcmM6IGF2YXRhclVybCxcbiAgICBhbHQ6IG5hbWUsXG4gICAgbWFyZ2luTGVmdDogXCJsZ1wiXG4gIH0sIG5hbWUuc2xpY2UoMCwgMSkudG9VcHBlckNhc2UoKSkpKSwgZHJvcEFjdGlvbnMgJiYgZHJvcEFjdGlvbnMubGVuZ3RoICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyb3BEb3duTWVudSwge1xuICAgIG1pbldpZHRoOiBcIjEwMCVcIlxuICB9LCBkcm9wQWN0aW9ucy5tYXAoYWN0aW9uID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyb3BEb3duSXRlbSwge1xuICAgIGtleTogYWN0aW9uLmxhYmVsLFxuICAgIGFzOiBcImFcIixcbiAgICBvbkNsaWNrOiBhY3Rpb24ub25DbGljayxcbiAgICBocmVmOiBhY3Rpb24uaHJlZlxuICB9LCBhY3Rpb24uaWNvbiAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgaWNvbjogYWN0aW9uLmljb25cbiAgfSksIGFjdGlvbi5sYWJlbCkpKSkpO1xufTtcbkN1cnJlbnRVc2VyTmF2LmRpc3BsYXlOYW1lID0gJ0N1cnJlbnRVc2VyTmF2JztcbmV4cG9ydCBkZWZhdWx0IEN1cnJlbnRVc2VyTmF2OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiLi4vLi4vLi4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzXCI7XG5pbXBvcnQgeyBCb3ggfSBmcm9tIFwiLi4vLi4vYXRvbXMvYm94L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uLy4uL2F0b21zL2ljb24vaW5kZXguanNcIjtcbmltcG9ydCB7IExpbmsgfSBmcm9tIFwiLi4vLi4vYXRvbXMvbGluay9pbmRleC5qc1wiO1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gXCIuLi8uLi9hdG9tcy90ZXh0L2luZGV4LmpzXCI7XG5pbXBvcnQgeyB0aGVtZUdldCB9IGZyb20gXCIuLi8uLi91dGlscy9pbmRleC5qc1wiO1xuY29uc3QgU3R5bGVkV3JhcHBlciA9IHN0eWxlZChCb3gpYFxuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgJiA+ICoge1xuICAgIHBhZGRpbmc6IDAgJHt0aGVtZUdldCgnc3BhY2UnLCAneHMnKX07XG4gIH1cbmA7XG5TdHlsZWRXcmFwcGVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgY29sb3I6ICdncmV5NjAnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcidcbn07XG5jb25zdCBTdHlsZWRMaW5rID0gc3R5bGVkKExpbmspYFxuICBmb250LXNpemU6ICR7dGhlbWVHZXQoJ2ZvbnRTaXplcycsICdzbScpfTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICR7dGhlbWVHZXQoJ2NvbG9ycycsICdsb3ZlJyl9O1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuYDtcbmV4cG9ydCBjb25zdCBNYWRlV2l0aExvdmUgPSAoKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRXcmFwcGVyLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7XG4gIGFzOiBcInNwYW5cIixcbiAgdmFyaWFudDogXCJzbVwiXG59LCBcIk1hZGUgd2l0aFwiKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICBpY29uOiBcIkhlYXJ0XCIsXG4gIGNvbG9yOiBcImxvdmVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIHtcbiAgYXM6IFwic3BhblwiLFxuICB2YXJpYW50OiBcInNtXCJcbn0sIFwiYnlcIiksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZExpbmssIHtcbiAgaHJlZjogXCJodHRwczovL2FkbWluanMuY28vXCIsXG4gIHRhcmdldDogXCJfYmxhbmtcIixcbiAgcmVsOiBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxufSwgXCJBZG1pbkpTIFRlYW1cIikpO1xuTWFkZVdpdGhMb3ZlLmRpc3BsYXlOYW1lID0gJ01hZGVXaXRoTG92ZSc7XG5leHBvcnQgZGVmYXVsdCBNYWRlV2l0aExvdmU7IiwiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIi4uLy4uLy4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuaW1wb3J0IHsgQm94IH0gZnJvbSBcIi4uLy4uL2F0b21zL2JveC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgdGhlbWVHZXQgfSBmcm9tIFwiLi4vLi4vdXRpbHMvaW5kZXguanNcIjtcbmV4cG9ydCBjb25zdCBTdHlsZWROYXZpZ2F0aW9uID0gc3R5bGVkKEJveClgXG4gIHVsIHVsID4gbGkge1xuICAgIGEge1xuICAgICAgcGFkZGluZy1sZWZ0OiAke3RoZW1lR2V0KCdzcGFjZScsICd4MycpfTtcbiAgICB9XG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1ib3R0b206ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ2xnJyl9O1xuICAgIH1cbiAgfVxuYDtcbmV4cG9ydCBkZWZhdWx0IFN0eWxlZE5hdmlnYXRpb247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vbW9sZWN1bGVzL25hdmlnYXRpb24tZWxlbWVudC9pbmRleC5qc1wiO1xuZXhwb3J0IGNvbnN0IE5hdmlnYXRpb25FbGVtZW50V3JhcHBlciA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRzLFxuICAgIGlzT3BlblxuICB9ID0gcHJvcHM7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE5hdmlnYXRpb25FbGVtZW50LCBwcm9wcyksIGVsZW1lbnRzPy5sZW5ndGggJiYgaXNPcGVuID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCBudWxsLCBlbGVtZW50cy5tYXAoKGVsZW1lbnQsIGlkKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOYXZpZ2F0aW9uRWxlbWVudFdyYXBwZXIsIF9leHRlbmRzKHt9LCBlbGVtZW50LCB7XG4gICAga2V5OiBbaWQsIGVsZW1lbnQuaHJlZl0uam9pbignLScpXG4gIH0pKSkpIDogJycpO1xufTtcbk5hdmlnYXRpb25FbGVtZW50V3JhcHBlci5kaXNwbGF5TmFtZSA9ICdOYXZpZ2F0aW9uRWxlbWVudFdyYXBwZXInO1xuZXhwb3J0IGRlZmF1bHQgTmF2aWdhdGlvbkVsZW1lbnRXcmFwcGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFN0eWxlZE5hdmlnYXRpb24gfSBmcm9tIFwiLi9uYXZpZ2F0aW9uLXN0eWxlZC5qc1wiO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVsZW1lbnRXcmFwcGVyIH0gZnJvbSBcIi4vbmF2aWdhdGlvbi1lbGVtZW50LXdyYXBwZXIuanNcIjtcbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uLy4uL2F0b21zL2xhYmVsL2luZGV4LmpzXCI7XG5cbi8qKlxuICogQGxvYWQgLi9uYXZpZ2F0aW9uLmRvYy5tZFxuICogQGNvbXBvbmVudFxuICogQHN1YmNhdGVnb3J5IE9yZ2FuaXNtc1xuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHNlZSBOYXZpZ2F0aW9uUHJvcHNcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vc3Rvcnlib29rLmFkbWluanMuY28vP3BhdGg9L3N0b3J5L2Rlc2lnbnN5c3RlbS1vcmdhbmlzbXMtbmF2aWdhdGlvbi0tZGVmYXVsdCBTdG9yeWJvb2t9XG4gKiBAbmV3IEluIHZlcnNpb24gMy4zXG4gKiBAc2VjdGlvbiBkZXNpZ24tc3lzdGVtXG4gKi9cbmV4cG9ydCBjb25zdCBOYXZpZ2F0aW9uID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgbGFiZWwsXG4gICAgZWxlbWVudHNcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkTmF2aWdhdGlvbiwge1xuICAgIHB4OiBcInhsXCIsXG4gICAgcHk6IFwibGdcIlxuICB9LCAhIWxhYmVsPy5sZW5ndGggJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGFiZWwsIHtcbiAgICBwbDogXCJsZ1wiLFxuICAgIG1iOiBcIm1kXCIsXG4gICAgdXBwZXJjYXNlOiB0cnVlXG4gIH0sIGxhYmVsKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCBudWxsLCBlbGVtZW50cy5tYXAoKGVsZW1lbnQsIGlkKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOYXZpZ2F0aW9uRWxlbWVudFdyYXBwZXIsIF9leHRlbmRzKHtcbiAgICBrZXk6IFtpZCwgZWxlbWVudC5ocmVmXS5qb2luKCctJylcbiAgfSwgZWxlbWVudCkpKSkpO1xufTtcbk5hdmlnYXRpb24uZGlzcGxheU5hbWUgPSAnTmF2aWdhdGlvbic7XG5leHBvcnQgZGVmYXVsdCBOYXZpZ2F0aW9uOyIsImltcG9ydCB7IGNyZWF0ZUdsb2JhbFN0eWxlIH0gZnJvbSBcIi4uL2J1aWxkL3V0aWxzL3N0eWxlZC5qc1wiO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9ydFxuZXhwb3J0IGNvbnN0IEdsb2JhbFN0eWxlID0gY3JlYXRlR2xvYmFsU3R5bGVgXG4gIC8qIGh0dHA6Ly9tZXllcndlYi5jb20vZXJpYy90b29scy9jc3MvcmVzZXQvIFxuICAgIHYyLjAgfCAyMDExMDEyNlxuICAgIExpY2Vuc2U6IG5vbmUgKHB1YmxpYyBkb21haW4pXG4gICovXG5cbiAgaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBhcHBsZXQsIG9iamVjdCwgaWZyYW1lLFxuICBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBwLCBibG9ja3F1b3RlLCBwcmUsXG4gIGEsIGFiYnIsIGFjcm9ueW0sIGFkZHJlc3MsIGJpZywgY2l0ZSwgY29kZSxcbiAgZGVsLCBkZm4sIGVtLCBpbWcsIGlucywga2JkLCBxLCBzLCBzYW1wLFxuICBzbWFsbCwgc3RyaWtlLCBzdHJvbmcsIHN1Yiwgc3VwLCB0dCwgdmFyLFxuICBiLCB1LCBpLCBjZW50ZXIsXG4gIGRsLCBkdCwgZGQsIG9sLCB1bCwgbGksXG4gIGZpZWxkc2V0LCBmb3JtLCBsYWJlbCwgbGVnZW5kLFxuICB0YWJsZSwgY2FwdGlvbiwgdGJvZHksIHRmb290LCB0aGVhZCwgdHIsIHRoLCB0ZCxcbiAgYXJ0aWNsZSwgYXNpZGUsIGNhbnZhcywgZGV0YWlscywgZW1iZWQsIFxuICBmaWd1cmUsIGZpZ2NhcHRpb24sIGZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsIFxuICBtZW51LCBuYXYsIG91dHB1dCwgcnVieSwgc2VjdGlvbiwgc3VtbWFyeSxcbiAgdGltZSwgbWFyaywgYXVkaW8sIHZpZGVvIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXI6IDA7XG4gICAgZm9udC1zaXplOiAxMDAlO1xuICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICB9XG4gIC8qIEhUTUw1IGRpc3BsYXktcm9sZSByZXNldCBmb3Igb2xkZXIgYnJvd3NlcnMgKi9cbiAgYXJ0aWNsZSwgYXNpZGUsIGRldGFpbHMsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgXG4gIGZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsIG1lbnUsIG5hdiwgc2VjdGlvbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbiAgYm9keSB7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gIH1cbiAgb2wsIHVsIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICB9XG4gIGJsb2NrcXVvdGUsIHEge1xuICAgIHF1b3Rlczogbm9uZTtcbiAgfVxuICBibG9ja3F1b3RlOmJlZm9yZSwgYmxvY2txdW90ZTphZnRlcixcbiAgcTpiZWZvcmUsIHE6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGNvbnRlbnQ6IG5vbmU7XG4gIH1cbiAgdGFibGUge1xuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgYm9yZGVyLXNwYWNpbmc6IDA7XG4gIH1cbmA7IiwiLyoqXG4gKiBAbW9kdWxlIEBhZG1pbmpzL2Rlc2lnbi1zeXN0ZW1cbiAqIEBzZWN0aW9uIGRlc2lnbi1zeXN0ZW1cbiAqXG4gKiBAbG9hZCAuaW5kZXguZG9jLm1kXG4gKi9cblxuaW1wb3J0ICogYXMgdGhlbWUgZnJvbSBcIi4vdGhlbWUuanNcIjtcbmV4cG9ydCB7IHRoZW1lIH07XG5leHBvcnQgKiBmcm9tIFwiLi9hdG9tcy9pbmRleC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbW9sZWN1bGVzL2luZGV4LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vcmdhbmlzbXMvaW5kZXguanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZ2xvYmFsLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90aGVtZS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHMvaW5kZXguanNcIjsiLCJpbXBvcnQgUmVhY3REYXRlcGlja2VyIGZyb20gJ3JlYWN0LWRhdGVwaWNrZXInXG5pbXBvcnQgKiBhcyBGZWF0aGVySWNvbnMgZnJvbSAncmVhY3QtZmVhdGhlcidcblxuaW1wb3J0ICogYXMgQWRtaW5KU0Rlc2lnblN5c3RlbSBmcm9tICcuL2J1aWxkL2luZGV4LmpzJ1xuaW1wb3J0ICogYXMgc3R5bGVkIGZyb20gJy4vYnVpbGQvdXRpbHMvc3R5bGVkLmpzJ1xuXG53aW5kb3cuc3R5bGVkID0gd2luZG93LnN0eWxlZCB8fCBzdHlsZWRcbndpbmRvdy5SZWFjdERhdGVwaWNrZXIgPSB3aW5kb3cuUmVhY3REYXRlcGlja2VyIHx8IFJlYWN0RGF0ZXBpY2tlci5kZWZhdWx0IHx8IFJlYWN0RGF0ZXBpY2tlclxud2luZG93LkZlYXRoZXJJY29ucyA9IHdpbmRvdy5GZWF0aGVySWNvbnMgfHwgRmVhdGhlckljb25zXG5cbmV4cG9ydCBkZWZhdWx0IEFkbWluSlNEZXNpZ25TeXN0ZW1cbiJdLCJuYW1lcyI6WyJoYXNTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJSRUFDVF9FTEVNRU5UX1RZUEUiLCJSRUFDVF9QT1JUQUxfVFlQRSIsIlJFQUNUX0ZSQUdNRU5UX1RZUEUiLCJSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIiwiUkVBQ1RfUFJPRklMRVJfVFlQRSIsIlJFQUNUX1BST1ZJREVSX1RZUEUiLCJSRUFDVF9DT05URVhUX1RZUEUiLCJSRUFDVF9BU1lOQ19NT0RFX1RZUEUiLCJSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSIsIlJFQUNUX0ZPUldBUkRfUkVGX1RZUEUiLCJSRUFDVF9TVVNQRU5TRV9UWVBFIiwiUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIiwiUkVBQ1RfTUVNT19UWVBFIiwiUkVBQ1RfTEFaWV9UWVBFIiwiUkVBQ1RfQkxPQ0tfVFlQRSIsIlJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUiLCJSRUFDVF9SRVNQT05ERVJfVFlQRSIsIlJFQUNUX1NDT1BFX1RZUEUiLCJpc1ZhbGlkRWxlbWVudFR5cGUiLCJ0eXBlIiwiJCR0eXBlb2YiLCJ0eXBlT2YiLCJvYmplY3QiLCIkJHR5cGVvZlR5cGUiLCJ1bmRlZmluZWQiLCJBc3luY01vZGUiLCJDb25jdXJyZW50TW9kZSIsIkNvbnRleHRDb25zdW1lciIsIkNvbnRleHRQcm92aWRlciIsIkVsZW1lbnQiLCJGb3J3YXJkUmVmIiwiRnJhZ21lbnQiLCJMYXp5IiwiTWVtbyIsIlBvcnRhbCIsIlByb2ZpbGVyIiwiU3RyaWN0TW9kZSIsIlN1c3BlbnNlIiwiaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUiLCJpc0FzeW5jTW9kZSIsImNvbnNvbGUiLCJpc0NvbmN1cnJlbnRNb2RlIiwiaXNDb250ZXh0Q29uc3VtZXIiLCJpc0NvbnRleHRQcm92aWRlciIsImlzRWxlbWVudCIsImlzRm9yd2FyZFJlZiIsImlzRnJhZ21lbnQiLCJpc0xhenkiLCJpc01lbW8iLCJpc1BvcnRhbCIsImlzUHJvZmlsZXIiLCJpc1N0cmljdE1vZGUiLCJpc1N1c3BlbnNlIiwiQXN5bmNNb2RlXzEiLCJyZWFjdElzX2RldmVsb3BtZW50IiwiQ29uY3VycmVudE1vZGVfMSIsIkNvbnRleHRDb25zdW1lcl8xIiwiQ29udGV4dFByb3ZpZGVyXzEiLCJFbGVtZW50XzEiLCJGb3J3YXJkUmVmXzEiLCJGcmFnbWVudF8xIiwiTGF6eV8xIiwiTWVtb18xIiwiUG9ydGFsXzEiLCJQcm9maWxlcl8xIiwiU3RyaWN0TW9kZV8xIiwiU3VzcGVuc2VfMSIsImlzQXN5bmNNb2RlXzEiLCJpc0NvbmN1cnJlbnRNb2RlXzEiLCJpc0NvbnRleHRDb25zdW1lcl8xIiwiaXNDb250ZXh0UHJvdmlkZXJfMSIsImlzRWxlbWVudF8xIiwiaXNGb3J3YXJkUmVmXzEiLCJpc0ZyYWdtZW50XzEiLCJpc0xhenlfMSIsImlzTWVtb18xIiwiaXNQb3J0YWxfMSIsImlzUHJvZmlsZXJfMSIsImlzU3RyaWN0TW9kZV8xIiwiaXNTdXNwZW5zZV8xIiwiaXNWYWxpZEVsZW1lbnRUeXBlXzEiLCJ0eXBlT2ZfMSIsInJlYWN0SXNNb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSQkMCIsImdldE93blByb3BlcnR5U3ltYm9scyIsIk9iamVjdCIsImhhc093blByb3BlcnR5IiwicHJvdG90eXBlIiwicHJvcElzRW51bWVyYWJsZSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidG9PYmplY3QiLCJ2YWwiLCJUeXBlRXJyb3IiLCJzaG91bGRVc2VOYXRpdmUiLCJhc3NpZ24iLCJ0ZXN0MSIsIlN0cmluZyIsImdldE93blByb3BlcnR5TmFtZXMiLCJ0ZXN0MiIsImkiLCJmcm9tQ2hhckNvZGUiLCJvcmRlcjIiLCJtYXAiLCJuIiwiam9pbiIsInRlc3QzIiwic3BsaXQiLCJmb3JFYWNoIiwibGV0dGVyIiwia2V5cyIsImVyciIsIm9iamVjdEFzc2lnbiIsInRhcmdldCIsInNvdXJjZSIsImZyb20iLCJ0byIsInN5bWJvbHMiLCJzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwia2V5IiwiY2FsbCIsIlJlYWN0UHJvcFR5cGVzU2VjcmV0IiwiUmVhY3RQcm9wVHlwZXNTZWNyZXRfMSIsImhhcyIsIkZ1bmN0aW9uIiwiYmluZCIsInByaW50V2FybmluZyIsImxvZ2dlZFR5cGVGYWlsdXJlcyIsInJlcXVpcmUkJDEiLCJ0ZXh0IiwibWVzc2FnZSIsImVycm9yIiwiRXJyb3IiLCJ4IiwiY2hlY2tQcm9wVHlwZXMiLCJ0eXBlU3BlY3MiLCJ2YWx1ZXMiLCJsb2NhdGlvbiIsImNvbXBvbmVudE5hbWUiLCJnZXRTdGFjayIsInR5cGVTcGVjTmFtZSIsIm5hbWUiLCJleCIsInN0YWNrIiwicmVzZXRXYXJuaW5nQ2FjaGUiLCJjaGVja1Byb3BUeXBlc18xIiwiUmVhY3RJcyIsInJlcXVpcmUkJDIiLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsImVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwiLCJmYWN0b3J5V2l0aFR5cGVDaGVja2VycyIsImlzVmFsaWRFbGVtZW50IiwidGhyb3dPbkRpcmVjdEFjY2VzcyIsIklURVJBVE9SX1NZTUJPTCIsIml0ZXJhdG9yIiwiRkFVWF9JVEVSQVRPUl9TWU1CT0wiLCJnZXRJdGVyYXRvckZuIiwibWF5YmVJdGVyYWJsZSIsIml0ZXJhdG9yRm4iLCJBTk9OWU1PVVMiLCJSZWFjdFByb3BUeXBlcyIsImFycmF5IiwiY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIiLCJiaWdpbnQiLCJib29sIiwiZnVuYyIsIm51bWJlciIsInN0cmluZyIsInN5bWJvbCIsImFueSIsImNyZWF0ZUFueVR5cGVDaGVja2VyIiwiYXJyYXlPZiIsImNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlciIsImVsZW1lbnQiLCJjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIiLCJlbGVtZW50VHlwZSIsImNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIiLCJpbnN0YW5jZU9mIiwiY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlciIsIm5vZGUiLCJjcmVhdGVOb2RlQ2hlY2tlciIsIm9iamVjdE9mIiwiY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlciIsIm9uZU9mIiwiY3JlYXRlRW51bVR5cGVDaGVja2VyIiwib25lT2ZUeXBlIiwiY3JlYXRlVW5pb25UeXBlQ2hlY2tlciIsInNoYXBlIiwiY3JlYXRlU2hhcGVUeXBlQ2hlY2tlciIsImV4YWN0IiwiY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlciIsImlzIiwieSIsIlByb3BUeXBlRXJyb3IiLCJkYXRhIiwiY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIiLCJ2YWxpZGF0ZSIsIm1hbnVhbFByb3BUeXBlQ2FsbENhY2hlIiwibWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQiLCJjaGVja1R5cGUiLCJpc1JlcXVpcmVkIiwicHJvcHMiLCJwcm9wTmFtZSIsInByb3BGdWxsTmFtZSIsInNlY3JldCIsImNhY2hlS2V5IiwiY2hhaW5lZENoZWNrVHlwZSIsImV4cGVjdGVkVHlwZSIsInByb3BWYWx1ZSIsInByb3BUeXBlIiwiZ2V0UHJvcFR5cGUiLCJwcmVjaXNlVHlwZSIsImdldFByZWNpc2VUeXBlIiwidHlwZUNoZWNrZXIiLCJBcnJheSIsImlzQXJyYXkiLCJleHBlY3RlZENsYXNzIiwiZXhwZWN0ZWRDbGFzc05hbWUiLCJhY3R1YWxDbGFzc05hbWUiLCJnZXRDbGFzc05hbWUiLCJleHBlY3RlZFZhbHVlcyIsInZhbHVlc1N0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXBsYWNlciIsInZhbHVlIiwiYXJyYXlPZlR5cGVDaGVja2VycyIsImNoZWNrZXIiLCJnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmciLCJleHBlY3RlZFR5cGVzIiwiY2hlY2tlclJlc3VsdCIsInB1c2giLCJleHBlY3RlZFR5cGVzTWVzc2FnZSIsImlzTm9kZSIsImludmFsaWRWYWxpZGF0b3JFcnJvciIsInNoYXBlVHlwZXMiLCJhbGxLZXlzIiwiZXZlcnkiLCJzdGVwIiwiZW50cmllcyIsIm5leHQiLCJkb25lIiwiZW50cnkiLCJpc1N5bWJvbCIsIlJlZ0V4cCIsIkRhdGUiLCJjb25zdHJ1Y3RvciIsIlByb3BUeXBlcyIsInByb3BUeXBlc01vZHVsZSIsImhhc093biIsImNsYXNzTmFtZXMiLCJjbGFzc2VzIiwiYXJnIiwiYXJnVHlwZSIsImlubmVyIiwiYXBwbHkiLCJ0b1N0cmluZyIsImluY2x1ZGVzIiwibW9kdWxlIiwiZGVmYXVsdCIsIndpbmRvdyIsInJlcXVpcmVkQXJncyIsInJlcXVpcmVkIiwiYXJncyIsIl90eXBlb2YiLCJvYmoiLCJpc0RhdGUiLCJ0b0RhdGUiLCJhcmd1bWVudCIsImFyZ1N0ciIsImdldFRpbWUiLCJ3YXJuIiwiTmFOIiwiaXNWYWxpZCIsImRpcnR5RGF0ZSIsImRhdGUiLCJpc05hTiIsIk51bWJlciIsInRvSW50ZWdlciIsImRpcnR5TnVtYmVyIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsImFkZE1pbGxpc2Vjb25kcyIsImRpcnR5QW1vdW50IiwidGltZXN0YW1wIiwiYW1vdW50Iiwic3ViTWlsbGlzZWNvbmRzIiwiTUlMTElTRUNPTkRTX0lOX0RBWSIsImdldFVUQ0RheU9mWWVhciIsInNldFVUQ01vbnRoIiwic2V0VVRDSG91cnMiLCJzdGFydE9mWWVhclRpbWVzdGFtcCIsImRpZmZlcmVuY2UiLCJzdGFydE9mVVRDSVNPV2VlayIsIndlZWtTdGFydHNPbiIsImRheSIsImdldFVUQ0RheSIsImRpZmYiLCJzZXRVVENEYXRlIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0lTT1dlZWtZZWFyIiwieWVhciIsImdldFVUQ0Z1bGxZZWFyIiwiZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciIsInNldFVUQ0Z1bGxZZWFyIiwic3RhcnRPZk5leHRZZWFyIiwiZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciIsInN0YXJ0T2ZUaGlzWWVhciIsInN0YXJ0T2ZVVENJU09XZWVrWWVhciIsImZvdXJ0aE9mSmFudWFyeSIsIk1JTExJU0VDT05EU19JTl9XRUVLIiwiZ2V0VVRDSVNPV2VlayIsInJvdW5kIiwiZGVmYXVsdE9wdGlvbnMiLCJnZXREZWZhdWx0T3B0aW9ucyIsInN0YXJ0T2ZVVENXZWVrIiwib3B0aW9ucyIsIl9yZWYiLCJfcmVmMiIsIl9yZWYzIiwiX29wdGlvbnMkd2Vla1N0YXJ0c09uIiwiX29wdGlvbnMkbG9jYWxlIiwiX29wdGlvbnMkbG9jYWxlJG9wdGlvIiwiX2RlZmF1bHRPcHRpb25zJGxvY2FsIiwiX2RlZmF1bHRPcHRpb25zJGxvY2FsMiIsImxvY2FsZSIsIlJhbmdlRXJyb3IiLCJnZXRVVENXZWVrWWVhciIsIl9vcHRpb25zJGZpcnN0V2Vla0NvbiIsImZpcnN0V2Vla0NvbnRhaW5zRGF0ZSIsImZpcnN0V2Vla09mTmV4dFllYXIiLCJmaXJzdFdlZWtPZlRoaXNZZWFyIiwic3RhcnRPZlVUQ1dlZWtZZWFyIiwiZmlyc3RXZWVrIiwiZ2V0VVRDV2VlayIsImFkZExlYWRpbmdaZXJvcyIsInRhcmdldExlbmd0aCIsInNpZ24iLCJvdXRwdXQiLCJhYnMiLCJmb3JtYXR0ZXJzIiwidG9rZW4iLCJzaWduZWRZZWFyIiwiTSIsIm1vbnRoIiwiZ2V0VVRDTW9udGgiLCJkIiwiYSIsImRheVBlcmlvZEVudW1WYWx1ZSIsImdldFVUQ0hvdXJzIiwidG9VcHBlckNhc2UiLCJoIiwiSCIsIm0iLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsIlMiLCJudW1iZXJPZkRpZ2l0cyIsIm1pbGxpc2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsImZyYWN0aW9uYWxTZWNvbmRzIiwicG93IiwiZGF5UGVyaW9kRW51bSIsImFtIiwicG0iLCJtaWRuaWdodCIsIm5vb24iLCJtb3JuaW5nIiwiYWZ0ZXJub29uIiwiZXZlbmluZyIsIm5pZ2h0IiwiRyIsImxvY2FsaXplIiwiZXJhIiwid2lkdGgiLCJvcmRpbmFsTnVtYmVyIiwidW5pdCIsImxpZ2h0Rm9ybWF0dGVycyIsIlkiLCJzaWduZWRXZWVrWWVhciIsIndlZWtZZWFyIiwidHdvRGlnaXRZZWFyIiwiUiIsImlzb1dlZWtZZWFyIiwidSIsIlEiLCJxdWFydGVyIiwiY29udGV4dCIsInEiLCJMIiwidyIsIndlZWsiLCJJIiwiaXNvV2VlayIsIkQiLCJkYXlPZlllYXIiLCJFIiwiZGF5T2ZXZWVrIiwiZSIsImxvY2FsRGF5T2ZXZWVrIiwiYyIsImlzb0RheU9mV2VlayIsImhvdXJzIiwiZGF5UGVyaW9kIiwidG9Mb3dlckNhc2UiLCJiIiwiQiIsIksiLCJrIiwiWCIsIl9sb2NhbGl6ZSIsIm9yaWdpbmFsRGF0ZSIsIl9vcmlnaW5hbERhdGUiLCJ0aW1lem9uZU9mZnNldCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzIiwiZm9ybWF0VGltZXpvbmUiLCJPIiwiZm9ybWF0VGltZXpvbmVTaG9ydCIsInoiLCJ0IiwiVCIsIm9mZnNldCIsImRpcnR5RGVsaW1pdGVyIiwiYWJzT2Zmc2V0IiwibWludXRlcyIsImRlbGltaXRlciIsImRhdGVMb25nRm9ybWF0dGVyIiwicGF0dGVybiIsImZvcm1hdExvbmciLCJ0aW1lTG9uZ0Zvcm1hdHRlciIsInRpbWUiLCJkYXRlVGltZUxvbmdGb3JtYXR0ZXIiLCJtYXRjaFJlc3VsdCIsIm1hdGNoIiwiZGF0ZVBhdHRlcm4iLCJ0aW1lUGF0dGVybiIsImRhdGVUaW1lRm9ybWF0IiwiZGF0ZVRpbWUiLCJyZXBsYWNlIiwibG9uZ0Zvcm1hdHRlcnMiLCJwIiwiUCIsImdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMiLCJ1dGNEYXRlIiwiVVRDIiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwicHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW5zIiwicHJvdGVjdGVkV2Vla1llYXJUb2tlbnMiLCJpc1Byb3RlY3RlZERheU9mWWVhclRva2VuIiwiaW5kZXhPZiIsImlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiIsInRocm93UHJvdGVjdGVkRXJyb3IiLCJmb3JtYXQiLCJpbnB1dCIsImNvbmNhdCIsImZvcm1hdERpc3RhbmNlTG9jYWxlIiwibGVzc1RoYW5YU2Vjb25kcyIsIm9uZSIsIm90aGVyIiwieFNlY29uZHMiLCJoYWxmQU1pbnV0ZSIsImxlc3NUaGFuWE1pbnV0ZXMiLCJ4TWludXRlcyIsImFib3V0WEhvdXJzIiwieEhvdXJzIiwieERheXMiLCJhYm91dFhXZWVrcyIsInhXZWVrcyIsImFib3V0WE1vbnRocyIsInhNb250aHMiLCJhYm91dFhZZWFycyIsInhZZWFycyIsIm92ZXJYWWVhcnMiLCJhbG1vc3RYWWVhcnMiLCJmb3JtYXREaXN0YW5jZSIsImNvdW50IiwicmVzdWx0IiwidG9rZW5WYWx1ZSIsImFkZFN1ZmZpeCIsImNvbXBhcmlzb24iLCJidWlsZEZvcm1hdExvbmdGbiIsImRlZmF1bHRXaWR0aCIsImZvcm1hdHMiLCJkYXRlRm9ybWF0cyIsImZ1bGwiLCJsb25nIiwibWVkaXVtIiwic2hvcnQiLCJ0aW1lRm9ybWF0cyIsImRhdGVUaW1lRm9ybWF0cyIsImZvcm1hdFJlbGF0aXZlTG9jYWxlIiwibGFzdFdlZWsiLCJ5ZXN0ZXJkYXkiLCJ0b2RheSIsInRvbW9ycm93IiwibmV4dFdlZWsiLCJmb3JtYXRSZWxhdGl2ZSIsIl9kYXRlIiwiX2Jhc2VEYXRlIiwiX29wdGlvbnMiLCJidWlsZExvY2FsaXplRm4iLCJkaXJ0eUluZGV4IiwidmFsdWVzQXJyYXkiLCJmb3JtYXR0aW5nVmFsdWVzIiwiZGVmYXVsdEZvcm1hdHRpbmdXaWR0aCIsIl9kZWZhdWx0V2lkdGgiLCJfd2lkdGgiLCJpbmRleCIsImFyZ3VtZW50Q2FsbGJhY2siLCJlcmFWYWx1ZXMiLCJuYXJyb3ciLCJhYmJyZXZpYXRlZCIsIndpZGUiLCJxdWFydGVyVmFsdWVzIiwibW9udGhWYWx1ZXMiLCJkYXlWYWx1ZXMiLCJkYXlQZXJpb2RWYWx1ZXMiLCJmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzIiwicmVtMTAwIiwiYnVpbGRNYXRjaEZuIiwibWF0Y2hQYXR0ZXJuIiwibWF0Y2hQYXR0ZXJucyIsImRlZmF1bHRNYXRjaFdpZHRoIiwibWF0Y2hlZFN0cmluZyIsInBhcnNlUGF0dGVybnMiLCJkZWZhdWx0UGFyc2VXaWR0aCIsImZpbmRJbmRleCIsInRlc3QiLCJmaW5kS2V5IiwidmFsdWVDYWxsYmFjayIsInJlc3QiLCJzbGljZSIsInByZWRpY2F0ZSIsImJ1aWxkTWF0Y2hQYXR0ZXJuRm4iLCJwYXJzZVJlc3VsdCIsInBhcnNlUGF0dGVybiIsIm1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4iLCJwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuIiwibWF0Y2hFcmFQYXR0ZXJucyIsInBhcnNlRXJhUGF0dGVybnMiLCJtYXRjaFF1YXJ0ZXJQYXR0ZXJucyIsInBhcnNlUXVhcnRlclBhdHRlcm5zIiwibWF0Y2hNb250aFBhdHRlcm5zIiwicGFyc2VNb250aFBhdHRlcm5zIiwibWF0Y2hEYXlQYXR0ZXJucyIsInBhcnNlRGF5UGF0dGVybnMiLCJtYXRjaERheVBlcmlvZFBhdHRlcm5zIiwicGFyc2VEYXlQZXJpb2RQYXR0ZXJucyIsInBhcnNlSW50IiwiY29kZSIsImZvcm1hdHRpbmdUb2tlbnNSZWdFeHAiLCJsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCIsImVzY2FwZWRTdHJpbmdSZWdFeHAiLCJkb3VibGVRdW90ZVJlZ0V4cCIsInVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwIiwiZGlydHlGb3JtYXRTdHIiLCJfcmVmNCIsIl9vcHRpb25zJGxvY2FsZTIiLCJfb3B0aW9ucyRsb2NhbGUyJG9wdGkiLCJfcmVmNSIsIl9yZWY2IiwiX3JlZjciLCJfb3B0aW9ucyRsb2NhbGUzIiwiX29wdGlvbnMkbG9jYWxlMyRvcHRpIiwiX2RlZmF1bHRPcHRpb25zJGxvY2FsMyIsIl9kZWZhdWx0T3B0aW9ucyRsb2NhbDQiLCJmb3JtYXRTdHIiLCJkZWZhdWx0TG9jYWxlIiwiZm9ybWF0dGVyT3B0aW9ucyIsInN1YnN0cmluZyIsImZpcnN0Q2hhcmFjdGVyIiwibG9uZ0Zvcm1hdHRlciIsImNsZWFuRXNjYXBlZFN0cmluZyIsImZvcm1hdHRlciIsInVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2VucyIsInVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnMiLCJtYXRjaGVkIiwiTUlMTElTRUNPTkRTX0lOX01JTlVURSIsImFkZE1pbnV0ZXMiLCJNSUxMSVNFQ09ORFNfSU5fSE9VUiIsImFkZEhvdXJzIiwiYWRkRGF5cyIsInNldERhdGUiLCJhZGRXZWVrcyIsImRheXMiLCJhZGRNb250aHMiLCJkYXlPZk1vbnRoIiwiZW5kT2ZEZXNpcmVkTW9udGgiLCJzZXRNb250aCIsImRheXNJbk1vbnRoIiwic2V0RnVsbFllYXIiLCJhZGRRdWFydGVycyIsIm1vbnRocyIsImFkZFllYXJzIiwic3ViRGF5cyIsInN1YldlZWtzIiwic3ViTW9udGhzIiwic3ViUXVhcnRlcnMiLCJzdWJZZWFycyIsInNlY29uZHMiLCJnZXREYXkiLCJzdGFydE9mV2VlayIsInNldEhvdXJzIiwic3RhcnRPZklTT1dlZWsiLCJnZXRJU09XZWVrWWVhciIsInN0YXJ0T2ZJU09XZWVrWWVhciIsImdldElTT1dlZWsiLCJnZXRRdWFydGVyIiwiZ2V0WWVhciIsInNldFNlY29uZHMiLCJkaXJ0eVNlY29uZHMiLCJzZXRNaW51dGVzIiwiZGlydHlNaW51dGVzIiwiZGlydHlIb3VycyIsImdldERheXNJbk1vbnRoIiwibW9udGhJbmRleCIsImxhc3REYXlPZk1vbnRoIiwiZGlydHlNb250aCIsImRhdGVXaXRoRGVzaXJlZE1vbnRoIiwibWluIiwic2V0UXVhcnRlciIsImRpcnR5UXVhcnRlciIsIm9sZFF1YXJ0ZXIiLCJzZXRZZWFyIiwiZGlydHlZZWFyIiwiZGlydHlEYXRlc0FycmF5IiwiZGF0ZXNBcnJheSIsImN1cnJlbnREYXRlIiwibWF4Iiwic3RhcnRPZkRheSIsImRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyIsImRpcnR5RGF0ZUxlZnQiLCJkaXJ0eURhdGVSaWdodCIsInN0YXJ0T2ZEYXlMZWZ0Iiwic3RhcnRPZkRheVJpZ2h0IiwidGltZXN0YW1wTGVmdCIsInRpbWVzdGFtcFJpZ2h0IiwiZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMiLCJkYXRlTGVmdCIsImRhdGVSaWdodCIsInllYXJEaWZmIiwibW9udGhEaWZmIiwiZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyIsInN0YXJ0T2ZNb250aCIsInN0YXJ0T2ZRdWFydGVyIiwiY3VycmVudE1vbnRoIiwic3RhcnRPZlllYXIiLCJjbGVhbkRhdGUiLCJlbmRPZkRheSIsImVuZE9mTW9udGgiLCJlbmRPZlllYXIiLCJpc0VxdWFsIiwiZGlydHlMZWZ0RGF0ZSIsImRpcnR5UmlnaHREYXRlIiwiaXNTYW1lRGF5IiwiZGF0ZUxlZnRTdGFydE9mRGF5IiwiZGF0ZVJpZ2h0U3RhcnRPZkRheSIsImlzU2FtZU1vbnRoIiwiaXNTYW1lWWVhciIsImlzU2FtZVF1YXJ0ZXIiLCJkYXRlTGVmdFN0YXJ0T2ZRdWFydGVyIiwiZGF0ZVJpZ2h0U3RhcnRPZlF1YXJ0ZXIiLCJpc0FmdGVyIiwiZGlydHlEYXRlVG9Db21wYXJlIiwiZGF0ZVRvQ29tcGFyZSIsImlzQmVmb3JlIiwiaXNXaXRoaW5JbnRlcnZhbCIsImludGVydmFsIiwic3RhcnRUaW1lIiwic3RhcnQiLCJlbmRUaW1lIiwiZW5kIiwicHJvcGVydHkiLCJfaW5oZXJpdHMiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJjcmVhdGUiLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsIl9zZXRQcm90b3R5cGVPZiIsIm8iLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9jcmVhdGVTdXBlciIsIkRlcml2ZWQiLCJoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIl9jcmVhdGVTdXBlckludGVybmFsIiwiU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YiLCJOZXdUYXJnZXQiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJzZWxmIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwic2hhbSIsIlByb3h5IiwiQm9vbGVhbiIsInZhbHVlT2YiLCJnZXRQcm90b3R5cGVPZiIsIl9jbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiQ29uc3RydWN0b3IiLCJfZGVmaW5lUHJvcGVydGllcyIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiZGVmaW5lUHJvcGVydHkiLCJfY3JlYXRlQ2xhc3MiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJfZGVmaW5lUHJvcGVydHkiLCJUSU1FWk9ORV9VTklUX1BSSU9SSVRZIiwiU2V0dGVyIiwiX3V0Y0RhdGUiLCJWYWx1ZVNldHRlciIsIl9TZXR0ZXIiLCJfc3VwZXIiLCJ2YWxpZGF0ZVZhbHVlIiwic2V0VmFsdWUiLCJwcmlvcml0eSIsInN1YlByaW9yaXR5IiwiX3RoaXMiLCJzZXQiLCJmbGFncyIsIkRhdGVUb1N5c3RlbVRpbWV6b25lU2V0dGVyIiwiX1NldHRlcjIiLCJfc3VwZXIyIiwiX3RoaXMyIiwiX2xlbiIsIl9rZXkiLCJ0aW1lc3RhbXBJc1NldCIsImNvbnZlcnRlZERhdGUiLCJQYXJzZXIiLCJydW4iLCJkYXRlU3RyaW5nIiwicGFyc2UiLCJzZXR0ZXIiLCJfdmFsdWUiLCJFcmFQYXJzZXIiLCJfUGFyc2VyIiwibWlsbGlzZWNvbmRzSW5NaW51dGUiLCJtaWxsaXNlY29uZHNJbkhvdXIiLCJtaWxsaXNlY29uZHNJblNlY29uZCIsIm51bWVyaWNQYXR0ZXJucyIsImhvdXIyM2giLCJob3VyMjRoIiwiaG91cjExaCIsImhvdXIxMmgiLCJtaW51dGUiLCJzZWNvbmQiLCJzaW5nbGVEaWdpdCIsInR3b0RpZ2l0cyIsInRocmVlRGlnaXRzIiwiZm91ckRpZ2l0cyIsImFueURpZ2l0c1NpZ25lZCIsInNpbmdsZURpZ2l0U2lnbmVkIiwidHdvRGlnaXRzU2lnbmVkIiwidGhyZWVEaWdpdHNTaWduZWQiLCJmb3VyRGlnaXRzU2lnbmVkIiwidGltZXpvbmVQYXR0ZXJucyIsImJhc2ljT3B0aW9uYWxNaW51dGVzIiwiYmFzaWMiLCJiYXNpY09wdGlvbmFsU2Vjb25kcyIsImV4dGVuZGVkIiwiZXh0ZW5kZWRPcHRpb25hbFNlY29uZHMiLCJtYXBWYWx1ZSIsInBhcnNlRm5SZXN1bHQiLCJtYXBGbiIsInBhcnNlTnVtZXJpY1BhdHRlcm4iLCJwYXJzZVRpbWV6b25lUGF0dGVybiIsInBhcnNlQW55RGlnaXRzU2lnbmVkIiwicGFyc2VORGlnaXRzIiwicGFyc2VORGlnaXRzU2lnbmVkIiwiZGF5UGVyaW9kRW51bVRvSG91cnMiLCJub3JtYWxpemVUd29EaWdpdFllYXIiLCJjdXJyZW50WWVhciIsImlzQ29tbW9uRXJhIiwiYWJzQ3VycmVudFllYXIiLCJyYW5nZUVuZCIsInJhbmdlRW5kQ2VudHVyeSIsImlzUHJldmlvdXNDZW50dXJ5IiwiaXNMZWFwWWVhckluZGV4IiwiWWVhclBhcnNlciIsImlzVHdvRGlnaXRZZWFyIiwibm9ybWFsaXplZFR3b0RpZ2l0WWVhciIsIkxvY2FsV2Vla1llYXJQYXJzZXIiLCJJU09XZWVrWWVhclBhcnNlciIsIl9mbGFncyIsImZpcnN0V2Vla09mWWVhciIsIkV4dGVuZGVkWWVhclBhcnNlciIsIlF1YXJ0ZXJQYXJzZXIiLCJTdGFuZEFsb25lUXVhcnRlclBhcnNlciIsIk1vbnRoUGFyc2VyIiwiU3RhbmRBbG9uZU1vbnRoUGFyc2VyIiwic2V0VVRDV2VlayIsImRpcnR5V2VlayIsIkxvY2FsV2Vla1BhcnNlciIsInNldFVUQ0lTT1dlZWsiLCJkaXJ0eUlTT1dlZWsiLCJJU09XZWVrUGFyc2VyIiwiREFZU19JTl9NT05USCIsIkRBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSIiwiRGF0ZVBhcnNlciIsImlzTGVhcFllYXIiLCJEYXlPZlllYXJQYXJzZXIiLCJzZXRVVENEYXkiLCJkaXJ0eURheSIsImN1cnJlbnREYXkiLCJyZW1haW5kZXIiLCJkYXlJbmRleCIsIkRheVBhcnNlciIsIkxvY2FsRGF5UGFyc2VyIiwid2hvbGVXZWVrRGF5cyIsIlN0YW5kQWxvbmVMb2NhbERheVBhcnNlciIsInNldFVUQ0lTT0RheSIsIklTT0RheVBhcnNlciIsIkFNUE1QYXJzZXIiLCJBTVBNTWlkbmlnaHRQYXJzZXIiLCJEYXlQZXJpb2RQYXJzZXIiLCJIb3VyMXRvMTJQYXJzZXIiLCJpc1BNIiwiSG91cjB0bzIzUGFyc2VyIiwiSG91cjBUbzExUGFyc2VyIiwiSG91cjFUbzI0UGFyc2VyIiwiTWludXRlUGFyc2VyIiwic2V0VVRDTWludXRlcyIsIlNlY29uZFBhcnNlciIsInNldFVUQ1NlY29uZHMiLCJGcmFjdGlvbk9mU2Vjb25kUGFyc2VyIiwic2V0VVRDTWlsbGlzZWNvbmRzIiwiSVNPVGltZXpvbmVXaXRoWlBhcnNlciIsIklTT1RpbWV6b25lUGFyc2VyIiwiVGltZXN0YW1wU2Vjb25kc1BhcnNlciIsIlRpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlciIsInBhcnNlcnMiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsImFsbG93QXJyYXlMaWtlIiwiaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJGIiwiX2UiLCJmIiwibm9ybWFsQ29tcGxldGlvbiIsImRpZEVyciIsIl9lMiIsInJldHVybiIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwiYXJyIiwibGVuIiwiYXJyMiIsIm5vdFdoaXRlc3BhY2VSZWdFeHAiLCJkaXJ0eURhdGVTdHJpbmciLCJkaXJ0eUZvcm1hdFN0cmluZyIsImRpcnR5UmVmZXJlbmNlRGF0ZSIsImZvcm1hdFN0cmluZyIsInN1YkZuT3B0aW9ucyIsInNldHRlcnMiLCJ0b2tlbnMiLCJ1c2VkVG9rZW5zIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJfbG9vcCIsInBhcnNlciIsImluY29tcGF0aWJsZVRva2VucyIsImluY29tcGF0aWJsZVRva2VuIiwiZmluZCIsInVzZWRUb2tlbiIsImZ1bGxUb2tlbiIsInYiLCJfcmV0IiwidW5pcXVlUHJpb3JpdHlTZXR0ZXJzIiwic29ydCIsImZpbHRlciIsInNldHRlckFycmF5IiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInBhcnNlSVNPIiwiX29wdGlvbnMkYWRkaXRpb25hbERpIiwiYWRkaXRpb25hbERpZ2l0cyIsImRhdGVTdHJpbmdzIiwic3BsaXREYXRlU3RyaW5nIiwicGFyc2VZZWFyUmVzdWx0IiwicGFyc2VZZWFyIiwicGFyc2VEYXRlIiwicmVzdERhdGVTdHJpbmciLCJwYXJzZVRpbWUiLCJ0aW1lem9uZSIsInBhcnNlVGltZXpvbmUiLCJwYXR0ZXJucyIsImRhdGVUaW1lRGVsaW1pdGVyIiwidGltZVpvbmVEZWxpbWl0ZXIiLCJkYXRlUmVnZXgiLCJ0aW1lUmVnZXgiLCJ0aW1lem9uZVJlZ2V4IiwidGltZVN0cmluZyIsInN1YnN0ciIsImV4ZWMiLCJyZWdleCIsImNhcHR1cmVzIiwiY2VudHVyeSIsImlzV2Vla0RhdGUiLCJwYXJzZURhdGVVbml0IiwidmFsaWRhdGVXZWVrRGF0ZSIsImRheU9mSVNPV2Vla1llYXIiLCJ2YWxpZGF0ZURhdGUiLCJ2YWxpZGF0ZURheU9mWWVhckRhdGUiLCJwYXJzZVRpbWVVbml0IiwidmFsaWRhdGVUaW1lIiwicGFyc2VGbG9hdCIsInRpbWV6b25lU3RyaW5nIiwidmFsaWRhdGVUaW1lem9uZSIsImZvdXJ0aE9mSmFudWFyeURheSIsImRheXNJbk1vbnRocyIsIl95ZWFyIiwiX2hvdXJzIiwiX2luaGVyaXRzTG9vc2UiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsImV4Y2x1ZGVkIiwic291cmNlS2V5cyIsImlzTm9kZUZvdW5kIiwiY3VycmVudCIsImNvbXBvbmVudE5vZGUiLCJpZ25vcmVDbGFzcyIsImNvcnJlc3BvbmRpbmdFbGVtZW50IiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJmaW5kSGlnaGVzdCIsInBhcmVudE5vZGUiLCJob3N0IiwiY2xpY2tlZFNjcm9sbGJhciIsImV2dCIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiwiY2xpZW50V2lkdGgiLCJjbGllbnRYIiwiY2xpZW50SGVpZ2h0IiwiY2xpZW50WSIsInRlc3RQYXNzaXZlRXZlbnRTdXBwb3J0IiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhc3NpdmUiLCJnZXQiLCJub29wIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImF1dG9JbmMiLCJzZWVkIiwidWlkIiwicGFzc2l2ZUV2ZW50U3VwcG9ydCIsImhhbmRsZXJzTWFwIiwiZW5hYmxlZEluc3RhbmNlcyIsInRvdWNoRXZlbnRzIiwiSUdOT1JFX0NMQVNTX05BTUUiLCJnZXRFdmVudEhhbmRsZXJPcHRpb25zIiwiZXZlbnROYW1lIiwiaGFuZGxlck9wdGlvbnMiLCJpc1RvdWNoRXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsIm9uQ2xpY2tPdXRzaWRlSE9DIiwiV3JhcHBlZENvbXBvbmVudCIsImNvbmZpZyIsIl9jbGFzcyIsIl90ZW1wIiwiZGlzcGxheU5hbWUiLCJfQ29tcG9uZW50Iiwib25DbGlja091dHNpZGUiLCJfX291dHNpZGVDbGlja0hhbmRsZXIiLCJldmVudCIsIl9fY2xpY2tPdXRzaWRlSGFuZGxlclByb3AiLCJnZXRJbnN0YW5jZSIsImhhbmRsZUNsaWNrT3V0c2lkZSIsIl9fZ2V0Q29tcG9uZW50Tm9kZSIsInNldENsaWNrT3V0c2lkZVJlZiIsImZpbmRET01Ob2RlIiwiZW5hYmxlT25DbGlja091dHNpZGUiLCJfdWlkIiwiZXZlbnRzIiwiZXZlbnRUeXBlcyIsInN0b3BQcm9wYWdhdGlvbiIsImV4Y2x1ZGVTY3JvbGxiYXIiLCJjb21wb3NlZCIsImNvbXBvc2VkUGF0aCIsInNoaWZ0Iiwib3V0c2lkZUNsaWNrSWdub3JlQ2xhc3MiLCJkaXNhYmxlT25DbGlja091dHNpZGUiLCJmbiIsImdldFJlZiIsInJlZiIsImluc3RhbmNlUmVmIiwiX3Byb3RvIiwiaXNSZWFjdENvbXBvbmVudCIsImNvbXBvbmVudERpZE1vdW50IiwiY3JlYXRlRWxlbWVudCIsImNvbXBvbmVudERpZFVwZGF0ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIiwiX3RoaXMkcHJvcHMiLCJ3cmFwcGVkUmVmIiwiQ29tcG9uZW50IiwiZGVmYXVsdFByb3BzIiwiZ2V0Q2xhc3MiLCJNYW5hZ2VyUmVmZXJlbmNlTm9kZUNvbnRleHQiLCJSZWFjdCIsImNyZWF0ZUNvbnRleHQiLCJNYW5hZ2VyUmVmZXJlbmNlTm9kZVNldHRlckNvbnRleHQiLCJNYW5hZ2VyIiwiY2hpbGRyZW4iLCJfUmVhY3QkdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsInJlZmVyZW5jZU5vZGUiLCJzZXRSZWZlcmVuY2VOb2RlIiwiaGFzVW5tb3VudGVkIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiaGFuZGxlU2V0UmVmZXJlbmNlTm9kZSIsInVzZUNhbGxiYWNrIiwiUHJvdmlkZXIiLCJ1bndyYXBBcnJheSIsInNhZmVJbnZva2UiLCJzZXRSZWYiLCJmcm9tRW50cmllcyIsInJlZHVjZSIsImFjYyIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ0b3AiLCJib3R0b20iLCJyaWdodCIsImxlZnQiLCJhdXRvIiwiYmFzZVBsYWNlbWVudHMiLCJjbGlwcGluZ1BhcmVudHMiLCJ2aWV3cG9ydCIsInBvcHBlciIsInJlZmVyZW5jZSIsInZhcmlhdGlvblBsYWNlbWVudHMiLCJwbGFjZW1lbnQiLCJwbGFjZW1lbnRzIiwiYmVmb3JlUmVhZCIsInJlYWQiLCJhZnRlclJlYWQiLCJiZWZvcmVNYWluIiwibWFpbiIsImFmdGVyTWFpbiIsImJlZm9yZVdyaXRlIiwid3JpdGUiLCJhZnRlcldyaXRlIiwibW9kaWZpZXJQaGFzZXMiLCJnZXROb2RlTmFtZSIsIm5vZGVOYW1lIiwiZ2V0V2luZG93Iiwib3duZXJEb2N1bWVudCIsImRlZmF1bHRWaWV3IiwiT3duRWxlbWVudCIsImlzSFRNTEVsZW1lbnQiLCJIVE1MRWxlbWVudCIsImlzU2hhZG93Um9vdCIsIlNoYWRvd1Jvb3QiLCJhcHBseVN0eWxlcyIsInN0YXRlIiwiZWxlbWVudHMiLCJzdHlsZSIsInN0eWxlcyIsImF0dHJpYnV0ZXMiLCJyZW1vdmVBdHRyaWJ1dGUiLCJzZXRBdHRyaWJ1dGUiLCJlZmZlY3QiLCJpbml0aWFsU3R5bGVzIiwicG9zaXRpb24iLCJzdHJhdGVneSIsIm1hcmdpbiIsImFycm93Iiwic3R5bGVQcm9wZXJ0aWVzIiwiYXR0cmlidXRlIiwiZW5hYmxlZCIsInBoYXNlIiwicmVxdWlyZXMiLCJnZXRCYXNlUGxhY2VtZW50IiwiZ2V0VUFTdHJpbmciLCJ1YURhdGEiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnREYXRhIiwiYnJhbmRzIiwiaXRlbSIsImJyYW5kIiwidmVyc2lvbiIsInVzZXJBZ2VudCIsImlzTGF5b3V0Vmlld3BvcnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJpbmNsdWRlU2NhbGUiLCJpc0ZpeGVkU3RyYXRlZ3kiLCJjbGllbnRSZWN0Iiwic2NhbGVYIiwic2NhbGVZIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJoZWlnaHQiLCJ2aXN1YWxWaWV3cG9ydCIsImFkZFZpc3VhbE9mZnNldHMiLCJvZmZzZXRMZWZ0Iiwib2Zmc2V0VG9wIiwiZ2V0TGF5b3V0UmVjdCIsInBhcmVudCIsImNoaWxkIiwicm9vdE5vZGUiLCJnZXRSb290Tm9kZSIsImlzU2FtZU5vZGUiLCJnZXRDb21wdXRlZFN0eWxlIiwiaXNUYWJsZUVsZW1lbnQiLCJnZXREb2N1bWVudEVsZW1lbnQiLCJnZXRQYXJlbnROb2RlIiwiYXNzaWduZWRTbG90IiwiZ2V0VHJ1ZU9mZnNldFBhcmVudCIsIm9mZnNldFBhcmVudCIsImdldENvbnRhaW5pbmdCbG9jayIsImlzRmlyZWZveCIsImlzSUUiLCJlbGVtZW50Q3NzIiwiY3VycmVudE5vZGUiLCJjc3MiLCJ0cmFuc2Zvcm0iLCJwZXJzcGVjdGl2ZSIsImNvbnRhaW4iLCJ3aWxsQ2hhbmdlIiwiZ2V0T2Zmc2V0UGFyZW50IiwiZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50Iiwid2l0aGluIiwibWF0aE1heCIsIm1hdGhNaW4iLCJ3aXRoaW5NYXhDbGFtcCIsImdldEZyZXNoU2lkZU9iamVjdCIsIm1lcmdlUGFkZGluZ09iamVjdCIsInBhZGRpbmdPYmplY3QiLCJleHBhbmRUb0hhc2hNYXAiLCJoYXNoTWFwIiwidG9QYWRkaW5nT2JqZWN0IiwicGFkZGluZyIsInJlY3RzIiwiX3N0YXRlJG1vZGlmaWVyc0RhdGEkIiwiYXJyb3dFbGVtZW50IiwicG9wcGVyT2Zmc2V0cyIsIm1vZGlmaWVyc0RhdGEiLCJiYXNlUGxhY2VtZW50IiwiYXhpcyIsImlzVmVydGljYWwiLCJhcnJvd1JlY3QiLCJtaW5Qcm9wIiwibWF4UHJvcCIsImVuZERpZmYiLCJzdGFydERpZmYiLCJhcnJvd09mZnNldFBhcmVudCIsImNsaWVudFNpemUiLCJjZW50ZXJUb1JlZmVyZW5jZSIsImNlbnRlciIsImF4aXNQcm9wIiwiY2VudGVyT2Zmc2V0IiwiX29wdGlvbnMkZWxlbWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJyZXF1aXJlc0lmRXhpc3RzIiwiZ2V0VmFyaWF0aW9uIiwidW5zZXRTaWRlcyIsInJvdW5kT2Zmc2V0c0J5RFBSIiwid2luIiwiZHByIiwiZGV2aWNlUGl4ZWxSYXRpbyIsIm1hcFRvU3R5bGVzIiwiX09iamVjdCRhc3NpZ24yIiwicG9wcGVyUmVjdCIsInZhcmlhdGlvbiIsIm9mZnNldHMiLCJncHVBY2NlbGVyYXRpb24iLCJhZGFwdGl2ZSIsInJvdW5kT2Zmc2V0cyIsImlzRml4ZWQiLCJfb2Zmc2V0cyR4IiwiX29mZnNldHMkeSIsImhhc1giLCJoYXNZIiwic2lkZVgiLCJzaWRlWSIsImhlaWdodFByb3AiLCJ3aWR0aFByb3AiLCJvZmZzZXRZIiwib2Zmc2V0WCIsImNvbW1vblN0eWxlcyIsIl9PYmplY3QkYXNzaWduIiwiY29tcHV0ZVN0eWxlcyIsIl9vcHRpb25zJGdwdUFjY2VsZXJhdCIsIl9vcHRpb25zJGFkYXB0aXZlIiwiX29wdGlvbnMkcm91bmRPZmZzZXRzIiwidHJhbnNpdGlvblByb3BlcnR5Iiwic29tZSIsIl9vcHRpb25zJHNjcm9sbCIsInNjcm9sbCIsIl9vcHRpb25zJHJlc2l6ZSIsInJlc2l6ZSIsInNjcm9sbFBhcmVudHMiLCJzY3JvbGxQYXJlbnQiLCJ1cGRhdGUiLCJoYXNoIiwiZ2V0T3Bwb3NpdGVQbGFjZW1lbnQiLCJnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudCIsImdldFdpbmRvd1Njcm9sbCIsInNjcm9sbExlZnQiLCJwYWdlWE9mZnNldCIsInNjcm9sbFRvcCIsInBhZ2VZT2Zmc2V0IiwiZ2V0V2luZG93U2Nyb2xsQmFyWCIsImdldFZpZXdwb3J0UmVjdCIsImh0bWwiLCJsYXlvdXRWaWV3cG9ydCIsImdldERvY3VtZW50UmVjdCIsIl9lbGVtZW50JG93bmVyRG9jdW1lbiIsIndpblNjcm9sbCIsImJvZHkiLCJzY3JvbGxXaWR0aCIsInNjcm9sbEhlaWdodCIsImRpcmVjdGlvbiIsImlzU2Nyb2xsUGFyZW50IiwiX2dldENvbXB1dGVkU3R5bGUiLCJvdmVyZmxvdyIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsImdldFNjcm9sbFBhcmVudCIsImxpc3RTY3JvbGxQYXJlbnRzIiwibGlzdCIsImlzQm9keSIsInVwZGF0ZWRMaXN0IiwicmVjdFRvQ2xpZW50UmVjdCIsInJlY3QiLCJnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdCIsImNsaWVudFRvcCIsImNsaWVudExlZnQiLCJnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZSIsImNsaXBwaW5nUGFyZW50IiwiZ2V0Q2xpcHBpbmdQYXJlbnRzIiwiY2FuRXNjYXBlQ2xpcHBpbmciLCJjbGlwcGVyRWxlbWVudCIsImdldENsaXBwaW5nUmVjdCIsImJvdW5kYXJ5Iiwicm9vdEJvdW5kYXJ5IiwibWFpbkNsaXBwaW5nUGFyZW50cyIsImZpcnN0Q2xpcHBpbmdQYXJlbnQiLCJjbGlwcGluZ1JlY3QiLCJhY2NSZWN0IiwiY29tcHV0ZU9mZnNldHMiLCJjb21tb25YIiwiY29tbW9uWSIsIm1haW5BeGlzIiwiZGV0ZWN0T3ZlcmZsb3ciLCJfb3B0aW9ucyRwbGFjZW1lbnQiLCJfb3B0aW9ucyRzdHJhdGVneSIsIl9vcHRpb25zJGJvdW5kYXJ5IiwiX29wdGlvbnMkcm9vdEJvdW5kYXJ5IiwiX29wdGlvbnMkZWxlbWVudENvbnRlIiwiZWxlbWVudENvbnRleHQiLCJfb3B0aW9ucyRhbHRCb3VuZGFyeSIsImFsdEJvdW5kYXJ5IiwiX29wdGlvbnMkcGFkZGluZyIsImFsdENvbnRleHQiLCJjbGlwcGluZ0NsaWVudFJlY3QiLCJjb250ZXh0RWxlbWVudCIsInJlZmVyZW5jZUNsaWVudFJlY3QiLCJwb3BwZXJDbGllbnRSZWN0IiwiZWxlbWVudENsaWVudFJlY3QiLCJvdmVyZmxvd09mZnNldHMiLCJvZmZzZXREYXRhIiwibXVsdGlwbHkiLCJjb21wdXRlQXV0b1BsYWNlbWVudCIsImZsaXBWYXJpYXRpb25zIiwiX29wdGlvbnMkYWxsb3dlZEF1dG9QIiwiYWxsb3dlZEF1dG9QbGFjZW1lbnRzIiwiYWxsUGxhY2VtZW50cyIsImFsbG93ZWRQbGFjZW1lbnRzIiwib3ZlcmZsb3dzIiwiZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMiLCJvcHBvc2l0ZVBsYWNlbWVudCIsImZsaXAiLCJfc2tpcCIsIl9vcHRpb25zJG1haW5BeGlzIiwiY2hlY2tNYWluQXhpcyIsIl9vcHRpb25zJGFsdEF4aXMiLCJhbHRBeGlzIiwiY2hlY2tBbHRBeGlzIiwic3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIiwiZmFsbGJhY2tQbGFjZW1lbnRzIiwiX29wdGlvbnMkZmxpcFZhcmlhdGlvIiwicHJlZmVycmVkUGxhY2VtZW50IiwiaXNCYXNlUGxhY2VtZW50IiwicmVmZXJlbmNlUmVjdCIsImNoZWNrc01hcCIsIk1hcCIsIm1ha2VGYWxsYmFja0NoZWNrcyIsImZpcnN0Rml0dGluZ1BsYWNlbWVudCIsIl9iYXNlUGxhY2VtZW50IiwiaXNTdGFydFZhcmlhdGlvbiIsIm1haW5WYXJpYXRpb25TaWRlIiwiYWx0VmFyaWF0aW9uU2lkZSIsImNoZWNrcyIsImNoZWNrIiwibnVtYmVyT2ZDaGVja3MiLCJfaSIsImZpdHRpbmdQbGFjZW1lbnQiLCJyZXNldCIsImdldFNpZGVPZmZzZXRzIiwicHJldmVudGVkT2Zmc2V0cyIsImlzQW55U2lkZUZ1bGx5Q2xpcHBlZCIsInNpZGUiLCJoaWRlIiwicHJldmVudE92ZXJmbG93IiwicmVmZXJlbmNlT3ZlcmZsb3ciLCJwb3BwZXJBbHRPdmVyZmxvdyIsInJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyIsInBvcHBlckVzY2FwZU9mZnNldHMiLCJpc1JlZmVyZW5jZUhpZGRlbiIsImhhc1BvcHBlckVzY2FwZWQiLCJkaXN0YW5jZUFuZFNraWRkaW5nVG9YWSIsImludmVydERpc3RhbmNlIiwic2tpZGRpbmciLCJkaXN0YW5jZSIsIl9vcHRpb25zJG9mZnNldCIsIl9kYXRhJHN0YXRlJHBsYWNlbWVudCIsImdldEFsdEF4aXMiLCJfb3B0aW9ucyR0ZXRoZXIiLCJ0ZXRoZXIiLCJfb3B0aW9ucyR0ZXRoZXJPZmZzZXQiLCJ0ZXRoZXJPZmZzZXQiLCJ0ZXRoZXJPZmZzZXRWYWx1ZSIsIm5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSIsIm9mZnNldE1vZGlmaWVyU3RhdGUiLCJfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQiLCJtYWluU2lkZSIsImFsdFNpZGUiLCJhZGRpdGl2ZSIsIm1heExlbiIsImFycm93UGFkZGluZ09iamVjdCIsImFycm93UGFkZGluZ01pbiIsImFycm93UGFkZGluZ01heCIsImFycm93TGVuIiwibWluT2Zmc2V0IiwibWF4T2Zmc2V0IiwiY2xpZW50T2Zmc2V0Iiwib2Zmc2V0TW9kaWZpZXJWYWx1ZSIsInRldGhlck1pbiIsInRldGhlck1heCIsInByZXZlbnRlZE9mZnNldCIsIl9vZmZzZXRNb2RpZmllclN0YXRlJDIiLCJfbWFpblNpZGUiLCJfYWx0U2lkZSIsIl9vZmZzZXQiLCJfbWluIiwiX21heCIsImlzT3JpZ2luU2lkZSIsIl9vZmZzZXRNb2RpZmllclZhbHVlIiwiX3RldGhlck1pbiIsIl90ZXRoZXJNYXgiLCJfcHJldmVudGVkT2Zmc2V0IiwiZ2V0SFRNTEVsZW1lbnRTY3JvbGwiLCJnZXROb2RlU2Nyb2xsIiwiaXNFbGVtZW50U2NhbGVkIiwiZ2V0Q29tcG9zaXRlUmVjdCIsImVsZW1lbnRPclZpcnR1YWxFbGVtZW50IiwiaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQiLCJvZmZzZXRQYXJlbnRJc1NjYWxlZCIsIm9yZGVyIiwibW9kaWZpZXJzIiwidmlzaXRlZCIsIlNldCIsIm1vZGlmaWVyIiwiYWRkIiwiZGVwIiwiZGVwTW9kaWZpZXIiLCJvcmRlck1vZGlmaWVycyIsIm9yZGVyZWRNb2RpZmllcnMiLCJkZWJvdW5jZSIsInBlbmRpbmciLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJzdHIiLCJJTlZBTElEX01PRElGSUVSX0VSUk9SIiwiTUlTU0lOR19ERVBFTkRFTkNZX0VSUk9SIiwiVkFMSURfUFJPUEVSVElFUyIsInZhbGlkYXRlTW9kaWZpZXJzIiwicmVxdWlyZW1lbnQiLCJtb2QiLCJ1bmlxdWVCeSIsImlkZW50aWZpZXJzIiwiaWRlbnRpZmllciIsIm1lcmdlQnlOYW1lIiwibWVyZ2VkIiwiZXhpc3RpbmciLCJJTlZBTElEX0VMRU1FTlRfRVJST1IiLCJJTkZJTklURV9MT09QX0VSUk9SIiwiREVGQVVMVF9PUFRJT05TIiwiYXJlVmFsaWRFbGVtZW50cyIsInBvcHBlckdlbmVyYXRvciIsImdlbmVyYXRvck9wdGlvbnMiLCJfZ2VuZXJhdG9yT3B0aW9ucyIsIl9nZW5lcmF0b3JPcHRpb25zJGRlZiIsImRlZmF1bHRNb2RpZmllcnMiLCJfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyIiwiY3JlYXRlUG9wcGVyIiwiZWZmZWN0Q2xlYW51cEZucyIsImlzRGVzdHJveWVkIiwic2V0T3B0aW9ucyIsInNldE9wdGlvbnNBY3Rpb24iLCJjbGVhbnVwTW9kaWZpZXJFZmZlY3RzIiwiZmxpcE1vZGlmaWVyIiwibWFyZ2luVG9wIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5MZWZ0IiwicnVuTW9kaWZpZXJFZmZlY3RzIiwiZm9yY2VVcGRhdGUiLCJfc3RhdGUkZWxlbWVudHMiLCJfX2RlYnVnX2xvb3BzX18iLCJfc3RhdGUkb3JkZXJlZE1vZGlmaWUiLCJfc3RhdGUkb3JkZXJlZE1vZGlmaWUyIiwiZGVzdHJveSIsIm9uRmlyc3RVcGRhdGUiLCJfcmVmMyRvcHRpb25zIiwiY2xlYW51cEZuIiwibm9vcEZuIiwiZXZlbnRMaXN0ZW5lcnMiLCJoYXNFbGVtZW50VHlwZSIsImhhc01hcCIsImhhc1NldCIsImhhc0FycmF5QnVmZmVyIiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJlcXVhbCIsInNpemUiLCJyZWFjdEZhc3RDb21wYXJlIiwiRU1QVFlfTU9ESUZJRVJTIiwidXNlUG9wcGVyIiwicmVmZXJlbmNlRWxlbWVudCIsInBvcHBlckVsZW1lbnQiLCJwcmV2T3B0aW9ucyIsIm9wdGlvbnNXaXRoRGVmYXVsdHMiLCJzZXRTdGF0ZSIsInVwZGF0ZVN0YXRlTW9kaWZpZXIiLCJ1c2VNZW1vIiwiUmVhY3RET00iLCJmbHVzaFN5bmMiLCJwb3BwZXJPcHRpb25zIiwibmV3T3B0aW9ucyIsInBvcHBlckluc3RhbmNlUmVmIiwiZGVmYXVsdENyZWF0ZVBvcHBlciIsInBvcHBlckluc3RhbmNlIiwiTk9PUCIsIk5PT1BfUFJPTUlTRSIsIlBvcHBlciIsIl9yZWYkcGxhY2VtZW50IiwiX3JlZiRzdHJhdGVneSIsIl9yZWYkbW9kaWZpZXJzIiwiaW5uZXJSZWYiLCJ1c2VDb250ZXh0Iiwic2V0UG9wcGVyRWxlbWVudCIsIl9SZWFjdCR1c2VTdGF0ZTIiLCJzZXRBcnJvd0VsZW1lbnQiLCJfdXNlUG9wcGVyIiwiY2hpbGRyZW5Qcm9wcyIsImFycm93UHJvcHMiLCJ3YXJuaW5nIiwiYXJnSW5kZXgiLCJjb25kaXRpb24iLCJ3YXJuaW5nXzEiLCJSZWZlcmVuY2UiLCJyZWZIYW5kbGVyIiwic2V0TWlsbGlzZWNvbmRzIiwibGUiLCJyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZGUiLCJ5ZSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwidWUiLCJoZSIsIm1lIiwiTWUiLCJmZSIsInZlIiwiRGUiLCJnZSIsIndlIiwia2UiLCJiZSIsIlNlIiwiQ2UiLCJ0b1ByaW1pdGl2ZSIsIlBlIiwiRWUiLCJOZSIsInhlIiwiWWUiLCJuZSIsInRlIiwiVGUiLCJPZSIsImV0IiwiWmUiLCJyZSIsIkllIiwiWiIsImF3YXJlT2ZVbmljb2RlVG9rZW5zIiwiTGUiLCJkYXRlRm9ybWF0IiwiUmUiLCJob3VyIiwiTiIsIkZlIiwiQWUiLCJLZSIsIkJlIiwiV2UiLCJXIiwiSGUiLCJqIiwiamUiLCJRZSIsIlZlIiwicWUiLCIkIiwiVWUiLCJKIiwiemUiLCIkZSIsIlUiLCJHZSIsImVlIiwiZ2xvYmFsVGhpcyIsIl9fbG9jYWxlSWRfXyIsIl9fbG9jYWxlRGF0YV9fIiwidHQiLCJydCIsIm50Iiwib3QiLCJtaW5EYXRlIiwibWF4RGF0ZSIsImV4Y2x1ZGVEYXRlcyIsImV4Y2x1ZGVEYXRlSW50ZXJ2YWxzIiwiaW5jbHVkZURhdGVzIiwiaW5jbHVkZURhdGVJbnRlcnZhbHMiLCJmaWx0ZXJEYXRlIiwiZHQiLCJhdCIsInN0IiwiViIsIkMiLCJwdCIsImN0IiwibHQiLCJfIiwidXQiLCJnIiwiaHQiLCJleGNsdWRlVGltZXMiLCJpbmNsdWRlVGltZXMiLCJmaWx0ZXJUaW1lIiwibXQiLCJtaW5UaW1lIiwibWF4VGltZSIsImZ0IiwieXQiLCJsIiwidnQiLCJBIiwiRHQiLCJ3dCIsImd0Iiwia3QiLCJidCIsIlN0IiwiQ3QiLCJzdGFydFBlcmlvZCIsImVuZFBlcmlvZCIsIl90IiwiTXQiLCJvZSIsInllYXJzTGlzdCIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJvbkNoYW5nZSIsInVuc2hpZnQiLCJpbmNyZW1lbnRZZWFycyIsImRlY3JlbWVudFllYXJzIiwib25DYW5jZWwiLCJzaGlmdFllYXJzIiwieWVhckRyb3Bkb3duSXRlbU51bWJlciIsInNjcm9sbGFibGVZZWFyRHJvcGRvd24iLCJkcm9wZG93blJlZiIsImFyaWFTZWxlY3RlZCIsInJlbmRlck9wdGlvbnMiLCJQdCIsImRyb3Bkb3duVmlzaWJsZSIsIm9uU2VsZWN0Q2hhbmdlIiwicmVuZGVyU2VsZWN0T3B0aW9ucyIsInZpc2liaWxpdHkiLCJ0b2dnbGVEcm9wZG93biIsInJlbmRlclJlYWRWaWV3IiwicmVuZGVyRHJvcGRvd24iLCJhZGp1c3REYXRlT25DaGFuZ2UiLCJoYW5kbGVZZWFyQ2hhbmdlIiwib25TZWxlY3QiLCJzZXRPcGVuIiwiZHJvcGRvd25Nb2RlIiwicmVuZGVyU2Nyb2xsTW9kZSIsInJlbmRlclNlbGVjdE1vZGUiLCJFdCIsIm1vbnRoTmFtZXMiLCJpc1NlbGVjdGVkTW9udGgiLCJOdCIsInVzZVNob3J0TW9udGhJbkRyb3Bkb3duIiwieHQiLCJZdCIsIm1vbnRoWWVhcnNMaXN0Iiwic2Nyb2xsYWJsZU1vbnRoWWVhckRyb3Bkb3duIiwiT3QiLCJUdCIsImNyZWF0ZVJlZiIsImlzRGlzYWJsZWQiLCJvbk1vdXNlRW50ZXIiLCJoYW5kbGVPbktleURvd24iLCJkaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbiIsInNlbGVjdGVkIiwicHJlU2VsZWN0aW9uIiwiaGlnaGxpZ2h0RGF0ZXMiLCJzdGFydERhdGUiLCJlbmREYXRlIiwic2VsZWN0c1N0YXJ0Iiwic2VsZWN0c0VuZCIsInNlbGVjdHNSYW5nZSIsInNlbGVjdHNEaXNhYmxlZERheXNJblJhbmdlIiwic2VsZWN0aW5nRGF0ZSIsImlzSW5TZWxlY3RpbmdSYW5nZSIsImRheUNsYXNzTmFtZSIsImlzRXhjbHVkZWQiLCJpc1NlbGVjdGVkIiwiaXNLZXlib2FyZFNlbGVjdGVkIiwiaXNSYW5nZVN0YXJ0IiwiaXNSYW5nZUVuZCIsImlzSW5SYW5nZSIsImlzU2VsZWN0aW5nUmFuZ2VTdGFydCIsImlzU2VsZWN0aW5nUmFuZ2VFbmQiLCJpc0N1cnJlbnREYXkiLCJpc1dlZWtlbmQiLCJpc0FmdGVyTW9udGgiLCJpc0JlZm9yZU1vbnRoIiwiZ2V0SGlnaExpZ2h0ZWRDbGFzcyIsImFyaWFMYWJlbFByZWZpeFdoZW5FbmFibGVkIiwiYXJpYUxhYmVsUHJlZml4V2hlbkRpc2FibGVkIiwiZ2V0VGFiSW5kZXgiLCJpc0lucHV0Rm9jdXNlZCIsImFjdGl2ZUVsZW1lbnQiLCJpbmxpbmUiLCJzaG91bGRGb2N1c0RheUlubGluZSIsImNvbnRhaW5lclJlZiIsImRheUVsIiwiZm9jdXMiLCJwcmV2ZW50U2Nyb2xsIiwibW9udGhTaG93c0R1cGxpY2F0ZURheXNFbmQiLCJtb250aFNob3dzRHVwbGljYXRlRGF5c1N0YXJ0IiwicmVuZGVyRGF5Q29udGVudHMiLCJnZXRDbGFzc05hbWVzIiwib25LZXlEb3duIiwiaGFuZGxlQ2xpY2siLCJoYW5kbGVNb3VzZUVudGVyIiwidGFiSW5kZXgiLCJnZXRBcmlhTGFiZWwiLCJyb2xlIiwiaGFuZGxlRm9jdXNEYXkiLCJJdCIsIndlZWtOdW1iZXIiLCJhcmlhTGFiZWxQcmVmaXgiLCJMdCIsIm9uRGF5Q2xpY2siLCJvbkRheU1vdXNlRW50ZXIiLCJvbldlZWtTZWxlY3QiLCJzaG91bGRDbG9zZU9uU2VsZWN0IiwiZm9ybWF0V2Vla051bWJlciIsImNhbGVuZGFyU3RhcnREYXkiLCJzaG93V2Vla051bWJlciIsImhhbmRsZVdlZWtDbGljayIsImNob29zZURheUFyaWFMYWJlbFByZWZpeCIsImRpc2FibGVkRGF5QXJpYUxhYmVsUHJlZml4IiwiaGFuZGxlRGF5Q2xpY2siLCJoYW5kbGVEYXlNb3VzZUVudGVyIiwicmVuZGVyRGF5cyIsIlJ0Iiwib3JkZXJJbkRpc3BsYXkiLCJvbk1vdXNlTGVhdmUiLCJmaXhlZEhlaWdodCIsIndlZWtBcmlhTGFiZWxQcmVmaXgiLCJzaG93V2Vla051bWJlcnMiLCJpc1dlZWtJbk1vbnRoIiwicGVla05leHRNb250aCIsInNldFByZVNlbGVjdGlvbiIsIk1PTlRIX1JFRlMiLCJvbk1vbnRoQ2xpY2siLCJoYW5kbGVNb250aE5hdmlnYXRpb24iLCJRVUFSVEVSX1JFRlMiLCJvblF1YXJ0ZXJDbGljayIsImhhbmRsZVF1YXJ0ZXJOYXZpZ2F0aW9uIiwibW9udGhDbGFzc05hbWUiLCJpc1JhbmdlU3RhcnRNb250aCIsImlzUmFuZ2VFbmRNb250aCIsImlzQ3VycmVudE1vbnRoIiwiaXNTZWxlY3RlZFF1YXJ0ZXIiLCJpc1JhbmdlU3RhcnRRdWFydGVyIiwiaXNSYW5nZUVuZFF1YXJ0ZXIiLCJzaG93RnVsbE1vbnRoWWVhclBpY2tlciIsInNob3dUd29Db2x1bW5Nb250aFllYXJQaWNrZXIiLCJzaG93Rm91ckNvbHVtbk1vbnRoWWVhclBpY2tlciIsIm9uTW9udGhLZXlEb3duIiwiZ2V0TW9udGhDbGFzc05hbWVzIiwib25RdWFydGVyS2V5RG93biIsImdldFF1YXJ0ZXJDbGFzc05hbWVzIiwiZ2V0UXVhcnRlclRhYkluZGV4IiwiaXNDdXJyZW50UXVhcnRlciIsInNob3dNb250aFllYXJQaWNrZXIiLCJzaG93UXVhcnRlclllYXJQaWNrZXIiLCJoYW5kbGVNb3VzZUxlYXZlIiwicmVuZGVyTW9udGhzIiwicmVuZGVyUXVhcnRlcnMiLCJyZW5kZXJXZWVrcyIsIkZ0IiwidGltZUNsYXNzTmFtZSIsImlzU2VsZWN0ZWRUaW1lIiwiaW5qZWN0VGltZXMiLCJpbnRlcnZhbHMiLCJvcGVuVG9EYXRlIiwibGlDbGFzc2VzIiwiY2VudGVyTGkiLCJjYWxjQ2VudGVyUG9zaXRpb24iLCJtb250aFJlZiIsImhlYWRlciIsInRvZGF5QnV0dG9uIiwic2hvd1RpbWVTZWxlY3RPbmx5IiwidGltZUNhcHRpb24iLCJyZW5kZXJUaW1lcyIsIm9uVGltZUNoYW5nZSIsIkF0IiwieWVhckl0ZW1OdW1iZXIiLCJZRUFSX1JFRlMiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ1cGRhdGVGb2N1c09uUGFnaW5hdGUiLCJoYW5kbGVZZWFyQ2xpY2siLCJvblllYXJDbGljayIsImhhbmRsZVllYXJOYXZpZ2F0aW9uIiwiaXNDdXJyZW50WWVhciIsIm9uWWVhcktleURvd24iLCJnZXRZZWFyVGFiSW5kZXgiLCJnZXRZZWFyQ2xhc3NOYW1lcyIsIkt0IiwiY3VzdG9tVGltZUlucHV0IiwiY2xvbmVFbGVtZW50IiwicGxhY2Vob2xkZXIiLCJ0aW1lSW5wdXRMYWJlbCIsInJlbmRlclRpbWVJbnB1dCIsIkJ0Iiwic2hvd1BvcHBlckFycm93IiwiV3QiLCJIdCIsIm9uRHJvcGRvd25Gb2N1cyIsImhhbmRsZU1vbnRoQ2hhbmdlIiwib25Nb250aE1vdXNlTGVhdmUiLCJvblllYXJDaGFuZ2UiLCJpc1JlbmRlckFyaWFMaXZlTWVzc2FnZSIsIm9uTW9udGhDaGFuZ2UiLCJoYW5kbGVNb250aFllYXJDaGFuZ2UiLCJ3ZWVrTGFiZWwiLCJmb3JtYXRXZWVrZGF5Iiwid2Vla0RheUNsYXNzTmFtZSIsImZvcm1hdFdlZWtEYXkiLCJ1c2VXZWVrZGF5c1Nob3J0Iiwic2hvd1llYXJQaWNrZXIiLCJyZW5kZXJDdXN0b21IZWFkZXIiLCJmb3JjZVNob3dNb250aE5hdmlnYXRpb24iLCJzaG93RGlzYWJsZWRNb250aE5hdmlnYXRpb24iLCJkZWNyZWFzZU1vbnRoIiwiZGVjcmVhc2VZZWFyIiwicHJldmlvdXNNb250aEJ1dHRvbkxhYmVsIiwicHJldmlvdXNZZWFyQnV0dG9uTGFiZWwiLCJwcmV2aW91c01vbnRoQXJpYUxhYmVsIiwicHJldmlvdXNZZWFyQXJpYUxhYmVsIiwic2hvd1RpbWVTZWxlY3QiLCJpbmNyZWFzZU1vbnRoIiwiaW5jcmVhc2VZZWFyIiwibmV4dE1vbnRoQnV0dG9uTGFiZWwiLCJuZXh0WWVhckJ1dHRvbkxhYmVsIiwibmV4dE1vbnRoQXJpYUxhYmVsIiwibmV4dFllYXJBcmlhTGFiZWwiLCJzaG93WWVhckRyb3Bkb3duIiwic2hvd01vbnRoRHJvcGRvd24iLCJzaG93TW9udGhZZWFyRHJvcGRvd24iLCJjaGFuZ2VZZWFyIiwiY2hhbmdlTW9udGgiLCJjaGFuZ2VNb250aFllYXIiLCJoYW5kbGVUb2RheUJ1dHRvbkNsaWNrIiwibW9udGhEYXRlIiwicmVuZGVyQ3VycmVudE1vbnRoIiwib25Gb2N1cyIsImhhbmRsZURyb3Bkb3duRm9jdXMiLCJyZW5kZXJNb250aERyb3Bkb3duIiwicmVuZGVyTW9udGhZZWFyRHJvcGRvd24iLCJyZW5kZXJZZWFyRHJvcGRvd24iLCJtb250aENvbnRhaW5lciIsImN1c3RvbUhlYWRlckNvdW50IiwicHJldk1vbnRoQnV0dG9uRGlzYWJsZWQiLCJuZXh0TW9udGhCdXR0b25EaXNhYmxlZCIsInByZXZZZWFyQnV0dG9uRGlzYWJsZWQiLCJuZXh0WWVhckJ1dHRvbkRpc2FibGVkIiwicmVuZGVyWWVhckhlYWRlciIsInJlbmRlckRlZmF1bHRIZWFkZXIiLCJzaG93UHJldmlvdXNNb250aHMiLCJtb250aHNTaG93biIsIm1vbnRoU2VsZWN0ZWRJbiIsInJlbmRlckhlYWRlciIsIm1vbnRoQXJpYUxhYmVsUHJlZml4IiwiaGFuZGxlT25EYXlLZXlEb3duIiwiaGFuZGxlTW9udGhNb3VzZUxlYXZlIiwidGltZUZvcm1hdCIsInRpbWVJbnRlcnZhbHMiLCJ3aXRoUG9ydGFsIiwic2hvd1RpbWVJbnB1dCIsImdldERhdGVJblZpZXciLCJhc3NpZ25Nb250aENvbnRhaW5lciIsImNvbnRhaW5lciIsInJlbmRlckFyaWFMaXZlUmVnaW9uIiwicmVuZGVyUHJldmlvdXNCdXR0b24iLCJyZW5kZXJOZXh0QnV0dG9uIiwicmVuZGVyWWVhcnMiLCJyZW5kZXJUb2RheUJ1dHRvbiIsInJlbmRlclRpbWVTZWN0aW9uIiwicmVuZGVySW5wdXRUaW1lU2VjdGlvbiIsInJlbmRlckNoaWxkcmVuIiwianQiLCJlbCIsInBvcnRhbFJvb3QiLCJwb3J0YWxIb3N0IiwiZ2V0RWxlbWVudEJ5SWQiLCJwb3J0YWxJZCIsImFwcGVuZENoaWxkIiwicmVtb3ZlQ2hpbGQiLCJhZSIsImNyZWF0ZVBvcnRhbCIsIlF0IiwiZGlzYWJsZWQiLCJWdCIsInRhYkxvb3BSZWYiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZ2V0VGFiQ2hpbGRyZW4iLCJlbmFibGVUYWJMb29wIiwiaGFuZGxlRm9jdXNTdGFydCIsImhhbmRsZUZvY3VzRW5kIiwicXQiLCJ3cmFwcGVyQ2xhc3NOYW1lIiwiaGlkZVBvcHBlciIsInBvcHBlckNvbXBvbmVudCIsInBvcHBlck1vZGlmaWVycyIsInBvcHBlclBsYWNlbWVudCIsInBvcHBlclByb3BzIiwidGFyZ2V0Q29tcG9uZW50IiwicG9wcGVyT25LZXlEb3duIiwic2UiLCJwb3BwZXJDb250YWluZXIiLCJpZSIsInBlIiwiVXQiLCJ6dCIsImdldFByZVNlbGVjdGlvbiIsIm9wZW4iLCJzdGFydE9wZW4iLCJwcmV2ZW50Rm9jdXMiLCJmb2N1c2VkIiwicHJldmVudEZvY3VzVGltZW91dCIsImNsZWFyVGltZW91dCIsImJsdXIiLCJjYW5jZWxGb2N1c0lucHV0IiwiY2FsY0luaXRpYWxTdGF0ZSIsImxhc3RQcmVTZWxlY3RDaGFuZ2UiLCJHdCIsInNldEJsdXIiLCJpbnB1dFZhbHVlIiwicmVhZE9ubHkiLCJwcmV2ZW50T3Blbk9uRm9jdXMiLCJpbnB1dEZvY3VzVGltZW91dCIsInNldFRpbWVvdXQiLCJzZXRGb2N1cyIsIm9uQmx1ciIsIm9uQ2hhbmdlUmF3IiwiaXNEZWZhdWx0UHJldmVudGVkIiwiJHQiLCJzdHJpY3RQYXJzaW5nIiwiY2UiLCJzZXRTZWxlY3RlZCIsImFsbG93U2FtZURheSIsImZvY3VzU2VsZWN0ZWRNb250aCIsIm9uSW5wdXRDbGljayIsImNhbGVuZGFyIiwiaW5wdXRPayIsImhhbmRsZVNlbGVjdCIsIm9uSW5wdXRFcnJvciIsIm1zZyIsIm9uQ2xlYXJDbGljayIsImNsb3NlT25TY3JvbGwiLCJpc0NhbGVuZGFyT3BlbiIsImRhdGVGb3JtYXRDYWxlbmRhciIsImhhbmRsZUNhbGVuZGFyQ2xpY2tPdXRzaWRlIiwiaGFuZGxlVGltZUNoYW5nZSIsImNhbGVuZGFyQ2xhc3NOYW1lIiwiY2FsZW5kYXJDb250YWluZXIiLCJvbkRheUtleURvd24iLCJjdXN0b21JbnB1dCIsImN1c3RvbUlucHV0UmVmIiwiaGFuZGxlQmx1ciIsImhhbmRsZUNoYW5nZSIsImhhbmRsZUZvY3VzIiwib25JbnB1dEtleURvd24iLCJpZCIsImZvcm0iLCJhdXRvRm9jdXMiLCJwbGFjZWhvbGRlclRleHQiLCJhdXRvQ29tcGxldGUiLCJ0aXRsZSIsImFyaWFEZXNjcmliZWRCeSIsImFyaWFJbnZhbGlkIiwiYXJpYUxhYmVsbGVkQnkiLCJhcmlhUmVxdWlyZWQiLCJpc0NsZWFyYWJsZSIsImNsZWFyQnV0dG9uVGl0bGUiLCJjbGVhckJ1dHRvbkNsYXNzTmFtZSIsImFyaWFMYWJlbENsb3NlIiwidHJpbSIsIm9uU2Nyb2xsIiwib25DYWxlbmRhck9wZW4iLCJvbkNhbGVuZGFyQ2xvc2UiLCJjbGVhclByZXZlbnRGb2N1c1RpbWVvdXQiLCJzaG93SWNvbiIsInhtbG5zIiwidmlld0JveCIsInJlbmRlckRhdGVJbnB1dCIsInJlbmRlckNsZWFyQnV0dG9uIiwicmVuZGVyQ2FsZW5kYXIiLCJvblBvcnRhbEtleURvd24iLCJyZW5kZXJJbnB1dENvbnRhaW5lciIsInBvcHBlckNsYXNzTmFtZSIsIm9uUG9wcGVyS2V5RG93biIsImNvbG9ycyIsImJvcmRlciIsInByaW1hcnkxMDAiLCJwcmltYXJ5ODAiLCJwcmltYXJ5NjAiLCJwcmltYXJ5NDAiLCJwcmltYXJ5MjAiLCJhY2NlbnQiLCJncmV5MTAwIiwiZ3JleTgwIiwiZ3JleTYwIiwiZ3JleTQwIiwiZ3JleTIwIiwid2hpdGUiLCJibGFjayIsImVycm9yRGFyayIsImVycm9yTGlnaHQiLCJzdWNjZXNzRGFyayIsInN1Y2Nlc3MiLCJzdWNjZXNzTGlnaHQiLCJ3YXJuaW5nRGFyayIsIndhcm5pbmdMaWdodCIsImluZm9EYXJrIiwiaW5mbyIsImluZm9MaWdodCIsImJnIiwiZmlsdGVyQmciLCJzaWRlYmFyIiwiaW5wdXRCb3JkZXIiLCJzZXBhcmF0b3IiLCJoaWdobGlnaHQiLCJsb3ZlIiwiQ29sb3JWYXJpYW50cyIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJkYW5nZXIiLCJzcGFjZSIsInhzIiwic20iLCJtZCIsImxnIiwieGwiLCJ4eGwiLCJ4MyIsIng0IiwieDUiLCJ4NiIsInNpemVzIiwibmF2YmFySGVpZ2h0Iiwic2lkZWJhcldpZHRoIiwibWF4Rm9ybVdpZHRoIiwiZm9udFNpemVzIiwiaDQiLCJoMyIsImgyIiwiaDEiLCJmb250V2VpZ2h0cyIsImxpZ2h0ZXIiLCJsaWdodCIsIm5vcm1hbCIsImJvbGQiLCJib2xkZXIiLCJsaW5lSGVpZ2h0cyIsInNoYWRvd3MiLCJsb2dpbiIsImNhcmRIb3ZlciIsImRyYXdlciIsImNhcmQiLCJpbnB1dEZvY3VzIiwiYnV0dG9uRm9jdXMiLCJicmVha3BvaW50cyIsImZvbnQiLCJib3JkZXJzIiwiZmlsdGVySW5wdXQiLCJib3JkZXJXaWR0aHMiLCJtZXJnZSIsIl9hc3NpZ24iLCJsb2NhbGVDb21wYXJlIiwibnVtZXJpYyIsInNlbnNpdGl2aXR5IiwiZGVmYXVsdHMiLCJjcmVhdGVNZWRpYVF1ZXJ5IiwiZ2V0VmFsdWUiLCJzY2FsZSIsImRlZiIsInVuZGVmIiwiY3JlYXRlUGFyc2VyIiwiY2FjaGUiLCJzaG91bGRTb3J0IiwiaXNDYWNoZURpc2FibGVkIiwidGhlbWUiLCJkaXNhYmxlU3R5bGVkU3lzdGVtQ2FjaGUiLCJzeCIsInJhdyIsIm1lZGlhIiwicGFyc2VSZXNwb25zaXZlU3R5bGUiLCJwYXJzZVJlc3BvbnNpdmVPYmplY3QiLCJwcm9wTmFtZXMiLCJfY3JlYXRlUGFyc2VyIiwibWVkaWFRdWVyaWVzIiwiX3Byb3BzIiwiX2Fzc2lnbjIiLCJicmVha3BvaW50IiwiX2Fzc2lnbjMiLCJjcmVhdGVTdHlsZUZ1bmN0aW9uIiwicHJvcGVydGllcyIsIl9yZWYkdHJhbnNmb3JtIiwiZGVmYXVsdFNjYWxlIiwicHJvcCIsInN5c3RlbSIsImNvbmYiLCJjb21wb3NlIiwiaXNOdW1iZXIiLCJnZXRXaWR0aCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJkaXNwbGF5IiwidmVydGljYWxBbGlnbiIsImxheW91dCIsImNvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwib3BhY2l0eSIsImZvbnRGYW1pbHkiLCJmb250U2l6ZSIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0IiwibGV0dGVyU3BhY2luZyIsInRleHRBbGlnbiIsImZvbnRTdHlsZSIsInR5cG9ncmFwaHkiLCJhbGlnbkl0ZW1zIiwiYWxpZ25Db250ZW50IiwianVzdGlmeUl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJmbGV4V3JhcCIsImZsZXhEaXJlY3Rpb24iLCJmbGV4IiwiZmxleEdyb3ciLCJmbGV4U2hyaW5rIiwiZmxleEJhc2lzIiwianVzdGlmeVNlbGYiLCJhbGlnblNlbGYiLCJmbGV4Ym94IiwiZ3JpZEdhcCIsImdyaWRDb2x1bW5HYXAiLCJncmlkUm93R2FwIiwiZ3JpZENvbHVtbiIsImdyaWRSb3ciLCJncmlkQXV0b0Zsb3ciLCJncmlkQXV0b0NvbHVtbnMiLCJncmlkQXV0b1Jvd3MiLCJncmlkVGVtcGxhdGVDb2x1bW5zIiwiZ3JpZFRlbXBsYXRlUm93cyIsImdyaWRUZW1wbGF0ZUFyZWFzIiwiZ3JpZEFyZWEiLCJncmlkIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJTdHlsZSIsImJvcmRlckNvbG9yIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyVG9wIiwiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiYm9yZGVyUmlnaHQiLCJib3JkZXJCb3R0b20iLCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIiwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJib3JkZXJMZWZ0IiwiYm9yZGVyWCIsImJvcmRlclkiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclRvcENvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckJvdHRvbUNvbG9yIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJMZWZ0Q29sb3IiLCJib3JkZXJMZWZ0U3R5bGUiLCJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyUmlnaHRDb2xvciIsImJvcmRlclJpZ2h0U3R5bGUiLCJiYWNrZ3JvdW5kIiwiYmFja2dyb3VuZEltYWdlIiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmdJbWFnZSIsImJnU2l6ZSIsImJnUG9zaXRpb24iLCJiZ1JlcGVhdCIsInpJbmRleCIsImdldE1hcmdpbiIsImlzTmVnYXRpdmUiLCJhYnNvbHV0ZSIsImNvbmZpZ3MiLCJtYXJnaW5YIiwibWFyZ2luWSIsIm1yIiwibWIiLCJtbCIsIm14IiwibXkiLCJwYWRkaW5nVG9wIiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1giLCJwYWRkaW5nWSIsInByIiwicGIiLCJwbCIsInB4IiwicHkiLCJzaGFkb3ciLCJib3hTaGFkb3ciLCJ0ZXh0U2hhZG93IiwiX2V4dGVuZHMiLCJkZWZhdWx0QnJlYWtwb2ludHMiLCJkZWZhdWx0VGhlbWUiLCJhbGlhc2VzIiwibXVsdGlwbGVzIiwic2NhbGVzIiwiZ2FwIiwiY29sdW1uR2FwIiwicm93R2FwIiwib3V0bGluZUNvbG9yIiwiZmlsbCIsInN0cm9rZSIsInBvc2l0aXZlT3JOZWdhdGl2ZSIsInRyYW5zZm9ybXMiLCJjdXJyIiwiX2V4dGVuZHMyIiwicmVzcG9uc2l2ZSIsInZhcmlhbnQiLCJzY2FsZU5hbWUiLCJkaXJzIiwiX2NvbmZpZyIsIl9yZWYkcHJvcCIsIl9yZWYkdmFyaWFudHMiLCJ2YXJpYW50cyIsInNoYWxsb3dlcXVhbCIsInNoYWxsb3dFcXVhbCIsIm9iakEiLCJvYmpCIiwiY29tcGFyZSIsImNvbXBhcmVDb250ZXh0IiwicmV0Iiwia2V5c0EiLCJrZXlzQiIsImJIYXNPd25Qcm9wZXJ0eSIsImlkeCIsInZhbHVlQSIsInZhbHVlQiIsInN0eWxpc19taW4iLCJjaGFyQ29kZUF0IiwiY2hhckF0IiwiY2EiLCJkYSIsImVhIiwiZmEiLCJoYSIsImlhIiwiamEiLCJrYSIsImFhIiwiYmEiLCJsYSIsIm1hIiwibmEiLCJvYSIsInByZWZpeCIsInVzZSIsInVuaXRsZXNzS2V5cyIsImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IiwiYm9yZGVySW1hZ2VPdXRzZXQiLCJib3JkZXJJbWFnZVNsaWNlIiwiYm9yZGVySW1hZ2VXaWR0aCIsImJveEZsZXgiLCJib3hGbGV4R3JvdXAiLCJib3hPcmRpbmFsR3JvdXAiLCJjb2x1bW5Db3VudCIsImNvbHVtbnMiLCJmbGV4UG9zaXRpdmUiLCJmbGV4TmVnYXRpdmUiLCJmbGV4T3JkZXIiLCJncmlkUm93RW5kIiwiZ3JpZFJvd1NwYW4iLCJncmlkUm93U3RhcnQiLCJncmlkQ29sdW1uRW5kIiwiZ3JpZENvbHVtblNwYW4iLCJncmlkQ29sdW1uU3RhcnQiLCJtc0dyaWRSb3ciLCJtc0dyaWRSb3dTcGFuIiwibXNHcmlkQ29sdW1uIiwibXNHcmlkQ29sdW1uU3BhbiIsIm9ycGhhbnMiLCJ0YWJTaXplIiwid2lkb3dzIiwiem9vbSIsIldlYmtpdExpbmVDbGFtcCIsImZpbGxPcGFjaXR5IiwiZmxvb2RPcGFjaXR5Iiwic3RvcE9wYWNpdHkiLCJzdHJva2VEYXNoYXJyYXkiLCJzdHJva2VEYXNob2Zmc2V0Iiwic3Ryb2tlTWl0ZXJsaW1pdCIsInN0cm9rZU9wYWNpdHkiLCJzdHJva2VXaWR0aCIsIm1lbW9pemUiLCJyZWFjdFByb3BzUmVnZXgiLCJpc1Byb3BWYWxpZCIsInJlYWN0SXMiLCJSRUFDVF9TVEFUSUNTIiwiY2hpbGRDb250ZXh0VHlwZXMiLCJjb250ZXh0VHlwZSIsImNvbnRleHRUeXBlcyIsImdldERlZmF1bHRQcm9wcyIsImdldERlcml2ZWRTdGF0ZUZyb21FcnJvciIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsIm1peGlucyIsInByb3BUeXBlcyIsIktOT1dOX1NUQVRJQ1MiLCJjYWxsZXIiLCJjYWxsZWUiLCJhcml0eSIsIkZPUldBUkRfUkVGX1NUQVRJQ1MiLCJNRU1PX1NUQVRJQ1MiLCJUWVBFX1NUQVRJQ1MiLCJnZXRTdGF0aWNzIiwiY29tcG9uZW50Iiwib2JqZWN0UHJvdG90eXBlIiwiaG9pc3ROb25SZWFjdFN0YXRpY3MiLCJzb3VyY2VDb21wb25lbnQiLCJibGFja2xpc3QiLCJpbmhlcml0ZWRDb21wb25lbnQiLCJ0YXJnZXRTdGF0aWNzIiwic291cmNlU3RhdGljcyIsImhvaXN0Tm9uUmVhY3RTdGF0aWNzX2NqcyIsInN0eWxlZCIsIl9zdHlsZWQiLCJBdmF0YXIiLCJkaXYiLCJzcmMiLCJjc3NDbGFzcyIsInJlZ3VsYXJDbGFzcyIsIm5hbWVzIiwicGFyc2VkIiwidmFyaWFudFN0eWxlIiwidmFyaWFudENvbG9yIiwib3V0bGluZSIsImNvbG9yVmFyaWFudCIsInNpemVWYXJpYW50cyIsIkJhZGdlIiwic3BhbiIsImdyZXkiLCJ0cmFuc3BhcmVudCIsIkJveCIsInNlY3Rpb24iLCJhbmltYXRlIiwiZGF0ZXBpY2tlclN0eWxlcyIsIl9pc05hdGl2ZUZ1bmN0aW9uIiwiX2NvbnN0cnVjdCIsIlBhcmVudCIsIkNsYXNzIiwiaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiX3dyYXBOYXRpdmVTdXBlciIsIl9jYWNoZSIsImlzTmF0aXZlRnVuY3Rpb24iLCJXcmFwcGVyIiwiRVJST1JTIiwiUG9saXNoZWRFcnJvciIsIl9FcnJvciIsIl9sZW4yIiwiX2tleTIiLCJjc3NSZWdleCIsImdldFZhbHVlQW5kVW5pdCIsIm1hdGNoZWRWYWx1ZSIsImNvbG9yVG9JbnQiLCJjb252ZXJ0VG9JbnQiLCJyZWQiLCJncmVlbiIsImJsdWUiLCJoc2xUb1JnYiIsImh1ZSIsInNhdHVyYXRpb24iLCJsaWdodG5lc3MiLCJjb252ZXJ0IiwiaHVlUHJpbWUiLCJjaHJvbWEiLCJzZWNvbmRDb21wb25lbnQiLCJsaWdodG5lc3NNb2RpZmljYXRpb24iLCJmaW5hbFJlZCIsImZpbmFsR3JlZW4iLCJmaW5hbEJsdWUiLCJuYW1lZENvbG9yTWFwIiwiYWxpY2VibHVlIiwiYW50aXF1ZXdoaXRlIiwiYXF1YSIsImFxdWFtYXJpbmUiLCJhenVyZSIsImJlaWdlIiwiYmlzcXVlIiwiYmxhbmNoZWRhbG1vbmQiLCJibHVldmlvbGV0IiwiYnJvd24iLCJidXJseXdvb2QiLCJjYWRldGJsdWUiLCJjaGFydHJldXNlIiwiY2hvY29sYXRlIiwiY29yYWwiLCJjb3JuZmxvd2VyYmx1ZSIsImNvcm5zaWxrIiwiY3JpbXNvbiIsImN5YW4iLCJkYXJrYmx1ZSIsImRhcmtjeWFuIiwiZGFya2dvbGRlbnJvZCIsImRhcmtncmF5IiwiZGFya2dyZWVuIiwiZGFya2dyZXkiLCJkYXJra2hha2kiLCJkYXJrbWFnZW50YSIsImRhcmtvbGl2ZWdyZWVuIiwiZGFya29yYW5nZSIsImRhcmtvcmNoaWQiLCJkYXJrcmVkIiwiZGFya3NhbG1vbiIsImRhcmtzZWFncmVlbiIsImRhcmtzbGF0ZWJsdWUiLCJkYXJrc2xhdGVncmF5IiwiZGFya3NsYXRlZ3JleSIsImRhcmt0dXJxdW9pc2UiLCJkYXJrdmlvbGV0IiwiZGVlcHBpbmsiLCJkZWVwc2t5Ymx1ZSIsImRpbWdyYXkiLCJkaW1ncmV5IiwiZG9kZ2VyYmx1ZSIsImZpcmVicmljayIsImZsb3JhbHdoaXRlIiwiZm9yZXN0Z3JlZW4iLCJmdWNoc2lhIiwiZ2FpbnNib3JvIiwiZ2hvc3R3aGl0ZSIsImdvbGQiLCJnb2xkZW5yb2QiLCJncmF5IiwiZ3JlZW55ZWxsb3ciLCJob25leWRldyIsImhvdHBpbmsiLCJpbmRpYW5yZWQiLCJpbmRpZ28iLCJpdm9yeSIsImtoYWtpIiwibGF2ZW5kZXIiLCJsYXZlbmRlcmJsdXNoIiwibGF3bmdyZWVuIiwibGVtb25jaGlmZm9uIiwibGlnaHRibHVlIiwibGlnaHRjb3JhbCIsImxpZ2h0Y3lhbiIsImxpZ2h0Z29sZGVucm9keWVsbG93IiwibGlnaHRncmF5IiwibGlnaHRncmVlbiIsImxpZ2h0Z3JleSIsImxpZ2h0cGluayIsImxpZ2h0c2FsbW9uIiwibGlnaHRzZWFncmVlbiIsImxpZ2h0c2t5Ymx1ZSIsImxpZ2h0c2xhdGVncmF5IiwibGlnaHRzbGF0ZWdyZXkiLCJsaWdodHN0ZWVsYmx1ZSIsImxpZ2h0eWVsbG93IiwibGltZSIsImxpbWVncmVlbiIsImxpbmVuIiwibWFnZW50YSIsIm1hcm9vbiIsIm1lZGl1bWFxdWFtYXJpbmUiLCJtZWRpdW1ibHVlIiwibWVkaXVtb3JjaGlkIiwibWVkaXVtcHVycGxlIiwibWVkaXVtc2VhZ3JlZW4iLCJtZWRpdW1zbGF0ZWJsdWUiLCJtZWRpdW1zcHJpbmdncmVlbiIsIm1lZGl1bXR1cnF1b2lzZSIsIm1lZGl1bXZpb2xldHJlZCIsIm1pZG5pZ2h0Ymx1ZSIsIm1pbnRjcmVhbSIsIm1pc3R5cm9zZSIsIm1vY2Nhc2luIiwibmF2YWpvd2hpdGUiLCJuYXZ5Iiwib2xkbGFjZSIsIm9saXZlIiwib2xpdmVkcmFiIiwib3JhbmdlIiwib3JhbmdlcmVkIiwib3JjaGlkIiwicGFsZWdvbGRlbnJvZCIsInBhbGVncmVlbiIsInBhbGV0dXJxdW9pc2UiLCJwYWxldmlvbGV0cmVkIiwicGFwYXlhd2hpcCIsInBlYWNocHVmZiIsInBlcnUiLCJwaW5rIiwicGx1bSIsInBvd2RlcmJsdWUiLCJwdXJwbGUiLCJyZWJlY2NhcHVycGxlIiwicm9zeWJyb3duIiwicm95YWxibHVlIiwic2FkZGxlYnJvd24iLCJzYWxtb24iLCJzYW5keWJyb3duIiwic2VhZ3JlZW4iLCJzZWFzaGVsbCIsInNpZW5uYSIsInNpbHZlciIsInNreWJsdWUiLCJzbGF0ZWJsdWUiLCJzbGF0ZWdyYXkiLCJzbGF0ZWdyZXkiLCJzbm93Iiwic3ByaW5nZ3JlZW4iLCJzdGVlbGJsdWUiLCJ0YW4iLCJ0ZWFsIiwidGhpc3RsZSIsInRvbWF0byIsInR1cnF1b2lzZSIsInZpb2xldCIsIndoZWF0Iiwid2hpdGVzbW9rZSIsInllbGxvdyIsInllbGxvd2dyZWVuIiwibmFtZVRvSGV4Iiwibm9ybWFsaXplZENvbG9yTmFtZSIsImhleFJlZ2V4IiwiaGV4UmdiYVJlZ2V4IiwicmVkdWNlZEhleFJlZ2V4IiwicmVkdWNlZFJnYmFIZXhSZWdleCIsInJnYlJlZ2V4IiwicmdiYVJlZ2V4IiwiaHNsUmVnZXgiLCJoc2xhUmVnZXgiLCJwYXJzZVRvUmdiIiwibm9ybWFsaXplZENvbG9yIiwiYWxwaGEiLCJ0b0ZpeGVkIiwiX2FscGhhIiwicmdiTWF0Y2hlZCIsInJnYmFNYXRjaGVkIiwiaHNsTWF0Y2hlZCIsInJnYkNvbG9yU3RyaW5nIiwiaHNsUmdiTWF0Y2hlZCIsImhzbGFNYXRjaGVkIiwiX2h1ZSIsIl9zYXR1cmF0aW9uIiwiX2xpZ2h0bmVzcyIsIl9yZ2JDb2xvclN0cmluZyIsIl9oc2xSZ2JNYXRjaGVkIiwicmdiVG9Ic2wiLCJkZWx0YSIsInBhcnNlVG9Ic2wiLCJyZWR1Y2VIZXhWYWx1ZSIsInJlZHVjZUhleFZhbHVlJDEiLCJudW1iZXJUb0hleCIsImhleCIsImNvbG9yVG9IZXgiLCJjb252ZXJ0VG9IZXgiLCJoc2xUb0hleCIsImhzbCIsImhzbGEiLCJyZ2IiLCJyZ2JhIiwiZmlyc3RWYWx1ZSIsInNlY29uZFZhbHVlIiwidGhpcmRWYWx1ZSIsImZvdXJ0aFZhbHVlIiwicmdiVmFsdWUiLCJpc1JnYiIsImlzUmdiYSIsImlzSHNsIiwiaXNIc2xhIiwidG9Db2xvclN0cmluZyIsImN1cnJpZWQiLCJjb21iaW5lZCIsImN1cnJ5IiwiZ3VhcmQiLCJsb3dlckJvdW5kYXJ5IiwidXBwZXJCb3VuZGFyeSIsImRhcmtlbiIsImhzbENvbG9yIiwiY3VycmllZERhcmtlbiIsImN1cnJpZWREYXJrZW4kMSIsImZsYXQiLCJmbGF0dGVuIiwidW5mbGF0dGVuIiwiaXNCdWZmZXIiLCJrZXlJZGVudGl0eSIsIm9wdHMiLCJtYXhEZXB0aCIsInRyYW5zZm9ybUtleSIsInByZXYiLCJjdXJyZW50RGVwdGgiLCJpc2FycmF5Iiwic2FmZSIsImlzYnVmZmVyIiwiaXNvYmplY3QiLCJuZXdLZXkiLCJvdmVyd3JpdGUiLCJnZXRrZXkiLCJwYXJzZWRLZXkiLCJhZGRLZXlzIiwia2V5UHJlZml4IiwicmVjaXBpZW50IiwiaXNFbXB0eSIsImlzT2JqZWN0Iiwia2V5MSIsImtleTIiLCJsaXN0Q2FjaGVDbGVhciIsIl9fZGF0YV9fIiwiX2xpc3RDYWNoZUNsZWFyIiwiZXEiLCJlcV8xIiwiYXNzb2NJbmRleE9mIiwiX2Fzc29jSW5kZXhPZiIsImFycmF5UHJvdG8iLCJzcGxpY2UiLCJsaXN0Q2FjaGVEZWxldGUiLCJsYXN0SW5kZXgiLCJwb3AiLCJfbGlzdENhY2hlRGVsZXRlIiwibGlzdENhY2hlR2V0IiwiX2xpc3RDYWNoZUdldCIsImxpc3RDYWNoZUhhcyIsIl9saXN0Q2FjaGVIYXMiLCJsaXN0Q2FjaGVTZXQiLCJfbGlzdENhY2hlU2V0IiwiTGlzdENhY2hlIiwiY2xlYXIiLCJfTGlzdENhY2hlIiwic3RhY2tDbGVhciIsIl9zdGFja0NsZWFyIiwic3RhY2tEZWxldGUiLCJfc3RhY2tEZWxldGUiLCJzdGFja0dldCIsIl9zdGFja0dldCIsInN0YWNrSGFzIiwiX3N0YWNrSGFzIiwiZnJlZUdsb2JhbCIsImdsb2JhbCIsIl9mcmVlR2xvYmFsIiwiZnJlZVNlbGYiLCJyb290IiwiX3Jvb3QiLCJfU3ltYm9sIiwib2JqZWN0UHJvdG8iLCJuYXRpdmVPYmplY3RUb1N0cmluZyIsInN5bVRvU3RyaW5nVGFnIiwidG9TdHJpbmdUYWciLCJnZXRSYXdUYWciLCJpc093biIsInRhZyIsInVubWFza2VkIiwiX2dldFJhd1RhZyIsIm9iamVjdFRvU3RyaW5nIiwiX29iamVjdFRvU3RyaW5nIiwibnVsbFRhZyIsInVuZGVmaW5lZFRhZyIsImJhc2VHZXRUYWciLCJfYmFzZUdldFRhZyIsImlzT2JqZWN0XzEiLCJhc3luY1RhZyIsImZ1bmNUYWciLCJnZW5UYWciLCJwcm94eVRhZyIsImlzRnVuY3Rpb24iLCJpc0Z1bmN0aW9uXzEiLCJjb3JlSnNEYXRhIiwiX2NvcmVKc0RhdGEiLCJtYXNrU3JjS2V5IiwiSUVfUFJPVE8iLCJpc01hc2tlZCIsIl9pc01hc2tlZCIsImZ1bmNQcm90byIsImZ1bmNUb1N0cmluZyIsInRvU291cmNlIiwiX3RvU291cmNlIiwicmVSZWdFeHBDaGFyIiwicmVJc0hvc3RDdG9yIiwicmVJc05hdGl2ZSIsImJhc2VJc05hdGl2ZSIsIl9iYXNlSXNOYXRpdmUiLCJfZ2V0VmFsdWUiLCJnZXROYXRpdmUiLCJfZ2V0TmF0aXZlIiwiX01hcCIsIm5hdGl2ZUNyZWF0ZSIsIl9uYXRpdmVDcmVhdGUiLCJoYXNoQ2xlYXIiLCJfaGFzaENsZWFyIiwiaGFzaERlbGV0ZSIsIl9oYXNoRGVsZXRlIiwiSEFTSF9VTkRFRklORUQiLCJoYXNoR2V0IiwiX2hhc2hHZXQiLCJoYXNoSGFzIiwiX2hhc2hIYXMiLCJoYXNoU2V0IiwiX2hhc2hTZXQiLCJIYXNoIiwiX0hhc2giLCJtYXBDYWNoZUNsZWFyIiwiX21hcENhY2hlQ2xlYXIiLCJpc0tleWFibGUiLCJfaXNLZXlhYmxlIiwiZ2V0TWFwRGF0YSIsIl9nZXRNYXBEYXRhIiwibWFwQ2FjaGVEZWxldGUiLCJfbWFwQ2FjaGVEZWxldGUiLCJtYXBDYWNoZUdldCIsIl9tYXBDYWNoZUdldCIsIm1hcENhY2hlSGFzIiwiX21hcENhY2hlSGFzIiwibWFwQ2FjaGVTZXQiLCJfbWFwQ2FjaGVTZXQiLCJNYXBDYWNoZSIsIl9NYXBDYWNoZSIsIkxBUkdFX0FSUkFZX1NJWkUiLCJzdGFja1NldCIsInBhaXJzIiwiX3N0YWNrU2V0IiwicmVxdWlyZSQkNSIsIlN0YWNrIiwiX1N0YWNrIiwiYmFzZUFzc2lnblZhbHVlIiwiX2Jhc2VBc3NpZ25WYWx1ZSIsImFzc2lnbk1lcmdlVmFsdWUiLCJfYXNzaWduTWVyZ2VWYWx1ZSIsImNyZWF0ZUJhc2VGb3IiLCJmcm9tUmlnaHQiLCJpdGVyYXRlZSIsImtleXNGdW5jIiwiaXRlcmFibGUiLCJfY3JlYXRlQmFzZUZvciIsImJhc2VGb3IiLCJfYmFzZUZvciIsImZyZWVFeHBvcnRzIiwibm9kZVR5cGUiLCJmcmVlTW9kdWxlIiwibW9kdWxlRXhwb3J0cyIsIkJ1ZmZlciIsImFsbG9jVW5zYWZlIiwiY2xvbmVCdWZmZXIiLCJidWZmZXIiLCJpc0RlZXAiLCJjb3B5IiwiVWludDhBcnJheSIsIl9VaW50OEFycmF5IiwiY2xvbmVBcnJheUJ1ZmZlciIsImFycmF5QnVmZmVyIiwiYnl0ZUxlbmd0aCIsIl9jbG9uZUFycmF5QnVmZmVyIiwiY2xvbmVUeXBlZEFycmF5IiwidHlwZWRBcnJheSIsImJ5dGVPZmZzZXQiLCJfY2xvbmVUeXBlZEFycmF5IiwiY29weUFycmF5IiwiX2NvcHlBcnJheSIsIm9iamVjdENyZWF0ZSIsImJhc2VDcmVhdGUiLCJwcm90byIsIl9iYXNlQ3JlYXRlIiwib3ZlckFyZyIsIl9vdmVyQXJnIiwiZ2V0UHJvdG90eXBlIiwiX2dldFByb3RvdHlwZSIsImlzUHJvdG90eXBlIiwiQ3RvciIsIl9pc1Byb3RvdHlwZSIsImluaXRDbG9uZU9iamVjdCIsIl9pbml0Q2xvbmVPYmplY3QiLCJpc09iamVjdExpa2UiLCJpc09iamVjdExpa2VfMSIsImFyZ3NUYWciLCJiYXNlSXNBcmd1bWVudHMiLCJfYmFzZUlzQXJndW1lbnRzIiwiaXNBcmd1bWVudHMiLCJpc0FyZ3VtZW50c18xIiwiaXNBcnJheV8xIiwiTUFYX1NBRkVfSU5URUdFUiIsImlzTGVuZ3RoIiwiaXNMZW5ndGhfMSIsImlzQXJyYXlMaWtlIiwiaXNBcnJheUxpa2VfMSIsImlzQXJyYXlMaWtlT2JqZWN0IiwiaXNBcnJheUxpa2VPYmplY3RfMSIsInN0dWJGYWxzZSIsInN0dWJGYWxzZV8xIiwibmF0aXZlSXNCdWZmZXIiLCJvYmplY3RUYWciLCJvYmplY3RDdG9yU3RyaW5nIiwiaXNQbGFpbk9iamVjdCIsImlzUGxhaW5PYmplY3RfMSIsImFycmF5VGFnIiwiYm9vbFRhZyIsImRhdGVUYWciLCJlcnJvclRhZyIsIm1hcFRhZyIsIm51bWJlclRhZyIsInJlZ2V4cFRhZyIsInNldFRhZyIsInN0cmluZ1RhZyIsIndlYWtNYXBUYWciLCJhcnJheUJ1ZmZlclRhZyIsImRhdGFWaWV3VGFnIiwiZmxvYXQzMlRhZyIsImZsb2F0NjRUYWciLCJpbnQ4VGFnIiwiaW50MTZUYWciLCJpbnQzMlRhZyIsInVpbnQ4VGFnIiwidWludDhDbGFtcGVkVGFnIiwidWludDE2VGFnIiwidWludDMyVGFnIiwidHlwZWRBcnJheVRhZ3MiLCJiYXNlSXNUeXBlZEFycmF5IiwiX2Jhc2VJc1R5cGVkQXJyYXkiLCJiYXNlVW5hcnkiLCJfYmFzZVVuYXJ5IiwiZnJlZVByb2Nlc3MiLCJwcm9jZXNzIiwibm9kZVV0aWwiLCJ0eXBlcyIsInJlcXVpcmUiLCJiaW5kaW5nIiwibm9kZUlzVHlwZWRBcnJheSIsImlzVHlwZWRBcnJheSIsImlzVHlwZWRBcnJheV8xIiwic2FmZUdldCIsIl9zYWZlR2V0IiwiYXNzaWduVmFsdWUiLCJvYmpWYWx1ZSIsIl9hc3NpZ25WYWx1ZSIsImNvcHlPYmplY3QiLCJjdXN0b21pemVyIiwiaXNOZXciLCJuZXdWYWx1ZSIsIl9jb3B5T2JqZWN0IiwiYmFzZVRpbWVzIiwiX2Jhc2VUaW1lcyIsInJlSXNVaW50IiwiaXNJbmRleCIsIl9pc0luZGV4IiwiYXJyYXlMaWtlS2V5cyIsImluaGVyaXRlZCIsImlzQXJyIiwiaXNBcmciLCJpc0J1ZmYiLCJpc1R5cGUiLCJza2lwSW5kZXhlcyIsIl9hcnJheUxpa2VLZXlzIiwibmF0aXZlS2V5c0luIiwiX25hdGl2ZUtleXNJbiIsImJhc2VLZXlzSW4iLCJpc1Byb3RvIiwiX2Jhc2VLZXlzSW4iLCJrZXlzSW4iLCJrZXlzSW5fMSIsInRvUGxhaW5PYmplY3QiLCJ0b1BsYWluT2JqZWN0XzEiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsInJlcXVpcmUkJDgiLCJyZXF1aXJlJCQ5IiwicmVxdWlyZSQkMTAiLCJyZXF1aXJlJCQxMSIsInJlcXVpcmUkJDEyIiwicmVxdWlyZSQkMTMiLCJyZXF1aXJlJCQxNCIsImJhc2VNZXJnZURlZXAiLCJzcmNJbmRleCIsIm1lcmdlRnVuYyIsInNyY1ZhbHVlIiwic3RhY2tlZCIsImlzQ29tbW9uIiwiaXNUeXBlZCIsIl9iYXNlTWVyZ2VEZWVwIiwiYmFzZU1lcmdlIiwiX2Jhc2VNZXJnZSIsImlkZW50aXR5IiwiaWRlbnRpdHlfMSIsInRoaXNBcmciLCJfYXBwbHkiLCJuYXRpdmVNYXgiLCJvdmVyUmVzdCIsIm90aGVyQXJncyIsIl9vdmVyUmVzdCIsImNvbnN0YW50IiwiY29uc3RhbnRfMSIsImJhc2VTZXRUb1N0cmluZyIsIl9iYXNlU2V0VG9TdHJpbmciLCJIT1RfQ09VTlQiLCJIT1RfU1BBTiIsIm5hdGl2ZU5vdyIsIm5vdyIsInNob3J0T3V0IiwibGFzdENhbGxlZCIsInN0YW1wIiwicmVtYWluaW5nIiwiX3Nob3J0T3V0Iiwic2V0VG9TdHJpbmciLCJfc2V0VG9TdHJpbmciLCJiYXNlUmVzdCIsIl9iYXNlUmVzdCIsImlzSXRlcmF0ZWVDYWxsIiwiX2lzSXRlcmF0ZWVDYWxsIiwiY3JlYXRlQXNzaWduZXIiLCJhc3NpZ25lciIsInNvdXJjZXMiLCJfY3JlYXRlQXNzaWduZXIiLCJtZXJnZV8xIiwiY29tYmluZVN0eWxlcyIsIm92ZXJyaWRlcyIsInBhZCIsImZvcm1hdERhdGUiLCJmb3JtYXRUaW1lIiwiZm9ybWF0RGF0ZVRpbWUiLCJmb3JtYXREYXRlUHJvcGVydHkiLCJwcm9wZXJ0eVR5cGUiLCJnZW5lcmF0ZUlkIiwiYWNjZXNzS2V5IiwiQWRtaW5KUyIsIlVOSVRTIiwiaHVtYW5GaWxlU2l6ZSIsImZvdW5kVW5pdEluZGV4IiwidW5pdEluZGV4IiwibG9nIiwiY2FsY3VsYXRlZFNpemUiLCJndWVzc2VkVW5pdCIsIlBvcnRhbFV0aWxzIiwiYXBwZW5kRWxlbWVudCIsInJlbW92ZUVsZW1lbnQiLCJkb21FbGVtZW50IiwicmVtb3ZlIiwiY3JlYXRlUG9ydGFsRm9yS2V5IiwiaWRLZXkiLCJwb3J0YWxFbGVtZW50IiwiUmVzZXQiLCJjcmVhdGVHbG9iYWxTdHlsZSIsInNlbGVjdFN0eWxlcyIsImNvbnRyb2wiLCJiYXNlU3R5bGVzIiwic2luZ2xlVmFsdWUiLCJtZW51IiwiZmlsdGVyU3R5bGVzIiwicHJvdmlkZWQiLCJ0aGVtZUdldCIsImtpbmQiLCJ0aGVtZVZhbCIsIm9mZnNldFZhbHVlIiwicHhWYWx1ZSIsImdldENvbG9yIiwibGVnYWN5QnV0dG9uVmFyaWFudHMiLCJidXR0b25WYXJpYW50cyIsInN0eWxlZFZhcmlhbnQiLCJjb250YWluZWQiLCJvdXRsaW5lZCIsImljb24iLCJCdXR0b25DU1MiLCJyb3VuZGVkIiwic3R5bGVkQ29sb3IiLCJhZGRDb250ZW50IiwibGFiZWwiLCJCdXR0b24iLCJidXR0b24iLCJhdHRycyIsImxhYmVsVmFyaWFudHMiLCJzZXREaXNhYmxlZCIsIkxhYmVsIiwidXBwZXJjYXNlIiwiSWNvbiIsInN2ZyIsIkNoZWNrYm94UmFkaW9Db250YWluZXIiLCJIaWRkZW5DaGVja2JveCIsImNoZWNrYm94QmFja2dyb3VuZCIsImNoZWNrZWQiLCJTdHlsZWRDaGVja2JveCIsImZvY3VzU2hhZG93U3R5bGUiLCJDaGVja0JveCIsInJlc3RQcm9wcyIsImlzQ2hlY2tlZCIsInNldENoZWNrZWQiLCJwb2ludHMiLCJfX2Fzc2lnbiIsIl9fcmVzdCIsIl9fc3ByZWFkQXJyYXkiLCJwYWNrIiwiYXIiLCJib3JkZXJsZXNzQ1NTIiwiSW5wdXRDU1MiLCJib3JkZXJsZXNzIiwiSW5wdXQiLCJDdXJyZW5jeUlucHV0RmllbGQiLCJDdXJyZW5jeUlucHV0RmllbGRMaWIiLCJDdXJyZW5jeUlucHV0Q29tcG9uZW50IiwiQ3VycmVuY3lJbnB1dCIsInNwaW5Dc3MiLCJzcGluIiwiRmVhdGhlckljb24iLCJGZWF0aGVySWNvbnMiLCJTbGFzaCIsIkFjY2VwdCIsImN4IiwiY3kiLCJmaWxsUnVsZSIsImNsaXBSdWxlIiwiQWRtaW5KU0xvZ28iLCJ4bWxuc1hsaW5rIiwiZmlsdGVyVW5pdHMiLCJkeSIsImluIiwic3RkRGV2aWF0aW9uIiwicngiLCJ4bGlua0hyZWYiLCJBc3Ryb25hdXQiLCJzdHJva2VMaW5lY2FwIiwiQmFnIiwiQmV3YXJlIiwiQ2FsZW5kYXIiLCJDYW5jZWwiLCJDYXJkcyIsIkNsaXAiLCJtYXNrIiwiQ2xvdWQiLCJDdXAiLCJEZXRhaWxzIiwiRG9jcyIsIkRvY3VtZW50Q2hlY2siLCJ4MSIsInkxIiwieDIiLCJ5MiIsInN0cm9rZUxpbmVqb2luIiwiRG9jdW1lbnRTZWFyY2giLCJEcmF3ZXIiLCJGaWxlU2VhcmNoIiwiRmxhZ0luQ29nIiwiRm9sZGVyIiwiRm9sZGVycyIsIkdpdGh1YkxvZ28iLCJJZGVudGl0eUNhcmQiLCJMYXVuY2giLCJNb29uIiwiZHgiLCJocmVmIiwiTm90Rm91bmQiLCJOb3RlYm9vayIsIlBhZGxvY2siLCJtYXNrVW5pdHMiLCJQaG90b3MiLCJQbGFuZXQiLCJQbHVnIiwiUm9ja2V0Iiwic3RvcENvbG9yIiwicnkiLCJSb2NrZXROZXciLCJTbGFjayIsIlRhZ3MiLCJSYXdJbGx1c3RyYXRpb24iLCJJbGx1c3RyYXRpb25Db21wb25lbnQiLCJJbGx1c3RyYXRpb25zIiwiSWxsdXN0cmF0aW9uIiwiTGluayIsIlNwaW5uZXIiLCJMb2FkZXIiLCJPdmVybGF5IiwibGliIiwiX19lc01vZHVsZSIsIkNhY2hlIiwiZGVsZXRlIiwibGVhZGluZyIsIm1heFdhaXQiLCJ0cmFpbGluZyIsImNhbmNlbCIsImZsdXNoIiwid2VicGFja1BvbHlmaWxsIiwiZGVwcmVjYXRlIiwicGF0aHMiLCJwYWRFbmQiLCJyZXBlYXQiLCJyZWdpb25zIiwiaXNvMiIsImNvdW50cnlDb2RlIiwiZGlhbENvZGUiLCJpc0FyZWFDb2RlIiwiYXJlYUNvZGVMZW5ndGgiLCJtYWluQ29kZSIsImhhc0FyZWFDb2RlcyIsImZpbHRlclJlZ2lvbnMiLCJzb3J0VGVycml0b3JpZXMiLCJnZXRGaWx0ZXJlZENvdW50cnlMaXN0IiwibG9jYWxpemVDb3VudHJpZXMiLCJsb2NhbE5hbWUiLCJnZXRDdXN0b21BcmVhcyIsImV4Y2x1ZGVDb3VudHJpZXMiLCJvbmx5Q291bnRyaWVzIiwicHJlZmVycmVkQ291bnRyaWVzIiwiaGlkZGVuQXJlYUNvZGVzIiwiZ2V0UHJvYmFibGVDYW5kaWRhdGUiLCJndWVzc1NlbGVjdGVkQ291bnRyeSIsImVuYWJsZUFyZWFDb2RlcyIsInVwZGF0ZUNvdW50cnkiLCJzZWxlY3RlZENvdW50cnkiLCJmb3JtYXR0ZWROdW1iZXIiLCJkaXNhYmxlQ291bnRyeUNvZGUiLCJmb3JtYXROdW1iZXIiLCJzY3JvbGxUbyIsImVuYWJsZVNlYXJjaCIsInNjcm9sbFRvVG9wIiwiZW5hYmxlQXJlYUNvZGVTdHJldGNoIiwiZW5hYmxlTG9uZ051bWJlcnMiLCJhdXRvRm9ybWF0IiwicmVtYWluaW5nVGV4dCIsImZvcm1hdHRlZFRleHQiLCJjdXJzb3JUb0VuZCIsIm51bWJlcklucHV0UmVmIiwic2V0U2VsZWN0aW9uUmFuZ2UiLCJnZXRFbGVtZW50IiwiZ2V0Q291bnRyeURhdGEiLCJoYW5kbGVGbGFnRHJvcGRvd25DbGljayIsInNob3dEcm9wZG93biIsImNvbmNhdFByZWZlcnJlZENvdW50cmllcyIsImhpZ2hsaWdodENvdW50cnlJbmRleCIsImhhbmRsZUlucHV0IiwiZnJlZXplU2VsZWN0aW9uIiwiY291bnRyeUNvZGVFZGl0YWJsZSIsInJldHVyblZhbHVlIiwiY291bnRyeSIsInBlcnNpc3QiLCJkaXNhYmxlQ291bnRyeUd1ZXNzIiwic2VsZWN0aW9uU3RhcnQiLCJoYW5kbGVJbnB1dENsaWNrIiwiaGFuZGxlRG91YmxlQ2xpY2siLCJoYW5kbGVGbGFnSXRlbUNsaWNrIiwic2VhcmNoVmFsdWUiLCJoYW5kbGVJbnB1dEZvY3VzIiwianVtcEN1cnNvclRvRW5kIiwiaGFuZGxlSW5wdXRCbHVyIiwiaGFuZGxlSW5wdXRDb3B5IiwiY29weU51bWJlcnNPbmx5IiwiZ2V0U2VsZWN0aW9uIiwiY2xpcGJvYXJkRGF0YSIsInNldERhdGEiLCJnZXRIaWdobGlnaHRDb3VudHJ5SW5kZXgiLCJnZXRTZWFyY2hGaWx0ZXJlZENvdW50cmllcyIsInNlYXJjaENvdW50cnkiLCJxdWVyeVN0cmluZyIsImhhbmRsZUtleWRvd24iLCJ3aGljaCIsIkVOVEVSIiwiRVNDIiwiVVAiLCJET1dOIiwiVEFCIiwiU1BBQ0UiLCJkZWJvdW5jZWRRdWVyeVN0aW5nU2VhcmNoZXIiLCJoYW5kbGVJbnB1dEtleURvd24iLCJvbkVudGVyS2V5UHJlc3MiLCJkcm9wZG93bkNvbnRhaW5lclJlZiIsImhhbmRsZVNlYXJjaENoYW5nZSIsImN1cnJlbnRUYXJnZXQiLCJnZXREcm9wZG93bkNvdW50cnlOYW1lIiwiZ2V0Q291bnRyeURyb3Bkb3duTGlzdCIsImRpc2FibGVEcm9wZG93biIsInNlYXJjaE5vdEZvdW5kIiwiZGlzYWJsZVNlYXJjaEljb24iLCJzZWFyY2hDbGFzcyIsInNlYXJjaFN0eWxlIiwic2VhcmNoUGxhY2Vob2xkZXIiLCJhdXRvY29tcGxldGVTZWFyY2giLCJwcmVmZXJyZWQiLCJhY3RpdmUiLCJkcm9wZG93bkNsYXNzIiwiZHJvcGRvd25TdHlsZSIsInNlYXJjaCIsImVuYWJsZVRlcnJpdG9yaWVzIiwicHJlc2VydmVPcmRlciIsIm1hc2tzIiwiYXJlYUNvZGVzIiwibG9jYWxpemF0aW9uIiwiZGVmYXVsdE1hc2siLCJhbHdheXNEZWZhdWx0TWFzayIsImRpc2FibGVJbml0aWFsQ291bnRyeUd1ZXNzIiwiZW5hYmxlQ2xpY2tPdXRzaWRlIiwib25Nb3VudCIsInVwZGF0ZUZvcm1hdHRlZE51bWJlciIsInJlbmRlclN0cmluZ0FzRmxhZyIsImRlZmF1bHRFcnJvck1lc3NhZ2UiLCJzcGVjaWFsTGFiZWwiLCJjb250YWluZXJDbGFzcyIsInVwIiwiaW5wdXRDbGFzcyIsImJ1dHRvbkNsYXNzIiwiY29udGFpbmVyU3R5bGUiLCJpbnB1dFN0eWxlIiwib25Eb3VibGVDbGljayIsIm9uQ29weSIsImlucHV0UHJvcHMiLCJidXR0b25TdHlsZSIsImZsYWdzSW1hZ2VQYXRoIiwiUklHSFQiLCJMRUZUIiwiUExVUyIsInBob25lSW5wdXRTdHlsZXMiLCJSZWFjdFBob25lSW5wdXQiLCJSZWFjdFBob25lSW5wdXRMaWIiLCJSZWFjdFBob25lSW5wdXRDb21wb25lbnQiLCJQaG9uZUlucHV0IiwiUGhvbmVJbnB1dFN0eWxlcyIsIndhdmVLZXlmcmFtZSIsImtleWZyYW1lcyIsIlN0eWxlZFBsYWNlaG9sZGVyIiwiUGxhY2Vob2xkZXIiLCJhcyIsImh0bWxBcyIsIkNpcmNsZSIsIkhpZGRlblJhZGlvIiwicmFkaW9CYWNrZ3JvdW5kIiwiU3R5bGVkUmFkaW8iLCJSYWRpbyIsImFjdHVhbGx5Q2hlY2tlZCIsIlNlY3Rpb24iLCJUYWJsZSIsInRhYmxlIiwiVGFibGVIZWFkIiwidGhlYWQiLCJUYWJsZUJvZHkiLCJ0Ym9keSIsIlRhYmxlQ2VsbCIsInRkIiwiVGFibGVSb3ciLCJ0ciIsIlRhYmxlQ2FwdGlvbiIsImNhcHRpb24iLCJhc3NlcnQiLCJTdHlsZWRCdXR0b24iLCJTdHlsZWRDb250ZW50IiwiU3R5bGVkSGVhZGVyIiwiU3R5bGVkU3BhY2VyIiwiVGFicyIsImN1cnJlbnRUYWIiLCJmdWxsV2lkdGgiLCJoZWFkZXJDb21wb25lbnQiLCJIZWFkZXIiLCJidXR0b25Db21wb25lbnQiLCJjb250ZW50Q29tcG9uZW50IiwiQ29udGVudCIsInRhYnMiLCJzZXRUYWJzIiwicmVnaXN0ZXJUYWIiLCJjdXJyZW50VGFicyIsInVucmVnaXN0ZXJUYWIiLCJuZXdUYWJzIiwibWVtb2l6ZWRDb250ZXh0IiwiVGFiQ29udGV4dCIsInRhYklkIiwidXNlVGFicyIsImN0eCIsIlRhYiIsImNvbnRlbnRDU1MiLCJUZXh0IiwiVGV4dEFyZWEiLCJ0ZXh0YXJlYSIsInVzZVdpbmRvd1NpemUiLCJ3aW5kb3dTaXplIiwic2V0V2luZG93U2l6ZSIsImhhbmRsZVJlc2l6ZSIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsIkFSUk9XX1dJRFRIIiwidG9wQ1NTIiwiaXNWaXNpYmxlIiwiYm90dG9tQ1NTIiwibGVmdENTUyIsInJpZ2h0Q1NTIiwiZ2V0UGFkZGluZyIsIlN0eWxlZFRvb2x0aXAiLCJUb29sdGlwQ29udHJvbCIsImNoaWxkUmVmIiwiQ29udGVudEVsZW1lbnQiLCJ0b29sdGlwUmVmIiwiZGltZW5zaW9uIiwic2V0RGltZW5zaW9uIiwic2V0UG9zaXRpb24iLCJlbGVtZW50UG9zaXRpb24iLCJzZXRFbGVtZW50UG9zaXRpb24iLCJUb29sdGlwUG9ydGFsIiwiVG9vbHRpcCIsInNldElzVmlzaWJsZSIsIlRyaWdnZXJFbGVtZW50IiwiY2hpbGRyZW5Db3VudCIsIkNoaWxkcmVuIiwib25FbnRlciIsIm9uTGVhdmUiLCJDaGlsZFdpdGhSZWYiLCJmb3J3YXJkUmVmIiwidHJpZ2dlclByb3BzIiwiVG9vbHRpcENvbnRlbnQiLCJCYXNlIiwiSDEiLCJIMiIsIkgzIiwiSDQiLCJINSIsIkg2IiwiQ2FwdGlvblNoYXJlZCIsIkNhcHRpb24iLCJDYXJkVGl0bGUiLCJTbWFsbFRleHQiLCJUaXRsZSIsInRoaXMiLCJsb2FkZWQiLCJjb25mb3JtVG9NYXNrIiwiaW5wdXRFbGVtZW50IiwidGV4dE1hc2tJbnB1dEVsZW1lbnQiLCJpbml0VGV4dE1hc2siLCJwaXBlIiwiZ3VpZGUiLCJwbGFjZWhvbGRlckNoYXIiLCJzaG93TWFzayIsImlzTmlsIiwia2VlcENoYXJQb3NpdGlvbnMiLCJkZWZhdWx0VmFsdWUiLCJQdXJlQ29tcG9uZW50Iiwic3RyRnVuY3Rpb24iLCJtYXNrV2l0aG91dENhcmV0VHJhcHMiLCJpbmRleGVzIiwiY29udmVydE1hc2tUb1BsYWNlaG9sZGVyIiwiaXNTdHJpbmciLCJwcm9jZXNzQ2FyZXRUcmFwcyIsInByZXZpb3VzQ29uZm9ybWVkVmFsdWUiLCJjdXJyZW50Q2FyZXRQb3NpdGlvbiIsImNoYXIiLCJjb25mb3JtZWRWYWx1ZSIsIm1ldGEiLCJzb21lQ2hhcnNSZWplY3RlZCIsInByZXZpb3VzUGxhY2Vob2xkZXIiLCJyYXdWYWx1ZSIsImluZGV4ZXNPZlBpcGVkQ2hhcnMiLCJjYXJldFRyYXBJbmRleGVzIiwic2VsZWN0aW9uRW5kIiwicmVqZWN0ZWQiLCJ0aGF0UmV0dXJucyIsInRoYXRSZXR1cm5zRmFsc2UiLCJ0aGF0UmV0dXJuc1RydWUiLCJ0aGF0UmV0dXJuc051bGwiLCJ0aGF0UmV0dXJuc1RoaXMiLCJ0aGF0UmV0dXJuc0FyZ3VtZW50IiwiZnJhbWVzVG9Qb3AiLCJtaW5ZZWFyIiwibWF4WWVhciIsImRkIiwibW0iLCJ5eSIsInl5eXkiLCJISCIsIk1NIiwiU1MiLCJNYXNrIiwiTWFza2VkSW5wdXQiLCJhdXRvY29ycmVjdGVkRGF0ZVBpcGUiLCJjcmVhdGVBdXRvQ29ycmVjdGVkRGF0ZVBpcGUiLCJEYXRlUGlja2VySWNvbiIsIlN0eWxlZERhdGVQaWNrZXIiLCJwYXJzZURhdGVTYWZlbHkiLCJuZXdEYXRlIiwiY29udmVydERhdGVGbnNGb3JtYXRUb0RhdGVQaXBlRm9ybWF0IiwiZGVmYXVsdERhdGVQcm9wcyIsImlucHV0TWFzayIsImRhdGV0aW1lIiwicGFyc2VDdXN0b21NYXNrIiwiZ2V0RGF0ZUlucHV0UHJvcHMiLCJkYXRlRm9ybWF0UGlwZSIsInBhcnNlZE1hc2siLCJEYXRlUGlja2VyIiwiX21hc2siLCJvdGhlcklucHV0TWFza1Byb3BzIiwidG9JU09TdHJpbmciLCJkYXRlVmFsdWUiLCJSZWFjdERhdGVQaWNrZXIiLCJjb25zdGFudHMiLCJzZWNvbmRzSW5ZZWFyIiwic2Vjb25kc0luV2VlayIsInNlY29uZHNJblF1YXJ0ZXIiLCJzZWNvbmRzSW5NaW51dGUiLCJzZWNvbmRzSW5Ib3VyIiwic2Vjb25kc0luRGF5IiwicXVhcnRlcnNJblllYXIiLCJtb250aHNJblF1YXJ0ZXIiLCJtaW51dGVzSW5Ib3VyIiwiZGF5c0luWWVhciIsImRheXNJbldlZWsiLCJtb250aHNJblllYXIiLCJzZWNvbmRzSW5Nb250aCIsIl9pbmRleCIsIl9pbmRleDIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2luZGV4MyIsInVzZURhdGVQaWNrZXIiLCJpc0NhbGVuZGFyVmlzaWJsZSIsInNldENhbGVuZGFyVmlzaWJsZSIsImRhdGVTdHJpbmdWYWx1ZSIsImRhdGVOdW0iLCJvbkRhdGVDaGFuZ2UiLCJERUZBVUxUX0RSQVdFUl9XSURUSCIsImlzSGlkZGVuIiwiRHJhd2VyQ29udGVudCIsIkRyYXdlckZvb3RlciIsIlN0eWxlZERyb3BEb3duIiwiREVGQVVMVF9TVElDSyIsIkRyb3BEb3duIiwic3RpY2siLCJib3hQcm9wcyIsImluaXRpYWxIZWlnaHQiLCJzZXRJbml0aWFsSGVpZ2h0IiwibWVudVBvc2l0aW9uIiwic2V0TWVudVBvc2l0aW9uIiwiRHJvcERvd25NZW51IiwidmFyaWFudHNTaGFyZWQiLCJjb2xvclZhcmlhbnRzIiwiRHJvcERvd25JdGVtIiwiRHJvcERvd25JdGVtQWN0aW9uIiwiRHJvcERvd25UcmlnZ2VyIiwiYXNzaWduSW5XaXRoIiwiYXNzaWduSW5XaXRoXzEiLCJkb21FeGNUYWciLCJpc0Vycm9yIiwiaXNFcnJvcl8xIiwiYXR0ZW1wdCIsImF0dGVtcHRfMSIsImFycmF5TWFwIiwiX2FycmF5TWFwIiwiYmFzZVZhbHVlcyIsIl9iYXNlVmFsdWVzIiwiY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiIsIl9jdXN0b21EZWZhdWx0c0Fzc2lnbkluIiwic3RyaW5nRXNjYXBlcyIsImVzY2FwZVN0cmluZ0NoYXIiLCJjaHIiLCJfZXNjYXBlU3RyaW5nQ2hhciIsIm5hdGl2ZUtleXMiLCJfbmF0aXZlS2V5cyIsImJhc2VLZXlzIiwiX2Jhc2VLZXlzIiwia2V5c18xIiwicmVJbnRlcnBvbGF0ZSIsIl9yZUludGVycG9sYXRlIiwiYmFzZVByb3BlcnR5T2YiLCJfYmFzZVByb3BlcnR5T2YiLCJodG1sRXNjYXBlcyIsImVzY2FwZUh0bWxDaGFyIiwiX2VzY2FwZUh0bWxDaGFyIiwic3ltYm9sVGFnIiwiaXNTeW1ib2xfMSIsIklORklOSVRZIiwic3ltYm9sUHJvdG8iLCJzeW1ib2xUb1N0cmluZyIsImJhc2VUb1N0cmluZyIsIl9iYXNlVG9TdHJpbmciLCJ0b1N0cmluZ18xIiwicmVVbmVzY2FwZWRIdG1sIiwicmVIYXNVbmVzY2FwZWRIdG1sIiwiZXNjYXBlIiwiX2VzY2FwZSIsInJlRXNjYXBlIiwiX3JlRXNjYXBlIiwicmVFdmFsdWF0ZSIsIl9yZUV2YWx1YXRlIiwidGVtcGxhdGVTZXR0aW5ncyIsInRlbXBsYXRlU2V0dGluZ3NfMSIsIklOVkFMSURfVEVNUExfVkFSX0VSUk9SX1RFWFQiLCJyZUVtcHR5U3RyaW5nTGVhZGluZyIsInJlRW1wdHlTdHJpbmdNaWRkbGUiLCJyZUVtcHR5U3RyaW5nVHJhaWxpbmciLCJyZUZvcmJpZGRlbklkZW50aWZpZXJDaGFycyIsInJlRXNUZW1wbGF0ZSIsInJlTm9NYXRjaCIsInJlVW5lc2NhcGVkU3RyaW5nIiwidGVtcGxhdGUiLCJzZXR0aW5ncyIsImltcG9ydHMiLCJpbXBvcnRzS2V5cyIsImltcG9ydHNWYWx1ZXMiLCJpc0VzY2FwaW5nIiwiaXNFdmFsdWF0aW5nIiwiaW50ZXJwb2xhdGUiLCJyZURlbGltaXRlcnMiLCJldmFsdWF0ZSIsInNvdXJjZVVSTCIsImVzY2FwZVZhbHVlIiwiaW50ZXJwb2xhdGVWYWx1ZSIsImVzVGVtcGxhdGVWYWx1ZSIsImV2YWx1YXRlVmFsdWUiLCJ2YXJpYWJsZSIsInRlbXBsYXRlXzEiLCJTdHlsZWRNZXNzYWdlQm94IiwiTWVzc2FnZUJveCIsIm9uQ2xvc2VDbGljayIsInZhcmlhbnRJY29uIiwidmFyaWFudEJnIiwidmFyaWFudEljb25CZyIsIkRyb3Bab25lSW1nIiwiRHJvcFpvbmVJdGVtIiwiZmlsZSIsIm9uUmVtb3ZlIiwiZmlsZW5hbWUiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJsYXN0TW9kaWZpZWQiLCJ0b0xvY2FsZVN0cmluZyIsIkRyb3Bab25lSW1hZ2UiLCJ2YWxpZGF0ZUNvbnRlbnRUeXBlIiwibWltZVR5cGVzIiwibWltZVR5cGUiLCJ2YWxpZGF0ZVNpemUiLCJtYXhTaXplIiwiaW5Vbml0IiwiRFJPUFpPTkVfREVGQVVMVF9UUkFOU0xBVElPTlMiLCJhY2NlcHRlZFNpemUiLCJhY2NlcHRlZFR5cGUiLCJ1bnN1cHBvcnRlZFNpemUiLCJ1bnN1cHBvcnRlZFR5cGUiLCJ0cmFuc2xhdGUiLCJwYXJhbXMiLCJVcGxvYWRJbnB1dCIsIlN0eWxlZERyb3Bab25lIiwiaXNEcmFnZ2luZyIsIkRyb3Bab25lIiwibXVsdGlwbGUiLCJmaWxlcyIsImZpbGVzRnJvbVByb3BzIiwidXBsb2FkTGltaXRJbiIsInRyYW5zbGF0aW9ucyIsInNldElzRHJhZ2dpbmciLCJzZXRFcnJvciIsImZpbGVzVG9VcGxvYWQiLCJzZXRGaWxlc1RvVXBsb2FkIiwib25EcmFnRW50ZXIiLCJvbkRyYWdMZWF2ZSIsIm9uRHJhZ092ZXIiLCJyZW1vdmVJdGVtIiwibmV3SXRlbXMiLCJvbkRyb3AiLCJkYXRhVHJhbnNmZXIiLCJ2YWxpZGF0ZWRGaWxlcyIsImZpbGVOYW1lIiwiZmlsZVR5cGUiLCJuZXdGaWxlcyIsImRpc3BsYXlVcGxvYWRMaW1pdCIsIkltYWdlIiwiSW5wdXRHcm91cCIsImZvcm1Hcm91cERpc2FibGVkQ1NTIiwiZm9ybUdyb3VwV2l0aEVycm9yQ1NTIiwiRm9ybUdyb3VwIiwiRm9ybU1lc3NhZ2UiLCJTdHlsZWRJbmZvQm94IiwiSW5mb0JveCIsImlsbHVzdHJhdGlvbiIsInRlc3RJZCIsIkRFRkFVTFRfV0lEVEgiLCJWQVJJQU5UX0JPUkRFUl9XSURUSCIsIm5ld1BhZGRpbmciLCJNb2RhbFN0eWxlZCIsIk1vZGFsSW5saW5lIiwic3ViVGl0bGUiLCJvbkNsb3NlIiwiYnV0dG9ucyIsImJ1dHRvblByb3BzIiwiTW9kYWxXcmFwcGVyIiwib25PdmVybGF5Q2xpY2siLCJvdGhlclByb3BzIiwiaGFuZGxlT3ZlcmxheUNsaWNrIiwiTW9kYWxQb3J0YWwiLCJNb2RhbCIsIlN0eWxlZE5hdmlnYXRpb25FbGVtZW50IiwiUEFSVF9MRU5HVEhfVE9fRUxMSVBTSVMiLCJOYXZpZ2F0aW9uRWxlbWVudCIsImlzT3BlbiIsImV4cGFuZGFibGUiLCJjaGV2cm9uIiwiaGFzTG9uZ05hbWUiLCJtZW1vIiwicGFydCIsImhhbmRsZU5hdmlnYXRpb25DbGljayIsIndoaXRlU3BhY2UiLCJwYWdpbmF0ZSIsInRvdGFsSXRlbXMiLCJjdXJyZW50UGFnZSIsInBhZ2VTaXplIiwibWF4UGFnZXMiLCJ0b3RhbFBhZ2VzIiwic3RhcnRQYWdlIiwiZW5kUGFnZSIsIm1heFBhZ2VzQmVmb3JlQ3VycmVudFBhZ2UiLCJtYXhQYWdlc0FmdGVyQ3VycmVudFBhZ2UiLCJzdGFydEluZGV4IiwiZW5kSW5kZXgiLCJwYWdlcyIsImp3UGFnaW5hdGUiLCJNSU5fUEFHRVNfRk9SX0ZJUlNUX1BBR0VfQlVUVE9OIiwiRklSU1RfUEFHRSIsIlBhZ2luYXRpb25CdXR0b24iLCJQYWdpbmF0aW9uTGluayIsIlBhZ2luYXRpb25XcmFwcGVyIiwiUGFnaW5hdGlvbiIsInRvdGFsIiwicGFnZSIsInBlclBhZ2UiLCJKV1BhZ2luYXRlIiwiaXNGaXJzdFBhZ2UiLCJpc0xhc3RQYWdlIiwicHJldlBhZ2UiLCJuZXh0UGFnZSIsIk9yZGVyZWRNYXAiLCJjb250ZW50IiwiZm91bmQiLCJhZGRUb1N0YXJ0IiwiYWRkVG9FbmQiLCJhZGRCZWZvcmUiLCJwbGFjZSIsIndpdGhvdXQiLCJwcmVwZW5kIiwic3VidHJhY3QiLCJhcHBlbmQiLCJmaW5kRGlmZlN0YXJ0IiwicG9zIiwiY2hpbGRDb3VudCIsImNoaWxkQSIsImNoaWxkQiIsIm5vZGVTaXplIiwic2FtZU1hcmt1cCIsImlzVGV4dCIsImZpbmREaWZmRW5kIiwicG9zQSIsInBvc0IiLCJpQSIsImlCIiwic2FtZSIsIm1pblNpemUiLCJub2Rlc0JldHdlZW4iLCJub2RlU3RhcnQiLCJkZXNjZW5kYW50cyIsInRleHRCZXR3ZWVuIiwiYmxvY2tTZXBhcmF0b3IiLCJsZWFmVGV4dCIsInNlcGFyYXRlZCIsImlzTGVhZiIsInNwZWMiLCJpc0Jsb2NrIiwibGFzdCIsImxhc3RDaGlsZCIsImZpcnN0IiwiZmlyc3RDaGlsZCIsIndpdGhUZXh0IiwiY3V0IiwiY3V0QnlJbmRleCIsImVtcHR5IiwicmVwbGFjZUNoaWxkIiwibWF5YmVDaGlsZCIsIm90aGVyUG9zIiwicmV0SW5kZXgiLCJjdXJQb3MiLCJjdXIiLCJ0b1N0cmluZ0lubmVyIiwidG9KU09OIiwiZnJvbUpTT04iLCJzY2hlbWEiLCJub2RlRnJvbUpTT04iLCJmcm9tQXJyYXkiLCJqb2luZWQiLCJub2RlcyIsImNvbXBhcmVEZWVwIiwiTWFyayIsImFkZFRvU2V0IiwicGxhY2VkIiwiZXhjbHVkZXMiLCJyYW5rIiwicmVtb3ZlRnJvbVNldCIsImlzSW5TZXQiLCJqc29uIiwibWFya3MiLCJzYW1lU2V0Iiwic2V0RnJvbSIsIm5vbmUiLCJSZXBsYWNlRXJyb3IiLCJTbGljZSIsIm9wZW5TdGFydCIsIm9wZW5FbmQiLCJpbnNlcnRBdCIsImZyYWdtZW50IiwiaW5zZXJ0SW50byIsInJlbW92ZUJldHdlZW4iLCJyZW1vdmVSYW5nZSIsIm1heE9wZW4iLCJvcGVuSXNvbGF0aW5nIiwiaXNvbGF0aW5nIiwiaW5kZXhUbyIsIm9mZnNldFRvIiwiZGlzdCIsImluc2VydCIsImNhblJlcGxhY2UiLCIkZnJvbSIsIiR0byIsImRlcHRoIiwicmVwbGFjZU91dGVyIiwiY2xvc2UiLCJyZXBsYWNlVHdvV2F5IiwicGFyZW50T2Zmc2V0IiwicHJlcGFyZVNsaWNlRm9yUmVwbGFjZSIsInJlcGxhY2VUaHJlZVdheSIsImNoZWNrSm9pbiIsInN1YiIsImNvbXBhdGlibGVDb250ZW50Iiwiam9pbmFibGUiLCIkYmVmb3JlIiwiJGFmdGVyIiwiYWRkTm9kZSIsImFkZFJhbmdlIiwiJHN0YXJ0IiwiJGVuZCIsInRleHRPZmZzZXQiLCJub2RlQWZ0ZXIiLCJub2RlQmVmb3JlIiwiY2hlY2tDb250ZW50IiwiJGFsb25nIiwiZXh0cmEiLCJyZXNvbHZlTm9DYWNoZSIsIlJlc29sdmVkUG9zIiwicGF0aCIsInJlc29sdmVEZXB0aCIsImRvYyIsImluZGV4QWZ0ZXIiLCJiZWZvcmUiLCJhZnRlciIsImRPZmYiLCJwb3NBdEluZGV4IiwidG1wIiwiaW5jbHVzaXZlIiwibWFya3NBY3Jvc3MiLCJpc0lubGluZSIsInNoYXJlZERlcHRoIiwiYmxvY2tSYW5nZSIsInByZWQiLCJpbmxpbmVDb250ZW50IiwiTm9kZVJhbmdlIiwic2FtZVBhcmVudCIsInJlbSIsInJlc29sdmVDYWNoZWQiLCJyZXNvbHZlQ2FjaGUiLCJjYWNoZWQiLCJyZXNvbHZlQ2FjaGVQb3MiLCJyZXNvbHZlQ2FjaGVTaXplIiwiZW1wdHlBdHRycyIsIk5vZGUiLCJzdGFydFBvcyIsInRleHRDb250ZW50IiwiaGFzTWFya3VwIiwiZGVmYXVsdEF0dHJzIiwibWFyayIsImluY2x1ZGVQYXJlbnRzIiwibm9kZUF0IiwiY2hpbGRBZnRlciIsImNoaWxkQmVmb3JlIiwicmFuZ2VIYXNNYXJrIiwiaXNUZXh0YmxvY2siLCJpc0F0b20iLCJ0b0RlYnVnU3RyaW5nIiwid3JhcE1hcmtzIiwiY29udGVudE1hdGNoQXQiLCJjb250ZW50TWF0Y2giLCJtYXRjaEZyYWdtZW50IiwicmVwbGFjZW1lbnQiLCJ0d28iLCJ2YWxpZEVuZCIsImFsbG93c01hcmtzIiwiY2FuUmVwbGFjZVdpdGgiLCJtYXRjaFR5cGUiLCJjYW5BcHBlbmQiLCJtYXJrRnJvbUpTT04iLCJUZXh0Tm9kZSIsImJhc2UiLCJDb250ZW50TWF0Y2giLCJ3cmFwQ2FjaGUiLCJub2RlVHlwZXMiLCJzdHJlYW0iLCJUb2tlblN0cmVhbSIsImV4cHIiLCJwYXJzZUV4cHIiLCJkZmEiLCJuZmEiLCJjaGVja0ZvckRlYWRFbmRzIiwiZnJhZyIsImRlZmF1bHRUeXBlIiwiaGFzUmVxdWlyZWRBdHRycyIsImNvbXBhdGlibGUiLCJmaWxsQmVmb3JlIiwidG9FbmQiLCJzZWVuIiwiZmluaXNoZWQiLCJ0cCIsImNyZWF0ZUFuZEZpbGwiLCJmaW5kV3JhcHBpbmciLCJjb21wdXRlZCIsImNvbXB1dGVXcmFwcGluZyIsInZpYSIsInJldmVyc2UiLCJlZGdlQ291bnQiLCJlZGdlIiwic2NhbiIsIm91dCIsImVhdCIsInRvayIsIlN5bnRheEVycm9yIiwiZXhwcnMiLCJwYXJzZUV4cHJTZXEiLCJwYXJzZUV4cHJTdWJzY3JpcHQiLCJwYXJzZUV4cHJBdG9tIiwicGFyc2VFeHByUmFuZ2UiLCJwYXJzZU51bSIsInJlc29sdmVOYW1lIiwidHlwZU5hbWUiLCJncm91cHMiLCJjb25uZWN0IiwiY29tcGlsZSIsInRlcm0iLCJlZGdlcyIsImxvb3AiLCJjbXAiLCJudWxsRnJvbSIsImxhYmVsZWQiLCJleHBsb3JlIiwic3RhdGVzIiwid29yayIsImRlYWQiLCJhdHRyTmFtZSIsImF0dHIiLCJoYXNEZWZhdWx0IiwiY29tcHV0ZUF0dHJzIiwiYnVpbHQiLCJnaXZlbiIsImluaXRBdHRycyIsIkF0dHJpYnV0ZSIsIk5vZGVUeXBlIiwibWFya1NldCIsImdyb3VwIiwiYXRvbSIsIndoaXRlc3BhY2UiLCJjcmVhdGVDaGVja2VkIiwidmFsaWRDb250ZW50IiwiYWxsb3dzTWFya1R5cGUiLCJtYXJrVHlwZSIsImFsbG93ZWRNYXJrcyIsInRvcFR5cGUiLCJ0b3BOb2RlIiwiTWFya1R5cGUiLCJTY2hlbWEiLCJpbnN0YW5jZVNwZWMiLCJjb250ZW50RXhwckNhY2hlIiwiY29udGVudEV4cHIiLCJtYXJrRXhwciIsImdhdGhlck1hcmtzIiwiZXhjbCIsInRvcE5vZGVUeXBlIiwid3JhcHBpbmdzIiwib2siLCJET01QYXJzZXIiLCJydWxlcyIsInRhZ3MiLCJydWxlIiwibm9ybWFsaXplTGlzdHMiLCJkb20iLCJQYXJzZUNvbnRleHQiLCJhZGRBbGwiLCJmaW5pc2giLCJwYXJzZVNsaWNlIiwibWF0Y2hUYWciLCJtYXRjaGVzIiwibmFtZXNwYWNlIiwibmFtZXNwYWNlVVJJIiwibWF0Y2hlc0NvbnRleHQiLCJnZXRBdHRycyIsIm1hdGNoU3R5bGUiLCJzY2hlbWFSdWxlcyIsIm5leHRQcmlvcml0eSIsInBhcnNlRE9NIiwiaWdub3JlIiwiY2xlYXJNYXJrIiwiZnJvbVNjaGVtYSIsImRvbVBhcnNlciIsImJsb2NrVGFncyIsImFkZHJlc3MiLCJhcnRpY2xlIiwiYXNpZGUiLCJibG9ja3F1b3RlIiwiY2FudmFzIiwiZGwiLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb290ZXIiLCJoNSIsImg2IiwiaGdyb3VwIiwiaHIiLCJsaSIsIm5vc2NyaXB0Iiwib2wiLCJwcmUiLCJ0Zm9vdCIsInVsIiwiaWdub3JlVGFncyIsImhlYWQiLCJzY3JpcHQiLCJsaXN0VGFncyIsIk9QVF9QUkVTRVJWRV9XUyIsIk9QVF9QUkVTRVJWRV9XU19GVUxMIiwiT1BUX09QRU5fTEVGVCIsIndzT3B0aW9uc0ZvciIsInByZXNlcnZlV2hpdGVzcGFjZSIsIk5vZGVDb250ZXh0IiwicGVuZGluZ01hcmtzIiwic29saWQiLCJhY3RpdmVNYXJrcyIsInN0YXNoTWFya3MiLCJ3cmFwIiwicG9wRnJvbVN0YXNoTWFyayIsImFwcGx5UGVuZGluZyIsIm5leHRUeXBlIiwibWFya01heUFwcGx5IiwiaW5saW5lQ29udGV4dCIsInRvcENvbnRleHQiLCJ0b3BPcHRpb25zIiwidG9wTWF0Y2giLCJmaW5kUG9zaXRpb25zIiwibmVlZHNCbG9jayIsImFkZERPTSIsImFkZFRleHROb2RlIiwiZ2V0QXR0cmlidXRlIiwiYWRkRWxlbWVudCIsInJlYWRTdHlsZXMiLCJwYXJzZVN0eWxlcyIsImFkZE1hcmtzIiwicmVtb3ZlTWFya3MiLCJyZW1vdmVQZW5kaW5nTWFyayIsImFkZFBlbmRpbmdNYXJrIiwibm9kZVZhbHVlIiwiZG9tTm9kZUJlZm9yZSIsInByZXZpb3VzU2libGluZyIsImluc2VydE5vZGUiLCJmaW5kSW5UZXh0IiwiZmluZEluc2lkZSIsIm1hdGNoQWZ0ZXIiLCJydWxlSUQiLCJub3JtYWxpemVMaXN0IiwicnVsZUZyb21Ob2RlIiwiaWdub3JlRmFsbGJhY2siLCJza2lwIiwiY2xvc2VQYXJlbnQiLCJzeW5jIiwib2xkTmVlZHNCbG9jayIsImxlYWZGYWxsYmFjayIsImFkZEVsZW1lbnRCeVJ1bGUiLCJjb25zdW1pbmciLCJjcmVhdGVUZXh0Tm9kZSIsImZpbmRQbGFjZSIsImNvbnRpbnVlQWZ0ZXIiLCJlbnRlciIsInN0YXJ0SW4iLCJnZXRDb250ZW50IiwiY29udGVudERPTSIsImNvbnRlbnRFbGVtZW50IiwiZmluZEFyb3VuZCIsImNoaWxkTm9kZXMiLCJuZXh0U2libGluZyIsImZpbmRBdFBvaW50Iiwicm91dGUiLCJlbnRlcklubmVyIiwiYmxvY2siLCJ0ZXh0YmxvY2tGcm9tQ29udGV4dCIsImNsb3NlRXh0cmEiLCJwcmVzZXJ2ZVdTIiwidG9wT3BlbiIsImN1cnJlbnRQb3MiLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsInRleHROb2RlIiwicGFydHMiLCJvcHRpb24iLCJ1c2VSb290IiwibWluRGVwdGgiLCIkY29udGV4dCIsImRlZmx0IiwiZmluZFNhbWVNYXJrSW5TZXQiLCJ1cHRvIiwibGV2ZWwiLCJsYXN0SW5kZXhPZiIsInN0YXNoTWFyayIsInByZXZJdGVtIiwic2VsZWN0b3IiLCJtc01hdGNoZXNTZWxlY3RvciIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsIm1vek1hdGNoZXNTZWxlY3RvciIsIkRPTVNlcmlhbGl6ZXIiLCJzZXJpYWxpemVGcmFnbWVudCIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJrZWVwIiwicmVuZGVyZWQiLCJzcGFubmluZyIsIm1hcmtET00iLCJzZXJpYWxpemVNYXJrIiwic2VyaWFsaXplTm9kZUlubmVyIiwicmVuZGVyU3BlYyIsInNlcmlhbGl6ZU5vZGUiLCJ0b0RPTSIsInN0cnVjdHVyZSIsInhtbE5TIiwidGFnTmFtZSIsImNyZWF0ZUVsZW1lbnROUyIsInNldEF0dHJpYnV0ZU5TIiwiaW5uZXJDb250ZW50IiwiZG9tU2VyaWFsaXplciIsIm5vZGVzRnJvbVNjaGVtYSIsIm1hcmtzRnJvbVNjaGVtYSIsImdhdGhlclRvRE9NIiwibG93ZXIxNiIsImZhY3RvcjE2IiwibWFrZVJlY292ZXIiLCJyZWNvdmVySW5kZXgiLCJyZWNvdmVyT2Zmc2V0IiwiREVMX0JFRk9SRSIsIkRFTF9BRlRFUiIsIkRFTF9BQ1JPU1MiLCJERUxfU0lERSIsIk1hcFJlc3VsdCIsImRlbEluZm8iLCJyZWNvdmVyIiwiZGVsZXRlZCIsImRlbGV0ZWRCZWZvcmUiLCJkZWxldGVkQWZ0ZXIiLCJkZWxldGVkQWNyb3NzIiwiU3RlcE1hcCIsInJhbmdlcyIsImludmVydGVkIiwibWFwUmVzdWx0IiwiYXNzb2MiLCJfbWFwIiwic2ltcGxlIiwib2xkSW5kZXgiLCJuZXdJbmRleCIsIm9sZFNpemUiLCJuZXdTaXplIiwiZGVsIiwidG91Y2hlcyIsIm9sZFN0YXJ0IiwibmV3U3RhcnQiLCJpbnZlcnQiLCJNYXBwaW5nIiwibWFwcyIsIm1pcnJvciIsImFwcGVuZE1hcCIsIm1pcnJvcnMiLCJzZXRNaXJyb3IiLCJhcHBlbmRNYXBwaW5nIiwibWFwcGluZyIsInN0YXJ0U2l6ZSIsIm1pcnIiLCJnZXRNaXJyb3IiLCJhcHBlbmRNYXBwaW5nSW52ZXJ0ZWQiLCJ0b3RhbFNpemUiLCJpbnZlcnNlIiwiY29yciIsInN0ZXBzQnlJRCIsIlN0ZXAiLCJnZXRNYXAiLCJzdGVwVHlwZSIsImpzb25JRCIsInN0ZXBDbGFzcyIsIlN0ZXBSZXN1bHQiLCJmYWlsZWQiLCJmYWlsIiwiZnJvbVJlcGxhY2UiLCJtYXBGcmFnbWVudCIsIm1hcHBlZCIsIkFkZE1hcmtTdGVwIiwib2xkU2xpY2UiLCJSZW1vdmVNYXJrU3RlcCIsIkFkZE5vZGVNYXJrU3RlcCIsInVwZGF0ZWQiLCJuZXdTZXQiLCJSZW1vdmVOb2RlTWFya1N0ZXAiLCJSZXBsYWNlU3RlcCIsImNvbnRlbnRCZXR3ZWVuIiwiUmVwbGFjZUFyb3VuZFN0ZXAiLCJnYXBGcm9tIiwiZ2FwVG8iLCJpbnNlcnRlZCIsImFkZE1hcmsiLCJyZW1vdmVkIiwiYWRkZWQiLCJyZW1vdmluZyIsImFkZGluZyIsInJlbW92ZU1hcmsiLCJ0b1JlbW92ZSIsImNsZWFySW5jb21wYXRpYmxlIiwicGFyZW50VHlwZSIsImRlbFN0ZXBzIiwiYWxsb3dlZCIsImNhbkN1dCIsImxpZnRUYXJnZXQiLCJyYW5nZSIsImxpZnQiLCJnYXBTdGFydCIsImdhcEVuZCIsInNwbGl0dGluZyIsImlubmVyUmFuZ2UiLCJhcm91bmQiLCJmaW5kV3JhcHBpbmdPdXRzaWRlIiwiZmluZFdyYXBwaW5nSW5zaWRlIiwid2l0aEF0dHJzIiwib3V0ZXIiLCJpbnNpZGUiLCJsYXN0VHlwZSIsImlubmVyTWF0Y2giLCJ3cmFwcGVycyIsInNldEJsb2NrVHlwZSIsIm1hcEZyb20iLCJzdGVwcyIsImNhbkNoYW5nZVR5cGUiLCJzdGFydE0iLCJlbmRNIiwiJHBvcyIsInNldE5vZGVNYXJrdXAiLCJuZXdOb2RlIiwicmVwbGFjZVdpdGgiLCJjYW5TcGxpdCIsInR5cGVzQWZ0ZXIiLCJpbm5lclR5cGUiLCJiYXNlVHlwZSIsInR5cGVBZnRlciIsImNhbkpvaW4iLCJqb2luUG9pbnQiLCJkaXIiLCJpbnNlcnRQb2ludCIsImRyb3BQb2ludCIsInBhc3MiLCJiaWFzIiwiaW5zZXJ0UG9zIiwiZml0cyIsIndyYXBwaW5nIiwicmVwbGFjZVN0ZXAiLCJmaXRzVHJpdmlhbGx5IiwiRml0dGVyIiwiZml0IiwidW5wbGFjZWQiLCJmcm9udGllciIsImZpbmRGaXR0YWJsZSIsInBsYWNlTm9kZXMiLCJvcGVuTW9yZSIsImRyb3BOb2RlIiwibW92ZUlubGluZSIsIm11c3RNb3ZlSW5saW5lIiwicGxhY2VkU2l6ZSIsInN0YXJ0RGVwdGgiLCJzbGljZURlcHRoIiwiY29udGVudEF0IiwiZnJvbnRpZXJEZXB0aCIsImluamVjdCIsIm9wZW5BdEVuZCIsImRyb3BGcm9tRnJhZ21lbnQiLCJjbG9zZUZyb250aWVyTm9kZSIsIm9wZW5Gcm9udGllck5vZGUiLCJ0YWtlbiIsIm9wZW5FbmRDb3VudCIsImNsb3NlTm9kZVN0YXJ0IiwiYWRkVG9GcmFnbWVudCIsImNvbnRlbnRBZnRlckZpdHMiLCJmaW5kQ2xvc2VMZXZlbCIsImRyb3BJbm5lciIsIm1vdmUiLCJpbnZhbGlkTWFya3MiLCJkZWZpbmVzQ29udGVudCIsImRlZmluaW5nIiwiZGVmaW5pbmdGb3JDb250ZW50IiwicmVwbGFjZVJhbmdlIiwiZGVsZXRlUmFuZ2UiLCJ0YXJnZXREZXB0aHMiLCJjb3ZlcmVkRGVwdGhzIiwicHJlZmVycmVkVGFyZ2V0IiwiZGVmaW5pbmdBc0NvbnRleHQiLCJwcmVmZXJyZWRUYXJnZXRJbmRleCIsImxlZnROb2RlcyIsInByZWZlcnJlZERlcHRoIiwib3BlbkRlcHRoIiwidGFyZ2V0RGVwdGgiLCJleHBhbmQiLCJjbG9zZUZyYWdtZW50Iiwic3RhcnRTdGVwcyIsIm9sZE9wZW4iLCJuZXdPcGVuIiwicmVwbGFjZVJhbmdlV2l0aCIsInBvaW50IiwiY292ZXJlZCIsIkF0dHJTdGVwIiwiVHJhbnNmb3JtRXJyb3IiLCJUcmFuc2Zvcm0iLCJkb2NzIiwibWF5YmVTdGVwIiwiYWRkU3RlcCIsImRvY0NoYW5nZWQiLCJzZXROb2RlQXR0cmlidXRlIiwiYWRkTm9kZU1hcmsiLCJyZW1vdmVOb2RlTWFyayIsImNsYXNzZXNCeUlkIiwiU2VsZWN0aW9uIiwiJGFuY2hvciIsIiRoZWFkIiwiU2VsZWN0aW9uUmFuZ2UiLCJhbmNob3IiLCJsYXN0Tm9kZSIsImxhc3RQYXJlbnQiLCJzZWxlY3Rpb25Ub0luc2VydGlvbkVuZCIsImZpbmRGcm9tIiwidGV4dE9ubHkiLCJUZXh0U2VsZWN0aW9uIiwiZmluZFNlbGVjdGlvbkluIiwibmVhciIsIkFsbFNlbGVjdGlvbiIsImF0U3RhcnQiLCJhdEVuZCIsImNscyIsInNlbGVjdGlvbkNsYXNzIiwiZ2V0Qm9va21hcmsiLCJiZXR3ZWVuIiwidmlzaWJsZSIsIndhcm5lZEFib3V0VGV4dFNlbGVjdGlvbiIsImNoZWNrVGV4dFNlbGVjdGlvbiIsIiRjdXJzb3IiLCJlbnN1cmVNYXJrcyIsIlRleHRCb29rbWFyayIsImRQb3MiLCJOb2RlU2VsZWN0aW9uIiwiTm9kZUJvb2ttYXJrIiwiaXNTZWxlY3RhYmxlIiwic2VsZWN0YWJsZSIsInNlbCIsInNlbGVjdGlvbiIsInNldFNlbGVjdGlvbiIsIkFsbEJvb2ttYXJrIiwic3RhcnRMZW4iLCJfZnJvbSIsIl90byIsIl9uZXdGcm9tIiwibmV3VG8iLCJVUERBVEVEX1NFTCIsIlVQREFURURfTUFSS1MiLCJVUERBVEVEX1NDUk9MTCIsIlRyYW5zYWN0aW9uIiwiY3VyU2VsZWN0aW9uRm9yIiwiY3VyU2VsZWN0aW9uIiwic3RvcmVkTWFya3MiLCJzZWxlY3Rpb25TZXQiLCJzZXRTdG9yZWRNYXJrcyIsImFkZFN0b3JlZE1hcmsiLCJyZW1vdmVTdG9yZWRNYXJrIiwic3RvcmVkTWFya3NTZXQiLCJzZXRUaW1lIiwicmVwbGFjZVNlbGVjdGlvbiIsInJlcGxhY2VTZWxlY3Rpb25XaXRoIiwiaW5oZXJpdE1hcmtzIiwiZGVsZXRlU2VsZWN0aW9uIiwiaW5zZXJ0VGV4dCIsInNldE1ldGEiLCJnZXRNZXRhIiwiaXNHZW5lcmljIiwic2Nyb2xsSW50b1ZpZXciLCJzY3JvbGxlZEludG9WaWV3IiwiRmllbGREZXNjIiwiZGVzYyIsImluaXQiLCJiYXNlRmllbGRzIiwiX21hcmtzIiwiX29sZCIsIkNvbmZpZ3VyYXRpb24iLCJwbHVnaW5zIiwicGx1Z2luc0J5S2V5IiwiZmllbGRzIiwicGx1Z2luIiwiRWRpdG9yU3RhdGUiLCJhcHBseVRyYW5zYWN0aW9uIiwiZmlsdGVyVHJhbnNhY3Rpb24iLCJyb290VHIiLCJ0cmFuc2FjdGlvbnMiLCJ0cnMiLCJuZXdTdGF0ZSIsImFwcGx5SW5uZXIiLCJoYXZlTmV3IiwiYXBwZW5kVHJhbnNhY3Rpb24iLCJvbGRTdGF0ZSIsIm5ld0luc3RhbmNlIiwiZmllbGQiLCIkY29uZmlnIiwicmVjb25maWd1cmUiLCJwbHVnaW5GaWVsZHMiLCJiaW5kUHJvcHMiLCJQbHVnaW4iLCJjcmVhdGVLZXkiLCJnZXRTdGF0ZSIsIlBsdWdpbktleSIsImRvbUluZGV4IiwicmV1c2VkUmFuZ2UiLCJ0ZXh0UmFuZ2UiLCJjcmVhdGVSYW5nZSIsInNldEVuZCIsInNldFN0YXJ0IiwiaXNFcXVpdmFsZW50UG9zaXRpb24iLCJvZmYiLCJ0YXJnZXROb2RlIiwidGFyZ2V0T2ZmIiwic2NhbkZvciIsImF0b21FbGVtZW50cyIsImhhc0Jsb2NrRGVzYyIsImNvbnRlbnRFZGl0YWJsZSIsImlzT25FZGdlIiwicG1WaWV3RGVzYyIsInNlbGVjdGlvbkNvbGxhcHNlZCIsImRvbVNlbCIsImZvY3VzTm9kZSIsImZvY3VzT2Zmc2V0IiwiYW5jaG9yTm9kZSIsImFuY2hvck9mZnNldCIsImtleUV2ZW50Iiwia2V5Q29kZSIsImNyZWF0ZUV2ZW50IiwiaW5pdEV2ZW50IiwiZGVlcEFjdGl2ZUVsZW1lbnQiLCJlbHQiLCJzaGFkb3dSb290IiwibmF2IiwiYWdlbnQiLCJpZV9lZGdlIiwiaWVfdXB0bzEwIiwiaWVfMTF1cCIsImllX3ZlcnNpb24iLCJkb2N1bWVudE1vZGUiLCJnZWNrbyIsIl9jaHJvbWUiLCJjaHJvbWUiLCJjaHJvbWVfdmVyc2lvbiIsInNhZmFyaSIsInZlbmRvciIsImlvcyIsIm1heFRvdWNoUG9pbnRzIiwibWFjIiwicGxhdGZvcm0iLCJhbmRyb2lkIiwid2Via2l0Iiwid2Via2l0X3ZlcnNpb24iLCJ3aW5kb3dSZWN0IiwiZ2V0U2lkZSIsInNjcm9sbFJlY3RJbnRvVmlldyIsInZpZXciLCJzdGFydERPTSIsInNjcm9sbFRocmVzaG9sZCIsInNvbWVQcm9wIiwic2Nyb2xsTWFyZ2luIiwiYXRUb3AiLCJib3VuZGluZyIsIm1vdmVYIiwibW92ZVkiLCJzY3JvbGxCeSIsInN0YXJ0WCIsInN0YXJ0WSIsImRYIiwiZFkiLCJzdG9yZVNjcm9sbFBvcyIsInJlZkRPTSIsInJlZlRvcCIsImVsZW1lbnRGcm9tUG9pbnQiLCJsb2NhbFJlY3QiLCJzY3JvbGxTdGFjayIsInJlc2V0U2Nyb2xsUG9zIiwibmV3UmVmVG9wIiwicmVzdG9yZVNjcm9sbFN0YWNrIiwiZFRvcCIsInByZXZlbnRTY3JvbGxTdXBwb3J0ZWQiLCJmb2N1c1ByZXZlbnRTY3JvbGwiLCJzZXRBY3RpdmUiLCJzdG9yZWQiLCJmaW5kT2Zmc2V0SW5Ob2RlIiwiY29vcmRzIiwiY2xvc2VzdCIsImR4Q2xvc2VzdCIsImNvb3Jkc0Nsb3Nlc3QiLCJyb3dCb3QiLCJyb3dUb3AiLCJjaGlsZEluZGV4IiwiZ2V0Q2xpZW50UmVjdHMiLCJmaW5kT2Zmc2V0SW5UZXh0Iiwic2luZ2xlUmVjdCIsImluUmVjdCIsInRhcmdldEtsdWRnZSIsInBvc0Zyb21FbGVtZW50IiwiZG9jVmlldyIsInBvc0Zyb21ET00iLCJwb3NGcm9tQ2FyZXQiLCJvdXRzaWRlQmxvY2siLCJzYXdCbG9jayIsIm5lYXJlc3REZXNjIiwicG9zQmVmb3JlIiwicG9zQWZ0ZXIiLCJib3giLCJzdGFydEkiLCJwb3NBdENvb3JkcyIsImNhcmV0UG9zaXRpb25Gcm9tUG9pbnQiLCJvZmZzZXROb2RlIiwiY2FyZXRSYW5nZUZyb21Qb2ludCIsInN0YXJ0Q29udGFpbmVyIiwic3RhcnRPZmZzZXQiLCJkcmFnZ2FibGUiLCJwb3NBdFN0YXJ0IiwiQklESSIsImNvb3Jkc0F0UG9zIiwiZG9tRnJvbVBvcyIsInN1cHBvcnRFbXB0eVJhbmdlIiwicmVjdEJlZm9yZSIsInJlY3RBZnRlciIsImZsYXR0ZW5WIiwidGFrZVNpZGUiLCIkZG9tIiwiZmxhdHRlbkgiLCJpZ25vcmVGb3JDb29yZHMiLCJ3aXRoRmx1c2hlZFN0YXRlIiwidmlld1N0YXRlIiwidXBkYXRlU3RhdGUiLCJlbmRPZlRleHRibG9ja1ZlcnRpY2FsIiwibmVhcmVzdCIsImJveGVzIiwibWF5YmVSVEwiLCJlbmRPZlRleHRibG9ja0hvcml6b250YWwiLCJkb21TZWxlY3Rpb24iLCJtb2RpZnkiLCJvbGROb2RlIiwib2xkT2ZmIiwiZG9tU2VsZWN0aW9uUmFuZ2UiLCJvbGRCaWRpTGV2ZWwiLCJjYXJldEJpZGlMZXZlbCIsInBhcmVudERPTSIsImRvbUFmdGVyUG9zIiwibmV3T2ZmIiwiY29sbGFwc2UiLCJleHRlbmQiLCJjYWNoZWRTdGF0ZSIsImNhY2hlZERpciIsImNhY2hlZFJlc3VsdCIsImVuZE9mVGV4dGJsb2NrIiwiTk9UX0RJUlRZIiwiQ0hJTERfRElSVFkiLCJDT05URU5UX0RJUlRZIiwiTk9ERV9ESVJUWSIsIlZpZXdEZXNjIiwiZGlydHkiLCJtYXRjaGVzV2lkZ2V0Iiwid2lkZ2V0IiwibWF0Y2hlc01hcmsiLCJtYXRjaGVzTm9kZSIsIm91dGVyRGVjbyIsImlubmVyRGVjbyIsIm1hdGNoZXNIYWNrIiwicGFyc2VSdWxlIiwic3RvcEV2ZW50IiwicG9zQmVmb3JlQ2hpbGQiLCJwb3NBdEVuZCIsImxvY2FsUG9zRnJvbURPTSIsImRvbUJlZm9yZSIsImRvbUFmdGVyIiwib25seU5vZGVzIiwiZ2V0RGVzYyIsIm5vZGVET00iLCJkZXNjQXQiLCJUcmFpbGluZ0hhY2tWaWV3RGVzYyIsIldpZGdldFZpZXdEZXNjIiwiZG9tQXRvbSIsInBhcnNlUmFuZ2UiLCJmcm9tT2Zmc2V0IiwidG9PZmZzZXQiLCJjaGlsZEJhc2UiLCJlbXB0eUNoaWxkQXQiLCJmb3JjZSIsImFuY2hvckRPTSIsImhlYWRET00iLCJicktsdWRnZSIsImRvbVNlbEV4dGVuZGVkIiwicmVtb3ZlQWxsUmFuZ2VzIiwiaWdub3JlTXV0YXRpb24iLCJtdXRhdGlvbiIsImNvbnRlbnRMb3N0IiwibWFya0RpcnR5Iiwic3RhcnRJbnNpZGUiLCJlbmRJbnNpZGUiLCJtYXJrUGFyZW50c0RpcnR5Iiwic3RvcCIsImlnbm9yZVNlbGVjdGlvbiIsIkNvbXBvc2l0aW9uVmlld0Rlc2MiLCJ0ZXh0RE9NIiwibXV0Iiwib2xkVmFsdWUiLCJNYXJrVmlld0Rlc2MiLCJjdXN0b20iLCJub2RlVmlld3MiLCJyZXBhcnNlSW5WaWV3IiwicmVwbGFjZU5vZGVzIiwiTm9kZVZpZXdEZXNjIiwidXBkYXRlQ2hpbGRyZW4iLCJkZXNjT2JqIiwiaGFzQXR0cmlidXRlIiwiYXBwbHlPdXRlckRlY28iLCJDdXN0b21Ob2RlVmlld0Rlc2MiLCJUZXh0Vmlld0Rlc2MiLCJzYW1lT3V0ZXJEZWNvIiwiY29tcG9zaXRpb24iLCJjb21wb3NpbmciLCJsb2NhbENvbXBvc2l0aW9uSW5mbyIsImxvY2FsQ29tcG9zaXRpb24iLCJjb21wb3NpdGlvbkluQ2hpbGQiLCJ1cGRhdGVyIiwiVmlld1RyZWVVcGRhdGVyIiwiaXRlckRlY28iLCJpbnNpZGVOb2RlIiwic3luY1RvTWFya3MiLCJwbGFjZVdpZGdldCIsImNvbXBJbmRleCIsImZpbmROb2RlTWF0Y2giLCJmaW5kSW5kZXhXaXRoQ2hpbGQiLCJ1cGRhdGVOb2RlQXQiLCJ1cGRhdGVOZXh0Tm9kZSIsImFkZFRleHRibG9ja0hhY2tzIiwiZGVzdHJveVJlc3QiLCJjaGFuZ2VkIiwicHJvdGVjdExvY2FsQ29tcG9zaXRpb24iLCJyZW5kZXJEZXNjcyIsImlvc0hhY2tzIiwibmVhcmJ5VGV4dE5vZGUiLCJ0ZXh0UG9zIiwiZmluZFRleHRJbkZyYWdtZW50IiwiY29tcG9zaXRpb25Ob2RlcyIsInVwZGF0ZUlubmVyIiwidXBkYXRlT3V0ZXJEZWNvIiwibmVlZHNXcmFwIiwib2xkRE9NIiwicGF0Y2hPdXRlckRlY28iLCJjb21wdXRlT3V0ZXJEZWNvIiwic2VsZWN0Tm9kZSIsImRlc2VsZWN0Tm9kZSIsImRvY1ZpZXdEZXNjIiwicG1Jc0RlY28iLCJpblBhcmVudCIsInRyYWNrV3JpdGVzIiwiZGVzY3MiLCJ3cml0dGVuIiwiY2hpbGRET00iLCJybSIsImluc2VydEJlZm9yZSIsIk91dGVyRGVjb0xldmVsIiwibm9EZWNvIiwiY2xhc3MiLCJvdXRlckRPTSIsInByZXZDb21wdXRlZCIsImN1ckNvbXB1dGVkIiwiY3VyRE9NIiwiZGVjbyIsInBhdGNoQXR0cmlidXRlcyIsInByZXZMaXN0IiwiY3VyTGlzdCIsInJlbW92ZVByb3BlcnR5IiwiY3NzVGV4dCIsImxvY2siLCJwcmVNYXRjaCIsImRlc3Ryb3lCZXR3ZWVuIiwibWF4S2VlcCIsImlzTG9ja2VkIiwibWFya0Rlc2MiLCJ0YXJnZXREZXNjIiwiZG9tTm9kZSIsIm5leHRET00iLCJsb2NrZWQiLCJyZXF1aXJlc0dlY2tvSGFja05vZGUiLCJhZGRIYWNrTm9kZSIsImFsdCIsImhhY2siLCJwYXJlbnREZXNjIiwiY3VyRGVzYyIsImRlc2NJIiwiZkkiLCJjb21wYXJlU2lkZSIsIm9uV2lkZ2V0Iiwib25Ob2RlIiwibG9jYWxzIiwiZm9yQ2hpbGQiLCJkZWNvSW5kZXgiLCJyZXN0Tm9kZSIsInBhcmVudEluZGV4Iiwid2lkZ2V0cyIsImN1dEF0Iiwib2xkQ1NTIiwibGlzdFN0eWxlIiwiY2hpbGRTdGFydCIsInNlbGVjdGlvbkZyb21ET00iLCJvcmlnaW4iLCJpbldpZGdldCIsIm5lYXJlc3REZXNjTm9kZSIsInNlbGVjdGlvbkJldHdlZW4iLCJlZGl0b3JPd25zU2VsZWN0aW9uIiwiZWRpdGFibGUiLCJoYXNGb2N1cyIsImhhc1NlbGVjdGlvbiIsInNlbGVjdGlvblRvRE9NIiwic3luY05vZGVTZWxlY3Rpb24iLCJtb3VzZURvd24iLCJhbGxvd0RlZmF1bHQiLCJjdXJTZWwiLCJkb21PYnNlcnZlciIsImN1cnJlbnRTZWxlY3Rpb24iLCJkZWxheWVkU2VsZWN0aW9uU3luYyIsInNldEN1clNlbGVjdGlvbiIsImRpc2Nvbm5lY3RTZWxlY3Rpb24iLCJjdXJzb3JXcmFwcGVyIiwic2VsZWN0Q3Vyc29yV3JhcHBlciIsInJlc2V0RWRpdGFibGVGcm9tIiwicmVzZXRFZGl0YWJsZVRvIiwiYnJva2VuU2VsZWN0QmV0d2VlblVuZWRpdGFibGUiLCJ0ZW1wb3JhcmlseUVkaXRhYmxlTmVhciIsInJlc2V0RWRpdGFibGUiLCJyZW1vdmVDbGFzc09uU2VsZWN0aW9uQ2hhbmdlIiwiY29ubmVjdFNlbGVjdGlvbiIsInNldEVkaXRhYmxlIiwid2FzRHJhZ2dhYmxlIiwiaGlkZVNlbGVjdGlvbkd1YXJkIiwiaW1nIiwibGFzdFNlbGVjdGVkVmlld0Rlc2MiLCJjbGVhck5vZGVTZWxlY3Rpb24iLCJoYXNGb2N1c0FuZFNlbGVjdGlvbiIsImFuY2hvckluUmlnaHRQbGFjZSIsIm1vdmVTZWxlY3Rpb25CbG9jayIsIiRzaWRlIiwiZGlzcGF0Y2giLCJzZWxlY3RIb3Jpem9udGFsbHkiLCJtb2RzIiwibm9kZVBvcyIsIm5vZGVMZW4iLCJpc0lnbm9yYWJsZSIsInNraXBJZ25vcmVkTm9kZXNMZWZ0IiwibW92ZU5vZGUiLCJtb3ZlT2Zmc2V0IiwiaXNCbG9ja05vZGUiLCJzZXRTZWxGb2N1cyIsInNraXBJZ25vcmVkTm9kZXNSaWdodCIsInNlbGVjdFZlcnRpY2FsbHkiLCJiZXlvbmQiLCJzdG9wTmF0aXZlSG9yaXpvbnRhbERlbGV0ZSIsIm5leHROb2RlIiwic3dpdGNoRWRpdGFibGUiLCJzYWZhcmlEb3duQXJyb3dCdWciLCJnZXRNb2RzIiwiY3RybEtleSIsIm1ldGFLZXkiLCJhbHRLZXkiLCJzaGlmdEtleSIsImNhcHR1cmVLZXlEb3duIiwic2VyaWFsaXplRm9yQ2xpcGJvYXJkIiwic2VyaWFsaXplciIsImRldGFjaGVkRG9jIiwid3JhcE1hcCIsIndyYXBwZXIiLCJwYXJzZUZyb21DbGlwYm9hcmQiLCJwbGFpblRleHQiLCJpbkNvZGUiLCJhc1RleHQiLCJyZWFkSFRNTCIsInJlc3RvcmVSZXBsYWNlZFNwYWNlcyIsImNvbnRleHROb2RlIiwic2xpY2VEYXRhIiwiaW5saW5lUGFyZW50cyIsImFkZENvbnRleHQiLCJjbG9zZVNsaWNlIiwibm9ybWFsaXplU2libGluZ3MiLCJsYXN0V3JhcCIsImluTGFzdCIsImFkZFRvU2libGluZyIsImNsb3NlUmlnaHQiLCJ3cmFwcGVkIiwid2l0aFdyYXBwZXJzIiwic2libGluZyIsImNsb3NlUmFuZ2UiLCJjb2xncm91cCIsImNvbCIsInRoIiwiX2RldGFjaGVkRG9jIiwiaW1wbGVtZW50YXRpb24iLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJtZXRhcyIsImZpcnN0VGFnIiwiaW5uZXJIVE1MIiwiaGFuZGxlcnMiLCJlZGl0SGFuZGxlcnMiLCJwYXNzaXZlSGFuZGxlcnMiLCJ0b3VjaHN0YXJ0IiwidG91Y2htb3ZlIiwiSW5wdXRTdGF0ZSIsImxhc3RLZXlDb2RlIiwibGFzdEtleUNvZGVUaW1lIiwibGFzdENsaWNrIiwibGFzdFNlbGVjdGlvbk9yaWdpbiIsImxhc3RTZWxlY3Rpb25UaW1lIiwibGFzdElPU0VudGVyIiwibGFzdElPU0VudGVyRmFsbGJhY2tUaW1lb3V0IiwibGFzdEZvY3VzIiwibGFzdFRvdWNoIiwibGFzdEFuZHJvaWREZWxldGUiLCJjb21wb3NpbmdUaW1lb3V0IiwiY29tcG9zaXRpb25FbmRlZEF0IiwiZG9tQ2hhbmdlQ291bnQiLCJldmVudEhhbmRsZXJzIiwiaW5pdElucHV0IiwiaGFuZGxlciIsImV2ZW50QmVsb25nc1RvVmlldyIsInJ1bkN1c3RvbUhhbmRsZXIiLCJlbnN1cmVMaXN0ZW5lcnMiLCJzZXRTZWxlY3Rpb25PcmlnaW4iLCJkZXN0cm95SW5wdXQiLCJjdXJyZW50SGFuZGxlcnMiLCJkZWZhdWx0UHJldmVudGVkIiwiYnViYmxlcyIsImRpc3BhdGNoRXZlbnQiLCJrZXlkb3duIiwiX2V2ZW50IiwiaW5Pck5lYXJDb21wb3NpdGlvbiIsImZvcmNlRmx1c2giLCJrZXl1cCIsImtleXByZXNzIiwiY2hhckNvZGUiLCJldmVudENvb3JkcyIsImlzTmVhciIsImNsaWNrIiwicnVuSGFuZGxlck9uQ29udGV4dCIsInVwZGF0ZVNlbGVjdGlvbiIsInNlbGVjdENsaWNrZWRMZWFmIiwic2VsZWN0Q2xpY2tlZE5vZGUiLCJzZWxlY3RlZE5vZGUiLCJzZWxlY3RBdCIsImhhbmRsZVNpbmdsZUNsaWNrIiwiaGFuZGxlVHJpcGxlQ2xpY2siLCJkZWZhdWx0VHJpcGxlQ2xpY2siLCJmb3JjZURPTUZsdXNoIiwiZW5kQ29tcG9zaXRpb24iLCJzZWxlY3ROb2RlTW9kaWZpZXIiLCJtb3VzZWRvd24iLCJmbHVzaGVkIiwiTW91c2VEb3duIiwibWlnaHREcmFnIiwic3RhcnREb2MiLCJ0YXJnZXRQb3MiLCJhZGRBdHRyIiwic2V0VW5lZGl0YWJsZSIsInVwZGF0ZUFsbG93RGVmYXVsdCIsImNvbnRleHRtZW51IiwidGltZVN0YW1wIiwidGltZW91dENvbXBvc2l0aW9uIiwiY29tcG9zaXRpb25zdGFydCIsImNvbXBvc2l0aW9udXBkYXRlIiwibWFya0N1cnNvciIsInNjaGVkdWxlQ29tcG9zZUVuZCIsImNvbXBvc2l0aW9uZW5kIiwiZGVsYXkiLCJjbGVhckNvbXBvc2l0aW9uIiwidGltZXN0YW1wRnJvbUN1c3RvbUV2ZW50IiwiZmx1c2hpbmdTb29uIiwiY2FwdHVyZUNvcHkiLCJzZWxlY3ROb2RlQ29udGVudHMiLCJicm9rZW5DbGlwYm9hcmRBUEkiLCJjbGVhckRhdGEiLCJzbGljZVNpbmdsZU5vZGUiLCJjYXB0dXJlUGFzdGUiLCJkb1Bhc3RlIiwicHJlZmVyUGxhaW4iLCJzaW5nbGVOb2RlIiwicGFzdGUiLCJnZXREYXRhIiwiRHJhZ2dpbmciLCJkcmFnQ29weU1vZGlmaWVyIiwiZHJhZ3N0YXJ0IiwiZWZmZWN0QWxsb3dlZCIsImRyYWdnaW5nIiwiZHJhZ2VuZCIsImRyYWdvdmVyIiwiZHJhZ2VudGVyIiwiZHJvcCIsImV2ZW50UG9zIiwiJG1vdXNlIiwiYmVmb3JlSW5zZXJ0IiwicmVsYXRlZFRhcmdldCIsImJlZm9yZWlucHV0IiwiaW5wdXRUeXBlIiwiZmx1c2hTb29uIiwiY29tcGFyZU9ianMiLCJXaWRnZXRUeXBlIiwibm9TcGVjIiwib2xkT2Zmc2V0IiwiRGVjb3JhdGlvbiIsInZhbGlkIiwiSW5saW5lVHlwZSIsImluY2x1c2l2ZVN0YXJ0IiwiaW5jbHVzaXZlRW5kIiwiRGVjb3JhdGlvblNldCIsImxvY2FsIiwiZGVjb3JhdGlvbnMiLCJidWlsZFRyZWUiLCJmaW5kSW5uZXIiLCJjaGlsZE9mZiIsIm1hcElubmVyIiwibmV3TG9jYWwiLCJtYXBDaGlsZHJlbiIsImJ5UG9zIiwiYWRkSW5uZXIiLCJjaGlsZE5vZGUiLCJjaGlsZE9mZnNldCIsImJhc2VPZmZzZXQiLCJ0YWtlU3BhbnNGb3JOb2RlIiwibW92ZVNwYW5zIiwid2l0aG91dE51bGxzIiwicmVtb3ZlSW5uZXIiLCJkZWMiLCJsb2NhbFNldCIsIkRlY29yYXRpb25Hcm91cCIsInJlbW92ZU92ZXJsYXAiLCJsb2NhbHNJbm5lciIsIm1lbWJlcnMiLCJtYXBwZWREZWNvcyIsIm1lbWJlciIsInNvcnRlZCIsIm9sZENoaWxkcmVuIiwibW92ZWQiLCJvbGRFbmQiLCJuZXdFbmQiLCJkU2l6ZSIsIm11c3RSZWJ1aWxkIiwiZnJvbUxvY2FsIiwidG9Mb2NhbCIsIm1hcEFuZEdhdGhlclJlbWFpbmluZ0RlY29yYXRpb25zIiwic3BhbnMiLCJnYXRoZXIiLCJoYXNOdWxscyIsImxvY2FsU3RhcnQiLCJzdWJ0cmVlIiwid29ya2luZyIsImluc2VydEFoZWFkIiwidmlld0RlY29yYXRpb25zIiwib2JzZXJ2ZU9wdGlvbnMiLCJjaGlsZExpc3QiLCJjaGFyYWN0ZXJEYXRhIiwiY2hhcmFjdGVyRGF0YU9sZFZhbHVlIiwiYXR0cmlidXRlT2xkVmFsdWUiLCJ1c2VDaGFyRGF0YSIsIlNlbGVjdGlvblN0YXRlIiwiRE9NT2JzZXJ2ZXIiLCJoYW5kbGVET01DaGFuZ2UiLCJxdWV1ZSIsIm9ic2VydmVyIiwib25DaGFyRGF0YSIsInN1cHByZXNzaW5nU2VsZWN0aW9uVXBkYXRlcyIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJyZW1vdmVkTm9kZXMiLCJwcmV2VmFsdWUiLCJvblNlbGVjdGlvbkNoYW5nZSIsInRha2VSZWNvcmRzIiwib2JzZXJ2ZSIsInRha2UiLCJkaXNjb25uZWN0Iiwic3VwcHJlc3NTZWxlY3Rpb25VcGRhdGVzIiwiaWdub3JlU2VsZWN0aW9uQ2hhbmdlIiwiYW5jZXN0b3JzIiwibmV3U2VsIiwidHlwZU92ZXIiLCJyZWdpc3Rlck11dGF0aW9uIiwiYnJzIiwicmVhZFNlbCIsInNjcm9sbFRvU2VsZWN0aW9uIiwiY2hlY2tDU1MiLCJhdHRyaWJ1dGVOYW1lIiwiYWRkZWROb2RlcyIsImNzc0NoZWNrZWQiLCJXZWFrTWFwIiwiY3NzQ2hlY2tXYXJuZWQiLCJzYWZhcmlTaGFkb3dTZWxlY3Rpb25SYW5nZSIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsImdldFRhcmdldFJhbmdlcyIsImV4ZWNDb21tYW5kIiwiZW5kQ29udGFpbmVyIiwiZW5kT2Zmc2V0IiwiY3VycmVudEFuY2hvciIsImRvbUF0UG9zIiwicGFyc2VCZXR3ZWVuIiwiZnJvbV8iLCJ0b18iLCJyZWFkRE9NQ2hhbmdlIiwic2hhcmVkIiwicHJlZmVycmVkUG9zIiwicHJlZmVycmVkU2lkZSIsImNoYW5nZSIsImZpbmREaWZmIiwiZW5kQSIsImVuZEIiLCJyZXNvbHZlU2VsZWN0aW9uIiwiJGZyb21BIiwiaW5saW5lQ2hhbmdlIiwibmV4dFNlbCIsImxvb2tzTGlrZUpvaW4iLCJjaEZyb20iLCJjaFRvIiwibWFya0NoYW5nZSIsImlzTWFya0NoYW5nZSIsInBhcnNlZFNlbCIsImN1ck1hcmtzIiwicHJldk1hcmtzIiwib2xkIiwiJG5ld1N0YXJ0IiwiJG5ld0VuZCIsInNraXBDbG9zaW5nQW5kT3BlbmluZyIsIiRuZXh0IiwiZnJvbUVuZCIsIm1heU9wZW4iLCJhZGp1c3QiLCJFZGl0b3JWaWV3IiwibW91bnRlZCIsInByZXZEaXJlY3RQbHVnaW5zIiwicGx1Z2luVmlld3MiLCJkaXJlY3RQbHVnaW5zIiwiY2hlY2tTdGF0ZUNvbXBvbmVudCIsIm1vdW50IiwiZ2V0RWRpdGFibGUiLCJ1cGRhdGVDdXJzb3JXcmFwcGVyIiwiYnVpbGROb2RlVmlld3MiLCJjb21wdXRlRG9jRGVjbyIsInVwZGF0ZVBsdWdpblZpZXdzIiwiaGFuZGxlRE9NRXZlbnRzIiwicHJldlByb3BzIiwidXBkYXRlU3RhdGVJbm5lciIsInNldFByb3BzIiwicmVkcmF3IiwidXBkYXRlU2VsIiwicGx1Z2luc0NoYW5nZWQiLCJjaGFuZ2VkTm9kZVZpZXdzIiwidXBkYXRlRG9jIiwib2xkU2Nyb2xsUG9zIiwib3ZlcmZsb3dBbmNob3IiLCJmb3JjZVNlbFVwZGF0ZSIsInNlbGVjdGlvbkNvbnRleHRDaGFuZ2VkIiwiY2hyb21lS2x1ZGdlIiwiZGVzdHJveVBsdWdpblZpZXdzIiwicHJldlN0YXRlIiwicGx1Z2luVmlldyIsInBhcmVudEVsZW1lbnQiLCJwb3NBdERPTSIsInBhc3RlSFRNTCIsIkNsaXBib2FyZEV2ZW50IiwicGFzdGVUZXh0IiwiZGlzcGF0Y2hUcmFuc2FjdGlvbiIsImNvbnRlbnRlZGl0YWJsZSIsInNlbDEiLCJzZWwyIiwibkEiLCJuQiIsImJyb2tlbk1vZGlmaWVyTmFtZXMiLCJrZXlOYW1lIiwiaWdub3JlS2V5Iiwibm9ybWFsaXplS2V5TmFtZSIsImN0cmwiLCJub3JtYWxpemUiLCJrZXltYXAiLCJiaW5kaW5ncyIsImhhbmRsZUtleURvd24iLCJrZXlkb3duSGFuZGxlciIsImJhc2VOYW1lIiwiZGlyZWN0Iiwibm9TaGlmdCIsImZyb21Db2RlIiwiYXRCbG9ja1N0YXJ0Iiwiam9pbkJhY2t3YXJkIiwiJGN1dCIsImZpbmRDdXRCZWZvcmUiLCJkZWxldGVCYXJyaWVyIiwidGV4dGJsb2NrQXQiLCJkZWxTdGVwIiwib25seSIsInNlbGVjdE5vZGVCYWNrd2FyZCIsImF0QmxvY2tFbmQiLCJqb2luRm9yd2FyZCIsImZpbmRDdXRBZnRlciIsInNlbGVjdE5vZGVGb3J3YXJkIiwiam9pblVwIiwibm9kZVNlbCIsImpvaW5Eb3duIiwibmV3bGluZUluQ29kZSIsImRlZmF1bHRCbG9ja0F0IiwiZXhpdENvZGUiLCJhYm92ZSIsImNyZWF0ZVBhcmFncmFwaE5lYXIiLCJsaWZ0RW1wdHlCbG9jayIsInNlbGVjdFBhcmVudE5vZGUiLCJqb2luTWF5YmVDbGVhciIsImNvbm4iLCJjYW5EZWxBZnRlciIsImpvaW5BdCIsInNlbEFmdGVyIiwiYWZ0ZXJUZXh0IiwiYWZ0ZXJEZXB0aCIsInNlbGVjdFRleHRibG9ja1NpZGUiLCJzZWxlY3RUZXh0YmxvY2tTdGFydCIsInNlbGVjdFRleHRibG9ja0VuZCIsIndyYXBJbiIsImFwcGxpY2FibGUiLCJvcyIsIndyYXBJbkxpc3QiLCJsaXN0VHlwZSIsImRvSm9pbiIsIm91dGVyUmFuZ2UiLCIkaW5zZXJ0IiwiZG9XcmFwSW5MaXN0Iiwiam9pbkJlZm9yZSIsInNwbGl0RGVwdGgiLCJzcGxpdFBvcyIsImxpZnRMaXN0SXRlbSIsIml0ZW1UeXBlIiwibGlmdFRvT3V0ZXJMaXN0IiwibGlmdE91dE9mTGlzdCIsImVuZE9mTGlzdCIsImluZGV4QmVmb3JlIiwic2lua0xpc3RJdGVtIiwibmVzdGVkQmVmb3JlIiwiY3JlYXRlQ2hhaW5hYmxlU3RhdGUiLCJ0cmFuc2FjdGlvbiIsIkNoYXJhY3RlckNvdW50IiwiRXh0ZW5zaW9uIiwiYWRkT3B0aW9ucyIsImxpbWl0IiwibW9kZSIsImFkZFN0b3JhZ2UiLCJjaGFyYWN0ZXJzIiwid29yZHMiLCJvbkJlZm9yZUNyZWF0ZSIsInN0b3JhZ2UiLCJlZGl0b3IiLCJ3b3JkIiwiYWRkUHJvc2VNaXJyb3JQbHVnaW5zIiwiaXNQYXN0ZSIsIm92ZXIiLCJ1cGRhdGVkU2l6ZSIsImlucHV0UmVnZXgiLCJhbGxvd0Jhc2U2NCIsIkhUTUxBdHRyaWJ1dGVzIiwiYWRkQXR0cmlidXRlcyIsInBhcnNlSFRNTCIsInJlbmRlckhUTUwiLCJtZXJnZUF0dHJpYnV0ZXMiLCJhZGRDb21tYW5kcyIsInNldEltYWdlIiwiY29tbWFuZHMiLCJpbnNlcnRDb250ZW50IiwiYWRkSW5wdXRSdWxlcyIsIm5vZGVJbnB1dFJ1bGUiLCJnZXRBdHRyaWJ1dGVzIiwiZW5jb2RlZFRsZHMiLCJlbmNvZGVkVXRsZHMiLCJhc2NpaSIsImFzY2lpbnVtZXJpYyIsImFscGhhbnVtZXJpYyIsImRvbWFpbiIsImVtb2ppIiwic2NoZW1lIiwic2xhc2hzY2hlbWUiLCJyZWdpc3Rlckdyb3VwIiwiYWRkVG9Hcm91cHMiLCJmbGFnc0ZvclRva2VuIiwiU3RhdGUiLCJqciIsImpkIiwiYWNjZXB0cyIsImdvIiwibmV4dFN0YXRlIiwiZXhhY3RPbmx5IiwidGEiLCJpbnB1dHMiLCJyZWdleHAiLCJ0cyIsInRlbXBsYXRlU3RhdGUiLCJhbGxGbGFncyIsIldPUkQiLCJVV09SRCIsIkxPQ0FMSE9TVCIsIlRMRCIsIlVUTEQiLCJTQ0hFTUUiLCJTTEFTSF9TQ0hFTUUiLCJOVU0iLCJXUyIsIk5MJDEiLCJPUEVOQlJBQ0UiLCJPUEVOQlJBQ0tFVCIsIk9QRU5BTkdMRUJSQUNLRVQiLCJPUEVOUEFSRU4iLCJDTE9TRUJSQUNFIiwiQ0xPU0VCUkFDS0VUIiwiQ0xPU0VBTkdMRUJSQUNLRVQiLCJDTE9TRVBBUkVOIiwiQU1QRVJTQU5EIiwiQVBPU1RST1BIRSIsIkFTVEVSSVNLIiwiQVQiLCJCQUNLU0xBU0giLCJCQUNLVElDSyIsIkNBUkVUIiwiQ09MT04iLCJDT01NQSIsIkRPTExBUiIsIkRPVCIsIkVRVUFMUyIsIkVYQ0xBTUFUSU9OIiwiSFlQSEVOIiwiUEVSQ0VOVCIsIlBJUEUiLCJQT1VORCIsIlFVRVJZIiwiUVVPVEUiLCJTRU1JIiwiU0xBU0giLCJUSUxERSIsIlVOREVSU0NPUkUiLCJFTU9KSSQxIiwiU1lNIiwidGsiLCJmcmVlemUiLCJOTCIsIkVNT0pJIiwiQVNDSUlfTEVUVEVSIiwiTEVUVEVSIiwiRElHSVQiLCJFTU9KSV9WQVJJQVRJT04iLCJFTU9KSV9KT0lORVIiLCJ0bGRzIiwidXRsZHMiLCJpbml0JDIiLCJjdXN0b21TY2hlbWVzIiwiU3RhcnQiLCJkZWNvZGVUbGRzIiwiTnVtIiwiV29yZCIsIlVXb3JkIiwiV3MiLCJFbW9qaSIsIkVtb2ppSm9pbmVyIiwid29yZGpyIiwidXdvcmRqciIsImZhc3R0cyIsInRsZCIsInV0bGQiLCJzY2giLCJvcHRpb25hbFNsYXNoU2xhc2giLCJydW4kMSIsInN0cmluZ1RvQXJyYXkiLCJjaGFyQ291bnQiLCJjdXJzb3IiLCJjaGFyQ3Vyc29yIiwidG9rZW5MZW5ndGgiLCJsYXRlc3RBY2NlcHRpbmciLCJzaW5jZUFjY2VwdHMiLCJjaGFyc1NpbmNlQWNjZXB0cyIsImRlZmF1bHR0IiwiZW5jb2RlZCIsImRpZ2l0cyIsInBvcERpZ2l0Q291bnQiLCJwb3BDb3VudCIsImRlZmF1bHRQcm90b2NvbCIsImZvcm1hdEhyZWYiLCJubDJiciIsInJlbCIsInRydW5jYXRlIiwiSW5maW5pdHkiLCJPcHRpb25zIiwiZGVmYXVsdFJlbmRlciIsImlnbm9yZWRUYWdzIiwidXBwZXJjYXNlSWdub3JlZFRhZ3MiLCJpciIsIm9wZXJhdG9yIiwiaXNDYWxsYWJsZSIsImdldE9iaiIsInJlbmRlckZuIiwiTXVsdGlUb2tlbiIsImlzTGluayIsInRvSHJlZiIsInRvRm9ybWF0dGVkU3RyaW5nIiwiZm9ybWF0dGVkIiwidG9Gb3JtYXR0ZWRIcmVmIiwicHJvdG9jb2wiLCJ0b0Zvcm1hdHRlZE9iamVjdCIsImZvcm1hdHRlZEhyZWYiLCJjcmVhdGVUb2tlbkNsYXNzIiwiVG9rZW4iLCJFbWFpbCIsIk5sIiwiVXJsIiwiaGFzUHJvdG9jb2wiLCJtYWtlU3RhdGUiLCJpbml0JDEiLCJxc0FjY2VwdGluZyIsInFzTm9uQWNjZXB0aW5nIiwibG9jYWxwYXJ0QWNjZXB0aW5nIiwiTG9jYWxwYXJ0IiwiRG9tYWluIiwiU2NoZW1lIiwiU2xhc2hTY2hlbWUiLCJMb2NhbHBhcnRBdCIsIkxvY2FscGFydERvdCIsIkVtYWlsRG9tYWluIiwiRW1haWxEb21haW5Eb3QiLCJFbWFpbCQxIiwiRW1haWxEb21haW5IeXBoZW4iLCJFbWFpbENvbG9uIiwiRG9tYWluSHlwaGVuIiwiRG9tYWluRG90IiwiRG9tYWluRG90VGxkIiwiRG9tYWluRG90VGxkQ29sb24iLCJEb21haW5Eb3RUbGRDb2xvblBvcnQiLCJVcmwkMSIsIlVybE5vbmFjY2VwdCIsIlNjaGVtZUNvbG9uIiwiU2xhc2hTY2hlbWVDb2xvbiIsIlNsYXNoU2NoZW1lQ29sb25TbGFzaCIsIlVyaVByZWZpeCIsIlVybE9wZW5icmFjZSIsIlVybE9wZW5icmFja2V0IiwiVXJsT3BlbmFuZ2xlYnJhY2tldCIsIlVybE9wZW5wYXJlbiIsIlVybE9wZW5icmFjZVEiLCJVcmxPcGVuYnJhY2tldFEiLCJVcmxPcGVuYW5nbGVicmFja2V0USIsIlVybE9wZW5wYXJlblEiLCJVcmxPcGVuYnJhY2VTeW1zIiwiVXJsT3BlbmJyYWNrZXRTeW1zIiwiVXJsT3BlbmFuZ2xlYnJhY2tldFN5bXMiLCJVcmxPcGVucGFyZW5TeW1zIiwibXVsdGlzIiwidGV4dFRva2VucyIsInNlY29uZFN0YXRlIiwibXVsdGlMZW5ndGgiLCJpbml0TXVsdGlUb2tlbiIsIk11bHRpIiwic3VidG9rZW5zIiwic3RhcnRJZHgiLCJlbmRJZHgiLCJ3YXJuQWR2aWNlIiwiSU5JVCIsInNjYW5uZXIiLCJ0b2tlblF1ZXVlIiwicGx1Z2luUXVldWUiLCJpbml0aWFsaXplZCIsInJlZ2lzdGVyQ3VzdG9tUHJvdG9jb2wiLCJ0b2tlbml6ZSIsImZpbHRlcmVkIiwiYXV0b2xpbmsiLCJkb2NDaGFuZ2VzIiwicHJldmVudEF1dG9saW5rIiwiY29tYmluZVRyYW5zYWN0aW9uU3RlcHMiLCJjaGFuZ2VzIiwiZ2V0Q2hhbmdlZFJhbmdlcyIsIm5ld1JhbmdlIiwibm9kZXNJbkNoYW5nZWRSYW5nZXMiLCJmaW5kQ2hpbGRyZW5JblJhbmdlIiwidGV4dEJsb2NrIiwidGV4dEJlZm9yZVdoaXRlc3BhY2UiLCJlbmRzV2l0aCIsIndvcmRzQmVmb3JlV2hpdGVzcGFjZSIsImxhc3RXb3JkQmVmb3JlU3BhY2UiLCJsYXN0V29yZEFuZEJsb2NrT2Zmc2V0IiwibGluayIsImdldE1hcmtzQmV0d2VlbiIsInJlYWRGcm9tQ2FjaGUiLCJhZGRUb0NhY2hlIiwiY2FjaGVTaXplIiwiY2FjaGVQb3MiLCJUYWJsZU1hcCIsInByb2JsZW1zIiwiZmluZENlbGwiLCJjb2xDb3VudCIsIm5leHRDZWxsIiwicmVjdEJldHdlZW4iLCJsZWZ0QSIsInJpZ2h0QSIsInRvcEEiLCJib3R0b21BIiwibGVmdEIiLCJyaWdodEIiLCJ0b3BCIiwiYm90dG9tQiIsImNlbGxzSW5SZWN0Iiwicm93IiwicG9zaXRpb25BdCIsInJvd1N0YXJ0Iiwicm93RW5kIiwicm93RW5kSW5kZXgiLCJjb21wdXRlTWFwIiwidGFibGVSb2xlIiwiZmluZFdpZHRoIiwibWFwUG9zIiwiY29sV2lkdGhzIiwicm93Tm9kZSIsImNlbGxOb2RlIiwiY29sc3BhbiIsInJvd3NwYW4iLCJjb2x3aWR0aCIsImNvbFciLCJ3aWR0aEluZGV4IiwiZXhwZWN0ZWRQb3MiLCJtaXNzaW5nIiwidGFibGVNYXAiLCJiYWRXaWR0aHMiLCJmaW5kQmFkQ29sV2lkdGhzIiwiaGFzUm93U3BhbiIsInJvd1dpZHRoIiwicHJldlJvdyIsImNlbGwiLCJjb2xXaWR0aCIsImZyZXNoQ29sV2lkdGgiLCJ0YWJsZU5vZGVUeXBlcyIsInRhYmxlRWRpdGluZ0tleSIsImNlbGxBcm91bmQiLCJjZWxsV3JhcHBpbmciLCJpc0luVGFibGUiLCJzZWxlY3Rpb25DZWxsIiwiJGFuY2hvckNlbGwiLCIkaGVhZENlbGwiLCIkY2VsbCIsImNlbGxOZWFyIiwicG9pbnRzQXRDZWxsIiwibW92ZUNlbGxGb3J3YXJkIiwiaW5TYW1lVGFibGUiLCIkY2VsbEEiLCIkY2VsbEIiLCJ0YWJsZVN0YXJ0IiwicmVtb3ZlQ29sU3BhbiIsImFkZENvbFNwYW4iLCJjb2x1bW5Jc0hlYWRlciIsImhlYWRlckNlbGwiLCJoZWFkZXJfY2VsbCIsIkNlbGxTZWxlY3Rpb24iLCJjZWxscyIsInRhYmxlQ2hhbmdlZCIsImlzUm93U2VsZWN0aW9uIiwicm93U2VsZWN0aW9uIiwiaXNDb2xTZWxlY3Rpb24iLCJjb2xTZWxlY3Rpb24iLCJyb3dzIiwicm93Q29udGVudCIsImNlbGxSZWN0IiwiZXh0cmFMZWZ0IiwiZXh0cmFSaWdodCIsImZvckVhY2hDZWxsIiwiYW5jaG9yVG9wIiwiaGVhZFRvcCIsImFuY2hvckJvdHRvbSIsImhlYWRCb3R0b20iLCJhbmNob3JSZWN0IiwiaGVhZFJlY3QiLCJhbmNob3JMZWZ0IiwiaGVhZExlZnQiLCJhbmNob3JSaWdodCIsImhlYWRSaWdodCIsImFuY2hvckNlbGwiLCJoZWFkQ2VsbCIsIkNlbGxCb29rbWFyayIsImRyYXdDZWxsU2VsZWN0aW9uIiwiaXNDZWxsQm91bmRhcnlTZWxlY3Rpb24iLCJhZnRlckZyb20iLCJiZWZvcmVUbyIsImlzVGV4dFNlbGVjdGlvbkFjcm9zc0NlbGxzIiwiZnJvbUNlbGxCb3VuZGFyeU5vZGUiLCJ0b0NlbGxCb3VuZGFyeU5vZGUiLCJub3JtYWxpemVTZWxlY3Rpb24iLCJhbGxvd1RhYmxlTm9kZVNlbGVjdGlvbiIsIk5vZGVTZWxlY3Rpb24yIiwibGFzdENlbGwiLCJmaXhUYWJsZXNLZXkiLCJQbHVnaW5LZXkyIiwiY2hhbmdlZERlc2NlbmRhbnRzIiwiY3VyU2l6ZSIsImZpeFRhYmxlcyIsImZpeFRhYmxlIiwidGFibGVQb3MiLCJtdXN0QWRkIiwicHJvYiIsInBhc3RlZENlbGxzIiwiZml0U2xpY2UiLCJTbGljZTIiLCJlbnN1cmVSZWN0YW5ndWxhciIsIndpZHRocyIsIkZyYWdtZW50MiIsImNsaXBDZWxscyIsIm5ld1dpZHRoIiwibmV3SGVpZ2h0IiwibmV3Um93cyIsImdyb3dUYWJsZSIsImVtcHR5SGVhZCIsInN0YXJ0MiIsImVtcHR5Um93IiwiaXNvbGF0ZUhvcml6b250YWwiLCJjZWxsVG9wIiwiY2VsbExlZnQiLCJpc29sYXRlVmVydGljYWwiLCJ1cGRhdGVQb3MiLCJpbnNlcnRDZWxscyIsInJlY29tcCIsIkFycm93TGVmdCIsIkFycm93UmlnaHQiLCJBcnJvd1VwIiwiQXJyb3dEb3duIiwic2hpZnRBcnJvdyIsIkJhY2tzcGFjZSIsImRlbGV0ZUNlbGxTZWxlY3Rpb24iLCJEZWxldGUiLCJtYXliZVNldFNlbGVjdGlvbiIsIlNlbGVjdGlvbjIiLCJhdEVuZE9mQ2VsbCIsImNlbGxTZWwiLCJiYXNlQ29udGVudCIsIlNsaWNlMyIsImhhbmRsZVBhc3RlIiwiRnJhZ21lbnQzIiwiaGFuZGxlTW91c2VEb3duIiwic3RhcnRFdmVudCIsIl9hIiwic3RhcnRET01DZWxsIiwiZG9tSW5DZWxsIiwic2V0Q2VsbFNlbGVjdGlvbiIsImNlbGxVbmRlck1vdXNlIiwiJGFuY2hvcjIiLCJzdGFydGluZyIsIlRleHRTZWxlY3Rpb24yIiwiY2VsbFBvcyIsImRpclN0ciIsIm1vdXNlUG9zIiwiVGFibGVWaWV3IiwiY2VsbE1pbldpZHRoIiwidXBkYXRlQ29sdW1uc09uUmVzaXplIiwicmVjb3JkIiwib3ZlcnJpZGVDb2wiLCJvdmVycmlkZVZhbHVlIiwidG90YWxXaWR0aCIsImZpeGVkV2lkdGgiLCJoYXNXaWR0aCIsImNzc1dpZHRoIiwiY29sdW1uUmVzaXppbmdQbHVnaW5LZXkiLCJQbHVnaW5LZXkzIiwiY29sdW1uUmVzaXppbmciLCJoYW5kbGVXaWR0aCIsIlZpZXciLCJsYXN0Q29sdW1uUmVzaXphYmxlIiwiUmVzaXplU3RhdGUiLCJwbHVnaW5TdGF0ZSIsImFjdGl2ZUhhbmRsZSIsIm1vdXNlbW92ZSIsImhhbmRsZU1vdXNlTW92ZSIsIm1vdXNlbGVhdmUiLCJoYW5kbGVNb3VzZURvd24yIiwiaGFuZGxlRGVjb3JhdGlvbnMiLCJhY3Rpb24iLCJzZXRIYW5kbGUiLCJzZXREcmFnZ2luZyIsImhhbmRsZSIsImRvbUNlbGxBcm91bmQiLCJlZGdlQ2VsbCIsInVwZGF0ZUhhbmRsZSIsImN1cnJlbnRDb2xXaWR0aCIsInN0YXJ0V2lkdGgiLCJldmVudDIiLCJwbHVnaW5TdGF0ZTIiLCJ1cGRhdGVDb2x1bW5XaWR0aCIsImRyYWdnZWRXaWR0aCIsImRyYWdnZWQiLCJkaXNwbGF5Q29sdW1uV2lkdGgiLCJkb21XaWR0aCIsIm1hcEluZGV4IiwiemVyb2VzIiwiRGVjb3JhdGlvblNldDIiLCJEZWNvcmF0aW9uMiIsInNlbGVjdGVkUmVjdCIsImFkZENvbHVtbiIsInJlZkNvbHVtbiIsImFkZENvbHVtbkJlZm9yZSIsImFkZENvbHVtbkFmdGVyIiwicmVtb3ZlQ29sdW1uIiwibWFwU3RhcnQiLCJkZWxldGVDb2x1bW4iLCJyb3dJc0hlYWRlciIsImFkZFJvdyIsInJvd1BvcyIsInJlZlJvdyIsImFkZFJvd0JlZm9yZSIsImFkZFJvd0FmdGVyIiwicmVtb3ZlUm93IiwibmV4dFJvdyIsIm5ld1BvcyIsImRlbGV0ZVJvdyIsImNlbGxzT3ZlcmxhcFJlY3RhbmdsZSIsImluZGV4VG9wIiwiaW5kZXhMZWZ0IiwiaW5kZXhCb3R0b20iLCJpbmRleFJpZ2h0IiwibWVyZ2VDZWxscyIsIkZyYWdtZW50NCIsIm1lcmdlZFBvcyIsIm1lcmdlZENlbGwiLCJzcGxpdENlbGwiLCJzcGxpdENlbGxXaXRoVHlwZSIsImdldENlbGxUeXBlIiwiYmFzZUF0dHJzIiwic2V0Q2VsbEF0dHIiLCJkZXByZWNhdGVkX3RvZ2dsZUhlYWRlciIsImlzSGVhZGVyRW5hYmxlZEJ5VHlwZSIsImNlbGxQb3NpdGlvbnMiLCJ0b2dnbGVIZWFkZXIiLCJ1c2VEZXByZWNhdGVkTG9naWMiLCJpc0hlYWRlclJvd0VuYWJsZWQiLCJpc0hlYWRlckNvbHVtbkVuYWJsZWQiLCJpc0hlYWRlckVuYWJsZWQiLCJzZWxlY3Rpb25TdGFydHNBdCIsImNlbGxzUmVjdCIsIm5ld1R5cGUiLCJyZWxhdGl2ZUNlbGxQb3MiLCJ0b2dnbGVIZWFkZXJDZWxsIiwiZmluZE5leHRDZWxsIiwiZ29Ub05leHRDZWxsIiwiVGV4dFNlbGVjdGlvbjMiLCJkZWxldGVUYWJsZSIsInRhYmxlRWRpdGluZyIsIlBsdWdpbjIiLCJjcmVhdGVTZWxlY3Rpb25CZXR3ZWVuIiwidXBkYXRlQ29sdW1ucyIsIlRhYmxlSGVhZGVyIiwiVGV4dEFsaWduIiwiYWxpZ25tZW50cyIsImRlZmF1bHRBbGlnbm1lbnQiLCJhZGRHbG9iYWxBdHRyaWJ1dGVzIiwic2V0VGV4dEFsaWduIiwiYWxpZ25tZW50IiwidXBkYXRlQXR0cmlidXRlcyIsInVuc2V0VGV4dEFsaWduIiwicmVzZXRBdHRyaWJ1dGVzIiwiYWRkS2V5Ym9hcmRTaG9ydGN1dHMiLCJNb2QtU2hpZnQtbCIsIk1vZC1TaGlmdC1lIiwiTW9kLVNoaWZ0LXIiLCJNb2QtU2hpZnQtaiIsImVtRGFzaCIsIm92ZXJyaWRlIiwidGV4dElucHV0UnVsZSIsImVsbGlwc2lzIiwib3BlbkRvdWJsZVF1b3RlIiwiY2xvc2VEb3VibGVRdW90ZSIsIm9wZW5TaW5nbGVRdW90ZSIsImNsb3NlU2luZ2xlUXVvdGUiLCJsZWZ0QXJyb3ciLCJyaWdodEFycm93IiwiY29weXJpZ2h0IiwidHJhZGVtYXJrIiwic2VydmljZW1hcmsiLCJyZWdpc3RlcmVkVHJhZGVtYXJrIiwib25lSGFsZiIsInBsdXNNaW51cyIsIm5vdEVxdWFsIiwibGFxdW8iLCJyYXF1byIsIm11bHRpcGxpY2F0aW9uIiwic3VwZXJzY3JpcHRUd28iLCJzdXBlcnNjcmlwdFRocmVlIiwib25lUXVhcnRlciIsInRocmVlUXVhcnRlcnMiLCJUeXBvZ3JhcGh5IiwiUG9ydGFscyIsInJlbmRlcmVycyIsInJlbmRlcmVyIiwicmVhY3RFbGVtZW50IiwiUHVyZUVkaXRvckNvbnRlbnQiLCJlZGl0b3JDb250ZW50UmVmIiwiY3JlYXRlTm9kZVZpZXdzIiwibWF5YmVGbHVzaFN5bmMiLCJzZXRSZW5kZXJlciIsInJlbW92ZVJlbmRlcmVyIiwibmV4dFJlbmRlcmVycyIsIm5ld0VsZW1lbnQiLCJFZGl0b3JDb250ZW50V2l0aEtleSIsInJhbmRvbSIsIkVkaXRvckNvbnRlbnQiLCJCbG9ja3F1b3RlIiwic2V0QmxvY2txdW90ZSIsInRvZ2dsZUJsb2NrcXVvdGUiLCJ0b2dnbGVXcmFwIiwidW5zZXRCbG9ja3F1b3RlIiwiTW9kLVNoaWZ0LWIiLCJ3cmFwcGluZ0lucHV0UnVsZSIsInN0YXJJbnB1dFJlZ2V4Iiwic3RhclBhc3RlUmVnZXgiLCJ1bmRlcnNjb3JlSW5wdXRSZWdleCIsInVuZGVyc2NvcmVQYXN0ZVJlZ2V4IiwiQm9sZCIsInNldEJvbGQiLCJzZXRNYXJrIiwidG9nZ2xlQm9sZCIsInRvZ2dsZU1hcmsiLCJ1bnNldEJvbGQiLCJ1bnNldE1hcmsiLCJNb2QtYiIsIk1vZC1CIiwibWFya0lucHV0UnVsZSIsImFkZFBhc3RlUnVsZXMiLCJtYXJrUGFzdGVSdWxlIiwiTGlzdEl0ZW0iLCJidWxsZXRMaXN0VHlwZU5hbWUiLCJvcmRlcmVkTGlzdFR5cGVOYW1lIiwiRW50ZXIiLCJzcGxpdExpc3RJdGVtIiwiU2hpZnQtVGFiIiwicGFzdGVSZWdleCIsIkNvZGUiLCJleGl0YWJsZSIsInNldENvZGUiLCJ0b2dnbGVDb2RlIiwidW5zZXRDb2RlIiwiTW9kLWUiLCJiYWNrdGlja0lucHV0UmVnZXgiLCJ0aWxkZUlucHV0UmVnZXgiLCJDb2RlQmxvY2siLCJsYW5ndWFnZUNsYXNzUHJlZml4IiwiZXhpdE9uVHJpcGxlRW50ZXIiLCJleGl0T25BcnJvd0Rvd24iLCJsYW5ndWFnZSIsImZpcnN0RWxlbWVudENoaWxkIiwibGFuZ3VhZ2VzIiwic3RhcnRzV2l0aCIsInNldENvZGVCbG9jayIsInNldE5vZGUiLCJ0b2dnbGVDb2RlQmxvY2siLCJ0b2dnbGVOb2RlIiwiTW9kLUFsdC1jIiwiaXNBdFN0YXJ0IiwiY2xlYXJOb2RlcyIsImlzQXRFbmQiLCJlbmRzV2l0aERvdWJsZU5ld2xpbmUiLCJjaGFpbiIsImNvbW1hbmQiLCJ0ZXh0YmxvY2tUeXBlSW5wdXRSdWxlIiwiaXNBY3RpdmUiLCJ2c2NvZGUiLCJ2c2NvZGVEYXRhIiwiRG9jdW1lbnQiLCJkcm9wQ3Vyc29yIiwiZWRpdG9yVmlldyIsIkRyb3BDdXJzb3JWaWV3IiwiY3Vyc29yUG9zIiwidGltZW91dCIsInNldEN1cnNvciIsInVwZGF0ZU92ZXJsYXkiLCJub2RlUmVjdCIsInRvZ2dsZSIsInBhcmVudExlZnQiLCJwYXJlbnRUb3AiLCJzY2hlZHVsZVJlbW92YWwiLCJkaXNhYmxlRHJvcEN1cnNvciIsImRyYWdsZWF2ZSIsIkRyb3BjdXJzb3IiLCJHYXBDdXJzb3IiLCJHYXBCb29rbWFyayIsImNsb3NlZEJlZm9yZSIsImNsb3NlZEFmdGVyIiwiYWxsb3dHYXBDdXJzb3IiLCJmaW5kR2FwQ3Vyc29yRnJvbSIsIm11c3RNb3ZlIiwiJGN1ciIsImdhcEN1cnNvciIsImRyYXdHYXBDdXJzb3IiLCJfdmlldyIsIiRmb3VuZCIsImNsaWNrUG9zIiwiR2FwY3Vyc29yIiwiZXh0ZW5kTm9kZVNjaGVtYSIsImV4dGVuc2lvbiIsImNhbGxPclJldHVybiIsImdldEV4dGVuc2lvbkZpZWxkIiwiSGFyZEJyZWFrIiwia2VlcE1hcmtzIiwicmVuZGVyVGV4dCIsInNldEhhcmRCcmVhayIsInNwbGl0dGFibGVNYXJrcyIsImV4dGVuc2lvbk1hbmFnZXIiLCJmaWx0ZXJlZE1hcmtzIiwiTW9kLUVudGVyIiwiU2hpZnQtRW50ZXIiLCJIZWFkaW5nIiwibGV2ZWxzIiwiaGFzTGV2ZWwiLCJzZXRIZWFkaW5nIiwidG9nZ2xlSGVhZGluZyIsIml0ZW1zIiwiR09PRF9MRUFGX1NJWkUiLCJSb3BlU2VxdWVuY2UiLCJsZWFmQXBwZW5kIiwibGVhZlByZXBlbmQiLCJhcHBlbmRJbm5lciIsIkFwcGVuZCIsInNsaWNlSW5uZXIiLCJnZXRJbm5lciIsImZvckVhY2hJbm5lciIsImZvckVhY2hJbnZlcnRlZElubmVyIiwiTGVhZiIsInByb3RvdHlwZUFjY2Vzc29ycyIsImxlZnRMZW4iLCJyb3BlU2VxdWVuY2UiLCJtYXhfZW1wdHlfaXRlbXMiLCJCcmFuY2giLCJldmVudENvdW50IiwicG9wRXZlbnQiLCJwcmVzZXJ2ZUl0ZW1zIiwicmVtYXAiLCJyZW1hcHBpbmciLCJhZGRBZnRlciIsIkl0ZW0iLCJhZGRUcmFuc2Zvcm0iLCJoaXN0T3B0aW9ucyIsIm9sZEl0ZW1zIiwibGFzdEl0ZW0iLCJERVBUSF9PVkVSRkxPVyIsImN1dE9mZkV2ZW50cyIsIm1pcnJvclBvcyIsIm1pcnJvck9mZnNldCIsImFkZE1hcHMiLCJyZWJhc2VkIiwicmViYXNlZFRyYW5zZm9ybSIsInJlYmFzZWRDb3VudCIsInJlYmFzZWRJdGVtcyIsIm5ld1VudGlsIiwiaVJlYmFzZWQiLCJuZXdNYXBzIiwiYnJhbmNoIiwiZW1wdHlJdGVtQ291bnQiLCJjb21wcmVzcyIsIm5ld0l0ZW0iLCJjdXRQb2ludCIsIkhpc3RvcnlTdGF0ZSIsInVuZG9uZSIsInByZXZSYW5nZXMiLCJwcmV2VGltZSIsImhpc3RvcnkiLCJoaXN0b3J5VHIiLCJoaXN0b3J5S2V5IiwiaGlzdG9yeVN0YXRlIiwiY2xvc2VIaXN0b3J5S2V5IiwiYXBwZW5kZWQiLCJyZWRvIiwibXVzdFByZXNlcnZlSXRlbXMiLCJyYW5nZXNGb3IiLCJuZXdHcm91cCIsIm5ld0dyb3VwRGVsYXkiLCJpc0FkamFjZW50VG8iLCJtYXBSYW5nZXMiLCJhZGphY2VudCIsImhpc3RUcmFuc2FjdGlvbiIsIm5ld0hpc3QiLCJjYWNoZWRQcmVzZXJ2ZUl0ZW1zIiwiY2FjaGVkUHJlc2VydmVJdGVtc1BsdWdpbnMiLCJoaXN0b3J5UHJlc2VydmVJdGVtcyIsImhpc3QiLCJ1bmRvIiwiSGlzdG9yeSIsIk1vZC16IiwiTW9kLVoiLCJNb2QteSIsIk1vZC1ZIiwiU2hpZnQtTW9kLXoiLCJTaGlmdC1Nb2QtWiIsIk1vZC3RjyIsIlNoaWZ0LU1vZC3RjyIsIkhvcml6b250YWxSdWxlIiwic2V0SG9yaXpvbnRhbFJ1bGUiLCIkb3JpZ2luVG8iLCJjdXJyZW50Q2hhaW4iLCJpbnNlcnRDb250ZW50QXQiLCJJdGFsaWMiLCJzZXRJdGFsaWMiLCJ0b2dnbGVJdGFsaWMiLCJ1bnNldEl0YWxpYyIsIk1vZC1pIiwiTW9kLUkiLCJQYXJhZ3JhcGgiLCJzZXRQYXJhZ3JhcGgiLCJNb2QtQWx0LTAiLCJTdHJpa2UiLCJzZXRTdHJpa2UiLCJ0b2dnbGVTdHJpa2UiLCJ1bnNldFN0cmlrZSIsInNob3J0Y3V0cyIsImlzTWFjT1MiLCJTdGFydGVyS2l0IiwiYWRkRXh0ZW5zaW9ucyIsImV4dGVuc2lvbnMiLCJjb25maWd1cmUiLCJfYiIsImJ1bGxldExpc3QiLCJCdWxsZXRMaXN0IiwiX2MiLCJfZCIsImNvZGVCbG9jayIsIl9mIiwiZHJvcGN1cnNvciIsIl9nIiwiZ2FwY3Vyc29yIiwiX2giLCJoYXJkQnJlYWsiLCJfaiIsImhlYWRpbmciLCJfayIsIl9sIiwiaG9yaXpvbnRhbFJ1bGUiLCJfbSIsIml0YWxpYyIsIl9vIiwibGlzdEl0ZW0iLCJfcCIsIm9yZGVyZWRMaXN0IiwiT3JkZXJlZExpc3QiLCJfcSIsInBhcmFncmFwaCIsIl9yIiwic3RyaWtlIiwiX3MiLCJFZGl0b3JXcmFwcGVyIiwiTWVudUJhcldyYXBwZXIiLCJ1c2VUaXB0YXBDb21tYW5kcyIsImNhbGxiYWNrIiwidG9nZ2xlQnVsbGV0TGlzdCIsInRvZ2dsZU9yZGVyZWRMaXN0IiwidW5zZXRMaW5rIiwidW5zZXRBbGxNYXJrcyIsIlN0eWxlZFRleHQiLCJNZW51QnV0dG9uIiwiRWRpdG9ySWNvbnMiLCJIZWFkaW5nU2VsZWN0IiwiaGVhZGluZ0xldmVscyIsIkltYWdlQnV0dG9uIiwiaW1hZ2UiLCJmaWxlSW5wdXQiLCJoYW5kbGVJbnB1dENoYW5nZSIsInJlYWRlciIsIkZpbGVSZWFkZXIiLCJyZWFkQXNEYXRhVVJMIiwib25sb2FkIiwiaGFuZGxlQnV0dG9uQ2xpY2siLCJNZW51QmFyIiwiUmljaFRleHRFZGl0b3IiLCJoYW5kbGVVcGRhdGUiLCJnZXRIVE1MIiwicmVzdE9wdGlvbnMiLCJ1c2VFZGl0b3IiLCJvcGVuT25DbGljayIsIm9uVXBkYXRlIiwiaW5qZWN0Q1NTIiwiZXZlbnRQcm9wVHlwZXMiLCJvbkFjdGl2YXRlIiwib25BZGRVbmRvIiwib25CZWZvcmVBZGRVbmRvIiwib25CZWZvcmVFeGVjQ29tbWFuZCIsIm9uQmVmb3JlR2V0Q29udGVudCIsIm9uQmVmb3JlUmVuZGVyVUkiLCJvbkJlZm9yZVNldENvbnRlbnQiLCJvbkJlZm9yZVBhc3RlIiwib25DbGVhclVuZG9zIiwib25Db250ZXh0TWVudSIsIm9uQ29tbWVudENoYW5nZSIsIm9uQ3V0Iiwib25EYmxjbGljayIsIm9uRGVhY3RpdmF0ZSIsIm9uRGlydHkiLCJvbkRyYWciLCJvbkRyYWdEcm9wIiwib25EcmFnRW5kIiwib25EcmFnR2VzdHVyZSIsIm9uRXhlY0NvbW1hbmQiLCJvbkZvY3VzSW4iLCJvbkZvY3VzT3V0Iiwib25HZXRDb250ZW50Iiwib25IaWRlIiwib25Jbml0Iiwib25LZXlQcmVzcyIsIm9uS2V5VXAiLCJvbkxvYWRDb250ZW50Iiwib25Nb3VzZURvd24iLCJvbk1vdXNlTW92ZSIsIm9uTW91c2VPdXQiLCJvbk1vdXNlT3ZlciIsIm9uTW91c2VVcCIsIm9uTm9kZUNoYW5nZSIsIm9uT2JqZWN0UmVzaXplU3RhcnQiLCJvbk9iamVjdFJlc2l6ZWQiLCJvbk9iamVjdFNlbGVjdGVkIiwib25QYXN0ZSIsIm9uUG9zdFByb2Nlc3MiLCJvblBvc3RSZW5kZXIiLCJvblByZVByb2Nlc3MiLCJvblByb2dyZXNzU3RhdGUiLCJvblJlZG8iLCJvblJlc2V0Iiwib25TYXZlQ29udGVudCIsIm9uU2V0QXR0cmliIiwib25TZXRDb250ZW50Iiwib25TaG93Iiwib25TdWJtaXQiLCJvblVuZG8iLCJvblZpc3VhbEFpZCIsIm9uU2tpbkxvYWRFcnJvciIsIm9uVGhlbWVMb2FkRXJyb3IiLCJvbk1vZGVsTG9hZEVycm9yIiwib25QbHVnaW5Mb2FkRXJyb3IiLCJvbkljb25zTG9hZEVycm9yIiwib25MYW5ndWFnZUxvYWRFcnJvciIsIm9uU2NyaXB0c0xvYWQiLCJvblNjcmlwdHNMb2FkRXJyb3IiLCJFZGl0b3JQcm9wVHlwZXMiLCJhcGlLZXkiLCJpbml0aWFsVmFsdWUiLCJvbkVkaXRvckNoYW5nZSIsImNsb3VkQ2hhbm5lbCIsInRvb2xiYXIiLCJ0ZXh0YXJlYU5hbWUiLCJ0aW55bWNlU2NyaXB0U3JjIiwiYXN5bmMiLCJkZWZlciIsInJvbGxiYWNrIiwic2NyaXB0TG9hZGluZyIsImlzRXZlbnRQcm9wIiwiZXZlbnRBdHRyVG9FdmVudE5hbWUiLCJjb25maWdIYW5kbGVyczIiLCJoYW5kbGVyTG9va3VwIiwib24iLCJhZGFwdGVyIiwiYm91bmRIYW5kbGVycyIsInByZXZFdmVudEtleXMiLCJjdXJyRXZlbnRLZXlzIiwicmVtb3ZlZEtleXMiLCJhZGRlZEtleXMiLCJ3cmFwcGVkSGFuZGxlciIsImNvbmZpZ0hhbmRsZXJzIiwibG9va3VwIiwidW5pcXVlIiwidXVpZCIsImlzVGV4dGFyZWFPcklucHV0Iiwibm9ybWFsaXplUGx1Z2luQXJyYXkiLCJtZXJnZVBsdWdpbnMiLCJpbml0UGx1Z2lucyIsImlucHV0UGx1Z2lucyIsImlzQmVmb3JlSW5wdXRFdmVudEF2YWlsYWJsZSIsIklucHV0RXZlbnQiLCJpc0luRG9jIiwiZWxlbSIsInBhcmVudF8xIiwiaXNDb25uZWN0ZWQiLCJzZXRNb2RlIiwiaW5qZWN0U2NyaXB0VGFnIiwic2NyaXB0VGFnIiwicmVmZXJyZXJQb2xpY3kiLCJsb2FkSGFuZGxlciIsImVycm9ySGFuZGxlciIsImNyZWF0ZURvY3VtZW50U2NyaXB0TG9hZGVyIiwic2NyaXB0TG9hZE9yRXJyb3JIYW5kbGVyIiwibG9hZFNjcmlwdHMiLCJmYWlsdXJlIiwiZmFpbHVyZU9yTG9nIiwic3VjY2Vzc0NvdW50IiwiX3NyYyIsIml0ZW1zXzEiLCJkZWxldGVTY3JpcHRzIiwiZ2V0RG9jdW1lbnQiLCJjcmVhdGVTY3JpcHRMb2FkZXIiLCJnZXREb2N1bWVudFNjcmlwdExvYWRlciIsImxvYWRlciIsImxvYWRMaXN0IiwiZG9Mb2FkIiwicmVpbml0aWFsaXplIiwiU2NyaXB0TG9hZGVyIiwiZ2V0VGlueW1jZSIsInRpbnltY2UiLCJfX2V4dGVuZHMiLCJleHRlbmRTdGF0aWNzIiwiX18iLCJFZGl0b3IiLCJyb2xsYmFja1RpbWVyIiwidmFsdWVDdXJzb3IiLCJyb2xsYmFja0NoYW5nZSIsImN1cnJlbnRDb250ZW50IiwidW5kb01hbmFnZXIiLCJzZXRDb250ZW50IiwibW92ZVRvQm9va21hcmsiLCJoYW5kbGVCZWZvcmVJbnB1dCIsIl9ldnQiLCJoYW5kbGVCZWZvcmVJbnB1dFNwZWNpYWwiLCJoYW5kbGVFZGl0b3JDaGFuZ2UiLCJuZXdDb250ZW50IiwiaGFuZGxlRWRpdG9yQ2hhbmdlU3BlY2lhbCIsImluaXRpYWxpc2UiLCJhdHRlbXB0cyIsImVsZW1lbnRSZWYiLCJmaW5hbEluaXQiLCJyZWFkb25seSIsInNldHVwIiwiYmluZEhhbmRsZXJzIiwib25jZSIsImdldEluaXRpYWxWYWx1ZSIsIm5vX2V2ZW50cyIsImluaXRfaW5zdGFuY2VfY2FsbGJhY2siLCJzZXREaXJ0eSIsImxvY2FsRWRpdG9yXzEiLCJ0cmFuc2FjdCIsImJvb2ttYXJrIiwic3VjY2Vzc0hhbmRsZXIiLCJnZXRTY3JpcHRTb3VyY2VzIiwiY2hhbmdlRXZlbnRzIiwiYmVmb3JlSW5wdXRFdmVudCIsInJlbmRlcklubGluZSIsInJlbmRlcklmcmFtZSIsIkVudiIsImJyb3dzZXIiLCJjaGFubmVsIiwiY2xvdWRUaW55SnMiLCJpc1ZhbHVlQ29udHJvbGxlZCIsIndhc0NvbnRyb2xsZWQiLCJub3dDb250cm9sbGVkIiwiVGlueU1DRSIsImVkaXRvclJlZiIsImNvbnRlbnRTdHlsZSIsImhhbmRsZUluaXQiLCJkZWZhdWx0UGx1Z2lucyIsImRlZmF1bHRUb29sYmFyIiwiZGVmYXVsdEluaXQiLCJtZW51YmFyIiwiZmlsZV9waWNrZXJfdHlwZXMiLCJmaWxlX3BpY2tlcl9jYWxsYmFjayIsImNiIiwib25jaGFuZ2UiLCJmcE9uQ2hhbmdlIiwiZnBPbkxvYWQiLCJibG9iQ2FjaGUiLCJhY3RpdmVFZGl0b3IiLCJlZGl0b3JVcGxvYWQiLCJiYXNlNjQiLCJibG9iSW5mbyIsImJsb2JVcmkiLCJjb250ZW50X3N0eWxlIiwibm9vcF8xIiwiX3RvUHJpbWl0aXZlIiwiaGludCIsInByaW0iLCJyZXMiLCJfdG9Qcm9wZXJ0eUtleSIsInRvUHJvcGVydHlLZXkiLCJvd25LZXlzIiwiZW51bWVyYWJsZU9ubHkiLCJzeW0iLCJfb2JqZWN0U3ByZWFkMiIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl94IiwiX2FyciIsIl9uIiwiYXJyYXlMaWtlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJfc2xpY2VkVG9BcnJheSIsImFycmF5V2l0aEhvbGVzIiwiaXRlcmFibGVUb0FycmF5TGltaXQiLCJ1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIm5vbkl0ZXJhYmxlUmVzdCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIm9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJzb3VyY2VTeW1ib2xLZXlzIiwiX2V4Y2x1ZGVkIiwidXNlU3RhdGVNYW5hZ2VyIiwiX3JlZiRkZWZhdWx0SW5wdXRWYWx1IiwiZGVmYXVsdElucHV0VmFsdWUiLCJfcmVmJGRlZmF1bHRNZW51SXNPcGUiLCJkZWZhdWx0TWVudUlzT3BlbiIsIl9yZWYkZGVmYXVsdFZhbHVlIiwicHJvcHNJbnB1dFZhbHVlIiwicHJvcHNNZW51SXNPcGVuIiwibWVudUlzT3BlbiIsInByb3BzT25DaGFuZ2UiLCJwcm9wc09uSW5wdXRDaGFuZ2UiLCJvbklucHV0Q2hhbmdlIiwicHJvcHNPbk1lbnVDbG9zZSIsIm9uTWVudUNsb3NlIiwicHJvcHNPbk1lbnVPcGVuIiwib25NZW51T3BlbiIsInByb3BzVmFsdWUiLCJyZXN0U2VsZWN0UHJvcHMiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwic3RhdGVJbnB1dFZhbHVlIiwic2V0U3RhdGVJbnB1dFZhbHVlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJzdGF0ZU1lbnVJc09wZW4iLCJzZXRTdGF0ZU1lbnVJc09wZW4iLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInN0YXRlVmFsdWUiLCJzZXRTdGF0ZVZhbHVlIiwiYWN0aW9uTWV0YSIsIl9vYmplY3RTcHJlYWQiLCJhc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIml0ZXIiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJhcnJheVdpdGhvdXRIb2xlcyIsIml0ZXJhYmxlVG9BcnJheSIsIm5vbkl0ZXJhYmxlU3ByZWFkIiwic2hlZXRGb3JUYWciLCJzaGVldCIsInN0eWxlU2hlZXRzIiwib3duZXJOb2RlIiwiY3JlYXRlU3R5bGVFbGVtZW50Iiwibm9uY2UiLCJTdHlsZVNoZWV0IiwiX2luc2VydFRhZyIsImluc2VydGlvblBvaW50IiwiaXNTcGVlZHkiLCJzcGVlZHkiLCJjdHIiLCJoeWRyYXRlIiwiaXNJbXBvcnRSdWxlIiwiX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlIiwiaW5zZXJ0UnVsZSIsImNzc1J1bGVzIiwiTVMiLCJNT1oiLCJXRUJLSVQiLCJDT01NRU5UIiwiUlVMRVNFVCIsIkRFQ0xBUkFUSU9OIiwiSU1QT1JUIiwiS0VZRlJBTUVTIiwiTEFZRVIiLCJjaGFyYXQiLCJpbmRleG9mIiwiYmVnaW4iLCJzdHJsZW4iLCJzaXplb2YiLCJjb21iaW5lIiwibGluZSIsImNvbHVtbiIsImNoYXJhY3RlciIsInBlZWsiLCJjYXJldCIsImFsbG9jIiwiZGVhbGxvYyIsImRlbGltaXQiLCJlc2NhcGluZyIsImNvbW1lbnRlciIsInJ1bGVzZXRzIiwicHNldWRvIiwiZGVjbGFyYXRpb25zIiwiYXRydWxlIiwicHJldmlvdXMiLCJzY2FubmluZyIsImFtcGVyc2FuZCIsImNvbW1lbnQiLCJkZWNsYXJhdGlvbiIsInJ1bGVzZXQiLCJwb3N0Iiwic2VyaWFsaXplIiwibWlkZGxld2FyZSIsImNvbGxlY3Rpb24iLCJ3ZWFrTWVtb2l6ZSIsImlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyIsInRvUnVsZXMiLCJnZXRSdWxlcyIsImZpeGVkRWxlbWVudHMiLCJjb21wYXQiLCJpc0ltcGxpY2l0UnVsZSIsInBhcmVudFJ1bGVzIiwicmVtb3ZlTGFiZWwiLCJpZ25vcmVGbGFnIiwiaXNJZ25vcmluZ0NvbW1lbnQiLCJjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSIsInVuc2FmZVBzZXVkb0NsYXNzZXMiLCJpc05lc3RlZCIsImNvbW1lbnRDb250YWluZXIiLCJ1bnNhZmVQc2V1ZG9DbGFzcyIsImlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyIsIm51bGxpZnlFbGVtZW50IiwiaW5jb3JyZWN0SW1wb3J0QWxhcm0iLCJwcmVmaXhlciIsImlzQnJvd3NlciIsImdldFNlcnZlclN0eWxpc0NhY2hlIiwiZGVmYXVsdFN0eWxpc1BsdWdpbnMiLCJjcmVhdGVDYWNoZSIsInNzclN0eWxlcyIsImRhdGFFbW90aW9uQXR0cmlidXRlIiwic3R5bGlzUGx1Z2lucyIsIm5vZGVzVG9IeWRyYXRlIiwiYXR0cmliIiwiX2luc2VydCIsIm9tbmlwcmVzZW50UGx1Z2lucyIsImN1cnJlbnRTaGVldCIsImZpbmFsaXppbmdQbHVnaW5zIiwic3R5bGlzIiwic2VyaWFsaXplZCIsInNob3VsZENhY2hlIiwiX2ZpbmFsaXppbmdQbHVnaW5zIiwiX3NlcmlhbGl6ZXIiLCJfc3R5bGlzIiwic2VydmVyU3R5bGlzQ2FjaGUiLCJyZWdpc3RlcmVkIiwiZ2V0UmVnaXN0ZXJlZFN0eWxlcyIsInJlZ2lzdGVyZWRTdHlsZXMiLCJyYXdDbGFzc05hbWUiLCJyZWdpc3RlclN0eWxlcyIsImlzU3RyaW5nVGFnIiwiaW5zZXJ0U3R5bGVzIiwic3R5bGVzRm9yU1NSIiwibWF5YmVTdHlsZXMiLCJtdXJtdXIyIiwiYXNwZWN0UmF0aW8iLCJJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUiIsIlVOREVGSU5FRF9BU19PQkpFQ1RfS0VZX0VSUk9SIiwiaHlwaGVuYXRlUmVnZXgiLCJhbmltYXRpb25SZWdleCIsImlzQ3VzdG9tUHJvcGVydHkiLCJpc1Byb2Nlc3NhYmxlVmFsdWUiLCJwcm9jZXNzU3R5bGVOYW1lIiwic3R5bGVOYW1lIiwicHJvY2Vzc1N0eWxlVmFsdWUiLCJwMSIsInAyIiwidW5pdGxlc3MiLCJjb250ZW50VmFsdWVQYXR0ZXJuIiwiY29udGVudFZhbHVlcyIsIm9sZFByb2Nlc3NTdHlsZVZhbHVlIiwibXNQYXR0ZXJuIiwiaHlwaGVuUGF0dGVybiIsImh5cGhlbmF0ZWRDYWNoZSIsInByb2Nlc3NlZCIsIl9jaGFyIiwibm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UiLCJoYW5kbGVJbnRlcnBvbGF0aW9uIiwibWVyZ2VkUHJvcHMiLCJpbnRlcnBvbGF0aW9uIiwiX19lbW90aW9uX3N0eWxlcyIsImFuaW0iLCJjcmVhdGVTdHJpbmdGcm9tT2JqZWN0IiwicHJldmlvdXNDdXJzb3IiLCJyZXBsYWNlZCIsImZha2VWYXJOYW1lIiwiaW50ZXJwb2xhdGVkIiwibGFiZWxQYXR0ZXJuIiwic291cmNlTWFwUGF0dGVybiIsInNlcmlhbGl6ZVN0eWxlcyIsInN0cmluZ01vZGUiLCJzdHJpbmdzIiwic291cmNlTWFwIiwiaWRlbnRpZmllck5hbWUiLCJoYXNoU3RyaW5nIiwic3luY0ZhbGxiYWNrIiwidXNlSW5zZXJ0aW9uRWZmZWN0IiwidXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayIsInVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayIsIkVtb3Rpb25DYWNoZUNvbnRleHQiLCJ3aXRoRW1vdGlvbkNhY2hlIiwiVGhlbWVDb250ZXh0IiwiZ2V0TGFzdFBhcnQiLCJmdW5jdGlvbk5hbWUiLCJnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUiLCJpbnRlcm5hbFJlYWN0RnVuY3Rpb25OYW1lcyIsInNhbml0aXplSWRlbnRpZmllciIsImdldExhYmVsRnJvbVN0YWNrVHJhY2UiLCJzdGFja1RyYWNlIiwibGluZXMiLCJ0eXBlUHJvcE5hbWUiLCJsYWJlbFByb3BOYW1lIiwiY3JlYXRlRW1vdGlvblByb3BzIiwibmV3UHJvcHMiLCJJbnNlcnRpb24iLCJzZXJpYWxpemVkTmFtZXMiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsIkVtb3Rpb24iLCJjc3NQcm9wIiwibGFiZWxGcm9tU3RhY2siLCJwa2ciLCJ3b3JrZXIiLCJzaWRlRWZmZWN0cyIsImF1dGhvciIsImxpY2Vuc2UiLCJzY3JpcHRzIiwiZGVwZW5kZW5jaWVzIiwicGVlckRlcGVuZGVuY2llcyIsInJlYWN0IiwicGVlckRlcGVuZGVuY2llc01ldGEiLCJvcHRpb25hbCIsImRldkRlcGVuZGVuY2llcyIsInR5cGVzY3JpcHQiLCJyZXBvc2l0b3J5IiwicHVibGlzaENvbmZpZyIsImFjY2VzcyIsInByZWNvbnN0cnVjdCIsImVudHJ5cG9pbnRzIiwidW1kTmFtZSIsImVudkNvbmRpdGlvbnMiLCJqc3giLCJhcmdzTGVuZ3RoIiwiY3JlYXRlRWxlbWVudEFyZ0FycmF5Iiwid2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsIiwiR2xvYmFsIiwiaXNCcm93c2VyJDEiLCJzZXJpYWxpemVkU3R5bGVzIiwic2hlZXRSZWYiLCJyZWh5ZHJhdGluZyIsInNoZWV0UmVmQ3VycmVudCIsIm5leHRFbGVtZW50U2libGluZyIsImluc2VydGFibGUiLCJjbGFzc25hbWVzIiwidG9BZGQiLCJzZXJpYWxpemVkQXJyIiwiQ2xhc3NOYW1lcyIsImhhc1JlbmRlcmVkIiwiZWxlIiwiaXNUZXN0RW52IiwiamVzdCIsInZpIiwiZ2xvYmFsQ29udGV4dCIsImdsb2JhbEtleSIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCJfbm9kZSRvd25lckRvY3VtZW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSQxIiwidWFTdHJpbmciLCJpc092ZXJmbG93RWxlbWVudCIsImlzQ2xpZW50UmVjdFZpc3VhbFZpZXdwb3J0QmFzZWQiLCJpc0xhc3RUcmF2ZXJzYWJsZU5vZGUiLCJnZXRDc3NEaW1lbnNpb25zIiwiaGFzT2Zmc2V0Iiwic2hvdWxkRmFsbGJhY2siLCJmYWxsYmFjayIsInVud3JhcEVsZW1lbnQiLCJGQUxMQkFDS19TQ0FMRSIsImdldFNjYWxlIiwiaXNGaW5pdGUiLCJfd2luJHZpc3VhbFZpZXdwb3J0IiwiX3dpbiR2aXN1YWxWaWV3cG9ydDIiLCJvZmZzZXRXaW4iLCJjdXJyZW50SUZyYW1lIiwiZnJhbWVFbGVtZW50IiwiaWZyYW1lU2NhbGUiLCJpZnJhbWVSZWN0IiwiZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3IiLCJnZXRPdmVyZmxvd0FuY2VzdG9ycyIsInNjcm9sbGFibGVBbmNlc3RvciIsImF1dG9VcGRhdGUiLCJmbG9hdGluZyIsImFuY2VzdG9yU2Nyb2xsIiwiX2FuY2VzdG9yU2Nyb2xsIiwiYW5jZXN0b3JSZXNpemUiLCJlbGVtZW50UmVzaXplIiwiYW5pbWF0aW9uRnJhbWUiLCJhbmNlc3RvciIsIlJlc2l6ZU9ic2VydmVyIiwiZnJhbWVJZCIsInByZXZSZWZSZWN0IiwiZnJhbWVMb29wIiwibmV4dFJlZlJlY3QiLCJfb2JzZXJ2ZXIiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsIl9leGNsdWRlZCQ0IiwiYXBwbHlQcmVmaXhUb05hbWUiLCJjbGFzc05hbWVMaXN0IiwiY2xlYW5WYWx1ZSIsImNsZWFuQ29tbW9uUHJvcHMiLCJjbGVhclZhbHVlIiwiZ2V0U3R5bGVzIiwiaGFzVmFsdWUiLCJpc011bHRpIiwiaXNSdGwiLCJzZWxlY3RPcHRpb24iLCJzZWxlY3RQcm9wcyIsImlubmVyUHJvcHMiLCJnZXRTdHlsZVByb3BzIiwiY2xhc3NOYW1lc1N0YXRlIiwiX25ld1ZhbHVlIiwiaXNEb2N1bWVudEVsZW1lbnQiLCJub3JtYWxpemVkSGVpZ2h0IiwiZ2V0U2Nyb2xsVG9wIiwiZXhjbHVkZVN0YXRpY1BhcmVudCIsIm92ZXJmbG93UngiLCJlYXNlT3V0Q3ViaWMiLCJhbmltYXRlZFNjcm9sbFRvIiwiZHVyYXRpb24iLCJpbmNyZW1lbnQiLCJjdXJyZW50VGltZSIsImFuaW1hdGVTY3JvbGwiLCJtZW51RWwiLCJmb2N1c2VkRWwiLCJtZW51UmVjdCIsImZvY3VzZWRSZWN0Iiwib3ZlclNjcm9sbCIsImdldEJvdW5kaW5nQ2xpZW50T2JqIiwiaXNUb3VjaENhcGFibGUiLCJpc01vYmlsZURldmljZSIsInBhc3NpdmVPcHRpb25BY2Nlc3NlZCIsInN1cHBvcnRzUGFzc2l2ZUV2ZW50cyIsIm5vdE51bGxpc2giLCJ2YWx1ZVRlcm5hcnkiLCJtdWx0aVZhbHVlIiwic2luZ2xlVmFsdWVBc1ZhbHVlIiwibXVsdGlWYWx1ZUFzVmFsdWUiLCJyZW1vdmVQcm9wcyIsInByb3BzT2JqIiwicHJvcHNNYXAiLCJfZXhjbHVkZWQkMyIsIl9leGNsdWRlZDIkMSIsImdldE1lbnVQbGFjZW1lbnQiLCJwcmVmZXJyZWRNYXhIZWlnaHQiLCJzaG91bGRTY3JvbGwiLCJpc0ZpeGVkUG9zaXRpb24iLCJjb250cm9sSGVpZ2h0IiwiZGVmYXVsdFN0YXRlIiwiX3Njcm9sbFBhcmVudCRnZXRCb3VuIiwiX21lbnVFbCRnZXRCb3VuZGluZ0NsIiwibWVudUJvdHRvbSIsIm1lbnVIZWlnaHQiLCJtZW51VG9wIiwiX21lbnVFbCRvZmZzZXRQYXJlbnQkIiwiY29udGFpbmVyVG9wIiwidmlld0hlaWdodCIsInZpZXdTcGFjZUFib3ZlIiwidmlld1NwYWNlQmVsb3ciLCJzY3JvbGxTcGFjZUFib3ZlIiwic2Nyb2xsU3BhY2VCZWxvdyIsInNjcm9sbERvd24iLCJzY3JvbGxVcCIsInNjcm9sbER1cmF0aW9uIiwiY29uc3RyYWluZWRIZWlnaHQiLCJfY29uc3RyYWluZWRIZWlnaHQiLCJzcGFjZUFib3ZlIiwiX2NvbnN0cmFpbmVkSGVpZ2h0MiIsImFsaWduVG9Db250cm9sIiwicGxhY2VtZW50VG9DU1NQcm9wIiwiY29lcmNlUGxhY2VtZW50IiwibWVudUNTUyIsInVuc3R5bGVkIiwiX3JlZjIkdGhlbWUiLCJzcGFjaW5nIiwibmV1dHJhbDAiLCJtZW51R3V0dGVyIiwiUG9ydGFsUGxhY2VtZW50Q29udGV4dCIsIk1lbnVQbGFjZXIiLCJtaW5NZW51SGVpZ2h0IiwibWF4TWVudUhlaWdodCIsIm1lbnVQbGFjZW1lbnQiLCJtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXciLCJzZXRQb3J0YWxQbGFjZW1lbnQiLCJzZXRNYXhIZWlnaHQiLCJzZXRQbGFjZW1lbnQiLCJwbGFjZXJQcm9wcyIsIk1lbnUiLCJNZW51JDEiLCJtZW51TGlzdENTUyIsImJhc2VVbml0IiwiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCJNZW51TGlzdCIsIm5vdGljZUNTUyIsIl9yZWY1JHRoZW1lIiwibmV1dHJhbDQwIiwibm9PcHRpb25zTWVzc2FnZUNTUyIsImxvYWRpbmdNZXNzYWdlQ1NTIiwiTm9PcHRpb25zTWVzc2FnZSIsIl9yZWY2JGNoaWxkcmVuIiwiTG9hZGluZ01lc3NhZ2UiLCJfcmVmNyRjaGlsZHJlbiIsIm1lbnVQb3J0YWxDU1MiLCJfcmVmOCIsIk1lbnVQb3J0YWwiLCJhcHBlbmRUbyIsImNvbnRyb2xFbGVtZW50IiwibWVudVBvcnRhbFJlZiIsImNsZWFudXBSZWYiLCJwb3J0YWxQbGFjZW1lbnRDb250ZXh0IiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJjb21wdXRlZFBvc2l0aW9uIiwic2V0Q29tcHV0ZWRQb3NpdGlvbiIsInVwZGF0ZUNvbXB1dGVkUG9zaXRpb24iLCJzY3JvbGxEaXN0YW5jZSIsInJ1bkF1dG9VcGRhdGUiLCJzZXRNZW51UG9ydGFsRWxlbWVudCIsIm1lbnVQb3J0YWxFbGVtZW50IiwibWVudVdyYXBwZXIiLCJjb250YWluZXJDU1MiLCJwb2ludGVyRXZlbnRzIiwiU2VsZWN0Q29udGFpbmVyIiwidmFsdWVDb250YWluZXJDU1MiLCJjb250cm9sU2hvdWxkUmVuZGVyVmFsdWUiLCJWYWx1ZUNvbnRhaW5lciIsImluZGljYXRvcnNDb250YWluZXJDU1MiLCJJbmRpY2F0b3JzQ29udGFpbmVyIiwiaW5kaWNhdG9ycyIsIl90ZW1wbGF0ZU9iamVjdCIsIl9leGNsdWRlZCQyIiwiX2V4Y2x1ZGVkMiIsIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwiU3ZnIiwiZm9jdXNhYmxlIiwiQ3Jvc3NJY29uIiwiRG93bkNoZXZyb24iLCJiYXNlQ1NTIiwiaXNGb2N1c2VkIiwiX3JlZjMkdGhlbWUiLCJ0cmFuc2l0aW9uIiwibmV1dHJhbDYwIiwibmV1dHJhbDIwIiwibmV1dHJhbDgwIiwiZHJvcGRvd25JbmRpY2F0b3JDU1MiLCJEcm9wZG93bkluZGljYXRvciIsImluZGljYXRvciIsImNsZWFySW5kaWNhdG9yQ1NTIiwiQ2xlYXJJbmRpY2F0b3IiLCJpbmRpY2F0b3JTZXBhcmF0b3JDU1MiLCJfcmVmNCR0aGVtZSIsIm5ldXRyYWwxMCIsIkluZGljYXRvclNlcGFyYXRvciIsImxvYWRpbmdEb3RBbmltYXRpb25zIiwibG9hZGluZ0luZGljYXRvckNTUyIsIkxvYWRpbmdEb3QiLCJjc3MkMiIsImFuaW1hdGlvbiIsIkxvYWRpbmdJbmRpY2F0b3IiLCJfcmVmNyRzaXplIiwiY3NzJDEiLCJfcmVmJHRoZW1lIiwibmV1dHJhbDUiLCJuZXV0cmFsMzAiLCJDb250cm9sIiwiQ29udHJvbCQxIiwiX2V4Y2x1ZGVkJDEiLCJncm91cENTUyIsIkdyb3VwIiwiaGVhZGluZ1Byb3BzIiwiZ3JvdXBIZWFkaW5nQ1NTIiwidGV4dFRyYW5zZm9ybSIsIkdyb3VwSGVhZGluZyIsIl9jbGVhbkNvbW1vblByb3BzIiwiR3JvdXAkMSIsImlucHV0Q1NTIiwic3BhY2luZ1N0eWxlIiwiaW5wdXRDbGFzc05hbWUiLCJJbnB1dCQxIiwibXVsdGlWYWx1ZUNTUyIsIm11bHRpVmFsdWVMYWJlbENTUyIsImNyb3BXaXRoRWxsaXBzaXMiLCJ0ZXh0T3ZlcmZsb3ciLCJtdWx0aVZhbHVlUmVtb3ZlQ1NTIiwiZGFuZ2VyTGlnaHQiLCJNdWx0aVZhbHVlR2VuZXJpYyIsIk11bHRpVmFsdWVDb250YWluZXIiLCJNdWx0aVZhbHVlTGFiZWwiLCJNdWx0aVZhbHVlUmVtb3ZlIiwiTXVsdGlWYWx1ZSIsImNvbXBvbmVudHMiLCJDb250YWluZXIiLCJSZW1vdmUiLCJNdWx0aVZhbHVlJDEiLCJvcHRpb25DU1MiLCJ1c2VyU2VsZWN0IiwiV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3IiLCJwcmltYXJ5MjUiLCJwcmltYXJ5NTAiLCJPcHRpb24iLCJPcHRpb24kMSIsInBsYWNlaG9sZGVyQ1NTIiwibmV1dHJhbDUwIiwiUGxhY2Vob2xkZXIkMSIsIlNpbmdsZVZhbHVlIiwiU2luZ2xlVmFsdWUkMSIsImRlZmF1bHRDb21wb25lbnRzIiwic2FmZUlzTmFOIiwicG9ueWZpbGwiLCJhcmVJbnB1dHNFcXVhbCIsIm5ld0lucHV0cyIsImxhc3RJbnB1dHMiLCJtZW1vaXplT25lIiwicmVzdWx0Rm4iLCJtZW1vaXplZCIsIm5ld0FyZ3MiLCJsYXN0VGhpcyIsImxhc3RBcmdzIiwibGFzdFJlc3VsdCIsIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fJDIiLCJBMTF5VGV4dCIsIkExMXlUZXh0JDEiLCJkZWZhdWx0QXJpYUxpdmVNZXNzYWdlcyIsImd1aWRhbmNlIiwiaXNTZWFyY2hhYmxlIiwidGFiU2VsZWN0c1ZhbHVlIiwiaXNJbml0aWFsRm9jdXMiLCJfcHJvcHMkbGFiZWwiLCJsYWJlbHMiLCJfcHJvcHMkbGFiZWwyIiwic2VsZWN0VmFsdWUiLCJpc0FwcGxlRGV2aWNlIiwiZ2V0QXJyYXlJbmRleCIsInN0YXR1cyIsIm9uRmlsdGVyIiwicmVzdWx0c01lc3NhZ2UiLCJMaXZlUmVnaW9uIiwiYXJpYVNlbGVjdGlvbiIsImZvY3VzZWRPcHRpb24iLCJmb2N1c2VkVmFsdWUiLCJmb2N1c2FibGVPcHRpb25zIiwiYXJpYUxpdmVNZXNzYWdlcyIsImdldE9wdGlvbkxhYmVsIiwiaXNPcHRpb25EaXNhYmxlZCIsInNjcmVlblJlYWRlclN0YXR1cyIsImlzTG9hZGluZyIsImFyaWFMYWJlbCIsImFyaWFMaXZlIiwibWVzc2FnZXMiLCJzZWxlY3RlZE9wdGlvbnMiLCJyZW1vdmVkVmFsdWUiLCJyZW1vdmVkVmFsdWVzIiwiYXNPcHRpb24iLCJtdWx0aVNlbGVjdGVkIiwib25DaGFuZ2VQcm9wcyIsImFyaWFGb2N1c2VkIiwiZm9jdXNNc2ciLCJvbkZvY3VzUHJvcHMiLCJhcmlhUmVzdWx0cyIsInJlc3VsdHNNc2ciLCJhcmlhR3VpZGFuY2UiLCJndWlkYW5jZU1zZyIsIlNjcmVlblJlYWRlclRleHQiLCJMaXZlUmVnaW9uJDEiLCJkaWFjcml0aWNzIiwibGV0dGVycyIsImFueURpYWNyaXRpYyIsImRpYWNyaXRpY1RvQmFzZSIsImRpYWNyaXRpYyIsInN0cmlwRGlhY3JpdGljcyIsIm1lbW9pemVkU3RyaXBEaWFjcml0aWNzRm9ySW5wdXQiLCJ0cmltU3RyaW5nIiwiZGVmYXVsdFN0cmluZ2lmeSIsImNyZWF0ZUZpbHRlciIsInJhd0lucHV0IiwiX19pc05ld19fIiwiX2lnbm9yZUNhc2UkaWdub3JlQWNjIiwiaWdub3JlQ2FzZSIsImlnbm9yZUFjY2VudHMiLCJtYXRjaEZyb20iLCJjYW5kaWRhdGUiLCJEdW1teUlucHV0IiwiZmlsdGVyZWRQcm9wcyIsImNhcmV0Q29sb3IiLCJjYW5jZWxTY3JvbGwiLCJjYW5jZWxhYmxlIiwidXNlU2Nyb2xsQ2FwdHVyZSIsImlzRW5hYmxlZCIsIm9uQm90dG9tQXJyaXZlIiwib25Cb3R0b21MZWF2ZSIsIm9uVG9wQXJyaXZlIiwib25Ub3BMZWF2ZSIsImlzQm90dG9tIiwiaXNUb3AiLCJ0b3VjaFN0YXJ0Iiwic2Nyb2xsVGFyZ2V0IiwiaGFuZGxlRXZlbnREZWx0YSIsIl9zY3JvbGxUYXJnZXQkY3VycmVudCIsImlzRGVsdGFQb3NpdGl2ZSIsImF2YWlsYWJsZVNjcm9sbCIsInNob3VsZENhbmNlbFNjcm9sbCIsIm9uV2hlZWwiLCJkZWx0YVkiLCJvblRvdWNoU3RhcnQiLCJjaGFuZ2VkVG91Y2hlcyIsIm9uVG91Y2hNb3ZlIiwic3RhcnRMaXN0ZW5pbmciLCJub3RQYXNzaXZlIiwic3RvcExpc3RlbmluZyIsIlNUWUxFX0tFWVMiLCJMT0NLX1NUWUxFUyIsImJveFNpemluZyIsInByZXZlbnRUb3VjaE1vdmUiLCJhbGxvd1RvdWNoTW92ZSIsInByZXZlbnRJbmVydGlhU2Nyb2xsIiwidG90YWxTY3JvbGwiLCJjdXJyZW50U2Nyb2xsIiwiaXNUb3VjaERldmljZSIsImNhblVzZURPTSIsImFjdGl2ZVNjcm9sbExvY2tzIiwibGlzdGVuZXJPcHRpb25zIiwiY2FwdHVyZSIsInVzZVNjcm9sbExvY2siLCJfcmVmJGFjY291bnRGb3JTY3JvbGwiLCJhY2NvdW50Rm9yU2Nyb2xsYmFycyIsIm9yaWdpbmFsU3R5bGVzIiwiYWRkU2Nyb2xsTG9jayIsInRvdWNoU2Nyb2xsVGFyZ2V0IiwidGFyZ2V0U3R5bGUiLCJjdXJyZW50UGFkZGluZyIsImFkanVzdGVkUGFkZGluZyIsInJlbW92ZVNjcm9sbExvY2siLCJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyQxIiwiYmx1clNlbGVjdElucHV0IiwiX3JlZjIkMSIsIlNjcm9sbE1hbmFnZXIiLCJsb2NrRW5hYmxlZCIsIl9yZWYkY2FwdHVyZUVuYWJsZWQiLCJjYXB0dXJlRW5hYmxlZCIsInNldFNjcm9sbENhcHR1cmVUYXJnZXQiLCJzZXRTY3JvbGxMb2NrVGFyZ2V0IiwidGFyZ2V0UmVmIiwiUmVxdWlyZWRJbnB1dCIsIlJlcXVpcmVkSW5wdXQkMSIsInRlc3RQbGF0Zm9ybSIsIl93aW5kb3ckbmF2aWdhdG9yJHVzZSIsImlzSVBob25lIiwiaXNNYWMiLCJpc0lQYWQiLCJpc0lPUyIsImZvcm1hdEdyb3VwTGFiZWwiLCJnZXRPcHRpb25MYWJlbCQxIiwiZ2V0T3B0aW9uVmFsdWUkMSIsImdldE9wdGlvblZhbHVlIiwiZGVmYXVsdFN0eWxlcyIsImNsZWFySW5kaWNhdG9yIiwiZHJvcGRvd25JbmRpY2F0b3IiLCJncm91cEhlYWRpbmciLCJpbmRpY2F0b3JzQ29udGFpbmVyIiwiaW5kaWNhdG9yU2VwYXJhdG9yIiwibG9hZGluZ0luZGljYXRvciIsImxvYWRpbmdNZXNzYWdlIiwibWVudUxpc3QiLCJtZW51UG9ydGFsIiwibXVsdGlWYWx1ZUxhYmVsIiwibXVsdGlWYWx1ZVJlbW92ZSIsIm5vT3B0aW9uc01lc3NhZ2UiLCJ2YWx1ZUNvbnRhaW5lciIsInByaW1hcnk3NSIsIm5ldXRyYWw3MCIsIm5ldXRyYWw5MCIsImJhY2tzcGFjZVJlbW92ZXNWYWx1ZSIsImJsdXJJbnB1dE9uU2VsZWN0IiwiY2FwdHVyZU1lbnVTY3JvbGwiLCJjbG9zZU1lbnVPblNlbGVjdCIsImNsb3NlTWVudU9uU2Nyb2xsIiwiZXNjYXBlQ2xlYXJzVmFsdWUiLCJmaWx0ZXJPcHRpb24iLCJtZW51U2hvdWxkQmxvY2tTY3JvbGwiLCJvcGVuTWVudU9uRm9jdXMiLCJvcGVuTWVudU9uQ2xpY2siLCJ0b0NhdGVnb3JpemVkT3B0aW9uIiwiX2lzT3B0aW9uRGlzYWJsZWQiLCJfaXNPcHRpb25TZWxlY3RlZCIsImJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zIiwiZ3JvdXBPck9wdGlvbiIsImdyb3VwT3JPcHRpb25JbmRleCIsImNhdGVnb3JpemVkT3B0aW9ucyIsIm9wdGlvbkluZGV4IiwiY2F0ZWdvcml6ZWRPcHRpb24iLCJpc0ZvY3VzYWJsZSIsImJ1aWxkRm9jdXNhYmxlT3B0aW9uc0Zyb21DYXRlZ29yaXplZE9wdGlvbnMiLCJvcHRpb25zQWNjdW11bGF0b3IiLCJidWlsZEZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzIiwib3B0aW9uSWQiLCJidWlsZEZvY3VzYWJsZU9wdGlvbnMiLCJfcHJvcHMkaW5wdXRWYWx1ZSIsInNob3VsZEhpZGVTZWxlY3RlZE9wdGlvbnMiLCJfZmlsdGVyT3B0aW9uIiwiZ2V0TmV4dEZvY3VzZWRWYWx1ZSIsIm5leHRTZWxlY3RWYWx1ZSIsImxhc3RTZWxlY3RWYWx1ZSIsImxhc3RGb2N1c2VkSW5kZXgiLCJuZXh0Rm9jdXNlZEluZGV4IiwiZ2V0TmV4dEZvY3VzZWRPcHRpb24iLCJsYXN0Rm9jdXNlZE9wdGlvbiIsImdldEZvY3VzZWRPcHRpb25JZCIsImZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzIiwiX2ZvY3VzYWJsZU9wdGlvbnNXaXRoIiwiZm9jdXNlZE9wdGlvbklkIiwiaXNPcHRpb25TZWxlY3RlZCIsImhpZGVTZWxlY3RlZE9wdGlvbnMiLCJpbnN0YW5jZUlkIiwiU2VsZWN0IiwiaW5wdXRJc0hpZGRlbiIsImNsZWFyRm9jdXNWYWx1ZU9uVXBkYXRlIiwicHJldldhc0ZvY3VzZWQiLCJpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGUiLCJpbnN0YW5jZVByZWZpeCIsImJsb2NrT3B0aW9uSG92ZXIiLCJpc0NvbXBvc2luZyIsImNvbW1vblByb3BzIiwiaW5pdGlhbFRvdWNoWCIsImluaXRpYWxUb3VjaFkiLCJvcGVuQWZ0ZXJGb2N1cyIsInNjcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlIiwidXNlcklzRHJhZ2dpbmciLCJjb250cm9sUmVmIiwiZ2V0Q29udHJvbFJlZiIsImZvY3VzZWRPcHRpb25SZWYiLCJnZXRGb2N1c2VkT3B0aW9uUmVmIiwibWVudUxpc3RSZWYiLCJnZXRNZW51TGlzdFJlZiIsImlucHV0UmVmIiwiZ2V0SW5wdXRSZWYiLCJmb2N1c0lucHV0IiwiYmx1cklucHV0IiwiYXJpYU9uQ2hhbmdlIiwiX3RoaXMkcHJvcHMyIiwicHJldklucHV0VmFsdWUiLCJfdGhpcyRwcm9wczMiLCJkZXNlbGVjdGVkIiwicmVtb3ZlVmFsdWUiLCJuZXdWYWx1ZUFycmF5IiwicG9wVmFsdWUiLCJsYXN0U2VsZWN0ZWRWYWx1ZSIsImdldEZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzIiwiZ2V0RWxlbWVudElkIiwiY2xhc3NOYW1lUHJlZml4IiwiX3RoaXMkcHJvcHMkY2xhc3NOYW1lIiwiX3RoaXMkcHJvcHMkY2xhc3NOYW1lMiIsImdldENvbXBvbmVudHMiLCJnZXRDYXRlZ29yaXplZE9wdGlvbnMiLCJnZXRGb2N1c2FibGVPcHRpb25zIiwib25NZW51TW91c2VEb3duIiwib25NZW51TW91c2VNb3ZlIiwib25Db250cm9sTW91c2VEb3duIiwib3Blbk1lbnUiLCJvbkRyb3Bkb3duSW5kaWNhdG9yTW91c2VEb3duIiwiX3RoaXMkcHJvcHM0Iiwib25DbGVhckluZGljYXRvck1vdXNlRG93biIsIm9uQ29tcG9zaXRpb25TdGFydCIsIm9uQ29tcG9zaXRpb25FbmQiLCJ0b3VjaCIsImRlbHRhWCIsIm1vdmVUaHJlc2hvbGQiLCJvblRvdWNoRW5kIiwib25Db250cm9sVG91Y2hFbmQiLCJvbkNsZWFySW5kaWNhdG9yVG91Y2hFbmQiLCJvbkRyb3Bkb3duSW5kaWNhdG9yVG91Y2hFbmQiLCJvbklucHV0Rm9jdXMiLCJvbklucHV0Qmx1ciIsIm9uT3B0aW9uSG92ZXIiLCJmb2N1c2VkT3B0aW9uSW5kZXgiLCJvblZhbHVlSW5wdXRGb2N1cyIsIl90aGlzJHByb3BzNSIsIl90aGlzJHN0YXRlIiwiZm9jdXNWYWx1ZSIsImZvY3VzT3B0aW9uIiwic3RhcnRMaXN0ZW5pbmdDb21wb3NpdGlvbiIsInN0YXJ0TGlzdGVuaW5nVG9Ub3VjaCIsIl90aGlzJHByb3BzNiIsInN0b3BMaXN0ZW5pbmdDb21wb3NpdGlvbiIsInN0b3BMaXN0ZW5pbmdUb1RvdWNoIiwiX3RoaXMkc3RhdGUyIiwib3BlbkF0SW5kZXgiLCJzZWxlY3RlZEluZGV4IiwiX3RoaXMkc3RhdGUzIiwiZm9jdXNlZEluZGV4IiwibmV4dEZvY3VzIiwiZ2V0VGhlbWUiLCJnZXRDb21tb25Qcm9wcyIsImhhc09wdGlvbnMiLCJfdGhpcyRwcm9wczciLCJmb3JtYXRPcHRpb25MYWJlbCIsIl9pbnB1dFZhbHVlIiwiX3NlbGVjdFZhbHVlIiwicmVuZGVySW5wdXQiLCJfdGhpcyRwcm9wczgiLCJpbnB1dElkIiwiX3RoaXMkZ2V0Q29tcG9uZW50cyIsIl90aGlzJHN0YXRlNCIsImFyaWFBdHRyaWJ1dGVzIiwiaW5wdXRNb2RlIiwiYXV0b0NhcGl0YWxpemUiLCJhdXRvQ29ycmVjdCIsInNwZWxsQ2hlY2siLCJyZW5kZXJQbGFjZWhvbGRlck9yVmFsdWUiLCJfdGhpczMiLCJfdGhpcyRnZXRDb21wb25lbnRzMiIsIl90aGlzJHByb3BzOSIsIl90aGlzJHN0YXRlNSIsIm9wdCIsImlzT3B0aW9uRm9jdXNlZCIsInJlbmRlckNsZWFySW5kaWNhdG9yIiwiX3RoaXMkZ2V0Q29tcG9uZW50czMiLCJfdGhpcyRwcm9wczEwIiwicmVuZGVyTG9hZGluZ0luZGljYXRvciIsIl90aGlzJGdldENvbXBvbmVudHM0IiwiX3RoaXMkcHJvcHMxMSIsInJlbmRlckluZGljYXRvclNlcGFyYXRvciIsIl90aGlzJGdldENvbXBvbmVudHM1IiwicmVuZGVyRHJvcGRvd25JbmRpY2F0b3IiLCJfdGhpcyRnZXRDb21wb25lbnRzNiIsInJlbmRlck1lbnUiLCJfdGhpczQiLCJfdGhpcyRnZXRDb21wb25lbnRzNyIsIl90aGlzJHByb3BzMTIiLCJtZW51UG9ydGFsVGFyZ2V0Iiwib25NZW51U2Nyb2xsVG9Ub3AiLCJvbk1lbnVTY3JvbGxUb0JvdHRvbSIsIm9uSG92ZXIiLCJtZW51VUkiLCJfZGF0YSIsImdyb3VwSW5kZXgiLCJncm91cElkIiwiaGVhZGluZ0lkIiwiX21lc3NhZ2UiLCJtZW51UGxhY2VtZW50UHJvcHMiLCJtZW51RWxlbWVudCIsIl9yZWY0JHBsYWNlclByb3BzIiwic2Nyb2xsVGFyZ2V0UmVmIiwicmVuZGVyRm9ybUZpZWxkIiwiX3RoaXM1IiwiX3RoaXMkcHJvcHMxMyIsInJlbmRlckxpdmVSZWdpb24iLCJfdGhpcyRzdGF0ZTYiLCJfdGhpcyRnZXRDb21wb25lbnRzOCIsIl90aGlzJHByb3BzMTQiLCJuZXdNZW51T3B0aW9uc1N0YXRlIiwibmV3SW5wdXRJc0hpZGRlblN0YXRlIiwibmV3QXJpYVNlbGVjdGlvbiIsImhhc0tlcHRGb2N1cyIsIlN0YXRlTWFuYWdlZFNlbGVjdCIsImJhc2VTZWxlY3RQcm9wcyIsIlN0YXRlTWFuYWdlZFNlbGVjdCQxIiwidXNlU2VsZWN0VGhlbWUiLCJ1c2VUaGVtZSIsImN1cnJlbnRUaGVtZSIsInNldEN1cnJlbnRUaGVtZSIsImRlZmF1dFRoZW1lIiwic2VsZWN0VGhlbWUiLCJTZWxlY3RDb21wb25lbnQiLCJSZWFjdFNlbGVjdCIsInVzZUFzeW5jIiwiX3JlZiRkZWZhdWx0T3B0aW9ucyIsInByb3BzRGVmYXVsdE9wdGlvbnMiLCJfcmVmJGNhY2hlT3B0aW9ucyIsImNhY2hlT3B0aW9ucyIsInByb3BzTG9hZE9wdGlvbnMiLCJsb2FkT3B0aW9ucyIsIl9yZWYkaXNMb2FkaW5nIiwicHJvcHNJc0xvYWRpbmciLCJfcmVmJGZpbHRlck9wdGlvbiIsImxhc3RSZXF1ZXN0Iiwic2V0RGVmYXVsdE9wdGlvbnMiLCJzZXRJc0xvYWRpbmciLCJsb2FkZWRJbnB1dFZhbHVlIiwic2V0TG9hZGVkSW5wdXRWYWx1ZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUxMCIsImxvYWRlZE9wdGlvbnMiLCJzZXRMb2FkZWRPcHRpb25zIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsInBhc3NFbXB0eU9wdGlvbnMiLCJzZXRQYXNzRW1wdHlPcHRpb25zIiwiX3VzZVN0YXRlMTMiLCJfdXNlU3RhdGUxNCIsIm9wdGlvbnNDYWNoZSIsInNldE9wdGlvbnNDYWNoZSIsIl91c2VTdGF0ZTE1IiwiX3VzZVN0YXRlMTYiLCJwcmV2RGVmYXVsdE9wdGlvbnMiLCJzZXRQcmV2RGVmYXVsdE9wdGlvbnMiLCJfdXNlU3RhdGUxNyIsIl91c2VTdGF0ZTE4IiwicHJldkNhY2hlT3B0aW9ucyIsInNldFByZXZDYWNoZU9wdGlvbnMiLCJyZXF1ZXN0IiwiQXN5bmNTZWxlY3QiLCJzdGF0ZU1hbmFnZWRQcm9wcyIsIkFzeW5jU2VsZWN0JDEiLCJSZWFjdEFzeW5jU2VsZWN0IiwiU2VsZWN0QXN5bmMiLCJTdHlsZWRTdGVwIiwiY29tcGxldGVkIiwiU3RlcHBlciIsIlZhbHVlR3JvdXAiLCJCVVRUT05fSU5fR1JPVVBfQ0xBU1NfTkFNRSIsImJ1dHRvbk1hcmdpbiIsImhhc0hhbmRsZXIiLCJoYXNMYWJlbCIsIlN0eWxlZFNpbmdsZUJ1dHRvbiIsIlN0eWxlZERyb3BEb3duSXRlbUFjdGlvbiIsIlN0eWxlZEJ1dHRvbkdyb3VwIiwiU2luZ2xlQnV0dG9uSW5Hcm91cCIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwib25DbGlja0hhbmRsZXIiLCJpY29uTmFtZSIsIkRyb3BEb3duSXRlbVdpdGhCdXR0b25zIiwiQnV0dG9uSW5Hcm91cCIsIkJ1dHRvbkdyb3VwIiwiU3R5bGVkQ3VycmVudFVzZXJOYXYiLCJDdXJyZW50VXNlck5hdiIsImF2YXRhclVybCIsImRyb3BBY3Rpb25zIiwibGluZUFjdGlvbnMiLCJTdHlsZWRXcmFwcGVyIiwiU3R5bGVkTGluayIsIk1hZGVXaXRoTG92ZSIsIlN0eWxlZE5hdmlnYXRpb24iLCJOYXZpZ2F0aW9uRWxlbWVudFdyYXBwZXIiLCJOYXZpZ2F0aW9uIiwiR2xvYmFsU3R5bGUiLCJSZWFj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Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7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O0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNB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Q3RDLENBQUMsQ0FBQTs7Q0FFRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ08sTUFBTXlFLFlBQVksR0FBRztDQUMxQjl1RCxFQUFBQSxPQUFPLEVBQUUsS0FBQTtDQUNYLENBQUMsQ0FBQTtDQUNEOztDQUVPLE1BQU02dUIsY0FBWSxHQUFHLEVBQUUsQ0FBQTs7Q0FFOUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTs7Q0FFQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTs7Q0FFQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7O0NBRUE7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTs7Q0FFQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxNQUFNLEVBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxXQUFXLENBQUMsRUFBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLFNBQVMsRUFBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxXQUFXLEVBQUMsQ0FBQyxTQUFTLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLGdCQUFnQixFQUFDLENBQUMsRUFBQyxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxRQUFRLEVBQUMsVUFBVSxDQUFDLEVBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsWUFBWSxFQUFDLENBQUMsTUFBTSxFQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsZ0JBQWdCLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLFNBQVMsRUFBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUMsTUFBTSxDQUFDLEVBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxhQUFhLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxZQUFZLEVBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxTQUFTLEVBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsUUFBUSxFQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsZ0JBQWdCLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLFFBQVEsRUFBQyxVQUFVLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLGNBQWMsQ0FBQyxFQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsU0FBUyxFQUFDLGlCQUFpQixDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsT0FBTyxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsTUFBTSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsU0FBUyxFQUFDLGVBQWUsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLHdCQUF3QixFQUFDLENBQUMsUUFBUSxFQUFDLFVBQVUsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFFBQVEsRUFBQyxDQUFDLFNBQVMsRUFBQyxlQUFlLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLGdCQUFnQixDQUFDLEVBQUMsQ0FBQyxnQ0FBZ0MsRUFBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFFBQVEsRUFBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLFFBQVEsRUFBQyxVQUFVLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxjQUFjLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxTQUFTLEVBQUMsZUFBZSxDQUFDLEVBQUMsSUFBSSxFQUFDLEdBQUcsRUFBQyxnQkFBZ0IsRUFBQyxDQUFDLEVBQUMsQ0FBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxZQUFZLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyx1QkFBdUIsRUFBQyxDQUFDLFNBQVMsRUFBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLDBCQUEwQixFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsT0FBTyxFQUFDLENBQUMsU0FBUyxFQUFDLGVBQWUsQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsY0FBYyxDQUFDLEVBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxTQUFTLEVBQUMsZUFBZSxDQUFDLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxjQUFjLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFlBQVksRUFBQyxDQUFDLFNBQVMsRUFBQyxpQkFBaUIsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsV0FBVyxDQUFDLEVBQUMsQ0FBQyxlQUFlLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxFQUFDLGFBQWEsQ0FBQyxFQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxTQUFTLEVBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsU0FBUyxFQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsUUFBUSxFQUFDLFVBQVUsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsV0FBVyxDQUFDLEVBQUMsQ0FBQyxnQkFBZ0IsRUFBQyxDQUFDLFFBQVEsRUFBQyxVQUFVLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxFQUFDLGFBQWEsQ0FBQyxFQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLGFBQWEsQ0FBQyxFQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsU0FBUyxFQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBQyxNQUFNLENBQUMsRUFBQyxDQUFDLG9CQUFvQixFQUFDLENBQUMsU0FBUyxFQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLFNBQVMsRUFBQyxlQUFlLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxRQUFRLEVBQUMsY0FBYyxDQUFDLEVBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsYUFBYSxFQUFDLENBQUMsU0FBUyxFQUFDLGlCQUFpQixDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxXQUFXLENBQUMsRUFBQyxDQUFDLG1CQUFtQixFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxhQUFhLENBQUMsRUFBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxjQUFjLENBQUMsRUFBQyxDQUFDLFFBQVEsRUFBQyxDQUFDLFFBQVEsRUFBQyxVQUFVLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLGVBQWUsQ0FBQyxFQUFDLENBQUMsZUFBZSxFQUFDLENBQUMsU0FBUyxFQUFDLGVBQWUsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLGtCQUFrQixFQUFDLENBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsT0FBTyxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsTUFBTSxFQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxlQUFlLENBQUMsRUFBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFFBQVEsRUFBQyxDQUFDLFFBQVEsRUFBQyxVQUFVLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxTQUFTLEVBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUMsWUFBWSxFQUFDLENBQUMsU0FBUyxFQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUMsV0FBVyxFQUFDLENBQUMsU0FBUyxFQUFDLGlCQUFpQixDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxXQUFXLENBQUMsRUFBQyxDQUFDLFFBQVEsRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLGVBQWUsRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFFBQVEsRUFBQyxDQUFDLFNBQVMsRUFBQyxlQUFlLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxTQUFTLEVBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxXQUFXLENBQUMsRUFBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLFNBQVMsRUFBQyxpQkFBaUIsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFdBQVcsRUFBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsV0FBVyxDQUFDLEVBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxRQUFRLEVBQUMsVUFBVSxDQUFDLEVBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxVQUFVLENBQUMsRUFBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsYUFBYSxDQUFDLEVBQUMsQ0FBQyxXQUFXLEVBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxhQUFhLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLGNBQWMsQ0FBQyxFQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsYUFBYSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsUUFBUSxFQUFDLFVBQVUsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsWUFBWSxDQUFDLEVBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxhQUFhLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxFQUFDLGNBQWMsQ0FBQyxFQUFDLENBQUMsT0FBTyxFQUFDLENBQUMsUUFBUSxFQUFDLFVBQVUsQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsU0FBUyxFQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBQyxNQUFNLENBQUMsRUFBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsY0FBYyxDQUFDLEVBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxhQUFhLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxZQUFZLEVBQUMsQ0FBQyxNQUFNLEVBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFDLEdBQUcsRUFBQyxlQUFlLEVBQUMsQ0FBQyxFQUFDLENBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsTUFBTSxFQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxTQUFTLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxRQUFRLEVBQUMsVUFBVSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsYUFBYSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsWUFBWSxFQUFDLENBQUMsTUFBTSxFQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsYUFBYSxDQUFDLEVBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxFQUFDLFlBQVksQ0FBQyxFQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsYUFBYSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsT0FBTyxFQUFDLENBQUMsUUFBUSxFQUFDLGNBQWMsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLGVBQWUsRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFdBQVcsRUFBQyxDQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFlBQVksRUFBQyxDQUFDLFFBQVEsRUFBQyxVQUFVLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxXQUFXLEVBQUMsQ0FBQyxRQUFRLEVBQUMsVUFBVSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsWUFBWSxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsTUFBTSxDQUFDLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxjQUFjLENBQUMsRUFBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLFFBQVEsRUFBQyxVQUFVLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxrQkFBa0IsRUFBQyxDQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFlBQVksRUFBQyxDQUFDLFNBQVMsRUFBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxZQUFZLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxXQUFXLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxTQUFTLEVBQUMsaUJBQWlCLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLGNBQWMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLFlBQVksRUFBQyxDQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsZUFBZSxDQUFDLEVBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxZQUFZLEVBQUMsQ0FBQyxRQUFRLEVBQUMsVUFBVSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsUUFBUSxFQUFDLGNBQWMsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFlBQVksRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLGFBQWEsRUFBQyxDQUFDLFFBQVEsRUFBQyxVQUFVLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLGFBQWEsQ0FBQyxFQUFDLENBQUMsZUFBZSxFQUFDLENBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsYUFBYSxFQUFDLENBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxjQUFjLENBQUMsRUFBQyxDQUFDLFdBQVcsRUFBQyxDQUFDLFNBQVMsRUFBQyxpQkFBaUIsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLGFBQWEsRUFBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFFBQVEsRUFBQyxDQUFDLFFBQVEsRUFBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLFlBQVksQ0FBQyxFQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsYUFBYSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsTUFBTSxDQUFDLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxhQUFhLENBQUMsRUFBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFdBQVcsRUFBQyxDQUFDLGFBQWEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFFBQVEsRUFBQyxDQUFDLFNBQVMsRUFBQyxpQkFBaUIsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLGtCQUFrQixFQUFDLENBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsU0FBUyxFQUFDLGVBQWUsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLFNBQVMsRUFBQyxlQUFlLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxhQUFhLEVBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLGNBQWMsQ0FBQyxFQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLGFBQWEsQ0FBQyxFQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsUUFBUSxFQUFDLFVBQVUsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLGFBQWEsRUFBQyxDQUFDLFNBQVMsRUFBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxLQUFLLEVBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLGFBQWEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLFFBQVEsRUFBQyxVQUFVLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsR0FBRyxFQUFDLGlCQUFpQixFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsdUJBQXVCLEVBQUMsQ0FBQyxTQUFTLEVBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUMsYUFBYSxFQUFDLENBQUMsU0FBUyxFQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBQyxNQUFNLENBQUMsRUFBQyxDQUFDLGtDQUFrQyxFQUFDLENBQUMsU0FBUyxFQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBQyxNQUFNLENBQUMsRUFBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFlBQVksRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLHVCQUF1QixFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsY0FBYyxFQUFDLENBQUMsYUFBYSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsUUFBUSxFQUFDLFVBQVUsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFlBQVksRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLGNBQWMsRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFdBQVcsRUFBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsV0FBVyxDQUFDLEVBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxRQUFRLEVBQUMsVUFBVSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxpQkFBaUIsRUFBQyxDQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLGNBQWMsRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDLGFBQWEsRUFBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsZUFBZSxDQUFDLEVBQUMsQ0FBQyxhQUFhLEVBQUMsQ0FBQyxRQUFRLEVBQUMsY0FBYyxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsT0FBTyxFQUFDLENBQUMsUUFBUSxFQUFDLFVBQVUsQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsYUFBYSxDQUFDLEVBQUMsQ0FBQyxXQUFXLEVBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxTQUFTLEVBQUMsZUFBZSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsV0FBVyxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLGVBQWUsQ0FBQyxFQUFDLENBQUMsYUFBYSxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxjQUFjLENBQUMsRUFBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLGFBQWEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFFBQVEsRUFBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFlBQVksRUFBQyxDQUFDLE1BQU0sRUFBQyxTQUFTLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxhQUFhLEVBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxTQUFTLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxxQkFBcUIsRUFBQyxDQUFDLFNBQVMsRUFBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUMsTUFBTSxDQUFDLEVBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxRQUFRLEVBQUMsY0FBYyxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsUUFBUSxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxlQUFlLENBQUMsRUFBQyxDQUFDLGNBQWMsRUFBQyxDQUFDLE1BQU0sRUFBQyxTQUFTLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxRQUFRLEVBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxnQkFBZ0IsQ0FBQyxFQUFDLENBQUMsc0JBQXNCLEVBQUMsQ0FBQyxhQUFhLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxnQkFBZ0IsRUFBQyxDQUFDLFFBQVEsRUFBQyxVQUFVLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLGFBQWEsQ0FBQyxFQUFDLENBQUMsZUFBZSxFQUFDLENBQUMsU0FBUyxFQUFDLGVBQWUsQ0FBQyxFQUFDLElBQUksRUFBQyxHQUFHLEVBQUMsZ0JBQWdCLEVBQUMsQ0FBQyxFQUFDLENBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLFNBQVMsRUFBQyxlQUFlLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxZQUFZLEVBQUMsQ0FBQyxNQUFNLEVBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxjQUFjLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLGNBQWMsRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsY0FBYyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsV0FBVyxFQUFDLENBQUMsU0FBUyxFQUFDLGVBQWUsQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLENBQUMsRUFBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLGFBQWEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFFBQVEsRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLFVBQVUsRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsQ0FBQztDQUFDWixJQUFBQSxDQUFDLEdBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFDLENBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsU0FBUyxFQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBQyxNQUFNLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLFNBQVMsRUFBQyxlQUFlLENBQUMsRUFBQyxJQUFJLEVBQUMsTUFBTSxDQUFDLEVBQUMsQ0FBQyx3QkFBd0IsRUFBQyxDQUFDLFNBQVMsRUFBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUMsTUFBTSxDQUFDLEVBQUMsQ0FBQyxnQkFBZ0IsRUFBQyxDQUFDLFNBQVMsRUFBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUMsTUFBTSxDQUFDLEVBQUMsQ0FBQyxjQUFjLEVBQUMsQ0FBQyxTQUFTLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxrQkFBa0IsRUFBQyxDQUFDLFNBQVMsRUFBQyxlQUFlLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxlQUFlLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxXQUFXLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxXQUFXLEVBQUMsQ0FBQyxTQUFTLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxRQUFRLEVBQUMsVUFBVSxDQUFDLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxhQUFhLENBQUMsRUFBQyxDQUFDLFlBQVksRUFBQyxDQUFDLFNBQVMsRUFBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUMsTUFBTSxDQUFDLEVBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxnQkFBZ0IsRUFBQyxDQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsRUFBQyxDQUFDLDBCQUEwQixFQUFDLENBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUMsa0JBQWtCLEVBQUMsQ0FBQyxTQUFTLEVBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxjQUFjLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxjQUFjLEVBQUMsQ0FBQyxTQUFTLEVBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQywyQkFBMkIsRUFBQyxDQUFDLFNBQVMsRUFBQyxlQUFlLENBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxjQUFjLEVBQUMsQ0FBQyxTQUFTLEVBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssQ0FB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QUFNMHhFLGdCQUFnQixHQUFHbmdFLEVBQUksQ0FBQTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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